From 4c5370b835bb5eb2c5b97ec655bfa9bad6752d49 Mon Sep 17 00:00:00 2001 From: YQisme <80308783+YQisme@users.noreply.github.com> Date: Wed, 5 Jul 2023 09:55:53 +0800 Subject: [PATCH 01/63] fix typo (#10591) --- docs/zh_cn/user_guides/test.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/zh_cn/user_guides/test.md b/docs/zh_cn/user_guides/test.md index 1b165b049d9..2ada04d2a01 100644 --- a/docs/zh_cn/user_guides/test.md +++ b/docs/zh_cn/user_guides/test.md @@ -169,7 +169,7 @@ bash tools/dist_test.sh \ 8 ``` -这行命令生成两个 JSON 文件 `./work_dirs/coco_instance/test.bbox.jso` 和 `./work_dirs/coco_instance/test.segm.jsonn`。 +这行命令生成两个 JSON 文件 `./work_dirs/coco_instance/test.bbox.json` 和 `./work_dirs/coco_instance/test.segm.json`。 ### 批量推理 From 239b793ed7a7646572c64030ef3ded50e153ec16 Mon Sep 17 00:00:00 2001 From: YQisme <80308783+YQisme@users.noreply.github.com> Date: Wed, 5 Jul 2023 09:56:26 +0800 Subject: [PATCH 02/63] Update useful_tools.md (#10587) --- docs/en/user_guides/useful_tools.md | 2 +- docs/zh_cn/user_guides/useful_tools.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/user_guides/useful_tools.md b/docs/en/user_guides/useful_tools.md index 007d367ec8c..440c1619e5b 100644 --- a/docs/en/user_guides/useful_tools.md +++ b/docs/en/user_guides/useful_tools.md @@ -120,7 +120,7 @@ images and bounding box annotations) visually, or save the image to a designated directory. ```shell -python tools/misc/browse_dataset.py ${CONFIG} [-h] [--skip-type ${SKIP_TYPE[SKIP_TYPE...]}] [--output-dir ${OUTPUT_DIR}] [--not-show] [--show-interval ${SHOW_INTERVAL}] +python tools/analysis_tools/browse_dataset.py ${CONFIG} [-h] [--skip-type ${SKIP_TYPE[SKIP_TYPE...]}] [--output-dir ${OUTPUT_DIR}] [--not-show] [--show-interval ${SHOW_INTERVAL}] ``` ### Visualize Models diff --git a/docs/zh_cn/user_guides/useful_tools.md b/docs/zh_cn/user_guides/useful_tools.md index e53ffdfc60a..00ed06321ef 100644 --- a/docs/zh_cn/user_guides/useful_tools.md +++ b/docs/zh_cn/user_guides/useful_tools.md @@ -116,7 +116,7 @@ python tools/analysis_tools/analyze_results.py \ `tools/analysis_tools/browse_dataset.py` 可帮助使用者检查所使用的检测数据集(包括图像和标注),或保存图像至指定目录。 ```shell -python tools/misc/browse_dataset.py ${CONFIG} [-h] [--skip-type ${SKIP_TYPE[SKIP_TYPE...]}] [--output-dir ${OUTPUT_DIR}] [--not-show] [--show-interval ${SHOW_INTERVAL}] +python tools/analysis_tools/browse_dataset.py ${CONFIG} [-h] [--skip-type ${SKIP_TYPE[SKIP_TYPE...]}] [--output-dir ${OUTPUT_DIR}] [--not-show] [--show-interval ${SHOW_INTERVAL}] ``` ### 可视化模型 From 15eb6a2dc269676732eb50b1b0693056c979e740 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Wed, 5 Jul 2023 17:50:30 +0800 Subject: [PATCH 03/63] Fix name error in detr metafile.yml (#10595) --- configs/conditional_detr/metafile.yml | 2 +- configs/dab_detr/metafile.yml | 2 +- configs/deformable_detr/metafile.yml | 4 ++-- configs/dino/metafile.yml | 10 +++++----- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/configs/conditional_detr/metafile.yml b/configs/conditional_detr/metafile.yml index dc47fd9f55d..83f5532ce38 100644 --- a/configs/conditional_detr/metafile.yml +++ b/configs/conditional_detr/metafile.yml @@ -19,7 +19,7 @@ Collections: Version: v3.0.0rc6 Models: - - Name: conditional-detr_r50_8xb2-50e_coco.py + - Name: conditional-detr_r50_8xb2-50e_coco In Collection: Conditional DETR Config: configs/conditional_detr/conditional-detr_r50_8xb2-50e_coco.py Metadata: diff --git a/configs/dab_detr/metafile.yml b/configs/dab_detr/metafile.yml index 8a01c702abd..94383a0493b 100644 --- a/configs/dab_detr/metafile.yml +++ b/configs/dab_detr/metafile.yml @@ -19,7 +19,7 @@ Collections: Version: v3.0.0rc6 Models: - - Name: dab-detr_r50_8xb2-50e_coco.py + - Name: dab-detr_r50_8xb2-50e_coco In Collection: DAB-DETR Config: configs/dab_detr/dab-detr_r50_8xb2-50e_coco.py Metadata: diff --git a/configs/deformable_detr/metafile.yml b/configs/deformable_detr/metafile.yml index 0fba0ba09e6..a30c97914ba 100644 --- a/configs/deformable_detr/metafile.yml +++ b/configs/deformable_detr/metafile.yml @@ -31,7 +31,7 @@ Models: box AP: 44.3 Weights: https://download.openmmlab.com/mmdetection/v3.0/deformable_detr/deformable-detr_r50_16xb2-50e_coco/deformable-detr_r50_16xb2-50e_coco_20221029_210934-6bc7d21b.pth - - Name: deformable-detr_refine_r50_16xb2-50e_coco + - Name: deformable-detr-refine_r50_16xb2-50e_coco In Collection: Deformable DETR Config: configs/deformable_detr/deformable-detr-refine_r50_16xb2-50e_coco.py Metadata: @@ -43,7 +43,7 @@ Models: box AP: 46.2 Weights: https://download.openmmlab.com/mmdetection/v3.0/deformable_detr/deformable-detr-refine_r50_16xb2-50e_coco/deformable-detr-refine_r50_16xb2-50e_coco_20221022_225303-844e0f93.pth - - Name: deformable-detr_refine_twostage_r50_16xb2-50e_coco + - Name: deformable-detr-refine-twostage_r50_16xb2-50e_coco In Collection: Deformable DETR Config: configs/deformable_detr/deformable-detr-refine-twostage_r50_16xb2-50e_coco.py Metadata: diff --git a/configs/dino/metafile.yml b/configs/dino/metafile.yml index 89dcb23e509..7f955c01667 100644 --- a/configs/dino/metafile.yml +++ b/configs/dino/metafile.yml @@ -19,7 +19,7 @@ Collections: Version: v3.0.0rc6 Models: - - Name: dino-4scale_r50_8xb2-12e_coco.py + - Name: dino-4scale_r50_8xb2-12e_coco In Collection: DINO Config: configs/dino/dino-4scale_r50_8xb2-12e_coco.py Metadata: @@ -31,7 +31,7 @@ Models: box AP: 49.0 Weights: https://download.openmmlab.com/mmdetection/v3.0/dino/dino-4scale_r50_8xb2-12e_coco/dino-4scale_r50_8xb2-12e_coco_20221202_182705-55b2bba2.pth - - Name: dino-4scale_r50_8xb2-24e_coco.py + - Name: dino-4scale_r50_8xb2-24e_coco In Collection: DINO Config: configs/dino/dino-4scale_r50_8xb2-24e_coco.py Metadata: @@ -40,7 +40,7 @@ Models: - Task: Object Detection Dataset: COCO - - Name: dino-4scale_r50_8xb2-24e_coco.py + - Name: dino-4scale_r50_8xb2-36e_coco In Collection: DINO Config: configs/dino/dino-4scale_r50_8xb2-36e_coco.py Metadata: @@ -49,7 +49,7 @@ Models: - Task: Object Detection Dataset: COCO - - Name: dino-5scale_swin-l_8xb2-12e_coco.py + - Name: dino-5scale_swin-l_8xb2-12e_coco In Collection: DINO Config: configs/dino/dino-5scale_swin-l_8xb2-12e_coco.py Metadata: @@ -61,7 +61,7 @@ Models: box AP: 57.2 Weights: https://download.openmmlab.com/mmdetection/v3.0/dino/dino-5scale_swin-l_8xb2-12e_coco/dino-5scale_swin-l_8xb2-12e_coco_20230228_072924-a654145f.pth - - Name: dino-5scale_swin-l_8xb2-36e_coco.py + - Name: dino-5scale_swin-l_8xb2-36e_coco In Collection: DINO Config: configs/dino/dino-5scale_swin-l_8xb2-36e_coco.py Metadata: From 00c55866ba4156a228df4a5968c0b4347ee5422b Mon Sep 17 00:00:00 2001 From: Kostas Chartomatzis Date: Fri, 21 Jul 2023 02:51:25 +0100 Subject: [PATCH 04/63] Fix grammar/typo (#10667) --- docs/en/get_started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/get_started.md b/docs/en/get_started.md index c00eb96b76c..7b36db1fee2 100644 --- a/docs/en/get_started.md +++ b/docs/en/get_started.md @@ -105,7 +105,7 @@ You will see a list of `DetDataSample`, and the predictions are in the `pred_ins ## Tracking Installation -We recommend that users follow our best practices to install MMDetection for for tracking task. +We recommend that users follow our best practices to install MMDetection for tracking task. ### Best Practices From 3edcc16cd70c402041c7e1fb505588cebd6845b9 Mon Sep 17 00:00:00 2001 From: Max <31512713+max-unfinity@users.noreply.github.com> Date: Fri, 21 Jul 2023 04:56:15 +0300 Subject: [PATCH 05/63] Fix device of the tensors in set_nms (#10574) --- mmdet/models/roi_heads/bbox_heads/multi_instance_bbox_head.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mmdet/models/roi_heads/bbox_heads/multi_instance_bbox_head.py b/mmdet/models/roi_heads/bbox_heads/multi_instance_bbox_head.py index 1c888f1e78d..38e57d2eddd 100644 --- a/mmdet/models/roi_heads/bbox_heads/multi_instance_bbox_head.py +++ b/mmdet/models/roi_heads/bbox_heads/multi_instance_bbox_head.py @@ -601,6 +601,10 @@ def set_nms(bboxes: Tensor, keep = torch.ones(len(ordered_bboxes)) == 1 ruler = torch.arange(len(ordered_bboxes)) + + keep = keep.to(bboxes.device) + ruler = ruler.to(bboxes.device) + while ruler.shape[0] > 0: basement = ruler[0] ruler = ruler[1:] From ae95e10ce1dbd48eb4cab1e067ebb713e6af9852 Mon Sep 17 00:00:00 2001 From: Evan Date: Mon, 24 Jul 2023 10:58:07 +0900 Subject: [PATCH 06/63] Fix: remove some unicode chars from `en/` docs (#10648) --- configs/convnext/README.md | 2 + configs/dsdl/README.md | 4 +- docs/en/get_started.md | 2 +- docs/en/migration/config_migration.md | 2 +- docs/en/notes/changelog.md | 2 +- docs/en/user_guides/dataset_prepare.md | 108 +++++++++--------- docs/en/user_guides/init_cfg.md | 4 +- docs/en/user_guides/semi_det.md | 17 +-- docs/en/user_guides/test.md | 4 +- docs/en/user_guides/train.md | 2 +- docs/en/user_guides/useful_tools.md | 2 +- mmdet/datasets/transforms/loading.py | 6 +- mmdet/datasets/transforms/transforms.py | 2 +- mmdet/datasets/utils.py | 2 +- mmdet/evaluation/metrics/crowdhuman_metric.py | 2 +- .../data_preprocessors/data_preprocessor.py | 6 +- .../track_data_preprocessor.py | 2 +- mmdet/models/dense_heads/base_dense_head.py | 2 +- .../dense_heads/centernet_update_head.py | 2 +- mmdet/models/dense_heads/rtmdet_ins_head.py | 2 +- mmdet/models/dense_heads/yolof_head.py | 4 +- mmdet/models/detectors/rtmdet.py | 2 +- 22 files changed, 93 insertions(+), 88 deletions(-) diff --git a/configs/convnext/README.md b/configs/convnext/README.md index 8764327dc69..33497bb57aa 100644 --- a/configs/convnext/README.md +++ b/configs/convnext/README.md @@ -2,6 +2,8 @@ > [A ConvNet for the 2020s](https://arxiv.org/abs/2201.03545) + + ## Abstract The "Roaring 20s" of visual recognition began with the introduction of Vision Transformers (ViTs), which quickly superseded ConvNets as the state-of-the-art image classification model. A vanilla ViT, on the other hand, faces difficulties when applied to general computer vision tasks such as object detection and semantic segmentation. It is the hierarchical Transformers (e.g., Swin Transformers) that reintroduced several ConvNet priors, making Transformers practically viable as a generic vision backbone and demonstrating remarkable performance on a wide variety of vision tasks. However, the effectiveness of such hybrid approaches is still largely credited to the intrinsic superiority of Transformers, rather than the inherent inductive biases of convolutions. In this work, we reexamine the design spaces and test the limits of what a pure ConvNet can achieve. We gradually "modernize" a standard ResNet toward the design of a vision Transformer, and discover several key components that contribute to the performance difference along the way. The outcome of this exploration is a family of pure ConvNet models dubbed ConvNeXt. Constructed entirely from standard ConvNet modules, ConvNeXts compete favorably with Transformers in terms of accuracy and scalability, achieving 87.8% ImageNet top-1 accuracy and outperforming Swin Transformers on COCO detection and ADE20K segmentation, while maintaining the simplicity and efficiency of standard ConvNets. diff --git a/configs/dsdl/README.md b/configs/dsdl/README.md index 53c8849dc80..f38c3b65ac6 100644 --- a/configs/dsdl/README.md +++ b/configs/dsdl/README.md @@ -1,5 +1,7 @@ # DSDL: Standard Description Language for DataSet + + ## 1. Abstract Data is the cornerstone of artificial intelligence. The efficiency of data acquisition, exchange, and application directly impacts the advances in technologies and applications. Over the long history of AI, a vast quantity of data sets have been developed and distributed. However, these datasets are defined in very different forms, which incurs significant overhead when it comes to exchange, integration, and utilization -- it is often the case that one needs to develop a new customized tool or script in order to incorporate a new dataset into a workflow. @@ -35,7 +37,7 @@ To overcome such difficulties, we develop **Data Set Description Language (DSDL) python tools/train.py {config_file} ``` - - using slrum: + - using slurm: ``` ./tools/slurm_train.sh {partition} {job_name} {config_file} {work_dir} {gpu_nums} diff --git a/docs/en/get_started.md b/docs/en/get_started.md index 7b36db1fee2..f65878b610b 100644 --- a/docs/en/get_started.md +++ b/docs/en/get_started.md @@ -227,7 +227,7 @@ The following table lists affected algorithms. | Operator | Model | | :-----------------------------------------------------: | :--------------------------------------------------------------------------------------: | -| Deformable Convolution/Modulated Deformable Convolution | DCN、Guided Anchoring、RepPoints、CentripetalNet、VFNet、CascadeRPN、NAS-FCOS、DetectoRS | +| Deformable Convolution/Modulated Deformable Convolution | DCN, Guided Anchoring, RepPoints, CentripetalNet, VFNet, CascadeRPN, NAS-FCOS, DetectoRS | | MaskedConv2d | Guided Anchoring | | CARAFE | CARAFE | | SyncBatchNorm | ResNeSt | diff --git a/docs/en/migration/config_migration.md b/docs/en/migration/config_migration.md index 0a390b67bb2..1177fa9faad 100644 --- a/docs/en/migration/config_migration.md +++ b/docs/en/migration/config_migration.md @@ -713,7 +713,7 @@ log_config = dict(interval=50) ```python default_hooks = dict( logger=dict(type='LoggerHook', interval=50)) -# Optional: set moving average window size +# Optional: set moving average window size log_processor = dict( type='LogProcessor', window_size=50) ``` diff --git a/docs/en/notes/changelog.md b/docs/en/notes/changelog.md index 88dfe98145f..3f6b0ab8488 100644 --- a/docs/en/notes/changelog.md +++ b/docs/en/notes/changelog.md @@ -258,7 +258,7 @@ Thanks @liuyanyi, @RangeKing, @lihua199710, @MambaWong, @sanbuphy, @Xiangxu-0103 - Update the docs of GIoU Loss in README (#8810) - Handle dataset wrapper in `inference_detector` (#9144) -- Update the type of `counts` in COCO’s compressed RLE (#9274) +- Update the type of `counts` in COCO's compressed RLE (#9274) - Support saving config file in `print_config` (#9276) - Update docs about video inference (#9305) - Update guide about model deployment (#9344) diff --git a/docs/en/user_guides/dataset_prepare.md b/docs/en/user_guides/dataset_prepare.md index f03f4c57e9e..3aabfb6fa5c 100644 --- a/docs/en/user_guides/dataset_prepare.md +++ b/docs/en/user_guides/dataset_prepare.md @@ -198,17 +198,17 @@ Then the directory should be like this: data ├── coco │ ├── refcoco -│   │   ├── instances.json -│   │   ├── refs(google).p -│   │   └── refs(unc).p -│   ├── refcoco+ -│   │   ├── instances.json -│   │   └── refs(unc).p -│   ├── refcocog -│   │   ├── instances.json -│   │   ├── refs(google).p -│   │   └── refs(umd).p -| |── train2014 +│ │ ├── instances.json +│ │ ├── refs(google).p +│ │ └── refs(unc).p +│ ├── refcoco+ +│ │ ├── instances.json +│ │ └── refs(unc).p +│ ├── refcocog +│ │ ├── instances.json +│ │ ├── refs(google).p +│ │ └── refs(umd).p +│ │── train2014 ``` ### ADE20K 2016 Dataset Preparation @@ -234,49 +234,49 @@ The directory should be like this. ```text data ├── ADEChallengeData2016 -│   ├── ade20k_instance_train.json -│   ├── ade20k_instance_val.json -│   ├── ade20k_panoptic_train -| | ├── ADE_train_00000001.png -| | ├── ADE_train_00000002.png -| | ├── ... -│   ├── ade20k_panoptic_train.json -│   ├── ade20k_panoptic_val -| | ├── ADE_val_00000001.png -| | ├── ADE_val_00000002.png -| | ├── ... -│   ├── ade20k_panoptic_val.json -│   ├── annotations -| | ├── training -| | | ├── ADE_train_00000001.png -| | | ├── ADE_train_00000002.png -| | | ├── ... -| | ├── validation -| | | ├── ADE_val_00000001.png -| | | ├── ADE_val_00000002.png -| | | ├── ... -│   ├── annotations_instance -| | ├── training -| | | ├── ADE_train_00000001.png -| | | ├── ADE_train_00000002.png -| | | ├── ... -| | ├── validation -| | | ├── ADE_val_00000001.png -| | | ├── ADE_val_00000002.png -| | | ├── ... -│   ├── categoryMapping.txt -│   ├── images -│   | ├── training -| | | ├── ADE_train_00000001.jpg -| | | ├── ADE_train_00000002.jpg -| | | ├── ... -| | ├── validation -| | | ├── ADE_val_00000001.jpg -| | | ├── ADE_val_00000002.jpg -| | | ├── ... -│   ├── imgCatIds.json -│   ├── objectInfo150.txt -| |── sceneCategories.txt +│ ├── ade20k_instance_train.json +│ ├── ade20k_instance_val.json +│ ├── ade20k_panoptic_train +│ │ ├── ADE_train_00000001.png +│ │ ├── ADE_train_00000002.png +│ │ ├── ... +│ ├── ade20k_panoptic_train.json +│ ├── ade20k_panoptic_val +│ │ ├── ADE_val_00000001.png +│ │ ├── ADE_val_00000002.png +│ │ ├── ... +│ ├── ade20k_panoptic_val.json +│ ├── annotations +│ │ ├── training +│ │ │ ├── ADE_train_00000001.png +│ │ │ ├── ADE_train_00000002.png +│ │ │ ├── ... +│ │ ├── validation +│ │ │ ├── ADE_val_00000001.png +│ │ │ ├── ADE_val_00000002.png +│ │ │ ├── ... +│ ├── annotations_instance +│ │ ├── training +│ │ │ ├── ADE_train_00000001.png +│ │ │ ├── ADE_train_00000002.png +│ │ │ ├── ... +│ │ ├── validation +│ │ │ ├── ADE_val_00000001.png +│ │ │ ├── ADE_val_00000002.png +│ │ │ ├── ... +│ ├── categoryMapping.txt +│ ├── images +│ │ ├── training +│ │ │ ├── ADE_train_00000001.jpg +│ │ │ ├── ADE_train_00000002.jpg +│ │ │ ├── ... +│ │ ├── validation +│ │ │ ├── ADE_val_00000001.jpg +│ │ │ ├── ADE_val_00000002.jpg +│ │ │ ├── ... +│ ├── imgCatIds.json +│ ├── objectInfo150.txt +│ │── sceneCategories.txt ``` The above folders include all data of ADE20K's semantic segmentation, instance segmentation, and panoptic segmentation. diff --git a/docs/en/user_guides/init_cfg.md b/docs/en/user_guides/init_cfg.md index 2af6da6e722..312b67a875b 100644 --- a/docs/en/user_guides/init_cfg.md +++ b/docs/en/user_guides/init_cfg.md @@ -111,7 +111,7 @@ init_cfg = [dict(type='Constant', layer='Conv1d', val=1), - When initializing some specific part with its attribute name, we can use `override` key, and the value in `override` will ignore the value in init_cfg. ```python - # layers: + # layers: # self.feat = nn.Conv1d(3, 1, 3) # self.reg = nn.Conv2d(3, 3, 3) # self.cls = nn.Linear(1,2) @@ -126,7 +126,7 @@ init_cfg = [dict(type='Constant', layer='Conv1d', val=1), - If `layer` is None in init_cfg, only sub-module with the name in override will be initialized, and type and other args in override can be omitted. ```python - # layers: + # layers: # self.feat = nn.Conv1d(3, 1, 3) # self.reg = nn.Conv2d(3, 3, 3) # self.cls = nn.Linear(1,2) diff --git a/docs/en/user_guides/semi_det.md b/docs/en/user_guides/semi_det.md index 94ec3d670c8..ee86c302f33 100644 --- a/docs/en/user_guides/semi_det.md +++ b/docs/en/user_guides/semi_det.md @@ -4,12 +4,13 @@ Semi-supervised object detection uses both labeled data and unlabeled data for t A typical procedure to train a semi-supervised object detector is as below: -- [Prepare and split dataset](#Prepare-and-split-dataset) -- [Configure multi-branch pipeline](#Configure-multi-branch-pipeline) -- [Configure semi-supervised dataloader](#Configure-semi-supervised-dataloader) -- [Configure semi-supervised model](#Configure-semi-supervised-model) -- [Configure MeanTeacherHook](#Configure-MeanTeacherHook) -- [Configure TeacherStudentValLoop](#Configure-TeacherStudentValLoop) +- [Semi-supervised Object Detection](#semi-supervised-object-detection) + - [Prepare and split dataset](#prepare-and-split-dataset) + - [Configure multi-branch pipeline](#configure-multi-branch-pipeline) + - [Configure semi-supervised dataloader](#configure-semi-supervised-dataloader) + - [Configure semi-supervised model](#configure-semi-supervised-model) + - [Configure MeanTeacherHook](#configure-meanteacherhook) + - [Configure TeacherStudentValLoop](#configure-teacherstudentvalloop) ## Prepare and split dataset @@ -111,7 +112,7 @@ and [pseudo label](https://www.researchgate.net/profile/Dong-Hyun-Lee/publicatio Consistency regularization often requires some careful design, while pseudo label have a simpler form and are easier to extend to downstream tasks. We adopt a teacher-student joint training semi-supervised object detection framework based on pseudo label, so labeled data and unlabeled data need to configure different data pipeline: -(1) Pipeline for labeled data: +(1) Pipeline for labeled data: ```python # pipeline used to augment labeled data, @@ -127,7 +128,7 @@ sup_pipeline = [ ] ``` -(2) Pipeline for unlabeled data: +(2) Pipeline for unlabeled data: ```python # pipeline used to augment unlabeled data weakly, diff --git a/docs/en/user_guides/test.md b/docs/en/user_guides/test.md index a7855e10ec7..129a2409021 100644 --- a/docs/en/user_guides/test.md +++ b/docs/en/user_guides/test.md @@ -138,7 +138,7 @@ Assuming that you have already downloaded the checkpoints to the directory `chec MMDetection supports to test models without ground-truth annotations using `CocoDataset`. If your dataset format is not in COCO format, please convert them to COCO format. For example, if your dataset format is VOC, you can directly convert it to COCO format by the [script in tools.](../../../tools/dataset_converters/pascal_voc.py) If your dataset format is Cityscapes, you can directly convert it to COCO format by the [script in tools.](../../../tools/dataset_converters/cityscapes.py) The rest of the formats can be converted using [this script](../../../tools/dataset_converters/images2coco.py). -```shel +```shell python tools/dataset_converters/images2coco.py \ ${IMG_PATH} \ ${CLASSES} \ @@ -146,7 +146,7 @@ python tools/dataset_converters/images2coco.py \ [--exclude-extensions] ``` -arguments: +arguments: - `IMG_PATH`: The root path of images. - `CLASSES`: The text file with a list of categories. diff --git a/docs/en/user_guides/train.md b/docs/en/user_guides/train.md index b67555fd822..a68d5e4fa11 100644 --- a/docs/en/user_guides/train.md +++ b/docs/en/user_guides/train.md @@ -392,7 +392,7 @@ Using the function above, users can successfully convert the annotation file int ## Prepare a config -The second step is to prepare a config thus the dataset could be successfully loaded. Assume that we want to use Mask R-CNN with FPN, the config to train the detector on balloon dataset is as below. Assume the config is under directory `configs/balloon/` and named as `mask-rcnn_r50-caffe_fpn_ms-poly-1x_balloon.py`, the config is as below. Please refer [Learn about Configs — MMDetection 3.0.0 documentation](https://mmdetection.readthedocs.io/en/latest/user_guides/config.html) to get detailed information about config files. +The second step is to prepare a config thus the dataset could be successfully loaded. Assume that we want to use Mask R-CNN with FPN, the config to train the detector on balloon dataset is as below. Assume the config is under directory `configs/balloon/` and named as `mask-rcnn_r50-caffe_fpn_ms-poly-1x_balloon.py`, the config is as below. Please refer [Learn about Configs - MMDetection 3.0.0 documentation](https://mmdetection.readthedocs.io/en/latest/user_guides/config.html) to get detailed information about config files. ```python # The new config inherits a base config to highlight the necessary modification diff --git a/docs/en/user_guides/useful_tools.md b/docs/en/user_guides/useful_tools.md index 440c1619e5b..eb626624f6e 100644 --- a/docs/en/user_guides/useful_tools.md +++ b/docs/en/user_guides/useful_tools.md @@ -71,7 +71,7 @@ Description of all arguments: - `config` : The path of a model config file. - `prediction_path`: Output result file in pickle format from `tools/test.py` - `show_dir`: Directory where painted GT and detection images will be saved -- `--show`:Determines whether to show painted images, If not specified, it will be set to `False` +- `--show`: Determines whether to show painted images, If not specified, it will be set to `False` - `--wait-time`: The interval of show (s), 0 is block - `--topk`: The number of saved images that have the highest and lowest `topk` scores after sorting. If not specified, it will be set to `20`. - `--show-score-thr`: Show score threshold. If not specified, it will be set to `0`. diff --git a/mmdet/datasets/transforms/loading.py b/mmdet/datasets/transforms/loading.py index 95945a82d88..722d4b0e7c8 100644 --- a/mmdet/datasets/transforms/loading.py +++ b/mmdet/datasets/transforms/loading.py @@ -176,10 +176,10 @@ class LoadAnnotations(MMCV_LoadAnnotations): # 1. If list[list[float]], it represents a list of polygons, # one for each connected component of the object. Each # list[float] is one simple polygon in the format of - # [x1, y1, ..., xn, yn] (n≥3). The Xs and Ys are absolute + # [x1, y1, ..., xn, yn] (n >= 3). The Xs and Ys are absolute # coordinates in unit of pixels. # 2. If dict, it represents the per-pixel segmentation mask in - # COCO’s compressed RLE format. The dict should have keys + # COCO's compressed RLE format. The dict should have keys # “size” and “counts”. Can be loaded by pycocotools 'mask': list[list[float]] or dict, @@ -950,7 +950,7 @@ class LoadTrackAnnotations(LoadAnnotations): # 1. If list[list[float]], it represents a list of polygons, # one for each connected component of the object. Each # list[float] is one simple polygon in the format of - # [x1, y1, ..., xn, yn] (n≥3). The Xs and Ys are absolute + # [x1, y1, ..., xn, yn] (n >= 3). The Xs and Ys are absolute # coordinates in unit of pixels. # 2. If dict, it represents the per-pixel segmentation mask in # COCO's compressed RLE format. The dict should have keys diff --git a/mmdet/datasets/transforms/transforms.py b/mmdet/datasets/transforms/transforms.py index 9d1c1ed71ab..01379a2cd01 100644 --- a/mmdet/datasets/transforms/transforms.py +++ b/mmdet/datasets/transforms/transforms.py @@ -56,7 +56,7 @@ def _fixed_scale_size( if isinstance(scale, (float, int)): scale = (scale, scale) w, h = size - # don’t need o.5 offset + # don't need o.5 offset return int(w * float(scale[0])), int(h * float(scale[1])) diff --git a/mmdet/datasets/utils.py b/mmdet/datasets/utils.py index a281fb0b99e..d794eb4b06e 100644 --- a/mmdet/datasets/utils.py +++ b/mmdet/datasets/utils.py @@ -37,7 +37,7 @@ def get_loading_pipeline(pipeline): loading_pipeline_cfg = [] for cfg in pipeline: obj_cls = TRANSFORMS.get(cfg['type']) - # TODO:use more elegant way to distinguish loading modules + # TODO:use more elegant way to distinguish loading modules if obj_cls is not None and obj_cls in (LoadImageFromFile, LoadAnnotations, LoadPanopticAnnotations): diff --git a/mmdet/evaluation/metrics/crowdhuman_metric.py b/mmdet/evaluation/metrics/crowdhuman_metric.py index de2a54edc2b..50ac210ae86 100644 --- a/mmdet/evaluation/metrics/crowdhuman_metric.py +++ b/mmdet/evaluation/metrics/crowdhuman_metric.py @@ -276,7 +276,7 @@ def eval_ap(score_list, gt_num, img_num): a list of tuples (dtbox, label, imgID) in the descending sort of dtbox.score. gt_num(int): The number of gt boxes in the entire dataset. - img_num(int): The number of images in the entire dataset. + img_num(int): The number of images in the entire dataset. Returns: ap(float): result of average precision. diff --git a/mmdet/models/data_preprocessors/data_preprocessor.py b/mmdet/models/data_preprocessors/data_preprocessor.py index 9704d106ba1..788fe115c62 100644 --- a/mmdet/models/data_preprocessors/data_preprocessor.py +++ b/mmdet/models/data_preprocessors/data_preprocessor.py @@ -108,7 +108,7 @@ def __init__(self, self.boxtype2tensor = boxtype2tensor def forward(self, data: dict, training: bool = False) -> dict: - """Perform normalization、padding and bgr2rgb conversion based on + """Perform normalization,padding and bgr2rgb conversion based on ``BaseDataPreprocessor``. Args: @@ -179,7 +179,7 @@ def _get_pad_shape(self, data: dict) -> List[tuple]: else: raise TypeError('Output of `cast_data` should be a dict ' 'or a tuple with inputs and data_samples, but got' - f'{type(data)}: {data}') + f'{type(data)}: {data}') return batch_pad_shape def pad_gt_masks(self, @@ -474,7 +474,7 @@ def __init__(self, data_preprocessor: ConfigType) -> None: self.data_preprocessor = MODELS.build(data_preprocessor) def forward(self, data: dict, training: bool = False) -> dict: - """Perform normalization、padding and bgr2rgb conversion based on + """Perform normalization,padding and bgr2rgb conversion based on ``BaseDataPreprocessor`` for multi-branch data. Args: diff --git a/mmdet/models/data_preprocessors/track_data_preprocessor.py b/mmdet/models/data_preprocessors/track_data_preprocessor.py index 99fdd0105cf..40a65b8eaeb 100644 --- a/mmdet/models/data_preprocessors/track_data_preprocessor.py +++ b/mmdet/models/data_preprocessors/track_data_preprocessor.py @@ -72,7 +72,7 @@ def __init__(self, torch.tensor(std).view(1, -1, 1, 1), False) def forward(self, data: dict, training: bool = False) -> Dict: - """Perform normalization、padding and bgr2rgb conversion based on + """Perform normalization,padding and bgr2rgb conversion based on ``TrackDataPreprocessor``. Args: diff --git a/mmdet/models/dense_heads/base_dense_head.py b/mmdet/models/dense_heads/base_dense_head.py index 02a397c62f9..ed05e683052 100644 --- a/mmdet/models/dense_heads/base_dense_head.py +++ b/mmdet/models/dense_heads/base_dense_head.py @@ -461,7 +461,7 @@ def _bbox_post_process(self, results.bboxes = scale_boxes(results.bboxes, scale_factor) if hasattr(results, 'score_factors'): - # TODO: Add sqrt operation in order to be consistent with + # TODO: Add sqrt operation in order to be consistent with # the paper. score_factors = results.pop('score_factors') results.scores = results.scores * score_factors diff --git a/mmdet/models/dense_heads/centernet_update_head.py b/mmdet/models/dense_heads/centernet_update_head.py index 2eb44edaf8b..00cfcb89806 100644 --- a/mmdet/models/dense_heads/centernet_update_head.py +++ b/mmdet/models/dense_heads/centernet_update_head.py @@ -366,7 +366,7 @@ def _get_targets_single(self, gt_instances: InstanceData, points: Tensor, inside_gt_center3x3_mask = (dist_x <= strides[..., 0]) & \ (dist_y <= strides[..., 0]) - # condition3: limit the regression range for each location + # condition3: limit the regression range for each location bbox_target_wh = bbox_target[..., :2] + bbox_target[..., 2:] crit = (bbox_target_wh**2).sum(dim=2)**0.5 / 2 inside_fpn_level_mask = (crit >= regress_ranges[:, [0]]) & \ diff --git a/mmdet/models/dense_heads/rtmdet_ins_head.py b/mmdet/models/dense_heads/rtmdet_ins_head.py index 729a4492f0b..261a57fe485 100644 --- a/mmdet/models/dense_heads/rtmdet_ins_head.py +++ b/mmdet/models/dense_heads/rtmdet_ins_head.py @@ -466,7 +466,7 @@ def _bbox_mask_post_process( results.bboxes = scale_boxes(results.bboxes, scale_factor) if hasattr(results, 'score_factors'): - # TODO: Add sqrt operation in order to be consistent with + # TODO: Add sqrt operation in order to be consistent with # the paper. score_factors = results.pop('score_factors') results.scores = results.scores * score_factors diff --git a/mmdet/models/dense_heads/yolof_head.py b/mmdet/models/dense_heads/yolof_head.py index bef4d8803c9..b5e5e6b7a92 100644 --- a/mmdet/models/dense_heads/yolof_head.py +++ b/mmdet/models/dense_heads/yolof_head.py @@ -223,10 +223,10 @@ def get_targets(self, multiple images. Args: - cls_scores_list (list[Tensor]): Classification scores of + cls_scores_list (list[Tensor]): Classification scores of each image. each is a 4D-tensor, the shape is (h * w, num_anchors * num_classes). - bbox_preds_list (list[Tensor]): Bbox preds of each image. + bbox_preds_list (list[Tensor]): Bbox preds of each image. each is a 4D-tensor, the shape is (h * w, num_anchors * 4). anchor_list (list[Tensor]): Anchors of each image. Each element of is a tensor of shape (h * w * num_anchors, 4). diff --git a/mmdet/models/detectors/rtmdet.py b/mmdet/models/detectors/rtmdet.py index cb10f76dd57..b43e053fc41 100644 --- a/mmdet/models/detectors/rtmdet.py +++ b/mmdet/models/detectors/rtmdet.py @@ -46,7 +46,7 @@ def __init__(self, data_preprocessor=data_preprocessor, init_cfg=init_cfg) - # TODO: Waiting for mmengine support + # TODO: Waiting for mmengine support if use_syncbn and get_world_size() > 1: torch.nn.SyncBatchNorm.convert_sync_batchnorm(self) print_log('Using SyncBatchNorm()', 'current') From d26a32d336b06de8fa3eb03278c7e0a3137ee45e Mon Sep 17 00:00:00 2001 From: Xiang Xu Date: Thu, 3 Aug 2023 09:41:28 +0800 Subject: [PATCH 07/63] [Fix] Fix download dataset with `mim` script. (#10727) --- tools/dataset_converters/scripts/preprocess_coco2017.sh | 2 +- tools/dataset_converters/scripts/preprocess_voc2007.sh | 2 +- tools/dataset_converters/scripts/preprocess_voc2012.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/dataset_converters/scripts/preprocess_coco2017.sh b/tools/dataset_converters/scripts/preprocess_coco2017.sh index 1dd7bf96307..9d1e0286c3a 100755 --- a/tools/dataset_converters/scripts/preprocess_coco2017.sh +++ b/tools/dataset_converters/scripts/preprocess_coco2017.sh @@ -12,4 +12,4 @@ unzip $DOWNLOAD_DIR/COCO_2017/raw/Annotations/panoptic_annotations_trainval2017. unzip $DOWNLOAD_DIR/COCO_2017/raw/Annotations/image_info_unlabeled2017.zip -d $DATA_ROOT/ unzip $DOWNLOAD_DIR/COCO_2017/raw/Annotations/image_info_test2017.zip -d $DATA_ROOT/ unzip $DOWNLOAD_DIR/COCO_2017/raw/Annotations/annotations_trainval2017.zip -d $DATA_ROOT -rm -rf $DATA_ROOT/COCO_2017 +rm -rf $DOWNLOAD_DIR/COCO_2017 diff --git a/tools/dataset_converters/scripts/preprocess_voc2007.sh b/tools/dataset_converters/scripts/preprocess_voc2007.sh index e3393834347..dd84503edae 100755 --- a/tools/dataset_converters/scripts/preprocess_voc2007.sh +++ b/tools/dataset_converters/scripts/preprocess_voc2007.sh @@ -5,4 +5,4 @@ DATA_ROOT=$2 tar -xvf $DOWNLOAD_DIR/PASCAL_VOC2007/raw/VOCtrainval_06-Nov-2007.tar -C $DATA_ROOT tar -xvf $DOWNLOAD_DIR/PASCAL_VOC2007/raw/VOCtestnoimgs_06-Nov-2007.tar -C $DATA_ROOT -rm -rf $DATA_ROOT/PASCAL_VOC2007 +rm -rf $DOWNLOAD_DIR/PASCAL_VOC2007 diff --git a/tools/dataset_converters/scripts/preprocess_voc2012.sh b/tools/dataset_converters/scripts/preprocess_voc2012.sh index 385f1aa3471..456e855b019 100755 --- a/tools/dataset_converters/scripts/preprocess_voc2012.sh +++ b/tools/dataset_converters/scripts/preprocess_voc2012.sh @@ -5,4 +5,4 @@ DATA_ROOT=$2 tar -xvf $DOWNLOAD_DIR/PASCAL_VOC2012/raw/VOCtrainval_11-May-2012.tar -C $DATA_ROOT tar -xvf $DOWNLOAD_DIR/PASCAL_VOC2012/raw/VOC2012test.tar -C $DATA_ROOT -rm -rf $DATA_ROOT/PASCAL_VOC2012 +rm -rf $DOWNLOAD_DIR/PASCAL_VOC2012 From cd88ad1dafde55d9f1ac1648dfa43197638cb06c Mon Sep 17 00:00:00 2001 From: Zhao Cake <113616514+ZhaoCake@users.noreply.github.com> Date: Fri, 4 Aug 2023 10:42:06 +0800 Subject: [PATCH 08/63] [CodeCamp2023-476]Add new configuration files for QDTrack algorithm in mmdetection (#10717) --- .../configs/_base_/datasets/mot_challenge.py | 101 +++++++++++++ .../qdtrack_faster_rcnn_r50_fpn_4e_base.py | 141 ++++++++++++++++++ ...xb2-4e_mot17halftrain_test-mot17halfval.py | 14 ++ 3 files changed, 256 insertions(+) create mode 100644 mmdet/configs/_base_/datasets/mot_challenge.py create mode 100644 mmdet/configs/qdtrack/qdtrack_faster_rcnn_r50_fpn_4e_base.py create mode 100644 mmdet/configs/qdtrack/qdtrack_faster_rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py diff --git a/mmdet/configs/_base_/datasets/mot_challenge.py b/mmdet/configs/_base_/datasets/mot_challenge.py new file mode 100644 index 00000000000..a71520a84e5 --- /dev/null +++ b/mmdet/configs/_base_/datasets/mot_challenge.py @@ -0,0 +1,101 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmcv.transforms import (LoadImageFromFile, RandomResize, + TransformBroadcaster) + +from mmdet.datasets import MOTChallengeDataset +from mmdet.datasets.samplers import TrackImgSampler +from mmdet.datasets.transforms import (LoadTrackAnnotations, PackTrackInputs, + PhotoMetricDistortion, RandomCrop, + RandomFlip, Resize, + UniformRefFrameSample) +from mmdet.evaluation import MOTChallengeMetric + +# dataset settings +dataset_type = MOTChallengeDataset +data_root = 'data/MOT17/' +img_scale = (1088, 1088) + +backend_args = None +# data pipeline +train_pipeline = [ + dict( + type=UniformRefFrameSample, + num_ref_imgs=1, + frame_range=10, + filter_key_img=True), + dict( + type=TransformBroadcaster, + share_random_params=True, + transforms=[ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=LoadTrackAnnotations), + dict( + type=RandomResize, + scale=img_scale, + ratio_range=(0.8, 1.2), + keep_ratio=True, + clip_object_border=False), + dict(type=PhotoMetricDistortion) + ]), + dict( + type=TransformBroadcaster, + # different cropped positions for different frames + share_random_params=False, + transforms=[ + dict(type=RandomCrop, crop_size=img_scale, bbox_clip_border=False) + ]), + dict( + type=TransformBroadcaster, + share_random_params=True, + transforms=[ + dict(type=RandomFlip, prob=0.5), + ]), + dict(type=PackTrackInputs) +] + +test_pipeline = [ + dict( + type=TransformBroadcaster, + transforms=[ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=Resize, scale=img_scale, keep_ratio=True), + dict(type=LoadTrackAnnotations) + ]), + dict(type=PackTrackInputs) +] + +# dataloader +train_dataloader = dict( + batch_size=2, + num_workers=2, + persistent_workers=True, + sampler=dict(type=TrackImgSampler), # image-based sampling + dataset=dict( + type=dataset_type, + data_root=data_root, + visibility_thr=-1, + ann_file='annotations/half-train_cocoformat.json', + data_prefix=dict(img_path='train'), + metainfo=dict(classes=('pedestrian', )), + pipeline=train_pipeline)) +val_dataloader = dict( + batch_size=1, + num_workers=2, + persistent_workers=True, + # Now we support two ways to test, image_based and video_based + # if you want to use video_based sampling, you can use as follows + # sampler=dict(type='DefaultSampler', shuffle=False, round_up=False), + sampler=dict(type=TrackImgSampler), # image-based sampling + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/half-val_cocoformat.json', + data_prefix=dict(img_path='train'), + test_mode=True, + pipeline=test_pipeline)) +test_dataloader = val_dataloader + +# evaluator +val_evaluator = dict( + type=MOTChallengeMetric, metric=['HOTA', 'CLEAR', 'Identity']) +test_evaluator = val_evaluator diff --git a/mmdet/configs/qdtrack/qdtrack_faster_rcnn_r50_fpn_4e_base.py b/mmdet/configs/qdtrack/qdtrack_faster_rcnn_r50_fpn_4e_base.py new file mode 100644 index 00000000000..c672e82c649 --- /dev/null +++ b/mmdet/configs/qdtrack/qdtrack_faster_rcnn_r50_fpn_4e_base.py @@ -0,0 +1,141 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmengine.config import read_base + +with read_base(): + from .._base_.models.faster_rcnn_r50_fpn import * + from .._base_.models.faster_rcnn_r50_fpn import model + from .._base_.default_runtime import * + +from mmcv.ops import RoIAlign +from mmengine.hooks import LoggerHook, SyncBuffersHook +from mmengine.model.weight_init import PretrainedInit +from mmengine.optim import MultiStepLR, OptimWrapper +from mmengine.runner.runner import EpochBasedTrainLoop, TestLoop, ValLoop +from torch.nn.modules.batchnorm import BatchNorm2d +from torch.nn.modules.normalization import GroupNorm +from torch.optim import SGD + +from mmdet.engine.hooks import TrackVisualizationHook +from mmdet.models import (QDTrack, QuasiDenseEmbedHead, QuasiDenseTracker, + QuasiDenseTrackHead, SingleRoIExtractor, + TrackDataPreprocessor) +from mmdet.models.losses import (L1Loss, MarginL2Loss, + MultiPosCrossEntropyLoss, SmoothL1Loss) +from mmdet.models.task_modules import (CombinedSampler, + InstanceBalancedPosSampler, + MaxIoUAssigner, RandomSampler) +from mmdet.visualization import TrackLocalVisualizer + +detector = model +detector.pop('data_preprocessor') + +detector['backbone'].update( + dict( + norm_cfg=dict(type=BatchNorm2d, requires_grad=False), + style='caffe', + init_cfg=dict( + type=PretrainedInit, + checkpoint='open-mmlab://detectron2/resnet50_caffe'))) +detector.rpn_head.loss_bbox.update( + dict(type=SmoothL1Loss, beta=1.0 / 9.0, loss_weight=1.0)) +detector.rpn_head.bbox_coder.update(dict(clip_border=False)) +detector.roi_head.bbox_head.update(dict(num_classes=1)) +detector.roi_head.bbox_head.bbox_coder.update(dict(clip_border=False)) +detector['init_cfg'] = dict( + type=PretrainedInit, + checkpoint= # noqa: E251 + 'https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/' + 'faster_rcnn_r50_fpn_1x_coco-person/' + 'faster_rcnn_r50_fpn_1x_coco-person_20201216_175929-d022e227.pth' + # noqa: E501 +) +del model + +model = dict( + type=QDTrack, + data_preprocessor=dict( + type=TrackDataPreprocessor, + mean=[103.530, 116.280, 123.675], + std=[1.0, 1.0, 1.0], + bgr_to_rgb=False, + pad_size_divisor=32), + detector=detector, + track_head=dict( + type=QuasiDenseTrackHead, + roi_extractor=dict( + type=SingleRoIExtractor, + roi_layer=dict(type=RoIAlign, output_size=7, sampling_ratio=0), + out_channels=256, + featmap_strides=[4, 8, 16, 32]), + embed_head=dict( + type=QuasiDenseEmbedHead, + num_convs=4, + num_fcs=1, + embed_channels=256, + norm_cfg=dict(type=GroupNorm, num_groups=32), + loss_track=dict(type=MultiPosCrossEntropyLoss, loss_weight=0.25), + loss_track_aux=dict( + type=MarginL2Loss, + neg_pos_ub=3, + pos_margin=0, + neg_margin=0.1, + hard_mining=True, + loss_weight=1.0)), + loss_bbox=dict(type=L1Loss, loss_weight=1.0), + train_cfg=dict( + assigner=dict( + type=MaxIoUAssigner, + pos_iou_thr=0.7, + neg_iou_thr=0.5, + min_pos_iou=0.5, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type=CombinedSampler, + num=256, + pos_fraction=0.5, + neg_pos_ub=3, + add_gt_as_proposals=True, + pos_sampler=dict(type=InstanceBalancedPosSampler), + neg_sampler=dict(type=RandomSampler)))), + tracker=dict( + type=QuasiDenseTracker, + init_score_thr=0.9, + obj_score_thr=0.5, + match_score_thr=0.5, + memo_tracklet_frames=30, + memo_backdrop_frames=1, + memo_momentum=0.8, + nms_conf_thr=0.5, + nms_backdrop_iou_thr=0.3, + nms_class_iou_thr=0.7, + with_cats=True, + match_metric='bisoftmax')) +# optimizer +optim_wrapper = dict( + type=OptimWrapper, + optimizer=dict(type=SGD, lr=0.02, momentum=0.9, weight_decay=0.0001), + clip_grad=dict(max_norm=35, norm_type=2)) +# learning policy +param_scheduler = [ + dict(type=MultiStepLR, begin=0, end=4, by_epoch=True, milestones=[3]) +] + +# runtime settings +train_cfg = dict(type=EpochBasedTrainLoop, max_epochs=4, val_interval=4) +val_cfg = dict(type=ValLoop) +test_cfg = dict(type=TestLoop) + +default_hooks.update( + logger=dict(type=LoggerHook, interval=50), + visualization=dict(type=TrackVisualizationHook, draw=False)) + +visualizer.update( + type=TrackLocalVisualizer, vis_backends=vis_backends, name='visualizer') + +# custom hooks +custom_hooks = [ + # Synchronize model buffers such as running_mean and running_var in BN + # at the end of each epoch + dict(type=SyncBuffersHook) +] diff --git a/mmdet/configs/qdtrack/qdtrack_faster_rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py b/mmdet/configs/qdtrack/qdtrack_faster_rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py new file mode 100644 index 00000000000..2fa715e1b38 --- /dev/null +++ b/mmdet/configs/qdtrack/qdtrack_faster_rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py @@ -0,0 +1,14 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmengine.config import read_base + +with read_base(): + from .._base_.datasets.mot_challenge import * + from .qdtrack_faster_rcnn_r50_fpn_4e_base import * + +from mmdet.evaluation import CocoVideoMetric, MOTChallengeMetric + +# evaluator +val_evaluator = [ + dict(type=CocoVideoMetric, metric=['bbox'], classwise=True), + dict(type=MOTChallengeMetric, metric=['HOTA', 'CLEAR', 'Identity']) +] From 5412e852879ea83cd9647278620c77bce6c8f3eb Mon Sep 17 00:00:00 2001 From: Range King Date: Mon, 7 Aug 2023 09:28:40 +0800 Subject: [PATCH 09/63] [Fix] misspelling of 'flip' (#10746) --- mmdet/datasets/transforms/transforms.py | 12 ++++++------ mmdet/models/test_time_augs/merge_augs.py | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mmdet/datasets/transforms/transforms.py b/mmdet/datasets/transforms/transforms.py index 01379a2cd01..97b3f636934 100644 --- a/mmdet/datasets/transforms/transforms.py +++ b/mmdet/datasets/transforms/transforms.py @@ -2631,7 +2631,7 @@ def transform(self, results: dict) -> dict: retrieve_img = retrieve_results['img'] jit_factor = random.uniform(*self.ratio_range) - is_filp = random.uniform(0, 1) > self.flip_ratio + is_flip = random.uniform(0, 1) > self.flip_ratio if len(retrieve_img.shape) == 3: out_img = np.ones( @@ -2658,7 +2658,7 @@ def transform(self, results: dict) -> dict: int(out_img.shape[0] * jit_factor))) # 4. flip - if is_filp: + if is_flip: out_img = out_img[:, ::-1, :] # 5. random crop @@ -2684,7 +2684,7 @@ def transform(self, results: dict) -> dict: if self.bbox_clip_border: retrieve_gt_bboxes.clip_([origin_h, origin_w]) - if is_filp: + if is_flip: retrieve_gt_bboxes.flip_([origin_h, origin_w], direction='horizontal') @@ -3728,7 +3728,7 @@ def transform(self, results: dict) -> dict: with_mask = True if 'gt_masks' in results else False jit_factor = random.uniform(*self.ratio_range) - is_filp = random.uniform(0, 1) > self.flip_ratio + is_flip = random.uniform(0, 1) > self.flip_ratio if len(retrieve_img.shape) == 3: out_img = np.ones( @@ -3755,7 +3755,7 @@ def transform(self, results: dict) -> dict: int(out_img.shape[0] * jit_factor))) # 4. flip - if is_filp: + if is_flip: out_img = out_img[:, ::-1, :] # 5. random crop @@ -3785,7 +3785,7 @@ def transform(self, results: dict) -> dict: if self.bbox_clip_border: retrieve_gt_bboxes.clip_([origin_h, origin_w]) - if is_filp: + if is_flip: retrieve_gt_bboxes.flip_([origin_h, origin_w], direction='horizontal') if with_mask: diff --git a/mmdet/models/test_time_augs/merge_augs.py b/mmdet/models/test_time_augs/merge_augs.py index a2f3562ffcf..5935a8614c3 100644 --- a/mmdet/models/test_time_augs/merge_augs.py +++ b/mmdet/models/test_time_augs/merge_augs.py @@ -198,7 +198,7 @@ def merge_aug_masks(aug_masks: List[Tensor], weight = weights[i] else: weight = 1 - flip = img_metas.get('filp', False) + flip = img_metas.get('flip', False) if flip: flip_direction = img_metas['flip_direction'] if flip_direction == 'horizontal': From 4d2fbb0b65e79ce41634227a7f7d85b04418b346 Mon Sep 17 00:00:00 2001 From: WORLD PEACE Date: Tue, 8 Aug 2023 09:48:15 +0800 Subject: [PATCH 10/63] Update formatting.py (#10743) --- mmdet/datasets/transforms/formatting.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mmdet/datasets/transforms/formatting.py b/mmdet/datasets/transforms/formatting.py index 83fada30b1f..05263807c0e 100644 --- a/mmdet/datasets/transforms/formatting.py +++ b/mmdet/datasets/transforms/formatting.py @@ -133,10 +133,8 @@ def transform(self, results: dict) -> dict: img_meta = {} for key in self.meta_keys: - assert key in results, f'`{key}` is not found in `results`, ' \ - f'the valid keys are {list(results)}.' - img_meta[key] = results[key] - + if key in results: + img_meta[key] = results[key] data_sample.set_metainfo(img_meta) packed_results['data_samples'] = data_sample From c442db031c52db35e9a4b5d85d0a2d424d0dcd52 Mon Sep 17 00:00:00 2001 From: Olivier D'Ancona <71207824+ODAncona@users.noreply.github.com> Date: Tue, 8 Aug 2023 03:54:27 +0200 Subject: [PATCH 11/63] fixed export to torcheserve (#10694) --- tools/deployment/mmdet2torchserve.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/deployment/mmdet2torchserve.py b/tools/deployment/mmdet2torchserve.py index 91d13287f22..9d539e8e9f5 100644 --- a/tools/deployment/mmdet2torchserve.py +++ b/tools/deployment/mmdet2torchserve.py @@ -53,6 +53,7 @@ def mmdet2torchserve( args = Namespace( **{ 'model_file': f'{tmpdir}/config.py', + 'config_file': f'{tmpdir}/config.py', 'serialized_file': checkpoint_file, 'handler': f'{Path(__file__).parent}/mmdet_handler.py', 'model_name': model_name or Path(checkpoint_file).stem, From 6a616f123034004b766b3728a1d9c88276bf2969 Mon Sep 17 00:00:00 2001 From: Aaron Sun Date: Tue, 8 Aug 2023 13:08:45 +0800 Subject: [PATCH 12/63] [Fix] Fix typo in mask-rcnn_r50_fpn_1x-wandb_coco (#10757) --- configs/mask_rcnn/mask-rcnn_r50_fpn_1x-wandb_coco.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/mask_rcnn/mask-rcnn_r50_fpn_1x-wandb_coco.py b/configs/mask_rcnn/mask-rcnn_r50_fpn_1x-wandb_coco.py index 364e0aa42aa..28b125ccb94 100644 --- a/configs/mask_rcnn/mask-rcnn_r50_fpn_1x-wandb_coco.py +++ b/configs/mask_rcnn/mask-rcnn_r50_fpn_1x-wandb_coco.py @@ -4,7 +4,7 @@ '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' ] -vis_backends = [dict(type='LocalVisBackend'), dict(type='WandBVisBackend')] +vis_backends = [dict(type='LocalVisBackend'), dict(type='WandbVisBackend')] visualizer = dict(vis_backends=vis_backends) # MMEngine support the following two ways, users can choose From a066ef4e738867cc38e6b08a9ced003f414af708 Mon Sep 17 00:00:00 2001 From: Zeyuan Date: Mon, 14 Aug 2023 09:42:08 +0400 Subject: [PATCH 13/63] [CodeCamp2023-604] Add new configuration files for DETR algorithm in mmdetection (#10785) --- .../configs/detr/detr_r101_8xb2_500e_coco.py | 13 ++ mmdet/configs/detr/detr_r18_8xb2_500e_coco.py | 14 ++ mmdet/configs/detr/detr_r50_8xb2_150e_coco.py | 182 ++++++++++++++++++ mmdet/configs/detr/detr_r50_8xb2_500e_coco.py | 25 +++ 4 files changed, 234 insertions(+) create mode 100644 mmdet/configs/detr/detr_r101_8xb2_500e_coco.py create mode 100644 mmdet/configs/detr/detr_r18_8xb2_500e_coco.py create mode 100644 mmdet/configs/detr/detr_r50_8xb2_150e_coco.py create mode 100644 mmdet/configs/detr/detr_r50_8xb2_500e_coco.py diff --git a/mmdet/configs/detr/detr_r101_8xb2_500e_coco.py b/mmdet/configs/detr/detr_r101_8xb2_500e_coco.py new file mode 100644 index 00000000000..b961468114c --- /dev/null +++ b/mmdet/configs/detr/detr_r101_8xb2_500e_coco.py @@ -0,0 +1,13 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmengine.config import read_base +from mmengine.model.weight_init import PretrainedInit + +with read_base(): + from .detr_r50_8xb2_500e_coco import * + +model.update( + dict( + backbone=dict( + depth=101, + init_cfg=dict( + type=PretrainedInit, checkpoint='torchvision://resnet101')))) diff --git a/mmdet/configs/detr/detr_r18_8xb2_500e_coco.py b/mmdet/configs/detr/detr_r18_8xb2_500e_coco.py new file mode 100644 index 00000000000..11360af18de --- /dev/null +++ b/mmdet/configs/detr/detr_r18_8xb2_500e_coco.py @@ -0,0 +1,14 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmengine.config import read_base +from mmengine.model.weight_init import PretrainedInit + +with read_base(): + from .detr_r50_8xb2_500e_coco import * + +model.update( + dict( + backbone=dict( + depth=18, + init_cfg=dict( + type=PretrainedInit, checkpoint='torchvision://resnet18')), + neck=dict(in_channels=[512]))) diff --git a/mmdet/configs/detr/detr_r50_8xb2_150e_coco.py b/mmdet/configs/detr/detr_r50_8xb2_150e_coco.py new file mode 100644 index 00000000000..c50726c7890 --- /dev/null +++ b/mmdet/configs/detr/detr_r50_8xb2_150e_coco.py @@ -0,0 +1,182 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmcv.transforms import RandomChoice, RandomChoiceResize +from mmcv.transforms.loading import LoadImageFromFile +from mmengine.config import read_base +from mmengine.model.weight_init import PretrainedInit +from mmengine.optim.optimizer.optimizer_wrapper import OptimWrapper +from mmengine.optim.scheduler.lr_scheduler import MultiStepLR +from mmengine.runner.loops import EpochBasedTrainLoop, TestLoop, ValLoop +from torch.nn.modules.activation import ReLU +from torch.nn.modules.batchnorm import BatchNorm2d +from torch.optim.adamw import AdamW + +from mmdet.datasets.transforms import (LoadAnnotations, PackDetInputs, + RandomCrop, RandomFlip, Resize) +from mmdet.models import (DETR, ChannelMapper, DetDataPreprocessor, DETRHead, + ResNet) +from mmdet.models.losses.cross_entropy_loss import CrossEntropyLoss +from mmdet.models.losses.iou_loss import GIoULoss +from mmdet.models.losses.smooth_l1_loss import L1Loss +from mmdet.models.task_modules import (BBoxL1Cost, ClassificationCost, + HungarianAssigner, IoUCost) + +with read_base(): + from .._base_.datasets.coco_detection import * + from .._base_.default_runtime import * + +model = dict( + type=DETR, + num_queries=100, + data_preprocessor=dict( + type=DetDataPreprocessor, + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True, + pad_size_divisor=1), + backbone=dict( + type=ResNet, + depth=50, + num_stages=4, + out_indices=(3, ), + frozen_stages=1, + norm_cfg=dict(type=BatchNorm2d, requires_grad=False), + norm_eval=True, + style='pytorch', + init_cfg=dict( + type=PretrainedInit, checkpoint='torchvision://resnet50')), + neck=dict( + type=ChannelMapper, + in_channels=[2048], + kernel_size=1, + out_channels=256, + act_cfg=None, + norm_cfg=None, + num_outs=1), + encoder=dict( # DetrTransformerEncoder + num_layers=6, + layer_cfg=dict( # DetrTransformerEncoderLayer + self_attn_cfg=dict( # MultiheadAttention + embed_dims=256, + num_heads=8, + dropout=0.1, + batch_first=True), + ffn_cfg=dict( + embed_dims=256, + feedforward_channels=2048, + num_fcs=2, + ffn_drop=0.1, + act_cfg=dict(type=ReLU, inplace=True)))), + decoder=dict( # DetrTransformerDecoder + num_layers=6, + layer_cfg=dict( # DetrTransformerDecoderLayer + self_attn_cfg=dict( # MultiheadAttention + embed_dims=256, + num_heads=8, + dropout=0.1, + batch_first=True), + cross_attn_cfg=dict( # MultiheadAttention + embed_dims=256, + num_heads=8, + dropout=0.1, + batch_first=True), + ffn_cfg=dict( + embed_dims=256, + feedforward_channels=2048, + num_fcs=2, + ffn_drop=0.1, + act_cfg=dict(type=ReLU, inplace=True))), + return_intermediate=True), + positional_encoding=dict(num_feats=128, normalize=True), + bbox_head=dict( + type=DETRHead, + num_classes=80, + embed_dims=256, + loss_cls=dict( + type=CrossEntropyLoss, + bg_cls_weight=0.1, + use_sigmoid=False, + loss_weight=1.0, + class_weight=1.0), + loss_bbox=dict(type=L1Loss, loss_weight=5.0), + loss_iou=dict(type=GIoULoss, loss_weight=2.0)), + # training and testing settings + train_cfg=dict( + assigner=dict( + type=HungarianAssigner, + match_costs=[ + dict(type=ClassificationCost, weight=1.), + dict(type=BBoxL1Cost, weight=5.0, box_format='xywh'), + dict(type=IoUCost, iou_mode='giou', weight=2.0) + ])), + test_cfg=dict(max_per_img=100)) + +# train_pipeline, NOTE the img_scale and the Pad's size_divisor is different +# from the default setting in mmdet. +train_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=LoadAnnotations, with_bbox=True), + dict(type=RandomFlip, prob=0.5), + dict( + type=RandomChoice, + transforms=[[ + dict( + type=RandomChoiceResize, + resize_type=Resize, + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ], + [ + dict( + type=RandomChoiceResize, + resize_type=Resize, + scales=[(400, 1333), (500, 1333), (600, 1333)], + keep_ratio=True), + dict( + type=RandomCrop, + crop_type='absolute_range', + crop_size=(384, 600), + allow_negative_crop=True), + dict( + type=RandomChoiceResize, + resize_type=Resize, + scales=[(480, 1333), (512, 1333), (544, 1333), + (576, 1333), (608, 1333), (640, 1333), + (672, 1333), (704, 1333), (736, 1333), + (768, 1333), (800, 1333)], + keep_ratio=True) + ]]), + dict(type=PackDetInputs) +] +train_dataloader.update(dataset=dict(pipeline=train_pipeline)) + +# optimizer +optim_wrapper = dict( + type=OptimWrapper, + optimizer=dict(type=AdamW, lr=0.0001, weight_decay=0.0001), + clip_grad=dict(max_norm=0.1, norm_type=2), + paramwise_cfg=dict( + custom_keys={'backbone': dict(lr_mult=0.1, decay_mult=1.0)})) + +# learning policy +max_epochs = 150 +train_cfg = dict( + type=EpochBasedTrainLoop, max_epochs=max_epochs, val_interval=1) +val_cfg = dict(type=ValLoop) +test_cfg = dict(type=TestLoop) + +param_scheduler = [ + dict( + type=MultiStepLR, + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[100], + gamma=0.1) +] + +# NOTE: `auto_scale_lr` is for automatically scaling LR, +# USER SHOULD NOT CHANGE ITS VALUES. +# base_batch_size = (8 GPUs) x (2 samples per GPU) +auto_scale_lr = dict(base_batch_size=16) diff --git a/mmdet/configs/detr/detr_r50_8xb2_500e_coco.py b/mmdet/configs/detr/detr_r50_8xb2_500e_coco.py new file mode 100644 index 00000000000..d7d08177662 --- /dev/null +++ b/mmdet/configs/detr/detr_r50_8xb2_500e_coco.py @@ -0,0 +1,25 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmengine.config import read_base +from mmengine.optim.scheduler.lr_scheduler import MultiStepLR +from mmengine.runner.loops import EpochBasedTrainLoop + +with read_base(): + from .detr_r50_8xb2_150e_coco import * + +# learning policy +max_epochs = 500 +train_cfg.update( + type=EpochBasedTrainLoop, max_epochs=max_epochs, val_interval=10) + +param_scheduler = [ + dict( + type=MultiStepLR, + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[334], + gamma=0.1) +] + +# only keep latest 2 checkpoints +default_hooks.update(checkpoint=dict(max_keep_ckpts=2)) From 635c4bf7b667a66123afde4951abbec55c7662f4 Mon Sep 17 00:00:00 2001 From: Hyeseong Lee Date: Mon, 14 Aug 2023 14:54:52 +0900 Subject: [PATCH 14/63] [Fix] fix eval_recalls error in `voc_metric` (#10770) --- mmdet/evaluation/metrics/voc_metric.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mmdet/evaluation/metrics/voc_metric.py b/mmdet/evaluation/metrics/voc_metric.py index d4b7c14af88..32d8c075de9 100644 --- a/mmdet/evaluation/metrics/voc_metric.py +++ b/mmdet/evaluation/metrics/voc_metric.py @@ -157,11 +157,11 @@ def compute_metrics(self, results: list) -> dict: eval_results['mAP'] = sum(mean_aps) / len(mean_aps) eval_results.move_to_end('mAP', last=False) elif self.metric == 'recall': - # TODO: Currently not checked. - gt_bboxes = [ann['bboxes'] for ann in self.annotations] + gt_bboxes = [gt['bboxes'] for gt in gts] + pr_bboxes = [pred[0] for pred in preds] recalls = eval_recalls( gt_bboxes, - results, + pr_bboxes, self.proposal_nums, self.iou_thrs, logger=logger, From 19ed2f1445f9a328e5ea8e415e2558f3421466ed Mon Sep 17 00:00:00 2001 From: Siyuan Mu <122623942+Musiyuan@users.noreply.github.com> Date: Mon, 14 Aug 2023 14:01:07 +0800 Subject: [PATCH 15/63] [CodeCamp2023-496] Translation into Chinese of an English document. (#10744) Co-authored-by: Musiyuan --- .../user_guides/tracking_interference.md | 55 +++++++++++++++++++ .../user_guides/tracking_visualization.md | 51 +++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 docs/zh_cn/user_guides/tracking_interference.md create mode 100644 docs/zh_cn/user_guides/tracking_visualization.md diff --git a/docs/zh_cn/user_guides/tracking_interference.md b/docs/zh_cn/user_guides/tracking_interference.md new file mode 100644 index 00000000000..1b1fc08aeeb --- /dev/null +++ b/docs/zh_cn/user_guides/tracking_interference.md @@ -0,0 +1,55 @@ +# 推理 + +我们提供了一些演示脚本去推理一个给出的视频,或者是推理包含一系列连续照片的文件夹。想要获取该代码资源,请点击 [这里](https://github.com/open-mmlab/mmdetection/tree/tracking/demo)。 + +若输入为文件夹格式,你需要标明这点。并且,图片命名应该**易于整理**,以便于你根据文件名字中包含的数字信息来重新调整图片的顺序。我们现在只支持 `.jpg`,`.jpeg` 和 `.png` 格式的图片。 + +## MOT models 的推理 + +该脚本能够使用多任务跟踪或者视频实例分割方法来推理一段输入的视频/一张图片。 + +```shell +python demo/mot_demo.py \ + ${INPUTS} + ${CONFIG_FILE} \ + [--checkpoint ${CHECKPOINT_FILE}] \ + [--detector ${DETECTOR_FILE}] \ + [--reid ${REID_FILE}] \ + [--score-thr ${SCORE_THR}] \ + [--device ${DEVICE}] \ + [--out ${OUTPUT}] \ + [--show] +``` + +`INPUTS` 和 `OUTPUT` 参数支持 _mp4 视频_ 格式和_文件夹_格式。 + +**特别注意**:对于 `DeepSORT`、`SORT`、`StrongSORT`,他们需要单独加载 `reid` 和 `detector` 的权重。因此,我们会使用 `--detector` 和 `--reid` 来加载权重参数。其他的例如 `ByteTrack`、`OCSORT`、`QDTrack`、`MaskTrackRCNN` 以及 `Mask2Former` 这样的算法则使用 `--checkpoint` 来加载权重参数。 + +可选参数: + +- `CHECKPOINT_FILE`: 可选择 checkpoint。 +- `DETECTOR_FILE`: 可选择 detector。 +- `REID_FILE`: 可选择 reid。 +- `SCORE_THR`: bboxes 的得分阈值。 +- `DEVICE`: 推理所需配置。可以选择 `cpu`,`cuda:0`,或者其他。 +- `OUTPUT`: 输出结果可视化的示例。如果未指定, `--show` 将强制显示动态视频。 +- `--show`: 是否即时显示视频。 + +**运行 mot model 的示例:** + +```shell +# 示例 1:不指定 --checkpoint 使用 --detector +python demo/mot_demo.py \ + demo/demo_mot.mp4 \ + configs/sort/sort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py \ + --detector \ + https://download.openmmlab.com/mmtracking/mot/faster_rcnn/faster-rcnn_r50_fpn_4e_mot17-half-64ee2ed4.pth \ + --out mot.mp4 + +# 示例 2:使用 --checkpoint +python demo/mot_demo.py \ + demo/demo_mot.mp4 \ + configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py \ + --checkpoint https://download.openmmlab.com/mmtracking/mot/qdtrack/mot_dataset/qdtrack_faster-rcnn_r50_fpn_4e_mot17_20220315_145635-76f295ef.pth \ + --out mot.mp4 +``` diff --git a/docs/zh_cn/user_guides/tracking_visualization.md b/docs/zh_cn/user_guides/tracking_visualization.md new file mode 100644 index 00000000000..0d10952aa1f --- /dev/null +++ b/docs/zh_cn/user_guides/tracking_visualization.md @@ -0,0 +1,51 @@ +# 了解可视化 + +## 本地的可视化 + +这一节将会展示如何使用本地的工具可视化 detection/tracking 的运行结果。 + +如果你想要画出预测结果的图像,你可以如下示例,将 `TrackVisualizationHook` 中的 draw 的参数设置为 `draw=True`。 + +```shell +default_hooks = dict(visualization=dict(type='TrackVisualizationHook', draw=True)) +``` + +`TrackVisualizationHook` 共有如下参数: + +- `draw`: 是否绘制预测结果。如果选择 False,将不会显示图像。该参数默认设置为 False。 +- `interval`: 可视化的间隔。默认值为 30。 +- `score_thr`: 确定是否可视化边界框和掩码的阈值。默认值是 0.3。 +- `show`: 是否展示绘制的图像。默认不显示。 +- `wait_time`: 展示的时间间隔(秒)。默认为 0。 +- `test_out_dir`: 测试过程中绘制图像保存的目录。 +- `backend_args`: 用于实例化文件客户端的参数。默认值为 `None `。 + +在 `TrackVisualizationHook` 中,将调用 `TrackLocalVisualizer` 来实现 MOT 和 VIS 任务的可视化。具体细节如下。 + +你可以通过 MMEngine 获取 [Visualization](https://github.com/open-mmlab/mmengine/blob/main/docs/zh_cn/advanced_tutorials/visualization.md) 和 [Hook](https://github.com/open-mmlab/mmengine/blob/main/docs/zh_cn/tutorials/hook.md) 的更多细节。 + +### Tracking 的可视化 + +我们使用 `TrackLocalVisualizer` 这个类以实现跟踪任务可视化。调用方式如下: + +```python +visualizer = dict(type='TrackLocalVisualizer') +``` + +visualizer 共有如下的参数: + +- `name`: 所选实例的名称。默认值为 ‘visualizer’。 + +- `image`: 用于绘制的原始图像。格式需要为 RGB。默认为 None。 + +- `vis_backends`: 可视化后端配置列表。默认为 None。 + +- `save_dir`: 所有后端存储的保存文件目录。如果为 None,后端将不会保存任何数据。 + +- `line_width`: 边框宽度。默认值为 3。 + +- `alpha`: 边界框和掩码的透明度。默认为 0.8。 + +这里提供了一个 DeepSORT 的可视化示例: + +![test_img_89](https://user-images.githubusercontent.com/99722489/186062929-6d0e4663-0d8e-4045-9ec8-67e0e41da876.png) From 60b29b3e0f3e0e97745b58502a3e56029a8a0229 Mon Sep 17 00:00:00 2001 From: YanxingLiu <42299757+YanxingLiu@users.noreply.github.com> Date: Mon, 14 Aug 2023 14:31:51 +0800 Subject: [PATCH 16/63] [CodeCamp2023-500]add large_image_demo (#10719) --- demo/large_image.jpg | Bin 0 -> 171829 bytes demo/large_image_demo.py | 282 ++++++++++++++++++++++++++++ docs/en/user_guides/inference.md | 47 ++++- docs/zh_cn/user_guides/inference.md | 46 ++++- mmdet/utils/large_image.py | 104 ++++++++++ mmdet/utils/misc.py | 44 +++++ 6 files changed, 519 insertions(+), 4 deletions(-) create mode 100644 demo/large_image.jpg create mode 100644 demo/large_image_demo.py create mode 100644 mmdet/utils/large_image.py diff --git a/demo/large_image.jpg b/demo/large_image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1abbc5d9bb9cf1656ff95fb813fee0db4a40d74e GIT binary patch literal 171829 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 len(sliced_image_object): + break + start += args.batch_size + + if source_type['is_dir']: + filename = os.path.relpath(file, args.img).replace('/', '_') + else: + filename = os.path.basename(file) + + img = mmcv.imconvert(img, 'bgr', 'rgb') + out_file = None if args.show else os.path.join(args.out_dir, filename) + + # export debug images + if args.debug: + # export sliced image results + name, suffix = os.path.splitext(filename) + + shifted_instances = shift_predictions( + slice_results, + sliced_image_object.starting_pixels, + src_image_shape=(height, width)) + merged_result = slice_results[0].clone() + merged_result.pred_instances = shifted_instances + + debug_file_name = name + '_debug' + suffix + debug_out_file = None if args.show else os.path.join( + args.out_dir, debug_file_name) + visualizer.set_image(img.copy()) + + debug_grids = [] + for starting_point in sliced_image_object.starting_pixels: + start_point_x = starting_point[0] + start_point_y = starting_point[1] + end_point_x = start_point_x + args.patch_size + end_point_y = start_point_y + args.patch_size + debug_grids.append( + [start_point_x, start_point_y, end_point_x, end_point_y]) + debug_grids = np.array(debug_grids) + debug_grids[:, 0::2] = np.clip(debug_grids[:, 0::2], 1, + img.shape[1] - 1) + debug_grids[:, 1::2] = np.clip(debug_grids[:, 1::2], 1, + img.shape[0] - 1) + + palette = np.random.randint(0, 256, size=(len(debug_grids), 3)) + palette = [tuple(c) for c in palette] + line_styles = random.choices(['-', '-.', ':'], k=len(debug_grids)) + visualizer.draw_bboxes( + debug_grids, + edge_colors=palette, + alpha=1, + line_styles=line_styles) + visualizer.draw_bboxes( + debug_grids, face_colors=palette, alpha=0.15) + + visualizer.draw_texts( + list(range(len(debug_grids))), + debug_grids[:, :2] + 5, + colors='w') + + visualizer.add_datasample( + debug_file_name, + visualizer.get_image(), + data_sample=merged_result, + draw_gt=False, + show=args.show, + wait_time=0, + out_file=debug_out_file, + pred_score_thr=args.score_thr, + ) + + if args.save_patch: + debug_patch_out_dir = os.path.join(args.out_dir, + f'{name}_patch') + for i, slice_result in enumerate(slice_results): + patch_out_file = os.path.join( + debug_patch_out_dir, + f'{filename}_slice_{i}_result.jpg') + image = mmcv.imconvert(sliced_image_object.images[i], + 'bgr', 'rgb') + + visualizer.add_datasample( + 'patch_result', + image, + data_sample=slice_result, + draw_gt=False, + show=False, + wait_time=0, + out_file=patch_out_file, + pred_score_thr=args.score_thr, + ) + + image_result = merge_results_by_nms( + slice_results, + sliced_image_object.starting_pixels, + src_image_shape=(height, width), + nms_cfg={ + 'type': args.merge_nms_type, + 'iou_threshold': args.merge_iou_thr + }) + + visualizer.add_datasample( + filename, + img, + data_sample=image_result, + draw_gt=False, + show=args.show, + wait_time=0, + out_file=out_file, + pred_score_thr=args.score_thr, + ) + progress_bar.update() + + if not args.show or (args.debug and args.save_patch): + print_log( + f'\nResults have been saved at {os.path.abspath(args.out_dir)}') + + +if __name__ == '__main__': + main() diff --git a/docs/en/user_guides/inference.md b/docs/en/user_guides/inference.md index 8eeed39af44..d74b4e9c5ba 100644 --- a/docs/en/user_guides/inference.md +++ b/docs/en/user_guides/inference.md @@ -90,7 +90,7 @@ Note: `inference_detector` only supports single-image inference for now. ## Demos -We also provide three demo scripts, implemented with high-level APIs and supporting functionality codes. +We also provide four demo scripts, implemented with high-level APIs and supporting functionality codes. Source codes are available [here](https://github.com/open-mmlab/mmdetection/blob/main/demo). ### Image demo @@ -115,7 +115,7 @@ python demo/image_demo.py demo/demo.jpg \ --device cpu ``` -#### Webcam demo +### Webcam demo This is a live demo from a webcam. @@ -187,6 +187,49 @@ python demo/video_gpuaccel_demo.py demo/demo.mp4 \ --nvdecode --out result.mp4 ``` +### Large-image inference demo + +This is a script for slicing inference on large images. + +``` +python demo/large_image_demo.py \ + ${IMG_PATH} \ + ${CONFIG_FILE} \ + ${CHECKPOINT_FILE} \ + --device ${GPU_ID} \ + --show \ + --tta \ + --score-thr ${SCORE_THR} \ + --patch-size ${PATCH_SIZE} \ + --patch-overlap-ratio ${PATCH_OVERLAP_RATIO} \ + --merge-iou-thr ${MERGE_IOU_THR} \ + --merge-nms-type ${MERGE_NMS_TYPE} \ + --batch-size ${BATCH_SIZE} \ + --debug \ + --save-patch +``` + +Examples: + +```shell +# inferecnce without tta +wget -P checkpoint https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r101_fpn_2x_coco/faster_rcnn_r101_fpn_2x_coco_bbox_mAP-0.398_20200504_210455-1d2dac9c.pth + +python demo/large_image_demo.py \ + demo/large_image.jpg \ + configs/faster_rcnn/faster-rcnn_r101_fpn_2x_coco.py \ + checkpoint/faster_rcnn_r101_fpn_2x_coco_bbox_mAP-0.398_20200504_210455-1d2dac9c.pth + +# inference with tta +wget -P checkpoint https://download.openmmlab.com/mmdetection/v2.0/retinanet/retinanet_r50_fpn_1x_coco/retinanet_r50_fpn_1x_coco_20200130-c2398f9e.pth + +python demo/large_image_demo.py \ + demo/large_image.jpg \ + configs/retinanet/retinanet_r50_fpn_1x_coco.py \ + checkpoint/retinanet_r50_fpn_1x_coco_20200130-c2398f9e.pth --tta + +``` + ## Multi-modal algorithm inference demo and evaluation As multimodal vision algorithms continue to evolve, MMDetection has also supported such algorithms. This section demonstrates how to use the demo and eval scripts corresponding to multimodal algorithms using the GLIP algorithm and model as the example. Moreover, MMDetection integrated a [gradio_demo project](../../../projects/gradio_demo/), which allows developers to quickly play with all image input tasks in MMDetection on their local devices. Check the [document](../../../projects/gradio_demo/README.md) for more details. diff --git a/docs/zh_cn/user_guides/inference.md b/docs/zh_cn/user_guides/inference.md index 788d9eec2f2..caa2d688ae5 100644 --- a/docs/zh_cn/user_guides/inference.md +++ b/docs/zh_cn/user_guides/inference.md @@ -89,7 +89,7 @@ Jupyter notebook 上的演示样例在 [demo/inference_demo.ipynb](https://githu ## 演示样例 -我们还提供了三个演示脚本,它们是使用高层编程接口实现的。[源码在此](https://github.com/open-mmlab/mmdetection/blob/main/demo) 。 +我们还提供了四个演示脚本,它们是使用高层编程接口实现的。[源码在此](https://github.com/open-mmlab/mmdetection/blob/main/demo) 。 ### 图片样例 @@ -159,7 +159,7 @@ python demo/video_demo.py demo/demo.mp4 \ --out result.mp4 ``` -### 视频样例,显卡加速版本 +#### 视频样例,显卡加速版本 这是在视频样例上进行推理的脚本,使用显卡加速。 @@ -186,6 +186,48 @@ python demo/video_gpuaccel_demo.py demo/demo.mp4 \ --nvdecode --out result.mp4 ``` +### 大图推理样例 + +这是在大图上进行切片推理的脚本。 + +```shell +python demo/large_image_demo.py \ + ${IMG_PATH} \ + ${CONFIG_FILE} \ + ${CHECKPOINT_FILE} \ + --device ${GPU_ID} \ + --show \ + --tta \ + --score-thr ${SCORE_THR} \ + --patch-size ${PATCH_SIZE} \ + --patch-overlap-ratio ${PATCH_OVERLAP_RATIO} \ + --merge-iou-thr ${MERGE_IOU_THR} \ + --merge-nms-type ${MERGE_NMS_TYPE} \ + --batch-size ${BATCH_SIZE} \ + --debug \ + --save-patch +``` + +运行样例: + +```shell +# inferecnce without tta +wget -P checkpoint https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r101_fpn_2x_coco/faster_rcnn_r101_fpn_2x_coco_bbox_mAP-0.398_20200504_210455-1d2dac9c.pth + +python demo/large_image_demo.py \ + demo/large_image.jpg \ + configs/faster_rcnn/faster-rcnn_r101_fpn_2x_coco.py \ + checkpoint/faster_rcnn_r101_fpn_2x_coco_bbox_mAP-0.398_20200504_210455-1d2dac9c.pth + +# inference with tta +wget -P checkpoint https://download.openmmlab.com/mmdetection/v2.0/retinanet/retinanet_r50_fpn_1x_coco/retinanet_r50_fpn_1x_coco_20200130-c2398f9e.pth + +python demo/large_image_demo.py \ + demo/large_image.jpg \ + configs/retinanet/retinanet_r50_fpn_1x_coco.py \ + checkpoint/retinanet_r50_fpn_1x_coco_20200130-c2398f9e.pth --tta +``` + ## 多模态算法的推理和验证 随着多模态视觉算法的不断发展,MMDetection 也完成了对这类算法的支持。这一小节我们通过 GLIP 算法和模型来演示如何使用对应多模态算法的 demo 和 eval 脚本。同时 MMDetection 也在 projects 下完成了 [gradio_demo 项目](../../../projects/gradio_demo/),用户可以参照[文档](../../../projects/gradio_demo/README.md)在本地快速体验 MMDetection 中支持的各类图片输入的任务。 diff --git a/mmdet/utils/large_image.py b/mmdet/utils/large_image.py new file mode 100644 index 00000000000..f1f07c2bdc6 --- /dev/null +++ b/mmdet/utils/large_image.py @@ -0,0 +1,104 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from typing import Sequence, Tuple + +import torch +from mmcv.ops import batched_nms +from mmengine.structures import InstanceData + +from mmdet.structures import DetDataSample, SampleList + + +def shift_rbboxes(bboxes: torch.Tensor, offset: Sequence[int]): + """Shift rotated bboxes with offset. + + Args: + bboxes (Tensor): The rotated bboxes need to be translated. + With shape (n, 5), which means (x, y, w, h, a). + offset (Sequence[int]): The translation offsets with shape of (2, ). + Returns: + Tensor: Shifted rotated bboxes. + """ + offset_tensor = bboxes.new_tensor(offset) + shifted_bboxes = bboxes.clone() + shifted_bboxes[:, 0:2] = shifted_bboxes[:, 0:2] + offset_tensor + return shifted_bboxes + + +def shift_predictions(det_data_samples: SampleList, + offsets: Sequence[Tuple[int, int]], + src_image_shape: Tuple[int, int]) -> SampleList: + """Shift predictions to the original image. + + Args: + det_data_samples (List[:obj:`DetDataSample`]): A list of patch results. + offsets (Sequence[Tuple[int, int]]): Positions of the left top points + of patches. + src_image_shape (Tuple[int, int]): A (height, width) tuple of the large + image's width and height. + Returns: + (List[:obj:`DetDataSample`]): shifted results. + """ + try: + from sahi.slicing import shift_bboxes, shift_masks + except ImportError: + raise ImportError('Please run "pip install -U sahi" ' + 'to install sahi first for large image inference.') + + assert len(det_data_samples) == len( + offsets), 'The `results` should has the ' 'same length with `offsets`.' + shifted_predictions = [] + for det_data_sample, offset in zip(det_data_samples, offsets): + pred_inst = det_data_sample.pred_instances.clone() + + # Check bbox type + if pred_inst.bboxes.size(-1) == 4: + # Horizontal bboxes + shifted_bboxes = shift_bboxes(pred_inst.bboxes, offset) + elif pred_inst.bboxes.size(-1) == 5: + # Rotated bboxes + shifted_bboxes = shift_rbboxes(pred_inst.bboxes, offset) + else: + raise NotImplementedError + + # shift bboxes and masks + pred_inst.bboxes = shifted_bboxes + if 'masks' in det_data_sample: + pred_inst.masks = shift_masks(pred_inst.masks, offset, + src_image_shape) + + shifted_predictions.append(pred_inst.clone()) + + shifted_predictions = InstanceData.cat(shifted_predictions) + + return shifted_predictions + + +def merge_results_by_nms(results: SampleList, offsets: Sequence[Tuple[int, + int]], + src_image_shape: Tuple[int, int], + nms_cfg: dict) -> DetDataSample: + """Merge patch results by nms. + + Args: + results (List[:obj:`DetDataSample`]): A list of patch results. + offsets (Sequence[Tuple[int, int]]): Positions of the left top points + of patches. + src_image_shape (Tuple[int, int]): A (height, width) tuple of the large + image's width and height. + nms_cfg (dict): it should specify nms type and other parameters + like `iou_threshold`. + Returns: + :obj:`DetDataSample`: merged results. + """ + shifted_instances = shift_predictions(results, offsets, src_image_shape) + + _, keeps = batched_nms( + boxes=shifted_instances.bboxes, + scores=shifted_instances.scores, + idxs=shifted_instances.labels, + nms_cfg=nms_cfg) + merged_instances = shifted_instances[keeps] + + merged_result = results[0].clone() + merged_result.pred_instances = merged_instances + return merged_result diff --git a/mmdet/utils/misc.py b/mmdet/utils/misc.py index 51cb2af8dbf..8dfb3944651 100644 --- a/mmdet/utils/misc.py +++ b/mmdet/utils/misc.py @@ -2,11 +2,17 @@ import glob import os import os.path as osp +import urllib import warnings from typing import Union +import torch from mmengine.config import Config, ConfigDict from mmengine.logging import print_log +from mmengine.utils import scandir + +IMG_EXTENSIONS = ('.jpg', '.jpeg', '.png', '.ppm', '.bmp', '.pgm', '.tif', + '.tiff', '.webp') def find_latest_checkpoint(path, suffix='pth'): @@ -103,3 +109,41 @@ def _get_test_pipeline_cfg(dataset_cfg): raise RuntimeError('Cannot find `pipeline` in `test_dataloader`') return _get_test_pipeline_cfg(cfg.test_dataloader.dataset) + + +def get_file_list(source_root: str) -> [list, dict]: + """Get file list. + + Args: + source_root (str): image or video source path + + Return: + source_file_path_list (list): A list for all source file. + source_type (dict): Source type: file or url or dir. + """ + is_dir = os.path.isdir(source_root) + is_url = source_root.startswith(('http:/', 'https:/')) + is_file = os.path.splitext(source_root)[-1].lower() in IMG_EXTENSIONS + + source_file_path_list = [] + if is_dir: + # when input source is dir + for file in scandir(source_root, IMG_EXTENSIONS, recursive=True): + source_file_path_list.append(os.path.join(source_root, file)) + elif is_url: + # when input source is url + filename = os.path.basename( + urllib.parse.unquote(source_root).split('?')[0]) + file_save_path = os.path.join(os.getcwd(), filename) + print(f'Downloading source file to {file_save_path}') + torch.hub.download_url_to_file(source_root, file_save_path) + source_file_path_list = [file_save_path] + elif is_file: + # when input source is single image + source_file_path_list = [source_root] + else: + print('Cannot find image file.') + + source_type = dict(is_dir=is_dir, is_url=is_url, is_file=is_file) + + return source_file_path_list, source_type From 2dbf307a9292a7695b83a3f0d0c591aed48cac30 Mon Sep 17 00:00:00 2001 From: Jiongjiong Li <33146359+jiongjiongli@users.noreply.github.com> Date: Mon, 14 Aug 2023 02:38:13 -0500 Subject: [PATCH 17/63] [CodeCamp2023-503] Add the DDQ algorithm to mmdetection (#10772) --- configs/ddq/README.md | 34 ++ .../ddq/ddq-detr-4scale_r50_8xb2-12e_coco.py | 170 ++++++ .../ddq-detr-4scale_swinl_8xb2-30e_coco.py | 177 ++++++ .../ddq/ddq-detr-5scale_r50_8xb2-12e_coco.py | 171 ++++++ configs/ddq/metafile.yml | 56 ++ mmdet/models/dense_heads/__init__.py | 3 +- mmdet/models/dense_heads/ddq_detr_head.py | 550 ++++++++++++++++++ mmdet/models/detectors/__init__.py | 4 +- mmdet/models/detectors/ddq_detr.py | 274 +++++++++ mmdet/models/layers/__init__.py | 5 +- mmdet/models/layers/transformer/__init__.py | 3 +- .../layers/transformer/ddq_detr_layers.py | 223 +++++++ mmdet/models/losses/__init__.py | 4 +- mmdet/models/losses/ddq_detr_aux_loss.py | 303 ++++++++++ .../models/task_modules/assigners/__init__.py | 8 +- .../assigners/topk_hungarian_assigner.py | 182 ++++++ mmdet/models/utils/__init__.py | 21 +- mmdet/models/utils/misc.py | 47 +- tests/data/coco_batched_sample.json | 55 ++ .../test_dense_heads/test_ddq_detr_head.py | 171 ++++++ .../test_detectors/test_ddq_detr.py | 152 +++++ .../test_layers/test_transformer.py | 20 + tests/test_models/test_losses/test_loss.py | 49 +- .../test_topk_hungarian_assigner.py | 114 ++++ 24 files changed, 2774 insertions(+), 22 deletions(-) create mode 100644 configs/ddq/README.md create mode 100644 configs/ddq/ddq-detr-4scale_r50_8xb2-12e_coco.py create mode 100644 configs/ddq/ddq-detr-4scale_swinl_8xb2-30e_coco.py create mode 100644 configs/ddq/ddq-detr-5scale_r50_8xb2-12e_coco.py create mode 100644 configs/ddq/metafile.yml create mode 100644 mmdet/models/dense_heads/ddq_detr_head.py create mode 100644 mmdet/models/detectors/ddq_detr.py create mode 100644 mmdet/models/layers/transformer/ddq_detr_layers.py create mode 100644 mmdet/models/losses/ddq_detr_aux_loss.py create mode 100644 mmdet/models/task_modules/assigners/topk_hungarian_assigner.py create mode 100644 tests/data/coco_batched_sample.json create mode 100644 tests/test_models/test_dense_heads/test_ddq_detr_head.py create mode 100644 tests/test_models/test_detectors/test_ddq_detr.py create mode 100644 tests/test_models/test_task_modules/test_assigners/test_topk_hungarian_assigner.py diff --git a/configs/ddq/README.md b/configs/ddq/README.md new file mode 100644 index 00000000000..35b5dc0afa9 --- /dev/null +++ b/configs/ddq/README.md @@ -0,0 +1,34 @@ +# DDQ + +[Dense Distinct Query for End-to-End Object Detection](https://arxiv.org/abs/2303.12776) + +## Abstract + +One-to-one label assignment in object detection has successfully obviated the need for non-maximum suppression (NMS) as postprocessing and makes the pipeline end-to-end. However, it triggers a new dilemma as the widely used sparse queries cannot guarantee a high recall, while dense queries inevitably bring more similar queries and encounter optimization difficulties. As both sparse and dense queries are problematic, then what are the expected queries in end-to-end object detection? This paper shows that the solution should be Dense Distinct Queries (DDQ). Concretely, we first lay dense queries like traditional detectors and then select distinct ones for one-to-one assignments. DDQ blends the advantages of traditional and recent end-to-end detectors and significantly improves the performance of various detectors including FCN, R-CNN, and DETRs. Most impressively, DDQ-DETR achieves 52.1 AP on MS-COCO dataset within 12 epochs using a ResNet-50 backbone, outperforming all existing detectors in the same setting. DDQ also shares the benefit of end-to-end detectors in crowded scenes and achieves 93.8 AP on CrowdHuman. We hope DDQ can inspire researchers to consider the complementarity between traditional methods and end-to-end detectors. + +![ddq_arch](https://github.com/open-mmlab/mmdetection/assets/33146359/5ca9f11b-b6f3-454f-a2d1-3009ee337bbc) + +## Results and Models + +| Model | Backbone | Lr schd | Augmentation | box AP(val) | Config | Download | +| :-------------: | :------: | :-----: | :----------: | :---------: | :------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| DDQ DETR-4scale | R-50 | 12e | DETR | 51.4 | [config](./ddq-detr-4scale_r50_8xb2-12e_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq-detr-4scale_r50_8xb2-12e_coco/ddq-detr-4scale_r50_8xb2-12e_coco_20230809_170711-42528127.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq-detr-4scale_r50_8xb2-12e_coco/ddq-detr-4scale_r50_8xb2-12e_coco_20230809_170711.log.json) | +| DDQ DETR-5scale | R-50 | 12e | DETR | 52.1 | [config](./ddq-detr-5scale_r50_8xb2-12e_coco.py) | [model\*](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq_detr_5scale_coco_1x.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq_detr_5scale_coco_1x_20230319_103307.log) | +| DDQ DETR-4scale | Swin-L | 30e | DETR | 58.7 | [config](./ddq-detr-4scale_swinl_8xb2-30e_coco.py) | [model\*](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq_detr_swinl_30e.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq_detr_swinl_30e_20230316_221721_20230318_143554.log) | + +**Note:** Models labeled "\*" are not trained by us, but from [DDQ official website](https://github.com/jshilong/DDQ). + +## Citation + +We provide the config files for DDQ: [Dense Distinct Query for End-to-End Object Detection](https://arxiv.org/abs/2303.12776). + +```latex +@InProceedings{Zhang_2023_CVPR, + author = {Zhang, Shilong and Wang, Xinjiang and Wang, Jiaqi and Pang, Jiangmiao and Lyu, Chengqi and Zhang, Wenwei and Luo, Ping and Chen, Kai}, + title = {Dense Distinct Query for End-to-End Object Detection}, + booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)}, + month = {June}, + year = {2023}, + pages = {7329-7338} +} +``` diff --git a/configs/ddq/ddq-detr-4scale_r50_8xb2-12e_coco.py b/configs/ddq/ddq-detr-4scale_r50_8xb2-12e_coco.py new file mode 100644 index 00000000000..5e64afc087e --- /dev/null +++ b/configs/ddq/ddq-detr-4scale_r50_8xb2-12e_coco.py @@ -0,0 +1,170 @@ +_base_ = [ + '../_base_/datasets/coco_detection.py', '../_base_/default_runtime.py' +] +model = dict( + type='DDQDETR', + num_queries=900, # num_matching_queries + # ratio of num_dense queries to num_queries + dense_topk_ratio=1.5, + with_box_refine=True, + as_two_stage=True, + data_preprocessor=dict( + type='DetDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True, + pad_size_divisor=1), + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=False), + norm_eval=True, + style='pytorch', + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50')), + neck=dict( + type='ChannelMapper', + in_channels=[512, 1024, 2048], + kernel_size=1, + out_channels=256, + act_cfg=None, + norm_cfg=dict(type='GN', num_groups=32), + num_outs=4), + # encoder class name: DeformableDetrTransformerEncoder + encoder=dict( + num_layers=6, + layer_cfg=dict( + self_attn_cfg=dict(embed_dims=256, num_levels=4, + dropout=0.0), # 0.1 for DeformDETR + ffn_cfg=dict( + embed_dims=256, + feedforward_channels=2048, # 1024 for DeformDETR + ffn_drop=0.0))), # 0.1 for DeformDETR + # decoder class name: DDQTransformerDecoder + decoder=dict( + # `num_layers` >= 2, because attention masks of the last + # `num_layers` - 1 layers are used for distinct query selection + num_layers=6, + return_intermediate=True, + layer_cfg=dict( + self_attn_cfg=dict(embed_dims=256, num_heads=8, + dropout=0.0), # 0.1 for DeformDETR + cross_attn_cfg=dict(embed_dims=256, num_levels=4, + dropout=0.0), # 0.1 for DeformDETR + ffn_cfg=dict( + embed_dims=256, + feedforward_channels=2048, # 1024 for DeformDETR + ffn_drop=0.0)), # 0.1 for DeformDETR + post_norm_cfg=None), + positional_encoding=dict( + num_feats=128, + normalize=True, + offset=0.0, # -0.5 for DeformDETR + temperature=20), # 10000 for DeformDETR + bbox_head=dict( + type='DDQDETRHead', + num_classes=80, + sync_cls_avg_factor=True, + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=5.0), + loss_iou=dict(type='GIoULoss', loss_weight=2.0)), + dn_cfg=dict( + label_noise_scale=0.5, + box_noise_scale=1.0, + group_cfg=dict(dynamic=True, num_groups=None, num_dn_queries=100)), + dqs_cfg=dict(type='nms', iou_threshold=0.8), + # training and testing settings + train_cfg=dict( + assigner=dict( + type='HungarianAssigner', + match_costs=[ + dict(type='FocalLossCost', weight=2.0), + dict(type='BBoxL1Cost', weight=5.0, box_format='xywh'), + dict(type='IoUCost', iou_mode='giou', weight=2.0) + ])), + test_cfg=dict(max_per_img=300)) + +train_pipeline = [ + dict(type='LoadImageFromFile', backend_args=_base_.backend_args), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='RandomFlip', prob=0.5), + dict( + type='RandomChoice', + transforms=[ + [ + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ], + [ + dict( + type='RandomChoiceResize', + # The radio of all image in train dataset < 7 + # follow the original implement + scales=[(400, 4200), (500, 4200), (600, 4200)], + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=(384, 600), + allow_negative_crop=True), + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ] + ]), + dict(type='PackDetInputs') +] + +train_dataloader = dict( + dataset=dict( + filter_cfg=dict(filter_empty_gt=False), pipeline=train_pipeline)) + +# optimizer +optim_wrapper = dict( + type='OptimWrapper', + optimizer=dict(type='AdamW', lr=0.0002, weight_decay=0.05), + clip_grad=dict(max_norm=0.1, norm_type=2), + paramwise_cfg=dict(custom_keys={'backbone': dict(lr_mult=0.1)})) + +# learning policy +max_epochs = 12 +train_cfg = dict( + type='EpochBasedTrainLoop', max_epochs=max_epochs, val_interval=1) + +val_cfg = dict(type='ValLoop') +test_cfg = dict(type='TestLoop') + +param_scheduler = [ + dict( + type='LinearLR', + start_factor=0.0001, + by_epoch=False, + begin=0, + end=2000), + dict( + type='MultiStepLR', + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[11], + gamma=0.1) +] + +# NOTE: `auto_scale_lr` is for automatically scaling LR, +# USER SHOULD NOT CHANGE ITS VALUES. +# base_batch_size = (8 GPUs) x (2 samples per GPU) +auto_scale_lr = dict(base_batch_size=16) diff --git a/configs/ddq/ddq-detr-4scale_swinl_8xb2-30e_coco.py b/configs/ddq/ddq-detr-4scale_swinl_8xb2-30e_coco.py new file mode 100644 index 00000000000..d863649411e --- /dev/null +++ b/configs/ddq/ddq-detr-4scale_swinl_8xb2-30e_coco.py @@ -0,0 +1,177 @@ +_base_ = [ + '../_base_/datasets/coco_detection.py', '../_base_/default_runtime.py' +] +pretrained = 'https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_large_patch4_window12_384_22k.pth' # noqa: E501 +model = dict( + type='DDQDETR', + num_queries=900, # num_matching_queries + # ratio of num_dense queries to num_queries + dense_topk_ratio=1.5, + with_box_refine=True, + as_two_stage=True, + data_preprocessor=dict( + type='DetDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True, + pad_size_divisor=1), + backbone=dict( + type='SwinTransformer', + pretrain_img_size=384, + embed_dims=192, + depths=[2, 2, 18, 2], + num_heads=[6, 12, 24, 48], + window_size=12, + mlp_ratio=4, + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.2, + patch_norm=True, + out_indices=(1, 2, 3), + with_cp=False, + convert_weights=True, + init_cfg=dict(type='Pretrained', checkpoint=pretrained)), + neck=dict( + type='ChannelMapper', + in_channels=[384, 768, 1536], + kernel_size=1, + out_channels=256, + act_cfg=None, + norm_cfg=dict(type='GN', num_groups=32), + num_outs=4), + # encoder class name: DeformableDetrTransformerEncoder + encoder=dict( + num_layers=6, + layer_cfg=dict( + self_attn_cfg=dict(embed_dims=256, num_levels=4, + dropout=0.0), # 0.1 for DeformDETR + ffn_cfg=dict( + embed_dims=256, + feedforward_channels=2048, # 1024 for DeformDETR + ffn_drop=0.0))), # 0.1 for DeformDETR + # decoder class name: DDQTransformerDecoder + decoder=dict( + num_layers=6, + return_intermediate=True, + layer_cfg=dict( + self_attn_cfg=dict(embed_dims=256, num_heads=8, + dropout=0.0), # 0.1 for DeformDETR + cross_attn_cfg=dict(embed_dims=256, num_levels=4, + dropout=0.0), # 0.1 for DeformDETR + ffn_cfg=dict( + embed_dims=256, + feedforward_channels=2048, # 1024 for DeformDETR + ffn_drop=0.0)), # 0.1 for DeformDETR + post_norm_cfg=None), + positional_encoding=dict( + num_feats=128, + normalize=True, + offset=0.0, # -0.5 for DeformDETR + temperature=20), # 10000 for DeformDETR + bbox_head=dict( + type='DDQDETRHead', + num_classes=80, + sync_cls_avg_factor=True, + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=5.0), + loss_iou=dict(type='GIoULoss', loss_weight=2.0)), + dn_cfg=dict( + label_noise_scale=0.5, + box_noise_scale=1.0, + group_cfg=dict(dynamic=True, num_groups=None, num_dn_queries=100)), + dqs_cfg=dict(type='nms', iou_threshold=0.8), + # training and testing settings + train_cfg=dict( + assigner=dict( + type='HungarianAssigner', + match_costs=[ + dict(type='FocalLossCost', weight=2.0), + dict(type='BBoxL1Cost', weight=5.0, box_format='xywh'), + dict(type='IoUCost', iou_mode='giou', weight=2.0) + ])), + test_cfg=dict(max_per_img=300)) + +train_pipeline = [ + dict(type='LoadImageFromFile', backend_args=_base_.backend_args), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='RandomFlip', prob=0.5), + dict( + type='RandomChoice', + transforms=[ + [ + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ], + [ + dict( + type='RandomChoiceResize', + # The radio of all image in train dataset < 7 + # follow the original implement + scales=[(400, 4200), (500, 4200), (600, 4200)], + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=(384, 600), + allow_negative_crop=True), + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ] + ]), + dict(type='PackDetInputs') +] + +train_dataloader = dict( + dataset=dict( + filter_cfg=dict(filter_empty_gt=False), pipeline=train_pipeline)) + +# optimizer +optim_wrapper = dict( + type='OptimWrapper', + optimizer=dict(type='AdamW', lr=0.0002, weight_decay=0.05), + clip_grad=dict(max_norm=0.1, norm_type=2), + paramwise_cfg=dict(custom_keys={'backbone': dict(lr_mult=0.05)})) + +# learning policy +max_epochs = 30 +train_cfg = dict( + type='EpochBasedTrainLoop', max_epochs=max_epochs, val_interval=1) + +val_cfg = dict(type='ValLoop') +test_cfg = dict(type='TestLoop') + +param_scheduler = [ + dict( + type='LinearLR', + start_factor=0.0001, + by_epoch=False, + begin=0, + end=2000), + dict( + type='MultiStepLR', + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[20, 26], + gamma=0.1) +] + +# NOTE: `auto_scale_lr` is for automatically scaling LR, +# USER SHOULD NOT CHANGE ITS VALUES. +# base_batch_size = (8 GPUs) x (2 samples per GPU) +auto_scale_lr = dict(base_batch_size=16) diff --git a/configs/ddq/ddq-detr-5scale_r50_8xb2-12e_coco.py b/configs/ddq/ddq-detr-5scale_r50_8xb2-12e_coco.py new file mode 100644 index 00000000000..3c38f553bdd --- /dev/null +++ b/configs/ddq/ddq-detr-5scale_r50_8xb2-12e_coco.py @@ -0,0 +1,171 @@ +_base_ = [ + '../_base_/datasets/coco_detection.py', '../_base_/default_runtime.py' +] +model = dict( + type='DDQDETR', + num_queries=900, # num_matching_queries + # ratio of num_dense queries to num_queries + dense_topk_ratio=1.5, + with_box_refine=True, + as_two_stage=True, + num_feature_levels=5, + data_preprocessor=dict( + type='DetDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True, + pad_size_divisor=1), + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=False), + norm_eval=True, + style='pytorch', + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50')), + neck=dict( + type='ChannelMapper', + in_channels=[256, 512, 1024, 2048], + kernel_size=1, + out_channels=256, + act_cfg=None, + norm_cfg=dict(type='GN', num_groups=32), + num_outs=5), + # encoder class name: DeformableDetrTransformerEncoder + encoder=dict( + num_layers=6, + layer_cfg=dict( + self_attn_cfg=dict(embed_dims=256, num_levels=5, + dropout=0.0), # 0.1 for DeformDETR + ffn_cfg=dict( + embed_dims=256, + feedforward_channels=2048, # 1024 for DeformDETR + ffn_drop=0.0))), # 0.1 for DeformDETR + # decoder class name: DDQTransformerDecoder + decoder=dict( + num_layers=6, + return_intermediate=True, + layer_cfg=dict( + self_attn_cfg=dict(embed_dims=256, num_heads=8, + dropout=0.0), # 0.1 for DeformDETR + cross_attn_cfg=dict(embed_dims=256, num_levels=5, + dropout=0.0), # 0.1 for DeformDETR + ffn_cfg=dict( + embed_dims=256, + feedforward_channels=2048, # 1024 for DeformDETR + ffn_drop=0.0)), # 0.1 for DeformDETR + post_norm_cfg=None), + positional_encoding=dict( + num_feats=128, + normalize=True, + offset=0.0, # -0.5 for DeformDETR + temperature=20), # 10000 for DeformDETR + bbox_head=dict( + type='DDQDETRHead', + num_classes=80, + sync_cls_avg_factor=True, + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=5.0), + loss_iou=dict(type='GIoULoss', loss_weight=2.0)), + dn_cfg=dict( + label_noise_scale=0.5, + box_noise_scale=1.0, + group_cfg=dict(dynamic=True, num_groups=None, num_dn_queries=100)), + dqs_cfg=dict(type='nms', iou_threshold=0.8), + # training and testing settings + train_cfg=dict( + assigner=dict( + type='HungarianAssigner', + match_costs=[ + dict(type='FocalLossCost', weight=2.0), + dict(type='BBoxL1Cost', weight=5.0, box_format='xywh'), + dict(type='IoUCost', iou_mode='giou', weight=2.0) + ])), + test_cfg=dict(max_per_img=300)) + +# train_pipeline, NOTE the img_scale and the Pad's size_divisor is different +# from the default setting in mmdet. +train_pipeline = [ + dict(type='LoadImageFromFile', backend_args=_base_.backend_args), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='RandomFlip', prob=0.5), + dict( + type='RandomChoice', + transforms=[ + [ + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ], + [ + dict( + type='RandomChoiceResize', + # The radio of all image in train dataset < 7 + # follow the original implement + scales=[(400, 4200), (500, 4200), (600, 4200)], + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=(384, 600), + allow_negative_crop=True), + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ] + ]), + dict(type='PackDetInputs') +] + +train_dataloader = dict( + dataset=dict( + filter_cfg=dict(filter_empty_gt=False), pipeline=train_pipeline)) + +# optimizer +optim_wrapper = dict( + type='OptimWrapper', + optimizer=dict(type='AdamW', lr=0.0002, weight_decay=0.05), + clip_grad=dict(max_norm=0.1, norm_type=2), + paramwise_cfg=dict(custom_keys={'backbone': dict(lr_mult=0.1)})) + +# learning policy +max_epochs = 12 +train_cfg = dict( + type='EpochBasedTrainLoop', max_epochs=max_epochs, val_interval=1) + +val_cfg = dict(type='ValLoop') +test_cfg = dict(type='TestLoop') + +param_scheduler = [ + dict( + type='LinearLR', + start_factor=0.0001, + by_epoch=False, + begin=0, + end=2000), + dict( + type='MultiStepLR', + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[11], + gamma=0.1) +] + +# NOTE: `auto_scale_lr` is for automatically scaling LR, +# USER SHOULD NOT CHANGE ITS VALUES. +# base_batch_size = (8 GPUs) x (2 samples per GPU) +auto_scale_lr = dict(base_batch_size=16) diff --git a/configs/ddq/metafile.yml b/configs/ddq/metafile.yml new file mode 100644 index 00000000000..bd33abe1a51 --- /dev/null +++ b/configs/ddq/metafile.yml @@ -0,0 +1,56 @@ +Collections: + - Name: DDQ + Metadata: + Training Data: COCO + Training Techniques: + - AdamW + - Multi Scale Train + - Gradient Clip + Training Resources: 8x A100 GPUs + Architecture: + - ResNet + - Transformer + Paper: + URL: https://arxiv.org/abs/2303.12776 + Title: 'Dense Distinct Query for End-to-End Object Detection' + README: configs/ddq/README.md + Code: + URL: https://github.com/open-mmlab/mmdetection/blob/dev-3.x/mmdet/models/detectors/ddq_detr.py#L21 + Version: dev-3.x + +Models: + - Name: ddq-detr-4scale_r50_8xb2-12e_coco + In Collection: DDQ + Config: configs/ddq/ddq-detr-4scale_r50_8xb2-12e_coco.py + Metadata: + Epochs: 12 + Results: + - Task: Object Detection + Dataset: COCO + Metrics: + box AP: 51.4 + Weights: https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq-detr-4scale_r50_8xb2-12e_coco/ddq-detr-4scale_r50_8xb2-12e_coco_20230809_170711-42528127.pth + + - Name: ddq-detr-5scale_r50_8xb2-12e_coco + In Collection: DDQ + Config: configs/dino/ddq-detr-5scale_r50_8xb2-12e_coco.py + Metadata: + Epochs: 12 + Results: + - Task: Object Detection + Dataset: COCO + Metrics: + box AP: 52.1 + Weights: https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq_detr_5scale_coco_1x.pth + + - Name: ddq-detr-4scale_swinl_8xb2-30e_coco + In Collection: DDQ + Config: configs/dino/ddq-detr-4scale_swinl_8xb2-30e_coco.py + Metadata: + Epochs: 12 + Results: + - Task: Object Detection + Dataset: COCO + Metrics: + box AP: 58.7 + Weights: https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq_detr_swinl_30e.pth diff --git a/mmdet/models/dense_heads/__init__.py b/mmdet/models/dense_heads/__init__.py index 57e532d1c15..2143d93d854 100644 --- a/mmdet/models/dense_heads/__init__.py +++ b/mmdet/models/dense_heads/__init__.py @@ -14,6 +14,7 @@ from .corner_head import CornerHead from .dab_detr_head import DABDETRHead from .ddod_head import DDODHead +from .ddq_detr_head import DDQDETRHead from .deformable_detr_head import DeformableDETRHead from .detr_head import DETRHead from .dino_head import DINOHead @@ -66,5 +67,5 @@ 'CenterNetUpdateHead', 'RTMDetHead', 'RTMDetSepBNHead', 'CondInstBboxHead', 'CondInstMaskHead', 'RTMDetInsHead', 'RTMDetInsSepBNHead', 'BoxInstBboxHead', 'BoxInstMaskHead', 'ConditionalDETRHead', 'DINOHead', - 'ATSSVLFusionHead', 'DABDETRHead' + 'ATSSVLFusionHead', 'DABDETRHead', 'DDQDETRHead' ] diff --git a/mmdet/models/dense_heads/ddq_detr_head.py b/mmdet/models/dense_heads/ddq_detr_head.py new file mode 100644 index 00000000000..0580653ac26 --- /dev/null +++ b/mmdet/models/dense_heads/ddq_detr_head.py @@ -0,0 +1,550 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import copy +from typing import Dict, List, Tuple + +import torch +from mmengine.model import bias_init_with_prob, constant_init +from torch import Tensor, nn + +from mmdet.registry import MODELS +from mmdet.structures import SampleList +from mmdet.structures.bbox import bbox_cxcywh_to_xyxy +from mmdet.utils import InstanceList, OptInstanceList, reduce_mean +from ..layers import inverse_sigmoid +from ..losses import DDQAuxLoss +from ..utils import multi_apply +from .dino_head import DINOHead + + +@MODELS.register_module() +class DDQDETRHead(DINOHead): + r"""Head of DDQDETR: Dense Distinct Query for + End-to-End Object Detection. + + Code is modified from the `official github repo + `_. + + More details can be found in the `paper + `_ . + + Args: + aux_num_pos (int): Number of positive targets assigned to a + perdicted object. Defaults to 4. + """ + + def __init__(self, *args, aux_num_pos=4, **kwargs): + super(DDQDETRHead, self).__init__(*args, **kwargs) + self.aux_loss_for_dense = DDQAuxLoss( + train_cfg=dict( + assigner=dict(type='TopkHungarianAssigner', topk=aux_num_pos), + alpha=1, + beta=6)) + + def _init_layers(self) -> None: + """Initialize classification branch and regression branch of aux head + for dense queries.""" + super(DDQDETRHead, self)._init_layers() + # If decoder `num_layers` = 6 and `as_two_stage` = True, then: + # 1) 6 main heads are required for + # each decoder output of distinct queries. + # 2) 1 main head is required for `output_memory` of distinct queries. + # 3) 1 aux head is required for `output_memory` of dense queries, + # which is done by code below this comment. + # So 8 heads are required in sum. + # aux head for dense queries on encoder feature map + self.cls_branches.append(copy.deepcopy(self.cls_branches[-1])) + self.reg_branches.append(copy.deepcopy(self.reg_branches[-1])) + + # If decoder `num_layers` = 6 and `as_two_stage` = True, then: + # 6 aux heads are required for each decoder output of dense queries. + # So 8 + 6 = 14 heads and heads are requires in sum. + # self.num_pred_layer is 7 + # aux head for dense queries in decoder + self.aux_cls_branches = nn.ModuleList([ + copy.deepcopy(self.cls_branches[-1]) + for _ in range(self.num_pred_layer - 1) + ]) + self.aux_reg_branches = nn.ModuleList([ + copy.deepcopy(self.reg_branches[-1]) + for _ in range(self.num_pred_layer - 1) + ]) + + def init_weights(self) -> None: + """Initialize weights of the Deformable DETR head.""" + bias_init = bias_init_with_prob(0.01) + for m in self.cls_branches: + nn.init.constant_(m.bias, bias_init) + for m in self.aux_cls_branches: + nn.init.constant_(m.bias, bias_init) + for m in self.reg_branches: + constant_init(m[-1], 0, bias=0) + for m in self.reg_branches: + nn.init.constant_(m[-1].bias.data[2:], 0.0) + + for m in self.aux_reg_branches: + constant_init(m[-1], 0, bias=0) + + for m in self.aux_reg_branches: + nn.init.constant_(m[-1].bias.data[2:], 0.0) + + def forward(self, hidden_states: Tensor, + references: List[Tensor]) -> Tuple[Tensor]: + """Forward function. + + Args: + hidden_states (Tensor): Hidden states output from each decoder + layer, has shape (num_decoder_layers, bs, num_queries_total, + dim), where `num_queries_total` is the sum of + `num_denoising_queries`, `num_queries` and `num_dense_queries` + when `self.training` is `True`, else `num_queries`. + references (list[Tensor]): List of the reference from the decoder. + The first reference is the `init_reference` (initial) and the + other num_decoder_layers(6) references are `inter_references` + (intermediate). Each reference has shape (bs, + num_queries_total, 4) with the last dimension arranged as + (cx, cy, w, h). + + Returns: + tuple[Tensor]: results of head containing the following tensors. + + - all_layers_outputs_classes (Tensor): Outputs from the + classification head, has shape (num_decoder_layers, bs, + num_queries_total, cls_out_channels). + - all_layers_outputs_coords (Tensor): Sigmoid outputs from the + regression head with normalized coordinate format (cx, cy, w, + h), has shape (num_decoder_layers, bs, num_queries_total, 4) + with the last dimension arranged as (cx, cy, w, h). + """ + all_layers_outputs_classes = [] + all_layers_outputs_coords = [] + if self.training: + num_dense = self.cache_dict['num_dense_queries'] + for layer_id in range(hidden_states.shape[0]): + reference = inverse_sigmoid(references[layer_id]) + hidden_state = hidden_states[layer_id] + if self.training: + dense_hidden_state = hidden_state[:, -num_dense:] + hidden_state = hidden_state[:, :-num_dense] + + outputs_class = self.cls_branches[layer_id](hidden_state) + tmp_reg_preds = self.reg_branches[layer_id](hidden_state) + if self.training: + dense_outputs_class = self.aux_cls_branches[layer_id]( + dense_hidden_state) + dense_tmp_reg_preds = self.aux_reg_branches[layer_id]( + dense_hidden_state) + outputs_class = torch.cat([outputs_class, dense_outputs_class], + dim=1) + tmp_reg_preds = torch.cat([tmp_reg_preds, dense_tmp_reg_preds], + dim=1) + + if reference.shape[-1] == 4: + tmp_reg_preds += reference + else: + assert reference.shape[-1] == 2 + tmp_reg_preds[..., :2] += reference + outputs_coord = tmp_reg_preds.sigmoid() + all_layers_outputs_classes.append(outputs_class) + all_layers_outputs_coords.append(outputs_coord) + + all_layers_outputs_classes = torch.stack(all_layers_outputs_classes) + all_layers_outputs_coords = torch.stack(all_layers_outputs_coords) + + return all_layers_outputs_classes, all_layers_outputs_coords + + def loss(self, + hidden_states: Tensor, + references: List[Tensor], + enc_outputs_class: Tensor, + enc_outputs_coord: Tensor, + batch_data_samples: SampleList, + dn_meta: Dict[str, int], + aux_enc_outputs_class=None, + aux_enc_outputs_coord=None) -> dict: + """Perform forward propagation and loss calculation of the detection + head on the queries of the upstream network. + + Args: + hidden_states (Tensor): Hidden states output from each decoder + layer, has shape (num_decoder_layers, bs, num_queries_total, + dim), where `num_queries_total` is the sum of + `num_denoising_queries`, `num_queries` and `num_dense_queries` + when `self.training` is `True`, else `num_queries`. + references (list[Tensor]): List of the reference from the decoder. + The first reference is the `init_reference` (initial) and the + other num_decoder_layers(6) references are `inter_references` + (intermediate). Each reference has shape (bs, + num_queries_total, 4) with the last dimension arranged as + (cx, cy, w, h). + enc_outputs_class (Tensor): The top k classification score of + each point on encoder feature map, has shape (bs, num_queries, + cls_out_channels). + enc_outputs_coord (Tensor): The proposal generated from points + with top k score, has shape (bs, num_queries, 4) with the + last dimension arranged as (cx, cy, w, h). + batch_data_samples (list[:obj:`DetDataSample`]): The Data + Samples. It usually includes information such as + `gt_instance`, `gt_panoptic_seg` and `gt_sem_seg`. + dn_meta (Dict[str, int]): The dictionary saves information about + group collation, including 'num_denoising_queries' and + 'num_denoising_groups'. It will be used for split outputs of + denoising and matching parts and loss calculation. + aux_enc_outputs_class (Tensor): The `dense_topk` classification + score of each point on encoder feature map, has shape (bs, + num_dense_queries, cls_out_channels). + It is `None` when `self.training` is `False`. + aux_enc_outputs_coord (Tensor): The proposal generated from points + with `dense_topk` score, has shape (bs, num_dense_queries, 4) + with the last dimension arranged as (cx, cy, w, h). + It is `None` when `self.training` is `False`. + + Returns: + dict: A dictionary of loss components. + """ + batch_gt_instances = [] + batch_img_metas = [] + for data_sample in batch_data_samples: + batch_img_metas.append(data_sample.metainfo) + batch_gt_instances.append(data_sample.gt_instances) + + outs = self(hidden_states, references) + loss_inputs = outs + (enc_outputs_class, enc_outputs_coord, + batch_gt_instances, batch_img_metas, dn_meta) + losses = self.loss_by_feat(*loss_inputs) + + aux_enc_outputs_coord = bbox_cxcywh_to_xyxy(aux_enc_outputs_coord) + aux_enc_outputs_coord_list = [] + for img_id in range(len(aux_enc_outputs_coord)): + det_bboxes = aux_enc_outputs_coord[img_id] + img_shape = batch_img_metas[img_id]['img_shape'] + det_bboxes[:, 0::2] = det_bboxes[:, 0::2] * img_shape[1] + det_bboxes[:, 1::2] = det_bboxes[:, 1::2] * img_shape[0] + aux_enc_outputs_coord_list.append(det_bboxes) + aux_enc_outputs_coord = torch.stack(aux_enc_outputs_coord_list) + aux_loss = self.aux_loss_for_dense.loss( + aux_enc_outputs_class.sigmoid(), aux_enc_outputs_coord, + [item.bboxes for item in batch_gt_instances], + [item.labels for item in batch_gt_instances], batch_img_metas) + for k, v in aux_loss.items(): + losses[f'aux_enc_{k}'] = v + + return losses + + def loss_by_feat( + self, + all_layers_cls_scores: Tensor, + all_layers_bbox_preds: Tensor, + enc_cls_scores: Tensor, + enc_bbox_preds: Tensor, + batch_gt_instances: InstanceList, + batch_img_metas: List[dict], + dn_meta: Dict[str, int], + batch_gt_instances_ignore: OptInstanceList = None + ) -> Dict[str, Tensor]: + """Loss function. + + Args: + all_layers_cls_scores (Tensor): Classification scores of all + decoder layers, has shape (num_decoder_layers, bs, + num_queries_total, cls_out_channels). + all_layers_bbox_preds (Tensor): Bbox coordinates of all decoder + layers. Each has shape (num_decoder_layers, bs, + num_queries_total, 4) with normalized coordinate format + (cx, cy, w, h). + enc_cls_scores (Tensor): The top k score of each point on + encoder feature map, has shape (bs, num_queries, + cls_out_channels). + enc_bbox_preds (Tensor): The proposal generated from points + with top k score, has shape (bs, num_queries, 4) with the + last dimension arranged as (cx, cy, w, h). + batch_gt_instances (list[:obj:`InstanceData`]): Batch of + gt_instance. It usually includes ``bboxes`` and ``labels`` + attributes. + batch_img_metas (list[dict]): Meta information of each image, + e.g., image size, scaling factor, etc. + dn_meta (Dict[str, int]): The dictionary saves information about + group collation, including 'num_denoising_queries' and + 'num_denoising_groups'. It will be used for split outputs of + denoising and matching parts and loss calculation. + batch_gt_instances_ignore (list[:obj:`InstanceData`], optional): + Batch of gt_instances_ignore. It includes ``bboxes`` attribute + data that is ignored during training and testing. + Defaults to None. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + (all_layers_matching_cls_scores, all_layers_matching_bbox_preds, + all_layers_denoising_cls_scores, all_layers_denoising_bbox_preds) = \ + self.split_outputs( + all_layers_cls_scores, all_layers_bbox_preds, dn_meta) + + num_dense_queries = dn_meta['num_dense_queries'] + num_layer = all_layers_matching_bbox_preds.size(0) + dense_all_layers_matching_cls_scores = all_layers_matching_cls_scores[:, :, # noqa: E501 + -num_dense_queries:] # noqa: E501 + dense_all_layers_matching_bbox_preds = all_layers_matching_bbox_preds[:, :, # noqa: E501 + -num_dense_queries:] # noqa: E501 + + all_layers_matching_cls_scores = all_layers_matching_cls_scores[:, :, : # noqa: E501 + -num_dense_queries] # noqa: E501 + all_layers_matching_bbox_preds = all_layers_matching_bbox_preds[:, :, : # noqa: E501 + -num_dense_queries] # noqa: E501 + + loss_dict = self.loss_for_distinct_queries( + all_layers_matching_cls_scores, all_layers_matching_bbox_preds, + batch_gt_instances, batch_img_metas, batch_gt_instances_ignore) + + if enc_cls_scores is not None: + + enc_loss_cls, enc_losses_bbox, enc_losses_iou = \ + self.loss_by_feat_single( + enc_cls_scores, enc_bbox_preds, + batch_gt_instances=batch_gt_instances, + batch_img_metas=batch_img_metas) + loss_dict['enc_loss_cls'] = enc_loss_cls + loss_dict['enc_loss_bbox'] = enc_losses_bbox + loss_dict['enc_loss_iou'] = enc_losses_iou + + if all_layers_denoising_cls_scores is not None: + dn_losses_cls, dn_losses_bbox, dn_losses_iou = self.loss_dn( + all_layers_denoising_cls_scores, + all_layers_denoising_bbox_preds, + batch_gt_instances=batch_gt_instances, + batch_img_metas=batch_img_metas, + dn_meta=dn_meta) + loss_dict['dn_loss_cls'] = dn_losses_cls[-1] + loss_dict['dn_loss_bbox'] = dn_losses_bbox[-1] + loss_dict['dn_loss_iou'] = dn_losses_iou[-1] + for num_dec_layer, (loss_cls_i, loss_bbox_i, loss_iou_i) in \ + enumerate(zip(dn_losses_cls[:-1], dn_losses_bbox[:-1], + dn_losses_iou[:-1])): + loss_dict[f'd{num_dec_layer}.dn_loss_cls'] = loss_cls_i + loss_dict[f'd{num_dec_layer}.dn_loss_bbox'] = loss_bbox_i + loss_dict[f'd{num_dec_layer}.dn_loss_iou'] = loss_iou_i + + for l_id in range(num_layer): + cls_scores = dense_all_layers_matching_cls_scores[l_id].sigmoid() + bbox_preds = dense_all_layers_matching_bbox_preds[l_id] + + bbox_preds = bbox_cxcywh_to_xyxy(bbox_preds) + bbox_preds_list = [] + for img_id in range(len(bbox_preds)): + det_bboxes = bbox_preds[img_id] + img_shape = batch_img_metas[img_id]['img_shape'] + det_bboxes[:, 0::2] = det_bboxes[:, 0::2] * img_shape[1] + det_bboxes[:, 1::2] = det_bboxes[:, 1::2] * img_shape[0] + bbox_preds_list.append(det_bboxes) + bbox_preds = torch.stack(bbox_preds_list) + aux_loss = self.aux_loss_for_dense.loss( + cls_scores, bbox_preds, + [item.bboxes for item in batch_gt_instances], + [item.labels for item in batch_gt_instances], batch_img_metas) + for k, v in aux_loss.items(): + loss_dict[f'{l_id}_aux_{k}'] = v + + return loss_dict + + def loss_for_distinct_queries( + self, + all_layers_cls_scores: Tensor, + all_layers_bbox_preds: Tensor, + batch_gt_instances: InstanceList, + batch_img_metas: List[dict], + batch_gt_instances_ignore: OptInstanceList = None + ) -> Dict[str, Tensor]: + """Calculate the loss of distinct queries, that is, excluding denoising + and dense queries. Only select the distinct queries in decoder for + loss. + + Args: + all_layers_cls_scores (Tensor): Classification scores of all + decoder layers, has shape (num_decoder_layers, bs, + num_queries, cls_out_channels). + all_layers_bbox_preds (Tensor): Bbox coordinates of all decoder + layers. It has shape (num_decoder_layers, bs, + num_queries, 4) with the last dimension arranged as + (cx, cy, w, h). + batch_gt_instances (list[:obj:`InstanceData`]): Batch of + gt_instance. It usually includes ``bboxes`` and ``labels`` + attributes. + batch_img_metas (list[dict]): Meta information of each image, + e.g., image size, scaling factor, etc. + batch_gt_instances_ignore (list[:obj:`InstanceData`], optional): + Batch of gt_instances_ignore. It includes ``bboxes`` attribute + data that is ignored during training and testing. + Defaults to None. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + assert batch_gt_instances_ignore is None, \ + f'{self.__class__.__name__} only supports ' \ + 'for batch_gt_instances_ignore setting to None.' + + losses_cls, losses_bbox, losses_iou = multi_apply( + self._loss_for_distinct_queries_single, + all_layers_cls_scores, + all_layers_bbox_preds, + [i for i in range(len(all_layers_bbox_preds))], + batch_gt_instances=batch_gt_instances, + batch_img_metas=batch_img_metas) + + loss_dict = dict() + # loss from the last decoder layer + loss_dict['loss_cls'] = losses_cls[-1] + loss_dict['loss_bbox'] = losses_bbox[-1] + loss_dict['loss_iou'] = losses_iou[-1] + # loss from other decoder layers + num_dec_layer = 0 + for loss_cls_i, loss_bbox_i, loss_iou_i in \ + zip(losses_cls[:-1], losses_bbox[:-1], losses_iou[:-1]): + loss_dict[f'd{num_dec_layer}.loss_cls'] = loss_cls_i + loss_dict[f'd{num_dec_layer}.loss_bbox'] = loss_bbox_i + loss_dict[f'd{num_dec_layer}.loss_iou'] = loss_iou_i + num_dec_layer += 1 + return loss_dict + + def _loss_for_distinct_queries_single(self, cls_scores, bbox_preds, l_id, + batch_gt_instances, batch_img_metas): + """Calculate the loss for outputs from a single decoder layer of + distinct queries, that is, excluding denoising and dense queries. Only + select the distinct queries in decoder for loss. + + Args: + cls_scores (Tensor): Classification scores of a single + decoder layer, has shape (bs, num_queries, cls_out_channels). + bbox_preds (Tensor): Bbox coordinates of a single decoder + layer. It has shape (bs, num_queries, 4) with the last + dimension arranged as (cx, cy, w, h). + l_id (int): Decoder layer index for these outputs. + batch_gt_instances (list[:obj:`InstanceData`]): Batch of + gt_instance. It usually includes ``bboxes`` and ``labels`` + attributes. + batch_img_metas (list[dict]): Meta information of each image, + e.g., image size, scaling factor, etc. + + Returns: + Tuple[Tensor]: A tuple including `loss_cls`, `loss_box` and + `loss_iou`. + """ + num_imgs = cls_scores.size(0) + if 0 < l_id: + batch_mask = [ + self.cache_dict['distinct_query_mask'][l_id - 1][ + img_id * self.cache_dict['num_heads']][0] + for img_id in range(num_imgs) + ] + else: + batch_mask = [ + torch.ones(len(cls_scores[i]), + device=cls_scores.device).bool() + for i in range(num_imgs) + ] + # only select the distinct queries in decoder for loss + cls_scores_list = [ + cls_scores[i][batch_mask[i]] for i in range(num_imgs) + ] + bbox_preds_list = [ + bbox_preds[i][batch_mask[i]] for i in range(num_imgs) + ] + cls_scores = torch.cat(cls_scores_list) + + cls_reg_targets = self.get_targets(cls_scores_list, bbox_preds_list, + batch_gt_instances, batch_img_metas) + (labels_list, label_weights_list, bbox_targets_list, bbox_weights_list, + num_total_pos, num_total_neg) = cls_reg_targets + labels = torch.cat(labels_list, 0) + label_weights = torch.cat(label_weights_list, 0) + bbox_targets = torch.cat(bbox_targets_list, 0) + bbox_weights = torch.cat(bbox_weights_list, 0) + + # classification loss + cls_scores = cls_scores.reshape(-1, self.cls_out_channels) + # construct weighted avg_factor to match with the official DETR repo + cls_avg_factor = num_total_pos * 1.0 + \ + num_total_neg * self.bg_cls_weight + if self.sync_cls_avg_factor: + cls_avg_factor = reduce_mean( + cls_scores.new_tensor([cls_avg_factor])) + cls_avg_factor = max(cls_avg_factor, 1) + + loss_cls = self.loss_cls( + cls_scores, labels, label_weights, avg_factor=cls_avg_factor) + + # Compute the average number of gt boxes across all gpus, for + # normalization purposes + num_total_pos = loss_cls.new_tensor([num_total_pos]) + num_total_pos = torch.clamp(reduce_mean(num_total_pos), min=1).item() + + # construct factors used for rescale bboxes + factors = [] + for img_meta, bbox_pred in zip(batch_img_metas, bbox_preds_list): + img_h, img_w, = img_meta['img_shape'] + factor = bbox_pred.new_tensor([img_w, img_h, img_w, + img_h]).unsqueeze(0).repeat( + bbox_pred.size(0), 1) + factors.append(factor) + factors = torch.cat(factors, 0) + + # DETR regress the relative position of boxes (cxcywh) in the image, + # thus the learning target is normalized by the image size. So here + # we need to re-scale them for calculating IoU loss + bbox_preds = torch.cat(bbox_preds_list) + bbox_preds = bbox_preds.reshape(-1, 4) + bboxes = bbox_cxcywh_to_xyxy(bbox_preds) * factors + bboxes_gt = bbox_cxcywh_to_xyxy(bbox_targets) * factors + + # regression IoU loss, defaultly GIoU loss + loss_iou = self.loss_iou( + bboxes, bboxes_gt, bbox_weights, avg_factor=num_total_pos) + + # regression L1 loss + loss_bbox = self.loss_bbox( + bbox_preds, bbox_targets, bbox_weights, avg_factor=num_total_pos) + return loss_cls, loss_bbox, loss_iou + + def predict_by_feat(self, + layer_cls_scores: Tensor, + layer_bbox_preds: Tensor, + batch_img_metas: List[dict], + rescale: bool = True) -> InstanceList: + """Transform a batch of output features extracted from the head into + bbox results. + + Args: + layer_cls_scores (Tensor): Classification scores of all + decoder layers, has shape (num_decoder_layers, bs, + num_queries, cls_out_channels). + layer_bbox_preds (Tensor): Bbox coordinates of all decoder layers. + Each has shape (num_decoder_layers, bs, num_queries, 4) + with normalized coordinate format (cx, cy, w, h). + batch_img_metas (list[dict]): Meta information of each image. + rescale (bool, optional): If `True`, return boxes in original + image space. Default `False`. + + Returns: + list[obj:`InstanceData`]: Detection results of each image + after the post process. + """ + cls_scores = layer_cls_scores[-1] + bbox_preds = layer_bbox_preds[-1] + + num_imgs = cls_scores.size(0) + # -1 is last layer input query mask + + batch_mask = [ + self.cache_dict['distinct_query_mask'][-1][ + img_id * self.cache_dict['num_heads']][0] + for img_id in range(num_imgs) + ] + + result_list = [] + for img_id in range(len(batch_img_metas)): + cls_score = cls_scores[img_id][batch_mask[img_id]] + bbox_pred = bbox_preds[img_id][batch_mask[img_id]] + img_meta = batch_img_metas[img_id] + results = self._predict_by_feat_single(cls_score, bbox_pred, + img_meta, rescale) + result_list.append(results) + return result_list diff --git a/mmdet/models/detectors/__init__.py b/mmdet/models/detectors/__init__.py index 4a36ceb47da..bc1ff257da4 100644 --- a/mmdet/models/detectors/__init__.py +++ b/mmdet/models/detectors/__init__.py @@ -13,6 +13,7 @@ from .d2_wrapper import Detectron2Wrapper from .dab_detr import DABDETR from .ddod import DDOD +from .ddq_detr import DDQDETR from .deformable_detr import DeformableDETR from .detr import DETR from .dino import DINO @@ -68,5 +69,6 @@ 'TwoStagePanopticSegmentor', 'PanopticFPN', 'QueryInst', 'LAD', 'TOOD', 'MaskFormer', 'DDOD', 'Mask2Former', 'SemiBaseDetector', 'SoftTeacher', 'RTMDet', 'Detectron2Wrapper', 'CrowdDet', 'CondInst', 'BoxInst', - 'DetectionTransformer', 'ConditionalDETR', 'DINO', 'DABDETR', 'GLIP' + 'DetectionTransformer', 'ConditionalDETR', 'DINO', 'DABDETR', 'GLIP', + 'DDQDETR' ] diff --git a/mmdet/models/detectors/ddq_detr.py b/mmdet/models/detectors/ddq_detr.py new file mode 100644 index 00000000000..57d4959d50d --- /dev/null +++ b/mmdet/models/detectors/ddq_detr.py @@ -0,0 +1,274 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from typing import Dict, Tuple + +# Copyright (c) OpenMMLab. All rights reserved. +import torch +from mmcv.ops import MultiScaleDeformableAttention, batched_nms +from torch import Tensor, nn +from torch.nn.init import normal_ + +from mmdet.registry import MODELS +from mmdet.structures import OptSampleList +from mmdet.structures.bbox import bbox_cxcywh_to_xyxy +from mmdet.utils import OptConfigType +from ..layers import DDQTransformerDecoder +from ..utils import align_tensor +from .deformable_detr import DeformableDETR +from .dino import DINO + + +@MODELS.register_module() +class DDQDETR(DINO): + r"""Implementation of `Dense Distinct Query for + End-to-End Object Detection `_ + + Code is modified from the `official github repo + `_. + + Args: + dense_topk_ratio (float): Ratio of num_dense queries to num_queries. + Defaults to 1.5. + dqs_cfg (:obj:`ConfigDict` or dict, optional): Config of + Distinct Queries Selection. Defaults to nms with + `iou_threshold` = 0.8. + """ + + def __init__(self, + *args, + dense_topk_ratio: float = 1.5, + dqs_cfg: OptConfigType = dict(type='nms', iou_threshold=0.8), + **kwargs): + self.dense_topk_ratio = dense_topk_ratio + self.decoder_cfg = kwargs['decoder'] + self.dqs_cfg = dqs_cfg + super().__init__(*args, **kwargs) + + # a share dict in all moduls + # pass some intermediate results and config parameters + cache_dict = dict() + for m in self.modules(): + m.cache_dict = cache_dict + # first element is the start index of matching queries + # second element is the number of matching queries + self.cache_dict['dis_query_info'] = [0, 0] + + # mask for distinct queries in each decoder layer + self.cache_dict['distinct_query_mask'] = [] + # pass to decoder do the dqs + self.cache_dict['cls_branches'] = self.bbox_head.cls_branches + # Used to construct the attention mask after dqs + self.cache_dict['num_heads'] = self.encoder.layers[ + 0].self_attn.num_heads + # pass to decoder to do the dqs + self.cache_dict['dqs_cfg'] = self.dqs_cfg + + def _init_layers(self) -> None: + """Initialize layers except for backbone, neck and bbox_head.""" + super(DDQDETR, self)._init_layers() + self.decoder = DDQTransformerDecoder(**self.decoder_cfg) + self.query_embedding = None + self.query_map = nn.Linear(self.embed_dims, self.embed_dims) + + def init_weights(self) -> None: + """Initialize weights for Transformer and other components.""" + super(DeformableDETR, self).init_weights() + for coder in self.encoder, self.decoder: + for p in coder.parameters(): + if p.dim() > 1: + nn.init.xavier_uniform_(p) + for m in self.modules(): + if isinstance(m, MultiScaleDeformableAttention): + m.init_weights() + nn.init.xavier_uniform_(self.memory_trans_fc.weight) + normal_(self.level_embed) + + def pre_decoder( + self, + memory: Tensor, + memory_mask: Tensor, + spatial_shapes: Tensor, + batch_data_samples: OptSampleList = None, + ) -> Tuple[Dict]: + """Prepare intermediate variables before entering Transformer decoder, + such as `query`, `memory`, and `reference_points`. + + Args: + memory (Tensor): The output embeddings of the Transformer encoder, + has shape (bs, num_feat_points, dim). + memory_mask (Tensor): ByteTensor, the padding mask of the memory, + has shape (bs, num_feat_points). Will only be used when + `as_two_stage` is `True`. + spatial_shapes (Tensor): Spatial shapes of features in all levels. + With shape (num_levels, 2), last dimension represents (h, w). + Will only be used when `as_two_stage` is `True`. + batch_data_samples (list[:obj:`DetDataSample`]): The batch + data samples. It usually includes information such + as `gt_instance` or `gt_panoptic_seg` or `gt_sem_seg`. + Defaults to None. + + Returns: + tuple[dict]: The decoder_inputs_dict and head_inputs_dict. + + - decoder_inputs_dict (dict): The keyword dictionary args of + `self.forward_decoder()`, which includes 'query', 'memory', + `reference_points`, and `dn_mask`. The reference points of + decoder input here are 4D boxes, although it has `points` + in its name. + - head_inputs_dict (dict): The keyword dictionary args of the + bbox_head functions, which includes `topk_score`, `topk_coords`, + `dense_topk_score`, `dense_topk_coords`, + and `dn_meta`, when `self.training` is `True`, else is empty. + """ + bs, _, c = memory.shape + output_memory, output_proposals = self.gen_encoder_output_proposals( + memory, memory_mask, spatial_shapes) + enc_outputs_class = self.bbox_head.cls_branches[ + self.decoder.num_layers]( + output_memory) + enc_outputs_coord_unact = self.bbox_head.reg_branches[ + self.decoder.num_layers](output_memory) + output_proposals + + if self.training: + # aux dense branch particularly in DDQ DETR, which doesn't exist + # in DINO. + # -1 is the aux head for the encoder + dense_enc_outputs_class = self.bbox_head.cls_branches[-1]( + output_memory) + dense_enc_outputs_coord_unact = self.bbox_head.reg_branches[-1]( + output_memory) + output_proposals + + topk = self.num_queries + dense_topk = int(topk * self.dense_topk_ratio) + + proposals = enc_outputs_coord_unact.sigmoid() + proposals = bbox_cxcywh_to_xyxy(proposals) + scores = enc_outputs_class.max(-1)[0].sigmoid() + + if self.training: + # aux dense branch particularly in DDQ DETR, which doesn't exist + # in DINO. + dense_proposals = dense_enc_outputs_coord_unact.sigmoid() + dense_proposals = bbox_cxcywh_to_xyxy(dense_proposals) + dense_scores = dense_enc_outputs_class.max(-1)[0].sigmoid() + + num_imgs = len(scores) + topk_score = [] + topk_coords_unact = [] + # Distinct query. + query = [] + + dense_topk_score = [] + dense_topk_coords_unact = [] + dense_query = [] + + for img_id in range(num_imgs): + single_proposals = proposals[img_id] + single_scores = scores[img_id] + + # `batched_nms` of class scores and bbox coordinations is used + # particularly by DDQ DETR for region proposal generation, + # instead of `topk` of class scores by DINO. + _, keep_idxs = batched_nms( + single_proposals, single_scores, + torch.ones(len(single_scores), device=single_scores.device), + self.cache_dict['dqs_cfg']) + + if self.training: + # aux dense branch particularly in DDQ DETR, which doesn't + # exist in DINO. + dense_single_proposals = dense_proposals[img_id] + dense_single_scores = dense_scores[img_id] + # sort according the score + # Only sort by classification score, neither nms nor topk is + # required. So input parameter `nms_cfg` = None. + _, dense_keep_idxs = batched_nms( + dense_single_proposals, dense_single_scores, + torch.ones( + len(dense_single_scores), + device=dense_single_scores.device), None) + + dense_topk_score.append(dense_enc_outputs_class[img_id] + [dense_keep_idxs][:dense_topk]) + dense_topk_coords_unact.append( + dense_enc_outputs_coord_unact[img_id][dense_keep_idxs] + [:dense_topk]) + + topk_score.append(enc_outputs_class[img_id][keep_idxs][:topk]) + + # Instead of initializing the content part with transformed + # coordinates in Deformable DETR, we fuse the feature map + # embedding of distinct positions as the content part, which + # makes the initial queries more distinct. + topk_coords_unact.append( + enc_outputs_coord_unact[img_id][keep_idxs][:topk]) + + map_memory = self.query_map(memory[img_id].detach()) + query.append(map_memory[keep_idxs][:topk]) + if self.training: + # aux dense branch particularly in DDQ DETR, which doesn't + # exist in DINO. + dense_query.append(map_memory[dense_keep_idxs][:dense_topk]) + + topk_score = align_tensor(topk_score, topk) + topk_coords_unact = align_tensor(topk_coords_unact, topk) + query = align_tensor(query, topk) + if self.training: + dense_topk_score = align_tensor(dense_topk_score) + dense_topk_coords_unact = align_tensor(dense_topk_coords_unact) + + dense_query = align_tensor(dense_query) + num_dense_queries = dense_query.size(1) + if self.training: + query = torch.cat([query, dense_query], dim=1) + topk_coords_unact = torch.cat( + [topk_coords_unact, dense_topk_coords_unact], dim=1) + + topk_coords = topk_coords_unact.sigmoid() + if self.training: + dense_topk_coords = topk_coords[:, -num_dense_queries:] + topk_coords = topk_coords[:, :-num_dense_queries] + + topk_coords_unact = topk_coords_unact.detach() + + if self.training: + dn_label_query, dn_bbox_query, dn_mask, dn_meta = \ + self.dn_query_generator(batch_data_samples) + query = torch.cat([dn_label_query, query], dim=1) + reference_points = torch.cat([dn_bbox_query, topk_coords_unact], + dim=1) + + # Update `dn_mask` to add mask for dense queries. + ori_size = dn_mask.size(-1) + new_size = dn_mask.size(-1) + num_dense_queries + new_dn_mask = dn_mask.new_ones((new_size, new_size)).bool() + dense_mask = torch.zeros(num_dense_queries, + num_dense_queries).bool() + self.cache_dict['dis_query_info'] = [dn_label_query.size(1), topk] + + new_dn_mask[ori_size:, ori_size:] = dense_mask + new_dn_mask[:ori_size, :ori_size] = dn_mask + dn_meta['num_dense_queries'] = num_dense_queries + dn_mask = new_dn_mask + self.cache_dict['num_dense_queries'] = num_dense_queries + self.decoder.aux_reg_branches = self.bbox_head.aux_reg_branches + + else: + self.cache_dict['dis_query_info'] = [0, topk] + reference_points = topk_coords_unact + dn_mask, dn_meta = None, None + + reference_points = reference_points.sigmoid() + + decoder_inputs_dict = dict( + query=query, + memory=memory, + reference_points=reference_points, + dn_mask=dn_mask) + head_inputs_dict = dict( + enc_outputs_class=topk_score, + enc_outputs_coord=topk_coords, + aux_enc_outputs_class=dense_topk_score, + aux_enc_outputs_coord=dense_topk_coords, + dn_meta=dn_meta) if self.training else dict() + + return decoder_inputs_dict, head_inputs_dict diff --git a/mmdet/models/layers/__init__.py b/mmdet/models/layers/__init__.py index c6328f4c0f7..6ddaaff2b52 100644 --- a/mmdet/models/layers/__init__.py +++ b/mmdet/models/layers/__init__.py @@ -23,7 +23,7 @@ ConditionalDetrTransformerDecoderLayer, DABDetrTransformerDecoder, DABDetrTransformerDecoderLayer, - DABDetrTransformerEncoder, + DABDetrTransformerEncoder, DDQTransformerDecoder, DeformableDetrTransformerDecoder, DeformableDetrTransformerDecoderLayer, DeformableDetrTransformerEncoder, @@ -55,7 +55,8 @@ 'DeformableDetrTransformerDecoderLayer', 'AdaptivePadding', 'coordinate_to_encoding', 'ConditionalAttention', 'DABDetrTransformerDecoderLayer', 'DABDetrTransformerDecoder', - 'DABDetrTransformerEncoder', 'ConditionalDetrTransformerDecoder', + 'DABDetrTransformerEncoder', 'DDQTransformerDecoder', + 'ConditionalDetrTransformerDecoder', 'ConditionalDetrTransformerDecoderLayer', 'DinoTransformerDecoder', 'CdnQueryGenerator', 'Mask2FormerTransformerEncoder', 'Mask2FormerTransformerDecoderLayer', 'Mask2FormerTransformerDecoder', diff --git a/mmdet/models/layers/transformer/__init__.py b/mmdet/models/layers/transformer/__init__.py index 0d70f845f8f..3465ef3d1a7 100644 --- a/mmdet/models/layers/transformer/__init__.py +++ b/mmdet/models/layers/transformer/__init__.py @@ -4,6 +4,7 @@ from .dab_detr_layers import (DABDetrTransformerDecoder, DABDetrTransformerDecoderLayer, DABDetrTransformerEncoder) +from .ddq_detr_layers import DDQTransformerDecoder from .deformable_detr_layers import (DeformableDetrTransformerDecoder, DeformableDetrTransformerDecoderLayer, DeformableDetrTransformerEncoder, @@ -28,7 +29,7 @@ 'DeformableDetrTransformerDecoderLayer', 'coordinate_to_encoding', 'ConditionalAttention', 'DABDetrTransformerDecoderLayer', 'DABDetrTransformerDecoder', 'DABDetrTransformerEncoder', - 'ConditionalDetrTransformerDecoder', + 'DDQTransformerDecoder', 'ConditionalDetrTransformerDecoder', 'ConditionalDetrTransformerDecoderLayer', 'DinoTransformerDecoder', 'CdnQueryGenerator', 'Mask2FormerTransformerEncoder', 'Mask2FormerTransformerDecoderLayer', 'Mask2FormerTransformerDecoder' diff --git a/mmdet/models/layers/transformer/ddq_detr_layers.py b/mmdet/models/layers/transformer/ddq_detr_layers.py new file mode 100644 index 00000000000..57664c7ea2b --- /dev/null +++ b/mmdet/models/layers/transformer/ddq_detr_layers.py @@ -0,0 +1,223 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import copy + +import torch +from mmcv.ops import batched_nms +from torch import Tensor, nn + +from mmdet.structures.bbox import bbox_cxcywh_to_xyxy +from .deformable_detr_layers import DeformableDetrTransformerDecoder +from .utils import MLP, coordinate_to_encoding, inverse_sigmoid + + +class DDQTransformerDecoder(DeformableDetrTransformerDecoder): + """Transformer decoder of DDQ.""" + + def _init_layers(self) -> None: + """Initialize encoder layers.""" + super()._init_layers() + self.ref_point_head = MLP(self.embed_dims * 2, self.embed_dims, + self.embed_dims, 2) + self.norm = nn.LayerNorm(self.embed_dims) + + def select_distinct_queries(self, reference_points: Tensor, query: Tensor, + self_attn_mask: Tensor, layer_index): + """Get updated `self_attn_mask` for distinct queries selection, it is + used in self attention layers of decoder. + + Args: + reference_points (Tensor): The input reference of decoder, + has shape (bs, num_queries, 4) with the last dimension + arranged as (cx, cy, w, h). + query (Tensor): The input query of decoder, has shape + (bs, num_queries, dims). + self_attn_mask (Tensor): The input self attention mask of + last decoder layer, has shape (bs, num_queries_total, + num_queries_total). + layer_index (int): Last decoder layer index, used to get + classification score of last layer output, for + distinct queries selection. + + Returns: + Tensor: `self_attn_mask` used in self attention layers + of decoder, has shape (bs, num_queries_total, + num_queries_total). + """ + num_imgs = len(reference_points) + dis_start, num_dis = self.cache_dict['dis_query_info'] + # shape of self_attn_mask + # (batch⋅num_heads, num_queries, embed_dims) + dis_mask = self_attn_mask[:, dis_start:dis_start + num_dis, + dis_start:dis_start + num_dis] + # cls_branches from DDQDETRHead + scores = self.cache_dict['cls_branches'][layer_index]( + query[:, dis_start:dis_start + num_dis]).sigmoid().max(-1).values + proposals = reference_points[:, dis_start:dis_start + num_dis] + proposals = bbox_cxcywh_to_xyxy(proposals) + + attn_mask_list = [] + for img_id in range(num_imgs): + single_proposals = proposals[img_id] + single_scores = scores[img_id] + attn_mask = ~dis_mask[img_id * self.cache_dict['num_heads']][0] + # distinct query inds in this layer + ori_index = attn_mask.nonzero().view(-1) + _, keep_idxs = batched_nms(single_proposals[ori_index], + single_scores[ori_index], + torch.ones(len(ori_index)), + self.cache_dict['dqs_cfg']) + + real_keep_index = ori_index[keep_idxs] + + attn_mask = torch.ones_like(dis_mask[0]).bool() + # such a attn_mask give best result + # If it requires to keep index i, then all cells in row or column + # i should be kept in `attn_mask` . For example, if + # `real_keep_index` = [1, 4], and `attn_mask` size = [8, 8], + # then all cells at rows or columns [1, 4] should be kept, and + # all the other cells should be masked out. So the value of + # `attn_mask` should be: + # + # target\source 0 1 2 3 4 5 6 7 + # 0 [ 0 1 0 0 1 0 0 0 ] + # 1 [ 1 1 1 1 1 1 1 1 ] + # 2 [ 0 1 0 0 1 0 0 0 ] + # 3 [ 0 1 0 0 1 0 0 0 ] + # 4 [ 1 1 1 1 1 1 1 1 ] + # 5 [ 0 1 0 0 1 0 0 0 ] + # 6 [ 0 1 0 0 1 0 0 0 ] + # 7 [ 0 1 0 0 1 0 0 0 ] + attn_mask[real_keep_index] = False + attn_mask[:, real_keep_index] = False + + attn_mask = attn_mask[None].repeat(self.cache_dict['num_heads'], 1, + 1) + attn_mask_list.append(attn_mask) + attn_mask = torch.cat(attn_mask_list) + self_attn_mask = copy.deepcopy(self_attn_mask) + self_attn_mask[:, dis_start:dis_start + num_dis, + dis_start:dis_start + num_dis] = attn_mask + # will be used in loss and inference + self.cache_dict['distinct_query_mask'].append(~attn_mask) + return self_attn_mask + + def forward(self, query: Tensor, value: Tensor, key_padding_mask: Tensor, + self_attn_mask: Tensor, reference_points: Tensor, + spatial_shapes: Tensor, level_start_index: Tensor, + valid_ratios: Tensor, reg_branches: nn.ModuleList, + **kwargs) -> Tensor: + """Forward function of Transformer decoder. + + Args: + query (Tensor): The input query, has shape (bs, num_queries, + dims). + value (Tensor): The input values, has shape (bs, num_value, dim). + key_padding_mask (Tensor): The `key_padding_mask` of `cross_attn` + input. ByteTensor, has shape (bs, num_value). + self_attn_mask (Tensor): The attention mask to prevent information + leakage from different denoising groups, distinct queries and + dense queries, has shape (num_queries_total, + num_queries_total). It will be updated for distinct queries + selection in this forward function. It is `None` when + `self.training` is `False`. + reference_points (Tensor): The initial reference, has shape + (bs, num_queries, 4) with the last dimension arranged as + (cx, cy, w, h). + spatial_shapes (Tensor): Spatial shapes of features in all levels, + has shape (num_levels, 2), last dimension represents (h, w). + level_start_index (Tensor): The start index of each level. + A tensor has shape (num_levels, ) and can be represented + as [0, h_0*w_0, h_0*w_0+h_1*w_1, ...]. + valid_ratios (Tensor): The ratios of the valid width and the valid + height relative to the width and the height of features in all + levels, has shape (bs, num_levels, 2). + reg_branches: (obj:`nn.ModuleList`): Used for refining the + regression results. + + Returns: + tuple[Tensor]: Output queries and references of Transformer + decoder + + - query (Tensor): Output embeddings of the last decoder, has + shape (bs, num_queries, embed_dims) when `return_intermediate` + is `False`. Otherwise, Intermediate output embeddings of all + decoder layers, has shape (num_decoder_layers, bs, num_queries, + embed_dims). + - reference_points (Tensor): The reference of the last decoder + layer, has shape (bs, num_queries, 4) when `return_intermediate` + is `False`. Otherwise, Intermediate references of all decoder + layers, has shape (1 + num_decoder_layers, bs, num_queries, 4). + The coordinates are arranged as (cx, cy, w, h). + """ + intermediate = [] + intermediate_reference_points = [reference_points] + self.cache_dict['distinct_query_mask'] = [] + if self_attn_mask is None: + self_attn_mask = torch.zeros((query.size(1), query.size(1)), + device=query.device).bool() + # shape is (batch*number_heads, num_queries, num_queries) + self_attn_mask = self_attn_mask[None].repeat( + len(query) * self.cache_dict['num_heads'], 1, 1) + for layer_index, layer in enumerate(self.layers): + if reference_points.shape[-1] == 4: + reference_points_input = \ + reference_points[:, :, None] * torch.cat( + [valid_ratios, valid_ratios], -1)[:, None] + else: + assert reference_points.shape[-1] == 2 + reference_points_input = \ + reference_points[:, :, None] * valid_ratios[:, None] + + query_sine_embed = coordinate_to_encoding( + reference_points_input[:, :, 0, :], + num_feats=self.embed_dims // 2) + query_pos = self.ref_point_head(query_sine_embed) + + query = layer( + query, + query_pos=query_pos, + value=value, + key_padding_mask=key_padding_mask, + self_attn_mask=self_attn_mask, + spatial_shapes=spatial_shapes, + level_start_index=level_start_index, + valid_ratios=valid_ratios, + reference_points=reference_points_input, + **kwargs) + + if not self.training: + tmp = reg_branches[layer_index](query) + assert reference_points.shape[-1] == 4 + new_reference_points = tmp + inverse_sigmoid( + reference_points, eps=1e-3) + new_reference_points = new_reference_points.sigmoid() + reference_points = new_reference_points.detach() + if layer_index < (len(self.layers) - 1): + self_attn_mask = self.select_distinct_queries( + reference_points, query, self_attn_mask, layer_index) + + else: + num_dense = self.cache_dict['num_dense_queries'] + tmp = reg_branches[layer_index](query[:, :-num_dense]) + tmp_dense = self.aux_reg_branches[layer_index]( + query[:, -num_dense:]) + + tmp = torch.cat([tmp, tmp_dense], dim=1) + assert reference_points.shape[-1] == 4 + new_reference_points = tmp + inverse_sigmoid( + reference_points, eps=1e-3) + new_reference_points = new_reference_points.sigmoid() + reference_points = new_reference_points.detach() + if layer_index < (len(self.layers) - 1): + self_attn_mask = self.select_distinct_queries( + reference_points, query, self_attn_mask, layer_index) + + if self.return_intermediate: + intermediate.append(self.norm(query)) + intermediate_reference_points.append(new_reference_points) + + if self.return_intermediate: + return torch.stack(intermediate), torch.stack( + intermediate_reference_points) + + return query, reference_points diff --git a/mmdet/models/losses/__init__.py b/mmdet/models/losses/__init__.py index 91b077a40ab..13ff8b04d65 100644 --- a/mmdet/models/losses/__init__.py +++ b/mmdet/models/losses/__init__.py @@ -4,6 +4,7 @@ from .balanced_l1_loss import BalancedL1Loss, balanced_l1_loss from .cross_entropy_loss import (CrossEntropyLoss, binary_cross_entropy, cross_entropy, mask_cross_entropy) +from .ddq_detr_aux_loss import DDQAuxLoss from .dice_loss import DiceLoss from .eqlv2_loss import EQLV2Loss from .focal_loss import FocalLoss, sigmoid_focal_loss @@ -35,5 +36,6 @@ 'carl_loss', 'AssociativeEmbeddingLoss', 'GaussianFocalLoss', 'QualityFocalLoss', 'DistributionFocalLoss', 'VarifocalLoss', 'KnowledgeDistillationKLDivLoss', 'SeesawLoss', 'DiceLoss', 'EQLV2Loss', - 'MarginL2Loss', 'MultiPosCrossEntropyLoss', 'L2Loss', 'TripletLoss' + 'MarginL2Loss', 'MultiPosCrossEntropyLoss', 'L2Loss', 'TripletLoss', + 'DDQAuxLoss' ] diff --git a/mmdet/models/losses/ddq_detr_aux_loss.py b/mmdet/models/losses/ddq_detr_aux_loss.py new file mode 100644 index 00000000000..41f1c7166e6 --- /dev/null +++ b/mmdet/models/losses/ddq_detr_aux_loss.py @@ -0,0 +1,303 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import torch +import torch.nn as nn +from mmengine.structures import BaseDataElement + +from mmdet.models.utils import multi_apply +from mmdet.registry import MODELS, TASK_UTILS +from mmdet.utils import reduce_mean + + +class DDQAuxLoss(nn.Module): + """DDQ auxiliary branches loss for dense queries. + + Args: + loss_cls (dict): + Configuration of classification loss function. + loss_bbox (dict): + Configuration of bbox regression loss function. + train_cfg (dict): + Configuration of gt targets assigner for each predicted bbox. + """ + + def __init__( + self, + loss_cls=dict( + type='QualityFocalLoss', + use_sigmoid=True, + activated=True, # use probability instead of logit as input + beta=2.0, + loss_weight=1.0), + loss_bbox=dict(type='GIoULoss', loss_weight=2.0), + train_cfg=dict( + assigner=dict(type='TopkHungarianAssigner', topk=8), + alpha=1, + beta=6), + ): + super(DDQAuxLoss, self).__init__() + self.train_cfg = train_cfg + self.loss_cls = MODELS.build(loss_cls) + self.loss_bbox = MODELS.build(loss_bbox) + self.assigner = TASK_UTILS.build(self.train_cfg['assigner']) + + sampler_cfg = dict(type='PseudoSampler') + self.sampler = TASK_UTILS.build(sampler_cfg) + + def loss_single(self, cls_score, bbox_pred, labels, label_weights, + bbox_targets, alignment_metrics): + """Calculate auxiliary branches loss for dense queries for one image. + + Args: + cls_score (Tensor): Predicted normalized classification + scores for one image, has shape (num_dense_queries, + cls_out_channels). + bbox_pred (Tensor): Predicted unnormalized bbox coordinates + for one image, has shape (num_dense_queries, 4) with the + last dimension arranged as (x1, y1, x2, y2). + labels (Tensor): Labels for one image. + label_weights (Tensor): Label weights for one image. + bbox_targets (Tensor): Bbox targets for one image. + alignment_metrics (Tensor): Normalized alignment metrics for one + image. + + Returns: + tuple: A tuple of loss components and loss weights. + """ + bbox_targets = bbox_targets.reshape(-1, 4) + labels = labels.reshape(-1) + alignment_metrics = alignment_metrics.reshape(-1) + label_weights = label_weights.reshape(-1) + targets = (labels, alignment_metrics) + cls_loss_func = self.loss_cls + + loss_cls = cls_loss_func( + cls_score, targets, label_weights, avg_factor=1.0) + + # FG cat_id: [0, num_classes -1], BG cat_id: num_classes + bg_class_ind = cls_score.size(-1) + pos_inds = ((labels >= 0) + & (labels < bg_class_ind)).nonzero().squeeze(1) + + if len(pos_inds) > 0: + pos_bbox_targets = bbox_targets[pos_inds] + pos_bbox_pred = bbox_pred[pos_inds] + + pos_decode_bbox_pred = pos_bbox_pred + pos_decode_bbox_targets = pos_bbox_targets + + # regression loss + pos_bbox_weight = alignment_metrics[pos_inds] + + loss_bbox = self.loss_bbox( + pos_decode_bbox_pred, + pos_decode_bbox_targets, + weight=pos_bbox_weight, + avg_factor=1.0) + else: + loss_bbox = bbox_pred.sum() * 0 + pos_bbox_weight = bbox_targets.new_tensor(0.) + + return loss_cls, loss_bbox, alignment_metrics.sum( + ), pos_bbox_weight.sum() + + def loss(self, cls_scores, bbox_preds, gt_bboxes, gt_labels, img_metas, + **kwargs): + """Calculate auxiliary branches loss for dense queries. + + Args: + cls_scores (Tensor): Predicted normalized classification + scores, has shape (bs, num_dense_queries, + cls_out_channels). + bbox_preds (Tensor): Predicted unnormalized bbox coordinates, + has shape (bs, num_dense_queries, 4) with the last + dimension arranged as (x1, y1, x2, y2). + gt_bboxes (list[Tensor]): List of unnormalized ground truth + bboxes for each image, each has shape (num_gt, 4) with the + last dimension arranged as (x1, y1, x2, y2). + NOTE: num_gt is dynamic for each image. + gt_labels (list[Tensor]): List of ground truth classification + index for each image, each has shape (num_gt,). + NOTE: num_gt is dynamic for each image. + img_metas (list[dict]): Meta information for one image, + e.g., image size, scaling factor, etc. + + Returns: + dict: A dictionary of loss components. + """ + flatten_cls_scores = cls_scores + flatten_bbox_preds = bbox_preds + + cls_reg_targets = self.get_targets( + flatten_cls_scores, + flatten_bbox_preds, + gt_bboxes, + img_metas, + gt_labels_list=gt_labels, + ) + (labels_list, label_weights_list, bbox_targets_list, + alignment_metrics_list) = cls_reg_targets + + losses_cls, losses_bbox, \ + cls_avg_factors, bbox_avg_factors = multi_apply( + self.loss_single, + flatten_cls_scores, + flatten_bbox_preds, + labels_list, + label_weights_list, + bbox_targets_list, + alignment_metrics_list, + ) + + cls_avg_factor = reduce_mean(sum(cls_avg_factors)).clamp_(min=1).item() + losses_cls = list(map(lambda x: x / cls_avg_factor, losses_cls)) + + bbox_avg_factor = reduce_mean( + sum(bbox_avg_factors)).clamp_(min=1).item() + losses_bbox = list(map(lambda x: x / bbox_avg_factor, losses_bbox)) + return dict(aux_loss_cls=losses_cls, aux_loss_bbox=losses_bbox) + + def get_targets(self, + cls_scores, + bbox_preds, + gt_bboxes_list, + img_metas, + gt_labels_list=None, + **kwargs): + """Compute regression and classification targets for a batch images. + + Args: + cls_scores (Tensor): Predicted normalized classification + scores, has shape (bs, num_dense_queries, + cls_out_channels). + bbox_preds (Tensor): Predicted unnormalized bbox coordinates, + has shape (bs, num_dense_queries, 4) with the last + dimension arranged as (x1, y1, x2, y2). + gt_bboxes_list (List[Tensor]): List of unnormalized ground truth + bboxes for each image, each has shape (num_gt, 4) with the + last dimension arranged as (x1, y1, x2, y2). + NOTE: num_gt is dynamic for each image. + img_metas (list[dict]): Meta information for one image, + e.g., image size, scaling factor, etc. + gt_labels_list (list[Tensor]): List of ground truth classification + index for each image, each has shape (num_gt,). + NOTE: num_gt is dynamic for each image. + Default: None. + + Returns: + tuple: a tuple containing the following targets. + + - all_labels (list[Tensor]): Labels for all images. + - all_label_weights (list[Tensor]): Label weights for all images. + - all_bbox_targets (list[Tensor]): Bbox targets for all images. + - all_assign_metrics (list[Tensor]): Normalized alignment metrics + for all images. + """ + (all_labels, all_label_weights, all_bbox_targets, + all_assign_metrics) = multi_apply(self._get_target_single, cls_scores, + bbox_preds, gt_bboxes_list, + gt_labels_list, img_metas) + + return (all_labels, all_label_weights, all_bbox_targets, + all_assign_metrics) + + def _get_target_single(self, cls_scores, bbox_preds, gt_bboxes, gt_labels, + img_meta, **kwargs): + """Compute regression and classification targets for one image. + + Args: + cls_scores (Tensor): Predicted normalized classification + scores for one image, has shape (num_dense_queries, + cls_out_channels). + bbox_preds (Tensor): Predicted unnormalized bbox coordinates + for one image, has shape (num_dense_queries, 4) with the + last dimension arranged as (x1, y1, x2, y2). + gt_bboxes (Tensor): Unnormalized ground truth + bboxes for one image, has shape (num_gt, 4) with the + last dimension arranged as (x1, y1, x2, y2). + NOTE: num_gt is dynamic for each image. + gt_labels (Tensor): Ground truth classification + index for the image, has shape (num_gt,). + NOTE: num_gt is dynamic for each image. + img_meta (dict): Meta information for one image. + + Returns: + tuple[Tensor]: a tuple containing the following for one image. + + - labels (Tensor): Labels for one image. + - label_weights (Tensor): Label weights for one image. + - bbox_targets (Tensor): Bbox targets for one image. + - norm_alignment_metrics (Tensor): Normalized alignment + metrics for one image. + """ + if len(gt_labels) == 0: + num_valid_anchors = len(cls_scores) + bbox_targets = torch.zeros_like(bbox_preds) + labels = bbox_preds.new_full((num_valid_anchors, ), + cls_scores.size(-1), + dtype=torch.long) + label_weights = bbox_preds.new_zeros( + num_valid_anchors, dtype=torch.float) + norm_alignment_metrics = bbox_preds.new_zeros( + num_valid_anchors, dtype=torch.float) + return (labels, label_weights, bbox_targets, + norm_alignment_metrics) + + assign_result = self.assigner.assign(cls_scores, bbox_preds, gt_bboxes, + gt_labels, img_meta) + assign_ious = assign_result.max_overlaps + assign_metrics = assign_result.assign_metrics + + pred_instances = BaseDataElement() + gt_instances = BaseDataElement() + + pred_instances.bboxes = bbox_preds + gt_instances.bboxes = gt_bboxes + + pred_instances.priors = cls_scores + gt_instances.labels = gt_labels + + sampling_result = self.sampler.sample(assign_result, pred_instances, + gt_instances) + + num_valid_anchors = len(cls_scores) + bbox_targets = torch.zeros_like(bbox_preds) + labels = bbox_preds.new_full((num_valid_anchors, ), + cls_scores.size(-1), + dtype=torch.long) + label_weights = bbox_preds.new_zeros( + num_valid_anchors, dtype=torch.float) + norm_alignment_metrics = bbox_preds.new_zeros( + num_valid_anchors, dtype=torch.float) + + pos_inds = sampling_result.pos_inds + neg_inds = sampling_result.neg_inds + if len(pos_inds) > 0: + # point-based + pos_bbox_targets = sampling_result.pos_gt_bboxes + bbox_targets[pos_inds, :] = pos_bbox_targets + + if gt_labels is None: + # Only dense_heads gives gt_labels as None + # Foreground is the first class since v2.5.0 + labels[pos_inds] = 0 + else: + labels[pos_inds] = gt_labels[ + sampling_result.pos_assigned_gt_inds] + + label_weights[pos_inds] = 1.0 + + if len(neg_inds) > 0: + label_weights[neg_inds] = 1.0 + + class_assigned_gt_inds = torch.unique( + sampling_result.pos_assigned_gt_inds) + for gt_inds in class_assigned_gt_inds: + gt_class_inds = sampling_result.pos_assigned_gt_inds == gt_inds + pos_alignment_metrics = assign_metrics[gt_class_inds] + pos_ious = assign_ious[gt_class_inds] + pos_norm_alignment_metrics = pos_alignment_metrics / ( + pos_alignment_metrics.max() + 10e-8) * pos_ious.max() + norm_alignment_metrics[ + pos_inds[gt_class_inds]] = pos_norm_alignment_metrics + + return (labels, label_weights, bbox_targets, norm_alignment_metrics) diff --git a/mmdet/models/task_modules/assigners/__init__.py b/mmdet/models/task_modules/assigners/__init__.py index 90ae8f8e76b..a98b0ed499a 100644 --- a/mmdet/models/task_modules/assigners/__init__.py +++ b/mmdet/models/task_modules/assigners/__init__.py @@ -16,13 +16,15 @@ from .region_assigner import RegionAssigner from .sim_ota_assigner import SimOTAAssigner from .task_aligned_assigner import TaskAlignedAssigner +from .topk_hungarian_assigner import TopkHungarianAssigner from .uniform_assigner import UniformAssigner __all__ = [ 'BaseAssigner', 'MaxIoUAssigner', 'ApproxMaxIoUAssigner', 'AssignResult', 'PointAssigner', 'ATSSAssigner', 'CenterRegionAssigner', 'GridAssigner', 'HungarianAssigner', 'RegionAssigner', 'UniformAssigner', 'SimOTAAssigner', - 'TaskAlignedAssigner', 'BBoxL1Cost', 'ClassificationCost', - 'CrossEntropyLossCost', 'DiceCost', 'FocalLossCost', 'IoUCost', - 'BboxOverlaps2D', 'DynamicSoftLabelAssigner', 'MultiInstanceAssigner' + 'TaskAlignedAssigner', 'TopkHungarianAssigner', 'BBoxL1Cost', + 'ClassificationCost', 'CrossEntropyLossCost', 'DiceCost', 'FocalLossCost', + 'IoUCost', 'BboxOverlaps2D', 'DynamicSoftLabelAssigner', + 'MultiInstanceAssigner' ] diff --git a/mmdet/models/task_modules/assigners/topk_hungarian_assigner.py b/mmdet/models/task_modules/assigners/topk_hungarian_assigner.py new file mode 100644 index 00000000000..e48f092ac1a --- /dev/null +++ b/mmdet/models/task_modules/assigners/topk_hungarian_assigner.py @@ -0,0 +1,182 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import torch +from mmengine.structures import BaseDataElement +from scipy.optimize import linear_sum_assignment + +from mmdet.registry import TASK_UTILS +from .assign_result import AssignResult +from .task_aligned_assigner import TaskAlignedAssigner + + +@TASK_UTILS.register_module() +class TopkHungarianAssigner(TaskAlignedAssigner): + """Computes 1-to-k matching between ground truth and predictions. + + This class computes an assignment between the targets and the predictions + based on the costs. The costs are weighted sum of some components. + For DETR the costs are weighted sum of classification cost, regression L1 + cost and regression iou cost. The targets don't include the no_object, so + generally there are more predictions than targets. After the 1-to-k + gt-pred matching, the un-matched are treated as backgrounds. Thus each + query prediction will be assigned with `0` or a positive integer + indicating the ground truth index: + + - 0: negative sample, no assigned gt + - positive integer: positive sample, index (1-based) of assigned gt + + Args: + cls_cost (dict): Classification cost configuration. + reg_cost (dict): Regression L1 cost configuration. + iou_cost (dict): Regression iou cost configuration. + """ + + def __init__(self, + *args, + cls_cost=dict(type='FocalLossCost', weight=2.0), + reg_cost=dict(type='BBoxL1Cost', weight=5.0), + iou_cost=dict(type='IoUCost', iou_mode='giou', weight=2.0), + **kwargs): + super(TopkHungarianAssigner, self).__init__(*args, **kwargs) + + self.cls_cost = TASK_UTILS.build(cls_cost) + self.reg_cost = TASK_UTILS.build(reg_cost) + self.iou_cost = TASK_UTILS.build(iou_cost) + + def assign(self, + pred_scores, + decode_bboxes, + gt_bboxes, + gt_labels, + img_meta, + alpha=1, + beta=6, + **kwargs): + """Computes 1-to-k gt-pred matching based on the weighted costs. + + This method assign each query prediction to a ground truth or + background. The `assigned_gt_inds` with -1 means don't care, + 0 means negative sample, and positive number is the index (1-based) + of assigned gt. + The assignment is done in the following steps, the order matters. + + 1. Assign every prediction to -1. + 2. Compute the weighted costs, each cost has shape (num_pred, num_gt). + 3. Update topk to be min(topk, int(num_pred / num_gt)), then repeat + costs topk times to shape: (num_pred, num_gt * topk), so that each + gt will match topk predictions. + 3. Do Hungarian matching on CPU based on the costs. + 4. Assign all to 0 (background) first, then for each matched pair + between predictions and gts, treat this prediction as foreground + and assign the corresponding gt index (plus 1) to it. + 5. Calculate alignment metrics and overlaps of each matched pred-gt + pair. + + Args: + pred_scores (Tensor): Predicted normalized classification + scores for one image, has shape (num_dense_queries, + cls_out_channels). + decode_bboxes (Tensor): Predicted unnormalized bbox coordinates + for one image, has shape (num_dense_queries, 4) with the + last dimension arranged as (x1, y1, x2, y2). + gt_bboxes (Tensor): Unnormalized ground truth + bboxes for one image, has shape (num_gt, 4) with the + last dimension arranged as (x1, y1, x2, y2). + NOTE: num_gt is dynamic for each image. + gt_labels (Tensor): Ground truth classification + index for the image, has shape (num_gt,). + NOTE: num_gt is dynamic for each image. + img_meta (dict): Meta information for one image. + alpha (int): Hyper-parameters related to alignment_metrics. + Defaults to 1. + beta (int): Hyper-parameters related to alignment_metrics. + Defaults to 6. + + Returns: + :obj:`AssignResult`: The assigned result. + """ + pred_scores = pred_scores.detach() + decode_bboxes = decode_bboxes.detach() + temp_overlaps = self.iou_calculator(decode_bboxes, gt_bboxes).detach() + bbox_scores = pred_scores[:, gt_labels].detach() + alignment_metrics = bbox_scores**alpha * temp_overlaps**beta + + pred_instances = BaseDataElement() + gt_instances = BaseDataElement() + + pred_instances.bboxes = decode_bboxes + gt_instances.bboxes = gt_bboxes + + pred_instances.scores = pred_scores + gt_instances.labels = gt_labels + + reg_cost = self.reg_cost(pred_instances, gt_instances, img_meta) + iou_cost = self.iou_cost(pred_instances, gt_instances, img_meta) + cls_cost = self.cls_cost(pred_instances, gt_instances, img_meta) + all_cost = cls_cost + reg_cost + iou_cost + + num_gt, num_bboxes = gt_bboxes.size(0), pred_scores.size(0) + if num_gt > 0: + # assign 0 by default + assigned_gt_inds = pred_scores.new_full((num_bboxes, ), + 0, + dtype=torch.long) + select_cost = all_cost + + topk = min(self.topk, int(len(select_cost) / num_gt)) + + # Repeat the ground truth `topk` times to perform 1-to-k gt-pred + # matching. For example, if `num_pred` = 900, `num_gt` = 3, then + # there are only 3 gt-pred pairs in sum for 1-1 matching. + # However, for 1-k gt-pred matching, if `topk` = 4, then each + # gt is assigned 4 unique predictions, so there would be 12 + # gt-pred pairs in sum. + repeat_select_cost = select_cost[..., + None].repeat(1, 1, topk).view( + select_cost.size(0), -1) + # anchor index and gt index + matched_row_inds, matched_col_inds = linear_sum_assignment( + repeat_select_cost.detach().cpu().numpy()) + matched_row_inds = torch.from_numpy(matched_row_inds).to( + pred_scores.device) + matched_col_inds = torch.from_numpy(matched_col_inds).to( + pred_scores.device) + + match_gt_ids = matched_col_inds // topk + candidate_idxs = matched_row_inds + + assigned_labels = assigned_gt_inds.new_full((num_bboxes, ), -1) + + if candidate_idxs.numel() > 0: + assigned_labels[candidate_idxs] = gt_labels[match_gt_ids] + else: + assigned_labels = None + + assigned_gt_inds[candidate_idxs] = match_gt_ids + 1 + + overlaps = self.iou_calculator( + decode_bboxes[candidate_idxs], + gt_bboxes[match_gt_ids], + is_aligned=True).detach() + + temp_pos_alignment_metrics = alignment_metrics[candidate_idxs] + pos_alignment_metrics = torch.gather(temp_pos_alignment_metrics, 1, + match_gt_ids[:, + None]).view(-1) + assign_result = AssignResult( + num_gt, assigned_gt_inds, overlaps, labels=assigned_labels) + + assign_result.assign_metrics = pos_alignment_metrics + return assign_result + else: + + assigned_gt_inds = pred_scores.new_full((num_bboxes, ), + -1, + dtype=torch.long) + + assigned_labels = pred_scores.new_full((num_bboxes, ), + -1, + dtype=torch.long) + + assigned_gt_inds[:] = 0 + return AssignResult( + 0, assigned_gt_inds, None, labels=assigned_labels) diff --git a/mmdet/models/utils/__init__.py b/mmdet/models/utils/__init__.py index ab2f98de743..81bef2ccf5e 100644 --- a/mmdet/models/utils/__init__.py +++ b/mmdet/models/utils/__init__.py @@ -4,14 +4,17 @@ get_topk_from_heatmap, transpose_and_gather_feat) from .image import imrenormalize from .make_divisible import make_divisible -from .misc import (aligned_bilinear, center_of_mass, empty_instances, - filter_gt_instances, filter_scores_and_topk, flip_tensor, - generate_coordinate, images_to_levels, interpolate_as, - levels_to_images, mask2ndarray, multi_apply, - relative_coordinate_maps, rename_loss_dict, - reweight_loss_dict, samplelist_boxtype2tensor, - select_single_mlvl, sigmoid_geometric_mean, - unfold_wo_center, unmap, unpack_gt_instances) +# Disable yapf because it conflicts with isort. +# yapf: disable +from .misc import (align_tensor, aligned_bilinear, center_of_mass, + empty_instances, filter_gt_instances, + filter_scores_and_topk, flip_tensor, generate_coordinate, + images_to_levels, interpolate_as, levels_to_images, + mask2ndarray, multi_apply, relative_coordinate_maps, + rename_loss_dict, reweight_loss_dict, + samplelist_boxtype2tensor, select_single_mlvl, + sigmoid_geometric_mean, unfold_wo_center, unmap, + unpack_gt_instances) from .panoptic_gt_processing import preprocess_panoptic_gt from .point_sample import (get_uncertain_point_coords_with_randomness, get_uncertainty) @@ -29,5 +32,5 @@ 'samplelist_boxtype2tensor', 'filter_gt_instances', 'rename_loss_dict', 'reweight_loss_dict', 'relative_coordinate_maps', 'aligned_bilinear', 'unfold_wo_center', 'imrenormalize', 'VLFuse', 'permute_and_flatten', - 'BertEncoderLayer' + 'BertEncoderLayer', 'align_tensor' ] diff --git a/mmdet/models/utils/misc.py b/mmdet/models/utils/misc.py index 823d73c0ac3..2cf429153ba 100644 --- a/mmdet/models/utils/misc.py +++ b/mmdet/models/utils/misc.py @@ -1,6 +1,6 @@ # Copyright (c) OpenMMLab. All rights reserved. from functools import partial -from typing import List, Sequence, Tuple, Union +from typing import List, Optional, Sequence, Tuple, Union import numpy as np import torch @@ -650,3 +650,48 @@ def unfold_wo_center(x, kernel_size: int, dilation: int) -> Tensor: dim=2) return unfolded_x + + +def padding_to(input_tensor: Tensor, max_len: int = 300) -> Tensor: + """Pad the first dimension of `input_tensor` to `max_len`. + + Args: + input_tensor (Tensor): The tensor to be padded, + max_len (int): Padding target size in the first dimension. + Default: 300 + https://github.com/jshilong/DDQ/blob/ddq_detr/projects/models/utils.py#L19 + Returns: + Tensor: The tensor padded with the first dimension size `max_len`. + """ + if max_len is None: + return input_tensor + num_padding = max_len - len(input_tensor) + if input_tensor.dim() > 1: + padding = input_tensor.new_zeros( + num_padding, *input_tensor.size()[1:], dtype=input_tensor.dtype) + else: + padding = input_tensor.new_zeros(num_padding, dtype=input_tensor.dtype) + output_tensor = torch.cat([input_tensor, padding], dim=0) + return output_tensor + + +def align_tensor(inputs: List[Tensor], + max_len: Optional[int] = None) -> Tensor: + """Pad each input to `max_len`, then stack them. If `max_len` is None, then + it is the max size of the first dimension of each input. + + https://github.com/jshilong/DDQ/blob/ddq_detr/projects/models/\ + utils.py#L12 + + Args: + inputs (list[Tensor]): The tensors to be padded, + Each input should have the same shape except the first dimension. + max_len (int): Padding target size in the first dimension. + Default: None + Returns: + Tensor: Stacked inputs after padding in the first dimension. + """ + if max_len is None: + max_len = max([len(item) for item in inputs]) + + return torch.stack([padding_to(item, max_len) for item in inputs]) diff --git a/tests/data/coco_batched_sample.json b/tests/data/coco_batched_sample.json new file mode 100644 index 00000000000..963e7893110 --- /dev/null +++ b/tests/data/coco_batched_sample.json @@ -0,0 +1,55 @@ +[ + { + "metainfo": { + "batch_input_shape": [ + 800, + 1067 + ], + "img_path": "data/coco/train2017/000000372674.jpg", + "ori_shape": [ + 427, + 640 + ], + "img_shape": [ + 704, + 929 + ], + "img_id": 372674, + "flip": true, + "flip_direction": "horizontal", + "pad_shape": [ + 704, + 929 + ], + "scale_factor": [ + 1.561344537815126, + 1.5609756097560976 + ] + }, + "labels": [ + 1, + 0, + 1 + ], + "bboxes": [ + [ + 548.1207, + 199.8158, + 606.394, + 383.5357 + ], + [ + 96.2335, + 0.0, + 929.0, + 704.0 + ], + [ + 810.5372, + 305.1872, + 850.4097, + 360.2198 + ] + ] + } +] diff --git a/tests/test_models/test_dense_heads/test_ddq_detr_head.py b/tests/test_models/test_dense_heads/test_ddq_detr_head.py new file mode 100644 index 00000000000..cbede07214d --- /dev/null +++ b/tests/test_models/test_dense_heads/test_ddq_detr_head.py @@ -0,0 +1,171 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import json +from unittest import TestCase + +import torch +from mmengine import Config +from mmengine.structures import InstanceData + +from mmdet.models.dense_heads import DDQDETRHead +from mmdet.structures import DetDataSample + + +class TestDDQDETRHead(TestCase): + + def test_ddq_detr_head_loss(self): + """Tests DDQDETRHead loss when truth is empty and non-empty.""" + num_classes = 2 + num_dn_queries = 10 + num_distinct_queries = 10 + dense_topk_ratio = 1.0 + num_decoder_layers = 2 + embed_dims = 256 + num_attention_heads = 8 + + batch_data_samples = self.get_batch_data_samples() + batch_size = len(batch_data_samples) + + batch_gt_instances = [] + batch_img_metas = [] + + for data_sample in batch_data_samples: + batch_img_metas.append(data_sample.metainfo) + batch_gt_instances.append(data_sample.gt_instances) + + max_num_target = max( + len(data_sample.gt_instances) + for data_sample in batch_data_samples) + + num_denoising_groups = max(num_dn_queries // max_num_target, 1) + num_denoising_queries = num_denoising_groups * 2 * max_num_target + + num_dense_queries = int(num_distinct_queries * dense_topk_ratio) + + num_total_queries = ( + num_denoising_queries + num_distinct_queries + num_dense_queries) + + dn_meta = { + 'num_denoising_queries': num_denoising_queries, + 'num_denoising_groups': num_denoising_groups, + 'num_dense_queries': num_dense_queries + } + + train_cfg = Config( + dict( + assigner=dict( + type='HungarianAssigner', + match_costs=[ + dict(type='FocalLossCost', weight=2.0), + dict(type='BBoxL1Cost', weight=5.0, box_format='xywh'), + dict(type='IoUCost', iou_mode='giou', weight=2.0) + ]))) + + bbox_head = DDQDETRHead( + num_classes=num_classes, + sync_cls_avg_factor=True, + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=5.0), + loss_iou=dict(type='GIoULoss', loss_weight=2.0), + share_pred_layer=False, + num_pred_layer=1 + num_decoder_layers, + as_two_stage=True, + train_cfg=train_cfg, + test_cfg=dict(max_per_img=300)) + + bbox_head.cache_dict = dict( + distinct_query_mask=list( + torch.rand([ + num_decoder_layers - 1, batch_size * num_attention_heads, + num_distinct_queries, num_distinct_queries + ]) < 0.5), + num_heads=num_attention_heads, + num_dense_queries=num_dense_queries) + + # query + hidden_states = torch.randn( + [num_decoder_layers, batch_size, num_total_queries, embed_dims]) + # normalized cx, cy, w, h + references = list( + torch.rand( + [1 + num_decoder_layers, batch_size, num_total_queries, 4])) + all_layers_outputs_classes, all_layers_outputs_coords = \ + bbox_head.forward(hidden_states, references) + + # logits + enc_outputs_class = torch.randn( + [batch_size, num_distinct_queries, num_classes]) + + # normalized cx, cy, w, h + enc_outputs_coord = torch.rand([batch_size, num_distinct_queries, 4]) + + # Test that empty ground truth encourages the network to predict + # background + empty_batch_gt_instances = [] + + for _ in range(batch_size): + gt_instances = InstanceData() + gt_instances.labels = torch.LongTensor([]) + gt_instances.bboxes = torch.empty((0, 4)) + empty_batch_gt_instances.append(gt_instances) + + empty_gt_losses = bbox_head.loss_by_feat(all_layers_outputs_classes, + all_layers_outputs_coords, + enc_outputs_class, + enc_outputs_coord, + empty_batch_gt_instances, + batch_img_metas, dn_meta) + + # When there is no truth, the cls loss should be nonzero but there + # should be no box loss. + empty_cls_loss = empty_gt_losses['loss_cls'] + empty_box_loss = empty_gt_losses['loss_bbox'] + self.assertGreater(empty_cls_loss.item(), 0, + 'cls loss should be non-zero') + self.assertEqual( + empty_box_loss.item(), 0, + 'there should be no box loss when there are no true boxes') + + # When truth is non-empty then both cls and box loss should be nonzero + # for random inputs + losses = bbox_head.loss_by_feat(all_layers_outputs_classes, + all_layers_outputs_coords, + enc_outputs_class, enc_outputs_coord, + batch_gt_instances, batch_img_metas, + dn_meta) + + cls_loss = losses['loss_cls'] + box_loss = losses['loss_bbox'] + self.assertGreater(cls_loss.item(), 0, 'cls loss should be non-zero') + self.assertGreater(box_loss.item(), 0, 'box loss should be non-zero') + + def get_batch_data_samples(self): + """Generate batch data samples including model inputs and gt labels.""" + data_sample_file_path = 'tests/data/coco_batched_sample.json' + + with open(data_sample_file_path, 'r') as file_stream: + data_sample_infos = json.load(file_stream) + + batch_data_samples = [] + + for data_sample_info in data_sample_infos: + data_sample = DetDataSample() + + metainfo = data_sample_info['metainfo'] + labels = data_sample_info['labels'] + bboxes = data_sample_info['bboxes'] + + data_sample.set_metainfo(metainfo) + + gt_instances = InstanceData() + gt_instances.labels = torch.LongTensor(labels) + gt_instances.bboxes = torch.Tensor(bboxes) + data_sample.gt_instances = gt_instances + + batch_data_samples.append(data_sample) + + return batch_data_samples diff --git a/tests/test_models/test_detectors/test_ddq_detr.py b/tests/test_models/test_detectors/test_ddq_detr.py new file mode 100644 index 00000000000..8c3c5ca1e45 --- /dev/null +++ b/tests/test_models/test_detectors/test_ddq_detr.py @@ -0,0 +1,152 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import json +from unittest import TestCase + +import torch +from mmengine.structures import InstanceData + +from mmdet.registry import MODELS +from mmdet.structures import DetDataSample +from mmdet.testing import get_detector_cfg +from mmdet.utils import register_all_modules + + +class TestDDQDETR(TestCase): + + def setUp(self): + register_all_modules() + + def test_ddq_detr_head_loss(self): + """Tests DDQ DETR head loss when truth is empty and non-empty.""" + configs = [ + get_detector_cfg('ddq/ddq-detr-4scale_r50_8xb2-12e_coco.py') + ] # noqa E501 + + for config in configs: + config.backbone.depth = 18 + config.backbone.init_cfg = None + config.neck.in_channels = [128, 256, 512] + config.encoder.num_layers = 1 + # `num_layers` >= 2, because attention masks of the last + # `num_layers` - 1 layers are used for distinct query selection + config.decoder.num_layers = 2 + config.bbox_head.num_classes = 2 + config.num_queries = 10 + config.dense_topk_ratio = 1.0 + config.dn_cfg.group_cfg.num_dn_queries = 10 + config.test_cfg.max_per_img = 2 + model = MODELS.build(config) + model.init_weights() + + batch_data_samples = self.get_batch_data_samples() + batch_input_shape = batch_data_samples[0].metainfo[ + 'batch_input_shape'] + random_images = torch.rand([1, 3, *batch_input_shape]) + + # Test that empty ground truth encourages the network to + # predict background + gt_instances = InstanceData() + gt_instances.bboxes = torch.empty((0, 4)) + gt_instances.labels = torch.LongTensor([]) + data_sample = DetDataSample() + data_sample.set_metainfo(batch_data_samples[0].metainfo) + data_sample.gt_instances = gt_instances + + batch_data_samples_1 = [data_sample] + empty_gt_losses = model.loss( + random_images, batch_data_samples=batch_data_samples_1) + # When there is no truth, the cls loss should be nonzero but there + # should be no box or aux loss. + zero_loss_keywords = ['bbox', 'iou', 'dn'] + + for key, loss in empty_gt_losses.items(): + if 'aux' in key: + self.assertEqual( + len(loss), len(batch_data_samples_1), + (r'Actual aux loss count for {} is {},' + + r'it should be {}').format(key, len(loss), + len(batch_data_samples_1))) + + for image_loss in loss: + _image_loss = image_loss.item() + self.assertEqual( + _image_loss, 0, + f'there should be no {key}({_image_loss}) ' + f'when no ground true boxes') + + continue + + _loss = loss.item() + + if any(zero_loss_keyword in key + for zero_loss_keyword in zero_loss_keywords): + self.assertEqual( + _loss, 0, f'there should be no {key}({_loss}) ' + f'when no ground true boxes') + elif 'cls' in key: + self.assertGreater(_loss, 0, + f'{key}({_loss}) should be non-zero') + + # When truth is non-empty then both cls and box loss should + # be nonzero for random inputs. + random_images = torch.rand( + [len(batch_data_samples), 3, *batch_input_shape]) + batch_data_samples_2 = batch_data_samples + gt_losses = model.loss( + random_images, batch_data_samples=batch_data_samples_2) + for key, loss in gt_losses.items(): + if 'aux' in key: + self.assertEqual( + len(loss), len(batch_data_samples_2), + (r'Actual aux loss count for {} is {},' + + r'it should be {}').format(key, len(loss), + len(batch_data_samples_2))) + + for image_loss in loss: + self.assertGreater( + image_loss.item(), 0, + 'cls loss, or box loss, or iou loss should be' + + ' non-zero') + + continue + + self.assertGreater( + loss.item(), 0, + 'cls loss, or box loss, or iou loss should be non-zero') + + model.eval() + # test _forward + model._forward( + random_images, batch_data_samples=batch_data_samples_2) + # test only predict + model.predict( + random_images, + batch_data_samples=batch_data_samples_2, + rescale=True) + + def get_batch_data_samples(self): + """Generate batch data samples including model inputs and gt labels.""" + data_sample_file_path = 'tests/data/coco_batched_sample.json' + + with open(data_sample_file_path, 'r') as file_stream: + data_sample_infos = json.load(file_stream) + + batch_data_samples = [] + + for data_sample_info in data_sample_infos: + data_sample = DetDataSample() + + metainfo = data_sample_info['metainfo'] + labels = data_sample_info['labels'] + bboxes = data_sample_info['bboxes'] + + data_sample.set_metainfo(metainfo) + + gt_instances = InstanceData() + gt_instances.labels = torch.LongTensor(labels) + gt_instances.bboxes = torch.Tensor(bboxes) + data_sample.gt_instances = gt_instances + + batch_data_samples.append(data_sample) + + return batch_data_samples diff --git a/tests/test_models/test_layers/test_transformer.py b/tests/test_models/test_layers/test_transformer.py index c261de622e7..3d95b8ae84b 100644 --- a/tests/test_models/test_layers/test_transformer.py +++ b/tests/test_models/test_layers/test_transformer.py @@ -4,6 +4,7 @@ from mmengine.config import ConfigDict from mmdet.models.layers.transformer import (AdaptivePadding, + DDQTransformerDecoder, DetrTransformerDecoder, DetrTransformerEncoder, PatchEmbed, PatchMerging) @@ -502,3 +503,22 @@ def test_detr_transformer_encoder_decoder(): act_cfg=dict(type='ReLU', inplace=True))))) assert len(DetrTransformerEncoder(**config).layers) == 6 assert DetrTransformerEncoder(**config) + + +def test_ddq_transformer_decoder(): + num_layers = 2 + config = ConfigDict( + num_layers=num_layers, + return_intermediate=True, + layer_cfg=dict( + self_attn_cfg=dict(embed_dims=256, num_heads=8, + dropout=0.0), # 0.1 for DeformDETR + cross_attn_cfg=dict(embed_dims=256, num_levels=4, + dropout=0.0), # 0.1 for DeformDETR + ffn_cfg=dict( + embed_dims=256, + feedforward_channels=2048, # 1024 for DeformDETR + ffn_drop=0.0)), # 0.1 for DeformDETR + post_norm_cfg=None) + assert len(DDQTransformerDecoder(**config).layers) == num_layers + assert DDQTransformerDecoder(**config) diff --git a/tests/test_models/test_losses/test_loss.py b/tests/test_models/test_losses/test_loss.py index bbf2f124b11..a634e2c6b44 100644 --- a/tests/test_models/test_losses/test_loss.py +++ b/tests/test_models/test_losses/test_loss.py @@ -1,12 +1,14 @@ # Copyright (c) OpenMMLab. All rights reserved. +import json + import pytest import torch import torch.nn.functional as F from mmengine.utils import digit_version -from mmdet.models.losses import (BalancedL1Loss, CrossEntropyLoss, DiceLoss, - DistributionFocalLoss, EQLV2Loss, FocalLoss, - GaussianFocalLoss, +from mmdet.models.losses import (BalancedL1Loss, CrossEntropyLoss, DDQAuxLoss, + DiceLoss, DistributionFocalLoss, EQLV2Loss, + FocalLoss, GaussianFocalLoss, KnowledgeDistillationKLDivLoss, L1Loss, MarginL2Loss, MSELoss, QualityFocalLoss, SeesawLoss, SmoothL1Loss, VarifocalLoss) @@ -301,3 +303,44 @@ def test_eqlv2_loss(loss_class, reduction): loss = loss_class()(cls_score, label, weight) assert isinstance(loss, torch.Tensor) + + +@pytest.mark.parametrize('loss_class', [DDQAuxLoss]) +def test_ddq_aux_loss(loss_class): + data_sample_file_path = 'tests/data/coco_batched_sample.json' + num_classes = 80 + num_pred = 1350 + + with open(data_sample_file_path, 'r') as file_stream: + data_sample_infos = json.load(file_stream) + + gt_bboxes = [] + img_metas = [] + gt_labels = [] + + for data_sample_info in data_sample_infos: + metainfo = data_sample_info['metainfo'] + labels = torch.LongTensor(data_sample_info['labels']) + bboxes = torch.Tensor(data_sample_info['bboxes']) + + img_metas.append(metainfo) + gt_labels.append(labels) + gt_bboxes.append(bboxes) + + batch_size = len(data_sample_infos) + pred_classes = torch.rand([batch_size, num_pred, num_classes]) + pred_bboxes = torch.rand([batch_size, num_pred, 4]) + + aux_loss_for_dense = loss_class( + train_cfg=dict(assigner=dict(type='TopkHungarianAssigner', topk=4))) + + aux_loss = aux_loss_for_dense.loss(pred_classes, pred_bboxes, gt_bboxes, + gt_labels, img_metas) + + assert isinstance(aux_loss, dict) + + for loss_name, batch_losses in aux_loss.items(): + assert isinstance(batch_losses, list) + + for loss in batch_losses: + assert isinstance(loss, torch.Tensor) diff --git a/tests/test_models/test_task_modules/test_assigners/test_topk_hungarian_assigner.py b/tests/test_models/test_task_modules/test_assigners/test_topk_hungarian_assigner.py new file mode 100644 index 00000000000..7273787bf04 --- /dev/null +++ b/tests/test_models/test_task_modules/test_assigners/test_topk_hungarian_assigner.py @@ -0,0 +1,114 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from unittest import TestCase + +import torch +from mmengine import ConfigDict + +from mmdet.models.task_modules.assigners import TopkHungarianAssigner + + +class TestTopkHungarianAssigner(TestCase): + + def test_init(self): + with self.assertRaises(AssertionError): + TopkHungarianAssigner(topk=0) + + def test_topk_hungarian_match_assigner(self): + num_classes = 80 + topk = 4 + + pred_class_scores = torch.rand((10, num_classes)) + pred_bboxes = torch.randn((10, 4)) + + assigner = TopkHungarianAssigner(topk=topk) + + # test no gt bboxes + gt_bboxes = torch.empty((0, 4)) + gt_labels = torch.LongTensor([]) + img_meta = dict(img_shape=(10, 8)) + + assign_result = assigner.assign(pred_class_scores, pred_bboxes, + gt_bboxes, gt_labels, img_meta) + + self.assertTrue(torch.all(assign_result.gt_inds == 0)) + self.assertTrue(torch.all(assign_result.labels == -1)) + + # test with gt bboxes + gt_bboxes = torch.FloatTensor([[0, 0, 5, 7], [3, 5, 7, 8]]) + gt_labels = torch.LongTensor([1, 20]) + assign_result = assigner.assign(pred_class_scores, pred_bboxes, + gt_bboxes, gt_labels, img_meta) + + self.assertTrue(torch.all(assign_result.gt_inds > -1)) + self.assertEqual((assign_result.gt_inds > 0).sum(), + gt_bboxes.size(0) * topk) + self.assertEqual((assign_result.labels > -1).sum(), + gt_bboxes.size(0) * topk) + + def test_bbox_match_cost(self): + num_classes = 80 + topk = 4 + + pred_class_scores = torch.rand((10, num_classes)) + pred_bboxes = torch.randn((10, 4)) + + gt_bboxes = torch.FloatTensor([[0, 0, 5, 7], [3, 5, 7, 8]]) + gt_labels = torch.LongTensor([1, 20]) + img_meta = dict(img_shape=(10, 8)) + + # test IoUCost + assigner = TopkHungarianAssigner( + topk=topk, + iou_cost=ConfigDict(dict(type='IoUCost', iou_mode='iou'))) + assign_result = assigner.assign(pred_class_scores, pred_bboxes, + gt_bboxes, gt_labels, img_meta) + + self.assertTrue(torch.all(assign_result.gt_inds > -1)) + self.assertEqual((assign_result.gt_inds > 0).sum(), + gt_bboxes.size(0) * topk) + self.assertEqual((assign_result.labels > -1).sum(), + gt_bboxes.size(0) * topk) + + # test BBoxL1Cost + assigner = TopkHungarianAssigner( + topk=4, reg_cost=ConfigDict(dict(type='BBoxL1Cost'))) + assign_result = assigner.assign(pred_class_scores, pred_bboxes, + gt_bboxes, gt_labels, img_meta) + self.assertTrue(torch.all(assign_result.gt_inds > -1)) + self.assertEqual((assign_result.gt_inds > 0).sum(), + gt_bboxes.size(0) * topk) + self.assertEqual((assign_result.labels > -1).sum(), + gt_bboxes.size(0) * topk) + + def test_cls_match_cost(self): + num_classes = 80 + topk = 4 + + pred_class_scores = torch.rand((10, num_classes)) + pred_bboxes = torch.randn((10, 4)) + + gt_bboxes = torch.FloatTensor([[0, 0, 5, 7], [3, 5, 7, 8]]) + gt_labels = torch.LongTensor([1, 20]) + img_meta = dict(img_shape=(10, 8)) + + # test FocalLossCost + assigner = TopkHungarianAssigner( + topk=topk, cls_cost=dict(type='FocalLossCost')) + assign_result = assigner.assign(pred_class_scores, pred_bboxes, + gt_bboxes, gt_labels, img_meta) + self.assertTrue(torch.all(assign_result.gt_inds > -1)) + self.assertEqual((assign_result.gt_inds > 0).sum(), + gt_bboxes.size(0) * topk) + self.assertEqual((assign_result.labels > -1).sum(), + gt_bboxes.size(0) * topk) + + # test ClassificationCost + assigner = TopkHungarianAssigner( + topk=4, cls_cost=dict(type='ClassificationCost')) + assign_result = assigner.assign(pred_class_scores, pred_bboxes, + gt_bboxes, gt_labels, img_meta) + self.assertTrue(torch.all(assign_result.gt_inds > -1)) + self.assertEqual((assign_result.gt_inds > 0).sum(), + gt_bboxes.size(0) * topk) + self.assertEqual((assign_result.labels > -1).sum(), + gt_bboxes.size(0) * topk) From 884aad021c9a711d03bcda5fa331b7f599eb38ff Mon Sep 17 00:00:00 2001 From: Range King Date: Tue, 15 Aug 2023 11:07:05 +0800 Subject: [PATCH 18/63] [CodeCamp2023-503] Add docs of `Inferencer` (#10784) --- demo/inference_demo.ipynb | 1667 ++++++++++++++--- docs/en/user_guides/inference.md | 276 ++- docs/zh_cn/user_guides/inference.md | 272 ++- mmdet/apis/det_inferencer.py | 20 +- .../xdecoder/inference/image_caption.py | 6 +- .../texttoimage_regionretrieval_inferencer.py | 6 +- projects/gradio_demo/launch.py | 2 +- tests/test_apis/test_det_inferencer.py | 4 +- 8 files changed, 1829 insertions(+), 424 deletions(-) diff --git a/demo/inference_demo.ipynb b/demo/inference_demo.ipynb index 967dc6ff341..41cd6918a67 100644 --- a/demo/inference_demo.ipynb +++ b/demo/inference_demo.ipynb @@ -1,264 +1,1413 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "from mmdet.apis import init_detector, inference_detector\n", - "from mmdet.utils import register_all_modules\n", - "from mmdet.registry import VISUALIZERS\n", - "import mmcv" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "processing rtmdet_tiny_8xb32-300e_coco...\n", - "rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth exists in e:\\mmdetection\\demo\\checkpoints\n", - "Successfully dumped rtmdet_tiny_8xb32-300e_coco.py to e:\\mmdetection\\demo\\checkpoints\n" - ] - } - ], - "source": [ - "# download the checkpoint demo\n", - "!mim download mmdet --config rtmdet_tiny_8xb32-300e_coco --dest ./checkpoints\n", - "config_file = './checkpoints/rtmdet_tiny_8xb32-300e_coco.py'\n", - "checkpoint_file = './checkpoints/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth'" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loads checkpoint by local backend from path: ./checkpoints/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth\n", - "The model and loaded state dict do not match exactly\n", - "\n", - "unexpected key in source state_dict: data_preprocessor.mean, data_preprocessor.std\n", - "\n" - ] - } - ], - "source": [ - "#Register all modules in mmdet into the registries\n", - "register_all_modules()\n", - "# build the model from a config file and a checkpoint file\n", - "model = init_detector(config_file, checkpoint_file, device='cuda:0') # or device='cpu'" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "d:\\anaconda3\\envs\\mmdet\\lib\\site-packages\\torch\\functional.py:445: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at ..\\aten\\src\\ATen\\native\\TensorShape.cpp:2157.)\n", - " return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - " ignored_instances: \n", - " pred_instances: \n", - ") at 0x237adee4970>\n" - ] - } - ], - "source": [ - "# test a single image\n", - "img = mmcv.imread( 'demo.jpg', channel_order='rgb')\n", - "result = inference_detector(model, img)\n", - "print(result)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "d:\\anaconda3\\envs\\mmdet\\lib\\site-packages\\mmengine\\visualization\\visualizer.py:163: UserWarning: `Visualizer` backend is not initialized because save_dir is None.\n", - " warnings.warn('`Visualizer` backend is not initialized '\n" - ] + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "gCMycQ_2U8SA" + }, + "source": [ + "
\n", + " \n", + "
 
\n", + "
\n", + " OpenMMLab website\n", + " \n", + " \n", + " HOT\n", + " \n", + " \n", + "     \n", + " OpenMMLab platform\n", + " \n", + " \n", + " TRY IT OUT\n", + " \n", + " \n", + "
\n", + "
 
\n", + "\n", + "\"Open\n", + "\n", + "[![PyPI](https://img.shields.io/pypi/v/mmdet)](https://pypi.org/project/mmdet)\n", + "[![docs](https://img.shields.io/badge/docs-latest-blue)](https://mmdetection.readthedocs.io/en/latest/)\n", + "[![badge](https://github.com/open-mmlab/mmdetection/workflows/build/badge.svg)](https://github.com/open-mmlab/mmdetection/actions)\n", + "[![codecov](https://codecov.io/gh/open-mmlab/mmdetection/branch/master/graph/badge.svg)](https://codecov.io/gh/open-mmlab/mmdetection)\n", + "[![license](https://img.shields.io/github/license/open-mmlab/mmdetection.svg)](https://github.com/open-mmlab/mmdetection/blob/master/LICENSE)\n", + "[![open issues](https://isitmaintained.com/badge/open/open-mmlab/mmdetection.svg)](https://github.com/open-mmlab/mmdetection/issues)\n", + "[![issue resolution](https://isitmaintained.com/badge/resolution/open-mmlab/mmdetection.svg)](https://github.com/open-mmlab/mmdetection/issues)\n", + "\n", + "[📘Documentation](https://mmdetection.readthedocs.io/en/3.x/) |\n", + "[🛠️Installation](https://mmdetection.readthedocs.io/en/3.x/get_started.html) |\n", + "[👀Model Zoo](https://mmdetection.readthedocs.io/en/3.x/model_zoo.html) |\n", + "[🆕Update News](https://mmdetection.readthedocs.io/en/3.x/notes/changelog.html) |\n", + "[🚀Ongoing Projects](https://github.com/open-mmlab/mmdetection/projects) |\n", + "[🤔Reporting Issues](https://github.com/open-mmlab/mmdetection/issues/new/choose)\n", + "\n", + "
\n", + "\n", + "
\n", + " \n", + " \"\"\n", + " \"\"\n", + " \n", + " \"\"\n", + " \"\"\n", + " \n", + " \"\"\n", + " \"\"\n", + " \n", + " \"\"\n", + " \"\"\n", + " \n", + " \"\"\n", + " \"\"\n", + " \n", + " \"\"\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aGYwt_UjIrqp" + }, + "source": [ + "# Inferencer\n", + "\n", + "In this tutorial, you will learn how to perform inference with a MMDetection `DetInferencer`.\n", + "\n", + "Let's start!\n", + "\n", + "```{note}\n", + "The commands in this tutorial are mainly for Colab.\n", + "You can click the button above, `Open in Colab`, to run this notebook in Colab.\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tJxJHruNLb7Y" + }, + "source": [ + "## Install MMDetection" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Wi4LPmsR66sy", + "outputId": "0077a9a3-0183-4002-fe7a-2a12f020cf69" + }, + "outputs": [], + "source": [ + "# Check nvcc version\n", + "!nvcc -V\n", + "# Check GCC version\n", + "!gcc --version" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "gkGnB9WyHSXB", + "outputId": "5945fe0b-13a5-4f1b-dff9-8beb1df67ab0" + }, + "outputs": [], + "source": [ + "# install dependencies\n", + "%pip install -U openmim\n", + "!mim install \"mmengine>=0.7.0\"\n", + "!mim install \"mmcv>=2.0.0rc4\"\n", + "\n", + "# Install mmdetection\n", + "!rm -rf mmdetection\n", + "!git clone https://github.com/open-mmlab/mmdetection.git -b dev-3.x\n", + "%cd mmdetection\n", + "\n", + "%pip install -e ." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "_YeUiqAoCaoV", + "outputId": "06e4c803-ac46-49e6-b8fa-1a85c23fa482" + }, + "outputs": [], + "source": [ + "from mmengine.utils import get_git_hash\n", + "from mmengine.utils.dl_utils import collect_env as collect_base_env\n", + "\n", + "import mmdet\n", + "\n", + "\n", + "def collect_env():\n", + " \"\"\"Collect the information of the running environments.\"\"\"\n", + " env_info = collect_base_env()\n", + " env_info['MMDetection'] = f'{mmdet.__version__}+{get_git_hash()[:7]}'\n", + " return env_info\n", + "\n", + "\n", + "if __name__ == '__main__':\n", + " for name, val in collect_env().items():\n", + " print(f'{name}: {val}')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fLgFRMtP91ue" + }, + "source": [ + "## `DetInferencer`\n", + "\n", + "### Basic Usage\n", + "\n", + "We use the high-level API `DetInferencer` implemented in the MMDetection. This API is created to ease the inference process. The details of the codes can be found [here](https://github.com/open-mmlab/mmdetection/blob/dev-3.x/mmdet/apis/det_inferencer.py)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "6fa2cda48fda43f9bf53a0f533392eba", + "0226fedc26044ab2abdccc4fcbe226f8" + ] + }, + "id": "WJHpC402p2w9", + "outputId": "c2326326-d198-4fce-ec0e-a9cc2e35ba09" + }, + "outputs": [], + "source": [ + "from mmdet.apis import DetInferencer\n", + "\n", + "# Initialize the DetInferencer\n", + "inferencer = DetInferencer('rtmdet_tiny_8xb32-300e_coco')\n", + "\n", + "# Perform inference\n", + "inferencer('demo/demo.jpg', out_dir='./output')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 444 + }, + "id": "34JfPWRRSlNh", + "outputId": "8eec8bc4-4824-47ac-b10f-41538422fb28" + }, + "outputs": [], + "source": [ + "# Show the output image\n", + "from PIL import Image\n", + "Image.open('./output/vis/demo.jpg')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-53WPeyBqRHe" + }, + "source": [ + "### Initialization\n", + "\n", + "Each Inferencer must be initialized with a model. You can also choose the inference device during initialization.\n", + "\n", + "#### Model Initialization\n", + "\n", + "- To infer with MMDetection's pre-trained model, passing its name to the argument `model` can work. The weights will be automatically downloaded and loaded from OpenMMLab's model zoo." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "bbMu3IPtv-cX", + "outputId": "2bceb594-06c8-4c18-e8c6-b1816b0acb23" + }, + "outputs": [], + "source": [ + "inferencer = DetInferencer(model='rtmdet_tiny_8xb32-300e_coco')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "AwKtnol3TQlM" + }, + "source": [ + "There is a very easy to list all model names in MMDetection." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3kYfK3ssTIQE", + "outputId": "88c4fbb9-bb92-42af-baaa-14cee5b5bdc1" + }, + "outputs": [], + "source": [ + "# models is a list of model names, and them will print automatically\n", + "models = DetInferencer.list_models('mmdet')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "G-25HR9HTZvr" + }, + "source": [ + "You can load another weight by passing its path/url to `weights`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "j4doHX4exvS1", + "outputId": "54ac0be2-835f-4390-aa0e-3be5236d8cc9" + }, + "outputs": [], + "source": [ + "!mkdir ./checkpoints\n", + "!mim download mmdet --config rtmdet_tiny_8xb32-300e_coco --dest ./checkpoints" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8LQB4EC-Tako", + "outputId": "2cc0960e-d5b5-4c3a-8a0c-cec23989f6a0" + }, + "outputs": [], + "source": [ + "# Setup a checkpoint file to load\n", + "checkpoint = './checkpoints/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth'\n", + "\n", + "# Initialize the DetInferencer\n", + "inferencer = DetInferencer(model='rtmdet_tiny_8xb32-300e_coco', weights=checkpoint)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Atft9tjcwgeD" + }, + "source": [ + "- To load custom config and weight, you can pass the path to the config file to `model` and the path to the weight to `weights`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "eukDD4Rzwp9P", + "outputId": "0a34392c-0544-4a90-c844-7628d184efc0" + }, + "outputs": [], + "source": [ + "# Choose to use a config\n", + "config_path = './configs/rtmdet/rtmdet_tiny_8xb32-300e_coco.py'\n", + "\n", + "# Setup a checkpoint file to load\n", + "checkpoint = './checkpoints/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth'\n", + "\n", + "# Initialize the DetInferencer\n", + "inferencer = DetInferencer(model=config_path, weights=checkpoint)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "FC1je9iiTuMS" + }, + "source": [ + "- By default, [MMEngine](https://github.com/open-mmlab/mmengine/) dumps config to the weight. If you have a weight trained on MMEngine, you can also pass the path to the weight file to `weights` without specifying `model`:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Kenyo80RTx63", + "outputId": "46fe8219-d1a7-4e45-b5a1-b6d21c30be42" + }, + "outputs": [], + "source": [ + "# It will raise an error if the config file cannot be found in the weight. Currently, within the MMDetection model repository, only the weights of ddq-detr-4scale_r50 can be loaded in this manner.\n", + "inferencer = DetInferencer(weights='https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq-detr-4scale_r50_8xb2-12e_coco/ddq-detr-4scale_r50_8xb2-12e_coco_20230809_170711-42528127.pth')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b-AlYOw4T3AO" + }, + "source": [ + "- Passing config file to `model` without specifying `weight` will result in a randomly initialized model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "quFQ8abYT6As" + }, + "source": [ + "### Device\n", + "\n", + "Each Inferencer instance is bound to a device.\n", + "By default, the best device is automatically decided by [MMEngine](https://github.com/open-mmlab/mmengine/). You can also alter the device by specifying the `device` argument. For example, you can use the following code to create an Inferencer on GPU 0." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Wi6DRpsQPEmV", + "outputId": "9eac2017-cce6-491a-ef51-3e7e2560f107" + }, + "outputs": [], + "source": [ + "inferencer = DetInferencer(model='rtmdet_tiny_8xb32-300e_coco', device='cuda:0')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "h3pgIACHUXEv" + }, + "source": [ + "To create an Inferencer on CPU:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "JsAotaiRUXWH", + "outputId": "531b1cb0-e986-4e0a-91c9-6d3ad65544e7" + }, + "outputs": [], + "source": [ + "inferencer = DetInferencer(model='rtmdet_tiny_8xb32-300e_coco', device='cpu')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0a4Zw5plUisX" + }, + "source": [ + "### Inference\n", + "\n", + "Once the Inferencer is initialized, you can directly pass in the raw data to be inferred and get the inference results from return values.\n", + "\n", + "#### Input\n", + "\n", + "Input can be either of these types:\n", + "\n", + "- str: Path/URL to the image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "2abd7eef6f1f4b9c865a466b3dd5ef24", + "8951ec1ee7164f7ca7239a37e80e98ea" + ] + }, + "id": "C4McAmYdUnCL", + "outputId": "50bea3e2-a912-497e-cee9-26109dccdc12" + }, + "outputs": [], + "source": [ + "inferencer = DetInferencer(model='rtmdet_tiny_8xb32-300e_coco', device='cuda:0')\n", + "inferencer('demo/demo.jpg')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3G_TPKrMUp2T" + }, + "source": [ + "- array: Image in numpy array. It should be in BGR order." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "59bfd22c751f4ed4baefa466e7653315", + "0164804ae2f842fe8d2a4c5414c4a0c2" + ] + }, + "id": "-M1qGlfaUpha", + "outputId": "5a06cfe8-e056-4d56-c8e9-489e8f6633a0" + }, + "outputs": [], + "source": [ + "import mmcv\n", + "array = mmcv.imread('demo/demo.jpg')\n", + "inferencer(array)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "I45B_CtzUuh2" + }, + "source": [ + "- list: A list of basic types above. Each element in the list will be processed separately." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "a64a6eb038c44236b80579b2bfc4b8e3", + "eef25a0509854f98883395a2c0fc2134", + "f87f0b153b0342ad99dcd320a1302c92", + "f6634888109048069b6844e9f9b4ec13" + ] + }, + "id": "k1IXIWXHUwKP", + "outputId": "0af73b0b-d703-4cbc-91ad-052f0b521d50" + }, + "outputs": [], + "source": [ + "inferencer(['tests/data/color.jpg', 'tests/data/gray.jpg'])\n", + "# You can even mix the types\n", + "inferencer(['tests/data/color.jpg', array])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hUGrTtxrVBAS" + }, + "source": [ + "- str: Path to the directory. All images in the directory will be processed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "07ed8efcd87a40059af36f0c43ef5147", + "69ce7e58e27f4e1186ab0afcb99d37c3" + ] + }, + "id": "JWK10ZD6VDDE", + "outputId": "91418597-d9ea-4613-b141-16bc8bcc8caf" + }, + "outputs": [], + "source": [ + "inferencer('tests/data/')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BQxEVr2pVGen" + }, + "source": [ + "### Output\n", + "\n", + "By default, each `Inferencer` returns the prediction results in a dictionary format.\n", + "\n", + "- `visualization` contains the visualized predictions.\n", + "\n", + "- `predictions` contains the predictions results in a json-serializable format. But it's an empty list by default unless `return_vis=True`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 306, + "referenced_widgets": [ + "95674a6baa1842d2981fe60b31ab6cad", + "7e62816d1f6c441fb98c1f8e942fff1d" + ] + }, + "id": "m6a8T4goU8Sq", + "outputId": "6f74098f-a3d3-4897-c58f-68fae88889af" + }, + "outputs": [], + "source": [ + "# Show the structure of result dict\n", + "from rich.pretty import pprint\n", + "\n", + "result = inferencer('demo/demo.jpg')\n", + "pprint(result, max_length=4)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "a93hFT0jVkrR" + }, + "source": [ + "If you wish to get the raw outputs from the model, you can set `return_datasamples` to `True` to get the original `DataSample`, which will be stored in `predictions`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "060f510b5bda498583d7212060bb528c", + "1bb724cb12c240a18f651dd99842e5b0" + ] + }, + "id": "U5DFI7QAVbnP", + "outputId": "effaf3ec-2476-4b64-dcbd-802a18a26479" + }, + "outputs": [], + "source": [ + "result = inferencer('demo/demo.jpg', return_datasamples=True)\n", + "pprint(result, max_length=4)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JHdcUnGzVsk1" + }, + "source": [ + "#### Dumping Results\n", + "\n", + "Apart from obtaining predictions from the return value, you can also export the predictions/visualizations to files by setting `out_dir` and `no_save_pred`/`no_save_vis` arguments." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "38083c2f29604d1d9a7dcf9845dfbf33", + "54cdfe55e0f04df9ab844961a089fe2f" + ] + }, + "id": "0dr-ixmfVtng", + "outputId": "af22d458-9aed-41e2-f675-e017a0cb588b" + }, + "outputs": [], + "source": [ + "inferencer('demo/demo.jpg', out_dir='outputs/', no_save_pred=False)" + ] } - ], - "source": [ - "# init the visualizer(execute this block only once)\n", - "visualizer = VISUALIZERS.build(model.cfg.visualizer)\n", - "# the dataset_meta is loaded from the checkpoint and\n", - "# then pass to the model in init_detector\n", - "visualizer.dataset_meta = model.dataset_meta" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.13" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "0164804ae2f842fe8d2a4c5414c4a0c2": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "0226fedc26044ab2abdccc4fcbe226f8": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "060f510b5bda498583d7212060bb528c": { + "model_module": "@jupyter-widgets/output", + "model_module_version": "1.0.0", + "model_name": "OutputModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_1bb724cb12c240a18f651dd99842e5b0", + "msg_id": "", + "outputs": [ + { + "data": { + "text/html": "
Inference    \n
\n", + "text/plain": "Inference \u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m \u001b[36m \u001b[0m\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ] + } + }, + "07ed8efcd87a40059af36f0c43ef5147": { + "model_module": "@jupyter-widgets/output", + "model_module_version": "1.0.0", + "model_name": "OutputModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_69ce7e58e27f4e1186ab0afcb99d37c3", + "msg_id": "", + "outputs": [ + { + "data": { + "text/html": "
Inference  13.5 it/s  \n
\n", + "text/plain": "Inference \u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m \u001b[35m13.5 it/s\u001b[0m \u001b[36m \u001b[0m\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ] + } + }, + "1bb724cb12c240a18f651dd99842e5b0": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "2abd7eef6f1f4b9c865a466b3dd5ef24": { + "model_module": "@jupyter-widgets/output", + "model_module_version": "1.0.0", + "model_name": "OutputModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_8951ec1ee7164f7ca7239a37e80e98ea", + "msg_id": "", + "outputs": [ + { + "data": { + "text/html": "
Inference    \n
\n", + "text/plain": "Inference \u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m \u001b[36m \u001b[0m\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ] + } + }, + "38083c2f29604d1d9a7dcf9845dfbf33": { + "model_module": "@jupyter-widgets/output", + "model_module_version": "1.0.0", + "model_name": "OutputModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_54cdfe55e0f04df9ab844961a089fe2f", + "msg_id": "", + "outputs": [ + { + "data": { + "text/html": "
Inference    \n
\n", + "text/plain": "Inference \u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m \u001b[36m \u001b[0m\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ] + } + }, + "54cdfe55e0f04df9ab844961a089fe2f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "59bfd22c751f4ed4baefa466e7653315": { + "model_module": "@jupyter-widgets/output", + "model_module_version": "1.0.0", + "model_name": "OutputModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_0164804ae2f842fe8d2a4c5414c4a0c2", + "msg_id": "", + "outputs": [ + { + "data": { + "text/html": "
Inference    \n
\n", + "text/plain": "Inference \u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m \u001b[36m \u001b[0m\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ] + } + }, + "69ce7e58e27f4e1186ab0afcb99d37c3": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "6fa2cda48fda43f9bf53a0f533392eba": { + "model_module": "@jupyter-widgets/output", + "model_module_version": "1.0.0", + "model_name": "OutputModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_0226fedc26044ab2abdccc4fcbe226f8", + "msg_id": "", + "outputs": [ + { + "data": { + "text/html": "
Inference    \n
\n", + "text/plain": "Inference \u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m \u001b[36m \u001b[0m\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ] + } + }, + "7e62816d1f6c441fb98c1f8e942fff1d": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "8951ec1ee7164f7ca7239a37e80e98ea": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "95674a6baa1842d2981fe60b31ab6cad": { + "model_module": "@jupyter-widgets/output", + "model_module_version": "1.0.0", + "model_name": "OutputModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_7e62816d1f6c441fb98c1f8e942fff1d", + "msg_id": "", + "outputs": [ + { + "data": { + "text/html": "
Inference    \n
\n", + "text/plain": "Inference \u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m \u001b[36m \u001b[0m\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ] + } + }, + "a64a6eb038c44236b80579b2bfc4b8e3": { + "model_module": "@jupyter-widgets/output", + "model_module_version": "1.0.0", + "model_name": "OutputModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_eef25a0509854f98883395a2c0fc2134", + "msg_id": "", + "outputs": [ + { + "data": { + "text/html": "
Inference  9.7 it/s  \n
\n", + "text/plain": "Inference \u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m \u001b[35m9.7 it/s\u001b[0m \u001b[36m \u001b[0m\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ] + } + }, + "eef25a0509854f98883395a2c0fc2134": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f6634888109048069b6844e9f9b4ec13": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f87f0b153b0342ad99dcd320a1302c92": { + "model_module": "@jupyter-widgets/output", + "model_module_version": "1.0.0", + "model_name": "OutputModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_f6634888109048069b6844e9f9b4ec13", + "msg_id": "", + "outputs": [ + { + "data": { + "text/html": "
Inference  9.0 it/s  \n
\n", + "text/plain": "Inference \u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m \u001b[35m9.0 it/s\u001b[0m \u001b[36m \u001b[0m\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ] + } + } + } } - ], - "source": [ - "# show the results\n", - "visualizer.add_datasample(\n", - " 'result',\n", - " img,\n", - " data_sample=result,\n", - " draw_gt=False,\n", - " wait_time=0,\n", - ")\n", - "visualizer.show()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "mmdet", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.16" - }, - "pycharm": { - "stem_cell": { - "cell_type": "raw", - "metadata": { - "collapsed": false - }, - "source": [] - } }, - "vscode": { - "interpreter": { - "hash": "26395be4d8bd6f462fe6992ade267d864a329fc5ba918775a7fc2edf93f1463b" - } - } - }, - "nbformat": 4, - "nbformat_minor": 4 + "nbformat": 4, + "nbformat_minor": 0 } diff --git a/docs/en/user_guides/inference.md b/docs/en/user_guides/inference.md index d74b4e9c5ba..3a531ede1d6 100644 --- a/docs/en/user_guides/inference.md +++ b/docs/en/user_guides/inference.md @@ -7,86 +7,214 @@ In MMDetection, a model is defined by a [configuration file](https://mmdetection To start with, we recommend [RTMDet](https://github.com/open-mmlab/mmdetection/tree/main/configs/rtmdet) with this [configuration file](https://github.com/open-mmlab/mmdetection/blob/main/configs/rtmdet/rtmdet_l_8xb32-300e_coco.py) and this [checkpoint file](https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet_l_8xb32-300e_coco/rtmdet_l_8xb32-300e_coco_20220719_112030-5a0be7c4.pth). It is recommended to download the checkpoint file to `checkpoints` directory. -## High-level APIs for inference +## High-level APIs for inference - `Inferencer` -MMDetection provides high-level Python APIs for inference on images. Here is an example of building the model and inference on given images or videos. +In OpenMMLab, all the inference operations are unified into a new interface - Inferencer. Inferencer is designed to expose a neat and simple API to users, and shares very similar interface across different OpenMMLab libraries. +A notebook demo can be found in [demo/inference_demo.ipynb](https://github.com/open-mmlab/mmdetection/blob/main/demo/inference_demo.ipynb). + +### Basic Usage + +You can get inference results for an image with only 3 lines of code. ```python -import cv2 -import mmcv -from mmcv.transforms import Compose -from mmengine.utils import track_iter_progress -from mmdet.registry import VISUALIZERS -from mmdet.apis import init_detector, inference_detector - - -# Specify the path to model config and checkpoint file -config_file = 'configs/rtmdet/rtmdet_l_8xb32-300e_coco.py' -checkpoint_file = 'checkpoints/rtmdet_l_8xb32-300e_coco_20220719_112030-5a0be7c4.pth' - -# Build the model from a config file and a checkpoint file -model = init_detector(config_file, checkpoint_file, device='cuda:0') - -# Init visualizer -visualizer = VISUALIZERS.build(model.cfg.visualizer) -# The dataset_meta is loaded from the checkpoint and -# then pass to the model in init_detector -visualizer.dataset_meta = model.dataset_meta - -# Test a single image and show the results -img = 'test.jpg' # or img = mmcv.imread(img), which will only load it once -result = inference_detector(model, img) - -# Show the results -img = mmcv.imread(img) -img = mmcv.imconvert(img, 'bgr', 'rgb') - - -visualizer.add_datasample( - 'result', - img, - data_sample=result, - draw_gt=False, - show=True) - -# Test a video and show the results -# Build test pipeline -model.cfg.test_dataloader.dataset.pipeline[0].type = 'LoadImageFromNDArray' -test_pipeline = Compose(model.cfg.test_dataloader.dataset.pipeline) - -# visualizer has been created in line 31 and 34, if you run this demo in one notebook, -# you need not build the visualizer again. - -# Init visualizer -visualizer = VISUALIZERS.build(model.cfg.visualizer) -# The dataset_meta is loaded from the checkpoint and -# then pass to the model in init_detector -visualizer.dataset_meta = model.dataset_meta - -# The interval of show (ms), 0 is block -wait_time = 1 - -video_reader = mmcv.VideoReader('video.mp4') - -cv2.namedWindow('video', 0) - -for frame in track_iter_progress(video_reader): - result = inference_detector(model, frame, test_pipeline=test_pipeline) - visualizer.add_datasample( - name='video', - image=frame, - data_sample=result, - draw_gt=False, - show=False) - frame = visualizer.get_image() - mmcv.imshow(frame, 'video', wait_time) - -cv2.destroyAllWindows() +from mmdet.apis import DetInferencer + +# Initialize the DetInferencer +inferencer = DetInferencer('rtmdet_tiny_8xb32-300e_coco') + +# Perform inference +inferencer('demo/demo.jpg', show=True) ``` -A notebook demo can be found in [demo/inference_demo.ipynb](https://github.com/open-mmlab/mmdetection/blob/main/demo/inference_demo.ipynb). +The resulting output will be displayed in a new window:. + +
+ +
+ +```{note} +If you are running MMDetection on a server without GUI or via SSH tunnel with X11 forwarding disabled, the `show` option will not work. However, you can still save visualizations to files by setting `out_dir` arguments. Read [Dumping Results](#dumping-results) for details. +``` + +### Initialization + +Each Inferencer must be initialized with a model. You can also choose the inference device during initialization. + +#### Model Initialization + +- To infer with MMDetection's pre-trained model, passing its name to the argument `model` can work. The weights will be automatically downloaded and loaded from OpenMMLab's model zoo. + + ```python + inferencer = DetInferencer(model='rtmdet_tiny_8xb32-300e_coco') + ``` + + There is a very easy to list all model names in MMDetection. + + ```python + # models is a list of model names, and them will print automatically + models = DetInferencer.list_models('mmdet') + ``` + + You can load another weight by passing its path/url to `weights`. + + ```python + inferencer = DetInferencer(model='rtmdet_tiny_8xb32-300e_coco', weights='path/to/rtmdet.pth') + ``` + +- To load custom config and weight, you can pass the path to the config file to `model` and the path to the weight to `weights`. + + ```python + inferencer = DetInferencer(model='path/to/rtmdet_config.py', weights='path/to/rtmdet.pth') + ``` + +- By default, [MMEngine](https://github.com/open-mmlab/mmengine/) dumps config to the weight. If you have a weight trained on MMEngine, you can also pass the path to the weight file to `weights` without specifying `model`: + + ```python + # It will raise an error if the config file cannot be found in the weight. Currently, within the MMDetection model repository, only the weights of ddq-detr-4scale_r50 can be loaded in this manner. + inferencer = DetInferencer(weights='https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq-detr-4scale_r50_8xb2-12e_coco/ddq-detr-4scale_r50_8xb2-12e_coco_20230809_170711-42528127.pth') + ``` + +- Passing config file to `model` without specifying `weight` will result in a randomly initialized model. + +### Device + +Each Inferencer instance is bound to a device. +By default, the best device is automatically decided by [MMEngine](https://github.com/open-mmlab/mmengine/). You can also alter the device by specifying the `device` argument. For example, you can use the following code to create an Inferencer on GPU 1. + +```python +inferencer = DetInferencer(model='rtmdet_tiny_8xb32-300e_coco', device='cuda:1') +``` + +To create an Inferencer on CPU: + +```python +inferencer = DetInferencer(model='rtmdet_tiny_8xb32-300e_coco', device='cpu') +``` + +Refer to [torch.device](https://pytorch.org/docs/stable/tensor_attributes.html#torch.device) for all the supported forms. + +### Inference + +Once the Inferencer is initialized, you can directly pass in the raw data to be inferred and get the inference results from return values. + +#### Input + +Input can be either of these types: + +- str: Path/URL to the image. + + ```python + inferencer('demo/demo.jpg') + ``` + +- array: Image in numpy array. It should be in BGR order. + + ```python + import mmcv + array = mmcv.imread('demo/demo.jpg') + inferencer(array) + ``` + +- list: A list of basic types above. Each element in the list will be processed separately. + + ```python + inferencer(['img_1.jpg', 'img_2.jpg]) + # You can even mix the types + inferencer(['img_1.jpg', array]) + ``` + +- str: Path to the directory. All images in the directory will be processed. + + ```python + inferencer('path/to/your_imgs/') + ``` + +### Output + +By default, each `Inferencer` returns the prediction results in a dictionary format. + +- `visualization` contains the visualized predictions. + +- `predictions` contains the predictions results in a json-serializable format. But it's an empty list by default unless `return_vis=True`. + +```python +{ + 'predictions' : [ + # Each instance corresponds to an input image + { + 'labels': [...], # int list of length (N, ) + 'scores': [...], # float list of length (N, ) + 'bboxes': [...], # 2d list of shape (N, 4), format: [min_x, min_y, max_x, max_y] + }, + ... + ], + 'visualization' : [ + array(..., dtype=uint8), + ] + } +``` + +If you wish to get the raw outputs from the model, you can set `return_datasamples` to `True` to get the original [DataSample](advanced_guides/structures.md), which will be stored in `predictions`. + +#### Dumping Results + +Apart from obtaining predictions from the return value, you can also export the predictions/visualizations to files by setting `out_dir` and `no_save_pred`/`no_save_vis` arguments. + +```python +inferencer('demo/demo.jpg', out_dir='outputs/', no_save_pred=False) +``` + +Results in the directory structure like: + +```text +outputs +├── preds +│ └── demo.json +└── vis + └── demo.jpg +``` -Note: `inference_detector` only supports single-image inference for now. +The filename of each file is the same as the corresponding input image filename. If the input image is an array, the filename will be a number starting from 0. + +#### Batch Inference + +You can customize the batch size by setting `batch_size`. The default batch size is 1. + +### API + +Here are extensive lists of parameters that you can use. + +- **DetInferencer.\_\_init\_\_():** + +| Arguments | Type | Type | Description | +| --------------- | ------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `model` | str, optional | None | Path to the config file or the model name defined in metafile. For example, it could be 'rtmdet-s' or 'rtmdet_s_8xb32-300e_coco' or 'configs/rtmdet/rtmdet_s_8xb32-300e_coco.py'. If the model is not specified, the user must provide the `weights` saved by MMEngine which contains the config string. | +| `weights` | str, optional | None | Path to the checkpoint. If it is not specified and `model` is a model name of metafile, the weights will be loaded from metafile. | +| `device` | str, optional | None | Device used for inference, accepting all allowed strings by `torch.device`. E.g., 'cuda:0' or 'cpu'. If None, the available device will be automatically used. | +| `scope` | str, optional | 'mmdet' | The scope of the model. | +| `palette` | str | 'none' | Color palette used for visualization. The order of priority is palette -> config -> checkpoint. | +| `show_progress` | bool | True | Control whether to display the progress bar during the inference process. | + +- **DetInferencer.\_\_call\_\_()** + +| Arguments | Type | Default | Description | +| -------------------- | ------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `inputs` | str/list/tuple/np.array | **required** | It can be a path to an image/a folder, an np array or a list/tuple (with img paths or np arrays) | +| `batch_size` | int | 1 | Inference batch size. | +| `print_result` | bool | False | Whether to print the inference result to the console. | +| `show` | bool | False | Whether to display the visualization results in a popup window. | +| `wait_time` | float | 0 | The interval of show(s). | +| `no_save_vis` | bool | False | Whether to force not to save prediction vis results. | +| `draw_pred` | bool | True | Whether to draw predicted bounding boxes. | +| `pred_score_thr` | float | 0.3 | Minimum score of bboxes to draw. | +| `return_datasamples` | bool | False | Whether to return results as DataSamples. If False, the results will be packed into a dict. | +| `print_result` | bool | False | Whether to print the inference result to the console. | +| `no_save_pred` | bool | True | Whether to force not to save prediction results. | +| `out_dir` | str | '' | Output directory of results. | +| `texts` | str/list\[str\], optional | None | Text prompts. | +| `stuff_texts` | str/list\[str\], optional | None | Stuff text prompts of open panoptic task. | +| `custom_entities` | bool | False | Whether to use custom entities. Only used in GLIP. | +| \*\*kwargs | | | Other keyword arguments passed to :meth:`preprocess`, :meth:`forward`, :meth:`visualize` and :meth:`postprocess`. Each key in kwargs should be in the corresponding set of `preprocess_kwargs`, `forward_kwargs`, `visualize_kwargs` and `postprocess_kwargs`. | ## Demos diff --git a/docs/zh_cn/user_guides/inference.md b/docs/zh_cn/user_guides/inference.md index caa2d688ae5..206e3bfde59 100644 --- a/docs/zh_cn/user_guides/inference.md +++ b/docs/zh_cn/user_guides/inference.md @@ -9,85 +9,213 @@ MMDetection 提供了许多预训练好的检测模型,可以在 [Model Zoo](h 首先,我们建议从 [RTMDet](https://github.com/open-mmlab/mmdetection/tree/main/configs/rtmdet) 开始,其 [配置](https://github.com/open-mmlab/mmdetection/blob/main/configs/rtmdet/rtmdet_l_8xb32-300e_coco.py) 文件和 [checkpoint](https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet_l_8xb32-300e_coco/rtmdet_l_8xb32-300e_coco_20220719_112030-5a0be7c4.pth) 文件在此。 我们建议将 checkpoint 文件下载到 `checkpoints` 文件夹内。 -## 推理的高层编程接口 +## 推理的高层编程接口——推理器 -MMDetection 为在图片上推理提供了 Python 的高层编程接口。下面是建立模型和在图像或视频上进行推理的例子。 +在 OpenMMLab 中,所有的推理操作都被统一到了推理器 `Inferencer` 中。推理器被设计成为一个简洁易用的 API,它在不同的 OpenMMLab 库中都有着非常相似的接口。 +下面介绍的演示样例都放在 [demo/inference_demo.ipynb](https://github.com/open-mmlab/mmdetection/blob/main/demo/inference_demo.ipynb) 中方便大家尝试。 + +### 基础用法 + +使用 `DetInferencer`,您只需 3 行代码就可以获得推理结果。 + +```python +from mmdet.apis import DetInferencer + +# 初始化模型 +inferencer = DetInferencer('rtmdet_tiny_8xb32-300e_coco') + +# 推理示例图片 +inferencer('demo/demo.jpg', show=True) +``` + +可视化结果将被显示在一个新窗口中: + +
+ +
+ +```{note} +如果你在没有 GUI 的服务器上,或者通过禁用 X11 转发的 SSH 隧道运行以上命令,`show` 选项将不起作用。然而,你仍然可以通过设置 `out_dir` 参数将可视化数据保存到文件。阅读 [储存结果](#储存结果) 了解详情。 +``` + +### 初始化 + +每个推理器必须使用一个模型进行初始化。初始化时,可以手动选择推理设备。 + +#### 模型初始化 + +- 要用 MMDetection 的预训练模型进行推理,只需要把它的名字传给参数 `model`,权重将自动从 OpenMMLab 的模型库中下载和加载。 + + ```python + inferencer = DetInferencer(model='rtmdet_tiny_8xb32-300e_coco') + ``` + + 在 MMDetection 中有一个非常容易的方法,可以列出所有模型名称。 + + ```python + # models 是一个模型名称列表,它们将自动打印 + models = DetInferencer.list_models('mmdet') + ``` + + 你可以通过将权重的路径或 URL 传递给 `weights` 来让推理器加载自定义的权重。 + + ```python + inferencer = DetInferencer(model='rtmdet_tiny_8xb32-300e_coco', weights='path/to/rtmdet.pth') + ``` + +- 要加载自定义的配置和权重,你可以把配置文件的路径传给 `model`,把权重的路径传给 `weights`。 + + ```python + inferencer = DetInferencer(model='path/to/rtmdet_config.py', weights='path/to/rtmdet.pth') + ``` + +- 默认情况下,[MMEngine](https://github.com/open-mmlab/mmengine/) 会在训练模型时自动将配置文件转储到权重文件中。如果你有一个在 MMEngine 上训练的权重,你也可以将权重文件的路径传递给 `weights`,而不需要指定 `model`: + + ```python + # 如果无法在权重中找到配置文件,则会引发错误。目前 MMDetection 模型库中只有 ddq-detr-4scale_r50 的权重可以这样加载。 + inferencer = DetInferencer(weights='https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq-detr-4scale_r50_8xb2-12e_coco/ddq-detr-4scale_r50_8xb2-12e_coco_20230809_170711-42528127.pth') + ``` + +- 传递配置文件到 `model` 而不指定 `weights` 则会产生一个随机初始化的模型。 + +#### 推理设备 + +每个推理器实例都会跟一个设备绑定。默认情况下,最佳设备是由 [MMEngine](https://github.com/open-mmlab/mmengine/) 自动决定的。你也可以通过指定 `device` 参数来改变设备。例如,你可以使用以下代码在 GPU 1 上创建一个推理器。 ```python -import cv2 -import mmcv -from mmcv.transforms import Compose -from mmengine.utils import track_iter_progress -from mmdet.registry import VISUALIZERS -from mmdet.apis import init_detector, inference_detector - - -# 指定模型的配置文件和 checkpoint 文件路径 -config_file = 'configs/rtmdet/rtmdet_l_8xb32-300e_coco.py' -checkpoint_file = 'checkpoints/rtmdet_l_8xb32-300e_coco_20220719_112030-5a0be7c4.pth' - -# 根据配置文件和 checkpoint 文件构建模型 -model = init_detector(config_file, checkpoint_file, device='cuda:0') - -# 初始化可视化工具 -visualizer = VISUALIZERS.build(model.cfg.visualizer) -# 从 checkpoint 中加载 Dataset_meta,并将其传递给模型的 init_detector -visualizer.dataset_meta = model.dataset_meta - -# 测试单张图片并展示结果 -img = 'test.jpg' # 或者 img = mmcv.imread(img),这样图片仅会被读一次 -result = inference_detector(model, img) - -# 显示结果 -img = mmcv.imread(img) -img = mmcv.imconvert(img, 'bgr', 'rgb') - - -visualizer.add_datasample( - 'result', - img, - data_sample=result, - draw_gt=False, - show=True) - -# 测试视频并展示结果 -# 构建测试 pipeline -model.cfg.test_dataloader.dataset.pipeline[0].type = 'LoadImageFromNDArray' -test_pipeline = Compose(model.cfg.test_dataloader.dataset.pipeline) - -# 可视化工具在第33行和35行已经初完成了初始化,如果直接在一个 jupyter nodebook 中运行这个 demo, -# 这里则不需要再创建一个可视化工具了。 -# 初始化可视化工具 -visualizer = VISUALIZERS.build(model.cfg.visualizer) -# 从 checkpoint 中加载 Dataset_meta,并将其传递给模型的 init_detector -visualizer.dataset_meta = model.dataset_meta - -# 显示间隔 (ms), 0 表示暂停 -wait_time = 1 - -video = mmcv.VideoReader('video.mp4') - -cv2.namedWindow('video', 0) - -for frame in track_iter_progress(video_reader): - result = inference_detector(model, frame, test_pipeline=test_pipeline) - visualizer.add_datasample( - name='video', - image=frame, - data_sample=result, - draw_gt=False, - show=False) - frame = visualizer.get_image() - mmcv.imshow(frame, 'video', wait_time) - -cv2.destroyAllWindows() +inferencer = DetInferencer(model='rtmdet_tiny_8xb32-300e_coco', device='cuda:1') ``` -Jupyter notebook 上的演示样例在 [demo/inference_demo.ipynb](https://github.com/open-mmlab/mmdetection/blob/main/demo/inference_demo.ipynb) 。 +如要在 CPU 上创建一个推理器: -注意: `inference_detector` 目前仅支持单张图片的推理。 +```python +inferencer = DetInferencer(model='rtmdet_tiny_8xb32-300e_coco', device='cpu') +``` + +请参考 [torch.device](https://pytorch.org/docs/stable/tensor_attributes.html#torch.device) 了解 `device` 参数支持的所有形式。 + +### 推理 + +当推理器初始化后,你可以直接传入要推理的原始数据,从返回值中获取推理结果。 + +#### 输入 + +输入可以是以下任意一种格式: + +- str: 图像的路径/URL。 + + ```python + inferencer('demo/demo.jpg') + ``` + +- array: 图像的 numpy 数组。它应该是 BGR 格式。 + + ```python + import mmcv + array = mmcv.imread('demo/demo.jpg') + inferencer(array) + ``` + +- list: 基本类型的列表。列表中的每个元素都将单独处理。 + + ```python + inferencer(['img_1.jpg', 'img_2.jpg]) + # 列表内混合类型也是允许的 + inferencer(['img_1.jpg', array]) + ``` + +- str: 目录的路径。目录中的所有图像都将被处理。 + + ```python + inferencer('path/to/your_imgs/') + ``` + +#### 输出 + +默认情况下,每个推理器都以字典格式返回预测结果。 + +- `visualization` 包含可视化的预测结果。但默认情况下,它是一个空列表,除非 `return_vis=True`。 + +- `predictions` 包含以 json-可序列化格式返回的预测结果。 + +```python +{ + 'predictions' : [ + # 每个实例都对应于一个输入图像 + { + 'labels': [...], # 整数列表,长度为 (N, ) + 'scores': [...], # 浮点列表,长度为 (N, ) + 'bboxes': [...], # 2d 列表,形状为 (N, 4),格式为 [min_x, min_y, max_x, max_y] + }, + ... + ], + 'visualization' : [ + array(..., dtype=uint8), + ] + } +``` + +如果你想要从模型中获取原始输出,可以将 `return_datasamples` 设置为 `True` 来获取原始的 [DataSample](advanced_guides/structures.md),它将存储在 `predictions` 中。 + +#### 储存结果 + +除了从返回值中获取预测结果,你还可以通过设置 `out_dir` 和 `no_save_pred`/`no_save_vis` 参数将预测结果和可视化结果导出到文件中。 + +```python +inferencer('demo/demo.jpg', out_dir='outputs/', no_save_pred=False) +``` + +结果目录结构如下: + +```text +outputs +├── preds +│ └── demo.json +└── vis + └── demo.jpg +``` -## 演示样例 +#### 批量推理 + +你可以通过设置 `batch_size` 来自定义批量推理的批大小。默认批大小为 1。 + +### API + +这里列出了推理器详尽的参数列表。 + +- **DetInferencer.\_\_init\_\_():** + +| 参数 | 类型 | 默认值 | 描述 | +| --------------- | ---------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `model` | str , 可选 | None | 配置文件的路径或 metafile 中定义的模型名称。例如,可以是 'rtmdet-s' 或 'rtmdet_s_8xb32-300e_coco' 或 'configs/rtmdet/rtmdet_s_8xb32-300e_coco.py'。如果未指定模型,用户必须提供 MMEngine 保存的包含配置字符串的 "weights"。 | +| `weights` | str, 可选 | None | 模型权重文件的路径。如果未指定且 `model` 是 metafile 中的模型名称,权重将从 metafile 中加载。 | +| `device` | str, 可选 | None | 推理使用的设备,接受 `torch.device` 允许的所有字符串。例如,'cuda:0' 或 'cpu'。如果为 None,将自动使用可用设备。 默认为 None。 | +| `scope` | str, 可选 | 'mmdet' | 模型的”域名“。 | +| `palette` | str | 'none' | 用于可视化的配色。优先顺序为 palette -> config -> checkpoint。 | +| `show_progress` | bool | True | 控制是否在推理过程中显示进度条。 | + +- **DetInferencer.\_\_call\_\_()** + +| 参数 | 类型 | 默认值 | 描述 | +| -------------------- | ----------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `inputs` | str/list/tuple/np.array | **必需** | 它可以是一个图片/文件夹的路径,一个 numpy 数组,或者是一个包含图片路径或 numpy 数组的列表/元组 | +| `batch_size` | int | 1 | 推理的批大小。 | +| `return_vis` | bool | False | 是否返回可视化结果。 | +| `show` | bool | False | 是否在弹出窗口中显示可视化结果。 | +| `wait_time` | float | 0 | 弹窗展示可视化结果的时间间隔。 | +| `no_save_vis` | bool | False | 是否将可视化结果保存到 `out_dir`。默认为保存。 | +| `draw_pred` | bool | True | 是否绘制预测的边界框。 | +| `pred_score_thr` | float | 0.3 | 显示预测框的最低置信度。 | +| `return_datasamples` | bool | False | 是否将结果作为 `DetDataSample` 返回。 如果为 False,则结果将被打包到一个 dict 中。 | +| `print_result` | bool | False | 是否将推理结果打印到控制台。 | +| `no_save_pred` | bool | True | 是否将推理结果保存到 `out_dir`。默认为不保存。 | +| `out_dir` | str | '' | 结果的输出目录。 | +| `texts` | str/list\[str\],可选 | None | 文本提示词。 | +| `stuff_texts` | str/list\[str\],可选 | None | 物体文本提示词。 | +| `custom_entities` | bool | False | 是否使用自定义实体。只用于 GLIP 算法。 | +| \*\*kwargs | | | 传递给 :meth:`preprocess`、:meth:`forward`、:meth:`visualize` 和 :meth:`postprocess` 的其他关键字参数。kwargs 中的每个关键字都应在相应的 `preprocess_kwargs`、`forward_kwargs`、`visualize_kwargs` 和 `postprocess_kwargs` 中。 | + +## 演示脚本样例 我们还提供了四个演示脚本,它们是使用高层编程接口实现的。[源码在此](https://github.com/open-mmlab/mmdetection/blob/main/demo) 。 diff --git a/mmdet/apis/det_inferencer.py b/mmdet/apis/det_inferencer.py index 6c445a38052..5c3e6b50ac0 100644 --- a/mmdet/apis/det_inferencer.py +++ b/mmdet/apis/det_inferencer.py @@ -78,7 +78,7 @@ class DetInferencer(BaseInferencer): postprocess_kwargs: set = { 'print_result', 'pred_out_dir', - 'return_datasample', + 'return_datasamples', 'no_save_pred', } @@ -303,7 +303,7 @@ def __call__( no_save_vis: bool = False, draw_pred: bool = True, pred_score_thr: float = 0.3, - return_datasample: bool = False, + return_datasamples: bool = False, print_result: bool = False, no_save_pred: bool = True, out_dir: str = '', @@ -328,13 +328,13 @@ def __call__( Defaults to True. pred_score_thr (float): Minimum score of bboxes to draw. Defaults to 0.3. - return_datasample (bool): Whether to return results as + return_datasamples (bool): Whether to return results as :obj:`DetDataSample`. Defaults to False. print_result (bool): Whether to print the inference result w/o visualization to the console. Defaults to False. no_save_pred (bool): Whether to force not to save prediction results. Defaults to True. - out_file: Dir to save the inference results or + out_dir: Dir to save the inference results or visualization. If left as empty, no file will be saved. Defaults to ''. texts (str | list[str]): Text prompts. Defaults to None. @@ -405,7 +405,7 @@ def __call__( results = self.postprocess( preds, visualization, - return_datasample=return_datasample, + return_datasamples=return_datasamples, print_result=print_result, no_save_pred=no_save_pred, pred_out_dir=out_dir, @@ -498,7 +498,7 @@ def postprocess( self, preds: PredType, visualization: Optional[List[np.ndarray]] = None, - return_datasample: bool = False, + return_datasamples: bool = False, print_result: bool = False, no_save_pred: bool = False, pred_out_dir: str = '', @@ -516,7 +516,7 @@ def postprocess( Args: preds (List[:obj:`DetDataSample`]): Predictions of the model. visualization (Optional[np.ndarray]): Visualized predictions. - return_datasample (bool): Whether to use Datasample to store + return_datasamples (bool): Whether to use Datasample to store inference results. If False, dict will be used. print_result (bool): Whether to print the inference result w/o visualization to the console. Defaults to False. @@ -533,7 +533,7 @@ def postprocess( - ``visualization`` (Any): Returned by :meth:`visualize`. - ``predictions`` (dict or DataSample): Returned by :meth:`forward` and processed in :meth:`postprocess`. - If ``return_datasample=False``, it usually should be a + If ``return_datasamples=False``, it usually should be a json-serializable dict containing only basic data elements such as strings and numbers. """ @@ -542,14 +542,14 @@ def postprocess( result_dict = {} results = preds - if not return_datasample: + if not return_datasamples: results = [] for pred in preds: result = self.pred2dict(pred, pred_out_dir) results.append(result) elif pred_out_dir != '': warnings.warn('Currently does not support saving datasample ' - 'when return_datasample is set to True. ' + 'when return_datasamples is set to True. ' 'Prediction results are not saved!') # Add img to the results after printing and dumping result_dict['predictions'] = results diff --git a/projects/XDecoder/xdecoder/inference/image_caption.py b/projects/XDecoder/xdecoder/inference/image_caption.py index f22551efdf3..6e21480d642 100644 --- a/projects/XDecoder/xdecoder/inference/image_caption.py +++ b/projects/XDecoder/xdecoder/inference/image_caption.py @@ -188,7 +188,7 @@ def __call__( no_save_vis: bool = False, draw_pred: bool = True, pred_score_thr: float = 0.3, - return_datasample: bool = False, + return_datasamples: bool = False, print_result: bool = False, no_save_pred: bool = True, out_dir: str = '', @@ -211,7 +211,7 @@ def __call__( Defaults to True. pred_score_thr (float): Minimum score of bboxes to draw. Defaults to 0.3. - return_datasample (bool): Whether to return results as + return_datasamples (bool): Whether to return results as :obj:`DetDataSample`. Defaults to False. print_result (bool): Whether to print the inference result w/o visualization to the console. Defaults to False. @@ -297,7 +297,7 @@ def __call__( results = self.postprocess( preds, visualization, - return_datasample=return_datasample, + return_datasamples=return_datasamples, print_result=print_result, no_save_pred=no_save_pred, pred_out_dir=out_dir, diff --git a/projects/XDecoder/xdecoder/inference/texttoimage_regionretrieval_inferencer.py b/projects/XDecoder/xdecoder/inference/texttoimage_regionretrieval_inferencer.py index 0aa091bbb24..5abf29bbee7 100644 --- a/projects/XDecoder/xdecoder/inference/texttoimage_regionretrieval_inferencer.py +++ b/projects/XDecoder/xdecoder/inference/texttoimage_regionretrieval_inferencer.py @@ -104,7 +104,7 @@ def __call__( no_save_vis: bool = False, draw_pred: bool = True, pred_score_thr: float = 0.3, - return_datasample: bool = False, + return_datasamples: bool = False, print_result: bool = False, no_save_pred: bool = True, out_dir: str = '', @@ -127,7 +127,7 @@ def __call__( Defaults to True. pred_score_thr (float): Minimum score of bboxes to draw. Defaults to 0.3. - return_datasample (bool): Whether to return results as + return_datasamples (bool): Whether to return results as :obj:`DetDataSample`. Defaults to False. print_result (bool): Whether to print the inference result w/o visualization to the console. Defaults to False. @@ -216,7 +216,7 @@ def __call__( results = self.postprocess( preds, visualization, - return_datasample=return_datasample, + return_datasamples=return_datasamples, print_result=print_result, no_save_pred=no_save_pred, pred_out_dir=out_dir, diff --git a/projects/gradio_demo/launch.py b/projects/gradio_demo/launch.py index 5d9694237b5..fafadf4a710 100644 --- a/projects/gradio_demo/launch.py +++ b/projects/gradio_demo/launch.py @@ -435,7 +435,7 @@ def inference(self, model, image): ic_inferencer = ImageCaptionInferencer( **self.model_info[model], scope='mmdet', device=get_free_device()) results_dict = ic_inferencer( - image, return_vis=False, no_save_vis=True, return_datasample=True) + image, return_vis=False, no_save_vis=True, return_datasamples=True) return results_dict['predictions'][0].pred_caption diff --git a/tests/test_apis/test_det_inferencer.py b/tests/test_apis/test_det_inferencer.py index 78cc8a2cf61..9f89b9bdc09 100644 --- a/tests/test_apis/test_det_inferencer.py +++ b/tests/test_apis/test_det_inferencer.py @@ -120,7 +120,7 @@ def test_visualize(self, model): 'rtmdet-t', 'mask-rcnn_r50_fpn_1x_coco', 'panoptic_fpn_r50_fpn_1x_coco' ]) def test_postprocess(self, model): - # return_datasample + # return_datasamples img_path = 'tests/data/color.jpg' mock_load = Mock(return_value=None) @@ -135,7 +135,7 @@ def test_postprocess(self, model): 'palette': 'random' } - res = inferencer(img_path, return_datasample=True) + res = inferencer(img_path, return_datasamples=True) self.assertTrue(is_list_of(res['predictions'], DetDataSample)) with tempfile.TemporaryDirectory() as tmp_dir: From a98f36eedea10d8a3da1fe7351dd710451c0a806 Mon Sep 17 00:00:00 2001 From: RunningLeon Date: Tue, 15 Aug 2023 11:07:48 +0800 Subject: [PATCH 19/63] Support torch2onnx for maskformer series (#10782) --- mmdet/models/dense_heads/mask2former_head.py | 10 +++------- mmdet/models/dense_heads/maskformer_head.py | 2 +- mmdet/models/layers/msdeformattn_pixel_decoder.py | 13 ++++++------- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/mmdet/models/dense_heads/mask2former_head.py b/mmdet/models/dense_heads/mask2former_head.py index 5bb9101e5ce..12d47c65525 100644 --- a/mmdet/models/dense_heads/mask2former_head.py +++ b/mmdet/models/dense_heads/mask2former_head.py @@ -398,10 +398,7 @@ def forward(self, x: List[Tensor], decoder layer. Each with shape (batch_size, num_queries, \ h, w). """ - batch_img_metas = [ - data_sample.metainfo for data_sample in batch_data_samples - ] - batch_size = len(batch_img_metas) + batch_size = x[0].shape[0] mask_features, multi_scale_memorys = self.pixel_decoder(x) # multi_scale_memorys (from low resolution to high resolution) decoder_inputs = [] @@ -438,9 +435,8 @@ def forward(self, x: List[Tensor], for i in range(self.num_transformer_decoder_layers): level_idx = i % self.num_transformer_feat_level # if a mask is all True(all background), then set it all False. - attn_mask[torch.where( - attn_mask.sum(-1) == attn_mask.shape[-1])] = False - + mask_sum = (attn_mask.sum(-1) != attn_mask.shape[-1]).unsqueeze(-1) + attn_mask = attn_mask & mask_sum # cross_attn + self_attn layer = self.transformer_decoder.layers[i] query_feat = layer( diff --git a/mmdet/models/dense_heads/maskformer_head.py b/mmdet/models/dense_heads/maskformer_head.py index cfa97297bac..24c0655ee1c 100644 --- a/mmdet/models/dense_heads/maskformer_head.py +++ b/mmdet/models/dense_heads/maskformer_head.py @@ -477,7 +477,7 @@ def forward(self, x: Tuple[Tensor], batch_img_metas = [ data_sample.metainfo for data_sample in batch_data_samples ] - batch_size = len(batch_img_metas) + batch_size = x[0].shape[0] input_img_h, input_img_w = batch_img_metas[0]['batch_input_shape'] padding_mask = x[-1].new_ones((batch_size, input_img_h, input_img_w), dtype=torch.float32) diff --git a/mmdet/models/layers/msdeformattn_pixel_decoder.py b/mmdet/models/layers/msdeformattn_pixel_decoder.py index 93a1c8e731d..a67dc3c4437 100644 --- a/mmdet/models/layers/msdeformattn_pixel_decoder.py +++ b/mmdet/models/layers/msdeformattn_pixel_decoder.py @@ -165,7 +165,7 @@ def forward(self, feats: List[Tensor]) -> Tuple[Tensor, Tensor]: level_idx = self.num_input_levels - i - 1 feat = feats[level_idx] feat_projected = self.input_convs[i](feat) - h, w = feat.shape[-2:] + feat_hw = torch._shape_as_tensor(feat)[2:].to(feat.device) # no padding padding_mask_resized = feat.new_zeros( @@ -177,7 +177,8 @@ def forward(self, feats: List[Tensor]) -> Tuple[Tensor, Tensor]: reference_points = self.point_generator.single_level_grid_priors( feat.shape[-2:], level_idx, device=feat.device) # normalize - factor = feat.new_tensor([[w, h]]) * self.strides[level_idx] + feat_wh = feat_hw.unsqueeze(0).flip(dims=[0, 1]) + factor = feat_wh * self.strides[level_idx] reference_points = reference_points / factor # shape (batch_size, c, h_i, w_i) -> (h_i * w_i, batch_size, c) @@ -188,7 +189,7 @@ def forward(self, feats: List[Tensor]) -> Tuple[Tensor, Tensor]: encoder_input_list.append(feat_projected) padding_mask_list.append(padding_mask_resized) level_positional_encoding_list.append(level_pos_embed) - spatial_shapes.append(feat.shape[-2:]) + spatial_shapes.append(feat_hw) reference_points_list.append(reference_points) # shape (batch_size, total_num_queries), # total_num_queries=sum([., h_i * w_i,.]) @@ -197,11 +198,10 @@ def forward(self, feats: List[Tensor]) -> Tuple[Tensor, Tensor]: encoder_inputs = torch.cat(encoder_input_list, dim=1) level_positional_encodings = torch.cat( level_positional_encoding_list, dim=1) - device = encoder_inputs.device # shape (num_encoder_levels, 2), from low # resolution to high resolution - spatial_shapes = torch.as_tensor( - spatial_shapes, dtype=torch.long, device=device) + num_queries_per_level = [e[0] * e[1] for e in spatial_shapes] + spatial_shapes = torch.cat(spatial_shapes).view(-1, 2) # shape (0, h_0*w_0, h_0*w_0+h_1*w_1, ...) level_start_index = torch.cat((spatial_shapes.new_zeros( (1, )), spatial_shapes.prod(1).cumsum(0)[:-1])) @@ -223,7 +223,6 @@ def forward(self, feats: List[Tensor]) -> Tuple[Tensor, Tensor]: memory = memory.permute(0, 2, 1) # from low resolution to high resolution - num_queries_per_level = [e[0] * e[1] for e in spatial_shapes] outs = torch.split(memory, num_queries_per_level, dim=-1) outs = [ x.reshape(batch_size, -1, spatial_shapes[i][0], From f02317801afb1fdfdb263cca393d426ef8ea8b91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Tue, 15 Aug 2023 14:03:50 +0800 Subject: [PATCH 20/63] Refine DDQ README (#10787) --- configs/ddq/README.md | 23 ++++++++++++++--------- model-index.yml | 1 + 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/configs/ddq/README.md b/configs/ddq/README.md index 35b5dc0afa9..3f6f459cbbb 100644 --- a/configs/ddq/README.md +++ b/configs/ddq/README.md @@ -1,26 +1,31 @@ # DDQ -[Dense Distinct Query for End-to-End Object Detection](https://arxiv.org/abs/2303.12776) +> [Dense Distinct Query for End-to-End Object Detection](https://arxiv.org/abs/2303.12776) + + ## Abstract + + One-to-one label assignment in object detection has successfully obviated the need for non-maximum suppression (NMS) as postprocessing and makes the pipeline end-to-end. However, it triggers a new dilemma as the widely used sparse queries cannot guarantee a high recall, while dense queries inevitably bring more similar queries and encounter optimization difficulties. As both sparse and dense queries are problematic, then what are the expected queries in end-to-end object detection? This paper shows that the solution should be Dense Distinct Queries (DDQ). Concretely, we first lay dense queries like traditional detectors and then select distinct ones for one-to-one assignments. DDQ blends the advantages of traditional and recent end-to-end detectors and significantly improves the performance of various detectors including FCN, R-CNN, and DETRs. Most impressively, DDQ-DETR achieves 52.1 AP on MS-COCO dataset within 12 epochs using a ResNet-50 backbone, outperforming all existing detectors in the same setting. DDQ also shares the benefit of end-to-end detectors in crowded scenes and achieves 93.8 AP on CrowdHuman. We hope DDQ can inspire researchers to consider the complementarity between traditional methods and end-to-end detectors. ![ddq_arch](https://github.com/open-mmlab/mmdetection/assets/33146359/5ca9f11b-b6f3-454f-a2d1-3009ee337bbc) ## Results and Models -| Model | Backbone | Lr schd | Augmentation | box AP(val) | Config | Download | -| :-------------: | :------: | :-----: | :----------: | :---------: | :------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| DDQ DETR-4scale | R-50 | 12e | DETR | 51.4 | [config](./ddq-detr-4scale_r50_8xb2-12e_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq-detr-4scale_r50_8xb2-12e_coco/ddq-detr-4scale_r50_8xb2-12e_coco_20230809_170711-42528127.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq-detr-4scale_r50_8xb2-12e_coco/ddq-detr-4scale_r50_8xb2-12e_coco_20230809_170711.log.json) | -| DDQ DETR-5scale | R-50 | 12e | DETR | 52.1 | [config](./ddq-detr-5scale_r50_8xb2-12e_coco.py) | [model\*](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq_detr_5scale_coco_1x.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq_detr_5scale_coco_1x_20230319_103307.log) | -| DDQ DETR-4scale | Swin-L | 30e | DETR | 58.7 | [config](./ddq-detr-4scale_swinl_8xb2-30e_coco.py) | [model\*](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq_detr_swinl_30e.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq_detr_swinl_30e_20230316_221721_20230318_143554.log) | +| Model | Backbone | Lr schd | Augmentation | box AP(val) | Config | Download | +| :---------------: | :------: | :-----: | :----------: | :---------: | :------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| DDQ DETR-4scale | R-50 | 12e | DETR | 51.4 | [config](./ddq-detr-4scale_r50_8xb2-12e_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq-detr-4scale_r50_8xb2-12e_coco/ddq-detr-4scale_r50_8xb2-12e_coco_20230809_170711-42528127.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq-detr-4scale_r50_8xb2-12e_coco/ddq-detr-4scale_r50_8xb2-12e_coco_20230809_170711.log.json) | +| DDQ DETR-5scale\* | R-50 | 12e | DETR | 52.1 | [config](./ddq-detr-5scale_r50_8xb2-12e_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq_detr_5scale_coco_1x.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq_detr_5scale_coco_1x_20230319_103307.log) | +| DDQ DETR-4scale\* | Swin-L | 30e | DETR | 58.7 | [config](./ddq-detr-4scale_swinl_8xb2-30e_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq_detr_swinl_30e.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/ddq/ddq_detr_swinl_30e_20230316_221721_20230318_143554.log) | -**Note:** Models labeled "\*" are not trained by us, but from [DDQ official website](https://github.com/jshilong/DDQ). +**Note** -## Citation +- Models labeled * are not trained by us, but from [DDQ official website](https://github.com/jshilong/DDQ). +- We find that the performance is unstable and may fluctuate by about 0.2 mAP. -We provide the config files for DDQ: [Dense Distinct Query for End-to-End Object Detection](https://arxiv.org/abs/2303.12776). +## Citation ```latex @InProceedings{Zhang_2023_CVPR, diff --git a/model-index.yml b/model-index.yml index 98778dbd0ee..cbb379950e0 100644 --- a/model-index.yml +++ b/model-index.yml @@ -97,3 +97,4 @@ Import: - configs/mask2former_vis/metafile.yml - configs/masktrack_rcnn/metafile.yml - configs/glip/metafile.yml + - configs/ddq/metafile.yml From a40a749fe93830c449acc6dc3b4871adc1e3b804 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Wed, 16 Aug 2023 19:36:33 +0800 Subject: [PATCH 21/63] Support download dataset from OpenXLab (#10799) --- dataset-index.yml | 7 ++++--- docs/en/user_guides/dataset_prepare.md | 8 ++++---- docs/zh_cn/user_guides/dataset_prepare.md | 8 ++++---- .../scripts/preprocess_coco2017.sh | 20 +++++++++---------- .../scripts/preprocess_voc2007.sh | 6 +++--- .../scripts/preprocess_voc2012.sh | 6 +++--- 6 files changed, 28 insertions(+), 27 deletions(-) diff --git a/dataset-index.yml b/dataset-index.yml index 4a8a5c49410..116412e1ad6 100644 --- a/dataset-index.yml +++ b/dataset-index.yml @@ -1,17 +1,18 @@ +openxlab: true voc2007: - dataset: PASCAL_VOC2007 + dataset: OpenDataLab/PASCAL_VOC2007 download_root: data data_root: data script: tools/dataset_converters/scripts/preprocess_voc2007.sh voc2012: - dataset: PASCAL_VOC2012 + dataset: OpenDataLab/PASCAL_VOC2012 download_root: data data_root: data script: tools/dataset_converters/scripts/preprocess_voc2012.sh coco2017: - dataset: COCO_2017 + dataset: OpenDataLab/COCO_2017 download_root: data data_root: data/coco script: tools/dataset_converters/scripts/preprocess_coco2017.sh diff --git a/docs/en/user_guides/dataset_prepare.md b/docs/en/user_guides/dataset_prepare.md index 3aabfb6fa5c..1e0259a118d 100644 --- a/docs/en/user_guides/dataset_prepare.md +++ b/docs/en/user_guides/dataset_prepare.md @@ -294,10 +294,10 @@ pip install -U openmim ``` ```Bash -# install OpenDataLab CLI tools -pip install -U opendatalab -# log in OpenDataLab, registry -odl login +# install OpenXLab CLI tools +pip install -U openxlab +# log in OpenXLab, registry +openxlab login # download voc2007 and preprocess by MIM mim download mmdet --dataset voc2007 diff --git a/docs/zh_cn/user_guides/dataset_prepare.md b/docs/zh_cn/user_guides/dataset_prepare.md index 91df4952e80..a8bf32011a7 100644 --- a/docs/zh_cn/user_guides/dataset_prepare.md +++ b/docs/zh_cn/user_guides/dataset_prepare.md @@ -291,10 +291,10 @@ pip install -U openmim ``` ```Bash -# install OpenDataLab CLI tools -pip install -U opendatalab -# log in OpenDataLab, registry -odl login +# install OpenXLab CLI tools +pip install -U openxlab +# log in OpenXLab, registry +openxlab login # download voc2007 and preprocess by MIM mim download mmdet --dataset voc2007 diff --git a/tools/dataset_converters/scripts/preprocess_coco2017.sh b/tools/dataset_converters/scripts/preprocess_coco2017.sh index 9d1e0286c3a..f2986d09430 100755 --- a/tools/dataset_converters/scripts/preprocess_coco2017.sh +++ b/tools/dataset_converters/scripts/preprocess_coco2017.sh @@ -3,13 +3,13 @@ DOWNLOAD_DIR=$1 DATA_ROOT=$2 -unzip $DOWNLOAD_DIR/COCO_2017/raw/Images/val2017.zip -d $DATA_ROOT -unzip $DOWNLOAD_DIR/COCO_2017/raw/Images/train2017.zip -d $DATA_ROOT -unzip $DOWNLOAD_DIR/COCO_2017/raw/Images/test2017.zip -d $DATA_ROOT/ -unzip $DOWNLOAD_DIR/COCO_2017/raw/Images/unlabeled2017.zip -d $DATA_ROOT -unzip $DOWNLOAD_DIR/COCO_2017/raw/Annotations/stuff_annotations_trainval2017.zip -d $DATA_ROOT/ -unzip $DOWNLOAD_DIR/COCO_2017/raw/Annotations/panoptic_annotations_trainval2017.zip -d $DATA_ROOT/ -unzip $DOWNLOAD_DIR/COCO_2017/raw/Annotations/image_info_unlabeled2017.zip -d $DATA_ROOT/ -unzip $DOWNLOAD_DIR/COCO_2017/raw/Annotations/image_info_test2017.zip -d $DATA_ROOT/ -unzip $DOWNLOAD_DIR/COCO_2017/raw/Annotations/annotations_trainval2017.zip -d $DATA_ROOT -rm -rf $DOWNLOAD_DIR/COCO_2017 +unzip $DOWNLOAD_DIR/OpenDataLab___COCO_2017/raw/Images/val2017.zip -d $DATA_ROOT +unzip $DOWNLOAD_DIR/OpenDataLab___COCO_2017/raw/Images/train2017.zip -d $DATA_ROOT +unzip $DOWNLOAD_DIR/OpenDataLab___COCO_2017/raw/Images/test2017.zip -d $DATA_ROOT/ +unzip $DOWNLOAD_DIR/OpenDataLab___COCO_2017/raw/Images/unlabeled2017.zip -d $DATA_ROOT +unzip $DOWNLOAD_DIR/OpenDataLab___COCO_2017/raw/Annotations/stuff_annotations_trainval2017.zip -d $DATA_ROOT/ +unzip $DOWNLOAD_DIR/OpenDataLab___COCO_2017/raw/Annotations/panoptic_annotations_trainval2017.zip -d $DATA_ROOT/ +unzip $DOWNLOAD_DIR/OpenDataLab___COCO_2017/raw/Annotations/image_info_unlabeled2017.zip -d $DATA_ROOT/ +unzip $DOWNLOAD_DIR/OpenDataLab___COCO_2017/raw/Annotations/image_info_test2017.zip -d $DATA_ROOT/ +unzip $DOWNLOAD_DIR/OpenDataLab___COCO_2017/raw/Annotations/annotations_trainval2017.zip -d $DATA_ROOT +rm -rf $DOWNLOAD_DIR/OpenDataLab___COCO_2017 diff --git a/tools/dataset_converters/scripts/preprocess_voc2007.sh b/tools/dataset_converters/scripts/preprocess_voc2007.sh index dd84503edae..9d265c745ea 100755 --- a/tools/dataset_converters/scripts/preprocess_voc2007.sh +++ b/tools/dataset_converters/scripts/preprocess_voc2007.sh @@ -3,6 +3,6 @@ DOWNLOAD_DIR=$1 DATA_ROOT=$2 -tar -xvf $DOWNLOAD_DIR/PASCAL_VOC2007/raw/VOCtrainval_06-Nov-2007.tar -C $DATA_ROOT -tar -xvf $DOWNLOAD_DIR/PASCAL_VOC2007/raw/VOCtestnoimgs_06-Nov-2007.tar -C $DATA_ROOT -rm -rf $DOWNLOAD_DIR/PASCAL_VOC2007 +tar -xvf $DOWNLOAD_DIR/OpenDataLab___PASCAL_VOC2007/raw/VOCtrainval_06-Nov-2007.tar -C $DATA_ROOT +tar -xvf $DOWNLOAD_DIR/OpenDataLab___PASCAL_VOC2007/raw/VOCtestnoimgs_06-Nov-2007.tar -C $DATA_ROOT +rm -rf $DOWNLOAD_DIR/OpenDataLab___PASCAL_VOC2007 diff --git a/tools/dataset_converters/scripts/preprocess_voc2012.sh b/tools/dataset_converters/scripts/preprocess_voc2012.sh index 456e855b019..e6f9ba6d824 100755 --- a/tools/dataset_converters/scripts/preprocess_voc2012.sh +++ b/tools/dataset_converters/scripts/preprocess_voc2012.sh @@ -3,6 +3,6 @@ DOWNLOAD_DIR=$1 DATA_ROOT=$2 -tar -xvf $DOWNLOAD_DIR/PASCAL_VOC2012/raw/VOCtrainval_11-May-2012.tar -C $DATA_ROOT -tar -xvf $DOWNLOAD_DIR/PASCAL_VOC2012/raw/VOC2012test.tar -C $DATA_ROOT -rm -rf $DOWNLOAD_DIR/PASCAL_VOC2012 +tar -xvf $DOWNLOAD_DIR/OpenDataLab___PASCAL_VOC2012/raw/VOCtrainval_11-May-2012.tar -C $DATA_ROOT +tar -xvf $DOWNLOAD_DIR/OpenDataLab___PASCAL_VOC2012/raw/VOC2012test.tar -C $DATA_ROOT +rm -rf $DOWNLOAD_DIR/OpenDataLab___PASCAL_VOC2012 From e95c5a4df3ef5d1f030cad1205eaad23e64dc929 Mon Sep 17 00:00:00 2001 From: QingSong Hao <88583602+ytzfhqs@users.noreply.github.com> Date: Wed, 16 Aug 2023 19:40:25 +0800 Subject: [PATCH 22/63] Update Instance segmentation Tutorial (#10711) --- demo/MMDet_InstanceSeg_Tutorial.ipynb | 4559 ++++++++++++------------- 1 file changed, 2131 insertions(+), 2428 deletions(-) diff --git a/demo/MMDet_InstanceSeg_Tutorial.ipynb b/demo/MMDet_InstanceSeg_Tutorial.ipynb index 4b75cd70290..1cd020e5750 100644 --- a/demo/MMDet_InstanceSeg_Tutorial.ipynb +++ b/demo/MMDet_InstanceSeg_Tutorial.ipynb @@ -1,2464 +1,2167 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "aGYwt_UjIrqp" - }, - "source": [ - "# Instance Segmentation\n", - "\n", - "In this tutorial, you will learn:\n", - "- the basic structure of Mask R-CNN.\n", - "- to perform inference with a MMDetection detector.\n", - "- to train a new instance segmentation model with a new dataset.\n", - "\n", - "Let's start!\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "6hD0mmMixT0p", - "outputId": "3fdfddc5-9314-4d11-ed2b-2833795e1cb6" - }, - "outputs": [], - "source": [ - "# Check Pytorch installation\n", - "import torch, torchvision\n", - "print(\"torch version:\",torch.__version__, \"cuda:\",torch.cuda.is_available())\n", - "\n", - "# Check MMDetection installation\n", - "import mmdet\n", - "print(\"mmdetection:\",mmdet.__version__)\n", - "\n", - "# Check mmcv installation\n", - "import mmcv\n", - "print(\"mmcv:\",mmcv.__version__)\n", - "\n", - "# Check mmengine installation\n", - "import mmengine\n", - "print(\"mmengine:\",mmengine.__version__)\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "gi9zw03oM4CH" - }, - "source": [ - "## Perform Inference with An MMDetection Detector" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "3pFYLerc0we1" - }, - "source": [ - "### A two-stage detector\n", - "\n", - "In this tutorial, we use Mask R-CNN, a simple two-stage detector as an example.\n", - "\n", - "The high-level architecture of Mask R-CNN is shown in the following picture. More details can be found in the [paper](https://arxiv.org/abs/1703.06870).\n", - "\n", - "\"mask\n", - "\n", - "Mask R-CNN adds a mask branch based on the original Faster R-CNN. It also uses RoIAlign, a more precise version of RoIPooling for RoI feature extraction to improve the performance.\n", - "\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!mim download mmdet --config mask-rcnn_r50-caffe_fpn_ms-poly-3x_coco --dest ./checkpoints" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "8M5KUnX7Np3h", - "outputId": "ef343a81-a46b-4041-8f6c-a4049a5c8a4e" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "local loads checkpoint from path: checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth\n" - ] - } - ], - "source": [ - "import mmcv\n", - "import mmengine\n", - "from mmdet.apis import init_detector, inference_detector\n", - "from mmdet.utils import register_all_modules\n", - "# Choose to use a config and initialize the detector\n", - "config_file = 'configs/mask_rcnn/mask-rcnn_r50-caffe_fpn_ms-poly-3x_coco.py'\n", - "# Setup a checkpoint file to load\n", - "checkpoint_file = 'checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth'\n", - "\n", - "# register all modules in mmdet into the registries\n", - "register_all_modules()\n", - "\n", - "# build the model from a config file and a checkpoint file\n", - "model = init_detector(config_file, checkpoint_file, device='cuda:0') # or device='cuda:0'\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "pVqDQAOiKkJK" - }, - "source": [ - "From the printed model, we will find that the model does consist of the components that we described earlier. It uses ResNet as its CNN backbone, and has a RPN head and RoI Head. \n", - "The RoI Head includes box head and mask head. In addition, the model has a neural network module, named neck, directly after the CNN backbone. It is a [feature pyramid network (FPN)](https://arxiv.org/abs/1612.03144) for enhancing the multi-scale features.\n", - "\n", - "\n", - "### Inference with the detector\n", - "\n", - "The model is successfully created and loaded, let's see how good it is. We use the high-level API `inference_detector` implemented in the MMDetection. This API is created to ease the inference process. The details of the codes can be found [here](https://github.com/open-mmlab/mmdetection/blob/master/mmdet/apis/inference.py#L15)." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "Wi6DRpsQPEmV", - "outputId": "8670eb7c-7e35-4c6d-edf8-9599c296fd01" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - " pred_instances: \n", - " _pred_instances: \n", - " gt_instances: \n", - " _gt_instances: \n", - " _ignored_instances: \n", - ") at 0x7f2e39221d90>\n" - ] - } - ], - "source": [ - "# Use the detector to do inference\n", - "image = mmcv.imread('demo/demo.jpg',channel_order='rgb')\n", - "result = inference_detector(model, image)\n", - "print(result)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Let's plot the result" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/sanbu/anaconda3/envs/mmlab2/lib/python3.7/site-packages/mmengine/visualization/visualizer.py:170: UserWarning: `Visualizer` backend is not initialized because save_dir is None.\n", - " warnings.warn('`Visualizer` backend is not initialized '\n" - ] - } - ], - "source": [ - "from mmdet.registry import VISUALIZERS\n", - "# init visualizer(run the block only once in jupyter notebook)\n", - "visualizer = VISUALIZERS.build(model.cfg.visualizer)\n", - "# the dataset_meta is loaded from the checkpoint and\n", - "# then pass to the model in init_detector\n", - "visualizer.dataset_meta = model.dataset_meta" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# show the results\n", - "visualizer.add_datasample(\n", - " 'result',\n", - " image,\n", - " data_sample=result,\n", - " draw_gt = None,\n", - " wait_time=0,\n", - ")\n", - "visualizer.show()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "7GrWIJywLV-V" - }, - "source": [ - "## Train a Detector on A Customized Dataset\n", - "\n", - "To train a new detector, there are usually three things to do:\n", - "1. Support a new dataset\n", - "2. Modify the config\n", - "3. Train a new detector\n", - "\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "E73y5Lru-wBx" - }, - "source": [ - "### Support a new dataset\n", - "\n", - "There are three ways to support a new dataset in MMDetection: \n", - " 1. Reorganize the dataset into a COCO format\n", - " 2. Reorganize the dataset into a middle format\n", - " 3. Implement a new dataset\n", - "\n", - "We recommend the first two methods, as they are usually easier than the third.\n", - "\n", - "In this tutorial, we give an example that converts the data into COCO format because MMDetection **only support evaluating mask AP of dataset in COCO format for now**. Other methods and more advanced usages can be found in the [doc](https://mmdetection.readthedocs.io/en/latest/advanced_guides/customize_dataset.html).\n", - "\n", - "First, let's download the [the balloon dataset](https://github.com/matterport/Mask_RCNN/tree/master/samples/balloon)." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "rHnw5Q_nARXq", - "outputId": "5993532c-3a6f-46d2-e9ad-428cf44dae60" - }, - "outputs": [], - "source": [ - "# download and unzip the data\n", - "!wget -c https://github.com/matterport/Mask_RCNN/releases/download/v2.1/balloon_dataset.zip\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!unzip balloon_dataset.zip -d ./ballondatasets/" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Check the directory structure of the tiny data\n", - "\n", - "# Install tree first in your terminal(linux)\n", - "sudo apt-get -q install tree\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "Wuwxw1oZRtVZ", - "outputId": "4ee508e8-5acb-450d-c06b-69ceffdc85dd" - }, - "outputs": [], - "source": [ - "!tree ballondatasets" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 594 - }, - "id": "YnQQqzOWzE91", - "outputId": "befa7aae-a21b-42c8-c3ee-5cb4f5bf3e57" - }, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Let's take a look at the dataset image\n", - "import mmcv\n", - "import matplotlib.pyplot as plt\n", - "\n", - "img = mmcv.imread('ballondatasets/balloon/train/10464445726_6f1e3bbe6a_k.jpg')\n", - "plt.figure(figsize=(15, 10))\n", - "plt.imshow(mmcv.bgr2rgb(img))\n", - "plt.show()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "PMZvtSIl71qi" - }, - "source": [ - "After downloading the data, we need to implement a function to convert the annotation format into the COCO format. Then we can use implemented `COCODataset` to load the data and perform training and evaluation.\n", - "Let's take a look at the annotation json file.\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "id": "n7rwalnPd6e1" - }, - "outputs": [], - "source": [ - "# Check the label of a single image\n", - "import mmengine\n", - "\n", - "annotation = mmengine.load('./ballondatasets/balloon/train/via_region_data.json')" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "keLW7uqJM54Y", - "outputId": "d71b98a7-516b-48d4-852d-373f33b881f4" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'fileref': '',\n", - " 'size': 1115004,\n", - " 'filename': '34020010494_e5cb88e1c4_k.jpg',\n", - " 'base64_img_data': '',\n", - " 'file_attributes': {},\n", - " 'regions': {'0': {'shape_attributes': {'name': 'polygon',\n", - " 'all_points_x': [1020,\n", - " 1000,\n", - " 994,\n", - " 1003,\n", - " 1023,\n", - " 1050,\n", - " 1089,\n", - " 1134,\n", - " 1190,\n", - " 1265,\n", - " 1321,\n", - " 1361,\n", - " 1403,\n", - " 1428,\n", - " 1442,\n", - " 1445,\n", - " 1441,\n", - " 1427,\n", - " 1400,\n", - " 1361,\n", - " 1316,\n", - " 1269,\n", - " 1228,\n", - " 1198,\n", - " 1207,\n", - " 1210,\n", - " 1190,\n", - " 1177,\n", - " 1172,\n", - " 1174,\n", - " 1170,\n", - " 1153,\n", - " 1127,\n", - " 1104,\n", - " 1061,\n", - " 1032,\n", - " 1020],\n", - " 'all_points_y': [963,\n", - " 899,\n", - " 841,\n", - " 787,\n", - " 738,\n", - " 700,\n", - " 663,\n", - " 638,\n", - " 621,\n", - " 619,\n", - " 643,\n", - " 672,\n", - " 720,\n", - " 765,\n", - " 800,\n", - " 860,\n", - " 896,\n", - " 942,\n", - " 990,\n", - " 1035,\n", - " 1079,\n", - " 1112,\n", - " 1129,\n", - " 1134,\n", - " 1144,\n", - " 1153,\n", - " 1166,\n", - " 1166,\n", - " 1150,\n", - " 1136,\n", - " 1129,\n", - " 1122,\n", - " 1112,\n", - " 1084,\n", - " 1037,\n", - " 989,\n", - " 963]},\n", - " 'region_attributes': {}}}}" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# The annotation is a dict, and its values looks like the following\n", - "annotation['34020010494_e5cb88e1c4_k.jpg1115004']" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "QA1pFg-FeO3l" - }, - "source": [ - "According to the above observation, each single image has a corresponding annotation containing keys `filename` and `regions` that are necessary for training.\n", - "We need to read annotations of each image and convert them into COCO format as below:\n", - "\n", - "```python\n", - "{\n", - " \"images\": [image],\n", - " \"annotations\": [annotation], \n", - " \"categories\": [category]\n", - "}\n", - "\n", - "\n", - "image = {\n", - " \"id\": int,\n", - " \"width\": int,\n", - " \"height\": int,\n", - " \"file_name\": str,\n", - "}\n", - "\n", - "annotation = {\n", - " \"id\": int,\n", - " \"image_id\": int,\n", - " \"category_id\": int,\n", - " \"segmentation\": RLE or [polygon],\n", - " \"area\": float,\n", - " \"bbox\": [x,y,width,height],\n", - " \"iscrowd\": 0 or 1,\n", - "}\n", - "\n", - "categories = [{\n", - " \"id\": int,\n", - " \"name\": str,\n", - " \"supercategory\": str,\n", - "}]\n", - "```\n", - "**Note**: We only list the necessary keys for training, as shown above. For a full COCO format, please see [here](https://cocodataset.org/#format-data)." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "id": "GdSaB2ad0EdX" - }, - "outputs": [], - "source": [ - "import os.path as osp\n", - "\n", - "def convert_balloon_to_coco(ann_file, out_file, image_prefix):\n", - " data_infos = mmengine.load(ann_file)\n", - "\n", - " annotations = []\n", - " images = []\n", - " obj_count = 0\n", - " for idx, v in enumerate(mmengine.track_iter_progress(data_infos.values())):\n", - " filename = v['filename']\n", - " img_path = osp.join(image_prefix, filename)\n", - " height, width = mmcv.imread(img_path).shape[:2]\n", - "\n", - " images.append(dict(\n", - " id=idx,\n", - " file_name=filename,\n", - " height=height,\n", - " width=width))\n", - "\n", - " bboxes = []\n", - " labels = []\n", - " masks = []\n", - " for _, obj in v['regions'].items():\n", - " assert not obj['region_attributes']\n", - " obj = obj['shape_attributes']\n", - " px = obj['all_points_x']\n", - " py = obj['all_points_y']\n", - " poly = [(x + 0.5, y + 0.5) for x, y in zip(px, py)]\n", - " poly = [p for x in poly for p in x]\n", - "\n", - " x_min, y_min, x_max, y_max = (\n", - " min(px), min(py), max(px), max(py))\n", - "\n", - "\n", - " data_anno = dict(\n", - " image_id=idx,\n", - " id=obj_count,\n", - " category_id=0,\n", - " bbox=[x_min, y_min, x_max - x_min, y_max - y_min],\n", - " area=(x_max - x_min) * (y_max - y_min),\n", - " segmentation=[poly],\n", - " iscrowd=0)\n", - " annotations.append(data_anno)\n", - " obj_count += 1\n", - "\n", - " coco_format_json = dict(\n", - " images=images,\n", - " annotations=annotations,\n", - " categories=[{'id':0, 'name': 'balloon'}])\n", - " mmengine.dump(coco_format_json, out_file)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "G3xV5ktqlpFu", - "outputId": "af264997-25d1-4fc1-91bb-f9f1ff2c68c9" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 61/61, 61.7 task/s, elapsed: 1s, ETA: 0s\n", - "[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 13/13, 59.5 task/s, elapsed: 0s, ETA: 0s\n" - ] - } - ], - "source": [ - "convert_balloon_to_coco(\n", - " './ballondatasets/balloon/train/via_region_data.json',\n", - " './ballondatasets/balloon/train/annotation_coco.json',\n", - " './ballondatasets/balloon/train/')\n", - "convert_balloon_to_coco(\n", - " './ballondatasets/balloon/val/via_region_data.json',\n", - " './ballondatasets/balloon/val/annotation_coco.json',\n", - " './ballondatasets/balloon/val/')" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "PwqJOpBe-bMj" - }, - "source": [ - "### Modify the config\n", - "\n", - "In the next step, we need to modify the config for the training.\n", - "To accelerate the process, we finetune a detector using a pre-trained detector." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "id": "hamZrlnH-YDD" - }, - "outputs": [], - "source": [ - "from mmengine import Config\n", - "cfg = Config.fromfile('./configs/mask_rcnn/mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco.py')" - ] + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "aGYwt_UjIrqp" + }, + "source": [ + "# Instance Segmentation\n", + "\n", + "In this tutorial, you will learn:\n", + "- the basic structure of Mask R-CNN.\n", + "- to perform inference with a MMDetection detector.\n", + "- to train a new instance segmentation model with a new dataset.\n", + "\n", + "Let's start!\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cCk6uTQrdUUn" + }, + "source": [ + "If you are running the tutorial files on the colab platform or a new virtual environment, please run the following code first to configure the runtime environment.\n", + "```python\n", + "!pip install -U openmim\n", + "!mim install \"mmengine>=0.7.0\"\n", + "!mim install \"mmcv>=2.0.0rc4\"\n", + "\n", + "# Install mmdetection\n", + "!rm -rf mmdetection\n", + "!git clone https://github.com/open-mmlab/mmdetection.git\n", + "%cd mmdetection\n", + "\n", + "!pip install -e .\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "6hD0mmMixT0p", + "outputId": "221dad3c-5ef8-4094-e07e-289f333f7bb9" + }, + "outputs": [ { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "HntziLGq-92Z" - }, - "source": [ - "Given a config that trains a Mask R-CNN on COCO dataset, we need to modify some values to use it for training on the balloon dataset." - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "torch version: 2.0.1+cu118 cuda: True\n", + "mmdetection: 3.1.0\n", + "mmcv: 2.0.1\n", + "mmengine: 0.8.4\n" + ] + } + ], + "source": [ + "# Check Pytorch installation\n", + "import torch, torchvision\n", + "print(\"torch version:\",torch.__version__, \"cuda:\",torch.cuda.is_available())\n", + "\n", + "# Check MMDetection installation\n", + "import mmdet\n", + "print(\"mmdetection:\",mmdet.__version__)\n", + "\n", + "# Check mmcv installation\n", + "import mmcv\n", + "print(\"mmcv:\",mmcv.__version__)\n", + "\n", + "# Check mmengine installation\n", + "import mmengine\n", + "print(\"mmengine:\",mmengine.__version__)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gi9zw03oM4CH" + }, + "source": [ + "## Perform Inference with An MMDetection Detector" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3pFYLerc0we1" + }, + "source": [ + "### A two-stage detector\n", + "\n", + "In this tutorial, we use Mask R-CNN, a simple two-stage detector as an example.\n", + "\n", + "The high-level architecture of Mask R-CNN is shown in the following picture. More details can be found in the [paper](https://arxiv.org/abs/1703.06870).\n", + "\n", + "\"mask\n", + "\n", + "Mask R-CNN adds a mask branch based on the original Faster R-CNN. It also uses RoIAlign, a more precise version of RoIPooling for RoI feature extraction to improve the performance.\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "sWI-nX5yRYYQ", + "outputId": "fd91e337-27cb-492c-a948-98adcbcfca27" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "pUbwD8uV0PR8", - "outputId": "0c9ba286-1111-407d-bda4-14d6a262a3e3" - }, - "outputs": [], - "source": [ - "from mmengine.runner import set_random_seed\n", - "\n", - "# Modify dataset classes and color\n", - "cfg.metainfo = {\n", - " 'CLASSES': ('balloon', ),\n", - " 'PALETTE': [\n", - " (220, 20, 60),\n", - " ]\n", - "}\n", - "\n", - "# Modify dataset type and path\n", - "cfg.data_root = './ballondatasets/balloon'\n", - "\n", - "cfg.train_dataloader.dataset.ann_file = 'train/annotation_coco.json'\n", - "cfg.train_dataloader.dataset.data_root = cfg.data_root\n", - "cfg.train_dataloader.dataset.data_prefix.img = 'train/'\n", - "cfg.train_dataloader.dataset.metainfo = cfg.metainfo\n", - "\n", - "cfg.val_dataloader.dataset.ann_file = 'val/annotation_coco.json'\n", - "cfg.val_dataloader.dataset.data_root = cfg.data_root\n", - "cfg.val_dataloader.dataset.data_prefix.img = 'val/'\n", - "cfg.val_dataloader.dataset.metainfo = cfg.metainfo\n", - "\n", - "cfg.test_dataloader = cfg.val_dataloader\n", - "\n", - "# Modify metric config\n", - "cfg.val_evaluator.ann_file = cfg.data_root+'/'+'val/annotation_coco.json'\n", - "cfg.test_evaluator = cfg.val_evaluator\n", - "\n", - "# Modify num classes of the model in box head and mask head\n", - "cfg.model.roi_head.bbox_head.num_classes = 1\n", - "cfg.model.roi_head.mask_head.num_classes = 1\n", - "\n", - "# We can still the pre-trained Mask RCNN model to obtain a higher performance\n", - "cfg.load_from = 'checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth'\n", - "\n", - "# Set up working dir to save files and logs.\n", - "cfg.work_dir = './tutorial_exps'\n", - "\n", - "\n", - "# We can set the evaluation interval to reduce the evaluation times\n", - "cfg.train_cfg.val_interval = 3\n", - "# We can set the checkpoint saving interval to reduce the storage cost\n", - "cfg.default_hooks.checkpoint.interval = 3\n", - "\n", - "# The original learning rate (LR) is set for 8-GPU training.\n", - "# We divide it by 8 since we only use one GPU.\n", - "cfg.optim_wrapper.optimizer.lr = 0.02 / 8\n", - "cfg.default_hooks.logger.interval = 10\n", - "\n", - "\n", - "# Set seed thus the results are more reproducible\n", - "# cfg.seed = 0\n", - "set_random_seed(0, deterministic=False)\n", - "\n", - "# We can also use tensorboard to log the training process\n", - "cfg.visualizer.vis_backends.append({\"type\":'TensorboardVisBackend'})" - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "processing mask-rcnn_r50-caffe_fpn_ms-poly-3x_coco...\n", + "\u001b[2Kdownloading \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m169.6/169.6 MiB\u001b[0m \u001b[31m9.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h\u001b[32mSuccessfully downloaded mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth to /content/mmdetection/checkpoints\u001b[0m\n", + "\u001b[32mSuccessfully dumped mask-rcnn_r50-caffe_fpn_ms-poly-3x_coco.py to /content/mmdetection/checkpoints\u001b[0m\n" + ] + } + ], + "source": [ + "!mim download mmdet --config mask-rcnn_r50-caffe_fpn_ms-poly-3x_coco --dest ./checkpoints" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "8M5KUnX7Np3h", + "outputId": "71de79c0-9f7e-4cae-f810-5c0a20fe9be8" + }, + "outputs": [ { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "111W_oZV_3wa" - }, - "source": [ - "### Train a new detector\n", - "\n", - "Finally, lets initialize the dataset and detector, then train a new detector!" - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "Loads checkpoint by local backend from path: checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth\n" + ] + } + ], + "source": [ + "import mmcv\n", + "import mmengine\n", + "from mmdet.apis import init_detector, inference_detector\n", + "from mmdet.utils import register_all_modules\n", + "# Choose to use a config and initialize the detector\n", + "config_file = 'configs/mask_rcnn/mask-rcnn_r50-caffe_fpn_ms-poly-3x_coco.py'\n", + "# Setup a checkpoint file to load\n", + "checkpoint_file = 'checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth'\n", + "\n", + "# register all modules in mmdet into the registries\n", + "register_all_modules()\n", + "\n", + "# build the model from a config file and a checkpoint file\n", + "model = init_detector(config_file, checkpoint_file, device='cuda:0') # or device='cuda:0'\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pVqDQAOiKkJK" + }, + "source": [ + "From the printed model, we will find that the model does consist of the components that we described earlier. It uses ResNet as its CNN backbone, and has a RPN head and RoI Head.\n", + "The RoI Head includes box head and mask head. In addition, the model has a neural network module, named neck, directly after the CNN backbone. It is a [feature pyramid network (FPN)](https://arxiv.org/abs/1612.03144) for enhancing the multi-scale features.\n", + "\n", + "\n", + "### Inference with the detector\n", + "\n", + "The model is successfully created and loaded, let's see how good it is. We use the high-level API `inference_detector` implemented in the MMDetection. This API is created to ease the inference process. The details of the codes can be found [here](https://github.com/open-mmlab/mmdetection/blob/master/mmdet/apis/inference.py#L15)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "Wi6DRpsQPEmV", + "outputId": "42a9dd39-edcb-49f1-e318-a3cd77f89eee" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "11/23 10:45:03 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - \n", - "------------------------------------------------------------\n", - "System environment:\n", - " sys.platform: linux\n", - " Python: 3.7.12 | packaged by conda-forge | (default, Oct 26 2021, 06:08:21) [GCC 9.4.0]\n", - " CUDA available: True\n", - " numpy_random_seed: 209652396\n", - " GPU 0: NVIDIA GeForce RTX 3080\n", - " CUDA_HOME: /usr/local/cuda-11.5\n", - " NVCC: Cuda compilation tools, release 11.5, V11.5.50\n", - " GCC: gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0\n", - " PyTorch: 1.12.1+cu113\n", - " PyTorch compiling details: PyTorch built with:\n", - " - GCC 9.3\n", - " - C++ Version: 201402\n", - " - Intel(R) Math Kernel Library Version 2020.0.0 Product Build 20191122 for Intel(R) 64 architecture applications\n", - " - Intel(R) MKL-DNN v2.6.0 (Git Hash 52b5f107dd9cf10910aaa19cb47f3abf9b349815)\n", - " - OpenMP 201511 (a.k.a. OpenMP 4.5)\n", - " - LAPACK is enabled (usually provided by MKL)\n", - " - NNPACK is enabled\n", - " - CPU capability usage: AVX2\n", - " - CUDA Runtime 11.3\n", - " - NVCC architecture flags: -gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_70,code=sm_70;-gencode;arch=compute_75,code=sm_75;-gencode;arch=compute_80,code=sm_80;-gencode;arch=compute_86,code=sm_86\n", - " - CuDNN 8.3.2 (built against CUDA 11.5)\n", - " - Magma 2.5.2\n", - " - Build settings: BLAS_INFO=mkl, BUILD_TYPE=Release, CUDA_VERSION=11.3, CUDNN_VERSION=8.3.2, CXX_COMPILER=/opt/rh/devtoolset-9/root/usr/bin/c++, CXX_FLAGS= -fabi-version=11 -Wno-deprecated -fvisibility-inlines-hidden -DUSE_PTHREADPOOL -fopenmp -DNDEBUG -DUSE_KINETO -DUSE_FBGEMM -DUSE_QNNPACK -DUSE_PYTORCH_QNNPACK -DUSE_XNNPACK -DSYMBOLICATE_MOBILE_DEBUG_HANDLE -DEDGE_PROFILER_USE_KINETO -O2 -fPIC -Wno-narrowing -Wall -Wextra -Werror=return-type -Wno-missing-field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wno-unused-parameter -Wno-unused-function -Wno-unused-result -Wno-unused-local-typedefs -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=deprecated-declarations -Wno-stringop-overflow -Wno-psabi -Wno-error=pedantic -Wno-error=redundant-decls -Wno-error=old-style-cast -fdiagnostics-color=always -faligned-new -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping-math -Werror=format -Werror=cast-function-type -Wno-stringop-overflow, LAPACK_INFO=mkl, PERF_WITH_AVX=1, PERF_WITH_AVX2=1, PERF_WITH_AVX512=1, TORCH_VERSION=1.12.1, USE_CUDA=ON, USE_CUDNN=ON, USE_EXCEPTION_PTR=1, USE_GFLAGS=OFF, USE_GLOG=OFF, USE_MKL=ON, USE_MKLDNN=OFF, USE_MPI=OFF, USE_NCCL=ON, USE_NNPACK=ON, USE_OPENMP=ON, USE_ROCM=OFF, \n", - "\n", - " TorchVision: 0.13.1+cu113\n", - " OpenCV: 4.6.0\n", - " MMEngine: 0.3.0\n", - "\n", - "Runtime environment:\n", - " cudnn_benchmark: False\n", - " mp_cfg: {'mp_start_method': 'fork', 'opencv_num_threads': 0}\n", - " dist_cfg: {'backend': 'nccl'}\n", - " seed: None\n", - " Distributed launcher: none\n", - " Distributed training: False\n", - " GPU number: 1\n", - "------------------------------------------------------------\n", - "\n", - "11/23 10:45:04 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Config:\n", - "model = dict(\n", - " type='MaskRCNN',\n", - " data_preprocessor=dict(\n", - " type='DetDataPreprocessor',\n", - " mean=[103.53, 116.28, 123.675],\n", - " std=[1.0, 1.0, 1.0],\n", - " bgr_to_rgb=False,\n", - " pad_mask=True,\n", - " pad_size_divisor=32),\n", - " backbone=dict(\n", - " type='ResNet',\n", - " depth=50,\n", - " num_stages=4,\n", - " out_indices=(0, 1, 2, 3),\n", - " frozen_stages=1,\n", - " norm_cfg=dict(type='BN', requires_grad=False),\n", - " norm_eval=True,\n", - " style='caffe',\n", - " init_cfg=dict(\n", - " type='Pretrained',\n", - " checkpoint='open-mmlab://detectron2/resnet50_caffe')),\n", - " neck=dict(\n", - " type='FPN',\n", - " in_channels=[256, 512, 1024, 2048],\n", - " out_channels=256,\n", - " num_outs=5),\n", - " rpn_head=dict(\n", - " type='RPNHead',\n", - " in_channels=256,\n", - " feat_channels=256,\n", - " anchor_generator=dict(\n", - " type='AnchorGenerator',\n", - " scales=[8],\n", - " ratios=[0.5, 1.0, 2.0],\n", - " strides=[4, 8, 16, 32, 64]),\n", - " bbox_coder=dict(\n", - " type='DeltaXYWHBBoxCoder',\n", - " target_means=[0.0, 0.0, 0.0, 0.0],\n", - " target_stds=[1.0, 1.0, 1.0, 1.0]),\n", - " loss_cls=dict(\n", - " type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0),\n", - " loss_bbox=dict(type='L1Loss', loss_weight=1.0)),\n", - " roi_head=dict(\n", - " type='StandardRoIHead',\n", - " bbox_roi_extractor=dict(\n", - " type='SingleRoIExtractor',\n", - " roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0),\n", - " out_channels=256,\n", - " featmap_strides=[4, 8, 16, 32]),\n", - " bbox_head=dict(\n", - " type='Shared2FCBBoxHead',\n", - " in_channels=256,\n", - " fc_out_channels=1024,\n", - " roi_feat_size=7,\n", - " num_classes=1,\n", - " bbox_coder=dict(\n", - " type='DeltaXYWHBBoxCoder',\n", - " target_means=[0.0, 0.0, 0.0, 0.0],\n", - " target_stds=[0.1, 0.1, 0.2, 0.2]),\n", - " reg_class_agnostic=False,\n", - " loss_cls=dict(\n", - " type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0),\n", - " loss_bbox=dict(type='L1Loss', loss_weight=1.0)),\n", - " mask_roi_extractor=dict(\n", - " type='SingleRoIExtractor',\n", - " roi_layer=dict(type='RoIAlign', output_size=14, sampling_ratio=0),\n", - " out_channels=256,\n", - " featmap_strides=[4, 8, 16, 32]),\n", - " mask_head=dict(\n", - " type='FCNMaskHead',\n", - " num_convs=4,\n", - " in_channels=256,\n", - " conv_out_channels=256,\n", - " num_classes=1,\n", - " loss_mask=dict(\n", - " type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))),\n", - " train_cfg=dict(\n", - " rpn=dict(\n", - " assigner=dict(\n", - " type='MaxIoUAssigner',\n", - " pos_iou_thr=0.7,\n", - " neg_iou_thr=0.3,\n", - " min_pos_iou=0.3,\n", - " match_low_quality=True,\n", - " ignore_iof_thr=-1),\n", - " sampler=dict(\n", - " type='RandomSampler',\n", - " num=256,\n", - " pos_fraction=0.5,\n", - " neg_pos_ub=-1,\n", - " add_gt_as_proposals=False),\n", - " allowed_border=-1,\n", - " pos_weight=-1,\n", - " debug=False),\n", - " rpn_proposal=dict(\n", - " nms_pre=2000,\n", - " max_per_img=1000,\n", - " nms=dict(type='nms', iou_threshold=0.7),\n", - " min_bbox_size=0),\n", - " rcnn=dict(\n", - " assigner=dict(\n", - " type='MaxIoUAssigner',\n", - " pos_iou_thr=0.5,\n", - " neg_iou_thr=0.5,\n", - " min_pos_iou=0.5,\n", - " match_low_quality=True,\n", - " ignore_iof_thr=-1),\n", - " sampler=dict(\n", - " type='RandomSampler',\n", - " num=512,\n", - " pos_fraction=0.25,\n", - " neg_pos_ub=-1,\n", - " add_gt_as_proposals=True),\n", - " mask_size=28,\n", - " pos_weight=-1,\n", - " debug=False)),\n", - " test_cfg=dict(\n", - " rpn=dict(\n", - " nms_pre=1000,\n", - " max_per_img=1000,\n", - " nms=dict(type='nms', iou_threshold=0.7),\n", - " min_bbox_size=0),\n", - " rcnn=dict(\n", - " score_thr=0.05,\n", - " nms=dict(type='nms', iou_threshold=0.5),\n", - " max_per_img=100,\n", - " mask_thr_binary=0.5)))\n", - "dataset_type = 'CocoDataset'\n", - "data_root = './ballondatasets/balloon'\n", - "file_client_args = dict(backend='disk')\n", - "train_pipeline = [\n", - " dict(type='LoadImageFromFile', file_client_args=dict(backend='disk')),\n", - " dict(\n", - " type='LoadAnnotations',\n", - " with_bbox=True,\n", - " with_mask=True,\n", - " poly2mask=False),\n", - " dict(\n", - " type='RandomChoiceResize',\n", - " scales=[(1333, 640), (1333, 672), (1333, 704), (1333, 736),\n", - " (1333, 768), (1333, 800)],\n", - " keep_ratio=True),\n", - " dict(type='RandomFlip', prob=0.5),\n", - " dict(type='PackDetInputs')\n", - "]\n", - "test_pipeline = [\n", - " dict(type='LoadImageFromFile', file_client_args=dict(backend='disk')),\n", - " dict(type='Resize', scale=(1333, 800), keep_ratio=True),\n", - " dict(type='LoadAnnotations', with_bbox=True, with_mask=True),\n", - " dict(\n", - " type='PackDetInputs',\n", - " meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',\n", - " 'scale_factor'))\n", - "]\n", - "train_dataloader = dict(\n", - " batch_size=2,\n", - " num_workers=2,\n", - " persistent_workers=True,\n", - " sampler=dict(type='DefaultSampler', shuffle=True),\n", - " batch_sampler=dict(type='AspectRatioBatchSampler'),\n", - " dataset=dict(\n", - " type='CocoDataset',\n", - " data_root='./ballondatasets/balloon',\n", - " ann_file='train/annotation_coco.json',\n", - " data_prefix=dict(img='train/'),\n", - " filter_cfg=dict(filter_empty_gt=True, min_size=32),\n", - " pipeline=[\n", - " dict(\n", - " type='LoadImageFromFile',\n", - " file_client_args=dict(backend='disk')),\n", - " dict(\n", - " type='LoadAnnotations',\n", - " with_bbox=True,\n", - " with_mask=True,\n", - " poly2mask=False),\n", - " dict(\n", - " type='RandomChoiceResize',\n", - " scales=[(1333, 640), (1333, 672), (1333, 704), (1333, 736),\n", - " (1333, 768), (1333, 800)],\n", - " keep_ratio=True),\n", - " dict(type='RandomFlip', prob=0.5),\n", - " dict(type='PackDetInputs')\n", - " ],\n", - " metainfo=dict(CLASSES=('balloon', ), PALETTE=[(220, 20, 60)])))\n", - "val_dataloader = dict(\n", - " batch_size=1,\n", - " num_workers=2,\n", - " persistent_workers=True,\n", - " drop_last=False,\n", - " sampler=dict(type='DefaultSampler', shuffle=False),\n", - " dataset=dict(\n", - " type='CocoDataset',\n", - " data_root='./ballondatasets/balloon',\n", - " ann_file='val/annotation_coco.json',\n", - " data_prefix=dict(img='val/'),\n", - " test_mode=True,\n", - " pipeline=[\n", - " dict(\n", - " type='LoadImageFromFile',\n", - " file_client_args=dict(backend='disk')),\n", - " dict(type='Resize', scale=(1333, 800), keep_ratio=True),\n", - " dict(type='LoadAnnotations', with_bbox=True, with_mask=True),\n", - " dict(\n", - " type='PackDetInputs',\n", - " meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',\n", - " 'scale_factor'))\n", - " ],\n", - " metainfo=dict(CLASSES=('balloon', ), PALETTE=[(220, 20, 60)])))\n", - "test_dataloader = dict(\n", - " batch_size=1,\n", - " num_workers=2,\n", - " persistent_workers=True,\n", - " drop_last=False,\n", - " sampler=dict(type='DefaultSampler', shuffle=False),\n", - " dataset=dict(\n", - " type='CocoDataset',\n", - " data_root='./ballondatasets/balloon',\n", - " ann_file='val/annotation_coco.json',\n", - " data_prefix=dict(img='val/'),\n", - " test_mode=True,\n", - " pipeline=[\n", - " dict(\n", - " type='LoadImageFromFile',\n", - " file_client_args=dict(backend='disk')),\n", - " dict(type='Resize', scale=(1333, 800), keep_ratio=True),\n", - " dict(type='LoadAnnotations', with_bbox=True, with_mask=True),\n", - " dict(\n", - " type='PackDetInputs',\n", - " meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',\n", - " 'scale_factor'))\n", - " ],\n", - " metainfo=dict(CLASSES=('balloon', ), PALETTE=[(220, 20, 60)])))\n", - "val_evaluator = dict(\n", - " type='CocoMetric',\n", - " ann_file='./ballondatasets/balloon/val/annotation_coco.json',\n", - " metric=['bbox', 'segm'],\n", - " format_only=False)\n", - "test_evaluator = dict(\n", - " type='CocoMetric',\n", - " ann_file='./ballondatasets/balloon/val/annotation_coco.json',\n", - " metric=['bbox', 'segm'],\n", - " format_only=False)\n", - "train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=12, val_interval=3)\n", - "val_cfg = dict(type='ValLoop')\n", - "test_cfg = dict(type='TestLoop')\n", - "param_scheduler = [\n", - " dict(\n", - " type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, end=500),\n", - " dict(\n", - " type='MultiStepLR',\n", - " begin=0,\n", - " end=12,\n", - " by_epoch=True,\n", - " milestones=[8, 11],\n", - " gamma=0.1)\n", - "]\n", - "optim_wrapper = dict(\n", - " type='OptimWrapper',\n", - " optimizer=dict(type='SGD', lr=0.0025, momentum=0.9, weight_decay=0.0001))\n", - "auto_scale_lr = dict(enable=False, base_batch_size=16)\n", - "default_scope = 'mmdet'\n", - "default_hooks = dict(\n", - " timer=dict(type='IterTimerHook'),\n", - " logger=dict(type='LoggerHook', interval=10),\n", - " param_scheduler=dict(type='ParamSchedulerHook'),\n", - " checkpoint=dict(type='CheckpointHook', interval=3),\n", - " sampler_seed=dict(type='DistSamplerSeedHook'),\n", - " visualization=dict(type='DetVisualizationHook'))\n", - "env_cfg = dict(\n", - " cudnn_benchmark=False,\n", - " mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0),\n", - " dist_cfg=dict(backend='nccl'))\n", - "vis_backends = [dict(type='LocalVisBackend')]\n", - "visualizer = dict(\n", - " type='DetLocalVisualizer',\n", - " vis_backends=[\n", - " dict(type='LocalVisBackend'),\n", - " dict(type='TensorboardVisBackend')\n", - " ],\n", - " name='visualizer')\n", - "log_processor = dict(type='LogProcessor', window_size=50, by_epoch=True)\n", - "log_level = 'INFO'\n", - "load_from = 'checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth'\n", - "resume = False\n", - "metainfo = dict(CLASSES=('balloon', ), PALETTE=[(220, 20, 60)])\n", - "work_dir = './tutorial_exps'\n", - "\n", - "Result has been saved to /home/sanbu/mmdetection3.x/mmdetection3/tutorial_exps/modules_statistic_results.json\n", - "11/23 10:45:06 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Distributed training is not used, all SyncBatchNorm (SyncBN) layers in the model will be automatically reverted to BatchNormXd layers if they are used.\n" - ] - } - ], - "source": [ - "from mmdet.datasets import build_dataset\n", - "from mmdet.models import build_detector\n", - "from mmengine.runner import Runner\n", - "\n", - "# build the runner from config\n", - "runner = Runner.from_cfg(cfg)" - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " ignored_instances: \n", + " pred_instances: \n", + ") at 0x79a3c999fc10>\n" + ] + } + ], + "source": [ + "# Use the detector to do inference\n", + "image = mmcv.imread('demo/demo.jpg',channel_order='rgb')\n", + "result = inference_detector(model, image)\n", + "print(result)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4pFVhKeQRYYS" + }, + "source": [ + "### Let's plot the result" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "YinmJV1dRYYT", + "outputId": "e6c9059f-55b3-481b-edef-b21befcbcf2e" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "loading annotations into memory...\n", - "Done (t=0.01s)\n", - "creating index...\n", - "index created!\n", - "loading annotations into memory...\n", - "Done (t=0.00s)\n", - "creating index...\n", - "index created!\n", - "loading annotations into memory...\n", - "Done (t=0.00s)\n", - "creating index...\n", - "index created!\n", - "11/04 09:53:22 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - load model from: open-mmlab://detectron2/resnet50_caffe\n", - "11/04 09:53:22 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - openmmlab loads checkpoint from path: open-mmlab://detectron2/resnet50_caffe\n", - "11/04 09:53:22 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - The model and loaded state dict do not match exactly\n", - "\n", - "unexpected key in source state_dict: conv1.bias\n", - "\n", - "local loads checkpoint from path: checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth\n", - "The model and loaded state dict do not match exactly\n", - "\n", - "size mismatch for roi_head.bbox_head.fc_cls.weight: copying a param with shape torch.Size([81, 1024]) from checkpoint, the shape in current model is torch.Size([2, 1024]).\n", - "size mismatch for roi_head.bbox_head.fc_cls.bias: copying a param with shape torch.Size([81]) from checkpoint, the shape in current model is torch.Size([2]).\n", - "size mismatch for roi_head.bbox_head.fc_reg.weight: copying a param with shape torch.Size([320, 1024]) from checkpoint, the shape in current model is torch.Size([4, 1024]).\n", - "size mismatch for roi_head.bbox_head.fc_reg.bias: copying a param with shape torch.Size([320]) from checkpoint, the shape in current model is torch.Size([4]).\n", - "size mismatch for roi_head.mask_head.conv_logits.weight: copying a param with shape torch.Size([80, 256, 1, 1]) from checkpoint, the shape in current model is torch.Size([1, 256, 1, 1]).\n", - "size mismatch for roi_head.mask_head.conv_logits.bias: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([1]).\n", - "11/04 09:53:23 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Load checkpoint from checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth\n", - "11/04 09:53:23 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Checkpoints will be saved to /home/sanbu/mmdetection3.x/mmdetection/tutorial_exps.\n", - "11/04 09:53:26 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [1][10/31] lr: 4.7545e-05 memory: 3365 data_time: 0.0250 loss: 14.0508 loss_rpn_cls: 0.1337 loss_rpn_bbox: 0.0135 loss_cls: 0.8340 acc: 29.5898 loss_bbox: 0.2582 loss_mask: 12.8114 time: 0.3857\n", - "11/04 09:53:29 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [1][20/31] lr: 9.7595e-05 memory: 3365 data_time: 0.0171 loss: 9.3286 loss_rpn_cls: 0.1047 loss_rpn_bbox: 0.0160 loss_cls: 0.7288 acc: 82.9102 loss_bbox: 0.2851 loss_mask: 8.1940 time: 0.2973\n", - "11/04 09:53:30 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [1][30/31] lr: 1.4765e-04 memory: 3367 data_time: 0.0125 loss: 6.6740 loss_rpn_cls: 0.1221 loss_rpn_bbox: 0.0173 loss_cls: 0.6059 acc: 94.7266 loss_bbox: 0.2559 loss_mask: 5.6728 time: 0.2623\n", - "11/04 09:53:31 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco_20221104_095316\n", - "11/04 09:53:33 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [2][10/31] lr: 2.0270e-04 memory: 3365 data_time: 0.0106 loss: 5.2092 loss_rpn_cls: 0.1266 loss_rpn_bbox: 0.0210 loss_cls: 0.5266 acc: 95.7031 loss_bbox: 0.2635 loss_mask: 4.2715 time: 0.2441\n", - "11/04 09:53:35 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [2][20/31] lr: 2.5275e-04 memory: 3365 data_time: 0.0052 loss: 4.1211 loss_rpn_cls: 0.1078 loss_rpn_bbox: 0.0194 loss_cls: 0.4638 acc: 95.8984 loss_bbox: 0.2648 loss_mask: 3.2653 time: 0.1960\n", - "11/04 09:53:36 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [2][30/31] lr: 3.0280e-04 memory: 3183 data_time: 0.0037 loss: 1.5987 loss_rpn_cls: 0.0902 loss_rpn_bbox: 0.0195 loss_cls: 0.3427 acc: 84.9609 loss_bbox: 0.2771 loss_mask: 0.8692 time: 0.1959\n", - "11/04 09:53:37 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco_20221104_095316\n", - "11/04 09:53:39 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [3][10/31] lr: 3.5786e-04 memory: 3143 data_time: 0.0040 loss: 0.9650 loss_rpn_cls: 0.0816 loss_rpn_bbox: 0.0182 loss_cls: 0.2597 acc: 95.8984 loss_bbox: 0.2766 loss_mask: 0.3288 time: 0.1931\n", - "11/04 09:53:41 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [3][20/31] lr: 4.0791e-04 memory: 3365 data_time: 0.0035 loss: 0.8676 loss_rpn_cls: 0.0514 loss_rpn_bbox: 0.0153 loss_cls: 0.2326 acc: 86.5234 loss_bbox: 0.3119 loss_mask: 0.2563 time: 0.1960\n", - "11/04 09:53:43 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [3][30/31] lr: 4.5796e-04 memory: 3365 data_time: 0.0035 loss: 0.7866 loss_rpn_cls: 0.0340 loss_rpn_bbox: 0.0134 loss_cls: 0.2125 acc: 80.8594 loss_bbox: 0.3319 loss_mask: 0.1948 time: 0.1969\n", - "11/04 09:53:43 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco_20221104_095316\n", - "11/04 09:53:43 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Saving checkpoint at 3 epochs\n", - "11/04 09:53:48 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(val) [3][10/13] memory: 3932 \n", - "11/04 09:53:49 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Evaluating bbox...\n", - "Loading and preparing results...\n", - "DONE (t=0.00s)\n", - "creating index...\n", - "index created!\n", - "Running per image evaluation...\n", - "Evaluate annotation type *bbox*\n", - "DONE (t=0.06s).\n", - "Accumulating evaluation results...\n", - "DONE (t=0.01s).\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.547\n", - " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.735\n", - " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.682\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.011\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.496\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.602\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.674\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.674\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.674\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.250\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.625\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.714\n", - "11/04 09:53:49 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - bbox_mAP_copypaste: 0.547 0.735 0.682 0.011 0.496 0.602\n", - "11/04 09:53:49 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Evaluating segm...\n", - "Loading and preparing results...\n", - "DONE (t=0.01s)\n", - "creating index...\n", - "index created!\n", - "Running per image evaluation...\n", - "Evaluate annotation type *segm*\n", - "DONE (t=0.07s).\n", - "Accumulating evaluation results...\n", - "DONE (t=0.01s).\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.631\n", - " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.734\n", - " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.730\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.022\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.563\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.691\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.792\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.792\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.792\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.600\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.750\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.817\n", - "11/04 09:53:49 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - segm_mAP_copypaste: 0.631 0.734 0.730 0.022 0.563 0.691\n", - "11/04 09:53:49 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(val) [3][13/13] coco/bbox_mAP: 0.5470 coco/bbox_mAP_50: 0.7350 coco/bbox_mAP_75: 0.6820 coco/bbox_mAP_s: 0.0110 coco/bbox_mAP_m: 0.4960 coco/bbox_mAP_l: 0.6020 coco/segm_mAP: 0.6310 coco/segm_mAP_50: 0.7340 coco/segm_mAP_75: 0.7300 coco/segm_mAP_s: 0.0220 coco/segm_mAP_m: 0.5630 coco/segm_mAP_l: 0.6910\n", - "11/04 09:53:51 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [4][10/31] lr: 5.1301e-04 memory: 3365 data_time: 0.0040 loss: 0.7791 loss_rpn_cls: 0.0324 loss_rpn_bbox: 0.0134 loss_cls: 0.2024 acc: 97.2656 loss_bbox: 0.3607 loss_mask: 0.1702 time: 0.1965\n", - "11/04 09:53:53 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [4][20/31] lr: 5.6306e-04 memory: 3345 data_time: 0.0036 loss: 0.7585 loss_rpn_cls: 0.0305 loss_rpn_bbox: 0.0136 loss_cls: 0.1872 acc: 99.2188 loss_bbox: 0.3721 loss_mask: 0.1552 time: 0.2002\n", - "11/04 09:53:55 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [4][30/31] lr: 6.1311e-04 memory: 3367 data_time: 0.0037 loss: 0.7116 loss_rpn_cls: 0.0260 loss_rpn_bbox: 0.0127 loss_cls: 0.1689 acc: 93.4570 loss_bbox: 0.3631 loss_mask: 0.1409 time: 0.2001\n", - "11/04 09:53:55 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco_20221104_095316\n", - "11/04 09:53:57 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [5][10/31] lr: 6.6817e-04 memory: 3365 data_time: 0.0045 loss: 0.6867 loss_rpn_cls: 0.0231 loss_rpn_bbox: 0.0143 loss_cls: 0.1581 acc: 93.7500 loss_bbox: 0.3642 loss_mask: 0.1270 time: 0.1991\n", - "11/04 09:53:59 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [5][20/31] lr: 7.1822e-04 memory: 3541 data_time: 0.0041 loss: 0.5979 loss_rpn_cls: 0.0193 loss_rpn_bbox: 0.0132 loss_cls: 0.1305 acc: 99.0234 loss_bbox: 0.3157 loss_mask: 0.1193 time: 0.1998\n", - "11/04 09:54:01 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [5][30/31] lr: 7.6827e-04 memory: 3366 data_time: 0.0040 loss: 0.5307 loss_rpn_cls: 0.0172 loss_rpn_bbox: 0.0129 loss_cls: 0.1162 acc: 94.6289 loss_bbox: 0.2745 loss_mask: 0.1099 time: 0.2006\n", - "11/04 09:54:01 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco_20221104_095316\n", - "11/04 09:54:04 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [6][10/31] lr: 8.2332e-04 memory: 3541 data_time: 0.0045 loss: 0.4656 loss_rpn_cls: 0.0151 loss_rpn_bbox: 0.0122 loss_cls: 0.1042 acc: 98.4375 loss_bbox: 0.2295 loss_mask: 0.1046 time: 0.2012\n", - "11/04 09:54:05 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [6][20/31] lr: 8.7337e-04 memory: 3365 data_time: 0.0035 loss: 0.3887 loss_rpn_cls: 0.0132 loss_rpn_bbox: 0.0101 loss_cls: 0.0865 acc: 98.2422 loss_bbox: 0.1784 loss_mask: 0.1004 time: 0.1981\n", - "11/04 09:54:07 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [6][30/31] lr: 9.2342e-04 memory: 3524 data_time: 0.0035 loss: 0.3397 loss_rpn_cls: 0.0126 loss_rpn_bbox: 0.0094 loss_cls: 0.0800 acc: 94.8242 loss_bbox: 0.1421 loss_mask: 0.0957 time: 0.1982\n", - "11/04 09:54:08 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco_20221104_095316\n", - "11/04 09:54:08 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Saving checkpoint at 6 epochs\n", - "11/04 09:54:10 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(val) [6][10/13] memory: 2361 \n", - "11/04 09:54:10 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Evaluating bbox...\n", - "Loading and preparing results...\n", - "DONE (t=0.00s)\n", - "creating index...\n", - "index created!\n", - "Running per image evaluation...\n", - "Evaluate annotation type *bbox*\n", - "DONE (t=0.02s).\n", - "Accumulating evaluation results...\n", - "DONE (t=0.01s).\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.743\n", - " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.877\n", - " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.837\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.067\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.672\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.797\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.786\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.786\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.786\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.200\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.742\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.833\n", - "11/04 09:54:10 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - bbox_mAP_copypaste: 0.743 0.877 0.837 0.067 0.672 0.797\n", - "11/04 09:54:10 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Evaluating segm...\n", - "Loading and preparing results...\n", - "DONE (t=0.00s)\n", - "creating index...\n", - "index created!\n", - "Running per image evaluation...\n", - "Evaluate annotation type *segm*\n", - "DONE (t=0.02s).\n", - "Accumulating evaluation results...\n", - "DONE (t=0.01s).\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.788\n", - " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.858\n", - " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.858\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.050\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.673\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.846\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.828\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.828\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.828\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.350\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.783\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.869\n", - "11/04 09:54:10 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - segm_mAP_copypaste: 0.788 0.858 0.858 0.050 0.673 0.846\n", - "11/04 09:54:10 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(val) [6][13/13] coco/bbox_mAP: 0.7430 coco/bbox_mAP_50: 0.8770 coco/bbox_mAP_75: 0.8370 coco/bbox_mAP_s: 0.0670 coco/bbox_mAP_m: 0.6720 coco/bbox_mAP_l: 0.7970 coco/segm_mAP: 0.7880 coco/segm_mAP_50: 0.8580 coco/segm_mAP_75: 0.8580 coco/segm_mAP_s: 0.0500 coco/segm_mAP_m: 0.6730 coco/segm_mAP_l: 0.8460\n", - "11/04 09:54:12 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [7][10/31] lr: 9.7848e-04 memory: 3367 data_time: 0.0042 loss: 0.3144 loss_rpn_cls: 0.0118 loss_rpn_bbox: 0.0090 loss_cls: 0.0772 acc: 98.8281 loss_bbox: 0.1217 loss_mask: 0.0947 time: 0.1963\n", - "11/04 09:54:14 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [7][20/31] lr: 1.0285e-03 memory: 3366 data_time: 0.0037 loss: 0.3031 loss_rpn_cls: 0.0093 loss_rpn_bbox: 0.0091 loss_cls: 0.0761 acc: 98.9258 loss_bbox: 0.1127 loss_mask: 0.0958 time: 0.1968\n", - "11/04 09:54:16 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [7][30/31] lr: 1.0786e-03 memory: 3367 data_time: 0.0037 loss: 0.2942 loss_rpn_cls: 0.0092 loss_rpn_bbox: 0.0095 loss_cls: 0.0720 acc: 98.9258 loss_bbox: 0.1051 loss_mask: 0.0984 time: 0.1959\n", - "11/04 09:54:17 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco_20221104_095316\n", - "11/04 09:54:19 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [8][10/31] lr: 1.1336e-03 memory: 3365 data_time: 0.0050 loss: 0.2925 loss_rpn_cls: 0.0090 loss_rpn_bbox: 0.0100 loss_cls: 0.0724 acc: 99.0234 loss_bbox: 0.1047 loss_mask: 0.0963 time: 0.1991\n", - "11/04 09:54:21 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [8][20/31] lr: 1.1837e-03 memory: 3365 data_time: 0.0044 loss: 0.2771 loss_rpn_cls: 0.0078 loss_rpn_bbox: 0.0095 loss_cls: 0.0688 acc: 97.9492 loss_bbox: 0.0963 loss_mask: 0.0946 time: 0.2001\n", - "11/04 09:54:23 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [8][30/31] lr: 1.2337e-03 memory: 3182 data_time: 0.0044 loss: 0.2633 loss_rpn_cls: 0.0071 loss_rpn_bbox: 0.0097 loss_cls: 0.0650 acc: 98.2422 loss_bbox: 0.0919 loss_mask: 0.0896 time: 0.2004\n", - "11/04 09:54:23 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco_20221104_095316\n", - "11/04 09:54:25 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [9][10/31] lr: 1.2888e-04 memory: 3367 data_time: 0.0055 loss: 0.2546 loss_rpn_cls: 0.0069 loss_rpn_bbox: 0.0095 loss_cls: 0.0635 acc: 97.0703 loss_bbox: 0.0876 loss_mask: 0.0872 time: 0.2001\n", - "11/04 09:54:27 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [9][20/31] lr: 1.3388e-04 memory: 3345 data_time: 0.0041 loss: 0.2377 loss_rpn_cls: 0.0055 loss_rpn_bbox: 0.0090 loss_cls: 0.0601 acc: 97.7539 loss_bbox: 0.0824 loss_mask: 0.0808 time: 0.1994\n", - "11/04 09:54:29 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [9][30/31] lr: 1.3889e-04 memory: 3423 data_time: 0.0042 loss: 0.2358 loss_rpn_cls: 0.0062 loss_rpn_bbox: 0.0097 loss_cls: 0.0603 acc: 99.1211 loss_bbox: 0.0810 loss_mask: 0.0787 time: 0.2002\n", - "11/04 09:54:29 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco_20221104_095316\n", - "11/04 09:54:29 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Saving checkpoint at 9 epochs\n", - "11/04 09:54:31 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(val) [9][10/13] memory: 1681 \n", - "11/04 09:54:31 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Evaluating bbox...\n", - "Loading and preparing results...\n", - "DONE (t=0.00s)\n", - "creating index...\n", - "index created!\n", - "Running per image evaluation...\n", - "Evaluate annotation type *bbox*\n", - "DONE (t=0.01s).\n", - "Accumulating evaluation results...\n", - "DONE (t=0.01s).\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.764\n", - " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.879\n", - " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.845\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.202\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.645\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.821\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.808\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.808\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.808\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.400\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.750\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.850\n", - "11/04 09:54:31 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - bbox_mAP_copypaste: 0.764 0.879 0.845 0.202 0.645 0.821\n", - "11/04 09:54:31 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Evaluating segm...\n", - "Loading and preparing results...\n", - "DONE (t=0.00s)\n", - "creating index...\n", - "index created!\n", - "Running per image evaluation...\n", - "Evaluate annotation type *segm*\n", - "DONE (t=0.02s).\n", - "Accumulating evaluation results...\n", - "DONE (t=0.01s).\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.795\n", - " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.861\n", - " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.861\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.118\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.664\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.852\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.834\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.834\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.834\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.350\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.792\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.875\n", - "11/04 09:54:31 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - segm_mAP_copypaste: 0.795 0.861 0.861 0.118 0.664 0.852\n", - "11/04 09:54:31 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(val) [9][13/13] coco/bbox_mAP: 0.7640 coco/bbox_mAP_50: 0.8790 coco/bbox_mAP_75: 0.8450 coco/bbox_mAP_s: 0.2020 coco/bbox_mAP_m: 0.6450 coco/bbox_mAP_l: 0.8210 coco/segm_mAP: 0.7950 coco/segm_mAP_50: 0.8610 coco/segm_mAP_75: 0.8610 coco/segm_mAP_s: 0.1180 coco/segm_mAP_m: 0.6640 coco/segm_mAP_l: 0.8520\n", - "11/04 09:54:33 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [10][10/31] lr: 1.4439e-04 memory: 3366 data_time: 0.0050 loss: 0.2297 loss_rpn_cls: 0.0055 loss_rpn_bbox: 0.0094 loss_cls: 0.0580 acc: 98.5352 loss_bbox: 0.0791 loss_mask: 0.0777 time: 0.1991\n", - "11/04 09:54:36 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [10][20/31] lr: 1.4940e-04 memory: 3366 data_time: 0.0038 loss: 0.2331 loss_rpn_cls: 0.0056 loss_rpn_bbox: 0.0095 loss_cls: 0.0586 acc: 99.7070 loss_bbox: 0.0800 loss_mask: 0.0795 time: 0.2006\n", - "11/04 09:54:37 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [10][30/31] lr: 1.5440e-04 memory: 3366 data_time: 0.0039 loss: 0.2143 loss_rpn_cls: 0.0057 loss_rpn_bbox: 0.0086 loss_cls: 0.0540 acc: 98.9258 loss_bbox: 0.0724 loss_mask: 0.0736 time: 0.1982\n", - "11/04 09:54:38 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco_20221104_095316\n", - "11/04 09:54:40 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [11][10/31] lr: 1.5991e-04 memory: 3534 data_time: 0.0043 loss: 0.2142 loss_rpn_cls: 0.0060 loss_rpn_bbox: 0.0080 loss_cls: 0.0562 acc: 99.4141 loss_bbox: 0.0723 loss_mask: 0.0716 time: 0.1963\n", - "11/04 09:54:42 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [11][20/31] lr: 1.6491e-04 memory: 3366 data_time: 0.0035 loss: 0.2125 loss_rpn_cls: 0.0050 loss_rpn_bbox: 0.0070 loss_cls: 0.0567 acc: 94.1406 loss_bbox: 0.0720 loss_mask: 0.0718 time: 0.1956\n", - "11/04 09:54:44 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [11][30/31] lr: 1.6992e-04 memory: 3541 data_time: 0.0035 loss: 0.2068 loss_rpn_cls: 0.0055 loss_rpn_bbox: 0.0073 loss_cls: 0.0554 acc: 96.8750 loss_bbox: 0.0695 loss_mask: 0.0691 time: 0.1975\n", - "11/04 09:54:44 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco_20221104_095316\n", - "11/04 09:54:46 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [12][10/31] lr: 1.7543e-05 memory: 3182 data_time: 0.0040 loss: 0.1914 loss_rpn_cls: 0.0053 loss_rpn_bbox: 0.0063 loss_cls: 0.0518 acc: 94.4336 loss_bbox: 0.0641 loss_mask: 0.0638 time: 0.1957\n", - "11/04 09:54:48 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [12][20/31] lr: 1.8043e-05 memory: 3183 data_time: 0.0035 loss: 0.1919 loss_rpn_cls: 0.0052 loss_rpn_bbox: 0.0061 loss_cls: 0.0521 acc: 98.6328 loss_bbox: 0.0647 loss_mask: 0.0638 time: 0.1974\n", - "11/04 09:54:50 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(train) [12][30/31] lr: 1.8544e-05 memory: 3367 data_time: 0.0035 loss: 0.2058 loss_rpn_cls: 0.0055 loss_rpn_bbox: 0.0074 loss_cls: 0.0530 acc: 98.7305 loss_bbox: 0.0692 loss_mask: 0.0707 time: 0.1979\n", - "11/04 09:54:50 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco_20221104_095316\n", - "11/04 09:54:50 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Saving checkpoint at 12 epochs\n", - "11/04 09:54:52 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(val) [12][10/13] memory: 1803 \n", - "11/04 09:54:52 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Evaluating bbox...\n", - "Loading and preparing results...\n", - "DONE (t=0.00s)\n", - "creating index...\n", - "index created!\n", - "Running per image evaluation...\n", - "Evaluate annotation type *bbox*\n", - "DONE (t=0.01s).\n", - "Accumulating evaluation results...\n", - "DONE (t=0.01s).\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.775\n", - " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.879\n", - " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.853\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.126\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.635\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.841\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.812\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.812\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.812\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.250\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.742\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.867\n", - "11/04 09:54:52 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - bbox_mAP_copypaste: 0.775 0.879 0.853 0.126 0.635 0.841\n", - "11/04 09:54:52 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Evaluating segm...\n", - "Loading and preparing results...\n", - "DONE (t=0.00s)\n", - "creating index...\n", - "index created!\n", - "Running per image evaluation...\n", - "Evaluate annotation type *segm*\n", - "DONE (t=0.02s).\n", - "Accumulating evaluation results...\n", - "DONE (t=0.01s).\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.791\n", - " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.861\n", - " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.861\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.088\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.661\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.846\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.830\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.830\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.830\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.350\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.792\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.869\n", - "11/04 09:54:52 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - segm_mAP_copypaste: 0.791 0.861 0.861 0.088 0.661 0.846\n", - "11/04 09:54:52 - mmengine - \u001b[4m\u001b[37mINFO\u001b[0m - Epoch(val) [12][13/13] coco/bbox_mAP: 0.7750 coco/bbox_mAP_50: 0.8790 coco/bbox_mAP_75: 0.8530 coco/bbox_mAP_s: 0.1260 coco/bbox_mAP_m: 0.6350 coco/bbox_mAP_l: 0.8410 coco/segm_mAP: 0.7910 coco/segm_mAP_50: 0.8610 coco/segm_mAP_75: 0.8610 coco/segm_mAP_s: 0.0880 coco/segm_mAP_m: 0.6610 coco/segm_mAP_l: 0.8460\n" - ] - }, - { - "data": { - "text/plain": [ - "MaskRCNN(\n", - " (data_preprocessor): DetDataPreprocessor()\n", - " (backbone): ResNet(\n", - " (conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", - " (layer1): ResLayer(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (layer2): ResLayer(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (layer3): ResLayer(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (4): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (5): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (layer4): ResLayer(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " )\n", - " init_cfg={'type': 'Pretrained', 'checkpoint': 'open-mmlab://detectron2/resnet50_caffe'}\n", - " (neck): FPN(\n", - " (lateral_convs): ModuleList(\n", - " (0): ConvModule(\n", - " (conv): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))\n", - " )\n", - " (1): ConvModule(\n", - " (conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))\n", - " )\n", - " (2): ConvModule(\n", - " (conv): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1))\n", - " )\n", - " (3): ConvModule(\n", - " (conv): Conv2d(2048, 256, kernel_size=(1, 1), stride=(1, 1))\n", - " )\n", - " )\n", - " (fpn_convs): ModuleList(\n", - " (0): ConvModule(\n", - " (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", - " )\n", - " (1): ConvModule(\n", - " (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", - " )\n", - " (2): ConvModule(\n", - " (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", - " )\n", - " (3): ConvModule(\n", - " (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", - " )\n", - " )\n", - " )\n", - " init_cfg={'type': 'Xavier', 'layer': 'Conv2d', 'distribution': 'uniform'}\n", - " (rpn_head): RPNHead(\n", - " (loss_cls): CrossEntropyLoss(avg_non_ignore=False)\n", - " (loss_bbox): L1Loss()\n", - " (rpn_conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", - " (rpn_cls): Conv2d(256, 3, kernel_size=(1, 1), stride=(1, 1))\n", - " (rpn_reg): Conv2d(256, 12, kernel_size=(1, 1), stride=(1, 1))\n", - " )\n", - " init_cfg={'type': 'Normal', 'layer': 'Conv2d', 'std': 0.01}\n", - " (roi_head): StandardRoIHead(\n", - " (bbox_roi_extractor): SingleRoIExtractor(\n", - " (roi_layers): ModuleList(\n", - " (0): RoIAlign(output_size=(7, 7), spatial_scale=0.25, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n", - " (1): RoIAlign(output_size=(7, 7), spatial_scale=0.125, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n", - " (2): RoIAlign(output_size=(7, 7), spatial_scale=0.0625, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n", - " (3): RoIAlign(output_size=(7, 7), spatial_scale=0.03125, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n", - " )\n", - " )\n", - " (bbox_head): Shared2FCBBoxHead(\n", - " (loss_cls): CrossEntropyLoss(avg_non_ignore=False)\n", - " (loss_bbox): L1Loss()\n", - " (fc_cls): Linear(in_features=1024, out_features=2, bias=True)\n", - " (fc_reg): Linear(in_features=1024, out_features=4, bias=True)\n", - " (shared_convs): ModuleList()\n", - " (shared_fcs): ModuleList(\n", - " (0): Linear(in_features=12544, out_features=1024, bias=True)\n", - " (1): Linear(in_features=1024, out_features=1024, bias=True)\n", - " )\n", - " (cls_convs): ModuleList()\n", - " (cls_fcs): ModuleList()\n", - " (reg_convs): ModuleList()\n", - " (reg_fcs): ModuleList()\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " init_cfg=[{'type': 'Normal', 'std': 0.01, 'override': {'name': 'fc_cls'}}, {'type': 'Normal', 'std': 0.001, 'override': {'name': 'fc_reg'}}, {'type': 'Xavier', 'distribution': 'uniform', 'override': [{'name': 'shared_fcs'}, {'name': 'cls_fcs'}, {'name': 'reg_fcs'}]}]\n", - " (mask_roi_extractor): SingleRoIExtractor(\n", - " (roi_layers): ModuleList(\n", - " (0): RoIAlign(output_size=(14, 14), spatial_scale=0.25, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n", - " (1): RoIAlign(output_size=(14, 14), spatial_scale=0.125, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n", - " (2): RoIAlign(output_size=(14, 14), spatial_scale=0.0625, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n", - " (3): RoIAlign(output_size=(14, 14), spatial_scale=0.03125, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n", - " )\n", - " )\n", - " (mask_head): FCNMaskHead(\n", - " (loss_mask): CrossEntropyLoss(avg_non_ignore=False)\n", - " (convs): ModuleList(\n", - " (0): ConvModule(\n", - " (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", - " (activate): ReLU(inplace=True)\n", - " )\n", - " (1): ConvModule(\n", - " (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", - " (activate): ReLU(inplace=True)\n", - " )\n", - " (2): ConvModule(\n", - " (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", - " (activate): ReLU(inplace=True)\n", - " )\n", - " (3): ConvModule(\n", - " (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", - " (activate): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (upsample): ConvTranspose2d(256, 256, kernel_size=(2, 2), stride=(2, 2))\n", - " (conv_logits): Conv2d(256, 1, kernel_size=(1, 1), stride=(1, 1))\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - ")" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# start training\n", - "runner.train()" - ] + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.10/dist-packages/mmengine/visualization/visualizer.py:196: UserWarning: Failed to add , please provide the `save_dir` argument.\n", + " warnings.warn(f'Failed to add {vis_backend.__class__}, '\n" + ] + } + ], + "source": [ + "from mmdet.registry import VISUALIZERS\n", + "# init visualizer(run the block only once in jupyter notebook)\n", + "visualizer = VISUALIZERS.build(model.cfg.visualizer)\n", + "# the dataset_meta is loaded from the checkpoint and\n", + "# then pass to the model in init_detector\n", + "visualizer.dataset_meta = model.dataset_meta" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 464 }, + "id": "z6qT6pG1RYYT", + "outputId": "089b652b-061f-480d-f9de-ffa06b7d385a" + }, + "outputs": [ { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "_vYQF5K2NqqI" - }, - "source": [ - "### Understand the log\n", - "From the log, we can have a basic understanding on the training process and know how well the detector is trained.\n", - "\n", - "First, since the dataset we are using is small, we loaded a Mask R-CNN model and finetune it for detection. Because the original Mask R-CNN is trained on COCO dataset that contains 80 classes but KITTI Tiny dataset only have 3 classes. Therefore, the last FC layers of the pre-trained Mask R-CNN for classification and regression have different weight shape and are not used. The pre-trained weights of mask prediction layer `mask_head.conv_logits` also does not matches the current model and is not used due to similar reason.\n", - "\n", - "Third, after training, the detector is evaluated by the default COCO-style evaluation. The results show that the detector achieves 79.6 bbox AP and 81.5 mask AP on the val dataset, not bad!\n", - "\n", - " We can also check the tensorboard to see the curves." + "data": { + "image/png": "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q6++wne/+z323ntvVq5cievGrhnJZIJisRxnt7QYkRYC/CAkjJgU4O6angZoa2ujt7cXpRQ9PT1s2xYHlLG/tV579uqBczxYc7kcf/rTn8jn83R3d3PFFVfw17/+lUWLFvHBDx7PD374Q1zHJZlMMXNmDzuvQf+qve+A0vVj3kfV9WJF7r9ijk4JGkOE8OPdazSBRNY5lMcc/UE+/vFTCcKAe+/5K48++igf/ODRHH98rCyaN28ev/jFz3nmmWcbnTJr1gzOP//8hqXNxRdfzMjIMFL2kkzGSryqU8I0NQJfUiq6fPr0kzjuhP14+vF3KJZ3cMgH9kUa7RTLHmYiw6lfWsCmt/L85aZ/kExZfPq042mePsyyp2dzxx8m4OXOPVro3tfkoI8sZGRsnGoJypXY7xERIyKu40AkiHw/VmULnVALiMIA3QLHd5BYVDwH29BJJHQKbgkV1wxAjyRWwkATsepPavECZBgGUkqSySSO4+AGcSpYKIiiMpomKRaLRKZNEAowFIYeYZsa6ebplMoO0tcYGagyMtpPNl1gW98YTa0ZnJKDUgojbcQTp4q96aKYh4Ch23hOMabehRpSajHHR4Xouo20JH++9R/kx0+ipzvH9HktDIwWqQoPU9fxRYiyNEpBlcj10XULHx8vdAl8EHVTeh0MFH4ULzi6YcaorKdQmkDqEEQhbuQSYjfuS11+0t09jTVr3qm9FidxjzrqaI499liEEHR2dpJMpDAMg61bt9LT04Oq2ygArhdiWxpKwejoGB/60L9hmibnnnsumUyGKIrYvn07f//7gySTCa699lreeustmpqaGB8f59e//jXNzc1cdtlljbT4ZPuab/7nNzju2GP52/33M62rk7HREb7xn/9Jb28fv7nictatXc9rr71OS0uOXDbLeH58yqOVLxTI54v0Dwxz9NGLefzx5xtQvtAFaHpsOO164Pu18SEII4VmaGimQVBfzIVE0zVMXSMIPVQUB3RC1hceP06TGyamGdudmMk0YajYPlziinse4K7nX+aTRx7G0fvFu11N08AOufDCxVN2+0OjJS659HdTvsuNt97FjbfeVb+BIOD6m/5CHKjE5y694spdppdb/nI3t/zlbmKysQAl+Ou9j/HXex+DRr3tGGle+ss/YtkWba1JHvvHw3F6vTPXeK+kYWLq2k7ZkKlzWzJpkErpRO8y5Q0NVTj33P0mUrQ1Cvba58coVTRm7zZj15P+RduwfoxUwmBGT45iyW0sBuWyRxBEqKguPAQVKQKv5m3ng1utvUltfhXCIghCpExSrcQc6SgyKI7rkzb2O8NXauqbINB1AyE7qFQ6MBKDRE7NDiVSje8d84vj393QRdboIFNbjLwZhta4v0EQIIWMa2gjaoFbnU4SB9KxYjyeb+prx5e/fgY//P7PcapVfnX5hXzvmxdz7x0P8fRTMc3hZz/7Ces3rKV72gzGhsqMFgfZuHE9l10W+4h++tOnsueee7FixUq++tWfNL7/jTfex4033jflqq+77p4pv08JJmvtllvu55Zb7p/y2sDACOec87Ndjq2ff/3193D99ffs8neITeINw0TTLXzfIwwngovWVptsNlbznn7GGXR3d+O4Lj/48S/4tw9+gJM/fAKpZJLb7r6PJ595nrPPOI3u7i6ac1mu+sONnHrKh1l6xe+nfJ6maZTKZXwvVvDnsk1M757G2vUbkUKyfuNm9tlrT5585nlcz6d3cBTHTfP1rx7HE088xYIFe5BOWPzi8p/xhS88SWtrgr7eWGjpGdCSMoh8n2JR4PtFMpkMbe0t9G0b4LVl72DbOV5f/iqbt2zEyqXJFwbJ9w9w8ukfoVgaRIs0tJRg5gyfx1/r5+3NM+lsyxK5Ops2PoWUkvmmaDzHy5YNIETMLzz99M8wc+Z0SqUiS5cuZcmSQznqqKNIpZLcdtttPPXUU3ziE5+gp6eHrq4urrzySj75yU9y5ZVXMTgYQ639/UNIKTn22A/wxBNPYtsWSkVMnzGdjRs20tKaY+PGjSxcuBcvvfQiW7f20tHeSl9fX81BQJBKJeP1OVJ897vfZMGCPQjDiPPP/yGHHnYMH/3I8aRSCe644wEef/xFzv7Sx5k2rYPm5iw/+MH3aG7OcsYZZ7D77rsRBD4/+tGPOOqoozj00ENr2bfHuP322/n85z/P3LlzSaVS3HnnnZxxxhksXXpp4167rtsQTFq2TW9vH1JKZsyYTaFQ5NeXXcaOHTu49NLL2bq1D3j/2YP/FYfyqWe2xd5KIhaFyJpxp1dTtmk1t+c6h0EIyGazJFMJxsaGyWRyDA31x28WZ2s57bTT+MY3zyHwA/77t1fyxBOP89e/3stf/3ovtm1z0003s2zZsinI5pFHHsmzzz7Lrbfeynnnncehhx7KA39/AMMyCTyfarWCZVsIoXAch/O//0PO/ca5jI+V+PnSdl5/81XWvDlMV08bm3t7qUZDtHd2ce8fX2TJ4TMwjSTX/e4+vnT+Maxet4Moam2kvA46ZA+euOMe9tyvi0TCpKR5mLkSujIIQgdPAHaEJi0SmkkUVGPlXyKNCEJCpdBtDSfwyDY3ETglql6BRCqDpiXQ9RQiaCKVtNHQ8FwfQ9dBuY20t5QS27KIfB/CGLk09RRuUCCUY7T2TCPwdfIVj6HhCmP9BcqjWxjpH8Ut6xQL4wiVREgPFYSksgamEy8GnleuiUoiRE0NpZQiDBwsWwMCbMukWg1QIkDoYJiSppTEdzPce/+z6IbP8R9aTGtPC4lUE04QUAkdCm6BUK9g6hI/KDeI3AITSazMityo9tn1oMJBSYFQsbddoRwjcJ7nUXAVip7GuFDA2nXrOPKII3ltxQpQ8Q70lFNO4Ze//CVRFPHb3/6W6dOnYxgmUtMbqSIBDIwW8B2Nnmkxuu55HtlsE8uWLY9RWtcjnU6z77778alPfTIOTnp66O3tpVAokM/nG/3ViD12guR/+9//zVVXX82111zDX++7j74dO+js6MDzPZYvf4XZc2bx2muvx8GoPnVBnmyhUy5XcJ0aR6omrvHLbkyBkBNYjqDujKAIVYx2xKpXFRcO8D1sYSGIK6aYhk4QxpSMwA9wPZdEMomhmSgR22/puo4TKoQfsWZTL7/qv4/bn3iGTxx5GCccejAJM8l++7cyPOzgjgT0DRYolKvvus9thDGiHsJMJj7/ixYJpijw3qO1tibo7EghZTwvadrUc7o6UxSLLqXyewsZvELIeGHXS5rskzmRGo2/x5FHzODII/7Hy3vX9tzz29i4dkJUtGHDOJs25alUfEZGKjXbqbpvarwxaNg2TZIQxL/XX5/43o0h+R5BtAJif8b42CCQSGniOQamcokwYsFcLa0dRREqEqhaUKgL8Px3789vfverzNttFkEQ8pMLLuWQJQdw0snHk0wluev2+3n6iRc58+xP0t3dRa45yx+vupmTP/5vXLH06kn8gzgAKk9SVWdzTYwMjVAuuRy0eBG9fX14bowuNren0IxpZHITG9AoUmzb9m5VayZTpnZ+7d3+9l7t3Y57t9zzu5wp42yDEAI/CIkiQYzigG1rdHTECPt+++1LperxpXO/2xAMPv3cizz25DMkEgmuuuKXPPXsCyBgcHCYn1/6W6Io4tLfTGzSRG0h9n2f1pbmWFQ0ZxbpVIpNW7ay/76LeOGl5Ry4/z4MDQ9PAZJmzJrNm6vXMlrLlNS/4tln7s0frnoLyzZwXEEYVDA9Ey90yNntOOEo1aLP2yuGkFpIukmnsyXNO/98nKDaQcoEETjoTQkymRkEIkfC8DDQWTjPYsU/32LjO8+y2gkxydDT2cbg9j6U5zSu79BDO/n73zWOOuoglFIsXfprNmxYSzbbxJNPPs3tt99NMmlxzTVXsXz5crLZLJVKhd/85jds3bqVq6++GseZykE98cQTePLJp9H1eLM6ODDM0NAgHzj2aF577VX23XdfCoU85XK8sytXqqxcuYqf/vTHnH3251m3bh1btmwhnU6jlOL73/8Bvu9TKpV56qkXeezR50gkba78/c944omX4s8YHOFnP7sS8Nh99z1QSnHOOecRRbETy7Jly7jnnnswDINrr7228fPIyAgXX3wxra2tLF++vGF7FQQBrusybVo33/72t1i8eDF31kiVLS05crksP//FL1iyeAmnnvoxbrnlVizL5v22/1VA+eLLO0DF0Oy3v/El5s6ZSRiGXPDjy1iy+ABO/nAcYf/9ocd4a9UKTjn5o+RyTZimwbV/uJp///dTufTSpVPWWE2TONUaOmboNDe3MDwcGzTvv/8BbNy4Ecd1azvu+Jz169dz4IEHMmfOHLLZLAODA6CgXC6TTqYayKVlGey223y++tWvk8u2MZw3Of3TX+QT//5ZIA7EXNdhxVvP8ud7/kxnG/QN9ZFpm84+R3TwxDOvMjQ6E6UWNjigb67qY8beiocfehWZS6KSZayghbYWg2Q6gZIKIXUKpQKpTBNKKUzTQhQ8LEOjmC8yXqogzQRRNIYMHBbuPpuh0VF0zSaV0lGuz8jwGEnbRiqT0InAoEEyHx8fxzJNgiDAEBLbMMEUpDLNVPIWm9/02bFllL6tQ4yNFkkqC80KsRMGCSlpbm7BixSRLlBRkpAxbFOvpT8FlpVoBC/1+t4qMlD4CBkRBtDW1kPFGycIyxi6RehoRFZAZ5sFUrL8hddIZRMcdfTHiaoO7elO+jYOMjS+iVQqjVJxlZekqSFDjVAvo2lGXGElkDEqKSIi5SE00fD3VDXSv65pFAvepAkuhq9feP55lixewgU/vAClFJdddhmvvvoqF110EVu2bKVcrhAhpqylxXKFs846k19e+juUa2FbGq0tSbLZJgqFAosXH8IjjzyC75fIZNJ85Stf5ic/+QmDg4PcdtttzJgxg3Q6zejoKEGNlmDoOl5NRNXV1UX/4GDsoRr4+L5PGAR0tLXR0tzMlq1bEUKw22678fzzzzNzZjdKKfp2xJuvrs5OAHLZLJnabjeXa4rTutRSGlJAFCGUQIWKmJuvQMZRh1AqFhCFAYauE9X8PaWQuI6D1OtuBNGUeC7wXLBtNCkpey6GkcBxAkJCdCmwLRsixZaRcW569Fk29Q9y7sc/BkBbWzwR5ZqSIOMyrXWSe+O+TQ6+600oRE1c0NA91Ba++s6anYKkd2utrQm6p6XRJwXmMQF9ghO0cdPou5qnv1t76pnNPP/itsbvhy2ZznHHxOX5nnxqK88/38thR3Ry/HGz3yMe/p+DESHePRh97vltPPnoNjZvNhgfzzM8MkYQhPieh2UnacmlMfWaH6gShCrENA0Gh8qk0ilSCYN80WF8vEh7WzuaRs0pYyIQboRLKkb8g0AwNq5ASHTdwA8rpI0UFdeLx4uqp8YFQsSIpBACqWIxo7NTFuuQxQeglOI/z7mAqCYee/apF3nisWdJJBL89qpLePbJ+kI6zNKf/z9EYcQVv7p6l+70fJ+W1ixRpJgzdxbpdILhQYXnBuyzz7489vBzlAoOqaaYk9zcmgQEi5cs5t/+7UQ2b97E+Pg4ddS0nnsXO80NMa9UTvRNgw5Qc0jYSTY0IZBQU2NQNfX+N54xMfEe9UOlMHGrzqSxD0HgoFQK255Yslta23l5+euNuVopWHzQAZz2iX9Hoejpntb4sNVr103QB9RkWkN846/4/bX88Hv/SbFYYsPGzQyPjnHTrXdy/rfP5eQPn0j/wCAjY+NTnp1Pf/wUlv7m9+w+by6Vqge1eejIw6dz45/fxLI1qhWFIW2GgwFsXUMLB5EyBiz8qEg6naJU9di0dYRkUzdlmccJIvBNDNvgpuvuwEhCay7NcNXg4x89jg/vL3j8lZeZOTtDVA4IKhWyrTk2bh+veVcrjjuuh1/9yqC7u4s1a9ZOjBvP58gjj+LEE09ACOjp6SGbzVIoFFi3bt17Zl6llBx/3Ac4//wfcuK/nQgIXNfjyt9fw/n/9T2OPz5OhQ8MDGJbJsUi2LbFGWeczqWXXsaqVav4xje+weLFi3nnnXdYseINUqkEO3YUUUqxZPH+nHbaySgFPT1d9RHC22+vb1zD7NmzWLHijYmxKQRz5szh/PPPB6CjowPP87AsixUrVjTocaqmK6n7pjY3N9Pf38/FF1/M9OnTueSSS3jkkUeoVqusXLkS0zB4/fXXOe20z6AUZDK72h69V/vfq7wFHHn4IURhxNfO+2Hjiz3z3Ms8+fSLcfD4u5/z1qrY72lsbIzLr1haW9ynBpNKQaVSYc8998ZzXXp6ppNIJBp//8AHPsCjjz7S4NnUP3/Hjh0sXryYxYsXU61WWb9uotOL5TJC1UUscOTRx9LS2sq6LXkEgq07XKh5fMVf3+L4oz7FoQd+mJWbV3H/AzexfNlDtLR0U6lWabXSbJ/08YVKmd326kK4wzj5ErpvEdhlBneEGIZNVK1SKlZwZAAlGM9LsumIQEFLa4rQCDEdqFYCTNOkjM+OjTvQwgQJ6eAqA8IM06ZJLDMkiDyMUoCZMsh7guaEiQozBME4ensSoXwcJKbjobUmWP7CSqJRF7OtibSdIZtLkhQBMgyo2gbVsEA65TCvezf6tw/jVFw03USzLWxdoukhpbxP1Q/xowStLVAuga4lISow6ivwqwTKwdM1tChChR4kJboKiDQd8OnosAn0NI4vMXwXpGJkpMDIYIGqWUaTNtIo0ecKpNTxfZdkKoHrVjEMi4SdxPdD0kk7HjNGGalycTWfqETga+QHmhr+pBA10JprrrmG5uZmUqkUhmXzyGOP88hjj08Zxn++7XbKVQfH9XA9n1/9+rfU06T5vEtrS5J8vsCDDz7E7rvvwTXXXE0QBFxwwY949NFHueCCC1izZg35fJ4tW7ZQLBYZGBhARREDAwOcf/75LF26FID+/n6Qkm998z+ZPWsWumHw8D/+weo1azj5ox/lv/7rvwjDkFWr3uSRR54A4Pzzv8vSSy9l9uxZfOfb32bmjBlc/NOf8rsrr2TtmnX88ldXTXqOGlAVdY8EqQQhsaNBXbRlaBqhlLihQxiFNVUzqFpVE8Mya/zLWp1xJI7jkkorIhHRlMpgJxO4vo8uJV4YYloxx9avuJTCiDueX4FbNrnwC6fR0ZGkrc3mlVdeJV92uOXBldzywKuUCiXQoa2llbGhfoYKVVAxgig1LeZ3NhbT2K7GsEyiMMJ1nHh9rtiEvS0xUulL4Ir4BD0ACW3NKaa1pxrBZBhFBEGsfCyUHUqVmNR+5AcOevdpTsiG52QYhVSrHq4fTLGEeugfcLFmELoS143TQg/8w+cnP5PYthErdEXMYzvqE9/BMCwgQgoJtZKOSqm4QlgUcsCC6Rx7yJ6NNHe9SSk47oRujjuhh2VvbmF+WwvFUpmb7riB5558nkMOOIAPfuAARga3IbCIIgunOkJ2WpKbbnqWgw5YRK5NZ3SsyvjQDmbNmYVlJdF1E9vQgRDTjsV/aDpBCCObq9z3WA5ErVBDFMVlbzWBbRqEYYiqoZ9KRdTz8GEYgqmhPGMKvxlg+sweVr7+FlJIQmKe7MFLDuCTp52MUorunglf2TWr10+mUO7SfnfFdXz/h+dRLJbZuGEzI8PjjXMXH3ogt9xwN5VymayTpLUjFojqhuTFF1/m7ruf4EtfOoMPfOAUHn/8ZZT6CYZp1p5/1Xg2QsCyLaIgIJVIY1oGuhbzjH2ngu+5FCoBkQSzZuMWRgESDcs2a6b0EZORzbpfc73fJscvmoyzMrouUUo0OI5hGE2icky0Deu3su8+C3nmxRfjEsPA2Wd+mnO//QOElNx+47UTyHlN7V4PbHVNxw8mUOQ1a9fzre9fSHMuy7fO+xrFYhzo/OjiX2EaBj+94Hu8tmJl7dmIN/jTe6bx4x98h6ZMhuZclrXr1sU0CGDBHi1sX19GCYUhISlNhFIozSKpGeQdB2SEX67ihwIjIwmjiMgPMAILVxRJGgnm7dZEuVjCMnyaKmXS0TRm7m2yn18imWwiPxawevU/SafTbN6wlSeeWM8Hj5+PlBqGIejr62fhwgW8/vrrADiOw6c+9Ql+8pOLgThjVS6Xa+4emV1KttbbggW709LaymW/vpT29jY0TbJ9+zZ6e3u58sorGR4e5cc/vpAXX3yJTCbDzJk9DWBrbGyc1tYW8vk8iUQC3w846qjDWLXqDcIwrvL3+c9/ivO+cRFSCP7yl983xsXkAHfz5i0cfPBBPPtsXFtbSslnPvNZvv71ryGl5O67747HkaaRzWbp6OhA13Wampoa2bOJ+ycb/eF5HuVyhb6+Xk4++aM8/fQzzJ+/gL6+PkCRTv/r8riT2//JNmjWjB7eePPtiZeU4rAlB/LxUz4EArq6JuwWtmztxbZTOE6psRFsqLwl/Pa/L+frXz+XUqnE1q1bGBkZBsC2bfbZZx8uv/zXtc+YuIRTTz2Ve+65h3vvvZcvfvGLnHTSSdxyyy0IRVxaMQgIgxDPdzn+2BNqu8yYn9O4UcREcE1KtvRVAY3F8w9j4awDeKHzCLQ7rsGUBn/d7vNW7SFUKD5m2BySrzDod+IaGiNNVZakutg8OkY/LoXuDmbp7aTW9+Ee08pIs4FRdRBJC02Z5CxJLplkRIPyWAFcSa7FYHBY4hpjZNDplAlSWjcV28IZDXGbLYSdoq+/n+KaPmRC4mRnI6Vgz4ROLtVCv1VmqFiiy2whTYVNrofmSsqjAwyWIzTVzJjvMSdqYcAU9JXHCFI+Ss/gKciYBlW/iotAWRAUFfnsGFnSaJbFuBjHkD7TLI2qZzNIRM4XpIRNQYBuBqgogQxKhLIZw6iQDEOEJSiXFVLo6JpJa4eJLgyUr+OHOsk0JBNZmlIa6VSOwaExlFQ4fhlNhlSVwnFCtJJP0i4QW5MIpJAIzanjK0CMdre1tdDS0kKE2EWbVixXpgSR79VcN2DjpjECP/bY++1vf9tQ1QHcdNPN3HTTzUxe7q6/fiqvqh5MTm6XXnbZLq/d/8AD3P/AA7VBKahBiyxd+msQsHnLFs77z//c6axdka4JZEVM3YARL/LSNJCmgV6rcBJ4HghJVENUlZKEYbwYGIZJpFScUq9bJEmJ7zp4fqwSlJqGVBK3VCYSMXfJC0ICP+DuZ1YR7JjGTy84mo6OJOmkTjqV5qsfP4h501u458nVvLVhgGrVpVpxkcRiDqKoJlpR8e+TFl7PKcf8TFWrkayMXfoA4u5ra0kyrT2DXisPGIQhY8UypUr93k/iBE1ClMSkCeqQgw7kS587nTAMuf6mW3llxeu0tbdx8QXfr50nqJTLXPizX+/0fhFuEPDNr3yV5lyWCy9Ziu/7/P3lF8g2tzQEX9KIgzKtNp6VUjz6ysvc/FAze8zpQUpBpEKW7L0Hxx28KK79KyRL9p8JwGNPvsMvf/Sf/He75IUXXqUSzOaAxT2MDA+ha1WCqkF7dyu5dJ7DD+mmc5okCF30aAElp0QYOURBhTAMYgQuil0dIhFRCUNS8/eGJ32iWkGEdCZDtRxgYVDyiui6jm3bVKvVWmnW+H5omhbzIaNwl2G6fWsve++7kOefXVYTRQjOPPuTfPvcC5FCctPtv5+EokWTzlcYulELgOIX167ZwPe/+VNyLVm+8a0v10RdgvkLdmPLpm041ZhiMT5SwbYNmpqTtfKy8axQqVRx3bhamdQk2VyW4eERbNtGRHEaP6HrBF5AqinDtOnTyY9XECLEkgGGFBR9B/Aw9ARBFBD5HkJJAhHg+25MSwrDCTSzFnTLOj9U6miabJjxC2RNZxDGPDdV99GcCEjT6Ylx//KyFey9355cecUv483uT3/J08++yJVX/KomdCs2REVRWLfAUZz/7XN34VCe+ZlPsOTgA3Fcl8v/n2ti1OzgAznzM59AKbj1jnsolcu0NDdz6ikf5robb+XML50LwAH77s3hhx7CU8++yAU7USdUJAh9g2olROFjaFWKfoC0E0hN0ZTKsHXrDpJmBiECtDDmejsVSNlZWnLNJC3QhM7us3cjP7aNHf1bMTSPYn4zpYLJtPbZKFwGXYdlL2/jg8fPb1zDG2+sZO+99+L8879LqVTkpz+9mCeeeJIf/eiHrFmzhmKxyODgIOPj44yOjrJlyxYMw+ALX/hCPAfX2ttvr+Hss78ExP6liUSCl15azpIliznzzNNRSnHrrbdRLlexrAQf+chHuO66P3HzzX/me9/7DlEUUSwWueGGP+G6HpWKwy9+8fMaSHERTz/9Er//3cWsWbORYrHYoIPF9z7u03Xr1rJkyWKuuup3BIHPRRddxCuvLOf6669n48aNFAoFNE2jUCgwPDzM0NAQuVyOr371q1x++eW0tLQwPDxwLrEwAAEAAElEQVTMyMgoF1zwQ7q7u9F1nfvvf4BCocCyZcvZf//9ufDCH1Eqlbnoop9i2xZnn30277f97wNKYNPmrRxy8P48+9wyIE7FnvXZUznvOz8hCkPu+PNVFMpurUMiWppb2bHDoa21jcE6h5L4ERkcGOaySy8jlUpx5plnUanE/IP999+/ke6uL5BdnV0MDPTXSKURM2fOrFVUiRdhSax4Dmsqtt3n7s6SQw6F2kN59z9W886m4dqnK5bs18MHFs+J+Z9CsH0gVq8f++lP8sojrzC68SXapI1EEKl4qU6XEuwlM2zbOs6srjSHjDezcccOpmk+S2bnqEYG29atwxtw2a2pA6/o0uSbrBsO0JpKLFJt9O3Ywtb5WXJjLov6C4xXBSJnYXd4JLZHqH4dI1Fhz2nNrAsULT0ptM5eTizk6K2kyO+ZQfZl6LTGqCzTGNw+zIIjLRa19RA8vAanUyDbkpSiCkdv7mI8IdjKAPNKHvPsVq5whmiPXI62m/ECh392KvZpMYjeDNieCHg5Clg8O4Odh78KgyZD8fFckjcHAl6knx5N40w5lzcNj616hBUUmK5nGC25lJOzaPWKuIk0FdmE5kakNJNxVUXqGtVqlbSVxgt9TDNHImVQLgWUwpBycRTPq1XpkUkMwHM8cmYCX3oQ6RiWhm0ZWGaCoJJq7OpzuQRtbbvFfoCuV0+YUnZcKo6H6/t4dVK/pmMndCYCwniyDjzVKL3murGCbNc6qu+dtvx/owLO+2/vFlROMCfrf9d1vcavkjFfVEikEkg0hJQoZG3xFo00pOd5sSBASsIgxPdc7EQSL/DQDIHrVKj4BQzLJvBcEpk044U8inRsau3b3PKXNxEIvvvNxXR22WTSNs1NFicdsTuH7TuDWx5axQ33vkzZcUHqKAlRTcQkkTEyiUBFCk3qgCAMAxQSxLukyQHL1ujozJBrsmNkUsXB5OBYgbFipaHU1epl9IiRSylqCvxGFkTw5bPP4FvnX0gQBlzxy4t59Y2VnHDs0TzxdGyK/rcH/8FZn/kkxxyxhIcffHHKdUzr7KC9rXUn03uBkJBIJigVy9iWQRjWVNFRDdmTGluHx1jX24eQkkgpHnxxJTc//Dxf+OjRHL3/nhCF6FLjU8cexA1PvMp3zv0mM2fcy/K3VvDmFth77lwifCqVYRJd7bgqYsgZQy9ZFPNllPTQNbdmPybRtDQoiRtW0WILWZrCNONOBimL6FrNU1UY+EEMHhuG0VDiCxEXHkCKhnAwcIP4++z0PCxftoJFe+/FFb//GWEQ8uMLLuXZp1/iN1dewto1GykWS7iTVdU1esR3zj+Hy5deNeW9PnvmxzlkSaz0/+/Lr6VeR/6Y4w7jicefi83Da+3zXziLe/96F4ceeigHHnggrhuyaVMvzz4bm5ZrmobrBzE6rmJ3QsPQ8b1YBGVbKXq3DiBEWAsENdxqhYrrI3UrRv+CAF1qDeGWQuGHAUqAZdnoujGRWSfmMIdRROhH+K4bgx0iru4RC+NkQ9Cn6zpKKaZNS5PJTASUVSfgst9cTVz5Iw46b7z1Dm689Y4pfXXdTX9h8uZ352ASBbfcdhe3/OUuJkPjL7/yGi+/8tqUQ0fHxrjuxlunvLZi5ZuseONNsk3JXd7XNCUzuxXN7V1o0qIpEWEaFWyrE9MM6OxMkC9Op+DkeOGlXpwwQeg6sQBV8+ma1oogSRTqhH6EbuSZM6eTRGI2XdNaufJ3d7Bt0xAzZnZOcgeY2m655S9ommTDhrWA4qab/syf/nQTk30or7vuusZYALjiiit2eZ96e/DBhyf66OVlvPzysql9NDrKddf9CYC1a9fx9a+fi2HUq+HE4/uyy+rvH3/+TTfdzU033z3pXQTXXTfVMLK/f4jLLruiRleIN1d/+MMf+OMfY6eLeinUm266qfFs9vb2cdlllxFFiqGh4VjAFwZcdNFFE7dJxdXHenqm8be//Y0bbvgT5bKLUor29lYuvfQyLrzwwvfsj8nt/5Tyfu7FV1iy+AB+d8XFBGHAj358GU898xK/u/wnrFkbR9jDo+XGEE6msrS0uJx99he49NJLgYh6+YuTTvoohxxyCI7jcPnlEzdx//0P4JFHHplANAV8/vOfY+nSpdx1151cdNGPOeGEE2p2DPGXnczR13Wdo4/5IOlMmg3bS0RRxF3/eIN1m0YRQkdIwd+eWMNuM1v4/Kn7cPyh82KZvYKBMUXy+AN448onWBWMECpFqGJ15dXr1/Caeg1nZpqTdmvmwbcHGW+HA5NpXl/Vy0h1hI6jEyRmt7L+3lUU/CL5Np9D21tJelmeGchTtMcxhyXVoSov6xrrQpsD+ouoTXN5Y+MAlX0UXT0Wz7/Sz2plMvefb/OxlnZue3sT2mERlfGAmatKbNlYoCR8nnDynLIhx/Rb11Ps7iR3QBa1aTOLSkn+/vIWZrY2sWT3HKZf5u1BhyOyWT42fRYPLx9E15Kcnmgi3+dy3+p+Tl5yFF9JbWdtyaRa7WR6MmR2e5L24QIzxuCAfWezW36EuUErCwsFnrB3cGx3N22jIav2nclQpY+PV7soJSIe6CsyJhx0XceSAbOmZejumIFTDamUHcrVESoFiakn0BIW1WqJbEuaSqVC4HqkUilMS0OKgOZkjmLBIQwCPKEoFau41XaiSGFZGl/+8r5873vL6BsdQSnFC2+u5Z4nX2ZwLE+LFJQrAZatIwWEXix4qZOUIxUb12/fEDG2sjWmY4YCvCsBRSpjM2N6E3qtXrusiV6kFFRrxP+hsTwjxVIDDYc4zRSpeHGIH506ivhuuTwFkUZUnTCW1VMBNCr/xAh5GAQQaSC/NunclQ3hTV2gUX8Y6ibnTrWKUatq4vsemibiKic18ZOqVSgSUhD4Pn6jgoTC9z3MhI2m6ehSolk2YRQHYFKz0TWdtJ1AapKEaeBWY8Tu5tve5IWXt/G1b8/k0x9eQluuiWRCJ5lI89VTDwSluPl+Sb6QR1BLAddsgxzXwXUclIrNkRGx2lgpVUtLTXrYBbS2JOhoT3LWWZ9lxozphGHENddeS8+s2Xz96KNJpZLcdd8DPPjwY3zhzM8wrbOTbLaJa66/iVNP/jBLf/PuqleI03u5piybtm5j/m5xKUGpSXK5LO+s2cDO7YzPfJLb776PU085aeISa4tdEEGooFQqo+tmzXg7pn1ESqBbJkEQEgYhhmkQErK5f5hLbryfmx58hjM+dCQfOGBPNKX49HEH8cTbmzn9U5/l+GOP4/qb/sBLr7/Bug1rmD6/hxG3TL4MFamxudxP4OtgltH8gLAq0ERs94QI0A1JsVTBtpM4ToKEmSII87U0cpwG1jSbgCqWZVGpxIIYKSWJRALX9/D9sGE5Fr5rlQ/Fb3997aQ4U/HnG+/izzfeNekYwY3X3Vb7Kb7Hly+9etL9jk/+yy1385dbJi/Acbv2ypt2ee2KS69i9u7tPPfcczz33HNs315iaCjOSkHMGy6OF+JnwwtQOvi+wE6Y2LZNsZRHCggCFd8/P4i53WixM0LNVzhSIjbIV4pwUpEM3/cbyHsURpMKIYhGKluIOOui0NG0uM/rx9V5jjNmTKQeq9UA1wmgUQL9X/Fz/8VGd4IcOpXz+b9tor6NnThZCEFXVzvn/McXmLl7CtNIkxA6yBDP1UhYJl7VY87us3n2xRe49Zbv0d21B5XIoVgosP/+p3De1y7hrTfXkLbayWUNAq+M4ztYZhOGIVHh30ilA4qVMZSyJ/nDvsfX/V/s+f9VN0xs3v/nNoEy1ufkuo9t/Fo9+Jt8bepdPkDUBM9SCmI2hCIIwinvHafZp6bt67/X9wqT7aLqLfbJHKi9Z9C4lqGhESaM4P/n9n+rlCPgst9cO+XlG/98Nzf+eeoD/sc/3UZHa8xfaW7p4NZbbyWVih8Ky7JQwIMPPcSDDz2E67gUSyXqvXjVVZOUaCJ+9Ve/ijmY/QMDnHPOObtcWqgidCkRmiQIQ6b1zGgM8Kdf3sQ76/pqxPEAFcY8qTUbhvjh5U9z49w3+M1/fZiezgwgyCxZxNhrnWil2Yh+iSkECMnX/uNjHPOBz9HV3cY7Q2sJ316LZs7BMmyqGzezZypFck6W0lBEZW6RVnOEBT1ZKuVxBodMbBkwJ5vBmt7O6jfX4o0GLGoOSFgaK9b203zkbsw+bjpb+8v0qmFaRkbZ/+iZ/H1liVVqK8cu6UALm3izdQvrh2Pu5pwTphHs08zf33qNRHsbHXMDNowk2PHaKF5zFevwNKtefpVh0UbvcJ4je3r44epNPDfusmROln+sGMR1PZQqcNPKZzioI8svVr7DEr2JvdvSvL4mSZ9fwaiWOMaYzXjR5VuVzcyrSj67Zw/OhgqvDwkW7DOXw0ULxeWb+efwVg459RjURw/n8edeY+vaIs2tAfniIJXKGM3pLlrbm/FcgYricm1pK4XvSlAGkebhKAfDSIBmxDYaZgR+XPIxkQjJSxeEYK9F7XzmMwvYNjiC1BU3PvgM9zz9MhKBqWnohgQNylUHIjCkwvUEmi4Iwhhp8ZzYE1ChGmIDzHOQOlzx25M47ZN7EkUS34uPsS2N4eIYhUqFq+79O8+8/iatUazKrFRKuK6PLrU4gEUgDYNSqUwMBmq1UR7FxtAIhIqQbgv5VTPjwFNAZt9taMkxlIyNo6UQuI6DM5rEn6ANxzXaawrbuj9gTSKAiiKUEASOS+T58UQVxfXpETWRixRIIYiiEKFELQUaT4JSSkI/jOkkWlxjPQjiBdQ0Y55cIV/ASOhIJTAzGYRrUK3NXhs3jfPTa15lw9BmzvvkybTlcmSSMVp53mmL2X/BNJ55bXN8nWrCl3HDtlH+uW475XK1gT5BPBFXqlU8TxIKgaZrnHH6Qpa9nOTAA/dDCLj88isIwpAdw+OsXLuZ+x96HNMyueqKX/HgPx4DYGBwiJ8tvRyAS3cKJiFGEnqmTcPzfebMmkk6nWTN2vWc86XPA3DCscdQKBb53VV/olHzF+ie1oWUkt4dUxXEStWqbwU+9Ul7cpWlqIZ+KVGj7ai4UoluxhGD63qs3z7AT667lzUnHMrX//04wiDg4D1nM+xE3Lt8C189+yuc9+0vUBkdZeNqGNi8Bb/isW3TO7TtFuD6OtLPUA3G0TUL3w8xNB0/jGsxCyRm5KHGm+kd78V1XZSKea22JYmqAYYNYTVsVI6qWwZF0QStyIvC9/ZCVrv88C5t8mr6f0H9p0ZGnhtQrfhksvF9Ms2pQYeKQnSjhiAqEbMvlMJ1QzyvjFBxQB2qEKE0BGGNk6hq60lcUckwDKLaYlxPVcsaP7mu0RG1MVtX5au6sIlamr+GnjQstxSYlokUU22YHCeMz0dHaiBrCH8U7bz4Tw3E45dqC2pto1avhBNFUYMXO9Xke+J+NJ7RSWl4iDdYQsZ+lA1qphDoegJbn0PKyhLi47kewhCg27i6Qdmo8s9tFd7ZNE7X9JlkMiamNY8FSw4n1bU75/3getau2cTWzVs4+6yT2HuvmUhvnPGxAmNjsTgt05SiWCmCSL9LlqhGM5CCBQsW4PsRvb1lxserQIhujANug1va1JRl2rRuDMNgR1+RfL6CX6dH1bohlbJJpqxa0LXr+PTcEM8L8IOAIIhIp9P09GSwLI3Vq1cDMGfO7lO40pVKXEWq3qIISiUPx43tGjVNThEXxjHh5HFevz+7XE7jlr9Xm/y3MFJxCWb+dWD+Xu3/lPJ+X00pRsYqKKCzFlQmU1mSqSyCAPUuH711ywYqlfKub8XUTVj9ZzXlj/EvdVudMAzZc/6ejd5asbofy7TjAAIwDQ2FIooCTFNj87Y8N/71DS742pEAzJ2/D2rvw+BZE5QkUnEaY/NIEw89Pcy6dcvYtnYV1XwRu2sVyjCQkR8Hyk6IKSzSHU3gV1GvGvhEdLZ34YgS0eYq5jslspqFMLJUpUYY5jB3n02QCFnzwji6aGPRoXNJaDqjUYKOIxWnJiFfdegwbdpm2ux9nINLldBVJFQ7C847ktG+YaxBgwV7Z9h93yJaqOhobiOzd4Ge/Bj7JSK0sg5ekVPtkDkt09m6pUjF7SNrWkzr6mLzYJHTD5+PoQSZbBeVgQEYLHPg/HaGSiVefmczzV1HkcvZbHTGeWvMwejxeGXr6wxuHY+Ht5WjpytB/qm/cuQee3JQcg5jhQHyzmya2w5j85aI3tF1ZDIJgkiie4ma0t+Ky0taBkEQUK26aEqg2RaJhIZAQ5NJKhWHllwbAthjj+Z4XAjBsrfWcs8TLyHMifSVlHrsASoEaAohNAwtXiR0XUehUy5P1OpuNBFXQfnQCfOIIoEU8USezRqNwOfOp15g2er1WIkkQikGBoZQEUzv6Y4XDhSeU2Hz5u2kMxkSqWScSvY8DE0n05QhEnEt6bE+SWHSQqIJgWWbcVq6VtbOsm2MIMnYpOtsyuVItpmNCW6C0B3zHxGCzo52ojDEC/w4dVwrDxmFUVwdRylUFFHP8MdTVPxw+ZEbG+kTX0N1fByBRDRlcKtVWmqcaRVSqzI1IawDCMKImx96guXvrOWM44/h48cdRXuuiVRC54OL53LEfjOpOj6uH07hI77yz15WrO5jcoJbABu2j/H2W6Oks1k+f8Yijj5iBq++KunpmcY7a9bi+j4Do3lGx0sce8yRfPzkk4jLO05rvM/qtWt511abT37z+2v5r2+fR6FUYuPmLYyOjnH2mZ/lznv+BsBDjz7Opz/+MU7+yIncc+eE4Ous0z/JX+66B0M3Yn/FWuoyEjWFuVJIqRH6IUqro1MSqWlExPdFM3SU7+AHERExeh7PaQpd17j3mdcxDJOvfPTomkejziePPYgfXHMvX/zceSy95kKGne1YZjtVzWeg0E9hwCGV0xFKI2U3IWRc/hTdJqHZtWIMEY47zN///gazmo/Hd2cSBjpKE/hKEFgGhnJxkMQVPON5NkYmwym2Zrqp4e1U+c/QDTTdIwhDUKKGuMhGUDoVaJNomnzP0nf/8uahUErUvCzjwM51AjLZyccKQEfTJS2tXUhNUiiMUy1XEEIH5aFqi7YUE8iSIIyRSCGJas+DJrRY1KZJfFWjT9Qs9eqlH4Wsbe5ULdegJigyceApUNQ2c/XxXvP59P2AREJnzz2bG1d/3nl/5qJfPomYPkqmK0DTFKHvEPhBQ5Bad3rQdaOWFFG4rku16iIUKEKENEil0mhSw/erBH7AIfstYJ89Zu7Suxu2D7N5xwjlSoWxsQJBGDtWRGFEuinDT//j1EZfAbhOQJCE/oFtWJlRvNAjnYB8USPbpLNpyxZuv/05wjDBzDlNdM6YxVhhDH/MY8PwWtatXMvQWJGmZpMo9PCq/Yz1RzjVEMPyGRjbxrSemRSLRYolhyiqe6LG/ffAA8+TTsfm/7mcBQj6+8t8+cv/4OmnN6MbeTq6HsSyRnGdEkopjj/uRP7r/B8xa9ZsHvjran7/389SKpYoVyqgFKd99lA++7kl/yOIe/9f3+Khv79N344CXz7neI49bjYtzTZRpMgXYn/ZVEojlVYkkwa2bbNxY80qrPYdPC/iuef7CMOI44+bWQv0IJnUOf30EwGF4/kEYYSuydrmPmR7X3ytqra5sCyNuXOzu1yj0GLkO/BVw05teLxI6HqMjk4OKv9/USmncRXvE+ytDazR8QoC6GhNUy8VCEZtQE8iwgMtbW0EAz4q8hGyxqNSxLsmJNEkpGLyTqQOGRtazBfTNcHMufM4+KCJGx+EEZphgVarHhLUJzXwvTh9t2p1X42/Ar2DAUYhx3PLX8QPjm3sAZ7/x2P49vO0JNLoGBSFixpzSFntWLZJsVoi6euUkhHVAQdLKIJgHCUtxgb6wcjglIfREwZGVacSVhCGTUs6IO9ICuUqs1rbqUqN0cE8oR5gRW48OUaKauDQYmQpWCGdzR1Uqi7V0SLS1EglLcIwpOKBIQXChsAzySYgZZmUoiRmWpKUGkaulfzYDl7TCuSamhE0s254DH/HZhKaQVo0U00GVAa20pObSWqGy8sFh1Smi+mLZtCUy5DKSbYbEcl8RFtXFq1iM/M4B0fP0eRXqbRo5PpG2HO3RaQXt9LW1sa0zh6efWo5vdv+xMc+dAT5wgh2wiAQBirycd0qEg1TWkg0OjrbGB0eYKis09pu4/lFgtDBspO8+mIzr70oSCQmeEWr1m+JrW+i+IGSQlJ1fSQSQwOEwgsj4kISgiiIyOfHUZ5Hxm6hjpHX58XvfHMJmYyFrKkvdYNGMPncqre5/4VXYwQxioPClo42RkZHKVc9hGZiWhpIEyGhtb0NwzRjj4HagFKAVvt557JfumWhpyKErxql7GI7khhRqDcpDTQ98f/h7c/jNbvKMm/8u9ba4zOdqeYplapKVSVkIjNhDKOKvirIpDS2CojdqC12t3aDrW13i7ztLNqIQY0ggjiACogCYUogIyGBylBVqSE11xmfcU9rrfePtfd+nnOqosHfp38bKuecZ9jjGq513dd93as1RCXzaazTCAox7mt1Zq67HRTGabeEdRnNxloomU1TspkCp/kS0qPZaGJtQWENzaADmcYAXrnfIklW9c8iKVCe5ptPHOe/Hf4wB586w8+96TWsn5lCSmjGimapaa2yZQE6zZDnPfuSVSCz2m+SaETuFg1hoPA9yYmTp9m/fx+f/uyd9AZu0H7T61/DT/6n/+rKO97xh/X3jRnDVM/znEl/fRA4dPgI7/gvv8hUp8V/+PdvYzhKAEu33wOqkHif2enZ8feEYPOmDfzM23+cMAy5ZPtWvuvlL+Fv/u5TCGvJcu1Kqgpc+8wNQgm3qEXi+QFpnpAVBvAQViMtKCQId566sBit+dCn7ubuRw7x7rf9AJtmOvi+z/e/8Dpu2Luenyl+lcWlI3zpy5/hfHYIPZ+ysrQMG2YoigHDOCDNBjSbEaPRPHkGSoX0B0OstVx3yWU8eeYoWbEOa1sUuWY0yNmyfh39wRlXqzvLar/h6n64PBqJwBVxmJwlPve5r/D+X7qLv/vIvSyvdLHWsmHTRgajEXEUszQ/T5FneF7oFk8IpqZaZTWoksmxrvjBJMlZPcVJtifPC9rtFp4fkOuCwFf88u99H8992WUAvPd3v8473/Ugxm5nat0UBu1AvVSEYUij2aCkXLEIktGINEuxxvUfKSxl3MG1JSxRo0GhLZ7vEwYB/f4AKSVhGBJG4/rXVcRMOLqynk7dfCdACkZJgjWGIi9IkpQgCtm9p8nVV8/V+9mwxWfvZbM897svxW9M1qReLQVxWmH32uET5zlyepGFhXlWlrvkuYu2SE8R+gHX7t/OD37nLdx85U6ebrvvwDH+8nNf5+jpBc6fn2cxSTFGc+nmOV503b4ae5w9kZIkBaNUc2JhGRuF5KlkafkciQ7wbEqul8BfptESLJ0fcerYWcJmwGB0Dl1kSA+mZgMa0wVFEnDsyBmKXsLyikL5GYPhCGsidJESBjFL/QGPPjqPtVAUhq1bAxqN1cl7X/7yKb76VefbYq0bH0dJF08qisLw+BOPkmUZ5+fP8z3ffzkWePihkwBcedUWrrthu2t3AmbmJGmSr2qDAHHc4O3veB47ds4wSgxXX+uKGywuJvyP//lVB/axKJXy0pcEvOCFVxEEPq1m4NqXlBQ5dLuSl7x4O1k2Zp3vuvsk27a2+exnv0IUCT7yj1/jDz92J7/3rh/BL7Xhb/yhB3j0wCLZoIfFsv2SKT74oVfW+CvqVOOzcNKuPCTLcixw+8fv5JtfvIe775rC6GbJjk74jP4L27cPKDe+FRElzgLA3cYJUOg0IcKWETXhutwilnVb1/Ejr76B73zRPoyxfPbug3z53iO89pXXcs3lWwD45N99iPf93q+gVEJqQRkPYzyUZ5B4GFzJL2OKUgfgJtYkSfCVVwqpE7S2vPD5L6bdanP4xABjDA8/fpoqlFDJF9I0cVmvuabVanLmbJ8v33+MF9y0E4DveOnz+Ie/PsXD844OlUKwYW4D0cYriJtw6sgpNkxLtl3XYct0jLARy2c13cJHD4fkmSXJYlqdWZJkEXSM0KnLiI4FipBpMc0wWcDYTYRhymYRMRKGwFqmmiFStul4grC5gXMrx2mqWaQn2OAplhZOIW2DzlybVjNiZWVEnqS02j6jTNOwU7TCPt10iIlamBEsLPbphsvoIwFYjYqanNFPIooVEHM023Aulwx7y2zetI1pHx47+hSEkinV5oQtWDrbxQYWE1kaWYjIU4ZYssAjyFwiRBzGGD2gl0Nu/gohJOvnWmzZsI/5U0s892UCESU02YA1CbbQBEGHIJgmKwqsMGgMT545i+dH+P4yS4vzzpCdNlk/RxSKMPC59Tlb6uaplKTVirCAxCARDLOCKJTYMtQjsY6FwJDnmqmmR2vzFOdPqHpYtsD+vXN858t3uwFfCYYjTRy7LrM8WOGPPv0lVobpeCy3EqkEzUaLfr+H8mI0Eb6n2HHpXpdRW1TRFeu0NPU5uSkKxmGL4UqPVPeIpmIkyjGLAoyu9Ddu06Ygz7PSOWjt2rnUcimFKONuopqgqQBqOVEiQHoIQHpOs6nKCUngJk5rjLPDQRC47o6xJbuEwVpB4AerzyObJe/HbuWtPG7/8MN8/stneMcPv4yX3LwfhGN/q4heIwppNSLmph3TqYSkKCZCbsZy9OSyA0JSsG5dTFEYHnzgIS67bC+//AvvotCad/7iu7nzi3fzu//7V3j8ibK8o5aYwmIKiy3cOb7jp3+C9/z66rD3G173am656TpX3vG334c1go/91Sf5xf/6DgBe9/3fh9aGX/jv/xss/NzPvY33vOd9/PR//AVQhs0bN/CTb3sLf/N3n6qJMwcoRR1azYscoVxiTpYlBGGIp3y0HiCsc6oQXsj09Axa51De6zRLEVJx8twC73zfR7n9v7yFogx/333gCC998YvI01v4kX/zY/z9pz5Nq6GRYoljx0/x5FPHmGnNYY1iNMwglvT7faSn8Gdi0tzwT/94P1suu4aThzwcLLTEzRgaESpvgijrvytXZ90xpx555nxyPSnQ0rtIWwRb2hDFcczy0gpxo8loOKIz1WH+/PkKM9bgsNKWOdLAdY7aqL0E5tXnnEbZhZmzLEV6LpN826459l+9qT6H408NakZ+2FshCCVBHHPDdZu56soZJkHZ4cMjjh5N6ff7DAYDkiRllCZOGkK1+BToQjtNrC4Y5glxI+aGG7ZxTQkCV9+KiRBlfTT32qHDCceOpiwuLbO4uOT6pZLs3dchSRyw6PUybrh2M3/y/u8iaFrHND3D7SP/eD9/fedD6KJgYXGJOAh59v6d/NB33sTNV1yyKuC3cSogSUbuWUtJFEVc9vJnc9OzdvLRf3qAv7rz64RhyKA/4q0/8JKaGf3SV57ivntPO3eGtOD4kQXmT5/DmAJLg8DLEL5HGmaorR1OLZ4j760QzEmKvI+IhkTCB2UxQpKZgiQJKKxien0bL+7RaW3lySN9Tp48wvJKl5XuPFG4iyNHl/jt37mf//DTN3D6dJ9OJ2T9+gZCwMpKwm/+1r0UhWs/1kpMsQEhIM1zjCl44oku/+d9H+RtP/4jYBXf+6pnce112y64j4vLx3n/7Z9GF1Uij0HIgGuu2c+NN15Jnrf53lc9iycPL1P5o//RH3+TT3ziyXp8lwru/ALsvmyJ/fvWISg18MB1123m+c/bgcBJG6QSvO+9D3PnnSf42MdeSZJoTpxb5gMfvp977l/kM3c+wStesB/PE/zsT13BJ/72KDp3B/6e77503NYsHHjyFFII9u3chO97rJtrcOz4CgC7WpfyV0/8NYLOuKn+i3zsePvXhbytW7lVxylVHxPvUXd+g+twB48u8F9/7R/52y8eIR0N+ebjp8nznHarWQPKKy67DCVDCrGML5pYnG2DkGAoStuHAlUaRoMbZApjiEMPIS2jzH1u+44dVJ32C/cc4VsHTiI9gVIeiBCpFJ7ysNo9sOEwZSiG3PnVgzWgvPJZ19CY+4ta/2KtZaG3gmfOIYIuUxsN19+0m8uv2MVo4Co2ROElFEZTFBmer7BWY3ROp3UTZ86cQxhBFIeMRgP6/T5CKEbDKbQ1FIXnwrO5JQwjFIIwCJg/v8hK9yQbwjZZCkHg0WwFjHJFYTInil/w2LhV0mqtpztYQinwQo8sbWPNNHFkKAqDFDMM+w3yzBCGMcsLyxgjSIdzaK1ptabwgpCFQBCEir4xiNAnCtskxjDoDdEqYcv6jQhriIIYhWSEJkkyut0lImWIIku/mxDkI7Zt2ECSJehkxBMHjtBsS6S9ieXFhOHoPK1WB88KdJJTWEOr3cYg3LP0DUGomZ3Zwkp3CWsNjYYiSwO0KLjiijluumkzaZ4TBJZvHT2HFwUkw4ylboL0PJQHg6UhrVZMo9VAu9UORWExAXhRg6WBZpiuZqlectsltNuhm8i1ZTgo6Ez5LC2nfOr+Bzh8/DiBcqE5g3XifOM6YCOOXaZpPiJPJamUCAlJmqGUj1IuNCZQLhHGanQRTUyeApn2sfoc/UGAarcIm02KQlOYsWgaXNaeW2BNsJhUY0GpjdJ5maDjWB1blliU0oXYhBVcZP5fM+FVr9kyVMk4xCVciA8hyHUx8U1LcdIZswsxlnc/cVjwti98md27HuGK/eu59eatvOS2XeW7BWGYEEfeBWNZq+lM7acaMX2T8bWvneammzbX4aB3v/v9tSckwJ/80cf5kz/6+HgHIuT291fl7hxz9J53/2H9e7V98E/+lg/+yWQpvZCzJ7r8u3/3SxfeJOA973nfqr9Pnz3Hf/3v/4vq1ikhmQ5c6Ns9I5fFLZWTRbiEjRwpPIJGgDU+aZajdcqg38cLA4RSCOnRCgO0tqRFwcmlIX/8D3fz5lc+32kqr7iUbg5Wxtx133Fe/tLvYnb9OmxRYIxmpbfE0uICnoBeb4XBsE+nPY1GY6SmOd1i4ey7OXna1GOetZYiyZmZnsazTUajEUZTjsc51mqKwiKVQCPBaoyZWGhNbM1GxMK8pdnsOJ1ikSI9RV5opPLwPUUcuX7QaDSd80Ap+RCM22/9OEsQmSQpSZKW3p4GP2i4qk9Ydu/fUCdr9HoZp0+7MrWNRsCzr53hmmtnuPbaFjff3Lnos73vvh4PPtivwWWv12dhYcE5kAhZhhYlURQwHBbcdNMOfuxHd3Pzzc/cEHpy+8hHzvHXf61JhkOKPMcUhhc8dyNpqjl3boQuLYBC38OSs67pk+cptZn6xFbBXgvEccw7/+3LEELw13c+xPVX7uU1L72eW6681IHzctzZMtfg6488wuc++2i9ytt96U6u2LeP3jBh27om7/yRl7N723oeePQY11y2jZuv3FmzXn/78YOuWIAQeH5Ac90MOy7dgJVOhuBJiyhXDWcf+CweQ7y4QWZHpNpipOfyrzUUpiBSHqguhRKsv2Q/xfklptZNsfzQg8gC1m3YyHCUkw1dv/+zDx3gvvvOcfn+ObSGzZsbCCH4/Oef4uDBZdchUeiizcL5W5nM9rYWbr8dRqMD/OTbb6U/6BEGVaKku74PffibvO99XwemL3h2f/bhY7z61RFvefO1LC91kZ6HyDS///vf4Pbbv8nkAzIa+j14+OtdHv56tz4CwJ9/+DA7L5niiivcguSxxxY5eHCZd7/7eWhtOXduyOe+cJK7PpGD3cLdn13hpTd5GCHYv7fN/v941Zozs3VE7NJZBzCLLKHR8urjfukrx/nMZx5F28yV39WTy55ntv0rAKWoqdPVxrWrO3kd3i7RpRBuUj5yYolk5KyBrHXO9dV24403sHX7ds7ML1NkDpgqz2U1aW0ZjVyGYVUzVkrFaJTUtgq6sPjKq1et1XbvN05grMZqUVpRSKQnUX5AbpKKF8IawSNPnK51QGeWLN/36uu55+7l+vIu2R2wc99GVLCRqdkWW7dvYXG+izYBSimWuiNarRZKRSRZ4VoNIcuDFBE03PlLg1CabVvn0NagtSXJ+0RRhJI+URC6aw0CijRj495pOp0p8jwjyxKywmkNjRVIZfBDn2SY0Gw23Uqsu0QQOZ+7RtzBGMuw10MpRRw5awclBGmaOn22tWRJWk8eeZoy1d5Fb6VLI4zc6nwRMl2giwam1NpJ4REEESsrK+R9i5AWY2bAeuTFiDRZTzaUtDsxaZaRFwKhtnP8qSf5ytfuYd3mmP/n+78DbQoWBn2EknQ6HY6dO0OjEWNDi98JGBQJK8MBMszxvRYj3yKiHNUOa/0kwJcfOMijh49hEWRFDkq5qjjaWc3MLywzpRVZ6S9pjXXJLEajdY4pgjE9iGDrVjchCAl5bhgmOZ0pn5VuzkOHjtCZaaNzwygrUMJlZ6oSoHm+xK2DDVa7e1yYAmMlaZozGLl2X4UNrYY0KWUg5TMxFMRNCTZjtLRMfzSiOTPD2qLSTijv/O7G0QI7ielqAClKNjDNnTUHKFfycg2anJSi2PI/dUUOcFV5hCDNc3ShiRrxOMwt6x61aiyauLX1eHHoySUOPbnE333qCXbf8RBX7F9Xf/7Wm7dNgEzKtp0SBooo9DDGeZRWlW663WwVmLzo9szHxn/dNjHsrTqWMYhhgidcVFAKga8U5KUPaAk0KccnK6AR+mWyFZAbKBw7q5XT9UUCTG754N99GZ2kvPn/eRGFTmvd5nV7t7Mwsiw85SqPPfD4MV77wmuZmdlAnudslYJBr8f5hfMMBj1sZuFMnz4ewzyhyHOUqvSwGqkzrHGWQ1J4DIcuRK6U76ouSbe4onQ3GF+6+33/dRu55/NHabYiFpfmieIGjVa7tGwSXHvDbq65cZdjIWWpU5wwmp5kzya3pw4vcfLoCufnF1hcXHY1zrUmzwouv3Ybr/nRG+q5qt/PefObr0Qpn5e+9Aqe+9zZC/a3YYNb7AM0m01e97oON97oxoL77uvxsY+d5+jRFr1+n+FgiMUxrlmW8ba3XcGP/sjq+u2bNo1W5QYYO56/JrN9pXRJIe961xaWlw2f/zzcfMsOfuA1G7jpxiZZlrC4mPLRjz7Ka1+7F60t933lKb74pb9FeYM6P2CSsKza4g03XsVtL3oOs7NT/Jc3vZTve9E1hH4FJlw/Xdf0+fRnvsSv/9odPHnkKWS5H5dsE7D3sl288Y3fzQtedD0z021ec9s1XL9/9bV+/d5Hueee4yACMG5+X14aUJgRQVSW8FMhSlr80MPKJtoI+v0u+aiP086q2nJLCOHcD7yA/mDE4vKA4SBj3i4zP7+AznMGwwFRHCDDBsvdDClDDh9e5tChFfQFw8FkK5Jo3brgVQt88E+PcNddS1x11cZ60QLw+ONLJSi9iMSg/Pb7/+AAn/vsSS6/fA5r4cCBRQ4+sbz2RC66Te7t8OEVDh9eqf/es2eal750B9ZCnmve/75vQuZC+gceXnFk3gUDT3VWxXjfAr527yluvmELOhAsZQ6P3XPvScLQR6mJcf6ie3v67dsGlFKIUkBMrYOsombja7GrfseW5AWlTqQSI2N5+NGTzlxZKeZ7iuc99wX8zd8fYJCm+KW1S5qmaO0m3yqz0JbC6CiKKPJKQKqR0iNJElZxK6X421gLwpKlCYEI8YLYaSl1jqtbLTl0dIEvfO0IL77V2YNs27IZKVZqfer2XbNceZ1BW02W5ax0F/FUSLsdOh+oVGPyHgofXaTkackgZhlZlqPRFCZ3CRMrfVb6zsQ01BFSaOI4xpoRURSwPFxmamoKXWScWV50Nglo526fruCHzdK6AwZmRFGcJopc5RKtnVjf9xOKXBOEruFlmWugjUZEkg7LSUBgvNhNbIUmjJsspAlhs8n0xvV43R7Reg0qw9iMQlsCv401iigOyPIWsR8yGqX4vtMhZanLBC2yDGsc09rtdomiiCzbjLEZ1ihWhj107tNstMmyjGyQMteaQSpnZSAyS6R8vOkWpvDBRmg9whmcj7NrAR741lGkNEihXIIJ5TM3GiWUA3c2Q5RLL4FwoU+ty05T2nSU+6uHHSFq0NLr56SpRkinvzz51AmXOOSpkuHzyo5h8JSP8hXKi1wtVWnxfZ8gCIiE83uUwk0wMpAUOptotrZM5DCowOk3dZqS9AcgVye9uP5gVrM3qyYVpxUStso4teMsXa1Lj7wymaf+up1AgOXAXnlNWwNSkmcliPAVRZY4HZgQ+E1N0BlR9J95DVgQHDm6xJGjS/Urn/yHg/zRhx7i8n3rEAiec/M2XvKiS0lTTZporBG84hWX1D60g0FpfD0BWCef5NMFbiZwd3mtq+/tqncvNrrW4VmLVCCs0zy6f+7N2fZUaQ6f4kehcxQwFowlL208jNYO+JduA66Siiltp1y2tVIeVhsnX1BgpaLhBXzkY//IvXc9yL59l3LLdZfzguuucNVtyhCalILr917C4TPj+3v/Y0f53ufsZ+OGjazX63ni4KN888nHedlLr+Hw4YRHHirQJUjp94dEvkez5dHtWizlOZfek770SVOn9dYG4igiHVkOHHD1nweDjJe/bg//9LHHOHUqwIsDGs0mw+EAYy2v+jfP5nVvuWn8POrktKeZztY8zE//+QE++9ePE0VhCXTh9W9+Dt/zpqsAWy80ksR5H/78z19HEIzb56bNCUmS8MADD3LHB78GWK668kpuvPF6+oMB09MhcRzzhjdMc9NNbe67r8+DD/ZXaYWf/ewWN900ZiXXrR9w/4MP8Scfvqs0NZcgBS5LvBptXOJRYQ2v/p7vZOumjWzfuoWf+IlN/OiPbiQIysVZqXn+wB89xP/5/Uf4678+hBBw+PAiUaOJEOMxQdQ/x6Dgb//+LG94/WF+4idupChGXLphPSfnlwGYaTT5zD8e5L3vvY/DTy6BuAXPf854fwIMgscOwrt+8Tivf12Ht731errdLmEQ1kf8kzu+wW//zv1kqU+tSpAuXNtoNEgrkEgGuQP8oZLEYYRoCDKrMQZyU6C1K7+rVJMg9ssFTMax4yfIM1gRGbOz63jqyGG00WRZSqexQhAsYxE0m1MUOQwGTtu7uhlVA11lP2bHYHJi8D98aJljR/slSzs5K9g1+xrf+coa7snDKzx5eAVrQeuLfA3wA5ia4oK27DSgjr00E3auk0lZX/jCCR5/YtyXDx9e5vVv+GTNaK7ahEX4BXt2zfCsK9bzVx9/nE9/5jAvf+ml3HrLVr7rO/bU/W1mQwPldddc6f9FhrIKl8FE7k+JKFeH28cUazW+VwxJNXFJKTn81BJ33nOEl9y6B4BNGzejlA/kZFmGtbLM/g2cJUWW4fs+QkiGwyFSuEvwlEJrx7C5zN3x7FhVHHCA1CnV8jRFegFBGJINsrJJubO975FTJaAUSBGU4LkMHSQNTM8JuT1c2EHrnO6iM+QOwgZZkiK1xBQ+gQgIaaJXekyHM1B4WCRBFJPnOQ1vHdMbZhhkA/LSWDr0AwaDATOz68nTEUKESAoC1XTnFCaEXkoU++TaoJRPPOwT+BHWCuIwIkmcT1ygAqQvQTkQIRseWZYxylK2TG0tswhThHAAI81zAhHh+wG9Xo8nF13Wo98osLpJkTWxhcb4kiJLGZmUKGyxYPsYHSCVK6MYRQ2MHpLmywRBQJrmNOI2y+cLrPWwxuArgTEp1qb0zruQzDAZEnguhDMajZhuT7MyHJIbl4k2ynoYk9GMtrJ0vMNsZ9zYlRQsLKyglPMrLIou1hqkcuDP8z1Go6HL0gSEKMPVwiVoWaPHw4aA/fvGbFm1DcqwirW2ZDEK2p0QISSe7yGFQhcZRV7gBB+aIh1RjKTTYeLMxdudKaT0KIocKQS2KMPQYmJQKyPHMheAwbdQDEcXaKYEDoRMdNK641UV24So/ikqL8fawkSwhtW31F25ynAtdyqFdJIB656H1qVuTqkyqdR9vn3l4+hhDGbCfqIaIKpzLX+1E2NDfQNKcHwOy7njrsLiF48LPvq1jVx+6Vau23s5L7z2ShCwYUODv/jYZ/ml//UV/unuzxE3ExJjGFlLFIcYC3nqypi6kKioxyNPKTwURlh8IfHDECOlm/uNIRmMmJ7pkHS7kCR4arXIv7CaXAqM56GiBCUEViqs1vWEKoQkz5yzp9aatNfHAp5UiMkFupIIWVrRlIsEAWUyosAK5x2KsKgyy9hkGSZ1tj9PnjnPk2eW+NSd93Pp9k08a88OrICbr9nHC264AiHGLgZCCm7Yv5OTS64C1F98/n7e8opnszDfY/HQPLFsE4YjBoPS1sjkWOnRH1YLGCd78DyvZibT1Gm2PM8jSdx4ePjwMp/97DG+//t3AyHbd09z7NAcS0uuFG671WTnZet47VturO/pxktCV3Upy0tQZCeA/YSko2TCwyDkLb9wCzsum+XA/c6uad+1G7n65i1Uk1BjCv7iY9/iqis34dhASxCkKC/hq1+9n8/95l184xsHOH78NDrPSzunT3Dpzu3s37+HG2+6mhffditB4LNu3QyveU2bG25o8XTbiZP38ZrX/XceO3AIgUIAnudstpSvCILQkRRWIjwfIRT3fekg73/fL3H02CnWb5im3Wpw+Em3+J2by/kf//M+3ve+A4Dk8OHl8kiSNAkuKldZu/3xHx8kyzx+8ievY2UlR0rFnXce5w/e/zCHDi27ezU2tlyzjceHD9z+GF+48wyXXz4GL489tsihQ0uAt2o9JxB4ysf3JFiJlQJJAdYgg5gtszuZ2bEJZWPOnT3N+TPnWTh6CJNrhLFkxYj+YBmET6hmaTWbDGVO2h+wsHCedRvXcfT4MaRU9Ed9Nm39CsNkhuc894VkRvDg3TG9FcmY6HY5FOmwh7ZOBmRLCzXsmByrFtDN9pRbxNlqKFyLDCd5zYsAr5JpW1vRsd2B274DPI+6fdcJVEJRaMtXPmvpLoMunAeqlGNZ0r0PnMCL8pr9R8CRE+c5cvL8hc9M2FraVG1KwefuPEIUSl75HQ57ebFh3fQDWFusagFrS6j+c9u/zoeyOlB1g8tQ2MUOW01KLtQ2DoVVU5a1cO/DJ2tAuXv3ZejChVEK48KqQils6RfowtsOjAZ+VPq5iZqp86Qi8HzHhpbHjcIQz/edUFtJh4StJU8TGo0GhSyrcli9pknYktkag008RWoVRnuEceSqIdgAbQu3WhMCP3AZq9pYPD+gN0gJGrP00xSdZkjlk/WWaTcbGANHjx6nEBlBENHr9YiimF53QDOK60oJvgpY0RnauNrGWT4gywf4gXKDelFgjUJY5wUnsfV3tdZgNEXhrGKUciGrQXPI/OICw+GQrTsu5fz8OcCAMnihJEn6qMCxwkGjQVEUhH7AdLvB2TMrRCoi60kiT5PL86RpyvTUZs6f7RI33P3uTLUo9CIy7TDyEtrTTbKiB6rABAqjJYEfE4YBo1HK1NQGtNbEzYB2xzHLndmQhorwwxwvDOh0pvD8Jtko48Sx8dO6+epdfPRzKcvL50E4E3NhQUgFaPJEMFjplmEUx6Bu2LQJk2uX0TxhCLt37yxXPmv9uKNMeIBBFbJ07IJSChVFeEGANgVFATKKHdAzgCyQoXS13g2kaUaWZkhRaR4NQviMi0W6VqiNIs8EOcIBDeX87sQFXnMW6ey/x51fuH5W/S3LhaAsNVG+VzooWFMCWbl6lW5taa47XmohnF7TfcYgBHi+wlFlrAoNCQlea1iPARMQ1f1WLSxxAEWUfn21MXGZhFGF49xwKDm20uP4Q4f52y88xLte+2Ze9b2XAxDHHs+7dRtfOgDC6+NbgVQ+zbnARSRaTfI8wiqBtJCNUnJTUCQjZydmDCrPMfkKQls0LrPem4qIdmxicHaZYGmIXDNk5liMo5mxmSEXqmYnK1Boy2tVykdJZ26uhHBjmgBduETG6nu6bF/Cjpk6iwsjV76VnhBUulUjrJMsCA+hDdoaDh09weGjJ5BS8sl/+iqXbt/I5ZddghCCG6/eywtvutKNj6WO9rUvvoE//Mz9vOmF+zn91BHu++hX8P3rJzS5ltxqrC2w1o0JrkpZuXjL87qCThVyr5763Xef5Lu+6xIEgpe9Zn/NB1Xzx0tftZdqybI8P+JP/uJDTG3fwfmnnuLU8ZPIwCOUijS3pDrFMxbnACK44fpn8aIX3cTc7BQve80ennX9pnoMt+V/jp07wnve8Qm++IUmO3Zs4oorZsvjW5588gxHji7g9HDPKVupreesI0fhyFHBp/7hPB/60Jd505uu4bYXdZif7xOG4yS+8QHhjju+zu++916EeDlT069wbXiCbZlcoiEA7X5/4jH4kR/5Im9609W88IUNfL8gDBRf/vJT/M7v3scjj3ThoobxTAbk/tntz/7sUb72tdNcfvkcjz22UALJi+3s4lvVl588vMzhw8ur4FRJudQgCmBq1rJ+E0hZEPtuMZtaJw/zPI9jxx7nW088QtbNMKMBgfCxHhR5Xpp4S8JAOncEnYJJ8T3op44wGdqC7Vu3sbjk2EBlwZtK2bEzZJimbHltysqSRBfOtssKRbMhePCLX2Zx5bQbd3KLFhZTaKQKyPMRgR9QaMmLXvY9TM9tKsktN6JW5gZGOBwihUJUi0MryuQjW/cbJvqwtZbAU8zOUVpvubsqhHTEgrVY4YDua35YsrTg2Mr5c3DbrVtrD9XO9pSp/Sfo9boYK+t+rHVRHlLWuCyKI9qdDlmeY4zE91w+hVISf2MHGeV4nmRu9xBv6BM3wtVt6ZnjyX9dpZx6s/V//oVjlqymp0omswpnuC9Olii74fob2L5tF48/frDUuQHGofN23CIvExCc75nnymYlLkNSuBG4LrE2ObDEzSa+75ValsrXT7t/QKELtwJYc+ZJOil2tozSPvOLx2i1Giyd7WPJKYqMdjzL0vJ8XRYyz3N8z52fyQ1R2GKYJsRxTKvZIfQjhovL9EoLjdw47aXMCoqhITTQimOG2ZCZRod2q+MqyBSGqel1mBw8XyBkTpL2KLTAasvGjZudWXGe4vt+DcIbYYter+fYJM/pnwD2X+a5DqAz9u/YiZTSaeuMJQgClO8AaVo0KewKuV5BCI1e57Nudjtx0Gb9+vWEXkwQR0RhE89zbLKngtpHTsVBCWZVvRrz/QCpQld9Rjgvu+qcpfBQyh+XPixGSBWTp4rMpGid8uSuY3zmU4+5ajm+z83X7OLWG67lrvsfwBS5G0SMptDO8mNtWLM9PV2yYwrPk9hGxKDs/JfvW0eSOIrQWogjyShUJJm7nizLWFhcdmUBPYOSEt/zKZIcbZxvqev8Fis8hPIQQiHIaUY+jTimP+y7zF8EnjLovKpjXbZbaxBlkhvaVYzRsh6fxl1ykpwsw6XVtVagUljrmC5VsX8OvQhcKNWUfpXjHmMnx8LyZVF6A7rPuu5vVx17cu1V1yGu9dT13V+t0bGOYZVCrhpTAPdaPRkbZ6FjDQjD3fec4Lu+w1nBeErx/Odt57IvbOXIiRXIc6QCZS3KCIwMiBo+CAPCI2xYslGXlSQh8AI8XH1zC2jpOKVcF9gip0gSpqM2580yuVwD5i0ERuJ5PsYUJQAvgX95HbXfoMmxSJS0Y7IWStbU3W8jLAGilMmWTKpwHoaeEA48GgtGYKkSFhW2ME62IyTS4s5BVFWGLEfPL3Lo1FmEtvzd5+9h944tXL3/Um68di+3XrvPgcrbbuBP77yff/f617MymuHAE/MoD6xxCXynT55lw9w6zi/Mk5TWUJWZuS6lFNXfk9uBA/NkmeHUqQGXPms9r56JJ29fycK6v//kYw9x++1LNDuGLEnI0shJGqxBCA/lheNwuIC//9uneP3rp/nxt93oQrDh6intjg9+g9//vQco9BRaexwugVC1eR4I0aCewZ5uIrNw4EDCz//8Peze/dgqdm5yc0zdMqu8WNfis4uEP6sXvvlIn//8n+5m9+4DJehb5OChJfcJIy74rlTQmXK5Blhb389xPxJ1Bbnq0hYXl/nKXe4eTM+s6rKrT0tcjJsS1f/X8HQVnLRIocjzjJk5wRvf2sAYDyFsWV7SImlg0hFhHLFUdJhabpO3LaOuQGiDTCWecOCo0AVgEFbjScGmjetdycr+kos4Yjl//jyjJGN2/Xqy7ohGJ2Jquk2xZJCeotV2jgO6MGgsc9MRj90/T3d4Gs8PMVKTG4dGjRUIzxBIQZ4Y5jbkzG20ZIlxuRvKo8hHiDLzHSS2ZDpdsqWL1AjhjbXkNaPvO+ndZDnfim2vwKS15NrZZwlrWb/Bgc2N6zvc9qIdpW694NGjT1GECXMzId2lZbQ2zpw/z8izoiRNDNYIctHEBhLla+dXaSWBVHhegfV6IAqE9LEYRgspczOznJhoqk8rO7nI9v8TQ/nPvb22IVooEbhbadc+eMA3Hj1Zr2zPrUied+ttPPHEE2iToQtJ6PtluDslqUPeosySHWcbxpHPKM2IgniVHqwoCvq9LlNTU+RFTp65cJTRhixJ8cMQH0ueu/Dd2DdMEIXROEwkYFNnM8/a2kHJEDnnEUWR0y0qZ5sRBIHT5hhLGIbk6QhjDP20y0p/meFwyOJyl1Ywy/otm9m541JaLefR2Wg0nI2Ilfh+WBu0Y0oG1hMlKJGkqavpK5VBoFEyACTJYFier2MjC+uqEi0v9dm1szlmLKWr1qE8xzYI6eH7IVYblJDlPlwmslIKrGNytFWkqTsXbVKSZIBUkCWKvOe7zm66CBuRF8u0Wg1s4ZMOnH7S5BlCKKIgZJgP0UUX3wvQoipHZscLDOM6k+d5pMWAMGiS6QLpWQJviv4w4dChZb74xRPcdtt2rIVX3PJsziz1nVawXHgMU2embIzTPgpEGfJ1FZWklHgqwChVJ8koCWmqGQ1zOp2IvDBMT4ccPe7E+kaDFwbkRY6UPgZn6qyEIPQElnLFKRz4CT3XpobpCE8pur0+nheUFUqct6DwFOPyjOBFAbYdO/YLJ90IPQ8zWtu3LNoUNSM/tgUaD2bgBhi0RfleOaiNw6sOQI4Xh7aelSZ7sqnNgyWsAr/VFydZyrrT4DBgGcyYOE5N5QFVbej6DEjTvPSLxdU2lgI/DJHSw+auvaRpQbeX1Yfbe+kGDh/5BsY4T0BlLdJXyLCJzVPiKEAbg/J9Bss5yoCQFlVIMq3H5VuNRQvozM6QDwasnDuPLwThGjSfYrHSaZbBnSel9MYIAVKiPIXv++RZ5iqsTDw3d6/KTHvpVOZVOcbq/hnrqrJYUWrYlVuwVAy8tS5UbkWpLVcl21y2Ry3AbzXQ/SGYAj8IOX5mgWNnFvn01w7ww696MT/0ipvQuuC1t13PW3/tL3nDlftQ4iyBdF6ZO9cn5P0jNDqKDUFBMyxQsQeUpd6kSxRQykmUskJyYuicD546Os/vv/d+/v1P3kSvl68yv57c/uAPvs4df/wYvmyRdHMsikC1XSusWKG8vLemSmwRfOhPH+erXznLvsvXrVq0PP7YAocPL5Ztnwm2XYzb9cSv5UN5GsA3fu3woTJZ4mKffTp0Nvn32tfBdbiJ8zj85Dgho5p/XHh09fe3XSJ55Wt8fCXQGjzf1bwGEFZgBDVTZSkrXlWVnaSrFOZYtrE0zNYLgjEggtJWDNA2w2qJUhFGZ+BlYLVre4SgJOfnl9i9Z4bICzHGp7AaT5WSt8KgggZhGBOKEHKBNBJlfGQB2qYURY6xBZ7XAGVIk4J+t0/kRwjPkA2HhEFAkqZu8ZfndPs9PG0QQjHdmSHXLqqjhMSYAh2ALoybl/O8Nr43CFACYTVpkuJ5bi4VxtBsNGg1WuTSucgYJDIc1yw3YrxotIV2BQuEgAl5idNwunHCSl0Ohqx6tpPOHK2oie+FJDahKDRKCTZtmKm/86WvHOfoyQUaUUwce4R+VLotWPI8dQtOW0afygaTDJbLb5cMt5AIDIF/iSu/WjVMXRCH4Rr89swpyn+VbdDT9ROx5ud4OnLTTA3MVu1JcOjYAl/42pO8eEJHqbW7kc5WxWILBzQCz69HF+eB1UcpN2AnWYrn+SRpildmsFEydJ50+o242STPVqhktoXWqLKqATgQeOuzx1UCpjobndVQuV1yyfU87/lbETgtlbFZ6RFXqjatA2Km0KX2U4HVCKGQ0mJEihWQjDK63T5aw8mTZxAEDIZPEQQu9CulpNFo0W63HW0dBWXIzGdpeYENG2bpjkZgBEqFWK/vmNAooigygiBAKCiMJUmGBE1BTkKaOaAZxzFIy2A4ctneuIzGonCgOk1TpqamGI5GxHGMLnKKXg/f9wmjgGGao5RHELZYXFwmjqAz3WQ0zNBaIrwc31euKoMYImzA4vlFwsgHKXns8LfYuXMnKI9eNkSqiDB0iU1xM8Irq4xQ1nZuNWYp9JAoDCmsIdOjWkN1992nue227QgBL7vpahaWu3zgE5+l2xvh6rZbpLCupJ12bKIQpg7TNVoNrti9je0zW1na6UT1//aN1wCuXF619cuEHL/d58DxYxRpStBoEEeunrXTRkXOIFwbCm1L/0SJKSd7P2hRFCO8QGFMgRICrMJoZzDMxLziN2KijsaWLHoVih4N18x2kpIN1uQly2lqCYqz6pDK4vvONzDPXMKWa7AuwczVAB8Pamt7aiVtvDBZwq75UfZ6O/F7dU31Iq96vQS7dd9xVWQGgwHDUVLqOquzKd0ZpFswecXm+vwG/cz1M0CEATLwaZhSl5oZlIKsv0KeDBkNAqRUxHFAnmWEYUDohSRZn9wU+EKirUAJl3BivRBtLaAJhHL60YlNiIrnLV83OVYJhHG1mcOoQVFojBH4YUyRZRR5glBiDHAqAFneUwNluHwMsKuSmu49ynvnbHqkdMp9a0vtpTQl8wnaOm3oaGkFKSR+HKILzVDnrkRi2uf37vhLdq7r8Lzr9uFJyw89dw+d8yfYERwkn3Jg/SXrvsr6eBkpLbZhsTMA6eSjL5uFG+cXRit8tjiJ5QwgeOhTB/nlR+9i174tq9cp5ZePPHGap46cZX/Hvac8Hz9uojx/4nN2zdwzIbEoznPi/m+QjQb1Pn1w+yu/vpROc3qwEW0V2nj4gWB61s0EFRdnxzsfyxAmmvjEeqdm/2sqv2rztQSsovLs5G7GrHOtJR4/+4r5F5NXWrL89TKsjATMzUle/yM+vi/Gi0lR9iOUkyZYW1pVlcfRBUootHVAUghJVhRInJ+i1sVYeGMngI4QyIqBxgdRIOljjUSKCK0NwpNok9JohCTFgMCfwdjcFVewTvMrhCCXrniIVRbrW0bFkGykSYfLeNrNoV6gsIV1iYueoNXqoHMYJjmN2BAor5wXI2ye0WhGRHHAysoCUVpapCHcYly6Mdj3FapMXbdGEIQxSeluIpUgT3OCwMPkxjEKgJKu/QkrUEKhhAStEaoaC527SRD4hGEL3/eR0hmruyiqKuUfTj+ttcZoueq+Vpr2qjJS1PRdIu8oqSV9kT/Wbm9Y3+B7XnwVQUuPI0j1vLFmQT+5ArGr+4+18OqX3Dge04HHDj5Mns+t/vozx5P/OkBZL8KqvsTE5DHxoToUV4ldSxRnMXUfNG6I5J6HT9aAEgm+H5bZ2k6DFPg+eeEYwCRLUdJ3rGSjQZZlNZvl2DY9WU8Bz/OZ2bAOXYBUloHsuVBsuZKvrCniKOY51+/lpqs3IYC9l7T57CfvXcXEZGnK0sJirReqxOnYcUJQGPq1fYcptZ/Sc9V5pPQAQbvRZrq9Cc+TSOUYGoAkHdYhaV04q6Rut4sxkiI3xHGTBx78Gs++9jrm5uZK/dLQJd8oQb/nVrUL8y78HkURU1NTdEdJCSSbdLtdjhw5wrr1G0tvToXRGUePOmuLLMvo9XrEsbu3EkFhCld+TwiiKEYKj15vgPJc1Yyp6dg9m3REEHhobYmjBmma4/sheIpud5kw8IiiBsvLyzx17ARh5JNlibM0imOMgbjhVq+eF5AbjZI+NtMYW9WvheFwxKGDQ4yxPPzwObJMc8nmaaamIt7wiueBgPd95G9ZXDqP0Q5UXLJzBwuLS3SXE2ZmZolCn+uv3McPvPg53HzVXkwhyAYlgLSCMFQ04nHYPTV9VKPP7X//OY6fXXAG3giyHDdQWQg8J72QgWvrpmz7rl0LbKjIdMCgPwCdYnHZ4RJLOspXRRfSNMf2R2VLLgegklWY3HSu6fdHpdxCr4lQuD9U6bvabDUR0pBnKZ4fUJXAs/XIsXbSdlvNXlhTh6srfeO4AlZ1xPEEDXbVvic/VddML/frwOSIwSBxmqKqnBBVGNlNvMZo0my0Zn9uy4oCf9MmQt8jHQ7QuqxP23OMUpHkaGsZLlskFuV5JP0+Os+I/BCNxbMWUxiazRZmNMCmhStNJwTFGkBpBMgqSVGAEApM9ZohTxMSrcmss6rylAvnYUoWuCypaS1jdrS6h2NHmeqOTUwK1fShsXZ8rxEGY6yrzV4ukjXOzgoDVlt6RYoBQql43mBE02Q88sd/xfdd93ZkYXnBvo38/V/+d161/cm6fNtM0MOXkxVZLnr76zfWtRbZcNmnKMxqJwYOXvwbmyTcukcgpGJmxx523vgC2hu2Pt0BLtieeuhujt77RazRmCJ/2s+tjGb48OPfyyZfcvOPX4IXXmjAPmb1L2SQ3CZXfRYm2agqpdex1baUXo3nTIEQpQSs3ne5bJLj2u5VdEoKUQNUKSWZLlA4Z44Nm5yhNoBQyoWUjQsPC8+NE252rTS8CiNcmLjavxDCLWoZLwbU5HWbMfip2qGTOXsoFZbnK/FLaZSnIjzPQ9gIoRzY1UWAUl5dZ9wTikIUGCQRba7aew2jdMhgaYUkkXTPHqfXHRL4bZqNkCzPESpE6IxhMmS2GZEWIwIPiiynt+ws8fTKCGEsrXaHIAZEih82nZ7CBs6RSyR4mY92ZcFKcCgQpRRcZ7kby6VCC4/QbzA75TPwS5aTJZpRm15/EVRCbkYsLS2xYf1WIn8DR586R6tZYRfJ9PSsq8RVOCDvNKSaVrNDHMR0u32sLRxA9QRK+pisz/zKQg1EfV/R7HhUHW7/vnVc/ewXfluG9k+3Tbb8Pe2Au9ONFImPmISG/1dD3thyEKQEhxOMxuS8MnEOVScah+MmOpK8MKHHU16t5csz7VLnjS51SuVkKhzTprUuB4AMpWKyvIexOaLiIIWrSJFmBpMblAfKC9C6IAoDWo0WxmriuMFV+7bwn998o7seIRgO+wxHq+s7h2HAzHSnLD3m13pNoSRKudD78RNPMTe7njzJ6kSY3qDL1FSbbrcLSLK0IMsKVlaWaDQj8kyTFymDwYBOxy2rAz9iaWnJJbtMRwwGQ6amp9m9ay/f+tajtd7QGFObxhZF4QA2jsFtNpuo02fIk5QwdGFXzwsImi16oyGF0URRRJ5mjvHQGqVCpueaKOXTKpMkonhcp9ddu2Tjtk1kmaulUWQu7Dfd6LgkniCg3x9isAxGOVoneF5MPsoY9VYAQW5zhv0+VgiKAnyZ1OFutzKTJEni2oInyPK8BBLu+Rx7MsaYWZ54YoEf/MG/5xd/aRcvfemV7N62gde//HlYa/nTv/0sw+EQYw1LS13isIHvh0Shz5u++8W84TueX7e9DVMtTg+zsvlaGrFPljkggICFlRXe8u7f5sTSimMdlHR1sPOUNHUrJtc+y4w8RJkQBEpKlOfCDMJAnmeus2QZFotSkumpOc6WqzRr3QJEp5XVhioBqkYnlXG425I0xzIoSyzKWpNXae8QLpMx0xnpYkpnqo3vB86uS8qyD8txnxTjyWXVJnDyRbH6tep+iRrkXGxJayeYlkpDKOpJRgonrxgMBqXIfczyuOoRZaYzFzdgnzydfKXnkqKkwgsUvpJE7UYNfJVSFNW4US4KlRGYLEMXBWQZXm7wwxAVBshQkDSb9Hs9imS13sCjEtKXk7C1znPSCgol6BeJu7vCZWinuiCUHoF0WsfxynwtESDqwdWUkgW3eHf3w7WR+k6W91OWw7MLCUspyoWALaWzgkGWYIRAWcMHjhzkisRleY/mD7B43z423/BiEHDZ5h089fg3xteZUR73mW9N+tgL2sLahYXbb3vnPjbd+BI23HAbc1fciN9sf1sT2fWv+mGOf/YveeDXfwqLxhRP40ca9/jemT8jbszxYPONLG5etwosuuzeEoataWgVC1iNk+DICjD130r5tcl+lQBZsVDVzzFo9Oq/q2o0DhRWCRbjxFKLLq2+XLa0q33uDPIBx4hb93lbnqOUsgaLWmts4aI0omTppBzvv0qGq0gS15Zlye6N2U8ArGPahDZ4wiKlResMT1RljS1B6BF4sv6O086Xc6lwiaxRaImDkFHXMhhqBouGzJ5nlLjxX6ohOk8Zjix5b4SwkqgZIfE5d3oeKQKWV86RWk3kB1hPkWaCVjhF6LVpRn380FXJsYVBKB8viGhJKIoEY5ztmcaicxc6N8JVCZMiIPAkx45+k4V+l16vj8mctdv5xbNlBLHBqPTUTtO7KYqi9IJ28/C4RKkkDirwbZhf7tFstmk3W+g8pdmMqRYleZ6DZ0tmVDAapVgkzXAfe3c/q3xuAt+GPB2efNpus4ahnPz87bffy6//+jdoNC4D4VMUDsA6LPTM+/2/yth8csqoJga3xH76RaspjZArv7zK+LayK5n8XlFk6LxAojBFgR/6aO1o+SpxY1L4ba0l8EOyPCXwQrKC2psO65JLhv0VbG6Z3TRLb6VgdnaWG6/dxe4dMyDg2fvXc9PVm+vr2bbB56N/+WEOH87qxBIh4Mknj3D3V4+5LMcirweDIHDl5ooi49z5szQaUQ2iXRjagSyt87Kze077qRMKrfHDAD/0aXcc3TwcDkFI5ta1EaIDRjA1PUeWFSwvd1m3bkPtAae1dmGL8jyyLMMYB2SzNGMw6OH7IcNkRDJKa+o9SRLniyYEge+85iqPQiGEYxyTjCzPUcJR7ufPn6fVajhdY+pMjgujwbpkKV+OO5PWGsrybMPegFariefJmsY3xqBNDhikF0A10FLqO6V0yU2+wtgqk9/pxfI8Z2F+PdbF3jh0aInf/s0/Y3Hhal7zmtexZ+sG3vCK57Nr60a+/viRidbqWtq1e3dy85V7EUKwc+M03V6fr371AH/6p+fK9gqbNjX4zd+8zU3KEt7z53/FyfllgiBCKbClgbOROeiy9rwROK2ha5fapFghKXJLljqwiXR1gz3hYUp2urC4bPNVk5tCegECas2isBaj1kzSE+CvCiFXrEb9E1vrR3vdPlEUEgS+Y0ssCMzYZH0VkKnYClF1caqSpyW8KQHi0w06E/yMFKsJrmqH1iJ9Sb8/oJq86klNCOcriqiBsVnD0K49XLK0RCEWy4FVYpElCyFckqyQLpnKlpmQgFKlNMC6wdw2BCOtMb1BKRPIyI2+KDwywt1bJcTYxkNJhjpH+l6ZEGXxpeeqw5gCaV3mMtU1jpF5fSEVC1wFQd1Hq4SfUpNeDrqVTlZAac3i2qessz1dgk4qLRKPa5VgX7WosWCkZf6RexygZM2pAMX44X+b2xrwOMG3C6C9Yy97X/MTXPLiV+M3JirLfBtgstp2vPQHEMDdv/LjhL4PE8meFsoa4TCjC2SuIc3LIacCVWPQOAkmJxnLaqsAWCVHqTbnrOHkLNSLoMr6iDKKFdfADVh1vMrX1VrHntcJXaXnbgUCKX2ZRa13pwaRElVWzhL1/gNP1WN7ocv+Je0qIClE6VxhKz02tWZ68jl6KsD3x57QLjfFZW0bYwhDTTbsE4fbEdKVv9V5gec5I/fMSIwZIWVMOw7orZxguXuW3lKPLFPE1jLVaJDnOVpnxJ6hEUakfYNK4dzyKXr9JRfONhkNH5LhImEY4uV9lvp9+okr37zSXWI07Dp5XLeHFgneYAFjEpRyI2uR5ljhdOieUhSZhwhGCM9w5uxB4kGGKBoEXkgUK9ZNd2i1WkxNtxkOnQRHCs95aOZuPnO5Bz7D4dDJqhoNRv0BYRjSaTcAiS8VnY2bwFqyNMdoSXt2iiDISNOUwljC9eswVnDi+Ig3v+Vv2LFjy6ohdVVQuAR+gjGjLi6SaLx2c1V4FvH9DeT5uBBBRSxMGET+i9u370Npxz6UEy+6H5MhMKgv2lLWLS41G9V+ajoEiMKxyazneaU9kAuvuofj1VnCYegqyVTWA6PRiDzTeIFAGkUgo9reBFwoIR3kbNg0hx+EdNpT/PgP3swbXrl/8jQB2LUtZjQc8cAD9xIFHkrlqxgRDeQWoriBMq7KTVEUtfbQ83w2b9pRM226sBSZBSSjgUZrr2Q1c9K0j+/7nD97njQd1QkzFXCyVpQDAwiZ43lBzdhVg1xRAkmJJU3T0tuwqMMZ7l4LpOdAWCOKJyw/VL0qCnzlpARK4XvOHDiOY9I8cwazEpIkodfrIsSMY49LIbBSCoWPwFndSCFIE9eRpC0QoiBuRRQ2AySFNRR5Ua/yRJnUUBQOIEdRBKWFjMQBW2PLxKs4RPrOS7M7WF0z2o+38YW7nkL6X+T7v/fF7N6yASzc9KzLnrY9z0QhH/7zz/A3f/MZHnnYcPLk5fU9e93r9vHUUz2kB1898Ch33vsoWWE4d+4MSrnEMGdoLpyhtXB6GSkdIymkQEgPN94a8GUNiIyxJFmKKQxBGGF0Qa/brzoU4FbRMhvWjFTt07hmkrbGDdqWso9BORpQE11YSg9Wd7+SUVqarYsy6cr1hEp6BCVrUQ9c1cRVsV8Vs1nptibPfDzOjTm08m9b84wuzI2zHxKlvrUeFEvWxFrral6XDg6q9DzMnwZwWEyZUV+OR2XWM7jEJxf2zTE2Ke+ZxWLIy8QYW15MVVq2Zl1FmbS5FstXz6UMxbuKRJKh1VhfIQ34ngeepEgc+y2kJLcGZYXTCFeDf/3cxgxupYiqqqtM3t3xX6I+l9XnVF5DOSYXWiM8N5E1qC6m/ADjSQgLP/GBz6EXJ8GSqZ9uNU5dkJS1ZnPPUK0aiye3YONGgpFCvPsD8O4PrL6v2mAHA0ySVM2xPMc1xwBku42Ix/PH59/xx3zrZ/4jmzZsJE9SunLI4Y1nYWJBYI0lyzOSZDiO8pT3eJK1q22sGN9HYPXrE4DQWkuaOQ9O3w9wluACWWr+pJTk2hXeUMpFLWzZN8GNG7rIys969dwjxFheJaWoCRPXXEwdGbFWYIRAeqIGeEAdvbIYZKCQZVUVWWkKy/WeEAJlo/paqvcnrzHTibOLKvdd5s2Ra2dMLjKJMc52xxQ5WM9ZnomCrNAI2yBQHXQSEAUxceRhzRwyCxmgKNJl8jxzWkRtMcanGXWYT86QkTAYjujMztHv9ogaMSsrzuWlN+ixfv16stFRPvLh30T5LqEzGXWxhabZiPB8jUkKwkCQ55Y8SbHWeWVKXGKuHzhjdqEtoS9oNSWtqEnoNyj0iCDvMOqn9IqcolD0ewOkEmRZQqfTYpQNGfRHxGHD+TEXAisjPDx0Cm0/IkkSJ31JBa1Wk1zkpGlONkjRWYQ27jmPBgVSWhpxzIkTSxz41rCsRT5ui1V0qOYfL+iW5WK0HNMmo0+1DlTIcgFhqzVuSSwIpqeztTt82u3bBpRjsDihkqoHRLF6wC1XZNXkUSFnR9dTZ5KGYcit148TYU48dRxjYDRM6lT7+ntlFmEVBqhqjSrPogsPzyuz2cS4RiXGMj09w9TsNGmS8tbX31SDye0bA9IkAwxZnnPnnfdz//0PMD9/njzPOXy4gTEbx+d2/Dhh0K1XHkIIssK4kJK1EyF4W4Ktkk0VWR1GqMBnxS5GUYTnu5VgnudEkSvjVQ1qjv73gaSuRlFJAkbZiCzLaDeapTbGonxXkaFiTd3gppwRvFJIHBCPogiDA4R5ltDquBVXGEXEzYaj6rUuk55C0jxny/ZL69VsHDdrthFpsdpl0Pl+WF6/88G0AkQZGvI8Z5+jpF8OaGN9UG1x1GjW1+6H7hqsNiUb7GZ2KSXDUZcvfm6ZCvU89ugMh5+Y4StfOM23vnk/P/G26wn85poWPO5taVrwS++5mw9/+FtYu42i8OoQElB6RmqyQcE/3vkEi8ec0EaIuJ5ei8nl4gSJc8FcK1QdPhBV3yk787A8LTOqasa61132uWvHxlYhLjux84llqhj7vDomz9RAUpTl3ZSSNbsnhCBLC5S2LvTje/WxrK3AifO2dDou148dq6wdSGIChMjJuMXkdbvXK8BbaWArrz9j3XvKuEzcCtC6GskWhCUuLafyQlPoAk95dULWBYcT0hnZWxwotAZdhjDdCQuQzlhfl4kuQnoIU7lQTKzOGYeyjbjYQ2WiOYnxZ4FMWKSVtDttgjBgZXmZRrvJoD9EGoEW7g6rcvSu4J0pQbCoHkR556RwnpH1Q52416vPmbIeWWlFX76nhWur0kpynZFVZY/KsfTVvXM0P/R5Wp8+AMCh5RUKM8lMuBb/rl/4BT76kY9w6NChfxZQzs7O8qpXvYrbb7+94k1XnbUfBMjlJVheQgB/+sEPMj8/D9bywTvu4IF77sXzPH7qHe9g2/ZtDIdD3vWff27VLX/2ddfxlp94G1prPvCBD/DIN78JwIt/43/zyV//DTr79vLlu+/j/OnHSB6+g1avX39ZSEGjEdFuN8unV7Uf1yZXaSjNeDyfvOeT/ybHfalw1YN8AShnWSZwv1tBGJYMpTagHYiUogS1hZ3w85zsY+6cPOWiNbXVFDjLrdIHEUDbChw7VtPNN+4qXZa1xUrnoatzW4+1uvyslOPQ9yTIrs5FCOUqjNlyAWsMYRXS9QRWaZb6y4TNBmlm8LwIJSTD0TLSlyh7HqTCmgFxA+IwIi8y4tjHekt4eYguZGn9FzHoF+giYeO6JsP+aXTvPKZ/Fs/kxH7OjisvoTDOeSRsxM7sX6Su2InJ2DY3xWxnirnpGZZXznP6/HmOHxmhrZsnFR5ZNiIIZOlSMMTz2oyGBRvWb+VZ13RYWe4x6BfIzJUHHo1ShsMhs7NTNJulVEy2Spleh2BjQBjGrKw4dxNhHDAOAp/RaERrpkGr2WQ06oG1+CpARUFJUOV4GPJshO8rpNF0/CGzU+uxukDrMhwtHEMtS5mTLEk7Jy2ocNIYc0kpap2u0RZZEkqIqn1al+chnJNEURimO0N+9u3/lxhKKd3KzpqLHWCiA5ZbHEVEsbPdsdbSaDTKVVsHzwupZuAbrtnFzVdvBmBdW/O1e74MVk6EcJ3OR/lulVeBLSFc+TqBM+r0fEVW6HJlNhZHJ2lC2HCZtD/0yit5wyv3lcfK+dznP8uRQ4ewwuPs2bMcO3YUpAtTV+LjyYEkGfbpryxRGI0uFNbisqSlRxC42ymVQGAwWuOFAl8IkgRarTZ5rmnVCT0arcsBRDgmQ49GFFYRt6bdA/JclrI24JeZvGEY1kBtfdlAvLBaAXt1WT2/zAwTQuB5rgY3xtavVzXQHROlaxEwuHlXl2Cy2p9rA24gMuWxfD90z8ATdcgbGH/ed6tkYSoNkS59JwNMmcGNNXhlmc28MPSHBWlRlGEZx0xGnkSjV7Wv3rBMYik1vStLpp4Z3v8Hj/K5z57i8stdtZuJ6bf+67HHFjl0eBnsFIgx1V9taarJMoO1gmdfcgUfOXEaXeqjLjqVivGPtaxc9Z3J74mSeqmY/Ylv1D8nWaOLK2DKNyfYS21Ksb2UGGOdXERUg0eZCYwhL/IakxaZRotyJWrFxPTvGEkrRM3QaFOQTbKmTIBJseqvGizViSMVBi5/r9qJ73tIIcrs0yoa4UqrCuH0wMPBiLyMBiixJtmjuhPGYHF+jY5W9FBKEvgBWZo6htIaBMrZ8djyO4pV/VxbWzOpRtjynlyIKWsQWq7oPSlItEb6Cl/55FlOHEduIeh7tNstlpe7Dkwbi4esG0vF+Dpmtbx3ogTa1WN2R13TjiYYyomojwPwbsLJrKawhk6z46IcNhtnlwO5EOy/8mpuef5t/OVffLRsq2MO1IUrx8+0nowY+wgHgVsQWWtZWFzk9g98gC1btzI/P38BOKn9aMtdDvp93vH2tzO7YQPK85jbuIGXvPglfOMbD/HRj/0FuihYt2Uz50+drq/7LT/xNn75F3+JqNng537+53nnO9/JysoKFlj36u/h+G/9H5794/+WL3zyYySPB9CbuGc4Bi8odeiTrI0vvIuCqfF9noz+XAi4iqKoEzEArLAYbfE8V6M6S1O32PeqaJWpCQIpHchxhTwm21aZoGPA6CoqJSaiFiWLaC1+4MbkygJOqfE8MJnPQGlAXwFiz/NQjRijq6Q496+21yllVO1mzGDQQypJu90kzQZ0u4usrCwRhiHzCwts32gRxXHIVzDaHWO2KekPVgj9aVSU4QuNLlpMx21U7uH5XQZLAwY2xRpF7E8xTAryYoTWBcIa7r7rPpqqT3fUpdFoEDZCTp07QbPZoLCGwZmnmIun6Mw2kEKyffNONq5rUyQZ+ahgpr0OqQz3FU+gwgib9SkKQxjEWFKMBj8KEFKji4x0aOivSM6fKmg2WwgsZ0+MmJnpECrJqJfQaLfwvRhdSIKggT9VkAyHZMmQuZlOCdALzpw9Q0c1mZqaKu9nhq8UutA04hghFL4XEfgpWhe0WttoxmHpqlZw/b6CxRXNVNs9zzNnzxPHU1ikw1VC025FGKOZ6rQZ9gfkSUqj5UpMW6VAKooiJ0vdvBDGEQJJXuR0e8us37AV33Mh+JmZNtOtHs3mhRXjnm77tgDlrbds4UuPHYUwWRUamBTsVhRqHDe4fPcmdm2fWtWJ3aBsysnbDaE/8IpxSPKTf/9Jnjj4OMa4cnbGFIRhQJ4XiMqXkUrwPAZOFskoH9IKWzgsOR4Spzod2q02r3n5Xt7wyn0IAZtnLZ/61Ke5574vkSQ5vgCBYv3cOvr9Ac2ojTDOrmgSxMzMbWDjliayBGMVOAsi99NaW65AAesMj60VKK/ACh8pK2Nv8HxZCrAVWZGXoWW/1A36pR7FWekYW7jXtMvCjmNXurHSMBoxZkjXhmMAtM5LWwhdi78LQEpFWhR4MmJYJu64z4DzobSYrKhD3KIMj0kpMYUhyUYIJTEjtyoqhBMeF0XhmMqkQBeVVc8YzGntMvWFBGGdibQbHB0X4nmqZiJ9X7nJ3SgQ40Fw41YPzy8o8nqmdVt5mMOHVjh8aOWZNW57IVg4cGCxnJ8FL3z+Dn70Tddy+x8/WIcoxwetQJ+Y/OuCrVpYUQKVizJe9X4tyLy+mPF3mZCcrF7ECaDQhjAICEKXdFN5tI5GI2y5SDOmSqAZa/7KvCMHHqvjTJyerNhRZJW+A9YxZw6YVJGIC29NrQJ0FNz4A9ZBI2MspnDAbhzydgAlz3OkgDCMSJIRzWaLfp4/LbhW0sMLIrR1cgxtIS8MaTFy56nNOIRajlVWuuGizow2thwYBbZkd0V1AWuI0XG4urIztxSl5EGbAl3kGN3ED0PiuIFXhiy1dcC3EGMwuipZqWalxoxytW7ATlx9eQ3jNYUL3RtwiwDHszrrI+GiFjPT06izpx1gnXjIfl3benyd//E/voM9e3ajdcG73vUuAF71qlexZcsWRqMR73rXu5ibm+OXf/mXUUqxuLjIL/3SL7F161be/va38973vpff+q3f4tFHH+Wyyy7j3e9+N9/7vd/LHX9yh2vlxmAyF5X53fe9j7NnzvAb/+//ptftctNzbuHY0aN836texWc+9Wn+7uMfX/2sleLs6dM1iFs3N0ev263f3/qWN3Hmrbez8Ud30p8YE+utDBVbI8YFBHDlNMun6z5W3aPJ0pWiMqIeL7ShnJe8JkWuqbLBpbSucIKxhKGPsC45UmuLV2rpwQHzLCtApCXzxzjsLsBTbkEeB359LCld5adqXHcgPUPJopaHWeuiR+6YOVHsqhi5sVWW988t6qIoQuugBp0VsHYJsO6cQ2kI203AYIqUSCqiuVnWz85grebSHdM0ovVlwsoGjPYxhUVZjexIEJIT547TarUJOhnNsIcXw54Ns6SXNBn2LUePHcTqZYznc7bfJY6b7N+zmyiCTFuu3L2HPM+56fqbuOuuu9i4fgNB4NHpdJiZXY+lQArfRT9kxmAwIIoaBM2As4uKIivQFCgvQJY2SKNRRuC3MWaELjRhEOMpwcriaZJBl7npiKXuCjOdJkUxQFjF7PRGgnLObM80SdMRUkJ7/QxBEFAULl8jy0ds3DhDUWRYo/BL7CJxlnaeJ8u8A4vyZp00Is8x0mO6M0Xoe5hCs2W7R7st8GTE/lEbbTJyren3XD6D56coFdBpafr9jDhsomTAcJggJSwunWOocnZeshXwGCRDlGyQJCkbNnoMBkcoRMiGbevpdk9x+sgizVbMLRf2notuzxhQhr7ihS/YRh4+h1NLE0u9OqCxert233puunrT0+zNXnQubfl9fu/3/4A4btIvzVnzPAch0dZiy6QFpRRptcorG722GYHfLEGW5Myps+WR4NUv3c3Ve+e4+epNCCHYvink7nu+xbxusf/a78KLPQLhYYTG2KwWD8dBhGwv85Wvnq1Omw1bdrD3qgZZkRMEAX4poM6LrM46r+x1Kkd81ylFqTuRJeuQg3T6mVxb8H1ya0lyjTXSZfMhSUYuxI0RDJK09GdU9PopwlMMM+drKawoAaOowWMVQnZhDJdRWzGjSjrAWlhnBDvMEsIwJM1ypBJIxuBTKUWeuOuthdi2VKBZW7PWLvHAhRylVNgiR0gPrzRrB0Nh3EAny4xnYwpXVhBnC1WthoVwxvNFzTi7cHmW5bXZ+voNkj37JedO25rFqXm1mqgpZ+sSzJZPZFV4tmLjksTQWx63x0OHlvmd3/k6P/3TzybwPN76Y8/m7nue4sCj5+qJ5F/eJoBg+UppgEMFA42g1u458AgiHuC3CiwSo50V0NOGGMtwtzHOD63VbmGMZqmcXKempgDLcJi4SglC1Au6qoSiNtVyzzEeYxkLdRt2jKLG4qphwGSy3aror2NXaqDjAJmh0vqUd0OIuk41uqjZnupZV+212XY1k7UxpHmKF3hko4vff+VLBoXzR6wkAFJ4+IDwwHplGIhKCuIRhD5ZnjsAZgx5f4jOSi+76vqEA4+eXM2MWgFWipKBt2Rl+VZJqUdSkiTPaUQNBIIkSQl8nyRNsBIKUZZZxOmz3XptzI5ViVXudzNuytXDqRlsWzOYFuGS7azFoywVZxx4WVlZYWWly1ZdlF93x/HDAD+K2bZtG//+J3+Kd//qr3LppXuw1vKzP/ufmJubYWpqCt/3+frXv84dd9zBz/7sz3LzzTdz4sQJfvqnfxohBD/3cz/HK17xCk6dOlXfI9/3OXz4MB//+MdZWlrijj+5g9m5WRbOncNkjt18+1vfSnN6iltvvZW3/8x/4Ld//TfYsGED//SZz/Dxj3+C//LO/8o3Hv4Gx588Uu83y3PWb9hAnmfs2rWLKI7RaersYADVatJ6+3PYtTHgqFrz3LATYBImrYAq5t3Jrap7PQb2Qoy17ZWWutCO3Q/CAEOfUTKk3W6SFyPXx6Sk13XhT69MAPNsCea0xhhL1IxY3+mg9AyeFzjCwgvxyyQ8pdxxtSnQeVHr4Cu/3orhFKQ1EK008hjn2Qigi7EvYrWgtAEIodC5ro3PnbzG6a596RP6ISJQjLJh3e+FcIUGRv2UOI6dFMb6dFckUrVI0hWwmu7yIjDk6JMH6bQUXhCwfC4DKbl856XMTcdk3RFx6DM3PcXi4qVISdnmYuIgxhSa6VaTarmXFZo811z22tfQarVQSrGwtMRykjIYrNBotPGkwtgRrZkOqdb4DZ/8rNPrt9oNBqMeILDaEkUN0tSgIoUnQwbdIXNzU9x0417OnDxDI2hy7ZW76A36WCNotJpugTscMhqN8MOAbtfQbEUUuaHbHRCEEb3+MmEYMdWZYXFxEaVSmo0QrS2bNmwmG5WJPVIihCIdDVlaWnKyCU8w6i1B6OMpCcpnYcEjCguMzijSjGE6ZGZuloX5ZcQoJPJd8RahPJQVmGyA8i2xF7FhZh0qDOgNhviRRFnD4uIiK90em7dvop/2aYcF86dOopTPVLNVM+DPZPu2NZTf9aKdSO+ZH2DzuoBk5NzbHfgyZdKIS8zAWqywpEnK/3zPH/HoY/Ns2jpHmmYUKUg/J+17VBXYpPRIRpCnOTqXZTjYoAvwvHI9bgM+99mHePu/W+LSra5u683TDty2gpSf/U/v5aN/+Xk8LyAMXEjea+Ho5iDE9308z8fzPFYWOuiipHwFHDxyDNm0eMqFKOI4phmHeMoS+JErrdiZJooaWGsZDAb0+31H2xs36OgKHEzo9YQZhzcEUORZPambQo/DKkpihXSejGZiVSorLz+BUuPQE1CznVhQE+WgqhC3MYbA95w1k1qd9VfrhKSzPanug534n7DUFTIMZXhTqDoEJwQY4QZgKWU9ITrSpzTYNgaFAG1cbeTqvghRluyCNM/qaiIWx4r9wJsiFs5ZjB4zdWu3alKu97nm/YrHefxbOZ//tHtGpmQsP/zhR7nmmnW88Y2Xc667yO/83vP5n+//OA89eoxeb+TAiS1TO7Sus2or1mh83FJHLJycwk1mpZi+KBATYSWpQERDV3vWyFLTNbFbe2G417UBiKKI0XBIu9PBD5ysQCnHgmR5gS5WSxvcdyfCeZNAssK4tuTOyt+lkHX1njFDOdbsOKAy9pq1djJ8OnHQMqwsS2BZn4e1eL6i3W7T7w+wSIbDIc1ms3YXeLrcxedcu5uPfP4fazuPSWp0rFR0cpzZuVmuvGwne7ZtqJ/Rk6fOc+DgMUaDwaokDKCUCoy3LEmcrZMpc7GtKNt/gVQe6zfMkqQpuigwWBYXF5menkGqjLEdki1D3KLWPvqhTxTHq4B3xaCuBpPjc6kStyjbYpqm5GmOrKosuQ+59iAFYRC4r5eX54duzAiCgPf8r//OmdPn+O7v/m4efPAh1q2b5amnnsJa51Rx8KAzkzxz5gxJktBsNvnVX/1VOp0O69at46GHHuLMmTPj8csYvva1r9FoNBzrnGXMnzmLnbD26Xa7zG7exD99+h944YtexMy6Ofr9Pl/7yl0sLy/z9fvvZ9/lV3Dy+HF04cah3/2N3+Tn3/UukjTh5MmTLM7PY7QhPXe+XlhO3XIDR9/646y1PlESGiEkUY4VCdaA1gLPtyAyZ+sFCCkdq2RdQmCSJBiRYyTOZsZKdJHjhR7DYZ98lFHkGmMkvaFEKo22hSuBV6SMNOiMuo6zLiyeF6GNJc4izq0U2FTQ6czSbszQaXbIC7eQFvhI6aMImJubw1OKJHEldOM4dobcALJNluX4UuH5gkS4z3h+SJ4ZRFB+Li/dI9AoS7lQl0jpuYSYoqAocM4cOqUoK0AFKiqrvgi6vR5CFO4zNmF+fp5BssDy4hJGF5jUECufdkMwMx1wxSVbyIuE+cXzgCZLc+bi9XT8aTrbt7Judo5+XjDSIUEgSdOMVAtUHDG/dI4Ty0to66QDgXIWdnGnxcqxQ/h+SKPRIBn1CMOAxHRJhpTzdIC1AXky4my/ixENhI4RuodUkOP6uhEGmRV4TY/cDAnjCM9v0IjnmOnM4Xkw24rq6Ek2zDCZZn5+HhUFZEVOt5+AHNHrJ3Sm1pFlQ4puwVRnPSOdsX1ujnarRRTEmLxACsvc3CxLy32SPMPzA3ZetpssNfS6zj/aYClyTTbKUbGk1xsSKjcv+GGHYyeXCJox7XaLQKfkxZDe+QQ7u44ghkGheejwYTZu3cL5c2fJ0xSKgk4zotEMWddsMcpWaE2FGEJ6KytgMqY6M2RPZ8F1ke0ZA8o0dWFQZSxKw1pO8gLuxEKWFfzhHzzCXXcdAwRxI8b3FWmSkqYpVTEni+XRR89x6LAE+xpOHCsHflvtufoUayaScWjOif0rCxRYnIdf/MW7+Zl3vICorO+aZZr/9Wv38+cfVgj5CvIciqQcU1cqHUyd1zlmbiYATqfTYHa29PjCIoShKBK0VhR6RJLlLCwtgx17fIEbQFyUreQQymPZat/lRCouosmpdY4T112JbyfF4quE5NUnJ7RB9Wsl2yLM+HtyTUhoLcCYfH8tUzYpTl8Vmr3I+QCrTOcrBk+I6glDXdh3YlNK1c1hVWKYL9i0dVwW7GLHvdg9mPyce19y7sy48oCwLilHA+973yN8z/fsYus6t7D4rf/8b/jQ39/NH/7Fl1haHk2cD2Pj68mJf83W7wOUTroVMtATny2ANJ5s+qu3NFz1p8DZ6URRSJokZFlGGEbEsSsR5vkeSTJyzFgpGalE2w5gyNWMaxX+q4/r2OXqekwJjF2SjitjasufWEFVFs/d2/JLZcdcBcnKz+sy4UiUJt+uMQiyNCeOYgfKtCaMQsIgZDQarropo8RNaKHnccvVO7np6su5635XfrFaaHl+gKc8jLGsX7+OZ+25hNe8+EZuftYuJi/WAvcdOMKDTxy78MExblOHT57n6Ol5et0ui/PzFGmOrzx0yVQaY+h2+xhtEMrVGnchaYspy0z6yiMMAsIorNvi/j07uHLvTlaFtZlg29duaz43eW6Dfp/hoE+WZljt7EyEELTbLVSWIoREKEl42U46ZfWl48ePkydD0izj1KkzXHfdtZw4cZTt27fV41I1FlQJec997nO55557+OIXv8ib3/zmC8aSycQVKQQmz7HFOIPcJeoJijxn3/79nHzqBFmWceCb32TXnj08eP/97N6zhy9/6cv4QYguHEB64vHHecdP/iRTU1P8zH/+T+SF04Rl587T/9ajtK90jg0ztz4H8cWvVGcDWIzJSYpjLKycYTBcJgxiWq0pNDAYDF1CnOf06BW4hIDllcVaZhWFjTppcjTMybXzHAwDyDMXuQn8EKlCt4gTEb3+Ir4KaDZjlFKMhjmgaDbajjG0Ba2pDqawdHuLZEmfwaDvQF+ZyAgJJ84GhGFIlhV4ImB6epYkyZDCQ5ucdXObWVkYYLRgdnZdWTQix1POgi/PdVlzOycIfQpdEEcNijwHCpKhiwz5nqAocjABUlikcsmWUrpiF2HgqtTFjZDl5Xnmz5+h4S/QUjmWjHimQeR5bN6w3i2WTUgcC3Zs2YiV0Gy36PacjnHL5i0sLCxw4sxZrM0ZjgpyrYkaMWeOPo6mQNuCAkXg+Sz3h3Q6Hc4unnTOL/kIMxzg2RitDb1BH6maDNKE5dGAxaU+2y+ZYzRISNMRalYiMklepFSliOMwxGqfIpNE8TSLKwmjQtDLM1bmz+H5FmslzbhBmo5I0lEZ5hYMhwNyU6CEZXZmM2FcUOgBabrEVGc9i+fPsXn9NuZ7PbqJoRUbimSElJKl4WnyfEQYxsSB4psHvsXU9CxhI0Yqn5lN21leXKHZaOD5lt5yF1M5KHhw5qknaegOqRG044CskKzfuYP5+UXOnTpPbi3WExw8cYiV4Qpzs9Msr8yTeetQaewWGkrS73fxlCuAYmzG8qkVDBfXq19se8aA8vWv/wSXXz538TfFxfmCRx9d4NDh5Tq0MsmIlV+sfwgEUs4hAKPLjO5/gQit5tu1f5dECnfccYSvfGWZq67aAELw2KOLHDq0DDQvOjY/3TZ5HjOdaeamvZpNqq7FQE1ZT75eDcJa5yU/IuvwpRC2Bk+TVkAX27Qd63mEnfRBsxcApov9vQqYlhmC1ozBa3W+FwWgdhIgrAaYk+9NAuHq7+ozcuKyzKrduwHeZXytue8Tf1fi9Ysdp7qWZ7JNHnvyvigEwlx8JXbo0DK/8iv38lM/9Ww8L0JKwWtvewHLT7b5wz9+cM0zuxgC/L+9VVYPgjRNCcMIKSWjcrDKMsFwMKTRaFA1/LE2z1l5OUA4Dq3Wl1LtfyKkLcT49yqzuV4sWceSxnE0scBw+0qSpFxIVgx9FaCdeJbltRhjWFpaIoxClFRIqZBCsbLSddWZSuNugDTRHDs6z86dUwD88CtfwGNHTnD+3HmMNUxPT6O1odFocO3lu/mB227g5mftqtvQrs2z5GUihV/aQN30rF3/4l2//7Fj/NUXHuDYmVlWVlY4d/YsOrcl02jpdZfxPJ/OlCuEMDPjdFXWQhzEXHXZTq7et7O+0ddetr0+rqj/u5pdf6bb/Y8d46FDT3Hw+BmePHmOXq9PvyxTe8NV+7httsXszlmaN1xD6wU3ot74OgC2b9+BLVLiKObee+9h9+7dvPOd72QwGPCud72Lfr9fF04A1y+/8Y1v8NM//dM85znPGZeXq0OionqwAEx3OrzuB17DH99+e72PdqfNe37jN9DGMBoMePf/+J/4ccSf3fGn/PwvvIsffetbuP/ee1nurnDJJTvYf/nlfOKv/4Yf/Df/hptuuZkkSfjtX/8NDONxYOHOr9SAsrl7N/7dQc1+g5Nu9HtLMDtH6Ck2rJul2x9SaEO72WAw6CEsjAaDsoytz/z8ArOzswhbOJbcajCGTqvF8vIyUbNDGEb4gWPOAj8mjtroPEfrlLgRsW7KAavqHnbmPEbDBN/zyYzGCslwdA5rBMkgYznLaDdbCFwEzhiLJWcw6mOIEShWhiv0R8vOosaAKXIWFk8RByGDYY9e0sT3YjwVEwZNpMxpNqaIwjZ+4GF07mRJZPQHy0R+xFTHJfYUuSJUEXhuxWuNh/UyEAYPF+73lE82zJluz3Ljs9e5BFkVY+yIQo/I04JCGPr9LrnWeGVCyKC3RBwtMxr2CZTHU6eeQgiI4ml05jLXfWGxac501CBJnTezQjA3M0vRbLPS67Jtdj0qjFBKcfr0aWRksSbFmoRRmlLYAj/0aDY90nSJNHF93dgCJBhXwBSpIMucXKAVt0jygvmFs5w6I/CUpb8yJGrEpIXCKEOv32Nqqk1iEvAEgYgYrSxhlKGfDMiLBCE1zaltFEbgNTNOLT2JDcEMQrLTjn2c6Wyk1YgQ0pBkllNLx4ibLU4sniI7N0QjODZ/CoFHlqegwJc+WZKSpiMa7ZCZrbN0V4ZYPeDM4il0Zjm2fJ4iHyJkjgoEUvgM+wVNP0RqyfYtu+ku9zC4UtWeJwhnZ0Dlzn3GbziJ2dMXnrpgE0+ry1qzef6v24sOaxcZ7C72ORd5Em7FLiZCNBOgknIC0kajC71q12vB48VeW3sp1fjhEmfERb7x7W2eD2/+9zGbtzp9YgVO5BqGR9QT8wRAlOICFm0tKJp8/WKsnmQM/CqN5Fqw93RsXHU+LruvZBEnAOUkszi5Scuq69BceH6VTqfS7EwyhNKuqb4wcb0VO7sW0F5sU6yx8pi8NwLkRVrn5H2pQvJrt+oZCmM5c8pw++8lFHnJTk7Y8CkFl102xY/92FW8/OU7kVKQFjk//OZP8K1Hz1/0nL/dzbE/YlVizL+8WdSur2Njp88q8oK4ETtdK4B1ut7RaMT09DQrK90a/FkmFgbGTbLGjqt2rF7gTICbyXMrAWQUR1ig2Whw5Z5d7Nm2+YIzPXzyDI8cPMRgMEQAoxJgVkDUWJfZbYwlCkNGacr01FRdbSJNnbuD5ym8fD3/7Q0/zguffwlWCz74wQP8yI9cyaWXdnhqYYGP/NO9/Oknv0Sv30MISavZ4I3f9Xx+8OW31Feza/MsvX6fJ48e48TJE2zdup3Ldl2K56txiLSmxcuxxBuvwQPf54kT53ng8WN87PP3c/jE2VLiMnBWTdYShCFBELCyssKzL9/NVZftxBjNdft2ctMVlz7tc965cZo0y6BknytpRTWEOEDOOLJRWgpJqfB9jzDwOXhyHoB7DzzJQwefAmu55rId3PysSwkLzZZBvz7eLW98Hfv27eElL34xusj4td96L6dPnyNNM5rNBnNz04BjJU+dOsXmzZtZWFggyzI2bNhAv99nOByyceNGwjBECMH8/DwzMzP0ej2yLGO6M8Ww1yUZjli3aSPzZ86uumY/8JnbtAkpBL2VFXrLK0yvm6PRdNY+/W6P7tISylN0pqdZml9get0ccblQSoZDlubn2SE9/ubf/Qz73/OLAKTnznHnu17P8NjDWF1w7eEpvGiGe374+SzsmKXZdNp7pXxQUKQJzVZZ0resIW+NqzA2GjnA0Ww2ybKEqnIY4GrAK0WaGLxAY0zBsJcQBAFRaQmjc48ocsU7iqKg0C7BMklGKOXC4n4QlKV3i5JZLBBl3fswDBkmQ5c8aXK63W5Z6nacgBf5HllqaDRa2MIQ+BGj0djnOAybFLlFyZA4ijCmQClBlqcYY+i05wj8iJWVLt3uCtPTM0RhizzPCSMfqxtlKdeAVnsa8Eq2U2OtJjMpnmzjBT7GJvheE11YgsBZlNlMEgQSKXKGwz7WurK6Wucu5Kw0g0GPqExqUcLJPZQSpeG3cyhYWVzCL6Ux2jgQlI4ShrpHEHpoXZCNJHEcu/vW11xx+SV84jNf4W/+5osEYZPCjsi1JcsSAk8g8dACWq0OS/MrvOSFt/FDb3wuhx77BoHyMNojQJKkGZ2ZaZI0R3gKoSpZTkyGRghXgceUVZWMyBCeIks8gnCFLFEIvyBJ++g8IvIjrC6Ybu8gzZcZDhOUZ4kin6IoSNOcqtKOsR4ITaMR4HkBxkCWlt7VRtPpbMbklqLokoyWaETtMhE3J0sFIrCEURNrnBQqin2UEpw7N19bVeV5Thj6KBmQpYaf+9nfeEbA6RkzlOvWO3uFC/mXiQlnDV6bHCwFzvB3NEjwlMILnSfX5H6sdVYnSZrSXVnB8yZYuCqMJuqdTxys0nhVIa4x8NDa0Jlah+cHVOax9TlV7Em9h4nzWXX7HOOwaYtkbpNxAEZJVH2NtgZ41alNsmlSSldXVdo6W/bp2Ly1Wx0yZzUzN8ksrmUrJ783+Qzq3/XTh6gnmUQhRJ2UO6mpRIw97nQZfq+BLhOAQwiXTGXtxJOaCEmb6hjWmbxecN+fHmBOnrdi3C4uzq7iElsmj70WlFrLug2wZ5/k7CnLaGTpjRNGabRgYanLe37tLuKG5EUvvAQB/Ni/fTY//98+R5EXmMmJ/9vYHEjy2L9/PVfsXceBx8/z2OPzY/Z7oqrGBVvUx0Z9rHWLjFar5Zie4ciFqnC6OJfkYuvQaVGaTVegudls0GrNuONpTVFo0iwjSZIa8FH2lyiKiKIQLDSbTZ5VAUghuHbPpdxyxb7ys2sXN5Z7Hz3I1584jMVy+OQZvnnwSQYlsBkOh2VCGxS6oBE7NjgIfLQ2+L4iiiOajRavff7LeOELLqESAv7jPx6j10v5lXffyt5t63n9y25i99b1PPjEccBy7WU7XHgb2DId4/k+jx06zKOHjrA86CPTjIWlJR49+BiznXUIBLrIXNWRHDIzQEiPLVucJ+2eS3eilGL7ujZ7t93A9Xsv4d4DT9ahctc/x5Kea/ZsL8Pr475B2S+2zsYkoxFpliJRHHzsYf7i9/+hTkZL85TL9u1yWalS0AibzJ9fdp6vgSCOA9LU2RNt37mHS3ZdQeL5bJ7yicKYfdtu4qYrVjOuAgg9iShDz2o44J47/4G7PvNxAM4MoEp+GAyGDAY9Jkf+06fH9j3nzp2rfz979ixBENTRqMWFBdfv8pzFs2MAuRZMAuRZzpnjT616bXl+geX5hVWv6UKzVL62PL/AMqvfB8jOnKPo9fHaLVSzSWfnPobHHqnfN1ik8gmCiNHQJfrFDUUycJXR8myEKMOgQgjCMCTPcvr9EZ3ONGlS0OsNyfIE33e+vn4Yl4u3DJFmtJvO3q3X69Hva+d6USiytKh1cZ1Oh+FwgNY5aVIyuzifRyk8pPBIs9LNQ2c0GiE298iNQKmYUCkaYQTCkOc5nekQtE+7IbE6Z5SP6PUGSGVI8wRrc7Kk55hK4dg7i+XEidO0Wi2stSTZiCwt6Ha7tDtN0kKxsHwaKSVJMiIsQU4cx5jTwoX3raDZaWOtRokCT3aIogZxHKKLAJ0JQt+1pyBu0RukYDSNRgNPBhgblSbvFmUV7ZkdLtknS908UxI2kQcoQ5GltNq4hE5hGCUDAmHxowQvGaGLhDiG5tyMc7kY9PEkpJnHqZNLgKTRaLLUd4sG3w8xOi+z9D3yJAcD0ioWz/RROmBuaoaV5QQlc7AFOsuIQkdWKV8RtptYq5nyOyTJACF8uv2EVlMivJA8Ays9Fs56NFrrMKZPkuQoQrR1lZG6yz20yNwiwggG/dKzOvDwPEOSDon8ECMMg2EP5YdkqSEMGwgpyLXh7PwpptszjLKEZnuGZjxDliWIInEMtrZkgxxNQhg3GMwPGI1GSGFod2IGaR/PD1hYnmd6ehar5AX96+m2ZwwoX/1GiTGlt511IbNqslBKYXW2CuyMN1MCu4LmVJuHv/wtpufm2LbnUtJRhvEUYiLS2GjGHD00zyf//i+ZmvLRORgMJi+9y3Ao3RqL8hRGa4wFYwVh4JNmGZ5SWDTaGLLE8IrvfD3bd+2n2+0ilay948rKa2XITtUgxUwALHCARQWCufWiLNdUAhoBVo9B3GrtkFzFuin5zwPIqrLNJLNZMXxCCLLSVmctsJAWl6QjLs5qVa95wjEmeg1gE2X2SRW2XHt+NaCV8oLzN8Y4U10hMYKx+nTN5+pQ09Mdw9haV1l9dhwqK+/FGl3WWDax+jovFupf+/rk5yd/l1Lw6jf4LJy3PHbAcOdnxg3zlucG7NlvMOSc73+Tdet3E0VN/GbB72+9lY/8w1e5/+HH6PZ6qxg8a12mvamQm6h8GV1J0M5Uh6v2Xsrrv+NWbr5qd00AfvUbB3nw0SMI4OBTZ/nmwaOMRgl5njlGxIK2BcQlG6ZdBZ7hYOjC3lGI5/nEcYQ2rgTfuD0aNm3a7LI+hWPa9l2ygz3bNtdrwqLQHDp5im8efJJ+vw84RqzZanLlZbvZs3UzCLh2zy5uvmLf6vsrYNemDbVfrAUCz3ORAiG4+Yq92JL5vu/RJ3jw4GGAMcAsGb4wdJmuSZLg+z7r169j385LeNULbuGmffvJBiBR/PZ7v84TB5c5dGiZ/VcI3vxjz+WyrS7R5sYrLl313DsefP4LD/BXf/05Tp1ddN62RlMMBYVNabebLC8vIoRBeeD7ioX5BW6++jpOnTmBzl2yz5Ytm/iOV76EW597AwOvz7bZJntedqMDbv/cWl4Idq7vkKYZYDl08BD/8NUjxEFIphNWFs+zvLzAlu2XglDkhTNgH4wUSaYZpQmhb2i2GoxMQbcL2bkhUoHyNYePP8DUg0+ycfMmNm7eyKWX7kJ5IzZPRavW/mcfOcDK7X9BczBCP3qY/MQpiiD9Z078mW2TYLIiH+wazeT/P7b+YwfR/SFeu4XXbBLOTJfRtEpMINCZpcg06TCn0YjoLi4jVYApBBjnjTvqO0bS5G4MicMGo0EfhGXY7+F5ksGoX9qege+70rftdpteN8VoSez75IVG2IwwDsiTBCU9lPQ4f/YccTNG4qE8Hyk8hMhoxCEgydOCyG854JsmFJkPaCpple9F9HspcSNEGJ/uUoIfZOjM1YiOIg/PaxMGTldoraU7XGI4MHTaDZZWBkRxQKPdIC1c9TnnW7pC1AYVCJKij5Z9jBDOr1WBUpY0X3YMLRlpltKb17RaDYRtkYwWabYC9GKKTgUKHwk04g6FEhhTEPse6amUqfYspsDZyAmBChoUuSFNczZt2oLWeV0ApCgMoWzhGYtAYpBY4dGKp9x4H1hmWiEIjRYpaQpRQ9GcNgyGGeHUFGfPdZHKdyWKM0tR2hgGXoQf+URBiLYGz8/JjUd7ZgeFFgxMig0bRM0A1czpdvv4hfOchgJTpAhpGciC4bDPzMx6Nm/awtLCOWKvTafpMRidoRlk+LpPkg9Y3+xgrCTLR2BTsjzD5gXInNGgwA/aTE+tAy9nYfEsUSMmyTMMgkKHdEcpQeCxNH+W0SjH8yN6ozPkaUCWK+bmXOWgQg+JwgCjhfPvjJzBehTHrsCKKdA6Z8UmmNwQRx5Lg5zzy6dLz/Bntj1jQLl9Z5UpLKHUM7mJp0Cg8L2x1cBaLaAQghyIpyStb6ywfdcGtuwKWD4/IpxqQFYgjCQvEmamJIOewXKCRtwgV14pxLV4fpUcMGYCCwxWl55RnsSS4nkBaToiCARpktJprbB7T8D8oignKUdDFxM6H2vL0K8BSwWWK3ZQkJmqqou7Jl0nNzjLlqJwZQUnAUw1yRpjVjF/Vbh8dXh4QotYAVrAlOyQL70aWK0NK4NAGF3LCiaPwwRTKYTAW/PditGdZCkvtk0ylGsZ0bXPXKw55uT3J4+x6m8xtp+pL77+1SKtuABErtrE2HB8fA/G2sJ/zuZHCMoa3M6aY+MWOHd27K0KMLMuY+sOiRQBRbHC1x54gBfeeiP7dm5CepZbrt3Fn//TF/jtP/sYw9GoBsKyZHmVdGUOXUa9z+zcHFft3c2rX3grtzxrfy35uGzrJoSUSN/y3Bv21Me/79GDPPD4QQ6fcGHjxcUlklGZEFSWmHH6tYJCa7zCI242WFnpUhQFU50OWmuCIGTdujmuvXwfu7e6sPQ1u3dy4/4Ly1Naa7n3wBN8/dDh+rUKQK66f1Kwa+MGkixFCuef9tDD3+L8wiJF7hiQzZs3sOfSnWyZngJc6M73XMWbmy7fWz/u+x59ggefOFw+l8rY2yXtXHvZLm66fK87Ny3whOK3f+dB7rjDVXcxwP/45Ud48lDGT/7kzYRBNRA6lJ5lmvf8n6/xZx/6OpYY37vEhdQ8F+J2dkUKYzaVEYeqLVk+fdbD2OkaKz7yKHzmc0+w89Kz/OAPXs0LXrAT308Jay/Hi/Ujwd13H+f//ezXEBIOH1zgySOOLZFIDMaVO7edMnmp1K0hAI0gwBKUCy6JtX65X1UvRKz1EGIEHMFyhEt3Ps7evXMTYFJw8NA8jScO8ZvLX2Z9MUAAiZIOzJQxidk4YimZwdZSE43vLwN5PQZUEaAqCrB//xWEYXnPjaHoD0hOnMJa7TTSFwPa/5wKaVJtseq1i72xesuOHaf/yAHCzW5h0diwbdX7EgE6Jxv2mG7NMhiuIMyIqXYDbQ3Ly0v4jQYb5lquSliZGGZtSqMs89jxnSWbP9Upzd3d4qc9M4MxgjTR+LEqE3fC/4+2Pwu2bUvz+6DfaGa/ut2e5vaZqepLJZWqrAYiLJWQhcKAaQIQETZ26AkQwQsyfoAHE0QQCvwAfjERisAQwhYgWUBIdLb6klQqlaqypOoy8968efPe0+9udbMfHQ9jrrX3uZklXR6YJ+49Z689VzebMf7j+/4NeZGwWJbU+xbjQAjFrJgTZMCYEW9i2xqZxzAPbynSnH60hOAQ0tJ2DYnOUMpR13vSNKUsUqSP9kPCe7wZCcGz2exIkzJa29Q1InGMpsH5gHOxqqeTKCrS5AiRkuqU0Tcs508xdiCEyaZNLBBConKDEjO0BMeIMYbLkycx1lEKklThTc/pMqFuovVNPqvYbjasFkvqbYOyCZkGPxjmZc7QbtjuG7qhxxiDSWJghhk9v/HJr/L08cUkghkY2p6QCfIkxwyOu9uavjPMqhWzomI5X1CbW87PT+mGlrw4Q+pkWigkDK/ueHO1piwjPzB6QQqSJEElKaMxuMFTVDkw0HVQVu+zqwNpHkhNjhUerwwnlcaOhkQF6mZPmUdBlBM9WhtGkfDx8ze09Q1j/5o8m5PnJRfzEy7OnzAMI3VdI6UmnZ/T9x1f+71f5+WL5wjhSMuE0TmG3pFlC84uS1Kl6Kyh6QzDaFGZQGBprCI/rfBBQXrO9fUbehu4vXvDvJih8wVCQLnS7HY7+l5wujpns9kwEjUrbe/i/BaaaIsloo9vWSx+1/vsy9tXBpQqpCgB6ANomiLbZCDVntEfAFa8XXkAqEIIJKIkUymm7VFeokPCqljS20AqErwGpVOUjpF+B/6EFDnegdQ2KpMl2NEcE1uEiFwOpGIchwgyj36G0Zvr7u5uIisLrOTej3FCedaNCO6NyeNExpH/B6C0gGDvgdPD1pWYbD3kfdzVW4PX5Hn08Hhoca/wjq/pYgwbvwvgevA3vF3RvDeJv//8PwDwHoBLOJjiHvhz/tii/N2A5cPXPIDDL7div/zct1r7YnoP/8NaoT/4PWMFeHqcGFH3ZSD9Fnj+0jF/yA39YZXdh5/tYPT+sCqrlCOaScRNq5xIBxekqePj731MksDP//7fz9efPEJpxX/nT/xRfuV3PuaXfv2f0U+2NUfuqXOkOuXy8vIIJI+VPQEfXJzR9T1vbm7J0pQnqyWCaDZ8SCA5gL5/8q2P+ct/5x/wWx9/StO29H1PPwxRqVkUWBvvDzNZ1szKkvk88mh+4msf8t/8hf88f/Anf/QHDtqHj84xJlZl0zQhnaJF/6Wf+BG+vJ0VGU3TsFytcD7wt/7+r/Ds5RVSwM3dmu12TfAOKT1CBuQ/Szk7PeFksUBrybvvPOYnfvRHePdkST/0aCWoqjlC8KX3+0HQ8MHFkrt1y//8z3+Tv/gXf/utfbpW8h/+h5/w9/7edRQRTmUyIeDb377lk+9ugHkEURxu47fpM0xig8OjcZcI4r683a1rvvnNf8TXv/4tfvzHT++vrQc0jMP27W/f8el3NzzUZYu3huCHry/e2ut4C3O807m/b+6B79vHLLC+2/Nr39zDl5DbT3tJZxWviPzEP1L8l/jwp34JKeI4/tc+/ZN0/sewpNHeTax58vT/iXev8ERupyBhHC3OOX75H/0a3/hGXAD5ruPqP/nr/Nb/4M8h1Amyehi0cPgkh3v7Bwyljt/u8I+H3y3A20lthwMzHe+HR6H5+Luc/St/9MGu4q1jn6U5J7MVeVawmlUINeJstCe7+OhrzGfL2C6WmlGPR3/hLJVkSbSbw/ljJV6pQ+dLQIgFgK7f03Udy+oUIQRDbWl2jqqa0TQtgx0ZXUPAEly0ZRpGR5JEvuNut0VN2c9JrhnHEROid6/Es9/uUUrE+ckHuq7DeU1Z5qSpZjQ19dUmRqtayWhGnBvROmW3uToGZwgUVTWnbjoGO7AXW5yN0cHeQ5oamqZhVi1R4o5x7FFKIILk1gwImZAkCbv1yOgMQUS7obqumVUpILjarhEuRWtFUWYMQzeJYDQyz/GjQ2cp42ZPHyKnNQ2K1y9fk+Wasixpm57+qsPaaD+I1NRtw7a7jQtCIZG64Le/822ENOTJjGHoovhldcmrN9/DmrhwhCmYAUh0ymgtaZpSpBkBg84D3/n027x5c40ImrbeoWSKCw2J0oxDF/2Ytaaar0CBCI6cM+alxLmRxfwCZwFhEIln6ASWwKvW0zSg5Qo3DnTbjiTJePHrn5GhuNvccfZojtKWtu4oswXnqxVIy1xkrFYCISPNwXYjq0fv0nQN7ViDP+PyyYrbbc2HpwqZWJp6RIkFxljK6hTnB25evWI1n8U5UGlC6RndiOEE5xyjHbHW/a6pZD9s+8qAshv7e1Pryew6/q0JE6hTE5fu4Nx/aO0JIRjGPaeLJ6BzsrSMpGThkCHgUXGlO63wQgjoZA6ype9rCAlKpZG06yxBeJSe8qUnPoqzLcErlDhwzgRKxFL07c3NFFbmj4OX0ocKlEQRV5z3udkceYFSHcCGJA7sD8HJAVDFGMIIUL4Mqtw0aCZvVdi893jjp4FI8bb6W06m4vG9YiLQBH5tHEziJiDE6oQPU0JOuG9tHgCjcw6pIOCOk4+QAR9s5KYGTxBTheItkOaOr+OcPdICDt8vXogTpuaeGH4ANIdjJUSM64s53Idq5lSxVLEVLzxH0vjhM0opo/dlCHjhQU3g3HE8bn4C+epQTT7yOeMxiqbAARvuq6SHxKBYjbJYO6LSBO/dNIB6PP5+dpoOSZbG1xYy8uO+9cknPHv5kj/1x3+Bx5eXIOB/9m/9af681vzmJ5/SNs1UHAtU1ewtIAnxuH39yQV13fI7H3/Cb3z7W2y2W2azGRdnZ0gETx894usffsDTkyVpErNgEfBzP/Z7+JVvfcyvf/LpsVV8UPEuFkuC91hnYyX0G1/joyeP+ZlvfPhWe/r9i+j3GggYa/nFX/4m3/rOdzFDy9c+fI+f/b0/zSJNcDZWSA7X5jD0/LW/8df45q//E9qm5+XLz+nMDUlSgNA8ffqUoshQeqLDeIFWAuELrl6PNHXPs0dP+fzzp8yKiqqqePT0PT549/fy7tmMgx1WBGXhweJJYu3Ab/z2L/L3/8Fv8pf+Txq+ZGlxAAyffrrh00/X8EPgiviBhx4AtiNovAc68XM8hCpf3gKffrrm00/XD4DSly6fB/fCMSXpMJa8tdi7h1vi+H0Olftwj8g4jF+TVfzUqYiV+Pvx4cANv3/kAaj6532lh/sH0PoWWT6jWwe0giwtaboeT+CXf/nX+MbXH4LJv8Zv/dl/O763ePgZYptygoVvfYS3ipAPDl78jg+h9XRmfshn/2GQ+rAtP/ixSA2ZxvFAINeKdd+xrFYQYHPX4VygqipkSPjuJ5+QFwXD4KjKGYONVciuFmht2Dc7+qGLQKetmVezyGG2KdbtGW3PYA1SJDTdHUmqUdKjy5RttyMIh8EwWk+RxvS1oihJVSDgEIkHv0VM90C/78iynFE1DK2knCmkyQlB4V2Ht5AkGYkQtM3I3e0OhKUsS0xro/l5CtaDYaSqZgx9i3MGnWpev3nGbDZHoxjGkbTUtE3DbjeQ5xVprunshrEfUFriBkmalCTC0nc7vLeMZo81UW/RdR37umY+XyJFghliepp1HUWZ0HV7snROIisEGmN7sgS8TyjLEiFBWshEjrOB9Toe65PLmOxyfXuLUpDkEcyGED12hUwRKoD0jKEhqeZ47zGiYXQqgvbekOU5TduhdYpMUs5X5xjjMENH8ClVlmDMnl/6lf+UflxTZCuSVJGlc7IsepImOqUqSxKdHVPmlCzRiUDpOG5plRJsgrBxltLRf5GzyyVCBIKM98k4DjGKcRScvf81QghYN5LPPW3b8nw30vUjximsteR5St+OWDvSNt9lt7/j7OwUM9whcQgZokipGVFasF7/Jv2w59Hj9xA48jxlNB6lElzfszpZUMqMKkvZ7XZQlmy2e/rfxf3kh21fGVD+oT/8c8cIt77v6fueruvif307mQ2rIwBKlJjU1dHgOMsKmnbDMG4oSj1lmjrSXOFcCyIleIdQCq2jIslPIMQ7fwSzOtEY45EqIbj4XsY5tJAY7wnST/nYGUkSlVdd37/1XWKUlZ/aNRYp9FvVtkMV7iE38mHLNg5XUf13Pzndt3bfroYdOID+aHMSQphi5uLPzrn7lm24H4TdVPUNzsVEBxlAxEk9qv4AcXg/P7Xh5QN7pgi2pLpvUUcQfKjgxTa+EJpDu/4ta54D30iE+0SGCbDG14WDnyE4pHJEN2g7gS4F0wJEUkzHgaPVzOGzCykQ6qAUV6RpJH2HEEhVOomaung9BYFXHmtNjM2aJlc3TSVeRoW2mCCmm0B1IuSxcv2wbS9lrAAqQbyxETgc+qEJQYjzUIzLCyihsC5aTdR1z3/6t3+R/9a/9q/ye6YW8r/3Z/8M//h3vsOvf/LpcYb7fb/n7VbxO6dLhNT82m9+h1/7nW/R3HY4b0gSzV1Xc3cV2w6/+mu/zclqztnyMR9+cM6PfuNrvH92dsyNP7SAH7amxfQHAT/zjY+O+xy2y1nBer3hL/+Vv8zHn3zMdrfh9s0V3/rWt3j6zgVStfzmxZx/8o+eMF8sePLknNlqRQiWet+BGHi5/h0ef+BI9Iyf+fmfpBt6qmpO8GqyLYo0kMj1CoTR0w97tC4oC01QHa+uvovUEeD//V/+21xcrnh0/g7OSZTIkRqSzDPallm6YhhGbu9ex1xkOfJTP/WYTz6G7VYf78PlQlAUgYDHO38UtkQcFhN+Yob3fSpPpK0cAiWn+zJyJzim0wjuhYEP7+5wGE8m0BQchxSeA8AJ3uO+ZKMTW/mHTsfb8FNO5+7QShYP+K/xo90D0cMC6TDO3C8ibbwShCSEGFt7tAkjcDI61IbIXxdM4J/j9aoVnJ6CF471+nucP/5rkbMqEqS29GOHUpp/8Iu//ANg8jf/+38uKk6/VH383czov4woHw6zD4HwDwLLB0+YFuOHlUEQgv75vXBo9bWfoHz0PvXz7wJRHGmsB6W5W29J84R9X7NYrLB+oGkFWbaEEMhzRdfXOAuJrkCMBByr5YIgFgxDx7y6ZBgGXr1+weXFY4QKaDRKCZw3pGVK0zTsuo6yWKGVoB0sqVYkecFgRqQz7MYelaWAxw7RRP3u7o6TkxOSFMAxtpYsWSCMQwuF9xJrJWmmGQeL8wNlVcSfxzGq15MoMKrbFqRmPp+z3rbMigJEEkMjVM6uHmGUEfiNgl090jSO7XqDMYa2axhGh6SgqkqMeU7f9yxXMx4/vsQMK4xrWa2WQM5qdclohmOHRMRJh5PlnM1mQ9sMpMkMZwKlqPDBYEdHOS8n66UYpxgrxZJhMPTTIriaxc7NbD5HKYVSk0hVK5rWkhUVweXc3XTM5wlt2/P6RUuSSuqm5vTsCbsdCOnJU4UIBmcGlBLMVinDMFDXA8+fP6dadqy3zxDkHBT3sXMkJ7pUvCeHYWC1OEOKDCWj0bpUHrxDSo33UKYxz7sbB5yLwHtWLZjNFoAkyeREoYgFpHGMgC4ayycY32Oso77tpiS5FJVdsErP6U1cHEgF1gwkc8f5UpEXCRfvfEA/tJimw5ieNMu5W9ckSQSs1imSRGEThRIliRA8WmUM9qtzq78yoPy1f/zrka9RlhRFwaJccXn6mGRqi/kQWwJ1F1twbdti+o6uGzHjiJAalSbUe8fVmzUfXTzB2xYlI5lYaMcwxNZvmkaPKCklSZFgjcCMMbvbGoNA07UjeZ4TsKjkkNIRjj5oSZJgrZ/aBrtjleMw6Dxs70ohEPq49n3LtuXYCg0PwSNvmZ0DP6Agh6nFEuKk5Nx91e5QqDykJcRJ7QBe70fTh63hMBVJYqVyiqvDI5myeyegKaes4MP7Hyeoo/r9UIHxDyasw+eNcY+RT/p2y/ygyBcS1AO+rJTx98Y4lEqRkqMpcDx+8TViNfAAmmP1VUodq6ZA8I6kmAyOnUXr+2pRCI48zY7+nkpK1CHpY/p8Schi3JyIgFDKia7go4eiDf0ELuwRRFhjSHSGMQNORtA89pY8zxmHyWtvepPbq4Fn35dYG9tRwNHyJoQNWvwi/8ov/EHeOTmlyCOP7MtADuCiqri+vuP/9nf+Jv/Bf/B/Yd/0nF4WvP78DWdnq9iKEZ6iyMiKHO8sLhi22x1ppvnow3f5L/+rf5I//Id/jpM8pcgzyrJCCBHb2NN2OLeHa+npas5oRrxz/Nqv/wp/++/+Z9zd3ZKlkTf3wdcu+Mmf/gaHXJW+75E64fqu5eruFaslNN2atmlIkgJjI8CcVSfs9wOElNksIwb/9CRaI6Viu91zujqltXvMECjKBCEKcILZvGIcRxKZIE3O9bPAm8/fkKUlSm+xfmC731NVJyha6uYOQUqaZpTVnF/4Yxsuzs/4m3/zcKIE/8U/YfiJnxynVt6I9QNdFxONyjKnbQyzKsPYkaqcxXFrjKbOUgrarsa7QFlUIGRUucvIbwR+IGUoponEAT+ZMpbHXUea5lhrMWNPkumJ5hrvf2sdfkq56vo+Xi/eoxNNqhM6ExiGHp1Ey7OxN1SzGVqJ6OVpzaRKjeNcXe9I0pQ0L7DWU6Qxk7mudxx4yYduh3cwuh3v3Q1c/JWBahcni39j/jEfrwbsGE3D/yu/9x9T/aEn2HLJn/9f/e+RokClHoNDihydSf7G/+cX+cY3Ig3jHkz+j4/37cPq46FayZdA5j9ve9j2PpjShocPiXsQeex8P9jGq3ulN8Diwx+nfv4pB/SaJZI8kRGEGcdqViIIDGOLEgYpUrquIcsVhKi0zjII7pB5Hc9hXk0pQzpjMZ+zq7cEH0MLlEpjysw4st81lOWCdFr0qyyj6WqklMwPrWchEMGhpSKZLUm1Yi5jSIExhmEYODl/hECz2W2jwrzIuNv0ZIlGBImUcRwOzlMVsaUZtMMYRZ7mLGcRXKVFSpElSJXQ9h4zCopZwWB6mm5kt+0YRoO3I03T4V3MkC5PpnGenLOzM4JoMcZjxyXWGpwR3N5YhFDcuZYsS+i69j6u0qdcJ/2UnCcZZEOepzT7mtEMOKf4/PNX6CQWThCBoihiNrZzaBQq0Xz00den1D0Xxysp6duOfrA4O+PV8y3jsKcoSjZ3A1dXa1KdMY4NJydnSKlZLk9iASxJscYjgiRJNeu7HYKE1fKUzz77nIvLJaNpyDOFpWc2q7DeEjDM5xWLZTUVaCqCsxR5hnMtSo2IQKRFaMhSjVKOq+1rfBAMg4Eg2LWvyLYFSmmG0cfc8TSdOpcCj6TrBoqqxFuwg0frBCE0zgYGG2kXSaLpvSeVCUEVKCHxStAZhXMF1i9ISsssSzB2pFAxwrM6VbTe0u9aPu87Mp0gsJRFitJfGSb+/8ChVBprHev1huvrm6Mo5VC5yvPot5ZXJWVZsVqekyfpxPUQ9GbH3/v7/5D5vKKaFRjbMox79s0GETRq4pdneSTkpmmKlNEXy9roTi+EQOv06BkW26NxVRBBTMo4xiqU1hpj28gpcyPGDogJ2DnPsSIIYNyASvQRaHjvj5nSD9vUhxYwQPAHwHbYIp8TDtW/B63jIAnhnqN3ECxLeS8IOgDch8KXt6uicBgI46ADiPvUCgHHtvvx5Er1FnAObynN7yfG+J7ufiJ40NZ+yDW8r7wegOb9J0vSyZs8xOoQIn5fJQKS2NbW+lAFfcCpIir1gxD4AM7GgejQlj4M2sE7BAopxDE+0Pnpb2eQwcX4SoiVXaUI7l6oE5A4GwF5jCOUiCmvPPI1LUFIhA4MpkcnCh6c71/5h4Ff/WU3TVzmmBZz6M/9lf/jt3n//ef8d//Nn+G/8Mc/Is3KBy27uBnj+T//9Y/5i3/xm3z+/Q1C/D6kFGzuQEjNi1exshSNxmPLPRrw+on24Pn0E8/f+Vuf8OGHN/zoj13wsz/7mD/+C18nSyt+eAMxJlb9pf/Xx/zaN1/xnY+v+ezTNUK8QwjvHM+3mSazt6btEH0NhQDnPFAg5SHdxx9bmHGxEYG+8/fXEYB3l5EWE86mxUvsOBx8LuWUZ3/IWj++vQAlo5fc1DMGTo985EiZkBgjjq8bAjx9KvjGhx7okFqhk9jWybMZo2lxtiAEw37XsJgnjHZPmhQ4t8N7x0cfzRhHy363YegNpycZWguGbsBhkOJtxWPX7yiLGX1vWJ1USJmzWbfMZnpSx4NKPHVdk6UFSZKhpJ/ub0dRLRn7WKkoCo13lrZ3sUIhPFo7zDBSVRJrRrquI80FkoHF/ISub1kuV9Rtw76+IStmJKmlbTd4teby8hIRosm81CZGAJqCRy81Za7I9zHT+z1d8z05IlWsjJznb1g+ueVXvvMxLozIJMGOGcFpRjvwl/6j/+SHgsn78ePQqg/Hiu8PUg3ut9+tVX24v45XRzikan1pn8OLH/rlIfzQdv7R0J/AMk8ZE4kNIHX0EtZa04diaml2VMsKax3z5TltV1NVKZttTbvbUE4BArvdjtXJAkKIHGTjOFkt2W9rvB3QE13hbHVCkmTkSh150YuyYBgGLi8vuLu7I0mSY8xo07R467k8v8Ray7xccHV1xbDforVmkaUEBnywvHN2zu36eeQoJhlNu53G1IQ0TfHeYPuePJuzufMMvaAoZjSGKHYNCUp43JiQpyVVlvD0MosdvrGjKDJCELRNT5bPj0WaIAVNLVAJjOOGwYzH5COIfpvOGZIspWvjPJ1WA7vOIQeNEAFrDV3fUOQV3guElSTllDvuDGmasm8HNi/fUFUVwQqSPOOLl78cXy9NMf2AMS5S1hLYrAfM6CjzlKYesANkWck4WFQanWJevPwcrTVpkscQhSxnPp9jjUQrgRkNWS6QiefN1XNWJ9GsvShnSBlV0lJKbk2DnRYZ1hqCl9Rph2CcbKQMto/Ug4BjDK/Z7/cxBahIowZkum+cc9jOHXPZXQhT51dgfcw2L5KUxWKBkBkS0DohDFE8NfSBIBJ600OQjH2L0lOX1SnSpGTAUffDBECTyYtZgtaUy4psbvAOiqxk7HqC+CE30u+yfWVAKWTkHyody6eHCtbxPxfLptvtjsGaqV0ZY5m0UpyeLljMZhiz5513HvOTP/cH2W0arDdYE3Mv9/s9Xb+LkUlCA8NUGYwXQLzAHopu1LS6iOBSKUWSHvwgpxa51tMqxt6fIMk0MU4gMPoOxWqWFEe+ZZxMDyvrB8DyCLIegkr91u/hsM8BuP0wC5sJ6shoqPplJbXnHjB6wluTsAgP2uMhgEyOP8ujBZJ7a58vVzwfPqZ1cmyjHT47CLy7B5Naxe/4kKN5+J216ggOJQm4h16VYEN7bD8yAWhnDm0AH1tDzk3nlKNRutbySA8IwRH8FImmBcLFY6fkIbloavsFEeuyKuGYXoRjHGOVUgQQMkxZuH20z3EFfd+SptEwOPiRh/WV/f7hzRCBcCDEA0mcz377txv+nf/JL/H1r/8OP/ETZ8e57XC2v/XtGz797nb6qTi+9vG6AQ6c2Ic8snvwLzjENd7cbPnVX93xH/9Hn/L1b/w2P/5jp3Dk1b29ffvbd3z3u+sH1+fbVbYIJOUPth4f/PCw4hnnbw1Hht/D76GO+8TXPiiRHw5Kb9eufgiMeLCnfhvkHhZVHFrUB5rKBHONpd93LE8WXN1eUcwywGNNT1UVSDzGOLQWmLFFaY8ZG6TKGYaBzz+/5ez0EVprdJVSVikBi048wZcPFlVxm88+QGvN1fiM7a6hKAdOT0/YbneE4Dg7O4uTns4o8oqLi0d857u/RTmbkaXxu4040iKjHnusGzlZndF2MJuVNE3HbDknT1K6tma+LCnLHGthHByrkxOGscEFz8XjR9ytd7ghgtiz80vq2qATR5aW3N01pLmj3VuqveWebxnvf6U03hw4HoFZdcJv/tZvoBKBDZ7tvmW5SPlTf+K/yh/9l/8YMIHJv/rXI5h8cDrDoYly6Ogf/npwuh9cXdMvxeF2euuKOHIww1sP8tDG+K3zMtET0iePjtVJgP2zT+4pBtPYvVqcIEPCMHTkeUZdd+TFHPAUZUFW5EgRW8ciE6RKc7Jw4ANjbzCmZ16l9M2e2WJOniUsq3P6oaFI4ySfZSUBSTM0eLvH+YLexg5IojSzNGfYt+QywTQDs1wzNDv6/T76W4YYI+hcINGa4BPyJMfb2BmsyiVCKGaPntK3Ap2kzN57B++h7yKv/eb2FfNH77Lft1yv70hVYF5mkaduDFVV0LbRc3a/22NDrLy3bc98ccLoPDc3NxR5yvrVC3SW0/YNSZqDF+hEE3S0nimKjJubm7j4yeJ91Q0GKTVFUVDvtlTlkqavI+d06Cl1hnISgsaIltHElnLX11gXu6DL1fwI9JPUE+TU7UosiQCZSipdIqlYraKIKNczhmGM3c3RABKkZxgGLh7PYrdL6mgkrlRsSecFi9UMZxWDsZRlTtPs0ZlAizOsaIjUvslyJ3i6rqVp6lhl1tGXc7vdI7FkWZyP98MO4TWkmqbrSdKUXdPifT1hGIOWCu97xm5EyeRYSDBTYWVdf06RzkiuE7TWDO1AnueUZRnnXilJdEk8OIp+6KJBuUpwVjIMCZnUGGcpyxmgsJMtm3OOoBRBhlid34+kaY77cun/n7N9ZUD55ei7eBPfK40PACDNNFleICVHG5Nu6Li5sSQ6ZzG74Pvff8aL9ZY8rUizjNVyTjWf8c477zCff4OxD/zv/sK/D11sHcWEgj1FUSACR/6YlPctpxhp5o6h7bGyFSs+fd+D8CgtCC4gVOS2WBsFKYf29aEqeTRc9wEtowv+wxbwcdwS9ypi7w8/H/b7cjZ2emzLH47fw+Op5duinYeCFoiAUghxn3MtJNGP7DDB3veuD0DxIWfzsB3/HdEeUigI4CYhzWEf5xyHLv6hzXdIhDhyUM29Shph8UEQuK8+Hd/LB5RICBYIctpfgnBIIUkSibUjWZI/OG4xG1lMzUYp1XFxIIQgeD8pvz3GGub5jNEOQCBIhxQWCCgRcM7EG65wtO0+em6NhiRNqaoUKT3t+IKLVcFoY5zVBx9kJMkCY8KDCfB+IfCWsIEHcEnAp9/b8L3vbd6eAAVfRok8fOZDYBbCgxd++Ori/s0OFTnEJED57ubt/b76GDC1DR+81eGzHtuIPyx9KTz4+uGtItH9RxX3SO8AdsM9DI37Tdc5bytwDz+HY2/zwfc/vt/bP6eZ5N33FCSKIBXz+QkqkTTNnrJM6boOM0qkhNXqJCpFXUORRasYaRSlXqLTFExU3I5jT9935PMCoRRD9zafKNialBSZppOYS3K723ByekJXt9Nk02OcIaPks8+/T6lTlIn3bte2ZEnCfn3HbD4nGLi+ec12u6XpWtI05WR1RpokSAlj35IVc+azBZttbGmPdiBNU25fvma/a8jzktk8R2rF6HoG46mbLTpRtL0lKRcMXE+543Eh0ZVzvNwj9YgzAyForq8Mr169pppdMp8tmOUJqdL8L/7dP3+sQjff+oTf+bP/9qH//EOuEx60u9+6dOAHLtMDSvwh5czj6uzhNfXlGyw+dliYZ08fH3+7+fS3IqA87CsERmq2fYzFSpIk2siojExZvJc0dY8Xkn39CmOi4jUr5pyuZrR9S5oWZHnk7zVNg5Qpy8WSm5sbzOi4eHRJcNA2A4MZOV2ccnv3BplpwtRlGQaDKpNYMV/OGGXkMK7KU9599B59H610qrwiSVKq+RLrRtIkx9gBM7Rk6Yyh69HJirES5GVCCFEFraeF/OK9j9Bac7YMfOOjDxhHE1NeRCysGGM4KUoWiwWNcVjbkxcJ+6aOcak+sKgsZZWyKD+MAhwrsd5T92usE9zedpjMMjrL+49i9yPLMt5cXyGEYLfbkWQp5dmP0HUDwo2IoClyPc1XGiUTignwqSDIhEJ5SVFUKB0DGlKqaJ9ne9Is+n6avqescnabLWkykheKRVkxDC1aOgISoQxnFwX1NkHJeM4PjgHz2UkEffsG4Q24nKbpKPIZwarIrXUtTX3NYPuo29Caft1PyvwO5z1lVTB0luAVUsKsWMWsbwUhWKT0yDBQpAHrO/IkQcqEtu1YVNFYPqiSPBJmgZhOp51EJRH899bibEC4gaJKsaHlZnvLYjHDB0fTvKEsZoQgEKkEnTE6AUFT73tmeYIQirrZst1uj13m87NL2jZWerVKMc7GSqm+/yz/ou0rA0rvYkv1YVUqcN8iLUs1ufyD92YCDrFVrlJFkSh2dR8JurOCxaMlTV0z2pHb256Xr1/EqmamsAMURUGie4SQdG1HlqWRu5bECzNLC9q2vU+oEbE1LpU68oWkUCgh8NPNq5XC2Ps8a4h+ZFJKnDfH1zpwnY4VvwdJMHBfGXy4Kfk2wDy2mf0Dq5tDy/kgwHlg1h19xh6+9pTw8hY3M8ZSEiLR/iCAQni89ZPx+6TIFverfTcppQ/nSgiBDNHA9tiG9JoH9E18UAQVn6NUrEgfIxRlpCB4mLJz48rZOQcuVgyti3FhSimCCHh3UIGr2LLGkydRrSaCJ9MBKR3WDhM/KWDMnmHoKIqcrm85Wa7IEsl+H1OUqiInz1N2uxbJFmyPVB6pAomaqszCM4YR06exWk5PmgCJBBoSkbHfNhQzRaIMQnq86/jwA/jxn2x5/uyBndQUb3dffRN47+5bxQGUinZWBzAvZXQwkELGWEMRBRwhxBb+sVry4NoK4R5w3ZcrY5rP8Xp0sYokpcC5WG29X+h5fHhYEedY5Y0CD3dcJByBrHhg8+XfVrgflzThIGSJKv04Cajj3H+4/wOxVR98bItHxwcx0Qxi5VuIA185tq4jrjlQPaYqOYd1j7+vgj5Y2Ck1pf/IqKB6792R04sNZVmgM02uSpqmYb44JWAIDk7Pzrjb3qHzCmEDwUDdDegkcPn0aeSKAfk8o97tY5tKgOsUy1VOrg4+k4d7xdA1LaezFdZ1SFFQih5tAoXQaBfI0xyvU5QIsfVnPXfrNWmeHe1hpND0XUc6xRaq1SJ6+BUVWieY0eCDYzabI0XGdrtlPp9xe7uOgse6xQfHcl4xm80QJOzWd3GsCZM40guGZsSmnlMEUkRxoP65n+Hyf/pnePwP/wLN1WeMXc3so5/mtTO8vvqc+fIJm7s1H330Hv/+v/cXePwoAjXfdXz/fxkzuO+Px3GJgTguIu67JG9XvfnBbVp8hC/tcKBFHJkRDyuf4bDmCMfHxYN7CmD7xccPfopLl03bc93UDINBq8B+v0Xpkr69QsmMROdUQ04/7BmHLnYl9muMe4xzgcHUzOcLhmGgKArapmO9b2JViZTnVzvquubi9AwvNLu259HjDyPQ03rySx4YhoFytcDJQHm6YLQZvQjsm5Zg48K6HXpykXL7+go3Djy6eELXb2NL9WZPouOcSdDcvblFySRGYGrFYEfyvKAbR9I0Yd/tWd9tefLk3QlEbSmqHO89zdCQpQlZEquXi2JGyEustcyykiTJGK1hXr7DMDb0w55q9QFNuyE5UUBBNYv80rIsMWbgp77xET5Y7jYx3Ul5SZKl3N6uGUdLvW8QOiHRGXXdYrykWF3Sti0X1SlIhbNx/rGjJRcDWZohrWO1KICCJDml61oulrFNX+87ZtUpuRT4YBmHlLQsSOk5W5Z47+mnCEslIU1ykiTh8fkZxu1QMufykWToHaP1cTFqFbN5CV2PdpJZNWMsCrz3VNV8uvwFs8IzmhgrG3xPnhZ4As53FKVGB3UswiVJtEcs5yeMgwUXcNKSZZGmMgzR21cisIMjkSlJFsFpFKlavI0xmkMfIod9EHg7HJ1fWtESQiDPU5LCUltLVcwYjKc6TQg2Yp+0Gjm5WNFv9gzDgPeWur1jNb/4ITfqD9++MqBMswPIssfq10Hd6L3DT5YzSkhk8AipCcHhlUB4jxQVZtwj5WQPYyVazskyicCT5hneW9JMMUgH+MloOEzVRIMQ+dQejRWyA7hNkvhcEMd2uHMOgkXJhGEYWK9vydIKF2KklUoif0MnCUomJCKi9Id+hAf+3oFA/3B7qAg/Ajvi5Bf5ZofJ+YGS9KEhOPfG6G+3E8OxzH0ALIf9oujmMPGL43kAFYUDPiBFQOexfe1CfG6qE9SBHxnuAe+9Ij1O5NbYo7rswOEIQUxV4PHI+zn4rqWTF9s4jjgTq5cqUeSliiRta4mr357lIp67osjomgYhPUWZTVwcg06n860gL3K6riWRFuv39NazmJ/T9RusG6l3e87OTtjtB9pOcXX9mmqe0zQNQigSnZEmcYDKdMrQDchy5M3N7igWSpMcrTP2dQQQidF0Q3QrkIlg39T8N/70LddX6dQOgcViSduOlOWcYejjQFBG9Xo/tcyaesdysaLrBjbbHauTFVJ5Cr1kND1SBxJV0g63aJWSZxVD5yK3Zhyj4ElJUpUhpYrZ3HmGsQPDWFOWc8zoyBLFfr+haaLrwvn5YxbzE5wXdH3NbF4wDg1jP7Kcn1D3O1KdE7yI59EP9P0IDmbzJY5A3TbTdR8HI2sCSZYjVYgcoFm07goEEqUQJGRpFLZIAqOJMWZVOcO7Ee+jF12WRYVrWcZWjNbxuklyuL3bTLGonqbt6U1P0+zIipJxMHGBaRsyEW1EkkSyWl7i3EBva8yo2O5fk6mExXLDbaN5tempyjmLakFvesYgKfKKbb1m9B6pJa9vX8XMdjqs8fRtzZurW/IyAoRZmUZuV9dRFBVjaHnx3Rfk6aGFH7fZbMWiqtju1+RpTlYF0vSMzXqN0BpShRMeYyxKBExwyFRz/vgSO5qjo8GTx4/puiZ2AQoBzDlZBaTOJteKhLLMGcaesek5Xy3wwVI+ecQwjLzz6JLN5pbN9gZnB/p+zXKx4u7ujrPzKNbpWsPXPnqXpjUk13cIAfrP/Gn0//DfYnG54g99432u/ukvcXf7HT78z/3XyJ/8CO/++J/g+cvv8eM/9tP8/M//YYq8iONUb9j+w1/h6j/7228BPzGVHb+UiXW/y7Gy+KC3HR48cliZiYNC3T943rTfW4VJccCgR4B57JDww7b4aFQ817xZ15ODhqWocq6uXlMtlozO4LXHuYHgJaiS+axC6cBuWCOFpjpZcre9RkrJ2HdReLPfMyuWrE7PGFpD5wy7YUeiFAi42a6RLgKKPM+p2wYvPG3f4Int1RevarSCi7MlwY3kSfRubPZrZtWCNvS8vHpDtRBs93vyrMJIy9g1MZu5KjBDYDCWullH0KQzxtGyqzfMi5J3n7yDVvHak14ifKBvWryxJFoRPNxt9tEXutR4ZxAIhtaRLiXr5hmahOBVdOLIl8yyGc63OJMwGM+w6aJKmTHG6/rYpTLO4jpHpVJms5x3Li4YxsgPvlieYfyCLIvX2fXtHXlWIISgbVtAopXH+sDZbEValKxWK7bbNfM8xZiBVTVHXCqsURG0pZbBWPphuiacJ8kT5sUCY0eSROH9CMFjraMsLwgYhnHDMMTEntHtQORs1iMq1RR5xji6Y1dT65gGmKQKZ0HLnIvTM/q+w4eork9FSqYrlAdHtP0RQpCmOcF5lIhirW4QpDpBIhA2LrrLWYVzcW4OUxFDa03bdehp1W/6eJxTUWD7HqGn2OcRjLH4oSUvFLZz7Po9Vblk2I8kWmNGx3e/9X1OFqdUyxQRBFrnPH18GivUX3H7yoAyEQeVrjpWv5SMJ0yrlCAkqNge9SqCA0SMDtRKowqFnDgMSVHGCsaxZa5JRCAEjZYJQVtE0LES5kDLBCdirNXBE9KaCCgP4Ct4cQR1B5sQRAJCE6Th9//0H+DJ+2e8erXFWsOuXjP0nqat6ZoWYx1K3lvLaB2rsZmOHBoZJo/FcDBUFYTJzkgRbWu+3MpOEoXxI0km8UHhbTSCh4D0CVJkeD+QpAYf5gQcWkWScpoU2DHaowR6lCynquq02nfRRN0bjxKaUYxIqfAErHHY0aEESDw6jY77zsd9nFUoAi60FEUWhU5dwzzXkMeIvK7fEEK82BEjKpUkqme9vqWcZSRJxn5/Q8BTFSndcEuWJ/R9S9dHO4VhHDg/OWXQA+PQYL1jNBIpEkRQdJ3m9vY5SSqxu6jaT3TJi92affOKWbVEqALnO0Qz0rYt3nuyLGO0W5wPdI3n9OyCJBWUeRHFV0LQtg1SWa43b9BaMg+XZElKliuMtdTNjuAVeVkglaTpG0CiNMxnc9pWUpQZs9IhZQohQycOpebsdw1JrkiSgmE0FHPN7euB5TJFy1OG3lMVC3zIYpWWjHqoJ4GNo21f8bSqkFIxDFvmsyV13bNYLGNShBlxrom8ltGw3jzjnffeJZELuq7DuoY0mXNxKUhTjdbnvHz+hvOzGOE1rxKqKiPYBcFZqrlguy3J8hltt0UnNW/ejPzYTy1omholBu42N/yeH3uMDyPWlJRFVDXWzYYsOcXYepqoc4ZxgxQ5QRo2689J056iOCVLo4reuWuk1ORFhZSSq6vnfO2n3mWzuaVtG1RRUpUn1M0dq0fgXYN3gXQWj9Enn3yfDz/8iHGM1fgkE/T9GnxGXqR4/wWuD5QZ6BUUVWC0W5JCo3TOyXwBvmDXtpjek2QeEwSdldi2w1oIIZL9hUiQScvyfEaiVuT5jFevXnGz7rl8dILSgc2+jkBPlSzOzt+GJ0GwNx41X2J8wXXd4+yarutYLGbc7XukFAzDgB1jVaFpNxASqqpCjYb5fM73Xt5yenrKbuyYFyUEPbX8PbvdljSpePH8houLU27ebNH5DqWha3ukyGl6z2Z7S1UqmmEkoEAoFstTlJxBKjifZwzeYvHIzCI+fB/93/vXAXBXO0jg8c//Md7N/hRpKLG/fc2f/JN/CiEO4ixB6A0hWMzNHd/5d/7dtzo3MFXt30qlesClEAcvyunnY897onpwrE3GBbF3bwHT46L7rfb5oRMUjvNS4AGF43fZnA/cNXua5YLnz59zfnnG/uqGPM/ZXt/QDy2zRcXrqxukysiSjCRJSFLNu+crNutbwvUdeZaQJIq+73DOc3Z2wavbDTaLRY2XN1fc1TmXl48Zx5Fm15Clc3QCC2wc69MM7zWjMaSpJ5gdfR9YvvuU4IrY0vWBxcUZVzfXJCpldlIBHnSHzBSbTaSEhQC3mxvyvKAq50i5JOiU266PPpnVnBc3V7Qve54+XZEIQbU4pa7fIARUiznj2JAXc1YnM9q2ZRwMfR/5dEFY+trhjGfX3MXqeLNnsZwhCZTlgrYbOVvOscNIlS8n0axiMI7tdothpKgq+qGjKFJ8MKxOFiwWCzb7HYoMlWiSNLDyJWV6GmMwy2sAunbAOE1atHRDR9OCZU2SnuJVw9gZvA903RD5r12sPs+WM6wzdHtFLzwXl3Ok1OjEUdcto9mhVcr6zbfJdEKaZszKhMVUBR3tiFlKujGwWTeUsxKlJG0TwAlGY7CdZrZMaJqGxtd4D6nOWebpROsS+FGQTAUmERRd25HmGq0VeTYjTzNOT1f0Q4P30QZRa03f91ErohOsM4gARVowL+O8Yc0wcWGbOAd2NfvNFmtGMik5Ozkjy3P0XKFkHotwFXinyTPFOG+icpwE6y3CBYSzR4/nr7J9ZUApdYaWTJnLnmgiGl3ilVIId/AwtGglkIlCqVh5MCa2EnUmMW6kqopodBYCamovq4N6WypklpAkGVKlmMHFmMepJdf3kTicZPEAj2NURB1b38AhQm0YRhKtaNuWv/t3/z5/+I/8LG0nWJ0uef/djxCkCBFIs2jGPQwD1lrW6zVtHU/mfr9nGEYEEawhozJKa41OMtTE5UomcrPW8eRYGwfVNCvwDlKlsLRxUkZG6yBhJhCbIegQ0mGtwHuBDRaURwmFYIELHtNN2cguJjYIrZBSs+92LLICPQlbsiQlX5Z0w4DHM4wdl6cZ42gI9EgFy8UJu22PkA0uXNP3HSKLAqeh9zjZkGaKthsoigrrDU3raYeOwQZm84x9/4Y8m9HWAS0F9d4jtaBvttG+pKjY1dfgHU27xhhHWc5YLc/p+h7vJadnJ9HeZdSMw4j0hkVxFuPQmobF7JwQFM63FPnyWH1QKi5mZCHJsozdtkEnGft9y2w2I89KnHPM5zNSndAOPfPVGXd3MR3i4vIEiZp4oZ6zy0dsNy1e7NjualarU0LoCC6lmqfs25ds95aTxbt0rUWpjKJcsb29IRUVi1XAOUEImqzQqCxDkdPsd6xOCk5kQTmbcXX9mlVZcn52jjGGjd1ADx9cxmxtpSQ+WE5PV3z++eckieJr7z1mv62Zz07xy5q7m4zFKoNwSlP3nJ2uCPYRJ2cpd3cbimpF026YlSnGa5zTeDpG0xKE5PZuZLma41xG1zUkSpDlJzx/eYuUHucNUt5iXY+Qjlnlub55yWr5iK7xBLlDUGPsgFYlSZJwu/6CJMlw1jNOXm55nqJkTt9bPv3sNyK/efQ03Q2fP/tNVssLnBPc3D6jWhQEBrSc8/6HT3l9/QUIS5bO6LcjZyfvs2+3XG1eopRgMT9n6EdcYzk9ecQiPePm9nWkfHiHNTXG7aKIy6e8vvqM+SLn+uYGIRKKqppCFuYoVVK3DavlnH07cnrxGGth1+w5OVlSVCtG/5r5oqAZ3/a03W43HDh5dbNnMV9ye3MdzfKvRfQj1JJx6GL1ZLWKNiyt5HqToLXg9u4NZgxkOqcoKk5PzklSwW/8xj/j8eN3eP+9D/n2b/wKr1694emT92ntBjPCO08/wjmDsa+xbpis1TLmySnej3zONdYNJEnCbL5iMT/l+YvX9J3lZ7VGfP1rb32XbHFKfhIBs/Cg/+Acpo5FwBwrfuP1HZ/9+f81zSef3qv0py16fMZnEO55sQ8rkEEcaBbhni55aF9PrWrBRNOQBwrTlyakH3jgnnZyAKezL8eJHqqWAaxzPH9+zW9dvQQp2O462ja2QA/2Yi9e3GK8Q8kRYzakSqK04Hvfe46WCca4aX/Y72MMov/4JRJP9vmzyaHEolVK8WpD3w8kOkOEF8xmOWKKNTw/fRSr0ybOAaerJ5RlybdfXB+DNoQQtC9fxg/vNMtlzz/9Z9/k4uKC88uL2EEaHXVd03ftNI6PGOcxfVTyL5dLEqkYXM1uO/BmO0N6x0//5E+hspTONwgF5/NHrLd3JColSyNlZ14KlLJIFF5nFMWKtq2Yz5c46+naJnoYuhGlPQIXTdRdz+pkTgiBWRCcnc4Y+jhPCq1ounZy7AjsTcPqZMY4xO/cD4ayWNC2GypdMVueg/CkC8tgtuDPmZ/C+nbD5dn7aNWx388xyjGfzzHGEMM8HEGeMIxt5MivRhaLBbvdDjUVGarZKUl6Rr1vOZcxRKJteg4WeG3fsTo9o+5aqr5jNXGm+3FgtSrQWrO+bRC+4zLP0bMyJi21XeSLosjyBcvlnLof2G9qFovFJBae0zYDIDG2wwlFc/MG8JTljLYzdEO0OhKpYOgNYhLsOOcYd83Uas+xw0Ap4mLVpgVPf/xnJj/NGqn0lD6YMgwGmXqst6RJRQgCPWi0KmBK4HEOBOpok/dVtq9uG5RMPn5BAFFBFFNmoo1GkANaH/hmEFwsHx/SdBIhCaNFElfraZJGQ/EQ+WTONDhvQEQ/KIik+OBjyVmI2Ho9WPoc2q55Ecv2frJ8OAh0hqGPA8skhOmalqZpuHq95/Xrl3hhkSJDS4FOJFleUlY5y/mCy/NLyvfLyZg9tlCMjfF2+/2eum3Y7XaYYaTrIwdG+MhTkgrEZOp+8GSM7W4dD3Yg8t+IHlZuBKnyuMK2KVopvDRTpcjS9JPHnUyYzytmVc5yVbGv7+hNjaNjfgbG3ZJpwe2b11w+fo+meY5QgVmVs339itebODkPw0Czv2HVziFEUrjWkpevXlLsHbNqiTM5Wa65ub2jLJbsdwMIS5rmzKtZTEDYGC5OPmAYBhZVSVNvSPMk+oeiKFez6LdnHUmasZydoVTCMBi6rmU2q9jvYws7z3Papmc2LynLgrub6K82X6TUzWtmxSPGLvJY3n33XbbbLV4GqmpO29XsNlukVmy3G4oij1wiF8VVi8WMFy9ekBQZWqTMqxPyNENOC4G27VmtFpimpkoUbV9xUgkWZUqRr2jyjtXsjIvqnCxXvHj5PX7koxXOJHjb8d5pjhCGi8tLCBkChZCe9fqW2WyJnM3Y7zesLi9ACtp9wkcffRSNZLXg8vQDXr18QaFn9HXP5eUlTdczNJrV7B2s9ZydnCHzls265otnzynnnnE/iyTxZk8XCmTa88WzLS60vLz6nDI5oes9aQa7JrBanvLm6hXL1YpxyJkvFC+eX1PME7bNDZ29IUwUiWFs8N5QlnMW1Yrb7TPSQrEfPsUGwVBD8DlZYbGmpxui6t6HntH2GGvY1Y7KzJnNBTe3LwGYzRZ4p3j06BFCCNbbDVIKyvlE+g4SKTUvXt1wcnrCdndFN+zQqmRvtvgkIeGELEtY71uqqsA6z822oUh7smzOfjeQZJb9fo+lQ6uCJLGkyTwqJbOYwvHm5hXXmyuEzElSQd82NMPAbreLLe9qRdfveX4lqPdtXJym/mgyfNiMGxAiDsTGbcnznJPVGYPtCdbhhmgB5B3RVeBmSwiOcRD4IHn06JLee2SSMiJY39zy/e9/HykDFxcXSCn5/IvPWK2WLBZzPvvec1SlcT7wW9/6LVSiSbU6Wqhtt3uqJMK3oQ8sF6ekaUrbviQpFM4PWKsIN3f819/5hSPQu/urf4Pq3/hjdM6hi4KkWPxAXcLua67/33+Tz/83/1u6Tz8/dmSOAqxDq/rLk8fxsQeis4fCr3jyj+3scHjO0TrtS5GXYYKcRyB6QKPHN6T8+ofMfurHj0/pb6552AQP3rOrd8jLkoP37tnZWawGGoMQcaFaqoRxsAR7CJnwJPgYsScTXFtTjz1lUdDXO6TUUCiatjumvuVZgXUxsURKSZCKbScYTU+e5Dx7fUue5wjpGMaWjz9/hjUOrXMSXcR2pY8t0TRN8VhCiPPodvR8/PwFw9Ad01OUlLRNz3y5wE7ceiUkr7YbTD9QlIp33vkAn1Zst7f8/V//pzy6uEQnAbU1/NP6OU0brYkenT8lTRTjUJOnGd0+Gm2fnZ1FFffGkmUZZjCcnJR0vUGHAjH5AJ6sllzd3fHmzRvmZYVSmmouuHnxisV8Tpbm7LcbqrzgvJyx2+2Q2kDwnKzO6PuB1ekJ3oOzcfEi656UQNts6XzPcnlCu9/SDWuyfEY5U3TDhiyNXM6qKnHEvHRrOhbVOav5ikRJ9vuGPIe+t+T5nCytSHSMd17OZxGUhsCsKlgsT2iahtHU+GDp2gGYkU8q6g/fuyRREtNv45ydZJyfrZAqdkKyLNLI2mZP9sHXCC7aKiVJxn7XUpYlZZXRdw7nDHaMkZFt27JYLPE+dkk3ty1KC5TWMYlJJUip6Kc4TJnmrG/vwAfWdxuKoqDIyyhC9I6LsyU6ydjubmn6lnbfwMRH7/qekDQxVUnnBGEYuvHLd/Tvun116Ok0QibRt4fJf44o/nDO4ZRAhIDw4XjTeO+xLqLdYlZFErIZKcsZJngIPraAZcCPkU+gVUFvGg5RfkpLfGcJkzpYCKbM7rdTXQ72B0BMUTlwG5II6IT0lFXK6mQGSjLaniTJccbgQ+QO3t21vHjxgoMlEECeRr7XoppRFAVZWXB5+oj3n35AmkSCvhKCYdzQ9z11XbPdbun7kf2+oe06DnxHpWJ7RKoItGPLWyORjKHDGI3D4lhTZBnL+QVn751x+bgi1Y59s+fT732HL57tWG9eY8weKQyrkzmr8w+pd2u2uxd8d7zlbHWCDTBuYF5KXl9dM6R37HZrun5PVryPs5KqqkizwPvvvcdg1lgTKIuMtq4p0oxZURKyBCkUOolRhVUR1WhdM5JlKV1TsyhXCBnIsoTdbke360h0xryK5fh6t8HYnqJIcKPF9YpUzXBmR6oVeTFntxu4u71iPp9T5BWb9TWR5Tbw7uMnmNFR72tylceKtPEkaJp+j9YpT86fsF6vUVZwc73h/PycMIJ2gqUu0caznJ9R75pofD30/MyP/ARpmtLsWsbRMs8HtEpJVML29o6z08ckKhBkQpWfMv9GzEHNkxznB67ePOfdxx/QjXGh1bY1xhmKaoVUBXle0A+C3a6mHwzbTcPdbR0BpbWsVpLgJdtuyziO7J81LBYrnr9+Qd8NeCH5zmefsmtfoLWmrlvK8oIvrr9Jnq5wvqNtawKOvJjaKKSkRU5va2QyY3SS568+R0jL919cc3byLrebW7wwXN28pO8bkiwKnGIaSDFRNDLMUNC2G7TQ2GBRKmU+O2McBKO5ios4F9jXDUmWRqGREJSloKxyvBOcnD4hOKaFYD/5xaVobdBJYOwTsrJCqggE83w2iedKFqcx1u5uc81yecbV7RdkxQw3Ztyua84vlmy2N5RF5HMmRcXoGow0KJVhHez31+RJSYZks9kR7gJCRcuw61cvyIsktiN7w26zp+8Hhv4z8kIhtEEpzdXrBudi7vDDrSxz2rYnBMFsVRBCx9V1HH9G09P3LcIHsjzyT5WQGJNQFAVNu+X1ze1kkWYoc43HQlmASNlbRb3b8ubNG87PHlNkOWpW0Gw3+GBYzHOMsVGlbgMEw6OvPyVJC8qqwIxtFJqowOJiRb039J2mHzuC0kT13aRy/SO/P1ItzMD282+x+b//HcrzdyOIAoYXr7j7u/+Q9tPv/QsmirdB5tvaxXvRYsSe9x66x7Lk4Q1FDJww3kyvF4VXR0gYwj2ODAcR0P3Tqx/9xvFdbV3T3b5561MGAtb1GKOO6SrdOlbL8A6pFWYwGLObAjTioiDJ41ioVAJBI4SiqOaM48j55Yq+79lvGqpqyXJ5Sl230R+3FyQ+xY6ekPQYK9ASxran7wb6pkUlEql8XJQGQZ6VjKOl7zuKPGU2S/BuxHnQOmU+W+JcIE1zhl5GfnrXYmygnBWE4NCpxhmLmMSbOpc4ofmdj7+FN5osj9SuT794g04dZpD0dkAnniwr+PZnbyL/PjSMoyWYjKwKzOcVzjmapiNPC4SIj4lgWV9vSFN9NCOXSjB2UQ2d6gSdBebVjNqDGW557913aceRrqkp5xVujJZtbRuFUOu7hv2+Jk1KtJYUlUCJBarsSeRZtB4yA6Y/Ic8UUkuur6+ZzxfR9mbSRSzTCh8CPVmkoxnDfJawOCkhJOx2G5SWSBVwDFTFHONq8iyGatzdPWd5coI0FXWzpizLqULb4UZPluQY02HLEjuOiDShLCqcAY0mlSlmGKICXAQWJyu8ieKc8w9OMcaQZTmrwmPMSJqt0FJM1lMZUsTAg6+//yQW0QhYD+PoCQjUxO92bqQ/rybnHY03lu12G0V++RlNu2VXb5hVOVqlPH10iQ+WwfYkOseKJYiA7R3zWcHQ//8hejGIgJ/+xKrflBwho8FHpqJfYDTOCMcBQQlBliboJND0ezyOIDxZkmF9tGwQAnwSJqNqR5YIhCRmZSY5Saro2jjZhOCPZehYpYzqNu/d1OqO7euD4GQcR5yLzxVC0I0DSRYrIs4G3GQaHUJAKk1ZnhKCeyumzxjDZlez3kb1U/QpvFeBF0Us/aep5uzshKfvnkeVeqKPSq26uaPrDLe3t4xdH0vcviPJPG+un+HSa5bVOTpVPPv+b/Gzv+9fYlHMcOb7/F//6t/gZ3/yD9CPA9t2x3a/4/ziBGEKzpdz0hCggUqUfO3Hfh/N2NMMPZmK3nJd1/Hk5EOM27EsCtIkpnjIXFDXO/qtJ01OOTt5EsPglaLKFE8ePeWTj7/H5aOSrhvYbTbMZyekmcTYGhO2mEFR7zr6ds9sXmJGRdc2VNUcM1q8G8jzqGjMsiVt21PMYr5zsCOzbIa0ilw68uqUNFGs19fMFwuyeRFVvV7yG7/6K/zMz/x+lmX8/E3ToGVGFxw//aM/yefff4aygkerC+azGR89/Yi6jivJj95/j3mRo2SClJoPHr/Hzc0NahFvaAecrC559foLZrMU52G/21OVC16++hzEyOLkEc+vbjBmQKUKayDNNLe3b/ji9W7iBLUEL2jbjnKW03a7aFfkIdeKoiiQmWLb7o4mxq+vXnB5eYk3kqa3NE3N7XZH37f4YEFFpX8mFIoZ7z1egU/wvUClPWYcmM8T3ty0LJaXeO9ZLgqk1AgPL15+wfnp+xh2KBKsCXTdnrycs9k9Y75YURSnON/Q9S0CifM9KrG0/S3G9iB29KNhvjjD2wQfOoQSYCUi5IxDQ5ZHXnTX9cxXUdjSdANaJCzmK5yJ1fu8UNTNmtF4yjIO9rNqwXq3x9lANVviiFQWZML6bo/SjiQJbDY3VLOCwdT09o7BjHznk8+YV495/vyGgOX8/IJXr5+TFydc37zi9PQU53tGG90CmtqiZYrWgkQppNC0bc1+O/LF999wfrGiHxukzHBobG9QMqWYa4KfeEcPNpUUJHlgNB1dY1FasNusj7GzWic4b0m9pN5HKoCSmn3bMJoR03TMZguMMez2I6mSBOVJk4p23NH1NUIIXt98QZ7nDGONdAKVpNztYwXj6u6agONkecrdizu8D2iV440nL1J60xKCZ7GcUQ97vASlPcO3vjP573qKn/9x/Po1bhz45P/xf2D4j38RvdOTyj66Z3B0wDjw1O/ZkPA2bfFYdXygxr7/x4NnPFRji/s65gGMRmHilCQmBFIcHAnkscoZwkHoOLXQH4p+ANe2PzifhRCrNPsdaZpT6ITN5paiKI6pZhCrlCFEp5A8j5nSzdgzDFuqcs7oLFkWhXndNrpPyNSDHtF5wUwnRxGkMSECj7SKKloHgzMkAvI8JyuiqESpjKqcU3c9gxs5Wy05PV1hhobl4oyA4MWLV4xmpCgqghmxQ0/nDXW9o21MBCBSRt5nkiCDx5hoLyUkZJlgDDCY2B7Psjk+ONJCEvoAYsSOFuOG6Psre3zwzJdLRrvl5jaa9pvBYLMOYwyvXrfoRE4iP0cIgm29nxLFAlmaRuu/TnC76whiTZ7n/M7zF3gcy9WCptmjuoFHjy5ou+1Ep4sJfcP4JlaQRUFdb8jSBe88OWcc3jDL5yjlotg3CNK0YDAea3csl3M2u3UEmYuKkHpev7rFe8+jiw/Z7VqscUQdUE+iKy7OPpzsmRRaJYgkMJ89wXtP4luEjILKWVpCllKczkhljg8jYWwRSuKFp+tH0nmBSlL2+y3pLONcXkKIi07TD5PDi0Mqj3UDYx+Pp0hKjJO40dH1HdaOEVfMNP0Y08D6/Z7exH/f3VxHUJqXZFk24SJPWhWU8xJJ7JguzypWjTtipTTLGYcW6zKydM62a1jOK4bW4OzAOxePf+D++d22rw4opxtXKR1VcdNNIoNEChgNcQWk9XEQQIHxHikEy6Bh37G7WlPonCEEnJCoVFOPHTMRy9ne2Nj2sA51EAKpWOrv+440TY9K3cNniq2FqKyOZuYJfd9NXJhAnme0TYd30QZASUGQgn4YUdLHVSPx5mvH4b6tPhyseaKwRyWaqsjxPn0gAIrHpxk3XN21fPbsU9SkeBdCUBUlVVUxX56yOql48kRyenrKdnPFN3/9bxH8nnc/SqjsUzbra56cnfIjv/9n6eqBV5/+E37m9/0Uv+/DJ+QJ7OuGq9cv2Pctu+0d7z96RCiiaS4isGtqbtsdzdiSFxVdt2M5XzC0HSIVjGMfVyzW0w89i2XOe+9/jTevN8yrGD1nXGC1usCZjvV1S5me4McE4VuePLogz2Z471mvDafzd9jtap5ePqYZbqh3W2azWYy9HEaKPOduc8PFxRnBSp6/fIlWORdn5xjb4Y2l0BXNrkPKgbOTM6oy57SQFIlmdh7bKsb0uHceM7Y1ZVkxK1LKVPH48VPW2zvGceT9p08oiiLmos5mFEUF3pKmms32jjTPePXyDWlRYvBs+8h5CoPAOM9+9wlllXDzSoPs2ddrnBWsTjPaOrCpXxMw5FWC7yzeJ/RGcvH0Ec+ef07T3sT3zSuaJpAlOV23Zhx3mDEQior1fsdyeYLHMZvPI/g7O+d6veHs1JPn0Y7J2p6qUgyTt2tdt5ikZTCGdp8ymyc8eff30JlbTlcrmtpy+ViS6iVm2NG2bzhZPqVrW1arQNM8A+1QquTrH30d9Mjd3S2DuUV0HskMazxDG7lNvTGUUmNtT5oaTG/IkkfYIcF7gU48Q99xe7dlMZekWTRG32zvmK8qNtsrqvIkgg8fWG9fs1osAcnYC/J8xW73mrOTp/T9GPlQose5DOegGXYUeUmZrbi6qSOFwTtSLSlmgqvrhll1gpIdRWH4zu/8M5LkhPkKXr/5nCydU+8HQvB88cXnMVs8g82uxY8JRa7wbmRWlHRdzepkhsoUZ+kZxnQEL5CT8jFJNYMdCYwIUWJs99a4eOCLzuYJXWOZzReUlZ0szRLGsQUEg422HSEEBrdDOBEn8CxlX9/ig6NMC7xLY+5830GQzIsThmEgLyRd16JChs5g6GEcAlmuuXh0SZGnvHp5zWp+jvMDTT3Qtj11V1OUCcYYvvfpM2bzJVJCUw+Yz77A/u1/gP4T/zIAKs1w4wNFp7gXuwjuxTbhQWXwYM8TrdsOLhYPXc2nF+JeVPO7KmYOApvp//6YnS44RM4ecm6Olc4f9jKH1wo/8Ohx8z7QtHtsYbHdQGAkSQRdt2f0kTfuR0fb7vBTQIRbR86k9GDsQN+uUUqxHd1x7CnKjDxf0I8dN3c38doleh4aYyAE2iF2rWSQzJcz2rZnW2/Ro6aqCvIso7MjyEBVRfC5r3uG3lC3a5JEMdqJn5lG94x9M6C04OTknLNlQV3XKKXohxYbAlo4FBo/BMa+Q2cJZZnS9zHlLvgYk7vb3zBLT1jvdlOKTILHgLB0XYfSNUpohrabcsKjHZ9WCpEpijKl6wxJIqeY1gRrJeAZ+p7g9ST0seg0i36KQiAVrNdbhAi4oHi5f85iHt1JgnHMjaSap6A1Zl9jfYNpHM+vWoaho2s9noYiO8WMHMGzHQ1nZ2cMZiSEgL3dMNQ3kWs8n/PsxRsCJqbjJJ6uHVjOTvmt3/gU8AgZXWaqqqKfrICWq1N0ImjbDUWWk+cZwl8jhDra81ST+0dVlMgR8D1lvqJpDCrUgGbQA2WV4oaB3T6Ovbv9GpWUlNWSm120oOqaSDcsy5LXmz3UkToxnxcEXWIHSzAjOksx3uGUojEG23WkqabKNIMbCVPscLfrWa7OcHgcPYMZGW20N2qbgfk8Y7e9JdMxhzy4t3nj/7ztKwPKRZJHJA04RpQMIBwCixBwlkXbEwL03cH3KAcRo51Mt+Xn/sCc2eIPMI7PCcmMEBL6DtIiw3fR+zBNUlrTYkZPOc8ZjSO4HmtF5GoYcywBKxWrlNFzKzlyNodhmC5ki5yU6H27j9UyLTBDQ1alyFSSSB25m0FFbz3v0FKikmh9Mw7u6GM5mmicfcgkjQk1k22O7Tk7u8BaHdv+RGsg4TZcv3rGzfWe73/x27x8+V1OT1ecnZ5SVSVnp5esX7W87gYuzk+4vjMMXUOSZFx8+A7fefEFs5ML7tY7btcbvHPYcSARnvX+jrJIyXVCS8Mox3u1sncsFjNurq8A2K/3GNORF7FlaazG2jlvrnasd3dcXV0xn2XMZ+e8eH7F3U0Ur1RVNO59+fo1i0W0pTg7vaTed7HleH7K7fqOfKYQIqEqV/RNT5JmrO/WaJ3w+efP+Nr7HyBEzeVFhre3KD/jRz/6SYaxZZjtaLcZhVKUScaH77zHenOHALqm5vzRKcvVnOVyGVvaUuOc4Or6ZVyxlTkvXr6maff0XaQaSJ1ySErSScann3/B+cUFXdfxxcvvA4HbdcdidQJovBrZ7A2z+QldD8VqQdfvGUmZny3wwx1mTGDMyZMCmXnqbseLL56TJRlO3XG1vSNpM/p+xG2vybKMPK8wrqbp4uRydfM9bIicxr7pjzGjdbOdeHDxOvcuIHyGVglFqijmy8kKK2O73iOTjynzM5xrMKOlnCfcrb8HCGb5jKbd4Gmif16SE7wiy+GzL36boshY7z6nmkkQHft6GykYiScIR5pqEjXDJ9FFQVLRdmvSLNB1HUFVeJGhEk9eaYahoyw0eXFB0w2Mg8f7Wz744AOG1tB3gtv1FUW+JLgCqVLef+9H2W1je3+ZluzqN7ixYLPfMnQ9wiv67g4z1igBd3d3DL3HeMeu3oK4ie3BEMiSU+q2oe0Mi/kJvbXsN3FytyqQqQKdQjpL2W0GcArnAptdQ5rM2G49bb9Hq5iqM46WxSxjNB1yiBNRkqSkSUJZvG3yK4SabLMExjTsdy3gUSoh+Jj4VJblFPkaRQKJrtCJYLPZIFMV7ZR89KQLVkDqwUPXNdENIpN45SmXBUoldJuWYpoopIyUoM1uxzydYbqe1u6wNjCbxwjBcZySMKzCjYK0zEmUwrsW90u/dgSUX96OfqsPggoeeuzCPXh7qNB+8Bse9rHDA0X3gwP41l6Hx8T0q8PrH1roh/c5FBMePOmBVjyKg9SsfPv7PFCkKyVQArIsJoQYM4CSOGtJUhFFLnmOcBLvo8BsHGOIRm9iClec/0DnKTZWWxisw/dxIg9EOlhd11MRJFq9CCUwY+Skb9oW5xxJHlXkd9sdt+uYFR0t6yKtbN9uIqjtR/J8RpoXlFpHzlsInJxfkKbRBcW4wGy1QhK4fPyIYehwdjwKGcNgSdJA343MFyfs6w1CBIJXFHmCEprH5+9Sd1GkZO2ID4FlmTO0A1YY0iIhnxdvFZCkEKAlYRTs24bT5Sl9G6voKonX6q5tIm1ExuCR+XJOvd2RIJFITN/j8+jk0Q2RbhJsS3u3R+/jIiBLUvJsQZIEzChJ1YxqFciTpzGSMDeM4xiLUUHSth1JmmJtTMlK9RNCcHgG1vsX7Os7qvxkAtAVdXONVH5STpu4GKh7xnEkTTVNc0uSZKxv32DnM4Z+Ci3BMw4WbyXGDCSJiguQia5n3RijEpMyOrR4jySKiotyyTiOFGUOMiHPow6k73tms+hxye0t/dCSp8vJMvAWnUA1SyOfPASK5QXni5y6axnHkb7v2ayvOTs/YbutkSFw9nhFQBCwyCR21JarGZvNjqI6I0jLbFEx9IY8S7DC8VW3r67y5pv0k/feOMZSsFIQ/SChswKlBGVZYn0dScI+KqGSVDMQqLKcp9+o6O3nmF6SyZRMCcbB0Lp4Yc7yR9i7Gue3hOARQUWz4FIe29pKqSOoK/IKYFot6aOdkLWOw0o2yzLado0UA4n2vHz2jNXZDCVznO0py4LdLprQPn78OGb5Xu+jKi7RSKnIRMluH212sjKuOvu+j5YPRYJ3iiIVWClZLU4QPmDGjtk8x/QdWbnlJz98D+9ATCvPqjgj+Cn1JycqrKwg0dFlv2kHVBr5Xe8+kfzeLHKvVCKnVrqh7yOfNEui96TEE0IcsGSSRqsOKZBuS5rMcS7EAWISO9lgcb5lGBRpbug7ixs1H334IwjVg3dcX1/z4Uc/Rt/HVsrVzS2926ESx3q3RyaSND0hWcXIrUW1OprgD0MbidYIPvrwJ+j3LZcnp7RtQ717QdcbTk7OyM9Tnr34mKfJe7x+o9jubjk5u6BantN2ga5Zs9vW5EXKro2r58snj/n4O9+NC4gqsN/uEULSGIkQSeSVAchAli4AiZkSSpwzrE5mpElC07RoVWHsDX2vsK7nrHjMWKegevbbO3SW4nQTFemuR3iHShWm60E6Sn1C3+7IsxSdBNJEs1o8Zn07oinJ8h1CwmJ+Mr1/jLdyNlaGhO5op+/V7Tf3AyLRt5UmI0tOsKFldZbQdxVe7Bj2llSV3K4/Q/p3OD894/rmOSfL9+gGR1Zk1PuBMj/h1asXrFYrulpSlSvK9ITdrmVRLWjMG5KJH2iNxxOo5jmjaZgvF+z2b8iKirJa0PY3BEayAppmS1YWU0xZQ5InBBxvXm9IdMXQdrRdjRk9jx4lWLvlPH9Eni9j+1g4yvRdNuNAllQI1/H00Y/x/FlUnGdpxXK+ZBhG5jPNq+vnIAz7fUuaFLE6ImfkWY8dS4Ymx7g1WisSPWNWzvF0+DZns655+uRdPn/xGdVc4rynKAXeW3JRIqUkzyRZntA1hiRL8EJAUCiZYV2HtW9XurSWOC/wRlBVReSTewcOum5ApymbTUy8CU4TgkJmM7bdDUHAaB2EFDNYejnirSPtFWUxp1ILbBsX53biXyttMLZHoFEqmdpmMVO4H0ekSFGk6Kyga3uctTjnWJ1UqFX0tGz3NWU2Q6mpGjlVHnVRMda7+zFfEPPtiQlYQsZK5UN7NIFESHFsNwPH6uHRd5cfoEcet3sv3Gk7tLHFl0FmhIzHdnikVB5b8gel+GGP4snjt2IXb+tncT45fA4Pzin2u2hFlqYpQkfhh7Uxl74d40SqtGKzbqauh4IkWuHFqrVAoNBSYwPoRBEk9G7EWktnB4wzJDKCrqFp0FNim2zHacEGKlVs9pGv6Wio2zZ6KOo0ttw95FlJ34903S3d0FOWJULERbOxsbPmbJjoRRnOGa43V8znFWYcCSFWUvNC0fYNQjuMbUnSADi6dsCLGjJPZwLt2COzimpZkSVL+t4gjSF0kYLgvaVtY161DwEvLN6PKFmS5yWjtSidkkgZs6WlQKkkelpqgRee/bjHZ4EgJxqdTimFxI0GQkZ91xPUGPPGfUGRz0lFQre3rG2NGXecnq4YxprgWgLPGdtYGc3T5NjNPIpjdRLFUQjyUpCkM959Z4k1UeTUNiNaxoLVbhe7IwJN2/RUVRk9NL2n7w3z1SV5IWnqgdk8x/lYgc3LnEIUbHcbCA7rR5yJlcuu69DBkmhBkijadmTcG/JuTUAh9iky9MdiiJIZd9sts9liKqg5jF1jTFzcVFVJ3UajeKUSuvaGV2V1nDvavgEC2waWixnOGXY3a5q9ZzabMZgBKRP2Tct+37GYDSSqZ7mcg1Tc7SIl5KtuXxlQdt2aMs+QmUCfrAgkNG1LkSecLEqaPmWzr6lWS1SaRW/EocH5kTQpKEcXE1GUZKYlrRxo2w1SBIoETrOcbgwIc4WxCuM6epuSakVXe+YLHYGS7fDB4X3AuYDKFF3XURaL6SDeg85jVq1w2GFHlX6PnXnDz/zIKag79nc1QjdkakF52mFmgsU8moRvsjuMfc2yOCfXc7T0zNIWH24Zh4FZdcIiTZHaY4Mlkx4/CGarcx49PWff7GhHhfOaxZPHSCfISoV30Y+L0BGEwpgB6xv6jUNOVAIztqSpZnQ9LliEyihnFWrw3FzvJ8HRxI/RMbnA14akSPFa4YNFCIXtTASfUuDHGdvdGCtgeUlRZgiikbUxM2ZFGsnny4Adool5b0akVrzzTgLGHUVPgTggjONw9OQ0Zs9ut6FIt7x58xKla2bLkt3e8MEHH1FvOpJ0JMs0TowE5Wi6nvms5Nmzb3Fy8g5PHn2dq1dXpPmAB9KuZT5fsrlb07R7fKLIREHdtvR1x2bX0HQtrenw3Y7T06eMoyfPSoxztC56UVrX0bWB66sxqvCBNIkrcTPEVWNr7ijLGdv9miQ5xQVF7zac6BWjfUU/JmRphVKOclZghjiQ/tQ3fpLXr99g3JYP330S/STn79F1Pe1+pG3WJGn0R9TSoXSGGVKc67i4WNH3Lc+ef4/VsowihK6L1X0tyfOcrutIUhBS0fZrAj1CVZjR4XrHarlgu12zKL5BXpWM44hWFW3bUFUVxg5UVcqsPAE50Pc1QiVk8iwqPlNFIhMul++w344s5pEcPriBTCkUBdYJFuV79MOesnyKEdCZLUVWkWSGth5Zb3fkuSaEHSIYnpx/nd3dhqLUzMt38IVhu6npGsn1zWesFgZkzX7ryItPGYcNV68FxrY436HEAp1I6rqmzGss1/TDjtX8Q+Z6xuI00PZ7QOJDQ6WeYvM7htGRyiVtv6a1cYX/zrvvs95co5Xn1evPKdMZOEGqA/W+I0k0RZnSd4a+c1gbK4tD51FJSggDSWEYB4EKbw+Z3gX6YUNeaPa1YewFF6eP6PsBP0YxYaY0ph8YLZTFks36MxJdkugKH0bq5obZbME4WqRSpGnBdr+LnqtJNKOvuy3ZtKA0oycvDNIXEBRFMZ/2aSiLgvk8xRhHsAqtU4rVgn6osUbifUYQln3dxwX673wCPhDGkWQ5R23vjt8twLEieYjnPLSjxcRlPCbicG8RtPixH2H+Ez/6L5xT2o+/S/fdz46g8hi2MDW2I/iMyPI+HvRtNXgMc3jw/hNizN59cnyf+tvfZv3FxxQP3tt5x/Xthtt8RClB6oaY5CVVbH/q6PPLdAxAYcYeKcEHySgcSgdMb5E6QauoSjejAScR0hHCxLf10E2AL3LzC6Sa5jM3aRJcHLP7wSFFjnEOJVOsFxgTnzvaeqJaKYRK2DfdEVBat41pLC7m1B/BvLdcbaJaXvrI93chIdEjwVkICfio/k9ThdYFOs/Ic8WsKJnNC7yPjiRdVyNlgg0tSTJHILFmjMqK4JFCI0JK8JqmcUjdR79DG9BagAFVxIQ9IRXD6BCCSSU+onVCmuZ4GXULwRN9kWWs+A31Pgp6xYBMNFW+wNkBY2NE4mB6dOqpiiV13TA4x76J/NmqqvDeIlXk3xpvGXeaIpvTNgYhDePYo3WKDZ5x7FlenlNvd3gzopOE73/xOScnJzFLO4Vm39C3in1Tc319R1pkUdhooJplrE7OsdbS3O15+uQRztcoXSPDHOctQkiKIiGbbAaVkiglECKnbztkoki1RKAZh5Z6vyVJU/b1jizNKRcF2/YO0GQqCpasr+n7DcYMSCkpixXWWnZ7w5urVxT5HDeF0xxM+cHHPPBZRVAdNhg+e/acs/MlMod997ag7Z+3fWVAOS9XZIlABY8NxFD1vGRWpPTbPZ0fWM0zhvqOdtPy5GLFpumY5QUJjmFqFadaM1hLLjRpuWR7t2aeLZE6I8iRtIyTtXcJRSbp+g0+QN/fx71Fl/j7DFIhBF3XRBVZmuJ8VE55f5+m0wZDNss4vzghTUqaYceTJ4+42bxBpCkJliJTLCpY395RJgJdlqjMY92ax6ucN1cblmVBLyWrmWQ0A8bskFiUrqgqw9Dd8PG3fofl7IL15pqiKLi59jS94fziCaOD5eqMpomejFqlZGqJznukHJE+ocgfo4QnCBj6QD/U0Z/QO5arinEcCXi875BYUh1IygXN2GKagSKfo0NcQXtvMK6nyAqKTMYByrY0mw1lFle/zsXsczfxTqSC7W6N1BoMmCEmE0Uh0iRGspBkM5SeovVcyTuP3sf5kR/5mphWzFE9n0jFut6y294SVOBu29K1nmW5omsdVXHJ7c31kWdkvWO+WrLZ3rGvo/p5eXrCq6tXfPrie5ysVhRZynyVsbyoaPuGcVPiOkkaBElmWMwK5kkexVtmT+8M77//Lm0TVcbVfEZTd3Rdj9YJWlUxTUIFqqqk3baczs8RfuRs9h7WDKyWp6zXG8QYwDpWVcnQNqRKMU/f5Wx+grI35CqhMVtmec7l196n6zrOzt5DJ9A2IwFDCCvq/poiDTy5uGS1rOjaYTLVT7nb3NINhiSfYrtGRV55+mHG7WZHXiiGzvLFmy+QMpDnp7x+/RKtc7IsI00V+30UdBSlRKcG1eV4azk/P2O3v8OZwOnJ41iZsCNVpSjKhOb2lqIQGCco8yXbTUNexhV4VozUneeDdz9CJZK62eKt4WR5yX5XU80FszK2yldhiVSWsdOMQ8/ZRcnzZxucH3j5+mPK+UjbeZ4/33N+scS4ltGmSOVohxbbOIo8ELAs5xVlVuH8mrs3jvnJjCyZxQzkVYkMBj0+omtu0YWh0DneBx6dnVLfdkilqIpLjNvRDmu0X9FsHVmlaOodZkzJ0hIzDGzXd7FNbQJ2sKA9+BlmbCHJ3hoXu31PXihcF8iTOWk5cnd7HZW6QtA2W5JUkKQpZVFFr0M9R4kS0xuUTtDSU+/i4q4oE7bbLWmmCc5PdJooaPDe0bY13kuMHSmyEiVV9NnDMVsmeNvw6tUWrUqGYcSLHeNNjyDBTPF1eIEhCqL8p9/H/q1/AP/6vwbEavnbm4iI6Et0xUNVMPhw7ysJfO3P/Y94+m/+t7/yBNR+6xPaTz5lePmazd/7h3Tf/R7ORVHkWwboD/iSD6uM0dWAezD55RIo0HzvhynTJUkqmFclqNj+xac4oVAqMI42cirb/uhzLKVEySi2ypL0GN03jhZLTJ0KIUTqhFekaUbXdeCjjZzBkibR2k4Ih7P3qWg6iW4PUkqGMfL/R2vw3pLlCcJH72cbRuwY58CyyqdOnYuencB8XtF3FqUkWZbQ9z1lXlAUBev1mqzMyIuMNCso0jRSTW0McbB2pG0bdGqZzyr2+4Z+7CbQ4VieFTEjWi7Z71vGAVKiy0E3OLTSSJEixI7RWKR3CKIDgrAhXndBELyOXP6jcDa6IeBjBTPPc/p+ZFbNyfIUO1VjlZCs19tY7Q+W0bRxsY1i6A1pXqBlSZpJ2rZlt9uSKE2WRSpLTNVLkNKTJAuauqft1oQponB0I8pHPDF0PYmuWS5PIs1haLm4uGAcB7xs6caDKLlAaxWBfohuHnkWaAdQWpImGUW1YL1uqGYZiT6j3sf51k9xz9b6KdLynoohZM5+OzCkEMKIDBFs6hAoyxwUUdw4jpGuVwn8aCkySTPY6Ilbzaiba4ZhYD6LXNu2iUWieN3GApESkn5o6Ho7zR2aN1dbnEgostii/6rbVwaUZchRLg4uOlF0xjI4GLs+8kmGwCAmz6tEs2n2DEFMvJ0xelAlGfUwMBiPTjQ6y+ncjhdXG2blkvnpgiyVZLplXp5CiG0tpoVemGITD6AyTdMpDzMeHCEDiHv14cFH0nvPuK2pX71CNj7GSPoRxpYn1SlOCcZ1j8STmoanaU41W3GzWbO9fUNvet4oybarGYIl1Qmfvfk+OI+ayurN9g2pKjhbnWJlR76yiM4wP1vx7NkzLs4vkOlr7M7x/PvPkNqwv81Yzh9zd/f8KHaZzVPcvOJ2M3Jy8iFpvkTqFJVmFDr6WJX5PBqajiMIiSTynTKZolMItgckMggyVRBGSduM5HkZlZ9pSSZyRtOjhGJRVogkAsuuiwNIUWSRs0f0ynLOkSQZwTsIDqkEdugBO1lppIx2j1KCu/UWrRVFmlOkGSEELk7fYTk7YzbPkVLSdRE82aEHERjDEM3kjcW6kbLMor3B9o5h9Ohtj7cgnaLSBc22plUDTbNDJxllNadYZdze3lIkK4IRdP9f2v482JIsr+8EP2fx3e/63ot4sWREbkVVUlXUwlKUgBJIA8IaSQixCAQIY0bNIpNEq0GtQTJkaMxm/pix7tZI3T0tjckaa5CmEWhDopt11EB1LVCggtqycs+M7a139d39nDN/nPteRGQhKeePdquyeHmvX7/uft39fM/v912KDXXVsjc/ZG8cYvuMYlNTlAV3754RJxrjjLcNWldEMbRNyXSSUg4bdDBiuVyxtzdjPJpyfr5gNJr4VlbdYIWmt45sPCbPNKvtCZ3raKsa4zpUGNAOW1TkOD25j1YZ2UhxdrJCBQ5jHeNJxDg7ZLPZkGc5ZVlQtjVpnGAJMXZAa4kKE5o6JnAbbl65zmZdoaKacZKhA0nVrpnP99lu1xTlgsPsKfpAX57vtraM8wNG+YxNccwwdIzH3gBdaUPb9cThlO2mJgozhA25djCjqgryZIQIHKpXnC3uEoU55+drpBrIRzMEW6ztePLJp3n11ZdJRx1heECur/nZdXBG3wmKasU7nvN52cfHWw6v3qAfKppmhXD7zOentI30UXL2mDAKGKfXEMKQxXOW6xVhhI9U6xxdp7F4U99m6Dk7O2ES9URRQrGBcjsgREIyKonC1Pv3VZI8meNkjxANxki00AjXEwWSJEgJAl/1icNd9jkDQ+uQKvWg8pElSQSTfI51A8Z0nC9rRvncc8DqGq0EiAEtA+qyYbMuSJOQ89Ux+3tXyNOYbbHCdIbZfMpme0aUhCRRSjmU3gMvz3HGT0DjJMAaQdGcowS0bUXd+9Zr0Hn3ARVk9L1BhRqJQQUpWsesV1vSLEEJjS53LWwB5qO/i9oBykeXi4x6exnxunvQvIktyU6P89x/8//g8Nu/+ZHPa94shnnTNxAdXmP6tX8EAFP8Je79w/+Ru3/3v+ci69hXSS8qkn/Ytv6QV/9DX/nIEukYIVv6riUMJAKFlCFB6Og7s+MGaoLA07GGnWl/ECjadrjkxV3EElsnMIMAJenbjq6zmMG3FrfbLWkae2Fk4LmVYeRznKNYU1UNAoUxLVEU0PUVWmuiUAGGuq5Is3gHtrwFzzD4ylkUx8i69txra8lHmjAMmExHrNdLD2C1QWiDDCzdUNMNIKXwVnijmEBH2MYxycasViuOzk9JYz+JUTpkvapwVnO+aHDO+CzzxotD/DgkiDPJdrsm0JCNRvS2JpCJd2UJJOW6Jk4ClEx2iWCGYSc+ihIfP+ipGzXWSTabDWwgiTTWabQUZHlElsWAZLPxdLu27VHai07rZsUoGxPEEbemU4wxVEXFRRhG23ToCIwdwEnCxFeKlQwJXeJtzHqD0t7Or2q8xVwQea57O3Q0ffNQPS8hyxI6Yy/V7HW39RaBLmRb1CgZYK1lVQokAqQPdAmCgG5wDFZidxoR70m58CrtzHeinHPoMMC4nkEMDL2gbyqcsAhCkjRn2OWcl0WPU4rpZEZRFBgDURSzqUqSMKIs16SjHNtZMD5TvqyrnTF/jNv5fefjES+9dBdkTRxkb+2G4v8PQHlcnXhuUe2VR0EU0nQdg+mZTEZ0TtJuelRUowPHpurJsox1u0IGKefnx4RaEgQKYw3VZonWIS40zCYjbLvm6HSBPWsoyozRJGC98S1fKRxD7+0qpHI4azHG5/oK4TCmv3RzvwBBQoiHdkBSUhSlv2nrjroa2D/MqauacttwvDomEZrZbEKtHGjHqlow2hsxNCtGowmZVQxCMtIaY1vSVPusTULCMKVSAWVZ0xdrplmE6wpC4Th78Dq3b8wQMqHYdly/ssd6tcQNjiQOGPpTnrieYRtHP3Scnt3j+IFl/+pttsWnmEYpRWXY3IcrV65SbCufLdxaxuPZ7sGnCPKAMJjAkGOx3vpEGcygSNIJoW0Yerur5taekyIdTV+xPl/6i0b5wWtdrL1JbhASRQlBoAiSgL7tsQicCxHOE7wthvW2JU28IlmogFHulaldZ9FaolWEMAOh9kDSc268pyVSU1UlsY7YG+2zK6Aw4Ihyh4wWTCYTEjHQWwfOpwz1VYOUPWp1RJwoum5gWSwhzLlzb82Vq/sQWIgajpZvsHnxnNF4gpSaKMkQvQGtqMuCwhhmh09wtnidplIcyIwodRSVQUcRD06O+eK5T7bZbDaEYchkOvcK5balaRZcnY8xpmc8TlitFhzM5lRlR98pptN9ivYc4hVFDYNYYIYJgylYLHv6bkvTGebTMULBbDTaic0kXWsxXU8wjjGyYG/ypBfQqIC+G9P1DWAJA0GSBlg7IXVjivIcZ2MEEYiCwdV0ZY3Y3fL7BxOOj48IdMp0co2u66iqDQx6l3xzj7rZIoiJ48Dfd86QphlVMZBlGUV1Tt+dcf36Ldq2pa5LhOromgCtKhYnNXHiuUrOKg7mN3ysm36Cp25XuxCCiPn4XUjZs783oTNnmEFydf9rsbai2NYombJ/MGG88WEI6+0JWfIE2+2WvYNr1NXA8foO1288RzdssUPEZjVwfPIGWluOjrb0bUKSqx3fLKYuC/LRyGcoqwpsQld7L9skyVktV6TpGIAwDIhzz2F0bvLYczGOQ1abuwQqIAxHTGcghUYHCj0ItNjlCWuJygOCUAEV4+keQkicaFGBZL7vQWk+GpHlsffd2wEEKSVITdMNrLZLdKgIIg9u2s4nG2mtGawBJIFIcbJBKEMUJFRVQze0TOY5WsXgDKKuv0Bg8+giUOx6zd4myPh/xUVqza7vLPwqTL/uqx8Dk0QRi5Vvn194RLpHyodRGBFH8U6AEyClQCcxt3/0r5A8fZsX/+qPowPod+rcC+/Ki8UrzN8k8IEv0Pz8+xdH09T0yqAjf0/0fUMWB1jXkmShp1QFmrZpGQbjuzjGMfQ+hSuOY+qmIc00Ulog8grj7txXM/Fc+KoqdhP0Hqkg0JHXIrQDQnpbOaUUUoTEUYhxNUr44o21YHAEcUwYpww7vmdVNjt/TMF2W+zapYqy2iJQWNfTHBdema18scDaAaU8l7PrLIOBsq44Xy5wVtP3LV2/xRiBNY5AeZFP27aXPE4l9WXQiF8sYRRg7cDR0XIXERhRVYbRJKI3FulAacdoOsIODW3n/SXTNEbICGsHDwaHAbur0lk7kI1HBCokDDWzScZolKGVpOmWbNYlaearxFKCZydYglDhHFRVTaRDuq5jsAbhPDZwArpaUQ5wwAABAABJREFU0NUb/xtp/1zjwmc0CDDCYxfT9RgHRVWjpeDk7JQ8zxEuoh+88KsyFYG6cHXxNAglwQw9TePH227wnM62tbukJONtlQR+4hdoUA4repq+I0w0bVNhrCaOY7I49VHC0tIP3q86jEKc9BGQloDBtEiJd6uRknWxRSF2AL3FGEtvSvLRlKJaer5tP+yEozFx5nmS1jrSUcS6WIKLmIwTytX/DsbmnehYLpZcPbzCyckJovYk9LLe0PRbdJhSdx2xjBgHCUoITNuibENbVOjEYZ1huRuQpYS6bMjSlGK7RukUoRRRHLMpKzbrhnw8p6o33iFeOKQEhJ9pdG7wNkWBz982ZmcWLh9aCl2kR2gt2VYdLkg4uL1HVRoeFAviIEYozfzqlDxQCKGom4667ogyn87x9Due5sreFV5+5S7peMS2LkhjxWQ2py4rhh7armM8HRGlAVVVUdcNq/MFea65fv0KuJCmXxK6hnuvHDHKp0RJjHWCKM44Wy6IE8GVG4fk+/tU9ZYkFTib0a5B2ZYZW4bTBddmezhbo5OAk7uv45wgjmO2laYqLHXl2Nvb4+VXX+DJZ59EELEVMVk+AemTcZJshAoUzkriJCfXAUHfU7eV95OMIsLRiKqq6NsKOzhkYImjiLbt6YcBrXNU6MUvs3FCZzrP6zMG4RxJFFyq/xw9TkYMg4/gNMYg7OA9SiVMZiOqYWAQ9e6hp+jKLaM8YRoOBO2CXo28J+OOH5pORvRNx+G1t3uFpPQ3dVWVrOYLtBRMxBNEsW9RdZ3npHW9H3SbtqUfWiZXb1IUBRmSq7ffw6uvvsrJay8yyidUZ+fkE0MmNavlKWmi6bqG9eJ8Z9swQkeWRAmOT72Ke7HaYozh+OQuk+nYW0SVZ5hhS6jHlFWNttcJYsPVq7c5OXuFPqg52LtBWZY+87ZxbIuKd3zR27l//y69HNhua6IopFhXuwdhgLQdo9iDzzjLMZ1mOtEU5ZL53i3qokGoiqtXr1FsHOfLN4gTsCbi9HjL3uwWRbmgrJakWUYw5LSupTYVs71rPDh6BUvJyI1IxRV/3qM9hK3Z25sg5IDDcHZ2hnAx/VAzGz+Fo2E6nhGqM5RMiaKAxfKYxWKNlIIo2YJ1NE1HEoX0bk03bHEmZDK5AmLg5ZdeYr6X48SazdmIbbHi6P6SyTyh7Uo+c/QJNsUxWude/CK9q4PSA3vzQ4pyxXSsee3VuyjnCFJB28Z0w8AwFIRRTtP2hJECHRCpHGskQkravmG+v0dT+2dM09UY0xCoHB30jz0XN8U5zml6ZamqB4yyqwRhS9NtGM8zus4xzyZYa0ninLt37xPEgm5oEPQMpkOnmrr1HoaInrodCHf3mpJg3EDfCRw9OlQ4l2FtjXEDQQyRkhTbkiSNCYOEvm1R2hIEmravCaLAt0uHzttDdTWdBfdIb1jsTJEBrrz7g9yXH+Eil1t4z37f3rY7IHdhF7QT0cy+6oMPx4rjMz78+qf517/88w+9hfDPAoPDDoYoDNjf2+f6tSe4ffMZ3vuuL2OUjwjCkKvf9a0AvPhXfxyzS8u5QIqPAcs3tbYfw5L/kbKlEBCEkjBU4EBK0ElIURQkqd65iXi1cZx4AIjzRYq27Ymj3E+I4ojBtDh2NLDAcym18LZTSgWXnP6+7+m6gbopdmMVxEHs/WYBazwf37iBKAqo69pzIlWMCiO2m8Yr9mVA1/X03cWxCIR0DIPx6WTWstmUl0ltfe99XJVSHB950dXQQ7m1RLEgDGP6zhIEMXmaMgyGvjdgBEka4uza08xUSFVVBPLCTs/z0G0PkcoY5b5jaOSAlBdG/o62aYnjFGcAYZACrDEY6xDOg0eJQssAayGMLmwJe+I49UC5LDk9O2I6HRMFIV1rSdKItisIYkVTNyADpBUMQ41SfgLWNZ33LJU+ttnbOGmC2F8PbTsQBF53UFQVWsf0pqGsvFXPRSWx7gey0Zgg1BinvE9269OQsizjwm9aCkcQSazVNG3HbDbBWN/h06FiGMxlfX9oOw8CB0sQSO8OYnuiQFO3JREJ7bplu/Hc2SD0qn/DgNYBi8UZk9kB5+cntF3FfD6nalpGNiOKvXVi1/vKpwoDpFZUXQdK0rQNkQ5AKoqqJgoThBAUZUHQO3So6Vvjbfgme2++mf69y1sGlPPxhFE2RqmQ+ezqjncA0RXPYZOuYXQtpqssKpCYoSNKRjRdxnwWsikLMJZspDGdIY5SogBMP6DQqCDC6pIw74iynro/YRJN6Ldbhl4TxwFCOvr+EcPxzjwkH+8sKeTlA8jtuCqOIAwQvcW0Emu8BZCSEVoqqqIgiDWbskUJTRQkXJlMUJGmbEru3nvA+fmWURITqIDtuiWbX6drLJt1zSTPqU2NrQR56Aelqt6SxxGjNOb4/oLp5BBUigwsaTLx5W1tcDiiJGFsBupNw3oh0DJnkuxRlks269fIRymTOKMPDqiqivNVuQPkHUHq+TibesnN0SGrcsEkNQzVGdenA0G3QBCwXG5YyJ6hd4zHcxYPLEjNZlsymR8wyqdshpA09rGFx+cL5vO5j2MSljhN6bdLNm2BMT2TyQwpJG3b+3xzMTD0XvlordtVebzZvCccD5huwPYtSEccht54e+ch2jS+mipkgBsMg7Fk2QQrNEGSeqW+HSirLVIphDT0piWINF23pa8sSoxp25JRnjGf5fTdACTgNFoHBKODS0sp5wyzQNINLWEYoK4L+lKgtOOP3PoSjk/eoCy3XHvinT7KSoT0pmOxPGMy1aRpy3a7xjq9GxwssyQkCC2Jsmy3BQd7M7IsJVYhVVWSqAlnR/cZTw5ZlUfsp1Pu3XmecqPQOsWUDyiKBgjJRnMOrzzNq68fUTcFyShiKhOqwqGCjkAGtEVHNpKkaUS1NWyN4JXXPsPNG0+hgzG//fHfY2+2T55NeOWlTxKoMbduHzLKUtbrLWniW1VShsThjL6FbfGAg4M91uuOJFc8cettNJXD9APOdmTJPk3t/Q8XixV9LxlMz9Urh5ydH/PEzacYTIXpU86Xd2lqQxgVpPlVinJJlGry5Cab7TFxnDNwh005IY2vMB5dpWk7tkVL05bcenrurwmxRxw71tsNzzx3SFmteNutL+bzL3yaLz38Ku7fv89qWTLKJ4zGGeW6JstDVARVOTDbeyf9UFEby3JRsVq27F+dY2xPNhpxcnyOUhnW1WgVUtctg6np+gEV7K5d1wARAyeYN4VGRFHMMPT0nW9tIpdUjR8wuqEnzXOqqkJLSTFsGY1SqiZAWEfbNySpNzUfjCGMAtq2xgnD0PfgBO3QEkUJiAClHGkWgBNUTYlzIbPpAYvFGQdXPN1hsz1HCEccp7T9wGw2YrVaYYwfGAfTokKB7C/gpEN/6Cs9ototh1/6daye/hd0f/AGD+1+dvZB1huIy0u7nwsxzkPAdvYL/wt39ns+8ju/ymAdQ+/oO0eYpD7WMvF0m0d9JG9ev81/8Vf+Nl/5/q8ijCKufte3cvov/2fOf/Xf7ixZ/Lexe87vMALW+wp9AYD8jxcpPR+8qqpd+1LRdjXG9qyXg+fsacVquUVr7UUdBg9chKHrq13bOtiNM4K2K1AqZOgGRKBwVu3kRT7ibzQaeZ7u4H39PH/SgGAHWCXGecPpi8i/IIgwA4jO+lQcHYK3qKapB+/6obxwZ5AW0xt6MyClr24BaL3jv1uHFJIgVAjrgX1bQV1ssNYHhKyWBVE4IlQaxECxWZEmEWVZYqxgnE3pWs+3FEJhOoeWIbaH1ar0oMasvFK/g6ptfD532WCGnigOdp09ixsMDrsTEmliHTD0lq7x7XthLdv1OVXVMJuOqaqSqtjinEQKTZyEgPKxxkICCjPU/jrvDcvlkjRKQQh6N9ANA9oYnDAYdml6ylc3lXCEifSuBUHqRWJCIZSgqEofjRlItrXvrMRJhNQSFYVYqTwAlxFSa+qqwLkeqUM2RYWQdqfxSLylWj8QBAE60jtaiWHYBaxIqSirDusU26Ly7erVmsEarl49QCmJwfDg9PyylZ1NxshGYaUkHY8wnaUeGqI0IXAKZ6HuSiIZoYOIQE9J0ilp7L0yi6JAOoEFZnv7dE1Jb1scFiUTVqvVf/RuuljeMqB8sHqDIIw5vnNOEqVM8wyBpe0qslHKYr2gaA1JOma7PEcIOC1O0UHOUFk0vhQsHMhA0oiGemiJo4gg1pSloG47YlejdIKzkqYzhPEIKUOsLYjCYFeJ9H6VXultdi0Td1kRuxDq+HSFXZZ333F0suL64TXatsdZHwMZpiFWQGxHaCkR1nouokpY1SV5nJPEEcbUrNdL0lxSlOdIgl0LHoLQsSq2WFt4+4PUoNMR60Ygkox1v2SoPMF/ko1py5qjOy2D6VhtXmE+n5MHhvW9Nd1wQpBI0njGtb1n2BZrqlZRFEuk9GV7G/hEjrb1syjXVHz+1Zd56vZNBAPGSg6yKWXd07QFTz57la4uqKuWNA04P1vy+mt3uHX7ac7uvcxxP5DlOSJLiCcjurMTTk/8jHo638eGIZX0Wdmr1YLxZM6N689irBf1aBsQCodzCmcdgfbZr2DZrCtG0xFRGDEeT2i7zg8yg0GHMcnIWylILfzsbeetJ6Sg7xsUgrZpkWFEmHg/P7TEWcFi3TAZz6mqhhAIVEyxSw/J8xSEw5oB60C2vbeJCQKCMKLrOiKRYho/oxdBQm8aTo83ZPFNsqQFJBIfCdg7ST562sdyGQNYP/gzUJZbpBlwzhDFmmB9zmBatkPPg9UDnLNcGe9h9T5lV9H2kjfuH9OUHWGY0taS+Z6l6nqssd42pPS58dYOTNuAO4sV2ThgOr5BNwwst/e4e2LY39eUZU2UaYSL+cynP0dRDmzXA8cPNuB6+lYTxQ945dUXePKpJyi2ta++gc/YHWdEYc54PMZ2PU1rKTc1682CPItYr7Yc3rjKKy/c9XzAwFE3BX0/EAY5i5OXqEvF0Z3P4thl7/YpzXBEmgmkLImifdbLMwLp2DvYZ7202GFOpGeMx2Nef+OI9bait8c4JIvNwMnxGWGkSbOAqnBU9WuMRlM+9bn7SGUoywlF1aPVhKJ1nN05w9gGsRk4P63pO0ma+QHg5H5BPoHxaMLZaUFZboiiDU3t3QvCSKC03YmiYvreW8doGWL6gTQZUxQFYfR4WWyzrLAmIM8nlJutr4AILzawvaYpIFAjimJD17UkScTQbxE6QMqGbblAKUWex1y9OmGxqpgke+TpHptNwXp9TJIkVGXPwd6ENHc4KUjSm2yWmtPjksMrN8nzFKVajBGU1YCzDq28wCcfJTRNS5pEGCvZbrdIYREiRj77FOrr/oj3Lyw2mNaDneyLvoj291+/bGn7qF2LkL77Yy9Nzd1FZ/yxZRgGmq6/FA2kaU5Vllg30LR2V4EyO1AFL778PH/5b34//+S/+1d88du/BKkk06/6AOe/+m/9Bnc7cml97vBgzT3SSH9oXPmHjGCP/27OWoYeorHnwTllwTiSOKWTCuskwgnCKGEYBs4Xqx3AC8Boyq4jCDV9Z5Eiw4FvaQuF1vgJs+KyMpwkMX3f7pTjD63vhHC0Q+MVuqYDJKIP6Ifaxw4PvS9AJOEOQPfoIAECdBZ6GhNeyFesN4xGI4yrdipfP976U+M9MI3pSJOYIRiwBrLMexqu1+cMXU2kfIgFMsJZxdAKKtMThbH3+W0KtBgThqmP6jQDtm921ImG1eoBVrmdE0Hg45ZL35lSLsI2Aid7T3czlmHo6LsWEUVEOsY5S6AiAqEwDFhglKRooZmN59ihp+0ahAsplyVJGmGs2dExeqTsaFuDFoo0jrH4KOYoCoiSkHaokTvvWKXUzuYLL8iRAdAjhfeVTFLve61CRdVWdMbbbAkpqNqKMIoQWnG6OsMOjvF47C29pKJtWzSGfvDela0dkFjiUYgbvCBJhYKm82XmpioJpO8SKOVDD7SW1ENLYzviOKZoq523psDJgFAmWGE4XXpa3rZqMaYli2IUgq6t6ZpdwpNp2WxKkmREtXOTaVsv/tpuNwRBQBiGu7z42PPKM+19uN3jXZn/0PKWAWUUOAbTsrc/I45Sr14ThiGA02aDk5I0nlPXHUrmjOIxNu7obYPUAU1tsMOAZMA4x2ArT06WHfdPj8nTCXXXEpGCizA2pmsCpDL0boWyflZijHfZV8rzqawxBEGIGTpv1rlrdSslPaHeDV4dLix37zzgPV98QFs3TNI9pGoxtARJTtRpjGsp+4JS1AQOmqHF9R1KNaxWBiEVYSgpqgopIrJowrb0KL6uz8lHCUVRIkVAWW2oy4o0SCi3Del0jLMNRWMBRRD0BInCBjnjgxBbJVT1AyZ7I+qqZ7U9YVssCVXoW62uIw5i0jxhsV5xbXYVp6wHWIHwOaK2py5XrMsl1564iZEKlOW1119moGOcT1iercnTjHe+7xkmkwkq7cBJggECbRFmScyWLM6IJhF1v6QrvJXQPNaMJ4bj0+c5Lk8wJmA8nTMMA0frjqtXr9J3ljCOiCKfHBEEin5ZMpo8wWZT7Ax0/Yx+qBq0VEhnUINCC59tO0iH1AolNTjvbWpcRdv0vsXSebPyWZbRNSvSwKHChKELSBJvJN4NPdZopHIItaUhQ4cBVdMidlFVQ1ugdYhxhmp7h0CNkcpXpOptSxANSFnhekOgQvquwQmfoytUSKA1UZT46oWLiKKIstqSjW9wEdlpd0pU2xckI2/Muy2PWZ2XvorX3PUq0c8nrFdn3H7yEK3OSCJJEinmownN6oRXX3yFunb0rvcZsAK6oaFuO/reMM5u0g0rsjyha0PA0vUleRbzxBM3WC7PKYuBV186petLgtD7mIZh7OPMmlPWmxPu3lOEQew9Sgev0g813H+wIJBzZLiiqjfgJFGUoUzK3bNXQbbEwSHr9TkvvvQGgcoZho7JLOb89B7j6Yiq3iDlCdZIb4vVl+T5gqGXrOtjBDGIhKbd4sTztI0lCAEkQ2cYXIGUR2gd4GzA0ail7wPW288QhYo0SVieN0wmM5I4Z7Ndslr6iLY4FTRlxGZRIOSAVAGmd0Sh2qlNDdb0vh0ba9q2QwSKIA4Y5TmYloN5hhTBY89F4QRSCpzriKOAtqlIMh992bUDZe85w3EU0DWd5y9KiTQONxhGSQ5KEamErjLk4ZQ8zdBKkaUxV/efBmHZrirysSaIWqrNiEkS4doN++/Y95Wb+pxREoPMWW/uc/XK1FsHuZSqXjLfTwmDgLpSjEcxo3srwCGfe/YSa51+5nfIrt68PDafa+0Tay5de4QHJ9bsgJyUl6Dl0eVrPvj1/P1/9F8RaAjDEDBkIx/BWlcdQrIDOB4MBIEgiiW/8wf/G1/89i955AQ//Mfi28reLshgd+Lzi0LnQ27nF3TD+UKupUQHAh145a9FoeWIwUCeS4R0Piov0igEiQ523+HQceh5wc4XN5SM6M1AGmqcG3w1WAmMcMRJgnU+3tN7MDqUDhAIoiigbVuSKMTiW87DMBDImDCS6GAHTLRCCEfXVyCMt+mxPjgDNO0OHAWB9ylUMkNHwosnpdct9G2LFhqlFNtlj1QOnMJo76wRqpxAa5J4QlGsSHf+znHoO4NN0xBHuRew6GA3eVZkaQjG/5aCzLfebUdTG4JA0TQdSvT0fYdSIQKN1l4oaPqOMAjIoojJdIRwkvOTc9JkjHM9ZdvStS178yscHZ3sfjjLaDQizxOyLMCZmiiKUTICqSirFUVTYZ0liRI2hacIdUPrrXq08BPwcARWIGWLDCS2dT7vXBmaqkIqODkpUMFOuyGhahq/3waiKGRzdgbSt5SN61gXp8RxiCImSCRVtUEFChWHREqD7Km7BuF867qtAYnvusoIaz1v1WKom5LxJMUOhiABoS3bZrW7JxVSxmyLAidbLANt3zBYiwoMDY6hrmmbijjI6Io1uA4tYbtZUJQ1+/tzQNO0lqatsC6k7fy93dSG0TQlSiJ6A1HylmHiWweUpaiRgWboG6py5fkFGtp6i9KSRI+o10ukVsgQTrcb2saRpWOmsxRtaqrKm54aUzGdTLC9RipDONa8fvKAw6sTRjG8sC0o7Sl70QFl67NN48jR9Y037g2lv8BjiZQDxniCc5Zl2MFdtlKklNhBI4TGyBadjdm7lmIN6MDy4KQhTB1DcUaeZ8z3r3I9uc12W7HerhBRhAkFXRySj2qa1pfeJ/mMk5MTZLggiScYY8n6hHm+z3w0ATGQJlNee/0lmr5g9sQeTVsAjvnBhHt3zwiUZDJR7OUHLM9biDvCyZjGSR5sjvmKL38fxw+O0ESsC4OQIdk0ZzxKAUtTVhzsjzk5e8D0YExVGhwNB9cPuarexuuvv0yShuxNZ7ihRHSWQFlk5Kj6Y1Q+Z4gnXHv6BkW9YSgVTVchJAT5ATIasSprXKw5vLbP0fEpdd+jdcLNw326pubs3inOxjRlA2evs6pfIs1T1qeWNJ+xXK2YzA64du0mb7z6e1y/dhshY6RW9EODdQ50jhlCnBoYbEc8i1FEtKWl72riGLquIUwleZhRFYLBttALhOq9j5owVNsGJVP6ukTqDqV9FbcoKsJQIYykwxAnEc5BvYsW641X7I3y6Y4qEeDcwHjibVWiKPJCpqIg0hMsBkvnhRZhStO2oDRpBBKvyA7DGGN6hFbkaYzpe6Qe0XU1h9EBTz71DMZpcJKz8yPixD/ULwj0XbFmfLRkP8tYLxe40PKed9+krFcgBs7PlrSN4byosQ6iKKXeFnR9zZV4QtsLms4gZUqxaOHOq9wYS5yxYGuUkKhGYwbNYGoPiAQoQozt0HrAGIvQg/fQlCO6okCqFWYL240Xo2jtMPYOz+3ts7c3o6grNkPPYCxKTJCyw5SSEsuwrug6PKm+2BJmCSJIWL56RhYF3BIjnLaosKWzgkCmEBta2xEEU6rqCCdiojBg6GEw4M5boGawCWEfo4yik4KgbHFFg0MTBtdp1g4ZFAT9QGd7rAoRtSPSknJo0Vpg68Qf9wD7wZTWxHRNQ47CDiGDqBFli5aPz9azdI4xLafna+J4wqZaIrYGoVsCnbAtBpJUYesW6SJCIppmYOg7dJCgK0XX9SjV4lzpzaH7gs54Nw0TKmxv2M9mWNPQDyXabbjziQ2T2YQwHCO2HXux4ny7RMcpuo0QxQKlIVIjrO0p3lgzuxJz85nnKO7dJXxtRYoXFmItOEd29SYqjDFdy5Vv/EaGT79+6RNphgF2E3axazlb6xA7oPkogJt+6INceeIpvvM9X8Pvf/SjdJuOOIqwpiFJMralAefQgUIpSdv69nfiFPOKxwCqcCB336HwFifGGuRFWdI9rI6KR1ihbwaU0onHXgtw3GrBlQIl7S5Fp/c8OO1zy5UOEK1XfOhQYrCEgcZZGAaHMZ5TaU2NtYawjzGD77A0puPV2NI03tMwSpJdJdz7/bZtj0CSjhKMbXz7PIiIopS2rS+fO1oIpNC79LHcAxrr4z9NZ8myiE2x9RF785R1sSFV3jFE6ZCmrbE7MebQuR3dy9HWPUGk6c0W4zqatgJSaCwIR91s/cndVduF9DnqSZJiBkdV1mit0ArSsS8wZemI8/MlWR6jU/9sTVLQKkAqAfQ4NFEoEUTESUZVrz2QDUcoIbnxnussjs/IsnTHA6x44oknePXlF9FaMRnnrIueql4zHu2hVADCp9l0raHrQ3SUs1gsaJqOTkq6wXD12hVa4yeTV+ZjglCw3q5QMiIfhWy2PUk6Q+qarqnoh5DVeo2SXjiotPVWBsTUVYcZYBhCEJZAO8IgJArHbNYtzvr8c2xG11TMpgGmH6jLCikydNogCVDa0/KyOCcMJGW5RodjeixxEBHn0NQOJTUCxySdsdme44T1/NOwR8qQvhKEgfHWV0hk0GD6ljjRCOG5tnESYxnoGsV4NsLIgW2xJImnJJMrGDtgXY2QXhikuhFV1zEMljB8E8/nP7C89SzvziJVyuHsGq+/8SIuKBGRIJIxgRgjA8lsz1sEuCHCNBU6aEhDg+i39DVM0qu7GVzCJLtCvW1J4jHEDfPsBrN5TtcuuT7VjNQYWoeyIdJB1bZeISUcxviqo88AVTtOQwIXEVDSzyratt0l9SjCQXH6WkVXCLbLFUZ0TEdXCUJoCLH1hpPXavJsxvHpEWkWcePKAcZq2gZ07kiyQ9rB0vU1LtRsWz8zmO3FRDbmpDpB65DNas073jFnev0GpydnpLM5V7MrWON5a7eePaRuCuIgpO9gOh0jHFzdS7h/dMLB9Aqr84JRPke5iK5eoSPLYr3kZHlGHOQIJzhZb1i2HX1Uo9KI7aA4Ozonipes2hV6POflo7s4K7l2cA0ZhCRDy8m9O2zPNhiZ0w6GcrNlNWx2D7oWsJRNjQ4CpI642yxZnj5ASj8LttYySiLiecRrizeIg4Tp264yzjMwkri1mLbh7c9coy5rRHXGk3nK2aufABGQjEYEUUhVNayajtl8n3B0DeE6lmtLFKZUzTmbzQnz+XXSZIrtBG1XE4QBUTCmajdIJFbXdE4S5RmBiH1LSvgotbaH6zeewrp+lwXshV1N1zJKp5jBUhQFbet2RPT+MrLTGG8PI6UH2XkWgDV0fQ/Cggs4OjnDGMNms+H8fLnLutVEkfe/TOOENEuIg5BsnOweID1t23F+tqYsa99C1oK6VRgz0Nc13/nLH+fqyRJnLTes2TkVaK8Kdr7dfpmjLCXObXEGrDMgXvVVHGu9NQZgrEXtcpYvWofeMkbuhGsAg1e1Sh8R5w2lHUKCEAuv9HXOm/8JgBItNcY5lFrj3GvervBiPY6RUjDsrECsvagkXWh+S7DbXcpKh7PNpVG1VxV7gZK3rGlw1teYjG38Pu320p8H6bcH/jPW7Z4PHVDh8KbZEoF1bmc67XDGqzEEDiGM72iYASmP8d9gkNJX06T07z2S3rdbSqw1O2xzhve7MyAk1m7ZaVZA+G041yPcRfKMT/PyoOhCOSuRUmCt8NcZ1udpy8XueA3OSvQTTxEePAlWIHJ/Lph5ur+LLRfpN27nGZx/09cQf/DLcJstoqzpf/XDyJ/918jX7np6UFkRTWbEkwP6uiD9sgnzf/LlFB/5OMf/z39I8+KrMAw4Y3hMFeNJjPT/60fgL/+nICB9+7O88j1/iR+8/Sxnn/mtnQTXcwSlbACfLmDt7hku493vbtk7A+UcWEvgHPngcIODixTvYfj32Ac9vkSPVCsD60i64XK3lYWDWvBXXpZ0Uuy4oRc/7OOpIOKy57+Ln5MDlxfBZVyPwjmFVOCMxUlLrxSvJpIff9oShjlxEDEMa8BRlxXOCYahQQWSpvGK+77z17xzviJ4IeQJQ+F9Sa24TEAJwxCrPLUgiWKU8kWWQCqEqgiVtyYa5yHOWrJ05L0d02wnTjEg/fNIqZCD+cRXp5qG8XhM0zReGNT6qly7S0nTKiYJa+bTGaa3YKDYbjEG7pzc4/ZTz2BY4awkUyP6vsEJyTzP2KxWpGlA2XZ0bcWmNOR5StV3lA/uMAwDo2WOkSGu2uIwzGYzHjz/eR+L6CSbTYltvAn68aIi0AmjccTJco0xPaNxSD5V6M7x7LO3CYPUp4+1FSIw5KPEt9nNBtxNRqOMwdQ0TU/fN6DGuzCHGqGuMQwDxabkxvXbbMuS1eqcQCUIAo4enGKsf4YmaQQMTOuaqhroas9ZnoxuUlTnRPkKKyRJ0iLJsa7xHc1txRNPXGE2DTk69rqM1bbn6rUJAkmeRyzOSqRImM0lcZLi8JNqwZj9/X3KsqSsVoRxS9/6OE5vbQcCSxxlWCNpGuvTvPTAcrNBSkc3LHiwvk8cZ54nawbm2YR1vyBQlqb2rfe3urxlQKmZ0bcd9++/RBxp8vwafe8FDnEsaApBVfsBeTbOuHZwha4vWZ4tSdSE2c0RWiWU1YphaIjCgcm1hMXiDKl6Dmdv5979O3zJu27yuc+eURQFV/dn1KVloEdpf8P2xuJ2ge3++3eKqR0x2mGwxu7aUN6r0hroaDlanBKMU9RoxP5BznbjWDVLXr/7AlLmKBlyNYi5/c7n+NyLn+bk7ucZT2ZYC1dn+6w3hY8/SwLycI+qqjhdlFTOMk9jgkzhjOLqE7d44/guo3zG4e3bVPWacutVg0pIptMx4zwH6weOJMjRhMznc+JsTpLFVG2NMz2bzYIgh3SUgkqxTmPR3l9Mh0wPb/DiK58iScfMZ9co2iWLakWUjOmFY3o4Yrne8NrZa1jhq7e96BiNJrzx4GXMINifHjB1CcJYzu7dJ89zntg/ZFM1mBa2izOyyJKPRwihWKyWbMotZagwYY9KLXe2glmosb1EDICw1F2FFZJOZ7hujc2Fv4hVQ1GUDIMljgM227uU1T26oaetJScnJ4wnXtVqyvsonRJFE4IoJkxHTKa3EVogVIhwDmsUZTVQFkdsNhvariFKUprax4S2Q0WgM6IoYL055/T8FGsEi/MN8/k+fe/X6/ueyWTCeDy6NNwttluvzjQFptdIBda0KJkw9I4g0DjjcNJfiyrw+fLOCZTwCkuJ8O0l6zlTcZoghY/0FNIyDA2h9L5mB6drnnrxDoF5UyQdPFTWsgMQjw18fgV3UbK55Jw5xOWnLrb3qP+K/7AHq7t1nEUquWtHemB1YdPyeEzecAmYPJ9uB2ge0w/vvubRj4mHx3AR2Sd2vUtn3e44d0YzzhubX5yAi+94eDy+GfrQlsZX0vxOPSLWuLCYcTzy+u61y5O6Q62Yh+szPNJGfZgG8/jB7TZ1+YcDZx5u9/Kr7OV2L36/h1u7OGJ7+fcjZwyiALkTWah3vR35Jc994X686SOXZ+y9X4z4ivf6F5IE91sfI5ASvvFr/Xd+5HcRf+qPeWCtFGE+QWQThBNE3/ZnmH3dh2h+8r+k+x9+DlB/OE/xVz6K+9TzqHe/A4CbX/EB+G9+ivAxxxGfyvFwB7+wMR0N+PKzsUxaR1Q7cG8e0L7wc29eYiOQu93MB4dcF3hJOsS9ZNQqUsTupYvf7WK7j/5ovOl1x+Pf/+Z98b9iKyzWwNPNwIuuIQoEWkTUhefUhZH2fo79gBI+Wz6MQprO8/S88fWF8bfn0NVti+l9/rIZvFjOG7AHOCcJoxArBoQbGAbfXQm0wvSOrq2RAoz1gR8+h3yXzW7VzpbP7SzpBtarLVIrb58zCLJdtrhUiiTTJEmEMwNJEjHrfQZRnj+BDDTb9RUEsZ+sl4bDw0PiRLF3OCNLxpwvNyxX55ydLii6DiU1TjtkGLLtWharc8LIO2q8cf8BcRBePnes8YJPrQXrdYFAsX8wwV9bgrvLhub51xACXru7ZjabE4Qh54sz0jRmoEM5xdVrU5q6Jk4qur4gjnLme2OK9QplDXGW0dYOhWY6ucLpUU0YTUmTmEg7wiCn7zWHh4dsiwVluSVNU1577Q2eevJZpHKUxYbpNGe9FkzHb6PrOv97KUtd14RqhOwL1qc120XJ9cOnuDoFEVlOT4/IM2+q7iYB168/wfniLmEcUFcly0XBZHxIUZ4ThiHXpgekOayWW9rOT6yzLCMMvBC1awSbjaAblhzORwRDTqinIGvUxE+U3XhK29Zsip7pLEWoDeOZj5Z8q8tbr1AayzifIaVkuynBhGihPFHVxhxMx0gFbVvTdiV37xXkoz3e8e4vpx8KTo/OKcst89kB621LURRMrj3N/kHMarXiZH3C8fKUys05WS2IxjkdAy6MMENLKIMdGXzwD3etGHZu9VIqOtMjA42Qu4FwNwAqFXjgqUO2pmfZWY5LaGNLWQ4EwYQnn3sfpyfnFOWG33/xk7x28hqz6R53791n1Fbko4j6Tk/bQBAKsizmzr3nGWxJqPYpuzHlUNI1NW1rSJPcu/hvzmj7jtE4ZegFQliUCnmwWVDXJbNpBNYhSUl0yrQcU9U1VvjUhDgIadoSGSnGezmnZzXdUJOMFKPZiPOzJVEmGY2nSG1o23Mm05Szk5LzB1sSfZVPfvYVkizh+o09xpOYotxCpojDiL3JiPVyRduUJKMZbb3hqWefQArHOB+Rj6bcPzrj6v4hUWRpqxqlFPvpnNl0zHK9QEZeqX144war1cJ7ipkepQSnRcd0cpUutLxy5xWeeuopTo5OSMIE6TSTcU7dlqjIYYaI3mnCHA7khMP962i8f9r9e6c04px0epWq3fDKZ36D1XJgfrDP66/d3/FmHWmekKYx0+mU3vRYaThdHfHZz/4BSTKiqCqCICaKc5QMSMcTFttzgkCBksRxSNUXbI7O6Xs/I/eebgNhnNHuwIgSvkozmY3o2hKnHUIlO35NT57nlwkYw2AZOm+2rbW3uLqw3PCDhiHLMqSCru+Zr1fowXuUCfEIgHmMH/am179AjPDIQHjx/ptev+SdiYfVvoteo4Od95+8BKpi994FneQyKeUSVzwcWOUOeF6s+3h830Mo5Q2rH6JkATj5EP5eHt5uf73C+GJfxWOY5uJ8XET1XYLrC2D1EIl7OLcTl/iqn3u4wiUQewQ6ii94hYdvid02Hzn3jwD6h6dFPDYhgMd/Lffo9h49nigi+LL3XAJI8d53Ij/wXr9y+9b94R5dV3zNV6K+5gOPnT+7LVBXZzjrK7VCqkvltzw8IP27f4fwO/8M3b/6ZYZf/zD286/wWL8Z6H/9w5eAEkDE0eURPZTOvHly88j5ufzzPwwY5dueBimxL1zsA3/I9v7jy4Vx++PX8ZsB46OviTet+/i+P3xPEDlBDOSBZjxJUDJg6HsUGmN2wr6dBR5Ok2QJYIlDEEI9dp8BBDJkUIYoCL03Ztuio4Q88d6qbVejUARaoVUKgR8r+24gTcd0rW+Td10HCOLY54B33UBTd9RDveskeJP1JMlou4HtpkYoSdP29L33yzyS3U5V7eNh+85hEAixwQwWIQf6QXjtAoZ14zBDyd7+mO3mHtYajG3pjYF+IE1DlAYrBN1gSSPFZDLCuZzz8wU46LueMAzRYcjgvB92MhojhGBdVf57CXzKkPIczfXxggcny13+ti92RZE3Vn/p1ROUNl6AYyyjSUwS5yxXR0zzEf0w0HfQNB3jkQfHYewV9YGWdK0jDGI+++kHCNUxDL3vHOiY45M7DHZLICLGk4ZqM9BemRJFjjgJObhyhUBqmqbjxhOOj370N5iObtL1CmFr+mZDW0naqtlFOirWxafARuhQMRqNyNJDjCuQqmW52rItM/QiRAUOJTLyLMI5helhMolpo4HZfERvUkI5Y+9Kgw7g6H7LfHYDRIuQMHT7xLlEy5z16pxnn32WFz7/u2/5nnrLgDLMfGsgDKfs7c1IM29BURQFXdeT7Xk/uOX2lN5sEApO793nfHOEEwqFN6htzQCip+97Pvvi84SBt/rZNA3pXs5Ld15jUBoZRBhnvTF3NKXrCsJQ7yqTBmyAFH73h37YtZP8IKWUAiEwO+sFIRRJIDi6c8rdO6dsilOM8873m40h1LeYjFKcfcD06QldX1A1S2bTHETP4vSEoS+I44TIwqpoyMcjlJpSbAxBYujaFukUpi+obMd0MqduCsxQc3K0Zrp3hc1mgVYhaTJDhoJlsaDve7TKmE0OWRzfwVrDeDxBIthuzqibNfNZzoNT2G63bMsNw1FNWa2JwwlReJtRmrCt1iRTTaQznn7igCCEdbnk8DCjbjvuvnaPa9f3GY0yTh6c8PyDN5jvZaRZTFNbBnFOXRj2p9dQQmOqhr6tePJwwvHJGaKLGcUJR8f3yMcZbV0RhQkqjolS2C7WDE1BkoYczmYIoWiaipOTu4is5Llnn8RYuHF4DZRktVnSqYZK+QdZmKbcv39MlMCt2zfZVpbNqsDYhuWw4UDe4uXXTnAyZrE+5uO/83u+XSZCrGuAlKJcs7+/Dy5g6AVpNiEIAvb29jCDJowTnLO0bUU/OIpyRRwmDJ2haQu01t4iJB0xSib0vaHretJkgqDlyrUDVCDo+oLFwvu5xWniEyqMpmkakJo4Dumahq4bdoIEUMphnfcZA7CXprIjzs/PCaLYZ9kKfTmeORwvuP7xofLRSh+PjqXuTQhFvOkzOyi2A0ePYKddFfBNw+gjxTb/iYeAk8f+diAf4dZdgmAHbtdiftOz5BL0PSzYXe7iQyzxOCD0m3uknncBUv8QAHABYPw6Dz/v/9teHtOlOfblxx2PV1IvqrxvZXkUFvo/51nsFai7l6RUIPx5umhdKiWxzis3rXUo5SstOgwYfcm7SL/721A7ACmaHSjsuodf8h9Y3jy9oKohTf7wj3Yd9ek95OoMFcVEnUSPJzAZg5IQR+iv/SD6Q1+BPT6j/9lfoP1HP3sJ6tybzpN67hlslrKcJAy7qNgLUHZRRb+YuHgbIt8Cf+obv/bxY3AXEyj/6eD7vo34P/8BRBJjPv15+l/7sAe4j+zHH3Z4b75KjBQsQkGvdm3rR5DiBUXiomLvFe6PXnsXY82j95hfI7Iw3/08ErBWUW0bjPF2b+NxiFI5dbNlOpmz2RQkSewN0023S3eTlxNSpdXOsUSghCAMArrBEoqAOE4x/YBWkjAbU1VeZIgLdu13RRKnmMEAked2Ng24jiCIGAbfxg9CHx0o8Ir78XhK13UEge/wFdWWqi6JooAwCuiNV7WHYUjVtJ733beXgLOv/dGHSQAYTk/PkNJHuQ69I4sCwNHWNVpJtpuGMPZ0pCydUPYD/S7ZZjSb0rUWGfqx3GKQQiGI6FtN3znUTuQzDB0ChQoBLJEKsXYgECFCRJeOAtAyuJ40TRgGhw40RVmyWq5Js4i6FhhA6BaCmvV2J2hdnyG0p30ZY6j7zleWgxTnYLA1YdRhrMX0kuPNMZPCEOmAV15/nlBHJKnk6GRLHMeMJzlClDz3nneSxXts1h6837h6SFMFrFcVUaZo+gIdSYptj9DQNAl91/pwg6qjqkBHPX3nHU0O5j2LpTe4VzIhTMZsNmuyLKPtesq+48YTV2i7DUHcsVgXmEGQj2J02NO1AUa2HB5e4ejBCVev3OKtLm8ZUG7KFXV9TBikmEFjO0eSxgymou0KFtsFOjBkWcJQRAytxUnD+fZVrGsJwzFpNKXa3PEXr1EIoWm7BEdHbUqK8py2dzw4ckhh0UITSoFpBhAaM/g2tjUSYR626ZwTuwQHh3Nyx5cCEDtujmSUSc5Pz7n3xgMm+xWmF5TDCqFbNiWstl5FlgYJgzVMZ3s+tcVaomRO3y8Jg8gr9YY9HD1VuUTKiLoEnfVUTcO161dZr9fcP1swnuWkWUzYC5qiIo8m9EOHHUqvkkeC0EjgwdkLhDpCq4jlqkUiCJUmDhOKVU0bBvRdSRLFnC82XL9+iHQR5bbkYH+MFZrl+pzt+pyre08Rxf5ROJtfpbr/BkkGOnA01Zb53pRsnDGe5JwvFoi+phvW5KMJRdUwNI5AS7IkpCo22L5i76kbdE3B3pXMG+euT5lN96kWK8+PCzTj6YzJyLfeF6drDg9v4Fzq0wqcRAfezF1HIYkZqJst4+mU5WKNdCVRYmm7gXvHJ7t0kZwkH5NnFusWdF3BdDpmWTf8sa//Ms8XqVtWyy1N2+OY4ZyjrgzpfERZlqzXJU3jZ/+daUjSgNPTUwIdkedjjk+2jMdjpqNDiqKgqnuEadHjKWXRgBVMRxnDULJeD1hr6EyNlpk3vG1KyqLFcVHRhM3KGxcrhedJKT8oxFHGeKx2qRiauq5xznH9+k0iJZGBZn5SIC/bz/An3DGtEGRZyny+x8npyY7nysNK2MUiHlY0LgtylxXBP3wRj3b6Lr0F4fHh902g6tH/kFyO1pdgTQjGkzHj0YSjo/u+KnsJ8HbA8wKUPlZB5WH556K9/iiovayW+tXcRVLLv/fgHgESj1UtH9vgIwf0EFxeeB+6i2LoxX59QWHtkdLn5QqC949zPvBVV8jymKuHNzg5PmWxWnHl4Bpd01HXG6S6UEtb0jTi+rXbSHKe/eL38J6v/Ubi/QOcEIg79/ymw4etX/ORj9N9/Hc4PzsljmMmkymDHS7OLA5YnJ+SpjlpmtJ87vPYV19DPnkL+eyzdFXJaIhQu+MpsobPPNHhA6nhqQeKmZqjv/u7CD70VbBTOaMU8tpVgh/6Xtyf/no2v/irnP7Mz9G8+Ar7xw944uI0fuB9LK59Kf/2j72NX/31X/Tm4L3BOm+kHQQRDvw+S2/t8o4v/Qr++pc856uPbcsbH/0Yy/hh3vXB93w7N378P0MczAHQ1w9RX//VDGcLHvzf/z7nP/Pznoc8DNzWcG23L1stKCcZyXKNcI46tBTC8NO3Al4MB/I0p6pLgjBkMN5fUWvN6ckp+3t7WGd3CnJBXVXoUAOWoe/RQeBFEwKubQd+8M7DIdVf2o58lO4cH3bRxBJGWQ7WkSUpxvjnrdYjbwPnfGdG7Xxz4yiiKAo0XlinEURJTF36aM6m9tSUNE9omoa23zIajeiGDmN8VPHQWy+kVT7Vx9+LYic4cfR9i9YSZ5Vvx4YaFYQEgUKqDEiw1lJXBcKFSCkpl2uiOPaJK1qRJCNvs6ONr4DKnqY3JIG3NWrXBUrGbDvvsiGcNw631jK03t6vGEqqqme7qXc+uZIo8qbbxlrCyAuDpYRhaAmjmCjWbDa+OhonEUqAGXbdEHGRlqcIdMJqtSGMHGkc0Da+9d8NFmlD0iyg7yxtXxAlGWaoAEUS5/S9DzmIohSHATvQdBVhEFN1lXfLGGq6wRJHM5xrmc7GKGWodobqMgyoup5eFNw5ukug0x1fs2U8XrBYnpFEmtu3n2C5PEeR+dhjB1qliHCgWJUMbQ2iI2kz2hZWmy03b42p2zOkvcK9+yuE7LDWEgYjio2lHzokPWEYkec1r730BnGUoFRKX2xR2rE8XnvnBTfCseU0voc1CmHVv+8J+wXLW+dQhgGZ9iaiwkqGwdI3G2bzCX2r0NGEqtpQVj1pnjEMPVXXEek9tEpZb85pBgvOsN6uSBOvhB16gdK+9SyV8QCtWaG1n01J7S/Y8XSPqioYugHlNE4opFBYDFqDFQFK+Yf6MFgcApxk6K3nogQBVmh++3de4tu++208uOM5b8IayvZ1Iul5GtvNCiljmqCj3BZY1yGVQesxq9Wavm+4evA2usaxv3eDotiAMigm9BQ8uHtOEsXszUZsNhs65d3xh76gqi1KO6rax2e1jb/xymLlK13BmGGwbFZb+qEijUKiKKJtGsKoIlVT2qHg2WefxZqE+0evoqTj5CRAx5qrB7cI9Tn7h779en5WUrcFBwcR52cl5ydnbDc+feH69Zs8KFaUdUMYRsTc4Oz4iMkoYTxNCXVIqGKyeMTB7An6tgQ0eTRmvd1y49rTnC1XdBbyPGeU7UzKiy2LTlM2LUWzYUCQTGY0XYVrG/rBW1z0TU8cxyzuPcDagVorQu1tJqJQMp9P2Gw62m5F0S3o3AEvvvIycSIxbUKwXXF8fMx4POb8rGMwFVkWo1RAPs0pt6egW0RQE8cBq+2Kpm4ZupxAZFzZO2S5OCUODbgVb7zxGvv7+ySJxJgVw7BBacN4NMe4u1TNFuFSdKQJpCHPNYEWhFGAVF7lWNctWZIRBSF9b5jP5wSB8pm0cKncrOqCOI7IRwnOWKIo9PzRtmJbbHYVKz8YtjgqHN/4J76BH/3RH+VHf/RH+djHPvZIa/dNCOeR6ibuIePwosrxZgjl37v44CUyfLwaedGIfbRa+KZSqV9DXr76bd/7PXznd34Xf/7Pfxf37t17DLM5Z3nYXvfVKXfxLY9UCx8CXR5rAV7EqU5ne2RZjtbe162qSpbLxWX8qrPWu18DcRwzm82JohghBF3XsdmsKLZb3A5oPgahLyu0lz1wgiBgPn+YGpEk6a4yMlAUW5bLxaWo6MVY8rabU9rRiCqJuF9AenDIJxc1t56dkWe3CXTGc8+9i7IseedzX87Tt9+J1gFRlCCFRL7wAuCj9/qPfgzx+3/ggcnLr6AfPGC7WXN67x63n3wKk+W0Tb2zj9Fs1hsWp3cJr9ykiRIPimKFO35A+frLlIslaT9F7sRq7WTLg3e1OOspGVde1YyzJ2k//FvoD34F4V/8iwTvfQ8iTT2oTGLip2+jvufbST/0QdYf/ijL3/wIpihRoww5yqjeHXByZZ9X8gwhe3YeUOAE2805g/VpPk46mrbiB777+xHaRz6Wn3uRe//rb0AgkUJw9Xu+nev/5/8MvT/fXbMaG0iEUIRPXOfG3/wbdEpy/I9/jkEJ2keun0EKVJrilmsQPtq11Y47ueWVyCJ1RePanWeqoql7okhjbs1ZCoVzcif0FNipBAwHV/Y4OrpPGMYMjSFJcvLUIe+Wl3eXFJDnCUHAzj9Q0tWGLO9RKmAYvJ2Uc9YLZdIRbduxP98DY6mqijyNODs9ZzYe7/KWQyaTGev1miBPd7GFHYOz9F1DGGqiWNH3njPpVcghWiriOEJKTdN4sZdSDmsHRO/BpV8sSRLR9y3jUU6zy6cWCNJ0hDAQhpKyaYkiRRgIdJLuzNQhjlKSOKQfLMYCziCCGK0UaSi8HZkRKAR54ve/amrCMCYMI7SSqDjz/pZhhNaaqmwI4wiUxTrvXRklEuksxg00nUFpSNMRXdfQDz1d2zMaTXBCMQw+kaZuSrIsAdd7NxrruapB4LPMjV17C6IMmromjHPqskJogROO8WiKwbHZ1GRZBk4jlUVjwXVIApJozGA64ljTd5rBOawTFAUYfDCI7saYQaPkQFEuUUpTHK2Jw4jtVvCpz9z1Ps7OJ755b9MYdLuz2qqIoojF+dYLmfIRi5MFTncoXYPoueAr68Bw98Fdxlnubai6nmLr7bqUXlNVZ5deqmmSI1RFb47Js33UbswYZf87iHJWK6/4VPSEgU9oSeOU9aL0Nil9Q574svCd8zcYrMK4kHWxRAVLUh0TBB1aJAgEi7Jjb3oLrb1Texf1bNZnnCnJYuUQMkQgyUdjTqsFt554hpOTB6w3S0xnvJ+XUrSdV3F65wvP9ZIOb3NwoS7dkbrHk4QXPnOffrhG258yGV2nN2MsBcYqnGrQqWO7OaNbD1w7vMVqfcp45CMVw8hzKOr2jM2mZrXyWaVOrJmOnmQwkiAYgdRsy4Iwir0PYShAJjTtmjzMidUYhSSMvTFst+25Mh6DC2mbhsl8j76LMLZjXVZMp3v07UDZnTOK5rzywpIwXyOCmP2962y3W4riCOEOsRbOTu9RFBVt3SGcYTqe0dUN43zOs+99O8cPXkOpjvE4J441Tbui6xxP3b5Bls6wdqCs1rSmIJEBXddwdHqf0TgnSBLm2SFl1dFhifIIGVsGBMY5smzEG3dfp2kK4ixExynlosLbGTjGk5S2G5BxTOsEKk9IY8F4dMDp6ZYEjY4DhkETRYp7D16jGWosC77oPTHCCqQdURWGw9tzonCM4Cqf+fRvc+vWNRbnW+azfT772RP2Z2PWK0G9rbl6sI9xA2kWUBYbjDkGtWE2GjObzQhuXWU0GnG+XFymL91544g084R5FWmwhtPzI/qhQhzfoaw68jz1xrGDpqk70nRElk4xg+Pu3WLnA+eV496vclflbAucM9y6dYtbt65j2pa6bRi98PoOvD1eefyCRTzak358hYfCmUdbuO5y0PjDQOUjH378ux/ZlYsW8cX+XQhxdk3CR6Hno5++/OfiPSH1brfd5f6KN69/2Zd+2IK8+LyUiiefeprv+I7v4P3vfz97e3sURcGnPvUpfu7nfo7PfuZTnke9+x2zPOdDH/pavumbvomnnnoKrRR3793j13/91/nFf/OvWa6WSB7nfT7KS3U4wiDife9/P3/2z/pYwHe+852kacrp6Skf/vBv8au/+mtEUcSDB/cBMKYliXpWyxNWr3+OZ579Ym4cvo1RPma5OOePf92f5omb78A5SJOUJMl9W/OFFx/7Karf+E1e+6//Lrek9CIuwDfkFNZ0zOc5UaixZri0tLHW0bY1eZYQBCEX6noh2UUBGpS84Oldchre9LPJC+ICw0d/G/Ox36G4do3ob/510j/6tQitQSmC+RSVxITXD7n63d+Oyr1/obOOyfw9PPuM4+u+1rBcHrHZFpydHlM3S+I4ASS96ei6jmeffAfvfvf7fHu76Tn52X++8xgOCG8/wZN/40cIdmDSLms+ceez9H3DO9/5Pkb5GH045am/8dcBOP7HP/dYOzp75hnijyXYRwmQArJ0RBYZirri4OAQsNR1RRBKjG3I84mnJOkIpXyQRBpEWDHQdRXXDw/oO0tBQxyn9MsNSnmrFvC/Q7FtIB0RaEUUwt58yrZY0dQ1WofMZlP6od75wpZIAtq68GljUeyLKsLirEFJQdtV1GVAFGjKaruj9Myou/Yyz126gCEYiOIArX37vKpK2rYl0DCZTGg7bzKvkIRBjraAtKAswoJOvaOKw2CGgShM2K623rtxpFGmZ7A9QRJQVSXjce4pbV1D3TnfTcTS9I4w0LtbypJPYobeUBYdQZCQ5QnGtoyziU+UihRKAWikcNRtRTqKkIHv2tRtR5JpjOkJgwylIoxpkdr6tKOhJwpDotDbAw7WkKR+wu+sAKmR0tCUjjgTWKsZeoezvq2fRoaqkghdInRPmiW0dUWocpzTOFeQBGMiFRDtPDyViHFCkU1C1psFgY7pW42jR0hJFFvabstgMrROGNqONMoZTItWPVGY0DQOa32uvdIDYThHigGFnxwIWaNkjDUDjpZiBTroyTJvA9U0kOgpbX+GMTFZMqcbtgjpxzynvFWic46+6QhjP0kKhylXr87oh5K27ZEiIXD+HraUBCLEkfJWl7cMKD/x+59DSG/4O1hJkgbM5gk6NJ7XWO1iw5xivaoIdUQYSmxv/WDbLcC1TMeZz/CNR7zy+udx0tKZEnSA7Sti9ticWZKgQ8uA7XpDNkp5+cXP0rY9B/tXqKrmUuE9HvmbyVYlwgqMGXw7xbldYo5EBRohLI6KdSE5fpCTzHrKbotBU9cDUhcoG+H6nmx8heP7J7zy2stcO3yCopJURUuceFPUwcDp+ZJRPqVuO9Is4GT1aTpzxtO3v4yh6nnhxU9z/fDtbJYrrt7wiRs6DOgHgTUlbbNiOp5RVyAUGOOoqhIjOiIREIQ5iYoQ8oymB+ta+qHBRVv0LGTTLLGtYbndcP3waUhSOtkyGuUoHGYYeOLaVV/21jF78yvEYUC17tgf3yLOHefLM+bTGxh3m6Y7J40iVuszIiUZxZ7bsj1b4gzsTSacrVakpWIIOuIAkkgRKuians3Zimw8obAVaTbixu0nWa7PdpFlPdu6Yjyes91uqcqeJNWEQUJdW8oNmGGBQNObFSenLZbAGzOrAeQJmjEnJ6WPUdQ+bSFln3V5RhIPfMUHP8T58g75kJGkkps39imrFVrDwRMV0/GItq+4du0a1k45OTnj1tsypA5QMkaQEOmA/XiP+WxMXVkO9q/S9iuqsme79vm92cihQsf73vOlfO6zL7JYLFgtS/oBumFN3aWst/4GjOMYaxxRlOGcoR0ilMgpNgU3b+2zLU/45Gde5/nP3yQfBbS14n3n5SVEFOIhgHt0vH+Mu/XvBZMP131MSPPwDcQF7+2iHHfxpW8Gqe7hth59z1m34zU+qiO/AImXO/RQo3IBcB+pwD7SY/5DAa54pCdvd9u6cmWfn/zJn+TWrVv80i/9Ep/+9Ke5du2Qb/3Wb+Od73wnf/3HfowXXvg8FwKg/+Q/+ZP88A//MA8ePOBnfvqnqZuaP/qhP8oP/MAPMJvN+Af//f+LYeh3h+ou+ZaX++fgXe9+N3/n7/xfLs/lL/zCL3D3zh3e+a538m3f9u08++yz/L2/9/cZjcYU2y15NuUdX/RVBEnAU7ffw3ve9ZUeEAqJ1gFJOkIg0C++BG7DhRr/4hwNH/s4w8//M+5++LfQzhA9/Q7arkEKkEIxGIcTPXkegwiwziK9EhE7GIS2zMczBNInRQmFw/iIPwmTyQh59gigfNM5l9I/S3UQ+99MOuoXX2Lz3X+Bydd/A6P/4sdQz70DoTUyiX0F6dHFWPbeLvjKr3g/73nXu6jrho985CP8f/6nn+GNV0uUHoiyMSpQhDrja7/6j5OlfiAbNmsW//bDl+d6+qEPEh74yrDZlnzu7B5/7a/9AEIO/PE/9if54R/6zzk4uEJwzYPKzcd/F3N8crkrk/e/n/SnJ5RSeS9WQApJU9Yk6R5XbxxytlwgRUSIREUSKQOs6ZHSgdOMRxNW/QmCkEiO2ZuHjEYjzs4fMJ4kmCHkYNAodXa531I6rl1LuTucADkgMbZCY5CuRrsI07cIDApFEu/a3FXP3t6crm74Ix/4I9y79wovvfQSX/b+9/PGG29w/+gUrTV5nuMAKxwWS1lXCBTO+gxpb03UgqyQKvaRj6qirLaM8jnDYBEKdOwARVU1dH0JhJf2e1JKtkVFrTsmkxlN07Bd9d6jN0ypNhXjWcp6fcxkfABDhgw8R1FKSRopmnpFpDPMIAmiFKktelITJg5nDbPZHqZzdH1Js1owHU+wTjO4Dh348981Dq0Dxomi6cBYTVkNjMYhbpBIaem6c0I3J4wEVb3c9UwS2mrAmBqfbtYSpQFRrMBCHEl62ZElU5SMcLTsXx0xyq9TbE6JgpRE+7CFMBwjxIzKFTgGn0IT5kSp57223UCkYqqm8XaFQYRGgg0I5ciDw6alaQe63u6oUCG9aZFa7oRDducP7G3EBlPj6HDOEIbePi6QESLwdlv9MNAPDUoFNHWLDhKkyiiLM5T2Y2vbOJJQ4VSKtT15FmEtpKEmlwHSDmThDJ0JiqJAqJC6roijA6z1XuNvdXnLgNLHdUWY3YOsb2F9viWOc7SWlPWWIBSApessLkwpNg2jLN5ZEii6wbCqVgzDwLoqaFtBlo1oB4MdCrQyOD2i7y1xmND3F7FBvgKZZyOfOhGHlNWGNI2xtiUOBYHwObHCKYZ+AOkHUmsH3wJ3gslkyvFJxb/8F7/F13/T+9gUA1V1TlX3PPn0NYqipW4KxnnEatvQDI6XXn+dyTRBiwSrIqwI0aHk+q05m82CrtrgGnBNzuHNG94GSUrCZGC9/SxhHBComxwcHHJ6fsSm3iCd58ysthXLVcXb3vY2zs8f0BtDmk85P72LkjHG1EynV+itoWkaZnsH9EPFqlgiCIGBrlty//g1JuMRx4sjtlXEfDqld5JN7cPdw6Bmls8pmxKnexqjWZ0IxpMDttUaXMD+/CqLxTnbzRKbjpFunyzdw5gtWR7S1Zb9PGNvYjnbrrm59yTH5Slda2ibknB/hE4i3njjhHwy4rX7b7BaL5hMQ5IkYegEy+XS86EY2FZrwiAGMdANlsVRiwo6lIxQkaAtC2Z7V3ntjc/x9FNv927+dqCvUkbja1gKiqIkia6zXNxjs/g08/mEMCqoSsW161dp2pT59BpVs+Teg8+zt7dPWfYMvWV/74CiXHJ6smboS05OHnC4fxslU+6+sWSczZFK0JuB1aJhuy3JM0ucx4ThiP/tw3/Au9/1PhCvMJ42bNYFTTP11U2nfFxec8J4kjOdRCyX5xzdu4eUYK3kdz7xPFEUEcWC2X5BVOecnW7Zbr2psnu0mCLEQ36jEMznc8bjMUr5CLHVasl2643zL3mKwrfYZ7O55+9ISd/3bLdbVqvVY8Dzxs2baK25d/cue/v7vp2DpzCcnpx4702AiwqegOl4TD4a7UQE0Pc9m82G9Xr92HPDOsdsNmU0eri/5+fnVGW5q3J6IKWUQkjJ0Pc7H0t38b+HRc6d6vxP/ak/xZNPPsk//If/kJ/+6f/x8rs+8pGP8N/+t/8df+H7vo+//RM/gXOWJE353u/9XtbrNf/pX/w/UZYFzsE//+f/jP/qv/yv+ZZv+RZ+9Vd+meef/9zuEB8VX1wAA8lf+AvfR5Ik/OW//JcA+MynPw3Av/qFf8kbb7zBD/7gD/HBD36Q3/yN30DrgD/9zd/Gd3/njxInGVLpXfXx5UeKvycXp5Sh733r//f+He1v/y7u5Zdxd+5gjSWOFXk+uxTxXID3YegAh5SBB/MXwF1Jhr5DAk3bkyYSnME5gRSSwVnM0DGgcEQ8RlJ90yKE8vQLAKvQWpFnI/qPfZzVn/0O0v/r3yH5lj+DMAaU8v+/mCgsF4i3fxHX1t4f1H3y97n9nd/Gt37rn+LVFz/H733yd/nM8y/yuT/4BG1T8+f+3Hdfnu/NJz5J88prKOX5bzf+wndd7tPmE5/k//0rP4sKUuzg+JVf/RWUCvmrf/WvMx5P0NdmvPNn/xGbj/7O5Wd0lnHwvg9QvPb7D69LY0mCMQJD3y/JUotEc36+RQpH2YldBKzEYlitNjgpCJOQQFjuvLokSs6Zz+d0zcBq84DDNqHvvPhUCkkYBmRpzL66iRkc+wdz1pszpgdPoLVmsy7o2vpyMoMIiLMxQd7T9guECCnLknwS8uTTt5hN91hvzrh67SmarmOxWNA2DklMgHdcCWNJGmWYvkPJ0HONhxFh2DPO9knynqapkELs6BGKIAjZ37+ClI67919mvRqYTCZEUUTXN34MCzVqx/PGglIRUgRs1g3CJQTBiKIqkUJhnOegSqVQWmN21BMdKqpmS5okuAH6yuHcQKADojBgNpmjlMDQoqXBmoC6rZCqQypfjOmHAqVGhIFBS8fQbdise65du0bdek6rMw1ZMkYhCLTvEmqdI5WgLEuchd72XDo8YFltTpFa+CKYGzg5OSEOQlb1wtOSwhzwnPg4Dul7R5oKurZB9hKpAdmSJBkq9Klpffcwl11r39VVUYDSrT+3XU8cpwydN9QPpEYrTRwLuqrdZcWHKB3inLkskiED4iRguy13z1/v4WqMIYoTttslYajROvATA1GjQ0MUaayVVIUF0TPJZwyiYOgACvo+9LSFMCRLfKpV24G9tPr6jy9vGVBOs+u0pqLrOuyQYC10XYEdtnSdQWrJduUBoDOw2WwYjTSb1Ql11bNcbZhOpwRBSBiNWJwuibKQrT1GyIbAXWVoa0oM83yfzXpgb5KzXK7JkwwTGD+Darz8P9Qhq8UGcN6Ata4Zj6dI2dN1JUoohBPEYbR7OEraumeU5hzda/if//XH2D+4jqHi6Pgub9xZEkUxXV9izTFpHHPlypyq2nJ3s0RhmEwNMgDratLcUZaGushwkffoOj02LJcVt27d4tlnPsjx6fOkEQxdSl0LomDOcn2HJI1QKmO7qamanudfeo1pOqXq1qzqc4bBq8CadkNpDLP9MbYxLDZ3sdZijUYri1SWeByx2d4jVVfoKNAWTpYnZFnC62cnKBkSDjkiXGGHiDRN6UTJ6fmKdT9BRxLosJuCIMkZgphlV3DeeCXgaJSx2HT0xlFWr7JxBwgl+PzpZ9l2GkTAWX0GRcvVK08S54qiXND2K0ZjyXZtMV0AQU0eS07OT9EqI04U58sliB4lA5J8xjB0pPE1ltu75KM5dWVJshGdGejKkEDmTPbnzOc5947uMppZQhsiRE4W3uD0/GWqqmM6inAmZJI/wZ0Hn0DrnBuHzyGDgarsWS86mqphuTniyWdvs172xMGXcOOJOZ/42O8zmcao9IQ8m3F6MmBoufXMNZq6JQgClpsVi80D7jzwhPrl6owrV66w2S5IkohqG2JszRNPHVBXHXeOPs0onvPMsze5euUm9+6+grWWrhHM9lKc2DIPcuaTEXvFyW6Mv+CAPWwLA8xmM77v+76Pr/mar/Gmvw8e8Iu/+Iv8wi/8ApvN5hKwpGnGBz/4Qf7kn/yTvP3tbydJEk5OTvjoRz/KP/2n/5T79+5dinb+9t/+21y5coWf/Mmf5Lu+67t473vfSxAEvPDCC/zUT/0Uv/M7fnAWu/Wv37jBN3/zN/OBD3yAa9e8+e+DBw/4zd/8TX7qp/6Hxyqo169f40Mf+qN89Vd/NZPJhAf37/NzP//z/OIv/qJPX9mt+syzz3BwcIXPfvYzD0HpZcuZ3T3sUfa73vUuAH7pl34JJdXlNp7/3PMcHR3xlV/5lYwnPnv72Wffxng85pd/+Zep6hqEvNy/X//1X+fLvvzL+eP/h6/n+c9/fleQfKRCuVucczz33HM8ePCAT33q0489F+Mo4SMf+Sg/+IM/xIc+9CE++clPEsUx/7fv/T6iB2fA2WWr3iuaH3p5Dh/9OMMnPsHR0RHhgwfsVTV923gVqxSYYSAIJEr7CuSFgt4bsHcepOr4oa5pR+0Z+g7TdwQ69m3/wXjgLjTD0GBNh5PZ4y3vy2N9WBl31iG1rxBb5+iHBq0DpPKDdPm3foLu3/wvyA98uTdPPzygilO/308/jcBXOpWUiC/7UvJ7J/C7v8foz307736/zw+/d+cVhFhx69ZtAGxdEx5eIX3bM0Q3r3P7x/8a2XNvu9y/388kL730Wb/NQBAFmt/8rX/L/sEhf/H/+EMIBPGtm5cVzYtlXZ16S6RHftMoHWh2rci9+TW2xSnXrnsfRlm23m8xT3hw/5ymtgjhSMIEKxr251OMq1gsznxHzFiaynPXhPBcPzPA+rQnf3Kfg6s552cb8vAQKXpCpchSiSscaRJ5LmE5EIegwhTTBRjjeOHFz7Ld+vvh/r1zRqMRQ6/oh5ZARuhEUJQ9aZIQRZYwgvOzJZPJhKaE+fwqrVnSND1Z7siSOYGMfJZ1qkjSEGtbsDVxPOa97/pSzlb3GI/HvPzqa+RxSNtauq7HObySmwilLOvtCfODq2y3W6azEV1fURQFKpgQ6JCu8ypopXaTTtP5/W9boiim7VtwhoECqTROdTihwWnaWnoXjBCkFCTjlKqqkDLxxv+uod2prG+ODxgGr5AXzjB0BisUSZZhjcUMFi0SlsvzncjIEUeath9gEERhilI98709pFQsl2uSJKJtvN91kmUokbEtFsRJSttVSDRDbwkjiXUdi/MFSjviKCdKYpqm3AWuTOmtoe682XgQaOIwxhpLoDRd4zPbw0ghrEFKg+l8ZrwHwj55KQw871HvknvCMCCJUnw4xYCjJ45zut4wHt0iDEMfWmEH9L6iaRq61qFUTBQJmnblwalzIBU6CpEiQu1SlnrbU1drzOCz59/q8pYB5WK9QsiBpl0zmAYlUh8jpBIGWbE3GmFSb+IcKIcQNfuznNWZpmgHJnvX0AE0XU252BATMRITirWmNxG9rAkCgXM9ZiiZjGYUxZZQh9RViVSWtt1iBkc0xD5DVUgG681dAa+MUt4guu8veCyexBuHCYPtcRjKTc21m1OqoubqtZTJ6EmaNqRreuSg0SIhliPuvLykbRxRECDEQLHeoJU3mO1NwWjkTV/dRNIa6PpToiTkMy98hvzumEBBpB3KVJycrCmrLU5VGNsx1JosyUnyCNErjAsoq4LOrrC9pKo3HB48S9vX3Ll7n1mW0XcbRvmM1jk29Zm3HCkde3tz1itPdu6xJEFG2Qhu3nqOB8dHBFnK0baiLE8RWqDDnoYtyzsv8ewz78SYNXW1IY5yRns3OF+dI4OKs+0DGrXH0ekZSRoQqwkFIcpq+k6QTVLu3r9PmExwDtb1GqTGKYijA7J8yqZ5FRLQYo/zxRahIpJsRD80RFnOenNClkuMKqnbjq46QsWWV++8wru++MuJO8nJ2TFh6Ah1hIy2rOslYaQoig2BPCZLvZpuOp+xf2WXlMIZ28YxnszJkn0kY4zbcnLyMk8++SVcvXqVRXEFYyvMUPCud76dotjwzd/2DZTVCiEsd944Ip+lJPmUz7/0B0RRws2bNzkc50T5BBGUnB8tKKotWQfpOGG5fYHbT76XYj2nqB8w3x8jwhnluWa8J7h3dI93vfdtPDh+jYAUHXWUmzFXbh5wfrbCXJh0P6JP8akv/u8//+f/PFJKfv7nf963c7/pm/jhH/5hlFL8zM/89K5VJfiGb/gGfuRHfoS7d+/yT/7JP2Gz2fCud72Lb/mWb+H27dv8zb/549R1c3l/R1HE3/pbf4tPf/rT/IN/8A84PDzkO77jO/jRH/1Rvv/7v5+iKADBwcE+P/ETP8Fzzz3Hxz/+cf7Nv/k3dF3H008/zXve8x6MeZjQAvBDP/TD1HXNP/7H/5ggCPiO7/gOfuRHfoTnn3+e5z/nq4IIwXd/9/fwdV/3dfzYj/0YH//4xx8+eC4sjS677b6ycvHesBPgCLhMFonjmKeffoZP/rt/d7mZYRguBTM+aUjsKqHwRV/0RfBQvrSrDj8EWs5xWWm44NcCTKdT9vb2SRJvxfPUU08h25bIeVB60TYEWP7ar9F+/LeZTmYYO+BefRXu3KEqSobVCaO9Q/o48wr/i2MbfJ66lBqHRQrPU8YJmrqk7xuyLODygb+jH7RtjbAWHYSYi8Sc3bFZa5DCoeTjmeQXYqwLgx5hHfQF0vgJuR0G7HZFV0fkObu0MrD/319n+LVfoe9aSi1wTiGQyKeeRL79bYRf8RWEX/M1CClQWiO+9H3ol14CQP/sP2X0/d/D2Sv3MU/2SKWQSUL2xW/nfb/2Ly4FVRfL4vyEV/6nv8fXxgmNsAzWBwhgBdVv/kuef9tTvPNDfwKsQYQPj+/1T36YV3/jnzHZkQoQEKcxN27NsVduEIgxTz19k+k0pKl7tIoZj8c4Wh4c3eXFl14nSRLOz5b0RuPaKbefOmRvdp2qXlO3K5p64InzHvUHn96Bd0EQhDzzzDMsnx4hRUBZdAyDYW9vj76Dg4MxQw91XVI3Gw7mXvGLFPRWUJVL3v2ud2Kt4+zslME0jPI5RTEQhildVxEnEQcHCqyh7QSOAfoxN27OufvgswShpi0qnrh2yPn5OaGyjOYZi/MO5wK61oc5LM7PKbcVb7xesre3x7IuycMp6/UaYyx6lz8eSAWyoR8sSZLQNS2jLKftG0b5xN8L1jIMPUmicMidYK6i60uUznDCgurR0rHdloxGI8rKu2HoQNHXBVKmWNcxm40RQiGwRGFG24BzhrJsScIRQe7T5/I8oamhHxSH80OEcFRVxXbr6XfQEsUKKYXnFDpLOEi6zrf1x3lEVW4JdIrWAqUGlHBonZOlKXVdEqcO07cksQJhwCl/f4uBW09eZegd1vV0XYOSHbO9Kca0jDPN6WJNmsZ0XQNWM3TNrptlcINEa0F/MUlUMUoJlPz/0fbnwbZl+V0f+Flr7XnvM935TfmysiprEiBUaECokGRkjLCIiqaxS1gDLYQk3IDd0IRp7A6axgECGjocjdsdyMimHUIYCgO2JaGWhQwqMKhAQ6mGrKqchzfc8Ux73nsN/cc6976XVSnI7ujekZkv37ln2Gffc/b+ru/vO0QUxYSy9FrZJIrpus5XRyvBaC2BDNHDSJj4GtNUhSipiCLFOFq2ZUmmEoQ0KCnJUm/Osi7E6hajA8IIrA6RIehx1+hlFVIkOGlQwTuJ+N95e9eAcmxHinlBUWQUE5/D1FUj1gQkUYA1DUkiSYIJURASxzHN1mCHlOffc4eqXGIBbedUZU8/WKyx5GFMOitI8oI8T+lqryHI0oLzM4MxjmGQDLojS6OnkLdAqhAV7NzdLkdr64vf4xjwFYFpGmPMiMNirESpgK6PKS8kwkmqs46iyLCqx3vPApAQJSFHkzlyFjCM9W5s7kjiKcJkaDVlb7pAuxpLRX0BURYxVBJrJOfrS4R1zKaSMLiiOw+ZTAqyWcJevoea5synC565f0LddFw+anhm/znu3V9wcXHFen2K7QaEHmmqKxKRoseCMPTv/2j/vVT1Ttw+zgmjga7aMlsccXW24osvvsLFVcvLr7zI3sECPUI27Tg62ceYOY8eGubz23z6M6+BdYSqZT6fMQw+aDvLFZN8RllvmU9jtC1pOwnS11licwbRIoItq8uB+f4dRq0QokUGMUjBW2evMV/s0wxrjud3WBzc4dGjB4wmRe8q/NJin3wy49GjJaNbEcg1eZFRt1tee/NLKKVYXQ3cvrugbjVnlxdMJilNrUmTE06vHhIsDcV0RRwVdKuUPB+xomLsWuLgkMp0EJScHD3L+z8wZbk65/Vf/gJ37zzL1VXHfHbE//JPfoXj2xGXV2uqqsKJlrNHLeV2YFsuKWYp55dL2qFhsZdT5HtEQcLegWa+F6HHnGGwvOc9H2CeH1GkIaNVDL3lgx94D++5/bW88ehTWLthWzdoLdnWLbOZxBLyxvIcgp7n9j3jJK+1j4ZdRpzf8jzn933v91DV3k369//7v8/f+Bs/znd913fxP/6P/wOrlWcnfvAHf5AvfvGL/If/4X9w0yL1kz/xE7z26qv84T/yR/i6r/t6PvnJn79h4qbTKT/+N/4GP/43f/yGpaqqij/4B/8gX//1X88/+kf/M+D4+Mc/zoc+9CF+7Md+jB/5kR95OyTZ7bMfuXsIs1wu+eN//I/f3OeXfumX+K/+q/+K3/k7fycvvPCCv9G5XYyWH7M/Ge8+2Z7WZL700kt85CMf4bd+8zfzMz/zM3RdRxAEvO997+PWrVsAHB4eYqzl1VdfxRjDV33VV3F4eLgb91vyvOAjH/kIAPv7+7vXdF/5ervtjTfe4P79+3zoQx++2U8f8eL4DR/wYd5JkpDlOdvHp1z8+b/IweEhzjmqz36WB//sn3H//n1smvkRp/BmCWMsWZoQRf4iJ5FYZ5DSu1PjKEeq0NcvCg/3jPUMWJZNCFToKzd3n5lhHBHOkGX57mcWIXyOonV2x9LJHWv0dAORRJhdVqSDRjrksIFd46DDQeLoRcfQv705w+Eg/DIz15uf8f/+7N8leM9zTL7795N+y2/zVZFCeKb44/8O6Y/+KPn9Q876ksPf/K2orEAohQgj3Kg9yA1DTj/5U3zq//BdHAAHN3v91HYFb/4n30X9td/C4dd9683Nl7/0SU5/6X8mSQw3KQTOJwCUnWZTDyzm0NuG82VJXVo+99lP8cy993J8sk+WpDz37Hs5Pt7n8uqMt958xNHhfaTqOT97k4985CM4Z7m8vOKZWUuev4xofG1rFAXcec+CM3dBnhxx/723qZs102zK6eMrtHas1zVpmvKBD3wArS1tt0JrAMvz77vP0dERm/Kcxf5tum4ANM+855CyLMnzu5ydP0RgmUxm6HHBarnl9u2Ek1t7TGcfosj3EXZGWhhWqznTeUwUKZZLH/3TtB6UT6cWi6TvM5anlxjrv8/TLGO13aC7gSxLqMeW6V7KZl37JAJlEAwc7R+w3bRgc8K4QzjF4eEx69WWMIzI44KxGKjKCmtCZvOc7focZwW6F2RJjpAaFRgUBV3XkOf7WA1x4j+EsZqShjDoJVJI8kJhMKSpRIjRj9eNQaoRbSsMDXEUsrc3pe22xHmIswFRFPhczHEkCHz9I3RMJynWKNohIAxTkjQA40fVR0fHWCNv6nnXm0u0VsRxQt2sSeMEopC6LhEhTPMZzjmU8Ivfw7n/1MpMIqVDa6+n1tovOtumZ1ZMUErR9RV5nlJVDXW9JUki0iRCa02cKLJ0SpJKyrLEaMjzDMRAud0ShTlBYOm7LWEkiUJ8ZmWQIENJkira+hKQhJHwo/tpQVW2xGlK29bowWd3R2HMOPQMuxrid7O9a0DZlJrN8or54pAHL62RQc/JrQWb1YooWKCCA9bLFavLM6QL2N+bEKsCMzpUcEGWpqxWK/q+J0sLiokPFk/TI4JAMnQhQ98wDobt9orV5ZaubxAE9ENHGqW0Y0/dVSzm+16nkqSsyktGrWlr/8tWMsTZgbZtfZyI8XEBRZEhA8E4DgRKslkvwW1JooRyc45zjihKUIEhjiaUyzPyNEbJmCzPKCYBgyuZTBUiGqnqgYcP32AymWGw6M4HgUdhTpxAMcmQbg9hJWO7RThFWRnKekDPE6ap4uFmxdVlhQPK7Za7zxxzfgpJekSe5KgQHp2uqDc95aYjz3OaGoRSvPziyxwdHbA3m/KlLzxgth9Slw2vv1yz3a5pmpY3Xv80WZZxeX4JzpGmMWdvbYgjx2ZtOAsf03VrQpERFXCxukKKgSyP6FrN8ckhaR6RZVPG3hCmW9Z9QpEWrOtT9tQR3RhBUCEwtHVDHM1A9FwsH+JEyNHhlFderDnPPkceHTKd7PEv/uXnQVWUZcVoDEm8oKo0WdFQFFOMfoAeLU21ZtQlYx9zcdVTlZc4Z4nDiDByZIljtb1is3lAkS+wtBzO3o9KzgnCluO9+yxXPUo0TPYmfPZzX2QcDWW5omkaTk+3DD0cHFSUVcP2xZLt5g160xGqgvW6JE7AaMnyciBN99luK6IQhq5muzlnNikIwoSri5JiZklWB1RXa1Ar+qFlfalYrk75Xz75WVTYc/+Z9/Pqaxf0bc3yqtyt6hsenb3O3vwu791Ne6+7x50Drc11ZTI/8RP/I9uyvAGCdV3zkz/5k3z/938/H/nIb+Lnfu4f8g3f8A3MZjM+9alP8VVf9eve9j1+68EDAH7Tb/oIP//z//iGibPW8om/84mbvzsn+KVf+kXgD3L37t0bgPXRj36Uqqr463/9v/b383fe6ZV3fctPGWn+zt/5O7vbAARf+tKXaNuW27dvP8EfDn74h/8cf+7P/bmb93XjLL/5z5Pt7/7dv8vHPvYxvu/7vo84jnnllVfY39/n3/13/92bx0dRhBBeZP5TP/VTfOxjH+OP/bE/xs/8zM/Q9z0f+chH+JZv+Zab+z69XbvZb3g9Ifhbf+tv8af+1J/iT/yJPwHA3//7f5/lcslzd+/y7/ze33uTSRhcXaEfPWTzkz9JdvsuURRQnZ0TBJI4Thj9lRohwO6akoIgh11yrsPuurwtdV35kgMhMc5gdoxn33dIKYiiFHbP41lMX/JgnUUbRXjNyO3eg3O+gi9UISoIeAIoHU5HCCdvQNqX7vxaY6531lv+q3/2Mvy3/0fyf/Jepu/5EPu//hs5+rrf5n/0PR9n/JVP8uJ/+xdwP/7DPP/x/4DbH/0OwmwCwOb1F/jMX/0/cf6LPwfRr/H0T20PP/NzPPzMz739RgXx+Pbok6HXvHG24uVNTxhc8frr+7zn2VukiSCeHPLGgws2dcdiPqVIJrz14PPcu3eL597zYV5940scHd4lyjZ8/ou/QhLMCSPFZts8kWk4EFKwXrbc/XXPU9anROGE2fR9hIFPh0iThK7VZFnOnTsnvPHW66zWPUW6hzGQZRmr1SXFZA5i5Pz8ZQ4OjrC0TKZewnL79m3WmysQgoPDI/QYI5Xg7p0PMg45YTywXZ/S9oLnnj/CDP5xi/kR3dBSViMHR0dMZvsIAsKoQLy/5sGDh9y9+wwPHzymmKfMZjPW6zVREhDHMV/1/o9wdv6YNIO6XWJ0yXQScX62JApz7pzc4uLigs1yw/7+PvMiQ9uYOFQoB3kekYUzpAzIsylJklA2W0bdevNLCHXVEIYpkZI+fJ2Ivb1D4Dar9TnG1axXW/YPblOVI+2o2V9I2mGk2XZIBEmSe0248CbecZD0fct0OmVaTP3UAUMYzWjrzqeX6B5FhhGCpmlI05TlZUuWzijrFUKOhKpg0C2drXDWRxs516JI2ZstGEdfnWmFJwS23RYlA9I4xSmNiH1bUd/3aONIE3vzHZ1MJvR9TxRaZBwwmUwBCANDEErCIKHra4piinBeGxknE7o+Yb3acHJ8j7at6PoKkYasVxXCGfq2RThDFArKak2enTA7Drm82GJcyzAOyGBg6DsOD29RlTWLvdy3Zr3L7V0DyuMjSVML9LAikD3Ly5Ll4w2L2QlhEdIFHYf7J6TJFdY0jF0NYcjB/gRjSqxLSNKUw8N9oiih7yyrZY0ZQYqAulpxdv6AftBM5zFDo7i6umBWLEiSiL7bMpumBGGOFAHa+ItgUUwBzSSJWC6X7O3tMY4jB4dznHNcXl6SpjGzSULdl2gtSJKIvDgELHWlEU7grESKEKMtZdcwjiNmNsG5luXGi5QPjqc8erjmzdM3ODzZwzrNxdUpQlrCIEChiKMJkywiShx1JbAB9Gb0ln8r0Vrw+ptr0rDaxclYVKQQwvHGL36RQMXEiXdOW9ERhAmDsQijiKseo6FrLcZVXFyUdPUrfhyzUQxjSd+VXoxrQtIkp24GhByYTWLaxnLxyhVCnu5qqHxw7TB2rIY127VfxYdSMBjN6VVJ3W2JwoLDyRFKjUwOM64evs6265iGD9EuoJgYDC9gTUDZvIgzEev1lqxI+eefOidIJN1wSRI89K6xZsSIrdeUSUffX5IkAVfliDBL9hY5oVK0rocAtpsNw8WbhJGgWQeEYsLRrYzl5SOEEkSJ43L5FuV2oD4Y6CpHVdUsZj1dKYiyLYv5CVfLUx+jIWPyfEKa9WjT8/Dxkul0inUth3dy9vYPqOuWxcazzXr0rQVRFNFtIl595TFxAuMA9Ubj0Ixji7PHNNuSunqAChxxHLHd1gh7yPHJhL4P+dVPf448W6Dthtk8x4yCq9WSg8khFxdvcXWR+j5r2E0hr9tg/G1vvPEm8PaR7BtvvAHAyckxAPfu3QPgB37gB37N73Oapm97juvF3pPN3WgZi6Lw2ZHA8fExr7/+um/cuN7JL9ufp//++PHjHXP55L5VVTGZTG7+/k5a0aef7m2mdid4+PAh/9F/9B/xJ//kn+QP/aE/dPOjf/yP/zGvvPIK3/7t3852u7l5rv/sP/vPsNbyu37X7+KjH/3ozfv9S3/pL/Gn/tSfomka3u4AugZhfhyWJAmf+9zn+PEf/3F+9+/+3QA3rOs4jvyD/+a/4df/lt/Ccx/+MO1qvZO/CpSS3gnvHIu9fYT0Dmwl/asYY30SRZztxkz+9yyEQg89UigfPYbDGgPOESpF3/c0Tbcz6/ggcl9zBzifwStU5B3fxng9uRQM/UgcScIwuvlEOSEQjl3A+a9t0Pn/xVY/eIX6wSs8/ic/yTO/83t438f/MACHX/PNHH7NN3PxK5/k5f/uv+ClT/znHH7NN1O+9RJn//Ln/jXP+v/5pqxgGyesby9YKGjaLefrR6gHhigWtJ1mNlmw3Gypmha4Ik1TVl98HSlitNZcLR9x796ctx6+yb1bCZumYXhrST+MZLtDqLXm8mLN4xck872IITCU28cYMzKbpPT9FVmS8qUXX+OXf/nzBIlktVoxzddYnXK5fsz+wYT57Jiu36DCiBdfPiPLY64uV6RpRlleIBUUhWK1OeXRozOCcIZUZ1yuX6Qopjx+9ID5bI+md6jAoYeQOC94+OiCMFxg3Jx1+ZiquSBNc7qtRoYFX3j5IWmaEqUBVdezONxDRoquaUBY9hYHFJOYpEqYL2ZMpwVltaQpfaTRb/yN72e9uWI+nxMFEqF8aHoWePPil178Anfv3qaqtjipOTzZx2CYTg65vLoiuT+l3NaMg6RtNuTznLY/Y2g181nGqDVZss+mXNN1I0GQIOTIg9ff4pn7t9Fa07eWerNmHAfySYHuOu7dWbC82rCs1ty9e8Lyao0eAwKV8b73PcPF8i0eP7okmEwRbqDaNhweHgE9h/u7vO22Z76YoALHdlMxm+dorTlc3OHi4owkVTgX3ExUw2jidbtxhCVBa8049oClayv2Dw9omh0mGA1ZnpAXKdb4xX1RZHR9hdYjcZZirGCxN2Exy7Fu5OTokCiWbDZrP/XIjhl2BrHNZkOeT7DGY5wiD3njjdeYzBZ+XH//Dl2/RRDS9RWr1Yo4UZxfXJJPnA91f5fbuwaUX/Ob7lFWG4wW2D6jrRRKRKRZyHazxMkAMxoWJxOEisHMaUuDcy2ByBh0SZ7H3DqZsjdfcHm5xumS84u3iNMJ3VCzf5hxcHhIN14RiT321yF28C0hQRhxeHjIarWiKnseP16RJhMmecp8MUE4w2xP0fctgdbMZhl9P7K3d+KNRAbCOMXYjLIpsaNABj3T+R7adJjR4pwGNxBGEdM0x9ETRQlSgaVhVY9Yp9g7OCFKJEka+DokoXCBIwodTTvQrEqEtDhbYJVFi4HUbkA6isk+URIy6A1aaaphpNs2zLIAFRb04yVDFXqtaJxyuT5DyBgzamQjfP1VlNI3iqv1ijiETb1Gm5AgFMRBTNf3aN0z6IEgkIxjT5QmEI2kM0XXGeqhpDMx2BAhDWboWczn6EFR1zVR6Lg4vUTIjI0uOb8okaOBUFAEioGAq2GDygRchKAVSgkfsKs7LzXQ0n/hViUqjbhcnxGGgml+iJQHdL3AyobJNKRtewIHQawZesUoNai36EuJcBnO5Nje68ec0CyX5+wfxTg7JckDsswym8wxxtELwWKvIJCOZNozDJL1dkscH/gx02aDkw0EASqwiMBRliVXyw4lNS+/eMZ0sqCstuSFZOxjHyocO5xLSOIJ49ggd723Kl6yWJzw4M0HJFFMPgnATpA6JwkcuIhqExCnilhphrYjLWAcO7abhr7tqKIVjpSy6a5VbO9Iz127qoGb638Q+K+xMd4JeM0U/uiP/iif+cxn3vb46yi+y8uLt93+5WPmp00pb48p4iZOxIPMJ/3a71R7Z4zxY9ebG99udnmn7WlY8zQQ9Tf46KNf+ZVf4Tu/8zt59tlnmc1mnD5+zMXFJX/5//qXAXj11ddu9nscR/7yX/7L/MiP/FXu33+WcRx55ZWXb8bXHpALpPLMqhCCJEmI45g0TcnznNg5/uk//If8wj/+xwDcvnsXWVW8+elfpa0q/o3/9e9hfXlJU1XX7w4pHFobhBTEUcJ1g5dz0icIjK2POYt2zUjOFxRK5xiGnjBKdlMWjYObAHe/kJ4RBBHDOBCqAGM0KvCZsVobijgB8KalnQ51HAfiQBGEERqHiyVWBAgH+SCZNgHb/B0uHu6Jefsr8irdvx6CvhNMfeOnfxwHvO/jf/jmKZ8Glq/+9N+geutlhPJOVQE3xiR4yrP2TvIu99Tt1/u+W5zlXcjDIOPPfoOkXa84PnmGrm9QQUdZVeilYRAlr735BrPZjCxKGQeBYUNWeImVG3s22ytOz09QwvH40S8TRznPXA303XjzuR5Hy6h7LpevU9eHdF1HnIAeBf1QU20q3/OtQpoBtquWcZBcDkuSZEo/jJTVwFuPPu8j2mJF1/Wcng4s5vtsNx0IXzt8ddWy2l6BMGjbslxfstibcLZ8hTy6TdVE1HWHcyPjIPn8F9/wLHjzFnEcMZnHrFYrLAol7M1iahwMWZahAsHrj1riOCKRAY9Oz7m6umIyyYmihKurNZN8IIws601JkUWsNy2TYk7fdLgo5M6dIx63j8kXMU3d81Vf/RtJkgBx4cgmMWXdEoocoxX37h2y3W6waUG8CDEm86ZeJXE28PtVHPPaa69x/z3PcHFxSZ4eIIKSNAp57rnnOD095cGDU9IE5vM7GGOYTkOevX+Acpp7z95Hm5KjkyPqaiDN5hjTcq+YkhUNaZKzv/esz6BOYoToMWPAw0cjH/jgHcK4oG1rNuVjbh+fUFcD9+7d5eAyxDnH1eWKKIrIssxLX6pmV2XZUVUdMV6rOJufMPTj7n6CJB3ZbC8pipzbd2/x5hsPEJEjjSxBqMjSkck8Y28+IY5DQllQ1x1tE5Cnc7bVY8ZOYawkCBVxEpAkIQf7t3A24eLiS7z3fc8wjDVDrygmIUrc5+rqiqODA24d3doxpF7Gs1qt/jXf8Cfbux95LyP2F+8jjhWPHl6Q7U0RwqJNQ5zl1G1LOtM0ZUWopggcVgwIJXHGkMURRkdcrVde6DtIDg8PsPjogKRIEULRjxVhkDNfJMT5HlY7ppMZAk9THx4f0DY9k9kDrICT23cYB8177r+PV199kfXmiiiKkDJgs/XNAlVVkYYhXS8Yekc+ibCuB5WhrSBLj7BupGm2BEHGZDLBWMlgLM6NWHy1lbaS0fQ4G7Fc1igVIZUPCbZa0+kYFRu61jJ2I45zpEgwDDStJk4klxdL0jRHqhHnBEompCqkaQ1J1KJkjDVeM6EizTTco28tQeKZtbYrcYEjSRJ03eGEoOsHQhHilGV0IwSQpjPvxB97oixjeeWPhSQFG5JlU/rW0rY9caoJ0oDl1o9S81nKOAakYQJYQhOgZIRCgBgJQ8M8yTBjyLauSIsIIRzjaAilIhPBTURMU2myfMY4wKKYYGzHulzjnCOLM7bLmkoqwsjXjE2LCYPtPetnBEoFpHmMsJbBjEz2E8bOEGcFVTtiuobF3gGzyZQq7LE6ZG8SYS1sliuMgVBKtAmo6g1KKdIspqlHhgGqqmE+n1OWG8qyRkpfxbhcPkSiMOOMs7PHWCMJAsl8LyHLvIMxTSKctUzze0RhwHPv9Rf0vjMYt2XVrLFGsXzjIYIQRIc2I0VW0I0JaewwtiJMQppthJSGOAgQ4ka4xpPLsb9CPv/88/zMz6gdM+VdtN5UAq+/8ToIeOWVVwEP/H7lV375pjnmeruO33lb1/XNz96ZcbzW7z18+JBbt25xdHTE2dkZ13v45Y9/snmg9FThzNt/ttuu3YxaG768b/udIMs1MH799ddvGMyTk1t8+MMf5uHDh7z11ltf8ZiyrPjc5z6HwxEGId/8zd8M+LihPM932mvPyKZpSnQNsp86FsPu5PrySy/jdozusx/8INO9Bf/LT/7UU8da4BAYPSKAIFDgJD4s2uKsZNQ+fD0Moie/YucfOYzax7RItcvT9YDdGuNDruPk5mBaZ5FS4YxGa0OUZEgEVvscXoQ32QSBIoz3GY1BiZDxJIBhBCex2vD1myO2tUZzbTrweY161GjbEoYJ6ul9xWK0Q+uOMFAYI3fh4QYQaG0IAkEUWJrWW4eEAOGENxD9lz9B8/OfI/t3vof8t34r7GKviq/+N3nPV/+bNH/rxzn/4H3Oz9/gFz79L8CNiB4G3aEiTTFL2W5rrJaEQUA+jdmUS+Iwpm3BajDaR6SkWc44CMQs48VvrFFXHYWIkaYldCEymPt+5ZOApDim2o44aTg9PaWYHrDenrEsIyb5EYKeo5PblMuKNJEEgeX8/JJbtgBpdh8Xr9EbesPBvWOiKOLycouQnnU2g3fed430rv5gpGlXxEnI6CwmaIgKweBaDk/mxGnCdlOxd7xPWa1oTUlQ+AactquJwoQwibG2ochDAjmhqit6q+nGU5raeWOaq9mf7nGxekQQJERRQGtahssIh4/ks85PXBaTE9bjmk29xGEAixSHjG5F3S3RVjFayWZ5RRIXnF3VOBeSpBHLjQOrsLpj/6Dg/GzN0cMNTjS8+PJrjLoBm7N/5NnKR59/gTw9JEmVn069uiWOFUUxZb2p8JmaAdNZzmq5IiugvpI8+14P+D7wga9ltb2g7wMmc4ENNM9/+AP8hq/5jZw+egtjHFkx8/rR7SPe88Ej0mjKsnzMM7c/xNVFg5QdSZKw3W557rmPokdBGOwTJGsePXrA/fsfxuqUZ559wGbb0w4bijzg3u2vQkpJnnY0jQe2KmyZzY8pm1OkhMP5PZxrSYNDrlavUdWHqMjSdJeEqiCO5khpubo8I072GcYZSbTHwd4+s0yx2VT03UgSD6y3V2AzptkRbe2d//uHJ0QhhGpGki0Y9RYnLKtySe9qrk5XrOqOw8N9ajty+ugxeZYiRU171RLIJUMfkeUDWVbT95qj/VvsH0w5Odr7inPpr7W9a0ApK8Vsb0pX9aQuZ7vsKduBfKroasPQJujWIpgh4gwhDfv7BcZoBAFxkBPFitn8kLYySHrSXJLPFhgLl+dXHgDpHmPGncU9pMgSqrIiSUMen13t+kgVaZEzGkvbDNTNwGc++1mCEGQQMjpDsjOGJFlK3TZoqehNS9m0iECRpBHDONI0NdY52m6DUiFxUjAaS69bHwHTWsqyATR9P5KkOVq3Pldz3BKGoc+IshHONcjWoZ3FWo0KHMa19ENHFudoo0HEaB3Qll7XKbAgNKGK6HpNEAQEytH0Jab3FxJjHAiFdr4NAOGoqi1JkiCVQ8mIrvUuOG0GcCND3+wu0oLtpkIiaZqOrr0gCL3TTYp0txINaMueKArAKsZBguh3DtUIGEjiga4dmReHhKHXWFblhryIkKqnrCxZOmO13DCZp1RVzdg5rwO6WiJFSOkMaRZiR40xhs2uerLc1BirfR/qMADe9ID0sQ3OjKhAoJSgqVuECFmvapTyI70vfPFNrM7ox+HGKAGWOI6J0gnr5QZ0TRSHOKAfBg/IrSPJUvphBBGxv5+Q5QFCap59712mxYTHj8+I0z2GzmerbbYXLFcX7C2OaauarunZbhom09QbK4xGKocdA/QQY4zm+HjKMIxoDVVlybMJ1XaLHhxp5sPPo3lBVW6Iogjn9DsAM79927d9Gz/7sz/L2dkpAMfHJ3zbt30bZVnyy7/8y+DgF37hn7NarfjYxz7Gv/gX/4JHjx4xjsMudy5isVhwfn7GarXi13iZd9wE8NM//Q/4w3/4j/B93/f7+bEf+zGapvGOychroh8+9BrNtxX93Bh1vgxOPnXb+973PEdHR3zmM7/Ker3+1+7LvXv3aZrmBmzlec73f//3M5lM+Ct/5a/cPLdzjtlsRp7ntG2LtYYoinjuuffyHd/xHTx8+JAXXniBO3fueHc2+CgkY7g4fxKObcsKsVljd854CaAkQRTzXX/sjzL2Az/94z/+FBD38T797vMcBCHG6ps+Z+cs4zAQhpFPa7C+L9rBLp5lIJ1MdgDVIzhrLdoYhnEkSXy2qJIS5/ANXo03zAV4iYHWBql8qDl4PVjXNhTTGdZpDzYjhZKKruzAGCZh7l9NCl/PJhT1UNL3jsUiRxKBsCB8nEg3doxDR+wihIoYjAarduTAQOwciYyw/YBQ199N4T8zSpK+8pDmP/0L9M/9d0y/57uJfus3IXY5qpPf+/sofvEXKT7+Q9z93T/Ir3725/mFf/7/YjIZsUFCxQlDd0le9HStxgSaskrJbz2LXm5waOJ0Tl7MeO3NFyibmjxdcDf7IGm0YVW9ihKWaTJFioAsyVHBOdVpSRYvaLYjyRAiGfiN77/P40cXZKnDiSOee89ttgenFGmBHkIuJg+IXj8nDhOE6BFAHCvuPzPn8vCA0dY888xzPHpQMhpDN6z54PPPsN20dL1hMIL99AipQqwRaA1JHLAtr8gmAc75hJKhd74NJol2DSsj7dChlEQoTZIGbLdr0gTyIsM0Pr93Pl/4pAY30g+OxeKQ9bJF45lPgUIoh1SGsREcHd7i9PEFaRETS4V1IwiDEtXOlRwxDg2r1YqiKGjaLdZIkkTRDUucVuTJPoiA1fqcrAhpWs/YdWYkTnw8zcXylPV2y8HBPm2/5mo5kCS+Btk6zYEJqOuSNE1549OveS3nquHO3Vts1xvi5E3SeI++f0inLwmChL35LX7hF15gb++AIk3Q2lcV2osNKnLkRUzXQHKgKeJjmq1iPisQwldfFvEx29UWZM1q/TJFMWc6KXjt1S8wyW+RBHPG9pL9+T203fr3rmPyIuLRo5qDw5C2tkhG8t17OXu04vio4I3HnyWJQ24f3eFydcrhYs752RLlJHuLQ8KDeyTz2F+ruwEtB46PnyWKzwnjkXFQHB+FIEb6biTP53Rdz9XlmskkRoiG9XrLdJ5htMFY39GepCFtt+bBoyV783vIqWJswcmQvdkcPQqcaWhrC8U+070A63osE565//53fY1414Ayzia88IVHJKkim2TkuWAc1xzPb7NVNX1e+dwk5VPj4zgEYQiThKa2WOMYx47X3/wC00nCYq+gbh3DAHGaMFnEPHr4eOfSErRdjZCO9eac27fuIhWEieTy8pK69hosIUPeevgGw2DI0sIHd6N9kLbd0DYdo7MQKOpOY5UgnHh2adu0/mIWKpqx3lUTBZyvLnz+VRqwfHxFGCW03QDO7HpTY4xtSeIpYaB27m/N0PtwUSkDhNydyKUfqSJir/vUmtk8pyobJjPPIoyj2UWDWJIsRwYRo+0RynmW03kg1dYtOEUchzgskfLArKlqojBFqJ5NWTH0ZhfI6wPddecwY4BVvn80CjOMHakrjdUN1kLVjEgH63VPmkwJesOga/b3DqjKliiWRCogigTbcsnQO+IoJcsTqnqLUp4pa9uWOAmxtmXoa5J4hjEjSarAKYpixqZc45wgTSe0jT/xZpnv4PYh9oaur5lMZrsGIcM4Dghi2q4ljibobqDtOqIwI45DRg3W+C+ONi1W+K5aM45YBWER4jpLGMfUdU0QSMq6IUoTjLE0TUUaxUjlg1xxjsvzilD6kWNQBAhjiGLLJL/LMGiKScKVgSQsKLKYbnA4PZJls12T00CWCiaTPayBSCom09yHDmuYTxYgR5wx6N4QKu+0lvWwy1t85+/harXiz/yZP8M//af/BCEkH/3oRzk4OODP//kfvnHfdl3Hf/qf/hn+wl/4i/zFv/gX+eQnP8nFxQVpmnJ8fMzXf/3X8x//x/8xy+UvftloeweF3mEUfd0g84lP/G2+6Zs+ysc+9jHu37/P5z//ecZx5OTkhKOjI/7wH/lD16Tkk8c+BRzfKTgc4Lu/+7v5bb/tt/HH//j/nl/4hV/4ytd37glXKwR/9s/+Wb7whS9wceFbQ77ma76GX/frfh3/w//w3/PTP/0PuDZGAPz23/7b+eZv/mZeeuklqqri1q1bfOu3fivWWv76X/2rTKPobTv8f/rhH+bq8pL/5N//9zFliet7bt+5wx/4K3+Fz/5zv2+riwtmewu+4Xf8Dg5v3+av//AP8+j1179in32WpDcIjeOIFALrLNaYXXDxrmFm9+bUzn0q8LEz1ppd3JE35PgqPkkQBhjjkye8zEGgd5KHINjVKl6zms6BNRhtCKKIQD1p4riu42zbmjCMMZF/LVzgI4ysRRuNUtcBy9eA0KBU4EPStSaOAxAQKIlTEqvZPdbQdg52TnMBIB3OgHMDba9xZNg332T7w/8X1LP3Kb7n9xJ8429GKYv82q/lZN1hP/EJsj/0fexPCj79qZ/GaosVa5J0JA3nfPj+84z4ooWmH0j2FFKFlF1FU28xg0IqS9mecrF8jCD0+X5qTtmUHBwOYEaUSVnM/Gf9wx98noePX2I6OaJtK771G7+FOLWsV3B8O+HsrOPk8INYa3n+A3sE0zcJf/FllJLgvE45DBVxPrDIZmgL2SQhiiV5fsiLL79CFM9YHN7iYrWkq0q0HmirGmMb5vMMF4ycXwAGBl0yhEvGYULX1cSRI8umxJFFqIgkimj7NScntxlHw3azpSj8+8NAEiYEkcAaRZbnCAKS1MfsSSnpxyWbzYr9/VtMZzFCHHF4uM+jR4/QOqOuS2bzW9hkgx69nClJZrtIrZ4oTAkCRVUKlND0wxY9CpIoo7MWrSviNNjFe0nqfoUVmtliggoD9vbnrC8HZvOIth1ou4F2bBGRRUWG4zsHNGXHYrEgTQSlUIRBTj+UrDcVR7f2KKtLLq7WFJMF603N8mpNoEasNuSTKU4a5EXA3Tv3WS+3xHFI1yxZhApBRF2fkga3Odjb53LZcPtkSt/ERHaPWZIRBwqtWxSKMDSsLpZgDWmacXWxYjqPGbueaZFRllfkSU7f9xweSNp+zb1n7nj2eGu4ffRegkgjXOYD3e1A04/Ua/873L61ZHP+mIApeR6jEkMQzhmaljt3D2lrR9v23D65xXbrQ843mw1JLnEMjFoThiEHB3dZLpfkeUHTlmBHsjglm0fE0S3GvuH5997DOUFT95hRkE8M27JFCUUgznm327sGlCI2aCuZzucgNE2zZr4nGboSp2vq0usDsklEN7akeUSapezt7dE2I6+9/Cp5VtBpw+wAwsBRNwNEFat6JCBGxjVChIyD8WPqNKXThjfeekAQC8IwpG4bZBDQDANKGQYzECYxm6pEKkuap2zLEmucXy2XW687cl4QLCWkaU6UeJ1D31u6fiCOUhyGvIho25Z2CUmS0dYNB/sLqqphGDriOERIyTho34kZJQgRIKUHpLiQcdS7L5lDBYokzWn6jtlsQt1sUaFvENHas4s+f0sy9BrlBO2w9eyDisjjHD00hElC1447F6hEIBhHTZZlCAKMcaRJQBpL+rYmy1O22zWTvYJxsFipiKMEKQPKrWdDgsA3eFjniOKQYPRhx0I6oqhgU1ZkWUxdDXS9I80kcRQSCIEIJFfbFWEQYXWECHuMGZBSsN74YHaLpR9aohCsM5xdnBNFEUlc0LYtaZpi7EivWxJi9AhV43M6kT56Jk1jhsH4mIwiAgRBHDBL92nqEYNBqAhhr8F0QKgCLI4kTBDWoIxjdH7kkyTJDsh4EG2MJQ5CjO0YRsnQG/K0oGx7Ls9eQwgIQsmtgyOqzUgYG6QUXF10Xi9FjahzkiQmiGP6fsRpSRonRJGgqbc4E+yY2AoVgJT+fSZJ5k1WtcHGPUmScD3HvA6xvgaWXedjdf6L/+L/zld/9Vfzb//b38He3h5vvfUWf/pP/2n+4T/82beBuE996lP8gT/w/Xzv934vv/k3/+bdWL/k4cOH/M2/+Td56aUXdwkxzjsNtd4BhSfg77rBo229e9WDIs0f/aP/O/69f+/f47f/W/8Wv+f3/B6GYeDBgwf81E/95A04atvm5jluwOTuzWitdwagJ3Pe6/f35cagm+OBYPcP4Pj0p3+Fr/u6r+fo6AhjDC+99OLNcXj74+Gll17kW77lm/n2b/928jxns9nwi5/6FD/9Ez/B5ik21JYltto1u2jN+PDh7nhIytWa5fk53/S7vgOA6WJBW1W8+Ku/yl/7P/8ZXnvhhS9zDwm01rs8vpTrKKbd4WEcRpyzuwmH2zGRkkAq+v46j06hjXkKeDus0SjlWUVnnwBKYPcc/jxpd79HIQRKCrrO/y7D63xG5yN0lBKMve99TtMUh9jpY3c6QK2Jo2gHbncufikQCPToL1hpvofRCh+rZxmHEaVCJN5B3w+G6y52t8vRdNYzUM46RKAw1vkx+xuvUf75v4T6jt/B9Id+ECctQkrkxz/O3v/jv+F9P/T7CHrFL//C32W0IyqYkGVTXn/JR5RFucBVAUlQ8tbDR+TTHGFanr39DFbd44UXXuBwkjOZCc4fXzErBDGCW4s9EIYsPkFEFXU5sDebc3zwEapqS5RmxEGEEIrsUFFt1ySxpG7eYhih6a44sT3GesmDdZahH9luey7OGsIYmq6haZckcYwKFc5KLi+XrNY1Z+eXaOHH4ElmSbOU5WrFfHJEnGR03UAQZUymMettQ1m1VE27G1MnnJ2esZjOWMz3EW4goCCJHXVTgo4ZjcW5lu2qI0oDNo/W7O1PCcMRZwRShuA0H3z+q8jSCU4MQI0KHHfvHe/64Tusjrm4XKJUwO1bdzk7uyKOY6bTEzZrv5AOVYGTW1RkyLMF201HmqUI1XJ69oD57AiHZrAdxXTGYCzrx1cI4whlwmw2Z7t9iAoD5ouCzfaSLPPNSEVacPvkFk1bMZnMmM1zLi+WJHnAfC+ktwGHewuc1GzWgjw9YHl5RjnUOCu9TtkpvvTiC9y9/V7msxTjNrzxKuwv7lA1A5PDiEDFZNE90kgixgHnekIVkqYGPTaApC5POd7fp21blFLkacFkHvPgtQ2L6R1mRUXTNCymc95463WCICOOBlbVa0yyfR5enCGEN+qsNhcgB9Zlz2FyjzfffEAoJsyKmKHtmGb7ODNwfn7JpIh59dWXwSlwPgaq7xum0yP0OGEYa5yxRIGA0TDJpkQyZTqdslpfkYQ5d+48g3U1Zw9qnn3+Hpv1JQLFZFoQjQ4Rdrgg4+TomCB8u2TqX7WJX0sY/+Xbf/mf/6Bra0mUhQymJM2mREnBdrsmThPW5Zay3DAMHcMwkOcTDg5vMY4j1g3EYcSmXGItCKk5PT2lbVueefYO5+cWGQ5cXi5xRLRtj7VgNIzdyDgahGoQhLTNwHQ6J8sypPSMTdd1OAMyEIRRQJIkVGWNdmCMrzWazKaMg2EczQ6sCYax8+nzKvIUvm4pihxjLENvGUc/HlNK0I9+TBpIwWZTEycCowVpFtJ3I9oN/rYx8MxsGNK1But6snRCP1QEQUJdNWRZwdCNZHnk+3KDXfhrqwniCCd9OLMdJdJJynJDmgWMAzcMrK/VMgShoO80QRpjtfGjY+UjlPb3F6zXa8+EpBlgCULBOPYMg2dOht5ijX9/gcp8Q8DQUtYtk2lC0249a6kSmqYijn1Wl5SC0ZRIKRAEaA15EVKWW5SMyJKEPE9Yb5ZIEeAw6NESxP7C5NkRQyDZNQD40NYojm8CqrPMxypYpwmiCG06+s4Rxf6CF4U5YWTpO4cbHFla0HUdSRrRDw1dXRHHMVpb8ty78LrONxZMJhOwjmEYiaKIILaY0bO6158JiSLP5n6EkPmVsLP+Ql+3SwKV+Po24Ugy4YG79jmeghCjJaPuqFvfU54k0U4r2hKHERAQqBScF8Bba/m2K8f/9pdWO/gAd9wDGvlrOB/eLq/8V7oj3tb8wpPe6OsW7pvTwFMOiuuR8dv+/6nXvLmre/t9v2Lfnn7up3/81O3iy+/wTg96+ifXCO3pUfrutnd6aaUUe3v77O3t3Yy2wYNIU1a4vsP1w9tfxzmuR9f/qu266vLpff3bUcrh0SHlds18vrdruzFgQSpBVTUYMzKdzK6FhTjrUEqx2WxQUjKdzuiHftf560HYZrMhjmMm0wnjqN/GKm83G6RUTGfTXewUOGcJgoCm9s0dRbHLtXQCiyEMArqmQzD6cSvKqz+FH0vrXcvONSsKEotD4pt8+r4jCBVShEgp2GzXpFmBs36knyQB/WB3gOb6OEmwmjyNGAaDxpuUpPAjfCEE9faK8H3PcfIH/wjiG74WKYRvU/nEJyj/wx/gs//yZ7l4+BnyvODx2RVJKpguEl5/9YzFZMZ8PuMzn32F5z/4DF966UVuHX2IwdakuWG77Llz94CyrNiWKya5b+W6dWeOsQP1eIkzKYv5HGcaonAGTmI0rKtXeOu0YTbPCOIAJwWnZ4948OBNTk413/9zA/uVXwBdZPCJ/9XzfMZBnDsGvSFUc7Z1R5rFgKHtarq+J4xzlIooq4qg6JEiJiDC6AHnNHmes9203Dp5htFe8cabL3N8cofzszWL2RylfE1jloeMu8+xscKnV1hLtW2RUrLYSyi3A+vNBbPZjGIS0TQdk/wAh8bZAAIo8oDz80uCQBLFAUJAWa2Y5Adoben7ljxbMIwdUgIuYBg7lEx2zTwdCl+AEQYBQWx2kX05WVpwen7GZD5hGCVC1MyLQ+IAhqammBxwenFGXhTEWQR4U98sz5gWE2aLOUL6sPS8CNluKpbLNTIy6FF4bKAciIA8mXJ++girARHSNBVZVoAYqbYjh4fHIFaYMcfqhOley/7smLa/JGAGLvE5kJOKJMnp2oFIGJASYyOafk0aZ2TpguXaM3lpniFdwmyeoQfL2fk5/bhGW0OYjWy2NeW2J08z7tx+hr5zrLcrosShrSAKZpTbc26fvJeqXhMoi9UpURRzfDinbLZYWvphgzMJs8ldEJpx7CjLEoxgPp8ShI6q3uKsIo5T1us1bdOx2L/F3XsnvPyll2lry3Pvu8PQamTQgc1I4pYgWLBaX3ByfBc9DHzsd/7pdyWOetcM5WW9JS1CqkFRt2suy5FQOrKp4eLhBU3XA4Jt3dI0FQ9Pr7jc1FjXowJNFs0Y9IY0n1FVFaPROJfy4C3Nal0yUFHXLUaLm7aNQCqUChm0pqk2zGb7yDDgcrUkKNeoXT4VgfPARniGo6oqZtM9QgHDICiKAm164ijAWUvXd7sVebLrONaAZ/vGwTOA2tTkRYYeNOtlw9HtPcqyBqeJ45QocrTan9Ad3gkHlk63BIFPwJ8UMV3vGwP6ISAMEqbTAAGoNKauK+I4AhTG9sRJ6EdiUoH1qftYQZ6nRJGP5bVWMPYdYRozaM9yBCpCSUent6RxiJIRTWMotwPOKcIIrpZnPrBcpSRJRteWyNi35iiRMc+8k3k0PdoJsty3AISqoO97ejqEkH41FiSMfU8Q+miU7WZDGs3ZbleowJEmM8ZeIyaO6aJg6KGptsRJhBN+bJdlGV034oQjSSIkga93syNV6+UTg9GUmxV5nhJaS7XxrLXuNXXdkiSDbz2wAe1oGdwK5yztdkWWxmSTgnLVMJ3s0VTekCOc/1zpYaRtW5IoRgLVtiSKEnCSeMcaOWfQpmVvv0DYhjDKfSVm1yDkgjxJCIKQsVcI1zLJCwIVAR7QV11FnCTk2SF5LjFaoFTI/uLurgrLcHlxwWSSYZxlb75Aj+XbAdK/anNP/Sn4SoDJlwEunoycfYXfk1H220Dp9cvzRId4AyzBG2yeApVcs6lPI7gbRHcN/K736MkLXfeCcwNanx6PXxuG3mnnntYpPnU8xJN73fwpvNP5y8GkLUv0xSVu6N/+4C87wOIdb3/7fX6tbRy8blUp5dk98eQx1phdMLT04G8Hyq2xaK3JJhOvuX6KsR7NiLV+serLHXxHsnfj+oiQ63HrdUvPjZnH2t1EQt4s6CTc7JeSAQjpA/V3TKLcxQ4Z4zuHbxIEhNsZjrTXiMqYNJGMw0iW5QgBBrebAI0YJ5C7MHNv7nAYa7ju5QGHs+CkwzmBMSNRnKAeX7D+s3+O4uMfJ/p93+Wd7B//OMX/7Ud57oe+FysnfOZX/ieGsaQY9wlCyfve+17ycMJgt3zDNzyPc5L3338fUayRKiYQe0RsOX2rJY4WtJsBOzj29w+4vBhIs4xA3maS52RhzmA7QmD/KOThgyWz9Bbst8S55vSsJsv2CPQFt/busCg7JA92SzWHQGGaDhmMJDZF6oR5fsA4PsYOg3f564a9aU5d1dix4WieUQ8xZbXh+CBn0zREYUi7aZhkMWO/xJqAaXKAbQXvuf0cTbvFjIajvQXO1UTFAca2dJ0mknBy54Cq6jADHtRKxTP3FjibcHR4wKgr9JDS9pa62xCpgAcPH3K4d4uuG7Cj8HI2OWHofY1fGAVY6z8nbTsQRyHDMBCqiDiNKNcdUZZBaAgjyWa78qkJ+RTnDNNZhlQhiYjYlhU6toztiB5rRhcQxyFltaFpFWmaUhQFFsnVasl60zKdK5ZXJYu9KYNp2D88ZrstUZFD2oS6KYmTmLP1EiG9UejqcsPhrSPKVc3Jrdvs79fE4YxusJydnTGfHTOdLejGAWTKaA0PHrzK0eFtDpKAB4/fYjG7hwwlV+sVx7cKxtqi9ZbVukbJEIsDBWkS8fkvvsLx8W2ibMpQG2ZFinZL0ijk5Lk9osDhMJRjx2K2x6hb9uYzoiiiyAVNe06WTdDjiAg7iklO3bWkecKDByve//73sVpuMWYkzwL6diBSIVGaIIChb0mTkKuLijTOKLKUcdAoYTh79Nj3nzc9VbXl4OCAx4+uWC0fszjIybOQsq1oHnyeUGb/mnPgk+1dA8rX1485CA5447VT6rJk7CPyNEcFI6HIObs8pa47xnEkn8Q4DA8vrsiLhDQTOHfOxcUlk+mcUGV0dYszEb1e4tQWZ/1YUEUh5S64OY4Ujx+/SRZnHBwcsd1uGbVFSIcIAlQYUEwLVlc9B8fHtG2Lc46uHai7dmcq8WOfvhsJQkOShGRZjLoBDZZx7D1Q0RYVCJywpHmCkj5Hcu9ghrEDcSKxRqCk8Xqh0O06RCXCWUBSZOnNyEgqX2W02WwIZIweRoLIEIaSKEoppiFlucHaAITy5h4hCGVIudkwnRYkeYxzAoHGGs1svvCje6Fou5G8SBlH3xCkhNzZ/X0PqhCOyTxn1A0zt9gJqT1T2HcQJ5rFXuad5kVIEPXUlWYSZAydXxhMshl9r6nqkjjKCQLBMF6Rpyl1OzL20rccCO0vPFGK0Q1CSk5PH3HvmdvU2yV6bLFWk2UFoVRek5lPWK/XJGFAWTckacpgRpLMj977tmP/aB+FYxwds+kBbb9GoNifH9O0JWPnx4Dj4LUfQRBgtKMce9JQEaiMrjWowB8bz04roihi6HoWiwXDMJAxw1qHMYIsnzLqniQJEdJ/RpSSDEOLUgVGBwgx7EbF3gBkB42z0Hc1RT4jjASz/RBjBancx7k1gzZM0yltN6BEyHQ6Q4gQx0CW+XHaaMab79yNlvKdmL4vxzHXAO9to/K3A64vZxDdzWOe3OiEuxkv3wDaa/fxddj3U///FS7sm7tcs6BcNwLu3tMTVvMGsIknDTtSeiD5diztG1yuwcfTz/MVrOhT+yIQ7wgm9fk5+mp5c3wdXzatfvoJ3zWe/Mo7juOAutYzuifH1dyAtPRmhO+cbxrUxptllFJobXamGw+y9ejZdBUEOwOP22VXil1PcOijhXZxTh44gtktfFXgga0T0rcaOocSkqapUVKS5xN/X+kBoLVuV2HrmVNrfMC+FAIku3E8BCrwOk8p2BVg3by2lDt21YE1XvRgjfWfDevbexA75tNYhLC780iM233Gqr/9CTIc6f/mezxQ/s6Pc/zXfgx+6A+QzRe8+upnuHh8RTkKtmchdfcKs+kR/dDzxutvoVTA8vIxDoMdBZ21dL1fnPa9v07s7e3RD5b1qiaUE+7eOySJQ9IoRKKYz6c0jUSoniJPOHt9hXGaqj5lfTVihGVuA6SMcK5nJ2FlHDpm+wVjI9BaIqgIncEYyWRyQN2s6bYtbTN6E+i2Qlu4f3zokzJEQFf1TOcT2maLdA2BXLA/mxMEAUkcoPCGuKYumUwiutFw6/B5omSk60vicM7xMwmb8pShyzmYO9LccnR4j+12zVuP1jjbo+TIYh7RdQPH+3MEhjwN0Vr7a6XuabsGXMLQO6ypaVsffVVuGw4PD+k7w+rCX9u7riWMBJu1ATchSwr6vkHsZD9936LUQFFMWK4u/JTGdOQKcArjoG0a1utLZrPZjshJULKm7mJmswVOSFZXA0UWsS1XSHKaugGliVtvTNOmpa07hFAE6y04RduPXC0veevNFzi5taBtLG8++BK8YLGmp8j2SbOApq242J6zWC64vDplWqx55uiAbdXRidZfE6QPoQ+jgs36nIvNY+paIpWlGpcc7B8x6oDYKequZlNWKJWzri5xoqGqe44P7jAMPWfLM27ffh7BhPnBlC98/nXec/+9tN2SNx9eEccpWQFVJeiahLFvcNQM65b55JhyNyk+ODiirDrCUHGwf4usyFlvLkjSmMV+wunZBjVCb3u6diBtHVmR0w5bQpnTthfU9YaDvUMCkf5rToJPtncfG7S64sHSoc1IXwf0Y4t256zWmjzdQ8oSbUHFKXXXYTFIEVDWmstl7S/geka7rEB3xGFMlrXocUBRIGXvx5um9yJhBGYw7M32mE1mVF2P0RJjRgLpRzl9P1CVHdYFbKvNzahSKAnad3lOp1NWK+8ui+PQj8C1IWLCMGikMr5iCYkxPSg/5h4HQT6Z3ugux1HjGEiSFOv6XcXRQBwVaDOglM8Xy4uIutJ0ndelCTKsHji8HaNHr1cMAklVblEBLPYTcAHGTDDjwGq1QpKhRECWBRjT41AkcUwUJR50OkOaxQThjLxIqKuOfOpomor5fJ/zx0viOMc4xZtvnZPnCVHgTxTaNCRJTD6RyKAny3146tgZ2lKQJhltu+Xo4JCqXhHFPeOgODo4omv8pT2KE7Z1RWYUSmYMQ0cYZZwcvYftZoUMAqxxTLIFXW2RKG4fH9Prke2mRiDRu0iNxfSAtq4JYmi7LTIMECKg3DakaY4ZHXVTIZUjT2ZMC9+Lq0dJGiYY47xmy1gCEdJtO2azmY8GamqSxAGaINiN0o1mNp/jjKaY5oy6R5uRg8Wxlwcw0nQrH6fRdVRVw6SYMyumdLrj9OyKQDlmk4yq2gJezD10JS6CMArQbg0uRI8CGOj1KePQIIjYtppq6zvnk2BKmuaMY8P5+ZrpdEoYBjdaw1+T/Poy5s7joqd1ik8Q5zsCvi97rmvGUdyERe50brsneEIwuhvW7+kx+fW417mnweaONN1FFLkdU3n95zVYu/n7zRMLfBrj07Sr38Gn2cInzOo7I77rEeneYu8rwKRZLr9M1/nO7OQ7H7CvvNc7Ptp5sJSGuy7sXRZnoAL6tsU6s9NPPvUsO+OOksLrBp0HadY5rHUM44jadYObHcPpj4PvNLfW7HS43LDKgVKM40DfDx7cBdI/n/HmHQ9uNUlccB1pJPAu9OsFt88+9a5vIXz+qBWKUZvdmPqJHMJd7/PNyN1hHX6UvQMKzmpfk+cMxoCQDoRGSIm1Bme8ztYJSagkUkGz666Pv/e7Mc6hPv5xTv7hPyL49t/B7Tsf5Bd/5Zf51c9+mrFrcO6AN84N2kiUfC9Wb6HIYUwJ8p49panKFWMfEIUrEJoXv3RBnI4+AFrWnK4q6k3HweIucRjxxuNXMGNCmPjJRRR6CU0UK5peocKIuvOTlevPjQpCpvNDmmxCF2yYJZK2gjzKcKGPkJoUMUUeMJ+HDL0jm+S05cDY1DS6IpSS2cEhzgYYKQiQ9HXPbJ7S1yNtZUjjgKruiaKMZl2zqQ15sqQqHWmSsdqecnVu2N875vatOavVFaePl1TrN+j6LUpO6PWAExVVJZCEhEmE7gSHhwe89ciHsVtn0cOIMd7YI1VPFCRMixmXy3OqcmA6LaibNYu9GY4GbVum02J37dO0XcnRyS2u1iu6vsbQEog9kiKirlqkirjaLkmiBdKGZMmCcGa9lG50NM1Amgiq+hGPH5e+H3vsWK9eBDHSdX4S1fYV2nj2PowEGEUYpTx6fEG1Gjg8vtgd74C3Tj9HEtwnTAZG3ZDkIdv6AWUfkiZ7dN0F3XlJnM54fLHk9PGb3Ll3l+60QwWaoes5Pkh4c/0lVltvzOnHAUTIW48Grq4MQeiY1SFaN1jZs+5bXnnrCqc67t+/z2e++OpN2cSq/CJ3bn2Qeuh5fHbGal1y6/YBr71ygaXiYHFCpDKuViVN1ZJljjwtODu9IopbpAwZR0OeL+i6gYuLmrzVtGPLfD5ns659LWMw5/z8BfJ8xrbqMYMhz3x3uIpH0ixg0IbOPv5XngOf3t41oNysY5QaGMaGKI6xKNoqZuwUrdNo5zsq8zykbUaUi/y4eugokimRnHC+epPJLMIog5SGQM5QogQ30nWGNAuoy4oo8Po4PfoYg36w6FEy3y9oek0Y51jju26vrlak0QybKrp+QDpHFAus64mjnKEHKTKf8RfO2fYXVNuR+cKP6JVMgAakIc0LkiSh71uSiQ/8tdpigTjKcAb6sWOxmBNIRVmOfqwlQ/qhw9mRph6xY0oaKpxICdSWxX6C1VfM53dIkoL19gxhIiZzgxUjSdZTbxXlGhaHhjCqORT3sZRcXrSkuWG56ikmKdb0OAwXV76esCy9E7kdaoqJYjI3pNkxX/rSF0nyDCVT2m6DjmDoEl8VaXucgSLZZ3M5ILFIlZCECYqARRESx45yC3ZI2N+LWa02zPYLVssN3RBhbcJkmtMNhrHviKXm9OEaISxJNuId6TFldcW8mDNZ7DNcXRGnCXXd0lcVs8mMslrR9yOTPMK5GKFBioGEkdgaEI7BdSTRnFDVmD6m70GGW4TUTCf7bG1LVCwYzZJ8MsPq1GuRlKOpOtJwglCKMAjIMkVdNaRxRttWuAgC6ViuH95UdwoL0gWoMGQ+n1LXJVaP3tkaeEbSCQ/YY+XHM3uL92Dob6JbtvXaRwDZEG0ajJVkucPajjCLCIKAXg8M40ivL2n7AKct9jrnz1+TKKIAE9pdMZ/YAbS3A0aBxDqNlAprHCqQ+DHiLgja7egS4e9rjD+uUgY+zxJz89zOWqIowlrPvkslds8rfFi/0/5xZgfypN+vMPQmESkFYSgZR8OofeqB11j5ffTB3H5S4B3GCqNHz2DtNITaWJRi54b2geO+y9r3XAvhu6ef1i4+0XhainzG3vwQqZQHMl2PEwJ9cY4sK4I4uRnfjuNw43K9BnYCGLVn5oIg4ulfyJdrzrUed6y3P5U6HML5LvGqXiLE1LOPu/s7nB9hYVEq2I2Qn4B3rb2m2gfb+9uv47GwBhkqhJSIHWB0gl1Ht48jklJxLXW9TpM31hvJrplgrjH8zjgiUCglMcaD9uvlgL4OpRdy9zm5ljYInNFYM/pQfSExO3DpFxrSN/Qo6ZcBwgNkP+aH0ViiWN2ww96wY5FOYI0PhH9CkhucDUFC9/f+HsPQkX//7/cj+6/9Wg4vr7B/+xN85Ae/n74s+cVf/pcAKCGQwjEONT7zNmeUliDIMcZQTAusAesOGYaB935AIAOf3TqaiqaqSQpDNVoaM2Ks7z63pSUJBJfrMxaLBZePLxjGnjTPmQ3G62SvpRfWMXSe3cuSBSoQRHMYB9/fPQwd4M+HR7du7dIhRqr2jPnejDS5RRAItDUMg0bIhqHXHO/P6foR3VuCOKDvLCcndzk7OyNPDjk66NDdQN9ZIpHSrxVZniGHiNWjht5ETPM9uqGlqR2b8k2cM+wtjpGjJE4k7dqyt1+wXp8zthVFfhsRHKF4TKcNRgeYAazukcSkQUqkDMvLN4nTCCkGzs/XzGf7pNmUcqwxJiTPM7qtJBFzVBTSjRFhEJAGBdEsoqwumeQnhKFCWMFmXZGlIVEswY3osUPHMUmW0lQlUiWMzYhF7yZ3IWIcGUfHMAwIocAmyMBhhhIrLIOqWdW+vCAMcpS6R68F0+wQ4yqmRYyxG/q+pXclxoa+0t52pBNHuYo4W54TRjsfRZSCuuDy4oKuHXl8cYHRvsq5bQauLiuEECwWM3rdIyKHsy+hh5ZhGHj85ucYxx4ZCpp2YH+2x4OHZ6zKK5I4Q6mIl956FYwlyzIenV/y9b/pm6jaNVercyZdRJ8eEMaS3qR07cDl1Sknd56lsyOPyi8ylxOycMZydYpzgjCC5bplGHsSY9isOtIswLgIFzVYVxCEI11/gSJ/tzDx3QPKvtfetVoJosTQtj3tYCimvp0GF1BkOYEMwEniOCIvUqTMMHZgqC13797FOoPRlihK0M4ym82QgaVrBuJoyv5sitaa7arFiJYsne80FxVdr5C2QIwB07xgtSyZ5IJipoljr3eMIyjLkiR1zPdGApkwyQ64vLxkfy9jUtzh6GTN0MOtOxlN03B+NpIkIVIaquoxB4cLrB158NabpMkEKQOGwXFwcEDbtoyDphkaiqJgu90y6JYwDOm1IY4iur6mGrckcYFTPeMoOTl6D1nhiLOWk2fnSHlAWV3y6MEGa1MOjiR370vS7BanjzRf+twj7r5HsXdkMCamG0qCMMUFCfQD83nCer3Euh4HTCY5jpHTxw93FVInaNdw+3jCah2zf5hw9rhhtVwileNgfsx6vSWOfJxRFPoTiXCO0TiqbYmzmqEzbK8EfZPQloamgSQLCazxLGPbUKQBTVlxdHiH9eaMLMnoG8fYaEJSzCg4f+hzDyeTCZMko2ta+rpkaHtwDmn3EK4iChRhoEgmKUEQkGU5k2xGEHpX6LYdMOPAfO7jj8a2YzHPkTYlzp9hvblA0zGbzFFCYjPNZl3C4J33203LwcER61WFHgLCrPCAGoU2FTjp3fxRSChDoijwge7OEYYRm82aJElJ0ghshlIKMFTtGqUck2mBtmDKkWHc1eVFBXmYogJYrzYUs0Mur94in+QIpRAuJclhGC3amidMD4I/8METfv5uytDX1FVPkuRkWYyzLePYURQzqrIjiAPvVncV1gSEYo+qWoNrOTo6weJd/cNgqNuSNAvoO+2NE5khUBlFmrC3P+fxgyvGLiJOFP24xehrrW1BoFIP+DMfWZEXXjIwzTQf/qoTinSCtXB+WrJtS1568ZTRjUSJT0DYPyg4OJxxfHyb00ePyLKML37hNfb399lWG9L4gNPzxwymYzo5pKoqutZRTGKk9L+b7bYCIcjyhDSNUCpCjx5gfuPXfSt/4Hv/GLPpgviV13agT7P+az9C8Y/+CXrviL4fSOKYq8sLVqsrnr33rC9g2LGrAnh8+hZZmjGfH+zafjzb52san2yr9RmL+QF5NmXUox8XI9luVzeZk9aZG3mBc36sHYYRQnoAvxsSgxNoPZAkxa63e8eiWoEeBwTOAzjHjkn0I+WhH9BjR6RShJTeWX/N3gqJ0SNSejmINgYpFQiLEAHjWKOUB5DWWRzeca6UwmjtGUjlWcmnmWZtvEZTBcFOA+qw+Pt48OluAL9nNZ9oY/3aRnhnNwB2t6CwWONlR9ca2uvR/jXIrT/xd3HWMf2hH8CYXaPLd36cW3/tv+Y3/8Dv56VXXuThwwc+d9D6LFq/eDAEarfwUl5HLSIJ+AVhEAQ44RcZ4TghnbvdIsMbO5VSOAxt6691gSzp2hoVLRi6S+QgsM671a9Z51FrrlZbylmAc4Y48fE6cbjHZDbD2oi8SJjPYNQ9+3tzLs/OuXP7WcLYa8Mnkwl1XWN1z91j7yi2wuBsw+z2wl/rkoS6XILpsFZAbzFWkmcJQwVSwXbV4cyGvhuZzFOadks3dgQiJE8nOKdpm4YsWdBVLQEh9aqn6y3T+IS2soQJuEH686GVDKP1LFbXEygB1pLnKV0vIAjZnx9gjcSMDolkWkxp24YwihHG0DQNRe7PH00zIIQjDDK0DghUiBMaEVoMPduqZxgsk2KOMYaqbIjjhKraIgNJ32n/GVLG91UnMfO9PcbBsN1WZGFCp31CQp5NqKsOZwXjOGAMtM1AXy8Zdcf2KvGL0WhG32icCLFWU64a0jRGmoy2Hhh6ix4NQzRwtXqEMSNhmLLZarI48sbSPMZZAQQ09YBSAb2uMKZHCL+AbuqOKI3RpidQCjdM2ZRLsmwfJULMOIIxZHlEXW5oR82nP/9LpGrGhz/0Xuqxou4fMZ3sYakZ7TlRkfHSGz9PmmW0bUccpmh1BmJEhI52I5lPCoIw9L/HQqGkY71aMttL2azOyfIU3cVk+a+tE///GlD6E2lMlnngEscx3egZhyAMiUSCHTXaOqb5hLZtubq6Ik1jhLQYo8mKKdvthiCIGTW7QG4/+kkjv2LFOiZ5gdOS6ewAITzbkRdTlss1aTZjeVUhreXu7Sl97+OKmqYjiyJkUHPnTkocHDLbEzi5Yrtac+d+yHTWoYeYorjP2flbCNGT54av/7pfz+XFln685Kt/4/vZbMpdvVzK4f5tmkqyXPmRvHOCrvHi86urK7I8BiwqGIjCmMVejhJrDtM9mq4jTiNwlk1VEmYJtgsYhh0Lms7ZbrYc30nZOwjJors8fvyY6dzx3AcD5vsTzs/WWK0Iw4S2rphMfYVX3zR8+Ne/n81qSxwnxFnDdmtYzD7AZrOh7dYsZrcZ2oSToxbQ3L9zRCj8CVwKw+HePpeXl+TZBITF6hHdWJwT5JOU/dkEO4a0jWNvuk9Vl3TWIcaeKFDosWeaKpIk4nB65C9+RcokCYmcxNkIa0OcMUihuH/rnj8BCEk2ndF1HfuzuWdaTIpNLKMdyXegxDkN1hKgCBEMeuCZu3uslhtCFZKnM7QesdQkQUFf10xziOOEpla+AlR1qCjBGc/MFcUMrQefrRlmFJME7EieRUwGn3N6cmufYRgYuharA8IgIowEWo8cHR3vWng26NHX4IVhuDMbwDgaqrZiu61I8wRw9LWmSPZRgTcx6NWW2fyA1tQMzUiSZejWNzUNeuYvnbuRrAojwjggL+bsH0T0/ejD3hEUYUZdt8RFxDga+lFibEAUZiy350yKgDTZZ9tucDak7T0rj7QIY+jGnvv3n0MyEihH3zkevHlBECQkeYC2NTKQaC0Z+hYpa6IiwTpN2VS0NYxjRZpr4nRKP0y5OCt57tlnmC4KsnnM6OBo76v43Bd+laYy6CFieVXSVg8RciCMLb/+N3yIpu5ADGw2S6SUxAqcqP0irqsYzZrD/We5PC+J054kDTA2wdiYTXVJGi/41t/yHfy+3/sDN2DSWn/eqf/6/5PoZ36O3nmG0wMkR9O25EVOEHpW1EMWsQuh74njgxtG1TlwUvjF81OblJDEKcbanYbQ7eKyOqRUPqvR7pgS4cHaoAeKuAAk1vpRr5ISM5qdXjfYdXtbnLNIFTKMA8aOnoG09imAxo4N5MYhLa4/P9Izm855plgpb3x72+YcQbAzzLgdyyjAWYt15km0mH0y0sY5jPYLn2vjzrUEQUqJsU/VNwpxo2h4oiX1R9rrzJ9IJXAOZw1hkGCcw9gdA229fUfgmdjm7/w97Kd/lfy7v4vgt3yj/z1858e59Uf+KP/Gn/xj/E//0z+gbX3OsBl8bNW4MzMFIiBOfIqEc5Y4ShHCg05jDDKQWHzMUdfVO0mA8WN5fPXpMPZk0xnGTAlVwGx2HxUKwjcfIsUjxO5cIGVAWuzz5nZACMu4rgGLUJd86fWa+XTB4d4+XdMTBTFJkjK0A0kxIVA5ThouLy8BSxgKVutL0jREuZAkSWmqhkk+8Z3Ng2N/uk/fdyTxhIuLCyKVYG3DYr6HnFqGYWCyP2FoOnTVE8qQyXRBJxq6vqbte6SARTqhaWuEERzPj2m7ERVpVKAwRIxdy/5iHyYLuqFmGDuSJGXUA3XTE8gJs3zKcrkkiWKiMCSSinK1YjLJvak0icmSFGctaZwxaocKoB8147ilbhRFPqPIZ9RNyfHhszx+/Ji2bhh6KLI5gYqouw112ZBnM2Sg6IfKL4acprtak2XFTrohGAdDoxvm+TGTVFJVW/IiYexbnDY4ZVGBI448k6hbjbFeSpZmCdJJtDTekJoIxOBQYYw2iiAoGMYa3WkW80Ok8wbheJcQUFUN2TSj7Wr6UWKdIghABZIgjFEiZH8/5eL8kjAY6HaJIXowxHFCEO1hW4PQgiAoqcs1YzDwq7+65vbR+9g7knz+Cy/gTML7n19QVZp7d5/l8embtJXGjRVVc8nh0YKyaQnknDAa/DW615wcT7i4ekDfNlycC9IcjB3I0hmj2b5bmPjuAWWeCdpmSzHpqcqW0Vg+/KEP8PDBJf04onXlBdMiIArneEweMnaGXvdMspyqbMEKzDhizIix7S4yJmd0krGvfS/p8pzDA+/aCqKRLNtnu5JMp3Os1dw+2iedBAzmknI70laKvIi5uroiFDPaeiCaDTx+VHNwOMGMlvMzQ1V3jN2G+cyRZAWTYo/FfsJms+EDH/gA3Thh1C1HB/d3q9uQw+M7vP7KCm0lp6fnGC298cM4bzAJoe9r6nLNh97/1Wjds3/sdZuL/Yz9gwmnp2vSLES7lrOHhnJ7xcFxyGuvNSTxLep6wz//Jw1x2Hh9Tr4iCALWS0tRpGy3W0IxIVYR5Wqk7yRpuuDlF0/J04xq3ZJkGU1juTx9RJxIsDHLvgGxJYpCxsYQxQHTdOJH5G3H0HekUUwUBDjbEaiAUfkYoGpZIXQMjEgZ0dc1ymnuntxCCMF6W7OYHeMYdmyaJE1zMiXRpuF4f0HbDASBYhgbrFEMQ8/+dM+fADFM9/ap254sz2i7EqUUVdXTN62PJ3KGcr0iTVOETRBOUpUNQhrSrOD8dEUYSeLIMLtVcHL0DGV1SRiGnJ5vqJsOFQqyfIEbLO3QY40jz1Ky1GcfWleDG0mSgtlsQprGjOPIfLHAuoGmqTg8mlFvevLcr47DMGSVCqqq4uBwn6oqsUPIxfma2XzB7bt3eHR6SRhL9vYnIGPGbiTJHKfnl0gZEoYxmwdLsmKKkJpkkvD8B48pPr30QHq3DWNP3ZZsK0eWThgHh7WaYpJhrETIECVjgsiAKAlUjLA5UQp1syLKjrnaLgmUJMlSqqbG6gFahQoCPvu5FyiyCWkc0vctTVsynSx2JjlJ19Vk6QxnFgzuknX7Bl/9G74WPYZ8/nNfQkSwaVesXx95fDXy63/dc7z06E0idcB6M6IJeHD1EnW3QosWGe9xcLJgvkgRLkUQIyWcnS1Jkj0Gfca2LimyBXW/ZbPZImTEfFZwevYaTSPJ032MbBn6DcblBMGEb/3ob+f7fu8PMZ/uEb3yGsZomk9+kvETf4/1Zz7HYm+GkupG0+kzNjVJMr1xqwII6WOdhBAEQfjk9h272PdvZyiVCpAq2OkL/eP17vyW5wVPXD+eqRuHdqfBi3HO7jSgDt+81SIkKBWirUY4sWMxHUaPhEGIUsENq2kdKAdj3+4Y9Ni7p51XhiqhGPWwc4ZHN8yZNz8pjPEGmEj5yB/7pJTH5+SOA1GUekDp7M0w/FouoJS80cVe6379vprdMbtmGZ8Ktt/dfj3m90HvT/S1chehZLTBOYkRHugrKTHmumlI4N58wPaH/wLFn/wTxL/1mwCJ/D2/m/v3n+M3/Iav4dOf/iVPCsQJ4ziSXINva6nr2gN8YOy2aOuZTuAGQEoZ+FKDIAD0Lj5OMeieJHEo5U2XzmniJGEYNEk0I4wSROO/v0EQsZjd5/l7h0jpEzKCQGL0gDED2nSMfcVy/ZA06SibjigKqDYtcdtgXc8km4Pz5sC9+S2Wq3Mm84hQCNLUmxcnmY8y65qeLJ36xjjlcDbwvxXrUIFjPpthrSGeKlTgaDtN3w4IGTKZzDg4iOk7TRoXJGFIGAlf1OHAxgEgSPfucRLC+fk5i8WCJIz87zoQbKuSNMpRKsQNmrHpcIElkoo4COiEJlKW0TSsLpcURYFSAiEFWvc4HH1d49xAlixotx3FNGcxOWRoYW96wLa6YD5dUJYtOrBgJdPJHKVCutF7HHy7nCHKI6pyi5SehdbGx9c1Q0m9rX00n9U4JwhUuDPCKep+RRgFSGmIggCpUiLlpTtSOGSO1yBGCcPoF5vj6BAERFFMgEGpECUTzOhrgOezY/q+RsmUWCYYJxjHhijMiCREKmJ5sSGNZqzWp5wc3aeqKgazRg0GSU6apkg1MlW36ccN0kmcNrzx6oucPkhRMqGsHtPUJUpmVFtF3VgPik1HURxSV/Do/IJ5HjAMEQd7hxjdEIRTIpWiopCDZ2A62ef84iF2tDRt9G5h4rsHlO977jZ11dP1JfNZTpJkaF0hbEsSwXQxpesGqqph7LeESlA3W4QQ5JMcZz3w0NqhXMBqueTo1gmjbhn6XWSLsMhAkQQxV6sleZ4zmpGqXhNFGm1D0jAHei7PLxmGjuWqIwwC6nZNEuwz9A0qiKjKkSBIWF8qVusNGmjKKdNZwen5JUk8Y1tccLmMcaJjuXwNGYy0jSaNRoQIWW0GLq5e4/JiSx6lbNeXJPEEbSXWSFQo6XsflXBy/8NIUqyxvj87mKEHy8OHG/J0n3qz4fRNzwKMRrM6zRl6QddcYs4DNmVPnm+ZT/fZXiUUWcHQC9AjiTqkK3v6sfRGn0AhnV+pbi63/kTXah93NEpCFVGXGmENUSwZI4U0klgJhn5gxBBFMRrHydEBXddRbVvGrmexmGCd75sut/1upNvS9z1HxwvSNKZtW04ODqi2I9aNDP1IMYsYW4cgRFifiRkoSaAUfWcRwscQXQdXO6kQKiKOBVKEzKc5623NbLrPOI4EkdqNWAXGNoy2xxhFXkxwxCRZzN37J8RhhLEjQRJT9x2vv7nicP+EKAqou5q2DYnGzLdKxAl12+8Ate+G7/oK5ywPzy6ZTqfeJSth1I44yZjNE4QMSbMcoQR1tUKXLVkek09j8iLk2fceg11j9BGLvRnj2DM/DGi7hvlegTWKulUUk4R06jNEl8stURBQRBFRothUPeen5Y0Jxl+4IY0T7ABCGdqmZzZbsFwuGceRvrdUZcPBQcqoe4pFj3ARtjesyhXFVGHVhsneDDsaiiIlziTt0O30opLZYkqoUrTtUElEFuWkRYazEW3bMDpF04MIt8RpQlmW/NNf+CxhUGBpWF5c+qgYecVQDfzsP6q4feeQi4t/gSUmifZxDCgXEsaC88uaJJ3R6w2BimnrDut6BA7NCmMhTWNW5SXYFIfFGckbb1wQRhCqKU0/MOgNcQK3T074nb/tO/nWb/y3mU/3iV55FWM06//yr5H/z5/k4euvewAXHzMO445VU7R9h5COOE53IEfirO+v7rqaKIxR0htYrufVetRvA/sASTx9ypDCTgfp2a8oSncuZj8ylgQMY78bVQc7PajkWsPa981NMoW11reOOR+xo8eBIIm9nhFzM56/ZlClFAipbuKCrolIY3wn+I0B6NrjhGc2te5I0+wGEF4XHRitcc7cAOlr49E1uLTWs5feqe142lh0DTavQdq170ogsM4glWdSpfQaSymemKyuda/Waq8BdV7rCRKj/XtRSvpwdSdp/tbfJvqt3+SPwdd+Lcc/8qN87Q/8frq255/9s3+KEsJXygLDsAOGQYwefHh8HCWk0k8vnGQnUdBe87tjgtM0ZxgGxrEjjHzOo6/P9OA9jHx94Vzn/jjcSJwdTvWU9ZJh0MRhRNcZjBG7ggVFkk340Fe9xzPLwu0mIyVV1dH1G7pG0/UNbbdGyZiDwxmrhxdkiY+8Oz09ZT6dkGUZ2/Wa+/fvI0KIsxnTwrfUhZHADIosztluSkRkCVJBGlqES3yEW18zjA1ChT4DM4hpm5qqrAjDkGwSMw7Oj6Jdj+0N7bZhOl8w7PJI4yBnvV4zn2cEQcC9O89SrjeY0WLGATc61pc+2k3XPdtWY60myVLCMCVLE+ZHtyk3hjBIGbORplqRJAnz2QHlZsV+MWW77jwQ1AYVxt64WflYoihId3Wwjvl+QbXeMPQ9fVcRxr6UYxgaiknka4ydIYlCnPCfjziOIRwZBg9wu75Dj956mSQ5Q9czuJYgzNGj9bIqZ1FC+GzoccSJgG27IcsShBjYrGuGviAKE7+gZUA4RxYHNO2aSX6AEI4ijejahuPDu1TliHMB02yONh1tU2F0SxD3uP6AIBhBdBTpHRq7RSqLo2axWNCbmqrSXF00LPYmTOcJV5dLqjKk7WusXbA1W9ZrwcXjkuODO3z28pL33L9PNou480zOC597jfe996vRWvPo0f8fmnLqylfb5W6PdBL7eJoo5u5dQ5rmrC5LZgf7PHPnLhcXZ4RxwN5egt6tmDebDUr5uIrbJwfce2bBar0lUAFtO2LtiDUBLujBKvL/N3t/+ixblp73Yb+19jzknGe858419YgG0A0CIAjQHCVLoCM4gFbYJoRBFMMRsh3+IIfDjtAXO/wXOCxTmATZNKkgQVESZYclyzRFChwa6CbQ3VXdVbfufM+c857X4A9rn1PVVpjRCkum5ahVUXHPvXlOnsy9M3c+633f5/ckCVEoUSrCjaiHFBtB53dsd2+Yz2cIMsZDnyiWbNYhbSnoTE0QKYQ5pKsNnVzRNS3xSJHEY1RbI6zPdr2kKgT5wJX02/ac+Xyfulbs5DUXF1dIERBGHmEUUZcNbz9+hycfPePk7n3W6y2Xl+dkecJkPuHqYknbnruLqa8ZDw+oyhrfT7jarOhqTRJ7hGGG0WPKssC3IdnAXVj2D+YU2x1dWyO15PrykkFywKYsiX1BFMMgT5nOBgyHQ1arNUk8YLXacHl5yWSUst0a6tYQZwOyuWB5vUS3Em1L8nyG0TVxGHF+tiBOIoT06CpDIGOG+QCtLW1TkeUBugu5e+cO2+KKpt2wv38X6TfEUeQyWaOMk3t7pLmlay2b3TlG+YT+hCxLqOoNIFEa4jRiU24ZJiOXR6wUbavQyqVgBFGI6ix37xyxK7cgG6wRLBc78nwMMqEoNVEoqLoNxmqaxs3i+oHFoti+OceKDaGf8fJ1jTIFg2GILy3W7KjbgtFoRNEUbIvaiZlasdttGI4GhLJjs73GaEEYxtSeR3FRMJ2OuXr6ArRDuSRJhBAe59dr8jylaSq0ecn+XsJkNOPNm3N836fY1Wirefb8tRPTnkccp3QtbDZnJIlkmI/RjaSzlmK7QwU+dekBipuIO60kUZQipMu0bWonaG4QWZ4vOD8/dQkwzxVppLBc0FYaFeUEeUCgLK0yjn3ZudgwREyepWy2K7TVCOk7V72OaVqFMS2dqTDSUrUdvujoqgQ/zpzJy5YEgUceTfHFGKNXWG1IMsvl5Tltq0iTjLpcYmncLFTjdvGnX7/uE6Y8FwOXpqSRIUy3oEdEwZTxVHJ1USLEFOstiVIfQYqQIcgSbRr+2B/6eX7uv/PLjIcT0iQjfPIxSimK3/g14v/k71DWLVVVsr9/4Awu9oZ86Krl2qheaGln+pECbRRtW5OmeS+sNEL2Zo2m7OcDP1me53bvtp8HvGFCSinwetOT4EZYWYx240JSutnKG5e9E4YdUZT21UB5WxU0WvVJXEE/CtK3gIUTuZ7n+KYOfg5W2NvWtLXOWGMs+LdufScMm6ZxUHLP56ZYesOodOYgr58dNLclWiEERhm0abHW/5RT3ynHW3HZC0shXavfGHOb7nPLaeyrry55B5QxeFKgeyHnEFLusVvbm4v6Su/t8Xz+nN2v/jr5L/6Cc4//+Z/j+Fd+g5/5V3+ZOEn4vd/9XWeYtJY49h0GyfaGJ+tiSj3Pc0Y2A9Utz/MmIrBDKXtrvCp3vehvFAIPKX3qoqNpC5LLxe2m5ObxWQVBEOHLgKatHOonkShV4vkSpQxFpaibT3BhURgwmeXADK3pH49AdWBsS2pAqRalOoZDn8VqwWKxQJuO9bc/YjhKWC6XGKMYjUZYowikR7HbcHJywvK6ZjCMHZ+5K2hLt0H2tSSLI6RvsUKSekOSJOjjkBXGVBTFgvl8zr1793j58iVBkIAQVGWN8CTz8aF7D5YV0+mUeJpTlqUzYwYpF5dntE2NR0QSJUgJaZLStAbZBqAtmR+66rISxPEEpCTzU9btNUHgI5VlMsyIoojVpiDNE2rfVWk3m5IkcaJyu9wyzEdUlYP6e9ahqZIwJ81C2qbG9z2apu43L26TZNAM86gPwjCM8pzAj9huXIGsLTsGSQQahsOUrqsR1r1nmkrT6pLAtyhdkWUD9g8mrNcbvMAxmI323cZGKiaDDN1phIUw9BBRiOo6ssxnu2noajfuNBl4NE1DV0cU6hWqjEizkNVm6SrlyscLWtq2cFi8yPGry3rH7qwgDDKaxuL7AcM8RwYFm6UlCkNUt0Ypzfe+9z3yZMA/+d0d202BsBAnIYNs8F+9oFxcFeSDlLJoSBvTX8QsVvis6oJyWxN5GbtqhzACXwZY4TMaDjg/v+Rgfp/F4pKDgzFZHnJ5ceZcT7Uh9APyPOfqcksY+AzyIeDTNjs86ZNlGavllq7pqEzJ3sEeVgtCP6LSGrRkf3bCer0miR9R1Svq9orxaI6xCXk4xo8MaTpktylQbUaSbIEY0VpMI1GNx/XZEj9wzvJAGJI4QeAxiFMO96dkWcbx/l2SPOP999/ncP+gv3AI6rJiOh9RFA3j8ZC2EaRpQtu3mm0Q4knHjYyjnLPzBtV6HE6HbNYdu5VhnCcEkaFYh+RhShINidMBy+WW+XjCZDJiPMyxKE4e36OqW+4fPuBJ9JLV1TWmMuxNBUFgybMpoSwYDfdYX4GyFVEcMh6OkTbkzfkb7t+/72ZXPIGnY7RyF+9BNmWQ7XPn5IiL6xdcXJ5Tbn32DnKHbUjHKG0IgwRjdnRdS5SEZOmQJBwyncx5+mJDUyvCJGO92xImIedXp/h+SBzHWGmwniUMQ5TpMFZwcXVOaxqUqgGJ8H2W2wVh6NNpAaIjDBWmNr371aNpN7S6xVpDPggJQ0ux2+EZ19KSfoOwFfkww8iGu/fnbNYly+WG+WwfRMSNgBsMMtpW0TYNShv8SNOaFfPDzGGjrEV1NXk+JsontI3B4lAjy5Xm4vKCOExQSrv4SCAIY1rVIAjZrCuUguFwTtdWzlRgJB4RhwfH1HVNT+S5bRFKSZ+IkBGHbhdfVWuEhbZpCYIIiTOLSFJMqKirNYPsAaZJ6GqPzeoVnkhpdAGic9w6P6MqajzfUDU7ZJcgRInBOVB9maN06KptxqfuagSWroYsGpOlA7epjC2XV8/YHz+gUzVWLgmihCiZ0jaG6aFPGo2oG0HbuCpA4HcUuxrPk4SxhzawqxR64+H5a+JIs90tidKQYnuOHyjywcR9uJuKeweP+Nk/8a/z0z/xJxmPZp+Yb7Si+s1/G/Ef/l9ple5dtNy2tm6yq62Fpi36KFKvZz8KPOFRViVSQhiEtzOMWLelbbsagfd918UwcOaPW+6mMXS67Wfz3EylFa6Vq1QHwrp2N5+ghBCuTR4GHqEf9a5s6Yw5wvEspQfS87kpPRpr8IUTPMZ0BGHet88/aREb7ZKzXOs26mcj7a2bX0oQMuhd3J/A64122CYnimX/WN0GRwon8m5RQT1aCOtmJbWxfXVRYo1EIkA6USTxPhHDOHqAwOBMORIhTD/feiMaP3HdG+2qlTfVScfadN/X/NbfxBpD/ku/iNAa+ef/LAf/+1/ha//KL2KN5R/+9t8jCNw868173LW15e0G98ZsJYRAeA6b1HVu83BT4bRWOBOp9bHSArqvCPuk2YR40yLFJ68P19o3hIFERi43W1hQuiXJc+qmASRBEPZkBeMMHEa49r6WCKn7c+y5IAnrg00IAxdNOxZ73D15C62725jTuhLcOQpoW8WuvHRehXZFbMYs1prL8wWLpSaOHS6vLGuyNERaw3Q6Zzid0KmGMIjpOhcJ27Q1eZ4zyD2a2lLVW+bzOVGUUTcNe7MJm2LnRhOExHTQVuoW3YeGOBxwfBAgrGazdli4XbFidb3B92JCEbHarElzjzxP8QOPurIMhhNk67E/PkSZjsP5gG25pa5rfARdVRPIkOX1NUmcEQcRxlcO02U9Jrn77F6slmitSVKPtq1IQxd/OZzMMaZjtdmQhTnS68AD62tQhsC3WFsRRxBGHpPBAV1rCYIAz3YMRgll0TJIhjAYsC1X+F5I1XYI41FUJUkSY6mp2wXCjJBCI6VFNxB4Pvt7B5T1ksh3Tu9QGu6fHNA2Gms6Do9GxHHIZllgvUPqpqDpYL1smc2HXF+t2GwU84MxV1dXeJ7nilAzzWZT0OiG4WCCUiVNE2NqhR84bNhm3TEdjfGFT5IbBuOMURnx9NlLAjkgDP/pSWGfXj+woByO9pHCx/OWDPIxi8UCREtZGKwwpFHMxcU1g3yEaj20LwmDmLNXW8ajE/y44sGDx2xWa149W+LJHBENSYMAXRfsNhuiQBKIhDzL2K5qsmjKYvUGXQm8AITxkERsVzWBH6MaRZYNyVJFtZNMhwOMrcmiPTabDZNBzmbVYGzH4fyEi7Pn6NqQJB2D/BArFcJr0UoQByle0LqScSU5nqVcL87oVIFVcH0RsBAbZABnZ2d4CLIkYbet8Dyf6XAfKzckQYrtJFIFbFY79mb3CJMWYQ2Bn6M6w/rqgv3JFCFHNO2C2fiAO3umF0gtqYXhOKSsDGFsCb3UXUwIUY3Pxdk5l94V9x7c5cWz10Qy4tHdI9oDybY9JQgmhNGQOD5C1QKtzzk8eszefoxSmun4iAcP73J2+RoQ+CHUu4QklgSRg5i+PnvF+fVLttslRiWkWczp2QXFTpEPPWbTI7bFhiAuyPMxXeez2ey4alYs15fEiYcRPm/evKbWa6rKUhUlURSx222+L17RtcgitG4IQp9AOvd02xXEmduNG6kIZEKeTmhs6Zil7Dg82mO5FEwmFWE4ds7j1OB5QV9RaknjAZuyRusWrEM1RFFAUW6RHkSJT9g1WFsTBR5aQxznKNWSpSlVVTjHne9MGXVT0bU95y+Cy8Upw8kYKxqKtiWQKU1X4/kh5aYiHUZU2wbpl65VvSwRxjIej1GqZVvsYDfCCwKU3nDb84a+ch8iUURhRFmsmU3G/eZpQBSlrNsCKUuk1MRhhC8O8LyOonpNUE1JkoRBPmS9umA4TIn9AbpLkWFEJwxFXeHriDiOaZWHUoqq2qGU4nD/mOODd/ndb/5nHN0Zslhesrc34c3rM+6evMXV1QLTaoQfgRHs7e/RNppdscYKy24DpfDo2pooinpjm0OEaa3pmtbFbQY+bVcRRxlGKuJ0iOosSWIoSklRdtw5uMe/8Mf+ND/9E3+S0WBGmubfZ75Rf+WvYv7W/4WubYnikMWyxPO8PlnGVXal9OjaFq078nzyyQc/Tqu1TU0Yhgghb+cisaCNQeuWMIq/77roSe+2knhT2TO6I4kHt+OTTiFJV/XzZB/DaD4x0EgPZVp8T/YObAk9B/JGJAaB5yq6RoO4qfb1Yk46BJTokxQszljjUne627a+NcYJPMQnrf3YcU8/qby6+UytDUEAzjxzA1fsk2x6tJFbnwbpi97ApJ0MlJ823PT3YK0LpvgUi9RVaR2wyFUo6SujPcboU1XQW26oveUKIYSk+Hf/OljL4F/5ZTAW+ef/LEe/8mv8xF/8ZaSA3/n6P6BpqtuNhXPYCqIgJBzkGNzcXdM0lG2DL71bjNVte966v7dtjdUWrV36kFItxhj2Ag/DLYjSVa2NoS7rT6UWCXzfczicNO2jWGsCzyP0PLTt0PIGseVDj8nC+lRlieeFGHvZHz83z2/bAOn7eD1rV8oGrVs3kjO4D1IjxT0QTrDefwTa7NjuFnhS9kEXO9bLJbsuxSwb1w1pLjG2JY5D8nxIsdUY0yPCcNW8uq7dn82WNA7I8hylBVmaMBzmXF5aJyj74922NVkScSqvsdaSZ3sopZAyZLsrefToEVGU8ub1x3jS0jYNL59d44cecT5AG8nZ6Sl+kLBaLRjPBwzzIdeLJYN46LpVq3XfBZDUVU02yVlcLrHCI08HqK5lEMdEkYckoOsa5gcz9mYjtpuaugromo7ReEggA+7du8fZ+Rv8yEe3DUIpbBIymczYVguqck1TW5Q0jEZDTJMRjlLaZoWVhiSOaLqaUZaTRClBFFOXBffvzZFCUG8tYWh4/NYjrpdLBumQsqyRwkebjjQL2KyvCD2J7zfE4ZT5eMJonGNswTe/+YxRnpBGPpNJSBzt8Z3vPGM232e9Pmc8usPl5SWeD4KIRp2SZSO0bii2hizJuVy+xBcpdRuSZzPqSuP7MddXKx48PPlBZeIPLijD0KeuFKNxgtARtgsIoobpcEhV7YiCAJl6dI1iMEgptoZtc0WejbDtFuklVEVDVyn2xvtu+LnVRGlE6AvSaOhmSuIYqQMO5xOuV2sEITKqyLMZul2RRiOiKCYIfHTWYHVHJFPycUar1lgh8P0BeZoxGPlgtmTZCA9JHh8wSC2jQYjnQxxNWCw2PD7aZ5TuQ1izWF8xHA4wtkCM5ijVEWcp282ONHc5454J8XyP3dKJqSQJqKqI3U7i+R6qAZ+WUS4Z5DV1KQgT4QZ7qRiPnasa2zAf3eH0/GNMHDNI7yBFx2yeE4Yhm80L2nLMaOYRB25Wa7U9pdbueH/9d94nSX2iyCMIxwymKd1iQqcNQmxBKGrVMJxmrIrnvPgdy3CYk+YgPfcGDuKA7aZGWugan0DnaLNludhiKBgOJoiwou40URwz3XPRglera5cyU0NrrsmyAV4UEnoWvA1X1xXX10uED83OMhsNCI8OuV6vGA0zzl48Y398j4IdmhwpDE1dgh7StK61EMgMF2s5pGtqkiRhuytdNvcwR6uAq+uGyE/wo2O2uwZtBMW6Aq1J0oTACyhLaAuBQrhEHQVZNmS3WyMlWB1iOw8tNQiJsQJVuXbUpu4w0qPblWjVkaQBddMRxiHbckcapwyiFF9FeDahNg0GQxBI6nqHJcBnTJZXGAJHR6gbvMCy2145d6ReUxZL/EBjTO5aiTgt0SoFoiMIxhT1ktDLqXeCPM5I0pSmrbj7EFQ7JElDrE6pS8lgkHG5kKiuBVHT1mvu3nmHKElJopjnT15xdDTlfLFC64DZbMqzZ89AGOLA4WXSdMj5xQWL5ZrZYUTVlmgds9ycEw80l4tzhKfZP3jMrrhGa8NyVWCNYDyeozrL+dmSwdCyNzpgvdpitCVOAjarFXmeEyYRvox5dfFxv8EzdK3EEyFpGlLVJWHoczA/5n/zv/w3mYxmpMmgr0peopRi93f+U8S//x/C81OUahC+RGtD11UMh5nTH9pVi4R0fM0o8m8RPBjH09TGopULKXCMTofuEZ4z8fhCEATfP6BubhBPtjeT9PnaUvq37eWbL24wQoK+Pa1FHzdosKZ2CB4Lwhqssa6CYVwrDuHdGlcciR6wjtagkSA9rNbQt4+RrsolrEUbj0AIF+eKRfoC3XRgFJLECVDUTacaZcGTijBwbuub+U9EX7HFOcO1cW17Yd3cpcVitcb3wZmGBNZqPCNByr4SbAk9ienZlhKBdcRzlxJuDMZKhOcjjHH3Kz3oNN6tEJUOm9RzNa1xTvPqr/8NQDD4i7+E1QLv5/4s+3/5V/jaL/8CbVvyu7/zDbTwMcpxHeNA0nk1VbtDK2dqQvoMktS1mJWi0+7kudhLQ1u2BH4M/ViBal36ltUajLqdNUWAkIIoihkMQwcDby3a1GA8JBrVx376nofqNFjhWtzSkMQZXmKxNnAz5X6A6nJkECJM4mbp+7EC1SmkdcYWI13sq5Q+RVOgewyUlBLbG5wCP0IIQRKOQBiiyCfLJ+wfPkQp9xzziQORW6v7tn9H3ZUgDEXdEvkB9c6FNGxWK+7du8duXRIEGj9ziKqm7QhC54cwSpNlDga/XhfsipLJZIa1mnwcOzRTFNO1Cr3ZEYcD4sAn8mr2Jj6r7YZAhsR5wi6U5HnO3nxIURREMsDTDteUJgltfU3qTTi/OifwM+qtoi0UkphOeajOUAj3OT7Zy7laLbA6RQmIPNcxGw8TQt/n3p0TVsU5e9OMwAvRysMvNbN7hxRNiG4Me9MjKrNiu21II4+D/ZyuUXzu0UMul5eoWtH6hmAQoVYBkYBwUNM2HnvDfabHFdHIp9FLTu7NaIotk/EBQnpsi0vCwDIdP2ZXXxI0MYMs5OLylDiZok3Jw/t7pNmAly9f87n33qWqlhSXFeN0y/Wba5LhlD/w5bf58HvPGQ4O2NmG7arCSkE6DqjqVwznE0wDOmrZNSuSLGG3bpkdRDx/9eQHlYn/JcDmyxXGQD7IqcsVQWgJwoQ0HuMHEXHiOa5d1yGFJB/W1HWK50u6xqK1g3sO4pQ0jNntdoS+j6c1WRDR6ZYwdjDs3aajqdfEoeX+3TsUuwZ8xcH+Eda0SM8ShQFSOrK8aQVxJInjQ4yWbvbL1tS7iHt3TliuLvBkyzALkSIi8ATWKLrGMJtMkZ5htSjwQk3XgjUtQrrEhiiKaduW2EtYXy2pK8t8P6FtPCwF9bah2jh39iAbIzwDQtMZD8GAXeFaUqFJqOotWjmHpUs085mMBhwffI62rFhvrhHCEk1mrJYLvECxtxdgbE7bdjSNYr1uAJ+6CJntOyL+ttjStCWLVYzqBINhxtW1cxSGsaba+chQ8fbn9uhahdGObzbbj1gur9lsQ9I0duiZdsV8PCMdCa6va2RY07USbVtQcL1pGQwmVFXBcrMljjKCEO4lI9caSkoWlyVZMiefuItwPk5ZX+/YXim8KKBWHcngLSrrxIM1sNwVZENB11nQHmECGNCd4PL8jDBwLZyyLEEo14apY6IgpOm2XF9tXCvO85hOjlmtVmw3JUEo8TxLXSuktFgfRkPHcxP4NHWL0D3+J/Zx83UFfpRi0ESBQAtDXSui2EcLQ9M1eJHfm8wc2LrVBXmeo1EuiznJaJUiSWI2uzeEckQQBW53HyqGo4i27QiDuJ+x2WKNj7+pEeJTc3pWkyQJaQowRpiIMIwI/A6lWgaDAXE8Z2OukNJQN1uM9amaFmMbgiCk7TRXl1DVb+had99Gd7Sm4eJqhxdGXLz+JoCD8W4MSTzkfLVF2x1+oKmrEelQIkRIHByy2S6p6iukpxnEJ1htKHbXeH4EJmK3eU4Yu+i+7Sbg+vy6B8BH1HVNGGQczh9weXVO01VMhyOkb+mMRdeK+SynqrdMhwldZ/kLf/Z/yJ3DB72QvOpblR27X/9VzN/620gZAr0hRYDqNFEkneHE3lQgXWWr69yMo++Ft1nWzoTR43e8T2YDb6pUWnUYrfGT4Puui66FLG4rZ9oogjDoK1rm1tBirXE/H7hZXJd084nzWMo+17tvycveCW20RquOMI4+cVkL01dQFV3XIqTE9/zbip4zEkmUavvKkN+je3qIunGvW9/3+7i7m9fbTUZ3Q9BnjAvpqqX0Yk4p66ql9M5oe+Mqd+k7npRIIem0E68C+yk4unEpZ/3X0BdjLRjl0ENCSKTw+oKnwBO9SQkn7q0x4BuHN7otjLrf60lB+Tf+OsKTDH7pF9Ha4P3cn+XwV36dn/qLv0QU5fyjf/R/QwY+iZAEwlA1HdKLMUiausW3lk4agsBtKHzfZVSHvof0fUIb0OEy1o3w8PwQ2Z8vY5pb9/gNBqkpG16/2DEaTfoRIYnve0RRQtd1t/GPUezQRWEU0mrleJnQt7sN4OOF/i0T0+vncqXnIaT7PiEFQkKe5/0MqkQGfm+shJv0o5tzoft0JWstyhi6tqZpGlprGaY5Hh5aW/wkdxsTrQkCD4noTUodg+E9ju4attsN0cTNlNO5cYeya7CmACCOQ9brNcvVgskoo2taNqtr0jhBSet8EkohlcUGFUd7U4IgQOA53VFMqBtnmjk+zrk4E4zyCdX6FdvFjoPpIV0dEacN0qRYbYhJ2CxWpF5AREAQGIrNJUGe4lUpNlS8+PAle3t77O/vE1iPD578PkoZxtkMXXZ871sfgK85OjpikA/JxlPGc8npdQ2Rxw/98DsIFbFanRI/CBwu8eKapekYxbC2HfP9GUkwp6LA5gGTQY6QY3ZNAXLFZG/A9fmK2eA+NDu0WXN1aXj48AvorsSIBU25JvQT3n64T1l0nISPUbpkmn+eJtwwnAl8X3Kw94CPnzT80T/2h7haP+Ho4AGSEW+9fZc43OP84gVV41Nsr3j07hHbjcQXIVJHZBkI2TGY5qyX18z29hgMU8L4+42I/7T1AwvKPAtIwpxyU7qc4yglH4ypa0eobzvLalkyHucYZTk6maIbOD09JcumHB8esVot+igkj7bVBJ6bjwwCn/Vuh9IdkR9hEoUnI0CShimVOWM+mtBULXVVMxpk+F7IxcUVWMF8fMRk7tFUPq/fLPDjDVHosTc/pu22hJ4k9CPC2EeKkOvFOUkqsSbAtIJds8OPIja7Lb7vLkx17dh9m/WWMPdpVYCMAoZpRNFdImQMfku5W5GnM9ryFE96VDUY61GUGywt2+2WuycPGQ4yVCdQZkNbS0QAbbfi/MxgaQiD3IFNfdhtzzGy4cGDe2TpiOX2mrKAKBkSZwmL1TVJlKK5JkuG5OOExdUWKyWtXbEtDdLTdHaLp1KsLMnzkDS3qM5zCUJtSVXvCCOPh7MZysaslhuE34AUBGHIbH6A50PkH2D8mqapSGtFWTSMJzN2uwqjQWnB7/3eNxkOh0i/wzMpVbklzHyU6lhcrhF2iDE7inNJmjUMBwM6pQiyBAhdcL3e4Uc5TakIpHI52FmMlA2xN0GL2hmGlIPGSr9F2R0Iy2JRkA8i2tanKhVBKEiylPV6TRg54RpnEVmW0LYdxliMgeFwjCdjqmrHbDZlvSmJopTDw0POzl8QJBLTaKazEWVZcr1cMBjkNI1zwDsDzo40j9gVS4yWpGkGwnNzkU0BIkIYNxDdVpo0maLaFt0Jykaj2ta1HnVKGAIU/btOkOUjgtCglKbrNNZWlI3gYP8Og2xMud1wfbUBm1FuNs6tahR1U2CMYrUtSdOUg70HdFpxdvFd4tjH6pj19hKjLakY4ZMTRu4DKwpCrHYfPqPhDG369J+FJQgFF+dXhJHHfHbM6esXRGIDRvL2wx/h46ffZTRO2KwW+HZI4qUEgcLTHZ7o58NUw8nJEaq7QnUL4mhENhyzWF8RByHROHLcz84i0fyLf+Ln+MM/9SdvJwG0Vmz/zn9C/Vf+T+inp1RVyd7eEYbWaR/p0aqyZ0468LbF9Ik/Li868OPeZdw7PqSgbdyc6Ce8RvHJ71SqN5h8/wzlbTsWZ4hp2xrf71OH7CetXQdHV1jrfl7ctrMFVjuxZOwn6BxjLcK62UohBUIEvdHFMREtlrbtsBgCz7m/tdG3FTLbO7FvzDCuVe4EtUD0KUiyr6T2yJ8eJyR6Iet5ETdB7De4H2tV34b18YSPvhHk/e+UfSv8Nifd2tvbwGKNQimB8Fyv2z2u/neiMVaAlMi+EHuDFtJolFZIGfVCsgePCxfHC7oXuRH1b/1NBIL8l37hVlQe/OVf5cf+1V/k9OUTrpYLqraGEKazMZtNiy/BGIWHpcPNK5ZFi9enEEnp02mF9D1yKfH9ECu8vuXrjCue1U58f+rFEfgBs9m4NwFppHRdB2MMGENZ7gD6iF9J1zX4UYhqavwkJIz8/vWnkcKiMEgZ0HQdcRg6s0nflr8B0ivtMt/DMHQbFyy6fy1q07kqaxDgSekwRloTeB5eHEOW0eqatnXXtzyKkNKxeP3AcxVZ3yOOx8jAAdulH+D5IUJ4lEXFbrvtOZ+Wtm3cHHjTEIQe86P7JJ7Pdrul7WqaskDtdrRNQZqmhJ5Pkg4wSlN3hq7VbLdbfN9nNptRbndcFs5xHUQNP/pjX2a1WNM0DednK7qu4XC+T90uuXv8HtLThF6E0T4nJ1OeP39O4ie8evaUbPiAL/yRh/y9f/B1vvuND/iRr97j8YPHzAYTLk6fEfoB02mIHxl0UxGlMZmXMx0cUGyecXA8IQo8kB6T6QFxGqP9DQsm6FgyyQT3j3JaL6CtWvx4ysX1BfcffY08bHn9/CnpKGO7PWXqD8nkgGACpx/WCJvz3e++z3vvfpEkucuzpy8ZJSN0YxmOa5Jwj6LcsN1c4Qcxtos4PNrj+cvvEQSBi2BdCoT1OT7eY7Nseefx50mzji9n77FY1Dx7/TGetnzu3bt8/L2XPH77MdvinKqwPLh3l+FgwvXiDdOD/xqyvO8fzthtG7woJ5oMsEZQVxpJzYMHc6SJGGdrynLFweEJdw4POH1zwd2DIxdBZ7dIv3Hl8xoODqf4gaRuGqxsGY8kbZ0T+hHR0CBFhSdDtpsFJ/v77E0GlMWa7HjfuRNDwfF0iJSS1fKKJBniScXDRw4rI0VA02zI0pDYdy3sOHQl9kF+Dz+IqZuColzSKUOrV2Rpwv78gLKsaSPN+eUKa0p8ERJFCtUJ6vqS8Sjm6HCf8/NzvvqFx3znW895/N4j8nzI6fkrkkHI+WnCMH/I9773XcrdGeenZ4xGYwYjwXLZcv/+PaTvs1lplPYo6hdMJydoUxIFGevtjicfPWc+f4evf+P32DsMGGT77Ko3hMEAGZcOVSAsiAYRNGhZMN2boDVMZznSSwmCgKvLDbPZpIe2RkwmY54++y4QIGzI6elritojSRKWqyVrUWKUwA9gNhuz3azYVjWeJ9huix7L4FyJaZ5RN4rJZA/VWXbLkDASbIstrFzKATai5ozABARhRCMk540zP/iFJWg1Nc6JF8cbktinLBqMAazE6pB1+ZLxeEZZdkhf0GlnkFguVxwcHJEPJHVdEvgJ0hNsdjuXjR0JdsWGLJojA0vVlAg8PN8j9AIHlQ4kMSFX18vbdIyLK+fWXi6X+D4YvaMsS0I/IE0zUtxFsmkaEJK6bVwechA6PiSK1fIaYyDwU8KoxvcCusahQcIIpABtNU3T0bQtXbdFiFH/AQxCWIpdzXJZEIUhUuYIAupmx+npOaqryJOc8WCfq6srpG/JkiFN60xBSgsG2ZSus/iB5M3ZJYcHxxhh2KwUntZEgaHYXPDgzkOUavn4+cfcOUnpupLJJAUb4JGALbG+71qBUmDRNFXNZHiALwW+1RSba+7d2Wc4mHH38C6r9Tm+cB86la3I0zGgiYYTQgle5iPEiCAYcLVd44ch6WDAZlnQaUU+GjCbHPEv/bn/MWmcE3z0McZozv9X/wby7/8DwmDA84sL5vMZ0oOu7TmGSNrOGbs8L8BYdVtFVKqjaxuEiHHjfW5mUAgLfYXbWr/3tvSuZdNHTno+nv/9LW8HTXaVNqMNGAU25GY48CYtxsVdGqQIb8YNnePZcxVCKzRWeHhS9G7pPorQdLfOdKWcy9laBwC/YTJKGdxMFvY6xglPlxce3c6IfjLvaPsKmO1NSfrmZqyxLgbOGLwo7Kta2hmThEfXNQgapHQtcNmjlYR16CPVNQS+21Tf3Kk2FimNw/74Btu3ap1fpxft1rXR7Q2mqHdzi34GUwhLFPpYgl5luvMj+ufje7I/vu531r/1N5FSkP7iv4wxFvlzf469v/Sv8RP/xr/O3/73/x2IDLVQNE3JeDynLkuMJyHImeoOZSzJKGe32xClkcPbxAGBFDTKUjYlCI8wdTO1gfCI86gX/zfPQYC0PcPSnYMkybEiQPJJZfpmRlN3rhJkLLR+SxD6WG3Q1mBQSOGRBIIg9G/F5A14/qat7egrIVVVuVQf3Jyn2yy47w1DH9mPRNxc7wLPdw5qKdmLR4Ah8N2MZuh5tG3rInsjD2sjlOrI0oiialBNS9kVdA3IIKbY7sjzoTOG+Cld1zGa7dF07S3pYDQdEUjBYJjiSbehKsqtE9ICkMKNOBVbJnsNZbGmqBakw5BE+Fwt3qCLEdOph+oz7L/45Yd0rWYyHlDVU7pOk0QeeTbkcO+ExfKcyejzzGJJ/eW3yOOAouv4Q3/w81wtL7jzzgMuLi4Q2vKF9/4Ar56+ZD6fM5kNefH6DUZL8jRmVzTM0gHFy5LKg7snB1hTc/5qiQoDotxj/+AYW1Usz0q0VdD4DKZjsiSlePGa6b0BXeGx6CoO736O1y9OkYOYJ08/Roo7LKpvOSbo6z0ePphhcIlrQj7BE8e8OX3JIN0jCBfkw47AD3n2Ucndx1NePH3lojqtIYsPSFNJW6ZcX7/m7vFjdusN+/MBbdfh35EEvuDdx+9h2xAPwWwaE0gfqwKiIGU0/a9BUJ7sz7DzgM3GsN69ZjQZcX3RMDsco6mJPZ+96RTsEVmS0tSW/XHOYHBA4Fu0Vbx+rcDLGY5HRFHAtizwfNfSi0gYjWNW6wuU8gm9EVW9Yz4dsDc/YHmx4/6DGXk8pDOWsllgtODg4IjzC006ukNRFOSDgKaWnL1ZMhwlRFHE04/PGI7HrDZXeEQsl5d4gWIymxHGKRpFTIrRAXW7pG12PHh4SJQYxvMjjFTs1msO9o+p6h2Hh4fsNoqv/ugPcX7xivc+f0CUCgQtP/bjX+Ty6pyj/T2uzkt+6sd/iIvLl+wazd0HEy7Odrz7+TFNs6EsNUHcEjGEcESnFGmecH56xnivo9UlL8+/zt2HY1aLC/YOSvbuTPi9b7xiPNvn+PiIto7p9IrGPOPtt75AXQoG+ZTlomQ6y8iHHuNxyXxyzMXlc8I4YrVyc6K+l/DtbzuHbBzEnL153V8IBBfXW0bjkKpqOTs/JQpTksHIJe2ohv39KWW5I/Qsu6qh2iqadkvoDwhkTFsJrPWplQuv95scKWuCuCGwMarYEQYzClVSUtGpK9JwgmorGpugWtD9XJnqHLjZGuHmJ5MUpVq0tkThAK3csLfvxWityQYhiIy6LkFo5nuHdK3Gj6BtW1Rn8XEX1VZriqrE6K6vwDgGWmtrjIY4SQl8D9MY9iZz2q5z/Luy7ufbfLI8dlUj46pNUexR104o+l4/hpAdsLjeYYxkNIgoditarWgbw978hF1xzdXyiuuNwtrAffhbS9fWGCUouxZP1hgD19c78sxnPh8QekOuzx2ap6x26MayLVqOjuc0m45WdxgDTz9+xWQaMxnusVju8NgQJgnldse7b91lt9gShhFf+8pXadqKui05PNzn8vKSrrPE+YCmdYia8XzOer3k6vyKvdkBoSchqgj8wLlSq4Ig8EgCyXQ65+OPP2I2uutMOd0GYSS6TpGhh9Aeh8d3aVRHURV0ZYtqFGE2xMPy5/7UX2I4mPRi0nD9b/5v8X/762TZnKvrc4SwxHHaG2hcxc8Y3cegueqKNd1ttfBG2Hle6NzC2iW3OJRVgyddxOKN4QOcyFK6ww9C7K1sc8ta45zPcOviFvLGFWxvVZ5SrjolpeNB3t5kwWiFsR1+GHErQnvBcTMr2P+2/n57sSWd+9nzgk9+Tgik8Ki7qn+ezpygtItRFDgx17Q1cRRz8wDNTeveWqxV2J4jqU0H0gk/rZxsDcKgn7t085U3v1OiiSIXRWoUIN2xcXOOBt8TJGlEUTmHspPcbjTAVdo6/CDoq6i9AUdIjFZEkdvMNK1LEnI6sxdvxpKnIdpq6tbNmgprKP/6b+G/8zbBT/4EUgrkn/nT3Ll7j5PpiI+ffUyep6RJSihaJiM4vTpnlEXsz4ecn63J8hilrggCy9VFwf37d7Gipt4YhGd7HqhGGRcjOO/Pq/2Uuk96wVnXNcYYdrsdnhfcCjlfep9UhfsxAGPdXKbWoscc9WMSwlUgm0bfViNvVhiGtG1761zP8xwhLEZ9+ntd1dwKerMa+L7sK+Ty9jFpI/D9sJ8rBhNI8tGQLI+IooDkdr7YCVjVn7+maaiqkqP5nLpqnIGxa0kjjygQ7A1iRqMRyThzqUU9Hsho4QyMZdlfnwM3c6sUQ9NhcU7npimoywKhDWlcUBQNr14/43pxgS+Hbl7aal6+fkOxa5hMRhwfHbnkqu4VWnk8uHvCVVFghKSqN3z85BVf/NK73H1wwEcvV3zh3S/w8fMXFE3ND/3oVzk/v+CDDz8mCBNGwzm+L7l7b0K7qVBFy+GdGb5IWK9f8fT0Q05PK9Iw5/x1x2w8w9ohd+ZjVKVoLOyNZszkjufPXpGnU6p2yfMPniBTi7UrpnlKGGdM1WPieIptp3hyRxheoVXIxdUr0CXD9B7XF6eMxj5vTr/B3mHA/Qd/jKrcESchaRyBnDAI9vFR4AuOHh/hyxFtuaVsC+7ccQEWQjQIaeiagHePf5I09Pn4yXN8P2R0eEzTfX862D9t/cCCMgoTPC8gDCxJnjIYJRweHpJmAUW9xXS7fj5xxiCNqGtFGKakidvttGXF4XROkg+4urpCacuDO/fZbDZUbUXguTfPbHRIGAmEaDBmQNtqQt/jzqNDNrtTvvf6fYIwpWw3vPP2F1m3DTKJefryIx7cf8x4EvGdb39EnIbEqUDbhnTcgNfixw1BIIi1wg9rrL8hyeaM9yYIFK9eXvCFL7+DJyxFseXLh48RvsduZxgMc9LMZyiOKKoVmiHrYkWUZpwMQxbrZ3higBAeWTJnvbniweOcyWif5h+vOXqQkI8kF+eX7B9NuboqmExHGLEjCXMqFVDVBZ6nCPOQg6MpxSagatfUdUUoJwyHgpM7J8yGjxhPJ0RpRVeFnJ2X/MzP/AyBN+X8/JwkzBjmY1brS85edY5Xtb5kNJpQVlviRBAEOZiMP/iTP87l1SmgUfaKtikZjwck8YCyWrvW7YmgWNV4MiKONPtvHRGGEculu4gc7e9xtVyRxALPa/BkSpr6hHFH22Q0rSIPfWzg8/xZwd5kyr27CbuNpdbXxHmE12VuQDwQTMYDpBBMJiO6FsqyYL0q8QJNnFiapkIKB0XP8pCy2BEEEaE/QHqW3W7nKAB90kjXCoztAP82BWO92pLlru1ZlCVREDoOo3LCLElTl2ZQtEwnE7IkQFlFEEiuFguGWU7dJ3cURUOe5ljbUJQbmsYjCnO62jKYxgSe4PmrJwzSCQjDxeUpWTZgu1oShiHL1SWhJ0mTCXrVATdzeoI49EEbksSnbRvaumE6cpX5Zifx0hSo2a07prMZdaPJ44TNcst4MuLZ8zfEUcpsekTXrLk+u0YjmIwdeF90FtN5DPKc7XZLnoRkUchybaETDFMHF/d9iZQZvhehdcc4HjJ9OKUsNnRdSxiCaTyyPKdqKy4XK0ajEeevtxwf3GcymFOWNcN0j812TRyllOWOLE64Or1CbxsCPPJ8yGg+IQ4CfvLH/zg/9iN/5PYaVP4//g72P/jbhGFG27W0bYfnewRh0EcDOpGjlUarhigaOaNI/wHvWr1u5tX3g16wSaSwrjKnW4R0VRptTW968VCdcm7pJP+0AR9w4kH3ZhvVOVSU5wW9a1oCxrEhrYsqpAeDy0/dkYtmFAicGHCmGtdmhz5H3A9QusVYcSsajOlAOPzO7SwoN2JU9/OT3o0uduJP+s7lbjp8f9jfZvufu2mbO0j6JyK1P65aEYYSPwjQ2j2GGzFtjZs7jCKDUu4JCD5BESllGOQB0qN3R/fteyHcfJ5qHSdSOZwRshfNQmI0eN5NpdPnxvkuhMD2YtXNarr3DHwyalD8H/8akz/o4hnFV3+U8S//a/z0//p/QvSf/ntkUUJVa0QsKLoNP/2T79IWDa+efchbe/d5+vw57xxOWa83HD865NGDY169fsK6PuVzb7/L6nrJZnfNJBniZ2Omat1Xk3t3OhZpW7JoTOd75IOUtrFYXbvRlJ5dKIVB4JEmiWtFB66NbbTtDTEKjeOGunGDgDB0Yz9xGLk4z7q5rRartqOpSrTpiHx3LbGeS33yZIDGzSw6M9Enc5quiq/RcYPXuVnMPM9JwoQ0Tcny1JmqApcaA5DkKW3bIoSjukRRRJyE/evOvf6K0o2frNfXzhHeGdfal4qr6xVCeNRVS9O17HY78CRV7Tb+QgR4gau4ol02u/Y0IhkQyJDJ4HNkk3eRRAihWW9PCVRJJkd0VvHq/Jok9Sl21wR+zveefEQ6mBNHFWm6T2clv/0Pv85ipTmczfDkhKP5MRfnr/n2+bfJ85zH9x6w3uxYXZ3zzluP+ebvvCCNJHv7Y37vyXfZrpwZSNuMz7+7R70siQIfS0GUeSArOg/aIOWy1hwcWb54/KNII2l2b9iuLdHE5+qq5mhvQql3LDZHjLMcUp/EP2B055DN9pLpvR/j4vqaw707BHFAU0NWfJXvfOsb5OmH/PAP/wx780vOXp+zNzthcXnKYqE52L/P2esFnn+FH1iq65Z4GPLwwSNen36DzaLh/t13UZXPZHKP0WiDHwrKdusMeT/g+oG/008l1iqqesP0YEhnFMOR7yjxxpKmMUYLBDXG08i4ZbFZsatW5NkIL+zoOkO5XpINBwRBhFIVDx8esF6vCZIBZ2dnFOWK6WDKbqcJwyFtu0IEDZ2QlK0mylLG0xndBRSt4uz8JXW5IYk93lw8YbFOSAYBWR5wenZGGIZkIwtyzdHJ2+y2Kw6Oj8izGV1XEUTKpQkECT925z5+ZFgvN2gRUjUd28USX44pih1Weaiu5M7JHMmAl2+eMBkf4kvB4d57XFxd8fTVBxwcHvL4+BGbZclqU/DOFx+yqxXL5ZKvfOUrlPUagNEkRsoUsOwlDxB+x2pzSpQMXCxlPeRLX3iHD598k3cfHKNNQ9to0sRSlS7BIIl87t25h6kjVvWGNNxDmRXJIOAgusOLFy9Jkoyu2dF1zoTSmQ7fS8jSjKapuf/gmMVVxU/++BFl1XF59YYy3pDkh0RhhhELPNkiCfBCSPKI7aZiMB6wF+9xebFjOBakaeoMVKbh4YMZ2m4QdkjXSp68fsYX74/5H/33v8Dv/O7vU4p93n92zeF4xL2jKWfLivV1g/RgPJ6h2o7j40OWyzXTeUyUtqTZjPNLycXVJVmWIskcVywRGCMQ0hDHCZfXF+Q5hJEE4+Z60sxjtVjjyZAojJhPc64X5y6Sq4PtZsloqAl8SxSlzu0c5ayrms1iy3XXEWcJYRzRtC0FBZ4XsFltODg6BOuzXa2I4oSyqNku1uzv7yOMQpmmdzhaRsMRqjFUO488PWBXLPAEVDSEcUqWuoSQm+pVU3fM7+3RqR3DbJ8rfcXx8Rir4c2bNzR1RNsYjo4OELJDqwatLUYrtqsNs8GcXdlRbC8JvJA8i7DSst1uGI1GhDZmc7UjiUPeevgW292G+XxKHE3dB5iCvemcqjMEYYGwHgZJmAwwpsN2K4bxHmkW0LYdcRKQhsM+Ju2cw/19rPFo2w1Yj+2qJgwDBlmMoGY4HlNXljQM2ZYF1bZlNMr5qZ/8E/zsv/jzxHFK8NHHaK1Rv/U3iMIhXetg1HVTEYahE33GVQelJ+i6pseaRLc4HCeyLEq3fbVGfJJr3QPCfV/g+cEnGJx+jk9rRRgFeMK7FUifXjeVvU61BLcmCAsY1142BmMcKPzGhSJcPEwf9efcsDe90hvX+E1Ere/HffVK3DrHtdZ0qiHwfaT0XH52HytpesSRFP3z6Suazq3tLC6j0QDPC9BGOzF+K/4scSIQBM7B3f/XlwJR/SyoJ8N+TtLcGOUJfUEYhuyKBoHfP14XXiCNwNiashJYG/bnxYIwqFaR5zF5HnK9bD81l+p636KvhLpZy5sZTZc6Zowg8N3j1dogPduLa4mUgubJx7T/2d8l+cP/LUBiHz5ApRM+/zNf5sm3vsFkf8arxRvSaUYyG3O9+i7j/YxsYnhvfIdBPubiIiCNYqRf8O67D9ibJNy/e8yHH+6Ij/apqgYRCMZNQJaEeJsKCyRxyN44oIoVUZLjhRFtKGhqjZQO8RPHzvQJrsoHHZt184lpCY9OOxOQRvYQdg1WE0cuD9oPPKQMbquMHqJHX7nKels3jjHsxjZpuhbdNVgp8aOIycgxDl16j+Umi7xpGlTdUnWCqqjZrLZMpiPasHYQ/tijbVzAwmZdU5eauu5ompt2vqugxnGMkMZVTNGEIkPecKx7UR0EAbPRkIPZAWW1wVpLWdTOBOZHLExHqzRVucX4IXW7IU1yWtUQxT5KNUgRMMhPSLwAI3DvP+Hee4P8vqNrIIhjiWo2nJ8tMW2BH0gO7wzIUyibNxh1SBwEXK82RFHEdDon8FNG2ZxqU/P44SFXyzOqtiOMMiZ7Bi8MODx5m/15QqcNnSoxlWW9a8lznyRRdJ7Hu28/Qiw1Hzz5kDCPIQKRhJzcPySQBZ5Q+EXDwcN7nF5dUFULApthdcrx9IiyLDk5zMhjj9HoPc4vznj4hRPeffs9fv+7/4R/8A/+I9IsYX/vCNulBN6OJNZs15cgQx6/fYcP3v+QsqwJM8vzZx9yevqKLLhHGk0o2wtenn1AGIasNwWTvSlvzl/+oDKRH5xY+dn6bH22Plv/X1h/8A/+c/ypP/ULDEdT1+rWmtVf/t+hnz79Z/3QPlv/DVzd179+uxGQP/wV5rMjomj4z/hRfbY+W///tz4TlJ+tz9Zn6/+n1ttvf4nBYHz79/o3f5PdX/0r/+we0Gfrv9FLffi926/l1756Wzn7bH22Plv/1a7PBOVn67P12fpsfbY+W5+tz9Zn6/+j9QPPUJrQYVFM2XK12hFnMW8uXnF5ec7e0ZwIl8cdpy0X5xdo0yB0jPQblsUlMrB0dcdkMmddrsnzAZvVirLeOgdbvQG/JIgadtXGpdNsrxGhYjAe8/LNJbrxCSPHGdyfPeb6+g1te83h8T5SWgeUjiZgNW1XsL9/iBUG359jjMSThrcev8P5xWv8oOPqaksUDkmzAN+XvHp95lJlljVhYCnNJZP9iKvzN8g4JswjpDK8OL/E8AI/jDhdvCHLEorlkiDVBJGPNgkXlzXatLT1GipN11rSLEQbRdsVHB3PqUuDsTXT6QTdlWw3Cw7uTCi2Q9rmFQcHHtV2w535u/hRxWY1oqnPGc4ldVUwzB5RVkt2uxpjV+TJEa/Pn5ENDUqFdG3jsCF4hEFC1VZ0qqXrIt559CWev/yA5eqUQTknCQ+cWUo1LJYFdx8OyZIHfPeDjwgTSVV3qLYgDH3MrmSxXDPfm/D69A3C5oymA6IYLAlK1+zqK0b5HgIPKQ33DvYYTzqU3/Iv/cI/x1/9a8+JJJw8OMHqDmjQJkB6Dadnz4iDMd/69u8hhGGYjSh2LdCw3TSk8Yyu1bTtFXGc4Xs5RbOCQNO0ivneGKUL2rpzBqHMMfM8AnwZEQc5cRxzra+xWjLIhjRNQxTElNUSU3TMD2dcnF8wGg5QtabSHb5MWS4uSOIIowxGtcwnUzarLcWuYrstePzoHbb1NW1bsVqsexODZDw5odzVtG2FkA4KLJGkWUSaRDSVRxCGqK67MfNisUwGM+pqAzYgiGMODjK69ow42OfkeJ+62XJ8fIQxkjhJGA0tp6en7O256EhrQ7ImIJuMCITm7PWK0WjC4ECy3pbMJseM7mc0ZcXicsHR0R2kNYRSkAxi8jjBGg+ra4qtIQ09lL4k9GOsGhEHI4y1lEVBlkxBWwJf0mlFHPXmrnJHVW8RBChTMoz22K5aNmuDMI6vmeUJP/yVH+Fnf/YXuH//bQCCj55Q/vqvcfUbv0aWTfBE1HMeA5qmxhjLIB9irUYI5161xvEEw8DldLtOpwNDa636jOKsN3b0hh0rHLjcajfb6A4+FmegUdplaTumpfm+66LoTSlGazfnJ92UopvDND3T0WF6BElvxrG3hhajNdpqAts7rbG32Bk3e6kJ/LB/QPZ2hlAbjcvAhltOZM9nxIDSHZ4EIVw05I0pCWFp2gZkS+oNetOS/T7G5zBPaStJa5yX2zE4peM0Bgpre86mMbd8SrBoo6mbDksPWbd9vrl1RqM48SgKsPZTOeBojAUpLVVZg/V7Bqbs50ndcQh8n7pzz0H2qY0gwQiEVVghsdLhnm4wRM4tbwjPXtP9vb9L+FN/GIQg+63/APFT7zC7OyULY2wyYO/gGNNYDo4nXJ8XaL9kb3bAMNsnH46YjkKury7ZrHYcHhyjlGIyGuB7liDQdLYlyRxyKcThqzxpSMOaLIoIE40XuXM1SCeU1a6PBK3J85CuaxhPB2itOTya90k4DtdTFjW6xxB1WtN16hY3BLivjcuWVkq5wBAPwjAAAkSeoZRB4NxORjmYubY3cHPDZrVkbd3MpVHOPGWMy7HX2vTnzJ2XwIuI04Qw9BkM09t5ST+IGISCgWxQnZvZbOoWbWrqsnaOeKWwXoHSLcI4wgtGuJnozs1wekT4gWQ0muD7kk5VzA9P2JVbqrbCFgalA6oqoGKN0QGemKHMGjyDluB7Lciw5+om+F7ObObQV3HuIfwRsVDu/aMlkWwp2pLdasHpVQMi5uDBF4jjkLP1zr2ehKXpSk7mewwmdzDKkvkzrq4agoEzqb3/+8/YO7iDyAyr8zMm4yMOju/x/rc/4J3PvcvlooKyZLTXsNt1xFFKEI25eLPme09ekeQT7s+nqK4hSSKE7Egyd4z8dEfiRVgrWG9eATWBb9DlBEvNbHCX9J1jtkXBwf6Y7aJGmCmPHye8efMGgc93vvUxaeIzn8ekeUpTG/7AV3+K09NTLq9eoMyWrgsJ/IRXr5f4ieTu/Ts/qEz8wQVlW2nq8po0C7DGslqdc3B0zCB/QLGrEYFls71iue0YDac0dURdNXTW0DQNwzQlz8astzuqZsHszucJVUacSwQ+F9dvkFIyP3jI6ZtL/BTiUcZ2U3J2dU3dGaKRIPRnjIZjzi4vyLMJg5FPEELkzyjLmm254uGjuzx7tuHo6IBnz56RT1q6KmU8Sfjd7/xd5rNjri5W3H/4mI+fvGbXBQQ2Ih0bVruXVDTIYAy2YrGqibMRmgjltSw3K/JsjJQB5a5Cm5Zd0dFZyTCdEFDTqDNWly1CeASRIl2q2O4AAQAASURBVM8meL7LMzaNx2wYEvpT/GHMprjCao0WkjvHn2dXXxMkC5bnlyTxkFZZJtMYUw/Zn8QM0z0Wi0usCGl2JcNkwrr6LiIPWay+S55OWG6uGc8lVxcVTVWwynKM0qRZyGQy5/e//Xt9jGZGXYFqGpbex5y+uSLNc66vdmzWDWlaOmj9ZUUgYgZ5RxLssyvWTMcR9a5gGE9ZbC7xxITNQuP5HZGfsjg/g3qA0g45oEXNavmA3/r3Sn7lN/9jvMgwmh6x2xkWizVGGXwZYluPlhbT7RjkE7blNdvNFiFCmkphjWRXbWnaAAJY7y4xJmaYWrRJ2e1auq5lkI2oqmuk2JFEc9oOqhKipMPYFdebljCJWVwo3n7nkHff+hrf/ejbnF+umeyFLDcbEIpOFXSNwPMViRcgwyM6tSOOAsbjANV55HEMh2MW5xV1tWQ0CSkLycNHd0jSkPV2R6EUQWxZXV6zPznEGMP55XOGo0Om0zGra8lkAumbDmg/pVgqQtGB57PdvmE4TFEqQUvFrjplNBowmI7ZXu0wquN6+YZHD36IJNPgrdgsAlRSkfgx1a7i4Vt3CQiJgxTf+5hMBkwPBKIbIEgRCHw5ZrW9RoYSH58ozNief8xklNI2Gt0FtG1KEBhCEWJtR+zvYaXGC3dgMqzOUaZjdXWOsJJk4GNs5RKTxIgg8Lhzsk9R1RgKfu6/+z/nq1/7471IA//DJxS//qtc/Nq/RZoMCYOYuunwPQ9rDV3bkGcBYRSizQ3hxw35G+OYkbKHi1tEH7moCHwfIW9g545vaHshFQYxUoTceHJEzzTsVEvsO8zQTerOzbpJp9HGYFEIkbt/tyCQ7r57GDl4jpx4A7+WDkJtrQYpe8HXZ3hb322GQ985mW9EY3+AtG4QQhAEcS8mxc2NdH3et/QCwKXZSOFhnMal0y0+sk+6MUjpwI4OxaPoWosyYU9O+gRVhIQ4ClDaQ3c32B4nNgQuo1p6AikU5iYF6AYQL3UvFi2gsdY5x112pcEPfLr25lg517r0PIxRzujke/hGYrTbOGCFS87RingQO5NPn+xjzc3mwnEpZQD1v/vX8H7yp/E9D/m1rzIdHxJGJeX2CeHqmtfffcFgMuB4f8Llx6+ZHb2NUh3nV68o6yVGHvHi9CV3Dt4iHWas10uGhyMnYnYjRFthMIRhDMJtdnSnOZ7eY3in5nSxIhl26KrkrcM7xPmc0IPvfOcVURwzmMS8enHJ7OTLvDz/Nl09JhoIYusTD3OCJkD6FZ4X0HYe2irqrkQIS9m0WJuj7QbPG6BNi/SHZEmMsBrjBYSBxHaKwnTYzqCVRHQ+nqdJMkkQOEKJJ1KQDVpZqrLFWoHWHVK4jVpVVb2Zq6NpS7pFCUa49Kswdpn31HhegFIGT0ikpDcJCRdvKTRCZiRJQlG7+EmtNdfrLdZaQq8iCAJW2x1RFBAEAVGSMB4OOIxjokiA6DBagFXUdYnpDOuNcAD6RtJ1mt22pusC6lbR1OdcrTuapqJqPZcvjiMyRElyy6qNkwHGd1jDxa5GlJYgyAkDgSfAJjnfeH9JkkZkecw3Xz4lSSPCyme323FycsL+g5wPPnhFPBlR2JaPnjwjzjK++8G38aUgG0BbBiwXBfvkCHnFxeINoQfV5g2bwT5xNMDUOfNxxKZYgR3j+RNGM2jWWx7df4uq2rLedvzO7/5D7tx/QBDlXCyfst5V6Ocejx485OWLD3j2VFDUDWHSsthc8Oqy5stf/ByhCDldXFCtQwLj01QNe3t3udi+4PmrjxhP92iqlstX/y9oi3/K+oEFZZoOWK1WZOkUKSFLDxiNB45TZZaY1jAdz1muNzRlRJwE7HYrgjBhOt1nVTTEoqDsQvBTTi8vKbc+OaA6g7KCsrgCP2A422O52TIcB2SDvL/ALZkMQ9aLguVmSd294fDgIaqNSZOI07M3JEnCdD+lrCvCaMi3vvNtssGApkmwOmC3CZFizK5cUjclL14+I4xC6rqg44xInVAXKaNxwm45YDgZIT3tqlbU6FIjjI8vI66uLhhmIw6PTqjbK6qtYX21ZG9/SqdDZuM9NBVBKLhcXOD5lulwn6YuSMQeSsH18prxzMcAw/iI9XqLUgV+YDga3qPZKLp2S1euiJOci7ImTSJG4xQZKtabK4wZo22IJzu2pSWM1rSV5vTlK4xKGYxHfO/JR+TxkCS5w+V5SRYdsly/YbfLQWh2bYuUBqsNxmzYn09ZrwryzMXTxXFKU8N0NuLy8pz5fESnFR4TFosr3nvrbZquBNWRpDn5ENLwPk3Tsrc/Q0p49fo5282CLJlStwOSLMAXGdvdM4bpjMV1gaAEm4KNUaaiLQXDfMRm3eAFHUW5oK4lQeSDV6DaEN/L2O6uwTukbmqSKMXYHYvLFb7ImO5NME3I/l7OJgpRpkIIj0E8JI5DBmHDZnlJVa/xpObB/RnbbUG1sZwc38fojtLsyJMp11evkAw4OByzK67ZbELm0weoYEES58wfHbPdvWY8POL6csd0kJEmA1Adul2grOLtx+8hVIwxlrYxfOVLX+Cjjz5i0ywYinv4gXdbLRIIkiwgydzM13x+gqWmrnYYU3F4+IBQhlxfnpJlASd3DnjrrSHFbg02Jo3nTO+DVmM8C6pN2WlJWxZ86csj/sk33mUy1ERezHK3YTzKKFaGZXFJnEnOXr8hDlPSpGWYj/CEIvJj4sgHK5jP99ntNrRqi9Y7Am+I5Ijz6ydk2QDjFUxHJ85tai9YLFpme/sc7O+zWFxRtxVhGPA/+Pn/BT/61T/iPkyefAxA8eu/yuLf/jXiKMVoj65TeP5NZcshcMLQgemdG/gGe6NcVSJK6NOl3cG0uMjFnq8ohO2FEH2KTYfs4YGfiMkev4PC89Lbat6nlxOB0KkW1bNM3b9zWzXUusX0UXjWGKywCJxjXBuF5wdI8Qm78sY1fsM78qR/i9i5cWNbLNLzCIKoxwGJW5i2i+eTPZ/ScSCNval8OmSLJxNcJrbuj4N7bFpBWbYuCeamKioFWps+oELhtJvpK8COSOD4lhZjpLs/KW5ZhQ7ALh1EXbUO/dMfJWMsvu+RpgmXuw3Wej0Cyh08YwxxHmBMh1YBnhfgQh3pK5yGrutwMebOof/J8cPdrgzdk6fIX/9Nsl/6eYSQTM/PkEc/zPViB+IZJ3dGFKVicWl4770fpVE1npaormEYZJQXr5gGgrhZUHUWS0unoaob0nRGNh3Tnb3sK8G4YTJP0IQ+tTfg+OCQLNZMxzWF6CgvnjMJh7x9EmGjkqqCJNkQiTfcn51QlucM9oecbzqkKjCDEcYfslkv8URLXUEYJVjrkQ8UoR+4QAMFGEHZnFGsY2xn6WRLFiZ40hLEOY3qGGYpQZ/ApDtFtYO6vQauaUpXZfaCAD/yXLfRGqzyiIMBZeUSuQwa33fIJhkYOkr8OMQzoROOfWypUi1t61BJ222BF7sNQ103+H4I1iU23XAwsS6aVLcdQRAQhB7f+fYToijCSkHkWbJ0zGicEviuI5akPlFwgpAaP+oQvibUkhCIjMaIEXXTUNc1MyFuk87arqbYFbcc0KYKCeKAotBI4ZL8dAeGAKWt47pmIauq4sXVNdutYCpz1udr2tby5PVT/uHv5mgDUVASBgKra/bnA7abC+LIQ7+WjEcpftjy5volUnqUhWEwTNmszqmfRrz1dkjZrkmaQ4aDPXblBdoUfOubl9y/+4iLyzVB6HF1tWAyiTDdijiOGWcJWShpKzh9+QHC1sxGDzk80JxdPWU2OCINF1y92jAe7HM0v8t2s0SIDGsUpxfPEfiM0gfkoU9bbBBEP6hM/C9RodQ7RpMMaw3aSK4XV2x2W8LQR/gemoqiFAg8jO1oGkOeHnNy5wGr1QrPWzgo8jjH81O3E+4sVrRcXi8ZzzM8f59d3bIpnzvI+EIzHmYoMyDKBE3jqPjj6YSrq4bVqmS+N0GIiPW2QJsEjSIMd+zKhvHsuN81K7btCmF9BuMRWmv28nucnj0jy0EKn+HomM26I00hTyc0u4aqaJnvRxS7lCgMUVZhjaP5SxRxJEniAW9ef4hnImbjIU1RUVYrJpO7aOlTtyWTyQxP+mAC8lFLUwkGeQT1Jdbcpe1WXGyeIaWPalpQMYezE87PX1PUBXEc0JmKbCBo6pLNRU2lS+bTu8ggZDRJOb++YjLNyaN9suA5TXmXRbdESEMS+dy/8w7au8aaAiEF7779DmW9Y73ecHg0otxs2Z8fMT8IWa4XPHo8YzgYUxWCNJdcXy6Z743Ik5hOlSTxI6IwYTY9YjhRbLch/lHI6+cLUu+Qw8djOnNJqxraWnD/+G06fc1usUKrmq7JCdMduYhpyo7RwIFzz1/tGE8yhuMRsT/n6uqaWmg2q4brzRlHB++wWRek2RgpEy4vL0n9BI8tgdAEXk0ezwgGKeNpQl11yDQkTA1tZ2lbSZx4+F5EW5dMJ5bp5AGLzSW7jURpzaauGA1ipkOJroe8/N4r5L7HW/c+j+oMXqC4PO2YHB0gjOVg/xhha968vCIfDEmimMM9SVOvKFpNUzTMh3cx4ZbrixX7B3uMJkOGk7ukKSRhxN3jGYmfsDebYe1Ll1UsYDSYcO/OkDwTGC25XlxyOL+DL2ICz6NrKx6d5Jzcf8DHHz0lS1NCFFkSYI3BNLBdrXjvrXfp1Ibdq6fcPY6J7ZS7x1sGqcf51YqAkN1midURWdJR1QWjYU5ZXBOEmigcYq1PPjxBhDVPn3+LqKywhKyXNcNxxHZ3RZpMGM0SPHNIFG+oGhe3ut2VKOORZCMuF5ckSYTRHn/mz/wlfvSrfxRwYrL77d9m+Wv/Fs2HHxD4GYvlmskkQno3cG7XwlWmIwp9J4SscQJLCLTRtF3jhPynBJqxFqUaPN+xDD+NDNJKO2Fnw9v7c0ktnuNWeqIHpMMnkPH+s8+a2+/zPR+/FzzG3iTwuLg7IR0v8rb13AvdrnMVGhF69PE8TmhZ9zyCwOvvh/5nnFhyKSd9zdJ+Ov4Ql6KjDfg3LElXSfV931WYgDCIseam+tjHPRoFssXzXOLLp28Hx38Ngvj2sVir+2MPCE2Wh7SNAmR//G6EpiFI/F40d5+obVwbNQwjlO7Q2p0naa2ryvai2vMtSgP0OCbbJxsBQpi+quvfCkmBBOFa8FJqVz3uIxkRluwXfwEhBOPTU9568NOcxR3PvvNNFuXHpMEjRgLOL18wGe8TRT6j4QmqW6KqDutJxoMhr1dbyrLk7r1j1usO27UEQeMqtr2olRLSYMtg7z6dEdRCkUweMq4zKj/Ei0L8MKBYn2GLHfcO77Ms1iS+Zjgbcf70CcPc5/pywXX1MXme0dgBfhi46NYmdS3u2LLrAs4vXjHfv4MvJK1NiUJLh0bgsdpViC7ChK/wbMybF2dYW+GJFKUKBAFpHBL4EUkaIaUliMFaReAFJFFKELruwNjMCeMIGXi0bX0LVa+aum/LK7rOJSdtNitX4ZSStmsZTnI2246qqknSEV2nXZKPhqZ1SUGaygk+IdGipVau/b6+XhHFAbZJsbyksw3WWgI/wZMRURwgfUFgFXESIqUhikOU6dz4gLJoZfGExROCpnTdszxO+9eaJIpiggR2ux3T6QBf+FRtg1aaJM7YlQVt22KMIY2TfgNnyLKc0cghw4RyXYYwifB9nyiK6bqOcXrCME/ZrLZ0tiIMPYZZRlVVqM05nRbcvfeYJ0+ecnZmqXYFz773hjjKGE8TLi+fMcwPeMEbgsBxS31CkiiirVv8dMDDo7fwI9jtNlxdFrzz9rvkk5C///f+EYk8ZnY3ZTJ4j+2yoti13DmaI+7Mef97TxmNQzojWC8bxoOMTm2odtoF1vyA6wcWlINhSFHUaOVaHH6giXMfsEhpqbWgUxVBCIaaOBqTRvs8ffYSKwrwFcuriiBosFZSV4r9gzFN0xAHKcvFjjhNMDqgKGrCuEIruFoopLfBF/DixTVRYvCjFdpIPAxXy4/xRE4QGepmjfAk601JWVdMxvs0BbTqGswQTMtwkGC0Sw3I4gFZHFJbjdF7tPpb5P4BzU4QeIZOV1ydxfjBDClqVNexv3dA4E3wRcp2d8ZysUN4FtWB0jV1JUnTFGSBrgdsyyXz+WOuLxZkwzXba4UXFlRLi+eF1O2SLB1R6BJlzzAiYFdotPw9KtPx6HNf4eL6GVWlyUc5xW6FsYpBmhJ5CbGfEEqBGYVYXxMC+9kEE+Yc7t1jUbzkcDxjNE6oOw9JwtF7EapJkNEbAv+Ypi04OTnh3r0vcL16ikUQ+iOwEcNc8uL8/04S74N6yL27E4pyyXZbkKQRe3tjnj09ZW9vwPPnL3jr8SG6DUE8pasDkigjyiEaTrlaG3bLBZ97511enl2DkpSLKfnEkqRjtF0xnWVIfIQa8fgLI3zPMsgTtD1gu91jda0JpGI+mZEmMdZuMd2QL31xn5cvX9KWPgd7Yy4vVhxOH/HNb/3H7B+M0N0ArTacHN9DSMXTJ884Pj7hrXfu8OrFJbvrjiD0eeetxxzNphRFySBKWRQl9+7PGWUxD0/2qauW1WrFyeExw2GEsQVd7T7YHzza5/z8giBS+H6MLkYEfst7xw+4OF3ixxHje4fIKKBrS44O50hhODk84OjOPlfna0YrjdfP4QGYRjMfjPC8gHwaopqC2WhGEmX4vk/g+fhS0nQF907uURcLBtN9vvTFd3n67HuMx8dcLi7xuoAvfunL/OgP/xBN07Bd74hPhhwenPB2mfPkxTPOr75LaxQazbtvfQGj5rw+fZ9Or6irgtVqid0L+eKjdzk7z9zGUa2Zzg+o6i1BYimqHdnQY1edI4WP9EJqtUbbjGzks6vd+/q9L3yFn/0Xfp6TO4/BQvDRx5S/8etc/+avojrFaLjPYrFEqZYoDtG6T4wRAqM0SjXE0chVJa2bO7XS0LYNSZLi+Z/MO1qsa5XiuIVSethevAkh6boKIenTc1wb2Ik46YSb8Nz/Ut5yLW/WjYgxuuvdw+K2inmTdqONIg4TB+k2GtEzEo0xjt0ZJ0ivz6S+SbPRTuSGIurjEbvb1BmtNKrriOIQT/poq5G3QljQ9iI18KO+mumOgjFOOAa+74DkfXvdxW5rjNHkgxTTeXTq5vj0As0aBoMUIS26dsB3RM/G7NvPxra4FEfZfy7InnEpCAJJ07RI4fWV0puIQovnGYQIUMq6KMpPzakKjKv+qr563OeII1y+dRh6+L5FK8e9RBgnhIXoq9heL8MdEL3+rb8FQPaL/zJCCAav3hA8/ONsyx2nv3/K3n5IuT0lDhsuz79HGKSUu5qu2RGFPnmW0l2+JAwsIpW0ZcVuveb47h3CZIQ1bgSCfjbXD+H5+SVxqrlcXZGmc+aDlPvHh5wvl9QmIBkfsi6fY7HMxmO2u2u+892O2TAlG2lenzaEQlBdf8Bs70ssdq+oq2v2pu+xaxp8HWN1wMndjF35krJUfOnLP0JRagajKevNDt9XGFWRxg9puy27XUk+UtRFSBi6ZJ3tqqJrLZu6IvAjdOfYkVEgKOo1XhsShDlpEnC93WL7UQmzLmiaDk+GKGvwhCHwXULT/t4AIRygva5bsBJ/2GCG+e157oyr7N/MKBubYIzjctoeZu77Plme4Ps+sa0IAo/ATwkig5SGulZ9JvkQpWU/P24oqx2+3wu6PAHEbd5817mxEaUUXZ+A1nUl5doSeJJqvUUphbEuPnOrXFs8sJpOaaxQjKIA1W9AsywmSWLG+QBtDVmWULcK34/QBlarFXVdMxj5eHKGtD7CRuzNj3hw7z3KsiCIJQcHXwEd4YmWZy/exyjLbDYjTvedeC8ayvWK0ChMo/HDiKpoeXn5giyPKVTFfLZPFMIH77/PbqP42tfe5ez8JbIdYmvLfJozH0o8L6LpNO89fo/h6BAv8LlYPqerK9IsQiuJ1v9F9u7/u/UDC8qmhkE+5urqirZt8X0f0xmEFyBljB+CMhVRmrBZaxKbcXZ5jvQMXiB4/WpBlgdEocGaGF/mnL3ZEsWQDgZUq4onH3+dyXiPQXqXQISU1ZKqviSODNZOMLKh7UK6JgZqmrYhC1KQW6yFOHMXHqtjumbLanlFICek+YTdbkc8DLi+vuThvcc8e/qS+fge4+GQ33/52xzfjxnkc6rC8s6jB7z/wXfw/JDhVLBYvWKWHbHZKK6vF6iuJhv4GCsIo8QN1Q8Sys6Q5XtkaUgygLOXcHz0kO26pakL0kFA5O+B2GCswqqA1fYaq2vicMLZOaSJZjAKCKIZZXfGi4tvU+w8jF0y7iLi6IDQb5jOU5589ILxaM10OqFRLqIvSFqG4zmry5psAFdby/17JxBUWH2Al12xXVYkg5rD8Y/x8fojfvRH/gCLyw1PXnydUN4ly2JOz16RR/fQXCD0HGNnlLp0c5PpGM9GvPPw85Rly8ftR5SrKYEXMp34eOo+Hzx5xo98+af54KPfJ8/n7E9PuP/oPk+yb+DrO+gjH1TINILj+4fcu/dF/qP/82/x6PERVXVJsTFcnq3J4yGBFBw/OGS16PjP//4/5I/+yS9xfrbE90N++q2vcH21Y38yYzbtsGqEFJpR7hN4JQ/ujTA6QLeCL7z1kLPTNW+99YD37p8gcTvMyCw52psxnuRMx3vkUY7Wlsl0zvPoI+7enSPqjsir0FgeHj9i17zm8GhGHI34+j/+XT73pXfZbDbsjffJwhhjO9I4xpcho3xAHa24c+cu1jdsdy0KWC+uCInZG0/RTUueSFRbcFtuwoKpiXyPqqoobevEZBwihEtnqZoKKTvyPOdLn/th2vqMyXhEswv50ue/xmpzSRyeIEzL+emGkwcxUQxJMuDyjcfi2hDF7viNBo+ZjA9Zl2usTJHMGMwe8+rV+5S7gs+ffIG60nzru/+YJMmY7Q04v3xBPkwZiZDzswWNLsm8gNl8yNnFOUZ1hOIOnbxCaInWml/+C/8zfvIP/InbGb3wo4/Z/fqvcvUbvwposnSCFC45KopjhPCwaLAWKV1MohOAwe1hupUfuiMIZT9L6TKCXdqKi3CLouEnIquHZRuj8KTXxyLe3OYqbForvMB35hbzX2x5czMTKSAMo9tzJ3Bt2xvTg6vOSVdR61fXZzcHvkvWuWkxW4Qz1Xgefp90cnOspHCtez/wCMOkn+CkTzrpDRTGuNZ+n9Tz6dV2DYPBCG28fpZT3BqXjNWozkdYedsuFp+qfAoJRVEiiL9PkBvjzotWGq293thk0dr2bUw3w9q1bsZR3JpqnDHJ8wxlUTsNZp0RCOFMSoHvjrdWPQgbZ9a5yexWqsEPfeAmLcjevn1Mb1wS+H1V053T+m/+LRCQ/PxfcHDxp6/54uf/NNKGXL16wiCb0DYRB9OI09M1TbVhMBiwWp3he4bVco3SHSdHx3ixz97hlOvra/b783kzV4uQrHYVw/t3ScKSSCqkiPAHHd978j4nd9+m0Bs8HfLg3uepZUUaDwirmAePxhR1BeYa/91HCJEwe+unefbkFT8xPqbp1mxWG9pGcHA0Yle27HYw358zP7lPWSpWxZbrzTP8LGUyvtfHLIKSI4QQzPczXr0+J88HqDZCqedMMzjUR+yKBW1X4PsBV+cr8mSI1Ya2uubl1dqNMQS+C1FQmkAGVJ3pIe04k47vE8cR250L8ogjZ+AJvACkh9UaLwgIhdfPExvaVqFNQxjEhH4AvouJvDEJ6bZhcHiC70uGY5/QjxDWIwglqra03Rat+5hVZciSB3Rdhx8G7k9fst66DVcY+k4wKpcx3jQOKO97ToC2bctmsyGOE9bbCqk896q3IZ7ft/OtIQx8Oq3YbBsurza80Fd4PqSxTxpHjIYDPGG5Nx8xyg8QiaQoGpI4R+sObVzS2HA0p2ksja3wbIq1mi/80E9jjaQsSyb772CNj+kEYSRoWzduZG1HMjdUTUGnKrx1wYunrxmNZ1RVg+c1/OP//JsMszHj0ZaLQhL4cH5+jjGG6SxjvnfA82e/QxB4HO0/5s3rZ/heCDZyASE/4PqBBWWxayl2DUZboiDEWk1dVqiuJgg1+4d3uLx64wZxA8WzF98iCAfszU5oG02YKpRt6NQxQsLBScKLF1fEgznGekyHe2Txj6FNje8FJNEUVQuOTu5z9uaSOMmQSYfnWZbLJenAsF5taKo5Dx7eY7e+YHNdMJuesKoK7h7dI01zzt80DDOPcXbMy9cfcuf4hLqyhH7EZnfOeveS+UFItSvw5ZjhuOODD79OnMF2UxM0BU3VcVo/I4mHxHHMslyjTcJwMOf09ZY4CbBRSxiMaEzJ5nqNWG8x3YREjdC64e7du1SFYFussTZG+jW+8JyIbVckfsRokBP6EV0XoAT4Iufl6XPysY+0KdtNRSITqmbJ9fWWKAqomy2bdYiXetw/ucOLj865sNdUXcfTj9+QJmOy0RTpKZJYsljEhGFHtVW82e6IYmiaNR9+9Iwo7/BVStJ15OkhkTdjU71CCEEmY2I8qtrg55Lff39HVX3IcOpz+GCPi5cXjNNjyo3l/PSbzMf3WFxuefvhu7w5v+Dy8kMm4j57o7ugOtLpIaGcIfSKVpR894O/x09+7Sdo2pJ4f4+m3XJ1cUEyrAm8kG7Xkqeaf/6//SUsEap28WRduyUML9ibHOIFRygV8Pr1C+7eO0SoAdPxj6O6kt3VFdvFOQ/3Dnjv5Ji6XXN5sSDwUv75n/lDvP/RN4njkNlwRJYf4PmCthMEZspsfozpDHEief/973Kwl/Hu3ntEccjl+ZaTo0cErSGxmiDVLBZLHj16hG47dxEuXjMfRWSxpNUdi8srwigm9X3O31yTyojSlvjSx94kiPSfipPZmAsvZn8Pnn186d6yRnF455Drq8a1d0c1dTHh6dOn5GnOd771Tfb2DojDhIOjAc/OL4mCkKcvX/DiZcV4fkgSjSnr5/jJHLPKKcrX5IOAj5+e48U+Miipm1ekeUScHNPZD4nTDIulttecHN/h1ZtzEBEIxdnljm1zSpiGVFXM1eUVZVlRdUtmU4+qWfLowU/zC/+9/yn3T97CYgk+cqDy8jd+jeX/4VexaLJkguclNG2J1powSPjE4eyqf0o1bn5SeGijuYkH1FpjUWjjbhNCo43Gl16fs82tqeZm3tBFJ3ZIye2M4c2xt8aJLF8Et/OL/0/a/itGtjTB88N+33e8CR+R3l1bt3y7menucbuzo5kldknIkKIEgtCSIAmCgF4ECdCbIOhFehAo6JGi3FIiuUuuGUkkwcU6amdmu3valOmquv7e9Ca8Of6c79PDiczqWQFC7YOinirzZpgTmSf+529vU9a3NyHEWgKrEMK4u+8a+tTb4Y7j1KD41vso5B0zYlm3zKdar+fU/6YsCwS1HedXGTu99g1KKUHXz0Wt09RC1HvipimxLLtm6ahZJLn2QeZ5ihTgOP4deBai3gS3TBPXtYlX5fp1ijWwAyk0QtQp36pcTxvWHoD6sWW98PSrU4632+GGITBNSVyWa/9k/XNKCwxT4rk283nKnbS/TrxrpQh8A8OoA0CVUrV1aI04VVVh2Io8q1DKumOwq6qWW02jvv8kVuv70HcXCvHf+NsIXeD/G/8WQkrsl2c8fvwHLOZ/l9PhC6qsYMsJ2b3/PudXbxguU4Kgxc0o4p33P+TFi6d89eY1rVaPwDNxrSbLNGKwlvk1NaCVZUlVLpisFmz0DyikopgsCf0el8MLpA0Np8Pp8XOswME9aJPdFAx2XMymTxYbNAYlyWzCp3/6nEF7g8slZJmgKNpoHfHiZMyblycc7L1Du7VFdL3k+VfP2T46Iig6HN4fkBTXxBkk0Zxef4Nue5ebm4TdruD1qy/Y2fqYDx/2WEaXrBYSq9Ggt/U+hmWz2F+QLJf0Gg1MpZCWIstLPM8jjmNsy6DIciQKYQoc36MsFZZVT0SiKxzHqre+o5hclSRxRp6XzJcJRVmxinOWqwTHkChlrj2aNSOfJRGGYbCcTQn9gFfRG9AGtiUxBAS+pNUMyTNFmZXEVS2pq0qSpvl6F33tx7QMuu02VVXhui6ua2OaJr7n4bsB2Xr5pw4SmbRag1rKlzV4jOMYJQV5mlJVmkrVF05FUXsuW60W2izo9TpUZUGv18N3PWzDxDQEWVmipxrLcjCURGgD03BJohgvFDSaHm4GYeCyWq3QOiXXJbZVkmUFntci9XKmyxzb8pB2D9OqL14s7eC6HRpmxINswmoZo5RAVTFJPKHKNeejCWFbc3O9ZDopODrcptEKuLhYsopzpJUwvL6gyhTbmw/RYsVstPimMPGbA0qhNWEYUpQZi9mUIPQQWtEM6yT20y//DMf2MK06NLG3dUiSFyTJmDidYhoehpVh2XHte/PuEbpdxsNrWh2LxTSl2XLxnD5Igzh/TbPdxJI+m5s9sqyizH1cXxMG0G52Cb2INKmIloJS5zTbm0hhIQ1Nms8RUmG7Ei1XZLFHq9klzRLyfE7YcliuZqRpxioyGAwMKn3JbBIQOPtUesYymtPtPaTZnGFbOVWpKBJNs9Gh22lwcnrKO08eMJ2fsVxOmUUZ29v7zONrPMfA9FJmC4s0WdZpZ23RbPm0Wg2++OrndDsbDKdvCIM2F9fHtDsecRGRp5qN9i434yEbvW1cz+Dt6SVer8GqWJGkC4TYxPOazOK3OEKgSo/r80uC0OfN6xsQc2x6LMYjOsEhSTrHdFwcq80qAseuSPIJ/W6DxWJBq9Oi39vm7elnnB6PaQVt2q0JWTrnh799wE//yYzA8/no3R/w5tUN776ncX1BXsW0wz22P3zIV58/ZZam9Ho9mkEHwyrw/CaidHD9jDwdcm9zC4qIlxczjt5xyZcNVspne9Cg190kSeeMhivi1SnbWy47m3vcXCo2NizmyyVJqkEHPD5o0R/YnJ0MyVKXwHIxnBScFt33v02r0+TkzTn7u5usVjG9j++zXMQEfgspDd68ueGHP/wIVZlUWvH9j79Frx+yWE7rq9VckqJ5cv8Iw5LMogWLecLOXpNf+7UHXA9PuLoYoYXi3v0u2WyE3bDxgy6PH/r4oVFPqVVQFAG2laFVSVG43NvZ4vT8hl/7wa/xD67/HjubbeYFrOZLTPk1cBJCoPOSeDnCb/q02iHbG7vMo2NcO2Oz3+L0IqcqYbo8wwlaXA9NNndazJM3KGODX3z2DIA0kuAmuGaf8/FrGi0LMo/p5CVbmy0qDwpTUVowXSa0ug7zfEa89Dg+OaHV9qnMBWGvgdvps4wnBE2H3uY2V9dv2di36UYfE61KDCvGsCsaPYP5zGcyn/A//R//b/jh9/7K3fnEfvmG4k//hOlf/w9Jnz9Fa71mJr3ap12VaAW2s94iFgqJiVYapXPEOtF7m3wRUlDkOZoS0/DumEQp5R0IFay9kGtmrAaT9ZRgPVgnfiVBDGVZoXSFFC6304W/Qofenhm5DcrUHr8aUAm4+xm19l6K9X3XXxOUVY5pSYQ0qHe8q7vgjmlIlDbWwZe6HkjKOu1dFCnS0Ni2g9LVHRC7fX6OY96lqMVt0l3VAKzVDOrTvhD1MqQqkUYN1kxLoXWKxkQKVeN4VTO9ji3RuqCOT9cfYFA/ZllWeM6t1C/vpO4axOq1lVOjlQEGX/tUkUhR1sejfhl33HwtWddBpCQpUMrFNNdQVVWwBqZaF1RV/Zh3IaI1UyulWlff1BPBt55OKSSFLij/6G+TCI3zP/q3MAyD4OSGDz7+Q5LPZnz60z+hyCOqLUjWu9hpYmFIF60VrXaD8Szn8y9fMOj79NsHuBfX7BcFtqCWvgVYtk+GoCpMbCMgSkYUlckynpIl17jhNmN9SasNKku5PH7Fqlog4gb3t/c4efMUOwzI9Ij3H9+nubHF+eVTVqsp773zFymriH/4D/6E7/zm73N58Zyb1RVXwxVOYBKnCUUV88vPj+l0dtnc20AnGflqyPUipd99l7i45tc+eIflcko8SymjFWEvpKgqXC9C6QJVRbS6PnGxQJPQ8x6CyEgwKEyJ4bg4vsSyJecXp5hphON4VHGOZWl8r05sSxRFocirEsfzidMFYRiSxDlC27iWh1K1AlHkFWmRU1Ua32mwXC5phh2EhlIYtFoWrWYXx64nfx3Lqz9v3JoF1VWJadbA1DQlZVlSlmr9PYVpWkSrOrHu+y5Kl4DG9XxMw8NxLRzHrL3arsVqtaIq6p+PVgmmJZlOpzi2t5aEBZ4VIIRBLSooLNdhFSW1Z1so4iLFlgaGNijzkjzPkcLCtDws6ZCtMuLFDBtJPB6DMBFSYVrgShfPb9WsaLpg0w9RlURIzWI+REuNVibJ6IqJZeA6IWG4i9IpmpB2/4iiqNi+X59jRGWilYEQGa/ffsEqV7R622xs+RTpgrevjhnOF2xtteg3vW8KE785oIzjmDhOMITEtgOKpEIIMIWk3WwgyOn0BZanePPqhqrICcI2RQG9xiFZdYnKevT7bVQC8WxJo9Wg3zmsK4OESaVSkrhkb/sJJ5czMpUh9YLp/BLLcul3jxhOn+P5HlGUoMkJQoc4WmHZEtuu/TnNTociB89zyLOcxazAd5a0GhukWYzWCZPpiLAVkBYpeVUgtaQsLFotiyxNOT5/xt7OA+bLG0K/Q5FIHBekbZKmOcPri/rNeP3Ldb1FiiENnn11ijJGdPQGGxs+UoUk2Qglal9HuczRusK1BkTJDdPFnMUqpd2TzLImaZKzWqVUhkeWF9ieTRobtFpdVgtNGq8QMiYrR6xWNxw92uTiQmGJBENO0KSE4QZJZHJ1PCJwLN6mz3l7VrNmO/tbdNoDLq4usdyS6bDB4QOTl6+fMZ2NWSxmvPPoA7IExtOXGLri7/3RW5o7j3H7Xb58/YIym7LTbGGQ0HUaPNr9Fp+c/IjBRhfP8QiCmiUQhmBzo8Vg0+H5L5+xvXtIx4doUrC90UHlBfnS58G793j99nOk3qbdDOg0W/SmJtuDPRYzTevhFVU+xxGbqEaLVnMD1zMYj0/YbW/hBRsIXFrdAa9OXnB09JjFcki369JvH1Flz2h3fCzZwvZMtJL8pd//K0yX5yxWK8qqZBrHRDcVlcoZDpfs7OwwzYf4fhPDhabpc//+fRzH4fj4BNPWzOYFjx8/ZpVc8vjgI+LimiTxGE7OaQ42ILVQVoRtCTzdxQtgPFzx8HGHR08GaJ3wP/hX/xKLacrs5XMe3u/zXu4h/sF4zYgJDnd3ML7dJ7dTXFsw6Pp40x4mJfv3e5TECEvTeuCTJAUH9zuETYNf/HzBztY92p0GWToiShPC7n1mowXTCnaPdqhShZoKrIaL4xSURQIoPn7/Xd6evsQN4d7+Ec3AJ+yERNkpRWISBB0cb858ecNklrG7t0m87GKHJW5jwXB8SRD0WKzmBGGff+ev/U/4wXf/CkIIzBevAFj9n/+PTP6j/2AdojBwnTZSulRVhm05RFGG7Ro4jlVLWDXGIF+nvWu5t2bCanX5n003fx1wuWX1LMuqQZkGRJ1SzvMCrSqk5dSAUNehEqgZTyHAMj1uq37+WcVbCkGSRGit6kCO/lpy1VqT5zlh6GKsvYE1i3abnq6fU534VuugiUSpHMu2cN264aLGV7esqUYIffc6hLzteqy/VpYlrgsC4889WbH2FFa6Zvb1er/7FvxpXWJZUFUCrURNforb46dYZ8RAWfUbwRrIIjBNge1YVKVGK1m/VlHdZW8cp+4D1bo+sur2uRYayzXumGJpyK8vpNYA0DItyqxOotfvW32/tyS+YYIqjTtmU9/WJ2koVY5v2LAG9jU7vWaBNRRlAX/3b1EdPSb43d9FGgbd/9c/Yvd7H3O1+ZKd3i7D4SWlhkxFTCcV7aDHzemQdrfDfBbzzuOPyLMRq8WMXuAg0HdgsqoqVqsVRdllFmckr1/S2OjRaAcoL2L8xqFcJrQHbfJVwsZml6ssJRle8+zLBaKM8be7FLOE7uYugdNnOnlOGSneffgBeXVD2LL54e/9Bq4n8PoPSdMU1+xBAo1uC2lsIjOYrybkxDQ6LSoNaJPcuERRcjOZU+obomXIYLBFkmiansXpz39Cq9Vgr7vFs1evaA22OR/NuL78lHc//IgkrbCdgFWcUsQZQeARDjZRmaJS4PshRZaTCsUyiymyFMs2iFYJXq4olSaNl0gNpgRpKqQ0SYsKQypc36klaNul3w9RqqwDaVlJVSqS2ZhFUWEYAtvUdDp9InOOYwe4no3rGhj2OsDluGum3SYrM4pC4fUbKAV5niOod9Ed10Iqk6IsWJUpRVGwXOSgJFUpsQ0bz/UwDMHh/gDDBGNtGynz+vc0yyKQJlVRstHt1TK/ZRA2PFSVUVD3i9q2zXQ6Jc9nuLYHVYUlbdJc1V2Z2qkT73qF5RlEyxSVQVlalBT4jkeR57hOg7LM8cKAqqrwXY+yyimTBVVZUrAiI0cpG9fXLHIDpVdUed1d2u7vM9hyKQtBJQQy2OPovXep8jm6WrBcXXxTmPjPURtka6KoYry85OGDd8gzg7yImMwn5EWKcBxSoTk+viZeunR6FdKc44g2hsiRbgvlR0TZFHBZrN5gGSWBZVEsNG6Y0vT7zOcjbmY/J88TSDTaHeMaLhsbDVarIUrlLFYx0hghZMhidMagv0W5cEmSG5ROQDvo0uDyfInjBjQbHRBLkgQcu0lCgRCKMganarOz46MrjySPmRcLtIp4ePiA+URzcHCf+XJGKS3OXw+xexLf8riZZlhSIYOSdFGwXC3Y3vyQ/qAgzW0G3UOm0xOkTvC8+o3WTsTN9YKkGpIVCY8efMTql6+Il69oPvxLPH/2BQYFyVJjyRmuZ6K0jTYEvnHEaD5mPBry/nvv0LYE3uN7vL48wyFnWS3oeRaO1yNsWBRin/63+nhOj8XJCT/8N/5VLk5yPv2Tv8Vv/8Xvknk+GZLc1FxfCVq9j9jx4OXcw8HC9TN6jXdJ5ymd3YqbyRJ9nGC7kt3HG8wur8hXER/db3N1/hlbzR3O4y/Z6dr0/AbX0yEiaPLs+Ru+873v02ov2d/qcjW95OD+A8TpOdIwSMWKeHnF/YcbZJOYxXyF07Ex7YDVIuGjd+/x1dMRZSbYP9zg4mpJ5SjscEDXMEEJJrNTNNBqtXjy+DscX77ANls8ONrl7M1bnNBFeAPUfM7p2Ut2Dt7jR59+SRjEmKZFGO5xM3pOb9sjSWwanQo/qLi+GLF3b5Mst3jx+isCr0uZJkTFhHS84qMnT2gdNDj/b96y3YO0MtBqhd9rI1TC5ehpzcQ3LJJsRZFCZcYYtoflmsyjOWUZUoSC3/mD30WlIfLtV79C04B2BZm9oL9xiO1PMRF4RovN7Tbz+YSdozaz5Yze1haLxYzZ6oLhuOTb3/qLPH91TqPncbUaE9iSQaPJ6eRzGr0Qv7nN8+Gf4QY555czTLNNv9fkcPceZ8cXPDz4Li/e/Jjx5IZmr0kURTjWDs2Oz+XVFZ2eTSPcJk2OmU1KJvNf4Dk9EAWO1efs7IzBRsiDg9/iB9/7q2itsF68rlnJ/8t/QP7yZW3QNw0M6SClTVXmSKP2UhlGSb/drAu1q9qjqJFoVeL7Llqt7QFCotfgDyo8z0VXt32R+s5fKA2NIe1alq7Neggp1zU2YBoOt+431qXYVVWspeRbmfvrAvDbW1nVoPA24PJ14txAVQo/MHE9iywR6y5KkMKgrEocx6grgdavTwhZAxKtETJdB1G+lttZS+ieZ6+ft6RSNRDVgKpAk2PZHmVuosVa31UapKAoC1yp1pkjiVJF/SJEnZy2DE1ZGLcBbG4BI4BlSlC6ltflmqW8PV4ohJZILIQo10BfrJnXCtPUlKUGUYNHeYsGhcJ1aym0rKiT8LpOeitVYZsGpq0hFWh1WykDQtQl9VrnSEwUxu1b+uf8k64rUZVEVSAMkFqgUWv2VmFaBmVpIP/m36b67d9GGhK++z32tps883qYlosdKvpBm6urFLcJHdchlQnX1zmltshXY0w/wCoqmj2nZoTXR05K8IOCeWHUoZf4lIHaw2kqbk4TWjttpJTYvktrsMUqj1DliKzICAf3uDh+ymCjjev3sfKQUfaCxQp2uwHz2QglWzhuiJQnvH19TdjsYpodQqdPypIi0jRbBlZ3E6fdZTH9ipuh4slH30UKwfGrn3P24oTt7W1GiwWz8RhoMJ9PCRu7LIuUfJ5yOryislsM37ym165oWDZPf/xfklZNgnabMNDkqUVD3mORnRFYFtHKpswLDFujoxir6dHyNqiiFWVSsLV/xPjmkv7uPSzDwJIaK/BwRYLj2uiyDv7mkUJXkKYx0vCodEqZC8JGg0UUoVSBa5sUpYlhSTQ5lSiI5gVZDqZlIqSkqARVlmLqBabdwDQLpNQYQKVyDBniyAZ5EqHNmLLQCFzs2jmC62sM6VIWCkv6lAoqlVIUirgo6vNFuZbqFViWxDAtkqy4A4/LKKkbHzCwHZP5fIllWTQaHklc93gWRYVr2eiiwnY0RZEgtUTlAkmJaQkcyyGOY/KiZnN93ycIGlRVUQeCtUlRgpIZpguB2wUU1trX6ucFplGX6BdFRZHbVLpEiwJDGCgtycqsvi98Wr29bwoTvzmgNB0fUcy5/+gJq6hkOLpG6YxOu0+S5mw2A4q5Rc875KAnyYsIlTqEQcAqOceWLoomUgo2twSPnvyA64uYk8sL/LaLZTUwhUsjcImzFMdx8B2vTpQbNmlkkaQjpKiTWsvFDL9R0G5uc3Z6SZFDq6tJ4hJDmrQ6kiSuSPJLFhdjhKXptjOySpEXCs87IC8ucYKAosrJ5jdImaKlz3K5wLNCpFQcn5wQZQvCzgBlVbx+XfvUdjf2mE4X9Bp9nLbHex//LjenF3i2ZlxY1DXHDYbXr3jy4D7DqeDs6gX/4l/5H/Ljn/1DPvr2b/Dm9XMM6WIFu5z/4iW7/TaNZo9zfUGv4XJ+PGbv/UcUecpCLdjb3+SgfY8Jr3l0+JjVrF5M8Bo+VZXibTSYDyXths3+vT5n11PQJf/Cv/KvEecWs/M/5lu/+QhD2IhAYkQ+G21JvDrnod8Cs8N7rQEb7TaJY7G8WrB/0Kbdc9EnYz7YOyAqC5Ik4+GDd9GUFKlGGymluOLgQZ8WLTrOAOkErJYzHvabnL76GXo15vzlkr1770JWYlYVx+df8O633qW3/YTldcJo+RPICvKsy97hgK9efsIrJ+X+oyd88pN/SjKf07AtQiegWKQo7SIsi+Zgi9VowqvTCXE2x3EkhmFwenPJOJnzePMhy1WCFVoE+Q5CN3C8GybLKbaxCTJCSEnT3yaZvcGRDhfncx69+11m85g0OWVr+5BG6whLZnSiHLOX45oWspDsHLQ4fvMK4RvY2iPJz3EtH9/aRggPVITTkOiyhYlgkczwjR7j6YzOhqbT2eDF6zmtZkS2POXhHbGkwSrRRo+L6ysCv8FspqnMVwwnGyyW4DUUcV5wNb4kyxJ8TxC4TQxHkKtTzi5WbG28z3Q4Io5zBt138Owd8jTGFQ+5uvoRDx48IEsk8+UN0+kndNo7vHzzkiDsUhSa2WxGo9EgSVKmkyXNtkEUL6kqG9/bptXo4jc1WRQQBAGXV8e8894mrt3hX/rLfw0A5+Vb9J/9jPLf/9/ToCQNmghZd0EmsQJd3vUalmVG0HBxbIssW4/PIOqQhYCyyjG4Zfb0mhWql0FsyyCr1pKr8XWlT81Y1kyZFPouYKNUjjRu+xAFNUlYA6m6tsf8mh3U/98eyqoqcT0TaVhUxe33a1BZViVBw6GqFCBrmX0tmVdVQdjwyXNNVYA05ZrdrBkux7PQStRIiHXZObUM7Do2pmWtQzpyHZ6pwWYY1OxJrhXylqUUtwGlCtsxyAvu5GmovYqWJeEuBb+Wz7Woi8J17dmsK4HsO+bTMAyqsqq7U6UgT8u7aiRDGuvjVsuLSZzd9QxKYdwdB8MUFPk6Kb6W56UQKNa+R039vq3L0PWa2dVoDLP+mVsW+mvrQf23Y9kWeVYipLN+/9TaZ1r/vhmGoCoF6uSE/I//BON3alDZ+l/979j4bz9mGV3hWlvotMQxJJbnoq2CbJ7iOSamLlEyx/RMgqbL6uXNuo5Krxljk2UMrpmwWq3wwybR6i2TpWBVRsjE5t7jD7BMjVPZ2H6AK3IGnV/Hb5ucPU+wwzYVMV98+gXNfh9dWjxL85pt1zfkYkIRlygFT5+e0t6YknbnLIcntJpdjMYDbp7/CCfw6A22MWcnXF48ZbQo2T084L3+AWUcoz2Pbt+h1/NZ5i69zW36vQ6r+RVJpChFwAePN9FiQj4tcF2YDFN8NSK6noHqoD2D0EhomD6T+C2dxh7x1YjCbtM1VqhkSponNLqbxNEc122TZTlpGREtFZUICWyBsCYY9MjLKZ2OS5FVdLoh82hBVVlYzpy3L57RbN2j0/Op0hWWaLBczXFkDW5dxyXLMooixzDW1VvSRrpNqGoLSLmuIyoriWmVzJKz2iaRVgR+AylqQIp2KLKUSgjStCLNrhDCXPub69L2SmUYFtiuiZQ2hnHbdSnxrDpYKKVFVRmo0iBJUwzDrIciyrpAfj5fYpkOUFGpgqKoezOlNNFaY5oSwxBIo6DR9OumBSTzWURl10n62TTCtOpzQVVVBI0G82mK1rWaLGWF6ysqpcmzOvgX+nU631ofjzRPMA3FdHxFWUIjbH5TmPjNAeVoeoVpOFRFHeq4d3+H1bKok7KhSxStyLOUQbdHkiwoMjClw2w2Z3vnPkmcU6mcssoIgz7Pv7qg2W4w2NqnrArKJCeJNGle0mz3EUIQRRFS2iQpzCdTHr63xWi4ZDJd4Hp9hFwSZymWE7Kx4zK+sqmKa/aPDrBsQby6YBYNCf0t8sLj7GJGng/Z2jwgKaacnpzSDJpsdrfRWJxfXtLpuLQ6TapSslpO6PQDuv1N3ryZ4Ds297bf4Wa8wDU7dPsNXr89wUDwvtej1egzm57y3pP3+fyXz3j8+DE7HZc8E7geDIKPmF4V9Pt9VnODclWy399nEnmYjRn3Dn+NtEhZZYr9gwccbmU0XZuri1OStMN3v/OETiD4J09HDEcTymiJVaXYdsaHe21U2aJhnOOJkIkqKZIYLxlzNfoFFxd1+bQhU+bpBe/uhZxfCQbKYfB4gzdnb2lYHkboEq1GWKLHo8N72Lbk8vQMR8XcjM7ZOtwjnswpEAS9JnmSQzpne6NDOs9JuKA0E5rBIWhFEl/x6/fexXAsJtNrymTIyfCaovLZ3XofEpf05JKwp1gtprQ8jzevfkTY+jU8f0AlGvzxn/yMh/e3aTY8Li8mRPOCbmuT0WSCcCz8FizTBY4D89UJD3bf4eZyRjMM2Xy4jVE5ROWQvHKx3Yrl8ku2uwekaYxhz5jPMrqdFp/8/B/Q63RwHZ+igvPLS0xhUhUe997d5eTkDUUxR6UVSSmIiAkXOZP5jKPDI8bxJVVh0pAtbDdge6vBZLXAslw8f5vReEGWSyoBVZbgt7oIKTm/PGOZRpRCY6QLbmVcKSVpoVisVgihmMzG9ActDN1hNI1phYdUZYZjByRpQZY4uG6DQle8On6NF/SwijZJVJCWEWkmsKw+eZ5wfPZLHhx9jzS/j6EapOmIg/17VIVfd3FWM7Q0GE9HFGVKXozY3NpH6YyijGk1NsmLFVFcMVudUZYlDx8/4eXLp7z/8Q6rORzuv8/udh3AQUD8n/yNuhJKWjQaIZZpMByOKIqkDratmT2oOxa1/lXwJtayZYVtWRSZXPsGAaGolMIy1wssWiANUaeV1yDMthwMaSFugyiyDqJIaSJNibEOzdxSkDUwULhusAYja3n9n7kpXWGIEoH755jlmsFTa+mzfh6K9fydXsvhRUpRSKThclvEXVX1B4dt2+SZoKpjpfVrVTXgdByLPIey0LDuopRCUGmFkIosq2t4buVdRO2fdJy6+F3rNUC7Y3DBMOoYd1Gpu+Mu0FRVtf4Q0ygtuO37vA3gaARKZRSlQOCs+1PrDLhA13KkZRFV9cUv6/7I+vcboFqnctcF9bfBJ12v8qA1eVYh15Uyt/ehyopGwyXLinptR9bvae0XpfbVCqgtBBph3E4P1oEf21on/5VdH6ZPP0H/zm/VT+Hjjzg6esB/+bd/ws5RzrIQlDogdDxcNO2NkE6nw/MvnnPQfURuaebzSxbD8dpaumZvK4VbWry9iWhseIzOvqJjb9Jo+hTaYbpY8PLkLfNVzm9/52OOb07ZbfYpZMLx6zNMI8SwN8nSC9obIdhglBWuNyGKLJrdHpPVlCxfcHE5Amnz5ukv+M67v8/Dd57w9BdvcP0J4+SSfAnj5Tm+02a5HJMVikr3Obu4ZGdrl6O9j7EwWE5PObjXxKhKjk9HKCsi7DcgNpCq4ueffMnhkw+pipzH732LaDWkHBe8fH2G0TJq2Xk6R+Yxk7enrKKEnX2bbBnjOA4nb05oDBIOj3Y4PXtNOzhga3uPaeOSdBERNAdk2sIwIFtZXI4W9BqbnLxdkqQjDEvS6O8xW7zFDHKaooslXSotscKSbJ5TlAlVWTdfFHnN+ptSoWTOMsrwDQ9FguOYVKWk1+xTqiWW42EYbUxRrmvKQOmULK5AK5bxCN8PMAx77XUWWDYYpiZ0O1RakWcKIerJ1OVyTlEU9PsbTOczwoZPUWS0wgatThfDrBWSqqqDhX7grJlOSVEAKDzPw3Ecam8y69EGhyhKWK3muK6PH7jYtk1RCPzARhgpSkGS5LRbFtfXMxzHQ1APOswm+d2Fm+M4xLpE6ZrplLqiYVv1xemgCUiKovimMPGfY8u7dAjaJmk+ZzpZYRgGjuljWgmh32UalxhOSlzmVIWJZdlEWUaaLZk8y9CqYNDfYhXlFNUE2+wgFFxfTKgocGwf27bwgybRKiYrY4ajK3q9DkII9u53uby+YBHFKGHQ9DeYryLyLKXhb9AMt1i6b2n3+5xdXNHZSDEcCys5ZDS+otkJyCOLaFkws0oqvSAIApAZhU65mp2xuX9AspRI2SJeKPa27hE0NK4f4H57n5fPP8c1DY7e2eTky+ccPD4iMG1cr8Ph5ganl3Py0mW4OGdjSyLFmNXEZ7I8Zmuvx8ODj3j57CX97Q1Woyk/+Oj7XL3N2NsfkK9W9BzJy4uEDb/FbjcgizyKNKbfOaK9ZSDSCu2ZvLf1fTwSsuqG6GZKoXPCVofFyZJB75Bw4DKZX9Pb2ycvYorLJTuBQ5QrzMDGRCFLC7N8Q1R24cak5R8QLWK2+lvoOCdOIm6qN2w5DTr9BvZiRSltnr18Ss9tUhYuWWkgbHAzGx+XJF9xnc452hpw+fynHOzuUXltXp2OAfBcm/HrlwjHoNupCANNKeDtm5/gnVj0/YAg7PPD7x8QlTGbgx5Sl/jVGF0ETMaKjc1dsiTGb1j4acVofEaRmBxtv8NyeYrbb1CsEnxXMx+OCAYmN9NLWu0A6ebcnGeUUUW8+oxeq49ggPSWXFyeYDgFhm+Bocjmc2bzFTsH97C8Hp/84nN0pTCclJbjcH2jUEZJZk8Jwi3iNCdLVgTdFjcXBQUlIjlnlZT49gYv3x6DKHEChTAUhTJYrhbI1ZJ4ZWA5E3qt9wndBCGG9QeShmxV0gq7uIFkNnMp0hRD71Dkp+TViHlyiud00Njs7h4wHk9YRVNsy8e1WrhOxXDynHbX52r4nEZLEfrbWE7KfHZJq6WIogjXClCVTVElROkVjtfBNByabYlnbzOenpBFAsspSROFYw1I0jlKjxkMtlGVzWw2ote3yRMIvE2++/6/jEZjPntF+eOfkL98cyfPGoZEWRbj8Q2NVmsdSKmlzbqTTqLUbaH3Gt5ojSZDSh+0RMg63CKFpCpLpFlhGOvdayo0tVdQr4GNXkufNaCRVKrAtCscxyVPaxZPA4YU5EVOu9NACoOq5C5B/M/ehFA4rkEWK7RaL8RojdAgja9BzV2CW1CDX0uide3dugNS60COkPWGslbyLkmtdXUHlOsScJPbyiCocaPS1boax0LpW/ZOcbsWKSUUha5ZRF2t3wdBUai6lqX+Si3XGsbaRlBP7pWVrGuVyprZFGtwrbXCMGsvabEOyN/WG92my7O8/oD7VbBV+ze5Cyh97ZsUa7+sQMjb0FT9Ao3174BSt8C+QlXiTmbW+usZzPpDXaMqs84QrX+23iSvk/CmYVOIOrBTPH+Jt04Fie99l1ZrwJP37vPslz/hZlVy/17A5HTI9z78TRbT1xilRBmK2KgILJud/gBr08bgzRrEgxYat+XSsHKWVzFPnvwaN8cnJJHDRj+gqX0Ump0ti6df/iP83hbDSKExaXoBlY4ZTV/iGwF+OODNzSkPjx4wmiZcTcaM0xW93jZ57PHuO9/DshcI/YjZSnNyPcLtGBQqB8ul3fKxpYfh2Dx98TndVp/z81e4Zt0f/cWzp0BCvoy4t3/IzegVqRnRGGyTKMHOgw6tpsfGfJeszPAck6vxFXsH25htycF7H1CkS+LpitQtmF1OePFswQ//hd/j5OwX/ORPzvnhb72Lkh7j61OOX79ic3ObcvqUL375nIdPHvPi8x/zwQ/+AmE15c2bKa1+G9eecX5xwc7OfWbRBFW4dIl5/OB3yCp4e/ycwAyYTTVB38EUOX7DxzMElmWSqBXCAEea6Bx6YYtKTpCqidA5QbOkKmMM7ZLnCUouySqjbpcQupaOVX3BGYYNQNJuhSRpVHuGqUNl0+kUrQWqEiiR1t5kXa3/RjTddpsky5DSZLGIWSxWdZWha98x955X19ilaYRpmggJtlmzk4bxdQXZbLZCCEEYNtf9njF5nqJUSaPRwLZa2I5DM6xDhbu7+2RZVvfcAmVZqy5SSsx1J2ca5yiV47ous0kEgOua9TCM9eerx/5/3b4xoMRJmS8DDCGJiiktv4UiY7Kc0ep2UJGFYVUsVhGtdkhexmQ6J6mWpMmMnf4u48mCvEiodIZtQhlnWI5JM2wxW1yQJZLT66imo3VJt9fCdGyqqmIyG7NcVVzeDOttX2dCkZmsVgtcp+Dli1eY7pIXL4Z0Wrsk8wFllSKNBc3giI63Tz/QhA8GeLbD8fEbjh62ef3yFcthxfe/9TuslgWZnWGZgsZGyWo+xrVDhhMJzYQHewfMx1NW8yUfP/wWmRnze3/hN0hTSV7luJbg/uEmGzu7KFPxxdP/it7GNm1/l2S5xO3ndDsODzfucaPekKzmHBy0UWmOEe6QRSs+fNSj1dxjNLvEc5aETpvJOOZ+o8nl5THZQrC7c8R4NCe1uyRGyiLPsLVBd3+LKE9ZFRmHWz2Ob5bkFRCtkFbB/v0HvHn9GY1GiOPu0glTpssYN68wrYKtbpuTV88I3BBLSIaLKRv7bUY3QwK3hWda9HY6mCJldLkkqBoUIiJsetAeYFKwHSmWxxM2dx/y/PKcR/fuczU64+b4M6xem3avjzJ9pKEokxnKhIfvfIRn+oyiBZUQeJ0B7YbHFy9+gcgXbGw3SZcFQrqMixssW/KjP/uKew92GK1uaIkdtG2TaQsv3CYqMzJZEFUFbSnRrkGSTYjm4Dcb5EIjTIPF8obFbM7R/YC9g22OTyYMR3Nc1wbTImj6XF1fo90LnNLnaNtjvLIpKkGavsVutpguJLutkDiZgPKpFFRVxmS64sNHT7i+SslLxXx5hRITHm/+gMWqIK8SykJQZi6Gqek071HkApTzK0RYDUiC0CFLKwJ7i+HkFVJe0A53cW0DIeR6HlNyc3GO5Sl6PY/pWJDqlNCp8NwmVRHS7ifkUcDlbETgPWY8vqDRFrRbuyAtxpMzMEqa7Q2WyyWu1WZ38ztIBIG9jbBy8krRCgZ8+eU/pdvtcrj3baaLS7I4xXYEpydzul2Tv/Tbf0i/twtr6LH6j/9TKlWuK1Vqlu38/Jw8r+CWOdI1j3c7VaiqukNQ6XoTuKpKLEvWG758zU5qLdEUmBbkRb0FXRNziqrSuK6FEJqiYp0EFhiGQZalOJ64C6isjZrcVt+YpqDI1TrVXL8pX4MZ1v9frpd3xO2P12xhpTGsOvihlIVYV+XUm8j1+kuN12pmtg6trP2QuiDLJVpb3G17i7qc3bEhzwvQa+CsxVrSXoNmrUA7tbdUfZ1K10phmgYIq/aHCYmkZnalAMNQpFmOEA5aVDWrt24bMMxaMqzKmjX/GluvU+y6JM8FrCfa6jnM2qsp5K/+jLwL9+R5gefaSFmR5yVS2uuOP7hN3RhGzZ4qLTBupxwNowbkxnqzXVq1R/KOb62ZXMPQKMWa4f3arnBbkG9bBnmerUGmoHjzhuJP/hTxW7+JlILgf/G/Zuvf/Q6f/uk/pOGHuCqj3W5wMR/z5P3HPPvpZ3zn4x+A45Be3ZBLl6OPjhDWf3Pnh0XAPLqmub9DtUy5uDijN9hBWkumswsqJ6BIDRo4NHoD4vEQEYQsS43pdimrjMEg5O3LY26iGUtt8Pf+5Gfs32tyMnxLr9Ngsbpkd/NjXp7+U1qdEKmekBRDHJGgyTh58Yb7e3sslinYTTZcg739BqOJIptN6AYm8bUkzmI6Gz55bvH8+ikqi9ja3eDZyzP6gx2urq44P4ftvftMr14TJ0t0ecXzlydIp8Huzj1m0yWmyBgdn5JPl/yVf/URx6+mfPzt38PK/zFCVbCMSAqDKo4oGx0sZ8L1yRv6Pc33fn1AXp6SRcfMxydcnIbsPxgwHp4wPr2m0+vTHSyZXPyc4dzg/r1NjDxn9+BdGq0L0CmzlSROpuQqJHM85rmL77ukUYYNSKtECB9tGBjCI8kqtJJoUpJ8SlWKOtW9mCAxQRR4jgFGgWk5ZGlJUS1wHIdlluJaAWgI3FpxaPfblFRUZYllWRTr89tyFa9XrwysoPYydjodqqpY92OuS92VIgj9NXgsUbpCVSVaW6RpvP59rRUUrTW2bZLnJbblk2UZs2lMWdaTpaasVRFNhW3XrQhVVeH4QT1p6trA2ocZ1gn12WyF49QzmKt4QZrWIPOb3r4xoNSmS9hqEq0Sgk4LTINMT7G7BV+dfE6RZNiOoN/Z5PrqhGbTR1frBKcrMQ0Dped4XkBZaMbzr1BSMLw2afdzBp0DKqUJ/R6WZTFfjBFKkKwi0jTG8RqYpkOvu0USF0TxDJUFXJ8veHDwCL//hDi7pOn2cS0fx+oS5yPeHk/Y2dmkFdgsZ1O2DzQ312cc7YeEZoO9wS6Ru8BNKnQJ7xw+5Pj4LXE6ouGHdHo2fmhxb+cxL54+Iy4UR5tdrMREmpp4ueLVmwnfe7JHZeds9raZ3Qy5uPmchjFgcTNlMGjRtrucv3zD9vY+56fP6faaLJcOumVw+SbBDaZsb++hCoOLi9d4boClm0xWr7Fdn4UJO9854vL5Bcfnp1yejdENQbxaEWXXVHmCY/bohDbHV0MWuwLDF7SqBqtywbhYMJ+eskgKdN9gtbrGC3bZsjJ8o2QVai5PU7b2H/Dl8accNTdoNUMqHxgtaAb7jK5fksxtJmqGbUiMGwMszWUW42f13nGzuUtjO+D6ZoYVmERqSVlZ7L77LbAMVFFg2iVFLEgigd1eMo8VRkvS6+zwk5/+EwY7M7TwSZYJrqMYz3PcdovJ5BLHSShGGfcO7/H61THNZp9CWdzMXjNcJCQ3S5qtEqVyvF6beRlzeXmJ55X4zQbj1YQ4GdEMGmCECG/IyfWM/sY90mJBx3Upy5K0ULhhQJaO6Lg+ItdQbbG7C0+f/wTHDnEdlzTNmUwmWP6Ky2HKwA1x/QZVkrCIV5SlJlNzPMdCGHukS4c0XmK7JVmcMBgMiFYpUWqQFwlbvvpaqUSgDcUqLXAtRZzkLJcxT9495Oz8GXawgSEcdAXT0ZQ0Lmi1+5S6wjIrHj1+yOs3z5CyVXsTsxDXbZBnFav4klxlLFeS5eoNWVZLzM2Ww9nrlE4v5GZ4RpXPMc2cphcwnK548M4GF2dv2N/ZxcDjy88+4YNvf8gvz57hBxaDwQaH+495fP+Hte/n+SvSv/4fkb14zm0a27JtlssVs9mslmrKHNOoy8NrKTVHaVlLr+KWCatDMo5nrJnAWm6tgzm1708KWcvY60UZRN0jaZg1y4C4ZcLq0IZhyHqzWhlrQCbX39NrfydoZSDlbYRYrP2Qv3ICteqAyt1zupttBK1KDGlRarn2Za6ZxEphmArTdMizGoDWQExQ5BVeYFGpqgY/8i5DhNKgdI4h16zpultRConSCk3NQCilqenYGswLLUDUyztVad35DO8KuKlT8Ia0arCua8laihqI2l6dUNda3jG8tQNAoVWBFCCEXTONa7ZFCEG59qXmeYmQ1jrFre7AlmlRL5Ssd8zXOaDaz2oIpFQslyVSOtQ+0tsC97rQvCg0Stm/Ir/XaFSpeha3BtRyzU4q9C3wloJKlyDMu/UgIQTZT3+K9Zs/rL2j3/oYUb3D0e59/O4ODdciz86JjQovlfQOBhQTzb33tvn3/+v/B9/58LfZuDinWVXY6/dTSoljODid+wh/yvX5MeeXF3SbHrvte3x1+ZxO6JJHKaVRcG9nh6cvRrT2GqT5BYt5zGrusL19wMXLK0ajK8bxnOw5bA6OsAybF69esswmJNWIF6c+Qp0y6DW5f3hAMxygqjMqMk5OL7HskMB+h6fPnzKPNEdHTzh8/F0+++yTmlFbCo5ffEFZwK99/Jc4Pb5he3MbXSW0vAbDqznPPv1TlonAtWBj0KSsUvJlwnhmohx4e3bMoGXi9h9yfJWSOXOmeY8PfvA9vvj5j/H6Eh1X+GFIZa7Y2L7Pf//+uzw/eUWabzG5eokSNm6vg9kqWUZXvPvoHr/8+TOMIqOYSZ49v+LwyQ8oohvePv2CaBbTa/qsxkuUG7C91eb125e8991fxxu0KeKI0GlQVDDJlugoQZAxm9X716Zp47gmXmPAyckx01fnbG9vc7D3CNcziOMU27GIo5y0iLG0pMgqhFTkVY4QGtsReHZAlK7Q1ApAlmU4jsNsusC27fX0aURRViRJguM4eJ6Hbds1+CwKHLOesZRS3oV0qrIgTVOEMPB9p94/p/5bMAwL06y/b1oGtuMihCZN6xxKHQjyYd1dq1GsojoolKU1kBVCUKQ1sDUMk9lsRpIk7O3t4XkelmV9U5j4zQFlVRpMp2Msp6BUGVUWkhcOURzR7NTpRilskCmb29tEq5KijAn8LvsHDxiPztGmyebeDp/87BNSfUXoH3H85oqH722zGi/RSuD7AbZl02422dzc5Oz4FKMK6fc8bm7GdJstaCrSNCXNTL71zvfwjBDJgkFrC60dXCvEkIqXr5c82DskaGo8WdLobuIIgVVKHj85YDl1kI0cW6f4po3bSIlXl7Q7AmPpMZknzKcuwrS4HL8i6AhkY4OqWCFsgUqXqMDl8YM+r1+cgAXj2TllVrLb7ZDHFsJuk8Y224cHJIXJcLTA8Q3GyzlFHpJczIiZ4lcei+EEDJM4yXB9h1VkcHpsM9jWvL65If7qEpHkPH7nHqfTMwZhi3aziSsttHJRnDO6SgkdjyKacV5WSDOhISrShY21GlNIl9UoQ4SK6fSK7Z0HXI1ipqsl1/MFjxpwdXXOw6MjGsLjkz/+hKNH+5xevMKxK9JiSWFbhI2Q6XAKpsWjw0NibTI9O2Ej3OPq5JisNChFyRcvnrEaL/nu7ve5Ph4RNgOi6ApMC9EICQ0DvUj5xy8+49H9XSzPZRmVpNxg+5KSgFRGVGqJ3dbkeUmOxauTN3huQJYWVFXMqDKJ85gg2CIrhti2z9n5MarK6DV90kLgOV1G1wt27z9AF3B5OsQOFHneZzxZ4DfBDRyWixVRFCNNi92dDSY3S4J2wdvRW+YvrgjaFY32BqHXQEqDRmgzT6/YP+pwen1F6ElUVlIJmM+v2X98gK5stIgxpWJ/b4NXb3+B57dpNAIMQ+CGbaLVlCgqfkUU1IBDEHT4/It/hGEYbO++y7MX1/Q2Gpxd1ICsrDJsK6M72OX5s7dsbnVAaoajC8IwZLo85eqsYHfngKi6IvAN1Cpkb2ePi8sxe0c2z58fk8UCx5fs7b9Dr7PPH//p36PbjxCiXoqoSPjlL8e0mgFlkVAUFZv9XX7+01/Q7+9jSItXrz/nX/6r/0tAYD5/TfmjHxP9zf8cKeoTl1L1xN/w5qZmvkTNfJnG2rtYqXWP220gRd+BQK2rtVdQrFdRailZlQpDCEzpIvRtIrxmFuvHW8uqrDsZ6497NFU9H5lKpOGvuwpvAzrGWp7/um/RMEy0Kv/cedEPbZIkA9b1NzXNSlWV2KaouxdvmbM7Dk1hmpKiWHsjb32dei31GtRSrlx3SVIfD0HNMpYF6wT17aqPrtk6sw4hKQ3G+sOjDruAUjlFWYJ21v2dJVLWQLtm+iRFXj+eYZig665OJRSVytaStcNaFaauVaqlctM0QTmoW3D6tRUVadSesLrknPoborYV1InXOg1eh77XPaCVxrTWgFDXFwJKq/VsYw0OHddCiAql5d1jfV1Kr7FMQVmZt/zs1+YApZFWff9ZzhrA1otKxfMXd3K1/N732NjcZuNf+tf54sv/gu3BfWZThySa8OpmzHavzSxa8KOf/zG/+85DKiLK9e/t7WOWVYWyfERW0AuOkEcbpMVLgrJBRUZva8BsMWaZxjRbm+Syw8aei9+BLz57yubWQ+LxhEJEjCdXTE+uEYGm03oXsxyQRRVP7v8Wnz/9rxCVS9ttsbfrsCocnj+NeHQUEi8MCrXEMHPKqGI6m7CaKr71rQ958/qc/+pv/9dEagam5NHe+2z2fE6OUybzC2zf4ObqnMVsSbK1gWcbNCyDvLgmTQ1azftc3bxhOhkSBi1uRnPC5gGHu4I/e3XKYlbS32xw8/YYvdGm3dqksiSb25rlSNFoejRbHRB1lZ9pBDx81OOTz04ZbPq4bpvL0yXD4YgnHx/iWF0W0YqjhwWX5y/x77f5wfff58vnX1JkA/IkJUsVsd8lNCtefPoPkI0AT0qWlcBuNNCBh5Er/KZF70GP4U1CoxVSlinxqqLd3OM7732fSi85v5jSVA2SRBGntX0iV5rRzZxeZw/TTRBIsjzmZngBuc/WTodK2WRJPcwQxxFCSMoSsiLGdV2kdJCinqbUlUm8qqdk685UDXK98HQXBqwVF8OQZFlBltZ/RlmWIaTGdV2UKqmqrF4RE/VFo+NI2u0uaZpiWRZVVZCVNeMa+iFivTqWZRl+aGHbHmVZ0mYXwzBQuiSOV8zn028KE785oCzSOXG8wvMtXr24ot/v8+DxI6pU8tUnn7F/fwPbHnB1M2J7J+RmHGGakuvRkEJ7CBuU2eTV6Vf0NjfJMw9T2Pzl398ndBQR1/S6bZIkZrmcsL25hSSm1wvYGOwwWlzxwZPvMZ2O2dr1EZXL5fkVvhPQ63c4v1hyffEKpWLu7T+k27UIrRa+G9C09qBakZYRq3GMb/usxiturl+xu7tPx+/x4vnnbO3XI/OXl1fYZoPDwx1uxiMECaMbsESB9vvM5wssU+L6HpeLmAdH25ibKaPrSwZek8ONA07entLelBhVQGlM+MmzP2Zv8C5KXzHJM3x7HymHdPtdorJgVDVoOorZ/Izt7V2GWcKgt0EjtpnOMlp9B65jth4+YTh+i9/RdHpHlJevGZULQt9lY3CPVzdfIrTNwf5j8lc/Jpqf88VkzHc/fI/HB7/Baq64vj7mqPmQM55RRIJxPqPf8CCLiaIr3r33LjdnZxS2z+H+IV7LIa5y5sqmMwgolwUytwi3Quaq5O34EmsZUdptnp0fs729SbayaSQpBjG9B4fM5m9xbIXpWxhFH8Oz+PkXn7MVbtFsWxhmyZeffsHW5i7LcondcEijkjhNsD3FcjTEa/qEwT6vLucU5Rk7fosyV/i+Q1YFGPY107nCCgKipUk8rzCEIAsUvtdlOhyRpDNGN5o8jdnstVlGJqZfSw2d1iPiOAZt0rBsWrZHNE0xHMXl1YSracS3j34NN1yyTFcYWcpoPEfrHbYOPuLnP/vHCEvhNRWuKVhEK/b29hmPcxzHYBWvcDoF8TJls/stlHLxQji/nBBUExwLRsNh7cFbV8UYVsrbt8/JzEuKpIOfXGGFK04vlwzHJ3zvg3+FOB2yWKaURYI2V1yMT+h3d5lMa1nVtJpY3imL5ZDdg4DFvKDMDZ6/OKbRLsjifRxrQCxekafbnB7f8PzpL2k391hMxyQr8B3F4NBmNtVMJiNk06Pf2UXTYavvk6sp55fP+Lf/9f8tvfbeHYiK/5O/UQMONFWlcB2b0XCI49jESYWQ4m7dxTDqLknbNRHSpCxvuxkNqkphGBLHNVnN63Q4a89gpSparQpNgdYG4m5jui7xdZyaDa/lYM3tak3d7C0xDbcuJ15LrbeAqCwr0Baamu2rKoXSf56hrC+kTZQQd8BQq7qE3HFc4jjDkA5qDQzrvkUoVYbWNnWaRK1B4ZoZVdUdU3groWsNwlCYhk1VVrXXUnwNVauqZjbruUG5fiyxXgmpkIbA9TziJQhZ3X1fqzppXROLtxVFCkPWEWspBabBrwRnvvY6ag2ObWFZgjS+lXnV2vwPghKtS1Rl1d2X9fbJ+shJXNcmTeqFnHpbXK7tBupu2UerdY+glnf+TK3Ueu/euJt9ZB0YUuvfE99zmC+yXwG3t1VQCteFSpWUZX0fQtTSujg+YfF/+A/p/Lv/DghB++qS6OhjOhtX/OSf/oSgV7JIU5bANPNJowVZ4nKv00KUKekSpLkuyAd0VWFrE6Ph8snznzPobdHv9YAQoV2i0y9oNhwoJD2/QSGWGC6gXaTZRYsmH3zrHl88f8qg9Zh3vvM9jj7q8er1U6Y3c+wyYNuXzBv3+f3/1h+SpYq3r4ds7jU5Of2c18fP2d09JFmeU6UtdrY/5Pz0Zzw+uMfJ8yV5WvL+owcYYptlNuVof5vF0sawpmzv9Th/fcO9zQ2yfsiPfvELeptNyqSkKUwMy0XbXcJByjSKmE0jNgYhl1cXfLa0cD0Dc6uLWWhMkXPx5hyj5dC1SxruDtn2CJkuub5cUZo2m5uHjC9fUXY38UMPdIvZbEKzYyC1z8N773F9PefR4x6nZxWdDYs4ylilId/+6Hd5/eo5R+8ekJYR0lCMLs/o97aIohWdQZd8PsetNNOLCfsDl2hSMB9OKZXF05MXtNo7bAy2qRjyi8/PENYMVbqUqo+QJllW4rs9ev0WfhggdYDnWxSZgUKjKCh0xunNcy5OMv7yH/4BZZljSQMpTaIoQktBUWQUaUGWJTVr6UhMy0LkGqGNujlBK1zXJcsSQJKlBYZZn7Pq/fGSslxvl1sOi8WCwG8A4LnW+oK4rjCaTubkRVp7sEWFMA1kaSNEQVHVFWy2VYNby7DwHI+8TMmypF4qs008r/9NYeI/Rw+l2yeOKjynycamR1UVXN+MqYRg63CbwPQJvBJZBcxuVuxudbGMkLPqnOub5xhGi7JIaDR8Bv0ehrFFWc4o0wRX+hiyJPANGn6fhjtgtbpmtZiTJSaJHLHR8GG2ZC/okY0LfNtl1x5wevIVh502MpP0+g6+t8nVySUuIfe2G7x5PWR3o8lwnFOqBWWkCEOD5SIBHfHm1TPu39th+6hFGPQock2nt4Fh2piOy+buBrPpklU0pxA2skzZ3drk8iylu32Inl3x7JMv2Nns8uR+nzxySPM53R2LqpKs4isKDY4QpNkU15OsRoLR4jlH9zfIqya2NcBphyhK+rsDChMwfL5685IHD3Y5Pr8gToekUhPFM0QF25sD0mJF1gnZd3ssltfE8xXYNqJt8/LZz9HpmI6/hW/v0nYecXJ5zIN791ks97i6nrCxs8WbZ0/xAhe30eWgkiw8Az25YW5LUCZjHaFSm6DbYHQREY8VhlNSkSPFgCBd4toxQXeT88kVUkqkaqG4IbUVm4ffYpEaPD97zdFhj6ubFYEZkl4PcYVBKVdcT6HhhshQkjAmLn1c0STPp4jcIK4SbHfA8jqiuXFNrJ/TskLyJKO9s8vNzVuK5Iw4yjCQGMUpZdqj2wsIgw5axLx5+5peq03XdwilYKnhcnSD4zRxaXO5eMoijpCliWvZSCdjmST47oDJbIbXaLIvewQdk7enZzQ7h1xnY8ywg3BTPv3y/0mSm4ReiSGPsNo5k3HCdbnCdudkyqXTuc8iWhGlYw6PvsPJmwXZdcXeziaXVxO047HT7wKTO1kyiTNKNcc3m4yWCrtv0my3SWYLHu/+JleXxwhnyHIhmJbHZKlmc/PbuE5AUa24PF3y+NEBrhmTZwavXl0TLTW//r0f4E8EBSeoUjK8uaDVCVmtVggVUGqXB1sDls/G9HuCqCiR6ggpT7AdycvXN6TbId/+8F0Wrz7n/fe/xX/vr/zP2dp8DIDx7BXFf/Qfw8lJLSUrjeVaxFFEkqQ0mw0qVVFWtY9PaZBKUScbbeJVDRIUdem20hrbNFBl3f0ojdu0dN3v2PDbzBcRep0yrr8nkbJA4KJ1yW2c5Bbcmpaknmq89UXW/6+VxpAadZcSr312dSq8+vMnUMMkz9SdRUFQdzUahsYwQWCuwyKs2T1BpUrqzhKvRp/r76EFVZmCkEjh1MEaue5+FBKhajmXdZBH61tt/dYvWlKV5rqeCISo+dWyUihRUuQCwW1oSa5BbIFtGxjSuAPEt3SpXLOzhmnVlgFds56sQSeAYcl6z1nJ2/GcO+CspcKxbcpcgtT181+nuLXKyNKIvDTXIaJbIFpXAgWOA0ZFpav1cauPgxSSsiioZ7Ot2ye7ZqTryiXLFsRJRFlZ66Wkas1R1ry/aUnKvEBrBy1u941qST/+z/5zwtDA/Nf+TYSQBMenvPP4L2OUNtPFObtOzHKWkJSSjtugPTB5dT2iv7lDYV3evsmg63m9YXRNeuXT7lhk6YSrcRerGiO9Hg/f/QGT2XO8wOD8aoprwejtiu2jDtuDDcaL54znH/Bw9wN22ido2yPRfXZ7PrtbYwbuQ4aLM/7Chs/FaIJnlgSuwyoesdn+GNtOKIo519cJ/e4+jXCCruDliyG4Ph8fPaDbcfjRp8/Z2tji+es3bG1vYGQwOT4lqSa8fPaW1obF3uYGWlfEBPQe7LG6esn5eIVpaUyd4HcScunRanWxvYSnX854/N6ARXVJo3WA5ZpU6QSjsji9vMDbkEyTFVWm8EWP0mrghA6mJ2ikFaaTsNm7T7J6wcXFhJ99Juhv7XB9k9JotnlxdsxGZwMzzZlfjPjgow+JyiHVSBBFmq17W0hCdrq7WB7o/X3GozOaRcyLZxM2tm1sEpxGwFZHMH79Ga/e/hTR7LL/bp+XPz3Fd22qNCeRLu++e4+FSkjikDieE0+mNHcHXB9P6fYCDrcfcH4cYMsbfvibbaazjLLIEZZFXI7pOB5WlTBbJPTbBo4dIDPFLFowiyM86RF2NrFFQlZMuRn7tG0P0XSx0hTDEpSGha3AKgR+z60v0kREurJJYzD9iqRMWM5KPL9OsBtmiR9YpImk0QwwpH332SKN+txW769r8qIgimMs2yTP62VAw1B1zdY3vP1zFJt30cWUZtjh9M2E7Z0DVskVYbNJx96qdy+bJqlr8q33f0iRJ5wdX9F1S7a7XeZJxf7eDmk8ZzoaMxgM6HV6DK+GpMuczbCLihPCpo3KZzTcgEjVO7qNtkGS5xzubnH8ZoHp5QgqLEvS2Q4ZLRYM+jar1Cdd5LSaHmlc0vCatDtNltGIvFR02h5VLrEcRau5xdX1lFIOuZ7d0OzucXI9phGESCegUjbX04jOwMRt+7TaXWyrweXVCTcTRXPTYbYwmK8K/GaLm6lE+gaz1Zx2Y5tVvKBUK0zPwnMrsDyKPKYoBaVR0O40SQrN6c3PMEzFTq/HYiRRC4m2NWlyhiUkn352ih04OJZEk7HInjNoH5Ekmun4As8PqAhJF4pJtWRv+wmno0ssI6Y72KBKPD54ssfw9ZiNjTbzYYWph4wX13S9A1oDB6omi/mcjtvCzDXQYeCDX9mknodudJlf/RLbsVhNl+xsDBC6wdVoSmhNmc4FctDAMn1c6UKZs4oTlBTcXMakRc5AKPy4xSqJWWRjWq0Wjx8fMZ/FSBxMp57sTKohqhxhmg2iVCMMGysQiEJj2jU9v735CKMoyMuYs/MX5HnOwVa3NjjnBsObHOQK1+8hvRmBt8O7rfscv3xFf2+AZWquFlOwLDYPthlNJ2wNjsjiCOEpNrYbnLzNaPqPKMoCz60ohIXjdEEvcD2DxWqIa+8wiz5HV1sUcYlrw2pkIbIVlr/AthrcTF7jlm1aYU6lV1xeXvL48Xd4+fw1SZpz0N7nzZsXdAcbfPLpP2Gz7N4FV7TWFHnGdCy49/A76PIlZxdLHvn3KPWC6aJAyQXRvKTVaPL43u/y6Wc/xzX76BKkTNne6XN88SN67V3arT5e0CNNM84vn5FXQ/Y2PyZORzQbfXq9FEmD2bSg3fiQr375gjAoGfRDqmHJbDinVDlPHnzAhr/inSf3efPqC/67/53/Gf3Bo7VvEYynL0n/+v+N4u/+EaZh1BKrrFcZTsen2Ja1lmYkWtWLSlVVgDKx1rNldfegpp7ng6LKMRxFWQLYdwxlDWAMVsmyLsdGrJdK6vuWQpPlEUrZa6bv6woeIVTt31tLzbddh7WUWqK1W1/VC/PuJKz+Gcm7KBRgf/2FdUm4UiWqMn4FyNTHpvZPAtKop9OEQFHVcjzrdHsFStXAt/YMyrXEXwd0qtJYM3T1a1FVvRgDIKVDWep1iKVmupWuqKoSVdnr18ndzKNSde+nzE3qUM3XFT516r2gKBR6DX6FvD2GEqUypDTIsgIh7PUrFes5HBBUVBXotdXglrmsO0IFNbxfWyF0fSyq9coM8rYoHu6SOqJmVKVRy3xpeuurXLPNyLsJPSFkfaEguLMi3N5XfcHgUuQlpnM7E1n7UKWhyf7W3yDLBO5f+2uYhoHx/JQHT36PZ8//Pmevf4QT2vjNNv12g9Uk5d5hQLYcY1cmaRoT6NvfjZTTsxvoH3J0YJMu51SpQWe74mb6Gjd8n2KpQZYgEyw/5N77D3BsQSOwCTs+rlOf+4ezksloSG87JGjD8dWSwnmB0bAYns6Zpxm9oyf0tuDyYkayGrG940B6gK0K9rYesoyuaCB55+CAlIKgqnDKkkd7DWDIamUTlIe0t9pML69omD7GoIvr9egPUj755VsKp+4etuUjbOcZP/3FS35w72PGiwnRYsje7i6/fHnGKplzeXPNbByTdK6BCWmac8/6DVqdKaO5ZtA5qPfWlY/b9lmMz4iXC0Sry2QGZ+PndAPBzr33SNN6vWd6OccPW7RcyXQ0ZmZahE3F4vQCgxZat+nfM8jOfGQA0fyS5VWKGFRkw4ToZsY73/4elpCUpY2WDqHM8DfhxfSYg7aLuJqy1W5iSI9k8YqFrbm8EtimgihicpnS6oeYSUrLMHjw6CFnF/9vOlv7eGGTMjMp0gwtXAxsHGExnUZ4ThtTOJwOI/wwolyZtNpbbLhTqjJFpxMMt4koApI8JrAyVhOT0LbJkxV5ZGM4JbmjUZnCtjyimUGj5WGHCYbooFjR27dJ0jlCGCSxpipKwsACJYmTCNNy1o0PiqIo1otgRl0dhiCOCoSwCEOPrztwv9ntGwPKrY0urm0jRMIf/N7vcfJ2yMHWFmEz4O3bE/qNDo6RsrWxweh8ytH9PvOWiRIhRTXhwTsPmA5Tjna3aPklZTlDqBaOYRK2TBazFNNo4loBoT9gFp3htzz6/Q3iOKbMSibzFNOVCFOxubvP9cUbDHuTeQqWKrgeTWm2OjiuwLA7XE1X7N1r8eXTayzL4uWbCwbdTcok4mqyYDIt6fQsylxwff4aVcYsC4eg2UBVOfN0xtXJDdvb20wWNnl2jed5tHoWni95+eKEoGmTFzFWQ/FqeE6x7GG3lqggwqyaDIfXbGz2GE+XCGtIunTwg3rE/fpyQX9TEq1gOlnhmCGGaSKcCq1TRKVoeQ2k2cayUqIoor+1y5tnI+4d7OJHMUWccL2YY+PT3m6TFTP2+7tMZqfsbB5hK4/p5ILMjHh+8pJ20CSVPQaDAbPqhkb3HourY1xDUloGRiERXpvu4RaXP/0z3K0BN6dfcbj9hCgZoWJBXuXoYo7rCULfIipMoiKi2W9CrFnFQ7QysG1I4gjb95ljstIZ49WYw+3turqoMOm6HcaTc0QmsJxdCpmz2eswnV3T32iSLW2ixRWVY7C1ucvb8xtMRxJYkk5vk3w0p9X2sQ2bpEjZ2tjEkS0SzpHSBjPj7dkZ9w4+ZmOzy9n5G+7dO6SsHPa27lFmFUJFlJUkSkpmizOUtYe2AzI5ZrDVQxctKln/uzQp6Pd3+PLlL0nMnE6ny/MvP2Vr7wmHu4e0QofVNEMVh2RZjqFv6DcDlpGgzKDIJZ/8/GeELZsw2ODNqwsyfcHk1TUPHg9YvLlaJ5HrD0LLsimLOSevrnEa4AWS6Syh02uzXM4ocof3n3zE+dkzzi9fc/SgSVnOubpeMJ1O+fD974GYI4WDVgZlUdHtdnn7ds7+7ju0mwYvfjTE9xwGnR1mk4JmuEIx5HB/A8fKyOIMzIKDe00Wk5LpqJaADbHBb/7W7zPYeFR7fJ6/BA3J//Wvk/6tv4NtW+taCgPbtri+vqKqSkzTpSyrut9M1LJxVRkgFY5R9yuW5dpEvj4O6App1OEPrRVyDcDqLemMNFco5dTy8RqDaF1hWiC0sWbz6uPKmgm1LYMsv21MrP8TQlKqCsMw17OHdfWQkDULZlp/vthcSANV3Vb+3FYfqXpqGtas3rq6iHpT2HYklu2zyvQtUVh7GMuSsGFjGJo0rf2Sel2dpJXGdm5DSrX3tK4SkutAkF4HftZl5+vwS50QXydHS+NO1q9fT31sTUtwm/65a0a6XdmhwnF88sReezK585nWtU0gpY2ubtlSfedLNA2oSv11+Ti3YaUKz3WwLFWXrN8eql+xE0gD4jin3hW/vQCopXfPtqiqkjyHekLzdnpSriV/qJSoK6UMffuU1uxrVddC5WuvrarWUr2kLHLaoY/nam7+xt+kKCoa//a/iWmaWK9OefToL2AieXn6j1GygerYHN98yuHWARYGs/mQTcsB0vodlyaHh3v039/k5eunBB2Hvg/jqxzLOWKZWlyMX3F/9z7b3W3m8QgdwmK1pDIkVxcjQieiKFfYbgvL80mXY/zCo2ttMrse4RhzkBmyXPHjH/0xvWCHcL9Hikkh2nS7B1iWw+XxSxyzwXv33iOvVgTmHlItSbI223s+w+uUJ+9v8+LFV4R+RZoJtsJdhEyZ6hyhDPyuSd9zmN2c4rW28PQGv/UooPJ3CGcGWXHGxfgcmRTc3zvii2efI02L+XzJ46MjVssTFuNnXJ0ULJXP1rdbnJy+xDUbzF7P6Tshs/mQwwcPObt+RdhsIDF49vw5T558jxdvPmGv/x6Bqeuu5cUVhqcxOzsY0udmfEOvH3BxHNEKTK7fnmPZASqEZhqwigsGH/yQ/tY+UTRmfPGK0O4Shj65VbC728B3FmhK5osL2vsfcvDg9wjdKc8/+5ygeZ/A05jFDVY1Y3p6RdvbJbp+QYcuZ6dj2g82aTZjIi352eefsX94gC4KDKuLMgsseUWoB9w72ufHf/JzcG0ONjxKJ6BcSW5mSzY6XWzdIo8jlIoRlSIIAoJmhU66pLLg5voKx7Todrtcj64BhS7HmCqkCJdYtoHWBp5v47iSsqq7K8NOkywtqZSiLKr132+dMK/DQGY94+h5NbO/Luj/prdv/i9JqMqU/qBJr28yHse0GiGuo3n0oMn562s6jS5Sp8TxnLcnQxarFY4bstXdryfV9ISfffIVvtOgKCq63YxCQ6lczMAiSZaML27YP6pIVb2JXMqQxXLMweEOo+sRvh0QNjp89vk5W5sewrBYpadQpSRiRZpM6DrbzJav6Q06nE5S7A3B6PQ1q1WMchYURUW726Gz2WCyuMSgR2GMWK5GeG6Lzvb7zKYxva0eV8OIN8dDGqHFYrUiHwva/Yw8CTEMwXb/iD/7s89xQ/ADi+Yg4MX5z+j3O9g0MYOKTM1YLC6pcoHvGkyuIxztEHqCeOZjuxbXF+d4pqY7CLHcnNH4kr3Bu3Tb2zx9/RUb/Q7SUBSFy/ZRj8nsLZudPbBhGJ3iFAOSKqbbNZmcjTk4esx8OSKLXtNpbtPveKhZSbfV5c10hWuEzG8mSD9CKoN22yHzDVbJmG7zAWmRE/YazKIpnbbFyeWnrBYV2/0Ol9cxG/0e5zevydw+/a7BZLkklwWiKgmlT+h3GE1O0AK27z8iuSnI8ymPdg6YXp/S7zbJcw/bhXYnJKkEhqspJgpRRnjKxTMHiDAjbB3w9vQtx9GUzuYGSsywTaOutrFLkmRGYrRZrSRv3/6Sd997SCPocHGe4DkbuH7GcPmKUlW4rYBpHGMFBhfjN0xHY9rtNkk2IoqWHBy+y3I5Ji8rwmCbs+vPaThHSNPk5uqawG1g+QX7299mGd1QpSEfv//7vDw5wXvoYaom8fINyXKCIToM2jskUURRdmi3B4zLjK1Nn619hz/72ec0/H3K2KfVbuNaIb67ApZ3TJAuPN57/F2uzt+QrRzee/JDChZ89ssf851v/Q6ffvI59/ffxbNtzi/eEARtZrMJGxs+T5484ezsDMMSFEw5G/6Cx/d/k9XqkmbQZz6OmU4uODx4RJxdEC8L5vNrHMcgzs/Z2/wAU7iYMsPv7HF9OsX1VrU/ynDYP/gue/sfoNZp7vJHf8rq//4fU7w6x7QEGokQEkPWFT2j0QjbttfMV301bMhb6bpm9ASSsqzQyqBCI2RVy61rZinPq3XwpO5lRINt19veUcad91RTg536f2tgestQampfnmlK8uwWBNXPo97dNbEskyxVd2XZgjpo4wf2nzsrlkUOmGhd1XUeqgZFtlUzd+D9irm+ZgyrsljXDNU1O1IY65+rwzX1czXvwJtG16lvlUNpfh0+EQIQKF1iSHWXQF9jxvoYi9oyIIRRy+/r5wHizi8Z+D5JUq0lZXH387esaFmsd7Dv7ligKlXL8apc+0xZd0+ueyF1vV9cFGtgugabt1VEgtvFGvPua7VsXT+MUhVVJW5fzV2gSVMnx2t4WKdP6woVtVbhFZZtIrSswz7czloKqlJjOya2ZbBa5WhdWzG0gErUkaJK5WRZHfhK/84fURQZ3X/v38M0TZzXl+zsf483x5+zmJzQdF0eHn3MdHpOEk0JRMmvkjllUeKGXSbpNdrIMUWPJNOMx6e0tne4vK4r93IVsZovSYqSyfwFj+7dp9QFlmNSUeEFTYL2AFUsUCtBq9vCWPh4jTbDq8+J9Cbf/vV/h4OjNi8+/xFffv7HtDsbLCbnrPSYwA1w2102BrsY9pKb4ytePLvmD/7gD7ieXpBEC6LlEot3+fDd95iOL1haEdqVNBtNbi6fkU122N38FgPHxjTO8BpNhucZ3/72h3zy2d8njlpsH2wzjQVH7zX45Zdn7Gxvs7HTZzpMuHe0RTfImVxOefL+bzIuRkg8Ht57zPnJJa1wj3R1TqvT4vziLb2OyWh0StN9TOD7LFcXSOERlzPefn5GJ2zjEJDHKbb2mE1i7h8+5Cef/oyBY3M4eIzodlnEJot4hmW6PHp4yJvlSz754i1GaGHonNHJMa2tHr6r2Bi0GE4WxMmInft73Fyd423tYrsDvvsbPyDLVyx1j28/OmB1fsN26wFk5yxXlwjRwwsm/Mk//BmqCLke3vDx999j9PaYzU2fL796yaN3d4lHI4pqSB5PeXi4jXRyRq+PSYMGbmEwmqxYhjHTPMKKCwbNPsH9BtFqgUoarARYmYdhKi6un/KLLy9YrDy++92/yMGeSb4oCRsbmKYkzeYsl4LRZIYbFAjVYbGYYQl7DRTrtSvDMNZAst5K99yQNE2pyoosT9Zezm92++aA0qjwGwZFkVNUOUEDyirh6nqIFyj6e31enlzQ7TUxZIkfDFDKIU1XuGaLL98e02mHHNx/QLQo2O/u0+m1efbVcxZphukZCKeB6wlWmWa2ukQ6DnG5IGj7FKpCiZQ4M3AqhRMYjBczLF9iuhVn55eEfo/Dw0McZ8Dl+Yzz0QWP3tniZz+/pioqjAAKOyIMD7E9j+HokulsjGnNOLy/z83NNULEzJcXlKXH9XBKmk6YTUwWqytc16UzaFNVgsnsmnZji4uLK3a3nzBbvqWMQzJnycbGHqt5idlMkRZM5xVb/X0810JgY0rJZLzCMENMtyROIsK2jywN+v0t3ly84mD/Q0wVMJqM6fQdVKU52H/E8ekYJ4yIy2vutR9zfjnHCgaEgeDnr49p9R6ztT/g+PKcOJuw2XNZlRaXr8eYdsrr5YRuf8DF6IK+Z7EsJxz2HrOKzjmP5pSyIh9f8PLnbzjcaLGxdcg4iZktBEWZEnY2yawR2ozp9NrMhiOssEt3e59lOqNQBa9ORuweOAjDRRjw6s1rtJkSNvrMJwsM20JLl9FyRNtqUlYuOJpFlnKRnuCYDstZxpadE9pdVK4Jwm1avZCvXvyE/d1Droc50fyEe/d2qeIWE32NZYQEYYfjk0vuPThCaJhc5+S8RUTbeI4kiSKyuEKICojY2PDJopRWuE+nWXJz9pagbRLaIRfHYyoNE07Y2tkkSqDXDxjPLvBdicWA2fwVn/3imHceHvCnf/8fILVke2vA44e/zvVoRUqH2dIjis/oNjfJM40i4ex0iSW2aDX73Lu/y/XlgqdfvOSe30epC4SoWauqCLm+mhAEPhuNLZbRDYZts9l7n9Uy58MP7vP5538CVoymYHiVc3T0AV989WM8t0G75ZEVMWUFD48+4PT4jN29PsfHJxzub5AnNmalMKSH5/TY7De5uR6xtdknz0u6gy6jmwKxSjno7bK1bfL5p6/58Fu/w97+hwhR+yXTv/5/Iv7P/lNU5SJl3Y8phVgzVYLzs7M7xrEGe+pO1q8lSYkWCtcLUJVG6QpJtf6ArkMbNasm7/yKtRdSY6AR2kKprPYVKQVGLfWalkmRUTN6aw+dVqBVWe+Ba1n3X67DOpWquy6lqFdlTFmvS9Qpc30HDu9Oi9KuC73lLTlX+wAt26RK1R24qkFNnSw3LcjzWgKuwdIaCAqFZRrk+TrgcntbAybbEZRrRk/dgUKoWURJHBV3nY+3VKNSFY5jYUhBUWmQNRiVUlCWFVJCnmdUlfm11K1rcKXupiPXErkh1niylsEMo5bos0Ih18lSpVR97KrbCqPb6iJ9J7cLIfB9h2QdV60XkOpjVClF6DlYZr2KJPgaiCpdz2zatgnyNmVurMvg695JiUaKelrvzl6g19ce6w/Rsizri5215I+svaZaV1iWue5GNRFA/nf+iPmjR3T+8A8xDEnjj/4+93/t28wXnzOdzYjeFnz72484M1+wLOdUVR0dFwgME7IMVgsD329A1WKRTSibEAaa++0eNzc3SNfF8g3mo5LN/jYvnz9DGUvKzOXx0Xcw7Iib4SVCJRi5Ylm+Ipq1sVsh/d0jXKPJ1oMub6/O6e10uJ/u0N94xC+ffkWvd0Bv4OBYNtejVyzHMaG7xR/+ix2OL75iMs3pdzbwmjHT2Ss2t7osFxGN5gBMTWF6dHrvw2TC1fUlx0lC6Gmy1OTk9Ctmyxk/+O7H/OinP2Wy7HF5cYbYuUdjM2E+A1Ec8PCBw88/+6ccbb+P3cl5+vIpu4+PuLx8RhYJDvfvMU3H2M4+GDnNZoM3rz4HJZnNJviNBlE8ISo08/Epy8Tmg3f2SVY/J1Ka02HE461N/tHf+7t867f+KoGbcPryDLe3jcEJncImslNMNcJa3DBMOjzZv0+VJPjNhOdnx2yUHfa6DRqbDrOl4PVC8YPf/z2ef/Yz3FOHnXuHfP7iLRevlzx85wkDYbNMfkmr6JNVNlazZDVxeeejPebnSwZ7D3GsBG1EfPXlKw4Ov4eVQ7+7wfGXP4Ww4Or1SzAzJi9HPPrBX2Q5PWd0fMmjDx7y7Y8+ROgllyevMTKTdDzHdEvypKTZG7C5+ZCt7hOW2ZRIRwT+Bovlkn5rACphOJzjBW1MK6XXaJHHa9+5EBS6wrEsXMdDKbVewzKQ67qh8fycbrdLVSo6QQOt//8wvSitEKexpNPY5OLqhlZzizwrUSKj0drg+YsvMC2f+WKBMFLSssCQPn7QYDhNuZleovQBruPS7LeYLudEmaQzOEBxTVGauK7BZGridRqMxjMePt7m9bMbdnYbXN/ktIId0mRKlK8oKJkvz1Erl8lqhetqNvoPGQ4vSJITRpMptqO5vgwpimOULOi1d3B8zXIZM1lckucjvv/93+PPfvwl11cT/NCgKqhPzEbMy1dv+c63v48qR/R67zFZnFMWFVo59AYh88kKz3Npt12GQw3OlCwZ0Ah6uMEpo/EN+zsfoqsRWpRkZZ2IzNa9xM0NxXymyZRJt9mh4fos4og0h4vhOf3WAL/R4vQq52Bjl/PzhHsPH/HixTGGuclNNCUqE7JZhW46HBze5/I6JlncsL23zfVJTtfs4Hhg5ilVZkCWMElu0OYctXGf89MFVu85Qod4TZ+351dIUfL48WNySkbLJaVRsnWvSRTnHJ9fID3NZBJR4eC2FIukIJpeU1YRDTMkaHYYRVc4VhdRwWJ5Tm9wn7K0mBUJvt/m9TzC77QZLkuS1SVOf4tlvMRij6Zt4zQyqqzgZnVC4OyzczAgySy0Mjm7/JyydGh4m1ycnrN3uA22jUHAKl1QZg6ffnpMpxWyWIzJ1BX9TpvZ+BLL8lC5g2sPKLSL5SpmizGWb5IuKwabPr69xdnZmEbL5eSkoN2XDIdDbMdnmVyg0gMmqymqOqEV7AAntMNHPPqN+wxnP6FScHWtuVmcMo+ucd0tfHOb2ewC6c5582bCb//WX+Xi/KdUjEmWA9K05Nd/8Jjiv/j0rhdP/39Y+48YWxI9zQ/7hY84J4736c3195aver5f93T3zBuORA0oaEVQEqCdAC0FLaSFoBVHG0EbLQiZ4UzPNHtIjTgUZqBpNrtfu+dfmVd1feZNnyeP9+GdFhEnbz2RIIuAAjhAVWbeyHAZ8cX3/0wSUSrrRIxJDIWpDVGyIqfXaGxU6A5+Tkmo4McCs9EJ7eZ9At/i/PIrqnUDy57SqB3ijpdYSxtFVGl3SiSxTLmW4IbXhInIaBqysV1gNh9jaDX8uIfttJFlmbOrV9RL2yzGEsWix/HpDZZn8+Cd30cApIyZXPzJHyGSB6RUi5bV+0mSymIxxc/Ce6Moa35JIRTrYWScBKkxBBc/iIkiGVFK9Y1RFCGKcWb+SMOBb53GgKbrOLaFIKaGkwSBJBKRRJEwsgkjDZF12LlAEkUYOR2SmCBIw7HfxgmBIEQ4TpLlT5I6u+MUPKXhxG8XaxVkodxRxhxKxHGIquax7VTPB+sxcTpqlyQBEvnWOJMCxrTZQ5Ji4uhtTPd6zCtljHUU8bVRdpKxtwKqouHLCXEESabjFNaROGkKUAZos1CbLBg5n9OIohVxdDujz7CogCSn+tUwFjLNI2vCkCSJkCSQRDnt5l6P0oUUTKVNNaRO9vUoXFyDujRH0vcj1uHt2VMGkpAkCVLtZbLez2zkLYpEsU+cCMRBVksprSUOAlEYosoSkiRmCQJK5m5921meEtHrlACyYx9l4ejpdqfVk6ljXdU0rH/+xxT+4A8QRRXhk0/obBaYLi7w4hGBMGQxySMEGiWzwDoGShAFVE0nZk6nsYNtm3R7fUTVIacaXJyMSToGit6mYNZZdE8IvDn9/ox2c4uVI3IzG7NYWkjKnGLO5PKiS143qGlVgoLHZHnE+blNu7PPv371f8Q0Tcq5PJeTIdOoiFTUseUT5tch+5vfpl69RxwdEScCy7CMUCqQU3oIhk8YqixCD8332Xq4wWwc0x/eUI0FlraFM5ujF0GMIoJQxJoPePzBXeREYeHJlMoyp/0TykaL2fiERARDK3N+cUqusMv21iGrxZzpcIokxwTLNpq4wnY8bs48lJrHaGRg+yFqyaTV2kfwREQhYjZZ0tosE8VzLkdLdlp3Ob14Rn/kQLFEZy/hZvKSw507OMMxld0aK2/KfBTyYPchUdzjr35zhmokbBWesPfA41e/+EvKpRbVjTyOBZNAY2u7QGTdsOpd0HNjjo4LqIZOo64xGZ2irkSevLfH/c0W1vAGx5/z6ukLXKXBO9/6PoW6Q6RXKbWr3Ex7eIFOIkUUSgcgzVhZFkvHRcuVWCwVEixUWeThux9xcnVFsJD53nffQxAcpk9/gpWrYRZz2L0jqrkmtjRiVxQx8gZX50cUzU1Kuo8SxPiLHork4S9dpr6LrhVwwimSWAEhRySPWNkBiqSRMxX8ICAOAkI/wPM8FEVBFkQQJCrVNqIk4Xo2UgK2bX1TmPjfI4cSBdUoMF4uMWtlhuMBs0kfSQ5Ync8oFptUqzVOL84wCwWuel3CcIBZKBDHAuVyFUQPWdPpj+bk8zn6i1csJg61SpWcqTGZT5BkGE4FRE1iOk1Q1AL94YhEUlHkPKP5hHxsMhlNOdjvMJnYFMoBlWKD0eSMXq9LrhAjqwLtTgvbf02z3qCQ2wVlxMJxCOIQQRJo1J6w0fw9kF8hKR5aUqHaqXB+8RpVanPv8FsEQUCzucd0eo2mqAhCnmanyHDscvfeJo4dsrKmPHnnQ66uughCjJazePWbPnfvvYNiuLhjF0EwUFSYzsc4/pSCWebFsxW6IfPo0X2efvUVcbWFJGoYBQXXXyGoItOlg5Yvcjm4oVxu0ey0GQ0dHHfF1XCIooKYxEyXCoYpUG/t0A1fs7BGtDarXA8vSYLX5DUdpWgydoaYcoOy2OBsOGU8v0HINRCSFfpCpGLkkfwIy1qyEsD35yytAWKiUi61wJ+yXNjUyyau1yevVkCymU0jCkUdQZJRDJFyfYvu1Q0FPUejUUGLNKrFPGHO5HrQI5ISBNUkDAWuh6cYbh9J0RG1iKPLkK3WPezFCMNIiJMpz16ec3z+micPD2nU3uXzr74iCsbstvfJmS1+8avPaDcBOUbJeURCzMZ2m+QiYXf3Lmf9Hmq8wWruU6s0GE665Mpps5MvS4wnPUTBZzW0qFaLnF1P2BSaSIrLna1vc37zJTs7G0zHPt3xL+m0axRze0ynMx6/833mXkBeGhApJaI4oD89JRE8njx+yGoOtjdDEXNsb+2h5Q4JWFJphKyWN7iLkHK5gJhIKJJ5y6YJCCA63Ll7wNllH9sdYORE3PAlvX4ZOdkgCV2aDQNR2icOFcJ4wOZ2jSgUmYyX9Iav0DUDQ6nieT0q1S2GgyV7e3eZTG9wLNjYaJM3DZ599VP29hMiLMrVFiIFTk5+Tb0GruxyPhpjLVf8/b//v6JY2rxlGK3/5J8goJIkEqIU346YBQR8L8R25qiqgueHGSZZt+Dc5t5ALCEoCXEc4TohCXLW4pL+gCCm5pjUtBGxdirHSYAfREhC2lYjEGeOYBCJkRUF3xN/S5caxRFxlCDpKuvCwRSUrLcpdX6v3eECqWEjjgPC8LdNOVFICoiEt0BPkgTCIERIpN+KC4rCGF1TUOQYO+ubjpM4LTJM1nq+dPwtSOtRewZ8hBBJkDMgmoIoUUyD3FOmNkZAYp2/uQaFkMYChcHaLZ7B+AzkyQokfvogWbO+INw2bYiSRBrJk2ocEyELUo9jkiTE9ySSRH4LpASROIrS/MkoPQ8J8dscSsS0azmCtG88BXhpvmi6baIErucTBBKCLGfh9SJRnEYCSZKI4/okiXqb3SeK6UuGLMskcUKYsdxSptFd75thaBCH6TEW35p1kihGktIxfJRImWQgJowFhKtrVn/+F5R/9PcylvLH7P+9Dzg/+0/Z3bmHINkIcXoNyrIKgpMC4Ag0WWQWjFkuI7Scg+CbzIYe+/c7zCwPd64wWLwmsIYYUoliy+Tq6pSCsUetkYCyZLkMMFyb7Z0WflRkODqhO+th5rYpFErklByFZh3LukHXDapikdn1EVvbD1iMRQLf50b8nDhWUbSQYn6D6eyIXz695GBvh3hV4t6DTb744m+YvxkgxWWcZEGxuUGpWCEIL5DKOZbWjGJBBV3GlIoogslKkeg9/4rYyFHuOCRjn72Nbc6758xXfaaLiNGwjSLARrNKoyIxm4yYTF9RM+vUWjb9mxkNZYdIPiNy8kx9i3iZY6OmM7hesdXZxFsOUByNR51tnr58yt5OJ43BcqYcP5uRz5XRxJDAvmJynqDoMtggy0ViQeF3v5vwb/7trwmUFwiDAv3eDF0r4E5DOjWdMLE5vz5BjAN2tp5QHvVpawV+fvKU17bAD37vD8htjekNxlzNTpjPHBrtQzqHZWbKip//5sdUyzX8ScB+a4Nyrcr5myuqTQFrNsW+DlHFIrY/J18s0u2NUYU5G40KT0+OGdkeqlRl1POYrSY8++KMww/eZdutYdZazK0p9njO1pMPWU56tKpl4shFiC1UL8SQIlbWmPFKx2jkib2YYqlBJKxQVZnZIqLRVvE9ActOo8Uk1UDVcyhalN0XQ8QERClmtVpiGHmiMEKRtW8KE785oDw+fU25XEaWNHKmgWYUyRViomSJoVS4GZ8wCbpIRh43EJBkDbNQRJF0JuM5G+0SJBJJDKuVDZKPkY/R5BL1QoebxRWJFGN7IV48JoznCMEcQcuhaC6ytE3Mgli0scOQWAioVLa4uv41Hj4LZQ6KTWdrOxXOCx6Ok9DrzdnoVAmDGe36h5yd/y2hcE29tMfCuuFf/n/+D+ztPcBzcqglGdcLKJWrGIaGaQpM5z2C8BhVLVMuV5GVHP3BBa4bYs8XaFoeXS/z5uwGVTWoNyR6N1Oq9QaCMsF1ZdqtTVarEUmS0GyViYI2jhWztSHSqDU4evmUcrXAbDVEVxqgNCiXGni+xWw5oFyv4gY2SX7If/XXLzCkAvV6laOLAUYuYKteYxFdIkcqw1FELAcs5g7xwsX2YtrlXfzYYz6cUavtM+tP8PUBQqjSqe8gxBKud4Oaa9IfL0H20MQlgpBHEmF38wH98QlGIWE4jCg3C0TxFFUp0esNKLcTGoX7TJwFnmNx785dnJVB6FxglCWmyxCtusCyYoaTJXpRwLI9DE1HUl12N37AJPSpV9p89pvPKNckZtYE33WI5QRfKrO0HIqlMopYZzz0KVbqrGYxL171eHp8yv5mC1XV6Q9W1DsGQSjyxW9e8OG77/GLn/8tra0DWvU2QnhF3nTY2t/kl5/+lFp9j/rOIZ4jEMUe1/2XxIpHc7OGIOtsbjUJvJAPHn2Pk4vnTBdjVFlLqy9NG0GQ0Ismsbfg4vocSdZJJJFYE8nnROwgZBWNUbUFSVRDlPJIYo7JeEa9WWDU98hpIIgx1jKmkmXwrSv+/GCRRTjYNBoal2eXzCZzPnx3m3zOxHMTloOEjd1NrFVEWS5iL+dMRh7NdgXbv2I+DUnCCF2sM19dE4QCvtcicMoI0gAruKZ3FlBplDm7POHBve+iKiae75MvVFiuXCRFAnI8efwd3nn8hwiCgPjqiPCf/1OSkwtINERRykwRMUkUIwga42kPXVeZzeekDFTGId4yXetxZoAiaykoikPIupgFWSCMEnJ5LRu5CrcAZO3uNQwN35VuAURqVImyjmmFMEpjgBCyekchDeN2XY81Q5oybgph4KftLm5qSEmS9PvpKDshioPfui8Kop6BonSJoxhFyeQKa0YsA0qpLjbKtJV66opOhEwKmjKOQRAjiDJJstY4pgytkkk3kzgdOYNIEq9H2mluZJJF+whi8naLElAVhSgIMmAcZnFAKSiMYh9ByDrPxUzDKIpARBRHmURBfjvuFyCJ0lahfN7AtVOGNM3S5NZVLkoJkizjB0nakBOlo+UoERHFJI04itLQ93XgfHZxAAmSpKSgL3nLZSdxjKwJWUhzmJkGxNRrlaQB9rIsZGO8BEF6KzeAdKwdRyFxSHp8M/AMpDpUQFY0LCfKACcgCGiawfKf/RHmH/x+ylJ+9DFmrsZ2dZPr0z7bO230koAbzxAy4JwmG4jk5TLdq2uEfJUodLGuJySFAuMRJKJMGM6QVIGcUcFyE7rDawq5RmZCkvCimGbHYHLtYq1ynA6OqctFdjt7iF4ZrahxefmK9uE9WqUW2Ap6XkYvVDAKNoKsgxgT+CJJWKHe0Ll806dT1yiVA+p1k7Jq8vTzMyRZQhBr6CWB5BoWl30WSR5J+RZL/wWa0WBuBzzY7SArAedHQyQ9oXG/hLcIKTb/EK/ykvlyxGDmsn94D23Wx/Z62JaHUdxL5QZildeXL+g0RPbvNpkNBowup2w39slpsJhdMrFH+K6KZSnowQ26bPI7P/p9/upnf0qxtYnvhezt7vJXv/4ph/ffhSRBMUKmiyWJOqBolKlsllj5M9AEhosc7Y0dfDFhNY5o722zuVEgHrlYkYSnuIR2TKezyWR4gdYp8vL6GfVymVjx+OKLnxPZMZ3NFj3RwayWGC67lDoVrJmLEYss/QlVWeF6coNoW+QKeQQtQhanjAcLNjc6VDWZ6XBIJW+yXX9EEg9YkWO/vUO+lXD+yx57B5v86N9t4CcS0fiK590RrdIOy4nFf3X1Gc0NmWK5xnhyjSFWKJkaHn1EsYyUW+H2+gyHFhu729Q7NQJrhRYtkUMBQ63y5jzANE0i0ra2KA5RJDnNnoyDlKmME8KcgOe7hP5v3/P+2xbxv/tH0iWX05nOuhhmwMXlG/xgiZ7TmY5dVANkUSEKRDTFgESiWCwiyTGariMIBm/OnnF6+ZyXR19RqonMZgsK5gaJqHI2fINrJ8hCgXKhxe5Wg5xaJnQkNNWEOE/gjTJHn4gs+JRKJmeXN9x/+AmdxgEFvYm7KnH3zruEYcBiNkeTmhS1h2iqiFHUObt4iiLZNMotbGdMq7PB3cPvIAp5JNFkMp2TEFLK32EydbDcS4gKQFoLJwjiraW+VCphmkX0XMRi1adckqlUEi7O+wixTKfRInHzjEcDrnvPqNU26fWHTCYOCBKabrJYrri8HlIstqiW38HxwMjn0FW4OL9iupgjqza4ITkph7ecoskCnh+hagm7W3kqZQ03kpATCduS8Z0Roi+zsmeYZp0g9FnFU1ACZFHFWozR8xIldZOiucF4NaVcLiBJIpfXn1Ep5aiYNSrlAwy9gOdHnJ72kchzc2HR3G2i6iVuehpmvoYkKcy6Jnbk41oubjTlT3/8Y877x4RawqevXhJpQ7rHlwz6PRJ5ycnZmPPTMc+ef87zN095c+lydT7g+HUfmTpioHBn/wlKrszVYICq1jjY+oBa4RDLUpnbE+yZSOSIFMoapVwbWTUYDsboWp79zoe4do9SJSZvVMmZOokdc3l9QW96ihgvmPbOkFUD13fAjaiWwXYu2NnL4y0NBEfh7//wh+DVqGwWeHH5Gk9Y0u5ovPvOIzTVxHE8DvcP0BMN34lYzmeUcjsogogqlOj3xizsLovlDNuT8PwQ14tZLMdMFi+ZT6ZUzQOEJKKg5skXEgQtq5fLHnSRHzCd3GCKJkpcp6I3eLD1BGvucnN1heCrSErAdNDHUENGszdMZnOazQ5h5COSJwhdckaJuTXi6mrAxnYd251QKVZo1FVyusrBxns0q0X2OztUyioXV6ccnf2KQlHDcbtUq1U0Ic8nH/6P0gf+q2PiX/4C6z/7F0SoKKqCJCVZvVcaEbSaL8gZEn7op05o1uPGDOskb4EliYAogyTJxIiEad4MxCkKTIgJw3Q8DAnR2nGcgCTLaR9uprNLhAQhgTgJ0nD0W6cHazEdguClzTGIGTOZspAIScZwyhmrmdyymuk4WvytT5KIZGpQUoNMhKoKeH6Qgr90R1O9XpSOuyVRTbMoUyiTHQtQ1JgwCm61giTpuD1JEnRFRRDkt33X2Yg9jiCJA6I4SGOTxHR9cUzm4EyQpYQoEtLjkjGecZICJlVOQWic6UsFREhS96empNsVJ1l9IVmWZBKjqGkuZhBFJGsWeW2uiUESEoIgux6ydPGEFOjrukScSLctN0n2YpCQAvGcoabj8PWom7egW5EFxCRKDT0ZyxonSdaElAatp+chBcXZSSeK0qYRTRUJs+spm3mDkJ4bVREhTiUGoiQgCqnDXJQEkssbVn/xl5lRCfT//T+i3t5iPj3mxavP+PLFK2ZON00uID1GURQiKAqLUKOZr+AOfBoPD2hUyig5n2I9pNYUCUJI9BKNrSYls0EYypi1gHxJJnJDXFtg4Tv0xj0Odzao1vIUlG1yxQiBiMO7Twhtl9nC4se/+DljSwChQO/CZeW7OHhIusRs0iW0QdNh5kTsd+7hLGxOu8fIeYc7D79HrDtIHhRKRWJtyWjZp3/2DG++QlNVVvaMVy+P+NlPnjNbLZGkIjc3UybLhO7ll5SrW4yvV5SbDcoNg3gOcmAzc66Zux6jmwmeplKuJoxWN5xcjNCLTRACcgWZ3uCagtpgp/EIVTKp1vNYbswwCPj0xRnFXIFVNOQ6Dpi4Md/7vR/yzpMtJqsFr16M8Aiptjd4czXi2dElZ9Mbnh79guvuK3qzM7yxTZJzqJcL5PQ6rhTienMkIYdaKHFyccnUjzg9HnJ49xEP7z6h2tqiUTWQNJe8qbFTa2Ctpgh6yMuLX9IbXFHbUznY3kQuCRRMkepWGdcdMp7O0JoFPvrB++htg5nis/F4k612nv7onBfdPnJBY+wMcNwF249z9KM5n5+95OnTN3wxHTDza/RDm4vJjFBaMJwP+c1nJ9x0+zx9c8XVvMdylcP3BFbLCEc2+eS738exQp5dLDgbXNA/neL7dUazOe28RrIYoASnyOEUPfTJBTaHrRp7hxscHO7Sbshoics7d/fYP/zmXd7fGFBazpB28x5nJzfYzhLfVVGEInt7ewz7DtOxR726yXxmE0QLFM1HkU3Gkz7bhzEbzXcoFZrs7HZwLNC1HHGoQaKR11tUKx3qjQ4re8bF1SXtdjvNghNs4jgm8GP8cEK10iCJRUqlMiQGR0dH2KuEu4fv43sJv/7sr8gZEu+9+wlL+xLNnFAs1Lm+WDIad2k2NnFXOQJXYLVasLKmTGcD4iiHlLSYz+coxox2o8N8McV3ZYr6Lo6TcH09pdkqoQrbOBa4QY8wcjD0PKpcZbZwcX2fKAHXi/CCEFAxCx3mE4HNzU0gJoiHjCd9mm0TP5xTqWmMh8/pbIv05qd0Ng8wzYTED+l0tmls3kVUlii6hSK2SEKTXneJ5yhYqxmr1QxJyLFaWShGSMHcxizmGY7Psd0bpotnHF++IlIs5u6UlevghakuolYuMZm/RDPL7O7+XYYjC8+FOEy4OHtOTpEw9Rhdr2G5CwyjRuCrJJLPqzdPCUMVPafx+uznlBsilUqbai3PfNlFVn0WiwXjQYQbhHiej+06JIJFrdHCc8oUzQYrv0u9ZjBfdjGKS6aLKc9e/JJEsNloPaA/eIkTj1B1hUS0MQsdSpU2hw93qbUriLk5g1mXcitHsaay9KZopsFs2ePN1TMO77yLVnhrwpmvJCbLHId7H3Kw+RjLOef09BQ9yKF4CooWsHO/zrOnn5JXXS6OTpBwWczm6LpO6Ku8/+4PuX//IUkiUa9tUihtoagmg+kR5VKLJPbRjBXL+QQzl0dVAix7jiA4vHjxKb4t4HsRsuxSzNfpXr3GmozwFvNbEwZAvdQgL5iAh2+vuH/4hHq9zvbWIdtbd1D0hCQWyRVkzrsvkWWVRuUetm1zdXUFURndMBhOn3Owt0On0SRYxezUDpgPL1GsTSrCA66vzlBEFc9XCH2FlXtBq75LHOYxCibT+QU/+tH/gnpt59Ywsvpn/xgBHVlWEEQBUVRS04SiEPgRjjcjbyqEfpzp2H7b0PJb/hZBJKcIKEKWXSikLShRJk/RdZUgCDMTBykIiiN0XUmd0V9jm8gMNJqmk9aWibeawSRjgCVJQUBmPVFGSE0ekphlGEbRW81l9m/jJEAUxN/63I6kUyoPMTP2hEEayL0Gz2sXtyAkeG6Uxg0l2Xg6A7WaqiOw1nNmDGWSuqd1Q8fzgnR9gpDJCtJaxFwuj++TsakSbyN00t+Xur/T/VgzxClQS2UDnh+9NQEJb/MaFTmLRMoYvmTNLicCQeQSrpvihFSDmAkpiZIgY2NF4tskoMwQlQFkOQvOjJO3cU1JuhKC0CeMsrcFuDXtJDHkDIMgiImi9bamDUPrXM20t319vIVMKyncMo6iqBD4Seqij7llgiVRQpIEXM9BENZj/jXYFxElAeeXPyPOWFvxgw8QcnVad++AoVMuaQieDHGmpc3efUyzwv3dCpPpKY2NPTaLZZS8QRiLyEIbTd1ia69FlFwhSQvs1RzDEGhUtxl3bXrdMy7OT9lo7FPKmZTzBTwp4HrUw/Z1LnuvOT45YTC+4vTkklqtghRM+eLzY7r9C14c/wrFkZj0FlQrBk+Pfs1yOsf3bERR5s3FEafXR7iexee//gWPD75LMpqzXHZ52Dkgp8modY/hqEtv9IooiKmW99jbfMBH7/4uvgOaWiZIbEISXhy9obDTJFepkHDAkx98TGvvMd/54B/iWiGuFDMcXaGVt2nm2oQhBOEKYaWyCEParR0kM2G06LK18YCt+iMONg8pl2J+8/rPmQcyd7Y6PL7ziM3dDWxL4G9+8hLHv6GQt9ko3uHFVyfEgsvKuub10XM0rcBiFpBIJexwSP8q4vLiiL/+6x+zXK6QFJnZYspF74Rub4ph5jHyZY5eX/HTn3xK/2bGYukgIPPi6RXFYpvhpMdnn55j6G2CJKE/WfHizTGXoz4L2+fseoS+tUl536TcaTOPfcpmiUf7e4hSwMJbESkuhbZGvQbz1TmTyYzL/hRN8smbRUptk0Z9k0YroTey2HnQpFprEPgCkhYgSjnMgsxo5PPizTWvLwacXQ1RBJ1ffflzrkbnzC6W+PMVkTBmOuiR2DMce8BGJWTDlCiKV2yVR0Tyc4azp7gXP6f/xc/IKTeIwphodY17M/6mMPGbA0pBSHDcCaZZTEOtb0ZMJiNevjiiXutw7+4DprMhUTKnUpeo1zawliGmaeJZRWRFoGhusNH4iLzRIoyXhIlLpVam2jDRzQjHXSBKCQWzynSywtALDId9iHMUCw3CgPRNJmcyXwyQtRVLa4QXDnn28mc0WxUcyyaJVZbzBF3L43pLXr16Rq2psLVxH0UqUm/mEQUDMdzAttI8vOnqJZW6RNFsMxpavDl5Sil3n2Zti8AXKZdrRIHOfOYgaza256LoDq1mB98PiWIXz7O4/+AOel7l5PwVw/EZ5arGzc0Nln9EnIREcYBty2g5FUlS8L2IV6/fEPoq00EOQ1d4+vyXCEKCnstxeTWhOzxmuXBYTeppNaA0w3UiOq0DDOkx9codRMps7mwgq3ku+08xS1Va9Qc0yjvsb98jZ2g4Tg9VhSAIcLwZJ6eX9Ac2ZlHDWbgMby5RdQvfdYlil1KlxuujE9Scz2LVYzqZ89Of/ILR/ASzkj5UGp02fuLSaO1wcn6Ns8rx6MG3MPMVXG+ObkjYKwFZixnPrphOJzx5/F329+5xeL+E4w/Z3d1HQKHT2aRSOOTw4G4aYN44oNloUNSb+K6HIuYoFev0bwZEkUUYgOsG5PQGu9ttokBGkiRC36VTP6RRb4MwZzgcIskFWnWThvmAINTIVyTOjk5IHBdr6uHh09goshyKbNb3UBWB60EPo1ihWC3gWlM00cBdwWJuc33zmjiSCByTm+EbVF2jVr1Dvdbm+voIVQvYat/HmrvYi4BSfh9d1fDDCY/f2aVaalHMN7i4eoHrj6nWOuS0HASpE28dF+N4UwgjavUi+aLEdL5kaU2woy79yRlqLg+6Rxzn2Nn4iEq5zWjxGa63pFp4jLXy0JUie+33ONi6R9Go0K51WC0syuUyr06fI+oh7UaB0ayPUYAXb37Fwzvfo1RS6I2f4TkF/u7v/K/Z6LxLQoL0+hj3j/4xnKf5roJIWtUnxGmOagLWaoKRF3FcD89Nvtbe8lsoMntgJ4hEVMoqAqlQnCQEUgaOOMT33MzkkbJZa7YzSgJc18nWkwKE9fhYlBICP8xqBd/G3sRJhKKqRPHbcfYakKbjWDIdopCxllk3tyoTRclvfeJse9bO3rT5JiKMolud4hrnpv8bZXE2KchZVznGKYpGRL4FqLf94SS3YEgQxGz0nAIpEpEw9N+OjEnrCiEFWaomEsdiBsC43Z84jjF0Ndvm9ch5fXxTOjeMg4wVfquhXLutIcb1XQRBycp+IpKsbUYQ0mOerLWcyRqUA3GCLK2jftZjfWGtGEaW0n0VBBkBKQP8SWaYEZBlgSiJs3+f3BYNRVGYShkUFd9LW5HSLvBbChxBjFmuVryNQHr7wiAIoMjSrVv9LXsuZMHPUBgOboG38PHHVCv3ueraOE5ETtOpavpvPVBFAT7/xd8yn0lcDkUipcQMkcHoEkmb8vz41/zy51/R686QVYPBcEUSFlCLEtMxqDmo1tvcu/cd5nYfQRX54qvXBGEZo+LTH10jUcG1LfJCGymUyQs5SnqH73z/MaW8yZPD38MaxJxdnPP82TF7mw8pNyuIQgnHnmMICfbYYTGe4dg+X776GU5OYxWbKJrJ9c0RQmKyf3Afx5FpbdRRJDg6ekX3sk9O1yBOaHXKSIpO3ixjSCaeP+PLV39Gt/+ck9MjBpNzxqsrKs0ixSKMBwUefut7+KKEnofmbszFVY95NEATIuI4xAoX3EzPWa4c8nqLerNFriAiUSEKdGbzOcWaipLTaDYPEEWd16/OmC3mWG5EXlMpF1TEKMRMHLRkRqegois6lUKRak1mY3ObUIhR8qlpsLFhsJhb1GtN4tgnjn3sZYi9EFjMXUQp5K9+/G+QSaiXq7QaTUIv5vz8HFlPKJdqXPVfcn11zvnpgIsvLEQnxHKG9HtPGY+HGKqEoEpEic3Ofo3p+IpWs4guqLz/0fuE9ozVymZiDdncbqPpEu98ss9osSKQA8yCTrNdo9Ys0KzqWLMJmprQahX4wfffZT4e4flF7j96yMePy7z/8B5upBPYEYZqEPXPuLhacnIzZXvvA2aRwGbnIeM3R4iuALkV9sji8vkbzs+ucPzeN4WJ3xxQ5k2DMF7R6WwiSwaHhx1yeY2d7UNULUFApVyqY+Zr6HKZ1SzE820kOST0isSRwsHdOm9Ov2Q665HTa4SRC0LEyfln2GEXURGRJY280Uw1H5GGYeRZLGwuL4doho5jp28TtjdjsbQ5uLuFaoC9VLBXNvv7ewxG5zx79VfIssTd/e9QMvdRhDKC5CKJOobawTSLNNsGkLaDLKYi07FDFKajjmZ9HzHYJggi6rUWqpRHEBf86pefgbhEU9K+zMuLM8rFCsP+GE0ymQyWeFbIwc4TPvnwDzD0MnvbOyQ4RJFPTmsjyWAWVG4uJHZ2O+QLAk7cZTLpIkegyksS2WW4OIMoJrTGKGIDUYTx9ILJdESjWcEPZ4RhSLf/nEI5R/8arq96qIbHdAjd6wFEOs8+HTA46mL1PETPx1mM6F8PUVWV1cqieylyeTxFFkKWM5uXzy9YziNy6i55s4llGdxcd/nd3/sejx49oJQ/oFp4j529Xbq9V2xsbGIqD3jv4d/BdVdcX1/SbGygSDU+/ODbmEWJ+/fvsLu7zwfvfoeV85qZ/SWlci6NZIk8HCtgPLwiDmRILB4+3sVeunSvX0DiErs2pqwT2Ct2N+tsNHVmwx4F3aRV3UQKamy1ijTKGl9+/rdMRy/wlhaz3hJJ7JEkc6zZiuV4SlkzySd59tobNGsmeV3CWwzwfYe9rU3c6wtOfv6UjabBfHWJKrskoYyiBPQHF5SrErJqYztjVk6X6bJH/6aHKCTk5BJiZOD7ffyVzpP7P6LZbOK5MbVGBRKNxWKJajiYBZVGvYPruiDoWMESNa/cWiMA/NimOz1lMvaZzgJmVp8gKRBrLr4Y0B3OKVY6ECrYqznFXIuCVkMVY8xcgCjMaNXbFOq7fP7yGUZF5aJ7jePPSWKVf/A/+D6uPyImoVxu0956QK5gIqDSru+yt/2I3/3e/5y9rfdSndLRCd4f/WNWf/IvkCQdEJAkNQ3TFgQUVWU6nVIsqsRxiB9axHHKWL3dq99eUo5KZG4FjBc+caa1jOIkNWLIImoGAG9ZI5Js/BghyypJvO6Y/voINSKKs6aHr7mFRTHNgkydz2uAlLJ3kiQgrs0iGchKO3NT93Ac//YnZRhTUJSybQGiSMZyvd3jOI6RRAFVkwmjNWhKb79hFCJKqRnFSzODboFUypoKuK5DEERZSPjb27ckg6ys69He5lmmsFAgSUJcN1vnmgnM9i2OPHw/SA05wnovUiAoCqAoUtrY8zUHdxpoDtVyA0VSs9idjKmNU2G/lNVURtFbLecaXMdJSJyk8gVh7VbKjnMcJ0RJmBpjwuRrFHb6e9OO8yB7ERDeutYzRhUhwvM8gmi92rfRVHGcutLjOB3Rp8c/O+0ZqyiKZO5yEKSU3RRFiSgKyOfyGKMZwq9+dcuz1/7NX/IP/8H/jt///f8Nx28qjG0BQUrP+9rtvr+9wXg6ZqPTYth9jjVfYM2XLCYxlXyFMBzRajeRkgaBJxEwpd9fsnKumIwXGMYmubLKdDnAdX2CKEQOfcraBpoUUiopxJGEmtfYPrhHqPlYUY+z09dUiiWS5Zyz3i/ojk/obN+j233K5Wk3DfaeTAlihd3dR8iSjizNGVy+oR/NKefzPDt/gazoxJ6FGxps7DRwXYdXRyfoOYGr/qecnH2BiMDlyQjPsemPvmS+GFKr7HFwuIPrhHQ2DPxgQKteQgxVYjWmUl1wdPqGrZZAXjCJvRqHnRze4hzH7iEIEoNRHznvE+PQ647Q5RKIWgq2Rqd4S4HVcE5OSZjeLNB0BS0Hc29CoCacnfnYQcJkMadYanD44B6jvkKrVaNYLJPXdpktPCazOaGtois5hqM+vj9h2O9TNEuYpsxy2ccwBKqVPO12FUOOaZaq/M53PuDk1QvmwzHvPbhLTlCZdec8bjzh4ycPubNnsrtTYbnsMR5EFMotbOsM17bIKRqbnQ2WvRX2QqOm7yAGBVbjFb7n3GqRnx09I4hEFqsrlrZPIMXUd0sEWkRvfkYUB9RrCXEU8eb0l/z8r/+cL794g254XJwu8N2IP/+rP8cTQqxwwIsjkbixSWezSLua4/zqcwJ7wXJq8cH3/pD2wSalSMMstNh63ODFyzecPrW/KUz85oDSzMuIURlrEZAki7SZIZZxPQtFizm/fEWhUGA5kxgN0lFnHAl0uz288Ibl6oJf//qvGU8GxImHovmYBYkwEKgU77KYeDiLGGvlc3x8jCLr2FaS/rFoApIGS8vm6M0limZQrXdQlQ2uLj2gjKapjCc9VkuPzfYjioU6uVyOYrnInQcbyIpGvdbm4vIN3d5rCoUcgadSLHRQFIHDgztI6hLHnVEudaiUGkwWr+h0NpktlgyHp+iawN3Dh1yc9vC8KYK7gbMUmc+vOdx7AJGOkICiRGiKwWQQkAQaceSRhBUcb8J0fs1s0mM6nZMr2KysKUlYYjAesbEj8fzZKQQVWpVNimqDfveS5WSI6w2wVguKZQXftxn2Uz0H0oxOp8NZ9yfY/htW9pg3L1cMh2Mc2ycKRTSlRsN4j73GJ3hTA2sUYcgJdw4MdjYNRjeX6CUFQVOpVJtsblfZ2WqhyRHFnI0cJrz/5NtYcwlrEeIFPebLI4RYo2S2GI6OCbwhsSegGwGi6DNbHWOaJv2bBaVSA8dx6A9eMh3YSHGRJJY5O3/Fnft1fN9nPrOJhSWDyQus1Rwh8nEsm8d3P0BRJrjOkjgKUUQPZwatyl0O9/aZT5bUKmVKRQPPccnJW/w7f/jvc//uPeLIpWRWcBYJlnuNmitQqkLo3NAyq6gK/Obp5xTLm8jxBjeDgIvJFflyncO7B8iyyHDS5fOnn6NKCg/vfEi7sYPrzNGoQlhiZQ/R9QqHu1s0izUCb0ZgCex27iKJEauFRa1W4ez6NZdXb+hejykVmwRBwOXFAEkooWsmk+kNC8snwrgFIYIgoEh1iuWH6DoUC0p2YzPpni0oFwsQR9gLidhbEjg2y9EYQzYp5AUIpxS0IoHfY3FzSadYZ7O2g20FnF69IVI9buYzZqGPqMcsLZmnT6+oVbax3CuIRL7zwb/P/TufpA7a18c4/+T/zupP/lNkOZ/q9TLXSZIk5PQc4+EATQ9Sg4ykokrV1H29fnq/3bu3N5cEFEVA0hTCWM5GvunPhkGMpompxjHMGLaMUZNEEV1PqwZTVjcDmkkaYp6Gpmcf1uAB8oaeahNZ61XJ2LUEScqqBMW3bF3qwE6QZelWm3j7SeJsXTFhHCHLchbKnfwWsyaQglXf90jiDGxm9FoURSnzFgdkqUq3OloxY0fjOEQQ5Ftwt751C0TpeD1JXfFpbNMaRIUZEFaIoq9XqKXRSeu6xjgTo95qW+MERRIwdANBUDLzU7YfgkAYBljWBD8IM9AapQBWTFlBSRRJYjFlGPkasAMkCTzfIwzX7PB6tJ0ylrquospG6lq/jVRKsnOTEEYBjhuwbklKkjjLkxSy8X6In8kN1oHnKZOZICsSkqxAImZgVLjVqIqCgO+niQGp7jO+ZdMFUcA0C4BI9C//c24Dpj7+kGKhjKIU+A//w/8rr95MCJLg9hxFScKNH9I53GajXadZ3SSeJDx+/Ali3GA89Nnf26J3dcrV2QnlgkpeFcgpCsFqwWa5CX7IxZtXJI6DN7U53N7i/OY1g+GQYtnE930qjYSCKWM5r8lrIolgYugx49WKQiGi2Czy3Y/fRamcslqtqNWLRJHC1uYB9WYezfDSl69Aplnfpq6qWJMzFuMpvi+jaw2c4IIvP/2c1XBFLDmoWoViYZvHD35IGM8RxQHW/Jre6Zzz80t6by4wohJ6rsXR5ZTewGbhzJlGM0qlDcrFNB5ucDFFkU3UkkIYmuw2HhOgcH75EmtpY8Qq8dKhUy6jaAGjqcOd7QMid0HkLxjdnCPhY4g58qpJp6nyP/m7/x4PNjb45P0KG/UG+9uPqZSrRFGDRx9u8Pr4K6ajJaKQp1JtYrs2xAJipPD4/rvsbR8QehbT6Q1JEFKrFAj9JWZeQiSkYG4SJj6f/upL7u4/4PGDQxI/xFRMHt95SKGiYgcW/iw1XEpCiGm4LEOHUqPJaDYn8Hwq1Tp5SaW00SRKVkzta+bzc2JBRyAmcH08T2C2GnJx3EWRLBa2S2/uI5cMfvC7/wHbD6pMbIk/+Pe+RWNvC6lioLdlJhMJJJkvjz4nVEx8QubWlJvVOZIi0xvMWMwDoqWNO7xmfPWG45MTXl6MUBtVFquExdRhb3+X+q7xTWHiNweUjiXSqG8zGc+IooTRcEG326Ner3J5cUOpohKENqLsoGoJYRhh5iuUix2KpRyaZpDTK+zvdzCMPAWzzvHzBSfHp/j+mEphC99NO7p9f4bnuKiSiSpWKReqJJHNuL/i/t19mvU6npWwWtlUirtYK5+lfcne/iGipOP7PoZeZDK2OT0949mzr7CdFcvlCtefUKsXEAWN07NLZFlGQOXJw99DTZ4wHi1w/Gscz+L+/ff4/OmfMxyfYZpFSGQsa8CThx9yb+8HmKbJ9s4GzkLCsq4h8bHsGWYpZGGfMhgfIYo+0+kcw4gx5E38YIFt28xmZ/jRhCgwcByLH3z8I1S5zc7hIZYd4S4t7KFDq17GyIHnBQRBhG/LbLbvMp1f8eVXn+G4ARdXPXQth56TeHLvH9Cs3aXTLrCzX0WWJdqbVbbvFVi4I2qNOvVah0Z1g5vzS0LLQ7DzqJLJdBiwmkdUK01kSWe18jGLuyQyXFx9heONEZQxtj0iZ2jUSw222i1Uity70wAWVMo6W51HGGqR8ega1xtTMguMh2P2tx9QK+fRlSLeCjQDHEth2B9RLhfYaO5RNjUIJRYTj4Keo3sxw9Q2qBR3UDQfVZWRJR2RMqpi0uqUWS4tbMdjZVv87c/+ktHIJnIPSMIOiZhQqW6QRDq6YTJduORyTSajEYHr8eDJtxhYS3YrFVp5EVW2GC58Sg2D1XhJVVboFDSgz3X3GbPhmMBeoEohQhhz52Abyxlxc/WGQa/PVrvN+0/2CWxoVMpEyRmObXPvzg4ls0Wn0WE6XBJ4OvYqolyqIioJomijakl2PWYhJ3FCFKT7nBfq1AsH3N38IbpYRKXIo71vs9fa4vrkOcVcjju79zFUiUo+T1Hd4t3736dRbpJTSggoxBF0z1z2t3coGyWCpU049yhJCmHoY5qgG33GkzM8O0fe3GRv5wNIQH79BveP/h8s/8UfIwi5LGRcyMBTgKKpjPsjZMFF1zVEKc0ndJ112LaQMW8Z4yVwy0AlCUgixEECkYCYRd+kOCcFVr4fZEzimtBKg6vjKEiNKeuxarzugE5rw6I1Y5e8ZbxEEaIwugVQAOsAckEQEEWZKI5uGaw4jlFkMdVH/v+MvFOdZDYuFyQgQRKVt7dWYc2WJQS+QxRkI+UkcwklWVViHKHKKYC7lYMKa9e4eDsiTr+eZCPvCFVVIJEypjC+BalpP3W6/jBIY3XWRq91TqIkrc/hW5ZQyDqtNU3B8/zULS2su+VTkCZJaTRSkqT7CzHJWtKQxGklY7IG+V9zq8fpS0A+n0tZ5cxMkx637PQIIWHogyD+dhRRnFZlykrK4q4jmoTb4w85I4ckySmgzK6TVFYAoiQTRzFhkDmwEVKDp5LWW2qaTqlUTXWfydsG9jAMyeXyKEq6vVxdE//8l7fvRbl/+f/EWU7pXr/h05+doMj5bNuAOCJcOAzPV/TOu+QUiXxVTIs88ioP333AnbsPEVHYbJVZjfsYiYliSGhqEQSXybxPrbaJrMnoOYF6vUHD1NCFObE1Y3hxzr32e9QLIdPzkIqRR5FjRv2YXCPh9dEJrdoT8kkeOd6iXNnm1dlLFCPgzcnnjK5XxH6eJAqR9TxiTiH0ZizFAg8ettKECVGhUazz6PF92tub1BtbCLLA6fUrLq+n7Gy/Q7m4ibMM2e0c0qpuIIsRnjWmd3pMp7hLuVjBX8GDzQLX//bXdDwVL1yhqxX6/TMWzojlfMDE9RH9Mu88vsfOxjYbGxvEocCkt8Jf3dA//Q1v3jxDTGrs3XuHQrVNodVEL0Kc6IhJhetej5veGMdp40YSiZTQn004v3xJtXLI1tYm7UYT2+ozX43pbDTwgzH1ag050bm5sMnlZW66J7hOTD5X4cMPP2QymXB8fMyb7iVmeRetGjKYDrG9EEFdECciC7tPfznD8SXkxGM26LFZqbNXq2HqPlenc4x8ntFiyMxzWNpz4mJCb37MMhphlPOMVyviSKJg5GnWG0RBgLNyGA1uGA2vcBYDTp6d8q//33/ML371OcVamfPrE+a2S+fOHjPBpXVPwRFeI9fzlDs1SkWTKGrz4ScH+DdPORkc86x/ysLXmboakVLFckasFksiRUEyPe4++JDv/p1PMPTf1r7/ty3fGFC6loEfLLh7f4tKsUUhV+LR47tIskDBLNNu3GM4WNBuldnf3+X99z+k1aqQNzVc10XERJZ1zHyBTuOA2VBgf/eAUklC1yQWU4t8XiJnGFSrVcaTEY47Y6O9D3Geu/uP2O7skgQi3atLpuMJB7t7SJKVhtnKCfYqoVhoIMkKk4lNpbzNYLCgWuvgOiHj0Zx7dz5muZCx/QntLYXFcsrKmvIv/9V/xMs3P+Y73/2IyKty3T3jxdFP+OA7m8iagqRGtNq7iJKK7a2YTJcIYkQ+b6Dnczjuknqjiu/7TCYTBAnixGU6H1MpN+ldO8xnDkIicufgA3a272IvRY5PP0PPJfS6fc6OAgbdKYtFSOBLFMol6qVHXJz5tKp7iIlMu3mIiMHO9gF7e7uUmzMSAhZDg3EXfvKTf00YXqCyTeJVUMQm00UfKe8xngUMZgtkU+bsfEKMghOO6Gzs0CzXUQnZ2epQLZf52S9+TWurTaG0hVbI02g8ZLP9kESAvFlGUny8YMJwfIqpl/BtOdXc9S+5vLxEERsogknizVmMTlAllZvLC05OfkmtWEMVWhhKhfOjEZoWIEg2luUw6E2JfA8hSjBNkVw+olreQZYEPG/MYmZj2V0++/QvGAzOKBcT7NUUWVTxgzF+MOTZ85/y1YsfI4gWgiBQLFbR/G28WUDOEFByKrP5DcvRCNmvMlnMESSL2WqOWWoj50Wuxz4oTYIkoZbv0K5tUMhJKKjIfo15f0TkDDl+cUyztkOSJOhGwHS4YrkYM+1fMroe0Wm2CGybyWjOdvsOzXqbWrlBvVShVtMQpRhVLLJa6eTzBZIw+JqOTWA46hNF11z0v+D88iX98VOur29otVVePxtiz22e3H/MbHbDoNvHWYK1cLDnS+S4wvXFhLyukxMiTl58xWo2R5EFOp1NNtoPkeUCvd6A0FlQy+fYqx3QKW5hGgb37vwAEJBfvyH6xc+Y/yd/hCwVkeR0XhjFCWEUo8ga/ZsekuRRKOhpSLQAUezi+24aRyIItyaWWzyZ3VvScaOMKsv4ng+iSJxExKQaRVlJtYtxVi0YExNHEYIYo6lqZkaBbIad3tjEJGPlBNLg7LRJBSFBltOcwjXGfKvnS13WQRCmjTsZMwYCMR6u4yEIym99gIyJy3qkY/+WvURIe73T2r+IvGmgqjphZiISMz1kksSoqobremtvDykjmAIiVU21fel4fb2bqelGUQRECcIs1zM1KMXp2D9JUBWNlGB86yZPJ81RWocbrlnYDEQlqV4+DfheG4ZSh/46zkpVZEI/IYyEtMM8kTKzegbGxDgzFWVyhowFTKc3acxParDK9v9r25UzdHw/vP3aekniBE1TkSXlLWsqCOm+kW0vXqp3zCKR1tFbcZzWRCZEJIl0u023el5BIIo8VtbqVlcbZ/scxxGGYRDc/l1C+P/6z2/PER99hGHkee+DRxydnrFaOregXpAE7uxvoBc05sGKoTXgdNzl+vqI5WLKbLbAdV2MvI5pVqnWOjj+nIubMZIRsrJjWlstpu6Yu/c+ZLKcsHIdPrl/h3wkUpbLFHWdkzevOT5yaO1sgWbS68/58L3vYE0D/EhkMpkxGQ+J3AVxvGCrdp/RYEiYQPuuiSdPkPQypVKF0PGo1Le4//gAN9I4uF9gMr/Ec2Mq9SIjq8eLo8+xgxmVlsHCu+H47BpNb7B3+A5+PENUYOZG5HNlNoo5BLdPIa+xWzrg7McvKAQXvPj1vyJ0bZRQwB52mfdOGVw+w3cmbDZa7DTv4tkJk/GcpT3EMBLqeoOcF+P7AZ1WnRfPf8nzz8+wZyZ72wcsVhNcz6E/eE2rauJ4EwwlpKDluX94yG6lyk//9C/Z3dhnORnRvegxm09ZLlw2OvtE0QxZ0Wl2qqiqys7ufcx8gUbL5Fef/4JY0JHUHEHk8vnzH9PrzXj68jOKlTKGsYkb3zCdrxiPjpne2DQ397kYrrgeLVksZJLlnHZZwplZCGrE+XWX4XLFp796geVKLGYxo4mOYubYObzDcuHjLa8JVh57+9s0Km0eHVaZz18RWNdstBNq9RxmUeP6so+ZL7O0Iz74+HfYOzzg/Q9+wMZBg+vhKZbTR66Oubx8SVASqTbA9WUE08SRRY7dK54PF8iCiaLOsVYBi8lrfvqnf8bb4oH/7uUbA0pd11muFvieRbVmEichjmMxnU7QdIVioUahUGC1jDg9nvLll18SRRHTsYvtzFla16hyAcImubyGF8xw/BvMfIV24wHtdptWq0Mxv0HBaFEqmBzcreOHSyzLAl+mXthFihPqxQ02WofcdM84P7lke2OXWukBspRHFvN4toGmVDk9e0O9XsNzYyRJwrYCZssuy9UI15IRkyKeF5AviHz4yT3qtQ7D4RhEm0JR4bp/wovnAxx/Rm90xsK+wfFcXj6bMJqd8tWz3zCcXIM0Yziyefr8N7jhjPOLLucnU7rXK968OaE/ukQUYsLIZmf7LqEnE3omnu+y2X5I6Ja4uL6h1vQoFRX2treIJYVVPGNuL7j/YAdJjNnffZdPP/sZ4/Gcfm/EzZXFZFBmY+MezkqhWDS5d/gOd/c+QZJszILBypmxuXHAfKyyu3c3daWFBu2DGoVWkUg1qO1rSKZHfbvIycUrls6A/cM25+c/IwhOsedTQqHHYHpELpfDc0NOLz7Ftl1K+Taj0RnHZ895dXTCg7vfIhJGvD76W7Y7TTYau+xvHFI0K4jSkg/f+5jTkxd47ogg9NjdbRE4JTY6+yyXS9rtNsV8hb2tTUgcyoUS5xfHaKKFEhbANqiZJkUDkmCGFMpsNitMBj0q+Qb3D+9QNCNqFZlqSadkKgi+S6fmsVUVydOke3POvbuHtPJNht1f8tH738dzY7b3G0hJkfngGFWIMCoqebOBnggEbsTx0zGGUGKzvslWq0G9kqNSrDMbLXEDl36/z1df/Qrftek0d9BVFSXJc2fnCQW1Thw67O6YGGrCeDiimC9jL0Tq5V0ae1XMUpsofDsmREgolPMkBMhqFR84unyOFQ6QlCY+F0ysa3KFHDq72M6UlfcpN/0TXNdnYZ/RaNS4urpGykfcefgBTjJFz1Wo1AtY9pTexZitdp2itongJxjaEhmJb330DzHzLchGkst//k8QKWXu5KzaLguSns6miNgYeZUo0dB1jcDzMbRSFg0j/NaH9cOYt0YQXZeJwzgLFM+yBeM0vkWSRIJwzb6t9ZFpxV4asC1kx0u4ZRQNQ09jfWKBNPA7uT2uYeSnrObtFqxBWkLO0ImidDvWndMkMYqsp8aW/9qSOqkF4rSq0MghifJvsX5JnMbhKLJEFKb5guuxtShK2f1VJQwdBNJoNCEz7SSJgKalYDI1G6VO8tSNkvVPByLE0lsAFqcMpSSn9YpRFL8FaLfjY5EwDAmjOAN2WZtMxnySpOHvazZzrUVMSB3aiqxkZqZ03C8ICcQhCBFxklUufo3YSE9NRBy7eE6AJMqs234Q0vVKoogqqySJwjqrdN1WhJCkXeGRShQKKWhNMuMTImnTkEgUJsRRZgLLGNWUpfTRdCVjLdd1n0nKFAsJ+YKC4yzJUoFIkoQwDNF1PX05CqNbk5ZweU38s5+zvoI2/0//Z773nR8gixFBsNarQhhBdzFHVBMUvUS70aLqhTx5sIEmLxl0r1nMPTRDJ5RCroZTJLPC1mad+SCkXWvjWgOiwEFODPJKmYvzV5xaFn1hyThMUIq73MyOiaQZQTRj2D/l8FGD49NfYwQq3/7ud5BEjfuPP2TSO8edyjQ2yhRKZVr1XRK3ymLk4gVjZAO2H1QRBhqXP/+c41c9XKeOLC7RTI3uVURer7B3V8MLfAy9jWIG+GKfr47/hhifxlaRvGDyyYMW/uyGSrmKWEpQqmVc08Y2yiTv/I8p/87HeK6N7XXJ5VuUjLsc38z5mz/7M37xxa+4uhhRyokYsQyejed2scYC7z35Fk/uHaAnLju1Cp/ca3H94pesrge0ymVqRRUjaYEfoudS7fP55RVnV13q9Q1++KNH9LpHGIrM/l6derWIqhk47oJCRec3L/6K+XyaGr+IKDdyPHv1GcfHXXxfRcsnbG912N3pUC6ZFPQGJ6+vGd7MUMQmimwQye00J/ryku29XRZOyMRbIOsmvqHTKW1RNA2IAwQFWuUaYhxSzAecXn+GkdeZO1Nyeg1FsNndaiCJOZqtEpE9wQ5Nqp0qtgdzf8XN/Ij5DEKOefr8FxCN+M1nn9O9PEZRTQr5FkahiJAr0ewUqbXayHkd5BEz54bA8FF1he1dHaWlMPBs3pwfcXZqsbl3jyj+xjDxmwPKRrNK6IEYq9hzh8AWqVdVZKHKfOpjz2YQi0gI5PQrNjsuan6ArpSp53fIFfN0r99geUPcOESTDKZjn9FkhRRL5PN5Ls76mLkGSawiizDujZjPr4mxQNEZLI6w/Rm+J9C7vsL3F3Q22nS7MzzfplTOM5qeMV9dEjOkVqugaCaGWWFj+w6SVGI6mVCrF6nW9hnPF8ydc8SowvW5i2bEyIKOY69QFZn7d+7jzmOEWMVaSLx+ccbZyTkr5wRFFhGSPL2rdBQnSipJpFPIVZiNV0ynE2RJo1yuIsZFZrMlrfI7nB7P8b2AZ19cUDDqBI7ObDYFYsazIZVGCQSBvLZB7LRRdYX+AIazJf3hilL5Dok2wWeFoMrEkcZyNaFRy6GrCcuFxdJaoRgBo9EASYzp3wwQJJHL65cUygblRhEEB2vlkgQKkWtxdXqJrsTkdJGri2fIUUxeypGsQpp5BX8ZEMUighOxPDvioPgRm4UDovmSeGVTVA2+9/EPubkak4Qxm80tnFXEaLzi9fUpvt9no/EBvlVBk2Tu7e5T11pMegM2mgqONyVBxMVjlfj86vlvmM2gfzViu2Ewm1iE8RJRWoAcE4oKi4nD6HpGr3/NVj2HFitoQh5ZMpktZ2imwmgy5mLwJQtX4HI8ZOWNEWKB4QyUVp2ZE7HsvaHclJlPVpzfvKBW2GXlnoEVMJgPOF4cIxgRRqGEUnJZCl2EYoH+VKNeuktV19iqb1NpNfneD35Eu/wezfoTFp5Frzdhbg3YPWzS7Xa5vplzPZmi5nIoYgl3HuAsTgg9mWV/gqx6mYElfV6ZSg7LMim3yqixgZ8E5PMamiulYeBKA38aMbOGqIpHOb/J3uZjRFnn5cmXLFYLTFPgtHtK5Fts7DTwLB9RKCDK8ODhBrmoghQmFDQDU9invf0+u7sfIgoi8tEJ3j/9p1gvLwljgcAPiaIUlImCyGK2IPBmlKp5fC9A0aT0QS9BGKcubTHTEIqSmI0b053LJteAgCKRjXFTLVySoiJkUUBI4gwwZUacLI5GklITShi8rdTLrCiIRGkotpgQZ5mDaQpNlJp91rUscQqY4iRCzhi4WBDTgWecQdcEVEVEUdUsoubtByBOMpNIpusTEyUNJ1+zgiQkQpwZSmK47a5OmTBFVlAVCRKZWPgaW4iILEGSpFro215wIhJBQiAmilwSMUmNJmTjdSFj4EgIgjTG7Nb8IqZyJFmWUaQ02udWZ0gKxmQ5Xbft+iRi2pWdrDnlJA2JT4R1gmbmEgdiRBQRxDAkrS9MMoNUJkmIY2QldW6H6YamYHSdDyqGxKFPGEUZaF5fHymYVBUJ17eyrnEJIUnPU5yEqLJIFPgEXpCCV+GW5yWKYxRZgSgmCFJla4auyV5f0JQ8mlJITTvZuYzjGEVRs9ilLLsTMT1vv/mSNbMrfvgB777/EbEgUiyVbl+VNFUj9ixwA3y/R3c1IS7kOe/OCEQZvSgTJH0++/wZ/dkMo2gSJQtWtsOd+zu45Lm+mjAdLXj95Re02lXqzQJ//cuvIK4APuWKxkb7LpqQZ6N6n1y+QhJE1Do16nt1eoMBu3sFzi4n5Bo1zhbHfP78KyS1hO8ljIY97u1uMfG7rCYR8bGG3bMoFZ6wu1ti4XapNWt4K5fAv8aahzSMT9jfuUuxlEdTQzzPQ9dyiEbI1bWFJ4fk6p9w5/H3EXSFUukusaPRKNzhnY+/RXXbQExkrm5m1HbfYSUGJOKYw+YHfPujv0NJC1Ein9CyuBzNUetP+MMf/W9J8gmvphe8OuoxtpcMJ3PyjSqH98sc968pNDTieMXhQRlX0pjMbJz5kpk7IJeX6F6e8KafECExmDtsbrVZjQcspydUayaD4ZRyoUour6PoAtZqzvjqBsEq0Ckf0ihV2KrtYPs+L79aEokyXhIhmhFHgyOePT9GMRQWcw9F0dCJWS6HzK0bTgcvuF6GmHqJG39Ar7uipink9RJJ4hA6C+qtLZQwZjFysYc3eCjUCh2WNxZqLODYMUgNHmy9S5KYlDdNVLlESW0jq11ev5qg6jKn5085GxxxPJzx6VcvUEshp5c3yEHMsK8RU2BlQ7W8jWq2GUwWaEnCahHx7OgrrOGKvd1dlJyCmI8RtfI3hYnfHFDGYQCJwtnpDdVqkb29JqO+R6GgAiK//Owrao0S735YQc8tMHMlTO0BkeIyWA5SEaysIQoKz794jaKWSdAIgoD+9JowjNne6+DHMdf9c9S8CoIBiLRbu4zGA3wvpFwxiLGo19vUyhWieEKjJTOfTji/eEm5XMbMVwhDj37vmsVywtLq8/z5cxbuKY4tMZ2KXHf75HN1tjoPmFtd6o0SjXoL3w8R4hKJt81XX1wzm0+4vr5m1LOZTwQG3YRms87Lp1PyuTqdjTqeXWA1FRlPj7k8G9Isv48qtNnf/C7d05jAKtGsPmA6TQ0k89kYw5AYDAZsb94jrzUpGSKPd36IETU5P/0KXRYwdYXZaExOzxO7MnHgUs6XkGOdRtlkcDElcJYknsNocs1geIliLFlYF5ycvMEJLhiN+uQKPitriqjFJOKccqFN4NVwLJlG+ZDNjQe06ndZTXSSUGZv431sa44iVtLAV3mDzXybciwi+0s+fucD9jZ2ePrVV1Qru+zt7aFpZb744lMuro8JwwBBELjunmBWIhJxzGIlsnAsYm2EZipMrT5e7FCsyixsl+HlhMPOBvLKIZkMuN/eZj46o1Dz6E8d8vkKAhJ6XiGOA1bugGp1H8QIN7BxxQpDy8YTl8iGz8HOPeTYRBVUDKFCo5inaOwTxQabG00SJ6Say1POV+n2emhmhfHQJfBESu06ZvUJ44VLpVqnUjvAX0GjXSVX3qE/uSL2wba6JGJIa/cQz69wsL3PYrHAjue8PnpKTi3x7gfvc301wr5x2dpok7gCO/ktvvP+RwiqS6mj8tXrC0qqSmAJSO7bHEFRFBGNIkhLBEtAVma8c/g77Ow8YmoNKOSbHDzcRS8ENHaLBLLLYqkxs+ZIOZfqhoIbxsjKBq2tAwbjKxbTPjXZYHVqU9cSYh9e3lzgyxGT4ZQ3N895+OCHiIKU9XT/nP4/+RNASB24UYgXeCRIzMZTgmBKqaQyHc9RVAkhTgj9CF2SsZd2CjzEdcczWZXi1xhLUvORJCfYjpuNMslASMoaykpqxljrJOMkIolTA40oSlntXtY6Q8oGmoVCOopN1rBCujW/qIqa6S7XTt+1aSOt7UviNZK55S8RpYwxhN/6rDc2TiIkWUQ3VPwgvB113+oAWRNXKZuWjorTdYehj+tapD3lwi0TG4URoiSiKupbzSDcGlIg1Q2SSG+/lwG1OIrR9LSQIY4yEEVKbCYxKEqcOdHfgvzbnMooQhKlNN5oPYtmHYqeZl8GQXSryVwfjTiOUllCkrKGb7Wg6fbKkoimyqiqRhRljUq3utgUyPI1beRbBjttNlJUOT22GahLvynenoycYYIgsiaH1wBfIDVoiaKS/mCShuKnuDJGlGJ83yIIo4zJjQnCAElOY8iCIMgYU+F2e8Xz80yvC9Inn/DDH/4ODx7cS1+GsvPq+R6KpFPdLDOdjQkSB7eYMJkMMNSY8aSLqJgU6kVGA4skFpHVKoJj8fSrIybjLuWcQbnUYP/BIU9fHfPi9Tlb7Qqbu21KtW38UODh43fYPTyk2szRrlaYjl3MXAXfitC1mJevzvnq6VMsR2Bjc4+KWCdaReiaydb+BoPJlHc73yMXrTg+OaLzOx2UDuSNFvFCJlwZ6EoFIchRzkdYzpgocLi5sAkcg0cP7vHowXdYLZZUa0VqrQIvzn7Kv/rTP+HkbMRsbiFrK07Oj5AMidHkAtef8tHH76JoPgv7BlHTePRxkY27Dfbu3KX4cItFcUav/4xXL7/iefeE5sFdplcLgryNr6wYuTNsKcSlQbFVZGwtGDsSV9M+/lzi3mGbOFoiTyS8SUy9tcV0eIUQa0iSwsnlDYPFlFKzyIvnl/QuYnShxun5CcOhC7JJqIh48oJIEUh0iUAEOYkomTGzcZdS0aRaLiArEfcfbzKeD6hoKkHiYfkWx6/O0JQym/V9xEhgFjg4eGw2N4lFF2e0oKzrlOQ7zKcBipyjnlexJyty+QBB1xFyClZkE0p5NLPE2cULEl/CmTo40wg36HFx0aO1oVAtNGnWmlydXyHhUS/nWYxcTEOEMGDQf04ouuw1itTaVfqDV2xXKkTRDH8xo5pTGHlLpp6NVvP56a9/SaH13zia+W9cvjGgvDibUCgkWSC5wcoeUCqVKRcKuLbFnbubXF+fMh479K+aXF9qfPHZJWG0pFASUSQNPWdwcvKcrU6VRrtKu91mf3ef7mjEm9MTxmOLSLDZ2TugWt4AUWC5cBmMX1Iu5fCCBYEnIVIAIUCUEkQMer0upWIegYjRoM9sMqdYKLC0ejz96qcEwZLu4BgtJxIJLsPpGZLiYTtTiIvYiwKOJTKfBChiA1ksMJ5O2Nk+hKjM3b33ePLOA0xT5w//4O9Tzu9Tr5nY1gzfDZgNA2aTEH+xz2wcMp/2+Oj99zg7vkROipAsgBhBdMnn85RLLZYLi4P9Hd68+Yo4WSDnahxdHRFrEa3tGtfDc2QjQtVNbvrHyGqAIM+JpRs0ucVs6vHo0SamqVKrltnobGEYBiJ5fA8kMU+zdo/33vkd8uodVrMIpBjCPBdH54iylUVOjPji2S+JkhHlosFWa4OyWePRowOaDZOl3aVczyPKEIcTKtUCYVxiOvHZ3O6wCGwsL0BSZbr9Syo1lcnsHDdcISs5xhObQrEMssTKdXhx/JLJYsJV75qVa7N0A2w/INQTXMnCMKtpKPuoj5mvcHp2g5/4aWCxEBMlU1ZWiO+rhCwoFGvMZi695RtifYJhlnAdmdOLU256PfRcEaNg8mb+JX/8X/wX/LP/7M84ujrFSWb84td/QxhHmEWZk+4rdN3DWV0xXR4hSGBZS3wrhMDA8fMs5g7XZ8fIosbR+ReYpRLd0RmD3orr4TGnby4Y3ExADDFLeYTY4PJ0wHw1JkhErJUHcZGprfHl6yF5tYwWLLlz2GHuqYhKkVa9nY5tk/TBZOZy7JU3aOwI1MptPDfAGvVQhZhSucDgesAqcCjqbQZXLuWiSL1YQA7yiF6Ov/fDf5eLk1Pi6ZJ6waRUUhjMTwn1GUGsoOsGuzsbaJJIKAX8wR/+L6lWtrLRKEz/yR9/LRYmdTTLksJ8OkGSPBrlPMQS1VIJkVSLpuo6kqKltl9BRIy/bsh5y76SmVVEAWRZASTWcdtkZhFFkZDEBN8Psof9GsDFKKpEHEuZRk5Kx66ko1DHWWUMongL0BLS36PcMqVfYxnjGDHTU7LW5YkpgJDEdT2gfKurXH9EMQWNUZT+tyzLhOsO8mxVa/2gIAgEYYQgkgWGp8YWRRZQVTWN/lnjpAzAiEJaMhCEb4PSxcxZr8ipGcf3orcROhlIkiQJTVUJw4h13/U67BtiBCFlmtOmncxRnulGZVlE0zTIKhfXrvEojhBFAUOXgWwET5xdr6lbvVDIo6hq+nuEt5B87RSPoxjHdhEzEPv1GCNFlvCDgCQWb4/rW2CY4Advs0iTzFlPJnvI5XREEVzPQ5DE2+s3zl5CTNPA9wPSKvY462ZPv6eIOqViO4teentuFVnOAu6TrM4xOwdxgtTtsvrxj1N5AHDwf/mPuHvnLnEUZFdvajTLlwz+8qc/pZJrMbmeIsQORCKTm5i7e1ucnlxiqBXymkvJ0CnmVUQhIV+v0N6so0oRkZ/w9OlTpCihXd5EESyuL8eIchmEgC+/fIrtxfRGl4SewzuP7nJ1ccRkOWbk9Fm4At/73e9jjWc0xTzIHrK4ZDme0S7soMg5KpKOa8UoLZXhcMwXT7/i5PoCMWdh2zNkyWVnf5tAFFksR6ysMavlkGKuxOnRK7pnXQqFAtVanuUoJBGWvP/JB1SbeZaTJatJiO+6zOYu1UoHQ+1QNJu4rsvHH/89CpUqbhzjhAlzKWE1XxHYIkI5T37b4uT4zzh/8ZJCO4coKbirmJwucHUzZuX1AZfJwMNxXcbdKTlZxvdlvAiWyyX2yiYObMxY4uzmFDf2EQ2Fan0X1yrjuAGCtOL6akjZrNLrXnDn8B2MvE61mae1q9MbjUnEhFJtm/0HO6hmEc1oEEQ57j94hFlQeHj/Aza3a/TOj5EEjQcP36FoSJTLOS76r7h4M2e7U2fYu2K8jGl3qiSCQi4vYSR57u/c53BzB4EEz5ozm00YLXpEUcRyPuT89JJifhsSF2yZglam3drk7oOP2Gx9SF7JIwkiD+4fEro6ugKKADsbTbrdZxRyMqvxgunK4eb8DYqbUCmZaGhsmxW2mptEYYHJeMV4NCWfzzOeOd8UJn7zLu92p8LhYYM3r/vcDC7Z3GgTRSIXF5cU9DY/+PZDnr+8wHFHeIJNtSawXypyfjqg0dpE9CfYvkejUkLCR1YiZrMJzXqDZnOH5dzmsv+CxWzEzuYhO80nBI7LRqfFdGrhhw6eG7BSpiSJgCzlmczGNJpFzl53yRshmxsfMhkv8b0Vg75HpbAN0ZyvPu+hGnA06dHZUumU32Gx7HPSnbC7tcti0ePq0qdcanJy1cOLZpimjqZU+Ds//BYnZ19yfPQCEo2coSBJdURhSO/Kw5DzNFsik/EF+3t38YIahZLKaBywv3eXRBrQam4RJiCIPkdHR/w7f/9/yMq2CJIluaLEynLY7HSYTiU8b8580UMR82gG6HqeesVEL9u4boBZrOA6EyrViJU/xg8CNGUL8jbV+oesFjGVUoQXDpGlPNZqzNHrK3b2G9z0FrTu1diqwcSyqFY0CBP0QoPR9Yrx+BzTFDF0hclIYTpdsrv/DoNRn0h2iLyYWCrg+DO2mlV0scBgOsBUFW6m1ySST7FYZDKZYahNZCBxJixmIVFs4dgrdKFCuVbHdwe4gcugb3H37gbTvkVuq8HR5QtixhzufUKvf8WG3qFdecLUeYmCSujVCSIba2ijtdsokknBbLKcddHkPKs4IQin5E0Vw6hwNTlBVgJEq82H77rUSm1ENaFc3+XxR/+AcukOulHgxcufcnr0X/Lo8AmeJzCfTcnlXAxFISfBXHIInAjXOUdTW0iST4yMLK04P/+ccrXNcHKNqRiMxwmirEHoshhV2eg8ZDG9JjQhV1hgCBOeXVxxsPUue5V9vOUYnRXf/egj3Nd/ccuECKLAYrIiFPaZ9N8QB22Mmo4Y5In8iMHgjGXfZ7N2h1hV2dl8Dzt4gePmUOQ2ThBzOThB0CQcXcZUykihTeS5NA9Mjl68QqZItVPBtRS+/e3/GZs776ZjwNfH2P/xP8U7OkEUM12aJBILIovpmLwS02w38L0AApc4Az9pXIxAGIYEAW81eMk6nodb5mptApElAUEUbnML1+RUkiRIgkAYZiaXjHFKdW4iqiJljFWat7hmMBVZRhQVwihI13erswuQJIkojAjCrGM6yQblgoCmy/he9NZ9vv59Ueqmtp3U8PH1Za3HExCyHMNUf4mQtbMIKQjW1XWcECBlYepJRBwJKEaqo4x5y9qmX0hAiJAlJWVlBRAz40scRxiKRBSGJLx1cKcgWUASU7d1kN54WDvfxWyfJFEmCtfANQN1GeOmqRKe5+MHKVDPnEuZbjVlOIPMLb0eh6eB6wFBYKU620z/ug40FxIQ5dTIFSMhChIJ4W3EU5LEyLKU6kfFNG1UEMTb2CRFkVAUGdtOI6kUUcmYxrUmNH0RCcIkjVciycwEYhY/FBMGIXEiIZKyw2nMUUIYuqxWk1SOsD5vgCilrHaaPxrf/l1KkpSaL3/8l3R+5wdpqD8JxWIRRXmbFiAJ4DlLJM+nUDMoVO5juDH1u3WW1oBElMkZCnlDYxlqiJjUigX61wOCZMKwK1HI5Sl1CkhenYKocPfefQTxPcarC87OfkOn0aJa9zk6+pTdrbv0RjOGrsP23Q6Xp9f4y5iSnidxJuREGVyVJx8/QHQC7JnPqy8/ZynkqBc9fFnEk0I2Sm0O7tvEfkJB1KkZBrPZlJkbUdtpM5kOMDSRalWlkNeRxCoJEkdHJ9x9cB9dvgKhhiToGJrC7laDIJqiJjqBOwfVYDGfEHhHlKrg+xayGhFFBkEYons2c8en1qwgRgaqoZNIGno+ovv6JaK0jRgtGA8Vco2IolllNlwQWHDnwSMEYYvFbIIiFmmaB+y9L6HlZE6uTxB0mUa1TRKJFHMmi4VFHK+oVUsIEkiaS7lZpbpXYhUN6M1H7N2DNydPMfRdLC/Pg/1d3rz6jIJewJosiIAnu4dEqyl/82//LZ37D2i2CxTzOoWaxl/8+V+RL1Xp1O9z/uZLjl83yRc1VpHCwp2xsAUqxQR/GWEtFeyFQC5fRM0ZzHtjFuMbRsMZxXyBnFHh4FGOl88umUxtcvk5p1crtEKCY29jmgbz2ZLYU9jf38D1+piGxnzSw7Nd0BPOzk948u5DBlfPESSVxWSIt1hhSy7zEwtRlymqKnqiESoCs/Hs//+AcmUtCKMtBMmg0VRQdY2zszPm05Bqzeblyy793oR3vrWJpmkMrkd49g2bjQrTvk1zs8x1f0it3EZOFHrdGyQCRsNLJMMgiJdsbe7jFZsQRMyHQxqVKr958Sn5soYk6sRCgB/FKIrE0raZTpeoukjOKHK4+4DlLCGJfO7fvcef/tt/SbFqsrm5z+f/+gt27sas5jKhI7HxHZk//r/9mEY7oWrs8OyLLh99y0Ct6TRaMnsHO0hildcvTxn2e9w9eIxr+5TKKrVynS+/+pzN1js06iPqtRph6PPDv7NBxJj9/e9zcnzDajmmWHVwfY+Ty1fs7DygPxiz0bnPbOajyBqtVoXhYI4gaUR+nsn8BbKiEMYRpXIezxEIggJGQcaxzxAlhd7gDQIRBfMRg+6AUqmA649YLFaoTp7OxhbD8QVmQUKIPTobdcycCrg8evSA2JtxfdEjFAxsSUWIYiTFI1GG5Mox3as+d+5I9AZTvGjK4nxKPlckjiOazRqu46DkfCazG/xAIF8qsxxG1Ovb1BoN5qsB7eYuhmEQJX1MWWE5k9MmFFPDW4EuNDncq9KfH6NpBq5nUzBVolBHUItUGiXmYoxYVZhaU5z5K7QAZBVm8zH5UoV2p4WRg/F4TrOxi3dp025V8FYKm43HROICowC9mYMUd9CbAlVti2rxkOnEwourPH7n91k5FqLs8YPf+Q8ol8v8zX/5J5i6S6Mm4NGhXu4w7o3xlgu2dx4TxhVmowWmUEIUNIJIIl8RiEnIySJ6TkdUc+CBIosMF2MKUoHqToWZmzCdLGiVynzrUZvJ0KZZqaEXPBI/x2dffcaG70EGcJIkIQl8QsEmTmSickjbKDMOBtj+hM1yjUVNwO3foNNGVUASO0wti87ONqghg/ExjXYJex4QMaGQNzEb+8wXBmF4xObGHtt33qfTvk+hvAWIiK+OsP7jf8rsn/+LDGgIKLKCFzq4ixXNsoxh5gkDFUmWEVUBSQRiGVEIiIOAOEqythiRaF0xKKYs5zozElJjhCSL6KrBMgkzZilOTSJJgqSkYDDOIi/jOL51jcdJkDmqk6xOUcDzY0pmDkmOCcIQSdZIWI9sUgASRnLqDs5Gq8ItUA1JE2duZ7XEcYyZzxFFPn4QZC03//UlSRIURSQIfdb94OtxbxqqrSDJSmZOSVFZypLGKLKK67qZftRHRMmkAenI37Jd1pWKKQspkMSgqjKKIhBZUarZzIDMen+TWCAIY+IkQojlLPYoRpYkVFnFDkJiUtC+7tJOz0qEH8YIgpo5zdfj9DTs3HUdErSvjfMzqYEgIMng+alrfs3+QqY/FLithIyJf+vYiYKAKCQEQWpEErP4orVSUxTA0HVmM4d1VWXqzJcQScGoH0QkSMiSeKshTX9vWuGJIBMTpw06pI74OE7QcuB6M6JIBkEg8H0KhUKap5nNxlMGPL1eZVWi1x8SHezzNqsADva20uzT9T4HCb2bJY13dkhcm+XYQdnc4/zsJ0ycBa3GHtNJF3smsnGnwcwecfOTc0JpSse4R8yQ6bKHOG+ws7XJxVmP44srcnmFnc06Fa3MoGdjFutUTZiOptjJmMP2A3RxCyXx6XRkjp/PCFc57hzu4doJzmjBeNRjaU+pVz2mixVLf4eVE9NomYzPfkXFrGBFNsPpHGlrh9LOJsmkx4tff8H7H30LVUmII5cgXFItb3HT71Es1IiC1OwlGwa9mzlCZNNqVlmMLSqVEqGgoud1Xj7v0ay1mAwhZo6h5xHEgCgOKW62CBcBcZCjO5rwwQcdpjcniJHJbu27BPkF077FB9/5Nq8uv2TuaISKSHO/DIaMHCsgJdyMz1Go0d5s0J9eEAh5qk2ZMJFpVBu8efMGQy7w7vvvoSp5er1r/Ngn8AYcvbxAkTrcO9xncT1CDhYE9oylZXOhx0SJRBRKbO5W8V2Xy4sRi5tTWi2TnKRjbj3EZMGv/voZD977LobioTkR0eY+opbgSiqq4FKttFClGarZRCz0SQoiVaPIInAQkgViKLOzs4Oi5uj3V+g5jXHP4uDOPSazS5bzmI1KkYJZ5/x6znzusbe3R+i51Os5en0ZQRMY9WMO9x6wWFi88+BjLi+OSUKVg4Ntxlc2SWJxfjHgo3c/ZDD5jOFEQxVkwkTHqH0jiAj89wCU/cEAw5QQMKnUOsznSwpFlWJ+i1JFwvFFqnWDwdWM+fKMyI0x5RqaZDL0+4yPLtjaOaTbv8LMGVz3LtKxRiJg9yNWzopgdQdV8kkCn2alwGBwxrgXMp0GSMY1YZBA3KDUbpDP+TSq25wdzwiCEj/+sy/Z3Nxga3eLv/zzTykXN3CWNr5lsJoJTG/gncff5t7jOj//+V+wu1Pk/Xc+Zn8vx7B3l3FviSr3aTTq+H6cpvXLY276I+qND1GFKsUCnJ2/wrLmfOvDA37ztEskdmlvHaQGo75PsTBhPOmzs1fGNDV6Nwrz1SVzO8T2LTQDZksBSZIQkhxF00AWi/SHb0gCDVNvYuQKJIuI73zQRpMsfvPrKbmNOxwfXVM2W+RNkVG3S7UUc7B3j/PTIXt3D0hwEUQfUVmQRCa+HzKbjFguxpRLOq+fP6NWKSKpsLf5iMBfMhg9xx0E+KGMmWtx584uN9cXTGYLNvdq2PaSgNSxO50EIDo0OkU8N8JfRLw+6bG5tUGjWWQ0mWMvY+7sten3u9jehPv3H3ATLzD1JrJoY7R04iiiUEq47Pl0NhpIiktOzBEFLp1ag5ghurZk5cNqJVNqG2D4OG7ARx/8iFfnv0YxErqXOpXikuvBr6k1twgTh+vBaRo2rEJO36cg7xMlU2qBSsnc5OlvfsX9h98BYck/+kf/Uwq1Co/e+wRNLhDFNtt3dpgNr3CdmP8va//1Y0uCoHdiv/ARx/uTJ725/t4yXaZ9j+mZ4Q5JiRyuVtp9WGIJaPdBDwIoCoIeJED/gaAnCRQkLbUCRHLBxRKCliJ3aLp7qru6uqurbplr8t70mcd7E97pIeLkreEuwBKgbGQD3VmZJ05EZsUXnzVjkOQFoQhHR0dcnHY5ONymelhi0J+Ry+t4YRHNNtjae4A/vmJhwcrxqRslTi6OKWwW2CzLuDOLu9W7TFdtBD+D70fstDYYz5dEuRyO46CVy3jmaXJTT1kbUQnIBia2aTCxXjFwwfREYrnIxAbDiJHzWeSwSFYfoygFgsDj+PWXNDc20PVNothF1E1kNHLZR1SqLRpagR/+4G+RKzcTBjFKAwq3YPIfpbBKQpRETGuGFHjsb5WQFBHb9gnsMbIiEKRhkwgBUVJRJRFJFvD9EEWVU7CSALTb5PTa05dKyn7gJCsxIrfHg5B4BP005CGQTv+FQBwgCkri5VsneqMkFRzHTlKcLa69hgIRQdI7KAp4fvSN5R7h9r8FAXz/DUPJ7ZFGyLJOFLlvvHvrj7QbMnlfSQdlHK+Tvuut7uThwvOTAJ+w9u+l/wkiE1FKPIsJOIuSWFEQoKo6YeAnHY6SSBQHCEgpGE49hm8OJgm6xCKynAaVIhAEKWHfxLSGSUrk/jBMpgsjIanVEZCIYx9FkVJQmKagSdjCMAjQchq+x+21W4PJOIoRomQje+2Dva3PESXCyE9l7uThi7S0fA3cBQFkUcKP4jcgN2URBSEBz57nEvjJeRCFbywcCQAhvh8mYS1x7XBNUuiGpiGKESvTRkBProGQMJlx5CFJMqqqEIYesRAjSxKZTObWyyxLSbNBGERomkoQBEynU7KS9I2zL6AoEa7jYKxT3jHUdIOJZxNrTQolEdHqsV2+jx/eEJgRNaVFoagQmDNiX+bBnQphdpvA85DUDKKvEwcmkiDy4du/xy+efY5glFkNVSrlkOnitwi0yEp5Ng72+fxkSTHMc3L2Mbbj0u9VaGyp5DIajcYeS9NFCjUOP7zP+cUJzz4+54MfvMt55wpN0/jdbz/jJz/4Po6frP48uNek27lAdAMUstRKRaLY5uKqx972PSy7x1dfnPL97/0epXIeQRTpjuqIho+azVLN7+BFNvnqFmFoslgEeJGVyON1DWseUqg2mM1mGGKLjVYOORZYCnNEAUq5iMvrE1SjwNLxuTz5FblakR++91dx6bNahsjGjHwxQzbXZDg+p6DFTIYjtu4cEUkaU29Frl6ns+yiymXKerK2U9+sY63g1XkPWQiIQpPFOGbutXn8+E9xvQVGQaMzMDFtg3LRQKHExU2bjVqVSIqYuEskWWEerth7dBdBEBhfjxDiXSob92kdOWiaRjgrUqz5jJ0Zqlimfr9O5+QEQW4QhSayopBvlgilbS4uf8fEmiK7MVm1hKCJTB0fsZhFr9YJHRHd0LHbeX783b/JZHzOR7/8gs2DMq/OT7m6hM1WnqefP+PwcBM3XlErb1Kt5olDk07nBE0DtZbBW06wPRc9I7LfKrLwpohylkK9xXDQZjS6oaFsfFuY+O0BpZ4zmS/HeF6fpdmlWXtAqdxi0JmzmjXYvqPR73S4Op+xWC1oNcrkFJmzq2ukooznqfT6Qy4vzykUMwhhhK7lyGZLHO1v8auPP0VrCqyWEe3LCZYlkc/H7O3kefr5BXolImds4awkvn56xkZzGykOOT2+4sXXp/yd/+zPmC1MBqNzai2fKHDxfZmLi6958p0sG9U6j99psFh4tDZ2+fCDJwhBCc/zeOvtBwTBgtPzEw4P7nFzNcLIwHxxRa1Wo915SqwGZHKHNJo1BMlh5nwM6oCLmymIAZ4X4kVDhuOA+w+3uLm5wrFESlWRJ9n7LOY+1UqWODKZLl6gqDLjkYemZSgWslz0Vtx71GDSDzDkKqHXpT97zjvvxvz7j1r8k3/iYmgFhh2ToBqyvb1N4AgEvkljI4dCnqk5RVV9Qh86nT6729ssFlOa9TK6VgIvpFSqMp4uuL45p9GosbP7Q24uX6NpIbIi4XkOxXKN5naJxWJCMVdBjEuY7oJ8voCzErFWeVADpuYr9o+2KDfLXJ6fUSqVaFQ2CIIlBwdNOh2BxSSCUGZpTYgDmVxmQakk0u0N2N85JJsr0R+d4EsB+U2Z0WCEuYyZjBw83wHJIZOtcNO+BAmOr3/LZDlD0iVQpihGmWASsZivkCSZrZ0WK3PCcDJlMOqTMyp873s/4fzV57y8aZPfNBgsLnEchzsH97huX3P8u8958OgO3cESfxWBrjEeLTEKCo7pUSrnEZUSzVaOZr1Jt3dFc2uLyXSMFENBbDC4mBNEM5Zzi62NLXQpptYw0HWRYXfAw3vv0xvPUYs5XGsOUcDF5IJ333nC8dfH5EpbqEpEUVNvwxWiKKLnS5QK20ydY8x+yEy3CGYL7r/1IdfjKW5nzsPv/ARNbZLNZJhOJ3xnb5frqxuCyCejF1AUidFgwHvv/RGaUbkNFtwydC9Pbm+L1j/4L5j9P/9hwhJJImHg4ywWFHIapWoeQQLX8xHFCF2VEYUYRTKS/W1FJQoDZFliaa77GBOf21reflN4fYuqUFSZTDZPFFnJP5fK20kgR8Rz17OKEkQJ66RrCpqmMZ2viGMpKQcn6ZqMgSCApHibVF6XiSIHRVLw/ESGFoU0gCPG6d63SBi+6aBEWHsaE99fHIsI/z2u8/X8XxRF+H7Ceokyt+8vJiKMvLT6KAWaJDFpgaQWyXFDEg9pIvMmB510Pq58nzUYT5hAUn+pnPRtRgGSvIbGIjEBuqZDLCXeSzFlYVPGNcAjDCU8L0zl8hTbpWxeEPq4fph4Rm9drXHK7nqIkpIWkkMsxKl3NkBX0iWdcF3r9MbvKCKgqDJh6Ccg+01KKZ2X5HblRhAStlUUBWJBIIwFRCHxPCZTkOuS94RVXS8mWfZ6Ik5Y41QIkrJ7VTWQZJ8wiIkREdY+zDhClhN7RExEFMQUiwVkSSIIknCVHyUMqKzIKIrCdDLBdV2y6+uUfpTKctIskJo7JEVkHgzwowqj4YxWqYauZFnZS5RAIa8VqDdVFFWDrEG1WqJ3esNgMUdVYnaqBQxfoqwVkRWBX//6N+zf3SOIZYajE9odj+3mQ+7e2WU4mJPRVerZKl5wzUarzmhsUi4UyRhwdtZh5szwRIlJxyVzfIfl7ISV2eH05QSjfshWuUymcAdnMsHxNPRChueXn6MLJeR4iapJFDfyTJbXhKGI44iUirtUmybTZZdu9xpZyrLRrOHJEvPFCIR7KEZM++qcRr2CFyzR/BzvvPWI+ayHkVeRJR0kj0KpQmMjx+9++Vuy5SKz1TV+2Ofkqcndxx/SbGbJ3n9EsabT7x/jui5EU8r5JtOZQE7KUs4V8eMVSiFPvzciigIyWoZMYJDJi3io5KM8AiG9bh8jm2Nl39C9nnHv6BGCuuJwaw/XnZLLaDh2l2atyf1Gno9//QvKWQfXDZkxQMzq6Jkkw1FrbGAu5ywXNhsbO2TlKZLyE/7sbz/k7MuP6V5f4Yoq9w4P6F3dICyrhHYRpzSkkFcp5UrcXJkY9phqocTE6aCIdcr1Kq97L4njLHLG5abT4+6dXS7O2xS0BncPj/j7f/4vCZgxni7Za94jV5RR5JjrRYdxP4MsB5jmiLAds9GqcH45ITJDtIrMxUWfilFBFTKE8hLRjznae0i3PyJbzCIZPnL87ZdyvjWgfPjobc5P+0wnM7SNHNP5NYJQwwlWiCLcnNoMeg6rpY+HAoqBG8TkslXGZh81U2Q0GHBw5zExCgZZWvUdfvP575j329TyNULbYDi+RC1I2GFIUazRvVwRuSvevv/H/Mv/9neMBhab2yV855xO+5LvvPVdfvi99+gNxjS28them6xUoF54n7AVgLxku/WI1WrExfUJrdYBP/m9HzEbt7HNCNeR2dmrcnExYm9vD1mzkNUZtqMSRzLWasXSdQllk8+/aFPI7iFLOuOhw8o5ZXPjAZ22iaRMCMIQNxjQ7VvYlkO9ssvFyQ0brTpbm1UEQWAyHWHoMqFb4ujwIZa14OzimLute7jTK8rFAoq2IF/SmU9ienOZZ8cms3lEa7vFxi6Yy4hmK4vr+MxmS4rlKp7nkVM3MMMzdGmPVjMgnxWxZyGb9cd8/PHveP/d95laCzqjUwp6huWyjJyJkBQbTS1gOnOKhSqj4Rzfj8nmagyHfQpZcM0VjUKGWSfg5vwV+08aNPMN3tp7m4ueiaZaNCpNfntyTrNRJY4cFDnD/t4RTz/7gv23thjerKhUSmgamE4FP7Bo3zjs7b3FfLXk8uwFGxsbBL7IYjHhnff+hFDocPz6OS49iAwmXRPTFPnx7/8RzvIKOSxRkzPEnoWmaXhByFbrXUTxjEo1T+gZnF6cs7Rl3HCCameR9QJaTiBTKrEnhbx1+GPa7TOC+YTlVOTg/V3qRYHZ8hxvblM+OODivIOk+QwWSVXE6LRHvZ7B9WdUmpvkVjbnC4HdrU1032eFQ6lu4AxcyhtZfv3iJY8OD5iOOzQ3M5jLAFVqcXVzjRVFBPNLdrbfxo71W09fHMNyNEPJCdSFBxRrd5gubN5+9zF25GCoNf7oj/8u+eIG6+m83d3kBlcuvcV67jCOYu7cSZBQFIZIr0/f/GHH4P7yVzi//R3uy2Pc16eJrCuCtXIQIotGo5AslAQhSgixECEpKp7loCgiYhwjqQo+EWEYIAgiztrbSIQQCUn8Lw283B5X8vLIsozvh/h+gJAGYKKYNJkr4LqJd3Etk0dhhKrKtz5ABNLAiIQgJPN+cZScj1hIjyJe9zeKKTsZpL4/8MMQQ1NTdi9N6cbchnI0TSEI3eSYvgEggFR2FW5ZsvC/kxBPwFxS9J5MIwrrr6fytKJmCAIfz4sQpfjWeymKyflzfR9B0JKfGwtpeXgipXvem0COwJtjj6II10moREGQiKIQMU7WgXRdRpZTcCfFtyxuIgWv14Kkv+RljcWECZQkAdv2AIN1smq9YJTI4Q6xoCbnPvrm/rdATIDv+4CWhqAkIF0kIkqvRxoAS20SpG0Aiirhui5hnLwf0r+RNbDNGAarlZ1aApJqKdKHk2xGx/d9fC9AEDXWMnoUcttz6tpJQEmWJAqFfFoZlNwefd9Pz0kipY9GoyREdhugSi6NoiZhqLWtwQ98hq5Eq/oOnnfBp69+xXff/xNW1pBStU4+ZxBGHrGooxgRX70aEkdLSvk6jjdGFHRse45iiUi5DIEWI0kGortEzwhoWoO9nbucnb5CUbOwHLMcT7G6IwKpgVzJo9RlujdTiuUcjW2dz7+8JL+xw6r/O37w/Qf42h6nL5+ilnLUqwqHUYPPzl4jRC7ecoUmxlTrm/RnJ+BobFQPGVwH5Asy08UJilVAlUtEfoYPvvNjXp9+yVe/u2T/8Q5b9SKu1ePyrMt0JlIrugRWRCzHrBYLzFWApBi8PD2mUduhNzpBkDaobuyy26oT+++Tq5Zo/sebrOZn/Oxn/4hi7j6WOSAW6rR2s4TnJoPOGOQmsTIn9BxGbQulksW1e2SNBkZ1k9HgmHBls1QXiOVDRAVaGxsM2nMeHL6LIb8mV3ZRC1kiX2Y87jMcRxQNA8sZ05kOyJVrBGHM9uEB7jLEDhwW5grTtqHjUDeKKAScnHfQZYnr8X/OzfgJWUklNnQQBswmLjs7dzk+f8Zy5hMjknF05EgnNEIid0VBy9KobsHCYLawqNW3mE/H2AuToqZjBysODzcoG2X+/J//17z74X22Dz/kk1//SwzKtPY3GU2e06hsoCoicaBAoOA7Nt3+KTkli5SXmPV67Gw0sJYqgm2jSSpZ3WDRnWIuBlRqezSNDaaj5beFid8eUB6fvUSNKuSNGG9l0R6N6BVmyPoUISgTOgHtmxGlkkLkF/js8oa9wyKhZyBFKp32kEI2z6urKx4cHvHFlyf8y6uf09zfZjWZcOeRym9/8wWbG0foukhGXnF9kcy4vfvhj+gOh3z4kz2On/coFw2qlSZ3d94jFheMJjPe/+Atur0VotImxsEKFmSyGuNZl/NPLmm0dBqNHTq9L+kOPWqVArGXQ5BDLk/nVColTNtlOrkhl9dw/TGaVKVUqqLKWTq9czZ3DMZjh8eP3+XzLz5io77LfDam2bhHQAPH6WI6r7E9kWLhEaGQQ81IGHmNaqPAahGTyZn4vkMsSpzdPEdVM8zNHq4bcvf+Jsu5x3Roo8oejeIBl5+JXFyccfBok5xe4/Hjt/n5z/6C+STEyKtIcoFCvsrVq2v29vawx3myGZHQj9ncPGS1aNPr+3z3x0+QZIH5oE25WKVSzXJz8ww72KRcrdHvzsgbVeazFZvbW5xdtBECk8pGlkb1DvrEQlAcVkGPdz+8ix9IqPkK/+LXvyQILT58+0fMFxMq9Rz1Vp2dzX1evjymmC/w/gdPOO8PyJYCzGjAq1crdnZ2GIzP2NzcxAon2P4USVQZdhcIog/RnC+/+G+ZWwt2Dqo4dhFVKmLkZZotjUF7gjn3sM0Ldndr+JJMuzeisbFJpzcgFnVCMZnG0rMO9eYOva5AuV4j8AWKxX3i2EZR81yOXzBauUSygJhZYHWLbGxU8JwCuVqTybDH3n4r8V4u5mRFEdPtYw5ERKXA6+4xtY0MTbXAarlkGZssFzaqqCXFyF6WSjHk9eUz8oUsC0dDy9dQdZuri9cU8w0aW1tcX13xOKv8JcXVyChcX56BJPPwnb/K8+un9FcRP/2D/ym63rhl06Tj0zdkyRrT/Nsf6Y0/+PhXOJ/8liAScF4e45yewXrJRhKxLQsCm2xWplqpEgQ+oe+jSBpRFCKvt44lkVgIsQIPQ8ohx4l3yo8DfHedwE1ETiFdjkliEuvGSBEQEeWQwLcSUCiISYdgHCElxkx8zyMSImRkYjGRKyViHMdOpeBv3NjjhLlbrVxIQWRMkkA2DBVBFLBMG1HSkkCJkMq6QoifJGa4XXhZB25EgdBNXyEW/61TmrYWxok3zwliQIGQtN8ySXzrhoJpRW++R0iOSZFEPNfED0UQ5QSAkyzAyKKI57m34Cgp9xZuZd0wCnBdnxiFBO+9mXtMgixaAsjSAnQBkSj00VQNPwxSI0ICTAVRJowjNEVC1hQC00lCQ9/YQQ8jD0HMIIoqcXol15I/MQSBl9iYEBKmTuD2Sq8DSHGaHCft/kzCSQGyIhJEEWGYgGgRgVgQSQBnjCwLeJ5CjJcwuHHykCDEySqS53u4bnAbwCJOgDYkDxWeFybHkZzG1DEaEUciYRQSRyJB4FOrNlAUBd9PA1xhkNwoZQlFUZhNp9iuiyq/uXUmZKsAuoYdBKjf+FuTcemPv8TzI/b3t1lOhzTre+glBXceEYZL5u4Mpz0itHJ46pINfR/f9THNItcXz5DFPLm8Rrmao3PTRSpXkNQBsRPzu88+Rs8pOPMO5eIGnijhiyabjRyj+Q2vn3m0trbp9Ab0Xi/A8JhZPY4Om7y6uKCYK7O1eYdX7S9ww/co5mUkxUMix8HeNrPZglWwJAqLhH7ExdVzxss5MzdPvV4lL5dwzAB79YL+Zx5vvfsOhj7j4voKz5Mx7RlCmEdmSOdaoFLcR8l7mKHNyoNKIeb+nfeZjFxa2xLnZ23++r/3d9jakJj2ImbuJVf9nxHZK5R4i8CzKDZ2MXIa05nHvcffwVraRNGcdu+GEIVyw2Di2JiWgBaE+OI1tUyViWkhxTHDUYdGpYxr+8iqT787Z//uITfdG2bjGYaQp1EtoxoK/d4MN/IxdJHQyrO5tUU2K3AxmpIpCHR7Y6YjiPQFSrhgOujjOxE7bz/Anw/pRMcctraZ9U7Qs0X6/RHt0YBS7i6HTYfl1GN7Z5c4nDD6oke+VCRXjPBHWerbPi+fdahLO7TqLa46F+SbDVQhJhpZjEQQjDxa7GD18mzt3ePjv/gMoaCykalDY4XldvEmGcQoYmBeUjQNJvIYcbViV99i0O6TbzVw/AjX9iiUivzmV1+wu7uPadqIaoXHb+/9u+Dh7ce3BpSzGejqFEEyKJfvcz351zz99DfIQZmf/rRMGKncuXvAYjmtMSWQAAEAAElEQVQilmG2mDGcWAhxjnq9hapa6AWJyUubT4a/pKS3+OD9dylUynzn3Xv8xSf/hh/9tIDnCBQKZWYTn7JuMu7DyGzjuEuurxQO79SR1TGxm+He0UMkLaJaa3D86opqxWB0baMbIjPzBbZXQpE13npnl07vhIV5haZLaGodQRSY25eEgUSr8TaIJvViicHYZ7IcUCqp6DmdMF7QHbX53ns/wHYdxqNjfv3JL9DkA+b2F0RRTBhZeLaLLM/QgzuoShZdVshoSxxzReeqQzFX4+z0hnwpwvd9uu0TKlUFWSghiyLljTpZ9ZDL8eeI0gJ/8ZB2O0ZUFrz7vTzFwj6qlOHp57/k8G6DhTnGXK1QxAxR4NLc0Om0+yhGhmzWoD8wmS9tMkUJO/qKKHofz7YRFMioGUwzZrN1kGyXW0nP3WLVJ5OVcP0psmqxXPgUi2UWiwtmEx9RDdm5+4BQDpAjgaJmcO+gSWN7m9XEIYoCdENiOD8FUaXaKvPy5meEdosYg9FsxubmFk74K56+eM7d/T8k8OqMJsfcv/c2X39+hmFEOJ6J43sUSwI1o8lsOkFXMpRLu8wWCgv7GN9ZkdOaaDmNsdkDT6BSyRMFUxRZTVKYgxjHXnF05w7LlY1o+Cy9IbFXQLI0potrREElFxSQFQlJqtNotOh2X7G4uGY5k6jXdikUC1xerNAyNpLsMZp5ZEplRClkOJwSiBZTS6WYn+K6C4y4zGFri5ObU7Ryja+vb9hsNckUNOZLkxgdRZlSquTQdJGtrT0yGZ2u18NcrG7rXURR5HDrDp2wS6ZRZra64U9//39GLrd5y56Jx68BCH79K4JPf8u6IkeW5TSZnTBkvp9M0dkvX7J4cUIsiihSwpZJokQURDjeiihwKOZ0yq06vu8wXS1QFQUZCeKQmAg/EImlKLkpRxKKJOG6DrIsJj2UQUAQ+CBIRFFwG5wgTpindSo4JpE6BeKEfQpjZEVIAVGMrEmoipxKnevd5mSWUZaTBZ41M5kwsaTSdSL9CusMkJgAk1wmQy6fZTK/ISRIy8FTOTeKkESVOF5vfCe1OIKQrKz4QSK5rxd3bsFEGtQQRNANBdtO1mYEQUgmIuMYRYhw3YB1xER6A0PSa6UQWMEte7sOZAWBj22HRJFK0m+YhmOiGFWRbmuH1scRRam8LEA2J2GZzm2KOsE4qcVBAMtKQkCSxC1TC8n58z0/SaOnwaiYxBIQRxG2tSSK9DQ0lXKUcQLOFFUiCsP0OIT05yUhDU0VkaUI14kglbSF9CUif12RlE43rqXkOL2mgkgUhgRByK1nMn1YCOJk4zuM7NSnqaZWjnUiW0AgvC0sT97POpEfJt2Yusp8bqMoMsVigTBKFqCidBdeVdXb8zeZTJKwzl92riIAuiIgid+wJogipazK0eER150l+VIeRQ6pVbboDK/IShV0VcEJZwhCC19bksnqtDs9qjWZm+Exv//Tv8JV91NuLrvIdgVEHdc5p9koctnrUspuIasCQlihM2njCxNaOz8gW7EJs0VcB/S8gbyA6+srtrfuUhZAEhSWgoimVhGFLrPpiGzhiu4iRA4rNHYrTGyL/mKCLATMRj2KeRVFy/GgucXrky/pXC7wvRfc3/8hre07/OxnP8P3D8mXmrQ2tskWPdpfdWhuZFhZOtXKBvPVKQXxiIXlUKq7REGefKnGTedXvDpZMZ+P+cf/+H/HTjWD6gvMZxaROmW+EpFKBlqtxraV4eq6z959nWfPz8kZJWTZoVSs0B9MqW61mJ6d8t5bP2I0vQBPJKdrxBUwag0yUoAY6ph+n9lshueFSP4WpXyAFrsgC5jenEHPJAgitre3ubm+ZDm30DWJ0VChVi9wed7m/sE72I0p93b+mGZti0xOQBRkOlfX1DYLuN6Kk6evuOitKBgmcmYPVfS46r9Cm2l8+OH7ZMUG5rhPOe9Sb1aYLtoIegY3DGhV6ywmfSqlu9zfe0KzWcYcWDhuQCRKtHZURv0evixRyOl8WKsxG6wI9n3UTIxjF1kEQ6r1LHkRZG0DbTQgFlRcJQOliFXoUagX6B6fU9N3+eBPv0P7ZoCaNQiViKvrGW/94NvhxG8NKEftPookM50tcI5EDLXFvXsdrG6F2fWK5t42Xzz9ilicEQdF5jMbLSNRb2Yxwyui0MEOFuy0dIjKNMtl/uV/84yH97bZrt/FiA8xjBt6y0uCIM9oOOGd9++zsxfRbre5s71L7tERot7m6ac++UyOlddmNY4pN4psbNV49vJjojjGddP1B0K2Nu8wm64o5beZr9ps7WyyXDhcXEzI5xtoOmiFBdP5jJPjATs7uyxGcwqlMuP5ijBe0drYoXttMbfOcR0HQYwYzD6jVm1SLW+zXM0wpAw54xH1/QKXVwNkZPJFmZ2NH+KGbV68eEGj3uLq5jWVUpnDgz3MVZfFvMdbTx4hy7tMJ0vq5SbNjX363QVeYLG/0+Lk5ITSE5/RuI+iRkSxg2upNGoNZtMBYuxgL0HTYhotjUx2k8HQwotm9Eav0LMyqp7ls08+pViViQSZMA7oja5RFJWrmytUuYprL0FSGc7PaVTvoCpFpsMx9dIhBwc+o+4Sb75iZE7IlTVu5udUchs8/eRzSo0CpmlTKmdYTB2mky95+OhDNPUuE+eG6aSDIAjMVl3yuW22tx7T6Z6jKDe0tkr8+b/+r8hmSqAbLOw+Wq6AZuSRZRXNy+K7K0QpYL7oUW88Yu4HSJklgRsQigah7GCvuiiKQuAWqDcKDKc3CLkVT595yErEeLQkCB12trZxGREh4ixs6o0tep02+aKOkbuDUcpydv6CjfJj1JxLvljm17/9Nxw9LtC/6eCvChzsHRL6FnFGJV+CF7/7He9+5/ss4jJKdYtXZofNx0fcXPYolUrEQkg+X6VUUllZPdq9c0TlkI3GAZPpgiAy2L27g/3ry9ui6SiOeN6/pGu8S2W5xx/8yd9CUXSiOEJ68RoB8H75Ec5/+f9AvD5Pgyg+Qizgkexfu17Cwjh+tOZ9EqkxinF8N/EkBj6qFGNoAtlKDlmSsL2AwHMxxPXNV8B2fRRDTCTsKEaMw5StCm+BQxwn295h6nUT0oqWtSwaR8lud2I1S5CBriYDB0kCY32LFpHS/sswCtd1h6kUDLIiJasn6608QUymGoVEdk86BYXbnyfE4Ho2kuUTRWLCrwkJyIjjmGzOwHPXCfu1pzCRgW/ByH8f7ZsCOUNTkSTwfQ8hKcxCRCKMQvSsRFYXWM7j22DKWrrXdBVNU5IuSDEFZwlqRJYkcjmNyTQEMTl/6UIiCCG6kWc2XZDsekcpiBGIwpAwFAnCJHgSRRGCGEOU+EYVWcLzkhS1GMeEcZSApCiRzT0vQBDUW0tCskUeYOgaguDgBymcElN2NyZl8kRESV4H+dPrniTOZUkGPFIN/Ru2h+QaypKUrg+BJK/rnNKEtxgThC5xrCCJ0q3EvP4ZCDGeZ99eo3VVU/LVAFESQEh9tumBReuHhjjAcVY4jkO1spGmy9fHl74QMbKksFqtsCwLRVUIwojMD3/4pk9TFJAijTgSWNfPg8jO5l0mSxFFglgQsBydpy8+QqCEUjOYr0ZM5haj0QXb27tcnDk8uPsYy7sEdcqnn3+ClpVpbB4ReA54On7oc3OzwLYUVHWJoJU4uHeH67bMyskwsS9pv16Qz26Qy+t8/fwVnhVSyOWoVbKcvzhFQKK10+DzLz/m0f5bPH70Bxyf/I6snCEKfKJrmVxDQEJhtZqxUb9HbUNgOZXQogyP79bZPSjx4tkFi8mUurvN9773PfLZHTIFDV0v8fTLT1D1tNZJXREECput+1xdn7K3t4dp2ywWEaPRpyD6TMc2uztvMxqdMvNjFFlF2Tuk3iixeHlBdaNIECq8evWSzc17XJ3eYK4icoaIoecwbZ/VXGA0DPnJB3/CZ1/+BU4Mea1MIEKmolAqqgyuTaxVDzmTrPz4VptRr4AvB4wHfWr1Tb7+4mu2tvdobhRZLZbIks7OThlNC1k5S4jr3D3aJqNqTPoBulpk81An8vY4v3jK/+3//L/nT/76/5z7T0R+/et/SuXuE8pFiZXvUc21ODrIAQVcX6Pbf0FBXSIpOufdV+w0DQIRpqZCpiDT3BSINYmMlOX89QUTM2SnUaE9eYGrPqKs5FnNXmCuyvRdmVolZjaLyekCq7nIwdv72MsFk7ZPruzgugKb+5u0Fw5hJFGUczTUMqUjlch3ed09RZXz+My57i0xouK3hYnfvtg8r1S4t/s+f/D9P+Hh/ofM+ibVQovZaI47L/Hrj3/L1k4Vcwl/8ld+jz/9H/4hjeYBzc06xeIO+3tH7B3dQYzBMCSieMnv/fE23/vwAFXKUMr7WOMCclBFjgWePD7g+MtzPL+LKHhMp1O+Pv41UZTh0cN3yFZcNN1AyZl88vl/w3n7U7IFFUEQMO0BuVwW3xPodK6pbygYchXTNBEihc3mPXKZOvmChmboDEdLTMtBlhXCMKTVTGoQglCk3xtzczPmqvsUx3Nx3Rg9o/CjH32PrdYdcpk8G41N3n7nCVOzTSiNEVUX249AUsiUPY5PXqOrJU4vviAOAybTPrPxiEbliP29HSJPoj+4oVQqsL93hEiWg/17FIp1CsVNGo0HqFqGfKGMKOUxjCqKIXDVOca0XDptn9liznA0AcHgqy9eoSgKvY6JrudYzmNuuq/Z3tlDllW6vUtMe4AgrTAyArIGjjegWI+4urnBtgJuuidct1/gegPM5RTdkTAkn3w+j5GrMpm6bG/dZbToI5Wg35+j5iZctp9TKdcp18o8f/UXTFbH+E6WXCFCNSwGo1OkTJ/XF79BUJdMzOe0O10azU28aMxs2QNZZmWamM6Y8fwcTZO46rzm+PQjRNUjCG2aGxXCMMQLZrhOgJKPWfkrlJyPK3Q4uTwmFlVenV0xsa+ZLvoUywXy+TqLpYPtekznEyLR59XpK5bWnOHA5hcf/wIkHVHJsXAmXHfGnF5ecfSkzMXVGRvbu+gFHU+aMXXaDKcTzJVKqdKgP74klm84u/4lpXKB8XhCFLuohs4qMpm4Q/pmn7N+l2y9zr/67b/mxfU5E2/Ci4vPeXHxDC2bu+3WA5iMx5Rqu/zNv/U/IooEPM9DOn6N+9FHtP+T/4Tr/9X/ms6vP6PTXjAYLOh3HTodk053Qb+/YjpzmS1NXM/Gdyx828Q1F3jWAlXwyRkRtapCtZahUNSIowDbcRADL5mzi5NpOkkIMXQVSZCT1awoGTmIowjP90FI/WOyjB8nwEBcJ33jVGBMa22iddF4DJIooWlKuq29ThZDHIdkMjphkHoIxWSnWUhBpii+6aeMwjhlxWI0VUESRYIgSgM0b5LEmq4kVTFxImESi6kknHjnAj+69cmlBT3IipT0EQbr5RvxL30CEMeEYZQCSTH1RqavLYAUO9izAWG0ruaJbit+JFnAduzUO8gtZg3DkEIhhygmVT/rou8EBCXn1Pe8W9Z0XYQehhGKoiOJStKKQZj+zCTpLaXJ5CBIzkuUMsZRmmZSFBFd1W8BnbAGv3GMKIjJNY9TMJh2WyII6QqOQpiWgwspS5uA3Zg4DgjDINlXv/3ebwJWP3kIWDN88XqPO04WmMRk9jPd60lAKcnvmK5ryJJGGK7PUZg8zKwdAGKU7HlHEYIQ3T5nxFHij0VIGP186p1cLxwlm+YJWynJMsPhEFGSiCJQ7xxR+OkfvKkJOj3HWc1RFPUbjDCYtkrf7HHWf83KsZjOesRylr07h4wWM3KlDLq6waPHf4BgOJTrFZDmLGYyo2FEvqzz+lWPXK6FLJcYTWf4jkIum2f3zhbDRZveqEOn/5Lh+BohzjEZDCkZO7h2n9PjV2xWNtjbKfHg4F0W4wXFeh1RUZlPxjy8V+fTX36Gu8pw9+77iKpCsR4iBCtKkoIWWjQKD4nlmEyuwWTeR5ATVfD6aoKul/nujz7EE3yQKkg5OLn4ip/97BdIkkK+UMdyLYxsifG8j2nKyHLA9eUIa5FF02Xeevsei1lEvqAyGlhstI5YmAHlxh0uL7soYpad1gaj8y7CzAXR4ezsa0q5Iwwth20FtDsjBv0phYJGPqdwcnrMdecl9nKOJEd89uIMKbvB6GrCdLGkUNZZLCI+eO/HbG/tYrkdutc9fvS9n6IFHn/jD/+QP/jg98nrGrHvkTWy6ZSzSlZtkS8EZDIyy+WSclmjM/oN//n/9e9zevaUn//8H3Hv0SafffIRe7t/k7/9d/4zdCFiOA5gEfDksIlnerRvBpy8viSWXYYLEaNxwNadhxSKTSrVLKpc5Lxzxddf3/DyWYebqzEIWWoVHdkNuVfZZtW+gHjKsxcjXvWumcs2g1UXJaMyWYboJYHYG4IncnR3G99b0mxV2NhsUVIKbFRbPD46QA5cloJPJGk8vP8utu0yGCyIRIGZe/VtYeK3Zyi7oxtWSxfHDLi+GfDg7U3CKMfGQYF//q8+4t/76+9Rq2/h+jGmayJIAoWKyvnlK4plHUmQ8BYCjx7uIdDkw8c/5PzqksgaM5q+4vFbj7g6c5k7GSTFwXNVdo5K7OzsM+zeUKzUyBkyiqxhCme8/c5DJgOw3BmiElAqa3i+Sy5b5aZ9xb3DMnG0JPAl6sX3edX7nId3HzGdBtirGcvFiGJVwTZFQl9lZUu8+84POXn1mumiS6FU5fXxK0zTxF7KNGoSK7fE/uE9ltaYyUCjUIyRYgnLXtEfXFGp5nAsCUEoE8Q3DEY+iljm0cP7hIFJuWRQyu+Tz+RoX9/guSH5Up7AUvCjLiuzyHQ8oFIzsKw5IS6iLGCtNLodhVJVZDydMJiaqLqMIKooisZ0NKRU0cmg0RvO0QseYWizWk2IhRUZvcxg2GajcYhrQ7GQ/O98vsTNpYmq6bh+m9PXEXeOnuB6Pjc3HUTZJlvJMhx1sIYmmUIe052g6BqYCidnLyiVs/Q7PpqxotfzeOetn/L65StyeY0ocJiMZoTuHC0Xs1zZaJqGGOWo1kASM6hCDT23wFrG1Kp3AahX92l3X6JnLQZdj753Q6EKYlRFEC0EVEbDJaYZYNkRqt5jaYWIgszF6TX3Dt/CUkSQF+xu7DEcT9jY2mc28dhsNblqf4Fpx5Ty+yhSDj9cUa7UmZun6HmR16evEWWb4XzB/cMfMuyYZOs+9cYhN1djdnfuMhz1IIZq1WA8OWHrzvdZLYeE0Th5srs+R1HKFCpFJtYJ4Uxg7PrkSjEH2/cZzTq0GtvEccxgeE2pKGIolXQSMGGy4ihm/90Pefwf/AdEEejnFwBM//7f5+r/+H9CkVWqtRyaliUMBbzAhijGD0ARdcLABjFCFGT8MECWkwCMpkookoiqZrBdhyBIV2iiGElKa37iRIKVFJUQ8HwPWRaQ4oRFDISQwAvQ5UwCFoPE/xjEPmEkJVOEsZoEJJLb61+Su4X13rQIkEzdiSKs+ycFAWQZgiAkDAUQwxRkywlLKYV4gXsL0NZAK0n/KkTxelv7VpdFICKKZeLYSZkkIEqWYQCC8I0MndQTRYhK2qe4pgb/suJ9KxVHkU8QrmcVBdagMSZGVDQ0OUtkeUisF2bSsxIFaTNP+oPSwI2AQBh6acgjZcFI0t1B6JPJZnE8lyCMEBXltpQ8MQl6xKK6zrSQQlVEUUq7OwPCcO1BXHdMptOYxERhlLC9cgquI9IdbjXtAg2TKcr1A0IYosoJc+gHYXpbiW+rqIRblliEWLqthbq1C6QPAq4Xr4m9N77ENJwlSwoIab9mnPSOIiQMsiSJhKnMLskCROItcywgoGsaju2nzH9qu7itmgpx3ZByuYqiyITpItG6Q1NVNSRZYjabYlkWqqoShiH6gwe31yX6zW/47H/7n/LqH/4f2I7Wv6eptSCwyFdq6EsR17VBHqJqG/TaZwkjHm8hSAsK2V1W4Rn5oocQF9jZy9DrLbm86HF4tMXXzz+hVqmzvb/FfGghyhKTeQ9dq3Hv6And3g3ZrMCnn/wFd/bvMh5dEAQBxWwVz7NxAg8jEzKaznBNH6vkoGaLyK6BoX3B15/+jIffv8syHuMNjzg82ME0B2y2dmm3Z2xsFHn1xSn10i7D7pLN7TKrawdBjukOTrHMCFFzuHr2O6JQIVfcxXFU7t97wsvj5yymMRub+SRzMcuBELBYjtnI72A7c0Jf4ejhQyazG9RMlWLV4vKqg6HluWmfM19YSPk8F6MB9YqY+KcDl+l0yPb2Lr6vIksCWsbCd6fM5jMqxbfQch5PP/stHhrHz4+pGgoT+zXxrIakFHh5+hqDDFrGY6tQ4BcffcRhc49hz+IvfvExdx82INZQZIOsUeTmpkMpt0kUuFxeTtD0CEWooOkDDFXlz//Z/52lKXD33g6VosLL83/KVsngnUf7CLkGqj1jNPyM8XyCqG7x4E6ewaBDpl5G0jzG3YAoX0GKlwjhNXcOF9zb/Q7Hz74mV5AYTgJaxV3KhZinT78kjDMMlgL1RoVc3WE5cSkaTew44lVvzOP9Q/RIo1Et8br/krYV8cFhkzCy0JUA27V4+nwAEphqhC6bMM1TqupMLB/LMRNm/Ft+fGtAWS4VaRQKZHWVoyOD6UxGY5v9o4hqU+fe4R0GPZMPvvuAycRlPJyzcrtoap7x9BWtVovhMESrKNw/aPH81RdM5wsaNR/iCceXIYWaSFWQGA48TtrH1Lds7FijUM3ghOeUirtc906oN1R++aufkS/IuI5OLl9jPo3IGBXyao5GZUane8Pdw+9QL93BcsZkcyrdmzmt7S1cb8bb794nn6vQvukiyi77xYf0O10iR6ZSLOA4MvV6jT/88Z9RLub4+JNPCYQp1+0bdncO6HSuuGlPOdy9n8x9OXUcv0vgmAiCgGHEvPpqyP0HWQqGxHm7j6qqzGd9ZuMpewcbqKJGtzNEFgMqjS3G4w4+Fp22gGicslF/i4vrS0I5wBFGnF4FGDmFxdJCF1qszAG7Dw843HuHF6++JFcQGQ0sNA18VyOMF6iyjiTmUJSAly9fcni0h2k7GEYW1xYJApnp4pJKLcOTnfcQ5Dk5sUSxsMN4coYsyriujFqBgTVEjHTUoISsTTHdEULYpKgtcCWV1cJJZSGFMHDIZMuYKx8vHKB4+4jyhMArYC3L2G7EaDDkvfff4vzqhlZji0JRozcY0m5foql5zJlEs9FkNDqjUNlgNbcplQ2Wyyuy2SrlSgtBKuJZAhOzjy7vEfllzi5G7O5tgySTjzeRlRxSXGB7O6LTucZQN9ndOWQyGeH4IwREpssuQlyjVjWIY4H5YkDg2ahyian5HLQarY0Gq8WEOFqiyjCdBtw52EeRYNK+xPamCFKWjdoPaNTqzKZdgtmKitxkJS9o1qsEQUAU9snrBQpb4DgZArpEsUiltoEXvv6GjCZy76/9xwiiiHZySjQccvW/+HuYL14m/XiKDGJAHEvIkoAkS+hqjpAQ0zIp6BX80AcCRFSCKGGTwsBHEkRWlpWwM6KEJEp4XoQbOUkBtqSiigJx4OOGIaqiJIAkDBBTkOB4Lq4fJ6pnHCDKoIoKS9tPvXsRcRghiBKiIBDEAaIopz62iCiMUQwdRcnhenPWCejUfoemKfiBRxRFyJJMnHopRVFMQyAJaxan4YwoitE0Fdfz0v8vvkV8gpAwpJ4fIKTb32tZNgx9wshjTV3FMSlTGSCJYBgZFvNVuqwT/Xf+3RhFEfmSQRi6KZBNwI0oJHjaCyWcICQW0u9PAaQQx8k+teel/sYkpJR8NZH2V6aNJKXdjsS3fscoClNJOUq/I/laYi0IWCwWhEEhWbNJAzRhlDwUxFFEECap6jiKiMXE+6hJEpmMxnRqIohKAs7TknkBkYyh4ThLgjBEkaRbljBJRKtpsj4BanGafonTNZsgCN94D9f9lVHyuyEIIMkSge2neC/1taYXQ5KEdEIyuY5C2i9JFCNKEpIEruum1/MbDGMcochg2Stc10MQjNsEdnLGQmRZRZY1stlcOq2YnEdREBAV9RYcDodDRFFMk/oC2R9+//bvlC++xPj+75MvlxClAWtWXFZUBEQCVySOTPL5Ap0LjUJTYzFeUG8U6HZviDyJ9s0xnmBg6BKB2uX89WvCwOfH3/+fMBheI8UbyOoC05pi6BkMVWNmahTKOoomUyzmmS3HvPOde/iuSL5QZ7kAVIupPcNcKHhxBzmjUq0VsO0l2WweKc5TrN3HsyMuzlc8ePhjIs9BKYQQl7lqm9QaMe1XEzbrWW7an6MZ95iMBgS+xUZ1gygKaF93+O4P7nJ93iFf1nHDHv1rhe/94C1qtRr1qs5sNsPxVvjxEsPIMl5ew9AmYodyqYaqqnhujBZbFDM6tVwVxx7jOi6R7aMqOu/fv89l54TJcMSFeEmjWcN0rxlPNErFHMuFx/XJGbIckK9sYxhbbG/GbDVLOILPYNHGT0NoSE6ylKPqKIJGsSSxf7fM85efYbseldYWhY0y/bMzynqV16df0KjUmU5vcD2BcrWJrqu4lpc+oFlksi73v/tdysUOq4FFr/NbLj6NUIoq/vwLbk5vONhrMfOhVipCHDPsWkT6EkXNkJfqBEJMMVvEngpUi/dw4kve/WGen/+LCUIpx+noFKYyY3J8/4cf0js7p1oqo+gCohwgOhbjhU2xqGA7A7RMgwVzhKyMEAks4zntiysWc4laucTS6ROrEUWpyGy0IPSvaNXvIKyu8ayQ+/cffFuY+O0l79ZGiUKhwL0773L/6Cf8jT/7IxRJJfBdzNWK7ugVRsFhsfAZDK8Zzy4wlBJRqHB1opLNPGI1cRDFHGftjwnkOTv7eT57eUyhlGc4e03AmHZ7iOsmNHjn2uKf/b/+P9QaAZoOdnhNvqDS6w4RyKFEj9CVTa4uu5y8fsFN50tEdcrmVpWH977HaGjyxfNf0Rl9jh9b5IoFYmCjtYvjREiihijBch5guxMKhQI7u3Wa9S1KxQbf+c57uE5Mv99ne3eHUrHO/t5dzKVFHNnkCxXGqw6m42PGp+i5LJY/p9vvM5266IUZ49EVw1EPcyFxc9FBUhfoOZN29wVnF+cMJjMG8xs6nS6qkmd//wH/5qN/jqc8Y2K9YGlNWFlzJE1HkvL0R9fMVscMxq+IsHh2/GtevP4teibA9wMQXMrlLb77vZ9QKlfp9jtkCiGaphELDrazJI4kZvM+5apOc6NCsaJgZCv0xl9jeUOmiz4r54JCRSZXyKNmVSzbQcnVGDhjilsWRSPPZvEu49EVgSLj2LB/8IDpokuxZhFgEwsaW7s7iEKTKFbY3niX+aqP6V6QLbgU6z6L5YSD3fdx/SnLpYm7UokDn+XqBj8YEsQjcvkyuYJEPldjOp0jCRlsx2dpzlgufWJJpN64w2R5Ramp0Nw8YLGKMK0MniNQzG+SyxUYDWc06ltsbDRZLCc8evyAGFA0ncVihigoDPozRsMehlKjWd/k7OZfsb1bIF8IEJmzt7WJOTMRhIijO9tc3/RR1QbFep2d/cfoeoH+8DWvzz5hMhkQSgor30TKaXTGfdwYfv7zU/zQo1w+YDg+RZFy1Kv3ePr0FbKc3lBjEB/dI7O1n/YSwtX/8u+xfP6MOA4RRAHbcRFFBd/3UslVxVwuiQIQYhHfcYlDCFw/CY3FCnEQgygTxAJB6EEcQCQQRklopFyoICEjRj6hF+BFCeAUiHHcFV4YgiDiewGqbIAcEwkxoqSl84ARgsRtMXTioYxT5id9I6m3UhAkYiEkCBPm8JZRTCFVGIV4XsC6CXwNoBQ5mWkMAm5BxJqJTAI66zWbdSVOEioRpUQKX3sxhTgBYMnmtZ8AirVYnYIlTdXSTktuN7H/0mcKToLATd5PnLzuOlstiTGaDLKUBJritX80eYtoqowkKWkQ6024JinzVojWsjCk4Hmd2I6Jo6TeZ72THYQhnueiygbFfC0BjHF0e4xxJJLR9fRcrs/1eiUoQeVhmExYRuv3Iaxl8Rjfd/H9IAXbbxjImJgw8JOS9Pgbcn96/SVRoFjMYugGYSSsRetkyjOKEKX1WU9+z4Q0OZR0VcaEoZ+Wo5O+8/X5W7OfCeOa/E698bkKgpiGckAQlFv/qiSKKTAV0s3zPMkaU5Q+YIQEYYgfJEnv0XCEZdnIcnLt1DtH5P/wD2/l7vjsjP7kOTNrlQSHUkY2CD263XM0LaZayXF9OaM/vmG/8Ydstw7xvQxO6FLIb7F7sM9lu4MfBkyGMZXiIRuNQ87OTliafSJhguP3ubmwqBU2iHwZMa5g5PL8xS8/YbFaYq5kMrkmiBK2q1BtiUwXIxQ1Q7EmYjsxmUwDJxLJ5XIQTelNnpGplnjrJ0dkqwH97pe4wZLr9gXPXpwTCSsmsxXlaoO7977Lk3cf8aM/qXPZfoUoFNna3kESS3zw/T1evWrz+MEPWa0sdnZa5Ms+v/zo1zjeiOm8Rxh5vPPWTzi885DRrItjx5RLDbqDS0oVDVGQyeUyzO0xZ+ddzGVErVBCCTR2artsVreYDpa4Dnz4/vfR1Sy5XA7XtQjjFcVKBtfSyGRzVBt1LPM1/csbKuVNVK2Mhoq19DCUfVStgh96GBmF/cMdHD/gi6fPGQwGHD5s8O4H91HyC75+/iwhguYmQijT781ACIkFmfl8imktae5kMF2fWApQM3UiweGL35msHIUvPu9zPnrN05NT2lcLjPwedpxlZto8f/0lx6dX6EaejK4Quwr1VoHZcIjrhBh1k5kz5+VJhq+flxmtYiq1Q5RwxsXZC3aqDRZXr7DsNq9GF7zovuL86pzrRZfFfEy1WMcMVvzu+Bm9VcRFr09ezmAvXOrNBrImsljN2Nzb56d//KfMpzNq9SLf++BD6qUa7719l3ffeoAh5b8dSOT/B0DZaG1jVDR8KSZTLXF6teD9n7yDmhXRs+A6CuVKA9eWUZU8reYhzfod8jmdJ2/d49nL5zRrRQZjC2KNr17+gq+Of4klTHlxfE775oLPP32GuVry9VdPad9cslk7wp9vcfZiQqOxy5e/GzIe+tjLHK1WGcexaG3lODjY5fGTbR7dfxtCGddZIkkS+wdbqLpLf9DFC1fkygI+I87OLzk6us9V+4zB+JJqtY6qihBrWPaUammPbE7m2bNnjKdXFMsytaZMo76JLOgE0Zx8UWVzJ8NwaDKcjXh9/RVXg2OMQpVVOGK2dCiW7mD7Af3hDRFttnZqmAuVxTRhQK67ZxQrEYPJOblcwHDY5/T8jAdvb/JP//E1v/3i5+ilHgdHTTzxnKn1io2NLWRRIxaHWPaE0NXoDzq4jsUXnz1na1dgNO7z+Zc/w7Is3nv/e8iKhu1M2N2vQhSjaRkUVcLzk36pfLZGpzMBxWU0MFnMXEzTpjO4ZLj8FNsfouYVZuMRRzs7DLtjfMFkbE6IpRJeNKTZKrCaZvFsnfEQVKWOH8+xfZvt3buM5qcY+gZ3j/6QcrVOZ3BNPp/HckxWS4ujw0es5g6O16VY0Clk6pjWAte26PVv6LQv8IIJkhzj+YnXaroYs7InIBbonPVRxIiMKjPodMnqIvVCgzi0iNwVkmJi2StKhRYiGRaLOedXx8iaQKlc587RdxDkJUQipWwDzxshxTKEVTRdJKvnMa1LNGOOpnuEoUl30AdRAUVg1L/CXYY0KnVajQJSnBjyDTXPsL9AckXutHbIBy2eHG1jhALdZ6fcqx7gdU2yQpmCVkSX17grRnx8H4iRX5/hfvRLll8/T26aCUdIHIWEboyuKUiKiqxI6eKHjyBESKpIiEWYzhYiQSyExGEAQYShFVDVQtr8IiIJIrZjIalyAmAkEV1W8Xwfyw0RBIVYjJEUjTids5NEA1VWiIUAP5AwbRk30BAlCUPPkMnqifdSFm+9jlEKYOIoJsKh0z/D8/00cZyAGUVVEEQR2/HhNskc47k+qqYiy6m3cN0ZRMJpyYqUsgVpcjid+pPkhFFz3dQnGYEgBST1RBKaphPF3wjerD2EooBt2beslfBvfcYpaybLKp6bzkqmIEuIRUJifDEkCEQkRIQ4SFi9OExY27V3UEj8lm9qdtI+yjWAWodcogQAi0ICqtedjOtJRoQYTRXwvYgwfBMCWq/qZAwNXdVTT6jImnCN4jehoCCMiIXURxolwZu1t1RA4puTinEqK0tS4t+MwihlaBMgH6XNAHEMnr/2piaezHUTaRQFOK7DOhn+l0G9iK4bSJKSnOu0z3Sd4hZFiOKAKBTSX3Bu32vygCEgywpxLKYscHz78wUBZElB17K38v1tRygkAb8gYDAcoKrq7W67ev/+LXANf/MbPvvf/D0Gk69xwjmSkjLm6QNQtVEgmze4aXfZan2H/+g//Nuc93+FHUzpTHpEYoGXN7/jv/x//wN279xhYL7ADUfEss35xQ3nl88IQhgPPWSpRLNVQiYiCFaYTpter4eSAUE2KDeLjOYdAj/EcW949uUzDvYfEIU+iqSS0WQ8y2M4WOGFMna4IpsrIUgrrs67CGKBSDcwKgbziYm36GIvR5iuz+X0jH/wX/8XPL864+d/cczrkxn5ap0XZ68YzG9YOgF+HNGdvmKxWDAZL9F0EUW3UeQcy+WMIHR4+fpj+v0+O1v3efudD2htbSKLWXRD4eK8QyaTwXX7iGKBbLFELOVQSwJjc8nc6xLFAlubO0RRxOFRkV7vnHy2hZpzGI4G1Js5qlsb6LkSW5U73N0R0LLw9PUZ84WDN7DY208ka89fMV92OHs9wrHm3Lm3xUZzBzWocfN6wka5QVYtoUgyhqGwsVnAj8bEosZkdsNiKrKzfchi5uFFJv3ZHKNcY9QZEMsSr076iHkPR8mzcVglkn3Orl/iRhG26RH4S7zQIpJCAjfH1l6D9rDP1L7h0xe/5Kbb4eTZCc50gLsUKBdV9Bh2tt7jj7777/Phew+IlAy6kuNObgd5FOK5E5bBlOVyydOTX3GznCAKMeNpjwgDwTZZ2ha/evGc6dJi5rqYeHz00S8obdUZOyu+aE/ohNdcz4CCwtwbf1uY+O0B5VXvU+Z2my9Pn3Ix/TlD+xNOTr4gp9dpNsrce7DH6dkxoj5DlCXiKI/rmWQyOmCxXT0gEmo8uf9d4qBFq3mA6wq89+h91IzMD370Ux48fgctI1Krb5DJZdm/s89f+7M/4J0P7rFa+rz73n3iSGRzZ4NqdYt8NQAh4p2330aiiiyWEKWQnc19Qm+OZ8N264DQy7NcTSkVc+S0He7e3WK5GtBs1snnKjjBhEZuG9O8prpVYWwP8GOfXL5IpiJhC3B6eoqeCegO+0iKzHxmMRktEBHJyofc3/8DQmeDk5Nz5uMV5ZJOu/2MfMGgufGEWuMOqpZnZU7ZbD5AETbJGBLD2Zfk9Ca+r6PlRAaLL7n/cJc//emfUTMe0r2e8fOP/gVn/U8IjTbdQYfLsynuSkRVLebLHpY3oD+wefLOfa6uOhjZgKvul0SxgLkcIQYroiBLFLus7BFnl59SKTeJvU0cd0kYW9juDY3qPUrVGoVKFdUo4UcmkagQSzKL+ZRqQ0EUDHr9IXPzHNsZ4MWXCLLJwzt1ju6eUskvMIQYy7kmigUm8wvOLr9kb2uHyfiK01dfEngeruUyGa6QkRlNjvn0tx9hmyb3jx5ycd7GcSw2m4+IkXGCGarUYNRfMhvOCYI+s8UJXjBGzwb0ul+Rr0S4rsVN+4KD/QfE4pyXr58i6Esu+6+ZTj1ULeb45BP0jICquwxHNzy8+2Nevvya1ayDJjYwjCqe4OOrJoPZhFAcsZorzM0VJ1czPvtyTKnRwAt8VNVCFmPaNycokkg2M0EOHQpaBddRWdhzIsEjmw3QdBnbr/DPPv5n1Pc3mE9VHjzcYrm0aexkuWp/zUZDw55YtwzO+kYM4H36CVG4LrFOKngkUWS2NAmBKPRYLSyCKEKUk2Ry4EcoYpZcJoskKQSul1TjIKOpCkQBpm0TCjEhMSE+fmAT+C6SrBDGLmEcohlZVFVBkIAIXM8hIikhRxCIYomVrWA6Ep639r8lbGGMhCAmCyOapiLLyRJMwrAFZLUChVyBOAoThouYhJYLEZIyx1vJNk6/L+kRFG+l6YSJixFigQiH5HYupD65pCtRlsVbr2hyx4+SJDoinp8MEQjrN0gKTiURQ9dToAfpUf/l/wgxsignDG4QprJ4ypwSIYsishDj++GtlJ98UUCWJURRwHPDdCM8TF8FiCNcz8QPI97AnOiWwZVkCc/1WI8froGdKAiEcZhOYUa37/dWgg6SEFUsCGtol36dhKWOIIzE9BrESSpahDj0kIQI30+7QqPgDdANE1Ce/EyJKGX/otTTGUcRtmsTpIXtkIBO4iQMlDE0MobBbfI/TY5HqY9TV0Vc2028pak1YM18i6KIIqnEiKRlnESxgEgSPoqiGM9NGMwEfQogiEiCRBxF5PPlVCZPT7wACEn5vShKTKdjhHSycn2+sj/43q3cHX/xJa/bz3CEErVyCwhZb67HccSr09cMRj71RpXe8GtevZjRG0yJVQVRtegOjtEKZf7gj/4aq1WPZvUhw9EMhBKZssGT999mYQY0NovcdHt4nsiVeUV7NmI6s2i325QrGUbLr7i6GrG3/4B6c4vlSubevZ/y4tUnFDMbaAosFgu608/I5gJMe8TF6TWip1ApNHG9NstFD0PZZdBeYQYWaimPkFmytMYUKwaP36ljLZYs7DmP33rCYnnO1199Sn/4mpOTExQt4Oz8gqPDTeJYwg8dQkmg3XuNhIxhuOhZiZPr14Sxy2zW5eNP/gWKpiPIEoLep9dvs7/5fd55vM1k2CYINUzbwXZmFGsFuvYNg36fiT9l6kwp5Aq4y5g7e/dZrkZ8ffwaKQg52NijtpXBEbPYywVZxSKTLbF355Cr8zNMc46/KKBEElHoc+/uEcMLEUMtcnr+HNcykbw8InMcBxxPYeU41Go1crqBFDRo1BS+/uILPnv6Oe3ujI3NXW66HW46PSbTLvmqhiTINGp1mvkNPCfP47fvMV0uaRR3eOfRnaSJV85ilGIGoxUrZ4QsCmRzGcraPu89eRtZV3B9naOj+zjRCCkuUW2VObl8Ruh4lKvbHF/16IwsciUdN/BZLgYseq9x53PE3IL5/Ibz42PGgcl8cUVkrSiW5qzsK24unyJLPtPVDEPL4Dgj3EBi5S4ZTcbM3fUC1b/741sDytnER5QMms1GuvW64rr3KcPpl3iugO8IfPD+u5y+OieTCSlVfCqVMqqmUK/XKZYKbLaqON4F9Q2N/c3vcffobeyFQjm3z6BjktNrlLIHGJrO1uYhurLJ9dWASqUGsYbjzjHNFYQi5UqRrY3HeG7AcDhEkWvkSjERNpqRxwsDhuMOfmTxox/+mMP9D1kuQyxniO/HDPsWgW+jKhKruc3KGeD6Ip5vEgcCoSMixTo7m00WfQNVrtLvzViabTS1QBDNMc0litBCVKYMh0MO9g7Y2nhItbKJrISEYUy/v6TXv0YRs6yWLqqhYgYdNK2FIOZwbZFGfYPB6JK5eYKhFbg4aXPnXgtVyXJ5anKw/4jNwge48xjbnFKphTTr+xQLW1Qqu5SKDWRtyZ17myzmMdfXbWRZpFzWECghituE/phZ3yEOFDZqdxAVD0e8YOuOjhcYVOsVrq8HPPuiw8mrMxx7gRBUqefuY8hZlPRfrp9+9jO+993fx5rsIKBSKmfRlQ0++ugUy9Fw3TLleoatzQOapQ/IajWM7BJByJLLF9AyDuZqTEYrEMchXrhiMG2D5BNKK758+RFIIf1eiECFWuUBgza8fjWg0ahTLR0wHKywVzqNyiPMeYQvXLBcTalX7rK3e8RsccVsDBsbm/i2hCwWkITkaVKRDabTCWG8RBA9vvzqc+4+3qIzvkHVROqFMkqgEdkKMQH1yhMmsyvGkyHFfJMf/+iPmA01iAx0tczWxkMMo0EUaohRDQGdXCaHoch0O6/x7BlH+494+OgtRFFk/7DOfOphhUteXZ8QKBbnV2PieIHoa5Qr9dQHJyD+6LusgyCK8kbGBZKuQ1Ek8IJUeowwMioI4DohqmKkACWpvPFDj0jy0xueS4CP41vEoYuASBgk8rgmZYjCGN/1kSSNMA4RomTNxHcdZDFJ9mqqgR9ITBYek2V4u1iTZmrSRLpDGHoIgKwoGNkMRiabPKjlc+RLBRwfFksZRdGTLlBRvGX/ZEVNbBxxGl6JYgI/QJTA890EGEhiEuZBQpTA9x1c10uAJomPM4p9FFVFlJQUtKx7DwWIIor5PKCksu+6BzJhNr3ASu0EgBB9gyFOPokhDDwgSJd41uxZiraEIA0gpcCXN5Ivaz+fmDKeSLcb1ZqmoahasrdNkppfM5eynAjqkqSQ5o1SUB0iyxLZTI4oTIB0AkCT3xlREIiFAEFUbsFncpgCcRiiq3LKKJIConWPZGKZEcWYMExzM0JSqB+GEZKcMOOWaSXfsw5BCQJhHKOqCrqq4Llecs5u3/86LCSmCzppK2gaukk6NSMC302Hltae2Pj2/MG6M/IbrGYMEBATUSnniKM1UE86OkVBxPc9qtUqiqKkhyLcMpBh4CMKIuPRFD9cpsGo5JqqR3fJ/zSVuwWIT06JxBvavefMFgMcx7u1YYShT6u1x3g8RNEMbCvkn/35PySI5shSFlHy0bM2jjtnvpgwmp4RRyKiGjNddpAUlePzr0AN8EQTUTbwBJdsfpNm4zAJHe5sIQs5rHlEo16mfXlBLNnY3hzTXlGt7KNlFWazOWE8J5vN0+v1CLwqW9strjqnmJaM5xZw3Dmd0VO0jEw2p6JJGWbdgNCdMez1ODke0traQURh2B8nHbKSw/bmI6q1Eo7jsL/1IeX8FrIuUq0ckok1cByW9gWnF6/pnF3g+TdcX79mOQ/R1Sy97jUvX/+WbqdPIbeBFy54fvwliDHX7Veoch4JncDxUUQbpeATeCsmowBBU3CFLu5SYbP2hN2DIsPFBacX57x4dc5yEVHakJguV6zCCwbLc2azKYqWJYhHiOQRMJiPVyiyQ7vzJYaq8fDhHp3OCYEboqoBsigg+02KepNOv40b9On2xoSRS6lQ5N7hQ+YjB9/pY2REZCUmk8tQrzfI5gx++/Qv2NndQFcaFApZdD1H7GfwLY1hp0fsKgSWjTO1Cb0QdyWxfWeDiT0lFrNkcjqOuSK2XPrjZ3z59BhrlvzdvHr9gmYrR60pMh1K1KIsETKxUUOQAiYTk6vxnGIrx2q0ZDmWqNQMXh2fYVoLvHjFly8+YbYcERGjqVlESaHT6eE4Dqb57ZdyvjWglOQCs0WXy/5HtG+GBK6GbTkoUpUgmvP8xVNuOi/4/g++y3QcMpm16Q6eMRsHyEKZYj7H0cETNDmPba4QZYuNRotaLYuuGhhGnm7/FMedsrm5gWvCajlGEEOWC5vAh2ymwPvf+ZDPf3eGLOk0anvIYpmzkzaaESJLWWrlR5xfDMjkS3R6XfqDG2bzIa7rszRHDEaXmOYSUXQYTS5wTIdS0eDqZoCWiZhOp0zGA5arKVlD5dWLE1b2CdlsFtd3kBWB6axHvbFJ5OfZ2ikgiD5+NKLWyLGYLSkVG7huSKN6iCrVyBcL3NzcsLf3GASB85vP6M1/wd5hk2p1l/lyxXwWsZibzGcDBNHjk998hBfOePTkCN+WsYca7979KcVcnlKpQi6XZz4qktVq3LQvkNU5/+Zn/5xSVUfPgrm06Hb7XLXPGSye0dyqMLd6uMGSxWqJIlVQlRwnLzuEvkQl/5jOzYJarcbu5l0UZA62DwntKtPJEGuRZzH3qVVbXF8syOezbG08YtzNs1r4CLrA6xOLxVIhiFVsUyKIZpjLJUJQwvQ6HJ8+xQ/nKDL4fkS1WmW+8tlovM9i6dLptTEyLYqFfRRNxsh7nJ695u6jXd5+5yG6uo0sbdCo7fDk0Yf0ul3GoxXVzHdplN8iDorcnMbEsUm9USAIPGaLLu+//wAjo9G+WuIFU5Dm1Kot/MDB9q+4vH6OE8c4jsNiPCB0FuTUGvV6k/nqEoQAP+qyubHJ5599zXB6TC6XwZ5XMd0FtVqdt976kOvelwy6FpfnI5rNDHk9TxAEjAYWn395TBRF3L+/g2KIZCpZ1FwNKwgoVfJUMjWm7eFtylt4dBfxxx/e3nz9Vy+SG2ecbBG/qYlJZFyBKPG4BS4RiVwqSSJ+4BGELrqRIYoSKCMJEkEYI0oKqioQRS5+GJLL5JAkBVlMgKEfJp7IIE4qV1RNJ0TEskOmsxDTgjhO5hFFOWErw+jNdKCASBzEeI6HvbIx5yaOZWGbFp7j4ft+Ku0KSIqavLasohkaimrQaS8IAgVV1VJZWSSXyyDLKr6XyJdhmADNMApS36GegKk0eiEISUJYTv16ICbskpCAiFgQUDUxSQevpdIEmiDJYirVi6QN8cRC/Jc+EUCUYyKClK2NgegWECVLRuKtD1GI38jTYeSm+CgBSXGcMmFxjCSDHwTESElZeypBr1lSL/AIgrWEG90CHkmSiCI/mbEEkpUd8VZO9gOP+cqENawVkuUdEZKUc5Qk6xNbQPRmLUhI5i2DMPVaRlEK7OLU0xui6UkCOil1j29vMFHgpiymmvxuJppwarNMZesIgvXPTGdE15J8HAkEXirfiykAJ0mIa6pya2tY1xQhCgljCUSBiSpLCdMdJwGyKAxRVZVyuZSEfW49uDGu5yGKMmEQsDInaLqM5ya/W4IooD34htz9yW/4R//RfwjCkpy2ieMmSfIkXJUwnPlssnzy6vRT1IzMT//kD9k9ytHunaDqMWK4ycHO27Tbr9lp7XN+8RWISyTVpDd8haoJaGqOybSLlrdpD485uf6CZyefsr11l1y2zNXFFZXsXarlEoPeCDcQ0IsO/ekLwkjk6dc/56p9jpqJ8ByXbLZKLLoI5MlmCwzGz5P3g8NsNqI3G6MoEVqw4vuPPuTOnQpGQeTJOw+JnAK1QoNC0WYy7VIqNslkFa6vr2lf33DT/1d8en6FqAgsulc0lCp/9Qd/Hd3NcXi0R89dcWf3O2y2DshpVfZ3DogDEWKPnb0a08UJU/uMydRH1lQmixvMlc/2To7L81cYSgHHXeKvJrTqB7g42K7OcHbDYNyhUm6S03LoGQuVAsW8zqwXc7S3Q+xFqGKOMLa4uromm1OoVut44YDL62OQZgRBgGdHdDsdBEFBQOPkxYBBp41rTei3R6ieTU3foFScs1h00XSYLifMrTEoGrqhksuWmc9G9IcJ3mjUt3ACi+HoBmshYWREptMph0fblGoGk6mLqNnk8xsY+RL7B1sMBxaCopPNiKiKhO2viB0VQ88TxismkxmW22WndY9GtYah6bz95BH3dj/k8M4B9cYmOWmDXFznOw8+YNL1uT45oVapkc9U8aw8BzsfUCs+5vDgOzSbB+RLeRaLJccvXuJ7FoHnUipk//8PKLe2W3jBAkOrMh5N2aw/AWeL+fI1vcEpkXTD118/J4pdGhtZHMchX1SxvT6m0yOWJ/z6N/8KPxAZT+b44YzReECpVOLJ43cYj7qIUZ7JeMlyuaRUquD5JvXKFp3uBatVj+XcodGs8nf/7t9lOBwzX3YJA7h7dA9JcnH9KaIE88WUy5svaG3WuHvwQ87PeszmlzRrW0iijqzEhGGIadps7W2QyzfQMwbFUhYBCcdd0WwVWXk3TBYdZFUkZInnL4lCBUWPWcxNBEHksvMxouwhiyoXFxe8/91DZCVCCFpEQQakOZPZNZGw4sXzEx7e/z1Cr4njxly1X+EGfSRtTLkZUm+U0LMOtu2i6xkqdZX5bIlqOEThgsGwh7mQ2d27w+XVDbFyTrHqcbT7HoVMi/2dtxnNb3jnne+w2dphsRwxWV0wmF9xfN5H0Ips7z5hZY/QpCIFdZui/DaBvcD3pzx5fI/NjSYCAbu7TaJoRrv3gtVqRqUqkTPK6IZELi9z7+Em1fJj3n78Y3RlA9dSMXJZJvbXFCsGs/mcWLAoV+qsFhGLqUUhl8exBEzXYmuvhBuNKVQiHHdKHGTp9ybk8hpz64JsKWAwPmUwGBC4DuNxH0WL0Asmum7Q67+muVHi7tEdFKlA1shRrRSScxXFEBnMl222tmv85tfPKZWKlKoilUbC4FlLlWbtLpJUJqNuYugio2kbKz7DCZdUKw3m0wnb23WePP4xmniXpTlA0ZdUa7uoWoX6DozmX/HZ019w2f6UVuMxljdkthywWmSobzSZO202tg4ZTEcs7C6z8QzfcVlZJlftDqqcTxLaccTRbovR7DSRi58kyTrp6obwk48Jzl6i68km85qkSQrFwTJdNE1HiGUkQUIGDEXDXtkIgozjBcSBQEZRkw5JhETWliTCSCQKQFUUVvYK01whyTKSJKGKEoQhYZhUMhEbBJ4BYhZBVpAUEISIwA8JXB/bXOE6FkHgJfUxooSkqsiaip7VMfIZVF1DURVAJPBDXMfGtpaYyyW2ZeHYDq7j4QU+QRwj6wrZQpZqrUq90aTWqAEqspShXCpRyOXIZXMYhpZM5nlvktJhGBMGEUEQ4LjzZJMZkjL0dM5QkgSCMFlwkUUlBcJSmqaO3tgO4pA4WrcyvvlMqpYSj2EYBEiC9A1mUEAQAxzPIY4T9jF9AaIoRpbS+cgwDaKIpJVBErISIclvvIDcptKjpAg95jYxn/wja2k8Tn2QIYhJ/VMcRSlLGmIYSSl3Um2UAKN1+CUJL6lJt2cK+uI4OV+SLJIMXr45nnW4JwGaPlGUvL94bSxNZWldV/FcLwFcAqkXlVufpaxIyQZ6zF8K1STpcRFREgjWKfiUcV0vRSmyiOskK0trkJywq+kEpCjgedGbxaQ0qFStVoi+4VNdT2wCKLLCcDRGUSEMkjDTugB/bYkAiJ5+ydXlFavFDN/SIEx8nutFIojo9bs4qyz72++RzRTp9yacntxweXnNalKj2dil3T3m4cP7rBYhiqJQMfZR4jwHO9tEjoy1mlItbiKhUMwUieUFkTTn7PKcxXKAHzj0+w4vX3bQcjHdwQVZ/RA/EMmXikSxhCgrjIYTJkNQdJsoWuD7Ia1Wg5n5nNl8Qr10j6ODByyHp2zuGfhKhWn8OZHj4EwH9PrHmPECyz/FdlaEkZ/cZ6wurmvzo99/l4V5Qz7ykSyV8kYdM+9wZdn8tb/xnyK4EWVJxHVNrNUUx5tyddPj4YN3qRTvsJgFjCcmvlPknQ83mcyu0PQKbjSg3T/HyFRAEtD9LFvFQ4jHTCcW5XIVO5wQGjd8/vnnRG6W+VjmaPcJgtBnujymfTnDMwWWyymVUo6t5h5ZrZU0wBR8KtUtmptNlqbN1k6VKFJYmRaz+YDGRoRhQKEoMVs+pTsZEKh9cvkqmq4w6k+w5kMKhku4mjMdDTFnEXmjxmppYjkTJuM27esTZEXi5NVzxsMRm9slZqsBTmhjh0NenZ4xd2bIegbPErDsPra5Ytp3cR0fHxk5m8dxA5pbRR6//RYbtScs7DaWu6Je3Wc2m9AZjpEw2Gk84O0PnhD5oDsiVUXmb/4P/se0NvIocZkffu9dKmWDYj5LVi+xWrq8Oj5B1WIO97e5d+eA/s2A0HvzN/nv+vjWgFJAptnYRhYMNjbKCMqIvcMyRkZib+u7NCoP2dzc5PzsmuVyQb22RegZxMKS7uA57V6bcjPHeH7JnXv3GQ0kFqsZL19ecn55RrVeYjpb8vjRdxAEiX6/y3TWo9e/ZDqZUK2VsEybly9fcnV9jIDMZNrBcS2W5oJ+x+XkZZf+8JRGrcp8BK43AnGFa1tEQch4ckKj1sRzPMbzNpmcge2vOL95huX0ub6+ZmWNCGOfZ8e/wnElWjsPsEKF86uv8CIHSc7Q6dwwnl5i5Bxy2TLnV58zmZ/hBzbPv75ANwQkfch8PkOISoTxEi/q0WhWef7yd3i8pLWxi6FXUJUay9WKTD4go9fZa/4e21sNrFVIaG9xcNTij3//b1Eu74EgsJjLhH4J259Sb5SIfYNCtoa9zDNbtNkoH/D5J5f4vs/23gaSkCGO6gynz9CySyazLrYV0e+PGE/PGU5f0No2kIHWls07Tx4TBjZR7ELUZP/ggO/+8G30rMlb79zBcSwkNcRxfY5ffUEgnuFFHWqVCkQOfhTyxVdf43DKaHrFeLIiW6iS0UQEcc7mdpPB5AbTnzKZOoz7UyLfotHKcO/u2wiIZPIBiixirUx2d2vkjAq27XJ1c0a7+5pMtkwcyQRehCIbhFKX0fSMhf2SQllnOnUYz19Sq7bQ5Bbb2y1k1SebU8nmdCRJQDdkMlmVYlHgzt19NsuH+PEURxCpbe8xWnRxbBvPBc9fsd16DLHK249/gqYnu8btdhtN0zAyGoEvgBwSSzb1xgahYGH5K9qdMe3xKfmizGBwgixkKBi7hH5AIS8ROC43J0MUI8NVf46WKd2mRN/cWGPiMKZcKhCvwUci6CbBFTvA8wMkSURTDTQli23Zt77FKIrwXQchVBDjLFEYk8/mEZEIgrQYWkj6JxU9KSb3QhBEHVkqoWtVRCmRhWVFQlEEZEEk9EN8P0i7FEVUXUdR1YR9C0N838WyTCxrxWplYa4sHMdLQlWIyIqCohloRg49Y6DpEqoqokrJhGMUBASujWeZrBYL5pMZi9kC13Xx/DDxJSIiyiLZbJZ8Lg+xQaFQpFIpUi4XqFSKVCplNKVIFCWvKYliIqEGIUIUIYlJOjqKopSkjBDiBIQ5jp3Iw6KUSuv/luQNJKlyOQ0PrYu91/U/yWTjN5AYkiClNgApSZ0L635EEFO2MghcPD9gTebBOqQCQegSxdyCqDiVkeN0k9zznTT1nB4X6SqPqiXF4pGQsMekMngUI8sSqi5h2XbCWobxG9RMEm6JSRhoUv/lm0BOUmPkuEHSD/kNABxGIbEgYGSzxHECuG9LzeM4kY7jCOIErMZpN1BMnBaEhzi+hygpSdAqZVrXE42CGON5/m39UBzH6R5UwpJ7oUgQJ35KAQHfdckXcmQyGYIguH1/QRASpsys7awYj8ZompKywMIt6Mz84Ae3DDdAc6NEPi/irKZsb+8kQDb1gYZhzEa9hqFpOPaUbv8VjrtiZXps7qogTXh9+jkKe7z75K8wnawoF7cx9CyjcYfujU05fwfTWnB9c46u5IiECUQC9kqkXM4znl/z9nuHVFoOkSiA5jGZXyMIIhutGoPxFbpRpdk6olLZo9oQ2Gwcoas1RpNjZlOTcv4emazAYjlkZU5o1TZpX5ksLYfhWMHx7oAsc3bSJQpdXl+cMp055Is5xrM2nXaXnd1DBv05pdwTchmD7mRAJldnOrjhN7/+Jf/kz/8vnPausJ0ITcviuCKqnuPtJ98jiGbISkh/dImkCHR6L1nNVAyjysq95qr7Ass2CCUX01shxDK94YhXV7/FsWwGnSs2au9wsPkTMsR4OPjanMvRCZ2uhCDX0XIqTtxhYi/ISfusltf40ZDF3CT06gSBzGXniny5nDRVqCKlWpXWno6iGmgZh8urG0JBJBJktneP6PWXrFYrGrUmO1u7mKsBgSuCLxCFLnHkQqAghDLZrMZ43GXYm9LYyNEZnPDxrz7j4uKU1dxGjKGcy9Ao57mzv0foLRh2F6hSjcM7G8h6gGNrOG6A55ucnAypVBscnz3FdYps7laZLkYMRku0ajJNq+tweTbn++/e553tF/zJ0ZKW/QWB61DOVVBkgauTa0olHUXQyWczPLh7H0NT8VyX3nWXjFqEQPu2MPHb91BmNJ2pPSdfaLKY+3jOgsXSY/9wh+vzGd3OhErDRxJMGrUjxtML6vUmoizjriwm8wGIEq3WBsPZJVt725ycXYFo8dmzz5HiHKVSEcddEMchtrPi0aMnfPbZ55QL+yyXYyTF5eT0KyxniBDrqKqK49lctkfkM1XypZjlfMX9u++hKDFfH/8F11cd9vcPsZ0l+VKWTu8Vtm2SyzU4OX/J3UfbZEsa4+E1rr9is7VDJlPBjyy6gz6hJvDi5IRWJaCYzWIt5rS285y+fsVgmCUOq2iKwdZ2DdtyUdSAwbCDqhh44YhGIUs2813m8zGD0SnbW0eICJy+fkWpUsVa6vhxj8HIZ7d5xBefH/PkrYfcu1cmjmMMeY/PfvcMWZWYDBc0Nir0eh1aG1XkuMrNdZ9yPUQxFOZjg2KuwMN3p5xdjphMbHZ2t5CEDHnxQxplmdOzL6k3q1j2hFyhxtaBznS+QMHi68/nuHdy6IUVVzceGxsbLN02Of89JsMuCC/RMwJ2cIFeyNHYyHB5NqGYbdGoF5itAnxMZiMBiQyBL+G4E7SsiGDLbO5sMxh4tJr32Nms0T3/int37jKbrCiVVGRyiTdREbEsB8sMaG1KEImIyxhVk6lWHzIdLRDiDP3uANfMUmjAdH6G5m/w6uUF1QZEgk/g7jJeXVIoZji97COzSRhqNBs7CCgsVnMUOcO4I3K49zYLq/v/pe2/niRJ8PxO7OPaPbSOjNSydFdrMT29IxazO3sL3gJ3IEgecEeCMD7xH+ADyUea8YlGoxmNxoejkSDIOxI0g+FwELvYnZmdnumZ1qVV6syIDK2Fa3c+uEdWD3BmN3iAt1VXVVZGuIz0r39/X0Ei+QbnzZcUs2lkWeaqfomRDqPIo2mK04sjet0rCAxQBqT02+SzAs2rFh3lkmQySyA7pJIqg6HP3bvvs762RePyCdl0jpSRodfukVBlbm/fp3F+yfqtIidXR8hSHjmZjQwNj19cf/aU732McnAT4eI8dnF7MUhZjr09PFtAN2IHrhgiqAKKJEMYYKgKoQCeGCLIIpqo44USk9mURMogQIlBg0IgiIiCFOnagjAeO/oE8YidZQC2KKAoIoIX3Yxd1yJ6PhURxYi1AzkOpI4yAyFis8LAw4/dziHRWFiRFRQleY1gRCm+aYcR+PEDN3KI+z6WvYgjXqJ9FwURWVEjoCvryLKILMvIsoIogqJGGYmqZkRuX8GLpQWRK9l2XFTNIPCX2xcSBD6yGOngHEeJxqxiEOkkv7sIIKtEZhVJXhKQcbNMDCwD+TUqZOlAD1FlCcuKTC4RoyUR4hMEbjTG9SWujUBhGJlFwoBIBytf6z19P9JOBoFPIqFF9YuBRyBEgHnZMmToEGBG7KwYk6XhtaITUYyd2gFIYhzoLkbHwzA0bCcalUej6ojljHIwfWRJi7SJYRDnhMYAWYi61wXJAEG+bkmKTDs+siQgSgKO4yEKSnyIwliMG7Gdrhfi+tE1KYSvTUoCUcNRKAoEgYMghZERLPQJAxFFinq+F3Mvqnb0HXTNIJfLRRWZQtwQFL9jEPgoskS92Yp1oTLj0Ty6roUQdXeP1I9ft+OER8eMd9IESkgmlUcceZHZLbRBAF1NYJsi8+mEbCYRHSMyDKUh1kJie3OTdK6N7805v3zGj3/0U87PTnj47AEbuzrmVMOXbFLZBJbXYjiXkJQ8w26PSnGL4WCG7QhcNS2EMCTwBRR3l9CxODt9QTZTRjfyFEoJbHeIPTbQjQL9rkOluMts0cEL5oxHCzY2Nmg2m2yub9PqLcC10eQuznyFqTRmofps7W0x6/RYX32LkAXzmc1iMSOVLDIa9plNfLa2tkkYIhcXF/Q655j2iHRBwkgnmE00SrktCIe4jkej+QpR8hgOT9GNIoV8jmfPjlmvrXJ5ccZ0NmJn5zal8hXnZydoxk1CwSFbypARt+iNGniOjaAM+ebrv+bm9ntUsxrTyYDZZIbs59jfqVHvDHj7zQO+/m2HYnYb075kOJggSCVWNyp89e0v0TSdtbV9JrMJ85lHENqk9X1cT0BmjWw25MnlU9648wesr86whilKuSyFjMF4MsOxQ9KZKls332K6uMT3RKZWFz/wmM0WyHKarfUSiqIRiFE3vO1esr/1DuYkg6z06DYg5cPpkxdUK2W6vSNqG1kajQaqlCJluKQ1A8/LUamoHJ58TUKrks0ZHB+2WVge6ZzKZDTk5fEppdImtVqKzTfKBNO3Kec0MukCncM2pXKOo6cDStl3KBdKvHr4kBtv11DlkFE/i64GFPYKrFU36Ha7vy9M/P0BZRAEFBNvM7UfIksqV1cTMmmVF887GHqaGze3mIxtWu0zDKODpqcQRJWDvfucnCqcN48RyXD35gYXF2dcXL5kNgkpV3PcOtjm8dMvorB0tc9sPuZ7H7/PV188JfBFHHfGZNbGcWcs7DampTIYdyiXVgmCgMqGTsrwGA1cFE3i6PyvaV512dqu4LgCZtCDMIWeMlC0KZOZx8bmCnO7Te/KQVJCknmNcaPFVatHIZEhdJNU16ec1X9Nr+Pyw4/+kOl8hGPbeL6FrmVJ6jXqVxcEIUzGArmMgSgFtM+63Di4SzqpMJ2MkJUxsj5jMgqYTBokkxKXlyMK+RUCZkznHlrYZGZeUNvQqV+es39wm9G4zXB0xe76HU4um6xU1vn2q2P2bxdI6TdRk0OSuYAwTJLJJmnVH7K59xIjLWKOVtjfX6fVfs6wJXPrxl1Mu0cyUUJTA/xggSpnODl/gqSYVFIbZLIJvnn25+zs77AYBLR651hOn1LGxzbh4qSLrMoE9JmOHYZ9j42NDS7rj3DcIloiw2g0YGV1n6Ra4ar5FMtts7Z5gCGt06jXEZHYqt7Amy64sX8TQol8ocJs7DA1z0mmsoz7UxKJFNtbb3N19YpSOUcmnaPTPyGZSCPJIbLkcuvgFheXfTrdPpmMxrDfIp0VKJf2GE0vkJNjkikNc+EzNXtsrlXw3Byd1hgtGfXySqpP4AS0+hbWQiAILhHEBYpcxafHoDvnZnmDwWCMIM2pnzvkS2lsp0MuV8V2pmiGR0ZIkEgUmUwH5IoFDl8+pVbdJZsq8+DzB6yvplF0jfOTc2pr63TbC1qNMYaawgvGZIxVPDmBZR9F4OH5EcGnXxD+vf8Yqd4g+ff/IbP/3f8aVRWZL0JkRbyuyxNEgVZnjKpGt0ZRllHkKPpHNSDwotgYSQ7wPCcK90bAsaKOZN+zIGZ4iEeLgRdlMoaCiCKKuJ4bjUWFiO0hHhHG92NEOQ4sD6NYIILIJLIcQoqxc1aWle8Yb+KQ7jByF1uOFzF6kcDxegQpCgKiKKMoEqKmxZWOYURsEYFC3w/wAw/HsVksvGuwHYE+AUmSkaQYaCoSkiwhSTKyKBOikFaj+W4Q5zZG4do+nm8jJCVCPAIvCmP/7uL5PgIBjh1E1ZDx8ZHkqHVFkpa1jBqisIzKiQCz73vXLGeUx/g6R1GWJVxX/I5uktg5Ho1FozFuVC8oikv2MmJAPTduqIlgz7XeNgxDJEnFD9zvsODRsRZFAds2o67s0IteF8bYjhA/sCNt5TXzGo2zA99HS2h4XkAQLEFgxMwGcbi7pojM52Z0u1l6aq5jf+KcUj++pojAakiIIIaEoYvvB4R8J78z3lNZjq6JycSMH7D8CMgKIhHo9hGCEBGfIBARBJliKYfv+9dj6Wj90XWk6zrNZhPX9aLPjyjEDGXEPGs343YcIdJP/t//zt+hfvTPuVdcJZ/R6b18cW0uEohY24XZJvB1ttfv8KtPv6RcyXP//j163SaX9XNyuQoIFg8fPmSlmuXu3bs0ekdMRnMWMwvHvuCjD3/A+cWXNJttEnqZD975E54dfsvCnJLKCjjeEGch4IdNZjOZWmUNy+kiqyPmc5NE6oDBeIQiKohiCsef8fTw5yiqiCOBkUwRhBL5fBmBCgllQGt6iqFs47kdEoZPJfEWsuzSWjQwDA0w0BSdbCJPrbrLwm7xxVdfIYjr9McTMnqFpAa+qKNpOXr1Ge+8+RHnzUMa9Sa5YgLPHQITfM/BtwI8Aba3Nug2hmysF9i8t4/nAFICTdFISFW0bI9+P2Rzq8rc7CNoJUqrd0lpAp+8/yanJ58zGA8YN1xqKwVc1yNbSNFsXZAx0uglg/pZB1+w6I3OcYIM1VoOx5JpXtVJZ0VOLs/J58so8oyd9fcYTJ7QvJD46Z/8Kc+evaC2ss1V/RnWWObOrX1yCZ/ZbEYiUWQxqdMdX9Dve9x/6y6u3yNXUOl3F6RyReoXJ8ynAeWqjB+4PHv+gISyhSgECEGA7cJgcMl4ZOK4Fs8fvSBX1Wl3D3EnOvJ6FgKFSjnNfGKSToQU8xnGwx6GqiEIAvVWn9XqDRyvQ/u8y1+PZ6hqikyhhN2pk01kaXZaCHJISod294yd3XXCMODTTz8jZVSo1goEmFy2z9C0/wAM5XB8yEr5Dmq4iZJ0SCaHCEEez1XYXH2T6XSOJHX44IMPOD07RDcy9LpDRuMeg+GAGwd3AJMvvvo587FFMi2RSok8fnBGZSWLrmUhlGh2XiKS4MXLh3SHR1SqORx/hihoWHOH1doOs7FCJpOi02nxxhs/4KL+ksPTbynltpHcDHv720yHOqGboVxOUG+9YGE2Mdoga5DNS9SvXmLoCvOJxmJmoSGhKEU67SFt6wkb2xLzoYI1TvHBB6tcnFp4Qh9NKdDr+YwGPhsrOnrSQpRgZrbodHroygoHOx+wmLUIQxlDKxIIExJZhSBwOb98Rq1aYXv1LXr9C4xEipXKVmTPHzoUsjms+YRO5woBlUI1zVfffIqmaeRzBopiIgQOpn3J1FogiiLnl6dUVjZYXUsheA6Hn9e4c/ADPn3wX7G5vgZZC5M2F62X3Nj7iHrjkErJR8Tk5u4tfA+ev/gthlFmc+N9Uok0p9NzVLnK7vZNHNNFVVLoCYH+5BAjtYGmq2xsVEkmk9y4cYtf//ozVjdK6HqRRucrpCDDrf1bLEyZwE7TmNWZz4eUywHOTGXYC5ESDpKu4gkW04kJqk0yJTNdiAiyxGA0IpNXIZSplHIIaHRaMxTFp1rJgxAgJ66AEotFE8dx0bQ8qppA8CvM5xPKa3PWa9+nPfuchVUn8FRcLwGOzWzRI626qEqJRreN69ko/gBD9risPyOTzZH1FeYTH4QJ03mHbHaXbBZa3TbziYYld0inswz6I7zAQ9PWODuvs7W1Rft8jiEHZAyFjfI2pjPDd2UKBQVNuslkeIXjuMgSfPzhB3x7fsy4P2QpXvP+r/8I5e//LQQE5A+/h/Z3/z7a/+2/ZL5wr8efUQSLSBD4ZLNpPFek05sgK5FTNZg5iELEGopE0T/LjmNRkbG9AAGfODWakLgfO/RjzBFiISIJy2rDKD8xCJZARWLZToIAkigjClG9XgQIYyosiBzGQRjgOS4RyIzcwlxr6gQEEYQYmC5BVPQHN3J+SzFTJQhxL7WAIAmosgKocef1su86Ai1+4OF7Hp7nYzpOhDsIInZNEBElGVlRUFUZRYkyLmVFQhRlNFKxllG8Zi6/u0QsqYnvBWi6iO87BL5HEAoEXogsqdiWFwV/S1wf/GX8T4iIIMoI+DHrJsUmEy/qIxfka/DjBx6SHNVWep6HIKoIQngdbC4I0QOCLBuxxlK6BmFBGEUw2ba3tCtF50YUCX0fWQZRDCKmUJSvz2kQCMiKjCyHeG4MtmMdYWTqCaK2GUXC922i5Mho6OyFPooso6gyvu1BECKIMiFRJMDSzS4IXqRtjKjPGDiD7wck0gaCGGINAwRJjp3f4rWRJjJryZG2WAxjEVfEAktK9NAQIuOHUMqn42s3Mk0ttyH0A1RFZTQaMZlEfdyCKOJ5Aq7jx/rRSFO7lKKEDx/xQBR453tVBq0GnudwL1tFVS4IseP3DpjOhmyv/ZjZeMq9+1s8fPQNC6eKoZaxnWNevhxi5CxUOYvfWJBO5bi5v86Xnz+hVstjWjPmk0taZwKF3CaO1+Pw1TM0XUNWYDDs8dYbOXZXf0whW8FZCEyCJxy+cmg0Lkllc3S6dfKFKuasD4LJYNrFNGXWi6vk81nOj68iHC67PHn5C3LZMkKoo8ga1eIGk8UxF6ct0rmAuTVGSycQgwSqEbIY2xw/P2Vze58/+aMKX3z9FdX8Hol8klRKIOwqmP0q77+v0ayf0T6qk8mX0RSfvb0DbGtBt9knnZSQDIFMPse9P7yHIhYYT4YcX/6MXLbCZm2HpBLimAWC8JDjkzbb67eZOHMevniE6IWcXkpMQo+rzhWpikBgNKm3obCyzcvTr/iTT/5TPn/8hGy+RCWhMZ+rbGxs8+2jv6Jc3GImX9FrN0mna9zc/QQBi7OTcxBsFlaXxmUF050w701YzVeQS2OG7T6JbJJkTuTsrEW2rJBK1fDCPvX2MZDn5KxBQk8zt8as71QY949wZhXWqvc5OnmFK9VJaKs4Xkj7+AGaFLK+cZP3t9/i/OwpqqCAC+uraWzfZDqyEJsL5tOAW/vv0p09x7Y9Pv7++3z18Fturr9DdT3Fq8MQ35XRUhq+J2LafTTF4OLqFYqe58bNCp7goxlZXjxoYmgVbt18A8sb44VzVldrXJz1mC/s3xcm/v6A0jRtOoMjqqs1BD/FZBAynbcQ5AA0E8Gx8a0p540QQQroTx4TuCn0hE+vL2G659y+fZOR30DSQmRZw7YFvv/Jj3n+9AXrmzUQbbLpCu3OFVdXffzQ4vj0JSsrK0hehVRWYW6bZAs5EnoZOWwxbrfZrbyBv4ByXqDZrPPNgzob61vI5Hn2+JjimogRJOj0LkhpJRzXRhRMfLtEOlWkoNs8Of4lqysHKIUqvtBCECU8O+AP3v1jFEViNBkgagLtdptctkq1uEJvcEq3IXLjYJXusE2tuouSELHDGZOgByik5CSz8YTROCShp9ha28dQc8ynHnf23uX8ssV4fkQpvcZw1EJVAxKpLAg+tt3j6PAC15ZZ3cnSH9q8/f47nJ+fky96mGOPfL7I1nqa6XSKkVlhsXgTX1rwV5/+E+6+sY9EkXRtTChIGMkMSLC2fpvRqI+qjfDtBN1eg739j5BlkU57zNnpb9nfu0VKz+PNJXqjxwwXY964+wFiz8KxffxgQeilqTeeUiqVWFvbxbL61NZ18u5NzHlAoz4hlyszs/vY1oL5VEJXE5CasgjGbOS3eHnyCkEek0mukcvdotWckC1JNOoP0KUdJFfCti3WVyVGI5uNtRKm2cacppDTa3jhU0qFDBcXPaorK4zGNmrKwu94UUfslcLJ/AuKKwHZxCq90SW5jApBikxSxbddxNQc3Q8pbRdptx0U3SUlFTk5e4aqhaQzZYJggBdMWfgvkedryHKCi+a3BEHIWuUdhvMrVlNbzGct5DCJZU5xwiNOT4skjQTP64+jOAhnju0U0FN9KptlJjML0x7y1cufE1giGTWLIAwiQPX8iOZn/5qVn/xtpJdHGP/FPyT71ecMfv4ly1EoEBsKoN2ZIkoSui7HX5MQxTjyZOkiDkJCb8l7+ddsoEgEdkRRQJTCyPCxhKyBz7VDIx7pLrP2otu3/JoPi2/0QRCCt+TAhBi4RQ5YSRav+6pfs2cxMxlGEUiRRg/CGGzGIZR4QYgQxr3h/uv8QDE+DlFc0OvgcVGSUBQNTTOuwUAQROxe9HuknfMDF3NhswhnLAMjBVFEkRUkSUKSRFQ1Ak6/8wNUllG1JIK+BLKv1xEGAa7nkUx5GImAMIgaWPDACywESca3XTzHQRDjcPNQiUa2ogehgSzERhjBRw5lEDwkWY+c37FrOcpljI6josoRixouI9GjMb4AqKqIIMUd6kIIMRMYxudCQo46sQkQEWPGNgQ5Mi0FvkAgBEgokcMdgcAL0NUEnr+I1iNGdYWCJBB6EUPp+w6+LxIIIULoxeP7GJr6HkEgRJWV4pKNja6DpTrUiQS9cczREpATP+SA64bXGs/I8S5C6KMrCTRDxW5PSSeyUfh8rDUOQynaBz9AEhRMy6Td7qBqBr7vogjge/NYlyrF7qTfNQ1pgkQ+WWFh9DAEGU2QcD0HPb4WJUnizXs/gqzB55//ip3ddykX9igUcxweHlKrbVEs2Az6I4KwTyazxtlJl3xZJJNPMOyP2NzcZthz2d2rISs6c9vg8qrL3uoGtVqV+fQtNMXhi6++JJNc5+jiZ1ieTyojUKveZGFOMe0rvCubbDbPVecpudwWpXyBycil13nJ5uYGelLg6HBAOl2mN15Epkx/RHs8ot2ao6kB/YHD5tYu4/EYz+5h+wrT2QWqsIXLgG5bJKmWGcy62G4AQgJfsimtwWLh0BtOWLt5k0p5hcuLK/r9K1Y3chSrq9y9/SEXl8coosrJszOM9JjpsEs+V2Y8kpFCh8b8hEJik739D2m0XjKyOgihgeGkSeQnHF++xPegPR6TE4qMzZC5ucBpPEGUQn7261+wmIUkchnK5AgWU8ajK9KGxmAwI1Ey2Mm8g6bofPnln7O5vs3Oxh7jmUDQH/P0yUNqq+tcdrqUC0kyWo1k3mI8adE9sbjz9g4XVw08S0RIK9QvjilnVVKJHJZv4aNzs7jJo0kHQdOwFlMSokI+W2JoTtEzJXZu3uebX/6a1ZoWpRWIAu3ukFIxg28NceYyRrKE7wxIGCKPnv9rHDeDoKgcXlziBSFK4NDt1NF1HVILer025dIKjcsRycwAUTUYm6c8Pa6zVrzFqyd1UGyC2ZBWr0W+IGJac+p1hXwxy/nZ2e8LE39/QJkuZFDkPE+eX1Au5FldWcNs2MiGw0XrSzLGBpIMngOuk+Cde3+bX/3ya2oracK1Ofn8NmKgkTSqDJ1zfM9AokI+V+HNNzVsM01n8BghcBEln1IlwWyyy0pZJZdPc9UekNRrDNsP8a0r+m6CN99+iy+/fYGtzKgWb3Ny/DnrGztY9hhdT2HOHG7eXKHV6dAdvmSv9hMEyUSRQ6yFRIjN5naebq+Fzg66UGNjd5Wj45B37/0R55cv0HSBUrnAcf0VuqoynwoMuseomkiltIOkT3AEiw/e+yHPnh8SiAah2sG1TAxVJ/RVHMdjZT2FNUmiyFl2dw54/OQbjFSSW7d3+PpBh9H0mFx2C3OqoGRlEkYWwU9gFLuUsmt88eVLDg5u0+0OKZXz3LxxhxCPxw9PcT0b27VJBhkcr48jXPHhh++SSqmMRj2GgwWhOEHC4uz854hCMdrvpkCvd8L2ns7FRRPbmXP75jaBt0Oj3uL2zRLDSY929wxZllkselRyN+n0G7i2QCohYc5kusIp7733x/yLf/6XuH6bQuo+gXSOkvTxEBnPLqN6qdwIx8ujyDU0zWLqnFCrVmi1dAQrYK2aJJtc5+XJr9neeIuV8ke0mjNOe3/Oi6czfvzjDzl6VSdAI5dTEbQ5mriFqtrcPNilP7BwPZtvv3nE+2+/yWJq4IYuY/srHHOfiRcwN20kaRKFjScVFLFCo3mE5TpkFwVsr4s5FBgNryjk0ihShk77Ci3h4wdQW9nl6PCERFLnjXvv8MUXX+H4HTY3KkxHAZMBvHl/hcA3Wcwl8ukyuq5CoNLof0tCTyNoJqEn0W+PyOdX6F51KVc2mLjNKJYFrg0Gn/0//o98/MYbVG/uIr08Jvn3/udon30b3xglgkC4ZqGW3cyuHwNAXCAKwRbjvm5ZkiIDQzx7jAwSAUEYgSDfD69BHWF4PYYVpahCTxTF2CzB9Yg4CKIYmQgoSFH4dLwFSzduSIgfs0HL9S61dMvRtyhIMdO5DJZeAuFIxxd6ASH+d0wS0chSFEWCuC88JI4EEoXY1Ru1wPhu5I4PguU+L1k9CVVTrt3H8YG/Pv5BGEQGI8/Hsq24nvHfXQSEeASrICkSiqJEf5cVdE3nGoeEEb8XBiGe56JIQaxb9KIwei8EQUFExHM9fD+I9ycCX6IEmiYwHvoRFyiIERgTQJRkREJsz42J4SgWSSRyNmuyjBc4+EGILAqwzMb0XRIZDVkSIHRf6xejDUZERBYlwsBBQIb4QSTER5IUTHOKKPsEYWw2Is50jEGpphosFhZRNSLxw0E0Utc1DQQnArmhRNzgDSFIsoiiKnHdpxAzktE1EQQBhqESEuAHwbXU4FqsGooIIkxnM1RVQ9NVXNeNtLkB1w7zSOjpUW80UNSo+jEMI3mE67qx9De4PsvLJQSy+Qym3UVXy2T1W/jDJzFQfr2tiqbwzdMnJJJr9IdjJDnJqB+Qy+UwnTHZbAHbFAlkj/6gg73QEKUUueQWK7sFBt0hX3/1NT/+0f+Q4eSMxqWFmltw1X3AuC+xWr3FZNLGdlz02hWBZ/CDd/8A2x8yn5kgCyh5g9ncJJUqYSTfYTJrc3nylDff+IRW20I1Mjx++hWSkmJqOijqnE7TYrGwyGZkVtczNJtttCR0mibJdAJPbpPObCGKG4gitIYnOGYEoi/P62xumlwdtqhWV0gmq5xdNEBOsLWzz69//d+QK2jMZjbTYYFScY3RqIcsizjeiIPbb9CbtDjYe49Wr4vvXpDS8mQKUMwmuKg3sG0BXVdot5ts7q4jKAmOj0+pVsscpG+iyCnSyQr9QQPTvsRyPC7OzsmlblJJJfBkF38kYGgF7t8sM+p2abtTUkkbz5T40Q/+jHbnjEeHj7i99z53765w9Oop7fo5e/v7TGctNDFHMlmkUFTxwgXJTJGDdIqHvznGXJhsrm6zGHWBJDIae6sFXh0fEUoZUkmV2UIhNNJM7AmhOyFnVJi1xmzf3mdutWkNoTUaUMxukC2uYs6vUJMix5evMBabbO2UsL2A5uUJ5Vqe589HEC5IJ9MkBIV2p85G9R4rBYNW9zmDvoSaLIEbki/k0KQUh8cXlIpJjo5GbOwZJHSDqFQigWnNUSQVRU78vjDx9weUGX2T8XSB58xxPJlOd4jjiujJLO4iydA0CYMF+UyZp49a7KzrbG/uk1ChvJdHM2T6gw7razmSiRBV1fB9l0bzmEF/zHB8RbLQwhnfwXWg3x+Sz1UoV9NIQZE37qZ4+Pwz3v/oQwJbRVclXj7/lv3dJJ7bpDkcUS5XaTYmFEoqq5VdHjWf0+6eUqluUir+CN8LmM/HlAqbSOGModNiMTMZDdukMj6a4eP6Y/L5LO3+KWf1x6iqysJeIZdYQRZVitsVzHmL2cLGn5b48N27HJ++4PjsJdlckiAUaHVEtrffZTZb0OmdIUsGurxKqPpM7RN+++05lmly+eszVmp5Dva3OD4JKRRTDHpu1OqTT/Hi6AHvvXcHDxNZdrmof8PHH/0puVyOR9+eoCcEuv1jCuUsldQNTs8fsb1dICFskdK2EEMTx1xQLKksJmAIK9R2NxlOTjh8ccja6ja9ToLTkw6WPyaXrNIdnJHMGtiuycsXx6xtKWyu36GQfI/HL/6C3Z00V40+nufx4XtvUCqbvDg+IeCvuH//LS5bXzA2LwmCEbbls7FeIJveptdtIcgCybRAqM3I5leYzK5IpWTyuRyVFZfzxikbtRXMcRVtNcPlcYNifpM7qz/Fyk9ot4YMhw7lVYN69xAA1x5iX2XIJkwGwwnr62+xt/U23/zmF/zkJx/z629/RiKdxbTGJPQKQQCKlsT3BGzLJWEoGMkMg0aTMDTR9BSB0OTGjRtMugrD0RnlioobwGQyRwgTFPI1WoMv0fsytw8+Rku49HuHOJbI7v4qU3OILIasrr5LpZKh2Www91vkVtJYpocnwmhgsrapIOoBnrigOxywWtlAVI+iUWMMeDQt5N/8/B/z9/9H/9voA/vR9yi8dZ+rz7+OWKrXorTrz6rAayYlDAN8z8PHxQlfa+aWGsZIWyghiCKyHGsbv5PVGMS9xp7t4vF6VCuIEeuIKMQaRykaV4tL00YYG2fCGPDGZh4pYkGjMPbo1hyNpX28yCkTs6ZLZlO4bi1ZjrOF+N+Wpoow9Ak8Hy92Ul+zkzHYjIKpuf768hdEINqN3dRAHJQerUsURVRFjd5HirWD32Golq8PPD92tTv4noe9sPE971qDKIpiFMUkxkBTidhOUZRQdSUavwpxr7UIgR/iex5KIWJQI6AZaUUD32YxDwhDmSD04jF8vN8ECJKCbftIohqNuVk+bUT1k54tQ2gRxv8mLnWLgY9tx+00gkQQ+kiShOs4qHIKTZUBJzo/khixiviIAhiGgm1zzSrGRnAgqnO0rEWsL1Xi6y/OrkQkxMOxbYjBZvgdsEkYRq0/12728DuyT4EgcHGcWK0hxEHt4euxuarKhKGEkVCuryeI2PDIxB61FTWvmoiCGMdoRQ8toCOgguBcv4Z/69wXSzqOk0JWRhyefMnHxmocTB/JBTwv4MmjZwj3iqiqwrA/YXWzwFXjCMvyyOQS9ActZhORza0tXl69ZH0zwWQQEgoDKoUikuyxc5DlrPHnKNImSrKB585JGiXKhRSq0UI0y7juBY4X6bnLxSwPnx5iOSYr1U2yuTxfPvw5s1mK9fVNGmeH5JIazfpj0uk0njlja7WCZQcMenNymRVcB2xnhCissJjPESUXe5EikezR6cDuzk2EIMXqaoVvHvyKZEqJwviVLEZ+RjqTQZFL+J5Nb3KJnhUY9U16wwbZUoH5osXa+j3ee+eHjCZPOT55RTaVZzYXmc08ZFWhNzyh1emTz+vUcncRUybdZp1Krchf/PlT/vBvfEwiM2Iyc0kks2SyJXwvh6KoaLrDtw//klw6w+7eFr6dI5tocXVpcXPnBv/tL37Fx/feBWVBp+OSS2QJZhazUELwYDZdIMpJ7t7b4/jkt+xUP8RQ1lm/aVAo1tC0kHIxR71xFrU5pTJMZzaer6AmTUQziS5lKdQq9EYv2Nq8TedyTipv4PVHqCmDgloiX1hnHg4pZEXqr1qglEindBb2BMEVqFayNE8vkASPQDLxJhaW71AuJXl1/pBa9QBVHqGpCSYDm3Jhg1xVpXO1YKV8A0NXOHrR4+atP2K11udXX3zGO/c+wjIHXHWH3Lq1hrMQWd0AVQ8xApmEkaSYNyCUWK2u0Gz+BzDlSBiIvsDW2h1sr4kf9tB1BVXMYPkiKT1FsbSLbcHODgyGTd58Z4ff/uZrKre2aLUmTKYC1sLm7HTIrTs7TGd1JsEMxwmYznrsH3xI5zKFIpt88P4uprlAkmacn52Q60u8dfCH1C87qPqQhZAmnazRaT2lWrrN3Vt32dl4h//fP/s/43o9vv7yNxSLZcqVXRxPxHUsXNfG92SmIwvbcalW1uh0GyQSBrff2KbTkGlcnaIbEqdnfdIFGVUx6PehUCoyGc9JGGV0KUOhpiMJGU7OHpIpGCwGGtWdVfrjC7JpHcI5rttjbdeg30xw0XiCJAls7aVpnDnkKwnW1AKzyYyLsy5JPY/grpHUXfqTR7iuQ6mqUW/02NzYo9tr8wc/fIdCUeGLz78hkUjQ686RFSjk1ugPWkjSmIS2TS5b5Vef/oIPPviAVyePcByT/d0UeCUst8N0JGHI2wSeQcApzkLgb/8n/4B/8l//K3ZuJvAchXx6j6dPjjGSRay5ibJyRRgoTMY2K5Uad+6+wdnxgGwhi3GVJJOq8uTpA+6/dYunz79he2ufhF7EsuvYloJIjs2V9+mN6ownQwh8EoksM6tJKlNhYRsEgcTx2Ut2b2RJpdI8f/kLtvY1Dg+P8H0N0c+SyynoKYuUp7IwBZxgQEbPMbFmTOcmz54945MfltBTEs9fNsgVC1z168iejK3IVHO30GWJTreFbVsIeRPHk9i/5yJ4Bu68xsraLQI7iZdsoqrbBD7MzEtq6xlOz15QKlUppT9iPL5EwiUT6CS0TTrNM3RdjkYNQFKXcMUBcgKCgc3C6VBI7dJu90gkYD52GXen3Lv9FrNFyHTaoaaocTB4dAOVpTyT2XN6vVNKN/aQXx1T+If/kObn37LUT4bCchzHd258S8aQa23esi86AnEBhAGe6+G5EWMWi+IioClKqJqKpiqoskpoCNdj4iVQihjNKPg8aiMJESUBKQZfSzAXLcs8x+hvy20OYxOHLH7nR9Fyf+Lx5zJXMfRes5rX778EjYoYu6UjoLsc8ft+gO+6BH60/iWrCeH19kWAmut2nZDXWYm+7+G64fLQIIm/O/IWYj2noqioqhaZPOL3DoMAz/fwfR/fD3AdB9s2WSz8CNT40chZEhUURUFVJSRZQZIVFFlB1ZbShXjlYRTD47s+uawfv29Us+h5bnyYBcLQJfA9YiqOIIySww1dxzZ9giBAXo6OicLQk+lslCUpTBGE8DXLhogsR05s14sqIsMgMln5fiQJIIjiowJBYslrRrpeD8MwCAL7Onh8yYhH2lCTIHARQhliXeWyhzva7xDHcaLth+sHiVhzEVdXEkUNxXuz1PJCJDcQxSSSLLyOMxLE6LggoMgKrWYL3w8il7wfyUQIA3RdwHEcot7JZWTQR7H2MlqFLIuUVlzqRxKbOzmGL6/ijvToO2RJZnUjy2koUcxt47tXNC6vuHN/jV/+7DmariNIDqEQ0OuOWV1ZxzLbXLbOuH/vQ8azMYoqkUgnkIQEs9mIwNNIGBmsuYUkBFgziU7nBZlMBnsu4Hsm9dFXDOYnrK/t0mx1OT8/RUEmn1I5PzxkbfU2iuYwt9qkcmA7JlNrgmvLlCqrKHKAIkk4ySStXhMCB9Xw8RyfVCXLbNZnOhuxWkvSG1xieyaGoJApJLm8PKWY3WM8dCnmN3C8BgtzTFrKMZkO6PVFkokc49GMk+YLqpUN/vCT/5w//CTLePKcr7/9FU+P/pIXz/u8fes2+WwOVZmhaia+IBD6FRQV1rfzWI5DKqsxHTo4XpswlACP0EthSFXefVsEL0kmCY1xi/XVCroxYug5vPfRTebDAe5syMCeIuvbWP0ZW7fvsxAvOX75CN9z0OR9Qtfk019+wU9++kO6vQWW4zK3Paxmi0yuwmAwQJB9xtM503HI+u4tJt0LtITBZN4nl7tHQpd51XhIWSpjWiGhNyTwJVay60i2xkmrxfZOHmcm0J9MEAhYzIakswYd6Rzb1JE1A83IYPhDTKeNpit0+z02t7c5PH4FQDa7gWVfkc4mkAUdyzbJ5pM0m02E1AW5dAUjoTDuzxElicv6gEb9Jdn0Ggf5PRypT/2sTSiOsRcGo5Xpdxj6//7l9waUrV4XJzxnJb+FLq4hqXPMecCr4yNW1yW0ZImEsUYpW8GxnkWCdiVHLr3N5eUlaxsFLCskl02yc5DCMh3wcyQyE2Q75GbhFuZER9KaFAsrNFsX7O5tcH46oz9+Tmn1hxyetyiX8qiCSilT4/zikFs3f8zpSZ9CSeaf/rf/F3a2DxBwaS/O6PSesFgI5PI1bH+EKhfwHZ1UScLsd5jNckzHAiEOyYSE78pUyqt0u21K1RKz2YR+2yOVCjl59TCOOrlJoVDkxauvCMM+pdQuafLkN/NcNl+hyjk8b8L5+TmFaorRcIbpddClDHOzw+GrHsXsLVTdx3cULCuqjpubPU5P6qysruF6GoGfJmGscnTyED0Z8Cc//Zs06j3+zfm/JpEoICkCyTTMZ1UUScd3JxQzq9Qvz1AVmfc/2qPROEOU0ojJKwKhiGGscHZ+ytbmPmdfPKKYf487N79Hq13n+BlUVypIgovtilhWwA/+4EcMBwtc5izMISvldfZvHHB2fkjg5tjeg+dPz1jbyGHbPpphM7cvWau8y3TcIwx7iKpJd1SnXKhw0XxIKlnGtlUk0ULTS2jqLpOxSyIBi3kPWdEZjEaE4gqr25s8evEMw0gQuCNUY85irDPvg6L49DptCmsq44nLcNJkf/sG7kzl6ZNX9CceRqFLrawwHq2TNATMeQvf80mkM3zvw4948eycudmjWEpj9m8RhiH94Rnnlw3u3/4TZlOHUJiQyeS4tfIRDx79hoODbQzDwDQHVIpr2I6J407xbBtBmuE6VVTNQRHWOLs4ZVuqMR1rWGaC2voqzlwhl96gN35KtztlrXaDJ09OqG3sMho4XF1dcT0SFgRGkys2N37KF9/8f/jTn/6vAFC+932yb95l9vQp137eJZgk1iaGRDfD6/eKfyiEQjxyXAY/Rzfn6CfB66o+33dZzF3ms/D6Rh4SGT1EKdZmxmBMkiREIYxG8CEx8IzAnONErtfl+gWEaxAoSsI1AIyMQMtImfD1n2PqcOkMXzqBg1jTFsRO4zBu3SFcsqcRw7gcO0t6PE5nyZguXcxBdNx8ET8Irg0/fvBd9Ms10FlW/H13WY7Qr1nRaxZ02TUOiipjGHo8lhdiBtcn8F1cN2aRfRfbcvE895rlksTIRaUoCooio6rRSF1SRGRVXW7BNUB1XYd0QsLTwhhs+rE8QmG6cJiZLkJIxKACgi8Q+B6LxQzH9YC4VhE/cvELEoIUYjkuYRw3BJHJRxQjh76iGAjCd5p5hBi8I2HbDtlMktnMjDW30YNL1OQkRLFMbvQQs8yWFAUR1w9Q5Ohcut7ruKboHEffr2kqrjNHEOSILQ+D2EzjousGipKKbnFC9LmIwH5AiIgkiPS7LTzfRlI0gtAlREIIo22XZZH53IunAKDu7ZH+8Q9fd3gfHdNcmZAprTIYP6OQv8943IjPWyw9cV0mgwAyFp3eOZqsc7Bzk8NnZ9RWtrG8DrIkUiikaTQuqJTLFLJlpmWX8XTG/v4K5+cneE4KXdeR1Cn99is+Pvi7zKxzzLmI681JpTLMpi7ZbBZBdHnw6BGZdJHx0EGWshTXZBw7z1X7AkNLEXgB1fVVDo/GLKYKIXNeHT4nl7xDuZDn7PJbVD1El2voqoySbLMYGfzRH/+Yn/3Vrynm18iXTAKhxXRic2N/m+l0Trdlcu/+DoePZ+iJKbN5nVI5DUESXUmxUgsIA5m53SFbVNF1jZfHv+aq/ZK/9R/9fWrVXf7wB/9Lfvi9v8UXD3/Ogy//ilxym6OjBpfir8hWaySTIUeHJrXyDubcYmrWKWXeQRA9FlaXQq4YuefTMoN2gCK6nB4esbp6wGLRhyAgFbgUU2kCWSQUC6SsKaPZnOJWmak4R/YUdnaLDDsqybSAPqjx1vfStPpXIDs8fN7i7fd2OD1pkCkKbN1QuLyoI7olhv0uYrjN+maGccdFlFUePf+CN533uXE/zVffvmJn9wa+OULSdhnbYyp6AUENcYIEYjBHFDMUqlUCt4cm5imtVRgNHLRAYBrOMJQMnj1C1iQ0QyRXMLhrRJji5PAZq6s56t0LdC0VtaKFA1bKuwThCjf2RRZWh1qtxqvDMxKiwsrqFsXMGoIY0GnNcf0JhpKjXKvR7Dy7Jkh+n+X3BpRGTmPelxASQ8bDNs6giKqHSMkFnr8a6Rv7Dko5pFioICsSDx48wg8D3GDE+bnLdNFEVAsU8/sUSzmarRMcN0DSwdBVJtM69+6+T7cVUC4pKLJOOpXnxvYfkQ0dkukct3bf5PnhI7qTl4ytMwryLba21/jim3/GG2/tkNX2+PnP/g26MSebz+K6JqbTxvLbzKY2lWqeRNog4xYYDAak8gaXl1cMxiErxQ+4bDZRdZdms0FKW+Wdt7bo99uYboJQDLADEVGtEipFdndLhLMSmmAwt8eRU12wcMyIRrecCaWVBJqyhh9MULQUjmlwNeuxfaAzmw/xfBtzMaHVOWV1fY1UJiQM84wXr5jOfNbWS/Q6Lrd3iswXL8nk0lTL66SSBc4uv2J3/xavXj1DJkM6HVIprDHqTdESCtnENkFwzs7+Oi+/GfDe+y5F8YBvvn7IrRtvki33OHw2o1zcpdF6imJYjPoKhYKOLbk8evoZ2dQaW9s30ZUk9dYrNCPAMl3Oz5+ztVum1b4gX1LoD56zv/0xk2mb+eKUMHTpNqPw8Fs3dhmNRNxwwmyxIJs3ICgxHC+oFjfI5ueYwQWBZJEvlWl3ZpxcfksqlUKURWQxy9h0MZIuybxPv2uRyedI5SwCJ0epKpNMvsNiNiWVmCMHOfJVm5PLc4YjHVUoU6lt0/YauI7P+XEXrAEpY53JZMJi6qEqAt3eiGRCobJygOvapNNrNLtDdvaqhK7IrVs36PX6VLI/piv9JeZCRpQkHMdH8FMU8+usVDboDg4ZzhqsrW0wHHVRVRk9mSUIJEy/h+srGKkt7r91j/P6Icl8nuFghpzskch6MUSMAI8syRweHtIZPOXdt/8O1Rv7yK9OyL51n8mjF4jSa7cr10aK4Ho0K0B843/NssWeB5ZO8ddxLK/BKddgSHjt+A0jI0fgB1F/9fJ1YQiSGBtvIoApKwqKLKIqSvxaIu2bH8RMW6SnDILgeoRJDCYkMapLlGTxeowZLtnRuGZQvtZMhtfgkniPheX+BUHE6Dk+gvsavIrfBaeCGDOakSnI9yOAGca6UD+OTwoQrtmp7y5L84UkiciStNQbXGv+PN+PNKJhiO05cexOtM0ROJFQNAXNSETMoBCtJ/ADPD8gCFw8N3Jf247Nwpziu0sWT4zij8TouMuShCQpCJKGIgexltFHi8HmbO4iKzqZnBbnL8bnPlTikXpkeQlClzjuMtZwSjhugB9E5hch7k73gxBJ9gmRcB0hyhoVotJFQYh0uJquY5rWtbxhud0hsS42jKo3BUHmuxFJIT6KvIzGWhrL4oxLIW4lEgUE5TWoRoiYdlXVSCYSUWg8NqIoI4oBXtyKI8sSvW4nciELMqbpRw8319dPlBDguiERIR1i3LrFslAg/OIL/tF/8ndIzP6C3/7mr9jduoWecrFFGUkWYyZUQBQDLKuFtVgjXy0zGlzwxhtVWm2V8WxAKE9wXY1SsYJuyKiaz+nZKzK5IoK04PTsBcOeQGW9z+lpg3xmj7XaLR69+JdUinu4TlStKmJgJBc8e/aC/b2bzOYjxFDGtUJsu4flj7DmCTZ21plMZkjCkK9+e8zG1j6KGvD06Tnv7v0D/qf/k/8Nz8/+CYbu4tHml794Qa22TiJr4Lk2L57VKZXyOO4UvA2mC4tKOYvramRSJo67YHClYRhjbHuBb2tY9pRRz+H7n3xI/3jKbGpTXa0xt5qATiabJ5X2+Uf/3/89tw/uk89V2F19F1Vc486d9+mO2shajmI+R3PYwvZMLEtAEB00XaZYLHN8/Bnl4jaWPcbnWz76+B7zscfR8VcUMzcol8vYzgxF1FHUGYP5nOHAZzWTJhRgcGnzxo0yj48uwR5x2bvCcUWKtSy9yQxHkMhkKrQ7r1iMJxjJHCEiiUSC2cQjcAwUSmiKxOqaxHTQQhXus7XhMTYNvveffcTP/vm/Jp+/x40tF3PkcdWY4/jfsn/nHiOtgzcxUO0pzfGU0BZYqAvWyjVGvS6zUYrQM9lYvYkt9BEDg4AFV80zrGDOcHREppBEmIPvT5GDCtubG1y1L3BMA9sMabpN3nrzfVzXpjfoc9l4iqZUyOXyEDi0WxcYcw3NCAi8BIamctV5SFov4Tq/L0r894kNmvQx5yInT0wUzcEXXqHIVeQgx2xsMdFndDpnDMdX2LZLpVKI+m0VD01LUsnt0G4WqTe+JmGkefakz3nzU/LFBAfbPyCllnj1rIEqP6Z9JSGrFoOhTuinUXSfVbmDkJ2CnSB0VE5b35LM+zw5fMjqyi3u3/ozhr1nnPR/zsGdErp0l2ev/ppiOUG/o/A3/ug/5fHTX+A4Dld1k2p1DUWq0B+0SBg5LHtGf3hK4CkYWplbNxIsJkmSepa5OmOzcgCCjR8IOOYJSXWI5Odwgyk7BzeZmSpfPvxXZHIKK9V7CPIRYQjWHLygh2kOSSQFisUkslChUx+wsVbmYnZBKE945/27KOIK46GFavhIQoVBu0dtC4pllSfPH/HeBx/w7Nkz6s2HpIwKCit0mgPyOYNyuQJOAtedUsyu0mg02DtQKBcyXL5qUCwaFDI57EWSP/3JP+D5qyc8fVRHloqMJlMkdcZK4S2uFmOG3REAe/vreI7Cq5O/5v6bd5nOO9QvU7Tal2ztmDx+3GNutdlKvYu7SDDsjVGUPIE3IJkoQcLCXPhcnYfM/QaLhc3udglNC+l15nj+DEWa0myfYBR8ysU1vvzikOqagq6nSOgZ5qMxjjdkpVZkOGriuyJSbkJ7eoWRKKLK0LlqMhof8t4773J5eYkgJNlYq5HNyASehOCLhJ7P7vY2L1+2ubF7k7nZo9U8Zn9/n3rjglL+gMHAwvdnCGGeudlFT4SkkxLd7gnDjs/21gG7W2WeHf1LFEVHkVQ2N/ZptU9JJnRm8z6vjh4gSRIbmzXy6Q3OL44pV9Ik5Ry95hUr1RK20qd95ZIxyqjaE/a3dzk7v2RhFZAVmTA8vb5BTq0J7cExipLm6OxLqpUDAJIffUT4j/4rQLq+eS8d25qm4roOrrM054SRQeU11uG7VXPC9Rg8jgK6jm4Jo9o+YjB5PU58rUeE74K5CIC5boBgCddAT4j1aZHOMmY0ZRFJEhEEJXLlxuuPMiWjjm7BDZGkeCwtSCiyfM1uRUBu6RyP1u553nXGoCgKIMqIQgxgotBKQohjhKLR77J+D15rK5cAUVFkNE15HTETBNdA7HqJgTlBEA1SwxBP8K9H40sgtNRShrGhRYiRfBihazzfI3ogiFqEBCGMdYEiqiqTMIzI4EQElJcOdc/38L0A1/UxbRPPncb7GcRALT5OcnT8oopHIQqcJ+rRFkURAhFVDlG0SM/qe34MqqMMx7jAJgql90EQogeLUAkxnQmBELKM/lmC9jDwAD8+X+K1jjEiiAUkRUDTNTw/xPWCKJUgPpeSKMRxPUE8po6Z5ZiJF8SI0Y6c/rGcI4zMY7Is4thexEWKUSxWiBCDfmg228giJJMpRhMrug2GRNpNouvFcRYxmFZig494fcKDhw9pFQukyjIHN/N0mlfU5hsUqhph6F1PDVRNQTeylMtl5vYpxfwG5qhAKuuhJoo0ml1WV9cjuYScZbW2yXjYZ9gLWdv2GQ08JG3CYqazu7ND6Baprazy+PmQ2XzAbNEhtHe5dTeHuQiZDEImkwlbW3u0Wi1URSIIJ2xv3ODRo1cYcp6BaTGV5pTW8uiZBGGg4CsWxb0r/g//5f+C0aTJ2kqOdDbL/sEuqZSOaZoUqzp6Qqd7USeV1Xlx+IiD7U/oDV5hGAazqY0oity8cYvzMw9F0RgOh8iBzMwa8dW3n1Iur5DAhdDHUEqcXFyQy4Hv5SkXDvjm0ZeUilV+9dlf8fDFr9jd2ONHP/yfUdvwsa0W5XKe6TSgXFohl1slFGacXxyhKgVkVUIFUmmF5896TAY2a+vv4LsBzWYDTU2wU9nn4vIKL5jz4Q8+4urokKPTFuvFIpeNC3zRwHFMDm4dsHBGTM0F5jSFIouEvsRW7T6TaRPZSGPOXBKaju/aCEIGaz4ml80ynfuIosLxyQMy2RKu71PO/oCtvVtYC4fQSfHu+++TXT1CEwQy2ZDHLz0OVvP44wlbmxkUNaTTbPHqVZNcWmVz5QbZXJKnDw/Z2S8z9fooooYqFDDSeSTdI5HR6HcCcgmYzs7QtBrFxBYLWqjI1GplHjz4hnwxR6G0wt3q9+l2+rTqPX784/exF0+Y220kKUt1pUCxsML6ZpHxIMSx/wOMvCVpSOAPWF25ixBIXLaeoWV0UmqAZfVodh8znQRomkQuV6LZPmM88ajW0gxH46jaJ1OmYNc4Pv8tYaCyu/EDOt1Lrppn+Fad7b008/kMIxXw4x/9x/zm0xNaw284ODjg4WWHsCNSWX+GL61iT5KUcknKaxWazTZ6okM6VaKQuUGj/ZDOrIuqqqxW32N3R+E3v/mcZAY8O0WuUmQ+85iMHCxvQKmSw1BWGE86rK3v4jkGqgxd8xJRSaKKOczgDEIDc2GxsFv4zHj10qRYWOXpywZPnn1GoWIgaQJ2eI6eTKOIAs+ePWNnX0MUy4iCRyhMyWUOaNY79CfPWF+/Q7Pt0bqaEfpXKEqGqdkjaVQpVAQkIYftdElr67RaLbJ5iXZL5+4773N5OsV2ZzRbIxR1RiapgKAw6HVJJBwuTpvUcndZKd4klbYwRylsZ0HT7OC4XSzTZ3PbYDwKOXpus/VHCi9fPud7338L05yymA1QFQVVyfLs6SGyUOCrr3/L7u4Ok6GI443JZhU6rS7JRIZ27yWEBrdv3+Tbh78hlUqSz64ymUzoTAdUVtJYzjAybR3kkAQH0+2jp03S0g6d+hnbmyUu6mdsHlS4aB2yt13l+cMTlK5Cviai50KevaqTL5aRQxFNmnJz9w16vTrdwSnpfI0wkEiqq6BJTOw5K6urjJsLJuY5K2s5/HBBIi1RFLOIZCIgIzjkKg71c5dEpottuWTTB8wnIzTdw9BTnJ9esrm1RxAIpJI5bGdEf9CEIEG3d4Vtz8mkqpimydlpnfNgTia9hhCIyCmfSqZArXKHbq/Oxo7CVb/J6WUHO/wV8xFIksDTZ4/4Kan4phtimzKnZ2PWa7s8e/4N33//7wGgfv8TMnfvMn/xIr7RSjEr5lJdKRIELr4XdVkD2I6HbbuR1i12ufr+chwe5UfGxArLrMRl7EwU4xIsseT1OP53sGT8CmL9ZRiGyEvDRxhCGIM9H1wnZsaW5hlBQJQVZDlyoquKgq5rKLK0/EZcPwImnh/p9Xw/iMHja3AsS1Fg+fV7xgDH9/3vsKkRDyvHzOmSkF3+L4jf13U9HMeJ6gVjULocoX93ibSPaqznE681gn7sZvdj7WZ0eOKsSWEZ7A6CIBEKxDFAkRohCD2EMALBUZSSR+B51+sMl+yzAKpiIGjRtgtAEHi4XgQyg1hb6bk+vucwt8yYmRYQwgBRkkAUkaRIAyorMpIoI8symqoixMDWD6LWn2IhRRDGIDaIjEOyJEVA3nNixtEn9KNgfD/wCEMVWVYIAg9RkWIZb0goSMhyNBb2fTHWoi5Z89g44/kE+AiCynIPI/YyjB+GQjzPjzWWAYoc5UdGzw4+iCGBLyEQIKsKnu8w6I/wfUhnk4yHUwJXBGnJzUfiYFEEVdUJfAtJE2LJ5esrPQyhVKwQ6ud4fo6VFZHj04e8KeosQwBCInNVKq3xtPecpFZkbXuX0aDBYiZgTmVu7H7Mq6NDLPuStbVNvvj8MbXKKildwZ63kbUuITlUJYVtyrhuh8dPLnA8gWQijSK51HbTqJpPvyOwu7vPdN6g3YK37/+Uev0Vo4s2oZ1kb6eCNRmwWkrRbMvsHdzh+Owp5sJD8pI0zk9QlQylbBJJSDMZmiDYmKaArEgkjRKaLmAkZGYzgWxRpzNo4AkDkvIN1tdrNFqP+fLLL1EVCcdvs729zZMHXWrVbdTEGF1LMJ5e0Xh+yp27B2ys7yMpDq7f4by+YGfnLqEwZjpL8JOf/AMyaYu//vyfIZGnkDZIF10qyhZGUqPefMJVs0MuW+Kdd/6AFy8/I5/bhGBMvfmCfK7E6fmETE7BFWx8V6LRPmNu2UiGxtmzUzqDJqYpEuo6Uz9BpqjiTxVcyQUhiaH1GfcbCIKAY6ZJG6sUC9s0us+ZjFzyiVWchUmqEgAqgqhTqe7Ql/tkU1lG7hxdTvIvf/5/YrFQ2FrZJlXI8Itf/Wtq+TVcI0l/HrKdActr4eV0/OmMQBYRxTzVDRndUAjsNs2ehlaaMl+oVCq3mJvP8IIRicQaqq4gq1PMWZ90RsWykyRyAovxgrxRxhZc8lkV280yMgf4vYD1zSKuP6NSXqHbnuH6M4SgTLFSRFNtOp0eNw/2CZw56VrqvxcfLpffG1AurA65/Aq2bzHsD7h//2NOz87wJRdHMpBCnfyKjWurdPpH+OIcRc8wmMxwGPHi6CmSFCKpJkEooqg+/ekRvjTD9AyKJYVGe8Jw5KEbSf7pv/ynZIwtNCVDs9Eiqd0gEHw+/UWHDz5RKJUKWLbJeHKCac9J5LMkjQT2yKSa3GGknTB3MkhyladPfkN79JIP996lz4Tx5IxxXyWZFbm58S7zaUCxWCRhZGhc1tm7VaJ5GZBIZPj6wRcYWgk51Lh5a4NHj5+iSBmKuTW6YQvbFpjPztjYKeG5Ep2rPpqRJl8wOD/tsLW1yXgwZW9vhcU4jzk/4ovDX7Kzl2bQM5kOXkDg8e7+fXoDH1ETmTlJQhlsN8SzJDxMfLmHbScxTZ+t9bdZLAJyJRXXzXPRfIiurnNy/g0bGzdJ5Dbp9M7x/Tma4mJbFouGxe5OmoePz8jnfIr5ddbX7tBoPeXpk7/m7bc/4fHDIwpFgV53zHg6xg76vPXmh4zGFuXqCpPxAtcTQVbR0wpYY+yxiij42I6JIAaMhyPOzy/IZSucHHcZZuqIyoRcqoA9H3M1uUDUkni+iGlOEbzIQFDdUBFSRYJQorSyQiD6ZAophjOP3JpEKVel0T9hYfXZyG6iJkLqZ1fMjST92ZdovocgrFFK6Izap4SWxWAxoFAo4zoisuGQSm+xsExsa8hsNMacKehGj2y2TLvdJpWuUCwOWS2+y9nlE6bzOY4bELgrDEbnHBzcpN58hq6qXJ73qK4UGIzqyIpCNl+h1xsw6E/pdcdY9hBBPEcRa2xt3GA0niLqVzx9ckboJ7j3Vg7PLrG/tociCeg5j+ZVh7W8FOvP4ptSIJPUSiysMY32KVetc1YP9pAPj0ndv8v8xctrfR/4hAGMxzMKeR1FFJBTScLAI4ijb/wARAk8XyAMNExzjmO7UURKEIGWwCdm4oJrIBWxfH58I4+c4JEJIkZByw0mGotHsTPLEOwoAF2IzTaIyyZpAeIqRM8NcJ3gWhcZjW9lREFGUVUUWUaSZURBiNtuhPjmHjOrQWRQcawo6iUMopGyosrIsoSmqtdubwhfj1vjET4hiJL02tUdg9TA9yNNaBjEJqTXwA7A8yPN4zKGSBIlROm1ISla53K8HoON61FvQBAudYtxAPySHRZiOcJyzMoyyP511mU01nevj8FyG5dyCYQY8GratQQClhrX4NrB73setmVhmdfINwLPkoQox4xyrHsVRAFFNVCWECzWgqYzydfmmDC41qDKksZkOo3C0r0oTB5BwHU8ZEnAC1wcV0GWI8Y0FKL2HxmFUDAhEJcCkO/EVRFfJx5hKKLKMrIaRWhFUVFB/D0CkioiSSrT6ZT5fIKqGohC1DTlmR4gxVnoQlQvGkbaYtd3CZCQw4g5vabm46U/6FDJOTx6+i/Y3P+E1dIuk+PnyHJsDAljJ74XcP7K5j/6m9/nycm/QXEERD9BpVBkOplDKLGzs4eiOaxvrnFy3mAlnyJt3GBrXeTqqk6xcMCLsz+nWFrBC4qkdQvRFlECBVVVGIwdtpIbdBYdCukKzf4xlw97lMq7uCv7dIfPsN0Ec/uIanqTyprLZefnzNwUO5v75DUdJS0hFCqEgwbnow611QrOUKRSqWC5HTrtDh+//z/GtQz29nZ58Og5j87+BevbVS4aLYpZkKQyvd4579x+h82td/j620fcvVNCUwoElCnkNXynhud06XVM0uk0qYSGKBTIpLqkkyl8P4lYCRAlG03Lslq9BdIEazFCk3cQZYPJ3CFTyFNZOcBezBmPpmTSZWYTj9raKrdv7PD81Zf4+CwsmXROwzQndPsmqWSO1VoNz/EpFGsQWiwWAaNJnaxdorpSwLUERr1Lapv7THMuOSNNQi+Sycl0Li8o62vM6JPOGYz9KcPOBEGuMrAGhDOHYjXPcfOIQjKPl4Lbd9/EwsWbZdm9tc+dmz9hb3+F+bTB00dfctr4K+bdHHpylf7EgiDFvTs7WOMRpmdTr1+QTqfxPYeF2OdVo4E1lKlUtxnOOtTkNfSgwq13iqRshZeNQ9pXbfKZNWRNANXkxatLZrbMxk4BZyAymc6REFlM61y6E7RkiepanhcvnrK9uQOYvHxeJ5dPYrnz3wsjwr8PQ2mv4gk62oqEZNrUu89xvTxiKLG7k2Y4auPYOpI2JKWX6PUjjYPl+MjKgtAvU6qUePr8K6oreVZ3cnz79XOKhVUGIwfPtBEkkTCYIIgBV51LrMwIz40qvbbWArY376JqKcyFw9zug+ASBgICKoGboj+8IrBAM3RkfxPbecJvv/xXrNc20GfrfP7bh+zsFvHsFKvrFc4vX9G4/Jrt7R0c4YL5YJVh38GxJBRFYDxpo8p5fN/FdUSmMwtZFfA8ITKruDZG0mQxnyCqMrqeQTOyhKioUgpVO2e1tsskaWB5PnrlECPIcnrV4uTURURHU4eoiTnF5J9xeVjHko8or23Q7I2ormoUc3v89rNjVlYU5osFiaTOcHjJdDzDD2aYiwDJS2LOR+hqiU5zQqGQwvYv6A/r2M4Gq2s1bAdMS+Sttz7g8PgZo1bI9z/Z5MGjAcWqz2DYxHTHbG1u8vzFc4azIwTKWOZv0BWNi5dt8iWZtJrg0ednJLI2oeBjGAbVHZ/25QzdkCmWS9QvmwzGA2YOtC9dSuUMTjBGCFK4YpfVlTKzuYvtmAx7XTYrH+GKU0azFo4rEmLTH85J6TXypRzppMVo0CAcZchXskznAvOGyU7xQwKtzYvnDTZ3dpFUk4V1zt7eezTrhxhhipymoWIxMh1KKw6GvsLZ8YBqTWEUWjSvnrG1egvbGPP02RHlwh7zRQvTOSYIyqSSBoHnk07kaV1aVKvbDMYtQsZoyha6ETKZtem0Fqi6zGRWZ25aTCYTQkHm4EDk1em3uG5IOpVD1qYENjx9MiWVPmd74yaZrM7/+//5CxTd51ZyE+gu4Rae4+J6HhlNQ0Kj3jhidWUr+kxKUjSSFgGi8OcwFAgDcFwnujGaAZKkRONLX4hia1SJwPSQVR1ZknE1F8/38DyXxcwklRbRdQXHdfFcmE4WEZslCIRB7JIV/GuDymu2LdJKCohx/mTwu6xSKF6zQNdL6Ec5iQIIokJIeP1DKQg8AjzsmRmtM1pZVOl3HQkUsYYJPUHSMCLN5nWdXwSW/MCPMh09j2XdnyAuGUcNURERpfB6s4Rr8CcgyQISQjyKfQ0Krzf/OhYpjAGnj+dHGkzHcQkC+xoALvMzI1OTELGBkvIaaMZB40sG+Rosx4ywsDyOMchcHoNlVM7S9PJdF36UuxnrGuOxfqSPjcCXKkV1lq9jpsL4QSZypgd+gGPbMQANrrclCsCXIlZZklFUBUVVEEUJxEg2EAFOn3xef61p9aO2JN8LUBQJWQZzPiHwnbh9KTbsiCJZI8lkMo/WGT/IEO8lElh2SBDICGKk51zKCAQhkixIoojt2AwGfcIwxDASCIiYrkMg+GQKGUb1eUw+RvIQP/AxdCU+hj6E8nVk1HcX3QgI5DbbWx9wfPoFYV5mCzXWzEYPBr7v4nseG2s1drdq9HtpJtMzHLuMXpwxH7bZ2asxnfTotrqsb+6RS6tU1ldxFiGn533y6T2E0EdyqlhDhXxCQ5F1PMmncmOdh198zo2Vm+ze7rOb7rGaXaFYXkOWCpwc/ob5NwKnE4dkMs1acYfG/IqKl2Rq2gi2zmJUR8samPMenjXHCSUyKWhfTNjY3ARHRPAUklKFr776GklI0Wl1WEwXvHv7P2Oy6KAnBSRlxLOHR9ze/xglGXB0MiAQAsr523iOzvqOyF/+5V/geia333iLq0YXL+wxngWEboZkMkcY+jx/9Tlp4xaibNEfmOTza2SzVc7PL3E8m3ajx62725hWwMXpCYIIpvWKrbW7hIGLKLu8ePk1Se2AZMZFlnRUTWQmjwmSAQIqw65HKq1guS0CwaIzmFJdyWBoIf3BEHPqsXYrzaw3pJKt4mJyfnVEq+OAmMWlSS5XxZlMCd0xs9kCI90ik1vnot9jVu9wddkld7fEoLGgWNxCkocIis3V6SXoTX7xxSWnV18gehqauKCU1nnjzg6lmcNwfMXlxStEJ8vdOzcxZ10CX0DVCiRTBpPWGaWCxnDWYjoKGU5sSitgH4fcuvF97t19i4cPnmH6JqYloOgB04nCH/7kNk8eH+J7Mm5Xpt5tMRHq0E6TUnP4633Chcfzl+eU8ll0WeLlq3P+xk/+4PfCiPDvAShzqRShAL6TIJe7w3n9MZlkQDpdoH01ZGrPKRVStJs9koZH4KuslG4zmPTxELho1DE0mQ/e/gEPHn9Lo/GEjFGm15xSXU0xaAv0+g1q6yU0sUg+4xEKPusbexzsvcWXn31Bu/Mrcrkci4nOvft3ODp+ipFQKGeKrK2t8bM/f0C1JtHoniJrCaorBwTuSxb2ET/4gx/y619/iq4XsOwx3f6Aavk2VvaKfCFFpyUQim2SWZOj45coikIQLrh7+yN6LRu1bPLs+QtCcYBmePiSjZ5IYxgGl+cjttZ3aLYGJDNzZosLyum3MZQmo/4Ax/G4bDxGMwKkYJNPvv9j/tV/8wtE7RXWLMHeXpEvHvwljXOV++/v8ejxZ9Q21knqWdpXx+iqjpFMYM0DNlZu0GnMuOr+GgKDne0Duh0bz07w6sUptcoBnc4h+VKGcn4HcxExIHqyQrl0k8vLM9xwgRfY2M6cSqmKYQ1ZzE3yRZWTs1OG0wvWtzeZzWb0eqdIoY5m+JhhDi8wyVez9DpzREFgc73CybMJcmqIGCZotC4ZzwIuGn3S2Sy2CxOnh2kmSGcCMkWZb755xcH+Nqbp4Zg6c7dB6xyqa3kuzq8IZZHZzMQw4OXxGevrBXpXUz5888ccn5/Rbj3jJx//DdrdEbPAY62SICdnSCdL6EkL1wwwjDz97hWvXj7nw/f/FK/dp9nqkEotKFUqnLxqMjebaJrBSXjGaNgjmUzSvOpxejTmzht7dFoTjGRIs/2Iezc/hiDDeLjAMCroK1k67T4PnnzJ6qbGD7/3Z7Q7F9Rq6zjOAE3PEwhDGhdTkukUg8lzesM6umqgSE1OzwLK1STPHk3Y29ujul7kov6SxaLwGrSEAALzeZtA0BDQaXfOInCCQOrjjwn+8X+NRNT8IQiRK9Y0bSRFxnMDJFEgmU4R+D6qqgI+tuUjSwkc18HznHh8HPdUCyKaLmMkNAQrYHW1zOHLBrbtIIqRdm6pJ4yCpUUc28XzPAgVojZEnzD4jt4yFImSX4KlovM7o/JrapNlzE0Mv65BkCyLgIwgRLo5KX7jMAjw4yrHxWwWaTSJDCqKrKKq0S9FUVF0JQp4j408Swe073u4sTnodeA58Wg83gIhMnKIgvDvgAsxDmBf6gZFUUJVlwxieC1dCEOuDT++H4WYu24Moq6B7PI9xdeO8fg9o02KkOJSP7l05C8NVsvD+XqkLrz+OzGjGesUPC+I9H7h6239bn6nJInIioyoitca0iV4DgP/d8Cq57q4TqRjeJ0bGo3ORSmq4VxGM8mKHOtoBXzfJ/ChulK91rIGfojnR050SQzR1BDHXkZW+TFLGb2/5xCbveyYGYy1l8gszDm2beH5HqqmI0kKfnzcIkY/ZG46scY10r4uBZxh6OM6wXVv+TKC6ruLj0xSynI8avDujf8c32qSGiVJJVIwGseaywBJUlEUheblBcXkNpqQJJBC+oMerU6dTDqNJlR5+81bdEZHyEKC3uWCSjVP3+qgFFNctedsbN2g3jimml4DMaT19JfUr3Q2awfs39RZ2VOx7HVcN8+rekjrRGUwe4GjCWyv3GNivqTXmlAr38MQJVz5hE9+8A7ffvbXFMt7VNY/wrTO+PpVA9+RWF03+ebLT/nwwz8hmSoTBG0m0yGEIpOpSCKpMV9cMuj32d7eJZ/dxjsIQOjjh1WERINiQuT48iG39m9z+LKDb+tUallmsxnVyjrz+QxZdXny5Anf++CPOD07QRbWWdkQaF4tyBeSjIYNep0uyWQaSbZwfQt3rnHVfEDK2EVQOghBhWQ2oNef47k1ZtMFG/tVHK9PiMNiIZErJjk6vKCQW2U6bWO5HoNhh+3tbWbWBa32mEwaLhpPyWbXsU8TqEGSQj5Ds3OMkTRQ5ASyItKrn9G7tNheSWIkk9T2duiMRoxGfURXYGLZvPPmO0ydDqO2iaHNWSm7dEZt5osxrtvFnom8ceNtOoMFG9WPEO0Jpu1w1HxORlklVHp4gs2DF1/y3ltv8OTJE7q9MWvGPonkLd68nefhUYtQ62COF0xGOvff3uPBN79BdfOUahpuOCLEYXgl8b333sUcdjA7Lmv3yhy+esViNqe2tkuyVsGaDzg5bpDOVSgnShQKCWbjCaWKweMnx3z03n8HKPzvWH5/QJlZZeE2WZgTAnHBjYM7jCZNkskSuiawMBM0Ww3WqndRjAH9YZ3h9IhkMsXDb7ssJj2k1QLjrsqH937I0+efc+v2Dq9eHVPL7lFMWKhKkoQuEDg6OWMHy7W5ao7xg1dIWogmhrhOltJKks7gIZVqkfOzFpPJmHr9grfefiseQWXozH9OxqyysbrHfDbEtQfcvr3D2XmdTCaJKEJ/+JxSYYfZxCeRUBHEHAEjZCWFLGZBMBgN+2SyeVqdOoqi4HgKV80zUpkClWKBfH6NlVoZWcyxup6g3RqgSAbt4QsSCZX6mQ1yi4yxQ+NkQC4f8PzhS0rFkGL+LXzbYHPtHqHjsZVtMA+v2Nu/x3Rm0Wy0qBYLFPY+4eK0QW2lQqs+pNXocOf+92g3HNLJEouMze3bb4IEP/vZbylWFCZTlZXVPKY9YTgak5Dz/OWv/jGptIKulrBCmccPzvBCE8FfQVTaIM0JvRIfvf/HPHz8jPFigmUNSMgrjB0PNRswGIRsbwqEik8yKWJ5fTxhju8pmLMmzasB5eJbvPGWwen5MV6o4LkSzjwkkRC5Oh8BFk8fPeJHP/6EYW+Ks3DwEyWaTy+4cXud0bhDQc2TSSuorDJszlDVLB4ChZqHnl3lqn9Ipxewsb2Nbw6Yj2Zk1CxW4HHU+Bkb2xtUVhK0GiIPHh8xGdaZjeHG/RFi4BBIfSbmmHCmsag3SaVDjCBJKPiksgqHxy/QtCT2IIHjGhwePSWfz5NKVDm/uEBAot1uoymQ0HSOXh0S+jqikORge4NUXubrB39FpaagiBkmk1VyGRHPtVCFHJLURBKS+ILH0xfP2dnYZ23lDSZX7evPXAh4foCkJrFMiVZ7wPOjL/mb4T8kJET9/sdk7t1m/uLF9QtEUYi0kQiIinw9/gwRcb0QTZPw/CjMW0CCuAc8MngEUQUgYFkurusznY2pVPNcXjRjJ24Qsy8hiaRGuZqKetgJcR3otEeIohJvjn99Q/bd4DsMWbCUYEY1eMF3DD7Rd7EMt47u48t2ndfu6UiLGL9OjBp9lnrIMPSxnDmmPbtmD5etMpKkxH3dkSM3ApxKHGgeRdf4vo/nebiuF42EfZ/Z4nX4+XcXMa4EFEURRY40nPIyTmnZZy5G+yPJIiAiKyrLKKalySQIovijpbPc931sxyFcAl2ifRPiakkxDmB/zaa+ZiWXUUh+sDQcvT5W15WccSg91+8cXv9RRCCMgV384msGGkFAIgrEV5S4QlMQrk0r4TIJIBAIAx/Xc+LWHGJpRIAoRPpVWRERJJnpZIYkx21F4tJ1D5bpIwo6ihpEjHssh1hqVAVRjoFegG17BJ4fZX+6HnpCJJXWcB2FIJReG4Pw0RQ5ynC0lscmGnVHWxn3kHs+EEW6RZFEr895CNTKSYphlmD2kvrlY8rFdUaTBq7nogqRrEFVVDQ1zepqHkma8qvP/hl7N94gkUiQ0nVKqSqaBCOrh+fmGbRt8rkVDGNIq9WhWjqgXj8nYWzRHVyycHr0BueYrsOd27fR8hlWym/x6vAF5+cas7FFc/AFnz/5nLtrtyiuFpgEj9hbFfH9BMWtKmk5pN56AYg8fPEFtg+z0SlPnz5lc+s+P/3R9/jq0VN83+ePf/qHeN6M58/blEp5CuUCk/kVk6GIpIwIUdjYTNKst5BkhYXV586N96m3hxSLBRwzoLzX5fn5/4uEsoecSPDsaYuDWzsYFZder0e1ssnezhucnFywMMdUijdoXPaQZRldU/BshXIlieONqZ+PyOZKqAZ8/PEf89lnn9LrnLK/9w6XjVeUqmv0ej3u338HgQn2VOTVy1MymRzj2RzXWyApHrt727Q756yurtDrDcilN7GdGdPZmJS+yd7N2xw/e0Gmtosdjmg3O2ytvUd3MCSjmVSLN1AKWaazZwwnOkoyyaC3YNqbs7F+g+/duUej8RWStUmxEuVDf/XlExKJVW7ekrm3tosqa3z5zZxMOYfneSiCyqsXzxGUNIImMh2BZXVZWytydNFiMAU1I9DqHzEfyKxX/5g3bgQ8PITKnsjgYsSoD4WNDHrgMeqOyaaq6MkRYVLnqvGCdnOKIHoMe02KaxVWNiWcWYi5UKhtVZlbMxJaHl3yqRRXEEKHhd+n1538XhgR/j0A5djqMBw3WatuM5/7dC4siitlZD1ElWSCXptioYoTzOhczEilV9DVEvPZiHv37rMYjFnMRviSh7Ga4pMP/oxffvpzjEQJRTIYTftY3oCVfIZKcR9dK/H1o1+STIFpTilXK/heGlFyEaQOi5HOsGOytlGg15px8+Btfvmbf8LN2zfZu7nHmvtHBG5Au1Unl9OZDGxcIveobdsktALpxEak9ZFcPG9KiI8YVJmOLPJFE8tyUSWH84svCRw1isxZgKFs0Ty3eP7sr1nb2GU+N+l1iyAFDPpjBDFA16bs7qzTuLrADZu88+4bXIUeR89aFEsLMukkmWQFPV/Ec2Ykcipnz0doaoZyOU2lXKbTveTkZMBKIcX777zP8dEp9cY3yKSQpU1WNzI0Og1SqSwvj57iODJGWiBfSpJOlZjMTzi7aOG5OuvrLRx/wt17P+HbL89ZW69Rv3qF5bbwnATFaprnTxasrsHzowd88+A599/aRsLgl39xxnsf75HSNZ63Duk0mmxvr5AuapxcNvEJySez9NohqdQqgTBkMUmQ0op8+NMdPv3FY9yFT+AI2OMypRWTyt4Oxy8GWGafD97/Ax4dfoOmpjg9rGMYBvOZS+u0znptk2LFJpXY4ujsFEmeostJlHSJWs3HnA9AFDhpPkFQt5D1kNqWQehKKAJUizq+MmQ0dljbzeLZJYajDmenl8iyynh4DFof28ujTkQSKYFQukIUIZOv8eLpFUYyIJHMcNE4YzZ9SalUQpUltnfKqEIm+nyM20znE1KJIsgnWO4md25+xGByxKRvUypsoxhXXBzPCSSDtfU9RCkydFimSyIZ0j7tUSnnEYVOHPMTYtoTZvMQ3QiwHJFPP/s1f/fPXrG1fwP16ITUG28yf/Ey0o3FrGAQCniej+3aJPQE84VJIqlg2yauJ6DIaURRwfWcGMxEI1HPc1E14jq9ObKsYC5sDCNAUdRIP3gNLkLGI4t0VsfzfVRFRlEjsLIM4w5D6Trup1LJEAoe5sIh8KP6u6VhBCSC0EEUJNL37pJ+8z6v3TKvgc7s8WOmj59+Rw/4bzGKryWA0Uh3CWARroFlgIPlWITWktVbjlK5Nt3IihKPkiNZgSIraJr+HR3j62WZgxkEAbbr4plmrIEV4rB0IR6/LnWIwrUBRfwOyFuGtMuyhKLI8Yg7+i+4dr9HADcywfg4gfM7esponUuwGUUKKaJyvX/X33vtEn8dL7U0Z4mCSBizopLwugP+9TEOcGN2dMlqAr/DqArxOF+URAzViM+lEAFKlmal2Mnv2QwG3fg6iFt6BOKaUBlZkSKNKpHjX2DJtkah/su3liSJhKGjKAqe75HJGti2hbmwIilG4COEUeZmKIkkkgaz2YQwEK/TDqJnpRBFVfGtIA6Hl/4ddhKgUMlRfzrlk7t/Qm/6HE+GhTPHsW2S8ffbtsNsHrC6eoeL48fs7W8zmrVQUylmC0in8xiajF4p0jztcWPrgOHojLGp0x3WURM+6WwJ15zi2T1UTyctK9izUxoLhdmsy/PDU1qtFmtrdynqWazFKf/F3/4fYKQM6s0naHae5y9fsbP+x2QzC16+eI6qF7GnJqYwoN6Y8EHmj+g4f87o4jm2p1CtvEEyUUBOdfnlzx9wcPAm4+klx+ePKBU2Wd3QeXF4xMb6Np32CNO2UKR71KoGvU5IJbtNvf4AVVbIpd9AsHIs3BlB6PHJjz6m17ti2He4e/t9Wp0T2p1zVHGDQn6NUlWl1QmZjFxu31rn2y9+ga5Vmc9cUnqNnY0DZuaIJ4/PkVWJcvEGrhMgy3ByckSlvMFoHMkcRFHi9u03GIwuMIwiiUSGev0cTcqSTpVYzAIySZ98Uad+MSQhGazfztBp91ldzeEFY0aDCeXCAW/e/AF7+xskRAmjkEWVBU6f/oInT1+xmPqYGpR29hGNkIvGI0I0mu1vyBc2UMU89997h/ZVE9tVeNQSUNwWh2cTVu6lWPg6aXWDdEnGFUUyhkRG2QXf4vTsgp3bSXK5DEgBk55DoZTh0atPyWofMBo0kRdrrFaTPH/xLelKDUuZMLQmuIGG05+RSFjomkFxs0YoLJhNXZxpH1FMYCgqpUQSezplZX2F4aVPsmAwnnTwkOj3HCbT/wAu74U9RiRNKlMgaVTQ9RmWO6J9eQlkSKdKiGEBVRtSW1+n27tCmE5QdIt8dov16ibz+ZiQBEoywTcPv0VIjilUV+n1TW7d/RBV/RbTuWA4aRN4I0rlPCE2qlzAc2eMJwNyWY36sc3WVpF00gAfSplNTk+afPzhnzKZTmledVHlApmcw972XWazCblskVBMEAYCk3GfjZUt+i0H03/B5dUZ+3u3ECXodwfY3oxgAJpmMHeGLGYys+kVprUAQSaf28AN+oxGY2StjrkIaJiXZLNpBqMptm2TTiboDU/IpAqozgYPHzTwXZ1QiEYtgejx4Onn3Ly1T0LepP6shy7nqJRKOEGXk/M5g65Dp3eO/l6WwJb46vMv2brhUcrcRlREjk9f0mouWF1dxUgm6HS75LMrNC4b1GoJZC3F+vo6xVyFud1EU0scvWrQ7DwnYEq+VKTfk2j0HpAoVAlFl9PzOvu3VpGN++hygnKpwHzok07UOH8VcOf2FqPBENGXePirPol0ilBpYy48XDPJ9s19xtMrChUJWgaHj4bk8xoWCRzLZjiYsba6jmvPmE467O+8x/n5MXrg4c/mJDIKtcIKZ9NzCsUM6XSaq0aDWvWCVCHFqKFRKteQhBTDwUtMc4SgZFhfPaDRGOLTpjAXqRTWefH8CX44487d+4iuzGIx4mLcZOGPCYs2Cz+JmBuTyiiYpzILK2A2UyhUdWzbBHGEYIypd3os5j62bZNKaDSvZoiizY29O9hhpOMNcDCSPkZKJKFvcHx6xs3s+5ijBkk9je/aTPuRGUAQYDjuMuknyVdcioUa02mPbFbBmyyucyTD2IyQMNaYL0ak00kc0+PLbz9layOKD4qYvCCySAgighgQ+OA4AZIkR6xeGDCf2SiKFreCRAYbiPMphZDQj2CHYchY5gJZjtzWnh/FoKTTBv3+OH5tZDixbYfJyMJIgGWbSKJKGMUWxkxSxHyJooCRVPFCCz2pockpfNdH13Tc1Q3YO0AQZOS330b75JNrDPlvL0XA/vWvmX322bWB5fr35RLLBJYAdPbkafTFayQoIAgS18U88dh4GaztujaOa12P5l+/JmYjpd/9kSlJkVlIkiQ0TUHTFJbudUIixtH3cTyfMHSvd2zJNr4eEb/+teRpl6PmpWt9GWkkiiKh+tpYFPK7IDEIQlzPxQkClhE2wvX4XESOo5hU5fW2XpuEltmdnhdVQQr/1vhdEEBempuWmZ/f0ZGGIXgBXmw2+i7IVWQlPmYiqiIRKhK6bjCfzxmNRpEbPAwQCQlCB9fzsW2PVCqFpuoEYSTbEEQRRdYQYyApyRKKqsX6Wi9m0ANURaVQTEUa2hiE+37k3p/OfAJk/NBF9CNWOwKekfY1DCVS6UhL+TsVlvG5689HnJpnpGYp5pcquV2HzMoKkrh8GIyAarEqcnT8OaKnkjCqoIyo1HbJ5V1ca0KhnOOznz8ksERu7ryNllyl32iwu7FGu/+YyVDm5t5NREp41pjR9AVhoPDrL/6COzu3UESJclHGWpyjiW///xn776dJ8vy+E3ulrcos783jffse1zM7O7tYYLEACIIEGCeao2hOBEkdpbgfdKF/QKEIhUKKU1CK0PEUijtSPN2JTtSBDlws3O7Ozo7raW+efrwv76vSG/1Q9TzdsyDu9hvRM9H9mMrMysp85/vzNqxWS8iByvH5Ebou0zhyWarewjZGHDw/x/d0EtkU5XSGpy9dZC1Kw7tgbekDkrE8n93/ksX2EplMBlF1yBfmuGg8YzgekkuvIiDhuiF6TGb31RmFYppENYXjWAiiiqL16fTP0dQUxWKRbr/DwuIi23sPSSXLNJp1Rn0T0xxSyC1SLq6SSmscH58iywVsQ8P3HMqFTfL6Pf7Sb95Ejvb5+OMf0Wi9YmfnS9au3ebDb77Lj350xNrSPU5qnxKJ6GjxIZ3eCa4vcfvGh/RHJzR7R0QVFVkWaTVdfB/qjXNkKUIikSIMAka9gOtb1+gPa7gOJLUoZ3WbSlHFxkaIxah3v2D86GOOj/tkQpdAihDKSQrzq8iGj1nvUtKeIskbDOQkyVSJhCbw9MU5hbhIIGVYnF8mEpM4a3TZnMtz560Bz46+oG9qfPD+KmkxRqvXIJvbwhuNONm7IJWK0x8aGG6PlFyhlI1iKyOilkzTqWH4sJqNE03KXNuacHw8Ro1XWF3RGAxdFD/PaHJBNJ4gpIckqaxvvoWGx+biDUbjAY41YHv/MTE9S+UtjeGgwbMXu2xev4EcDbHb5z8HQpyun7/LO5ZBy+Y4O5/mTObLKUJPJ67lSSTiyKpHt93h4sJAFJvEk1BvPCab03G8AlFRZWSNuKg/wnRqVEobXJu/xqtXr9BjOv2xjiBJ4OUxLIdhr0m5cI0gdBj12mRLLjE1RjpeYpJuEI1C4IEiqIg6RGMJJmaLTqfN4txdJpMWndaYSqHM/Fyew70XSFKKmK6iixuogokkN1AFkTt37kAQ0OvYuH6fbKpCLBXy8uUupeIcbtAjIIAgi+sZ1Gs1SnMxAnsN34XVyiYvX+xhqw6VYpyx0cExkky6It985wMePdgjHo9SnU9wcRwiR3v4VplW7zlPnpwgBSGrKzKGKVE70zlr7BONQxBGSaZitNvH/P7Hx5SXVLLZZU7Pj2kOd7HdPtnUO2xv7xAEAcvLK/T7zizyw+dkf4CechkOHmObMpl0lJfPvyIac8gGE17tn5KMFylU5lHENEHYIpMr8Gr3mFAYEEQyqGxy660cViAiRXxOzuqkY/OsL2fJpPuYRki7uQTKAMszaNS7NOs+CysBARZ6Ikc2JpNYU9h+1kKWh5wcDlnfWGR1bZ5HT74gk4tw651rNM4bjA2Ls7MOQSBijm0adg0lrHB22kCJWkxG0O30SWRcxFBEFCRqJ00mvT6VuSrNmoxvxgiNIYlECUkrsXd0TCQfZeJKbJ/0kCIOvq0Q+F0yyTKd8xB3IqLFDEzThw5EIwmODs+JJQQ++Mbb9JoWxjhBGEiMBw6xeIqd3TaOPUQURfKlFFFd5eCgSyodoMUVvnr8Q54/PmR+KYkYCkCKdDZLr2sQk0tEEzadjocodzg/OiebzzEZcaWJEwRIp7KsrJQ4OQbH7VGuVt64rV0uEVGYurIvWaOpJEzAdixkUZ4aIfwQVdEQhQjejFWbfr9IGHooyqzP2J+B0tBFjShIooqmu4hdiWmwuE8YighiyHhsIkoqaiR6Nfq9MkjMQsiDIMSYGChqhLFpQcxEWtlE+Rt/m8gH35juyZtul+mEmClE+Tq0jHz0EZGPPvpTr1NvHpU8YH3yCeOffsprQPB1jvESdE7ZOmZVkf/h7wUILsfAs+X5Dthcda9L4pRFu+zvlqUpUyep8mtAFoYzzeDsjx/geTPWb8bSXY1/xcuR9mV8EVOpwteFtlPMLE5d5hKXGUSvj+El0AyCAPsNp/rPgk1p1l9+CTLh8nycshReGCC4/pUe87I55k2WVZTeBJyX2xIQBB5hKOB7/jS8PQyngQBBCJdj8Zk84TKE3vNCorpOpTKHaU5mAH3KHrq+jz1rYgrDEVNtpYQgiTMJwyUDLCHL03SAIFCIRqO4boCqSMjJqcQhCGfjcm/6cKZpGn5wef4GqKpyxXYDZPQ0xcJtUNKU1xX6RpuF9DyKug9hD8QQSRJonJ6Rf/cGqlJkaDYIbJfGWR8tMWIydHHGCe68fY9XLx5Sb7XRFJeY2KOYvM24c46WcmjUD9jceJdYtMf8UpyjPZ+/91d/E79Zp2uMCFVoD2qImkNohzx4/EMKCxW6rTSZcsj8fJGTMxs5USAlqChKwGDYIZmaIAc6h0fPkHMfsFLKYtlntDoapfIcoDOyG2i6Sjq9SLc3wLJFUpky8VgauRhlvnIDj33wNWzbRIvk6Npn7Lw44ld+dRkl2qM3bCEpDiNjj2rxFo5lk0ikaDRqBEFAPC7j2SFaJsbmVplMW8U0Buzu7rJcfY+19U1Kv7XM3sFTLHOC4QYY/R752G3y+TjNdhrPc5hMIqytLbF79ICL+v5sImMR14s0W/sUiwvELQFVTFCrNQl8F58e0UiSo4MJbmAjCip60iAeTVDJXOeje9f4F//y36C4Cg0usO0cF2YNwTMIZIkdY4/h7jl/8RvvY5p1dsy3qVSjHB7+lHFPIZkxCCMyzdYpityDnkw2m6Y96nF40iCffY/lYgJX6HB4cEwhvcHu8QusvseNrets7zxmubBFLL3K+eGA5WtZamc9xkKArMLa/ByNcYdQydLeb9MaT7hVKoAfxR1bVCpx7LGK7IW4gcnB/gH9+pAgzLOz84pQkjDdKKVMFMnwOWkfU0jrZHUFc+jQr4uUC/N/6vX2Z9fPDShFTyWa8UhJSSZjuKi3SKcSJNQUoidRa/fwxCPUaIFiOcXJYYNbN+/iTCJ88dUf8+2PfhVJDFBUeO/D93n2sMXLlzuoqk+7s0enW0OLu5ijGGl9nXwxxunpPutry4z6HuYwSj6bY9TzyeVizBducnrSxA77BOGQWEqnde6RzWaJRC3anSGFfBzLajIxY6yurtPrjzk62UGgTySywKA3xpMchoaJ73rEootsrlfY3d3F8RSub37I4eE+nXZAIidj9gfEtDzptEpErCDyAiEMScZE3n5rnVAKGAwGKFGbIQo3tq7TG1wwHNZ5a+Ud7EmLMBxRKc7z2acP2LyeZW3lLgf7J6xtzSMFOXotm8l4DVnv4/seEZYIwj0cV2c4NGg0jpAUj7Dn020ZpDKf4ftD7HEWVYoyGNSIx3VgTDweJxZNsLCc4JOPX1CzDjDtLloiSb1V5+zYIFPs44sTbHON2oVFp3NCPJVmYgyZy25Raxzg2ykiOph+jdWltyhklggtB+Q2kUyA0w3JqitkMy1wsyQTAZbT4fyiTy6vkFcWGFoWiUSM8sI8SeUGzcaQk9M+yWSMdnvIwW6bbDrF2cmQwpxP3xjQbYqEdFHEGHpExJkYRBICy2sprEGArI3QE2liFnhukrPWgGyuiipMGHVGFBdKNFptXEsmFuicn5/x1tJdBnaf+cUKTx49xR1EUFUHPRvi2hLxWBLPHeHLPsPhmFE/hRAMCX0L11MZ9C2SqRi9IaRS05tUMp6i3qrj2B6O5xJN+cTVOIPBgMW1FL4bEJJA032ev9gnkSyjRB0cr48nTOh2fDZubNJud/F9+2sjXfwojdopcV0jkdhg99UJqqxMtYxMDRdTpk6csVGXWYhTVssLfER52rEcBD6SJM+ctv5MDzmrExQ8opoMTPMcFSWC6wWMRhNEwSCWiKKo4LkyoTAFJJIoY5keqXQMSRLxnGl0jSgKhOEMSAhTt3c0oiGIAambb5H4m7+N/I0PucocJHwz5o/RQorR6JTxZIgsTdv+EtlV0okFpJ39/+AIEi5NJ19flwD0T0LD6XoNOn/KZVzT+NlrZnNKggqEM5f1ZUbn1XVxpoW8tM0w03wGQUBgezgzMBbyWscoivIVsybNIm9EcRrwPv3x10yj7wcztnfKpE5Bmv/G77o0BL25h7PjKbxmDi/ZT+Fq+y950EuGcTqC9rzXJqEpiBWuzkdp5k5HFJHE1+DqEmz6M3YzdF1eA8NwZmqaMovTrndpypvOHppisSiDwWX15uVYXCAIA2RJYjQcElEi03NZnLrHBQmEmY5zuhPy1Ug+8H0c25lmxHPZ4T41yQjIhML0HJVFiUAMkSWRUIhAeKn5ncZFTY1hAeJMrvCmPEAUfAajBpY5Ro2LZNAZtSa4rkV0dq4EfojgqLTOL1heL9JsnZOOFVlbzvLZZ9soqkYQ7xINNdqTU+S+ghiMWKxe56KxQyqRpt8bUdBLGN0evVaTcrzMN+9UKW+9xyDd4NuL3yB0Bnz+7CcsLc7xxQ+7NDQTPZbkbLLHUmqd5kWLbDqF7aUZdlvEM3kG4x6IcyyVk8iSQ0RP8XTnGaVChXwhQadfI5WK0GidMDefRwjLJFIdQqdMGIjYhoZtBPj+iOevHnFz45fodGoEQZfAD4kkRhydPSOTSXF4tIco+MS1LK41wQ9sEFRMq008rrK7f0I+nyYajXJ2sUO/N0ESEpyffx+fY77/gzGhqzG/pLOwmCIqSEQEDUF8wfaTIZligVeHP8VzdWoXFtW5Ige72ywsLBMX8gxGp4wnA1xvTEQp0LX20fUS/X4fNRqyUt2k2ejiuF3y2RzdvkVWl+k2W6RieQqxLBMzJFm5geoPKceuMx6piEy75Ds3izzRIziDLSzaNJ4ekIrOs7Y1z9neMUF6TOiFeFKAF+5ycpwkmdJJ5ucpVlN0RjuYPZmIkEcIethDi8XyXQ5PHlLMz5HSJIzRCNuqs/d8jOmZJAtlHn+xRyKeZuAMCJ0abddE0xVa9hjFVhCUASdHXQJXZiiMEaIh8cwcSszHsC5ouAbuyCUZnccgznG7wVplFac+IisvcLLfoliOE08rf8rV80+unxtQzi8ucXh0gaQUSMYEXDOCZzoc9c8w7AGhpfDu++/S71h0L3awuhLm0MAcidzcfI+TvToffPguFxdNDl+NSGkJND3BZCShxgrkignMsYQhddFiE7p1h2Q8g+t1KJUVPC/P3l6NTC6OHOa56B7SGo5RIiNUJUa73UTVZBRVo9k7Z35dwxhKxGMirdaYvqgiyDbp1HViCZ9uZ4KWyTIxDWQPtLiHaXWIaQtcv3aX0biNpkfwHIW19UW21jfYeXXA3bu3ESMTHj3dpiIuE49No1tcz0XVWtR2WkR10KMRet0LKtUchbkknnRG8zygOp/HNg1+4Rfeo9E+5KR2gpYDY+Thu13scMDilo6qLnJ60qQ3foUaJlBkmX7/nFwhju+JiMoQz1URZQtFjfPhve/xT/7pv2RpTcdX6qjaEiV1AcM7pjueUFkqMJfJ8/GXTznaP2HtznUUXaLeuGBpI0ZtUCc+r/HutQ/Ye3ZIa1jj4vw5vh2ytFbl2asa8+UicSXG+f4uzcExsXQSKRCRo0fo8SyhVKZvnBHRkvT6Tcr5VWwr4OSoRa68xHjgUM6sU8xWmQxHrC0u0OsPUYoqcuAwGNrEkhH6jRBZ1wjFEfYogqYo+LKMiwu2Rb1eZzwMuXFzDUkakCslMZ0GoWNgGnH6loOq9yhJJTRNw/MnnNY7RJUi6UQaSTKpKiZqJaAxnlAP4gwaNooWEhFthp0xQjlDKp1l3IpSb46I6FFkPAQU/NAhDGzssYwXCLQHB+QzFaKJkM64xsiIcHR2RCgYpLQMQ8PF92xkOcPWtbcwDAsEl1AMSaYqrK0s4I5lVLlLoRRDEPqzT50AgomuFclnlnn85BOSiSQEKldFccLlODe8tFZMb3rBFGQKgjhr/GAWuizNYm2mDml/1l08HZk6eN40CiYIp13KriQzGVtE9QhRXWHQs5BlifDq5g+W6ZFIRHCsad6lKKpcxvyEYYAoygQEJP7yX0f7T/72bMr8evbbKekM+yf4oceT55+jnDmcHJ6QLyiYAxffjmJK5yQSC9y99RtYlkGxUJjW6bk+giDhhyGG4aJICscnJ2ysvsPS4jrq3sHVNew/DEMh+tFHRN9gPd8EmYQwfvac8fOnXOVtvrEu9Xxv/ssl4zoF1iEIs+M1kwBcRuQ49hTUTVlYEUmUEaTXHeTTWB5xqkvlcjTNLG9yyqw5zhu5mDMg83qM/towNP3y5RkyBXqXDT7MDDeyJM+eAb6+k2+Ow6fu8Nd6zEuzjjADtZdM5+Wo/vKAeb4L/uy8DLkyBE3jhd5oogmZPhzNRtAIwiyMfwYUXQcCZg7z8Gq/puB6BvykS3aXK+PSle8oDKfNP36IH/rA1AAVjWoI0nTkLgCCLH/N0CRLl8ae6WtVqmnkJwaiH0cRdOqdHjknJPD8GeM/Pb7JOY2DkUNsVGe1vMawdcHnP97HDX0icQ1JjtOrKcQzeSzVJy0WGXVMCrktTKXDcc9CiVsoMZW50iKfPPqKmmfTef4IfwjF5ENido+DvefsLX2AXPGRSaI4Ud7afItGc0guu8Dzp3vc++YdQro4zghdF5FFkaigsbV4jcALGAxUPnz3zyHrAw4Oj9HjGXK5HO5EIBpzWMx9h+fbX4KaJBaJ8ez5T7h2/Q6/8at/lx/+8Adkc1PzjBcoVNjk7GKHiTNPNlVl6DzECET6xwNK6SVG7Ta5TBLPGbG6PEcqm+Hg4DFLue+QSpyhJQo0e0mOznss31yivKBRP2/y6MVT1EicQHQJxAmTcZuVzV9CCY+xhRdYzoD+XpZKcYFCqkizbjAaNhGEAEHw8B0L044yn4+zkE+ytfwLvHj6CBWD41qTueoqC9k8B7sdSqUEzw4OCGIFAlcmm8yys3dKr6exPD/P8f456bxNv3XOsO8Thh657DyaliMQIxiDCEFkQqeloCckur0GrudTyKRRNJlkrIqouAy6URaXEwz6I46OdwgncGLcZ+HGHbzegHa7gSQojHs1xNQc8UieYbNDJA6eMCYqKchejFTcwRxLLCQ8YoUoE6PP9kOb3Hwcc9BFNLNM7A56tII9cVBlmVgyzng0IDZS+d43v4OeKPLs8b+n2RxQvp4koedwXP9PuXL+yfVzA8rdV0NavQ7r1zXiiTS9wZCz0xoR3UZEYnVzWvekiAliWh5txSIMVLr9c6IJHdtxefLkOflcifPaKxbnlrENhUJBRxazPN1+xJ/91d+k1xnx5OmPuL31IXpc49HTB8hKgnxaZ2F+EUmG8dhhMBwSVWOMJm2yc3MM+irJtMB4PMYcK+wPTAaDQ/rdgLfuvo0nNfANCAKmtU2hQSKVJBopkS36PH70gkJhjjBQODt/SuAraGqJ3/qtX+Hxk4fcf/Ql127M0WxP6Jk/oVQusf/yiLAY5db1b/B7f/C7zC+nWF1eo948ZHlVY9CMU6+dkdTTLKzGmExGDI0O83N5eu0WlcIcqfgSFxcDdg/3yGczeJ6HHlPo9BooqsvGps7zxw3WbyTRYlUkxaXVaiIrPtXFOBFxmYvmM8bOMwKhSzpTIERClbMomslwcMqPflinurSBFPSxvTbpVJ5mq0vgxJHcAvXtCVLKY3GlTLte43DvkLfe/RaO3cMzFNrtC1auyYyaXbrdKG7gUa1uEE3aOKbNQvlbJBJlfvrJZywub3Jyckw8ukgmk6HeGqIgUGs8pVcbIwgKB42vgIDAbjLomCCBm5VQYlPn33jgoCclLNdF0X0INUajGrqaYtRRUEWZWFRm59kx5XKa69dX8X2FsVnHt1TkSBTb1DmuHeKaKqqSgtBHUEQODo6Iazr3azUMe4QTprACSKVjRPQEF8cNEsk8iZjGsKtSmZfRkxUOTo+xHYt0RsN2HWQ5z8TuI4oyihrH9xVGExvbFKmbDUzbQFN1oukiw7COFpVYXKjyfPsxo4lBpVpGURSM0ZharYaqxKjMzSHs9gFhli8pksvOoUg6vuSyvrlOKPYIBO9q5HmpYRMEacr0CVNtXhD4U6YgEkFRFMIgwHF8PC/gagQ5Y6Y810WNiCSTEUzTxfdd4rEYhjFBj031R5IgkUzqjAb2DAtegpQA03QIwwRqRJ4xZZej0nA2Ag+QV1aJ/s3fvnJoAzTyCg+e/C47f/yc9Y0oo0FAvX5BPn2NZCxNt7dHVF6g7+0iCym2D37MWf0Vc3MLfP8P2mi6TC6bpF6vI6sym+vv4AUuF7XnnPX+BXfNX6ZafIfxyMR1Xbr9Pqbl4tkqnhlw/dodllc2iBwc/Ynr3ZvM5hXA/PQzJk+eAODu7WE79kyeKXKZAfkaIF52jIdv+IpmAEWc6mPF2eT6NdD1p85sP8R1hSs5wnSc/XosrcjKLBpJJjLL3bxk9KYGHm+mo/RfA7jZePqyVWg6Hp+BMEHgKhxfeC25eD34n2ZOAsiXRqnZCoPZnl2eS55PGDhXzCiXMT+XIe/itP5w+ounhpcrXWjwRkXolVFKwPMC/CBAUVVkXjfpXG1n8Hps7bouoSNcymhnOtXZCH02BpdEEUmZvU+CijLdkenxnj00vAkeHcfGHg7RggBmxyGQPBQ5D7aHN+xiBwMaxlQ/HIZTR3kYiFycG5TuVHHMLh2xCL6Hnsrx9ua77Jx/Ra/f4jvv/yIv98Dy25TjMXodAzE+4WDniIWVNGfHdSJqlkFvQrYg0zh4gSpV0Qt9Pnv0U64vfptf/Kt/ifO9L3nyuM+dt5aRo1G2XzaIZQT6oy6ROOzv73LR3EdXc9y6vcX5WZswDBkOx2iaO40q6l0wPO6ix+OkEyVEX0cRorhBh+2dp2gJEcM3MQbwS3d/A3lk8uq4hT2ysTWRbPYmncEJ5viAXDqLg8nQ6ZNLznN61COXnUcUmzh+l+rCDbaff4E9cQgDGWMAYqlF7dwjlxZYrGzx5NljFGUO17hgUBuztrhBz7hAkhMIqs7B8R/x1YMM77z9XY7PcojRMbX6AYGn8PTRK9bW1iiX3+P59iOyiU36gwar2WvU6vt8+6M/S6J0m7/04S/z4Cf/P1q1IfuNBrlolnw+STKR4/T0lHQmjq2OkCWN0I+xWLjOyDijPtymUH2Pv/Arv4Xj1vmDj/8VPiauDX6oomkh5nmIKE6wbZNmvUupkmQwOKfd0vnwg3dw3BHmMEK72aLTHpOOL9Dz6gRhSEwskSip2OGEXqfHxo27NBs2TuhSKi9wcd5EjUyNZrlcjslExTe7nB46dJ4959pSmahkMO7X8O0IcixCLlGia46J6DqlQhXEFvWLx6SiMT797Me4gUavcUxh/haykmB374R7b33jfxQbvrl+bkApRwIC0WVimAxGQ/qDLm/fvUvjwmD1zjyKKvP4cZsgeka/ZbG4uIzjGBRLKeJxFWvisH5tCdvQQLQIBYPhMETVBCaTVyyt5Hj09BGD8SlSJMfByT6e55FKFEikRDqdIeNRm2QyS0xPIoQxao0aE6PPZLTH8uJNwmBMp91D11JY1oRqZYlUTMFyDUadCbeuv8Pe/ja2N8Zyh8SCApJicXSyhxoJsZweF40+htGnXEnz6IszbLtHTNOpXZxwffMm6YxGo1nEEGBj9TqrW1GcicLq8go3bt1gPHFI54ZE5SSxRZtY9DqaWuVwZ4e5SoL+0EYSpy7axeoWQegRy3TIKCmGoxbFYo7t7ceUKmm0eAnPjjO3pJDQ0xjDDsPhAM8Nca04G2s3sd0h3YnF3t4Rb79zg4lpoEUFJNXh5PSQ7qjFwlKeQf8YKzHHxtoatfaQO9eWyMytcvqkxmcPf4+44HP8KiAiyfz6b9yh3Y6Qis8TrSoc1bvkMhqSlcZ1RqRTUbrDPrI5z+pSgd0Xh3R6JyS0KIHQ590Pb3D8/BDHEhlMJgxbYzJzGqX5KM32BXLMolCMM+wYxGJJ7KCPG2QIzCST0ZipMTVDGILltgCfhLaIJClE9DbNpokeG5NMS9RrCv3elyxv5fFdhe74lIxSRU6eowQu1cwvMOpZXChDhoMunW6HJxc97n3jO0TT84SmTaP2hDu3/yxqzMExLEqFFU5qT5lYHoqUxbD7EJhEdQj8BHLER9M9es0JUTlL4MWm6QaNIblccppXJsik4zmqhQoxzUPwEvR6A+ar87hewHA45Nr1m3Q7Q87Oj8jmJRzHodlsv76ZhwGDcRvkEhdnA4aOiRcM+CVZuAJlwtUodtrBfQkBgmBWTxcKMxYPRFHB96dgJwyn/dGCKOB6HolkBM+bMjW2beEH3pQRm0X6hIFPNKoSj0cYjewZizltNXEsF9N0UdXLcfvVMPVK05n46799xaCaq3P8+PP/J1/87h/R7XX44N4v8Pirc2R1Qjm7yun5feYWFvFcDSE5wh6oKEIM31U5Pj5GFGUEUca2XYqlBSYTjXjKY+/oIflCkmQ6gW0ItFpdzs/+De3WgFSxzKu9H1EppjDHCjfvLPD9n/4zvuX+z1GECoFgMugZzFdvsLCwSmT/4GvmoEuAmZv9PfjiSyaffoZjW5fIBe/VLuPnT7Hs2cj3Z9jMMLjij2fE3bQj++rNDIMZuyhzOW6+lCWEzFhlH1zHev07Ea6AonxpEJLVqVRAEmdZipeazUvA6RN4IW4AYeDCdIr9RuA7rzM3L4EhM6AZvDYrTYHT9OuX7u5LA9Gb+ZZXZiHfJ/Rd3EAgDC8NPcEUIIsSfjg9bm/IQq/+YxgTNF3H87zZuXUptJ2lDoigiDJCRJhpUKffEwaX2Z/BLMYoxHBcZEVG06PTIMsZ+hSEy4cBZlpin9FwwGg0pHLvvasMUgHw3DGipLF6LcWr/Z+ydf17hNajN/Y7mB4T5KmRzdIR6JOI55gv5yEwMUcDknqOweiCuJ4jn6zQb+yTLl5j7LwilogShCZz1WV2t1+xUF1hfavCq8cPUHSTsrZA5VcX6TebPPzsAWpGQUi1ebkzRJRi3H7nLT794ocsLS1RnS9zfHzI3NwKuXSOQd8gGomjRROcnda5fmOZVt0mnRMJ7RRK2uXznz5k6/oCe/unxBNRRMlFFtOU5jLE/VXmch4/+tHv0R+JbL5bJB7foNc7RwhkdFllcWGLo26PybDG0cshhWKORDyk3jynUNjgtH6C6ycple4SxvbIlVMIGojRPobhcn7QYL6yjCqHyNYif+YX53j49CeYkxqSkqFVG3Lz+vtM7CEvdz6lNzmmkNnk7rVvcv/+fVaWV8ll8giyRyKuAwKpRIV4yUNOz3O4u8NP//D75NIrXLt7jc33bnNYe4UouYS+ThCMGYzOSWfWcYMGw2GWQr6EoIRIjsZSpYpvw+LyEl893kGmxFIhRy08JiInGY2PSWhZxkaTbq8JoYfvaIBPPrWEa/Uw7CNKxQgROY8fTZHJSwQBrC0uIwrntNsGYrSIGh3x+MUT4kqJ+eVVQsmiXJqj1z9hsbqCGx5xfNQhpkfQdI219CadkzoXDQc9mUEQHTzbpZQ2SesVLMPj/OIFS8V3WSqrCLEW2y/GrKws8858iW985y/jKXn+2e7/iSf3f8Qvf+fv/KnY8M31cwPKs4sG3/nu99jd36PbabO58hGe7eHYPXb3HqGKc1gTFdFxWVxcpN2ckMzaqNIy456IJLdYmNvk3/zr71OoiESEIqWtDJpa4vh8n2anRTwRpdWFqN7C84Zk4mmGQ5dkvIAkeyCbhKGL60wIfJFyKYek5CGUGJkNPKNNVM2TzxXptMeMRl0SGZ3hqEM0skq75ZPJzHF61CCRTqJrSe5/+ZDKQoxyRSOixjk7P0RTC4iCxPb+xwzcgO37Kt/9M1VuXFvk0YNdPGuClFTIl1KY4zweHW5eX6fZvCDwRRaKtxmMmpQqSdoNm7F5yurSIh3jFUsrZer1OvFUyPbep/juhIXFIrV2A58BxolJNlvENHsIfovAG7KwsDCNvSDKtbXv0e6cUigUODluoCcnLK/MMRl5qLEO2WiW0I8T1QW0eIT52FsIkkpSnqAKfaI5i+5ZQOvY5snj36eYL7FxY5mt8gYoAsvzt3ix/XsMRx1i2nU8z6Pfn9Zg9TpdRpM6MRNabUjcrPB7f/h7VIvzCKFNLpdDS8Z5ufMCbzxGS8RZ3Zzjy/NXmHZIBI9yOQ6CghSOKZXSjEcmcS3OsC9g+TVkHWKxAoORhSBJOE5IIh1lbDuMx0dEVJ2RbSFpGqGU5fSsycJimdrJmMHQxw5Fhv0W2XQFUWpxc77EsPMIwjrrpTIruRix73zAycUAa9wlHfeJLtyi2e6g2y4ISQzTJ/B10hmVqJzHcGtEVQ3CCAurWS46NZ6/OmRrcY3Q1YhqEoEL5WIFUZog4VAoZCjl5hj2+/iBx+Jclu2dVxBAMplmcek6T548QkQimdBxrQFuqOK6Y8IwymVkjOO69Acj1IiMLKiMBhIh4uuJ8ZUkbnYDDQNEpkYECLEdkzAANRLB8wQEwZt93+xG7031ZAgehBqu65NKppkYk1kLiojnO1PtpQfRqMxwaM9GuNN4GR8Pc+Kg6fpVBMubrS3x69eRP/zm7FYt8K9/8F9QyCdZW72B+eIzLHvM2rV5avUnTGyPjevXGY8HtNuQypSIxwJUWcLzAm5ev0Mum0dRNGqNU04v9kkk5pHkCWOjg1+HpcU1bKtDvz+i1exQqcapnx7hWypO0CeeSvHVT7c53h8jeP+eTLZIMhPQ6r2kY65weHabtbUtup0e85W3yefmkXf2v3Y9lD64R/KDe18DnQCFL75k8umn2LY9BT5XFORraQKhgLuzzeTFC0zT5tLXDfLMfe/NfmTGQl8iTmEKoqRZXM7sQHP5gOC6Ps4MbE636XUw+qU5SJRElFmPuXhZKRgE+MGsa/1qrP1G2eNsbH7lRr+MO5pFIDF7AAr84Oq1hSvtaIiINHXWSyAICghTCUYYQBhKiMK0ItJzPQTp8ux5/dAEzLJSp8yfIHBV4SgyA61+SCBc5nV6V6YmSZ6yohFFnQFncVZPKYAQcKVWmLVMiTPN7mRiMBz08X2fyPo6qe/98uuA+b19jk9cUvkzTmsdnCDG6d4+N+XMrIN9+jAQhB66bmMHPrniCp65zc72CyLdOJO+T6JkEIst8vLFU87rNjfeWWDQ9QmFAXIshj1RWZm7SyzpM5mYWPYAyyzSC0wKRJjYLoPWPuNalNyKxunhI3qeS0qII4YBx4dNtjbepdms41gGWkLAsTOY4wmaFqNc0jk63eMXf+EXODs7Yjw5JhLNEaojDg56LCxdY9CzECWP6lyO/f1jsrkEZ6ct+r0zfLnE6r11Gu0Rol5E1kNKeoadnQaF3A1a9QaDjsHS3Bqrb63xcu9TAkYo0jJLlRwvn+6QKeQYOscY4z7pRIXBwMUYuhhBD1WJoSgKrjfmx199wsHuLfS0S7cdUp5PkM5a1BpdlhbXaHa+IqZmEfwA346SjRcRCeh3Bpw1n6LIRfxgQlTNIpgRclmV20ubjN/Osnt2zKD+ByyIHrGYR12y6LV8FpbSzM/nyWUTSEqOVusC13UpVLO4nZC7N77N8fER/+YH/4inL+6Ti61gDiQ0tYJtuxw9P+PtO7/IjRu3+Olnf4hIjLlKkZPzNgN7h8++3KFcXCeXjXN2vk8un2YwGBOTJWTZoHZaJx6bg6iNO1JJp7PEQw97PCEacxkO6mTjc1hWn1hK59bNHLbhIssOu8+3iSsFvvWdO6SSWbYPniFEFCa1JtGUzVIuQ6vfp3ayz9JCla45QBV8mseP8MUSwYMf0TLOWVrNMLEsft71cwPKjZsxvvziGbmqQzq+yvPHe6xtaiRiMlE9i2WOSWdsXC+JIIRIooosJACZ/miPzY0b7Lw6JpUoY4wbeIJHIi5xcrrHRXOXSDbJcNIkn6uiKiGOE0FRJTzFZyI5jMw+8biO74QMrD43r7/PydkufuCgKArZfAJVXaTfbdPpXjC3sMhkkqA/aKBHV6iUiuztPySbSxCKLvn8Kt2WycpaGVUzMMY+9UGdTC6HmnM5Ojzl5t0sqxtZfvk7q/TbIq92HzIZS5jWkEzyBrYzZjjeQ9ED6u2QidklKlfpDep0+w2isTVkNYGk2PScYxx1zN5pm0G3znJ1jrtr36KQrOI5Hi92dkGe8OpgGyE3QJBiyGqEaCpgr75HTotj2ucYkwrV8hwvdu6TzoW4ZpFoNEdjuM+k4VFdSPLs6SvK5TQRzUXXVfrtNjE1hi1qZJNxxAUbye9zYynHkqmwVrzLJ502E6vF558PWFl4m7XNIs+evUCSuyD7lDKLRDDYPTDptIfISoROr0kynac3tImJDptr81y0BkiygKbP4YsdDGvAr/yZD/hq5wH+KIkfSiwvrREwodc9Q0+rHOy5VKsZmmdPSKUzICqYTgNJkLGNGJPoiNpFm9W1OSKRGNWqguhLnB/3QYjSH9k0Tg0ypSSimMIJ+giksUYpHtw/pDpfJC751Ns1Mskt8BaZjH/IfHkNVTM5Pq1huGPCiUy9NabR20XTYvi2TCJj0T6ok03ksEyPn37ygvJKiupcDlGRGY1aKF6euJ7ACwyKpTSCJ7K0tIQxcmi3m+gxhWfPXrCxtU6r1aHb6eO5Aql4gVr9HNf1WF2cZzgwiUdTCILN5ehUkaNIaoSR6xAJQPYtxqb7GsTM9Giv2bApwgz8AEGQiEYjuO7Umex7IaIUAsHMlQy+56PrCtGt60S2buP5LoEok5DFKZspCERmI3Lv1Taps0M6HeOKzQmC6VhyPDZIZ6PT7XjDNCOIApX/9X/KpYitkZcwtp/x4x9JLC1uUCzNUWvU6XUf8u69dwgDCUlJIIoJEskjkrEoqfgynWGXWzfuUs7PUTtrIcVDkvEsF/UTKtdW6Y3apBIV3n37W/zkkz8mk05SO+9Snc/jOgaxiM173/k1nrz4EtMMeP+9b7FStYhlBZ7vPOL0VGZl5TbbL7aJJY75+Iv/jrXVGzzd/R+YK95lafEuulqhWt56ffHc2b/S5l2yr1dAc/be/Gm6TQHwv/gS47PPsG3rjX/9+g85OzuMn7/Assw3IJZwSc7xZpamIAozk9BrjSMEhIGH49tvMN8ib2oOLw1CojQFnlwGsjMzuVw6xP0Q1/NmLOXrDMrLvnLxMl/zMotSmN1ehNcVkiE+oX8J/MLZFk63IRQCQH7dYx5ypQV1XAfFm7Lo0/xJ4er8umTpr0xKl2564VJr6WNZ9jT9YmZMCmaRSsEM/InC9AHOs2xGozGWOQ3rlyQJ/cb1Kx1q8Pnn/Ovf/mvkckc8++oBx+e73Lh7nXFrl/p5CllVEMVpE5LvhQiORqO1x9FpnaWFNEo+gUiCrcUYzeaYbndIMb9KuWxwdn7MoNvmvG2TT29RzKYxxybd1oS4XuBo8Jhmu8zy3LeJKQLB2GBu7hapGwUOWq9Yjd5l2BujJWIIist5/QI3TECo8dY7a+wfCgTBlIV0rUtg7bC/e4Znq2RzMs4YiosFLAsEdcgXn97n1375u5yfNTk/q+N5DouZFcoraQLZ5IsvDtlYWyYqeYTGgHwpxVPbJT5fQQ09RsM25ZSGGglJFwuEzpDccpV3t+YJW2fYqshO7ZxKcY6DF3vMLayTzWrkKzlevjyj128yHjtce3eFTv0UYzAhnkkxMgcIERdZCbk4OyKiaZgTkUomwfnFEYtL88R0iYOdIYoSZWvtHmf1R3i+Tas7YtIOOT7cQfD7DIwBlZiAn4KTSYFquYCQN3EsiYhcYDKZYIxkZDlAkfLkUnkm43OOz9pk8mlqFz1urN0kFAKe7m7zS7/wHbqdPuZYpNU/QRCv8/69b3JycoZjqixVKtimwnbjlL/yG7/C9t6PKSZK1I5Pee/dm+wc73JycoRnWHRaBh3ToJRKEMtLuD2DweiETFYhn0oxmYyoN3oUywkmfZNyMUsqlmaxOCK3vMz24VP0SBFHtJCGAxZKJUxd5eBoh7m5NXIVj1H/FJU8WwsamuRwfOpwcLxPJG7QqMPyxuKfchX7k+vnBpSCnyeeaKDLi0iaj6YJ6PI8RM9xHQNdD0kIKySSOTrtEfhtYlqS4WBMIbuGJKS4aN1HVgqIdoVa4xzbMabB6EoBzZPpDs949/0tHDvK4xcHTHomiaTG7sND5lJV4vEMkphgdW2D/nCEYQcIokCrU2dlM0+vI3B8es7cfI6PP/6KjfWbTCYqKdXn9LyB4zsMJ3180eL4KEIqWSaUevzD/+b/y2/85nfxEOn1LARkstlFQjw6LZexekEmu0R/kETWfXLSPLblM+xHCNR9NKWIEM9j2A4efcyJSSyj4Qs2jm9TOzvF8Xxy5ShaJIerwelJn1tzq5wdW7Q626RLCX7w+1/R7J5QXoyQz+cR5ADF0BgPDaRknEppC9MaolhDVNWl33OpFDJMzCbFcoLBKM7Z+TGW36fREEhnYuzt7VEo6YyGBpEwSePoiLdu30EtrNPo2UQ25/jRpz+mTZd8OUeiCsf1XbTJkFhcRpGzVEIVwxgTCir5fJXjs5BQtnn+/ILVtUUM28Jo21wkWjx9+YQ7b23hCykEJUm1EOP86IylDZlycoVMMsPJxQWDvkkYGZPWiihnI5qdNnG1ymQ0wfX6aEqOwPaYK1RR4g6duok1knHMEZFUFGMwolpJIapF9g4OiMQERg4QxJCUkIH5ilL2Fp9+8hlbk0UWS/OMPZvTs5eUJg30mMyT3ReUF0JERUKxixzs7GFaJnoyS+gKyFGV4dBBpkhEieE6QwpFDccQ6XTbZFfiVEpV/ADs8RhFctna3OLpg12Ggw6u7yCrNql0EkH0GY4bOIGFIFmokRDXhWRKIaIoyJKEbU3Y3LiF8JMHXKIK05rguSGD7oT5YhlVFAgD6+rrojQND0eE8A0dnIg0dVqH05Bozw9nzOYUUF6CIEEQKP323yL2t36b14YSZrjmDWA4A7j+P/3vSfyX/xX93ghZkWZ4VsTzfEzTmWom/df8Uvz6NaLf/vbV9n75+N/ijKsE4h6ON2Gh+F0uWi9RZJ3Dw1PSmRwnRzvcunWHpdUM+7vbrC4vI4Qio7HJ8/o22XSGh4//iIWFdRKxBOPRCNd2EYWAly92SSeKxGICimIjSQ6umSKulTg7vkCnwPzyMoKoIER8tl+eUK2WiETS9HtDktEbaHoLVYlhT5LsH23TbAz440/+FXqkyvvv/hIAyXiBmJ6m168hq7C8cJdcagVZjiDv7F8ZYC6Pw8/GHxGC9P494u/fI/6z19qf+fvXgef0q86rV0yev8B27DcifmYObeF1feX0j/TaBS7AVS86PkHgTZuVHCAUZnrQYBrEPhuhX7byqKqMJKrTzb9yhgezdqEAb5ZdycxVfTmKngLXy0pHmankcwoag5nTW4moiBNpNkYXrtz1M6EkYRBOtY+RqWHsjUn8bKw91T16M6AoiuK0clOZjpwjEfXqIYowmJEeEoQhruti2haObWNZ5pWW8zIy6M1QgeDRY/ju2wzaQ1Lx26hJk5HXYmX+LaqiTBC2ro6zIAQIIdy4vsIXn7zkoiFQKOVwBjLdmo8aVTivvSITz5CKpUklh6QTRXYOd5DEAb6n8+j+MZmiRjK+TEy4jSbLBL0IdmKAMezgKBqnzS8RwgJ6eo5ypYVpuQiKSSySYnEhz97hA2p1n36/TuDL6KrK2WGXxYVlFgrfIhozuLh4hWMGDHsW0bSGgIoWiXPvvds0mw08K8J7773DaDzkfNLES4qMBn2kqIYvSYRKlPP6Lj95+CXvvPUugWwREVNUCgVePL1PrLWEktSYSy9z3njC7/zLPTZXiuzstrFCAUF0uHX3DgsLC2xv3+f+l08plCtYZgvD8Uk4C4zdExQnRa6cxQ5HjCY2SwsL1M5rpLQN5OCcev2CQrlIv2fgOj7Hp3u8c+8GB0fPMU2P1bU4zfYh9UaNcmWBUnmZ1ulTLpx5DC+HpQzp9lpIZPADl+PjU+7evY0ipfGCEZ2WgeeKOBOVUaeOOXIolisMRkPiySy2JdIfd5DVFIJaI50t8uDJJ9y4uUijc4QizJOKC2T0Ba6tSzx7/BmBaHF20uCtu3e5/9mnRAoJJr0Jb91ZZ/f5EStL73P9eorPn3yGpBcYGIeYwyTJSIXe4CHxxAq9nklUqhJLC9Qvjun3h+w/3OWdd96jN26A0EUzNKwgwBgNSUoa/VqTZCWPMfSRhSHLy8sMmj0WFkxu37rOv//dP2RtfYHT/Ro/7/q5AeXEOMIPBuztOCTikCtGOD9/iSLHWFhaoFaroYgxCgVw3DHFUo6Li2MqlQoiCY4Pu2iJVQbDIZa5z8bmNdqtHhFVplopMeickNALHO76mMERjqeQTkcI3BH5tEoqmeL8tIuihAzGPSrVZQJRwfVMDG/IzvYEARXLdnF9n2LpJrY/xA9cOt0OqqrSaVmk0mk8e0AkYTJ2v8Qeu3zw/kcMBgPy6et0hi9QFAmjp5GIz7O2FafW3MH3DE4vdlE1hZSeIZqIUOsece3a2whKnB9//jsokkFRv0VETuHZUZrtFqGTx/MgreuMmx6ON6BQLBImy/yD/9f/hZgu8va7G7S2T1jfVMj3t3i+/Zg7N3+BsTlAjwdTMBhRSSXK2BET1zVIJSo8enqfeOIFYlimfjFgZHeIJFQ0QyciZuj2u8hClntv/yKe6WMYBu3uiC/v1xl4der+mB9YfW5UVqhUM3RGNhIulhXSmRxSKaU5Pe6ixqE9GdLvDzHNCHosSaflElVFTk8PSSSj2BOXjz95QLGcoHbaZa4YpdfrcVLf4/S4TXFVJxwc0FNSSEqcqJhgPM7Rm4RE4xKiJ+M5Hr3OCCcwsQdRkjGP/EKB569OKBSjCNKQydAjpiiYE49iVkZUbarVKkTGuGaads0gYITsLqDN+Xz0zTvs7j9DsD1aoyZaQuPm6jXOzk64cysGhGSjeXZP6qRiIktrZT779JRr66uI4phO1ySfTdHuNPF9l1CxccMRsWgSewRmcIDn6WwsbNDtdjFHfXRdxPGH5HIZRkaUdq8LoYzlOHS7XfwgAKGLGKq4rsudW7dIJiVK1Qz+ng1vAAQtorK5ukQu2eCsfk6+kCKblK5AxzSW5ZKu4jVVRkDoiwhyiCQKeN7UtDMNOg+Z5p2HzP3d356Bydm9djaSvVw/C4ik//ivUXY8+v/nvz/7gRBmjI/rhNMRlWshidMIotjNW1e/q5aV2f3RI8LA5ebWd3j27AmKkuLk4gGVeY1K4m0uzo8I/D6KoKCKOZaXS9Rbp/QnDUIc0skyoeijaBah5JJJ5mm3a0SUKoPxU/yoSKcRcu3mHJ4l0hy5bF3L02+ecXRxzuLKBof1F6S1LGcXr3ADj5GbJJRsBpMasjBPrzvCtl0K6Ri3br5Hf3BIJltBpky99RiA+gw3XNT3mKus8/nDf06rOeI3vvefoaoixsQhkYigRdK02m1y+RjjyQBRMSjnb1Et3EIQVaRXe3/yYvszzKb4BvC8fHu/znDauK9eMXnxAtu2vtajfpkFCtN8xSmWfDPb8o2syKsxujhlpD0L131TEzs7J6RZVaUkTSssRQlFVabs3+yVpuz1bBQd+Hju9O+E9pXxRhSZGcgCZOkNJzaXQ29mxi4J/2rkLUzZd1Gcnc9cPQQJAkiyPOukDwlCH8cNwZn+DkkSkWTxqnHHNCwsc4xlm3juZfsP0xih6aMSl5h29hIA+LZHKqri+efce++bXBy+pDuxiEwspma3qaM/lUoz6J8xOSlQSV9HiSe4de0teo0dXnz1CEWbR1USGLZAY3cfL/SIJQ3euvlNDLNGs94iny2RyQZ0W210YY50NMtZ8xnz5RVkpUQQBNQOTnj7G6uc7j9l/to6d9aX+Z1/98+IxES2nw0oV1bptSyW59aotY6Yr9zC916QzkZI63f59jffZ/fgY549ecry3IjHz5/gOkkGqozvp1hd3kBQehwc1ClV5kiUejx9sI1jmSQTCQq5Cq9ebZPLl2g1x2xvP2dhscLi/NsMFQM9nSeTyeGJHv2egSynUSs6X+05ROMyc0mX3nCEocTRB0NW1pc4OmlhDFw8YYJAlEbjBVExgReGyFKEs7MT5uauoyspFqtZoMf+7oDbt79FIqPQbgzptLrkS3G+uP8x2ewi1coWO7tPiaVL3L62iN3rgaXimBm+c+9dznYOqc6VMEwXhQLxmAPiBEmMUJ4T+OEfP2Rr6xqOPyYapkGymBgO/c6QntNkNA6YL82xvX/G3LxGKECnIZIvyZydNcnnN/DdkIZxwsi2KaRT7J0ec+8b38GVjjloHCElFdKJOON2jSePh2zMr4HY4uLIZSG3wUWjTTG/hTE5x3La6OoydhCSLcWIRyxOjyeIrkNhKYPZEjGsNoFgYYxUZMmhOfL58M4W5/efMRjZKBmDqCsSi0RpXBwQUVL4qsZebcz73/2Ao4OXRKOpP3mN+lPWzw0oI1KW85pHNhehWllG8AN6jW3WN4r0Oi6yKKBpCuO+RqfdY2FJIKYnqdcvKOaq2E4fyRZQVZ1ibhNjKFBvHKNP0lw0HhIvSCyW3uf49DGBZ+PaFlY7ztbWHQLpFGM4YW1jk929C8zxmJTTZ2wMOatt8847m8jeApZlIcgHtFoWG1sCzdMkiVQPRcwhqzqZ7ITJxKR+McAvKvjumEJ2A6nap9eXaLSOsF0TSfbx3An5Yomjwx7pTJl+t89caYFOzyBfzHJ8VmOv9oIjcxczgEpZRJcK+EhMrBGDfofx0EWRGizOLYOYYOIdkEglODuvUy0WeOfeKp5jkslFuThrkojGmV/OcPOd72GbNkFoI3oSq/OLuHQ5OH6AMfFJZxK4VoSlhUV0LUn9bIQS8RBdleHAwrInuIJIJqPQbkx4+uIZnbMxYbSBKYNqh+haEuWixrd/8S7RIODJy6eksjlC3yKVFOkNIRq7QIx4WFYGOaIiqwV8o89gVCdbSGOMs+wePieeWMIyAiw7oHFhMoyMSSWyBEKfza0Ca9ey/P7vP0ctFYilPPLxCEe1JoXUCj3jhJieIKEn6LTr6KMEagxCa4QqRhj22/hBCz9MkU7MIQgtvMAllU6jRuP0h1Fsb0g+OU+j3SGmRJir3GBjfZHj42MMy2R1/hpOaCAbLkk9iit2qCyWOLl4wqih0YsPML0B8aiGbRp853tlznfaWIaPltDptM+xLI9ctoATBAi+gCw7SIJAOlUGySWViBLXl5iMHFKJKkrU5+WrXcbjMYIQEosl6fR7SIqChMBkMkBT0wShzcuXz0hlM+jRIu1On8tQ82nTjE2/XyemR1iurtHrH2Fb3hXgmIr/JS6z+5g5ggUxxLZdIhEVNaIxntiIMoT+NB8QQvRrm6T/07979Rk/0KHReUrgCYyHAfMLOWxHwLLHrK++TTZVRt7ZR/+b/wuWTYez/+r/cTX6FgQBw7Cv9GOXt+D4t17H8TTa+7i2SrowYP/wEaW5FCdnu6RyOoeHLbS1Mesrt+i0dLLxIlosytAY4gbLoAi82nmCHl0kl12kWnapnznoio5lH2MYHoRZhFAnlpjw/NlL9EiWWNLl1U6DQmkN0xmz9+o5qmaSX1vB81Osraxj2E1OjhqEgoNr1sll5hHEBo3uY7619V2Go1PksIwk+xjW2devixGfbneAKERQIy1++Mk/QpbTxFIGneYAUQjJJFewTJVa5yErGwvYw58wn6+CFGF15Sair6HFYwSyhYgPgkq312eutEoxt0IkEkPZnWk43zCsiD/DcAZffInx+WdMHj9l8uIF1syFfgmF3jSdhFORI6/tUzPd4+V5RHjVG34JYcNZpE4YuvheiOeBbV2yoJc5l1NTkTRzdU81mzKC+qbucya38P0rk5jjelzGKr3eVq7YVwEB27amtYhBgEA4G69LM9PYTPcZBAjijCF9g3EPQp/QD3CcgMBzmBgmqWSSbF4nDBRsc5rNalsO44n3Buv7Wqd8+ZnzhAGTxilr5SXSuRjl8XWOGm3mt4rIyt6VY30yMfjWh/f4cX+Mns7QbO3w8lBnLptgZf0urZ5BMZFDCgZUyjF0Pc7uq1MMyefm7bewzZ+CW8WeNDg7OeL9txaon+xy6843GLldlnJzfPHih8wt3CQdq6Bu2Dx+9PvY7Q/56Jsf8GTn42kLUSvLrVu3ebHzANeI0Gr2iUQitFotzk//G7rdx3z+8TH/+X/+txiaX9JvSiSzIp6fwXBrHO8O2bxVRVHHOI6IIDqEnkVChe2nL0nG5snmNfr1IbdW1rBki6P9IyLKPGFERNBUBkZtqkcNNOJ6nNP+HvWxza1CGq8vUCjnCIUIZ4dnRLQot29VefG8yfW7H/HwwacslefIZKHfjTDsD0gldFIpBT0SR0sr7B8MSGaSjI0Rzd6IuWqBQUcilVygPxqSSEY5On2C54psZdOIPnRMyFeKfO+dJfqDA+q2yZ3kXVIxOLs4RpITpFNZzk5rlIWAXC5DNKITxWNsnDAZedy6/jZ7R2foEZV4xuPg/IxYLIJjwNraGjuvDhFEBS0Gg16fhYUlDKdF/fiYvPIhMTnKky+ekyvLnB9ccH3jLTTZRo8I9J0+o0mJ5fUc41bAqNmm0z5iFKjEIiqTCbMQf4Hz0y7lYgrfTSAIfVwxztJ8Atft8uWjx2xt3uDxziMCJceqfRcicXJxCHUFTUmjqQnChE9n4LOgJWkOB5wPx2hClUI28T+KDd9cPzegPD89YGm+ghBGcccBqbRGoVAgFkvQafYJnZBUWeG8fgZygOupVBcKNFouu8evKC2+Rb1+xHwhzqMv9mm3XhIpueStEp7j0a7b9OsvKFYi+HKE2kWX73z7Hfq9IREtQHKjVLLLPLOe4DoGo26U07Mj5hcFrLaI6R+RSmV4/733eP70Kc5wTDoDbiDQ6XUpFVQ8LyDwBWQSFNNpXDdGp9UlU4gShgPyaz4HJ0PmUhsk1CQX5w3i6Qhir0Q6UYSohChfcLLXRombLBeXMCYjHFEgOM9z1ArJlQwmgx6qKFFJlijkl7G9GkM3IJ1eIqJ6mLEhE7MBokgoylj2mPxcBNsQ2ds/Yzms4DoB8XiB/aOHzJWWSWSWuHfvLRwTTk53aXUaLCyWefbinFACLaORTukwaNPo9lDVMYN+BkWS+OqLn/LNj+6hROd4+uyAXCXHeKCjRVXGQx/SEdbXbqIpC4zNHodHj0gn4mCvkM2q7B99STayRWjZxBMq+3sjhGBMtzOBUGL3VYeUpiMqwVT3GJFotw6RFI+0vsnzwyPyyzrBBJYWl0kmtnj27HfwnCaxTBrbalO7aDIyhySLMZpNh1yxQrVSpHnWZaV8DYcx7tAinsiCHUHxRyzNl9CGI45O+/hBn2I5R2dosbK+xXmvRjzpEEhRTs9aqLLBaOBTXY0yESxqx6cIoct7315BVkKefNGndD3B0fGYCBmKZYV6f0wQjLm2eJ1EqUjt/ATDV6m12iiORjyRxDVN8qkkjXEX37DYWlqm0aiTzy9jjMGyJMBnOKwhCALxRALfz6CoUQbWgLE/dUgfHe3hji6Y95JXTAmAHYi0Ry0ypQTnbYd2p0Mgv9nWMtV/+eHrHMqQgIAQLRJF1yMYE29mnpjyR5e3x+Lfec1M7kc9/t7/5jcpFOfIJGUEwSGql9nYvIZnN/j0q3/Ou7f+Iz56/8+j7O2T/l/+XXo//jHj58+Ymj9CHNvlsuEEAmI3bqB9+9tX41c1qtDtn6LFFtA1gefPHqKqaTQ3hq4qjCbnrK/e5MHjLxhZXzJfWcZzRzRqY6JJi7WVLWJ6lIOjJ5jWiIkzZme/RiQKrjOhXC7j+V1Oj7tUFyIEfo+d3WMy6SKZVJWVuS3+4A//HauLtzmVPqdUqNBoHSLpEjeu3+SLL37M1tY89foBiVgRLerwo0/+OdlsloPGM9ZW1nHNr/fa5lPLDMcGZ/UxH37wNziqf44/CtDkIjEtJJctMhi3SGaKuGRwxhYLi3MIgkirfUzr0UtSeo6Lkx6iajO0joiKZdL5Ag+emixW59la/DZRPWQ4tgiECIX0EqnkIpqWQNl9nbP55gg9+OILJj/9FNt2EAhxdnaZvHg+jdUhmI22L9nn4CouRwiFK+A07dGcmUy4LAIVryQVCCHhJfAjnBlxQgLfxvemTPdl2D6AMNNsyrI4iwqSUCQRJAlBVDEJsW2b19P5SxArIIohrmthmebMRDbbZ1Ga9cdPM1cFcUpVStIM6IZTQ4/neXieS+BPG3tkSUGPg6qISGICVTWxLZd0OoV13MR1PUTxktV/8x0X0LQEhhCwu7fNnH+bajVGJevw9A93uGY4RGe0qe16NPsqt95eodHrcGPj17h/+BmPD5LcfW8FLR1wdqpg+AKV1QqqEFKey6BHPZ49PSIQiqjRCVZ/wrfee4vqSolhYNIzXRgL9PwhgeGTz2c4PX1MXM3y0dvf4L/777/Pxp01kELS0QoIHV49+pLlrXcZmg3kiMDFQY3C/B2u3XqL9tkBK+9Y3N/+Md2BgRaXieZS1E4uWCiniccseuMuhUqCybiDZCkUqzqlYJHNdJaWPSYWTTMIu7goSLZKKZ9iZ/uP+e4v/BV66jHj8Zju5BBjopLKJokZaZaKDoq8RnoxwsQ6JalVMbURtcY+nr3JvXerhJJDsVwi1AIcP0s0GpLLpGl3esSCZfAu6PY08nkdNygQBA5z+RJ6KFAs5IjEfAaDFM0zh8r8BhlNQtd1Tk/PicfSTCbneHYJJRrn5tY61ewcw94BjUYL0w3IpxYolwoIvoyfanF6eMQolSedLtPpPeL3/vgha4tFpFGMvimip7NIjk95PoKghIihwvWlZR48/5JkcY7uoI5thNx97w4vn3zFO3c+wLFDoqLDuzfuQcbmaK9GMvE286UQYyLQ7apMbJfKzRKPvv8TYvGATjtO5c5NXG/M6fkZMhVSmTJh2kVwFxi0zmk7LsUVnaKyyNLiGuawRrfb4ZOf/A7v37yD7bsYI4dcCro9G7cdJZOKERFaeEgE7phcIoYxGv28MPHnB5SpRAVVyRFP6IxGNZ6/6KLHJbb3mliGwMJcFi0R0H3ZpDwv0Ti/YNz3KSyoTPprfOPaR/zTZw+ohVFKmxUyS3Hu3LtGe9/m8OQxpjPE83s8e3TBfPUaS3ObCKiIchvTUBEclR/+9F/xztvfoHZxjCiI3Lp5m8nYxbBMxKjNxBvwcndEujBPp96kWPVJiHlS2hydQYt6s0G+GGNta57+sE9UVUnn4kiKSDydp9trs7Cwhi4kqR+Miacker0BQjxFJBZl7/grSuU0cixOKPoISkCmkOHJy6eIkQ5SLIsRBpRWrhHYAbl0kfPzF4ysDqJvMNGOqZ8F3LyxjqxIjEcNkukAQQ4o5q/T6R+Szs0hhFHi8Sjd7oCVpXdYXV2ldT6kdjjGZ4BpT3CFJp991iea0ji/aOO8ajG3lEcVVfLpDKoqc7R/TKmQZmv9AwqZa1zUWghc0G259HsN1KjAyxcvUNU41XwR0+rhBB00XURRIlhWD6mfo5hfYjIJ0WMKg7HF8kIZUYrgeiPKiyn6TQFwsJ0hCgqTwZiOGKWaW+MPvv+U/EpASZdxXR0/iHNyNsYSHGT6DAdpIjmVCiLZaIzBxGA+m2RpucLK0jzbTkAyEUOK5Xh19JRELk01v8jp82e82D4lWRKZn9c5OTDQFI/KfIwfffljRn6P79xbJSmE/Ee/vcqda1Gigxgvtg/5Yj/EFPKkkiIpJc4ocIhnshhugnROYdwbMAn6ZLKghVXMwMY2Lmi2e5iuQYiLjUut1cZxqOv49AABAABJREFUI3TGY2TBIaXHqTWHdPoGQrxBKhuhu9MAX8VwPZLJJDGtysTucnx6RHVugXLmJsfnO5iugqa6MKvgu9TgGdaEQNYJnSSW+4A7dzeRhCiXfEkw+35CEYSAyyaU0A9RFYWoHmU4HCOKEkHoI06nmcSvX0P79reuPt//7Hf+SxwM6s0mtZrHzTsVDo5fEI0mCUObbD7BP/jH/wXra29T2lhF2TkgcecOxosX01EmMyPI7EYfAolbt67AyZGu8ns/+IfEkylEYpzWHpMtKLi2hDEeYjseqmrzRz/6PebLt7n/4Cfk0nOsLL2DJD3Fw2T75S6q2mI8sTg82iefK3Pt+hy1+gG1M49ifoVW9yVnF3XSubv0BzXSmRxLyws83n2EJs6TKSQJ5DrRyG22d7ZZWFqh09zFHndR5RQHhy8JwxGJWBFrnABRoDyXozds4rkuqbz6tevi9vMzXNVg9Z7F//Dp3+d43+HbH5bJJj8kGOgIokwuu85583M8IUJSX2I4HmOMR2zv/Yib195lYpq4UouoKqL6JSQxCkGUdEbnwcP7NGvn+LaBGTQR5BSgIskC7976C+hakXgyzkL5LqqsI+/sz8xB75P84P3XbwbgvwEyIcR59Qrj5TaOY081jbOmHmEqYJxCyHAGPsNpgPzUFj3VWV62NAkIEM5G0ML0XLzMIxXEcDqCZ2qOCYIAy+ZKG3l5vrw29HB1Ll2GpoNAEIIkCqTSESJRActyCT2VeFLG8x1sK0CSA2zbQURlPLBm2x38jIwjnHaGBwLG2EdRJFzHwfcDotEYrmdfjdYv189qWl3Po3HQZnP+Bu3zC4buEonqErc3IkSiTRjaMye8x8HJIcXNZSR1jlB2iTgqqfUI9rhDOpuiP77g+uYKuzuHCGGKYiHg1c4FlcUqoigRiYpk01VGfYvHj5/iIqCld1iqrjBsd7l5/XvIosFW7h0EuUD3+BW///1/iJ9JM58KyK7ICFoGozHgJ199RqEq4dYklEgBo37IkeEQm4uiOBL9i5d0xibv3Frl7PiAfruD1T9DTy8iKD5nx9uk8jqemsQZiwhJn/bA5/Z7v8T5yTGVooKrjRn3xrRaLmtrm5ycP0GVU5imiSonyZZzJGIh6cQmL54fYkwcLDPg2q07fP7FMz788NuU535Ku35OsxWjUKmyuXGdT396n8W5CHfvzPP5H54RTWiMnBOa9SMS0Qpbq/N8+skDVtaXMCYSrhBydNrkz//Wd0nFBB4/P2R5eZn+RZva2YSFxQoHx4ekIzfo9M5QjRSk+2zvfcZkbLKxkufktIG+pNMxzhj3o1h2DUWR0GMSzXaX8uIyqfyYaCgjuDniuo+gh+weHxMbaPiBRb12QCw2JleZQ9GijJrn2KaAICRYXFqm0eyzuXkNmRFH+ye0Oz26PZ/ygsvxaZvdly02VooUilmGnTzzhWu0uyPWN3Uuaq+QhDy6mieqRTg+ewqhwmplnuzSHGcPnxAcFbhzc51xp4OmFtEiHQLS9CyDcdvENlwGPYnupIsSL0EiwvHRmKOuzc2NLXpWj4WFHD/v+vm7vDMJ4nqFJ88+J5VQSaSSGMaEULQxvD7PXjYJgz1G44BYcgnXvsAIQk73YnS6ff79D/4x937lXQ6eWRAMEfNRjvY7NI+OKVSjnGz7iMqImxtvgwSlqobr+CwuLtBsnSIEfeJqmYvuA3KFAq5Rglgb2w2Z2AME28N3YWQcEZ3s0Ks7BMIcqh8hoU9ZoogGkZiMrOjEYjpB6DAZO8RljYVSlSe7faxAozPqYBgjIpklmqN9TEaMxCSu63B6sYuupckncnRbFkNzTD6bppLL8+Jlk0gkxaBuY1t9bq/donmxTV4rcXxxyO21OebyGzjegE5rSBgImOYYzzZRI3tYdg9FAlVxkJQuvitTqVbxQpv64ICsWOT46IJSVSGpbTGMnRHVYXkxCs4y5iiJqDjoooaqKsxVo3huSL6a5JOf/gEhKl4QJ5An6HqUs8Mxf+bP/RpPnmxjGgFzlXn2T5tM/D72JKBUjnJy1mRja5OJaTNxWsS0OIYBiirguSL4EssLRQTBJAzKSDgEYZoH+zuIocrKSoah22E+vczpcEgmmUIL0iT0BEsbc3SbBslsFOIqtTOFleU6t+/lOTty+KPPf5flxUXyCzGePPqSlZUtbLqMumMCJ8Kv/tqHfHz/c1y7h5pMI4VJVleKtE5GrJSuMWpfELoTmq15/sH9z/gr33kHRUuTKI1JJ1xCM8VxTcBLuMSKWT77+HM++uhtxoaM3QmRYi69SQfbArkdxXQ8LMNkpVSiUe8iZuLYpkX74pxKMUejP2TkeAQ4NHZbWOaYZCZOVFQQ1QKOJfON97/Lo2df8sEH99jZueDwsIlvRanmUsS0ON2jiyvXaUBIRDPIp5aQQwVdyjFo+uRzuVnnNCiqPNVQ/ozn41KnZts2nj81NISzDmdRFNBv3Li6Ux7EHX7y/B+Tzi4wHA4pL6d4sfuSVCLNaesBk1FAvK8QTXl8/vAP+c1f+ZsgQPzDD6n/k38yvXELwZ9uaQY+/ezH9AcNRr0oQmAwHFmkxARBENAd7JFNzxF4Omfn+5ye1OgPutQaF3z5xTbV+QiKIjPoOZTnkmSyKmc1l16/TrsVx3N08nmVcV/j4lTmzls3OD7eRyDC8kqVR89/TCKT58XOjygklug7AY3mJ6iaiNiwkcSAzlhgfbPEg0cHVEtL9PtdVlfv0Nt+zpMnj0mnIzh2SL3+9QiNZEYnXlggEjvkrW/XyFZjJNIwsSaoqoptBcjaAZoeQfYhkHoMBwL9fp9qdZFYPM3h4T7prEIsHqV3MEBOdpC1kHpjQC4fxw5HTKwR89U1To5ruNYYMWLxb//g/4pg3SWbNonqSRaX73L31i+SzyyhaTHknb0r0BYC8jc+eA0yAcI3QaY1lVgIXxuC4+7sYLx8gW07hKF/xdpdhYsjIDDNXAxDgVAIXqtuQwGCNyKuZg9J0pXc93WI+ZQJvFSHXpm4rzZUEKbtNql0HMexSaXVWXC/xnjikUgpeJ5HIqnR75r4foAkCYSX9ZNX4JQZEPaZjC3yxRgTe0IsFse2LSRJmlWRvpYHfP2DBTevLTM4jXPRHnJ94y6DRhtCB1mI4Aez+sYQREHh2sZNPnmwzdvfeJeji1N0LUXr3EUpquzunLGyssLLl0+589Y90ukq//7f/rfkYyuEjkmzWePGjZuk4yVMfxsnuCCXvUU5WySamnB2YvLBh2/x5NmnoCxx2n7I9//g/8b/7v/41/kL//Ff5A//5e/w5OAJeiLPr/7yX+bHP/wneEChEiC2chjWEXv+M+5VP6RXP6eQu85SEeo1l3JaYdD1GQsCsn+IPcmSq8xxsPcQNXaTYmGBsdPBi+oMzSOu352j163x8OUhkYhCqhDBNpLo6R69/gnV0hbHxyes3ihzerLHeBjy9p171FtHxBNFut0hpWqOdnvMxExwdlpD9FTKczrnjV3Wb5osrr1gZNToenGWEwkUUUBDRQ+zBFbIB9/8JY6aT3FHBTKpIf3WgO1nXWTFQpVtXm1/iYiBKJVoNa3p2L+/x7Avk0uLmI6NwIiXu6/4pZu/yLUVi+fPWyxvJTlvnBLXC0jOiGH/grOTIWJEJRFJ0rM63L55i0KxjOUPOD9rcFZ/QTy1wtvv/Crt86cI6gTHd7D8EM93qNXOWSgt8XTnx/QfmHz7g7dY3VwgNS5yK6JyfrLLsO3x63/uIx5++RmyGdB3ZArL8+jxAb1+G3MSUCzJuIGNqqgUs7fY2X9I7ahH5WaOfDLJ/PIaIUN6jQFhIFPJrnPmtuh3bTZX5njx6gWCu8TmfIHGpMZoGMezLFYWZFxzwvrNW3Q69T/9wv4z6+cGlNHkmMOjB0haC9PJs7yZ52jfQ5IVJuMWmZyKG7aRErCz16aS3aRRP2VxtUAoTigntyjLWwjRB/QuDgkEiX7No7qywsXklNVreRYX/jKTyYjeYIgfWBj+K1LZWxi2ysQwkIQ8qViWbHKeAU12zh+hRiP4Mtgjk0bNJ5GNUS2VGYYtzLFHMm+RTCV49vkDitUMYSgwMsbUz2vo+pTd6Z46OOkbuOaYhbkS2HHcqMOoL5Avljk6vuDFoxN0RWNhM04gq7QOffLlJXYOHrE8t4Qsl1jbylLrPGXQb5FOZvBCBc+XiccTrC1dQ7BTdFptxEgTx+siBGmq5Vv4gcHx8emsHaNLJCqSTuXIFUuc1l/x1bNTEvEqCBMEKcrpgY+uO+QzWRqtLtFoivF4KopXYiM8Ywx2AtOcOnp/7wd/xNZGET2a5PyiSzalk4kvUS1V6bbatLu7yGKWwTBNYJd59xtv8+j+c1Q5SzQy4vjoDC0ew8elOzYQfA1BCChmktTqR4x1k0xMJlsp0ThvcW21yHvFFYrRCuPeGJEYg2EPMZBxpSHbjfvk8klEX6BUltjZPqeUj5HMhDhOh14tiz2MszS3QTob0O6ekslLdC+OKVZzxMsBv3jvF7g471DOp2n3PAzTYWEpz8P7D7m2vsR8uUL9TMdT+vzRV9uYZpb/+++c4IxBjHqEQsDmtRjNdhu7Y3BW63Fz8zrDHiSTRXKpKof7O2ixBJbpMDF91JTG2DIZGT5BRKc1HuH5I1KlLI1+n6RexhoEBNj4hMhhkvU7twicBo5vMVe9xqvdh+ApPH64R7N1hhYPWduYxxhB4I2JxYRZzt70ZuZNdGJqgDG0KGUW8IU+rh1c6bumxoap2UIQxKlr9g0rzbSbeTqSFmeZgaIkEf/wg6vP9su9T0mmKtQPh+SLMSyvRywdZ9AxCF2RQFQ5Pq8TVTwePPiY3/rV/2R6Tfj2t0jcusXw6bP/yeuH43j4QRQ78Dhv76EnsgzHPmrEwZyInI67KJEmhdwincaQYinDo6ef8c6db6FFs+ztPSCdzeB70Gy2iGkL9DpdXr065p33tnj1/Jwg2KNdc1lbmSdw+9y5c4svP31AIp3jrNNDDTXu3b3Fg2dfoSdFUsU0w67F8twqYaAg+suYg312Rg95993v4PpDSqU8pt0nlBzu3P6Ij3/yr7+2X8VCisGoy+gwQSL5PcqxHxMYNp12j2opS+PsFFHtMbewyv5+DVsek0glmV9IoLKIOWqSzio8frrD2tIG0ajKsO+BZ2O7bYJIiXx+Fcs6Z9CH+eIiYbLAi8f/ikq1wNnhPrJ/j3QyQr17iPJqwov9F8yX7rK+tMVg1GN16SbV0iaSpH5tRB4Kl0zmB/yJp4E3nlEux+eWZb0GZTPTymUkZjjTP7qzmCPHsad6zFC8auG5bM8RhCtECYAf+NNzVhTfYOfftB9d/rwwDdCPgOdO9cOWZSKJ0+5tVY6gyhEsc/gGwyhxVU/6epaPKIVYtokxcVEUGWNiIUg+of+mflK4AuNvLtf3WFlf4uHBl9T6i5Q3JM6afRbyeVzbmb1CiOM6XPS7bN1cYtB7xk/uf8Xt6k3SCRvCJO++c4c/+qM/4L17f5Vf+s5fwHH2ef7iEc2LGhvL75Ne0Hj2+DEf3Pnz2JbPZNRARuPi4oKthXnq/XP+/n/9v2J9cZlHnz2gV29y54P36HTO+X//t/+Um1vvk7fqBJF5dsYNlpe2mNT3Od1tESZ91ufmGbXaiNoCC1UNJWria1WKkTKBWcNwJC66HSLROQJhxPm5hBLzWapo7O0PiWd8BpMR5UqR884JjdYFvV6Pd9/7gPOLfdLZCARZKiUNw25xY+sWX91/SK83oFRYQZI1vNDDC3zcEAJf4Oh4j7lqjrW1DXZ3dzk9SdK3DkmWznj5LOToxRlvv/9rQBs99h6CEvDi4T564RqWM8AceGTmNKSgRyLjoqdcZPIslWMcnu0yv3gL1zc4Pj2iXFmm3t5Dkda4fWeTh/cfkslorK/doppL8PmTRyxsbCB6SYppm0BwKRZUzncHeE6XTGYB365TLt5E1H1+/+Ofki+HOBiEro4zUFl4W6dxFCVb0BlYPVIRHUlq0O00WKxWSMSKSOqAsVPndO8cWStRvFskOEuwslng5OyUXHYeY9IiX9JZmV/h0HxCIr2Epm1ycjygUkkjKz6tRp/lpXX8ZpNgmGalFOeo9pyLtsP1WzcZ1Xvkc0ncep7rmxkOz0/Z2ryHFpWnhsGxj6yqaOk4bhiixWxeNT6hfhTy5/8nr/DT9XMDyqPjFsfHdd55Z41xX6Xd6dJut0FtUlnMcHzQI53Oous+736oItkp0uksWzez+PYFN+7c4qc//D0CJmSzi2RjKdZu5OiGTZaTN9if9Hjw4o8BWFtfZjiwSakVjs9OGfc8fGQ0bUAlewvXcjCsDpo6jxg5RQyTZLMV5vMZji92ON+pk4vNk0/ruEGfneOH3L55C08IcZ0h49EERY4hSkM8z6VUrKLGPfJsMTRabN1cZv/ogIjo8/LVMX/+l3+VlaXbqF6JWqvJ7//4X5OMiji2iCiUOD45xBIPOG0cM79cZuionLzcJRR+l1JFxJhYhBbYjkF/1KOorpNNJeh0a0zMBvFYBi2a5HB/h8XFRSQxIBJV2Nn/go3NVZKxj3h2/wx53iWdUtk+GtCXTdLGHP2BQXd8QiE9T6/fYTmSJaELmKZFv9UjnU7zd/7af8bv/O4/JMyFZPIyrjNib2+Hex+scnJaY75SxRi5dIbPmF96i+2X+4TYLK/H+OSTbeJ6iUw2Trc3wA8cxkMbEZGYZuIHDpnEHJ7VoT8eMgoNWp0u8zfXcToTfM9kbA15cjDhL370Hs+++oS6yTRL88VLbt5Yo5qKM5rUSSUXEM0VWqdDer0G6fQqrtFB17PkY5uQbIAC5/0a9/daFJMV1rZydB/0uVVO0xsfkU2n6Eya1J/s89atX+ei0SeVLFKKCbgRHzO4QPDyGMMeOzsv0RMlaqcjYskUO/t9dJKkiyNGTp9SZYWknmZknGN5I8xej2Q0y+noAkWLEI59ytk026c9shkYT/rgiei6SCmXRlVVRDy0VJKz7TZv351Hj9r4gc3HP7lg41qFd955i88/OWDrbh5r4rAWdODlCZesjK6lGUZFYl4KQpXSfAZRsq8+l9OIlKkpJ0R87XsIZqxRIIHgzwwO01Fl7NoWkTfMMp/ffwDobG6WefbkCWI0SiodRxInSILM3u4xiXwGNww5ON7h9GyH+Y0N5J0DYrdvM3z2nK+5hP8DK0Sg3qzhBxqFco5uZ0C/N5XN6LFlTi+ekEnnscwQyzNwexE8L8KnX/yI9ZV79AZdGu1zDCOgOp8BIYkoD/jlX/5lTs+egWBjuie8+/4N2u1zFuarFMoab7+7heuIHJ/s8Ivf/BbYEZaWEphhSLFYIRWRsAyTeCwLocA7795mbKusLr7Lw8efIkbaKIpCq6Pw1dN/x2DY/tp+TSYTBMkhlSygikUq4q+zW/uClSWNbqeDllKwA4OvHn6BpqYoV68xdtq8ev6K6ytltGQULbbIXNVlNHTYWrtGo1/HM6JoeprxyCOedEjEq0iBR68dgGHy5/7MX+Xhk13SlRNO64+JZN9BjgQ8+eoxQ/GAs3qDw6PPkVWZT7/6/1BILbC2/j7JWJpcpowk6hSLa6iKjrJ3cAUIYfY2ipcaxvBqfJ58/Wa++b8/sYIvvsT49FMmT58yfvEC23ERZspeAekq+/ESPApXOs3XLOKlfOK1onPKeDp2QCQqIYghgTc9pz3PRpIUPN9l0p1gmT6SJE5LcGaq4st9EWfucD+YMpf93phsPkIQCmhqFMc1py83A73Cf+CkHve7XPR7LK2/jyRHePj099lY+oDzoxpleQpgwyAkElEIQ5Pz2g4iGr/+5/5nnHz6nHsf/hIvj/bZ29kl9JLsH3/JH/7v/wV/+2/8b/mrf+3v8Y/+0f+Bl9sHLG3EUJQEh8f7xGMqy9VbnNWeoYvXGXsisXyJtY11slqabrbORaPJtXsfcbh3iuCIKLrBnRs32X38hPFPjln85q9hJzOUr42JxlO06jZvLa6g2CPmtop8/PAT7DE05S56TiUQZd679QF9+wyvpyNZHeKVZXRNJpH0CMOQeCxDRM5Sr29zdDzh1p2bjEZDopEUoigymbj0zA7GxKSYvcF3f+W7PHp6n9OTC47rKl5okc5qdAcmiiywvK7x7NELFpeqlEoFzs8vWLt2C0WuctxoUy6JnF4c4zoBo8wTDncPuL55nWcv71OqLFCpLjIad0kWMjgEPH1+n7euvcvYMqYlJ90e2UKStZUVuh2ffHoN17Vo1tp4VoTV5Qqt8Yjv//D7JPIlzlsNwnGbueIianLCqKswvxpF6EhkMlkkBDq1IY6VIlWwmdgjkokCgWOjyAqN+jb5gsRw1CGZyjNs16jkb1EovGJ35yVb19fxkPjii/usVjeIJFSePtlBChUq81WG2xbVuQintQm12oRkvE46H2H7WY9KdZO1jTLd/oBuZ4wWl4mlXSajBOYw5P23V7jW6/OHR7vs/vQr8tUkT/dFVufLSFKO/Fyat64l+cEPfsDK3V8nVcryyccPWL1WJKOWafVq1CZt4pHMn35h/5n1cwNKSZJZXS9g2j7FcgK8PPNzBRwxoN8dU6nqROQKgujQa/fw7WPK+XX2XtVRIn1+5w/+FcVMjFK+iDVO8dmDHW69bfLssMm9t+/Q6ZyhJwQi4jKdVoCqqDhGnG6nTywWQ1INhsMhDxr3WV8q4bsRCukV2kOLvHaXlfINnrz6HbIpmfm5TWwjTqu7zfL6JvGEiDvx0ZICk94E2zVAGpFMJ2lc2Li+y6TbJhnNIEsVBj2X85MxqnjAXPkaw36aH51+zkJpi73DPRrdc/xcEms8oDscMOyNEUSVYm6BZDSBrzs0xv7/n7U/D7IsTc/7sN/Zz933e/PmvlZl7Uvv3dPLrAAGO7EQAEHSpEwrrAiFLDkcdti0/YdlR8gRCuoPSbRFUkFCEgGKHAIYkBgAg+nZeqbXqq4ts3LfM+++n3PPfo7/yKzqaYhhjyL8RXyRWTfuuedm1Ped9/ne93mfh7ODPu2zEXE9jjkO+OLbb1OpunTqBq5nk4rP0esMONg9wDQNBEHg9KSJoETYjoSuT/HRj3eRhAaxWIKDkxrBjowfjJHEJK5zhGGNkKU01tDDsWyO9pskkhrxWMDrL9/if/V3/yOWp9/kT7/5EePRMbFEGt+xmJiS2No4plicRlEcZMmg19ew7SOq1SSuk+XhpycsL11jYPQxLI9Bv0MxlyI9kac3HpItJ2h3e/TqbS5dneL+7gaK5oGq0jhsUsyJrN4o82jd5e5SDk+ICBMFXp+J85XLHplffolvfGQg6gV6+w59Q8QLh0i2ixAL2Km9z8zMHKNujEzsjLwySaAYdC0fNWxhNE2a/TmK5ZDm8RDDGFLOTyFnUxwZG/zwwbvExZBMOsbxWUgiqzMchAwGh5Sn0ozdeZonRwRChC7oZLNZJotlElmBoxOPg6M98oUJ3KBDRIQ1tJHiIdl0BsMYkdLzlIpFrCBg0DfQVZkIkYycZb5SxQ37GEMTKZrg6pUUAS1q9T7JRIGbt6pcvrzC40dbrFyOoSdihP4Ax+1flPvOA/zUVIqPdk+4e6tKJj1Bu3OGpn8mZC4AYXjufvM59SBRxPN9guizz3qW8IlfufJ8X++nQn7w4beRExaWYhFLpJA0iUTaRxB8Wp0uE6UJZD3CD+Icd57yvfe/w+/++iU+8xEPLwAJfzWp9HxEROgxibHlc3i0A5FEMp2m3TrDcwfEYlMMzV0EMYQwjWn10DSNg90mY+NjFP28g1xRkzR7dZKJgFI1y/HZEaqWIFeIk9SvkM9WcbwOxaLO2ekRlfIiQSAQKG3a4y3GnTiW32NucZ7uWY9UKmA4GqKqeWrtT0kkEghhjqOTbe7e+hKPN/4MPzrC98dYZpLLV1Y/93e1Wg0CBELJ5KSzhaZoeE6G2ekXGBofYgZ11Ngil68lsawOpm0jRDnmJ1/m1ZdX+caf/HOmF1bJFqDf8mmcGGSmBEbREF2ZRM73OTz9HuXCEtMTM7Tqx4gjg48/mEXQYsxML+PZj0E646Szh2lnSaYsctkkgiei63nimT6eU+O09oCn/RbF/Dye55BO50gkZpgorxCL6+wfP6VULmKZDn5gUy0vUy2toGsJpAttzecKBHChFfDviBU/0RxU+uhjBv/092jdu0fouc/tOs+byZ7JAp1bMZ7zNIXnzULPsuxEwsU1wXPQea5/GeIHAbKin5e3o5CIc21UzinFPD/oXFg9iuJFblU853k6rocg6PjBGMc9z5KFUXRuHymcr9vk6689FzYXBIFYJo+kRmi2Qt/ep1uHXr5JMB5c8Ik/ow7kYznGCdg82EdtFrh15y7rW9t4wZCe0yQ7USERD6lMe3zzO/+E1+/+Nr/76/9n/uIH/wRrqHNpZZmP73+bcn4KLRbiBiWWpzQ+Pv0GupaB8XXMmEG5onJmbLP3r4fcWn0dUejwr//4AxYXr/Mffv0WDx8rlAoF/nLvI3Z2DZK6RlrRoB6xuLxM3+mST8+gFWxaZ3XyxRtUimXuf/gx6XyBF+9c4tEnmzQah4y7AWk9S6mUpt0fsnt0SCIeMFNOMxyEeLZFGLnnjbrJPLbVRxAkdvY+5eFji6mZSZIpjbHVQ5Ijnm48wg8FLq/cJogGhJhYlkGptICqjUhrk5yeyvQ7TWy3x/TyTa5cXeboYINLS1eJaykmJ0PWNg6ozqdRRJfjM40bt76ANTimUdtETs/gBwnSskuz1mVu7hrkGpzWjynlF2g0GixdTtHq9PHFJJbqUywXyBRVuvs+e0cb3HrhHeTKmGbtAEUvYdoDKtkJMsUG3dYRMUVkrvJlbHuHVjvFzGKZmeosf/TP/hWJ7BzpqTi+nSUW01HkGwyVLVSSBJHNRGWSbrfPdK5I5LiUC1PggSqVSWU0/NoRleky2WIeoyVy8+YCtiNQnhbo2V1aJ3VkWYboChOTAafmCcP4BEq/Si6xRXrmErkpGVcocXnlLnrQRknM4Yx2yWUmcM0OnjNgslogIbv4hoUuSKh+mmJu7qcDifzPAJTLizdIZxV+/w9+j6ury9xYneasts7A6FIsTNLr1GgG71OpFmk3XZZmr2EYJoO+yezsPJWSTKIUR/Ikeu0BOd/npL/DUj5Nt3EKXkRkxxDT+7TqLiJpShWLfC5DEI7xPJEQA1HzEKQU3V6DWKgxkb1MPiNjONuUqmUy2at0RzV82eCl197AGIjUTrcxnFNmc7MUCmV8x0SS8ox6JqVSGdNt0u8YqLkAOZpFiLmUJioIoYgfebx3/99wejLCtv8cURqRyersPzojly6RVNOMRh6C7NEdRhhGFtd3KRYXqDf66HqcMJDQdInvfP9jPAc822VuPku/W2PlchXPCwhlld4oQopSjPsDPK9JGEgkEkkEVeWs3UdTEnQ6LTQ1RBEEAs8hkRBxDYVRcER5KkksVsB2ezS7fSZLr6JpKuu73+Ttry7Q6EC73cUaWyiajmG4qFoBXzgiljWIRJ1Wp40fJBkbEo4d4vg1eoM+qmRz/eoqx0d1AmGEFHdodgIUOc2Xv/gaW/tPkIlQIol0XiUdF+mPfIJ6gK7EsWyfTjOgFIuY4QmLeoW/+MEJjd48L3zhi+xs/3M875REIs3ZgYsgByDK7G+2mF+ax7TG5NIRrXYH0VK4efU1dvb2GJgG86kK2nRErRbhOgaD1oCUnmbryT65WBE9ZWFKHZrHKvlsid/6my/xw/ffp3bQpzJZQpLyuGGfiICu1efgbEguVUCNw+7ZIbLvYbghsXyBs2aNbJREcnX8uMRmrU5K90km4miqiJBQcPwxgeiTSMk0Wz0mZy5h22OePG4xto6wnDazMyusPz5jNGxx5codPv7RE+LpiHxiDkE4z/iJgoAkWczOFhAUh/bwCR4eqcT0cxs4kJAkGc8LQbzwzr5wKrEdF02VeeaZHEXn4tI/2ae8dfg+yayD6QWY/ghBzWCZFsm8hyeKKPEkhayC3dHRpCyliSyWY50LWJ9HWD5LTT4rhF5w4n4Cbgz75w5L6XSaWm2XTDpPuzEkncoztE9AsBCFJL1ej2Q8wPVMNDXF3TtvUGvs0ukNSWVSOG4XXYzT6fXJ5Vcx7QGyHmGFp2RiZcZ+m8JEklQKVDvG/sEukxMrlHIVtrafsLBYJCNVONg55vaNt+iOHuN4AdVZlfufPKbXy5DLFXD9Lv/2W/8jy5eqDM0U+WyCTDxz0T382cjk0mwfblJr1nj5xS8iCyIJX+FHn/wluVyKyHMZtkWmb6ZpHOsY/h6aEmdqaontracsz91GSgkYA1i9soBOhp2jE3JFCXvk0+vV8CwF25AQSSDEHUpzM2DP0G8cUT86pVyZoW3ex+i5FDIZEplp1tbX+ff/5m/zz//gf2RyLqCcm6Q7MHBt2NmrU5mM0Tld5/Gjb3DjxqtoyYB41uDPf9QkrqsUqw7/9vtdypkrlLOrXF56C0n1MK0hodghoU6TUHOYoyaxlEi902dl8UUmCkvIkoq4uX2+Ol95ifwrL5H96GOGv/ff0b5370Je6rPGlyg4z6Y/0+c5t0W84H5G577iXABP0zRJZTIQ+SiKhCLHcF0HLwhQFPG8eiJGF7aOF8szenbKOu8Aj4KQ8woAuI6HYwkkEkl8P8C2zXOjgIv/Z3V5mdSXv/Q528VGL03tdECuHMcLbC5fynJydEzSV1EvspLnf4NIJI05bJ8wd2WKUi7F3tYnCOkYelwlDFQ2Dta4vnybUn6VVv+Q/+q//Xtcu/rzaMkuOxu7vPHK1/nSF3+GtbUf4Y5zzE/P8OnpA1LKBOkgTiaXA8b0Nutcjt5AnJMYjQ/JxvJcm5zhtdvT/PHvrTNefZEb/SHG/pBsvsdC4UUid0i3Y2I4OzzdTDEadJlcyWE4DqITpzib4eVX7vDet/+CwUyJxITOZV7hoP4YPxQY1gWEKOLBw+9i23XeeeXrnPSO2N1+Qkq/wtWbOrJkQSDgeiaxpEaumKDX6fPKy7doNNo83fyYZCpNKlnm43s/QNM0JiYWMcwWi1mds7Maob9NuVwmk3qLqek8rdMBg+YpZ6cWc0txOqaNPQ6Yq1aYzGdZW9/j+rUqw3ELx7FIxNKMrWOa7RaNXpHLN65gBTXG9ogoiKFraapXE+ztHSGgguCSLlZIpHOoYgw5vkEurvDwyXdJZ1N0W11mpyYplir0By5jW2FuLsfGRgMh3CVVyHP7bowPfvw+ZxsL/Nwv/Tbf+u67xJIFiq7E+vZDZLK8fPst6t0HHNVdKvkSMysVTnt1vEgiO5Hgo/v3sEcF4mqFQqoCYZOD9SGu10WUZhgMIZHLgC8xUUlhjqDTbNFvnnJqNNhtHkKQZnpepWfUuCO+TDEZsXfvB+iaRd9ax06FdMWIZL9NFMHMxDyW16JQimOOJRrtEZHZ/2lh4v8M2aDTY7qdPFdX7oCv8WTtU65cm+P7323gpWB6co5CdZZGp00mpxJKY/L5KSQhTiadQFMcTs6anDU30XMq+YmAvpGnnM+xdzygmFVwXRXJ04lrLWQFKsUZjP6YRrtJKpclDEw8V6HXcZHkkKX5OTYetzD7XdS4iyeKnOwdEQoK435EGOnEFJXjgxPKs2Xef++YmSUJw2xQKVxFUhUypYjufoigKxi2w3j0KaGsM1EtYw56tFrHlPMF9JSKpPtYnTKhl6TbO6XXazG0PeKpDKPRmFhKYX+3Tizp4VpD9JiAqKs0agapKKA9GFLMThEEHmsb+8TVNE8eb1MopgjDDKUJlU57hBZXEGUNPa6zu7dDQkuj6DGy06BoIYOOwNxCDDWuY1sRiBaym6LRHjO3YtPpSGSyadaO3uO/+K8tHj/8gPnlOJXKMtsbDa5eW+XTeztcuTZLs/sQxw3IptP4QgtFUzlrnJIvZMmlZjHtDpYxojqTQpGyBHSpLMg4tooSzuOlLN7/5IfU63VQ0hTjKeqnJlplhXr7lHSiTiGtcmpbvHR5gHfUpX5q8+fhkI+2IhqhzXe/+138QCAMzongc8s6jXofRZrGdOrUjvvEEhPISpOb12eIe0nqJwMKySmaUR2zO43j7GMacVrNA4yoSzKcIKEJaGrAowc9tFiSIHQJ0djfHCOMJ5mYdNna6pEvinT7p0SiSlwRKaZkPHlApI7JpmQKmSLHrRZKIKJNZrEHAkLgEzoDcuVLDDpNikWVeEKl0eoRz6RoDQ1yqoySiLF/ss7i3Cyzc5c52I9jmjUcr4UXNVBUmbEBf+3Xv8bRUYvhzseE4UVpLoqIwhjoI7KZZZ7uvIuijM+FnoPgIkN00eX9k84s0XkpMAhCgjC8KP09M2X8zHNZQMDzAiYqU6zv7eEHkEpaJGMSI1PEFVx8sc9JTWa2kCOR8rl15yWKmfjzLGrqtVdp/sEffAYen38XPpe+EgSBYd9g0LUIxwmUdJrJiRSHh4fYrkehrOPbCXrtIfgRxsAH32PYOeHS6iXGuy4xNcfAOsYwHbIFn/WnT7j74ioCMarTVRz7lKdPnzK7kEXRM4hCEUHuM7KPcMc+U5OTJLWrKKrJxKTOyBAYjhLMrcyxv3dMeTKNKum02tsMjTR37l4ljHzCqMTkRBUhLHBwvP2552J1aoJf+rm3+P1v/BM++uA9vviFX2Fk1ZCkDjOVN1l/alFIxxl3Bfqjx6jiJCNjQFw+Ja3F6fRPkZRT0pm7xOQVSjmNbn+ENRpTyFeIxXTEMMNoNMJ2u4iSgnHgUJiSEDQFiQy7Jz1apzZffO1nMcMaB4cd5hZvsLH7CULikO29gNNYnVS5gG3EOWt+i/zM15iZu0l/5NLqnZKVZTaePEAIZtHTIaVSmXvvN1HCLk+ffJNur0U8K/Hw6V8STy1SyScRujoxUWIUnWBpNv/mvX/AW3d+FV2c4sqlF6mUl1FkHWVrD/Hll8i+/BKZf/mv6P/eP8YcD3AdHxAJAvD98ELW7YLrK3DOv+Q8S3jOuzx30PF9iCIFVdFwXQ9JkhlbBhEinh8iyxcuURer8pl70LOjQBgGCM8AYhRhjm2S6TRja3zhN/7Z+o2trn7OdvG/+9VfYFI9Q1JbPD6+Tz5epZiaocsOrjVz4RQUXTSVB9RODrj86hU6I4v7n36PucICriXQGIhUpnPsnz7m3uYPmCxNMl2Z4e5LN1GlYw5PdtF0BT9qc+/+PrajkUwn0AsF5oWr57J8xQms9gF6dpZ+QiRuxwhll5KYoLHXJp4P+G/+4hvcuP4llhYF3n9/k3J1gT/4/hbeYp/FKzouCuOWgVs/QfZbeKMeqpLlk8cf89XKL6GJU8zOL9Dsn4JW5qy/gSbFkWIJZE9Ad9NcmZ/k6cGQo8M9FhaukHupjO+HVMsl1tef4nomfmARBA6dfo+VietIoYTZDbm8dJUPPv6IxaU0rc4+rqvw+quzDIddDvZqqKoKRIyGNtnsudyPbbYZu10mJkRkAVrdQ2aqS2hqkna3wRffeofD9Sfs7R2RmNZxrTOquUXS8RLCYoQsjUgkSmSz0ySSx7Tbh5Snr5JIljirHSJHp0xOrhC6I87O6qRT0/SG+5iDPoVslWSsT7/VQ1NTRJrFZPEKhXyJxRWDR0/2qDBDq9NiHBkY/SOOD2GmWiabnkLOJiHdY2/d5GD/mKXL12gMPuTwZI1KfhFVzdI+rTGRLyJFEAg1tvfavPzaqxzVHiMgMjM5z97OEUuXFjjcOyaIQhzPptfxuX4ryfGpyxem7rD3+ClhNUZGnycejfHGA1pDHymXouXLGIM6nQOLhYUpDvePkIpxBrU2N64usLveolKZ4Oe/9ioH6+//tDDxeYz5/zmmKvPoUoHbt14hHk/y4p2vcHrcZXKiTDKuIIk6gRvhdiuk1Alsw8IJIurtHvunxzhumYnpKfaOBozHKuXcC6xU5rGdOAklIK5lSGcdJMWn1zXIJBLs7T6iM2xj+Sn2T3cZdUU0zv1NF2amONo+xbFPmKgWEUlgmAKKlmM8sEkpaQI3YGx5lCs5FKWFKBqEkkJCLnDc2qU+OOS7H/0YWR0x7o3oW2MGUgtbOmRsm5yeNchkMhQLOawjD3GQQHTHuD2TS1MVMsoEszMaupglrhcYGxGppE4UisSSCq4Hw75DMZfFthwkscjQEDlptuiPfcaByknDoTuQOdhtI0oa8WQGUUxijEdYzghB0xgwpD/sYQwVysV5StUcpjlCJERTBIr5FMgCCDJbaw2GvT6ioDI7tYDr9ZiZ05koLjLq2fz2b/w6w7bLjatLJNQkSUXixUtfQxfmyWuXSCtpenUfw4yzcXiGr2pkqyXOOl1OOwek0hr9ukFkuZi9fXrtI0bjEemqztSERLU6QSGfZGDWkSUQ9XkOOqBKAvlAxmrUafRirB16bO43aQxO2NjeIlvKEStMkUnKDAYDPCEgndEYGQKRYJDCwqzV2XpSx3QU5pbnkB1YTE3TGTZxvSxCaCGKNlhxOsYY5BhyTKLbMAgi6Pcszs5OePfbT9naP6TecPC8AH8c4Xs2zshCltVz7cemS16dwB/7aHKSyFBJ6lniukamFEOtaKRLc0QEKMmQoT+i3m8SSQqylmX3qM/jzT0GTsjOaZNarYYm6yTjMWJxBVEKyGQmSaVKGOMRh3sbWOMGM1O5z2z7RJFeD0rFSXb3PsSzsujqLLXm8Wclb0EgjLyLYHnucfzMXjFCuPAyPgeQfhhcqLVcNDkQEXoiki4TRBC6Q8KRi+S42C0DyQDXCMlXy0zOLNMcWZz21vDcNqJwHuz1N98kee3aBReOi6zSBbD9iVbdL7zxOpOTk5ydNbhx5Uv8e3/r71NrHhOpEYGokUnOIeshg2DAwPAoTU8QxG3UlEqt2aEyWcRxehQTE9ijMScHYxAkYlKFdmOT0I/RbdskExLDjken4xGJEa++9HPoukY8IVGvD3jvx3/Ek8efMrYjHL9OLqbRPPuUpCQgBBH1usnN66+jaR651CVcz6M3OKbb77G1uYuu65+bxyddTmonfPHLPwuxER98+j5ZLU86mWI07pPLX0JSoD864c6tW0jimDvXv8jC8gvUhl3SlSS6sED3eIwixtk93CCZEJACDSFSqDd2kNQALTNkbff7jG2NueVLHGz/MbM0+eLKS/zu13+Fn33l79CoHzJXfInVhRIzsZDR6Bg3jKhmE1htg17d4WB/l0rxCsf7Zzz46FP8scXC3BzGMMDsJbC8QwjOePi4yc2VN6lqJQpqHtOzaJ99SjFfRXRAj4oEkYSnOfRtF8vp43k9OvYZnzz+Pt/50e/xn/z9X+b+g+8ymqngryyer9Df/A1y/9f/G+UX36BcqZBIaVSqSaZnSlQm0uRLOrJ0DhwjPjv4nBsynXvHC4JEMhEnDH2iKMBxXOIJDccOz7OLwrPs/YXQ+sXCFMSLw9QFNzMKQ0QJTNNiODSICBFFjWdO488ypOefdG67eHS8Q6u2jxOkycaT5PIlOqMBy5MrzMysYI3tZy1E+K4NGtRNh/H+h+jHO4wsKM0WmZh2ODp+zNz0ZW6tvMON6y9ieE1GxgmG63L31tdZvfQCY7vN5cszqJrD2fEmR3uHJPQpOq0Gze4ZA7/AaDQip8Z5uPYJw1EL3x2zcu0KspAlKcZYXCnTOuqQSEJ3UOdL71zBo4kgQVIJcKIKr/3MF1h9cZVAVEkUPfLFGH/2rX+G6dfRsiU2t1oIjo07MMgl81SvT9BXXaKyTGu0SzKhkSrp7G59CIbIUW2DTx8ecP3KCnZ/gG8LTE3OI3gee8ebbB4YhJ5BUary6t2v4ZgxVqdXycUjhsMhkSAiyB6aEqIJAnLUJXDGZHIillknryWo5qZQ1Qlu3nmRmKQS2BGTK3Ns7m0TL0xy5cYNytlZ6nURM9Dx3CFBx8Uejtn+dJPayTaN4xqVQoZ7HzxhPGxzJVPGG+bI5ivYnk2jdkKndgyRhhOq5HI5ioUYihIjlciQkjUITD598gGmpXLp0lUKGZCCOLmkQjYZYvh9ds+2+dH73+NHH32AEEhk0nEiVUTRCxTSZS6trLK192PG3SPGQZtP7++yMl3hhSvXeenVK9x/9EOSWoyUmqV6eZdY4QGGscNwtEu5MIkbuGRKCp5XIqsv0Bl7VG5dZmFqmWq1SjZXOo+nVpsn62sYPQs5lkRTVU5Pj3FdG92IIFKANEEs4Lh3zIcPHtEK8///B5SjXkS9scGD9T8ikho8evyYbr+PrEckkmXssXSO2COfQnYCSUjje0NyOQFRgvcf/YD7a/e4cfsKl5ZuUju0ONqpsb/3EEUM2D3YIhlbYjRIMjc3Ry5XZHKiynRlltCx0chw5fLCuTtJIcv+QY1sPkuhMEOnY5HIVdnZv4cQJjDMHpuHG3zy9DFHrTrZSgGt5FOZTYNToj0c42k+ZmSwsFKicephqdDxOziCzMHJgN29A66svMjB3j6Tc2f82u+u4LpjHEumOjuJ5YBpjnCNOK1On3a7SULXcFybYmGSKNCwrYCIgHb7iNCT0RQdhCESGo4pQegQBT7DQZMAh8O9DqOuizEaocgJEAU0WUIJCpQrOUyrjai4xBIakSAxGLqcnnU4rbXRtABNFUjE4gh45FLT9Ls+e4cbaFqO7qBJt9vnyfrHvPjaJCsrS4zHNrdvvcLtG1+kMjVGkkMkUePS5WV8x0YSXVq1MwadNrbn0GsP6NbHJOUCaWWR4dDAFWykeJybV65x5+7rmLaFJiW5e/1rSIJOYSLORLYEowwf77ucSAU6UsDBKEFbm2Cn3ULwJIyBSLvdJBbPMVm+TuDFGY7a5PMioqDSMM7wJY/TZp1P19b5ZO2ERKlMqzlEHMsookIqFkdXcwi6go3HYOBwcLpPdS6DoPjE43n0uEAYmlTzS6iCDpHCyOmTzMySypcZmmPGdsBwYLG5dUjkx+l3bAwTTHeM5YwxTZnAU/G9AWen27hGiG/5JPUUab3AsNtmspxFCFQ2nhxgDkccnnX402+/y4cff0IuM0G9YTAYugyMEd1hh7V9k72zAebo3JXgXCA6pFSSaW4KRFGKRFKkWbdRVemzjRkJCCgX3MmLUCgIF1XoczAZhSFBED7/PfHaZ9Ix+VwWOfJYmFF49aUbzM0s4rgyI6tD5KtMFScJTItmMKI8W+X+JwPubTzk8GQbb2UJAUjcuPFcVvA8+p6DSeMnur+vrF5lMv8S/8l/+P/k7/zdf59/8F/+Pxg7Y0QxIpkMGFlNVE2jWEqQzSUYDTokUhGlchYvGpHMqoSiRG80JpEsMzFVRJADHj39EClcxhxBQp+hXFgmmymRjE3T6ddZ21hj52CDXCnDlfkX+MpXf4bm8JRcqkihmCIzmSObvIQVmVhhi3w+z6ABc4Uvsr39GDFMIUYFGlYTNaMSRuPPzfmZJN//8z+jvjnmN77+d9DUNguzd0jqGT756AMCf0gYGmhShlZtTHewx+7hR5yc7JDLTnB02EWihIBC4LuErkS732McnVBrP0bTUhiGiYDDlZUXKGVmENU+X15dIB80qX3/HzF19ke8OfeUl/IRq8KnfHkhwBva1JsOhWIKQV4iX82C3+Pmyqu8+epvMhz12D+5R7Yo4wRD4nqBudkJAkvhw/cMnL6PZddBgkQqYGKiTds2qCgLFNOL7Oxt0jQP2Wl8hCRrJMIXSEWL9PZrmL0DFClNuuTy3ff/Af/4j/9j9k7ew5ibwr+0hPDSS6j/2X9O/K//bWJ6GtcOCEOQBJF44jn5kc9YlBfAUhAJAv9cpopzsXJFVpFlCVXRGZvnXOJn2pNhFJ1rSvJM0/LcK1wUpIu1KiIKMr4XEPgiqqrjeeFzGSP+Hcl2PaZyclzHGNrkk7Mc72/jGDa9lsve7haaFufcEV1CTcRp9Yb06k3e+Zv/B/6X/9H/npR1gD0acXjwAfbQ57d+6f/C7/7W/4ZP723RajVRlQKqKrO9+wjDMHHGCpsbe5jjAdXZONmSwZPt75ItpohCFUWzWNt8gK7mmJ2+wsjosXV0RLPTwbIcFqbn6R02EFyNN978CoVsmUHNRZc09ncPMC2TUN/hzz78M3Y7FmqQRVcLzM1Psrx8ieHQ55VXX2f58iwuBslMipPGLqPuCHPUxzQhW0ygaAqnzRPqwxOOnQ0kXSRd8uiNdO7cuUM6jDjd3yDQikzOrRJEdQaBwHsbuxy1zpifnydTneLMsel3j7GMPlvbn9Lv97GdEe3OiIPDPRxb5ObMXbQgjW8GiH5APlnGGLfxojqNkwNWVmYwnCG58hIzC/Ncu3IdXZZonmqkS1OYdsDqjXn8kcfc6kuMA49EYYI3vjAP+SNefKnC4cl9jk77XLk7z/LtCpduLJLMiViWg9nzMU2BkT0iFptif3uHfFrEGsHEZIWdozq2MyDw4oSqz+bhBmf1HVyvheE1OOk0GTkOd+7cYG3tPcbDBIXKFCs3V9Gz07z91pfpjPY5PdVQdRXbdLi2uoA78llYhO21dQIzQSaVwrVdkAYoUoVCYQpjPKA8mQMhRqcRIUkyiUQCUUrx+Mk2re6QQiaDEFq4jkm+JOJYKoqcJJ5Kks3nef/DH1NrnuD7Ovh5JDH208LEnx5Q9kZbZDNFkvI1pHAaxw4ZWyFjW0GLF1GlMltPm5QrOdLZFPl8mWanTW94rn+kqmOCsYrRG2GPHOqNdRJFh3R+kt5YJ57KMTQNEmmHymSZs9M6URjiOxa5eI6krrH2eIPNjUNOahvs71uYls3QsNje3efoYIe5yguY3QHpVILKfB69nMTWPR4erPGHf/yEdr+PHT1m4ZJKYIQcPunz5MEBa0enBMIYSRbptnx8p0IQJThsbSFqSb7/XYd3373P3rpDKpPnrLfDSNxG0HpUZ0MyBRFJFBkODVRVZjDskMnqVCeLiEgEzrkUcKfZwXdiIERk0iqiKBNGPooaRxSTBEFAJhsnkdBRJBlNTlAqVFEFgSjykZWQo+NdBsMOru9j2QHxeALP87BMEUXQscwhigybT7c42D+l3hhwcDii0wnwhRGN9hbJ2AwPPz5lbr7K2PT5l3/yn9Ko79OuD7DdAdPVSfodm8gRSCuT5JNpdD9GTE6CHLC906c5PCWVqVIoFCjlqvTqPqYJsqKzOHeVpblr+GHA+tpHjHsdFmZXqHXHDKIk9aDIvSMbTzXJJZfoDyU6/V0EqcPk9AyDnsfERJlCbhbBnWTY9+nbYwJ5QL9rMey3UWSRdrfPXmsTJ+Zw//FHdIZtOl0ZUdTxg4her483llHlDOagSxhZbO/UKVez5DI6hWyMdDokmZEx2g16tRpxMUXoivQHA3qmy8gTaIwGaJqFbYDrSIxGI1wnYuw4oIxREgLxuM7u1jFRKBPQZ+yMUOQ4mWwCXY/TGNo0uz1SqQw726c0GzaSnkHWdNrdFul0DncMivysy/U8nq5t7bDX3GBtc4daw2ZsD3HsZ5qPAp5/HozPu1H/px2pzwJrFAaAiLq8hP7mF56/95N73ycTy1KMpwlNDUHsIEgiCwtzTM/mkfBQfYmDzSfYxj7Liwl29x+jauLn6JM/abf4DFka6+vYP/zheSDe3+d3fvPv8fbb7/C//d/9PWy3TSKexnVETMOnY/fREhnyyWmqOYlXbi8QUzXa5hZBskO93qc6XUKOG1juCDVmkCvIJNNgejWmJucpF8qYhg+iBpJLb9jnpPGEXHqWYc/lrLdDrX7IC7dfojmo8eGn36d+1uS4fcB4rHNW65FMeQyNQ5LxOFosZGC1abRHJII8Y2MbO9z83Lx//4hEKo6SsNhfj7h77VWG1ia2oXD37irjcYNscppGrcXJyRm5zASV3A3arS6u36Nv7NHqHjM1XWQwbBFJDTq9E5p1k3y+SGUiz/FRg5OjLs1mm4/v/Snf/Yv7HBtZ1hWF5MuL/MV33+PPv/2HbHTf59tbf8a3vvWnPD09JYwytLZ8YgmbdG6Cyws3ODlZZ2u9y60bryIIKertAUdnG0R4TFUnCCwBz45z9fIVnjxdZywazCxfI+p5LC7Mc9Q6YDy0KeYriIkzOm2BwbDO/ILGpaUZNDWNlPDZ2XtMLplk9+lDnJ7LB+//Pn/y7j/EHPfxL60gECH+5m+Q/O2/harE8X2HIHDxvAhJFn9S8/y5ZeQ5P1jAMEx8P0BWNGRFxvNcokDGdQJEMSR6Ru9FAM6ltIieUT2EC+Hyz3aIKF7IESkqmqoShtFnBgF/ZT9Z1pip8g3KpTzrj7YQwzSEMkEQMBjVgHNFhTAKcccuxVyOuGjy3//j/wax+jMsXbnC7t4n3Fj5JabLtwnsBH/8Z/+AVmefw8M2kpAlFVvAtBoMzUMMc0A+P89rL/08hewSjx+fUrlolOoMDzmur5NOVjiqbePRoVKpIsc07n/8MSIJFD/D3qMdas0tvvnuH/DBh+8Rc7NYRhcv8hn4BqozzdfvfoFYTMPTNJqNAR99/B6P17cR9DF/+M0fMbR8Ll+7Sa6c5fHTJzz46EPy2Rzf/t63UdQKolDCHie4/forjH2X0NUIbImdo036tsz1l2+RSko45pCpuUnGHZvAsFiYnqYQK7Px6D79oxZvLrzC3FQaPJGJ3BKODbbjo8cTyCo0W4esr5+weXDC+v4JvjTmh598B1sUEaQJitkpekOLwdjk6d6PODsZUp2Yo1RO49HBj3Sy6RSPnz6kE/mUMhkkd0R8e5/sWGR5+R1euZLhS3MSX1sM0N2QZlPm29/6IYKhUskU+fKXfp2ly5PoiRSG6TA9NcvTh7t0uzs8/HQDSRGQRLCsHr2+xfzcZW5eW2LUGyIEIp4rMhgaHDX3Oal5zCxO8fTJY4ymxeX5NMe7T0npJeJZn3qzydraBrn4JEOjxoNHB7RrV3n1rddxQo9XXn6bbC7J7RszVCshvtUjEtI4vgXaGd/68z+jfjZA0S0cXyRbmGCyMklMydLvdGmcuGiaR3U6RrPRQVJc5hcvkUqnGY5aZItJhgOHn3b81ICy3W3R6h3SbHVx7Ag51mJiMsKyTA6OHxDpLWw/JBTTPN08Ye/kDD1eodeXOT4dkM5l6fY65NIVxoZJJpXGMaso8SzJyRELKxU6bZdm2+VwNySZKdPteMiqRhg5xLQCleIKWlwglZxgci6HYXrYfovLqwsYvk7HsmgY6ziuD16I1T+jsb9HOBRQJJGdJyO210Yc7dkonkwpVqKcuMSV1bc4bfXpDNvMzE8R+A7ZnEz99IxxVyYhVylnv8QX3r7Jz3z1r/HmF3+OUIFyuYyu5bjzyiyr187V7CVRx3UEwhCC0MayTHRdR4vFEeXzhx6E6EkVLwiJxdM4jkgYmsiqgqQkyWZKlHNl8sksd29eZ2a2SCKWQpZVBn0b3wtRVRXfdRmOeuQLGYIgpNsxKebLKGEWdxwxMrpk0mVsb0y7bWCNkrjjFPt7xyTyLULhGFkWiekZFDHJjVtVZqcmEYWAK1dypLQYitwlLlWQgziZjMSg57F8PUvgJ7GcLs1TDykKsSyL3d0HaLrI/sERRydPCZwIyU+jSTEGxj6ZeJp8YgZdKzI7X6aayrE6WWL12iL4Grl0gc2N5rkjz3CXZuuMfv+YmfkkM9NFGi2fltOmY7f50fs/ZHfzAYV4gm77GCWVZe3gmJ5pcrLXRrBClmevIoVJdh4dUUxPoigel67cxItE3v/wxwSBx/TUPKbhoWcV0rkKcXUGMcjhjCMSYopSYgrFU+mPXAJcLDtE0XwEtY4oRuhikWI+jaypzCxNoMYTGJZHo3NCd9g753VFY1QtgWXZGMaY7a19zLHH1vYOR2cNhmZI/XQPY9ShP+iecycJgRBPFBj4PovL13iy9pRWx+DcoOQzzmQYBvxkhfmZ+MszPuU5wIsgColfvXIRpOE0K9Pt1YgnQPJLhEGHcqHK5cuTpJJxHNuAQCWmq8wnL+H3Q5qnm/zCF3+ZSnHhuYjz6MGjizv+5P3Pfxrv/ej5MySTnuAf/qP/FE86QYuLuK7LeGQR+SJBX+Jky0VRcthBnJ4psbh8jVdeeIeVmTkkxcV1XbQY5z7RF5Y/3bZLoZhka2sLY1ynN9yjUJaQtSGu6zG3lEBLd1AkFS8YEkVjBk2RdLJKoSoxHA7IFUsoskilWIUwxa1bL3HU/DH1+hA/cLl8JQWWTFKepdsKPjclLSSTn6LVPSVfjTBHCXZ218hlpqnVD6hUsoiyQ3kqRBADZKHM6ckWnfYRx/t1JDSs8Yh2u82TB3XOjlxODw+5tnyXYTei0Whw7foylmOzvbtDKIToiTx/ubHF+2sN3nswwdf+F/9HpueuoDozmHWHhpxh6dUVrt4sM19+nampCWStxIP1PYoTFdaefod6rUc6M0E6pzGya7T7T/nxD75P78zj7/+ffpf6icvLL7xOrx9xdDrGPgywN07YODmi1V5jNF5j2G+wMH0ZXY2hqmkebX5KfTik3xIpJQQsq8fk5ctk0kkG44D+2Qn/+lv/d374wTexF2YILi0j/eZfJ3X9DoTnlAlZ0lA15YLneH5iOT8wPRsCnh8hyTK2Y+P5EalUkn5/QBBCJEggPjuQPdsj501qekwmDKPnHeHnsgghoghjc4zvBdj2+OKyz0PJZ/fXdR0l0WNj6x5BEFEuzFDI5dnbWyebzxJG4UUXfIQgyUhKAjWVIpax+OM//KfceetriKR5cH+bXHaOb33vP2P38AMurc7wwp1zUBc4MhOlqyzO3SabTYNgsf70CYcHdeamb1Ip5ckVBaoT8xSLeWaXctiegawECFqDYORx4+Y1RFxyGZHeoE6uNIEe11i6Oo1agHJxBr89YDozwTuv/SJWK4Y96BMTQwqFGNNTi1Qm8jze/QZyskU8E/GD935Irxvy2hfepJDJcuvG6/zd//Xf5jvfe59a45TytMjhqcvoNMKw+mixDFOVFE/XDwhjVTITtyhnynz44Q+4++rXWb12i5Pjx2QzeX7+V3+ZfLGE5ErUD4f4lsfqynUiwcIJHWaXJ4jHCpRyNzmxjhHKHpnpFKY1pDoxi6RKnDROsMcWT3a2EWQPY1Sn125z/8m3+cEHH3Hr7nVOzz5lNO4RhSpLpUU+fHCPQnWZKGXSfHqfnW9/k3/yn/8+QttjKjUgHsm4lsebb73Mb//O73DrtTtEUpK52RcB2Dt8SiyZ4vL1VS7fLJOv9Aj9gPHYxjRHtM8CVuavM+7Fma5c5vLiLAkLXru2yP7TTxgPTYxRAz+w0GJJjo8bqK6PHIIo27S6ZyxfmuTp1lPimQqB7tK3ejy8H9Dvxfnw43Xuf1ijXq/TPnOpH7d4uv0DNre3sccaS4tzOF6fp+s7TE5O4WPxwUc/5PHaE8zxCM+zCXyB9cfHyGLE1vo+jmsQBSLDUZdHaz+gN6z9tDDxp2/KGTpH2JGEqqQw6320ZJcgdJGCJXQ5pNY9Q9ayHJ+ZNFotuuM14nqBdl2iUCjg1BJsH9VBM9l62OP27SV6o08QxTyFcoZu4PPKG69xfLLFJx/uM4WM5xh0d5qk0jqZ7CpbOx8ztzhLrx2hxoe4ng6hwN7uGlFcQIkpWHaFmcp1JkpJtg/vkU7NcHBwxMsTrzE9rdE4gZ3aMUenu0yW8sykpnH8FkYjIjNVZNQwycQSfPC9NX71l36DtScfEUuNGRoGsbjJN7753yKnE2hyCYIYyUSertnED0fk8kVk00EcS9i2TRBYpGJpPC/A80FSIRb3iWnz+F6EFwwQBInAs9G0iLmlc6HVuBIxkZ3Hdca4zjGZvMj+dpcwgEK2gizK2OMxEQHDYZdkTKeYz9Gsd0noMVRFx3JseiMTLSbjeyGnh6dUJixkUeb999/n7kuL9LsC1SrMzFaYmqgwNNsc7UUkCoe44zFffvtneLp2wNRMnB8P2zSbNgtzE0Rjl+5Zj0y2SKkgEwo2+VKc9cd7KIqOrQt8+On3mKxM4IY2nlUjrcu0h1ma4126bRsvgkw+iZo9JRimeecLX2N7/xRLGDIcaORTVzg726OQLWP0NfC2idszeBxRzqc5GYyIhBR2JDC5MI/Zi9EeGuSKIlqQoVpOkSnPc3S8zaXVKSJb48rlyzQHLZKpAjduXCOmuTxZ22duNk+kKHROR3jO8FxDTBCIxQRC36JamcTAxxNc1LhKNl3AsutEnkggBHTrBoLmEIYikj9EkzVMQyKW0vH9IYqcJJtMEIoiju0yPTfLwBpxeHKMrscpZstsNdsEoUjNHV6gMYEQSGslBAfWnm5SnVwgGRcI/M/OgUEYIojCc8z42fgJ5eiL7M7ztCfnJfWt/U9QdI1ez0JJWHROVNrtJ0xPLSB4EplEgXSpwt7BU3TZYzSMIyIxP3sHAHVnH+dHP8J8uv78js/GM3mX0eMnFC9ey+fy5HNJMtkkrTMH0zKolGcxRl0sT6JnHhIIMRbKc6S1KcajMSftGqvXlyDUadR7aFKcbEpCC/Mcn25x5fJVBr0u7XYHRaqyuLBC4EccHzVQBA2zl6U33EJMmSxOXKZeU4nkGmcHD8lPlLDVIZXkAobUJZmYYOzIfPhBE8MesTC/wmhwgtfSyUxlcGyXzs7nH5k3b8zS7Z4gCwKyIHN4coCme3T6u+QKcQbDMenkeeCzPZN6zeJrX/wyJ9/dYn7qFqJyiZPaMem0Sk3uEoRjrly9y6PN757rsso+27v3Mcwab772DowX6ZubTGlFDreH3P9km2+kJ2icBrz8+ps8+O4xKS1L50zgyPkxL979Wc5qA5B8rr0wjejmcH2Lo+MdcoUCZ2ctmrUYL724SE6rMpmKsf7JPp43orbjMnctRf3AwQt1JqQ4r7/4Jh9+7w+ZTRToNnSWXrHp90SePD6leZLkKz+3hDN5lUsTIx7u9hk4RTQ1hTc6RtPTNLt1Op1vMpGbY2HxEsLlZYRf+VXim2s4ToQg6iQS0OuNn4uL/yQ3VxQEfN/H9fxzTVzTJZ1OYRrOc6vGc7DIhQwRBEFEIqaQy8cxRhZhJHGOOi/gpnh+KHPdAFm66NIWnvmQf7abAKJQpNbYZWXlFqfHJ4ydM1wrxvLSCxRlEUHsnq9/QUDWFGTJZTCICHSRjUc/oPHqm3z5a7/Igwf3MNw6e8db5AoZ/LBHPl3i/ffvkS3qrCy8SqkwQ7f7MVPTFdbW1rh+6wqi6rG18ymyJpNUrzMOBjiuwcL0XXZ3jvDqSS4vzrF/uk1WzyHrcSqLBQR5wKjeZXnyFVrjNRw95Fd/+XdICDFKEwpju8ihV6ZXN0iWZNLJSWS5TetIxtNtPKdKLOERhB6ClOTuzVne/+RPyeVf5ktvf4VWcwN3WGFu6SpfuZnmw+0f0u6Z/LV33mGu/B02au/S7qssLF5m64M67777Lu+8+SVuv3iJ9z78LhsHs8xPzBDmbW4v3+XdH75Ls9nk1vU3aXU7dLpdYmmRWvMJV64usbnfI51UKegiZl1mcnmG+sl3OdrzyU5q+LZBIlYhlh5ydtil3/Xo9k1uvnCJ5l4fchID1+Kl115mb2sXtTTFH/3oPUI1w623v8o3T86oPxwxXZR48eVL/L/+0X/NvblPuTR/le36U463Qr74lauEkcUnjz9hcjpLIZGhNbjHzVuvIAoL7O7uU8xZPFn/mMbogP3mfezgKvOzkxyd1NDI8/KLIa7dYbY6x9hskkoWkQWNYdBmaeUqVy59ib39e1xezjK2BDqjBme9ewhlhVgyIp2ZR5DyBNGAs1aD8uQlJqZ0EmqLRELAc0R0Pc70TIn9vTNs22ZmYZ762QBdT+N4Q3xPYqpawhw6XFq4TLOzR6djkoxNkc6NabYbPy1M/OkzlIo4RTpVAmnAwfEjPCvDjZVfILAyHO4ZqEoZ0zLYO3nCQe0pkhrQancxrRGtdpt7H6xhjDxqZ2OqM0UCNNrdgL7Z4uDwhE8fHPHp2vfZ2r9PYUKk3ujSGjTZPjhjaPo44iFDp8HxcQfb7aCrOWqnfRwzxauvf4FLlduYtYj56QxntTVqZ0fg53nw5CmB3CWhZjmrdxiG2wzGNqtXF0ikSwiyT380ZHk6TjVdIitniQtZbl9/k0j0SBQ0oMDDh0/45N4amayOYxqEfo9CJcn27h7tTp1sYZrDk2NiiRBNCxAikXgsgxbLkMnnsPw+fmAhCiq25dFod/CCCF/wGXsWkZBic2uXRr1HLJ6h3euTzUxwVhthmwbXri6RycSIqRpBECDLMslEmmp5CknU6Q9aXL22SHUyz3C8SyIdUKlUse0ujuOQTKgEoYOqqzhBRH9ocXDYYGPjCTFd4dGjHSRZZ+Vqkv0Ng8W5K1y9cpkrq6uUKmV++7f+BslEjnQmQaM5IJGCN175ErqYQAli1Bp1AjeBa2gcHtfpDnps72yyvfMIw2vQ79v07GOS5TJyLE2hkiBRljg8dfDdPqen2xiDGtPzGpmMRD6XJptX+Y1f+zV2d3c57evEsgGz1QIYSfrtFrmchDFoYvfGdBvHxJWIpblpFubSvPDCSzh+g+pslVALca0x25tbyILMeGzR6Y4xxgIjc0jtxKF13EVijG3tkiuEXL2xQiKn0BgdU+82iSsC3igkk8ihaykG/TgnNQNXNBk4Prgq+XQC2zAJLQ3BB7M/xOoGpJU0kWOjKAqyptHp9xgOhyT0FEIg4/sRYz/Eiuq0uq2LLIdAFIIxahOGQxRFwRgGNNq1C0el87peFEUX5UHh85nJ5/2xz159Zm33mWiQF4Q83Vmn0RzS64Dnm+hylf3tGprq4XsOG5uPUaQkW/U1NDHLrWtvMDSt55/hfPzheUlR+LwE9DPo+pNlb3Vnl1//hf+YQVPGMSQ0OYcYxQlCh2B4hiLY9PoeG3v7rB99RLO3iS6bjOsjBi0Pz+nhWyn2d07pN21W5lZpN48ZjroYQ49ysYRpDDg7bpBK+5jWEYFrcn3pHVzbJQg0tMSQa6srTM8uo8gisuDTbPTpjruMPYu90w9Q4w4zs8tY7g4J3SEvVznaeErz9JBsVv/c9DyLbC5HNp+jVu+zuLjE9OQMlUoB23LZOvgBW7sfIIWz5NMLzM5M0GuH/Nqv/hojcxsxsnnh+jusPdzhzu1lXnzhDUIxZOyaBIxp9w+Zn11gIrvKvfce8u63/i3J7CR7G7ukizf5jd/9a8zNzOL6EYe7LTT1EpNTbyBHKvV2n8c7n2L0n8KoRW2nz+HBI1yvxS/9wi9TLZUp57P8yq/8DMZgzEz1Nr/yG6/RGyeZnZ2n1t7hrHbEwnKBTfOMjpBg7+ljPCdLNr3E4XZEd2jg0GVhcYqvvP067f1jEANkKtT2HATbo9054878Kk/3D4nrOTIZjw8ffAPLGpyXn196Ee03fwdZimPZQ4LARRREPlO6PNeiPG+sEQj8EFk6X/GZVA4BCc/zzu1FowtNVsSL94sQCWiagqqK6Lp2wY0UfgKAnq9ZY2Rf2C6el6yfrWP47GiWSCQI7AqJeIq7L9winpAolyt89Uu/juP4BIHHMxDsmBa+F6JoIW6vhRcb8sNP/pDHD/fwoh56PEY2WyASDOxRgd5oG8dvU5kq4noW60/vMejbhL7GtZuzlCclGp0nmIZLOl7A4Qn9QRvfnKNSXEFVZfzAwvXhxu0XSRcKbOxt0zNM0rEyeS3NsF3HsXXiks7R/pB7j5/wz/7tv+HdBx+xtl5navI65eIstdM6Ca1ANr5I7XSP46NPWZidI5XMkNJTWB2by5euY3ubtBpnFHKzxJMW2xsPeLTzkNOTIUh97j1+HzcSMA2fmdIyTtdlfv4qVy9V8Yb7nB0MmJ+/SjkjkRQdnHHA+tNdVq9cp9dv4ro22Wya3U2B5YW3WZi7QUxNMzeRIqvEyGpJxuMdtjY2WFy6zuWbs8zmJ8mmi9iuiigrTBVX+J3f/EVmpjMcnjRYeOEyE5Np9g92UE2BbC7GfntI7s51rr7zCgPbxgwitFSJ2Us5av3HXH/pKmJWYqt1SrE4yW/+jTdR5AhRMVDTY47qO3zjD/+Cp/ds1rfX+OO/+O8Zaw+ZvXNEZmGTL/w1m5e/NA1SimGg0XBPCFMhcnyRcnWeTu+IZmOb+uE+nqwRCCkefNrhk0fvsrO5w/bOA0aDGqHlUJkpcVC7j6bMoekpdvbvMzKbxHRIZzy6nSaaIqNpMv1+F9sKODo6ol6rnVta++fUND2WJpWcJJlSGRl9LMvB8yw05bwxVNVEdnf2iOs/vZf3Tw0o89kCtdMRarDE9ctfpVq6yZ/823/DwF4nk80ThB3avR001SWhZ2ieSpwdivQ7Bjtbh8iRhEyMg70mB0cNPn24xd7RId2BjeXZSKka73/yPZqNPv3+KfV6DdC5cf0WRyf7PHj8HoO+Ta/bZjQa8OTxBqqWQ03EaLYC6j0LJJXhqIGuZYjFcvT7IxKyxVRqAtc54scfrDEaRlSnbIbHNp1GjSebT+haBpXZRUaWz/zcHXKpMvmcxmRxlv0nFlowiR6T8PwYx7sOwRisRp5Ow8B2AgJPZzgaUSycyyXgKUSuSrs1pFarMRq3mJqqkk4nsa0I1x+Qzp5Lvgiih6rFEDN9BNUiMON8+uEJdmhz0j0kXyyQTqh4vo3jGSSSOnpMwTAMTNMmkU7gRwGSCH5g0+l3SCaTlIplFClJXNNJpyxefPkK5fxVECWmFuI0Om0UTUdRYnR7p0j6gHbnFC90WV25xsnpOvX6DpdWq9TPejSOD1heniYW09C1NMWJBPcfvsfYHLHxZIN4QuHKjdusb+0w6pv0eyMOT1qEUgzPjRPLZvnKm1/B6kpUFzzy+Sx7230GQ5+EWqBT71IuR9hjkWRKodHcZXXlFd774V8QRQHBaIjo6yhKkUebT1m+s4iUjGGNkxjmIZZ3TFwJCWwZLS8y9Aw8b0AqLpPKp5le1alOa7hjk0GrQ7vT4OnWKabjEfhxzFDB8jRKk7PMLy0ytkNO60MSyTK53CSTlcuUJiq0Om1qzUOS6ZB0Lo/r64ztMY7vMbYElJhIJIwRBAE9pqBrMYYDF2s85vD0DCPwqQ+6qFqCdLyIFIqEroFMRGiLuNb4nO8VnmvleaFKo9tECEX0hI8xEnDD0WcZk+i8pPdMSPlczecnyI3PXU3OQaj4Ezu+0TIwhnFkMU3j1AA/RuippLMp6qcO1rgJoYtMxGxugZySITBcAu/zfM3z0uT5fT/jUn42av/w//38q0xVV7gy/xaEAtVyiVZzn4WFBUajFKM+lIsaCUlC85Msz95lc71Fc7DJ2GwxO11BCUvcWH0RXZOYnpxn2I1QhApTxZewTY2IgMDREHydu9dex3eHmH2DamWRTGkFLxhyfLhOvpjj5KSHPWqSKA0YDwM8Q2KquEq1NIUqq6jyNNNTr6DnBH7ty3+DicwEV5bvfG6Gokmz16B+NsI02thWGy0qsbv1GN+FcvYm3W6fSiXF1curpBMi9bMh5iCGbUaoosrNK9d487Uv43sSo6HO/vY+op8llchSKhQRozzLc28wUV7m9bdv8OjJEZ6pYZom9z79Ab4/Qk5I+AjcnL2EKGjE4gqhZ1BIztI6tklqCWRRZK56h5df+DkiL8aoF1DJ3EITAyZnfB6vfcSj+11QRhzubrC0MM9s5Q7vvv8/0LIsvAkRSehzaXWBt15/g2uXyhyvC1y/9A6t/iFr64+4tDCF5PQ42julODWLok5ClOW0tUt/2MAfNBmPA/R4mz//7j9lbA3xLy0h/fW/TvzqDVRFRhRBkn7ChvFCooqLUrQggO+JKGISARHTOPerP5evPAeQ0QWoi8LzDKSiSoiihKwIBEHw/KAVcd7AI0oiruPjusFzLfSf3D/Phuf53Lpxg0/vf8TY9JibvkUul6PTOWbQHSNLGnCug6koIoO+w9XrK+Ryl7k0/SIKBbrdHYJxnAefbHL7zhWMcQc1McIPBHKFHGf1bertx0RKi1KpgGmaNBpnfPLBDtX8TSarZURBZmS0MQ0LnxqD8QauZyPLPoLscf/D9xh1XdK5Fd5882cRZZve+JCuUccY7ZOOZTkcnfLw+DE/+M63qMbn+Lt/+1eRJ0xs28U0B4x6NrnYIr/0tb/H9avXGQ9tJiayLE3lcUZj2o0+jcYO2UwCPZa4kOKRGI5PyWfizE6VOTjb4NFmh4EhMBra7KzvsD1Y5/6jp3z7+99CjcvYjk+xMsv2wQ5yYFCoVMgVU+QLKXrmIWNvl5XVCWQlYmAcs7mzgxaLI+sqqcIColahUJ6nPFHmgw/Wsfou9iBibnYay9CYnqqwtb7Do4cP2dl9yuF+Cz9QmSplebS/jt33mFu6ieClONrdQkLm6twE87k0xWyGrY0WuWwKwXNIJ1x8x6DXq3N4VKNZ88EpkcukWF64hB5P8+RRg7mFDCcnT/jxj3fZ37d4/EkDu5/j67/4JfKSTjWT5vRsh/2jMXNXVokXJlBji3hSyMbxE3ypR6HsIEYRr7+1QiIR4+nmx4hYLC5d49aNdxjZJxyfPaFanCcdS9FrmKioFItFzmqHHB0OSOVUau2n6AmZG3eWqU4snlvXpgRKlRipbITjghgtUp5McdpoM7Y8coUM2ZzGpUuryKR+Wpj40wPKjfX3GbTbeJaOKNrcf/Aj8tkp8qUix2en1GvHxOUCg7aINQTBixHaEr5rU8xW6I0Njptn9Psxmt0BTmDgOwHdswGt0xaPH50Q+HFSyTSqkiKlT+OZOfo9k37HxuzM8OKd14GQYj6PEHnYwR7t3gnf+Fd/yfrmp6TyQw52OjQaNU6aJ0h6GtOJkMICkjXDC3cmCUyPw7UAWQnoDUSOd1p0tgfsrJ9QOxzx6b37iLLN3tE6B2dbfPUX36TWOyQIAvLFBLKUoHXsM+pY9DoBbuBjjyPiyQK9voVjB9i2jeebVEoZECSiUGXYjhAEhUIlolhKsTg/S6GkMRwYRJGInouTSCS4eX2JN9+6Srqk0TLPlfwHbZvtnX0KxTyWazIy+yiaSqfbp948I4gM4uocWxunGOYAVdcZjgfs7OwwGojMz+fBS6PpY1RNIlOQiKVdBsM2kZ8g9ONkiwkkOY2iuUiSRKVY4dGnT/jhDz4iRKFvH+AHJpeXFnn11ouMO2MCt4eWNRDiEdXyAiPDIpMrEVfipJNxihMVBkZAozbGGubYfnCAGDSx2kMKukpBn2CiOEW1mCWbyuGYMSQJBGQGPRtEm3brjDsvrjC9skgYk9k97rJ0aZZEOMXGR4fksyniyQWyxTyXFm6xsLTI5buvslt7ii6U0BmwemmSXGkRcyTgWR4JuYAUCgz6IwRFJZYfkdIjAifGoBXw8f179AyDSzdfZurSKrYm4sQVktUMoR7Q6jcQBBd/NKKoaUylkwwsk+PmCc3BGWIiJDupM/IGSPEkpckyCAJ6IokvyyiJBGf1DqOuRUyJMRq1sD0LJYqRTeYuwNlFPBNFAm9Mb3DGaGCjaA43Lr30fF/+ZGbyos78V3Zu9NzGLnr+3mfXRiDYjHou2bTM2DBpt5v4TpbOoMm4X6ZaKYI/JClIdHtrvPvtbz8zUgZAf+llhJ/s8P53DGN9HfsH51lKbWefN157G12VaDWbzM5NcHZgUMhWuXZ9Dl1VSCRSXL18k+bpiN/6638DUUggCi7d9ph0TuJnfv4lbt66wpPH66xenSOd9xH0fba2dmjVe4iiTCF1jdrxmNX5t4krGr7ao9f/BNMa0mgHHB885daVr2Bby2yv7xATYdRu0zvu0TpuMOz30BNF1g732esMWT/eY+XqbeJx/XPz0uxNpjMryE7EwsQCeGP6vV3UYJLIVZFlEUWRePzoAx5+tMGoHZDO+9imzfXLr1MtLvHp/U/otnp0u12ebn3IL7z9a3zljbcYtvtsPenz+7//J+hplYXLL7Nw6XWqqRTXbt7gzsoLJOQkp40TTjpDvHKIrVfRghC7P+Lq3Etk1etMzr/J2kkLMa5zcLrO5s6HbD49Ip9OMFudAbvEk/ttBHnA3ul9+qe7FOIBsjticNbk9o13uLU0xdTcPPFMj8nqNN/+0z/i2twtXr56nc3HaxweHpLKlvDFHCEBjh9gOWNgjysTJYKYRr48Ip7Kc+POEngOD/f/hOOzdVx3jH9pEWFxkZiWJQJk5bPQ9HxZX4j2+0GINbaQFAFEl15/eK4rKQCC+JwbiXB+MFM1iVhcwfVc4gn5PDv5rMnnYqMJCPh+iG27F/aMfJ41cjGSqQTNxiFvvPTzTBSr7G0fMOiYjIZ1FPH8wHYOgiNEWWTUOWJnYw80F0EQyeUHKNgkNIW7dyvs722Rz1bp9lo0W6ekkyUCP0JQAvrGDgNzh2b7gFxmmktLr7Czu8agZ5/zieUKqpwjCCLWHh0ThDaECSYn01ydmyCuiSRSGr1ej3Z3QH5ugmFooOfKhITk89P8B3/rP+Cf/Rf/irfe/jKCqHJrbo43vnCTF27fwXWHVCsT2GaPXquGaxuMei7rnzxlulxgYGyiqypjc8jW7haiauIFx5ztWHjRkM2tXW5dfofIVLl29S5Ns4lclmkdn1CdiXPj1VuMxhGyp1GuzGCqA2qdFqlskUIliWVGxLVJlubvkM6BYXbo90bkCgu8/uY7DAyLo/oZI/eMVDyF14+4Mr/E8dk+81NzGN0dhMBnPBYpTS0wvzhHNVfh/qMP8U2V8twUsaRDcSLH0c57vPu993njrZ9Hkn32mlvopSr7J7tMT8wQ0wXmJmcJTJFBt836k32KpQqxREDjuMdk/jLGQGZ6ZpXZ6RkWiy+R5goxcZFwPEc19nX6Zw4/+O4HhF6KF29+na+99bNkkn02Hm6SSZYIJYmF1ZvcvnkVbxwgIiAJCp1OxINH+ywuv0BxWuJ0dwur57M4U2GqXAVpiGUJVKbLdIwmnZbJRHWWXDFHf2ghSTlGpksmXeTo6IBSfhLfs/j44/uY5ghFVkllFSJRI1NUOWlt0hs2kOU0M9PLSIr//wUZfn781BzKr331Nzg7adBt1+mPRixfmWLYV1iYuoTmn/Bg60OWV0pAnXgsILRFsknQY5cZWR3iMYmx4ZPIWChyklymSqveQdJMhFCGcRq5rNMbOiQVjaODPSozVTZ2N7h94w6Bn6TVqzM1u4htD3j51a/x9OkGY2uMLMucdRSGrok3NqnVOwSyz4uvLlI7Evno3uNzO8KUiO07pGMJ7J5FLNBIz0yhCQLWwEcWkgxGLkedLc5OeghaFnu8S6PRQFdc6E8ThCImLumJIo7jEFNUFEnmaOcMWZZRNR1D7pPOpJFlmJrIAlAfD6gm0pzV6iQ0A8mXcCKDyUKGpJ/AXrdJFWIYgw6j0EfCww9UamcB+ZzH/HIVo+WSi2eJazL5TJadg31iyRjZtEivNqRQTtHrdghVBWfQYXpmjsgKqJ+INDsfsbh4iWJ+gr2NbWTZoly8iiaP6Bt1hk4Ze3xApTSBHOWwnQId45T5+RS27dIfnCEqMiNnmYOTQ15/52t88Pgh7d5Trl9f4sGD+2RLE8wvJ5GcBIIssziR5r3vfYwVWJRLNfyERiZd4GgoIYcqHeuIL72yiDB2YOQTSRny2Qw7e/uEyYi9kz2qS5PUWiblahrDgmQAM5NTfPDeAyaXsshpg057wO3VF9hv1Ek5PicfbtHv98nMTDJXvMXB7gm+5DMOQU3lsBwDNYozNV2i2TxB8yw8KszOV7EFl0EvoNcdsPV0C2tk0DdaFBJgy5BUUkwXpsmn0syXNQaOgd2X0BnhWCKKLDEcGYSolErzpPU4RuuMnmEiSRIThSy+lOeoM0BOuYwsj7ErIggWkiYwdtXzDXfBHxsNhgjVPL2uSTKucvvaWyzMXn0e58Zra8/36DNN8fPYe379c6B3oeuXev315+/3g4DhuMXM5DxbT3aYrObQ1QKd3gFXV18ilaiwt3WfF6+/ythvUu/6WHLIhx++xy//4r8HgPrGF0jduMro8dPn93mepfwJAtrovR+hv/UmCFCsxGk2Bty5ew0xlIisNr43IHBjqJrC1dvX6A97iEHA0cEmkReSyUwyNVnCMgQ8S0IQZa5ceZnOYIOxaZKKT9FpNllamcK1HTxT4GB7F9meYGZBxW8NOB1tM3GpQs65xZO1H1HUbZbjU9zvGkRynHQiheE4lGfSPHo8QtHrKOKAbL7E2tYhtzSZYjb3ueeiG0jYBBTmp0kXVU4PswSOycKtNNZ4QGdgk4tP02vXULQBq3M3iEyQIpGT2jGL89METp9hf5uB55ObWGZm4UX+8lvfpBR7hatvpmgMtug0j5mdeg0Zk+XVHHGhxOmwyY3l1/j+j/8FlycXiDcL6AmBQjGLLQr4psdUJoPRP+T63B06jTMmZy9x2n5Cd/iEO1dfR5ZsfvTBH7MyM0WunKfZAT1Txhv7ZCbnWZ6fY+vwPkZQJBpIROECodJHSU1y2NllKl9GCzMkrBadwQauMUvkKzT6bSrlKZzIoF5fY+CnSQwniN2O2HxcIxmbYjaboW9sMx4voamJ8wOPKKKqMSTJJwojIunc4Um4AIsXUuXnNAtcer0hvisgifLz5jMRkZDgXE6LAE2XcD2LKIRkIkVHNC/2hUD4TBpIuMhWRtLnNF7/6vEskZZw1AFST2Nt+5TuoMVEsYCeDKCcQJT6EHkQged6TCxeZatvEkY9eokR/r6IpdeJjDTFQoVIOEYM58inHEZmg5mZOba2B5h9n1R6mkQqjWOHNBpNdnf3SGd0MqUUBwcNAjfOypUlJFHEtyMyqSlqjSafPtkiHcuCnyAY93B92D1q8vpLX0S9csLsdI7DncdMpjV2a3usnX2Hs8MuN1ZfZRiaxMMUSqKBZ43otE7xRJnJ2UVCS2e6kkHzbWxGmGOZheUVZD9BMtsjcAJsx0dMuXhmluXqy/iyw8AxaDXaJPUYxfIC+/v7DMZbCCySTBWQY0O+98G3SaenMIQue7U9WqM4mQkNPxxzUjvg+GDAiy8Uuf3CddY29vmDf/E/UC0U6Fs1phYqnJ2sYXsy2bzCYNSh1TqmVJ3m0cM1lqrT7Dw9RkzFiGUnmdMdPHkAgwQaKZ483sQLc3zpnSqePyaVKRIbjhh0m5SKFWrtJr3uCTFphriSJpAsnJjApcsZMrm7rO/XOT3usjx7m3S2QdLqEjkKufRlCqk0g2EHTUuTK8bp1lscGe/TG92kNKMzOVGk2WtSSGa5dGkS2/WJZJnT4zYocVzPZjC0uP3KLTJ6BnGcQ6KLH47Y3ushaF3Ojm0EISIWl5HQiOQhUpSidrbJRHkFxzVxPZOTszqiBLVmk4WFeeLJEmO7QywO8WRAr6PS6ByxunILMSySzvjs7D9maNg/LUz86TOU7khhbuplXnn161y78mWckUY2maLZbGEGJnNTE4iMyOcCLMOiOpEnlZYpVTUUPYbjWFSnMoiCRnkiwXgMsWQM14uRylSZWVoiEHWa/Toja4CWEHGDHnE9z/FBi9P6Jr3ekE8+fIokZNnZ3WBktDk7PSAKPeSgzbDexxnJlArT1Bt9/uW/eJeQGCvX5oinM1gDhbg8iZouUJ6f4+rlVZJqFstKkIhX6Y+aHNXXMQyDcnmC7Z11Dg72wNMgitFptXGdEdWJEo36Cf1eCxA4PW4zGI6RJR1r7GMZEoOuT63eJhAj5JiKhIPjO1T1MpEb4oo9SgkdORFDqApkZyMm5yeI3CL9mkOMLNgB1SnIZHK0OyMabpP6oMn88hJnowHzqzkWp3NkM0Vuv1TC90wEKUshNcPl6zcpl/OMPBPXd3CFDPVmk939R+SzMWYLd9DkFNn8PJF/BXMkksonMEOP0+4ate4+sUSAHbZ5sPljjNAimYzz8ONNHj95yI8/us9p+wSREu44IJnKIzsiGSWDnnBIJWQ++tZfsFJJ8tYXr+I7EboQ59OP9qjk8mhBldlUllHXZ2TFiBSVk7NTTo/rtE86lPUCghFiNE3UQORkfcDu9n36Zof1o0OCdMDQEpGcSbJKHNeWeLr2kI2n9zCNkHy+SK9fZzSAuJpDUTIU4gkS4ZjQ7KLjowURQiDR8yLs0RjDbTJqn2F2XMqJHDnBp5COM5Wp4owzqOMcXkdld++Ex5tPOTw+o17v07X6WCOJlYVZdCViYeoyzjjCtvt0ew2iKEF1YoZyaZLIV2k0zkgk0gz6YwajBoQCohCj03JwHOuCF3keysLAwzZknFCj0zZ44+6XIQJ1dx/nR+9hbmx8lmV5ZmUX/U9rdmIEqSuraF/4wvM9/cmH79NvWmxu7xBGEp6bx/VC4noJy7DY3/2E8qSElg4Y9iVOT2zKxVk6/UMODjdxlhYASN28Cc8aGP4qkfL5d/vs5Ts33uD2C4t0WyalSpJLl6e4eX2FRBzmpxbY39uhXJ5kceEyI+uMdCZHTE3T6wwR1DO6vSaO16U3fkos7XH3hS8wU7nD2++8yt07t9h/OubhxzVuX3+FTDqPEMVIx5eYK77OuFVid+cpkxMraLE4yCNiMYtq/hLCeJJKtoLRayFjo4VTDDodBm2Pt774JpXqCrFE5XOz1e2giHFK2QTNY4vFuXlefOlnyJem2dg/YunSHN1eiyBIkBDnyMRKFAshrc4TJiurPFnfwBjXmJtcpBxPUyDG6eER8WSCuy/Nky2muLG8wFQuQzZpECkBR1tnpCrXSSYyuHKCF7/4Mq22zurKJAJdcrkV/KGDLKtoZYmJpTlee+VVZNmgWMhw6+prTJRjpPIS7caIV178MvniEu2Gj6LqBJKF6wRMV69zclgjn5hiefZV3vvhj5GEFAUtx7WFAilNQ1USLM4vcHP1JglRQ4+niQvn/FJBcugeG1BKU50vsPrqLO29BpWJPINRk55xRL1xiqrLF1nFiDD0CQPhohM7QBDEz9bOBZ1SAHzPR1FUAl++WGPPWsHFi3K3AEIAUUQspkMk4DgukgyKIl1wMv+Ka3j0LBt64YwTfWYe+uxnu92mfWRQmK6Qy6V5++eXGTk+hwc1xn5I4PsXnOIIWVHQFJWp6STpdBk9HRLIBt1THVHW+HRtF02+SimfZ9jfxHE61JsWCa2KIlTpdYfUaw1OjwYk0xJXbxao1Y9whnFefeE1bt+do3HWJ6FXWV54mXZniCQJxOIqhjHi5p1Zmu0WkhgnX4jTH3SYmZrksFEnlq0wcEY83f6E9bVtEprE0f5H7G9/hGh52IZJsmQTaRJTM9N0O01G41NOa2eMlIj2oEtRirG3+ZR0Os2wO8L24izPv47tdkil4yhxn/sPHnL56jWq1SoiMg/vP+Jnf+43iOlpokjAtHtsb5+QSIpIYoy4XsCPupjmCFVJ0GqMKefucPvONWq1BuYozauvXWZxpcTu3gZClCIVv0K5vMrqjelzTWY1Sbvd5dH9Gl/54m/hBgaK5oLgIAY5fNeleTjmtGai6VmWptKsXs6RyqX49L11jFGTfm+Ipijc++RDCqkFVuZeI6EnmJrJgh/n7hsqbfsR/YHCVGWKcW9MoaRxcBzSDErs1vcx+iGFQpn5patokkwuO2YwPqU8X8Dy6wx6dbYeHZKWFcLAoduJaJ/tc7DT5NU3XkYWJY7bDU43I1JjONkbYQwt5NiQ6pxGf9DEsQNcT+ELb71DLJlAT5SJAp14SiKRStDteGh6nHJxBj0xxjQ8rq/Oc3xwyKjfZXIih20MaB+bSDikYxqO12No77Gx+QRRiJFIJH5amPjTA0oPg+29Nb7//ne49/DHOE6PMDTYPdolkAWIcnhWhkpxhYReQdOTOEHEYf2EWDaOqso4roKsJml3R/RHA7JlHyUWR5AU2vV9Agdc87z0kM1XCShi+hIj2qgxle2dU+7cfplWa4RpdRn0+xSLRcLIJqkkEAOVyE/QbvgMOjLmQMccRXzy0QbDfpP8ZIHuyKPZGHBSP+bB1mNOm3UGw2NqzSP8yEVWFZKJLMOBhWVExNQYrjsicAEhRBQi2vUWjjGmXCjQbXcYjMYk4ilsy8W1HRTFww+GqJqAaZtY/hiNDDoKYkwmo+cxuz7FyjTYBm27Qz6dQghsMpkBr965QbPWB8EjllYZBCMM00fxCugZgSf7m1j+mHEIbkwmlk2hxtKkMwnUlI0xrlPvdtneOsFwAk4aNUJBpVhOoMRSREpAKpnnxq0F+qOAbC7FZFVBlcrE41l0fZLp6SpRIGAMPZLpFAl9jvFYpDuoU66WGRp9tJhLvqLiBAbxlMXcSoxYMocZgZYLuXF3lWuvlTBSDYozMYRon0o+xs3VVeZuLnP7xRcQwhTOWEBS40iKRKvZxzYjhh2TXmtEo94nny+Sn5pAFLMIbgaz55BLpomwOTg9ZOQInNWOSCdziGiIoogiqXSaI+r1PuVyBVGR6fZaIERcWrmOa4ExHKMqAvZ4hClYHO8eEg9EMskkoawixHzSWYGZmRmK1RSirpIrJpmpzIGfRonrRKLHsNVAVnwOD4/xXQXPhenJeURiiKKMH41JxCQE0WMwbNBvO8iCgufYRE7uXGg5FIjrOVz/mYjzBTAMwR4IWB0RMcriBJ9pgpkfvH/BtRSfu+ucX/tXe1MhEAKSN288//eG4nFv/fsoooLkSkxPzzIwT/DkGrqaxzHPtVcGPYfHT7dQtDSprEJ5KoasBKxvfPgT95MusONfyecIwnNQaTz5TOR8qrrE21/4KiurBVxnzPxihSurRRamrzIY9li9liBfdmi2m2QyVdzAQNVE7t5+g0K+QrP3AGvsU65M0jeaKFIaxz9GlRWkqMRv//ZvMXfJJhFPMjkTxx47zCzlSMbKSMGIu3fuMBqOCUmRz14mo83iM2Jiusji8gLl4jW6gzMM/xRkmYF9xkf33uPj+59iucrnpuMGLM4XyagFxNBFUUGIqew/3KO+2Wbtgw2S/hwFKcXw+ICdg32K5RUSiSpd44TXv3QZORHjrGbTHYwZjE+IZxVqzQbiWEaPPPLJJGMnzg++833+6X/5e4wHMmsPPsCvWdy4OsMXVn+eF+68QHpyltuvvc237/8TjM4YRSojSTJfvPYKvjXmlTe/yqhZI6NWuXHtV5gsXSKVyzJRvcHxXhc9p2LadQadkK999R38oMZpfRMtPsC0nzI5UeZLb71JshiRjCWJZ3SWyoskjTjzUwsEcpKx0EKXHS6trnD75s9x7fI0x4f3qJ08oGn69F2Xw70+cT1HNptFkmIEgXdefr5166Lc7BBG/sVB6YLr+Fxk/DydGAQRqqIRBBIgPPfaFkQBhBBBPN9TsiIjKxFBGKFpGpY1RtVkwovy+WdNP5/RR57tvX9XhlIUBVq9BrunG9iyx9HhQ0yjg54o4Q3Pge65exXYlo1jCgx6LrF4lv6oz9h0mZ1dJJ0skExDr9NmOBwyObFALBZDj6eYnZ1mZXmZy8uvMDZDXnjxLqFT4mRfYGX5OlPTGXa3jtnfPGZpfoGT423W19e5vHIbxzXxjTLpZJl6s0a1ssSgG9Fv24Shz9HxLmNDIAzS3Pv0I5zApFpZQZGq2GMJe5DhO+/+JU+29hgYGZSYwCf3vg2ORiaVJhbPoygVMpl58uk5KtV5RqaLFsn0WwbV3CzV0mUUKUcQhQhah/fef5cnj5rIqsud29c4Od2j1WmQyPoUSylK5RySLNAf7ZDKCszOzpLPT2NZFmPTwfZO+NGPfoTnhjxc/zMGTYWrV26ytLjK5KzGWeMJouLS7o24decGt2+/iBIbI4pQqx+RSk2zevUSgRsjHstRTOWJF2VSJZla/TGek2M8UvFt8KMmInEmy3OMDYPZyWUePHofTYc33rxJvzfC8qFTC6jtihzuPaVYjpEuVmi2DY5P1hGFiEqxgKbFkCWV5u4h45rI0vQNqoVJHCNiMqui+ApLy1fRsgEbm49Zf7LP4qUVpLDPX378Hn23CUYfP2Uy/dodRCliZXWO+ZUKvcGAWKyCZWgkkjLrG2uYZkS9u4XpnnFycsLM1GUazTNsKyAIBYr5RXK5PMOewduv/Ty3rr3Eww+bLM28gR738FyLYimLY/soSkApt8BoEHD16upPCxN/+pL3xsEWipzEGFuMx01effk1Hj3YJlcqsLV5xmjURggkNF1EEEQGZ13Gvo8vwqhTQ9MUdC2JabUZDkx0TaBUXKaU0zk4OCCV0DAGBpapMZQcDKuHE8SR1AhBSHF4UEdXCnR6ZwiSgxDpGMMIY1QnFctjBwqxZAZCgf5whB96FItlGrU25mhMr2tQawsM7S4SDiMkENNkMhnckYoVjJBkFTFSGJsOoe9Ryk0w6PUpFnIgBAhihGEYCKJO5EkQgmmaCKJEvz9AjHSi0ESQbEQxJJedpjtw6PeHpNBpmSOmKgUWL1/m4f01Rp0egmSSCXSsvoBccKjOqjTrTdLZHKEaIkY5NNnDju0zVSjTGJxQLM9g9ZP0+2c0Gw6L833cQCRUBVzDo1yeIlOqsGlt8f+h7T9/LEvX7E7st7053p/wNjMibWVWVZa93vW9zZ5mD9ndJIdNihqBgjBy0D8hSIKA+TCQAGEEjCCJZro5Td5mu3v7+vI2fWZkZHh3vN9ne6MPkZlVRUDQnQ96gYPIOJGx9wHi3ftZez3rWWuuVmcyNEBP6Hc9xKyMYNbYOdkiMSUkXWI2t8Te4ZBSpcTBYYts1iBJXFIpnV5vgN0PUejhOx7TyCKRRXxHptPuIdsR1Zks42aKx3aHi9cMhseHpOUyb775fd6//TnjOOFi1WDsKVz/3QS9MuYv//bfMlvOMnYEIschtg3s6YTW1CKl5/ATAV+U8AOBTx/eQ5E1DLlEkiQM7CG6WWRst1HFBNuTiQMHIU6YjEMW58rsHW4TBTqN1h6mBm4i40s6bddjdHpGJlOg128jJjFlMYsruOSKaQRJppLJsNPawop8aloR3YCcbuLZA16/dZWdnVMyRZ2R18SOYhRNZqaSZdC2Ce0ElwF5cxYpVcV1LPxwxGjcp9XsUihUMFMKsqxjTULqM1ky6QKd7gBF85Fl6ZllyfmSRBPdOAegIQ5h+HxI4UsF9ktg8ryoiiThecyiKDyb9E6+MBwH+OCzX+GGIzQ1i6koDMYDkNJYEw89G/Iv/6f/nF//+sfsH7UoVqsUcymspMRoMkVRFUql3JeY0ecT5M+L8pcFlef/njzTURrf/Dry013WV65yfPop+XwFXdKJE49iXUDPK2QKAnvHn6HoRVI5k1xlFkX0uXPvNktrAtUZDatv0G61SGs1jo4eUMjlOTq4zdTpktHmECRQDY39s89JgiJjZ4qsOmwu3yJyI/Ilk1b/M779+lt0+i6llSzVUpqz0yOS0Of3fv+7DKw+wXENIdNBEXyazS3e/6j9lfuiNe4ROjXcsYgsu3z45CHlhU3mclVu3fo2o56OrLcoF1d4880bDMWQZm8EkookgDPQWZx5m57WRx4rHB93OHp4xnd++ENKYo1e32aw5/P2W9+lXhBYv3CTKwt1jNk02anA4f4jfCPLxcUCjPq0Q4PvfeOHGNEchzsH2K09toYug/YZqysXSL1k8GBrl+trl+g2zygkAd3tz5ipmCzOzPDjrS1uLF3m7vu32e+csnhhiXc+eofAqfHGS28geQO2H97lwtxNMqUidjRlbm6Np3sPmcnq5NMG8ljn+Mldjid3kSSZJDJp9yxKco9Sbo44tvHiCFUT2N17xLfeis8B461baBc2cR98gCA+B3x8kVgjnDP3AgJJnOC4NoEfIwjPjdDPAeIL2QciqiqcgyxfQDdUPN9BN/Rzs+Zn9kJfbNdz03PxGUP55evwObAslyvMXPgWiujx6b1PmUnPcWHpIvd2HuDsPEJWcgiCh5CAKIg8fbpHfuFlBoOQfMGgVlDYOephhfvk8zqIIkOrjxBrbF74Dulshnd+8wuy6Rq2O+XmzZfZ2T5jrr6CYgwZ9C1EQcaxBywtLbGzvU+hWCOTBWsywRo5lJcTavUU1tgjX8gwGu/z+hsvkzJMms2YUjqh3eyycXGNsW1xfHaCKZVIpTRyhRWUnEy73aWYqrA6VyMVm0iCzNJMne2dLVL5Kp3+AN2skTM19ECmntOpp7M83Pk1uqqTz+kMBj1ymWWs7AGiHLOwuMLDJ7+hXnyZjPkNDFXAt9MoyKRNg5nKHB9/8D6CUmB5eQlBTFhZq3NyfEilVGU6EXntzRsc7m/j7sfUZxaIAhfb7ZHOXcMeNXj3vd8wm7vM7//BH/CzX/6CMIhQDInBxCedVThq3GahNocdn/Dk0Qe8ff17TGKHiAjfcZhZeJtcRiBbsLl795TF+WVeul5FViU+vfs5aipmZX2JSaOF1VGZq6XZ3vqEw4MTvv3G/4yNjQUsxyK0C8wsSDza2UeILDA8ms0jiv02rnwBYT2DO4DB/hZCKc/mzVeRZJv7W/voSYWlkkE6J7P02lUGvTP27z8knerx83eO0IwaxYpCKIzOHWSCHmetI/pdl/nlKrOzRbotn4ePtlnfrGI7Q2JkPvnsI159/QKNA5ez7ha90Sm+2OToZMh3f/g7/Kt/+3+jayUsVS/QaDQwzAmy1uXJzojf+85vhxN/a4byqDPk9oNdtrbOmFoqn9/bpzkcsXO4y8H+U3pDBy1t4voC/dGAqRPgJxOCYIptDRAkkeG4h0SOQqHExY0ig34LUeoQTGNEtYqoxRjZGN8PkWMTOQjJyiKql5DLVNF0hSc7T2mejThtNFHVNM5URFQT3MDG8VyC0EaVXITEotfv4sYW9ZUaQipLo3WA4CWEoYGsZVHRaR51sZIuUQiT8RRZlgn8hHIlh6bLyKKGMxaZWi6qKpPOpkEQWFyaZzqdYpppCqU8mYyEa08wNB0hlvDdmMlwStrUSZkK+bJG4se0Wj1u372NIcc4I4/l5XUur62Rr+ok2SPOxif48oDLr8/y0qVb1PMqJhM0s87x+Ix0SkELRTL5KYNWj4wYc3x8ypODI/q2h2nmGbs+x4cHeMmIfMFETLJMbRVr6jKautx/eAKqz0e3P+D+k8c83rtPZ+wjqQLplESc+AzGU5TUefyjnAg0TvsoSsBk4CEnOQrmOrogM2yMGfUdArVP0z/jk8f3mJktktEyHO1vYXWGlIUSOX0JQZrl8eOAzmHM/NwcjuuSLnkkWBwd7CHLYPsOnhgxcjwiEURJI2emiZmSNkR0SUNAZTR2CH0JAQPXdZlaPnEUoKkiUyvAsXysaZ/+qMtkbOP1pzjdAE0sE3gqjVabTq9NIZ/BkBSuV9JMJy4dd0Crf4CZaOTVAvZ0ij3xiQsCRk7h4OCIRJHwwykFoYZuVTHFLFNfQ8npkArI1rOMvAFHzT0SUcL1UoSeiCyZhEGM7/v0+21q9QK5vM5o0kRP+UgqiKLxYhZAEEWiMGR2oUSupJNNx+jKMxh3TqqcMzNJ+IxReZbu8cxzUoDzbOMkgeSrl3rgh5Qys5CojAMLRIH+qI1mqPgc89/8X/5PWO4B9YWEVmef0eSEciVDuVDl1Ze/TdosvDifILz4xC8EaS+YnRcORgLjd999wQQZKYVq6SJB1GP3YJfT7jFjp8/MzCVsW8ALE1aWLqFpEp7bZTAc4wQDOh0Le5RD1hwKuTRKkmP3yS6hW+AH3/vnXL56CSc+QZJq2N4UgTxaKuSgdY+xNWFqjxhYDVRNppBdodkasbE+x8nRPu+/+x74aTQ5pJSZoaQtMZ9fJR2XMWWIgj6ZjPeV19JiGUKF5ZUZVKXC2sUrVCKBTqeFll3hhz/6hxTLC8jlMqc9D+wuqbSMqggU07OcHh4hi2OubGyiCwYrcxUmzh7vv/NT9g/fR09L/NVffcD/8P/6j6iJyJWrV/HDCU9+tcvAKtHonuHabW6/8x5PP3vAybsfYX0+5endJyzMrLKQN9jd+hglX+Tx0S7TzimbpSz2+BTd9bE6PtV0mVcXV7jz7ud8d+MN5pYuMp4cU88JZL0s31j/ERdXSrStz/nlJ79mrniBW5dfoSgLHJ4ccmf/ESnZY97IkUhpopRNWcwjBhG5koyZKnHz1e+TMWpsPXjI3NwasiwyGAxwvGO29v4Oz7eJLq7B6hqKnEZV5POW9zMHg2fh3jxPv0mehSmEYYwoSV/sMwSSZ5n2AIYpIwoJsiIhiTK6lkJV5Rem6eeHjr/idclzO6E4/rIMGIBMKktKzLB9f8B69iKenee4e4wYeSwszyKIzx+uBCRJ4e1vrlKe7xIJHTIFn16vRTpV4vLVV5DIk8nUuHTlBl44pdno8fD+DqKYcGGzhqY7TC0PQ09x+doKmqZh6BmanTM2Nq+gawWmY4+1lWUqpTr2xGe+OksY9BDQKJYNHL/BZDJCk1Ps7j84D9qQZWQRFLFOr2XTbrRQMxFHJ4eMrRa2K9FuJszOX8LyErIzs1TXVohSMVbgEsUBkRQyTSZYnTMY9bhwYYMYic7QJa2UUSWVpYVVnHGKG9e/xuJahePTBr69wMriEoNmQuN4ROPskIvrF6nVDPa2urzy8hsoqs1wOGJhbh1Z9fE8j7XVOl50ys//7n2GozFKKuGsNWA0GrOytMztu79GDKt8++0fYbmHbO8dYaYz7O2fcX97m6d7DWTVQzUDjjtNinIVTesxUT/mwcMPubhaIl9RGVkdnuw/Zntni/ULV0AZcNB4hKxLlMpL5IrzpFWf1kmDrvcZbtRCsuZYn73E0+1P6XQSJu0EUdOIkw6LcwZO0EPSCtzfmVC+tcz3fi+N2nvM+nKV3/3Ddd6cH7EpPmattMeCcEqqGJOrqkQ9l0nPxlDqZDSDUDIYTyIK9YhETIjjiMPjI0QxoV6d5eKlGlJiMOkZ53GtYkClPMfc3AyuLZPKwHhkM51O2Nl9jDVxKVYk5PQu/+HH/47FmVu8/cbXyWcVTDXHbH0G09QJ3f8/ZHm3ulP6fRfLGTK2He48eER31KHTtcjlcoiCi2s7DLsTTM3AGofgZ8EpkhFn0ZUqiqKRzWZZmKsTOBLZdJrAdylXDcoFkziEUiFPJpUlk1FYWEqjyDKeHaDKEsNeF2IDWSlgWxGOP0VRDbr9HqHn49gWoihipDNkcyUUw8AsGrhiRIJNuVpAN6GQDSCx0TIO9TkdXTURRZ9KpcJoaJMyMkiygGdH+H5ItVbANLIgSNiBh5FR8GOHTCYDiYxpmhRKRSqzaVI5gUIxR6VSZmmpRMYUIICu22W9UkcJc/i2QTorsfnSEvXqEn3PhMgFYkJBRUuDmI4Q5Sx+ZFOoZhg7p0iigxClqc8FZHSRxfkKYsrGDwUODjv4gYAii0ymE8YDlyCUaJ22iBOPqTsljErIUQZv2iJ0C9iOC6rPveOPOZvu8NHtJ4ztCe3+iM6kzc5xl8FUoL4wi6CmyWhzGFEFRcwQCkPCQOHmla+Tps7ZyQgt0fnkp2MSSWNgt5lMm0RBiBeN2T7cIoohLyzSeNjjaGsf33PoNWJCO0W2kMVzXWRZpj/sE0wjYidk2OtTTuWJPBlDSeFYE+LAZmL1URWFarmK77uoSgYxEsllU3jOlHQ6QVcFsvk5EiL2uqc4XkTvZIQpZ7kws8o3Lt2gKugUNI22JXLWO0OOoWW52IJDRkpIaTJTq0U0CXEmIqaR5+z0GHsYoqdMlIxDovgkiUCz1UJUZUYTh1Z3iO176CkdLzqf/CcJCCMbQVCQFbCdEcN+QBB4jKwRCQEJ7lfkj7lSBssfUCgp6GaBdDb7BaGSQBjFIMpfmVblKyzheYEL4whR+qKBV65UcPyIIIowjQLW1CVl5PFdDcvuYGZNdvcsbMukkC2gmR6ylOLCylVUyafbbj3TvUHqjS8Gfb700V4s4ZmmTXyu8eQc/IqiydnZkKHVoNHqoek5RNlgffXrLM3dwPd9olAlCkEUZd546yqymAUhwHHP6PYfUyrLrC6tUK3XePL0AVtP7pPNF9jcvI6WjihUFfLFMr1eB82UmIw9yrUqM9U3CJImO8e7VGdqRPR46ZUN7KDH8voaOwePebJ7j1RKYNjzaB8lZNUieS37lVe30aXXbzN1LDTz3JImZ+Z59dXrSOIxW9s/YWZOhmCCMx3SOB6zvXfE6toatSWVRu+A+1sPeff9v2Nlpkw4bOPFY3JSjtvvfcj92w1e+cEmN15eIHHh/Y/+moI5y3BywG7zZzx5eMq7n9zFciVUZUKlptFNHPqtM/7s3/4H3n3njG/f+BaLBfCdBnd/9TmnpyPyZp1ITWFqaYREwg5l3rzxbUqVGs29R6zNZfnWd16iOzykWFZ5+aWLLJTWWC8vcXPzdYYne0xOBTaXL+D3zkgrFdpuh09+8wGXNn+PXGYGP1I42jlgZ3uL7Qfvk8uUcOU+zcaAUnGGycin1+vxaOs9Av8L4b8oCBi6wQsf1eQZ685zb9UYSZKRRP3cN/LLUo9n/pIAogjZbJYkVs59e9PpF3IQ+ZktUZJw3mZ/NtDzAmZ+0WN/tofPV6fT5cn+ZyA5PD15QN9qc3jUYXlug6o6SxJ+ocGUFIFWd5d2/1Pe+p5HfW0XJSURemNarTGTwMUXfPq9MfVKEcMUyZXzrKwu8fjekEp5HkEMKZRMzhondNtTSlWJ9QuLOO6YidXjBz/4XRBdGo0G1XKGuXqNjFlAk/K0GyGKUMcwY+7ceZ+VuVvIUoowSDGcnnBwvMXSao5yYYasqUEQsbIEX3urxp/8kwozmV+zkttHtj/g9MlTPvn4Nnbi021aDDtTLGvIm6+/hRsHHI8sur0pepSh2+/xzi/2GXQTFlZUth7fY/vhKcXsDPXyIo3TA5CGlCtF1i8ucPf2p3RaDrX5FIHYxtAlVAX6owOebN9nfWUV3wmJhT65gkq7t4eQlFm7uMhg0Kdx1mFt9QqeP6FgLHHt8iv86pfvIgs6N19eoj8+odUakc/VkJIiupLl9GmHonCDcdvnu9/9Ls7Y5/CBj1HcZegck0oXODg8ZGqpVGp1HjzcYuqf8vDRFr3+hNWFGpfXX4NIZ21tjgubq+QzeRZqFZYXVrHFNpNxSGwlpOIcKcsiFeQ5mS5x3N9nobaDuv9vOP7NXXTjMtFIpfPxIYPeh6ybT9EjmcVLt7CEMYPohE/ufoKklnj1712jNzple/8TZFViebXE0NqhcdahcXJMKZ8nnZHJpA0q5RJnJ02ePN5m6jSQRA1nKiLJU1KGATFISQ7Lfogk2BSzOYadEScHDrWZPHcfvo/vQbtz8v8THz5fv3XLG0ckk8oiaxKaphGLCr7v4noiEzemVivSa49Jp7IkUkIoTYnj8wSCtKkSM0VXTUbjAUKS4eyszeq6SRymEeIsjb0JhpxDjsDMSXQ6Y3Z3BxRLC2QKOicnhyhyGTGJsaZder2AVM4nTkKquQU8N0SWVVAVYlHC8Sfk8jPE8gRRyqFOHcZBn1yqDn5EFNrIuoLXC5BDHy2lY9sWM7UqcSQSRxM0NUWpImO5PXTDIBYl4jDkrNMibWqIgoJhpGi1T6nVV7H9iCB2USUTVTkHRqViHccO6Y9CoiWfN1erPHjaQ8qmiOM0H93/hDgOWUmZTD2d9c0N+s0Gdx7fp270kJQRzW6CEJnMplfQtSr37t0ncDzGToKnNSmkalxcz2EPYDiNIZQZTxy80MOXGhhamjhwaQ0tCmKejFpnMBwDZaYDmDghi4V5nEnI06dTMqUBiqmT0g36VshZt0N9pkrKTIFySCYzw9O9xxCFFIoR+wcuLy3PcOPNeb7+csLW9g7eMOb1V0vIosnu2WN+/w+WGE5cWu0xahQyM1gm8GwCcYityMzXlrh35zFRFKOIAqOehVxOY01d2p0JiaUTmiGGDl3PQZYzTCchY7mPJvnIokCuNIMQC5RKOWJayHqJWNZJ8FhQK5hpjUIpS7psYDkW7jTmrDfitNNBLWRIRINJp4uvi3ihAO4I15tComG7CXYc0bPbFPMCgRtysPOE8nyBydjA7/ZYyM/S701QMgk5PY8/suk1WsxWS7R7R2jP9szMnIkkmIzHNlHsUMiuoOYdjo+PyWSKgPOMpUyw3DGjaUJGkZg4PXrDzosKJ4oiJNK5U8oz1gbhCyOhczD5rLjynEl89utJRKmeZjIZkTENgmHIuN8jn5lFFOsUqxUsd8CgP0UUIjRxiaXVWU6PzwinU8pvrjwbYBBQ3nqL7LUrTB9vfTHZ8Lwov/g08XOS6XyEIoLHOx+j6yXS2XP5iCqm8LwOthUzGY64eOsSnbaK59nMVJdwxwrrq5tY7i6Bv8Dy8oRBR+IP/vM/5vaDXxCJZxhpmXK5SLfZQk+l0VNTep0B1fIs+Xyeqehy1mmwOFPGnqZQTIvWqI0Q1hFQ8KIRvaGHHUTEgk67Z7Oyep1ea0ilrPGzv/u7r9wWX33jTYxcwNiy6PYPUQWN9HyWvD7AUBNSmRSZtMHirEgopelMIpLhCe/95h2++603WaivEIRZet0h+uUyldoFPvr137Bxq8zatas8fTzm0g2D8eAAXZSZqS/yq8//mkvLywwdhcWLS8wWK1QW6/Qci/0H9/j6K9f57/71T8lrIl7zlKcHOUoXF/ju9/9zHhVuM5l6eLrAQrpAMB7w6NGnPD2a8s2//z8nV5VJpWrEgyan2x4mNdKCxtbDp2Syq2R0FUn0Gboq1cVVur0R7ZM+snzAIBBRRmM++uV/4PHx51i6iSzNomcdOoMW4sMjLq99jd3jnyMbV5idLVMLy9SLG+da4BcPHQme98y+J4nPp7ufb+RnJHgQRgwGzjPt5PkDSpw8b1c/1+5GjIZ9TNMgCH1c18X3EgxTQRDP9cnn7fLnbfPnes3kxfcv3nv2956bnUf2q9z5cJeNy68iBhM6wz6Nfp+vVWeRpR0gfgEq0+YKo3iZu+9ZXH/pNaajPpbVpJCbQc+KeFFILFuMhjblUgEzD+X0LYLw57S7XTbWfkCne0ane8LBQYfxqMDahoIs+xDB3u5dXn79Bo6lc+/RPWaqIZKos/1oj9kVkyfbH2NbES9duUYiTJlOYjzrDEijSnlSSop8roXnTogciXf+9j45uYpZjti4WSawUsR6iBU/xVBUms02s6tVMrkCjUGXw/aAqSHhOTahMiRlTLizdcrCwiZ62qJ5FvH267/L/Ue/ZDoeMTubpX9SYWmxjO0NKZVrDPoj7tw+4Vvfv8nJWUA2m0VSIob9kGJ2iWyqCvkTHO8yo4nI8oLPk4NHJP4iKVOn3ekgCmdUa/PMLRTZejLh5vVbHB08JZhqZLMZiqk5Bp1Tmq0txr2Qaq3EfL7OJ7ePEOx7jFo2F9cXaQ2P8aaLZPNljhqP8H0fP5wQu3mCwEOWTOzAorW3x/zqJotLS1hjh5SZ4fT0CZXcJVbn8/zVX93ntZu3aA23Kc5eYHauws2cze5ui48fpZgpv0l1QWJwckTcekp/91PS2Q0KuevcvfdrpHGDg/QdpOprLK/kcYMR+/u3KdvrhK4OcoeQOo5TIXAzJBGszF2g176Llinh2AmuPyQMFTJZnVbvAadPQzYv+YiJQbagcnzSYmPhGns7MXg1qrc03vu1x9WXLtCzHjC3XGTYl6jW0781TPytAeViuUJr2CaJJWzXYTrxkESNYsnADWR6wy65ah7DUEjEDIE9BskjjgMiL0cWgzjxcd2AOJoiyWmOTob43ghD86lmS8SiR6cX4k26lIt5VCki9Ka4rokql8lkVSbTMUgqguKSyes44zRh4oMcMbFiJMEhYHTuVRmrRHaM45+31au1Okms0PMmJHoKZ+wxl69z1mxSSNcJgn0EYUSr4aLpMaWCQTlbwpq4tLuHGJksnh9Tqc0ReFNS6TzWeIKihrT6B8RhguO55NMqk+GQSjlNu3NKFLkYusLR2ZTBZIo79PEknySVwhBUDLPAwWmH2DTR803SUobuicUoeMobb89y3AiRhCon0xPOHnyGgoxipEAIkKZ53BDyKZWTRgdd16lX0oRCRCZM4cU+ke+TEQ1SCwaBKpBI4ERThtMmK9UNMoWL7D3dp1YpMbOgYVsZUmKWYOKjCgKSqlGpaFgdHzeOSZcTjJMcN64s8ta3ioSazc3XKjx6NCQ2+7z67TLhuEraKHLU30JKO/z5X/2cUSumWMpTqdVYuzjH8f4jBsc++WqRw8NTNEknEUX8yCNJVJqdPkahiqtq+NoAzZRxWhKSJZAqJgi6Qn/kESsyqmtzZXOF49M+YRhjjQQCMUAvhEyGCbEzxo8V/NGYk+6Ubm+EHcmIkkbGNCDyUAoqtuOhjiMkUWZqaGTVGoooMfF9KmmZaCozdiKyGRHdNhn1AqRsgOpmmXo+sSwzCXw8awKGRKBJxLqCLBmYRgrfd7EmHpLkE8URKaNIEDt0jgcoqoDVHQLaCybFcR2iTJqT4TH5VJFsOv+CjYzjmOdm5jHPbE6eteperCR5xvO8sD0HQNMUyjkDRR0SiyP0KCFrLKKKIbbtc9YYMRiKLG5WkBDoNGym06d0ztpcuXiFd37zN1y99iPq68soT/dJX7uG/XjrP7Huew4mn7E/X2J8YkImVpd232Nh7iIzlTSLMxcZjbvomkbKLNI8s+l0BqhKkXphhTAc0x8OEASTKFTYWHqLO8NPOD0Zcm3jW/zqnf+Iqod0utvki3O4ns1M9RLDzn363S7azOu0pk9IFIWz/kckokajO8ZQD1ldyPHp+7+gVr3O2eExoRwwP7OIhMPx3h4vv/wyk8GQf/aP/8uv3Bd3j47IZ9M44Q4X1q7iO216vT0ScRkpMVCEDP/hz/6U77z2HdRcl1FjSKlcRDYOePjeByxVSqiZHJ1iis5wByWV56X1W9x/uke1Mss/+N1vczxosHRxnbPjT5krz5DJXuDocA/RCYjVLL7bo5i/glbIkpPBl0z+5X/1v+Fo5w7L8zn6rocU5gjaA1JSilIppl6cZ+fwDrgOqrrMwrJHY/8B9nCRfClHyCmRrVHLpTHFmJcuX6Q5aHN56W0ejA5RKjMkZ0/xu1Pe+uYP6Q+3KMiLmDNljk8e05Mjvv/qq5w0LLLZN/l076fsHNyjlOi4dsJ0FOP7fb725reQKCCJ4hfpOMk5mzjou4D0bCs9jxeNEUWROE5IgufDOOf77At/fYEoCkmZGrmcietGmGYe150QxSGiqJJJp+j3J0jnv/5FKmkifMUl4T816m+3OySyTX0hT0nJEcQSYs1jMoYnzQPWiIjD5LwbEMOwm2Httct8+OEvePpgQlrNIVUi3rz1XY5an3Jvq8fiWomt7iFvvfUGn3z0KU5OJZetMuhF3H/0DqaZplSsc2FTZNC3mfQj+sM9ZkrXUMUsD+6eEUs9vHBIp5sjZyZoesDUcllaXKbTPsAPx9y595j5uUvkNBOpL+F5Io6lo+s6c3NzZLQhapDwX//X/y2Ksc7iboVvfucl2kchlfIMqbKDT532cMxsfYYaDvuHu+TyBscHxxhliUAS+fp332Q68mk2+xBn2XnUJnIEtg/3EPxLREmHldmXuf+gx+3PDlAUhdllmePGGRO3RzhWWV1fYWR1GHQGNDvbiHiMhmAFbSwrQk9NGI4SLqxfJU5EVFVlMD3gyY5ISk2Tz5l45QKVisSTuzsszSpktVUSd59v/fANrF6Tw4MTbrx+hVRKI5Wqcf3bq/z4z3bI57N8fucdDD2L47cwtSzf/f6PeOc3H5Ix0yhaQu3S93k6vEN4LKDicdxMuPlahTAY8NnTDrdev4quwHJ6hUbrjOOmxNEICkmOy5srHG+JmJkKqcICI1ckLI742YNDKjMBlZnX2Xi1Tq/b4mDS4cn2CfO1ZezpXezJDokcU8gusrtzTCbtoWmQy8H9z064cXOW9z77mHQ6Ra4s41gF5mZmuXfnKWsXVjg76aEpc7Tt+6hygYdPTsjnshRncpy0Wiys1wjwKJSW2T14j4yxSjob89uu3xpQ9lpN/CAmUmwEzSCRFSx7hDJRMJSY2DCYTkeMhhKa5mJGeYTkPJs1jHxiK2Js9c978l5EFAcohoqhSkyGE4KhRamWwpnGiHKMkjLQvJBGc0y+EuDGAlIU4oUBqpZgKCLOWCedNTHTJSyni2x0URWDjFzBn7iE4ha+rxLHKQRNpForcHLcJJ1SKRRMzs6axKWAbLbOZNplrr5Aqz1kbaNKKZfFGYSEUZulpWWcoEd1fhnTthgPBqiSROR1yZkx1fws93baLJVnCJIJrjAGTaAxbZHOKmiKTqGUBqFPyp1jILiUyikGjkOv0aeacZldSpEoGtvbTUyzjNWbMrUcThohvmfSG3eJhmMWKrMomPTDAYkg4kwkusMmYeCQzueR4oDBaIJgqESCiOTI5KsahBKtgY3MmNVaim4vjZxfYXE2z+MnJ7z+2g18UeLjT3/Fur5EUBCZtAYIFZf5lRVO7nUozhQQRJ+D/RNUM0HL5vlXf3qMG3fpjQxGzhlvfi+HNT1iIg9pWBFn0Rm5epqL8jVG5RGqoRNGCdtPP8GeKmRKBSbTMTkjRez6nB1NSKfrCFKPcKAQJBGd8JCSnqHR69AbDRFUlTgCBJfId8lqRcqmzt7+I8JYZNgVUc00lj+ke+pyYf4Kd1q7qMiYYg5NAjldI+l3SKfSWPaEIIFCPnMuqdAMLMsicCZIxRyJqFAQQyLbwHKnjF0f1IB0wWTUTXB9n4X5Mgf7U7JVgVHfQ5F1zFRC6CecNY6IE4lec0yuGBHhQyRiTyUCuYWRSmHKMqpWQpK952OmCIJAykihApqo49kOsqy8YEvEZ9PVwlfA4gsx2JfHdBCE5+k750tSZGTT5fLSJc7OTijoGuVajr39Q9KFFcaDPrqi0+gM0QwTVRHpdm2iWOPdDz7HMCQeb31KvbZ4fnxRII6Tc23al8wvX0DKRHrRIgfQFIMkSLG+tIgiG6i6zN7RfZZW5vE8j3wmg+RLpBINz+7RbTbQMhpSAlKyiplyePLpR4h+zIMP3mF0+SLL87M4k5DKooNtyzzdaZDYGjNZk+WF79AduIzHLt/9zjXGts1TTkniEFNVyVQ2uTjj0rNGTOIhOUklVxE4Ho3J1cps793jyuabnLUOvnJfVDIxs9U6T568Rys65url17CnR4ydId5kwvbOJ3jJlAc7d1iuFLm6ucmw0SUSl1mZn+Wot0WnfUQmX0OfBKiZAa/+Z19n5XiVo93HhOKAk6N98rpGycxx9/OfU6wu0XJOmFHnmDNhb69NWn6X2uVNmo19VCfFfvcX5IvLGDmDvCbR2XvA1EggySJ7CZ89+Zi7v/iY8dTn5ptXWSqWMGfnUTSfqNemmINY6HHSGiBnNkGSCPot3j+9Q2eyx92Dp5jRKpe/eZF7f/djVq4vctjukNNsFtbX0Qdp9u416SRjYn2Oi7MXaWoRs7N1ZkuzfHJ3n3jo8NmdQxZnHG5eVc/J7SRGkkTc6bmXYyKCEL9AeyTPmUTxfH+dU5YgJAk8104+00KmUiaiqCHLHkkSosg6shQydexnAQoCCMmzbZk8014+d1kQiKMvrqHnV5duqGg5hd29JnYxYeJ5pKVlXOcBg0GL5/ZFz5nNfEXAHjcoFBSOWy025y8zGQ346S//By5uLlDLx6wUrrCffsTf/ewdMlkZyRhyfHqMqtQJwxZHR1uoUhrdCBESm0JJwvGrxLKPrsVYvQ6KIGOqFWJxRBRnz1OoBo+RxArEKY5OTihWcjzeenCujUunyBdTeK6P7eg0j/rUyyXOThr83j/5Y/ykST6fZ/fpHnc/e8Sf/MmfsLP9GEnzcF0XXZuhUMoyao7pNKBWy7H95IxsIcvu0xNiR+D6zRvYE51Rd4diUWe+foG7H31KplihWg5ZW13g7PCE6myenaMBe/tbZNQMaxdnsKdDOkcOieghqR6DwYTDxgHWdMiFC9eIXYnuYIwgGCyv1Hn8+A4yKrvjM7wABGeKlkkx8RKK+Tlcb0R71GBxrkZeMhhM01SqBYgVOi2PXFrnb//81wyaY976+jdYXVtGSjR6rT18J2Z3/w5LK4uMx20SdJSqQ3CmsnjhMp3OIThdREVl0k+Tkibsng742rfn+fiDzxj2T2g9eMJLr36TjtnFsFTWL8iYaocPPmqyemMNlVd46VKVdsahPVTpPo5QzYRM1sQeHeEHM5TzG3z82V9QqZS5eulriHNd/GhINlvgs9sfoxuLnFldRLXAwtx3ePOta/zFn/8Z9sjjtdc3GPRj1i+V6bbPmIxTxJpALp2jWtNoNU4Johq6MeT0sc/GxgUurlxAYZHm4NFvCxN/ew2lFbpIsUw60NAnPhU5y0KxhhB7RH7CdCqAKKEaLkFooaVdul0b3w9JhBFe1KNarxCEAlPbRtNUTE1HSCCbUSnV88RJgq7rqKrKaDTCD8bMzuTRFBVNzhB7CdViHUXOksQ6sgDDYZO9p/doNZrIso8gWuw+OcG1PWQM0mkRWRkSyT5HjWOGoz6yCM3TJlEU4ccDsrM2mWwRx+sjiD7pjMJwMCaOpsQBHO5vc2X1Mv5gzLTZQYkEPFtgOAyZW7hEu2eRM0RitUiSivFDhSgUqCpZKlGB2NcYjluoikFuboJsjNg7PmTqHHHx6jKV2TIzC8t4sc5wJBPJEwQ1IZ+vc3QgsLfXZzjoksQC+80ex4MhkzHIYogaRKxl1rh69QaeP0GSQyzLwbHP9Xp+YOM6EYNxE3s6InYMasU5iuksxZxOnLjkiznqxVmefvaAtDyHkEsI/CliRkG08uzuHzDVuoziNheuX8GLDBbXNtnd6+MHAcG0wMP7LdSwyv5HZQ4/K+P2JpR0h/lCmWJmibt7e6h5DUNVGHVO8YYW04HHyO1wOjhj0D9htl5m48I6hWIaSTTIFwxEySIKAiRJottrs7y6SC6XY2RNcf2IRBZIFQyOu20CQccJYtr9JiIBSeBQL6UYD3fJpcqk9AK6JqHrJta0Rz5XZjS2AJ2MWGbYGTKZjgkVl9yMipYyGfY9HKuHF4i44RhR9YiJyGZnqM/XQXPJlUxOz9pksgZCkHDr2mXSgkLiaSQETL0JYOF7FuOBi6HkScklTM0gcB3CYMrAn4KuI6vqC0CWJAlpReNrryxTrtXRTA0vcHjegPvyROoL+xO+KGZfQMzzwRxJll5cz8PBkE77mZZrrNDv2+zvNxj0XAJPRhRFylWDhPNrGCCKYiRVojqXwwltPDf8yoS58KVzvuhNvphEj595/53/d9/30HQJSUgTxkMcK2LQ79JpDIncAF11KZcMNjausLyyQXfSYP/pFkYmTS2tUxFy6HGJ+coGRj1PNjcicD2IHQ4fhRw97vHq5ZtcuXidJBGIHI9iHvKpOd7/zT6DPuztt5hfm6M1OOX4yRGpTJWllQt867VvMRl0OTrbxZSztE8fc2lxnd7BY5CGX3k1vW2e7N9mdfMGaj6L5/apLSwgu2kUIebla99msVBEMUVaksher4lbTFOY14i0JiuLy7y5eRHFt5F1gSiw+esf/xkdy6M5HvPJL/6aae+I2zufcmfrEYKxSOfTO0S2jhjGGLKEZvg8OTzmvQdHSG4eKwm4urGGlpqSEUHwQlrjQxSpSi8RUGo1ho8PScQcSy9/jTiYpdM3cKMx4bjD3tExbTePnhTR6zP82Ucf8N/9Pz9grMR8+58s8J3fK/BP/94rfPO719iYneelr22ipqvEQ407T+5y59Ejfvof36MzHnPjxmUE7z4Xlutcv/RNLpZfxusFfOfbNynWq+B6lFJZROE8GjRJEqyJhSjLiJJ8js9E8Znu9osHrS97nH4xxfb8HRFRkNF1Bdd10HUN3w9AiAnDCFVRSaUyz/K6hWePPV+6fr6kyfxPbYNUTeHxo4hiZRbVtLDsHoPeGZm0TLmYIgxDBPHZkRKJad/m8LiBoaa4MDfL6qU6y3M3qNREjvf3qBUW+fiDX+E7AvlsAVkSGE8ChCSHYcpks2kuXbqC67r0uj6lShEQiUMTTc3T7zrcvPEGohSiqiovXf0mYThgd+eAcu4lrPGActkkY2ZJGfo5aXLmMT9XwxoHNLu72M6QfLFGs9sjjNNUK3XapwpLC1coVdK8/NoN9FSIkYKl2bcY9SXWN8oMehHZdI1i2eDkuI2ZUtBVlY21q6xdmafROiCdt8lVKjh2gdmZIt/90e+QLxYxMjb9rsvlSzcgCRCCDPXCLCQddg8+58Hj27jxGN00+ez2Yw6PxtRn5hFlnc/vvAuJSK4o8PDJr7n9+WNIZDLZGebnlhCFAc2zLdqn+4S2y1x5HS+MsOMW5cUKRyfHDO0j7t87RJKzVKtlSnWZVEbj4uYm02GIEjsc7O6g52aorteYOh0EoUcYhhhqDW+a48qlyxgpm2GvT2BLDPs+3fHHdOwjMnmF+5+fkFVlcobBysoM7nQH+8zD1OaZq85zeGrjJwq7W9vE4oRY9Zg0Q25cv8rypSy9kc9Zt8fiwlVEXKrVLD/60Y84bo149/bPOG6MiIMiztjg+9/8h1y+ssjla9f5xje+xtvfusAHn/xH5pYLyHrEeDxEFBRqlQKTyQBVnOXrb34fSR7iTEQuX7qIIA3o94eEwoTusMXDu20qlSr1SvW3gYjA/wiGMp8roKUN+iMfVVWZjNtogk4QCzixTYJAHIdoWo7QC2g3XDI5BVl2EEUTOZvgRTalahExEZGVGM/zkELIFUymbkQSGyThCFXzEIUCrjsgk9WZ9hQGvRb5okaSOLjuiCTxiEIBTTTI5A36dpu0kaLfc1heLpM2zovieGKj6iG2bTOZSKytbNLvdZibreN4NhEBe0fb1KoLpNMqnXbAydlTTMVgdmGZQcugP97lcO+QyShkcXGZVueEJHBBFDg8PKSQz5AaR3haG5shpiFwefkWmurQb7mszmc4GZ4gxAE+FopsUyhqWLbPo0cHXL5YYjCYZ/PSNfrjAMs+RdVkiukcZ81TFAVUP4spZogKDokUofkqupBFz4locsyjB58ThgJxLJLNaXiSQClf4WTUYOrZlAszFPIGo9EpRfMm+tL43EpB15h9Webpk23e+NpF9neO6AkuqVGaRBygiCKinyDJZfJKgebpKbmSwfFRE03pk4QJ1UqJTKnKoNtnMIqJVIXBXszyzBxXN69y2jghp/ukjDJP97ZY3XyT/YMtMsaUSnGRDAm97ueYKY9AdHB7FsViBSmWzmPcxAQhMRASm4cPH7K8towoS0ysc/Pmvb0WF6pziIFGYHsYpkksxJAo5AtVmifHzFZmCJKYILFJApkgiCjNzzCydkjn0sSRgxzqCLFIqzEmldWo10r0e2MCV6VQMunZPSa9gEy2hqbk2dvfJiaiUFKJphGKqiDICfXFGo+2dxABz3YwVJVCJk1KTRDiHJpk022PCeM+6UyN2IuInCn2wMF3vmhQA/iRx2GjwdQNKVXK5xOqL+x6xC89En5h1Jwk8Ys6+1xHKUkixF/ypQwTTvcTeo0B6Rx0WyFuOMVMSXQ791EkH00pIiAjyi7OVEVRNArZPH7g8srrL6PofLW9/uUhhmfFP06eN9vFr9R/kRSCIDDoDVD1GNc6pJgrkjg+Stonp2fwbIuh38MOLa5evEGlmubpkwcc9DuktCy1JZP6XJ3iKAVuQqEe0x+PUDSX+dU0o36App5h6HU+33nC6kYZOW+wsXiZ+48+4MrmBo3tNr3TMamVFncf9UgZRbypzcLcJfb3TpmhSbt5xt/+/Jdcv3GRQXv8lftiQSmQRAkHT3fRdImprTOTEpmMt8iWariCTWwUmKmt4YQtPt79gNfWv0HXmmDaDsuzBVB9rKkDokVj3ObWhdcwFY9DPIzcCnVZZegOkAKJmVqF1M1vgpLQaDT4/N59dFckKi1RODggXq9TXa5TlLI8/MlnGEmW8mKGueV1Hj94QrEIW70zjFKRG/NVjJl5rP4eveYRC8rrqJbI3IbDtLFPx89jKhr1YMrv/JeLbCxGtA7+DXl8lpZX6HY/ZX97yK0fFLj72ZB/+N3rjNxLKPM1KoVN1tYWCCc2spsmn53HSLrsP+pycW2Fj371OYWiSX0+hZdkQVFe5HaLskzKVBEYEn8JRL7I9v7Sev7+C2cB4bwOGYZKFMWYpo7ruqTNIta0RxwnpPUUvhO8yLX/wurqHGDyXDv5HLfyxdfRaMDJ6RFXNr7BbK3GsDOh2+oym6+jqjIkHSAkSWKiJCCMPLwozcnuFusLF7CtCF0zESSDSRjgTjxuf3yXW19bZqY2Q3/c5uNPz8gUhpRydTY3l/nks18ROBlefvUmghjydKtFJifheTZ+OOb09JQ3Xv8mO7uP+fiTd7iwtEjarLO0tIQgTekO2ximwOOHD1iaf5uvvb3K3sGn+JFDEIaksmXOuttIGGRLWYZ9l+//8Bbb24+5duVtep02Z61TRkOblSWZW6/dYDxpEUUBiuazuLhCgouum/R6Njs7ByRaSOBOKOYLnHXP6LZbFHISbuSwujHHhx8+4vK1efYP73F6fECuWKCS3aSn93lw+JhCboE4mbJ18Bmz9VuUa/M4jk2teoPLGyKjoY3jTJHVAN83cT0LRTapVjKoaIiKiKRI7D19hJYPyNfzCEmJpwcnXJidp9k/5tqNGzj+CDObYWfnmOG4jZECWdHRjTSVUg5n2uD+w7tk9XX6vVOMfMy41WG2fhFJyFHMzrC66hHS5dPPP6ZYWAJNIl9wGHWGmLpEdxhQmM0TKhNUNY2ajtk7GxAWTK6sLOAf+ywtlDls6MynWjy+e4el1Uv8g3/wB/ziZ3+LN3YRY4FOY4DlwA++9ge4Tpt7H7VZvbTA0Nvj3v1j0ul5xETAdWyE6Ig48XA8iY3LFQ4OhoSewbgn8Z/9zr/k4Ow37O89xZ5OUcQx1ihiMj4hZdQJo4Tj021K1TRHJ3cYDz1+2/VbA0p/OMaNxvSmGmoUEQc2KdkAJ0QQY1JpkyTR8O1zfZapllFUEIkJIxffCzF0nVgYImsa1lBClhUUJSQMEuzAIwlGmIqBNZLRdJvZ2QU8L0EQXVYuZFDlHGdnZ0iKR7GUJfBEdE1DEEOMSGfQ81DFHLmMjjW2GfYmKGqKrKZSyeqk9AzWZEIcnudkijFoQo7FSp3u4IxhK8F3IuoLGo1jnz2/S+BPcT0ZI6UTCH32dx+RiAmlYokoiZibLSMJAj1ypFIdhkcaoq7Rbp3Q7ElUZ03W9Tn0ZALSGGvsUS8tMLAE8CyWLlVQUSHR+M0v30PWZQwpR7Zu0jgacGG9zqUrSzQOJT7+8EPK5TSaUCOZdvEtBzkTkSpkePm1b/Pxp/eJAouNjQ361oSpFXDjpWskokPaUJlYPqXiAr3JhFwxZCad42C/weO9h2xsvkKxWqGcq/KrRx8zl8uQz65j2R2KOZPG1EYioVRN4QYhgdBBS+lcvfQy+3ufY42nqGZMWpWYWD5mlGV4ZjGudpFJk8nqjJ0JqUyGkdWhVp1j58k9MvqIammT9mmDTlMC1cTxumhSSBBMMTNpXNeiNx4xu1Cn1U3Y29+hWKrguSESMpPJlLbUwjBMTCONKMo0Gj0WVy/QbQ8YTwL6nSNm5ueYTm1IVNKZEqPJCMXUETQBWdCIfTBUEUn2iCKf5vGARBRAcrHGOTLpIqYOseji+LuoaRczUyAhRDcTplZArqrzZHeHQi1Hr3tKvV4nSmwCZ0JKL+K7EeNegqGqBEGOXruBapoIgcLYGxE657ZIz0HlNEjoOzrOpEm/O+H6xhc53s+hWpwkz7rk5y28F4AySV4wLHEcEX+pCe45ASlDpt/rU8xeJJcfIk4tIj/AkMtIkoQia0RRhCTCxB8RTIeMXZskionEgIkzfgES02++Cf/6v382ZftFy10UhGcxeV/1wex1bZqHMLVPKJcVTEMnmNg45ojY8Tjb6yApIoIR42NjcMbRiUC32SFVT9CLHkejLs3xgFSSYtSVGU36dCePmZlZILRT5IwZHny+xeLSKl/bfIWz9jH2pMtu36JaTpHPmyTDCrU1GEUBKxerzBav8GjrPsPpiHCSMGp5pLNZ1lZmuPdwh/W1S1+5LybJlOOTMxbmqljDHt7I5qF1QIiDbGYIxxKXZzc4c4aUS6tcz6p4sUvbstko5Ng/7JMv69RqFcatJrX0dY7HFt+8+jI/rCxyvLNN5HiMXYvrly5ijlpsj21OJl0uXFkjPa1RXshQuzhDXc9wetRGHIYE8yKvfe/3CaenHD/d46U3vk4i55js3CMKRcpr6+h+E6Z3qebKTJ54SLbLwOlyYfUS72z9ipRks7yc8PLlEb3Gu+z+KmHx1U0Kywt4UR+zbnBjI0OuJnJFnSVMNYiHXVqnLnnDJC3k8NURvnCKJupM+j56RcRLJaRy8/hxh/bBkDfeyBH6PopknOcXSyJREDzTBH+Jaf//Airhy2w8JJGAZoAohcTxM62xEKPrKvbUxfM8RAlUVcYPkhfazecPasmX2t7/aUj9cDRkcUVkfW2RUbeHGOZJ6QquE6AGNrKsIAgxkiScD3QEPlmzxuZbazzZfsBPf/XXXFy8xsysgudMcCYC3/r2S4ymbS5d3uDPf3yP5YUNvvv9TRzvjF//8hfcvPodxpMpo0mbYn6B+ozJ0Nrj4Pg8cev+w7uomsbpWZt8yaTRcPjWt2fpjY+JRY8rl77Bzs4OiAcUKgLWNOH65h/TGt5m9+CQbCHNZDyBuEQYReyffIievcJ40ufp7mesLFwlny+Tz3c4aT4min2SbkC9Osdk0ufXv3nK2toqnudBLLF2oc5nd+5zYX2FO7f3WblYZzru8/BRm4vXinSG2yhahKFnQI+YTZYYDLs4foswVMkZdVQpTbvfYvPit7l+4yU+ev9z6rM5RAwCd8LB8R2GgylXLr+EqCVEgUmxMMNZq0FMROzWWbgwgx/cp75c4+DklIwqY6oiH33+U/x4ihdFrK1cZWwfIoo5DK2MOx0zFQe0hy6ylqUoplgsr1Kd22DsNLGme6hGilxe5cnDfS6u18jn89jTDAvzFq4XMLEGOLs2i/OzDIcRM8s1ZDkk9LPIioEbqAhhF3eyy9mTPTZWF/nZ+8fo6RApgEK5xINHnxAGCum0yvHpmPnFJabOGfvNfbbvZ/nDf/hdKpkupeoSw32VS9diTk8f0umd8vLNW4yGE7LpHN32BGukUizU6LUnaLLBvXsfohvnyWuXNlY5PT1jOkmzvvw2/fFTRlOfTnvI+qsvs3vwAbXK8m+JEv9HAEq9pNDrj5DsCDkMCF1ojzqYKRVdThPGClHkkjJkFCVFnEwZtENkWWZiDZmpzCIkI4gTppOQIIqIhRhRVBhbNo7vo0sJge9Sys/Q7fdo+haZrIYoRDheiCJXyOYqqLqHbgpIUkA+k6bXb6ObEaagI4hT+gOLvFkjyWrMLhkISkA81Gg2jxFUEUSdOJLwnZC0qmNNfLJmlc6wx6VLaQZjhdVVEzM1YtStI7l99nZ3UaSQWjlHPl+nO3BxoilnvRbTgY9a0FG6PvPZPKGawWNANgu9dsxPO++R1zUy5YhYrHHSsHGSkFy6TK9rk9YkGtMTkALCEJKwDJGKJE+Zjhwe3W7hk2F2tczsikLveEjZVJDiGif9UwJvxOHuCZsbKxDZuE5Avz3ENGQOdh8ws7DI1sEJkmqzunKDve67aMM6UiwjqwErS3N4wYjOvoCS17k6cwkpbCGaEp2jIYrmYw1PaVoSkpQim7ZQE4sgiek4DzDUEWJFoT47z/GTkNANqJZ15hZm6E96eNOYsXxCcJawNn+d6cRiNJ2yMDdPvhzSaHyCbAR4YYBCCWt0wogGuiiTypTxvTHZgkan38NzVKYjDdea8tK1K9y9fYdisYyvnlsheLHHwVGT2ZklxEhg0u2SNUwcZNrtNk5ok8vqJImE5Q4JfBgMx+fFR7CxbA3fESkVdYycQac3QFYCTvbOyGZkdEMmiIaY6SxqKk+3YzFsKVy5vsDDew16pwOK6ynGwwGzxfz5FGecoApZ4igglVKxLY84gDiIKeUr9AZd6guzJJJPdDAF1HPWJIE4gOloipiofPuNb7G2vPGipe08fPSM+/vyhCovGJvngzBJHCPJ4lfsfeIIVHzyKZn9rW3EtICZ0vG8gGxRx3FHJEKA7wuAysC20GSD2HexpyNcz+Kjjz/k93/nPNNb/9rbZK5dxXr48IuUkS9iRxBISH/t7Rfn7/eGPH1yQiYtI0se47bCcbBPLlOm9OZVrEmL3niIapaYRk10KhiKwfVXX2XSP6B72EHSsyAYjLQEW9jlwrVLxA/OUMOAZBKRSpsszcxgGjHlms5Jy6U+W8NzQw5PTunaEmmjyHAaksvVkTSRzx+8z+HeIVduvsRY7NJq94hUic/vHpCSZaz+wVfuixmjSi4ssP/kPkf9U3747X/ByXDKaTNgfc6jPx6hzS2yXFml395jfm6TX374SzRBoBcVqFZtomBC7FXJzC4zM/MSP/m7/yt/PnX5/b/3z8kqdRzrmI1xGS+Kyc2VqVaHSGOBqqpw5Q//Po1Bl/HeQ3pzJoXFC0SBS3f3kOWNC5z2JV679TbdUUwu67P8/d+hddLC6Tc5G3qgiGxWTDZf3aTRfILre0w/F0kV56mrECgBrdEmw0GHpRsLPDkeM/m7Lebninx6OmDnqEnBGXE4GXPoFHjjlVvMGC4r62nKsy6ynyMWr2MWdDpxm8CT2N49IrI9bt74Osd7n3KyP2Zh9ZlCQhRRZQk/tM+72HECovCFVlj4Yl9/OXP7y0uUEtKXrqLIEvH+HoKQ4PoTPNdD0w3iJCGKQ1RVwfM8BDl5NtEdf9FOF55fQV9dqmKQyq7ywcc/IWGInKRRJJnXb7zOwcGvznWXSfQsWxkW1kd8MnoXxFmiUEalyvWXXuXo9AOMdIXKXEKrJaEbBT67+yEhFqYo8ehuE101ON6doLJPoZJjNG3Q70659cprWE+KzM7kcW2B2dmIVvuM2J1F0UZoOZej011aZx4LaxV+895v+Na3vkWqPOH2p4/Y2LzMR5+dMJ1OyRQNRqMJ02mPcKqwsryMpsccHTbxfZ/e4ISUkTu3x0trFPMLBHGH4WCCKOmQuMwvFnFtmbn5Kncb22i6zuJsEU3zWd0s0Gsd4nsx65cX6XX2MDMm5UrIO7/5mL/3+2/ieC026y/z4MEDrlx5nU1F4c9+/N+yufEms7Pr/Pmf/Zj1jTqnB13mF+qMh+cWf9XKHCmjRq4o0G5OGPUTgiCLKkcoJYv7++9T1Gf52U9v853vv8qjT94jV18glU1TkNbQ0g5PD94ljnWmw4DajE6lNo87sDk+aHH9pSUEAsR+COKUYqbIpNVl5dIS/dEB3dER7340RaUAgg+JQr06D0mAKoJiGgycBtdfTSGOHEadKaEUkpZdYi3htes/IKUnnHXbpMoRB4c9hlOPr936ARPb5cHjj5lbqZFf6XHUvY8aZSmlTQZhwEdbd7lwZYn/x4//PS9fv0VJ0TCVAmIg0j4JqdcWkInxxmmajR6eG2GmIybDFgvzK+zvtpkpVwldnaX5Io1Gg5OTM8Ioj6EpXLs+gzWSma28xN7B/d8WJv72gLIx6lOfmyNty0z6YwRBQtIk9HwOQVEJxw6mLqLrIIkw6gUIOBTyRZLIxA8nqHKEZ0PgqUSCiyRH2FZAvTaPaA2x+i6S7hFEY8rlKmftBrI3pJifp2f1aPea1OolxETFmvRQ5AQBjSTMIJDg2CKqplItprAGAaZm0m1N8IOEuiFjyCkqM3UGo5DxxMaPpnS6Z8hSmmF/RD5XZDyY4rgRQdwjG6ocn7ZQtRq3bl6m23bodzvkigmJZJHN6hydNchlagRRzNB3MFyFROwwcRxSikwc+XQDl9CwcJDRtRwSBfywQd8a0x/5KFILRcnj+Q6KLIDQxHN1xkOfYS8im21BcEKhXOJ4KyEMItY21xBjjbStous2QiSSy5Y4PR3y+P42Ri5Hu9WhWqjjuRZ63iKTTnF2doItuiC0ychpiqV5xp0JEXuocolydolBs0ssJYhOEyElcNJoEksihfSUdC6H5WoocZm1ikHnZMx0oGBWZO4/3CIMTK7dus6je3cZTqv0uuBZE8pzebq2y2QUMZz4ZFMZjJTI/uMjAjdG1BSmU4tKpYosyxRyEpp4blegqOD5E7LpArqmoGkKKUNDEgPqMxU8O8CZ6EzaXebma2TzKbxgysnpiOFoiihpjIY9tIyMhIJje2TMCooUIYkCTmiTNVJ4voGezoAc4Nhd+r2AcGJSUBYwZ8bk8wVSKYjDIg+2TtELMbJmUc9fIBwHpNQYTcuiyTGlXJ7DvQO0lEChVMKTdcaTDu5UwTDBUNMkQkS/J1DMLxCrQ7qtMbJcfKa/Oi+whqqTSQt0GxO+8dY3SUjQ9vbx3nsPe2v7WeFLvsRGfrll/mwaPIHs1atfyfE+OztAVVKk0wpzcxpjp4GAREo16Q/bRAiIoonr2kTxmJSWYzq1yWXS1As5kjjko48/ZG/vCWtrG6i7+6SungPKFwVeODdeNzcvUv7Df4D+9a+/OP+HH37M7KKKECmYusrU9dCUIuNRwE9+/g4ztTzzK0XG45il1U0qlRq6CG6zg+rlSIcpNEFANjTsaMpwdEY993WKb32Do9MDHDfB1l3CRCMWZf7y578hl1cZNm1ymTwb62s0Wg3Gk22MIMXJ8QGWFHDlwhq+O+X25w+YXZihNWkzHQrMlGa58MoNjs5uf+W+OHE8VC1L5CbcWruOfbpHJkl4/eWv0zn8nKBcpB8mlPon6GLA1tlDqnKaSEy4fKXEzsERcRwxO5/BHqr8+s5/5MKNP+Bg5y4PP/o5+WcBCkuFRfR6jbHfQT3s4U0mHHRD0uY+3f4UXZ5h/8khmjEgl5bI52foNEe4gc/e0QAvGiAmU9yRjZwz2DneZnVjlf2zFneexmxsrjKf1egdjLlwaQbHP+TxXhe5WaRkXMIvbPLr904IQp2bV38HaxyxMN+itPz3OHz8ETfUhG8U3ma+niEOe6j5FINOH6tzipRZ4OzsjI8/+oCNjZuoioAce+w+2EfQyhiVBM1Qnz38nEckJomHosh4oY/4JXPzL9tDfsUq8sV7CcV/9k/J/2//1+fH+9M/Y/pv/t/4gY8kx4RRQByDqcsoivSMzRef2fx8qcH9VbsCAMSbN1idy7Pd2KNUKSILRYRYIkkmnBwccmV9k3T6FIb2s+jFgHfev4Pw2kUkdUIyTri1+Tbd4T753ApxdMTAGbJ7/JiNzVsIyphqZY7R4JCJA1J8ncW5l7h79z1effUWpfISnqsy6FtcWLvOJ5++T7FYRpTHqKpCtTjHWbtPtzVl6nhYlk2ijYmY8q//7b/i5VcvYhgp4ihgbknm0f0p9ljjrdd+n4AtrIFKFAq88tLvctZ+wtTSyedmSJKQ0bjBWRPApFiR0dUSk7GLokdYVsxMDe7ff0iMS6MR8uqNS9hxl8OH96jmF1Fkm5F9RBwlXL/6bRqNzwmWLR4/OQBixMRhff1lwkSksd/lH//h/46HW7dpNbtcvrSG7XZotU/IZjXiJGa2tsnHn/2CcUrkldoGujmg195nZfkisqJw1vuERDYolCUuXqriTGOuXbzK2Shi88Kb+K6G4zdQxBSOHaNVzrBsmyS4wutvvELjsIk/8Xjw9EOEqMq41+PqlVu88daP2Np9F1FSWb1YY2fnPpdWfojnBGTUBQoZFU0V+Zu/uMPSpSIb1y/z0fsPsfZdHt89o7So8OZbKZqDBsdTh3SooCkugeRSVeeoXalw+HSXYjZPp3PAnc96rL1isVz9GqkwwLLrVL4uc2+3xeNHDm++9T0urkbs3N+hkJqnvHGd+doyYdhhsiVw7Wadw9MGJ6ctCvkVyvkcW0+OqVZmODk54XJtGTfoMnV83MAijk1uvnSR3b3H9Lp3WF+7xOrFq78tTPztAeXF+Q1GtoVtW0wmUwgD5mdniGORwLcp5LL4vk8cOARJk5SxTCYNQTgmnYsQJJE4zJEINooRYpBDUV10BRonHar1HNWFHDP1Op98cpdMpUd1poggOOgZDzUGz5kymvjgGYBGJLo8be0wMzNDLjPHk84RGb1AuaQjxjaaKrC9PSGMRTauz5GMTfb3u6haCtsdISo+dpCQSaUxzRKmnsY0CkTChGLNZNwTWJ6fZ+PyBnc/+hWKWGL94gYT95RcXqLb61IupBCViNASETWT47NDqmaZaq6M78vYtEmLEoZh4DkRVv+UwNVIpXWEUojAGCKd0cglmzfQJAHH8ZAMEyHySYKYJJCp63VqlTzNQZN0JcXOyT72dMSFhVfpWWMmzTG+IEMSI0gaQRCQyRbo9YekCyZSJocoGOeJPpM6hhyyOn+F+9ttchmV+fIF3ETAHrSozuRpjwTiqYc1dBBCkdg0sLoDelaXwuwahdk+w7bK3XshpSWf5pMxYeQzP5tj57NHaIHOqPEUQUqYhg5ar0g6E9E8PcY0TZyJQ+JJTKZjNMXAHplcurCKbdsIoU4+XcIZgWMHDEcWlUoF30toNk64cOkiSZKwu7tHNlOm2x3jOyJSnDBNuwSCi+M7xL6MYWZoDXqsLNTO20bDEbqic9Y5Y262RhhMyWQ0xFDBUCJG4yaunSBJGoHroKgBrXYDRZEYdtvML5jIUsjmpRqhJiEoUM2kEUYK+ayNE4SctXoU0gXq9RqGGSHGJhghZmQynfqUsusMRjtkc1kyBR/XjYmmUzKKAeMvtGCcz7lx0jhjqT5DHIYvap794Ucv2L8vDxHEUfSVOvicuUxf/eKm8FSN+OCjX1Kbq9DrdxAig4w0hxcNyBYN/EQB0SCOIqIoQQkVCEQSW8SyHVqTAcW8STql8tHH77O6snF+jjffoP2nf0rq0iapa9cgSci8/Rba229/hem563v85Cd/w/d+5zqKoHF6fEqcOAwGoBoKoS/jR3nCSObwoM3O/i69q3vM5C/w3Zff4Md/+Vds3lzF9yOOm2cUVJOSeJXPfvkAo5hjJIyx/Iizro8hTdGCAnPzJU4ae6TMMnu7x5w0B/SnQ6LQ5+bGBr2z9xDzAs2OheXELC4u4sYy1bklShtVkiTh3Qe/wPC/yllpCei1NoQDJr2AvtBnfeVVjhoP2Nj4EbY3RfNshLSBo8oM9ndZKxU46I35+a/fIV+uMfZ69O5PubF6k5QpUjXbxIsVHu9tMS/2CIdjrryxwMDpc/vjT7m5VCBbv8STJ0/wHu1Tu1hDlyUuX36Lzv0tWt0xzYFEuaqhVrLU8wr2bsTYh85wiHs85KXXfhdjcsLMLJxYY4an+8zOLbNxQ0EYxAyGAZV8CrVQJ4wapEcxb1yZ4d7ZlNNJzMSesFqvslDKMxVLrKYvo2dljnYfUJldIJM3KeR17jk9jIUspgW1ZAYzHzPsO4zHE65fnWNtpYbvK8RRTCKdM9l+ECCLMkkMyYscxS+Zl8MXbOKLjX7+s+x/8Y+o/q/+ly9+JvzxH2EkMdK/+1NG4ykCEoIk4vkRhqEhilNAeOZ3+Wy2RxBeDAF5W1sv3BHE117jat7kpPsTTs8eYo9DZqpLRLHH1tYWYbzIzMQmm5yzp5lMhqULaR5MBkxSPjv7I+qVdWRVwXVdVpfX+PGP/z3VGYPhpMFo6JFOG+h6zPzcGs3WA2aXy1y+/i8YjPepVir0+yNKxRk63WNqM3nKFZO//MufMxn7/OD7CqLskM0ZXFy/wf2tT1heXiaIPwEhiyIVKJckdDGLNRixsJjFNDMI4oR3f/0Zr7/6fZ7ufMra2jr5XA3XaREEHoqio+tVCiUdO2jS7wx5+aUb+IHFnfsPSBk1BMXBdh1yeZNS5dxhZOfpMYmXp5DbJJXqMBh3yJRn+eTzd2mdPuXCxRuIssHCwgJHe6cc9rdZWFtH0AdMJileeukaH3zwEdnUPJlSBt9WyOfOdeSNsy5raytcu3qT7e1tdDMhwqHbbWGmDUZdmcWlJdy+h90TmatmGXXbaOl1dE1iNNmi17XxnQBJcbCmEfncPJVymtPjPrFvo6tZ3rj5Ju2WgyhHHDUfcH9/yq1XLvL+ew956ZVNjk+6+KGLYWpEXsznn33CS+u/yz/4pzf45KM+41ZIvT7D4/5TXvv9V5nafVqxRGhGuFGGyqzIJ5/eodcOuLK0zOqiRrO5S+AoFMwsGjLjpxEn3ad86/WXyRWbqF6eVy6U+Ld/9e9Zrn+Nd36yQzV/lVSpxtFxn4f3f4EqB5hqFmSH3b0D6jNrTKYW5XKZYrnI1PFZWC7QG5wxGtusXdyg0W7x4PEdnjy18K0qC0uLDK1jEqLfFib+9oByv9kgGEvUiypza0uMphAJ9nnUoSjiTCGKEzzLoVCoIKgWoqDhOj6DXkipmmFitcmli2QyGYaDBtY4QVeyzNUNZMlgMh6jzWksr8zRD3fxwwDfD8lly7hORByeRzOmCwa99oRSPockKiTCFIUCuaxBKh3jTQTSuoZhpvnBD75GpzNh0BuSzlXR3Snj8RhZUZhaEm4sEms+SmhjDX0qpRSptESMRSRM0FMWJHMYZhklHZAvO0RtEasnszK7hB9PGdoubWuKZoSk9AKBktAbdBEkA1SJlCwgxSJBEGEmKcSMjiiEjEcOaiwhJQHVbJZR30HUZRQhRSYnkS5VCXyPQqFA5Ik82R6gmaApAYPBiPnaPK3TEwZ2E2+SYejuk84qyGqGyXSCacgsLM6gmimatkUQyqREDVkYE1gew26biXtCrpjhyaFNuZDC9QSu3/g60dEOpwdbvLZWJzJi3vv1U7SsihuaWK1TdDFGzQdULgiIgU+xOkPjsEcSaixtLHKy30CTFUbjKYtzl4j9MZ6ToCRpEk8gX87RG7ZIG/NIckhvYHP//kMurm5y4/LX6PR3scY9XG9CLpcmSRKm1pD5xQoQ0u33EVSRvtVCz0F+Jo0aKgS+x8SZIiCSlguEoUO9InN23ELRdGbrZexJSCmbIvETaqUqp80GvUGbfF5HTHRyhg7SkPUbi5yedJEVhWLGoNmySKdNLqzOcTL5FCvIICgafjhk7CkUZmZxT06REoVepw+ShaDlmFhTZDFFTEKpqtLrnpHN5RgOXFJZlUj0yKgXOB7tkUlpnA8HnBdR13EoVEv0Og6SqP4n7b1zFvL8rWeT389i5L4s/XreJny+7j/8gPpchThOMbZarG0YTI6a6KpGEmoEroegKjRbE7LqEq41YjoYAgJBEhCHPuM+9FtT/vqvfsI//uN/AZy3vS+9+2sETef5J3pBVj47fQL8H/6P/3umUw9rJDMcHKAreaJwSLmepTZbQFbOI+7a3Se0zlxKcwnWUEcrK/zq9k+ZWyjjjftYXsj60iVaPQ9resBiZZ1yGU5OMtSMLEZGY9Q9RBIDHvxqh5mFeaZDj9CW+PyzzznstqnPXOLx3Z8wM5Og20Uah3eQJQ91bPHSSzc5Pu6gpxUSN+Zbr7zBH/zOP//KffHdd/6Gv/i7/zvV2iJaqczRwV0m2zGzpTlao8cUwhK3t2+z8PYGTn/IheoCplCmYg/ZOxrzys0NjJTNg71jfvHgLzDzF3Ge9rGlIYomYmglnLrGX7z/M+q5GoqqcvfpGdmL61TSCtWMhnP0hM+aPosrxywU58hlK2hCzM7Tber5Ks30hFzVIJ9kyYsFRsMO08EhD7Yf8uZLN6mkZ8hkTT742V9T2rhONO1jxCAECelyxMcPj9GLBQaRzUK6xq7no8QtmqLCJU/hRuUG24d3Ubwqd58+YnL7Xb757f8CZdohn10jyxy7J+9RqtUJT3wWq6tECy6jwyPuHp7y8jf/PrKsv9incZwwdaYIooCYnLegn/GI5/IJUXixv1/sdQG09VXK/9X/Akn6ws0g2lhH+kf/CE0QSf2bf8VwfIqpZVEEFUGNEEUBkmf+rV9pcp9/9Xd3Gf/8FxR/5weIokT9//zfcPHvv0lRLuKHLh9+9hGZ/BzNzphJeoQkywhiRBLF9HtTOk8zvPLdb/H+nZ/w2g//MWenDaI9G1kNCSOXSr2AYYrYE4VMViDwBFZXV3lwt8PK+gJBaNMb71KbSXPn80cU8nUeb39MvV4hmLQ4a/T44z/6Z/zkb3/GgwePWFmdpZBPkcoGvHT1Gil9jnbzF1y8cBlZdYmiCE23iSKRRueUzMIrhEkX34t48PhdTk7OWFtbo9k6QVEMoihgNLZZWb7I7v4OSnpKJl0ljEfcv/+IwMnjiB32dmVIRCQhg5gItAYtNi8v8fDeUw5ad6jPZEgZMn6UEEZT5haWURSJ/nBCp/cO9sDF0EWODvfQTQnPP2LsSLiuRaPxCdlMhddv/Q6D0TGO4zA7O0u5co3dvQcErkHKVFEUi8tXlzhr9CjlZ6jk0yReTGCP6HUa4Cis3irRPNpmOp3gOTaXN2/x6PGHrC+9Qr4o8/DOIa+/nOZofMqwNUVVDIrVNL3REJ8uy3PLbG+dkDKK/OY3H7O75VL5rk2lUsOe7nNpc5Hu8Db7n0G1NMO1NYNf/2afQqVAp9XjwmKW2w8fUM3PYpQDGr2QSFogN2OzP3wfvfsaM/OrPL5/Qia1ysamyN2791HmZJ52ehSqEs1mn5euvsb33vgOM9U09+8M+Xd/+q/4p3/yJ6SyNp/dfcDVS4scHzeoeRKuJ+GFCkkU8dmdRyzMVkkEm6fbE0Qpwpr6IEuoepal5U3q+SrGfJp0tsDUP+LXv/nFbwsTf3tAWVRqTNI95LwMkopo90j8ANP06PYUijkbVbbRE4lEHDKZJKRzKpIWo2cCIn9ENhMw7gQ4oyH12SwdKyASbByvRxzlsCKfe3ufUEqXmPQmKKJOqZImEKZUihlCp4AuxvS7AxRF47TZYrY8TymX5bg9plitMD+fIWWk2d05oXF4xsRNCOIpnizg2QckAohygigF1GoZbBu8yEFCp1DOEYkOg36EYknoKR3HNXlw/5hwekbOTHN22sf3ZUozedbWq9y/9xB7PCCVy+C5WURxTByECEmEGDl4jkycjVEn7vkFV5SY9MaEQoQmBMhiirSeQpBijKyOGPm4gYttK2R1E0+WiAQBUY0IpxaO5TMa9ZlfqGMPXMLER1aWSLQRnf4ZmjKHPbUIvYjDvTbmNR1nCOFoQluw0IQsqpDHFjwc1ydpx+irJj0/g2u5zK5laXcfPQODRzyUupSLEi+/mWV/L0ETJRRd5qAxopDE5DMxbpJDL6S5Nq9x+KSLayuoGliDCYVcEc8dYpoCsZ9FNm2GA4+D6QB7opItgSZoSFGEoCq0xwNUx2bjwhUs6yMcf4AoJfS7Q0ajiEqtwulJB9e1kdUAEEmnM3j+kMbQIpsqkjVzKKpIv9ckly/R67tocpZcRQDR4fL8NaaTiO7gjMP2FmJSQJFU4jDC8VyU/BhBigjUJpdeyXPv4xMensjMzBbxxQ63n3YpFmuEkwkkBmOtj6hrnJ4leJ5A1gyQJA0hEph2p3iWgpe2yBWy9EZNSrMmgWtTmSkyGtqEgYBgOGSLBdxu/KKYCYCpCMiRT7mSRhCVF9fjF16UybPh7WfMTZx8RQeWPO+ff8khzI/g4zvvo4gVotgjfCAgMERNMmQLLjk9R38UEI/BVzs4zghNN5mOA3zHo1SsMrGnjKd9fvnLX/Nn/+5P+aM//Efoe/svwOQX6/xDfO46/OadX/Lhhx/ym1+/RxRFDAYD1lbXGQ57GPka5XyB6XhKOlWj37JYXHiVK38Yc3T0gAv1FYa9KV4ss3RrieZxgxiBk7MO7W5EtawzGHeoLV4js1Th7PE9nPaUoSDQPtqlUN8gkQL0vEx72GGmvsri+ssI4ZQn2x9z2sygSy1EEWRDxTThg199gGz0ULU0sZCwd/KEn/zsqy3vUm2G3MwFlGwWtWxwPfU9jHSGYk7n4KRP7Dtcf/MGgeMgyArZYoGTp/t4csKP/vAHPNndo32/x9JynmavysbSPFuP94njCbMLl7EDizCe8HTnCemXs6TzCo8HLeYbeVBkmlaTQXfCSr1Ot/GUh58+QS8WMdWQzYUV7j3axtBdcvk6+VIFUd3HtyLUUprs4hV2+za57JBGH2Y3LmO3B4R5k0CTGLSOGZ0+YOz3CNsxQpRGzzncvPIq/+Evt5jxjnlckMmnNFbrizzcO+G7t65y1rXwx/scPz2mvGLRufN3yJkilSsXOLyzhXJ6Sg+olFZYrhQYjjs40ympTBZ4NpAjSpxHkZ67TQnPB7B5ziKKCELCi1yoBPL/k3+GLMvnsPCTTzj9zmvU44jo4jriH/0RqTt3iLcc4uD8KOduWMk5AyMICHH8haE50jPtr4D13vvkv/+9ZybqoKo5/uLfPWFuo0lr2KRaKnP58stUvTyplAPdFoIokk6ZqHKWJ7sh9jTFam2JcWOEaChMnV0CT2S+vsSHH7/LXK3MUk6jdTLh2vUCFzZ0Wu0jZhdMXEfmkw/2zl1TBA1D9znaD6mtZTk6+ZT9vRJ/9Ad/zOf336HdbyDKeba3PQQzh9yZ8sbN79DoPWb/boiW1jBSBrWqyXCUMGlZpGSd1169wL2tO8REfPTZRywuLuL7Nk+29vna11/jrHWAkQ4Y94pUqxW2t1soKZeRPWJl7hrjYQdREJibK3A2ukNB2aR57FIul5m4R4jJHH58RuCIzM/M404mHG7vcfnKOrcftIhFlcBVKOopUukY3x9wsJNgTUeYOQ9JSNAND3noMRl0z+2RhCmTyZTBqEu2tEClnuHO3YckkcBrb76BH4ocjUJ6qRFy4pHOZxi22xTUOq49Jp2pcHzwhBuXv8FcSedvfvYhF27eQjUCXDtFIkeYus6k22fUnqBlTE4bbVx3iD2JubZ0nStLE7q9IfuuTeQHXN+4wsbVmF/99B6BM6HR9VherdAePyVtFCnNLlMdNjBUnQQfaxIQRRJe6FMoV9nfa7Jcm0VQbNR8hr41RBJV5pcq2JMxtcwlXLPD+x/f5+orNe5ub3Prjd/l0vU2OSPDyUGDSjGFKiek0y56apnLF9NocprHR010V8H3ElTFRNdiClWf5udDJHXKvbv3KeYqBFkbMZQ5uLPL9ZuL/O73/+C3hYm/PaActoYkQkJmPs32/SGlskgmXcLy+yytGiSeynjioCgqUqKRVhRiy0cIXYopE1FRiKM09VkN3VCJfBkz1yWVztA6AS0tkErFjAcTBF/AEMvImgJCjD0dUSuuohREPHdCfzSg3Zaoz5Q5aw3xoiEIMsenLTLpyzQbp/hRRL6QZjQ5I4hiSET8QMRMJ0hqzMxMhXbDQRBcDCmHpgX0B21M00QQYDIZIisZLMdBVUR0pUbneIxk+AytHorucXAyotUekDZypI0UvY6LqICZrjFybfx4SOJFhJaGEIZIQpZWs0+5kGZoeWRSKbKZEp2jKW5sU1qOsPtFsikBx3aJGOHFPkxl3ChFMVvBS0Yoeo5mq0epMkuSREjWGE+3Wbu+SJTIpAWTdvOQop6j0+uyMFenVF5gZ+cINaWTxBG27XPYOqK2XmfsByytG8iBwKinEpgJhqKzuLaEHYk4lk21VmNhXqNcXeDJ3l3+P7T9Z5DtaX7fh33+OZycu0+fzn375jB5Zmdnd4EFFokEIYkmIUi0RYGiFegXdll22VWW9YKyVNIbCyxX2RJNUmTJRUIACBBYAMvFYrFpdsKdmZvv7ds5nZzP//xz8Iu+M7ND8cX6hZ+qrurTVR3q9P95fr/n+/sGszBhMveJQhNNh8HQ4nBvhCTAdDom8FTy5Q16XY/T7iFLtRw+DqOxRzFTolIu0lVP8UULU15DlC1iIcF2Z/i+y5MnTyiX6pyedEAQCMOYUjXDeavJeDymUDQJXwheptMpWUOlYJSZji0q5SxEoIo5Qg9SJsynE453RHRJR6y0Oe930PIhhlQlZybk0ikCYjTFRjIFytUMw/GUuz/q4Y/T1BYzzC0fUEkCk5EH6ZzBdDZBCmRSKZVyPqCwmefo4IRE1JnbNtvbm5yeNukORuRLKoLk4oUJkqwxnk1xA5dCOYUQJuRzGsY8RhDCz/adqhhcubJEFHu8/vIbP8HrukAn48/i4T61V7mIZIyS+DMeJoKI8ebrn/3MKDER9QKyDsFMBlUlnpsUqlWyBYvpJEDRc/RaBuVqiSTOcng0YDx1WG4sMptZF5GCeRURmX/4938LTdf51b/0V9APDgF4GEd87/vfJ5tO80d/9If0+i0mkynHR6coioaqqgjI/LVf/3W+/Z1/gWXFECSYKRMtpaKFIZbfI4x0BLHKYHpIcXGdraUtTk+OuLy0QuTaWM4Q37AJLZcrr7zEH/zz97n+6i3UQobxicPDJ4f83C/8DCO7R+yo7O8+otM0sGyPlctDcD10xSQQ82TTEtZwyNx2SaKIONHonQ0RmZLKmxwe3yObWf/CuThxLHK5GmIkEdomrd4zbhbe4snjXeS0zEDMcad+jacn9xj2fWrlPJLRYz4Z8eGHj0nnFVRT4fhgRuApfPLuJ3hiwNweM58laLLG4uISmlrGDRw++tH3UM0cctSlktepVhpIosXR6THpfJ5cZc6ge4YjqtxzBkSJhjMckp5bGN1jtjdu0uueUZOLaLKOnE7z9NEuntsjk1YxdJl/8bs/JK2kqS+UKW3WOepO+LV3voTXnLB3/gynqrG0tIyuxLjBlNNTlyRJ6AUehz8+InDGLJaWwPCIZI3rN97mT7/zeywUatx5bR0vCnmpcIOJdUypmmM0cRCliDhJELl4hlVFRZZDSPwXz/CniLfwWSTiBTr5wkD83/23yX7960jiBd8y+t3f5dvCQ166/ctcv/YmyfYm0r/xa6j/9Q5ze0gsRKiqiizJBOHF+DwRXkh/fmLE/pMWXhdfSCgvVFi7VqZQyZFvbGAmGUbunLSpM7fnpF98p6pqvPzS27znH/JzN9/hkwffZTia8/aXv0G3LzGf9zg+PeCll16iO9rh+LTIYqPKdOSwu/OcQsmk155z6/YlRCHBC+dMJqfESkKmIJPYOvPzBa7frnHw/DGqsMzSqknr8IylehlVzlIqFZiNLeRoEdl4Sm0pTe/wmKJ+jYXFMjtPm3jKhHw+TzG1yEtfWeF3/+TbXL68SbncgDhFuzmgWitxfNjHSEXYzpS1zQKdjke1eJVcOkPoO1jTDqcnLV565ec5O+kgxBFR4iDHi4z6I5bqV+lF54SRwHAyJJurMJ7apPMae3tNNKVAEp8hKFky6TSbG3UiVnj3wz8kpRo8uP+IemWR9UsrnHX2GPWHOFOP1cXbGFrA850+ipLjxpU63/mj96kubFFfzSI7IVhDhNyExFcZhxNKl6t4doGiERKGc95/eI98IUUysREzJVqtFqVaHdubkdHyrCxsM4+OubRcYDg/48n9c/wkYjjp0u73WVlZIp0tc9LcZWgZlCoFFCXEcUOcmY4spbCtIaoiIkQSUpIipaySXxYoFFu8/0GXrfUaS1drNAdt3FlAYyHDfDgjmzZpNS1+8Z23aR40mQYyuWLI1nadnYPvcn4Ib7x1i7nt4AQC2UKaxYU8vXZAbAuEokJtQ8feGfHO177Owf4zzs5sXn/rMvc/OiWbqVCpmYhPPSxrzMRVmHd7LNYazCyXQsn4advE/x+yvCWXfPlCKZvKGZQrOc5OW+TLKWbTHratIXFhQKurIknsMp+5pFMKiihjuw72fM7K8iUEuYXriKxt5mmdhuSKWWQtoV5tMEw5tLrH5HIaYZDgzn1ULcVsNGJtfYXmdM7i0gLFQoFYtggjj5k3QVN0TCPHafOcXKpIHCU4oYPrKFjWlHpjgVxBJBEkRNmj2+9RXVhEG+mIUoKZ0um3E1x/giLJCLHOsD9BlGSiQGU4nlEsGESeju8POTkdcHquYKoyKUMhsENMPYMfCownHWI5xJ5ZhHPIZiIs10NOJERdQxLA0HRUKY0oxCyvlhgJCZIioBQdthrrxEFMe3BKgQKzeZdCKosd2ETuHDXMY6aqTPoTsiYYeZNJV2A8s0kUB81I40QBjRrkzRSX1lY535+ST2nousxoYmEaArVKAU2VGQVjzpt91uqbGFpMIPRIwjNkLUVZNzH1RaKZQLYy4vj4LuVcjeKKwLDbJxOW0UyN58dnrF26xWg4pTc8Jp8yyaUrENlsrb5ElAR4rotYbJEEXcb2jMF0Qj5TZdzew8guMp1OSZIYSUyY2g6z2YR6Y5leb4SRTlGq5bn38DkL9RqC4CAmMhCjqgoyKUTdQdNSBF7CzHLRTRBkj8F4TtEso2cCTCPDaNykUS/hhBbg4aHgB+GFTY3vUigqaOGYJ3cjJKlCZfXiwuNaMfZQpFzKMnGOmA8CiE0UVUAmYTrtkXgib9x6i0nfpnk8oX3QI1fwMVJlwiQkmysx9yYoSoCii2TyBVxvipKk0TQRUZi9ENhcELriKMH3fVbrV2ksrX3OoXz85LPC+pk9z096Qn42vhPI3Lj2BUHO9979DlEiIEgKM8sGxoTjkPbpMxZrdU5PD8kVMiwuLmHNR8ysAbEcsrBSxg0tcoUUogQpM4Ms6FSrNf7L/+rv8ge//8/5yld/hvc+/IDvf/97QMyw22Y69bh9+xqXt68RhQLDURc9FtnbP+T9Dz5hqbHCZDLj/HRIIhp0enOCKGbv8BmFbA5V1lhdWKWULXPw6BHf+MV3uH/vYzbWGtzYeI3jvXNGU5+0HvCbf+trrF7d5Ju/PeBsEnDt9lX+5Z/+gJt33iK2z2nueeTKJr/wjbfYf36GmppiTYZ8+71DVpYNhNhhYaFI6MNg6JLNLtE83YduDkFcY3X9zS8ci7oGzqDHfDDG1IoEnsruWQfHtXDHA4r5bdoHD3l29B7bS2/SPj9jHgTYnsW4M0CZC0xmHoqcRkul8WONJAbbyjO3TvHckPagR7GYpdezyeWreNGUidXBt4uMJmNqtQr9eR9XthiMLCpmjZk74bgz5sqtdZzzMoP5BL8/RVRPSaez/PDjT4iix2yuvkW5kkZ2HR48f8z2xtt8/Wf/DQY+WOMWKcpUTZePDndZyi1iZg3iSOTNr9/E6h5TLi7j+CnG0wPeKMXIfBm9sEFBynP36bf557//h9zeusHtN9/m4KTHuNVG8zNo2xqhYvF//x/+kF/9pX8bQZAusulfcBejyCeOw8+N8flcdHYxnv58qZsblP+j/xD5Iv6G5Ld/m3f/d3+V6SffpH2+z9b6TQwzi/Dqqyibl9Cf3cf3QkRJQlYEguBT6ojwmUvC56K2zznKF9tK4PnOM3Q9plJYpTU5JZ+qcuXaOt3v/EsEEkRJJI5jfN9nNp1QXlEZDOc0lteZzN/l+bNd3nzzHfYPPyCdEuhPdijl1xFFhVJxiU7vgPWNVRQtIJde5mD/hJWVKwwmz+n0dunvmSw3Sgiewu2rt7EmU4JkxsxtYWpFKpUiZibHH3/zt7l89Rq+A1/90stEjEiZGS69VceZZzhrVUml+6xtrCKKCbNhiKYZLC+VMbQyB3snpDIiAhqdTgdRMNCEPPkFmU77GFVY5uUbb/Lj9/8Mx70INCmWtui0hvQ6XTa2FjncK/DSq2s8fLhLs7WD7yX0hy0uX7qCEGUJ/Rk+VV55ZQnHc3GcAUmsXlwwYp3xeMard77G0+c/RlIqWF6bxE9BpJPL1MinF1hspNg7OCQJ01SXTT548Ijl5VfR8x4zex955rKwNOSrX7/F/e9PidyA/ZM+pcYinV6L8ThmOrcxlSxvfWmV48MHqHKJWmWdfDnFR/e+x6h7l0tXruCFAjJVKhWRtc06nbuHlMoLpNOL1PKbVKoS9x89ZLF0GS/epzcMsSYOL792m0q1w7PHOyxVF3Fdm48/+IjX37qDa8msrGSxZqcc2BOSxMEsrWGKRZJsj7sfD/jyO2/w/Q8fcbO6TV5o4gsu3/7TDykUVxklPiOry1mzRX5BRYsXKaRFToNjqvkCoe+wd9Rm2G7RPO9jzyOSBLrdCQky+SJEfsL1q5eYjTT2j3dQkmXy+Rh/3Lzg1P+U66dOytm4vYJW0pDSKrkFD8u2uX6nQLWWoIZVlleq6EYJx9FI4hwIEvl8Edf3CeIEUyqzulTHmbfonrnUGwnt1gjLHiDJEZoqcPK8RZz4lOuLKCkXVZcIQhE5TiMKASdHPfSMg6wBssDzxyMy+QiiHGGQQtNzhEGG6TzG8RM63QmSGpHO6ZyfTugMTpjMmxQrWTLZMulMkXyuhm05TGdjHNdCICCfq1wkteSz+K5Hr9fDyIMVjmkPfJI4g6mXMNUqupKl3faRfIdS1qDfGeK7ASpQyzYIYpWVayusr65Tqark8zqZrEGxlGIytUjnNERtgjcJcDouIjM6nR5Pn+/gRRaaboKRRzYk/Mhnyoz9wQli7GNoGqJWYGqLSJKMPXMJLBk1LLGxXKdSkqkv1jhvtpg4Q67fXGOhobB1uYKuyUhIOPMRd66vghBg+0NkdUp/fk5jpcB0FpFKy/QGh/h+G8e9GC2qag/LnWBmVDYvF/DDGauVCo7dZ/2Kweb1FXrDKcPJiEmvzfT8LtbBj4i7O5SkMcsZi+3KlOWMSb83YCKYzCyLdCbDaDpC0SQQQyQtJkpsStUUpfICg0GHYqGMNbMZDIaIgoauGBcZ6rGDoEl4oYeoJchmghd7JKJEJp1BzqfJV0qYaYFyuYAd+kRJjeHQ5Wy3ixGXSWdFikt5EqnM4/sZrt/eprwSEcsuQRIh6ipaNqY/PSEIBKbzBC8MsB2JKKmytvESvq/x9OEx+UyeUiVNqVJBkguYWQM/iHCdhGK+jqqYSJLEaNDH0EwWl3IEoYOEeqE4feHnmMkZqOqcn/vZn0EURNT9A9wf/oj5093P+ImiIL0otfGLdA8BURQ+Q3MW/vZ/8Nk+fiwG/PjunyMnCoePBkjJjNizGXYF8oUUgReQ+CYnOzYP7z5j2OmzWl/jzZ/9Kq++9Rqby8ukRYm8YlDMFJA1k77tMOhZ/OEffpv/7D//L/jOn30fTc0wG895/Y0v83f+zn+IruX47nd/wHDYR9EUVtZWWF1f43vf+5D3393BcyQWFqusbpapLJropk6xuIKmLdEfiBwNA9BTvP7WKxTLJfKVdXb2Hf7iz57SO4m5fvNrEMoQyDx7bw+7NWSjUefll1/FTElsvrTOXJyyfP0S7ZnGf/c/fgu1qJCkIr5/t8nGchEjpzALHSzLx+45HD9u0T51UZQCo8kYJalgTZwvfPz+732H2SRCFHLMxhMS1yaydSrlBpqaZ6GxilrU+XD/CVNR5tzz2Dl8ymQ2J1fOo6gijjuh29+/8Bo970GcQpQ0VG2JWBJwwwmtbo/uoM90FiOgI1EgFGJmnsPzww5KKsdg5iGqBjvnTxg456TTZcYDmMxmuGHMPLF598FD7u8+49xyOLNmfLTzY066FkLuErnll5mLLqn1GnrKJJXWOOy16Lk2vu/S7g8oXF3n0b37vP/RXT568D5//x/+N3zn/T+k1T7k9OEjnn3wPvs/+gHf/J3/F7/9j/4hjUKOcq6Gpud49fU1corGpe1VZiLo2S1+9VffQES6SMW5eIhJkoQw9Igi7wV94zMHcnhhpyUgXviuIlD49/5XSNJFDGny4V3OfvMv8e6P/4Dta1eZhk84OPkAz7MJt7cQ/81/E1HWiYkJ4+hFSk7MBUvzi8Kfzz///HWSJJgpEdeb8N6Pv0PKlMjmPU7PHlEq5IGIOIohSVA1kYOTZ/gBZHIiR4enVMrrKKkp43GAIGRottpc3fwlnLnCxvJt9p+foEgFQi/FyfGIH777A07On/DD9/8FtuNh2xJ3rr3J6obGSWuHSFCpLNXwE5+FWo7O2SmGLtDsHfDlL38ZNxxRXUjR6j5lYk8x1WW6c42z/j6Xtips1EpMz/s0D+aYFQVLm/HzP/MLlAt13nz9S1wAvjlSqQqxdE4sWkyHFkJikkQyD+59wuJCldGwh6ImuJ7Pzu5d5s6U8Sji5u1rPHx4n8lkhBe4rGxmCAWL0WTM3uETRnaHdLpKubjGeDhAURSqizpzZ8JJ8yMkrUe31yZlVJmOY7wgwkxLaFoJUY3pTc/5/o9/xAcfPuTNt14nk8oReglJ1KQ/OOPJo33eeHMF24r4s2/B+vVrkDNZuNQglGT2T/eZzl3WLq0zD3c4Od1l4sxZ3Iw4bH1Cd9inVF7lKz/3JVD6PNt5gjP1aDSqnJ0foigSzfZzfH/MR5/8iL39HVRVYWCd0epO8IIUq1cN/vTb3yKTWuTq1ausby4y6EhsbKwwmt/now/vYqoFut02hpqhvrBJSp9xdPxjlEKOzTsNDnaOECQTdT2m1R9hJxJRKuKNr/8CThxiTVyUIMLvjWmfHnPwvEMoBDzb3yFRIiIELq/XqKZTF7XetZiNJZC7jOb3OdhrMux7iLpFHAXIKDSWK5yetBGlzE/bJv70CGXgGohhEUOZ4Qd9ZBR6rQTPklhekWj1XAadIdmcjiAOIeohCDlu3dymP7CYDWdYE4HGcp6RFJIyJOzxgCROKBcziOYMLRGRdJ9nBxZLjTwLizkG0zGRPyCfEwnjAFEo4HgJ3c6A199cZ3/vCeurGzS7zkV+rhfhTlwy6SyarhMlAYousH6pwmguUV8ukaDTH+5TLVWRtTmu5yNIKqlsQK8VEPkj+sNDGnqDOJIpVXRE0SQQIoqrCqO+x6Tv4VozarUKfhhz0J8T9/dIFIGUVsYejsmkZ7z1+hKKAblinuJ2htNOB8+28AJYWS9geWOy+iKj/hHvvLlCc+jhMmN5vY4oOLRPzxhhMbcSDK2GgIaqKESxgOvMEXQF1w9QFBlrHmAYEpFrEVkhI0ln0OujGCGl1Rznwws+YqGYRhmOSecVAjemf5ZQKTQol2XOz1ukC2kGXZ9UVoBQIa2uockzrElItbSMz5DD8zbba3ewJxJLjSrSNMOD4084eN4in15keW2LyWSMK8QEns94mmFxsU5gOyxma/jzHtdWTNIpgdOeQ7maIyIhbeUYj2bEUUQmpZLJpYiiiE6ni5+4JCh4jk8qZVApLjAaTZATFdSIydRBFTRs20JWJUw1g28npOUcU3dEvxsjBgGFTJUgtukMWqwtrvEbv/mL7Dz8hCd7ETktpNeVaZQ9RNdE8hRShotmqEyGIxxbp7G0xNzqEsQZUkqJdFZkNJ0Q92MkVeG0fUzSUTAMg3kckCQGvjVB1mTiJGA0HlArLUAgUKoXcN0hnjNBUy8skSD4rIQpsoI9D/Cdz8d79vvvf1reLmLe4ugC3UmSC0FCkiC8QFky16+jv/M5Ovn3/vv/Gs+NEfEwdYG0UqB/NkVVVHqdEY7Vx5AyrK2qZDIpavVFdp91aJ2OaDY7pLM6bhixsbmCqKvkdQ2ZhJW1CmZfQpFV5nOHwJuTJAm25ZEyC5QqCmZmAT/0SRLIZjOoqornBoSJx+7OGf1BB0WHarWKqRfYWF8ilZZprKdI6wu8/+AJG2sN3n3wkGpxGTWdolzVOD89492PvsOly9scnp4xa3dZ2q6SJCpyEPMb/95f4y/+/PukE43Gapq3X7/Mn3zru8w6BywUKvzqL7zM7vMTbEeglF5j1p8xm7VpLG+Sq6R5trNLJMZ85ZUtbH/8hXPx1o2bRHJItlRHl1KMOx3SmsPJuE8Qe3z4wV9wcH6OqJfpHO9RyFcxdRlnmmYeBwxmp2TSeRQtRpFFHDGk2d7B8yJ0ZYFicZX+6BDfjSmWakhKzNnxgOtXtykUU7z3/l+wtNQgEmIEUWVhYY1ElOh0Dknlm0xGZdpnM1TDYm5LrK42OHq+x9rlK5hpHVlKePT0LkcnB1y6dIXhaMD43cfUt66j5YrUqg3O+02sYEav2+VPv/n7GLkUy6t/nXR2lcaWymTW5GFrjD/tIoY+2uXXWVku8cP/5wGvffnXiLNzIhT6HYm13DWcaZNO3Ofe/mNWinUymTFRFH02xhYEEU1VkUTvJ4zMxQvB2Wc74wI3VDc3yPzs15Ak8cK39ff+Oe4bEW+9tkoQhZwdNJmN/oClhRuoqoHw2quoly4TPL6HJIqYhok9HyEIIvFnWrhPOcf/yrj7s6opkVuQWFhfoVRb4/jgjLXLt5me/hkxIaIoEScRQRBQKGTpWQqT2QmmuYyZEpnNHQ7PnrJ9aZFHTz9mMplz5dI1puMWpqhjmiW6vSO2tpeYzEws54T+/ojJKMXP/dxfxZnM2N05ZPNymbsP/pA7V38WI5Xm6KjL0tIl+t1jEl2mVFygN5qyUNtmOnkfTTOJpRmyK+HOQx7tHuDQR8+KjEciq9kGO+8/Yjc+5cbNm5y0j7h2/SYPnzyhUV8lnQs53nfY3l5GU1Xa7ebFtCu9xMpajVbnhHE/plrexA37BKHIyfkRAnlSKZtYiHi6s49tu4ytHldubjCZdhl0e3i2zSsv/Qzz+eTCHzO1RBDsMOw7pPQU2UIdL+4zfnGhOjj8C15/8w2GB23qS0t85WtfZvfpOZmcSCZjsHvwmETT+fmf+WWk+Qnt4TkpKeHpWYfz6TmN7A2m5wcX/N/6Kle2N3h9Yx0x8ogpYhaKhMkxx2fvsrRwA3soU8lsIwVnOOOETN5mPolpLK6xtnSFybjF7etXsJw2g5FFsWJy1u6ztppnMB2TKcDjJ0csVHMcH0/48lff4Nn+95iPU9x6ZQ3X8ShkV+m0pihJhCamya8V6RycM+uqnM76/C++9hLPT87YOz6luqkxGck8e3pMvmhwdt6mkqnjR7tsX1lF02c0Hzq8+tKX8ZMurecWC9pVVEUin81hTSN6gyNq9RUsyyYOBQJfQTd1Lq9fJ5dZwBpPyGVUnj5qwa/8dH3iT8+hPOuimz6l4gJzN00mGxEEDoppsvukiSwa3NreYjQdEkURaWMJMVERQhFDF5BKMBl4jCczUtkMoWOwspIliWrU6j56NcVEnTPsjriyWSSdVwiDKbIYo+QUhh2ZkX1MpV5CUkQqtQyKNkCXqkzHHbLlMpNxwELFoHV64TUWeh5BIFOpZml3DxHlFGKSZzScUK4UOTs/xPcckGfM52nyRQ3HlgiCFitrZbqtOYIcEEUiSeRx3GxSW17C8SKymoEhikynUwTVJJMtkzIlIt8mm8oQxEWUtEthQWV3Z8Y7bwhYQ5U7d+7gzof0pj6irzCazlnbukqhukI+5fPJsw+obcj44YhwJjMbTyk1aighdPsOhZwJmoSgRYixwGw4RNbyyLpAuVxnMmkjYyMJOtN5iBMOKaWrOLbMwf4ub7x+i+e7e7xy4x2ePXjAq6+9yqDdZzjqMeokpIwix0eH5C/V8dwpUS6hVqvgWQqbq1U2VlY5Ot6hURR465Wv8j/+/f+e5bVVSoUKjfUFnu8GTIZz4njEaDxAEGIMZRG9GBPofQZdAytu0muNmYxdllZXCCOB05NDRFnBDxPSRprpfIamSEybY2ISZFkhk1kgDCV0RUWSAnrtHrpuYDsX9g95s0z7vEltoUg2Z3Cwf0qtuIQmGcR4mKUpoa2RhB7BHP6Dv/EbrG9mQf6E8PyU1WsVCsU0tcUuBIucng2Y2TaKmKNUdQidLPYkYDpuoxsSo/6E6WxETayRzUT0hkPUrIJZNtg/a5JRswixg5hElKpZzpttJtaM+lKNwHHwbY/l7U0GQ4/ATygXigjnYz4lPyZJwnBkM9dTBOEXLVIukJyLQisI8QtnlQRRFImjT5EWvoBOPpXgW9/7Y2ShQCZjkNV1Bk2XXschlbLJZE0aiwvoCtQXK0hiRBJ7GKZNttagVM6RT5uk0xmiJELSRXL5ChNrSk2JWFtbQJJVNE1jNpthWzadTodv/sk/5fKVLcxUCS8I8Rxw7ZA4CtF1g3SqwHw2pFrLoeo6ju3hWD6O7TGZyEiKRGBPceYS7793QEyIIE7RUwZRNERCp2xWebh7l1zBZ3uxgaNkGY/7bNZ1zjtH3Li2yaQ3QNQX2T884fU3bhPMDD5672PEdIqX7lzi7OycMIDz+Qy1XOGl1+9w0jpBUTTSUprDZwPu79z9wrl4++01BE3h/UfvUlSv8d639/i3/t2rHB/vEiUhOUml+cznb//tv43oHPMXf/yn+CkVIQ7QCyqjSUBSTPAFl9moT7G8ihFGuMaY8bjNeCbhuGNeuvVVhCTL4dF9MulVuv09wiRNsZRnPBmQz6yQRC0msyYiCcXcGr4d4ocTyrUai/WrnB50SatlVrd8lisLtPunOIJBtqRiDw84O5kRSzX8SZeT8z7lfIZ5tszUjRBEneubl3nr1Ts83dvn/Q/fI19Ks1RbYTaMWVhq4KamuIlDXi2QdZb4tS/doWbOEcIiw9GUea/D6pXLGGKDaDpHjUDVY8qNFRClz+yyYmJkQQJBAqLPH/gX61Nlt0CCeuXSZyK0+IMP+eT/8r/m+YN/jCltYnknCIZNsz/h0bPv8PLtX0Xf3kTc2EB8cp/Q9zEN9UL1g4goxBcj7/9ZE/kTvxuQNZvheJ9cuEo2K2FZbXb3JxSdgwuro88sjQRGQ5vM9lVkXcJ1QsbDCUY6j2FIyGKG9fV1yuUy2UzE6Vhkb/8TpCyYZp567RoHB3/O7sEx6VyWpeUinU6TGAFVN4g8jRuX3yCXyWGHFhNrjmic0u2dkS1mccIWYRhyejQhJKJSquPHE45OT8jkykiihIYOicfyusn9u/eo1GTyskwUOYxGAz76aJ/F5TKHx09QFOVCt3B+zFJ9Cy8YMZ618A5tZvMugmjQGrbxIwlRklAVn9XVHEJnxvGBi5GRsa2EtaVrVOsFHjx6xJ1bV5n2O6RTGsP+gMpCjqlzQuyZrC+9zvHhPtvbCxzs9kmSHPmsge+5KIqG61rUFtMUCgX+4rs/otGoo6lVIjFi/coK/WGAGzgMWy5GqcK1NzN89MlfUCysMZ04JMIcM10HU+S9R7+L1V9lbXONlBtweuSyvHwbrZiCOMRjhBAXUVMFZC1FrZbi7iffxXG2+Et/6U2+8y9H+Ok+R8c7iFoFxCyprIzldhD8iNriAo/vf4QfXENNpXn47DHb1zZ5/91neIML8dKVK0s0T5v4XhuZFHnpFp1ZH0nUePvrt7j/6BEZI8fVWxtMZudU1So7d/+E3nBCobBBtlFEKC/RPB2QyWgUjQZZXWA4NVheKLK1vMTE6WIoMuWyych5xsN7Xa5dvcpk2mdm9blW+xUy+VO++Qfvsb5VQxAkAu+nHmT/9A1lr31IpbxI3xshyRGRckH6nUcdtlZvo+gCg1kLSY0wNQ1DyqLKCqOxjev7TK0ZuWyKd37mZfpnEnsHj7l2q4Jr5xCkOUKkk83orNbWaM32ibUpKbGG+2RAp+eyuqSTD27RsT4hnS0x7A0pF+vkSxOK6VscDNqMRw5SnEERNez59CJqcT5ClmoolBmNj9h54iFILind5MbV27z7w/uk8zrlapEkEdCNgMVGBUEQqNZMuv0jbBsypkljYRFF1sgv1snqeUIbeuMTBNXDNIv02i3azRavvXaJl15Zp9U7oXd+SlrMMp/PkbQMnm+jygWkZEIQD7m0vUkUiiwWc7z38QfUGznGozGqquOFAms33qB51kbNh0S+TRCXiSWFwIqxA5AzEYYWYM1kcsWEDDlmE4tGo4goS1g9i8hLaLYGVNIFJj2XlfoVuq0mN27cotuecXZ8TFLbYRAAAQAASURBVCJDhIofObiOzfO9J6SMFHvTQzaWfdJqlub54cW9PZG4sbXFzsP7ZAtFZC3mdPiMbFYnlbHQpUW6zYBaLkeIgKgYNEppHh89Jb1Uw3N7lGtlBGnG8fGMfDFLMV/CD0PiuYOiKKRSKUajMdlcgUQUUCQInIjZbIBr+xQKeVL6i1GZEJNNpyhmKjhjl7RhEkURlXIdVVWI/TFIKll1Ed8OKCyG3HjjHZ6ePuXPPnjA1RWTnUdp1i9ZNE988oUsU8tieaXKfDrj8GmX0M2weTlDFDgEnowoGqysLSIpIbY9Z9AJkRQV1xqSyaTRdANTlhACDSFKIeOTSxUxtTwLhRKuPUHWNaIIUmaZ83aTdDpGllVg/oLLdYE+6kbCS7de+ckMOhCiF1GLAqLIC3Ql+cxHTxAE6n/rNzHe+fJn5fDv/+O/hxJmMY00R89PSatpNMPm9u1LLJQloigiRiWX15D8EuWaQX1plcbGCel8gfHAIvRd0qk8YRIz9+a4ros1meLOY4b9PpIs4HkOcRyjaRqFQoFsNovneRSLRRbzRSRRZTabXXhgCgKz6fgCWRUFvCAglTNRRAkRgenMRlIMmnaPxI9JaykQPCRdxXEsiEJUSaY16rC4lOHpocX+MxvDCAikgMPSDCF2OO82yafq2OIOk/GArHnR3GYbFcSUiKFVuHptAUWxeOtLrzGZeoiJxOrSJX75Gy+x/+QZnh9wOZX+wrnYsj9GsBSSWGQ8HyEVHI5bA1QtxeHRCYf9MaKRYvPaFlvr1/j+B99D9Qv0J2dEcpWV8jbR3CX2BfRE4/zJOYVqgfF8TDZbJ/TnFLIZmucjFHnI9qUrhJGA68w4OnhGRt9Gk0YE7oRirsT5+TmlWprpdEwuvUEpU2U6nrH/WKKxYbKxVuKsrTMaD9HMiMOzu6ws3EDTDPZ22ly6U8WKbEJ7hjWyGZeyKHoKz0rI6ik8oUjvdI4f+PiJx+n5M8rlBomgs7Jaoe+7DFsj3ri5zeT1Hp5WIRHz+MaM5dUV5IzMJzsPMCKNvFQhY+rcufoNVEUjjmPE/QP8wCMRIYqSF7zKFz4Fgvh5fyckLy5Vn/8v4nv3OMwV6HX6CL7FS7e/xO7e7yNqLs78BN+bo+tpxDt3kP7kj/D8GbZ9IYBLXojYEuEz3fgXEnM+XQkwGUXc2H6TQW9Iq3WPl+9s8mD3GY4lIksacWIhCiKiIJFK+6Cc8/h+i/XNNTw3ZmkZqqUSYpJGE2soMgzaMo3GArdvvs7QGhO6MsdHu0io/NxX/h1effXLVCopfuf3fofDg1OWliM67UNKmQ2UWh5/1GG50eDmjS9xUn5Aq9Nld6/DwsICmiAxnGRJZRwOj4/Q9EV0PY8XzsipX6U5/JDIi8ik8uT1AkKU4enTY1AkVD2g3e5eiHsmI4xsjGOJDHsjstkcrj8im8pSrS1wdn6IXkzQNJnGapXHTx/jhBpPH+6xvLTE0WGPbHaJYX9EtVomn65xfjJEQOHalXUQPQ5PDjHVCoI8YTKZsrrc4OTwCFGE+UCgmNvEYpfGSo5uq81qYwvdBM9SWV66ghdaXNu4xmSyTzmr8vThIyQq5OvLfO/9byHIaUxbRRAtdN3AcoZ4nkSpcIPTvV2GHx/Q3tkj8nO89cavY1ZS6GaKXKHG8+NPSMQpZeMSu0d9ti69wWjQ5e7dZ6xulXj4YBcjW0bRs/QGAybTAaLcQJIsSpVtrt2UcW2bRIlwI5unj8fohkS9vsFw3GLY66PqM4r5TdIhPHvvB8QL2yxvVTm4exfPj6ncqPHxg100ccJLm1e5fe0mP3z3ByiCjzeyyGVVbLmPoqV4+/U3GY/6eJ6JoSrYwZRsPsf58S7twQw1Y3L1+gIiIuuNW5hmk27vnKfPH3PrpS3mc4dy1UDQ2j9tm/jTN5T15RtEUXRB5o99JlOHfM7Emxkc9x4j5VKM7T6mmaespxlNEubzc05bXZYaDTKpNVxnSkrdYKR06Hd8Or0e9mzO1auXOTg4IKUnnI6nBFrqQrwSVtleErm+dYXRzEY0RJZTX2dla4Hv/vE+H31wj/qSxsHwKR3bw7VCxHCITIImKfj+FFU1GA2m2PMZmrZAYEe4dkh6SeLo8DmXtiv0ux5eEJJEUF00CXwQxAhRsUmZJcLIIZeVGI8V2icnpFJpvFTAcDhkNnXZvJwlJ88IcxHV6huopkyrd8R8MkTTDBRdwLEVHCvCp8vG6gLZArROYsaDmFx2zIPne8R5mdbJkOXFEqqo0fWHnJ0OuLZm4s0Clt94lbkX8OEH91laWiaYeahaxCi2SMsCndOQxfomM+EpfjjBn2mEjsLkXEFRbOIoTbc7RPECpoMZVjBnZXUDbZolcE5JpYp4rsFK7So7u20q5SkBWY4PDllZXqdSXsRxp+TyJs8fPmE067O+vYrrxSjTMW7bpWJUUI00Spyi035Gvioyd0OOTibU60VGw33cfprESJBLCaagIoaQMbOcNk8JQx/HBtf1EKXk4kKg6biBj4CKIoukiyUkJFQ5IUwSRBGaZwNK1/LomZjn+y1UXcXMRURhhK7oEFtEcZVAG7N/GnFv98+Qci71hsDDoxmu7LN71qZeXMaaegReyHwqoWolSmUZ7DT+EIrpLErewDQyxDE43oBaqUo36uLNQQg0FD9GFgJ0WSfWVBYaNVpHHRQEsjkdz/bQlSyGnqbdnBDiUS5s0G03CQLxswInIJDNZbh96zbraxs/Ebn47EK4EH+aQywQx+EXRAXpq1fJvUAnBeBf7D3kn//T3yGMbKadETkzg4jHUqWGIqcRPRFRTchWJLLpCo6lkS2WCJKQhaUNdp4cEvhguy47+89RjQvivBQpaKqEboCiXjgIZFIlkiTB8XzCAGTZwHM9Bj2LXm/C6voCc2eIpmkEXoiigD338WIfVVfwps4LYZyAZpj0h10WcxmEnIoTeMSBjzsLMFSTRJZANVB9n/PuEDlJY+Axno2R9Ay2NUXOpAlJM3Z9YkPCttPUKmXyKZFwHmB5fc7nFo3FIoVKitZpl4Ka5e53v8etV6+QaGluXbnG7kmTdlz+wrnYPxqTSyucHU2Yz84JphGb213EwKO2UkfbXGY6DHGiGb/7u3/O2SObzSt1rm41OBsFHOzu0ahW8VydUFDQCwYP7h1gWxFrl2bMnTkbW4uUF00OnzepVxuMrCN0JcX1azdZWXiV57s/QNdTzIMWtfISXjQmm8kw957iDauk0jLaZh9ZXOTwfBd7HLOyUmfijFjMb7JSucLj5j16gz7S0+dIWkC7OyJrFhFzOvVSBSdo0pnewx5PkKQKeSlCSxdZX1lFnkSgyVh2h3HLIVMUebb7HmfDY67KJsdnHyEvl1haeovH/UeoLqhZFz81Ilt7G1m8aNnE/88/I9jfRZJlFPFiDySJeOETeZEHdfE8CyKiIBDFnxsuXzhnCcSJR5KUcMMjHj//kGqlTrtzzNOnn/DSnd8gjiJ49VWU7askD36MrMHFFhJe7DnxJ5Td8f9MAASwtrHOt/7lx2RzKrYz4uDsjAiBbG6ZMHr0hX1YrVY5cgc0Vkq4fouvfeUbPHrybQTf4NJ2lVQ2YDYJWV1P8+yTMdXiG7x2OUOSJCwtb5DPNhBEH3duMp2cISQig84BN65+iey2yo9++AloOSQpwbclVhcqnHY6GEqRpbUtmsfnXH9lk4/uzyAw2Fr/Cok44uy4T6lYhmTEYjVHtzPi1/7yX2V39wfs7h6Qq5aJk2VSWZlUKkenfUYuVaeaa4A/w/NtMpkMrY6C44ZIZkytliGIpoyHFrt7PVJZmWarzbXt11HVkOl0zvb2IjtPDnn08BmFYo7V1WXkOAVJRBj69NsxsuLihgPi8JyJrjLsxEiSxNqVIqfNhwhyhmo1Jp4LWD0bRxL52juvo+oRg8GUZzuPWV3apFo2cb1HRNGEMFAoacuMZ1Oa4w6SGJPNJXjhBNELGdhTiksLrNSukrwxptvdwzB6uI7ErC8xdw+xpxNcZ0b9doTrx4ydp5jFLO3hPTrDmFsvv8xpe5dut4eQpPiZn/krBPGI9370AzrtHuVShiftxySigarGzMcjyqU842kbRUzhe7C1fotOx0XO5Fh//TZDe0jzeIdUxUfxEjqtfba20lgtCVOR6OwF1CtXwbBpNx+zKbzMpRUZW1Do9ffwIxlP8JFjg4OjU2IvxS9+4xv8y+99CyNfJvBFQifFbN4GwWFpVeTWa1/l8YNzxtM+ipaGKPvTtok/fUOZMQye7xyjKAqx6KHpAo6fRpQUisvrqLKM54uMhucYhsFgNCYMLYrlAoPJDBGLyVjhv/1//CMKCxpaIeTPv++RMgzaQwvfDZEFj2tXL5E4EUvCEuetFl/+2lVOz/apmAKLjRof3bvP+f4MSWuhKUWSICKbiTBIMyCglczQdAFzbiDIKkFio4w0dCNHGDoouo2kqXQnNmnfJXRM0nIaTZY5GRyzulTHsj1miXPBa8jlmdsaC8urnDY/pr5eRzM9/J5DEowoFetkdY2lVRW5d4lRPKec0umPEhw3ILJ1aisaubLOYqPB0fE+vUGI688YTXzKNQ1XmnPeGeCELtnUEqedM2IpIPSgUa7Tnw8pZSXyjRHn7/f5+huv0lbaiOaYhewWT87aRJHBK9s6iT9G0DY4OjxiNpHRFJ+FBZli2aTfHLOyWuPhsyMkXSQ6VsHbp1jMk6u+yXi8Q7EgM7bgyuYSnX4L25mQEfKcnczY3Mqwf/CU5ZU6qAGNxiLe3KbdPmJ1dZXnO/uEkYw8UcgWNUJFpDWYUV3IktF0nPmUXKpMRjOYzWYEAx05SohFB0kvkVbriIrDeOrgRX1kpYSpG9hWF0nTMLUCxAoyaXrdE2Q1IJtapJhSEXPgTGak9RSv3MnRHTTJFgvY3hzVyOP2jrGdfcq1HJs36sx9MLQ8y7Ul5MjHMDTyWRMpEUkEAdv12D14Rt2IiOMMczsgba4iKAFOOMUsGJh6hm4nQJBsVhuruLZHJl1lOh2TMnNY0xDba3N+9JzRzMJQskiejyjFNPtTFqoCYJNVc0TugM31LVJOC5gjihcjb98X+Jv/zv8eEND2D/B+9C72zs6LMV3yIo5OII5CZEkkSWJEUaDyt/79z4TeD8KA//P/9e8gyh75VAFR0Oi2+piZNAdHI3y/hShfpDmtssrTZ/sUCgXGtoU1nyLLMrIs4vshgR8RxzHVYo219SXKlQyVcp5SvkAU+0SxQxiGeG7EbOrSbPeJY9jbP8GxPeaOz0cfP8M00mh6QBzHJElCLqNjohKGIXPXx/adi+I+nSHLKnaQELpzMpk0sm7QsbtEXohpaDjWAEmSEWORVEpEkAzWMlVqCyX80EOSRBaXsoyGF6pGAo9m95zpcEahmGdtdYmp1WQwmiFLGRbKC0yHI176+ht4gcrUV4nUDLIZ04isL5yL+so6wXSRO6/mqS1KtFvnZPMVzo6aFNIlUtUMzvyM8/f26B79AEWbIqaySEKGrYrD0WTE2f4ZucoKk8BHEiTiwCRfELDdPq++cYte26ZzEjHtWAzTYxJJu/B59SY8Gt2ltrhEVUvTbNoYa0Vsq0RnMmU6danV85yctcmls/R7zynWcxRrZdxYwHfq1KseoW2xtXqZciHDbCyRiB6L24vM7SnzkUXSaOELM2aJRH1xmay+DKLHfHKOZJuE6EiqgBuKLKyUaJ3tEjg2K5UszcFzso08c/uc7937Z5QW0oSaTz59nVFnB8/sfj4ivn+fKPJJAhDTMrzwmrxAI4XPbLA+jyZNfnIajQjUyqs8ff4QwU+TWCe4qoAQK7SO9vng3rf42lu/AZvrSBsbKE/u4breZ7nzyQu7oM9FOS/Sdv4VUY5reww7H3H4WOWXf+0b7O88x/QazIZ7JMmnzW6MLEmkzBKd9inVqoyuZNg/eEYcZPAEm7/4wZ9y8/rb5OoOp6OPWL/5Jldu3mY2UxAkm1DTeHr+ECHK027tsNxYxPZALyYcHp/zxstf5eU7Cd3uAaJokDa2OO+3ePqJxdqmzqwfkdYKdNsdslqWdHqdpeUchwd7IHZ4vPMBm2uvkM1JZDM6e4fPyOZvUyhJBL5ENiMhi1MOnwxAFKmWBT6894RCxURRNKa2jyKbGFqFVEbi8ZPnJIQQFFhZrzPsi7z60m0++OjPyZsNrl2+Q+RMCeMx+XIJSQw4PjzH8SKuXtnm5HBAKq9SyksUC28wGs4QZIFPHvwZv/RLv4BquLj7TZZXKszGTbSCipBaIEimuHHMfNzj0cePqZQzPH30mGuX32S5scFgfEoQGkhqlv6wxc1L11ioi7z74x1E2cGbPEYzC8iBxizjk5cM+h2fvnzCQmmFTMHn+e4jVLVEoDr83u9+k1/65a9hjQc0ZwcsVjc5Px6RJJ8gii5Fs4wgqkx6Dv3RGTeuvEX7bIAQ+VRrG3zw4/cQRag3Sri+w8npAUkssVDdYjL3qNaWcKVjjk/n2FaCG45Y31qnef6UGI3jk11CO834wcdkK8ssFrKcnh9hT0UO9B2u5uv0zo6w5h5eELGyeIUw6TOf2ly9tsx79z9kZissVMoMvDGh0KJYzvLRBz+mPxqRTuVZqpZ4/Rff5KMH97Ds/z+MvCeuTW5RJUkCFCVNGMHUnSPJEbPOkJypkggJqlokCpWLzR6nUMQCnnPMTJaRNDBTMt1+B0nVEHWVRAk4aZ2yWtlEkg3effce9WoFSU6IJIH37z5iPLJY3pA5PPZonvcQujPQHG6/scCsW2YyHjJ3erx8e5NH+12mlktkOxiaih/MWN3e4uGDQ8pLCmZOw3UlRFEGwWJs9choRSLZRNdTzOYijicRSzYkU7qDAeura5wd7mIKGmlkep0pqfwSKUVGSoqcdQ5oOQnZgsvB2YTF6zL19QZPHvRpNLZJZJt3P2iTSk/QtRjH7rBQWMcdh8TeiN1HbRbqGVzLxIo8uhOfQsanVKzQ6s65slrDEwc8+OSQlY0b+G7IWjHHoWAznVq8s5Lw+usK9a0A2ZD58Psj7pzLvPWlKmalxJ+/f8qss4RaHTGa+JimxNzywDjj8KlG/a1XmMQDTkdHaGoVx/FZXmowtkxmnoOaWyPympy3JWIxojdqU8gtMZnMERXrhbgiJvJzpNIa2WyR7ugASRIYjUI0dUK9lCYRVEYDGz+YUSrUieIZupZhZb3Iu987xNAUPMultljk5LxKEs8p5pcZt13SmkQ+qxHHOvOZjaYpiKKG405xQxtZTmPbPssr2YtMdEVClH0iO2I6bbK0XMedgGBDUdVZzGaZDTNYJz5CYvHw5AgjrZAr6Jy1d5lMXRJBpbZYQjBE1upL5PMmw+GQUX+OMz3j1o0rqIJCSl0mim0SRcK1x6wuL3B6dsx4OkCQE2R06rUiupbB930KhQJJcs5CPYuIiWsHbKzdYmJd5NOLwqf+d3DlrddYX976bLY3/Ef/6KKoCi+SQ0ggiUmS6MKMWRAwr2yj/YQQ5//2X/5dhm0ZRVVwopCV5RLLjTKJKBAGMBpNUGSVXCGP5wWIEpgpnelsTDqdZjIbY0omumGgauDMXQb9Ea5rU+hkqderpMwe5UqWQjGLkUqh6QK6GZMICrO5xcJCld3dfQxDB1EmDGNc1yWVSjGbTej5PqIooijKCyRaxvM8NNUkjmPGMwuImbs2oiiSNlIIgoAsS+hGmiQJSBKRMJqjyAYza8Jsd0bMhb3RaDRCUSWiRKDXm+B6HoaustAoIRuwkMtjpERcy8RLBOrrm8wtGzUZM7Hm9M66mKZOPr/1hXOxXtex7B5pQ2cymZMrpNE0m6tXVjg8anP45JyFLFRNhXitzm7bZf/gY1566W1ShQ30iYqrdxnYXcqlBQJf5OatNVTF5PCgxeGjmMl4QuhZpESZ7mmfm8uLmJkGS5s1jnefM3h8yjRVIFuuElk+Rwc7eLGIb8VMp1OaZ02kxQJhINA67zDpCIzsPer1GqJYR1ci5t6EfFUjnc5TqZWwnTaGucjZ+Rxv3kdTZPLaJkdPO1y7LTNqDimXLnF/7yFbGyvYZx66JhKZColZpTNsIagZPDHDn/7pd6kuZShk0kwPE5aqdZJghCEV8L0Yzw/QjItnPggDwsjDdYPP/VU/I01+bh/0qV2W+dYbn43FEQRsd8xqrUHghbhnfQwGvN96TjqzSX98QphEGPKFi0Icx0ThxQXsonEUP/sdn3aq/yo6CVAuLFKtrXNtReP53e9hRwuY6RO+dP3nMbR/Qhx7SKKIH9j0OofcfvVXsOwxijpCCD0EdLqtIbIUc3r2iJ41IopdyusD/k//x/+I1Y1XyGUWyOY1JDQMU8aQy5ycnDCbRNy4fo3W2Q47u5+AoJDJCRQKJXIpjfd++IAr165f+EUG+5wc36ez02B1ZZ337v4BjeZVytUKztwmn16iVqsx9/vMfRvdimm37+EnHpuXLjGdjSkWK+wePmCptsXT54dEQZqGusDu7g7Xr22zXl8B5ZzjkydsrK5RzC8znbmUFwxs9xEfvHfM4sIrJJFPNr3K1DrA8qesFU1CbwxhjBcFPHzwjLWlZcorAZ+89xxFl3DiLr2DFL/4i9/A9SKSpEQhLxFGM8qVAudnXWSpzcZ2hj/70/fI5TLceXmTk+MmlXIDP5yxVMhweqqiGhpBckY6F2LqGrEX8Oqdl4n8McP+GD3jMTwdU84mICc06mtIsoqsRAT+nGtXrtIe3cMwFqiXNnn8aI/L1xaZWxGGnuPOravMnQNsKw3RnMk4QNQPiMU5QWxz5eoGB7tNkHu8+tpthoM5muERBB66kcF2xujpCNvuM7VsxtOYj98/5KVXb1JvXKV53CObW8Fx21RSNVLVFFFiUqgUOTo6oVG9Q+GqwSf3HvLjgc3qWgPP2qFQuoyZLdLpTinVDc7aHcq5IvlUSOesTWmpiDWdoSVVVktXIRRZKBtkTZUHH91HFgxevl3+1+yCf/36qRvKudsmiiL8IKGgpbGtIZm8xnzuYE8DZFlFSLIEfojtTDk/70CoU1mQSJsp5laCqvukDZlATxHHOq5nM3MiAldinh4SBjGqnmI4nzN+ep+VxiZW4BGHGpNBntpCnmtXCpw0z2n2WnheH9vyUJUIV4QfvPsYRYbQi6nXM4RJhDfOY3GGURgTJxrWJCEORVRdRtGyIMvMXZfBdMBipYEgCFjTCYqiErgiWxsbKFGabtIkTpucDE/IF3M4QZdatcjjdw8pZgTqV4s0mwFZQ+X8rMXB8QRRVumOx8RKwNyboxgKsauTRCLd4QmxaHNwOKbV6eEnKbRUmiiOSasxquHQ7ZxQy2zRH3bZ3K4SugVG/RG+GRN4MVhwNdvhypLE/uCYj3cdYldka6PEX/71ZRZXDf67f7zD+zsaL60ktA+7pFIGN9eX+PCHp5iLIfWbL3Gwb9GcPkJJz1ltZAlDkb2zJs7copQukIQ9EBSe7x6gagmN5QUeP3lGPq+yUM/SPrGYTEIUtUQmJzKbjmif9UhlM6himiiIGQ6m6IaEIJlIscnefodszmB/9zmuW8Q0VOrVVZ7vPkVUIKUvYUc7uG6bG1evcHx2zGTSRZVzFwesWmE29V8gT10EOaFYqNDptskXqhimiqlqtK19HHdOX/LRkjrW0Ob4sIusqfhxhB9EVBc1pDDPYbdFbbGGa4uYao1sNo1r95hOZ4SeT294jmnqVMoFCCB0IkI3IAgdkFWEOIHE5fTkhOl0RLWWQRQM4sRAEl16/Qn5XInpxKFeX2A2GVGrLKDKMY+f3CNIxlyW8xeF7EUle/PX/yYJCdr+Id4Pf4S/u/+Z/+QFsexCjUoSEycxxFD+zd/8bN8+ikN2dp5w43aD2WRKqVQiCgKsmUt/NMQwUhSLRTzXZzAYkCQJ+XyeOI6RZJkwDkilUmiqged5SJKCkTIBGE8crLnHyUmbcrlKfbGCmRpQrVYB6PeG2LZNu9shCl1kRcEwUhRKKSaTCVGU4Lo2kiQRhjFxfIFUBYGHJElIkkSchIRJROQnSJKIKEmEQcycAFWSkSXxIh6tXLoY+xMS+QGO46DraQRkut0WEQm9zoThaIKi6ESxiCDIPH68jyyLZNJFyjWZ2WROKh3RGXaxphGROGUyFCCUcP0TFDX3hXOxXm/gej1kWaZe3cILWghqmko1y42Xt/mf/tm3+Mo7r/DdH97D1w1qK7/InZsyJyd9vGjO2EoQhAzbmysYosh4OCIRQdcc3ryziaCoiJrB+VmH8/0p2zeu88nBLlcW61R0HV8yGY5VNoqrjJpNDCVGSdKcHR8xsGA8FtGSOr3WEFUPCK0IKTNmuXqbVErl4eO7fOPn/xLD6WO8UCOT05EUk/axj2koDEc29aUl4nDAfBpQyJaZd5oEVshUPafTH7FQe436Yg57fkznfEgsJbQ+Pmb1bYNqdo3/+Ff/E37wyQ/wXJnKagHHc2met4g9gXT2MpJ4UYYEQBRAkkCSXojLBIlPc7o/y1gUEgQhRlnbIvOzP4Mkihct4MEeQQDp0jL+zMPSRpSzq9xYM3ly0EKOdQLfIdLTSC96Rl1XmE29F3E8nyfxfPr6X7dOjjssLF7HsQZ4jFHp4o2XOZsdseCHqJ/FVAkgaJy2nlAolBhNO2BnuXnzNrvHhyTJKUdHd6ktrfDuj+4ifOmXeP32z/L73/w2//H/5tf5P/xvf4tyqcpf/xtv8OTxQzLGJo3aJrqcYjjqc+2qyv17u2jqIlHU5ez0kHJ1Bcs7ot1VePmVLzEZfoRZy5LOBnDuImkeLmdIiszSQplur01zdEg6VaI3OqOR3yZSfCRCDnb2OQgWefsrX+KTTx6yWt/gyeMdLKfO1dub+J5PQJOj/WNK1QXQIvbOniIFecLYp1go4bo20/GYtbU1zIzKh/eeIMkyO7tPKerrmLqMLKmkjSK5fJrO6ZDXXv63ODz/EedHIluXNml2nuA4c6rldTYurfLg4Q+IybCwWMF2O3xyd0ht0aDTPuF4D1558w73P96nXC4TBQKNRgMfG6dVJZOaYssDlpeusLO/hy5LZEtrxEqPVFmgP52iSDGymMEwIIzHdJsOS8s6ibvIwuJLhNGc2TBCQKHeKPDRxx+yVFshCTNcvrxK6+icfFEiCALymQYnZzt0zzusLl1H1gQePz4glzdB0Aj9EF2XuHbtS+w8OyCTE7l37wHvvP2LvPWlMsenT5lMBqyu3CFfjHjy+JxcUSUMpiBpBNaYUiFFPpVBM0Qqi3XOmuf0B0NWll+lkC8xmp5SLBXIZ9donR9TLOVY2SgxG3skokenN+X89ClX1m4iSRGaETLpjynlFvA9nUnb+WnbxJ++oVxZNijkFmk1+0RJTByouOMAQVBpLJYukIjZHEmO8XyHcrmIJGpEyQRR1CmU0pjpCN+DYqZM63yEpsbkC2U8zyMRYqIkQZEyOI6NbqQ4OupSLJjMRhb9XpvBoEQ2myeXTTOeFiGJMNIB9twlil0qjTLB3OHyWo5YdTkd2uSrZWx3TLlaIQ5EFFGh2TlHNfWLv1c0yaTKkE4Y2X30osj67SoHT1rUltfQiwWe3j1hY+sGZ50TVuo1PHdOu98no5RYWqihGXD0vIOkKzhDjx4i5YaK50oM/RaRlCEJfVzLJQgnyJJBNg16Ls3B/ozGZoH5NCCQQjpHE5IgIKWkSeYgZQLEVMDHHz9jad0kl6zy4MkZVibhcqVJUZb4YC9G02VK2Qy5FYPG1Sr/799+ytGewGjkUq6XefzwKY+fDPjyN26w2xqwuGlydbtM51wgNJr4LR8zVUD0xjTyZZpdg8uXllGkhMPzNqNRiKzZZApZTs/a6LqO4wg8fjBAEDUCO2I2aWJZMnEkIQoC2bSGN49RwgKRYNNu9TBSeY6PLPzAZjb12VjbwtRTrDcKjMezi7zqxCSVmzLvKoR+gFqySRkG6bSCkOg4jo2qyVy5coX5vEc2U6XXa9GLmpgpndm8hetHJEmFSqnMaKSQhGmUjIzqKWysrOCFHsPZjOVKjtkkYqFeZDmV5+DoGM1UWKyWcK0Zs9mcxcV1chmdTnfIZOyST8PKygKt/gHVco1StkS1uo3rTRiMjxmPXXRdJZXVkIQU46kFsUa1skgQe8iyRL83xnPmEKn4fkgYB3iBznzuvUi/AenGZaqXrxC/mPP1/8E/QBTEz2LnkiS+sF2OInRdJQwSUlevon357c/27W/91t/Dtm3iSCSfz79AkmVc70K0lEqrTGZDZClFPp9HFOWLMTSg6zqJKCCKIo4f4Achi6Uao9EIACOVIgwjojDk6LjD871jMqZBFEUoioKqKUTRBc8tijwsy0LXbSR1TBiGBEGAKIqIonjxfqVSTKdjZFlEVsQLBFKSsW2fAAiDEF1WMY008/kcO7SxbZv5TGc6cSmVM1QqefJVA8OU8TwHEKktXvib1twUjlMjiS8stixrju+FWPMpcztgNFGYWi6qJhIFPgIiYRgiiQZxFJFKK4jBF0fejx4/RtMVdFVk7/l9iuUUhbLKaNLk/pNjsrUN9gYi3987ZDgckqv0uHP1KoKg0m8e4cxtysUaO0/Ouf3SFbRMiG8r1KoZphOXnSc75Ks6ilxG1mXe/eg+UkHn3oefIM7mNNaqbF1d4n/4B/+ExWKVtUaDSS8hmtUYd/scHvTZXNlgOOlSrhVJqT7HR12sqU6uINHr9Pnw/afMrRnnyYyFBZe1DZFm+5QoSljdXMJyfAyzTDbnc3Y45c6lmwy8c+xQpZhZJg41zPwaeyePyBmLvPn66yzlqyi6wEf3drj1UgolrTIeDSkWbxJ6EHl9Vm+lKBcWEV54psaf+Ute8CThRTLOp+obQSCJP82qF9CvbCO+aCbjDz5k77/6zzCO/oTA6tMa9sgtaMwtAUnzWF6HKA6Q5YvnTRBA03TAQxRkouRFo/opJPm5O9EXVwJBGDCa9FE0mVjSuXNlk+mshNTtEQTuZ2N5RdUJEo8oitl7PmRza5WT/gHHxx10M2IyVvnSm79Auzflf/kb/wm/889+i69+5W/wV/7yl9nbfZ9f+sWXuH37Nt/+899FEk0WywKZooMzNVhffoWjw3MWKtcR5Zijox3y+QxhmBBFKkms0h/MWFnfwJp5nJ4NuXXjNQaDAbOphKym0LQ6XjTgk3sfUS5VKWfWubFRYWSdMerPef32r7J7+GOmA4WMUSVl6uTzJsWshJzI+L6LIIbUShVmsxFCUIXAQjMDysUSzfaUJPZwHZdBvwNxxLXLr/Od732fN7/0Gm+/9nUWyls4/hjDEHh87xErm+sUM+ssbdr8Tvu7pNNpXtu4ykcfPCedh+74LvV6nXRGY+fZAY3GCnNlB4ESjaWr5HI5Hj08Io5kHj7+mOV1k8BPODlts3G5hjQtoEsaR3s7hD6MRxaNeg5FL5CTirjhjP3n51SrVQTfYz6fs9jIYs28i7Q91+H4tEm+kGJmn2JNBDSpwerGKoVclulkRrFcoriQ5dHTj/HtNFurl+h1mwDEiUgiWQSRxPrKZZrnHVKpHO3zIXHkkVZX+PI7KwxbCts3srR7h6DMOG89x/ZkAk9FM+oEDJDUObbj0WqPyW/oDM4iwiBhfbWK59v0+p8wHOQoFAogRRzv2sjGgO/+8IRX37zJeDhGkkRqC5cInBmdVpdr126QRAFCNkU2VUTLzHnypPnTtok/fUNZylU4OeqgGXlyKYNCNqLXGyAIEookIZt5EsEmDhWCIEFTYiRRJYw1ypU0Owdz1KxOfzwml0qxsppHlQUe3jsjl8uCLBKGCamUgBrL6LpM4MS4cw9D04kFGA9Dzk53kBUDNZNmNvTQTYXJOEEMArrNFnIMp1aAHTnkVypISUhkxwznDqYJlu+Tz+eRBBnfm2OkBfwohCSNIDhMRjbN5jPSqo4gunz84ANevnObMJqjiTMKcYGe5VKvLNEfzyikFYa9EZR1gsgk9ESSTEi314aghpEJ8KMDVDGNa09RTYlM3qV1OkNXyjRWljANHYWEJ588QjN0rtxcwBB0/LRGKIIzmSLHWeYtBb2hsFgtsL20QNnIcNg+R8ukMMyQk5bA2Uce7d95RLFaYNgOUJSYcinNxDW5chm8bkI+k2X1skLzbIYgWqj4GFKOerXI0e4Jy4sJmxtbKGIK4ilba+v8+cmHLDaKTPo+thOi6jPO2zMUIU+lmiWt5lleyjIandMdTijkN9ClDN3OD1lumMShQCZdxrJD4jhmoVql1Ryz9/ycUjHPYDAknTaQZJXTs0PShZissUA+JzHoWagKaGoGxw65dGkb25nQbB1iaAbtVoc4UslmTfq9EbIqksuVEGKJMPJYayyRKBJJpELcZz6fsbi4RErXCL2YckVGUQV6/QnrK5cYjjrM3QnpbI28IDJyJgS2hWakEKULPuH+/j7VpQpeEoAs0e0fXSiVBYFarcLZ2RmO46BqKrKSYJoZRpMhfjIgBjQzzUJ1nSdP72OYeTQ1y3nrmJFvkiQKggDSzSsgCKh7BwQ//jHx8fEFiicCcfyi0F6IF8IwJAxjyn/r3/9szz4V4IMPPsD3Awa9AEm0KZfL2IGFpplIokIYKKSNBogesqQiiiJhnBDHMXMnQJIkZFnAc0OCIKTZbBLHMbquX1wEkwRdN1D0AMNM43keURwhRODNXGRZfuGNqZFOaQhCQuiHJIjEEURhhCTHRKGIY8+QZQVIiMOLG76qgq5liZMRcZQQeC5JFIIgIMvihcrcskibPpqmISRz7HmIJCV4nvfCXsTH9yPmcx9RUFA0ldB3qFarBIGP52WYWDOG/SmZTBZJNpnP56gaaIlIErkIskySiPRfNNOfLkNTEUMBz5/gOg7zU5v9vRM0WQNZQEub3H/ykPp6jaWVJURJpTW1UCSJwA1RdJ2xZ5OrL3DcHxPGAbXKAvf2Dxl0ByxUGuwfNNHUGMeas7xWQJI8YlPn7Oyc6biNG6v87C/8TXzHwp8cUCjV6HT3L+yAEo9mexdBEjk4tFksFUmVyvRGTXrdhElzkV33BDMjMhzMabc0okjg+bNzigtp5FaM6yQkfplv/PINdPMigeiTJ+c47pS5NcQap5gMJ0zsc0Ipw1+89wOGI4+vf+1L3BJ0IsFn/9k51y5fwRqP2H16jq7rZHMaU+uQG7cvnjdR4IXQRiQILsK7LzjB4otinCB8KuD5V8Qy8b17TG/lOW92mHT7LL52GcPyOJruIhcy3Mw1yKc0iEVIQLxzB/Fb37yIe5QgTBKE5FOI8osq7y8ilQm+YzOcHeIcQlYxeXI4JNFO2HaqyLJCggfxhUdsKlvl5VtfQdTPuHt3l5WVW3S7uxTlZcLA5PysS3fU5vzsiLff/AanzV1+5Vd+he98919waXMTUUj4xtf/GtevX+fB4++TJDZSYtBYusR4OmAwOuZ074Tr2z/H6nqZ/f1dyqUc7XCAosUM+lMOD/fJ58o8eXzIV975Oe7e/x47O8ckyGTL8LWvvEW/MyYORNSsghAEPN89ItmeUVo0uHv/e3zjF3+Zw8N9rt68xbjlcv3GBg8HPyKMZ8ymPoGXRZYmdHp9Ggsq9z5+wNXrqxTzBQamx8R+zr17e7z68lf5ypvX6PWn/PBH/xO6nCMRqpTLBpFnM3YSMsaETq/N2sp17j96n5dfvYSmZmm3+qhyibWtDI8fnLO6epnFhkF0ssjOk3MuXV5BNWQWllLI4XWWVkO+94M/IZOu8OW3v47jdYjdFSSvx6DdRzZyzPpDzl2JS1fWSASXqeNz5foWw+EJJ8dTzJRAHElksxk0M0N/vIssm5i5CXsfq9y+s82rL9Xxow67Tw7J58qM7H1OHkZ4nsebr69wftJDFUsk0gwvlFhYzOFYGgkB6XSWQa+HPe9xZesGztzi+OwQLb7KeDZlZnlIWoim+EhCkVg45uwQVlYXUfWI5+0xVy7fJhEnJFMfKRI4OW6RL6ooWszcGtLvTSjml6hWcsxtjZdfX2M2CTBSCpEHcrDA9uVNoiDkT/7sj7lx6yaZVJqHz+6RzmtM5yE/7fqpG0oviilU85ipCp4XEYQzrtxaYzyYcno8pJSfEAwtXCegWCwzGE7QDYHa4gKTWYtMxaA3GmNZERnDQBQUbMdjbXMd2xmiKgayHKAoAdmcwdwakUpn8b0Z/eGAfKWI79vkCkUs2yPBx/dDtLRPrSoz6GlEg4DaauECTbEFrPkIQ0mTShskgoeiSCAoFMolOv0egmSSxBe3DoUJIFApFFnI10nCAD0RyMsFDp82SdclynWZk6dtPG9KNb9Cvpxh1D9hoVxiHAXoeYFMNMMoFBHiOindoN1uYo3ypDI2sSBTylRwnT7ZTIHIdQjcOW5UZ2M1Dde3CIQAP54gCDKL9Tw/+MF9Go0lchmFaS9ArzkoKZNpMuf+xxMcAdRnIivrV1ClkFfvwM5ul8vX1vlgdkyuto6SDlHVCW+s3iQvp/EEl73T+ySBjD1KkNDZ2kzjuTFr21ssry0SRgpPnjxiadHEcxRkbch45OLYIal0mkHHZjISyGYTJElAS4/p9ae4toemyayuLbK3e0I6lUWWDHrdEYpqMB4myJLAcDBjeXEF14lotXYwDAPf1ZC1GElOGLQSzNSA0ViimF/C1C9C7Wu1AlEUMrfHZPMqqpwiHyoYSoHxpE+5LIIkoigerVYLZw6+G7BUq2K7Q0zNJIzmHB3vsr1+h1h1sGZTXBV0LY1rRYiBQRDKTBwb23dIRIc4LhIbDoVyCncUU8ytoKga7W6blFLGcceYRhZRlDk6OiTEI5c3mTsWSSzTPzukVCtemNKHPpElM+iPqS3WMVMFeoMx61vrBA+aF9syEV4Ibl6UsSQhCkOiKEEQRURBJCa6yPmIY8IkIn39BvqXv/wZqvJbf++/xbZtcpksKaOM69r4foSqKghyiGoohIEHgoAkSLh+QDqdJnY83CBAluULgY3nI0kShmESRRcXgvl8jq7rBFGI7doEQUAsKxdAUgzz+Zx0Oo2AiGP7n42zTdPE9y9+nq6qGKnUReMty4gizGYTSqUScRJSXl5CliVc10WRy9i2y2RmX3i/xgl+lBDHEkkoMLMsgpNTXNdFkkRyuQymoWDNZ4giyLKKrqUYjQfYcw8A69nJhcgwBkGOieMEQ4cwGiFIIUEgEwYesiATRzFJcvH+/ORSVRXf9+j22lRLVeI4JiUbJKiIZoTv+aRVAyE0SKQYP5EhuPDRk4w0XhjgeAGhIBEFPoVCjlB0SRSFmy/fYjqdcim/gWXNcV2FVDGPKIrYkchoHtJstgjskFl4l0QU2H/6CaV8Dj92SadqLLCAO7fRjBjLHTCejuiOBWTB59WXt7GrIbuHexwdj/BdmUajyIOPz/EdnU5rzoMHTdY2cmgivPvuRxwdH1DIbZBENoap4Tl5nh8ccnz8lAQbIx3jPZvg+ikeP31ERjOobZRxY5uzjsXJxCK0XJKZQ3sy5p136gRBRKIDCHh+hICI6/gXiOULgcxPZndfcB3jFxzLz9NtZu4Dzns7rKRfJhqM2fm4ydLWJYTCAKfvIThtAs9CyJYRXn0NZetC6Z0AxBGCeCHI+7x1/LSf/OLsWzfSZIoqtYUVZqMhjfoyuXyek9+/+yLxxwMBPM9lb2eXxvVNgmFIpVbFn4/5+a//dX70ye+zf/iManmRQjVN8+ycOLnK0nKef/bb/4Sf/8bP0W1beP6EOBL4/ru/S298D3ua4fLWTdxmDlkTeb73kEb1DpoR8+Hd+7z59msoko2sinQ7I/r9ObqRQzNMioVFzjt7tNpt3vmZ17H9Jnu7e0S+giarSOqERIhIfBVZmXLabDLp69y5+TofffwtrInA0ls19qdNvvXdhyD4lAorGNkukXuKlrpKa/TnRI6HYdSQZAPXtVB1Ay02yRUkbPuM85Mem5tvs7Co0O20kDWNnd17WFab07M5K40lTKNIuhARCsc8fhxSKJTIl3KUiyUePHmEkcnQGj4BcZMEj3Ilhxe2OD0dcnI0YX0twXJUDg6fs1BKcXmrxIMH77K8fAlVzxBFM1wvw+uvv0aQtGkOj/BnAZl8mcmkw3zusbK0TrFY4v6T9ykUlggjC9vSuHl7E8eZ89obMB5PefDoPQgWuXP7dRJ8KlGeTz5+Qr2h8tHde0z7Oq9+aYXjsx5+PGKhtEUSNTk5sMkXNZaWyxztBpyeP8ezYxwhQRA/ov9xRL64hG7I7O+dUSuWKZUqHB6dYjs602FMLpPBc4aUqhLOyMWaJGxsXmI6GyAKKbJ5j0SeMXJPkeyYlFnhYPeIjFlhPHYZNYdcWjUQojSPP9nllZfukC7nuPfRHrmcwPHpENM0f9o28advKBMpwEsG2LMWxBlCX0XsqbSbbWqLZfaO7qOQJpcymY1n2E5ALI2YzgMGg4BYCZASWG6kcGYDnLlOHMcs1tMMRimCUEWMJcajOa7tEUQOgayQECOnUoRCQCpvMhr4pNNZJFlEUsbEQcRwFOL6HssbZUa2R6zaqHpCEqYYehZpfQsxnhJ4EXPHxh8eIWgxQiii6TpyIuH7IZWlJc7Pz0mimO3tbXxnSLWeJo5VvH7Myu0qTfM5CyuL2EOJbruFJ9rYdpvr66+gqQ6htowdisy9Pq6nkC3AJHSpVNaZTsd0OgPKpTyKoRJLFmKik0QTTo6mlBpLHJ3uMeuOKC+onLbOuLa9TSQZTOYeN98sYE1DGusNjk8PufXqO4znE/rNc8Johj3z6Iz3WNl8i+7Q4fV3btHs3WXad1nKLXFy1KFfnhEnPWTBp3csUCwskqtqGAUBCQcv8Dk4fMwrr9xEurHKs2dtOu1DVusNjg4nJIHIoDtDUzOosk0UOpwdx+xYPRZr6zRWNBYXFwi8iFqlQKWaYzJ2GQ89lpYqOJaNYWaY2Ra7g31KxSrpbA5DU0lVqjjBAGsWkMkYLK3oPH/WxsxOIDCIIxVRFBgMTy8iIfsDJGnMxpUcvWaP1VKey1ev8NHdh1izObVyjfR6CVECbzxD0zVEKUYVUygpk0xO4O5HR4BIFDkUShJnJ3u8+fprxJFH4IPuZlhe2mZ3/xA/CQiiCN8NyecUnu89Jp8p4swjAkGjM+yTy5ZJZctoBnR7p1jWnGJxE13X6bS75Aoq7jzBSBRCLyLwAk6bB4giTMc5bkYpkuTiRhg+fPaCjwXq219i8T/9T5n+4R8xffT0RRG9QGqCOEYUpQsT8xe1b1eRePrsMZousb19iXLVwLIsQMR2PBzHxQ8CRFG+GBsmCfILIczcdUin0/i+fzG6VlUU5SLP1XFiTDOF7/vEgK5fcCt9LyL0YxRZo1wukc4YeI7LdDpDMVUE+SI5ZDLuoSgKoiwgigqjwQABkUBUcV0XXVWZjOaoqsLB7jGyLGMYBq7XYW55COLF34MYEwQOoiiimTq269AfTMjlcpimjm3PWVlb5RuvvoUkxzhzePrkOZPZGFGJcV0f1VAQBPnCVkp2EZEIgoSECNf3kRUDSUjwgwRZ1dA1iYToC+diTEKxWME0MyRJRBh5iGTwAhfHcyFKiIOL0Xko2oSxhRomRH5ARIIgSBdNtuujiAJx4DPtWXiziLkOk1HCaNKhUC5gOTb2+ZC0kiGdi8nlJFLpDKGtEnpTUuky1dUriK5HOqUjijKSPGD7cp0kErFneRJJ43B/n1rxGv/F3/3POex8n8PjKTtPmnz8wS5ZNU0YhuTyU6a2TZyvErs+sexgT2E6iAi9Jmktw6AVoKVVXC9gFtloRkAQGayVKxQ3KuyfPMNcMDg8a9FvRxydvE+9kaVWW2fUdxg3u1y/6uN7IXEqgegittD1bVzHAUG/GH0n/4p9zwtbnp9gPCKIArNxlkJxgVb0Fxx9b4IY+Ayfdri5fQvZhs5Zl8m1QzKFRZLtDaTNDVJ79xlKcwI+Tce5sAv6dH99Js35CTj04dNnzIQB99oHzL0hrwuvsinfQc1ohIn/wjbowiT95vVXOHMO2XnW483XbvF0f5c/+ZNvkynlMUwNaxpz69arFMxrWOMh+FmKFZVv/tEfc+PmZU7PDlhc2CCjX8bPtrly6WW8mcHO83tsXcmztfwO/lxjf++IbLaONQ/R5YS9nQFnrR6vf/llhqMuiRRf2PolGZYad4gieP6wTyqVY2DZvPLVq7Tbc775J/+UjJxjaXkVx+tx551r3PvkMZlUlbUbOu4sRhDbpFMq1lQh9G3MtE66FNFuHrO6uEhgi6xtNnj4+BMEJSSXXuXW7dc5OniKPbO5em2L9a0qjx6+jyaXsNw2tjNha+Nl3nzbZG/vEeVCHifs4lsLXL9W4+OPP+ZLr38D2ztlOpqzvJKhVl2h1z9jMplQLleZOxMGgx7lqkEUjwlihZXVOoac4Yfv/R6bG5dxvTHtc1haWuG4+SGRP0cUNEr1MrLp0BmeMO1J1GoGwcyg5ZyQvNjyJ6e7XNp8Cc+bc35+ysSaQ5SnvrSI70c8evSMdDbi3kdnVBsSp+ce1sxja+XL5ApZ/P0D/ChGk8osFBaZGx2azSbXr92huhRTruS4d/8DNlYuI8sWH71/QiYVY+RlyiWV8biFGJlcuXQL3xlRyqcZz3tEvs7OvTnlcoPVjQYhXVRZ46T5BFnRKVZKnPc/ZGIFvPRKmkSI6fR3yRdWePXlO2jq/5e2Pw2SLDHsO7Hfu++8M+u+++6eGzMYnAQBUgApkqtjbcvWSt5dx9phbcT6+35zhCMcG7Jj5UO7dphcSivvUhJXEg9AIACC4pDEYA7MTPf0fVTXXVl5n+++/OFV1wBcfYAivPmlu3omq/JlZeb7v//Z5eDoATduXmIUDtnfOyFNJDIhw3AyFhb/J6gN6p9mSFIFP/YQxZSlxgKd9gBDKxG6Y1ZalzhrH7K6vMXxic8sPGZ9p8bp0RzfFalXJURZZ6FiEkkCulImSnyEzEcWRFIxwLRt9FDCdV1kTSLJfaLMpVpfJPATzroTLDth5I1QxRaiMiaOLPqdOcsLdeYTj1xSiUcWjqSweGWZg+4xw5MOoiIx809QLR1B1ogiCcMq4bsDNFFn7gl47V3iOEGKFPzARcFh3J2SqyliFNI/HpFHGpJhMvDPMFclWs4yvX0Bc3HKzK/gh12wanj+hDxQkGQHMVeYjU+wywaQk+R9BFSSGHbWbxAlA9qdMQ/uv0+5vojj7JDNQ0aBh74Ts9hawhgc8OTJI1qVZQ4OjigrZb78i1/mt3/rtwnmA+zlBrpTwlKvI2oS8biHlrTwBwGvvfnLOOYKD773r9he8NEzhVLtZTa/ssPahs7wJOHw9BGq7tIfxYS5Sm8QkMUVTNNDSgvJ1NB0puEUVXTwJqBoOt50zmQYsbaxQhbVOdw7pX2UISDRWFCZTEb0e1NUTQbRQzUCRBYx9RRdE2ks6JyeTKmvlMiJSTyRpWUN2ypj2w4LKxHjcUylIqEIErP5hKXlGlnukQtVJC1l4u9TazRQZAg8l9dfu85p+wRV05nNx6iaQ2KpzKZesdFu6piWxOHTx3zl8zc5OhqgGQlpBJWtqzi6iBt7aEaZIJ5yfLbL5vYOx6M9XH/IwuIC1y5vkSkxZ50Tuv3HqM4m3f4hSR5hmWXOjrsYJiTMOTx6xupKFVVTit7JeUYenVAqlZm6M1prLZ48ecTqqkEcnZeTiwL5/SeMdp9RefkllKe7aL/2V2n+2l+l8u57uD9+j4wc//593J98zMbf+9//TLL7D7/9+7z1+Tf5w9//PdpnJ4hyC9s2QRTQDB15LiFJCvO5S7lUJUozoigijlKq1QphGF0wlJqmFVvJeU65XCZJigJ2PwgIgxRBUKjVC4O5bZgsLtVRFYHK1jIvvfQq9+89RJBjppMJw8GYMAzJMgF37hNFEZ7r4zgZOzsL6LqGpitYlkGeJcznRYuAY28xGs8ZjcYF+FVlnNISpm4V8mlVZTYN+OjDR0zGPprqcPfTY3xXxA9mHB52kWWVKEzxwgDTUjHsYqYzESEOU3RZJYkyBKmYsBTEDEHIyAiI05BwJqCqys98LooSjMc5YegjCKCqBqk0QhAySlqTOBoT5yKp4CMhYsoibpYRndcvCWKx5qHpCops4ocwHveQpQw6p5imRa1q483myKmMQk6cJkwHGdkA9LJJME9pVRqsrq6zrMR8+tF7+HlCVSuzXblJJuVk6YDa0jLNlRWu7liQlfl//D//L5wMRpTqRf3Tf/Kf/jKfu/U5MsZ893vv8ejRhGnwkJP9Y8KZQ+Iq5KFBd+6yH/ooWkIlUllb2WQ8lAgncONWC72e85OPf4xsxURHLpog0ajrGNYyo+4xZ94UWdXJ4gTNEFE1BVEUEAURWZHJowxV1fCDz0DdZ0U+wgVTaX3hixdyuABYVpn3P7iNO4/4+le/QkKbH//5U3afH1FWK0iiSePJj2luv4JiF5dqWZaTZ4W8XiS80/P+oBffNf9pLIn42qtsLVk8OLV59P59rr2yzSRv86P3BywcjfDmHqVMOQfAKb3RHvc7Ijs7azz4+Iy++5Q8mLNz9Vustrb56JPv8r0f/AFf/NzXOT48Zmltm7Xl61y9PuXpAxdFNjk5PmN7x2Gp/gb7z8+4cfUmfiASuDrD2afU7GvE/pROT0E/sbh5eYfLNwY83P+U4XjMPCo8yyuty3TPzhh7fXqdBcrqCorS4au/8HmOTgdEfsL1a9cgkVAUme74CX/6o++xvfE6u3t3GIwv8dd+45sMvE+ZDiy+8ouX+P73/pxSknJ8fAjZKjtX11HLy+RpjVR6yv5eh1/91pdBmZNnNpcu3UBVPZ48GbCy9BbVWkxvlNA7DdB1Bdu2aZTeIgpdotAmSYtQ3HiQsfvskPGoS63aIvRD2vMBfjDBMio4toEg6kTVGmGQ41iLQA9VWuPGrQ2++937NBtzFhYbTGbPCIMKjfoC89GI7Z11dD1h3M4JpiZvvHqLH/3oB9Qdk7X1ayAV9h4Bnd2993HnMtduvIJmOCBkjGfHZImCN/dpLV7hq19+jePuE067QxbWDPbbT1GeODglHSGtcLQ/5NL1Mu29NqKS8Gfv/TFvv/UNhvPnRELIfDLnys4tfu3XN/jJB3eJA4dXbr2JkCZkmYctS3z68Qm7T3psbK4wkUUcfZXJKEdVE5J8ijdSUbHJsgmTYUBZ/RyNBZuD/RMcu0mlXuWs59IbjTHkjP4gYDz9hFiuUrVXqN865cG9PUbjPlHo/v8fUCZCjOtNCPycklXi+OgAQZBYXTIRJQPddDg76hLFc1ZWHS7deJvdo59wY+cS5VsqnU4Hz8+IfYdqQyJPEzIfMikhFlN0VWbuD5m5AYaqUSmvcHxyn1brEu7UZTqc0Fo0yYScas0iSfv0TxRMO2ZxLafbmbC+0qCs5PhSyPPdMdVlHTsfsbR5jdOzQv60Wjnj2RxZrEAMxBKT+YCytYCkWMhZjiUI7N59ilrRUKWYmryNs9Pg8f4DNq9uMup0qJQsrHId0Z/RWKjQPk0J/FMsRyaatjESh3K1zGQ6JAl8dKmKaVTw/AneKGGlJNIHjg+eUmspyMaAkrpMHmmUqwpinFEy63hT+Oj0Iy6vLbKyuEqOyWH7Cdb1a/zh736PjbUSR3JAEKUkwoBp2+fWdRWjIbN7dkx14TJSacjT3S7Lmwp+OKTdk3n1FZvu6EOS0zr7j+ZUqz7lqopaMvj0/ikn+xOq1ZzR5IA4NLEsnSDsIkky3U6HcqlBraYyHPokuYIkyLQ7z1ETG9E5wVYaJNIEW20yG2e89tYScmaRiyGKKtN+7uDHCWtXHezmkMwXGPQnCGKMrGnUFzSifEi5FlNvNhmdjVjclpAVgdFsQBB6GKqNamToYovYXWJ5RaZ9dESvPUARDRTVIpN8vAzCxKXayHHMZSZjF8VwufnaFtNphzyXuHyljphu0u0d0Rv0aSxVmc0zTLsEQoqjOwyfz7h8ZRNVdrj96T3GbpHk92WN+ayLqKt0RgOMICAIRownZSqNCttbN5n2OkhehapgIC7qVEyTqTfn8uUm/UHK2uI6jWqZhZaHeDh9sS3Hu7/5W/zqP/gHP/VOFFC++AUqX3z74l+W/QBB1y++/sHJMd/5zneIY5crV7e4tLNBFIv0+31kSSVNM+JQJiInyzXOuiNkRUMURdIUojhGktRCxs4lslwijIpy4TQq2BvXC84XeUDTNEqWg1IVMEwZQUzww5Tu0xGXL79Ko7bBd777zzEMA1VV0TQTVVdoLTZRVYU4DqlUVEzTxLIsKuUyaRrTajVIoojxeESKxnw+Zz73CIMI1w+Iw6hIoGsaSZhweecandMR3e59dF1GkAUePyu6c0u1KnEcI2kyKsUqi+fH5KlKvdEiSSMEJHzZJ4pEJETyNCr4SEEmS4pwUhL/bEpDzCCMZ+R5jqqqeN6cIIyRJQk4JUkSDFVB0TVkRSbOMkxHPQesOUlyXkifCfTHYyRRwdaNQuqVFCZeWPxeRIVISJgFMZpS+EcdSyGPBHRNYjSb4T9+SB4HdAcBrWaFuQth0qfRrFBtrDKZDDjrdxi1Xc46+9hlk9POIcH9e6yvb1I33+TRg/+GDz+4Q5pPaTQMGpUGylITyjqn+yds2RK+XqNSW6Ldn+FFAYeHR1zduIQlyMzaTzjtlun2cmpJk4aj83TvEauLOzzf26e0tEC1aTMezSg5Fc4ORyRx9uKlXTC5YUYmiBec4cV/PN+uhwx1e4fSN75+ASjTJ8/4//xXf0YmCjz+uEd374/Z3l6hbDlINY96YxHFsEgISbMi9CO8/CrK978H+bmEToaQi38phyMQPnpcNCgA4ltvcdPW+PBehW9+81ewzAqH3R9w7/aQ/+zt/zmG8ScQxOQ5pInAaNrm89/6Kh9//Jzj40O2t6+z81qNJ88/ZmfzVVTtCrr+jO5oly986QuE8TH3Ht7HtHRSdYQ4N1lYbLF38Ge4kVlMX+7eRlBCEuWUheUd+t0DbGsJu5Zy1v0JQhiwtLLIrZ1LtJ/tsXzd4vmBhkKbpuWgJGVKCxmalfPhR/vMEpVrVy7zJ99/B1t7mUq9QufZPldu7nB8dkgmzXlt+yXGM53Ts2e0OwbLK2X++Ht/wRuv7PDs+Sc0q4vsXLuBKNocHexj1le54bzJdnPK9NlTjh+c0ZnNaJ8d8/mXrjPotxEViSBRmM06xOkEzbjMp3ceMGgLvPn2dbp9j/WNJs1WhW989W+wuFjh09sfEuUTpgOV1z//KvcffEzGlGe7IXkGJ+3nvHTpV4jSZ6i0qDdC7n084m/+zX+fP/6Tf0mvf4xd1jgdfErV3kZwFA6PHlNvlOiOxzQaV9jdP+ILn/sNFlbKeFGM2jU4HT3CLFUwVRNNCbH1Mq1liR98/99w9crLkGmMxTFkAs36AkEukcgas/mYRDlj6nUoKaskmcX6VYfd/fskuY8geKyt73Bw/BTbqFCzF4nygIP9ARsbFtevvkSUzrj38GNubn2JWqWObq/wG3/jizy+f4+zwSnPu7fZ2fwmdcvl+OAe9cYiQX4GYpnVlRV6vSM+/9Y3CLIJd+/dp9KqIpkd6PfoejkCGZZdJlSm3L9zm+2dy8ijGcNhxLWrrxGGwc8LE/8dtrx7E2xHolExGfTnBPOY9fV1BoM+9ZbC1I1pLDRw5x6Xr63Tn05wyjn9bkBml3CDDNN06PZm6KlGuaRhVxsMRxqT3gnVpkSe5miyRkbIcHCMpS3jz2dMRiMcq4GkQOhFuDMPwwKnpBP5IGspzabNZDrEsRUMA65cafHVX2rxvd+fYxlrnB0fUlpIEJMyuiRgWRZHu6dUHBnbqGE5IGYG08mQ1FIRrRrzwEURAxTdR5xIGDgc7g/QVBURkfFoShq4qJqBrSkYhkG7f4Rla8iyytSboOkS5VwnBnqDLqpk4AoiZ5M5pfoSQq7SmU0ol1fwplP8cIYkgSFrnLY7GAsOVtkmk3KCdIqu6GxcXuW03UXKLfw8ZeT2yEOJlIjtlXW8WUxtocpqs8rRXpf9BwNK9SpM66xtLnLfG3F0coycZewedFlYrFBfaXB42gYhI8sTMsXl9u0DWrUKjaZDexiSRCJ5YBD6U8Sqgh9YbO0sISQiz4+HXL5So9eec/VmheM9ldg10Gshhplx1h4gKT7NVpkkFKi0ctYrdR7dOaG1tADCBFVVWWi1aCzIGIbJwWEfQcyoNmIMtYRViUiTmKiXYRoG9YbFtA9xnDIcPmXSb9DrDFhdqXDt2nWOT/tkmUMQgKkqjPsezlrC1o7N3I3xXZ80zbl+a4kwAMdxWViuceOlN/GCKR98/GMqVQN/qnHS7qAaKoErMQsneNEcSdKZzvo0G0tI1ZwgSolmJWwtQkPFaqr4U4nv/O57SErAxrqNPwrZ3LiMWfKw6hbuXCUWRry0eonJfIYmQZ5Ni1OZINDd3eW//n//l1zavMz1W6+wurqG8mz3szdmDoLxGZj8vadP+T///f+CWrVMtVFDEnJOz0bIso6qWWiqTpqm5Ej4UYimqei6iShJZFlWgMgMgiAoevrSFNd1ieO46Ig83xiXZZk8L/ybnucRh9G5ry1FkkRkUWQ+c/lH/+i/YTyeMpuOWWgtAZBlGaqukSQJiiLheR55Kp4D2hRNU/BcF1kueimjKETVNXzfJ8sLP2ThlSxY1qJGKSbOcizTod5YJiOHIMBydKI4uEima6ZxESiSZRkJgclkcn5s6c8cV5IUflFJUkAs/JKC8LN+ujRNLzIcslwk5MvlMpIoous6mqYQRRGz2YwkKboVYzfGMHQsW6NWtbEsAxAJgzq+7xMHMXGc4gZz0rR4HHkuoKoqui4jCimaKhInxeskCCLK5Sq5pDCbeSytLBbA1C7hujOODk8YWhZJlDKZTNla32Bto8nq5hKvSG/xySd3IBH4zf/6XzCadFkwbBbXlkjlFuPAoVJewFowEI066xs1xLjGD//ku+xsrCOKInGc8vZbrzCbnPDt33tI5dUFri8sUdPKTKYZYVqnN0mZBQnRsI03cZlOfJIQblwtvKtZBmLOebAthTxHFNWfeqbP2cI8RxAltGtXL/ojsw8+5F/9B3+d+//H/xRR0Ckva0Rhyll/TiM1mE9Mgsmc5tKMJ0MB/ysujlNBeutziNuX0NodgshFQCS7WMn57A0WPdtl+sM/ofbNv4IoSqz9l/+Qf+9/979iv/0JTw9+yJNPc978/Os8e/6Uz0sSBVNR1A5Z2mV+/O5jrGrA4rpNbzhDkzVESeDBo49IYp8vfeHrnB6NGIymzKYBeSphyg7bN67w3//Ov+TNhkM0nwIh7995ynLdYXGhjjfUuPbSlzCFPabuCd12F80wwUl43n1GdcFhNO3hzWXGJx1eX/9Fnuw/Rzdt5LyMOxsw7cQsNBtMux2uXFknima0rG3ULZHT7ilbS7/Ek93fo6a53Gx9npIWc+uv/AJn+7vc+JVv8OqNG/zgX2t4qs5k/Iwk8Hlja4vUTDg+uk+7Z/Otr/06J50fIR4MWNm8wl/cvsfbb77EfN4niUqIqkEkh0Shy/WVTX5w8BN8f5M0TnnrzTe5c+cOhtHl3kMP3apR1w2ufOEmJ517aBh0Ol1WFi6jGbDcWETQRjx5toehpNh2hVh8TJ5dQdbAm8Lq2gr32++QpzKjgcebb73BYDDg0tYlev1jul0XS1EZTpZx6j5BnFAutZA0ndj1ef3VLURR5v0f/xtCTyeJJIbjI3Y2boAY8qy9hyBI4HlIoYtjwGy0QKLHLO+4nLYnTNwuUZShZTpzcR9JVNBNh3woomo682CfB49ELu28ietPMJ0GP7r9h9jiNWoLpyTRBCFNOD46w6lc4eD4E5Zby1TqJm7g01wyqZS2mM16VKtL/P4f/g5rm5exrDKqZnB0NiTwqjSW69TqCrc/us3iQoXmgk2Y9MiElMWlKr3ejFdfu/zzwsSfH1CuLS3iuxlkLq+9tkO/O8eyBNLMQhMr7D064K23XiaY+fRP+qAk2Pk2RqPE669f48OfBByePqZet2k11pmNR+we3iEMRGqOQeAHSLKAbll4XoA7EoARimxRK5k4dZ3pdI5lGbz5uevc+eQRpgMuCYKgYVfBENfptz3anVO2LrV4fKd47OXlDus7DRJkhv2Qcl1hNjymXssIfQg9DxmVMBqiaQ49d06U5diiQ4bF3uiQ7aRFWVfx5z4jf4Is5YS5gKYpZFlG6AaIukoYRmRihpBHWJoGQULVqTL1i5CDI2h4ckaWCkRRghuESHJGPigSn4KWMJ1MsGsbbG1e5mh6jGZpzMYzQn/K1kadZmuRaH6KqdicnXWxZJVUspFEk/l4yvLiEpOhgGNpxBEs1i/TO2qzslyi3lymOv4AL/CJZk22NpsMZj26x0d0hyPS1MZ34e7jh7RKW/QmPmezAZauEYY+K8sLuH7GxvYO04nPpx8/Zam2hCAmdE9HZJJA+yjGEzvgVlEmPrUlH9N0iOjjzRfoHZ8hmTKCJNOqqkTJEMfKyYWYk3YP297AC4ppvjyWOO0+puqsMhs00YwMWR5hGSqqoLG2eJkMH9tS2N8/Zn27xY2b15hMRoRxgG7YmPqQk4M5jl1iMvQRMgnLqWKUBBgFqHKZvruPYqbkoUO/3+Hp/k+Q1Rjf8zk+9tm5tsrl0g5JNqLbzljZ2GI4auOHVSajTuGN0UHIBwhJharVQhNEer093npti52NVfx4SMk0OLt/hhFeJU083rxcYslZ4p/94U+wKi0k0bjwi+UI+FHC4+fPOdw/4fe+/W1u3XqFS1euMJ1MePmlV9je2UZ//hyA7xzs89v//T9haXWlWNmJU/IcVFkhjAsJezDsA2DbNqqik2QpSZyQCYVfEkkkjEIkVUFCKdi/JLkAWVFUeMSKMEqEomvnzGWMrmrM5x4CEqIksbpaR9NlllcWEHIIw4JtC+NzgJWmxHGGLMsoRpHGVhWNLM8Lb/M5uNMMEVWVUHWteEOLInZuoygKQRAUgaW0jHH+WTUPYnJS8jwji32yLMWwLVzXJU0LL2dRii6TpAUQDoIika5p55vS54Cw+HHn9UHnsv9P3wRBQDesAlgKAo5jkFMcq+fN8f1CJm+1mhiGQRhH5HFEEESEbsZkMCaOBkiShKJKaJqC7ghUSiXKefEZkSb5BbiPk5AkgOnEBUSSOEOQFeJsTpoEVKpOEZaKck5Oezh2GUmWmc99dF3DKVsEaQCIPHz0DFWVaTVXWGy2uHRplQyXaW/MYDSm0x8ym3dI0me8dOsWkiBhWk3O2iNUo4IkJIUNxo/58Qcf0e0NaW5tUrcsHhxO+OZ/8iv80f/wR2RJjKhG3LzxOT75+EO6XgfbbrG8LmHZMkmS8gKnx1GCJCqFnzXJio7Kny40z/LzUvPswteY3b7N0ZrA+kqDZu0V1ncUnj/fxdJrHJ3sMZ2EDOcOe90RC0sTPvjkHb7+1V+DnS2E7S2k9z/4TDr/zDj5Mzf3Rz+m8su/hChK5MCDO/f43g+/jWbmvPbqGlGUkuYBcRQVKXJJRFNVJNFHVX0EQUQWbARc9g7O8P05lUoVx5b4V7/3Q/6jv/t3ePj0+2TJInEc0B4MkffmvPzSFXrdgIFvU7EdNuuXufXKKv/4t/8HvvS1S3z00Q/IY5HtKw5JsExrsYkfnjAfPuVsrKOWInZW3qSaLBEMZiyXm+xPT0jTFEkqsbj+MrpyyuDsU5Y3y9TWbMqNClU/QzhZxA0GzGcDlq7UOXz8Zzgnt/kgzSglNm99828xnQ04OnlEa+NVokzBT+a892Sfcm0FxYtxKmM+evIDXrnyGvH0OV/+/GXWKhr9Z3ewxIS5mdHzXMolDdedEGYqtWoD129DprO3dxd/njLq5qxslHj29Dkv39xmb/8Rnd4pg/6EPC7yGCASRQHzmUej8hJJLPDG525w+/47PD/8CbV6iWFvyPraFoNucZFcLkG/O6DesjjYf4TtGBjOuTd6IeakPUJXqnTHd4kik0ubG8SBgKLIlOwmlXLGYNgDISeIAnafP2Vj6RpaI2Hs+lT1Gosr23T6h2S+wPhZADa0Wi2iZIaQlZENn5PDCWJ+jOfP0ROHre01JtMRY6/L/vEJ129cZW19hUF7TK2lcPv2MTdvLZCpi2xtXKZaM3nyeJd6c43jowEyZvG5LYCh1fn8lzTOzk5wnC0G86eE/oQk0DA0k167x+uvvUGnc0S9poOoMZ21UWWT5dUa7/zpu3z9Cz8fTvy5AeV8EhKlM6qWiSRYZPmINJN49ZVf4N33/zWLGw7juctsPKC5HACr6HZGnhh8dPdjvCygslhGVVUO2ieoikmumdQbZbI4QQh9EARG4y6m1sLQc5xSITONZ12S8RRdF9lc38GbBjimw+ZOg729HlkmsrBoI+U629ubfPxRjqplVOsKr3y1zJ9+7w4hJpqaE/oB64svc3TYRVJTKmWXQXfG9tZ1Hj09JFcyFhYt0kjEjMr46YxZMsL3JoRZiqAaWLZCkka0yjXc+RRvNkYTbGbTEUImoQgqgZuQpOCUygTztEiYJxHVso07SVANk1wQyFUZTTQIvJBBf0TZlFmo1the22AynOKO5ywv1tGEBapLZSoV8OYhS4t1zg5mbK5cZeTWGLoDwmCCpmRUKhWOewOmbkhzaZWZ18OqKrg5/PC9D0jykI3VRRItx816dGf7mIZDZclgMpKRgxK5NyUO5wz7CTtXd1Blh6PnJ0RJzPq2Tuj1ODse8Nd+/et8+Ysv8Z//57+JYRs01xyePhyiLk5prpjkigmCiqTmEIn0Bye0WkuIoo0i9aksb6BYIkftZ+hWwIJUYTKRCJM5oqRg2HXS0CTPHM66AxaWYHllkd2HB0R1WFuas7joMJsrfPWrX2Q0mjCZztnd7yAIOf3pKbZtUypXOD3pUyqnnLQjauVNZC1D1hKcapPZqMZoMMMyc3r9BwhyzNrKFWZul2u3ZBATOtNHlKsVSgsGU3/M3JVYX2kw6g8RTBV3HuP7PUTPwZWOEZKcN167imEYrJQckrhGZXmdmr7Hl15/G2nyiB99/Bf87oNDrrzxVdY2brD0/iME4eDixJYnCcPOkCCM0c0KP3rvI9794D1ESeLbf/R9bly9xssv3eDTBw/49P49qtUqSZYiixJQsFeKKOF5xfPZaDkIgkAUReRJcrGjLMgSYViknxuNBnEcX3RIJkmGJHHBUAqCwHQ6RVVVZFkmjmPIc4bjSQG6UpEsi/HkCFERWVlZpdmwGQ6HRFGApmkcH5/iuh6iIOP7RWG6IGaoqkqW5siyhSzLeL5LnufnaeyMJMuQJJlcAC/wzwvMdQQ1Lh5zkmMYBmkKeS6iKBo5Ke7cp1wuF2Gi89DT3PVQ1UJqT5OcNE2LkI+mIQgCQVBIPaIo4jgOnucRRdHPfC6+kLoFQSgS8ecJdkEQMC3rHISHjCZjOr0uWZZh6ialkoOsJZTrOoqiIMtFOGoymZGj0D4bFexfGJHlMdWqw+JyHUnOyRINkQIEu3OfeRAzm3rIssp45DIbeedSeo4bTFFlkTwXkJU6llWmUq0yd2cIxUuEKE559GSX69evY+oKcb5Pw64hDAZsXimRxjEiGacHbfae7lFd2OTNL79Kxarw6MFDaq0Kleoi125JHB4f0uvt487bfPt33qH7uM+SozE87bL+8mssNL/Exz/5hNHQI/YMxqPk4vkq1qFENMXADSIEQfxsv5vznkpB4t/S5UO345KmCk4l5enzA8gCSg2FV5ausX9wQi6mLC5fYT6T+PTuO/zCF34VdAH5tdew//DbjIYTREm46E5/ASoFBHLhZ32UeZ5zvN/H0W3OTk/R8gqandE+OiTP1XPGvFjhidyM0TSjudxgMhmw/3xKudqguezgzxLqhkFv8gHf+aPvUa7oRNFTvKnCxo2bPD76ANeLaKpL1Go1lhpr3HvwEWkWFIX6roplZ4TzAJV1dnZc7j36hJPumK3KInI8RQqaTJ7lKLrIvbM7JNkZDm+RKAKpMERfbLGoPKfTa2MOHaZSgui67B30COMmb7z2Ms86q3QmZWorIvt7JyhKmdyGf/0XP2annPPxOz9EvR7TqNnIqYpWcrAbBtfqW9x/usd4FBN5M65uGfzZH30b1cn4ybsfce3mqwR5iGXkDDt92oOcjZevs7G1yHQ6JksSQk/j5GCfmy+/TOhmaIbKo92n2NYCilpDMEakuUCplTMd5fQmbbx5zq2bbyAIOYeHx3TaPeTFFienLouLy/T7fVoLZTS9WHLzZimTnoKYrhDHbRqLDvPpgKOTnNv3f8StW6/SbK1z2t5nNBqxueng+xOyVGHqnTCfaHz1q1/hwdNPmHseJ90x15cspu2EZkviaLdHtdFgHh3gJgLJLCFLaqhamSQWGE4mWEYD2ypDIlErO7z/3scsr1zm0g2NZycDdnfvUre2sQ0Fz58jazn3HvUwNZ1255TpuMnaVovDozZIKZrhEGdDur05phajqDmC6HB00Me0Jyi5jkiffjejWmkRhR6VSlHLN59mXN65xeHhIb1ej0pV+3lh4s8PKEXVQ4wDgjSiOzoEOaTWqnP73kcYhs6gNySZiqwtLVO1E7JMYzDZZzh6QhzqKJqIHJdoH06J0jnNRQVNKjEfxSQRSKSIakzVXiBMYsySjqCIjKd9StVFZu4MIdd5/PAQQ89II5W9p21UXSMMLfI8Jc1UeqMJW1dKGHbM8VGH9z7cZe4FBK5cVGW8eQnbmbC2E3O47+L6Ljdu7ZAlM+xKTpK4SImIIpvs7x1RKTcwM4tpFNJarjMfz8iDHMnQOd3vQx5h22UqpTJ+FFIzbQShOKlFUYRtlMgMibk3xptHHPhnNLUm49kEsawVoHQyp1pTkDSVYDIgDF3OeidMRwElp4Y7jxhmHVK2SESR8STk1dduIQo9jk+OmPhTfD9FNz22N17n7GxOe3xIpkhMz2bsXG7xrHNMS2+iaFOms5R33n/I9mqZ69tvMPIm7D4bcfVmg/G4j6bZCKHBJB6wsHINVazw43c+wCxJpJnFxobFwf0Ov/jFt/jaN17hH/+Tf8qtl5rUFsrsPnvOG1++gqa9zJ3H99hYKXawT09cbFXj1struLMpwSBHFDLCbMjsLMUo+3izELOiEHshk3FMuSbT6bdR1XWm0xRRyei2E9S0SrmUoyge/cGI0TDmrDvA9T0q5RUePzkkTnJaC02idI4olvBdk2pdwJ13uXbtGqPhFM8TqZp1Hjx8SqPVIhjF9DtjBFlA0WNOz57SrO8g5DlR6mPIOv4gw1BkNNOhqVVp9+6jShZCLjGcujh2k5WlFZLEpVySGA49FltV2gMfVQnR0xaGU+bfvPcBg/0nyPVLXP/6N1jfKBOFAqqufVaVIuTUa03KpTp6mqDIJmmWkOYBaVqU2P75j37Mex++Sy4qyLKI53mI5/KsKMoEQYCXZQiZgKpKSOehElMr5MQgCKhZFqPRCMsqQFwQhRiWyXzmIQgCml6c8C3LYjgckpNerOW4voeiKOQC2GUb2zDP64ki5p5LEAQEfsLpkYRTsjEMDVmyWF7aIIoihuMpfjhgMpsRxzF+WDClQhJ/9iElyySZgCSpkCfM3ZA4K8CurOr4YYyQJ4iKTJrFTGefdWoCSBSPXdcL8DZ3pxiGQblcJnA9fN9Hlgpf40+zsIXcXQDtFwykpv3sh2scx0Vn5XkSvmB+ipWfOC4kbsMwcBznApB7nkcYJMxmIVkKlm2gaSmGJVOuVhDEjFrdQhAU5jOfLBXx5i5np/NiSzocYBoaqixgGCamI9Kol5FlkSyJCZI5eaYwm0RF+MkttuHPzs6wrBmDwQhRhEqlVDCfWUCpUqI/HjDsD4gTnyyFanUZRVEIwym6prBz82VIMzLmZKlAc7GMXX6J5892EWWPzukQSTzBUBe4UjWIp4cs7FTYvnqTmp7z3g/fod0L8BPQNYvjw1Pqde1iz508J0ky5rM5mSAhyspFNVDhYfwMRJpvfx5ReuGwFCjXbKyqQXd8zPr6Oooik4tTnj0/Ik+K7enhIKVSkxj3uszmE0qlCsKbb2Jdv4neHRFF/gVwhZ/BlT97yyFKUuZhl9nUQJC7zJ97LLSLXlUQL6wgT58dM2rEDB77LK8tMg/vIMZTwiOT0WiMZm7j2Fc4OeszmMyp1xYJtDEf3fkR82mbWBVxVh3yMOOlK9e5+/gjOsMnZPKEUf9VanWL+/sfoEsb7FwvM+rNOT1ssyi/whtfu85v/vY/5Td+pUFoRKQjj2q2zdQfURYWubW+zVl3l/j0LgtGiy997cv8w+/eodWEvQcDFjZ1Pnn4CMe6jNJSCcWY+HQIsc1pYqELA/7wB3+OF9us2wlGSUd3M1akMn5axcvg8e4TWtXL/MU7f0bd0fAigVHksf2VX+Ph4V3C/oBbN27gBg6L9RWubC/w+PER/d6I+SThy1/8ZbzLAeNpm+XVRUR1hSTLaZ+MufXyGmE6oFw2MGyF9nHEpcs3OT1sE2W7aMJVLm+/zt7zR5SdZarXF+kN9zhrtxkO5sXrPxdAyLj78ANK9jI31ja5/fhdhMymWRdZX99m6p1xcHhMq1JHFKE/HDD3D5l6c0pOHU3V2T9+ymzqsrS8Rph55JMVblx6mUE04frLmwxPAnYW17n/5BE1R6R9fN52Icro6iIlq4Y3m5JnKaPxkPXVDazGIcdHA5r2Bmkgs1jepFKf8/vf/V2WV15GVHvkWYjnT6hVbSYTEzee4Y1TbKfAUZ7nUW9WmM/GTCYzdjYuMxnq2KrD2tWQ57uHDPqnGA7MZnNksYxj1+j3JSQ5R5ZUVpZbPy9M/HcAlFrIaOiyXK5glTNGw5CjkydYZhl3IqAaZTZ2yqytLtA+iHh++DGGUUc1YGl5lePTI2ZuxHQWEmUBaXfEeDymVNEwHJMKJRpLNfojj3HnLn6gcuXKNkFYZv9wn0Z1EUn18KY5lm4h6i5RpFCpLDEZtQn9OkdHh1y7sYaiKkzHETevvsra6hUO23eYukMM1WZ1O+HkKOHoaEClaUFa4fR4QDyKcVZTSqUGJ09nSHpEeSHFNGOUvAyRyDT0UWWVwWCAkoikQY5tW6iKTpR6IKQEvk/FKRHHKbos4zgWQZQyniYEUU6mpDDpoJgqw/GEIEpRkEmzBMWoYeoqMXNmoUsqiURpwszPkY05Dx/d5tWXXsW2bT748X1uXG8iqyHba4s8u99hY/MyT3eP6ZwO2Hl5lSiYIyg+T593cIM5a9eWGXY9VEkgmWY42g6nZwPOTjsIqcmi8zJH0bv4/pzIVbj+6kuMooB2/4ytyxKmvYyQmxwcPqDV3OLZkxP+9J33yEWJxY0a82TC9rUWcT5BDHRMQ8Cbdhi2m9QWdVaXdAbjHi+/fIvpaYAbpARpysJSiZPJDMuo4M6KHW5VM5hMPXJBxh3PkKRiLUcWVU46u2Rhhu1IyMqAckmgXKkxGB0QxRaKKlCqqYzHfQzbwvfHGKWIJM6wFQXVFsinOXZVxE/OUFWTwWCAmAu0lmo8ePgpi4tNhuMZ/vyYW7eu8PhJm6NnY65uL5NORMZBhzB/Tqm6iGLqnB512Nio02o1mExDZtMc359Try4TpwH1xWWsioFpl1murDJbj0m+cANBUsjGEb3+lCTJWI4+q6URKMIDsq6RBSlBODsHKyKqqpNpoBsqWZaQCeL5hGF0DmZCBEGgUnlR+SAX3slz/+MLYOT7PrPZrKjdcIvlhaLzMrpg3l54K3u93sX+9ov7v2Dz5tNZAZZCD0kREBOxWLyRVQbDKZ47Q1EkJFnA990LcBcEBeOnm2pRm5PlZHlOeM4Ovni8L/4uSRKypmEoBp7nIckCqmYgo+N5Ho7tkCRJAULDAEkQydKUKExIkqRYSUHCnfuEQYyuFlVJsqkWHs2sYElfHPsL9iyOiw7Kv+yhfMGeFmAUQEQQJAQhJwgiRFVk7vv0RyM0TbtgI03TxJZ04jgCMeGsN0CfmecMXJGih8JT2KrXMFs6qlb4TaM0IvIjhEzgrD0qgmG+Sxy6lEsWpXoxD1n072aoWn7RwxkEEbNhkfo9ODjCNMrFc6ycUalXkESlqFIRZcKwgyjIqJpMEMSk6ZQkiRByieP2kB998DGa6pDFIq+9uoCkS9x+b8atN29imTqzjkNrqcFpr41WWkO1a9y4tMy3vvYlRrM2u8/PeOXlL1OtVRCEIuVtmAqiaDL34sLPKBRMc6F6F3K3fnkb5+u/iHjOwrO7S9DQCcIRtrJJtdLk+HSXwfQYx9wo7AGijyZXaFZW+f4ffJ8nv/KQWq1FfmkbYWcL/f0PCaPgnBH9y82T/+MVRlGVGI41tJLLWSciF+ZcrW3A3oQsjxEQkGSFs34Hv6YjyRXeeecp65caCKnKbDonTzMefnqMKGi0FmOO2x2ePQlZvZ7QPR2g5CVELWUwnaLJNR7vHVDWGkxmHqVSjSdPn3FV2OLq9tdwgw6HezlbGzdYLi0iVWIOTo9Y3DR4d+9fkac5q8Y1Nkrr3Pc+5PDxCQvOIraj4cZvs7Vd4vf/dEazuU6m+oi1GEM2yec+HT8jSKbs3XvAZmOT1UvXSTsS117dpjNLeWP1ZSzH49FP9olqKsMnz5Fij+m0iRdmDGcF225ZOdMsxpIWKZV0lupbVOoGnf4ZTqOBZIt89MEuXuBRdpapVeGsd4rrCjQbW6RZwGgyZToKqFbqCMS8+cqv8uzpHv50Tq1qErhzqpUmjZrEBz96gmUZrK9vc3T0AEV1KFd18kylXGpydPIIXXMIw5xv/cqvMp/PiQOHVmMDSTGI/ULJyJIFvvm1bxL593j48DEZdfoDH6csUamViUMF0xKo1V/h3t3HrKxU2Zs8R7XKLC2u03/eZ9AZYJoLhKOIq6++jSC8z73bj2ktbLKxeIksj5AEgTSLIRcwdAnX1cjxCWYlLm9tU60kBF7KS5e/RUKGGyskuIiyzHA84unuA9546/O4Sod2+wynLGA4OYPRDMSEaqWFpuk0Sk3cqU//dMrO2mv4nPJ471NK5SqyYLC01GQ6gubCCkfHTyFxfl6Y+PMDStNocflynSQTePr0jJLlQCawUGtitEJmI5equUHntM3cn2AZNuWaRxRptI/32H/WRVN0bCNHooGsWFx/Y4PR+JR6zWS9eY25F9EeHOC6CaahEXgepimzulqiWavS7XapNWDnUovbH9+hXFpkY7OB7804Pexw+foSmg7e3KLZsHj8+G7x4ogWKJsimhqx92RMmEiUnBVODrpsbatUSiJ+JCOJClEaIsjFU7Oy3GL3+RGS1sBQYwxVRs4VLMemVq/iTl160x6CKKKKDppqkAXRuXQm4zhlBoMefpjiuj6OXcNNIqbJiJZdwvRhOJ1QtstIqcDcm+FPhuRKzFKrxjycImsCkqgw6zuIWcigO0HRBaYTl/apxKP7Z1QHGYE/4NHjGSXT4urNVWRVI89iLNmi10+5sXyV9z68R33JpC5nbC3KnPbuYzlrVEpLGDWZpwcdSnaV0WDEzpVlnj17iKzlWHqVMK4VQQH3lCjQCNWE6WxMY3mZTv+URAoJgxKT8QBdrzFzHyFIGYO5j2aanBxGxGGGJKd8/OEhojhkbaNFPi3e2DN/TrVaRZYVojgHKUdTbQI/I83m5IgY+hL+fETn+IRGdQU3CLEUjYePj9i5XMI01tFUmwyXUtmg3ihx2j1A00romoKbDwn8CYeHGqPhlNXVVUylRZQMGEwm1Cs1TN2AXESghT8TWNpc4s6n91mqLfGt//jXmQ065LGBKHn0Rh0yQWEyC1herZIhgCigKA47l2tEoc/KyhKLCy3KTgukGFEUGCc5aebj9UOi2YQoidF1k0rdRNPOfgq0CGxsrjO5tY4/myIrCtPpnDDICOPCTxcnCVmmkpynUCWpCITJskouZCiKQpIkBF6IaZokaUqSpcRe4SdU1WLycD73ikCMqjIajy8k2Bdg6oVvUtd1RFFEUYuTeZqmBRPvFHKyLIpEYQKiRL1RI3ADwjCk1qgiCAJpGmNaFopagCO7ZCGKIlFCweyrMmmaI4kGmqZdyO6SlJOmOVGanLNWchHayHNURUcSNZQ0R1HkCzAonhdjx2kEZPh+IXu/OCZZKMBls94iOj9GQRAujltV1YtwTrG689mU5IvbC8BZVCFlqKp+XvquFj5UufieJaeCLBfHFkcJ43Be+CYVDUVWKJULH6FhqEShdLEwlCQJw8m4qDdKEnRDRddsVEnBrmhUmyVarcWLx3pyeERvMCIIQtLsPOiUpdhWDkLMtetbkMUgJFQqJc7aQ87OOkXwKgxx/ZAgSlCkBFmBPM3QNA1ZlplOhpQrDoIsEXgShl1DEAoP5Psf3yZLUpbWrzJuP+FUshiOe3TnLgIy/f4emtWi2+nx3/5338VyRL7wpde5ceN1ZEkrZOLd3fPAmMC5JY48y8+l74wi5S2gXrn62XrOBx/yO/+zv85f/PbfRxWahHnKp/ee4tg1JqN9xjxAzsoc77koyoxRdxfZlvno9g956eVX0XUD6bXXMH/v20xmk5+Fkvlnf/4sU5mTphJpIlOuga4u0VhyWOiD+MnsIriWA+uXFpjIAqI0pVT2yfxlHEtk7LVRZJ2S5dBsFWGsmrPCMOninsiQlcmMCiVV5NEne2xu5vzOo39GFut86e3XOD05ZnG1CnIPx75CYiRE0ZylpR0ytcyHz96h1+sRzTVeffvX+eTDj0laGwxEn/Xlz2FquxwOb/NL13+Fh9kD3r+fU1k3SdyUlZbD6HDCWAiZzzqMR3201i2WV28wHiZUg5zHR0949+49/s7f/Ra9swPuPTnh2ttbBMOEo0zGrmpEkwynqvP46Y/ZWHuNoQ/d/oCXLm+iCiFn+89I8kVaiws8vrvLQqVSsGMjgU73jI2V19m5UkV3NO59fMj6jsJ0nKIqOleu7nB49Iw8GVKp1Hjnz35Cs1Gw+xk505nFN775NsP+mJk7plSpEAQ504nAlcsbROmce4/GmEaLNBvS6U1ZXl7g7p09WstNBKkCsUC7/Qm61qBpr/Fo7zk3Lq/x3t2HZIlJa9Gg1x6zs/USo8kJM/eQtbU6smIh+BMk32O++5jNSsqXf3WD3/n2PRaXLnF89JhmrcHWhlD04Jo5Tsnh0d0B81nIxmaVKBbQ5Ba54NLYWGN9x6FzOsULQhY3bHqjU6ZtmSs3rnB6NOO484gs0zg+OMRzZ1i2iCiWcechUX5MkmQoaQ2yEMfUEVQRW61y/8En3HztOtcuv8XcHRGHMacnZ7gTk8XlYuxEZvzzwsSfH1AGoYsoJShqCU3JidMR66ubyHKELOr04wFnvSGKYqKYE9JphqyYBEGAIIesbW8Qzn0WFyvUytsYlslpew+3b5DMQ9S0TZANkASBZr1KvbKDUxbRjIzJ3EPIUqSshCAO6fXPuHHzVXSlxPb2Nk8eHbGyZjDspHTyUxotnckYdEXnZK9Ds9kklxtMZ4+JA5UwHeFUp9heQO80YrFeIV0QCDwJbzimWpXQmyInxy7DtsraeoThKAw7Y9abV8kVhTyJMU2Vpeoq09Mp09gjQyBORLwoIU9yBNHDKZnkSYxjmIynPpZtkJYtdFulolmM+21iEoJZjiQolGwLN/IYDWbYpso8dVFlHcWykAyJw+4ezdYmbubydP+MTBU46R9T0y3a7S6ubRDYPmE05dLaFfLYJo52ac/avPxKk+N9D19UUHSb/uCEg/ZjNpebLKzWaB/2+cLr23z4o5CjwadUV1rkUYYbiBimgaKGlKkx7j1HWplSMxdRJZO5m9CoLBDMQsbBmNhzUat1fLeDnwtIcorjSAynMRsrq4TRDDed00oW8IIeKBUYCwhphfm4jyDrqGKLUk1n7hYhEkktkwo+bthhbXsBBYMwlAlCiUQcEwQ1VlaaSHLKj997zsw1qdarVCoVTEvi4e19WvUrXH/zZZ49e8TapsNis4xEnZNuG8uEas3m8cNDmo3lghlatDjp3aVsNdEEg0rVojcQCMWApaUWK7UWn3z0Ls3KOmZlh9FoiG3b1BsOvbMR5XKT8chn1Duh2pySJhKaEJKpCpaikAgKoiyiWRWUJEEQUvSLxHaxXWyaGgt1HXtjBT+Y4blVXDdjMpkx86YEUVGeG0cBgiCRJjlh5CFJSsH2pTFRFGHqFoIokYQhmqYxdwuAUimXixT2bFZ8XakUwDNJLti0n+6jLEBRSpYnhex+zvoVZ1yRKM7QFBNRFBiNJrjujFLJRtMM0igmzz9L7hq6RJqmGIaBELukSU6cxMiiiCTlBMG8AHFJQibIhFF47tvUzn8uJEkxcSZJEbIiMJ2PUM9BaZakWLqFaVtoFP7IF1KkJhfSfxSGCHAhdxdJ8/y8KqOQvE3TxDLNi6nJn76pqorruhfyuOu6mKbJfO6h6ApyJpNkKYahkiQZoigjCOm59D1H0zRcN0XXTUAi9GXSzMf3YxqNBgCTyRxNM8gynzQRmAQjdEVlNp2SxBmPHp4iKjLVskOlUirWjrKcuesDErpmkiYwHLjsP3+/YCsNkeXFBRRFYXNzk3rdxDCKNSpR0DltH9PvDel2RgR+XnhukeiPxkUVj5iTBTKlssz2ep353KJWbeL7LhmbVAWN1eYytmERZAlz30UTNcqpjecXFzLTqYogFKBX/p1/yuzRI4Jz7yQvtrxFkbwY+S6A5UWheXHLPvmEeyrokknJqHP56hXufvgeTycPkbQSo+CQVOkiZduEsc7NSwrhcZ/T404xjwiIb72Jc+smw/GQ0A8LIJu/UAgg/7fo3pbc5K//xi/wL37321QaLlkiIokWOcn5qk9xxyTMiDMPAYX1FYsomBJ6OZ977Qb93gRDM5lNTun1Z6SZSq22jGkpCIMeothDFuqgNJElmzSRAJE7nzyi1+tx9bLM2IDSVZk33nibH//k++zu9dhZ3ebNl1/l9sO7jEYCw94Zf+2v/AdceUnij975Mb29PWTTRJTgzt27mLZEtaox6R3y4V9M+I//N79Br3uP5ZLObDZjYeUqeZ4ynsy5cm2F05M211qXcDc7fPBn7/LmjZe49mtv8P4H3yeNa7x56y06wyd4ScSXvvJNWrUqjtqi22uzudiiUtLY25/x0psvcfvOPi+99iYf3XmP426LLTPjYO+UNI94tPsxG5e+yWA45kvf2OD5sw5rG2WSsEySZuS5hWJOmUxmOFUFNyxWyW7cuEWne4jnKqxtLjCej0jinI2tdfYOd5lMCtLDMqvMgxFmSUNTyvRHp4wmA1rNNVoLde58eB/fy/nWt67zf/sv/g/8h7/692mu7PK9d57xla+8zN7hR8gsMJsOsC2NXq8NicLKisU6x5w+2uULX3+Ja1+e8/t/cJ+ycpMoOWPcyakFLZYWF5l7I2azMZ1OSKvVYjqekGUWg+kTHLuGNwdNnzEaq+wf99ENlaE74LR9imUsMhp4CPqQJElYW6/T655Sr67gOBrjyVlx4WzkGIaDrWkkQYJTqXF2eMjm6hqbiszDJw+o1pZYXl0gDuCs02fnSpPpdI7neSy0Gj8vTPz5AeVoApoww2NOo1ZHl2DqzZGlVebuGatbKyiax+HzLjkRfjgkattUyi06pwFryyVUS2HQjxlNHzPzPWQxZevKGpcurXLv4TPWF9ZYbC7zpP2A1UWLs8MxsZjx6htf5tmTKSVzzN3DAZbuUxJl2pMx92/fY6lRIlI1RElCVatUSybj8Zg49RDNGbM4xtQrNBaXsVzozFTakzN8XGy1jKyk9DouW+tXufLm25y0d8nUNp9/c51OrUQYP+fUn2BaVeoVC3dYJEs7wR6xXaJslnE7A+pLZSzRoT8qrpq8mUetVqNaqzOZTTH1gMAfUy0vI4o5e90xtmYT+AMiZYZR2iGa6TRKKmGegGkiBhLTKMCfjxA0CcMqM2jvkRsmXX+AoeZEaUCqy1xZv8n+yQFR2Me2K7z7+BlBErJZWUAMy+zffo5VahBnLrak4s1Dyk0bqwb9fkQMfO/dj4mSGQuLG/huQBxEXFrdoTfp4foWqBEYDhLrzN0esqNgVmSOT3Zp1JqoqkPf6yNOfFTJwpRVchkUK2dLWmD/4VO2bq3SOdLYvdehZFt0Z0MMySGMEnwvPk+u5sz95xgljWvXXuP5oz268yl+LKKlHskUVM0gCg4wjVVGszmcpCh5hWZjG9XKCb0QQxPpddr84i+8jusLWGUVWU24eeMWzx4d4HpdTGOZujVjfHzMtatXOBwOSYUR+3uPcGoVyloFtVTju3/0A+bjIW+/9UVOnuxx1D6ltbBCtblIZ7yPWTUQBRFbN7G3bPxgTrs9xLErzN0Z/d6IPAVNU5BViSRPUXWdOM3JwhzT1NGO2oWnjOLE+end57w3C5DEHEkRiePCP5jnhRQtI+P5czTLvAiMhGGI46gk51ONpVKpuLCLEwzDIgpCJEFGM3SmkwK01arFh0aapphWkYhOshRJKQIwuq7jhwFJVDCSaZz8lMwLqqJcANEoipBVhVLFYWFxuQi4hHPSc/Ywz4udbTFNEbOMMIsRpSI8I4sSqlwwgS+gp5znxYqObqIo0nkQpljQeSFLh2FIGIYYmkmWJTiWUYATuWAQ0yQ/D9lk5+UwKQISxjn4C8MCrCZJgiBLiBT1REmSkEQpaZ4QxzEl52flnyzLkCUJ6Rxs56JPnKUYtkGapnhe4TENPP98lSgljQp/qK7oZEmGrKjnQDYhI0HIgFRkPg8QJQlJ1lE1g0ajxXQ6JU3ji9S5aopFGCmK8b0ps+mQHBFJEhAlEIWcJI7JsgzHsXAcE0PTmE5m9HsT8kzi6eOT4neaJpTLDrVqmbX1FlevbbG+UaNSqRDFOVGYMpnMaJ/2CfyEztmQ4dDnYH9EToplDZCkgpEtEusqlq2hqsVrLcs8FEmnpoukaUStYSDLMoIA2e07FyxvlmVFGOa86+C8gaf4+lz6vrgJAl/96qsk4SGOUkGOunzjl6/QPpvzxz/8lDdu/TLf/d6/ZHHFZe5N+e5/F9FqmATt9/g3P/g+v/rrfxNjewv53/8b1O/f4zToXMw8Fm9C4bNt789+KLP5iN/9F3/A2qaDKMYcH06pxAFZkp+z3AKCmDPpxwhNkfWNFkkW0p62aThNwsQnE3T8cMrpfsbq6mVUK6Q3HuF2RMLIw8RA1g1W6gGDQZfETVG1CNNa4EajRP8sQloKeOf9v2BxucnR0YhU1JkOT9CtnNEgJgoNDsdnrK2csP9vHlO2FhiLOa7bJXdT9h8Nef1zN4nCIaIkceulCt/9wffR1ZxJ9wR/bqAuq9y9fcxiSyfPi7ngdMnn8voKn376Ke98+JCbsYRtt/jgg2cYyzpH3Q6Ncovv/dEPePPzt1CSEt7xCZNhj/HkIXnWZjTe5LWXP88Pvvcu25tvsbf/MbvPBXY2r7K2vkS/3+fZ3gPsss3RccDiyjZxckJnTyDNApJkyOOHMxaW6+SJw8pKifnUR1IVckHnYP+UzjDi+CzED2cEiUOz3mI2CnjjrVfYP35KEM4RKC5QS45DuWSyt9+j3RljWxZBkPMHv/uHtM9O6CY/oSW9zeWdS3jzE/qnXZZXK+wfjqg1bR49HPJXf/lNvGzI4fOMa4sN3vvJI2SzgvskplxVsVtLnJz0mI5TtrdWSMn48N0zKnUdy9bZvrJE6EeIqUkwjzENifbpM8aDMVYpZdjLieOAsplhqDmqFtM/m1KyGpi6zHjSQbMixnvbvPzmGidHz+l0j7BrNSylxDQMef5sD9uq05/NyPMSJTtElnJms5Q4gla9xDg6Y+4PCbOI08HRzwsT/x1S3rM+tVaDOBkyHc8JETGrApE+QELiydOHLC9eIk6n5GJMmpicdTr0BzmlaoWuP2B7tUYylzg7CWktzQmyGbPoGVGsYWkKu/t7yNoZGxsSugJ+5BEHCp1DG9PymZwNubKzhjec8PTgMbXWGloeM5oM6Md9KpUKQt7g4GAP3RSYjkOWluqUnRa7h12iqPBlzZMRquqQCClREJOnJqYi0T46YNjuU6oCcoDntllcqaEpr9D/5EdYVkouRkiWTpYlqGJxMo9iEWvBodoqMxkELFaryKJMqdWiOzrGLLXonJ1RqUnohsTMOyLKNSoNAc/PmPY9qhsKyHN6xx3qly6zcmmHdz/5EEvPcawqk2HEcm2VKMyIzJhBv0/TaSFlKaWyg4zNwDtFM1JsrUl/PEZUBcq6jB9NsAyHuZ8TJ1NMQaK0VsJ0JGpGhfbZGAkXconZfIwmKwwHYxzLQTEl2mcnSIqEEA+QlJhmS6XnHlJr1YmyBEnLMF0LNxjRm56il6uMRiFLTQdEGE1CnEhELOusbzYpOU2E/AxNU5lNIjStyuFuH9k8ZWm1Shxp5KmJ5VTJM5eT3TNEQ0ZIQclNvAhQJuiqxNlewPbVwlAchTNMJSBkiJrKWKpNGshIeYP+QOBs+BxOdBLfZDDwMOw6lm6xUKlz2j1gJsUcHhzjxymiIeAYy0hzncDoczBzaSy1EMUK/+zP/gTDMhGThFfffpMP/uJdGqsiVfU6S/VtBDGhfXqMbTZ4843Po2ky3X4HhAhTK+POg0JGnc8JYh9F0RCEmMArJkTzF/RIDhNviJ9oaJLNxPOAAvS9kKsTIUG3dBCECy+faRbKQKlUIo7jc7BQ9EkqStGXalp6IcWW7aL77/wWhiGiJF1I257nFZVDpoUkiARBgCgU9V4vkteGYRAGAZ7vo6oqhmEUQOy8tNt1/YI1TBL8JCSKomJ9RxRRFEhSmfC8V1KW5aLmKAwRhOJrhCKs9MJL+aIqSDkHgH4QkcTRxc+V5WIaUlULSOpH4YWEn+c5qmER+QGCUFhRCnN8IXOLinyR3I6D4n6arhPHxd/TFwj6As8I6EYBHqM0wTAMFEUjSSLyPKdWq+G67gWzqSgKaRRfSOgvjkkUxYvQjqqJBeuZh0RhQr1eZzqd0xu4ZEnBZr5gweK4+F5CliPLxXEkWYxh2siyia7qJEkB0ubzOb7v4s9i6o0ygphglzWW12pYlkWa5oiixFm7yyef3CEMMoYDF8uyUFWJ5oLJ6nqThcUaKysLaLpMr9dj0J/S607pdkbMZgFpFpEmIAgKzcYCICAp3jno1MiSnLk7YXPj8nkdVY54/ucLD+0LhvKFp/FiYvHFBONPYbynT48YT+HB0TPS2RjZUNENma/9lS+yslLn81/8zzh4fsCnd59y9eoNRD3m+cFT/tFv/b/48i/8MoZpI771JvatW2jDEWEUfzb3mOcFW/kzJsqciACnkSNpEpNZH0U1ySIfWZYQhPTchwyOrbPQqhAlLs922+S5wEJV5OhpSpL4mLbCjdcshv0B025OTBfbXmfRKjPoz9FU0DSLMJjTaGboeoNWo4UsD0kjgVoLPnr2hHv3HpCkBq4/ZL//GKcss7K8Tb26zknnGe/ffo84C1hYKr7fu+/coVquYqkNPvjgCatLy9QWUobjLr6nU25O6J6U2dpa5ex4zHR6yo2rX6R/qjAZZcymj5hPr/L2W1/n/Y/e4eT0OXE2Y3HZQUsiDNFARkDLPT74k8eUqzq1WhXfGyIpNdZWNvnX/+qHlMtbiILEfO4RuDqaJjAY7xMEAdNJSG0eUFvQOHzuceXXlrh9+4Sn+10uXfsWx8entJrL+K6AbksMB0UgseSsMbXndE7PSEYKTqVGvakzHpxQdtY46Rzy//0nv8PVa9uMJqckoYEsK4xHY5aWFwi8CeOBiKbKZPEib719C70U0R0fkzv3ePdH7/P221/k1df/PRJxjNDVEf0hv3hzk5cW+0T2Nt/Zm3GU1ZilPf6rfzxmbWOT4eyI8vQSiJfIE5davcxf/NmntBaW0M2c9mmXStXCqhuYRo3RaITr7eN6M9JYJ42bNFs5ritBaiCIEapSRxYrKGrEsD/Btm3ErMTV6zZCKmFqS2ysNlheWuXZ/nuQGaS5SIrLvXsdVDXi8pVt8txAlgxiQSDgkL29LtvbC8hVj2Zj/eeFiT8/oFzc0JFFFb9rYlgpSR4wnpWRjQliViIKVPb29ohioRgTFyUWlq5Tr1dpnx3S2mzS704wIo3LO3XGEXheiBe5jKcDLFshU0pEgcDJbpuNnZTllQaCILC7/11yOeHq0utgeJiNGnvPj7BUGVVwaTRajE+njM4SbGOKqae40wRNVnGnHRJXIo4ywmhOJiQYhoQslchmOU7FJBVErl7eYnVxgQd3n2GWIlxfI/JC9ry71KpNXr55jW63y/7hIUEsIgo6Qm5jKR4Np45aVjnt9Gg1bCZdEUGR0DQfNdGYuT0cu2ASSuUqaZ6S5nNCX2M66lG2ShCJTLwB6zstYjnj2dFTDE2i7jjEkUilWSaMXaCE5ags1DbJXBU/n4Is0+91mYRzKkaNVrmOF7YRIoEYDdGROD3tI2VKUVodC0z7AY1ak9EsJnAjPG+AUzGRRZAkBVUptspr1Tq+5xJkObIcYgUi0+EY2VBwRzKmUsfUVE6mpxiqha6WSaIETYtJszESOrIIlXKNyWxApZYyc8dYNYVZMMX1Eqb9nJXLq8SJz2Q6olJWKNkqWQb9wQC7pJBnEhVdY+5m5LlMEo3QdIebl14ikmZEeYCpOrRaa3RHGbXKEt2TNqogMp4lHLcfousKedKnUVvg/t1Das0amhLy/MPHSBWNSTIlzxJkoYJllvD8PeyKzXTikYqgDF32Tw5AgpiUyI/4/vf/mGa5jCLVaJ8dMh72MFSHnZ0t4iTi5OQJZyc+sq7gujOq1SJtPXOHbGys0e/06XXaSJJJQsSDe3d/amdOQFNtklRk7vYL8KLrKLKMKihYlkPg+aRpiqIWXkngwvM4m7nnReOFtGxZ1kX/oqSIJFHMZOKdewPz81JxjflohG3byJKEIouFxy3L0FQV+Ty9XC6VLtikKAxJs+zC8+j7ftGDGUXnZd8Fk6coGnEcY5r2BYjyvPlFgvwFu5lkaQHK0pQ0K3oqTd0mSSNc173wOXqeh6YaKIqArIjIonSRslaUIiH8AihKkoJlWefsqE+pWgEgiory8iTMSM6P/4Wsb5dLaLKC7/uIFyziX/JQygXr+kIyj9MEshxV1TGMAvBJkoSmGcRxUW30wkaQ5zmCXDzmF2En3/dJUh1NKyGrSlEan4gYesGMhkFwztbqFxYFx3HIsgR/7uK6LoEvMB66lCsy5DGVsk1roUGjWcbz5riuz3Awod+bMJnEjEc+QThEVUUq1RIlu8Lq6iqaLpNEMfO5izsPGQ4n3P/0gH5/TByl6IbK0lKT7UtLbGwuc+nyRvFaVBRGwwnd7gB3HjGbugTjiCgpLpZUyS4CRm5Mlr2oBSpuqqbhBUU4Jn9RMn6+jf3Z//WzNT6CLDH2prz01i2qtk5/GCCIKcgZbizw9FmHstXkl751mSdPH5IMPWrlFmVT58mj21i2g7m9hbyzjf7BB4RRdP4z/60ZbwDcSUC92qDfHVKpGQSBT0ZEkmgX9xMFEVnMCOY9hr2IprPCeHrGs0cn1KurtBZNgshnPJmhmlVkNaBefZmT9gn16mVevlUljFx2n56yc7nEowcZdrXEWfcjKuY6zQWb070Zn3v1lzk+2SfOXfwsZHVzB1VWGAwCnj65gySr2A2N589PieUSWtJGymFn+SpkEsuLK4z7Lrmn4XcdQiHkzIuJQ4FhOyAJJWRB487tR/hhyOffusXBc5GdSxr37u2ztfl5Do8fnl/cyFiyynA4JPQDVGqk0hTVctjf77K9vs1e55TT9w/42te/hqWtMPb6PN+7j63vsHVFY+/xEWfjMxYWlsjSkL1nx7QW6rzzp+/S6+3z+htvs7u7y/LyJdrtDqkIliNyuDfm0pUVnu7/kMOnKVYpxnBSjo86LLa2GY+6HB484eq1m/jBnNOzI/xwTJ7qrG8ssnu3T72mM5u4NKqXCMMR21cV5vMEXVsgSsCwLV5/q8mgf4ZTMlhaL5EEHbZXdvj6W18h8L/N3tO7/PVf+Vs8ff6QB0/fYfvWK0h5hjQaIYrHlJY20NQyu7uPuXL1GsPJHp22T46AomtEQUROytJyhUePLLbWLhHEXRzLZn19nf5wn3kPWosOB2f7lMsKiiTROUnZ3tymUXFQ9YgH93ep1EV8P+H0WMbQFYajMaXyEtNpwPLqEpIy4P6Dxyy2blJdmPLk+QGOY7CyvEUeShhaSuiNfl6Y+PMDyvqiSUWucNjvoakNSqYCisRs2iP024iiShwlXLu5RprUGE6PiKKYg8MOsmYx6PWZnE5ZKS1ydLqHn4jkWoRuqoSRTaMu0Ou30S0TS7qOLA9ptBy6p4fcur7NbBogiAknx2foqs/qxmXCsUL79BGLWzXCxMau5hwe9tE0DdMO0FQTybqGH7fJxRmC6qKIFfIM5m6Psm2RRBKjmY+oTun1euSRQNWMEWWBqZuxtrpN9ywjtzQqtSajbkLJhDjJUIRlotRjv33IirDA0vIC7d4ZmWqAlpNFhUctPD1D00tEWVic7GSFTjug2gByjVrNZhSHmLaBoipUbJvx/j5b9SUWN5Z45/7HVI1C1pvFM5ZqDdLAJTQm1Fo1dm8fEucitZpB1TYZTfqU7BJeOMfSVbwwQAwlFE0gJWEwmeNYJY6Px+SySs0qEYc2/U6Xer2OIlu0z07RVZ2T9gDH0hhGXcqWjS6aGLpEo1Yn8lLEUKZ7MkGvVclChXFnRK6EOGWFirxKt+1h1wcMxgMcTWboigzmxZWYKJqkwRirUkZIE1x3QCqGjEKF7uSQkqWxsbmKKijc3d9jZ2uV+fMzQKI3DJGFKZWKzHTqUamVGZ4UYC7NIjqdDpKU0xm00fUK3tBldCCwuuwg5hmiZvDk8ADdzqkvLzEYDMlSGVHWKJd0pt0Zolximk2plpYxNAUpU7ixfhXLlDjrdVDKBsPRhHbcod3rs7jUxBVDLD1i+NGIlaVF7j96QLVSR3ea9Cdjwp5PuVxH12w++PF7mKpCtVLGnblUawK/8NVXEf7FJ+csTE6ahyRJhGma52Cn8OzJssJ0PDkv4obRaHQhJ+e5cC4H5yQJGIaFJAkX6ecwDPHcYkhAkESSrFgmURSJMPSpVEpomkYchNQr1QspWFGKk+V0Oj2vTknQVKMI4cBF+fmLcMuLJPcLoCgIxeLLC5D1wqMInB+TfHFfVdVIPO9iqeaFf9E07Au519Ct8+PNz0G1hKKpF5U9vu8jSCKmZpEmOaJ4HsaRVUzTYjweY1nWReH6C8b1BSCNoojJfHbBnP7lhDcUBchpnhX7z0LBnuqqVngO8xzTNJnNXDSNi9L0PEnPgZeGqMjnz1EBljVNQ5IFwsgnioNCLveLLV1JELFtkywrEu2GYTCbzRBFEcPQWFpaQtM0JrMu43HR7+l5PvOpy/PdExRFQ9dVNK0A15JoUKs5DIdDdF0myyO63TaH+zKSkCNJIgIJlq3hOCZXr21iOwaWZZFlCePxkJPjHrvPjjg+apMkCaomAylb22s4JZOdy01sewvbLtHtDFFVjW6vTa875NKlnYswkZBDksR47pxUkBDORxdfyM+C8KKHstje/uw3IVCtNFhZu0R/5OHNYvJMRNUVVF3g4ZN9vvMHf8J85nH5yiZXrlzFliTa3VOuXLnC06d3uPHS5zAtG/HVVzF//w8ZTya8mBWFAsxaX/zCRRCoeL0m3LnzlDyLOD3UaDQaqKUaWTr8mfdC52zEqRfjebB9dYv6isTx7gxVk4izPo+e7rG5c43jzhHLzWXaJ2dMp3OShYz5ROSTOw9R9ZB6c5tL21WidEhDWyCPiu7iXPDZ3rpGf+BxfBpgaTVERB4/fsLScgtFUfjiF3+RD+58h7XlBoE/ozOaUq236PRnkNjU6hEjt83BnUKKXVlrQbyIpmeEYUi/1yPNAhRVwTJU7n16SJp5dDpTjo6fUzt5zHA4RFbK1Cor/OmfPyEXfZ7v3adRvsLmTpndvSPWll6nuWRx/+nDYrQiD5hPfWazM8S8Rbkus3dwgG0tYFkjut0zrFLGZDqlP+hweesVruxcZTQZI0sJs2HKm2+/zvHJIWGUcnzcB3KsSoqsCQiCztOHQ77x9V/B80fkLCImVXodD91WaCyUmB6dQCpwdHTEafsQKbtJqa4wCw6o1StUKss0myW6Y+h2ehwd+ly+ss73/uA5r71xjXt3npHik0Qav/gLdXTjr1Ja+9f8t//y/8T28m/w5a//Kn/64x+iRg61BY3xOMdr97ErAWQaplFmd3cf29zi9c+tcdqeUbHrHJ08IUelVd9BEHxM3ULTIn78o7+gVLVZWVjh9qf3WN6u8mc//hGbK1dJ0ojZ4Jhm9QZJpFOrl8hyD5E6pYpNt68TeC5h5AJTSs4CaawjCjKiMieIQkw7ZTQ5ods7oWqusrZmEHkGP+/t5waUNekWRC5vvrqO547Q0NHLFQ5nIQuLNV773Cv88fc+YO6mhEGHRrPC4eGQlBG6WiY681hslhDlkCgI2Ny26fZ07IpMInZxQ4lOd8KlHQkxnxH4EPoDmo0Gh7s+a4tlKksNGos27mjCeOzTGdynoa/QPp5zaU3g+HCMGISYhoEmmliGxmjQZTbz8JM+K1sNKs4SgRszSgYYhsXZdIIb9lDtAF3TSJISUVCjVLYZTR7izceoWpkwSNl9vMutm2/y5Ok9wjQjjVN0XaPVXETMU9pnY9qjMXopwE8Udla3mXSmGJpJEGeUqyae51GrJWiuj2YssrohkiQBK7pIauhMXJ+SLdFYbbLR2uD2/feRxCGGuI4/Vak4JrN5wng4Zml9mdOjCDEWsWoSqmAzmwbYJYtwPKdWtvGSYvUkmAbkRoahOFSdhFzXSGKNcDYj8HyqVgurWmc4HDB1pyyvNEjTwjPlRkMapaXiBCWJJGmKG4SUKyaH7cf4RkbQE7H1kOW1KoHXRJFT8mRCGAxQPJ2ZP0KuOGSJTpImJLGEIhlkqUu5ohPSQ9NKDLouellic7XO0UmPwRBGkw6B7xGTICkysRdQKy2SiSq5EpJOAp49OeXa+hXSUGbQ9ymVK1SrOoaVMZp5zBKBW7cusbW2wye794glj0a5ji5rzPtDgvGcWq1ClM6Yjzyu77zBKJywf/optWWVdruLo9fxXTg8HmGYJlPPw7QNwniMSI2TkzEbm4ugxkwmU+rJAlapgRv5JKM5ll2iO+iSTSOyNKU/PePGpSvUGmWyYMKlnTV2/8UPP2NtBIHZtIe8YpKlAiW7QRAkVMs1kiTBsewi6CEkqLpCngkXJzNRlM5PxjlxHKKq1kUx94uAzQWrFscIQsE2appWTAbKCpqsXKSNPa/wGbquiyQVHkdBLvaobcdkfi6nvziRKkrBrl3UFOkFKEzionMwSYqr8BdBmFKpVCz1UMjupmFhGMY5oxijaZ+Vqr9gHQtPpPgzAaIg9IqidcBxHOI4LhhEXcZ1XQzDKOS0aTFb+AKYKZpK4PmYZiEnB0FwURUURRGCVIRH8r+EKZOk8FYGQYBhGIVf1fMvCt/jOKZcLhcVR5JULPII4nmnpVGMOYxGxYqW4xRrOEGG7xfhqcgPCouArKA7GokfE+XxhYVB0zQmkwm+rzIeDM8fU1b4dEUDXVOJ8gIwZ3nM3PUYjUMURSNLRfJMJIoiSqUSaZKjqRqGGZJnAo1aDcdymE6nDAdjfvTnt8nzohS/UW9RrZVZWV1lYSHh0pUlNjY2iOOUTnvK0dERe7sdbn/0rFgQKlk4js3iYouNrWV++Ze+wV/91V+nVCoXnsjnu8XrVpLJMuGzYIsokJ/bDF4ksM0vvH3RQSkIEHgRs9EcWbfIckiDmCzMkTJ4fP8en3vzFRYWFhiPhxiqRibk7Fy7xUm7i/n8kDCMLsI5lb/ztwl/87cYjsYg5GRZgnHlKqVvfOOipih7tsueH1Cx1pDyOad7Y0ZuG3H7MuTF4xUEAVKYdHwEvUWz6fLxTz4i8Aya9SY7ry5y+5MBb7z2FZRyxGByxuJSFTFtcMkQOTh8gDe/Sa2mMhrHPLj/lOWlTRAMEDQ0RaA77HHWO+TB3neoW5eQ1IRMyvD8EbIGUZYzmgd8+/u/x+JihUk/QFFC6s4ykgS1uoM/19g/2gchRrcqrKzXmE0GTLwzthufx4+PMY0yaTBhPJlRb1xBteYYylUyZI47u3hRA9dLMfQISR5yNujQLJfYXH+Z/cNjaq5NFPQYdE9YWb7Mcm0LwxJ5+OAOutolk0FWZKbeAC8Q0Z0+k35ElsNgOGZ9fZswyBhPukwnGQfHfX7tV38N4jHP954xnblM5x0aCzqlqkHoB+hWiKbC4lKT9skR5YpK9+yM9bVtfvyT91ha1QijBSZjnTA4RdMknGrANPiUdFqj1Vqk187QNJf33/sJc2+MLNtMR1Pu3Dnm9S9sopcMJK1ErVKl3z3mn//eP+DXf/nvsLL8v+Tv/d0v8t3v/EO+/c9OiZUSem4SuAqLmytknoAbzAm8nJnbwSnVEHOB4ahHGAqcTE64fOk6n356l3435PLVBWy7TOAnrKysYCUSpw8/YllbpUaLN7a+QK3U4Gz0CKdS5dO7n1CtrLNztcndu3cZjoaEwiHe1MSpVoiSCUIuMnen5InC1avX8aMJ+3snVMpLVEsh81lMLkU83u9haf8T9FDOwyd4/ZR5lqJpLma1edED125PGL/zDq2lNWbDEqsrNrrmMDV6WOWAo9M9vH6MqYaomoispwXjIug8ufeMVz63jqxGpF5GFkukyiHt0wzHNPDbCpkg4pQWmEwmnHVPWVts0h8eEcQRR6MQkT7b1RqbGwssLetohsST3VN6+1PscsLI7VJrWES+yQf3HrGzvYbrh3SHR9hWDUepUq7W6XU65IlIfxLgBlNCH/y5AmJC96RNuVzm4Ow5Xp7gZSJCOiXsTVjbuc69R3dRdIVyWaFSWiYKQubzPn6cMRlNWFlZxLDh0vVteoMDtncqPHnYZ/uqRuArTEdTUk+mZldJZn02VzfY2z1l7iUsbC7RO3NZbixw/LxHakxZXq7i9kIkOSc1FLLcp73bY2P7KmE4wZ2NqFVXySIBXTeYA3ZZ5WhvzNbqOhN/xNx3qZYdpkOXw/EJl64sYxpVAk+k00nx5iMUVcA0HXLXRREh8KeIZCiixd5uB8VRSeMIo5yThgpxLtIZHlKtltEtmdaaRibp2JlLHIRESUKtXkIWJLzZEEMxUYmYjlTqLR3LVOmPAsauiOM0i47F2OPVWzf58O6HGFqT125dRswV3v/JQ+bjAFtV8M06ulZIyVeuLqAoBrahMhiNGA4m1BtlfAYcDmUiQQYho2TplPIKVVFjPAiIY41WrcWsN+Wgd8Ty8jJ4dfrjOdXKAlGYMPdmeFFIrkhFyjiTIFepLVqoapled4Q4VklTeLr/BAB/FhNFo6IpYHLGaJojZgqKaXJwMuZgf4o3aRMrA143FITzlClCTqkk4fltdHOBwbBLEufEcYppFtOEqlqkwiVJIoiDYrZOFM+TzimiVDBAnU7n3CeXXjBlL8CQJElIIhhGUdUjCyK+X6zQWIZZpLopWEDf9ZDVopA3y1L8F9OHWUwUyRdS9AsJuyhYFymVbVRVJU3T81lCr5Bto7AoABcKYKMpKqZukSYJQRhiWRaWVXRtvgCO8/kcURQvdqQLeT0uuu5MhygOLuTpFzYA33cxzaLS58XjevG8CYJARo5uGhf2gBfl5JIkIYoikigRROH/iKXUNO2CGYYCoEqieD7lqCJJBbCGYq2mVKogUQDWMImJvCJIlWUZvV4Py7Io2RoLreYFKLUsizDwGI1G5AJkacGgWpZ1MQcpyzKBO8cwDDw3IfAjXG927oWVEcWMIAzI84RadZE0jUmzkCxLKVV14tjF1CR8f04wLZjkseAy6A1oNKq88tplTEvl8eOHXL3yKp1OG9/3uXfvLu48QZYMHt0bUa9XWViy2Nhc4YtfeoNavUKvOyCKYs7afYbDCX/8vY+ZjmR+8RdCLDNF+af/HP/pMzRNRdNVBmMX8YXkfG5ZLfyMoGxv4nz96xfgLn+2y4M8JPA9/OmEPMrIlRQhFVHGKleuvUm1WkWUUhYW6kwmE9JUYR5m2LUGmuHwT//Z7/C3//Z/SGt7G+1v/S9oAfzmbzEcjhEFhep/9L8uGGog/eADfvOvfJPj//v/lf/t3/vrhMEh4dTCd88w9iPyvH/++yymT/v9jI4YspCL6IKCbhQl9h998BS7rNI7Cwg7R1TKOifHQyajPvVaiTTRwOghCTorqxa9fh8vOsPUFzAsi2A+w9Bb/z/a/vRHsgVN78N+Z99jX3LPrMraq+69dW/fe3ud7pmehcOZIWkRsETagiBDhmFCEAibtkjC8H9gwIYF2P4gybI+iKSHMxRl0NymOUP2fve91qys3GOPOBFnX/3hZGV3y4ZBA+PzoQqorMg4sWTGc973eX4P9UbCxemK9dclmq0Gnz96yb3775KWKwQlQW2coig5xycntJ119jY3mU1OyHOLG9d3+OKLx/TXWowHI5pOjyzMGA1m9DdqPH3xKbozpdVss7ooENAJYxdJhFSacXa2wjL7JHmBqtYoZYGJO8LzQ+aDMd989w0a9S7eUsBWu+TRgpU7Ic3mBKMa77z7DbJcxI8ECnXCYDxiMFxgK9t40ZS6uYkmbjCfzxHEjGhW42vv7PHlk09472ef887b9/j0s2dYtS61msnLl8doqkW9rnA+OMBx6nRaezx+9BWddo2ykJgv5zx84w4fffoeu7sWkqTQW9tmtcww9Tbnpx5JsUA3FAoJ5gsLUYxRJJG1bYXPPvmCTucOQfKI54/g7q01jg5PuL59h08++ZB/8o//t/xH//O/yt3b9/hr/+5/xo0n/xX/6qcfoagOuiozG2bsX+uzeBZRs2pMJgOyVEASY6YjCUNvcjE+xjJb3LhxA9seMJ/GbO7UOP38BZ4rYwgin332GfPJx7z17m9x7eYWpRqxDEJa/QaqOqPRhhfPh+zd2EY6f4EXuKCmlLJGw25A2mI6HrC12UIURU6Oz+mudVjMJ2ysdVkuxkhqyFpnmzDy/q0FpfD/zSfyy8fv//V3SyHxmMUDFKlGmQiY7QLH1hhPT9HEPTxvgSLq1Ot10ljEtBTCSCVKzwmjFUm0Qix11jZKilREFAVa3TrD85DX7q0ThiHn0wtWqctyJPOd7+zx4knC7Vv3mYxCFPsId1bSaKyRZzHtxj7PD46R5QXES0ShiST3MJtweHSAbjoUhES+ymg5J458bKNGmkWoao048bAMC0UFQQLL6lN3Nvji0b/g+s42y1kGgkqBSJytqNU0hoslIjbNXhN3eE6DOssyZjSesb6nkyUK52dj7t66TRDMsGoSs5mIU5NptSRUrSQKJCbTBKsW4UcuTq2PiclouaLesJnMX9Du7BIta0hxQh6HHPoBdSVgv/MacbLgcPCSTFRA9Zn5Fu2aTBp42LZNWWqcvzzB0gXa63XCMsd3PYQMNL1NlmUUSUCQl6SlgBTHdLq7IIZVy4kvQamhqAUFAUIhs9ndJEpdLgYj1td6GJINpYLTkgmjhAvXx1JUNKngbHTO1uYNhheHiEaMn+Y0FIPWWp3pzMcyDLIkJoszak4TRYM010iTgMV0wd7OLpJcIogqx2fnOA0NSVOZTAfcvfM608kZjuNwfrqi267jzpeUckHbVFivX2M2m9HvbzAZnzOfu/z+X/53+Oy9n6PYCoP5mPkyJIwTDFOl06gzG85ZhjHNnknb6TA8C2j0ZEwjZTpIKESbtUYXxzGZTAfVD+DZKZs7m7gzl2ajTRi5jEYT9q7fYLlckqQRURRUyKpSQJMV5vMpM3dxOR2SadYaFbqkKIiDkihx+YNQ5n/xWXSFSfnfvaby2b0tFp6Hplo0a/0qqZ1ExGlS2TqkSkRWAiT/xXQHSJLoSoi9EmCvpnSapiEK1Qpc16oVryiKdFtt0jRF13XiS8xQFFUiLY7jyueXZeSUyKpCfumjlESFMAhwXZdOp4NyKSANw6gS3LJMs9m8AnwvZvNqLS2UJElxNXl8lQKXJImiLPE8r6pHvGyrefVY4zi+DLWIQHEljvMivWx4ia9aWISyatx55e+0rGpi++o2cZpceTBfpcezLLucyEpXASfEXxWURVFcTSdFsRLisihdTlU1wsugkqJUXsw4jlEFAVU3yMpftPIAZFkCeUGtVrsEylerfcuyqDnOVRf5wq3OKSuLy5X6Cln4xflIUjXpLcvqsVxcDLFNA1kB27ZwXY/AjwjDFIEKiG/ZOrW6jmlpGKpCq9VjMV2yWCyI45SL8zFRlKKpFls7dVrtBq+9dg9Vq5qUFEXi+fOXDC7GnBwPWS0DoihDkXUaTYdOt8bWdp/NrR6SXHBt9zbf/ubvYFkOwv/6bzP5h3+E67qAQCnKVb67KBBEEcpXQSgB+/d+h/7f/dvIskLx3nv8PU3jH/y9v19dOMgqCjqhuKDmWBRJxQVFqp4XS7cw1eqCxGnVcJczTEXj88++4uGb3+B/83f/Np12G/3FIenf/weM//P/kvL3f5fef/KfXAnK5D/9O3zt9JjziyF/+S9/h5PDL2gom7z12nX8n3/K3/hsRies3nMTU+S/++tv8Lkc8d5PP0KWQt56+A6HL7+iXt9C1W1m7jm6LpJEDuuba0zcI4LwBF3p0GquE8chkmiwClb4wQJBLNnY2OPw+QXrGy3cZcyd23s8/eIxnTUTP6xx9+EWP/nxh9ScFoLkMx4tqddsdre6xHHIfLYiDHS6GzaIGnmeUrMsyjRhNr0gXPlcu7XNe+89pdXuAhFrvV3GyxGJNMDObxFEKboTsFoVSBrExTmRr9Prt4miBFWQ8ZYrGvYW1260OXx+wO72DklcIisLKHsIUsFaf5dldMxotGK6eoylXaNmddH1lJOXK67v2+RxF0VfcXxwzsMH32IenHDyYsbDt24yXwyQVAnXHyIrJYbaZbU6IM1zssTk3q03COMT3FlJu7XHs8OvuL57A0mVGIxPKUqFB2/scXZ8hK52GAyfIQg5eWTQ768T+hGNlkySRKhSj07PYLFY0u93OTmIWd8RGZ7FtPsWYTHiiydPOHp8wu/81l/gu791hxvXHzJbDvnTH37EcHDO/HzFmw++S5wuuBid0Ok0EKmz9M7Y2GqRxhqLxYLxMOCNN+6TZCsG5y5eeMpqtSLwRPZ27tJpFrx8cYhd3+Crx4+4ttNmbb1LXugIksj6ps1nH49QrQLNSvG8Fag+UZjTa3yNPPOYDGfcvnmTTz79KUatRFRCSmRcbwZRA0lMePjWd1m5KX/jf/x/+H/3+/x/OP6tJ5RZMiX1ZpjaJiI6G3sFbugjlSnXt64jiGscn01oNiNMpcnzJxMU3aIoE4JljGDXyD0ZXS4pggjDNtGNGlk2wDZtpqcBUl4yPgvZuHOflmYwGh6BYHN6/oy3f+Mmj368ya1bJrGUUAYC3VqDeFsgKRKE0mY0WjH3XkAiUO+3GI9mFfpDjMjTjG7XIA1TJFEkFwIUVaLIFcosw1+GbG/UKkiz1SQJHGRRYDh9jqLpCKbA+UWC3bBIvIzDJwdc295Azw3O5x62U6KWNhcXF3SbDqG/QJFViixHlhfIhkWOxfnZHEF26W+0GA1NtvbX0NQum+0m4ZMXnF8ccWOvz2KVEIQrapJGr7mG6EwZLy2ejg5Ya9mUpoTvR4ieRsMpmCwmrPcbLMYuDXuNpBBwCpvVoCDSYjRJQLQMguWIttMlUmzchUsZi7T6DjW7zWp1ThJ5hHHBWuc6zbaOH8yYTyOCKEVRJW7u3WO+HCKaSwZjF2Wm0Kg1sZWMaxsbPH18SKehIzDBNHRWSUxagFdISOGKXFGYexGallJrbaLbMDpbkqY+vb7Gb7/9LT7/5AnxMsK269y8dgvXnTOYnbPR3iCYX7Bwx4SRj1QmPLj1No36Nf7rP/7fc337BlvrPRqNBu58hSHr7N2/TtNukOQqLw4nKFrBXqvNwZNTskIgtQuaLRMCjXC8YLDI2NrfZDY8Q8sbdNstREEjTUNenpyRIaBbDYxWl2UU0Om3IC3IkpLNzU3yy1S14zRpt9ucnj3DckTyqMdabx3DcPCCBNOw8AMPRUpx/TmapaDbFsunLgiX3cZFQVYIJGVMGC2wLBNFF0iLgJk7qaDkjkkYBNhmjTAMAfFK4CwWs2r1KctU9q8Cy9IuxaRy6R1MESXxKhX9KlSTJMnV6jhNK0xNURTVtLIo8KMQp15Dv6wYfbXmazabVZ94lqFdBkcsyyJJq3OKwqRCFckyRZERRVGF3rlshgnD8Godn2UZ3mUIJ4qiqxT0q7X9K79mmlZCOMuqFbOmK1cC+CqJrlXn0u120XX96uuv/o8X+KRxcuXJfCU0G40GWZZVou0yrPMrgpLyFxPCKEJEuPRbVtPN9fX1qoEoCK4e12o2Iy+hEKDIQZBKFLnCIMmCiKRqBCvv0pJQMhxOmc0WV1PQLKvafKIoIlhVYjtJUmT5lRXAu4TI53ieh2FUrUZxnNJqaVzfr7O2tkYQeMznLt4qYjiccH42IwwSLBPqzohmq8bmdovr+9uIoshkMsNdeIxHLvP5nD/+o39KGCTYdo1Wq06rbdNs9Xj9D15D05Wr+z85PufsdML7P3vMv5h9gKIo/IXfhbff+g0sq0QQxQqZpSn4QcDKTxAlkaKsltzl5UXGf/8Trfj4E4a3ttm9scZweEGQJORpQk1tshoP0DUNL/CJyxjDbFCkMIk8bMMmDMNKdEgCBSr/93/0j5BUnb/zt/4mnevX0P/av8far38P+v0rwZ/+vb/P37p1g2LyPkUp0m9eIxp9RVP6FNM/ZLOZI+QJRV69TyUA95jOep9fe/cBoHN6MkGXHcLknFbzu2RZhFgUSJLI6MzF6jhIUgtD2eD4+ATXdam3VdY6r+M4fdzgKYfHh5h1iSTLSfKQk9MXLN2cnb02s+WA0UmDh69t8vLpjK3tDZxim529NgcvnxNGHrZZI1XHLNwVSVxdWEWLHEXM6XdsxNTi8OAFnZ5OnoXE0YyT84CMkjTXWfgf02lfo15vMhg9RUwbNPvrqIbL02dnrPe7iLaA025zePAVKDcZB0tWL15Q11uIpUSUP8K215n6H1J3apSFjCm8Qc1J0TWH6fSITrfB8+cjao6MoUl8453fIUpOsY0dXnujgaErrJSS89ET2q0byGrEbDxBLruYmsXugx6TwQpJ0vBdkXff2UezS4anQzStTbfdQTNkHn31lIODZ9zY/C0evP5tHn36Mevru3z62fvcuXMLXTcQyzYZc6bzECEL+OSTC27cvc+j42NqtRpmz8R9qfNg/wF/+bf/Kk8+/5J/8Y8H/FH6f+TO1pvUWhpPxytanYTDky9Y32ijq028JahKSqd1jTzzOXnpsrapcSF8ydlZg9AXQRkhSQpZsWI0HWD3VfrGA+xGj8H4BWsbNo6j0KwpJJmKqOb84J9+xvpOiyRfkIcwmy3odrbotVOGsw9QRI0cHasu013rE4TzqujgXKbRbuMOBzSdDT5+/z0U6d9aJv7bC0pV0LD7XZarED9c8OLMY+faNrWmxulLj/W+x1Z/kyiYcHj8mL29tzk5PUU3BWy7QVH61DYFxsMYLWuxOAzR1Zjdm7us4iVYMr2tPsa1BEMXEdM9EFosxZJWs8HwxQtE1UFUNbxJBR8d+ofs3exzcqyQxk3sZs4iPieLNcqlQm+txtPHx+zuXiNMUkrJJMhDZDGnSAuWC59OV2bpFazimIvpGKEIMSSF0JsTJDHdrS5Lf0keQqO2jj8foHdMtFTBmy049i+otVpEhYEXl+iOhVXTsBSFo6MZjX6L2JcwxYTTOETJZd59+D2CxZTWzYSFEOINPP7syQG1hk27V6dmdjk4G+I0RNb1OosiZjn0sdQ2bhAwmB1jymtE6RQ/8rCNLlJmcPhkyL3Na/jLkk4zYz4OEcwcJZERRAXdqT64kzKlyDKaho4br3CcLoPRKfWGQRioqKJKXgREqxI/zrmxscu5O2RxvkJ2PJIsQspNGpKGmya8XJzw5s4N4uGMLIxJhGrykhchjuoQZx6apRK6KVmxQFRU0rjJ4cVjXr97jdwXWN9RCVc585XHvfuv8fLoAFGsTO6qJvLOzWscHR2xDAQca42yhHk64b0vPmJjfUSz3yUNIj776lMKRWF3s4Yk5EhywZdffEKrL+H5JmEWkuoSrX0Df5wRuTO6G3ssF0Nm/owb175GuyGRrdaxOwZZ7tOrdTh9eYjTsZkcjfDdnJmyYmd3H0NXOTp/Rq97k5w5cZCRByqlKrH0x0jk6KyTFxrHp2ckcYZTV5FlgSTysDp1Nuq7xOGA/evXeKAU8OLLK3RQ3a4TeQO6nS6SKPHk8WdYtSr04Vg94jAiCgM0Va7YiqWEXEoErouhS4hySRSFLP0FtZpJHmXouoq/WqGpNUSxwPNjZDnH0g3EsiBJAzTNIgiXIOSoctWKBSKSJJKlYJl1xFIm9lMkScbQrcsJYDU1lAWJJMnQtGoyV5LjzheUWY6h6cRxcBWUES/h1r5fhU9eiS9V09hqtplOp9TsGooi06o3MA2N2WyGqsosFgs8z8O2a1dTxTSNSfIqJ0MJUZaySiovZZqmeJ53BWv3Av9KfOm6jmU4lahMK2B7TtUwYynylbj+5SNNq1W7v6pW+LImI0tVjaNlmYRRVK3uHRPHcSrP5iWyKU+zK4HuuitkSUWrWbhLt/KdmhWnsdZssFwukSSpEv5igabIZIlAlpZkYUwYRyAKl6n67CroIooiQglFWVAicjGY8OTxilrthLpjYNkm25vrXNvdpN1uAyKT0YwnT55wdjri8aND/uU/e49arUav16PdbbG5sUazWafRdFgsZpSlwHSy4PRkwPnZGf/6Bx+gaDLtTgNdl9naXuedd19HkkQs28Bd+rRqjcspbAlFge+F+KEPglyts0tAEBAQKatXAUEQML7+7q+EY+ajBS8PT7Bti7WORpJElEQoukNZCkRhhi6bxHGKHy4qQe+HLC+bosq6jCCBUKb843/8h4ik/Kf/y/9VJSp/6XXO33uf/2J7k//b3/m71OpNNq4nLFbHCL6LrM84Os45eR7x3bR5hULyvJTDgzHzzCAqY/ZuNinHMf3OFoOLKcPJMxByPBe2d3sEwZKmbXM2thGtnLUNC9PO8ZYC0/kx91+7QXzcoHQW9HprrFzody2uX7tJzTlgMD7mtRu/xsx9SbxUMZsN5ss5b/3ab/Ppez/EC1d0Gx0WQYAk6gSLAEsTcd0Fexu38YMVo2FCmeXce3iXVXjO3PcwtT5+7OL7Obs71xnlAm7uMnvs8vD2W7w8f0I4gdFwQa/ZripXVxnDdE7WyplMz9ns7qC3G0TeCXLRxxQrZE8eekQF5NkSKelTBCqL4AWZ1+D7v/07vHj+ki8f/Zz2eouXL19Qa8gswhM0MWFwUuONtx6y8qZ0Gg6a7hBMI+qNOrdufI0kzTlNPmUVrHj45l8iLUI+/eBTVFvn1uY1Tk5foKiQlx5baze59VqXQg6JPZOh+Ij1tW1GoxGa0SZPAgxdRMpsTidTanUTIUvoWW0uzk9p1WREKSXLDUbjFbpT4+vfucfhgYUglEhljX59i7WNJl988ZTxeZ3f+P5b/NN/9qesrenoisq1vZuQv0eBga52WS6X9NdtZtOqpOHm3lv8xrfX+OlP/gRvlmPWIzpFj1vX11nOAhq1NnGSczKc8N3vv8Xx2Us223cZTWasd1UkdUo47RD7Me2NNmvtNT744CP6zW1ywWNwPCdORFbLlPF4QufeA9799iZPv3rx5y8odVkinEvYukS9XUPSDSLXp2l22d8x0YwOBwePyCKJXu8Go+kx/a06qqrhuR5BDm6QYjXrTMce+Sqn0HW8eclWf5OMmB/98EtqnQCBJZ02dLsO1272cacJg9GYO3eahH7MvZtvcz78gjzsshiXFEkbQRCYjVz6zTtMFyOaHZvFLKJWtzg7f4moyLhuTFmoJHhkkYwiN8mLjDj1kYqMyeCA9d46iyDCUDXa9QYNu8/o+DNEsyRNZoiaROTmGLKKoipsm+ugG3jjI8J0RaffZLJcMGWB3txBtiNWfolQ1gndAdubO5yfvSDyltSsPr6Y0tAFttUG7szn+t4OL09mpN4U3drAL0LSwKMMl1h1A61hMxjOScuQ9fUNRpMZw9EYoyzZbLcYDhaURkxGm3orZTH3qVs2jtlmtpyQESLbKkkaYtcbzOYlg4uYJJyiam2MApq2xYKYwA+o2xqlIvDO17d49tkZ8+UC0XIoSgGp4ZOfRCjoeJM5ByuJtbUGcRzwxoO3GB4M+fL0S6gpBO4C2zZJ0wwBm/OTc7791rv4ywWvv9Pg8OUYUbUJFwmHkwPaGwKr2RBBlkiXS4SjDnmkIMsp9ZpOUehYusV4fMKz5ZD2WpMsVShKm1rd4vT4lAe7bzEcD1hlZ5jKNrrj8tGHX3LN3MKx6wzdKa+9ts+jxwfYTsyt17YJvAmKdo1rNzs8ef6UshBZDr5Ab3QR0pS9B/cJ5ofUYpMkWHBxUbCxtc5g8JySjPW1PSSloCw80jCl2egwm05Y3+jiBwmN+jpOzcC0IU1AQkAWSwznBl99ccINv34ZPqj4e2EYoygNAr+g1VRpteuEyZJWq4W3ChlPTylJUMQqfKOoAl64wjQcDLtDGEfMlsfUbJssVVAljWCVISCT5T66bFGv2aRZiO+vKm+ebbBwR8iShoiK685BKGi1WtW0z9QpBBAFGc/zkGTQTYM8LTB0+XJaWKDIAqYlAzJJXKCaMjXbgUsUUBJneGFAmhVEsUe7Ua/8lKVAkmckcYypW1X4KA8RJZkgKrDrbV5/uE+cBCSJQ7fbRVX1qtJwsWQ0nLHyQlx3RRBlOJpFTkKWpPh+1VMdRQlFkV2FcAzDIEuLq3S3ZhokYUQUR+iGQZYnlw00v8qhTJKENKlS27ZtIwoCWZ6jCxVCSZYk+r0eQRAQeCFxnKAZ1TRW1/XKHpGk9Na6hGFIlIRoqkq9XieKoitM0itwe5IkSEq1pq7ZDmnuIagiWZiiSFVaHLiayr7yqwKYpolpmIhCiSJrzOcrzs8mPHtyTJYnWFYVKmrUTTY2uzx47SadToeiKDh8ccJ4POXLLz8iSxQ8r/LJdjodWm2HvWvr/Obv/BqNpkkUJRweHjGbrljMfZ48PeTzzzOiKEHXdXQz5/f/4h8gy1IFABcENF0lK1KCKEUQJC4txBUg6DLpre5fx/mNX/+lcMwLyq89xLYaeN6SIAiJovDyQkmmLHPqjSZJElJvmECBKAm48xjPCyiygsALWUw9hNIkjVX+6B/+CUUp87f/1t+ke/0a+otDSiD/h3/EH8YrGjUbXVYZHo4Ybp5S2zBw4xssxi0e7tlw+gKyAlEEs2Zy7c3baL3KK/fy9AJJVJFlnevX7uCHI7JcpiiWZJnI7t4NHn31BZIdcXbmUTMb6GqTWBuhaybHLy5w6k2yrKzeS8mc0bCkZq9hmU3arXWWyyl5nuLHCZPxnPXtHf75P/1DigLWemsIoszuzj7LWYpjDJDEEtXoIQshYhzT7En0u2v4Xoys1EgzH0mVEEqbW7fWkVSfaDpCklU2tu4g6AFno3P29+8ymQts3OjgDhIMrU44ntDb2qpasOSS6XTCfOwjF8coakSRaehWE3c2p0wNkugZithn69oGUl/jX/3pv+D7v/VNXhzJHD/PabRXdPu7rLPO88Ov6DZruLNnbKzdxJ3lvHZ3mxNpxNfe/AZLf8BPf/yEb/3GNX760wlxPOfjD4/49vde5+T8jMX8DF3t8d3v3+SP/9t/QE3ZZbU8ZRm49G6rhIsNblzvcXwwxhBrTPMvEcs+y9UUW1eoOTvErNDbCo3SYjnNaHd1/KAkCOcIiJycnCArAqpi02w2GU0H+H7O9Vv3sbQa46mHbjts7TdZzVc8P3yJYnQZDY6qn/9AJM090nJFicTxySGtlslvfv8P+PFPPkbTTbIsYDL3SbMRRyc273zzOp8++RxRlmg31pkvBszHEe1Oi6efD9jdc5Ayh7OjKXEQcffOFkUe0mz1UGyV6Tzi7vYd3v3ab9HrW/y9v/9f0m5u/vkLyqyU8UNoWhZIU7Iyw3bqLKMB2VLCnQ1R9BDd0YljnzBdoicG44nLxkYD4oSln1OwwmoUXLt7A3++YjA/RnZq1Bs9tq8b6KbK0fGEs/GXuMsu3a9vUMgBe3sPGM0OkfIms9kMSVDZ3Wvg+wEsS1arKXZTRhY11jZqHL6YsXu9gf9SoN3pM5m65KVLlgkoUgtJLnjtjTscHL5As3xsYQOklCJXMEybsgxwHInAHbOz3mXk+/jzkN5ekzQo8BcKYRmzvW5weOGiaDFrrSZLf8Xm+g5h5NJrGEyGE77xxnWePDnh3s0bnD4+Zv81E0XJkbMSx9Bot2y+fH/BzXs7HJ8fU6LT6qrM/HMyOshFjVrHRNNkpicTtjb3mY6nFFFITVVwem2SRYo790gTgVwAUY5IhQQxK3j44BqlUCd7kTNxA06P5+xd72PZKqqcsXJdrLZOsiooURn5S5rNOlHhUyBy9OiY/f1vcnL6lE57jVBxccQ2cy+g391HMQr8wEPUq+mSTMZqOiUuSmIhRY1FSDPC1GNt+xqraMDelkWyXPDmw9t88PmnzFdjNta2aTgqx6dLTs/GWKZCsAIttakZNk+eXNBoW7RsEZGShbtAEwy2Nm+S5BESGXGxohRKRCFCFEKibEV7rUe08Hj4xts8eOO3+ejpB5xdPKfdVxmPXZBzag2FLJLI4ghvWdJrNZjPPDxvga6qfKOp0G2p/HRxiO9nJJMQc01jvWszmLpYNYvJZMHZ+YT+eg1BFMlLHU1X2N5tUURw9/ZNFqsFg+FLmukGaRqzttYlDevM53Mcx6IMwl+i7JXIaoagFBRZSRDq6JqFJJdARFn6kKu0mz3iYEySFYRxRlYWlTCxDIJkSS76KKJJuPQQTJAEE0WVMEyJNM7Jiggv9Gk3mnirEEWD0fiE/WsPKHKJOB1Rdzos3aoq0FsFZFlGvd7E1KqGniITCPxKMEilQL1RR1EkfH/FYrFAVRQKSgLPQxYloiIkjlPSrBKX9VrFppSECmOU5zm5ILBcVVOlOMlYLUMu0jHDwZxnT05pt5vUajXiaEUUVw1DSZIgCjKmaaLoBsPh+PLfRNKsQBBl5Ms1uKKY1Rq/SFkt/Qq/Y5kYkoF26XvUMgNV0yjKaj2fZ7/qOS9yqNVqVxPWVwGdV8GeV205ZVb5P23DJIgSNF0h8EIUSaXebeD7K0RBRrdUVEVhOp2i6/oVxuiVR1PTNES5vGReJhRSSZiE1Go22eWa3rJr1X1e+jHDMESRJHzPI4ki7IaGWMa0Oyb9tV0cx0EUZKbTOaen55ydjvj0k8coioZlWei6ytp6h063we7et7GdOkWZsVgseHHwksH4mIMXL/izPzWRRJVW22F7Z5P1jW3a7YwHr8v0+h2WyyXT6ZTzC5fpbEUQRJimhVSWxHFCGMWIovpLTVHCJY2yOrTbt67Wz8V77/Of/6W/yPCzzyrm8doWiiJdCvxKQC8WC6bT6SXUPURWFFRVxXYUev11JEmh2eiycEecXxzR7fbxPJc//KN/xIcfvM/3f+N77Gxvc3x0wHtpyHAwxTIdZNtnu3mNKLWIkzq1eo3r12+jHF1gWDZS6lGUBUWecXY84tHFmJIcTTXodZsMhidYdpPFcsX1vfuEocDFcIQgRfT62yzCUywrYTQcsXdtCyPTUCQbTW6gyCmR72HpbWq2zmKU8uzRIfs3tnjx/EvCoGrDWtvt0umoHJ0esNFz8CKR5XKOrJRM3GP8eZveWo6iiIwvMhoNnd66xWK+4ux8wvqmjesWtPsNliufLAfTLnj8+JSWsU5/q0m93mPqvcTqNRDEGpbSJVjEZLnAMDkjy31u7LzGe++9x2ICZRGglQphabBzp89wsCCLI+LcRyAn8gtcJaK+jFgtPdZ6bd5/72Ou7d2h1Wozn50xm/jkeATSkLpq8fGnL3DWt9netZB1g+/93m/yT/7+vwLZY+kvmI42+Po7XyMMUx682eWrr75gNkzprrd4482bPHlyQdPZp8hcRHEDVYbjoxFb6y2ODk65f/smebYky65RIlJvrJCiBqcnz4iFgJv7ryPlOWJesJhGyLoCQo4kGZydnZNlGbf273NycoIoSBi6Q164IAWMRwrrfZUXT79iOtJpdRbIok6r3eP4+JhGvYu7PEGRbPIyRlFLnj07w+9UWYz1zTrTiURRGAiyzcXkhA8/CwhDODs/osx1dEtmvnpOq32fGze38VcSt/fuEsRLvMDFceqkCTTaDuPFC+J4nTfv/T47W2t8+MkPSCKVVlP58xeUk/kIQY6YLh0sW6fZkQnCFFFWaNXXyIIFWWmiCh10S2e1PGYxD7AtjSjMcEcepCWabrCK5gzdUzTVZO9BxU86O/VAEHl5NGZtu0YYLVEtjSeHT5Fo0W1K5MoCd65xbd9iMhlTlCLT+Rir0SBIBAJXptHViFOV27d2KIUVTbvG2bEPSoBtmIzdGLNRveA/+dFntLsKoqwT5B5CqrHyZ8hKydZan+l0jOPUsc0m43BIf6NDmYs4dp2L069odmvMXI8gCHGVgnYJkuAQF0tUq+Dk/AiSBKnsEkVDcl/kwc13ibJzbNOgZ+1wPJvw+OkBDx7cRbFtnr/3Eb/77V/jZGwwT47x5zFWc4lSOCzmU7rtGkniU4oxBRJBktFstuh3bbpRwmh4RhhKFIJLHGbs7m7z4Rcfo9kOkmqj1gwaepvpeIKutmnZOoWdk8sSur1OEM0JiiWZXKJrFofHp1A2OZ0MWb+j400D6iZIwZJ4nJCur1D0OsdfXfAH3/s2Z+OQyeKUjw6fgCGx0WvTEGrEZsDp8RhR0FCkHoU8wWqnPH95wGA84p03+4xfJshbBi1LwKj1mK5crndMGo0Gx4czbuzdJ0oSylxntrjAtmVkwUFEotfaYTk7YXB0hqLqGDQ5PL6g0e/gujPIc1rOOgUpDX0CLYvrm28wHK64+bqEf67Q6dwgTpZcnE146/Vv0m71cOoi7sKnGY1JlwLtVpuoiCkbPqWyTqKKqC2NyCvIJYGj8+c4rXuUuYQX5MRJgKKEaEULTTbIkjNabYE0WmBoNcg0Lo4vuHHnLhkjpMmwwuNQJb0NXaPdrkGpcnBwQKvdIAgCTM1ELAU67TZlmVEWcbXazERKdCQZBoNqVTE4nrBSYjqdDkm2QFF0jMIhiCAvZTx/zt7uPpPRiEa9heePsWyVKF7irVIaTQtZqLyYr9poNFVluXArf7EgsFpOK+Gjaii6zPBiQK1mI8kCD+7fZ61vsrmxwWK+RNM0sjTFXS6JoogXL14wmfiX690WAhKZnZNllVczz3PyokpUt9X2JTInwDsZoCqLy6lmtTptNGqomgTSZchFLDAsGd9Lr4I9WVY12rzq4TZ0C10zq0S6LFHmEIUV1kiUJPKyEvSqopMJ2a/8XnzFvHzVrvMKbWRedn8bhoY7q7BAhq5SFAmyCLqiYukV7FyWZDLNQBASTMOmyBL6/T6SJOF5HsJlCKnZauG6VetVURRkRYbaVsnTDFkQGQ2HKLLCdDGn0WigaQaRH9Dp1fCWLppRrdDTsEpxLxchF2cvURQF09Rod+rcvHkT26ralI6OTnAXPllacnoy4vNPn1XTQUGi3Wmws7vBzs51Hr5pI8sSslw1EZ0cTzg5fsaTJ18RRSl5ViLJAq1Wk36/S6ujcf/edRzHvErZV7eXSPMKYF5eBXHKX/xV/mI6XHz8CT9bzpnMZlec01dd7aZeTYdNo4asSldfy/OSMIyIA5Vjf0AUh2xseFCqVyxXRVFIc49nB4959vw5ulLnzTd3KXI4OT1C11UMJaFTl1m4K5TCZLEYk7iguQlZGl1NVYsiQ9Z8ehtdTk4HFAU8PrxAV2oUzHCXAqPJgu2tN5jM/jVJlnB+eozRAEU02btuMR6f0nS2MPU2k9kZi6VPv9fFsjqcnC4xDI3bt28xGFygyDpaXWPlLZmOVhXoPkwJLB3LbjKcLSofr5Jj1ufEkY1Mjdcedrg4HzCeTVm6MUlco1fs4Mdn5OkK0zLxg4ijoxWG2SIjQM6bHH95TpgVNPUaag6ba5tY/Ral7/HD97+i5TQ5fvyCsjRobJjMzmMs20EoV7w8OGc08Ll56y57N7ZRNIHBxQJdNXj+7Jh6w2Dh1tjarKNoImnu4i4HHD4L2N1tI2Y99u89wNJUSsth51qLn/3p+2xf2+Pm/TWeH76gVt9nFZ/gHXe5sX+XTrdOfsvi3Dyjv2nx3s+fYNst3n7nG0zmn3NyeILn+Wz020hZn9Z6xNn4iLrZ58796zx/ccLoJGN9S+Fmf5uf/+gJ6obF+vp1nj47pGbscv3mBtPZkMiPSOKC3d2bmI7GaBLRaFReX13WkSQFQcqQqUOR0OoWqHrA4Nijt7FN6MPmWot6q+RH/+Z9HMfh7p3bDAcLzsZPaNbXEASROA7Z2OzwwftDBLHEmttsbW2RJRKz1RfoynX6rducnj/j2s4+uSZi1VIyV+T6epfpKAZBohQi8gwM2aLZThiNnuLYKq1mjzAM/vwFpWWqGKaOgMx46NNptjHlEkqD1SRnrbtDrd7i8y+fIEgRsihUb+ZSJkszhEKg12qwCgSE0mS+8DFtheXJBcNBREMUuPvGOo32Nqfn58iGxGQukisJWfkFgm9w+jxHkQd8/OnHNFsOuiaxvr3D5199SXtNxGzU6DQ7JFGT4XDA08fnLOYB29ub6MYGn3x8zM7WBlEUQ1GwvWMSxhHdvsNiHuMOV9QMm36vQ5lmyGWVXnzy4hn1hsXcX9Fr15m75zTaNTrtLssoQbUSHFkgXEZsdPsczc7IpRnEDepNk599/iG/9Zv3MaU+UiGB1sALBkT5BbtbXWS5xnIZk7lPadhNRpMxYmGTzqDeSkkTh1k4J1wV1Hd0lsGCnIxSlFB1GS+ckYpLxNQgTmPu3dnn2RNorjWwTIfBSMHRnSrQgUyaL2m1Hdx5hGYaLNwV9W4LTbbxgyGWCT1HZbnw+c2vvcXKN/nkvY9YvykSS3WCscjd+w3u2DXu3N7mxz845t3X3qbZ2WThnV3iD3QEJSaLcoZahJLn1NsdBFlARiaTHSZRROBN2L+3QZBm5HbMID6F1pJS0tlt3SbyPJZJDVXLERVQzCrwoMr1KikuxCTJgNH8hH6jTr/bxrFtdFEmDmLiLKbpOCSpyuNnn6DJFobY4c6b99DUDFUNCPM11q73OTp8yd61Lb71jW+wWJ6w3rGRNJWgE/EvH73k/o17TFY+nr9ElWX84ZTrN/fRgU8vPmV97TpJmnNycUKr1qv8g8GSVn0dTRDJCo881bAbDfxyhpgJmGqLejNg5Z5zfPaUX7OvUZZTEKrPUMu0mFws8MMVpi6jiAJiWRDHIbZlsnDH2IaDKOnkWUyjUSNOMkpSBFEn8gv69S3suoaslEiKzsKdIGsCICNKGVnpMR4dUrPXWHpDomSKIEiE0RJZlSjJiZL5JUcxJk1DDKNGS3dwXRdV1VjfbF4Cx0tmkwtUVcGxVfr9Ps1mHUmAi/MRqlqlzZvtBqZtkOcpG5s9xuOQpbtisfJYLpeUiCyXCyRVwTA0NL0SaEmWIgglmimhSBpQoBYi9uVULs0jNNmsEEJWk5XvXaa61Svv3au6wvgSS/QqaS0IAllSiUNJkkizyuOoyNJVX/h//zAM44rRaRgGRVExJC3LotvpEEUBN2/uo2sKhlG58gxNQxRFpvPF5Vo7rCbA3gpBEFhGGaooEsQB1uWa/VX7kW3bpElMegmpL4UCu2FXQrPp4DgOHaHixsVxDLKEIEs4rQZ9TSf0A4osotGsI0lSldhPc6Io4/xsxPNnx1BKODUTp2agaQprGw3uvX4NWa7YdYEnEPgxg4sR7mPvKkjVbreo1WxaHYPX37hPu91EEKtp6moZMhiMGA4GPH+WUqY2X3/319F1E6ms2rkkUSXNcoRq111dUQnlLwHGy1+pXNR1DdPUKS/X5oamXYrLgizLkSSBIIhIkl/UemqagmXrrG1VHs40ySmFLt+pfZPFYlGB4vWA+TQl9lPibMiXz0YIeZu/8R//x9Sa4E5nfPX45zSbTSb+GIoAz31JktokWUiRi0BJKQhkUsxkMcawTM5OB2g6GA2bZqeFH00Zz84ohADReMFoKlJka6iyys72Dh98+B6CIDCKhlzbs+j3u0SRQ6fdxV142PoajUaEqkk4tYqkkEYqsuriTieYtTpOGRHFOcv5AfVWm/nYxWk1INdZrkJG8VdEaYPxSMWoNXBaE6bzFaPFKapdMpnFpEUOasJi5WNYBbreIk5AFHJIJLqbLTRJ5PB4zNHTc14eXCCZJqIh4QegSX0GRwP6ZpetngGizvba62R5yNNnLzk9OiYMDe4/3ODZwVM2tmtMJkOiUYLrQxErlRhMBTRrgWprPP14wrCf46Uhmpby7IuCh+88pNNs8NXzLxDEHn/lr73LwbMB8/E5J2eP2b/1u6i6QFas+OTLn1Gz79PeCjkZfkjNbGEadUy9g2qpDM6PiAUL25KZhmOWhz6tbhc3SpDrOceHbiWgrYxckrj14CHd3gbjyRnjiwX1ukOr1WPprhCEKsg3Go1YLGbImkpdW8MLh7QcjbhckeYWp2cz6jWDLz//gqyMGY4sOt063e46vX6T6XSOJEPdanN2dkhSNFkuYj794JAHD67jTjWub++Qiwkrf8zZhYalSli2iWHvIGQ7vPlWm48++QJdNZkvlsiSRVaOKS/anB9lfP9771KriRy+mKEbDr6XMfcf/fkLylqrzcnRlGZLRTFTDg7HKKpEvSlyfesttrd3ef+Df4OiJ4hSjm6WlIWB78n4WY6qiYwXE2Sxj7+MaXbqCIVAHM+xVQvTyRkOQlSlSqlqcspstiJIdRazhJPDkFs3t3n44Nt88clzkrjgk88/Jit8ru/vYBht9GbBp+8fkiQLHFvk7Tff5vNPX3JxMqTRTfn+b77OfBHx/PlLLMtiedkYsJwkLJdTtta66JIDmcRkcsqNnR0OTs6qft+iRpAuiXMXWU/I0xqHLwZQy+g0FDRVoQgzpvNzGraNIlsodg3kkF/73df42U8PkGKXe28YiMKUvHAI5iqqarGcP8cvPNZMC6UQeXRxxvXePuvGTVJOURWF05cTNro3mLkJWSZXUybdRCgj0jwgDDS0EprdLm6wQFQEFE1GEHMUXULKdRbjAe1eF0VTWboe7jLg3ms3WcUhvhcTLS9I3QV6RyfyPVZhhNFsUW80OD6TyT2o1S2U9QmRPuPBmzf5+T/7BCtR+ff+8r/Lf/Xf/BNu329gte7wxVfPcTAoGyLL0KVutchKOHn6kjtv7jGeRth6E11KMFUJViZO0yULImRatOw2YpihGirTyZAoi7AMndViie+XKLJZQY0jj1ariVhaLOYB3c4Gp8cDaraNaeqMph7eMObBa9+jZuvEDIiTgovFkIZdwzTXGL08Zqk8ZWNvizSPee+DD9jc6LC7ucNw8gTHMrjxziarMOZGY5vVV6f4YY4uwuH5jJn3GKdtcXoyQUZH00tmsxF1q4VtVyGPKEvwJxNMq46AQuwX3Ll1jSLL6fbqBPGAb33rIckHk6veYEGA1XLG7o3rxFkleiRZwdBr5LnPdDagyEUkScYPVyiyTpLFaIZEmcvMph7dZpeGk+IGC5AUxmOPdrtFToKqiCyWQ2RFIy89wnhBUSaE0ZJuZ4OijBFFOD6e0Gz0yPOSutPA0ivgdrdb4WPCMETVVWSxwu3oqkoQBAzHY4qi4KuvviJP5V8koRWZWs0GocBQNVqtBqvAY7lc4fsheQGtVgtJVa6S3HmaIIpc1ijKRFGO4dhVh3aS4AU+qqxceiAzbLuGJGqIQkIYReR5fMVszPMcx3Eq8RHHl53iEkXJFT9TAMqoqn4siuKypca+4lq+OqIoumJ7pmkFHK/X60iScMmilKnXqxVxp9PBtm1UpbjkS2oEcUISZ9TrdZbLVQV6lzR8P2Q0nZD8Uhe7fFnz6AsFhVCgmkq1FifHbjqoil6loeMCd7VE1016vTXKMmc6GV2eY8zCLVjMhyiKwsbGBr2ug23rKKoIQsZwMGc+W3ByNkYSVQZDn8VihmkZ1OsOnZbN1vYmvX4dAFWTmc9cxuMpZxcvOD6TUSX1ClHVbjepNyws2+Lr33gLVc/Z3bqJLIuXbYolcRITxREIMleqURAugawgiL88taxuU9WLrghDH13XyS0LAENXUVTx8v1WoEh2FcrxsiqUmCWoKkiSiO3oaKZBZ61NyQYXFxdIpYK0n1ehDdFAUUVUxeDDj/8Nuumw2d5DkdvUOy3G7ogyFauL9bRAFBUguwwUSYzPIy5E6Pc77G00abRlwuKE0WSOpIZIpc3rD7fRbZsf/elH+ELG0csh9VqTshA5OT3n/v07SLLIaunRavZ4/vwFm5t9Dl+OWd9oc3Hq48UrVK0gE3yyQqHZarBKIuIwod7uk/sFgmCQlQsavYJ4KSLIOVbWR9ca6NaQNEsxrA384CmiPMYULXTTIUljoiji5v4+n3/+Bbvb+yiOjC7qLLMxC1/n8OBzVLmOWEvpdTIEVSfyBGr1Ogv3Al2p09ts88mjA2LX5Tt/86+xsZdx97UOX35xzmefn3F+OsVxbCRFJIpEKBM0UyEMDe7eeYuFe8Dx6RDNcfjdv3QPfzGh0apzMXhBFAY4LY2DJy/YvdHl5t2Sk7Nj2v06ktDFMTbwwgve+/kTeps61/feZLGaoCoOR89dtt5+gLpjkSQLjsfHmEadzfU1pDJlMh2R5j7HpwlOS8XzU2qtJooU8eGzT9m81kfXuhgNlcVsRRRmpImHKBYcvjzgwf23ME2dtHRpdTtMJiNW/ghBkHn05SegXCAqWyRBjZ5Zp95RGV2k+KsASV2RxjJFahPHC1qtNp31LRRdInIF7r2mMDwFd6hjmjA4H5IIAVtbW9y/+3UMO+VHP/w5bz58h9H4hB/98IStaw7uYoosqcynC67t77NYLPnWt+6g6cf8yb885dnTC5y6zflwgOn826El/38SlNPVHKstMVn4lCS0OjpppON6S2IKJvMR9eYOw+EYWY4ZjA4w7Rr1jsXzw0N0XWd3b5/FJMLSG+SRQA40Gh38IiTwdSaTIbbeRFUNbL1FY8dhMhkj5iPa5haG1OSzDz+GwuaLT84RZJd7d99gfBYzd39Kr9fAX04pchlFkFlIIddv7rHyfXZ213n5IqbeTdi5ZjMZgCALIBQUZYosS6iaxHQ2QLItMk3i8eEpmtmk0a5jmTIXqwvcQGCztUFQxqS5QhjJHD4dUOtvsrXW4Px0hpGuaKltgiCnu+Zw9mLG9Wt9bt+2ODw+wruwEMQUWRSZDCdYqkOr2+XJh1+ityNUeYPZdAhSwuAchHSGI6tMTl5y6+Zt5iuVMPawDRUvFEhLEUe3yPwIo2GwdEMUI8KPFCSxZH23TzTxqdl1VEmFVIK0QJZzFosZuqmQKiWSprPV3qPeazKaXrC/uY+KyBeHH2PumkipzN66imqLlGmb+dkCoezTuaXz5eFXbO60efr8K27ceo22plIIBbNoiZhCGQboisadO9dZDGMUMSfxRhh6h5eHjzGUDWRKmo6BokkMJudohUEuiAhFhudHxEnOcpUgiToZEVHiIkvgeR5ZHKBpCcHFGWkCahCiGyXucoqqt5HknFs3bvOj9z9lOguJ0jkiAomfsLZrcHB4gSLf4vjkgHZvm+PzFWIZkeYi55MJilDD7tqcXrxEKGp0OxaOlXFydMZuf4swVZmuLqi1JUpCbt24z4tn5/S6Du5iAqWCZdmohoooBKyv7RB6OYg+qiYxmsR8PnrMXta4YjEC5EWJpsuUgcLhyWNa7RqDiwnT6RzDlOh2uySpj6gXhGHAZD5jb3sHx6qRxAVetGS5mqHpOppkoGnVVEpWRNz5gCSN2NnpcXF6grs4YXd3l6KAxXyK5/uYps3Kc6nVbfZ295mPl4ynlViZTsfols75+TlJEtHvr9Nut1kslrSaHXTdYDieVQLOtirRZ6qVKAoDTNNk6i44OHpJvVG12hQ5ZCXM3EUlCJKYMA6wLQNRqCpPswRs27nkUkpIkoK3iJHrBllcIYU8b1C13FxyOV8hgnRdJ0mSyvd5iUGqgO8pcVStdopfAqIbhkFBThwmiIKA7/0q5FdWFBzHubqPLMvQtQrTMx6PEQQBdzZnY2ODOLqoahbTikepKAq1WgPf9zk9vcA0TeCy1lX/RSe0oiisVlVgShJFTL1Gq6HjLZesJj5FUSIpMsvER5ZVDEVgc32Dle9dVlbm9Pt9FFG45BFWU0PfX7H0lzw/vMBdhKiSBqWMVdcxDI2bN/fprXUZDofk+TpxljObLjg+mzGaVoD4LE8wDA1JEqjX6+xeb1KWwpXQz5KU4WTI+bB6rYoCLMfk+79e53vflRAFEUEUMQy9miZfishXXsny1R8lV405AOKbD/lGWTAYDS/DShmr1ai64BC55I/m1Gq1CijvNC4h+zKSUU1B0yRhPg9xZy4XcFUh2usLSLlNtMxQ2xPms4x2e592u0sQn/PV4YDp8oTnw48oYoF2q4dl60znU0RBRxCqVHqW5eQo9Hc7xFHA0fEcxxXR9QJFMvHdKWU+5U/+n+9x7/4NbGOHta5Jd9Hk80+fc/vuLhtbLSbDhDAsEcQMz1/i+yuGQ5n5Ykynt0YSFaSJhG4JGE6OYsn47or9/Ts8fZSiKjGyLTCbD6nV60wnKVm8pMwT0lCk4ViIkoNESCHktNsGq6XIyhsiqzl5npJGEkcHMxRZ4qsXPycU9winIttrPZ4dvKDb2+HZ8yfYpUm72cQPIjRbx2qIGD5kKwHfdTENjeXc54/+uz/mt3/rW2TFmO2NPr/7e7/GH/3xn3E6PCaJZTr119m/Y/Lzn31M066xvtHCCw65eeMOq+mE5aDk177xNp8/+hhL3eVbb1/n8PEhYpajly2++c4+ByenXJwtULG5//VNfvr+n3D9xn2+fPQRSSLQW68RhzEbvS7Ds1MsK2d4GnJ953UEEjQZFpOMtrXLwclTFFNlVZb4vsLNmzqm2eTsPMKq6ZwfH/Ly2RO2+jtIksKN69c4HxxyY3+Ho6NDtre3ibLwkrF7yMULka+99S388zsYxgZzX+Ba7y6GeoHn1en2fVS5w/n5MWWZMJ+NyHOF4fCcs9mAre5dWh2Pzz95wXe/+z1kpeQf/eE/Jk8E3vnOOzx7dsDtu5uMRyG7Ww9o1Ls4jZz33/+SNG4ilRavv3abH/7oPR5/Pqa/VquatrKI0fiIehu+/OIz9m8+QFZ+NYj45yIoKVPKQmVjo8n52ZAiywi8Aaah8fzJJzRadWq1PQaTE27e7HPdvMvh8RFiOWd7b4fZaI4mmhTpBE0VCPwcTW8wHngoWokgFxVOoygpRZezFyHNVsp6Z5Nez4ZI5Od/9iE7uxtsbTbY2arxxedjPly+h6522d03OX2xYjL06W8qjM4dCpaIUsbt165D0UAzAgQxwrBM6g0Bp64yWwwpRQnLWuPzLw/pbtZJywWu77PdWqOUMs6nA5SpTM1eJ84njC4myIWB0zCx0xJT3kEtMoLxEk1LkYU6ilxSSDH+ysOsd1FEk48/OGJjp0oSB9kUqxaTRwWUG6xOhtTqAqNQRfLG1M0Goa5SkxXiNEJU1tBbIYqi4M5CJDUm8lyICyIvorYeoSsaoeeSJ2G1ekMA0SfwHRqGjG7UqNV0Lk6n1GyNEg8py1GFgpoMuR+iiRJ1xyabiWw3mhwcPcb1Tri99QbRyidMz2jU3+b80ynxYsx6v8bFfIn21Rn737zOINxitYxodtZ4OT5ku95ByBugQ1SeEgsZs3SBrubYepN5uKTQ1pmEEa2wTtkVCKIZp5MpN65dIxm7uO4Uw+4zm02wnSbuIkBRJGpOA9/zCIOChqkTZTLN1jqDiwO86TmOdQdJ0ljMJzw+eJ8kmLPV2yWOc7I8IPENJFnn+ctP2d98wHgwRhZTVF3k6dFTAm+OrPRZ5QIWCReHI+L4gpa1Segv0DULUdKIooR+26Zdu0aSh5xfzDk/f8r6Rh0/mBH6Dvs3N1h6Q87Pz6lbTRxT5Hj0Je1ODSm0EYUat273KT85ukwSX3YJlwKD4SFFrtFuOlwMRth2k7ws8PwFgihTlirz+QBJkLEsC88LkGSR0fSYRmsdRe2jyAVioSDKc3S9RuAnyJJOt7mJt5hXjTS2TpxErJYBhZkjSgJlKbC21kOSYg6PvqLbXGNnr89kPCNJVwSLOVmxohRyosTl4MWYbrfPbD6gXm/TbjcIw4i8TBClgiAOmC9dGq0mSCJxlpMjUAgQxtU0rt3uEqdV3aFpmoShT55Wq/IiTy/ZklytMvM8x6mrhNGSKPBRNRlREsnzGFkRL8WFQFEIhGF45Xus+ssV8qRaZUuSRBT66LqJJlcd5FmWkJfVlDQIgivR9+oQBIEwCK6Ym/HlxPOXAellIXB6MsCyLFRVI7nkSJZBzmBwiiBUHMvFYophGCRpQJjEKGrlT/U8D8dxcGybshDQlRzLkPnGm++Spxnz6ZyLwYgkyTg7O8P1RKbTGWmRY1lmRQRwl5dCKyPwVjSbTa7duP6LQJEXUZYCh88POR+eM59PmbsSC9cHSaTVbuDPp2imTLuzThjEV4D5VwJ9MFpQbzhEl80aoigjyyqtTveyu7wy97veiihKybIKmcSlTUAQJMpSuJxPVutt4Zef58ePKS5Ftvjuu/yaIvOvf/hvGAwG5HmJLEoIYmVVMAydkioQlWUZs9kEVdWxrRqKb1b1orqKKGd0Og2cmgllXhENspyT80d861sPOTn/krOX52xupIxGj7EaIs2mg6xuIIowmZ4RlDPC0KJtmCRJQMmrWsiSkhhRcsnLCEvTiFZ+lfRXBPK4hW5N0TWHf/2vfkIhxGiGw71bN7l2vU/NaXN84vLm2/vMxgknxz61hgulxHgQ0+22ODx6dAl/VzGdHnN3iqDI+InP4PwISa+zmM8IUoHIixBkAUXQQVCQJYlcDnh6+DkCKk5TZDrOkVWLVsMkSZsk+RCzbvL80Yy2LVKEGjsNBUVMUJod6l0DfZ4SRyK762uUSUld6VKmPo6j0mq1cKcBkpwRhgJOX2a2qHFw8gXzP5xw904HW79gMBixt2shqU1++vPH7F+r0e3s02g+RlRO+clPHrO2bhEGLuvrN/DymA8+/RDHUDDXGoTlBUXpUioC89EJfjTibLzCMJuIRsiPfvRDoqDL+npKo2mgKBL99RbPHz+n11xDlWp4wTnNhs3gZIJulej6BpIjMxif0Ort0mxajIZTymzJ8eEZDWuHb771HcLkgP3NDZ4HU24/uMX03Ofk7DkICSCytt5kOh1j1RzCaIqm3eTrb6xx+GzI9tYNjk8/Zu7OMM1D1rs7zBYjwsjDqcloZkS6ytjYWOP9D35Gu6szGGW0nAHuPObe/Rss/Bc8+XLG7/+Vv8DJ8RMWiwXD0YAg8Gh3GpydTWj3GizcFa36dUwTiBr4y5CaI9HrNqg1LObTnHe/9gaiavIv//lH7F3boCSm1mj/+QtKcakiGiLkGc26zWI6pKZ3KMuqt3bpzljrX0NVVYJwSt3ukmUFdTrIAtQ31vHcCZ7noxoSmVQSBSOKMsaw1ojCFYUgVkiMxCFaeAyKMaVVUqYSgbeic30TL1P48MvHrLVk+q0aptZj6a8Yn4vUbZOt9jqHx2OWYYR/MadMV0TBkP071xGVktlEoMgl6t2E4YUHmOgqbPUtdG2TVBTQyxKn6TCLV5SqjCpqqKEO0hw5kHBXEf01ByGVyImR6rCYhSAU6KqEtzrCEq4R+RG6qjKcznCfnvLWu3c5v3CZuXNsxyFeNNAkkcUooVYXmA6XxK5Crd9iPvTRHAdHXuHUGsyiFaJmMlwsyaWQvFSZpyuavQZZHjGbBOhGjm0aTBYp/V6HcLBArbeZzgfYvU1yKWQ+8SHJEGtNBDlhMjnBdhycVo2xN8Vxenzx0WeoZkx8+phMSlhbs0mlKbIjkng6//z/8QMaTYvvv3sPdybwO+/8Fn/yJz/gk59/Sk3LuH3rOp99/oLttTXu3b9JWag8+vAxlt5gXpywvmXQdNYQixJhkfLdh+/w6Qc/YeKPiE4amN063RboyMz1AClWiCJQNYM8LRGlElG1KOWc+TKkZtRZ5BHrnU3CmYsuaMSWxWC5QlE0FFsiK5Z8/OLn2EOdPFzScHqE/kvu3L3BfNDn/OyMPElRLY2DoxO8LEBxbE6fn3Pr2iYiIl48oSY08FfH2K0OYtrixjWFyfSCJDTxypjJcolQNqmrDjXHZjQ7pVTmnJyPkQWrClOUOjO/RLRahKWJbcqohUmS5wyH46vOYkpALJhOAsJwyt72dXLfpJAEWvYaNa2PmGe0bB1R2KEUPFRNwPciBuc513YfUKubjEYDEHLisETMZbJ4iWPWQFBYeCPiOMZ2DDSxhRdNaNo6/lJAlATyMmAWVFMuUQQKA00OkWQYzyY0GjUCf8RoNuDoROLOrYe8ePG88tT12hR5iYrMZD6h1Wpx8PywQgwVAePZnNXKJQxDJrMTut0u9abNcjXD0OvkmUAp/mK6iFBQZAUZMbpeksQlaVqgqDllUkCaoys6lmGRlVXLjKJopGlOnKVQ5CiyTJ5lqIrEalV5FlVJrmwtAmiGTppWt42zlDKtwja6ZlKqJZfEmqsjTdMreDxU08Q0Sa7W66+S2U7Nuqq71BUFUSorWLp2yV2kxFCrkI4gSxiSdZVGbzYa6LqObeiYpomhy9RsizgOubG/y/Ub6/S738WqGYzHYy7OJ6RJznzmcX42ZjpbMp3GLMOYooAsV4mSgNPzT8iylLX1HpIk4DgOvY0+vZ0+S7fyRo6nM0RBxg8iEBQUWSZJU2RVunxdBGQkZNW4Eu/NVq+aNl9OgDW7Esau6yJJEk6txt179648pVAxQwVBQSSnLITLTXdZTTXJocxInj5n+YMf0PoLfwFRFNn7P/1fuHP3Hmfn51fPbZZlCGJOkvpoukK706q4ooVQiVehQJQygmhKGIuYusXF6QVrvT6CVFAIIkcHz3j85ClRlNBsN+j0GwwmJxiWydHFkF7LYDJb4jgO9WYPWVCRlJA4HIPg/OIzUxLJC3CXEZIkYDdFmo19yqQSm61ukw8+mKNrNt/93us8efIESRSJ0wRvmaFIC5bzkk8+ekSSrZBEA7ncQCLEcQy6aw6r4Evq9U2iZMJkvCQIC2QjpywLjs8mOI6DoFWvUavZxNQ0vHhFHCXs7m1x8HJGXOY0WyaaWWe+fMkyymk1KotHmnZodRqsdkRG0wV37nTw1gKWxwpbUg3b2CHMPqVvhkSugd2shKkbFXS2OxzOT5iy5Duv73H4xQhRcOj3Emo1mxdPD3jyKESzwGz6bCy75MGSntPi5GRKb3PIGw/e5ac/+lPE7IJSVBEji689fI3x4gs+PvqMk7MO3+nuonh91ELh7naD/nqP+Sigua7z8NuvIUglRRaQJyapfMyLr44xOho/+sEXhEFG802T+ewc1Yg4uzhDLBUODkK+9Q2Ni4uS1x8+5OxojNnU2ZBsnLFMICvUugovnn5JfVPjsycHdNsdzk9dkuUUSgU3qNA8m2vX+Nqb93l88D6G2mNzc4s48JgczXH2LvjOd7/HZ1/9gOdPP8UdBqxtdvDDEDHWWazOKJMa89kUjTpb/TvYxpR40aDegfFsjiSVGBZ88tEFt269jVk/ZDoLmMwmTGdLbt26BaWIUNQpyxEnL0Te+drriOWMTr/DYHCK2bjHvQdb/PBH72M6Nv+Df+f3+dmH/4Tz0QlG/f8PYPPSMJDkFLkwmY7PuPl6B3/pkPoOy/k59bbO8ckz2m2BLCv56otj2l2N+ewCb6Wwua6T5BmyWVCqGqP5hJrToabbrPwBWZGjKS0UdcVqmqMZCkJhEc9j4mRBqa4zu5gh5hGJnxNJaziOgeuumI49rt+3CcIS2chortt4J1OEwkLQctLCZDkHWVZQDZ/xeIysbKEIDrKa4wcrTs5T1nZ2CGKR1BNIyykNUyBME9Z7bfxRQFyadNYaKOtwcvoCuRTJM4lcKxHSnDwTydIWURJz7p2iKyaSJCAKBqoq89XnX1GvdZicTtG2usRlSn2zw8nFl7y2/oDGeoe4CJHNDjBDNnNiT0dWDBwFVgsX27IpVY1EFpBNHXc6Y7Pewo1iotgni31qhkTsu9y/s8/cm9Krt0nSBeOhRktvEEUBp09O6G1Y1FoKSRpzejyl1XZY+RdYtkNapIS+RFJklMhMpuc07Ko/+tbt2xRLj8PHR0imxSef/Gu6uyp5sk3daYOQ0OrEKKLF488/Ymevg96NaLa65Kc+670exy+rq7HOZp96w2Vnr4vlCYTzhCjwiYKQYTQETaDb7TEeZtiaw3CwwKmbSIrMyfEBnfo6RSYhximz0QLdAtUAKWmTpRlhMKZZ6yMbGh3Dxp0csba2SZwKzBdzPnz/Kxq2RZQlxEmKJkmkmYycK2RJylqvS5oniIVIKUAupOS5gW32EEuVk5MJhq5jNRUeff45k8WY9U6HTND48sljoihivXcdL5zjWBKypHHw/DFrG+t0+32CyOfZCxdLhSSx2TEsILiCpaw8F2t7k2a7i7sM6K2bLD0XRTTZ2FrnyaNjCkei329xcrpgNp2zubWF78fM5iPcpYAfLxFLEUW2KakCEIIgEEYBlmWiqgqGqjOfjdEkg/l8xWpV1UY6tQY5EZPRnG63zdMnn3Hv3m1cd0qeFQwGETtbN6vJWx4TxnNUvWoWurg4Yz530Q2RUhB4fjAkjjOcmsV0NmS+GCFKOavVHFVawzQbxGFGzWkxX4wxTBNV0tF1kyQKEcQMRVVRZIMkroDiQiEiopGT4jgmSVwlmJMwqaabXjVxRFFJk4QiqdY3OaDIBuQFiqwRpUE1uYwTVLXyIuq6fumPVCjKS7GS/2pfi2FU0468oPq6IFxNKFVVJY7jK/j5qw7xsizJspxGo3ElOuM4rpqPLishZVkmjCIsy6K8xCHFcUqWLSkyhzBYIlLw8vAC2zQIIx/HsVlbW6PXb6BaIvv7N1C/rQIlBTlHx4ecDS744OdPq2BSJBPGAtPptIJx5yLHR+ekWYjTqFfoI1nCNCpvYpXiFghD/yop/6raUpYkHMe5ajF69bgURaHIIYrCK4/n9tYWX3/7bQzdqJ7Eg4OKTytAiUBR5giCeNlaVE2Hy7y4/Jn4xfMvAKZpoOoaul6J0yAIEEUZ09RZLhcMBjPKvHqdZFlG1WQ0VUY2q1YnsSzQlT5ZllAUOZ4/JxUTbr+xyWw6IooKOu0uhRggFKCKNUbnU5y6wGI2wjRNmg2H0I/YVHsIRJdhIsjSElUxSJKAWq2GKtZwXZ/tjTq9tT6PHj3BMDR8f8Wz549oth3iOKTZbKKqK/xVjOVkREmEqmjIosJsNmNtY43x9CV+sIEkqchKSt1oUiQG165t4IYTDGONwcWQNI2IogpXFYcxjmMzv5jRbm4xn7iksXcZIBQJ/AXtVg9vlRFHGd2OhK6YjN0Dtu+GPKi1ef6Rx8IN6TgGhekznb1AQWOJi1jqoGScnUwQbZOzwRmhN6EMZT7/Yki30SGTY2yzSyhlbL17h9nwBU8/lXn4NiyyJcOZy0anzf3118hZMF/mqHbVVtZr3OTJwZecnU44eHmGJd7jf/o/+/dp123yOOKv/M5vEvhzMC0c8yaIJVlywtPPp5yfnjE8P+DRox8yl1R2yze4de86X376hJXr4tgWJ4MFoi4g5wbt7QZJoXG++oD4xzMKJUW8d4fRZ3MKKUCUVNrdb3J4/AOe/8Tl1q07+PmCwfiYs9mYTrPF8YnL3nWLk+EFBU1eu/dt3n//gNPzM4o84u1v3qdMZdbW63zwocnbb/0OfrDEMGQyQeejT37K/t4+g4sZiT+h0VF59uQljbZCd22AN9sml0pm45Rvfus7HL78gOnsHN2p0e4KCJKFY1lMxhPm8znf+NYb/PTHM7avbXAxG2K365xdzFj6Cf7TR8R+hu9HfPbo5+jSNt/83mtIwhMIf7XM4c9FUFqqjCCp+H5AFolkXoaUpqwCkQyf+cTgtbcapPmSi+MSITOZDCeoWo0kXeH7OUXSRpULljOflrqOqkQkxRTFcNAEmSyJWMxLZLUgzWNib4nV6BMEOnn2kkZ9nX7/DqIi4ocej46PqJka9esNTi7G6KbJ4mLMahGg6CuEMkbI+3R7DcpUZjg+JPJS7JpEHLsEgUgcZ9RqFmkhcDR4SejNaJsbxEGJ5RhsrfcZXiywLInB0RRTLxmPPIpY4/odlXarQFB0JvMAuxXy8vmU0xcmirGkSI1KUMouZW4jyDLT+QpFM5ktPPrdBkvPZ2dvkyefnGDUZBq6jZglzOczcjdFk2wwdcLAI/Z9at0OUlkyWC6IspxerUHsBZSyiCoZ6BaEXowoFEwXI5IiIckzQj+rJhjTY2RZwWwoRElOKSsUQkCJjOcvmE7mdNdUavUNlqsJumpSpjKoFigRNVFDjOHJdMVr9+6gSCnnK5e21cSNX6LVLD788ATdKrAbEZGR8tHLz7i+9zoLT0LTW7junE6jz+BigiDPOR3mSFiohoYglpU/UHeI05wsKMhcUFQD151gWiqev0I3ROpWm0a9jr9aoYgiURoSBCJe4NFp62iagCgaJGlJcLFClGc4To3zySliqSCgIhkJidjk/Og5ummTZhJFXjXOLBYzcjHElHT6cpeikFlFS/rdHVZ+ShJNyTPI3JALqeo5vrnXJY1zVqGI4bQxzAShzNC0OqZVx9FaLJYzpu4pglrSarXZ3d7BX45RNJ28KCkuwweCICApKn4QYtgSil6hZXSjxLJlgiCiXmvTaOgE3pIsKmnXexVeqrdGGGREaeUVtGs1BFRCLyYvIFytqNfreGFVCxhKPqqso+oq1/d3WNu4xsXFGUkeIIoW7ZZP5OXc2L8DQo5jdUnSkI2NNcaDgLKQqNt1SlEk8BPSIiMvIkpihsM5gpowny0x9DrSIiUKY0QhpyxSBsNz3n74gPOLE1rNLmHsoRkV/qTdqlpnKEpkscAwFeIwR5REsizAdX2azV+kidMspqQSFKahUOqVqMvTHEOpJnN5niNICqahXwZwCmRBRFYUQLwK7qiqimFoV4KwXq+T57/6y1UQBKIkJs/KK89jWVSA9CiKfiEyJQnTNK/A6K9qHKvQUXmFvEnTFNu2r/BGV4h7QSDOUtp2E93UqDs1oBKxSRSg6hqu6/Lip+9RZvJVin17Z7OyEXRbaJqCqsp84xvv0Gg0OD+/IEkyvFVQNQ4FIa12gySpUvLLyMNUKgRPhWryUS5ZjppW3Z9pmji2zfHxMQCNRgNJkBBFGSiukvWCIFRrZk0jz4rLJigB9flzssuE/SXJvBKQV3FuofLOFjnq/j613/z+1fcsnx/wOK/qMsMwvKzwFBGo+t3b7T7d7vpVB3yep/j+ClITVRU5P74gjldIYk5/rU0Ue8hyRGPNwQsuWNsyMESdrY01xuMhg9EQo2biRQuEuka/2yFOwirgpIKiGQji5XugBFEU0HWTIo/xVyWJnDKenCGjMJ+fkpcCrZ5zdf4ZIbohcX5+jmmatFs9wqTk6HiFKquYdh/DVinxqTdrLJdztne6nJ9N6ff7OC2dMitJVhJFlJDFQG5gmCWaZmCo66haTq9fZzZ2adQ1mnYTUUxZTVPMmshyVvCNb7zLwD3En8PD23epL0pm5TMKaUVZKtze7PDo0SGNG99DkFOanRoXFwvSxYju7h3srOSLwyFvvH4XNV+x3V5jGUVkWkzNslmGMw6eTdi9t8G16w+oG4fo6pKsLHFaGooFlqKwsXWDnz39CcO5z+995xvE2QskVcG0VCLX5D/4D/5HbG7rpOGS8cUp/aaFYwl8+dnnnM7/mE8/e8x0kKLoMpksoOnww48/5NGJz+/9xg6//hct8uII12+xdWOdpb9GoyHx4vSMxfSMZavB7tprzE9HKIqNMPY5W81ot3Tqis5Hn/yYkR8QkPLi9JhITIjFECtrkhHT0XKeff6U7Z2v4a5O+OP/9kPMmoOWGLRaMidnL7m5f4cf/fgDoiRkOPR5+LV9Hn1+TJE0uX3zIZPRKQImnb5KUWQkuYskNBgcCyhSTGdLYzFJSWOFte49Tk6fEaQ6nU6HwXBF65rDyo+QJZXPPjvl5u07IIeMRlOKVYtC1DDskIuDIZ3W63z72/fIvB5C3ufk4hHpquB0dPLnLyj7vS0OHj3itQcOywuZxVik2S9YHsx54/7XOByMWbkBpydTirRGEgkUgs7mVo9CDFBMnSQYsdGt0Yx0Dg7GZIoIksYyShCEBVJukGUyqZiiKSrr11tIgsk8GtJu1JHNBsNpxGxyxlpL4f7OHtPljIV/RqF41BsWy4FFu91E1q4RRgmr1RB/7hBkFxi2jGNp1Op9RuM5ej1l5cdotooQh5ydeKy3e2TJBN3WGA08ZudTxssVu5t9NjfWqGsa7Q2Lm7fq5MU5RZzipwsMzWd3x+DoaQKsKAoFWYoYj0pafZ3YSxBUgclyht0w0RSZ08kcW9cIXJ/jUUSrtIiiGdu7JVES03TW2dy0GE1csjhBcwzG0Zz08oNIFySWoU+taVJDZTAYUGvUCISUOIuxagru1EUQS1QpRxFTNF2g0dSYBFOWy4KWtcEqSNH1DFVW6W2us1ykeNFzBBTCIKbX7qCkGqPpgKWislGX+Xr7BsnzJTNlRWrqzE4n3L67wfz4AinyULWc6fEM0+yQZinToymr5RmyBHkR06gZ5LmPmNfIM4l5vCSMPFTdwVQ3EEqJOPVpN+tM5yviYEGalYiCiG01yYuILA8YjoekUY6q5xiGxWrp47kpWhnSX69VcO04puE4jBdDZBWKRKnWt2rALEzBT1EVk7KQWS18ZL3ysZWIiALUNBuxFFFVFUmwCZIV0+mUfrdddUxTIEg16rbGdDzBrjkEeYBtG+iSQ7QI8ZMlrUaXVeyTqgWKqpEUBcu5D5mHpMn4YUqc/iJFXJYl7tIj6+lMJ0vaLQffTVgu4c03HuJ5HkV+QhpnvPHaW8gPVf7eP/hvaHdsojBEUTVUw2E+z5jNXdK4moolWVqFU/IMXddZrTwsy8bzPEoxxvXGtLotVsEYRZXRJYtCssjlFLGoMzieoFkBvV6Ps5MFYbTAcRx03WLpeXR7DYbjEc8OPgFRxtBrlFlJu9mg1WyjKApPJifYTp3RaIxuWDx+9hnbO5ss/ZjzsxG3br6GKFRr4yQJSNMSRzbI8hJJvkQKSQL1ukWSBBiGQVrEOI6FYWg4toHtmChihYtZrXzKsmQ+nQEQRjFRGlUd5LKMJled5DnZVTd3JfAq8LrneZRlXtU5/tJRBWUURKUku0T76KZJFEVVM81lE0/2CkGkKJfG/Jgsy3AcizzPEUX5SrS9qlh8db+LxYJ2u42maczcBUG4IAiXV8JOlAQ0TaMm1pBU6RdtQ0nCZDpFKARWnocoitVKXSxpNBrUW3Vs26besNAN+WplvHQjZos5iihddYbneY5lmiyXy6qFxzBYui5pkpBnVUr9FXw9SStMShQlGEZ1PrpuEscJZSkwmRzzwScf8Zvf/XXY30f+q3+V+uNnjGezKpAjClCU1Rr8Up2VRUH7P/qfIMuXLTnvvccf/ft/ncEf/0N0vZp8FgKXFwMZQZxhyQbLedVrbqgavX5VaCGVKc2WhaDIiEKdwfkZaRoxnkyQVYXx4rxie5YFekNkOprjLSM2N7YZTE+Q9QxJrLFahdTrFrIoghgQLzPKQgSKKwzVcDBE2rIRUBCEknanwXA6YG2tx3wxQ9W0KqiVyaQJBGmIrqsUuUheJAR+St3uslr5PH864Mb1XQTBRJZA10zcqc/O5hYHBy+xHY2iKAhcga2tHe7s93lx9ALHbjAaX9BslIhiA0XRqDUyBhc+NVvHNGXKRKHXk1guL/jy2acoisKvfeN75KGAJLaQow06tRvc/Is2YTiizGGrn5KqkBsyN7tvUcgRgehh1TbxMoHAH2JLNTw3QDbg8aNDtjdt3n7zO2j2ATVrh5ZVMp5NaN5yWCx04pWA0s158uSIX//uf8hPvvgp7Y5NvW0yGdaAE45envA//Gu/R28zww9HaKKKYkT8n/+L/4xwleKmc86GM95++1tkzlNES6AQTOy1Jm/97nfYPf+CpPgxnz/+Gr/1m/8hy/kR83MXyhxFvUnTCGjvm7x48kP2936dh1+7S7b8M44+fA9bajOerFO/BsIyYno2RbRAbjo8/ekBq3LBjeu3KMIONUNAUdcI4pz9mxajCxHEEEESULVNKCWePD0kisaIosJiesr5eZtGS8VdxjTsLtPJMRubXba37jMajXhw7yG7m01+/JOf83t/8A5/+I/+r/Tb95m5zzl9mdDuqsQ5IBR4yxJ3JJIlK3qdb9LZ8VjMJzhGh/F4ysUHX6E1FO5c22XWWLLynvHRT31q3RYNS2Nz91vcf0NF0lZ//oJyOn8CRY5j6bzzzgOGrkeaLrlz+zaT4QXdLZ+VV2BaDVRZ4SKcsNa36fUlDHudjz9Z0FtrcTQIcP0FckOj2exSFimRH7D0qrqxRkfn5UmMrolMLgLyfEWnYSLFIoU/IU5DSDy69bucHp6i2xYyTaxuRaBPihQkkShMiC7XXkkUEaQxuiVw/fqbjKanJGLIYhKh6ypeECDGGS07w1AFpuMMooAkyUCSkI2cxdLlG6+toxUhOgmzyeeYZoEkVlVoyULhz/5JzBefZnT6NUylh6yICGqIYRi48zGWWceyLAzdZjgckkbVFZupKty+vkuSe4ThBbIskgsQZAWdnV0+fPondIwuoZAQCQVxUfUSL6YznE6NUMyIJi66pOIvPJaTgEbTqViagoi7nFGrycxGcxqOja4pbNX2iWspSRDihwJ5mRJHKkod2usapycliihQ5AEX4wsKAzIpYbpMaDg9Dv0pmqHQXG8ynI3R1zSOpisWk5B+3yETVqRl8v9i7c9idVnz9E7oF/Mc3zyteY9n77PPkJmVmTW5ql2Uq2yMjbCFWtiAQNwgaEDigkYCNxeoW+obLhDiBpBotdXtato2bky7jfFQLldlVQ7nnDzTnoc1r28eYp6Di2/tdc7JTIu8cEhLe63Y7xfxxvu9Ee8T////eR6uJmOaLYesyJEUmSCIqUoNxXBo7vY5P52hyRpJUWDaLQSpYuVNcBwHxa5J6xjDltksRbqDPkHgsfE3lGVJHFQoSoxhqhSFzDqIkeWcdsfk1bMLkiRFtiKcRoMolzBMs9veAAEAAElEQVQ0B61UWK09SlNAcWwc3Wb2+hi3M0BVVTxvgimVrP01YiWglpCma6SegCZLnJ6vcFoKkpDjLTN00yIPU56/ecp79x9QZQ7rcINub/UJDbvFaDRiFSmE0ZowC5AlE8tuUCYFnhdR5wlOs4dhqQSRD6jXURowDRtZU+i2OhiaiGg6OMYQRXKZTU8YDHrIgsnL16/4le9+yM5unygK2Gw2VBSMdvdotzvEcUy73WY6WTIaDnn95jk7OyM2G4+6FuiP9lg//xg/kTncu8fnjz9BU1R0dYBlGEzPS3r9zpbwo+Xs7o2IoxJR1qjFmiioUQSLLI05v5himE1UTSBOfO7f/TZClTEeX6KIBlHkk+c5qiaRFiGKrqFJUFcxVqOF66q8fPkZo+EBQVSyXq+wLJs4qZEViSxJkWTI0hJdN2+Akq7r5FWJnOeAyWq5Ydjvo+smpmlDVdNtb1nIy/WK+XKF7/uUZY3ANjJWXbOTFUW5Tj8HN6nbsizJy2/KBqXJliT0NuIoXqe7t/Wb2yhllmVoN8Bh6xG+tXvcRj+jKMKyHDRt69GeJjm2Y92kjVVVRZK2NYu+75NlMog6s+tUta7I1zJEFkmSEIXZltyTZaiahShxc25TtkjjgiQrqJY+89kSRZUwTR1JuiYTmRptsUmz6TJfLTEMY9u3tKDXNQgjH1EU2dnZoSzLG8Z6dS2xVBRbLU/Hsa61SbfgVlW30WZdV/nDP/4jvvftX9mC0O9/D+PBfZQf/YTsWgcUvgKTZZHT+Jt/g9bv/d6N7WLxn/99/ouWS54WTGZTgiDg9r3b1w5IClVVsFwurxn8NWES8vLlAss2CJYBXzyZISs17aZNUQvM5hsWy5AwiWkOTQRVhRzSOOHszQntTpONHyEpIpposA58TNNmuV7R7+1TVhVp7l3LHnGd9hbY3TngspxQlDHzRUK73cW2TZIsxm00iOOYOE4BEd9fARCES4TCpv3QQVVM4nSJaRtoak0prXj9eo2qmLTaFrUgcnq85MP3foPbdzt4q4oyLxjPnnP86oSDwwOW3iWKpKLrNp7nMb6ssW2HRifj1tEIMpXBtw2ePfMZ7EacTXK+ff9dqHNOx8cMdg7wTwqmxz5fLL4AMeXw6AGziyWF5JKXBlIW0zqsuJxPcdwePUenFGXSyOK9994HKWDQ3hIA/8U//xH/3f/+X+bLj77g4nXGzm6Hl6/PMNQGv//bf57T4HPcA4mknHK0s8fujszuQYMis0AakKQhXnzJ4ycnBH7OfLriR3/6EYZe0Wrs8+5373H6D/8FceSjW/Dk8wt+7VffQ4jWpKsYSf8QS/co/Io3j0MiLtG0BnUVUK5rdkaHPP78c8ymy2Z9gn7Qotnb57t3NP7pT0750XmTi8mCZK5Qhxt6nUPSZcBRe8Cbs5g3z0/ZedjDmwdUkoyminzyowVZmqBIAuPZJVVhYFsuR0ctvnhyQrwxaDQNNv6aNAzYxBc48RF7hwc0jVs8eu8ei385Y7TXYT6bsn/Q5/jkCaOdFlVi8xf/0q/zox//Cc8ez9jb26EsBe7e7VKXGaP+LURy5uMF64WIUGc03QHuI4uz6RXnk0sqFAajPp9/+pxHjQ/54U/+MZYl0Ou4NO1d7v/Nf8OA0tV65I2Qj7485cH7txg1U+bTClGMaGoN0sxAFGMUXaSoV4xu1bh2yXw+BUTe/ZbO1anP5GJFs2MgVALkAoIQYVs1oa8z2NG4ulxAKpHHArbm0O/bJGlJUWakMTimQf+dBqsqJm/COjxBrhXC101qxUbWIqaLJQ/uDgk2NefjGL2ZIBclrrvD+fk5b17PSMWE/o6BKmhQbQiWCkm5QhZjBEUlSRQQJRRTxhZc8iDnJz+Yc2tk0+1uEEWLxVyizAMulyGLicraU9g9aBDFAUk9xpF32IRXCOoA3VGo8gJT1uloLQRbIJQiNMNAN2vKLEZRodFqkKc6VqtB4C34e//vf4ZtO+iuTVOTubg6p9lqEmwCqirHNnTGl2N2nBb+MscxJJANRFkjq0pqUaKSBLJQwzJkRFGmiCWW09XW+k2pcW0FxbSYTyO8zYxGv0SqDZIkptMYkcQlXKypNR2tTvEXE44e3kXWDeZnV0ymPvff2VqreeGaxdMVrbZNRUpaxWSrAEdt0LKPiBcXlEVFuq6ZBB5lIXI5n3FwNEDVTVbzBQgWflDgNERm6ysMXWW4MyQMa87PF2iqTMOV8VcxkqTjewneKqE/cgmzBLthMrzTRjN1qrxmPVljOWCaNtOZR7cnkgoReWrgNEy0/UPyWsDUdOpWm1xIkRQZcsjCaOsjv3+IKcvUA4Er/xUSQCFBLdEdDNlMQxbLDaP+PvFlTU1OHIVEkkIQLZANhzBYkmcBrnlAQ+1gdQQuL2YItYtpW1vQIX/N5qquMQwT29T5tV/7Vf7eH/xX7Iz6CGLJq9dPidKE5LxAUedolskPfvQvGe00mU4r9g53WK4mUBfcv3ufP/yjP6HbbuBYBuOLMXeObnFxeY6qGJiGTRyH+EHE7cMHrFYpmt4l3MzpdTWqvKTXb2JbHdpdC0mx+eSTVzQaHVQDiqqm0dRY+RfYDZk6zSmqEEkuMUyRN6c/pdfYubHAu3XnLifHFxiqw97OAV6wpshSfD9ks4rotVvMJlfYjT023gVe4JOXHndvv4/nzZkvxhzt36eulGv3k4xGy6UsarK0wFsGzOdrGo5NmmytC23bxtAUNEUlThPKWsRttBBEFVVWSKuC+XyJYzo3aeo8z3mbAq/rGlFSMFX9G8/Ft23ftqnrmiRJtqnwJEFRlJuoJHCTPtd1Fc/zbtLg4/GYXq+Hpmmk9RZkvgVhgiDc1Cz2ej0EZHzfoyy2hKGirpBUjTBJkRAxnG2pjWHoWy/wqqLMc2pKikJAlLbRyCSIsYxt3aljb+dekcdbq0ZVxbZbiIpMEERbz3ZxC5zf9vktW77ZbKIoCmmabssT4KaNLG/T75qmoihbRYI8S3jx6oQff/Ixv/vb/9Z1lPKv4T55ynxxHaUEqrpCANy/+Tfo/c/+p0jXxKfi7/wB/8vDPc4eP6bZbDLs96gHPYosv9brVGm1OsiyT5SEHO4fIIg1WRyjqTJvojfYlUktpcR5QFnmWLaB3ZIoNiVKbSHJ4IULRvu3aTR18tIjzELKyqIsZeyGTLPRIM8M/Gi9VVEQAcqvWOpsdU1bUgtFEem0aoIgJC+gFnLiJCBJApqdNrIgMRjus9ls0NUG8+mCqlKR5ALf33Dn7vskyRXz+Zx33nnA2eVTZFXHMgaoyowvPv+cs5M2s/klt2/voKjQ7bXRVAFNsimSFF1V2CwFDo56LP1z5Noiy0QGrRFJUNDvKJRahNFqc3SkQB1RSBsupxWu4WD2Yjrd99FsjdlsQmc0YLfb5tNPX9HsjTgcary5OOPpswXf+fBdnr045y/+5b+GUM348Z9+SZEpfPjwt+g3X5FHBatNxP7wLhkB/aTA1C3m42Nu3/kuRXrO8ekx94/e43L6Ck1W0XWdZq3RPNR58/wK2+pwcnqM1cow2+o2YNNoEOYW3/3Vv8TrN8+RDZd3f2UPP5HxNhcsqwlKCeNJxtFRgNmbEF6YXF3NuH//Lhf+v2Kv9fvcO3qHT6+uSNKYP/rRD3m0v0dULnn1wsVseqShgtE26ShDtFxnE5Zs8oT9vdsURcLs8pTYi9m5u8t6eUKwgocfHPLk2TnvPvoWJydnjK+mpEkbWbJoNFzSNGDjLYiClPUmxjM+JfVt7t7R+einCWmeMV8GbOYrGl2FKPUp0h5HdyX+4f/rn1DXAoZV8erlObeO7tPpGpS1x8mriFb3gtmlQLsvosgaWVHjI9Hpj0jyCaLf4OMvzuntuRTZGe8+cLicnOMF/i80dPjXbeIv2zBOCtodONzdQSxNFmsfxc3YvZWiaSs8zyPLEuJiSkGEF3tsVjkvPpVQyz1MyeRot81f/8u/w9DqcLd/j9nJCq1qM+wMuX1oM766QBIVKBXSNOfD39xlElwSCVfUgw1iO2P3YMDyas7szQwt1XDENtlGRJYzQi/EW6dkSY6/KZElkySfE4QJ79//AL3cY3x2we//1R32DlNWs4L55RKlVCkFuLP756jLIZqrYzkqo94eAjqWYtO2u2hGwcV4wclxm6cvbT7+KfzgBxWX5xpBFVFrK0opRdG2Dh5W28d2XWSzpCgFyloiiRKqouDWwSGqLOF5HmdXp7yOplwkPqGiMvbWeEmErIh0Oy1sy0BxTDwvoNfooSAThj7dQYs8iem7HVZeRLvXR9QUJE3mcnFFUqYohoHb6iGJOrUAaQzzWUi/7+K4IqP+iDyVGJ9OcQyFnd4O/pWCrubYmkbkp2RxQVTF3N+5S6exi8oAeWNz/PQSTTK52+8hxjqryw26qqDpIqvNhjRRaTb3CZIcSXeJyoBNtkEwCjJ5hp+ukCWddx8dIFc6q2VEEaXkWUUSFywnKwyjg7fOESqB2WQKYrYlSRTgmn0sw8U0NCRZ3RJP6hZUBrce9TDaIlEq0BuMqPKC2XiC7OSkYslev8tf/NYDFi8uuZxNWEyumE6uAJE0zUnikqwQ6e/v0To8IEwTnnz+lLqEotKRFJtGwyBMPYLcQ9E72I0+dqPB8KCLbpbsjtq4jQabOORyvNWiFGsbQ9e5vDzj5OSEKPJQNJlNMCNJEg4Pjq4BCggIW0HcPMfbxLT7Dk9ffMp0sSDOCwxbQnNknr0843xyBmKNpCrUYk3DbuCaHbKk4JOPf8T+aMCb4xeIIluySVUwHHZRVZmGY7FaztnfPWAymeD7Pr3uDrUASRaiaBbIBW5bZ7kO8PyS3rCDppvU6PSGHZIkI0xW5FVJXSss13NqAYpcAKEkqcIt4UwF3/fodnsoooa/iNBEm1ajiaaoFGlGEqXcuXMHf73i+M0LwnDDYj7mxYvPefXqc4o84GpyBnJElM7RTYnNZkGSBAhiTXfYpagrECW8IGQym3NxNeb18TlvTk6ZLRes1uutfmlRUF+nSlVVxrJtREkiu2Ypb92BMgzDuqnd+/qmqtu6QEHYpp3fRvPesr49zyMMtz7hURRdp9FTyrLEtrf+5YZh0G63CcNwSwLSt4Llb0GZIGwJQmEYkhcFSRoiSqDp21R7LVQURYYkCUiqhCTVQEUUbNP8kqJSFGCZLSTRQFREalFA0TUEaetfvlyumc+XLJdrqhI2G5/Ly8ut9aNQo+sqNSVVXVAXOWkUkiQRdV2SpjFpGqOqMrquYpk6kgh5lhCFPtL1sL2t69R1Fcdy+MM//kM839suRN//HtbDd1AV5RsalMqdO3T/nf/JzXgWf+cP+F8FG/4ff/cPttI7VUpRZqiKRLPh0L1mda9WC2pyotjn8y8+5vT4FUnq8fLlU5brMxStpNd3iaIAWZYZXy3Jc5GskPG8DfPVEkSJ88sZUaJQ1CayYmCaJm5zy+S+vLxkPlsiVDJpDEKlUZVfzY2yqJhOx4yvliSRRBpvGf9JPkGQEjabFUlWI4sOeSly/OaE6XRMFJY8eHifsixYrZb0h3ucXrwhKXOiJCOM57hOk7L08P0Jg/4QKFit5zQbXYIwZuNfW5JWMgIVbsPk5NUFhgaeN2bUH6CoFVUlYlgi924/IksDZMHElETOT8YIqFyc5Lx+MWcyD/n4x5cc7N9GMTZEmwpJUri8WhLlIV46JVhWZOucjCF+HDBbX/CDP/4XHB42GAwGiJLBt793yNHeLp1mhwfv7nPr8DZtY4+dVpcHd1t8/9vfRa4COvZtZDnh6bMfkqdLTl4+RtUrzKZEHGg0mjaisqHZsjCUBu/cf0hVSxTCFG/tc/fuBwx324y6u6wWayTZRtVMvEWFYtoMdmqGrT7zqyV+VHL70V0mqwVJVPPP/uX/jdezNxxa9wgiiePZmovpBX/3XyWsCofNxmd87pOUK84up3zy9EteXs24Ctdcxh727g5lR6EeyoyDNctNgdO08f0ATa148eIVe7u3MK2EF88u8DYxi7mPJBeMr5a4Tgfb7tNwWwhyBYJFkE45u7zAdg1yKjabHM0UWMwyNsGS1WpJHMhYZhunU+OFJ/h+CpXF/t4hkWfSbLXo9V0ux6+ZLudsgiW9QQ9dPqQoMrp9nTSBuJa5XC0ZHo2Icp1K+Rlpi38TgHLUqnFtEbutMlmcU8c5yTTk8uQNihXzrV+1efDwHQbDJr3B1hlh58hlMDRwmyHpQiVYyFxMnzO4bfN68pz+UYWiJbz8wqPnNpAx0A2Z2w8rfvu/6fDZyU9YSUsyK6Qs5nQOV6ylx6gdEUkRkGpYXQUkvoQg1fzKt+/TNFqkHtToZKJPo9nhaG8PVVA4P/uEnUGTH/zhM27f6fKdX2lyuNNHLCx2b7cwGz7f/40PCNOtyG0YBIi1jMrWxq+sEmo1ZZOWhDWYHR0/Kdh4CYopIWkasmpg2W3SVGBytabILRAsTKNDnJQolk5Qhpwvz1BsFUGR6Ha7SKsMNZRpSQ1cpUaVZCy9j2bXCGrOdDFnNl+wWXusPR/V0IEKXd+mw3qNDrPxjIZpEYcb6jIlTyNWizVCJZBXKXme0u5q7Iza+OucKhPw/RWmadNqtGk3hqRxgiwlCGmXdqtBs1WhKDn33/+QWRajWTX7fZf54pIsz0lylfMw5XLyBlkX8MOIshDRVQ1FkGlpLbp6m/V0TbBO6A66iKZIXktYhsl7d/YZKC5x5LFaLWjZTUa9fZK4pN8ckmQlpq6TpwlxEHPn6D55UiKLIo5lYmk6VSnS6DaoKwWllDnoDYn8lMXGo73TYZ1ukE2d9x8dYCsO3d5D/LXE1dNz7u50qHNISfGLhJfnlyxWHl2njymYWJYFkoiXTukPHVarM8pKRJYtlqsxgiAwXk7RGzlvLh/zyZc/5M3ZK9Iy3hbsByuMpknTcjg6eEgYasy8CZKZEiX51lquymk0TTxvQ11tF1NBYMsUzVKoBH7y8Y+RlIz9w1sYlsYm2LAJY569fkK73yOIQlbrmLKSoRb57NMn5KnMdz74dcpsC1KaDRtJFGi4LmHoE4QbREng+Pg1mqgjihmyBA/fecBqc0pv1Ga4c8R4ekUYeXzyyScIqLx6fUaW5siqxuXlkqJQ8cOA4e4QEYsk2jrhbMkGArJocTVZsdp42/R4vMa2RQQyDg92GHS6BEGALFbI0ja1bukNzk7nDPr7dLtdjg7e2aaJTQm3YRNGay7Hz4nSMWUdUVQhV+NTstxnuRqDkDGenxMmPpZroVs6RZUTxNuI1HR2xXw9o5ZKprNLgihElKUbUCdJEvo1i/ktmKtrAVGUv/FTVCVluY1MKopClWc3DjmyLNNqteh0Ojee1YZh0Gw2t4DjmnjzNgXearUQkG5IGttaTvGaca7CtRbm2xS7ci1nlMQZgigjiRppUlKkBUWxreNrNbYlSLZt4/s+kiRt5X9UHVVVb+JpWZaQpAG6sSV7CcLWRzxJkmsgXFBVGdPp5Q1bfdDt0Wg0qOuaPM+Zz+f4vg9UZFmydQVSVaqqIktj0iSirgrSOKTIK8aTS3762U8Jo4jszh2kv/7XabjONdt7uzX+B/+9bZ+B6kc/5v8yGvAf/+3/O4JQs9msWM1npGnMer3E89ZcXpyR5QFBuMIL5+RFQC0kzBcXjMenxOmaZmPrDOV7C1S9vi7N2IBQ0O7YmA0LxJrWwCIqJ3jRhOXKYzzZsF6vWa2nJHGNrtvohoymyShqimlVSJJ4XT4hUgNxlNNqNTg9PWOzjoijkvUyRxJsWs3+tk42XJNlCTu7I3q9HpYjEsULLufP0J2aipqNf7G1yjVMNsuYfvsOeQYCGsdvLgGZLC2ZjJfUhUMWtljMEv70j7/g1fMJq7mHKpvEYYa/SphNQnZGd1BVkfOzY+J0zm/85vsYmkTbVSgLgc+/fIKipty7t8vB7Vv8W3/hzxMEpzz+acDh/nt4swmlanHl+7jKAE1X8JY5UuOKP/7Bl7R7Jv2eQrKSMU2DX/+dBzx/85TbH+4jGwJiJWNIDW7fbeI0bVq9LlPvipbdodMp0DUJU9vhzu0D2m2Tly9fsFjL7O/uMZ2cEawlRoMhdQmW1qTX6aHIEE0jfG9Jt93BW58w6PYojHNyFd7/1q/T7zSp8wbT62zYxdVzVosSq6GiN22a+m28+RWPn79gb3iL33z/V/j0/Ixpu6A1MIjTNu1Ri9IvKaKAXBEpxZqGrnCwM2KzeMN4PCbNVWynhSo3KUsVb63R7eyS5kuePj7DsV0EKcZbFiiSiOs28X2fq/GYwI/Ikh4HBwe8fnXB2ckCs5Hy7OWPUY2KSvT4wZ88R7bWvH45Ji1yZDVnuVjTavaZr5bM5hPSYsNHH3/O6cVrXhx/xnwRE+dzDo92cNAoyoS97iGPvvWQlqny3u3baBLYxpDxbMzMm+H0rV8aUP7SKe+ikGnYLpoV4t53ma1T1vOccOHgCAYLSWQ8PyEtVvQcg269w/LLBLme4zQ+IEpXNDSNpbegZe3x7XclkgTSLGa4b3AxXzC61SbXJpRiyGfPc0Sh5uHte6znIVklkoQiVSGR5gnKKGZnr80mqNF9EUl3WW5Chv0OQl1S5D6aXNFzDWwcLq5ekxQ5C29NEoksTk1GexbiToyuGsQLkUUQMn35OUXg4s2XDHsxdSGT5SsaLZsydBAEge5On9nGQ2vAUPARaxHBqZFTEUmXCH2fuBYw1S7jyQo3lXjn8C7+0kcUCpbLNbZtI0slt0Z7LBZv6DVaWz27KmSdCYz2jpjMN1SRTF7MqT0LQdDI6hJT0UjCgigvyCmpapGB5bC/0yJcVezttrkYZ6zXIqJcs16vcVyDMlMJcpF1PEbVRCTbYjELMaQQUd1GEJbrDYPRXRRVYBOtkHUFa89gvjzD0FW8ecRaNCkRaEo2ib/AkjQ2go+SCPT7ByR+Tp5s0DvOltlrujgSlKpJJogUYUFRrBCaAlfzK958eUz3sAViyXGypKUo3D7sk4cpSpUi2QaZadI9HOApBQffvkt9OUFTJE6WG8I0wVI0JFckF02qXKRjtJjmC6JkRtc5QFTWGM0hzN9wdfaU4e4OZ8sQy9SxOx1cBS43E5RUo87XOPsiRRrjNg7ISwffe00lKjhum3uDNpfHKyJVQ1IFdFEiXde4TYvx+UsajSMWcwlNqdArMB2HZeIxWT7HGNRYtkZVa0SrgIOWxdU6xcoiCnHJbL5l775dUUvRIqtSJFGgFCoycoRSJoo3qLmMIMiUcr6VVakiVosVw+4hmg6fffkFsqFQyzXj6TmGbTHzZoR+RK/lokoqGz/g3UcPuRzPKIOSWwe3ibw165nP3XsHPH/8KVku4LoirXYD3ZCQpQpFlVFliU7Txl/NsRsGSayxXM+JsjUdy2W9miMJDbwgJIkjXKtNmaf4cUqnc0BZxFTMEXKZhtpj2FexlSabhYefzLb6aZLB+eRLJFOjOWpQZQqr+ZqqqCmKGuqcJFtgmQ0EtaISIpI4RFYTFLVLq3GfUjxmFVyhS/eJ/RRRS7icTml3WqiaSJKnqBLk2bYGUFV1REEl8DdbIFPo1ICsFFTVN1k5iqwBGXUtUlbbCGHDtG7SvaamkyQRqipjNmzWmyVxUNFsNgnDGImtq0wcx6iqiqqpRFGAJAkIQo0kbRnLq9WGMAwZDocUb32865owCNBUGVWRiKKtNiJsrS+/7jO+jZ5qWxb0dYo+z/NtBDbPqCQBTdNJqgooEWsBWVNRNJXNZkOWbYlKo/5oK9ckCCyXyxvWumro6PpWVmxrf7kh9PwbgpNhGDdjViIgygLrdcw/+Ef/hPcffQvLNLdRyv/6XyT6+/8APwho/s2/gfs7v4N0HRku/u7f4z/x50iqhlipGLqGLCtoYsHl1QUCTZxmyWR+Sp4UdNoOSTwFSUQ3TCbzMbbVZrXJMUSDzCjxk4IszbHtHqVYolUKlimTxCJJJOE4A+LEZ7Q7JI4NhLqgpAQqDEXFcRps1iuKTAEU6jq5sZOEEqSc1SYEqUBRBRzDJWsqqIpBGK0xVI3VYkxZ6ciyiuNaXI5fMujs4BhdptMrdMvivXe/y3x+ThZK3L61z2J9TF25mK6InnaxjIjZbIkkyYx2TH7y4xcUQk6tVNx97zts1mMOD/u8ePGUVnuE4S6hHmPqFv3DLh998RG/8t0PCBNIp3OiWkdQRfqNFpt0yfL8JfM6ZyB2+Eu/9d9g4S349HHOkVuw39jZvsDNEj788NewOgGfbF7z7r136Lb3uZxP2Rve5ehA5fx1zGocUNcVpjqgf7skFys6iz0e3h3y8Z9+wbcfDfmXf/JPcZ1DSnzCcAckcJ0WhihzOX5Bpz0CJOKoYrCn8PrVGFmykOUBdVNm7Z9ycnqK0xyw8K/IZz7eOqd/S2QymdF2Lf7sTz/i8GDAo0ePWC5PmM5rdLVBb7+g8FvoWk6SLfno05fcvnvI2XjCx09WaPaS6tKh5RrcfveQIBIpi4w4mhFFCXlYY0ldGppItF4TVhWTpEG/B/GyRpZ6zJcnhMcqNgY9p8FqnrOQluRCzWa9hlohK5+zDnUGtw+IwgTLHCJSsFgUBJFP0+7Q77b45LNPaTptjnY1zo5fIcghYlWzXm6w7C4HjzRevZhwtHMfuTJpqXvUtUh/x+LJZ2N+/y/s80f/4hVxGrCp54zcD+iPEibPK27d6zL3n//SgFJ4W9vz/2/7D/+D79eaMSAqLxFEk/k0pmG77A7e4aef/pDj6Tm1KGC4oNYtOs2aLz85RVT2GBw5HO43eP3yinZrgADkhc98tiFLLfYOTc6vltz9dsnTF1PWm4Cmu48sVTStPUy9g5+fE3gRaSpRKzBdLUgzj1G3hXdlIKsC3mrKvcNDDE0lKyO63TZJWFEmOoOjDqvVgvHkjPu3hjTtFnVdcbl8w8V8xeHOXdoDic8ff8rFsY0gWLiNmldPztnt79Bx25ydvSDyVTRXw2gJtDqHeJsNpg5pUTKbeSgW5EWG4xiookS4KNAUlZ1+hywXUXSRNC2p6gg/nNGyRyRRjCqm5IJGoZbImki4KbbAKw2wTZ11miErNYZhUWQleRaQpiWW1SLJI4btNlkqECYhtqPhBwGa7hCnOYvVJf1OF0FWqEqBOquohYK0Tmk0LIL1Gle1CZIQo9mjFhwWiwVOUyCOfdrtPtmioCh8hKomy2MarQ5ZXpHXHpVQYcgGQizjlxmOq26lU5wm69mKssxx3DaOq1OTUlUVi9ka22pQUbNYL5EUaHc7bJYxnYaLXGlcnB/T7Q9Iq4xAlmgqBrYmUwkly/kYQd6yN3c7fTbBgqwSqbIKUzbRTYdYCinrnGCe0d03Wc43NIxtBG98GVLnFbfu3MLPgTQEW2R5tUGSK8pKxtBBVBXioEYWQSxLZLNLhYdabgVdwiin12iRCBlFlLDKFQYDi2A+IRe289KQbAQz4fHnz3EbBk15j1wOaexUJMcwag+YZil5teTf9k3+nT9Lt8xWav69Bymfv9+hbXZ5c3qKH3u0Wg0MWcdbbtAUDcduUIkKs9lLHGtI0x3ghafkeY0kmyh6TBLXgIntVhSVz6D9kE9+/Cm37gwZDW7zk4/+jHce3EaRTZ4/eQNCQX/QRpZ0ojBjb2/vRs5ksZwhyzL9fp88K6mFiiBK2Xhr7IbI2vNpuG1kWSVPKnZ2OhTxVqqrYTc4Pbli/9aQi/EJvfaIvAiQpRKx6iDJCYqqIssai3VAp9/h6fMXdHsuV5dbK8OqglbL4WJ8xmg0Yjab4epDGu2SLDZR9YKyrHDcJv3uLV6ffEyvu0fTukUa+9vaUlzcRo88C9A0izjJQMiufZstJMEkjJeIQoEk2JiWS1GFUH/zHbwoShS1QlVMykIkSbxtVJutz7ehW4g1ZHlCnue02+0t6e5aiifOtraBafqV13hdl+R5fqPz+DaR9JZwoijKVkcyTdF1HUGoya7F1FVVvbE9vGE/X8sRfd3l5+1+4IZ9LooicZpQZ9uoqajIrNfrrTC742xT7tc1oHmeb6WWZPla3F0jzrY1lIIgUBfljSzSW8LUFuyCICskSYSkyKw3IX/jr//b/OW/+LuYuo766hXVj35Cnmcov/5r2zKDepvq/t8WOf/pH/wBZZlT5jn7B31UeRutNSwR3wtptltcbd4gVDW2aSEqFXkREUcFrtNjOZ/hWEMsTWcTzCiEFFl1rxn2Pr1mj0KMSNKQKBTRNQdIUGRzC0h6FkkdY2gmeb4h8lNGw12yzOdwUfLvPc7pR9sa0Jkt8x9+S+YnRXgNqEUso8tsPqHbc9gEM7K0xrJVBHQ0w2C1ntJptsmSnPHlJd32LrIuMNrpsRj7WJbIchWCBJ3ukPOLL+h3hhRpRbPZxvdECnFJUUjIWgtBidANiTyp6XRVskTknaPbzFZPSTyb995/h8++/BjDkSgSF9WQWWcrirJCiGOWgc2vfe8uf/iH/5iqtknzkt/5rd+njq5YLDb4VUCaZ/SUW+yOdM6mF4yGB6RJSaMlE0QZ3/3OB9y6fcB8ukCUU8qkzcXFK/p7IpfjMybnW33Q3/j1RyzGc1RLY7Fa4K1zFLXmk09/yrvv/CrDPZXJVUAcFfQHDmWhsvHmTKeXmI7JbBqwt9+hRuXNqys2gcfD9+5yOX0FbOehogVcnaVoEtze/x5pvkZX+kj6mrOzM3R5QGNUoVUtvFWA02hQVgKIKePFmLOpx6DZpN9pcnl+RpyFtDomvhdSZwZuq40owuXFjFbbZDoeozY1rpZLRKHkTv8dhju7zC6uWC42NJo6sqHQ6LaIlx5CpbIOfESpYLjj4kcJpnHA2j9FSJvcuTVAkksCf3tfaobK46fPUWSdYb+Hpmg02yrdVpvp5AJB0cmqCkE2yNOI20d3IM0Ji4JX558gVA6//r3fpyrHvHoZ0NtLyMKU86uc1lAmyed89sPX/D//r49/Rt/iF2+/dMrbKgyaus7Fscd8MaXXNQkSn8vgBdLQ5PBoh+98+0N67j5lUfPZlxeYfZ3bHzS5++AdXr9Y02rukGcZhu7QMHd59PAevWYPqTS4fafB62fHSLnJu/cG5MGGltaGrCANx0iphpga6GKKo4ns9YfsjEaMZx6xOCXPNzjmVmtvvpiiSSLT8WLLWnQrnnz8mmePX9Dtdqkql49/eMXjT84YOENG1gEXrws++ePHtIUBH96+TxKEPHn8km7XII88VsuAZnPInQdN+sMheSFTkfD69WsuL1Yk6xxXU3AEBT0zUGKVtq5jaiDWEnktkhbRtUyLT56XFHmJpotouo1oymSEpHFIGsTYsoApwqi9gyqZZHWBn5UEeU6lQJiUtNptZGW7mGiGS5rXNJsOeVZhGDZVFaFKNaNeF9NwiONt+qSoNohihuu0yNKtHd1ikyCqLQRZIi2vsJspRR4jlBCsV2RpSKPh3tR1lVmBKhskgcBmVpNVEhkSfhKwjHxU0yGvCgq5QjQsvCRiMl4i47JcR5R1huvIIORIls4mjgk8nyqNqauUi9k5lQKBH6GWCg0MVldzZqdjJq/PIBOpY6jjiiCIEHGpc4myFIiyGFEVmF74bJYpB/cGVEaC2siYBXO8KKXT6eB0Xc5XV1i2gt3s4PklblfDaAjYegfqPrXQxtRAVlW0hkGtbPC8jMGwjaoWlHnB2cUFm9UpVSLR6drMvUssXaPjaMSJxyY+o0oy1ELl1s57yEqJN1sxOw+w+gq1ohAEC/JY2QK0a2FkQRDQdJmlP+d0/hlJFTEY7hDHOXmqMhrc2daNClBkEb4XE4QrRC1nttiAUlNLIcPRAYbpEMUrbMekNxhwfPEU9BJFMzi/fMWDd+7heR6np8eYtoGiyVyNxxwfnxKHPlmxYTJ7zXJ9QVnFNBoOV5cTnnzxlNQvCX2flttg2B8h1jLeekMaeaxXCyhkLF3CNRqUeUGv2yCJC2zTYLo8Jk2gKlSKTCGLLMq85upyRllGyIJMy9VYL1fcvn2EIEh0Oi2qqmJnsIdYywx7B7xz9yGqpFJUHnv7Q0Bkub7i5cmPGS+esVxdkZVjFpvnOG6F64oEwZjVZszV+ISyDrAsC0GoSTMPQSwwdBdFNZC0bS1eWYis1rNv/FR1jKYZKKpEUYWIkkIQ+RRVjigLZHlCmIY3Ek2e57FabWvOZ8sFWfYVqUdV1Wvg1cC2XYRrPce3UT5BEG4E0r+uaykIwja6qarAVuNSFEWyLMOyrBuLREmS0LStCLgkbeWUVFW9kQsqigJVVq4loLY2uN1WG13ZRinfgkVd12k2m6jXOp6tVgtN07ANE1kQEWtuUvyyLNNtd7AMk/l8ThiGJOG2lnS9XBEFIf/FP/wvWa83Xy1K3/8u2m/+xg2YzP/OH/DvJhH/8X/yH1FWW9JPs7P1vM+KFN3czlenLZBXOY1mFz+eI8glRSpT5hqKLFLnCQ1jK7+UUdDotFFVndVmSaNlc//uEUt/jhcUDHcGHB7skKclmqwhCiFuo2C1GTNfbggiH1VzUWRjq5trNDEbBjX1jfR6XVV0211sSwGh4upyRpxG7Oz2SLMQRZKRpK16gKFbSIKAoeqoisJmtcB0DOI8oqwLnj9/jiQLWKZGJeXodoNayrHcLoZt0Ok7PH/1mM7Aod8ebp2/8jmupbFaXOJYFYascbhrsLsnoNQuvb7MbPGaNE64OivxAp9aLPEXMYZWoJoiZbWh1gKqWqbZlxElj3/4j/42V/OAs6tzep0+tqFhd0Q6Q5cP3v0Ww4HN3k6H+3fu8OB+k6dfnGJo23vr8jxGkiPaXYuG3WF2WTAa7SCrK54/fslydcWf/vBTbEflJx//K64uxgx7HSxTZzX3efHqY6pSYjyesliOycs1AiZplOPYDdbrgNdvntPqd9i75fDm5DFpqnG5SLAaR7TMd7CNLrJq4oVz4lTCzy5JS8gLlSyv8X2HpF6wDq6YzjzSLODJ049J4gwZjaIoeHH+hlJRscw9VNlBEnX8qEbVRaI4RzN0sqygQqSuS1othWZTZ7Ve4IcJoqowGvYwGyaJAC9OX3AyXSLKAk7Pws9iFiuVMM65mpyiyCW1MOeLz14wm005Pp4SRyJfPj6mlgS8ZMbL02Ommw1zP+Czpy+JM4HzsyuuziMO9++CoHF+NWXmbwM4tjFkMHKoipos25bpqFKfnz57SiUndAc92s194viXwpLbZ88v27DqmpxcXTBsdynlkml4gdFt8Gd/9mMcXUM3WkzPj/HWHvuHHe7/5vcoChtF0Bi/OKaqKpI4o0hMhEIjSU9wW/Do0a9zcvYFFAbD1iNUQ8F1a4R+BaKPohWsVzWtnRLdqAhWFZYO9969h663mc8DbNPm458eE/ljFvNLhu0DWnaXPDtluVyiqS62bZKXCrF3RUM3Obizi2mI+OsIOdURydFEl9xrkUun/Nr3bnN1cRvL2hBvYlSpz+X4DVFW0Rlq+Jc1lhtz686QYJGjazV1KXH/1m2WyyVJXLCaJuzu3kbSKh5/+QKnIXNx5VFRUhUyVSmzCZdkaUlQxJRZjCzoKLZKXCcsE5+zxZr93R363T6z+RrTtFBVCUU0EMUaTRFwq5owSnCbBlfjU0RBQxRqOl2bMisJw4pJOKeWS/KsQqsV5MqkiivWizX93j6L3CetRabHC0Z9C4qMYBngNm2y3MOwXWppa2GnGxLDHW2r0eg0WC0y7HaXszevcB1za2J/uqI50FEoIaupy3pr4RZkVKVCVcocn16gajKyuK0BjTY+/UGT2WZDY9TAUFzKMCGahvRdG3PQYLaYIYkSUikgihK6YVPUIEmgqDVus4cXn7EIjtnbu8N4ccJ0cc4iWeJKAllSkxQRkpPiRTEXs5QiF7AtiywCW7cpihBDSZiv5uRJwXeP7nEyD4iyOXs776CmE7rGgD97+jmqo7J/sMt8fI5mhayna5bxHLM/hHVFtKyQNQHHkNGFGkMbE9or3KwNJVSU5Np1VLT0yaomUPM2cZAlEKxjkA0ss4nnhbQdB6kqqesQy9VpDlpUM4+dwQF+kJGlBbZrEfrw7sMP8TYXeJuITnvI8as5iiaTViLtXpv5csb9w3c4vzglSXMkVUEUa6xGG1loE4UhUq3geT697gHdbpuT05e8OX7Bew++Rb/TxfeWPLj/kC++/Ai7UfLBuw958uQFiijjGALUOcvVhiqvGQ32MM1qSwRZJ4TBlLqoEXWdX//td9isA+bzKU4ro99+yHS6oS4U7IaLFy7RTYko8akKid3ePlJd4doNkjykKhUajkEcFXQ7fW7feYcvnv2AA/MOFydjBKDTsLEsA01XWfpnJKVPkSk4ksTTZ6doBlT43Dr4AJEmeba1+sxzD3Jw3W96eTcaDZbL9TVoU0EoKHLIxa0bzrb8T8AyrGvtyQpB3NZIblPDGaIo0m63KYqCPM9ZrbbyMVvru/xGkkfTNKqqIM/LG5KKYRgURXZzLEmSbtLn21R6imFY11qS2+hnVRU3zE1d12+Y5HVd3zC334qxi2wlfyzdoNA0siKnKGsEATTNQKxhsVjcnM+ytnJHb/3Hy7wgDMOt3mWjAYDv+4RhSBzHaKbFar3gb/3v/wP+O//tv85v/tr3sUwT9dUrYBuZ/F8nIX/v7/99VEXf1nu3GtSUGKaMokj4/gZdAFWTyIuQrMyx9F3Wy5yGYyJWCut1gegoVCkouUcqCcyvQlRk9nuH1H5OHEWotcDMP+fyXOBw/wjXXlyTyLqUVYquGUhpQRRuiLycUb+HH6y5uppgxgmgg7B1+KnrGllU0VUNAZndoYGmSsxmE7q95nW0XSFO1ximRl0WRNRslkt2D3YwbYeT8xNk1cQWdLJiwyefPkd3TVTD5PIiI8/WOIbOwluj6zrL5YrRrQ7d3RZ2T2QTBMiqRSkI3L3/XTR7ypuX55imhaAsCDyDOI1QtRY7h32OT1+zni2ZTlIGg1sMdlw+e/wDnI5BqynTtG7jqEP8bMz3/9yf4/LyJU1jl9tHLdLQ5OhWi9nVOednx+z0dhCpabg1P/30h0xmV/T7Iz77eMK73+7y9/6zH/G7v/f7JMWM1cphHExR1Ir77+yzWYfsDu4glCqtrsF0+jG6dsDdW0c8efwFd+88RNNF0qygLgMkxSQu5iTphiSTWG7eEAU1utEkFickVchs6jGJfDS7QBJtHr98QbvXwfNyNF3GW69oWglN3eT8eM2w1ydKVxSegyYPOD89496jR+RxxMuzJZqRYBKjyS1qFCSjYBMFZFWNZiik6QZJLRFFlSoT6bc6hEXO81efsXd0h9V0QVZmyIqAJpbMi5ppGlDGc9LcZOdWm89++ooH999jb6fHxz/6CV6wQJuPONg/xA/nLBdbfWbNlDBMWK5OmGQSQlZzf+8OsiZSJwWBNyOLI45fPOX+w/toeUxNiSyqvH51znDQxHbXBOGa27feYXZ1zvEXJ+ztj/jgW3d+aUD5S6e8/8f/i4O6rAtMfcDSu6I/bFAVKrKmsvJ8DNNlPfU4uC1y/Eymt6PibVTevX+PTz7+EQgam0WK2zBRFI1228V0ZDo9k+M3lzTcLrOZT5yEbLxTbNNgtSiI4wRRSWmONMoMZEHDMkwUqY1tDdj4Y45ujXj+JuD49COGgwa66LKeJ3S7XTZ+gCTbyFqBv1rTaqgc7o9wmi1ePJ/w7Nk5H37nkMncR5RSEEJsYw+30SaILrk4XWHrLVyjhR9EXM2nJGWMYqhEkYxt1ViWSBWp6JaMahqkWU6cllBV6IpMEkYEcYDb0MjiCkUtiKIUTWlSEWwXAtUiDJOtQ5CQoRsOglCjliKZVyNo5dbA3Y9RZANFhroWKAuBw6Ndrs6v0PSK0E/Y3z8gDiOqIsUwZUK/xM8iJstL8iyjobXRRJNub8BkPqHRaOEXK+KoYL2IGLSH16zfAUWdkuYJfjwDwLU6tFoa3baNt/ZJkoy6tMhFkc3mkgKRJJHRRRHbUQirCk3QUZUSWTdZrEIcfWtJmZUxeZUhAlm8TUkMD7qcXlzS7LjYegt/vcGQTFIpxKoF8jJHbzj0W31enZ2g6BKOJFLUFUEY47h9KjFgvYrZ691n4Z0QhAmSFWHnElLd43y5pNMG03A5n6yQ1BzX3mO5XGKbBpWQIKYqzc7WW/5e4xHrdMlV4rFZefzWB+/w8nOPSXzO1SSl2xLYP7D5/LHP0dDArzKq2mDUNpn5IS3dItAFWhUMeyZ//OMvcd0hZkOCEtbnazAFun2N3z5T+FufsmXl1DX/YE/hEz0mymoUpUJXt0xoRZLQdYVuZ0iYptiKTpwGTOdzbLdJlkXomkbgh7S7bZJQYLGcouoqltNg429wHQUJkNlqQ5pmGz9a4jQMslSg1bCJow2KqLPaxOzu7qNpCm/evEIQBDrNLpIg4gXe1kFF20bwev0RSZKCkKMoBnGcEgYhw+4hee6jSAZVDUm+QJENbLNBnISoRspoeIvVcoEsa2R5ThQkzFczrGYL3/NQdWVrRZiWmLrJarbCdR0M22CzWSArGmUF7XabLBOI80tsq00a54hCRV1V1/I3GnEWsPaXOHYLWRZZr0JUVd2yr+tt9CjPUyRJQ1N10jSk4fa/8VzM85okCTBNB0lSKYoQXXeoq23mwDRN0izZPmx5q68ooGo6aZqgXssQbaWGQJYUqEFSJMqypK4qyqokz3KKcpsGrytQNZXlcomiKDSbTeIoRFE1FEW+7leBdK3ZmOc5ZVWhqgqiICJc56WqcpvyruHmBUYQttHFuiy/quMt820kjZqiLLZ9BNI0gaq6BtMSAlvBeFEUqcqSqq7RVBVJlEjz7Kb2syxLNus1URxTFhUlIIlb3c724R53vvMtWt0Oy9NTfvz//WfMLi+RJIVGs4HrulRVjigqiFKBLEkE0RrdkNAUmyCeMZ3N6PV2Cf0ASYCyAMO0cSyD9WqJpIKoqYi1TLj2KRUBRVcokhRNk7dMaq/A0HRarkmSpBi6RRT7KKpMJRSEfka71SIKEooqx2rpdEP4KycJnWuVlYkB//67Aped5paFLwvIkk4l5KiGytn5JXWl4DREJFFFViQUSSSLczRTx08ToiRCk5roqoWuZLx5eYLTtJCUApk+sjGjzlV0xdxKQUUNerdlFqs5iwns7PZodytAwLFs6irg8nXKg3fuULLi+YsX6Poej771gD/58Q8xHBFZE3EUh3yVkzgV94cWs9WagdFhVvjcufUhebAiCgt010YWHGp/gSgUVHIL4jVRWHD3wSGLuceDh4+4WP6Qz778jF///l/h1miPsBjzJz/4iKNbd1is5/R6fb784gW22aPdsLg699Hkmt1dl6rclkhUlcjRfZNPP35DlbtIkoBmNAljD9u1WcVPGY/PiXMdVZSQ5S6r7JQgW9N2btGwFRbTBbKs4Hsh7U4TP8gBC1VVcU2TqowZT2aIpUGn2aOWkm1JjTZCNzVkx2N9EXC1nqMbJrf2hiynM2TLQNJENusIt22ThiV1lbAJZijatqbaMgws3eGL5y9x+wN2Bg0uz5f0mk1UKt4sLnHbBi27iyB7rFfBNuOTW5jiCFHyOT39HFXV0RUbw9B5+vSCO/ce0mzpeOsFohQwq3MORj1cuUG09jCMDjUZeVbR6xskaYqqbc1BBCmhym2+9/1v8ekXH/Hll8eMmjp7+31CX0ZzBCarBf/Hv/Vf/lJhyl86QqlqLr3OEX54zp3eHYpSpNlr8frVKVmR817/PrmjkAtvGHYUbu+/Q9DOSdMLdnYHdFo7zGZLVssN3W6H/o5Ellf86Ec/oihUAn+B6w4RBZtw02G9WqAyIq4WiCicPtlGtlrdBpGqEsZnGNaMwCu5nE7wgox+f59hv8Pk4hSEmiKXSJMKwwnwJgWGYxGmJqfjGGsTIVQWeVlyfDnBlm1KZOarktiaYmsWV69nJIlPmcgYiobjNDCbOq9fT7DsGrEuaTebtHsiTz97TUWX6TSh29dRhJQ4AaSaMJ7Tbvaoqq272HJxRVUXZKK0dfQwbKYLD7ftMFlFOIZL6ieIQoloGNRSgZaLTN+MkTQdyZSIvZhms0ku5Lx+/hjTauL5axyzs/UCliSWcw9BtNhsYhQBiEU+ePe7nLx4RSmkhEmI2bSJSx+nsPE3V9w5GiDIFcP9XebTBXUl024NSfwc3ZbRFYvQT/E2C2RFZzKd026J1JWMpjsIZUElFpgq5JWA2RygyQWqApfTBZZtoSJSlSl5lRGmPpIsUqUabsvl+OUFjaZOvIhZ5nN29m7hRyFJlKJKGkGaU8k5i3xGEodIqo5Yi0ynU3IRKlkkTxVMzSUp58TJhpbTAclFDEpUVWR/12UVeFR+Stt12GQhaDF6I8Qya7w0QFAGIMjEUcRxdIxhqIhKjNUoWQVLUm3Nwd6AbmeFmnQxxJKHDwpmJwUffO9b5NWCn370msoU+fPfvssf/vBTuh8ecXk1ZXfXpSwU5tOQD7+/jyHLzDYzNnOdWoxBUK9rKOGvXRT8t2rlxh94u+nXHsc1gjDZgoK3YtCCBiRQC9RkCIKC8DKgrCoEQb8+hg+1gCBs0+uCELC1gFldY4j4+jwxggAC+dYK79nrG8H1bQXp+BqOCNvDCtuXHJ5s2e/bPodQc50KfHPdR2GrMSgICEJMXS2+etAInyAgIIjCNp3L27Zv2+S8RTp1nVx7PgdQ+9fHDREEETi/GRdB2L4MbfsoUFdfH0sVCK/bCUByfVzha5+/MUBEEMbfeC7W11aBN39cn+N6x9uLuh6vr7yov97iZ1v/ov+vf0GLr/r21We+2f4X7/vXHf9nV4yf79vPtxLgxkbxF+1/axt5PQm4mShv/6jrr/Whhucz6n/yEcI1/P4L1AhsGe7C2of6664dXxk0bu8Hb7uvbsC5/3ZWbueeEADBzZjVdfy18amoSa/bl9S1iCCoCNRUdYAoCNSsr20h6+vjyQjnATU1dVUjHCc3Q/P2egRBxA8DipaFbdvUlLRaDc4vz0mLlH6/jx/miFpK4IU0ZIswTjAVg/F0gqgq1JVKJaYsliukSuHOO4ekccBsNuP2HRfPW+N5FZm6IY4EdFNjNYswzZrKdkh8j3EYE4cCd25LrNYzmu1d6lplPA5AjFE1k8lsiiAJzNZTFEnld/7qB2zGAV98+gK51UapDa7WC5ZMiJ5mfPvuXZ5/+pLbD7+NM5LI5IrZacTeTp91FnNwdJ8XL04RxZrJ8pjFVOFo73scHx8zsB8iaiApAi9fH5MnDml6RpJmFMwoMw9Bytl4GYIgYOku1A2m81c03O9w752Szz59goRE7HuEUYTmOHjekiLT2NnvcHl8SVmtcewuxSYm8S5pKvdII42sqnn34X3OLp6x23vEdH5GFqSUgsTZ6zPs3ogyz5nOT+gOupSFjNUrKeo544uMfrtDJhZMJhtst72tg85LLieXdDo98qIgSwuoRTTT4uJ8QhZFHB0cURegKAJlpDC+SIgiGH24y7PHnzIauiwnIZtqga45tJom68WG+anPe+/XJH6J2xihqhF1rrBa5NSFyGxyxmh0l9JUyFOdOkqoIjifLSjLmrsPdD79/Cm97g5W4jC7miNIa3RDZXTg8PT1KaqucTW9QJYqet0uWb1VsqlEl/Ey4JfdfmlA2envsPIzBL2HqKqIfkI2yxjYu9zZe49O4xZFe8mbE5tCCvnk809AjNANmTzXuRp/SuiDKJSE0ZrzCwlZMihTkyxfEFQSeaqiaQbtVp+zs5QonVOWFd3GiOVkTJTNKOcVdlslSja0uiPixGc239BxRgw6+/yrP/wBrtWm5biUeUVdVpDbSEWFKNZ48YYgz5BXOZbS4uhgl+lige4kKIaILG61486KSwzFRahKilpgswjQnRDD2OX994/49NPX1OKG9TrialzRbXUQKHFUlyyIqcsSra6JPY+W1aNhuiw3awxdRZS7OI5DlUOWRLSaHWbLEEnKkKsCMalpmiYisPYjnK6LF6TkukOl1eSGgGK7BCTUSoxia6iVympdkidLup0+y2CFbphoeoNajCiynOGog+95eOuahq1Sk1BLJYgKvVYDP91q5jXaBmWVIEoVmiEhaSmHd/usNzOieIEkq+hagyStEEUb3XAJ5gtqWcQ2TWo25GGMriikwRrNkji72vov54T4Qcje8JAsEECDrNxaD6qyRNtpkacRCgqN3nBbV1mXWGhUtYogy6iihVqLOKVGQ3ap84IqbtLes5itA8RMJBfW5KmMUFiQSih6jWzZ5HHE/HKNaNs0eg3CzQpN1JlfLhEKE9M2QYOwCpFDyAMZo12wmQccvttFlDzG52vMoYHp1hiCiolLWMV8+/BdHktPSbM5R7d2+e6DD/iTf/oTnn455lfvv8eXryc4bpuH7x4iVRaXl5c03AYrt6IpxPgTi2kwhbrNFrxcg6rrkNLNui1cQ5S6pqZ6u0pvg5pV/bU22yVzuwDerLw3oPAtGPoGHqi3S6zwNe2Wm2Vb2P5ef23/DVQStr8J10Dn7Qfq+isXmq98mrfttq4yFVAjidKNhznXupBfgSABURCo6vpmz5a88rbfNaK0ldcREW8+8xVoedsd4aY+9QbfvD2XIH6t3xV1LdyM+1e9+Pq1/YJN+ApcV9cuN3VdfW0EfxYavoVRvwhe8o1PbK9T/Nq4bL+jrwPFnwOMAl/7rm6C3t84w9t2ws+04xe0+3lgej0DfsZ7++f7968Bk2xP9hb23cwgQbr+G352PG5A2y/4Gr76br4Jf4XrG+LGa73+6n/r7aT8ipjN1oO7ruuba/jZ7+4rfHxd6ywKPzeuNYAo0Bz0yZsaggCG1mDhLXBcAz9MMWyDAomCZCtT1OuzWqygrBARmU2X2FabIitwbYO6UFgs5pi6iKKZFGVIWcnIusL9Bzus1iGyLhDGBYFfoBgm+3tDlt4LWgOZ8/EEx7GZLJ+j6gWD/h7Jac5wV2O6XJDlAQ/uf0hP1Dn+/IrxJuCv/tbvM04usHp9JEfj5bOnCHXCoPOI/+H/6H1+9MNjGpbJMusgGzn3bo/49Mmc+WLDg0fvcD5+ysnZnH53n9FezenxGtnyOLl8ThhKNBsD+kdDxlev2O27TKcZ+0f7vHj+hoOjdxDlDd5mgzeveffDdzk++xHaesTOwT3OTk/RdQkhlkjTnCKyuX/0gIvxJabVo9lXSSIRzbnH1cUTlvWU20cPUNWc89Mr4lDgdPmKvJTpdRUcU6LhOiy8KxwbokXK+ZnCrTtD4ni55TxYNZ8+e8btg0NaDQkvyMlRWYdziqLCj5ZYRpsgWNJudfHSHMdus3PrDnVR8vLkFTv7dwlWKbVY8N7DfeYzn1oyKbOIhuuCpJCmK4RyjzyE+w9lFGXDyZuEZltGqA10VabT1Xnw6C6LxYLDg7ucnD1ltQixjJLx5RVirWPbLqvgknuPDpmcj4EWwz2HXncHz6uJ/DXeOmc0HOBtXmP1bBb+Cr1q0t8dMFvP6Y5+edmgXzrl/T//3zyqxWTItz78VcbTNZobM1m+4c7ut1kvLtlEE6pKphJVLk6m9DsNBCJO3wQ4LRXPKwiTMe1mi9irqMqcWvSJNg3cpkQQeGSpTntg4FhDnjx+juFEhBsT01FJoxmV4CLp4CcbBFQUuYK8Rlfb6IZCXqVkRU5dQhoH3L11hCzbBBsYb05puk0GfYezk1OqWiRKCkaD2/jhlFF3wCYJmG9mtFou62lMnma88+4u65VPvkkx7Q69Yeua3BIyX64pxYqyVFBLEc3OQRTJspQsKSgTmd3hiCwUCPI5kprT3+khiiaXFzM2qzU7wx6b9ZpaEoniNQg5smaT1yZh5FMkAWmQIqkypm2QZSXD4RBVYVtr1nDIypDEN0jiAkWtKQpotRoI5FxdzrEdDU1RQJVJk4wsSLh7dEBcRCSCyGaTkiYBtmOQxxm21sHfbBgMXbKyIEpAVLdOEFlUUdUFcbTVR+z17G3tl1hhuR2EKmWxWdJSG2ymU0q3JI8TJHGAhECURjhtm3bDJvNTxErjcrKis6ORxRmuYxEEObVSoGs2jq1zcXqGZNQkhYDjdCiiBFuTORgOmM1mGI5L7MUkRs7r81O6LpiiQ5yY5GWEGCpIZgSSSsdugyQyieaEyYqj4RHPnkxoOS6UMocjl6qp8/T8mJEuouRd3L5O6FfkxRkH/UOm0SXTSKTdlIlnKd/59YcIcoVZyDx+/iX93h2O3rmNOP4IdxXxj69SdOEOYlNAyAPSSqY1dGnIFReXIUGeUxQZySpAEUv+/p+p2NFbheR/XSzrbYTqazez8LWo1U0A6G1k7WsL7tcW0JpfdP9/1V74Cpn+DAj7Jth5611cldVNVOptf74OyN5eUl2DKIhUVXm9IG992t8CvrfnvgEm18f+ClBcA1VRuulcVX11LaIoUFVfH5+3AL38Wr/eAvGfB4rfuO5/bRzxZ7brZm8BzNt+/tzo3kQ0v2r/TbDzVZtvwKlvBPZ+FvTz8+1/pue/aP8v+twvxH5f+/dno59vJ4PwC8/0FaD8Cpz9ot587SK/js5+FujC18aq/rl93wD0b19evtatr76OX/Sd/vyIfP0++Pmh+OoF4hvRZ0EgpeKTocT/6TctLidLFEXDtk2iKKFhqfhRjOW2mS09FC2lKiUUaSuMPrJ7XM4XiIrFeHKKa1u0HBtVqykrnSxPaHZUylrmavIK12xhWj0UM8B1dxifTMiLhIcPD9FUkzKrWS0ivE1Ks1OxDC8g65PHsLvfZuVPWXkSh+80ufvuAR+O7vDP/6vPGD6QWVxNkNSaV6+XrCc+t27dwh2IxHOZo707WD0Tt6lgiyZPvnxBrRYookUtJKhWjiTaTCYRw34bgRLfD7Ftky8eX/D+dzuYyi6Tq2N2hyO+fPx8q78qBOSZyd7eAWv/NbOrGse1KKs5J2+moDXYGfapyaEuqMsU21GQlS0JbDXWifXXhLFFz2ljitU2EnjUZj5b8fTlBZPLDYZV0u/so1sx1ApSpTEfr9C7Oo5dc/x6huse0B05TC/PGF/6uO0eeVGz19xBYE1r2OXN6RmKVCBUNVEaUSoqbUdCoMJPY8KNxeGwTRJvEA2Jy9kVlmxxPjvn+999h08/WmJ2bGwrZenVqMLW9EDRMqTawZRF5tMp7cYBlT7h4pXH3m6PopTp9dqIqo4kGuzt93n8xROm4Qmu2acsAtKk4tbdOyynazotHVu20e0GQQhhcoqs2Dh2G0mKyUMosjVuf0CVyDhOypNXp6Rixt/5P/zkF9/cP7P90hFKqTqg1gJ+8vmf8PDOI0IvZ8cd4q3PmPlvoLaZTTx6AwfTSoiTbR1Sd2Tw/IsxlVBjuhV1alNmAovFBZoFoljjhx6LdY1tS0wuUy6Lz6CuaGiHxPUFKip68wGb8IzAz7FtB9sx2SxLgjREd0XmsxWKUmKbPQrBozfcIQxL8nSrhaZqDfxkRXC+gFqiLCGMctIiIIiXnF3VRFHCYL/LfD5GFnRESePifM3dfo9ZXmKYAo8/f4wg6hzeGpLHCQ27RS1KlFWAreosliVO28XP5zS7MlHkbd+964rVPMb3XxNGIlARxQGNpoMo6liuTiXlzFZzLKmkSkKyVYGgGrRHJorRQBF1wmBMVeUs5wVZVm1JR7qAUnfJ5BlFaeCnG5RcwjR0ykoCBFbpEjnUqJHYu73H6WTCOkzIhIJ2y0SXcsgsiqSiUme0uzJ5lnE52SCooGig1yIiNqWkIkk1g77C5XSGV2TcvnWLJN8WrwuKTDD30BotFEXB7m6L8x8/fcJw1OBw1EcWbFLRZ+Wt6A5ciigBoULURMoooUolJEVkd+eQ6WqBIgikecR6dYGu2ciqSlRGKHqDyfyMfq/NYrbA1UooLCrdYR1N6DdaOG6TWVCjlDZVljHc38WlzcnVGxRs9jslghXSqnuUlUWUbCg3BaVq47ZqJuMT2soAvdHjMknwipJaSFDEHZReQeInjKdzLCNjb6iRFRnZ7BJvMsY8+l0+bHicrDY0mh2evD7nWw/fIbgU8PRzfGFFv3+Hlydj3nv4Dgt/zm98+IrfiR26qoUlK8hphigarII5aVaCIKCpOn4YoCg1VSJQlipGW6CWdERqpCxHqxtojQwvysmTDDQo5BKjNtEzEQEZr14RxhWWIiEUErlUUFdgOw6SLBD7IbIh4IfQsizEsqSsK2pqGs7WF9l2ujiuzNnFjLxMcG0X1bDISFAVgTpPcE0TU+uxWM3JWCJLbRxLo93sMpteEG5yjo52qGuZD9//Lh998kNUVWUyf83OziHTcQRSxHS6pDtoEWwS9vd3EKhxjAZ+tuCLL15QlRrdno1h1EhCA6SaTz99ybDbYv/oDl8++4Q0kVBlhWZTQVEtBDEnCBPqOqPV7BKGAoKYklUeqmpRVwZlusY0m4SR/43nYlELZEWOLinsdfsowhJDdQiSiOenczq9HlmaEiUZlqER5TmuZaJIDlVVY5ttBLEiTXPKXESUS3SliWGq5EW8rYmsQJJ1qEskWcAPIjRVQRSkbV2iJN/I8wiI1GwJIXmWoWo6+nWdZlXVSLJIWZRIsnRjbZiV+Q0xJ88yJGlro1jWJYa+1Y8URYGyrBAFAVESb+ovYRuhS9MUygrtWqrorR+6KIqk+TZ1qcgKVV2TxhFFtSUWKbJCSUlZbIGcJAgE0QpVlZBkmSzJEGSRskwIAo+6FGk4DYo6wQtW+F6BaW6Zt5pWkxVbu1mKjEKVKRY5badJKIYIeUGtOmh1SZiFCIq4jfKXNVUCkqyiyQbT1ZxW2yLJQxRNQpEt8jhDkVREqUSsdWSloMhKTKNNVS+RJI0kKgERt9fkWbHmvFUSxxXL2ENPVUa9LkKuEIQJTksjL3IUuUQSts5wirFl8M/DGZou0u1auO4h0/kcraWRpyk1HrKlMV/6WIaOrnapRIlVMAdfYLk8ZdB0qVSNn375hrblsFgntA9NFEfg9OkKbBVV23D73kPifIlsmOw1DVxnyfmTgPiVyMPv9Im9CKu9w/RygdFooCsCkiBicYDmLjm6ew9VWpN7LaR2gKKXYEvE6zmr1Yamu49lyYh1zno9pi4a7IxGiErNX/krPf72f/QP+a3f3KGuZM6nYzrDHaJkxpPPXuPaI7zNgvPzFa1mH2oRw9rhV3/zPq/evCRNfDSr5vLSoz1QeHl2yf7OIYv5CVmq05Fa2EKGLiiUQo5sh8zmHi9fX5CGFaN+i/4OUBYYeossj1nOI0YHDaI8xB/LNM02g77GejymKgQkTUcsa0bdIYdHA149W5GH0LQMxotzVMVlMDwkyzakaYrnFbR7LWLZZ+ZfIpUmRq2iigaSXDJsHTEfKwzaLifLc8zqgHsHA5789DGO4CBkMfPNK8K1zaP37jHcbyObMlVgYaoNTCchTFdococoqlguAkxNR/UNphcTnFZOEFqE0ZqG41JXG/q9fQrNRtNSzHAXrSHx5PELBh2d1bymOTRZhRsMw0HU4c5OD9tp/rIw8ZcHlKK0Is6XmPohT1+8ZHdHQpaGvDl5xp2HR5wceyhqyvnpEsjI0ivIG1i2TKPd5L1Ht/npR28I6wUVBv5GhdpGUDPiuCZcVViKgECK7crYTp/XL2Yomg6qysmrOcNDFVEsKLMapTZIoyt6bYfVfI5p6qgqhH5Kuz1itfRothWSbIOiGjQck/E4Q5ZVDMMkKxOaXYuVt0HTm1imRlGFhGGObfWQxISiAkW2EGSLXNgQpQUFJavJim7XxpRtIs8niypGLZF843HQb7MJcnqNfU4uXlBVKu1OgzjNGO208T2ZUgsRBIGdnT3ixKcooC10mJw/oxJlwkyg2YDeoMUmTqjlFFM3KNICEYk0Lhn1d5mvFKazMQ23y+n4ijgL2b8lI1lNikpkuRmjORq94YDFrEbVDApRZOl5xElCw7KZr+Z4l3MM08YUQTN0EEuCoCRPU0RBQzdU5KZJvAnR6pRB1yIMGpxOZsiyyXu37jOZv6aWBOZzkNBodhtE/hRFSsnTHF1u8OjBh/jxGNNqoogWL189xnYayHpFVOe4DYsgDSlKGLY7KHLNi8efsdfe4fzshMWFj9sVSdOAi2XJ0rricP8hIgp5VuHaJkK49fimSjjYPWR2dYXuWtimhiZqNGyd07MJoq6iKhYFEl4cYiolWsPkarlCkCJGrQY9t8VyuaTbbCNVOePpmLCWcNp96jJhPp2hyRXysIFqJxyfTmg9dEmTNbU0RLL/PKl0wO6w5suTH7CzK2HKBUJZ0eyJTBcue30Ly5JxL0SenDwlyUNabZMfVyJFntA1TTpGi7IsOZtdsVjHdFpdsjKi6MjsjnaYXJyyXMTcf9TAbjg8+eIlblek49hcXS7J9JIUGdNSWCYrnAa0NAOzlpgsN8itPrqkIVAxWa1AEej3BQxNZjMPqdWaRSZgVQmHB7tczi6o64KGUjB4NKS/M+KLzz+l+aCJrLZ58ewUFZ/2sI239PngW0fUVcbV+TF3v/eQV6dzNDXj9sEhsljjuS7v3fseV7WApBicPOhwae/z6s0pxtEjLgyDS+M1VW1xIQfcvddjfLWg6VTIUoUhOTz63nvMOxLD/Vv8yWdPCcIVvb6HpQ+o73yfvG/wj16+Ivy2Q5m7HL++4Pd+71scH79GUHK6nTavnlUYpsgHv/uQjz/7AWLdIy7WSKKFWLaYTiY0u843nothVGJYDocHAyaKwstnX0KxYBKGaHtNugPIAo3d3rtcTF4TJwm6nmOaMYZhEmwCNCNHFGVsc4gkCciSiapYeJsI3VBx7AZZnmAYGtQy8+WM0WjEerW6AW2arCAINUVREEXRDdv6rW7nFnApRFGArpsoinIj7ZOVBbIgkiQZWZaRV/mNLSSAqqrkeXmjlamqW1mit5JFtm1vdRw9/8Z/vCiKra+2pvLW41ySJNI0RRAk2u02y+VySxiqt22FequJ6YcFNVtCg6hv7QrLokbo2riujK0OWGzGPH4yRXKb2E6FIJZYrsJ8nmJZGo2GxjopsActGoZJKBqkcUYp1WRljoiNUNXIokSUpAiShB8GuK6K9e4Oq+WGSpTQFHfLwu430NQKfxOy1x8QRj7tZgtDb7JelViWwWw2xTRcgmSJIJq0dYlkVSDGUDsSCz/GVaCoZaqoS5xeoWoFqtxCIMO0ZIp1SpIXuFaTxXKNrIDTUKnKDKGC0fAeb86fEnkFdS3g+zmjg110KaLIa1abC9SwYj0usaQhzabMyfkLyvMdHFtlsH9Io9NGUgNMU2BxuWC0cxdNr4lDi73e9+k2RTbRhlJK+dGfvWSnreG4GYZ5D1SHRkcj8lpczE7puQIbf4KUy1ycTzl41OLiYsKdW+8RxOcc3voOZ2cp1DKioLAJFpiWytPHc7rdPmdXP6asZH73936DP/qXX9B07vLOezCdrJH1Fo12jOUKiKiUhcDZ+QlZomO6AkGypNPfZThqkASQ5hVrDw5H23vHcTU2myvanQ6XF0s8b0yr1+DowEJVNNZLn9lswt6+juu0KHIP1x4yO33OraNDBDknL2vaXZ3av6KoCyhEFOuKJ89Pccw2fnKBH1SksYQorel07/DqdMLZ+QJDcSjKBE2tCNcxO90+o4GD9yqAIkYVBdIoQsfk3fv3cSWTOPXZ3Rmwu7NHVS3RDRn71i77twy8+BJH6fBbv/1dNK3k//OPf0Cjs0ezZfHi+QnDYZssjzGUPkYnxM8u0ZWCLKhQnCXhsuSfv/gXHN65j1TYtNtdGlabnd0NmqhS90pmm1fsHj2gDiQOB+/yJvqcgl/eevGXTnn/u/+7/1r99NlLRDlnb/cASQ44GL2Lpu5t2aP2mvFViCo3CEKP+Tjg8OAup2dPODjqcPrMZ3y1QjESFFVCEEri2ECSJCxbx7Zz5tMAEZvRTp+Li0vOL5a4DZXesIUgVqwXsFhNMcwCRZGQRQVVM1GUBo6jMV+ckSUyXjCl4fYJg+212Y2atISNN2NntIcfhchKje00SNMMy9YJ1gv8tUQpyCCGtF0by+3hbULaqsnZ2QmqJqEbLlki0es3qaoCy9Qpq4zVecju0Yhc8JFVjdVmyfHrCbpms3fbJYu3D+SyTMnyEJEmpqtgWDqGobOZVPz0yy+4+84tJpMZva7Nch4TFwGyKSOj0O/2kMSayMsBkBWROEpx2irj1Qrb0SkFCAMVpCVltcYQhogSlEGJpVtcLWZopkav2WY2WyDLMkUcYLXbZFlB03W4uHgDlUZVGDS7bQpCrJ6EXTl4myWh4tPfeZ+TZ094dP8uq+Wa8ysPQ5UxdJVgM8PSBeymRi1KBFGGhUzDvUVOSqPZ4/HjL6mFANNoUZJTyCmO5eItA452j6As2KzmFHXFzu4Bq2VIVKy589Aijgp8f4oqWiznBfN5RtMW2bvV4+xNwHK+Yu+gR16DSIGjNpguxojCVqvPcVts4hVx5nPn9l1evX7KoLuPKXWpqFmFJ1Q+3LvzgPliRRwvME2TKA+ZrtcUtYpl6zQdGalWSSKJZtvnyktoyn1aTkG/7WJoBzw/vUIq1ihtMHWb42enCHLOg0ffIk0q4jhlk87pmS5fXLxBUgwcyUZVLK4uxrRtG81SuTobI1sSimqRxSWLzRmVrKJqLVy7xHAaGIqMIessrlbXTHmdO7fuE0dzorJkvZySZRpFpSDpBS2tgVqXbNYRlu2yXHp4fojaqul19zCKAcvNMbLuQaFTZgKd7ojFaoFrO7TdBknhsfDP6LpHOKZFEG5IchEvWNFwbRxrayVX+BF5EXPnzi6z+SW9QZPLyym61MBSTfq9EXlWs3c44osvP8IPKkRBo9EYsPbPqYSM+TQiSiN63QHzxQRDNTk8GGAoR3TNDhfLjwnygGV0QhaXOPou3/nw+yh6yH/+n/4RB/c7mI7Im+MxgVfz3e98Cy+aoZs1YRgiSzYHhz3m8xVC3SeM5gTJEkVsMVvOuHUwIAuSbzwX18sUu6FTVgGXZyvSMOfofptNXJMEEnZbR6pL9NyitzeiSCLW4YqG22c8eUKeCTQaTdI8pdtt460rBNlE16yteLio0XCG2/kXrxFFlW2JoYiqqmiqiiyLJGGAJL+tWdVuhMw9b32tUSlvbR4lEAX5WhTdvJEZqqoKUdzGF5I8Icsyer3ejaPO1mpSRBRFJElCkiTW6+WNPqZpmoSef+Oi89ZQ6C3ofLvJskxVgaJso6CCtE0Re55HXRbX1pAVr05+iuu6JHGF7dbkZUCWCDx7+gZVFGg0HYqqot/exbQlNsGSvM6RZJtoHWA3XBotnXjl0TT7TJZjputzRrtDXp+NaZo2urgVRffiBD+JMG0LQ9OpBRBFkfXKQ1aAaisdRbmNAhuyi6U7qHqOKrkUsYDjWgTxKYGfEW8CWoO7qHrOq6fHjHpNClFkcHDExr/cSrbho2smx68DNAOMRoaquqRZSFmIWIZJw24wGS/Y2T/g6dPHNF0T6oIkCwERxx2SlRW90YhnL5+zv9emyHMuLhbYRhNNSqhKjyjS0Yw2d+7ZBCsJx3RwXIEkH1MVGmUls14vseySg/4jmv0uZ1cfszyTaO7ItJSHLJJnfOf9b7G7t0OlbCiTmjcnM8KFTKdbczVZ03Y6LNMXFBG0GgcE8TmO0yCJtraiqllxdrxBFCMePHgPy3R48fojllOBh+/f4vx0QVkIGC2bKs94770POD9/yk9+8jEdd4+dvRYnJ2+I05KMmJUXsrdzj/n0hCxOuH37Np5foYgLysQlKxYIQsx0GnFweIfjs2OKIkHVLBAqdoe3KOsNV+MT7t35gCBIGF9EzPwzHMOk0Wpv08ptk7XnI0otFKnEalQcv77AMW2mMx9FaXD77ohPfvqndDpdLFMjDBLCqMBxVZK0QNc0qlymZbuYtsBmNUWUDco6YHlR09tvsp4u8ZI53e4Bd24/4OT0Nd1uG92QWcwnhH6B41r0Rjv40RvyZMS7799mFVwShAvSdYPd/g693YTnn56xSStMrWC9Lti/t0MdLXh9PGe0f4i3LNjdM4jSAKXuUBQRfjBl//CI46uPSGcmD+69R6VFLDY+/+d//x//m015C6hbxwR7hO/7eJuYu0ctNFUlzyraZo/VfI5h5vS6R9y91eTZi09QVJWz8zEvX8xxXANJtKiqgA8/+C4f/ekpq9Vr8sTms09iHEvmYL/L5GrG+ZsLDNXGFFSOvzhn970d1PaMvtXGtgySaMX4IkMQN5huwqv/H21/8mPZvqZpQs/q+7XX7rf13p7jp7ld3LgRWRFFUVGiEkgQCAlRQskAUcxgSMHfwATGCMSUWVGClKoARWZWRWZkRtz+3NO6u7mbW7f7vfq+Y7BPXnSFkO4gMek3solN7Nvv/r73fZ83OaeXKh0FuiURRHvqSsSwBhz8GlmWmU8uWK/2DEYeLSmP6wc01SAtfIQSREFHM0HVdPpWJs864jhGs1pG3gDTkihKFWPU07Y9QbKk6WYoWoM1MpGcGElQSNPjwF0sTtn799jGCd+9X5OXAbomMh1+guFWOCOVx8eA29s1ZV2AKrML7ukBsffoS4mzxZxebEHRSIsYWRTIq5a2yTAMBdsZkGYHLEukqQXyqkQUO9IsRhZ1ZlcOadSCKhFsdhiaiuvYhPvjdsB0B6RpTr5dYxo2SQwCEqquIIkK9AWy1BEsc3qnw3AEHM1h++GakzOPrE65v98jdwKKeiR7iBpUokyauIhImGpDV3XEyYHBVGW3f0Oc7JmOF5zMrqjqmH3wHqkUuZhc4G9WSJLEdpcxGA9ohIrpqYpoSOy2IecXc159eklZJNRNye31lt2DyvLxQF3ovHj2kt3hAUHTsAyJsjqWLTddhiJoNA0c1gdOz85Y3sUoksfBj9mRYWgKWZRjyTaipPH+9gPuUKWMJMq6wTE8ijKljA+U4ghvYLEOl1S9zvSjKduHA483MaPZFe/2NzzkO4rsFqMdIbcH5kMXxx7QyhEP91vG5hBPfcrt/TV9IaMpKmES0lYHhoaFpssEZUZRJxith2sYaGLPct1hehqqaKDIDXki4yct0e4NH3804tnTObfrR968e+Dl8znbxyWipSJ1Am0UM164+L6P2inYnkGZJcxPRpzMFyzTFW2XkaRvkBWBsXHFar9FVhTutw8MhwMOwRZB7PGTA5pjo5kWw/EJ+2BH3tR4oxmxv+N0rlN3LVW9YzKdc3N7jedM2W1KoixFHgxY7rfcLvd88snH3K7eIrAgTd7hTXLSIkESFbaHCEmVGdsej8t7FBUUXSYvK9L0PUl6xz664eT0nKQY8ZN/cImlzhg4Ov/5P/kbGinFdk6pm56B4+BaCkkaMvJ0dvslT64+wbUXLHe/4f664unLBkXNsfoxo7HNZC4THRKiff0Hc9FQRtRZiKB2/Nmf/Yz5+Jxvf/M7kFecncwZThfsd7dcPH2BHyVMJjb2UKCuWhSp4+RiQRwVBOucsafRNAG6rlI1AYreUuUtVaug9iV++IguO+i2d6wP6o8byTyvkQUBSVQoigIoKYpjJyWSjKyplHVJURSYpg2iiG7ZpGmKaR559UmSYOoaVV0gtiKue6THAL9njeu6TpZlv++plGUV6Gjblt1uB+2R5COpCgLC938LvycAHUNYLZIkkKbZUYz2x/O5JEAnivS0pFmIJDeE8QrTctj6W2glLHPCy49OUEWN3TZiOhqwO3zgyr1EVQ22qwPeTEJWa8ZTE6qGi4sztqstCjKX5x/TkTI0PdqmojdE8ram7aFvVZJ9gzLQ2EV7RLHBNE0ESpIoR9UENMWl7wSyPKKqOqSkoG9Cfvj5n7N6eKTpochbZMVmYEvso5jhmUuQhFjKmC9/+xtk28FRS3oKGAicX44oq5SsykhTH284Ia8DvvrqG/7Dv/pH9N0RufnJJx9z8DfkaY1pe4TJljBJGUxt3t+9ZT47Z7O5w5Rd6lZElTpkRaBizuVHJkUS8/VX10jikM8+cojjBkmckFcPrB9zPvnkM6JDim2ccbaQSdKnXP10xqc/OOXzJwvq/qf87b/+Jb/56pfIes/11wnjU5nH+we+/FbnZz/7K3rhAw+vd1xePEGzKorSoywLzs9/wG7/wP36W6KDwdPnU9bbFZKwY79P+e71ksHIwRupCFLKL/7+htPFjF///BcYRst44CH0GcsHH1VwacWEt9cBP/7TH9DUPtmhwBuM2GzfIEk2mnLCZ39ywq9+saer58ymFWHoczZ7zuv3XxxDV8Dt7Q2GqSILYx4ffGzbxB50bJOOIDjgTYfs9wlV3iJpBS9eDdk/7rl/m3Nx8gmLcxlF+cD9fYJjjvjZT/4DHh7fU2U5Vdbz+cefs9p9oO070ixDlQ16pWS9ShlNTPKsRUBhNJ6QpSuCaI/tTlksXDStZTJ8gWlm3Nzc47oy77/b8qf/QGMwlNG0j9gHMctVQJStkMQKWZFpmoiPn/4Eo674z/4fv0IeOoidwGa3Q+8rgiyn2/gk6YpnH/8DWrEhXMe8eHnC229TTucX5OmKZVbwPvwaTesQs/8/hHL+o//Zq9604f59giAYeO4QUeq5ODvHMBrCsOfhfoluaUxGZ1iDirKKeP8mYzrXiXYFruvSFC4397/AdVXSKOb8bMFwcIE5UJmMLR7uArpaRhRa8nLHr37xr5hPn2E+MQjChP1GII0TLi+PQikMayxHgA6qOqZrHcoqYTKZ0PQd23WEZQ0wVAXNtNhuQ6ouRzEKBBmioERTTbRGphN3TE9mSMIIsZdZ+RtmsxkkOb1sIokZu22MO1BIwoa+KxFxMPSO+cQlKxr24YG8LBiNB4SHnmcvp/j+gZub9ZEwMXDxBkPipODt+xsm5xJNI6FpE8oiQRQ6NElnNh1x2JUIckcvZURFgyZLOI5FnrSk6Z7BwKHIe6omoK4VDNMBMSPJjtgzUx8wHMpkWUaStiiCgDPyOPgBwXbPeDZHVA3KpKBM9ozcGW3bIkrd8fSmqUjSsTB59ZAxPtdIij0fP31Ksu8JQ58wTlnMJiRigSYa6JJC35fkWcV+X5JVOdMTh9PhGVmxJU1zbNeirsCxppimQJbE3Ny84+mTV8dUvlCDoHIIC3bhBt1uUHsDhILJ1MP3Q86vbF48fcXspOLtVyl/94trNFPiZPoUWa7Y7jcohnk8V/ULwtDHdGSqSqRvRWSpZzo845s314ynQ7Tj5yxd3XA6viAKYs7OL/nu+itkvef99QbXlVFkk6bJUFSd6WRBEN8yHA7QDHj/7sDYrpHFM6ouwpuqxJlOtA2IhIyR7XI+0qg7jagFua+wLZ/37yWuzp5z9/4DqqNTdA1tXuI5Lq0IQRygix1tb9O3DfEhwXYdZF2jblSC/T0lNYal0ZY6H1+NWK1u0Z0BUVbheS1tZlKoNcE+wtEU8rpDU23krqNqWs7GE9q+oytyGt0gTlOqIEBVpvwv/+f/K/73/+f/LZLR09CiSSq6pJDEIZKmIkgytmKS+AknZwPuNysO+xjP0nnx/CPiKmfqdUiaSLDN6cqA85PPGUwNVssd/l3Lk+ceaSLTCjsEZLIyYLE45fZmx2hi4scBSZLz5OoFRZFRl8faJNsa8+HDB2Q3hsZhNnHI04KThctumzJwTjg5mbEOvwVkdusG21E4O52x34WIQsVhl+N6l0ymNsuHHT/4wQ8o2iWrhwLbFYjzA/tVgq5piK3xB3MxyzIQUwaeiaaYTMZzknXDyZmCqE/YLHc8rN/iOHMuz69YB9fcPd7hGjNM0yCJErIswzRnCEpHnlUcskc0zYSuw3E86EXqMmW73aMrM6aLKwzDoswrLMs5UnHyAlEUj1jGJkVAQVV1WnpMU/9+09iiGxZt8//phBTFo2CUhe8vHmmGbjv0vYDv+/R9j6IoCIL0+22mpmnHE/X3JJyqOm40VelI4+mEY6+mpmm/RzWqqnosXJdk8ir//ndH5GNRHCkdTVPRlBVVH3G3+oIwDJlMF+RlQJG2GOqQ4eho/YmiiNHIw3F1Vss9imaR1ylFH2NJLo47ZPn2lo8+f0HbZHjGiGUcIIolWVcTRBHD8YjtdksWZsiSjqoaRElGeugYeRaSUqCqJiI9WXokKHVdh2UqtI2M55q0NViGwsg7Ic9zdM1F0FrqdI9tDYj7lPvDFtcaINUtWdCQNxVNmyFKLZ7nEgYZVRvTUiBL5wxUje16x9nZOc9fPucQbTDtI5f9sA9I8wwQESQFy7F59+GGTz76mDrPiMOA6ekMSxpxCB+J2w5RDXAVExWPtlcYj1Tu3q8YuBqGW/Hw+AGV57x8ecl0eEKeZoR5yuWVx4c3IZ++SPniizVFJaNNG+4eYjS5w/GeIiGgGwIP9zE/+/EV7z684+Pnn6JoJaHfc/V0xN1NCp2KZO0wjSGB/4HDRj4CIXYrBmMbx3FQtIZ313cY6gltuyVLOxRZP4pvoeH+bsXZ+SvauuTRD1A0hzy54+JkwWrnE0UHzk+usAyD+7sdA0+jyBIU2UY3HcbjMUg5v/jFr1EUGcvWCIIDrjXh3dslP/7JZ0TJkrwTkXqZ1SakbgU+++SM1XqL5Yy4uOwY2joP7x001eNHP13w1RdvKAqRH/7kiu9e3yLpLSICWZYR+OkRg6oaSIgMzBEP+3tEQaVpuiMWN1UxzZqy7vn041f87b/4V3z+2U9ZnNvEUUrd7ZEFk6vzp+w2a9bBls2m4kc/+SGK3nP95i2Lhcd+GWJZDhPzCR89dfntzc+5etbyX/71BnFoI+QaN7u3eIZDFEVo0gk/+ZPnrFZL0nLLxflH6EbPi9MxKQJJv2b9/p7n85f8r/8X/9c/akP5RwvKf/QfPe2zLENXRRztOfv9nrou+fM/+xmS0BJFAVXTsduGjOYaopwgChZtLbNcfcBWZqy3EZYt8oOfXLC8PWBYKT949RnfffVInC75yZ/8CF2Z8eb1HYvTMTe337DarGkKj94OqQsd3/cxdJ0iKXEHBqqqsvMDqq44+obqIUm2pe8FyqLDdTwUrTua1rsaTXPoBMiLgPPLKzar8IgubESQIuyhQ99a9LVALdU0bUW5z1EMDV1XcZ0R69WeNAsxjQGuY1K3Abbt8XAfodoZo9EEqddR1RpDF3m4TVFNFVkSOWwLxlMbP9wjaQJNIzKaDaiLliw+YtjyIkDRVJIipxFqpvMJWZJjWQ4SPWFQYBoaURRhmUNEqaErBJIiQJBSTOOC3W6DaQsYuovv7zB1i+HI4f3ynkaQcQz395i34pDz+OE9rjNEV3ScoUkvVOiWge9HqIqOq6pERULSNkhqS5vCyXDM3d0d9lRDUyccAp+27/mTn/2I1XbJYbfCkHWyqERSDRSlJPJFBp6JM5DZbFbIcoMmTyjqHknsGLkuRd5SNyKWY9FTslzdUjc9hq4joCBKOpYtk2RbTuYu+3XM3q94+vFT1o9L+j7l8uopr99fM505dInLZrfm7HyGIusc9jsswyQOMl6+eslqvabtKuIoQG1FukrFGhmMx3PqJqUWC1bbGlHcMnZnbDY75rNzHpdrJgsRRXKx3JYkqimiBGMwRJJ6dFEna0R6qaIgZeK6aGTsdxK9pnLx0Z79Q03mv6Lv1widRInM/eOaF1fP2Sc+2/0aT1Zxhhp5LnFz88jV6TlnJ+fcL+9Zr3fMpzPSIgSnRNdnKGWOUNc4wylBGpBlBUND5BA1ZNQ4U5ntg4AtKMxnKutdhS1PeLh9y+WVjWzZDMYz6iymLkRsQ2dZRAgq1HVL4qc8vbpkt39kMBggCxZtWVFVGQPPYrsLUDWRrqpQtQG9UmKPJNpOgULFosCSzhDMPf5mx3/jz//bXD694osvf8ft+lscd8TNrU+Y+TjWUxAL4uiWxexjJKElTleo0hhVr9FUl+XjnqQvmXgWAjmH9Q7XnjMYGTSVhm3bJIWPqauYus3A0zjmNhSCcIfYyez8A9PZEF1Xmc0WnJ6e8viwAiRu7n9LXx8pNvf3fxjKefHiBaau8ni/xBspjMYKY+8zPn7ykr//7dfE4SMvXj5lG+Sk/oHr22/RLJPT2Uv8nY8kyMTJHkUX6OUMTb7kEK0xTIUozJlNrmjrCkVrSJKEvpOx7BF9L1DXLXXVMvZGJEnGcOAdUY4S6JpN1/VEaYJpmkfWdtFgWx709fdeR/0ognQVUYQkjNANlbY/hn1s2/694Dt6Jo/bxrZtf19QbhgGWZYcvZz98cTd9Md5K8sqgihSV9X3J3VQxGPFiyAI9N93jRZFhiJK5HlKlif0cspy/QZJ1igLEMSKusqxzAmW5iErHYbVUlUFkqSRp6AYHZvDBiSQlZ6Bc4batGiuyjdfv+EvfvLnHPKI2w+PXHx8xfW7G+I4ZeKMyOMIRZE4pAGSobKwT6mbnCwPEXsZVbGJohjXVWnaHKkzUVSBtsnJ0prL8xMkxrx7957FYoogVeR1jOu6lG0DusbpkzH3b96jFdCoOlUdUxUKjmeS5T5lBcPJmP02ojzkXFycs10v+ZOf/SkP6xVlU9P1Fe7g6Puvypq+U3CdIWme4To2XZXSdw112zAdPiVvl9z5d5jaKbZkI0shVS0cbSa2xGGTIBkpkuCQpi3Pn58R+isc74Re9Nnfpkxmp9zf/ZLJySWONUCUO0RD5e2bX5DGYy5PL4mzA4KoYiopcdwyHnlkaY3nuHz06pL376+RmTE7t9jt1tzdfstgcMXQm1HXCop5IApKRtMRD/cHBAlktSAMdkxGT/F9H3eoE0cpA2/Od1+/wV4cLRyurpCEOZ2kYegjxKpm4OmURURVZRSZxtnZGYgpu22AJMmURUvdZAiCgKqXhGEKrcviZMhuvyKpGobWgroryPMWzx2TlQcapWHoKliiRhY6vPrkI7p+y24bk6ciT54viPOA198t+bM//4zl8o7VY8b8ZErdJMRRgCaOSeoYVYOq7BB60G2XodWyCSK6QsVUNWxHYzY9I8kiNEVHVGIuTz7muze/ZDSdsN+nyJqKaQx5/+43DMwXWE5LkiQ0qUZbpJx9JnN2qvKf/afXyAMDRchJKhPXhtu7B4begqFt0zTH5hXHsfjoyWdkh4A3NyGzy4rt/RJTnfN/+N/9cSfvP5rlHaUVTaNxefZDxhMXQRBoapmbD9+xevTZbHaItIxnCrabkBcRsqSRFzGmMcYZqVxcDfnxn/yEPHF4+elH1J3C19/GdKJFHLn8k3/yL/jbv/vXrIMlv/riK6JM4uzqkpOnOgN9ytOnJ2jSCMfu+It/9yPmo1fsdxGi3JMnGooiUdYHbNvFMiZIqEiCyH7j0zYQhj6Pj+847NaYpsv2Yc9+vUMRWySlY+RdIosOCEchuV5viKKI4XBIUxe0dYcf7Ol7kU7oKJuWQ7JFNqHS9ygjQFdI6hjFMDn4EWFUMFnYaNIQTdW5eGpj2zYn85eoWs/AM6kygTDYIYkKQitycjrFMObYroMz8qh7GcPUaOqeoijIsoSqPKYsfd8nz1rqNqItJSxzxGRso8gGZRWAUFIVCn0PRVFh2y7D4QRZFJHp+e6LL6izhGdPX2DpOm1XsFw+4HgDmq6j7RsGnkMrZWActwz5eoMltqzyJYnesA1zdlFES8355ZyiKHj9+jVxloCiYLhTluuMsi4R5JiySmnaliBJyRsRUTeQNBUUqPuGtCxQjOP5P4r3OJaLYkIjdJieTNNL7Ip7BMNil9Z0usr8ZIas9pieijcZ4ycB9tA40j0IcUcWYeiz3x7YbnfY9gzVHJPkBXf3G1pJ4MWTT7icXTGeDFg8GRGEIVVe0fQVgiyR5iVZmTCbjwniHYvTIWXRst34GNol7onDKmzAUEmzlsDviauCSiswhiIlGY/hHsuxuZrqbL6RuPl1jSctOZks8OOQ5fYOy5G5X72jqQsW3gxVMEmDAqGvkHqBOMo4HHYoqsRiMaXMCzTRpCw6sjIhjDOSqKfIJLarLXUkEax6pMym2NcoYoujdpyfOigqmKpGLe14+tzh5GwBnUBeRMT1FncEq8OOXuzJyxYBCctUUbSOpMx4eNzR5gKK1FO1JY3QI4kajukhaRq6YyGIPYe9yM2HjBaBNGko64Dl5oEnzz8lyTP+7//FPyHOasajF6y3GY43YOBZaAYsNw88ffaKNG748psvKYuauinpO5n1ek3XV1xdPKHIc2ajj7HsSw5JhmoZhKlPWpTUWU9XwtQbEexDVquAre/jJ1uS9gPr3TcEwR7DsPjNr7/gn/7T/5Sy6JDkhsX0GY47R9VNLs5O/uCl0YEk9FEl/Xit0M7JsoRf/e6XzCYGslpz/7Ai9nP24ZayigljMD2dm9s1USjQdxK0Hl15wnqZoggmsgjT8YiuPm77DvvjDKubjKzwKeuAJFujKBl159MToZs9eXmgqTP8cEXT5ri2RttlBOGaukmomyNnXNFk8jJDNwx0wwJkBqMximwgyzKe59H3/e+Rj4qiYBgafX+8fnTfE3LiOKbvBbKs4N/0ZOq6fgz71DV1Xf++t6erj7zwf9OvKgtQpBGq3NMLGQgpspLz/vpbwjCibUomM5Om6TD1Ca5l0/UHojBDkBT8MGO19snSkqYtEBHQZQdJmRFFEUGcc3e3xRs53G0e2Gz3ROUGoYSh7iCXPSoihqZTVjmuqaOJPXF0IIx2yJLG/GJOEEVMpgPyrESRj19QqqJEkgU81/reF9rw9OklktIwHw7xvAGHMKXIYoSs4uHbG5q0w5tM0GWbpgHdFEiTkrqUj2jgvEPuR8xOHeqmRDcH3N2usCyLts04HA6EQXbc+MrSEXu5XWFpGn3TURQFUZhRFi1B/EgvqHSFSZl2dH1JdszGECZLoEcxG/xDRdGkhJnP/fqApJ6wun2kyk1OnpyRdTlD7xm7fUpZdXzzNuLmfYKtvcAyFbLqFk1TiWMBVXUJ0x15UdA2AoJk8Hh/4HDYEWePvL95je8HGOYE05b4+rsvyMqKslaoO40vv7qjE0C2G5bbkro3WW32dCistysM00FTTYouocwMaDTWD0vAJCj2pNUWsWsQpIqBt0CQDBxX4+72nsM++L5KT6GqMyxzhKo4VLVC3YiYjomiSszmAw6HA0l6oKpjFK0ljreMx3PaxsTxTmi7IfbQ4m71gQ83AbIgI0gpv/rtFzxubxl5CtvHFZam4wcb6iZlvy84RA1+GqOpIkkS0/YZQXigFY7z2rCHXD05ZzKZUFc9puHh2g6nZxPKXODrrx/RjTFFaHF6OubD+2sEIUQSew7BDYpqgSIRdh+w5y7v3ib8H/9Pf48319mtMtzBjKGlEPoiH33+BFlvGXljVEnn4cOGOhd58/U1P/rL/xr/g3/8l/zw88/47PO/wPTUP1Ym/vEeyrKBNqtYPu5QlQrTaVD0Ek2dYA9AkjzidM3AM1gvU2TF5vbDmr6TmM6GjN05b/bf8ve/+C9BkDDXoIo2KQe6VkSwTFzrkkNWYJoCk9kCVTRwPVC0GkE4QdVENN3g7fV3BEnGOliz9RusgYo9UDkEAePhFVkSEvg+aZQzcDw+evmCN2/XNLVFVdVY5pC+FqnrliKtqS0B2x2w2t4znI5oGpH5fIw+sPjuzWtyOaGRNMq+pipSJAXGrobcK4y8BXm+4/bbPfMzhfv7FNtV2CZ31E2Jbbs0CAThB05Pz9F1jyCMMe2GeCkwWUBe+DSCyC56RBdd2n1L108QNQupkwn9FbLc4ugTwjTFdUzGoyHrdYRqy9RVhmVbNF2GaQzZ7O8xLImiNpEVA8eDBhFF1TF6SOISsemOARXbwHEssizBHemossoh6smKDD+JMAyNQ7BhG6/oeo2uEzBtj6QfkUSPKFKHrTuIikKW5xRVzvuv75BNE0WVWa3vcDQFzREo2pynV69II4f9IcIZzTAtBT890NcNkiATHWIGoyF5F5I0KbZi0lc18T7j8nyGSEOSvmb2xCIKt+hGjSjYKPKQLMuOlCDRQjUlyqqjLsCUe4qiwpB1ojDEdR22wY6yrdhGK+xRx6O/4+XlD7l//A5zJHGzf8d8+ildWvBhdc3zj37E6j5lu/bxBgKWY1E1BZPJjHqQ8/btW/70L57x6ccPGJbENmlphYThUKfvJPTc5NPPT2jqH7Nd3TDSXuC+vGTxZEmzt9BtGM8mxB8emS/O2R98ZqZDFUUUBoSrAmvUsFickoQFotKiiAptm/GjH3/OV799jSDKSIJEEneYek0U51jGCIOGq4tPeXzYUnQCQzREQrKsRDZNTBVKtUcqBCzrguX6NbuHLcPpjDiuCcsMw+xRxCFCo6DJEqv1junigmgbosgtZRFjWAOCMGQynJFFJUlZYQ07+kJm9/iIoCmkoc5EN/CjHY02YH1IkBqP3tD59vY1g6FClNdYdAzsKVmW8umzJxRFgaRVeGOwHZMizxk4T9hvbxjNNcgrTsfPWG3eYzo2J8/PKIseTZ2hKzKGpXN59pTtesPN3TWjkyFZ2dLR445meLYFCMSBxGw8xw+XbJY7WjFkOl0wGNlYtoIhT/9gLt5/uGY+N/jk1ef86ne/4xBFzE2HvEn48hfv6BWJbfDA2eIJSV3yyac/ZRvFfPXtrzm5NPCsmsOhYjZdcLN8zdXLGXncEmd39G2PY7lYDlS1iKF5CChs9jvatqUuC7q6o8hqZEnlcAho6o7FwuGv//qf8/Grz/E8l9X67uhhlP6NIBQYDcdIkkCSRsfNZy+gSDK6rgPHDSMcN4593x8tNKaJbdvEcfr9GVz4/Uk8SRK6rkNRNKqqomk6ojjGshx0Xaepa2RRputaiiJD0xV2+80xBWva7De3xMkeXdcYDEZEkUBZwGFTcjJ7iqZ0hMGBKhOYLEYossxs9oQkDijyGkmScKwBSVqSlhlPT0/YLG/ImwJVtCl2IYouoFk2y7sHDFPDGx6FiGqbeOMZVVqg1y1ZVXF28oy6L0nTGtOVECWFpuu5PH9FEt9Q5Aa6aNLTEERrDHVAVUHfySR1hi51OKKJ5vbUVY0jzwiaA9ttzdXTMWnSoUgKcbFhcXJC29Y0NQy8Gt9vGbkihtCSlQc27+5xB0NePP2E9XqDJpqkUYZltxi6g6bC9nCLro45OfcIwwNFCbZjYylDZMlAlDPAIi0DVFSyLKeqj6JmvUuRZJmmhW24xFRLDqsVfpMhWhMsQ6MRDFRVROOAH8LF+BxN8Tgdz7l5fEtVyVS1h6YuSOKW5y+ndKXGanWPqZ+SZI+IbUYSgSLbnJ2dU3Vv2RzesNAuuV1+oGlLwvuYEp8qlTg5GdIVPd5iiFQMqRKVpF8xGkzo+oZ406IzpZYadH1C4au8eCrwuPNR5Ja2UWkFAdfTqMoGVZ4gK49kaUES+rgTkGWVxfwCRTG4eRdydm7x9OpTDElC0GKWyz2z0bOjUK4i9nuLviyZTqeYqs69/0CWSVjmEM2QMc0xaRySNTWafMydLJdLqlLANFSKPCOtJ6RlgKZ1XJ1+TlwfCA4ZRVTTGDmGoVFXOg8PD7Rdwu3dDQNPB6Wh6SVCPyJtoe9b3n67RGgHeEOL1WPI4+6Boq0RhYof/OCn/PbLB8q6YjyRiA41fZ8htwLkY25fP+IpW777es3lJ1PW/gOnkwv+5p/+FxjykLvHB37wJx8jiH/03vGPF5RNmNMLKnmf8uFxjze0GFgGfpRhOR55twFV4/rDAVUTkeWCNC+4uDyhrirCLKETQTc1xhMbTRlR1y2vv33k5ccnXD2F+6864kDBtAWaKuX0wiOIlmxuBATlN2y3exbTJzjWgCBc4w4tngkLJLlndxeT5QrR9hFRb47+zvMz2ioir0X6usdQRMZTh6oN0Y0ZadSzmM4ZjiU6TeZMmKNIMoVUgyYT3uyxVQ3ZVmgqkbQMkaQYCYGxvUCqJ5R1SJI2nJyPaXuZgSGhWzW24pDWKlm+R5c8hguPfRpRHfbE+YHyvsQbzLi9P9D1DZog4WhjmjbD86aslzFSI5MUG8azAUka8PrbO+ZnCptNgm7GFI2GpMuIrkipCsz1MbtNTKuI2IaAIrsURcbQ9ZBEjaDaUFMw9eaYMsRJg2VYSLrMzDWI4hxB0jBNl7xoKbqKokxpIwFVd5HVEq0VSRuTON9jKQq9apD1OWrd47gmfSOQhgFPn70iiXzKRkMxbbouoe9MpL5lXV9jVxZh1KNLKnm8RehFVEOlq1XCLoNExZE8xDanIUWWRTbLR0ZnCxYXL9C6lqRZQj+kbwTcqct6/w5HF9hvE1Ihp64URqaKMxigOT3Rxuf50yekSUarQiv1HIIUoe8wmxH//F/+59jemHbtM/RM+ibl+vY9w+EJu+U9rr3A7CVmY5eHwwNNLSHRYwwGnJy0XP/uLd7oKUgSH/3gCZ5ts11tkRWBd69bwoPO3/6LvyHxRf4n//GnfP3tGx6u93z65JJeyKmqFYNpT7QP6JKSXvXYpzGdJKE6Bo51xmYbI1synSwSZTtEWedQphgLizyO0GwDZZwTBhnPn03w45Y6LXmM7tHdjo9OB6imwX6bMXSOeMar559wCNdUVkXdlvhhgCCWuKqIrnnYQcJsPGL5NiItM06uLD6/eMqvf3vNYLxAdTU8TjnkCWIzwLN0ZC3n+ostHz15hR9HTIYT6jZAQSIuU5q2I9+WtMUtEhZdn9CJKY/rGgmDrmuJw5as2DFfXLG8u+P0yZgyBLFX0Ac9h2yN4NoE0Q7UhIX5nF7t2DYr7PYFZeYTtykX2iXrQ8bWDknajm4wYb3ZczZZEHYyyV5G1TVkCmy9IC1Kxt4cUytBGJIkEWIrcNgm6PofprznFzNu72+Jsy8Re5kqjrk5BITbgC4zsOY9aSeR5gnbMOb0ZMj9uzu8gU0p57x59Fm4LiVrmr7i5s0dTbPB9UYIaIgiNI1IkTaYcsPj/Zb5YkKQ+tRNR9U09I2ErOq8e/Oas/MFN6+vmTgjqjjnb371Wz766DnO0EJSZKJgTS81ZNGeoTdHlBryNkXVLKpOp0pKXBuyrMMwHao6JIpDLG1M0rR0TYKoSeTlMZwzsEcUeQ2dgqjI+NEWS7NQJRlvYNH1x47Kum1oRZWsiFD6nr5TKVqfBp+lLxOnFUncEvkFedHz8pOP+PDwHbopYnsgIjLTzpiMB9zfbbn9sOQ//If/iH/21/+cXoAwazgcDgiNiKAprDZrirpnOBoTHlKETsBWNPpMI84DUlGjaitkS6XpStqyZxmuUGSDmT0ACpIwBWA4MBG6kqHtUiQJTWPgWCVxsqUVGxRxysEPGVgORZMQrQXOXpjcP0ZMLma8/vYDjjpmcmqRFx1BUHN+ecVq84g71BHkHKHXOTlXiYKWcF1xeTbh5kOILCbIZkZbTXA9hTgQMUwXUc4JohoZmTwJcbwBbRGQhzJK73J5dUqQ3BOlB8zBkMV8wsOHR9pUpLU74ipDFR2CODjmCxSJOFjSSAqGaeF6JnGqUtUJSe6jqQYP6w1VL3K6GPD2u3csFqe823yNH+aM9BGKlJLEO07PnnDYlRTpkoE7oRN7DnGLXqnEh4z9YYUkyyA3POzvaUSRycxht8xIkgLVMZAHFYqqU5cZVRMStR2GHtPFPbsgwlAkNEtAd0X8sKXNOkxTYF1JxJGIbYsYpkyc7FB0l9XGp21kHFtjOH7K8vEWGoOq6rlb3fL05TmqGRKFLUJj0YoltnWG5+oYkkcedwxMnSzcYasD+gLSNEQVVLIsYexNGVqX7P07wq1PY3dEQYjrmfh+hDd0SeKCJC9QnJjRwGO9XVLNtqTRAd30cASN3T5mfqqTFBtGYxPPPeH28Zr1LmZgD1je3iKLGhcnT6iGNUktsPd39LGFKCd0HRyKlGJ1hx+vUU0BP6wpyhgN0PSCvjcJdzFPL0bstiG2qzAyHfZBwm9//TtEoULSJCRdpvpijdS2/1968P/Xzx8tPcXORFcUqrwh3LckvoBtnLNdx/z8F/8VNze3CK3BZDRDkVw0ZcQPP/8BXS1TVimyojEajnGsU+gNbt9l/PLn3/DJj2WevZjy859/wyHIaHsTWZdAbliutmTlDkVPsc0BSRRze/cdebknz3OKomM4sUiyhDAt2T74jKcGs/kYW1fwq4bcaLl/c8suiaklnRaLJJEpMgXLVZHcnEatkbWMctAQlzmrPODQPVK4ObZrYJ+O0cQQz27QRRdbuESoLIrskTzN8VyL+ekJbeMwvzKo+gbJKMjKAEkYsN/EBFHIZrcjTGIEQULTDDp6ZFnGMAySKicvCyajAXmUMB87CFKFPRgTlxW2MUKRRSJfYDyecf9hRV8JJPuesgiJ9iG37x6QOBrry0ogjBKCcM/th0fuHu4RaoXskLDdrshq+RjqaEs26x2rw462qajyA4JR4ec+fSUgtxqiIpJHHf6qp2l1kiBkvnAwXYu6sIjDDm8wIQ4rkqDgbHFB5CcUeYuueRRlQ18LWP2AX3/1QLFtUDUZaSRheSaWYkElo8sDFKOiKXJEIacRKyTJoix0BNNEdHRQwDAMoqRGE0forYUhG7TtkkOQEpQtUe2jVBae4tC2LY+HkO12j6qqWJaBJIMkdBRZgqEaSK3EYCgwnklYVonYu7S5wWp1g2kek9dS4zAd9czOVVZ+TC94oEnEhU+eNYRxgDMY07UKD/drlstHwjDk8T4m8k0++/ySL77+OSI9k4FH3oRsg9ecX43QRhOCJEDoWvq4QWhjWjGjVWMkRWb74ON9H2B6cmXx9GrEbrmmOIBYqlx/9S3+bo9YGmTbHElwkXWLRChoG4UqB79IETWLouzRZQmJHIQS5JZDeqCSOjbhlkZJGZ3rdKpEJTZobs/oxCDPe8yBxOLCZTqdYpkOI2dIl2Usb16jGwO6qqSsHmnqDk99gmdNePfwAXciIqo9TafQENP0HcPxEMNpyIqcffiOppMIwhhFFUnijDIvycsDs/kIWZSYnZ+y3IZo4oy61DhsDgTRI7rZEqQHojykqUuatiTLS3arCP+wQVQLVtstu3hLr9W8fvc1Xd+gqjpBEJHHCdFhT9GE1E3PehXgWieIis3X7/Z8/faRHhlFUvF3IWN3/Afv4f2aKjmmhL99846y7/GTltHsgiefvkR1HVoJ/DTGmw552CxBKWnEjsfHiIGjkaUtwTpDbx1+9MlLFvMfIOIxnbgUxQGhbXBNiyRIkIQKUZGp2x7HcXj1yQtOTicYlsLPfvYzbHd49E0ODRaXY168uqJqGwI/oW87miYjjwOC3Yb7m2v8w55o73N3857H29dE4QeWmzWr7Tvi/JF3H94yGk9ohZqsOmANDERBoCpqDN0iyUPqPkY1O3aHLV2nUTUSvVTRtgKSINM2BU1ZkMdrNIFjan93Q9cdyBOftmqpyxbbNLBdiafPzum7jJPFFNMUMVSPrlLxw1v+/ud/i9aIaMj807/+a24fb0nakkps0WwNXROYDSbYuoZhCORJi6bb7PwDdWsgqgVXp89wGwuhqWijkr4QEWWDz89+hCeaNIVKlhR4zpixN+P2/S11UR59wULI6eiMwfASzbxElWwmE5PJxYJcEJmdjNAmEp2kc/nUIwgynrx8jrPomc5PqIoUVbdR1I6k2FFUDV99d01e9+z9ng8PKyYnQ5K8Iy0rRNWgxcL2DMI05RDFJM2eVjGRrQG6YyCIFeF+hyoPSPMKVRN4vN0iiwNURSCOQq5fr2kbC9XS2K13tEVB25SMXJvTkwW6plCk2REiYqnc369I8wNVndP1GYKc8vjgo6sTwkPPaOzSCxFdK5AXGb1UE0UVmilT5D2C2vKwv+PdhwdEBBbeHFqFwdjh00+e0VNRpB19ZbLfB/iHGFXVmS00yrKkKSrSMMD1PB7X9+iijC5I+IcAzzaZjG002UKoLaoiRVEr0iilShX6ruFw2JEkKbKsUeQNp6fnKIpGlleUZcWLl1cMBmOaqkPTxWOxvOySpBFlG6GYDZqm0tYdYXjH5ekZ2eGAUEr0ncjt7S2KYmBZJrplsA/2BOGWogBVmR1RtHKLO7RompIkLNHkASNviiAo5EWDaY7w/YCqUOkai7xI6FuT8chFUmDrJ6y2EUUmkIYF93dbZEPD9Dz2h5btIQVRQDEc1od73t29pugaDEGirwuSMELuj5/h6SFFEDKKrKYRaqzhgEOV8ZhuKLSKd6slRS2jqWNMb4QzmdFLLntfJUi1f/uC8uRkgKoorG532AaYus7jwx22F/H82ROePn3G/f2xzmM4sinKkEO4Js8TfH/PentDHJVs9++oK4HJQuS/9d/5MVkEv/j7X9I1A7KyIswfMGyFxWLOxZMrZHnKx8//AkVu+Oj5R4wHM9pCYTgcc/P+kd9+8UtU2eUnf/WMyx+NefX5c6Zzm3LQYD4LUccpcV/jTRWEvqFIQjzDogga6kRBU4YkSUe0LxGK4z+rYsj44YYs8mklhfWHFX0boWBQJSID1yZNNpw9cdluE8K44f3DdwT5He9u9hRVy/sPe1RtgB/sEPqCuu2QJAld1+lakSQtEcWjwb2ua5yBS1wERFlG27cc0hWS1FOWJbYxIKpyNL1gYin0VYSo6+hjG9XaM5YNPGOMY7mIcsl05hFFLcGhwbJsEFvaRkTsW9qspQOSqkBQemaTBe7ABkTaWsZ0JqRFTtWEtG2FrVvfC8SS8dhAs8coMgS7JXndIsoZI3fKwd9AV2EaGiPXRqZHloQjFUSV8TyTTuz55OlTFpMhzlOPpgx4fHzH7GzBfDEkCnfEeYijeozdMXFRIYjQ9NBn4LgWeXYgiNb0ioAxcqjlkqBesdkeeHJ5wnKzZzpd8NHFK5J9RFHLpLVP1WQIYk8QBMiySlN1DByPMimOYQJK0limaxUMQ0BWBMpSZLeuGAxcNAnyKKOuTDTHw5nI9GLPIW6oyj1d71A3x2Sf2GkEm4676xhFNgnTLe/ef4thDTg7OeWv/oM/5/7hHWKt8OrJJ3z8g+ekOw1bW9B1OqapIzUSYtcjSQIXLxeURcNus+fh8Y48S1AVmaHnUhYJQl9zOhvTlx1iK9ALOiezKxp61ssVaC2SppK3Oe5IppVjnr96RtspKIpD21eI0rEGZrfbUGQhi+mMyN9yd/cGsasJNjFPLk+QxY73bz6wXe+wLQu5FRE7gbxK0WWRplLJipwqi4+cbj1HVgziNEHXXFTDIM0qgijl/OoJqmIcy6yzGFl0USST+WJCmgVHykraoGs9aZuDLNC3LQ0SqmiQ5Bnb7RbdmlEWKVmT47kL6rTGHYpYjomEhePqDM89vr75irzPidIYzXSQ1GNyFulYEVOhEpYFb95c8+HNdyy8E07HZxgYbJYFmmrz5vX1H7z9YUsQ7fny2+8w7BmCNmY2GeN4A5yRTtU0pEmCINo83mzI44qBMWCzDrC0AVVekOUlV08+5vLyCSt/SydXBElIkuUE8Y44D9C0AQ+PG1TN4fruG4oyoe8U3r95IPATqq7iu+tvef32W6IqQVDhZvmOVj5uIJM8YPlwS1vnOKbDeORyejqCJieLAmhKDAUsvcffHa0kd3e/JQy2+Ic9SbIjy3ZE8ZYoTKFTqIojaMEwNIoyxTAUFLWnF2uyvCJLjh5KXZGROiizgMP2NWHyHfvdDeGmwlRO6Zsaw8gRxJLpfEbdBvS9AI1A6teEu5DHhxtEFEajEbHsU6sxgpJydjZkMnJZPj5gyBq25qDWoDYtbdzRFCltGXBxsuB8NiNcF1SNwOnJiFdPPuN0OGNsTsh2kO0izr0LJiOH6fCEsWczn3icz54x8s7QdZWirDmkS+J4z8BVaeWGbeyz2++puoKwq8hp2fkZj6slZaWy9TOSJuT163tGgwXrD/cE+w1Dy0LpLeaDc8JdRLKv0QQLQVTZHzIWF2cE0Z6iqUnKFEkdcvH0GXWa468DDENDECuqqkDRh4SVwCrfsY4SKqkCpcexxzjaALFuKII9lmByPr/kbPqUKumYjCYIvUTq1zS5RB4VHKIlqtkjSxoIMn2n8u7tElU9YoUfl/fQOfhhxO3dewRBQLdEqr7CssYk+YEoz9HsEYqpk0Q+I2+IhIgk6+j6MXCmqS6qqqMqOkmcEycZfrRmNJ7x4ulTyqQDoaTMO7J4x/JuRdPWfP7yE2ajIUkcE/oJsiihSzpV0lFlJbqpo+s6mmogoBDHKUVZkpf1975KE0WUaaoGURQZDAbomo2iGsiqiiabiILK3c0jtj5kPNbIk5jnVxfH7IEkMXCHxGFDmrTIoosoqETJ0ePqJwEXT68Yj56xvE+ZTk4BAVWVoS+RlYauayiKir5VaWsVWdJQVIHxQqbNLRzrlK0f0PUKutZSZCWWoaMqJuu7Pf7WR+01tssdYs331rMJAFVSURY1ba8giipyZ3A6Padra6K4Y3fwub6+RqhbbFmjjmr8x5i6qNHMkihoKIuGtiu4fXjHcrv7ty8o4zjH3x9YnCr8+Ac/xDOHx/qGg4Q7MMnqjKcfXyFIDr/57XfoxpibG59duEV3DLZ7n/cf7lHEOTQeUPD6uxsO24bJZIJiBNhDi6sXCxRZRZYsoqBGaCf85ou/Y31XksThsRzUnbG7VzCVEy7OLtHMnNkLBXc04PZ9xC4K6PSOqs6hFXFPPebjc0ZTkcmixRmAqndk5ZLN+i26JuLNHdyBgmS0VGmOKTl89vQFI9tGTkVevPyU6eSU0cyglyLWe5/3dxHDUw91IJMUEpqtkmYhWRZQFhlNWzDwZlS1gaLp35cBB8Cx5mgymiKJYBkmeZoxPxsQpC2tppD3JVUn4ZkG4epAuE6oyyGC1dNIPdOhTZukyK1Li0aa7DFdkNWGssyRJIXp6AJN8BgPF+RlTFNVWM6ITmkJkx1ZVLC8DYjiLZamYI1MRotTxE5BbGTCOMMPKsJViWm2dG1JXgUoaCS+RtlI2LaKJCdUVUNZZQT+ltCPEHoRQ1UQpQ5RkDA1ncHcpaegUXseVnvqVMKQPV6/fU9ehdiugCSZHFYhy9sdg9GCNDugiBKKo5JTotk6siyT1w37XYRQS+iyQ1o0ZL7PVJmRbCIeH74lzjJkQyLdFwiYFFWHIAusdw9keUgaxaiSSZb0dKUDtYIs6JRlzWq7wRzYvHj1lPVuh2JKDFyb3Tag7UO+/fWO6XDG6clTuspk5M0pi5YkLni821DE4OoTsqhku93SVRIKNmXVcr9aEh5KTkcfs3uIef/1G3Z7n+F0Rtv3BH6OZXo83vqkSUUvCLTURHFMGOa8efeAqJhsDnsUU8Ua2dzevUdSaxbnE1RdQqp6hLpnNrNRRw2aEtC3Oet1iB/D+w878rKhKnNcXaRvWuoSFNEgOrSUaYwiKNiqg9ganAw8sqikiivmoxlV3dF2HXEaIas2Yl9jGXPG4yFZGYDW444smgq22y3np2cglHSViKyIIEikkYCiGywfj0ELzxvx+HDHarln4E04PV+gWgayZiKLHrf399RtQC2XxFmKqOrYhk2aZciFwjf3H+j6khPDQ8AhryuywwZNd1gdNqz3GxRDQRBEsqpC0AwkSSDKQ+RGQndddmVMp8kocsf19TdIRs/b+/cckohdtGN5CP7g5Z1MKQjsk4ywrLlb3fG48Xl3t+bLN99yfbvCdjxU20bVZba7e8JDi6ofKRqbdcBo4fL1d1+z2t6wi0KW60cEfUtWleSVQFH3bKMIayLSKRWmIxOnMapmkpcdfhhyCPYE0R7dVjm7WFA0FQgKe/8AYk3ZxpiOjmMP6FoJy7JAKBnPTXRH5JNPXjEYDLBNi/nIw1EkPENn7BoITYbQJlh6T1NGeIMK00zI8yXBYcXmYU8e9xx2IXVZkaUhu+WargvoqhpJ0NH1iqoKUSQZVTTRDZmPXj4jDyuiXUHbyLiuS5xsGA1nqJKB0BmY8oSurhh5NlUhMZuekgQlZdIyHy0YDWb0ncST56/I2xZUlVqqyFtwx3MkUyOrBTRzeCzkd89BTngM9qwe7zH0AVXWMtY05qfnJHGIqkjMZg66aNAVcHl2imO5xFGDpmnsghJZ0YjyNUXXIYgjxuMpstEQpCVC1xLHPkEUU7UZVZ2TRTnj2RBFkxlOJMoqJs0iRmOPLI8ZuC1RtKKrU95/uMEPD2w3BwS5R5IUsqIligrSOmCf7xifuEgixP4BaokykWnyjpHtUZEi6SpffvUdUbxBFiqkDnRFZre7ochyNqsdaVKhSipd3aAIOrbpYFkKbSNSNwWrzZrdbkcU5tjm7FjvpMBsMj2GNZ0FbdkxmzjsDwGHsGC9vwctRRQc8hREqSZIQ/w45+ziKX4Ysl7vKFKRgeMikDBwTRRFQ9ZUVM1FlmWyskAzTNI0RZIkpvMptm1jGRbb5Ya7D0u6usPQJSzV5PXvbpiOZ9iWTFMLSDK0fULTFvSdiH9IsRwbSW4Iwg3bfUrXS/RCi2kPQVII4xDHmx5Z5J3GdDJHliTyvCfJEw5BTJym5GlAGqXs9/dosny8dFkdaXYkV50u5myWO67fPJKnkGcwniyQVLBdkyxVUWQD0+6xrAGK2qFbBd5gQtMWHA4HJLEj2df42wNpLHJ+cYKEQnhY0pQiVZEgUNKXOX0lYSlDkgCKPKVsaiRTAw3iKiZJD/RdQ1VD1bfUVYbQ5RiyiNGrGL2BrThQS8R+gqHIyI1Am9cMLYsmb/5oQflHeyg1XWB+OmA29/jit78m9BuGwyGj0YTp9Jy0W3G3vCeKMmbnIx62d6RFhWHK7P2SJ5djUrdDlSTKyseQNYRO4uVHYwBsS2e/izCchr4VCXYxiiFye/+BIs1QkHFGEXEsYVgiSSgShyFpqjKZy3z1q/fonU7c7MjCHlOVqAuDqPXRRI2HzZ7xQqVrBbquYnoxRPRBlHo0vcO/eeCgCrjaEHmgMD1zKMUIp2upphrBriAOQzzPQ0Di6ctTLMflcX1LnY3RXJkkiBg6Dk1tIEo5YVAwez5Bd2a8e3fNYDBAkxWasuHF1XOo2+PA1Q0sz/6+pqdhtfPp+wqxjGiMDEUQGY8c/ChmG7QM7UuSMMG1XfzQp+wOWPaIqu2pcpmiS5DVgvnYJgoTqlbg6ZNzBp7NIT2QlA3xpkexOyYjlbgCU58Q5D5v37+FRkbsFJ5eLFjdP2BYNWNvSlnW1HXGfKbRrmqSsGTqnrJ6+IAggOvaiN0xaR7c75ieGMiKSlWCrItIbc1dvidIMj4fPKFwHIq25unpKVGe0HU5k8mEPAwZGCPiJsYbTNGUEWGxpBJqdFVjv/ePgQ/DpkUkK3I8z6LeOfzln03YBT4377YMR+cctismzgDDMaDp2Wx9wrBmsRgTRRFt23JyOkUWLXqnYLdZoxo6sm4gqBC1S/wwJyprvvvmNZo2ZNrPeHamQlWzflzhGWMe7+8RyZlOxwjSjJ/9+Gd89+VbqlykzGXSrkU0C9KmYvd+yXhq8G67RG6jY1m00/Pu3T1SL0Evkzc+hVDx8vkLwl3Iyl9i2xaSqqNoNn6Q0nUygmDw8HBDL/Wcjwesb28ZDsdcnsx5v1uiqD1hVVPHMqZj0fcCAg3zxYg42aNKMrpikoVbVF2jamos64gcFHsTR9BRNIsgWONHCvOTCc9fnPP6u/f0rczA0VmcnlCmW+7WOT0Nhiawyw7UfYHYtLjuiHDnIwkNfSNwdj5DQOb+Zsfl0wFVnbJbrfnTH/+UJFozm1yRVhF3yzWa6nB98wWnp6dcXc2wDbh4dsbh0Wa5W+GYQ+K0AqFi5LpQVVjmhE5wUHEx7Ja43JOHKaaocjKeQ3XEBgZBQN92DIYOXV2x3z6gGCYP2xhdbWkcmb999ytaEeRCZDKZUaTRH8xFv4moqhpnNGK1f+Tq4oy4iHEMi7vNI7rtkTc139zdIHQFumPSihJ5W0DdMRi4vH9/zdieoYgqTV4i9T2jUcZhdc356Y8Zj4e8fXeNpEsYjkUVl8ymA3RdQ9Oh7QUMU+Pk4pT9Lub9+w+cnV2wPwSIgkxVVQRBgK6oeOcj6janFmqqMqNKcrpe4BAEiKLMPoyYDyckSUga1YiSgiQ3HIIDcdLheR5FUZBnNbrmYLsWWd4RhtvjljdL6JoC1xjStD5lG5PvZaoq5+BHZEnM5eUrPHuBrrjU9R3TuYsgd6zWB1xnxH5bEsV30Eg8f/4cUeiIYhHbKijLnMVoRNZofPP6KwbDOd7JjO1qy8l4hFII3C4/oKoDrhYe1U7FmdiIwg5Fyjk77wlWLVkjokg2+yhhcTJh4ph89+EtrVSxP8RUhcTVxRmS3PDN6zfs91uGE4cgqqiblocwBqVk4p5Q5hCkMXGeYSkDhoMBtd6SZQWSJOBvQ0Rk9npInvpswprxaEonijTpDkk3qISOQ+DjWjMMq6MuQoqyxzQVRByyNOOx/RZVK2nannffvmXiXKGpDkkdoCotutlhGRa7fUV6CNBEmTpPsTWH0WxMVkWstyHnkwGqoLA9PBAmMZIk8ekPnxOEB4I0oKwkVGWIIm3Is45OFNAckaIQ0XWVPKsJo0dmswUjb8r9hxWi6GI4HaYtEUUJSutzsRjz/uZbZMnk/MIjLkNsR0dqDUxHR1E6FFWkqnNMw6YoEw77A2YpgCIysG2ifcNgqHD7sEcVO+RCRXRExE5j4NoUlU/bw6uPX9LUOXHcodsGoZ8ABlVVHcNJCwvLUnl42NGKPaF/4GQ2ZTJbcP3uA8Px5FhwLxzbONpOIsu3pHHGdLRgPnMpcoHT01P6LqNMBUw7ZL9/pJcq6h4s26StBGx9TFLsefZiTtPmvP72Acuaohsa203AJ5+8Yr19R1ak3LxbM5uecP9wx2QyQRQ07rfXnApTNCGlDDPmVyZRVKJJIlUq0GkRh8jg6bMrKlklinOa5kBclAhYqFaPqmn0wrHrdDY3SPwQR51SdweSUEd0HCR9wiZaIqo5ipwi9DptIxMGG84vL9AEi6bt0LU/Hr34R28o607AGdiY+hX/yX/yv+F/+h//Yz5+9Yp/+N/9MevdPYfkjqQMuXw6Y7naIIk6VZXhHwJ6oeDD+w1R0JBka2SlRVZbLp4JtN1xSER+SteLrDcZv/71V6zXW37327f4fopleux2DWVp8ezlJQ8PO5xhyWc/eMKPfnTBaKSw/1DwGL5HG1XoIpBJyEKLLAk49pBXn8/oCKibksn4nPlkiqn1uKbB7dsNidQhmja5XHL5bMSb774hXTfslgW3X9+iCiaebWNpGpams5i6FGmN2EtMZhZRlJKnGZ4zRFUUZrMZruccq4WCA+PxjDxNsS0Tx7KPVQN9iyBw7IkzVG5vd5RlyHw0Y+xMsezjiaVXaja7PbK2R26h7+/RjIZejlCMkDyGvDwg6y2DkYVlWWRFyoebW5paxPXmmKaJnxxIygRBkDF1mclwxGw2Y+g61EKKKte4pkGHjDce0VcZr54959mL51gODAcapmIRhSnu0MXSZFSlZjTw6IVjxYggQVnmzBZjEPm+u9NAN1TqHhRBQjGOBJ6RLTAa6IRpQC/2LB8PSG3LyemEOA9pmpisaHn34S1tKjM3z4lWNdG+QVdchqMZk/k5w+EZY3vM/AJefPKMs/mP+B/9j/8hf/rT5wiFg6GPiIOaMmuRJAlvaFFWCZZtMBpNyPKWINxS5jWOOUDTO2bzAVnWEcctzmCK6Wq0gsXLj+Y4Zo3YyHz1iwOu4aHrOm1dIYoiq82W3c7nd7/7HV1TMxzZxxqqoiPLS/bpgbyrWG0jtmnNqkxRhgaeeUmWqRjm4BgQUUQswyZJMqI4xtYshu6EsbugLmoGrsHLF1fc393SNwre7ISy7lBalWC/ZR0+EocBfpRjiScUVU9Tl5yfTKjDkvPRU8oE6FWSouTD21uqPEJVOwxdYT6eoIo629WetiqopRZvMUZUGn7zxb8iiiJ0ReXybEJVRux2O7J6y2EfYqhDiryBvoc2Iw0SDMnlz37073N6es5u6xOGIYomcnv3gG7JfPzZC77+6lsce8L1+7cE8YG07AiyjPn5DKGVuRi/IAo63n+4Zx1sEcSKpFxyduEwmCx4MT2jySFXWnbR1wh9QpTAcp1ShxmubBOtA54sLrj/cEPb1ti6Rgvcb3fsVxuqMD8SYTq4227peoOL2UfIioakOqRF8gcvqQ8giSAKSGpH1fS0QsE+2qPoBnlRUCQloiIxHZ2iay776IY82yGKNpIq0TYSummQVj15U6GKKUXQI3Q1Qp1QpDtevbiiSg2GgzFlWaOqKkWZYbkOvQyN0BOnEZv9EgGFpmnouwpZkhDROJs/xfdj3t+8Ia99ttvlMdmtWhyCjG/evGW9W5PkIb0ILSJXz18yPZuwDTZ0Ys8+9vnd6y/Y77eIosjd3QfW2/cI0hrT8jHNCF0tkDComz1tGxKG96z2NxyiLWWbsN03RGHJ/pBw93BD02ZsdwlR1B0JUl1Kmh2w7RGLszl1k1E1OR0ph2hNmpagKNQ9XFw+YT5e0IYtbu+iNjZKb3E2WfDqxTnh1qfPchQOfP7RhCenNm3+yEiLeTGTKIWCi6cL8rrkdhsQ+TmKfoI5MFDNjusPN7x+f43pyFgDFz+okBUDdyzQCSF5VrLaHCibNbqkIHUuLT1ZXLLfZUiyTl40nJ5csZif0zUKyBKIDbImkOYN79/dIuJSZyJ/+Zc/ZTzpGDlDxsMRL56d0VcdddagyD2DoURXSYztCVN3jFiWWKr5/Rd2lbwpePv+6+PmUXORVQdZPaIx/W2E1MlYqsV+n5DkMZP5mI4jivWrb75ktbmnrI7dpv4+Yjw658nVc7quQVVlRkOPb7++pm0K6rZitz0wGy4oog5d10myPQommmoCGXVRcjp7jm5qiFrH/hCAoCDKAorR0TQdz598iiqpyKJIV8PAM1FlCUHoWa62nJycURQV690WJJknT56wejxgOiYIBYIgYCkeE8+DPkfTVB4fbzEsla7r8Lwho5HHbv/Iu/ffYlkmQZjgTWwsxyaOKsoqx7ZN9ruQ9WZFQsZDvKNWGhRTYB9GVE1MmYZU5dEKFqcJo+mIDpHT80tGwyl0BuPZGEXtqOqUsoyp2wxRgqpsSeKSolRJ8xXn55cYusXiDHoxZOjN6BBIUoGf/bv/HkmWc356xnwuEQUhk5MjilXsJLK8Z7IYsQuWuAMLw1CQJRNNA0mKUVC4/u6GJm0Zmh771Z48qfntL9+iSxZnT84xBzppkSLJJlle0SGRNi2yYzOcXZA3KWntU1QxRZv/2xeUh4PM67c3/O7r3/FP//pf0/U5p+dD7h98OjVAk4YMnRMOuwN/+uOf8PGzFzy7eImlDLGVybFQtErIEom2Mri92XLYZ3zz5RJ/X3DYlpiOjmy0qKrJV19+Q9n6OAOP9+9CjFGLOz7hF1/+nMn0CbNzk63/SC/kmNqCs9kpz17+mLt3IZau0IsGZd3TNypZV7Pe3eEYJ4zMKwwkNvePbB/35HFJU5cIjYXS5hgjmbev3/Ds6iNMwUYRLX549jGamdN0HdttiWVPiJOKMNrTI3G/vqZMMp6cvaKsa3qtQBmoSFZLFPZoOmRpRVEU6KaGYWqkRYofhZydnRH4EekhxVE8Bq5KXoQUVU3V5uRVDlLHxFN48eSHyLKKN7BwtSPlxNQ8qq6FViFLGyQB6jJj4E6YzBcMZx67bAd9gySaJGENVY3ttPhpwz4oqeo9edZyWBes7lJcy6NvUjS5Z7dZkaQhqqqiqDLzsc5oekle5nzyfMxhm9C2MeOpxexkgaKq5FVI1Sbouk4UBshqTZsLxFmPWThMjTmFLDMQDaqwQFcHiFLLfH5CFSWIksr8bIamaBziHfbEoLNrVodbyj7F8Uwm7gCxaon3IVYlYts29kLmzd09Yf3Aw3pDuCn5H/73/4qqyKHK8GwLWVRZL/c83G0REfCDDdOZzXg8xnU8ur6krmuaskVVJC4WF5zPLmlrjfmlRxz3bDc+fhLx8Q8mPLt8QZKFjKcmXS/QtTZtb9BJHYf0kbzyaboayzLIRRBkiZFp0WUNSZSTpiltX9GlHZqkslpvCeOILIa2UNitM9KywRxYFE3L48qnqDrKKicvAwaeweliiqMZtOWRmRuEGeswwtVNdvuUaBuyGE8ZDTzS7ytf3t+85eR0QlvL3N+ViB3IiGwfDkiUlFnPRy+ecLJYUOY5g+GETurxo5DHuwBN02go6LqGx+WGshVw7QEvXkyYDocUuwxL0LHUKW0Vc7q45PLiJbTg+yF53VC0NWXb00siZd8TZFsQBJqux7BsnIGJpJXH6q4q53R+haZanE0nXL97S5kmBFF65JZ7IqOxw+3qAT+oOBw6Wq3kUN+w3q6YLmacX12iGxbffvs1aZlSCjVFW/O4DdjGOQIqdVoz9jSEruLpyRwlhXzpY+gy2+UDeVD8wTtzLyAVOSz3mLpBlG5QBJPIL3DtEZOBgyPLWHqLIUlsl2t0TWLsOCiigiCqGLqOqAjsswOy7FC1KuvHAWI3x7J10vzA+5vXpFnI9vDAdDyjrHI2mxV5lVO3HWlZcP3hHV1f0gklRZUi9NBXHUVcIAkKjuaSxRlZEtNWR+xbllbHLsm2QxZFkihmt9uz2az57vWXpGl8ZH33ElVTkxUxYVTTtAru4IQsOfLM60Lh5nrP++sNqt4iKzWaaqCbJpreEcYRw9GcP/uLz3AnIoahEacZqqWjagaIEqopkuUho4lGmpaYts1y49OLEn6yQhI1uha29xvKJMOzTChSBjI4RkdUrKiMBN028BOfplfRLBfVGfL6Q8abO8D4d/iwg6/exCAI/N3f/ZwkDUBNOH02oxC3yJqIHyfIZgdqzuZwYDSeY9oGlulSVxY6UwxxhuPMEaUOuVXRBAPF7FAHEq1QUdUJZVOT1jGzc4fJ3GU2naLjkQYJp9MzXj47OV6JwpQvf31Neujomo48rlFEiSeXz1C1lNHEIA4aFFlnH6+RLZVUXFORIiJBDUo95mRySSPoiEZFJ2eMJ+e0lcBkaPLJs1PEQkeRTZK4BCQEARzH4fT8BWWuEhxqulrHcRy6umXgyvzJTz5mMT2hSDNOJlecnJxQlDF92yPWOorYkCYH5G7AernhfDGjbWsOYcRkvECRRYL9I0WZICsmZVOw269pu46uFQn2CY7lcn56hm3aQIfnGMy8U9oup6kUnlyeYKoWt3c3lE2DoklEcYiIQBr7HLY7dM0gK2N0c0grVPRSTBjt2G1jhoNzdM2mJafvBGRBJAgCqrLFsVzCYM/Hz58xGYwQELm4uIBeQZUdUCsOUcA+3nK7vuP2ccXm4PPzX16z3VS8u/aJIhNFmzAaT7l7eIvj6URRw5dfXB+pVBIossBiNkDVY+4+3PLxR5/jOA5FGdN0Hc7A5RDdsdo84HoLyq4iy1suzs6Qepl//7/5MxZPxrhjC9VpcUYuYZyRlntEUULXNfI0oe97Lk5O0CWD/SZC04ZopsfkdIRlDZFFk67uWd0/sHp/iyFahLsCRNiG18SVT0mFpCog6oD+b19QpvWS8YnDIbjn7379/+Kb1/+SfXzD+9vX3LxbEocRriUxtEfcvX9HFBxIg5ST2QCamizLsAyDi/MrNttHmlpCV6ZYxgTTFhifdaimQCsUdL3BydkTZhcOrZCwuOoou4Ivv/sNf/lf/zG6C7/55YrIh80mP1bjTDwef3fP1HKRFRfPHKH3NoJYUJUpUZ1Qyx26K9KRoSgKH3/8klbKefbpC3708SXTZzq2qZLlFk2jgl5jtDlNlxIkLb2i0soRcbVjvS2wRiayYbDZJ7iGw+Gww7LHiIbAzeZLqsZC0VsC3z+m3CcTNE0hjmNmsyN67WH5SJTEKKVEV1QIfUdJQlCExzW6q9HVHY2gsF8vGSk2jW/hhxGdpGJaDq7soasys+kFSXw8byGJ6KaKn2wI85yuV+k7CVODvhSoColSqGjVEMcYQaUhKg6L0zPaPEfpFJraQFZHxIcAyxwxHA7ZPUSIgopuakycK9K4AylBkiT8fYYsOSiajKrKSKJOmjQ0VUnfVfRRwvR8jNOAZ9o8HraMpxNc3aTrOgaOzcXikiCOyOuAIu/ptYZeESjzBrWXkQQRQWxp65zN9hHTVtDNnkN6R96Y3D0eeH39Ndd337DxP/B/+7/8My4vRGgEhB7Wjw9cnC24uljQ9TWz6ZjVaoVmNWimzHTmcTo/w9BsmjqiSHfcf/gNVZmB2JM3K1RlzLNPF4iKRt1EiFhstiGqIaHaJZcvpyRZSpZ1bHYxg9GYrEh59DcIqOi5yeXwlLEp8HI+Idt16IaC2HS0scKLJy8J0pTOKMjrAwMHojoibgM6o+byxTNkfUhZqximjaDU6H2NpsokZQCqytavkCuZxckZsl4iVCLT4QQ/CBBki0NUI8oadZtgGQ2L8wWmM8RyFlgji8H4nH264m69JMhrhEbksN7SVzqT4SWGZdNLFQ/bHUmt0CsSfdMiNDZCV+CpOWWckpcto8EpRb7nb/7l/5MPD29xRwaS2iNIArKhEGXpkQlu2cRJhaIIxFnAbu8TRQHnF1PG4wv+q3/2r5mOhohtxvMXp/z4sx9h2A77MMaVp/zrr37O6MLC0nMQExrdwp2c8/kPnnL16hm6Z9GqEqbnItkqxtBkEwS0ioqpy5imTd3KPOw3aIZBlkbUTQZ2QbCvyMIdnz/9+A+eK7oYQglVzW6T44cBYRqRdzlbf0+c+98zzwMOfsZock5WalQNVG2Bpg8xVYGuiMnTHat3e+5WGZY3QxsMeP/wyHbXEKYlzkghTAtsa4wkaghiS1YFZHWEHx4QRAnHHuFNLAShx3GGzKcnnMym9HXJ0PM4nT2hrzs0RSeLYnbbJcOBwcizGA48pF4hizLi6IBIzfXb14wGE8q8ZmANuDg/ZRMsyaoD+/CBs6sFg8EAVZM4Obd5+bGHqjcUjc/D4wc2ywbPO+X8YkGelUhqDGJEi8DF5QtOzmfoToesFVi2jq6OSeKa2cLCP6SURUdVtwycJ8xn58zmE64uFgw8m7jMKLuKk5MTTFnndDChjUrKImW3CpHlElVXyHONbZBRywZR06I+/4zx5x8zn5/iDU3qJkdG4839DVXTksQ9TS9SdhV3q3uSMiKMA7zRgCBaovQSbS+AVGLIUOctd49bJF2mzCP8smIfHXAHc/peYxsGfPHdV1zfvGbknPDv/HsfodoVRdmgGDbfXn9NJ3Uopkyr1ORFQN8KBIcCx1qAfGC/39KWA0xbxBQNpHbIYDBF0Q3mpx6CFpPWJZ0J56cDVFkkT2OaLmS2cJhMZny4WzKcuLRdwXg8R1EUZKOkrH0ce4ShDbFtkzDaMJ/PQSjZLEP+5p/9lsuzp0iCgijFfPf6GxTJYzp3KUsfRdSpCwFLH+KaBpv1kiRtaIWGh/U7FDTyoGE2mdL0FaLSIys6tmPgB1tGwxmiKJJmIbY1YjgcUIQJtC1hlGE5Nl3Z0jctfhgynuvkVY7nnmKZLpdXI7q+wNAHqJqBpFVUVYVrzynyliyP0Iwjc74plGMxfdkRHPbUZUEe1yRBSFVFWLrLxDYItkvyKKfMZbyRwzbIKFFBH4NkYrsOvp+SlhVpWbDd5sRxy/ubO+rawDRNVqsVpuEgiwqSIPHTn36KJB8oMx3XGXL74QNlanN68hR70HE4BLhDj7fvrlEtjenphKvnU2RZRBQ6/EPE7Tpm+sRmnwZ82N1TyBW1IrIKfDqloe5NJLXGm6jIes9wYtPJCqVYcfVqSNLlHNYryqTAtBysqUWrHE/2RSbQliJ5mbN8CAn20NQCXV/+2xeUP/zhhJfPzpmOrxh6JyAafPfmO2bzMWenf4osOsxmC9JYIMkzGkpExSLLG4pUpctHNJVCXdeohkzbF8TVln3+HVEZUygNm/CaL39ZE6Y+LTnUcDI5Z/PYkR4KXnx0QS12fHN9jTtc4IxUekVBGBi8f79hOh3TdRplmeEfPmA4MtPZCcW+ZTZ2iYoVr+9u+Pa7NZok0PcGva6zzXf8/VfXbB4F1quIZ89tOjaEu5AOlfVdhP+4xRA6RvaMwy5FVhU2Dwl1FjBSPZTS4NXZDxk4Lkpdsxidc+bNCP0j+qyIAyZjiyyRMK0B28M119dv6OqAIqpZRQl5UVEWInEuEJU1URJTpiLhXscSNRTBYbwY4s1sZrMJQ2/GZhuhDnTc0ZgkPSDrBYvTM9I0Je1Kgrxn5PR4Ax1ZqBBaCcVU6VUBUSyQRI20hY9+9AlPX07Z7Ta8v/2AoLVomkJTl2imQZoExFlJqdRQV5yNLvjVt7/EcDosx6RLVBx9gGKAbqhkaYIkyAzHLp0sM59c4o1P0LSeVuxJs46uqKiKgl7o6DMRseuIKWjymirrKfOEmXuC2HRYuoDqKpi2Q50KtEXHYnQMw0RdQdspfHizY7PZMJyI6ILGj3/4Of+9f/xTFucfcXJ6yWq1RFKcIx6uqcizBtWUuHz+nPFkjqpKKNKQ2+uAzf0GTRBIUh/TNdGo6P2K6egEdy5iKgKaLHGIDjTNjk5XifOCKGrYPGzoyxo/CdlkG5peZ1MmOL1Kvi3AKkiqirqSkfUesSvp8pTtY8DHr55QlCGq2KAKLaoioOlDVHlA3ZScX5xAr2A7IIstSZ5wv93wsM/Jo4K0aJidn2LZKvqVS9tmmNo5gthQCT2iIiOJHZcXFpuHBwa6japBnfy/afuPHdvSNE0Te5bWa2tl2o4+7uHuoVJVZhULXawWbHSDowY44IRT3gCvguAlkJxwwglBgAAJoiozqzKzMjOUh4e7Hz/Kjsmt99JacWAxiVk0kBz8gA1sYAPbe33r/973eRpkZJ6eX6CgkqUJwaFGFi36rs1259MzNdomwHCgrAIEQaEoJCY9gbHbp+/2SNOU7a5mF3VUZQZ5ynK55P0PN+z8ANmRCH2N5JCSJzHkGq7cJ99BEZQsV7esvQIBlS4ukRODMvO5Xr3l+OXJo7vcW6NkImksYIklJ84QtAatk1AGGo6iM9YMwtRnMpR4/+Ejmitzv95RdgmS0TGazTks16CKzFyV2cBAUTSen59CWCC1NlkpMF3opLFInGS4PYOsKf7g7LwDqiozGKkYQowtOUT7isXJgDSOkWIJ1wK5VpnMTxlJCj979prpcEGeHJB1nVbSudsv0eoZTZXiHSI6oaOqBbJC4hDESLJKcEgYmEd8XH1kmx+4TR4IyhBdtWji4tGY0nXYio2lqo+fqVolTyIMrU8rpNjjjsn4gtCPCLyC05PPGIxmSKJIXuZIjobTH5HXInECujLD8zzGowW9Xo8ysZA6Bc/fMB4Oub25Z+/dsdkvefvmmoMX8bC+JktryrJkOFaocol373/Hw2rHahM8biPOHPzC57v335GVG7qm4M3v3qEZLYb2aNpxXZFnz06QBImubbm9WRJ4OappgSJQVjVhnnJ9WBPUHTkyPfsEwzURFZGulamKkLaseHJyjNyWRP6SeL/CrCvKSkQ0JBRtxDdX31DUFXmUUxQFnXQAUWC+uGA87BEEG4o8hk5GsgUUUaGOBUSxwtTmXD4ZMjREZH+AI1pM7EvWtx6yENA3WtpcJklE3l7/wK9+8x0ns6eUyYEmLnh6fsGgZ6DbHZqlYC/GGGcC+/SWbz9+zdA+Q9UkxjMVsKmqCkVN0QWJ5W6D3newdYNOjagqAc2R2fsb5qdT0DX2sU8n1Oz3CUVXYtkah8AnSUXEfEhPNtgvr4mjiuPTYwRFYLUJkLQ+k6MzDNNhvd5ydr6gP3J5enwBZUlTqWimTM+YcTHu4xgtvckEXVW4PJkzsjVEwX+khTiP/N4uLdhvY0xLIY4KDEsjzva0FIiSxG4fkkYtqm7Qijma5VIWDYNBD9s1GR/18eI9VZ2imnsMS+RwSJgfH5HXMW0NcmmgyCZpFCN3CoZps92uUQRI8wJDEWkaMK0j0AsuXp6gWTppVpDmCdtsT9XahGlG12XcXd3i9MaP9jU6mqbDGZjIls5gfIyijYmLhLxs2Pt7knbN3/7n36HbEpMTE7NncL+74d3VW1qhpRYy9p6Pt095+mJC2SbswwOIMnWpkvgH1vefCA8etu2iGR3TY43v3v3AZDqnrxp4qz1i2RFtD4xsC12SUGubkdzhaDpS9dhf0WwNVVXpug6EhuPhiN7AhE7D0FWmA4c67lA6CV3VENszxErCaAwcw6HuYhbjwR89UP7RpZw8dvHrBkOTcccgSI9Zo35vwLffLpHEnN/88g1V1jIczhg6J1AdSNOWMi+RpIrjkz5F1qLpKePxiPFIYDQ8ZbuqKfIKb1/gDuCzz05o2gxVmhIcIpI04l//2x+jyCKffndDT+vj9G3mR5dcvQ+QpZA//flr3nwb8+XPFCqh4OamYrZw+P777zl70acLXfQkZTSqiEUNyVSY9BLe/nXN7PKCG+kDtSCx9wp6U58i7ygLOHt1yXRxhqkYNF3K3f09T54tuL5ZUjcZoqDjmBapFyMrOfv1ktlwQRhnHMItXVXTN2cc9g/kFUTlkp47Yb2p6E8GNE3Dv/+rL3l+OSfyKvIqopYMshSu393T1BKi6ZFnjzmVjb+jBZqm4cg6RTVU/OBAHhuIQsN4ZJDFJZZl0FQFmqiiijLvPrzH7Vu4QxtZlkmSmCzLCPOY48Uxm+WGKGzRjIb5YsjYecFy9ZHJ1KapDOLsgK1ZHB1PyfOWtOro2oq+6yIrPfpjlaKLKKoUResT+HtsZ/V4K6ouWK/vMSybIuMR1dImjCYTOhp2+w2GZNBUHUkac3R6zg8/vGPUnyG1Cpkf0to6hmkTp1usUY1jKfTcBWEKhzilb0koWotYK0iCSxxANSjpGp+iUBjN+9j6axSxokVi7R8oi4gWB6GBOE6pm5LddoVlKaiqjiwDrcZ+m9K1El2ZEQUuTt/i4WGNYgqopo7o67w6PeHuzsecFmwOHp2iMT89pkoUysNHurrHfh9yeXGOadrc37xD0hzWy4bZYkzRJgzOaorGQ5VqfvTyKZtNid1vMG0Zfy+RlR3BqiCKPvCjL6bc3iwx5SH9uYvStIBKmbZoNaRtjvcQoiYSo6MOTR6wXi+J45Tjkwv2+z2K3kO3HstJ/XFDnEQ0XcvuECBLJo5roeklXrjB6uuEYYGlzYCcwAuII49e36DIanRdJ0kiEGREuaTf7xOGIWmSMztaEKY+ddWwftgi1KD1DOQupygkuqGN1DUonUyYaMxOBI6PLnD0jKSICbKIKvZBFFCVhqORBGlOfWiRVZezLy0+XX1LRUjl96gag0aoGEs9bOmUP/+LM7Ik5u7qe17/7DlxviGNtjydf0GUdrz79oa/+rMXvPnwgVevzojSGSUQhz5KM6FqC44mPWSxRkn+8B28kWQ+bpaMRzPckzmu4vDNd78lCaaP33sjg822oqhSguQ9+aHh5PJnfP3de05OTinzgDSJaGuTMJR48dmPuT3cEvgb7MklhuywTO7pjIYkKWiKnMhfE8ctmiGgNhLxPmVkHKGjUpQeCTW6qtKbCAzsIZLScfB29IZjqjrnRz9+yb/+t0/5m//4Cy5fGBz2JU3ax+3LZLcHgiJkcTZjs70jy2EwXeAHa/aHDZJoMp0f4/shQZJRtQl12WGoIzQ7IO9CWlEgLSqQWxTZ5XDY8OrVZwiiSZyv2O5LbpdvePLiOYoq0rYKgjRkfnSEYnQMbZXdbo8qGVRNQxT7LE4GNGQYtsTdekkrS/jBnsnwhG+/e8OTzy7ZZQGWltCmOUnhM55N0fUxy/uQT9d39HoD5E5kOhtw8/Ed85NLHNsk9zwMtaFqJHraEXmyIvZLOrckSRJoYTF9grcLmM8uWW4f0FUJ0zSoK5G6VkmiGtNUQQqR5JZGCPj5n79mu7/h7mGNYdhMZi6KmnP33Z44SHhyccl+76GoOuenn7FeLymqgsyPqKoGEYk4Cmhqg9FowvLuHteZoDouDQW0Olm85e133+EofRQJWloi4REBE5HRtRK2orBebqirCkNsUUSHro4Zjfp42zWp39F3Z4zGGvv9lqPJKYIgIHQlrqXy4skZDzdXdEKDJKk0dcbUPaNLVG7WVwwnMttVxklvxKffHRgdDfGqLaal0xYjNM0mzTOurm9oOgmEhiR+xOa1wiM0e715YDyakSQBAh3zox5FFXPwcgbugLpSkFUN1+1I05R+b0IURfh+idAYhPsKx7JRdIHr5T2l33B+ekGabjgcDpwsjljd7TBcE9uUeXN9xfnFCyK/gM5nurjAMBW++e0PaIMcy6oRawFDd8iKlNDfIrQZ201FVbfURUjmS5y/nrA9bMkyCS/yOL8c43kPWI6M5eiEQUpXyUxmNgd/ybB3Rt9pOSwPeNGB25VMWudYloFaSzx7/pLRn32FY9l8/PA1y+0Np2eXbDcBjm6zXXnc5xWz4Yx+f8zucE24rpkOLeZzl/Cg4zU1iVehqwKaISHmMrYxpWcYFHHMfN7n4SHksE+RZZk8rlgsjkmKHFmuGY7HJLuKshbo0Lm/i/7lB8ok8hBFEcMWEYQE2zX52U//l/zil18T+DuKWKeot2iyjqoeEYYe9w/vefXqM7omRXdaSjLyJsPUpwx7J8TR29+DtSsuPzPoyg6hgOz37EXXsVC1hC/VIX/5l/+Or3/1A53whi++uERRHT5+2HB9dY9q6uSTB87OhnSKzX6fUlcVnh8xOBoxdBp6J0O+/VWLKo4xeh7OacHbbzw+/8kU3THJ0h59V8bUDMKlhqMXjGZTqlKkocYPAzRNYT475eD53N1sGY3GpOmBoTtCHDd8+8Mb5sc2QZQSJCmLkz6yMWW12zJ2XaZDizxRkMWUxWSMKNZUZUeZl3z/uw9oukBWCHSiz3Sk8/krjbPLV/zqmx8ec0yI6IbKw/0KVVaIfI/9cokiiUiui2FohHHEbhdh9we4lk6R1RiajSpkaLpCVVvc3tzy5Y+fISCzvD2wXO2Q5R2q1AehZTobs1nd4vZMFFknDPaMZkN2qwB3YlNJKVm+x3V7LMZHfLq7xzFadL1P6De0dcL5xQmiYCCgosgCuyygPxxw/WmFrCqYhkiWVlR5hihr9OZDtsslqiziLR+YODZ1U+MnCYvj+WN5Kz+QxQllAYVZQ5eQZB5VlSGJU+bTGR8/fsKwC4S25d2HG44uTWS5R1OtePWjH7HafMC1Z0hbhdWupmob2q4kuDmQ5yGj0Yg4yH6//iwRhIqe4yKrCrQGCC2r1QOqYKGaGv4hwe0PuFs/rn6yIGGsaNSxSF5CLsb0+haHuwLThuGs4OPVNVWtkbNhNJxzd7MnLPd0lU7fabAsCamDNE6RVYkoTNkePGTVJC0f6A0Vvv3dElmvGY8l8kLhsL9mPD9CEHM6uUYWH73cmSPihQHzUZ802TOejNhs7ylbmE6n3C3viOOYcc+mrluSdMfxmcP9rQ/tI9/v9NKkLhUMtYdmlHjBmv2mRVV1dNUgiFKMYwnfq7Esjaz0aToZRbfQLBvTtMmriLTY4fYMtusD5/1zUJa0iEiNwuL5gsMy4Hzh4A5aouBAU4g0SU7PagiinDhdc/zkjHv/jp/+7BVa12OTFKRlwKR/wl/87JK373/gQILWaTxbnKGbQ+7S37C82vD0s89pfYnS9xhYc1pN4WJo4Yjq7z+7I7K8wnBaNKnjNHtO5KWcnffRzR677TVi7w8hv+nWR5f6CJ0NWUdYBvSHU4Q2RRAyqk5Dc1WUUCOJaxzH5WGzQ9MhDJb0euf425K0LPjpjz/HT64Z9W0MbUxeFsTVlslkwm6TU1YtXrmlzhRooUoTRFllPHCpywNt46BLY6Lcw9BtXHfGt29/wenZgtnRJUG6xLVEVtubx4xp15LEJaenpyyvlzx9ekGQbvj5q1fsdinp2ZAka/GTkDRPWJwc03Y5u92WZ8+fEkURraCSxgn9UUMptMRZi6qYLI5mFEVI19XM5n3KJsfzUqaLE5r0Dlkw2N1s0enR1y2yrGNxMmbn3bDzSlTNYr1d4dhDFN0iCEuSrESQPVq74bD3GU3GdE3DZ69eE2cJmqAThnuiKGU0PUKzXN5//AFdMbAsB0N3oO1om0d1XplnpGVM3zqia2voZDQ5oax0Blafg/c4hCr0acqOzz97StlkbNOKshRwHRdVE5BU8P2IThiguRXbYEkjdOy8HZPZEXndkmQNYbSn7UpOz2bkWcL17RueXL5gs/Xwoh2qJvDp5j3zwSnOwAChoa5DRFEg2Lc0mYRfXfHk1WdsbjyK4sDxZPFoCBIVLNOhFAqKOMZWHCRZJYwTBqMT5LpC6DaURYatG7RVhozLeOTg7zIsR2a3vKIRH/F2YtfDVnt4YYlsSgwcG0Fs+Xh1z7A3xp05lHXB8+PXqMKB5wuV2WnGrC8i9ODhLidOW2TVADUjzRNco0/VFHTkTKZPyTN4WL1jOByiKDp3d3cs5hNEqeX+YYWuOQhCQ1oG1E1G21h0XU2U18RlTd6JbLMlpqIxMCa8vXrHZDJBNW1EEhoyzL5KF7QkccXZ5RlHpxO+/+ZrRiOLrguYzcc8rDeIvsH5aI7Z12gbGbGVkRWJT7cfmM+nRFlIGYPjjBClLY45QpNqNpuPHPYdimajGzU7f4PQScRxyN1djOP06KqCJEsQuhxFmKBqLZdPL3EOCsu7Nf2JwensGLG10RSBvb+nKiMsw6XKBX7192+pJA/VUlk8OSer7pE6h83djvvbks++dLi+8fD9jsunU6R1yuWpzd1mRY3LsKfiByFrL6coPI70Ef2eTtvWCEKH644J/QhdMWmFmixLCNOaJm15+uKUYJv80QOl0HXdH/WL/+P/9LT78qsvaEqLum7RLZG3V79E0nLurjpiv+Onf3pKkZp8fLNGszIcx6KsJJquRe3F7Fc5edDjyz9paHKD3eEGJBFTH9MblXz8cINrz/nxT16TBOVjI3rY8ubbFcfHM6KsZHnb8l/9m7/k3bff8n/7v/6/+N/+7/+KnZfyiEpK+Pj+LS+ffUHVijSUtErCr3+95smTPlmsoKAyG8sMB2N+9dtPXF5e8PU/v+Ov/uI5aRWzXmf03DmKVON53uNaQN8T7Bsuzy6RZZEkz4iiitVqxXBgY+ku68MS17FoC4WWDMvVkBSVOPEQsZBFiYY9PXf6e4dqi9CZREHDw/2Oga0R12sMc4gkmuRxjiZ3TEYaRa5Qk1E3MJstWG32JEkGzSO6SVMVvDQjSUNkGfJCwbZdVL2hLHOasqBBYjxxyWKZsug4uxjx5vv3pEnF/GiArgpURQPto5/X0FskUUNThuhmR1tX5EVL2UgkdYYkVaR+ytnxM67vPjA0F+iWRJBEhInHxcUF3i7EdRyaNkbVNbxDTNuIzBY9tusNpmkjqY+galkWWa+XjAY9uq5D10w2mwOqrOI4DnEa04gxbSOhCg77rc90oSLLJgc/wxlaBKFHvzcmSz9h6RZNYSLIBYrmYBkKbVvz7OUrPr77SJYWdILMwQ9oRQmlEqmbAtd20BSDwE9omgrVgI4SWVY4mh/z7u0nnJ6F2Oks1xvSLOP0fIqi6UxHFu+ub+iNdEpfYr0KsScpEiapp2FPY7paI/dldEMmzQoMw0LsasosJI5bTKdCkkSyRGB2PCbPGj592jCcKkiqQlnmj+DjTcP8qIdiPGatJkMTy9CJm5xdsOdsfML91RZJlXDdDldxaLqW8WzKarsiyQvyPGcwGJHnOdPeOffL7xmOLcIwR1P7nJ4es9otUVWZ9++uuTg7Jo181ssUVdFwBzZF2rA4GnK/ukaVXGxHJYp3VLXAaDgD4REefPNpS0YHUsnJaEjfmfObH37DeNRjd1chPBU56Z1zPNC4++EKqWvpOov77Zqf/+WPSPY+g4nLwyrh9u4j//1//+/IIxEvviXLO46nfdo0plJ7iEbH5n7HZ0+eUlUVv1x9QxeKnI0W7LcPpEJBeQ+aM0IyEoZHEybWhO3+E4rUJytSprMBtx/2TCYLOqlA1ed8uvpnMP4woF6GDdvVjv5sjCzmtJKEJBo4jkqa7CiKgjTraGoZy3QQO1AtENAIVmsGg2N0UcQeKwyHU/7h13/HzDliNjunbDPWux8QBBtFHJHVewyrZbsJqUuZ2aJHGqXMhyfEgcdw2CcvAyQFggNYtkKWtqT5juPjE5pKp+tqPH/9GCHRBERV43hxzn7psV7vmZ1MGQ5Ffvf1J15/8Yr3799wcnaCgEHbSUhyiSAIvH//iaYWce0evr9jOBySRCmG8YimEsUWR++RxyXD4ZCyS/B8ENWM6XDAYb9/dIE3GVZPB1T8MAWlwNCmNGWGHxz40RdfcTj4BF6Iqsqohk7Z5tC0lFmH7y+5OD1DkR0kreH2+j2tpqMoCnUtIogdkgS0IqqkMh7rpAVEwYGiAl3XGToL1utvyeKCsXOOKFXsvZj5cZ+yELGMEWnq8+z5S/7m7/4Det9CFhWqrKWjZDCaIio1dQW+51GLKdPRjO3qwGAwYLNbEwQBluFiqhZxnENXoOs6k/ECQRLpRIE49lHkmuOTOe/ffUBRNCSxQVVVslh7jIuZAXUJWtOnFEts3UAUNERD47DxMUc6TRFAo1G3GaKmoAmPxbCs8EjLhnHv0aZ0cnJGcNiTJ2A5GnG9oqr7iMKe/brj+bMfUZY+bS7j7UvK9oCiVZj6iOHMoBMzyjhFrFt0I0K0c+zBmP12y3YDrWAQxBEXT17TtiWBtydPJexeiSL1iQORrFzSNA2j0YzQD7EsnRYBTdMIkxhVFZFllVFvDm2DIOUESUnbwd5P+fInl3zz21/jGo9M5/AQIWk2PVsiqSKqEk5GJxRVhmopbG/uCcOU2eKIMDkgKxqKbqDIPVrZf8zs5jlxVDAeD7i73dJ3e5i6ilDLSAKg+sjMkNTmMVqWNrRCRdMqCGqOJCoEfoZjaYhSg6bKlGVO33FxnAGCUmMqQ3b7JZdnL1H1hh++e4+sgGv1kSWN4djAskd8//Z3tLig3PJwU3FyNMEdaYS7FLERkKSC7RqKUmZ6rIBU49hjsriiUxqQcoKNTxxVyCoIXQmChCiZ7HYbjo4nFEVJGkJeNLiujeyIrG5Sqi6jP7CIvYarX3wS/kUHyv/j/+n/0MX5Dbv9Ek13+Lu//QajF3H6XKLNz1AVhyQJGI/P+PU/v6M3BMex+XQVMpirqGZEkeWIZZ/PXz9jeRew3d1wdKFy/SHnT/7iDFkyqLqch9t7zs8W5IlJ1d3w8vWfc/X+mkO84vzkC4J9hSqArg7oHeV8vL/iw9sthCJ//q9/wv0y4eHDG1LJozZU6lBjdKRyd/eRn71+zvOjL/jh+zu8LGcym7K6XXP6uodr9Pj44Z44CzGsMffrDV2XkEYpZSxxNJ/TdglJGpBkDYbpIHYKRVpjuy6SmLN+8NANiclkQtNB00TY5gjEDtPu2Kx9VENnPIckVKhyizhKWVy2fHpfgNDhRwcWxydsdw9M+3N2dwEo2WPgWHpECZV1i6Yr2IZOr9djuV3R0iCK7eNtCSKm+cjbC8MDIj2mC431ao9tjzl4G4JDztHiFNNp2a99mjbl5z/5V3z9698SJz62baLrJobWZ2BL7BOP8fiMzdLH81ccny+omo4oyngyf0parSnLkjdvrpnM+xi6hCLLuJZJXnfsdyG62SF2Kl1j0pJQU2G6fQ6HLU1b0XUdqqygKBp5XGBZFpr22IoXJIEwDJnOTFRMyqJGlgyarmXr71D1FlUxkNAQeAz5+2HCaNTHTyokKrpMxHJV7P6ADx8fUJUOU3QQVJE0Cum5DnleIPH4pt6Q0bQpp4tjtruU3XqDaeoYrkSW1iiyRq8/IswS9t411myKF+ZYqsVu9cB07iAUKnmYPGo0o4jxwOH+bsvukNN3bQwNFr0jku6erCoIo5R+f0zX1HRdRlOpJHGLpKSkcYepnTKeq3QUBH5GmlToas1wZPHgbUBQuZxfcHNzh6xK2JrAoHdCQ8lmv0LWFQzDoCwqukbEshygRlZEdps9SVTz+rMXeOESQQLfK5BFgeMTm/VdgiIbaHaLIKokcU0UpuhWjtT1GI+HhMmOWhBQNZM0TvA3EfZEIqolJj0HPdXxNimBEjM8ltHrAYVSYpsW4c4n9zOi2KPXn9KfKzx/8Rnvf/Oen37xnH/6u++QlYaLFydY/Sle/itMfUxVhvSsAVlxRJBdcTKdoHcjPt1dE5s5dq5RGioGAYfNGkOZkAoCQlMj2hJyUiK3JoPpkLv1DkUAXVFR1T5pFdHvD3n77hv0Tv3DgVJQkCydss24213zbPHqkfkodaRRznA0o+pyyrJCFFQ0U6BqarJIRG9rrIHC0HaJq5bNZodidYR7cDQ4nj7hEO4p1ITRdELix1RxiaA1iJJCllW0bc3AndFVIoKUAQJpkCHLMoNJzfohY9CfkyUtjmsRpyt23o6+o0Njo9ry43q1lkGMaQQFQ7Hp9RzqSuZh+QlFUR7/R9oOy+yhaBo3t98wnRyzfkgRhQ7bNh+VsrqMd4iZjvtIqLz/4S0vXz3HCw/ESY2sNwxnC6rKQ5GBtiMvKjSrR9PVPGzfMpteUAQ5PaeHoim0dYXQgKoY5A0khx2KojAYjbldf6CpO06OnyOJLYfDDs1q2e1WDMbndLVFJzbYloYiSjRtSZQGJGmDrhjcPVzxs6/+lCpPCA8e08kRRdlSthFlG9LVFkX6qAW9eHLOw/53RGnNbHSCoQ1RzB1RJLDbRlhOR56X9N0j2iahbUqauuXu+oH57IQ8zek5Q9IyJi8Chv0RiqqTVQmO3SMOw0cmcuyzXxeczGcIbUbbKGz3AYvjMUEU0zQN/Z5OIzgIWUGVhwzHTxCbjiDbIhsKXVWTVymKrlGXHWNnTJ6kpFXB1D2iqEMMwyQMfCxjSBRnKFaFYphs7+6ocgM6DU1PiYKYyeicycLkEGwIMw+xkZiPj9n775FUlaz1sY0jNHnCbrWkbFrGxxqNmBInAqPRhDg4IAkak7nCfp8S+xqyHlLkFbY1QZFBFEX8aMNkvCArMyRZoMwFdLmHpmlouki4SZBNkY235unLKW/evKHODXq2gyyZpKXPbHGEpJoE2y09XSRsYzpB5tw6YZ8mhFHEfDEkL1vSNCXPOgZjAe8Qo2oKaZZT1TmSolMXNUPXRGg1PH9LnDyWVOazI7x9hWZm+LFHGmtMFgIdNqIoossGqtpy8O9wnQmm3kOQcoqwRDFEBFXFtEbYpsq3v3zLX/zpS2IvICpDHHtIUYk8bO6Zzi6p2ECx4PRJTFM03F9tMSSH/S7k6YtzFLPm6uMehBpJd7h6e2B81Gd6pPNwtcLzPKaLAZGXkFc5HTaqIdAfWLSlysPtisHQoUWmLFPqWkXVO/IsQBRd3v3DHzdQ/tGlnH/+5X/mv/zj37Db7UlinydPj1E5Yntf03Sf+E//8Q2frpfcL9/zZ3/1GttwMQyDFz8aIcgNRxMLsYSxvWBzEzKy5vz4R+eIdcePPj8mjwXidMt+feBk9pq+cczVD1fkecly8z2SkqO2BvEhfFT8DS38bs3tdsO799cUG4FBb852e8PXv/hHLl5+wcB5xkA646c/O0Yk4eXJGXLT49vvH3AnMmPLQW09nr7QEFqN928/IjQBUiuTFxECDalfYIkjdF3nu2/f0TUCsmRSleCYfSRJpmoLtrsleZ0xmOcMxi7L7Z7J1EYUNOJoS+IlmLJKl8PYGkBWI1cqmpiymMhkcYbW9WnihteXl6RBgmIY5GJBKvlkaYUq64RBjG06mLqOrug0TcfHjx9BENBNBySBIFrRNAl11VDmHWGU0XdNNusDqmaQFD55c+DZqylx5nN/uyPJHllcb374HZN5nyeXz+j1FtRNQ1LEbDYbikLg+uaOPPXQVJMka9iFW5I0pZZ8hqMJujrCNC0sU8G2ewRezXbjEwYJvu+TpjHDwRTbdjl4AarmoOo2tQiKptFzXIZOD7kTmM+npGXCyl8RlTFxWdAbjSjbitvVDkkZcrO8JS5XFEVFXapURU3bVbg9A+8QojKiLBuiMCX0CxRTpxMUQj+i75iMeyPyIiaOQ6qufrSNGAJ1k7Df72kbhbqSCbycTmh48eoIhAZFkxmNRmiKwts399zcrHFMl8aXyJcl7SHAQuPd73Z8eLekqVroEp6/uMTbPwb/HVumbSoMTeGznx6jWipJUWE5x8SBiCE7uPqE+48hZSkhdCbHJzPaLmO7WyIrIppeASXPTk6xLAu56hirY+4eAmpKRgMFTbVRNZE0TanrmsALHvmwDeRpBlVDlifc3x5oaonjozFNHRMHNZY+wrF1bLvP3XXOfD5HlAuisCQKaq4/3ZGnAqbhkiQJD8stm0NI0TR4kU8UpwiShCwq9HoKnehRNDusCYwXFlnuc3d3TxM0UIi0jcTz16949fovMQY67qDPb3/7W9xBiJ9f0dkHRk8F7sKvEfUWdzjk4+2SOFW4PfhMRjKSGnHwllz/8J779QcIYlqjIbvb468rtNEZfuthjwW0fo+eOaATaxzL5cP7G+y+ia5Z3H/aIQoygmCyXG04PX6BFxZ/cDRdwdZdetaULhPJs5IoDUnLAkVxccwBTVUwGriASJo0FHlL19XYPZWdt0EQLHy/o25FmqZBN1QM16KRa1q5oe+O8HZ7dvsVkiKjiSb+bossysznU+JsR1xsqGqP3UOIqIgomsF+3QItcbLFcXXi9AHTcdHMAVmuI8kWYZSQ5gFhuqJsCppGQWxFtqs1QiNC2zHo9anLCkVRcN0emuwwn89pG+g5I548uWA2s1CVBqEpScOM2K/RzY6XP3qCM+o4Op0wP9OZzIak5R7TkjF0i7ZREFARBRlZlpmNj9nsVhiGQte0ZGmOJBvEQYlhWFSk1FLD6ZMzlvsr0rrE7PeJEp/3b2+xnRGj3glFopDHEZKYkyRboigijFOiuKYuFdIiQVJKFpMj7h8O1E1H01X4cUIjlniRRxAUKJqO4YLptnx6eEtaFtj2mDQVgZa765irDzv6Q5Uib7GUBbZhkkbZo9K1flThnhxPGPQdijTBcnWePT8nLzNEUaSqCqIoQpUdulqjTFVsXUPqWjRpiNyYnMxnNHXNuH/CfDJAECw0GybHPZrO4GH5iYvnE9pGocoFFBUkSaFrFWxHI81ibGuMrmocvCVxmGLpAwREomRFGO3Zb2PSMCCONIq6wI+35EWFaU/Y7Hdsw1sGRw4vX3+F0XdZBiFxJ9MoJlXp0tQ5SeBRFgICEl1jU+UGgiAQBwfGoz7zucV+47N6WFLVKdPpFFnWqeuaLC2IggBVN1ltPBTZJEsrRElAtyXSLMA0eih2gx89YDoyb3+4RVfmDAYLGrGhkHc4pkie56RJQs9VidKA0C+QOp2H7T2NAHbfxHRsBLF7vAkWWuoyZ+C4KN3j5VJVVYxGQ1RFJ4wOpGkMkoamTZjMZlxd37Hf74nCDE0eIFAT+ClhkBH5j9aowy6hzkQkUSVNc5Isp2ok8jrHdV2qvGJ1s2UwGLE9hFRCRyO2tMiM+gafP32BpaSUQYlr9Bj1nmNqNrqpkTYZR8+nfHP1zyy3Ea3sM573mPb7/OjVMeenM9rmUVcqKjW1UNOIKnFaUTU1oiJQNiUtAqaj04oVaZIhNCqyrCKLEopsIPD/B7C5qO5weiJxWOP5G/4X/+4Jo6lCmWgEXovjFCxOOpx+ww/v/hOKGiKJPu74lsvnIAoG/8P/+L/i6Fzi1Wd9Xn6hIIkj5otLzs5eUNYNiDHHRxfMp8fIrclPf/wzHOOC7TaBTuTJk69ofw+jvbkJGA6HLG89fvbjP+PP/vJzLk+GpPmWn/3FZyg0nJ0PcWYlX//yaz67/AxLndLUNqqjkJUCnVowmp7T6z/jsFzR5CVFJmDpFho6096IJpzg6DpZnDJwFlSZSFerWOoQOoWiBE1TcQdDJEXk6fMfsw13aJbMu6tr9t6a7d5Hs1UEVca0HdLigKYNkBQDq6ehGBJT+5IgXbG41NDNmrqKkalZPSyhUZlOjmkbkaP5Md7+gLfdY2oqSRSjKTrDkct+syf0IgZ9F7kT8DYhgZ/T7w8wDZmeNaRrVapaoG46/NijI8eyLBYnU4aTOYIos9/vUA2JxfERYVQSJHsOccVytSctS7BB62vs9j7Ujyq9m9WKdx/estt7eLuEwz6haWRE0WQ4On3EFnUNZa7R1CJtl3ByckbbKERRgFS3KIKIoqmsPY9WlkjLjL5jorY1RSJB9+gXTfMM3XRJ8gDL1WjQOD6aMZ9OOJ4vqPLq0U4TF6T5nirrcBSVum7YHdZkRY4qiehyR5ak1EKNqqsM+kOm0zllWZJXCYoms92uEQSBoi5JC5/VdoVhaMRxy/39lo/v70myGFuusRWItjtsvUaqUsSy4/OnZxz1JtimgmGJ7A87GjyaskMRXMYTiZEz5sufPuXt9yuaQqRv2pzN51hWR1YkTI9HDGd9nKGJ23exewqKJuIHAQgytl2Rlgm7g09Taai6guyW1KrCLuxQDWiax4GgrkSSpEFTHZqm4fziiP5QIYkVDFPGsAssy+Dq4+PNlCA2pFlFVuVMZmO2hz03VyHxAbKkwlBdXr+as1nWeH6C54UoikOUZiR5RKc0WH2JpizQKo3UU+gMgW28xd8nnM+fMRzYVHYEloQkidy9fYfSbtCUHZatMxz3sNQx13cbtJFBp5u44z57f8thXTIdLJAwuDgbstv8F2Ivg9bCcuDsfEaT6wSfDjRGQ/9kiljWFEWBUJoMrFPevt9QVjayViMZLXVX0+v1OJqNuLgcs15u8YIEQZAQbeMPTuj53Hz/ni7tOHGnxHHOYDgiTSSqJqHrIhx1xOrB4+AtyZOaNH288dysEupSJYwjqi6iLRPCbU1RJGRVxSZcso8eWN3v2C8LmhJ0yyCMIvq9GVGcEiUhZdVh6H0s3UJVvcfsZXagFR5tR5Y2Q1Za/CikrR+HC03TiOINRdqgiUd8/uwvEUqHvm1w7X1Ccg0UV8Ed22iGiqoJdJ1AnsW00oH9PmO3TXj9+TmikrJebbAME8OC4UhhMh+QZCHj+YTlbk+QPEZWVtsbqrLksA1IgxTXMplMLJoqIPMTulTD0gfkcUlV5LRdw+3NElk28YKI7z9+y+DonKKVcHsjREHDNm0UqebsYkxRB3z/5j2qPqRpWwQ5w7QbsjwmSj3iNELsRBSpR3goKLOUug1ouxo/KAiimrys0C2TVhBJ0xhJsOn3L6DTOOwqGnKqqmK7vyPLI148P6auAoRaRBAK/P2KPM4e5Qu9EV3XsD0s2e43jBdjBEFge/AQUHj79j1pFhFGBx4eVpRFh6kqNE1DmLSklYDsyOiOTNuAZfQQKg29B1UdszsU9Kc2509n/Me/+zWK+ojHSaOSOu1IoowihyTO8Q7bRwmFWCFJApvtkvn8CFntENUQx9LY3HuoQofSdRyPT5iN5owGJsORgq52fPjhhvV1iq716E16yJrDw92BQe+IrE6Q3BZZcdjs1ghCg+vYWLpAfyDj7RJ++Z/3DN0ZF6cvePZ8ThRm5FnDaGiRpiWS3BGHjwOpH67RdImyaFAUhYtnp2x3dyQUfFzdkjcpSZETJiFZ7SMoCpJi0nYyQteiUpLXCWnbYGoutqJjTnQkpcZxVd6/f08YeezWGza7a/bbLVVV0TQZSRChdAZF0mLofWiUx6ifDXWz5rCJ6FkurvP47BXpaLsKWRigSRqypJGkMbr6yPbcLj2atuCwD+g0kbzqOBwO+FuPpmgZjzWCqETpu3QNrNdrvnv7jtvVhrJVUDWLLL1BqTXWqwqkMY2msSnuKWSV6/0ngrziEF1xvfmWsIhYHe5opZTdbocqGghlh4GA4/RYHA3J8pAkLfGjEEGGIi/pOoGm6RBVCKOEwyFEtaw/eqD8o1fe//6/e9H963/7FWlYEKUR8/kR19dXjOc2V+8ChrPicQWWwmgk8OL5MWks8OH2mqJrUYQFUityemIS+Ql1HeI4x0hKj7xoCYN3GHZDHgwpoooffzUhDnU+LN+jjyLmo9d4yZb370JevjyjSWT263uOzoZkmYxmVaj1gs32HVVVEEQrBNXg42qFMxB5PXyB4Ryz829R5BBT67Nalbz88ZDvf7tku73i+OyYtIDAkxGEDknQuPu0RpJbXLtHHnUIcshw5JDkDXGWEsUldZNSpyJxlNPr9UjKHfNFj8hPmPbHTHoT+jPQlD63d+/54kdPePfDitOLU8bDY4oyY38Iud7GiP0tV9/75GFH3W2RGWDINZVqP5Zu/ICmKpjNZsiyTFFktALsgzs0ZcTF2Sn77Qapk6kKGcvtUQg7kn1JnCSM5mOQNd788B5Zgs9enhGGW1S1T9+dkWchumLR1AKGBTe3WxBUqqTl8nmPHz59pFFaTEOnjQTEtqETZBqpoe/IVImA0Gr0RzpJWlJkFYOBxt19gO20PD3/E+7vrql5YDx+QlpKNHJElZaYukFbtRR5jiw/5k5UXQK5I/FbNLtFUXWSbIdlzAj8LXZPJYoE+o5KFhfQNnz2+SsOh5w8j6na4DFUL4jkaYylazRdS5gm9IcD0iAhT1KOnx3jHWJCL8KxVVzboiwbsixlcTSkaStuVwfINE5ORtwsN0hijWv2yLsCS5Opq5wkqxHlinhbMpocUwk+q2t49sxlHwUMxgI373OyUOPpiyO8w4GvXj9lMtf4j3/9j0RRQ8/VcGyVvGxoFAF7OEZqEzTJIA9VDF0iSmJ0Q2b9sGc2Udl4EbpkoVoaZZej2iaHKifa+TwfHnPYBIwmC26XW6q2QVYEjk+GeIcbFkdDHtY1i3mfu9v3WPKUIPSwXZeKGKc/QpAgjwPqTGA6PMX3QmxX4O7uPX3nnPvtBkkpKIuWWtCxJ302mzUnsxMGjo1iFXj3e+TWolVzTLuHLFYImgCyTRYkxE1O6Deczecgr+k6A1XQOJ1OEdoBSXmDOxD5+H3O0+dTZCxGE433V79gfORiCSLXH9cY7muC/JoyzkG0EZ3HTKGjdxSVjtwVRMKKkX1MUsu4lkZVqDThjkZLUXsOM31KvNrRShrXDzcYjoul6kjlH76DB0mMZGiUXYRiqaxuSxS7T1VGJP6e//bf/Nf86ldfkzUF7khG1wvixKIrXXSxpRDvMRWNjZ9hy8ZjGcxU8HcfERsZRbOQNYPdPubyZIFYNfilh6IapEWGbirkaYGlKjRJjta5+E3LdKITHrY8f/qaLOn49tvvGB5DEsuouk0W+Rw2IZYt4ZgTdEGnP26J45rBuE+SRlimw24bIKAymIpUuUXbyORsoVL46quv6LkmD3drkiCnqQvCeMnxySV0GrUYUTQReSGhawYPqyviQGI4dxg4BiN3zM31PXbPZHtYI3bwp3/+E3719Rv0SmIyHBJ18aM+T3HJqorbaMXT6XOyaAcVoOjIsoyuKQhqyYf7NWm4RNcc5osBiuTy6dMnnjx5hh9t6BqD2EuYn5xSRAFdoVC0IkdHY2Q5Zx9myFKFIAgMByM+Xr1j2JvTH0zZBNfcPxwQhR6mE7NbBQz6BpY5BKCtM8oMmlIgyzJEqUPVJeq2oxMUej0HxEcIfJp7aJKNommIakAcZXirktOTY5y+wmadgdoymvcJ/IIqzbENiaE7pSgrGrcijUPSqMSV+0h1yT7cImcOiyczDquIpk2xx328fcFi2MM73CFLBnFaYxoSstIxGpwzmw958+EfKFOV648eqmZjOCrj0ZSN9zsuLs65vt7SyjmKPKZwHzDaY0wMHOsxD76633B5fkZXtpRiwfe/u+fkYoKkJsiShuMM+PjuI645oz/SiZIKd9Tw8BBSFQqqFjNwnzAct/yn//IbTk5OkJWGOE44mj+lqnPyPKetTEplD61C6Afooktb55RVgGZO0M0eatehyo/bn0IsuV0v+ez0CcezKe93t0R7j/Gkz36TU9UZqtDD7UuEwYFB/whZKAm9HEEFP9/QtSpllCLLLmIvxZU0dGWOqlds1zGmI7NeJzjugn1wQ1OLNCUI5FxennN7HdC0Oe5EpG0fAeeGaZEWCetlxleffYaq76nLGdvDBwSpB21Nz1Yoqw2KsKBpJYYTgapsGdsD/DhhFWwRNIEnr0/48P1HHMXkbHzKs1eX/N1//v/SSgaIj5rNpim4urtDamQEqaToEjp0DjsY9ieoSkVdpSiyTtd1tGpDuA8QkDH7Q979zdt/2ZX388+PiLI137/7yNWHHUlUk+Ut159uUbSW9T1MpmccHY94+eTPaOJjEk+gzR3u36v86p++5/7hiutPD2xWGd99u6bMBb759d/z9ru/JvUllOYFu8Oep1/M+N37JZ3WkRYH3n5/zWrzkdDzUTsFsTIJgoC8KUAYIIgLnpz+Caqj4Hsx2/0dtdDHHI+ZTI/4/PTPyTudPE1o45btjUBVw8dPB/7Df3jH3WaD7fao6o7NQ40frGlqGU01GE4EBCq263taKUJxFGTbJW9b/GSLZlWPWja55ezlGHciMBgtMHojXr26YDEe0xgZ+1VKXdQ4xpjf/voaRVewHJsg9vntt2+olA1dG7L5eECsFI4Xfeb9M2zVxbRczhc9lLZGpuNHn79G12SKNKGp60do8fCU6fSxwdtUMppp0ZsINE3A7Q9L2q5D7QwMWSDYrtHSmq+eHCHTYIg9FEXh4X5PntdEQYlhaHz/7UfoEhwnwjQ0/H3LwBYwS4OxZqAJEoPBAEWVEdoGL2jJW5OsqfC8Pf5mw+nJDMOWaKUaWRiwfrglL1J055RGk2nkiDwOMVoNUVYopALDkhnaNmeLc4bDMaIs4IzAcIdUtExGMxxdR9VsQi9loAuUFQiGidpz+fB+jarE9JwcTRwT1XsktSOtfQzbopM1MikjiNbYhsbwdIpIh67B/NihqVvaVkDEYjKZcH9/4BBGULRYTorneaiyiGmapHlCnQVUaYnc2Zg8xhZevrxk6PYwxR4vXzpkdYpGRRRFuH14/dURtfqAjsfLpxO+/f4GWYXFiY49NInKlqSukRSd2A/IuwaxqBErCOI7WuEROmvrNe5ogdObIakCsiagiAam4NLXXMbzCUldM3s1ozD2yHLM0VGfoxOFtk6Q1AVektNqMZv0PaZuMxtOGYxm9PpjhE6kk0SCQOPp2UtkWyBMY9raJ68zmmrI4nhO1xacnT5lfnlOf2yhFzELS+Lo2EG2JKpoh+TqJGqALij86OQFmqpiq2dM9AGiZGKKApZWUEsFWSuhGiJhsGe92iIQUpJz/alDsyTWyTuOXsCnjzu2XkWjqGy8HqJuU3Vrsirm7UOI7FiE+4Ag3LPxAzbba2zXYmHNCTcF2a6mzBXy7NHfXCUiGgofP91SSTLoDfPFgjbKWN3dU4ntH5y6gizcPa6OE4NO6Nh9+oQ7thBFE0t1SJIIcyRSCSHbbcluF6JoOzJ9A7XBqfuUqT2kamyaumOzvaXtVCRRp98bkSUxmlojygKNpLL3DjRVS5OI2N2QMqqQJZVWEkiFAKXLWK3WqIqDv4oJVjvmi2OQFQzbACEjzWOoLQaTI/ojka7KqbFYHwL2XkGTl6w3S8KmoNVr7m4C8qzj2ZNn2LpD39Kpqi3//A//xMf3S/KuQBAbLMdlPjzmdvOJZbBitdkQxRuCbIfuDHn1+SVSC9E+4+72mrxZc7+9AkROpxNGYolZGyh6n6BOoQDdGlBLBteHB0aLGVGeU1OSpg0dJaXweBu/DxvaCqzhEMexaQuFMMpxe2OWtzf4S58yr+j3xtxcL5F0l07NqIqQSogQNAWhBlVU0DWLom2pqKnpCPyEzd2GpkiJ01vIG5ALEh+CTU2e1cidQRBm2H2X3kRDt1tmoyGapDEcuhwOO/Ko4X57i6xB0Qa0XUPsZ8jCkIsXRwhGzdtPHxF1OD09pSsaUt9HkUVETeHT/hOesMJfVwj1mOG8zzb1yZoCWx0i6BpZ5dPpOcZQZrta0rMtOjllNHfRDYejo2MkRX30VRcey9139NwpSdQyGPZICh9B6Nj5d/R6U/JMI04abNthNJVgIzNzNRRZJooyNNViPOnRKgn7PKaoMxbnA+z+oz3MDzy8rf9IHhhKbLw7yiZhs/Xp9RyOTvrUXcXeuyb0ZJ6dP0GVSrIwpssNpEZjt1xzWK8p0oC6KEmSALc3Jopj+n0XGpU6zygLj8TfEAZ7itYnixosReFmc83X79+Qei3DownFdc7YGtJKAoOpjiK1DIw5XrqnbGR6YwvP2zPQXHpWhWkbtI3EQJmhGApVExL7BWJtYio2bg96tkXfHCI0IT1XxbJs1quQ+XyMqookEURxTRZILO8yPD/BdBW2yZpPty1FmdLmIllUM5xOWCxe0rMuGYwdhE7EEmdIoo6XemR5g20a2OIYrdAxap2hqbPfJIRRi6iPKYsGTaxJwhxZ7HEym2EYBnFVUNc2ZdFg9yKKdkNWNDiOg2P2KLsaS1MpuwxkDalq/9gx8X+Gy7uKaIohgpTz4vMJ2/2B5V2CoR7z1U/PSZOS++sDwSHm69/9HbcP3/CwXrHfb1nufkW/pzKe9Ki6lkZ49IJ/un2Haug8ffkT8gL++Re/oKlhu47xDhH/+I//QHDIUIQpbSOw3xRYPZWDt8Z0RPy9yK9//Q1eeMX1xyv2N2ssY8Rf/fy/I400rncC5uA5m9YiiXS+/vYNq8MSUZcJswov3fPm4/d8Wl7TthCHHUHo0TUGYbQlSu8ROgtJEjg9H9C2LbIIh31EHOWMRkNoNcbDCY4jcHY2ZjZzOD5xKPIdgbciCNboaocx7BHVBYsnpwyOZnSazHfv3/L+5oqtt+O3b9as/C2SbtMb9QniLX4UglLQCDWW1n/M40x6bNY7wiCjrCtMW6fpWsSqZn27p8k7RCklSQI2q5y2U7l8MUc1LZyJSlqXJEXH5ctTjJ5DnIm0UocolBRxjmWCKJf84he/YTo/Ic91bm4q3GlHIwZIUh/dqVnd+7x6/QRdNVDlGFuz8LcedRVRVQV1peD0B4RxxGq5h7ql1zeRtJLRTKNpIq4/fWS/SWhKB+ScKPaoC5lB7wxV1yiFA/toTRS3pGVOW8U4mkJdtY8D1e8B6HkpMBz02W1XVG2D5nZEXogquWyCGwy7R9EktJJOXraoQkUdRzSlgGE6THom1w83+IlPGIfUNGw3AbvNljDcUJUFd58yptMZ2cHB0SR6ukbkhchai+lOEVUdyx2j9UoaAd59vMFL92SlhGrbWNIRlZSRVTbroCVud+xXMc5E5xe//Ueu7z7RCQqqbpEkAaomPELyRYm2zlBrFcPt05gZZVXRlR2KIjKazlFNCUnqePn5OUUl8t3bBzq1oexy1us9pi2g1zplIZC2LZXs0akpQRyj2I9v903bER00THOM6sBk6pAWHrXQcX+3It2vSMMYsVYRhJxGrGhR+Pmf/xm7eM3F6VN0UcRRTGypT51LnJ6fkJUB3mHD1D0l26e0qcR6mXJ7/4b51MDUA5Y3D+zie4I4QzdsNEWkjiqqXcG/+tlfsotyvn3399zdr4nzT5hOSZFqfPPNr7H6HotTkYcPOzopRBscCA57gluFs+GUcPeexBM4GvfpSgHLHLDcrQn9Hj17wp989Qqzq3B6Fre3e/ISsjKirlss8zE7GIUhhnXC0cWPUSX5D46pgTGyWSyOmShTnFaiP+whZDlDV2EXbIga6BqTcB3jKBZPzmakNAwEifPJKXfZHZLYcTqz8ZIttmRzNJojixICJf3e49+aFwlRtqTXs8iSHKkz2Ps+ug1VkZHFFcNRH1nVkcQO1+0TJGuevDil71pIjYFjGAi1hNA5DKctk6nK7fUBzdDJivgRKC8JOL0+221AsEo4cs74X/8P/xP/zb//bzmeH/NnP/mv+OzVF9xce3SthOs2mGaLKLV0gsCn5W/QdRVvFyK3FiNrTpeXhJsIf7MlibcMp8fITp+wruh0AdWpCOOA/8f//TvSrCYr96xWGzbrPR8/3OMdHqAWiA4h2WGPqMj0p2MU5TE3fX17QxamHFl9vpp/jtopZHWJoMjY5hhNnDLpX6CLAnUboZsNbSMiSyb9sU6cJlxdrYmyLWHlc3u/5sP3H9E1h0oSCbqEoOiYz58wGS/YBmsMdcHi+IJS8Ag9n+Fgxleff4EkCKhyn1H/gsPBx/d9vENOVcrs9x4XJ0/pWgE6AVmAfr/P2ckxSZKRJTV1rlEUAQf/mjxPcS0bXdepqxZNMRESmzxY0xYey48+Pd3FNmR6PTg+sUmzmLIQMPUpbaPx7v0bsrQl8gWyasv99pq0LBguLNKqoGggKyVefHmEYpf0ej3GJxmzIwVNM7i+vqXnWHRtwfI+RDambLyERjkgKS33N/c0pYDc6hTpHrGTMU2I4y3D/hhV1BiOTQYjneVyja5ZtA2MhxOytCRNKixjSNtI7HchsmBQpTpZIqCoHbLS0LUqadIxmUywZYOeYSG3NWJX0VYFpydHDPsDXMNisuhTlSGJlyC2HbQ6mqkgiQK0Mav7O2pJAlFCE1WKNOPg72nbliZvyYqYMMmYTs/R9DG2Ocd1HJ4+m2A7DXQyqmYynl3gjC1Wu3uk2qJNC+QuYDo5Iktb+kOVJN4TRxE91yLxMlzD4uRixvPnT+g7E3RNYrteIbYibR1jaEP6jsbAcbl69x5D0XHMAbpqsNms0A2NupLIiwapdVkt9/zyH96iyBpVIxGnEf/wt39NtosRchFFEplMB/iHgCiIMVwZHZk2SxAbBceYQCvQtAVJHpK3O7IkIo4OqLJFU+dI/HFbbPifsfL+3/zvvujiqOCzL57x8d0By+lRFh50GopSMJ+d8bd/+0+8eD1F0Urur0MuLi7YJTeEWcjT03PuP97x6sln7P0Kra+x2SZUWcr5dML3V7dIsoAoikhCg663FEXBT776c+KkIMpyHtYPDIYOSVyhyw5f/ugLbu8fKOqMIokwLReSiqIteXe355Ds0AYubZZjiiaqYNDWAU8uZ6SZx/1NgqykzKZjDlGMoowIkwN5rtIJIaoCctdHUwXyNEbVeiDnXF8fcHtjZDXHcRzqJif1ckzL5vj8iOVqgx/s+PLpS+qkQ3FgE/rEcYzb79F1LVefPmAZJqZp8uT8CX//62+xhxWBV7MYLzC1luVtymTUp2shDjOyMqA/ctGNHnFUYDkmnr+haSr69pC67ri73TCZ9Wna6tETbFn4YYRhGFiWQN1AGgvU+Z6d72G5M0yjQ2xbvJXK4lQlSQSqQsQeqjystghyRtdkjMY2aVpSZQLz8YwyefS5f7i6wdQlAr+PMxA5BD5HsyMsq+O3v7lisrDQVQ3LsrAsi+12i2kbdF1HXtYUZcvZqc3DKqbvLlCFhqKMyLuaVuyoq0ebjiZCWzW0qEiiTM902W73dIpE33bIyoxt5OPYHaPOYLs70I0rBHlI42UM5keUYc7QMkmbmFqU0TUHQ5fYb7aUtcD97Q22PsEwGlznEVNS1QlC5dBUoKsyZV2TVQdkxaGjYja5IMof6FvnrLefyFMJ01TppARv19EbqSRegN4X2KwiJFHnZDrFX8qkwgpVE1DN37eHu4aqyjF1GzoFURSpm4TJYEAn6zzsVxz3XaTWZJ/HCG3D6fGY9S5B0xSKSqcRVPJ6w/XqE4PBBKWosAqJVZNj9WXStKRrUl48+Zwwj1nd3GC4U4owwzZkTo5OSOOEQ7RC1k3yVOLZ0TGdEPP2wy3Hi2PSMmFxfIEuqNztrpAFmeCwRTeNR1SJrOAMhrSqzvJ2Qy9T+PW3P9CfuSzmA6SuRRamnJ9P+MWv/hp14LB8F/H61ROUfvHYoK8N/vxPf8pv3v6S77+/5smrM+qyo8g3gEgR15i6TivnvDx+wTY9sK3eY2pjjnpT1h99sqzAssecHY/5p19/g9GzUPQBDQJp3CDIEU4PoqTmsycvkQ2Fb3/4HbpgcT57HAgiz+f87Ihahm3yh0y2qt7h6kPurzP+5F/9mH/+T/+IYnXoQ43i0CKGHYckojFB1UQW03PSYsXQmmO0Bff7PdsoxxBT6rrCcaYMhn1ub69welMcx0FRJHzfRzZF4rhEUW1Kv2M8Ndll1xi6S+EX0LTUHViWRdeU0EnUdcyoP0WVFO4fQtwxbB5SZLvDUg2iIMayFCRRxY8bAm/HYDHFkRtW+4B/8/OfE+8D4kYnizOaGsbDAUXtUUk1VV5g6QJF06KLNtswRHMjkBWqUuRkOmZ5t8WxxhSVR1F4nEw/J8obNskVVZcS7FvmvSFVlHIx+5JtsSJvY6azE/b3D3SGSRXHqKaD4rTkWYPcVYz7Z0R1TBin2KrO0OwhiA2yLHOzXyIZNq6uURx8fvr5n7HfRbx5/2t6Y5PdvsA0VTQ9oUgNik7EdkzyNCTZxfhByo++ekLTCKw3PmdPplxf3zKcDEijhM1+R7Bt+cnPfo6s7nn7zVueP/kTZiOTjRex2jwwm4+QaoEoKUmLkqp9LOClRUMnhnRNS1uKTOc9RAyW23tMfYBjCdwvr6lqFdsaIEsVSVzgOH0kvcDRRkDI3vOZzC4J4y0Td4wqKPjRjsHwhKIoCIKIs5MpuiHxcOeRhBWKEZBUOcP+CXG6p65FdEOjSBvaLsMypiymLmmRsVoGmKZO16ZUZUuSVQzHPcIipmoiDhuB6VijZ2uIjYrQ2QSRx9HxFN0WuL+/xdL6mKZJf2iw2WzYH3JUVcZyLHS75erDCknosZhPyOKCsiwx9BZZkRAkmboCLwi5uDxClBr2hwNJHNMJj1i70XCKLLdslnvyomW2mNKUOf4mxVBNVsEN1nCK07eI9gWKkFB0LWIjMRgN0TWJq5sHLEPBwKFTaypaZFSyLGMy7pMmEZKkUFYdmiYhdxVZXqHZBk7Ppsjh3ZtrXj55xv3tiqypsNwKUarpKoMsqukPjvn+3ffMzzUunzxhucwo64CyLNENGaGGKgNJkBmNbTpETNnAsQ3uljv6/SFl4VF0BXkqIauPg62klFxevEDWQj68v4PaBFOkigM0TUMybW6vd8z7fZrG4355wO1Z+FFI1Uq4A5uyaqE10FSJpqlwVZGsrFiudvSdMVVe8fD97l925R2HDbIKb9/dU3Vguwb94ZgoPlAWcH1zy9nlJUEck1c1X/zk52y8mM0mo8xdHpYiVu+YuBKJcpWN37IJQlaHFVcPnyhbEc0Yk6UqitonL2WOF1+yWnfESYekCWx3aw6+99jA9e6Iik8cvHve/PA1RZvz6dNbltGGjX8gTQKEsqN78BlUKm3jU9cHqibnh/e3XN/6qKaN1Z/w9kNG1zkUeU2apshyiaboJJFA00VESYphW1R1gbdrubi4QJAyVE0mTX32mxDDMDg6OuHhfo0od6iqSpyUtKLEdhvR5TWGohPuAz6+/4Rj9rBMl6ZsuPrwkZ4xps1qjidjTE0k9iOeXR6R5Uu+/Oopi5MRx8enzOcntG1N1eT4XkwWPxoVDuuc9eaG4chEFjXKXML3Yso6oa5amiJGQGb1sCQN1kio6IqKJJa0lUCZyxRNSK83oOsqNLNAkcHfh6iiyvnJE4pEwTZcjqfnOKaA1D2Gzsf9I/abjstnFqLQYeoKQRDwww9LLp/1cMw+x0cT8iImjBIGwxmal4KjpAAAaJ5JREFUbCOJMBnbjKY69w8+40kfw2y4v79HN3qUdct2u0UQBPJcJkkzREGma0UOuy1+tEHQOvpjizBbY2sCo76LphokSYeijUA0SKMC52SBYKiImkLTdmRhiSXqiGVDsg0R24Rwv8bSTBYzlYuLIWLXf8xCaSVNG1I3ObWQExcZpjlHNwWaQkYRK+J9QhysyMOSJ6fnnMxOSQ8NkpASH3Z0aoPlOgzNPqasM+zZ6HpHLShYI4OqqhDEBts2yNKa/SHCMHRMS8PQe1Rdx25zQCodulYkJSWuK6q6JvRygiRju4sYDF1urr8FocMyTWgbZN1kMBlRtiXIFao4wFAn7P2GnZfSVI8N8KO5hWk3JGlOVTUMhyOKCjS5YXm4Y52sOXl6xna/BUXCMns4moxQNcRdRSfoBIeMnt5DqWXWH5YU93uOVYVKDHn22ZDnn08ZXWjs8gNJ88DN/UcMW2UgOfzsz1/QOzO4X/mUPliNyN/8v/8/BOv80e+bFiShxHxygaW6dKXD6xdfcjp78oiWylJs+yn7g0SQ7ZkcDXHcGedPZoRCw8XrV+RNRdkckCQB1awp2xzddek5fZK45Obuln5/yHSy4OP1exAzZpMpadpQ5gFuT/mDo7snbP2Uxgy437/nxcU5bZZyvX7gU7BF6tsszo+RFJmykfHCBN8LuRyc8bDL8eOUct8wOz6jVUQ0tYfQgTNwUPQOz8tIw5owWCMhYRoj0iTg9GTEYXvANo4oqg5JaJkMR+RZjSrJdHWFQItm2ajGI9jb1CXqDnRDRJAFZNVm4LiMxjP2YcZoYnN8vkCROjRZwR0P+fh+yYd3Kz7d3rDbbUiziCIP8YOAWoowbAHfzzENm7Kr8JOIVraJkpa2cblePdApBbXQ0MlQdgofPl2xOnwgjRvG1gVSVTIwxzjWMQkrVAMun7wkziLiLAe5ISvBHliUdYthOTSKRglUWcXQdimaDK+M2ScemzDDHrsUVYjU1FgafLx+x2+/+wbVkNhur+k7LkKjEng1smIxnw7JsgjTdhkPXV48P6OsMpLYQxUa6qgh2sfUZU6dPkaYThYjdoc7DN3h2dNTwngNNWw39yhGR14HnFzM6Q8cBkMbSa7JC4+sSWloUXWN569eEicVQeghtA1H8zkyNZuHBl3R6cSIwE9wLBe6ErkekMQZy4cMSewRxgmdWNAINn6iULYmNAJl4TEbnlJkMmGQYBgGZq+hbiTOjl9iOyaaptAbCiRZiWyKSKZCKUUsDxuCdM/sxAZBZrfLCZMYBJm21RGJiLyaQd+gI+fge0jynPn5BFHVaYWWLG2pKwlFlanqkt02pBMNdEsnq2LqLuP9+7c4jsN0MmS/3TAeDnAMA8caYmkjYj9HlFosSyPwM7IEZMlgMOpTNhVZWeBHIWlZodgGiqmiWSqbdURda7iDOS9evKDn6tiahSTUGLZE3zUwXJOmFIijlNnRmNPzKZJQI3QqltanyNvHy6tsR1qEDEYOstrhRTmSprM4vaCsK9Yrn+urDb2+yXL3EWdkYNglCAXevkaWLFRTYOtd8/qLJzStwHc/fKJsD0RhRlFU9F2NvGhQdZvpfEiSJKRpTttWFOnjzx3QCQJNp5BVMWnWUeYqdBIP9xs+fdwTBBBkHitviahplK3IIfZxhy55UtIWHc+eXlDFNQNjilSDLoo0acPJZIjQ+NRpTpVLSK2NZeg4poLbM/7YMfGPHyibpmG3SckzCWegEiYx1zdrXv3oCWVdIWoVcbZls87x9hI3D/fcPaxpOxfVUInuY+5uMu73GWntI5YHyrXHzJmDprLc3hMlAWeXJ1R1TRDmJHnD/XrF/faW1UNA371EFm122wqn7+Dtc/Z+QL9/xHad8unjkiQu8IKETmgZDEY49qMwvqfModFRFQfXmTAZXaCqKm2X0ht2v6/1x4iiim2bRFGAafTRfw9azbIGRe/QLFhtrhBoUYQeiuQgCwpesONXv/5nDv6OIPMIkwOdCKvdPXv/QB6XWKrN6mHLxekTqlJ4/JC1MmlW0mQZKgOyuCCLCxzzmPVmg2oa3K3uiYsQWVW5ub5/hJoLDbvtkq6Bnj4mziNESUfVLGStQ5ZgOjqizjsQS3RV4u5+DaLAaGQxGPZYnJzSkVPVBS0io7HJze09o5GFZYnosszRpAdNQRWWWLLJ1D3l2cU5cVBzcrrg7n6JbumolkzTVey2JeNJn/mxzmIx4eLiAttWOBwOKIqI29dIs4CySmmamv3Op0gkDN1iu/F4/+4GwzDoKLBsFdM0KVMB/+DRH08ou466KLEMnSANUW0VQWzw4wQJCakSSL0OzeyziQ6k2e+h10LL97/6gXAXIWoyiCKWOSROCnaRR1SC6bicnI9pedQtJtkOTbeQmVFhgi6DqOEYOnWSUYTQ6z2ujWgNDrsdiqgxHOjsvTtc10XXBMROR7ct0iqhbDs6TSGRRIzThlc/XTDoT+i5NookoWk6jtNHFGQMy2IyXVCUDQ+bFZbSIUkFtSCzjw8oSs16vWYf+lSViGE5JMGB49kYSRCZDec4hs1g0ieVBJzehHRnYXQGo5H0qA4VS/qGzc++fIXUiciiQtPFyFJBWzfUWYEqV8Tlgd0hZL3zaOUKQRaIk5L1ak8UBbRJi7/dcDSf4AcxUVkRizWrPMAray4vv6AqwTBM3ny7QlNd7EGDagoYWh9TN1C1juXNA6lfofV1btoNd1WEn+TIksN+vaIsH0jiksloyOmZxZ/9xZecnAx5e3PLqxefY9TwbHSMK5xwcfY5Zq/PzXaL2Krs93tkQefk+Jwg3OAHe46PLpA6lcmwx+3NkqaUcG0LupKqge3OR5QqukJis4159+b2D85hecVkAmoDH/7+BqOx0NE51ic8H48Z2wbLj7fM1B7Px0dYssCRPeX96j2tLCJXfX7802cEQUFPnyKZBlmlsNqGlKSPD/JOYzpaUOUdu+0dTy5PkKWOssjoOoE0rGgbibIsH7+s2w6h7SjzAkU2aTqJIKyZnzpIgontOhSFRF6EnJ6PiOMKzRzw4sUzFL3j1dPnj412o6BTNdZewOBYR9YF4ixEd2WiNMJPArZBQE2H1dcQVYHBzCIKcmxtRM/VoRMRFJUw8YmihryoEYwGUTFo0ag6ien8lLSKEe2KWhMo6orlcomqgazJyGYfY6CRtwFVLZHvE+RKQKw6sjBGEeD1yycYqkKexphVg+BFvJ4+YaBPiNOcKN+R1j5FkbOYfcn56RmuK5MkASCy3/oUaYUs6Sh9g0MQk0cas9mMVi3YeAGff/4Faqcw7k2ZTvoczSZYRkeWFDS1TCMeyKoMw2nY7z2WK4+rmx/Y7D6QZiF9p4+qiLRyDjLodo/f/PbXNI1AWZYM+n0GrstmlXN21kdROw67DF23KMuSuoAw8OhqFdcZsTiaIQkik8kMlICkvcIZCuRFRL/fJ89zwjAkTiKyYkfThVjGGMfQUIWKtqlpqhZRkEnSgrxQyAuBssuIy45v31wTlTuevDxlOj3FC7d40YH59CnnJ6e4PZOyLEkjneXqI5Ik8erzKbLSkJcZmqHRigWS1j7qgrsGq68ymo0oqgZD76NKJnQVjqmQhQmJn0ANVZ3x/MUlqqpTFBXPnz8nz0uSqPx9OafGNE0QJaI4A0HEtk06Cs7OTI6eiOTiPWne0uRQxiUnxzOa5vcea01EFDNQa/ZBSFtJdFSUVYgiJCzmLm2TMxpNsMw+SZKgmFC0Kds65caPiEpoxYrhqECoKg73AnQJrisgNDaz+aMuVFZMRguHSkwoGwFFNvE8D0mRURSJrHgUedRtRVqHpFmBIAi0Xc71/RWapWD2DBTdIi9auk6gKFMsWyQOCuIooCwqHMeiqgT6qoYjqiR7H6FpacqK/X7Pq1efMZsfs7g44hCHjBYndKJB4Kfc3t/RH7motsRwOEB3VHabjPvbHYps/ssPlEXTMZzOSPKU9crn7u6OLA/4xT//hiDw6DrjEXtQpdwt77m7/4islziuzptvrsjlB6ZPTLbJnl1UEeQlal+jt+gj6Da2McTQdTbLFWUhoKg91ocdYeIRhjlVJjKfTVBVFVmBdz/c8I//9Fs6JCRFJG2g1XVoO7KiQFRqknBPTMwmW2G7Ek1TMHBnuHYPV9fRBRW5thjZYxpqkiJGU00+vL+jpSWv/Ed7iW0hKhJJCo49ZDY9RtNFdtsrgkNEz+lTNQKyKGG7PcI0Q9NdNocDYRbRtAJpVrI/BCzmJ+TZ4wNAkjUOYYxmOLRdzmaVkKUtSdoQRAJBWrP1at5cPZDlFevtiqqq8A4xeVYxmfYxNInNvcdgbHJ2/pS87vD8x9u0qkoQBAFdV3HcPoIO4/kCWVOJypBWFjGsHoaloxsCmi5RZAXr1R1irZCGMZ+9OOXFxRk93eL5+TEDx+bdD+/puWNaAjqpRFRqOtFA1TW++OkYVTGpShHTabm+vkUQS9pOpmk6oiCkaSqSLEaQQDU1ZFnG22+pW4lKgOHcYbW75+bmFhEFWRaZjAyC0KOhwbENZFmlbmVcd0gWF+jSAElw0SSLKoNObrl8dYyp6WyWn1i+ucYsSpo0JooTzi6fc7u5JWpjYkAfTLFnAxS3oS4ljo5tPvvSIEtyoijDMAwURUCzBZyxjd4DRbYYjnp425CsTkiqjl2YsosiDtGewcxhsjhCVDXiLKGMZCwTpkOLD2927PcJsd9xOPgINHSNRJ60jAYDLi/OEFD49nc/sD9sGdqnyOh0Uspv36xoWxdbVOhrNmgmw7GJIipIXct8PiTwU2hEVLEhSSLSuuZ4vqDwA3RFRGgLLCvDUGSmowVKq6CKDnlSU2YJYRKQlx6mWaMqDj1zgNbJyHKLquis77d8/e2veHP9nqwVUUyV08tzblfXyHpB1yY4sobdGjR+gef5jMdn5LGPVDZYkoyrL1AEHYmCMPO52YaUuCymE4Z6S7hZ07OHmI7C7acVMn16zhEPa48k7VgvBf7P/5f/J1dXVxzPz/nh6yuybUqdhowGE375698xHAx4enrG5fiE57NTnp+9ZnVTYVg6l+efUcRweNhzd3VDz33kIe6XEWWaUeUZk9EJRVrQdBt0rUVzrD84ZWtw9ybH1XpcfDEiF0X+9L/5rzl7ccmrZ69R0HAmOtOXJ1xt96SFh9h21HrNYb+j19epKUmCA2gKy/WSVhKYTJ+w3SbYjsFg6rALAgQkxgObJArYrmMsS6NrPahBkVwUReHp5TlFnqIZE3RH4vZ6Q1WKbPZ3BHFGUSaIqsFwMEOSJKq8I8yXGHb9/6PtP3qlWdc0PewK7036XLnc57c5+5iqalPNJtkiKRAgCRAC+CM01S/RT9BIf0ACZIASSIJoNKu7TJ865+y9v70/v0yutBEZ3kdokGdyJkJJKA3eSSIRg8yI933iee77vhAbm7KpmU7HCPL54Jveqly+cjBUHXsk8fzNFUm75ebVFEWx8Pwl46XP+rgjyXJkWaVLEy7HDupQkUUx0qDTVRJN1bCYz+mKgaZs0XUQxZ4872mHAlEuaLKOvmnJ0oq+U7B9haru8KYOddvQcQ4ktxWbOI1pdIFwSHn/8WccxwNZAafFcF1+/w8fubn8lvn0lmZoGM9c/PkMSRv4+//41zzc77GdC6IoZDHz0BSVdz/9yP3HhKurq/PItVZ5fvkVVZbj2DqePabuB57fXpOkB+RhYKh7rq+vMTWbQ7RBUUX86YIBk32QYTkGYfB0zh2sVGzDQFdMtusDotRR5RnL+YKr1SV//df/DmekI8kqu0OKodsUeYUsy/RDw3Q2wtYLhi5k/fABoRm4/ymmLXVM3aNKOhaLyfmFzW948XpMVRUUZUrbCJyiDUPTEu5KTGnE6dChqyKaKmFoYOoq692R8JQgaQJV0fPu3TskLeTmuUuWh9yt1wh6TlYm5LHD7e0Y11GIj1vef/+RrhUQRQFZllEUiyyvmC2mVFVFUw8o4pgsPk+b2hYszWPkL7EMm5vrFbYroyoNm+09lunx/NkbmqZAVjo8z0HsZUaOjzxIFHFOkZUMHcgIRLsjm3VKj4LpeSyXS25WM7o8J08CFrM5hq5iaiq24ZEVJbaj0PcpiiWcee/SgCwOGIZNsMuZeJd8+bzj88ctljlFFMG0ByYzHaF38KwXjKYWzlQB2SJLJGRNoO1L0nJHVmdkSU9ZlogSqIqIpc/wXBNR6olPLVl1ltKE4YnTKWZ33KFZKi0DZVuzPTzRdT2SIOPYLqoMhtWzupzz8vUS0zKgbxFRKIqerM5BFqjyjv3TOX4tikJ+/x9/JItyXtwu0QGxGJjbJgvbpz51qJ2GP3fo5Y6LyyWG7iKg/n+sDf9/KihbBMqmRDfOoaGSpNC1EgwOcb7np7fvuL15xWTiYxsWtnFFW3cU+YZn1zdMJl9xeupZ2UvePJviTkTssc+7Dzt29xmX8yUqJtvHDUNTIww9+/2GLIvRVJvVxQ1ZWhEcao7BGtMaYdsr1o8x692aWskYexq7LERAQ2gVRNlFyjXKUmSzO/LVt88p2ortISIoT1RKwl244f0uoe1KoKdqKparBZ47xzAVyqJjf9zztAlR1DMbte17wiDGMn0mI5+mO3F1cc18cn5oQEDXbU6nkLLLEUWRvG4QZZk8z+malrauEVoRS7VJTim6bjOfXSJjoygKktwhyT2CIKBpEqbuUuY1aRSTZQlVVSEpMk3fYNkq8+kNm/2astlimjqzyRW25aBoGpIGbVmhqAJ109E0HVmR8rQJyLOGNM7omgpFFtC0Ad9RmXgul/Ml9x9C1GGM7Sr8/PaesspwXB1ZzTnFEUma01GwvHI5hRFlXhNFG4omJckTBFXmeEpAFEiShDIvaUrIy5aH7RPHcEd43GIaIyxfxltofHpa07YqruOT5QHIDZapkB5jLNUkK9Izc1myqNKK4HhCaAsEpUNRBFzPoOxzyixH6WyawmYynrO4mnH9cgHIfP/bt5RZgCqWrIwRNBXrd0fe/03B//Df/wV//ucJjv3I89cn5ssCz5BIooA0Tfn48DPHOEPQM5pSwNQNTNdE0RVaoSAtIybzBftjyrt391iugtTpyK1BHKVEm4yXl2Ou57ckTwNNv+cUxSBI9D2IosQwDESnAEUGXZNpuwxBGKiKnBevniPKA9Bzc32NqoAidICArKkopoRsyURxgCqKFEmFLuj0VcLLNxazhYmtXeFILlQiiiLxdLelE2r6psc0Rpj2BMcdY6gKd3c7DGWC2qmoItTVQF+es0StsU1R1MzHS7rWRnOuaWSL8eUNijMmaHIGt2YXPyCaA5KsM3Mn2LpOFGfEeUFVqyxXF6hty8KU+ermFtC5fvYa23bRRJ9fffdL5jMDYxzw4tsJndDy+pdj1FGI676hq0rqJkE2XU6lRNoPbMMvNG3O08M9f/f2d0RVx/ppx3yuQT4i28c0UcKFs+Dm9hsGbPKkREFBbHWe39xwd/8Dl4srvOWCfKNTRPs/WVGy5vr6EnWiMXn9grwN6dKE9+++nDuDaYI5tvmw/cBk5jM3XTKxJ9zvuL26RLIrHh+3LC9mCDooikLRFpRVgia6GKbE58efkRUdwzDwrCltU7I9PJ7H3+GArgwYlojtOtRVymYf0CAjqBL+yME2NSZzC0XyaaqctEiZuDM8c0yZNSiyxnRikh62nIKKP7z/iaRsyUOB8WTOanUNucybr56D2qLYKprdY2g2nn+mTFW1gOe7aILFd9/+kr4eOG0bJuNnNL3EcrnkYn6BhI9p+VwsdORe5HLyDMccEMSeMpPpug5Z0pBEHVHQqcuCqk4pspLH+yc8y2A6nZDSEnQReREhKyDYMo+HgOnkglPX8Xmzxruy+Nuf/pqyh8X4GaZugiawPeYYPoyXNlcvljx/MyaKIk77ltmFz9c3N9zdvaUVQjaHPZ8+rrFNjw/v1mRlyzbdsT9GqI5OkZWookBwCulbjVYoORxSPN9nshijGSamec58Xa/XgITcyIi1hi3bOKaMaZ67y1F07iyKkkJSlCwW1zx/dcurr8fMly6a6jIeTUDoqKoOSXDp6wLPMpCEiiTaoRsVP/78lseHHZqqE+xTylRC7B1U0Wd1uUBRDdq2p+0qvvnqGUXSoQsub25fE+8yFNmkH846wGEYsPQRbQV9bbBaTjANHVkakASR11+PkCWH6eiCosiYjK5IwxRFktF1nbruzlO4tMDQdMJ9jNTKXC5WyIKMb3l4nkdRZMwWUwxXIk1qTHPFzdVXdENKT8rxkOOYlwiChO8v6XoZ13UZz8a4/tm0pMgaTdnhjy5IThWnXYwoljR1BZ3I0r+mS1rEWiWOYw7HJ0SxxzUd9oeQfXpi7ttY+iXhqca2xriuT3jc8fJ2xWo+w9I1mmPB/lPGcR8h6TFFk6NbY7yFSdKGWOYId6QTJwKaOcJ2Feq6pq86VpMlr66vcQyNcJshDC11USOjMVAjCTbz+Rx/ZCOKIIg6SCJN35BEKY6lEhyfaGuNp/ucuuo5hTHHTUsSwe3NFElXSWqRpleoywzDEHBsH0nWUKSOD+8PZwmjpOF5Dv/m3/wlktKyD3fMby5JipKn4x57DNe3U8Zz55++oJS1mjQvECWDroUwiOiHgrw8UGYmF4sr4jDn/ssTotASHjcIrUlxEjBVhTDcoxogqB3r3YGqFEmzFkHTsOYuSXLksD7hmRMcR0ZVawZqNE0jiiLoB9brt1TtnvHoAtvREaQWbyZg2xO0pqIsElbjMaPxFG88RkVkdbPkcu6fR19Pd5T12eGXJwGHhwPkMsUpIjgdGU18JlMPUappKhlJsJEUcF2b2dIhrwPyvCVLCzzPo20U7u/vGRqZIu14vNtSZi2SYJKGFU0NgiDCoCKKMsIw0Lc1XVXTZiVi22NKOp7u4Foys7HGzeWSi6nLyJGY+z5Tb4qlmuRJRZE0KIrBcjFFNbWz2LuosPwzIm3zuEFAoixryianHXJ6Bpp+oMkyTNWkrWqGtsNzxkz9Gb7uMZQCmmTh6BaG5FAmEpvNjqrMGHljkvQRTRthuQ7LCw/D0CirnCwPME2bIKw5RQFpWqIoJbZtoasjLMfkGJ1oAc0SsWyZkWeiqipBGGM6PpY5ZuxfYloSeVWQVAWCIWGPHARBYbFYICklURRxObtlKHvm8zmSYtAWHULToKoqM3/MMQh42DwQJE+MJzaGrBIfAnR1hvdHBnPTteTZiYnvMJ1OEYYBQxjwGhuPhv/D//4/Raj/jt//2yeiuymGCqpiUhY9Q2thKTP0fo6lGFi6w93mI4MuMJmMEASJ+WyJINUkyROS2DMdz9g+pphSjUhNiow6skjae2S9pOseKfL2bLRKY+q2Io5yhF6grRMulj6aLGF6Co7p8nz1K4LdnrQ8IukusqKSHmPyuCTPAmRV4f3dZ26/HvPNd885bhIs1WLi9Ihtz9h+gWbpdK3A4THA1hW6XkUUWryxwWy6ospaBEXjFMqEh5ZBrDBMl8v5K6JjzMQf8eLZFVN/xMgb4RgatqAR7L5gmg2iMhDEB2xf4+L2kqgeSPuUbbxjG5RoRs/nz59Z77ZkfYeoqxyjmqqRiauEh/ie9SmmLWW0YeAXby65f/hElRu0tcP6sSOIYoIk4GlbEOc7JFdhfD2nFFMMv+f7t//AIAi8//LI7tSzjyJOUcTFhUOVFxR5gGI4yJZBKtTcrz9x//gZXbNQZYMqi5mPr2lTg6HtuPtwRykWmMb8T9bMWdIWKXLqk3wWyMoT/+7v/leqVOew/Uw9bNneZ9RBja7nxE3H4ylFF1QUpSeLSqyRQlx3NFnFIHMOsLYqri5H5OmRoqyZzl+h6hpVAXkiMpmtyKsDrg22YYPUIyoNdTXgegucqYKmL5nPNbJsi6G7JEmCoWromk1TJ1RpTp5U6JpHkw2kyZaLxYS4BNufMPIrHu/XVEXNxaIjL1JGkxl9b+N7E477kP3uCwIKTaNQ1ls8x+YQ5gSnklPxyCmLSIqSfXyPbpkoRkMsxEimDV2NOJTIkkHVqMRtRyI0dIPGyPPJ04CuMXAdg65u+Ob1K8RG4u2Xj+iawsV4jGXqqIJI9LSjiAsMe8SvLi/xZIt2aLiP3xFWW+JTSJO3OLqPbBfY/pjFxYK0OBDGEX0PF6sx8/mC0aWBbS8Yeo24DCjUkEzOCOuScghRPB3TdcgKCdvRyfOUshSpq4JOEJEkhdMpxp+452LouEcSXFTFohtiol2OrYz46uW3XMzHvHxxzdC3DL2AoijUQ4M/HrG8dDgcN8ThWetnWA390LC6umGxuqGuNCaTS7797pcgD/SDSd85GKaE7WjUlcTT0xMv38xQ9RpZFpEZEacl/uQKVR0Rp1tkWUTVcqJjQJUIaKqDZfpI7YyxN8W2RbKoZjpaMPQ1SgMGU1RxoMgTmu5E2VXotk8r5ji2ikiLocvEyfGPQIoK2zJoqhRhSBBacPUplumy3b/n4sbklO5RNAtVG1C180u1qugMA5xOR6Jkh+tpPG5CFMPilKccogOiJvF02JCkJbPFFZZnMluYZ3e8rNB3Ct98+4rg+ERX5siDyOXlNT0Svjti//BE27dojkFf95RtSFZs2O2/0LQZjqOg6yK2pdLVCb7n4I0kJrMRnQiHIOKwK5CGnqGsOcUhD3d7qiZHUx3aSkUWVMbOBFsTuf/ygTLJkQWRoVFQVRXDlDkdSsb+BMNUUFSR+/tHyqKjaVoeHh5YLpfYhopjLGAoGSjOxDXHQzNqRKHmdExZGRd4ssm3L15jSQbqoKIbEkWTslxe8fXLKxzD4sXNLXWS8fDhgCnbOLZOcEx42r/HmQyomslhn3B/f/ynLyjTE7R1x8PjR6qmwh/ZhOEROpWR65NlHV/u3jP2HWQ0dEnENkREeuqipI5q8jSh0hSiTmWoJJowIA+2NEnOMCgYnoQxkinqgSgZcJ0JbVeiqRJ1G5EWLXndImrn4PGmyTDkEZbpU3U2eW4SHGOEPkAaFIohYR/fURQZl8sJN6tLJBqCw5YgyClrjeVyyeVizNie0+Yim8eAtrCZTc9OaVk4p8THSYOEQV1skIUaENkF94wmPrKmkoYJV7dLrhcGdqNh6wPzyQVjf0QvZWiezmN4wJmPqWl58fXXTK88FLdBchQGSSbJDghiQ9vKNGJJIwgMw4Bji8hCx+LqBZo3Yr6YovTnyItOkoirmkGvGE8cVEFnMpqSNQX7fEPThxRBgWn5qE2MrdQ0rY48iOhDjiq0fPvtBY5u4lg+r19d8IvvXnNzdY1Az6tXDr948x1ZGjIbG9BbbIMnsibHHT/jcX9H29ZI5Vmjcsor0rpEt1uC44aRabKcOORhhlDLhPuGtkrOppXw/N9qukhZg1i1GH3NkPUUeYRh9YRRzC6oaAUP0exQtA5bcajTnl//+dccThF1VSEoJmkR4811NE3DMUZkSYWiySwv54z8FceTxDFqyduaQdWIw5KvXlpMFjbFUPPf/bdzvnz4v/FX/8tHykrj8sUUhSl/+z+fSMoTz17ckrcHWjVgcrliEwSoxjm37pAkIOr4I5Gu7GlKh6ZpiJITeZFRLySysuBXl3M8X+dUuKy/7HAtEbGBy+kKR3eQepGvvp6Q5ymOPSdLCwRZQspFRMujocaxNRxdQCwl6qJDll3KusLQFbq2YKpNKD5V3P3wiKab0PWs1wWaCuvNO+LwwHRu0Uo145GNZcpoqkl8yGnLEsORoU+4WnogGixHC+oyxH9uMp9eUCQNki1QNz2dkGLOLPbZEXPino0MQcnpqSF+SLj//Qfq8oTUKpRhSj9UFKqEtZpzcfGCoa6ZXDhISklZZNS5goSFbclYjsjF7SXHIqWj4PrNhD4GqQloeoFD0KHbOpuwIM1i+lxC1CcEp4L9IcMcjcnCgLqrePj4RFuVVFlGk+Z88/oSWTjStEdOcU6elDy7umRsmeyf7nC8GW9//J7/7N98y89f3qMoCuOxjNaWf7LIOsp2wJ+YxNEaxZogtSK207HfncganTdfvWC1mHP/uKMKa8a2yyApCKJKURekQUmVtDRdTZ0dUcUaYTBpYpFk32LYE6p2y4vFNU2aQiNSpHtOcY0m21Rdjq6PUBqTuo3QXZE82NPmOYekQvY1TmVGUAY0usqpC2jEnqLqETWHIMio65x1HJyRj0NCxRMILUPTYjom2yTm8eEj4dMjjqSTnxpEOhpD5SH5xO2VhWtcUPYpSVzz6++e8+o/+SXPnl8y9wxKuebnP3xkG+xwFBWNFd7M4ePmEyUd7kRkaBtURMZjnyLN6HsYLA06EbGRyAMRxdJwHImJP6etJEzJQhMHVMlAkgTqpuCprSg7mWHQmFuXtFVPNuRkBiR5iDQodE3NYjyjiXriqESbKOgzmbJO+d2nTwiSgmW2GK7IeHSBr8hY1NA4VFmNqIqIosjYv8Z1HBRFQZ/YlGGJYjnk9YEvm3uOQc7q+hUUNcfjPZPFkuXKQRjXbIVHynbM299/4eP7LY/hicKW8OZLLN8mOKRokoNj64hIvLj5huVkwd3jAU1S+O/+6/+Sq8vnRKeS41OHb89QFI2yteikjl26JRckolTEt+cURcGpjGmHlKx8BDIOjxVi03F8SkiziNlKw7IlDFFByHtmtoqpDehWzdPuHZY5whyrhNGJ2+sblN7HMkTy/IGujZHEhrodqFORvmhQhgFZrTidYjZPOy4XVyRZiOOaTEdjDts7FFQ+vguIioL16TMINn0toEgV8fE80rYdFVtXKE45hqExNAVCO9ANPZtDwGy+ArWlHARaKSeKS+q6JA5aNKkHKSPNezpFx/IkTtGWyWxMV+YoqoRuq/i6yqenO3JgdDFH0GC739EJArtjS9oWyK6E2Pc0eYtrQxpoWJrJ0rfo245KlRk0HUG2mUxm9EKLrEhMvAnUMvtjhqmZ9D34Mw3Xsyn7lKIe+O7NN3iOwNAIXE6XtG2L5QpURcpstqAW9/z0855TeETRewRTw1yaBMXAKWsYBIGLxRWC1rBJjtxtHhBEF31icQgy6iQjPjWo5pTLFw6fv+wxrCWH+EQnaYz8BafdHWIHdq+RniJQ4Pri/w8dSoQWhAYRBUXuUVWdkXeLJCkkSXa2yPcygiTTDRJl21G1FYblI6kKi6sJi9mMbBfT5SfSpKAaQJQt5EGil2VaqWEXbqn7gaYdKMqM65sVddNz97jDMGyaWmC3jdBUh74dsGydODmhqy3ffjdjMVuyuS/YbTa8fPaGvtVZXtgEp0d++P0aQ3cZeStun6349lcz2n4gK1KSIkYzNRaLGU0X8bR7oOtadLcAoaXvMqIoQpIUVE2mSDOe3X5NU8skccbiYsaXh3sQZR4eDhRlQtGEJHFN39dI9CiDRJUWuI5NGOyoy5YsKfjy4QNZUTL0FpqmoWoSuubTDzVNd2S7CRH6AcMQCA4bfvzhPU09sH26ZzzykCWBLtNZzm4QEQiDHaooUWcNumKiayZP2y1RJNF1HYJQEAUCVSHjuDr9oOGNfIo6JCoCNodHWinCnRjUncTTfkOLQCcL/PTxPV3XU9cdTZtztbzi+e0NVy+WyMaOm9WS7756zseffuBqccPqckZRSByPOaei5tRkFF3FbOJyOXW5mk/p+oL1/QOmKVJFFmmYQGVgyCoTf0adgm9CmuYc85bfvvsea1qR1xnOTOHNr/+c8BhgGAZVLTFdLflwv0V3zHNYqyUgSCmrWw/bNzBMCaHOuJwKzFwV0wr5Z9/l7D8JGJ3Ni6+nyLLLz+8j3r2vmd9MMEyfrHzCcnt8ewKtdkY9Xqx4WoeYis3F0kYzNIIophoSjvEe01F59Y1HEw7g6sR6TyeUJOEjtTJQaTqOs0AQTVTj7JDMqxzDkenFDMUQ6ahIq4a79UeaNsdUJYZWRjdNJF2l788ZhFEUE8cntvsNT08buq7DMCwsU8MwFLrGZDn7mul0zpcvH7m6fAm9QdvW6KaGIAu0bUcS9bSVyvppy9WzFYvVBUovEOwCHENltbSpmg5VVtCrHqMRqbMjvqMyncw4hBHuzKfoI0YTE9/xaIaQ8WyMgIqAShyHHE93zC4swmhDkbdc3654/uoCUerpeoE0K/ny8IXNcYMzsWh6CVmTERSBri9RpIHL1QsUpSDNBj6t71k/vKVIMzxbRsxFVMkgfNrx61+/IdhH1KnBm1e/5O5jQtM0bNYP5EmAYUxQFI0oPXOvxzOTNDtyOhTUuco+OuCOluRV9yfr9vkNw9Dxhz/8SN9CXWRo2ghV9qibAUSBU5yz3QVMp1Ms12Eym4DQUDQnpgsXw9AwdJ2qzHEtjWxXcji2xEnAL795Q9PFdLXA7nFLUAQkaY2qKwiiRFE25FVAWaWACeigNGjinLGhoXcN2bEkixM0VSaOQqpNilDHWLIEdY1UtdiqjSH3yPWANLQkQYHY2zRVRtE8ISkamnFx3geEFgEdf2QRhhFNKZDnObtDRNV2qKOQXRHw7c23DIOAYNTYtcuvXn3Hw90e03A4BF/o+xZZqhDlHEkWkOQeSZJpxZze3dHrHZIgkoR7rJFBr8bsnz7ijl3i+khcremVjl1QsTnU2P6Ip+Mntl8O6KZGVyZkVcLQNBiOwdTxOAYJjSyQZj2iJBBkCa7voQ86rizTNQLBwxFd6elrAbmVWE3GuIbDZOQxtAWOOqKKBhaTMVXZUzcNeb+maFOSsmEyM5lMJufOvTNmvQ5xFw6L5RRFgtWzG2Rh4P7d+3PE1MTh9qtnyKqKbsgcDofz7+R4OK5OWRdESYqiS8T5jijOCMKC9/e/49/++/8XVZ8gqg15WRLmTyTNAzUl+33MxdXl+f5pC0xNxlBqukEkyzLiJOf2+UsMU2I1v+Vq8QuuLq6w5RFXizmz6RhVt2lbhbbTUESJoeyRGg1NqmnzlL45kB8Ubi9uyKIjeZQgyT1932NaCrrmQatQ5Rkjd4pp6ChiR13m6KpCW3d0rYyh6XR1hjQIpNkRx/ZIwwHP0TA1FVWRkCSFY7Cna3Msw0ZTdOazEaokEYc5mmyRJTG0OteXr2janGN4x/ppz4d3R2bTK2zbph066spCUUpcvWKirTCMCUmTgehSlwK6pCD1Ob5t8/O7L1RNgTjoSJ2AIAjY/tloLEcZYf7Ah+D8nTprKXMBSVIpi4b9/sjueE9HQC8WZGlL0gqotkmLRN+JaLKFLiv4pkq8j5Fl2B3u0A2JPOtxPY22qtk/DUzGFo7hYpuXSJ1Gvg95/P4DRmcgoXNMM97/lDId39I0OpYv0pNSVhnf/2HP258/YRgCP/7Dkcf1Rzb7J+yRSF6GFHnLfKGhCRJSp2ErYzzbIiuDf3yZ+I/Nofwv/nevhzQ9Z0gVaYYsGSjiGa7edCeGYaCpZFSjx3XHlGVOPxQkcYvnKbjjEWXckhctWX+EXsP2bMpigLpFtad4vohrq2R5zH4XoKkGiizy+eeM6+cjHp/W2JaPY41QZYkweODy+QXbYIfUqVxdTIgOAUmSMZktECQZTdWpyoyn7Q5ZhqqQsR0VTZdpe+iGHEVysBzpTEgZFNLshG35/PTzB2xXREBHVWUU0UBTZZ4eP+O6PrLoISLy4tklD5sv9J1E2ZwYOgd/JtM0Zw2KIMqEQUBbK4wnLk1XMB7P2G325HnKdDZCkgRMw+X+yxe80RhBlOmGlCxNmHpX0OUUfU0Q5czGF2RJiuXYyLLKbvNEm4v0QoNhijR9hyIbSAq0Yk0QxkzMOapZUtcqhuqx2X7i+uoKeo2yDXEsm6YWzy1+T6JrRbKTwMXymqpMyLsS19Np6g7dkGjbnunM5e7uDkGQGE0twmDL9eIVbXfEtRdY5pK3n/8Dx/2AJEmYrkWaJzRVzdheIss1aVrTdgKDKBEla/JYZzQbmE2eUTUngqhksXJI4pA4KmiqAqHRuLqYczyGjBcmggFlIKAZHo+7ByTRQNd6dMWhKgMGGrpSQPclgqTCUSRuxyN+8+0Vj497NEfC8QuybULXGZzkik8fdaosopQE8iJi7HhIgkVTtTRtjqqJ3N5cczwElGVLL0CanWi6gWcvnrPZHYjjDF0WmU+mGJrJj9v31F3Dm9mc5WjJx/UW07ZwZIeyCem6hCLvubhYcDimMIi0fcd4PKauCo7RiSHrmXozKjlBVlVoFL7/wwcm3pTb51OqLuXjp4/IsoVpeKwuZhyPBxbLGU11zt182v2Ibonk6UBZlpiGQddVDKi0RY3mKIhKiyY7jKaXNEXC4+nAJo55OV0iSzH7vuRqtuL06YlTDhezHs96w/svG0RLwHF1ws2RyXhJmD8xDD2+uySNK4auQBBrRmOXrhuoqor5ZEmSZOiygSAI5HVGVWf4oxl51iDLImVTYEoKQZxyeXOFhMCP739m7DroOBTDmjzUaYeQrhbRJRPdUlBUiTIZCI57/vJf/DO6Rma7DxG0AUnpCcOEVqrp2gZHt6DTkCSBKNxDM5xJI75JEAR07Z/ul9fXtzx8ecDUDZarC8I4Ik8PzC5fY6kqd5vPDEKPapwZyx4LSjmnSjLaTkBRJZo8R5R1BrHF0z3SoOTYNnz3Zk5fCayTHZbgMlJNIhLyuKEZcsqqwdbP5oO2VrAVEd1T2aYnZqaIkNeEcUMlGAiCjK7JPD49cHk1JWsLps4EuR/Y7Q/IqomoFeR1gSY7LMYXhMcNPQW2OyKMQpqmYTK9RhNMLuYL/uYf/gO10uI4DlUcM5n4nPIC3xBY+hOKDFJBQBFj6mOPMnHPUV+lhesr7PYhVX02Fymai2N7PK0PmDMPWcwQcTkcj7iWiiVMeLh/whipKEJOlKUIooxtzwmDA7ZjsJytzmjDSiTOY6aux2afUsQpFy/GWJpBXufEdctI9vFsiadDQF5kLJw5olBTDwqyNOCaOlnanrulRUFwCLm69fm7v/97TOsZvuXhjyweHh6x3XOEV9nqUFfMVyvqUiHPD2RFj63YTJciwW7Lav6CfZbTpC1hkDB/7pJXA02dQqugWgYaClVdoOsdsiDSlgqIBcuFx8efdwgSGLZB3h0x5Tk3F7d8//2/Rzd8OqXDsTSeHtKzU7jvcTWP67lPFD0hazaOO+MQnGi7AtdWMXUPW3fQNI1TtOcQxNjewPpxhz+ac3l5yf7wwG7/yMS/oB10BjFE7BXiU4rvjdF1naKO0M0RdAkMOl0b0XUOTZsTJwHT8SWOZaAq0LVnP4HrulRlh6BUDJQMvcyASdcUnA4tt8+WmLbB/eY9jj3Gdcb89OE9vmuSlQWiJaIZDvvHiMVsxD7Y4xljrp6ZPNw9Qq/huTKbh4wqs/jf/FfP+f7tj7yPj3gXE4qHgmeTCdtgTzMMSN3A+HJKuDkiNB2SqKPYCuMLjWDTMtQqdRHQKwbXY4c2lfhx+4FSHPjnf/78TJsrZBS1IYlTRNXAN8d0ZY9p6TztIgzTRJJ7FEPhuF5jjccoioJaFgiqhuc7HMKfEQYbz5+wC5447GA8NnANG1WTMJUjfRIzH1XosoVpW+h2w/Gg8LDV6GWZL582PHtxS1Se0x9ur26wnRl5/sBPP25ohxZZFpkvLTabCEWVKMqAFhFR0sjSGtNSEISGP/xP63/aHMokyThsQgzVoio6dps9ujmQ5SGC0JPnKYLYcXl5jSALVE2HrHgYhsEpDrm725GlLbqqMXLOerOn7YYsD5BVkbTasz8c+du/+5HDPsAyHRTRIUtKrq/G2OaIoZWxdAtZKCmTHYvZkvxU0mQ9lqKRhz1ZUiIKA8EuwbFswtMDeRoz8udYts6rr+Yw9NSVgNCL3KyeU+UFT4/BGedYNKRxQ902PH/+krZWYRAwVA9JPP9c11cvyNKSuokZTXTC5HimY0gwm67OI81jgKE7CNLZgWZqJrapsn56AlEiCEParsNybDTVQFVlDsc1tuuiaQZlkSIMIi+uvyZLK/K6wfM8nj9/jmFoXN/O6euKvqyxDQVD7bBNk/lsRV9DmZXkWUbft7gTF9PvKOrofDBXCfO5D3Scooyu0yjqlFOyI69iNpuYzSYlqyOC5A7DNRFF0HWFskoQxO7c3dl9IklP5zFmnfHrX/4luq5gGh5Z2vJXf/VXWNqc9FRSpAX7hw1yO2CoBuvDhnhIqKSahhjROmK6DuOVwss3t0Tl9/RKhD+2OAQhYTKQxSWXkyUvLucctgccX0FTPOJdSq9LlF2FImpMHJWL6RJZ7BFVjV6F+fQZfWmjCxquozMIPf/2f/1b0rLh9z9s+bd/veX/+T+W7AqFTJF5/RuFxXcKutAydi+xLY+2zWnblhfPv8KyHAZB5e5hT1ymdIOIKjsMtUURNbRVhqGJ5y6M4nGIjviejiKooNpsDgfi/QlbVemHiigQaDsZ13fohh7D6umlmIvrOcdoz+EUoejnOChdGmjygV4YyPOcNy8vefFiyfH4SBwUjJwJru1zubylLjMsQ0MQBJJswyl+wjAswiDlEOwpypimac65n03LZOHSCQm+P0bE4svdA+8//4DitkhDx8SeoiExM8fsHyPC04DtmxSljqrqmNqAWDfsHw4Uec+n+zVRXtF1Oj///JG6rlkuVzjWmL5TyNKaY5CyO2xJ84ggPqKqKmWWY+oKdZXRVh1BcCLN94iCRtcKDC0MrcbIH6OrI/IswGDC0Le4+iWLyZjZcoysnIP2T4eKX373DMcT2O22KHqBLEDfSpRJhtSLTP0Fl6trDEunqGNG0xHeaAnigKYaiCKomvwnK9gHjDyf1eWcrs0Z2gbHWiL1Ik+PjwztgGVZHPcxMiq9kJMmJ467I0MrkSUNum4ym49IkxpFdFjezJmPJQzLJkoL2rinKmryPqeKG/xRj2ao3Fy+YBgkBEHAsgQcT+bdz184HQ5Y7oi0NTikLb0OqtMhcNalBsEa2xpxyhN2u5jFdMrXXz3H1id0pcD28URbF2cKluhRJA2aeo4OSeJH6GuOxzVpnLAYjThujrjmhCRJURWLkbxgvS5ZTV7j9hKm6CGpCllUMh45XMxnmLpCVwuYmk9TgyLoKJKE71okaUB8KMlPEYqkIwwy85HJ1XLOaCIRBAFF3mMYM+K05M0vXnF5NeZw3DIMA3Xc0GYtZZXzze0Vtdzz9fOvUBWLNCnxZIPx2CcvKoamoa0b3NmIXlOpqgrL9mnQqYeKQcjPn3kWcV1geks838YwGx4eP/P8xeqsj69cpEFBEUSC0xN5/QVLbRHlhqLb00oNvrvg/vOeukkxTJnr2zFRfCBJQwxTpqpCpFokCzIso6YuY0zTRDVKBEHiw08heZnhujJRsQfZJa97yrTgq5uX1EWCobhkxxrftri8HPPVmxdcXFyAMiDqMpvtCU1RKfOE0dRmvTlT1542D9xv3lN3PcvpBMeas7y6oSo7oiBFGCREbDTXgz5AqGtOuxzXNlDknqZLaZqBqgwoyoEoClhvjn/U+DmoikmRnyjSmq4ymc+usCyLosrRrIGyCpGlgbZuyLMa11e5vb2GTqatG6ajKVmWYts2f/arf0ZVlujqeQrXlQ0jV8HUB64vl/jjhv1TznSyQDNFklTAn5jMVi37Y8Rifsk3L17RJxWeO0XywVn62N6SyWRG1/Q4jsNyNWN2odM2cP8+O3dS3ZKHhw06Ltu4IkZgOZ1wOx/R1CJDPeBZJlJrcDG/wNYMqqKgLAraumN1baLpZ5OOImhcXV3S1Q37Xcjl9YpBEMiKFEW8xvZ9kiImSwVub28xTImsSBDkiuKkM7NHhA8tdx9zDoeMjx9SqrxEkQOKZM2b1yMMXUWTJaazOZ3YcL9+Itj3NHXPcuVgWgo//7RD1XvaRmAYBE5RQV7liOpZcldX3T+2TPz/wuVdnd8W7j9vydKKxWxMVSSYNsRRhWd72I7G09OW3dOaum5Ikw5ZE5EUBRGZXhSohoKuObe4bc3Cc0zKtkcSWqIwZjlboso68SknPJ5wLZco2lEWe55fXyEPArosMfZHpGFGldZ899Ur4iCkqXNkwaQpTfK85NPHO/pWYTS2ybI94b6kKweaokdmQBxKPr57wHUcwqDk4/s9SZTS1AIf3n2gqRNkUaIsT7iORRzHVFWFbdv4Iw/XMVmv7wmCPWmc4zo6iqQSHgNGvktb1iTHgrZKEMoBW1N4sbpgZk+wVZ1ffv0GQ1KIdiFxmCKLHq4zoW5LBjoUUaHrWzzfYLG6pawFFFmnF0oOx0c0SYCmw1AEbE/AcQ0eN4+sbpZcXU9p2hzd1LBdh6zoaBqHZqiZzlVOQUMQRCAl5EVMmbWoqkzXyIBO1aRnDeAp58vdO0Qk9rsdsqjQ1gNt2+HYHrPpgr6DOtU5xRvun77w+UvGKU+5fjkiT0peXq9YzHwuZhOaskISVdzRmLIsycuCsknJTxJlnrJamtx/PLF5zJH7MZv1kWg3oJUGr5+tOEURlVgheBr6dMx9+Eg5GIThka5rkEWBoW8o8gRFFRkGqPMO5ALbrbBUaOuGRqk5Vhr3Qckx7vn+DznPX4zppiX9SWd3kFiMJjxbzVh4NnksMp8tsW2XPOtoO4Gn/SOyKTPIItbIQLV6nl/fMpTi2XTVgCaZVHXCOjuR5BGSKLI5JLx73GBP/PMD2xa8eD1hNvfOnf3WOCcTrCPe/viBIj8TJGRJYuJPWC5m9G1PfAqYz+dYlknXlKiKjWnojHyXujhhaC2HbYxnXZBENXES0rQpSZxT5hKqZOM6E/pWQRAEpos5wbFg9whD43E6nUjSEFnxsMQxLy9EhnZLnY4QT0uePh2oW5Gh6NFNB0U2EFrQZZHJ2GE+8zA0g6GVOIUHxmMfGZn3b++ITxVRkJw7KLaNpFhMJhMkuWe7WyMMImKvs7l/wrVkdFlEHGQWsxWaJrDd3KOIMvP5nKqLccc20qChugKq3J7RhIrI+sMGRfD4L/6r/4TtJuQ//LsPDJxpKnm5J45PTJY6muwQ7gt2u4D9cc1iNSKITgiqhmLrFHHAyB5DM/zJEsUK11XompYkyViuRgh6RFVsoB9QZY0ij7i8WHLh35KnAlLb8+L2mosLh7ZP6boOTTN4+fI5lqvQCOcpwI+//0jdlciazGhqYVoKU9NDEjRMG9r2hCR26HLP2Lapypbf/OpbVpMFp7hCdRwkzaBqTjR5RJvrXNw4KOKE5BTQ9ykT/4L6JPHu9x8JdwG2OGZ1Oefu4ZGuO0edCIKA+8fMQKGDKMipMgXXMpEHBVdz+cVXzzFVjWfXM56iJyaTGbPVhLE/xlBUHBuEtCPfDBRFxGG35ZuvXqCIEpqqoqkST49rHEfhyreZjnQca4AkQylEJEmkqELCxxhT8TBlh6pMGbkqu/UTTSZjKSPkrqOrKxzLJ00KbMfk9vaavhPZrQNcx6KqGh7XH2n6HtuzubhYsD+sUSUN19WJkwBDtznFEXFcw2CQ5yVlDr0o0MslVVNj2ecplK1e8dXLr7maGQiViiKPUNWWwzbBlCdMJxZF1fP5ww4JiZk1QzRKBiNEGiT6vEFsTUaOjy0LTDwVz3QxdI3T6UTX6GiyhigXrC6usDWHYi+h1z5T1yMrIw5xyWS+IisORElM2Z3TTk6HAs+HZkhpu7Nn4Bh+YXmjk6YJl1fPsRyDyWJJnHVojkFn5hRlzWIywrNV6jZCUDtEVUOUGq5WXzEZfcfrb56h2SpFU1K1Ak0rU5QGVQGSbPCrX/0KVZXRdInR2GG1WuJ5IxAE3n/6EWSJ/qzExXIdHGeGLOvM5h552jGeuViugSiKaOIYVZX5dPeOx8c7pqMRlqmiygoyAraukcXnBoo0mOR5Qpq2HLYthqVzSo8cwxNhGPGw2bL7+REzyTCakuQpQiokDKGnpyY6hGTlI50Ip3ggTwfG43NXtixFxpM3zC90aiWlMnLssUweVuw+V+iyTJ4lCL3GYbtDkSRGvoFj99RFTXqqaJQKxTZIyhzTkrEsndvVNZ7uIPcDpzgljHLipGIQFQRBJM9qTMsjrQqOQc3nXcKuG1AWrzHHz2nxUaznDNbXNEzwRrc4/iXDMGDrHcnuwLvf33EzcxktREy/5cunDftNhTAYzGdLgvCRqqpRhRZLkYgOJ4oMyqr5py8ory4XpEkCtFxeXiIIZwG0pbl899VfwCCTJSfiY8xhFxIFEdvHHVmWIKDiuw6n7EhRJZxOCZ7joaEzcZdIgkm4OeEbLmPb5OHTI/KgIIstQ9cj9AJpnCMjYKg9ri3T9xm6JuFZI778/ISpuUzGI9q+IY5P6IYIfU94rHn7dk1TDwyNxLsfA4o8ZrP5yO7pRFtn0HU8v16iKwaKNKCqHRfzK7I0pe9qLqYrmjqkLnIMw+Jp/4AswzCIzGZLejp6Whx7zk8//4Bl61TlQJKc6FqJum7Ji4qyLpBUhbJuME2Tu4d7oijCsCxkWcXzLYLTkTTPmC9niLLB/pCSVwWfn34mCI+EpwN5nSDLMkMvkyYVadHTCQNNV5NER6LTmrQKuLxeUFUN4SFBl60zslL1OCUhmmpimQ624ZGnGaZpsn2oCQ4N3ZAzmbpIos3Q67Rty+l0QhQUFNkkiXOGYSBPBUzLxXbG5GXL03qPIltYtkx4WlMUBdOpyZs3l1imyt3mPYOuoJkGUtui1BJ6r2AbPkt/gtwKDLHDNy++5S9++Wv6uuJ6brAYyUxUAXkQmF373B8iBKkn3O4Z6QpyU+PIGn1RIYktzSBQ9Bnb/YE4CLAlmzCIKRKRvm2QlJq66xENm0qIiZKCiV/x1b888tM/bBgklTevX/K0E/iHv3tC0nwQ9xRlxnK5YrO/Q9ZENk8pnvscVR5x3K+JgxDPVRGGgTyUCPctwSGhSDMEZEzFZDEaYYsKI9ul6xqqoqQ6Fex3Icd9iSyraLpE11ZMpxMW0wXSoCKLPUIn4foz3r77iKKIOIbB6XDgGISkVYKsmKjawMif8Pr1a+o2YuhldN0gjA84zjm+pKpzJpMJAjpRmKCrIiDwh9+/JTieWC4WGLpOejriODaz2SWWbJMcG8KipLXhkH/An3tojoU7kaDt+Pu/+Vs0XebiesR4dqb0qAOYAiwXE149u8H3LDxXx/c03ry+5mKxxFA8VEkhTys8y0cSRGRR4uH+nqZqoRdoqpKmHNg8fcZQNaQeuvZ4jn6SSyqpxfAH7JGDqLU0ucRhm3KzuOFytiTMH6hqDdsaM525tM1APziouobj+RRlTNc37HcnxqMVh2PB6uoZFRGKA65pQ1thW9qfrPl0Bn2HIHaomshms0GQBiQK4uQeuozT/oTSu3z/Dz/gjXRmswXJKWV9v+F69QzfH/P4eE/bi3z+ck8cFbz/tMOyp+TlEdFuaYWa7eMDktahihp5ntK2AbohIAwuT19CNF1mEDL6pqcseg7bj1wvNPTa4/glxXdlgijDmtqsrhZ03cD99gO1cGK6XKHaIqurGaom0Dc9mqZRVzkSCrIkMfNn5CeTvimo6hOT8QhFEFlN53z+sEYTbTafD6BKvFpM+fHd/8Lf/P4/8vT0gO1bmFqPaZpU+YBjzrj/ckfTVETHBEMx8e0JSVBRRTDSJyS7Gt+x0BSFTz+tCbcxQ2sh9jrLmY3cpXRpQ7lvEasBuZOw1QvGo3MRcjG+4G//8BahGfjd27dUdcFkMuL+sCXJT5iGjTsd0/QDr65WVEGMOLQsZ5f0Xcn19RRJaRhNBy4vfNpKAEQaKce2ZwiCTFVz7gAOZ6KJNzGwbANJcGkbEPoCXXMYqoqrZxqXVyZ1DGVWUxYCh3XJwreR+x6hhaGL8Dz4+G7N0PgYmoGpy9S5yNDJDPKWD+/WXI9vuB3bOJrGD58+8pCF1ILF0EpYM5NelllvnlBkyJIE356hSiqerWA5Jp8/HYnTgTAK6WjI8vOeesoDHsIDd+sd649b+rbDGfkckwLD9NBlkyAJma6WvPjFc1794i/49l++RrQHRHMgKSrKpoZBIy+zc1xcmrI7bMjLjrxKGNSc8dxClCV0w2F/ONF1GpttRtuKnKIAf7yg6mLSPEGSLYJTSF6GqIqFbg6kRUFRVKiKgCrLNOWAqU/ompa+1bAdnaKMafuzRKnpaibjOWWVohsi0+mIodOp6h5VNhiyEsqS5I+udFVxOAYxh3BH0+b0tYEimhTlCc0uqIcTfd7SdQmPpy2SblLnKUOjI2Kx2a4ZjTyiIOP+ywbfs8nyA1G8o8qOxMEJVRE4Bjv6vsd2bT7e3ZOVBZKo0rBnuz9xf7fDH6vUdctuE2FYLo7f09Dy9n3Bp8cDP3165H/+n3bcfUrJopLf//4LH36644fff+bDhw98enegLEOWyzlllbDZnI2/tjPh+tmI7/7M5uOHd0wXOlXZ0PXQ0TGZ+UiShOdO/tEFpfyP/eLEnbNfp2TJnouLC+pmYDyZEu5K9tufcD0NChmxV/mXf/af0fYVUZpQDRl9rxKdYhaLGcHhiCaJxHGMZdhIlYyjq9irOcvxc8LoiYl/gSzoyIaEaVrUbookKbR9wmwyp21bwrBE13XiZIemnTmhk+mUx/WOtm0RZYm6LmmHFk0zaJOGMi9wLRPTtJlMrmnqgdl8wvuPP9N2NS9fXOK4JnGa0NQgYvHy9QrTdHn/7u8wDAtRkNF1E2nocR3vjyxOlcurOe9+fGB5cXUek+QDAx3D0FFkMigigqbTCQKqabAPt3Rdh255ZHVOHMagdAiagCqa7MOYJChxnQnd0CDIDZ7lcTzs8GcjdMXl4fGJ5cUlhzig70qqLGY2nWBbMmXTE4QxoqLimjpFscd3NYJwg2mVdJ1BlTekSYVtzFG1AcfXUHSR0VjndEp59foGUYLdZiAtctKyp2o7dE1EN0Tu7jaMpzoMElcvfCgdyrhAELe8uL7C1m+Ioy2HfUTb6rx4+RVR2hKeDky9EQ/3MbpicjG54tP3G9aPR+rYIIoiDvGGkXeJqsJiIiF2Nvs4wTAVNFmlK1OEvsfWb2nbEsUWEYYBSfZp+4K6U5nOdOKjRJEWuOMZpj0QhDGqbpBlJWmYM/QdrqvyZ7/wOAQRpqbyfHFLmAd8+t0adWpxd/+RtlaQpI779Ts0HQRBYTaZM3Y0vtx/QOl1Xj37NevHLxyDEGc0pqxznJFJ29RcuFMcC4aqoqsGslPM5dX0TDrJSjxP5nSouLmZQicTRwWaaoDe4LoKkrgiySKKKsWeOJyyBCoZXTEohQLRlHFMgyztyItzAG5RD7z69hlB9oiun40fYRDRNBV5dsKxPeqyo607jqeIy6sLVnMTRdHYr3eokovrOOwOX9BKmw6LTG5ZLHVMw6YpO+K4J00zDg8C1yuXtttz2DYMg4mtO1jyGf2oWXO6JkdVOq4up1ysFnz58pGy6CjSnsl4QpbK5ElN0/QslxMMxwBEdMdhKsDD9h5B7DBlg4W/xFJ7Pv30FtN0MUc9P3z/M5cv52SRxOXtiqpuMQQR2ego6oyvvnlNlh3IiwR/4tIceqLiyP79iclkBB2YpkUUnZA1jaavCaM1F6vvsCyX/U+/ZzL/081V0zQGSUbTZQ7HLYpiUbcyh/sERZ0x9pZ0rcF+v2d14aEaMvf3T1ArTKYXFGnN5WrB3d1H+v6AphjUSc3lxSsUU6QpZcoko697wuDE6uqSPD+cBfTLWxRFZ7su8Z3zy8Q//PY9N1df8RSvCdcF8eEe1dd4/mZJWyc0dU3XbUkeZ4ixwdXCxTBCDrtPLK4m5GnMUEn8xZ//hvc/fcIy5lxfXXAMTkiii6EVTMczHnbvsWyfskwQRZGnxxB/rJ87xnHFzx93DLrM82crtnFIcNKw9BGlUTHV5zw83tEOMAwCnr0gi1s8x+Pnn99z/eyW9ectZSwwmXvYloYpVdh2T6VXHHZwKk40fYfaG6iqRFbGtK3Kp/sWx6y5vnzOb3/3N+gTjzIP6eUB3XZJo5av37wkfNqw2T0xkRaAwObpwO2zKz4+fER3YlzHQSh00qFCMiyqKKZrY2Szp6w6UGt0zaZuO1oxJylKBsmmGAK0QaKvTGYLmbYqoVmw8sZsNh8Jo4rpyiDbi1SZwO3tBc+fTTnuD3SqRFUX7DYFAhLPXt5wOOwINjFQn/flsOLmzWvGtkvThJj2nOn8As0RUCSBy8Uz7sJ3eP6EWolxrBbXmhMkEWkZoipjBn3Et7/+FZfXK758+h0/f/8f+frrZzyfXxBkJZQF/kRDkVU0XUTRRZqi5eaZxdDUrD9+YHP/xPqpYrIYMZob+J5FEO7R5AFBkmi6gSSrKOsecWix/TG7IESRQK0GdM2jb1s836Gpz3x21x0x9AJ1k4LYEeUpcQyev8IdiQypw24bIOtwe/mcqjlx97BGG5loioLveXza7GiFBkUX6IeaFy8uSZITYZAyHyuIvUSwO+JoHrrigt6gOBaNWJEmOUPvwpAjYVA1Oa7lMwwCoixiSBbCIKE4sH8M6euBuonoBhfTm2KPY5ReI00OTC/O42nb9Wgrm+2m5vLympqeMHwkPMYYqoAkNAxKz/u7n5gZJrsw5OWzC4pKJW9SLNNH1yT2xSMvnn9D25cIdYsp9UwuJLbrPb1QcPvnl3SqxG/XPyO7LnldoRgdZd1QZCJpcSBOde4CEUGQ8X0DxxQQB4n4lGFoc4RWxHE33K1DzLFNJzTMVnPKJPunLyg/fzhQ5R2zyQ2i1OH5FsJgIko5E8fGtDSypKBvBXbrCMMB21EQaxtRdMmSlLbtsZQRIjlxHHF9cUmXd3gWWNaK9283jGcCz25nBKeEsm54ejxxfT3l7Y+fWCzPSf27bc7plDCbgePaZFHLeDTn86dHVMVAlDvqrkVUQRNkTFPh7iHk9mZOVZSs1xUiBprR83d//1vqSsB1LUR6+lYjOR2I4j3z6Q1FWrF7+oim+ojSQN+DbU7YPH7Gsgw6asqmIjidqTGKuiTOUmxXQRQMVKVGkVyKLkUWJLK44MPmHf1Qsbp4jqaZCJLIbHLDKQ2phJAyj7HVJYYrIugph2OG0DfUQkxVdwiDTp73uL5BUq8xJhZ9pnF9cc3Ud3lcf8IbjSjqhv3hAVmoGZjSSjFdVSNJEuWQUucNpuVh2Am7Q4lp+1SVxLv3Gy5WE9ZPe/p2QFYqVEegp6buB+qywXBtXNdGN1vSpOBp36PWKlWQ8tXrOUIvcffpjvC0Z+Q76M6Eoa+QWzBVgWN8wBvPKJKa3/77n6nqjPFsjqzXxLmArOs87Q/okoZnz9kUKY6rUEcd5Dn+5DllXROUJaUU0YUiQ9tBFzLylkxmDt1Qsi02OPaIrs0YMEnLGqtWqRKRsS1TNwWKETGzdH46dLy+kPGsnh/+cGQIB+bfuOweH9DtCftdgONb6IZEmcWYmkWeHvEtk7E+RexK6v7E1csJYZIzsTz6QuHh7pGZb1PnHU2Vo9ozrrwRbb2nHAq0mUscB3jOJUkao8gtlxdLBOFMCaqamiwtkCUDWXcYZJGJLeEoFnXe0Q8CTatyTA7IvYZhnuUiqjrl8ekLdSOeIQNpgiicu/CypFFXDWlSYuoul1dLLF8n3u1RVZfTIWK+sCjqmL42adqCWpDxZROt989uQdVBUBR2Rc788oLN5sTSn0IvUDUJhmcTZyXKoHI8bBiEjNl8hG17RGFN1yrYtsVsZvD0cERRFG5urtjtH+k5j9A6sSc6PGAg4Ps+RQY9IavxJR++/4xrTnF0n+JY8ZtffE3bOLTaA/5EZbuNiLoWvTIR9Zb7zVu29yEvXl7TNA1Z+xlBtjAcD82yGfqCNI549uw5hyDm8f49hiXCoPG7H37HfHFBP/ypnigI9yiiRBRBEpeMpwZFl+D4Dt5YIwgfubn8M/6b//6/5f/8f/o/sjscsZ0Rz7664Q/f/w2OO+EUhEiCjCyJqFJFmda4rkurpWSdgSdJdHXJ/OaaXhS4v9/jXs3Ybk5IssopipmPb0nThqvrr4jzLZunI5eLOatnU1qzozzktCeRy7lBkaYYlc5Y7xFrgaIB2xhTlzJxssVxLvj40xHHmPPNL2747e9+QNN8BDFnfqnQF+fxftNXuM4EBpjOxuiqhyJJCIbCl+MXLm6e43owHCIkRWB5uyIOdvRig+1oVLVGP9T47pLxeMrx9AmRmq5tMUYynVJyCiLKDJ7dXPH2bYKv+4z8BqG3KPocz9TpGpn1+olf/uafY/six+MjdDnObIQgGDRtgWvKlENLnsbohsB8do1hKxyDiK5peUoLBF3A8Se0aOyPFbtjQKOc96OlOcIZV8RxiSYOpOmOwyHg5sUv2B5D8rKnUVqifGBh6FRlwu2zKaenA2myR2otilTize2Sh9Nb+sJg7Hl4S428MFDlKe2QE1cleVKg2R2b7R1f7g7MJzZ5nCIJV9xc3vLl+ImP63t+/Wf/nPvtE5LUIXcAAarlI3UukqBBp5InIPQRpm9wvxH4Z6/+Nc+/+SW92GPbLp7jYMgtutpwtw7IWxm9ccCseEpTlLxiXk+4Ht0itjWPTzskycJxZ4TpDsktCZLz+TJbTHEchQ/vP7G8usayDELpRJIfiY4l85mPIovURUlTKRiGTpafWCynnIKY+BQhSxaOJ7Pe3VNVCpYxZne8YzSB9mihGxmatmC/i2mFBMMcUeQdvjuQZkc836LKU/JMPndJsxpZcvCcJevHHbbdEZ0SuklP37p4zYC473BVm6f9DmemIskqNBqO2hJGHRfPp+i6zJf3Bwwcer1ArFzEvqdvezRBIE6fSJBodztETUGRJYJtgTcLMFSNIoWHzRFk60zqcXWqJudyvmJ9SOmGArHXuJjMqMqctgRV1hiNVYo0Y+zbHKMfqEsXC53p5QxBLygbnV+/+ZqffvodojNCtGfkRYDvemR1TZqCbQ6UlUyetIwdEWtsIww1f/Pvn/hX/+KfIw8D6/UPaNqI569eIYkPlHWDMChkcUSWhf/ogvIfPfIWpAHL71ndnoXujrXk6WlP2VQoFvz87jOz6QVXNxMmcw3DdBAGG0u3iIJHPE9k/zmlrRJMw0FqfR4eHnDmEkPvImNTDyWGZVMkA5vtFtsYo4o9VdtwsfJZTN/w6dOWts+QBZ2hl5FEE0URkI2Ssg5Zrcb4toMuDziGh2mM+Ph+h6a2JPERe+IyuxiTcqDpC+pWQtOhH2osWydJQ6IoxDRcHr7c8/nzR3753Rt0ycYzbTxDwhBlFtM5p0MKvU1Tt9Rlgaw2rLe/wzUnTEYzkiglimKqLmT3uCfJM5puwL2Y8vzbr5BFCVmH8WJCT0rXV0idwdydoGgpTS1y3EXcTGwUxUCXDEYjl7bvuPvyhbyqmU9f4AgOiiwg6wIlDa10Zn32dU+dCeRRg6jWWIaJoylo/ZixNWPkTVHVFloDXbLpmpbJhcybmzGmIuEYIpapYgoqUqcgdDrFCXxB5e3f3dM3PU0gsNmllBuRripwxi6qOefL3ZaqihhPHAZJxtEhLRUipabUbHZhQvgpJAyPFJSMZlPsscxkPkJTRWgEri9cVK1EMxzG1pjdXUKSRSBbpGmCqPS0YslxX6LJCrO5z2gywR1bnIKQtuyRJQlDPR8qZR0ysl2GwaftO15/9wLNn7D0VjSVSnUcGI+W7A9bHt89snw5oktbVH1Mneb0lchhveHl9W/QRJfj/sB294QiuYRFwDY+YuoTmkRCak0eP2yokoLrmzPycBtvkTWDojqg0FANZ46uKah0hYQmN7RlQd+caLuGpikQhAFdMlCRuBiPKfIT9/d37J4CTmnGu0+f6SORZv/AUCpIgkgdl3SNQZIdqJKSPEiQuoaRO8GxTFzbxLN1FCrmswmerzIUCUavnl9WipDFc4usL6nTHtdUwFJ4ffscFZfvf/f3aIrKMdsxVCXxl4r4c8mfffsdtmsyXch889WrcwdeHVFG8L/9r3+F746JQ1BViSqNzlmLw8Bpt6OtEhRF4RQVbIMDSVZSVilD16HLDobpYyg2/lTn6mLJKdpx9WrE9WpO2yX00sD6ac/P7/+Wqsj5/OkR27ZZTCfUZc7xEKMYc159/Q2KrfDDTztULoiimOXUZaTLFGmNog40xZG+2WCNZHRljjFAlla0TUFWlX+y2kIlyUruwycsZ0LTQnFoef36NdvjibSuGM1k/se/+r8wGZ91xFNtINx8ptUUZF9GkCW86Zjjbsu7T1sEraYdcqLHCDkJuBzb+IaOVEN4KKhEidNTzu6wx3Z0LqYjvEsHoZbpm5gyHfjF189xryS6umX/6QuG3ONe6xhaw8hW8OYDhmMiSCldr2M5ParaIusqg9BjWR1tH/LwdEeex+hKxNgz8dwJh/DAeGSzmMxocwXLsPE9g5tbj6GXuJnOKLqOMk0IHytMZ8ynzx/I8hLTdNFFl9XihuVoxtTysR2Lze4Tm6cj46sFSX6kF1RUc4ZuiUxGI07HEtdXEBQZWYOsaPjFL37J5XKMfaGyWM0osi3xIUASXL6sd6RRgiKpKIpCEJQYIkRpxJeHDEk1aAr5LB0QYXXxDKGWmc+nKGlLVScYMugoWH1PUWSE+wqzERHbhn3co44mlEKL5JakbUAanxCLDl0QkGyTplcYu5fcruYImoQ/8tgGnxlbl3z9zQpvovH+pw00InUfEuRboqDk9uYli9mS02bHs9WYpoXJ5Joo2bJLNghCw3hso7QVUp3gexaWYSAOOXl+Yjae0hUZktByzL9QiwNh2PCv//X/wL/6L/8bttGB4nSWOcVxwne/+k8JDwMtEkUZY0506jrHEFq6QiJMKxIhY5u3jG+uEGyZsiv56rtrNG2EruvIQwFNwbsfNhjWCqqEH354y/544HTMMVSb6BhAbxGfGoLTA3WfU7ctu22IaU6wXYfXb54xKBIiDpohMh8bDHRI3QhJO7PWt+uP5+5ab2A6ImkT0wgKh+hInuf0zUDX1PiWR1MmlMWJy9WSyWRC19lcvvgKRx1hIjCbXZKKDb0soBk9TdXRFh11VWFaM6YTj9M2pE468ihDUAaSPfgzAX9s8a/+7F/w6tsr9L5F25VUUoJqikTxAcsXqeoaWZb55S9fYyrWmUwmOqhSiyWLfPjwGaqC7776hr7q6JWOJOswdRtJkoirkkKQiIuYNO5pqprrV1eo2ol3v3+iE0pwWqzZnM1DTLFbM586FEJJmIdoosJ4cc1q+ZzldITQDaw/rqGTWc4t8i7B9nwETWMy08nSGtsYoxsqq/mM5JAzny3+6QvKrm9IsgJDt+m6jqenR3RdRVVl0jTj9evXqKqKruskSUIaJ/iOS1WUOJZNcIy5vp3y7NktoijjewqWpROdMqoy4xgGaLrC6RQQxydc18W2TZIkYbvZY5om9/f3mKaJ5zmoqoplGQjCQBiHCILAarXi+vqaxWKBrutUVYWpqSyXc8bjMbZtE/1RmCtJEpPJjCRJWMyWfPvNr/A8jygIWSwWWJaB73v4rsd6vUZVZWRFZBgGur6hbzuSJKGtG0aeR103yILK7e1zirwiiiI0zWAxv2S3PTJfzrBdh/l8zmQyQTdUJqMRoijywx9+5LjfM/J8ZEFEEkRs/VzgebZDXTaIwjlDUlV1TqcTjuOgyQrvfn5LVzcwKBR5xf39PbKs0vc9bVcynrgYpsZs6tN2JbfPruj7lvligmFoCMKAIA7opsV4MsO0XNpOIgwzBkE+53RWFWXRIA4yRVUgSiq3z16i6yqCpDAeTyjbkkGGqq5BlDFMk8XlirprycuCn9+/I0mPKFKLJA7Yts9hnxBHJRcXCzzPYzQa0XQtWZEznZ4xlqPRiLZt2W72KIqEqVtoskZZpVRFydAOjMc+WZZR1zVZniBInLNF04ibmxuOYcj954h/+Ps1qjTHtVYoks+XD0d0aYTQyWy2ey4vZ5i2w09vP+DYLrIosV6vmS+mZ9PKeMJkMmG7fqJtW1RZZjGdsd/vAfA8j7IsUTUD4CzJiGMeHh85hMGZQy+pTMZnJr3r+rRtT5bmuLaHJCl47phhkOjrgbaFOIwpioK6rinKks8fPlIVJfPZhCRJmC1n+L7LeLTgeDwiSSqj0QRRhMVihu973D674NXrF9zcXKEoEqORh+97XN1eYZo6uqlx9fI5ZVeB3DOdjanKhqYdyIoc3dVZXS6Qdfjw4WeWyxmiBLPZhNHY4S//1V/w8s0EWYeq7Hn4nPPzzxu+fN4xCCVf/+qKL593WKZDT8/d3QPrpz37Q0CUxCiqwW9+8xsOxw2n0wldNxmGgWEY6DuRPE+RRJWy6KlLiSwR+fIx4v3bI8EOpGHB62dX/OVf/IZXz265vlxhmSbDIPD+4x2G5TL0AqI84Ps+wfGELA1Ypo6iaEjC8MeMWYmmaTANi6bpKLOC+XzJ5mnH85cvqMoOUZT/ZCmKzGazQ9POkWBVVWFZFu/fvyeOYxRF4eHhgQ+fPnIMAtbbDXk3MIgKrjPi/ssD+/2e7fYJWemZjR1A4HA4J10s5hdoqkEQBGw2O4Zh4Nn1DaoscXmxom3PsT1hGPLh40cOwZHLiwuurlakUYzUw3K2pG96wmNA15yfx46B0WSM5TogS2RVSZxmNAN0fY3jW0wm57ig6XxGUZU0dYem6Vys5liWRdvVXFxN0S2FOE04hgFtX53jhUZjDF0lTSJc26RpGsI4QpRk9scdTVdiuRbL1YKeDkECVdM4xSG77Z7HpzVVdSaSNU1DmqakaUoUn6j/KGna7J749OULiALd0IMscTiF7Pd76rqmbVvyvGA8HiNJEkma4/s+un7eQ7MsRRBAkqRziLRh8vnzHZJmIcgahmkR5zlIIkmesLiYM7+YkiUJQtujKxJVkdGWLUMn/NEVf75W3/fEcXw2Rdg2URSdk1AE4axjrirCMKDrW/q+ZbPZMJ/PEQWJNM1omg7X9eh7sCyL+XSGKiuIf0wayYqUsqgYBgFds8mzBkU22e1OxEnIZDLhYnnDyFsxn12zmF8zGntnzV5TYOky7999z+9++zf83/8f/1eGvkZVJMS+IwgCJEliNBr9EbMsEUURRZYTBTFxnNK2HfefPtPkJbZmIIsKDw/rc2C3457NRF13TmwoS2RZxrZt1us1gzjg+v7Z6ayoiLJ6Bng4Dp8/fySKTtR1iSj+EfOsKBRFgWVZKKrEs2fPMIzzHlsUGcMwYBgGlmXRNA2WZVJVFYahIanSOZqrqQjCHXkRc/f5C21Vo6sax8OOuiipypyx59PVDYoqEAQ79vstmi7hujbD0OGOLObzCd/96iXLxQVtW5FkR3bbGNt26Yea+eyS0UQDoaWpBWTRIQpL3v386RxXaHV0XcfFxQWqqiII5zSePD/7Ena7HXmeI4giVdXQ1h1t21PXDX3TMhr7fP70juM+ZzYfQd9w92mDoam8eH7NzfUzQKRtejxvxGQ0Zb87MptOqeua1WrFbDYmSUMkWSQIDiiKhGFodH1N2xVkWYbrnv/D29tbiqL4RxeU/+iRtyyLfP31txwPCU3bMR6PCE9HFFUlyzJ8u6fvW2zLQNdVhkHj+x9+z/JizHK1YjIfER4PDHQISGhGi2d4mPqE3WZLmtas1wdevVycmbWOR5IkZ8ShWJKmKVXNeVRSZWi6RT90bPcbZEVCFGTiNOfL53s2mwPjiQnVOcMvTisWS488i4nzEN8ZkWYBUXjiF9/+Es/WEAaBTx+/oGkax/0W2zaZTucMfU2WZciihiRAniUUeYtlGTi2jSYrRNmRvhPp+uGPN0dHnAQ49rkYkiWTHoiSiLqCok/RlQGrs0GVsQ2Ti8WKMMm4ubxi6GqiNGI6GqMqDfnpwHQ6pQxqqqpAkiSETqCqKm6vrjF0lfbUQ98T7A+cBIWLiwvevLrh7dsfkBiITyGaqrB9emQ6WVLXOUWZYNka48mCH3/+gu0OyD0kp5xtGOGPJ1Rdj6yoeIbF6RSjGzI/f3hA1V0Wlxbrxz2S46IqAkVVIgvwuz98j2Vp9FFMy8AgCDSdiCTodM050mgx8Xj2L0d0JiimShFV9EMLnDf49XrD1eWC6XTK+m6DaZr0TUbbtvj+BB+DqoXtYY0hakiShCgLTGZjyipF0yWm0wmSOGCaJvOFSFIk5HlOQ0WSbNF0j27oqaUji7GLarkcDgHBMcJyxzBIjMc+bVVT1zUCFVfPLinznr5tUf947wuCwGg85f5pzatnz9g87UmyHE3TMTUV5B7VlOil84ikLEuoGgQLNEUlPB0ZXV2dtZSuTpHXOK6LpmkEwQ56ieXFBYJwHvsuL2YUxZnt3XUdZVPydH/E8z3u77bIl1NkRWAYuvOGJbaIosBuv+Fxfc+3v3iNIAzIsowoC7gjj7TMqLqS0cQjOEYcg5jl5RLF1Kj6EqnraYuKf/2f/wuyOGHlzKi6ijIqEBQYjc4HRD/UyJLB6nKFYZnI+kDTtvzhd594/uwKTZfQdBVt4nMqKjpSFM3i8eGJvm+QZYXtJsFxWyRJIQ5SFK3iaRsyNGDqFoal8ctfvebl80tsV6KsS6hbsjzkF9+84ukpJM8rgmNI1/VkeY3tuXR9xbt37xCVnvliwtA1UAu0zfnwiY4x/shFFM8a70EdyLKM0ylG0CrqqqMrkz/ZF010HNfn+vmKMilhECmKAlk+s4xlWabuWuIspVV6xqs5RVmy+3KPbDlYqkVdtFiOhWcY6LLCbp+gSApCL6DrJqIoUxY1z569Yjqfsd195qs3r0izgvXTA6fmyJ//57+hvhkwRzau7fDpyweGtsNQDZIyI08zvvvuV3x8+5ZBHJAUiV7oOcURZQ1C21F1Le50TJ9X9ENDEMac4ojlwkbXTYqiog86DuGWYTjfx57X0jTZ2Ymrnc1CT097kmpAo2c2GRMeD8iySJIkPHUtQXxA8zSSZIsswT4uGKgRJJAVmdX1FbKqULcQxiFdWnG9ek7eqHx8/Ixqm4iCzik5MfV9Pn6+w5IsLMfkabtm7E6p4gLXdiiqit3uQJYVuJ7B/hBwcfGcY7BDQkD9I0d7c9iw+uYlWZXzD394y5s//4rkVDKZz1g/bnn98iXHMODx6YHX1zdEQYZIS1G0qKJMsIlwJia2YZ41ykWJo4/OGltxQNMMRtMRWbzHtl2i05Y8z1ksJuRFgmnqhGF4Lio5434f79fc3C7ZBSGGrjNyPSpJpagHRqMRT9sNotAz5DWa7tE2CbPpNZVwPi8Xk0tGN3NG0xt0w+KHH36g63u6ouS37/6GH768Q1N6Rp5CW2Xswj2u49GLCofDhtMQI6BRlSW+49M0Hdv1BgGFMq9omhrHlenbmihOKfMSVTvrintdR6mhaRq6rmMYzvuNYYioGpRlyWg0Jc8LjscTI3eKJIHrO5w2R3THpChz5FahE6AXO9yZTteCbVqcgt35XLbP106SjDRNyeqEoWoQJImqrXEci6IoeHx4Yr5cIIogYbC//0I7tHQ0TGZTJEHBVFxk1SDNEyazMY5tc4pPWK5F2WZYlkZRJji2xKePX1A0nfuH92wOA5eXCxaXUz4HEftNjOtMiaMM2zm7z+uuI0400mxA0wuub1ZAgVcJ1HXD/f09xv+7vbvJSRiAojB6C6VtUjAkBke6AN3/mjAmWEAJ8pOCAx0yIOn0nE28b3Tf6W+Xth5XKcsyRUa5XousV19pqzJNPc7H8j3zeZ3u85LXt5dM2yL770t2u10262NGk8cc+kPqusls2maz3OTcJ13XZbFYZLtdZTROzsdTmqpNXxRpmiop+kxnbZJJ1vuf9H3/f4eXeXp+uDso7x42BwCAW+5/vQgAADcISgAABhGUAAAMIigBABhEUAIAMIigBABgEEEJAMAgghIAgEEEJQAAg/wCenUZdbdNd+0AAAAASUVORK5CYII=\n", + "text/plain": [ + "
" ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# show the results\n", + "visualizer.add_datasample(\n", + " 'result',\n", + " image,\n", + " data_sample=result,\n", + " draw_gt = None,\n", + " wait_time=0,\n", + ")\n", + "visualizer.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7GrWIJywLV-V" + }, + "source": [ + "## Train a Detector on A Customized Dataset\n", + "\n", + "To train a new detector, there are usually three things to do:\n", + "1. Support a new dataset\n", + "2. Modify the config\n", + "3. Train a new detector\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "E73y5Lru-wBx" + }, + "source": [ + "### Support a new dataset\n", + "\n", + "There are three ways to support a new dataset in MMDetection:\n", + " 1. Reorganize the dataset into a COCO format\n", + " 2. Reorganize the dataset into a middle format\n", + " 3. Implement a new dataset\n", + "\n", + "We recommend the first two methods, as they are usually easier than the third.\n", + "\n", + "In this tutorial, we give an example that converts the data into COCO format because MMDetection **only support evaluating mask AP of dataset in COCO format for now**. Other methods and more advanced usages can be found in the [doc](https://mmdetection.readthedocs.io/en/latest/advanced_guides/customize_dataset.html).\n", + "\n", + "First, let's download the [the balloon dataset](https://github.com/matterport/Mask_RCNN/tree/master/samples/balloon)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "rHnw5Q_nARXq" + }, + "outputs": [], + "source": [ + "# download and unzip the data\n", + "!wget -c https://github.com/matterport/Mask_RCNN/releases/download/v2.1/balloon_dataset.zip" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ucSfn1U_RYYW" + }, + "outputs": [], + "source": [ + "!unzip balloon_dataset.zip -d ./ballondatasets/" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Ro6JhfBVRYYX" + }, + "source": [ + "# Check the directory structure of the tiny data\n", + "\n", + "# Install tree first in your terminal(linux)\n", + "sudo apt-get -q install tree\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "Wuwxw1oZRtVZ", + "outputId": "2e472cfa-2e2f-41ea-ddec-5a9d49fe71cf" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%pip install tensorboard -i https://mirrors.ustc.edu.cn/pypi/web/simple" - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "/bin/bash: line 1: tree: command not found\n" + ] + } + ], + "source": [ + "!tree ballondatasets" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 836 }, + "id": "YnQQqzOWzE91", + "outputId": "ff7d3804-638c-461f-aef6-8c496a4b69c8" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 840, - "resources": { - "https://localhost:6006/?tensorboardColab=true": { - "data": "PCFkb2N0eXBlIGh0bWw+PG1ldGEgbmFtZT0idGItcmVsYXRpdmUtcm9vdCIgY29udGVudD0iLi8iPjwhZG9jdHlwZSBodG1sPjwhLS0KQGxpY2Vuc2UKQ29weXJpZ2h0IDIwMTkgVGhlIFRlbnNvckZsb3cgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiPgo8dGl0bGU+VGVuc29yQm9hcmQ8L3RpdGxlPgo8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTVFBQUFERUNBWUFBQURBcG81ckFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFCYWJnQUFXbTRCeFdzak9BQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQmwwU1VSQlZIaWM3WjE1ZUZUVjNjYy92NXNGQ1ZSeHFWdHB0VlcyVmx4ZjYxcXRpcTBMOUdsOU5YVUJGRXBGUlRJaGhCQURDVGRBTUFFa0NZc0s3cUI5K2tENzJxZkJXaXZxVzdWYTY3NGlyZTlyYXhYMWJaVldaVEhML040LzVnNEdTR0R1ekwxejc1MDVuMzg0ek13NTU4dk0vWEsyM3prSERJR2ppemhQRjNGZTBEb01JRUVMeUdkMFBvT3dhQUF1Y1Y1YWgwVzVWUEI2a0xyeUdXT0lBRkNiL3ZTakVxZ0crdXp3S3dnZHdDMTBVQ2ZWL0RzWWhmbUxNVVFXVVJ1TEVrWUQ4eEVPMnY3R2pvWndQc3hIV014aElFdWxsSzVzNnN4bmpDR3loQzdnSkpSVzRDU2daeFAwbkg0Smk1aVU4N2pmR2czR0VMNmpUUXdFNWdHamtXN2ZkK3FHU0xLV0lzcGtNbS83SU5QZ1lBemhFMnBUUWgrcXNLZ0MrZ0x1VGJCcmVpdXdtSFlhWkRxZmVpcllBQmhEZUk0cVFpTVhBd3NRRHZQQUJEMmxOeUxVczRuYnhTYWV1V3BERW1NSUQ5RWJPUUZvUlRodCs0ditHQ0w1NTdOQXVjUjRLaTNCaGwwd2h2QUFiZUFRTEd4Z0FtRDVhb0x1NmNTZml2QUxsRXFKOFk1TDZZYWRNSWJJQUxVcHBvaHJFV1lqN0wzOWpld2FJcG5lakxLUXZXbVVjV3hMNlI5ZzJBVmppRFRSdVl6Q29nWDRCcEE5RTNSUDkveiszNEdaVXNiS1hxUWJkb014aEV1MGdhTVJtbEhPOXZBQi82T1RPdGtEUXlUU3lpTW81UkxqdFo3K0hZYWVzWUlXRUJYVVpqK2RTeXZ3UE1yWkhoVzdFV0VpbjNFYVV6a1ZvUlQ0bXljbEMrZGc4Ykl1WmFYZXdvR2VsSmtIbUJaaUQ2aE5JVVdNUjJrQUR2Q29WZGlLc0pqNHJ1c0p1cHdTUHFNS3FFS2M5WXZleWttOXprMUFFd2ZTTEtXMFkrZ1ZZNGpkb1BXY2cwVUx3bEhiWDh6Y0VHc1J5bVRhN2xlY3RZbUJGRGtyM095d3hwMk9JWkxwRFFoVDVUb2UyRjNkK1l3eFJBL29IQVpCdDdCc2IxcUZGeW1nWENyZHhTVHBJczRFV2hDTzNhWE05TFdzbzRDWVhNTWJiclRrQThZUTNWQ2IvZ2lWeUU1aDJaa1o0aU9FT1J5ZWZ0U3EybGdNWURUS2ZPQWdqM1Ixb054Q0lYVXkwWVNaSnpHR3dIbmdMT2VCNnlrc083MEhML0hBaVhmN0duUVovV252d2JEcGF3U2NNUFA5VEpnNUdFT2dzMU1JeTNiL3NLMGpUa3hxL09tU2FDdURVQnFRN1R2dHZPald2WWhRTHRma2Q1aDUzaHBDYlJkaDJhay9WQnRRS3FTRzMzZ3F0aGUwbFhPQUZ1QW9EOWRFMWxKQW1mdzBQOFBNODg0UWFsTUN6clJtcW1IWmUzNlFOaUUwOFRuTlltZDNXbE50Q3RtWDhZZ3pMZHk3UmpmcFJKaDVFUTN5ay93S004OGJReWdJZFZ5TXhRTFVaVmgyNys5M290eUpNRk5xK0lmWG10MmdpOWlQUW1ZQjF5RVVibjhqTTNPOGgxTERSRmFKb0o0S0RpbDVZUWl0NVFRa2c3RHNubDk3Rkl0eXFlWlZUOFZtaUM1aEtFb3o0aHhyNDAxWDZsbVVtRnpEMHg1S0RTVTViUWl0NFJDS3NORU13N0ozZk8wdGxCcVp5UnFQNVhxS0xtWVVRZ3ZpQkI5Q3B1WlE0RjQ2cUpKSmZPQ3AyQkNSazRaUW0ySTZQUXpMVHZ5WkNLL2VoeHVsak04OWx1d0xhbFBNL3M3M0FIdDcxRnBzUmxoSVlXNkdtZWVjSVhTRzUySFpjWVQ3RUtiSkRENzBWbTEyME9VY1FnYzI0clNVNE1YMzhoWkNqVXdJZDB2cGxwd3hoTjdBVUFwb0JzN3pjQXJ5R1pTWTFQR01oMUlEUTI5MnRyZ3FwM24ySFZrOFNwd3A4bE5lOFZCcVlFVGVFR3F6SHgzTVFyZ09uTm1Wekgvc2Q0RVoxT2JlN0lvcXdpM09JUWh3R09ERjk5V0pPTE50NDRPZGJjdVV5QnBDYlFycFlEeDRHcGE5QlZqQWwyaVNDclo2S0RkMDZISks2S1FLU1NITVBOVzB4U2JpTkxGM2RNUE1JMmtJclhGV2FMMEx5MWJnRnhRd1RXWjZ0RUVuSXVqaUZNTE0zYVlUWWVZVk1pNDdLL1plRWlsRDZFd0dFZmM4TFBzNUxNcWxqajk0cHpSNjZNMmM2VXhHN0JwbTdqYjl4V3ZyS0tSTXhyTGVPNlgrRWdsRHFPMUVlU3JWQ0gyMnY1R1pJVFlDOVdBTyswcWlOaFlITzRjeGR3OHpoMHpXYlJKUnZ4M1JDRE1QdFNIVXhtSXJvN0djSHdpOGFCWGFnVnNwWWFZNURySm5kQm45c2FqRWNzTE1JUk5ESkVtRW1mY05kNWg1YUEyaE4zUUx5L1p1R25VdFFreHMvdGREcVRtTDNzb2d4T21pWm02SVpQb0ZsSElaeHhOZWF2V0swQmxDcXhpSTFXMlFCMTYwQ2kraGxNc2NmdStwMkR4QlZ6RENpWTlLVEdKa1pvaGtlaTF4SnNzNC91cWwxa3dKalNIVXBvUXR6alFnOVBXb1ZVaHMzMXpQVWxrVDNtWTZDcWhOSVY5eFRoOFJKOHdjTWpFRUpLYTVsOUNYdVZMS1o5NHFUby9BRGFFZ1RPTml4RmtvY3YrbDlwUk9YRXZWVHAwMGhYOGdGeVgwZHZaRG1RVk1BZ295TkVReS9SNUNEYU9EWHdnTjFCQTZsUk93ZWduTFR0OFE2eERLWlk2NXVOQlA5RGFHQVl1UWJyZW5adjdiL1FtTG1JemVmcEpoMWduRUVGcnVoR1h2N3JSczkxL3FCdUpNbFhubXpLRnNvcmN6Q3B4Z1NtOWFkMFdjTVBOeDJROHp6Nm9obk83Uk5KUmFoUDQ5cW5EL3BYNE0xRlBFeldMVDZhMWlReXJvWGV4Rm5BcmdCcUMvUitPL1Q3Q1lReEdMc3hrR2t2VVdRaXM0emprTjc0d2VWYVJ1aUVSWWRoR1ZZdk4vZm1nMXVFT1hjd2lGUG9XWlg1R2RNUFBBeGhCYXlTaUVWdURycmcyaFBJb3dSZWJsUnNoeHJxRjNjd0pkenRqUXV6V2tSMUhLWmJTL1czYURIVlRiRkxPWmF4SG1BRi9hUVZIUFg4eGJXTlJJUTI1dFNzbEZWQkh1OWlITUhPNmtpSmxTNmsrWWVlRFRyZ0JheGFIQUxHQUMwbU5UbTlpMldFeWoyTG0zYlRHWDBlV1VVSnppYWVhcHB6ZWgxSE1veStRc2I4ZU5vVEJFRXEzaVA1eHUxS21Pc3NURzlpNnFaRUh1Ym16UEIvUTJCbExNUE5URE1ITjRFNHNLdVpRSHZkSVpLa09BTXhNMW5URUlGMk5oeXp4ZUNGcVR3VHYwTHI3cmhKa2ZzLzNGek0xeFAzRXE1WXJNWTlSQ1p3aEQ3cU0yRm9jN1llYVNRWmo1anVrT0xHNmhnMW9aelNmcGFqT0dNQVNHcnFZL1c3dWRaZzZadHhiQyt5ZzJGbmVrRTJadURHRUlITDJQUVhTbEVXYSt1elE4ajBXNWxQS2tHeTNHRUliUW9QZHdQc0lpaEtGQXBvYUF4S1gyRStUSDNKbXFCdGUza0dvNUU3U2NIN3JOWnpEc0NibVNCOW5LMGNCRTRKOWVGQWtjNmlhRCsydDVsU05SN3RjWTYvUjZ4OGtHZzBmSVJEcGtEQ3Zvd3hCZ01XUjNIMHM2aGloeVV1ZFF3Q3NhbzFXdjZ4YW9aekI0Z0pUeXNZd21ScHpod0crelZhOTdRMWpiRFFGUUJKUlJ4SHFOTWRZelZRYURnNHhsdll6bWZJUWZnUDk3NFROcElib3pFTGhIeTNqWWRLTU1maUNYMDBZUnc0QnlTSCtkWVUrNE53UTlHaUtCTUlJQ1h0WXBOS3JOWHVuTE1oaDJSVXBwbHl0b1JSZ0cvcHlsNWEwaEVoU2pUT2Rmdks0eFJxWWp5bURZSFhJWkc4R2Z2ZGQrR0NMSk54RGFkQXB0V3NuWDA2akhZTWc2WG8waGRzZEl1bmhkSzdCTk44b1FkaktkWlVxVnZpaXorSVRYdEpJTDA4aHZNR1NGYkxRUTNUbUNPR3UxZ2pZdDUvQU15akVZZk1IUE1jVHVHRWtCYjJpbDZVWVp3a1ZRaG9Ca04rcFRYdFZwWE9CUm1RWkRSZ1JwaUNSSG9qeWdVMm5UYXRPTk1nUkx0c2NRdlNPTXBKUFh0UXBiSjNlN0ZNVmd5Q0x1RFNFK0dTSkJDY29zK3ZDYVR1dDJacWpCa0NYQzBHWGFGZUZJNEVHdG9rMm5PbWY2R0F4WklKeUcrSUxFYkpUcFJobXlSTmdOQVZBQ3pLS0VWM1U2Mzg5eTNZWThJd3FHU0RJSStLMVcwNmJUK1ZwQUdndzVUcFFNa1VBWmliQmVxN0hWcGpoUUxZYWNJM3FHU0pEb1JtM2pWYTNtZTBHTE1lUU9VVFZFa3NFSUQra050T2tNdmhxMEdFUDBpYm9oa293a3pucXRNZDBvUTJia2lpRUErZ0d6YU9jVnJlSGNvTVVZb29rclEyamk0S2RDbjdSNHhSRGdkenJEZEtNTTduSFhRbHdkZWpOMFp5U3dYbWVhYmxSZUUzZDNHSUhiTGxOWXUwdTkwUTlsRmwyOHJETVpFYlFZUTFiWmpGTFBOaGE1eWVUT0VQdEd6aEFKbEtIQTczUW1LN1dHZzRLV1kvQVZCVmJSd1NDNURGdkd1YnVDelowaE9pTnFpQVFDaktHQURUcVRtTnFSNnY0WlVrSDVFeGFueWFXTWxURzhuMDRSN2d6UkZXbERKTmtIb1lVdW50TmFUZ3Rhak1FVDNrVzRra3M1V1VwNU9wT0MzQm5DcjgxQndYQU13aE5hWjdwUmtVWFpBdFJUd0dDNWxKVWltUjllNXM0UThad3lCQ1M3VVlXOHFYWEU5QklLZ2haa1NCRmhGVVVNbHN1d3BaU3QzaFhyQXIyZW9SU3czbFdwMFVxL2hEQkpiSjdDa0plNGF5R0tjcTZGMkpsamdTZlZacVhhSEJpMEdFUDJ5ZWN4Uk0rbzA0MkNEVnBQVEZlYmJsUStZUXpST3dOUVdsalBzenFiVTRJV1k4Z091YjVTN1FYSG9meEI2MW1wOC9oeTBHSU0vbUphaU5SSWRLTTYyYUJ6VERjcWwzRm5DTW43SUxsOVVWcll3SjkwTGljSExjYmdQYWJMbEE3SzhTaFA2UnpUamNvMVRKY3BmUkxkcUM3VGpjb2xUQXVST2ZzaXRQQVhudEhabkJTMEdFTm11RE5FZXJjSDVRZktDVmc4cFhOWnFUWUhCQzNIa0I2bWhmQVdDMkVNUld6UUJtSnFwN1ZuUFZSb013T0MxcEFKdXBxRDNYemU3USsyNXowRXJxS2pjcGI5Z0JhS2VWSWJPU1pvTWVtZ1N6aFVsN0tjWXVZRXJTVWRkQlZEOUdjOFFBZFQzZVJ6TzZoMk4rMXF6SEVLU2xuUUl0eWdOc1c2aEJnV2J5SmNUWG9uc3dTRzNzZStlaCtOV0x3QzdtK21jcmRyVENsSyt5SGZNZDltNERHZ2pTNmVvSWpIMEJ6ZGt4Q25QV2dKcWFMTEdJWFNDdEc3VjF4dExJNWdOTEFBMGcvTWRMdU5NcE14eE5zb0R3TnIyWWVIeFA3aVFkRktLb0Q3TWlnN3ZBZ2RRVXZZRTdxTVk0blRnbkptMEZyU1FlL2pMT0swSUJ5ZGFWbnVER0ZSNUdKUFVoZUovUVZyRWRya0pwN3Y3WU95a0o5cEpaZEREdDVoTGVGdElYUXArd04xeEprRTBWdEgwWlY4RFl1NUtHTzg2cDY3N3pMdG5zMkkweFVxNU5leWdBOWNLTG1lTHI1TDRnUyszRUhEMTBMb2NvcG81enJpMUNQc0U3UWV0K2hLK2lGTUE2YWo3T1hsV05XTEx0UGJDQThqdTNhRjNDQ04vRldyYUVDWmwzZ2huVkpDU01nTW9Zc1p3ZWUwQU44S1dvdGJWQkh1WlF4S0U3aWJUazJWZEF6eFJWY29UcHNzN3IwcjVKb1NGckNaVWhJNzEzSURLeHlHMEtVTXBvdEZLQmRHOFQ4YnZZc1RXVVVyK0xzM3haMGh1cmliSXVaTE14LzdJVVpzT3JXUzZ4Q2VwUHQwWDIvN29LTkJvR01JYldZQVFqVmRUSUhvUlN2clBYd0Z1QkVZVFJaK2ZWZUdrS1c4NlplUTdYVXM1R21keG5MZ1dyL3J5Z29CZFpuVXhtSkE1dE9RUWFHcjZjdFd5b0Fad0pleVZXODRGMTIyVVkzdzNoNC9GNFhXSW9CWkpyMkpzOWlIRjRCN2lLSVo3bUlVVzNnRHBaRXNtZ0ZDYWdoWndpZEFoYnRNL21qSm1DeTJFSG9UWDlWbVZtTHhLRVF2WkVUdjVIaTlpOGNSZmcwY0hvU0cwSjV2S2syczFtbU1SaGpsUHJNUGd0SWxDNGJRQmZURFlockNkR0F2dit2ekdyMkgvZW1pRGdsK1BTUzBoZ0RBNG5xVXM0RCthWmNSdkRsODZ6S3BJaXppWW9TRkVMMnJpblU1UlJSekhWM2hXUThKWlpjcGlUVHhEa0s5ZHdWNlZsTHErRFR0cWdzNWtVVThDYXdtaW1hNGt4RVU4UkpLQzRURERKQmxRNmhOb2JwOUxQdlNBcnpvdVpqc21HTVR5cXRlRnFoTkhLb0xXWTd3UitCVUw4dk9Cbm9IUS9SMkhuRGkycjRadEo2ZDhkMFFPcGsrT29VUldrRXJuL0F1VTdqS1RYNng2VVM1bXNTQ29ELzRZUTdsQXl6T2tocmU4S3pJaFZ4RUFYK0c2SVZsQStqdGpBZGVROXlIWldjTFg3NVVuVUpmbmNJb25jSktDdmtRZUJnb0F3NUNhTllxQnJvcFQrYnpISEN6SDFwM3JjeVRVdDZtZ085SU5TOTdVdG9YSEVPMFk3MkdFZkp4cTJmaXRKd0JLT2NpakVMNUVkQy9sNGRySDdxNEJWek9IaWt6RUg0RTdzeVVFZW1aNHpVSytiNU1aNlBIYWd4WklLTVdRaWV4djhZWXF6SGFVRDRrTWNBYnc1NW5oVVpxQlQ5MlU1Zk01MU1rOUx2UEhxZUEwNDBab290clEraGtCbW9aVjJ1TU5ncDVuOFJxNkVqY3hza0lTN1hTM1NxcU5ISS95cTljMWVNVmUyNHQxbExDZVZMTnY3T2d4dUFUN2k1dUwrY2lMTjVCV0U3Q0JKbnNvRHVBT00ydWN5bVRJT0NIYm1kektQZnlaUzZTQ3U5dXNqRUVnOXNydGZyaDVaeU1jTGxPNVlldXNzeG5JOG9zenpSa2lzVVN1cmhTSm9ZanpOdVFHY0ZQM1FrM2F6WDd1c3JUbHlYQUgvMFJsRElLMU1zTXlzUW1IckFXZzBjRWJ3ZzRoRTZhM0dRUW16Z1dFeUd3LzVXN1VLNlJXdXlBNmpmNFJCZ01BVEJCcC9FOU54bGtIcThBUzN6U3N6dmFFUzZUT2xZRVVMZkJaOEppQ0NIT2NyVmRCdkgxb1JaNDJ4OUpQYklaWVpUTVpFMFc2elJra2JBWUFvVEQyY3hjVjFsc3RqZ2h3OW5nWXl4R1NDMi95MUo5aGdBSWp5RVNUTmJwbk80bWc4empRZUFYUHVsSjhnN0NxVEl6OElHOHdXZkNaZ2lMT0xlcjdYS1RTeWVUZ1gvNUk0bjFGSEM2MUxMQnAvSU5JU0pzaGdBWXdtWnEzV1J3RGtTYjZZT1c1eWppVEpuSjM5TXRRQnM0eWt0QkJuOEpveUVBcXJTYUUxemxLT1lXNENrUE5UekdYcHd0TmZ3ajNRTDBScVlqVkhxb3llQXpZVFZFSVhIdTBLdFREdzBSbXpnRlhJTTNheE8vQWk2UTZYeWFiZ0hhd0d6bjFBaERoQWlySVFDT1lRQlZiakxJSEY1RjBvaVAycEc3Z1V2RVpsczZtVlVSYmFBRmNkZnRNNFNETUJzQ29GYW51enlEZEFzMjhEOXAxU1kwaWMwNHNlbE1KN3V1cG9CNTNBN0UwcXJmRURoaE4wUWY0QTY5SlBXalNhU1pyVTVFYk9vSWlsSXBOdFZ1QlNiUjFSVHdaKzRDeHFkYmhpRjR3bTRJVUU3aTYweDJrMFhtOFJEQ3oxUDhlQmN3UVdaemszdHhDZFNtbUQrekJtRk11bVVZd2tINERRRWdOR2cxUjdyS0U2Y2MyTFNIVDMxT1lyeHdaN3JTMUthRVF0cUFINlZiaGlFOFJNTVFVSUp5bTVzamJHUWVIOEp1dTBEL3dtS0V6T2IrZEVYcEF2bzVabkFWbUdnSUwxRXhCTUIzcWVhbnJuSTBjQnZ3WkEvdkpJNklzWHQ4THlYVVpnRGJXQWVjblc0Wmh2QVJKVU9Bc2tCbjhOVlVQeTZKVFR3VFNIU05raVNPaUxGNUtXMFpOZ2RTd0g4REo2ZGJoaUdjUk1zUXNEZGQzT29tZzh4bEE3RFErZXZyeFBtTzJMeVZyZ0MxT1pnQ0hpR0NwMnNiOWt6VURBRndnVlp6aGFzY2hjeEZ1WnNDVHBlR0ZPNmQ2QVdkeTJGWVBBRW1QaWxYQ2ZVcGFydWhWV3RZNXd5Yzk0aXo2and1a3dyVlpqQngxa0hxWFRaRDlJaGlDd0d3UDhyaWJGV21jeGlHeFdNWU0rUThVVFVFS0tWNkF4ZjVYbzNOOGNSNUhEalU3N29Nd1JOZFF5UllwamI3K1ZXNHp1WkVoSWVCQS95cXd4QXVvbTZJZzltV2ZzakY3dERabklueUNQaG5PRVA0aUxvaFFMaEtxem5QeXlLMW52T0o4eUJadmdIVEVEelJOd1NBc0Z5cnZIbDQxZVlIS1BjRGZiMG96eEF0Y3NNUThEVUt1VEhUUXJTT3k0QmZrZ2c3TitRaHVXSUlnR3QxQm1la20xbHRya2E0bCtpdXpSZzhJSmNNWWFIY3BsUGNkM1cwamtuQXJlVFc5MkZJZzF4N0FBWlQ0dTRBWXExak9zSlNOQVEzV2hzQ0o5Y01BY3BVcmVYRWxENDZpM293SjJQa01HK2cvTkpOQm5lRzZPSnhKUFJubXhZUTV3NjFlNy9pUzBGMEZxMG9kZGtVWnNnYW00QnFDamxPUnJzN2Z0VFZBRktXOFRmZyt6cUZFY1JwQVpjblltU1A0YlJ6QTFDLzh4dHFZOUhKQ3BTZkJLREw0Qzl4NEQ2S21DcWw2UjB3bDFhWFNacFp4MWFPUXlrbjZQdmVla09vMFZxR2QzOUpMNkdBVHU1RWpCbHlEdUZSTEk2VEt4aWJyaGtnZ3pHRXJLQkRGdE5LSjBjQWkwbWNYaEVtaW9semo5cUpWbEJ0aWhuS2FvUXJneFptOEpTM0VFcmxDczZSeTNrbDA4SXlIbFRMTWo2U1ZtSUl3NEdITWkzUFk0NmpnM0tkVEI4NldRUCtSOGNhc3NabW9KNU9oc3NWM2wxZzQ5a2lsTFN3SGpoUFkxeUNNQjg0M0t1eU0wS1l6VDVjQkp3U3RCU0RKeWh3TDUxVXlUZys4THB3ejZkZHBaVTFER0FJUWpud2lkZmxwMEZmakJseWhXZFJUcE94alBYRERPRFRPb1RZdEVzenJSUXhERmdCNXRwYVEwYThoM0lsWXpoSnJ1UnBQeXZ5ZFdGTzVyTlJtcGtJbkFUOHdjKzZERG5KVnFDSnZneVZxMWdwZ3ZwZFlWWUMyYVNaNXhTK1F3VVhBd3VBdzdKUnJ5SFNyRVdaTEZmeDEyeFdtclhRRFFHVlJhemhNNzZKVUUvQy9RYkR6cnlBY29aY3hTZ1psMTB6UUFDeFRMS0NMYklRbXdJR0E2dkEvMmJRRUFrK0FzcnB4N2RsSEU4RUpTS3c0RDZaejd0eUUyT0JVeEJ6M1cwZTB3RXNwcDBqWkJ5dFVocnNBbS9nMGE2eWtHZm94Mm5PQ25KS0I0OFpjb1oxd0xFeW5waE1ERWNJVU9DR2dNU0ZpYktBbFNoSE9PT0x6L2VZeVJCbE5tQnhvWXpuWEJuUEcwR0w2VTRvREpGRUZySlo1bU5Ud0ZHSWQ4dnhodER3TWNway9zNVJNbzdmQkMybUowSzVmMWdhZVFzbzFXck9kc0xNaCs4cGp5SDh5SVRNRDRMd20xQzFFRHNqalR4S0NjY2pUSVQwUTNvTmhsUUp0U0VBeEtaVEdsbUJNQVNsQ1dnUFdwTWhkd205SVpKSUk1dGtQdFhFT1JyQzJmODBSSi9JR0NLSnpHZUROSEloY0M2RWE0YkNFSDBpWjRnazBzZzZQdUpZSjh3OEZIUFlodWdUV1VPQXM0MTFIcTNBRWM0RkttSGJ4bXFJR0pFMlJCSzVrWS9rUm1MRU9SRjRQR2c5aHVpU0U0WklJbzI4S1BNNEUvZ0I4SGJRZWd6Ukk2Y01rVVFhYUdNTDMwS3BCajROV284aE91U2tJUUNrbWEweWp5WUtHWXFhYmF5RzFNaFpReVFSbTQzU3dFU1VreENlQ2xwUHhQZ3Y0dHN2dmM4TGN0NFFTYVNCNTVqTjZRaWx3RHRCNndrNWJ3TG55eVQrVXlibjExZ3Nid3dCempiVzJheWhnR0Vrem4zZEZyU21rUEV4U2puL1pMaE00cmRCaXdtQ3ZESkVFckhaSXJPeHNSZ0VyQ0lMcHptRW5FNWdCVVVNa2NtMGlrMW4wSUtDSWk4TmtVUnMzcFhaaktXTHM0Q1hndFlUQ01vanhEbE9Kak5SSnZMUG9PVUVUVjRiSW9uTTRmY0lKK1RaTnRhL0lKUktHU01reG10Qml3a0x4aEFPWWhNWG01WEFrWkRUMjFnL1E2a0hoc3Rrc3l0eFo0d2hka0pzUGhNYm13S0dRMDQ5TUhGZ0ZjcVJFc09Xc3B3MWZFYUVjZ3RwR0pCYS9nS1VhajNuQU0xRWV4dnJNeWd4S2VlWm9JV0VIZE5DN0FHWnhTTW94ME1rdDdHK0MxeEpqRk9NR1ZMREdDSUZ4S1pUNmxoQm5LRWtia3NLKzdUa0ZxQ2VPSU9sUER1SEJPY0t4aEF1RUp1UHBZNFlCUXhIZVRCb1BUMmd3QnE2K0taTXdaWUtjMzZ1Vzh3WUlnMmtoamVCQzNRT0kwaTBHTU1DbGdUQzgwQk1wcGhyQnpMQnRCQVpJTFdzNDhzY0UvQnRyTzhqVE9UZmZOdVlJWE9NSVRKRUp0SWh0YlJpY1FTUzFXMnM3Y0JpaWhncVUxZ2h0Z2x2OXdKakNJK1FHajZTR21MQXQ4SDM0OXpYWWpGTXBoS1RzbERjNDVjem1ER0V4OGdNWGdETzBMbU13cUxWNCtMZlJEaGJwdktZeCtVYURQNmpOaVhheUJsQjZ6Q2t6djhEUWQ3UXJNYkxSMUFBQUFBQVNVVk9SSzVDWUlJPSI+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FZQUFBREFwbzVyQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUJhYmdBQVdtNEJ4V3NqT0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFCbDBTVVJCVkhpYzdaMTVlRlRWM2NjL3Y1c0ZDVlJ4cVZ0cHRWVzJWbHhmNjFxdGlxMEw5R2w5TlhVQkZFcEZSVEloaEJBRENUZEFNQUVrQ1lzSzdxQjkra0Q3MnFmQldpdnFXN1ZhNjc0aXJlOXJheFgxYlpWV1pUSEwvTjQvNWc0R1NHRHV6TDF6NzUwNW4zODR6TXc1NTh2TS9YSzIzemtIRElHaml6aFBGM0ZlMERvTUlFRUx5R2QwUG9Pd2FBQXVjVjVhaDBXNVZQQjZrTHJ5R1dPSUFGQ2IvdlNqRXFnRyt1endLd2dkd0MxMFVDZlYvRHNZaGZtTE1VUVdVUnVMRWtZRDh4RU8ydjdHam9ad1BzeEhXTXhoSUV1bGxLNXM2c3huakNHeWhDN2dKSlJXNENTZ1p4UDBuSDRKaTVpVTg3amZHZzNHRUw2alRRd0U1Z0dqa1c3ZmQrcUdTTEtXSXNwa01tLzdJTlBnWUF6aEUycFRRaCtxc0tnQytnTHVUYkJyZWl1d21IWWFaRHFmZWlyWUFCaERlSTRxUWlNWEF3c1FEdlBBQkQybE55TFVzNG5ieFNhZXVXcERFbU1JRDlFYk9RRm9SVGh0KzR2K0dDTDU1N05BdWNSNEtpM0JobDB3aHZBQWJlQVFMR3hnQW1ENWFvTHU2Y1NmaXZBTGxFcUo4WTVMNllhZE1JYklBTFVwcG9ockVXWWo3TDM5amV3YUlwbmVqTEtRdldtVWNXeEw2UjlnMkFWamlEVFJ1WXpDb2dYNEJwQTlFM1JQOS96KzM0R1pVc2JLWHFRYmRvTXhoRXUwZ2FNUm1sSE85dkFCLzZPVE90a0RReVRTeWlNbzVSTGp0WjcrSFlhZXNZSVdFQlhVWmorZFN5dndQTXJaSGhXN0VXRWluM0VhVXprVm9SVDRteWNsQytkZzhiSXVaYVhld29HZWxKa0htQlppRDZoTklVV01SMmtBRHZDb1ZkaUtzSmo0cnVzSnVwd1NQcU1LcUVLYzlZdmV5a205emsxQUV3ZlNMS1cwWStnVlk0amRvUFdjZzBVTHdsSGJYOHpjRUdzUnltVGE3bGVjdFltQkZEa3IzT3l3eHAyT0laTHBEUWhUNVRvZTJGM2QrWXd4UkEvb0hBWkJ0N0JzYjFxRkZ5bWdYQ3JkeFNUcElzNEVXaENPM2FYTTlMV3NvNENZWE1NYmJyVGtBOFlRM1ZDYi9naVZ5RTVoMlprWjRpT0VPUnllZnRTcTJsZ01ZRFRLZk9BZ2ozUjFvTnhDSVhVeTBZU1pKekdHd0huZ0xPZUI2eWtzTzcwSEwvSEFpWGY3R25RWi9XbnZ3YkRwYXdTY01QUDlUSmc1R0VPZ3MxTUl5M2Ivc0swalRreHEvT21TYUN1RFVCcVE3VHZ0dk9qV3ZZaFFMdGZrZDVoNTNocENiUmRoMmFrL1ZCdFFLcVNHMzNncXRoZTBsWE9BRnVBb0Q5ZEUxbEpBbWZ3MFA4UE04ODRRYWxNQ3pyUm1xbUhaZTM2UU5pRTA4VG5OWW1kM1dsTnRDdG1YOFlnekxkeTdSamZwUkpoNUVRM3lrL3dLTTg4YlF5Z0lkVnlNeFFMVVpWaDI3Kzkzb3R5Sk1GTnErSWZYbXQyZ2k5aVBRbVlCMXlFVWJuOGpNM084aDFMRFJGYUpvSjRLRGlsNVlRaXQ1UVFrZzdEc25sOTdGSXR5cWVaVlQ4Vm1pQzVoS0VvejRoeHI0MDFYNmxtVW1GekQweDVLRFNVNWJRaXQ0UkNLc05FTXc3SjNmTzB0bEJxWnlScVA1WHFLTG1ZVVFndmlCQjlDcHVaUTRGNDZxSkpKZk9DcDJCQ1JrNFpRbTJJNlBRekxUdnlaQ0svZWh4dWxqTTg5bHV3TGFsUE0vczczQUh0NzFGcHNSbGhJWVc2R21lZWNJWFNHNTJIWmNZVDdFS2JKREQ3MFZtMTIwT1VjUWdjMjRyU1U0TVgzOGhaQ2pVd0lkMHZwbHB3eGhON0FVQXBvQnM3emNBcnlHWlNZMVBHTWgxSURRMjkydHJncXAzbjJIVms4U3B3cDhsTmU4VkJxWUVUZUVHcXpIeDNNUXJnT25ObVZ6SC9zZDRFWjFPYmU3SW9xd2kzT0lRaHdHT0RGOTlXSk9MTnQ0NE9kYmN1VXlCcENiUXJwWUR4NEdwYTlCVmpBbDJpU0NyWjZLRGQwNkhKSzZLUUtTU0hNUE5XMHhTYmlOTEYzZE1QTUkya0lyWEZXYUwwTHkxYmdGeFF3VFdaNnRFRW5JdWppRk1MTTNhWVRZZVlWTWk0N0svWmVFaWxENkV3R0VmYzhMUHM1TE1xbGpqOTRwelI2Nk0yYzZVeEc3QnBtN2piOXhXdnJLS1JNeHJMZU82WCtFZ2xEcU8xRWVTclZDSDIydjVHWklUWUM5V0FPKzBxaU5oWUhPNGN4ZHc4emgweldiUkpSdngzUkNETVB0U0hVeG1Jcm83R2NId2k4YUJYYWdWc3BZYVk1RHJKbmRCbjlzYWpFY3NMTUlSTkRKRW1FbWZjTmQ1aDVhQTJoTjNRTHkvWnVHblV0UWt4cy90ZERxVG1MM3NvZ3hPbWlabTZJWlBvRmxISVp4eE5lYXZXSzBCbENxeGlJMVcyUUIxNjBDaStobE1zY2Z1K3AyRHhCVnpEQ2lZOUtUR0prWm9oa2VpMXhKc3M0L3VxbDFrd0pqU0hVcG9RdHpqUWc5UFdvVlVoczMxelBVbGtUM21ZNkNxaE5JVjl4VGg4Uko4d2NNakVFSkthNWw5Q1h1VkxLWjk0cVRvL0FEYUVnVE9OaXhGa29jditsOXBST1hFdlZUcDAwaFg4Z0Z5WDBkdlpEbVFWTUFnb3lORVF5L1I1Q0RhT0RYd2dOMUJBNmxST3dlZ25MVHQ4UTZ4REtaWTY1dU5CUDlEYUdBWXVRYnJlblp2N2IvUW1MbUl6ZWZwSmgxZ25FRUZydWhHWHY3clJzOTEvcUJ1Sk1sWG5tektGc29yY3pDcHhnU205YWQwV2NNUE54MlE4eno2b2huTzdSTkpSYWhQNDlxbkQvcFg0TTFGUEV6V0xUNmExaVF5cm9YZXhGbkFyZ0JxQy9SK08vVDdDWVF4R0xzeGtHa3ZVV1FpczR6amtONzR3ZVZhUnVpRVJZZGhHVll2Ti9mbWcxdUVPWGN3aUZQb1daWDVHZE1QUEF4aEJheVNpRVZ1RHJyZzJoUElvd1JlYmxSc2h4cnFGM2N3SmR6dGpRdXpXa1IxSEtaYlMvVzNhREhWVGJGTE9aYXhIbUFGL2FRVkhQWDh4YldOUklRMjV0U3NsRlZCSHU5aUhNSE82a2lKbFM2aytZZWVEVHJnQmF4YUhBTEdBQzBtTlRtOWkyV0V5ajJMbTNiVEdYMGVXVVVKemlhZWFwcHplaDFITW95K1FzYjhlTm9UQkVFcTNpUDV4dTFLbU9zc1RHOWk2cVpFSHVibXpQQi9RMkJsTE1QTlRETUhONEU0c0t1WlFIdmRJWktrT0FNeE0xblRFSUYyTmh5enhlQ0ZxVHdUdjBMcjdyaEprZnMvM0Z6TTF4UDNFcTVZck1ZOVJDWndoRDdxTTJGb2M3WWVhU1FaajVqdWtPTEc2aGcxb1p6U2ZwYWpPR01BU0dycVkvVzd1ZFpnNlp0eGJDK3lnMkZuZWtFMlp1REdFSUhMMlBRWFNsRVdhK3V6UThqMFc1bFBLa0d5M0dFSWJRb1Bkd1BzSWloS0ZBcG9hQXhLWDJFK1RIM0ptcUJ0ZTNrR281RTdTY0g3ck5aekRzQ2JtU0I5bkswY0JFNEo5ZUZBa2M2aWFEKzJ0NWxTTlI3dGNZNi9SNng4a0dnMGZJUkRwa0RDdm93eEJnTVdSM0gwczZoaWh5VXVkUXdDc2FvMVd2Nnhhb1p6QjRnSlR5c1l3bVJwemh3Ryt6VmE5N1ExamJEUUZRQkpSUnhIcU5NZFl6VlFhRGc0eGx2WXptZklRZmdQOTc0VE5wSWJvekVMaEh5M2pZZEtNTWZpQ1gwMFlSdzRCeVNIK2RZVSs0TndROUdpS0JNSUlDWHRZcE5Lck5YdW5MTWhoMlJVcHBseXRvUlJnRy9weWw1YTBoRWhTalRPZGZ2SzR4UnFZanltRFlIWElaRzhHZnZkZCtHQ0xKTnhEYWRBcHRXc25YMDZqSFlNZzZYbzBoZHNkSXVuaGRLN0JOTjhvUWRqS2RaVXFWdmlpeitJVFh0SklMMDhodk1HU0ZiTFFRM1RtQ09HdTFnall0NS9BTXlqRVlmTUhQTWNUdUdFa0JiMmlsNlVZWndrVlFob0JrTitwVFh0VnBYT0JSbVFaRFJnUnBpQ1JIb2p5Z1UyblRhdE9OTWdSTHRzY1F2U09NcEpQWHRRcGJKM2U3Rk1WZ3lDTHVEU0UrR1NKQkNjb3MrdkNhVHV0MlpxakJrQ1hDMEdYYUZlRkk0RUd0b2sybk9tZjZHQXhaSUp5RytJTEViSlRwUmhteVJOZ05BVkFDektLRVYzVTYzODl5M1lZOEl3cUdTRElJK0sxVzA2YlQrVnBBR2d3NVRwUU1rVUFaaWJCZXE3SFZwamhRTFlhY0kzcUdTSkRvUm0zalZhM21lMEdMTWVRT1VUVkVrc0VJRCtrTnRPa012aHEwR0VQMGlib2hrb3drem5xdE1kMG9RMmJraWlFQStnR3phT2NWcmVIY29NVVlvb2tyUTJqaTRLZENuN1I0eFJEZ2R6ckRkS01NN25IWFFsd2Rlak4wWnlTd1htZWFibFJlRTNkM0dJSGJMbE5ZdTB1OTBROWxGbDI4ckRNWkViUVlRMWJaakZMUE5oYTV5ZVRPRVB0R3poQUpsS0hBNzNRbUs3V0dnNEtXWS9BVkJWYlJ3U0M1REZ2R3VidUN6WjBoT2lOcWlBUUNqS0dBRFRxVG1OcVI2djRaVWtINUV4YW55YVdNbFRHOG4wNFI3Z3pSRldsREpOa0hvWVV1bnROYVRndGFqTUVUM2tXNGtrczVXVXA1T3BPQzNCbkNyODFCd1hBTXdoTmFaN3BSa1VYWkF0UlR3R0M1bEpVaW1SOWU1czRROFp3eUJDUzdVWVc4cVhYRTlCSUtnaFprU0JGaEZVVU1sc3V3cFpTdDNoWHJBcjJlb1JTdzNsV3AwVXEvaERCSmJKN0NrSmU0YXlHS2NxNkYySmxqZ1NmVlpxWGFIQmkwR0VQMnllY3hSTStvMDQyQ0RWcFBURmViYmxRK1lRelJPd05RV2xqUHN6cWJVNElXWThnT3ViNVM3UVhIb2Z4QjYxbXA4L2h5MEdJTS9tSmFpTlJJZEtNNjJhQnpURGNxbDNGbkNNbjdJTGw5VVZyWXdKOTBMaWNITGNiZ1BhYkxsQTdLOFNoUDZSelRqY28xVEpjcGZSTGRxQzdUamNvbFRBdVJPZnNpdFBBWG50SFpuQlMwR0VObXVETkVlcmNINVFmS0NWZzhwWE5acVRZSEJDM0hrQjZtaGZBV0MyRU1SV3pRQm1KcXA3Vm5QVlJvTXdPQzFwQUp1cHFEM1h6ZTdRKzI1ejBFcnFLamNwYjlnQmFLZVZJYk9TWm9NZW1nU3poVWw3S2NZdVlFclNVZGRCVkQ5R2M4UUFkVDNlUnpPNmgyTisxcXpIRUtTbG5RSXR5Z05zVzZoQmdXYnlKY1RYb25zd1NHM3NlK2VoK05XTHdDN20rbWNyZHJUQ2xLK3lIZk1kOW00REdnalM2ZW9JakgwQnpka3hDblBXZ0pxYUxMR0lYU0N0RzdWMXh0TEk1Z05MQUEwZy9NZEx1Tk1wTXh4TnNvRHdOcjJZZUh4UDdpUWRGS0tvRDdNaWc3dkFnZFFVdllFN3FNWTRuVGduSm0wRnJTUWUvakxPSzBJQnlkYVZudURHRlI1R0pQVWhlSi9RVnJFZHJrSnA3djdZT3lrSjlwSlpkRER0NWhMZUZ0SVhRcCt3TjF4SmtFMFZ0SDBaVjhEWXU1S0dPODZwNjc3ekx0bnMySTB4VXE1TmV5Z0E5Y0tMbWVMcjVMNGdTKzNFSEQxMExvY29wbzV6cmkxQ1BzRTdRZXQraEsraUZNQTZhajdPWGxXTldMTHRQYkNBOGp1M2FGM0NDTi9GV3JhRUNabDNnaG5WSkNTTWdNb1lzWndlZTBBTjhLV290YlZCSHVaUXhLRTdpYlRrMlZkQXp4UlZjb1Rwc3M3cjByNUpvU0ZyQ1pVaEk3MTNJREt4eUcwS1VNcG90RktCZEc4VDhidllzVFdVVXIrTHMzeFowaHVyaWJJdVpMTXgvN0lVWnNPcldTNnhDZXBQdDBYMi83b0tOQm9HTUliV1lBUWpWZFRJSG9SU3ZyUFh3RnVCRVlUUlorZlZlR2tLVzg2WmVRN1hVczVHbWR4bkxnV3Ivcnlnb0JkWm5VeG1KQTV0T1FRYUdyNmN0V3lvQVp3SmV5Vlc4NEYxMjJVWTN3M2g0L0Y0WFdJb0JaSnIySnM5aUhGNEI3aUtJWjdtSVVXM2dEcFpFc21nRkNhZ2had2lkQWhidE0vbWpKbUN5MkVIb1RYOVZtVm1MeEtFUXZaRVR2NUhpOWk4Y1JmZzBjSG9TRzBKNXZLazJzMW1tTVJoamxQck1QZ3RJbEM0YlFCZlREWWhyQ2RHQXZ2K3Z6R3IySC9lbWlEZ2wrUFNTMGhnREE0bnFVczREK2FaY1J2RGw4NnpLcElpemlZb1NGRUwycmluVTVSUlJ6SFYzaFdROEpaWmNwaVRUeERrSzlkd1Y2VmxMcStEVHRxZ3M1a1VVOENhd21pbWE0a3hFVThSSktDNFREREpCbFE2aE5vYnA5TFB2U0Fyem91WmpzbUdNVHlxdGVGcWhOSEtvTFdZN3dSK0JVTDh2T0Jub0hRL1IySG5EaTJyNFp0SjZkOGQwUU9waytPb1VSV2tFcm4vQXVVN2pLVFg2eDZVUzVtc1NDb0QvNFlRN2xBeXpPa2hyZThLekloVnhFQVgrRzZJVmxBK2p0akFkZVE5eUhaV2NMWDc1VW5VSmZuY0lvbmNKS0N2a1FlQmdvQXc1Q2FOWXFCcm9wVCtiekhIQ3pIMXAzcmN5VFV0Nm1nTzlJTlM5N1V0b1hIRU8wWTcyR0VmSnhxMmZpdEp3QktPY2lqRUw1RWRDL2w0ZHJIN3E0QlZ6T0hpa3pFSDRFN3N5VUVlbVo0elVLK2I1TVo2UEhhZ3haSUtNV1FpZXh2OFlZcXpIYVVENGtNY0FidzU1bmhVWnFCVDkyVTVmTTUxTWs5THZQSHFlQTA0MFpvb3RyUStoa0Jtb1pWMnVNTmdwNW44UnE2RWpjeHNrSVM3WFMzU3FxTkhJL3lxOWMxZU1WZTI0dDFsTENlVkxOdjdPZ3h1QVQ3aTV1TCtjaUxONUJXRTdDQkpuc29EdUFPTTJ1Y3ltVElPQ0hibWR6S1BmeVpTNlNDdTl1c2pFRWc5c3J0ZnJoNVp5TWNMbE81WWV1c3N4bkk4b3N6elJraXNVU3VyaFNKb1lqek51UUdjRlAzUWszYXpYN3VzclRseVhBSC8wUmxESUsxTXNNeXNRbUhyQVdnMGNFYndnNGhFNmEzR1FRbXpnV0V5R3cvNVc3VUs2Uld1eUE2amY0UkJnTUFUQkJwL0U5Tnhsa0hxOEFTM3pTc3p2YUVTNlRPbFlFVUxmQlo4SmlDQ0hPY3JWZEJ2SDFvUlo0Mng5SlBiSVpZWlRNWkUwVzZ6UmtrYkFZQW9URDJjeGNWMWxzdGpnaHc5bmdZeXhHU0MyL3kxSjloZ0FJanlFU1ROYnBuTzRtZzh6alFlQVhQdWxKOGc3Q3FUSXo4SUc4d1dmQ1pnaUxPTGVyN1hLVFN5ZVRnWC81STRuMUZIQzYxTExCcC9JTklTSnNoZ0FZd21acTNXUndEa1NiNllPVzV5amlUSm5KMzlNdFFCczR5a3RCQm44Sm95RUFxclNhRTF6bEtPWVc0Q2tQTlR6R1hwd3ROZndqM1FMMFJxWWpWSHFveWVBellUVkVJWEh1MEt0VER3MFJtemdGWElNM2F4Ty9BaTZRNlh5YWJnSGF3R3puMUFoRGhBaXJJUUNPWVFCVmJqTElIRjVGMG9pUDJwRzdnVXZFWmxzNm1WVVJiYUFGY2RmdE00U0RNQnNDb0ZhbnV6eURkQXMyOEQ5cDFTWTBpYzA0c2VsTUo3dXVwb0I1M0E3RTBxcmZFRGhoTjBRZjRBNjlKUFdqU2FTWnJVNUViT29JaWxJcE50VnVCU2JSMVJUd1orNEN4cWRiaGlGNHdtNElVRTdpNjB4MmswWG04UkRDejFQOGVCY3dRV1p6azN0eENkU21tRCt6Qm1GTXVtVVl3a0g0RFFFZ05HZzFSN3JLRTZjYzJMU0hUMzFPWXJ4d1o3clMxS2FFUXRxQUg2VmJoaUU4Uk1NUVVJSnltNXNqYkdRZUg4SnV1MEQvd21LRXpPYitkRVhwQXZvNVpuQVZtR2dJTDFFeEJNQjNxZWFucm5JMGNCdndaQS92Skk2SXNYdDhMeVhVWmdEYldBZWNuVzRaaHZBUkpVT0Fza0JuOE5WVVB5NkpUVHdUU0hTTmtpU09pTEY1S1cwWk5nZFN3SDhESjZkYmhpR2NSTXNRc0RkZDNPb21nOHhsQTdEUStldnJ4UG1PMkx5VnJnQzFPWmdDSGlHQ3Ayc2I5a3pVREFGd2dWWnpoYXNjaGN4RnVac0NUcGVHRk82ZDZBV2R5MkZZUEFFbVBpbFhDZlVwYXJ1aFZXdFk1d3ljOTRpejZqd3Vrd3JWWmpCeDFrSHFYVFpEOUloaUN3R3dQOHJpYkZXbWN4aUd4V01ZTStROFVUVUVLS1Y2QXhmNVhvM044Y1I1SERqVTc3b013Uk5kUXlSWXBqYjcrVlc0enVaRWhJZUJBL3lxd3hBdW9tNklnOW1XZnNqRjd0RFpuSW55Q1Bobk9FUDRpTG9oUUxoS3F6blB5eUsxbnZPSjh5Qlp2Z0hURUR6Uk53U0FzRnlydkhsNDFlWUhLUGNEZmIwb3p4QXRjc01ROERVS3VUSFRRclNPeTRCZmtnZzdOK1FodVdJSWdHdDFCbWVrbTFsdHJrYTRsK2l1elJnOElKY01ZYUhjcGxQY2QzVzBqa25BcmVUVzkyRklnMXg3QUFaVDR1NEFZcTFqT3NKU05BUTNXaHNDSjljTUFjcFVyZVhFbEQ0Nmkzb3dKMlBrTUcrZy9OSk5CbmVHNk9KeEpQUm5teFlRNXc2MWU3L2lTMEYwRnEwb2Rka1Vac2dhbTRCcUNqbE9ScnM3ZnRUVkFGS1c4VGZnK3pxRkVjUnBBWmNuWW1TUDRiUnpBMUMvOHh0cVk5SEpDcFNmQktETDRDOXg0RDZLbUNxbDZSMHdsMWFYU1pwWngxYU9ReWtuNlB2ZWVrT28wVnFHZDM5Skw2R0FUdTVFakJseUR1RlJMSTZUS3hpYnJoa2dnekdFcktCREZ0TktKMGNBaTBtY1hoRW1pb2x6ajlxSlZsQnRpaG5LYW9Rcmd4Wm04SlMzRUVybENzNlJ5M2tsMDhJeUhsVExNajZTVm1JSXc0R0hNaTNQWTQ2amczS2RUQjg2V1FQK1I4Y2Fzc1ptb0o1T2hzc1YzbDFnNDlraWxMU3dIamhQWTF5Q01CODQzS3V5TTBLWXpUNWNCSndTdEJTREp5aHdMNTFVeVRnKzhMcHd6NmRkcFpVMURHQUlRam53aWRmbHAwRmZqQmx5aFdkUlRwT3hqUFhERE9EVE9vVFl0RXN6clJReERGZ0I1dHBhUTBhOGgzSWxZemhKcnVScFB5dnlkV0ZPNXJOUm1wa0luQVQ4d2MrNkREbkpWcUNKdmd5VnExZ3BndnBkWVZZQzJhU1o1eFMrUXdVWEF3dUF3N0pScnlIU3JFV1pMRmZ4MTJ4V21yWFFEUUdWUmF6aE03NkpVRS9DL1FiRHpyeUFjb1pjeFNnWmwxMHpRQUN4VExLQ0xiSVFtd0lHQTZ2QS8yYlFFQWsrQXNycHg3ZGxIRThFSlNLdzRENlp6N3R5RTJPQlV4QnozVzBlMHdFc3BwMGpaQnl0VWhyc0FtL2cwYTZ5a0dmb3gybk9DbkpLQjQ4WmNvWjF3TEV5bnBoTURFY0lVT0NHZ01TRmliS0FsU2hIT09PTHovZVl5UkJsTm1CeG9Zem5YQm5QRzBHTDZVNG9ESkZFRnJKWjVtTlR3RkdJZDh2eGh0RHdNY3BrL3M1Uk1vN2ZCQzJtSjBLNWYxZ2FlUXNvMVdyT2RzTE1oKzhwanlIOHlJVE1ENEx3bTFDMUVEc2pqVHhLQ2NjalRJVDBRM29OaGxRSnRTRUF4S1pUR2xtQk1BU2xDV2dQV3BNaGR3bTlJWkpJSTV0a1B0WEVPUnJDMmY4MFJKL0lHQ0tKekdlRE5ISWhjQzZFYTRiQ0VIMGlaNGdrMHNnNlB1SllKOHc4RkhQWWh1Z1RXVU9BczQxMUhxM0FFYzRGS21IYnhtcUlHSkUyUkJLNWtZL2tSbUxFT1JGNFBHZzlodWlTRTRaSUlvMjhLUE00RS9nQjhIYlFlZ3pSSTZjTWtVUWFhR01MMzBLcEJqNE5XbzhoT3VTa0lRQ2ttYTB5anlZS0dZcWFiYXlHMU1oWlF5UVJtNDNTd0VTVWt4Q2VDbHBQeFBndjR0c3Z2YzhMY3Q0UVNhU0I1NWpONlFpbHdEdEI2d2s1YndMbnl5VCtVeWJuMTFnc2J3d0J6amJXMmF5aGdHRWt6bjNkRnJTbWtQRXhTam4vWkxoTTRyZEJpd21DdkRKRUVySFpJck94c1JnRXJDSUxwem1FbkU1Z0JVVU1rY20waWsxbjBJS0NJaThOa1VSczNwWFpqS1dMczRDWGd0WVRDTW9qeERsT0pqTlJKdkxQb09VRVRWNGJJb25NNGZjSUorVFpOdGEvSUpSS0dTTWt4bXRCaXdrTHhoQU9ZaE1YbTVYQWtaRFQyMWcvUTZrSGhzdGtzeXR4WjR3aGRrSnNQaE1ibXdLR1EwNDlNSEZnRmNxUkVzT1dzcHcxZkVhRWNndHBHSkJhL2dLVWFqM25BTTFFZXh2ck15Z3hLZWVab0lXRUhkTkM3QUdaeFNNb3gwTWt0N0crQzF4SmpGT01HVkxER0NJRnhLWlQ2bGhCbktFa2Jrc0srN1RrRnFDZU9JT2xQRHVIQk9jS3hoQXVFSnVQcFk0WUJReEhlVEJvUFQyZ3dCcTYrS1pNd1pZS2MzNnVXOHdZSWcya2hqZUJDM1FPSTBpMEdNTUNsZ1RDODBCTXBwaHJCekxCdEJBWklMV3M0OHNjRS9CdHJPOGpUT1RmZk51WUlYT01JVEpFSnRJaHRiUmljUVNTMVcyczdjQmlpaGdxVTFnaHRnbHY5d0pqQ0krUUdqNlNHbUxBdDhIMzQ5elhZakZNcGhLVHNsRGM0NWN6bURHRXg4Z01YZ0RPMExtTXdxTFY0K0xmUkRoYnB2S1l4K1VhRFA2ak5pWGF5QmxCNnpDa3p2OERRZDdRck1iTFIxQUFBQUFBU1VWT1JLNUNZSUk9Ij4KCjxzdHlsZT4KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by91WUVDTUtvSGNPOXgxd2RtYnlISW0zLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vc1RkYUE2ajBQc2I5MjBWanYtbXJ6SC1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL19WWUZ4LXM4MjRrWHFfVWwyQkhxWUgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL3RuajRTQjZETmJkYVFuc004Q0ZxQlgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL29NTWdmWk1RdGhPcnlRbzluMjJkY3V2dkRpbjFwSzhhS3RlTHBlWjVjMEEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL0tzX2NWeGlDaXdVV1ZzRldGQTNCam4tX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vTko0dnhsZ1d3V2JFc3YxOGRBaHFubi1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9pc1otd2JDWE5LQWJuam82X1R3SFRvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by83N0ZYRmpSYkd6TjRhQ3JTRmhsaDNvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9qU04yQ0dWRGJjVnlDbmZKZmpTZGZJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1VYNmk0SnhRRG0zZlZUYzFDUHV3cW9YMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vZC02SVlwbE9Gb2NDYWNLenh3WFNPSkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by85N3VhaHhpcVpSb25jQmFDRUkzYVc0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vUHdaYy1ZYklMNDE0d0I5ckIxSUFQWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQ19acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0N3dF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0MxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M2RThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09wWFVxVG8wVWdRUWhHal9TRmRMV0JrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9XeHJYSmEwQzNLZHRDN2xNYWZHNGRSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vY0RLaFJhWG5RVE9WYmFveHdkT3I5eGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vMWhaZjAyUE9BTmgzMmsyVmtnRW9VQmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlBjeW5TTDBxSHFfNmRYN2xLVkJ5WFloamJTcHZjNDdlZTZ4Ul84MEhudy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlN6dWxmS1NLMExMampmZWF4Y1JFaGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9LMjNjeFdWVHJJRkQ2REpzRVZpMDdSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vRmw0eTBRZE94eXlUSEVHTVhYOGtjWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8wZUM2ZmwwNmx1WEVZV3BCU0p2WENJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0kzUzF3c2dTZzlZQ3VyVjZQVWtUT1lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8tTDE0SmswNm02cFVIQi01bVhRUW5ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vSGdvMTNrLXRmU3BuMHFpMVNGZFVmWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1BydTMzcWpTaHBaU21HM3o2Vll3bllYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL05ZRFdCZEQ0Z0lxMjZHNVhZYkhzRklYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0MTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0X1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0d3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0NkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL29IaTMwa3dRV3ZwQ1dxQWh6SGNDU0lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9aTHFLZWVsWWJBVEc2MEVwWkJTRHk0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vbXg5VWNrNnVCNjNWSUtGWW5FTVhyWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vckd2SGRKbnIybDc1cWIwWU5EOU55SVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vUnhaSmRuemVvM1I1elNleGdlOFVVWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vb09lRndaTmxyVGVmekxZbWxWVjFVSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9tYm1ocHJNSDY5Wmk2ZUVQQllWRmhZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwVjRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBmWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFF0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBWQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwWWdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGFFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGREaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZX1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZd3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFkxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZNkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnoxeC1NMUkxdzVPTWlxblZGOHhCTGhVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGendYYUFYdXA1bVpsZks2eFJMcmhzY28ud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6d242V3F4by14d3hpbERYUFU4Y2hWVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejFUN2FKTEs2bktwbjM2SU13VGNNTWMud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnpfNzlfWnVVeENpZ00yRGVzcFRuRmF3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6NGdkOU9FUFVDTjNBZFlXMGU4dGF0NC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6OGJJUVNZWm5XTGFXQzlRTkNwVEtfVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9Cjwvc3R5bGU+CgoKCjxzdHlsZT4ubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDEsLm1hdC1oZWFkbGluZSwubWF0LXR5cG9ncmFwaHkgaDF7Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDIsLm1hdC10aXRsZSwubWF0LXR5cG9ncmFwaHkgaDJ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nLC5tYXQtYm9keS0ye2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSwubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHl7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5IHAsLm1hdC1ib2R5LTEgcCwubWF0LXR5cG9ncmFwaHkgcHttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbCwubWF0LWNhcHRpb257Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS00e2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktMywubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTN7Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMiwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTJ7Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0xe2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b24sLm1hdC1yYWlzZWQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtbWluaS1mYWJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLWNvbnRlbnR7Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXQgLm1hdC1jaGVja2JveC1sYWJlbHtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uLC5tYXQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29ue2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWwsLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9ue2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciB0aHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGV7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudHtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGR7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXIsLm1hdC1ncmlkLXRpbGUtZm9vdGVye2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmUsLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50e21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3IsLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLC5tYXQtc3RlcHBlci1ob3Jpem9udGFse2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWx7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3J7Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcntmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyLC5tYXQtdG9vbGJhciBoMSwubWF0LXRvb2xiYXIgaDIsLm1hdC10b29sYmFyIGgzLC5tYXQtdG9vbGJhciBoNCwubWF0LXRvb2xiYXIgaDUsLm1hdC10b29sYmFyIGg2e2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlLC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGV7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVke292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudHtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcmlwcGxlLWVsZW1lbnR7ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVue2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lciwuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AsLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94e3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2t7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ3twYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94e3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0ey8qISovfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5key8qISovfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcntwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3J7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtb3B0aW9ue2NvbG9yOiMyMTIxMjF9Lm1hdC1vcHRpb246aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSwubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KTtjb2xvcjojMjEyMTIxfS5tYXQtb3B0aW9uLm1hdC1vcHRpb24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZjU3YzAwfS5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZjk4MDB9Lm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNDQzMzZ9Lm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjojNjE2MTYxfS5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6IzYxNjE2MX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjb2xvcjojYjBiMGIwfS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtiYWNrZ3JvdW5kOiNiMGIwYjB9Lm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16Mntib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejV7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggOXB4IDEycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMHB4IDE0cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMXB4IDE1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAyMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxM3B4IDE5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNHB4IDIxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNXB4IDIycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE3cHggMjZweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOHB4IDI4cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTlweCAyOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMHB4IDMxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCAzOHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIxcHggMzNweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjJweCAzNXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyM3B4IDM2cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojMjEyMTIxfS5tYXQtYmFkZ2V7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1iYWRnZS1oaWRkZW4gLm1hdC1iYWRnZS1jb250ZW50e2Rpc3BsYXk6bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnR7cG9zaXRpb246YWJzb2x1dGU7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gMjAwbXMgZWFzZS1pbi1vdXQ7dHJhbnNmb3JtOnNjYWxlKDAuNik7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm5nLWFuaW1hdGUtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50LC5tYXQtYmFkZ2UtY29udGVudC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1iYWRnZS1jb250ZW50Lm1hdC1iYWRnZS1hY3RpdmV7dHJhbnNmb3JtOm5vbmV9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDoxNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LThweH0ubWF0LWJhZGdlLW1lZGl1bSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjJweDtoZWlnaHQ6MjJweDtsaW5lLWhlaWdodDoyMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yMnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTFweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTExcHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTE0cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTRweH0ubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNTdjMDB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfS5tYXQtYmFkZ2UtYWNjZW50IC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWJhZGdlLXdhcm4gLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtYmFkZ2UtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2JkYmRiZDtjb2xvcjojNzU3NTc1fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b257Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZjU3YzAwfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e29wYWNpdHk6LjE7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1mYWIsLm1hdC1taW5pLWZhYntjb2xvcjojMjEyMTIxO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2Fybntjb2xvcjojZmZmfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXB7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JveC1zaGFkb3c6bm9uZX0ubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxO2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfVtkaXI9cnRsXSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzYxNjE2MX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiMyMTIxMjF9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7YmFja2dyb3VuZDojZmZmfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlcjpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e2xpbmUtaGVpZ2h0OjQ4cHh9Lm1hdC1jYXJke2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtY2FyZC5tYXQtY2FyZC1mbGF0Om5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWNhcmQtc3VidGl0bGV7Y29sb3I6IzYxNjE2MX0ubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojNjE2MTYxfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6I2ZmZn0ubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojZmZmICFpbXBvcnRhbnR9Lm1hdC1jaGVja2JveC1taXhlZG1hcmt7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZDpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojYjBiMGIwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbHtjb2xvcjojNjE2MTYxfS5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzIxMjEyMX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojMjEyMTIxO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZHtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7YmFja2dyb3VuZDojMDAwfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtdGFibGV7YmFja2dyb3VuZDojZmZmfS5tYXQtdGFibGUgdGhlYWQsLm1hdC10YWJsZSB0Ym9keSwubWF0LXRhYmxlIHRmb290LG1hdC1oZWFkZXItcm93LG1hdC1yb3csbWF0LWZvb3Rlci1yb3csW21hdC1oZWFkZXItcm93XSxbbWF0LXJvd10sW21hdC1mb290ZXItcm93XSwubWF0LXRhYmxlLXN0aWNreXtiYWNrZ3JvdW5kOmluaGVyaXR9bWF0LXJvdyxtYXQtaGVhZGVyLXJvdyxtYXQtZm9vdGVyLXJvdyx0aC5tYXQtaGVhZGVyLWNlbGwsdGQubWF0LWNlbGwsdGQubWF0LWZvb3Rlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaGVhZGVyLWNlbGx7Y29sb3I6IzYxNjE2MX0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtjb2xvcjojMjEyMTIxfS5tYXQtY2FsZW5kYXItYXJyb3d7ZmlsbDpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcntjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCwubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiMyMTIxMjE7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2NvbG9yOiM3NTc1NzV9Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1zZXBhcmF0b3J7Y29sb3I6Izc1NzU3NX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcHJldmlld3tjb2xvcjpyZ2JhKDAsMCwwLC4yNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMTgpfS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDUsMTI0LDAsLjIpfS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjQ1LCAxMjQsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI0NSwgMTI0LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwO2NvbG9yOiNmZmZ9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC40KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjMpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwxNTIsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMTUyLCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjU1LCAxNTIsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC4zKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6I2Y1N2MwMH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWRhdGUtcmFuZ2UtaW5wdXQtaW5uZXJbZGlzYWJsZWRde2NvbG9yOiM3NTc1NzV9Lm1hdC1kaWFsb2ctY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSwubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojZmZmfX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6IzIxMjEyMX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntjb2xvcjojNjE2MTYxfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVde2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOmluaGVyaXR9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2hlaWdodDo0OHB4fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWR7aGVpZ2h0OjY0cHh9Lm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoOTcsOTcsOTcsLjYpfS5tYXQtaGludHtjb2xvcjpyZ2JhKDk3LDk3LDk3LC42KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKS5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnQsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1lcnJvcntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYxNjE2MX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1oaW50e2NvbG9yOiM2MTYxNjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC40MikgMCUsIHJnYmEoMCwgMCwgMCwgMC40MikgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjQyKSAwJSwgcmdiYSgwLCAwLCAwLCAwLjQyKSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWlucHV0LWVsZW1lbnQ6ZGlzYWJsZWQsLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojNzU3NTc1fS5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjU3YzAwfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWZvcm0tZmllbGQubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2NvbG9yOiMyMTIxMjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntjb2xvcjojMjEyMTIxfS5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtbGlzdC1vcHRpb246aG92ZXIsLm1hdC1saXN0LW9wdGlvbjpmb2N1cywubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXMsLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbTpob3ZlciwubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uLC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uOmhvdmVyLC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtbWVudS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1tZW51LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtbWVudS1pdGVte2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6IzIxMjEyMX0ubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0sLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtbWVudS1zdWJtZW51LWljb24sLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtaWNvbi1uby1jb2xvcntjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uLW5vLWNvbG9yLC5tYXQtbWVudS1zdWJtZW51LWljb257Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWVudS1pdGVtOmhvdmVyOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtcGFnaW5hdG9ye2JhY2tncm91bmQ6I2ZmZn0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntjb2xvcjojNjE2MTYxfS5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCwubWF0LXBhZ2luYXRvci1pbmNyZW1lbnR7Ym9yZGVyLXRvcDoycHggc29saWQgcmdiYSgwLDAsMCwuNTQpO2JvcmRlci1yaWdodDoycHggc29saWQgcmdiYSgwLDAsMCwuNTQpfS5tYXQtcGFnaW5hdG9yLWZpcnN0LC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLXRvcDoycHggc29saWQgcmdiYSgwLDAsMCwuNTQpfS5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1pbmNyZW1lbnQsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcGFnaW5hdG9yLWNvbnRhaW5lcnttaW4taGVpZ2h0OjU2cHh9Lm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmZGRlYmZ9Lm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZkZGViZn0ubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmZTViZn0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmU1YmZ9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmY2QwY2R9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZjZDBjZH0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZSwubWF0LXNwaW5uZXIgY2lyY2xle3N0cm9rZTojZjU3YzAwfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZSwubWF0LXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGV7c3Ryb2tlOiNmZjk4MDB9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC13YXJuIGNpcmNsZSwubWF0LXNwaW5uZXIubWF0LXdhcm4gY2lyY2xle3N0cm9rZTojZjQ0MzM2fS5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojNjE2MTYxfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZjU3YzAwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnk6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmZjk4MDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50OmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2Fybi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2Y0NDMzNn0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2Fybi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuOmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiMyMTIxMjF9Lm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiM3NTc1NzV9Lm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6IzYxNjE2MX0ubWF0LXNlbGVjdC1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1zZWxlY3QtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC1wcmltYXJ5IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1pbnZhbGlkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6Izc1NzU3NX0ubWF0LWRyYXdlci1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kcmF3ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kcmF3ZXIubWF0LWRyYXdlci1wdXNoe2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWRyYXdlcjpub3QoLm1hdC1kcmF3ZXItc2lkZSl7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kcmF3ZXItc2lkZXtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjU0KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjU0KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjU0KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXNsaWRlLXRvZ2dsZTpub3QoLm1hdC1jaGVja2VkKSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6IzAwMH0ubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYX0ubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjIpfS5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LWFjY2VudCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjIpfS5tYXQtd2FybiAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYiwubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC13YXJuIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMil9Lm1hdC1zbGlkZXI6aG92ZXIgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3ZlciAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3Zlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC43KSwgcmdiYSgwLCAwLCAwLCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDAuMDAwMWRlZywgcmdiYSgwLCAwLCAwLCAwLjcpLCByZ2JhKDAsIDAsIDAsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3N7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLCAwLCAwLCAwLjcpLCByZ2JhKDAsIDAsIDAsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Lm1hdC1zdGVwLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWRdKSwubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9ZmFsc2Vde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjdXJzb3I6ZGVmYXVsdH1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDpub25lfX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1vcHRpb25hbHtjb2xvcjojNjE2MTYxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojZjQ0MzM2fS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjojMjEyMTIxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9ye2NvbG9yOiNmNDQzMzZ9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSwubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVye2hlaWdodDo3MnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyLC5tYXQtdmVydGljYWwtc3RlcHBlci1oZWFkZXJ7cGFkZGluZzoyNHB4IDI0cHh9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXt0b3A6LTE2cHg7Ym90dG9tOi0xNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlciwubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3Jle3RvcDozNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXt0b3A6MzZweH0ubWF0LXNvcnQtaGVhZGVyLWFycm93e2NvbG9yOiM2MTYxNjF9Lm1hdC10YWItbmF2LWJhciwubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpfS5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1uYXYtYmFyLC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1ib3R0b206bm9uZX0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2NvbG9yOiMyMTIxMjF9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6Izc1NzU3NX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojMjEyMTIxfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiM3NTc1NzV9Lm1hdC10YWItZ3JvdXBbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV0gLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV17Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6bm9uZX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNjcsMzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMjQsMTc4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNjcsMzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIyNCwxNzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX0ubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZjU3YzAwO2NvbG9yOiMyMTIxMjF9Lm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fS5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfS5tYXQtdHJlZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiMyMTIxMjF9Lm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fS5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kOiMzMjMyMzI7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntjb2xvcjojZmY5ODAwfWJvZHl7b3ZlcmZsb3c6aGlkZGVufS5jZGstb3ZlcmxheS1jb250YWluZXJ7Y29udGFpbjpzdHJpY3R9YTpub3QoLm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbil7Y29sb3I6IzE5NzZkMn1hOm5vdCgubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uKTp2aXNpdGVke2NvbG9yOiM3YjFmYTJ9Ym9keS5kYXJrLW1vZGV7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIGE6bm90KC5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24pe2NvbG9yOiM0MmE1ZjV9Ym9keS5kYXJrLW1vZGUgYTpub3QoLm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbik6dmlzaXRlZHtjb2xvcjojYmE2OGM4fWJvZHkuZGFyay1tb2RlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb246Zm9jdXM6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uLm1hdC1hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCk7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtb3B0aW9uLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye2NvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y29sb3I6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLGJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7YmFja2dyb3VuZDojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtYXBwLWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUubWF0LWFwcC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXowe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejN7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA1cHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16Nntib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejd7Ym94LXNoYWRvdzowcHggNHB4IDVweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggN3B4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDJweCAxNnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo4e2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16OXtib3gtc2hhZG93OjBweCA1cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA5cHggMTJweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEwe2JveC1zaGFkb3c6MHB4IDZweCA2cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEwcHggMTRweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNHB4IDE4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejExe2JveC1zaGFkb3c6MHB4IDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDExcHggMTVweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNHB4IDIwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEye2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEycHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEze2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEzcHggMTlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE0e2JveC1zaGFkb3c6MHB4IDdweCA5cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE0cHggMjFweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDI2cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE1e2JveC1zaGFkb3c6MHB4IDhweCA5cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE1cHggMjJweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDI4cHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE2e2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxN3tib3gtc2hhZG93OjBweCA4cHggMTFweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTdweCAyNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTh7Ym94LXNoYWRvdzowcHggOXB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE4cHggMjhweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggN3B4IDM0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE5e2JveC1zaGFkb3c6MHB4IDlweCAxMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOXB4IDI5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMHtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIwcHggMzFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDM4cHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIxe2JveC1zaGFkb3c6MHB4IDEwcHggMTNweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjFweCAzM3B4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDBweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjJ7Ym94LXNoYWRvdzowcHggMTBweCAxNHB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMnB4IDM1cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCA0MnB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyM3tib3gtc2hhZG93OjBweCAxMXB4IDE0cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIzcHggMzZweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejI0e2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpe2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZWY2YzAwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e291dGxpbmU6c29saWQgMXB4O2JvcmRlci1yYWRpdXM6MH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWFjY2VudCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS13YXJuIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM2ZTZlNmU7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9ue2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDp0cmFuc3BhcmVudH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e29wYWNpdHk6LjE7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtd2Fybntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b246bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEycHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmR7Ym94LXNoYWRvdzpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItdG9wOnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyk7YmFja2dyb3VuZC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXI6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmR7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJkLm1hdC1jYXJkLWZsYXQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FyZC1zdWJ0aXRsZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrbWFya3tmaWxsOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2U6IzMwMzAzMCAhaW1wb3J0YW50fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQ6bm90KC5tYXQtY2hlY2tib3gtY2hlY2tlZCkgLm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwe2JhY2tncm91bmQtY29sb3I6IzYxNjE2MTtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXA6bm90KC5tYXQtY2hpcC1kaXNhYmxlZCk6YWN0aXZle2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLWRpc2FibGVke29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOjphZnRlcntiYWNrZ3JvdW5kOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWJsZXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWJsZSB0aGVhZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlIHRib2R5LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGUgdGZvb3QsYm9keS5kYXJrLW1vZGUgbWF0LWhlYWRlci1yb3csYm9keS5kYXJrLW1vZGUgbWF0LXJvdyxib2R5LmRhcmstbW9kZSBtYXQtZm9vdGVyLXJvdyxib2R5LmRhcmstbW9kZSBbbWF0LWhlYWRlci1yb3ddLGJvZHkuZGFyay1tb2RlIFttYXQtcm93XSxib2R5LmRhcmstbW9kZSBbbWF0LWZvb3Rlci1yb3ddLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGUtc3RpY2t5e2JhY2tncm91bmQ6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSBtYXQtcm93LGJvZHkuZGFyay1tb2RlIG1hdC1oZWFkZXItcm93LGJvZHkuZGFyay1tb2RlIG1hdC1mb290ZXItcm93LGJvZHkuZGFyay1tb2RlIHRoLm1hdC1oZWFkZXItY2VsbCxib2R5LmRhcmstbW9kZSB0ZC5tYXQtY2VsbCxib2R5LmRhcmstbW9kZSB0ZC5tYXQtZm9vdGVyLWNlbGx7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1oZWFkZXItY2VsbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWNlbGwsYm9keS5kYXJrLW1vZGUgLm1hdC1mb290ZXItY2VsbHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYXJyb3d7ZmlsbDojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1uZXh0LWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyLWRpdmlkZXI6OmFmdGVye2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1zZXBhcmF0b3J7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjI0KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksYm9keS5kYXJrLW1vZGUgLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDIzOSwxMDgsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtaW5uZXJbZGlzYWJsZWRde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaWFsb2ctY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojNDI0MjQyfX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtaGludHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZXJyb3J7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWhpbnR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4wNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1wcmltYXJ5e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDpkaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50IG9wdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50IG9wdGlvbjpkaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC13YXJuIC5tYXQtaW5wdXQtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3QtYmFzZSAubWF0LXN1YmhlYWRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3QtaXRlbS1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LW9wdGlvbjpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtb3B0aW9uOmZvY3VzLGJvZHkuZGFyay1tb2RlIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1cyxib2R5LmRhcmstbW9kZSAubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW17YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1tZW51LXN1Ym1lbnUtaWNvbixib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1pY29uLW5vLWNvbG9ye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbi1uby1jb2xvcixib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtc3VibWVudS1pY29ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW06aG92ZXI6bm90KFtkaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZDpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3J7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLGJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1pbmNyZW1lbnR7Ym9yZGVyLXRvcDoycHggc29saWQgI2ZmZjtib3JkZXItcmlnaHQ6MnB4IHNvbGlkICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItZmlyc3QsYm9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1pbmNyZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZmlyc3QsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MTM1MzJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYxMzUzMn1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIgY2lyY2xle3N0cm9rZTojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGV7c3Ryb2tlOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC13YXJuIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LXdhcm4gY2lyY2xle3N0cm9rZTojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5OmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudDphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybjphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItcHVzaHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1yaWdodDpub25lfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9Ym9keS5kYXJrLW1vZGUgW2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgxODksMTg5LDE4OSwuNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsYm9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3Zlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMC4wMDAxZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD1mYWxzZV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPXRydWVde2N1cnNvcjpkZWZhdWx0fUBtZWRpYShob3Zlcjogbm9uZSl7Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOm5vbmV9fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLW9wdGlvbmFse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVycm9ye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1lcnJvcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci12ZXJ0aWNhbHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc29ydC1oZWFkZXItYXJyb3d7Y29sb3I6I2M2YzZjNn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWhlYWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLW5hdi1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLWhlYWRlcntib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xMik7Ym9yZGVyLWJvdHRvbTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cFtjbGFzcyo9bWF0LWJhY2tncm91bmQtXSAubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhcltjbGFzcyo9bWF0LWJhY2tncm91bmQtXXtib3JkZXItYm90dG9tOm5vbmU7Ym9yZGVyLXRvcDpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjUxLDE0MCwwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjUxLDE0MCwwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluayxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIubWF0LXByaW1hcnl7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLm1hdC1hY2NlbnR7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLm1hdC13YXJue2JhY2tncm91bmQ6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lLGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC12YWx1ZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtYXJyb3csYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjppbmhlcml0fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6Y3VycmVudENvbG9yfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGUsYm9keS5kYXJrLW1vZGUgLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbmFjay1iYXItY29udGFpbmVye2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtiYWNrZ3JvdW5kOiNmYWZhZmE7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntjb2xvcjppbmhlcml0fQo8L3N0eWxlPgoKPHN0eWxlPgogIGh0bWwsCiAgYm9keSB7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZm9udC1mYW1pbHk6IFJvYm90bywgc2Fucy1zZXJpZjsKICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpOwoKICAgIC8qIExlZ2FjeSBtZWNoYW5pc20gdG8gYXZvaWQgaXNzdWVzIHdpdGggc3VicGl4ZWwgYW50aS1hbGlhc2luZyBvbiBtYWNPUy4KICAgICAqCiAgICAgKiBJbiB0aGUgcGFzdCBbMV0sIG1hY09TIHN1YnBpeGVsIEFBIGNhdXNlZCBleGNlc3NpdmUgYm9sZGluZyBmb3IgbGlnaHQtb24tZGFyayB0ZXh0OyB0aGlzIHJ1bGUKICAgICAqIGF2b2lkcyB0aGF0IGJ5IHJlcXVlc3Rpbmcgbm9uLXN1YnBpeGVsIEFBIGFsd2F5cywgcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgYmVoYXZpb3IsIHdoaWNoIGlzCiAgICAgKiB0byB1c2Ugc3VicGl4ZWwgQUEgd2hlbiBhdmFpbGFibGUuIFRoZSBvcmlnaW5hbCBpc3N1ZSB3YXMgImZpeGVkIiBieSByZW1vdmluZyBzdWJwaXhlbCBBQSBpbgogICAgICogbWFjT1MgMTQgKE1vamF2ZSksIGJ1dCBmb3IgbGVnYWN5IHJlYXNvbnMgdGhleSBwcmVzZXJ2ZWQgdGhlIGJvbGRpbmcgZWZmZWN0IGFzIGFuIG9wdGlvbi4KICAgICAqIENocm9tZSB0aGVuIGluIHR1cm4gdXBkYXRlZCBpdHMgZm9udCByZW5kZXJpbmcgdG8gYXBwbHkgdGhhdCBib2xkaW5nIGVmZmVjdCBbMl0sIHdoaWNoIG1lYW5zCiAgICAgKiB0aGF0IGV2ZW4gdGhvdWdoIHRoZSBgLXdlYmtpdC1mb250LXNtb290aGluZ2AgZG9jcyBbM10gc3VnZ2VzdCB0aGF0IHNldHRpbmcgYGFudGlhbGlhc2VkYAogICAgICogd291bGQgaGF2ZSBubyBlZmZlY3QgZm9yIHJlY2VudCB2ZXJzaW9ucyBvZiBtYWNPUywgaXQgc3RpbGwgaXMgbmVlZGVkIHRvIGF2b2lkIHRoZSBib2xkaW5nLgogICAgICoKICAgICAqIFsxXTogaHR0cDovL3d3dy5saWdodGVycmEuY29tL2FydGljbGVzL21hY29zeHRleHRhYWJ1Zy8KICAgICAqIFsyXTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODU4ODYxCiAgICAgKiBbM106IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mb250LXNtb290aAogICAgICoKICAgICAqLwoKICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogIH0KICBub3NjcmlwdCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1hcmdpbjogMCBhdXRvOwogICAgbWF4LXdpZHRoOiA2MDBweDsKICAgIHBhZGRpbmc6IDEwcHg7CiAgfQo8L3N0eWxlPgoKPC9oZWFkPjxib2R5Pjxub3NjcmlwdD4KICAgIDxoMT5UZW5zb3JCb2FyZCByZXF1aXJlcyBKYXZhU2NyaXB0PC9oMT4KICAgIDxwPlBsZWFzZSBlbmFibGUgSmF2YVNjcmlwdCBhbmQgcmVsb2FkIHRoaXMgcGFnZS48L3A+CiAgPC9ub3NjcmlwdD48dGItd2ViYXBwPjwvdGItd2ViYXBwPjxzY3JpcHQgc3JjPSJpbmRleC5qcz9fZmlsZV9oYXNoPTI5YTdkMDNhIj48L3NjcmlwdD48L2JvZHk+PC9odG1sPg==", - "headers": [ - [ - "content-type", - "text/html; charset=utf-8" - ] - ], - "ok": true, - "status": 200, - "status_text": "" - }, - "https://localhost:6006/data/environment": { - "data": "eyJ2ZXJzaW9uIjogIjIuNy4wIiwgImRhdGFfbG9jYXRpb24iOiAiLi90dXRvcmlhbF9leHBzIiwgIndpbmRvd190aXRsZSI6ICIiLCAiZXhwZXJpbWVudF9uYW1lIjogIiIsICJleHBlcmltZW50X2Rlc2NyaXB0aW9uIjogIiIsICJjcmVhdGlvbl90aW1lIjogMC4wLCAiZGVidWciOiB7ImRhdGFfcHJvdmlkZXIiOiAiR3JwY0RhdGFQcm92aWRlcihhZGRyPSdsb2NhbGhvc3Q6MzMwNzcnKSIsICJmbGFncyI6IHsibG9nZGlyIjogIi4vdHV0b3JpYWxfZXhwcyIsICJsb2dkaXJfc3BlYyI6ICIiLCAiaG9zdCI6IG51bGwsICJiaW5kX2FsbCI6IGZhbHNlLCAicG9ydCI6IG51bGwsICJyZXVzZV9wb3J0IjogZmFsc2UsICJsb2FkX2Zhc3QiOiAiYXV0byIsICJleHRyYV9kYXRhX3NlcnZlcl9mbGFncyI6ICIiLCAiZ3JwY19jcmVkc190eXBlIjogImxvY2FsIiwgImdycGNfZGF0YV9wcm92aWRlciI6ICIiLCAicHVyZ2Vfb3JwaGFuZWRfZGF0YSI6IHRydWUsICJkYiI6ICIiLCAiZGJfaW1wb3J0IjogZmFsc2UsICJpbnNwZWN0IjogZmFsc2UsICJ2ZXJzaW9uX3RiIjogZmFsc2UsICJ0YWciOiAiIiwgImV2ZW50X2ZpbGUiOiAiIiwgInBhdGhfcHJlZml4IjogIiIsICJ3aW5kb3dfdGl0bGUiOiAiIiwgIm1heF9yZWxvYWRfdGhyZWFkcyI6IDEsICJyZWxvYWRfaW50ZXJ2YWwiOiA1LjAsICJyZWxvYWRfdGFzayI6ICJhdXRvIiwgInJlbG9hZF9tdWx0aWZpbGUiOiBudWxsLCAicmVsb2FkX211bHRpZmlsZV9pbmFjdGl2ZV9zZWNzIjogODY0MDAsICJnZW5lcmljX2RhdGEiOiAiYXV0byIsICJzYW1wbGVzX3Blcl9wbHVnaW4iOiB7fSwgImN1c3RvbV9wcmVkaWN0X2ZuIjogIiIsICJ3aXRfZGF0YV9kaXIiOiAiIiwgIl9fdGVuc29yYm9hcmRfc3ViY29tbWFuZCI6ICJzZXJ2ZSJ9fX0=", - "headers": [ - [ - "content-type", - "application/json" - ] - ], - "ok": true, - "status": 200, - "status_text": "" - }, - "https://localhost:6006/data/plugin/scalars/tags": { - "data": "e30=", - "headers": [ - [ - "content-type", - "application/json" - ] - ], - "ok": true, - "status": 200, - "status_text": "" - }, - "https://localhost:6006/data/plugins_listing": { - "data": "eyJzY2FsYXJzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAic2NhbGFycyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtc2NhbGFyLWRhc2hib2FyZCJ9fSwgImN1c3RvbV9zY2FsYXJzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiQ3VzdG9tIFNjYWxhcnMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkIn19LCAiaW1hZ2VzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiaW1hZ2VzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1pbWFnZS1kYXNoYm9hcmQifX0sICJhdWRpbyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImF1ZGlvIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1hdWRpby1kYXNoYm9hcmQifX0sICJkZWJ1Z2dlci12MiI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIkRlYnVnZ2VyIFYyIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIk5HX0NPTVBPTkVOVCJ9fSwgImdyYXBocyI6IHsiZGlzYWJsZV9yZWxvYWQiOiB0cnVlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiZ3JhcGhzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1ncmFwaC1kYXNoYm9hcmQifX0sICJkaXN0cmlidXRpb25zIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiZGlzdHJpYnV0aW9ucyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtZGlzdHJpYnV0aW9uLWRhc2hib2FyZCJ9fSwgImhpc3RvZ3JhbXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJoaXN0b2dyYW1zIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1oaXN0b2dyYW0tZGFzaGJvYXJkIn19LCAidGV4dCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogInRleHQiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXRleHQtZGFzaGJvYXJkIn19LCAicHJfY3VydmVzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiUFIgQ3VydmVzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1wci1jdXJ2ZS1kYXNoYm9hcmQifX0sICJwcm9maWxlX3JlZGlyZWN0IjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiUHJvZmlsZSIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtcHJvZmlsZS1yZWRpcmVjdC1kYXNoYm9hcmQifX0sICJocGFyYW1zIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiaHBhcmFtcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtaHBhcmFtcy1kYXNoYm9hcmQifX0sICJtZXNoIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAibWVzaCIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAibWVzaC1kYXNoYm9hcmQifX0sICJ0aW1lc2VyaWVzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiVGltZSBTZXJpZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiTkdfQ09NUE9ORU5UIn19LCAicHJvamVjdG9yIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJwcm9qZWN0b3IiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiSUZSQU1FIiwgIm1vZHVsZV9wYXRoIjogIi9kYXRhL3BsdWdpbi9wcm9qZWN0b3IvaW5kZXguanMifX0sICJ3aGF0aWYiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJXaGF0LUlmIFRvb2wiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiSUZSQU1FIiwgIm1vZHVsZV9wYXRoIjogIi9kYXRhL3BsdWdpbi93aGF0aWYvaW5kZXguanMifX19", - "headers": [ - [ - "content-type", - "application/json" - ] - ], - "ok": true, - "status": 200, - "status_text": "" - }, - "https://localhost:6006/data/runs": { - "data": "W10=", - "headers": [ - [ - "content-type", - "application/json" - ] - ], - "ok": true, - "status": 200, - "status_text": "" - }, - "https://localhost:6006/font-roboto/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2": { - "data": "d09GMgABAAAAACokAA4AAAAAUkQAACnNAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmXocg0oGYACGTBEMCu1A1wwLg14AATYCJAOHNgQgBYMAByAbO0QF3Bhn2DiAgX12b1EEGwcBhTGLomxQFmT/lwnmGE77wayn0NBAJAPXITeLlQAVKYYKjM1mpr7CgS0HNgpkY1bqRLvLsXy3dA8XPXqvM/yN+w2v2FOlAb85QmOf5P7Az633/wJaSkUwMImTqgk4GDAic6S4MSrGqFakDCocigoYRBqEHnCIYBIGGExRT1Qeqv3690x3z90AwCasSP6ngswqFUVYHrB8VBQAKcYder52r1wzByMHJRZ//0+nNV9g+H/GsveOK0AqSpwZGZI47CReYMFvJOfQ2hTNUVES1lvdXXeyFKh29/XX4ACRY/9vTgMuqbMdO2B5UFAD4VG4vRkzpRE/HAS4Jss5uTZKgIn5b///mp923r+ZD/x22f0pcYRbsj0ne84XpsZN7mQyee9lwgszWcwvZJLFD4WkECjkFyHriuAA87NMWVUCV9VTC6S6tsdX+ApZK4nU+gqn6ipcefja71ffCTv/vpktBbH4Q8OmUzIhiS6SSKLxDYn4I3iKlCraxSKRmLCxMhnQLaUZLPeL70z9PLvdGe4aJpgghNJhdNDfIYfbP4Zrr4IRvQYW1AHHsRm/MoBA8QMAALCA4nacDoQBD4hYsRCpUiHSpUMwMSGyZUPkyoe4rB6qxyYEAgXAC0AAAgCBiIUA4KZAB3a3PfY7jNipySXnETvz4unnEjtv7bILiMECgG+hS5x7+iUX4AR8gRVUUNx1liijpQ3akVwcN9akGiFf5sfC53+NGKbR5WqKVWK9kAti+AS1eOOOyCvDaIwf8afMcFGbPJk65ZRuuRKVi5n34MXC5+eY8DF3ego/YaXaA/kGJCdNqR9aLDwevIQdJ0mKNBnyFChToUqNBoJTtOk4zZgJM5as2bDlwIkLV+48lSpzznk9evW57Y677uk3YNCQYfc98NAjk55Y9MySZa+9sWLVmnUbNiE0xggsAhGnnKBtjyf2QAgPTgoEFh8Jtbt2fBCTGwppEGEglZ5H9iEjajJmypb9zQ7WcvY+F29zpybfh8pFRalEVy+iPrfdcde9rn89b9acef9Z6HrqQ4ueWbLsjRWr1qx3vfW+d9770LXhbZuHCFeD868+CuUUv9RhOBpeRLDSKRtpW+4JClYxVTYdM1P8F5yw4yEH/bl6XJhQCcKlImFqL9vlsPiIpJtgDl7nnTDswuvDCv+DO1fDk/MxTTZl2ozHg0XCE4hnXuaoUGRvMwJjpuxnZEv+3pQmUBk753x56pZFeGbJ8s2IMhXxINvIiBgzZS/fU4ueWbJ8N5ZJIjmllGuC4g0HW6/PDdHeZGVFrFqzPhRHACMh5SpUzmRow4YNGzamMFQ4soqMGDNtbEWyl05HornGI/8uT9miZ5Ysd70RacWqNeumCoS86xhHXc3Jp1y9CINvDOn62prjoEx81Jz3IVIDWX7co1E3yT++FWYmuuNgIacdlV09TGcJJhPrX4ppsGwDXfCvkmLgAFmk6LCYxAftHyxYL1O0P9FCx9PR3lipv92N96FztJm7THzvXYCZF1CGmPHV7zjxlE+yUMyjYlkzeXrN1+XDXy7mZ4SaH3nFQ7Ww4uDmIe7T/PFaC3qFyJcS82v/iTr6GwvR3ze+XD27dfVbnYZQeRFxzohzSVz399nlr3kVWPXOwUJ5dHBrvN8bC/o9RRmDNlxKMCFjXvucAiWWoH0uC9Id0GRlZgrJ2SxOo/NX1BHQbaQBUf96uxZTd36ybZDQD2eu0GhiDfZmfDlc0VzFOlV8wKy9uuc9zoT+etNtsqFheWuKpVn11wnNyFUttlZgbJzVYnwrmDBpqX3O62J0xc3aVeaABaXbnkaGt5Tna0TncyyvCyiVfDTfNg2Tskx1qffMM0NtN69smvOiem3QnIGRMuk1rbqfMN9WYlYX54kVN9Zr843PpJvb6ivMNl+RmEB/BdWcgMMDITBSlFAjGMdJwzpJBRcNOoQYINvHmOh+Zu4HWLNzkAM9wsX9KDcejslxl1SqgpTK+nJ6LJP32jr7AVDWFUr1sbAX9oI4EVeZok7QfSSpICmKkKY4cpSbPOWhQPdQpggVKkKD8tGk3AhUzCkqSosK0Ka8dOguBhTPkHIg8915deAkWMcGli0ohh3l4ECFuVAublSIO+XiQfnlCI7BobVXOYT4INHaqwJUXCUV1+OO6HUPqn/XBA0YhnPfJMSUx7g9IXde/1qA99R9t0XLOL0eivXGOox6LVwgCIKWCEHQPYSoiOMCDwv1DyhKju6lTFGqFKXO+RXrwA1csBuEYRfwgABq5RhDmLJAVAIMYC0Me1CEI+XlzHGKeeAEnBafdFBUHkXlD0UUK7FHQxAEERAEEUvELYg9ALxA1QMUuICHcCSXIboBRsXRb32AMzlHPf3L87pFpik149XgSKLrYiABJiQbu7XX0EZ3qpa5pRm10HWgNpbmvXY2psKEBVBRiYumxxD0yfF+4RFhcOKf8uTBydDgQG9QA2iNNAqnhUWBFCuRLAAGylcAEIhW6rsQekPBdeKnxE2kSncIhFMQTwLtqlUHw4S5y9CmoHva/VBPrVxRoSAQJgJKgoic9kRheIYBERIBcwcACx1JTRqgQScM5u6itHBr0qhBsxat2rTrgDEjYrt2VZyzqFi6XHNdtxtQ2CIOaKHU/e2ri+Ee7MoA2fSUxbwhIBp/6EsBkrpI3jbygQfuiQiOrDHBHxAwqwyQgDwGALBLnUWCBAxYjpb9+Roy/wk3QM6CbfsB0CABSxQAnySXXv93+42ZtuaTv23HZhtjsRhL87XmG8w3mW8+33q+NN/tvsvue+KI0PgLi4TLN3UaMG7Gus+UbHrWnK8332j4spfb2B4r9owh3GMQ/P1r9sv3jkH4J/6/8X/35zeIF4eOyoczmc/Yz+9yx8tGBoAK8xg3HB/3Xk/VY2LM+/9p0k2ZNuOxJxgy/GvWnHn/WcCUORZ+dZZsb73z3gcbcmziBQDI4H0igCRkjW8HQ0ISbLrkpsva+aYOt3TqF2HAqN40JtW4af1pRo/H5k34z4I0Ty2b8twLDC+t+jetYVr3ydP0WaYvtr323Q9ZfvrtbfojJ/2tNjOyY0BujRxSHRqQl9GXAgoy+mFAYUY/DiiqJdZsXwtAMZBYr30DAKVAYqNqk4BzWWLzgAtZYuuAylpiWbUUUJUldguoyRKXBdRmiScCLuYjazwIlyBQnNDxd6jn4zYgH2sRfLeGyBuBeX8dvQgt3Aq6mTwCBwO5ip6gBxjoGBZbM34NE52ChI4XgbqSgsMohHqFmIhSL8HR1+qELePMETQQxH8ATAWSCRJ80KkVSFyshn4rVqc4xO4K9/sBbZUfGmjTrPCOlAJr8aYOsysMEbR4GDZjo5nqxAmguf2d+5ll4+q6dZTUZq1hMoksN66UXJTBBGyt+DrbhMcLq9Bk+7CpxVTXjuuYlC46w3z6kfH9bpWmwC9ElhFLbSMmAlXH7IyhWaYUCy19n4kkfj+MNwH1CXMxzHzrLGoTEVEJIpwww/SO24xCz4blyGgkPPISNVwJHMS8s9eaLgV7MO1MMFVxzgWKDObEffRpbR65hHZghKBm46hPHQIbxBUaIedU2SrMOQQSCxSYE85BZDigzEa1QKgIKEMqmHOWKIr7/orgvAATAUj2mnDy/ahrDOXUW7VsRjmHFUELlLgbeqsOaSaMtOVts1bo7cfGG5ZmMnzyvz7a9D8A49yfhKY0fT2zRlfuOMrMoba1d2Hf2SfChT0yvB6uDam/YVYHeti3rIR00JWgXBrYWqccXULUgWBDLc56ozkbZOKZwbkbwr43STuwCuPa2d9GGGB7Fc7RbV2Y1ryEAPZ+fo+bAVMVWitQuWZzibW7iEwCHXQ7lilW/mPjcU90+t1SKzITRy0tdDnD32eBJegGqTt8gwv7C7U0By0yLHifOEbuQI/HKbSqiN2A7cIrLxEuI4jzhl62d8SsW0WgmoflnBB4zekZkQIL7kLPmy8SnYVExDCJn/vsvX46iwidi74aH8QGlQbnqrSnHdb+O9sslbarcTLIeXWoS3vjlXrP/Atapqv5ib+Vp+qjuFwuDUd/fyHu9CVTIq+qFWJV1Ca09xxlk3lq/Sq37HDeHFvIRQz0Bit3uYQ2MH0kRGaKWNr6gj0uyh0nEF3uif0c7nh4lCgrKdH9hQwYPB6dSzZHuxICRr/dIPICn1SQxKhh5hC5lEbayfHCibqcyA3ZtYkTVgm64xjTZc9SxrTlX5q0if+LMeMTHtRHRueOGGKjMO15oLHaiPWlWmRl/IO10evXz7Uh09LcSPILgN4V8uqJuvCbsexNLzoP3QgU4zJftrAt4TZuhNhSaFJDq30QNy+xijFVzLR5y1ZKXp6namdX7u3I6Z6K8vco9tBP1UZPnALuwG2CMSEhWTElyCqRQIzcxyntYtKFHuO26n2pAIJzuhqKmVWMk0lxlhMvhrOMcQYnpoV7MSCclFSNxvg5F/MSasrgQr4o9P/8ce7LjPQpQTUxFy4xpt29wJlYCQSLskVnUbXUlJD+kq+gImoiUOysTerfknkgSGBDUDKkls/jNmRXBzLzuE4Pph76s3u6BjIpbNN2/uUtpLEO4NfUee3hd2ICHNJIbu7KwOJmXM0OKEjTZcEy+gJZO1A8QqI9juOkuT8zAuZZP3b47Ea8GRr/Yqom6GrAfgurEO3uc8eXUoGKktCRgBAsVnVIoJf9NmMuK5NrsY9ALjf2gU9eNkQ3qYUTAKnCxlt0ZamUlmPRKIzah/3WyZgfmmfwywWHYariaOMQdaAnLtycQZ5AEUKtcuPbwWIRiIXc0guTOqWrEHyCxSaVinmQAkGenh5YyHy4OjCmRFbrOukQ0opaxEEb9LTnu4pMNA5oajIR6FNAvzNYBLI5H1jCNkosMq20DStOahu6Tl25xsb5RqciLQK1kSpeRs15JKSgo+2DBNpTgyY1mugTZwLBQyFZ2LYikcEqfUfXzD5bqRfbmJc7cYYTstDGs2DiLeG4oBCqhtfubuK8OpzZGwftSZqHgjNcMqO0bGJkQTvYWwXWjfQkKZ/6Gt0O9Ma9RrPA7FkHm4ogchaY4T0BfhuQpl0SlqxIwD6dfNlAQepRTVGp5sm+1YGJbv55UKec+VpxVrICAWlg8rr/IVfIahPZWyD4cFFDlIMc+CTZ15JKxmYxJL5x33PQTi4/jNDXsEHs6OL1DQlR6YioBK1LayaotNggHdb6wZHpOYgdxN2h7EuKiQ2Cu82lamU02Q63JmZzS29vUgECR0IeX+G5RNlpnEnO7QNnchXLXsAOlQQHHeTBg7EsUtguvOiQEKbkgjf0n6GjHfqwIC4SWja8GiY+QtaysAIH+Xtc/S34rotjyJiIgZU5ikRm+iLHHqKCu1qwRWEv3fudKN0MuGkIb7vVjGeHHxCp9OWJ6ErT2plncvoXMmdytfNnJjFy1gw9xNMkd0saBFfI4o1358aFbq/Y7HG+0KmQY85AZYiQxA0RN7R7GoFWI0woIEO6jdfg5/lv1W9L8MdgGrzibDAjUzPbmi3IYPDcUi4SpawuXitn7HSA2yOtc0ts4mgYWjYsiSiVXBuGBQjXZXxxpS2Jq6yBdvXRk6hLpa/aV6B4YBjv08cEdkBW/TjBgnZNauhzxqZs3IZtaqmJYIwCdm2CuAwGScMv6WjknojNJSYEDVznSdIe4CUSKBCkndAmwd2jkRJS/wOiqKUozXfWEQvrk2GMFeh/k3cHmd+e5nwHpxKCSAEShab0a9gp/nOaf2S/o/xG9ll8TwiBm+JxaYSCbbEJObCxpFX4W0prjI5tAu+5849d5//w4G4tCb/Zm21f/T+Nbt3FsPz5tFFX9NlIbH+MUDEgQNPWNDZJoT5NdbIxox4IqtKPpOXydp7MulwVpi68NL3QjJdbr8VparAvCppfbCLx6mT+zMWP3/nLtb88S5po6i/tPz5fgrJign1I+C8ng+NvE7413p9rF168tNQhevfryFZSZJG3V0igtyMl6O9ysaVvgGqGS8vU4x6h4YtDo7tnP42xk5KyqVHRYYBXqWC0NOfkNTdnG6U3N+VkdtbnteAMzOxO65jaGRsbmNknmTiQDx9VYHY0ZGa1N+ST0xqbRVsbs1uw+hYOOkQjG1NTQ3NbbR0zW5Pf7ATySWpUAhnss/zDmi+ftaPolRu2TY+xLj7oy3F1rQgy9SGLmmrRS//lS2yb2xGz9qqistCVV0fiKdba0at0F5p/aiJS2moXkBRu+nbeQdPeSo9s6wkCN9L3MS9ieyHZcj2+9pNhhq58fh6l8yaHGNjLty5eiJdnZuh+NoqrBqvTz2Orv9swifLM8rOdS0p795yfyM/+IJ+ZrP3pVDKTYxpEhh8pOKo1y1L5Ha/zu0tFqbapOo5zFQVfP9S1p9gfZN4cTnie0LXRlfQ8qXwDaslp5pouMkwwuPsMOiE4aBZsOflG+ED4727GZgRNYxN9XVNjqrEZDCT0H52X7Qe9I/6E9zqfNz6qoQo7hPeaXz69V0QVtoQnI+7F0SO60X6TR2fG42gRPegI/N26X+yk+swhIP7btCIQRHWqtgyiJvtGpxYmsjNiZl/SSme/zt4Ji/uYe943oR5EfcllEZB2JjQoNCrSJzHSlR0ZfWs2gLH4Y3HYJ6Hd5x+6VMLVuBHe9WdPeF70sb1S6GFnUulRZzPjmYVAUOK4MXxDn61Pw5dKkhZ+SWJaEr0OQcdji2X+J/qSrn6ayTNrXK+e/51eTOBfc/d+4AuOj/SLTLiYk5FdGavnesQG1Hbfun/wIcp+umecGndz8Pmu/55jhWYX+XVxtsnULo8PN60YzgdNTK5k3ltIvMyZ3AAkf+lj/tJ/txSbX4a/APGYQkhYo4f8GZW4W9QBzMuFp9hX/bT43ghFd/nQxpC+T08fTX56yqdsHZrCmE1KDwtJSF6Kiz+44xkW1xdC9fcLpfWF0kDxtXdsSt3AG95nRWffzaXmLyFkYf0c3xov9MD9o/Po6sQzfuNk2yPGnpfTh58ktDOyE5tANdr8BVvFmjaoYk1lgw6b1+OBR5THfQ94Fx/8+pMaQh1UQ6ifwL0tQ7dm6M75BLKHm4+LQ5CXLRthbUwO33/58Fbd+Zq4GF0TpJCtdsrY6DQxgiXDv0ihT/A8P5cl7t3QuqBkyjQ1KTn3SXBi15Uk3FBBuF2KtIOuspLQaEZA2iKuQyBSJ5M4IjfcFcW5wfM5x+3gjWm7m5JfjmeNTykE/wmZd3no/oT7OI/gcnfKl+2fAYtdlacfU3kzjfOs1Tw9Dtic3BCSj8idAS1FWxWaDccRf9abIzQWp+/BxieuUAY4Fvs7MjriF3Ix8B/aoRRWwiT+2bfdReP76Bm04DfrWNneH9EMik9onGfaNlh0Le5++w/2ZydnfaE8OpE1Vawp0HL9y3Hc3o87gtUlOQUNrM/I29SN5u915eUZwlWyP5KdgzJtdaceGU/Xayq0jHL7rYg1jM/+QN5ab07+HAGdqByHgdsPegDH6nrUXeIA2teCTYJ/A45V8+hSlwlYwl2LgL3B127ta6hQQSejTE5FibMPfNr/6oc0nqOV9RXdiNwYw3YNWTseODkgBdYpsPNZbubQi/z2yPXYgYs7lzpH5DLsHv9+jP02v/J9dXKHGkUNC4hh0kGVWt851nI32nLbW34r7WccHf7nJBTdL39QUjEWHBhliem7iam4kUWM/VI0VWzF54bYrLdoykuh+WAdCb8fK+PiuvyukOrm4/sF1q+vzZfqCbVf7xJpP3caZmzmzhkItfsJtZYTYXYHu3UTaa7vAeS93ec+XGNz99/tivYf+A04luzXg78fz4tu/j75QCEzPykmujAvEVEH65Jr02lyNKefQ3Wlql8fGbLOE13d/MS/sdu3fjfXnfSd/UYPV1NLqlVBTPHgBw12eq/mS/JGElUMPfh2af/CphSmRNIYyekID2g8pnsxAz2DA4ljCfdZB9+sVmxGZE4l7UQVpGQkZAV7WpVSbP0mUzwbI2/umf9Uy0ktmcz+nVCXeYHBoIApdmVs5dfK0KN0MJ1jTb6V4v/+/3HuzUc7UyWlF4qOqYxBmdbeY2f3SIyyvkk0sHaD1eUgfqzRr9041pagnaRgtyT7OrL5i/+YoaCf4SxIlV5R5Dt26/HgsqTGbs3dJ4aWex4fg/DfFl2iB9MrRP+IHiyt2Aep97kfaNXLixA3Hh26BIdHZxoA79hwtwI4nlQAYsD6fAIv+xngqaASOJ5U3m0CvGMTiNs1dj2akplvk56fBM2U/vL+cpAoe/yAT243YP7wGJyNaa6b7M3ugJ5P5WQ7dz8v22AbItuZVvnAMfHeq3to+9sSKQdBtNMoyeD/R+mZme4Ohm42QDoitPNSevRecBYPdQnwwH4mKP7a2KvjnFt4VvzV6NrT2feIeRej4luQNtDocKUHY8xXMX60zvv+tDdcxzH7vnNIrQxuvcTdXMW4RdPdopNboUOSldQOFsf+X5cbbg+my7ABD0s8EaHpN++9V9z60pDUQyvXZ0zppZZHJ/eBk/D6wSNbB68k/HmVn7v8eR/qM8ydUV1FbwpipiUQvRYo3KSLfnG5AgnTQhyxZxLgCbOhu8G3e3y4m0gWxN2lq3Ze91rqXmKC9bGdjZMjvcEp3KHP9s1xfntFf+1DsIwqjmDUx+amJRsHUa/e+yz75Vsdoy+61DBxST+uNIZxF/YMj0Rn33TB5gyz+yK93DxKyKk4NuCBLZLZBDYiqmG4XvkGaaiTjRiGRrC3nlDZWN95kTQz4KQQi6bXidRmn02HhHsPXftVUw8Zq2PFQ3ei90GytP9z2iNCwEeeYYw9tWygNcxf7xxFBsbZA4HOnkG2QU4iZFhlT2Dv3SvRihZgE2D3CgGfQC8atsGlPWTfDXTy8S8lM1A2ASxOXEz88yar7JnAPu63nJfifq1kn1sVUvizxdmUfWc7q7+3Pq8/lp57B0io0K83MgPXKFSEDbjFl1xhlNSesZcn8F9wV1LuxpQT417qJp6jpvWBxfE/69JjN4KT+CgLgFtk7wRHtA69k9v61ph2h1pkELdhQCugMnrhH2W378pNmskrbMJbXIxjXrXKAVg8rkshfVe2kbzh2JT34fbNoY/9F9iGgW4OVn7GOhru2gd0rjhYxDqWfOkeyZj2PNvkvYG1p7v5evkagdicLkd/d7+bDv60TMsdmz3moqr+17qvcYDCAIWSOMrqnhy+y+6bauvSTuJiE1bh54v8tvhfe6mEf/fWE3aApGjZ9n5TiEqYWF97szYhxCBsdr5efn0LACd9+U1E7I/x/ndm/gy//TFjEV7YHj1bxoitPPcR2FT9cueJm5uemMURt70jqnhIHiQOhV88Ni8+YlkJXoFePnjPuVeD1wZfz6LXu5evKsrntqvjfi68andpd30zh/vZrg52fE2Av9cEYotXNTB/ZtZv2N+wfz+N+XNVQz73hlLXSu/Eq6FrQ69Gb19b6VYC82Eh1t3nBSYJ6hey9CROkMwC7QbbbiyWmTAIRel6hyVJthF20FL+GGGgiABNXYNsoqtHNtFQJ5vo6ZJNwKLDmR6Is1zBZI48KhZ/P/H+5uGHB5f2zz08dPPwq4mXNeI9/2GqVvCeNKrr2i51ILOS2mHH4K9mnrbrgfv7HtgEyYS74nsuj1dxfHnw89259ac93zyDgjycA1KDOL+ojwNpJqQ26eGDmsSU9LxCZpZv1ehEaH1hSV5hflFl1MBQJbWoNL+o9Byl9sGgd1VOXn6RRlp8TNjkXerSXVro5MfQh3eoz+9SQx/CEWFLnBef3f33FfI58uflZXdkVc6r5KhU/HC4LwiZfOKr4hOr26tgNDje0+rE9O3t4Bt9v31oYfoLhFfRs2LzPCzNM1z61G4r3Q1zuxDW0+xMVCRl+rUKPVz7zPPyEZtSlBwTn+NhY0d3SAscjHSuUAqzEjEVD5FMsPaxL5O7pvIiSo5mnekFuDkHJT1SNInkRyJF65EmFD78Ow0Gr+0qOi8T78x2n+m8N1tb115fXu3lauPkFpAZTYsOzHB1drbyaWA0lu8XbK27KFBXdciu8pBAI1Go5fwha4GmB33OJmMpxmN9zmV9zuSJoUGj8dvO4DkgQDKzTohOiwsOb4rpCFBOpuoaKSm08wV1pmRlXyhiaHnvs/JMlbI92pxNMQX7U4pOoHU4egIb30YCh4WrNVsLPJzAEY9FF+vzNvsutDETaXQd4n7l8Do86ZxA1eAlM10985qMQgM3bTVDQ4Ib5INKA+/V2qsgShuhXKhZOl8ZGlZZuVRdQ8lU1TdUVdE3pZBNg4zIID2c7jjuyFhg+I/7xy4IH/tlPWINXZV+ifuxkQEkGTsVgq6uWh+1uSKzsCr5bEiwv7dDbuRZEBgJs2Z4H7XTUSCeONrnWx+fVnglJpjOVCqTKqCwEgszW5PO9J3QV9E6PSbjnwFuIKwGu0XkhkFUn5CA5DmlUpoJMUJswgu8vSulNNZMbWgLcIvA4LRa4/w9P8f1Z+0w4FiQf59gbM40MSecMjcm6poagzbaUC5WEtxGq8Jn6RnKycgaHrHEHsoBpLKXMCFfEh4tDBxU70v3htT6BxuNLt4eqqm9O1zXifVxC7OycAkBLytvtzBLC7fQAKCVIfEqRUYWAcHOXhQPbzdnp2Df1e/efpwemno10dNQecXVzZzMFSWyraZhaMKISRWvjAnQIiGN33b7lu0RFVXWy1GmwPljo/uF75+3VgyMFcsEs5BTumOytJzw4Do1jEgggs2RjdXr2V2fbuJS3lK0OTQUSJorJwl3Xhst8HMoaCrZqh4ArVMDptOGyYd8CQ52mRutevc4Gv85c7D0mLlq8Lbo96oojSX65avg5sS44Ef21kk24Fhbi2vbiUWpz3PTYxGI27KeX9mcuj3f16Ij5q0fuZsoeZJo21VqlWXattAzZtV6wklh6GHSMTVvZ3uSooFLR6ZVppVT4oS5tauXVQ9mGyy8RH7nXiKazdkyWeNXq2s32971k109Apxco5z0vgiV7PSMvghnpDHHkdlN9EP2Lc6c8zXMbIrmoFGDgfrMabWUHkIm4cHjkUCE7mGo62ahdG3dNyl7V9LIwTOhsaByfO9vzmKbxkT8SnFezqvExFdZ5ZFrkwmMkkgXhebE2IdM89C2M4nWl6VNhjYVWczrdPPQgjXkb6pukZTTVJ6U1xQekTXeAaQow6+zX7e79I1No4xN9EmzWqZNsXU3CYaR3KUETWNjGzamzLVRHA8bFhT7Tw9XEMtm2t35ALnkU3NqsnxLtfq0t4zXqma7V5yNZZpukk6XlOOz+oEUJfT9tdxQEf3iHJfY0sHRrNHXx/Fb2Ma03mh2iGlsAhuiZsC3UTi2ibOklBdpIbQXCXKXN8c3Crv9Mvg7PeEwcNtIYb9vIK/GGT7Xy51TcFttsGsGXE784Jd7+TODRbS96R4K85voRlYrd05RDc25QNpQ0aLGUOcRMeZ7bkdGx/YbvpPoF87WjN5YekbPQCPzbgwts1dHoM+eniUcc2NfRGQsqKh84BkuryqrGuTjFy6E3QEy7slxrQl0L+8EemtSnMC0vC5RTp54WkFOR89HRw9Uae/Ck4q9JFOCTrWJnTCSK+MITyr31LzkrHLCSR4EG8XizVwYaGHFXA54BswA91eIN3NOQ4tr53ICg2agXTrO3C4JLS1dzAA3/2lgaSeZ22Wh1fcX+yBE7YyC73dikrljPqb84eJNX/8l4EzHeMbE+AXSY3yOe0RHB/rGRCFucEp0u6DpUIbwoYwm2HW95UX9rtguhJbQ/1cOQu3KLj9cx5W2inAPCfGH9P0pcPwQB9Ke354yH1IH759/xH5TGAfFH/kf9j9/uY2zzjffL8UPdLbCchm/u208JBNICr4x6JplVXLYYt+xiWz5qAhfL2/9ue45ZqDncpXLT/vzmYz0uG4oObvzx+8NN+eHRuJI8oBbZa8+R1MFHn98IlP+bIbNpDKnhJbvVeKqEqcWh9wmuIa+YTTXfRvYon2xpqWopLaltqKmpqO46GJ7bR9PCy0Kre1poUdgLgDPY5z+j4KHpud5z7rbdQGcMaE/7lIX+7bmwDtJuXzjnJ1w6SI5PTcjLuZKRV5qezri04u1jqIlauiR9EhkOHr0yIXiLA9eb0P9EBozP47eVMEsbW2sUnzyaf15ebOs7tG1Y8XJqiQDNSp0tNm0jdgkdZ+LgXNEaqRaulYK5VJsQV5dTEhKulakGjW4kpaaVkkTP6S65UKUp/wdbp1rdRhxkJT32gVrqroaLknM7MSYljpG7uUG5Nyp/54tvADh0sIYa582i6MGRrpEFWWiuab6KRJcy7vdejvud/wYOrmrQ3UPZzdAdj4bsl16trMHJwj9C8BBaPxKa5K4nayl8ATWSLdXfZuqajai9urlaXVLWl1S43gaFezUNHGc2viWGFVqfMapNI6ZqJrQkGIdrVlpSR2gMlMI5Rq69DmzV4hdMrcHAWfs9BAoTZU2Z769bOXxZc3VFkp4xWibBOFYwgTorrQA9CHSRO6XW+RWuU1ulzugk+IJJrd2XG6lfjva1JwnrQ15Fhg+vshoU78zxce0UticGgUkldh2f/wL0iv1vW3a8KS1TM8CWeMproOsp/4470mj6lkw1MdTho+p9Irw0VTODQiyMjyVlWFRVoYll3JHw5maAiAoawJL1qzs8owCRFg7UwQYHKuvA6APmyGAR8X+5eSiA+FGlKvISqHXVEyywqAtG9PLQDYOESOUrdi5bKecB7mT9W/92UnbzKds/CivQ1ggaPNaTYebto+Dm7It2LtszSNuSJ/mqPEUqaYzG67KzmDhcq440LVTrjHdCbAH3C3KLoZujDGxdgHfzSH/3ziKTf8HIG18azVlTW7R07J2d0c5mZEt3MkFd2eAu7W3sVJe7p0CX/6/fltthFVFKkqjtj7zaoWWRHyaxBAL0BcngJzxrUs1ANWoinudxTTyo7X3vEkF7WDJOkHMB/f2PmpRAYPiGEZh1PFXRQ6uOCwmCQHcLjO1QlaXT8roV1cmYLFRH/qIMoDdb6ZdyDqrc40JgDyupesAej3axsPANaHW0d+K3v6VKQO4dWcnBYyNfnCmBlndj15UYmvdLQVZXYXCAbDvSi53l78mgAvp6tvmI7ycB8vFRn4rC7Z0d8UzgaupqRsZLwDkzv5TIUDPRtu4pZzR/x9ttS/uo2IB5q++zRLVtCeAC/F3TemP0Fvzeym4EC8U3sW+Oa/B+37nEQDoFmu8ZrzdTlxV63fOfcsBAMDIT4LbAYC5ZvPd/8f+n1vebbmzALigAAAQwHHeYgTAdW6gdaFbBSKcajPz+Ekgi2VtdCuFUcG/XvOq0KvaX/LtBzg0FzbxQEo8IZXZxItGvw3ZH5eQQ0tmykBTWTCTZmJNLIkKSSU0YkCCXm33OCStrZMrQacrTnHJSMkVWjMprt2WUOdV1jUFdIKyYhLzf/dFofSrNUJPXZ0h23k0yS4yQ7itdzJmqjhwsrzqj+7MMqlnKY2qS+yyhGbcFLoA6XqJo95gFYoY6USEG+HNc6lmNUzcTbHsuFSqhFJgWYx5103ZxjzZymZTZ8QGj8RAxo2ShcMjb9pOU86KrQLkSLnRmOFGDjONFpx1CXp+s6dvOVx4h3IVL7nbxFUagep8f8S7NVocxKxEfnWDR6/hXkQ87T9Z9YNLZnCf9Dlmsfx8zbHCJMebeqYquSWXCc/YpjXvmnpUiazbSnKTQegpCAFh2s9hSjah52vufYbz9A+ryVFgrtCbZYzt0mfeGYLrgbJalzUNMqomgVWMVFks67y0EFM46+Y3I3DNNWVxTUwuiOvSaiYFqW2Ab7tDuU1RShGhKY6YnJTioazeKCeihEYwu6wmG9tUK49HpautZqJ1h+zsKPQcWAqIKVEnqsSSmJtqnhheK9M0WhgtmepO47uVyu7QWpqtDIeIjQmvctt4GOq3VGnMpi5Rs9OaD+OCoIJ9ijAlxEZ3q8K2cSvUZp3SmC0KHW3jbeojAD4qtIcFXFQPgB+g0B3g59viFAADqeUBeIDyWIQYj2NR/GIqMalKLI7FOYHJ8JDbG+VnZwxJhEixogQLFIRKghIFiqMigSxCBQ3lf2Jj4XzJMV2HhIZtGOJsxPx3x1+U6Iz5JTk2Ivg0hJqUYJ7IBqMJo7HA0wrlnUoclChnBYvwhxO5lcrUnXqV0epC08uiW50qEoH8CHRHjrfInPkG3P3JiRAlkIUK83VE+Guys6hlxhiJAQu2q5B9cEhhYPBIf8/JTwAA", - "headers": [ - [ - "content-type", - "font/woff2" - ] - ], - "ok": true, - "status": 200, - "status_text": "" - }, - "https://localhost:6006/font-roboto/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2": { - "data": "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", - "headers": [ - [ - "content-type", - "font/woff2" - ] - ], - "ok": true, - "status": 200, - "status_text": "" - }, - "https://localhost:6006/font-roboto/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2": { - "data": "d09GMgABAAAAACn8AA4AAAAAUjgAACmjAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmUAcg0oGYACGTBEMCu1810YLg14AATYCJAOHNgQgBYJ0ByAbL0RFB2LYOGCA7DduwB2DjQOQz3hJ9n+ZwI0hWB/YxYSYMBRSFENBsWqrAkWbJBHpUKamYBECLd7YUy2OVYvlKX1dMf05+T/7LtU4wMKUW3v6cz1MLF0FGyHJLEG01r/VMHufgpZJIoGKBHQMKsYkFpgU4tsDmtv9xsaIGoiNiIJRtJKSElLSIdGjQuiRIypl0JtBlKISJSqZZnH/Oq0ZWaYZyYoPCFpukb7+N+xuwk6iBRZMI8WdlLQH1F3R7l157zoCyXjA9AD36nWBrP07PZhwgBLSeMnLEQ4VqJsqlv8siGuabsED3LeKFnxrugO3hMah9NJJ/ipRkvNo0bWSH6xvN8TX2qedvrqte1s1/yDEW6dCUB4tkIxQEeoDTSYMiiaAuBEGJLK/dSEgoaIi0Ua4CGXj/7vX2aa3YewLW7L1Fw6EC+fgxB/7NWWpMKZaUyFMhaxEyArLmA7J/62Zdje5MjlgYyvcOTf7ZycwswkX9oD2CklKoSNIzN4VWFXVET5/gKgKaO9USZgKCaxcreurQxDS1KS6SqUxAJqz+B+OtbQOoul9mcsgjITAKKN32318dn4Bhdn5t38EFHq8pCEUmUMECIAIFw4RKRIiRgxEnDiIBEkQpSqgdDmAQKCAVcCaECAgAiDACvyk0ex3gJounDg3gOACJy4k2DnDicusvN3gBBrAILTCpecT3AAH9C0NYpDo+7rNUJuyf/BUQ/cM42KIV0v11FyNhkyiUDj0XDKjjuX1lEnr9K7FjMnEPpZVifqZhCWKr4SbqzTQwLYaKjSBrueqpWpPjRbN9WixjymuFFH/CwqFBhYDRux4XXDRJZfdwE+IMBGibhEnQYq021SoUqPpHm069BkyZsKMhXQZsmTrQkH1yGNPPNWtR68+/Z4b8cJLr0x66515C1atWbdh05Z9BxC3mkNDHAcJeFI4TeKEYI8bP9Y44ePEm77r41+ewEGxRUrtUWZUuIsOetH6bTJql3HbzKjlpPZkximHvICSPiqPeMwTngZTLZpmhlleMxe8ac9b3jHPAmuss8EmW8F2u3bYZS/Yb9vBNIRJvask5+7FELPwimHcaoZ46yTaJ9WCSTY0DsjmwGD82Y7DoWmOfu1MGuY6fi64i8JTF1OyuErRYMJBFtuDaaussAMsMLJnmS0vuQHreu+JDYwyxjgTDXPAYsWQxpkTT6ltykCFu+glcU3S4tKxymCyyA7etO0t75hnoWEGSu1TRoW76JHEG97yjnkWzo2mioUhQSbYYOmYZg2ss8EmWw1jsBYFTyY55CV9Yp999tlnP46GGajhpolWtE5hDEphgsHaYdbBBptsWWTntaOdq59hH5i0BI2pTbJ9tW44FNXel24XIjwwjRl9q3SNYW6MMqPqdvrNMVySVP2Trj0U3CvhlYipV1w9cpuCyIgMoYoJ6uAoNADzvug45Zj7yoBXfrjWup4FNpUP90w83Gjmo+puO/m8JAbcN3D4dUpCw6N96EFl/RgLIB76ETisxR/w6aPfR7D+NjfOfbeHOYYeHrwM6cPqaG0C4EDa+qeN8E9UN/umlSM27Cex9S8bW/9cmENaN4plychcK2z/rnfLbrbSThvtiLBzSrZHuO7Wmpvu9U1ldbZfCTb4hlrtIxcAHO5g65ppXrrnhMPC1kvnK5fWHKkuAKxYS2ygcV0rlvjEtGOxglUm6USA2od7bZ7ZA0zgcMNXu6Vq96DjVnaFuUnt8GvYm+2/bLjrmx9odH8OHtYJcBgN/b8kxzn07RsPkp7oNsv+PxY7vLXhbI0B2O6kbBr78YIaGQ9mNpD/ZDn01If3Bh8OOu7XP4HYqD7kLYGVOfcyTk47aKYl0X7mMjiMDjPg7M42er6j3/abnabFTbZeexnmm/4ZPQMO37lXsuKw1GmniQNWEawkgpUo+P+g8bqExlXC6NwiDU+RkuNUiKeoeU+7RxcXffIw9p5jytx58d4L0uW4KO/t67osuGHVFr1lzLkJFBG7OIqjOKlO+kwUPh53gWwuEnGJGNdJ7wYZ8JOTEBHC5HCLTMRIT5wnSPAYSbKSIiNpslAk1h3SUiqP+NULp2hOtdHQAdF0S1ofe7ErOh/EMyMdczKLF9olnjsqE3JyqeeOygFPyuNJXV4ExVMo3X9j06MfxnOvIEZNoDdJXkZT5mC98R7x1gKc1fs01mxBk9dJBzawOQ5sKDkp7MUhWOFQrjBRrvMoIaKIEOVmyUxYL3rQ4QjYwQIGsIZUnapA3GVBSAIaNA5ND0QYkJFRiSHMgAOcYxIJoiQSJek+IlUaTgrBBg6wgcNx6IRwArCCIg8o0IFB0e4sQGgD2sfstj0Yi/vtsrpEq52XqxUx7wXavU9R5AbVfbV1p6EDtGWnJA/XVOMRsvo8RlPdHad9NxBpoVtpYHLL0QrVHnveFe6uwPf/7jyBq5c52luBaALJx8pX+LgSQAvlHBSU/jQISHSdPDXyK0T8EDNBpjzkeaygcCLzJqgiKV9QtldXCkW9eOkpVFBLmWjZoyokvMYGYuM3q7LDGjTAj7sPXGsYBaVQYdkTHmY1/zyKJHrVqlSqUatOvQaNHgpOvOwmgbx4I2vWolWbdigIDqeB6phIgQHjoSEEYoO3GfWG+xmO9H2b14EtgH09CwceqakEMmDjtbHwH1ywyEvghjwO6F0GGbeagAYru65f6TdFf8NxEZpQA3bCjcYxgDMmoUrc/1DdhozZ9MEhMsFlbnKRv254PFwOt8PD8DLMhvlhdVifRh0CAEy4lSj1fMkew8Zt+fiWtyg/Gs6H67an546+N+CsD3294PDnwOcHM058+/z/7Vt/15TJ8MUb+x/6/XXxtmRzAC4jjHlHw5q/XvcP1+XZL9e/HyHSqDHjJkyKEm3KtBmzXpsTI/YX7U0Txdm2Y9eeffEOMAIAZPHeNcAFkH5MT6DhJhQar4QOSmnAxmukk4d0404Pg1C8IcIZ7jem0m8c6GKCWZ7xmjkieMMCoyyyRBTLbDDlbRLDFh94430klk98Z5Uf/ITIL/6x7f0n3jtUBxqZCCT4yEItBRI1aiOQrFEfAiSN+hJI8bmP1LFAqs99ri4F0n3ua3UrkKW5HwRyNfeLQJ7PPVUzgXzNPRco1NwrgSLNvRYo1jyHQ6BkqJuBg+pwqVfwfijyRYUwvQnHv6TWp0PyKigaNh96H4GBhmyOegPVB40f59xGEvqhc+sAD9WxCKjVXrZAVDdIs68AhHKCotyajCaMMM33GHhE96JFqxBPQEEEoqpC8iJOGGL05OS/t6P7dswwoetDgYYOgzlyg98MT+zFf0ajcoEikxZ3w24atFBdBAG0lP/g72LZuroeHO2D0lGazKLkzmMauyiDCdhr2a5txrOVjSChgd2ova0t77MhhbcusVxATqdNzYG/FtlUbXRQPRO4OeZ3jE2LIpfa374QSXm/jXcJ1RlLGxZ+dBY1t4Brn0S4YIb5A885pd4Nm4nTxHTsncPU/uJFsrvfCo55+xh0RpRwlNVFmRZ5JT0a8vqz7YKjXITu0NETuTeLgWx0wlG1ZKwnE8zEIEPVAl29KW8grf5KvdJSAaHPwFwMFyKZcNGCzUM5o39uRYwWpCG2syOpPpQYJcOaFn+YiakAyoJBWW1PdQ3gky5Lyrv1Qu08YS8gSdFMp6Xw8V//1cwtjV/OeuogqHw10Ysw1TOlp8shZnahTTWfy4ZZH3Bv01/rq0FPiwuORTUH3Rr39SnJaRmeqQkMhbRqn4TlQFNuBzh2XJgnuDqHspyu0HjUXsMzfPUKBo4oQFl/59ra8oQdbCz13uBAOQ+7IIF6czUJA1lU66Bw5NYfWV31oNN7ypngGeWsuTqsEsrhFQEqG1WQZkIcz5vH8rsZjFklUsoKdqUiEv68IaVRHWA1ltQdWoR4IBbvBaMNWXDw7xohT2WjEINN7BucggQF7qiNneY8xhDhaJpbjN+TprJdqRJ68eUpZ5QTOoqiy71R/rGSuGKW/zv5f6bK+V+XqNf9bxu3tMVwufyHCz+PSnKjrh9+fWXoqLsUjumye4LFDWIi7dtumjw+brjklOBI+ScdTjXMTJQ4+jRhyjVAOkeCkt30cx/S2Z8qaXHhEDOrpWN7sCJd6FjeIVEmfARcWahxPLsI1sVRRvQyvF1z0BOqq/mw7dXZ5YiDWzSTRl1gQmV52yFfjGnz20KQxu571VcjSo6/lSSUtDza2mZJtR3ssJefgx5bpVWyM8HDYK/wkP5JPnL6UqVarauNUmfRkTOho3FTlGoP6PIFDRtZeBq6BcMRkGuIiNY4MYmDV0ujHNQz+aSb3NheHTbPCEeU8Mg3wvEIObtW60VLwLt7tL9LwT6HZUmRTfWEN7twFXImIwjFDI64QVhZ3NhBFt8eBbxHMZ8CaIe7H1C8xvXMdyxLPb6VIsSjjQ5Tu6SCqgAr05exOiWSIOmZeqYl2yAKsJ4IfFNStZo5LrDOMVUi2QHIrmqZ8dR/Sd8CWKfN1Wr8Mskb5eGEuUnILSj6pq4YSmagxspkGt6pTX8GqCojM8mUjwKb6kdQiWqQsEttHrQP39bBMb/jp+WMbYfEKRvFj3/DjHhrj/gV5E+5wKkhbQbvSCZBg9oF+S042qt+KCNAGgjS24pSDB1vg0HdlcYmpwORmpccTd0pV+zgEtazSNPfQ0pIHnElz5rKRywGsg04LtCsfnVCrglVCXW2UwSoJrdok1FMXuGCi+3BkEsTB73xIylxRo9pfLYQYxLuUC1A6WAXzk0miNkeiw1OG6sUC1JVAcxx+9QSh5gpb4ljMlXlQ8qQQ3dgkoicYMp93+rZewvB1cgE6qFuCI/w2OaxiJkb+/Jx6REGfgqeugr5MzGoCXlAhbvvgpRRatUGSqa0aT40UTVEIniStK2KkQNSWnadTS44MC0ZcShqn/tNbjSpzhJPWqmVtdIahqMy4JIurfISwFqdDknlN/ZkJWaJOfPmu0hCIViLEiCXeDo1fx31S8zs39RXB2funyM/h/4qJvzk1FE1AlLSBoRckNzDUC2Vie0A3dVydpP2+nlQlXWLmsM6kpxf2qNAnzxXE9I8zbaSdNBbUmBp9qN4v7SdxKEPSQw7OPKYqmGDHU1G25UrXOzQT8UESQ8gg7ZI7KplJNU1l8Ei8eqUd9TGu/Hq7MDh3qFLtVYpmTYB1RVu8jGGn+HIKixbp7pl08klbTB60qEpikY9sjLo9EaglvU96Bz3EvfEcLRjtkf+1rba2RopIJY4orU7uObY3Y9SlGnOR8UZRdWYYRWrEpkS6FgkfdvN4lxqew4RQe5mP6W+wnEkhvXYbXxIZd2qOGV+DxkBE9TT6D3p7Zq2VzJUAseOmluQLiocOOkAKDVWaXR015dYYhhgYrCcD6ml8QGDF/GOWXf4pN3DFIOvh2olo92vyup7stXa0MvaZcUB90LXMpfiqT0HdGwvKlR7KYetkJMa2zJ/eArTc+pPLwuQVoRD7jxII8nWDhElbFkfTa6MUhEyZ1g5yvyhBBlM5pzxUDZLT/37WD/EMrpTwTbt4IhlG7ZotGO0+OI4aZ8Go5MwWJcz21FJpnoSIFY/ccFOPVCPGOEsSkbF/PQIj5jGOrVbVnfwRTqNq6nNasQEQSYH7oLXLiW31UgXpk8J44vqKc0GKe+BUadt3wUGAkJHB7zFtQeGQxccdSieReslSPWf21E+PxPTi3gAyczhLgUOemFaBT28Nb0szb2eFfH0QV74/FTUWTUSxGVUnmvtGSxEF+eUJztVfeYpr5KlNEbYbqQ/w8UBwJAH0HamgKFli1D0/cDgt1aKRsyIiBkajPOqYfpIH2OmzjUXl2DjQBcnYNPzP23nDgeJTLHZjvA3F6eZS+qL+hBHp2CFSjh9r5hEHI5LWf8yYeu+fiXuj2dEpxTy4BSscCAS7mcaFpIjOC3TN15a8XSiiv1d5nw1J3XvVVdSdCXBLyTQ7X6UP791na9WoVPtyKsOfHdGN4V1cnOIkpCaGROZGQLYjJzIqtrI6Io6olJUVVV4RG1VQhxWw8BWVUnfSk9FQ88uQ89O+1zrjciqGmx1dYKSoDTFEzCaH0DKetZ6qpr6NipKhta6Pz/vyl71JjjIgm2Mo3dThbeljyxJqar/UU1W/8NoQ8MMt3tOGvIR8uHF1YdJ9djPRUuCiuyQgv0MsjKrmh7gbl1DWxUY4ZuThDq3YelD8tGWvyGgLy1vY6imbeEGLDOpHO7hsJgJURqr/sUfdMIUeQNS3akvcKdANyLxpG6ttwWvR5SKf+OeDogqLHnnfDSKVObzyPWhfkSuc08aOBScttLk84hUfq/nmw8c5a+vGV3LuuaOM8ilM73oei1b0HiQOciMcqb1WLAxXFpjymrKekl9Wf4AqqVC9FkHJbMIdHx1e6qd9XNg5NrO3gaSJT+J0MR/vZGQBOTgYj7stSKQKXNVXJDY31kSRgv+kF24ebC3cBUl1sW4FzlLSg6fQRYu7hOXE+KiplBr8IY64U2sYRs6DULU6B833EN1i/QIcale8TkFiZTnqB9vXuxNN79muxhd9Q6O2QgmRCCZ0QQ4jJKJnpTGv+v9oztv+iwCmx2v+PFGND0YOBw/gIUOqldmXGhMUkLkg/zYNCQBblntjGSPaFO1s10v9n8avPBleHDEAF69UZnZrVe/kugkTRzewS6vfEa97f0yw/q4iTWYFOobntaUn1ZEjgpQEKYF4W/NhTyv0Yd/jpcJkcNPVxmmV74yjU6gZf4ppenXaNNMkCyKPbn0FNpK3wWEJHdmZqV0gZyeMm+7ch9v5jGOnDmQHhB2JdRa3fDkj3rk9+T/0vjk3+XHvmFPPPktb7jXunTtve7t2X9N52URmJf7Oyv7Z1pSZER6MpvtCdeYGG/3KOJiemfEJYDQapiYQomOZSg1yG6ZmOa28yKIOPdT7qhorWaMNs35ggvr6G+bbL/MCjzP6ah2FK4FBKZTczOTe4A20vPvgNDZoDTV5MABkCq/LlcqJyNXIgcCLfEZqKciVoFpdFmDesA2F/EViFPTiYjRMXd1dPV1vB/kbEJBSleHOp5MjjQ3lda6OCtr5fRIdt1PHpfS7wyfXh9tfyRcLaIbr62anLqFf8lc4Y96mu5478FlTWmhS/jNdM+EJUwrPupOtsbzm0OtfvTfGH6QXPh6JozbrrScJ8y+FHD8bb/cUsVwggG/0BH0/sMvm6XGSpkVD6YkrWxDSTe7c+a4a9+DZXxyDkByItiaGDTEM0iu4ZkhD7Yc//CjBmoBQ54/eN/fc9+rwOayDzexK2zg39L2rRpGqZi8+EBartu5PKFZIS7+CS6kU6AePnpik+v3e5Sop2jiixQhuoqm7aMozvXeY41V+Vld4yx/kg4Gj7aU1KWcbDU7WvOfnqsuEoFnZqNFInyV/QiTCN5nZPE7+yH+3MbPICCNKvWjWSgsBAw5vWhq2g8k+yJtInsAQ44pGvpsA+o93SqOOAdyC3tVlhAy8kBF0JFz/cg210yPCDdP7xAzQPhtibvbpfSGstK9AlbQCoPe0sXS0v49hEVCL/h99hL428m9tBO/9ybefFp41hNCTIjwS8uEGDhR0dy1v7/a8ZixbckIvvJrm+BY0FLoZabrhRNHyKcHKnr6S5R8k83m9Hp++unpHLzlzRK4Kve1aWvrXsVreu2rvX03aKXVzpKkaavJDXQ1abeQV46TqbL0dQ1N9DUkmZmnCHqM41HHOAfqm/OfSS4K9QUz6i84iIkjPTGOf2D+8nwat/5Dv8AorzwlLqI8PxllC1r42qlofn899IsIf8EvSmxaRteT6WtFppluQF5yPm0H5ff4GW+Z9FRNX92p9/Tqd9zSLDHteYSAniPjaOrOBVJNenBsCSkb+ECP+P3O8mhOA355PmvXK+xFQG9UdVZuclGwu1FWoJPdy0Drcvdm9umtLDQhcfhBb1RfTnlOadBspjeo+OCnAYPvBgx+qug+qFaSF+EVYN6xnP1wEkFWlp++LWp8WFre0Fj0DuL/n6Bpnjw7SK47206egNWRk90XG/Don2Vs6T8vNHH1M59b7+U8Qm7CD/ByunG6sXvzNnHWWfcvykeYXlt9MTG7sG530/7m2uuFlxMrYDsd9PbtGZvUMz1npmGdh1sFsoXnUwTWI9iKfiQBd/t2N2CJ3TkBQNsVAKhoMpkPe40M8E5YoCEH5vQGfmL1womKR09WGi7PPrg0Ww9iYdkZ2RlwuuJtMcK7BBcPd0eHRbeWvGxLqAXqTpuelRfB0ybaRol6j5A1YOD7aIqKLv+cyWvA+jXRIN+IR2kxVXfYwMsK5FBsP9eu9rxyT8EF1wEWKFLu8fHLl9BdNE9SX8V1atZO69a2Rae/AqkIm3Q/WqMmGlOf6gEbtwUaPjhT5PVtLjaj4+Mb2sYmWofkGMekvJGec49yn4M576+9691P3cKFKYCFOpyXW+zQ432hn13YruyxGLJW4SftnAZi9gSosc+zc3/mKQ38O58cPrVzBK2+gC5uGYi3jtUUlPUwiB3He414ZJexpXEx0ybG5sFWfT2p3v0h5UmdzDJd5raIsZWDNWGLtFUPFrz/di73Drkl4PxquSd/fvrZZ8lGXN/CzTetITYrO97M7UHP010ByufOzPHYpntF73Xz6mKzJ4BDpzMwa9AAFfGC8hK8HdzdjWMteNXRFMACBfQo4pRhrmuuLiHGQS7OwNEm3nnrpJRAxg9haRk5nUd4rqtuIqKZvwlQvnr5B2uUXmrtq2WzUtE/4/MG9JI3MrBXiNP4+SaMrN1rFFFvsPC1xfjPUEa8HQkh9rGB9Paj1MH9rQ65PE6KOLC3iWNig/KfOSOIf67GfMXB/xbjSAusAv+Zivx/LyekzbMK/KXg2qreJCZVzg+31MwnxlW/AdlVth8r13oHPYLpKIB5W4vz80h43r/Ki+1Cd+ZPEWt0MjDa6fXRBZNgznu4PjDY4xZG61IHmLcUGnc/6sA2/98uWmrBVHSlfireILkspnAaLnllZAl0yOQBRbwNFWycUi36BPjPnrnroX1MokJHw0srermzqWv9SQZVLczV2s7TQEneUZ5Dql5P298gdeshJWLYxKPCkkJjGu9CcAzVhWM+MtgR0kixrIiMLHdQljK7YnBIZnzxIGkQC4Jhzs6hE41tz2Cgh/Lo+7NpxUJ2ijgZPv5e6b/95JiCeNKxKPEnoFBy6JYEhb1NPIvVS5gVLZzFXiHexaRzmaX/ciZ8f/ghfs6K04Vn9lfGr4zXLjxWnLNwwMzSf2XopPCKLdM8jwJjFru5w92zthddj52/PgJiWQHZJkReneNqucKR4OdKFmhZfzz8ZTp1+vM40vFwuUWQlzAud2JkrcqwymhjFIV/JQvyTJmAfZoJ+N8jMli6+a02nbZ7Oy9OjMvxEsgCzcvQNflhOnX6y8jjtpWHAqDxha6IOhen/EC4Jl3l3GUNHSfzEqSk81WCWsLtppJfvWrmXhZQW18D0xx9jJlqUfd4qETYpvvTGjZhQgafkY7vUHZbzg6fnD83/fwUmXuVspTJ2T2FyWx/XN5I63GlfZcnZbwABbhCdX+BCMQCRztfWViCQw9/PXj2dGGquds5NMjdMTw3BIe+XQgKHz2KIifGisKjY8Nj4hPt80dG3cvSssJj0zIL/foHivwzsiOJWbmuZS8G7IqSSZGx4qigIMJUf8Bqf6DHZNCww4C/h2e/370LcLb1uFDWjNsYJkShUiFYQa5XTjpYulI6hJZG+RykMR2lHn1G/U4FpdSmJxRdBX6lWNsa9NC6x7ObirfiPV5RkIjWrAJipbelUZLDuFT7jW430zx3aruBLP+dWNsq+uHFbfTKK0pIdV5CcgnBWvGmZowMl2aNkoelWBhXndFR1ROaeFVbxTsimlGyJ++R1dl1bBUN410Aq2cyj4Fgrmu8HNb/FBQ/6+U2lBQVPp7scCM/ncwvqS/PTLMx1zUxd44L8vR3jjM3NdWx+x/ZUHweXynDVll8vqGu8Cy+qrSEvaLoHKF2hGqkOhSmMkQ1GhlsNVAdHxpUHW03AMeeZr27emF+4UH27lV+DS7CscGKGiJCJQz29eFx0bnJMZJWx7VMAq8YXKAme2iDobSQOUis+FFx0aW3wWgO0UEYcqC8klL2moKzDfUF3Ozpp1v3V+2kexy5NREhQQ9kAgQgV0ofw5o6ReFmsSCgmx4UKCEGsqIq6pK28SC4wVlCKgHc+R6HjHwnh7Q8R6e0TAfHzMz/R0RV7oiJq6iK3lTVcFFVgYvp+i7ZLkXVReHZ4YXVHBxf5HPkoS7PwOXKcRc7RYG/knfv3BUrJFSl43JD3RycnHQ0mlJIwJpxX1dVSZL/2s4dMVXBS4XWZYHBcfn+DjcVjWWPZVwkOdUGE6MqQ5yLrmlIyN9RlhDyzEcMgX0Ilhl4M+GIsHgAlN3P9x6WyuamilfjCKYxdelayjMUwLyFGJzuJu7f7Azd/00mwJAhbe73yGi98ZCQDKdbc06kWRV7kLBOmvpCN67+ssKdiYb3eYVGr2+FWXvjgbbCpuhRX17+o54q1WJqr/CT3soyjK2lp66OOcFOw8bSU+eehStiCXerwfFiqIVPZw+9NYerF8HVNtjDhIKULL/oHJh51tpY/NDFQ1Y9rUcyfuzXrqbD6OMBXsyWwi8tV29iyJ05reyzGtnKR/C9emz+z7jmwVBZRVNJwzdQWUN5mq+koaJpVdXq8iy6yqyPuGeZl0zafNLtoDNDavVsevD9iqSi/0QqwislY/PVKvGcPNHOrWoRVqaAFlPHzQgeHU/j2wGzsc9NTgyZ92j6Owff3tA+2s01vBgVMGTKY54jycVZ/kHFWbEAz1AMxkd3qW0DLcUhD0YUhVTNH5H0YtWKR5o77rVdMbmcxxJzRcTZw0xbWMXicZp+3D2j+FFdc3snw7e8oLHMgYltldFbMUuqftSQXbjauLCk5+wa6OCY4HqvE0/61PbIq0lbQFtao1HfcXILdrzmsE2NTzMz/O++vx1b6H/bI0u5UOXIwbo3kuCqo+5oKoIW9sqoY40/cSYqOg2EFI/8pM01K/L++5oUE/suzH8pJt19ezQ8vNzf80ZfYuKbdGXr7ohI4w7+W0XvRR7GPw5TtsFGMh1ljFc2TS19Wp1Y1R8WkrPSBXKThptdmxZiMZHcSEhC/WAVfhwwcr7SgX+X40luZpeU04PtXvblyhQF/Vsipjjo8ahkBNuMvMzoEu2zdNNvX1KOr35j19ah76bT5CCXUPWWAnKE0fTiaUsooh6RfbKHelRxKnikgFYzB6HsX2YCM9SJNMSz/ssqC65lv/Nj4Uuu0I9mQUnmpKcdU7ILs0tj7zoyKjbVtwuWfCX+/94Sk+OeeUvayNj1EzzGdv7teY9ia8sHYh77OauEECO/xb50l7aRsh7yiJmnvfG/C9dZ/Dohrnh2tKNkLj62dEZufNYms+xIHPOJEGIm8Nu+p8/NrM2ozWX8xuIBPD5hBkHeJqaBPg2BAV2BAap6N+TkBfjlZa3lFAQEZRVBaGPeJTDa9FKrpVTDqUtFAkFYZ/8Es3NeFmJnz1y5JX8NWDfZHZVMQ1FpxC7v+5bDQJfB6aBkGo4ipXRGgI3lECSecFA2DkWl+lJs7ayfQ+JVByVjIiqHQqlwsZ6cv50bQmqFs+U44MppDNzcTU08Xcx4DVxdzc3c3AzhNC+SmMQXyc4XlQTMXu2zkGVMRpKQZChztf9XC2d/bUXwp8PQfa0Tld52Z9mL/U77/zx1HsPQEtwS1xLSQoc5xfXFKYaLvdSFx62CPIJ59CAkLC4MpFsS5LPlYWTu2FLT9tHnTzzqJLnygwU8/RycnM0XSAv1Ko2WUQhjE8Su9mzSeT5JKQc+HL7Q0N3ZbHdZEjBzlLlngRRjHMHL0cV8kbT46iml1KdRxEuEMJrPJpQ6HKgfYi0ferUX0wUKZdmNSQn59VCcXJ7XmJCUXY8UFGB74qPRra19CVHoNsCNDMfvAs3LzhHOtYW1fhg7f0xp0M7SWQZwjxBIXYwyO7JVVStzSjUsmRgQXJwSE1AVgrF9mM76elklVQVpdTVVlTrguZFrzMYI54dKhxF8Y1L8vItyoxKqKrOFflz46uUOuVPolSssPMdp696WUtcIvnMXKp40pVaZpg1GBBC/j6+vaLz42KnYn7Uv2klOxfL31Tv42mf5hISqKoiDwupi0rdVxYRF7oqF4k2b8OHmOv/1LY/vTvvDtz33k7HzTYwLDSgrDo/Lr0Cl7/5RIvvag6xIq8BC80t3JHU0NCUl7urIy6qow/BDX2R/8eCH/sKLD/7dvqB0/Tw9bdbyF/8BbA7/B8ACfv5RXi4s/FISFuuq3TPy/xld+aEw/7/MKFgNXAXhBB65quZ3mSNchXEMzjWjNmffEVy77YdFatbn0cri6o3s6doSBL/VEMh8d5R8AGqv7OXj7Ca4f4GMTaYvg+n0kAfMWAUnGXGbq5WubLETFC6/WIYgF1AL8uFFVasHdK2u0/W6QTfiIbHA5gvygmuF4A/RnOkT3Way54spBkO81cmv3dOk0ApZXJgOiMn5By5dK/gTcmD6RLyZLGPEyQCumQpztelDxEyeZUacZg8r6CL+WCHfqB23tFDzijCT7c2n2ArJAFtxcrcVQzi4EqKJ6RNUM9nAiJOvVkoJxLqiODYDRAJrtvBsknxFNpJyCU2M1VykPk3yDYNVohi3tQoHgVZp6OZCZDnjOkFDskq4nijcegh9PuvE5JKvQ50g+jd1bdeqZ1sdixjTOjCv6diLvkJ1nJdYR4410sawNoJ+zUjOShINpFgzFZyEmXM6HtqB8mpjAeduDMj/r/PZkuf+D7hl/haureDS0u+otzR8X3bZVuu5csq/2umBcedopEW8gHvF349HyjOhk4pHKvnj+bNyaIF8NLGTbM6MmQDumb/1qAmimZ+PBplWJmXh6LqSU9bIxFQDfVc/Ooi7qETTFD9xKpmamfyj8OaZZEJ1OAXGegvRs0KesdMf8OOk8lvar+fGgFrQByzkYE7awz8Q118VeWAeDX/e4QBmRp+xoE2+m7GMlofvvD/oaG9B4fka2H8Se6HrFqJLTH+wgH5KKNfdqN0JIDb2+w0mUSZMl/ar/dZgRnxZN8SfnmUeAnHhOHQfyB3h9xrb8lTF+40BiaA+G/tMsBstPAFki2qMQUS/5tcNCQScSy8XOQVfxRiEALnJ2ldCUowtWCR/bx1fBoCnf+puD8A7of3bP+v8X7X5l3kBy6EAAiwuW1oFsPzgUpZe2gHEfVPfVyJbQ+Pfi3eaa0BJkhD7gF+HchvzHPsXu7Bjn49F5zN8RXCq42hEmtMpgjdPSik1+KfGC9Rhhjki5BGFOh7P2jY+iolml5qNctvK6etiatjdxQ1O45ZT/UftEOE3bqvtRDIu1wZeAkdbRF7T2U5EBo1LadSY/qpN8LQwvoPx7dm69oGa7qbVQwQGv8Rx1KnFcVKDBsR6FEuP0M8z0krZRXo2dGVIpgrQZACxNubaIRKbn2lHsmgpZjlM0jyXZTtIjE+SYmfuBjMu9EnBAg0J7SSxU5jouEQW2Q64r7UQXTsi1rKzExqu1A+X6jlOatkw28nEF02OfXiKPKIS2pJjVzEZbbh3ISyxJ723GZchu0mFSaVLr173282DSdX1rOok5z8RfYdVfiCXH0hnhKAmyqsd8skpPf7wplGBVT7cT4/7Y57eJEJrEuNezyksAufPrcCIunfeVFXdJ2HqpdFkoZ1KqYlMukBm/Ja/KOWwUGBVA2qzUUANCRoyyqbbUiKXJc7FH9nO5zSHfEcye4+oFvHDWEbe54KHMapyEvmBaIey6DQ17eZMJ5Ccps8yPphAoIU0opigjziaqITS2h0IHAZOJg0ztFwK+wTcwrzSCwDrvIzxyBPmHfMMp0JDJH6JwCfgTFgBHAL+5BPz43dD42VNaMz8iDuhIZIjIvBGKEtHgB+QcNKFyZXG6iChNoVd1bfMfWhI0wE4A1wvQzAyX4bCzEmN3qWmgWUYfPyXYZ1S1F1muqjkufMQgMCRPQfeuAniJ9At5KbEXeAZLuxWVeHGxnWjrMG7WLQ1mFfOaLe47BD4atnWdUN2Z13y3lDgbc+HC6sgr7+IwIsjc7PHX98u5CYJ6wVv6hZ2bQUWvb15EHej0/q5rrPikXjbcGDnOhsJmr8hO7LRvBu4V/sNalTIU6RBh6Jrts38i4GTzfts3QMAAAA=", - "headers": [ - [ - "content-type", - "font/woff2" - ] - ], - "ok": true, - "status": 200, - "status_text": "" - }, - "https://localhost:6006/font-roboto/vPcynSL0qHq_6dX7lKVByXYhjbSpvc47ee6xR_80Hnw.woff2": { - "data": "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", - "headers": [ - [ - "content-type", - "font/woff2" - ] - ], - "ok": true, - "status": 200, - "status_text": "" - }, - "https://localhost:6006/icon_bundle.svg": { - "data": "PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmc+PGRlZnM+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iYXJyb3dfZG93bndhcmRfMjRweCI+PHBhdGggZmlsbD0iIzAxMDEwMSIgZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJhcnJvd191cHdhcmRfMjRweCI+PHBhdGggZD0iTTQgMTJsMS40MSAxLjQxTDExIDcuODNWMjBoMlY3LjgzbDUuNTggNS41OUwyMCAxMmwtOC04LTggOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJicmlnaHRuZXNzXzZfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJidWdfcmVwb3J0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMjAgOGgtMi44MWMtLjQ1LS43OC0xLjA3LTEuNDUtMS44Mi0xLjk2TDE3IDQuNDEgMTUuNTkgM2wtMi4xNyAyLjE3QzEyLjk2IDUuMDYgMTIuNDkgNSAxMiA1Yy0uNDkgMC0uOTYuMDYtMS40MS4xN0w4LjQxIDMgNyA0LjQxbDEuNjIgMS42M0M3Ljg4IDYuNTUgNy4yNiA3LjIyIDYuODEgOEg0djJoMi4wOWMtLjA1LjMzLS4wOS42Ni0uMDkgMXYxSDR2MmgydjFjMCAuMzQuMDQuNjcuMDkgMUg0djJoMi44MWMxLjA0IDEuNzkgMi45NyAzIDUuMTkgM3M0LjE1LTEuMjEgNS4xOS0zSDIwdi0yaC0yLjA5Yy4wNS0uMzMuMDktLjY2LjA5LTF2LTFoMnYtMmgtMnYtMWMwLS4zNC0uMDQtLjY3LS4wOS0xSDIwVjh6bS02IDhoLTR2LTJoNHYyem0wLTRoLTR2LTJoNHYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNhbmNlbF8yNHB4Ij48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptNSAxMy41OUwxNS41OSAxNyAxMiAxMy40MSA4LjQxIDE3IDcgMTUuNTkgMTAuNTkgMTIgNyA4LjQxIDguNDEgNyAxMiAxMC41OSAxNS41OSA3IDE3IDguNDEgMTMuNDEgMTIgMTcgMTUuNTl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2hldnJvbl9sZWZ0XzI0cHgiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNoZXZyb25fcmlnaHRfMjRweCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNsZWFyXzI0cHgiPjxwYXRoIGQ9Ik0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iY2xvc2VfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY29udGVudF9jb3B5XzI0cHgiPjxwYXRoIGQ9Ik0xNiAxSDRjLTEuMSAwLTIgLjktMiAydjE0aDJWM2gxMlYxem0zIDRIOGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxMWMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDE2SDhWN2gxMXYxNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZGFya19tb2RlXzI0cHgiPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjxwYXRoIGQ9Ik0xMiwzYy00Ljk3LDAtOSw0LjAzLTksOXM0LjAzLDksOSw5czktNC4wMyw5LTljMC0wLjQ2LTAuMDQtMC45Mi0wLjEtMS4zNmMtMC45OCwxLjM3LTIuNTgsMi4yNi00LjQsMi4yNiBjLTIuOTgsMC01LjQtMi40Mi01LjQtNS40YzAtMS44MSwwLjg5LTMuNDIsMi4yNi00LjRDMTIuOTIsMy4wNCwxMi40NiwzLDEyLDNMMTIsM3oiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJkb25lXzI0cHgiPjxwYXRoIGQ9Ik05IDE2LjJMNC44IDEybC0xLjQgMS40TDkgMTkgMjEgN2wtMS40LTEuNEw5IDE2LjJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZHJhZ19pbmRpY2F0b3JfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTExIDE4YzAgMS4xLS45IDItMiAycy0yLS45LTItMiAuOS0yIDItMiAyIC45IDIgMnptLTItOGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAtNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTYgNGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTAgMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZWRpdF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJlcnJvcl8yNHB4Ij48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2NnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJleHBhbmRfbGVzc18yNHB4Ij48cGF0aCBkPSJNMTIgOGwtNiA2IDEuNDEgMS40MUwxMiAxMC44M2w0LjU5IDQuNThMMTggMTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZXhwYW5kX21vcmVfMjRweCI+PHBhdGggZD0iTTE2LjU5IDguNTlMMTIgMTMuMTcgNy40MSA4LjU5IDYgMTBsNiA2IDYtNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZmlsdGVyX2FsdF8yNHB4Ij48Zz48cGF0aCBkPSJNMCwwaDI0IE0yNCwyNEgwIiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTQuMjUsNS42MUM2LjI3LDguMiwxMCwxMywxMCwxM3Y2YzAsMC41NSwwLjQ1LDEsMSwxaDJjMC41NSwwLDEtMC40NSwxLTF2LTZjMCwwLDMuNzItNC44LDUuNzQtNy4zOSBDMjAuMjUsNC45NSwxOS43OCw0LDE4Ljk1LDRINS4wNEM0LjIxLDQsMy43NCw0Ljk1LDQuMjUsNS42MXoiLz48cGF0aCBkPSJNMCwwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZmxhZ18yNHB4Ij48cGF0aCBkPSJNMTQuNCA2TDE0IDRINXYxN2gydi03aDUuNmwuNCAyaDdWNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJmdWxsc2NyZWVuXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNyAxNEg1djVoNXYtMkg3di0zem0tMi00aDJWN2gzVjVINXY1em0xMiA3aC0zdjJoNXYtNWgtMnYzek0xNCA1djJoM3YzaDJWNWgtNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJmdWxsc2NyZWVuX2V4aXRfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik01IDE2aDN2M2gydi01SDV2MnptMy04SDV2Mmg1VjVIOHYzem02IDExaDJ2LTNoM3YtMmgtNXY1em0yLTExVjVoLTJ2NWg1VjhoLTN6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZ2V0X2FwcF8yNHB4Ij48cGF0aCBkPSJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9Imdyb3VwX3dvcmtfMjRweCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTggMTcuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6TTkuNSA4YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNVM5LjUgOS4zOCA5LjUgOHptNi41IDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iaGVscF9vdXRsaW5lXzI0cHgiPjxwYXRoIGQ9Ik0xMSAxOGgydi0yaC0ydjJ6bTEtMTZDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4em0wLTE0Yy0yLjIxIDAtNCAxLjc5LTQgNGgyYzAtMS4xLjktMiAyLTJzMiAuOSAyIDJjMCAyLTMgMS43NS0zIDVoMmMwLTIuMjUgMy0yLjUgMy01IDAtMi4yMS0xLjc5LTQtNC00eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImltYWdlX3NlYXJjaF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE4IDEzdjdINFY2aDUuMDJjLjA1LS43MS4yMi0xLjM4LjQ4LTJINGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtNWwtMi0yem0tMS41IDVoLTExbDIuNzUtMy41MyAxLjk2IDIuMzYgMi43NS0zLjU0em0yLjgtOS4xMWMuNDQtLjcuNy0xLjUxLjctMi4zOUMyMCA0LjAxIDE3Ljk5IDIgMTUuNSAyUzExIDQuMDEgMTEgNi41czIuMDEgNC41IDQuNDkgNC41Yy44OCAwIDEuNy0uMjYgMi4zOS0uN0wyMSAxMy40MiAyMi40MiAxMiAxOS4zIDguODl6TTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41UzE0LjEyIDQgMTUuNSA0IDE4IDUuMTIgMTggNi41IDE2Ljg4IDkgMTUuNSA5eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImluZm9fb3V0bGluZV8yNHB4Ij48cGF0aCBkPSJNMTEgMTdoMnYtNmgtMnY2em0xLTE1QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHpNMTEgOWgyVjdoLTJ2MnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ia2VlcF8yNHB4Ij48Zz48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiLz48L2c+PGc+PHBhdGggZD0iTTE2LDlWNGwxLDBjMC41NSwwLDEtMC40NSwxLTF2MGMwLTAuNTUtMC40NS0xLTEtMUg3QzYuNDUsMiw2LDIuNDUsNiwzdjAgYzAsMC41NSwwLjQ1LDEsMSwxbDEsMHY1YzAsMS42Ni0xLjM0LDMtMywzaDB2Mmg1Ljk3djdsMSwxbDEtMXYtN0gxOXYtMmgwQzE3LjM0LDEyLDE2LDEwLjY2LDE2LDl6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImtlZXBfb3V0bGluZV8yNHB4Ij48Zz48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiLz48L2c+PGc+PHBhdGggZD0iTTE0LDR2NWMwLDEuMTIsMC4zNywyLjE2LDEsM0g5YzAuNjUtMC44NiwxLTEuOSwxLTNWNEgxNCBNMTcsMkg3QzYuNDUsMiw2LDIuNDUsNiwzYzAsMC41NSwwLjQ1LDEsMSwxYzAsMCwwLDAsMCwwbDEsMHY1IGMwLDEuNjYtMS4zNCwzLTMsM3YyaDUuOTd2N2wxLDFsMS0xdi03SDE5di0yYzAsMCwwLDAsMCwwYy0xLjY2LDAtMy0xLjM0LTMtM1Y0bDEsMGMwLDAsMCwwLDAsMGMwLjU1LDAsMS0wLjQ1LDEtMSBDMTgsMi40NSwxNy41NSwyLDE3LDJMMTcsMnoiLz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImxpZ2h0X21vZGVfMjRweCI+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PHBhdGggZD0iTTEyLDdjLTIuNzYsMC01LDIuMjQtNSw1czIuMjQsNSw1LDVzNS0yLjI0LDUtNVMxNC43Niw3LDEyLDdMMTIsN3ogTTIsMTNsMiwwYzAuNTUsMCwxLTAuNDUsMS0xcy0wLjQ1LTEtMS0xbC0yLDAgYy0wLjU1LDAtMSwwLjQ1LTEsMVMxLjQ1LDEzLDIsMTN6IE0yMCwxM2wyLDBjMC41NSwwLDEtMC40NSwxLTFzLTAuNDUtMS0xLTFsLTIsMGMtMC41NSwwLTEsMC40NS0xLDFTMTkuNDUsMTMsMjAsMTN6IE0xMSwydjIgYzAsMC41NSwwLjQ1LDEsMSwxczEtMC40NSwxLTFWMmMwLTAuNTUtMC40NS0xLTEtMVMxMSwxLjQ1LDExLDJ6IE0xMSwyMHYyYzAsMC41NSwwLjQ1LDEsMSwxczEtMC40NSwxLTF2LTJjMC0wLjU1LTAuNDUtMS0xLTEgQzExLjQ1LDE5LDExLDE5LjQ1LDExLDIweiBNNS45OSw0LjU4Yy0wLjM5LTAuMzktMS4wMy0wLjM5LTEuNDEsMGMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDFsMS4wNiwxLjA2IGMwLjM5LDAuMzksMS4wMywwLjM5LDEuNDEsMHMwLjM5LTEuMDMsMC0xLjQxTDUuOTksNC41OHogTTE4LjM2LDE2Ljk1Yy0wLjM5LTAuMzktMS4wMy0wLjM5LTEuNDEsMGMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDEgbDEuMDYsMS4wNmMwLjM5LDAuMzksMS4wMywwLjM5LDEuNDEsMGMwLjM5LTAuMzksMC4zOS0xLjAzLDAtMS40MUwxOC4zNiwxNi45NXogTTE5LjQyLDUuOTljMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDEgYy0wLjM5LTAuMzktMS4wMy0wLjM5LTEuNDEsMGwtMS4wNiwxLjA2Yy0wLjM5LDAuMzktMC4zOSwxLjAzLDAsMS40MXMxLjAzLDAuMzksMS40MSwwTDE5LjQyLDUuOTl6IE03LjA1LDE4LjM2IGMwLjM5LTAuMzksMC4zOS0xLjAzLDAtMS40MWMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBsLTEuMDYsMS4wNmMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDFzMS4wMywwLjM5LDEuNDEsMEw3LjA1LDE4LjM2eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJsaW5lX3dlaWdodF8yNHB4Ij48Zz48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiIHg9IjAiLz48L2c+PGc+PGc+PGc+PHBhdGggZD0iTTMsMTdoMTh2LTJIM1YxN3ogTTMsMjBoMTh2LTFIM1YyMHogTTMsMTNoMTh2LTNIM1YxM3ogTTMsNHY0aDE4VjRIM3oiLz48L2c+PC9nPjwvZz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJtb3JlX3ZlcnRfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptMCAyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA2Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJub3RpZmljYXRpb25zX25vbmVfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMiAyMmMxLjEgMCAyLS45IDItMmgtNGMwIDEuMS45IDIgMiAyem02LTZ2LTVjMC0zLjA3LTEuNjMtNS42NC00LjUtNi4zMlY0YzAtLjgzLS42Ny0xLjUtMS41LTEuNXMtMS41LjY3LTEuNSAxLjV2LjY4QzcuNjQgNS4zNiA2IDcuOTIgNiAxMXY1bC0yIDJ2MWgxNnYtMWwtMi0yem0tMiAxSDh2LTZjMC0yLjQ4IDEuNTEtNC41IDQtNC41czQgMi4wMiA0IDQuNXY2eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InBhbGV0dGVfMjRweCI+PHBhdGggZD0iTTEyIDNjLTQuOTcgMC05IDQuMDMtOSA5czQuMDMgOSA5IDljLjgzIDAgMS41LS42NyAxLjUtMS41IDAtLjM5LS4xNS0uNzQtLjM5LTEuMDEtLjIzLS4yNi0uMzgtLjYxLS4zOC0uOTkgMC0uODMuNjctMS41IDEuNS0xLjVIMTZjMi43NiAwIDUtMi4yNCA1LTUgMC00LjQyLTQuMDMtOC05LTh6bS01LjUgOWMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzUuNjcgOSA2LjUgOSA4IDkuNjcgOCAxMC41IDcuMzMgMTIgNi41IDEyem0zLTRDOC42NyA4IDggNy4zMyA4IDYuNVM4LjY3IDUgOS41IDVzMS41LjY3IDEuNSAxLjVTMTAuMzMgOCA5LjUgOHptNSAwYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTMuNjcgNSAxNC41IDVzMS41LjY3IDEuNSAxLjVTMTUuMzMgOCAxNC41IDh6bTMgNGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzE2LjY3IDkgMTcuNSA5czEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJyZWZyZXNoXzI0cHgiPjxwYXRoIGQ9Ik0xNy42NSA2LjM1QzE2LjIgNC45IDE0LjIxIDQgMTIgNGMtNC40MiAwLTcuOTkgMy41OC03Ljk5IDhzMy41NyA4IDcuOTkgOGMzLjczIDAgNi44NC0yLjU1IDcuNzMtNmgtMi4wOGMtLjgyIDIuMzMtMy4wNCA0LTUuNjUgNC0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02YzEuNjYgMCAzLjE0LjY5IDQuMjIgMS43OEwxMyAxMWg3VjRsLTIuMzUgMi4zNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJzZWFyY2hfMjRweCI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0ic2V0dGluZ3NfMjRweCI+PHBhdGggZD0iTTE5LjQzIDEyLjk4Yy4wNC0uMzIuMDctLjY0LjA3LS45OHMtLjAzLS42Ni0uMDctLjk4bDIuMTEtMS42NWMuMTktLjE1LjI0LS40Mi4xMi0uNjRsLTItMy40NmMtLjEyLS4yMi0uMzktLjMtLjYxLS4yMmwtMi40OSAxYy0uNTItLjQtMS4wOC0uNzMtMS42OS0uOThsLS4zOC0yLjY1QzE0LjQ2IDIuMTggMTQuMjUgMiAxNCAyaC00Yy0uMjUgMC0uNDYuMTgtLjQ5LjQybC0uMzggMi42NWMtLjYxLjI1LTEuMTcuNTktMS42OS45OGwtMi40OS0xYy0uMjMtLjA5LS40OSAwLS42MS4yMmwtMiAzLjQ2Yy0uMTMuMjItLjA3LjQ5LjEyLjY0bDIuMTEgMS42NWMtLjA0LjMyLS4wNy42NS0uMDcuOThzLjAzLjY2LjA3Ljk4bC0yLjExIDEuNjVjLS4xOS4xNS0uMjQuNDItLjEyLjY0bDIgMy40NmMuMTIuMjIuMzkuMy42MS4yMmwyLjQ5LTFjLjUyLjQgMS4wOC43MyAxLjY5Ljk4bC4zOCAyLjY1Yy4wMy4yNC4yNC40Mi40OS40Mmg0Yy4yNSAwIC40Ni0uMTguNDktLjQybC4zOC0yLjY1Yy42MS0uMjUgMS4xNy0uNTkgMS42OS0uOThsMi40OSAxYy4yMy4wOS40OSAwIC42MS0uMjJsMi0zLjQ2Yy4xMi0uMjIuMDctLjQ5LS4xMi0uNjRsLTIuMTEtMS42NXpNMTIgMTUuNWMtMS45MyAwLTMuNS0xLjU3LTMuNS0zLjVzMS41Ny0zLjUgMy41LTMuNSAzLjUgMS41NyAzLjUgMy41LTEuNTcgMy41LTMuNSAzLjV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ic2V0dGluZ3NfYmFja3VwX3Jlc3RvcmVfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xNCAxMmMwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDIgLjkgMiAyIDIgMi0uOSAyLTJ6bS0yLTljLTQuOTcgMC05IDQuMDMtOSA5SDBsNCA0IDQtNEg1YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS41MSAwLTIuOTEtLjQ5LTQuMDYtMS4zbC0xLjQyIDEuNDRDOC4wNCAyMC4zIDkuOTQgMjEgMTIgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ic2V0dGluZ3Nfb3ZlcnNjYW5fMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMi4wMSA1LjVMMTAgOGg0bC0xLjk5LTIuNXpNMTggMTB2NGwyLjUtMS45OUwxOCAxMHpNNiAxMGwtMi41IDIuMDFMNiAxNHYtNHptOCA2aC00bDIuMDEgMi41TDE0IDE2em03LTEzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOTloMTh2MTQuMDJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0idmlzaWJpbGl0eV9vZmZfMjRweCI+PHBhdGggZD0iTTEyIDdjMi43NiAwIDUgMi4yNCA1IDUgMCAuNjUtLjEzIDEuMjYtLjM2IDEuODNsMi45MiAyLjkyYzEuNTEtMS4yNiAyLjctMi44OSAzLjQzLTQuNzUtMS43My00LjM5LTYtNy41LTExLTcuNS0xLjQgMC0yLjc0LjI1LTMuOTguN2wyLjE2IDIuMTZDMTAuNzQgNy4xMyAxMS4zNSA3IDEyIDd6TTIgNC4yN2wyLjI4IDIuMjguNDYuNDZDMy4wOCA4LjMgMS43OCAxMC4wMiAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjUgMS41NSAwIDMuMDMtLjMgNC4zOC0uODRsLjQyLjQyTDE5LjczIDIyIDIxIDIwLjczIDMuMjcgMyAyIDQuMjd6TTcuNTMgOS44bDEuNTUgMS41NWMtLjA1LjIxLS4wOC40My0uMDguNjUgMCAxLjY2IDEuMzQgMyAzIDMgLjIyIDAgLjQ0LS4wMy42NS0uMDhsMS41NSAxLjU1Yy0uNjcuMzMtMS40MS41My0yLjIuNTMtMi43NiAwLTUtMi4yNC01LTUgMC0uNzkuMi0xLjUzLjUzLTIuMnptNC4zMS0uNzhsMy4xNSAzLjE1LjAyLS4xNmMwLTEuNjYtMS4zNC0zLTMtM2wtLjE3LjAxeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9Indhcm5pbmdfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xIDIxaDIyTDEyIDIgMSAyMXptMTItM2gtMnYtMmgydjJ6bTAtNGgtMnYtNGgydjR6Ii8+PC9zdmc+PC9kZWZzPjwvc3ZnPgo=", - "headers": [ - [ - "content-type", - "image/svg+xml; charset=utf-8" - ] - ], - "ok": true, - "status": 200, - "status_text": "" - }, - "https://localhost:6006/index.js?_file_hash=29a7d03a": { - "data": "dmFyIENMT1NVUkVfTk9fREVQUyA9IHRydWU7CndpbmRvdy5wb2x5bWVyU2tpcExvYWRpbmdGb250Um9ib3RvID0gdHJ1ZTsKLyoqIHZpbTogZXQ6dHM9NDpzdz00OnN0cz00CiAqIEBsaWNlbnNlIFJlcXVpcmVKUyAyLjMuNiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycy4KICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UsIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICovCi8vTm90IHVzaW5nIHN0cmljdDogdW5ldmVuIHN0cmljdCBzdXBwb3J0IGluIGJyb3dzZXJzLCAjMzkyLCBhbmQgY2F1c2VzCi8vcHJvYmxlbXMgd2l0aCByZXF1aXJlanMuZXhlYygpL3RyYW5zcGlsZXIgcGx1Z2lucyB0aGF0IG1heSBub3QgYmUgc3RyaWN0LgovKmpzbGludCByZWdleHA6IHRydWUsIG5vbWVuOiB0cnVlLCBzbG9wcHk6IHRydWUgKi8KLypnbG9iYWwgd2luZG93LCBuYXZpZ2F0b3IsIGRvY3VtZW50LCBpbXBvcnRTY3JpcHRzLCBzZXRUaW1lb3V0LCBvcGVyYSAqLwoKdmFyIHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOwooZnVuY3Rpb24gKGdsb2JhbCwgc2V0VGltZW91dCkgewogICAgdmFyIHJlcSwgcywgaGVhZCwgYmFzZUVsZW1lbnQsIGRhdGFNYWluLCBzcmMsCiAgICAgICAgaW50ZXJhY3RpdmVTY3JpcHQsIGN1cnJlbnRseUFkZGluZ1NjcmlwdCwgbWFpblNjcmlwdCwgc3ViUGF0aCwKICAgICAgICB2ZXJzaW9uID0gJzIuMy42JywKICAgICAgICBjb21tZW50UmVnRXhwID0gL1wvXCpbXHNcU10qP1wqXC98KFteOiInPV18XilcL1wvLiokL21nLAogICAgICAgIGNqc1JlcXVpcmVSZWdFeHAgPSAvW14uXVxzKnJlcXVpcmVccypcKFxzKlsiJ10oW14nIlxzXSspWyInXVxzKlwpL2csCiAgICAgICAganNTdWZmaXhSZWdFeHAgPSAvXC5qcyQvLAogICAgICAgIGN1cnJEaXJSZWdFeHAgPSAvXlwuXC8vLAogICAgICAgIG9wID0gT2JqZWN0LnByb3RvdHlwZSwKICAgICAgICBvc3RyaW5nID0gb3AudG9TdHJpbmcsCiAgICAgICAgaGFzT3duID0gb3AuaGFzT3duUHJvcGVydHksCiAgICAgICAgaXNCcm93c2VyID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRvY3VtZW50KSwKICAgICAgICBpc1dlYldvcmtlciA9ICFpc0Jyb3dzZXIgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRlZmluZWQnLAogICAgICAgIC8vUFMzIGluZGljYXRlcyBsb2FkZWQgYW5kIGNvbXBsZXRlLCBidXQgbmVlZCB0byB3YWl0IGZvciBjb21wbGV0ZQogICAgICAgIC8vc3BlY2lmaWNhbGx5LiBTZXF1ZW5jZSBpcyAnbG9hZGluZycsICdsb2FkZWQnLCBleGVjdXRpb24sCiAgICAgICAgLy8gdGhlbiAnY29tcGxldGUnLiBUaGUgVUEgY2hlY2sgaXMgdW5mb3J0dW5hdGUsIGJ1dCBub3Qgc3VyZSBob3cKICAgICAgICAvL3RvIGZlYXR1cmUgdGVzdCB3L28gY2F1c2luZyBwZXJmIGlzc3Vlcy4KICAgICAgICByZWFkeVJlZ0V4cCA9IGlzQnJvd3NlciAmJiBuYXZpZ2F0b3IucGxhdGZvcm0gPT09ICdQTEFZU1RBVElPTiAzJyA/CiAgICAgICAgICAgICAgICAgICAgICAvXmNvbXBsZXRlJC8gOiAvXihjb21wbGV0ZXxsb2FkZWQpJC8sCiAgICAgICAgZGVmQ29udGV4dE5hbWUgPSAnXycsCiAgICAgICAgLy9PaCB0aGUgdHJhZ2VkeSwgZGV0ZWN0aW5nIG9wZXJhLiBTZWUgdGhlIHVzYWdlIG9mIGlzT3BlcmEgZm9yIHJlYXNvbi4KICAgICAgICBpc09wZXJhID0gdHlwZW9mIG9wZXJhICE9PSAndW5kZWZpbmVkJyAmJiBvcGVyYS50b1N0cmluZygpID09PSAnW29iamVjdCBPcGVyYV0nLAogICAgICAgIGNvbnRleHRzID0ge30sCiAgICAgICAgY2ZnID0ge30sCiAgICAgICAgZ2xvYmFsRGVmUXVldWUgPSBbXSwKICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IGZhbHNlOwoKICAgIC8vQ291bGQgbWF0Y2ggc29tZXRoaW5nIGxpa2UgJykvL2NvbW1lbnQnLCBkbyBub3QgbG9zZSB0aGUgcHJlZml4IHRvIGNvbW1lbnQuCiAgICBmdW5jdGlvbiBjb21tZW50UmVwbGFjZShtYXRjaCwgc2luZ2xlUHJlZml4KSB7CiAgICAgICAgcmV0dXJuIHNpbmdsZVByZWZpeCB8fCAnJzsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGl0KSB7CiAgICAgICAgcmV0dXJuIG9zdHJpbmcuY2FsbChpdCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7CiAgICB9CgogICAgZnVuY3Rpb24gaXNBcnJheShpdCkgewogICAgICAgIHJldHVybiBvc3RyaW5nLmNhbGwoaXQpID09PSAnW29iamVjdCBBcnJheV0nOwogICAgfQoKICAgIC8qKgogICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheS4gSWYgdGhlIGZ1bmMgcmV0dXJucwogICAgICogYSB0cnVlIHZhbHVlLCBpdCB3aWxsIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KICAgICAqLwogICAgZnVuY3Rpb24gZWFjaChhcnksIGZ1bmMpIHsKICAgICAgICBpZiAoYXJ5KSB7CiAgICAgICAgICAgIHZhciBpOwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJ5Lmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoYXJ5W2ldICYmIGZ1bmMoYXJ5W2ldLCBpLCBhcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGl0ZXJhdGluZyBvdmVyIGFuIGFycmF5IGJhY2t3YXJkcy4gSWYgdGhlIGZ1bmMKICAgICAqIHJldHVybnMgYSB0cnVlIHZhbHVlLCBpdCB3aWxsIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KICAgICAqLwogICAgZnVuY3Rpb24gZWFjaFJldmVyc2UoYXJ5LCBmdW5jKSB7CiAgICAgICAgaWYgKGFyeSkgewogICAgICAgICAgICB2YXIgaTsKICAgICAgICAgICAgZm9yIChpID0gYXJ5Lmxlbmd0aCAtIDE7IGkgPiAtMTsgaSAtPSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoYXJ5W2ldICYmIGZ1bmMoYXJ5W2ldLCBpLCBhcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gaGFzUHJvcChvYmosIHByb3ApIHsKICAgICAgICByZXR1cm4gaGFzT3duLmNhbGwob2JqLCBwcm9wKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRPd24ob2JqLCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIGhhc1Byb3Aob2JqLCBwcm9wKSAmJiBvYmpbcHJvcF07CiAgICB9CgogICAgLyoqCiAgICAgKiBDeWNsZXMgb3ZlciBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdCBhbmQgY2FsbHMgYSBmdW5jdGlvbiBmb3IgZWFjaAogICAgICogcHJvcGVydHkgdmFsdWUuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLCB0aGVuIHRoZQogICAgICogaXRlcmF0aW9uIGlzIHN0b3BwZWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhY2hQcm9wKG9iaiwgZnVuYykgewogICAgICAgIHZhciBwcm9wOwogICAgICAgIGZvciAocHJvcCBpbiBvYmopIHsKICAgICAgICAgICAgaWYgKGhhc1Byb3Aob2JqLCBwcm9wKSkgewogICAgICAgICAgICAgICAgaWYgKGZ1bmMob2JqW3Byb3BdLCBwcm9wKSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogU2ltcGxlIGZ1bmN0aW9uIHRvIG1peCBpbiBwcm9wZXJ0aWVzIGZyb20gc291cmNlIGludG8gdGFyZ2V0LAogICAgICogYnV0IG9ubHkgaWYgdGFyZ2V0IGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhIHByb3BlcnR5IG9mIHRoZSBzYW1lIG5hbWUuCiAgICAgKi8KICAgIGZ1bmN0aW9uIG1peGluKHRhcmdldCwgc291cmNlLCBmb3JjZSwgZGVlcFN0cmluZ01peGluKSB7CiAgICAgICAgaWYgKHNvdXJjZSkgewogICAgICAgICAgICBlYWNoUHJvcChzb3VyY2UsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlIHx8ICFoYXNQcm9wKHRhcmdldCwgcHJvcCkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGVlcFN0cmluZ01peGluICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIWlzQXJyYXkodmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRbcHJvcF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1peGluKHRhcmdldFtwcm9wXSwgdmFsdWUsIGZvcmNlLCBkZWVwU3RyaW5nTWl4aW4pOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9CgogICAgLy9TaW1pbGFyIHRvIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLCBidXQgdGhlICd0aGlzJyBvYmplY3QgaXMgc3BlY2lmaWVkCiAgICAvL2ZpcnN0LCBzaW5jZSBpdCBpcyBlYXNpZXIgdG8gcmVhZC9maWd1cmUgb3V0IHdoYXQgJ3RoaXMnIHdpbGwgYmUuCiAgICBmdW5jdGlvbiBiaW5kKG9iaiwgZm4pIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkob2JqLCBhcmd1bWVudHMpOwogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gc2NyaXB0cygpIHsKICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlZmF1bHRPbkVycm9yKGVycikgewogICAgICAgIHRocm93IGVycjsKICAgIH0KCiAgICAvL0FsbG93IGdldHRpbmcgYSBnbG9iYWwgdGhhdCBpcyBleHByZXNzZWQgaW4KICAgIC8vZG90IG5vdGF0aW9uLCBsaWtlICdhLmIuYycuCiAgICBmdW5jdGlvbiBnZXRHbG9iYWwodmFsdWUpIHsKICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9CiAgICAgICAgdmFyIGcgPSBnbG9iYWw7CiAgICAgICAgZWFjaCh2YWx1ZS5zcGxpdCgnLicpLCBmdW5jdGlvbiAocGFydCkgewogICAgICAgICAgICBnID0gZ1twYXJ0XTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZzsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYW4gZXJyb3Igd2l0aCBhIHBvaW50ZXIgdG8gYW4gVVJMIHdpdGggbW9yZSBpbmZvcm1hdGlvbi4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZXJyb3IgSUQgdGhhdCBtYXBzIHRvIGFuIElEIG9uIGEgd2ViIHBhZ2UuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBodW1hbiByZWFkYWJsZSBlcnJvci4KICAgICAqIEBwYXJhbSB7RXJyb3J9IFtlcnJdIHRoZSBvcmlnaW5hbCBlcnJvciwgaWYgdGhlcmUgaXMgb25lLgogICAgICoKICAgICAqIEByZXR1cm5zIHtFcnJvcn0KICAgICAqLwogICAgZnVuY3Rpb24gbWFrZUVycm9yKGlkLCBtc2csIGVyciwgcmVxdWlyZU1vZHVsZXMpIHsKICAgICAgICB2YXIgZSA9IG5ldyBFcnJvcihtc2cgKyAnXG5odHRwczovL3JlcXVpcmVqcy5vcmcvZG9jcy9lcnJvcnMuaHRtbCMnICsgaWQpOwogICAgICAgIGUucmVxdWlyZVR5cGUgPSBpZDsKICAgICAgICBlLnJlcXVpcmVNb2R1bGVzID0gcmVxdWlyZU1vZHVsZXM7CiAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICBlLm9yaWdpbmFsRXJyb3IgPSBlcnI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBlOwogICAgfQoKICAgIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIC8vSWYgYSBkZWZpbmUgaXMgYWxyZWFkeSBpbiBwbGF5IHZpYSBhbm90aGVyIEFNRCBsb2FkZXIsCiAgICAgICAgLy9kbyBub3Qgb3ZlcndyaXRlLgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodHlwZW9mIHJlcXVpcmVqcyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXF1aXJlanMpKSB7CiAgICAgICAgICAgIC8vRG8gbm90IG92ZXJ3cml0ZSBhbiBleGlzdGluZyByZXF1aXJlanMgaW5zdGFuY2UuCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY2ZnID0gcmVxdWlyZWpzOwogICAgICAgIHJlcXVpcmVqcyA9IHVuZGVmaW5lZDsKICAgIH0KCiAgICAvL0FsbG93IGZvciBhIHJlcXVpcmUgY29uZmlnIG9iamVjdAogICAgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyAmJiAhaXNGdW5jdGlvbihyZXF1aXJlKSkgewogICAgICAgIC8vYXNzdW1lIGl0IGlzIGEgY29uZmlnIG9iamVjdC4KICAgICAgICBjZmcgPSByZXF1aXJlOwogICAgICAgIHJlcXVpcmUgPSB1bmRlZmluZWQ7CiAgICB9CgogICAgZnVuY3Rpb24gbmV3Q29udGV4dChjb250ZXh0TmFtZSkgewogICAgICAgIHZhciBpbkNoZWNrTG9hZGVkLCBNb2R1bGUsIGNvbnRleHQsIGhhbmRsZXJzLAogICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCwKICAgICAgICAgICAgY29uZmlnID0gewogICAgICAgICAgICAgICAgLy9EZWZhdWx0cy4gRG8gbm90IHNldCBhIGRlZmF1bHQgZm9yIG1hcAogICAgICAgICAgICAgICAgLy9jb25maWcgdG8gc3BlZWQgdXAgbm9ybWFsaXplKCksIHdoaWNoCiAgICAgICAgICAgICAgICAvL3dpbGwgcnVuIGZhc3RlciBpZiB0aGVyZSBpcyBubyBkZWZhdWx0LgogICAgICAgICAgICAgICAgd2FpdFNlY29uZHM6IDcsCiAgICAgICAgICAgICAgICBiYXNlVXJsOiAnLi8nLAogICAgICAgICAgICAgICAgcGF0aHM6IHt9LAogICAgICAgICAgICAgICAgYnVuZGxlczoge30sCiAgICAgICAgICAgICAgICBwa2dzOiB7fSwKICAgICAgICAgICAgICAgIHNoaW06IHt9LAogICAgICAgICAgICAgICAgY29uZmlnOiB7fQogICAgICAgICAgICB9LAogICAgICAgICAgICByZWdpc3RyeSA9IHt9LAogICAgICAgICAgICAvL3JlZ2lzdHJ5IG9mIGp1c3QgZW5hYmxlZCBtb2R1bGVzLCB0byBzcGVlZAogICAgICAgICAgICAvL2N5Y2xlIGJyZWFraW5nIGNvZGUgd2hlbiBsb3RzIG9mIG1vZHVsZXMKICAgICAgICAgICAgLy9hcmUgcmVnaXN0ZXJlZCwgYnV0IG5vdCBhY3RpdmF0ZWQuCiAgICAgICAgICAgIGVuYWJsZWRSZWdpc3RyeSA9IHt9LAogICAgICAgICAgICB1bmRlZkV2ZW50cyA9IHt9LAogICAgICAgICAgICBkZWZRdWV1ZSA9IFtdLAogICAgICAgICAgICBkZWZpbmVkID0ge30sCiAgICAgICAgICAgIHVybEZldGNoZWQgPSB7fSwKICAgICAgICAgICAgYnVuZGxlc01hcCA9IHt9LAogICAgICAgICAgICByZXF1aXJlQ291bnRlciA9IDEsCiAgICAgICAgICAgIHVubm9ybWFsaXplZENvdW50ZXIgPSAxOwoKICAgICAgICAvKioKICAgICAgICAgKiBUcmltcyB0aGUgLiBhbmQgLi4gZnJvbSBhbiBhcnJheSBvZiBwYXRoIHNlZ21lbnRzLgogICAgICAgICAqIEl0IHdpbGwga2VlcCBhIGxlYWRpbmcgcGF0aCBzZWdtZW50IGlmIGEgLi4gd2lsbCBiZWNvbWUKICAgICAgICAgKiB0aGUgZmlyc3QgcGF0aCBzZWdtZW50LCB0byBoZWxwIHdpdGggbW9kdWxlIG5hbWUgbG9va3VwcywKICAgICAgICAgKiB3aGljaCBhY3QgbGlrZSBwYXRocywgYnV0IGNhbiBiZSByZW1hcHBlZC4gQnV0IHRoZSBlbmQgcmVzdWx0LAogICAgICAgICAqIGFsbCBwYXRocyB0aGF0IHVzZSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBsb29rIG5vcm1hbGl6ZWQuCiAgICAgICAgICogTk9URTogdGhpcyBtZXRob2QgTU9ESUZJRVMgdGhlIGlucHV0IGFycmF5LgogICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyeSB0aGUgYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiB0cmltRG90cyhhcnkpIHsKICAgICAgICAgICAgdmFyIGksIHBhcnQ7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnkubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHBhcnQgPSBhcnlbaV07CiAgICAgICAgICAgICAgICBpZiAocGFydCA9PT0gJy4nKSB7CiAgICAgICAgICAgICAgICAgICAgYXJ5LnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgICAgICBpIC09IDE7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHsKICAgICAgICAgICAgICAgICAgICAvLyBJZiBhdCB0aGUgc3RhcnQsIG9yIHByZXZpb3VzIHZhbHVlIGlzIHN0aWxsIC4uLAogICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhlbSBzbyB0aGF0IHdoZW4gY29udmVydGVkIHRvIGEgcGF0aCBpdCBtYXkKICAgICAgICAgICAgICAgICAgICAvLyBzdGlsbCB3b3JrIHdoZW4gY29udmVydGVkIHRvIGEgcGF0aCwgZXZlbiB0aG91Z2gKICAgICAgICAgICAgICAgICAgICAvLyBhcyBhbiBJRCBpdCBpcyBsZXNzIHRoYW4gaWRlYWwuIEluIGxhcmdlciBwb2ludAogICAgICAgICAgICAgICAgICAgIC8vIHJlbGVhc2VzLCBtYXkgYmUgYmV0dGVyIHRvIGp1c3Qga2ljayBvdXQgYW4gZXJyb3IuCiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgKGkgPT09IDEgJiYgYXJ5WzJdID09PSAnLi4nKSB8fCBhcnlbaSAtIDFdID09PSAnLi4nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJ5LnNwbGljZShpIC0gMSwgMik7CiAgICAgICAgICAgICAgICAgICAgICAgIGkgLT0gMjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEdpdmVuIGEgcmVsYXRpdmUgbW9kdWxlIG5hbWUsIGxpa2UgLi9zb21ldGhpbmcsIG5vcm1hbGl6ZSBpdCB0bwogICAgICAgICAqIGEgcmVhbCBuYW1lIHRoYXQgY2FuIGJlIG1hcHBlZCB0byBhIHBhdGguCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIHJlbGF0aXZlIG5hbWUKICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYmFzZU5hbWUgYSByZWFsIG5hbWUgdGhhdCB0aGUgbmFtZSBhcmcgaXMgcmVsYXRpdmUKICAgICAgICAgKiB0by4KICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwIGFwcGx5IHRoZSBtYXAgY29uZmlnIHRvIHRoZSB2YWx1ZS4gU2hvdWxkCiAgICAgICAgICogb25seSBiZSBkb25lIGlmIHRoaXMgbm9ybWFsaXphdGlvbiBpcyBmb3IgYSBkZXBlbmRlbmN5IElELgogICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG5vcm1hbGl6ZWQgbmFtZQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZShuYW1lLCBiYXNlTmFtZSwgYXBwbHlNYXApIHsKICAgICAgICAgICAgdmFyIHBrZ01haW4sIG1hcFZhbHVlLCBuYW1lUGFydHMsIGksIGosIG5hbWVTZWdtZW50LCBsYXN0SW5kZXgsCiAgICAgICAgICAgICAgICBmb3VuZE1hcCwgZm91bmRJLCBmb3VuZFN0YXJNYXAsIHN0YXJJLCBub3JtYWxpemVkQmFzZVBhcnRzLAogICAgICAgICAgICAgICAgYmFzZVBhcnRzID0gKGJhc2VOYW1lICYmIGJhc2VOYW1lLnNwbGl0KCcvJykpLAogICAgICAgICAgICAgICAgbWFwID0gY29uZmlnLm1hcCwKICAgICAgICAgICAgICAgIHN0YXJNYXAgPSBtYXAgJiYgbWFwWycqJ107CgogICAgICAgICAgICAvL0FkanVzdCBhbnkgcmVsYXRpdmUgcGF0aHMuCiAgICAgICAgICAgIGlmIChuYW1lKSB7CiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zcGxpdCgnLycpOwogICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gbmFtZS5sZW5ndGggLSAxOwoKICAgICAgICAgICAgICAgIC8vIElmIHdhbnRpbmcgbm9kZSBJRCBjb21wYXRpYmlsaXR5LCBzdHJpcCAuanMgZnJvbSBlbmQKICAgICAgICAgICAgICAgIC8vIG9mIElEcy4gSGF2ZSB0byBkbyB0aGlzIGhlcmUsIGFuZCBub3QgaW4gbmFtZVRvVXJsCiAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG5vZGUgYWxsb3dzIGVpdGhlciAuanMgb3Igbm9uIC5qcyB0byBtYXAKICAgICAgICAgICAgICAgIC8vIHRvIHNhbWUgZmlsZS4KICAgICAgICAgICAgICAgIGlmIChjb25maWcubm9kZUlkQ29tcGF0ICYmIGpzU3VmZml4UmVnRXhwLnRlc3QobmFtZVtsYXN0SW5kZXhdKSkgewogICAgICAgICAgICAgICAgICAgIG5hbWVbbGFzdEluZGV4XSA9IG5hbWVbbGFzdEluZGV4XS5yZXBsYWNlKGpzU3VmZml4UmVnRXhwLCAnJyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gU3RhcnRzIHdpdGggYSAnLicgc28gbmVlZCB0aGUgYmFzZU5hbWUKICAgICAgICAgICAgICAgIGlmIChuYW1lWzBdLmNoYXJBdCgwKSA9PT0gJy4nICYmIGJhc2VQYXJ0cykgewogICAgICAgICAgICAgICAgICAgIC8vQ29udmVydCBiYXNlTmFtZSB0byBhcnJheSwgYW5kIGxvcCBvZmYgdGhlIGxhc3QgcGFydCwKICAgICAgICAgICAgICAgICAgICAvL3NvIHRoYXQgLiBtYXRjaGVzIHRoYXQgJ2RpcmVjdG9yeScgYW5kIG5vdCBuYW1lIG9mIHRoZSBiYXNlTmFtZSdzCiAgICAgICAgICAgICAgICAgICAgLy9tb2R1bGUuIEZvciBpbnN0YW5jZSwgYmFzZU5hbWUgb2YgJ29uZS90d28vdGhyZWUnLCBtYXBzIHRvCiAgICAgICAgICAgICAgICAgICAgLy8nb25lL3R3by90aHJlZS5qcycsIGJ1dCB3ZSB3YW50IHRoZSBkaXJlY3RvcnksICdvbmUvdHdvJyBmb3IKICAgICAgICAgICAgICAgICAgICAvL3RoaXMgbm9ybWFsaXphdGlvbi4KICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkQmFzZVBhcnRzID0gYmFzZVBhcnRzLnNsaWNlKDAsIGJhc2VQYXJ0cy5sZW5ndGggLSAxKTsKICAgICAgICAgICAgICAgICAgICBuYW1lID0gbm9ybWFsaXplZEJhc2VQYXJ0cy5jb25jYXQobmFtZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdHJpbURvdHMobmFtZSk7CiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5qb2luKCcvJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vQXBwbHkgbWFwIGNvbmZpZyBpZiBhdmFpbGFibGUuCiAgICAgICAgICAgIGlmIChhcHBseU1hcCAmJiBtYXAgJiYgKGJhc2VQYXJ0cyB8fCBzdGFyTWFwKSkgewogICAgICAgICAgICAgICAgbmFtZVBhcnRzID0gbmFtZS5zcGxpdCgnLycpOwoKICAgICAgICAgICAgICAgIG91dGVyTG9vcDogZm9yIChpID0gbmFtZVBhcnRzLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkgewogICAgICAgICAgICAgICAgICAgIG5hbWVTZWdtZW50ID0gbmFtZVBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VQYXJ0cykgewogICAgICAgICAgICAgICAgICAgICAgICAvL0ZpbmQgdGhlIGxvbmdlc3QgYmFzZU5hbWUgc2VnbWVudCBtYXRjaCBpbiB0aGUgY29uZmlnLgogICAgICAgICAgICAgICAgICAgICAgICAvL1NvLCBkbyBqb2lucyBvbiB0aGUgYmlnZ2VzdCB0byBzbWFsbGVzdCBsZW5ndGhzIG9mIGJhc2VQYXJ0cy4KICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gYmFzZVBhcnRzLmxlbmd0aDsgaiA+IDA7IGogLT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBnZXRPd24obWFwLCBiYXNlUGFydHMuc2xpY2UoMCwgaikuam9pbignLycpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Jhc2VOYW1lIHNlZ21lbnQgaGFzIGNvbmZpZywgZmluZCBpZiBpdCBoYXMgb25lIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBWYWx1ZSA9IGdldE93bihtYXBWYWx1ZSwgbmFtZVNlZ21lbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBWYWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hdGNoLCB1cGRhdGUgbmFtZSB0byB0aGUgbmV3IHZhbHVlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZE1hcCA9IG1hcFZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEkgPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvdXRlckxvb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0NoZWNrIGZvciBhIHN0YXIgbWFwIG1hdGNoLCBidXQganVzdCBob2xkIG9uIHRvIGl0LAogICAgICAgICAgICAgICAgICAgIC8vaWYgdGhlcmUgaXMgYSBzaG9ydGVyIHNlZ21lbnQgbWF0Y2ggbGF0ZXIgaW4gYSBtYXRjaGluZwogICAgICAgICAgICAgICAgICAgIC8vY29uZmlnLCB0aGVuIGZhdm9yIG92ZXIgdGhpcyBzdGFyIG1hcC4KICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kU3Rhck1hcCAmJiBzdGFyTWFwICYmIGdldE93bihzdGFyTWFwLCBuYW1lU2VnbWVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTdGFyTWFwID0gZ2V0T3duKHN0YXJNYXAsIG5hbWVTZWdtZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhckkgPSBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIWZvdW5kTWFwICYmIGZvdW5kU3Rhck1hcCkgewogICAgICAgICAgICAgICAgICAgIGZvdW5kTWFwID0gZm91bmRTdGFyTWFwOwogICAgICAgICAgICAgICAgICAgIGZvdW5kSSA9IHN0YXJJOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChmb3VuZE1hcCkgewogICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cy5zcGxpY2UoMCwgZm91bmRJLCBmb3VuZE1hcCk7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWVQYXJ0cy5qb2luKCcvJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIElmIHRoZSBuYW1lIHBvaW50cyB0byBhIHBhY2thZ2UncyBuYW1lLCB1c2UKICAgICAgICAgICAgLy8gdGhlIHBhY2thZ2UgbWFpbiBpbnN0ZWFkLgogICAgICAgICAgICBwa2dNYWluID0gZ2V0T3duKGNvbmZpZy5wa2dzLCBuYW1lKTsKCiAgICAgICAgICAgIHJldHVybiBwa2dNYWluID8gcGtnTWFpbiA6IG5hbWU7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiByZW1vdmVTY3JpcHQobmFtZSkgewogICAgICAgICAgICBpZiAoaXNCcm93c2VyKSB7CiAgICAgICAgICAgICAgICBlYWNoKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdE5vZGUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpID09PSBuYW1lICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcpID09PSBjb250ZXh0LmNvbnRleHROYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdE5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHROb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGhhc1BhdGhGYWxsYmFjayhpZCkgewogICAgICAgICAgICB2YXIgcGF0aENvbmZpZyA9IGdldE93bihjb25maWcucGF0aHMsIGlkKTsKICAgICAgICAgICAgaWYgKHBhdGhDb25maWcgJiYgaXNBcnJheShwYXRoQ29uZmlnKSAmJiBwYXRoQ29uZmlnLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgICAgIC8vUG9wIG9mZiB0aGUgZmlyc3QgYXJyYXkgdmFsdWUsIHNpbmNlIGl0IGZhaWxlZCwgYW5kCiAgICAgICAgICAgICAgICAvL3JldHJ5CiAgICAgICAgICAgICAgICBwYXRoQ29uZmlnLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUudW5kZWYoaWQpOwoKICAgICAgICAgICAgICAgIC8vQ3VzdG9tIHJlcXVpcmUgdGhhdCBkb2VzIG5vdCBkbyBtYXAgdHJhbnNsYXRpb24sIHNpbmNlCiAgICAgICAgICAgICAgICAvL0lEIGlzICJhYnNvbHV0ZSIsIGFscmVhZHkgbWFwcGVkL3Jlc29sdmVkLgogICAgICAgICAgICAgICAgY29udGV4dC5tYWtlUmVxdWlyZShudWxsLCB7CiAgICAgICAgICAgICAgICAgICAgc2tpcE1hcDogdHJ1ZQogICAgICAgICAgICAgICAgfSkoW2lkXSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vVHVybnMgYSBwbHVnaW4hcmVzb3VyY2UgdG8gW3BsdWdpbiwgcmVzb3VyY2VdCiAgICAgICAgLy93aXRoIHRoZSBwbHVnaW4gYmVpbmcgdW5kZWZpbmVkIGlmIHRoZSBuYW1lCiAgICAgICAgLy9kaWQgbm90IGhhdmUgYSBwbHVnaW4gcHJlZml4LgogICAgICAgIGZ1bmN0aW9uIHNwbGl0UHJlZml4KG5hbWUpIHsKICAgICAgICAgICAgdmFyIHByZWZpeCwKICAgICAgICAgICAgICAgIGluZGV4ID0gbmFtZSA/IG5hbWUuaW5kZXhPZignIScpIDogLTE7CiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CiAgICAgICAgICAgICAgICBwcmVmaXggPSBuYW1lLnN1YnN0cmluZygwLCBpbmRleCk7CiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxLCBuYW1lLmxlbmd0aCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFtwcmVmaXgsIG5hbWVdOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQ3JlYXRlcyBhIG1vZHVsZSBtYXBwaW5nIHRoYXQgaW5jbHVkZXMgcGx1Z2luIHByZWZpeCwgbW9kdWxlCiAgICAgICAgICogbmFtZSwgYW5kIHBhdGguIElmIHBhcmVudE1vZHVsZU1hcCBpcyBwcm92aWRlZCBpdCB3aWxsCiAgICAgICAgICogYWxzbyBub3JtYWxpemUgdGhlIG5hbWUgdmlhIHJlcXVpcmUubm9ybWFsaXplKCkKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBtb2R1bGUgbmFtZQogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbcGFyZW50TW9kdWxlTWFwXSBwYXJlbnQgbW9kdWxlIG1hcAogICAgICAgICAqIGZvciB0aGUgbW9kdWxlIG5hbWUsIHVzZWQgdG8gcmVzb2x2ZSByZWxhdGl2ZSBuYW1lcy4KICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzTm9ybWFsaXplZDogaXMgdGhlIElEIGFscmVhZHkgbm9ybWFsaXplZC4KICAgICAgICAgKiBUaGlzIGlzIHRydWUgaWYgdGhpcyBjYWxsIGlzIGRvbmUgZm9yIGEgZGVmaW5lKCkgbW9kdWxlIElELgogICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gYXBwbHlNYXA6IGFwcGx5IHRoZSBtYXAgY29uZmlnIHRvIHRoZSBJRC4KICAgICAgICAgKiBTaG91bGQgb25seSBiZSB0cnVlIGlmIHRoaXMgbWFwIGlzIGZvciBhIGRlcGVuZGVuY3kuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIG1ha2VNb2R1bGVNYXAobmFtZSwgcGFyZW50TW9kdWxlTWFwLCBpc05vcm1hbGl6ZWQsIGFwcGx5TWFwKSB7CiAgICAgICAgICAgIHZhciB1cmwsIHBsdWdpbk1vZHVsZSwgc3VmZml4LCBuYW1lUGFydHMsCiAgICAgICAgICAgICAgICBwcmVmaXggPSBudWxsLAogICAgICAgICAgICAgICAgcGFyZW50TmFtZSA9IHBhcmVudE1vZHVsZU1hcCA/IHBhcmVudE1vZHVsZU1hcC5uYW1lIDogbnVsbCwKICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZSA9IG5hbWUsCiAgICAgICAgICAgICAgICBpc0RlZmluZSA9IHRydWUsCiAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9ICcnOwoKICAgICAgICAgICAgLy9JZiBubyBuYW1lLCB0aGVuIGl0IG1lYW5zIGl0IGlzIGEgcmVxdWlyZSBjYWxsLCBnZW5lcmF0ZSBhbgogICAgICAgICAgICAvL2ludGVybmFsIG5hbWUuCiAgICAgICAgICAgIGlmICghbmFtZSkgewogICAgICAgICAgICAgICAgaXNEZWZpbmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIG5hbWUgPSAnX0ByJyArIChyZXF1aXJlQ291bnRlciArPSAxKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbmFtZVBhcnRzID0gc3BsaXRQcmVmaXgobmFtZSk7CiAgICAgICAgICAgIHByZWZpeCA9IG5hbWVQYXJ0c1swXTsKICAgICAgICAgICAgbmFtZSA9IG5hbWVQYXJ0c1sxXTsKCiAgICAgICAgICAgIGlmIChwcmVmaXgpIHsKICAgICAgICAgICAgICAgIHByZWZpeCA9IG5vcm1hbGl6ZShwcmVmaXgsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKICAgICAgICAgICAgICAgIHBsdWdpbk1vZHVsZSA9IGdldE93bihkZWZpbmVkLCBwcmVmaXgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0FjY291bnQgZm9yIHJlbGF0aXZlIHBhdGhzIGlmIHRoZXJlIGlzIGEgYmFzZSBuYW1lLgogICAgICAgICAgICBpZiAobmFtZSkgewogICAgICAgICAgICAgICAgaWYgKHByZWZpeCkgewogICAgICAgICAgICAgICAgICAgIGlmIChpc05vcm1hbGl6ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBuYW1lOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGx1Z2luTW9kdWxlICYmIHBsdWdpbk1vZHVsZS5ub3JtYWxpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9QbHVnaW4gaXMgbG9hZGVkLCB1c2UgaXRzIG5vcm1hbGl6ZSBtZXRob2QuCiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gcGx1Z2luTW9kdWxlLm5vcm1hbGl6ZShuYW1lLCBmdW5jdGlvbiAobmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5lc3RlZCBwbHVnaW4gcmVmZXJlbmNlcywgdGhlbiBkbyBub3QgdHJ5IHRvCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSwgYXMgaXQgd2lsbCBub3Qgbm9ybWFsaXplIGNvcnJlY3RseS4gVGhpcwogICAgICAgICAgICAgICAgICAgICAgICAvLyBwbGFjZXMgYSByZXN0cmljdGlvbiBvbiByZXNvdXJjZUlkcywgYW5kIHRoZSBsb25nZXIKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGVybSBzb2x1dGlvbiBpcyBub3QgdG8gbm9ybWFsaXplIHVudGlsIHBsdWdpbnMgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvYWRlZCBhbmQgYWxsIG5vcm1hbGl6YXRpb25zIHRvIGFsbG93IGZvciBhc3luYwogICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2FkaW5nIG9mIGEgbG9hZGVyIHBsdWdpbi4gQnV0IGZvciBub3csIGZpeGVzIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21tb24gdXNlcy4gRGV0YWlscyBpbiAjMTEzMQogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWUuaW5kZXhPZignIScpID09PSAtMSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIGFwcGx5TWFwKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vQSByZWd1bGFyIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CgogICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplZCBuYW1lIG1heSBiZSBhIHBsdWdpbiBJRCBkdWUgdG8gbWFwIGNvbmZpZwogICAgICAgICAgICAgICAgICAgIC8vYXBwbGljYXRpb24gaW4gbm9ybWFsaXplLiBUaGUgbWFwIGNvbmZpZyB2YWx1ZXMgbXVzdAogICAgICAgICAgICAgICAgICAgIC8vYWxyZWFkeSBiZSBub3JtYWxpemVkLCBzbyBkbyBub3QgbmVlZCB0byByZWRvIHRoYXQgcGFydC4KICAgICAgICAgICAgICAgICAgICBuYW1lUGFydHMgPSBzcGxpdFByZWZpeChub3JtYWxpemVkTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZVBhcnRzWzBdOwogICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbmFtZVBhcnRzWzFdOwogICAgICAgICAgICAgICAgICAgIGlzTm9ybWFsaXplZCA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgIHVybCA9IGNvbnRleHQubmFtZVRvVXJsKG5vcm1hbGl6ZWROYW1lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9JZiB0aGUgaWQgaXMgYSBwbHVnaW4gaWQgdGhhdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBpZiBpdCBuZWVkcwogICAgICAgICAgICAvL25vcm1hbGl6YXRpb24sIHN0YW1wIGl0IHdpdGggYSB1bmlxdWUgSUQgc28gdHdvIG1hdGNoaW5nIHJlbGF0aXZlCiAgICAgICAgICAgIC8vaWRzIHRoYXQgbWF5IGNvbmZsaWN0IGNhbiBiZSBzZXBhcmF0ZS4KICAgICAgICAgICAgc3VmZml4ID0gcHJlZml4ICYmICFwbHVnaW5Nb2R1bGUgJiYgIWlzTm9ybWFsaXplZCA/CiAgICAgICAgICAgICAgICAgICAgICdfdW5ub3JtYWxpemVkJyArICh1bm5vcm1hbGl6ZWRDb3VudGVyICs9IDEpIDoKICAgICAgICAgICAgICAgICAgICAgJyc7CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgcHJlZml4OiBwcmVmaXgsCiAgICAgICAgICAgICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSwKICAgICAgICAgICAgICAgIHBhcmVudE1hcDogcGFyZW50TW9kdWxlTWFwLAogICAgICAgICAgICAgICAgdW5ub3JtYWxpemVkOiAhIXN1ZmZpeCwKICAgICAgICAgICAgICAgIHVybDogdXJsLAogICAgICAgICAgICAgICAgb3JpZ2luYWxOYW1lOiBvcmlnaW5hbE5hbWUsCiAgICAgICAgICAgICAgICBpc0RlZmluZTogaXNEZWZpbmUsCiAgICAgICAgICAgICAgICBpZDogKHByZWZpeCA/CiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCArICchJyArIG5vcm1hbGl6ZWROYW1lIDoKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUpICsgc3VmZml4CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBnZXRNb2R1bGUoZGVwTWFwKSB7CiAgICAgICAgICAgIHZhciBpZCA9IGRlcE1hcC5pZCwKICAgICAgICAgICAgICAgIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOwoKICAgICAgICAgICAgaWYgKCFtb2QpIHsKICAgICAgICAgICAgICAgIG1vZCA9IHJlZ2lzdHJ5W2lkXSA9IG5ldyBjb250ZXh0Lk1vZHVsZShkZXBNYXApOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gbW9kOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gb24oZGVwTWFwLCBuYW1lLCBmbikgewogICAgICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCiAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKCiAgICAgICAgICAgIGlmIChoYXNQcm9wKGRlZmluZWQsIGlkKSAmJgogICAgICAgICAgICAgICAgICAgICghbW9kIHx8IG1vZC5kZWZpbmVFbWl0Q29tcGxldGUpKSB7CiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2RlZmluZWQnKSB7CiAgICAgICAgICAgICAgICAgICAgZm4oZGVmaW5lZFtpZF0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbW9kID0gZ2V0TW9kdWxlKGRlcE1hcCk7CiAgICAgICAgICAgICAgICBpZiAobW9kLmVycm9yICYmIG5hbWUgPT09ICdlcnJvcicpIHsKICAgICAgICAgICAgICAgICAgICBmbihtb2QuZXJyb3IpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBtb2Qub24obmFtZSwgZm4pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGVyciwgZXJyYmFjaykgewogICAgICAgICAgICB2YXIgaWRzID0gZXJyLnJlcXVpcmVNb2R1bGVzLAogICAgICAgICAgICAgICAgbm90aWZpZWQgPSBmYWxzZTsKCiAgICAgICAgICAgIGlmIChlcnJiYWNrKSB7CiAgICAgICAgICAgICAgICBlcnJiYWNrKGVycik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBlYWNoKGlkcywgZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOwogICAgICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9TZXQgZXJyb3Igb24gbW9kdWxlLCBzbyBpdCBza2lwcyB0aW1lb3V0IGNoZWNrcy4KICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmVycm9yID0gZXJyOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghbm90aWZpZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXEub25FcnJvcihlcnIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gdHJhbnNmZXIgZ2xvYmFsUXVldWUgaXRlbXMgdG8gdGhpcyBjb250ZXh0J3MKICAgICAgICAgKiBkZWZRdWV1ZS4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiB0YWtlR2xvYmFsUXVldWUoKSB7CiAgICAgICAgICAgIC8vUHVzaCBhbGwgdGhlIGdsb2JhbERlZlF1ZXVlIGl0ZW1zIGludG8gdGhlIGNvbnRleHQncyBkZWZRdWV1ZQogICAgICAgICAgICBpZiAoZ2xvYmFsRGVmUXVldWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBlYWNoKGdsb2JhbERlZlF1ZXVlLCBmdW5jdGlvbihxdWV1ZUl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBxdWV1ZUl0ZW1bMF07CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcFtpZF0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkZWZRdWV1ZS5wdXNoKHF1ZXVlSXRlbSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW107CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGhhbmRsZXJzID0gewogICAgICAgICAgICAncmVxdWlyZSc6IGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIGlmIChtb2QucmVxdWlyZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2QucmVxdWlyZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QucmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUobW9kLm1hcCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAnZXhwb3J0cyc6IGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIG1vZC51c2luZ0V4cG9ydHMgPSB0cnVlOwogICAgICAgICAgICAgICAgaWYgKG1vZC5tYXAuaXNEZWZpbmUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV4cG9ydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChkZWZpbmVkW21vZC5tYXAuaWRdID0gbW9kLmV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLmV4cG9ydHMgPSBkZWZpbmVkW21vZC5tYXAuaWRdID0ge30pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ21vZHVsZSc6IGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIGlmIChtb2QubW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZC5tb2R1bGU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLm1vZHVsZSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG1vZC5tYXAuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHVyaTogbW9kLm1hcC51cmwsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldE93bihjb25maWcuY29uZmlnLCBtb2QubWFwLmlkKSB8fCB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0czogbW9kLmV4cG9ydHMgfHwgKG1vZC5leHBvcnRzID0ge30pCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBjbGVhblJlZ2lzdHJ5KGlkKSB7CiAgICAgICAgICAgIC8vQ2xlYW4gdXAgbWFjaGluZXJ5IHVzZWQgZm9yIHdhaXRpbmcgbW9kdWxlcy4KICAgICAgICAgICAgZGVsZXRlIHJlZ2lzdHJ5W2lkXTsKICAgICAgICAgICAgZGVsZXRlIGVuYWJsZWRSZWdpc3RyeVtpZF07CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBicmVha0N5Y2xlKG1vZCwgdHJhY2VkLCBwcm9jZXNzZWQpIHsKICAgICAgICAgICAgdmFyIGlkID0gbW9kLm1hcC5pZDsKCiAgICAgICAgICAgIGlmIChtb2QuZXJyb3IpIHsKICAgICAgICAgICAgICAgIG1vZC5lbWl0KCdlcnJvcicsIG1vZC5lcnJvcik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0cmFjZWRbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGVhY2gobW9kLmRlcE1hcHMsIGZ1bmN0aW9uIChkZXBNYXAsIGkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGVwSWQgPSBkZXBNYXAuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9IGdldE93bihyZWdpc3RyeSwgZGVwSWQpOwoKICAgICAgICAgICAgICAgICAgICAvL09ubHkgZm9yY2UgdGhpbmdzIHRoYXQgaGF2ZSBub3QgY29tcGxldGVkCiAgICAgICAgICAgICAgICAgICAgLy9iZWluZyBkZWZpbmVkLCBzbyBzdGlsbCBpbiB0aGUgcmVnaXN0cnksCiAgICAgICAgICAgICAgICAgICAgLy9hbmQgb25seSBpZiBpdCBoYXMgbm90IGJlZW4gbWF0Y2hlZCB1cAogICAgICAgICAgICAgICAgICAgIC8vaW4gdGhlIG1vZHVsZSBhbHJlYWR5LgogICAgICAgICAgICAgICAgICAgIGlmIChkZXAgJiYgIW1vZC5kZXBNYXRjaGVkW2ldICYmICFwcm9jZXNzZWRbZGVwSWRdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRPd24odHJhY2VkLCBkZXBJZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5kZWZpbmVEZXAoaSwgZGVmaW5lZFtkZXBJZF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmNoZWNrKCk7IC8vcGFzcyBmYWxzZT8KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrQ3ljbGUoZGVwLCB0cmFjZWQsIHByb2Nlc3NlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHByb2Nlc3NlZFtpZF0gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBjaGVja0xvYWRlZCgpIHsKICAgICAgICAgICAgdmFyIGVyciwgdXNpbmdQYXRoRmFsbGJhY2ssCiAgICAgICAgICAgICAgICB3YWl0SW50ZXJ2YWwgPSBjb25maWcud2FpdFNlY29uZHMgKiAxMDAwLAogICAgICAgICAgICAgICAgLy9JdCBpcyBwb3NzaWJsZSB0byBkaXNhYmxlIHRoZSB3YWl0IGludGVydmFsIGJ5IHVzaW5nIHdhaXRTZWNvbmRzIG9mIDAuCiAgICAgICAgICAgICAgICBleHBpcmVkID0gd2FpdEludGVydmFsICYmIChjb250ZXh0LnN0YXJ0VGltZSArIHdhaXRJbnRlcnZhbCkgPCBuZXcgRGF0ZSgpLmdldFRpbWUoKSwKICAgICAgICAgICAgICAgIG5vTG9hZHMgPSBbXSwKICAgICAgICAgICAgICAgIHJlcUNhbGxzID0gW10sCiAgICAgICAgICAgICAgICBzdGlsbExvYWRpbmcgPSBmYWxzZSwKICAgICAgICAgICAgICAgIG5lZWRDeWNsZUNoZWNrID0gdHJ1ZTsKCiAgICAgICAgICAgIC8vRG8gbm90IGJvdGhlciBpZiB0aGlzIGNhbGwgd2FzIGEgcmVzdWx0IG9mIGEgY3ljbGUgYnJlYWsuCiAgICAgICAgICAgIGlmIChpbkNoZWNrTG9hZGVkKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGluQ2hlY2tMb2FkZWQgPSB0cnVlOwoKICAgICAgICAgICAgLy9GaWd1cmUgb3V0IHRoZSBzdGF0ZSBvZiBhbGwgdGhlIG1vZHVsZXMuCiAgICAgICAgICAgIGVhY2hQcm9wKGVuYWJsZWRSZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgdmFyIG1hcCA9IG1vZC5tYXAsCiAgICAgICAgICAgICAgICAgICAgbW9kSWQgPSBtYXAuaWQ7CgogICAgICAgICAgICAgICAgLy9Ta2lwIHRoaW5ncyB0aGF0IGFyZSBub3QgZW5hYmxlZCBvciBpbiBlcnJvciBzdGF0ZS4KICAgICAgICAgICAgICAgIGlmICghbW9kLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFtYXAuaXNEZWZpbmUpIHsKICAgICAgICAgICAgICAgICAgICByZXFDYWxscy5wdXNoKG1vZCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFtb2QuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAvL0lmIHRoZSBtb2R1bGUgc2hvdWxkIGJlIGV4ZWN1dGVkLCBhbmQgaXQgaGFzIG5vdAogICAgICAgICAgICAgICAgICAgIC8vYmVlbiBpbml0ZWQgYW5kIHRpbWUgaXMgdXAsIHJlbWVtYmVyIGl0LgogICAgICAgICAgICAgICAgICAgIGlmICghbW9kLmluaXRlZCAmJiBleHBpcmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQYXRoRmFsbGJhY2sobW9kSWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZ1BhdGhGYWxsYmFjayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlsbExvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9Mb2Fkcy5wdXNoKG1vZElkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNjcmlwdChtb2RJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtb2QuaW5pdGVkICYmIG1vZC5mZXRjaGVkICYmIG1hcC5pc0RlZmluZSkgewogICAgICAgICAgICAgICAgICAgICAgICBzdGlsbExvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hcC5wcmVmaXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTm8gcmVhc29uIHRvIGtlZXAgbG9va2luZyBmb3IgdW5maW5pc2hlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2FkaW5nLiBJZiB0aGUgb25seSBzdGlsbExvYWRpbmcgaXMgYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9wbHVnaW4gcmVzb3VyY2UgdGhvdWdoLCBrZWVwIGdvaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iZWNhdXNlIGl0IG1heSBiZSB0aGF0IGEgcGx1Z2luIHJlc291cmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lzIHdhaXRpbmcgb24gYSBub24tcGx1Z2luIGN5Y2xlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuZWVkQ3ljbGVDaGVjayA9IGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBpZiAoZXhwaXJlZCAmJiBub0xvYWRzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgLy9JZiB3YWl0IHRpbWUgZXhwaXJlZCwgdGhyb3cgZXJyb3Igb2YgdW5sb2FkZWQgbW9kdWxlcy4KICAgICAgICAgICAgICAgIGVyciA9IG1ha2VFcnJvcigndGltZW91dCcsICdMb2FkIHRpbWVvdXQgZm9yIG1vZHVsZXM6ICcgKyBub0xvYWRzLCBudWxsLCBub0xvYWRzKTsKICAgICAgICAgICAgICAgIGVyci5jb250ZXh0TmFtZSA9IGNvbnRleHQuY29udGV4dE5hbWU7CiAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihlcnIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL05vdCBleHBpcmVkLCBjaGVjayBmb3IgYSBjeWNsZS4KICAgICAgICAgICAgaWYgKG5lZWRDeWNsZUNoZWNrKSB7CiAgICAgICAgICAgICAgICBlYWNoKHJlcUNhbGxzLCBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWtDeWNsZShtb2QsIHt9LCB7fSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9JZiBzdGlsbCB3YWl0aW5nIG9uIGxvYWRzLCBhbmQgdGhlIHdhaXRpbmcgbG9hZCBpcyBzb21ldGhpbmcKICAgICAgICAgICAgLy9vdGhlciB0aGFuIGEgcGx1Z2luIHJlc291cmNlLCBvciB0aGVyZSBhcmUgc3RpbGwgb3V0c3RhbmRpbmcKICAgICAgICAgICAgLy9zY3JpcHRzLCB0aGVuIGp1c3QgdHJ5IGJhY2sgbGF0ZXIuCiAgICAgICAgICAgIGlmICgoIWV4cGlyZWQgfHwgdXNpbmdQYXRoRmFsbGJhY2spICYmIHN0aWxsTG9hZGluZykgewogICAgICAgICAgICAgICAgLy9Tb21ldGhpbmcgaXMgc3RpbGwgd2FpdGluZyB0byBsb2FkLiBXYWl0IGZvciBpdCwgYnV0IG9ubHkKICAgICAgICAgICAgICAgIC8vaWYgYSB0aW1lb3V0IGlzIG5vdCBhbHJlYWR5IGluIGVmZmVjdC4KICAgICAgICAgICAgICAgIGlmICgoaXNCcm93c2VyIHx8IGlzV2ViV29ya2VyKSAmJiAhY2hlY2tMb2FkZWRUaW1lb3V0SWQpIHsKICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfSwgNTApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBNb2R1bGUgPSBmdW5jdGlvbiAobWFwKSB7CiAgICAgICAgICAgIHRoaXMuZXZlbnRzID0gZ2V0T3duKHVuZGVmRXZlbnRzLCBtYXAuaWQpIHx8IHt9OwogICAgICAgICAgICB0aGlzLm1hcCA9IG1hcDsKICAgICAgICAgICAgdGhpcy5zaGltID0gZ2V0T3duKGNvbmZpZy5zaGltLCBtYXAuaWQpOwogICAgICAgICAgICB0aGlzLmRlcEV4cG9ydHMgPSBbXTsKICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gW107CiAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hlZCA9IFtdOwogICAgICAgICAgICB0aGlzLnBsdWdpbk1hcHMgPSB7fTsKICAgICAgICAgICAgdGhpcy5kZXBDb3VudCA9IDA7CgogICAgICAgICAgICAvKiB0aGlzLmV4cG9ydHMgdGhpcy5mYWN0b3J5CiAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IFtdLAogICAgICAgICAgICAgICB0aGlzLmVuYWJsZWQsIHRoaXMuZmV0Y2hlZAogICAgICAgICAgICAqLwogICAgICAgIH07CgogICAgICAgIE1vZHVsZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChkZXBNYXBzLCBmYWN0b3J5LCBlcnJiYWNrLCBvcHRpb25zKSB7CiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKCiAgICAgICAgICAgICAgICAvL0RvIG5vdCBkbyBtb3JlIGluaXRzIGlmIGFscmVhZHkgZG9uZS4gQ2FuIGhhcHBlbiBpZiB0aGVyZQogICAgICAgICAgICAgICAgLy9hcmUgbXVsdGlwbGUgZGVmaW5lIGNhbGxzIGZvciB0aGUgc2FtZSBtb2R1bGUuIFRoYXQgaXMgbm90CiAgICAgICAgICAgICAgICAvL2Egbm9ybWFsLCBjb21tb24gY2FzZSwgYnV0IGl0IGlzIGFsc28gbm90IHVuZXhwZWN0ZWQuCiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbml0ZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKCiAgICAgICAgICAgICAgICBpZiAoZXJyYmFjaykgewogICAgICAgICAgICAgICAgICAgIC8vUmVnaXN0ZXIgZm9yIGVycm9ycyBvbiB0aGlzIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICB0aGlzLm9uKCdlcnJvcicsIGVycmJhY2spOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgIC8vSWYgbm8gZXJyYmFjayBhbHJlYWR5LCBidXQgdGhlcmUgYXJlIGVycm9yIGxpc3RlbmVycwogICAgICAgICAgICAgICAgICAgIC8vb24gdGhpcyBtb2R1bGUsIHNldCB1cCBhbiBlcnJiYWNrIHRvIHBhc3MgdG8gdGhlIGRlcHMuCiAgICAgICAgICAgICAgICAgICAgZXJyYmFjayA9IGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0RvIGEgY29weSBvZiB0aGUgZGVwZW5kZW5jeSBhcnJheSwgc28gdGhhdAogICAgICAgICAgICAgICAgLy9zb3VyY2UgaW5wdXRzIGFyZSBub3QgbW9kaWZpZWQuIEZvciBleGFtcGxlCiAgICAgICAgICAgICAgICAvLyJzaGltIiBkZXBzIGFyZSBwYXNzZWQgaW4gaGVyZSBkaXJlY3RseSwgYW5kCiAgICAgICAgICAgICAgICAvL2RvaW5nIGEgZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiB0aGUgZGVwTWFwcyBhcnJheQogICAgICAgICAgICAgICAgLy93b3VsZCBhZmZlY3QgdGhhdCBjb25maWcuCiAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBkZXBNYXBzICYmIGRlcE1hcHMuc2xpY2UoMCk7CgogICAgICAgICAgICAgICAgdGhpcy5lcnJiYWNrID0gZXJyYmFjazsKCiAgICAgICAgICAgICAgICAvL0luZGljYXRlIHRoaXMgbW9kdWxlIGhhcyBiZSBpbml0aWFsaXplZAogICAgICAgICAgICAgICAgdGhpcy5pbml0ZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgIHRoaXMuaWdub3JlID0gb3B0aW9ucy5pZ25vcmU7CgogICAgICAgICAgICAgICAgLy9Db3VsZCBoYXZlIG9wdGlvbiB0byBpbml0IHRoaXMgbW9kdWxlIGluIGVuYWJsZWQgbW9kZSwKICAgICAgICAgICAgICAgIC8vb3IgY291bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgbWFya2VkIGFzIGVuYWJsZWQuIEhvd2V2ZXIsCiAgICAgICAgICAgICAgICAvL3RoZSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB1bnRpbCBpbml0IGlzIGNhbGxlZC4gU28KICAgICAgICAgICAgICAgIC8vaWYgZW5hYmxlZCBwcmV2aW91c2x5LCBub3cgdHJpZ2dlciBkZXBlbmRlbmNpZXMgYXMgZW5hYmxlZC4KICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmVuYWJsZWQgfHwgdGhpcy5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgLy9FbmFibGUgdGhpcyBtb2R1bGUgYW5kIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgICAgICAgICAvL1dpbGwgY2FsbCB0aGlzLmNoZWNrKCkKICAgICAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBkZWZpbmVEZXA6IGZ1bmN0aW9uIChpLCBkZXBFeHBvcnRzKSB7CiAgICAgICAgICAgICAgICAvL0JlY2F1c2Ugb2YgY3ljbGVzLCBkZWZpbmVkIGNhbGxiYWNrIGZvciBhIGdpdmVuCiAgICAgICAgICAgICAgICAvL2V4cG9ydCBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLgogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRlcE1hdGNoZWRbaV0pIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hdGNoZWRbaV0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgLT0gMTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcEV4cG9ydHNbaV0gPSBkZXBFeHBvcnRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZmV0Y2g6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLmZldGNoZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLmZldGNoZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgIGNvbnRleHQuc3RhcnRUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKCiAgICAgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5tYXA7CgogICAgICAgICAgICAgICAgLy9JZiB0aGUgbWFuYWdlciBpcyBmb3IgYSBwbHVnaW4gbWFuYWdlZCByZXNvdXJjZSwKICAgICAgICAgICAgICAgIC8vYXNrIHRoZSBwbHVnaW4gdG8gbG9hZCBpdCBub3cuCiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGltKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tYWtlUmVxdWlyZSh0aGlzLm1hcCwgewogICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVCdWlsZENhbGxiYWNrOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgfSkodGhpcy5zaGltLmRlcHMgfHwgW10sIGJpbmQodGhpcywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLnByZWZpeCA/IHRoaXMuY2FsbFBsdWdpbigpIDogdGhpcy5sb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5jeS4KICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLnByZWZpeCA/IHRoaXMuY2FsbFBsdWdpbigpIDogdGhpcy5sb2FkKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5tYXAudXJsOwoKICAgICAgICAgICAgICAgIC8vUmVndWxhciBkZXBlbmRlbmN5LgogICAgICAgICAgICAgICAgaWYgKCF1cmxGZXRjaGVkW3VybF0pIHsKICAgICAgICAgICAgICAgICAgICB1cmxGZXRjaGVkW3VybF0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9hZCh0aGlzLm1hcC5pZCwgdXJsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDaGVja3MgaWYgdGhlIG1vZHVsZSBpcyByZWFkeSB0byBkZWZpbmUgaXRzZWxmLCBhbmQgaWYgc28sCiAgICAgICAgICAgICAqIGRlZmluZSBpdC4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCB0aGlzLmVuYWJsaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBlcnIsIGNqc01vZHVsZSwKICAgICAgICAgICAgICAgICAgICBpZCA9IHRoaXMubWFwLmlkLAogICAgICAgICAgICAgICAgICAgIGRlcEV4cG9ydHMgPSB0aGlzLmRlcEV4cG9ydHMsCiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0cywKICAgICAgICAgICAgICAgICAgICBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5OwoKICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbml0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGZldGNoIGlmIG5vdCBhbHJlYWR5IGluIHRoZSBkZWZRdWV1ZS4KICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoY29udGV4dC5kZWZRdWV1ZU1hcCwgaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2goKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcy5lcnJvcik7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmRlZmluaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgLy9UaGUgZmFjdG9yeSBjb3VsZCB0cmlnZ2VyIGFub3RoZXIgcmVxdWlyZSBjYWxsCiAgICAgICAgICAgICAgICAgICAgLy90aGF0IHdvdWxkIHJlc3VsdCBpbiBjaGVja2luZyB0aGlzIG1vZHVsZSB0bwogICAgICAgICAgICAgICAgICAgIC8vZGVmaW5lIGl0c2VsZiBhZ2Fpbi4gSWYgYWxyZWFkeSBpbiB0aGUgcHJvY2VzcwogICAgICAgICAgICAgICAgICAgIC8vb2YgZG9pbmcgdGhhdCwgc2tpcCB0aGlzIHdvcmsuCiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmluZyA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlcENvdW50IDwgMSAmJiAhdGhpcy5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGZhY3RvcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHRoZXJlIGlzIGFuIGVycm9yIGxpc3RlbmVyLCBmYXZvciBwYXNzaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RvIHRoYXQgaW5zdGVhZCBvZiB0aHJvd2luZyBhbiBlcnJvci4gSG93ZXZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vb25seSBkbyBpdCBmb3IgZGVmaW5lKCknZCAgbW9kdWxlcy4gcmVxdWlyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lcnJiYWNrcyBzaG91bGQgbm90IGJlIGNhbGxlZCBmb3IgZmFpbHVyZXMgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlaXIgY2FsbGJhY2tzICgjNjk5KS4gSG93ZXZlciBpZiBhIGdsb2JhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9vbkVycm9yIGlzIHNldCwgdXNlIHRoYXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRoaXMuZXZlbnRzLmVycm9yICYmIHRoaXMubWFwLmlzRGVmaW5lKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5vbkVycm9yICE9PSBkZWZhdWx0T25FcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjb250ZXh0LmV4ZWNDYihpZCwgZmFjdG9yeSwgZGVwRXhwb3J0cywgZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGNvbnRleHQuZXhlY0NiKGlkLCBmYWN0b3J5LCBkZXBFeHBvcnRzLCBleHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYXZvciByZXR1cm4gdmFsdWUgb3ZlciBleHBvcnRzLiBJZiBub2RlL2NqcyBpbiBwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiB3aWxsIG5vdCBoYXZlIGEgcmV0dXJuIHZhbHVlIGFueXdheS4gRmF2b3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vZHVsZS5leHBvcnRzIGFzc2lnbm1lbnQgb3ZlciBleHBvcnRzIG9iamVjdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC5pc0RlZmluZSAmJiBleHBvcnRzID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjanNNb2R1bGUgPSB0aGlzLm1vZHVsZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2pzTW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjanNNb2R1bGUuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNpbmdFeHBvcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZXhwb3J0cyBhbHJlYWR5IHNldCB0aGUgZGVmaW5lZCB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlTWFwID0gdGhpcy5tYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNb2R1bGVzID0gdGhpcy5tYXAuaXNEZWZpbmUgPyBbdGhpcy5tYXAuaWRdIDogbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZVR5cGUgPSB0aGlzLm1hcC5pc0RlZmluZSA/ICdkZWZpbmUnIDogJ3JlcXVpcmUnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKCh0aGlzLmVycm9yID0gZXJyKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9KdXN0IGEgbGl0ZXJhbCB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGZhY3Rvcnk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0cyA9IGV4cG9ydHM7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuaXNEZWZpbmUgJiYgIXRoaXMuaWdub3JlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkW2lkXSA9IGV4cG9ydHM7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5vblJlc291cmNlTG9hZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNMb2FkTWFwcyA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2godGhpcy5kZXBNYXBzLCBmdW5jdGlvbiAoZGVwTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc0xvYWRNYXBzLnB1c2goZGVwTWFwLm5vcm1hbGl6ZWRNYXAgfHwgZGVwTWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEub25SZXNvdXJjZUxvYWQoY29udGV4dCwgdGhpcy5tYXAsIHJlc0xvYWRNYXBzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9DbGVhbiB1cAogICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KGlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0ZpbmlzaGVkIHRoZSBkZWZpbmUgc3RhZ2UuIEFsbG93IGNhbGxpbmcgY2hlY2sgYWdhaW4KICAgICAgICAgICAgICAgICAgICAvL3RvIGFsbG93IGRlZmluZSBub3RpZmljYXRpb25zIGJlbG93IGluIHRoZSBjYXNlIG9mIGEKICAgICAgICAgICAgICAgICAgICAvL2N5Y2xlLgogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5pbmcgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmaW5lZCAmJiAhdGhpcy5kZWZpbmVFbWl0dGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRW1pdHRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVmaW5lZCcsIHRoaXMuZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRW1pdENvbXBsZXRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgY2FsbFBsdWdpbjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMubWFwLAogICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkLAogICAgICAgICAgICAgICAgICAgIC8vTWFwIGFscmVhZHkgbm9ybWFsaXplZCB0aGUgcHJlZml4LgogICAgICAgICAgICAgICAgICAgIHBsdWdpbk1hcCA9IG1ha2VNb2R1bGVNYXAobWFwLnByZWZpeCk7CgogICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGlzIHBsdWdpbiwgc28gaXQKICAgICAgICAgICAgICAgIC8vY2FuIGJlIHRyYWNlZCBmb3IgY3ljbGVzLgogICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2gocGx1Z2luTWFwKTsKCiAgICAgICAgICAgICAgICBvbihwbHVnaW5NYXAsICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAocGx1Z2luKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxvYWQsIG5vcm1hbGl6ZWRNYXAsIG5vcm1hbGl6ZWRNb2QsCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZUlkID0gZ2V0T3duKGJ1bmRsZXNNYXAsIHRoaXMubWFwLmlkKSwKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHRoaXMubWFwLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5hbWUgPSB0aGlzLm1hcC5wYXJlbnRNYXAgPyB0aGlzLm1hcC5wYXJlbnRNYXAubmFtZSA6IG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUobWFwLnBhcmVudE1hcCwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy9JZiBjdXJyZW50IG1hcCBpcyBub3Qgbm9ybWFsaXplZCwgd2FpdCBmb3IgdGhhdAogICAgICAgICAgICAgICAgICAgIC8vbm9ybWFsaXplZCBuYW1lIHRvIGxvYWQgaW5zdGVhZCBvZiBjb250aW51aW5nLgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC51bm5vcm1hbGl6ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgdGhlIElEIGlmIHRoZSBwbHVnaW4gYWxsb3dzIGl0LgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLm5vcm1hbGl6ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBsdWdpbi5ub3JtYWxpemUobmFtZSwgZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJlZml4IGFuZCBuYW1lIHNob3VsZCBhbHJlYWR5IGJlIG5vcm1hbGl6ZWQsIG5vIG5lZWQKICAgICAgICAgICAgICAgICAgICAgICAgLy9mb3IgYXBwbHlpbmcgbWFwIGNvbmZpZyBhZ2FpbiBlaXRoZXIuCiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNYXAgPSBtYWtlTW9kdWxlTWFwKG1hcC5wcmVmaXggKyAnIScgKyBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5wYXJlbnRNYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICBvbihub3JtYWxpemVkTWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLm5vcm1hbGl6ZWRNYXAgPSBub3JtYWxpemVkTWFwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdChbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0sIG51bGwsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBub3JtYWxpemVkTWFwLmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRNb2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhpcyBwbHVnaW4sIHNvIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcy5wdXNoKG5vcm1hbGl6ZWRNYXApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNb2Qub24oJ2Vycm9yJywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNb2QuZW5hYmxlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vSWYgYSBwYXRocyBjb25maWcsIHRoZW4ganVzdCBsb2FkIHRoYXQgZmlsZSBpbnN0ZWFkIHRvCiAgICAgICAgICAgICAgICAgICAgLy9yZXNvbHZlIHRoZSBwbHVnaW4sIGFzIGl0IGlzIGJ1aWx0IGludG8gdGhhdCBwYXRocyBsYXllci4KICAgICAgICAgICAgICAgICAgICBpZiAoYnVuZGxlSWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAudXJsID0gY29udGV4dC5uYW1lVG9VcmwoYnVuZGxlSWQpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbG9hZCA9IGJpbmQodGhpcywgZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdChbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0sIG51bGwsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIGxvYWQuZXJyb3IgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gZXJyOwogICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1vZHVsZXMgPSBbaWRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9SZW1vdmUgdGVtcCB1bm5vcm1hbGl6ZWQgbW9kdWxlcyBmb3IgdGhpcyBtb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vc2luY2UgdGhleSB3aWxsIG5ldmVyIGJlIHJlc29sdmVkIG90aGVyd2lzZSBub3cuCiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5LCBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLm1hcC5pZC5pbmRleE9mKGlkICsgJ191bm5vcm1hbGl6ZWQnKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkobW9kLm1hcC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAvL0FsbG93IHBsdWdpbnMgdG8gbG9hZCBvdGhlciBjb2RlIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgdGhlCiAgICAgICAgICAgICAgICAgICAgLy9jb250ZXh0IG9yIGhvdyB0byAnY29tcGxldGUnIHRoZSBsb2FkLgogICAgICAgICAgICAgICAgICAgIGxvYWQuZnJvbVRleHQgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh0ZXh0LCB0ZXh0QWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qanNsaW50IGV2aWw6IHRydWUgKi8KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZHVsZU5hbWUgPSBtYXAubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU1hcCA9IG1ha2VNb2R1bGVNYXAobW9kdWxlTmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNJbnRlcmFjdGl2ZSA9IHVzZUludGVyYWN0aXZlOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9BcyBvZiAyLjEuMCwgc3VwcG9ydCBqdXN0IHBhc3NpbmcgdGhlIHRleHQsIHRvIHJlaW5mb3JjZQogICAgICAgICAgICAgICAgICAgICAgICAvL2Zyb21UZXh0IG9ubHkgYmVpbmcgY2FsbGVkIG9uY2UgcGVyIHJlc291cmNlLiBTdGlsbAogICAgICAgICAgICAgICAgICAgICAgICAvL3N1cHBvcnQgb2xkIHN0eWxlIG9mIHBhc3NpbmcgbW9kdWxlTmFtZSBidXQgZGlzY2FyZAogICAgICAgICAgICAgICAgICAgICAgICAvL3RoYXQgbW9kdWxlTmFtZSBpbiBmYXZvciBvZiB0aGUgaW50ZXJuYWwgcmVmLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dEFsdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHRBbHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vVHVybiBvZmYgaW50ZXJhY3RpdmUgc2NyaXB0IG1hdGNoaW5nIGZvciBJRSBmb3IgYW55IGRlZmluZQogICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGxzIGluIHRoZSB0ZXh0LCB0aGVuIHR1cm4gaXQgYmFjayBvbiBhdCB0aGUgZW5kLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vUHJpbWUgdGhlIHN5c3RlbSBieSBjcmVhdGluZyBhIG1vZHVsZSBpbnN0YW5jZSBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgLy9pdC4KICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TW9kdWxlKG1vZHVsZU1hcCk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL1RyYW5zZmVyIGFueSBjb25maWcgdG8gdGhpcyBvdGhlciBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQcm9wKGNvbmZpZy5jb25maWcsIGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmNvbmZpZ1ttb2R1bGVOYW1lXSA9IGNvbmZpZy5jb25maWdbaWRdOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLmV4ZWModGV4dCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignZnJvbXRleHRldmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zyb21UZXh0IGV2YWwgZm9yICcgKyBpZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBmYWlsZWQ6ICcgKyBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnRlcmFjdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL01hcmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoZSBwbHVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChtb2R1bGVNYXApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TdXBwb3J0IGFub255bW91cyBtb2R1bGVzLgogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQmluZCB0aGUgdmFsdWUgb2YgdGhhdCBtb2R1bGUgdG8gdGhlIHZhbHVlIGZvciB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVzb3VyY2UgSUQuCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUmVxdWlyZShbbW9kdWxlTmFtZV0sIGxvYWQpOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAvL1VzZSBwYXJlbnROYW1lIGhlcmUgc2luY2UgdGhlIHBsdWdpbidzIG5hbWUgaXMgbm90IHJlbGlhYmxlLAogICAgICAgICAgICAgICAgICAgIC8vY291bGQgYmUgc29tZSB3ZWlyZCBzdHJpbmcgd2l0aCBubyBwYXRoIHRoYXQgYWN0dWFsbHkgd2FudHMgdG8KICAgICAgICAgICAgICAgICAgICAvL3JlZmVyZW5jZSB0aGUgcGFyZW50TmFtZSdzIHBhdGguCiAgICAgICAgICAgICAgICAgICAgcGx1Z2luLmxvYWQobWFwLm5hbWUsIGxvY2FsUmVxdWlyZSwgbG9hZCwgY29uZmlnKTsKICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShwbHVnaW5NYXAsIHRoaXMpOwogICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5NYXBzW3BsdWdpbk1hcC5pZF0gPSBwbHVnaW5NYXA7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBlbmFibGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGVuYWJsZWRSZWdpc3RyeVt0aGlzLm1hcC5pZF0gPSB0aGlzOwogICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAvL1NldCBmbGFnIG1lbnRpb25pbmcgdGhhdCB0aGUgbW9kdWxlIGlzIGVuYWJsaW5nLAogICAgICAgICAgICAgICAgLy9zbyB0aGF0IGltbWVkaWF0ZSBjYWxscyB0byB0aGUgZGVmaW5lZCBjYWxsYmFja3MKICAgICAgICAgICAgICAgIC8vZm9yIGRlcGVuZGVuY2llcyBkbyBub3QgdHJpZ2dlciBpbmFkdmVydGVudCBsb2FkCiAgICAgICAgICAgICAgICAvL3dpdGggdGhlIGRlcENvdW50IHN0aWxsIGJlaW5nIHplcm8uCiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsaW5nID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAvL0VuYWJsZSBlYWNoIGRlcGVuZGVuY3kKICAgICAgICAgICAgICAgIGVhY2godGhpcy5kZXBNYXBzLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChkZXBNYXAsIGkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQsIG1vZCwgaGFuZGxlcjsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZXBNYXAgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vRGVwZW5kZW5jeSBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBkZXBNYXAKICAgICAgICAgICAgICAgICAgICAgICAgLy9hbmQgd2lyZWQgdXAgdG8gdGhpcyBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgICAgIGRlcE1hcCA9IG1ha2VNb2R1bGVNYXAoZGVwTWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1hcC5pc0RlZmluZSA/IHRoaXMubWFwIDogdGhpcy5tYXAucGFyZW50TWFwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5za2lwTWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzW2ldID0gZGVwTWFwOwoKICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGdldE93bihoYW5kbGVycywgZGVwTWFwLmlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcEV4cG9ydHNbaV0gPSBoYW5kbGVyKHRoaXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcENvdW50ICs9IDE7CgogICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZGVwRXhwb3J0cykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudW5kZWZlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRGVwKGksIGRlcEV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOwogICAgICAgICAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lcnJiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdlcnJvcicsIGJpbmQodGhpcywgdGhpcy5lcnJiYWNrKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGRpcmVjdCBlcnJiYWNrIG9uIHRoaXMgbW9kdWxlLCBidXQgc29tZXRoaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbHNlIGlzIGxpc3RlbmluZyBmb3IgZXJyb3JzLCBzbyBiZSBzdXJlIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9wYWdhdGUgdGhlIGVycm9yIGNvcnJlY3RseS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uKGRlcE1hcCwgJ2Vycm9yJywgYmluZCh0aGlzLCBmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWQgPSBkZXBNYXAuaWQ7CiAgICAgICAgICAgICAgICAgICAgbW9kID0gcmVnaXN0cnlbaWRdOwoKICAgICAgICAgICAgICAgICAgICAvL1NraXAgc3BlY2lhbCBtb2R1bGVzIGxpa2UgJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnCiAgICAgICAgICAgICAgICAgICAgLy9BbHNvLCBkb24ndCBjYWxsIGVuYWJsZSBpZiBpdCBpcyBhbHJlYWR5IGVuYWJsZWQsCiAgICAgICAgICAgICAgICAgICAgLy9pbXBvcnRhbnQgaW4gY2lyY3VsYXIgZGVwZW5kZW5jeSBjYXNlcy4KICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoaGFuZGxlcnMsIGlkKSAmJiBtb2QgJiYgIW1vZC5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlKGRlcE1hcCwgdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgIC8vRW5hYmxlIGVhY2ggcGx1Z2luIHRoYXQgaXMgdXNlZCBpbgogICAgICAgICAgICAgICAgLy9hIGRlcGVuZGVuY3kKICAgICAgICAgICAgICAgIGVhY2hQcm9wKHRoaXMucGx1Z2luTWFwcywgYmluZCh0aGlzLCBmdW5jdGlvbiAocGx1Z2luTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgcGx1Z2luTWFwLmlkKTsKICAgICAgICAgICAgICAgICAgICBpZiAobW9kICYmICFtb2QuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShwbHVnaW5NYXAsIHRoaXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsaW5nID0gZmFsc2U7CgogICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgb246IGZ1bmN0aW9uIChuYW1lLCBjYikgewogICAgICAgICAgICAgICAgdmFyIGNicyA9IHRoaXMuZXZlbnRzW25hbWVdOwogICAgICAgICAgICAgICAgaWYgKCFjYnMpIHsKICAgICAgICAgICAgICAgICAgICBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXSA9IFtdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2JzLnB1c2goY2IpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZW1pdDogZnVuY3Rpb24gKG5hbWUsIGV2dCkgewogICAgICAgICAgICAgICAgZWFjaCh0aGlzLmV2ZW50c1tuYW1lXSwgZnVuY3Rpb24gKGNiKSB7CiAgICAgICAgICAgICAgICAgICAgY2IoZXZ0KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdlcnJvcicpIHsKICAgICAgICAgICAgICAgICAgICAvL05vdyB0aGF0IHRoZSBlcnJvciBoYW5kbGVyIHdhcyB0cmlnZ2VyZWQsIHJlbW92ZQogICAgICAgICAgICAgICAgICAgIC8vdGhlIGxpc3RlbmVycywgc2luY2UgdGhpcyBicm9rZW4gTW9kdWxlIGluc3RhbmNlCiAgICAgICAgICAgICAgICAgICAgLy9jYW4gc3RheSBhcm91bmQgZm9yIGEgd2hpbGUgaW4gdGhlIHJlZ2lzdHJ5LgogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmV2ZW50c1tuYW1lXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGZ1bmN0aW9uIGNhbGxHZXRNb2R1bGUoYXJncykgewogICAgICAgICAgICAvL1NraXAgbW9kdWxlcyBhbHJlYWR5IGRlZmluZWQuCiAgICAgICAgICAgIGlmICghaGFzUHJvcChkZWZpbmVkLCBhcmdzWzBdKSkgewogICAgICAgICAgICAgICAgZ2V0TW9kdWxlKG1ha2VNb2R1bGVNYXAoYXJnc1swXSwgbnVsbCwgdHJ1ZSkpLmluaXQoYXJnc1sxXSwgYXJnc1syXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGZ1bmMsIG5hbWUsIGllTmFtZSkgewogICAgICAgICAgICAvL0Zhdm9yIGRldGFjaEV2ZW50IGJlY2F1c2Ugb2YgSUU5CiAgICAgICAgICAgIC8vaXNzdWUsIHNlZSBhdHRhY2hFdmVudC9hZGRFdmVudExpc3RlbmVyIGNvbW1lbnQgZWxzZXdoZXJlCiAgICAgICAgICAgIC8vaW4gdGhpcyBmaWxlLgogICAgICAgICAgICBpZiAobm9kZS5kZXRhY2hFdmVudCAmJiAhaXNPcGVyYSkgewogICAgICAgICAgICAgICAgLy9Qcm9iYWJseSBJRS4gSWYgbm90IGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IsIHdoaWNoIHdpbGwgYmUKICAgICAgICAgICAgICAgIC8vdXNlZnVsIHRvIGtub3cuCiAgICAgICAgICAgICAgICBpZiAoaWVOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgbm9kZS5kZXRhY2hFdmVudChpZU5hbWUsIGZ1bmMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmMsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogR2l2ZW4gYW4gZXZlbnQgZnJvbSBhIHNjcmlwdCBub2RlLCBnZXQgdGhlIHJlcXVpcmVqcyBpbmZvIGZyb20gaXQsCiAgICAgICAgICogYW5kIHRoZW4gcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIG9uIHRoZSBub2RlLgogICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2dAogICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9CiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0U2NyaXB0RGF0YShldnQpIHsKICAgICAgICAgICAgLy9Vc2luZyBjdXJyZW50VGFyZ2V0IGluc3RlYWQgb2YgdGFyZ2V0IGZvciBGaXJlZm94IDIuMCdzIHNha2UuIE5vdAogICAgICAgICAgICAvL2FsbCBvbGQgYnJvd3NlcnMgd2lsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIG9uZSB3YXMgZWFzeSBlbm91Z2gKICAgICAgICAgICAgLy90byBzdXBwb3J0IGFuZCBzdGlsbCBtYWtlcyBzZW5zZS4KICAgICAgICAgICAgdmFyIG5vZGUgPSBldnQuY3VycmVudFRhcmdldCB8fCBldnQuc3JjRWxlbWVudDsKCiAgICAgICAgICAgIC8vUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb25jZSBoZXJlLgogICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihub2RlLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCwgJ2xvYWQnLCAnb25yZWFkeXN0YXRlY2hhbmdlJyk7CiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGNvbnRleHQub25TY3JpcHRFcnJvciwgJ2Vycm9yJyk7CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgbm9kZTogbm9kZSwKICAgICAgICAgICAgICAgIGlkOiBub2RlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKQogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gaW50YWtlRGVmaW5lcygpIHsKICAgICAgICAgICAgdmFyIGFyZ3M7CgogICAgICAgICAgICAvL0FueSBkZWZpbmVkIG1vZHVsZXMgaW4gdGhlIGdsb2JhbCBxdWV1ZSwgaW50YWtlIHRoZW0gbm93LgogICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKCiAgICAgICAgICAgIC8vTWFrZSBzdXJlIGFueSByZW1haW5pbmcgZGVmUXVldWUgaXRlbXMgZ2V0IHByb3Blcmx5IHByb2Nlc3NlZC4KICAgICAgICAgICAgd2hpbGUgKGRlZlF1ZXVlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgYXJncyA9IGRlZlF1ZXVlLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignbWlzbWF0Y2gnLCAnTWlzbWF0Y2hlZCBhbm9ueW1vdXMgZGVmaW5lKCkgbW9kdWxlOiAnICsKICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1thcmdzLmxlbmd0aCAtIDFdKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vYXJncyBhcmUgaWQsIGRlcHMsIGZhY3RvcnkuIFNob3VsZCBiZSBub3JtYWxpemVkIGJ5IHRoZQogICAgICAgICAgICAgICAgICAgIC8vZGVmaW5lKCkgZnVuY3Rpb24uCiAgICAgICAgICAgICAgICAgICAgY2FsbEdldE1vZHVsZShhcmdzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwID0ge307CiAgICAgICAgfQoKICAgICAgICBjb250ZXh0ID0gewogICAgICAgICAgICBjb25maWc6IGNvbmZpZywKICAgICAgICAgICAgY29udGV4dE5hbWU6IGNvbnRleHROYW1lLAogICAgICAgICAgICByZWdpc3RyeTogcmVnaXN0cnksCiAgICAgICAgICAgIGRlZmluZWQ6IGRlZmluZWQsCiAgICAgICAgICAgIHVybEZldGNoZWQ6IHVybEZldGNoZWQsCiAgICAgICAgICAgIGRlZlF1ZXVlOiBkZWZRdWV1ZSwKICAgICAgICAgICAgZGVmUXVldWVNYXA6IHt9LAogICAgICAgICAgICBNb2R1bGU6IE1vZHVsZSwKICAgICAgICAgICAgbWFrZU1vZHVsZU1hcDogbWFrZU1vZHVsZU1hcCwKICAgICAgICAgICAgbmV4dFRpY2s6IHJlcS5uZXh0VGljaywKICAgICAgICAgICAgb25FcnJvcjogb25FcnJvciwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBTZXQgYSBjb25maWd1cmF0aW9uIGZvciB0aGUgY29udGV4dC4KICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyBjb25maWcgb2JqZWN0IHRvIGludGVncmF0ZS4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNvbmZpZ3VyZTogZnVuY3Rpb24gKGNmZykgewogICAgICAgICAgICAgICAgLy9NYWtlIHN1cmUgdGhlIGJhc2VVcmwgZW5kcyBpbiBhIHNsYXNoLgogICAgICAgICAgICAgICAgaWYgKGNmZy5iYXNlVXJsKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNmZy5iYXNlVXJsLmNoYXJBdChjZmcuYmFzZVVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNmZy5iYXNlVXJsICs9ICcvJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ29udmVydCBvbGQgc3R5bGUgdXJsQXJncyBzdHJpbmcgdG8gYSBmdW5jdGlvbi4KICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2ZnLnVybEFyZ3MgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHVybEFyZ3MgPSBjZmcudXJsQXJnczsKICAgICAgICAgICAgICAgICAgICBjZmcudXJsQXJncyA9IGZ1bmN0aW9uKGlkLCB1cmwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyB1cmxBcmdzOwogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9TYXZlIG9mZiB0aGUgcGF0aHMgc2luY2UgdGhleSByZXF1aXJlIHNwZWNpYWwgcHJvY2Vzc2luZywKICAgICAgICAgICAgICAgIC8vdGhleSBhcmUgYWRkaXRpdmUuCiAgICAgICAgICAgICAgICB2YXIgc2hpbSA9IGNvbmZpZy5zaGltLAogICAgICAgICAgICAgICAgICAgIG9ianMgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVzOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcDogdHJ1ZQogICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKICAgICAgICAgICAgICAgICAgICBpZiAob2Jqc1twcm9wXSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZ1twcm9wXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnW3Byb3BdID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW4oY29uZmlnW3Byb3BdLCB2YWx1ZSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnW3Byb3BdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9SZXZlcnNlIG1hcCB0aGUgYnVuZGxlcwogICAgICAgICAgICAgICAgaWYgKGNmZy5idW5kbGVzKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLmJ1bmRsZXMsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgewogICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHZhbHVlLCBmdW5jdGlvbiAodikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IHByb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVzTWFwW3ZdID0gcHJvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9NZXJnZSBzaGltCiAgICAgICAgICAgICAgICBpZiAoY2ZnLnNoaW0pIHsKICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChjZmcuc2hpbSwgZnVuY3Rpb24gKHZhbHVlLCBpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUgc3RydWN0dXJlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwczogdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh2YWx1ZS5leHBvcnRzIHx8IHZhbHVlLmluaXQpICYmICF2YWx1ZS5leHBvcnRzRm4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmV4cG9ydHNGbiA9IGNvbnRleHQubWFrZVNoaW1FeHBvcnRzKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBzaGltW2lkXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaGltID0gc2hpbTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0FkanVzdCBwYWNrYWdlcyBpZiBuZWNlc3NhcnkuCiAgICAgICAgICAgICAgICBpZiAoY2ZnLnBhY2thZ2VzKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaChjZmcucGFja2FnZXMsIGZ1bmN0aW9uIChwa2dPYmopIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uLCBuYW1lOwoKICAgICAgICAgICAgICAgICAgICAgICAgcGtnT2JqID0gdHlwZW9mIHBrZ09iaiA9PT0gJ3N0cmluZycgPyB7bmFtZTogcGtnT2JqfSA6IHBrZ09iajsKCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwa2dPYmoubmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBwa2dPYmoubG9jYXRpb247CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnBhdGhzW25hbWVdID0gcGtnT2JqLmxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1NhdmUgcG9pbnRlciB0byBtYWluIG1vZHVsZSBJRCBmb3IgcGtnIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVtb3ZlIGxlYWRpbmcgZG90IGluIG1haW4sIHNvIG1haW4gcGF0aHMgYXJlIG5vcm1hbGl6ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYW5kIHJlbW92ZSBhbnkgdHJhaWxpbmcgLmpzLCBzaW5jZSBkaWZmZXJlbnQgcGFja2FnZQogICAgICAgICAgICAgICAgICAgICAgICAvL2VudnMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnM6IHNvbWUgdXNlIGEgbW9kdWxlIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vc29tZSB1c2UgYSBmaWxlIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wa2dzW25hbWVdID0gcGtnT2JqLm5hbWUgKyAnLycgKyAocGtnT2JqLm1haW4gfHwgJ21haW4nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoY3VyckRpclJlZ0V4cCwgJycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vSWYgdGhlcmUgYXJlIGFueSAid2FpdGluZyB0byBleGVjdXRlIiBtb2R1bGVzIGluIHRoZSByZWdpc3RyeSwKICAgICAgICAgICAgICAgIC8vdXBkYXRlIHRoZSBtYXBzIGZvciB0aGVtLCBzaW5jZSB0aGVpciBpbmZvLCBsaWtlIFVSTHMgdG8gbG9hZCwKICAgICAgICAgICAgICAgIC8vbWF5IGhhdmUgY2hhbmdlZC4KICAgICAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5LCBmdW5jdGlvbiAobW9kLCBpZCkgewogICAgICAgICAgICAgICAgICAgIC8vSWYgbW9kdWxlIGFscmVhZHkgaGFzIGluaXQgY2FsbGVkLCBzaW5jZSBpdCBpcyB0b28KICAgICAgICAgICAgICAgICAgICAvL2xhdGUgdG8gbW9kaWZ5IHRoZW0sIGFuZCBpZ25vcmUgdW5ub3JtYWxpemVkIG9uZXMKICAgICAgICAgICAgICAgICAgICAvL3NpbmNlIHRoZXkgYXJlIHRyYW5zaWVudC4KICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgIW1vZC5tYXAudW5ub3JtYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5tYXAgPSBtYWtlTW9kdWxlTWFwKGlkLCBudWxsLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL0lmIGEgZGVwcyBhcnJheSBvciBhIGNvbmZpZyBjYWxsYmFjayBpcyBzcGVjaWZpZWQsIHRoZW4gY2FsbAogICAgICAgICAgICAgICAgLy9yZXF1aXJlIHdpdGggdGhvc2UgYXJncy4gVGhpcyBpcyB1c2VmdWwgd2hlbiByZXF1aXJlIGlzIGRlZmluZWQgYXMgYQogICAgICAgICAgICAgICAgLy9jb25maWcgb2JqZWN0IGJlZm9yZSByZXF1aXJlLmpzIGlzIGxvYWRlZC4KICAgICAgICAgICAgICAgIGlmIChjZmcuZGVwcyB8fCBjZmcuY2FsbGJhY2spIHsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUoY2ZnLmRlcHMgfHwgW10sIGNmZy5jYWxsYmFjayk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBtYWtlU2hpbUV4cG9ydHM6IGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJldDsKICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuaW5pdCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB2YWx1ZS5pbml0LmFwcGx5KGdsb2JhbCwgYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCB8fCAodmFsdWUuZXhwb3J0cyAmJiBnZXRHbG9iYWwodmFsdWUuZXhwb3J0cykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGZuOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbWFrZVJlcXVpcmU6IGZ1bmN0aW9uIChyZWxNYXAsIG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxvY2FsUmVxdWlyZShkZXBzLCBjYWxsYmFjaywgZXJyYmFjaykgewogICAgICAgICAgICAgICAgICAgIHZhciBpZCwgbWFwLCByZXF1aXJlTW9kOwoKICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVCdWlsZENhbGxiYWNrICYmIGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLl9fcmVxdWlyZUpzQnVpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZXBzID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSW52YWxpZCBjYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ3JlcXVpcmVhcmdzJywgJ0ludmFsaWQgcmVxdWlyZSBjYWxsJyksIGVycmJhY2spOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHJlcXVpcmV8ZXhwb3J0c3xtb2R1bGUgYXJlIHJlcXVlc3RlZCwgZ2V0IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvL3ZhbHVlIGZvciB0aGVtIGZyb20gdGhlIHNwZWNpYWwgaGFuZGxlcnMuIENhdmVhdDoKICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG9ubHkgd29ya3Mgd2hpbGUgbW9kdWxlIGlzIGJlaW5nIGRlZmluZWQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxNYXAgJiYgaGFzUHJvcChoYW5kbGVycywgZGVwcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyc1tkZXBzXShyZWdpc3RyeVtyZWxNYXAuaWRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TeW5jaHJvbm91cyBhY2Nlc3MgdG8gb25lIG1vZHVsZS4gSWYgcmVxdWlyZS5nZXQgaXMKICAgICAgICAgICAgICAgICAgICAgICAgLy9hdmFpbGFibGUgKGFzIGluIHRoZSBOb2RlIGFkYXB0ZXIpLCBwcmVmZXIgdGhhdC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5nZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXEuZ2V0KGNvbnRleHQsIGRlcHMsIHJlbE1hcCwgbG9jYWxSZXF1aXJlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgbW9kdWxlIG5hbWUsIGlmIGl0IGNvbnRhaW5zIC4gb3IgLi4KICAgICAgICAgICAgICAgICAgICAgICAgbWFwID0gbWFrZU1vZHVsZU1hcChkZXBzLCByZWxNYXAsIGZhbHNlLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBtYXAuaWQ7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ25vdGxvYWRlZCcsICdNb2R1bGUgbmFtZSAiJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIiBoYXMgbm90IGJlZW4gbG9hZGVkIHlldCBmb3IgY29udGV4dDogJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TmFtZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVsTWFwID8gJycgOiAnLiBVc2UgcmVxdWlyZShbXSknKSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbmVkW2lkXTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vR3JhYiBkZWZpbmVzIHdhaXRpbmcgaW4gdGhlIGdsb2JhbCBxdWV1ZS4KICAgICAgICAgICAgICAgICAgICBpbnRha2VEZWZpbmVzKCk7CgogICAgICAgICAgICAgICAgICAgIC8vTWFyayBhbGwgdGhlIGRlcGVuZGVuY2llcyBhcyBuZWVkaW5nIHRvIGJlIGxvYWRlZC4KICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Tb21lIGRlZmluZXMgY291bGQgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvL3JlcXVpcmUgY2FsbCwgY29sbGVjdCB0aGVtLgogICAgICAgICAgICAgICAgICAgICAgICBpbnRha2VEZWZpbmVzKCk7CgogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kID0gZ2V0TW9kdWxlKG1ha2VNb2R1bGVNYXAobnVsbCwgcmVsTWFwKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL1N0b3JlIGlmIG1hcCBjb25maWcgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhpcyByZXF1aXJlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FsbCBmb3IgZGVwZW5kZW5jaWVzLgogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kLnNraXBNYXAgPSBvcHRpb25zLnNraXBNYXA7CgogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kLmluaXQoZGVwcywgY2FsbGJhY2ssIGVycmJhY2ssIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxSZXF1aXJlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG1peGluKGxvY2FsUmVxdWlyZSwgewogICAgICAgICAgICAgICAgICAgIGlzQnJvd3NlcjogaXNCcm93c2VyLAoKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyBhIG1vZHVsZSBuYW1lICsgLmV4dGVuc2lvbiBpbnRvIGFuIFVSTCBwYXRoLgogICAgICAgICAgICAgICAgICAgICAqICpSZXF1aXJlcyogdGhlIHVzZSBvZiBhIG1vZHVsZSBuYW1lLiBJdCBkb2VzIG5vdCBzdXBwb3J0IHVzaW5nCiAgICAgICAgICAgICAgICAgICAgICogcGxhaW4gVVJMcyBsaWtlIG5hbWVUb1VybC4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICB0b1VybDogZnVuY3Rpb24gKG1vZHVsZU5hbWVQbHVzRXh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IG1vZHVsZU5hbWVQbHVzRXh0Lmxhc3RJbmRleE9mKCcuJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50ID0gbW9kdWxlTmFtZVBsdXNFeHQuc3BsaXQoJy8nKVswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVsYXRpdmUgPSBzZWdtZW50ID09PSAnLicgfHwgc2VnbWVudCA9PT0gJy4uJzsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vSGF2ZSBhIGZpbGUgZXh0ZW5zaW9uIGFsaWFzLCBhbmQgaXQgaXMgbm90IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvL2RvdHMgZnJvbSBhIHJlbGF0aXZlIHBhdGguCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEgJiYgKCFpc1JlbGF0aXZlIHx8IGluZGV4ID4gMSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dCA9IG1vZHVsZU5hbWVQbHVzRXh0LnN1YnN0cmluZyhpbmRleCwgbW9kdWxlTmFtZVBsdXNFeHQubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWVQbHVzRXh0ID0gbW9kdWxlTmFtZVBsdXNFeHQuc3Vic3RyaW5nKDAsIGluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQubmFtZVRvVXJsKG5vcm1hbGl6ZShtb2R1bGVOYW1lUGx1c0V4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsTWFwICYmIHJlbE1hcC5pZCwgdHJ1ZSksIGV4dCwgIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIGRlZmluZWQ6IGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzUHJvcChkZWZpbmVkLCBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIGZhbHNlLCB0cnVlKS5pZCk7CiAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkOiBmdW5jdGlvbiAoaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIGZhbHNlLCB0cnVlKS5pZDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgaWQpIHx8IGhhc1Byb3AocmVnaXN0cnksIGlkKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL09ubHkgYWxsb3cgdW5kZWYgb24gdG9wIGxldmVsIHJlcXVpcmUgY2FsbHMKICAgICAgICAgICAgICAgIGlmICghcmVsTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlLnVuZGVmID0gZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vQmluZCBhbnkgd2FpdGluZyBkZWZpbmUoKSBjYWxscyB0byB0aGlzIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZml4IGZvciAjNDA4CiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hcCA9IG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwgdHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZC51bmRlZmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU2NyaXB0KGlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkZWZpbmVkW2lkXTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHVybEZldGNoZWRbbWFwLnVybF07CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB1bmRlZkV2ZW50c1tpZF07CgogICAgICAgICAgICAgICAgICAgICAgICAvL0NsZWFuIHF1ZXVlZCBkZWZpbmVzIHRvby4gR28gYmFja3dhcmRzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vaW4gYXJyYXkgc28gdGhhdCB0aGUgc3BsaWNlcyBkbyBub3QKICAgICAgICAgICAgICAgICAgICAgICAgLy9tZXNzIHVwIHRoZSBpdGVyYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2hSZXZlcnNlKGRlZlF1ZXVlLCBmdW5jdGlvbihhcmdzLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZRdWV1ZS5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY29udGV4dC5kZWZRdWV1ZU1hcFtpZF07CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hvbGQgb24gdG8gbGlzdGVuZXJzIGluIGNhc2UgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL21vZHVsZSB3aWxsIGJlIGF0dGVtcHRlZCB0byBiZSByZWxvYWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91c2luZyBhIGRpZmZlcmVudCBjb25maWcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV2ZW50cy5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZFdmVudHNbaWRdID0gbW9kLmV2ZW50czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KGlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsUmVxdWlyZTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDYWxsZWQgdG8gZW5hYmxlIGEgbW9kdWxlIGlmIGl0IGlzIHN0aWxsIGluIHRoZSByZWdpc3RyeQogICAgICAgICAgICAgKiBhd2FpdGluZyBlbmFibGVtZW50LiBBIHNlY29uZCBhcmcsIHBhcmVudCwgdGhlIHBhcmVudCBtb2R1bGUsCiAgICAgICAgICAgICAqIGlzIHBhc3NlZCBpbiBmb3IgY29udGV4dCwgd2hlbiB0aGlzIG1ldGhvZCBpcyBvdmVycmlkZGVuIGJ5CiAgICAgICAgICAgICAqIHRoZSBvcHRpbWl6ZXIuIE5vdCBzaG93biBoZXJlIHRvIGtlZXAgY29kZSBjb21wYWN0LgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiAoZGVwTWFwKSB7CiAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBkZXBNYXAuaWQpOwogICAgICAgICAgICAgICAgaWYgKG1vZCkgewogICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShkZXBNYXApLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIEludGVybmFsIG1ldGhvZCB1c2VkIGJ5IGVudmlyb25tZW50IGFkYXB0ZXJzIHRvIGNvbXBsZXRlIGEgbG9hZCBldmVudC4KICAgICAgICAgICAgICogQSBsb2FkIGV2ZW50IGNvdWxkIGJlIGEgc2NyaXB0IGxvYWQgb3IganVzdCBhIGxvYWQgcGFzcyBmcm9tIGEgc3luY2hyb25vdXMKICAgICAgICAgICAgICogbG9hZCBjYWxsLgogICAgICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbW9kdWxlTmFtZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRvIHBvdGVudGlhbGx5IGNvbXBsZXRlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY29tcGxldGVMb2FkOiBmdW5jdGlvbiAobW9kdWxlTmFtZSkgewogICAgICAgICAgICAgICAgdmFyIGZvdW5kLCBhcmdzLCBtb2QsCiAgICAgICAgICAgICAgICAgICAgc2hpbSA9IGdldE93bihjb25maWcuc2hpbSwgbW9kdWxlTmFtZSkgfHwge30sCiAgICAgICAgICAgICAgICAgICAgc2hFeHBvcnRzID0gc2hpbS5leHBvcnRzOwoKICAgICAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwoKICAgICAgICAgICAgICAgIHdoaWxlIChkZWZRdWV1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBhcmdzID0gZGVmUXVldWUuc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzBdID0gbW9kdWxlTmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBhbHJlYWR5IGZvdW5kIGFuIGFub255bW91cyBtb2R1bGUgYW5kIGJvdW5kIGl0CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdG8gdGhpcyBuYW1lLCB0aGVuIHRoaXMgaXMgc29tZSBvdGhlciBhbm9uIG1vZHVsZQogICAgICAgICAgICAgICAgICAgICAgICAvL3dhaXRpbmcgZm9yIGl0cyBjb21wbGV0ZUxvYWQgdG8gZmlyZS4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcmdzWzBdID09PSBtb2R1bGVOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vRm91bmQgbWF0Y2hpbmcgZGVmaW5lIGNhbGwgZm9yIHRoaXMgc2NyaXB0IQogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBjYWxsR2V0TW9kdWxlKGFyZ3MpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcCA9IHt9OwoKICAgICAgICAgICAgICAgIC8vRG8gdGhpcyBhZnRlciB0aGUgY3ljbGUgb2YgY2FsbEdldE1vZHVsZSBpbiBjYXNlIHRoZSByZXN1bHQKICAgICAgICAgICAgICAgIC8vb2YgdGhvc2UgY2FsbHMvaW5pdCBjYWxscyBjaGFuZ2VzIHRoZSByZWdpc3RyeS4KICAgICAgICAgICAgICAgIG1vZCA9IGdldE93bihyZWdpc3RyeSwgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiAhaGFzUHJvcChkZWZpbmVkLCBtb2R1bGVOYW1lKSAmJiBtb2QgJiYgIW1vZC5pbml0ZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmVuZm9yY2VEZWZpbmUgJiYgKCFzaEV4cG9ydHMgfHwgIWdldEdsb2JhbChzaEV4cG9ydHMpKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGF0aEZhbGxiYWNrKG1vZHVsZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ25vZGVmaW5lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05vIGRlZmluZSBjYWxsIGZvciAnICsgbW9kdWxlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvL0Egc2NyaXB0IHRoYXQgZG9lcyBub3QgY2FsbCBkZWZpbmUoKSwgc28ganVzdCBzaW11bGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAvL3RoZSBjYWxsIGZvciBpdC4KICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEdldE1vZHVsZShbbW9kdWxlTmFtZSwgKHNoaW0uZGVwcyB8fCBbXSksIHNoaW0uZXhwb3J0c0ZuXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29udmVydHMgYSBtb2R1bGUgbmFtZSB0byBhIGZpbGUgcGF0aC4gU3VwcG9ydHMgY2FzZXMgd2hlcmUKICAgICAgICAgICAgICogbW9kdWxlTmFtZSBtYXkgYWN0dWFsbHkgYmUganVzdCBhbiBVUkwuCiAgICAgICAgICAgICAqIE5vdGUgdGhhdCBpdCAqKmRvZXMgbm90KiogY2FsbCBub3JtYWxpemUgb24gdGhlIG1vZHVsZU5hbWUsCiAgICAgICAgICAgICAqIGl0IGlzIGFzc3VtZWQgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4gVGhpcyBpcyBhbgogICAgICAgICAgICAgKiBpbnRlcm5hbCBBUEksIG5vdCBhIHB1YmxpYyBvbmUuIFVzZSB0b1VybCBmb3IgdGhlIHB1YmxpYyBBUEkuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBuYW1lVG9Vcmw6IGZ1bmN0aW9uIChtb2R1bGVOYW1lLCBleHQsIHNraXBFeHQpIHsKICAgICAgICAgICAgICAgIHZhciBwYXRocywgc3ltcywgaSwgcGFyZW50TW9kdWxlLCB1cmwsCiAgICAgICAgICAgICAgICAgICAgcGFyZW50UGF0aCwgYnVuZGxlSWQsCiAgICAgICAgICAgICAgICAgICAgcGtnTWFpbiA9IGdldE93bihjb25maWcucGtncywgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgaWYgKHBrZ01haW4pIHsKICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lID0gcGtnTWFpbjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBidW5kbGVJZCA9IGdldE93bihidW5kbGVzTWFwLCBtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgICAgICBpZiAoYnVuZGxlSWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5uYW1lVG9VcmwoYnVuZGxlSWQsIGV4dCwgc2tpcEV4dCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9JZiBhIGNvbG9uIGlzIGluIHRoZSBVUkwsIGl0IGluZGljYXRlcyBhIHByb3RvY29sIGlzIHVzZWQgYW5kIGl0IGlzIGp1c3QKICAgICAgICAgICAgICAgIC8vYW4gVVJMIHRvIGEgZmlsZSwgb3IgaWYgaXQgc3RhcnRzIHdpdGggYSBzbGFzaCwgY29udGFpbnMgYSBxdWVyeSBhcmcgKGkuZS4gPykKICAgICAgICAgICAgICAgIC8vb3IgZW5kcyB3aXRoIC5qcywgdGhlbiBhc3N1bWUgdGhlIHVzZXIgbWVhbnQgdG8gdXNlIGFuIHVybCBhbmQgbm90IGEgbW9kdWxlIGlkLgogICAgICAgICAgICAgICAgLy9UaGUgc2xhc2ggaXMgaW1wb3J0YW50IGZvciBwcm90b2NvbC1sZXNzIFVSTHMgYXMgd2VsbCBhcyBmdWxsIHBhdGhzLgogICAgICAgICAgICAgICAgaWYgKHJlcS5qc0V4dFJlZ0V4cC50ZXN0KG1vZHVsZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgLy9KdXN0IGEgcGxhaW4gcGF0aCwgbm90IG1vZHVsZSBuYW1lIGxvb2t1cCwgc28ganVzdCByZXR1cm4gaXQuCiAgICAgICAgICAgICAgICAgICAgLy9BZGQgZXh0ZW5zaW9uIGlmIGl0IGlzIGluY2x1ZGVkLiBUaGlzIGlzIGEgYml0IHdvbmt5LCBvbmx5IG5vbi0uanMgdGhpbmdzIHBhc3MKICAgICAgICAgICAgICAgICAgICAvL2FuIGV4dGVuc2lvbiwgdGhpcyBtZXRob2QgcHJvYmFibHkgbmVlZHMgdG8gYmUgcmV3b3JrZWQuCiAgICAgICAgICAgICAgICAgICAgdXJsID0gbW9kdWxlTmFtZSArIChleHQgfHwgJycpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL0EgbW9kdWxlIHRoYXQgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgcGF0aC4KICAgICAgICAgICAgICAgICAgICBwYXRocyA9IGNvbmZpZy5wYXRoczsKCiAgICAgICAgICAgICAgICAgICAgc3ltcyA9IG1vZHVsZU5hbWUuc3BsaXQoJy8nKTsKICAgICAgICAgICAgICAgICAgICAvL0ZvciBlYWNoIG1vZHVsZSBuYW1lIHNlZ21lbnQsIHNlZSBpZiB0aGVyZSBpcyBhIHBhdGgKICAgICAgICAgICAgICAgICAgICAvL3JlZ2lzdGVyZWQgZm9yIGl0LiBTdGFydCB3aXRoIG1vc3Qgc3BlY2lmaWMgbmFtZQogICAgICAgICAgICAgICAgICAgIC8vYW5kIHdvcmsgdXAgZnJvbSBpdC4KICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBzeW1zLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRNb2R1bGUgPSBzeW1zLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBnZXRPd24ocGF0aHMsIHBhcmVudE1vZHVsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRQYXRoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIGFuIGFycmF5LCBpdCBtZWFucyB0aGVyZSBhcmUgYSBmZXcgY2hvaWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2hvb3NlIHRoZSBvbmUgdGhhdCBpcyBkZXNpcmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShwYXJlbnRQYXRoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBwYXJlbnRQYXRoWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltcy5zcGxpY2UoMCwgaSwgcGFyZW50UGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9Kb2luIHRoZSBwYXRoIHBhcnRzIHRvZ2V0aGVyLCB0aGVuIGZpZ3VyZSBvdXQgaWYgYmFzZVVybCBpcyBuZWVkZWQuCiAgICAgICAgICAgICAgICAgICAgdXJsID0gc3ltcy5qb2luKCcvJyk7CiAgICAgICAgICAgICAgICAgICAgdXJsICs9IChleHQgfHwgKC9eZGF0YVw6fF5ibG9iXDp8XD8vLnRlc3QodXJsKSB8fCBza2lwRXh0ID8gJycgOiAnLmpzJykpOwogICAgICAgICAgICAgICAgICAgIHVybCA9ICh1cmwuY2hhckF0KDApID09PSAnLycgfHwgdXJsLm1hdGNoKC9eW1x3XCtcLlwtXSs6LykgPyAnJyA6IGNvbmZpZy5iYXNlVXJsKSArIHVybDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybEFyZ3MgJiYgIS9eYmxvYlw6Ly50ZXN0KHVybCkgPwogICAgICAgICAgICAgICAgICAgICAgIHVybCArIGNvbmZpZy51cmxBcmdzKG1vZHVsZU5hbWUsIHVybCkgOiB1cmw7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvL0RlbGVnYXRlcyB0byByZXEubG9hZC4gQnJva2VuIG91dCBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvCiAgICAgICAgICAgIC8vYWxsb3cgb3ZlcnJpZGluZyBpbiB0aGUgb3B0aW1pemVyLgogICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAoaWQsIHVybCkgewogICAgICAgICAgICAgICAgcmVxLmxvYWQoY29udGV4dCwgaWQsIHVybCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogRXhlY3V0ZXMgYSBtb2R1bGUgY2FsbGJhY2sgZnVuY3Rpb24uIEJyb2tlbiBvdXQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbgogICAgICAgICAgICAgKiBzb2xlbHkgdG8gYWxsb3cgdGhlIGJ1aWxkIHN5c3RlbSB0byBzZXF1ZW5jZSB0aGUgZmlsZXMgaW4gdGhlIGJ1aWx0CiAgICAgICAgICAgICAqIGxheWVyIGluIHRoZSByaWdodCBzZXF1ZW5jZS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHByaXZhdGUKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGV4ZWNDYjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBhcmdzLCBleHBvcnRzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkoZXhwb3J0cywgYXJncyk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogY2FsbGJhY2sgZm9yIHNjcmlwdCBsb2FkcywgdXNlZCB0byBjaGVjayBzdGF0dXMgb2YgbG9hZGluZy4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtFdmVudH0gZXZ0IHRoZSBldmVudCBmcm9tIHRoZSBicm93c2VyIGZvciB0aGUgc2NyaXB0CiAgICAgICAgICAgICAqIHRoYXQgd2FzIGxvYWRlZC4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIG9uU2NyaXB0TG9hZDogZnVuY3Rpb24gKGV2dCkgewogICAgICAgICAgICAgICAgLy9Vc2luZyBjdXJyZW50VGFyZ2V0IGluc3RlYWQgb2YgdGFyZ2V0IGZvciBGaXJlZm94IDIuMCdzIHNha2UuIE5vdAogICAgICAgICAgICAgICAgLy9hbGwgb2xkIGJyb3dzZXJzIHdpbGwgYmUgc3VwcG9ydGVkLCBidXQgdGhpcyBvbmUgd2FzIGVhc3kgZW5vdWdoCiAgICAgICAgICAgICAgICAvL3RvIHN1cHBvcnQgYW5kIHN0aWxsIG1ha2VzIHNlbnNlLgogICAgICAgICAgICAgICAgaWYgKGV2dC50eXBlID09PSAnbG9hZCcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWR5UmVnRXhwLnRlc3QoKGV2dC5jdXJyZW50VGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50KS5yZWFkeVN0YXRlKSkpIHsKICAgICAgICAgICAgICAgICAgICAvL1Jlc2V0IGludGVyYWN0aXZlIHNjcmlwdCBzbyBhIHNjcmlwdCBub2RlIGlzIG5vdCBoZWxkIG9udG8gZm9yCiAgICAgICAgICAgICAgICAgICAgLy90byBsb25nLgogICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlU2NyaXB0ID0gbnVsbDsKCiAgICAgICAgICAgICAgICAgICAgLy9QdWxsIG91dCB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGFuZCB0aGUgY29udGV4dC4KICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFNjcmlwdERhdGEoZXZ0KTsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChkYXRhLmlkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDYWxsYmFjayBmb3Igc2NyaXB0IGVycm9ycy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIG9uU2NyaXB0RXJyb3I6IGZ1bmN0aW9uIChldnQpIHsKICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZ2V0U2NyaXB0RGF0YShldnQpOwogICAgICAgICAgICAgICAgaWYgKCFoYXNQYXRoRmFsbGJhY2soZGF0YS5pZCkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50cyA9IFtdOwogICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignX0ByJykgIT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2godmFsdWUuZGVwTWFwcywgZnVuY3Rpb24oZGVwTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcE1hcC5pZCA9PT0gZGF0YS5pZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRzLnB1c2goa2V5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ3NjcmlwdGVycm9yJywgJ1NjcmlwdCBlcnJvciBmb3IgIicgKyBkYXRhLmlkICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcmVudHMubGVuZ3RoID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyIsIG5lZWRlZCBieTogJyArIHBhcmVudHMuam9pbignLCAnKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciJyksIGV2dCwgW2RhdGEuaWRdKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBjb250ZXh0LnJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKCk7CiAgICAgICAgcmV0dXJuIGNvbnRleHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBNYWluIGVudHJ5IHBvaW50LgogICAgICoKICAgICAqIElmIHRoZSBvbmx5IGFyZ3VtZW50IHRvIHJlcXVpcmUgaXMgYSBzdHJpbmcsIHRoZW4gdGhlIG1vZHVsZSB0aGF0CiAgICAgKiBpcyByZXByZXNlbnRlZCBieSB0aGF0IHN0cmluZyBpcyBmZXRjaGVkIGZvciB0aGUgYXBwcm9wcmlhdGUgY29udGV4dC4KICAgICAqCiAgICAgKiBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gYXJyYXksIHRoZW4gaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGFycmF5CiAgICAgKiBvZiBkZXBlbmRlbmN5IHN0cmluZyBuYW1lcyB0byBmZXRjaC4gQW4gb3B0aW9uYWwgZnVuY3Rpb24gY2FsbGJhY2sgY2FuCiAgICAgKiBiZSBzcGVjaWZpZWQgdG8gZXhlY3V0ZSB3aGVuIGFsbCBvZiB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIGF2YWlsYWJsZS4KICAgICAqCiAgICAgKiBNYWtlIGEgbG9jYWwgcmVxIHZhcmlhYmxlIHRvIGhlbHAgQ2FqYSBjb21wbGlhbmNlIChpdCBhc3N1bWVzIHRoaW5ncwogICAgICogb24gYSByZXF1aXJlIHRoYXQgYXJlIG5vdCBzdGFuZGFyZGl6ZWQpLCBhbmQgdG8gZ2l2ZSBhIHNob3J0CiAgICAgKiBuYW1lIGZvciBtaW5pZmljYXRpb24vbG9jYWwgc2NvcGUgdXNlLgogICAgICovCiAgICByZXEgPSByZXF1aXJlanMgPSBmdW5jdGlvbiAoZGVwcywgY2FsbGJhY2ssIGVycmJhY2ssIG9wdGlvbmFsKSB7CgogICAgICAgIC8vRmluZCB0aGUgcmlnaHQgY29udGV4dCwgdXNlIGRlZmF1bHQKICAgICAgICB2YXIgY29udGV4dCwgY29uZmlnLAogICAgICAgICAgICBjb250ZXh0TmFtZSA9IGRlZkNvbnRleHROYW1lOwoKICAgICAgICAvLyBEZXRlcm1pbmUgaWYgaGF2ZSBjb25maWcgb2JqZWN0IGluIHRoZSBjYWxsLgogICAgICAgIGlmICghaXNBcnJheShkZXBzKSAmJiB0eXBlb2YgZGVwcyAhPT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgLy8gZGVwcyBpcyBhIGNvbmZpZyBvYmplY3QKICAgICAgICAgICAgY29uZmlnID0gZGVwczsKICAgICAgICAgICAgaWYgKGlzQXJyYXkoY2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAvLyBBZGp1c3QgYXJncyBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICBkZXBzID0gY2FsbGJhY2s7CiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGVycmJhY2s7CiAgICAgICAgICAgICAgICBlcnJiYWNrID0gb3B0aW9uYWw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkZXBzID0gW107CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmNvbnRleHQpIHsKICAgICAgICAgICAgY29udGV4dE5hbWUgPSBjb25maWcuY29udGV4dDsKICAgICAgICB9CgogICAgICAgIGNvbnRleHQgPSBnZXRPd24oY29udGV4dHMsIGNvbnRleHROYW1lKTsKICAgICAgICBpZiAoIWNvbnRleHQpIHsKICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHRzW2NvbnRleHROYW1lXSA9IHJlcS5zLm5ld0NvbnRleHQoY29udGV4dE5hbWUpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNvbmZpZykgewogICAgICAgICAgICBjb250ZXh0LmNvbmZpZ3VyZShjb25maWcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGNvbnRleHQucmVxdWlyZShkZXBzLCBjYWxsYmFjaywgZXJyYmFjayk7CiAgICB9OwoKICAgIC8qKgogICAgICogU3VwcG9ydCByZXF1aXJlLmNvbmZpZygpIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNvb3BlcmF0ZSB3aXRoIG90aGVyCiAgICAgKiBBTUQgbG9hZGVycyBvbiBnbG9iYWxseSBhZ3JlZWQgbmFtZXMuCiAgICAgKi8KICAgIHJlcS5jb25maWcgPSBmdW5jdGlvbiAoY29uZmlnKSB7CiAgICAgICAgcmV0dXJuIHJlcShjb25maWcpOwogICAgfTsKCiAgICAvKioKICAgICAqIEV4ZWN1dGUgc29tZXRoaW5nIGFmdGVyIHRoZSBjdXJyZW50IHRpY2sKICAgICAqIG9mIHRoZSBldmVudCBsb29wLiBPdmVycmlkZSBmb3Igb3RoZXIgZW52cwogICAgICogdGhhdCBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uIHRoYW4gc2V0VGltZW91dC4KICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmbiBmdW5jdGlvbiB0byBleGVjdXRlIGxhdGVyLgogICAgICovCiAgICByZXEubmV4dFRpY2sgPSB0eXBlb2Ygc2V0VGltZW91dCAhPT0gJ3VuZGVmaW5lZCcgPyBmdW5jdGlvbiAoZm4pIHsKICAgICAgICBzZXRUaW1lb3V0KGZuLCA0KTsKICAgIH0gOiBmdW5jdGlvbiAoZm4pIHsgZm4oKTsgfTsKCiAgICAvKioKICAgICAqIEV4cG9ydCByZXF1aXJlIGFzIGEgZ2xvYmFsLCBidXQgb25seSBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgogICAgICovCiAgICBpZiAoIXJlcXVpcmUpIHsKICAgICAgICByZXF1aXJlID0gcmVxOwogICAgfQoKICAgIHJlcS52ZXJzaW9uID0gdmVyc2lvbjsKCiAgICAvL1VzZWQgdG8gZmlsdGVyIG91dCBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgYWxyZWFkeSBwYXRocy4KICAgIHJlcS5qc0V4dFJlZ0V4cCA9IC9eXC98OnxcP3xcLmpzJC87CiAgICByZXEuaXNCcm93c2VyID0gaXNCcm93c2VyOwogICAgcyA9IHJlcS5zID0gewogICAgICAgIGNvbnRleHRzOiBjb250ZXh0cywKICAgICAgICBuZXdDb250ZXh0OiBuZXdDb250ZXh0CiAgICB9OwoKICAgIC8vQ3JlYXRlIGRlZmF1bHQgY29udGV4dC4KICAgIHJlcSh7fSk7CgogICAgLy9FeHBvcnRzIHNvbWUgY29udGV4dC1zZW5zaXRpdmUgbWV0aG9kcyBvbiBnbG9iYWwgcmVxdWlyZS4KICAgIGVhY2goWwogICAgICAgICd0b1VybCcsCiAgICAgICAgJ3VuZGVmJywKICAgICAgICAnZGVmaW5lZCcsCiAgICAgICAgJ3NwZWNpZmllZCcKICAgIF0sIGZ1bmN0aW9uIChwcm9wKSB7CiAgICAgICAgLy9SZWZlcmVuY2UgZnJvbSBjb250ZXh0cyBpbnN0ZWFkIG9mIGVhcmx5IGJpbmRpbmcgdG8gZGVmYXVsdCBjb250ZXh0LAogICAgICAgIC8vc28gdGhhdCBkdXJpbmcgYnVpbGRzLCB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGNvbnRleHQKICAgICAgICAvL3dpdGggaXRzIGNvbmZpZyBnZXRzIHVzZWQuCiAgICAgICAgcmVxW3Byb3BdID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgY3R4ID0gY29udGV4dHNbZGVmQ29udGV4dE5hbWVdOwogICAgICAgICAgICByZXR1cm4gY3R4LnJlcXVpcmVbcHJvcF0uYXBwbHkoY3R4LCBhcmd1bWVudHMpOwogICAgICAgIH07CiAgICB9KTsKCiAgICBpZiAoaXNCcm93c2VyKSB7CiAgICAgICAgaGVhZCA9IHMuaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07CiAgICAgICAgLy9JZiBCQVNFIHRhZyBpcyBpbiBwbGF5LCB1c2luZyBhcHBlbmRDaGlsZCBpcyBhIHByb2JsZW0gZm9yIElFNi4KICAgICAgICAvL1doZW4gdGhhdCBicm93c2VyIGRpZXMsIHRoaXMgY2FuIGJlIHJlbW92ZWQuIERldGFpbHMgaW4gdGhpcyBqUXVlcnkgYnVnOgogICAgICAgIC8vaHR0cDovL2Rldi5qcXVlcnkuY29tL3RpY2tldC8yNzA5CiAgICAgICAgYmFzZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYmFzZScpWzBdOwogICAgICAgIGlmIChiYXNlRWxlbWVudCkgewogICAgICAgICAgICBoZWFkID0gcy5oZWFkID0gYmFzZUVsZW1lbnQucGFyZW50Tm9kZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBbnkgZXJyb3JzIHRoYXQgcmVxdWlyZSBleHBsaWNpdGx5IGdlbmVyYXRlcyB3aWxsIGJlIHBhc3NlZCB0byB0aGlzCiAgICAgKiBmdW5jdGlvbi4gSW50ZXJjZXB0L292ZXJyaWRlIGl0IGlmIHlvdSB3YW50IGN1c3RvbSBlcnJvciBoYW5kbGluZy4KICAgICAqIEBwYXJhbSB7RXJyb3J9IGVyciB0aGUgZXJyb3Igb2JqZWN0LgogICAgICovCiAgICByZXEub25FcnJvciA9IGRlZmF1bHRPbkVycm9yOwoKICAgIC8qKgogICAgICogQ3JlYXRlcyB0aGUgbm9kZSBmb3IgdGhlIGxvYWQgY29tbWFuZC4gT25seSB1c2VkIGluIGJyb3dzZXIgZW52cy4KICAgICAqLwogICAgcmVxLmNyZWF0ZU5vZGUgPSBmdW5jdGlvbiAoY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpIHsKICAgICAgICB2YXIgbm9kZSA9IGNvbmZpZy54aHRtbCA/CiAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLCAnaHRtbDpzY3JpcHQnKSA6CiAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBub2RlLnR5cGUgPSBjb25maWcuc2NyaXB0VHlwZSB8fCAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBub2RlLmNoYXJzZXQgPSAndXRmLTgnOwogICAgICAgIG5vZGUuYXN5bmMgPSB0cnVlOwogICAgICAgIHJldHVybiBub2RlOwogICAgfTsKCiAgICAvKioKICAgICAqIERvZXMgdGhlIHJlcXVlc3QgdG8gbG9hZCBhIG1vZHVsZSBmb3IgdGhlIGJyb3dzZXIgY2FzZS4KICAgICAqIE1ha2UgdGhpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGFsbG93IG90aGVyIGVudmlyb25tZW50cwogICAgICogdG8gb3ZlcnJpZGUgaXQuCiAgICAgKgogICAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgdGhlIHJlcXVpcmUgY29udGV4dCB0byBmaW5kIHN0YXRlLgogICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSB1cmwgdGhlIFVSTCB0byB0aGUgbW9kdWxlLgogICAgICovCiAgICByZXEubG9hZCA9IGZ1bmN0aW9uIChjb250ZXh0LCBtb2R1bGVOYW1lLCB1cmwpIHsKICAgICAgICB2YXIgY29uZmlnID0gKGNvbnRleHQgJiYgY29udGV4dC5jb25maWcpIHx8IHt9LAogICAgICAgICAgICBub2RlOwogICAgICAgIGlmIChpc0Jyb3dzZXIpIHsKICAgICAgICAgICAgLy9JbiB0aGUgYnJvd3NlciBzbyB1c2UgYSBzY3JpcHQgdGFnCiAgICAgICAgICAgIG5vZGUgPSByZXEuY3JlYXRlTm9kZShjb25maWcsIG1vZHVsZU5hbWUsIHVybCk7CgogICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcsIGNvbnRleHQuY29udGV4dE5hbWUpOwogICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJywgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAvL1NldCB1cCBsb2FkIGxpc3RlbmVyLiBUZXN0IGF0dGFjaEV2ZW50IGZpcnN0IGJlY2F1c2UgSUU5IGhhcwogICAgICAgICAgICAvL2Egc3VidGxlIGlzc3VlIGluIGl0cyBhZGRFdmVudExpc3RlbmVyIGFuZCBzY3JpcHQgb25sb2FkIGZpcmluZ3MKICAgICAgICAgICAgLy90aGF0IGRvIG5vdCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgYWxsIG90aGVyIGJyb3dzZXJzIHdpdGgKICAgICAgICAgICAgLy9hZGRFdmVudExpc3RlbmVyIHN1cHBvcnQsIHdoaWNoIGZpcmUgdGhlIG9ubG9hZCBldmVudCBmb3IgYQogICAgICAgICAgICAvL3NjcmlwdCByaWdodCBhZnRlciB0aGUgc2NyaXB0IGV4ZWN1dGlvbi4gU2VlOgogICAgICAgICAgICAvL2h0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvNjQ4MDU3L3NjcmlwdC1vbmxvYWQtZXZlbnQtaXMtbm90LWZpcmVkLWltbWVkaWF0ZWx5LWFmdGVyLXNjcmlwdC1leGVjdXRpb24KICAgICAgICAgICAgLy9VTkZPUlRVTkFURUxZIE9wZXJhIGltcGxlbWVudHMgYXR0YWNoRXZlbnQgYnV0IGRvZXMgbm90IGZvbGxvdyB0aGUgc2NyaXB0CiAgICAgICAgICAgIC8vc2NyaXB0IGV4ZWN1dGlvbiBtb2RlLgogICAgICAgICAgICBpZiAobm9kZS5hdHRhY2hFdmVudCAmJgogICAgICAgICAgICAgICAgICAgIC8vQ2hlY2sgaWYgbm9kZS5hdHRhY2hFdmVudCBpcyBhcnRpZmljaWFsbHkgYWRkZWQgYnkgY3VzdG9tIHNjcmlwdCBvcgogICAgICAgICAgICAgICAgICAgIC8vbmF0aXZlbHkgc3VwcG9ydGVkIGJ5IGJyb3dzZXIKICAgICAgICAgICAgICAgICAgICAvL3JlYWQgaHR0cHM6Ly9naXRodWIuY29tL3JlcXVpcmVqcy9yZXF1aXJlanMvaXNzdWVzLzE4NwogICAgICAgICAgICAgICAgICAgIC8vaWYgd2UgY2FuIE5PVCBmaW5kIFtuYXRpdmUgY29kZV0gdGhlbiBpdCBtdXN0IE5PVCBuYXRpdmVseSBzdXBwb3J0ZWQuCiAgICAgICAgICAgICAgICAgICAgLy9pbiBJRTgsIG5vZGUuYXR0YWNoRXZlbnQgZG9lcyBub3QgaGF2ZSB0b1N0cmluZygpCiAgICAgICAgICAgICAgICAgICAgLy9Ob3RlIHRoZSB0ZXN0IGZvciAiW25hdGl2ZSBjb2RlIiB3aXRoIG5vIGNsb3NpbmcgYnJhY2UsIHNlZToKICAgICAgICAgICAgICAgICAgICAvL2h0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2lzc3Vlcy8yNzMKICAgICAgICAgICAgICAgICAgICAhKG5vZGUuYXR0YWNoRXZlbnQudG9TdHJpbmcgJiYgbm9kZS5hdHRhY2hFdmVudC50b1N0cmluZygpLmluZGV4T2YoJ1tuYXRpdmUgY29kZScpIDwgMCkgJiYKICAgICAgICAgICAgICAgICAgICAhaXNPcGVyYSkgewogICAgICAgICAgICAgICAgLy9Qcm9iYWJseSBJRS4gSUUgKGF0IGxlYXN0IDYtOCkgZG8gbm90IGZpcmUKICAgICAgICAgICAgICAgIC8vc2NyaXB0IG9ubG9hZCByaWdodCBhZnRlciBleGVjdXRpbmcgdGhlIHNjcmlwdCwgc28KICAgICAgICAgICAgICAgIC8vd2UgY2Fubm90IHRpZSB0aGUgYW5vbnltb3VzIGRlZmluZSBjYWxsIHRvIGEgbmFtZS4KICAgICAgICAgICAgICAgIC8vSG93ZXZlciwgSUUgcmVwb3J0cyB0aGUgc2NyaXB0IGFzIGJlaW5nIGluICdpbnRlcmFjdGl2ZScKICAgICAgICAgICAgICAgIC8vcmVhZHlTdGF0ZSBhdCB0aGUgdGltZSBvZiB0aGUgZGVmaW5lIGNhbGwuCiAgICAgICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IHRydWU7CgogICAgICAgICAgICAgICAgbm9kZS5hdHRhY2hFdmVudCgnb25yZWFkeXN0YXRlY2hhbmdlJywgY29udGV4dC5vblNjcmlwdExvYWQpOwogICAgICAgICAgICAgICAgLy9JdCB3b3VsZCBiZSBncmVhdCB0byBhZGQgYW4gZXJyb3IgaGFuZGxlciBoZXJlIHRvIGNhdGNoCiAgICAgICAgICAgICAgICAvLzQwNHMgaW4gSUU5Ky4gSG93ZXZlciwgb25yZWFkeXN0YXRlY2hhbmdlIHdpbGwgZmlyZSBiZWZvcmUKICAgICAgICAgICAgICAgIC8vdGhlIGVycm9yIGhhbmRsZXIsIHNvIHRoYXQgZG9lcyBub3QgaGVscC4gSWYgYWRkRXZlbnRMaXN0ZW5lcgogICAgICAgICAgICAgICAgLy9pcyB1c2VkLCB0aGVuIElFIHdpbGwgZmlyZSBlcnJvciBiZWZvcmUgbG9hZCwgYnV0IHdlIGNhbm5vdAogICAgICAgICAgICAgICAgLy91c2UgdGhhdCBwYXRod2F5IGdpdmVuIHRoZSBjb25uZWN0Lm1pY3Jvc29mdC5jb20gaXNzdWUKICAgICAgICAgICAgICAgIC8vbWVudGlvbmVkIGFib3ZlIGFib3V0IG5vdCBkb2luZyB0aGUgJ3NjcmlwdCBleGVjdXRlLAogICAgICAgICAgICAgICAgLy90aGVuIGZpcmUgdGhlIHNjcmlwdCBsb2FkIGV2ZW50IGxpc3RlbmVyIGJlZm9yZSBleGVjdXRlCiAgICAgICAgICAgICAgICAvL25leHQgc2NyaXB0JyB0aGF0IG90aGVyIGJyb3dzZXJzIGRvLgogICAgICAgICAgICAgICAgLy9CZXN0IGhvcGU6IElFMTAgZml4ZXMgdGhlIGlzc3VlcywKICAgICAgICAgICAgICAgIC8vYW5kIHRoZW4gZGVzdHJveXMgYWxsIGluc3RhbGxzIG9mIElFIDYtOS4KICAgICAgICAgICAgICAgIC8vbm9kZS5hdHRhY2hFdmVudCgnb25lcnJvcicsIGNvbnRleHQub25TY3JpcHRFcnJvcik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCwgZmFsc2UpOwogICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGNvbnRleHQub25TY3JpcHRFcnJvciwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5vZGUuc3JjID0gdXJsOwoKICAgICAgICAgICAgLy9DYWxsaW5nIG9uTm9kZUNyZWF0ZWQgYWZ0ZXIgYWxsIHByb3BlcnRpZXMgb24gdGhlIG5vZGUgaGF2ZSBiZWVuCiAgICAgICAgICAgIC8vc2V0LCBidXQgYmVmb3JlIGl0IGlzIHBsYWNlZCBpbiB0aGUgRE9NLgogICAgICAgICAgICBpZiAoY29uZmlnLm9uTm9kZUNyZWF0ZWQpIHsKICAgICAgICAgICAgICAgIGNvbmZpZy5vbk5vZGVDcmVhdGVkKG5vZGUsIGNvbmZpZywgbW9kdWxlTmFtZSwgdXJsKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9Gb3Igc29tZSBjYWNoZSBjYXNlcyBpbiBJRSA2LTgsIHRoZSBzY3JpcHQgZXhlY3V0ZXMgYmVmb3JlIHRoZSBlbmQKICAgICAgICAgICAgLy9vZiB0aGUgYXBwZW5kQ2hpbGQgZXhlY3V0aW9uLCBzbyB0byB0aWUgYW4gYW5vbnltb3VzIGRlZmluZQogICAgICAgICAgICAvL2NhbGwgdG8gdGhlIG1vZHVsZSBuYW1lICh3aGljaCBpcyBzdG9yZWQgb24gdGhlIG5vZGUpLCBob2xkIG9uCiAgICAgICAgICAgIC8vdG8gYSByZWZlcmVuY2UgdG8gdGhpcyBub2RlLCBidXQgY2xlYXIgYWZ0ZXIgdGhlIERPTSBpbnNlcnRpb24uCiAgICAgICAgICAgIGN1cnJlbnRseUFkZGluZ1NjcmlwdCA9IG5vZGU7CiAgICAgICAgICAgIGlmIChiYXNlRWxlbWVudCkgewogICAgICAgICAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUobm9kZSwgYmFzZUVsZW1lbnQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChub2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdXJyZW50bHlBZGRpbmdTY3JpcHQgPSBudWxsOwoKICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgfSBlbHNlIGlmIChpc1dlYldvcmtlcikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgLy9JbiBhIHdlYiB3b3JrZXIsIHVzZSBpbXBvcnRTY3JpcHRzLiBUaGlzIGlzIG5vdCBhIHZlcnkKICAgICAgICAgICAgICAgIC8vZWZmaWNpZW50IHVzZSBvZiBpbXBvcnRTY3JpcHRzLCBpbXBvcnRTY3JpcHRzIHdpbGwgYmxvY2sgdW50aWwKICAgICAgICAgICAgICAgIC8vaXRzIHNjcmlwdCBpcyBkb3dubG9hZGVkIGFuZCBldmFsdWF0ZWQuIEhvd2V2ZXIsIGlmIHdlYiB3b3JrZXJzCiAgICAgICAgICAgICAgICAvL2FyZSBpbiBwbGF5LCB0aGUgZXhwZWN0YXRpb24gaXMgdGhhdCBhIGJ1aWxkIGhhcyBiZWVuIGRvbmUgc28KICAgICAgICAgICAgICAgIC8vdGhhdCBvbmx5IG9uZSBzY3JpcHQgbmVlZHMgdG8gYmUgbG9hZGVkIGFueXdheS4gVGhpcyBtYXkgbmVlZAogICAgICAgICAgICAgICAgLy90byBiZSByZWV2YWx1YXRlZCBpZiBvdGhlciB1c2UgY2FzZXMgYmVjb21lIGNvbW1vbi4KCiAgICAgICAgICAgICAgICAvLyBQb3N0IGEgdGFzayB0byB0aGUgZXZlbnQgbG9vcCB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBXZWJLaXQKICAgICAgICAgICAgICAgIC8vIHdoZXJlIHRoZSB3b3JrZXIgZ2V0cyBnYXJiYWdlLWNvbGxlY3RlZCBhZnRlciBjYWxsaW5nCiAgICAgICAgICAgICAgICAvLyBpbXBvcnRTY3JpcHRzKCk6IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1MzMxNwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHt9LCAwKTsKICAgICAgICAgICAgICAgIGltcG9ydFNjcmlwdHModXJsKTsKCiAgICAgICAgICAgICAgICAvL0FjY291bnQgZm9yIGFub255bW91cyBtb2R1bGVzCiAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChtb2R1bGVOYW1lKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgY29udGV4dC5vbkVycm9yKG1ha2VFcnJvcignaW1wb3J0c2NyaXB0cycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydFNjcmlwdHMgZmFpbGVkIGZvciAnICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZSArICcgYXQgJyArIHVybCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2R1bGVOYW1lXSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICBmdW5jdGlvbiBnZXRJbnRlcmFjdGl2ZVNjcmlwdCgpIHsKICAgICAgICBpZiAoaW50ZXJhY3RpdmVTY3JpcHQgJiYgaW50ZXJhY3RpdmVTY3JpcHQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJykgewogICAgICAgICAgICByZXR1cm4gaW50ZXJhY3RpdmVTY3JpcHQ7CiAgICAgICAgfQoKICAgICAgICBlYWNoUmV2ZXJzZShzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHQpIHsKICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKGludGVyYWN0aXZlU2NyaXB0ID0gc2NyaXB0KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBpbnRlcmFjdGl2ZVNjcmlwdDsKICAgIH0KCiAgICAvL0xvb2sgZm9yIGEgZGF0YS1tYWluIHNjcmlwdCBhdHRyaWJ1dGUsIHdoaWNoIGNvdWxkIGFsc28gYWRqdXN0IHRoZSBiYXNlVXJsLgogICAgaWYgKGlzQnJvd3NlciAmJiAhY2ZnLnNraXBEYXRhTWFpbikgewogICAgICAgIC8vRmlndXJlIG91dCBiYXNlVXJsLiBHZXQgaXQgZnJvbSB0aGUgc2NyaXB0IHRhZyB3aXRoIHJlcXVpcmUuanMgaW4gaXQuCiAgICAgICAgZWFjaFJldmVyc2Uoc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0KSB7CiAgICAgICAgICAgIC8vU2V0IHRoZSAnaGVhZCcgd2hlcmUgd2UgY2FuIGFwcGVuZCBjaGlsZHJlbiBieQogICAgICAgICAgICAvL3VzaW5nIHRoZSBzY3JpcHQncyBwYXJlbnQuCiAgICAgICAgICAgIGlmICghaGVhZCkgewogICAgICAgICAgICAgICAgaGVhZCA9IHNjcmlwdC5wYXJlbnROb2RlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0xvb2sgZm9yIGEgZGF0YS1tYWluIGF0dHJpYnV0ZSB0byBzZXQgbWFpbiBzY3JpcHQgZm9yIHRoZSBwYWdlCiAgICAgICAgICAgIC8vdG8gbG9hZC4gSWYgaXQgaXMgdGhlcmUsIHRoZSBwYXRoIHRvIGRhdGEgbWFpbiBiZWNvbWVzIHRoZQogICAgICAgICAgICAvL2Jhc2VVcmwsIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHNldC4KICAgICAgICAgICAgZGF0YU1haW4gPSBzY3JpcHQuZ2V0QXR0cmlidXRlKCdkYXRhLW1haW4nKTsKICAgICAgICAgICAgaWYgKGRhdGFNYWluKSB7CiAgICAgICAgICAgICAgICAvL1ByZXNlcnZlIGRhdGFNYWluIGluIGNhc2UgaXQgaXMgYSBwYXRoIChpLmUuIGNvbnRhaW5zICc/JykKICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBkYXRhTWFpbjsKCiAgICAgICAgICAgICAgICAvL1NldCBmaW5hbCBiYXNlVXJsIGlmIHRoZXJlIGlzIG5vdCBhbHJlYWR5IGFuIGV4cGxpY2l0IG9uZSwKICAgICAgICAgICAgICAgIC8vYnV0IG9ubHkgZG8gc28gaWYgdGhlIGRhdGEtbWFpbiB2YWx1ZSBpcyBub3QgYSBsb2FkZXIgcGx1Z2luCiAgICAgICAgICAgICAgICAvL21vZHVsZSBJRC4KICAgICAgICAgICAgICAgIGlmICghY2ZnLmJhc2VVcmwgJiYgbWFpblNjcmlwdC5pbmRleE9mKCchJykgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgLy9QdWxsIG9mZiB0aGUgZGlyZWN0b3J5IG9mIGRhdGEtbWFpbiBmb3IgdXNlIGFzIHRoZQogICAgICAgICAgICAgICAgICAgIC8vYmFzZVVybC4KICAgICAgICAgICAgICAgICAgICBzcmMgPSBtYWluU2NyaXB0LnNwbGl0KCcvJyk7CiAgICAgICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IHNyYy5wb3AoKTsKICAgICAgICAgICAgICAgICAgICBzdWJQYXRoID0gc3JjLmxlbmd0aCA/IHNyYy5qb2luKCcvJykgICsgJy8nIDogJy4vJzsKCiAgICAgICAgICAgICAgICAgICAgY2ZnLmJhc2VVcmwgPSBzdWJQYXRoOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vU3RyaXAgb2ZmIGFueSB0cmFpbGluZyAuanMgc2luY2UgbWFpblNjcmlwdCBpcyBub3cKICAgICAgICAgICAgICAgIC8vbGlrZSBhIG1vZHVsZSBuYW1lLgogICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IG1haW5TY3JpcHQucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpOwoKICAgICAgICAgICAgICAgIC8vSWYgbWFpblNjcmlwdCBpcyBzdGlsbCBhIHBhdGgsIGZhbGwgYmFjayB0byBkYXRhTWFpbgogICAgICAgICAgICAgICAgaWYgKHJlcS5qc0V4dFJlZ0V4cC50ZXN0KG1haW5TY3JpcHQpKSB7CiAgICAgICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IGRhdGFNYWluOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vUHV0IHRoZSBkYXRhLW1haW4gc2NyaXB0IGluIHRoZSBmaWxlcyB0byBsb2FkLgogICAgICAgICAgICAgICAgY2ZnLmRlcHMgPSBjZmcuZGVwcyA/IGNmZy5kZXBzLmNvbmNhdChtYWluU2NyaXB0KSA6IFttYWluU2NyaXB0XTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBkZWZpbml0aW9ucyBvZiBtb2R1bGVzLiBEaWZmZXJzIGZyb20KICAgICAqIHJlcXVpcmUoKSBpbiB0aGF0IGEgc3RyaW5nIGZvciB0aGUgbW9kdWxlIHNob3VsZCBiZSB0aGUgZmlyc3QgYXJndW1lbnQsCiAgICAgKiBhbmQgdGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYWZ0ZXIgZGVwZW5kZW5jaWVzIGFyZSBsb2FkZWQgc2hvdWxkCiAgICAgKiByZXR1cm4gYSB2YWx1ZSB0byBkZWZpbmUgdGhlIG1vZHVsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBhcmd1bWVudCdzCiAgICAgKiBuYW1lLgogICAgICovCiAgICBkZWZpbmUgPSBmdW5jdGlvbiAobmFtZSwgZGVwcywgY2FsbGJhY2spIHsKICAgICAgICB2YXIgbm9kZSwgY29udGV4dDsKCiAgICAgICAgLy9BbGxvdyBmb3IgYW5vbnltb3VzIG1vZHVsZXMKICAgICAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgIC8vQWRqdXN0IGFyZ3MgYXBwcm9wcmlhdGVseQogICAgICAgICAgICBjYWxsYmFjayA9IGRlcHM7CiAgICAgICAgICAgIGRlcHMgPSBuYW1lOwogICAgICAgICAgICBuYW1lID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8vVGhpcyBtb2R1bGUgbWF5IG5vdCBoYXZlIGRlcGVuZGVuY2llcwogICAgICAgIGlmICghaXNBcnJheShkZXBzKSkgewogICAgICAgICAgICBjYWxsYmFjayA9IGRlcHM7CiAgICAgICAgICAgIGRlcHMgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgLy9JZiBubyBuYW1lLCBhbmQgY2FsbGJhY2sgaXMgYSBmdW5jdGlvbiwgdGhlbiBmaWd1cmUgb3V0IGlmIGl0IGEKICAgICAgICAvL0NvbW1vbkpTIHRoaW5nIHdpdGggZGVwZW5kZW5jaWVzLgogICAgICAgIGlmICghZGVwcyAmJiBpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgewogICAgICAgICAgICBkZXBzID0gW107CiAgICAgICAgICAgIC8vUmVtb3ZlIGNvbW1lbnRzIGZyb20gdGhlIGNhbGxiYWNrIHN0cmluZywKICAgICAgICAgICAgLy9sb29rIGZvciByZXF1aXJlIGNhbGxzLCBhbmQgcHVsbCB0aGVtIGludG8gdGhlIGRlcGVuZGVuY2llcywKICAgICAgICAgICAgLy9idXQgb25seSBpZiB0aGVyZSBhcmUgZnVuY3Rpb24gYXJncy4KICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgY2FsbGJhY2sKICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKQogICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNvbW1lbnRSZWdFeHAsIGNvbW1lbnRSZXBsYWNlKQogICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNqc1JlcXVpcmVSZWdFeHAsIGZ1bmN0aW9uIChtYXRjaCwgZGVwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlcHMucHVzaChkZXApOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vTWF5IGJlIGEgQ29tbW9uSlMgdGhpbmcgZXZlbiB3aXRob3V0IHJlcXVpcmUgY2FsbHMsIGJ1dCBzdGlsbAogICAgICAgICAgICAgICAgLy9jb3VsZCB1c2UgZXhwb3J0cywgYW5kIG1vZHVsZS4gQXZvaWQgZG9pbmcgZXhwb3J0cyBhbmQgbW9kdWxlCiAgICAgICAgICAgICAgICAvL3dvcmsgdGhvdWdoIGlmIGl0IGp1c3QgbmVlZHMgcmVxdWlyZS4KICAgICAgICAgICAgICAgIC8vUkVRVUlSRVMgdGhlIGZ1bmN0aW9uIHRvIGV4cGVjdCB0aGUgQ29tbW9uSlMgdmFyaWFibGVzIGluIHRoZQogICAgICAgICAgICAgICAgLy9vcmRlciBsaXN0ZWQgYmVsb3cuCiAgICAgICAgICAgICAgICBkZXBzID0gKGNhbGxiYWNrLmxlbmd0aCA9PT0gMSA/IFsncmVxdWlyZSddIDogWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJ10pLmNvbmNhdChkZXBzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy9JZiBpbiBJRSA2LTggYW5kIGhpdCBhbiBhbm9ueW1vdXMgZGVmaW5lKCkgY2FsbCwgZG8gdGhlIGludGVyYWN0aXZlCiAgICAgICAgLy93b3JrLgogICAgICAgIGlmICh1c2VJbnRlcmFjdGl2ZSkgewogICAgICAgICAgICBub2RlID0gY3VycmVudGx5QWRkaW5nU2NyaXB0IHx8IGdldEludGVyYWN0aXZlU2NyaXB0KCk7CiAgICAgICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHsKICAgICAgICAgICAgICAgICAgICBuYW1lID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHRzW25vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVjb250ZXh0JyldOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvL0Fsd2F5cyBzYXZlIG9mZiBldmFsdWF0aW5nIHRoZSBkZWYgY2FsbCB1bnRpbCB0aGUgc2NyaXB0IG9ubG9hZCBoYW5kbGVyLgogICAgICAgIC8vVGhpcyBhbGxvd3MgbXVsdGlwbGUgbW9kdWxlcyB0byBiZSBpbiBhIGZpbGUgd2l0aG91dCBwcmVtYXR1cmVseQogICAgICAgIC8vdHJhY2luZyBkZXBlbmRlbmNpZXMsIGFuZCBhbGxvd3MgZm9yIGFub255bW91cyBtb2R1bGUgc3VwcG9ydCwKICAgICAgICAvL3doZXJlIHRoZSBtb2R1bGUgbmFtZSBpcyBub3Qga25vd24gdW50aWwgdGhlIHNjcmlwdCBvbmxvYWQgZXZlbnQKICAgICAgICAvL29jY3Vycy4gSWYgbm8gY29udGV4dCwgdXNlIHRoZSBnbG9iYWwgcXVldWUsIGFuZCBnZXQgaXQgcHJvY2Vzc2VkCiAgICAgICAgLy9pbiB0aGUgb25zY3JpcHQgbG9hZCBjYWxsYmFjay4KICAgICAgICBpZiAoY29udGV4dCkgewogICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlLnB1c2goW25hbWUsIGRlcHMsIGNhbGxiYWNrXSk7CiAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXBbbmFtZV0gPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGdsb2JhbERlZlF1ZXVlLnB1c2goW25hbWUsIGRlcHMsIGNhbGxiYWNrXSk7CiAgICAgICAgfQogICAgfTsKCiAgICBkZWZpbmUuYW1kID0gewogICAgICAgIGpRdWVyeTogdHJ1ZQogICAgfTsKCiAgICAvKioKICAgICAqIEV4ZWN1dGVzIHRoZSB0ZXh0LiBOb3JtYWxseSBqdXN0IHVzZXMgZXZhbCwgYnV0IGNhbiBiZSBtb2RpZmllZAogICAgICogdG8gdXNlIGEgYmV0dGVyLCBlbnZpcm9ubWVudC1zcGVjaWZpYyBjYWxsLiBPbmx5IHVzZWQgZm9yIHRyYW5zcGlsaW5nCiAgICAgKiBsb2FkZXIgcGx1Z2lucywgbm90IGZvciBwbGFpbiBKUyBtb2R1bGVzLgogICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgdGhlIHRleHQgdG8gZXhlY3V0ZS9ldmFsdWF0ZS4KICAgICAqLwogICAgcmVxLmV4ZWMgPSBmdW5jdGlvbiAodGV4dCkgewogICAgICAgIC8qanNsaW50IGV2aWw6IHRydWUgKi8KICAgICAgICByZXR1cm4gZXZhbCh0ZXh0KTsKICAgIH07CgogICAgLy9TZXQgdXAgd2l0aCBjb25maWcgaW5mby4KICAgIHJlcShjZmcpOwp9KHRoaXMsICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBzZXRUaW1lb3V0KSkpOwoKLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8KLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLy8gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgohZnVuY3Rpb24oKXt2YXIgYT17fSxiPXt9LGM9e307IWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGE7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1hW2NdO3JldHVybiBifWZ1bmN0aW9uIGQoKXt0aGlzLl9kZWxheT0wLHRoaXMuX2VuZERlbGF5PTAsdGhpcy5fZmlsbD0ibm9uZSIsdGhpcy5faXRlcmF0aW9uU3RhcnQ9MCx0aGlzLl9pdGVyYXRpb25zPTEsdGhpcy5fZHVyYXRpb249MCx0aGlzLl9wbGF5YmFja1JhdGU9MSx0aGlzLl9kaXJlY3Rpb249Im5vcm1hbCIsdGhpcy5fZWFzaW5nPSJsaW5lYXIiLHRoaXMuX2Vhc2luZ0Z1bmN0aW9uPXh9ZnVuY3Rpb24gZSgpe3JldHVybiBhLmlzRGVwcmVjYXRlZCgiSW52YWxpZCB0aW1pbmcgaW5wdXRzIiwiMjAxNi0wMy0wMiIsIlR5cGVFcnJvciBleGNlcHRpb25zIHdpbGwgYmUgdGhyb3duIGluc3RlYWQuIiwhMCl9ZnVuY3Rpb24gZihiLGMsZSl7dmFyIGY9bmV3IGQ7cmV0dXJuIGMmJihmLmZpbGw9ImJvdGgiLGYuZHVyYXRpb249ImF1dG8iKSwibnVtYmVyIiE9dHlwZW9mIGJ8fGlzTmFOKGIpP3ZvaWQgMCE9PWImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoImF1dG8iIT1iW2NdKXtpZigoIm51bWJlciI9PXR5cGVvZiBmW2NdfHwiZHVyYXRpb24iPT1jKSYmKCJudW1iZXIiIT10eXBlb2YgYltjXXx8aXNOYU4oYltjXSkpKXJldHVybjtpZigiZmlsbCI9PWMmJi0xPT12LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKCJkaXJlY3Rpb24iPT1jJiYtMT09dy5pbmRleE9mKGJbY10pKXJldHVybjtpZigicGxheWJhY2tSYXRlIj09YyYmMSE9PWJbY10mJmEuaXNEZXByZWNhdGVkKCJBbmltYXRpb25FZmZlY3RUaW1pbmcucGxheWJhY2tSYXRlIiwiMjAxNC0xMS0yOCIsIlVzZSBBbmltYXRpb24ucGxheWJhY2tSYXRlIGluc3RlYWQuIikpcmV0dXJuO2ZbY109YltjXX19KTpmLmR1cmF0aW9uPWIsZn1mdW5jdGlvbiBnKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmKGE9aXNOYU4oYSk/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/YyhkLGUsYi5lZmZlY3QpOmMoZCxiLmVmZmVjdCxiLmVmZmVjdC5fYW5pbWF0aW9uKSksaT1kfTtqLl9hbmltYXRpb249YixqLl9yZWdpc3RlcmVkPSExLGouX3NlcXVlbmNlTnVtYmVyPWYrKyxiLl9jYWxsYmFjaz1qLGQoail9O3ZhciBnPVtdLGg9ITE7Yi5BbmltYXRpb24ucHJvdG90eXBlLl9yZWdpc3Rlcj1mdW5jdGlvbigpe3RoaXMuX2NhbGxiYWNrJiZkKHRoaXMuX2NhbGxiYWNrKX19KGEsYyksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEuX3RpbWluZy5kZWxheSthLmFjdGl2ZUR1cmF0aW9uK2EuX3RpbWluZy5lbmREZWxheX1mdW5jdGlvbiBlKGIsYyxkKXt0aGlzLl9pZD1kLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49Ynx8W10sdGhpcy5fcmVwYXJlbnQodGhpcy5jaGlsZHJlbiksYz1hLm51bWVyaWNUaW1pbmdUb09iamVjdChjKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoYyksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYywhMCksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGMsITAsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJhdXRvIj09PXRoaXMuX3RpbWluZy5kdXJhdGlvbiYmKHRoaXMuX3RpbWluZy5kdXJhdGlvbj10aGlzLmFjdGl2ZUR1cmF0aW9uKX13aW5kb3cuU2VxdWVuY2VFZmZlY3Q9ZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sd2luZG93Lkdyb3VwRWZmZWN0PWZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlPXtfaXNBbmNlc3RvcjpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcztudWxsIT09Yjspe2lmKGI9PWEpcmV0dXJuITA7Yj1iLl9wYXJlbnR9cmV0dXJuITF9LF9yZWJ1aWxkOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXM7YTspImF1dG8iPT09YS50aW1pbmcuZHVyYXRpb24mJihhLl90aW1pbmcuZHVyYXRpb249YS5hY3RpdmVEdXJhdGlvbiksYT1hLl9wYXJlbnQ7dGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LF9yZXBhcmVudDpmdW5jdGlvbihhKXtiLnJlbW92ZU11bHRpKGEpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10uX3BhcmVudD10aGlzfSxfcHV0Q2hpbGQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yj8iQ2Fubm90IGFwcGVuZCBhbiBhbmNlc3RvciBvciBzZWxmIjoiQ2Fubm90IHByZXBlbmQgYW4gYW5jZXN0b3Igb3Igc2VsZiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKHRoaXMuX2lzQW5jZXN0b3IoYVtkXSkpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSLG5hbWU6IkhpZXJhcmNoeVJlcXVlc3RFcnJvciIsbWVzc2FnZTpjfTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliP3RoaXMuY2hpbGRyZW4ucHVzaChhW2RdKTp0aGlzLmNoaWxkcmVuLnVuc2hpZnQoYVtkXSk7dGhpcy5fcmVwYXJlbnQoYSksdGhpcy5fcmVidWlsZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wdXRDaGlsZChhcmd1bWVudHMsITApfSxwcmVwZW5kOmZ1bmN0aW9uKCl7dGhpcy5fcHV0Q2hpbGQoYXJndW1lbnRzLCExKX0sZ2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY2hpbGRyZW5bMF06bnVsbH0sZ2V0IGxhc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdOm51bGx9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWEuY2xvbmVUaW1pbmdJbnB1dCh0aGlzLl90aW1pbmdJbnB1dCksYz1bXSxkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspYy5wdXNoKHRoaXMuY2hpbGRyZW5bZF0uY2xvbmUoKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBHcm91cEVmZmVjdD9uZXcgR3JvdXBFZmZlY3QoYyxiKTpuZXcgU2VxdWVuY2VFZmZlY3QoYyxiKX0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX0sd2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YSs9ZChiKX0pLE1hdGgubWF4KGEsMCl9fSksd2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YT1NYXRoLm1heChhLGQoYikpfSksYX19KSxiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihjKXt2YXIgZCxlPW51bGwsZj1mdW5jdGlvbihiKXt2YXIgYz1kLl93cmFwcGVyO2lmKGMmJiJwZW5kaW5nIiE9Yy5wbGF5U3RhdGUmJmMuZWZmZWN0KXJldHVybiBudWxsPT1iP3ZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCk6MD09YiYmYy5wbGF5YmFja1JhdGU8MCYmKGV8fChlPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYy5lZmZlY3QudGltaW5nKSksYj1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZSksLTEsZSksaXNOYU4oYil8fG51bGw9PWIpPyhjLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7YS5jdXJyZW50VGltZT0tMX0pLHZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCkpOnZvaWQgMH0sZz1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSxjLl90aW1pbmcsYy5faWQpO3JldHVybiBnLm9uc2FtcGxlPWYsZD1iLnRpbWVsaW5lLl9wbGF5KGcpfSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihhKXthLl9hbmltYXRpb24uX3dyYXBwZXI9YSxhLl9pc0dyb3VwPSEwLGIuYXdhaXRTdGFydFRpbWUoYSksYS5fY29uc3RydWN0Q2hpbGRBbmltYXRpb25zKCksYS5fc2V0RXh0ZXJuYWxBbmltYXRpb24oYSl9LGIuZ3JvdXBDaGlsZER1cmF0aW9uPWR9KGEsYyl9KCk7CgohKGZ1bmN0aW9uKCl7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCmZ1bmN0aW9uIHQodCxlLG4saSl7dmFyIHIsbz1hcmd1bWVudHMubGVuZ3RoLGE9bzwzP2U6bnVsbD09PWk/aT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbik6aTtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWE9UmVmbGVjdC5kZWNvcmF0ZSh0LGUsbixpKTtlbHNlIGZvcih2YXIgcz10Lmxlbmd0aC0xO3M+PTA7cy0tKShyPXRbc10pJiYoYT0obzwzP3IoYSk6bz4zP3IoZSxuLGEpOnIoZSxuKSl8fGEpO3JldHVybiBvPjMmJmEmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sYSksYX1mdW5jdGlvbiBlKHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSlyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YSh0LGUpfWZ1bmN0aW9uIG4odCxlLG4saSl7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKHIsbyl7ZnVuY3Rpb24gYSh0KXt0cnl7bChpLm5leHQodCkpfWNhdGNoKHQpe28odCl9fWZ1bmN0aW9uIHModCl7dHJ5e2woaS50aHJvdyh0KSl9Y2F0Y2godCl7byh0KX19ZnVuY3Rpb24gbCh0KXt0LmRvbmU/cih0LnZhbHVlKTooZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKX0pKHQudmFsdWUpLnRoZW4oYSxzKX1sKChpPWkuYXBwbHkodCxlfHxbXSkpLm5leHQoKSl9KSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgICAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kCiAgICAgKiBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5CiAgICAgKiBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5CiAgICAgKiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQCiAgICAgKiByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAgKi9mdW5jdGlvbiBpKHQpe3JldHVybiBlPT57aWYodClpZihlLmhhc093blByb3BlcnR5KCJpcyIpKXtpZih0IT09ZS5pcyl0aHJvdyBuZXcgRXJyb3IoYGN1c3RvbSBlbGVtZW50IHRhZyBuYW1lcyBkbyBub3QgbWF0Y2g6ICgke3R9ICE9PSAke2UuaXN9KWApfWVsc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImlzIix7dmFsdWU6dH0pO3dpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoZS5pcyxlKX19ZnVuY3Rpb24gcih0LGUsbil7dC5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eSgicHJvcGVydGllcyIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5jb25zdHJ1Y3RvciwicHJvcGVydGllcyIse3ZhbHVlOnt9fSksdC5jb25zdHJ1Y3Rvci5wcm9wZXJ0aWVzW2VdPU9iamVjdC5hc3NpZ24oe30sdC5jb25zdHJ1Y3Rvci5wcm9wZXJ0aWVzW2VdLG4pfWZ1bmN0aW9uIG8odCl7cmV0dXJuKGUsbik9PntyKGUsbix0KX19ZnVuY3Rpb24gYSguLi50KXtyZXR1cm4oZSxuKT0+e2UuY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkoIm9ic2VydmVycyIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5jb25zdHJ1Y3Rvciwib2JzZXJ2ZXJzIix7dmFsdWU6W119KSxlLmNvbnN0cnVjdG9yLm9ic2VydmVycy5wdXNoKGAke259KCR7dC5qb2luKCIsIil9KWApfX1mdW5jdGlvbiBzKHQsLi4uZSl7cmV0dXJuKG4saSxvKT0+e2NvbnN0IGE9YF9fY29tcHV0ZSR7aX1gO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGEse3ZhbHVlOm8uZ2V0fSksby5nZXQ9dm9pZCAwLHIobixpLHtjb21wdXRlZDpgJHthfSgke1t0LC4uLmVdLmpvaW4oIiwiKX0pYH0pfX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi93aW5kb3cuSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0fTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KbGV0IGwsYyx1PS8odXJsXCgpKFteKV0qKShcKSkvZyxoPS8oXlwvW15cL10pfCheIyl8KF5bXHctXGRdKjopLztmdW5jdGlvbiBkKHQsZSl7aWYodCYmaC50ZXN0KHQpKXJldHVybiB0O2lmKCIvLyI9PT10KXJldHVybiB0O2lmKHZvaWQgMD09PWwpe2w9ITE7dHJ5e2NvbnN0IHQ9bmV3IFVSTCgiYiIsImh0dHA6Ly9hIik7dC5wYXRobmFtZT0iYyUyMGQiLGw9Imh0dHA6Ly9hL2MlMjBkIj09PXQuaHJlZn1jYXRjaCh0KXt9fWlmKGV8fChlPWRvY3VtZW50LmJhc2VVUkl8fHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxsKXRyeXtyZXR1cm4gbmV3IFVSTCh0LGUpLmhyZWZ9Y2F0Y2goZSl7cmV0dXJuIHR9cmV0dXJuIGN8fChjPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgidGVtcCIpLGMuYmFzZT1jLmNyZWF0ZUVsZW1lbnQoImJhc2UiKSxjLmhlYWQuYXBwZW5kQ2hpbGQoYy5iYXNlKSxjLmFuY2hvcj1jLmNyZWF0ZUVsZW1lbnQoImEiKSxjLmJvZHkuYXBwZW5kQ2hpbGQoYy5hbmNob3IpKSxjLmJhc2UuaHJlZj1lLGMuYW5jaG9yLmhyZWY9dCxjLmFuY2hvci5ocmVmfHx0fWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdC5yZXBsYWNlKHUsKGZ1bmN0aW9uKHQsbixpLHIpe3JldHVybiBuKyInIitkKGkucmVwbGFjZSgvWyInXS9nLCIiKSxlKSsiJyIrcn0pKX1mdW5jdGlvbiBmKHQpe3JldHVybiB0LnN1YnN0cmluZygwLHQubGFzdEluZGV4T2YoIi8iKSsxKX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jb25zdCBtPSF3aW5kb3cuU2hhZHlET018fCF3aW5kb3cuU2hhZHlET00uaW5Vc2U7Qm9vbGVhbighd2luZG93LlNoYWR5Q1NTfHx3aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzKTtjb25zdCBnPW0mJiJhZG9wdGVkU3R5bGVTaGVldHMiaW4gRG9jdW1lbnQucHJvdG90eXBlJiYicmVwbGFjZVN5bmMiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUmJigoKT0+e3RyeXtjb25zdCB0PW5ldyBDU1NTdHlsZVNoZWV0O3QucmVwbGFjZVN5bmMoIiIpO2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIn0pLGUuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHM9W3RdLGUuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHNbMF09PT10fWNhdGNoKHQpe3JldHVybiExfX0pKCk7bGV0IF89d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnJvb3RQYXRofHxmKGRvY3VtZW50LmJhc2VVUkl8fHdpbmRvdy5sb2NhdGlvbi5ocmVmKSx5PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlfHx2b2lkIDAsdj13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc2V0UGFzc2l2ZVRvdWNoR2VzdHVyZXN8fCExLGI9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN0cmljdFRlbXBsYXRlUG9saWN5fHwhMSx4PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5hbGxvd1RlbXBsYXRlRnJvbURvbU1vZHVsZXx8ITEsdz13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIubGVnYWN5T3B0aW1pemF0aW9uc3x8ITEsUz13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIubGVnYWN5V2FybmluZ3N8fCExLE09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN5bmNJbml0aWFsUmVuZGVyfHwhMSxFPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5sZWdhY3lVbmRlZmluZWR8fCExLFQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLm9yZGVyZWRDb21wdXRlZHx8ITEsQz13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIucmVtb3ZlTmVzdGVkVGVtcGxhdGVzfHwhMSxBPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5mYXN0RG9tSWZ8fCExLGs9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN1cHByZXNzVGVtcGxhdGVOb3RpZmljYXRpb25zfHwhMSxMPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5sZWdhY3lOb09ic2VydmVkQXR0cmlidXRlc3x8ITEsUD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIudXNlQWRvcHRlZFN0eWxlU2hlZXRzV2l0aEJ1aWx0Q1NTfHwhMSxOPTA7Y29uc3QgST1mdW5jdGlvbih0KXtsZXQgZT10Ll9fbWl4aW5BcHBsaWNhdGlvbnM7ZXx8KGU9bmV3IFdlYWtNYXAsdC5fX21peGluQXBwbGljYXRpb25zPWUpO2xldCBuPU4rKztyZXR1cm4gZnVuY3Rpb24gaShyKXtsZXQgbz1yLl9fbWl4aW5TZXQ7aWYobyYmb1tuXSlyZXR1cm4gcjtsZXQgYT1lLHM9YS5nZXQocik7aWYoIXMpe3M9dChyKSxhLnNldChyLHMpO2xldCBlPU9iamVjdC5jcmVhdGUocy5fX21peGluU2V0fHxvfHxudWxsKTtlW25dPSEwLHMuX19taXhpblNldD1lfXJldHVybiBzfX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovbGV0IFI9e30sTz17fTtmdW5jdGlvbiB6KHQsZSl7Ult0XT1PW3QudG9Mb3dlckNhc2UoKV09ZX1mdW5jdGlvbiBEKHQpe3JldHVybiBSW3RdfHxPW3QudG9Mb3dlckNhc2UoKV19Y2xhc3MgQiBleHRlbmRzIEhUTUxFbGVtZW50e3N0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuWyJpZCJdfXN0YXRpYyBpbXBvcnQodCxlKXtpZih0KXtsZXQgbj1EKHQpO3JldHVybiBuJiZlP24ucXVlcnlTZWxlY3RvcihlKTpufXJldHVybiBudWxsfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LGUsbixpKXtlIT09biYmdGhpcy5yZWdpc3RlcigpfWdldCBhc3NldHBhdGgoKXtpZighdGhpcy5fX2Fzc2V0cGF0aCl7Y29uc3QgdD13aW5kb3cuSFRNTEltcG9ydHMmJkhUTUxJbXBvcnRzLmltcG9ydEZvckVsZW1lbnQ/SFRNTEltcG9ydHMuaW1wb3J0Rm9yRWxlbWVudCh0aGlzKXx8ZG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50LGU9ZCh0aGlzLmdldEF0dHJpYnV0ZSgiYXNzZXRwYXRoIil8fCIiLHQuYmFzZVVSSSk7dGhpcy5fX2Fzc2V0cGF0aD1mKGUpfXJldHVybiB0aGlzLl9fYXNzZXRwYXRofXJlZ2lzdGVyKHQpe2lmKHQ9dHx8dGhpcy5pZCl7aWYoYiYmdm9pZCAwIT09RCh0KSl0aHJvdyB6KHQsbnVsbCksbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZG9tLW1vZHVsZSAke3R9IHJlLXJlZ2lzdGVyZWRgKTt0aGlzLmlkPXQseih0LHRoaXMpLChmdW5jdGlvbiBlKHQpe3QucXVlcnlTZWxlY3Rvcigic3R5bGUiKSYmY29uc29sZS53YXJuKCJkb20tbW9kdWxlICVzIGhhcyBzdHlsZSBvdXRzaWRlIHRlbXBsYXRlIix0LmlkKX0pKHRoaXMpfX19Qi5wcm90b3R5cGUubW9kdWxlcz1SLGN1c3RvbUVsZW1lbnRzLmRlZmluZSgiZG9tLW1vZHVsZSIsQik7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IEg9InNoYWR5LXVuc2NvcGVkIjtmdW5jdGlvbiBGKHQpe3JldHVybiBCLmltcG9ydCh0KX1mdW5jdGlvbiBWKHQpe2NvbnN0IGU9cCgodC5ib2R5P3QuYm9keTp0KS50ZXh0Q29udGVudCx0LmJhc2VVUkkpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gbi50ZXh0Q29udGVudD1lLG59ZnVuY3Rpb24gVSh0KXtjb25zdCBlPXQudHJpbSgpLnNwbGl0KC9ccysvKSxuPVtdO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKW4ucHVzaCguLi5qKGVbdF0pKTtyZXR1cm4gbn1mdW5jdGlvbiBqKHQpe2NvbnN0IGU9Rih0KTtpZighZSlyZXR1cm4gY29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBzdHlsZSBkYXRhIGluIG1vZHVsZSBuYW1lZCIsdCksW107aWYodm9pZCAwPT09ZS5fc3R5bGVzKXtjb25zdCB0PVtdO3QucHVzaCguLi5XKGUpKTtjb25zdCBuPWUucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtuJiZ0LnB1c2goLi4uRyhuLGUuYXNzZXRwYXRoKSksZS5fc3R5bGVzPXR9cmV0dXJuIGUuX3N0eWxlc31mdW5jdGlvbiBHKHQsZSl7aWYoIXQuX3N0eWxlcyl7Y29uc3Qgbj1bXSxpPXQuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpO2ZvcihsZXQgdD0wO3Q8aS5sZW5ndGg7dCsrKXtsZXQgcj1pW3RdLG89ci5nZXRBdHRyaWJ1dGUoImluY2x1ZGUiKTtvJiZuLnB1c2goLi4uVShvKS5maWx0ZXIoKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbi5pbmRleE9mKHQpPT09ZX0pKSksZSYmKHIudGV4dENvbnRlbnQ9cChyLnRleHRDb250ZW50LGUpKSxuLnB1c2gocil9dC5fc3R5bGVzPW59cmV0dXJuIHQuX3N0eWxlc31mdW5jdGlvbiBXKHQpe2NvbnN0IGU9W10sbj10LnF1ZXJ5U2VsZWN0b3JBbGwoImxpbmtbcmVsPWltcG9ydF1bdHlwZX49Y3NzXSIpO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtsZXQgaT1uW3RdO2lmKGkuaW1wb3J0KXtjb25zdCB0PWkuaW1wb3J0LG49aS5oYXNBdHRyaWJ1dGUoSCk7aWYobiYmIXQuX3Vuc2NvcGVkU3R5bGUpe2NvbnN0IGU9Vih0KTtlLnNldEF0dHJpYnV0ZShILCIiKSx0Ll91bnNjb3BlZFN0eWxlPWV9ZWxzZSB0Ll9zdHlsZXx8KHQuX3N0eWxlPVYodCkpO2UucHVzaChuP3QuX3Vuc2NvcGVkU3R5bGU6dC5fc3R5bGUpfX1yZXR1cm4gZX1mdW5jdGlvbiBxKHQpe2xldCBlPUYodCk7aWYoZSYmdm9pZCAwPT09ZS5fY3NzVGV4dCl7bGV0IHQ9KGZ1bmN0aW9uIG4odCl7bGV0IGU9IiIsbj1XKHQpO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKWUrPW5bdF0udGV4dENvbnRlbnQ7cmV0dXJuIGV9Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovKShlKSxuPWUucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtuJiYodCs9KGZ1bmN0aW9uIGkodCxlKXtsZXQgbj0iIjtjb25zdCBpPUcodCxlKTtmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyl7bGV0IGU9aVt0XTtlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSxuKz1lLnRleHRDb250ZW50fXJldHVybiBufSkobixlLmFzc2V0cGF0aCkpLGUuX2Nzc1RleHQ9dHx8bnVsbH1yZXR1cm4gZXx8Y29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBzdHlsZSBkYXRhIGluIG1vZHVsZSBuYW1lZCIsdCksZSYmZS5fY3NzVGV4dHx8IiJ9Y29uc3QgWT13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoJiZ3aW5kb3cuU2hhZHlET00ud3JhcD93aW5kb3cuU2hhZHlET00ud3JhcDp3aW5kb3cuU2hhZHlET00/dD0+U2hhZHlET00ucGF0Y2godCk6dD0+dDsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9mdW5jdGlvbiBYKHQpe3JldHVybiB0LmluZGV4T2YoIi4iKT49MH1mdW5jdGlvbiAkKHQpe2xldCBlPXQuaW5kZXhPZigiLiIpO3JldHVybi0xPT09ZT90OnQuc2xpY2UoMCxlKX1mdW5jdGlvbiBLKHQsZSl7cmV0dXJuIDA9PT10LmluZGV4T2YoZSsiLiIpfWZ1bmN0aW9uIFoodCxlKXtyZXR1cm4gMD09PWUuaW5kZXhPZih0KyIuIil9ZnVuY3Rpb24gSih0LGUsbil7cmV0dXJuIGUrbi5zbGljZSh0Lmxlbmd0aCl9ZnVuY3Rpb24gUSh0LGUpe3JldHVybiB0PT09ZXx8Syh0LGUpfHxaKHQsZSl9ZnVuY3Rpb24gdHQodCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7bGV0IGU9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2xldCBpPXRbbl0udG9TdHJpbmcoKS5zcGxpdCgiLiIpO2ZvcihsZXQgdD0wO3Q8aS5sZW5ndGg7dCsrKWUucHVzaChpW3RdKX1yZXR1cm4gZS5qb2luKCIuIil9cmV0dXJuIHR9ZnVuY3Rpb24gZXQodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dHQodCkuc3BsaXQoIi4iKTp0LnRvU3RyaW5nKCkuc3BsaXQoIi4iKX1mdW5jdGlvbiBudCh0LGUsbil7bGV0IGk9dCxyPWV0KGUpO2ZvcihsZXQgdD0wO3Q8ci5sZW5ndGg7dCsrKXtpZighaSlyZXR1cm47aT1pW3JbdF1dfXJldHVybiBuJiYobi5wYXRoPXIuam9pbigiLiIpKSxpfWZ1bmN0aW9uIGl0KHQsZSxuKXtsZXQgaT10LHI9ZXQoZSksbz1yW3IubGVuZ3RoLTFdO2lmKHIubGVuZ3RoPjEpe2ZvcihsZXQgdD0wO3Q8ci5sZW5ndGgtMTt0KyspaWYoaT1pW3JbdF1dLCFpKXJldHVybjtpW29dPW59ZWxzZSBpW2VdPW47cmV0dXJuIHIuam9pbigiLiIpfQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL2NvbnN0IHJ0PXt9LG90PS8tW2Etel0vZyxhdD0vKFtBLVpdKS9nO2Z1bmN0aW9uIHN0KHQpe3JldHVybiBydFt0XXx8KHJ0W3RdPXQuaW5kZXhPZigiLSIpPDA/dDp0LnJlcGxhY2Uob3QsKHQ9PnRbMV0udG9VcHBlckNhc2UoKSkpKX1mdW5jdGlvbiBsdCh0KXtyZXR1cm4gcnRbdF18fChydFt0XT10LnJlcGxhY2UoYXQsIi0kMSIpLnRvTG93ZXJDYXNlKCkpfQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL2xldCBjdD0wLHV0PTAsaHQ9W10sZHQ9MCxwdD0hMSxmdD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7bmV3IHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyKChmdW5jdGlvbiBtdCgpe3B0PSExO2NvbnN0IHQ9aHQubGVuZ3RoO2ZvcihsZXQgZT0wO2U8dDtlKyspe2xldCB0PWh0W2VdO2lmKHQpdHJ5e3QoKX1jYXRjaCh0KXtzZXRUaW1lb3V0KCgoKT0+e3Rocm93IHR9KSl9fWh0LnNwbGljZSgwLHQpLHV0Kz10fSkpLm9ic2VydmUoZnQse2NoYXJhY3RlckRhdGE6ITB9KTtjb25zdCBndD17YWZ0ZXI6dD0+KHtydW46ZT0+d2luZG93LnNldFRpbWVvdXQoZSx0KSxjYW5jZWwodCl7d2luZG93LmNsZWFyVGltZW91dCh0KX19KSxydW46KHQsZSk9PndpbmRvdy5zZXRUaW1lb3V0KHQsZSksY2FuY2VsKHQpe3dpbmRvdy5jbGVhclRpbWVvdXQodCl9fSxfdD17cnVuOnQ9PndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCksY2FuY2VsKHQpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0KX19LHl0PXtydW46dD0+d2luZG93LnJlcXVlc3RJZGxlQ2FsbGJhY2s/d2luZG93LnJlcXVlc3RJZGxlQ2FsbGJhY2sodCk6d2luZG93LnNldFRpbWVvdXQodCwxNiksY2FuY2VsKHQpe3dpbmRvdy5jYW5jZWxJZGxlQ2FsbGJhY2s/d2luZG93LmNhbmNlbElkbGVDYWxsYmFjayh0KTp3aW5kb3cuY2xlYXJUaW1lb3V0KHQpfX0sdnQ9e3J1bjp0PT4ocHR8fChwdD0hMCxmdC50ZXh0Q29udGVudD1kdCsrKSxodC5wdXNoKHQpLGN0KyspLGNhbmNlbCh0KXtjb25zdCBlPXQtdXQ7aWYoZT49MCl7aWYoIWh0W2VdKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBhc3luYyBoYW5kbGU6ICIrdCk7aHRbZV09bnVsbH19fSxidD12dCx4dD1JKCh0PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGNyZWF0ZVByb3BlcnRpZXModCl7Y29uc3QgZT10aGlzLnByb3RvdHlwZTtmb3IobGV0IG4gaW4gdCluIGluIGV8fGUuX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3Iobil9c3RhdGljIGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eSh0KXtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpfXN0YXRpYyB0eXBlRm9yUHJvcGVydHkodCl7fV9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKHQsZSl7dGhpcy5fYWRkUHJvcGVydHlUb0F0dHJpYnV0ZU1hcCh0KSx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZGF0YUhhc0FjY2Vzc29yIix0aGlzKSl8fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yPU9iamVjdC5hc3NpZ24oe30sdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcikpLHRoaXMuX19kYXRhSGFzQWNjZXNzb3JbdF18fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yW3RdPSEwLHRoaXMuX2RlZmluZVByb3BlcnR5QWNjZXNzb3IodCxlKSl9X2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAodCl7dGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFBdHRyaWJ1dGVzIix0aGlzKSl8fCh0aGlzLl9fZGF0YUF0dHJpYnV0ZXM9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9fZGF0YUF0dHJpYnV0ZXMpKTtsZXQgZT10aGlzLl9fZGF0YUF0dHJpYnV0ZXNbdF07cmV0dXJuIGV8fChlPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHQpLHRoaXMuX19kYXRhQXR0cmlidXRlc1tlXT10KSxlfV9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7Z2V0KCl7cmV0dXJuIHRoaXMuX19kYXRhW3RdfSxzZXQ6ZT9mdW5jdGlvbigpe306ZnVuY3Rpb24oZSl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KHQsZSwhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9fSl9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19kYXRhRW5hYmxlZD0hMSx0aGlzLl9fZGF0YVJlYWR5PSExLHRoaXMuX19kYXRhSW52YWxpZD0hMSx0aGlzLl9fZGF0YT17fSx0aGlzLl9fZGF0YVBlbmRpbmc9bnVsbCx0aGlzLl9fZGF0YU9sZD1udWxsLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcz1udWxsLHRoaXMuX19kYXRhQ291bnRlcj0wLHRoaXMuX19zZXJpYWxpemluZz0hMSx0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fX2RhdGFSZWFkeT0hMCx0aGlzLl9mbHVzaFByb3BlcnRpZXMoKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXtmb3IobGV0IHQgaW4gdGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcil0aGlzLmhhc093blByb3BlcnR5KHQpJiYodGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzPXRoaXMuX19kYXRhSW5zdGFuY2VQcm9wc3x8e30sdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzW3RdPXRoaXNbdF0sZGVsZXRlIHRoaXNbdF0pfV9pbml0aWFsaXplSW5zdGFuY2VQcm9wZXJ0aWVzKHQpe09iamVjdC5hc3NpZ24odGhpcyx0KX1fc2V0UHJvcGVydHkodCxlKXt0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkodCxlKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1fZ2V0UHJvcGVydHkodCl7cmV0dXJuIHRoaXMuX19kYXRhW3RdfV9zZXRQZW5kaW5nUHJvcGVydHkodCxlLG4pe2xldCBpPXRoaXMuX19kYXRhW3RdLHI9dGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UodCxlLGkpO3JldHVybiByJiYodGhpcy5fX2RhdGFQZW5kaW5nfHwodGhpcy5fX2RhdGFQZW5kaW5nPXt9LHRoaXMuX19kYXRhT2xkPXt9KSx0aGlzLl9fZGF0YU9sZCYmISh0IGluIHRoaXMuX19kYXRhT2xkKSYmKHRoaXMuX19kYXRhT2xkW3RdPWkpLHRoaXMuX19kYXRhW3RdPWUsdGhpcy5fX2RhdGFQZW5kaW5nW3RdPWUpLHJ9X2lzUHJvcGVydHlQZW5kaW5nKHQpe3JldHVybiEoIXRoaXMuX19kYXRhUGVuZGluZ3x8IXRoaXMuX19kYXRhUGVuZGluZy5oYXNPd25Qcm9wZXJ0eSh0KSl9X2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl7IXRoaXMuX19kYXRhSW52YWxpZCYmdGhpcy5fX2RhdGFSZWFkeSYmKHRoaXMuX19kYXRhSW52YWxpZD0hMCxidC5ydW4oKCgpPT57dGhpcy5fX2RhdGFJbnZhbGlkJiYodGhpcy5fX2RhdGFJbnZhbGlkPSExLHRoaXMuX2ZsdXNoUHJvcGVydGllcygpKX0pKSl9X2VuYWJsZVByb3BlcnRpZXMoKXt0aGlzLl9fZGF0YUVuYWJsZWR8fCh0aGlzLl9fZGF0YUVuYWJsZWQ9ITAsdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzJiYodGhpcy5faW5pdGlhbGl6ZUluc3RhbmNlUHJvcGVydGllcyh0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHMpLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcz1udWxsKSx0aGlzLnJlYWR5KCkpfV9mbHVzaFByb3BlcnRpZXMoKXt0aGlzLl9fZGF0YUNvdW50ZXIrKztjb25zdCB0PXRoaXMuX19kYXRhLGU9dGhpcy5fX2RhdGFQZW5kaW5nLG49dGhpcy5fX2RhdGFPbGQ7dGhpcy5fc2hvdWxkUHJvcGVydGllc0NoYW5nZSh0LGUsbikmJih0aGlzLl9fZGF0YVBlbmRpbmc9bnVsbCx0aGlzLl9fZGF0YU9sZD1udWxsLHRoaXMuX3Byb3BlcnRpZXNDaGFuZ2VkKHQsZSxuKSksdGhpcy5fX2RhdGFDb3VudGVyLS19X3Nob3VsZFByb3BlcnRpZXNDaGFuZ2UodCxlLG4pe3JldHVybiBCb29sZWFuKGUpfV9wcm9wZXJ0aWVzQ2hhbmdlZCh0LGUsbil7fV9zaG91bGRQcm9wZXJ0eUNoYW5nZSh0LGUsbil7cmV0dXJuIG4hPT1lJiYobj09bnx8ZT09ZSl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxuLGkpe2UhPT1uJiZ0aGlzLl9hdHRyaWJ1dGVUb1Byb3BlcnR5KHQsbiksc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrJiZzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4saSl9X2F0dHJpYnV0ZVRvUHJvcGVydHkodCxlLG4pe2lmKCF0aGlzLl9fc2VyaWFsaXppbmcpe2NvbnN0IGk9dGhpcy5fX2RhdGFBdHRyaWJ1dGVzLHI9aSYmaVt0XXx8dDt0aGlzW3JdPXRoaXMuX2Rlc2VyaWFsaXplVmFsdWUoZSxufHx0aGlzLmNvbnN0cnVjdG9yLnR5cGVGb3JQcm9wZXJ0eShyKSl9fV9wcm9wZXJ0eVRvQXR0cmlidXRlKHQsZSxuKXt0aGlzLl9fc2VyaWFsaXppbmc9ITAsdGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUodGhpcyxuPWFyZ3VtZW50cy5sZW5ndGg8Mz90aGlzW3RdOm4sZXx8dGhpcy5jb25zdHJ1Y3Rvci5hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkodCkpLHRoaXMuX19zZXJpYWxpemluZz0hMX1fdmFsdWVUb05vZGVBdHRyaWJ1dGUodCxlLG4pe2NvbnN0IGk9dGhpcy5fc2VyaWFsaXplVmFsdWUoZSk7ImNsYXNzIiE9PW4mJiJuYW1lIiE9PW4mJiJzbG90IiE9PW58fCh0PVkodCkpLHZvaWQgMD09PWk/dC5yZW1vdmVBdHRyaWJ1dGUobik6dC5zZXRBdHRyaWJ1dGUobixpKX1fc2VyaWFsaXplVmFsdWUodCl7c3dpdGNoKHR5cGVvZiB0KXtjYXNlImJvb2xlYW4iOnJldHVybiB0PyIiOnZvaWQgMDtkZWZhdWx0OnJldHVybiBudWxsIT10P3QudG9TdHJpbmcoKTp2b2lkIDB9fV9kZXNlcmlhbGl6ZVZhbHVlKHQsZSl7c3dpdGNoKGUpe2Nhc2UgQm9vbGVhbjpyZXR1cm4gbnVsbCE9PXQ7Y2FzZSBOdW1iZXI6cmV0dXJuIE51bWJlcih0KTtkZWZhdWx0OnJldHVybiB0fX19KSksd3Q9e307bGV0IFN0PUhUTUxFbGVtZW50LnByb3RvdHlwZTtmb3IoO1N0Oyl7bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3QpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXd0W3RbZV1dPSEwO1N0PU9iamVjdC5nZXRQcm90b3R5cGVPZihTdCl9Y29uc3QgTXQ9SSgodD0+e2NvbnN0IGU9eHQodCk7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgY3JlYXRlUHJvcGVydGllc0ZvckF0dHJpYnV0ZXMoKXtsZXQgdD10aGlzLm9ic2VydmVkQXR0cmlidXRlcztmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLnByb3RvdHlwZS5fY3JlYXRlUHJvcGVydHlBY2Nlc3NvcihzdCh0W2VdKSl9c3RhdGljIGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eSh0KXtyZXR1cm4gbHQodCl9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFQcm90byYmKHRoaXMuX2luaXRpYWxpemVQcm90b1Byb3BlcnRpZXModGhpcy5fX2RhdGFQcm90byksdGhpcy5fX2RhdGFQcm90bz1udWxsKSxzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKX1faW5pdGlhbGl6ZVByb3RvUHJvcGVydGllcyh0KXtmb3IobGV0IGUgaW4gdCl0aGlzLl9zZXRQcm9wZXJ0eShlLHRbZV0pfV9lbnN1cmVBdHRyaWJ1dGUodCxlKXt0aGlzLmhhc0F0dHJpYnV0ZSh0KXx8dGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUodGhpcyxlLHQpfV9zZXJpYWxpemVWYWx1ZSh0KXtzd2l0Y2godHlwZW9mIHQpe2Nhc2Uib2JqZWN0IjppZih0IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gdC50b1N0cmluZygpO2lmKHQpdHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeSh0KX1jYXRjaCh0KXtyZXR1cm4iIn1kZWZhdWx0OnJldHVybiBzdXBlci5fc2VyaWFsaXplVmFsdWUodCl9fV9kZXNlcmlhbGl6ZVZhbHVlKHQsZSl7bGV0IG47c3dpdGNoKGUpe2Nhc2UgT2JqZWN0OnRyeXtuPUpTT04ucGFyc2UodCl9Y2F0Y2goZSl7bj10fWJyZWFrO2Nhc2UgQXJyYXk6dHJ5e249SlNPTi5wYXJzZSh0KX1jYXRjaChlKXtuPW51bGwsY29uc29sZS53YXJuKGBQb2x5bWVyOjpBdHRyaWJ1dGVzOiBjb3VsZG4ndCBkZWNvZGUgQXJyYXkgYXMgSlNPTjogJHt0fWApfWJyZWFrO2Nhc2UgRGF0ZTpuPWlzTmFOKHQpP1N0cmluZyh0KTpOdW1iZXIodCksbj1uZXcgRGF0ZShuKTticmVhaztkZWZhdWx0Om49c3VwZXIuX2Rlc2VyaWFsaXplVmFsdWUodCxlKX1yZXR1cm4gbn1fZGVmaW5lUHJvcGVydHlBY2Nlc3Nvcih0LGUpeyEoZnVuY3Rpb24gbih0LGUpe2lmKCF3dFtlXSl7bGV0IG49dFtlXTt2b2lkIDAhPT1uJiYodC5fX2RhdGE/dC5fc2V0UGVuZGluZ1Byb3BlcnR5KGUsbik6KHQuX19kYXRhUHJvdG8/dC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFQcm90byIsdCkpfHwodC5fX2RhdGFQcm90bz1PYmplY3QuY3JlYXRlKHQuX19kYXRhUHJvdG8pKTp0Ll9fZGF0YVByb3RvPXt9LHQuX19kYXRhUHJvdG9bZV09bikpfX0pKHRoaXMsdCksc3VwZXIuX2RlZmluZVByb3BlcnR5QWNjZXNzb3IodCxlKX1faGFzQWNjZXNzb3IodCl7cmV0dXJuIHRoaXMuX19kYXRhSGFzQWNjZXNzb3ImJnRoaXMuX19kYXRhSGFzQWNjZXNzb3JbdF19X2lzUHJvcGVydHlQZW5kaW5nKHQpe3JldHVybiBCb29sZWFuKHRoaXMuX19kYXRhUGVuZGluZyYmdCBpbiB0aGlzLl9fZGF0YVBlbmRpbmcpfX19KSksRXQ9eyJkb20taWYiOiEwLCJkb20tcmVwZWF0IjohMH07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovbGV0IFR0PSExLEN0PSExO2Z1bmN0aW9uIEF0KHQpe2xldCBlPXQuZ2V0QXR0cmlidXRlKCJpcyIpO2lmKGUmJkV0W2VdKXtsZXQgbj10O2ZvcihuLnJlbW92ZUF0dHJpYnV0ZSgiaXMiKSx0PW4ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpLG4ucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodCxuKSx0LmFwcGVuZENoaWxkKG4pO24uYXR0cmlidXRlcy5sZW5ndGg7KXQuc2V0QXR0cmlidXRlKG4uYXR0cmlidXRlc1swXS5uYW1lLG4uYXR0cmlidXRlc1swXS52YWx1ZSksbi5yZW1vdmVBdHRyaWJ1dGUobi5hdHRyaWJ1dGVzWzBdLm5hbWUpfXJldHVybiB0fWZ1bmN0aW9uIGt0KHQsZSl7bGV0IG49ZS5wYXJlbnRJbmZvJiZrdCh0LGUucGFyZW50SW5mbyk7aWYoIW4pcmV0dXJuIHQ7Zm9yKGxldCB0PW4uZmlyc3RDaGlsZCxpPTA7dDt0PXQubmV4dFNpYmxpbmcpaWYoZS5wYXJlbnRJbmRleD09PWkrKylyZXR1cm4gdH1mdW5jdGlvbiBMdCh0LGUsbixpKXtpLmlkJiYoZVtpLmlkXT1uKX1mdW5jdGlvbiBQdCh0LGUsbil7aWYobi5ldmVudHMmJm4uZXZlbnRzLmxlbmd0aClmb3IobGV0IGkscj0wLG89bi5ldmVudHM7cjxvLmxlbmd0aCYmKGk9b1tyXSk7cisrKXQuX2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUoZSxpLm5hbWUsaS52YWx1ZSx0KX1mdW5jdGlvbiBOdCh0LGUsbixpKXtuLnRlbXBsYXRlSW5mbyYmKGUuX3RlbXBsYXRlSW5mbz1uLnRlbXBsYXRlSW5mbyxlLl9wYXJlbnRUZW1wbGF0ZUluZm89aSl9Y29uc3QgSXQ9SSgodD0+Y2xhc3MgZXh0ZW5kcyB0e3N0YXRpYyBfcGFyc2VUZW1wbGF0ZSh0LGUpe2lmKCF0Ll90ZW1wbGF0ZUluZm8pe2xldCBuPXQuX3RlbXBsYXRlSW5mbz17fTtuLm5vZGVJbmZvTGlzdD1bXSxuLm5lc3RlZFRlbXBsYXRlPUJvb2xlYW4oZSksbi5zdHJpcFdoaXRlU3BhY2U9ZSYmZS5zdHJpcFdoaXRlU3BhY2V8fHQuaGFzQXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiksdGhpcy5fcGFyc2VUZW1wbGF0ZUNvbnRlbnQodCxuLHtwYXJlbnQ6bnVsbH0pfXJldHVybiB0Ll90ZW1wbGF0ZUluZm99c3RhdGljIF9wYXJzZVRlbXBsYXRlQ29udGVudCh0LGUsbil7cmV0dXJuIHRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlKHQuY29udGVudCxlLG4pfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGUodCxlLG4pe2xldCBpPSExLHI9dDtyZXR1cm4idGVtcGxhdGUiIT1yLmxvY2FsTmFtZXx8ci5oYXNBdHRyaWJ1dGUoInByZXNlcnZlLWNvbnRlbnQiKT8ic2xvdCI9PT1yLmxvY2FsTmFtZSYmKGUuaGFzSW5zZXJ0aW9uUG9pbnQ9ITApOmk9dGhpcy5fcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKHIsZSxuKXx8aSwoZnVuY3Rpb24gbyh0KXsoZnVuY3Rpb24gZSgpe2lmKCFUdCl7VHQ9ITA7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO3QucGxhY2Vob2xkZXI9ImEiLEN0PXQucGxhY2Vob2xkZXI9PT10LnRleHRDb250ZW50fXJldHVybiBDdH0pKCkmJiJ0ZXh0YXJlYSI9PT10LmxvY2FsTmFtZSYmdC5wbGFjZWhvbGRlciYmdC5wbGFjZWhvbGRlcj09PXQudGV4dENvbnRlbnQmJih0LnRleHRDb250ZW50PW51bGwpfSkociksci5maXJzdENoaWxkJiZ0aGlzLl9wYXJzZVRlbXBsYXRlQ2hpbGROb2RlcyhyLGUsbiksci5oYXNBdHRyaWJ1dGVzJiZyLmhhc0F0dHJpYnV0ZXMoKSYmKGk9dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGVzKHIsZSxuKXx8aSksaXx8bi5ub3RlZH1zdGF0aWMgX3BhcnNlVGVtcGxhdGVDaGlsZE5vZGVzKHQsZSxuKXtpZigic2NyaXB0IiE9PXQubG9jYWxOYW1lJiYic3R5bGUiIT09dC5sb2NhbE5hbWUpZm9yKGxldCBpLHI9dC5maXJzdENoaWxkLG89MDtyO3I9aSl7aWYoInRlbXBsYXRlIj09ci5sb2NhbE5hbWUmJihyPUF0KHIpKSxpPXIubmV4dFNpYmxpbmcsci5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFKXtsZXQgbj1pO2Zvcig7biYmbi5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFOylyLnRleHRDb250ZW50Kz1uLnRleHRDb250ZW50LGk9bi5uZXh0U2libGluZyx0LnJlbW92ZUNoaWxkKG4pLG49aTtpZihlLnN0cmlwV2hpdGVTcGFjZSYmIXIudGV4dENvbnRlbnQudHJpbSgpKXt0LnJlbW92ZUNoaWxkKHIpO2NvbnRpbnVlfX1sZXQgYT17cGFyZW50SW5kZXg6byxwYXJlbnRJbmZvOm59O3RoaXMuX3BhcnNlVGVtcGxhdGVOb2RlKHIsZSxhKSYmKGEuaW5mb0luZGV4PWUubm9kZUluZm9MaXN0LnB1c2goYSktMSksci5wYXJlbnROb2RlJiZvKyt9fXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKHQsZSxuKXtsZXQgaT10LHI9dGhpcy5fcGFyc2VUZW1wbGF0ZShpLGUpO3JldHVybihyLmNvbnRlbnQ9aS5jb250ZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmRDaGlsZChpLmNvbnRlbnQpLG4udGVtcGxhdGVJbmZvPXIsITB9c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZUF0dHJpYnV0ZXModCxlLG4pe2xldCBpPSExLHI9QXJyYXkuZnJvbSh0LmF0dHJpYnV0ZXMpO2ZvcihsZXQgbyxhPXIubGVuZ3RoLTE7bz1yW2FdO2EtLSlpPXRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKHQsZSxuLG8ubmFtZSxvLnZhbHVlKXx8aTtyZXR1cm4gaX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKHQsZSxuLGkscil7cmV0dXJuIm9uLSI9PT1pLnNsaWNlKDAsMyk/KHQucmVtb3ZlQXR0cmlidXRlKGkpLG4uZXZlbnRzPW4uZXZlbnRzfHxbXSxuLmV2ZW50cy5wdXNoKHtuYW1lOmkuc2xpY2UoMyksdmFsdWU6cn0pLCEwKToiaWQiPT09aSYmKG4uaWQ9ciwhMCl9c3RhdGljIF9jb250ZW50Rm9yVGVtcGxhdGUodCl7bGV0IGU9dC5fdGVtcGxhdGVJbmZvO3JldHVybiBlJiZlLmNvbnRlbnR8fHQuY29udGVudH1fc3RhbXBUZW1wbGF0ZSh0LGUpe3QmJiF0LmNvbnRlbnQmJndpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50JiZIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlJiZIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlKHQpO2xldCBuPShlPWV8fHRoaXMuY29uc3RydWN0b3IuX3BhcnNlVGVtcGxhdGUodCkpLm5vZGVJbmZvTGlzdCxpPWRvY3VtZW50LmltcG9ydE5vZGUoZS5jb250ZW50fHx0LmNvbnRlbnQsITApO2kuX19ub0luc2VydGlvblBvaW50PSFlLmhhc0luc2VydGlvblBvaW50O2xldCByPWkubm9kZUxpc3Q9bmV3IEFycmF5KG4ubGVuZ3RoKTtpLiQ9e307Zm9yKGxldCB0LG89MCxhPW4ubGVuZ3RoO288YSYmKHQ9bltvXSk7bysrKXtsZXQgbj1yW29dPWt0KGksdCk7THQoMCxpLiQsbix0KSxOdCgwLG4sdCxlKSxQdCh0aGlzLG4sdCl9cmV0dXJuIGk9aSxpfV9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKHQsZSxuLGkpe2xldCByPShmdW5jdGlvbiBvKHQsZSxuKXtyZXR1cm4gdD10Ll9tZXRob2RIb3N0fHx0LGZ1bmN0aW9uKGUpe3Rbbl0/dFtuXShlLGUuZGV0YWlsKTpjb25zb2xlLndhcm4oImxpc3RlbmVyIG1ldGhvZCBgIituKyJgIG5vdCBkZWZpbmVkIil9fSkoaT1pfHx0LDAsbik7cmV0dXJuIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodCxlLHIpLHJ9X2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodCxlLG4pe3QuYWRkRXZlbnRMaXN0ZW5lcihlLG4pfV9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUodCxlLG4pe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4pfX0pKTsKLyoqCiAgICAgKiBAZmlsZW92ZXJ2aWV3CiAgICAgKiBAc3VwcHJlc3Mge2NoZWNrUHJvdG90eXBhbFR5cGVzfQogICAgICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQKICAgICAqIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkKICAgICAqIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkKICAgICAqIEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAKICAgICAqIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICAqL2xldCBSdD0wO2NvbnN0IE90PVtdLHp0PXtDT01QVVRFOiJfX2NvbXB1dGVFZmZlY3RzIixSRUZMRUNUOiJfX3JlZmxlY3RFZmZlY3RzIixOT1RJRlk6Il9fbm90aWZ5RWZmZWN0cyIsUFJPUEFHQVRFOiJfX3Byb3BhZ2F0ZUVmZmVjdHMiLE9CU0VSVkU6Il9fb2JzZXJ2ZUVmZmVjdHMiLFJFQURfT05MWToiX19yZWFkT25seSJ9LER0PS9bQS1aXS87ZnVuY3Rpb24gQnQodCxlLG4pe2xldCBpPXRbZV07aWYoaSl7aWYoIXQuaGFzT3duUHJvcGVydHkoZSkmJihpPXRbZV09T2JqZWN0LmNyZWF0ZSh0W2VdKSxuKSlmb3IobGV0IHQgaW4gaSl7bGV0IGU9aVt0XSxuPWlbdF09QXJyYXkoZS5sZW5ndGgpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKW5bdF09ZVt0XX19ZWxzZSBpPXRbZV09e307cmV0dXJuIGl9ZnVuY3Rpb24gSHQodCxlLG4saSxyLG8pe2lmKGUpe2xldCBhPSExO2NvbnN0IHM9UnQrKztmb3IobGV0IGwgaW4gbil7bGV0IGM9ZVtyPyQobCk6bF07aWYoYylmb3IobGV0IGUsdT0wLGg9Yy5sZW5ndGg7dTxoJiYoZT1jW3VdKTt1KyspZS5pbmZvJiZlLmluZm8ubGFzdFJ1bj09PXN8fHImJiFWdChsLGUudHJpZ2dlcil8fChlLmluZm8mJihlLmluZm8ubGFzdFJ1bj1zKSxlLmZuKHQsbCxuLGksZS5pbmZvLHIsbyksYT0hMCl9cmV0dXJuIGF9cmV0dXJuITF9ZnVuY3Rpb24gRnQodCxlLG4saSxyLG8sYSxzKXtsZXQgbD0hMSxjPWVbYT8kKGkpOmldO2lmKGMpZm9yKGxldCBlLHU9MCxoPWMubGVuZ3RoO3U8aCYmKGU9Y1t1XSk7dSsrKWUuaW5mbyYmZS5pbmZvLmxhc3RSdW49PT1ufHxhJiYhVnQoaSxlLnRyaWdnZXIpfHwoZS5pbmZvJiYoZS5pbmZvLmxhc3RSdW49biksZS5mbih0LGkscixvLGUuaW5mbyxhLHMpLGw9ITApO3JldHVybiBsfWZ1bmN0aW9uIFZ0KHQsZSl7aWYoZSl7bGV0IG49ZS5uYW1lO3JldHVybiBuPT10fHwhKCFlLnN0cnVjdHVyZWR8fCFLKG4sdCkpfHwhKCFlLndpbGRjYXJkfHwhWihuLHQpKX1yZXR1cm4hMH1mdW5jdGlvbiBVdCh0LGUsbixpLHIpe2xldCBvPSJzdHJpbmciPT10eXBlb2Ygci5tZXRob2Q/dFtyLm1ldGhvZF06ci5tZXRob2QsYT1yLnByb3BlcnR5O28/by5jYWxsKHQsdC5fX2RhdGFbYV0saVthXSk6ci5keW5hbWljRm58fGNvbnNvbGUud2Fybigib2JzZXJ2ZXIgbWV0aG9kIGAiK3IubWV0aG9kKyJgIG5vdCBkZWZpbmVkIil9ZnVuY3Rpb24ganQodCxlLG4pe2xldCBpPSQoZSk7cmV0dXJuIGkhPT1lJiYoR3QodCxsdChpKSsiLWNoYW5nZWQiLG5bZV0sZSksITApfWZ1bmN0aW9uIEd0KHQsZSxuLGkpe2xldCByPXt2YWx1ZTpuLHF1ZXVlUHJvcGVydHk6ITB9O2kmJihyLnBhdGg9aSksWSh0KS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChlLHtkZXRhaWw6cn0pKX1mdW5jdGlvbiBXdCh0LGUsbixpLHIsbyl7bGV0IGE9KG8/JChlKTplKSE9ZT9lOm51bGwscz1hP250KHQsYSk6dC5fX2RhdGFbZV07YSYmdm9pZCAwPT09cyYmKHM9bltlXSksR3QodCxyLmV2ZW50TmFtZSxzLGEpfWZ1bmN0aW9uIHF0KHQsZSxuLGkscil7bGV0IG89dC5fX2RhdGFbZV07eSYmKG89eShvLHIuYXR0ck5hbWUsImF0dHJpYnV0ZSIsdCkpLHQuX3Byb3BlcnR5VG9BdHRyaWJ1dGUoZSxyLmF0dHJOYW1lLG8pfWNvbnN0IFl0PSh0LGUsbik9PntsZXQgaT0wLHI9ZS5sZW5ndGgtMSxvPS0xO2Zvcig7aTw9cjspe2NvbnN0IGE9aStyPj4xLHM9bi5nZXQoZVthXS5tZXRob2RJbmZvKS1uLmdldCh0Lm1ldGhvZEluZm8pO2lmKHM8MClpPWErMTtlbHNle2lmKCEocz4wKSl7bz1hO2JyZWFrfXI9YS0xfX1vPDAmJihvPXIrMSksZS5zcGxpY2UobywwLHQpfSxYdD0odCxlLG4saSxyKT0+e2NvbnN0IG89ZVtyPyQodCk6dF07aWYobylmb3IobGV0IGU9MDtlPG8ubGVuZ3RoO2UrKyl7Y29uc3QgYT1vW2VdO2EuaW5mby5sYXN0UnVuPT09UnR8fHImJiFWdCh0LGEudHJpZ2dlcil8fChhLmluZm8ubGFzdFJ1bj1SdCxZdChhLmluZm8sbixpKSl9fTtmdW5jdGlvbiAkdCh0LGUsbixpLHIpe2xldCBvPW5lKHQsZSxuLDAscik7aWYobz09PU90KXJldHVybiExO2xldCBhPXIubWV0aG9kSW5mbztyZXR1cm4gdC5fX2RhdGFIYXNBY2Nlc3NvciYmdC5fX2RhdGFIYXNBY2Nlc3NvclthXT90Ll9zZXRQZW5kaW5nUHJvcGVydHkoYSxvLCEwKToodFthXT1vLCExKX1mdW5jdGlvbiBLdCh0LGUsbixpLHIsbyxhKXtuLmJpbmRpbmdzPW4uYmluZGluZ3N8fFtdO2xldCBzPXtraW5kOmksdGFyZ2V0OnIscGFydHM6byxsaXRlcmFsOmEsaXNDb21wb3VuZDoxIT09by5sZW5ndGh9O2lmKG4uYmluZGluZ3MucHVzaChzKSwoZnVuY3Rpb24gbCh0KXtyZXR1cm4gQm9vbGVhbih0LnRhcmdldCkmJiJhdHRyaWJ1dGUiIT10LmtpbmQmJiJ0ZXh0IiE9dC5raW5kJiYhdC5pc0NvbXBvdW5kJiYieyI9PT10LnBhcnRzWzBdLm1vZGV9KShzKSl7bGV0e2V2ZW50OnQsbmVnYXRlOmV9PXMucGFydHNbMF07cy5saXN0ZW5lckV2ZW50PXR8fGx0KHIpKyItY2hhbmdlZCIscy5saXN0ZW5lck5lZ2F0ZT1lfWxldCBjPWUubm9kZUluZm9MaXN0Lmxlbmd0aDtmb3IobGV0IG49MDtuPHMucGFydHMubGVuZ3RoO24rKyl7bGV0IGk9cy5wYXJ0c1tuXTtpLmNvbXBvdW5kSW5kZXg9bixadCh0LGUscyxpLGMpfX1mdW5jdGlvbiBadCh0LGUsbixpLHIpe2lmKCFpLmxpdGVyYWwpaWYoImF0dHJpYnV0ZSI9PT1uLmtpbmQmJiItIj09PW4udGFyZ2V0WzBdKWNvbnNvbGUud2FybigiQ2Fubm90IHNldCBhdHRyaWJ1dGUgIituLnRhcmdldCsnIGJlY2F1c2UgIi0iIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBzdGFydGluZyBjaGFyYWN0ZXInKTtlbHNle2xldCBvPWkuZGVwZW5kZW5jaWVzLGE9e2luZGV4OnIsYmluZGluZzpuLHBhcnQ6aSxldmFsdWF0b3I6dH07Zm9yKGxldCBuPTA7bjxvLmxlbmd0aDtuKyspe2xldCBpPW9bbl07InN0cmluZyI9PXR5cGVvZiBpJiYoaT1zZShpKSxpLndpbGRjYXJkPSEwKSx0Ll9hZGRUZW1wbGF0ZVByb3BlcnR5RWZmZWN0KGUsaS5yb290UHJvcGVydHkse2ZuOkp0LGluZm86YSx0cmlnZ2VyOml9KX19fWZ1bmN0aW9uIEp0KHQsZSxuLGkscixvLGEpe2xldCBzPWFbci5pbmRleF0sbD1yLmJpbmRpbmcsYz1yLnBhcnQ7aWYobyYmYy5zb3VyY2UmJmUubGVuZ3RoPmMuc291cmNlLmxlbmd0aCYmInByb3BlcnR5Ij09bC5raW5kJiYhbC5pc0NvbXBvdW5kJiZzLl9faXNQcm9wZXJ0eUVmZmVjdHNDbGllbnQmJnMuX19kYXRhSGFzQWNjZXNzb3ImJnMuX19kYXRhSGFzQWNjZXNzb3JbbC50YXJnZXRdKXtsZXQgaT1uW2VdO2U9SihjLnNvdXJjZSxsLnRhcmdldCxlKSxzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoZSxpLCExLCEwKSYmdC5fZW5xdWV1ZUNsaWVudChzKX1lbHNle2xldCBhPXIuZXZhbHVhdG9yLl9ldmFsdWF0ZUJpbmRpbmcodCxjLGUsbixpLG8pO2EhPT1PdCYmKGZ1bmN0aW9uIHUodCxlLG4saSxyKXtpZihyPShmdW5jdGlvbiBvKHQsZSxuLGkpe2lmKG4uaXNDb21wb3VuZCl7bGV0IHI9dC5fX2RhdGFDb21wb3VuZFN0b3JhZ2Vbbi50YXJnZXRdO3JbaS5jb21wb3VuZEluZGV4XT1lLGU9ci5qb2luKCIiKX1yZXR1cm4iYXR0cmlidXRlIiE9PW4ua2luZCYmKCJ0ZXh0Q29udGVudCIhPT1uLnRhcmdldCYmKCJ2YWx1ZSIhPT1uLnRhcmdldHx8ImlucHV0IiE9PXQubG9jYWxOYW1lJiYidGV4dGFyZWEiIT09dC5sb2NhbE5hbWUpfHwoZT1udWxsPT1lPyIiOmUpKSxlfSkoZSxyLG4saSkseSYmKHI9eShyLG4udGFyZ2V0LG4ua2luZCxlKSksImF0dHJpYnV0ZSI9PW4ua2luZCl0Ll92YWx1ZVRvTm9kZUF0dHJpYnV0ZShlLHIsbi50YXJnZXQpO2Vsc2V7bGV0IGk9bi50YXJnZXQ7ZS5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50JiZlLl9fZGF0YUhhc0FjY2Vzc29yJiZlLl9fZGF0YUhhc0FjY2Vzc29yW2ldP2VbenQuUkVBRF9PTkxZXSYmZVt6dC5SRUFEX09OTFldW2ldfHxlLl9zZXRQZW5kaW5nUHJvcGVydHkoaSxyKSYmdC5fZW5xdWV1ZUNsaWVudChlKTp0Ll9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZShlLGkscil9fSkodCxzLGwsYyxhKX19ZnVuY3Rpb24gUXQodCxlKXtpZihlLmlzQ29tcG91bmQpe2xldCBuPXQuX19kYXRhQ29tcG91bmRTdG9yYWdlfHwodC5fX2RhdGFDb21wb3VuZFN0b3JhZ2U9e30pLGk9ZS5wYXJ0cyxyPW5ldyBBcnJheShpLmxlbmd0aCk7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0Kyspclt0XT1pW3RdLmxpdGVyYWw7bGV0IG89ZS50YXJnZXQ7bltvXT1yLGUubGl0ZXJhbCYmInByb3BlcnR5Ij09ZS5raW5kJiYoImNsYXNzTmFtZSI9PT1vJiYodD1ZKHQpKSx0W29dPWUubGl0ZXJhbCl9fWZ1bmN0aW9uIHRlKHQsZSxuKXtpZihuLmxpc3RlbmVyRXZlbnQpe2xldCBpPW4ucGFydHNbMF07dC5hZGRFdmVudExpc3RlbmVyKG4ubGlzdGVuZXJFdmVudCwoZnVuY3Rpb24odCl7IShmdW5jdGlvbiByKHQsZSxuLGksbyl7bGV0IGEscz10LmRldGFpbCxsPXMmJnMucGF0aDtsPyhpPUoobixpLGwpLGE9cyYmcy52YWx1ZSk6YT10LmN1cnJlbnRUYXJnZXRbbl0sYT1vPyFhOmEsZVt6dC5SRUFEX09OTFldJiZlW3p0LlJFQURfT05MWV1baV18fCFlLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxhLCEwLEJvb2xlYW4obCkpfHxzJiZzLnF1ZXVlUHJvcGVydHl8fGUuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9KSh0LGUsbi50YXJnZXQsaS5zb3VyY2UsaS5uZWdhdGUpfSkpfX1mdW5jdGlvbiBlZSh0LGUsbixpLHIsbyl7bGV0IGE9e21ldGhvZE5hbWU6ZS5tZXRob2ROYW1lLGFyZ3M6ZS5hcmdzLG1ldGhvZEluZm86cixkeW5hbWljRm46bz1lLnN0YXRpY3x8byYmKCJvYmplY3QiIT10eXBlb2Ygb3x8b1tlLm1ldGhvZE5hbWVdKX07Zm9yKGxldCByLG89MDtvPGUuYXJncy5sZW5ndGgmJihyPWUuYXJnc1tvXSk7bysrKXIubGl0ZXJhbHx8dC5fYWRkUHJvcGVydHlFZmZlY3Qoci5yb290UHJvcGVydHksbix7Zm46aSxpbmZvOmEsdHJpZ2dlcjpyfSk7cmV0dXJuIG8mJnQuX2FkZFByb3BlcnR5RWZmZWN0KGUubWV0aG9kTmFtZSxuLHtmbjppLGluZm86YX0pLGF9ZnVuY3Rpb24gbmUodCxlLG4saSxyKXtsZXQgbz10Ll9tZXRob2RIb3N0fHx0LGE9b1tyLm1ldGhvZE5hbWVdO2lmKGEpe2xldCBpPXQuX21hcnNoYWxBcmdzKHIuYXJncyxlLG4pO3JldHVybiBpPT09T3Q/T3Q6YS5hcHBseShvLGkpfXIuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm1ldGhvZCBgIityLm1ldGhvZE5hbWUrImAgbm90IGRlZmluZWQiKX1jb25zdCBpZT1bXSxyZT1uZXcgUmVnRXhwKCIoXFxbXFxbfHt7KVxccyooPzooISlcXHMqKT8oKD86W2EtekEtWl8kXVtcXHcuOiRcXC0qXSopXFxzKig/OlxcKFxccyooPzooPzooPzooKD86W2EtekEtWl8kXVtcXHcuOiRcXC0qXSopfCg/OlstK10/WzAtOV0qXFwuP1swLTldKyg/OltlRV1bLStdP1swLTldKyk/KXwoPzooPzonKD86W14nXFxcXF18XFxcXC4pKicpfCg/OlwiKD86W15cIlxcXFxdfFxcXFwuKSpcIikpKVxccyopKD86LFxccyooPzooKD86W2EtekEtWl8kXVtcXHcuOiRcXC0qXSopfCg/OlstK10/WzAtOV0qXFwuP1swLTldKyg/OltlRV1bLStdP1swLTldKyk/KXwoPzooPzonKD86W14nXFxcXF18XFxcXC4pKicpfCg/OlwiKD86W15cIlxcXFxdfFxcXFwuKSpcIikpKVxccyopKSopPylcXClcXHMqKT8pKD86XV18fX0pIiwiZyIpO2Z1bmN0aW9uIG9lKHQpe2xldCBlPSIiO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWUrPXRbbl0ubGl0ZXJhbHx8IiI7cmV0dXJuIGV9ZnVuY3Rpb24gYWUodCl7bGV0IGU9dC5tYXRjaCgvKFteXHNdKz8pXCgoW1xzXFNdKilcKS8pO2lmKGUpe2xldCB0PXttZXRob2ROYW1lOmVbMV0sc3RhdGljOiEwLGFyZ3M6aWV9O3JldHVybiBlWzJdLnRyaW0oKT8oZnVuY3Rpb24gbih0LGUpe3JldHVybiBlLmFyZ3M9dC5tYXAoKGZ1bmN0aW9uKHQpe2xldCBuPXNlKHQpO3JldHVybiBuLmxpdGVyYWx8fChlLnN0YXRpYz0hMSksbn0pLHRoaXMpLGV9KShlWzJdLnJlcGxhY2UoL1xcLC9nLCImY29tbWE7Iikuc3BsaXQoIiwiKSx0KTp0fXJldHVybiBudWxsfWZ1bmN0aW9uIHNlKHQpe2xldCBlPXQudHJpbSgpLnJlcGxhY2UoLyZjb21tYTsvZywiLCIpLnJlcGxhY2UoL1xcKC4pL2csIiQxIiksbj17bmFtZTplLHZhbHVlOiIiLGxpdGVyYWw6ITF9LGk9ZVswXTtzd2l0Y2goIi0iPT09aSYmKGk9ZVsxXSksaT49IjAiJiZpPD0iOSImJihpPSIjIiksaSl7Y2FzZSInIjpjYXNlJyInOm4udmFsdWU9ZS5zbGljZSgxLC0xKSxuLmxpdGVyYWw9ITA7YnJlYWs7Y2FzZSIjIjpuLnZhbHVlPU51bWJlcihlKSxuLmxpdGVyYWw9ITB9cmV0dXJuIG4ubGl0ZXJhbHx8KG4ucm9vdFByb3BlcnR5PSQoZSksbi5zdHJ1Y3R1cmVkPVgoZSksbi5zdHJ1Y3R1cmVkJiYobi53aWxkY2FyZD0iLioiPT1lLnNsaWNlKC0yKSxuLndpbGRjYXJkJiYobi5uYW1lPWUuc2xpY2UoMCwtMikpKSksbn1mdW5jdGlvbiBsZSh0LGUsbil7bGV0IGk9bnQodCxuKTtyZXR1cm4gdm9pZCAwPT09aSYmKGk9ZVtuXSksaX1mdW5jdGlvbiBjZSh0LGUsbixpKXtjb25zdCByPXtpbmRleFNwbGljZXM6aX07RSYmIXQuX292ZXJyaWRlTGVnYWN5VW5kZWZpbmVkJiYoZS5zcGxpY2VzPXIpLHQubm90aWZ5UGF0aChuKyIuc3BsaWNlcyIsciksdC5ub3RpZnlQYXRoKG4rIi5sZW5ndGgiLGUubGVuZ3RoKSxFJiYhdC5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJihyLmluZGV4U3BsaWNlcz1bXSl9ZnVuY3Rpb24gdWUodCxlLG4saSxyLG8pe2NlKHQsZSxuLFt7aW5kZXg6aSxhZGRlZENvdW50OnIscmVtb3ZlZDpvLG9iamVjdDplLHR5cGU6InNwbGljZSJ9XSl9Y29uc3QgaGU9SSgodD0+e2NvbnN0IGU9SXQoTXQodCkpO3JldHVybiBjbGFzcyBleHRlbmRzIGV7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudD0hMH1nZXQgUFJPUEVSVFlfRUZGRUNUX1RZUEVTKCl7cmV0dXJuIHp0fV9pbml0aWFsaXplUHJvcGVydGllcygpe3N1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX3JlZ2lzdGVySG9zdCgpLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5PSExLHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM9bnVsbCx0aGlzLl9fZGF0YVRvTm90aWZ5PW51bGwsdGhpcy5fX2RhdGFMaW5rZWRQYXRocz1udWxsLHRoaXMuX19kYXRhSGFzUGF0aHM9ITEsdGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2U9dGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2V8fG51bGwsdGhpcy5fX2RhdGFIb3N0PXRoaXMuX19kYXRhSG9zdHx8bnVsbCx0aGlzLl9fZGF0YVRlbXA9e30sdGhpcy5fX2RhdGFDbGllbnRzSW5pdGlhbGl6ZWQ9ITF9X3JlZ2lzdGVySG9zdCgpe2lmKGRlLmxlbmd0aCl7bGV0IHQ9ZGVbZGUubGVuZ3RoLTFdO3QuX2VucXVldWVDbGllbnQodGhpcyksdGhpcy5fX2RhdGFIb3N0PXR9fV9pbml0aWFsaXplUHJvdG9Qcm9wZXJ0aWVzKHQpe3RoaXMuX19kYXRhPU9iamVjdC5jcmVhdGUodCksdGhpcy5fX2RhdGFQZW5kaW5nPU9iamVjdC5jcmVhdGUodCksdGhpcy5fX2RhdGFPbGQ9e319X2luaXRpYWxpemVJbnN0YW5jZVByb3BlcnRpZXModCl7bGV0IGU9dGhpc1t6dC5SRUFEX09OTFldO2ZvcihsZXQgbiBpbiB0KWUmJmVbbl18fCh0aGlzLl9fZGF0YVBlbmRpbmc9dGhpcy5fX2RhdGFQZW5kaW5nfHx7fSx0aGlzLl9fZGF0YU9sZD10aGlzLl9fZGF0YU9sZHx8e30sdGhpcy5fX2RhdGFbbl09dGhpcy5fX2RhdGFQZW5kaW5nW25dPXRbbl0pfV9hZGRQcm9wZXJ0eUVmZmVjdCh0LGUsbil7dGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3Nvcih0LGU9PXp0LlJFQURfT05MWSk7bGV0IGk9QnQodGhpcyxlLCEwKVt0XTtpfHwoaT10aGlzW2VdW3RdPVtdKSxpLnB1c2gobil9X3JlbW92ZVByb3BlcnR5RWZmZWN0KHQsZSxuKXtsZXQgaT1CdCh0aGlzLGUsITApW3RdLHI9aS5pbmRleE9mKG4pO3I+PTAmJmkuc3BsaWNlKHIsMSl9X2hhc1Byb3BlcnR5RWZmZWN0KHQsZSl7bGV0IG49dGhpc1tlXTtyZXR1cm4gQm9vbGVhbihuJiZuW3RdKX1faGFzUmVhZE9ubHlFZmZlY3QodCl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KHQsenQuUkVBRF9PTkxZKX1faGFzTm90aWZ5RWZmZWN0KHQpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdCh0LHp0Lk5PVElGWSl9X2hhc1JlZmxlY3RFZmZlY3QodCl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KHQsenQuUkVGTEVDVCl9X2hhc0NvbXB1dGVkRWZmZWN0KHQpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdCh0LHp0LkNPTVBVVEUpfV9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgodCxlLG4saSl7aWYoaXx8JChBcnJheS5pc0FycmF5KHQpP3RbMF06dCkhPT10KXtpZighaSl7bGV0IG49bnQodGhpcyx0KTtpZighKHQ9aXQodGhpcyx0LGUpKXx8IXN1cGVyLl9zaG91bGRQcm9wZXJ0eUNoYW5nZSh0LGUsbikpcmV0dXJuITF9aWYodGhpcy5fX2RhdGFIYXNQYXRocz0hMCx0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkodCxlLG4pKXJldHVybihmdW5jdGlvbiByKHQsZSxuKXtsZXQgaT10Ll9fZGF0YUxpbmtlZFBhdGhzO2lmKGkpe2xldCByO2ZvcihsZXQgbyBpbiBpKXtsZXQgYT1pW29dO1oobyxlKT8ocj1KKG8sYSxlKSx0Ll9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgocixuLCEwLCEwKSk6WihhLGUpJiYocj1KKGEsbyxlKSx0Ll9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgocixuLCEwLCEwKSl9fX0pKHRoaXMsdCxlKSwhMH1lbHNle2lmKHRoaXMuX19kYXRhSGFzQWNjZXNzb3ImJnRoaXMuX19kYXRhSGFzQWNjZXNzb3JbdF0pcmV0dXJuIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eSh0LGUsbik7dGhpc1t0XT1lfXJldHVybiExfV9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZSh0LGUsbil7bj09PXRbZV0mJiJvYmplY3QiIT10eXBlb2Ygbnx8KCJjbGFzc05hbWUiPT09ZSYmKHQ9WSh0KSksdFtlXT1uKX1fc2V0UGVuZGluZ1Byb3BlcnR5KHQsZSxuKXtsZXQgaT10aGlzLl9fZGF0YUhhc1BhdGhzJiZYKHQpO3JldHVybiEhdGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UodCxlLChpP3RoaXMuX19kYXRhVGVtcDp0aGlzLl9fZGF0YSlbdF0pJiYodGhpcy5fX2RhdGFQZW5kaW5nfHwodGhpcy5fX2RhdGFQZW5kaW5nPXt9LHRoaXMuX19kYXRhT2xkPXt9KSx0IGluIHRoaXMuX19kYXRhT2xkfHwodGhpcy5fX2RhdGFPbGRbdF09dGhpcy5fX2RhdGFbdF0pLGk/dGhpcy5fX2RhdGFUZW1wW3RdPWU6dGhpcy5fX2RhdGFbdF09ZSx0aGlzLl9fZGF0YVBlbmRpbmdbdF09ZSwoaXx8dGhpc1t6dC5OT1RJRlldJiZ0aGlzW3p0Lk5PVElGWV1bdF0pJiYodGhpcy5fX2RhdGFUb05vdGlmeT10aGlzLl9fZGF0YVRvTm90aWZ5fHx7fSx0aGlzLl9fZGF0YVRvTm90aWZ5W3RdPW4pLCEwKX1fc2V0UHJvcGVydHkodCxlKXt0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkodCxlLCEwKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1faW52YWxpZGF0ZVByb3BlcnRpZXMoKXt0aGlzLl9fZGF0YVJlYWR5JiZ0aGlzLl9mbHVzaFByb3BlcnRpZXMoKX1fZW5xdWV1ZUNsaWVudCh0KXt0aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzPXRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHN8fFtdLHQhPT10aGlzJiZ0aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzLnB1c2godCl9X2ZsdXNoQ2xpZW50cygpe3RoaXMuX19kYXRhQ2xpZW50c1JlYWR5P3RoaXMuX19lbmFibGVPckZsdXNoQ2xpZW50cygpOih0aGlzLl9fZGF0YUNsaWVudHNSZWFkeT0hMCx0aGlzLl9yZWFkeUNsaWVudHMoKSx0aGlzLl9fZGF0YVJlYWR5PSEwKX1fX2VuYWJsZU9yRmx1c2hDbGllbnRzKCl7bGV0IHQ9dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cztpZih0KXt0aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzPW51bGw7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2xldCBuPXRbZV07bi5fX2RhdGFFbmFibGVkP24uX19kYXRhUGVuZGluZyYmbi5fZmx1c2hQcm9wZXJ0aWVzKCk6bi5fZW5hYmxlUHJvcGVydGllcygpfX19X3JlYWR5Q2xpZW50cygpe3RoaXMuX19lbmFibGVPckZsdXNoQ2xpZW50cygpfXNldFByb3BlcnRpZXModCxlKXtmb3IobGV0IG4gaW4gdCkhZSYmdGhpc1t6dC5SRUFEX09OTFldJiZ0aGlzW3p0LlJFQURfT05MWV1bbl18fHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChuLHRbbl0sITApO3RoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9cmVhZHkoKXt0aGlzLl9mbHVzaFByb3BlcnRpZXMoKSx0aGlzLl9fZGF0YUNsaWVudHNSZWFkeXx8dGhpcy5fZmx1c2hDbGllbnRzKCksdGhpcy5fX2RhdGFQZW5kaW5nJiZ0aGlzLl9mbHVzaFByb3BlcnRpZXMoKX1fcHJvcGVydGllc0NoYW5nZWQodCxlLG4pe2xldCBpLHI9dGhpcy5fX2RhdGFIYXNQYXRoczt0aGlzLl9fZGF0YUhhc1BhdGhzPSExLChmdW5jdGlvbiBvKHQsZSxuLGkpe2xldCByPXRbenQuQ09NUFVURV07aWYocilpZihUKXtSdCsrO2NvbnN0IG89KGZ1bmN0aW9uIGEodCl7bGV0IGU9dC5jb25zdHJ1Y3Rvci5fX29yZGVyZWRDb21wdXRlZERlcHM7aWYoIWUpe2U9bmV3IE1hcDtjb25zdCBuPXRbenQuQ09NUFVURV07bGV0IGkse2NvdW50czpyLHJlYWR5Om8sdG90YWw6YX09KGZ1bmN0aW9uIHModCl7Y29uc3QgZT10Ll9fY29tcHV0ZUluZm8sbj17fSxpPXRbenQuQ09NUFVURV0scj1bXTtsZXQgbz0wO2ZvcihsZXQgdCBpbiBlKXtjb25zdCBpPWVbdF07bys9blt0XT1pLmFyZ3MuZmlsdGVyKCh0PT4hdC5saXRlcmFsKSkubGVuZ3RoKyhpLmR5bmFtaWNGbj8xOjApfWZvcihsZXQgdCBpbiBpKWVbdF18fHIucHVzaCh0KTtyZXR1cm57Y291bnRzOm4scmVhZHk6cix0b3RhbDpvfX0pKHQpO2Zvcig7aT1vLnNoaWZ0KCk7KXtlLnNldChpLGUuc2l6ZSk7Y29uc3QgdD1uW2ldO3QmJnQuZm9yRWFjaCgodD0+e2NvbnN0IGU9dC5pbmZvLm1ldGhvZEluZm87LS1hLDA9PS0tcltlXSYmby5wdXNoKGUpfSkpfTAhPT1hJiZjb25zb2xlLndhcm4oYENvbXB1dGVkIGdyYXBoIGZvciAke3QubG9jYWxOYW1lfSBpbmNvbXBsZXRlOyBjaXJjdWxhcj9gKSx0LmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcz1lfXJldHVybiBlfSkodCkscz1bXTtmb3IobGV0IHQgaW4gZSlYdCh0LHIscyxvLGkpO2xldCBsO2Zvcig7bD1zLnNoaWZ0KCk7KSR0KHQsIiIsZSwwLGwpJiZYdChsLm1ldGhvZEluZm8scixzLG8saSk7T2JqZWN0LmFzc2lnbihuLHQuX19kYXRhT2xkKSxPYmplY3QuYXNzaWduKGUsdC5fX2RhdGFQZW5kaW5nKSx0Ll9fZGF0YVBlbmRpbmc9bnVsbH1lbHNle2xldCBvPWU7Zm9yKDtIdCh0LHIsbyxuLGkpOylPYmplY3QuYXNzaWduKG4sdC5fX2RhdGFPbGQpLE9iamVjdC5hc3NpZ24oZSx0Ll9fZGF0YVBlbmRpbmcpLG89dC5fX2RhdGFQZW5kaW5nLHQuX19kYXRhUGVuZGluZz1udWxsfX0pKHRoaXMsZSxuLHIpLGk9dGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YVRvTm90aWZ5PW51bGwsdGhpcy5fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKGUsbixyKSx0aGlzLl9mbHVzaENsaWVudHMoKSxIdCh0aGlzLHRoaXNbenQuUkVGTEVDVF0sZSxuLHIpLEh0KHRoaXMsdGhpc1t6dC5PQlNFUlZFXSxlLG4sciksaSYmKGZ1bmN0aW9uIGEodCxlLG4saSxyKXtsZXQgbyxhLHM9dFt6dC5OT1RJRlldLGw9UnQrKztmb3IobGV0IGEgaW4gZSllW2FdJiYocyYmRnQodCxzLGwsYSxuLGkscil8fHImJmp0KHQsYSxuKSkmJihvPSEwKTtvJiYoYT10Ll9fZGF0YUhvc3QpJiZhLl9pbnZhbGlkYXRlUHJvcGVydGllcyYmYS5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX0pKHRoaXMsaSxlLG4sciksMT09dGhpcy5fX2RhdGFDb3VudGVyJiYodGhpcy5fX2RhdGFUZW1wPXt9KX1fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKHQsZSxuKXt0aGlzW3p0LlBST1BBR0FURV0mJkh0KHRoaXMsdGhpc1t6dC5QUk9QQUdBVEVdLHQsZSxuKSx0aGlzLl9fdGVtcGxhdGVJbmZvJiZ0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUodGhpcy5fX3RlbXBsYXRlSW5mbyx0LGUsbil9X3J1bkVmZmVjdHNGb3JUZW1wbGF0ZSh0LGUsbixpKXtjb25zdCByPShlLGkpPT57SHQodGhpcyx0LnByb3BlcnR5RWZmZWN0cyxlLG4saSx0Lm5vZGVMaXN0KTtmb3IobGV0IHI9dC5maXJzdENoaWxkO3I7cj1yLm5leHRTaWJsaW5nKXRoaXMuX3J1bkVmZmVjdHNGb3JUZW1wbGF0ZShyLGUsbixpKX07dC5ydW5FZmZlY3RzP3QucnVuRWZmZWN0cyhyLGUsaSk6cihlLGkpfWxpbmtQYXRocyh0LGUpe3Q9dHQodCksZT10dChlKSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXRoaXMuX19kYXRhTGlua2VkUGF0aHN8fHt9LHRoaXMuX19kYXRhTGlua2VkUGF0aHNbdF09ZX11bmxpbmtQYXRocyh0KXt0PXR0KHQpLHRoaXMuX19kYXRhTGlua2VkUGF0aHMmJmRlbGV0ZSB0aGlzLl9fZGF0YUxpbmtlZFBhdGhzW3RdfW5vdGlmeVNwbGljZXModCxlKXtsZXQgbj17cGF0aDoiIn07Y2UodGhpcyxudCh0aGlzLHQsbiksbi5wYXRoLGUpfWdldCh0LGUpe3JldHVybiBudChlfHx0aGlzLHQpfXNldCh0LGUsbil7bj9pdChuLHQsZSk6dGhpc1t6dC5SRUFEX09OTFldJiZ0aGlzW3p0LlJFQURfT05MWV1bdF18fHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCh0LGUsITApJiZ0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfXB1c2godCwuLi5lKXtsZXQgbj17cGF0aDoiIn0saT1udCh0aGlzLHQsbikscj1pLmxlbmd0aCxvPWkucHVzaCguLi5lKTtyZXR1cm4gZS5sZW5ndGgmJnVlKHRoaXMsaSxuLnBhdGgscixlLmxlbmd0aCxbXSksb31wb3AodCl7bGV0IGU9e3BhdGg6IiJ9LG49bnQodGhpcyx0LGUpLGk9Qm9vbGVhbihuLmxlbmd0aCkscj1uLnBvcCgpO3JldHVybiBpJiZ1ZSh0aGlzLG4sZS5wYXRoLG4ubGVuZ3RoLDAsW3JdKSxyfXNwbGljZSh0LGUsbiwuLi5pKXtsZXQgcixvPXtwYXRoOiIifSxhPW50KHRoaXMsdCxvKTtyZXR1cm4gZTwwP2U9YS5sZW5ndGgtTWF0aC5mbG9vcigtZSk6ZSYmKGU9TWF0aC5mbG9vcihlKSkscj0yPT09YXJndW1lbnRzLmxlbmd0aD9hLnNwbGljZShlKTphLnNwbGljZShlLG4sLi4uaSksKGkubGVuZ3RofHxyLmxlbmd0aCkmJnVlKHRoaXMsYSxvLnBhdGgsZSxpLmxlbmd0aCxyKSxyfXNoaWZ0KHQpe2xldCBlPXtwYXRoOiIifSxuPW50KHRoaXMsdCxlKSxpPUJvb2xlYW4obi5sZW5ndGgpLHI9bi5zaGlmdCgpO3JldHVybiBpJiZ1ZSh0aGlzLG4sZS5wYXRoLDAsMCxbcl0pLHJ9dW5zaGlmdCh0LC4uLmUpe2xldCBuPXtwYXRoOiIifSxpPW50KHRoaXMsdCxuKSxyPWkudW5zaGlmdCguLi5lKTtyZXR1cm4gZS5sZW5ndGgmJnVlKHRoaXMsaSxuLnBhdGgsMCxlLmxlbmd0aCxbXSkscn1ub3RpZnlQYXRoKHQsZSl7bGV0IG47aWYoMT09YXJndW1lbnRzLmxlbmd0aCl7bGV0IGk9e3BhdGg6IiJ9O2U9bnQodGhpcyx0LGkpLG49aS5wYXRofWVsc2Ugbj1BcnJheS5pc0FycmF5KHQpP3R0KHQpOnQ7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKG4sZSwhMCwhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkodCxlKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdCh0LHp0LlJFQURfT05MWSksZSYmKHRoaXNbIl9zZXQiKyhmdW5jdGlvbiBuKHQpe3JldHVybiB0WzBdLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHJpbmcoMSl9KSh0KV09ZnVuY3Rpb24oZSl7dGhpcy5fc2V0UHJvcGVydHkodCxlKX0pfV9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKHQsZSxuKXtsZXQgaT17cHJvcGVydHk6dCxtZXRob2Q6ZSxkeW5hbWljRm46Qm9vbGVhbihuKX07dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QodCx6dC5PQlNFUlZFLHtmbjpVdCxpbmZvOmksdHJpZ2dlcjp7bmFtZTp0fX0pLG4mJnRoaXMuX2FkZFByb3BlcnR5RWZmZWN0KGUsenQuT0JTRVJWRSx7Zm46VXQsaW5mbzppLHRyaWdnZXI6e25hbWU6ZX19KX1fY3JlYXRlTWV0aG9kT2JzZXJ2ZXIodCxlKXtsZXQgbj1hZSh0KTtpZighbil0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBvYnNlcnZlciBleHByZXNzaW9uICciK3QrIiciKTtlZSh0aGlzLG4senQuT0JTRVJWRSxuZSxudWxsLGUpfV9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eSh0KXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdCh0LHp0Lk5PVElGWSx7Zm46V3QsaW5mbzp7ZXZlbnROYW1lOmx0KHQpKyItY2hhbmdlZCIscHJvcGVydHk6dH19KX1fY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkodCl7bGV0IGU9dGhpcy5jb25zdHJ1Y3Rvci5hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkodCk7Ii0iPT09ZVswXT9jb25zb2xlLndhcm4oIlByb3BlcnR5ICIrdCsiIGNhbm5vdCBiZSByZWZsZWN0ZWQgdG8gYXR0cmlidXRlICIrZSsnIGJlY2F1c2UgIi0iIGlzIG5vdCBhIHZhbGlkIHN0YXJ0aW5nIGF0dHJpYnV0ZSBuYW1lLiBVc2UgYSBsb3dlcmNhc2UgZmlyc3QgbGV0dGVyIGZvciB0aGUgcHJvcGVydHkgaW5zdGVhZC4nKTp0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdCh0LHp0LlJFRkxFQ1Qse2ZuOnF0LGluZm86e2F0dHJOYW1lOmV9fSl9X2NyZWF0ZUNvbXB1dGVkUHJvcGVydHkodCxlLG4pe2xldCBpPWFlKGUpO2lmKCFpKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIGNvbXB1dGVkIGV4cHJlc3Npb24gJyIrZSsiJyIpO2NvbnN0IHI9ZWUodGhpcyxpLHp0LkNPTVBVVEUsJHQsdCxuKTtCdCh0aGlzLCJfX2NvbXB1dGVJbmZvIilbdF09cn1fbWFyc2hhbEFyZ3ModCxlLG4pe2NvbnN0IGk9dGhpcy5fX2RhdGEscj1bXTtmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspe2xldHtuYW1lOmEsc3RydWN0dXJlZDpzLHdpbGRjYXJkOmwsdmFsdWU6YyxsaXRlcmFsOnV9PXRbb107aWYoIXUpaWYobCl7Y29uc3QgdD1aKGEsZSkscj1sZShpLG4sdD9lOmEpO2M9e3BhdGg6dD9lOmEsdmFsdWU6cixiYXNlOnQ/bnQoaSxhKTpyfX1lbHNlIGM9cz9sZShpLG4sYSk6aVthXTtpZihFJiYhdGhpcy5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJnZvaWQgMD09PWMmJnQubGVuZ3RoPjEpcmV0dXJuIE90O3Jbb109Y31yZXR1cm4gcn1zdGF0aWMgYWRkUHJvcGVydHlFZmZlY3QodCxlLG4pe3RoaXMucHJvdG90eXBlLl9hZGRQcm9wZXJ0eUVmZmVjdCh0LGUsbil9c3RhdGljIGNyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIodCxlLG4pe3RoaXMucHJvdG90eXBlLl9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKHQsZSxuKX1zdGF0aWMgY3JlYXRlTWV0aG9kT2JzZXJ2ZXIodCxlKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlTWV0aG9kT2JzZXJ2ZXIodCxlKX1zdGF0aWMgY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkodCl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZU5vdGlmeWluZ1Byb3BlcnR5KHQpfXN0YXRpYyBjcmVhdGVSZWFkT25seVByb3BlcnR5KHQsZSl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkodCxlKX1zdGF0aWMgY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkodCl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KHQpfXN0YXRpYyBjcmVhdGVDb21wdXRlZFByb3BlcnR5KHQsZSxuKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eSh0LGUsbil9c3RhdGljIGJpbmRUZW1wbGF0ZSh0KXtyZXR1cm4gdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh0KX1fYmluZFRlbXBsYXRlKHQsZSl7bGV0IG49dGhpcy5jb25zdHJ1Y3Rvci5fcGFyc2VUZW1wbGF0ZSh0KSxpPXRoaXMuX19wcmVCb3VuZFRlbXBsYXRlSW5mbz09bjtpZighaSlmb3IobGV0IHQgaW4gbi5wcm9wZXJ0eUVmZmVjdHMpdGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3Nvcih0KTtpZihlKWlmKG49T2JqZWN0LmNyZWF0ZShuKSxuLndhc1ByZUJvdW5kPWksdGhpcy5fX3RlbXBsYXRlSW5mbyl7Y29uc3QgZT10Ll9wYXJlbnRUZW1wbGF0ZUluZm98fHRoaXMuX190ZW1wbGF0ZUluZm8saT1lLmxhc3RDaGlsZDtuLnBhcmVudD1lLGUubGFzdENoaWxkPW4sbi5wcmV2aW91c1NpYmxpbmc9aSxpP2kubmV4dFNpYmxpbmc9bjplLmZpcnN0Q2hpbGQ9bn1lbHNlIHRoaXMuX190ZW1wbGF0ZUluZm89bjtlbHNlIHRoaXMuX19wcmVCb3VuZFRlbXBsYXRlSW5mbz1uO3JldHVybiBufXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdCh0LGUsbil7KHQuaG9zdFByb3BzPXQuaG9zdFByb3BzfHx7fSlbZV09ITA7bGV0IGk9dC5wcm9wZXJ0eUVmZmVjdHM9dC5wcm9wZXJ0eUVmZmVjdHN8fHt9OyhpW2VdPWlbZV18fFtdKS5wdXNoKG4pfV9zdGFtcFRlbXBsYXRlKHQsZSl7ZT1lfHx0aGlzLl9iaW5kVGVtcGxhdGUodCwhMCksZGUucHVzaCh0aGlzKTtsZXQgbj1zdXBlci5fc3RhbXBUZW1wbGF0ZSh0LGUpO2lmKGRlLnBvcCgpLGUubm9kZUxpc3Q9bi5ub2RlTGlzdCwhZS53YXNQcmVCb3VuZCl7bGV0IHQ9ZS5jaGlsZE5vZGVzPVtdO2ZvcihsZXQgZT1uLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpdC5wdXNoKGUpfXJldHVybiBuLnRlbXBsYXRlSW5mbz1lLChmdW5jdGlvbiBpKHQsZSl7bGV0e25vZGVMaXN0Om4sbm9kZUluZm9MaXN0Oml9PWU7aWYoaS5sZW5ndGgpZm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspe2xldCByPW5bZV0sbz1pW2VdLmJpbmRpbmdzO2lmKG8pZm9yKGxldCBlPTA7ZTxvLmxlbmd0aDtlKyspe2xldCBuPW9bZV07UXQocixuKSx0ZShyLHQsbil9ci5fX2RhdGFIb3N0PXR9fSkodGhpcyxlKSx0aGlzLl9fZGF0YUNsaWVudHNSZWFkeSYmKHRoaXMuX3J1bkVmZmVjdHNGb3JUZW1wbGF0ZShlLHRoaXMuX19kYXRhLG51bGwsITEpLHRoaXMuX2ZsdXNoQ2xpZW50cygpKSxufV9yZW1vdmVCb3VuZERvbSh0KXtjb25zdCBlPXQudGVtcGxhdGVJbmZvLHtwcmV2aW91c1NpYmxpbmc6bixuZXh0U2libGluZzppLHBhcmVudDpyfT1lO24/bi5uZXh0U2libGluZz1pOnImJihyLmZpcnN0Q2hpbGQ9aSksaT9pLnByZXZpb3VzU2libGluZz1uOnImJihyLmxhc3RDaGlsZD1uKSxlLm5leHRTaWJsaW5nPWUucHJldmlvdXNTaWJsaW5nPW51bGw7bGV0IG89ZS5jaGlsZE5vZGVzO2ZvcihsZXQgdD0wO3Q8by5sZW5ndGg7dCsrKXtsZXQgZT1vW3RdO1koWShlKS5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZChlKX19c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZSh0LG4saSl7bGV0IHI9ZS5fcGFyc2VUZW1wbGF0ZU5vZGUuY2FsbCh0aGlzLHQsbixpKTtpZih0Lm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpe2xldCBlPXRoaXMuX3BhcnNlQmluZGluZ3ModC50ZXh0Q29udGVudCxuKTtlJiYodC50ZXh0Q29udGVudD1vZShlKXx8IiAiLEt0KHRoaXMsbixpLCJ0ZXh0IiwidGV4dENvbnRlbnQiLGUpLHI9ITApfXJldHVybiByfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUodCxuLGkscixvKXtsZXQgYT10aGlzLl9wYXJzZUJpbmRpbmdzKG8sbik7aWYoYSl7bGV0IGU9cixvPSJwcm9wZXJ0eSI7RHQudGVzdChyKT9vPSJhdHRyaWJ1dGUiOiIkIj09cltyLmxlbmd0aC0xXSYmKHI9ci5zbGljZSgwLC0xKSxvPSJhdHRyaWJ1dGUiKTtsZXQgcz1vZShhKTtyZXR1cm4gcyYmImF0dHJpYnV0ZSI9PW8mJigiY2xhc3MiPT1yJiZ0Lmhhc0F0dHJpYnV0ZSgiY2xhc3MiKSYmKHMrPSIgIit0LmdldEF0dHJpYnV0ZShyKSksdC5zZXRBdHRyaWJ1dGUocixzKSksImF0dHJpYnV0ZSI9PW8mJiJkaXNhYmxlLXVwZ3JhZGUkIj09ZSYmdC5zZXRBdHRyaWJ1dGUociwiIiksImlucHV0Ij09PXQubG9jYWxOYW1lJiYidmFsdWUiPT09ZSYmdC5zZXRBdHRyaWJ1dGUoZSwiIiksdC5yZW1vdmVBdHRyaWJ1dGUoZSksInByb3BlcnR5Ij09PW8mJihyPXN0KHIpKSxLdCh0aGlzLG4saSxvLHIsYSxzKSwhMH1yZXR1cm4gZS5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUuY2FsbCh0aGlzLHQsbixpLHIsbyl9c3RhdGljIF9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUodCxuLGkpe2xldCByPWUuX3BhcnNlVGVtcGxhdGVOZXN0ZWRUZW1wbGF0ZS5jYWxsKHRoaXMsdCxuLGkpO2NvbnN0IG89dC5wYXJlbnROb2RlLGE9aS50ZW1wbGF0ZUluZm8scz0iZG9tLWlmIj09PW8ubG9jYWxOYW1lO0MmJihzfHwiZG9tLXJlcGVhdCI9PT1vLmxvY2FsTmFtZSkmJihvLnJlbW92ZUNoaWxkKHQpLChpPWkucGFyZW50SW5mbykudGVtcGxhdGVJbmZvPWEsaS5ub3RlZD0hMCxyPSExKTtsZXQgbD1hLmhvc3RQcm9wcztpZihBJiZzKWwmJihuLmhvc3RQcm9wcz1PYmplY3QuYXNzaWduKG4uaG9zdFByb3BzfHx7fSxsKSxDfHwoaS5wYXJlbnRJbmZvLm5vdGVkPSEwKSk7ZWxzZXtsZXQgdD0ieyI7Zm9yKGxldCBlIGluIGwpS3QodGhpcyxuLGksInByb3BlcnR5IiwiX2hvc3RfIitlLFt7bW9kZTp0LHNvdXJjZTplLGRlcGVuZGVuY2llczpbZV0saG9zdFByb3A6ITB9XSl9cmV0dXJuIHJ9c3RhdGljIF9wYXJzZUJpbmRpbmdzKHQsZSl7bGV0IG4saT1bXSxyPTA7Zm9yKDtudWxsIT09KG49cmUuZXhlYyh0KSk7KXtuLmluZGV4PnImJmkucHVzaCh7bGl0ZXJhbDp0LnNsaWNlKHIsbi5pbmRleCl9KTtsZXQgbz1uWzFdWzBdLGE9Qm9vbGVhbihuWzJdKSxzPW5bM10udHJpbSgpLGw9ITEsYz0iIix1PS0xOyJ7Ij09byYmKHU9cy5pbmRleE9mKCI6OiIpKT4wJiYoYz1zLnN1YnN0cmluZyh1KzIpLHM9cy5zdWJzdHJpbmcoMCx1KSxsPSEwKTtsZXQgaD1hZShzKSxkPVtdO2lmKGgpe2xldHthcmdzOnQsbWV0aG9kTmFtZTpufT1oO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtsZXQgbj10W2VdO24ubGl0ZXJhbHx8ZC5wdXNoKG4pfWxldCBpPWUuZHluYW1pY0ZuczsoaSYmaVtuXXx8aC5zdGF0aWMpJiYoZC5wdXNoKG4pLGguZHluYW1pY0ZuPSEwKX1lbHNlIGQucHVzaChzKTtpLnB1c2goe3NvdXJjZTpzLG1vZGU6byxuZWdhdGU6YSxjdXN0b21FdmVudDpsLHNpZ25hdHVyZTpoLGRlcGVuZGVuY2llczpkLGV2ZW50OmN9KSxyPXJlLmxhc3RJbmRleH1pZihyJiZyPHQubGVuZ3RoKXtsZXQgZT10LnN1YnN0cmluZyhyKTtlJiZpLnB1c2goe2xpdGVyYWw6ZX0pfXJldHVybiBpLmxlbmd0aD9pOm51bGx9c3RhdGljIF9ldmFsdWF0ZUJpbmRpbmcodCxlLG4saSxyLG8pe2xldCBhO3JldHVybiBhPWUuc2lnbmF0dXJlP25lKHQsbixpLDAsZS5zaWduYXR1cmUpOm4hPWUuc291cmNlP250KHQsZS5zb3VyY2UpOm8mJlgobik/bnQodCxuKTp0Ll9fZGF0YVtuXSxlLm5lZ2F0ZSYmKGE9IWEpLGF9fX0pKSxkZT1bXSxwZT1JKCh0PT57Y29uc3QgZT14dCh0KTtmdW5jdGlvbiBuKHQpe2NvbnN0IGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO3JldHVybiBlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHI/ZTpudWxsfWZ1bmN0aW9uIGkodCl7aWYoIXQuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19vd25Qcm9wZXJ0aWVzIix0KSkpe2xldCBlPW51bGw7aWYodC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJwcm9wZXJ0aWVzIix0KSkpe2NvbnN0IG49dC5wcm9wZXJ0aWVzO24mJihlPSgKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KZnVuY3Rpb24gZSh0KXtjb25zdCBlPXt9O2ZvcihsZXQgbiBpbiB0KXtjb25zdCBpPXRbbl07ZVtuXT0iZnVuY3Rpb24iPT10eXBlb2YgaT97dHlwZTppfTppfXJldHVybiBlfSkobikpfXQuX19vd25Qcm9wZXJ0aWVzPWV9cmV0dXJuIHQuX19vd25Qcm9wZXJ0aWVzfWNsYXNzIHIgZXh0ZW5kcyBle3N0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19vYnNlcnZlZEF0dHJpYnV0ZXMiLHRoaXMpKSl7Y29uc3QgdD10aGlzLl9wcm9wZXJ0aWVzO3RoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9dD9PYmplY3Qua2V5cyh0KS5tYXAoKHQ9PnRoaXMucHJvdG90eXBlLl9hZGRQcm9wZXJ0eVRvQXR0cmlidXRlTWFwKHQpKSk6W119cmV0dXJuIHRoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXN9c3RhdGljIGZpbmFsaXplKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19maW5hbGl6ZWQiLHRoaXMpKSl7Y29uc3QgdD1uKHRoaXMpO3QmJnQuZmluYWxpemUoKSx0aGlzLl9fZmluYWxpemVkPSEwLHRoaXMuX2ZpbmFsaXplQ2xhc3MoKX19c3RhdGljIF9maW5hbGl6ZUNsYXNzKCl7Y29uc3QgdD1pKHRoaXMpO3QmJnRoaXMuY3JlYXRlUHJvcGVydGllcyh0KX1zdGF0aWMgZ2V0IF9wcm9wZXJ0aWVzKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19wcm9wZXJ0aWVzIix0aGlzKSkpe2NvbnN0IHQ9bih0aGlzKTt0aGlzLl9fcHJvcGVydGllcz1PYmplY3QuYXNzaWduKHt9LHQmJnQuX3Byb3BlcnRpZXMsaSh0aGlzKSl9cmV0dXJuIHRoaXMuX19wcm9wZXJ0aWVzfXN0YXRpYyB0eXBlRm9yUHJvcGVydHkodCl7Y29uc3QgZT10aGlzLl9wcm9wZXJ0aWVzW3RdO3JldHVybiBlJiZlLnR5cGV9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7dGhpcy5jb25zdHJ1Y3Rvci5maW5hbGl6ZSgpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2smJnN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fZW5hYmxlUHJvcGVydGllcygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2smJnN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCl9fXJldHVybiByfSkpLGZlPXdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkLG1lPUkoKHQ9Pntjb25zdCBlPXBlKGhlKHQpKTtmdW5jdGlvbiBuKHQsZSxuLGkpe24uY29tcHV0ZWQmJihuLnJlYWRPbmx5PSEwKSxuLmNvbXB1dGVkJiYodC5faGFzUmVhZE9ubHlFZmZlY3QoZSk/Y29uc29sZS53YXJuKGBDYW5ub3QgcmVkZWZpbmUgY29tcHV0ZWQgcHJvcGVydHkgJyR7ZX0nLmApOnQuX2NyZWF0ZUNvbXB1dGVkUHJvcGVydHkoZSxuLmNvbXB1dGVkLGkpKSxuLnJlYWRPbmx5JiYhdC5faGFzUmVhZE9ubHlFZmZlY3QoZSk/dC5fY3JlYXRlUmVhZE9ubHlQcm9wZXJ0eShlLCFuLmNvbXB1dGVkKTohMT09PW4ucmVhZE9ubHkmJnQuX2hhc1JlYWRPbmx5RWZmZWN0KGUpJiZjb25zb2xlLndhcm4oYENhbm5vdCBtYWtlIHJlYWRPbmx5IHByb3BlcnR5ICcke2V9JyBub24tcmVhZE9ubHkuYCksbi5yZWZsZWN0VG9BdHRyaWJ1dGUmJiF0Ll9oYXNSZWZsZWN0RWZmZWN0KGUpP3QuX2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KGUpOiExPT09bi5yZWZsZWN0VG9BdHRyaWJ1dGUmJnQuX2hhc1JlZmxlY3RFZmZlY3QoZSkmJmNvbnNvbGUud2FybihgQ2Fubm90IG1ha2UgcmVmbGVjdGVkIHByb3BlcnR5ICcke2V9JyBub24tcmVmbGVjdGVkLmApLG4ubm90aWZ5JiYhdC5faGFzTm90aWZ5RWZmZWN0KGUpP3QuX2NyZWF0ZU5vdGlmeWluZ1Byb3BlcnR5KGUpOiExPT09bi5ub3RpZnkmJnQuX2hhc05vdGlmeUVmZmVjdChlKSYmY29uc29sZS53YXJuKGBDYW5ub3QgbWFrZSBub3RpZnkgcHJvcGVydHkgJyR7ZX0nIG5vbi1ub3RpZnkuYCksbi5vYnNlcnZlciYmdC5fY3JlYXRlUHJvcGVydHlPYnNlcnZlcihlLG4ub2JzZXJ2ZXIsaVtuLm9ic2VydmVyXSksdC5fYWRkUHJvcGVydHlUb0F0dHJpYnV0ZU1hcChlKX1yZXR1cm4gY2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcG9seW1lckVsZW1lbnRWZXJzaW9uKCl7cmV0dXJuIjMuNC4xIn1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXtlLl9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7Y29uc3QgdD0oZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX293bk9ic2VydmVycyIsdCkpfHwodC5fX293bk9ic2VydmVycz10Lmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIm9ic2VydmVycyIsdCkpP3Qub2JzZXJ2ZXJzOm51bGwpLHQuX19vd25PYnNlcnZlcnN9KSh0aGlzKTt0JiZ0aGlzLmNyZWF0ZU9ic2VydmVycyh0LHRoaXMuX3Byb3BlcnRpZXMpLHRoaXMuX3ByZXBhcmVUZW1wbGF0ZSgpfXN0YXRpYyBfcHJlcGFyZVRlbXBsYXRlKCl7bGV0IHQ9dGhpcy50ZW1wbGF0ZTt0JiYoInN0cmluZyI9PXR5cGVvZiB0Pyhjb25zb2xlLmVycm9yKCJ0ZW1wbGF0ZSBnZXR0ZXIgbXVzdCByZXR1cm4gSFRNTFRlbXBsYXRlRWxlbWVudCIpLHQ9bnVsbCk6d3x8KHQ9dC5jbG9uZU5vZGUoITApKSksdGhpcy5wcm90b3R5cGUuX3RlbXBsYXRlPXR9c3RhdGljIGNyZWF0ZVByb3BlcnRpZXModCl7Zm9yKGxldCBlIGluIHQpbih0aGlzLnByb3RvdHlwZSxlLHRbZV0sdCl9c3RhdGljIGNyZWF0ZU9ic2VydmVycyh0LGUpe2NvbnN0IG49dGhpcy5wcm90b3R5cGU7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspbi5fY3JlYXRlTWV0aG9kT2JzZXJ2ZXIodFtpXSxlKX1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3RlbXBsYXRlIix0aGlzKSkpe2NvbnN0IHQ9dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3RlbXBsYXRlIix0aGlzLnByb3RvdHlwZSkpP3RoaXMucHJvdG90eXBlLl90ZW1wbGF0ZTp2b2lkIDA7dGhpcy5fdGVtcGxhdGU9dm9pZCAwIT09dD90OnRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXMiLHRoaXMpKSYmKGZ1bmN0aW9uIGUodCl7bGV0IGU9bnVsbDtpZih0JiYoIWJ8fHgpJiYoZT1CLmltcG9ydCh0LCJ0ZW1wbGF0ZSIpLGImJiFlKSl0aHJvdyBuZXcgRXJyb3IoYHN0cmljdFRlbXBsYXRlUG9saWN5OiBleHBlY3RpbmcgZG9tLW1vZHVsZSBvciBudWxsIHRlbXBsYXRlIGZvciAke3R9YCk7cmV0dXJuIGV9KSh0aGlzLmlzKXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5jb25zdHJ1Y3Rvci50ZW1wbGF0ZX1yZXR1cm4gdGhpcy5fdGVtcGxhdGV9c3RhdGljIHNldCB0ZW1wbGF0ZSh0KXt0aGlzLl90ZW1wbGF0ZT10fXN0YXRpYyBnZXQgaW1wb3J0UGF0aCgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9pbXBvcnRQYXRoIix0aGlzKSkpe2NvbnN0IHQ9dGhpcy5pbXBvcnRNZXRhO2lmKHQpdGhpcy5faW1wb3J0UGF0aD1mKHQudXJsKTtlbHNle2NvbnN0IHQ9Qi5pbXBvcnQodGhpcy5pcyk7dGhpcy5faW1wb3J0UGF0aD10JiZ0LmFzc2V0cGF0aHx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5jb25zdHJ1Y3Rvci5pbXBvcnRQYXRofX1yZXR1cm4gdGhpcy5faW1wb3J0UGF0aH1jb25zdHJ1Y3Rvcigpe3N1cGVyKCl9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7dGhpcy5jb25zdHJ1Y3Rvci5maW5hbGl6ZSgpLHRoaXMuY29uc3RydWN0b3IuX2ZpbmFsaXplVGVtcGxhdGUodGhpcy5sb2NhbE5hbWUpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMucm9vdFBhdGg9Xyx0aGlzLmltcG9ydFBhdGg9dGhpcy5jb25zdHJ1Y3Rvci5pbXBvcnRQYXRoO2xldCB0PShmdW5jdGlvbiBlKHQpe2lmKCF0Lmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fcHJvcGVydHlEZWZhdWx0cyIsdCkpKXt0Ll9fcHJvcGVydHlEZWZhdWx0cz1udWxsO2xldCBlPXQuX3Byb3BlcnRpZXM7Zm9yKGxldCBuIGluIGUpe2xldCBpPWVbbl07InZhbHVlImluIGkmJih0Ll9fcHJvcGVydHlEZWZhdWx0cz10Ll9fcHJvcGVydHlEZWZhdWx0c3x8e30sdC5fX3Byb3BlcnR5RGVmYXVsdHNbbl09aSl9fXJldHVybiB0Ll9fcHJvcGVydHlEZWZhdWx0c30pKHRoaXMuY29uc3RydWN0b3IpO2lmKHQpZm9yKGxldCBlIGluIHQpe2xldCBuPXRbZV07aWYodGhpcy5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQoZSkpe2xldCB0PSJmdW5jdGlvbiI9PXR5cGVvZiBuLnZhbHVlP24udmFsdWUuY2FsbCh0aGlzKTpuLnZhbHVlO3RoaXMuX2hhc0FjY2Vzc29yKGUpP3RoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShlLHQsITApOnRoaXNbZV09dH19fV9jYW5BcHBseVByb3BlcnR5RGVmYXVsdCh0KXtyZXR1cm4hdGhpcy5oYXNPd25Qcm9wZXJ0eSh0KX1zdGF0aWMgX3Byb2Nlc3NTdHlsZVRleHQodCxlKXtyZXR1cm4gcCh0LGUpfXN0YXRpYyBfZmluYWxpemVUZW1wbGF0ZSh0KXtjb25zdCBlPXRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZTtpZihlJiYhZS5fX3BvbHltZXJGaW5hbGl6ZWQpe2UuX19wb2x5bWVyRmluYWxpemVkPSEwO2NvbnN0IG49dGhpcy5pbXBvcnRQYXRoOyhmdW5jdGlvbiBpKHQsZSxuLHIpe2lmKCFmZSl7Y29uc3QgaT1lLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKSxvPUcoZSksYT0oZnVuY3Rpb24gcyh0KXtsZXQgZT1GKHQpO3JldHVybiBlP1coZSk6W119KShuKSxsPWUuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtmb3IobGV0IG49MDtuPGEubGVuZ3RoO24rKyl7bGV0IGk9YVtuXTtpLnRleHRDb250ZW50PXQuX3Byb2Nlc3NTdHlsZVRleHQoaS50ZXh0Q29udGVudCxyKSxlLmNvbnRlbnQuaW5zZXJ0QmVmb3JlKGksbCl9bGV0IGM9MDtmb3IobGV0IGU9MDtlPG8ubGVuZ3RoO2UrKyl7bGV0IG49b1tlXSxhPWlbY107YSE9PW4/KG49bi5jbG9uZU5vZGUoITApLGEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobixhKSk6YysrLG4udGV4dENvbnRlbnQ9dC5fcHJvY2Vzc1N0eWxlVGV4dChuLnRleHRDb250ZW50LHIpfX1pZih3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUoZSxuKSxQJiZmZSYmZyl7Y29uc3Qgbj1lLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKTtpZihuKXtsZXQgZT0iIjtBcnJheS5mcm9tKG4pLmZvckVhY2goKHQ9PntlKz10LnRleHRDb250ZW50LHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX0pKSx0Ll9zdHlsZVNoZWV0PW5ldyBDU1NTdHlsZVNoZWV0LHQuX3N0eWxlU2hlZXQucmVwbGFjZVN5bmMoZSl9fX0pKHRoaXMsZSx0LG4/ZChuKToiIiksdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZShlKX19Y29ubmVjdGVkQ2FsbGJhY2soKXt3aW5kb3cuU2hhZHlDU1MmJnRoaXMuX3RlbXBsYXRlJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpLHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCl9cmVhZHkoKXt0aGlzLl90ZW1wbGF0ZSYmKHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX3RlbXBsYXRlKSx0aGlzLiQ9dGhpcy5yb290LiQpLHN1cGVyLnJlYWR5KCl9X3JlYWR5Q2xpZW50cygpe3RoaXMuX3RlbXBsYXRlJiYodGhpcy5yb290PXRoaXMuX2F0dGFjaERvbSh0aGlzLnJvb3QpKSxzdXBlci5fcmVhZHlDbGllbnRzKCl9X2F0dGFjaERvbSh0KXtjb25zdCBlPVkodGhpcyk7aWYoZS5hdHRhY2hTaGFkb3cpcmV0dXJuIHQ/KGUuc2hhZG93Um9vdHx8KGUuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIixzaGFkeVVwZ3JhZGVGcmFnbWVudDp0fSksZS5zaGFkb3dSb290LmFwcGVuZENoaWxkKHQpLHRoaXMuY29uc3RydWN0b3IuX3N0eWxlU2hlZXQmJihlLnNoYWRvd1Jvb3QuYWRvcHRlZFN0eWxlU2hlZXRzPVt0aGlzLmNvbnN0cnVjdG9yLl9zdHlsZVNoZWV0XSkpLE0mJndpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmZsdXNoSW5pdGlhbChlLnNoYWRvd1Jvb3QpLGUuc2hhZG93Um9vdCk6bnVsbDt0aHJvdyBuZXcgRXJyb3IoIlNoYWRvd0RPTSBub3QgYXZhaWxhYmxlLiBQb2x5bWVyRWxlbWVudCBjYW4gY3JlYXRlIGRvbSBhcyBjaGlsZHJlbiBpbnN0ZWFkIG9mIGluIFNoYWRvd0RPTSBieSBzZXR0aW5nIGB0aGlzLnJvb3QgPSB0aGlzO2AgYmVmb3JlIGByZWFkeWAuIil9dXBkYXRlU3R5bGVzKHQpe3dpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLnN0eWxlU3VidHJlZSh0aGlzLHQpfXJlc29sdmVVcmwodCxlKXtyZXR1cm4hZSYmdGhpcy5pbXBvcnRQYXRoJiYoZT1kKHRoaXMuaW1wb3J0UGF0aCkpLGQodCxlKX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KHQsbixpKXtyZXR1cm4gbi5keW5hbWljRm5zPW4uZHluYW1pY0Zuc3x8dGhpcy5fcHJvcGVydGllcyxlLl9wYXJzZVRlbXBsYXRlQ29udGVudC5jYWxsKHRoaXMsdCxuLGkpfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdCh0LG4saSl7cmV0dXJuIVN8fG4gaW4gdGhpcy5fcHJvcGVydGllc3x8aS5pbmZvLnBhcnQuc2lnbmF0dXJlJiZpLmluZm8ucGFydC5zaWduYXR1cmUuc3RhdGljfHxpLmluZm8ucGFydC5ob3N0UHJvcHx8dC5uZXN0ZWRUZW1wbGF0ZXx8Y29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHtufScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApLGUuX2FkZFRlbXBsYXRlUHJvcGVydHlFZmZlY3QuY2FsbCh0aGlzLHQsbixpKX19fSkpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjbGFzcyBnZXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlPXQudG9TdHJpbmcoKX10b1N0cmluZygpe3JldHVybiB0aGlzLnZhbHVlfX1jb25zdCBfZT1mdW5jdGlvbiB0KGUsLi4ubil7Y29uc3QgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiBpLmlubmVySFRNTD1uLnJlZHVjZSgoKHQsbixpKT0+dCsoZnVuY3Rpb24gcih0KXtpZih0IGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudClyZXR1cm4gdC5pbm5lckhUTUw7aWYodCBpbnN0YW5jZW9mIGdlKXJldHVybihmdW5jdGlvbiBlKHQpe2lmKHQgaW5zdGFuY2VvZiBnZSlyZXR1cm4gdC52YWx1ZTt0aHJvdyBuZXcgRXJyb3IoYG5vbi1saXRlcmFsIHZhbHVlIHBhc3NlZCB0byBQb2x5bWVyJ3MgaHRtbExpdGVyYWwgZnVuY3Rpb246ICR7dH1gKX0pKHQpO3Rocm93IG5ldyBFcnJvcihgbm9uLXRlbXBsYXRlIHZhbHVlIHBhc3NlZCB0byBQb2x5bWVyJ3MgaHRtbCBmdW5jdGlvbjogJHt0fWApfSkobikrZVtpKzFdKSxlWzBdKSxpfSx5ZT1tZShIVE1MRWxlbWVudCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovdmFyIHZlPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gYmUodCl7aWYodC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLGkuZ2V0P2k6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSl9KSksZX12YXIgeGUsd2UsU2U9e2V4cG9ydHM6e319OwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBMb2Rhc2ggPGh0dHBzOi8vbG9kYXNoLmNvbS8+CiAgICAgKiBDb3B5cmlnaHQgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9vcGVuanNmLm9yZy8+CiAgICAgKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+CiAgICAgKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPgogICAgICogQ29weXJpZ2h0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzCiAgICAgKi94ZT1TZSx3ZT1TZS5leHBvcnRzLGZ1bmN0aW9uKCl7dmFyIHQsZT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiIsbj0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIsaT0iX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyIscj0zMixvPTEyOCxhPTEvMCxzPTkwMDcxOTkyNTQ3NDA5OTEsbD1OYU4sYz00Mjk0OTY3Mjk1LHU9W1siYXJ5IixvXSxbImJpbmQiLDFdLFsiYmluZEtleSIsMl0sWyJjdXJyeSIsOF0sWyJjdXJyeVJpZ2h0IiwxNl0sWyJmbGlwIiw1MTJdLFsicGFydGlhbCIscl0sWyJwYXJ0aWFsUmlnaHQiLDY0XSxbInJlYXJnIiwyNTZdXSxoPSJbb2JqZWN0IEFyZ3VtZW50c10iLGQ9IltvYmplY3QgQXJyYXldIixwPSJbb2JqZWN0IEJvb2xlYW5dIixmPSJbb2JqZWN0IERhdGVdIixtPSJbb2JqZWN0IEVycm9yXSIsZz0iW29iamVjdCBGdW5jdGlvbl0iLF89IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIix5PSJbb2JqZWN0IE1hcF0iLHY9IltvYmplY3QgTnVtYmVyXSIsYj0iW29iamVjdCBPYmplY3RdIix4PSJbb2JqZWN0IFByb21pc2VdIix3PSJbb2JqZWN0IFJlZ0V4cF0iLFM9IltvYmplY3QgU2V0XSIsTT0iW29iamVjdCBTdHJpbmddIixFPSJbb2JqZWN0IFN5bWJvbF0iLFQ9IltvYmplY3QgV2Vha01hcF0iLEM9IltvYmplY3QgQXJyYXlCdWZmZXJdIixBPSJbb2JqZWN0IERhdGFWaWV3XSIsaz0iW29iamVjdCBGbG9hdDMyQXJyYXldIixMPSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLFA9IltvYmplY3QgSW50OEFycmF5XSIsTj0iW29iamVjdCBJbnQxNkFycmF5XSIsST0iW29iamVjdCBJbnQzMkFycmF5XSIsUj0iW29iamVjdCBVaW50OEFycmF5XSIsTz0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLHo9IltvYmplY3QgVWludDE2QXJyYXldIixEPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQj0vXGJfX3AgXCs9ICcnOy9nLEg9L1xiKF9fcCBcKz0pICcnIFwrL2csRj0vKF9fZVwoLio/XCl8XGJfX3RcKSkgXCtcbicnOy9nLFY9LyYoPzphbXB8bHR8Z3R8cXVvdHwjMzkpOy9nLFU9L1smPD4iJ10vZyxqPVJlZ0V4cChWLnNvdXJjZSksRz1SZWdFeHAoVS5zb3VyY2UpLFc9LzwlLShbXHNcU10rPyklPi9nLHE9LzwlKFtcc1xTXSs/KSU+L2csWT0vPCU9KFtcc1xTXSs/KSU+L2csWD0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLywkPS9eXHcqJC8sSz0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxaPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxKPVJlZ0V4cChaLnNvdXJjZSksUT0vXlxzKy8sdHQ9L1xzLyxldD0vXHsoPzpcblwvXCogXFt3cmFwcGVkIHdpdGggLitcXSBcKlwvKT9cbj8vLG50PS9ce1xuXC9cKiBcW3dyYXBwZWQgd2l0aCAoLispXF0gXCovLGl0PS8sPyAmIC8scnQ9L1teXHgwMC1ceDJmXHgzYS1ceDQwXHg1Yi1ceDYwXHg3Yi1ceDdmXSsvZyxvdD0vWygpPSx7fVxbXF1cL1xzXS8sYXQ9L1xcKFxcKT8vZyxzdD0vXCRceyhbXlxcfV0qKD86XFwuW15cXH1dKikqKVx9L2csbHQ9L1x3KiQvLGN0PS9eWy0rXTB4WzAtOWEtZl0rJC9pLHV0PS9eMGJbMDFdKyQvaSxodD0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxkdD0vXjBvWzAtN10rJC9pLHB0PS9eKD86MHxbMS05XVxkKikkLyxmdD0vW1x4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHhmZlx1MDEwMC1cdTAxN2ZdL2csbXQ9LygkXikvLGd0PS9bJ1xuXHJcdTIwMjhcdTIwMjlcXF0vZyxfdD0iXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmIix5dD0iYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZiIsdnQ9IkEtWlxceGMwLVxceGQ2XFx4ZDgtXFx4ZGUiLGJ0PSJcXHhhY1xceGIxXFx4ZDdcXHhmN1xceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmXFx1MjAwMC1cXHUyMDZmIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwIix4dD0iWyIrYnQrIl0iLHd0PSJbIitfdCsiXSIsU3Q9IlxcZCsiLE10PSJbIit5dCsiXSIsRXQ9IlteXFx1ZDgwMC1cXHVkZmZmIitidCtTdCsiXFx1MjcwMC1cXHUyN2JmIit5dCt2dCsiXSIsVHQ9IlxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXSIsQ3Q9IlteXFx1ZDgwMC1cXHVkZmZmXSIsQXQ9Iig/OlxcdWQ4M2NbXFx1ZGRlNi1cXHVkZGZmXSl7Mn0iLGt0PSJbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdIixMdD0iWyIrdnQrIl0iLFB0PSIoPzoiK010KyJ8IitFdCsiKSIsTnQ9Iig/OiIrTHQrInwiK0V0KyIpIixJdD0iKD86WyfigJldKD86ZHxsbHxtfHJlfHN8dHx2ZSkpPyIsUnQ9Iig/Olsn4oCZXSg/OkR8TEx8TXxSRXxTfFR8VkUpKT8iLE90PSIoPzoiK3d0KyJ8IitUdCsiKT8iLHp0PSJbXFx1ZmUwZVxcdWZlMGZdPyIsRHQ9enQrT3QrIig/OlxcdTIwMGQoPzoiK1tDdCxBdCxrdF0uam9pbigifCIpKyIpIit6dCtPdCsiKSoiLEJ0PSIoPzoiK1siW1xcdTI3MDAtXFx1MjdiZl0iLEF0LGt0XS5qb2luKCJ8IikrIikiK0R0LEh0PSIoPzoiK1tDdCt3dCsiPyIsd3QsQXQsa3QsIltcXHVkODAwLVxcdWRmZmZdIl0uam9pbigifCIpKyIpIixGdD1SZWdFeHAoIlsn4oCZXSIsImciKSxWdD1SZWdFeHAod3QsImciKSxVdD1SZWdFeHAoVHQrIig/PSIrVHQrIil8IitIdCtEdCwiZyIpLGp0PVJlZ0V4cChbTHQrIj8iK010KyIrIitJdCsiKD89IitbeHQsTHQsIiQiXS5qb2luKCJ8IikrIikiLE50KyIrIitSdCsiKD89IitbeHQsTHQrUHQsIiQiXS5qb2luKCJ8IikrIikiLEx0KyI/IitQdCsiKyIrSXQsTHQrIisiK1J0LCJcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxkVEgpKD89XFxifFthLXpfXSkiLCJcXGQqKD86MXN0fDJuZHwzcmR8KD8hWzEyM10pXFxkdGgpKD89XFxifFtBLVpfXSkiLFN0LEJ0XS5qb2luKCJ8IiksImciKSxHdD1SZWdFeHAoIltcXHUyMDBkXFx1ZDgwMC1cXHVkZmZmIitfdCsiXFx1ZmUwZVxcdWZlMGZdIiksV3Q9L1thLXpdW0EtWl18W0EtWl17Mn1bYS16XXxbMC05XVthLXpBLVpdfFthLXpBLVpdWzAtOV18W15hLXpBLVowLTkgXS8scXQ9WyJBcnJheSIsIkJ1ZmZlciIsIkRhdGFWaWV3IiwiRGF0ZSIsIkVycm9yIiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiRnVuY3Rpb24iLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIk1hcCIsIk1hdGgiLCJPYmplY3QiLCJQcm9taXNlIiwiUmVnRXhwIiwiU2V0IiwiU3RyaW5nIiwiU3ltYm9sIiwiVHlwZUVycm9yIiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIldlYWtNYXAiLCJfIiwiY2xlYXJUaW1lb3V0IiwiaXNGaW5pdGUiLCJwYXJzZUludCIsInNldFRpbWVvdXQiXSxZdD0tMSxYdD17fTtYdFtrXT1YdFtMXT1YdFtQXT1YdFtOXT1YdFtJXT1YdFtSXT1YdFtPXT1YdFt6XT1YdFtEXT0hMCxYdFtoXT1YdFtkXT1YdFtDXT1YdFtwXT1YdFtBXT1YdFtmXT1YdFttXT1YdFtnXT1YdFt5XT1YdFt2XT1YdFtiXT1YdFt3XT1YdFtTXT1YdFtNXT1YdFtUXT0hMTt2YXIgJHQ9e307JHRbaF09JHRbZF09JHRbQ109JHRbQV09JHRbcF09JHRbZl09JHRba109JHRbTF09JHRbUF09JHRbTl09JHRbSV09JHRbeV09JHRbdl09JHRbYl09JHRbd109JHRbU109JHRbTV09JHRbRV09JHRbUl09JHRbT109JHRbel09JHRbRF09ITAsJHRbbV09JHRbZ109JHRbVF09ITE7dmFyIEt0PXsiXFwiOiJcXCIsIiciOiInIiwiXG4iOiJuIiwiXHIiOiJyIiwiXHUyMDI4IjoidTIwMjgiLCJcdTIwMjkiOiJ1MjAyOSJ9LFp0PXBhcnNlRmxvYXQsSnQ9cGFyc2VJbnQsUXQ9Im9iamVjdCI9PXR5cGVvZiB2ZSYmdmUmJnZlLk9iamVjdD09PU9iamVjdCYmdmUsdGU9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixlZT1RdHx8dGV8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksbmU9d2UmJiF3ZS5ub2RlVHlwZSYmd2UsaWU9bmUmJnhlJiYheGUubm9kZVR5cGUmJnhlLHJlPWllJiZpZS5leHBvcnRzPT09bmUsb2U9cmUmJlF0LnByb2Nlc3MsYWU9KGZ1bmN0aW9uKCl7dHJ5e3JldHVybiBpZSYmaWUucmVxdWlyZSYmaWUucmVxdWlyZSgidXRpbCIpLnR5cGVzfHxvZSYmb2UuYmluZGluZyYmb2UuYmluZGluZygidXRpbCIpfWNhdGNoKHQpe319KSgpLHNlPWFlJiZhZS5pc0FycmF5QnVmZmVyLGxlPWFlJiZhZS5pc0RhdGUsY2U9YWUmJmFlLmlzTWFwLHVlPWFlJiZhZS5pc1JlZ0V4cCxoZT1hZSYmYWUuaXNTZXQsZGU9YWUmJmFlLmlzVHlwZWRBcnJheTtmdW5jdGlvbiBwZSh0LGUsbil7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHQuY2FsbChlKTtjYXNlIDE6cmV0dXJuIHQuY2FsbChlLG5bMF0pO2Nhc2UgMjpyZXR1cm4gdC5jYWxsKGUsblswXSxuWzFdKTtjYXNlIDM6cmV0dXJuIHQuY2FsbChlLG5bMF0sblsxXSxuWzJdKX1yZXR1cm4gdC5hcHBseShlLG4pfWZ1bmN0aW9uIGZlKHQsZSxuLGkpe2Zvcih2YXIgcj0tMSxvPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK3I8bzspe3ZhciBhPXRbcl07ZShpLGEsbihhKSx0KX1yZXR1cm4gaX1mdW5jdGlvbiBtZSh0LGUpe2Zvcih2YXIgbj0tMSxpPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK248aSYmITEhPT1lKHRbbl0sbix0KTspO3JldHVybiB0fWZ1bmN0aW9uIGdlKHQsZSl7Zm9yKHZhciBuPW51bGw9PXQ/MDp0Lmxlbmd0aDtuLS0mJiExIT09ZSh0W25dLG4sdCk7KTtyZXR1cm4gdH1mdW5jdGlvbiBfZSh0LGUpe2Zvcih2YXIgbj0tMSxpPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK248aTspaWYoIWUodFtuXSxuLHQpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHllKHQsZSl7Zm9yKHZhciBuPS0xLGk9bnVsbD09dD8wOnQubGVuZ3RoLHI9MCxvPVtdOysrbjxpOyl7dmFyIGE9dFtuXTtlKGEsbix0KSYmKG9bcisrXT1hKX1yZXR1cm4gb31mdW5jdGlvbiBiZSh0LGUpe3JldHVybiEobnVsbD09dHx8IXQubGVuZ3RoKSYmTmUodCxlLDApPi0xfWZ1bmN0aW9uIFNlKHQsZSxuKXtmb3IodmFyIGk9LTEscj1udWxsPT10PzA6dC5sZW5ndGg7KytpPHI7KWlmKG4oZSx0W2ldKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBNZSh0LGUpe2Zvcih2YXIgbj0tMSxpPW51bGw9PXQ/MDp0Lmxlbmd0aCxyPUFycmF5KGkpOysrbjxpOylyW25dPWUodFtuXSxuLHQpO3JldHVybiByfWZ1bmN0aW9uIEVlKHQsZSl7Zm9yKHZhciBuPS0xLGk9ZS5sZW5ndGgscj10Lmxlbmd0aDsrK248aTspdFtyK25dPWVbbl07cmV0dXJuIHR9ZnVuY3Rpb24gVGUodCxlLG4saSl7dmFyIHI9LTEsbz1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKGkmJm8mJihuPXRbKytyXSk7KytyPG87KW49ZShuLHRbcl0scix0KTtyZXR1cm4gbn1mdW5jdGlvbiBDZSh0LGUsbixpKXt2YXIgcj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKGkmJnImJihuPXRbLS1yXSk7ci0tOyluPWUobix0W3JdLHIsdCk7cmV0dXJuIG59ZnVuY3Rpb24gQWUodCxlKXtmb3IodmFyIG49LTEsaT1udWxsPT10PzA6dC5sZW5ndGg7KytuPGk7KWlmKGUodFtuXSxuLHQpKXJldHVybiEwO3JldHVybiExfXZhciBrZT16ZSgibGVuZ3RoIik7ZnVuY3Rpb24gTGUodCxlLG4pe3ZhciBpO3JldHVybiBuKHQsKGZ1bmN0aW9uKHQsbixyKXtpZihlKHQsbixyKSlyZXR1cm4gaT1uLCExfSkpLGl9ZnVuY3Rpb24gUGUodCxlLG4saSl7Zm9yKHZhciByPXQubGVuZ3RoLG89bisoaT8xOi0xKTtpP28tLTorK288cjspaWYoZSh0W29dLG8sdCkpcmV0dXJuIG87cmV0dXJuLTF9ZnVuY3Rpb24gTmUodCxlLG4pe3JldHVybiBlPT1lPyhmdW5jdGlvbiBpKHQsZSxuKXtmb3IodmFyIGk9bi0xLHI9dC5sZW5ndGg7KytpPHI7KWlmKHRbaV09PT1lKXJldHVybiBpO3JldHVybi0xfSkodCxlLG4pOlBlKHQsUmUsbil9ZnVuY3Rpb24gSWUodCxlLG4saSl7Zm9yKHZhciByPW4tMSxvPXQubGVuZ3RoOysrcjxvOylpZihpKHRbcl0sZSkpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gUmUodCl7cmV0dXJuIHQhPXR9ZnVuY3Rpb24gT2UodCxlKXt2YXIgbj1udWxsPT10PzA6dC5sZW5ndGg7cmV0dXJuIG4/SGUodCxlKS9uOmx9ZnVuY3Rpb24gemUoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT1uP3Q6bltlXX19ZnVuY3Rpb24gRGUoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT1lP3Q6ZVtuXX19ZnVuY3Rpb24gQmUodCxlLG4saSxyKXtyZXR1cm4gcih0LChmdW5jdGlvbih0LHIsbyl7bj1pPyhpPSExLHQpOmUobix0LHIsbyl9KSksbn1mdW5jdGlvbiBIZShlLG4pe2Zvcih2YXIgaSxyPS0xLG89ZS5sZW5ndGg7KytyPG87KXt2YXIgYT1uKGVbcl0pO2EhPT10JiYoaT1pPT09dD9hOmkrYSl9cmV0dXJuIGl9ZnVuY3Rpb24gRmUodCxlKXtmb3IodmFyIG49LTEsaT1BcnJheSh0KTsrK248dDspaVtuXT1lKG4pO3JldHVybiBpfWZ1bmN0aW9uIFZlKHQpe3JldHVybiB0P3Quc2xpY2UoMCxhbih0KSsxKS5yZXBsYWNlKFEsIiIpOnR9ZnVuY3Rpb24gVWUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfX1mdW5jdGlvbiBqZSh0LGUpe3JldHVybiBNZShlLChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKX1mdW5jdGlvbiBHZSh0LGUpe3JldHVybiB0LmhhcyhlKX1mdW5jdGlvbiBXZSh0LGUpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoOysrbjxpJiZOZShlLHRbbl0sMCk+LTE7KTtyZXR1cm4gbn1mdW5jdGlvbiBxZSh0LGUpe2Zvcih2YXIgbj10Lmxlbmd0aDtuLS0mJk5lKGUsdFtuXSwwKT4tMTspO3JldHVybiBufWZ1bmN0aW9uIFllKHQsZSl7Zm9yKHZhciBuPXQubGVuZ3RoLGk9MDtuLS07KXRbbl09PT1lJiYrK2k7cmV0dXJuIGl9dmFyIFhlPURlKHsiw4AiOiJBIiwiw4EiOiJBIiwiw4IiOiJBIiwiw4MiOiJBIiwiw4QiOiJBIiwiw4UiOiJBIiwiw6AiOiJhIiwiw6EiOiJhIiwiw6IiOiJhIiwiw6MiOiJhIiwiw6QiOiJhIiwiw6UiOiJhIiwiw4ciOiJDIiwiw6ciOiJjIiwiw5AiOiJEIiwiw7AiOiJkIiwiw4giOiJFIiwiw4kiOiJFIiwiw4oiOiJFIiwiw4siOiJFIiwiw6giOiJlIiwiw6kiOiJlIiwiw6oiOiJlIiwiw6siOiJlIiwiw4wiOiJJIiwiw40iOiJJIiwiw44iOiJJIiwiw48iOiJJIiwiw6wiOiJpIiwiw60iOiJpIiwiw64iOiJpIiwiw68iOiJpIiwiw5EiOiJOIiwiw7EiOiJuIiwiw5IiOiJPIiwiw5MiOiJPIiwiw5QiOiJPIiwiw5UiOiJPIiwiw5YiOiJPIiwiw5giOiJPIiwiw7IiOiJvIiwiw7MiOiJvIiwiw7QiOiJvIiwiw7UiOiJvIiwiw7YiOiJvIiwiw7giOiJvIiwiw5kiOiJVIiwiw5oiOiJVIiwiw5siOiJVIiwiw5wiOiJVIiwiw7kiOiJ1Iiwiw7oiOiJ1Iiwiw7siOiJ1Iiwiw7wiOiJ1Iiwiw50iOiJZIiwiw70iOiJ5Iiwiw78iOiJ5Iiwiw4YiOiJBZSIsIsOmIjoiYWUiLCLDniI6IlRoIiwiw74iOiJ0aCIsIsOfIjoic3MiLCLEgCI6IkEiLCLEgiI6IkEiLCLEhCI6IkEiLCLEgSI6ImEiLCLEgyI6ImEiLCLEhSI6ImEiLCLEhiI6IkMiLCLEiCI6IkMiLCLEiiI6IkMiLCLEjCI6IkMiLCLEhyI6ImMiLCLEiSI6ImMiLCLEiyI6ImMiLCLEjSI6ImMiLCLEjiI6IkQiLCLEkCI6IkQiLCLEjyI6ImQiLCLEkSI6ImQiLCLEkiI6IkUiLCLElCI6IkUiLCLEliI6IkUiLCLEmCI6IkUiLCLEmiI6IkUiLCLEkyI6ImUiLCLElSI6ImUiLCLElyI6ImUiLCLEmSI6ImUiLCLEmyI6ImUiLCLEnCI6IkciLCLEniI6IkciLCLEoCI6IkciLCLEoiI6IkciLCLEnSI6ImciLCLEnyI6ImciLCLEoSI6ImciLCLEoyI6ImciLCLEpCI6IkgiLCLEpiI6IkgiLCLEpSI6ImgiLCLEpyI6ImgiLCLEqCI6IkkiLCLEqiI6IkkiLCLErCI6IkkiLCLEriI6IkkiLCLEsCI6IkkiLCLEqSI6ImkiLCLEqyI6ImkiLCLErSI6ImkiLCLEryI6ImkiLCLEsSI6ImkiLCLEtCI6IkoiLCLEtSI6ImoiLCLEtiI6IksiLCLEtyI6ImsiLCLEuCI6ImsiLCLEuSI6IkwiLCLEuyI6IkwiLCLEvSI6IkwiLCLEvyI6IkwiLCLFgSI6IkwiLCLEuiI6ImwiLCLEvCI6ImwiLCLEviI6ImwiLCLFgCI6ImwiLCLFgiI6ImwiLCLFgyI6Ik4iLCLFhSI6Ik4iLCLFhyI6Ik4iLCLFiiI6Ik4iLCLFhCI6Im4iLCLFhiI6Im4iLCLFiCI6Im4iLCLFiyI6Im4iLCLFjCI6Ik8iLCLFjiI6Ik8iLCLFkCI6Ik8iLCLFjSI6Im8iLCLFjyI6Im8iLCLFkSI6Im8iLCLFlCI6IlIiLCLFliI6IlIiLCLFmCI6IlIiLCLFlSI6InIiLCLFlyI6InIiLCLFmSI6InIiLCLFmiI6IlMiLCLFnCI6IlMiLCLFniI6IlMiLCLFoCI6IlMiLCLFmyI6InMiLCLFnSI6InMiLCLFnyI6InMiLCLFoSI6InMiLCLFoiI6IlQiLCLFpCI6IlQiLCLFpiI6IlQiLCLFoyI6InQiLCLFpSI6InQiLCLFpyI6InQiLCLFqCI6IlUiLCLFqiI6IlUiLCLFrCI6IlUiLCLFriI6IlUiLCLFsCI6IlUiLCLFsiI6IlUiLCLFqSI6InUiLCLFqyI6InUiLCLFrSI6InUiLCLFryI6InUiLCLFsSI6InUiLCLFsyI6InUiLCLFtCI6IlciLCLFtSI6InciLCLFtiI6IlkiLCLFtyI6InkiLCLFuCI6IlkiLCLFuSI6IloiLCLFuyI6IloiLCLFvSI6IloiLCLFuiI6InoiLCLFvCI6InoiLCLFviI6InoiLCLEsiI6IklKIiwixLMiOiJpaiIsIsWSIjoiT2UiLCLFkyI6Im9lIiwixYkiOiInbiIsIsW/IjoicyJ9KSwkZT1EZSh7IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjMzk7In0pO2Z1bmN0aW9uIEtlKHQpe3JldHVybiJcXCIrS3RbdF19ZnVuY3Rpb24gWmUodCl7cmV0dXJuIEd0LnRlc3QodCl9ZnVuY3Rpb24gSmUodCl7dmFyIGU9LTEsbj1BcnJheSh0LnNpemUpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQsaSl7blsrK2VdPVtpLHRdfSkpLG59ZnVuY3Rpb24gUWUodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQoZShuKSl9fWZ1bmN0aW9uIHRuKHQsZSl7Zm9yKHZhciBuPS0xLHI9dC5sZW5ndGgsbz0wLGE9W107KytuPHI7KXt2YXIgcz10W25dO3MhPT1lJiZzIT09aXx8KHRbbl09aSxhW28rK109bil9cmV0dXJuIGF9ZnVuY3Rpb24gZW4odCl7dmFyIGU9LTEsbj1BcnJheSh0LnNpemUpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe25bKytlXT10fSkpLG59ZnVuY3Rpb24gbm4odCl7dmFyIGU9LTEsbj1BcnJheSh0LnNpemUpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe25bKytlXT1bdCx0XX0pKSxufWZ1bmN0aW9uIHJuKHQpe3JldHVybiBaZSh0KT8oZnVuY3Rpb24gZSh0KXtmb3IodmFyIGU9VXQubGFzdEluZGV4PTA7VXQudGVzdCh0KTspKytlO3JldHVybiBlfSkodCk6a2UodCl9ZnVuY3Rpb24gb24odCl7cmV0dXJuIFplKHQpPyhmdW5jdGlvbiBlKHQpe3JldHVybiB0Lm1hdGNoKFV0KXx8W119KSh0KTooZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5zcGxpdCgiIil9KSh0KX1mdW5jdGlvbiBhbih0KXtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tJiZ0dC50ZXN0KHQuY2hhckF0KGUpKTspO3JldHVybiBlfXZhciBzbj1EZSh7IiZhbXA7IjoiJiIsIiZsdDsiOiI8IiwiJmd0OyI6Ij4iLCImcXVvdDsiOiciJywiJiMzOTsiOiInIn0pLGxuPShmdW5jdGlvbiB0dChfdCl7dmFyIHl0LHZ0PShfdD1udWxsPT1fdD9lZTpsbi5kZWZhdWx0cyhlZS5PYmplY3QoKSxfdCxsbi5waWNrKGVlLHF0KSkpLkFycmF5LGJ0PV90LkRhdGUseHQ9X3QuRXJyb3Isd3Q9X3QuRnVuY3Rpb24sU3Q9X3QuTWF0aCxNdD1fdC5PYmplY3QsRXQ9X3QuUmVnRXhwLFR0PV90LlN0cmluZyxDdD1fdC5UeXBlRXJyb3IsQXQ9dnQucHJvdG90eXBlLGt0PU10LnByb3RvdHlwZSxMdD1fdFsiX19jb3JlLWpzX3NoYXJlZF9fIl0sUHQ9d3QucHJvdG90eXBlLnRvU3RyaW5nLE50PWt0Lmhhc093blByb3BlcnR5LEl0PTAsUnQ9KHl0PS9bXi5dKyQvLmV4ZWMoTHQmJkx0LmtleXMmJkx0LmtleXMuSUVfUFJPVE98fCIiKSk/IlN5bWJvbChzcmMpXzEuIit5dDoiIixPdD1rdC50b1N0cmluZyx6dD1QdC5jYWxsKE10KSxEdD1lZS5fLEJ0PUV0KCJeIitQdC5jYWxsKE50KS5yZXBsYWNlKFosIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksSHQ9cmU/X3QuQnVmZmVyOnQsVXQ9X3QuU3ltYm9sLEd0PV90LlVpbnQ4QXJyYXksS3Q9SHQ/SHQuYWxsb2NVbnNhZmU6dCxRdD1RZShNdC5nZXRQcm90b3R5cGVPZixNdCksdGU9TXQuY3JlYXRlLG5lPWt0LnByb3BlcnR5SXNFbnVtZXJhYmxlLGllPUF0LnNwbGljZSxvZT1VdD9VdC5pc0NvbmNhdFNwcmVhZGFibGU6dCxhZT1VdD9VdC5pdGVyYXRvcjp0LHZlPVV0P1V0LnRvU3RyaW5nVGFnOnQseGU9KGZ1bmN0aW9uKCl7dHJ5e3ZhciB0PVBvKE10LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiB0KHt9LCIiLHt9KSx0fWNhdGNoKHQpe319KSgpLHdlPV90LmNsZWFyVGltZW91dCE9PWVlLmNsZWFyVGltZW91dCYmX3QuY2xlYXJUaW1lb3V0LGtlPWJ0JiZidC5ub3chPT1lZS5EYXRlLm5vdyYmYnQubm93LERlPV90LnNldFRpbWVvdXQhPT1lZS5zZXRUaW1lb3V0JiZfdC5zZXRUaW1lb3V0LGNuPVN0LmNlaWwsdW49U3QuZmxvb3IsaG49TXQuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGRuPUh0P0h0LmlzQnVmZmVyOnQscG49X3QuaXNGaW5pdGUsZm49QXQuam9pbixtbj1RZShNdC5rZXlzLE10KSxnbj1TdC5tYXgsX249U3QubWluLHluPWJ0Lm5vdyx2bj1fdC5wYXJzZUludCxibj1TdC5yYW5kb20seG49QXQucmV2ZXJzZSx3bj1QbyhfdCwiRGF0YVZpZXciKSxTbj1QbyhfdCwiTWFwIiksTW49UG8oX3QsIlByb21pc2UiKSxFbj1QbyhfdCwiU2V0IiksVG49UG8oX3QsIldlYWtNYXAiKSxDbj1QbyhNdCwiY3JlYXRlIiksQW49VG4mJm5ldyBUbixrbj17fSxMbj1vYSh3biksUG49b2EoU24pLE5uPW9hKE1uKSxJbj1vYShFbiksUm49b2EoVG4pLE9uPVV0P1V0LnByb3RvdHlwZTp0LHpuPU9uP09uLnZhbHVlT2Y6dCxEbj1Pbj9Pbi50b1N0cmluZzp0O2Z1bmN0aW9uIEJuKHQpe2lmKE1zKHQpJiYhaHModCkmJiEodCBpbnN0YW5jZW9mIFVuKSl7aWYodCBpbnN0YW5jZW9mIFZuKXJldHVybiB0O2lmKE50LmNhbGwodCwiX193cmFwcGVkX18iKSlyZXR1cm4gYWEodCl9cmV0dXJuIG5ldyBWbih0KX12YXIgSG49KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZnVuY3Rpb24obil7aWYoIVNzKG4pKXJldHVybnt9O2lmKHRlKXJldHVybiB0ZShuKTtlLnByb3RvdHlwZT1uO3ZhciBpPW5ldyBlO3JldHVybiBlLnByb3RvdHlwZT10LGl9fSkoKTtmdW5jdGlvbiBGbigpe31mdW5jdGlvbiBWbihlLG4pe3RoaXMuX193cmFwcGVkX189ZSx0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19jaGFpbl9fPSEhbix0aGlzLl9faW5kZXhfXz0wLHRoaXMuX192YWx1ZXNfXz10fWZ1bmN0aW9uIFVuKHQpe3RoaXMuX193cmFwcGVkX189dCx0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19kaXJfXz0xLHRoaXMuX19maWx0ZXJlZF9fPSExLHRoaXMuX19pdGVyYXRlZXNfXz1bXSx0aGlzLl9fdGFrZUNvdW50X189Yyx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBqbih0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxuOyl7dmFyIGk9dFtlXTt0aGlzLnNldChpWzBdLGlbMV0pfX1mdW5jdGlvbiBHbih0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxuOyl7dmFyIGk9dFtlXTt0aGlzLnNldChpWzBdLGlbMV0pfX1mdW5jdGlvbiBXbih0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxuOyl7dmFyIGk9dFtlXTt0aGlzLnNldChpWzBdLGlbMV0pfX1mdW5jdGlvbiBxbih0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgV247KytlPG47KXRoaXMuYWRkKHRbZV0pfWZ1bmN0aW9uIFluKHQpe3ZhciBlPXRoaXMuX19kYXRhX189bmV3IEduKHQpO3RoaXMuc2l6ZT1lLnNpemV9ZnVuY3Rpb24gWG4odCxlKXt2YXIgbj1ocyh0KSxpPSFuJiZ1cyh0KSxyPSFuJiYhaSYmZ3ModCksbz0hbiYmIWkmJiFyJiZPcyh0KSxhPW58fGl8fHJ8fG8scz1hP0ZlKHQubGVuZ3RoLFR0KTpbXSxsPXMubGVuZ3RoO2Zvcih2YXIgYyBpbiB0KSFlJiYhTnQuY2FsbCh0LGMpfHxhJiYoImxlbmd0aCI9PWN8fHImJigib2Zmc2V0Ij09Y3x8InBhcmVudCI9PWMpfHxvJiYoImJ1ZmZlciI9PWN8fCJieXRlTGVuZ3RoIj09Y3x8ImJ5dGVPZmZzZXQiPT1jKXx8Qm8oYyxsKSl8fHMucHVzaChjKTtyZXR1cm4gc31mdW5jdGlvbiAkbihlKXt2YXIgbj1lLmxlbmd0aDtyZXR1cm4gbj9lW3ByKDAsbi0xKV06dH1mdW5jdGlvbiBLbih0LGUpe3JldHVybiBlYShYcih0KSxvaShlLDAsdC5sZW5ndGgpKX1mdW5jdGlvbiBabih0KXtyZXR1cm4gZWEoWHIodCkpfWZ1bmN0aW9uIEpuKGUsbixpKXsoaSE9PXQmJiFzcyhlW25dLGkpfHxpPT09dCYmIShuIGluIGUpKSYmaWkoZSxuLGkpfWZ1bmN0aW9uIFFuKGUsbixpKXt2YXIgcj1lW25dO050LmNhbGwoZSxuKSYmc3MocixpKSYmKGkhPT10fHxuIGluIGUpfHxpaShlLG4saSl9ZnVuY3Rpb24gdGkodCxlKXtmb3IodmFyIG49dC5sZW5ndGg7bi0tOylpZihzcyh0W25dWzBdLGUpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIGVpKHQsZSxuLGkpe3JldHVybiBOaSh0LChmdW5jdGlvbih0LHIsbyl7ZShpLHQsbih0KSxvKX0pKSxpfWZ1bmN0aW9uIG5pKHQsZSl7cmV0dXJuIHQmJiRyKGUscmwoZSksdCl9ZnVuY3Rpb24gaWkodCxlLG4peyJfX3Byb3RvX18iPT1lJiZ4ZT94ZSh0LGUse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOm4sd3JpdGFibGU6ITB9KTp0W2VdPW59ZnVuY3Rpb24gcmkoZSxuKXtmb3IodmFyIGk9LTEscj1uLmxlbmd0aCxvPXZ0KHIpLGE9bnVsbD09ZTsrK2k8cjspb1tpXT1hP3Q6UXMoZSxuW2ldKTtyZXR1cm4gb31mdW5jdGlvbiBvaShlLG4saSl7cmV0dXJuIGU9PWUmJihpIT09dCYmKGU9ZTw9aT9lOmkpLG4hPT10JiYoZT1lPj1uP2U6bikpLGV9ZnVuY3Rpb24gYWkoZSxuLGkscixvLGEpe3ZhciBzLGw9MSZuLGM9MiZuLHU9NCZuO2lmKGkmJihzPW8/aShlLHIsbyxhKTppKGUpKSxzIT09dClyZXR1cm4gcztpZighU3MoZSkpcmV0dXJuIGU7dmFyIGQ9aHMoZSk7aWYoZCl7aWYocz0oZnVuY3Rpb24gbSh0KXt2YXIgZT10Lmxlbmd0aCxuPW5ldyB0LmNvbnN0cnVjdG9yKGUpO3JldHVybiBlJiYic3RyaW5nIj09dHlwZW9mIHRbMF0mJk50LmNhbGwodCwiaW5kZXgiKSYmKG4uaW5kZXg9dC5pbmRleCxuLmlucHV0PXQuaW5wdXQpLG59KShlKSwhbClyZXR1cm4gWHIoZSxzKX1lbHNle3ZhciB4PVJvKGUpLFQ9eD09Z3x8eD09XztpZihncyhlKSlyZXR1cm4gVXIoZSxsKTtpZih4PT1ifHx4PT1ofHxUJiYhbyl7aWYocz1jfHxUP3t9OnpvKGUpLCFsKXJldHVybiBjPyhmdW5jdGlvbiBIKHQsZSl7cmV0dXJuICRyKHQsSW8odCksZSl9KShlLChmdW5jdGlvbiBCKHQsZSl7cmV0dXJuIHQmJiRyKGUsb2woZSksdCl9KShzLGUpKTooZnVuY3Rpb24gRih0LGUpe3JldHVybiAkcih0LE5vKHQpLGUpfSkoZSxuaShzLGUpKX1lbHNle2lmKCEkdFt4XSlyZXR1cm4gbz9lOnt9O3M9KGZ1bmN0aW9uIFYodCxlLG4pe3ZhciBpPXQuY29uc3RydWN0b3I7c3dpdGNoKGUpe2Nhc2UgQzpyZXR1cm4ganIodCk7Y2FzZSBwOmNhc2UgZjpyZXR1cm4gbmV3IGkoK3QpO2Nhc2UgQTpyZXR1cm4oZnVuY3Rpb24gcih0LGUpe3ZhciBuPWU/anIodC5idWZmZXIpOnQuYnVmZmVyO3JldHVybiBuZXcgdC5jb25zdHJ1Y3RvcihuLHQuYnl0ZU9mZnNldCx0LmJ5dGVMZW5ndGgpfSkodCxuKTtjYXNlIGs6Y2FzZSBMOmNhc2UgUDpjYXNlIE46Y2FzZSBJOmNhc2UgUjpjYXNlIE86Y2FzZSB6OmNhc2UgRDpyZXR1cm4gR3IodCxuKTtjYXNlIHk6cmV0dXJuIG5ldyBpO2Nhc2UgdjpjYXNlIE06cmV0dXJuIG5ldyBpKHQpO2Nhc2UgdzpyZXR1cm4oZnVuY3Rpb24gbyh0KXt2YXIgZT1uZXcgdC5jb25zdHJ1Y3Rvcih0LnNvdXJjZSxsdC5leGVjKHQpKTtyZXR1cm4gZS5sYXN0SW5kZXg9dC5sYXN0SW5kZXgsZX0pKHQpO2Nhc2UgUzpyZXR1cm4gbmV3IGk7Y2FzZSBFOnJldHVybihmdW5jdGlvbiBhKHQpe3JldHVybiB6bj9NdCh6bi5jYWxsKHQpKTp7fX0pKHQpfX0pKGUseCxsKX19YXx8KGE9bmV3IFluKTt2YXIgVT1hLmdldChlKTtpZihVKXJldHVybiBVO2Euc2V0KGUscyksUHMoZSk/ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtzLmFkZChhaSh0LG4saSx0LGUsYSkpfSkpOkVzKGUpJiZlLmZvckVhY2goKGZ1bmN0aW9uKHQscil7cy5zZXQocixhaSh0LG4saSxyLGUsYSkpfSkpO3ZhciBqPWQ/dDoodT9jP01vOlNvOmM/b2w6cmwpKGUpO3JldHVybiBtZShqfHxlLChmdW5jdGlvbih0LHIpe2omJih0PWVbcj10XSksUW4ocyxyLGFpKHQsbixpLHIsZSxhKSl9KSksc31mdW5jdGlvbiBzaShlLG4saSl7dmFyIHI9aS5sZW5ndGg7aWYobnVsbD09ZSlyZXR1cm4hcjtmb3IoZT1NdChlKTtyLS07KXt2YXIgbz1pW3JdLGE9ZVtvXTtpZihhPT09dCYmIShvIGluIGUpfHwhKDAsbltvXSkoYSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gbGkobixpLHIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBDdChlKTtyZXR1cm4gWm8oKGZ1bmN0aW9uKCl7bi5hcHBseSh0LHIpfSksaSl9ZnVuY3Rpb24gY2kodCxlLG4saSl7dmFyIHI9LTEsbz1iZSxhPSEwLHM9dC5sZW5ndGgsbD1bXSxjPWUubGVuZ3RoO2lmKCFzKXJldHVybiBsO24mJihlPU1lKGUsVWUobikpKSxpPyhvPVNlLGE9ITEpOmUubGVuZ3RoPj0yMDAmJihvPUdlLGE9ITEsZT1uZXcgcW4oZSkpO3Q6Zm9yKDsrK3I8czspe3ZhciB1PXRbcl0saD1udWxsPT1uP3U6bih1KTtpZih1PWl8fDAhPT11P3U6MCxhJiZoPT1oKXtmb3IodmFyIGQ9YztkLS07KWlmKGVbZF09PT1oKWNvbnRpbnVlIHQ7bC5wdXNoKHUpfWVsc2UgbyhlLGgsaSl8fGwucHVzaCh1KX1yZXR1cm4gbH1Cbi50ZW1wbGF0ZVNldHRpbmdzPXtlc2NhcGU6VyxldmFsdWF0ZTpxLGludGVycG9sYXRlOlksdmFyaWFibGU6IiIsaW1wb3J0czp7XzpCbn19LChCbi5wcm90b3R5cGU9Rm4ucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcj1CbiwoVm4ucHJvdG90eXBlPUhuKEZuLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPVZuLChVbi5wcm90b3R5cGU9SG4oRm4ucHJvdG90eXBlKSkuY29uc3RydWN0b3I9VW4sam4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIHVpKCl7dGhpcy5fX2RhdGFfXz1Dbj9DbihudWxsKTp7fSx0aGlzLnNpemU9MH0sam4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBoaSh0KXt2YXIgZT10aGlzLmhhcyh0KSYmZGVsZXRlIHRoaXMuX19kYXRhX19bdF07cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX0sam4ucHJvdG90eXBlLmdldD1mdW5jdGlvbiBkaShlKXt2YXIgaT10aGlzLl9fZGF0YV9fO2lmKENuKXt2YXIgcj1pW2VdO3JldHVybiByPT09bj90OnJ9cmV0dXJuIE50LmNhbGwoaSxlKT9pW2VdOnR9LGpuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gcGkoZSl7dmFyIG49dGhpcy5fX2RhdGFfXztyZXR1cm4gQ24/bltlXSE9PXQ6TnQuY2FsbChuLGUpfSxqbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIGZpKGUsaSl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhlKT8wOjEscltlXT1DbiYmaT09PXQ/bjppLHRoaXN9LEduLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBtaSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LEduLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gZ2kodCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPXRpKGUsdCk7cmV0dXJuIShuPDB8fChuPT1lLmxlbmd0aC0xP2UucG9wKCk6aWUuY2FsbChlLG4sMSksLS10aGlzLnNpemUsMCkpfSxHbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIF9pKGUpe3ZhciBuPXRoaXMuX19kYXRhX18saT10aShuLGUpO3JldHVybiBpPDA/dDpuW2ldWzFdfSxHbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIHlpKHQpe3JldHVybiB0aSh0aGlzLl9fZGF0YV9fLHQpPi0xfSxHbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIHZpKHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXyxpPXRpKG4sdCk7cmV0dXJuIGk8MD8oKyt0aGlzLnNpemUsbi5wdXNoKFt0LGVdKSk6bltpXVsxXT1lLHRoaXN9LFduLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBiaSgpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IGpuLG1hcDpuZXcoU258fEduKSxzdHJpbmc6bmV3IGpufX0sV24ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiB4aSh0KXt2YXIgZT1rbyh0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfSxXbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIHdpKHQpe3JldHVybiBrbyh0aGlzLHQpLmdldCh0KX0sV24ucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBTaSh0KXtyZXR1cm4ga28odGhpcyx0KS5oYXModCl9LFduLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gTWkodCxlKXt2YXIgbj1rbyh0aGlzLHQpLGk9bi5zaXplO3JldHVybiBuLnNldCh0LGUpLHRoaXMuc2l6ZSs9bi5zaXplPT1pPzA6MSx0aGlzfSxxbi5wcm90b3R5cGUuYWRkPXFuLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uIEVpKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldCh0LG4pLHRoaXN9LHFuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gVGkodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfSxZbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gQ2koKXt0aGlzLl9fZGF0YV9fPW5ldyBHbix0aGlzLnNpemU9MH0sWW4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBBaSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLG49ZS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT1lLnNpemUsbn0sWW4ucHJvdG90eXBlLmdldD1mdW5jdGlvbiBraSh0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQodCl9LFluLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gTGkodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfSxZbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIFBpKHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXztpZihuIGluc3RhbmNlb2YgR24pe3ZhciBpPW4uX19kYXRhX187aWYoIVNufHxpLmxlbmd0aDwxOTkpcmV0dXJuIGkucHVzaChbdCxlXSksdGhpcy5zaXplPSsrbi5zaXplLHRoaXM7bj10aGlzLl9fZGF0YV9fPW5ldyBXbihpKX1yZXR1cm4gbi5zZXQodCxlKSx0aGlzLnNpemU9bi5zaXplLHRoaXN9O3ZhciBOaT1KcihGaSksSWk9SnIoVmksITApO2Z1bmN0aW9uIFJpKHQsZSl7dmFyIG49ITA7cmV0dXJuIE5pKHQsKGZ1bmN0aW9uKHQsaSxyKXtyZXR1cm4gbj0hIWUodCxpLHIpfSkpLG59ZnVuY3Rpb24gT2koZSxuLGkpe2Zvcih2YXIgcj0tMSxvPWUubGVuZ3RoOysrcjxvOyl7dmFyIGE9ZVtyXSxzPW4oYSk7aWYobnVsbCE9cyYmKGw9PT10P3M9PXMmJiFScyhzKTppKHMsbCkpKXZhciBsPXMsYz1hfXJldHVybiBjfWZ1bmN0aW9uIHppKHQsZSl7dmFyIG49W107cmV0dXJuIE5pKHQsKGZ1bmN0aW9uKHQsaSxyKXtlKHQsaSxyKSYmbi5wdXNoKHQpfSkpLG59ZnVuY3Rpb24gRGkodCxlLG4saSxyKXt2YXIgbz0tMSxhPXQubGVuZ3RoO2ZvcihufHwobj1Ebykscnx8KHI9W10pOysrbzxhOyl7dmFyIHM9dFtvXTtlPjAmJm4ocyk/ZT4xP0RpKHMsZS0xLG4saSxyKTpFZShyLHMpOml8fChyW3IubGVuZ3RoXT1zKX1yZXR1cm4gcn12YXIgQmk9UXIoKSxIaT1RcighMCk7ZnVuY3Rpb24gRmkodCxlKXtyZXR1cm4gdCYmQmkodCxlLHJsKX1mdW5jdGlvbiBWaSh0LGUpe3JldHVybiB0JiZIaSh0LGUscmwpfWZ1bmN0aW9uIFVpKHQsZSl7cmV0dXJuIHllKGUsKGZ1bmN0aW9uKGUpe3JldHVybiBicyh0W2VdKX0pKX1mdW5jdGlvbiBqaShlLG4pe2Zvcih2YXIgaT0wLHI9KG49QnIobixlKSkubGVuZ3RoO251bGwhPWUmJmk8cjspZT1lW3JhKG5baSsrXSldO3JldHVybiBpJiZpPT1yP2U6dH1mdW5jdGlvbiBHaSh0LGUsbil7dmFyIGk9ZSh0KTtyZXR1cm4gaHModCk/aTpFZShpLG4odCkpfWZ1bmN0aW9uIFdpKGUpe3JldHVybiBudWxsPT1lP2U9PT10PyJbb2JqZWN0IFVuZGVmaW5lZF0iOiJbb2JqZWN0IE51bGxdIjp2ZSYmdmUgaW4gTXQoZSk/KGZ1bmN0aW9uIG4oZSl7dmFyIG49TnQuY2FsbChlLHZlKSxpPWVbdmVdO3RyeXtlW3ZlXT10O3ZhciByPSEwfWNhdGNoKHQpe312YXIgbz1PdC5jYWxsKGUpO3JldHVybiByJiYobj9lW3ZlXT1pOmRlbGV0ZSBlW3ZlXSksb30pKGUpOihmdW5jdGlvbiBpKHQpe3JldHVybiBPdC5jYWxsKHQpfSkoZSl9ZnVuY3Rpb24gcWkodCxlKXtyZXR1cm4gdD5lfWZ1bmN0aW9uIFlpKHQsZSl7cmV0dXJuIG51bGwhPXQmJk50LmNhbGwodCxlKX1mdW5jdGlvbiBYaSh0LGUpe3JldHVybiBudWxsIT10JiZlIGluIE10KHQpfWZ1bmN0aW9uICRpKGUsbixpKXtmb3IodmFyIHI9aT9TZTpiZSxvPWVbMF0ubGVuZ3RoLGE9ZS5sZW5ndGgscz1hLGw9dnQoYSksYz0xLzAsdT1bXTtzLS07KXt2YXIgaD1lW3NdO3MmJm4mJihoPU1lKGgsVWUobikpKSxjPV9uKGgubGVuZ3RoLGMpLGxbc109IWkmJihufHxvPj0xMjAmJmgubGVuZ3RoPj0xMjApP25ldyBxbihzJiZoKTp0fWg9ZVswXTt2YXIgZD0tMSxwPWxbMF07dDpmb3IoOysrZDxvJiZ1Lmxlbmd0aDxjOyl7dmFyIGY9aFtkXSxtPW4/bihmKTpmO2lmKGY9aXx8MCE9PWY/ZjowLCEocD9HZShwLG0pOnIodSxtLGkpKSl7Zm9yKHM9YTstLXM7KXt2YXIgZz1sW3NdO2lmKCEoZz9HZShnLG0pOnIoZVtzXSxtLGkpKSljb250aW51ZSB0fXAmJnAucHVzaChtKSx1LnB1c2goZil9fXJldHVybiB1fWZ1bmN0aW9uIEtpKGUsbixpKXt2YXIgcj1udWxsPT0oZT1ZbyhlLG49QnIobixlKSkpP2U6ZVtyYShfYShuKSldO3JldHVybiBudWxsPT1yP3Q6cGUocixlLGkpfWZ1bmN0aW9uIFppKHQpe3JldHVybiBNcyh0KSYmV2kodCk9PWh9ZnVuY3Rpb24gSmkoZSxuLGkscixvKXtyZXR1cm4gZT09PW58fChudWxsPT1lfHxudWxsPT1ufHwhTXMoZSkmJiFNcyhuKT9lIT1lJiZuIT1uOihmdW5jdGlvbiBhKGUsbixpLHIsbyxzKXt2YXIgbD1ocyhlKSxjPWhzKG4pLHU9bD9kOlJvKGUpLGc9Yz9kOlJvKG4pLF89KHU9dT09aD9iOnUpPT1iLHg9KGc9Zz09aD9iOmcpPT1iLFQ9dT09ZztpZihUJiZncyhlKSl7aWYoIWdzKG4pKXJldHVybiExO2w9ITAsXz0hMX1pZihUJiYhXylyZXR1cm4gc3x8KHM9bmV3IFluKSxsfHxPcyhlKT94byhlLG4saSxyLG8scyk6KGZ1bmN0aW9uIGsodCxlLG4saSxyLG8sYSl7c3dpdGNoKG4pe2Nhc2UgQTppZih0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8dC5ieXRlT2Zmc2V0IT1lLmJ5dGVPZmZzZXQpcmV0dXJuITE7dD10LmJ1ZmZlcixlPWUuYnVmZmVyO2Nhc2UgQzpyZXR1cm4hKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHwhbyhuZXcgR3QodCksbmV3IEd0KGUpKSk7Y2FzZSBwOmNhc2UgZjpjYXNlIHY6cmV0dXJuIHNzKCt0LCtlKTtjYXNlIG06cmV0dXJuIHQubmFtZT09ZS5uYW1lJiZ0Lm1lc3NhZ2U9PWUubWVzc2FnZTtjYXNlIHc6Y2FzZSBNOnJldHVybiB0PT1lKyIiO2Nhc2UgeTp2YXIgcz1KZTtjYXNlIFM6aWYoc3x8KHM9ZW4pLHQuc2l6ZSE9ZS5zaXplJiYhKDEmaSkpcmV0dXJuITE7dmFyIGw9YS5nZXQodCk7aWYobClyZXR1cm4gbD09ZTtpfD0yLGEuc2V0KHQsZSk7dmFyIGM9eG8ocyh0KSxzKGUpLGkscixvLGEpO3JldHVybiBhLmRlbGV0ZSh0KSxjO2Nhc2UgRTppZih6bilyZXR1cm4gem4uY2FsbCh0KT09em4uY2FsbChlKX1yZXR1cm4hMX0pKGUsbix1LGkscixvLHMpO2lmKCEoMSZpKSl7dmFyIEw9XyYmTnQuY2FsbChlLCJfX3dyYXBwZWRfXyIpLFA9eCYmTnQuY2FsbChuLCJfX3dyYXBwZWRfXyIpO2lmKEx8fFApe3ZhciBOPUw/ZS52YWx1ZSgpOmUsST1QP24udmFsdWUoKTpuO3JldHVybiBzfHwocz1uZXcgWW4pLG8oTixJLGkscixzKX19cmV0dXJuISFUJiYoc3x8KHM9bmV3IFluKSwoZnVuY3Rpb24gUihlLG4saSxyLG8sYSl7dmFyIHM9MSZpLGw9U28oZSksYz1sLmxlbmd0aDtpZihjIT1TbyhuKS5sZW5ndGgmJiFzKXJldHVybiExO2Zvcih2YXIgdT1jO3UtLTspe3ZhciBoPWxbdV07aWYoIShzP2ggaW4gbjpOdC5jYWxsKG4saCkpKXJldHVybiExfXZhciBkPWEuZ2V0KGUpLHA9YS5nZXQobik7aWYoZCYmcClyZXR1cm4gZD09biYmcD09ZTt2YXIgZj0hMDthLnNldChlLG4pLGEuc2V0KG4sZSk7Zm9yKHZhciBtPXM7Kyt1PGM7KXt2YXIgZz1lW2g9bFt1XV0sXz1uW2hdO2lmKHIpdmFyIHk9cz9yKF8sZyxoLG4sZSxhKTpyKGcsXyxoLGUsbixhKTtpZighKHk9PT10P2c9PT1ffHxvKGcsXyxpLHIsYSk6eSkpe2Y9ITE7YnJlYWt9bXx8KG09ImNvbnN0cnVjdG9yIj09aCl9aWYoZiYmIW0pe3ZhciB2PWUuY29uc3RydWN0b3IsYj1uLmNvbnN0cnVjdG9yO3Y9PWJ8fCEoImNvbnN0cnVjdG9yImluIGUpfHwhKCJjb25zdHJ1Y3RvciJpbiBuKXx8ImZ1bmN0aW9uIj09dHlwZW9mIHYmJnYgaW5zdGFuY2VvZiB2JiYiZnVuY3Rpb24iPT10eXBlb2YgYiYmYiBpbnN0YW5jZW9mIGJ8fChmPSExKX1yZXR1cm4gYS5kZWxldGUoZSksYS5kZWxldGUobiksZn0pKGUsbixpLHIsbyxzKSl9KShlLG4saSxyLEppLG8pKX1mdW5jdGlvbiBRaShlLG4saSxyKXt2YXIgbz1pLmxlbmd0aCxhPW8scz0hcjtpZihudWxsPT1lKXJldHVybiFhO2ZvcihlPU10KGUpO28tLTspe3ZhciBsPWlbb107aWYocyYmbFsyXT9sWzFdIT09ZVtsWzBdXTohKGxbMF1pbiBlKSlyZXR1cm4hMX1mb3IoOysrbzxhOyl7dmFyIGM9KGw9aVtvXSlbMF0sdT1lW2NdLGg9bFsxXTtpZihzJiZsWzJdKXtpZih1PT09dCYmIShjIGluIGUpKXJldHVybiExfWVsc2V7dmFyIGQ9bmV3IFluO2lmKHIpdmFyIHA9cih1LGgsYyxlLG4sZCk7aWYoIShwPT09dD9KaShoLHUsMyxyLGQpOnApKXJldHVybiExfX1yZXR1cm4hMH1mdW5jdGlvbiB0cih0KXtyZXR1cm4hKCFTcyh0KXx8KGZ1bmN0aW9uIGUodCl7cmV0dXJuISFSdCYmUnQgaW4gdH0pKHQpKSYmKGJzKHQpP0J0Omh0KS50ZXN0KG9hKHQpKX1mdW5jdGlvbiBlcih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90Om51bGw9PXQ/TGw6Im9iamVjdCI9PXR5cGVvZiB0P2hzKHQpP2FyKHRbMF0sdFsxXSk6b3IodCk6SGwodCl9ZnVuY3Rpb24gbnIodCl7aWYoIWpvKHQpKXJldHVybiBtbih0KTt2YXIgZT1bXTtmb3IodmFyIG4gaW4gTXQodCkpTnQuY2FsbCh0LG4pJiYiY29uc3RydWN0b3IiIT1uJiZlLnB1c2gobik7cmV0dXJuIGV9ZnVuY3Rpb24gaXIodCxlKXtyZXR1cm4gdDxlfWZ1bmN0aW9uIHJyKHQsZSl7dmFyIG49LTEsaT1mcyh0KT92dCh0Lmxlbmd0aCk6W107cmV0dXJuIE5pKHQsKGZ1bmN0aW9uKHQscixvKXtpWysrbl09ZSh0LHIsbyl9KSksaX1mdW5jdGlvbiBvcih0KXt2YXIgZT1Mbyh0KTtyZXR1cm4gMT09ZS5sZW5ndGgmJmVbMF1bMl0/V28oZVswXVswXSxlWzBdWzFdKTpmdW5jdGlvbihuKXtyZXR1cm4gbj09PXR8fFFpKG4sdCxlKX19ZnVuY3Rpb24gYXIoZSxuKXtyZXR1cm4gRm8oZSkmJkdvKG4pP1dvKHJhKGUpLG4pOmZ1bmN0aW9uKGkpe3ZhciByPVFzKGksZSk7cmV0dXJuIHI9PT10JiZyPT09bj90bChpLGUpOkppKG4sciwzKX19ZnVuY3Rpb24gc3IoZSxuLGkscixvKXtlIT09biYmQmkobiwoZnVuY3Rpb24oYSxzKXtpZihvfHwobz1uZXcgWW4pLFNzKGEpKSEoZnVuY3Rpb24gbChlLG4saSxyLG8sYSxzKXt2YXIgbD0kbyhlLGkpLGM9JG8obixpKSx1PXMuZ2V0KGMpO2lmKHUpSm4oZSxpLHUpO2Vsc2V7dmFyIGg9YT9hKGwsYyxpKyIiLGUsbixzKTp0LGQ9aD09PXQ7aWYoZCl7dmFyIHA9aHMoYyksZj0hcCYmZ3MoYyksbT0hcCYmIWYmJk9zKGMpO2g9YyxwfHxmfHxtP2hzKGwpP2g9bDptcyhsKT9oPVhyKGwpOmY/KGQ9ITEsaD1VcihjLCEwKSk6bT8oZD0hMSxoPUdyKGMsITApKTpoPVtdOkFzKGMpfHx1cyhjKT8oaD1sLHVzKGwpP2g9R3MobCk6U3MobCkmJiFicyhsKXx8KGg9em8oYykpKTpkPSExfWQmJihzLnNldChjLGgpLG8oaCxjLHIsYSxzKSxzLmRlbGV0ZShjKSksSm4oZSxpLGgpfX0pKGUsbixzLGksc3IscixvKTtlbHNle3ZhciBjPXI/cigkbyhlLHMpLGEscysiIixlLG4sbyk6dDtjPT09dCYmKGM9YSksSm4oZSxzLGMpfX0pLG9sKX1mdW5jdGlvbiBscihlLG4pe3ZhciBpPWUubGVuZ3RoO2lmKGkpcmV0dXJuIEJvKG4rPW48MD9pOjAsaSk/ZVtuXTp0fWZ1bmN0aW9uIGNyKHQsZSxuKXtlPWUubGVuZ3RoP01lKGUsKGZ1bmN0aW9uKHQpe3JldHVybiBocyh0KT9mdW5jdGlvbihlKXtyZXR1cm4gamkoZSwxPT09dC5sZW5ndGg/dFswXTp0KX06dH0pKTpbTGxdO3ZhciBpPS0xO3JldHVybiBlPU1lKGUsVWUoQW8oKSkpLChmdW5jdGlvbiByKHQsZSl7dmFyIG49dC5sZW5ndGg7Zm9yKHQuc29ydChlKTtuLS07KXRbbl09dFtuXS52YWx1ZTtyZXR1cm4gdH0pKHJyKHQsKGZ1bmN0aW9uKHQsbixyKXtyZXR1cm57Y3JpdGVyaWE6TWUoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KSksaW5kZXg6KytpLHZhbHVlOnR9fSkpLChmdW5jdGlvbih0LGUpe3JldHVybihmdW5jdGlvbiBpKHQsZSxuKXtmb3IodmFyIGk9LTEscj10LmNyaXRlcmlhLG89ZS5jcml0ZXJpYSxhPXIubGVuZ3RoLHM9bi5sZW5ndGg7KytpPGE7KXt2YXIgbD1XcihyW2ldLG9baV0pO2lmKGwpcmV0dXJuIGk+PXM/bDpsKigiZGVzYyI9PW5baV0/LTE6MSl9cmV0dXJuIHQuaW5kZXgtZS5pbmRleH0pKHQsZSxuKX0pKX1mdW5jdGlvbiB1cih0LGUsbil7Zm9yKHZhciBpPS0xLHI9ZS5sZW5ndGgsbz17fTsrK2k8cjspe3ZhciBhPWVbaV0scz1qaSh0LGEpO24ocyxhKSYmeXIobyxCcihhLHQpLHMpfXJldHVybiBvfWZ1bmN0aW9uIGhyKHQsZSxuLGkpe3ZhciByPWk/SWU6TmUsbz0tMSxhPWUubGVuZ3RoLHM9dDtmb3IodD09PWUmJihlPVhyKGUpKSxuJiYocz1NZSh0LFVlKG4pKSk7KytvPGE7KWZvcih2YXIgbD0wLGM9ZVtvXSx1PW4/bihjKTpjOyhsPXIocyx1LGwsaSkpPi0xOylzIT09dCYmaWUuY2FsbChzLGwsMSksaWUuY2FsbCh0LGwsMSk7cmV0dXJuIHR9ZnVuY3Rpb24gZHIodCxlKXtmb3IodmFyIG49dD9lLmxlbmd0aDowLGk9bi0xO24tLTspe3ZhciByPWVbbl07aWYobj09aXx8ciE9PW8pe3ZhciBvPXI7Qm8ocik/aWUuY2FsbCh0LHIsMSk6THIodCxyKX19cmV0dXJuIHR9ZnVuY3Rpb24gcHIodCxlKXtyZXR1cm4gdCt1bihibigpKihlLXQrMSkpfWZ1bmN0aW9uIGZyKHQsZSl7dmFyIG49IiI7aWYoIXR8fGU8MXx8ZT5zKXJldHVybiBuO2Rve2UlMiYmKG4rPXQpLChlPXVuKGUvMikpJiYodCs9dCl9d2hpbGUoZSk7cmV0dXJuIG59ZnVuY3Rpb24gbXIodCxlKXtyZXR1cm4gSm8ocW8odCxlLExsKSx0KyIiKX1mdW5jdGlvbiBncih0KXtyZXR1cm4gJG4ocGwodCkpfWZ1bmN0aW9uIF9yKHQsZSl7dmFyIG49cGwodCk7cmV0dXJuIGVhKG4sb2koZSwwLG4ubGVuZ3RoKSl9ZnVuY3Rpb24geXIoZSxuLGkscil7aWYoIVNzKGUpKXJldHVybiBlO2Zvcih2YXIgbz0tMSxhPShuPUJyKG4sZSkpLmxlbmd0aCxzPWEtMSxsPWU7bnVsbCE9bCYmKytvPGE7KXt2YXIgYz1yYShuW29dKSx1PWk7aWYoIl9fcHJvdG9fXyI9PT1jfHwiY29uc3RydWN0b3IiPT09Y3x8InByb3RvdHlwZSI9PT1jKXJldHVybiBlO2lmKG8hPXMpe3ZhciBoPWxbY107KHU9cj9yKGgsYyxsKTp0KT09PXQmJih1PVNzKGgpP2g6Qm8obltvKzFdKT9bXTp7fSl9UW4obCxjLHUpLGw9bFtjXX1yZXR1cm4gZX12YXIgdnI9QW4/ZnVuY3Rpb24odCxlKXtyZXR1cm4gQW4uc2V0KHQsZSksdH06TGwsYnI9eGU/ZnVuY3Rpb24odCxlKXtyZXR1cm4geGUodCwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpDbChlKSx3cml0YWJsZTohMH0pfTpMbDtmdW5jdGlvbiB4cih0KXtyZXR1cm4gZWEocGwodCkpfWZ1bmN0aW9uIHdyKHQsZSxuKXt2YXIgaT0tMSxyPXQubGVuZ3RoO2U8MCYmKGU9LWU+cj8wOnIrZSksKG49bj5yP3I6bik8MCYmKG4rPXIpLHI9ZT5uPzA6bi1lPj4+MCxlPj4+PTA7Zm9yKHZhciBvPXZ0KHIpOysraTxyOylvW2ldPXRbaStlXTtyZXR1cm4gb31mdW5jdGlvbiBTcih0LGUpe3ZhciBuO3JldHVybiBOaSh0LChmdW5jdGlvbih0LGkscil7cmV0dXJuIShuPWUodCxpLHIpKX0pKSwhIW59ZnVuY3Rpb24gTXIodCxlLG4pe3ZhciBpPTAscj1udWxsPT10P2k6dC5sZW5ndGg7aWYoIm51bWJlciI9PXR5cGVvZiBlJiZlPT1lJiZyPD0yMTQ3NDgzNjQ3KXtmb3IoO2k8cjspe3ZhciBvPWkrcj4+PjEsYT10W29dO251bGwhPT1hJiYhUnMoYSkmJihuP2E8PWU6YTxlKT9pPW8rMTpyPW99cmV0dXJuIHJ9cmV0dXJuIEVyKHQsZSxMbCxuKX1mdW5jdGlvbiBFcihlLG4saSxyKXt2YXIgbz0wLGE9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKDA9PT1hKXJldHVybiAwO2Zvcih2YXIgcz0obj1pKG4pKSE9bixsPW51bGw9PT1uLGM9UnMobiksdT1uPT09dDtvPGE7KXt2YXIgaD11bigobythKS8yKSxkPWkoZVtoXSkscD1kIT09dCxmPW51bGw9PT1kLG09ZD09ZCxnPVJzKGQpO2lmKHMpdmFyIF89cnx8bTtlbHNlIF89dT9tJiYocnx8cCk6bD9tJiZwJiYocnx8IWYpOmM/bSYmcCYmIWYmJihyfHwhZyk6IWYmJiFnJiYocj9kPD1uOmQ8bik7Xz9vPWgrMTphPWh9cmV0dXJuIF9uKGEsNDI5NDk2NzI5NCl9ZnVuY3Rpb24gVHIodCxlKXtmb3IodmFyIG49LTEsaT10Lmxlbmd0aCxyPTAsbz1bXTsrK248aTspe3ZhciBhPXRbbl0scz1lP2UoYSk6YTtpZighbnx8IXNzKHMsbCkpe3ZhciBsPXM7b1tyKytdPTA9PT1hPzA6YX19cmV0dXJuIG99ZnVuY3Rpb24gQ3IodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P3Q6UnModCk/bDordH1mdW5jdGlvbiBBcih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYoaHModCkpcmV0dXJuIE1lKHQsQXIpKyIiO2lmKFJzKHQpKXJldHVybiBEbj9Ebi5jYWxsKHQpOiIiO3ZhciBlPXQrIiI7cmV0dXJuIjAiPT1lJiYxL3Q9PS0xLzA/Ii0wIjplfWZ1bmN0aW9uIGtyKHQsZSxuKXt2YXIgaT0tMSxyPWJlLG89dC5sZW5ndGgsYT0hMCxzPVtdLGw9cztpZihuKWE9ITEscj1TZTtlbHNlIGlmKG8+PTIwMCl7dmFyIGM9ZT9udWxsOm1vKHQpO2lmKGMpcmV0dXJuIGVuKGMpO2E9ITEscj1HZSxsPW5ldyBxbn1lbHNlIGw9ZT9bXTpzO3Q6Zm9yKDsrK2k8bzspe3ZhciB1PXRbaV0saD1lP2UodSk6dTtpZih1PW58fDAhPT11P3U6MCxhJiZoPT1oKXtmb3IodmFyIGQ9bC5sZW5ndGg7ZC0tOylpZihsW2RdPT09aCljb250aW51ZSB0O2UmJmwucHVzaChoKSxzLnB1c2godSl9ZWxzZSByKGwsaCxuKXx8KGwhPT1zJiZsLnB1c2goaCkscy5wdXNoKHUpKX1yZXR1cm4gc31mdW5jdGlvbiBMcih0LGUpe3JldHVybiBudWxsPT0odD1Zbyh0LGU9QnIoZSx0KSkpfHxkZWxldGUgdFtyYShfYShlKSldfWZ1bmN0aW9uIFByKHQsZSxuLGkpe3JldHVybiB5cih0LGUsbihqaSh0LGUpKSxpKX1mdW5jdGlvbiBOcih0LGUsbixpKXtmb3IodmFyIHI9dC5sZW5ndGgsbz1pP3I6LTE7KGk/by0tOisrbzxyKSYmZSh0W29dLG8sdCk7KTtyZXR1cm4gbj93cih0LGk/MDpvLGk/bysxOnIpOndyKHQsaT9vKzE6MCxpP3I6byl9ZnVuY3Rpb24gSXIodCxlKXt2YXIgbj10O3JldHVybiBuIGluc3RhbmNlb2YgVW4mJihuPW4udmFsdWUoKSksVGUoZSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5mdW5jLmFwcGx5KGUudGhpc0FyZyxFZShbdF0sZS5hcmdzKSl9KSxuKX1mdW5jdGlvbiBScih0LGUsbil7dmFyIGk9dC5sZW5ndGg7aWYoaTwyKXJldHVybiBpP2tyKHRbMF0pOltdO2Zvcih2YXIgcj0tMSxvPXZ0KGkpOysrcjxpOylmb3IodmFyIGE9dFtyXSxzPS0xOysrczxpOylzIT1yJiYob1tyXT1jaShvW3JdfHxhLHRbc10sZSxuKSk7cmV0dXJuIGtyKERpKG8sMSksZSxuKX1mdW5jdGlvbiBPcihlLG4saSl7Zm9yKHZhciByPS0xLG89ZS5sZW5ndGgsYT1uLmxlbmd0aCxzPXt9OysrcjxvOylpKHMsZVtyXSxyPGE/bltyXTp0KTtyZXR1cm4gc31mdW5jdGlvbiB6cih0KXtyZXR1cm4gbXModCk/dDpbXX1mdW5jdGlvbiBEcih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OkxsfWZ1bmN0aW9uIEJyKHQsZSl7cmV0dXJuIGhzKHQpP3Q6Rm8odCxlKT9bdF06bmEoV3ModCkpfXZhciBIcj1tcjtmdW5jdGlvbiBGcihlLG4saSl7dmFyIHI9ZS5sZW5ndGg7cmV0dXJuIGk9aT09PXQ/cjppLCFuJiZpPj1yP2U6d3IoZSxuLGkpfXZhciBWcj13ZXx8ZnVuY3Rpb24odCl7cmV0dXJuIGVlLmNsZWFyVGltZW91dCh0KX07ZnVuY3Rpb24gVXIodCxlKXtpZihlKXJldHVybiB0LnNsaWNlKCk7dmFyIG49dC5sZW5ndGgsaT1LdD9LdChuKTpuZXcgdC5jb25zdHJ1Y3RvcihuKTtyZXR1cm4gdC5jb3B5KGkpLGl9ZnVuY3Rpb24ganIodCl7dmFyIGU9bmV3IHQuY29uc3RydWN0b3IodC5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IEd0KGUpLnNldChuZXcgR3QodCkpLGV9ZnVuY3Rpb24gR3IodCxlKXt2YXIgbj1lP2pyKHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3Iobix0LmJ5dGVPZmZzZXQsdC5sZW5ndGgpfWZ1bmN0aW9uIFdyKGUsbil7aWYoZSE9PW4pe3ZhciBpPWUhPT10LHI9bnVsbD09PWUsbz1lPT1lLGE9UnMoZSkscz1uIT09dCxsPW51bGw9PT1uLGM9bj09bix1PVJzKG4pO2lmKCFsJiYhdSYmIWEmJmU+bnx8YSYmcyYmYyYmIWwmJiF1fHxyJiZzJiZjfHwhaSYmY3x8IW8pcmV0dXJuIDE7aWYoIXImJiFhJiYhdSYmZTxufHx1JiZpJiZvJiYhciYmIWF8fGwmJmkmJm98fCFzJiZvfHwhYylyZXR1cm4tMX1yZXR1cm4gMH1mdW5jdGlvbiBxcih0LGUsbixpKXtmb3IodmFyIHI9LTEsbz10Lmxlbmd0aCxhPW4ubGVuZ3RoLHM9LTEsbD1lLmxlbmd0aCxjPWduKG8tYSwwKSx1PXZ0KGwrYyksaD0haTsrK3M8bDspdVtzXT1lW3NdO2Zvcig7KytyPGE7KShofHxyPG8pJiYodVtuW3JdXT10W3JdKTtmb3IoO2MtLTspdVtzKytdPXRbcisrXTtyZXR1cm4gdX1mdW5jdGlvbiBZcih0LGUsbixpKXtmb3IodmFyIHI9LTEsbz10Lmxlbmd0aCxhPS0xLHM9bi5sZW5ndGgsbD0tMSxjPWUubGVuZ3RoLHU9Z24oby1zLDApLGg9dnQodStjKSxkPSFpOysrcjx1OyloW3JdPXRbcl07Zm9yKHZhciBwPXI7KytsPGM7KWhbcCtsXT1lW2xdO2Zvcig7KythPHM7KShkfHxyPG8pJiYoaFtwK25bYV1dPXRbcisrXSk7cmV0dXJuIGh9ZnVuY3Rpb24gWHIodCxlKXt2YXIgbj0tMSxpPXQubGVuZ3RoO2ZvcihlfHwoZT12dChpKSk7KytuPGk7KWVbbl09dFtuXTtyZXR1cm4gZX1mdW5jdGlvbiAkcihlLG4saSxyKXt2YXIgbz0haTtpfHwoaT17fSk7Zm9yKHZhciBhPS0xLHM9bi5sZW5ndGg7KythPHM7KXt2YXIgbD1uW2FdLGM9cj9yKGlbbF0sZVtsXSxsLGksZSk6dDtjPT09dCYmKGM9ZVtsXSksbz9paShpLGwsYyk6UW4oaSxsLGMpfXJldHVybiBpfWZ1bmN0aW9uIEtyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7dmFyIHI9aHMobik/ZmU6ZWksbz1lP2UoKTp7fTtyZXR1cm4gcihuLHQsQW8oaSwyKSxvKX19ZnVuY3Rpb24gWnIoZSl7cmV0dXJuIG1yKChmdW5jdGlvbihuLGkpe3ZhciByPS0xLG89aS5sZW5ndGgsYT1vPjE/aVtvLTFdOnQscz1vPjI/aVsyXTp0O2ZvcihhPWUubGVuZ3RoPjMmJiJmdW5jdGlvbiI9PXR5cGVvZiBhPyhvLS0sYSk6dCxzJiZIbyhpWzBdLGlbMV0scykmJihhPW88Mz90OmEsbz0xKSxuPU10KG4pOysrcjxvOyl7dmFyIGw9aVtyXTtsJiZlKG4sbCxyLGEpfXJldHVybiBufSkpfWZ1bmN0aW9uIEpyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7aWYobnVsbD09bilyZXR1cm4gbjtpZighZnMobikpcmV0dXJuIHQobixpKTtmb3IodmFyIHI9bi5sZW5ndGgsbz1lP3I6LTEsYT1NdChuKTsoZT9vLS06KytvPHIpJiYhMSE9PWkoYVtvXSxvLGEpOyk7cmV0dXJuIG59fWZ1bmN0aW9uIFFyKHQpe3JldHVybiBmdW5jdGlvbihlLG4saSl7Zm9yKHZhciByPS0xLG89TXQoZSksYT1pKGUpLHM9YS5sZW5ndGg7cy0tOyl7dmFyIGw9YVt0P3M6KytyXTtpZighMT09PW4ob1tsXSxsLG8pKWJyZWFrfXJldHVybiBlfX1mdW5jdGlvbiB0byhlKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9WmUobj1XcyhuKSk/b24obik6dCxyPWk/aVswXTpuLmNoYXJBdCgwKSxvPWk/RnIoaSwxKS5qb2luKCIiKTpuLnNsaWNlKDEpO3JldHVybiByW2VdKCkrb319ZnVuY3Rpb24gZW8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBUZShNbChnbChlKS5yZXBsYWNlKEZ0LCIiKSksdCwiIil9fWZ1bmN0aW9uIG5vKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHQ7Y2FzZSAxOnJldHVybiBuZXcgdChlWzBdKTtjYXNlIDI6cmV0dXJuIG5ldyB0KGVbMF0sZVsxXSk7Y2FzZSAzOnJldHVybiBuZXcgdChlWzBdLGVbMV0sZVsyXSk7Y2FzZSA0OnJldHVybiBuZXcgdChlWzBdLGVbMV0sZVsyXSxlWzNdKTtjYXNlIDU6cmV0dXJuIG5ldyB0KGVbMF0sZVsxXSxlWzJdLGVbM10sZVs0XSk7Y2FzZSA2OnJldHVybiBuZXcgdChlWzBdLGVbMV0sZVsyXSxlWzNdLGVbNF0sZVs1XSk7Y2FzZSA3OnJldHVybiBuZXcgdChlWzBdLGVbMV0sZVsyXSxlWzNdLGVbNF0sZVs1XSxlWzZdKX12YXIgbj1Ibih0LnByb3RvdHlwZSksaT10LmFwcGx5KG4sZSk7cmV0dXJuIFNzKGkpP2k6bn19ZnVuY3Rpb24gaW8oZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSxyKXt2YXIgbz1NdChuKTtpZighZnMobikpe3ZhciBhPUFvKGksMyk7bj1ybChuKSxpPWZ1bmN0aW9uKHQpe3JldHVybiBhKG9bdF0sdCxvKX19dmFyIHM9ZShuLGkscik7cmV0dXJuIHM+LTE/b1thP25bc106c106dH19ZnVuY3Rpb24gcm8obil7cmV0dXJuIHdvKChmdW5jdGlvbihpKXt2YXIgcj1pLmxlbmd0aCxvPXIsYT1Wbi5wcm90b3R5cGUudGhydTtmb3IobiYmaS5yZXZlcnNlKCk7by0tOyl7dmFyIHM9aVtvXTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygcyl0aHJvdyBuZXcgQ3QoZSk7aWYoYSYmIWwmJiJ3cmFwcGVyIj09VG8ocykpdmFyIGw9bmV3IFZuKFtdLCEwKX1mb3Iobz1sP286cjsrK288cjspe3ZhciBjPVRvKHM9aVtvXSksdT0id3JhcHBlciI9PWM/RW8ocyk6dDtsPXUmJlZvKHVbMF0pJiY0MjQ9PXVbMV0mJiF1WzRdLmxlbmd0aCYmMT09dVs5XT9sW1RvKHVbMF0pXS5hcHBseShsLHVbM10pOjE9PXMubGVuZ3RoJiZWbyhzKT9sW2NdKCk6bC50aHJ1KHMpfXJldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cyxlPXRbMF07aWYobCYmMT09dC5sZW5ndGgmJmhzKGUpKXJldHVybiBsLnBsYW50KGUpLnZhbHVlKCk7Zm9yKHZhciBuPTAsbz1yP2lbbl0uYXBwbHkodGhpcyx0KTplOysrbjxyOylvPWlbbl0uY2FsbCh0aGlzLG8pO3JldHVybiBvfX0pKX1mdW5jdGlvbiBvbyhlLG4saSxyLGEscyxsLGMsdSxoKXt2YXIgZD1uJm8scD0xJm4sZj0yJm4sbT0yNCZuLGc9NTEyJm4sXz1mP3Q6bm8oZSk7cmV0dXJuIGZ1bmN0aW9uIHQoKXtmb3IodmFyIG89YXJndW1lbnRzLmxlbmd0aCx5PXZ0KG8pLHY9bzt2LS07KXlbdl09YXJndW1lbnRzW3ZdO2lmKG0pdmFyIGI9Q28odCkseD1ZZSh5LGIpO2lmKHImJih5PXFyKHkscixhLG0pKSxzJiYoeT1Zcih5LHMsbCxtKSksby09eCxtJiZvPGgpe3ZhciB3PXRuKHksYik7cmV0dXJuIHBvKGUsbixvbyx0LnBsYWNlaG9sZGVyLGkseSx3LGMsdSxoLW8pfXZhciBTPXA/aTp0aGlzLE09Zj9TW2VdOmU7cmV0dXJuIG89eS5sZW5ndGgsYz95PVhvKHksYyk6ZyYmbz4xJiZ5LnJldmVyc2UoKSxkJiZ1PG8mJih5Lmxlbmd0aD11KSx0aGlzJiZ0aGlzIT09ZWUmJnRoaXMgaW5zdGFuY2VvZiB0JiYoTT1ffHxubyhNKSksTS5hcHBseShTLHkpfX1mdW5jdGlvbiBhbyh0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe3JldHVybihmdW5jdGlvbiByKHQsZSxuLGkpe3JldHVybiBGaSh0LChmdW5jdGlvbih0LHIsbyl7ZShpLG4odCkscixvKX0pKSxpfSkobix0LGUoaSkse30pfX1mdW5jdGlvbiBzbyhlLG4pe3JldHVybiBmdW5jdGlvbihpLHIpe3ZhciBvO2lmKGk9PT10JiZyPT09dClyZXR1cm4gbjtpZihpIT09dCYmKG89aSksciE9PXQpe2lmKG89PT10KXJldHVybiByOyJzdHJpbmciPT10eXBlb2YgaXx8InN0cmluZyI9PXR5cGVvZiByPyhpPUFyKGkpLHI9QXIocikpOihpPUNyKGkpLHI9Q3IocikpLG89ZShpLHIpfXJldHVybiBvfX1mdW5jdGlvbiBsbyh0KXtyZXR1cm4gd28oKGZ1bmN0aW9uKGUpe3JldHVybiBlPU1lKGUsVWUoQW8oKSkpLG1yKChmdW5jdGlvbihuKXt2YXIgaT10aGlzO3JldHVybiB0KGUsKGZ1bmN0aW9uKHQpe3JldHVybiBwZSh0LGksbil9KSl9KSl9KSl9ZnVuY3Rpb24gY28oZSxuKXt2YXIgaT0obj1uPT09dD8iICI6QXIobikpLmxlbmd0aDtpZihpPDIpcmV0dXJuIGk/ZnIobixlKTpuO3ZhciByPWZyKG4sY24oZS9ybihuKSkpO3JldHVybiBaZShuKT9GcihvbihyKSwwLGUpLmpvaW4oIiIpOnIuc2xpY2UoMCxlKX1mdW5jdGlvbiB1byhlKXtyZXR1cm4gZnVuY3Rpb24obixpLHIpe3JldHVybiByJiYibnVtYmVyIiE9dHlwZW9mIHImJkhvKG4saSxyKSYmKGk9cj10KSxuPUZzKG4pLGk9PT10PyhpPW4sbj0wKTppPUZzKGkpLChmdW5jdGlvbiBvKHQsZSxuLGkpe2Zvcih2YXIgcj0tMSxvPWduKGNuKChlLXQpLyhufHwxKSksMCksYT12dChvKTtvLS07KWFbaT9vOisrcl09dCx0Kz1uO3JldHVybiBhfSkobixpLHI9cj09PXQ/bjxpPzE6LTE6RnMociksZSl9fWZ1bmN0aW9uIGhvKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmInN0cmluZyI9PXR5cGVvZiBufHwoZT1qcyhlKSxuPWpzKG4pKSx0KGUsbil9fWZ1bmN0aW9uIHBvKGUsbixpLG8sYSxzLGwsYyx1LGgpe3ZhciBkPTgmbjtufD1kP3I6NjQsNCYobiY9fihkPzY0OnIpKXx8KG4mPS00KTt2YXIgcD1bZSxuLGEsZD9zOnQsZD9sOnQsZD90OnMsZD90OmwsYyx1LGhdLGY9aS5hcHBseSh0LHApO3JldHVybiBWbyhlKSYmS28oZixwKSxmLnBsYWNlaG9sZGVyPW8sUW8oZixlLG4pfWZ1bmN0aW9uIGZvKHQpe3ZhciBlPVN0W3RdO3JldHVybiBmdW5jdGlvbih0LG4pe2lmKHQ9anModCksKG49bnVsbD09bj8wOl9uKFZzKG4pLDI5MikpJiZwbih0KSl7dmFyIGk9KFdzKHQpKyJlIikuc3BsaXQoImUiKTtyZXR1cm4rKChpPShXcyhlKGlbMF0rImUiKygraVsxXStuKSkpKyJlIikuc3BsaXQoImUiKSlbMF0rImUiKygraVsxXS1uKSl9cmV0dXJuIGUodCl9fXZhciBtbz1FbiYmMS9lbihuZXcgRW4oWywtMF0pKVsxXT09YT9mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEVuKHQpfTpPbDtmdW5jdGlvbiBnbyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49Um8oZSk7cmV0dXJuIG49PXk/SmUoZSk6bj09Uz9ubihlKTooZnVuY3Rpb24gaSh0LGUpe3JldHVybiBNZShlLChmdW5jdGlvbihlKXtyZXR1cm5bZSx0W2VdXX0pKX0pKGUsdChlKSl9fWZ1bmN0aW9uIF9vKG4sYSxzLGwsYyx1LGgsZCl7dmFyIHA9MiZhO2lmKCFwJiYiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgQ3QoZSk7dmFyIGY9bD9sLmxlbmd0aDowO2lmKGZ8fChhJj0tOTcsbD1jPXQpLGg9aD09PXQ/aDpnbihWcyhoKSwwKSxkPWQ9PT10P2Q6VnMoZCksZi09Yz9jLmxlbmd0aDowLDY0JmEpe3ZhciBtPWwsZz1jO2w9Yz10fXZhciBfPXA/dDpFbyhuKSx5PVtuLGEscyxsLGMsbSxnLHUsaCxkXTtpZihfJiYoZnVuY3Rpb24gdih0LGUpe3ZhciBuPXRbMV0scj1lWzFdLGE9bnxyO2lmKCEoYTwxMzF8fHI9PW8mJjg9PW58fHI9PW8mJjI1Nj09biYmdFs3XS5sZW5ndGg8PWVbOF18fDM4ND09ciYmZVs3XS5sZW5ndGg8PWVbOF0mJjg9PW4pKXJldHVybiB0OzEmciYmKHRbMl09ZVsyXSxhfD0xJm4/MDo0KTt2YXIgcz1lWzNdO2lmKHMpe3ZhciBsPXRbM107dFszXT1sP3FyKGwscyxlWzRdKTpzLHRbNF09bD90bih0WzNdLGkpOmVbNF19KHM9ZVs1XSkmJih0WzVdPShsPXRbNV0pP1lyKGwscyxlWzZdKTpzLHRbNl09bD90bih0WzVdLGkpOmVbNl0pLChzPWVbN10pJiYodFs3XT1zKSxyJm8mJih0WzhdPW51bGw9PXRbOF0/ZVs4XTpfbih0WzhdLGVbOF0pKSxudWxsPT10WzldJiYodFs5XT1lWzldKSx0WzBdPWVbMF0sdFsxXT1hfSkoeSxfKSxuPXlbMF0sYT15WzFdLHM9eVsyXSxsPXlbM10sYz15WzRdLCEoZD15WzldPXlbOV09PT10P3A/MDpuLmxlbmd0aDpnbih5WzldLWYsMCkpJiYyNCZhJiYoYSY9LTI1KSxhJiYxIT1hKXc9OD09YXx8MTY9PWE/KGZ1bmN0aW9uIGIoZSxuLGkpe3ZhciByPW5vKGUpO3JldHVybiBmdW5jdGlvbiBvKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgscz12dChhKSxsPWEsYz1DbyhvKTtsLS07KXNbbF09YXJndW1lbnRzW2xdO3ZhciB1PWE8MyYmc1swXSE9PWMmJnNbYS0xXSE9PWM/W106dG4ocyxjKTtyZXR1cm4oYS09dS5sZW5ndGgpPGk/cG8oZSxuLG9vLG8ucGxhY2Vob2xkZXIsdCxzLHUsdCx0LGktYSk6cGUodGhpcyYmdGhpcyE9PWVlJiZ0aGlzIGluc3RhbmNlb2Ygbz9yOmUsdGhpcyxzKX19KShuLGEsZCk6YSE9ciYmMzMhPWF8fGMubGVuZ3RoP29vLmFwcGx5KHQseSk6KGZ1bmN0aW9uIHgodCxlLG4saSl7dmFyIHI9MSZlLG89bm8odCk7cmV0dXJuIGZ1bmN0aW9uIGUoKXtmb3IodmFyIGE9LTEscz1hcmd1bWVudHMubGVuZ3RoLGw9LTEsYz1pLmxlbmd0aCx1PXZ0KGMrcyksaD10aGlzJiZ0aGlzIT09ZWUmJnRoaXMgaW5zdGFuY2VvZiBlP286dDsrK2w8YzspdVtsXT1pW2xdO2Zvcig7cy0tOyl1W2wrK109YXJndW1lbnRzWysrYV07cmV0dXJuIHBlKGgscj9uOnRoaXMsdSl9fSkobixhLHMsbCk7ZWxzZSB2YXIgdz0oZnVuY3Rpb24gUyh0LGUsbil7dmFyIGk9MSZlLHI9bm8odCk7cmV0dXJuIGZ1bmN0aW9uIGUoKXtyZXR1cm4odGhpcyYmdGhpcyE9PWVlJiZ0aGlzIGluc3RhbmNlb2YgZT9yOnQpLmFwcGx5KGk/bjp0aGlzLGFyZ3VtZW50cyl9fSkobixhLHMpO3JldHVybiBRbygoXz92cjpLbykodyx5KSxuLGEpfWZ1bmN0aW9uIHlvKGUsbixpLHIpe3JldHVybiBlPT09dHx8c3MoZSxrdFtpXSkmJiFOdC5jYWxsKHIsaSk/bjplfWZ1bmN0aW9uIHZvKGUsbixpLHIsbyxhKXtyZXR1cm4gU3MoZSkmJlNzKG4pJiYoYS5zZXQobixlKSxzcihlLG4sdCx2byxhKSxhLmRlbGV0ZShuKSksZX1mdW5jdGlvbiBibyhlKXtyZXR1cm4gQXMoZSk/dDplfWZ1bmN0aW9uIHhvKGUsbixpLHIsbyxhKXt2YXIgcz0xJmksbD1lLmxlbmd0aCxjPW4ubGVuZ3RoO2lmKGwhPWMmJiEocyYmYz5sKSlyZXR1cm4hMTt2YXIgdT1hLmdldChlKSxoPWEuZ2V0KG4pO2lmKHUmJmgpcmV0dXJuIHU9PW4mJmg9PWU7dmFyIGQ9LTEscD0hMCxmPTImaT9uZXcgcW46dDtmb3IoYS5zZXQoZSxuKSxhLnNldChuLGUpOysrZDxsOyl7dmFyIG09ZVtkXSxnPW5bZF07aWYocil2YXIgXz1zP3IoZyxtLGQsbixlLGEpOnIobSxnLGQsZSxuLGEpO2lmKF8hPT10KXtpZihfKWNvbnRpbnVlO3A9ITE7YnJlYWt9aWYoZil7aWYoIUFlKG4sKGZ1bmN0aW9uKHQsZSl7aWYoIUdlKGYsZSkmJihtPT09dHx8byhtLHQsaSxyLGEpKSlyZXR1cm4gZi5wdXNoKGUpfSkpKXtwPSExO2JyZWFrfX1lbHNlIGlmKG0hPT1nJiYhbyhtLGcsaSxyLGEpKXtwPSExO2JyZWFrfX1yZXR1cm4gYS5kZWxldGUoZSksYS5kZWxldGUobikscH1mdW5jdGlvbiB3byhlKXtyZXR1cm4gSm8ocW8oZSx0LGRhKSxlKyIiKX1mdW5jdGlvbiBTbyh0KXtyZXR1cm4gR2kodCxybCxObyl9ZnVuY3Rpb24gTW8odCl7cmV0dXJuIEdpKHQsb2wsSW8pfXZhciBFbz1Bbj9mdW5jdGlvbih0KXtyZXR1cm4gQW4uZ2V0KHQpfTpPbDtmdW5jdGlvbiBUbyh0KXtmb3IodmFyIGU9dC5uYW1lKyIiLG49a25bZV0saT1OdC5jYWxsKGtuLGUpP24ubGVuZ3RoOjA7aS0tOyl7dmFyIHI9bltpXSxvPXIuZnVuYztpZihudWxsPT1vfHxvPT10KXJldHVybiByLm5hbWV9cmV0dXJuIGV9ZnVuY3Rpb24gQ28odCl7cmV0dXJuKE50LmNhbGwoQm4sInBsYWNlaG9sZGVyIik/Qm46dCkucGxhY2Vob2xkZXJ9ZnVuY3Rpb24gQW8oKXt2YXIgdD1Cbi5pdGVyYXRlZXx8UGw7cmV0dXJuIHQ9dD09PVBsP2VyOnQsYXJndW1lbnRzLmxlbmd0aD90KGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOnR9ZnVuY3Rpb24ga28odCxlKXt2YXIgbj10Ll9fZGF0YV9fO3JldHVybihmdW5jdGlvbiBpKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiJzdHJpbmciPT1lfHwibnVtYmVyIj09ZXx8InN5bWJvbCI9PWV8fCJib29sZWFuIj09ZT8iX19wcm90b19fIiE9PXQ6bnVsbD09PXR9KShlKT9uWyJzdHJpbmciPT10eXBlb2YgZT8ic3RyaW5nIjoiaGFzaCJdOm4ubWFwfWZ1bmN0aW9uIExvKHQpe2Zvcih2YXIgZT1ybCh0KSxuPWUubGVuZ3RoO24tLTspe3ZhciBpPWVbbl0scj10W2ldO2Vbbl09W2kscixHbyhyKV19cmV0dXJuIGV9ZnVuY3Rpb24gUG8oZSxuKXt2YXIgaT0oZnVuY3Rpb24gcihlLG4pe3JldHVybiBudWxsPT1lP3Q6ZVtuXX0pKGUsbik7cmV0dXJuIHRyKGkpP2k6dH12YXIgTm89aG4/ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/W106KHQ9TXQodCkseWUoaG4odCksKGZ1bmN0aW9uKGUpe3JldHVybiBuZS5jYWxsKHQsZSl9KSkpfTpVbCxJbz1obj9mdW5jdGlvbih0KXtmb3IodmFyIGU9W107dDspRWUoZSxObyh0KSksdD1RdCh0KTtyZXR1cm4gZX06VWwsUm89V2k7ZnVuY3Rpb24gT28odCxlLG4pe2Zvcih2YXIgaT0tMSxyPShlPUJyKGUsdCkpLmxlbmd0aCxvPSExOysraTxyOyl7dmFyIGE9cmEoZVtpXSk7aWYoIShvPW51bGwhPXQmJm4odCxhKSkpYnJlYWs7dD10W2FdfXJldHVybiBvfHwrK2khPXI/bzohIShyPW51bGw9PXQ/MDp0Lmxlbmd0aCkmJndzKHIpJiZCbyhhLHIpJiYoaHModCl8fHVzKHQpKX1mdW5jdGlvbiB6byh0KXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdC5jb25zdHJ1Y3Rvcnx8am8odCk/e306SG4oUXQodCkpfWZ1bmN0aW9uIERvKHQpe3JldHVybiBocyh0KXx8dXModCl8fCEhKG9lJiZ0JiZ0W29lXSl9ZnVuY3Rpb24gQm8odCxlKXt2YXIgbj10eXBlb2YgdDtyZXR1cm4hIShlPW51bGw9PWU/czplKSYmKCJudW1iZXIiPT1ufHwic3ltYm9sIiE9biYmcHQudGVzdCh0KSkmJnQ+LTEmJnQlMT09MCYmdDxlfWZ1bmN0aW9uIEhvKHQsZSxuKXtpZighU3MobikpcmV0dXJuITE7dmFyIGk9dHlwZW9mIGU7cmV0dXJuISEoIm51bWJlciI9PWk/ZnMobikmJkJvKGUsbi5sZW5ndGgpOiJzdHJpbmciPT1pJiZlIGluIG4pJiZzcyhuW2VdLHQpfWZ1bmN0aW9uIEZvKHQsZSl7aWYoaHModCkpcmV0dXJuITE7dmFyIG49dHlwZW9mIHQ7cmV0dXJuISgibnVtYmVyIiE9biYmInN5bWJvbCIhPW4mJiJib29sZWFuIiE9biYmbnVsbCE9dCYmIVJzKHQpKXx8JC50ZXN0KHQpfHwhWC50ZXN0KHQpfHxudWxsIT1lJiZ0IGluIE10KGUpfWZ1bmN0aW9uIFZvKHQpe3ZhciBlPVRvKHQpLG49Qm5bZV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG58fCEoZSBpbiBVbi5wcm90b3R5cGUpKXJldHVybiExO2lmKHQ9PT1uKXJldHVybiEwO3ZhciBpPUVvKG4pO3JldHVybiEhaSYmdD09PWlbMF19KHduJiZSbyhuZXcgd24obmV3IEFycmF5QnVmZmVyKDEpKSkhPUF8fFNuJiZSbyhuZXcgU24pIT15fHxNbiYmUm8oTW4ucmVzb2x2ZSgpKSE9eHx8RW4mJlJvKG5ldyBFbikhPVN8fFRuJiZSbyhuZXcgVG4pIT1UKSYmKFJvPWZ1bmN0aW9uKGUpe3ZhciBuPVdpKGUpLGk9bj09Yj9lLmNvbnN0cnVjdG9yOnQscj1pP29hKGkpOiIiO2lmKHIpc3dpdGNoKHIpe2Nhc2UgTG46cmV0dXJuIEE7Y2FzZSBQbjpyZXR1cm4geTtjYXNlIE5uOnJldHVybiB4O2Nhc2UgSW46cmV0dXJuIFM7Y2FzZSBSbjpyZXR1cm4gVH1yZXR1cm4gbn0pO3ZhciBVbz1MdD9iczpqbDtmdW5jdGlvbiBqbyh0KXt2YXIgZT10JiZ0LmNvbnN0cnVjdG9yO3JldHVybiB0PT09KCJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLnByb3RvdHlwZXx8a3QpfWZ1bmN0aW9uIEdvKHQpe3JldHVybiB0PT10JiYhU3ModCl9ZnVuY3Rpb24gV28oZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIG51bGwhPWkmJmlbZV09PT1uJiYobiE9PXR8fGUgaW4gTXQoaSkpfX1mdW5jdGlvbiBxbyhlLG4saSl7cmV0dXJuIG49Z24obj09PXQ/ZS5sZW5ndGgtMTpuLDApLGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cyxyPS0xLG89Z24odC5sZW5ndGgtbiwwKSxhPXZ0KG8pOysrcjxvOylhW3JdPXRbbityXTtyPS0xO2Zvcih2YXIgcz12dChuKzEpOysrcjxuOylzW3JdPXRbcl07cmV0dXJuIHNbbl09aShhKSxwZShlLHRoaXMscyl9fWZ1bmN0aW9uIFlvKHQsZSl7cmV0dXJuIGUubGVuZ3RoPDI/dDpqaSh0LHdyKGUsMCwtMSkpfWZ1bmN0aW9uIFhvKGUsbil7Zm9yKHZhciBpPWUubGVuZ3RoLHI9X24obi5sZW5ndGgsaSksbz1YcihlKTtyLS07KXt2YXIgYT1uW3JdO2Vbcl09Qm8oYSxpKT9vW2FdOnR9cmV0dXJuIGV9ZnVuY3Rpb24gJG8odCxlKXtpZigoImNvbnN0cnVjdG9yIiE9PWV8fCJmdW5jdGlvbiIhPXR5cGVvZiB0W2VdKSYmIl9fcHJvdG9fXyIhPWUpcmV0dXJuIHRbZV19dmFyIEtvPXRhKHZyKSxabz1EZXx8ZnVuY3Rpb24odCxlKXtyZXR1cm4gZWUuc2V0VGltZW91dCh0LGUpfSxKbz10YShicik7ZnVuY3Rpb24gUW8odCxlLG4pe3ZhciBpPWUrIiI7cmV0dXJuIEpvKHQsKGZ1bmN0aW9uIGEodCxlKXt2YXIgbj1lLmxlbmd0aDtpZighbilyZXR1cm4gdDt2YXIgaT1uLTE7cmV0dXJuIGVbaV09KG4+MT8iJiAiOiIiKStlW2ldLGU9ZS5qb2luKG4+Mj8iLCAiOiIgIiksdC5yZXBsYWNlKGV0LCJ7XG4vKiBbd3JhcHBlZCB3aXRoICIrZSsiXSAqL1xuIil9KShpLChmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIG1lKHUsKGZ1bmN0aW9uKG4pe3ZhciBpPSJfLiIrblswXTtlJm5bMV0mJiFiZSh0LGkpJiZ0LnB1c2goaSl9KSksdC5zb3J0KCl9KSgoZnVuY3Rpb24gcih0KXt2YXIgZT10Lm1hdGNoKG50KTtyZXR1cm4gZT9lWzFdLnNwbGl0KGl0KTpbXX0pKGkpLG4pKSl9ZnVuY3Rpb24gdGEoZSl7dmFyIG49MCxpPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9eW4oKSxvPTE2LShyLWkpO2lmKGk9cixvPjApe2lmKCsrbj49ODAwKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSBuPTA7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX1mdW5jdGlvbiBlYShlLG4pe3ZhciBpPS0xLHI9ZS5sZW5ndGgsbz1yLTE7Zm9yKG49bj09PXQ/cjpuOysraTxuOyl7dmFyIGE9cHIoaSxvKSxzPWVbYV07ZVthXT1lW2ldLGVbaV09c31yZXR1cm4gZS5sZW5ndGg9bixlfXZhciBuYT0oZnVuY3Rpb24gaWEodCl7dmFyIGU9ZXModCwoZnVuY3Rpb24odCl7cmV0dXJuIDUwMD09PW4uc2l6ZSYmbi5jbGVhcigpLHR9KSksbj1lLmNhY2hlO3JldHVybiBlfSkoKGZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiA0Nj09PXQuY2hhckNvZGVBdCgwKSYmZS5wdXNoKCIiKSx0LnJlcGxhY2UoSywoZnVuY3Rpb24odCxuLGkscil7ZS5wdXNoKGk/ci5yZXBsYWNlKGF0LCIkMSIpOm58fHQpfSkpLGV9KSk7ZnVuY3Rpb24gcmEodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0fHxScyh0KSlyZXR1cm4gdDt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tMS8wPyItMCI6ZX1mdW5jdGlvbiBvYSh0KXtpZihudWxsIT10KXt0cnl7cmV0dXJuIFB0LmNhbGwodCl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gdCsiIn1jYXRjaCh0KXt9fXJldHVybiIifWZ1bmN0aW9uIGFhKHQpe2lmKHQgaW5zdGFuY2VvZiBVbilyZXR1cm4gdC5jbG9uZSgpO3ZhciBlPW5ldyBWbih0Ll9fd3JhcHBlZF9fLHQuX19jaGFpbl9fKTtyZXR1cm4gZS5fX2FjdGlvbnNfXz1Ycih0Ll9fYWN0aW9uc19fKSxlLl9faW5kZXhfXz10Ll9faW5kZXhfXyxlLl9fdmFsdWVzX189dC5fX3ZhbHVlc19fLGV9dmFyIHNhPW1yKChmdW5jdGlvbih0LGUpe3JldHVybiBtcyh0KT9jaSh0LERpKGUsMSxtcywhMCkpOltdfSkpLGxhPW1yKChmdW5jdGlvbihlLG4pe3ZhciBpPV9hKG4pO3JldHVybiBtcyhpKSYmKGk9dCksbXMoZSk/Y2koZSxEaShuLDEsbXMsITApLEFvKGksMikpOltdfSkpLGNhPW1yKChmdW5jdGlvbihlLG4pe3ZhciBpPV9hKG4pO3JldHVybiBtcyhpKSYmKGk9dCksbXMoZSk/Y2koZSxEaShuLDEsbXMsITApLHQsaSk6W119KSk7ZnVuY3Rpb24gdWEodCxlLG4pe3ZhciBpPW51bGw9PXQ/MDp0Lmxlbmd0aDtpZighaSlyZXR1cm4tMTt2YXIgcj1udWxsPT1uPzA6VnMobik7cmV0dXJuIHI8MCYmKHI9Z24oaStyLDApKSxQZSh0LEFvKGUsMykscil9ZnVuY3Rpb24gaGEoZSxuLGkpe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcilyZXR1cm4tMTt2YXIgbz1yLTE7cmV0dXJuIGkhPT10JiYobz1WcyhpKSxvPWk8MD9nbihyK28sMCk6X24obyxyLTEpKSxQZShlLEFvKG4sMyksbywhMCl9ZnVuY3Rpb24gZGEodCl7cmV0dXJuIG51bGwhPXQmJnQubGVuZ3RoP0RpKHQsMSk6W119ZnVuY3Rpb24gcGEoZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2VbMF06dH12YXIgZmE9bXIoKGZ1bmN0aW9uKHQpe3ZhciBlPU1lKHQsenIpO3JldHVybiBlLmxlbmd0aCYmZVswXT09PXRbMF0/JGkoZSk6W119KSksbWE9bXIoKGZ1bmN0aW9uKGUpe3ZhciBuPV9hKGUpLGk9TWUoZSx6cik7cmV0dXJuIG49PT1fYShpKT9uPXQ6aS5wb3AoKSxpLmxlbmd0aCYmaVswXT09PWVbMF0/JGkoaSxBbyhuLDIpKTpbXX0pKSxnYT1tcigoZnVuY3Rpb24oZSl7dmFyIG49X2EoZSksaT1NZShlLHpyKTtyZXR1cm4obj0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOnQpJiZpLnBvcCgpLGkubGVuZ3RoJiZpWzBdPT09ZVswXT8kaShpLHQsbik6W119KSk7ZnVuY3Rpb24gX2EoZSl7dmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiBuP2Vbbi0xXTp0fXZhciB5YT1tcih2YSk7ZnVuY3Rpb24gdmEodCxlKXtyZXR1cm4gdCYmdC5sZW5ndGgmJmUmJmUubGVuZ3RoP2hyKHQsZSk6dH12YXIgYmE9d28oKGZ1bmN0aW9uKHQsZSl7dmFyIG49bnVsbD09dD8wOnQubGVuZ3RoLGk9cmkodCxlKTtyZXR1cm4gZHIodCxNZShlLChmdW5jdGlvbih0KXtyZXR1cm4gQm8odCxuKT8rdDp0fSkpLnNvcnQoV3IpKSxpfSkpO2Z1bmN0aW9uIHhhKHQpe3JldHVybiBudWxsPT10P3Q6eG4uY2FsbCh0KX12YXIgd2E9bXIoKGZ1bmN0aW9uKHQpe3JldHVybiBrcihEaSh0LDEsbXMsITApKX0pKSxTYT1tcigoZnVuY3Rpb24oZSl7dmFyIG49X2EoZSk7cmV0dXJuIG1zKG4pJiYobj10KSxrcihEaShlLDEsbXMsITApLEFvKG4sMikpfSkpLE1hPW1yKChmdW5jdGlvbihlKXt2YXIgbj1fYShlKTtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOnQsa3IoRGkoZSwxLG1zLCEwKSx0LG4pfSkpO2Z1bmN0aW9uIEVhKHQpe2lmKCF0fHwhdC5sZW5ndGgpcmV0dXJuW107dmFyIGU9MDtyZXR1cm4gdD15ZSh0LChmdW5jdGlvbih0KXtpZihtcyh0KSlyZXR1cm4gZT1nbih0Lmxlbmd0aCxlKSwhMH0pKSxGZShlLChmdW5jdGlvbihlKXtyZXR1cm4gTWUodCx6ZShlKSl9KSl9ZnVuY3Rpb24gVGEoZSxuKXtpZighZXx8IWUubGVuZ3RoKXJldHVybltdO3ZhciBpPUVhKGUpO3JldHVybiBudWxsPT1uP2k6TWUoaSwoZnVuY3Rpb24oZSl7cmV0dXJuIHBlKG4sdCxlKX0pKX12YXIgQ2E9bXIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG1zKHQpP2NpKHQsZSk6W119KSksQWE9bXIoKGZ1bmN0aW9uKHQpe3JldHVybiBScih5ZSh0LG1zKSl9KSksa2E9bXIoKGZ1bmN0aW9uKGUpe3ZhciBuPV9hKGUpO3JldHVybiBtcyhuKSYmKG49dCksUnIoeWUoZSxtcyksQW8obiwyKSl9KSksTGE9bXIoKGZ1bmN0aW9uKGUpe3ZhciBuPV9hKGUpO3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246dCxScih5ZShlLG1zKSx0LG4pfSkpLFBhPW1yKEVhKSxOYT1tcigoZnVuY3Rpb24oZSl7dmFyIG49ZS5sZW5ndGgsaT1uPjE/ZVtuLTFdOnQ7cmV0dXJuIGk9ImZ1bmN0aW9uIj09dHlwZW9mIGk/KGUucG9wKCksaSk6dCxUYShlLGkpfSkpO2Z1bmN0aW9uIElhKHQpe3ZhciBlPUJuKHQpO3JldHVybiBlLl9fY2hhaW5fXz0hMCxlfWZ1bmN0aW9uIFJhKHQsZSl7cmV0dXJuIGUodCl9dmFyIE9hPXdvKChmdW5jdGlvbihlKXt2YXIgbj1lLmxlbmd0aCxpPW4/ZVswXTowLHI9dGhpcy5fX3dyYXBwZWRfXyxvPWZ1bmN0aW9uKHQpe3JldHVybiByaSh0LGUpfTtyZXR1cm4hKG4+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgpJiZyIGluc3RhbmNlb2YgVW4mJkJvKGkpPygocj1yLnNsaWNlKGksK2krKG4/MTowKSkpLl9fYWN0aW9uc19fLnB1c2goe2Z1bmM6UmEsYXJnczpbb10sdGhpc0FyZzp0fSksbmV3IFZuKHIsdGhpcy5fX2NoYWluX18pLnRocnUoKGZ1bmN0aW9uKGUpe3JldHVybiBuJiYhZS5sZW5ndGgmJmUucHVzaCh0KSxlfSkpKTp0aGlzLnRocnUobyl9KSksemE9S3IoKGZ1bmN0aW9uKHQsZSxuKXtOdC5jYWxsKHQsbik/Kyt0W25dOmlpKHQsbiwxKX0pKSxEYT1pbyh1YSksQmE9aW8oaGEpO2Z1bmN0aW9uIEhhKHQsZSl7cmV0dXJuKGhzKHQpP21lOk5pKSh0LEFvKGUsMykpfWZ1bmN0aW9uIEZhKHQsZSl7cmV0dXJuKGhzKHQpP2dlOklpKSh0LEFvKGUsMykpfXZhciBWYT1LcigoZnVuY3Rpb24odCxlLG4pe050LmNhbGwodCxuKT90W25dLnB1c2goZSk6aWkodCxuLFtlXSl9KSksVWE9bXIoKGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0tMSxyPSJmdW5jdGlvbiI9PXR5cGVvZiBlLG89ZnModCk/dnQodC5sZW5ndGgpOltdO3JldHVybiBOaSh0LChmdW5jdGlvbih0KXtvWysraV09cj9wZShlLHQsbik6S2kodCxlLG4pfSkpLG99KSksamE9S3IoKGZ1bmN0aW9uKHQsZSxuKXtpaSh0LG4sZSl9KSk7ZnVuY3Rpb24gR2EodCxlKXtyZXR1cm4oaHModCk/TWU6cnIpKHQsQW8oZSwzKSl9dmFyIFdhPUtyKChmdW5jdGlvbih0LGUsbil7dFtuPzA6MV0ucHVzaChlKX0pLChmdW5jdGlvbigpe3JldHVybltbXSxbXV19KSkscWE9bXIoKGZ1bmN0aW9uKHQsZSl7aWYobnVsbD09dClyZXR1cm5bXTt2YXIgbj1lLmxlbmd0aDtyZXR1cm4gbj4xJiZIbyh0LGVbMF0sZVsxXSk/ZT1bXTpuPjImJkhvKGVbMF0sZVsxXSxlWzJdKSYmKGU9W2VbMF1dKSxjcih0LERpKGUsMSksW10pfSkpLFlhPWtlfHxmdW5jdGlvbigpe3JldHVybiBlZS5EYXRlLm5vdygpfTtmdW5jdGlvbiBYYShlLG4saSl7cmV0dXJuIG49aT90Om4sX28oZSxvLHQsdCx0LHQsbj1lJiZudWxsPT1uP2UubGVuZ3RoOm4pfWZ1bmN0aW9uICRhKG4saSl7dmFyIHI7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGkpdGhyb3cgbmV3IEN0KGUpO3JldHVybiBuPVZzKG4pLGZ1bmN0aW9uKCl7cmV0dXJuLS1uPjAmJihyPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxuPD0xJiYoaT10KSxyfX12YXIgS2E9bXIoKGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0xO2lmKG4ubGVuZ3RoKXt2YXIgbz10bihuLENvKEthKSk7aXw9cn1yZXR1cm4gX28odCxpLGUsbixvKX0pKSxaYT1tcigoZnVuY3Rpb24odCxlLG4pe3ZhciBpPTM7aWYobi5sZW5ndGgpe3ZhciBvPXRuKG4sQ28oWmEpKTtpfD1yfXJldHVybiBfbyhlLGksdCxuLG8pfSkpO2Z1bmN0aW9uIEphKG4saSxyKXt2YXIgbyxhLHMsbCxjLHUsaD0wLGQ9ITEscD0hMSxmPSEwO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBDdChlKTtmdW5jdGlvbiBtKGUpe3ZhciBpPW8scj1hO3JldHVybiBvPWE9dCxoPWUsbD1uLmFwcGx5KHIsaSl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gaD10LGM9Wm8oeSxpKSxkP20odCk6bH1mdW5jdGlvbiBfKGUpe3ZhciBuPWUtdTtyZXR1cm4gdT09PXR8fG4+PWl8fG48MHx8cCYmZS1oPj1zfWZ1bmN0aW9uIHkoKXt2YXIgdD1ZYSgpO2lmKF8odCkpcmV0dXJuIHYodCk7Yz1abyh5LChmdW5jdGlvbiBlKHQpe3ZhciBlPWktKHQtdSk7cmV0dXJuIHA/X24oZSxzLSh0LWgpKTplfSkodCkpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGM9dCxmJiZvP20oZSk6KG89YT10LGwpfWZ1bmN0aW9uIGIoKXt2YXIgZT1ZYSgpLG49XyhlKTtpZihvPWFyZ3VtZW50cyxhPXRoaXMsdT1lLG4pe2lmKGM9PT10KXJldHVybiBnKHUpO2lmKHApcmV0dXJuIFZyKGMpLGM9Wm8oeSxpKSxtKHUpfXJldHVybiBjPT09dCYmKGM9Wm8oeSxpKSksbH1yZXR1cm4gaT1qcyhpKXx8MCxTcyhyKSYmKGQ9ISFyLmxlYWRpbmcscz0ocD0ibWF4V2FpdCJpbiByKT9nbihqcyhyLm1heFdhaXQpfHwwLGkpOnMsZj0idHJhaWxpbmciaW4gcj8hIXIudHJhaWxpbmc6ZiksYi5jYW5jZWw9ZnVuY3Rpb24geCgpe2MhPT10JiZWcihjKSxoPTAsbz11PWE9Yz10fSxiLmZsdXNoPWZ1bmN0aW9uIHcoKXtyZXR1cm4gYz09PXQ/bDp2KFlhKCkpfSxifXZhciBRYT1tcigoZnVuY3Rpb24odCxlKXtyZXR1cm4gbGkodCwxLGUpfSkpLHRzPW1yKChmdW5jdGlvbih0LGUsbil7cmV0dXJuIGxpKHQsanMoZSl8fDAsbil9KSk7ZnVuY3Rpb24gZXModCxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8bnVsbCE9biYmImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEN0KGUpO3ZhciBpPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLHI9bj9uLmFwcGx5KHRoaXMsZSk6ZVswXSxvPWkuY2FjaGU7aWYoby5oYXMocikpcmV0dXJuIG8uZ2V0KHIpO3ZhciBhPXQuYXBwbHkodGhpcyxlKTtyZXR1cm4gaS5jYWNoZT1vLnNldChyLGEpfHxvLGF9O3JldHVybiBpLmNhY2hlPW5ldyhlcy5DYWNoZXx8V24pLGl9ZnVuY3Rpb24gbnModCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEN0KGUpO3JldHVybiBmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4hdC5jYWxsKHRoaXMpO2Nhc2UgMTpyZXR1cm4hdC5jYWxsKHRoaXMsZVswXSk7Y2FzZSAyOnJldHVybiF0LmNhbGwodGhpcyxlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4hdC5jYWxsKHRoaXMsZVswXSxlWzFdLGVbMl0pfXJldHVybiF0LmFwcGx5KHRoaXMsZSl9fWVzLkNhY2hlPVduO3ZhciBpcz1IcigoZnVuY3Rpb24odCxlKXt2YXIgbj0oZT0xPT1lLmxlbmd0aCYmaHMoZVswXSk/TWUoZVswXSxVZShBbygpKSk6TWUoRGkoZSwxKSxVZShBbygpKSkpLmxlbmd0aDtyZXR1cm4gbXIoKGZ1bmN0aW9uKGkpe2Zvcih2YXIgcj0tMSxvPV9uKGkubGVuZ3RoLG4pOysrcjxvOylpW3JdPWVbcl0uY2FsbCh0aGlzLGlbcl0pO3JldHVybiBwZSh0LHRoaXMsaSl9KSl9KSkscnM9bXIoKGZ1bmN0aW9uKGUsbil7dmFyIGk9dG4obixDbyhycykpO3JldHVybiBfbyhlLHIsdCxuLGkpfSkpLG9zPW1yKChmdW5jdGlvbihlLG4pe3ZhciBpPXRuKG4sQ28ob3MpKTtyZXR1cm4gX28oZSw2NCx0LG4saSl9KSksYXM9d28oKGZ1bmN0aW9uKGUsbil7cmV0dXJuIF9vKGUsMjU2LHQsdCx0LG4pfSkpO2Z1bmN0aW9uIHNzKHQsZSl7cmV0dXJuIHQ9PT1lfHx0IT10JiZlIT1lfXZhciBscz1obyhxaSksY3M9aG8oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+PWV9KSksdXM9WmkoKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30pKCkpP1ppOmZ1bmN0aW9uKHQpe3JldHVybiBNcyh0KSYmTnQuY2FsbCh0LCJjYWxsZWUiKSYmIW5lLmNhbGwodCwiY2FsbGVlIil9LGhzPXZ0LmlzQXJyYXksZHM9c2U/VWUoc2UpOmZ1bmN0aW9uIHBzKHQpe3JldHVybiBNcyh0KSYmV2kodCk9PUN9O2Z1bmN0aW9uIGZzKHQpe3JldHVybiBudWxsIT10JiZ3cyh0Lmxlbmd0aCkmJiFicyh0KX1mdW5jdGlvbiBtcyh0KXtyZXR1cm4gTXModCkmJmZzKHQpfXZhciBncz1kbnx8amwsX3M9bGU/VWUobGUpOmZ1bmN0aW9uIHlzKHQpe3JldHVybiBNcyh0KSYmV2kodCk9PWZ9O2Z1bmN0aW9uIHZzKHQpe2lmKCFNcyh0KSlyZXR1cm4hMTt2YXIgZT1XaSh0KTtyZXR1cm4gZT09bXx8IltvYmplY3QgRE9NRXhjZXB0aW9uXSI9PWV8fCJzdHJpbmciPT10eXBlb2YgdC5tZXNzYWdlJiYic3RyaW5nIj09dHlwZW9mIHQubmFtZSYmIUFzKHQpfWZ1bmN0aW9uIGJzKHQpe2lmKCFTcyh0KSlyZXR1cm4hMTt2YXIgZT1XaSh0KTtyZXR1cm4gZT09Z3x8ZT09X3x8IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT1lfHwiW29iamVjdCBQcm94eV0iPT1lfWZ1bmN0aW9uIHhzKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD09VnModCl9ZnVuY3Rpb24gd3ModCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pi0xJiZ0JTE9PTAmJnQ8PXN9ZnVuY3Rpb24gU3ModCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIG51bGwhPXQmJigib2JqZWN0Ij09ZXx8ImZ1bmN0aW9uIj09ZSl9ZnVuY3Rpb24gTXModCl7cmV0dXJuIG51bGwhPXQmJiJvYmplY3QiPT10eXBlb2YgdH12YXIgRXM9Y2U/VWUoY2UpOmZ1bmN0aW9uIFRzKHQpe3JldHVybiBNcyh0KSYmUm8odCk9PXl9O2Z1bmN0aW9uIENzKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdHx8TXModCkmJldpKHQpPT12fWZ1bmN0aW9uIEFzKHQpe2lmKCFNcyh0KXx8V2kodCkhPWIpcmV0dXJuITE7dmFyIGU9UXQodCk7aWYobnVsbD09PWUpcmV0dXJuITA7dmFyIG49TnQuY2FsbChlLCJjb25zdHJ1Y3RvciIpJiZlLmNvbnN0cnVjdG9yO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuIGluc3RhbmNlb2YgbiYmUHQuY2FsbChuKT09enR9dmFyIGtzPXVlP1VlKHVlKTpmdW5jdGlvbiBMcyh0KXtyZXR1cm4gTXModCkmJldpKHQpPT13fSxQcz1oZT9VZShoZSk6ZnVuY3Rpb24gTnModCl7cmV0dXJuIE1zKHQpJiZSbyh0KT09U307ZnVuY3Rpb24gSXModCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHwhaHModCkmJk1zKHQpJiZXaSh0KT09TX1mdW5jdGlvbiBScyh0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR8fE1zKHQpJiZXaSh0KT09RX12YXIgT3M9ZGU/VWUoZGUpOmZ1bmN0aW9uIHpzKHQpe3JldHVybiBNcyh0KSYmd3ModC5sZW5ndGgpJiYhIVh0W1dpKHQpXX0sRHM9aG8oaXIpLEJzPWhvKChmdW5jdGlvbih0LGUpe3JldHVybiB0PD1lfSkpO2Z1bmN0aW9uIEhzKHQpe2lmKCF0KXJldHVybltdO2lmKGZzKHQpKXJldHVybiBJcyh0KT9vbih0KTpYcih0KTtpZihhZSYmdFthZV0pcmV0dXJuKGZ1bmN0aW9uIGUodCl7Zm9yKHZhciBlLG49W107IShlPXQubmV4dCgpKS5kb25lOyluLnB1c2goZS52YWx1ZSk7cmV0dXJuIG59KSh0W2FlXSgpKTt2YXIgbj1Sbyh0KTtyZXR1cm4obj09eT9KZTpuPT1TP2VuOnBsKSh0KX1mdW5jdGlvbiBGcyh0KXtyZXR1cm4gdD8odD1qcyh0KSk9PT1hfHx0PT09LTEvMD8xNzk3NjkzMTM0ODYyMzE1N2UyOTIqKHQ8MD8tMToxKTp0PT10P3Q6MDowPT09dD90OjB9ZnVuY3Rpb24gVnModCl7dmFyIGU9RnModCksbj1lJTE7cmV0dXJuIGU9PWU/bj9lLW46ZTowfWZ1bmN0aW9uIFVzKHQpe3JldHVybiB0P29pKFZzKHQpLDAsYyk6MH1mdW5jdGlvbiBqcyh0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYoUnModCkpcmV0dXJuIGw7aWYoU3ModCkpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnZhbHVlT2Y/dC52YWx1ZU9mKCk6dDt0PVNzKGUpP2UrIiI6ZX1pZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIDA9PT10P3Q6K3Q7dD1WZSh0KTt2YXIgbj11dC50ZXN0KHQpO3JldHVybiBufHxkdC50ZXN0KHQpP0p0KHQuc2xpY2UoMiksbj8yOjgpOmN0LnRlc3QodCk/bDordH1mdW5jdGlvbiBHcyh0KXtyZXR1cm4gJHIodCxvbCh0KSl9ZnVuY3Rpb24gV3ModCl7cmV0dXJuIG51bGw9PXQ/IiI6QXIodCl9dmFyIHFzPVpyKChmdW5jdGlvbih0LGUpe2lmKGpvKGUpfHxmcyhlKSkkcihlLHJsKGUpLHQpO2Vsc2UgZm9yKHZhciBuIGluIGUpTnQuY2FsbChlLG4pJiZRbih0LG4sZVtuXSl9KSksWXM9WnIoKGZ1bmN0aW9uKHQsZSl7JHIoZSxvbChlKSx0KX0pKSxYcz1acigoZnVuY3Rpb24odCxlLG4saSl7JHIoZSxvbChlKSx0LGkpfSkpLCRzPVpyKChmdW5jdGlvbih0LGUsbixpKXskcihlLHJsKGUpLHQsaSl9KSksS3M9d28ocmkpLFpzPW1yKChmdW5jdGlvbihlLG4pe2U9TXQoZSk7dmFyIGk9LTEscj1uLmxlbmd0aCxvPXI+Mj9uWzJdOnQ7Zm9yKG8mJkhvKG5bMF0sblsxXSxvKSYmKHI9MSk7KytpPHI7KWZvcih2YXIgYT1uW2ldLHM9b2woYSksbD0tMSxjPXMubGVuZ3RoOysrbDxjOyl7dmFyIHU9c1tsXSxoPWVbdV07KGg9PT10fHxzcyhoLGt0W3VdKSYmIU50LmNhbGwoZSx1KSkmJihlW3VdPWFbdV0pfXJldHVybiBlfSkpLEpzPW1yKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wdXNoKHQsdm8pLHBlKHNsLHQsZSl9KSk7ZnVuY3Rpb24gUXMoZSxuLGkpe3ZhciByPW51bGw9PWU/dDpqaShlLG4pO3JldHVybiByPT09dD9pOnJ9ZnVuY3Rpb24gdGwodCxlKXtyZXR1cm4gbnVsbCE9dCYmT28odCxlLFhpKX12YXIgZWw9YW8oKGZ1bmN0aW9uKHQsZSxuKXtudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZyYmKGU9T3QuY2FsbChlKSksdFtlXT1ufSksQ2woTGwpKSxubD1hbygoZnVuY3Rpb24odCxlLG4pe251bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlLnRvU3RyaW5nJiYoZT1PdC5jYWxsKGUpKSxOdC5jYWxsKHQsZSk/dFtlXS5wdXNoKG4pOnRbZV09W25dfSksQW8pLGlsPW1yKEtpKTtmdW5jdGlvbiBybCh0KXtyZXR1cm4gZnModCk/WG4odCk6bnIodCl9ZnVuY3Rpb24gb2wodCl7cmV0dXJuIGZzKHQpP1huKHQsITApOihmdW5jdGlvbiBlKHQpe2lmKCFTcyh0KSlyZXR1cm4oZnVuY3Rpb24gZSh0KXt2YXIgZT1bXTtpZihudWxsIT10KWZvcih2YXIgbiBpbiBNdCh0KSllLnB1c2gobik7cmV0dXJuIGV9KSh0KTt2YXIgbj1qbyh0KSxpPVtdO2Zvcih2YXIgciBpbiB0KSgiY29uc3RydWN0b3IiIT1yfHwhbiYmTnQuY2FsbCh0LHIpKSYmaS5wdXNoKHIpO3JldHVybiBpfSkodCl9dmFyIGFsPVpyKChmdW5jdGlvbih0LGUsbil7c3IodCxlLG4pfSkpLHNsPVpyKChmdW5jdGlvbih0LGUsbixpKXtzcih0LGUsbixpKX0pKSxsbD13bygoZnVuY3Rpb24odCxlKXt2YXIgbj17fTtpZihudWxsPT10KXJldHVybiBuO3ZhciBpPSExO2U9TWUoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGU9QnIoZSx0KSxpfHwoaT1lLmxlbmd0aD4xKSxlfSkpLCRyKHQsTW8odCksbiksaSYmKG49YWkobiw3LGJvKSk7Zm9yKHZhciByPWUubGVuZ3RoO3ItLTspTHIobixlW3JdKTtyZXR1cm4gbn0pKSxjbD13bygoZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD97fTooZnVuY3Rpb24gbih0LGUpe3JldHVybiB1cih0LGUsKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHRsKHQsbil9KSl9KSh0LGUpfSkpO2Z1bmN0aW9uIHVsKHQsZSl7aWYobnVsbD09dClyZXR1cm57fTt2YXIgbj1NZShNbyh0KSwoZnVuY3Rpb24odCl7cmV0dXJuW3RdfSkpO3JldHVybiBlPUFvKGUpLHVyKHQsbiwoZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh0LG5bMF0pfSkpfXZhciBobD1nbyhybCksZGw9Z28ob2wpO2Z1bmN0aW9uIHBsKHQpe3JldHVybiBudWxsPT10P1tdOmplKHQscmwodCkpfXZhciBmbD1lbygoZnVuY3Rpb24odCxlLG4pe3JldHVybiBlPWUudG9Mb3dlckNhc2UoKSx0KyhuP21sKGUpOmUpfSkpO2Z1bmN0aW9uIG1sKHQpe3JldHVybiBTbChXcyh0KS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBnbCh0KXtyZXR1cm4odD1Xcyh0KSkmJnQucmVwbGFjZShmdCxYZSkucmVwbGFjZShWdCwiIil9dmFyIF9sPWVvKChmdW5jdGlvbih0LGUsbil7cmV0dXJuIHQrKG4/Ii0iOiIiKStlLnRvTG93ZXJDYXNlKCl9KSkseWw9ZW8oKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdCsobj8iICI6IiIpK2UudG9Mb3dlckNhc2UoKX0pKSx2bD10bygidG9Mb3dlckNhc2UiKSxibD1lbygoZnVuY3Rpb24odCxlLG4pe3JldHVybiB0KyhuPyJfIjoiIikrZS50b0xvd2VyQ2FzZSgpfSkpLHhsPWVvKChmdW5jdGlvbih0LGUsbil7cmV0dXJuIHQrKG4/IiAiOiIiKStTbChlKX0pKSx3bD1lbygoZnVuY3Rpb24odCxlLG4pe3JldHVybiB0KyhuPyIgIjoiIikrZS50b1VwcGVyQ2FzZSgpfSkpLFNsPXRvKCJ0b1VwcGVyQ2FzZSIpO2Z1bmN0aW9uIE1sKGUsbixpKXtyZXR1cm4gZT1XcyhlKSwobj1pP3Q6bik9PT10PyhmdW5jdGlvbiByKHQpe3JldHVybiBXdC50ZXN0KHQpfSkoZSk/KGZ1bmN0aW9uIG8odCl7cmV0dXJuIHQubWF0Y2goanQpfHxbXX0pKGUpOihmdW5jdGlvbiBhKHQpe3JldHVybiB0Lm1hdGNoKHJ0KXx8W119KShlKTplLm1hdGNoKG4pfHxbXX12YXIgRWw9bXIoKGZ1bmN0aW9uKGUsbil7dHJ5e3JldHVybiBwZShlLHQsbil9Y2F0Y2godCl7cmV0dXJuIHZzKHQpP3Q6bmV3IHh0KHQpfX0pKSxUbD13bygoZnVuY3Rpb24odCxlKXtyZXR1cm4gbWUoZSwoZnVuY3Rpb24oZSl7ZT1yYShlKSxpaSh0LGUsS2EodFtlXSx0KSl9KSksdH0pKTtmdW5jdGlvbiBDbCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIEFsPXJvKCksa2w9cm8oITApO2Z1bmN0aW9uIExsKHQpe3JldHVybiB0fWZ1bmN0aW9uIFBsKHQpe3JldHVybiBlcigiZnVuY3Rpb24iPT10eXBlb2YgdD90OmFpKHQsMSkpfXZhciBObD1tcigoZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIEtpKG4sdCxlKX19KSksSWw9bXIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBLaSh0LG4sZSl9fSkpO2Z1bmN0aW9uIFJsKHQsZSxuKXt2YXIgaT1ybChlKSxyPVVpKGUsaSk7bnVsbCE9bnx8U3MoZSkmJihyLmxlbmd0aHx8IWkubGVuZ3RoKXx8KG49ZSxlPXQsdD10aGlzLHI9VWkoZSxybChlKSkpO3ZhciBvPSEoU3MobikmJiJjaGFpbiJpbiBuJiYhbi5jaGFpbiksYT1icyh0KTtyZXR1cm4gbWUociwoZnVuY3Rpb24obil7dmFyIGk9ZVtuXTt0W25dPWksYSYmKHQucHJvdG90eXBlW25dPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX2NoYWluX187aWYob3x8ZSl7dmFyIG49dCh0aGlzLl9fd3JhcHBlZF9fKSxyPW4uX19hY3Rpb25zX189WHIodGhpcy5fX2FjdGlvbnNfXyk7cmV0dXJuIHIucHVzaCh7ZnVuYzppLGFyZ3M6YXJndW1lbnRzLHRoaXNBcmc6dH0pLG4uX19jaGFpbl9fPWUsbn1yZXR1cm4gaS5hcHBseSh0LEVlKFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSksdH1mdW5jdGlvbiBPbCgpe312YXIgemw9bG8oTWUpLERsPWxvKF9lKSxCbD1sbyhBZSk7ZnVuY3Rpb24gSGwodCl7cmV0dXJuIEZvKHQpP3plKHJhKHQpKTooZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGppKGUsdCl9fSkodCl9dmFyIEZsPXVvKCksVmw9dW8oITApO2Z1bmN0aW9uIFVsKCl7cmV0dXJuW119ZnVuY3Rpb24gamwoKXtyZXR1cm4hMX12YXIgR2wsV2w9c28oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLDApLHFsPWZvKCJjZWlsIiksWWw9c28oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQvZX0pLDEpLFhsPWZvKCJmbG9vciIpLCRsPXNvKChmdW5jdGlvbih0LGUpe3JldHVybiB0KmV9KSwxKSxLbD1mbygicm91bmQiKSxabD1zbygoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSksMCk7cmV0dXJuIEJuLmFmdGVyPWZ1bmN0aW9uIEpsKHQsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEN0KGUpO3JldHVybiB0PVZzKHQpLGZ1bmN0aW9uKCl7aWYoLS10PDEpcmV0dXJuIG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sQm4uYXJ5PVhhLEJuLmFzc2lnbj1xcyxCbi5hc3NpZ25Jbj1ZcyxCbi5hc3NpZ25JbldpdGg9WHMsQm4uYXNzaWduV2l0aD0kcyxCbi5hdD1LcyxCbi5iZWZvcmU9JGEsQm4uYmluZD1LYSxCbi5iaW5kQWxsPVRsLEJuLmJpbmRLZXk9WmEsQm4uY2FzdEFycmF5PWZ1bmN0aW9uIFFsKCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW107dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBocyh0KT90Olt0XX0sQm4uY2hhaW49SWEsQm4uY2h1bms9ZnVuY3Rpb24gdGMoZSxuLGkpe249KGk/SG8oZSxuLGkpOm49PT10KT8xOmduKFZzKG4pLDApO3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcnx8bjwxKXJldHVybltdO2Zvcih2YXIgbz0wLGE9MCxzPXZ0KGNuKHIvbikpO288cjspc1thKytdPXdyKGUsbyxvKz1uKTtyZXR1cm4gc30sQm4uY29tcGFjdD1mdW5jdGlvbiBlYyh0KXtmb3IodmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGgsaT0wLHI9W107KytlPG47KXt2YXIgbz10W2VdO28mJihyW2krK109byl9cmV0dXJuIHJ9LEJuLmNvbmNhdD1mdW5jdGlvbiBuYygpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg7aWYoIXQpcmV0dXJuW107Zm9yKHZhciBlPXZ0KHQtMSksbj1hcmd1bWVudHNbMF0saT10O2ktLTspZVtpLTFdPWFyZ3VtZW50c1tpXTtyZXR1cm4gRWUoaHMobik/WHIobik6W25dLERpKGUsMSkpfSxCbi5jb25kPWZ1bmN0aW9uIGljKHQpe3ZhciBuPW51bGw9PXQ/MDp0Lmxlbmd0aCxpPUFvKCk7cmV0dXJuIHQ9bj9NZSh0LChmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdFsxXSl0aHJvdyBuZXcgQ3QoZSk7cmV0dXJuW2kodFswXSksdFsxXV19KSk6W10sbXIoKGZ1bmN0aW9uKGUpe2Zvcih2YXIgaT0tMTsrK2k8bjspe3ZhciByPXRbaV07aWYocGUoclswXSx0aGlzLGUpKXJldHVybiBwZShyWzFdLHRoaXMsZSl9fSkpfSxCbi5jb25mb3Jtcz1mdW5jdGlvbiByYyh0KXtyZXR1cm4oZnVuY3Rpb24gZSh0KXt2YXIgZT1ybCh0KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHNpKG4sdCxlKX19KShhaSh0LDEpKX0sQm4uY29uc3RhbnQ9Q2wsQm4uY291bnRCeT16YSxCbi5jcmVhdGU9ZnVuY3Rpb24gb2ModCxlKXt2YXIgbj1Ibih0KTtyZXR1cm4gbnVsbD09ZT9uOm5pKG4sZSl9LEJuLmN1cnJ5PWZ1bmN0aW9uIGUobixpLHIpe3ZhciBvPV9vKG4sOCx0LHQsdCx0LHQsaT1yP3Q6aSk7cmV0dXJuIG8ucGxhY2Vob2xkZXI9ZS5wbGFjZWhvbGRlcixvfSxCbi5jdXJyeVJpZ2h0PWZ1bmN0aW9uIGUobixpLHIpe3ZhciBvPV9vKG4sMTYsdCx0LHQsdCx0LGk9cj90OmkpO3JldHVybiBvLnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIsb30sQm4uZGVib3VuY2U9SmEsQm4uZGVmYXVsdHM9WnMsQm4uZGVmYXVsdHNEZWVwPUpzLEJuLmRlZmVyPVFhLEJuLmRlbGF5PXRzLEJuLmRpZmZlcmVuY2U9c2EsQm4uZGlmZmVyZW5jZUJ5PWxhLEJuLmRpZmZlcmVuY2VXaXRoPWNhLEJuLmRyb3A9ZnVuY3Rpb24gYWMoZSxuLGkpe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gcj93cihlLChuPWl8fG49PT10PzE6VnMobikpPDA/MDpuLHIpOltdfSxCbi5kcm9wUmlnaHQ9ZnVuY3Rpb24gc2MoZSxuLGkpe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gcj93cihlLDAsKG49ci0obj1pfHxuPT09dD8xOlZzKG4pKSk8MD8wOm4pOltdfSxCbi5kcm9wUmlnaHRXaGlsZT1mdW5jdGlvbiBsYyh0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD9Ocih0LEFvKGUsMyksITAsITApOltdfSxCbi5kcm9wV2hpbGU9ZnVuY3Rpb24gY2ModCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/TnIodCxBbyhlLDMpLCEwKTpbXX0sQm4uZmlsbD1mdW5jdGlvbiB1YyhlLG4saSxyKXt2YXIgbz1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIG8/KGkmJiJudW1iZXIiIT10eXBlb2YgaSYmSG8oZSxuLGkpJiYoaT0wLHI9byksKGZ1bmN0aW9uIGEoZSxuLGkscil7dmFyIG89ZS5sZW5ndGg7Zm9yKChpPVZzKGkpKTwwJiYoaT0taT5vPzA6bytpKSwocj1yPT09dHx8cj5vP286VnMocikpPDAmJihyKz1vKSxyPWk+cj8wOlVzKHIpO2k8cjspZVtpKytdPW47cmV0dXJuIGV9KShlLG4saSxyKSk6W119LEJuLmZpbHRlcj1mdW5jdGlvbiBoYyh0LGUpe3JldHVybihocyh0KT95ZTp6aSkodCxBbyhlLDMpKX0sQm4uZmxhdE1hcD1mdW5jdGlvbiBkYyh0LGUpe3JldHVybiBEaShHYSh0LGUpLDEpfSxCbi5mbGF0TWFwRGVlcD1mdW5jdGlvbiBwYyh0LGUpe3JldHVybiBEaShHYSh0LGUpLGEpfSxCbi5mbGF0TWFwRGVwdGg9ZnVuY3Rpb24gZmMoZSxuLGkpe3JldHVybiBpPWk9PT10PzE6VnMoaSksRGkoR2EoZSxuKSxpKX0sQm4uZmxhdHRlbj1kYSxCbi5mbGF0dGVuRGVlcD1mdW5jdGlvbiBtYyh0KXtyZXR1cm4gbnVsbCE9dCYmdC5sZW5ndGg/RGkodCxhKTpbXX0sQm4uZmxhdHRlbkRlcHRoPWZ1bmN0aW9uIGdjKGUsbil7cmV0dXJuIG51bGwhPWUmJmUubGVuZ3RoP0RpKGUsbj1uPT09dD8xOlZzKG4pKTpbXX0sQm4uZmxpcD1mdW5jdGlvbiBfYyh0KXtyZXR1cm4gX28odCw1MTIpfSxCbi5mbG93PUFsLEJuLmZsb3dSaWdodD1rbCxCbi5mcm9tUGFpcnM9ZnVuY3Rpb24geWModCl7Zm9yKHZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoLGk9e307KytlPG47KXt2YXIgcj10W2VdO2lbclswXV09clsxXX1yZXR1cm4gaX0sQm4uZnVuY3Rpb25zPWZ1bmN0aW9uIHZjKHQpe3JldHVybiBudWxsPT10P1tdOlVpKHQscmwodCkpfSxCbi5mdW5jdGlvbnNJbj1mdW5jdGlvbiBiYyh0KXtyZXR1cm4gbnVsbD09dD9bXTpVaSh0LG9sKHQpKX0sQm4uZ3JvdXBCeT1WYSxCbi5pbml0aWFsPWZ1bmN0aW9uIHhjKHQpe3JldHVybiBudWxsIT10JiZ0Lmxlbmd0aD93cih0LDAsLTEpOltdfSxCbi5pbnRlcnNlY3Rpb249ZmEsQm4uaW50ZXJzZWN0aW9uQnk9bWEsQm4uaW50ZXJzZWN0aW9uV2l0aD1nYSxCbi5pbnZlcnQ9ZWwsQm4uaW52ZXJ0Qnk9bmwsQm4uaW52b2tlTWFwPVVhLEJuLml0ZXJhdGVlPVBsLEJuLmtleUJ5PWphLEJuLmtleXM9cmwsQm4ua2V5c0luPW9sLEJuLm1hcD1HYSxCbi5tYXBLZXlzPWZ1bmN0aW9uIHdjKHQsZSl7dmFyIG49e307cmV0dXJuIGU9QW8oZSwzKSxGaSh0LChmdW5jdGlvbih0LGkscil7aWkobixlKHQsaSxyKSx0KX0pKSxufSxCbi5tYXBWYWx1ZXM9ZnVuY3Rpb24gU2ModCxlKXt2YXIgbj17fTtyZXR1cm4gZT1BbyhlLDMpLEZpKHQsKGZ1bmN0aW9uKHQsaSxyKXtpaShuLGksZSh0LGkscikpfSkpLG59LEJuLm1hdGNoZXM9ZnVuY3Rpb24gTWModCl7cmV0dXJuIG9yKGFpKHQsMSkpfSxCbi5tYXRjaGVzUHJvcGVydHk9ZnVuY3Rpb24gRWModCxlKXtyZXR1cm4gYXIodCxhaShlLDEpKX0sQm4ubWVtb2l6ZT1lcyxCbi5tZXJnZT1hbCxCbi5tZXJnZVdpdGg9c2wsQm4ubWV0aG9kPU5sLEJuLm1ldGhvZE9mPUlsLEJuLm1peGluPVJsLEJuLm5lZ2F0ZT1ucyxCbi5udGhBcmc9ZnVuY3Rpb24gVGModCl7cmV0dXJuIHQ9VnModCksbXIoKGZ1bmN0aW9uKGUpe3JldHVybiBscihlLHQpfSkpfSxCbi5vbWl0PWxsLEJuLm9taXRCeT1mdW5jdGlvbiBDYyh0LGUpe3JldHVybiB1bCh0LG5zKEFvKGUpKSl9LEJuLm9uY2U9ZnVuY3Rpb24gQWModCl7cmV0dXJuICRhKDIsdCl9LEJuLm9yZGVyQnk9ZnVuY3Rpb24ga2MoZSxuLGkscil7cmV0dXJuIG51bGw9PWU/W106KGhzKG4pfHwobj1udWxsPT1uP1tdOltuXSksaHMoaT1yP3Q6aSl8fChpPW51bGw9PWk/W106W2ldKSxjcihlLG4saSkpfSxCbi5vdmVyPXpsLEJuLm92ZXJBcmdzPWlzLEJuLm92ZXJFdmVyeT1EbCxCbi5vdmVyU29tZT1CbCxCbi5wYXJ0aWFsPXJzLEJuLnBhcnRpYWxSaWdodD1vcyxCbi5wYXJ0aXRpb249V2EsQm4ucGljaz1jbCxCbi5waWNrQnk9dWwsQm4ucHJvcGVydHk9SGwsQm4ucHJvcGVydHlPZj1mdW5jdGlvbiBMYyhlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG51bGw9PWU/dDpqaShlLG4pfX0sQm4ucHVsbD15YSxCbi5wdWxsQWxsPXZhLEJuLnB1bGxBbGxCeT1mdW5jdGlvbiBQYyh0LGUsbil7cmV0dXJuIHQmJnQubGVuZ3RoJiZlJiZlLmxlbmd0aD9ocih0LGUsQW8obiwyKSk6dH0sQm4ucHVsbEFsbFdpdGg9ZnVuY3Rpb24gTmMoZSxuLGkpe3JldHVybiBlJiZlLmxlbmd0aCYmbiYmbi5sZW5ndGg/aHIoZSxuLHQsaSk6ZX0sQm4ucHVsbEF0PWJhLEJuLnJhbmdlPUZsLEJuLnJhbmdlUmlnaHQ9VmwsQm4ucmVhcmc9YXMsQm4ucmVqZWN0PWZ1bmN0aW9uIEljKHQsZSl7cmV0dXJuKGhzKHQpP3llOnppKSh0LG5zKEFvKGUsMykpKX0sQm4ucmVtb3ZlPWZ1bmN0aW9uIFJjKHQsZSl7dmFyIG49W107aWYoIXR8fCF0Lmxlbmd0aClyZXR1cm4gbjt2YXIgaT0tMSxyPVtdLG89dC5sZW5ndGg7Zm9yKGU9QW8oZSwzKTsrK2k8bzspe3ZhciBhPXRbaV07ZShhLGksdCkmJihuLnB1c2goYSksci5wdXNoKGkpKX1yZXR1cm4gZHIodCxyKSxufSxCbi5yZXN0PWZ1bmN0aW9uIE9jKG4saSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEN0KGUpO3JldHVybiBtcihuLGk9aT09PXQ/aTpWcyhpKSl9LEJuLnJldmVyc2U9eGEsQm4uc2FtcGxlU2l6ZT1mdW5jdGlvbiB6YyhlLG4saSl7cmV0dXJuIG49KGk/SG8oZSxuLGkpOm49PT10KT8xOlZzKG4pLChocyhlKT9LbjpfcikoZSxuKX0sQm4uc2V0PWZ1bmN0aW9uIERjKHQsZSxuKXtyZXR1cm4gbnVsbD09dD90OnlyKHQsZSxuKX0sQm4uc2V0V2l0aD1mdW5jdGlvbiBCYyhlLG4saSxyKXtyZXR1cm4gcj0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOnQsbnVsbD09ZT9lOnlyKGUsbixpLHIpfSxCbi5zaHVmZmxlPWZ1bmN0aW9uIEhjKHQpe3JldHVybihocyh0KT9abjp4cikodCl9LEJuLnNsaWNlPWZ1bmN0aW9uIEZjKGUsbixpKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/KGkmJiJudW1iZXIiIT10eXBlb2YgaSYmSG8oZSxuLGkpPyhuPTAsaT1yKToobj1udWxsPT1uPzA6VnMobiksaT1pPT09dD9yOlZzKGkpKSx3cihlLG4saSkpOltdfSxCbi5zb3J0Qnk9cWEsQm4uc29ydGVkVW5pcT1mdW5jdGlvbiBWYyh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/VHIodCk6W119LEJuLnNvcnRlZFVuaXFCeT1mdW5jdGlvbiBVYyh0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD9Ucih0LEFvKGUsMikpOltdfSxCbi5zcGxpdD1mdW5jdGlvbiBqYyhlLG4saSl7cmV0dXJuIGkmJiJudW1iZXIiIT10eXBlb2YgaSYmSG8oZSxuLGkpJiYobj1pPXQpLChpPWk9PT10P2M6aT4+PjApPyhlPVdzKGUpKSYmKCJzdHJpbmciPT10eXBlb2Ygbnx8bnVsbCE9biYmIWtzKG4pKSYmIShuPUFyKG4pKSYmWmUoZSk/RnIob24oZSksMCxpKTplLnNwbGl0KG4saSk6W119LEJuLnNwcmVhZD1mdW5jdGlvbiBHYyh0LG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBDdChlKTtyZXR1cm4gbj1udWxsPT1uPzA6Z24oVnMobiksMCksbXIoKGZ1bmN0aW9uKGUpe3ZhciBpPWVbbl0scj1GcihlLDAsbik7cmV0dXJuIGkmJkVlKHIsaSkscGUodCx0aGlzLHIpfSkpfSxCbi50YWlsPWZ1bmN0aW9uIFdjKHQpe3ZhciBlPW51bGw9PXQ/MDp0Lmxlbmd0aDtyZXR1cm4gZT93cih0LDEsZSk6W119LEJuLnRha2U9ZnVuY3Rpb24gcWMoZSxuLGkpe3JldHVybiBlJiZlLmxlbmd0aD93cihlLDAsKG49aXx8bj09PXQ/MTpWcyhuKSk8MD8wOm4pOltdfSxCbi50YWtlUmlnaHQ9ZnVuY3Rpb24gWWMoZSxuLGkpe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gcj93cihlLChuPXItKG49aXx8bj09PXQ/MTpWcyhuKSkpPDA/MDpuLHIpOltdfSxCbi50YWtlUmlnaHRXaGlsZT1mdW5jdGlvbiBYYyh0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD9Ocih0LEFvKGUsMyksITEsITApOltdfSxCbi50YWtlV2hpbGU9ZnVuY3Rpb24gJGModCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/TnIodCxBbyhlLDMpKTpbXX0sQm4udGFwPWZ1bmN0aW9uIEtjKHQsZSl7cmV0dXJuIGUodCksdH0sQm4udGhyb3R0bGU9ZnVuY3Rpb24gWmModCxuLGkpe3ZhciByPSEwLG89ITA7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEN0KGUpO3JldHVybiBTcyhpKSYmKHI9ImxlYWRpbmciaW4gaT8hIWkubGVhZGluZzpyLG89InRyYWlsaW5nImluIGk/ISFpLnRyYWlsaW5nOm8pLEphKHQsbix7bGVhZGluZzpyLG1heFdhaXQ6bix0cmFpbGluZzpvfSl9LEJuLnRocnU9UmEsQm4udG9BcnJheT1IcyxCbi50b1BhaXJzPWhsLEJuLnRvUGFpcnNJbj1kbCxCbi50b1BhdGg9ZnVuY3Rpb24gSmModCl7cmV0dXJuIGhzKHQpP01lKHQscmEpOlJzKHQpP1t0XTpYcihuYShXcyh0KSkpfSxCbi50b1BsYWluT2JqZWN0PUdzLEJuLnRyYW5zZm9ybT1mdW5jdGlvbiBRYyh0LGUsbil7dmFyIGk9aHModCkscj1pfHxncyh0KXx8T3ModCk7aWYoZT1BbyhlLDQpLG51bGw9PW4pe3ZhciBvPXQmJnQuY29uc3RydWN0b3I7bj1yP2k/bmV3IG86W106U3ModCkmJmJzKG8pP0huKFF0KHQpKTp7fX1yZXR1cm4ocj9tZTpGaSkodCwoZnVuY3Rpb24odCxpLHIpe3JldHVybiBlKG4sdCxpLHIpfSkpLG59LEJuLnVuYXJ5PWZ1bmN0aW9uIHR1KHQpe3JldHVybiBYYSh0LDEpfSxCbi51bmlvbj13YSxCbi51bmlvbkJ5PVNhLEJuLnVuaW9uV2l0aD1NYSxCbi51bmlxPWZ1bmN0aW9uIGV1KHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9rcih0KTpbXX0sQm4udW5pcUJ5PWZ1bmN0aW9uIG51KHQsZSl7cmV0dXJuIHQmJnQubGVuZ3RoP2tyKHQsQW8oZSwyKSk6W119LEJuLnVuaXFXaXRoPWZ1bmN0aW9uIGl1KGUsbil7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp0LGUmJmUubGVuZ3RoP2tyKGUsdCxuKTpbXX0sQm4udW5zZXQ9ZnVuY3Rpb24gcnUodCxlKXtyZXR1cm4gbnVsbD09dHx8THIodCxlKX0sQm4udW56aXA9RWEsQm4udW56aXBXaXRoPVRhLEJuLnVwZGF0ZT1mdW5jdGlvbiBvdSh0LGUsbil7cmV0dXJuIG51bGw9PXQ/dDpQcih0LGUsRHIobikpfSxCbi51cGRhdGVXaXRoPWZ1bmN0aW9uIGF1KGUsbixpLHIpe3JldHVybiByPSJmdW5jdGlvbiI9PXR5cGVvZiByP3I6dCxudWxsPT1lP2U6UHIoZSxuLERyKGkpLHIpfSxCbi52YWx1ZXM9cGwsQm4udmFsdWVzSW49ZnVuY3Rpb24gc3UodCl7cmV0dXJuIG51bGw9PXQ/W106amUodCxvbCh0KSl9LEJuLndpdGhvdXQ9Q2EsQm4ud29yZHM9TWwsQm4ud3JhcD1mdW5jdGlvbiBsdSh0LGUpe3JldHVybiBycyhEcihlKSx0KX0sQm4ueG9yPUFhLEJuLnhvckJ5PWthLEJuLnhvcldpdGg9TGEsQm4uemlwPVBhLEJuLnppcE9iamVjdD1mdW5jdGlvbiBjdSh0LGUpe3JldHVybiBPcih0fHxbXSxlfHxbXSxRbil9LEJuLnppcE9iamVjdERlZXA9ZnVuY3Rpb24gdXUodCxlKXtyZXR1cm4gT3IodHx8W10sZXx8W10seXIpfSxCbi56aXBXaXRoPU5hLEJuLmVudHJpZXM9aGwsQm4uZW50cmllc0luPWRsLEJuLmV4dGVuZD1ZcyxCbi5leHRlbmRXaXRoPVhzLFJsKEJuLEJuKSxCbi5hZGQ9V2wsQm4uYXR0ZW1wdD1FbCxCbi5jYW1lbENhc2U9ZmwsQm4uY2FwaXRhbGl6ZT1tbCxCbi5jZWlsPXFsLEJuLmNsYW1wPWZ1bmN0aW9uIGh1KGUsbixpKXtyZXR1cm4gaT09PXQmJihpPW4sbj10KSxpIT09dCYmKGk9KGk9anMoaSkpPT1pP2k6MCksbiE9PXQmJihuPShuPWpzKG4pKT09bj9uOjApLG9pKGpzKGUpLG4saSl9LEJuLmNsb25lPWZ1bmN0aW9uIGR1KHQpe3JldHVybiBhaSh0LDQpfSxCbi5jbG9uZURlZXA9ZnVuY3Rpb24gcHUodCl7cmV0dXJuIGFpKHQsNSl9LEJuLmNsb25lRGVlcFdpdGg9ZnVuY3Rpb24gZnUoZSxuKXtyZXR1cm4gYWkoZSw1LG49ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp0KX0sQm4uY2xvbmVXaXRoPWZ1bmN0aW9uIG11KGUsbil7cmV0dXJuIGFpKGUsNCxuPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246dCl9LEJuLmNvbmZvcm1zVG89ZnVuY3Rpb24gZ3UodCxlKXtyZXR1cm4gbnVsbD09ZXx8c2kodCxlLHJsKGUpKX0sQm4uZGVidXJyPWdsLEJuLmRlZmF1bHRUbz1mdW5jdGlvbiBfdSh0LGUpe3JldHVybiBudWxsPT10fHx0IT10P2U6dH0sQm4uZGl2aWRlPVlsLEJuLmVuZHNXaXRoPWZ1bmN0aW9uIHl1KGUsbixpKXtlPVdzKGUpLG49QXIobik7dmFyIHI9ZS5sZW5ndGgsbz1pPWk9PT10P3I6b2koVnMoaSksMCxyKTtyZXR1cm4oaS09bi5sZW5ndGgpPj0wJiZlLnNsaWNlKGksbyk9PW59LEJuLmVxPXNzLEJuLmVzY2FwZT1mdW5jdGlvbiB2dSh0KXtyZXR1cm4odD1Xcyh0KSkmJkcudGVzdCh0KT90LnJlcGxhY2UoVSwkZSk6dH0sQm4uZXNjYXBlUmVnRXhwPWZ1bmN0aW9uIGJ1KHQpe3JldHVybih0PVdzKHQpKSYmSi50ZXN0KHQpP3QucmVwbGFjZShaLCJcXCQmIik6dH0sQm4uZXZlcnk9ZnVuY3Rpb24geHUoZSxuLGkpe3ZhciByPWhzKGUpP19lOlJpO3JldHVybiBpJiZIbyhlLG4saSkmJihuPXQpLHIoZSxBbyhuLDMpKX0sQm4uZmluZD1EYSxCbi5maW5kSW5kZXg9dWEsQm4uZmluZEtleT1mdW5jdGlvbiB3dSh0LGUpe3JldHVybiBMZSh0LEFvKGUsMyksRmkpfSxCbi5maW5kTGFzdD1CYSxCbi5maW5kTGFzdEluZGV4PWhhLEJuLmZpbmRMYXN0S2V5PWZ1bmN0aW9uIFN1KHQsZSl7cmV0dXJuIExlKHQsQW8oZSwzKSxWaSl9LEJuLmZsb29yPVhsLEJuLmZvckVhY2g9SGEsQm4uZm9yRWFjaFJpZ2h0PUZhLEJuLmZvckluPWZ1bmN0aW9uIE11KHQsZSl7cmV0dXJuIG51bGw9PXQ/dDpCaSh0LEFvKGUsMyksb2wpfSxCbi5mb3JJblJpZ2h0PWZ1bmN0aW9uIEV1KHQsZSl7cmV0dXJuIG51bGw9PXQ/dDpIaSh0LEFvKGUsMyksb2wpfSxCbi5mb3JPd249ZnVuY3Rpb24gVHUodCxlKXtyZXR1cm4gdCYmRmkodCxBbyhlLDMpKX0sQm4uZm9yT3duUmlnaHQ9ZnVuY3Rpb24gQ3UodCxlKXtyZXR1cm4gdCYmVmkodCxBbyhlLDMpKX0sQm4uZ2V0PVFzLEJuLmd0PWxzLEJuLmd0ZT1jcyxCbi5oYXM9ZnVuY3Rpb24gQXUodCxlKXtyZXR1cm4gbnVsbCE9dCYmT28odCxlLFlpKX0sQm4uaGFzSW49dGwsQm4uaGVhZD1wYSxCbi5pZGVudGl0eT1MbCxCbi5pbmNsdWRlcz1mdW5jdGlvbiBrdSh0LGUsbixpKXt0PWZzKHQpP3Q6cGwodCksbj1uJiYhaT9WcyhuKTowO3ZhciByPXQubGVuZ3RoO3JldHVybiBuPDAmJihuPWduKHIrbiwwKSksSXModCk/bjw9ciYmdC5pbmRleE9mKGUsbik+LTE6ISFyJiZOZSh0LGUsbik+LTF9LEJuLmluZGV4T2Y9ZnVuY3Rpb24gTHUodCxlLG4pe3ZhciBpPW51bGw9PXQ/MDp0Lmxlbmd0aDtpZighaSlyZXR1cm4tMTt2YXIgcj1udWxsPT1uPzA6VnMobik7cmV0dXJuIHI8MCYmKHI9Z24oaStyLDApKSxOZSh0LGUscil9LEJuLmluUmFuZ2U9ZnVuY3Rpb24gUHUoZSxuLGkpe3JldHVybiBuPUZzKG4pLGk9PT10PyhpPW4sbj0wKTppPUZzKGkpLChmdW5jdGlvbiByKHQsZSxuKXtyZXR1cm4gdD49X24oZSxuKSYmdDxnbihlLG4pfSkoZT1qcyhlKSxuLGkpfSxCbi5pbnZva2U9aWwsQm4uaXNBcmd1bWVudHM9dXMsQm4uaXNBcnJheT1ocyxCbi5pc0FycmF5QnVmZmVyPWRzLEJuLmlzQXJyYXlMaWtlPWZzLEJuLmlzQXJyYXlMaWtlT2JqZWN0PW1zLEJuLmlzQm9vbGVhbj1mdW5jdGlvbiBOdSh0KXtyZXR1cm4hMD09PXR8fCExPT09dHx8TXModCkmJldpKHQpPT1wfSxCbi5pc0J1ZmZlcj1ncyxCbi5pc0RhdGU9X3MsQm4uaXNFbGVtZW50PWZ1bmN0aW9uIEl1KHQpe3JldHVybiBNcyh0KSYmMT09PXQubm9kZVR5cGUmJiFBcyh0KX0sQm4uaXNFbXB0eT1mdW5jdGlvbiBSdSh0KXtpZihudWxsPT10KXJldHVybiEwO2lmKGZzKHQpJiYoaHModCl8fCJzdHJpbmciPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQuc3BsaWNlfHxncyh0KXx8T3ModCl8fHVzKHQpKSlyZXR1cm4hdC5sZW5ndGg7dmFyIGU9Um8odCk7aWYoZT09eXx8ZT09UylyZXR1cm4hdC5zaXplO2lmKGpvKHQpKXJldHVybiFucih0KS5sZW5ndGg7Zm9yKHZhciBuIGluIHQpaWYoTnQuY2FsbCh0LG4pKXJldHVybiExO3JldHVybiEwfSxCbi5pc0VxdWFsPWZ1bmN0aW9uIE91KHQsZSl7cmV0dXJuIEppKHQsZSl9LEJuLmlzRXF1YWxXaXRoPWZ1bmN0aW9uIHp1KGUsbixpKXt2YXIgcj0oaT0iZnVuY3Rpb24iPT10eXBlb2YgaT9pOnQpP2koZSxuKTp0O3JldHVybiByPT09dD9KaShlLG4sdCxpKTohIXJ9LEJuLmlzRXJyb3I9dnMsQm4uaXNGaW5pdGU9ZnVuY3Rpb24gRHUodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZwbih0KX0sQm4uaXNGdW5jdGlvbj1icyxCbi5pc0ludGVnZXI9eHMsQm4uaXNMZW5ndGg9d3MsQm4uaXNNYXA9RXMsQm4uaXNNYXRjaD1mdW5jdGlvbiBCdSh0LGUpe3JldHVybiB0PT09ZXx8UWkodCxlLExvKGUpKX0sQm4uaXNNYXRjaFdpdGg9ZnVuY3Rpb24gSHUoZSxuLGkpe3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBpP2k6dCxRaShlLG4sTG8obiksaSl9LEJuLmlzTmFOPWZ1bmN0aW9uIEZ1KHQpe3JldHVybiBDcyh0KSYmdCE9K3R9LEJuLmlzTmF0aXZlPWZ1bmN0aW9uIFZ1KHQpe2lmKFVvKHQpKXRocm93IG5ldyB4dCgiVW5zdXBwb3J0ZWQgY29yZS1qcyB1c2UuIFRyeSBodHRwczovL25wbXMuaW8vc2VhcmNoP3E9cG9ueWZpbGwuIik7cmV0dXJuIHRyKHQpfSxCbi5pc05pbD1mdW5jdGlvbiBVdSh0KXtyZXR1cm4gbnVsbD09dH0sQm4uaXNOdWxsPWZ1bmN0aW9uIGp1KHQpe3JldHVybiBudWxsPT09dH0sQm4uaXNOdW1iZXI9Q3MsQm4uaXNPYmplY3Q9U3MsQm4uaXNPYmplY3RMaWtlPU1zLEJuLmlzUGxhaW5PYmplY3Q9QXMsQm4uaXNSZWdFeHA9a3MsQm4uaXNTYWZlSW50ZWdlcj1mdW5jdGlvbiBHdSh0KXtyZXR1cm4geHModCkmJnQ+PS05MDA3MTk5MjU0NzQwOTkxJiZ0PD1zfSxCbi5pc1NldD1QcyxCbi5pc1N0cmluZz1JcyxCbi5pc1N5bWJvbD1ScyxCbi5pc1R5cGVkQXJyYXk9T3MsQm4uaXNVbmRlZmluZWQ9ZnVuY3Rpb24gV3UoZSl7cmV0dXJuIGU9PT10fSxCbi5pc1dlYWtNYXA9ZnVuY3Rpb24gcXUodCl7cmV0dXJuIE1zKHQpJiZSbyh0KT09VH0sQm4uaXNXZWFrU2V0PWZ1bmN0aW9uIFl1KHQpe3JldHVybiBNcyh0KSYmIltvYmplY3QgV2Vha1NldF0iPT1XaSh0KX0sQm4uam9pbj1mdW5jdGlvbiBYdSh0LGUpe3JldHVybiBudWxsPT10PyIiOmZuLmNhbGwodCxlKX0sQm4ua2ViYWJDYXNlPV9sLEJuLmxhc3Q9X2EsQm4ubGFzdEluZGV4T2Y9ZnVuY3Rpb24gJHUoZSxuLGkpe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcilyZXR1cm4tMTt2YXIgbz1yO3JldHVybiBpIT09dCYmKG89KG89VnMoaSkpPDA/Z24ocitvLDApOl9uKG8sci0xKSksbj09bj8oZnVuY3Rpb24gYSh0LGUsbil7Zm9yKHZhciBpPW4rMTtpLS07KWlmKHRbaV09PT1lKXJldHVybiBpO3JldHVybiBpfSkoZSxuLG8pOlBlKGUsUmUsbywhMCl9LEJuLmxvd2VyQ2FzZT15bCxCbi5sb3dlckZpcnN0PXZsLEJuLmx0PURzLEJuLmx0ZT1CcyxCbi5tYXg9ZnVuY3Rpb24gS3UoZSl7cmV0dXJuIGUmJmUubGVuZ3RoP09pKGUsTGwscWkpOnR9LEJuLm1heEJ5PWZ1bmN0aW9uIFp1KGUsbil7cmV0dXJuIGUmJmUubGVuZ3RoP09pKGUsQW8obiwyKSxxaSk6dH0sQm4ubWVhbj1mdW5jdGlvbiBKdSh0KXtyZXR1cm4gT2UodCxMbCl9LEJuLm1lYW5CeT1mdW5jdGlvbiBRdSh0LGUpe3JldHVybiBPZSh0LEFvKGUsMikpfSxCbi5taW49ZnVuY3Rpb24gdGgoZSl7cmV0dXJuIGUmJmUubGVuZ3RoP09pKGUsTGwsaXIpOnR9LEJuLm1pbkJ5PWZ1bmN0aW9uIGVoKGUsbil7cmV0dXJuIGUmJmUubGVuZ3RoP09pKGUsQW8obiwyKSxpcik6dH0sQm4uc3R1YkFycmF5PVVsLEJuLnN0dWJGYWxzZT1qbCxCbi5zdHViT2JqZWN0PWZ1bmN0aW9uIG5oKCl7cmV0dXJue319LEJuLnN0dWJTdHJpbmc9ZnVuY3Rpb24gaWgoKXtyZXR1cm4iIn0sQm4uc3R1YlRydWU9ZnVuY3Rpb24gcmgoKXtyZXR1cm4hMH0sQm4ubXVsdGlwbHk9JGwsQm4ubnRoPWZ1bmN0aW9uIG9oKGUsbil7cmV0dXJuIGUmJmUubGVuZ3RoP2xyKGUsVnMobikpOnR9LEJuLm5vQ29uZmxpY3Q9ZnVuY3Rpb24gYWgoKXtyZXR1cm4gZWUuXz09PXRoaXMmJihlZS5fPUR0KSx0aGlzfSxCbi5ub29wPU9sLEJuLm5vdz1ZYSxCbi5wYWQ9ZnVuY3Rpb24gc2godCxlLG4pe3Q9V3ModCk7dmFyIGk9KGU9VnMoZSkpP3JuKHQpOjA7aWYoIWV8fGk+PWUpcmV0dXJuIHQ7dmFyIHI9KGUtaSkvMjtyZXR1cm4gY28odW4ociksbikrdCtjbyhjbihyKSxuKX0sQm4ucGFkRW5kPWZ1bmN0aW9uIGxoKHQsZSxuKXt0PVdzKHQpO3ZhciBpPShlPVZzKGUpKT9ybih0KTowO3JldHVybiBlJiZpPGU/dCtjbyhlLWksbik6dH0sQm4ucGFkU3RhcnQ9ZnVuY3Rpb24gY2godCxlLG4pe3Q9V3ModCk7dmFyIGk9KGU9VnMoZSkpP3JuKHQpOjA7cmV0dXJuIGUmJmk8ZT9jbyhlLWksbikrdDp0fSxCbi5wYXJzZUludD1mdW5jdGlvbiB1aCh0LGUsbil7cmV0dXJuIG58fG51bGw9PWU/ZT0wOmUmJihlPStlKSx2bihXcyh0KS5yZXBsYWNlKFEsIiIpLGV8fDApfSxCbi5yYW5kb209ZnVuY3Rpb24gaGgoZSxuLGkpe2lmKGkmJiJib29sZWFuIiE9dHlwZW9mIGkmJkhvKGUsbixpKSYmKG49aT10KSxpPT09dCYmKCJib29sZWFuIj09dHlwZW9mIG4/KGk9bixuPXQpOiJib29sZWFuIj09dHlwZW9mIGUmJihpPWUsZT10KSksZT09PXQmJm49PT10PyhlPTAsbj0xKTooZT1GcyhlKSxuPT09dD8obj1lLGU9MCk6bj1GcyhuKSksZT5uKXt2YXIgcj1lO2U9bixuPXJ9aWYoaXx8ZSUxfHxuJTEpe3ZhciBvPWJuKCk7cmV0dXJuIF9uKGUrbyoobi1lK1p0KCIxZS0iKygobysiIikubGVuZ3RoLTEpKSksbil9cmV0dXJuIHByKGUsbil9LEJuLnJlZHVjZT1mdW5jdGlvbiBkaCh0LGUsbil7dmFyIGk9aHModCk/VGU6QmUscj1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIGkodCxBbyhlLDQpLG4scixOaSl9LEJuLnJlZHVjZVJpZ2h0PWZ1bmN0aW9uIHBoKHQsZSxuKXt2YXIgaT1ocyh0KT9DZTpCZSxyPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gaSh0LEFvKGUsNCksbixyLElpKX0sQm4ucmVwZWF0PWZ1bmN0aW9uIGZoKGUsbixpKXtyZXR1cm4gbj0oaT9IbyhlLG4saSk6bj09PXQpPzE6VnMobiksZnIoV3MoZSksbil9LEJuLnJlcGxhY2U9ZnVuY3Rpb24gbWgoKXt2YXIgdD1hcmd1bWVudHMsZT1Xcyh0WzBdKTtyZXR1cm4gdC5sZW5ndGg8Mz9lOmUucmVwbGFjZSh0WzFdLHRbMl0pfSxCbi5yZXN1bHQ9ZnVuY3Rpb24gZ2goZSxuLGkpe3ZhciByPS0xLG89KG49QnIobixlKSkubGVuZ3RoO2ZvcihvfHwobz0xLGU9dCk7KytyPG87KXt2YXIgYT1udWxsPT1lP3Q6ZVtyYShuW3JdKV07YT09PXQmJihyPW8sYT1pKSxlPWJzKGEpP2EuY2FsbChlKTphfXJldHVybiBlfSxCbi5yb3VuZD1LbCxCbi5ydW5JbkNvbnRleHQ9dHQsQm4uc2FtcGxlPWZ1bmN0aW9uIF9oKHQpe3JldHVybihocyh0KT8kbjpncikodCl9LEJuLnNpemU9ZnVuY3Rpb24geWgodCl7aWYobnVsbD09dClyZXR1cm4gMDtpZihmcyh0KSlyZXR1cm4gSXModCk/cm4odCk6dC5sZW5ndGg7dmFyIGU9Um8odCk7cmV0dXJuIGU9PXl8fGU9PVM/dC5zaXplOm5yKHQpLmxlbmd0aH0sQm4uc25ha2VDYXNlPWJsLEJuLnNvbWU9ZnVuY3Rpb24gdmgoZSxuLGkpe3ZhciByPWhzKGUpP0FlOlNyO3JldHVybiBpJiZIbyhlLG4saSkmJihuPXQpLHIoZSxBbyhuLDMpKX0sQm4uc29ydGVkSW5kZXg9ZnVuY3Rpb24gYmgodCxlKXtyZXR1cm4gTXIodCxlKX0sQm4uc29ydGVkSW5kZXhCeT1mdW5jdGlvbiB4aCh0LGUsbil7cmV0dXJuIEVyKHQsZSxBbyhuLDIpKX0sQm4uc29ydGVkSW5kZXhPZj1mdW5jdGlvbiB3aCh0LGUpe3ZhciBuPW51bGw9PXQ/MDp0Lmxlbmd0aDtpZihuKXt2YXIgaT1Ncih0LGUpO2lmKGk8biYmc3ModFtpXSxlKSlyZXR1cm4gaX1yZXR1cm4tMX0sQm4uc29ydGVkTGFzdEluZGV4PWZ1bmN0aW9uIFNoKHQsZSl7cmV0dXJuIE1yKHQsZSwhMCl9LEJuLnNvcnRlZExhc3RJbmRleEJ5PWZ1bmN0aW9uIE1oKHQsZSxuKXtyZXR1cm4gRXIodCxlLEFvKG4sMiksITApfSxCbi5zb3J0ZWRMYXN0SW5kZXhPZj1mdW5jdGlvbiBFaCh0LGUpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXt2YXIgbj1Ncih0LGUsITApLTE7aWYoc3ModFtuXSxlKSlyZXR1cm4gbn1yZXR1cm4tMX0sQm4uc3RhcnRDYXNlPXhsLEJuLnN0YXJ0c1dpdGg9ZnVuY3Rpb24gVGgodCxlLG4pe3JldHVybiB0PVdzKHQpLG49bnVsbD09bj8wOm9pKFZzKG4pLDAsdC5sZW5ndGgpLGU9QXIoZSksdC5zbGljZShuLG4rZS5sZW5ndGgpPT1lfSxCbi5zdWJ0cmFjdD1abCxCbi5zdW09ZnVuY3Rpb24gQ2godCl7cmV0dXJuIHQmJnQubGVuZ3RoP0hlKHQsTGwpOjB9LEJuLnN1bUJ5PWZ1bmN0aW9uIEFoKHQsZSl7cmV0dXJuIHQmJnQubGVuZ3RoP0hlKHQsQW8oZSwyKSk6MH0sQm4udGVtcGxhdGU9ZnVuY3Rpb24ga2goZSxuLGkpe3ZhciByPUJuLnRlbXBsYXRlU2V0dGluZ3M7aSYmSG8oZSxuLGkpJiYobj10KSxlPVdzKGUpLG49WHMoe30sbixyLHlvKTt2YXIgbyxhLHM9WHMoe30sbi5pbXBvcnRzLHIuaW1wb3J0cyx5byksbD1ybChzKSxjPWplKHMsbCksdT0wLGg9bi5pbnRlcnBvbGF0ZXx8bXQsZD0iX19wICs9ICciLHA9RXQoKG4uZXNjYXBlfHxtdCkuc291cmNlKyJ8IitoLnNvdXJjZSsifCIrKGg9PT1ZP3N0Om10KS5zb3VyY2UrInwiKyhuLmV2YWx1YXRlfHxtdCkuc291cmNlKyJ8JCIsImciKSxmPSIvLyMgc291cmNlVVJMPSIrKE50LmNhbGwobiwic291cmNlVVJMIik/KG4uc291cmNlVVJMKyIiKS5yZXBsYWNlKC9ccy9nLCIgIik6ImxvZGFzaC50ZW1wbGF0ZVNvdXJjZXNbIisgKytZdCsiXSIpKyJcbiI7ZS5yZXBsYWNlKHAsKGZ1bmN0aW9uKHQsbixpLHIscyxsKXtyZXR1cm4gaXx8KGk9ciksZCs9ZS5zbGljZSh1LGwpLnJlcGxhY2UoZ3QsS2UpLG4mJihvPSEwLGQrPSInICtcbl9fZSgiK24rIikgK1xuJyIpLHMmJihhPSEwLGQrPSInO1xuIitzKyI7XG5fX3AgKz0gJyIpLGkmJihkKz0iJyArXG4oKF9fdCA9ICgiK2krIikpID09IG51bGwgPyAnJyA6IF9fdCkgK1xuJyIpLHU9bCt0Lmxlbmd0aCx0fSkpLGQrPSInO1xuIjt2YXIgbT1OdC5jYWxsKG4sInZhcmlhYmxlIikmJm4udmFyaWFibGU7aWYobSl7aWYob3QudGVzdChtKSl0aHJvdyBuZXcgeHQoIkludmFsaWQgYHZhcmlhYmxlYCBvcHRpb24gcGFzc2VkIGludG8gYF8udGVtcGxhdGVgIil9ZWxzZSBkPSJ3aXRoIChvYmopIHtcbiIrZCsiXG59XG4iO2Q9KGE/ZC5yZXBsYWNlKEIsIiIpOmQpLnJlcGxhY2UoSCwiJDEiKS5yZXBsYWNlKEYsIiQxOyIpLGQ9ImZ1bmN0aW9uKCIrKG18fCJvYmoiKSsiKSB7XG4iKyhtPyIiOiJvYmogfHwgKG9iaiA9IHt9KTtcbiIpKyJ2YXIgX190LCBfX3AgPSAnJyIrKG8/IiwgX19lID0gXy5lc2NhcGUiOiIiKSsoYT8iLCBfX2ogPSBBcnJheS5wcm90b3R5cGUuam9pbjtcbmZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxuIjoiO1xuIikrZCsicmV0dXJuIF9fcFxufSI7dmFyIGc9RWwoKGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGwsZisicmV0dXJuICIrZCkuYXBwbHkodCxjKX0pKTtpZihnLnNvdXJjZT1kLHZzKGcpKXRocm93IGc7cmV0dXJuIGd9LEJuLnRpbWVzPWZ1bmN0aW9uIExoKHQsZSl7aWYoKHQ9VnModCkpPDF8fHQ+cylyZXR1cm5bXTt2YXIgbj1jLGk9X24odCxjKTtlPUFvKGUpLHQtPWM7Zm9yKHZhciByPUZlKGksZSk7KytuPHQ7KWUobik7cmV0dXJuIHJ9LEJuLnRvRmluaXRlPUZzLEJuLnRvSW50ZWdlcj1WcyxCbi50b0xlbmd0aD1VcyxCbi50b0xvd2VyPWZ1bmN0aW9uIFBoKHQpe3JldHVybiBXcyh0KS50b0xvd2VyQ2FzZSgpfSxCbi50b051bWJlcj1qcyxCbi50b1NhZmVJbnRlZ2VyPWZ1bmN0aW9uIE5oKHQpe3JldHVybiB0P29pKFZzKHQpLC05MDA3MTk5MjU0NzQwOTkxLHMpOjA9PT10P3Q6MH0sQm4udG9TdHJpbmc9V3MsQm4udG9VcHBlcj1mdW5jdGlvbiBJaCh0KXtyZXR1cm4gV3ModCkudG9VcHBlckNhc2UoKX0sQm4udHJpbT1mdW5jdGlvbiBSaChlLG4saSl7aWYoKGU9V3MoZSkpJiYoaXx8bj09PXQpKXJldHVybiBWZShlKTtpZighZXx8IShuPUFyKG4pKSlyZXR1cm4gZTt2YXIgcj1vbihlKSxvPW9uKG4pO3JldHVybiBGcihyLFdlKHIsbykscWUocixvKSsxKS5qb2luKCIiKX0sQm4udHJpbUVuZD1mdW5jdGlvbiBPaChlLG4saSl7aWYoKGU9V3MoZSkpJiYoaXx8bj09PXQpKXJldHVybiBlLnNsaWNlKDAsYW4oZSkrMSk7aWYoIWV8fCEobj1BcihuKSkpcmV0dXJuIGU7dmFyIHI9b24oZSk7cmV0dXJuIEZyKHIsMCxxZShyLG9uKG4pKSsxKS5qb2luKCIiKX0sQm4udHJpbVN0YXJ0PWZ1bmN0aW9uIHpoKGUsbixpKXtpZigoZT1XcyhlKSkmJihpfHxuPT09dCkpcmV0dXJuIGUucmVwbGFjZShRLCIiKTtpZighZXx8IShuPUFyKG4pKSlyZXR1cm4gZTt2YXIgcj1vbihlKTtyZXR1cm4gRnIocixXZShyLG9uKG4pKSkuam9pbigiIil9LEJuLnRydW5jYXRlPWZ1bmN0aW9uIERoKGUsbil7dmFyIGk9MzAscj0iLi4uIjtpZihTcyhuKSl7dmFyIG89InNlcGFyYXRvciJpbiBuP24uc2VwYXJhdG9yOm87aT0ibGVuZ3RoImluIG4/VnMobi5sZW5ndGgpOmkscj0ib21pc3Npb24iaW4gbj9BcihuLm9taXNzaW9uKTpyfXZhciBhPShlPVdzKGUpKS5sZW5ndGg7aWYoWmUoZSkpe3ZhciBzPW9uKGUpO2E9cy5sZW5ndGh9aWYoaT49YSlyZXR1cm4gZTt2YXIgbD1pLXJuKHIpO2lmKGw8MSlyZXR1cm4gcjt2YXIgYz1zP0ZyKHMsMCxsKS5qb2luKCIiKTplLnNsaWNlKDAsbCk7aWYobz09PXQpcmV0dXJuIGMrcjtpZihzJiYobCs9Yy5sZW5ndGgtbCksa3Mobykpe2lmKGUuc2xpY2UobCkuc2VhcmNoKG8pKXt2YXIgdSxoPWM7Zm9yKG8uZ2xvYmFsfHwobz1FdChvLnNvdXJjZSxXcyhsdC5leGVjKG8pKSsiZyIpKSxvLmxhc3RJbmRleD0wO3U9by5leGVjKGgpOyl2YXIgZD11LmluZGV4O2M9Yy5zbGljZSgwLGQ9PT10P2w6ZCl9fWVsc2UgaWYoZS5pbmRleE9mKEFyKG8pLGwpIT1sKXt2YXIgcD1jLmxhc3RJbmRleE9mKG8pO3A+LTEmJihjPWMuc2xpY2UoMCxwKSl9cmV0dXJuIGMrcn0sQm4udW5lc2NhcGU9ZnVuY3Rpb24gQmgodCl7cmV0dXJuKHQ9V3ModCkpJiZqLnRlc3QodCk/dC5yZXBsYWNlKFYsc24pOnR9LEJuLnVuaXF1ZUlkPWZ1bmN0aW9uIEhoKHQpe3ZhciBlPSsrSXQ7cmV0dXJuIFdzKHQpK2V9LEJuLnVwcGVyQ2FzZT13bCxCbi51cHBlckZpcnN0PVNsLEJuLmVhY2g9SGEsQm4uZWFjaFJpZ2h0PUZhLEJuLmZpcnN0PXBhLFJsKEJuLChHbD17fSxGaShCbiwoZnVuY3Rpb24odCxlKXtOdC5jYWxsKEJuLnByb3RvdHlwZSxlKXx8KEdsW2VdPXQpfSkpLEdsKSx7Y2hhaW46ITF9KSxCbi5WRVJTSU9OPSI0LjE3LjIxIixtZShbImJpbmQiLCJiaW5kS2V5IiwiY3VycnkiLCJjdXJyeVJpZ2h0IiwicGFydGlhbCIsInBhcnRpYWxSaWdodCJdLChmdW5jdGlvbih0KXtCblt0XS5wbGFjZWhvbGRlcj1Cbn0pKSxtZShbImRyb3AiLCJ0YWtlIl0sKGZ1bmN0aW9uKGUsbil7VW4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKGkpe2k9aT09PXQ/MTpnbihWcyhpKSwwKTt2YXIgcj10aGlzLl9fZmlsdGVyZWRfXyYmIW4/bmV3IFVuKHRoaXMpOnRoaXMuY2xvbmUoKTtyZXR1cm4gci5fX2ZpbHRlcmVkX18/ci5fX3Rha2VDb3VudF9fPV9uKGksci5fX3Rha2VDb3VudF9fKTpyLl9fdmlld3NfXy5wdXNoKHtzaXplOl9uKGksYyksdHlwZTplKyhyLl9fZGlyX188MD8iUmlnaHQiOiIiKX0pLHJ9LFVuLnByb3RvdHlwZVtlKyJSaWdodCJdPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJldmVyc2UoKVtlXSh0KS5yZXZlcnNlKCl9fSkpLG1lKFsiZmlsdGVyIiwibWFwIiwidGFrZVdoaWxlIl0sKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZSsxLGk9MT09bnx8Mz09bjtVbi5wcm90b3R5cGVbdF09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jbG9uZSgpO3JldHVybiBlLl9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6QW8odCwzKSx0eXBlOm59KSxlLl9fZmlsdGVyZWRfXz1lLl9fZmlsdGVyZWRfX3x8aSxlfX0pKSxtZShbImhlYWQiLCJsYXN0Il0sKGZ1bmN0aW9uKHQsZSl7dmFyIG49InRha2UiKyhlPyJSaWdodCI6IiIpO1VuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3JldHVybiB0aGlzW25dKDEpLnZhbHVlKClbMF19fSkpLG1lKFsiaW5pdGlhbCIsInRhaWwiXSwoZnVuY3Rpb24odCxlKXt2YXIgbj0iZHJvcCIrKGU/IiI6IlJpZ2h0Iik7VW4ucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19maWx0ZXJlZF9fP25ldyBVbih0aGlzKTp0aGlzW25dKDEpfX0pKSxVbi5wcm90b3R5cGUuY29tcGFjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbHRlcihMbCl9LFVuLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpbHRlcih0KS5oZWFkKCl9LFVuLnByb3RvdHlwZS5maW5kTGFzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkuZmluZCh0KX0sVW4ucHJvdG90eXBlLmludm9rZU1hcD1tcigoZnVuY3Rpb24odCxlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD9uZXcgVW4odGhpcyk6dGhpcy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBLaShuLHQsZSl9KSl9KSksVW4ucHJvdG90eXBlLnJlamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5maWx0ZXIobnMoQW8odCkpKX0sVW4ucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsbil7ZT1WcyhlKTt2YXIgaT10aGlzO3JldHVybiBpLl9fZmlsdGVyZWRfXyYmKGU+MHx8bjwwKT9uZXcgVW4oaSk6KGU8MD9pPWkudGFrZVJpZ2h0KC1lKTplJiYoaT1pLmRyb3AoZSkpLG4hPT10JiYoaT0obj1WcyhuKSk8MD9pLmRyb3BSaWdodCgtbik6aS50YWtlKG4tZSkpLGkpfSxVbi5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLnRha2VXaGlsZSh0KS5yZXZlcnNlKCl9LFVuLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFrZShjKX0sRmkoVW4ucHJvdG90eXBlLChmdW5jdGlvbihlLG4pe3ZhciBpPS9eKD86ZmlsdGVyfGZpbmR8bWFwfHJlamVjdCl8V2hpbGUkLy50ZXN0KG4pLHI9L14oPzpoZWFkfGxhc3QpJC8udGVzdChuKSxvPUJuW3I/InRha2UiKygibGFzdCI9PW4/IlJpZ2h0IjoiIik6bl0sYT1yfHwvXmZpbmQvLnRlc3Qobik7byYmKEJuLnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3ZhciBuPXRoaXMuX193cmFwcGVkX18scz1yP1sxXTphcmd1bWVudHMsbD1uIGluc3RhbmNlb2YgVW4sYz1zWzBdLHU9bHx8aHMobiksaD1mdW5jdGlvbih0KXt2YXIgZT1vLmFwcGx5KEJuLEVlKFt0XSxzKSk7cmV0dXJuIHImJmQ/ZVswXTplfTt1JiZpJiYiZnVuY3Rpb24iPT10eXBlb2YgYyYmMSE9Yy5sZW5ndGgmJihsPXU9ITEpO3ZhciBkPXRoaXMuX19jaGFpbl9fLHA9ISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxmPWEmJiFkLG09bCYmIXA7aWYoIWEmJnUpe249bT9uOm5ldyBVbih0aGlzKTt2YXIgZz1lLmFwcGx5KG4scyk7cmV0dXJuIGcuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpSYSxhcmdzOltoXSx0aGlzQXJnOnR9KSxuZXcgVm4oZyxkKX1yZXR1cm4gZiYmbT9lLmFwcGx5KHRoaXMscyk6KGc9dGhpcy50aHJ1KGgpLGY/cj9nLnZhbHVlKClbMF06Zy52YWx1ZSgpOmcpfSl9KSksbWUoWyJwb3AiLCJwdXNoIiwic2hpZnQiLCJzb3J0Iiwic3BsaWNlIiwidW5zaGlmdCJdLChmdW5jdGlvbih0KXt2YXIgZT1BdFt0XSxuPS9eKD86cHVzaHxzb3J0fHVuc2hpZnQpJC8udGVzdCh0KT8idGFwIjoidGhydSIsaT0vXig/OnBvcHxzaGlmdCkkLy50ZXN0KHQpO0JuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cztpZihpJiYhdGhpcy5fX2NoYWluX18pe3ZhciByPXRoaXMudmFsdWUoKTtyZXR1cm4gZS5hcHBseShocyhyKT9yOltdLHQpfXJldHVybiB0aGlzW25dKChmdW5jdGlvbihuKXtyZXR1cm4gZS5hcHBseShocyhuKT9uOltdLHQpfSkpfX0pKSxGaShVbi5wcm90b3R5cGUsKGZ1bmN0aW9uKHQsZSl7dmFyIG49Qm5bZV07aWYobil7dmFyIGk9bi5uYW1lKyIiO050LmNhbGwoa24saSl8fChrbltpXT1bXSksa25baV0ucHVzaCh7bmFtZTplLGZ1bmM6bn0pfX0pKSxrbltvbyh0LDIpLm5hbWVdPVt7bmFtZToid3JhcHBlciIsZnVuYzp0fV0sVW4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uIEZoKCl7dmFyIHQ9bmV3IFVuKHRoaXMuX193cmFwcGVkX18pO3JldHVybiB0Ll9fYWN0aW9uc19fPVhyKHRoaXMuX19hY3Rpb25zX18pLHQuX19kaXJfXz10aGlzLl9fZGlyX18sdC5fX2ZpbHRlcmVkX189dGhpcy5fX2ZpbHRlcmVkX18sdC5fX2l0ZXJhdGVlc19fPVhyKHRoaXMuX19pdGVyYXRlZXNfXyksdC5fX3Rha2VDb3VudF9fPXRoaXMuX190YWtlQ291bnRfXyx0Ll9fdmlld3NfXz1Ycih0aGlzLl9fdmlld3NfXyksdH0sVW4ucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24gVmgoKXtpZih0aGlzLl9fZmlsdGVyZWRfXyl7dmFyIHQ9bmV3IFVuKHRoaXMpO3QuX19kaXJfXz0tMSx0Ll9fZmlsdGVyZWRfXz0hMH1lbHNlKHQ9dGhpcy5jbG9uZSgpKS5fX2Rpcl9fKj0tMTtyZXR1cm4gdH0sVW4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uIFVoKCl7dmFyIHQ9dGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLGU9dGhpcy5fX2Rpcl9fLG49aHModCksaT1lPDAscj1uP3QubGVuZ3RoOjAsbz0oZnVuY3Rpb24gYSh0LGUsbil7Zm9yKHZhciBpPS0xLHI9bi5sZW5ndGg7KytpPHI7KXt2YXIgbz1uW2ldLGE9by5zaXplO3N3aXRjaChvLnR5cGUpe2Nhc2UiZHJvcCI6dCs9YTticmVhaztjYXNlImRyb3BSaWdodCI6ZS09YTticmVhaztjYXNlInRha2UiOmU9X24oZSx0K2EpO2JyZWFrO2Nhc2UidGFrZVJpZ2h0Ijp0PWduKHQsZS1hKX19cmV0dXJue3N0YXJ0OnQsZW5kOmV9fSkoMCxyLHRoaXMuX192aWV3c19fKSxzPW8uc3RhcnQsbD1vLmVuZCxjPWwtcyx1PWk/bDpzLTEsaD10aGlzLl9faXRlcmF0ZWVzX18sZD1oLmxlbmd0aCxwPTAsZj1fbihjLHRoaXMuX190YWtlQ291bnRfXyk7aWYoIW58fCFpJiZyPT1jJiZmPT1jKXJldHVybiBJcih0LHRoaXMuX19hY3Rpb25zX18pO3ZhciBtPVtdO3Q6Zm9yKDtjLS0mJnA8Zjspe2Zvcih2YXIgZz0tMSxfPXRbdSs9ZV07KytnPGQ7KXt2YXIgeT1oW2ddLHY9eS50eXBlLGI9KDAseS5pdGVyYXRlZSkoXyk7aWYoMj09dilfPWI7ZWxzZSBpZighYil7aWYoMT09diljb250aW51ZSB0O2JyZWFrIHR9fW1bcCsrXT1ffXJldHVybiBtfSxCbi5wcm90b3R5cGUuYXQ9T2EsQm4ucHJvdG90eXBlLmNoYWluPWZ1bmN0aW9uIGpoKCl7cmV0dXJuIElhKHRoaXMpfSxCbi5wcm90b3R5cGUuY29tbWl0PWZ1bmN0aW9uIEdoKCl7cmV0dXJuIG5ldyBWbih0aGlzLnZhbHVlKCksdGhpcy5fX2NoYWluX18pfSxCbi5wcm90b3R5cGUubmV4dD1mdW5jdGlvbiBXaCgpe3RoaXMuX192YWx1ZXNfXz09PXQmJih0aGlzLl9fdmFsdWVzX189SHModGhpcy52YWx1ZSgpKSk7dmFyIGU9dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGg7cmV0dXJue2RvbmU6ZSx2YWx1ZTplP3Q6dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdfX0sQm4ucHJvdG90eXBlLnBsYW50PWZ1bmN0aW9uIHFoKGUpe2Zvcih2YXIgbixpPXRoaXM7aSBpbnN0YW5jZW9mIEZuOyl7dmFyIHI9YWEoaSk7ci5fX2luZGV4X189MCxyLl9fdmFsdWVzX189dCxuP28uX193cmFwcGVkX189cjpuPXI7dmFyIG89cjtpPWkuX193cmFwcGVkX199cmV0dXJuIG8uX193cmFwcGVkX189ZSxufSxCbi5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbiBZaCgpe3ZhciBlPXRoaXMuX193cmFwcGVkX187aWYoZSBpbnN0YW5jZW9mIFVuKXt2YXIgbj1lO3JldHVybiB0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCYmKG49bmV3IFVuKHRoaXMpKSwobj1uLnJldmVyc2UoKSkuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpSYSxhcmdzOlt4YV0sdGhpc0FyZzp0fSksbmV3IFZuKG4sdGhpcy5fX2NoYWluX18pfXJldHVybiB0aGlzLnRocnUoeGEpfSxCbi5wcm90b3R5cGUudG9KU09OPUJuLnByb3RvdHlwZS52YWx1ZU9mPUJuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbiBYaCgpe3JldHVybiBJcih0aGlzLl9fd3JhcHBlZF9fLHRoaXMuX19hY3Rpb25zX18pfSxCbi5wcm90b3R5cGUuZmlyc3Q9Qm4ucHJvdG90eXBlLmhlYWQsYWUmJihCbi5wcm90b3R5cGVbYWVdPWZ1bmN0aW9uICRoKCl7cmV0dXJuIHRoaXN9KSxCbn0pKCk7aWU/KChpZS5leHBvcnRzPWxuKS5fPWxuLG5lLl89bG4pOmVlLl89bG59LmNhbGwodmUpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBNZT0hKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlKTtsZXQgRWUsVGU7ZnVuY3Rpb24gQ2UodCl7RWU9KCF0fHwhdC5zaGltY3NzcHJvcGVydGllcykmJihNZXx8Qm9vbGVhbighbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcLzYwMXxFZGdlXC8xNS8pJiZ3aW5kb3cuQ1NTJiZDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cygiYm94LXNoYWRvdyIsIjAgMCAwIHZhcigtLWZvbykiKSkpfXdpbmRvdy5TaGFkeUNTUyYmdm9pZCAwIT09d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkJiYoVGU9d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkKTtjb25zdCBBZT1Cb29sZWFuKHdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLmRpc2FibGVSdW50aW1lKTt3aW5kb3cuU2hhZHlDU1MmJnZvaWQgMCE9PXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3M/RWU9d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzczp3aW5kb3cuU2hhZHlDU1M/KENlKHdpbmRvdy5TaGFkeUNTUyksd2luZG93LlNoYWR5Q1NTPXZvaWQgMCk6Q2Uod2luZG93LldlYkNvbXBvbmVudHMmJndpbmRvdy5XZWJDb21wb25lbnRzLmZsYWdzKTtjb25zdCBrZT1FZTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jbGFzcyBMZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhcnQ9MCx0aGlzLmVuZD0wLHRoaXMucHJldmlvdXM9bnVsbCx0aGlzLnBhcmVudD1udWxsLHRoaXMucnVsZXM9bnVsbCx0aGlzLnBhcnNlZENzc1RleHQ9IiIsdGhpcy5jc3NUZXh0PSIiLHRoaXMuYXRSdWxlPSExLHRoaXMudHlwZT0wLHRoaXMua2V5ZnJhbWVzTmFtZT0iIix0aGlzLnNlbGVjdG9yPSIiLHRoaXMucGFyc2VkU2VsZWN0b3I9IiJ9fWZ1bmN0aW9uIFBlKHQpe3JldHVybiBOZSgoZnVuY3Rpb24gbih0KXtsZXQgZT1uZXcgTGU7ZS5zdGFydD0wLGUuZW5kPXQubGVuZ3RoO2xldCBuPWU7Zm9yKGxldCBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKWlmKHRbaV09PT1PZSl7bi5ydWxlc3x8KG4ucnVsZXM9W10pO2xldCB0PW4sZT10LnJ1bGVzW3QucnVsZXMubGVuZ3RoLTFdfHxudWxsO249bmV3IExlLG4uc3RhcnQ9aSsxLG4ucGFyZW50PXQsbi5wcmV2aW91cz1lLHQucnVsZXMucHVzaChuKX1lbHNlIHRbaV09PT16ZSYmKG4uZW5kPWkrMSxuPW4ucGFyZW50fHxlKTtyZXR1cm4gZX0pKHQ9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQucmVwbGFjZShEZS5jb21tZW50cywiIikucmVwbGFjZShEZS5wb3J0LCIiKX0pKHQpKSx0KX1mdW5jdGlvbiBOZSh0LGUpe2xldCBuPWUuc3Vic3RyaW5nKHQuc3RhcnQsdC5lbmQtMSk7aWYodC5wYXJzZWRDc3NUZXh0PXQuY3NzVGV4dD1uLnRyaW0oKSx0LnBhcmVudCl7bj1lLnN1YnN0cmluZyh0LnByZXZpb3VzP3QucHJldmlvdXMuZW5kOnQucGFyZW50LnN0YXJ0LHQuc3RhcnQtMSksbj0oZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9cXChbMC05YS1mXXsxLDZ9KVxzL2dpLChmdW5jdGlvbigpe2xldCB0PWFyZ3VtZW50c1sxXSxlPTYtdC5sZW5ndGg7Zm9yKDtlLS07KXQ9IjAiK3Q7cmV0dXJuIlxcIit0fSkpfSkobiksbj1uLnJlcGxhY2UoRGUubXVsdGlwbGVTcGFjZXMsIiAiKSxuPW4uc3Vic3RyaW5nKG4ubGFzdEluZGV4T2YoIjsiKSsxKTtsZXQgaT10LnBhcnNlZFNlbGVjdG9yPXQuc2VsZWN0b3I9bi50cmltKCk7dC5hdFJ1bGU9MD09PWkuaW5kZXhPZihGZSksdC5hdFJ1bGU/MD09PWkuaW5kZXhPZihIZSk/dC50eXBlPVJlLk1FRElBX1JVTEU6aS5tYXRjaChEZS5rZXlmcmFtZXNSdWxlKSYmKHQudHlwZT1SZS5LRVlGUkFNRVNfUlVMRSx0LmtleWZyYW1lc05hbWU9dC5zZWxlY3Rvci5zcGxpdChEZS5tdWx0aXBsZVNwYWNlcykucG9wKCkpOnQudHlwZT0wPT09aS5pbmRleE9mKEJlKT9SZS5NSVhJTl9SVUxFOlJlLlNUWUxFX1JVTEV9bGV0IHI9dC5ydWxlcztpZihyKWZvcihsZXQgdCxuPTAsaT1yLmxlbmd0aDtuPGkmJih0PXJbbl0pO24rKylOZSh0LGUpO3JldHVybiB0fWZ1bmN0aW9uIEllKHQsZSxuPSIiKXtsZXQgaT0iIjtpZih0LmNzc1RleHR8fHQucnVsZXMpe2xldCBuPXQucnVsZXM7aWYobiYmIShmdW5jdGlvbiByKHQpe2xldCBlPXRbMF07cmV0dXJuIEJvb2xlYW4oZSkmJkJvb2xlYW4oZS5zZWxlY3RvcikmJjA9PT1lLnNlbGVjdG9yLmluZGV4T2YoQmUpfSkobikpZm9yKGxldCB0LHI9MCxvPW4ubGVuZ3RoO3I8byYmKHQ9bltyXSk7cisrKWk9SWUodCxlLGkpO2Vsc2UgaT1lP3QuY3NzVGV4dDooZnVuY3Rpb24gbyh0KXtyZXR1cm4oZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5yZXBsYWNlKERlLm1peGluQXBwbHksIiIpLnJlcGxhY2UoRGUudmFyQXBwbHksIiIpfSkodD0oZnVuY3Rpb24gZSh0KXtyZXR1cm4gdC5yZXBsYWNlKERlLmN1c3RvbVByb3AsIiIpLnJlcGxhY2UoRGUubWl4aW5Qcm9wLCIiKX0pKHQpKX0pKHQuY3NzVGV4dCksaT1pLnRyaW0oKSxpJiYoaT0iICAiK2krIlxuIil9cmV0dXJuIGkmJih0LnNlbGVjdG9yJiYobis9dC5zZWxlY3RvcisiICIrT2UrIlxuIiksbis9aSx0LnNlbGVjdG9yJiYobis9emUrIlxuXG4iKSksbn1jb25zdCBSZT17U1RZTEVfUlVMRToxLEtFWUZSQU1FU19SVUxFOjcsTUVESUFfUlVMRTo0LE1JWElOX1JVTEU6MWUzfSxPZT0ieyIsemU9In0iLERlPXtjb21tZW50czovXC9cKlteKl0qXCorKFteLypdW14qXSpcKispKlwvL2dpbSxwb3J0Oi9AaW1wb3J0W147XSo7L2dpbSxjdXN0b21Qcm9wOi8oPzpeW147XC1cc31dKyk/LS1bXjt7fV0qPzpbXnt9O10qPyg/Ols7XG5dfCQpL2dpbSxtaXhpblByb3A6Lyg/Ol5bXjtcLVxzfV0rKT8tLVteO3t9XSo/Oltee307XSo/e1tefV0qP30oPzpbO1xuXXwkKT8vZ2ltLG1peGluQXBwbHk6L0BhcHBseVxzKlwoP1teKTtdKlwpP1xzKig/Ols7XG5dfCQpPy9naW0sdmFyQXBwbHk6L1teOzpdKj86W147XSo/dmFyXChbXjtdKlwpKD86Wztcbl18JCk/L2dpbSxrZXlmcmFtZXNSdWxlOi9eQFteXHNdKmtleWZyYW1lcy8sbXVsdGlwbGVTcGFjZXM6L1xzKy9nfSxCZT0iLS0iLEhlPSJAbWVkaWEiLEZlPSJAIixWZT0vKD86XnxbO1xze11ccyopKC0tW1x3LV0qPylccyo6XHMqKD86KCg/OicoPzpcXCd8LikqPyd8Iig/OlxcInwuKSo/InxcKFteKV0qP1wpfFtefTt7XSkrKXxceyhbXn1dKilcfSg/Oig/PVs7XHN9XSl8JCkpL2dpLFVlPS8oPzpefFxXKylAYXBwbHlccypcKD8oW14pO1xuXSopXCk/L2dpLGplPS9AbWVkaWFccyguKikvLEdlPW5ldyBTZXQ7ZnVuY3Rpb24gV2UodCl7Y29uc3QgZT10LnRleHRDb250ZW50O2lmKCFHZS5oYXMoZSkpe0dlLmFkZChlKTtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC5zZXRBdHRyaWJ1dGUoInNoYWR5LXVuc2NvcGVkIiwiIiksdC50ZXh0Q29udGVudD1lLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9fWZ1bmN0aW9uIHFlKHQpe3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgic2hhZHktdW5zY29wZWQiKX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9mdW5jdGlvbiBZZSh0LGUpe3JldHVybiB0Pygic3RyaW5nIj09dHlwZW9mIHQmJih0PVBlKHQpKSxlJiYkZSh0LGUpLEllKHQsa2UpKToiIn1mdW5jdGlvbiBYZSh0KXtyZXR1cm4hdC5fX2Nzc1J1bGVzJiZ0LnRleHRDb250ZW50JiYodC5fX2Nzc1J1bGVzPVBlKHQudGV4dENvbnRlbnQpKSx0Ll9fY3NzUnVsZXN8fG51bGx9ZnVuY3Rpb24gJGUodCxlLG4saSl7aWYoIXQpcmV0dXJuO2xldCByPSExLG89dC50eXBlO2lmKGkmJm89PT1SZS5NRURJQV9SVUxFKXtsZXQgZT10LnNlbGVjdG9yLm1hdGNoKGplKTtlJiYod2luZG93Lm1hdGNoTWVkaWEoZVsxXSkubWF0Y2hlc3x8KHI9ITApKX1vPT09UmUuU1RZTEVfUlVMRT9lKHQpOm4mJm89PT1SZS5LRVlGUkFNRVNfUlVMRT9uKHQpOm89PT1SZS5NSVhJTl9SVUxFJiYocj0hMCk7bGV0IGE9dC5ydWxlcztpZihhJiYhcilmb3IobGV0IHQscj0wLG89YS5sZW5ndGg7cjxvJiYodD1hW3JdKTtyKyspJGUodCxlLG4saSl9ZnVuY3Rpb24gS2UodCxlKXtsZXQgbj10LmluZGV4T2YoInZhcigiKTtpZigtMT09PW4pcmV0dXJuIGUodCwiIiwiIiwiIik7bGV0IGk9KGZ1bmN0aW9uIHIodCxlKXtsZXQgbj0wO2ZvcihsZXQgaT1lLHI9dC5sZW5ndGg7aTxyO2krKylpZigiKCI9PT10W2ldKW4rKztlbHNlIGlmKCIpIj09PXRbaV0mJjA9PS0tbilyZXR1cm4gaTtyZXR1cm4tMX0pKHQsbiszKSxvPXQuc3Vic3RyaW5nKG4rNCxpKSxhPXQuc3Vic3RyaW5nKDAsbikscz1LZSh0LnN1YnN0cmluZyhpKzEpLGUpLGw9by5pbmRleE9mKCIsIik7cmV0dXJuLTE9PT1sP2UoYSxvLnRyaW0oKSwiIixzKTplKGEsby5zdWJzdHJpbmcoMCxsKS50cmltKCksby5zdWJzdHJpbmcobCsxKS50cmltKCkscyl9d2luZG93LlNoYWR5RE9NJiZ3aW5kb3c7Y29uc3QgWmU9ImNzcy1idWlsZCI7ZnVuY3Rpb24gSmUodCl7cmV0dXJuIiIhPT0oZnVuY3Rpb24gZSh0KXtpZih2b2lkIDAhPT1UZSlyZXR1cm4gVGU7aWYodm9pZCAwPT09dC5fX2Nzc0J1aWxkKXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFplKTtpZihlKXQuX19jc3NCdWlsZD1lO2Vsc2V7Y29uc3QgZT0oZnVuY3Rpb24gZSh0KXtjb25zdCBlPSJ0ZW1wbGF0ZSI9PT10LmxvY2FsTmFtZT90LmNvbnRlbnQuZmlyc3RDaGlsZDp0LmZpcnN0Q2hpbGQ7aWYoZSBpbnN0YW5jZW9mIENvbW1lbnQpe2NvbnN0IHQ9ZS50ZXh0Q29udGVudC50cmltKCkuc3BsaXQoIjoiKTtpZih0WzBdPT09WmUpcmV0dXJuIHRbMV19cmV0dXJuIiJ9KSh0KTsiIiE9PWUmJihmdW5jdGlvbiBuKHQpe2NvbnN0IGU9InRlbXBsYXRlIj09PXQubG9jYWxOYW1lP3QuY29udGVudC5maXJzdENoaWxkOnQuZmlyc3RDaGlsZDtlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSl9Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovKSh0KSx0Ll9fY3NzQnVpbGQ9ZX19cmV0dXJuIHQuX19jc3NCdWlsZHx8IiJ9KSh0KX1mdW5jdGlvbiBRZSh0LGUpe2ZvcihsZXQgbiBpbiBlKW51bGw9PT1uP3Quc3R5bGUucmVtb3ZlUHJvcGVydHkobik6dC5zdHlsZS5zZXRQcm9wZXJ0eShuLGVbbl0pfWZ1bmN0aW9uIHRuKHQsZSl7Y29uc3Qgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGUpO3JldHVybiBuP24udHJpbSgpOiIifQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBlbj0vO1xzKi9tLG5uPS9eXHMqKGluaXRpYWwpfChpbmhlcml0KVxzKiQvLHJuPS9ccyohaW1wb3J0YW50LztjbGFzcyBvbntjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD17fX1zZXQodCxlKXt0PXQudHJpbSgpLHRoaXMuX21hcFt0XT17cHJvcGVydGllczplLGRlcGVuZGFudHM6e319fWdldCh0KXtyZXR1cm4gdD10LnRyaW0oKSx0aGlzLl9tYXBbdF18fG51bGx9fWxldCBhbj1udWxsO2NsYXNzIHNue2NvbnN0cnVjdG9yKCl7dGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbCx0aGlzLl9tZWFzdXJlRWxlbWVudD1udWxsLHRoaXMuX21hcD1uZXcgb259ZGV0ZWN0TWl4aW4odCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7Y29uc3QgZT1VZS50ZXN0KHQpfHxWZS50ZXN0KHQpO3JldHVybiBVZS5sYXN0SW5kZXg9MCxWZS5sYXN0SW5kZXg9MCxlfSkodCl9Z2F0aGVyU3R5bGVzKHQpe2NvbnN0IGU9KGZ1bmN0aW9uIG4odCl7Y29uc3QgZT1bXSxuPXQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyl7Y29uc3QgaT1uW3RdO3FlKGkpP01lfHwoV2UoaSksaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpKTooZS5wdXNoKGkudGV4dENvbnRlbnQpLGkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpKSl9cmV0dXJuIGUuam9pbigiIikudHJpbSgpfSkodC5jb250ZW50KTtpZihlKXtjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIG4udGV4dENvbnRlbnQ9ZSx0LmNvbnRlbnQuaW5zZXJ0QmVmb3JlKG4sdC5jb250ZW50LmZpcnN0Q2hpbGQpLG59cmV0dXJuIG51bGx9dHJhbnNmb3JtVGVtcGxhdGUodCxlKXt2b2lkIDA9PT10Ll9nYXRoZXJlZFN0eWxlJiYodC5fZ2F0aGVyZWRTdHlsZT10aGlzLmdhdGhlclN0eWxlcyh0KSk7Y29uc3Qgbj10Ll9nYXRoZXJlZFN0eWxlO3JldHVybiBuP3RoaXMudHJhbnNmb3JtU3R5bGUobixlKTpudWxsfXRyYW5zZm9ybVN0eWxlKHQsZT0iIil7bGV0IG49WGUodCk7cmV0dXJuIHRoaXMudHJhbnNmb3JtUnVsZXMobixlKSx0LnRleHRDb250ZW50PVllKG4pLG59dHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl7bGV0IGU9WGUodCk7cmV0dXJuICRlKGUsKHQ9PnsiOnJvb3QiPT09dC5zZWxlY3RvciYmKHQuc2VsZWN0b3I9Imh0bWwiKSx0aGlzLnRyYW5zZm9ybVJ1bGUodCl9KSksdC50ZXh0Q29udGVudD1ZZShlKSxlfXRyYW5zZm9ybVJ1bGVzKHQsZSl7dGhpcy5fY3VycmVudEVsZW1lbnQ9ZSwkZSh0LCh0PT57dGhpcy50cmFuc2Zvcm1SdWxlKHQpfSkpLHRoaXMuX2N1cnJlbnRFbGVtZW50PW51bGx9dHJhbnNmb3JtUnVsZSh0KXt0LmNzc1RleHQ9dGhpcy50cmFuc2Zvcm1Dc3NUZXh0KHQucGFyc2VkQ3NzVGV4dCx0KSwiOnJvb3QiPT09dC5zZWxlY3RvciYmKHQuc2VsZWN0b3I9Ijpob3N0ID4gKiIpfXRyYW5zZm9ybUNzc1RleHQodCxlKXtyZXR1cm4gdD10LnJlcGxhY2UoVmUsKCh0LG4saSxyKT0+dGhpcy5fcHJvZHVjZUNzc1Byb3BlcnRpZXModCxuLGkscixlKSkpLHRoaXMuX2NvbnN1bWVDc3NQcm9wZXJ0aWVzKHQsZSl9X2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpe3JldHVybiB0aGlzLl9tZWFzdXJlRWxlbWVudHx8KHRoaXMuX21lYXN1cmVFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKSx0aGlzLl9tZWFzdXJlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFwcGx5LXNoaW0tbWVhc3VyZSIsIiIpLHRoaXMuX21lYXN1cmVFbGVtZW50LnN0eWxlLmFsbD0iaW5pdGlhbCIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLl9tZWFzdXJlRWxlbWVudCkpLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lYXN1cmVFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHQpfV9mYWxsYmFja3NGcm9tUHJldmlvdXNSdWxlcyh0KXtsZXQgZT10O2Zvcig7ZS5wYXJlbnQ7KWU9ZS5wYXJlbnQ7Y29uc3Qgbj17fTtsZXQgaT0hMTtyZXR1cm4gJGUoZSwoZT0+e2k9aXx8ZT09PXQsaXx8ZS5zZWxlY3Rvcj09PXQuc2VsZWN0b3ImJk9iamVjdC5hc3NpZ24obix0aGlzLl9jc3NUZXh0VG9NYXAoZS5wYXJzZWRDc3NUZXh0KSl9KSksbn1fY29uc3VtZUNzc1Byb3BlcnRpZXModCxlKXtsZXQgbj1udWxsO2Zvcig7bj1VZS5leGVjKHQpOyl7bGV0IGk9blswXSxyPW5bMV0sbz1uLmluZGV4LGE9bytpLmluZGV4T2YoIkBhcHBseSIpLHM9bytpLmxlbmd0aCxsPXQuc2xpY2UoMCxhKSxjPXQuc2xpY2UocyksdT1lP3RoaXMuX2ZhbGxiYWNrc0Zyb21QcmV2aW91c1J1bGVzKGUpOnt9O09iamVjdC5hc3NpZ24odSx0aGlzLl9jc3NUZXh0VG9NYXAobCkpO2xldCBoPXRoaXMuX2F0QXBwbHlUb0Nzc1Byb3BlcnRpZXMocix1KTt0PWAke2x9JHtofSR7Y31gLFVlLmxhc3RJbmRleD1vK2gubGVuZ3RofXJldHVybiB0fV9hdEFwcGx5VG9Dc3NQcm9wZXJ0aWVzKHQsZSl7dD10LnJlcGxhY2UoZW4sIiIpO2xldCBuPVtdLGk9dGhpcy5fbWFwLmdldCh0KTtpZihpfHwodGhpcy5fbWFwLnNldCh0LHt9KSxpPXRoaXMuX21hcC5nZXQodCkpLGkpe2xldCByLG8sYTt0aGlzLl9jdXJyZW50RWxlbWVudCYmKGkuZGVwZW5kYW50c1t0aGlzLl9jdXJyZW50RWxlbWVudF09ITApO2NvbnN0IHM9aS5wcm9wZXJ0aWVzO2ZvcihyIGluIHMpYT1lJiZlW3JdLG89W3IsIjogdmFyKCIsdCwiXy1fIixyXSxhJiZvLnB1c2goIiwiLGEucmVwbGFjZShybiwiIikpLG8ucHVzaCgiKSIpLHJuLnRlc3Qoc1tyXSkmJm8ucHVzaCgiICFpbXBvcnRhbnQiKSxuLnB1c2goby5qb2luKCIiKSl9cmV0dXJuIG4uam9pbigiOyAiKX1fcmVwbGFjZUluaXRpYWxPckluaGVyaXQodCxlKXtsZXQgbj1ubi5leGVjKGUpO3JldHVybiBuJiYoZT1uWzFdP3RoaXMuX2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpOiJhcHBseS1zaGltLWluaGVyaXQiKSxlfV9jc3NUZXh0VG9NYXAodCxlPSExKXtsZXQgbixpLHI9dC5zcGxpdCgiOyIpLG89e307Zm9yKGxldCB0LGEscz0wO3M8ci5sZW5ndGg7cysrKXQ9cltzXSx0JiYoYT10LnNwbGl0KCI6IiksYS5sZW5ndGg+MSYmKG49YVswXS50cmltKCksaT1hLnNsaWNlKDEpLmpvaW4oIjoiKSxlJiYoaT10aGlzLl9yZXBsYWNlSW5pdGlhbE9ySW5oZXJpdChuLGkpKSxvW25dPWkpKTtyZXR1cm4gb31faW52YWxpZGF0ZU1peGluRW50cnkodCl7aWYoYW4pZm9yKGxldCBlIGluIHQuZGVwZW5kYW50cyllIT09dGhpcy5fY3VycmVudEVsZW1lbnQmJmFuKGUpfV9wcm9kdWNlQ3NzUHJvcGVydGllcyh0LGUsbixpLHIpe2lmKG4mJktlKG4sKCh0LGUpPT57ZSYmdGhpcy5fbWFwLmdldChlKSYmKGk9YEBhcHBseSAke2V9O2ApfSkpLCFpKXJldHVybiB0O2xldCBvPXRoaXMuX2NvbnN1bWVDc3NQcm9wZXJ0aWVzKCIiK2ksciksYT10LnNsaWNlKDAsdC5pbmRleE9mKCItLSIpKSxzPXRoaXMuX2Nzc1RleHRUb01hcChvLCEwKSxsPXMsYz10aGlzLl9tYXAuZ2V0KGUpLHU9YyYmYy5wcm9wZXJ0aWVzO3U/bD1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUodSkscyk6dGhpcy5fbWFwLnNldChlLGwpO2xldCBoLGQscD1bXSxmPSExO2ZvcihoIGluIGwpZD1zW2hdLHZvaWQgMD09PWQmJihkPSJpbml0aWFsIiksdSYmIShoIGluIHUpJiYoZj0hMCkscC5wdXNoKGAke2V9Xy1fJHtofTogJHtkfWApO3JldHVybiBmJiZ0aGlzLl9pbnZhbGlkYXRlTWl4aW5FbnRyeShjKSxjJiYoYy5wcm9wZXJ0aWVzPWwpLG4mJihhPWAke3R9OyR7YX1gKSxgJHthfSR7cC5qb2luKCI7ICIpfTtgfX1zbi5wcm90b3R5cGUuZGV0ZWN0TWl4aW49c24ucHJvdG90eXBlLmRldGVjdE1peGluLHNuLnByb3RvdHlwZS50cmFuc2Zvcm1TdHlsZT1zbi5wcm90b3R5cGUudHJhbnNmb3JtU3R5bGUsc24ucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlPXNuLnByb3RvdHlwZS50cmFuc2Zvcm1DdXN0b21TdHlsZSxzbi5wcm90b3R5cGUudHJhbnNmb3JtUnVsZXM9c24ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGVzLHNuLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlPXNuLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlLHNuLnByb3RvdHlwZS50cmFuc2Zvcm1UZW1wbGF0ZT1zbi5wcm90b3R5cGUudHJhbnNmb3JtVGVtcGxhdGUsc24ucHJvdG90eXBlLl9zZXBhcmF0b3I9Il8tXyIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHNuLnByb3RvdHlwZSwiaW52YWxpZENhbGxiYWNrIix7Z2V0OigpPT5hbixzZXQodCl7YW49dH19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgbG49e30sY249Il9hcHBseVNoaW1DdXJyZW50VmVyc2lvbiIsdW49Il9hcHBseVNoaW1OZXh0VmVyc2lvbiIsaG49Il9hcHBseVNoaW1WYWxpZGF0aW5nVmVyc2lvbiIsZG49UHJvbWlzZS5yZXNvbHZlKCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovZnVuY3Rpb24gcG4odCl7bGV0IGU9bG5bdF07ZSYmKGZ1bmN0aW9uIG4odCl7dFtjbl09dFtjbl18fDAsdFtobl09dFtobl18fDAsdFt1bl09KHRbdW5dfHwwKSsxfSkoZSl9ZnVuY3Rpb24gZm4odCl7cmV0dXJuIHRbY25dPT09dFt1bl19Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmxldCBtbixnbj1udWxsLF9uPXdpbmRvdy5IVE1MSW1wb3J0cyYmd2luZG93LkhUTUxJbXBvcnRzLndoZW5SZWFkeXx8bnVsbDtmdW5jdGlvbiB5bih0KXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7X24/X24odCk6KGdufHwoZ249bmV3IFByb21pc2UoKHQ9Pnttbj10fSkpLCJjb21wbGV0ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlP21uKCk6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsKCgpPT57ImNvbXBsZXRlIj09PWRvY3VtZW50LnJlYWR5U3RhdGUmJm1uKCl9KSkpLGduLnRoZW4oKGZ1bmN0aW9uKCl7dCYmdCgpfSkpKX0pKX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jb25zdCB2bj0iX19zZWVuQnlTaGFkeUNTUyIsYm49Il9fc2hhZHlDU1NDYWNoZWRTdHlsZSI7bGV0IHhuPW51bGwsd249bnVsbDtjbGFzcyBTbntjb25zdHJ1Y3Rvcigpe3RoaXMuY3VzdG9tU3R5bGVzPVtdLHRoaXMuZW5xdWV1ZWQ9ITEseW4oKCgpPT57d2luZG93LlNoYWR5Q1NTLmZsdXNoQ3VzdG9tU3R5bGVzJiZ3aW5kb3cuU2hhZHlDU1MuZmx1c2hDdXN0b21TdHlsZXMoKX0pKX1lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl7IXRoaXMuZW5xdWV1ZWQmJnduJiYodGhpcy5lbnF1ZXVlZD0hMCx5bih3bikpfWFkZEN1c3RvbVN0eWxlKHQpe3Rbdm5dfHwodFt2bl09ITAsdGhpcy5jdXN0b21TdHlsZXMucHVzaCh0KSx0aGlzLmVucXVldWVEb2N1bWVudFZhbGlkYXRpb24oKSl9Z2V0U3R5bGVGb3JDdXN0b21TdHlsZSh0KXtpZih0W2JuXSlyZXR1cm4gdFtibl07bGV0IGU7cmV0dXJuIGU9dC5nZXRTdHlsZT90LmdldFN0eWxlKCk6dCxlfXByb2Nlc3NTdHlsZXMoKXtjb25zdCB0PXRoaXMuY3VzdG9tU3R5bGVzO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtjb25zdCBuPXRbZV07aWYobltibl0pY29udGludWU7Y29uc3QgaT10aGlzLmdldFN0eWxlRm9yQ3VzdG9tU3R5bGUobik7aWYoaSl7Y29uc3QgdD1pLl9fYXBwbGllZEVsZW1lbnR8fGk7eG4mJnhuKHQpLG5bYm5dPXR9fXJldHVybiB0fX1Tbi5wcm90b3R5cGUuYWRkQ3VzdG9tU3R5bGU9U24ucHJvdG90eXBlLmFkZEN1c3RvbVN0eWxlLFNuLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlPVNuLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlLFNuLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzPVNuLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNuLnByb3RvdHlwZSx7dHJhbnNmb3JtQ2FsbGJhY2s6e2dldDooKT0+eG4sc2V0KHQpe3huPXR9fSx2YWxpZGF0ZUNhbGxiYWNrOntnZXQ6KCk9PnduLHNldCh0KXtsZXQgZT0hMTt3bnx8KGU9ITApLHduPXQsZSYmdGhpcy5lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl9fX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBNbj1uZXcgc247Y2xhc3MgRW57Y29uc3RydWN0b3IoKXt0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlPW51bGwsTW4uaW52YWxpZENhbGxiYWNrPXBufWVuc3VyZSgpe3RoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2V8fHdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSYmKHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2U9d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlLHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UudHJhbnNmb3JtQ2FsbGJhY2s9dD0+e01uLnRyYW5zZm9ybUN1c3RvbVN0eWxlKHQpfSx0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLnZhbGlkYXRlQ2FsbGJhY2s9KCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS5lbnF1ZXVlZCYmdGhpcy5mbHVzaEN1c3RvbVN0eWxlcygpfSkpfSl9cHJlcGFyZVRlbXBsYXRlKHQsZSl7aWYodGhpcy5lbnN1cmUoKSxKZSh0KSlyZXR1cm47bG5bZV09dDtsZXQgbj1Nbi50cmFuc2Zvcm1UZW1wbGF0ZSh0LGUpO3QuX3N0eWxlQXN0PW59Zmx1c2hDdXN0b21TdHlsZXMoKXtpZih0aGlzLmVuc3VyZSgpLCF0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlKXJldHVybjtsZXQgdD10aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLnByb2Nlc3NTdHlsZXMoKTtpZih0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLmVucXVldWVkKXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IG49dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKHRbZV0pO24mJk1uLnRyYW5zZm9ybUN1c3RvbVN0eWxlKG4pfXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQ9ITF9fXN0eWxlU3VidHJlZSh0LGUpe2lmKHRoaXMuZW5zdXJlKCksZSYmUWUodCxlKSx0LnNoYWRvd1Jvb3Qpe3RoaXMuc3R5bGVFbGVtZW50KHQpO2xldCBlPXQuc2hhZG93Um9vdC5jaGlsZHJlbnx8dC5zaGFkb3dSb290LmNoaWxkTm9kZXM7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5zdHlsZVN1YnRyZWUoZVt0XSl9ZWxzZXtsZXQgZT10LmNoaWxkcmVufHx0LmNoaWxkTm9kZXM7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5zdHlsZVN1YnRyZWUoZVt0XSl9fXN0eWxlRWxlbWVudCh0KXt0aGlzLmVuc3VyZSgpO2xldHtpczplfT0oZnVuY3Rpb24gbih0KXtsZXQgZT10LmxvY2FsTmFtZSxuPSIiLGk9IiI7cmV0dXJuIGU/ZS5pbmRleE9mKCItIik+LTE/bj1lOihpPWUsbj10LmdldEF0dHJpYnV0ZSYmdC5nZXRBdHRyaWJ1dGUoImlzIil8fCIiKToobj10LmlzLGk9dC5leHRlbmRzKSx7aXM6bix0eXBlRXh0ZW5zaW9uOml9fSkodCksaT1sbltlXTtpZigoIWl8fCFKZShpKSkmJmkmJiFmbihpKSl7KGZ1bmN0aW9uIG4odCl7cmV0dXJuIWZuKHQpJiZ0W2huXT09PXRbdW5dfSkoaSl8fCh0aGlzLnByZXBhcmVUZW1wbGF0ZShpLGUpLChmdW5jdGlvbiByKHQpe3RbaG5dPXRbdW5dLHQuX3ZhbGlkYXRpbmd8fCh0Ll92YWxpZGF0aW5nPSEwLGRuLnRoZW4oKGZ1bmN0aW9uKCl7dFtjbl09dFt1bl0sdC5fdmFsaWRhdGluZz0hMX0pKSl9KShpKSk7bGV0IG89dC5zaGFkb3dSb290O2lmKG8pe2xldCB0PW8ucXVlcnlTZWxlY3Rvcigic3R5bGUiKTt0JiYodC5fX2Nzc1J1bGVzPWkuX3N0eWxlQXN0LHQudGV4dENvbnRlbnQ9WWUoaS5fc3R5bGVBc3QpKX19fXN0eWxlRG9jdW1lbnQodCl7dGhpcy5lbnN1cmUoKSx0aGlzLnN0eWxlU3VidHJlZShkb2N1bWVudC5ib2R5LHQpfX1pZighd2luZG93LlNoYWR5Q1NTfHwhd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltKXtjb25zdCB0PW5ldyBFbjtsZXQgZT13aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZTt3aW5kb3cuU2hhZHlDU1M9e3ByZXBhcmVUZW1wbGF0ZShlLG4saSl7dC5mbHVzaEN1c3RvbVN0eWxlcygpLHQucHJlcGFyZVRlbXBsYXRlKGUsbil9LHByZXBhcmVUZW1wbGF0ZVN0eWxlcyh0LGUsbil7d2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZSh0LGUsbil9LHByZXBhcmVUZW1wbGF0ZURvbSh0LGUpe30sc3R5bGVTdWJ0cmVlKGUsbil7dC5mbHVzaEN1c3RvbVN0eWxlcygpLHQuc3R5bGVTdWJ0cmVlKGUsbil9LHN0eWxlRWxlbWVudChlKXt0LmZsdXNoQ3VzdG9tU3R5bGVzKCksdC5zdHlsZUVsZW1lbnQoZSl9LHN0eWxlRG9jdW1lbnQoZSl7dC5mbHVzaEN1c3RvbVN0eWxlcygpLHQuc3R5bGVEb2N1bWVudChlKX0sZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlOih0LGUpPT50bih0LGUpLGZsdXNoQ3VzdG9tU3R5bGVzKCl7dC5mbHVzaEN1c3RvbVN0eWxlcygpfSxuYXRpdmVDc3M6a2UsbmF0aXZlU2hhZG93Ok1lLGNzc0J1aWxkOlRlLGRpc2FibGVSdW50aW1lOkFlfSxlJiYod2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlPWUpfXdpbmRvdy5TaGFkeUNTUy5BcHBseVNoaW09TW47Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNsYXNzIFRue2NvbnN0cnVjdG9yKCl7dGhpcy5fYXN5bmNNb2R1bGU9bnVsbCx0aGlzLl9jYWxsYmFjaz1udWxsLHRoaXMuX3RpbWVyPW51bGx9c2V0Q29uZmlnKHQsZSl7dGhpcy5fYXN5bmNNb2R1bGU9dCx0aGlzLl9jYWxsYmFjaz1lLHRoaXMuX3RpbWVyPXRoaXMuX2FzeW5jTW9kdWxlLnJ1bigoKCk9Pnt0aGlzLl90aW1lcj1udWxsLENuLmRlbGV0ZSh0aGlzKSx0aGlzLl9jYWxsYmFjaygpfSkpfWNhbmNlbCgpe3RoaXMuaXNBY3RpdmUoKSYmKHRoaXMuX2NhbmNlbEFzeW5jKCksQ24uZGVsZXRlKHRoaXMpKX1fY2FuY2VsQXN5bmMoKXt0aGlzLmlzQWN0aXZlKCkmJih0aGlzLl9hc3luY01vZHVsZS5jYW5jZWwodGhpcy5fdGltZXIpLHRoaXMuX3RpbWVyPW51bGwpfWZsdXNoKCl7dGhpcy5pc0FjdGl2ZSgpJiYodGhpcy5jYW5jZWwoKSx0aGlzLl9jYWxsYmFjaygpKX1pc0FjdGl2ZSgpe3JldHVybiBudWxsIT10aGlzLl90aW1lcn1zdGF0aWMgZGVib3VuY2UodCxlLG4pe3JldHVybiB0IGluc3RhbmNlb2YgVG4/dC5fY2FuY2VsQXN5bmMoKTp0PW5ldyBUbix0LnNldENvbmZpZyhlLG4pLHR9fWxldCBDbj1uZXcgU2V0O2NvbnN0IEFuPWZ1bmN0aW9uKHQpe0NuLmFkZCh0KX0sa249ZnVuY3Rpb24oKXtjb25zdCB0PUJvb2xlYW4oQ24uc2l6ZSk7cmV0dXJuIENuLmZvckVhY2goKHQ9Pnt0cnl7dC5mbHVzaCgpfWNhdGNoKHQpe3NldFRpbWVvdXQoKCgpPT57dGhyb3cgdH0pKX19KSksdH07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmxldCBMbj0ic3RyaW5nIj09dHlwZW9mIGRvY3VtZW50LmhlYWQuc3R5bGUudG91Y2hBY3Rpb24sUG49Il9fcG9seW1lckdlc3R1cmVzIixObj0iX19wb2x5bWVyR2VzdHVyZXNIYW5kbGVkIixJbj0iX19wb2x5bWVyR2VzdHVyZXNUb3VjaEFjdGlvbiIsUm49WyJtb3VzZWRvd24iLCJtb3VzZW1vdmUiLCJtb3VzZXVwIiwiY2xpY2siXSxPbj1bMCwxLDQsMl0sem49KGZ1bmN0aW9uKCl7dHJ5e3JldHVybiAxPT09bmV3IE1vdXNlRXZlbnQoInRlc3QiLHtidXR0b25zOjF9KS5idXR0b25zfWNhdGNoKHQpe3JldHVybiExfX0pKCk7ZnVuY3Rpb24gRG4odCl7cmV0dXJuIFJuLmluZGV4T2YodCk+LTF9bGV0IEJuPSExO2Z1bmN0aW9uIEhuKHQpe2lmKCFEbih0KSYmInRvdWNoZW5kIiE9PXQpcmV0dXJuIExuJiZCbiYmdj97cGFzc2l2ZTohMH06dm9pZCAwfSEoZnVuY3Rpb24oKXt0cnl7bGV0IHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0KCl7Qm49ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsdCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsdCl9Y2F0Y2godCl7fX0pKCk7bGV0IEZuPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86W29hXWR8aG9uZSl8QW5kcm9pZC8pO2NvbnN0IFZuPVtdLFVuPXtidXR0b246ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLG1ldGVyOiEwLG91dHB1dDohMCx0ZXh0YXJlYTohMCxwcm9ncmVzczohMCxzZWxlY3Q6ITB9LGpuPXtidXR0b246ITAsY29tbWFuZDohMCxmaWVsZHNldDohMCxpbnB1dDohMCxrZXlnZW46ITAsb3B0Z3JvdXA6ITAsb3B0aW9uOiEwLHNlbGVjdDohMCx0ZXh0YXJlYTohMH07ZnVuY3Rpb24gR24odCl7bGV0IGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5sYWJlbHN8fFtdKTtpZighZS5sZW5ndGgpe2U9W107bGV0IG49dC5nZXRSb290Tm9kZSgpO2lmKHQuaWQpe2xldCBpPW4ucXVlcnlTZWxlY3RvckFsbChgbGFiZWxbZm9yID0gJHt0LmlkfV1gKTtmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyllLnB1c2goaVt0XSl9fXJldHVybiBlfWxldCBXbj1mdW5jdGlvbih0KXtsZXQgZT10LnNvdXJjZUNhcGFiaWxpdGllcztpZigoIWV8fGUuZmlyZXNUb3VjaEV2ZW50cykmJih0W05uXT17c2tpcDohMH0sImNsaWNrIj09PXQudHlwZSkpe2xldCBlPSExLG49Sm4odCk7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kyspe2lmKG5bdF0ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSlpZigibGFiZWwiPT09blt0XS5sb2NhbE5hbWUpVm4ucHVzaChuW3RdKTtlbHNlIGlmKFVuW25bdF0ubG9jYWxOYW1lXSl7bGV0IGk9R24oblt0XSk7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0KyspZT1lfHxWbi5pbmRleE9mKGlbdF0pPi0xfWlmKG5bdF09PT1Ybi5tb3VzZS50YXJnZXQpcmV0dXJufWlmKGUpcmV0dXJuO3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpfX07ZnVuY3Rpb24gcW4odCl7bGV0IGU9Rm4/WyJjbGljayJdOlJuO2ZvcihsZXQgbixpPTA7aTxlLmxlbmd0aDtpKyspbj1lW2ldLHQ/KFZuLmxlbmd0aD0wLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIobixXbiwhMCkpOmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobixXbiwhMCl9ZnVuY3Rpb24gWW4odCl7bGV0IGU9dC50eXBlO2lmKCFEbihlKSlyZXR1cm4hMTtpZigibW91c2Vtb3ZlIj09PWUpe2xldCBlPXZvaWQgMD09PXQuYnV0dG9ucz8xOnQuYnV0dG9ucztyZXR1cm4gdCBpbnN0YW5jZW9mIHdpbmRvdy5Nb3VzZUV2ZW50JiYhem4mJihlPU9uW3Qud2hpY2hdfHwwKSxCb29sZWFuKDEmZSl9cmV0dXJuIDA9PT0odm9pZCAwPT09dC5idXR0b24/MDp0LmJ1dHRvbil9bGV0IFhuPXttb3VzZTp7dGFyZ2V0Om51bGwsbW91c2VJZ25vcmVKb2I6bnVsbH0sdG91Y2g6e3g6MCx5OjAsaWQ6LTEsc2Nyb2xsRGVjaWRlZDohMX19O2Z1bmN0aW9uICRuKHQsZSxuKXt0Lm1vdmVmbj1lLHQudXBmbj1uLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsbil9ZnVuY3Rpb24gS24odCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0Lm1vdmVmbiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdC51cGZuKSx0Lm1vdmVmbj1udWxsLHQudXBmbj1udWxsfWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIiwoZnVuY3Rpb24gWm4odCl7WG4ubW91c2UubW91c2VJZ25vcmVKb2J8fHFuKCEwKSxYbi5tb3VzZS50YXJnZXQ9Sm4odClbMF0sWG4ubW91c2UubW91c2VJZ25vcmVKb2I9VG4uZGVib3VuY2UoWG4ubW91c2UubW91c2VJZ25vcmVKb2IsZ3QuYWZ0ZXIoMjUwMCksKGZ1bmN0aW9uKCl7cW4oKSxYbi5tb3VzZS50YXJnZXQ9bnVsbCxYbi5tb3VzZS5tb3VzZUlnbm9yZUpvYj1udWxsfSkpfSksISFCbiYme3Bhc3NpdmU6ITB9KTtjb25zdCBKbj13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoP3dpbmRvdy5TaGFkeURPTS5jb21wb3NlZFBhdGg6dD0+dC5jb21wb3NlZFBhdGgmJnQuY29tcG9zZWRQYXRoKCl8fFtdLFFuPXt9LHRpPVtdO2Z1bmN0aW9uIGVpKHQpe2NvbnN0IGU9Sm4odCk7cmV0dXJuIGUubGVuZ3RoPjA/ZVswXTp0LnRhcmdldH1mdW5jdGlvbiBuaSh0KXtsZXQgZSxuPXQudHlwZSxpPXQuY3VycmVudFRhcmdldFtQbl07aWYoIWkpcmV0dXJuO2xldCByPWlbbl07aWYocil7aWYoIXRbTm5dJiYodFtObl09e30sInRvdWNoIj09PW4uc2xpY2UoMCw1KSkpe2xldCBlPSh0PXQpLmNoYW5nZWRUb3VjaGVzWzBdO2lmKCJ0b3VjaHN0YXJ0Ij09PW4mJjE9PT10LnRvdWNoZXMubGVuZ3RoJiYoWG4udG91Y2guaWQ9ZS5pZGVudGlmaWVyKSxYbi50b3VjaC5pZCE9PWUuaWRlbnRpZmllcilyZXR1cm47TG58fCJ0b3VjaHN0YXJ0IiE9PW4mJiJ0b3VjaG1vdmUiIT09bnx8KGZ1bmN0aW9uIG8odCl7bGV0IGU9dC5jaGFuZ2VkVG91Y2hlc1swXSxuPXQudHlwZTtpZigidG91Y2hzdGFydCI9PT1uKVhuLnRvdWNoLng9ZS5jbGllbnRYLFhuLnRvdWNoLnk9ZS5jbGllbnRZLFhuLnRvdWNoLnNjcm9sbERlY2lkZWQ9ITE7ZWxzZSBpZigidG91Y2htb3ZlIj09PW4pe2lmKFhuLnRvdWNoLnNjcm9sbERlY2lkZWQpcmV0dXJuO1huLnRvdWNoLnNjcm9sbERlY2lkZWQ9ITA7bGV0IG49KGZ1bmN0aW9uIGkodCl7bGV0IGU9ImF1dG8iLG49Sm4odCk7Zm9yKGxldCB0LGk9MDtpPG4ubGVuZ3RoO2krKylpZih0PW5baV0sdFtJbl0pe2U9dFtJbl07YnJlYWt9cmV0dXJuIGV9KSh0KSxpPSExLHI9TWF0aC5hYnMoWG4udG91Y2gueC1lLmNsaWVudFgpLG89TWF0aC5hYnMoWG4udG91Y2gueS1lLmNsaWVudFkpO3QuY2FuY2VsYWJsZSYmKCJub25lIj09PW4/aT0hMDoicGFuLXgiPT09bj9pPW8+cjoicGFuLXkiPT09biYmKGk9cj5vKSksaT90LnByZXZlbnREZWZhdWx0KCk6c2koInRyYWNrIil9fSkodCl9aWYoZT10W05uXSwhZS5za2lwKXtmb3IobGV0IG4saT0wO2k8dGkubGVuZ3RoO2krKyluPXRpW2ldLHJbbi5uYW1lXSYmIWVbbi5uYW1lXSYmbi5mbG93JiZuLmZsb3cuc3RhcnQuaW5kZXhPZih0LnR5cGUpPi0xJiZuLnJlc2V0JiZuLnJlc2V0KCk7Zm9yKGxldCBpLG89MDtvPHRpLmxlbmd0aDtvKyspaT10aVtvXSxyW2kubmFtZV0mJiFlW2kubmFtZV0mJihlW2kubmFtZV09ITAsaVtuXSh0KSl9fX1mdW5jdGlvbiBpaSh0LGUsbil7cmV0dXJuISFRbltlXSYmKChmdW5jdGlvbiBpKHQsZSxuKXtsZXQgaT1RbltlXSxyPWkuZGVwcyxvPWkubmFtZSxhPXRbUG5dO2F8fCh0W1BuXT1hPXt9KTtmb3IobGV0IGUsbixpPTA7aTxyLmxlbmd0aDtpKyspZT1yW2ldLEZuJiZEbihlKSYmImNsaWNrIiE9PWV8fChuPWFbZV0sbnx8KGFbZV09bj17X2NvdW50OjB9KSwwPT09bi5fY291bnQmJnQuYWRkRXZlbnRMaXN0ZW5lcihlLG5pLEhuKGUpKSxuW29dPShuW29dfHwwKSsxLG4uX2NvdW50PShuLl9jb3VudHx8MCkrMSk7dC5hZGRFdmVudExpc3RlbmVyKGUsbiksaS50b3VjaEFjdGlvbiYmb2kodCxpLnRvdWNoQWN0aW9uKX0pKHQsZSxuKSwhMCl9ZnVuY3Rpb24gcmkodCl7dGkucHVzaCh0KTtmb3IobGV0IGU9MDtlPHQuZW1pdHMubGVuZ3RoO2UrKylRblt0LmVtaXRzW2VdXT10fWZ1bmN0aW9uIG9pKHQsZSl7TG4mJnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmdnQucnVuKCgoKT0+e3Quc3R5bGUudG91Y2hBY3Rpb249ZX0pKSx0W0luXT1lfWZ1bmN0aW9uIGFpKHQsZSxuKXtsZXQgaT1uZXcgRXZlbnQoZSx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNvbXBvc2VkOiEwfSk7aWYoaS5kZXRhaWw9bixZKHQpLmRpc3BhdGNoRXZlbnQoaSksaS5kZWZhdWx0UHJldmVudGVkKXtsZXQgdD1uLnByZXZlbnRlcnx8bi5zb3VyY2VFdmVudDt0JiZ0LnByZXZlbnREZWZhdWx0JiZ0LnByZXZlbnREZWZhdWx0KCl9fWZ1bmN0aW9uIHNpKHQpe2xldCBlPShmdW5jdGlvbiBuKHQpe2ZvcihsZXQgZSxuPTA7bjx0aS5sZW5ndGg7bisrKXtlPXRpW25dO2ZvcihsZXQgbixpPTA7aTxlLmVtaXRzLmxlbmd0aDtpKyspaWYobj1lLmVtaXRzW2ldLG49PT10KXJldHVybiBlfXJldHVybiBudWxsfSkodCk7ZS5pbmZvJiYoZS5pbmZvLnByZXZlbnQ9ITApfWZ1bmN0aW9uIGxpKHQsZSxuLGkpe2UmJmFpKGUsdCx7eDpuLmNsaWVudFgseTpuLmNsaWVudFksc291cmNlRXZlbnQ6bixwcmV2ZW50ZXI6aSxwcmV2ZW50OmZ1bmN0aW9uKHQpe3JldHVybiBzaSh0KX19KX1mdW5jdGlvbiBjaSh0LGUsbil7aWYodC5wcmV2ZW50KXJldHVybiExO2lmKHQuc3RhcnRlZClyZXR1cm4hMDtsZXQgaT1NYXRoLmFicyh0LngtZSkscj1NYXRoLmFicyh0Lnktbik7cmV0dXJuIGk+PTV8fHI+PTV9ZnVuY3Rpb24gdWkodCxlLG4pe2lmKCFlKXJldHVybjtsZXQgaSxyPXQubW92ZXNbdC5tb3Zlcy5sZW5ndGgtMl0sbz10Lm1vdmVzW3QubW92ZXMubGVuZ3RoLTFdLGE9MDtyJiYoaT1vLngtci54LGE9by55LXIueSksYWkoZSwidHJhY2siLHtzdGF0ZTp0LnN0YXRlLHg6bi5jbGllbnRYLHk6bi5jbGllbnRZLGR4Om8ueC10LngsZHk6by55LXQueSxkZHg6aSxkZHk6YSxzb3VyY2VFdmVudDpuLGhvdmVyOmZ1bmN0aW9uKCl7cmV0dXJuKGZ1bmN0aW9uIHQoZSxuKXtsZXQgaT1kb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUsbikscj1pO2Zvcig7ciYmci5zaGFkb3dSb290JiYhd2luZG93LlNoYWR5RE9NOyl7bGV0IHQ9cjtpZihyPXIuc2hhZG93Um9vdC5lbGVtZW50RnJvbVBvaW50KGUsbiksdD09PXIpYnJlYWs7ciYmKGk9cil9cmV0dXJuIGl9KShuLmNsaWVudFgsbi5jbGllbnRZKX19KX1mdW5jdGlvbiBoaSh0LGUsbil7bGV0IGk9TWF0aC5hYnMoZS5jbGllbnRYLXQueCkscj1NYXRoLmFicyhlLmNsaWVudFktdC55KSxvPWVpKG58fGUpOyFvfHxqbltvLmxvY2FsTmFtZV0mJm8uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfHwoaXNOYU4oaSl8fGlzTmFOKHIpfHxpPD0yNSYmcjw9MjV8fChmdW5jdGlvbiBhKHQpe2lmKCJjbGljayI9PT10LnR5cGUpe2lmKDA9PT10LmRldGFpbClyZXR1cm4hMDtsZXQgZT1laSh0KTtpZighZS5ub2RlVHlwZXx8ZS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiEwO2xldCBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT10LnBhZ2VYLHI9dC5wYWdlWTtyZXR1cm4hKGk+PW4ubGVmdCYmaTw9bi5yaWdodCYmcj49bi50b3AmJnI8PW4uYm90dG9tKX1yZXR1cm4hMX0pKGUpKSYmKHQucHJldmVudHx8YWkobywidGFwIix7eDplLmNsaWVudFgseTplLmNsaWVudFksc291cmNlRXZlbnQ6ZSxwcmV2ZW50ZXI6bn0pKX1yaSh7bmFtZToiZG93bnVwIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsiZG93biIsInVwIl0saW5mbzp7bW92ZWZuOm51bGwsdXBmbjpudWxsfSxyZXNldDpmdW5jdGlvbigpe0tuKHRoaXMuaW5mbyl9LG1vdXNlZG93bjpmdW5jdGlvbih0KXtpZighWW4odCkpcmV0dXJuO2xldCBlPWVpKHQpLG49dGhpczskbih0aGlzLmluZm8sKGZ1bmN0aW9uIHQoaSl7WW4oaSl8fChsaSgidXAiLGUsaSksS24obi5pbmZvKSl9KSwoZnVuY3Rpb24gdChpKXtZbihpKSYmbGkoInVwIixlLGkpLEtuKG4uaW5mbyl9KSksbGkoImRvd24iLGUsdCl9LHRvdWNoc3RhcnQ6ZnVuY3Rpb24odCl7bGkoImRvd24iLGVpKHQpLHQuY2hhbmdlZFRvdWNoZXNbMF0sdCl9LHRvdWNoZW5kOmZ1bmN0aW9uKHQpe2xpKCJ1cCIsZWkodCksdC5jaGFuZ2VkVG91Y2hlc1swXSx0KX19KSxyaSh7bmFtZToidHJhY2siLHRvdWNoQWN0aW9uOiJub25lIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsidHJhY2siXSxpbmZvOnt4OjAseTowLHN0YXRlOiJzdGFydCIsc3RhcnRlZDohMSxtb3ZlczpbXSxhZGRNb3ZlOmZ1bmN0aW9uKHQpe3RoaXMubW92ZXMubGVuZ3RoPjImJnRoaXMubW92ZXMuc2hpZnQoKSx0aGlzLm1vdmVzLnB1c2godCl9LG1vdmVmbjpudWxsLHVwZm46bnVsbCxwcmV2ZW50OiExfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaW5mby5zdGF0ZT0ic3RhcnQiLHRoaXMuaW5mby5zdGFydGVkPSExLHRoaXMuaW5mby5tb3Zlcz1bXSx0aGlzLmluZm8ueD0wLHRoaXMuaW5mby55PTAsdGhpcy5pbmZvLnByZXZlbnQ9ITEsS24odGhpcy5pbmZvKX0sbW91c2Vkb3duOmZ1bmN0aW9uKHQpe2lmKCFZbih0KSlyZXR1cm47bGV0IGU9ZWkodCksbj10aGlzLGk9ZnVuY3Rpb24gdChpKXtsZXQgcj1pLmNsaWVudFgsbz1pLmNsaWVudFk7Y2kobi5pbmZvLHIsbykmJihuLmluZm8uc3RhdGU9bi5pbmZvLnN0YXJ0ZWQ/Im1vdXNldXAiPT09aS50eXBlPyJlbmQiOiJ0cmFjayI6InN0YXJ0Iiwic3RhcnQiPT09bi5pbmZvLnN0YXRlJiZzaSgidGFwIiksbi5pbmZvLmFkZE1vdmUoe3g6cix5Om99KSxZbihpKXx8KG4uaW5mby5zdGF0ZT0iZW5kIixLbihuLmluZm8pKSxlJiZ1aShuLmluZm8sZSxpKSxuLmluZm8uc3RhcnRlZD0hMCl9OyRuKHRoaXMuaW5mbyxpLChmdW5jdGlvbiB0KGUpe24uaW5mby5zdGFydGVkJiZpKGUpLEtuKG4uaW5mbyl9KSksdGhpcy5pbmZvLng9dC5jbGllbnRYLHRoaXMuaW5mby55PXQuY2xpZW50WX0sdG91Y2hzdGFydDpmdW5jdGlvbih0KXtsZXQgZT10LmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuaW5mby54PWUuY2xpZW50WCx0aGlzLmluZm8ueT1lLmNsaWVudFl9LHRvdWNobW92ZTpmdW5jdGlvbih0KXtsZXQgZT1laSh0KSxuPXQuY2hhbmdlZFRvdWNoZXNbMF0saT1uLmNsaWVudFgscj1uLmNsaWVudFk7Y2kodGhpcy5pbmZvLGkscikmJigic3RhcnQiPT09dGhpcy5pbmZvLnN0YXRlJiZzaSgidGFwIiksdGhpcy5pbmZvLmFkZE1vdmUoe3g6aSx5OnJ9KSx1aSh0aGlzLmluZm8sZSxuKSx0aGlzLmluZm8uc3RhdGU9InRyYWNrIix0aGlzLmluZm8uc3RhcnRlZD0hMCl9LHRvdWNoZW5kOmZ1bmN0aW9uKHQpe2xldCBlPWVpKHQpLG49dC5jaGFuZ2VkVG91Y2hlc1swXTt0aGlzLmluZm8uc3RhcnRlZCYmKHRoaXMuaW5mby5zdGF0ZT0iZW5kIix0aGlzLmluZm8uYWRkTW92ZSh7eDpuLmNsaWVudFgseTpuLmNsaWVudFl9KSx1aSh0aGlzLmluZm8sZSxuKSl9fSkscmkoe25hbWU6InRhcCIsZGVwczpbIm1vdXNlZG93biIsImNsaWNrIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsiY2xpY2siLCJ0b3VjaGVuZCJdfSxlbWl0czpbInRhcCJdLGluZm86e3g6TmFOLHk6TmFOLHByZXZlbnQ6ITF9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5pbmZvLng9TmFOLHRoaXMuaW5mby55PU5hTix0aGlzLmluZm8ucHJldmVudD0hMX0sbW91c2Vkb3duOmZ1bmN0aW9uKHQpe1luKHQpJiYodGhpcy5pbmZvLng9dC5jbGllbnRYLHRoaXMuaW5mby55PXQuY2xpZW50WSl9LGNsaWNrOmZ1bmN0aW9uKHQpe1luKHQpJiZoaSh0aGlzLmluZm8sdCl9LHRvdWNoc3RhcnQ6ZnVuY3Rpb24odCl7Y29uc3QgZT10LmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuaW5mby54PWUuY2xpZW50WCx0aGlzLmluZm8ueT1lLmNsaWVudFl9LHRvdWNoZW5kOmZ1bmN0aW9uKHQpe2hpKHRoaXMuaW5mbyx0LmNoYW5nZWRUb3VjaGVzWzBdLHQpfX0pO2NvbnN0IGRpPWVpLHBpPUkoKHQ9PmNsYXNzIGV4dGVuZHMgdHtfYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LGUsbil7aWkodCxlLG4pfHxzdXBlci5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LGUsbil9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZSh0LGUsbil7KGZ1bmN0aW9uIGkodCxlLG4pe3JldHVybiEhUW5bZV0mJigoZnVuY3Rpb24gaSh0LGUsbil7bGV0IGk9UW5bZV0scj1pLmRlcHMsbz1pLm5hbWUsYT10W1BuXTtpZihhKWZvcihsZXQgZSxuLGk9MDtpPHIubGVuZ3RoO2krKyllPXJbaV0sbj1hW2VdLG4mJm5bb10mJihuW29dPShuW29dfHwxKS0xLG4uX2NvdW50PShuLl9jb3VudHx8MSktMSwwPT09bi5fY291bnQmJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG5pLEhuKGUpKSk7dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsbil9KSh0LGUsbiksITApfSkodCxlLG4pfHxzdXBlci5fcmVtb3ZlRXZlbnRMaXN0ZW5lckZyb21Ob2RlKHQsZSxuKX19KSksZmk9Lzpob3N0XCg6ZGlyXCgobHRyfHJ0bClcKVwpL2csbWk9LyhbXHNcdy0jXC5cW1xdXCpdKik6ZGlyXCgobHRyfHJ0bClcKS9nLGdpPS86ZGlyXCgoPzpsdHJ8cnRsKVwpLyxfaT1Cb29sZWFuKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlKSx5aT1bXTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9sZXQgdmk9bnVsbCxiaT0iIjtmdW5jdGlvbiB4aSgpe2JpPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRpciIpfWZ1bmN0aW9uIHdpKHQpe3QuX19hdXRvRGlyT3B0T3V0fHx0LnNldEF0dHJpYnV0ZSgiZGlyIixiaSl9ZnVuY3Rpb24gU2koKXt4aSgpLGJpPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRpciIpO2ZvcihsZXQgdD0wO3Q8eWkubGVuZ3RoO3QrKyl3aSh5aVt0XSl9Y29uc3QgTWk9SSgodD0+e19pfHx2aXx8KHhpKCksdmk9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoU2kpLHZpLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHthdHRyaWJ1dGVzOiEwLGF0dHJpYnV0ZUZpbHRlcjpbImRpciJdfSkpO2NvbnN0IGU9TXQodCk7Y2xhc3MgbiBleHRlbmRzIGV7c3RhdGljIF9wcm9jZXNzU3R5bGVUZXh0KHQsbil7cmV0dXJuIHQ9ZS5fcHJvY2Vzc1N0eWxlVGV4dC5jYWxsKHRoaXMsdCxuKSwhX2kmJmdpLnRlc3QodCkmJih0PXRoaXMuX3JlcGxhY2VEaXJJbkNzc1RleHQodCksdGhpcy5fX2FjdGl2YXRlRGlyPSEwKSx0fXN0YXRpYyBfcmVwbGFjZURpckluQ3NzVGV4dCh0KXtsZXQgZT10O3JldHVybiBlPWUucmVwbGFjZShmaSwnOmhvc3QoW2Rpcj0iJDEiXSknKSxlPWUucmVwbGFjZShtaSwnOmhvc3QoW2Rpcj0iJDIiXSkgJDEnKSxlfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fYXV0b0Rpck9wdE91dD0hMX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5fX2F1dG9EaXJPcHRPdXQ9dGhpcy5oYXNBdHRyaWJ1dGUoImRpciIpfWNvbm5lY3RlZENhbGxiYWNrKCl7ZS5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2smJnN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5jb25zdHJ1Y3Rvci5fX2FjdGl2YXRlRGlyJiYoKGZ1bmN0aW9uIHQoKXt2aSYmdmkudGFrZVJlY29yZHMoKS5sZW5ndGgmJlNpKCl9KSgpLHlpLnB1c2godGhpcyksd2kodGhpcykpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7aWYoZS5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2smJnN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5jb25zdHJ1Y3Rvci5fX2FjdGl2YXRlRGlyKXtjb25zdCB0PXlpLmluZGV4T2YodGhpcyk7dD4tMSYmeWkuc3BsaWNlKHQsMSl9fX1yZXR1cm4gbi5fX2FjdGl2YXRlRGlyPSExLG59KSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovbGV0IEVpPSExLFRpPVtdLENpPVtdO2Z1bmN0aW9uIEFpKCl7RWk9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe0VpPSExLChmdW5jdGlvbiB0KGUpe2Zvcig7ZS5sZW5ndGg7KWtpKGUuc2hpZnQoKSl9KShUaSksc2V0VGltZW91dCgoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSl7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKWtpKGUuc2hpZnQoKSl9KShDaSl9KSl9KSl9ZnVuY3Rpb24ga2kodCl7Y29uc3QgZT10WzBdLG49dFsxXSxpPXRbMl07dHJ5e24uYXBwbHkoZSxpKX1jYXRjaCh0KXtzZXRUaW1lb3V0KCgoKT0+e3Rocm93IHR9KSl9fWZ1bmN0aW9uIExpKHQsZSxuKXtFaXx8QWkoKSxDaS5wdXNoKFt0LGUsbl0pfQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL2Z1bmN0aW9uIFBpKCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUoInVucmVzb2x2ZWQiKX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KZnVuY3Rpb24gTmkodCxlLG4pe3JldHVybntpbmRleDp0LHJlbW92ZWQ6ZSxhZGRlZENvdW50Om59fWZ1bmN0aW9uIElpKHQsZSl7cmV0dXJuKGZ1bmN0aW9uIG4odCxlLGkscixvLGEpe2xldCBzLGw9MCxjPTAsdT1NYXRoLm1pbihpLWUsYS1vKTtpZigwPT1lJiYwPT1vJiYobD0oZnVuY3Rpb24gaCh0LGUsbil7Zm9yKGxldCBpPTA7aTxuO2krKylpZighUmkodFtpXSxlW2ldKSlyZXR1cm4gaTtyZXR1cm4gbn0pKHQscix1KSksaT09dC5sZW5ndGgmJmE9PXIubGVuZ3RoJiYoYz0oZnVuY3Rpb24gZCh0LGUsbil7bGV0IGk9dC5sZW5ndGgscj1lLmxlbmd0aCxvPTA7Zm9yKDtvPG4mJlJpKHRbLS1pXSxlWy0tcl0pOylvKys7cmV0dXJuIG99KSh0LHIsdS1sKSksbys9bCxhLT1jLChpLT1jKS0oZSs9bCk9PTAmJmEtbz09MClyZXR1cm5bXTtpZihlPT1pKXtmb3Iocz1OaShlLFtdLDApO288YTspcy5yZW1vdmVkLnB1c2gocltvKytdKTtyZXR1cm5bc119aWYobz09YSlyZXR1cm5bTmkoZSxbXSxpLWUpXTtsZXQgcD0oZnVuY3Rpb24gbSh0KXtsZXQgZT10Lmxlbmd0aC0xLG49dFswXS5sZW5ndGgtMSxpPXRbZV1bbl0scj1bXTtmb3IoO2U+MHx8bj4wOyl7aWYoMD09ZSl7ci5wdXNoKDIpLG4tLTtjb250aW51ZX1pZigwPT1uKXtyLnB1c2goMyksZS0tO2NvbnRpbnVlfWxldCBvLGE9dFtlLTFdW24tMV0scz10W2UtMV1bbl0sbD10W2VdW24tMV07bz1zPGw/czxhP3M6YTpsPGE/bDphLG89PWE/KGE9PWk/ci5wdXNoKDApOihyLnB1c2goMSksaT1hKSxlLS0sbi0tKTpvPT1zPyhyLnB1c2goMyksZS0tLGk9cyk6KHIucHVzaCgyKSxuLS0saT1sKX1yZXR1cm4gci5yZXZlcnNlKCkscn0pKChmdW5jdGlvbiBmKHQsZSxuLGkscixvKXtsZXQgYT1vLXIrMSxzPW4tZSsxLGw9bmV3IEFycmF5KGEpO2ZvcihsZXQgdD0wO3Q8YTt0KyspbFt0XT1uZXcgQXJyYXkocyksbFt0XVswXT10O2ZvcihsZXQgdD0wO3Q8czt0KyspbFswXVt0XT10O2ZvcihsZXQgbj0xO248YTtuKyspZm9yKGxldCBvPTE7bzxzO28rKylpZihSaSh0W2Urby0xXSxpW3Irbi0xXSkpbFtuXVtvXT1sW24tMV1bby0xXTtlbHNle2xldCB0PWxbbi0xXVtvXSsxLGU9bFtuXVtvLTFdKzE7bFtuXVtvXT10PGU/dDplfXJldHVybiBsfSkodCxlLGkscixvLGEpKTtzPXZvaWQgMDtsZXQgZz1bXSxfPWUseT1vO2ZvcihsZXQgdD0wO3Q8cC5sZW5ndGg7dCsrKXN3aXRjaChwW3RdKXtjYXNlIDA6cyYmKGcucHVzaChzKSxzPXZvaWQgMCksXysrLHkrKzticmVhaztjYXNlIDE6c3x8KHM9TmkoXyxbXSwwKSkscy5hZGRlZENvdW50KyssXysrLHMucmVtb3ZlZC5wdXNoKHJbeV0pLHkrKzticmVhaztjYXNlIDI6c3x8KHM9TmkoXyxbXSwwKSkscy5hZGRlZENvdW50KyssXysrO2JyZWFrO2Nhc2UgMzpzfHwocz1OaShfLFtdLDApKSxzLnJlbW92ZWQucHVzaChyW3ldKSx5Kyt9cmV0dXJuIHMmJmcucHVzaChzKSxnfSkodCwwLHQubGVuZ3RoLGUsMCxlLmxlbmd0aCl9ZnVuY3Rpb24gUmkodCxlKXtyZXR1cm4gdD09PWV9Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovZnVuY3Rpb24gT2kodCl7cmV0dXJuInNsb3QiPT09dC5sb2NhbE5hbWV9ImludGVyYWN0aXZlIj09PWRvY3VtZW50LnJlYWR5U3RhdGV8fCJjb21wbGV0ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlP1BpKCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLFBpKTtsZXQgemk9Y2xhc3N7c3RhdGljIGdldEZsYXR0ZW5lZE5vZGVzKHQpe2NvbnN0IGU9WSh0KTtyZXR1cm4gT2kodCk/KHQ9dCxlLmFzc2lnbmVkTm9kZXMoe2ZsYXR0ZW46ITB9KSk6QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLm1hcCgodD0+T2kodCk/WSh0PXQpLmFzc2lnbmVkTm9kZXMoe2ZsYXR0ZW46ITB9KTpbdF0pKS5yZWR1Y2UoKCh0LGUpPT50LmNvbmNhdChlKSksW10pfWNvbnN0cnVjdG9yKHQsZSl7dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPW51bGwsdGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlcj1udWxsLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLl90YXJnZXQ9dCx0aGlzLmNhbGxiYWNrPWUsdGhpcy5fZWZmZWN0aXZlTm9kZXM9W10sdGhpcy5fb2JzZXJ2ZXI9bnVsbCx0aGlzLl9zY2hlZHVsZWQ9ITEsdGhpcy5fYm91bmRTY2hlZHVsZT0oKT0+e3RoaXMuX3NjaGVkdWxlKCl9LHRoaXMuY29ubmVjdCgpLHRoaXMuX3NjaGVkdWxlKCl9Y29ubmVjdCgpe09pKHRoaXMuX3RhcmdldCk/dGhpcy5fbGlzdGVuU2xvdHMoW3RoaXMuX3RhcmdldF0pOlkodGhpcy5fdGFyZ2V0KS5jaGlsZHJlbiYmKHRoaXMuX2xpc3RlblNsb3RzKFkodGhpcy5fdGFyZ2V0KS5jaGlsZHJlbiksd2luZG93LlNoYWR5RE9NP3RoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlcj13aW5kb3cuU2hhZHlET00ub2JzZXJ2ZUNoaWxkcmVuKHRoaXMuX3RhcmdldCwodD0+e3RoaXMuX3Byb2Nlc3NNdXRhdGlvbnModCl9KSk6KHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKHQ9Pnt0aGlzLl9wcm9jZXNzTXV0YXRpb25zKHQpfSkpLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl90YXJnZXQse2NoaWxkTGlzdDohMH0pKSksdGhpcy5fY29ubmVjdGVkPSEwfWRpc2Nvbm5lY3QoKXtPaSh0aGlzLl90YXJnZXQpP3RoaXMuX3VubGlzdGVuU2xvdHMoW3RoaXMuX3RhcmdldF0pOlkodGhpcy5fdGFyZ2V0KS5jaGlsZHJlbiYmKHRoaXMuX3VubGlzdGVuU2xvdHMoWSh0aGlzLl90YXJnZXQpLmNoaWxkcmVuKSx3aW5kb3cuU2hhZHlET00mJnRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlcj8od2luZG93LlNoYWR5RE9NLnVub2JzZXJ2ZUNoaWxkcmVuKHRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlciksdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPW51bGwpOnRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXImJih0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyPW51bGwpKSx0aGlzLl9jb25uZWN0ZWQ9ITF9X3NjaGVkdWxlKCl7dGhpcy5fc2NoZWR1bGVkfHwodGhpcy5fc2NoZWR1bGVkPSEwLHZ0LnJ1bigoKCk9PnRoaXMuZmx1c2goKSkpKX1fcHJvY2Vzc011dGF0aW9ucyh0KXt0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0KSx0aGlzLmZsdXNoKCl9X3Byb2Nlc3NTbG90TXV0YXRpb25zKHQpe2lmKHQpZm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2xldCBuPXRbZV07bi5hZGRlZE5vZGVzJiZ0aGlzLl9saXN0ZW5TbG90cyhuLmFkZGVkTm9kZXMpLG4ucmVtb3ZlZE5vZGVzJiZ0aGlzLl91bmxpc3RlblNsb3RzKG4ucmVtb3ZlZE5vZGVzKX19Zmx1c2goKXtpZighdGhpcy5fY29ubmVjdGVkKXJldHVybiExO3dpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyP3RoaXMuX3Byb2Nlc3NTbG90TXV0YXRpb25zKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSk6dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyJiZ0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSksdGhpcy5fc2NoZWR1bGVkPSExO2xldCB0PXt0YXJnZXQ6dGhpcy5fdGFyZ2V0LGFkZGVkTm9kZXM6W10scmVtb3ZlZE5vZGVzOltdfSxlPXRoaXMuY29uc3RydWN0b3IuZ2V0RmxhdHRlbmVkTm9kZXModGhpcy5fdGFyZ2V0KSxuPUlpKGUsdGhpcy5fZWZmZWN0aXZlTm9kZXMpO2ZvcihsZXQgZSxpPTA7aTxuLmxlbmd0aCYmKGU9bltpXSk7aSsrKWZvcihsZXQgbixpPTA7aTxlLnJlbW92ZWQubGVuZ3RoJiYobj1lLnJlbW92ZWRbaV0pO2krKyl0LnJlbW92ZWROb2Rlcy5wdXNoKG4pO2ZvcihsZXQgaSxyPTA7cjxuLmxlbmd0aCYmKGk9bltyXSk7cisrKWZvcihsZXQgbj1pLmluZGV4O248aS5pbmRleCtpLmFkZGVkQ291bnQ7bisrKXQuYWRkZWROb2Rlcy5wdXNoKGVbbl0pO3RoaXMuX2VmZmVjdGl2ZU5vZGVzPWU7bGV0IGk9ITE7cmV0dXJuKHQuYWRkZWROb2Rlcy5sZW5ndGh8fHQucmVtb3ZlZE5vZGVzLmxlbmd0aCkmJihpPSEwLHRoaXMuY2FsbGJhY2suY2FsbCh0aGlzLl90YXJnZXQsdCkpLGl9X2xpc3RlblNsb3RzKHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtsZXQgbj10W2VdO09pKG4pJiZuLmFkZEV2ZW50TGlzdGVuZXIoInNsb3RjaGFuZ2UiLHRoaXMuX2JvdW5kU2NoZWR1bGUpfX1fdW5saXN0ZW5TbG90cyh0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IG49dFtlXTtPaShuKSYmbi5yZW1vdmVFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl9ib3VuZFNjaGVkdWxlKX19fTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jb25zdCBEaT1mdW5jdGlvbigpe2xldCB0LGU7ZG97dD13aW5kb3cuU2hhZHlET00mJlNoYWR5RE9NLmZsdXNoKCksd2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0mJndpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbS5mbHVzaCgpLGU9a24oKX13aGlsZSh0fHxlKX0sQmk9RWxlbWVudC5wcm90b3R5cGUsSGk9QmkubWF0Y2hlc3x8QmkubWF0Y2hlc1NlbGVjdG9yfHxCaS5tb3pNYXRjaGVzU2VsZWN0b3J8fEJpLm1zTWF0Y2hlc1NlbGVjdG9yfHxCaS5vTWF0Y2hlc1NlbGVjdG9yfHxCaS53ZWJraXRNYXRjaGVzU2VsZWN0b3IsRmk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSGkuY2FsbCh0LGUpfTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jbGFzcyBWaXtjb25zdHJ1Y3Rvcih0KXt3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5pblVzZSYmd2luZG93LlNoYWR5RE9NLnBhdGNoKHQpLHRoaXMubm9kZT10fW9ic2VydmVOb2Rlcyh0KXtyZXR1cm4gbmV3IHppKHRoaXMubm9kZSx0KX11bm9ic2VydmVOb2Rlcyh0KXt0LmRpc2Nvbm5lY3QoKX1ub3RpZnlPYnNlcnZlcigpe31kZWVwQ29udGFpbnModCl7aWYoWSh0aGlzLm5vZGUpLmNvbnRhaW5zKHQpKXJldHVybiEwO2xldCBlPXQsbj10Lm93bmVyRG9jdW1lbnQ7Zm9yKDtlJiZlIT09biYmZSE9PXRoaXMubm9kZTspZT1ZKGUpLnBhcmVudE5vZGV8fFkoZSkuaG9zdDtyZXR1cm4gZT09PXRoaXMubm9kZX1nZXRPd25lclJvb3QoKXtyZXR1cm4gWSh0aGlzLm5vZGUpLmdldFJvb3ROb2RlKCl9Z2V0RGlzdHJpYnV0ZWROb2Rlcygpe3JldHVybiJzbG90Ij09PXRoaXMubm9kZS5sb2NhbE5hbWU/WSh0aGlzLm5vZGUpLmFzc2lnbmVkTm9kZXMoe2ZsYXR0ZW46ITB9KTpbXX1nZXREZXN0aW5hdGlvbkluc2VydGlvblBvaW50cygpe2xldCB0PVtdLGU9WSh0aGlzLm5vZGUpLmFzc2lnbmVkU2xvdDtmb3IoO2U7KXQucHVzaChlKSxlPVkoZSkuYXNzaWduZWRTbG90O3JldHVybiB0fWltcG9ydE5vZGUodCxlKXtsZXQgbj10aGlzLm5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudD90aGlzLm5vZGU6dGhpcy5ub2RlLm93bmVyRG9jdW1lbnQ7cmV0dXJuIFkobikuaW1wb3J0Tm9kZSh0LGUpfWdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKXtyZXR1cm4gemkuZ2V0RmxhdHRlbmVkTm9kZXModGhpcy5ub2RlKX1xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHModCl7bGV0IGU9dGhpcy5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCksbj1bXTtmb3IobGV0IGkscj0wLG89ZS5sZW5ndGg7cjxvJiYoaT1lW3JdKTtyKyspaS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZGaShpLHQpJiZuLnB1c2goaSk7cmV0dXJuIG59Z2V0IGFjdGl2ZUVsZW1lbnQoKXtsZXQgdD10aGlzLm5vZGU7cmV0dXJuIHZvaWQgMCE9PXQuX2FjdGl2ZUVsZW1lbnQ/dC5fYWN0aXZlRWxlbWVudDp0LmFjdGl2ZUVsZW1lbnR9fWZ1bmN0aW9uIFVpKHQsZSl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2xldCBpPWVbbl07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVtpXX0sY29uZmlndXJhYmxlOiEwfSl9fWNsYXNzIGppe2NvbnN0cnVjdG9yKHQpe3RoaXMuZXZlbnQ9dH1nZXQgcm9vdFRhcmdldCgpe3JldHVybiB0aGlzLnBhdGhbMF19Z2V0IGxvY2FsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuZXZlbnQudGFyZ2V0fWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuZXZlbnQuY29tcG9zZWRQYXRoKCl9fWxldCBHaT1WaTtpZih3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5pblVzZSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2gmJndpbmRvdy5TaGFkeURPTS5XcmFwcGVyKXtjbGFzcyB0IGV4dGVuZHMgd2luZG93LlNoYWR5RE9NLldyYXBwZXJ7fU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFZpLnByb3RvdHlwZSkuZm9yRWFjaCgoZT0+eyJhY3RpdmVFbGVtZW50IiE9ZSYmKHQucHJvdG90eXBlW2VdPVZpLnByb3RvdHlwZVtlXSl9KSksVWkodC5wcm90b3R5cGUsWyJjbGFzc0xpc3QiXSksR2k9dCxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhqaS5wcm90b3R5cGUse2xvY2FsVGFyZ2V0OntnZXQoKXtjb25zdCB0PXRoaXMuZXZlbnQuY3VycmVudFRhcmdldCxlPXQmJllpKHQpLmdldE93bmVyUm9vdCgpLG49dGhpcy5wYXRoO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtjb25zdCBpPW5bdF07aWYoWWkoaSkuZ2V0T3duZXJSb290KCk9PT1lKXJldHVybiBpfX0sY29uZmlndXJhYmxlOiEwfSxwYXRoOntnZXQoKXtyZXR1cm4gd2luZG93LlNoYWR5RE9NLmNvbXBvc2VkUGF0aCh0aGlzLmV2ZW50KX0sY29uZmlndXJhYmxlOiEwfX0pfWVsc2UhKGZ1bmN0aW9uIFdpKHQsZSl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2xldCBpPWVbbl07dFtpXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbaV0uYXBwbHkodGhpcy5ub2RlLGFyZ3VtZW50cyl9fX0pKFZpLnByb3RvdHlwZSxbImNsb25lTm9kZSIsImFwcGVuZENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwicmVtb3ZlQ2hpbGQiLCJyZXBsYWNlQ2hpbGQiLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJxdWVyeVNlbGVjdG9yIiwicXVlcnlTZWxlY3RvckFsbCJdKSxVaShWaS5wcm90b3R5cGUsWyJwYXJlbnROb2RlIiwiZmlyc3RDaGlsZCIsImxhc3RDaGlsZCIsIm5leHRTaWJsaW5nIiwicHJldmlvdXNTaWJsaW5nIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImNoaWxkTm9kZXMiLCJjaGlsZHJlbiIsImNsYXNzTGlzdCJdKSwoZnVuY3Rpb24gcWkodCxlKXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IGk9ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxpLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW2ldfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5ub2RlW2ldPXR9LGNvbmZpZ3VyYWJsZTohMH0pfX0pKFZpLnByb3RvdHlwZSxbInRleHRDb250ZW50IiwiaW5uZXJIVE1MIiwiY2xhc3NOYW1lIl0pO2NvbnN0IFlpPWZ1bmN0aW9uKHQpe2lmKCh0PXR8fGRvY3VtZW50KWluc3RhbmNlb2YgR2kpcmV0dXJuIHQ7aWYodCBpbnN0YW5jZW9mIGppKXJldHVybiB0O2xldCBlPXQuX19kb21BcGk7cmV0dXJuIGV8fChlPXQgaW5zdGFuY2VvZiBFdmVudD9uZXcgamkodCk6bmV3IEdpKHQpLHQuX19kb21BcGk9ZSksZX0sWGk9d2luZG93LlNoYWR5RE9NLCRpPXdpbmRvdy5TaGFkeUNTUzsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE5IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9mdW5jdGlvbiBLaSh0LGUpe3JldHVybiBZKHQpLmdldFJvb3ROb2RlKCk9PT1lfQovKioKICAgICAqIEBmaWxlb3ZlcnZpZXcKICAgICAqIEBzdXBwcmVzcyB7Y2hlY2tQcm90b3R5cGFsVHlwZXN9CiAgICAgKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICAgKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZAogICAgICogYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heQogICAgICogYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieQogICAgICogR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUAogICAgICogcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgICovCmNvbnN0IFppPSJkaXNhYmxlLXVwZ3JhZGUiLEppPXQ9Pntmb3IoO3Q7KXtjb25zdCBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwib2JzZXJ2ZWRBdHRyaWJ1dGVzIik7aWYoZSlyZXR1cm4gZS5nZXQ7dD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodC5wcm90b3R5cGUpLmNvbnN0cnVjdG9yfXJldHVybigpPT5bXX07SSgodD0+e2NvbnN0IGU9bWUodCk7bGV0IG49SmkoZSk7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtyZXR1cm4gbi5jYWxsKHRoaXMpLmNvbmNhdChaaSl9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7dGhpcy5oYXNBdHRyaWJ1dGUoWmkpP3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMDpzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKX1fZW5hYmxlUHJvcGVydGllcygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuX2VuYWJsZVByb3BlcnRpZXMoKX1fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQodCl7cmV0dXJuIHN1cGVyLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdCh0KSYmISh0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJnRoaXMuX2lzUHJvcGVydHlQZW5kaW5nKHQpKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4saSl7dD09Wmk/dGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZudWxsPT1uJiYoc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5fX2lzVXBncmFkZURpc2FibGVkPSExLFkodGhpcykuaXNDb25uZWN0ZWQmJnN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCkpOnN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LGUsbixpKX1jb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKX19fSkpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBRaT0iZGlzYWJsZS11cGdyYWRlIjtsZXQgdHI9d2luZG93LlNoYWR5Q1NTO2NvbnN0IGVyPUkoKHQ9Pntjb25zdCBlPXBpKG1lKHQpKSxuPWZlP2U6TWkoZSksaT1KaShuKSxyPXt4OiJwYW4teCIseToicGFuLXkiLG5vbmU6Im5vbmUiLGFsbDoiYXV0byJ9O2NsYXNzIG8gZXh0ZW5kcyBue2NvbnN0cnVjdG9yKCl7c3VwZXIoKX1zdGF0aWMgZ2V0IGltcG9ydE1ldGEoKXtyZXR1cm4gdGhpcy5wcm90b3R5cGUuaW1wb3J0TWV0YX1jcmVhdGVkKCl7fV9fYXR0cmlidXRlUmVhY3Rpb24odCxlLG4peyh0aGlzLl9fZGF0YUF0dHJpYnV0ZXMmJnRoaXMuX19kYXRhQXR0cmlidXRlc1t0XXx8dD09PVFpKSYmdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4sbnVsbCl9c2V0QXR0cmlidXRlKHQsZSl7aWYoTCYmIXRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzKXtjb25zdCBuPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3N1cGVyLnNldEF0dHJpYnV0ZSh0LGUpLHRoaXMuX19hdHRyaWJ1dGVSZWFjdGlvbih0LG4sU3RyaW5nKGUpKX1lbHNlIHN1cGVyLnNldEF0dHJpYnV0ZSh0LGUpfXJlbW92ZUF0dHJpYnV0ZSh0KXtpZihMJiYhdGhpcy5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXMpe2NvbnN0IGU9dGhpcy5nZXRBdHRyaWJ1dGUodCk7c3VwZXIucmVtb3ZlQXR0cmlidXRlKHQpLHRoaXMuX19hdHRyaWJ1dGVSZWFjdGlvbih0LGUsbnVsbCl9ZWxzZSBzdXBlci5yZW1vdmVBdHRyaWJ1dGUodCl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtyZXR1cm4gTCYmIXRoaXMucHJvdG90eXBlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcz8odGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX29ic2VydmVkQXR0cmlidXRlcyIsdGhpcykpfHwodGhpcy5fX29ic2VydmVkQXR0cmlidXRlcz1bXSksdGhpcy5fX29ic2VydmVkQXR0cmlidXRlcyk6aS5jYWxsKHRoaXMpLmNvbmNhdChRaSl9X2VuYWJsZVByb3BlcnRpZXMoKXt0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fHN1cGVyLl9lbmFibGVQcm9wZXJ0aWVzKCl9X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KHQpe3JldHVybiBzdXBlci5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQodCkmJiEodGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZ0aGlzLl9pc1Byb3BlcnR5UGVuZGluZyh0KSl9Y29ubmVjdGVkQ2FsbGJhY2soKXt0aGlzLl9fbmVlZHNBdHRyaWJ1dGVzQXRDb25uZWN0ZWQmJnRoaXMuX3Rha2VBdHRyaWJ1dGVzKCksdGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHwoc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmlzQXR0YWNoZWQ9ITAsdGhpcy5hdHRhY2hlZCgpKX1hdHRhY2hlZCgpe31kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8KHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5pc0F0dGFjaGVkPSExLHRoaXMuZGV0YWNoZWQoKSl9ZGV0YWNoZWQoKXt9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxuLGkpe2UhPT1uJiYodD09UWk/dGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZudWxsPT1uJiYodGhpcy5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKSx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITEsWSh0aGlzKS5pc0Nvbm5lY3RlZCYmdGhpcy5jb25uZWN0ZWRDYWxsYmFjaygpKTooc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxuLGkpLHRoaXMuYXR0cmlidXRlQ2hhbmdlZCh0LGUsbikpKX1hdHRyaWJ1dGVDaGFuZ2VkKHQsZSxuKXt9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7aWYodyYmdGhpcy5oYXNBdHRyaWJ1dGUoUWkpKXRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMDtlbHNle2xldCB0PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTt0Lmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9faGFzUmVnaXN0ZXJGaW5pc2hlZCIsdCkpfHwodGhpcy5fcmVnaXN0ZXJlZCgpLHQuX19oYXNSZWdpc3RlckZpbmlzaGVkPSEwKSxzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKSx0aGlzLnJvb3Q9dGhpcyx0aGlzLmNyZWF0ZWQoKSxMJiYhdGhpcy5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXMmJih0aGlzLmhhc0F0dHJpYnV0ZXMoKT90aGlzLl90YWtlQXR0cmlidXRlcygpOnRoaXMucGFyZW50Tm9kZXx8KHRoaXMuX19uZWVkc0F0dHJpYnV0ZXNBdENvbm5lY3RlZD0hMCkpLHRoaXMuX2FwcGx5TGlzdGVuZXJzKCl9fV90YWtlQXR0cmlidXRlcygpe2NvbnN0IHQ9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10W2VdO3RoaXMuX19hdHRyaWJ1dGVSZWFjdGlvbihuLm5hbWUsbnVsbCxuLnZhbHVlKX19X3JlZ2lzdGVyZWQoKXt9cmVhZHkoKXt0aGlzLl9lbnN1cmVBdHRyaWJ1dGVzKCksc3VwZXIucmVhZHkoKX1fZW5zdXJlQXR0cmlidXRlcygpe31fYXBwbHlMaXN0ZW5lcnMoKXt9c2VyaWFsaXplKHQpe3JldHVybiB0aGlzLl9zZXJpYWxpemVWYWx1ZSh0KX1kZXNlcmlhbGl6ZSh0LGUpe3JldHVybiB0aGlzLl9kZXNlcmlhbGl6ZVZhbHVlKHQsZSl9cmVmbGVjdFByb3BlcnR5VG9BdHRyaWJ1dGUodCxlLG4pe3RoaXMuX3Byb3BlcnR5VG9BdHRyaWJ1dGUodCxlLG4pfXNlcmlhbGl6ZVZhbHVlVG9BdHRyaWJ1dGUodCxlLG4pe3RoaXMuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKG58fHRoaXMsdCxlKX1leHRlbmQodCxlKXtpZighdHx8IWUpcmV0dXJuIHR8fGU7bGV0IG49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSk7Zm9yKGxldCBpLHI9MDtyPG4ubGVuZ3RoJiYoaT1uW3JdKTtyKyspe2xldCBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxpKTtuJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxpLG4pfXJldHVybiB0fW1peGluKHQsZSl7Zm9yKGxldCBuIGluIGUpdFtuXT1lW25dO3JldHVybiB0fWNoYWluT2JqZWN0KHQsZSl7cmV0dXJuIHQmJmUmJnQhPT1lJiYodC5fX3Byb3RvX189ZSksdH1pbnN0YW5jZVRlbXBsYXRlKHQpe2xldCBlPXRoaXMuY29uc3RydWN0b3IuX2NvbnRlbnRGb3JUZW1wbGF0ZSh0KTtyZXR1cm4gZG9jdW1lbnQuaW1wb3J0Tm9kZShlLCEwKX1maXJlKHQsZSxuKXtuPW58fHt9LGU9bnVsbD09ZT97fTplO2xldCBpPW5ldyBFdmVudCh0LHtidWJibGVzOnZvaWQgMD09PW4uYnViYmxlc3x8bi5idWJibGVzLGNhbmNlbGFibGU6Qm9vbGVhbihuLmNhbmNlbGFibGUpLGNvbXBvc2VkOnZvaWQgMD09PW4uY29tcG9zZWR8fG4uY29tcG9zZWR9KTtyZXR1cm4gaS5kZXRhaWw9ZSxZKG4ubm9kZXx8dGhpcykuZGlzcGF0Y2hFdmVudChpKSxpfWxpc3Rlbih0LGUsbil7dD10fHx0aGlzO2xldCBpPXRoaXMuX19ib3VuZExpc3RlbmVyc3x8KHRoaXMuX19ib3VuZExpc3RlbmVycz1uZXcgV2Vha01hcCkscj1pLmdldCh0KTtyfHwocj17fSxpLnNldCh0LHIpKTtsZXQgbz1lK247cltvXXx8KHJbb109dGhpcy5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZSh0LGUsbix0aGlzKSl9dW5saXN0ZW4odCxlLG4pe3Q9dHx8dGhpcztsZXQgaT10aGlzLl9fYm91bmRMaXN0ZW5lcnMmJnRoaXMuX19ib3VuZExpc3RlbmVycy5nZXQodCkscj1lK24sbz1pJiZpW3JdO28mJih0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUodCxlLG8pLGlbcl09bnVsbCl9c2V0U2Nyb2xsRGlyZWN0aW9uKHQsZSl7b2koZXx8dGhpcyxyW3RdfHwiYXV0byIpfSQkKHQpe3JldHVybiB0aGlzLnJvb3QucXVlcnlTZWxlY3Rvcih0KX1nZXQgZG9tSG9zdCgpe2xldCB0PVkodGhpcykuZ2V0Um9vdE5vZGUoKTtyZXR1cm4gdCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQ/dC5ob3N0OnR9ZGlzdHJpYnV0ZUNvbnRlbnQoKXtjb25zdCB0PVlpKHRoaXMpO3dpbmRvdy5TaGFkeURPTSYmdC5zaGFkb3dSb290JiZTaGFkeURPTS5mbHVzaCgpfWdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKXtyZXR1cm4gWWkodGhpcykuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpfXF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyh0KXtyZXR1cm4gWWkodGhpcykucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHQpfWdldEVmZmVjdGl2ZUNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX0pKX1nZXRFZmZlY3RpdmVUZXh0Q29udGVudCgpe2xldCB0PXRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLGU9W107Zm9yKGxldCBuLGk9MDtuPXRbaV07aSsrKW4ubm9kZVR5cGUhPT1Ob2RlLkNPTU1FTlRfTk9ERSYmZS5wdXNoKG4udGV4dENvbnRlbnQpO3JldHVybiBlLmpvaW4oIiIpfXF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4odCl7bGV0IGU9dGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHModCk7cmV0dXJuIGUmJmVbMF19cXVlcnlBbGxFZmZlY3RpdmVDaGlsZHJlbih0KXtyZXR1cm4gdGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHModCl9Z2V0Q29udGVudENoaWxkTm9kZXModCl7bGV0IGU9dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IodHx8InNsb3QiKTtyZXR1cm4gZT9ZaShlKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6W119Z2V0Q29udGVudENoaWxkcmVuKHQpe3JldHVybiB0aGlzLmdldENvbnRlbnRDaGlsZE5vZGVzKHQpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX0pKX1pc0xpZ2h0RGVzY2VuZGFudCh0KXtjb25zdCBlPXRoaXM7cmV0dXJuIGUhPT10JiZZKGUpLmNvbnRhaW5zKHQpJiZZKGUpLmdldFJvb3ROb2RlKCk9PT1ZKHQpLmdldFJvb3ROb2RlKCl9aXNMb2NhbERlc2NlbmRhbnQodCl7cmV0dXJuIHRoaXMucm9vdD09PVkodCkuZ2V0Um9vdE5vZGUoKX1zY29wZVN1YnRyZWUodCxlPSExKXtyZXR1cm4oZnVuY3Rpb24gbih0LGU9ITEpe2lmKCFYaXx8ISRpKXJldHVybiBudWxsO2lmKCFYaS5oYW5kbGVzRHluYW1pY1Njb3BpbmcpcmV0dXJuIG51bGw7Y29uc3Qgbj0kaS5TY29waW5nU2hpbTtpZighbilyZXR1cm4gbnVsbDtjb25zdCBpPW4uc2NvcGVGb3JOb2RlKHQpLHI9WSh0KS5nZXRSb290Tm9kZSgpLG89dD0+e2lmKCFLaSh0LHIpKXJldHVybjtjb25zdCBlPUFycmF5LmZyb20oWGkubmF0aXZlTWV0aG9kcy5xdWVyeVNlbGVjdG9yQWxsLmNhbGwodCwiKiIpKTtlLnB1c2godCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IG89ZVt0XTtpZighS2kobyxyKSljb250aW51ZTtjb25zdCBhPW4uY3VycmVudFNjb3BlRm9yTm9kZShvKTthIT09aSYmKCIiIT09YSYmbi51bnNjb3BlTm9kZShvLGEpLG4uc2NvcGVOb2RlKG8saSkpfX07aWYobyh0KSxlKXtjb25zdCBlPW5ldyBNdXRhdGlvbk9ic2VydmVyKCh0PT57Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2NvbnN0IG49dFtlXTtmb3IobGV0IHQ9MDt0PG4uYWRkZWROb2Rlcy5sZW5ndGg7dCsrKXtjb25zdCBlPW4uYWRkZWROb2Rlc1t0XTtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJm8oZSl9fX0pKTtyZXR1cm4gZS5vYnNlcnZlKHQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksZX1yZXR1cm4gbnVsbH0pKHQsZSl9Z2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHQpe3JldHVybiB0ci5nZXRDb21wdXRlZFN0eWxlVmFsdWUodGhpcyx0KX1kZWJvdW5jZSh0LGUsbil7cmV0dXJuIHRoaXMuX2RlYm91bmNlcnM9dGhpcy5fZGVib3VuY2Vyc3x8e30sdGhpcy5fZGVib3VuY2Vyc1t0XT1Ubi5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJzW3RdLG4+MD9ndC5hZnRlcihuKTp2dCxlLmJpbmQodGhpcykpfWlzRGVib3VuY2VyQWN0aXZlKHQpe3RoaXMuX2RlYm91bmNlcnM9dGhpcy5fZGVib3VuY2Vyc3x8e307bGV0IGU9dGhpcy5fZGVib3VuY2Vyc1t0XTtyZXR1cm4hKCFlfHwhZS5pc0FjdGl2ZSgpKX1mbHVzaERlYm91bmNlcih0KXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBlPXRoaXMuX2RlYm91bmNlcnNbdF07ZSYmZS5mbHVzaCgpfWNhbmNlbERlYm91bmNlcih0KXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBlPXRoaXMuX2RlYm91bmNlcnNbdF07ZSYmZS5jYW5jZWwoKX1hc3luYyh0LGUpe3JldHVybiBlPjA/Z3QucnVuKHQuYmluZCh0aGlzKSxlKTp+dnQucnVuKHQuYmluZCh0aGlzKSl9Y2FuY2VsQXN5bmModCl7dDwwP3Z0LmNhbmNlbCh+dCk6Z3QuY2FuY2VsKHQpfWNyZWF0ZSh0LGUpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7aWYoZSlpZihuLnNldFByb3BlcnRpZXMpbi5zZXRQcm9wZXJ0aWVzKGUpO2Vsc2UgZm9yKGxldCB0IGluIGUpblt0XT1lW3RdO3JldHVybiBufWVsZW1lbnRNYXRjaGVzKHQsZSl7cmV0dXJuIEZpKGV8fHRoaXMsdCl9dG9nZ2xlQXR0cmlidXRlKHQsZSl7bGV0IG49dGhpcztyZXR1cm4gMz09PWFyZ3VtZW50cy5sZW5ndGgmJihuPWFyZ3VtZW50c1syXSksMT09YXJndW1lbnRzLmxlbmd0aCYmKGU9IW4uaGFzQXR0cmlidXRlKHQpKSxlPyhZKG4pLnNldEF0dHJpYnV0ZSh0LCIiKSwhMCk6KFkobikucmVtb3ZlQXR0cmlidXRlKHQpLCExKX10b2dnbGVDbGFzcyh0LGUsbil7bj1ufHx0aGlzLDE9PWFyZ3VtZW50cy5sZW5ndGgmJihlPSFuLmNsYXNzTGlzdC5jb250YWlucyh0KSksZT9uLmNsYXNzTGlzdC5hZGQodCk6bi5jbGFzc0xpc3QucmVtb3ZlKHQpfXRyYW5zZm9ybSh0LGUpeyhlPWV8fHRoaXMpLnN0eWxlLndlYmtpdFRyYW5zZm9ybT10LGUuc3R5bGUudHJhbnNmb3JtPXR9dHJhbnNsYXRlM2QodCxlLG4saSl7dGhpcy50cmFuc2Zvcm0oInRyYW5zbGF0ZTNkKCIrdCsiLCIrZSsiLCIrbisiKSIsaT1pfHx0aGlzKX1hcnJheURlbGV0ZSh0LGUpe2xldCBuO2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKG49dC5pbmRleE9mKGUpLG4+PTApcmV0dXJuIHQuc3BsaWNlKG4sMSl9ZWxzZSBpZihuPW50KHRoaXMsdCkuaW5kZXhPZihlKSxuPj0wKXJldHVybiB0aGlzLnNwbGljZSh0LG4sMSk7cmV0dXJuIG51bGx9X2xvZ2dlcih0LGUpe3N3aXRjaChBcnJheS5pc0FycmF5KGUpJiYxPT09ZS5sZW5ndGgmJkFycmF5LmlzQXJyYXkoZVswXSkmJihlPWVbMF0pLHQpe2Nhc2UibG9nIjpjYXNlIndhcm4iOmNhc2UiZXJyb3IiOmNvbnNvbGVbdF0oLi4uZSl9fV9sb2coLi4udCl7dGhpcy5fbG9nZ2VyKCJsb2ciLHQpfV93YXJuKC4uLnQpe3RoaXMuX2xvZ2dlcigid2FybiIsdCl9X2Vycm9yKC4uLnQpe3RoaXMuX2xvZ2dlcigiZXJyb3IiLHQpfV9sb2dmKHQsLi4uZSl7cmV0dXJuWyJbJXM6OiVzXSIsdGhpcy5pcyx0LC4uLmVdfX1yZXR1cm4gby5wcm90b3R5cGUuaXM9IiIsb30pKTtmdW5jdGlvbiBucih0LGUpe2xldCBuPTAsaT0wO2Zvcig7Oyl7aWYobj09PXQubGVuZ3RoKXJldHVybiBpPT09ZS5sZW5ndGg/MDotMTtpZihpPT09ZS5sZW5ndGgpcmV0dXJuIDE7aWYocnIodFtuXSkmJnJyKGVbaV0pKXtjb25zdCByPW4sbz1pO249aXIodCxuKzEpLGk9aXIoZSxpKzEpO2NvbnN0IGE9cGFyc2VGbG9hdCh0LnNsaWNlKHIsbikpLHM9cGFyc2VGbG9hdChlLnNsaWNlKG8saSkpO2lmKGE8cylyZXR1cm4tMTtpZihhPnMpcmV0dXJuIDF9ZWxzZXtpZihvcih0W25dKSl7aWYoIW9yKGVbaV0pKXJldHVybi0xfWVsc2V7aWYob3IoZVtpXSkpcmV0dXJuIDE7aWYodFtuXTxlW2ldKXJldHVybi0xO2lmKHRbbl0+ZVtpXSlyZXR1cm4gMX1uKyssaSsrfX19ZnVuY3Rpb24gaXIodCxlKXtsZXQgbjshKGZ1bmN0aW9uKHQpe3RbdC5OQVRVUkFMPTBdPSJOQVRVUkFMIix0W3QuUkVBTD0xXT0iUkVBTCIsdFt0LkVYUE9ORU5UX1NJR049Ml09IkVYUE9ORU5UX1NJR04iLHRbdC5FWFBPTkVOVD0zXT0iRVhQT05FTlQifSkobnx8KG49e30pKTtsZXQgaT1uLk5BVFVSQUw7Zm9yKDtlPHQubGVuZ3RoO2UrKylpZihpPT09bi5OQVRVUkFMKXtpZigiLiI9PT10W2VdKWk9bi5SRUFMO2Vsc2UgaWYoImUiPT09dFtlXXx8IkUiPT09dFtlXSlpPW4uRVhQT05FTlRfU0lHTjtlbHNlIGlmKCFycih0W2VdKSlicmVha31lbHNlIGlmKGk9PT1uLlJFQUwpe2lmKCJlIj09PXRbZV18fCJFIj09PXRbZV0paT1uLkVYUE9ORU5UX1NJR047ZWxzZSBpZighcnIodFtlXSkpYnJlYWt9ZWxzZSBpZihpPT09bi5FWFBPTkVOVF9TSUdOKXtpZighcnIodFtlXSkmJiIrIiE9PXRbZV0mJiItIiE9PXRbZV0pYnJlYWs7aT1uLkVYUE9ORU5UfWVsc2UgaWYoaT09PW4uRVhQT05FTlQmJiFycih0W2VdKSlicmVhaztyZXR1cm4gZX1mdW5jdGlvbiBycih0KXtyZXR1cm4iMCI8PXQmJnQ8PSI5In1mdW5jdGlvbiBvcih0KXtyZXR1cm4iLyI9PT10fHwiXyI9PT10fHxycih0KX1mdW5jdGlvbiBhcih0KXtyZXR1cm4gU2UuZXhwb3J0cy51bmlvbi5hcHBseShudWxsLFNlLmV4cG9ydHMudmFsdWVzKHQpKS5zb3J0KG5yKX1jbGFzcyBzciBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm5hbWU9IlJlcXVlc3RDYW5jZWxsYXRpb25FcnJvciJ9fWNsYXNzIGxyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5uYW1lPSJJbnZhbGlkUmVxdWVzdE9wdGlvbnNFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsbHIucHJvdG90eXBlKX19Y2xhc3MgY3IgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5tZXNzYWdlPWBSZXF1ZXN0TmV0d29ya0Vycm9yOiAke3Quc3RhdHVzfSBhdCAke2V9YCx0aGlzLm5hbWU9IlJlcXVlc3ROZXR3b3JrRXJyb3IiLHRoaXMucmVxPXQsdGhpcy51cmw9ZX19dmFyIHVyOyEoZnVuY3Rpb24odCl7dC5HRVQ9IkdFVCIsdC5QT1NUPSJQT1NUIn0pKHVyfHwodXI9e30pKTtjbGFzcyBocnt2YWxpZGF0ZSgpe2lmKHRoaXMubWV0aG9kVHlwZT09PXVyLkdFVCYmdGhpcy5ib2R5KXRocm93IG5ldyBscigiYm9keSBtdXN0IGJlIG1pc3NpbmcgZm9yIGEgR0VUIHJlcXVlc3QuIil9fWNsYXNzIGRye2NvbnN0cnVjdG9yKHQ9MWUzLGU9Myl7dGhpcy5fcXVldWU9W10sdGhpcy5fbkFjdGl2ZVJlcXVlc3RzPTAsdGhpcy5fblNpbXVsdGFuZW91c1JlcXVlc3RzPXQsdGhpcy5fbWF4UmV0cmllcz1lfXJlcXVlc3QodCxlKXtjb25zdCBuPShmdW5jdGlvbiBpKHQpe2NvbnN0IGU9bmV3IGhyO3JldHVybiB0PyhlLm1ldGhvZFR5cGU9dXIuUE9TVCxlLmJvZHk9KGZ1bmN0aW9uIG4odCl7Y29uc3QgZT1uZXcgRm9ybURhdGE7Zm9yKGNvbnN0W24saV1vZiBPYmplY3QuZW50cmllcyh0KSl7Y29uc3QgdD1BcnJheS5pc0FycmF5KGkpP2k6W2ldO2Zvcihjb25zdCBpIG9mIHQpZS5hcHBlbmQobixpKX1yZXR1cm4gZX0pKHQpLGUpOihlLm1ldGhvZFR5cGU9dXIuR0VULGUpfSkoZSk7cmV0dXJuIHRoaXMucmVxdWVzdFdpdGhPcHRpb25zKHQsbil9cmVxdWVzdFdpdGhPcHRpb25zKHQsZSl7cmV0dXJuIGUudmFsaWRhdGUoKSxuZXcgUHJvbWlzZSgoKHQsZSk9Pnt0aGlzLl9xdWV1ZS5wdXNoKHtyZXNvbHZlOnQscmVqZWN0OmV9KSx0aGlzLmxhdW5jaFJlcXVlc3RzKCl9KSkudGhlbigoKCk9PnRoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsdGhpcy5fbWF4UmV0cmllcyxlKSkpLnRoZW4oKHQ9Pih0aGlzLl9uQWN0aXZlUmVxdWVzdHMtLSx0aGlzLmxhdW5jaFJlcXVlc3RzKCksdCkpLCh0PT4oIlJlcXVlc3ROZXR3b3JrRXJyb3IiPT09dC5uYW1lJiYodGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpKSxQcm9taXNlLnJlamVjdCh0KSkpKX1mZXRjaCh0LGUpe3JldHVybiBuZXcgUHJvbWlzZSgoKHQsZSk9Pnt0aGlzLl9xdWV1ZS5wdXNoKHtyZXNvbHZlOnQscmVqZWN0OmV9KSx0aGlzLmxhdW5jaFJlcXVlc3RzKCl9KSkudGhlbigoKCk9PntsZXQgbj0xO3JldHVybiBuZXcgUHJvbWlzZSgoaT0+e2NvbnN0IHI9KCk9PntmZXRjaCh0LGUpLnRoZW4oKHQ9PntpZighdC5vayYmdGhpcy5fbWF4UmV0cmllcz5uKXJldHVybiBuKyssdm9pZCByKCk7aSh0KSx0aGlzLl9uQWN0aXZlUmVxdWVzdHMtLSx0aGlzLmxhdW5jaFJlcXVlc3RzKCl9KSl9O3IoKX0pKX0pKX1jbGVhclF1ZXVlKCl7Zm9yKDt0aGlzLl9xdWV1ZS5sZW5ndGg+MDspdGhpcy5fcXVldWUucG9wKCkucmVqZWN0KG5ldyBzcigiUmVxdWVzdCBjYW5jZWxsZWQgYnkgY2xlYXJRdWV1ZSIpKX1hY3RpdmVSZXF1ZXN0cygpe3JldHVybiB0aGlzLl9uQWN0aXZlUmVxdWVzdHN9b3V0c3RhbmRpbmdSZXF1ZXN0cygpe3JldHVybiB0aGlzLl9uQWN0aXZlUmVxdWVzdHMrdGhpcy5fcXVldWUubGVuZ3RofWxhdW5jaFJlcXVlc3RzKCl7Zm9yKDt0aGlzLl9uQWN0aXZlUmVxdWVzdHM8dGhpcy5fblNpbXVsdGFuZW91c1JlcXVlc3RzJiZ0aGlzLl9xdWV1ZS5sZW5ndGg+MDspdGhpcy5fbkFjdGl2ZVJlcXVlc3RzKyssdGhpcy5fcXVldWUucG9wKCkucmVzb2x2ZSh2b2lkIDApfXByb21pc2VXaXRoUmV0cmllcyh0LGUsbil7cmV0dXJuIHRoaXMuX3Byb21pc2VGcm9tVXJsKHQsbikudGhlbigodD0+dCksKGk9PmU+MD90aGlzLnByb21pc2VXaXRoUmV0cmllcyh0LGUtMSxuKTpQcm9taXNlLnJlamVjdChpKSkpfV9wcm9taXNlRnJvbVVybCh0LGUpe3JldHVybiBuZXcgUHJvbWlzZSgoKG4saSk9Pntjb25zdCByPShmdW5jdGlvbiBvKHQsZSxuLGkpe2NvbnN0IHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiByLm9wZW4odCxlKSxuJiYoci53aXRoQ3JlZGVudGlhbHM9biksaSYmci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGkpLHJ9KShlLm1ldGhvZFR5cGUsdCxlLndpdGhDcmVkZW50aWFscyxlLmNvbnRlbnRUeXBlKTtyLm9ubG9hZD1mdW5jdGlvbigpezIwMD09PXIuc3RhdHVzP24oSlNPTi5wYXJzZShyLnJlc3BvbnNlVGV4dCkpOmkobmV3IGNyKHIsdCkpfSxyLm9uZXJyb3I9ZnVuY3Rpb24oKXtpKG5ldyBjcihyLHQpKX0sZS5ib2R5P3Iuc2VuZChlLmJvZHkpOnIuc2VuZCgpfSkpfX1jb25zdCBwcj0iZXhwZXJpbWVudGFsUGx1Z2luIixmcj1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO2xldCBtcj1ncigpO2Z1bmN0aW9uIGdyKHQ9ImRhdGEiLGU9ZnIpe3JldHVybiIvIj09PXRbdC5sZW5ndGgtMV0mJih0PXQuc2xpY2UoMCx0Lmxlbmd0aC0xKSkse2Vudmlyb25tZW50OigpPT55cih0LCIvZW52aXJvbm1lbnQiKSxleHBlcmltZW50czooKT0+eXIodCwiL2V4cGVyaW1lbnRzIikscGx1Z2luUm91dGU6KGUsbixpKT0+eXIodCsiL3BsdWdpbiIsYC8ke2V9JHtufWAsaSkscGx1Z2luc0xpc3Rpbmc6KCk9PnlyKHQsIi9wbHVnaW5zX2xpc3RpbmciLHZyKHtbcHJdOmUuZ2V0QWxsKHByKX0pKSxydW5zOigpPT55cih0LCIvcnVucyIpLHJ1bnNGb3JFeHBlcmltZW50OmU9PnlyKHQsIi9leHBlcmltZW50X3J1bnMiLHZyKHtleHBlcmltZW50OlN0cmluZyhlKX0pKX19ZnVuY3Rpb24gX3IoKXtyZXR1cm4gbXJ9ZnVuY3Rpb24geXIodCxlLG49bmV3IFVSTFNlYXJjaFBhcmFtcyl7bGV0IGk9dCtlO3JldHVybiBTdHJpbmcobikmJihpKz0oZS5pbmNsdWRlcygiPyIpPyImIjoiPyIpK1N0cmluZyhuKSksaX1mdW5jdGlvbiB2cih0PXt9KXtjb25zdCBlPU9iamVjdC5rZXlzKHQpLnNvcnQoKS5maWx0ZXIoKGU9PnRbZV0pKSxuPW5ldyBVUkxTZWFyY2hQYXJhbXM7cmV0dXJuIGUuZm9yRWFjaCgoZT0+e2NvbnN0IGk9dFtlXTsoQXJyYXkuaXNBcnJheShpKT9pOltpXSkuZm9yRWFjaCgodD0+bi5hcHBlbmQoZSx0KSkpfSkpLG59dmFyIGJyO2Z1bmN0aW9uIHhyKHQsZSl7Y29uc3Qgbj0oKCk9Pnt0cnl7cmV0dXJuIG5ldyBSZWdFeHAoZSl9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSkoKTtyZXR1cm57bmFtZTplLG1ldGFkYXRhOnt0eXBlOmJyLlNFQVJDSF9SRVNVTFRTLHZhbGlkUmVnZXg6ISFuLHVuaXZlcnNhbFJlZ2V4OiIuKiI9PT1lfSxpdGVtczpuP3QuZmlsdGVyKCh0PT50Lm1hdGNoKG4pKSk6W119fWZ1bmN0aW9uIHdyKHQsZSxuKXtjb25zdCBpPShmdW5jdGlvbiByKHQsZT0iIil7Y29uc3Qgbj1beHIodCxlKV0saT0oZnVuY3Rpb24gcih0LGU9Ii8iKXtjb25zdCBuPVtdLGk9e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9dC5pbmRleE9mKGUpLG89cj49MD90LnNsaWNlKDAscik6dDtpZighaVtvXSl7Y29uc3QgdD17bmFtZTpvLG1ldGFkYXRhOnt0eXBlOmJyLlBSRUZJWF9HUk9VUH0saXRlbXM6W119O2lbb109dCxuLnB1c2godCl9aVtvXS5pdGVtcy5wdXNoKHQpfSkpLG59KSh0KTtyZXR1cm5bXS5jb25jYXQobixpKX0pKGFyKHQpLG4pLG89KGZ1bmN0aW9uIGEodCl7Y29uc3QgZT1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChuPT57dFtuXS5mb3JFYWNoKCh0PT57Y29uc3QgaT1lLmdldCh0KXx8W107aS5wdXNoKG4pLGUuc2V0KHQsaSl9KSl9KSksZX0pKFNlLmV4cG9ydHMucGljayh0LGUpKTtyZXR1cm4gaS5tYXAoKCh7bmFtZTp0LG1ldGFkYXRhOmUsaXRlbXM6bn0pPT4oe25hbWU6dCxtZXRhZGF0YTplLGl0ZW1zOm4ubWFwKCh0PT4oe3RhZzp0LHJ1bnM6KG8uZ2V0KHQpfHxbXSkuc2xpY2UoKX0pKSl9KSkpfWZ1bmN0aW9uIFNyKHQsZSl7Y29uc3Qgbj1ucih0LnRhZyxlLnRhZyk7cmV0dXJuIDAhPW4/bjpucih0LnJ1bixlLnJ1bil9ZnVuY3Rpb24gTXIodCxlLG4pe3JldHVybiB3cih0LGUsbikubWFwKChmdW5jdGlvbiBpKHQpe2NvbnN0IGU9U2UuZXhwb3J0cy5mbGF0dGVuKHQuaXRlbXMubWFwKCgoe3RhZzp0LHJ1bnM6ZX0pPT5lLm1hcCgoZT0+KHt0YWc6dCxydW46ZX0pKSkpKSk7cmV0dXJuIGUuc29ydChTcikse25hbWU6dC5uYW1lLG1ldGFkYXRhOnQubWV0YWRhdGEsaXRlbXM6ZX19KSl9Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovIShmdW5jdGlvbih0KXt0W3QuU0VBUkNIX1JFU1VMVFM9MF09IlNFQVJDSF9SRVNVTFRTIix0W3QuUFJFRklYX0dST1VQPTFdPSJQUkVGSVhfR1JPVVAifSkoYnJ8fChicj17fSkpO2NvbnN0IEVyPXthdHRhY2hlZDohMCxkZXRhY2hlZDohMCxyZWFkeTohMCxjcmVhdGVkOiEwLGJlZm9yZVJlZ2lzdGVyOiEwLHJlZ2lzdGVyZWQ6ITAsYXR0cmlidXRlQ2hhbmdlZDohMCxsaXN0ZW5lcnM6ITAsaG9zdEF0dHJpYnV0ZXM6ITB9LFRyPXthdHRhY2hlZDohMCxkZXRhY2hlZDohMCxyZWFkeTohMCxjcmVhdGVkOiEwLGJlZm9yZVJlZ2lzdGVyOiEwLHJlZ2lzdGVyZWQ6ITAsYXR0cmlidXRlQ2hhbmdlZDohMCxiZWhhdmlvcnM6ITAsX25vQWNjZXNzb3JzOiEwfSxDcj1PYmplY3QuYXNzaWduKHtsaXN0ZW5lcnM6ITAsaG9zdEF0dHJpYnV0ZXM6ITAscHJvcGVydGllczohMCxvYnNlcnZlcnM6ITB9LFRyKTtmdW5jdGlvbiBBcih0LGUsbixpKXshKGZ1bmN0aW9uIHIodCxlLG4pe2NvbnN0IGk9dC5fbm9BY2Nlc3NvcnMscj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IGE9cltvXTtpZighKGEgaW4gbikpaWYoaSllW2FdPXRbYV07ZWxzZXtsZXQgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsYSk7biYmKG4uY29uZmlndXJhYmxlPSEwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGEsbikpfX19KShlLHQsaSk7Zm9yKGxldCB0IGluIEVyKWVbdF0mJihuW3RdPW5bdF18fFtdLG5bdF0ucHVzaChlW3RdKSl9ZnVuY3Rpb24ga3IodCxlLG4pe2U9ZXx8W107Zm9yKGxldCBpPXQubGVuZ3RoLTE7aT49MDtpLS0pe2xldCByPXRbaV07cj9BcnJheS5pc0FycmF5KHIpP2tyKHIsZSk6ZS5pbmRleE9mKHIpPDAmJighbnx8bi5pbmRleE9mKHIpPDApJiZlLnVuc2hpZnQocik6Y29uc29sZS53YXJuKCJiZWhhdmlvciBpcyBudWxsLCBjaGVjayBmb3IgbWlzc2luZyBvciA0MDQgaW1wb3J0Iil9cmV0dXJuIGV9ZnVuY3Rpb24gTHIodCxlKXtmb3IoY29uc3QgbiBpbiBlKXtjb25zdCBpPXRbbl0scj1lW25dO3Rbbl09ISgidmFsdWUiaW4gcikmJmkmJiJ2YWx1ZSJpbiBpP09iamVjdC5hc3NpZ24oe3ZhbHVlOmkudmFsdWV9LHIpOnJ9fWNvbnN0IFByPWVyKEhUTUxFbGVtZW50KTtmdW5jdGlvbiBOcih0LGUsbil7bGV0IGk7Y29uc3Qgcj17fTtjbGFzcyBvIGV4dGVuZHMgZXtzdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXtpZih0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoImdlbmVyYXRlZEZyb20iLHRoaXMpKSl7aWYoaSlmb3IobGV0IHQsZT0wO2U8aS5sZW5ndGg7ZSsrKXQ9aVtlXSx0LnByb3BlcnRpZXMmJnRoaXMuY3JlYXRlUHJvcGVydGllcyh0LnByb3BlcnRpZXMpLHQub2JzZXJ2ZXJzJiZ0aGlzLmNyZWF0ZU9ic2VydmVycyh0Lm9ic2VydmVycyx0LnByb3BlcnRpZXMpO3QucHJvcGVydGllcyYmdGhpcy5jcmVhdGVQcm9wZXJ0aWVzKHQucHJvcGVydGllcyksdC5vYnNlcnZlcnMmJnRoaXMuY3JlYXRlT2JzZXJ2ZXJzKHQub2JzZXJ2ZXJzLHQucHJvcGVydGllcyksdGhpcy5fcHJlcGFyZVRlbXBsYXRlKCl9ZWxzZSBlLl9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyl9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7Y29uc3QgZT17fTtpZihpKWZvcihsZXQgdD0wO3Q8aS5sZW5ndGg7dCsrKUxyKGUsaVt0XS5wcm9wZXJ0aWVzKTtyZXR1cm4gTHIoZSx0LnByb3BlcnRpZXMpLGV9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtsZXQgZT1bXTtpZihpKWZvcihsZXQgdCxuPTA7bjxpLmxlbmd0aDtuKyspdD1pW25dLHQub2JzZXJ2ZXJzJiYoZT1lLmNvbmNhdCh0Lm9ic2VydmVycykpO3JldHVybiB0Lm9ic2VydmVycyYmKGU9ZS5jb25jYXQodC5vYnNlcnZlcnMpKSxlfWNyZWF0ZWQoKXtzdXBlci5jcmVhdGVkKCk7Y29uc3QgdD1yLmNyZWF0ZWQ7aWYodClmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLmNhbGwodGhpcyl9X3JlZ2lzdGVyZWQoKXtjb25zdCB0PW8ucHJvdG90eXBlO2lmKCF0Lmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9faGFzUmVnaXN0ZXJGaW5pc2hlZCIsdCkpKXt0Ll9faGFzUmVnaXN0ZXJGaW5pc2hlZD0hMCxzdXBlci5fcmVnaXN0ZXJlZCgpLHcmJmEodCk7Y29uc3QgZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7bGV0IG49ci5iZWZvcmVSZWdpc3RlcjtpZihuKWZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKW5bdF0uY2FsbChlKTtpZihuPXIucmVnaXN0ZXJlZCxuKWZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKW5bdF0uY2FsbChlKX19X2FwcGx5TGlzdGVuZXJzKCl7c3VwZXIuX2FwcGx5TGlzdGVuZXJzKCk7Y29uc3QgdD1yLmxpc3RlbmVycztpZih0KWZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtjb25zdCBuPXRbZV07aWYobilmb3IobGV0IHQgaW4gbil0aGlzLl9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKHRoaXMsdCxuW3RdKX19X2Vuc3VyZUF0dHJpYnV0ZXMoKXtjb25zdCB0PXIuaG9zdEF0dHJpYnV0ZXM7aWYodClmb3IobGV0IGU9dC5sZW5ndGgtMTtlPj0wO2UtLSl7Y29uc3Qgbj10W2VdO2ZvcihsZXQgdCBpbiBuKXRoaXMuX2Vuc3VyZUF0dHJpYnV0ZSh0LG5bdF0pfXN1cGVyLl9lbnN1cmVBdHRyaWJ1dGVzKCl9cmVhZHkoKXtzdXBlci5yZWFkeSgpO2xldCB0PXIucmVhZHk7aWYodClmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLmNhbGwodGhpcyl9YXR0YWNoZWQoKXtzdXBlci5hdHRhY2hlZCgpO2xldCB0PXIuYXR0YWNoZWQ7aWYodClmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLmNhbGwodGhpcyl9ZGV0YWNoZWQoKXtzdXBlci5kZXRhY2hlZCgpO2xldCB0PXIuZGV0YWNoZWQ7aWYodClmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLmNhbGwodGhpcyl9YXR0cmlidXRlQ2hhbmdlZCh0LGUsbil7c3VwZXIuYXR0cmlidXRlQ2hhbmdlZCgpO2xldCBpPXIuYXR0cmlidXRlQ2hhbmdlZDtpZihpKWZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlbcl0uY2FsbCh0aGlzLHQsZSxuKX19aWYobil7QXJyYXkuaXNBcnJheShuKXx8KG49W25dKTtsZXQgdD1lLnByb3RvdHlwZS5iZWhhdmlvcnM7aT1rcihuLG51bGwsdCksby5wcm90b3R5cGUuYmVoYXZpb3JzPXQ/dC5jb25jYXQobik6aX1jb25zdCBhPWU9PntpJiYoZnVuY3Rpb24gbih0LGUsaSl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspQXIodCxlW25dLGksQ3IpfSkoZSxpLHIpLEFyKGUsdCxyLFRyKX07cmV0dXJuIHd8fGEoby5wcm90b3R5cGUpLG8uZ2VuZXJhdGVkRnJvbT10LG99Y29uc3QgSXI9ZnVuY3Rpb24odCxlKXt0fHxjb25zb2xlLndhcm4oIlBvbHltZXIuQ2xhc3MgcmVxdWlyZXMgYGluZm9gIGFyZ3VtZW50Iik7bGV0IG49ZT9lKFByKTpQcjtyZXR1cm4gbj1Ocih0LG4sdC5iZWhhdmlvcnMpLG4uaXM9bi5wcm90b3R5cGUuaXM9dC5pcyxufSxScj1mdW5jdGlvbih0KXtsZXQgZTtyZXR1cm4gZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJyLkNsYXNzKHQpLHQuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzJiYoZS5wcm90b3R5cGUuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzPXQuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzKSxjdXN0b21FbGVtZW50cy5kZWZpbmUoZS5pcyxlKSxlfTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KZnVuY3Rpb24gT3IodCxlLG4saSxyKXtsZXQgbztyJiYobz0ib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1uLG8mJihpPXQuX19kYXRhVGVtcFtlXSkpO2xldCBhPWkhPT1uJiYoaT09aXx8bj09bik7cmV0dXJuIG8mJmEmJih0Ll9fZGF0YVRlbXBbZV09biksYX1Sci5DbGFzcz1Jcjtjb25zdCB6cj1JKCh0PT5jbGFzcyBleHRlbmRzIHR7X3Nob3VsZFByb3BlcnR5Q2hhbmdlKHQsZSxuKXtyZXR1cm4gT3IodGhpcyx0LGUsbiwhMCl9fSkpLERyPUkoKHQ9PmNsYXNzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57bXV0YWJsZURhdGE6Qm9vbGVhbn19X3Nob3VsZFByb3BlcnR5Q2hhbmdlKHQsZSxuKXtyZXR1cm4gT3IodGhpcyx0LGUsbix0aGlzLm11dGFibGVEYXRhKX19KSk7enIuX211dGFibGVQcm9wZXJ0eUNoYW5nZT1PcjsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KbGV0IEJyPW51bGw7ZnVuY3Rpb24gSHIoKXtyZXR1cm4gQnJ9SHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpIcix3cml0YWJsZTohMH19KTtjb25zdCBGcj1oZShIciksVnI9enIoRnIpLFVyPWhlKGNsYXNze30pO2Z1bmN0aW9uIGpyKHQsZSl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2xldCBpPWVbbl07aWYoQm9vbGVhbih0KSE9Qm9vbGVhbihpLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXykpaWYoaS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFKXQ/KGkuX19wb2x5bWVyVGV4dENvbnRlbnRfXz1pLnRleHRDb250ZW50LGkudGV4dENvbnRlbnQ9IiIpOmkudGV4dENvbnRlbnQ9aS5fX3BvbHltZXJUZXh0Q29udGVudF9fO2Vsc2UgaWYoInNsb3QiPT09aS5sb2NhbE5hbWUpaWYodClpLl9fcG9seW1lclJlcGxhY2VkX189ZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiaGlkZGVuLXNsb3QiKSxZKFkoaSkucGFyZW50Tm9kZSkucmVwbGFjZUNoaWxkKGkuX19wb2x5bWVyUmVwbGFjZWRfXyxpKTtlbHNle2NvbnN0IHQ9aS5fX3BvbHltZXJSZXBsYWNlZF9fO3QmJlkoWSh0KS5wYXJlbnROb2RlKS5yZXBsYWNlQ2hpbGQoaSx0KX1lbHNlIGkuc3R5bGUmJih0PyhpLl9fcG9seW1lckRpc3BsYXlfXz1pLnN0eWxlLmRpc3BsYXksaS5zdHlsZS5kaXNwbGF5PSJub25lIik6aS5zdHlsZS5kaXNwbGF5PWkuX19wb2x5bWVyRGlzcGxheV9fKTtpLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXz10LGkuX3Nob3dIaWRlQ2hpbGRyZW4mJmkuX3Nob3dIaWRlQ2hpbGRyZW4odCl9fWNsYXNzIEdyIGV4dGVuZHMgVXJ7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9jb25maWd1cmVQcm9wZXJ0aWVzKHQpLHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX19kYXRhSG9zdCk7bGV0IGU9W107dGhpcy5jaGlsZHJlbj1lO2ZvcihsZXQgdD10aGlzLnJvb3QuZmlyc3RDaGlsZDt0O3Q9dC5uZXh0U2libGluZyllLnB1c2godCksdC5fX3RlbXBsYXRpemVJbnN0YW5jZT10aGlzO3RoaXMuX190ZW1wbGF0aXplT3duZXImJnRoaXMuX190ZW1wbGF0aXplT3duZXIuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fJiZ0aGlzLl9zaG93SGlkZUNoaWxkcmVuKCEwKTtsZXQgbj10aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnM7KHQmJm4uaW5zdGFuY2VQcm9wc3x8IW4uaW5zdGFuY2VQcm9wcykmJnRoaXMuX2VuYWJsZVByb3BlcnRpZXMoKX1fY29uZmlndXJlUHJvcGVydGllcyh0KXtpZih0aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnMuZm9yd2FyZEhvc3RQcm9wKWZvcihsZXQgdCBpbiB0aGlzLl9faG9zdFByb3BzKXRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eSh0LHRoaXMuX19kYXRhSG9zdFsiX2hvc3RfIit0XSk7Zm9yKGxldCBlIGluIHQpdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KGUsdFtlXSl9Zm9yd2FyZEhvc3RQcm9wKHQsZSl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHQsZSwhMSwhMCkmJnRoaXMuX19kYXRhSG9zdC5fZW5xdWV1ZUNsaWVudCh0aGlzKX1fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LGUsbil7aWYodGhpcy5fbWV0aG9kSG9zdCYmdGhpcy5fX3RlbXBsYXRpemVPcHRpb25zLnBhcmVudE1vZGVsKXRoaXMuX21ldGhvZEhvc3QuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodCxlLCh0PT57dC5tb2RlbD10aGlzLG4odCl9KSk7ZWxzZXtsZXQgaT10aGlzLl9fZGF0YUhvc3QuX19kYXRhSG9zdDtpJiZpLl9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKHQsZSxuKX19X3Nob3dIaWRlQ2hpbGRyZW4odCl7anIodCx0aGlzLmNoaWxkcmVuKX1fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUodCxlLG4pe3QuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fJiZ0Lm5vZGVUeXBlPT1Ob2RlLlRFWFRfTk9ERSYmInRleHRDb250ZW50Ij09ZT90Ll9fcG9seW1lclRleHRDb250ZW50X189bjpzdXBlci5fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUodCxlLG4pfWdldCBwYXJlbnRNb2RlbCgpe2xldCB0PXRoaXMuX19wYXJlbnRNb2RlbDtpZighdCl7bGV0IGU7dD10aGlzO2Rve3Q9dC5fX2RhdGFIb3N0Ll9fZGF0YUhvc3R9d2hpbGUoKGU9dC5fX3RlbXBsYXRpemVPcHRpb25zKSYmIWUucGFyZW50TW9kZWwpO3RoaXMuX19wYXJlbnRNb2RlbD10fXJldHVybiB0fWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuITB9fWNvbnN0IFdyPXpyKEdyKTtmdW5jdGlvbiBxcih0KXtsZXQgZT10Ll9fZGF0YUhvc3Q7cmV0dXJuIGUmJmUuX21ldGhvZEhvc3R8fGV9ZnVuY3Rpb24gWXIodCxlKXtyZXR1cm4gZnVuY3Rpb24gdChuLGkscil7ZS5jYWxsKG4uX190ZW1wbGF0aXplT3duZXIsaS5zdWJzdHJpbmcoIl9ob3N0XyIubGVuZ3RoKSxyW2ldKX19ZnVuY3Rpb24gWHIodCxlKXtyZXR1cm4gZnVuY3Rpb24gdChuLGkscil7ZS5jYWxsKG4uX190ZW1wbGF0aXplT3duZXIsbixpLHJbaV0pfX1mdW5jdGlvbiAkcih0LGUsbil7aWYoYiYmIXFyKHQpKXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IHRlbXBsYXRlIG93bmVyIG5vdCB0cnVzdGVkIik7aWYobj1ufHx7fSx0Ll9fdGVtcGxhdGl6ZU93bmVyKXRocm93IG5ldyBFcnJvcigiQSA8dGVtcGxhdGU+IGNhbiBvbmx5IGJlIHRlbXBsYXRpemVkIG9uY2UiKTt0Ll9fdGVtcGxhdGl6ZU93bmVyPWU7bGV0IGk9KGU/ZS5jb25zdHJ1Y3RvcjpHcikuX3BhcnNlVGVtcGxhdGUodCkscj1pLnRlbXBsYXRpemVJbnN0YW5jZUNsYXNzO3J8fChyPShmdW5jdGlvbiBvKHQsZSxuKXtsZXQgaT1uLm11dGFibGVEYXRhP1dyOkdyOyRyLm1peGluJiYoaT0kci5taXhpbihpKSk7bGV0IHI9Y2xhc3MgZXh0ZW5kcyBpe307cmV0dXJuIHIucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM9bixyLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKHQpLChmdW5jdGlvbiBvKHQsZSxuLGkpe2xldCByPW4uaG9zdFByb3BzfHx7fTtmb3IobGV0IGUgaW4gaS5pbnN0YW5jZVByb3BzKXtkZWxldGUgcltlXTtsZXQgbj1pLm5vdGlmeUluc3RhbmNlUHJvcDtuJiZ0LnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QoZSx0LnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuTk9USUZZLHtmbjpYcigwLG4pfSl9aWYoaS5mb3J3YXJkSG9zdFByb3AmJmUuX19kYXRhSG9zdClmb3IobGV0IGUgaW4gciluLmhhc0hvc3RQcm9wc3x8KG4uaGFzSG9zdFByb3BzPSEwKSx0LnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QoZSx0LnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuTk9USUZZLHtmbjpmdW5jdGlvbiB0KGUsbixpKXtlLl9fZGF0YUhvc3QuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCgiX2hvc3RfIituLGlbbl0sITAsITApfX0pfSkocix0LGUsbikscn0pKHQsaSxuKSxpLnRlbXBsYXRpemVJbnN0YW5jZUNsYXNzPXIpO2NvbnN0IGE9cXIodCk7IShmdW5jdGlvbiBzKHQsZSxuLGkpe2xldCByPW4uZm9yd2FyZEhvc3RQcm9wO2lmKHImJmUuaGFzSG9zdFByb3BzKXtjb25zdCBvPSJ0ZW1wbGF0ZSI9PXQubG9jYWxOYW1lO2xldCBhPWUudGVtcGxhdGl6ZVRlbXBsYXRlQ2xhc3M7aWYoIWEpe2lmKG8pe2xldCB0PW4ubXV0YWJsZURhdGE/VnI6RnI7Y2xhc3MgaSBleHRlbmRzIHR7fWE9ZS50ZW1wbGF0aXplVGVtcGxhdGVDbGFzcz1pfWVsc2V7Y29uc3Qgbj10LmNvbnN0cnVjdG9yO2NsYXNzIGkgZXh0ZW5kcyBue31hPWUudGVtcGxhdGl6ZVRlbXBsYXRlQ2xhc3M9aX1sZXQgcz1lLmhvc3RQcm9wcztmb3IobGV0IHQgaW4gcylhLnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QoIl9ob3N0XyIrdCxhLnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuUFJPUEFHQVRFLHtmbjpZcigwLHIpfSksYS5wcm90b3R5cGUuX2NyZWF0ZU5vdGlmeWluZ1Byb3BlcnR5KCJfaG9zdF8iK3QpO1MmJmkmJihmdW5jdGlvbiBvKHQsZSxuKXtjb25zdCBpPW4uY29uc3RydWN0b3IuX3Byb3BlcnRpZXMse3Byb3BlcnR5RWZmZWN0czpyfT10LHtpbnN0YW5jZVByb3BzOm99PWU7Zm9yKGxldCB0IGluIHIpaWYoIShpW3RdfHxvJiZvW3RdKSl7Y29uc3QgZT1yW3RdO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtjb25zdHtwYXJ0Oml9PWVbbl0uaW5mbztpZighaS5zaWduYXR1cmV8fCFpLnNpZ25hdHVyZS5zdGF0aWMpe2NvbnNvbGUud2FybihgUHJvcGVydHkgJyR7dH0nIHVzZWQgaW4gdGVtcGxhdGUgYnV0IG5vdCBkZWNsYXJlZCBpbiAncHJvcGVydGllcyc7IGF0dHJpYnV0ZSB3aWxsIG5vdCBiZSBvYnNlcnZlZC5gKTticmVha319fX0pKGUsbixpKX1pZih0Ll9fZGF0YVByb3RvJiZPYmplY3QuYXNzaWduKHQuX19kYXRhLHQuX19kYXRhUHJvdG8pLG8pIShmdW5jdGlvbiBhKHQsZSl7QnI9dCxPYmplY3Quc2V0UHJvdG90eXBlT2YodCxlLnByb3RvdHlwZSksbmV3IGUsQnI9bnVsbH0pKHQsYSksdC5fX2RhdGFUZW1wPXt9LHQuX19kYXRhUGVuZGluZz1udWxsLHQuX19kYXRhT2xkPW51bGwsdC5fZW5hYmxlUHJvcGVydGllcygpO2Vsc2V7T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsYS5wcm90b3R5cGUpO2NvbnN0IG49ZS5ob3N0UHJvcHM7Zm9yKGxldCBlIGluIG4paWYoZT0iX2hvc3RfIitlLGUgaW4gdCl7Y29uc3Qgbj10W2VdO2RlbGV0ZSB0W2VdLHQuX19kYXRhW2VdPW59fX19KSh0LGksbixhKTtsZXQgbD1jbGFzcyBleHRlbmRzIHJ7fTtyZXR1cm4gbC5wcm90b3R5cGUuX21ldGhvZEhvc3Q9YSxsLnByb3RvdHlwZS5fX2RhdGFIb3N0PXQsbC5wcm90b3R5cGUuX190ZW1wbGF0aXplT3duZXI9ZSxsLnByb3RvdHlwZS5fX2hvc3RQcm9wcz1pLmhvc3RQcm9wcyxsPWwsbH1mdW5jdGlvbiBLcih0LGUpe2xldCBuO2Zvcig7ZTspaWYobj1lLl9fZGF0YUhvc3Q/ZTplLl9fdGVtcGxhdGl6ZUluc3RhbmNlKXtpZihuLl9fZGF0YUhvc3Q9PXQpcmV0dXJuIG47ZT1uLl9fZGF0YUhvc3R9ZWxzZSBlPVkoZSkucGFyZW50Tm9kZTtyZXR1cm4gbnVsbH0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9jb25zdCBacj17dGVtcGxhdGl6ZSh0LGUpe3RoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGU9dCx0aGlzLmN0b3I9JHIodCx0aGlzLHttdXRhYmxlRGF0YTpCb29sZWFuKGUpLHBhcmVudE1vZGVsOnRoaXMuX3BhcmVudE1vZGVsLGluc3RhbmNlUHJvcHM6dGhpcy5faW5zdGFuY2VQcm9wcyxmb3J3YXJkSG9zdFByb3A6dGhpcy5fZm9yd2FyZEhvc3RQcm9wVjIsbm90aWZ5SW5zdGFuY2VQcm9wOnRoaXMuX25vdGlmeUluc3RhbmNlUHJvcFYyfSl9LHN0YW1wKHQpe3JldHVybiBuZXcgdGhpcy5jdG9yKHQpfSxtb2RlbEZvckVsZW1lbnQodCl7cmV0dXJuIEtyKHRoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGUsdCl9fTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9sZXQgSnI9ITE7ZnVuY3Rpb24gUXIoKXtpZih3JiYhbSl7aWYoIUpyKXtKcj0hMDtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC50ZXh0Q29udGVudD0iZG9tLWJpbmQsZG9tLWlmLGRvbS1yZXBlYXR7ZGlzcGxheTpub25lO30iLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9cmV0dXJuITB9cmV0dXJuITF9Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovY29uc3QgdG89cGkoRHIoaGUoSFRNTEVsZW1lbnQpKSk7Y3VzdG9tRWxlbWVudHMuZGVmaW5lKCJkb20tYmluZCIsY2xhc3MgZXh0ZW5kcyB0b3tzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3JldHVyblsibXV0YWJsZS1kYXRhIl19Y29uc3RydWN0b3IoKXtpZihzdXBlcigpLGIpdGhyb3cgbmV3IEVycm9yKCJzdHJpY3RUZW1wbGF0ZVBvbGljeTogZG9tLWJpbmQgbm90IGFsbG93ZWQiKTt0aGlzLnJvb3Q9bnVsbCx0aGlzLiQ9bnVsbCx0aGlzLl9fY2hpbGRyZW49bnVsbH1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4saSl7dGhpcy5tdXRhYmxlRGF0YT0hMH1jb25uZWN0ZWRDYWxsYmFjaygpe1FyKCl8fCh0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSx0aGlzLnJlbmRlcigpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX3JlbW92ZUNoaWxkcmVuKCl9X19pbnNlcnRDaGlsZHJlbigpe1koWSh0aGlzKS5wYXJlbnROb2RlKS5pbnNlcnRCZWZvcmUodGhpcy5yb290LHRoaXMpfV9fcmVtb3ZlQ2hpbGRyZW4oKXtpZih0aGlzLl9fY2hpbGRyZW4pZm9yKGxldCB0PTA7dDx0aGlzLl9fY2hpbGRyZW4ubGVuZ3RoO3QrKyl0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5fX2NoaWxkcmVuW3RdKX1yZW5kZXIoKXtsZXQgdDtpZighdGhpcy5fX2NoaWxkcmVuKXtpZih0PXR8fHRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSwhdCl7bGV0IGU9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCgpPT57aWYodD10aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIiksIXQpdGhyb3cgbmV3IEVycm9yKCJkb20tYmluZCByZXF1aXJlcyBhIDx0ZW1wbGF0ZT4gY2hpbGQiKTtlLmRpc2Nvbm5lY3QoKSx0aGlzLnJlbmRlcigpfSkpO3JldHVybiB2b2lkIGUub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KX10aGlzLnJvb3Q9dGhpcy5fc3RhbXBUZW1wbGF0ZSh0KSx0aGlzLiQ9dGhpcy5yb290LiQsdGhpcy5fX2NoaWxkcmVuPVtdO2ZvcihsZXQgdD10aGlzLnJvb3QuZmlyc3RDaGlsZDt0O3Q9dC5uZXh0U2libGluZyl0aGlzLl9fY2hpbGRyZW5bdGhpcy5fX2NoaWxkcmVuLmxlbmd0aF09dDt0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9dGhpcy5fX2luc2VydENoaWxkcmVuKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IGVvPURyKHllKTtjbGFzcyBubyBleHRlbmRzIGVve3N0YXRpYyBnZXQgaXMoKXtyZXR1cm4iZG9tLXJlcGVhdCJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpdGVtczp7dHlwZTpBcnJheX0sYXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpdGVtIn0saW5kZXhBczp7dHlwZTpTdHJpbmcsdmFsdWU6ImluZGV4In0saXRlbXNJbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaXRlbXNJbmRleCJ9LHNvcnQ6e3R5cGU6RnVuY3Rpb24sb2JzZXJ2ZXI6Il9fc29ydENoYW5nZWQifSxmaWx0ZXI6e3R5cGU6RnVuY3Rpb24sb2JzZXJ2ZXI6Il9fZmlsdGVyQ2hhbmdlZCJ9LG9ic2VydmU6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfX29ic2VydmVDaGFuZ2VkIn0sZGVsYXk6TnVtYmVyLHJlbmRlcmVkSXRlbUNvdW50Ont0eXBlOk51bWJlcixub3RpZnk6IWsscmVhZE9ubHk6ITB9LGluaXRpYWxDb3VudDp7dHlwZTpOdW1iZXJ9LHRhcmdldEZyYW1lcmF0ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjB9LF90YXJnZXRGcmFtZVRpbWU6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfX2NvbXB1dGVGcmFtZVRpbWUodGFyZ2V0RnJhbWVyYXRlKSJ9LG5vdGlmeURvbUNoYW5nZTp7dHlwZTpCb29sZWFufSxyZXVzZUNodW5rZWRJbnN0YW5jZXM6e3R5cGU6Qm9vbGVhbn19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfX2l0ZW1zQ2hhbmdlZChpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2VzPVtdLHRoaXMuX19yZW5kZXJEZWJvdW5jZXI9bnVsbCx0aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e30sdGhpcy5fX2NodW5rQ291bnQ9bnVsbCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPW51bGwsdGhpcy5fX2l0ZW1zQXJyYXlDaGFuZ2VkPSExLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9ITEsdGhpcy5fX3Nob3VsZENvbnRpbnVlQ2h1bmtpbmc9ITEsdGhpcy5fX2NodW5raW5nSWQ9MCx0aGlzLl9fc29ydEZuPW51bGwsdGhpcy5fX2ZpbHRlckZuPW51bGwsdGhpcy5fX29ic2VydmVQYXRocz1udWxsLHRoaXMuX19jdG9yPW51bGwsdGhpcy5fX2lzRGV0YWNoZWQ9ITAsdGhpcy50ZW1wbGF0ZT1udWxsfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9faXNEZXRhY2hlZD0hMDtmb3IobGV0IHQ9MDt0PHRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO3QrKyl0aGlzLl9fZGV0YWNoSW5zdGFuY2UodCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtpZihzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLFFyKCl8fCh0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSx0aGlzLl9faXNEZXRhY2hlZCl7dGhpcy5fX2lzRGV0YWNoZWQ9ITE7bGV0IHQ9WShZKHRoaXMpLnBhcmVudE5vZGUpO2ZvcihsZXQgZT0wO2U8dGhpcy5fX2luc3RhbmNlcy5sZW5ndGg7ZSsrKXRoaXMuX19hdHRhY2hJbnN0YW5jZShlLHQpfX1fX2Vuc3VyZVRlbXBsYXRpemVkKCl7aWYoIXRoaXMuX19jdG9yKXtjb25zdCB0PXRoaXM7bGV0IGU9dGhpcy50ZW1wbGF0ZT10Ll90ZW1wbGF0ZUluZm8/dDp0aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7aWYoIWUpe2xldCB0PW5ldyBNdXRhdGlvbk9ic2VydmVyKCgoKT0+e2lmKCF0aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIikpdGhyb3cgbmV3IEVycm9yKCJkb20tcmVwZWF0IHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpO3QuZGlzY29ubmVjdCgpLHRoaXMuX19yZW5kZXIoKX0pKTtyZXR1cm4gdC5vYnNlcnZlKHRoaXMse2NoaWxkTGlzdDohMH0pLCExfWxldCBuPXt9O25bdGhpcy5hc109ITAsblt0aGlzLmluZGV4QXNdPSEwLG5bdGhpcy5pdGVtc0luZGV4QXNdPSEwLHRoaXMuX19jdG9yPSRyKGUsdGhpcyx7bXV0YWJsZURhdGE6dGhpcy5tdXRhYmxlRGF0YSxwYXJlbnRNb2RlbDohMCxpbnN0YW5jZVByb3BzOm4sZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHQsZSl7bGV0IG49dGhpcy5fX2luc3RhbmNlcztmb3IobGV0IGkscj0wO3I8bi5sZW5ndGgmJihpPW5bcl0pO3IrKylpLmZvcndhcmRIb3N0UHJvcCh0LGUpfSxub3RpZnlJbnN0YW5jZVByb3A6ZnVuY3Rpb24odCxlLG4pe2lmKFEodGhpcy5hcyxlKSl7bGV0IGk9dFt0aGlzLml0ZW1zSW5kZXhBc107ZT09dGhpcy5hcyYmKHRoaXMuaXRlbXNbaV09bik7bGV0IHI9Sih0aGlzLmFzLGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWAsZSk7dGhpcy5ub3RpZnlQYXRoKHIsbil9fX0pfXJldHVybiEwfV9fZ2V0TWV0aG9kSG9zdCgpe3JldHVybiB0aGlzLl9fZGF0YUhvc3QuX21ldGhvZEhvc3R8fHRoaXMuX19kYXRhSG9zdH1fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtsZXQgZT10LG49dGhpcy5fX2dldE1ldGhvZEhvc3QoKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbltlXS5hcHBseShuLGFyZ3VtZW50cyl9fXJldHVybiB0fV9fc29ydENoYW5nZWQodCl7dGhpcy5fX3NvcnRGbj10aGlzLl9fZnVuY3Rpb25Gcm9tUHJvcGVydHlWYWx1ZSh0KSx0aGlzLml0ZW1zJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcil9X19maWx0ZXJDaGFuZ2VkKHQpe3RoaXMuX19maWx0ZXJGbj10aGlzLl9fZnVuY3Rpb25Gcm9tUHJvcGVydHlWYWx1ZSh0KSx0aGlzLml0ZW1zJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcil9X19jb21wdXRlRnJhbWVUaW1lKHQpe3JldHVybiBNYXRoLmNlaWwoMWUzL3QpfV9fb2JzZXJ2ZUNoYW5nZWQoKXt0aGlzLl9fb2JzZXJ2ZVBhdGhzPXRoaXMub2JzZXJ2ZSYmdGhpcy5vYnNlcnZlLnJlcGxhY2UoIi4qIiwiLiIpLnNwbGl0KCIgIil9X19oYW5kbGVPYnNlcnZlZFBhdGhzKHQpe2lmKHRoaXMuX19zb3J0Rm58fHRoaXMuX19maWx0ZXJGbilpZih0KXtpZih0aGlzLl9fb2JzZXJ2ZVBhdGhzKXtsZXQgZT10aGlzLl9fb2JzZXJ2ZVBhdGhzO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKTA9PT10LmluZGV4T2YoZVtuXSkmJnRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyLHRoaXMuZGVsYXkpfX1lbHNlIHRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyLHRoaXMuZGVsYXkpfV9faXRlbXNDaGFuZ2VkKHQpe3RoaXMuaXRlbXMmJiFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpJiZjb25zb2xlLndhcm4oImRvbS1yZXBlYXQgZXhwZWN0ZWQgYXJyYXkgZm9yIGBpdGVtc2AsIGZvdW5kIix0aGlzLml0ZW1zKSx0aGlzLl9faGFuZGxlSXRlbVBhdGgodC5wYXRoLHQudmFsdWUpfHwoIml0ZW1zIj09PXQucGF0aCYmKHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZD0hMCksdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpKX1fX2RlYm91bmNlUmVuZGVyKHQsZT0wKXt0aGlzLl9fcmVuZGVyRGVib3VuY2VyPVRuLmRlYm91bmNlKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIsZT4wP2d0LmFmdGVyKGUpOnZ0LHQuYmluZCh0aGlzKSksQW4odGhpcy5fX3JlbmRlckRlYm91bmNlcil9cmVuZGVyKCl7dGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpLERpKCl9X19yZW5kZXIoKXtpZighdGhpcy5fX2Vuc3VyZVRlbXBsYXRpemVkKCkpcmV0dXJuO2xldCB0PXRoaXMuaXRlbXN8fFtdO2NvbnN0IGU9dGhpcy5fX3NvcnRBbmRGaWx0ZXJJdGVtcyh0KSxuPXRoaXMuX19jYWxjdWxhdGVMaW1pdChlLmxlbmd0aCk7dGhpcy5fX3VwZGF0ZUluc3RhbmNlcyh0LG4sZSksdGhpcy5pbml0aWFsQ291bnQmJih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rfHx0aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZykmJihjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fY2h1bmtpbmdJZCksdGhpcy5fX2NodW5raW5nSWQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+dGhpcy5fX2NvbnRpbnVlQ2h1bmtpbmcoKSkpKSx0aGlzLl9zZXRSZW5kZXJlZEl0ZW1Db3VudCh0aGlzLl9faW5zdGFuY2VzLmxlbmd0aCksayYmIXRoaXMubm90aWZ5RG9tQ2hhbmdlfHx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJkb20tY2hhbmdlIix7YnViYmxlczohMCxjb21wb3NlZDohMH0pKX1fX3NvcnRBbmRGaWx0ZXJJdGVtcyh0KXtsZXQgZT1uZXcgQXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWVbbl09bjtyZXR1cm4gdGhpcy5fX2ZpbHRlckZuJiYoZT1lLmZpbHRlcigoKGUsbixpKT0+dGhpcy5fX2ZpbHRlckZuKHRbZV0sbixpKSkpKSx0aGlzLl9fc29ydEZuJiZlLnNvcnQoKChlLG4pPT50aGlzLl9fc29ydEZuKHRbZV0sdFtuXSkpKSxlfV9fY2FsY3VsYXRlTGltaXQodCl7bGV0IGU9dDtjb25zdCBuPXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO2lmKHRoaXMuaW5pdGlhbENvdW50KXtsZXQgaTshdGhpcy5fX2NodW5rQ291bnR8fHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZCYmIXRoaXMucmV1c2VDaHVua2VkSW5zdGFuY2VzPyhlPU1hdGgubWluKHQsdGhpcy5pbml0aWFsQ291bnQpLGk9TWF0aC5tYXgoZS1uLDApLHRoaXMuX19jaHVua0NvdW50PWl8fDEpOihpPU1hdGgubWluKE1hdGgubWF4KHQtbiwwKSx0aGlzLl9fY2h1bmtDb3VudCksZT1NYXRoLm1pbihuK2ksdCkpLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9aT09PXRoaXMuX19jaHVua0NvdW50LHRoaXMuX19zaG91bGRDb250aW51ZUNodW5raW5nPWU8dCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpfXJldHVybiB0aGlzLl9faXRlbXNBcnJheUNoYW5nZWQ9ITEsZX1fX2NvbnRpbnVlQ2h1bmtpbmcoKXtpZih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rKXtjb25zdCB0PXBlcmZvcm1hbmNlLm5vdygpLXRoaXMuX19yZW5kZXJTdGFydFRpbWU7dGhpcy5fX2NodW5rQ291bnQ9TWF0aC5yb3VuZCh0aGlzLl9fY2h1bmtDb3VudCoodGhpcy5fdGFyZ2V0RnJhbWVUaW1lL3QpKXx8MX10aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fdXBkYXRlSW5zdGFuY2VzKHQsZSxuKXtjb25zdCBpPXRoaXMuX19pdGVtc0lkeFRvSW5zdElkeD17fTtsZXQgcjtmb3Iocj0wO3I8ZTtyKyspe2xldCBlPXRoaXMuX19pbnN0YW5jZXNbcl0sbz1uW3JdLGE9dFtvXTtpW29dPXIsZT8oZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuYXMsYSksZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuaW5kZXhBcyxyKSxlLl9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5pdGVtc0luZGV4QXMsbyksZS5fZmx1c2hQcm9wZXJ0aWVzKCkpOnRoaXMuX19pbnNlcnRJbnN0YW5jZShhLHIsbyl9Zm9yKGxldCB0PXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoLTE7dD49cjt0LS0pdGhpcy5fX2RldGFjaEFuZFJlbW92ZUluc3RhbmNlKHQpfV9fZGV0YWNoSW5zdGFuY2UodCl7bGV0IGU9dGhpcy5fX2luc3RhbmNlc1t0XTtjb25zdCBuPVkoZS5yb290KTtmb3IobGV0IHQ9MDt0PGUuY2hpbGRyZW4ubGVuZ3RoO3QrKyluLmFwcGVuZENoaWxkKGUuY2hpbGRyZW5bdF0pO3JldHVybiBlfV9fYXR0YWNoSW5zdGFuY2UodCxlKXtlLmluc2VydEJlZm9yZSh0aGlzLl9faW5zdGFuY2VzW3RdLnJvb3QsdGhpcyl9X19kZXRhY2hBbmRSZW1vdmVJbnN0YW5jZSh0KXt0aGlzLl9fZGV0YWNoSW5zdGFuY2UodCksdGhpcy5fX2luc3RhbmNlcy5zcGxpY2UodCwxKX1fX3N0YW1wSW5zdGFuY2UodCxlLG4pe2xldCBpPXt9O3JldHVybiBpW3RoaXMuYXNdPXQsaVt0aGlzLmluZGV4QXNdPWUsaVt0aGlzLml0ZW1zSW5kZXhBc109bixuZXcgdGhpcy5fX2N0b3IoaSl9X19pbnNlcnRJbnN0YW5jZSh0LGUsbil7Y29uc3QgaT10aGlzLl9fc3RhbXBJbnN0YW5jZSh0LGUsbik7bGV0IHI9dGhpcy5fX2luc3RhbmNlc1tlKzFdLG89cj9yLmNoaWxkcmVuWzBdOnRoaXM7cmV0dXJuIFkoWSh0aGlzKS5wYXJlbnROb2RlKS5pbnNlcnRCZWZvcmUoaS5yb290LG8pLHRoaXMuX19pbnN0YW5jZXNbZV09aSxpfV9zaG93SGlkZUNoaWxkcmVuKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5fX2luc3RhbmNlcy5sZW5ndGg7ZSsrKXRoaXMuX19pbnN0YW5jZXNbZV0uX3Nob3dIaWRlQ2hpbGRyZW4odCl9X19oYW5kbGVJdGVtUGF0aCh0LGUpe2xldCBuPXQuc2xpY2UoNiksaT1uLmluZGV4T2YoIi4iKSxyPWk8MD9uOm4uc3Vic3RyaW5nKDAsaSk7aWYocj09cGFyc2VJbnQociwxMCkpe2xldCB0PWk8MD8iIjpuLnN1YnN0cmluZyhpKzEpO3RoaXMuX19oYW5kbGVPYnNlcnZlZFBhdGhzKHQpO2xldCBvPXRoaXMuX19pbnN0YW5jZXNbdGhpcy5fX2l0ZW1zSWR4VG9JbnN0SWR4W3JdXTtyZXR1cm4gbyYmKG8uX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCh0aGlzLmFzKyh0PyIuIit0OiIiKSxlLCExLCEwKSxvLl9mbHVzaFByb3BlcnRpZXMoKSksITB9fWl0ZW1Gb3JFbGVtZW50KHQpe2xldCBlPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpO3JldHVybiBlJiZlW3RoaXMuYXNdfWluZGV4Rm9yRWxlbWVudCh0KXtsZXQgZT10aGlzLm1vZGVsRm9yRWxlbWVudCh0KTtyZXR1cm4gZSYmZVt0aGlzLmluZGV4QXNdfW1vZGVsRm9yRWxlbWVudCh0KXtyZXR1cm4gS3IodGhpcy50ZW1wbGF0ZSx0KX19Y3VzdG9tRWxlbWVudHMuZGVmaW5lKG5vLmlzLG5vKTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY2xhc3MgaW8gZXh0ZW5kcyB5ZXtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuImRvbS1pZiJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0scmVzdGFtcDp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0sbm90aWZ5RG9tQ2hhbmdlOnt0eXBlOkJvb2xlYW59fX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX3JlbmRlckRlYm91bmNlcj1udWxsLHRoaXMuX2xhc3RJZj0hMSx0aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXz0hMX1fX2RlYm91bmNlUmVuZGVyKCl7dGhpcy5fX3JlbmRlckRlYm91bmNlcj1Ubi5kZWJvdW5jZSh0aGlzLl9fcmVuZGVyRGVib3VuY2VyLHZ0LCgoKT0+dGhpcy5fX3JlbmRlcigpKSksQW4odGhpcy5fX3JlbmRlckRlYm91bmNlcil9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO2NvbnN0IHQ9WSh0aGlzKS5wYXJlbnROb2RlO3QmJih0Lm5vZGVUeXBlIT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREV8fFkodCkuaG9zdCl8fHRoaXMuX190ZWFyZG93bkluc3RhbmNlKCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLFFyKCl8fCh0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSx0aGlzLmlmJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIoKX1fX2Vuc3VyZVRlbXBsYXRlKCl7aWYoIXRoaXMuX190ZW1wbGF0ZSl7Y29uc3QgdD10aGlzO2xldCBlPXQuX3RlbXBsYXRlSW5mbz90OlkodCkucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtpZighZSl7bGV0IHQ9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCgpPT57aWYoIVkodGhpcykucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSl0aHJvdyBuZXcgRXJyb3IoImRvbS1pZiByZXF1aXJlcyBhIDx0ZW1wbGF0ZT4gY2hpbGQiKTt0LmRpc2Nvbm5lY3QoKSx0aGlzLl9fcmVuZGVyKCl9KSk7cmV0dXJuIHQub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSwhMX10aGlzLl9fdGVtcGxhdGU9ZX1yZXR1cm4hMH1fX2Vuc3VyZUluc3RhbmNlKCl7bGV0IHQ9WSh0aGlzKS5wYXJlbnROb2RlO2lmKHRoaXMuX19oYXNJbnN0YW5jZSgpKXtsZXQgZT10aGlzLl9fZ2V0SW5zdGFuY2VOb2RlcygpO2lmKGUmJmUubGVuZ3RoJiZZKHRoaXMpLnByZXZpb3VzU2libGluZyE9PWVbZS5sZW5ndGgtMV0pZm9yKGxldCBuLGk9MDtpPGUubGVuZ3RoJiYobj1lW2ldKTtpKyspWSh0KS5pbnNlcnRCZWZvcmUobix0aGlzKX1lbHNle2lmKCF0KXJldHVybiExO2lmKCF0aGlzLl9fZW5zdXJlVGVtcGxhdGUoKSlyZXR1cm4hMTt0aGlzLl9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl9cmV0dXJuITB9cmVuZGVyKCl7RGkoKX1fX3JlbmRlcigpe2lmKHRoaXMuaWYpe2lmKCF0aGlzLl9fZW5zdXJlSW5zdGFuY2UoKSlyZXR1cm59ZWxzZSB0aGlzLnJlc3RhbXAmJnRoaXMuX190ZWFyZG93bkluc3RhbmNlKCk7dGhpcy5fc2hvd0hpZGVDaGlsZHJlbigpLGsmJiF0aGlzLm5vdGlmeURvbUNoYW5nZXx8dGhpcy5pZj09dGhpcy5fbGFzdElmfHwodGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSksdGhpcy5fbGFzdElmPXRoaXMuaWYpfV9faGFzSW5zdGFuY2UoKXt9X19nZXRJbnN0YW5jZU5vZGVzKCl7fV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7fV9fdGVhcmRvd25JbnN0YW5jZSgpe31fc2hvd0hpZGVDaGlsZHJlbigpe319Y29uc3Qgcm89QT9jbGFzcyBleHRlbmRzIGlve2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9fc3luY0luZm89bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLnRlbXBsYXRlSW5mby5jaGlsZE5vZGVzfV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7Y29uc3QgZT10aGlzLl9fZGF0YUhvc3R8fHRoaXM7aWYoYiYmIXRoaXMuX19kYXRhSG9zdCl0aHJvdyBuZXcgRXJyb3IoInN0cmljdFRlbXBsYXRlUG9saWN5OiB0ZW1wbGF0ZSBvd25lciBub3QgdHJ1c3RlZCIpO2NvbnN0IG49ZS5fYmluZFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSwhMCk7bi5ydW5FZmZlY3RzPSh0LGUsbik9PntsZXQgaT10aGlzLl9fc3luY0luZm87aWYodGhpcy5pZilpJiYodGhpcy5fX3N5bmNJbmZvPW51bGwsdGhpcy5fc2hvd0hpZGVDaGlsZHJlbigpLGU9T2JqZWN0LmFzc2lnbihpLmNoYW5nZWRQcm9wcyxlKSksdChlLG4pO2Vsc2UgaWYodGhpcy5fX2luc3RhbmNlKWlmKGl8fChpPXRoaXMuX19zeW5jSW5mbz17cnVuRWZmZWN0czp0LGNoYW5nZWRQcm9wczp7fX0pLG4pZm9yKGNvbnN0IHQgaW4gZSl7Y29uc3QgZT0kKHQpO2kuY2hhbmdlZFByb3BzW2VdPXRoaXMuX19kYXRhSG9zdFtlXX1lbHNlIE9iamVjdC5hc3NpZ24oaS5jaGFuZ2VkUHJvcHMsZSl9LHRoaXMuX19pbnN0YW5jZT1lLl9zdGFtcFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSxuKSxZKHQpLmluc2VydEJlZm9yZSh0aGlzLl9faW5zdGFuY2UsdGhpcyl9X19zeW5jSG9zdFByb3BlcnRpZXMoKXtjb25zdCB0PXRoaXMuX19zeW5jSW5mbzt0JiYodGhpcy5fX3N5bmNJbmZvPW51bGwsdC5ydW5FZmZlY3RzKHQuY2hhbmdlZFByb3BzLCExKSl9X190ZWFyZG93bkluc3RhbmNlKCl7dGhpcy5fX2luc3RhbmNlJiYoKHRoaXMuX19kYXRhSG9zdHx8dGhpcykuX3JlbW92ZUJvdW5kRG9tKHRoaXMuX19pbnN0YW5jZSksdGhpcy5fX2luc3RhbmNlPW51bGwsdGhpcy5fX3N5bmNJbmZvPW51bGwpfV9zaG93SGlkZUNoaWxkcmVuKCl7Y29uc3QgdD10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7dGhpcy5fX2luc3RhbmNlJiZCb29sZWFuKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbikhPT10JiYodGhpcy5fX2luc3RhbmNlLl9faGlkZGVuPXQsanIodCx0aGlzLl9faW5zdGFuY2UudGVtcGxhdGVJbmZvLmNoaWxkTm9kZXMpKSx0fHx0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCl9fTpjbGFzcyBleHRlbmRzIGlve2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fY3Rvcj1udWxsLHRoaXMuX19pbnN0YW5jZT1udWxsLHRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLmNoaWxkcmVufV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7dGhpcy5fX2N0b3J8fCh0aGlzLl9fY3Rvcj0kcih0aGlzLl9fdGVtcGxhdGUsdGhpcyx7bXV0YWJsZURhdGE6ITAsZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHQsZSl7dGhpcy5fX2luc3RhbmNlJiYodGhpcy5pZj90aGlzLl9faW5zdGFuY2UuZm9yd2FyZEhvc3RQcm9wKHQsZSk6KHRoaXMuX19pbnZhbGlkUHJvcHM9dGhpcy5fX2ludmFsaWRQcm9wc3x8T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9faW52YWxpZFByb3BzWyQodCldPSEwKSl9fSkpLHRoaXMuX19pbnN0YW5jZT1uZXcgdGhpcy5fX2N0b3IsWSh0KS5pbnNlcnRCZWZvcmUodGhpcy5fX2luc3RhbmNlLnJvb3QsdGhpcyl9X190ZWFyZG93bkluc3RhbmNlKCl7aWYodGhpcy5fX2luc3RhbmNlKXtsZXQgdD10aGlzLl9faW5zdGFuY2UuY2hpbGRyZW47aWYodCYmdC5sZW5ndGgpe2xldCBlPVkodFswXSkucGFyZW50Tm9kZTtpZihlKXtlPVkoZSk7Zm9yKGxldCBuLGk9MDtpPHQubGVuZ3RoJiYobj10W2ldKTtpKyspZS5yZW1vdmVDaGlsZChuKX19dGhpcy5fX2ludmFsaWRQcm9wcz1udWxsLHRoaXMuX19pbnN0YW5jZT1udWxsfX1fX3N5bmNIb3N0UHJvcGVydGllcygpe2xldCB0PXRoaXMuX19pbnZhbGlkUHJvcHM7aWYodCl7dGhpcy5fX2ludmFsaWRQcm9wcz1udWxsO2ZvcihsZXQgZSBpbiB0KXRoaXMuX19pbnN0YW5jZS5fc2V0UGVuZGluZ1Byb3BlcnR5KGUsdGhpcy5fX2RhdGFIb3N0W2VdKTt0aGlzLl9faW5zdGFuY2UuX2ZsdXNoUHJvcGVydGllcygpfX1fc2hvd0hpZGVDaGlsZHJlbigpe2NvbnN0IHQ9dGhpcy5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX198fCF0aGlzLmlmO3RoaXMuX19pbnN0YW5jZSYmQm9vbGVhbih0aGlzLl9faW5zdGFuY2UuX19oaWRkZW4pIT09dCYmKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbj10LHRoaXMuX19pbnN0YW5jZS5fc2hvd0hpZGVDaGlsZHJlbih0KSksdHx8dGhpcy5fX3N5bmNIb3N0UHJvcGVydGllcygpfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHJvLmlzLHJvKTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KbGV0IG9vPUkoKHQ9PntsZXQgZT1tZSh0KTtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpdGVtczp7dHlwZTpBcnJheX0sbXVsdGk6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2VsZWN0ZWQ6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHRvZ2dsZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9fdXBkYXRlU2VsZWN0aW9uKG11bHRpLCBpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fbGFzdEl0ZW1zPW51bGwsdGhpcy5fX2xhc3RNdWx0aT1udWxsLHRoaXMuX19zZWxlY3RlZE1hcD1udWxsfV9fdXBkYXRlU2VsZWN0aW9uKHQsZSl7bGV0IG49ZS5wYXRoO2lmKG49PUpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKSl7bGV0IG49ZS5iYXNlfHxbXSxpPXRoaXMuX19sYXN0SXRlbXM7aWYodCE9PXRoaXMuX19sYXN0TXVsdGkmJnRoaXMuY2xlYXJTZWxlY3Rpb24oKSxpKXtsZXQgdD1JaShuLGkpO3RoaXMuX19hcHBseVNwbGljZXModCl9dGhpcy5fX2xhc3RJdGVtcz1uLHRoaXMuX19sYXN0TXVsdGk9dH1lbHNlIGlmKGUucGF0aD09YCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS5zcGxpY2VzYCl0aGlzLl9fYXBwbHlTcGxpY2VzKGUudmFsdWUuaW5kZXhTcGxpY2VzKTtlbHNle2xldCB0PW4uc2xpY2UoYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS5gLmxlbmd0aCksZT1wYXJzZUludCh0LDEwKTt0LmluZGV4T2YoIi4iKTwwJiZ0PT1lJiZ0aGlzLl9fZGVzZWxlY3RDaGFuZ2VkSWR4KGUpfX1fX2FwcGx5U3BsaWNlcyh0KXtsZXQgZT10aGlzLl9fc2VsZWN0ZWRNYXA7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2xldCBpPXRbbl07ZS5mb3JFYWNoKCgodCxuKT0+e3Q8aS5pbmRleHx8ZS5zZXQobix0Pj1pLmluZGV4K2kucmVtb3ZlZC5sZW5ndGg/dCtpLmFkZGVkQ291bnQtaS5yZW1vdmVkLmxlbmd0aDotMSl9KSk7Zm9yKGxldCB0PTA7dDxpLmFkZGVkQ291bnQ7dCsrKXtsZXQgbj1pLmluZGV4K3Q7ZS5oYXModGhpcy5pdGVtc1tuXSkmJmUuc2V0KHRoaXMuaXRlbXNbbl0sbil9fXRoaXMuX191cGRhdGVMaW5rcygpO2xldCBuPTA7ZS5mb3JFYWNoKCgodCxpKT0+e3Q8MD8odGhpcy5tdWx0aT90aGlzLnNwbGljZShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksbiwxKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsZS5kZWxldGUoaSkpOm4rK30pKX1fX3VwZGF0ZUxpbmtzKCl7aWYodGhpcy5fX2RhdGFMaW5rZWRQYXRocz17fSx0aGlzLm11bHRpKXtsZXQgdD0wO3RoaXMuX19zZWxlY3RlZE1hcC5mb3JFYWNoKChlPT57ZT49MCYmdGhpcy5saW5rUGF0aHMoYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS4ke2V9YCxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyl9LiR7dCsrfWApfSkpfWVsc2UgdGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goKHQ9Pnt0aGlzLmxpbmtQYXRocyhKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS4ke3R9YCksdGhpcy5saW5rUGF0aHMoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWRJdGVtIix0aGlzKSxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7dH1gKX0pKX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX19kYXRhTGlua2VkUGF0aHM9e30sdGhpcy5fX3NlbGVjdGVkTWFwPW5ldyBNYXAsdGhpcy5zZWxlY3RlZD10aGlzLm11bHRpP1tdOm51bGwsdGhpcy5zZWxlY3RlZEl0ZW09bnVsbH1pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLl9fc2VsZWN0ZWRNYXAuaGFzKHQpfWlzSW5kZXhTZWxlY3RlZCh0KXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkKHRoaXMuaXRlbXNbdF0pfV9fZGVzZWxlY3RDaGFuZ2VkSWR4KHQpe2xldCBlPXRoaXMuX19zZWxlY3RlZEluZGV4Rm9ySXRlbUluZGV4KHQpO2lmKGU+PTApe2xldCB0PTA7dGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goKChuLGkpPT57ZT09dCsrJiZ0aGlzLmRlc2VsZWN0KGkpfSkpfX1fX3NlbGVjdGVkSW5kZXhGb3JJdGVtSW5kZXgodCl7bGV0IGU9dGhpcy5fX2RhdGFMaW5rZWRQYXRoc1tgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7dH1gXTtpZihlKXJldHVybiBwYXJzZUludChlLnNsaWNlKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKX0uYC5sZW5ndGgpLDEwKX1kZXNlbGVjdCh0KXtsZXQgZT10aGlzLl9fc2VsZWN0ZWRNYXAuZ2V0KHQpO2lmKGU+PTApe2xldCBuO3RoaXMuX19zZWxlY3RlZE1hcC5kZWxldGUodCksdGhpcy5tdWx0aSYmKG49dGhpcy5fX3NlbGVjdGVkSW5kZXhGb3JJdGVtSW5kZXgoZSkpLHRoaXMuX191cGRhdGVMaW5rcygpLHRoaXMubXVsdGk/dGhpcy5zcGxpY2UoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpLG4sMSk6dGhpcy5zZWxlY3RlZD10aGlzLnNlbGVjdGVkSXRlbT1udWxsfX1kZXNlbGVjdEluZGV4KHQpe3RoaXMuZGVzZWxlY3QodGhpcy5pdGVtc1t0XSl9c2VsZWN0KHQpe3RoaXMuc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKHQpKX1zZWxlY3RJbmRleCh0KXtsZXQgZT10aGlzLml0ZW1zW3RdO3RoaXMuaXNTZWxlY3RlZChlKT90aGlzLnRvZ2dsZSYmdGhpcy5kZXNlbGVjdEluZGV4KHQpOih0aGlzLm11bHRpfHx0aGlzLl9fc2VsZWN0ZWRNYXAuY2xlYXIoKSx0aGlzLl9fc2VsZWN0ZWRNYXAuc2V0KGUsdCksdGhpcy5fX3VwZGF0ZUxpbmtzKCksdGhpcy5tdWx0aT90aGlzLnB1c2goSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpLGUpOnRoaXMuc2VsZWN0ZWQ9dGhpcy5zZWxlY3RlZEl0ZW09ZSl9fX0pKSh5ZSk7Y2xhc3MgYW8gZXh0ZW5kcyBvb3tzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuImFycmF5LXNlbGVjdG9yIn1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7cmV0dXJuIG51bGx9fWN1c3RvbUVsZW1lbnRzLmRlZmluZShhby5pcyxhbyk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IHNvPW5ldyBTbjt3aW5kb3cuU2hhZHlDU1N8fCh3aW5kb3cuU2hhZHlDU1M9e3ByZXBhcmVUZW1wbGF0ZSh0LGUsbil7fSxwcmVwYXJlVGVtcGxhdGVEb20odCxlKXt9LHByZXBhcmVUZW1wbGF0ZVN0eWxlcyh0LGUsbil7fSxzdHlsZVN1YnRyZWUodCxlKXtzby5wcm9jZXNzU3R5bGVzKCksUWUodCxlKX0sc3R5bGVFbGVtZW50KHQpe3NvLnByb2Nlc3NTdHlsZXMoKX0sc3R5bGVEb2N1bWVudCh0KXtzby5wcm9jZXNzU3R5bGVzKCksUWUoZG9jdW1lbnQuYm9keSx0KX0sZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlOih0LGUpPT50bih0LGUpLGZsdXNoQ3VzdG9tU3R5bGVzKCl7fSxuYXRpdmVDc3M6a2UsbmF0aXZlU2hhZG93Ok1lLGNzc0J1aWxkOlRlLGRpc2FibGVSdW50aW1lOkFlfSksd2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlPXNvOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBsbz0iaW5jbHVkZSIsY289d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlO2NsYXNzIHVvIGV4dGVuZHMgSFRNTEVsZW1lbnR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3N0eWxlPW51bGwsY28uYWRkQ3VzdG9tU3R5bGUodGhpcyl9Z2V0U3R5bGUoKXtpZih0aGlzLl9zdHlsZSlyZXR1cm4gdGhpcy5fc3R5bGU7Y29uc3QgdD10aGlzLnF1ZXJ5U2VsZWN0b3IoInN0eWxlIik7aWYoIXQpcmV0dXJuIG51bGw7dGhpcy5fc3R5bGU9dDtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKGxvKTtyZXR1cm4gZSYmKHQucmVtb3ZlQXR0cmlidXRlKGxvKSx0LnRleHRDb250ZW50PShmdW5jdGlvbiBuKHQpe2xldCBlPXQudHJpbSgpLnNwbGl0KC9ccysvKSxuPSIiO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKW4rPXEoZVt0XSk7cmV0dXJuIG59KShlKSt0LnRleHRDb250ZW50KSx0aGlzLm93bmVyRG9jdW1lbnQhPT13aW5kb3cuZG9jdW1lbnQmJndpbmRvdy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMpLHRoaXMuX3N0eWxlfX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KbGV0IGhvO3dpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoImN1c3RvbS1zdHlsZSIsdW8pLGhvPXpyLl9tdXRhYmxlUHJvcGVydHlDaGFuZ2U7Y29uc3QgcG89e3Byb3BlcnRpZXM6e211dGFibGVEYXRhOkJvb2xlYW59LF9zaG91bGRQcm9wZXJ0eUNoYW5nZSh0LGUsbil7cmV0dXJuIGhvKHRoaXMsdCxlLG4sdGhpcy5tdXRhYmxlRGF0YSl9fSxmbz1lcihIVE1MRWxlbWVudCkucHJvdG90eXBlOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KdmFyIG1vPW5ldyBTZXQ7Y29uc3QgZ289e3Byb3BlcnRpZXM6e19wYXJlbnRSZXNpemFibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfcGFyZW50UmVzaXphYmxlQ2hhbmdlZCJ9LF9ub3RpZnlpbmdEZXNjZW5kYW50Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6eyJpcm9uLXJlcXVlc3QtcmVzaXplLW5vdGlmaWNhdGlvbnMiOiJfb25Jcm9uUmVxdWVzdFJlc2l6ZU5vdGlmaWNhdGlvbnMifSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXM9W10sdGhpcy5fYm91bmROb3RpZnlSZXNpemU9dGhpcy5ub3RpZnlSZXNpemUuYmluZCh0aGlzKSx0aGlzLl9ib3VuZE9uRGVzY2VuZGFudElyb25SZXNpemU9dGhpcy5fb25EZXNjZW5kYW50SXJvblJlc2l6ZS5iaW5kKHRoaXMpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcGFyZW50UmVzaXphYmxlP3RoaXMuX3BhcmVudFJlc2l6YWJsZS5zdG9wUmVzaXplTm90aWZpY2F0aW9uc0Zvcih0aGlzKToobW8uZGVsZXRlKHRoaXMpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplKSksdGhpcy5fcGFyZW50UmVzaXphYmxlPW51bGx9LG5vdGlmeVJlc2l6ZTpmdW5jdGlvbigpe3RoaXMuaXNBdHRhY2hlZCYmKHRoaXMuX2ludGVyZXN0ZWRSZXNpemFibGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3RoaXMucmVzaXplclNob3VsZE5vdGlmeSh0KSYmdGhpcy5fbm90aWZ5RGVzY2VuZGFudCh0KX0pLHRoaXMpLHRoaXMuX2ZpcmVSZXNpemUoKSl9LGFzc2lnblBhcmVudFJlc2l6YWJsZTpmdW5jdGlvbih0KXt0aGlzLl9wYXJlbnRSZXNpemFibGUmJnRoaXMuX3BhcmVudFJlc2l6YWJsZS5zdG9wUmVzaXplTm90aWZpY2F0aW9uc0Zvcih0aGlzKSx0aGlzLl9wYXJlbnRSZXNpemFibGU9dCx0JiYtMT09PXQuX2ludGVyZXN0ZWRSZXNpemFibGVzLmluZGV4T2YodGhpcykmJih0Ll9pbnRlcmVzdGVkUmVzaXphYmxlcy5wdXNoKHRoaXMpLHQuX3N1YnNjcmliZUlyb25SZXNpemUodGhpcykpfSxzdG9wUmVzaXplTm90aWZpY2F0aW9uc0ZvcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKHQpO2U+LTEmJih0aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5zcGxpY2UoZSwxKSx0aGlzLl91bnN1YnNjcmliZUlyb25SZXNpemUodCkpfSxfc3Vic2NyaWJlSXJvblJlc2l6ZTpmdW5jdGlvbih0KXt0LmFkZEV2ZW50TGlzdGVuZXIoImlyb24tcmVzaXplIix0aGlzLl9ib3VuZE9uRGVzY2VuZGFudElyb25SZXNpemUpfSxfdW5zdWJzY3JpYmVJcm9uUmVzaXplOmZ1bmN0aW9uKHQpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaXJvbi1yZXNpemUiLHRoaXMuX2JvdW5kT25EZXNjZW5kYW50SXJvblJlc2l6ZSl9LHJlc2l6ZXJTaG91bGROb3RpZnk6ZnVuY3Rpb24odCl7cmV0dXJuITB9LF9vbkRlc2NlbmRhbnRJcm9uUmVzaXplOmZ1bmN0aW9uKHQpe3RoaXMuX25vdGlmeWluZ0Rlc2NlbmRhbnQ/dC5zdG9wUHJvcGFnYXRpb24oKTptfHx0aGlzLl9maXJlUmVzaXplKCl9LF9maXJlUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLXJlc2l6ZSIsbnVsbCx7bm9kZTp0aGlzLGJ1YmJsZXM6ITF9KX0sX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zOmZ1bmN0aW9uKHQpe3ZhciBlPVlpKHQpLnJvb3RUYXJnZXQ7ZSE9PXRoaXMmJihlLmFzc2lnblBhcmVudFJlc2l6YWJsZSh0aGlzKSx0aGlzLl9ub3RpZnlEZXNjZW5kYW50KGUpLHQuc3RvcFByb3BhZ2F0aW9uKCkpfSxfcGFyZW50UmVzaXphYmxlQ2hhbmdlZDpmdW5jdGlvbih0KXt0JiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSl9LF9ub3RpZnlEZXNjZW5kYW50OmZ1bmN0aW9uKHQpe3RoaXMuaXNBdHRhY2hlZCYmKHRoaXMuX25vdGlmeWluZ0Rlc2NlbmRhbnQ9ITAsdC5ub3RpZnlSZXNpemUoKSx0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50PSExKX0sX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0F0dGFjaGVkKWlmKCJsb2FkaW5nIj09PWRvY3VtZW50LnJlYWR5U3RhdGUpe3ZhciB0PXRoaXMuX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zLmJpbmQodGhpcyk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsKGZ1bmN0aW9uIGUoKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIixlKSx0KCl9KSl9ZWxzZSB0aGlzLl9maW5kUGFyZW50KCksdGhpcy5fcGFyZW50UmVzaXphYmxlP3RoaXMuX3BhcmVudFJlc2l6YWJsZS5faW50ZXJlc3RlZFJlc2l6YWJsZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0pLHRoaXMpOihtby5mb3JFYWNoKChmdW5jdGlvbih0KXt0IT09dGhpcyYmdC5fZmluZFBhcmVudCgpfSksdGhpcyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fYm91bmROb3RpZnlSZXNpemUpLHRoaXMubm90aWZ5UmVzaXplKCkpfSxfZmluZFBhcmVudDpmdW5jdGlvbigpe3RoaXMuYXNzaWduUGFyZW50UmVzaXphYmxlKG51bGwpLHRoaXMuZmlyZSgiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIixudWxsLHtub2RlOnRoaXMsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSksdGhpcy5fcGFyZW50UmVzaXphYmxlP21vLmRlbGV0ZSh0aGlzKTptby5hZGQodGhpcyl9fTt2YXIgX289T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsSXJvblJlc2l6YWJsZUJlaGF2aW9yOmdvfSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL1JyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1pcm9uLWNvbGxhcHNlLXRyYW5zaXRpb24tZHVyYXRpb24sIDMwMG1zKTsKICAgICAgICAvKiBTYWZhcmkgMTAgbmVlZHMgdGhpcyBwcm9wZXJ0eSBwcmVmaXhlZCB0byBjb3JyZWN0bHkgYXBwbHkgdGhlIGN1c3RvbSBwcm9wZXJ0eSAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0taXJvbi1jb2xsYXBzZS10cmFuc2l0aW9uLWR1cmF0aW9uLCAzMDBtcyk7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5pcm9uLWNvbGxhcHNlLWNsb3NlZCkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tY29sbGFwc2Utb3BlbmVkKSkgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLWNvbGxhcHNlIixiZWhhdmlvcnM6W2dvXSxwcm9wZXJ0aWVzOntob3Jpem9udGFsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9ob3Jpem9udGFsQ2hhbmdlZCJ9LG9wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSx0cmFuc2l0aW9uaW5nOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSxub0FuaW1hdGlvbjp7dHlwZTpCb29sZWFufSxfZGVzaXJlZFNpemU6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sZ2V0IGRpbWVuc2lvbigpe3JldHVybiB0aGlzLmhvcml6b250YWw/IndpZHRoIjoiaGVpZ2h0In0sZ2V0IF9kaW1lbnNpb25NYXgoKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsPyJtYXhXaWR0aCI6Im1heEhlaWdodCJ9LGdldCBfZGltZW5zaW9uTWF4Q3NzKCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD8ibWF4LXdpZHRoIjoibWF4LWhlaWdodCJ9LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJncm91cCIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX29uVHJhbnNpdGlvbkVuZCJ9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sc2hvdzpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITF9LHVwZGF0ZVNpemU6ZnVuY3Rpb24odCxlKXt0PSJhdXRvIj09PXQ/IiI6dDt2YXIgbj1lJiYhdGhpcy5ub0FuaW1hdGlvbiYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9kZXNpcmVkU2l6ZSE9PXQ7aWYodGhpcy5fZGVzaXJlZFNpemU9dCx0aGlzLl91cGRhdGVUcmFuc2l0aW9uKCExKSxuKXt2YXIgaT10aGlzLl9jYWxjU2l6ZSgpOyIiPT09dCYmKHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT0iIix0PXRoaXMuX2NhbGNTaXplKCkpLHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT1pLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITApLG49dCE9PWl9dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPXQsbnx8dGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxlbmFibGVUcmFuc2l0aW9uOmZ1bmN0aW9uKHQpe2ZvLl93YXJuKCJgZW5hYmxlVHJhbnNpdGlvbigpYCBpcyBkZXByZWNhdGVkLCB1c2UgYG5vQW5pbWF0aW9uYCBpbnN0ZWFkLiIpLHRoaXMubm9BbmltYXRpb249IXR9LF91cGRhdGVUcmFuc2l0aW9uOmZ1bmN0aW9uKHQpe3RoaXMuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPXQmJiF0aGlzLm5vQW5pbWF0aW9uPyIiOiIwcyJ9LF9ob3Jpem9udGFsQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUudHJhbnNpdGlvblByb3BlcnR5PXRoaXMuX2RpbWVuc2lvbk1heENzcyx0aGlzLnN0eWxlWyJtYXhXaWR0aCI9PT10aGlzLl9kaW1lbnNpb25NYXg/Im1heEhlaWdodCI6Im1heFdpZHRoIl09IiIsdGhpcy51cGRhdGVTaXplKHRoaXMub3BlbmVkPyJhdXRvIjoiMHB4IiwhMSl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhdGhpcy5vcGVuZWQpLHRoaXMuX3NldFRyYW5zaXRpb25pbmcoITApLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2UtY2xvc2VkIiwhMSksdGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1vcGVuZWQiLCExKSx0aGlzLnVwZGF0ZVNpemUodGhpcy5vcGVuZWQ/ImF1dG8iOiIwcHgiLCEwKSx0aGlzLm9wZW5lZCYmdGhpcy5mb2N1cygpfSxfdHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT10aGlzLl9kZXNpcmVkU2l6ZSx0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLWNsb3NlZCIsIXRoaXMub3BlbmVkKSx0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLW9wZW5lZCIsdGhpcy5vcGVuZWQpLHRoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITEpLHRoaXMubm90aWZ5UmVzaXplKCksdGhpcy5fc2V0VHJhbnNpdGlvbmluZyghMSl9LF9vblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24odCl7WWkodCkucm9vdFRhcmdldD09PXRoaXMmJnRoaXMuX3RyYW5zaXRpb25FbmQoKX0sX2NhbGNTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbdGhpcy5kaW1lbnNpb25dKyJweCJ9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCB5bz1fZWAKLyogTW9zdCBjb21tb24gdXNlZCBmbGV4IHN0eWxlcyovCjxkb20tbW9kdWxlIGlkPSJpcm9uLWZsZXgiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmxheW91dC5ob3Jpem9udGFsLAogICAgICAubGF5b3V0LnZlcnRpY2FsIHsKICAgICAgICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5pbmxpbmUgewogICAgICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWlubGluZS1mbGV4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICB9CgogICAgICAubGF5b3V0Lmhvcml6b250YWwgewogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CgogICAgICAubGF5b3V0LnZlcnRpY2FsIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgLmxheW91dC53cmFwIHsKICAgICAgICAtbXMtZmxleC13cmFwOiB3cmFwOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwOwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQoKICAgICAgLmxheW91dC5uby13cmFwIHsKICAgICAgICAtbXMtZmxleC13cmFwOiBub3dyYXA7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IG5vd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmxheW91dC5jZW50ZXIsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5jZW50ZXItanVzdGlmaWVkLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAuZmxleCB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSAwLjAwMDAwMDAwMXB4OwogICAgICAgIC13ZWJraXQtZmxleDogMTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIC13ZWJraXQtZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgICBmbGV4LWJhc2lzOiAwLjAwMDAwMDAwMXB4OwogICAgICB9CgogICAgICAuZmxleC1hdXRvIHsKICAgICAgICAtbXMtZmxleDogMSAxIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDEgYXV0bzsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgfQoKICAgICAgLmZsZXgtbm9uZSB7CiAgICAgICAgLW1zLWZsZXg6IG5vbmU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiBub25lOwogICAgICAgIGZsZXg6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgovKiBCYXNpYyBmbGV4Ym94IHJldmVyc2Ugc3R5bGVzICovCjxkb20tbW9kdWxlIGlkPSJpcm9uLWZsZXgtcmV2ZXJzZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAubGF5b3V0Lmhvcml6b250YWwtcmV2ZXJzZSwKICAgICAgLmxheW91dC52ZXJ0aWNhbC1yZXZlcnNlIHsKICAgICAgICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5ob3Jpem9udGFsLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICB9CgogICAgICAubGF5b3V0LnZlcnRpY2FsLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICB9CgogICAgICAubGF5b3V0LndyYXAtcmV2ZXJzZSB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgovKiBGbGV4Ym94IGFsaWdubWVudCAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LWFsaWdubWVudCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAvKioKICAgICAgICogQWxpZ25tZW50IGluIGNyb3NzIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgfQoKICAgICAgLmxheW91dC5jZW50ZXIsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5lbmQgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmJhc2VsaW5lIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmU7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQWxpZ25tZW50IGluIG1haW4gYXhpcy4KICAgICAgICovCiAgICAgIC5sYXlvdXQuc3RhcnQtanVzdGlmaWVkIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLWp1c3RpZmllZCwKICAgICAgLmxheW91dC5jZW50ZXItY2VudGVyIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5lbmQtanVzdGlmaWVkIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuYXJvdW5kLWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9CgogICAgICAubGF5b3V0Lmp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTZWxmIGFsaWdubWVudC4KICAgICAgICovCiAgICAgIC5zZWxmLXN0YXJ0IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgfQoKICAgICAgLnNlbGYtY2VudGVyIHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLnNlbGYtZW5kIHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLnNlbGYtc3RyZXRjaCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgIH0KCiAgICAgIC5zZWxmLWJhc2VsaW5lIHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgICBhbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIG11bHRpLWxpbmUgYWxpZ25tZW50IGluIG1haW4gYXhpcy4KICAgICAgICovCiAgICAgIC5sYXlvdXQuc3RhcnQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgfQoKICAgICAgLmxheW91dC5lbmQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAubGF5b3V0LmJldHdlZW4tYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAubGF5b3V0LmFyb3VuZC1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGU7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgovKiBOb24tZmxleGJveCBwb3NpdGlvbmluZyBoZWxwZXIgc3R5bGVzICovCjxkb20tbW9kdWxlIGlkPSJpcm9uLWZsZXgtZmFjdG9ycyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAuZmxleCwKICAgICAgLmZsZXgtMSB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSAwLjAwMDAwMDAwMXB4OwogICAgICAgIC13ZWJraXQtZmxleDogMTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIC13ZWJraXQtZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgICBmbGV4LWJhc2lzOiAwLjAwMDAwMDAwMXB4OwogICAgICB9CgogICAgICAuZmxleC0yIHsKICAgICAgICAtbXMtZmxleDogMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDI7CiAgICAgICAgZmxleDogMjsKICAgICAgfQoKICAgICAgLmZsZXgtMyB7CiAgICAgICAgLW1zLWZsZXg6IDM7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAzOwogICAgICAgIGZsZXg6IDM7CiAgICAgIH0KCiAgICAgIC5mbGV4LTQgewogICAgICAgIC1tcy1mbGV4OiA0OwogICAgICAgIC13ZWJraXQtZmxleDogNDsKICAgICAgICBmbGV4OiA0OwogICAgICB9CgogICAgICAuZmxleC01IHsKICAgICAgICAtbXMtZmxleDogNTsKICAgICAgICAtd2Via2l0LWZsZXg6IDU7CiAgICAgICAgZmxleDogNTsKICAgICAgfQoKICAgICAgLmZsZXgtNiB7CiAgICAgICAgLW1zLWZsZXg6IDY7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA2OwogICAgICAgIGZsZXg6IDY7CiAgICAgIH0KCiAgICAgIC5mbGV4LTcgewogICAgICAgIC1tcy1mbGV4OiA3OwogICAgICAgIC13ZWJraXQtZmxleDogNzsKICAgICAgICBmbGV4OiA3OwogICAgICB9CgogICAgICAuZmxleC04IHsKICAgICAgICAtbXMtZmxleDogODsKICAgICAgICAtd2Via2l0LWZsZXg6IDg7CiAgICAgICAgZmxleDogODsKICAgICAgfQoKICAgICAgLmZsZXgtOSB7CiAgICAgICAgLW1zLWZsZXg6IDk7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA5OwogICAgICAgIGZsZXg6IDk7CiAgICAgIH0KCiAgICAgIC5mbGV4LTEwIHsKICAgICAgICAtbXMtZmxleDogMTA7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMDsKICAgICAgICBmbGV4OiAxMDsKICAgICAgfQoKICAgICAgLmZsZXgtMTEgewogICAgICAgIC1tcy1mbGV4OiAxMTsKICAgICAgICAtd2Via2l0LWZsZXg6IDExOwogICAgICAgIGZsZXg6IDExOwogICAgICB9CgogICAgICAuZmxleC0xMiB7CiAgICAgICAgLW1zLWZsZXg6IDEyOwogICAgICAgIC13ZWJraXQtZmxleDogMTI7CiAgICAgICAgZmxleDogMTI7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1wb3NpdGlvbmluZyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAuYmxvY2sgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaW52aXNpYmxlIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLnJlbGF0aXZlIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5maXQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIGJvZHkuZnVsbGJsZWVkIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgfQoKICAgICAgLnNjcm9sbCB7CiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAvKiBmaXhlZCBwb3NpdGlvbiAqLwogICAgICAuZml4ZWQtYm90dG9tLAogICAgICAuZml4ZWQtbGVmdCwKICAgICAgLmZpeGVkLXJpZ2h0LAogICAgICAuZml4ZWQtdG9wIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIH0KCiAgICAgIC5maXhlZC10b3AgewogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICB9CgogICAgICAuZml4ZWQtcmlnaHQgewogICAgICAgIHRvcDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5maXhlZC1ib3R0b20gewogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICAuZml4ZWQtbGVmdCB7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KYDt5by5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHlvLmNvbnRlbnQpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3Qgdm89X2VgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgW2hpZGRlbl0gewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAtLWxheW91dDogewogICAgICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogICAgICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaW5saW5lOiB7CiAgICAgICAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94OwogICAgICAgIGRpc3BsYXk6IC13ZWJraXQtaW5saW5lLWZsZXg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgIH07CgogICAgICAtLWxheW91dC1ob3Jpem9udGFsOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWhvcml6b250YWwtcmV2ZXJzZTogewogICAgICAgIEBhcHBseSAtLWxheW91dDsKCiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgIH07CgogICAgICAtLWxheW91dC12ZXJ0aWNhbDogewogICAgICAgIEBhcHBseSAtLWxheW91dDsKCiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH07CgogICAgICAtLWxheW91dC12ZXJ0aWNhbC1yZXZlcnNlOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXdyYXA6IHsKICAgICAgICAtbXMtZmxleC13cmFwOiB3cmFwOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwOwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXdyYXAtcmV2ZXJzZTogewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC1hdXRvOiB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSBhdXRvOwogICAgICAgIC13ZWJraXQtZmxleDogMSAxIGF1dG87CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LW5vbmU6IHsKICAgICAgICAtbXMtZmxleDogbm9uZTsKICAgICAgICAtd2Via2l0LWZsZXg6IG5vbmU7CiAgICAgICAgZmxleDogbm9uZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXg6IHsKICAgICAgICAtbXMtZmxleDogMSAxIDAuMDAwMDAwMDAxcHg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgLXdlYmtpdC1mbGV4LWJhc2lzOiAwLjAwMDAwMDAwMXB4OwogICAgICAgIGZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTI6IHsKICAgICAgICAtbXMtZmxleDogMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDI7CiAgICAgICAgZmxleDogMjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMzogewogICAgICAgIC1tcy1mbGV4OiAzOwogICAgICAgIC13ZWJraXQtZmxleDogMzsKICAgICAgICBmbGV4OiAzOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC00OiB7CiAgICAgICAgLW1zLWZsZXg6IDQ7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA0OwogICAgICAgIGZsZXg6IDQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTU6IHsKICAgICAgICAtbXMtZmxleDogNTsKICAgICAgICAtd2Via2l0LWZsZXg6IDU7CiAgICAgICAgZmxleDogNTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNjogewogICAgICAgIC1tcy1mbGV4OiA2OwogICAgICAgIC13ZWJraXQtZmxleDogNjsKICAgICAgICBmbGV4OiA2OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC03OiB7CiAgICAgICAgLW1zLWZsZXg6IDc7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA3OwogICAgICAgIGZsZXg6IDc7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTg6IHsKICAgICAgICAtbXMtZmxleDogODsKICAgICAgICAtd2Via2l0LWZsZXg6IDg7CiAgICAgICAgZmxleDogODsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtOTogewogICAgICAgIC1tcy1mbGV4OiA5OwogICAgICAgIC13ZWJraXQtZmxleDogOTsKICAgICAgICBmbGV4OiA5OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0xMDogewogICAgICAgIC1tcy1mbGV4OiAxMDsKICAgICAgICAtd2Via2l0LWZsZXg6IDEwOwogICAgICAgIGZsZXg6IDEwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0xMTogewogICAgICAgIC1tcy1mbGV4OiAxMTsKICAgICAgICAtd2Via2l0LWZsZXg6IDExOwogICAgICAgIGZsZXg6IDExOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0xMjogewogICAgICAgIC1tcy1mbGV4OiAxMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDEyOwogICAgICAgIGZsZXg6IDEyOwogICAgICB9OwoKICAgICAgLyogYWxpZ25tZW50IGluIGNyb3NzIGF4aXMgKi8KCiAgICAgIC0tbGF5b3V0LXN0YXJ0OiB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXI6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZW5kOiB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1iYXNlbGluZTogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBiYXNlbGluZTsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgIH07CgogICAgICAvKiBhbGlnbm1lbnQgaW4gbWFpbiBheGlzICovCgogICAgICAtLWxheW91dC1zdGFydC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1lbmQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZW5kOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYXJvdW5kLWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGU7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjogewogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgIH07CgogICAgICAvKiBzZWxmIGFsaWdubWVudCAqLwoKICAgICAgLS1sYXlvdXQtc2VsZi1zdGFydDogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1jZW50ZXI6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNlbGYtZW5kOiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLXN0cmV0Y2g6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNlbGYtYmFzZWxpbmU6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgICBhbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgfTsKCiAgICAgIC8qIG11bHRpLWxpbmUgYWxpZ25tZW50IGluIG1haW4gYXhpcyAqLwoKICAgICAgLS1sYXlvdXQtc3RhcnQtYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1lbmQtYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtY2VudGVyLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWJldHdlZW4tYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWFyb3VuZC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9OwoKICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICAgICAgIE90aGVyIExheW91dAogICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKICAgICAgLS1sYXlvdXQtYmxvY2s6IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWludmlzaWJsZTogewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtcmVsYXRpdmU6IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXQ6IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2Nyb2xsOiB7CiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZnVsbGJsZWVkOiB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgIH07CgogICAgICAvKiBmaXhlZCBwb3NpdGlvbiAqLwoKICAgICAgLS1sYXlvdXQtZml4ZWQtdG9wOiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtcmlnaHQ6IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZpeGVkLWJvdHRvbTogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZpeGVkLWxlZnQ6IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9OwoKICAgIH0KICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT5gO3ZvLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodm8uY29udGVudCk7dmFyIGJvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Ym8udGV4dENvbnRlbnQ9IltoaWRkZW5dIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Iixkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGJvKTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNsYXNzIHhve2NvbnN0cnVjdG9yKHQpe3hvWyIgIl0odCksdGhpcy50eXBlPXQmJnQudHlwZXx8ImRlZmF1bHQiLHRoaXMua2V5PXQmJnQua2V5LHQmJiJ2YWx1ZSJpbiB0JiYodGhpcy52YWx1ZT10LnZhbHVlKX1nZXQgdmFsdWUoKXt2YXIgdD10aGlzLnR5cGUsZT10aGlzLmtleTtpZih0JiZlKXJldHVybiB4by50eXBlc1t0XSYmeG8udHlwZXNbdF1bZV19c2V0IHZhbHVlKHQpe3ZhciBlPXRoaXMudHlwZSxuPXRoaXMua2V5O2UmJm4mJihlPXhvLnR5cGVzW2VdPXhvLnR5cGVzW2VdfHx7fSxudWxsPT10P2RlbGV0ZSBlW25dOmVbbl09dCl9Z2V0IGxpc3QoKXtpZih0aGlzLnR5cGUpe3ZhciB0PXhvLnR5cGVzW3RoaXMudHlwZV07cmV0dXJuIHQ/T2JqZWN0LmtleXModCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gd29bdGhpcy50eXBlXVt0XX0pLHRoaXMpOltdfX1ieUtleSh0KXtyZXR1cm4gdGhpcy5rZXk9dCx0aGlzLnZhbHVlfX14b1siICJdPWZ1bmN0aW9uKCl7fSx4by50eXBlcz17fTt2YXIgd289eG8udHlwZXM7UnIoe2lzOiJpcm9uLW1ldGEiLHByb3BlcnRpZXM6e3R5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJkZWZhdWx0In0sa2V5Ont0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sc2VsZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfc2VsZkNoYW5nZWQifSxfX21ldGE6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX19jb21wdXRlTWV0YSh0eXBlLCBrZXksIHZhbHVlKSJ9fSxob3N0QXR0cmlidXRlczp7aGlkZGVuOiEwfSxfX2NvbXB1dGVNZXRhOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uZXcgeG8oe3R5cGU6dCxrZXk6ZX0pO3JldHVybiB2b2lkIDAhPT1uJiZuIT09aS52YWx1ZT9pLnZhbHVlPW46dGhpcy52YWx1ZSE9PWkudmFsdWUmJih0aGlzLnZhbHVlPWkudmFsdWUpLGl9LGdldCBsaXN0KCl7cmV0dXJuIHRoaXMuX19tZXRhJiZ0aGlzLl9fbWV0YS5saXN0fSxfc2VsZkNoYW5nZWQ6ZnVuY3Rpb24odCl7dCYmKHRoaXMudmFsdWU9dGhpcyl9LGJ5S2V5OmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeG8oe3R5cGU6dGhpcy50eXBlLGtleTp0fSkudmFsdWV9fSksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpScih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CgogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgogICAgICAgIGZpbGw6IHZhcigtLWlyb24taWNvbi1maWxsLWNvbG9yLCBjdXJyZW50Y29sb3IpOwogICAgICAgIHN0cm9rZTogdmFyKC0taXJvbi1pY29uLXN0cm9rZS1jb2xvciwgbm9uZSk7CgogICAgICAgIHdpZHRoOiB2YXIoLS1pcm9uLWljb24td2lkdGgsIDI0cHgpOwogICAgICAgIGhlaWdodDogdmFyKC0taXJvbi1pY29uLWhlaWdodCwgMjRweCk7CiAgICAgICAgQGFwcGx5IC0taXJvbi1pY29uOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CmAsaXM6Imlyb24taWNvbiIscHJvcGVydGllczp7aWNvbjp7dHlwZTpTdHJpbmd9LHRoZW1lOnt0eXBlOlN0cmluZ30sc3JjOnt0eXBlOlN0cmluZ30sX21ldGE6e3ZhbHVlOmZvLmNyZWF0ZSgiaXJvbi1tZXRhIix7dHlwZToiaWNvbnNldCJ9KX19LG9ic2VydmVyczpbIl91cGRhdGVJY29uKF9tZXRhLCBpc0F0dGFjaGVkKSIsIl91cGRhdGVJY29uKHRoZW1lLCBpc0F0dGFjaGVkKSIsIl9zcmNDaGFuZ2VkKHNyYywgaXNBdHRhY2hlZCkiLCJfaWNvbkNoYW5nZWQoaWNvbiwgaXNBdHRhY2hlZCkiXSxfREVGQVVMVF9JQ09OU0VUOiJpY29ucyIsX2ljb25DaGFuZ2VkOmZ1bmN0aW9uKHQpe3ZhciBlPSh0fHwiIikuc3BsaXQoIjoiKTt0aGlzLl9pY29uTmFtZT1lLnBvcCgpLHRoaXMuX2ljb25zZXROYW1lPWUucG9wKCl8fHRoaXMuX0RFRkFVTFRfSUNPTlNFVCx0aGlzLl91cGRhdGVJY29uKCl9LF9zcmNDaGFuZ2VkOmZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZUljb24oKX0sX3VzZXNJY29uc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWNvbnx8IXRoaXMuc3JjfSxfdXBkYXRlSWNvbjpmdW5jdGlvbigpe3RoaXMuX3VzZXNJY29uc2V0KCk/KHRoaXMuX2ltZyYmdGhpcy5faW1nLnBhcmVudE5vZGUmJllpKHRoaXMucm9vdCkucmVtb3ZlQ2hpbGQodGhpcy5faW1nKSwiIj09PXRoaXMuX2ljb25OYW1lP3RoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKTp0aGlzLl9pY29uc2V0TmFtZSYmdGhpcy5fbWV0YSYmKHRoaXMuX2ljb25zZXQ9dGhpcy5fbWV0YS5ieUtleSh0aGlzLl9pY29uc2V0TmFtZSksdGhpcy5faWNvbnNldD8odGhpcy5faWNvbnNldC5hcHBseUljb24odGhpcyx0aGlzLl9pY29uTmFtZSx0aGlzLnRoZW1lKSx0aGlzLnVubGlzdGVuKHdpbmRvdywiaXJvbi1pY29uc2V0LWFkZGVkIiwiX3VwZGF0ZUljb24iKSk6dGhpcy5saXN0ZW4od2luZG93LCJpcm9uLWljb25zZXQtYWRkZWQiLCJfdXBkYXRlSWNvbiIpKSk6KHRoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKSx0aGlzLl9pbWd8fCh0aGlzLl9pbWc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIiksdGhpcy5faW1nLnN0eWxlLndpZHRoPSIxMDAlIix0aGlzLl9pbWcuc3R5bGUuaGVpZ2h0PSIxMDAlIix0aGlzLl9pbWcuZHJhZ2dhYmxlPSExKSx0aGlzLl9pbWcuc3JjPXRoaXMuc3JjLFlpKHRoaXMucm9vdCkuYXBwZW5kQ2hpbGQodGhpcy5faW1nKSl9fSksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpScih7aXM6Imlyb24taWNvbnNldC1zdmciLHByb3BlcnRpZXM6e25hbWU6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfbmFtZUNoYW5nZWQifSxzaXplOnt0eXBlOk51bWJlcix2YWx1ZToyNH0scnRsTWlycm9yaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHVzZUdsb2JhbFJ0bEF0dHJpYnV0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX21ldGE9bmV3IHhvKHt0eXBlOiJpY29uc2V0IixrZXk6bnVsbCx2YWx1ZTpudWxsfSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIn0sZ2V0SWNvbk5hbWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ljb25zPXRoaXMuX2NyZWF0ZUljb25NYXAoKSxPYmplY3Qua2V5cyh0aGlzLl9pY29ucykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5uYW1lKyI6Iit0fSksdGhpcyl9LGFwcGx5SWNvbjpmdW5jdGlvbih0LGUpe3RoaXMucmVtb3ZlSWNvbih0KTt2YXIgbj10aGlzLl9jbG9uZUljb24oZSx0aGlzLnJ0bE1pcnJvcmluZyYmdGhpcy5fdGFyZ2V0SXNSVEwodCkpO2lmKG4pe3ZhciBpPVlpKHQucm9vdHx8dCk7cmV0dXJuIGkuaW5zZXJ0QmVmb3JlKG4saS5jaGlsZE5vZGVzWzBdKSx0Ll9zdmdJY29uPW59cmV0dXJuIG51bGx9LHJlbW92ZUljb246ZnVuY3Rpb24odCl7dC5fc3ZnSWNvbiYmKFlpKHQucm9vdHx8dCkucmVtb3ZlQ2hpbGQodC5fc3ZnSWNvbiksdC5fc3ZnSWNvbj1udWxsKX0sX3RhcmdldElzUlRMOmZ1bmN0aW9uKHQpe2lmKG51bGw9PXRoaXMuX190YXJnZXRJc1JUTClpZih0aGlzLnVzZUdsb2JhbFJ0bEF0dHJpYnV0ZSl7dmFyIGU9ZG9jdW1lbnQuYm9keSYmZG9jdW1lbnQuYm9keS5oYXNBdHRyaWJ1dGUoImRpciIpP2RvY3VtZW50LmJvZHk6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3RoaXMuX190YXJnZXRJc1JUTD0icnRsIj09PWUuZ2V0QXR0cmlidXRlKCJkaXIiKX1lbHNlIHQmJnQubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSYmKHQ9dC5ob3N0KSx0aGlzLl9fdGFyZ2V0SXNSVEw9dCYmInJ0bCI9PT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXJlY3Rpb247cmV0dXJuIHRoaXMuX190YXJnZXRJc1JUTH0sX25hbWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5fbWV0YS52YWx1ZT1udWxsLHRoaXMuX21ldGEua2V5PXRoaXMubmFtZSx0aGlzLl9tZXRhLnZhbHVlPXRoaXMsdGhpcy5hc3luYygoZnVuY3Rpb24oKXt0aGlzLmZpcmUoImlyb24taWNvbnNldC1hZGRlZCIsdGhpcyx7bm9kZTp3aW5kb3d9KX0pKX0sX2NyZWF0ZUljb25NYXA6ZnVuY3Rpb24oKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBZaSh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dFtlLmlkXT1lfSkpLHR9LF9jbG9uZUljb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5faWNvbnM9dGhpcy5faWNvbnN8fHRoaXMuX2NyZWF0ZUljb25NYXAoKSx0aGlzLl9wcmVwYXJlU3ZnQ2xvbmUodGhpcy5faWNvbnNbdF0sdGhpcy5zaXplLGUpfSxfcHJlcGFyZVN2Z0Nsb25lOmZ1bmN0aW9uKHQsZSxuKXtpZih0KXt2YXIgaT10LmNsb25lTm9kZSghMCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIiksbz1pLmdldEF0dHJpYnV0ZSgidmlld0JveCIpfHwiMCAwICIrZSsiICIrZSxhPSJwb2ludGVyLWV2ZW50czogbm9uZTsgZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IjtyZXR1cm4gbiYmaS5oYXNBdHRyaWJ1dGUoIm1pcnJvci1pbi1ydGwiKSYmKGErPSItd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgtMSwxKTt0cmFuc2Zvcm06c2NhbGUoLTEsMSk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7Iiksci5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLG8pLHIuc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQgbWVldCIpLHIuc2V0QXR0cmlidXRlKCJmb2N1c2FibGUiLCJmYWxzZSIpLHIuc3R5bGUuY3NzVGV4dD1hLHIuYXBwZW5kQ2hpbGQoaSkucmVtb3ZlQXR0cmlidXRlKCJpZCIpLHJ9cmV0dXJuIG51bGx9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBTbz1fZWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpbWFnZSIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iYWRkLWEtcGhvdG8iPjxwYXRoIGQ9Ik0zIDRWMWgydjNoM3YySDV2M0gzVjZIMFY0aDN6bTMgNlY3aDNWNGg3bDEuODMgMkgyMWMxLjEgMCAyIC45IDIgMnYxMmMwIDEuMS0uOSAyLTIgMkg1Yy0xLjEgMC0yLS45LTItMlYxMGgzem03IDljMi43NiAwIDUtMi4yNCA1LTVzLTIuMjQtNS01LTUtNSAyLjI0LTUgNSAyLjI0IDUgNSA1em0tMy4yLTVjMCAxLjc3IDEuNDMgMy4yIDMuMiAzLjJzMy4yLTEuNDMgMy4yLTMuMi0xLjQzLTMuMi0zLjItMy4yLTMuMiAxLjQzLTMuMiAzLjJ6Ij48L3BhdGg+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+CjwvaXJvbi1pY29uc2V0LXN2Zz5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoU28uY29udGVudCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBNbz1fZWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpY29ucyIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iM2Qtcm90YXRpb24iPjxwYXRoIGQ9Ik03LjUyIDIxLjQ4QzQuMjUgMTkuOTQgMS45MSAxNi43NiAxLjU1IDEzSC4wNUMuNTYgMTkuMTYgNS43MSAyNCAxMiAyNGwuNjYtLjAzLTMuODEtMy44MS0xLjMzIDEuMzJ6bS44OS02LjUyYy0uMTkgMC0uMzctLjAzLS41Mi0uMDgtLjE2LS4wNi0uMjktLjEzLS40LS4yNC0uMTEtLjEtLjItLjIyLS4yNi0uMzctLjA2LS4xNC0uMDktLjMtLjA5LS40N2gtMS4zYzAgLjM2LjA3LjY4LjIxLjk1LjE0LjI3LjMzLjUuNTYuNjkuMjQuMTguNTEuMzIuODIuNDEuMy4xLjYyLjE1Ljk2LjE1LjM3IDAgLjcyLS4wNSAxLjAzLS4xNS4zMi0uMS42LS4yNS44My0uNDRzLjQyLS40My41NS0uNzJjLjEzLS4yOS4yLS42MS4yLS45NyAwLS4xOS0uMDItLjM4LS4wNy0uNTYtLjA1LS4xOC0uMTItLjM1LS4yMy0uNTEtLjEtLjE2LS4yNC0uMy0uNC0uNDMtLjE3LS4xMy0uMzctLjIzLS42MS0uMzEuMi0uMDkuMzctLjIuNTItLjMzLjE1LS4xMy4yNy0uMjcuMzctLjQyLjEtLjE1LjE3LS4zLjIyLS40Ni4wNS0uMTYuMDctLjMyLjA3LS40OCAwLS4zNi0uMDYtLjY4LS4xOC0uOTYtLjEyLS4yOC0uMjktLjUxLS41MS0uNjktLjItLjE5LS40Ny0uMzMtLjc3LS40M0M5LjEgOC4wNSA4Ljc2IDggOC4zOSA4Yy0uMzYgMC0uNjkuMDUtMSAuMTYtLjMuMTEtLjU3LjI2LS43OS40NS0uMjEuMTktLjM4LjQxLS41MS42Ny0uMTIuMjYtLjE4LjU0LS4xOC44NWgxLjNjMC0uMTcuMDMtLjMyLjA5LS40NXMuMTQtLjI1LjI1LS4zNGMuMTEtLjA5LjIzLS4xNy4zOC0uMjIuMTUtLjA1LjMtLjA4LjQ4LS4wOC40IDAgLjcuMS44OS4zMS4xOS4yLjI5LjQ5LjI5Ljg2IDAgLjE4LS4wMy4zNC0uMDguNDktLjA1LjE1LS4xNC4yNy0uMjUuMzctLjExLjEtLjI1LjE4LS40MS4yNC0uMTYuMDYtLjM2LjA5LS41OC4wOUg3LjV2MS4wM2guNzdjLjIyIDAgLjQyLjAyLjYuMDdzLjMzLjEzLjQ1LjIzYy4xMi4xMS4yMi4yNC4yOS40LjA3LjE2LjEuMzUuMS41NyAwIC40MS0uMTIuNzItLjM1LjkzLS4yMy4yMy0uNTUuMzMtLjk1LjMzem04LjU1LTUuOTJjLS4zMi0uMzMtLjctLjU5LTEuMTQtLjc3LS40My0uMTgtLjkyLS4yNy0xLjQ2LS4yN0gxMnY4aDIuM2MuNTUgMCAxLjA2LS4wOSAxLjUxLS4yNy40NS0uMTguODQtLjQzIDEuMTYtLjc2LjMyLS4zMy41Ny0uNzMuNzQtMS4xOS4xNy0uNDcuMjYtLjk5LjI2LTEuNTd2LS40YzAtLjU4LS4wOS0xLjEtLjI2LTEuNTctLjE4LS40Ny0uNDMtLjg3LS43NS0xLjJ6bS0uMzkgMy4xNmMwIC40Mi0uMDUuNzktLjE0IDEuMTMtLjEuMzMtLjI0LjYyLS40My44NS0uMTkuMjMtLjQzLjQxLS43MS41My0uMjkuMTItLjYyLjE4LS45OS4xOGgtLjkxVjkuMTJoLjk3Yy43MiAwIDEuMjcuMjMgMS42NC42OS4zOC40Ni41NyAxLjEyLjU3IDEuOTl2LjR6TTEyIDBsLS42Ni4wMyAzLjgxIDMuODEgMS4zMy0xLjMzYzMuMjcgMS41NSA1LjYxIDQuNzIgNS45NiA4LjQ4aDEuNUMyMy40NCA0Ljg0IDE4LjI5IDAgMTIgMHoiPjwvcGF0aD48L2c+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+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKE1vLmNvbnRlbnQpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KdmFyIEVvPXsiVSswMDA4IjoiYmFja3NwYWNlIiwiVSswMDA5IjoidGFiIiwiVSswMDFCIjoiZXNjIiwiVSswMDIwIjoic3BhY2UiLCJVKzAwN0YiOiJkZWwifSxUbz17ODoiYmFja3NwYWNlIiw5OiJ0YWIiLDEzOiJlbnRlciIsMjc6ImVzYyIsMzM6InBhZ2V1cCIsMzQ6InBhZ2Vkb3duIiwzNToiZW5kIiwzNjoiaG9tZSIsMzI6InNwYWNlIiwzNzoibGVmdCIsMzg6InVwIiwzOToicmlnaHQiLDQwOiJkb3duIiw0NjoiZGVsIiwxMDY6IioifSxDbz17c2hpZnQ6InNoaWZ0S2V5IixjdHJsOiJjdHJsS2V5IixhbHQ6ImFsdEtleSIsbWV0YToibWV0YUtleSJ9LEFvPS9bYS16MC05Kl0vLGtvPS9VXCsvLExvPS9eYXJyb3cvLFBvPS9ec3BhY2UoYmFyKT8vLE5vPS9eZXNjYXBlJC87ZnVuY3Rpb24gSW8odCxlKXt2YXIgbj0iIjtpZih0KXt2YXIgaT10LnRvTG93ZXJDYXNlKCk7IiAiPT09aXx8UG8udGVzdChpKT9uPSJzcGFjZSI6Tm8udGVzdChpKT9uPSJlc2MiOjE9PWkubGVuZ3RoP2UmJiFBby50ZXN0KGkpfHwobj1pKTpuPUxvLnRlc3QoaSk/aS5yZXBsYWNlKCJhcnJvdyIsIiIpOiJtdWx0aXBseSI9PWk/IioiOml9cmV0dXJuIG59ZnVuY3Rpb24gUm8odCxlKXtyZXR1cm4oZnVuY3Rpb24gbih0LGUpe3JldHVybiB0LmtleT9Jbyh0LmtleSxlKTp0LmRldGFpbCYmdC5kZXRhaWwua2V5P0lvKHQuZGV0YWlsLmtleSxlKTooZnVuY3Rpb24gbih0KXt2YXIgZT0iIjtyZXR1cm4gdCYmKHQgaW4gRW8/ZT1Fb1t0XTprby50ZXN0KHQpPyh0PXBhcnNlSW50KHQucmVwbGFjZSgiVSsiLCIweCIpLDE2KSxlPVN0cmluZy5mcm9tQ2hhckNvZGUodCkudG9Mb3dlckNhc2UoKSk6ZT10LnRvTG93ZXJDYXNlKCkpLGV9KSh0LmtleUlkZW50aWZpZXIpfHwoZnVuY3Rpb24gaSh0KXt2YXIgZT0iIjtyZXR1cm4gTnVtYmVyKHQpJiYoZT10Pj02NSYmdDw9OTA/U3RyaW5nLmZyb21DaGFyQ29kZSgzMit0KTp0Pj0xMTImJnQ8PTEyMz8iZiIrKHQtMTEyKzEpOnQ+PTQ4JiZ0PD01Nz9TdHJpbmcodC00OCk6dD49OTYmJnQ8PTEwNT9TdHJpbmcodC05Nik6VG9bdF0pLGV9KSh0LmtleUNvZGUpfHwiIn0pKGUsdC5oYXNNb2RpZmllcnMpPT09dC5rZXkmJighdC5oYXNNb2RpZmllcnN8fCEhZS5zaGlmdEtleT09ISF0LnNoaWZ0S2V5JiYhIWUuY3RybEtleT09ISF0LmN0cmxLZXkmJiEhZS5hbHRLZXk9PSEhdC5hbHRLZXkmJiEhZS5tZXRhS2V5PT0hIXQubWV0YUtleSl9ZnVuY3Rpb24gT28odCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KCIgIikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4oZnVuY3Rpb24gZSh0KXtyZXR1cm4gMT09PXQubGVuZ3RoP3tjb21ibzp0LGtleTp0LGV2ZW50OiJrZXlkb3duIn06dC5zcGxpdCgiKyIpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXt2YXIgbj1lLnNwbGl0KCI6IiksaT1uWzBdLHI9blsxXTtyZXR1cm4gaSBpbiBDbz8odFtDb1tpXV09ITAsdC5oYXNNb2RpZmllcnM9ITApOih0LmtleT1pLHQuZXZlbnQ9cnx8ImtleWRvd24iKSx0fSkse2NvbWJvOnQuc3BsaXQoIjoiKS5zaGlmdCgpfSl9KSh0KX0pKX1jb25zdCB6bz17cHJvcGVydGllczp7a2V5RXZlbnRUYXJnZXQ6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSxzdG9wS2V5Ym9hcmRFdmVudFByb3BhZ2F0aW9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9ib3VuZEtleUhhbmRsZXJzOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfaW1wZXJhdGl2ZUtleUJpbmRpbmdzOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt9fX19LG9ic2VydmVyczpbIl9yZXNldEtleUV2ZW50TGlzdGVuZXJzKGtleUV2ZW50VGFyZ2V0LCBfYm91bmRLZXlIYW5kbGVycykiXSxrZXlCaW5kaW5nczp7fSxyZWdpc3RlcmVkOmZ1bmN0aW9uKCl7dGhpcy5fcHJlcEtleUJpbmRpbmdzKCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fbGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl91bmxpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LGFkZE93bktleUJpbmRpbmc6ZnVuY3Rpb24odCxlKXt0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3NbdF09ZSx0aGlzLl9wcmVwS2V5QmluZGluZ3MoKSx0aGlzLl9yZXNldEtleUV2ZW50TGlzdGVuZXJzKCl9LHJlbW92ZU93bktleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzPXt9LHRoaXMuX3ByZXBLZXlCaW5kaW5ncygpLHRoaXMuX3Jlc2V0S2V5RXZlbnRMaXN0ZW5lcnMoKX0sa2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPU9vKGUpLGk9MDtpPG4ubGVuZ3RoOysraSlpZihSbyhuW2ldLHQpKXJldHVybiEwO3JldHVybiExfSxfY29sbGVjdEtleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5iZWhhdmlvcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlCaW5kaW5nc30pKTtyZXR1cm4tMT09PXQuaW5kZXhPZih0aGlzLmtleUJpbmRpbmdzKSYmdC5wdXNoKHRoaXMua2V5QmluZGluZ3MpLHR9LF9wcmVwS2V5QmluZGluZ3M6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fa2V5QmluZGluZ3M9e30sdGhpcy5fY29sbGVjdEtleUJpbmRpbmdzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpdGhpcy5fYWRkS2V5QmluZGluZyhlLHRbZV0pfSksdGhpcyksdGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzKXRoaXMuX2FkZEtleUJpbmRpbmcodCx0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3NbdF0pO2Zvcih2YXIgZSBpbiB0aGlzLl9rZXlCaW5kaW5ncyl0aGlzLl9rZXlCaW5kaW5nc1tlXS5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciBuPXRbMF0uaGFzTW9kaWZpZXJzO3JldHVybiBuPT09ZVswXS5oYXNNb2RpZmllcnM/MDpuPy0xOjF9KSl9LF9hZGRLZXlCaW5kaW5nOmZ1bmN0aW9uKHQsZSl7T28odCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dGhpcy5fa2V5QmluZGluZ3NbdC5ldmVudF09dGhpcy5fa2V5QmluZGluZ3NbdC5ldmVudF18fFtdLHRoaXMuX2tleUJpbmRpbmdzW3QuZXZlbnRdLnB1c2goW3QsZV0pfSksdGhpcyl9LF9yZXNldEtleUV2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdW5saXN0ZW5LZXlFdmVudExpc3RlbmVycygpLHRoaXMuaXNBdHRhY2hlZCYmdGhpcy5fbGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKX0sX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5rZXlFdmVudFRhcmdldCYmT2JqZWN0LmtleXModGhpcy5fa2V5QmluZGluZ3MpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX29uS2V5QmluZGluZ0V2ZW50LmJpbmQodGhpcyx0aGlzLl9rZXlCaW5kaW5nc1t0XSk7dGhpcy5fYm91bmRLZXlIYW5kbGVycy5wdXNoKFt0aGlzLmtleUV2ZW50VGFyZ2V0LHQsZV0pLHRoaXMua2V5RXZlbnRUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0LGUpfSksdGhpcyl9LF91bmxpc3RlbktleUV2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0O3RoaXMuX2JvdW5kS2V5SGFuZGxlcnMubGVuZ3RoOykodD10aGlzLl9ib3VuZEtleUhhbmRsZXJzLnBvcCgpKVswXS5yZW1vdmVFdmVudExpc3RlbmVyKHRbMV0sdFsyXSl9LF9vbktleUJpbmRpbmdFdmVudDpmdW5jdGlvbih0LGUpe2lmKHRoaXMuc3RvcEtleWJvYXJkRXZlbnRQcm9wYWdhdGlvbiYmZS5zdG9wUHJvcGFnYXRpb24oKSwhZS5kZWZhdWx0UHJldmVudGVkKWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dWzBdLHI9dFtuXVsxXTtpZihSbyhpLGUpJiYodGhpcy5fdHJpZ2dlcktleUhhbmRsZXIoaSxyLGUpLGUuZGVmYXVsdFByZXZlbnRlZCkpcmV0dXJufX0sX3RyaWdnZXJLZXlIYW5kbGVyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1PYmplY3QuY3JlYXRlKHQpO2kua2V5Ym9hcmRFdmVudD1uO3ZhciByPW5ldyBDdXN0b21FdmVudCh0LmV2ZW50LHtkZXRhaWw6aSxjYW5jZWxhYmxlOiEwfSk7dGhpc1tlXS5jYWxsKHRoaXMsciksci5kZWZhdWx0UHJldmVudGVkJiZuLnByZXZlbnREZWZhdWx0KCl9fSxEbz17cHJvcGVydGllczp7c2Nyb2xsVGFyZ2V0Ont0eXBlOkhUTUxFbGVtZW50LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRTY3JvbGxUYXJnZXR9fX0sb2JzZXJ2ZXJzOlsiX3Njcm9sbFRhcmdldENoYW5nZWQoc2Nyb2xsVGFyZ2V0LCBpc0F0dGFjaGVkKSJdLF9zaG91bGRIYXZlTGlzdGVuZXI6ITAsX3Njcm9sbFRhcmdldENoYW5nZWQ6ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9vbGRTY3JvbGxUYXJnZXQmJih0aGlzLl90b2dnbGVTY3JvbGxMaXN0ZW5lcighMSx0aGlzLl9vbGRTY3JvbGxUYXJnZXQpLHRoaXMuX29sZFNjcm9sbFRhcmdldD1udWxsKSxlKWlmKCJkb2N1bWVudCI9PT10KXRoaXMuc2Nyb2xsVGFyZ2V0PXRoaXMuX2RvYztlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIG49dGhpcy5kb21Ib3N0O3RoaXMuc2Nyb2xsVGFyZ2V0PW4mJm4uJD9uLiRbdF06WWkodGhpcy5vd25lckRvY3VtZW50KS5xdWVyeVNlbGVjdG9yKCIjIit0KX1lbHNlIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuX29sZFNjcm9sbFRhcmdldD10LHRoaXMuX3RvZ2dsZVNjcm9sbExpc3RlbmVyKHRoaXMuX3Nob3VsZEhhdmVMaXN0ZW5lcix0KSl9LF9zY3JvbGxIYW5kbGVyOmZ1bmN0aW9uIHQoKXt9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzLl9kb2N9LGdldCBfZG9jKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9LGdldCBfc2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cucGFnZVlPZmZzZXQ6dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wOjB9LGdldCBfc2Nyb2xsTGVmdCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnBhZ2VYT2Zmc2V0OnRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ6MH0sc2V0IF9zY3JvbGxUb3AodCl7dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHdpbmRvdy5wYWdlWE9mZnNldCx0KTp0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A9dCl9LHNldCBfc2Nyb2xsTGVmdCh0KXt0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuc2Nyb2xsVG8odCx3aW5kb3cucGFnZVlPZmZzZXQpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ9dCl9LHNjcm9sbDpmdW5jdGlvbih0LGUpe3ZhciBuOyJvYmplY3QiPT10eXBlb2YgdD8obj10LmxlZnQsZT10LnRvcCk6bj10LG49bnx8MCxlPWV8fDAsdGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKG4sZSk6dGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdD1uLHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcD1lKX0sZ2V0IF9zY3JvbGxUYXJnZXRXaWR0aCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LmlubmVyV2lkdGg6dGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0V2lkdGg6MH0sZ2V0IF9zY3JvbGxUYXJnZXRIZWlnaHQoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5pbm5lckhlaWdodDp0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRIZWlnaHQ6MH0sX2lzVmFsaWRTY3JvbGxUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY3JvbGxUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sX3RvZ2dsZVNjcm9sbExpc3RlbmVyOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZT09PXRoaXMuX2RvYz93aW5kb3c6ZTt0P3RoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcnx8KHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj10aGlzLl9zY3JvbGxIYW5kbGVyLmJpbmQodGhpcyksbi5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcikpOnRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlciYmKG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXIpLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj1udWxsKX0sdG9nZ2xlU2Nyb2xsTGlzdGVuZXI6ZnVuY3Rpb24odCl7dGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyPXQsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIodCx0aGlzLnNjcm9sbFRhcmdldCl9fTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwp2YXIgQm89bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpob25lfGFkOyg/OiBVOyk/IENQVSkgT1MgKFxkKykvKSxIbz1CbyYmQm9bMV0+PTgsRm89Ii0xMDAwMHB4IixWbz0tMTAwO1JyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1tYXgtZGV2aWNlLXBpeGVsLXJhdGlvOiAxKSB7CiAgICAgICAgOmhvc3QgewogICAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICNpdGVtcyB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1saXN0LWl0ZW1zLWNvbnRhaW5lcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoW2dyaWRdKSkgI2l0ZW1zID4gOjpzbG90dGVkKCopIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI2l0ZW1zID4gOjpzbG90dGVkKCopIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGFycmF5LXNlbGVjdG9yIGlkPSJzZWxlY3RvciIgaXRlbXM9Int7aXRlbXN9fSIgc2VsZWN0ZWQ9Int7c2VsZWN0ZWRJdGVtc319IiBzZWxlY3RlZC1pdGVtPSJ7e3NlbGVjdGVkSXRlbX19Ij48L2FycmF5LXNlbGVjdG9yPgoKICAgIDxkaXYgaWQ9Iml0ZW1zIj4KICAgICAgPHNsb3Q+PC9zbG90PgogICAgPC9kaXY+CmAsaXM6Imlyb24tbGlzdCIscHJvcGVydGllczp7aXRlbXM6e3R5cGU6QXJyYXl9LGFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaXRlbSJ9LGluZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpbmRleCJ9LHNlbGVjdGVkQXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJzZWxlY3RlZCJ9LGdyaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9ncmlkQ2hhbmdlZCJ9LHNlbGVjdGlvbkVuYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHNlbGVjdGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sbXVsdGlTZWxlY3Rpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2Nyb2xsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowfX0sb2JzZXJ2ZXJzOlsiX2l0ZW1zQ2hhbmdlZChpdGVtcy4qKSIsIl9zZWxlY3Rpb25FbmFibGVkQ2hhbmdlZChzZWxlY3Rpb25FbmFibGVkKSIsIl9tdWx0aVNlbGVjdGlvbkNoYW5nZWQobXVsdGlTZWxlY3Rpb24pIiwiX3NldE92ZXJmbG93KHNjcm9sbFRhcmdldCwgc2Nyb2xsT2Zmc2V0KSJdLGJlaGF2aW9yczpbWnIsZ28sRG8scG9dLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkSXRlbTpudWxsLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF9mb2N1c2VkUGh5c2ljYWxJbmRleDotMSxfb2Zmc2NyZWVuRm9jdXNlZEl0ZW06bnVsbCxfZm9jdXNCYWNrZmlsbEl0ZW06bnVsbCxfaXRlbXNQZXJSb3c6MSxfaXRlbVdpZHRoOjAsX3Jvd0hlaWdodDowLF90ZW1wbGF0ZUNvc3Q6MCxfcGFyZW50TW9kZWw6ITAsZ2V0IF9waHlzaWNhbEJvdHRvbSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9waHlzaWNhbFNpemV9LGdldCBfc2Nyb2xsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX3ZpcnR1YWxFbmQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMX0sZ2V0IF9oaWRkZW5Db250ZW50U2l6ZSgpe3JldHVybih0aGlzLmdyaWQ/dGhpcy5fcGh5c2ljYWxSb3dzKnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbFNpemUpLXRoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX2l0ZW1zUGFyZW50KCl7cmV0dXJuIFlpKFlpKHRoaXMuX3VzZXJUZW1wbGF0ZSkucGFyZW50Tm9kZSl9LGdldCBfbWF4U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl92aWV3cG9ydEhlaWdodCt0aGlzLl9zY3JvbGxPZmZzZXR9LGdldCBfbWF4VmlydHVhbFN0YXJ0KCl7dmFyIHQ9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyh0aGlzLl92aXJ0dWFsQ291bnQpO3JldHVybiBNYXRoLm1heCgwLHQtdGhpcy5fcGh5c2ljYWxDb3VudCl9LHNldCBfdmlydHVhbFN0YXJ0KHQpe3Q9dGhpcy5fY2xhbXAodCwwLHRoaXMuX21heFZpcnR1YWxTdGFydCksdGhpcy5ncmlkJiYodC09dCV0aGlzLl9pdGVtc1BlclJvdyksdGhpcy5fdmlydHVhbFN0YXJ0VmFsPXR9LGdldCBfdmlydHVhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3ZpcnR1YWxTdGFydFZhbHx8MH0sc2V0IF9waHlzaWNhbFN0YXJ0KHQpeyh0JT10aGlzLl9waHlzaWNhbENvdW50KTwwJiYodD10aGlzLl9waHlzaWNhbENvdW50K3QpLHRoaXMuZ3JpZCYmKHQtPXQldGhpcy5faXRlbXNQZXJSb3cpLHRoaXMuX3BoeXNpY2FsU3RhcnRWYWw9dH0sZ2V0IF9waHlzaWNhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsU3RhcnRWYWx8fDB9LGdldCBfcGh5c2ljYWxFbmQoKXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCt0aGlzLl9waHlzaWNhbENvdW50LTEpJXRoaXMuX3BoeXNpY2FsQ291bnR9LHNldCBfcGh5c2ljYWxDb3VudCh0KXt0aGlzLl9waHlzaWNhbENvdW50VmFsPXR9LGdldCBfcGh5c2ljYWxDb3VudCgpe3JldHVybiB0aGlzLl9waHlzaWNhbENvdW50VmFsfHwwfSxnZXQgX29wdFBoeXNpY2FsU2l6ZSgpe3JldHVybiAwPT09dGhpcy5fdmlld3BvcnRIZWlnaHQ/MS8wOnRoaXMuX3ZpZXdwb3J0SGVpZ2h0KnRoaXMuX21heFBhZ2VzfSxnZXQgX2lzVmlzaWJsZSgpe3JldHVybiBCb29sZWFuKHRoaXMub2Zmc2V0V2lkdGh8fHRoaXMub2Zmc2V0SGVpZ2h0KX0sZ2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7dmFyIHQ9dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw7aWYobnVsbD09dCl7dmFyIGU9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3Q9dGhpcy5faXRlcmF0ZUl0ZW1zKChmdW5jdGlvbih0LG4pe3JldHVybihlKz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQodCkpPnRoaXMuX3Njcm9sbFBvc2l0aW9uP3RoaXMuZ3JpZD9uLW4ldGhpcy5faXRlbXNQZXJSb3c6bjp0aGlzLmdyaWQmJnRoaXMuX3ZpcnR1YWxDb3VudC0xPT09bj9uLW4ldGhpcy5faXRlbXNQZXJSb3c6dm9pZCAwfSkpfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPXR9cmV0dXJuIHR9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7dmFyIHQ9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihudWxsPT10KXtpZih0aGlzLmdyaWQpdD1NYXRoLm1pbih0aGlzLl92aXJ0dWFsQ291bnQsdGhpcy5maXJzdFZpc2libGVJbmRleCt0aGlzLl9lc3RSb3dzSW5WaWV3KnRoaXMuX2l0ZW1zUGVyUm93LTEpO2Vsc2V7dmFyIGU9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3RoaXMuX2l0ZXJhdGVJdGVtcygoZnVuY3Rpb24obixpKXtlPHRoaXMuX3Njcm9sbEJvdHRvbSYmKHQ9aSksZSs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KG4pfSkpfXRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9dH1yZXR1cm4gdH0sZ2V0IF9kZWZhdWx0U2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXN9LGdldCBfdmlydHVhbFJvd0NvdW50KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl92aXJ0dWFsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpfSxnZXQgX2VzdFJvd3NJblZpZXcoKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuX3ZpZXdwb3J0SGVpZ2h0L3RoaXMuX3Jvd0hlaWdodCl9LGdldCBfcGh5c2ljYWxSb3dzKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KX0sZ2V0IF9zY3JvbGxPZmZzZXQoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wK3RoaXMuc2Nyb2xsT2Zmc2V0fSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2RpZEZvY3VzLmJpbmQodGhpcyksITApfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsX3QpLHRoaXMubGlzdGVuKHRoaXMsImlyb24tcmVzaXplIiwiX3Jlc2l6ZUhhbmRsZXIiKSx0aGlzLmxpc3Rlbih0aGlzLCJrZXlkb3duIiwiX2tleWRvd25IYW5kbGVyIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIiksdGhpcy51bmxpc3Rlbih0aGlzLCJrZXlkb3duIiwiX2tleWRvd25IYW5kbGVyIil9LF9zZXRPdmVyZmxvdzpmdW5jdGlvbih0KXt0aGlzLnN0eWxlLndlYmtpdE92ZXJmbG93U2Nyb2xsaW5nPXQ9PT10aGlzPyJ0b3VjaCI6IiIsdGhpcy5zdHlsZS5vdmVyZmxvd1k9dD09PXRoaXM/ImF1dG8iOiIiLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsX3QpfSx1cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXM6ZnVuY3Rpb24oKXt2YXIgdD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTt0aGlzLl9zY3JvbGxlclBhZGRpbmdUb3A9dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzPzA6cGFyc2VJbnQodFsicGFkZGluZy10b3AiXSwxMCksdGhpcy5faXNSVEw9Qm9vbGVhbigicnRsIj09PXQuZGlyZWN0aW9uKSx0aGlzLl92aWV3cG9ydFdpZHRoPXRoaXMuJC5pdGVtcy5vZmZzZXRXaWR0aCx0aGlzLl92aWV3cG9ydEhlaWdodD10aGlzLl9zY3JvbGxUYXJnZXRIZWlnaHQsdGhpcy5ncmlkJiZ0aGlzLl91cGRhdGVHcmlkTWV0cmljcygpfSxfc2Nyb2xsSGFuZGxlcjpmdW5jdGlvbigpe3ZhciB0PU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5fbWF4U2Nyb2xsVG9wLHRoaXMuX3Njcm9sbFRvcCkpLGU9dC10aGlzLl9zY3JvbGxQb3NpdGlvbixuPWU+PTA7aWYodGhpcy5fc2Nyb2xsUG9zaXRpb249dCx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCxNYXRoLmFicyhlKT50aGlzLl9waHlzaWNhbFNpemUmJnRoaXMuX3BoeXNpY2FsU2l6ZT4wKXtlLT10aGlzLl9zY3JvbGxPZmZzZXQ7dmFyIGk9TWF0aC5yb3VuZChlL3RoaXMuX3BoeXNpY2FsQXZlcmFnZSkqdGhpcy5faXRlbXNQZXJSb3c7dGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydCtpLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGgubWluKE1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UsdGhpcy5fc2Nyb2xsUG9zaXRpb24pLHRoaXMuX3VwZGF0ZSgpfWVsc2UgaWYodGhpcy5fcGh5c2ljYWxDb3VudD4wKXt2YXIgcj10aGlzLl9nZXRSZXVzYWJsZXMobik7bj8odGhpcy5fcGh5c2ljYWxUb3A9ci5waHlzaWNhbFRvcCx0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K3IuaW5kZXhlcy5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3IuaW5kZXhlcy5sZW5ndGgpOih0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0LXIuaW5kZXhlcy5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0LXIuaW5kZXhlcy5sZW5ndGgpLHRoaXMuX3VwZGF0ZShyLmluZGV4ZXMsbj9udWxsOnIuaW5kZXhlcyksdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLDApLHZ0KX19LF9nZXRSZXVzYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGUsbixpLHI9W10sbz10aGlzLl9oaWRkZW5Db250ZW50U2l6ZSp0aGlzLl9yYXRpbyxhPXRoaXMuX3ZpcnR1YWxTdGFydCxzPXRoaXMuX3ZpcnR1YWxFbmQsbD10aGlzLl9waHlzaWNhbENvdW50LGM9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0LHU9dGhpcy5fc2Nyb2xsUG9zaXRpb24saD10aGlzLl9zY3JvbGxCb3R0b207Zm9yKHQ/KGU9dGhpcy5fcGh5c2ljYWxTdGFydCxuPXUtYyk6KGU9dGhpcy5fcGh5c2ljYWxFbmQsbj10aGlzLl9waHlzaWNhbEJvdHRvbSt0aGlzLl9zY3JvbGxPZmZzZXQtaCk7bi09aT10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQoZSksIShyLmxlbmd0aD49bHx8bjw9byk7KWlmKHQpe2lmKHMrci5sZW5ndGgrMT49dGhpcy5fdmlydHVhbENvdW50KWJyZWFrO2lmKGMraT49dS10aGlzLl9zY3JvbGxPZmZzZXQpYnJlYWs7ci5wdXNoKGUpLGMrPWksZT0oZSsxKSVsfWVsc2V7aWYoYS1yLmxlbmd0aDw9MClicmVhaztpZihjK3RoaXMuX3BoeXNpY2FsU2l6ZS1pPD1oKWJyZWFrO3IucHVzaChlKSxjLT1pLGU9MD09PWU/bC0xOmUtMX1yZXR1cm57aW5kZXhlczpyLHBoeXNpY2FsVG9wOmMtdGhpcy5fc2Nyb2xsT2Zmc2V0fX0sX3VwZGF0ZTpmdW5jdGlvbih0LGUpe2lmKCEodCYmMD09PXQubGVuZ3RofHwwPT09dGhpcy5fcGh5c2ljYWxDb3VudCkpe2lmKHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKHQpLHRoaXMuX3VwZGF0ZU1ldHJpY3ModCksZSlmb3IoO2UubGVuZ3RoOyl7dmFyIG49ZS5wb3AoKTt0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KG4pfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9jcmVhdGVQb29sOmZ1bmN0aW9uKHQpe3ZhciBlLG47dGhpcy5fZW5zdXJlVGVtcGxhdGl6ZWQoKTt2YXIgaT1uZXcgQXJyYXkodCk7Zm9yKGU9MDtlPHQ7ZSsrKW49dGhpcy5zdGFtcChudWxsKSxpW2VdPW4ucm9vdC5xdWVyeVNlbGVjdG9yKCIqIiksdGhpcy5faXRlbXNQYXJlbnQuYXBwZW5kQ2hpbGQobi5yb290KTtyZXR1cm4gaX0sX2lzQ2xpZW50RnVsbDpmdW5jdGlvbigpe3JldHVybiAwIT10aGlzLl9zY3JvbGxCb3R0b20mJnRoaXMuX3BoeXNpY2FsQm90dG9tLTE+PXRoaXMuX3Njcm9sbEJvdHRvbSYmdGhpcy5fcGh5c2ljYWxUb3A8PXRoaXMuX3Njcm9sbFBvc2l0aW9ufSxfaW5jcmVhc2VQb29sSWZOZWVkZWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fY2xhbXAodGhpcy5fcGh5c2ljYWxDb3VudCt0LDMsdGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCk7aWYoZT10aGlzLl9jb252ZXJ0SW5kZXhUb0NvbXBsZXRlUm93KGUpLHRoaXMuZ3JpZCl7dmFyIG49ZSV0aGlzLl9pdGVtc1BlclJvdztuJiZlLW48PXRoaXMuX3BoeXNpY2FsQ291bnQmJihlKz10aGlzLl9pdGVtc1BlclJvdyksZS09bn12YXIgaT1lLXRoaXMuX3BoeXNpY2FsQ291bnQscj1NYXRoLnJvdW5kKC41KnRoaXMuX3BoeXNpY2FsQ291bnQpO2lmKCEoaTwwKSl7aWYoaT4wKXt2YXIgbz13aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7W10ucHVzaC5hcHBseSh0aGlzLl9waHlzaWNhbEl0ZW1zLHRoaXMuX2NyZWF0ZVBvb2woaSkpO2Zvcih2YXIgYT0wO2E8aTthKyspdGhpcy5fcGh5c2ljYWxTaXplcy5wdXNoKDApO3RoaXMuX3BoeXNpY2FsQ291bnQ9dGhpcy5fcGh5c2ljYWxDb3VudCtpLHRoaXMuX3BoeXNpY2FsU3RhcnQ+dGhpcy5fcGh5c2ljYWxFbmQmJnRoaXMuX2lzSW5kZXhSZW5kZXJlZCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSYmdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KTx0aGlzLl9waHlzaWNhbEVuZCYmKHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtpKSx0aGlzLl91cGRhdGUoKSx0aGlzLl90ZW1wbGF0ZUNvc3Q9KHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKS1vKS9pLHI9TWF0aC5yb3VuZCguNSp0aGlzLl9waHlzaWNhbENvdW50KX10aGlzLl92aXJ0dWFsRW5kPj10aGlzLl92aXJ0dWFsQ291bnQtMXx8MD09PXJ8fCh0aGlzLl9pc0NsaWVudEZ1bGwoKT90aGlzLl9waHlzaWNhbFNpemU8dGhpcy5fb3B0UGh5c2ljYWxTaXplJiZ0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsdGhpcy5fY2xhbXAoTWF0aC5yb3VuZCg1MC90aGlzLl90ZW1wbGF0ZUNvc3QpLDEscikpLHl0KTp0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsciksdnQpKX19LF9yZW5kZXI6ZnVuY3Rpb24oKXtpZih0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2lzVmlzaWJsZSlpZigwIT09dGhpcy5fcGh5c2ljYWxDb3VudCl7dmFyIHQ9dGhpcy5fZ2V0UmV1c2FibGVzKCEwKTt0aGlzLl9waHlzaWNhbFRvcD10LnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrdC5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrdC5pbmRleGVzLmxlbmd0aCx0aGlzLl91cGRhdGUodC5pbmRleGVzKSx0aGlzLl91cGRhdGUoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKX1lbHNlIHRoaXMuX3ZpcnR1YWxDb3VudD4wJiYodGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgzKSl9LF9lbnN1cmVUZW1wbGF0aXplZDpmdW5jdGlvbigpe2lmKCF0aGlzLmN0b3Ipe3RoaXMuX3VzZXJUZW1wbGF0ZT10aGlzLnF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4oInRlbXBsYXRlIiksdGhpcy5fdXNlclRlbXBsYXRlfHxjb25zb2xlLndhcm4oImlyb24tbGlzdCByZXF1aXJlcyBhIHRlbXBsYXRlIHRvIGJlIHByb3ZpZGVkIGluIGxpZ2h0LWRvbSIpO3ZhciB0PXtfX2tleV9fOiEwfTt0W3RoaXMuYXNdPSEwLHRbdGhpcy5pbmRleEFzXT0hMCx0W3RoaXMuc2VsZWN0ZWRBc109ITAsdC50YWJJbmRleD0hMCx0aGlzLl9pbnN0YW5jZVByb3BzPXQsdGhpcy50ZW1wbGF0aXplKHRoaXMuX3VzZXJUZW1wbGF0ZSx0aGlzLm11dGFibGVEYXRhKX19LF9ncmlkQ2hhbmdlZDpmdW5jdGlvbih0LGUpe3ZvaWQgMCE9PWUmJih0aGlzLm5vdGlmeVJlc2l6ZSgpLERpKCksdCYmdGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKSl9LF9pdGVtc0NoYW5nZWQ6ZnVuY3Rpb24odCl7aWYoIml0ZW1zIj09PXQucGF0aCl0aGlzLl92aXJ0dWFsU3RhcnQ9MCx0aGlzLl9waHlzaWNhbFRvcD0wLHRoaXMuX3ZpcnR1YWxDb3VudD10aGlzLml0ZW1zP3RoaXMuaXRlbXMubGVuZ3RoOjAsdGhpcy5fcGh5c2ljYWxJbmRleEZvcktleT17fSx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9waHlzaWNhbENvdW50PXRoaXMuX3BoeXNpY2FsQ291bnR8fDAsdGhpcy5fcGh5c2ljYWxJdGVtcz10aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSx0aGlzLl9waHlzaWNhbFNpemVzPXRoaXMuX3BoeXNpY2FsU2l6ZXN8fFtdLHRoaXMuX3BoeXNpY2FsU3RhcnQ9MCx0aGlzLl9zY3JvbGxUb3A+dGhpcy5fc2Nyb2xsT2Zmc2V0JiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKDApLHRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCksdGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixfdCk7ZWxzZSBpZigiaXRlbXMuc3BsaWNlcyI9PT10LnBhdGgpe2lmKHRoaXMuX2FkanVzdFZpcnR1YWxJbmRleCh0LnZhbHVlLmluZGV4U3BsaWNlcyksdGhpcy5fdmlydHVhbENvdW50PXRoaXMuaXRlbXM/dGhpcy5pdGVtcy5sZW5ndGg6MCx0LnZhbHVlLmluZGV4U3BsaWNlcy5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRlZENvdW50PjB8fHQucmVtb3ZlZC5sZW5ndGg+MH0pKSl7dmFyIGU9dGhpcy5fZ2V0QWN0aXZlRWxlbWVudCgpO3RoaXMuY29udGFpbnMoZSkmJmUuYmx1cigpfXZhciBuPXQudmFsdWUuaW5kZXhTcGxpY2VzLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmluZGV4K3QuYWRkZWRDb3VudD49dGhpcy5fdmlydHVhbFN0YXJ0JiZ0LmluZGV4PD10aGlzLl92aXJ0dWFsRW5kfSksdGhpcyk7dGhpcy5faXNDbGllbnRGdWxsKCkmJiFufHx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLF90KX1lbHNlIml0ZW1zLmxlbmd0aCIhPT10LnBhdGgmJnRoaXMuX2ZvcndhcmRJdGVtUGF0aCh0LnBhdGgsdC52YWx1ZSl9LF9mb3J3YXJkSXRlbVBhdGg6ZnVuY3Rpb24odCxlKXt2YXIgbixpLHIsbz0odD10LnNsaWNlKDYpKS5pbmRleE9mKCIuIik7LTE9PT1vJiYobz10Lmxlbmd0aCk7dmFyIGE9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pLHM9cGFyc2VJbnQodC5zdWJzdHJpbmcoMCxvKSwxMCk7KG49dGhpcy5faXNJbmRleFJlbmRlcmVkKHMpKT8oaT10aGlzLl9nZXRQaHlzaWNhbEluZGV4KHMpLHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1tpXSkpOmEmJihyPWEpLHImJnJbdGhpcy5pbmRleEFzXT09PXMmJih0PXQuc3Vic3RyaW5nKG8rMSksci5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHQ9dGhpcy5hcysodD8iLiIrdDoiIiksZSwhMSwhMCksci5fZmx1c2hQcm9wZXJ0aWVzJiZyLl9mbHVzaFByb3BlcnRpZXMoKSxuJiYodGhpcy5fdXBkYXRlTWV0cmljcyhbaV0pLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKSkpfSxfYWRqdXN0VmlydHVhbEluZGV4OmZ1bmN0aW9uKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYodC5yZW1vdmVkLmZvckVhY2godGhpcy5fcmVtb3ZlSXRlbSx0aGlzKSx0LmluZGV4PHRoaXMuX3ZpcnR1YWxTdGFydCl7dmFyIGU9TWF0aC5tYXgodC5hZGRlZENvdW50LXQucmVtb3ZlZC5sZW5ndGgsdC5pbmRleC10aGlzLl92aXJ0dWFsU3RhcnQpO3RoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrZSx0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Pj0wJiYodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4K2UpfX0pLHRoaXMpfSxfcmVtb3ZlSXRlbTpmdW5jdGlvbih0KXt0aGlzLiQuc2VsZWN0b3IuZGVzZWxlY3QodCksdGhpcy5fZm9jdXNlZEl0ZW0mJnRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX2ZvY3VzZWRJdGVtKVt0aGlzLmFzXT09PXQmJnRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24odCxlKXt2YXIgbixpLHIsbztpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmZSl7Zm9yKG89MDtvPGUubGVuZ3RoO28rKylpZihpPXRoaXMuX2NvbXB1dGVWaWR4KG49ZVtvXSksbnVsbCE9KHI9dC5jYWxsKHRoaXMsbixpKSkpcmV0dXJuIHJ9ZWxzZXtmb3Iobj10aGlzLl9waHlzaWNhbFN0YXJ0LGk9dGhpcy5fdmlydHVhbFN0YXJ0O248dGhpcy5fcGh5c2ljYWxDb3VudDtuKyssaSsrKWlmKG51bGwhPShyPXQuY2FsbCh0aGlzLG4saSkpKXJldHVybiByO2ZvcihuPTA7bjx0aGlzLl9waHlzaWNhbFN0YXJ0O24rKyxpKyspaWYobnVsbCE9KHI9dC5jYWxsKHRoaXMsbixpKSkpcmV0dXJuIHJ9fSxfY29tcHV0ZVZpZHg6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PXRoaXMuX3BoeXNpY2FsU3RhcnQ/dGhpcy5fdmlydHVhbFN0YXJ0Kyh0LXRoaXMuX3BoeXNpY2FsU3RhcnQpOnRoaXMuX3ZpcnR1YWxTdGFydCsodGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl9waHlzaWNhbFN0YXJ0KSt0fSxfYXNzaWduTW9kZWxzOmZ1bmN0aW9uKHQpe3RoaXMuX2l0ZXJhdGVJdGVtcygoZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9waHlzaWNhbEl0ZW1zW3RdLGk9dGhpcy5pdGVtcyYmdGhpcy5pdGVtc1tlXTtpZihudWxsIT1pKXt2YXIgcj10aGlzLm1vZGVsRm9yRWxlbWVudChuKTtyLl9fa2V5X189bnVsbCx0aGlzLl9mb3J3YXJkUHJvcGVydHkocix0aGlzLmFzLGkpLHRoaXMuX2ZvcndhcmRQcm9wZXJ0eShyLHRoaXMuc2VsZWN0ZWRBcyx0aGlzLiQuc2VsZWN0b3IuaXNTZWxlY3RlZChpKSksdGhpcy5fZm9yd2FyZFByb3BlcnR5KHIsdGhpcy5pbmRleEFzLGUpLHRoaXMuX2ZvcndhcmRQcm9wZXJ0eShyLCJ0YWJJbmRleCIsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD09PWU/MDotMSksdGhpcy5fcGh5c2ljYWxJbmRleEZvcktleVtyLl9fa2V5X19dPXQsci5fZmx1c2hQcm9wZXJ0aWVzJiZyLl9mbHVzaFByb3BlcnRpZXMoITApLG4ucmVtb3ZlQXR0cmlidXRlKCJoaWRkZW4iKX1lbHNlIG4uc2V0QXR0cmlidXRlKCJoaWRkZW4iLCIiKX0pLHQpfSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbih0KXtEaSgpO3ZhciBlPTAsbj0wLGk9dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQscj10aGlzLl9waHlzaWNhbEF2ZXJhZ2U7dGhpcy5faXRlcmF0ZUl0ZW1zKChmdW5jdGlvbih0LGkpe24rPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF0sdGhpcy5fcGh5c2ljYWxTaXplc1t0XT10aGlzLl9waHlzaWNhbEl0ZW1zW3RdLm9mZnNldEhlaWdodCxlKz10aGlzLl9waHlzaWNhbFNpemVzW3RdLHRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50Kz10aGlzLl9waHlzaWNhbFNpemVzW3RdPzE6MH0pLHQpLHRoaXMuZ3JpZD8odGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKSx0aGlzLl9waHlzaWNhbFNpemU9TWF0aC5jZWlsKHRoaXMuX3BoeXNpY2FsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3Jvd0hlaWdodCk6KG49MT09PXRoaXMuX2l0ZW1zUGVyUm93P246TWF0aC5jZWlsKHRoaXMuX3BoeXNpY2FsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3Jvd0hlaWdodCx0aGlzLl9waHlzaWNhbFNpemU9dGhpcy5fcGh5c2ljYWxTaXplK2Utbix0aGlzLl9pdGVtc1BlclJvdz0xKSx0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCE9PWkmJih0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9TWF0aC5yb3VuZCgocippK2UpL3RoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50KSl9LF91cGRhdGVHcmlkTWV0cmljczpmdW5jdGlvbigpe3RoaXMuX2l0ZW1XaWR0aD10aGlzLl9waHlzaWNhbENvdW50PjA/dGhpcy5fcGh5c2ljYWxJdGVtc1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDoyMDAsdGhpcy5fcm93SGVpZ2h0PXRoaXMuX3BoeXNpY2FsQ291bnQ+MD90aGlzLl9waHlzaWNhbEl0ZW1zWzBdLm9mZnNldEhlaWdodDoyMDAsdGhpcy5faXRlbXNQZXJSb3c9dGhpcy5faXRlbVdpZHRoP01hdGguZmxvb3IodGhpcy5fdmlld3BvcnRXaWR0aC90aGlzLl9pdGVtV2lkdGgpOnRoaXMuX2l0ZW1zUGVyUm93fSxfcG9zaXRpb25JdGVtczpmdW5jdGlvbigpe3RoaXMuX2FkanVzdFNjcm9sbFBvc2l0aW9uKCk7dmFyIHQ9dGhpcy5fcGh5c2ljYWxUb3A7aWYodGhpcy5ncmlkKXt2YXIgZT0odGhpcy5fdmlld3BvcnRXaWR0aC10aGlzLl9pdGVtc1BlclJvdyp0aGlzLl9pdGVtV2lkdGgpLzI7dGhpcy5faXRlcmF0ZUl0ZW1zKChmdW5jdGlvbihuLGkpe3ZhciByPU1hdGguZmxvb3IoaSV0aGlzLl9pdGVtc1BlclJvdyp0aGlzLl9pdGVtV2lkdGgrZSk7dGhpcy5faXNSVEwmJihyKj0tMSksdGhpcy50cmFuc2xhdGUzZChyKyJweCIsdCsicHgiLDAsdGhpcy5fcGh5c2ljYWxJdGVtc1tuXSksdGhpcy5fc2hvdWxkUmVuZGVyTmV4dFJvdyhpKSYmKHQrPXRoaXMuX3Jvd0hlaWdodCl9KSl9ZWxzZXtjb25zdCBlPVtdO3RoaXMuX2l0ZXJhdGVJdGVtcygoZnVuY3Rpb24obixpKXtjb25zdCByPXRoaXMuX3BoeXNpY2FsSXRlbXNbbl07dGhpcy50cmFuc2xhdGUzZCgwLHQrInB4IiwwLHIpLHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbbl07Y29uc3Qgbz1yLmlkO28mJmUucHVzaChvKX0pKSxlLmxlbmd0aCYmdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsZS5qb2luKCIgIikpfX0sX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5ncmlkP3RoaXMuX2NvbXB1dGVWaWR4KHQpJXRoaXMuX2l0ZW1zUGVyUm93IT10aGlzLl9pdGVtc1BlclJvdy0xPzA6dGhpcy5fcm93SGVpZ2h0OnRoaXMuX3BoeXNpY2FsU2l6ZXNbdF19LF9zaG91bGRSZW5kZXJOZXh0Um93OmZ1bmN0aW9uKHQpe3JldHVybiB0JXRoaXMuX2l0ZW1zUGVyUm93PT10aGlzLl9pdGVtc1BlclJvdy0xfSxfYWRqdXN0U2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD0wPT09dGhpcy5fdmlydHVhbFN0YXJ0P3RoaXMuX3BoeXNpY2FsVG9wOk1hdGgubWluKHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3BoeXNpY2FsVG9wLDApO2lmKDAhPT10KXt0aGlzLl9waHlzaWNhbFRvcD10aGlzLl9waHlzaWNhbFRvcC10O3ZhciBlPXRoaXMuX3Njcm9sbFBvc2l0aW9uOyFIbyYmZT4wJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKGUtdCl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbih0KXt0aGlzLnNjcm9sbFRhcmdldCYmdD49MCYmKHRoaXMuX3Njcm9sbFRvcD10LHRoaXMuX3Njcm9sbFBvc2l0aW9uPXRoaXMuX3Njcm9sbFRvcCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24odCl7dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0PXRoaXMuZ3JpZD90aGlzLl92aXJ0dWFsUm93Q291bnQqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX3BoeXNpY2FsQm90dG9tK01hdGgubWF4KHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCwwKSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UsKCh0PSh0PSh0PXR8fDA9PT10aGlzLl9zY3JvbGxIZWlnaHQpfHx0aGlzLl9zY3JvbGxQb3NpdGlvbj49dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3BoeXNpY2FsU2l6ZSl8fHRoaXMuZ3JpZCYmdGhpcy4kLml0ZW1zLnN0eWxlLmhlaWdodDx0aGlzLl9lc3RTY3JvbGxIZWlnaHQpfHxNYXRoLmFicyh0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fc2Nyb2xsSGVpZ2h0KT49dGhpcy5fdmlld3BvcnRIZWlnaHQpJiYodGhpcy4kLml0ZW1zLnN0eWxlLmhlaWdodD10aGlzLl9lc3RTY3JvbGxIZWlnaHQrInB4Iix0aGlzLl9zY3JvbGxIZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KX0sc2Nyb2xsVG9JdGVtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNjcm9sbFRvSW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKHQpKX0sc2Nyb2xsVG9JbmRleDpmdW5jdGlvbih0KXtpZighKCJudW1iZXIiIT10eXBlb2YgdHx8dDwwfHx0PnRoaXMuaXRlbXMubGVuZ3RoLTEpJiYoRGkoKSwwIT09dGhpcy5fcGh5c2ljYWxDb3VudCkpe3Q9dGhpcy5fY2xhbXAodCwwLHRoaXMuX3ZpcnR1YWxDb3VudC0xKSwoIXRoaXMuX2lzSW5kZXhSZW5kZXJlZCh0KXx8dD49dGhpcy5fbWF4VmlydHVhbFN0YXJ0KSYmKHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLmdyaWQ/dC0yKnRoaXMuX2l0ZW1zUGVyUm93OnQtMSksdGhpcy5fbWFuYWdlRm9jdXMoKSx0aGlzLl9hc3NpZ25Nb2RlbHMoKSx0aGlzLl91cGRhdGVNZXRyaWNzKCksdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZTtmb3IodmFyIGU9dGhpcy5fcGh5c2ljYWxTdGFydCxuPXRoaXMuX3ZpcnR1YWxTdGFydCxpPTAscj10aGlzLl9oaWRkZW5Db250ZW50U2l6ZTtuPHQmJmk8PXI7KWkrPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChlKSxlPShlKzEpJXRoaXMuX3BoeXNpY2FsQ291bnQsbisrO3RoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSghMCksdGhpcy5fcG9zaXRpb25JdGVtcygpLHRoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24odGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0K2kpLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsfX0sX3Jlc2V0QXZlcmFnZTpmdW5jdGlvbigpe3RoaXMuX3BoeXNpY2FsQXZlcmFnZT0wLHRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50PTB9LF9yZXNpemVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLChmdW5jdGlvbigpe3RoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2lzVmlzaWJsZT8odGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCEwKSx0aGlzLl9yZXNldEF2ZXJhZ2UoKSx0aGlzLl9yZW5kZXIoKSk6dGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMSl9KSxfdCl9LHNlbGVjdEl0ZW06ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKHQpKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24odCl7aWYoISh0PDB8fHQ+PXRoaXMuX3ZpcnR1YWxDb3VudCkpe2lmKCF0aGlzLm11bHRpU2VsZWN0aW9uJiZ0aGlzLnNlbGVjdGVkSXRlbSYmdGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuX2lzSW5kZXhSZW5kZXJlZCh0KSl7dmFyIGU9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KHQpXSk7ZSYmKGVbdGhpcy5zZWxlY3RlZEFzXT0hMCksdGhpcy51cGRhdGVTaXplRm9ySW5kZXgodCl9dGhpcy4kLnNlbGVjdG9yLnNlbGVjdEluZGV4KHQpfX0sZGVzZWxlY3RJdGVtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKHQpKX0sZGVzZWxlY3RJbmRleDpmdW5jdGlvbih0KXt0PDB8fHQ+PXRoaXMuX3ZpcnR1YWxDb3VudHx8KHRoaXMuX2lzSW5kZXhSZW5kZXJlZCh0KSYmKHRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0KV0pW3RoaXMuc2VsZWN0ZWRBc109ITEsdGhpcy51cGRhdGVTaXplRm9ySW5kZXgodCkpLHRoaXMuJC5zZWxlY3Rvci5kZXNlbGVjdEluZGV4KHQpKX0sdG9nZ2xlU2VsZWN0aW9uRm9ySXRlbTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50b2dnbGVTZWxlY3Rpb25Gb3JJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YodCkpfSx0b2dnbGVTZWxlY3Rpb25Gb3JJbmRleDpmdW5jdGlvbih0KXsodGhpcy4kLnNlbGVjdG9yLmlzSW5kZXhTZWxlY3RlZD90aGlzLiQuc2VsZWN0b3IuaXNJbmRleFNlbGVjdGVkKHQpOnRoaXMuJC5zZWxlY3Rvci5pc1NlbGVjdGVkKHRoaXMuaXRlbXNbdF0pKT90aGlzLmRlc2VsZWN0SW5kZXgodCk6dGhpcy5zZWxlY3RJbmRleCh0KX0sY2xlYXJTZWxlY3Rpb246ZnVuY3Rpb24oKXt0aGlzLl9pdGVyYXRlSXRlbXMoKGZ1bmN0aW9uKHQsZSl7dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1t0XSlbdGhpcy5zZWxlY3RlZEFzXT0hMX0pKSx0aGlzLiQuc2VsZWN0b3IuY2xlYXJTZWxlY3Rpb24oKX0sX3NlbGVjdGlvbkVuYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKHQpeyh0P3RoaXMubGlzdGVuOnRoaXMudW5saXN0ZW4pLmNhbGwodGhpcyx0aGlzLCJ0YXAiLCJfc2VsZWN0aW9uSGFuZGxlciIpfSxfc2VsZWN0aW9uSGFuZGxlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm1vZGVsRm9yRWxlbWVudCh0LnRhcmdldCk7aWYoZSl7dmFyIG4saSxyPVlpKHQpLnBhdGhbMF0sbz10aGlzLl9nZXRBY3RpdmVFbGVtZW50KCksYT10aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoZVt0aGlzLmluZGV4QXNdKV07ImlucHV0IiE9PXIubG9jYWxOYW1lJiYiYnV0dG9uIiE9PXIubG9jYWxOYW1lJiYic2VsZWN0IiE9PXIubG9jYWxOYW1lJiYobj1lLnRhYkluZGV4LGUudGFiSW5kZXg9Vm8saT1vP28udGFiSW5kZXg6LTEsZS50YWJJbmRleD1uLG8mJmEhPT1vJiZhLmNvbnRhaW5zKG8pJiZpIT09Vm98fHRoaXMudG9nZ2xlU2VsZWN0aW9uRm9ySXRlbShlW3RoaXMuYXNdKSl9fSxfbXVsdGlTZWxlY3Rpb25DaGFuZ2VkOmZ1bmN0aW9uKHQpe3RoaXMuY2xlYXJTZWxlY3Rpb24oKSx0aGlzLiQuc2VsZWN0b3IubXVsdGk9dH0sdXBkYXRlU2l6ZUZvckl0ZW06ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXBkYXRlU2l6ZUZvckluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZih0KSl9LHVwZGF0ZVNpemVGb3JJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faXNJbmRleFJlbmRlcmVkKHQpPyh0aGlzLl91cGRhdGVNZXRyaWNzKFt0aGlzLl9nZXRQaHlzaWNhbEluZGV4KHQpXSksdGhpcy5fcG9zaXRpb25JdGVtcygpLG51bGwpOm51bGx9LF9tYW5hZ2VGb2N1czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg7dD49MCYmdDx0aGlzLl92aXJ0dWFsQ291bnQ/dGhpcy5faXNJbmRleFJlbmRlcmVkKHQpP3RoaXMuX3Jlc3RvcmVGb2N1c2VkSXRlbSgpOnRoaXMuX2NyZWF0ZUZvY3VzQmFja2ZpbGxJdGVtKCk6dGhpcy5fdmlydHVhbENvdW50PjAmJnRoaXMuX3BoeXNpY2FsQ291bnQ+MCYmKHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXRoaXMuX3BoeXNpY2FsU3RhcnQsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD10aGlzLl92aXJ0dWFsU3RhcnQsdGhpcy5fZm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9waHlzaWNhbFN0YXJ0XSl9LF9jb252ZXJ0SW5kZXhUb0NvbXBsZXRlUm93OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pdGVtc1BlclJvdz10aGlzLl9pdGVtc1BlclJvd3x8MSx0aGlzLmdyaWQ/TWF0aC5jZWlsKHQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX2l0ZW1zUGVyUm93OnR9LF9pc0luZGV4UmVuZGVyZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PXRoaXMuX3ZpcnR1YWxTdGFydCYmdDw9dGhpcy5fdmlydHVhbEVuZH0sX2lzSW5kZXhWaXNpYmxlOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj10aGlzLmZpcnN0VmlzaWJsZUluZGV4JiZ0PD10aGlzLmxhc3RWaXNpYmxlSW5kZXh9LF9nZXRQaHlzaWNhbEluZGV4OmZ1bmN0aW9uKHQpe3JldHVybih0aGlzLl9waHlzaWNhbFN0YXJ0Kyh0LXRoaXMuX3ZpcnR1YWxTdGFydCkpJXRoaXMuX3BoeXNpY2FsQ291bnR9LGZvY3VzSXRlbTpmdW5jdGlvbih0KXt0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0KX0sX2ZvY3VzUGh5c2ljYWxJdGVtOmZ1bmN0aW9uKHQpe2lmKCEodDwwfHx0Pj10aGlzLl92aXJ0dWFsQ291bnQpKXt0aGlzLl9yZXN0b3JlRm9jdXNlZEl0ZW0oKSx0aGlzLl9pc0luZGV4UmVuZGVyZWQodCl8fHRoaXMuc2Nyb2xsVG9JbmRleCh0KTt2YXIgZSxuPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0KV0saT10aGlzLm1vZGVsRm9yRWxlbWVudChuKTtpLnRhYkluZGV4PVZvLG4udGFiSW5kZXg9PT1WbyYmKGU9biksZXx8KGU9WWkobikucXVlcnlTZWxlY3RvcignW3RhYmluZGV4PSItMTAwIl0nKSksaS50YWJJbmRleD0wLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dCxlJiZlLmZvY3VzKCl9fSxfcmVtb3ZlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSYmdGhpcy5faXRlbXNQYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtPW51bGwsdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCx0aGlzLl9mb2N1c2VkSXRlbT1udWxsLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9LTEsdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9LTF9LF9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4O2lmKCEodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW18fHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg8MCkpe2lmKCF0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbSl7dmFyIGU9dGhpcy5zdGFtcChudWxsKTt0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT1lLnJvb3QucXVlcnlTZWxlY3RvcigiKiIpLHRoaXMuX2l0ZW1zUGFyZW50LmFwcGVuZENoaWxkKGUucm9vdCl9dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1t0XSx0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkudGFiSW5kZXg9MCx0aGlzLl9waHlzaWNhbEl0ZW1zW3RdPXRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXQsdGhpcy50cmFuc2xhdGUzZCgwLEZvLDAsdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pfX0sX3Jlc3RvcmVGb2N1c2VkSXRlbTpmdW5jdGlvbigpe2lmKHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtJiYhKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg8MCkpe3RoaXMuX2Fzc2lnbk1vZGVscygpO3ZhciB0PXRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXRoaXMuX2dldFBoeXNpY2FsSW5kZXgodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCksZT10aGlzLl9waHlzaWNhbEl0ZW1zW3RdO2lmKGUpe3ZhciBuPXRoaXMubW9kZWxGb3JFbGVtZW50KGUpLGk9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pO25bdGhpcy5hc109PT1pW3RoaXMuYXNdPyh0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT1lLG4udGFiSW5kZXg9LTEsdGhpcy5fcGh5c2ljYWxJdGVtc1t0XT10aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLnRyYW5zbGF0ZTNkKDAsRm8sMCx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbSkpOih0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtPW51bGwpLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtPW51bGx9fX0sX2RpZEZvY3VzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubW9kZWxGb3JFbGVtZW50KHQudGFyZ2V0KSxuPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX2ZvY3VzZWRJdGVtKSxpPW51bGwhPT10aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSxyPXRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg7ZSYmKG49PT1lP3RoaXMuX2lzSW5kZXhWaXNpYmxlKHIpfHx0aGlzLnNjcm9sbFRvSW5kZXgocik6KHRoaXMuX3Jlc3RvcmVGb2N1c2VkSXRlbSgpLG4mJihuLnRhYkluZGV4PS0xKSxlLnRhYkluZGV4PTAsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD1yPWVbdGhpcy5pbmRleEFzXSx0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9nZXRQaHlzaWNhbEluZGV4KHIpLHRoaXMuX2ZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXhdLGkmJiF0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSYmdGhpcy5fdXBkYXRlKCkpKX0sX2tleWRvd25IYW5kbGVyOmZ1bmN0aW9uKHQpe3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgNDA6dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDx0aGlzLl92aXJ0dWFsQ291bnQtMSYmdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzUGh5c2ljYWxJdGVtKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgrKHRoaXMuZ3JpZD90aGlzLl9pdGVtc1BlclJvdzoxKSk7YnJlYWs7Y2FzZSAzOTp0aGlzLmdyaWQmJnRoaXMuX2ZvY3VzUGh5c2ljYWxJdGVtKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgrKHRoaXMuX2lzUlRMPy0xOjEpKTticmVhaztjYXNlIDM4OnRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg+MCYmdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzUGh5c2ljYWxJdGVtKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgtKHRoaXMuZ3JpZD90aGlzLl9pdGVtc1BlclJvdzoxKSk7YnJlYWs7Y2FzZSAzNzp0aGlzLmdyaWQmJnRoaXMuX2ZvY3VzUGh5c2ljYWxJdGVtKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgrKHRoaXMuX2lzUlRMPzE6LTEpKTticmVhaztjYXNlIDEzOnRoaXMuX2ZvY3VzUGh5c2ljYWxJdGVtKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpLHRoaXMuc2VsZWN0aW9uRW5hYmxlZCYmdGhpcy5fc2VsZWN0aW9uSGFuZGxlcih0KX19LF9jbGFtcDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIE1hdGgubWluKG4sTWF0aC5tYXgoZSx0KSl9LF9kZWJvdW5jZTpmdW5jdGlvbih0LGUsbil7dGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fSx0aGlzLl9kZWJvdW5jZXJzW3RdPVRuLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcnNbdF0sbixlLmJpbmQodGhpcykpLEFuKHRoaXMuX2RlYm91bmNlcnNbdF0pfSxfZm9yd2FyZFByb3BlcnR5OmZ1bmN0aW9uKHQsZSxuKXt0Ll9zZXRQZW5kaW5nUHJvcGVydHkoZSxuKX0sX2ZvcndhcmRIb3N0UHJvcFYyOmZ1bmN0aW9uKHQsZSl7KHRoaXMuX3BoeXNpY2FsSXRlbXN8fFtdKS5jb25jYXQoW3RoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtXSkuZm9yRWFjaCgoZnVuY3Rpb24obil7biYmdGhpcy5tb2RlbEZvckVsZW1lbnQobikuZm9yd2FyZEhvc3RQcm9wKHQsZSl9KSx0aGlzKX0sX25vdGlmeUluc3RhbmNlUHJvcFYyOmZ1bmN0aW9uKHQsZSxuKXtpZihRKHRoaXMuYXMsZSkpe3ZhciBpPXRbdGhpcy5pbmRleEFzXTtlPT10aGlzLmFzJiYodGhpcy5pdGVtc1tpXT1uKSx0aGlzLm5vdGlmeVBhdGgoSih0aGlzLmFzLCJpdGVtcy4iK2ksZSksbil9fSxfZ2V0U3RhbXBlZENoaWxkcmVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsSXRlbXN9LF9mb3J3YXJkSW5zdGFuY2VQYXRoOmZ1bmN0aW9uKHQsZSxuKXswPT09ZS5pbmRleE9mKHRoaXMuYXMrIi4iKSYmdGhpcy5ub3RpZnlQYXRoKCJpdGVtcy4iK3QuX19rZXlfXysiLiIrZS5zbGljZSh0aGlzLmFzLmxlbmd0aCsxKSxuKX0sX2ZvcndhcmRQYXJlbnRQYXRoOmZ1bmN0aW9uKHQsZSl7KHRoaXMuX3BoeXNpY2FsSXRlbXN8fFtdKS5jb25jYXQoW3RoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtXSkuZm9yRWFjaCgoZnVuY3Rpb24obil7biYmdGhpcy5tb2RlbEZvckVsZW1lbnQobikubm90aWZ5UGF0aCh0LGUpfSksdGhpcyl9LF9mb3J3YXJkUGFyZW50UHJvcDpmdW5jdGlvbih0LGUpeyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goKGZ1bmN0aW9uKG4pe24mJih0aGlzLm1vZGVsRm9yRWxlbWVudChuKVt0XT1lKX0pLHRoaXMpfSxfZ2V0QWN0aXZlRWxlbWVudDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2l0ZW1zUGFyZW50Lm5vZGUuZG9tSG9zdDtyZXR1cm4gWWkodD90LnJvb3Q6ZG9jdW1lbnQpLmFjdGl2ZUVsZW1lbnR9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjbGFzcyBVb3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnNlbGVjdGlvbj1bXSx0aGlzLnNlbGVjdENhbGxiYWNrPXR9Z2V0KCl7cmV0dXJuIHRoaXMubXVsdGk/dGhpcy5zZWxlY3Rpb24uc2xpY2UoKTp0aGlzLnNlbGVjdGlvblswXX1jbGVhcih0KXt0aGlzLnNlbGVjdGlvbi5zbGljZSgpLmZvckVhY2goKGZ1bmN0aW9uKGUpeyghdHx8dC5pbmRleE9mKGUpPDApJiZ0aGlzLnNldEl0ZW1TZWxlY3RlZChlLCExKX0pLHRoaXMpfWlzU2VsZWN0ZWQodCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmluZGV4T2YodCk+PTB9c2V0SXRlbVNlbGVjdGVkKHQsZSl7aWYobnVsbCE9dCYmZSE9PXRoaXMuaXNTZWxlY3RlZCh0KSl7aWYoZSl0aGlzLnNlbGVjdGlvbi5wdXNoKHQpO2Vsc2V7dmFyIG49dGhpcy5zZWxlY3Rpb24uaW5kZXhPZih0KTtuPj0wJiZ0aGlzLnNlbGVjdGlvbi5zcGxpY2UobiwxKX10aGlzLnNlbGVjdENhbGxiYWNrJiZ0aGlzLnNlbGVjdENhbGxiYWNrKHQsZSl9fXNlbGVjdCh0KXt0aGlzLm11bHRpP3RoaXMudG9nZ2xlKHQpOnRoaXMuZ2V0KCkhPT10JiYodGhpcy5zZXRJdGVtU2VsZWN0ZWQodGhpcy5nZXQoKSwhMSksdGhpcy5zZXRJdGVtU2VsZWN0ZWQodCwhMCkpfXRvZ2dsZSh0KXt0aGlzLnNldEl0ZW1TZWxlY3RlZCh0LCF0aGlzLmlzU2VsZWN0ZWQodCkpfX0KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovY29uc3Qgam89e3Byb3BlcnRpZXM6e2F0dHJGb3JTZWxlY3RlZDp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sc2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9LGFjdGl2YXRlRXZlbnQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJ0YXAiLG9ic2VydmVyOiJfYWN0aXZhdGVFdmVudENoYW5nZWQifSxzZWxlY3RhYmxlOlN0cmluZyxzZWxlY3RlZENsYXNzOnt0eXBlOlN0cmluZyx2YWx1ZToiaXJvbi1zZWxlY3RlZCJ9LHNlbGVjdGVkQXR0cmlidXRlOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxmYWxsYmFja1NlbGVjdGlvbjp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0saXRlbXM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsbm90aWZ5OiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfZXhjbHVkZWRMb2NhbE5hbWVzOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt0ZW1wbGF0ZToxLCJkb20tYmluZCI6MSwiZG9tLWlmIjoxLCJkb20tcmVwZWF0IjoxfX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlQXR0ckZvclNlbGVjdGVkKGF0dHJGb3JTZWxlY3RlZCkiLCJfdXBkYXRlU2VsZWN0ZWQoc2VsZWN0ZWQpIiwiX2NoZWNrRmFsbGJhY2soZmFsbGJhY2tTZWxlY3Rpb24pIl0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2JpbmRGaWx0ZXJJdGVtPXRoaXMuX2ZpbHRlckl0ZW0uYmluZCh0aGlzKSx0aGlzLl9zZWxlY3Rpb249bmV3IFVvKHRoaXMuX2FwcGx5U2VsZWN0aW9uLmJpbmQodGhpcykpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyPXRoaXMuX29ic2VydmVJdGVtcyh0aGlzKSx0aGlzLl9hZGRMaXN0ZW5lcih0aGlzLmFjdGl2YXRlRXZlbnQpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiZZaSh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fcmVtb3ZlTGlzdGVuZXIodGhpcy5hY3RpdmF0ZUV2ZW50KX0saW5kZXhPZjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pdGVtcz90aGlzLml0ZW1zLmluZGV4T2YodCk6LTF9LHNlbGVjdDpmdW5jdGlvbih0KXt0aGlzLnNlbGVjdGVkPXR9LHNlbGVjdFByZXZpb3VzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5pdGVtcy5sZW5ndGgsZT10LTE7dm9pZCAwIT09dGhpcy5zZWxlY3RlZCYmKGU9KE51bWJlcih0aGlzLl92YWx1ZVRvSW5kZXgodGhpcy5zZWxlY3RlZCkpLTErdCkldCksdGhpcy5zZWxlY3RlZD10aGlzLl9pbmRleFRvVmFsdWUoZSl9LHNlbGVjdE5leHQ6ZnVuY3Rpb24oKXt2YXIgdD0wO3ZvaWQgMCE9PXRoaXMuc2VsZWN0ZWQmJih0PShOdW1iZXIodGhpcy5fdmFsdWVUb0luZGV4KHRoaXMuc2VsZWN0ZWQpKSsxKSV0aGlzLml0ZW1zLmxlbmd0aCksdGhpcy5zZWxlY3RlZD10aGlzLl9pbmRleFRvVmFsdWUodCl9LHNlbGVjdEluZGV4OmZ1bmN0aW9uKHQpe3RoaXMuc2VsZWN0KHRoaXMuX2luZGV4VG9WYWx1ZSh0KSl9LGZvcmNlU3luY2hyb25vdXNJdGVtVXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9vYnNlcnZlci5mbHVzaD90aGlzLl9vYnNlcnZlci5mbHVzaCgpOnRoaXMuX3VwZGF0ZUl0ZW1zKCl9LGdldCBfc2hvdWxkVXBkYXRlU2VsZWN0aW9uKCl7cmV0dXJuIG51bGwhPXRoaXMuc2VsZWN0ZWR9LF9jaGVja0ZhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlU2VsZWN0ZWQoKX0sX2FkZExpc3RlbmVyOmZ1bmN0aW9uKHQpe3RoaXMubGlzdGVuKHRoaXMsdCwiX2FjdGl2YXRlSGFuZGxlciIpfSxfcmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24odCl7dGhpcy51bmxpc3Rlbih0aGlzLHQsIl9hY3RpdmF0ZUhhbmRsZXIiKX0sX2FjdGl2YXRlRXZlbnRDaGFuZ2VkOmZ1bmN0aW9uKHQsZSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXIoZSksdGhpcy5fYWRkTGlzdGVuZXIodCl9LF91cGRhdGVJdGVtczpmdW5jdGlvbigpe3ZhciB0PVlpKHRoaXMpLnF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyh0aGlzLnNlbGVjdGFibGV8fCIqIik7dD1BcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwodCx0aGlzLl9iaW5kRmlsdGVySXRlbSksdGhpcy5fc2V0SXRlbXModCl9LF91cGRhdGVBdHRyRm9yU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkSXRlbSYmKHRoaXMuc2VsZWN0ZWQ9dGhpcy5fdmFsdWVGb3JJdGVtKHRoaXMuc2VsZWN0ZWRJdGVtKSl9LF91cGRhdGVTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMuX3NlbGVjdFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQpfSxfc2VsZWN0U2VsZWN0ZWQ6ZnVuY3Rpb24odCl7aWYodGhpcy5pdGVtcyl7dmFyIGU9dGhpcy5fdmFsdWVUb0l0ZW0odGhpcy5zZWxlY3RlZCk7ZT90aGlzLl9zZWxlY3Rpb24uc2VsZWN0KGUpOnRoaXMuX3NlbGVjdGlvbi5jbGVhcigpLHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24mJnRoaXMuaXRlbXMubGVuZ3RoJiZ2b2lkIDA9PT10aGlzLl9zZWxlY3Rpb24uZ2V0KCkmJih0aGlzLnNlbGVjdGVkPXRoaXMuZmFsbGJhY2tTZWxlY3Rpb24pfX0sX2ZpbHRlckl0ZW06ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMuX2V4Y2x1ZGVkTG9jYWxOYW1lc1t0LmxvY2FsTmFtZV19LF92YWx1ZVRvSXRlbTpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9udWxsOnRoaXMuaXRlbXNbdGhpcy5fdmFsdWVUb0luZGV4KHQpXX0sX3ZhbHVlVG9JbmRleDpmdW5jdGlvbih0KXtpZighdGhpcy5hdHRyRm9yU2VsZWN0ZWQpcmV0dXJuIE51bWJlcih0KTtmb3IodmFyIGUsbj0wO2U9dGhpcy5pdGVtc1tuXTtuKyspaWYodGhpcy5fdmFsdWVGb3JJdGVtKGUpPT10KXJldHVybiBufSxfaW5kZXhUb1ZhbHVlOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLmF0dHJGb3JTZWxlY3RlZClyZXR1cm4gdDt2YXIgZT10aGlzLml0ZW1zW3RdO3JldHVybiBlP3RoaXMuX3ZhbHVlRm9ySXRlbShlKTp2b2lkIDB9LF92YWx1ZUZvckl0ZW06ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYoIXRoaXMuYXR0ckZvclNlbGVjdGVkKXt2YXIgZT10aGlzLmluZGV4T2YodCk7cmV0dXJuLTE9PT1lP251bGw6ZX12YXIgbj10W3N0KHRoaXMuYXR0ckZvclNlbGVjdGVkKV07cmV0dXJuIG51bGwhPW4/bjp0LmdldEF0dHJpYnV0ZSh0aGlzLmF0dHJGb3JTZWxlY3RlZCl9LF9hcHBseVNlbGVjdGlvbjpmdW5jdGlvbih0LGUpe3RoaXMuc2VsZWN0ZWRDbGFzcyYmdGhpcy50b2dnbGVDbGFzcyh0aGlzLnNlbGVjdGVkQ2xhc3MsZSx0KSx0aGlzLnNlbGVjdGVkQXR0cmlidXRlJiZ0aGlzLnRvZ2dsZUF0dHJpYnV0ZSh0aGlzLnNlbGVjdGVkQXR0cmlidXRlLGUsdCksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlKCksdGhpcy5maXJlKCJpcm9uLSIrKGU/InNlbGVjdCI6ImRlc2VsZWN0Iikse2l0ZW06dH0pfSxfc2VsZWN0aW9uQ2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKHRoaXMuX3NlbGVjdGlvbi5nZXQoKSl9LF9vYnNlcnZlSXRlbXM6ZnVuY3Rpb24odCl7cmV0dXJuIFlpKHQpLm9ic2VydmVOb2RlcygoZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlSXRlbXMoKSx0aGlzLl91cGRhdGVTZWxlY3RlZCgpLHRoaXMuZmlyZSgiaXJvbi1pdGVtcy1jaGFuZ2VkIix0LHtidWJibGVzOiExLGNhbmNlbGFibGU6ITF9KX0pKX0sX2FjdGl2YXRlSGFuZGxlcjpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC50YXJnZXQsbj10aGlzLml0ZW1zO2UmJmUhPXRoaXM7KXt2YXIgaT1uLmluZGV4T2YoZSk7aWYoaT49MCl7dmFyIHI9dGhpcy5faW5kZXhUb1ZhbHVlKGkpO3JldHVybiB2b2lkIHRoaXMuX2l0ZW1BY3RpdmF0ZShyLGUpfWU9ZS5wYXJlbnROb2RlfX0sX2l0ZW1BY3RpdmF0ZTpmdW5jdGlvbih0LGUpe3RoaXMuZmlyZSgiaXJvbi1hY3RpdmF0ZSIse3NlbGVjdGVkOnQsaXRlbTplfSx7Y2FuY2VsYWJsZTohMH0pLmRlZmF1bHRQcmV2ZW50ZWR8fHRoaXMuc2VsZWN0KHQpfX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL1JyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoOm5vdChzbG90KTpub3QoLmlyb24tc2VsZWN0ZWQpKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoiaXJvbi1wYWdlcyIsYmVoYXZpb3JzOltnbyxqb10scHJvcGVydGllczp7YWN0aXZhdGVFdmVudDp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH19LG9ic2VydmVyczpbIl9zZWxlY3RlZFBhZ2VDaGFuZ2VkKHNlbGVjdGVkKSJdLF9zZWxlY3RlZFBhZ2VDaGFuZ2VkOmZ1bmN0aW9uKHQsZSl7dGhpcy5hc3luYyh0aGlzLm5vdGlmeVJlc2l6ZSl9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBHbz1fZWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC0tc2hhZG93LXRyYW5zaXRpb246IHsKICAgICAgICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuMjhzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1ub25lOiB7CiAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKICAgICAgfTsKCiAgICAgIC8qIGZyb20gaHR0cDovL2NvZGVwZW4uaW8vc2h5bmRtYW4vcGVuL2M1Mzk0ZGRmMmU4YjJhNWM5MTg1OTA0YjU3NDIxY2RiICovCgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAycHggMnB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0zZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDNweCA0cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDhweCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksCiAgICAgICAgICAgICAgICAgICAgMCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTRkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAxcHggMTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksCiAgICAgICAgICAgICAgICAgICAgMCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgNnB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDE4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi04ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMiksCiAgICAgICAgICAgICAgICAgICAgMCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTEyZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDEycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDRweCAyMnB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgNnB4IDdweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAgNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMiksCiAgICAgICAgICAgICAgICAgICAgMCAgOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMjRkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMiksCiAgICAgICAgICAgICAgICAgICAgMCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtHby5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKEdvLmNvbnRlbnQpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgV289X2VgCjxkb20tbW9kdWxlIGlkPSJwYXBlci1tYXRlcmlhbC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgaHRtbCB7CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbDogewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi02ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLThkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgICB9OwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWw7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMSJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMTsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIyIl0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjMiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTM7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNCJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNDsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSI1Il0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgICB9CgogICAgICAvKiBEdXBsaWNhdGUgdGhlIHN0eWxlcyBiZWNhdXNlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJjb21wb25lbnRzL3NoYWR5Y3NzL2lzc3Vlcy8xOTMgKi8KICAgICAgOmhvc3QgewogICAgICAgIC0tcGFwZXItbWF0ZXJpYWw6IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMTogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTRkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTM6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNmRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNDogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi04ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTE2ZHA7CiAgICAgICAgfTsKICAgICAgfQogICAgICA6aG9zdCgucGFwZXItbWF0ZXJpYWwpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbDsKICAgICAgfQogICAgICA6aG9zdCgucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIxIl0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMTsKICAgICAgfQogICAgICA6aG9zdCgucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIyIl0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMjsKICAgICAgfQogICAgICA6aG9zdCgucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIzIl0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgICAgfQogICAgICA6aG9zdCgucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSI0Il0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNDsKICAgICAgfQogICAgICA6aG9zdCgucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSI1Il0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+YDtXby5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFdvLmNvbnRlbnQpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgcW89e3Byb3BlcnRpZXM6e2ZvY3VzZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfb2xkVGFiSW5kZXg6e3R5cGU6U3RyaW5nfSxfYm91bmRGb2N1c0JsdXJIYW5kbGVyOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQmx1ckhhbmRsZXIuYmluZCh0aGlzKX19fSxvYnNlcnZlcnM6WyJfY2hhbmdlZENvbnRyb2xTdGF0ZShmb2N1c2VkLCBkaXNhYmxlZCkiXSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2JvdW5kRm9jdXNCbHVySGFuZGxlciwhMCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9ib3VuZEZvY3VzQmx1ckhhbmRsZXIsITApfSxfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbih0KXt0aGlzLl9zZXRGb2N1c2VkKCJmb2N1cyI9PT10LnR5cGUpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKHQsZSl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLHQ/InRydWUiOiJmYWxzZSIpLHRoaXMuc3R5bGUucG9pbnRlckV2ZW50cz10PyJub25lIjoiIix0Pyh0aGlzLl9vbGRUYWJJbmRleD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSx0aGlzLl9zZXRGb2N1c2VkKCExKSx0aGlzLnRhYkluZGV4PS0xLHRoaXMuYmx1cigpKTp2b2lkIDAhPT10aGlzLl9vbGRUYWJJbmRleCYmKG51bGw9PT10aGlzLl9vbGRUYWJJbmRleD90aGlzLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKTp0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX29sZFRhYkluZGV4KSl9LF9jaGFuZ2VkQ29udHJvbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCYmdGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCgpfX0sWW89e3Byb3BlcnRpZXM6e3ByZXNzZWQ6e3R5cGU6Qm9vbGVhbixyZWFkT25seTohMCx2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9wcmVzc2VkQ2hhbmdlZCJ9LHRvZ2dsZXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGFjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHBvaW50ZXJEb3duOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAsdmFsdWU6ITF9LHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQ6e3R5cGU6Qm9vbGVhbixyZWFkT25seTohMH0sYXJpYUFjdGl2ZUF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImFyaWEtcHJlc3NlZCIsb2JzZXJ2ZXI6Il9hcmlhQWN0aXZlQXR0cmlidXRlQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6e2Rvd246Il9kb3duSGFuZGxlciIsdXA6Il91cEhhbmRsZXIiLHRhcDoiX3RhcEhhbmRsZXIifSxvYnNlcnZlcnM6WyJfZm9jdXNDaGFuZ2VkKGZvY3VzZWQpIiwiX2FjdGl2ZUNoYW5nZWQoYWN0aXZlLCBhcmlhQWN0aXZlQXR0cmlidXRlKSJdLGtleUJpbmRpbmdzOnsiZW50ZXI6a2V5ZG93biI6Il9hc3luY0NsaWNrIiwic3BhY2U6a2V5ZG93biI6Il9zcGFjZUtleURvd25IYW5kbGVyIiwic3BhY2U6a2V5dXAiOiJfc3BhY2VLZXlVcEhhbmRsZXIifSxfbW91c2VFdmVudFJlOi9ebW91c2UvLF90YXBIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy50b2dnbGVzP3RoaXMuX3VzZXJBY3RpdmF0ZSghdGhpcy5hY3RpdmUpOnRoaXMuYWN0aXZlPSExfSxfZm9jdXNDaGFuZ2VkOmZ1bmN0aW9uKHQpe3RoaXMuX2RldGVjdEtleWJvYXJkRm9jdXModCksdHx8dGhpcy5fc2V0UHJlc3NlZCghMSl9LF9kZXRlY3RLZXlib2FyZEZvY3VzOmZ1bmN0aW9uKHQpe3RoaXMuX3NldFJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQoIXRoaXMucG9pbnRlckRvd24mJnQpfSxfdXNlckFjdGl2YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYWN0aXZlIT09dCYmKHRoaXMuYWN0aXZlPXQsdGhpcy5maXJlKCJjaGFuZ2UiKSl9LF9kb3duSGFuZGxlcjpmdW5jdGlvbih0KXt0aGlzLl9zZXRQb2ludGVyRG93bighMCksdGhpcy5fc2V0UHJlc3NlZCghMCksdGhpcy5fc2V0UmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCghMSl9LF91cEhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9zZXRQb2ludGVyRG93bighMSksdGhpcy5fc2V0UHJlc3NlZCghMSl9LF9zcGFjZUtleURvd25IYW5kbGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZGV0YWlsLmtleWJvYXJkRXZlbnQsbj1ZaShlKS5sb2NhbFRhcmdldDt0aGlzLmlzTGlnaHREZXNjZW5kYW50KG4pfHwoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5fc2V0UHJlc3NlZCghMCkpfSxfc3BhY2VLZXlVcEhhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGU9WWkodC5kZXRhaWwua2V5Ym9hcmRFdmVudCkubG9jYWxUYXJnZXQ7dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChlKXx8KHRoaXMucHJlc3NlZCYmdGhpcy5fYXN5bmNDbGljaygpLHRoaXMuX3NldFByZXNzZWQoITEpKX0sX2FzeW5jQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLmFzeW5jKChmdW5jdGlvbigpe3RoaXMuY2xpY2soKX0pLDEpfSxfcHJlc3NlZENoYW5nZWQ6ZnVuY3Rpb24odCl7dGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9hcmlhQWN0aXZlQXR0cmlidXRlQ2hhbmdlZDpmdW5jdGlvbih0LGUpe2UmJmUhPXQmJnRoaXMuaGFzQXR0cmlidXRlKGUpJiZ0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX0sX2FjdGl2ZUNoYW5nZWQ6ZnVuY3Rpb24odCxlKXt0aGlzLnRvZ2dsZXM/dGhpcy5zZXRBdHRyaWJ1dGUodGhpcy5hcmlhQWN0aXZlQXR0cmlidXRlLHQ/InRydWUiOiJmYWxzZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKHRoaXMuYXJpYUFjdGl2ZUF0dHJpYnV0ZSksdGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9jb250cm9sU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD90aGlzLl9zZXRQcmVzc2VkKCExKTp0aGlzLl9jaGFuZ2VkQnV0dG9uU3RhdGUoKX0sX2NoYW5nZWRCdXR0b25TdGF0ZTpmdW5jdGlvbigpe3RoaXMuX2J1dHRvblN0YXRlQ2hhbmdlZCYmdGhpcy5fYnV0dG9uU3RhdGVDaGFuZ2VkKCl9fSxYbz1bem8sWW9dOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCnZhciAkbz17ZGlzdGFuY2U6ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dC1uLG89ZS1pO3JldHVybiBNYXRoLnNxcnQocipyK28qbyl9LG5vdzp3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5ub3c/d2luZG93LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHdpbmRvdy5wZXJmb3JtYW5jZSk6RGF0ZS5ub3d9O2Z1bmN0aW9uIEtvKHQpe3RoaXMuZWxlbWVudD10LHRoaXMud2lkdGg9dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgsdGhpcy5oZWlnaHQ9dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LHRoaXMuc2l6ZT1NYXRoLm1heCh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX1mdW5jdGlvbiBabyh0KXt0aGlzLmVsZW1lbnQ9dCx0aGlzLmNvbG9yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLmNvbG9yLHRoaXMud2F2ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLndhdmVDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy53YXZlLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLmNvbG9yLHRoaXMud2F2ZS5jbGFzc0xpc3QuYWRkKCJ3YXZlIiksdGhpcy53YXZlQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIndhdmUtY29udGFpbmVyIiksWWkodGhpcy53YXZlQ29udGFpbmVyKS5hcHBlbmRDaGlsZCh0aGlzLndhdmUpLHRoaXMucmVzZXRJbnRlcmFjdGlvblN0YXRlKCl9S28ucHJvdG90eXBlPXtnZXQgYm91bmRpbmdSZWN0KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX0sZnVydGhlc3RDb3JuZXJEaXN0YW5jZUZyb206ZnVuY3Rpb24odCxlKXt2YXIgbj0kby5kaXN0YW5jZSh0LGUsMCwwKSxpPSRvLmRpc3RhbmNlKHQsZSx0aGlzLndpZHRoLDApLHI9JG8uZGlzdGFuY2UodCxlLDAsdGhpcy5oZWlnaHQpLG89JG8uZGlzdGFuY2UodCxlLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpO3JldHVybiBNYXRoLm1heChuLGkscixvKX19LFpvLk1BWF9SQURJVVM9MzAwLFpvLnByb3RvdHlwZT17Z2V0IHJlY2VudGVycygpe3JldHVybiB0aGlzLmVsZW1lbnQucmVjZW50ZXJzfSxnZXQgY2VudGVyKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5jZW50ZXJ9LGdldCBtb3VzZURvd25FbGFwc2VkKCl7dmFyIHQ7cmV0dXJuIHRoaXMubW91c2VEb3duU3RhcnQ/KHQ9JG8ubm93KCktdGhpcy5tb3VzZURvd25TdGFydCx0aGlzLm1vdXNlVXBTdGFydCYmKHQtPXRoaXMubW91c2VVcEVsYXBzZWQpLHQpOjB9LGdldCBtb3VzZVVwRWxhcHNlZCgpe3JldHVybiB0aGlzLm1vdXNlVXBTdGFydD8kby5ub3coKS10aGlzLm1vdXNlVXBTdGFydDowfSxnZXQgbW91c2VEb3duRWxhcHNlZFNlY29uZHMoKXtyZXR1cm4gdGhpcy5tb3VzZURvd25FbGFwc2VkLzFlM30sZ2V0IG1vdXNlVXBFbGFwc2VkU2Vjb25kcygpe3JldHVybiB0aGlzLm1vdXNlVXBFbGFwc2VkLzFlM30sZ2V0IG1vdXNlSW50ZXJhY3Rpb25TZWNvbmRzKCl7cmV0dXJuIHRoaXMubW91c2VEb3duRWxhcHNlZFNlY29uZHMrdGhpcy5tb3VzZVVwRWxhcHNlZFNlY29uZHN9LGdldCBpbml0aWFsT3BhY2l0eSgpe3JldHVybiB0aGlzLmVsZW1lbnQuaW5pdGlhbE9wYWNpdHl9LGdldCBvcGFjaXR5RGVjYXlWZWxvY2l0eSgpe3JldHVybiB0aGlzLmVsZW1lbnQub3BhY2l0eURlY2F5VmVsb2NpdHl9LGdldCByYWRpdXMoKXt2YXIgdD0xLjEqTWF0aC5taW4oTWF0aC5zcXJ0KHRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aCp0aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgrdGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodCp0aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0KSxaby5NQVhfUkFESVVTKSs1LGU9dCooMS1NYXRoLnBvdyg4MCwtdGhpcy5tb3VzZUludGVyYWN0aW9uU2Vjb25kcy8oMS4xLXQvWm8uTUFYX1JBRElVUyouMikpKTtyZXR1cm4gTWF0aC5hYnMoZSl9LGdldCBvcGFjaXR5KCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P01hdGgubWF4KDAsdGhpcy5pbml0aWFsT3BhY2l0eS10aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kcyp0aGlzLm9wYWNpdHlEZWNheVZlbG9jaXR5KTp0aGlzLmluaXRpYWxPcGFjaXR5fSxnZXQgb3V0ZXJPcGFjaXR5KCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oLjMqdGhpcy5tb3VzZVVwRWxhcHNlZFNlY29uZHMsdGhpcy5vcGFjaXR5KSl9LGdldCBpc09wYWNpdHlGdWxseURlY2F5ZWQoKXtyZXR1cm4gdGhpcy5vcGFjaXR5PC4wMSYmdGhpcy5yYWRpdXM+PU1hdGgubWluKHRoaXMubWF4UmFkaXVzLFpvLk1BWF9SQURJVVMpfSxnZXQgaXNSZXN0aW5nQXRNYXhSYWRpdXMoKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj10aGlzLmluaXRpYWxPcGFjaXR5JiZ0aGlzLnJhZGl1cz49TWF0aC5taW4odGhpcy5tYXhSYWRpdXMsWm8uTUFYX1JBRElVUyl9LGdldCBpc0FuaW1hdGlvbkNvbXBsZXRlKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P3RoaXMuaXNPcGFjaXR5RnVsbHlEZWNheWVkOnRoaXMuaXNSZXN0aW5nQXRNYXhSYWRpdXN9LGdldCB0cmFuc2xhdGlvbkZyYWN0aW9uKCl7cmV0dXJuIE1hdGgubWluKDEsdGhpcy5yYWRpdXMvdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUqMi9NYXRoLnNxcnQoMikpfSxnZXQgeE5vdygpe3JldHVybiB0aGlzLnhFbmQ/dGhpcy54U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnhFbmQtdGhpcy54U3RhcnQpOnRoaXMueFN0YXJ0fSxnZXQgeU5vdygpe3JldHVybiB0aGlzLnlFbmQ/dGhpcy55U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnlFbmQtdGhpcy55U3RhcnQpOnRoaXMueVN0YXJ0fSxnZXQgaXNNb3VzZURvd24oKXtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydCYmIXRoaXMubW91c2VVcFN0YXJ0fSxyZXNldEludGVyYWN0aW9uU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLm1heFJhZGl1cz0wLHRoaXMubW91c2VEb3duU3RhcnQ9MCx0aGlzLm1vdXNlVXBTdGFydD0wLHRoaXMueFN0YXJ0PTAsdGhpcy55U3RhcnQ9MCx0aGlzLnhFbmQ9MCx0aGlzLnlFbmQ9MCx0aGlzLnNsaWRlRGlzdGFuY2U9MCx0aGlzLmNvbnRhaW5lck1ldHJpY3M9bmV3IEtvKHRoaXMuZWxlbWVudCl9LGRyYXc6ZnVuY3Rpb24oKXt2YXIgdCxlLG47dGhpcy53YXZlLnN0eWxlLm9wYWNpdHk9dGhpcy5vcGFjaXR5LHQ9dGhpcy5yYWRpdXMvKHRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplLzIpLHRoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS53ZWJraXRUcmFuc2Zvcm09InRyYW5zbGF0ZSgiKyhlPXRoaXMueE5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMikrInB4LCAiKyhuPXRoaXMueU5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIpKyJweCkiLHRoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZTNkKCIrZSsicHgsICIrbisicHgsIDApIix0aGlzLndhdmUuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJzY2FsZSgiK3QrIiwiK3QrIikiLHRoaXMud2F2ZS5zdHlsZS50cmFuc2Zvcm09InNjYWxlM2QoIit0KyIsIit0KyIsMSkifSxkb3duQWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLG49dGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodC8yO3RoaXMucmVzZXRJbnRlcmFjdGlvblN0YXRlKCksdGhpcy5tb3VzZURvd25TdGFydD0kby5ub3coKSx0aGlzLmNlbnRlcj8odGhpcy54U3RhcnQ9ZSx0aGlzLnlTdGFydD1uLHRoaXMuc2xpZGVEaXN0YW5jZT0kby5kaXN0YW5jZSh0aGlzLnhTdGFydCx0aGlzLnlTdGFydCx0aGlzLnhFbmQsdGhpcy55RW5kKSk6KHRoaXMueFN0YXJ0PXQ/dC5kZXRhaWwueC10aGlzLmNvbnRhaW5lck1ldHJpY3MuYm91bmRpbmdSZWN0LmxlZnQ6dGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLzIsdGhpcy55U3RhcnQ9dD90LmRldGFpbC55LXRoaXMuY29udGFpbmVyTWV0cmljcy5ib3VuZGluZ1JlY3QudG9wOnRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMiksdGhpcy5yZWNlbnRlcnMmJih0aGlzLnhFbmQ9ZSx0aGlzLnlFbmQ9bix0aGlzLnNsaWRlRGlzdGFuY2U9JG8uZGlzdGFuY2UodGhpcy54U3RhcnQsdGhpcy55U3RhcnQsdGhpcy54RW5kLHRoaXMueUVuZCkpLHRoaXMubWF4UmFkaXVzPXRoaXMuY29udGFpbmVyTWV0cmljcy5mdXJ0aGVzdENvcm5lckRpc3RhbmNlRnJvbSh0aGlzLnhTdGFydCx0aGlzLnlTdGFydCksdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLnRvcD0odGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodC10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSkvMisicHgiLHRoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS5sZWZ0PSh0aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgtdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUpLzIrInB4Iix0aGlzLndhdmVDb250YWluZXIuc3R5bGUud2lkdGg9dGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUrInB4Iix0aGlzLndhdmVDb250YWluZXIuc3R5bGUuaGVpZ2h0PXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKyJweCJ9LHVwQWN0aW9uOmZ1bmN0aW9uKHQpe3RoaXMuaXNNb3VzZURvd24mJih0aGlzLm1vdXNlVXBTdGFydD0kby5ub3coKSl9LHJlbW92ZTpmdW5jdGlvbigpe1lpKFlpKHRoaXMud2F2ZUNvbnRhaW5lcikucGFyZW50Tm9kZSkucmVtb3ZlQ2hpbGQodGhpcy53YXZlQ29udGFpbmVyKX19LFJyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKCiAgICAgICAgLyogU2VlIFBvbHltZXJFbGVtZW50cy9wYXBlci1iZWhhdmlvcnMvaXNzdWVzLzM0LiBPbiBub24tQ2hyb21lIGJyb3dzZXJzLAogICAgICAgICAqIGNyZWF0aW5nIGEgbm9kZSAod2l0aCBhIHBvc2l0aW9uOmFic29sdXRlKSBpbiB0aGUgbWlkZGxlIG9mIGFuIGV2ZW50CiAgICAgICAgICogaGFuZGxlciAiaW50ZXJydXB0cyIgdGhhdCBldmVudCBoYW5kbGVyICh3aGljaCBoYXBwZW5zIHdoZW4gdGhlCiAgICAgICAgICogcmlwcGxlIGlzIGNyZWF0ZWQgb24gZGVtYW5kKSAqLwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbYW5pbWF0aW5nXSkgewogICAgICAgIC8qIFRoaXMgcmVzb2x2ZXMgYSByZW5kZXJpbmcgaXNzdWUgaW4gQ2hyb21lIChhcyBvZiA0MCkgd2hlcmUgdGhlCiAgICAgICAgICAgcmlwcGxlIGlzIG5vdCBwcm9wZXJseSBjbGlwcGVkIGJ5IGl0cyBwYXJlbnQgKHdoaWNoIG1heSBoYXZlCiAgICAgICAgICAgcm91bmRlZCBjb3JuZXJzKS4gU2VlOiBodHRwOi8vanNiaW4uY29tL3RlbWV4YS80CgogICAgICAgICAgIE5vdGU6IFdlIG9ubHkgYXBwbHkgdGhpcyBzdHlsZSBjb25kaXRpb25hbGx5LiBPdGhlcndpc2UsIHRoZSBicm93c2VyCiAgICAgICAgICAgd2lsbCBjcmVhdGUgYSBuZXcgY29tcG9zaXRpbmcgbGF5ZXIgZm9yIGV2ZXJ5IHJpcHBsZSBlbGVtZW50IG9uIHRoZQogICAgICAgICAgIHBhZ2UsIGFuZCB0aGF0IHdvdWxkIGJlIGJhZC4gKi8KICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7CiAgICAgIH0KCiAgICAgICNiYWNrZ3JvdW5kLAogICAgICAjd2F2ZXMsCiAgICAgIC53YXZlLWNvbnRhaW5lciwKICAgICAgLndhdmUgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgICNiYWNrZ3JvdW5kLAogICAgICAud2F2ZSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgI3dhdmVzLAogICAgICAud2F2ZSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLndhdmUtY29udGFpbmVyLAogICAgICAud2F2ZSB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICA6aG9zdCguY2lyY2xlKSAjYmFja2dyb3VuZCwKICAgICAgOmhvc3QoLmNpcmNsZSkgI3dhdmVzIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5jaXJjbGUpIC53YXZlLWNvbnRhaW5lciB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJiYWNrZ3JvdW5kIj48L2Rpdj4KICAgIDxkaXYgaWQ9IndhdmVzIj48L2Rpdj4KYCxpczoicGFwZXItcmlwcGxlIixiZWhhdmlvcnM6W3pvXSxwcm9wZXJ0aWVzOntpbml0aWFsT3BhY2l0eTp7dHlwZTpOdW1iZXIsdmFsdWU6LjI1fSxvcGFjaXR5RGVjYXlWZWxvY2l0eTp7dHlwZTpOdW1iZXIsdmFsdWU6Ljh9LHJlY2VudGVyczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxjZW50ZXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scmlwcGxlczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sYW5pbWF0aW5nOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfSxob2xkRG93bjp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfaG9sZERvd25DaGFuZ2VkIn0sbm9pbms6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2FuaW1hdGluZzp7dHlwZTpCb29sZWFufSxfYm91bmRBbmltYXRlOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYW5pbWF0ZS5iaW5kKHRoaXMpfX19LGdldCB0YXJnZXQoKXtyZXR1cm4gdGhpcy5rZXlFdmVudFRhcmdldH0sa2V5QmluZGluZ3M6eyJlbnRlcjprZXlkb3duIjoiX29uRW50ZXJLZXlkb3duIiwic3BhY2U6a2V5ZG93biI6Il9vblNwYWNlS2V5ZG93biIsInNwYWNlOmtleXVwIjoiX29uU3BhY2VLZXl1cCJ9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5rZXlFdmVudFRhcmdldD0xMT09WWkodGhpcykucGFyZW50Tm9kZS5ub2RlVHlwZT9ZaSh0aGlzKS5nZXRPd25lclJvb3QoKS5ob3N0OllpKHRoaXMpLnBhcmVudE5vZGU7dmFyIHQ9dGhpcy5rZXlFdmVudFRhcmdldDt0aGlzLmxpc3Rlbih0LCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLmxpc3Rlbih0LCJkb3duIiwidWlEb3duQWN0aW9uIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLmtleUV2ZW50VGFyZ2V0LCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLnVubGlzdGVuKHRoaXMua2V5RXZlbnRUYXJnZXQsImRvd24iLCJ1aURvd25BY3Rpb24iKSx0aGlzLmtleUV2ZW50VGFyZ2V0PW51bGx9LGdldCBzaG91bGRLZWVwQW5pbWF0aW5nKCl7Zm9yKHZhciB0PTA7dDx0aGlzLnJpcHBsZXMubGVuZ3RoOysrdClpZighdGhpcy5yaXBwbGVzW3RdLmlzQW5pbWF0aW9uQ29tcGxldGUpcmV0dXJuITA7cmV0dXJuITF9LHNpbXVsYXRlZFJpcHBsZTpmdW5jdGlvbigpe3RoaXMuZG93bkFjdGlvbihudWxsKSx0aGlzLmFzeW5jKChmdW5jdGlvbigpe3RoaXMudXBBY3Rpb24oKX0pLDEpfSx1aURvd25BY3Rpb246ZnVuY3Rpb24odCl7dGhpcy5ub2lua3x8dGhpcy5kb3duQWN0aW9uKHQpfSxkb3duQWN0aW9uOmZ1bmN0aW9uKHQpe3RoaXMuaG9sZERvd24mJnRoaXMucmlwcGxlcy5sZW5ndGg+MHx8KHRoaXMuYWRkUmlwcGxlKCkuZG93bkFjdGlvbih0KSx0aGlzLl9hbmltYXRpbmd8fCh0aGlzLl9hbmltYXRpbmc9ITAsdGhpcy5hbmltYXRlKCkpKX0sdWlVcEFjdGlvbjpmdW5jdGlvbih0KXt0aGlzLm5vaW5rfHx0aGlzLnVwQWN0aW9uKHQpfSx1cEFjdGlvbjpmdW5jdGlvbih0KXt0aGlzLmhvbGREb3dufHwodGhpcy5yaXBwbGVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UudXBBY3Rpb24odCl9KSksdGhpcy5fYW5pbWF0aW5nPSEwLHRoaXMuYW5pbWF0ZSgpKX0sb25BbmltYXRpb25Db21wbGV0ZTpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZz0hMSx0aGlzLiQuYmFja2dyb3VuZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiIsdGhpcy5maXJlKCJ0cmFuc2l0aW9uZW5kIil9LGFkZFJpcHBsZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBabyh0aGlzKTtyZXR1cm4gWWkodGhpcy4kLndhdmVzKS5hcHBlbmRDaGlsZCh0LndhdmVDb250YWluZXIpLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmRDb2xvcj10LmNvbG9yLHRoaXMucmlwcGxlcy5wdXNoKHQpLHRoaXMuX3NldEFuaW1hdGluZyghMCksdH0scmVtb3ZlUmlwcGxlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmlwcGxlcy5pbmRleE9mKHQpO2U8MHx8KHRoaXMucmlwcGxlcy5zcGxpY2UoZSwxKSx0LnJlbW92ZSgpLHRoaXMucmlwcGxlcy5sZW5ndGh8fHRoaXMuX3NldEFuaW1hdGluZyghMSkpfSxhbmltYXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fYW5pbWF0aW5nKXt2YXIgdCxlO2Zvcih0PTA7dDx0aGlzLnJpcHBsZXMubGVuZ3RoOysrdCkoZT10aGlzLnJpcHBsZXNbdF0pLmRyYXcoKSx0aGlzLiQuYmFja2dyb3VuZC5zdHlsZS5vcGFjaXR5PWUub3V0ZXJPcGFjaXR5LGUuaXNPcGFjaXR5RnVsbHlEZWNheWVkJiYhZS5pc1Jlc3RpbmdBdE1heFJhZGl1cyYmdGhpcy5yZW1vdmVSaXBwbGUoZSk7dGhpcy5zaG91bGRLZWVwQW5pbWF0aW5nfHwwIT09dGhpcy5yaXBwbGVzLmxlbmd0aD93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kQW5pbWF0ZSk6dGhpcy5vbkFuaW1hdGlvbkNvbXBsZXRlKCl9fSxhbmltYXRlUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYW5pbWF0ZSgpfSxfb25FbnRlcktleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpLHRoaXMuYXN5bmModGhpcy51aVVwQWN0aW9uLDEpfSxfb25TcGFjZUtleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpfSxfb25TcGFjZUtleXVwOmZ1bmN0aW9uKCl7dGhpcy51aVVwQWN0aW9uKCl9LF9ob2xkRG93bkNoYW5nZWQ6ZnVuY3Rpb24odCxlKXt2b2lkIDAhPT1lJiYodD90aGlzLmRvd25BY3Rpb24oKTp0aGlzLnVwQWN0aW9uKCkpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgSm89e3Byb3BlcnRpZXM6e25vaW5rOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9ub2lua0NoYW5nZWQifSxfcmlwcGxlQ29udGFpbmVyOnt0eXBlOk9iamVjdH19LF9idXR0b25TdGF0ZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmZvY3VzZWQmJnRoaXMuZW5zdXJlUmlwcGxlKCl9LF9kb3duSGFuZGxlcjpmdW5jdGlvbih0KXtZby5fZG93bkhhbmRsZXIuY2FsbCh0aGlzLHQpLHRoaXMucHJlc3NlZCYmdGhpcy5lbnN1cmVSaXBwbGUodCl9LGVuc3VyZVJpcHBsZTpmdW5jdGlvbih0KXtpZighdGhpcy5oYXNSaXBwbGUoKSl7dGhpcy5fcmlwcGxlPXRoaXMuX2NyZWF0ZVJpcHBsZSgpLHRoaXMuX3JpcHBsZS5ub2luaz10aGlzLm5vaW5rO3ZhciBlPXRoaXMuX3JpcHBsZUNvbnRhaW5lcnx8dGhpcy5yb290O2lmKGUmJllpKGUpLmFwcGVuZENoaWxkKHRoaXMuX3JpcHBsZSksdCl7dmFyIG49WWkodGhpcy5fcmlwcGxlQ29udGFpbmVyfHx0aGlzKSxpPVlpKHQpLnJvb3RUYXJnZXQ7bi5kZWVwQ29udGFpbnMoaSkmJnRoaXMuX3JpcHBsZS51aURvd25BY3Rpb24odCl9fX0sZ2V0UmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5zdXJlUmlwcGxlKCksdGhpcy5fcmlwcGxlfSxoYXNSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih0aGlzLl9yaXBwbGUpfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInBhcGVyLXJpcHBsZSIpfSxfbm9pbmtDaGFuZ2VkOmZ1bmN0aW9uKHQpe3RoaXMuaGFzUmlwcGxlKCkmJih0aGlzLl9yaXBwbGUubm9pbms9dCl9fSxRbz17cHJvcGVydGllczp7ZWxldmF0aW9uOnt0eXBlOk51bWJlcixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAscmVhZE9ubHk6ITB9fSxvYnNlcnZlcnM6WyJfY2FsY3VsYXRlRWxldmF0aW9uKGZvY3VzZWQsIGRpc2FibGVkLCBhY3RpdmUsIHByZXNzZWQsIHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQpIiwiX2NvbXB1dGVLZXlib2FyZENsYXNzKHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImJ1dHRvbiIsdGFiaW5kZXg6IjAiLGFuaW1hdGVkOiEwfSxfY2FsY3VsYXRlRWxldmF0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9MTt0aGlzLmRpc2FibGVkP3Q9MDp0aGlzLmFjdGl2ZXx8dGhpcy5wcmVzc2VkP3Q9NDp0aGlzLnJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQmJih0PTMpLHRoaXMuX3NldEVsZXZhdGlvbih0KX0sX2NvbXB1dGVLZXlib2FyZENsYXNzOmZ1bmN0aW9uKHQpe3RoaXMudG9nZ2xlQ2xhc3MoImtleWJvYXJkLWZvY3VzIix0KX0sX3NwYWNlS2V5RG93bkhhbmRsZXI6ZnVuY3Rpb24odCl7WW8uX3NwYWNlS2V5RG93bkhhbmRsZXIuY2FsbCh0aGlzLHQpLHRoaXMuaGFzUmlwcGxlKCkmJnRoaXMuZ2V0UmlwcGxlKCkucmlwcGxlcy5sZW5ndGg8MSYmdGhpcy5fcmlwcGxlLnVpRG93bkFjdGlvbigpfSxfc3BhY2VLZXlVcEhhbmRsZXI6ZnVuY3Rpb24odCl7WW8uX3NwYWNlS2V5VXBIYW5kbGVyLmNhbGwodGhpcyx0KSx0aGlzLmhhc1JpcHBsZSgpJiZ0aGlzLl9yaXBwbGUudWlVcEFjdGlvbigpfX0sdGE9W1hvLHFvLEpvLFFvXSxlYT1fZWAKICA8c3R5bGUgaW5jbHVkZT0icGFwZXItbWF0ZXJpYWwtc3R5bGVzIj4KICAgIC8qIE5lZWQgdG8gc3BlY2lmeSB0aGUgc2FtZSBzcGVjaWZpY2l0eSBhcyB0aGUgc3R5bGVzIGltcG9ydGVkIGZyb20gcGFwZXItbWF0ZXJpYWwuICovCiAgICA6aG9zdCB7CiAgICAgIEBhcHBseSAtLWxheW91dC1pbmxpbmU7CiAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIG1pbi13aWR0aDogNS4xNGVtOwogICAgICBtYXJnaW46IDAgMC4yOWVtOwogICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICBmb250OiBpbmhlcml0OwogICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICBvdXRsaW5lLXdpZHRoOiAwOwogICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgei1pbmRleDogMDsKICAgICAgcGFkZGluZzogMC43ZW0gMC41N2VtOwoKICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uOwogICAgfQoKICAgIDpob3N0KFtlbGV2YXRpb249IjEiXSkgewogICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMTsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSIyIl0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iMyJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgfQoKICAgIDpob3N0KFtlbGV2YXRpb249IjQiXSkgewogICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNDsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSI1Il0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICB9CgogICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgIDpob3N0KFtyYWlzZWRdLmtleWJvYXJkLWZvY3VzKSB7CiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICBAYXBwbHkgLS1wYXBlci1idXR0b24tcmFpc2VkLWtleWJvYXJkLWZvY3VzOwogICAgfQoKICAgIDpob3N0KDpub3QoW3JhaXNlZF0pLmtleWJvYXJkLWZvY3VzKSB7CiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICBAYXBwbHkgLS1wYXBlci1idXR0b24tZmxhdC1rZXlib2FyZC1mb2N1czsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgIGNvbG9yOiAjYThhOGE4OwogICAgICBjdXJzb3I6IGF1dG87CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwoKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLWRpc2FibGVkOwogICAgfQoKICAgIDpob3N0KFtkaXNhYmxlZF1bcmFpc2VkXSkgewogICAgICBiYWNrZ3JvdW5kOiAjZWFlYWVhOwogICAgfQoKCiAgICA6aG9zdChbYW5pbWF0ZWRdKSB7CiAgICAgIEBhcHBseSAtLXNoYWRvdy10cmFuc2l0aW9uOwogICAgfQoKICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1idXR0b24taW5rLWNvbG9yKTsKICAgIH0KICA8L3N0eWxlPgoKICA8c2xvdD48L3Nsb3Q+YDsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovZWEuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIiksUnIoe190ZW1wbGF0ZTplYSxpczoicGFwZXItYnV0dG9uIixiZWhhdmlvcnM6W3RhXSxwcm9wZXJ0aWVzOntyYWlzZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITEsb2JzZXJ2ZXI6Il9jYWxjdWxhdGVFbGV2YXRpb24ifX0sX2NhbGN1bGF0ZUVsZXZhdGlvbjpmdW5jdGlvbigpe3RoaXMucmFpc2VkP1FvLl9jYWxjdWxhdGVFbGV2YXRpb24uYXBwbHkodGhpcyk6dGhpcy5fc2V0RWxldmF0aW9uKDApfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgbmE9X2VgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAvKiBNYXRlcmlhbCBEZXNpZ24gY29sb3IgcGFsZXR0ZSBmb3IgR29vZ2xlIHByb2R1Y3RzICovCgogICAgICAtLWdvb2dsZS1yZWQtMTAwOiAjZjRjN2MzOwogICAgICAtLWdvb2dsZS1yZWQtMzAwOiAjZTY3YzczOwogICAgICAtLWdvb2dsZS1yZWQtNTAwOiAjZGI0NDM3OwogICAgICAtLWdvb2dsZS1yZWQtNzAwOiAjYzUzOTI5OwoKICAgICAgLS1nb29nbGUtYmx1ZS0xMDA6ICNjNmRhZmM7CiAgICAgIC0tZ29vZ2xlLWJsdWUtMzAwOiAjN2JhYWY3OwogICAgICAtLWdvb2dsZS1ibHVlLTUwMDogIzQyODVmNDsKICAgICAgLS1nb29nbGUtYmx1ZS03MDA6ICMzMzY3ZDY7CgogICAgICAtLWdvb2dsZS1ncmVlbi0xMDA6ICNiN2UxY2Q7CiAgICAgIC0tZ29vZ2xlLWdyZWVuLTMwMDogIzU3YmI4YTsKICAgICAgLS1nb29nbGUtZ3JlZW4tNTAwOiAjMGY5ZDU4OwogICAgICAtLWdvb2dsZS1ncmVlbi03MDA6ICMwYjgwNDM7CgogICAgICAtLWdvb2dsZS15ZWxsb3ctMTAwOiAjZmNlOGIyOwogICAgICAtLWdvb2dsZS15ZWxsb3ctMzAwOiAjZjdjYjRkOwogICAgICAtLWdvb2dsZS15ZWxsb3ctNTAwOiAjZjRiNDAwOwogICAgICAtLWdvb2dsZS15ZWxsb3ctNzAwOiAjZjA5MzAwOwoKICAgICAgLS1nb29nbGUtZ3JleS0xMDA6ICNmNWY1ZjU7CiAgICAgIC0tZ29vZ2xlLWdyZXktMzAwOiAjZTBlMGUwOwogICAgICAtLWdvb2dsZS1ncmV5LTUwMDogIzllOWU5ZTsKICAgICAgLS1nb29nbGUtZ3JleS03MDA6ICM2MTYxNjE7CgogICAgICAvKiBNYXRlcmlhbCBEZXNpZ24gY29sb3IgcGFsZXR0ZSBmcm9tIG9ubGluZSBzcGVjIGRvY3VtZW50ICovCgogICAgICAtLXBhcGVyLXJlZC01MDogI2ZmZWJlZTsKICAgICAgLS1wYXBlci1yZWQtMTAwOiAjZmZjZGQyOwogICAgICAtLXBhcGVyLXJlZC0yMDA6ICNlZjlhOWE7CiAgICAgIC0tcGFwZXItcmVkLTMwMDogI2U1NzM3MzsKICAgICAgLS1wYXBlci1yZWQtNDAwOiAjZWY1MzUwOwogICAgICAtLXBhcGVyLXJlZC01MDA6ICNmNDQzMzY7CiAgICAgIC0tcGFwZXItcmVkLTYwMDogI2U1MzkzNTsKICAgICAgLS1wYXBlci1yZWQtNzAwOiAjZDMyZjJmOwogICAgICAtLXBhcGVyLXJlZC04MDA6ICNjNjI4Mjg7CiAgICAgIC0tcGFwZXItcmVkLTkwMDogI2I3MWMxYzsKICAgICAgLS1wYXBlci1yZWQtYTEwMDogI2ZmOGE4MDsKICAgICAgLS1wYXBlci1yZWQtYTIwMDogI2ZmNTI1MjsKICAgICAgLS1wYXBlci1yZWQtYTQwMDogI2ZmMTc0NDsKICAgICAgLS1wYXBlci1yZWQtYTcwMDogI2Q1MDAwMDsKCiAgICAgIC0tcGFwZXItcGluay01MDogI2ZjZTRlYzsKICAgICAgLS1wYXBlci1waW5rLTEwMDogI2Y4YmJkMDsKICAgICAgLS1wYXBlci1waW5rLTIwMDogI2Y0OGZiMTsKICAgICAgLS1wYXBlci1waW5rLTMwMDogI2YwNjI5MjsKICAgICAgLS1wYXBlci1waW5rLTQwMDogI2VjNDA3YTsKICAgICAgLS1wYXBlci1waW5rLTUwMDogI2U5MWU2MzsKICAgICAgLS1wYXBlci1waW5rLTYwMDogI2Q4MWI2MDsKICAgICAgLS1wYXBlci1waW5rLTcwMDogI2MyMTg1YjsKICAgICAgLS1wYXBlci1waW5rLTgwMDogI2FkMTQ1NzsKICAgICAgLS1wYXBlci1waW5rLTkwMDogIzg4MGU0ZjsKICAgICAgLS1wYXBlci1waW5rLWExMDA6ICNmZjgwYWI7CiAgICAgIC0tcGFwZXItcGluay1hMjAwOiAjZmY0MDgxOwogICAgICAtLXBhcGVyLXBpbmstYTQwMDogI2Y1MDA1NzsKICAgICAgLS1wYXBlci1waW5rLWE3MDA6ICNjNTExNjI7CgogICAgICAtLXBhcGVyLXB1cnBsZS01MDogI2YzZTVmNTsKICAgICAgLS1wYXBlci1wdXJwbGUtMTAwOiAjZTFiZWU3OwogICAgICAtLXBhcGVyLXB1cnBsZS0yMDA6ICNjZTkzZDg7CiAgICAgIC0tcGFwZXItcHVycGxlLTMwMDogI2JhNjhjODsKICAgICAgLS1wYXBlci1wdXJwbGUtNDAwOiAjYWI0N2JjOwogICAgICAtLXBhcGVyLXB1cnBsZS01MDA6ICM5YzI3YjA7CiAgICAgIC0tcGFwZXItcHVycGxlLTYwMDogIzhlMjRhYTsKICAgICAgLS1wYXBlci1wdXJwbGUtNzAwOiAjN2IxZmEyOwogICAgICAtLXBhcGVyLXB1cnBsZS04MDA6ICM2YTFiOWE7CiAgICAgIC0tcGFwZXItcHVycGxlLTkwMDogIzRhMTQ4YzsKICAgICAgLS1wYXBlci1wdXJwbGUtYTEwMDogI2VhODBmYzsKICAgICAgLS1wYXBlci1wdXJwbGUtYTIwMDogI2UwNDBmYjsKICAgICAgLS1wYXBlci1wdXJwbGUtYTQwMDogI2Q1MDBmOTsKICAgICAgLS1wYXBlci1wdXJwbGUtYTcwMDogI2FhMDBmZjsKCiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNTA6ICNlZGU3ZjY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtMTAwOiAjZDFjNGU5OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTIwMDogI2IzOWRkYjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS0zMDA6ICM5NTc1Y2Q7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNDAwOiAjN2U1N2MyOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTUwMDogIzY3M2FiNzsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS02MDA6ICM1ZTM1YjE7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNzAwOiAjNTEyZGE4OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTgwMDogIzQ1MjdhMDsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS05MDA6ICMzMTFiOTI7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTEwMDogI2IzODhmZjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hMjAwOiAjN2M0ZGZmOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWE0MDA6ICM2NTFmZmY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTcwMDogIzYyMDBlYTsKCiAgICAgIC0tcGFwZXItaW5kaWdvLTUwOiAjZThlYWY2OwogICAgICAtLXBhcGVyLWluZGlnby0xMDA6ICNjNWNhZTk7CiAgICAgIC0tcGFwZXItaW5kaWdvLTIwMDogIzlmYThkYTsKICAgICAgLS1wYXBlci1pbmRpZ28tMzAwOiAjNzk4NmNiOwogICAgICAtLXBhcGVyLWluZGlnby00MDA6ICM1YzZiYzA7CiAgICAgIC0tcGFwZXItaW5kaWdvLTUwMDogIzNmNTFiNTsKICAgICAgLS1wYXBlci1pbmRpZ28tNjAwOiAjMzk0OWFiOwogICAgICAtLXBhcGVyLWluZGlnby03MDA6ICMzMDNmOWY7CiAgICAgIC0tcGFwZXItaW5kaWdvLTgwMDogIzI4MzU5MzsKICAgICAgLS1wYXBlci1pbmRpZ28tOTAwOiAjMWEyMzdlOwogICAgICAtLXBhcGVyLWluZGlnby1hMTAwOiAjOGM5ZWZmOwogICAgICAtLXBhcGVyLWluZGlnby1hMjAwOiAjNTM2ZGZlOwogICAgICAtLXBhcGVyLWluZGlnby1hNDAwOiAjM2Q1YWZlOwogICAgICAtLXBhcGVyLWluZGlnby1hNzAwOiAjMzA0ZmZlOwoKICAgICAgLS1wYXBlci1ibHVlLTUwOiAjZTNmMmZkOwogICAgICAtLXBhcGVyLWJsdWUtMTAwOiAjYmJkZWZiOwogICAgICAtLXBhcGVyLWJsdWUtMjAwOiAjOTBjYWY5OwogICAgICAtLXBhcGVyLWJsdWUtMzAwOiAjNjRiNWY2OwogICAgICAtLXBhcGVyLWJsdWUtNDAwOiAjNDJhNWY1OwogICAgICAtLXBhcGVyLWJsdWUtNTAwOiAjMjE5NmYzOwogICAgICAtLXBhcGVyLWJsdWUtNjAwOiAjMWU4OGU1OwogICAgICAtLXBhcGVyLWJsdWUtNzAwOiAjMTk3NmQyOwogICAgICAtLXBhcGVyLWJsdWUtODAwOiAjMTU2NWMwOwogICAgICAtLXBhcGVyLWJsdWUtOTAwOiAjMGQ0N2ExOwogICAgICAtLXBhcGVyLWJsdWUtYTEwMDogIzgyYjFmZjsKICAgICAgLS1wYXBlci1ibHVlLWEyMDA6ICM0NDhhZmY7CiAgICAgIC0tcGFwZXItYmx1ZS1hNDAwOiAjMjk3OWZmOwogICAgICAtLXBhcGVyLWJsdWUtYTcwMDogIzI5NjJmZjsKCiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS01MDogI2UxZjVmZTsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTEwMDogI2IzZTVmYzsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTIwMDogIzgxZDRmYTsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTMwMDogIzRmYzNmNzsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTQwMDogIzI5YjZmNjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTUwMDogIzAzYTlmNDsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTYwMDogIzAzOWJlNTsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTcwMDogIzAyODhkMTsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTgwMDogIzAyNzdiZDsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTkwMDogIzAxNTc5YjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWExMDA6ICM4MGQ4ZmY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hMjAwOiAjNDBjNGZmOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTQwMDogIzAwYjBmZjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWE3MDA6ICMwMDkxZWE7CgogICAgICAtLXBhcGVyLWN5YW4tNTA6ICNlMGY3ZmE7CiAgICAgIC0tcGFwZXItY3lhbi0xMDA6ICNiMmViZjI7CiAgICAgIC0tcGFwZXItY3lhbi0yMDA6ICM4MGRlZWE7CiAgICAgIC0tcGFwZXItY3lhbi0zMDA6ICM0ZGQwZTE7CiAgICAgIC0tcGFwZXItY3lhbi00MDA6ICMyNmM2ZGE7CiAgICAgIC0tcGFwZXItY3lhbi01MDA6ICMwMGJjZDQ7CiAgICAgIC0tcGFwZXItY3lhbi02MDA6ICMwMGFjYzE7CiAgICAgIC0tcGFwZXItY3lhbi03MDA6ICMwMDk3YTc7CiAgICAgIC0tcGFwZXItY3lhbi04MDA6ICMwMDgzOGY7CiAgICAgIC0tcGFwZXItY3lhbi05MDA6ICMwMDYwNjQ7CiAgICAgIC0tcGFwZXItY3lhbi1hMTAwOiAjODRmZmZmOwogICAgICAtLXBhcGVyLWN5YW4tYTIwMDogIzE4ZmZmZjsKICAgICAgLS1wYXBlci1jeWFuLWE0MDA6ICMwMGU1ZmY7CiAgICAgIC0tcGFwZXItY3lhbi1hNzAwOiAjMDBiOGQ0OwoKICAgICAgLS1wYXBlci10ZWFsLTUwOiAjZTBmMmYxOwogICAgICAtLXBhcGVyLXRlYWwtMTAwOiAjYjJkZmRiOwogICAgICAtLXBhcGVyLXRlYWwtMjAwOiAjODBjYmM0OwogICAgICAtLXBhcGVyLXRlYWwtMzAwOiAjNGRiNmFjOwogICAgICAtLXBhcGVyLXRlYWwtNDAwOiAjMjZhNjlhOwogICAgICAtLXBhcGVyLXRlYWwtNTAwOiAjMDA5Njg4OwogICAgICAtLXBhcGVyLXRlYWwtNjAwOiAjMDA4OTdiOwogICAgICAtLXBhcGVyLXRlYWwtNzAwOiAjMDA3OTZiOwogICAgICAtLXBhcGVyLXRlYWwtODAwOiAjMDA2OTVjOwogICAgICAtLXBhcGVyLXRlYWwtOTAwOiAjMDA0ZDQwOwogICAgICAtLXBhcGVyLXRlYWwtYTEwMDogI2E3ZmZlYjsKICAgICAgLS1wYXBlci10ZWFsLWEyMDA6ICM2NGZmZGE7CiAgICAgIC0tcGFwZXItdGVhbC1hNDAwOiAjMWRlOWI2OwogICAgICAtLXBhcGVyLXRlYWwtYTcwMDogIzAwYmZhNTsKCiAgICAgIC0tcGFwZXItZ3JlZW4tNTA6ICNlOGY1ZTk7CiAgICAgIC0tcGFwZXItZ3JlZW4tMTAwOiAjYzhlNmM5OwogICAgICAtLXBhcGVyLWdyZWVuLTIwMDogI2E1ZDZhNzsKICAgICAgLS1wYXBlci1ncmVlbi0zMDA6ICM4MWM3ODQ7CiAgICAgIC0tcGFwZXItZ3JlZW4tNDAwOiAjNjZiYjZhOwogICAgICAtLXBhcGVyLWdyZWVuLTUwMDogIzRjYWY1MDsKICAgICAgLS1wYXBlci1ncmVlbi02MDA6ICM0M2EwNDc7CiAgICAgIC0tcGFwZXItZ3JlZW4tNzAwOiAjMzg4ZTNjOwogICAgICAtLXBhcGVyLWdyZWVuLTgwMDogIzJlN2QzMjsKICAgICAgLS1wYXBlci1ncmVlbi05MDA6ICMxYjVlMjA7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTEwMDogI2I5ZjZjYTsKICAgICAgLS1wYXBlci1ncmVlbi1hMjAwOiAjNjlmMGFlOwogICAgICAtLXBhcGVyLWdyZWVuLWE0MDA6ICMwMGU2NzY7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTcwMDogIzAwYzg1MzsKCiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNTA6ICNmMWY4ZTk7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tMTAwOiAjZGNlZGM4OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTIwMDogI2M1ZTFhNTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi0zMDA6ICNhZWQ1ODE7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNDAwOiAjOWNjYzY1OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTUwMDogIzhiYzM0YTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi02MDA6ICM3Y2IzNDI7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNzAwOiAjNjg5ZjM4OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTgwMDogIzU1OGIyZjsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi05MDA6ICMzMzY5MWU7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTEwMDogI2NjZmY5MDsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hMjAwOiAjYjJmZjU5OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWE0MDA6ICM3NmZmMDM7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTcwMDogIzY0ZGQxNzsKCiAgICAgIC0tcGFwZXItbGltZS01MDogI2Y5ZmJlNzsKICAgICAgLS1wYXBlci1saW1lLTEwMDogI2YwZjRjMzsKICAgICAgLS1wYXBlci1saW1lLTIwMDogI2U2ZWU5YzsKICAgICAgLS1wYXBlci1saW1lLTMwMDogI2RjZTc3NTsKICAgICAgLS1wYXBlci1saW1lLTQwMDogI2Q0ZTE1NzsKICAgICAgLS1wYXBlci1saW1lLTUwMDogI2NkZGMzOTsKICAgICAgLS1wYXBlci1saW1lLTYwMDogI2MwY2EzMzsKICAgICAgLS1wYXBlci1saW1lLTcwMDogI2FmYjQyYjsKICAgICAgLS1wYXBlci1saW1lLTgwMDogIzllOWQyNDsKICAgICAgLS1wYXBlci1saW1lLTkwMDogIzgyNzcxNzsKICAgICAgLS1wYXBlci1saW1lLWExMDA6ICNmNGZmODE7CiAgICAgIC0tcGFwZXItbGltZS1hMjAwOiAjZWVmZjQxOwogICAgICAtLXBhcGVyLWxpbWUtYTQwMDogI2M2ZmYwMDsKICAgICAgLS1wYXBlci1saW1lLWE3MDA6ICNhZWVhMDA7CgogICAgICAtLXBhcGVyLXllbGxvdy01MDogI2ZmZmRlNzsKICAgICAgLS1wYXBlci15ZWxsb3ctMTAwOiAjZmZmOWM0OwogICAgICAtLXBhcGVyLXllbGxvdy0yMDA6ICNmZmY1OWQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTMwMDogI2ZmZjE3NjsKICAgICAgLS1wYXBlci15ZWxsb3ctNDAwOiAjZmZlZTU4OwogICAgICAtLXBhcGVyLXllbGxvdy01MDA6ICNmZmViM2I7CiAgICAgIC0tcGFwZXIteWVsbG93LTYwMDogI2ZkZDgzNTsKICAgICAgLS1wYXBlci15ZWxsb3ctNzAwOiAjZmJjMDJkOwogICAgICAtLXBhcGVyLXllbGxvdy04MDA6ICNmOWE4MjU7CiAgICAgIC0tcGFwZXIteWVsbG93LTkwMDogI2Y1N2YxNzsKICAgICAgLS1wYXBlci15ZWxsb3ctYTEwMDogI2ZmZmY4ZDsKICAgICAgLS1wYXBlci15ZWxsb3ctYTIwMDogI2ZmZmYwMDsKICAgICAgLS1wYXBlci15ZWxsb3ctYTQwMDogI2ZmZWEwMDsKICAgICAgLS1wYXBlci15ZWxsb3ctYTcwMDogI2ZmZDYwMDsKCiAgICAgIC0tcGFwZXItYW1iZXItNTA6ICNmZmY4ZTE7CiAgICAgIC0tcGFwZXItYW1iZXItMTAwOiAjZmZlY2IzOwogICAgICAtLXBhcGVyLWFtYmVyLTIwMDogI2ZmZTA4MjsKICAgICAgLS1wYXBlci1hbWJlci0zMDA6ICNmZmQ1NGY7CiAgICAgIC0tcGFwZXItYW1iZXItNDAwOiAjZmZjYTI4OwogICAgICAtLXBhcGVyLWFtYmVyLTUwMDogI2ZmYzEwNzsKICAgICAgLS1wYXBlci1hbWJlci02MDA6ICNmZmIzMDA7CiAgICAgIC0tcGFwZXItYW1iZXItNzAwOiAjZmZhMDAwOwogICAgICAtLXBhcGVyLWFtYmVyLTgwMDogI2ZmOGYwMDsKICAgICAgLS1wYXBlci1hbWJlci05MDA6ICNmZjZmMDA7CiAgICAgIC0tcGFwZXItYW1iZXItYTEwMDogI2ZmZTU3ZjsKICAgICAgLS1wYXBlci1hbWJlci1hMjAwOiAjZmZkNzQwOwogICAgICAtLXBhcGVyLWFtYmVyLWE0MDA6ICNmZmM0MDA7CiAgICAgIC0tcGFwZXItYW1iZXItYTcwMDogI2ZmYWIwMDsKCiAgICAgIC0tcGFwZXItb3JhbmdlLTUwOiAjZmZmM2UwOwogICAgICAtLXBhcGVyLW9yYW5nZS0xMDA6ICNmZmUwYjI7CiAgICAgIC0tcGFwZXItb3JhbmdlLTIwMDogI2ZmY2M4MDsKICAgICAgLS1wYXBlci1vcmFuZ2UtMzAwOiAjZmZiNzRkOwogICAgICAtLXBhcGVyLW9yYW5nZS00MDA6ICNmZmE3MjY7CiAgICAgIC0tcGFwZXItb3JhbmdlLTUwMDogI2ZmOTgwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtNjAwOiAjZmI4YzAwOwogICAgICAtLXBhcGVyLW9yYW5nZS03MDA6ICNmNTdjMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTgwMDogI2VmNmMwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtOTAwOiAjZTY1MTAwOwogICAgICAtLXBhcGVyLW9yYW5nZS1hMTAwOiAjZmZkMTgwOwogICAgICAtLXBhcGVyLW9yYW5nZS1hMjAwOiAjZmZhYjQwOwogICAgICAtLXBhcGVyLW9yYW5nZS1hNDAwOiAjZmY5MTAwOwogICAgICAtLXBhcGVyLW9yYW5nZS1hNzAwOiAjZmY2NTAwOwoKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS01MDogI2ZiZTllNzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS0xMDA6ICNmZmNjYmM7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtMjAwOiAjZmZhYjkxOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTMwMDogI2ZmOGE2NTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS00MDA6ICNmZjcwNDM7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNTAwOiAjZmY1NzIyOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTYwMDogI2Y0NTExZTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS03MDA6ICNlNjRhMTk7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtODAwOiAjZDg0MzE1OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTkwMDogI2JmMzYwYzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hMTAwOiAjZmY5ZTgwOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWEyMDA6ICNmZjZlNDA7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTQwMDogI2ZmM2QwMDsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hNzAwOiAjZGQyYzAwOwoKICAgICAgLS1wYXBlci1icm93bi01MDogI2VmZWJlOTsKICAgICAgLS1wYXBlci1icm93bi0xMDA6ICNkN2NjYzg7CiAgICAgIC0tcGFwZXItYnJvd24tMjAwOiAjYmNhYWE0OwogICAgICAtLXBhcGVyLWJyb3duLTMwMDogI2ExODg3ZjsKICAgICAgLS1wYXBlci1icm93bi00MDA6ICM4ZDZlNjM7CiAgICAgIC0tcGFwZXItYnJvd24tNTAwOiAjNzk1NTQ4OwogICAgICAtLXBhcGVyLWJyb3duLTYwMDogIzZkNGM0MTsKICAgICAgLS1wYXBlci1icm93bi03MDA6ICM1ZDQwMzc7CiAgICAgIC0tcGFwZXItYnJvd24tODAwOiAjNGUzNDJlOwogICAgICAtLXBhcGVyLWJyb3duLTkwMDogIzNlMjcyMzsKCiAgICAgIC0tcGFwZXItZ3JleS01MDogI2ZhZmFmYTsKICAgICAgLS1wYXBlci1ncmV5LTEwMDogI2Y1ZjVmNTsKICAgICAgLS1wYXBlci1ncmV5LTIwMDogI2VlZWVlZTsKICAgICAgLS1wYXBlci1ncmV5LTMwMDogI2UwZTBlMDsKICAgICAgLS1wYXBlci1ncmV5LTQwMDogI2JkYmRiZDsKICAgICAgLS1wYXBlci1ncmV5LTUwMDogIzllOWU5ZTsKICAgICAgLS1wYXBlci1ncmV5LTYwMDogIzc1NzU3NTsKICAgICAgLS1wYXBlci1ncmV5LTcwMDogIzYxNjE2MTsKICAgICAgLS1wYXBlci1ncmV5LTgwMDogIzQyNDI0MjsKICAgICAgLS1wYXBlci1ncmV5LTkwMDogIzIxMjEyMTsKCiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTUwOiAjZWNlZmYxOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS0xMDA6ICNjZmQ4ZGM7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTIwMDogI2IwYmVjNTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktMzAwOiAjOTBhNGFlOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS00MDA6ICM3ODkwOWM7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTUwMDogIzYwN2Q4YjsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNjAwOiAjNTQ2ZTdhOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS03MDA6ICM0NTVhNjQ7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTgwMDogIzM3NDc0ZjsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktOTAwOiAjMjYzMjM4OwoKICAgICAgLyogb3BhY2l0eSBmb3IgZGFyayB0ZXh0IG9uIGEgbGlnaHQgYmFja2dyb3VuZCAqLwogICAgICAtLWRhcmstZGl2aWRlci1vcGFjaXR5OiAwLjEyOwogICAgICAtLWRhcmstZGlzYWJsZWQtb3BhY2l0eTogMC4zODsgLyogb3IgaGludCB0ZXh0IG9yIGljb24gKi8KICAgICAgLS1kYXJrLXNlY29uZGFyeS1vcGFjaXR5OiAwLjU0OwogICAgICAtLWRhcmstcHJpbWFyeS1vcGFjaXR5OiAwLjg3OwoKICAgICAgLyogb3BhY2l0eSBmb3IgbGlnaHQgdGV4dCBvbiBhIGRhcmsgYmFja2dyb3VuZCAqLwogICAgICAtLWxpZ2h0LWRpdmlkZXItb3BhY2l0eTogMC4xMjsKICAgICAgLS1saWdodC1kaXNhYmxlZC1vcGFjaXR5OiAwLjM7IC8qIG9yIGhpbnQgdGV4dCBvciBpY29uICovCiAgICAgIC0tbGlnaHQtc2Vjb25kYXJ5LW9wYWNpdHk6IDAuNzsKICAgICAgLS1saWdodC1wcmltYXJ5LW9wYWNpdHk6IDEuMDsKCiAgICB9CgogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgpgO25hLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobmEuY29udGVudCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBpYT1fZWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKICAgICAgLyoKICAgICAgICogWW91IGNhbiB1c2UgdGhlc2UgZ2VuZXJpYyB2YXJpYWJsZXMgaW4geW91ciBlbGVtZW50cyBmb3IgZWFzeSB0aGVtaW5nLgogICAgICAgKiBGb3IgZXhhbXBsZSwgaWYgYWxsIHlvdXIgZWxlbWVudHMgdXNlIFxgLS1wcmltYXJ5LXRleHQtY29sb3JcYCBhcyBpdHMgbWFpbgogICAgICAgKiBjb2xvciwgdGhlbiBzd2l0Y2hpbmcgZnJvbSBhIGxpZ2h0IHRvIGEgZGFyayB0aGVtZSBpcyBqdXN0IGEgbWF0dGVyIG9mCiAgICAgICAqIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBcYC0tcHJpbWFyeS10ZXh0LWNvbG9yXGAgaW4geW91ciBhcHBsaWNhdGlvbi4KICAgICAgICovCiAgICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS10ZXh0LWNvbG9yKTsKICAgICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWJhY2tncm91bmQtY29sb3IpOwogICAgICAtLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3IpOwogICAgICAtLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWRpc2FibGVkLWNvbG9yKTsKICAgICAgLS1kaXZpZGVyLWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yKTsKICAgICAgLS1lcnJvci1jb2xvcjogdmFyKC0tcGFwZXItZGVlcC1vcmFuZ2UtYTcwMCk7CgogICAgICAvKgogICAgICAgKiBQcmltYXJ5IGFuZCBhY2NlbnQgY29sb3JzLiBBbHNvIHNlZSBjb2xvci5qcyBmb3IgbW9yZSBjb2xvcnMuCiAgICAgICAqLwogICAgICAtLXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApOwogICAgICAtLWxpZ2h0LXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby0xMDApOwogICAgICAtLWRhcmstcHJpbWFyeS1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTcwMCk7CgogICAgICAtLWFjY2VudC1jb2xvcjogdmFyKC0tcGFwZXItcGluay1hMjAwKTsKICAgICAgLS1saWdodC1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTEwMCk7CiAgICAgIC0tZGFyay1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTQwMCk7CgoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIExpZ2h0IGJhY2tncm91bmQgdGhlbWUKICAgICAgICovCiAgICAgIC0tbGlnaHQtdGhlbWUtYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICAgICAgLS1saWdodC10aGVtZS1iYXNlLWNvbG9yOiAjMDAwMDAwOwogICAgICAtLWxpZ2h0LXRoZW1lLXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3I6ICM3MzczNzM7ICAvKiBmb3Igc2Vjb25kYXJ5IHRleHQgYW5kIGljb25zICovCiAgICAgIC0tbGlnaHQtdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM5YjliOWI7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yOiAjZGJkYmRiOwoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIERhcmsgYmFja2dyb3VuZCB0aGVtZQogICAgICAgKi8KICAgICAgLS1kYXJrLXRoZW1lLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1kYXJrLXRoZW1lLWJhc2UtY29sb3I6ICNmZmZmZmY7CiAgICAgIC0tZGFyay10aGVtZS10ZXh0LWNvbG9yOiAjZmZmZmZmOwogICAgICAtLWRhcmstdGhlbWUtc2Vjb25kYXJ5LWNvbG9yOiAjYmNiY2JjOyAgLyogZm9yIHNlY29uZGFyeSB0ZXh0IGFuZCBpY29ucyAqLwogICAgICAtLWRhcmstdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM2NDY0NjQ7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1kYXJrLXRoZW1lLWRpdmlkZXItY29sb3I6ICMzYzNjM2M7CgogICAgICAvKgogICAgICAgKiBEZXByZWNhdGVkIHZhbHVlcyBiZWNhdXNlIG9mIHRoZWlyIGNvbmZ1c2luZyBuYW1lcy4KICAgICAgICovCiAgICAgIC0tdGV4dC1wcmltYXJ5LWNvbG9yOiB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpOwogICAgICAtLWRlZmF1bHQtcHJpbWFyeS1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtpYS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGlhLmNvbnRlbnQpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgcmE9e3Byb3BlcnRpZXM6e25hbWU6e3R5cGU6U3RyaW5nfSx2YWx1ZTp7bm90aWZ5OiEwLHR5cGU6U3RyaW5nfSxyZXF1aXJlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt9LGRldGFjaGVkOmZ1bmN0aW9uKCl7fX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL2xldCBvYT1udWxsO2NvbnN0IGFhPXtwcm9wZXJ0aWVzOnt2YWxpZGF0b3I6e3R5cGU6U3RyaW5nfSxpbnZhbGlkOntub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2ludmFsaWRDaGFuZ2VkIn19LHJlZ2lzdGVyZWQ6ZnVuY3Rpb24oKXtvYT1uZXcgeG8oe3R5cGU6InZhbGlkYXRvciJ9KX0sX2ludmFsaWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5pbnZhbGlkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWludmFsaWQiLCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIpfSxnZXQgX3ZhbGlkYXRvcigpe3JldHVybiBvYSYmb2EuYnlLZXkodGhpcy52YWxpZGF0b3IpfSxoYXNWYWxpZGF0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9dGhpcy5fdmFsaWRhdG9yfSx2YWxpZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnZhbGlkPXZvaWQgMD09PXQmJnZvaWQgMCE9PXRoaXMudmFsdWU/IXRoaXMuX2dldFZhbGlkaXR5KHRoaXMudmFsdWUpOiF0aGlzLl9nZXRWYWxpZGl0eSh0KSwhdGhpcy5pbnZhbGlkfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMuaGFzVmFsaWRhdG9yKCl8fHRoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZSh0KX19LHNhPXtwcm9wZXJ0aWVzOntjaGVja2VkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG5vdGlmeTohMCxvYnNlcnZlcjoiX2NoZWNrZWRDaGFuZ2VkIn0sdG9nZ2xlczp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sdmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiJvbiIsb2JzZXJ2ZXI6Il92YWx1ZUNoYW5nZWQifX0sb2JzZXJ2ZXJzOlsiX3JlcXVpcmVkQ2hhbmdlZChyZXF1aXJlZCkiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5faGFzSXJvbkNoZWNrZWRFbGVtZW50QmVoYXZpb3I9ITB9LF9nZXRWYWxpZGl0eTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8IXRoaXMucmVxdWlyZWR8fHRoaXMuY2hlY2tlZH0sX3JlcXVpcmVkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMucmVxdWlyZWQ/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtcmVxdWlyZWQiLCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtcmVxdWlyZWQiKX0sX2NoZWNrZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5hY3RpdmU9dGhpcy5jaGVja2VkLHRoaXMuZmlyZSgiaXJvbi1jaGFuZ2UiKX0sX3ZhbHVlQ2hhbmdlZDpmdW5jdGlvbigpe251bGw9PXRoaXMudmFsdWUmJih0aGlzLnZhbHVlPSJvbiIpfX0sbGE9e29ic2VydmVyczpbIl9mb2N1c2VkQ2hhbmdlZChyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKSJdLF9mb2N1c2VkQ2hhbmdlZDpmdW5jdGlvbih0KXt0JiZ0aGlzLmVuc3VyZVJpcHBsZSgpLHRoaXMuaGFzUmlwcGxlKCkmJih0aGlzLl9yaXBwbGUuaG9sZERvd249dCl9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt2YXIgdD1Kby5fY3JlYXRlUmlwcGxlKCk7cmV0dXJuIHQuaWQ9ImluayIsdC5zZXRBdHRyaWJ1dGUoImNlbnRlciIsIiIpLHQuY2xhc3NMaXN0LmFkZCgiY2lyY2xlIiksdH19LGNhPVtYbyxxbyxKbyxsYV0sdWE9W2NhLFtyYSxhYSxzYV0se19jaGVja2VkQ2hhbmdlZDpmdW5jdGlvbigpe3NhLl9jaGVja2VkQ2hhbmdlZC5jYWxsKHRoaXMpLHRoaXMuaGFzUmlwcGxlKCkmJih0aGlzLmNoZWNrZWQ/dGhpcy5fcmlwcGxlLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsIiIpOnRoaXMuX3JpcHBsZS5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKSl9LF9idXR0b25TdGF0ZUNoYW5nZWQ6ZnVuY3Rpb24oKXtKby5fYnV0dG9uU3RhdGVDaGFuZ2VkLmNhbGwodGhpcyksdGhpcy5kaXNhYmxlZHx8dGhpcy5pc0F0dGFjaGVkJiYodGhpcy5jaGVja2VkPXRoaXMuYWN0aXZlKX19XSxoYT1fZWA8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplOiB2YXIoLS1wYXBlci1jaGVja2JveC1zaXplLCAxOHB4KTsKICAgIC8qIC0xcHggaXMgYSBzZW50aW5lbCBmb3IgdGhlIGRlZmF1bHQgYW5kIGlzIHJlcGxhY2VkIGluIFxgYXR0YWNoZWRcYC4gKi8KICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZTogdmFyKC0tcGFwZXItY2hlY2tib3gtaW5rLXNpemUsIC0xcHgpOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIGxpbmUtaGVpZ2h0OiAwOwogICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICB9CgogIDpob3N0KFtoaWRkZW5dKSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQoKICA6aG9zdCg6Zm9jdXMpIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQoKICAuaGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAjY2hlY2tib3hDb250YWluZXIgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtaW4td2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtYXJnaW46IHZhcigtLXBhcGVyLWNoZWNrYm94LW1hcmdpbiwgaW5pdGlhbCk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItY2hlY2tib3gtdmVydGljYWwtYWxpZ24sIG1pZGRsZSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogIH0KCiAgI2luayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CgogICAgLyogQ2VudGVyIHRoZSByaXBwbGUgaW4gdGhlIGNoZWNrYm94IGJ5IG5lZ2F0aXZlIG9mZnNldHRpbmcgaXQgYnkKICAgICAqIChpbmtXaWR0aCAtIHJpcHBsZVdpZHRoKSAvIDIgKi8KICAgIHRvcDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKTsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIG9wYWNpdHk6IDAuNjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogIH0KCiAgI2luazpkaXIocnRsKSB7CiAgICByaWdodDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogYXV0bzsKICB9CgogICNpbmtbY2hlY2tlZF0gewogICAgY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgfQoKICAjY2hlY2tib3ggewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlcjogc29saWQgMnB4OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKCiAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLWNoZWNrYm94LWFuaW1hdGlvbi1kdXJhdGlvbiwgMTQwbXMpOwogICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICAvKiBjaGVja2JveCBjaGVja2VkIGFuaW1hdGlvbnMgKi8KICAjY2hlY2tib3guY2hlY2tlZCAjY2hlY2ttYXJrIHsKICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwogICAgYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwoKICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1jaGVja2JveC1hbmltYXRpb24tZHVyYXRpb24sIDE0MG1zKTsKICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICBALXdlYmtpdC1rZXlmcmFtZXMgY2hlY2ttYXJrLWV4cGFuZCB7CiAgICAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSByb3RhdGUoNDVkZWcpOwogICAgfQogIH0KCiAgQGtleWZyYW1lcyBjaGVja21hcmstZXhwYW5kIHsKICAgIDAlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgcm90YXRlKDQ1ZGVnKTsKICAgIH0KICB9CgogICNjaGVja2JveC5jaGVja2VkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgI2NoZWNrbWFyayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMzYlOwogICAgaGVpZ2h0OiA3MCU7CiAgICBib3JkZXItc3R5bGU6IHNvbGlkOwogICAgYm9yZGVyLXRvcDogbm9uZTsKICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiBjYWxjKDIvMTUgKiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKTsKICAgIGJvcmRlci1ib3R0b20td2lkdGg6IGNhbGMoMi8xNSAqIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja21hcmstY29sb3IsIHdoaXRlKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogOTclIDg2JTsKICAgIHRyYW5zZm9ybS1vcmlnaW46IDk3JSA4NiU7CiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLyogcHJvdGVjdCBhZ2FpbnN0IHBhZ2UtbGV2ZWwgYm94LXNpemluZyAqLwogIH0KCiAgI2NoZWNrbWFyazpkaXIocnRsKSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDUwJSAxNCU7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTQlOwogIH0KCiAgLyogbGFiZWwgKi8KICAjY2hlY2tib3hMYWJlbCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNjaGVja2JveExhYmVsIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jaGVja2VkLWNvbG9yLCB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSkpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY2hlY2tlZDsKICB9CgogICNjaGVja2JveExhYmVsOmRpcihydGwpIHsKICAgIHBhZGRpbmctcmlnaHQ6IHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLXNwYWNpbmcsIDhweCk7CiAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgfQoKICAjY2hlY2tib3hMYWJlbFtoaWRkZW5dIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAvKiBkaXNhYmxlZCBzdGF0ZSAqLwoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3ggewogICAgb3BhY2l0eTogMC41OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI2NoZWNrYm94IHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3hMYWJlbCAgewogICAgb3BhY2l0eTogMC42NTsKICB9CgogIC8qIGludmFsaWQgc3RhdGUgKi8KICAjY2hlY2tib3guaW52YWxpZDpub3QoLmNoZWNrZWQpIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtZXJyb3ItY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0iY2hlY2tib3hDb250YWluZXIiPgogIDxkaXYgaWQ9ImNoZWNrYm94IiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja2JveENsYXNzKGNoZWNrZWQsIGludmFsaWQpXV0iPgogICAgPGRpdiBpZD0iY2hlY2ttYXJrIiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja21hcmtDbGFzcyhjaGVja2VkKV1dIj48L2Rpdj4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJjaGVja2JveExhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpsZXQgZGE7aGEuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIiksUnIoe190ZW1wbGF0ZTpoYSxpczoicGFwZXItY2hlY2tib3giLGJlaGF2aW9yczpbdWFdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJjaGVja2JveCIsImFyaWEtY2hlY2tlZCI6ITEsdGFiaW5kZXg6MH0scHJvcGVydGllczp7YXJpYUFjdGl2ZUF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImFyaWEtY2hlY2tlZCJ9fSxhdHRhY2hlZDpmdW5jdGlvbigpe0xpKHRoaXMsKGZ1bmN0aW9uKCl7aWYoIi0xcHgiPT09dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSIpLnRyaW0oKSl7dmFyIHQ9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplIikudHJpbSgpLGU9InB4IixuPXQubWF0Y2goL1tBLVphLXpdKyQvKTtudWxsIT09biYmKGU9blswXSk7dmFyIGk9cGFyc2VGbG9hdCh0KSxyPTgvMyppOyJweCI9PT1lJiYocj1NYXRoLmZsb29yKHIpKSUyIT1pJTImJnIrKyx0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItY2hlY2tib3gtaW5rLXNpemUiOnIrZX0pfX0pKX0sX2NvbXB1dGVDaGVja2JveENsYXNzOmZ1bmN0aW9uKHQsZSl7dmFyIG49IiI7cmV0dXJuIHQmJihuKz0iY2hlY2tlZCAiKSxlJiYobis9ImludmFsaWQiKSxufSxfY29tcHV0ZUNoZWNrbWFya0NsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiB0PyIiOiJoaWRkZW4ifSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JpcHBsZUNvbnRhaW5lcj10aGlzLiQuY2hlY2tib3hDb250YWluZXIsbGEuX2NyZWF0ZVJpcHBsZS5jYWxsKHRoaXMpfX0pO2NvbnN0IHBhPXtwcm9wZXJ0aWVzOntzaXppbmdUYXJnZXQ6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSxmaXRJbnRvOnt0eXBlOk9iamVjdCx2YWx1ZTp3aW5kb3d9LG5vT3ZlcmxhcDp7dHlwZTpCb29sZWFufSxwb3NpdGlvblRhcmdldDp7dHlwZTpFbGVtZW50fSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nfSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZ30sZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LGhvcml6b250YWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSx2ZXJ0aWNhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LGF1dG9GaXRPbkF0dGFjaDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9maXRJbmZvOnt0eXBlOk9iamVjdH19LGdldCBfZml0V2lkdGgoKXtyZXR1cm4gdGhpcy5maXRJbnRvPT09d2luZG93P3RoaXMuZml0SW50by5pbm5lcldpZHRoOnRoaXMuZml0SW50by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH0sZ2V0IF9maXRIZWlnaHQoKXtyZXR1cm4gdGhpcy5maXRJbnRvPT09d2luZG93P3RoaXMuZml0SW50by5pbm5lckhlaWdodDp0aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0fSxnZXQgX2ZpdExlZnQoKXtyZXR1cm4gdGhpcy5maXRJbnRvPT09d2luZG93PzA6dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9LGdldCBfZml0VG9wKCl7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz8wOnRoaXMuZml0SW50by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3B9LGdldCBfZGVmYXVsdFBvc2l0aW9uVGFyZ2V0KCl7dmFyIHQ9WWkodGhpcykucGFyZW50Tm9kZTtyZXR1cm4gdCYmdC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmKHQ9dC5ob3N0KSx0fSxnZXQgX2xvY2FsZUhvcml6b250YWxBbGlnbigpe2lmKHRoaXMuX2lzUlRMKXtpZigicmlnaHQiPT09dGhpcy5ob3Jpem9udGFsQWxpZ24pcmV0dXJuImxlZnQiO2lmKCJsZWZ0Ij09PXRoaXMuaG9yaXpvbnRhbEFsaWduKXJldHVybiJyaWdodCJ9cmV0dXJuIHRoaXMuaG9yaXpvbnRhbEFsaWdufSxnZXQgX19zaG91bGRQb3NpdGlvbigpe3JldHVybih0aGlzLmhvcml6b250YWxBbGlnbnx8dGhpcy52ZXJ0aWNhbEFsaWduKSYmdGhpcy5wb3NpdGlvblRhcmdldH0sZ2V0IF9pc1JUTCgpe3JldHVybiB2b2lkIDA9PT10aGlzLl9tZW1vaXplZElzUlRMJiYodGhpcy5fbWVtb2l6ZWRJc1JUTD0icnRsIj09d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlyZWN0aW9uKSx0aGlzLl9tZW1vaXplZElzUlRMfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMucG9zaXRpb25UYXJnZXQ9dGhpcy5wb3NpdGlvblRhcmdldHx8dGhpcy5fZGVmYXVsdFBvc2l0aW9uVGFyZ2V0LHRoaXMuYXV0b0ZpdE9uQXR0YWNoJiYoIm5vbmUiPT09d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlzcGxheT9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5maXQoKX0uYmluZCh0aGlzKSk6KHdpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLmZpdCgpKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fX2RlZmVycmVkRml0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX19kZWZlcnJlZEZpdCksdGhpcy5fX2RlZmVycmVkRml0PW51bGwpfSxmaXQ6ZnVuY3Rpb24oKXt0aGlzLnBvc2l0aW9uKCksdGhpcy5jb25zdHJhaW4oKSx0aGlzLmNlbnRlcigpfSxfZGlzY292ZXJJbmZvOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZpdEluZm8pe3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5zaXppbmdUYXJnZXQpO3RoaXMuX2ZpdEluZm89e2lubGluZVN0eWxlOnt0b3A6dGhpcy5zdHlsZS50b3B8fCIiLGxlZnQ6dGhpcy5zdHlsZS5sZWZ0fHwiIixwb3NpdGlvbjp0aGlzLnN0eWxlLnBvc2l0aW9ufHwiIn0sc2l6ZXJJbmxpbmVTdHlsZTp7bWF4V2lkdGg6dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGh8fCIiLG1heEhlaWdodDp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHR8fCIiLGJveFNpemluZzp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5ib3hTaXppbmd8fCIifSxwb3NpdGlvbmVkQnk6e3ZlcnRpY2FsbHk6ImF1dG8iIT09dC50b3A/InRvcCI6ImF1dG8iIT09dC5ib3R0b20/ImJvdHRvbSI6bnVsbCxob3Jpem9udGFsbHk6ImF1dG8iIT09dC5sZWZ0PyJsZWZ0IjoiYXV0byIhPT10LnJpZ2h0PyJyaWdodCI6bnVsbH0sc2l6ZWRCeTp7aGVpZ2h0OiJub25lIiE9PWUubWF4SGVpZ2h0LHdpZHRoOiJub25lIiE9PWUubWF4V2lkdGgsbWluV2lkdGg6cGFyc2VJbnQoZS5taW5XaWR0aCwxMCl8fDAsbWluSGVpZ2h0OnBhcnNlSW50KGUubWluSGVpZ2h0LDEwKXx8MH0sbWFyZ2luOnt0b3A6cGFyc2VJbnQodC5tYXJnaW5Ub3AsMTApfHwwLHJpZ2h0OnBhcnNlSW50KHQubWFyZ2luUmlnaHQsMTApfHwwLGJvdHRvbTpwYXJzZUludCh0Lm1hcmdpbkJvdHRvbSwxMCl8fDAsbGVmdDpwYXJzZUludCh0Lm1hcmdpbkxlZnQsMTApfHwwfX19fSxyZXNldEZpdDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2ZpdEluZm98fHt9O2Zvcih2YXIgZSBpbiB0LnNpemVySW5saW5lU3R5bGUpdGhpcy5zaXppbmdUYXJnZXQuc3R5bGVbZV09dC5zaXplcklubGluZVN0eWxlW2VdO2Zvcih2YXIgZSBpbiB0LmlubGluZVN0eWxlKXRoaXMuc3R5bGVbZV09dC5pbmxpbmVTdHlsZVtlXTt0aGlzLl9maXRJbmZvPW51bGx9LHJlZml0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsTGVmdCxlPXRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbFRvcDt0aGlzLnJlc2V0Rml0KCksdGhpcy5maXQoKSx0aGlzLnNpemluZ1RhcmdldC5zY3JvbGxMZWZ0PXQsdGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsVG9wPWV9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19zaG91bGRQb3NpdGlvbilyZXR1cm47dGhpcy5fZGlzY292ZXJJbmZvKCksd2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uZmx1c2goKSx0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zaXppbmdUYXJnZXQuc3R5bGUuYm94U2l6aW5nPSJib3JkZXItYm94Iix0aGlzLnN0eWxlLmxlZnQ9IjBweCIsdGhpcy5zdHlsZS50b3A9IjBweCI7dmFyIHQ9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLnBvc2l0aW9uVGFyZ2V0KSxuPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pO2xldCBpLHIsbyxhO3RoaXMuZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFycyYmKGk9dGhpcy5zaXppbmdUYXJnZXQub2Zmc2V0V2lkdGgscj10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsbz10aGlzLnNpemluZ1RhcmdldC5jbGllbnRXaWR0aCxhPXRoaXMuc2l6aW5nVGFyZ2V0LmNsaWVudEhlaWdodCk7dmFyIHM9dGhpcy5fZml0SW5mby5tYXJnaW4sbD10aGlzLl9fZ2V0UG9zaXRpb24odGhpcy5fbG9jYWxlSG9yaXpvbnRhbEFsaWduLHRoaXMudmVydGljYWxBbGlnbix7d2lkdGg6dC53aWR0aCtzLmxlZnQrcy5yaWdodCxoZWlnaHQ6dC5oZWlnaHQrcy50b3Arcy5ib3R0b219LHQsZSxuKSxjPWwubGVmdCtzLmxlZnQsdT1sLnRvcCtzLnRvcCxoPU1hdGgubWluKG4ucmlnaHQtcy5yaWdodCxjK3Qud2lkdGgpLGQ9TWF0aC5taW4obi5ib3R0b20tcy5ib3R0b20sdSt0LmhlaWdodCk7Yz1NYXRoLm1heChuLmxlZnQrcy5sZWZ0LE1hdGgubWluKGMsaC10aGlzLl9maXRJbmZvLnNpemVkQnkubWluV2lkdGgpKSx1PU1hdGgubWF4KG4udG9wK3MudG9wLE1hdGgubWluKHUsZC10aGlzLl9maXRJbmZvLnNpemVkQnkubWluSGVpZ2h0KSk7Y29uc3QgcD1NYXRoLm1heChoLWMsdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbldpZHRoKSxmPU1hdGgubWF4KGQtdSx0aGlzLl9maXRJbmZvLnNpemVkQnkubWluSGVpZ2h0KTt0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhXaWR0aD1wKyJweCIsdGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4SGVpZ2h0PWYrInB4Ijtjb25zdCBtPWMtdC5sZWZ0LGc9dS10LnRvcDtpZih0aGlzLnN0eWxlLmxlZnQ9YCR7bX1weGAsdGhpcy5zdHlsZS50b3A9YCR7Z31weGAsdGhpcy5leHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzKXtjb25zdCB0PXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldEhlaWdodCxlPXQtdGhpcy5zaXppbmdUYXJnZXQuY2xpZW50SGVpZ2h0LShyLWEpO2lmKGU+MCl7Y29uc3QgaT1NYXRoLm1pbihuLmhlaWdodC1zLnRvcC1zLmJvdHRvbSxmK2UpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heEhlaWdodD1gJHtpfXB4YDtjb25zdCByPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldEhlaWdodCxvPXItdDtsZXQgYTsidG9wIj09PWwudmVydGljYWxBbGlnbj9hPWc6Im1pZGRsZSI9PT1sLnZlcnRpY2FsQWxpZ24/YT1nLW8vMjoiYm90dG9tIj09PWwudmVydGljYWxBbGlnbiYmKGE9Zy1vKSxhPU1hdGgubWF4KG4udG9wK3MudG9wLE1hdGgubWluKGEsbi5ib3R0b20tcy5ib3R0b20tcikpLHRoaXMuc3R5bGUudG9wPWAke2F9cHhgfWNvbnN0IGM9dGhpcy5zaXppbmdUYXJnZXQub2Zmc2V0V2lkdGgsdT1jLXRoaXMuc2l6aW5nVGFyZ2V0LmNsaWVudFdpZHRoLShpLW8pO2lmKHU+MCl7Y29uc3QgdD0oKCk9PntpZih2b2lkIDAhPT1kYSlyZXR1cm4gZGE7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtPYmplY3QuYXNzaWduKHQuc3R5bGUse292ZXJmbG93OiJhdXRvIixwb3NpdGlvbjoiZml4ZWQiLGxlZnQ6IjBweCIsdG9wOiIwcHgiLG1heFdpZHRoOiIxMDBweCIsbWF4SGVpZ2h0OiIxMDBweCJ9KTtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBlLnN0eWxlLndpZHRoPSIyMDBweCIsZS5zdHlsZS5oZWlnaHQ9IjIwMHB4Iix0LmFwcGVuZENoaWxkKGUpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksZGE9TWF0aC5hYnModC5vZmZzZXRXaWR0aC0xMDApPjE/dC5vZmZzZXRXaWR0aC10LmNsaWVudFdpZHRoOjAsZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KSxkYX0pKCksZT1NYXRoLm1pbihuLndpZHRoLXMubGVmdC1zLnJpZ2h0LHArdS10KTt0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhXaWR0aD1gJHtlfXB4YDtjb25zdCBpPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoK3Qscj1pLWM7bGV0IG87ImxlZnQiPT09bC5ob3Jpem9udGFsQWxpZ24/bz1tOiJjZW50ZXIiPT09bC5ob3Jpem9udGFsQWxpZ24/bz1tLXIvMjoicmlnaHQiPT09bC5ob3Jpem9udGFsQWxpZ24mJihvPW0tciksbz1NYXRoLm1heChuLmxlZnQrcy5sZWZ0LE1hdGgubWluKG8sbi5yaWdodC1zLnJpZ2h0LWkpKSx0aGlzLnN0eWxlLmxlZnQ9YCR7b31weGB9fX0sY29uc3RyYWluOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19zaG91bGRQb3NpdGlvbil7dGhpcy5fZGlzY292ZXJJbmZvKCk7dmFyIHQ9dGhpcy5fZml0SW5mbzt0LnBvc2l0aW9uZWRCeS52ZXJ0aWNhbGx5fHwodGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLHRoaXMuc3R5bGUudG9wPSIwcHgiKSx0LnBvc2l0aW9uZWRCeS5ob3Jpem9udGFsbHl8fCh0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zdHlsZS5sZWZ0PSIwcHgiKSx0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5ib3hTaXppbmc9ImJvcmRlci1ib3giO3ZhciBlPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC5zaXplZEJ5LmhlaWdodHx8dGhpcy5fX3NpemVEaW1lbnNpb24oZSx0LnBvc2l0aW9uZWRCeS52ZXJ0aWNhbGx5LCJ0b3AiLCJib3R0b20iLCJIZWlnaHQiKSx0LnNpemVkQnkud2lkdGh8fHRoaXMuX19zaXplRGltZW5zaW9uKGUsdC5wb3NpdGlvbmVkQnkuaG9yaXpvbnRhbGx5LCJsZWZ0IiwicmlnaHQiLCJXaWR0aCIpfX0sX3NpemVEaW1lbnNpb246ZnVuY3Rpb24odCxlLG4saSxyKXt0aGlzLl9fc2l6ZURpbWVuc2lvbih0LGUsbixpLHIpfSxfX3NpemVEaW1lbnNpb246ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgbz10aGlzLl9maXRJbmZvLGE9dGhpcy5fX2dldE5vcm1hbGl6ZWRSZWN0KHRoaXMuZml0SW50bykscz0iV2lkdGgiPT09cj9hLndpZHRoOmEuaGVpZ2h0LGw9ZT09PWksYz0ib2Zmc2V0IityO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlWyJtYXgiK3JdPXMtby5tYXJnaW5bbD9uOmldLShsP3MtdFtpXTp0W25dKS0odGhpc1tjXS10aGlzLnNpemluZ1RhcmdldFtjXSkrInB4In0sY2VudGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19zaG91bGRQb3NpdGlvbil7dGhpcy5fZGlzY292ZXJJbmZvKCk7dmFyIHQ9dGhpcy5fZml0SW5mby5wb3NpdGlvbmVkQnk7aWYoIXQudmVydGljYWxseXx8IXQuaG9yaXpvbnRhbGx5KXt0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdC52ZXJ0aWNhbGx5fHwodGhpcy5zdHlsZS50b3A9IjBweCIpLHQuaG9yaXpvbnRhbGx5fHwodGhpcy5zdHlsZS5sZWZ0PSIwcHgiKTt2YXIgZT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dGhpcy5fX2dldE5vcm1hbGl6ZWRSZWN0KHRoaXMuZml0SW50byk7dC52ZXJ0aWNhbGx5fHwodGhpcy5zdHlsZS50b3A9bi50b3AtZS50b3ArKG4uaGVpZ2h0LWUuaGVpZ2h0KS8yKyJweCIpLHQuaG9yaXpvbnRhbGx5fHwodGhpcy5zdHlsZS5sZWZ0PW4ubGVmdC1lLmxlZnQrKG4ud2lkdGgtZS53aWR0aCkvMisicHgiKX19fSxfX2dldE5vcm1hbGl6ZWRSZWN0OmZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHx0PT09d2luZG93P3t0b3A6MCxsZWZ0OjAsd2lkdGg6d2luZG93LmlubmVyV2lkdGgsaGVpZ2h0OndpbmRvdy5pbm5lckhlaWdodCxyaWdodDp3aW5kb3cuaW5uZXJXaWR0aCxib3R0b206d2luZG93LmlubmVySGVpZ2h0fTp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSxfX2dldE9mZnNjcmVlbkFyZWE6ZnVuY3Rpb24odCxlLG4pe3ZhciBpPU1hdGgubWluKDAsdC50b3ApK01hdGgubWluKDAsbi5ib3R0b20tKHQudG9wK2UuaGVpZ2h0KSkscj1NYXRoLm1pbigwLHQubGVmdCkrTWF0aC5taW4oMCxuLnJpZ2h0LSh0LmxlZnQrZS53aWR0aCkpO3JldHVybiBNYXRoLmFicyhpKSplLndpZHRoK01hdGguYWJzKHIpKmUuaGVpZ2h0fSxfX2dldFBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxuLGkscixvKXt2YXIgYSxzPVt7dmVydGljYWxBbGlnbjoidG9wIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDpyLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6ci5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOnIudG9wK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDpyLnJpZ2h0LW4ud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSx7dmVydGljYWxBbGlnbjoiYm90dG9tIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDpyLmJvdHRvbS1uLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6ci5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOnIuYm90dG9tLW4uaGVpZ2h0LXRoaXMudmVydGljYWxPZmZzZXQsbGVmdDpyLnJpZ2h0LW4ud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fV07aWYodGhpcy5ub092ZXJsYXApe2Zvcih2YXIgbD0wLGM9cy5sZW5ndGg7bDxjO2wrKyl7dmFyIHU9e307Zm9yKHZhciBoIGluIHNbbF0pdVtoXT1zW2xdW2hdO3MucHVzaCh1KX1zWzBdLnRvcD1zWzFdLnRvcCs9ci5oZWlnaHQsc1syXS50b3A9c1szXS50b3AtPXIuaGVpZ2h0LHNbNF0ubGVmdD1zWzZdLmxlZnQrPXIud2lkdGgsc1s1XS5sZWZ0PXNbN10ubGVmdC09ci53aWR0aH1mb3IoZT0iYXV0byI9PT1lP251bGw6ZSwodD0iYXV0byI9PT10P251bGw6dCkmJiJjZW50ZXIiIT09dHx8KHMucHVzaCh7dmVydGljYWxBbGlnbjoidG9wIixob3Jpem9udGFsQWxpZ246ImNlbnRlciIsdG9wOnIudG9wK3RoaXMudmVydGljYWxPZmZzZXQrKHRoaXMubm9PdmVybGFwP3IuaGVpZ2h0OjApLGxlZnQ6ci5sZWZ0LWkud2lkdGgvMityLndpZHRoLzIrdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSkscy5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJib3R0b20iLGhvcml6b250YWxBbGlnbjoiY2VudGVyIix0b3A6ci5ib3R0b20tbi5oZWlnaHQtdGhpcy52ZXJ0aWNhbE9mZnNldC0odGhpcy5ub092ZXJsYXA/ci5oZWlnaHQ6MCksbGVmdDpyLmxlZnQtaS53aWR0aC8yK3Iud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KSksZSYmIm1pZGRsZSIhPT1lfHwocy5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoibGVmdCIsdG9wOnIudG9wLWkuaGVpZ2h0LzIrci5oZWlnaHQvMit0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6ci5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldCsodGhpcy5ub092ZXJsYXA/ci53aWR0aDowKX0pLHMucHVzaCh7dmVydGljYWxBbGlnbjoibWlkZGxlIixob3Jpem9udGFsQWxpZ246InJpZ2h0Iix0b3A6ci50b3AtaS5oZWlnaHQvMityLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDpyLnJpZ2h0LW4ud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0LSh0aGlzLm5vT3ZlcmxhcD9yLndpZHRoOjApfSkpLCJtaWRkbGUiPT09ZSYmImNlbnRlciI9PT10JiZzLnB1c2goe3ZlcnRpY2FsQWxpZ246Im1pZGRsZSIsaG9yaXpvbnRhbEFsaWduOiJjZW50ZXIiLHRvcDpyLnRvcC1pLmhlaWdodC8yK3IuaGVpZ2h0LzIrdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OnIubGVmdC1pLndpZHRoLzIrci53aWR0aC8yK3RoaXMuaG9yaXpvbnRhbE9mZnNldH0pLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGQ9c1tsXSxwPWQudmVydGljYWxBbGlnbj09PWUsZj1kLmhvcml6b250YWxBbGlnbj09PXQ7aWYoIXRoaXMuZHluYW1pY0FsaWduJiYhdGhpcy5ub092ZXJsYXAmJnAmJmYpe2E9ZDticmVha312YXIgbT0oIWV8fHApJiYoIXR8fGYpO2lmKHRoaXMuZHluYW1pY0FsaWdufHxtKXtpZihkLm9mZnNjcmVlbkFyZWE9dGhpcy5fX2dldE9mZnNjcmVlbkFyZWEoZCxuLG8pLDA9PT1kLm9mZnNjcmVlbkFyZWEmJm0pe2E9ZDticmVha312YXIgZz1kLm9mZnNjcmVlbkFyZWEtKGE9YXx8ZCkub2Zmc2NyZWVuQXJlYTsoZzwwfHwwPT09ZyYmKHB8fGYpKSYmKGE9ZCl9fXJldHVybiBhfX07Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwp2YXIgZmE9RWxlbWVudC5wcm90b3R5cGUsbWE9ZmEubWF0Y2hlc3x8ZmEubWF0Y2hlc1NlbGVjdG9yfHxmYS5tb3pNYXRjaGVzU2VsZWN0b3J8fGZhLm1zTWF0Y2hlc1NlbGVjdG9yfHxmYS5vTWF0Y2hlc1NlbGVjdG9yfHxmYS53ZWJraXRNYXRjaGVzU2VsZWN0b3I7Y29uc3QgZ2E9bmV3IGNsYXNze2dldFRhYmJhYmxlTm9kZXModCl7dmFyIGU9W107cmV0dXJuIHRoaXMuX2NvbGxlY3RUYWJiYWJsZU5vZGVzKHQsZSk/dGhpcy5fc29ydEJ5VGFiSW5kZXgoZSk6ZX1pc0ZvY3VzYWJsZSh0KXtyZXR1cm4gbWEuY2FsbCh0LCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBvYmplY3QiKT9tYS5jYWxsKHQsIjpub3QoW2Rpc2FibGVkXSkiKTptYS5jYWxsKHQsImFbaHJlZl0sIGFyZWFbaHJlZl0sIGlmcmFtZSwgW3RhYmluZGV4XSwgW2NvbnRlbnRFZGl0YWJsZV0iKX1pc1RhYmJhYmxlKHQpe3JldHVybiB0aGlzLmlzRm9jdXNhYmxlKHQpJiZtYS5jYWxsKHQsJzpub3QoW3RhYmluZGV4PSItMSJdKScpJiZ0aGlzLl9pc1Zpc2libGUodCl9X25vcm1hbGl6ZWRUYWJJbmRleCh0KXtpZih0aGlzLmlzRm9jdXNhYmxlKHQpKXt2YXIgZT10LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8MDtyZXR1cm4gTnVtYmVyKGUpfXJldHVybi0xfV9jb2xsZWN0VGFiYmFibGVOb2Rlcyh0LGUpe2lmKHQubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4hMTt2YXIgbj10O2lmKCF0aGlzLl9pc1Zpc2libGUobikpcmV0dXJuITE7dmFyIGkscj10aGlzLl9ub3JtYWxpemVkVGFiSW5kZXgobiksbz1yPjA7cj49MCYmZS5wdXNoKG4pLGk9ImNvbnRlbnQiPT09bi5sb2NhbE5hbWV8fCJzbG90Ij09PW4ubG9jYWxOYW1lP1lpKG4pLmdldERpc3RyaWJ1dGVkTm9kZXMoKTpZaShuLnJvb3R8fG4pLmNoaWxkcmVuO2Zvcih2YXIgYT0wO2E8aS5sZW5ndGg7YSsrKW89dGhpcy5fY29sbGVjdFRhYmJhYmxlTm9kZXMoaVthXSxlKXx8bztyZXR1cm4gb31faXNWaXNpYmxlKHQpe3ZhciBlPXQuc3R5bGU7cmV0dXJuImhpZGRlbiIhPT1lLnZpc2liaWxpdHkmJiJub25lIiE9PWUuZGlzcGxheSYmImhpZGRlbiIhPT0oZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KSkudmlzaWJpbGl0eSYmIm5vbmUiIT09ZS5kaXNwbGF5fV9zb3J0QnlUYWJJbmRleCh0KXt2YXIgZT10Lmxlbmd0aDtpZihlPDIpcmV0dXJuIHQ7dmFyIG49TWF0aC5jZWlsKGUvMiksaT10aGlzLl9zb3J0QnlUYWJJbmRleCh0LnNsaWNlKDAsbikpLHI9dGhpcy5fc29ydEJ5VGFiSW5kZXgodC5zbGljZShuKSk7cmV0dXJuIHRoaXMuX21lcmdlU29ydEJ5VGFiSW5kZXgoaSxyKX1fbWVyZ2VTb3J0QnlUYWJJbmRleCh0LGUpe2Zvcih2YXIgbj1bXTt0Lmxlbmd0aD4wJiZlLmxlbmd0aD4wOyl0aGlzLl9oYXNMb3dlclRhYk9yZGVyKHRbMF0sZVswXSk/bi5wdXNoKGUuc2hpZnQoKSk6bi5wdXNoKHQuc2hpZnQoKSk7cmV0dXJuIG4uY29uY2F0KHQsZSl9X2hhc0xvd2VyVGFiT3JkZXIodCxlKXt2YXIgbj1NYXRoLm1heCh0LnRhYkluZGV4LDApLGk9TWF0aC5tYXgoZS50YWJJbmRleCwwKTtyZXR1cm4gMD09PW58fDA9PT1pP2k+bjpuPml9fTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovUnIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLWJhY2tncm91bmQtY29sb3IsICMwMDApOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIEBhcHBseSAtLWlyb24tb3ZlcmxheS1iYWNrZHJvcDsKICAgICAgfQoKICAgICAgOmhvc3QoLm9wZW5lZCkgewogICAgICAgIG9wYWNpdHk6IHZhcigtLWlyb24tb3ZlcmxheS1iYWNrZHJvcC1vcGFjaXR5LCAwLjYpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIEBhcHBseSAtLWlyb24tb3ZlcmxheS1iYWNrZHJvcC1vcGVuZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLW92ZXJsYXktYmFja2Ryb3AiLHByb3BlcnRpZXM6e29wZW5lZDp7cmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifX0sbGlzdGVuZXJzOnt0cmFuc2l0aW9uZW5kOiJfb25UcmFuc2l0aW9uZW5kIn0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX19vcGVuZWRSYWY9bnVsbH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5fb3BlbmVkQ2hhbmdlZCh0aGlzLm9wZW5lZCl9LHByZXBhcmU6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmIXRoaXMucGFyZW50Tm9kZSYmWWkoZG9jdW1lbnQuYm9keSkuYXBwZW5kQ2hpbGQodGhpcyl9LG9wZW46ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD0hMH0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD0hMX0sY29tcGxldGU6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZHx8dGhpcy5wYXJlbnROb2RlIT09ZG9jdW1lbnQuYm9keXx8WWkodGhpcy5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzKX0sX29uVHJhbnNpdGlvbmVuZDpmdW5jdGlvbih0KXt0JiZ0LnRhcmdldD09PXRoaXMmJnRoaXMuY29tcGxldGUoKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24odCl7aWYodCl0aGlzLnByZXBhcmUoKTtlbHNle3ZhciBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpOyIwcyIhPT1lLnRyYW5zaXRpb25EdXJhdGlvbiYmMCE9ZS5vcGFjaXR5fHx0aGlzLmNvbXBsZXRlKCl9dGhpcy5pc0F0dGFjaGVkJiYodGhpcy5fX29wZW5lZFJhZiYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fb3BlbmVkUmFmKSx0aGlzLl9fb3BlbmVkUmFmPW51bGwpLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX19vcGVuZWRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3RoaXMuX19vcGVuZWRSYWY9bnVsbCx0aGlzLnRvZ2dsZUNsYXNzKCJvcGVuZWQiLHRoaXMub3BlbmVkKX0uYmluZCh0aGlzKSkpfX0pO2NvbnN0IF9hPW5ldwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9vdmVybGF5cz1bXSx0aGlzLl9taW5pbXVtWj0xMDEsdGhpcy5fYmFja2Ryb3BFbGVtZW50PW51bGwsaWkoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJ0YXAiLChmdW5jdGlvbigpe30pKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLHRoaXMuX29uQ2FwdHVyZUNsaWNrLmJpbmQodGhpcyksITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9vbkNhcHR1cmVGb2N1cy5iaW5kKHRoaXMpLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbkNhcHR1cmVLZXlEb3duLmJpbmQodGhpcyksITApfWdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fHwodGhpcy5fYmFja2Ryb3BFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlyb24tb3ZlcmxheS1iYWNrZHJvcCIpKSx0aGlzLl9iYWNrZHJvcEVsZW1lbnR9Z2V0IGRlZXBBY3RpdmVFbGVtZW50KCl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtmb3IodCYmdCBpbnN0YW5jZW9mIEVsZW1lbnQhPTB8fCh0PWRvY3VtZW50LmJvZHkpO3Qucm9vdCYmWWkodC5yb290KS5hY3RpdmVFbGVtZW50Oyl0PVlpKHQucm9vdCkuYWN0aXZlRWxlbWVudDtyZXR1cm4gdH1fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQodCl7dmFyIGU9dGhpcy5fb3ZlcmxheXNbdF07aWYoZSl7dmFyIG49dGhpcy5fb3ZlcmxheXMubGVuZ3RoLTEsaT10aGlzLl9vdmVybGF5c1tuXTtpZihpJiZ0aGlzLl9zaG91bGRCZUJlaGluZE92ZXJsYXkoZSxpKSYmbi0tLCEodD49bikpe3ZhciByPU1hdGgubWF4KHRoaXMuY3VycmVudE92ZXJsYXlaKCksdGhpcy5fbWluaW11bVopO2Zvcih0aGlzLl9nZXRaKGUpPD1yJiZ0aGlzLl9hcHBseU92ZXJsYXlaKGUscik7dDxuOyl0aGlzLl9vdmVybGF5c1t0XT10aGlzLl9vdmVybGF5c1t0KzFdLHQrKzt0aGlzLl9vdmVybGF5c1tuXT1lfX19YWRkT3JSZW1vdmVPdmVybGF5KHQpe3Qub3BlbmVkP3RoaXMuYWRkT3ZlcmxheSh0KTp0aGlzLnJlbW92ZU92ZXJsYXkodCl9YWRkT3ZlcmxheSh0KXt2YXIgZT10aGlzLl9vdmVybGF5cy5pbmRleE9mKHQpO2lmKGU+PTApcmV0dXJuIHRoaXMuX2JyaW5nT3ZlcmxheUF0SW5kZXhUb0Zyb250KGUpLHZvaWQgdGhpcy50cmFja0JhY2tkcm9wKCk7dmFyIG49dGhpcy5fb3ZlcmxheXMubGVuZ3RoLGk9dGhpcy5fb3ZlcmxheXNbbi0xXSxyPU1hdGgubWF4KHRoaXMuX2dldFooaSksdGhpcy5fbWluaW11bVopLG89dGhpcy5fZ2V0Wih0KTtpJiZ0aGlzLl9zaG91bGRCZUJlaGluZE92ZXJsYXkodCxpKSYmKHRoaXMuX2FwcGx5T3ZlcmxheVooaSxyKSxuLS0scj1NYXRoLm1heCh0aGlzLl9nZXRaKHRoaXMuX292ZXJsYXlzW24tMV0pLHRoaXMuX21pbmltdW1aKSksbzw9ciYmdGhpcy5fYXBwbHlPdmVybGF5Wih0LHIpLHRoaXMuX292ZXJsYXlzLnNwbGljZShuLDAsdCksdGhpcy50cmFja0JhY2tkcm9wKCl9cmVtb3ZlT3ZlcmxheSh0KXt2YXIgZT10aGlzLl9vdmVybGF5cy5pbmRleE9mKHQpOy0xIT09ZSYmKHRoaXMuX292ZXJsYXlzLnNwbGljZShlLDEpLHRoaXMudHJhY2tCYWNrZHJvcCgpKX1jdXJyZW50T3ZlcmxheSgpe3JldHVybiB0aGlzLl9vdmVybGF5c1t0aGlzLl9vdmVybGF5cy5sZW5ndGgtMV19Y3VycmVudE92ZXJsYXlaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5jdXJyZW50T3ZlcmxheSgpKX1lbnN1cmVNaW5pbXVtWih0KXt0aGlzLl9taW5pbXVtWj1NYXRoLm1heCh0aGlzLl9taW5pbXVtWix0KX1mb2N1c092ZXJsYXkoKXt2YXIgdD10aGlzLmN1cnJlbnRPdmVybGF5KCk7dCYmdC5fYXBwbHlGb2N1cygpfXRyYWNrQmFja2Ryb3AoKXt2YXIgdD10aGlzLl9vdmVybGF5V2l0aEJhY2tkcm9wKCk7KHR8fHRoaXMuX2JhY2tkcm9wRWxlbWVudCkmJih0aGlzLmJhY2tkcm9wRWxlbWVudC5zdHlsZS56SW5kZXg9dGhpcy5fZ2V0Wih0KS0xLHRoaXMuYmFja2Ryb3BFbGVtZW50Lm9wZW5lZD0hIXQsdGhpcy5iYWNrZHJvcEVsZW1lbnQucHJlcGFyZSgpKX1nZXRCYWNrZHJvcHMoKXtmb3IodmFyIHQ9W10sZT0wO2U8dGhpcy5fb3ZlcmxheXMubGVuZ3RoO2UrKyl0aGlzLl9vdmVybGF5c1tlXS53aXRoQmFja2Ryb3AmJnQucHVzaCh0aGlzLl9vdmVybGF5c1tlXSk7cmV0dXJuIHR9YmFja2Ryb3BaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5fb3ZlcmxheVdpdGhCYWNrZHJvcCgpKS0xfV9vdmVybGF5V2l0aEJhY2tkcm9wKCl7Zm9yKHZhciB0PXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKHRoaXMuX292ZXJsYXlzW3RdLndpdGhCYWNrZHJvcClyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdF19X2dldFoodCl7dmFyIGU9dGhpcy5fbWluaW11bVo7aWYodCl7dmFyIG49TnVtYmVyKHQuc3R5bGUuekluZGV4fHx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS56SW5kZXgpO249PW4mJihlPW4pfXJldHVybiBlfV9zZXRaKHQsZSl7dC5zdHlsZS56SW5kZXg9ZX1fYXBwbHlPdmVybGF5Wih0LGUpe3RoaXMuX3NldFoodCxlKzIpfV9vdmVybGF5SW5QYXRoKHQpe3Q9dHx8W107Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXS5fbWFuYWdlcj09PXRoaXMpcmV0dXJuIHRbZV19X29uQ2FwdHVyZUNsaWNrKHQpe3ZhciBlPXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xO2lmKC0xIT09ZSlmb3IodmFyIG4saT1ZaSh0KS5wYXRoOyhuPXRoaXMuX292ZXJsYXlzW2VdKSYmdGhpcy5fb3ZlcmxheUluUGF0aChpKSE9PW4mJihuLl9vbkNhcHR1cmVDbGljayh0KSxuLmFsbG93Q2xpY2tUaHJvdWdoKTspZS0tfV9vbkNhcHR1cmVGb2N1cyh0KXt2YXIgZT10aGlzLmN1cnJlbnRPdmVybGF5KCk7ZSYmZS5fb25DYXB0dXJlRm9jdXModCl9X29uQ2FwdHVyZUtleURvd24odCl7dmFyIGU9dGhpcy5jdXJyZW50T3ZlcmxheSgpO2UmJih6by5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXModCwiZXNjIik/ZS5fb25DYXB0dXJlRXNjKHQpOnpvLmtleWJvYXJkRXZlbnRNYXRjaGVzS2V5cyh0LCJ0YWIiKSYmZS5fb25DYXB0dXJlVGFiKHQpKX1fc2hvdWxkQmVCZWhpbmRPdmVybGF5KHQsZSl7cmV0dXJuIXQuYWx3YXlzT25Ub3AmJmUuYWx3YXlzT25Ub3B9fTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovdmFyIHlhLHZhLGJhPXtwYWdlWDowLHBhZ2VZOjB9LHhhPW51bGwsd2E9W10sU2E9WyJ3aGVlbCIsIm1vdXNld2hlZWwiLCJET01Nb3VzZVNjcm9sbCIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiXTtmdW5jdGlvbiBNYSh0KXtFYS5pbmRleE9mKHQpPj0wfHwoMD09PUVhLmxlbmd0aCYmKGZ1bmN0aW9uIGUoKXt5YT15YXx8VGEuYmluZCh2b2lkIDApO2Zvcih2YXIgdD0wLGU9U2EubGVuZ3RoO3Q8ZTt0KyspZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihTYVt0XSx5YSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSl9KSgpLEVhLnB1c2godCksdmE9RWFbRWEubGVuZ3RoLTFdKX1jb25zdCBFYT1bXTtmdW5jdGlvbiBUYSh0KXtpZih0LmNhbmNlbGFibGUmJihmdW5jdGlvbiBlKHQpe3ZhciBlPVlpKHQpLnJvb3RUYXJnZXQ7aWYoInRvdWNobW92ZSIhPT10LnR5cGUmJnhhIT09ZSYmKHhhPWUsd2E9KGZ1bmN0aW9uIG4odCl7Zm9yKHZhciBlPVtdLG49dC5pbmRleE9mKHZhKSxpPTA7aTw9bjtpKyspaWYodFtpXS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXt2YXIgcj10W2ldLG89ci5zdHlsZTsic2Nyb2xsIiE9PW8ub3ZlcmZsb3cmJiJhdXRvIiE9PW8ub3ZlcmZsb3cmJihvPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHIpKSwic2Nyb2xsIiE9PW8ub3ZlcmZsb3cmJiJhdXRvIiE9PW8ub3ZlcmZsb3d8fGUucHVzaChyKX1yZXR1cm4gZX0pKFlpKHQpLnBhdGgpKSwhd2EubGVuZ3RoKXJldHVybiEwO2lmKCJ0b3VjaHN0YXJ0Ij09PXQudHlwZSlyZXR1cm4hMTt2YXIgaT0oZnVuY3Rpb24gcih0KXt2YXIgZT17ZGVsdGFYOnQuZGVsdGFYLGRlbHRhWTp0LmRlbHRhWX07aWYoImRlbHRhWCJpbiB0KTtlbHNlIGlmKCJ3aGVlbERlbHRhWCJpbiB0JiYid2hlZWxEZWx0YVkiaW4gdCllLmRlbHRhWD0tdC53aGVlbERlbHRhWCxlLmRlbHRhWT0tdC53aGVlbERlbHRhWTtlbHNlIGlmKCJ3aGVlbERlbHRhImluIHQpZS5kZWx0YVg9MCxlLmRlbHRhWT0tdC53aGVlbERlbHRhO2Vsc2UgaWYoImF4aXMiaW4gdCllLmRlbHRhWD0xPT09dC5heGlzP3QuZGV0YWlsOjAsZS5kZWx0YVk9Mj09PXQuYXhpcz90LmRldGFpbDowO2Vsc2UgaWYodC50YXJnZXRUb3VjaGVzKXt2YXIgbj10LnRhcmdldFRvdWNoZXNbMF07ZS5kZWx0YVg9YmEucGFnZVgtbi5wYWdlWCxlLmRlbHRhWT1iYS5wYWdlWS1uLnBhZ2VZfXJldHVybiBlfQovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8pKHQpO3JldHVybiEoZnVuY3Rpb24gbyh0LGUsbil7aWYoZXx8bilmb3IodmFyIGk9TWF0aC5hYnMobik+PU1hdGguYWJzKGUpLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXTtpZihpP248MD9vLnNjcm9sbFRvcD4wOm8uc2Nyb2xsVG9wPG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0OmU8MD9vLnNjcm9sbExlZnQ+MDpvLnNjcm9sbExlZnQ8by5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoKXJldHVybiBvfX0pKHdhLGkuZGVsdGFYLGkuZGVsdGFZKX0pKHQpJiZ0LnByZXZlbnREZWZhdWx0KCksdC50YXJnZXRUb3VjaGVzKXt2YXIgbj10LnRhcmdldFRvdWNoZXNbMF07YmEucGFnZVg9bi5wYWdlWCxiYS5wYWdlWT1uLnBhZ2VZfX1jb25zdCBDYT17cHJvcGVydGllczp7b3BlbmVkOntvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQiLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LGNhbmNlbGVkOntvYnNlcnZlcjoiX2NhbmNlbGVkQ2hhbmdlZCIscmVhZE9ubHk6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExfSx3aXRoQmFja2Ryb3A6e29ic2VydmVyOiJfd2l0aEJhY2tkcm9wQ2hhbmdlZCIsdHlwZTpCb29sZWFufSxub0F1dG9Gb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0NhbmNlbE9uRXNjS2V5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2xvc2luZ1JlYXNvbjp7dHlwZTpPYmplY3R9LHJlc3RvcmVGb2N1c09uQ2xvc2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYWxsb3dDbGlja1Rocm91Z2g6e3R5cGU6Qm9vbGVhbn0sYWx3YXlzT25Ub3A6e3R5cGU6Qm9vbGVhbn0sc2Nyb2xsQWN0aW9uOnt0eXBlOlN0cmluZ30sX21hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOl9hfSxfZm9jdXNlZENoaWxkOnt0eXBlOk9iamVjdH19LGxpc3RlbmVyczp7Imlyb24tcmVzaXplIjoiX29uSXJvblJlc2l6ZSJ9LG9ic2VydmVyczpbIl9fdXBkYXRlU2Nyb2xsT2JzZXJ2ZXJzKGlzQXR0YWNoZWQsIG9wZW5lZCwgc2Nyb2xsQWN0aW9uKSJdLGdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fbWFuYWdlci5iYWNrZHJvcEVsZW1lbnR9LGdldCBfZm9jdXNOb2RlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWRDaGlsZHx8WWkodGhpcykucXVlcnlTZWxlY3RvcigiW2F1dG9mb2N1c10iKXx8dGhpc30sZ2V0IF9mb2N1c2FibGVOb2Rlcygpe3JldHVybiBnYS5nZXRUYWJiYWJsZU5vZGVzKHRoaXMpfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITEsdGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZT10aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9bnVsbCx0aGlzLl9fcmFmcz17fSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT1udWxsLHRoaXMuX19zY3JvbGxUb3A9dGhpcy5fX3Njcm9sbExlZnQ9bnVsbCx0aGlzLl9fb25DYXB0dXJlU2Nyb2xsPXRoaXMuX19vbkNhcHR1cmVTY3JvbGwuYmluZCh0aGlzKSx0aGlzLl9fcm9vdE5vZGVzPW51bGwsdGhpcy5fZW5zdXJlU2V0dXAoKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5fb3BlbmVkQ2hhbmdlZCh0aGlzLm9wZW5lZCksdGhpcy5fb2JzZXJ2ZXI9WWkodGhpcykub2JzZXJ2ZU5vZGVzKHRoaXMuX29uTm9kZXNDaGFuZ2UpfSxkZXRhY2hlZDpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9vYnNlcnZlciYmWWkodGhpcykudW5vYnNlcnZlTm9kZXModGhpcy5fb2JzZXJ2ZXIpLHRoaXMuX29ic2VydmVyPW51bGwsdGhpcy5fX3JhZnMpbnVsbCE9PXRoaXMuX19yYWZzW3RdJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fcmFmc1t0XSk7dGhpcy5fX3JhZnM9e30sdGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX19pc0FuaW1hdGluZyYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOih0aGlzLl9hcHBseUZvY3VzKCksdGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCkpKX0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2FuY2VsZWQoITEpLHRoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sb3BlbjpmdW5jdGlvbigpe3RoaXMuX3NldENhbmNlbGVkKCExKSx0aGlzLm9wZW5lZD0hMH0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRDYW5jZWxlZCghMSksdGhpcy5vcGVuZWQ9ITF9LGNhbmNlbDpmdW5jdGlvbih0KXt0aGlzLmZpcmUoImlyb24tb3ZlcmxheS1jYW5jZWxlZCIsdCx7Y2FuY2VsYWJsZTohMH0pLmRlZmF1bHRQcmV2ZW50ZWR8fCh0aGlzLl9zZXRDYW5jZWxlZCghMCksdGhpcy5vcGVuZWQ9ITEpfSxpbnZhbGlkYXRlVGFiYmFibGVzOmZ1bmN0aW9uKCl7dGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZT10aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9bnVsbH0sX2Vuc3VyZVNldHVwOmZ1bmN0aW9uKCl7dGhpcy5fb3ZlcmxheVNldHVwfHwodGhpcy5fb3ZlcmxheVNldHVwPSEwLHRoaXMuc3R5bGUub3V0bGluZT0ibm9uZSIsdGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIil9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKHQpe3Q/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIik6dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHRoaXMuaXNBdHRhY2hlZCYmKHRoaXMuX19pc0FuaW1hdGluZz0hMCx0aGlzLl9fZGVyYWYoIl9fb3BlbmVkQ2hhbmdlZCIsdGhpcy5fX29wZW5lZENoYW5nZWQpKX0sX2NhbmNlbGVkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuY2xvc2luZ1JlYXNvbj10aGlzLmNsb3NpbmdSZWFzb258fHt9LHRoaXMuY2xvc2luZ1JlYXNvbi5jYW5jZWxlZD10aGlzLmNhbmNlbGVkfSxfd2l0aEJhY2tkcm9wQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMud2l0aEJhY2tkcm9wJiYhdGhpcy5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iik/KHRoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksdGhpcy5fX3Nob3VsZFJlbW92ZVRhYkluZGV4PSEwKTp0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXgmJih0aGlzLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITEpLHRoaXMub3BlbmVkJiZ0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX21hbmFnZXIudHJhY2tCYWNrZHJvcCgpfSxfcHJlcGFyZVJlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuX19yZXN0b3JlRm9jdXNOb2RlPXRoaXMuX21hbmFnZXIuZGVlcEFjdGl2ZUVsZW1lbnQsdGhpcy5fcHJlcGFyZVBvc2l0aW9uaW5nKCksdGhpcy5yZWZpdCgpLHRoaXMuX2ZpbmlzaFBvc2l0aW9uaW5nKCksdGhpcy5ub0F1dG9Gb2N1cyYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuX2ZvY3VzTm9kZSYmKHRoaXMuX2ZvY3VzTm9kZS5ibHVyKCksdGhpcy5fX3Jlc3RvcmVGb2N1c05vZGUuZm9jdXMoKSl9LF9yZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKX0sX3JlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpfSxfZmluaXNoUmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9faXNBbmltYXRpbmc9ITEsdGhpcy5maXJlKCJpcm9uLW92ZXJsYXktb3BlbmVkIil9LF9maW5pc2hSZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuc3R5bGUuekluZGV4PSIiLHRoaXMubm90aWZ5UmVzaXplKCksdGhpcy5fX2lzQW5pbWF0aW5nPSExLHRoaXMuZmlyZSgiaXJvbi1vdmVybGF5LWNsb3NlZCIsdGhpcy5jbG9zaW5nUmVhc29uKX0sX3ByZXBhcmVQb3NpdGlvbmluZzpmdW5jdGlvbigpe3RoaXMuc3R5bGUudHJhbnNpdGlvbj10aGlzLnN0eWxlLndlYmtpdFRyYW5zaXRpb249Im5vbmUiLHRoaXMuc3R5bGUudHJhbnNmb3JtPXRoaXMuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJub25lIix0aGlzLnN0eWxlLmRpc3BsYXk9IiJ9LF9maW5pc2hQb3NpdGlvbmluZzpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxUb3AsdGhpcy5zdHlsZS50cmFuc2l0aW9uPXRoaXMuc3R5bGUud2Via2l0VHJhbnNpdGlvbj0iIix0aGlzLnN0eWxlLnRyYW5zZm9ybT10aGlzLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0iIix0aGlzLnN0eWxlLmRpc3BsYXk9IiIsdGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxUb3B9LF9hcHBseUZvY3VzOmZ1bmN0aW9uKCl7aWYodGhpcy5vcGVuZWQpdGhpcy5ub0F1dG9Gb2N1c3x8dGhpcy5fZm9jdXNOb2RlLmZvY3VzKCk7ZWxzZXtpZih0aGlzLnJlc3RvcmVGb2N1c09uQ2xvc2UmJnRoaXMuX19yZXN0b3JlRm9jdXNOb2RlKXt2YXIgdD10aGlzLl9tYW5hZ2VyLmRlZXBBY3RpdmVFbGVtZW50Oyh0PT09ZG9jdW1lbnQuYm9keXx8QWEodGhpcyx0KSkmJnRoaXMuX19yZXN0b3JlRm9jdXNOb2RlLmZvY3VzKCl9dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9bnVsbCx0aGlzLl9mb2N1c05vZGUuYmx1cigpLHRoaXMuX2ZvY3VzZWRDaGlsZD1udWxsfX0sX29uQ2FwdHVyZUNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMubm9DYW5jZWxPbk91dHNpZGVDbGlja3x8dGhpcy5jYW5jZWwodCl9LF9vbkNhcHR1cmVGb2N1czpmdW5jdGlvbih0KXtpZih0aGlzLndpdGhCYWNrZHJvcCl7dmFyIGU9WWkodCkucGF0aDstMT09PWUuaW5kZXhPZih0aGlzKT8odC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9hcHBseUZvY3VzKCkpOnRoaXMuX2ZvY3VzZWRDaGlsZD1lWzBdfX0sX29uQ2FwdHVyZUVzYzpmdW5jdGlvbih0KXt0aGlzLm5vQ2FuY2VsT25Fc2NLZXl8fHRoaXMuY2FuY2VsKHQpfSxfb25DYXB0dXJlVGFiOmZ1bmN0aW9uKHQpe2lmKHRoaXMud2l0aEJhY2tkcm9wKXt0aGlzLl9fZW5zdXJlRmlyc3RMYXN0Rm9jdXNhYmxlcygpO3ZhciBlPXQuc2hpZnRLZXksbj1lP3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU6dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlLGk9ZT90aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU6dGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZSxyPSExO2lmKG49PT1pKXI9ITA7ZWxzZXt2YXIgbz10aGlzLl9tYW5hZ2VyLmRlZXBBY3RpdmVFbGVtZW50O3I9bz09PW58fG89PT10aGlzfXImJih0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZENoaWxkPWksdGhpcy5fYXBwbHlGb2N1cygpKX19LF9vbklyb25SZXNpemU6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmIXRoaXMuX19pc0FuaW1hdGluZyYmdGhpcy5fX2RlcmFmKCJyZWZpdCIsdGhpcy5yZWZpdCl9LF9vbk5vZGVzQ2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLl9faXNBbmltYXRpbmcmJih0aGlzLmludmFsaWRhdGVUYWJiYWJsZXMoKSx0aGlzLm5vdGlmeVJlc2l6ZSgpKX0sX19lbnN1cmVGaXJzdExhc3RGb2N1c2FibGVzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZm9jdXNhYmxlTm9kZXM7dGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZT10WzBdLHRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZT10W3QubGVuZ3RoLTFdfSxfX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD8odGhpcy5fcHJlcGFyZVJlbmRlck9wZW5lZCgpLHRoaXMuX21hbmFnZXIuYWRkT3ZlcmxheSh0aGlzKSx0aGlzLl9hcHBseUZvY3VzKCksdGhpcy5fcmVuZGVyT3BlbmVkKCkpOih0aGlzLl9tYW5hZ2VyLnJlbW92ZU92ZXJsYXkodGhpcyksdGhpcy5fYXBwbHlGb2N1cygpLHRoaXMuX3JlbmRlckNsb3NlZCgpKX0sX19kZXJhZjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX19yYWZzO251bGwhPT1uW3RdJiZjYW5jZWxBbmltYXRpb25GcmFtZShuW3RdKSxuW3RdPXJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBpKCl7blt0XT1udWxsLGUuY2FsbCh0aGlzKX0uYmluZCh0aGlzKSl9LF9fdXBkYXRlU2Nyb2xsT2JzZXJ2ZXJzOmZ1bmN0aW9uKHQsZSxuKXt0JiZlJiZ0aGlzLl9faXNWYWxpZFNjcm9sbEFjdGlvbihuKT8oImxvY2siPT09biYmKHRoaXMuX19zYXZlU2Nyb2xsUG9zaXRpb24oKSxNYSh0aGlzKSksdGhpcy5fX2FkZFNjcm9sbExpc3RlbmVycygpKTooKGZ1bmN0aW9uIGkodCl7dmFyIGU9RWEuaW5kZXhPZih0KTstMSE9PWUmJihFYS5zcGxpY2UoZSwxKSx2YT1FYVtFYS5sZW5ndGgtMV0sMD09PUVhLmxlbmd0aCYmKGZ1bmN0aW9uIG4oKXtmb3IodmFyIHQ9MCxlPVNhLmxlbmd0aDt0PGU7dCsrKWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoU2FbdF0seWEse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pfSkoKSl9KSh0aGlzKSx0aGlzLl9fcmVtb3ZlU2Nyb2xsTGlzdGVuZXJzKCkpfSxfX2FkZFNjcm9sbExpc3RlbmVyczpmdW5jdGlvbigpe2lmKCF0aGlzLl9fcm9vdE5vZGVzKXtpZih0aGlzLl9fcm9vdE5vZGVzPVtdLG0pZm9yKHZhciB0PXRoaXM7dDspdC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmdC5ob3N0JiZ0aGlzLl9fcm9vdE5vZGVzLnB1c2godCksdD10Lmhvc3R8fHQuYXNzaWduZWRTbG90fHx0LnBhcmVudE5vZGU7dGhpcy5fX3Jvb3ROb2Rlcy5wdXNoKGRvY3VtZW50KX10aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9fb25DYXB0dXJlU2Nyb2xsLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITB9KX0pLHRoaXMpfSxfX3JlbW92ZVNjcm9sbExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX19yb290Tm9kZXMmJnRoaXMuX19yb290Tm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSksdGhpcyksdGhpcy5pc0F0dGFjaGVkfHwodGhpcy5fX3Jvb3ROb2Rlcz1udWxsKX0sX19pc1ZhbGlkU2Nyb2xsQWN0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiJsb2NrIj09PXR8fCJyZWZpdCI9PT10fHwiY2FuY2VsIj09PXR9LF9fb25DYXB0dXJlU2Nyb2xsOmZ1bmN0aW9uKHQpe2lmKCEodGhpcy5fX2lzQW5pbWF0aW5nfHxZaSh0KS5wYXRoLmluZGV4T2YodGhpcyk+PTApKXN3aXRjaCh0aGlzLnNjcm9sbEFjdGlvbil7Y2FzZSJsb2NrIjp0aGlzLl9fcmVzdG9yZVNjcm9sbFBvc2l0aW9uKCk7YnJlYWs7Y2FzZSJyZWZpdCI6dGhpcy5fX2RlcmFmKCJyZWZpdCIsdGhpcy5yZWZpdCk7YnJlYWs7Y2FzZSJjYW5jZWwiOnRoaXMuY2FuY2VsKHQpfX0sX19zYXZlU2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oKXtkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50Pyh0aGlzLl9fc2Nyb2xsVG9wPWRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wLHRoaXMuX19zY3JvbGxMZWZ0PWRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCk6KHRoaXMuX19zY3JvbGxUb3A9TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCksdGhpcy5fX3Njcm9sbExlZnQ9TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQsZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0KSl9LF9fcmVzdG9yZVNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudD8oZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3A9dGhpcy5fX3Njcm9sbFRvcCxkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQ9dGhpcy5fX3Njcm9sbExlZnQpOihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wPWRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wPXRoaXMuX19zY3JvbGxUb3AsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ9ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0PXRoaXMuX19zY3JvbGxMZWZ0KX19LEFhPSh0LGUpPT57Zm9yKGxldCBpPWU7aTtpPShuPWkpLmFzc2lnbmVkU2xvdHx8bi5wYXJlbnROb2RlfHxuLmhvc3QpaWYoaT09PXQpcmV0dXJuITA7dmFyIG47cmV0dXJuITF9LGthPVtwYSxnbyxDYV0sTGE9e2hvc3RBdHRyaWJ1dGVzOntyb2xlOiJkaWFsb2ciLHRhYmluZGV4OiItMSJ9LHByb3BlcnRpZXM6e21vZGFsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9fcmVhZGllZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sb2JzZXJ2ZXJzOlsiX21vZGFsQ2hhbmdlZChtb2RhbCwgX19yZWFkaWVkKSJdLGxpc3RlbmVyczp7dGFwOiJfb25EaWFsb2dDbGljayJ9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fX3ByZXZOb0NhbmNlbE9uT3V0c2lkZUNsaWNrPXRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljayx0aGlzLl9fcHJldk5vQ2FuY2VsT25Fc2NLZXk9dGhpcy5ub0NhbmNlbE9uRXNjS2V5LHRoaXMuX19wcmV2V2l0aEJhY2tkcm9wPXRoaXMud2l0aEJhY2tkcm9wLHRoaXMuX19yZWFkaWVkPSEwfSxfbW9kYWxDaGFuZ2VkOmZ1bmN0aW9uKHQsZSl7ZSYmKHQ/KHRoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljaz10aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2ssdGhpcy5fX3ByZXZOb0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbkVzY0tleSx0aGlzLl9fcHJldldpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCx0aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9ITAsdGhpcy5ub0NhbmNlbE9uRXNjS2V5PSEwLHRoaXMud2l0aEJhY2tkcm9wPSEwKToodGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrPXRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljayYmdGhpcy5fX3ByZXZOb0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMubm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXkmJnRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleSx0aGlzLndpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCYmdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3ApKX0sX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQ6ZnVuY3Rpb24odCl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8e30sdGhpcy5jbG9zaW5nUmVhc29uLmNvbmZpcm1lZD10fSxfb25EaWFsb2dDbGljazpmdW5jdGlvbih0KXtmb3IodmFyIGU9WWkodCkucGF0aCxuPTAsaT1lLmluZGV4T2YodGhpcyk7bjxpO24rKyl7dmFyIHI9ZVtuXTtpZihyLmhhc0F0dHJpYnV0ZSYmKHIuaGFzQXR0cmlidXRlKCJkaWFsb2ctZGlzbWlzcyIpfHxyLmhhc0F0dHJpYnV0ZSgiZGlhbG9nLWNvbmZpcm0iKSkpe3RoaXMuX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQoci5oYXNBdHRyaWJ1dGUoImRpYWxvZy1jb25maXJtIikpLHRoaXMuY2xvc2UoKSx0LnN0b3BQcm9wYWdhdGlvbigpO2JyZWFrfX19fSxQYT1ba2EsTGFdOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KaWYoCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpScih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1yZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmlzLXNjcm9sbGVkOm5vdCg6Zmlyc3QtY2hpbGQpKTo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGl2aWRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIDpob3N0KC5jYW4tc2Nyb2xsOm5vdCguc2Nyb2xsZWQtdG8tYm90dG9tKTpub3QoOmxhc3QtY2hpbGQpKTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kaXZpZGVyLWNvbG9yKTsKICAgICAgfQoKICAgICAgLnNjcm9sbGFibGUgewogICAgICAgIHBhZGRpbmc6IDAgMjRweDsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXNjcm9sbDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctc2Nyb2xsYWJsZTsKICAgICAgfQoKICAgICAgLmZpdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJzY3JvbGxhYmxlIiBjbGFzcz0ic2Nyb2xsYWJsZSIgb24tc2Nyb2xsPSJ1cGRhdGVTY3JvbGxTdGF0ZSI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSIscHJvcGVydGllczp7ZGlhbG9nRWxlbWVudDp7dHlwZTpPYmplY3R9fSxnZXQgc2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuJC5zY3JvbGxhYmxlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHRoaXMuY2xhc3NMaXN0LmFkZCgibm8tcGFkZGluZyIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnVwZGF0ZVNjcm9sbFN0YXRlLmJpbmQodGhpcykpfSx1cGRhdGVTY3JvbGxTdGF0ZTpmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ2xhc3MoImlzLXNjcm9sbGVkIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A+MCksdGhpcy50b2dnbGVDbGFzcygiY2FuLXNjcm9sbCIsdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0PHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbEhlaWdodCksdGhpcy50b2dnbGVDbGFzcygic2Nyb2xsZWQtdG8tYm90dG9tIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3ArdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0Pj10aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxIZWlnaHQpfSxfZW5zdXJlVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5kaWFsb2dFbGVtZW50PXRoaXMuZGlhbG9nRWxlbWVudHx8dGhpcy5wYXJlbnRFbGVtZW50LHRoaXMuZGlhbG9nRWxlbWVudCYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycyYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycy5pbmRleE9mKExhKT49MD8odGhpcy5kaWFsb2dFbGVtZW50LnNpemluZ1RhcmdldD10aGlzLnNjcm9sbFRhcmdldCx0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCJmaXQiKSk6dGhpcy5kaWFsb2dFbGVtZW50JiZ0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QuYWRkKCJmaXQiKX19KSwhd2luZG93LnBvbHltZXJTa2lwTG9hZGluZ0ZvbnRSb2JvdG8pe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO3QucmVsPSJzdHlsZXNoZWV0Iix0LnR5cGU9InRleHQvY3NzIix0LmNyb3NzT3JpZ2luPSJhbm9ueW1vdXMiLHQuaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PVJvYm90bytNb25vOjQwMCw3MDB8Um9ib3RvOjQwMCwzMDAsMzAwaXRhbGljLDQwMGl0YWxpYyw1MDAsNTAwaXRhbGljLDcwMCw3MDBpdGFsaWMiLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL2NvbnN0IE5hPV9lYDxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAvKiBTaGFyZWQgU3R5bGVzICovCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tYmFzZTogewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgJ05vdG8nLCBzYW5zLXNlcmlmOwogICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWNvbW1vbi1jb2RlOiB7CiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsICdDb25zb2xhcycsICdNZW5sbycsIG1vbm9zcGFjZTsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tZXhwZW5zaXZlLWtlcm5pbmc6IHsKICAgICAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA6IHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH07CgogICAgICAvKiBNYXRlcmlhbCBGb250IFN0eWxlcyAqLwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXk0OiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wNDRlbTsKICAgICAgICBsaW5lLWhlaWdodDogMTIwcHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTM6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiA1NnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDI2ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDYwcHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDQ1cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMThlbTsKICAgICAgICBsaW5lLWhlaWdodDogNDhweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1kaXNwbGF5MTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMzRweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDQwcHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtaGVhZGxpbmU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMTJlbTsKICAgICAgICBsaW5lLWhlaWdodDogMzJweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC10aXRsZTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjhweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1zdWJoZWFkOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYm9keTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjRweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1ib2R5MTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWNhcHRpb246IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDExZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtbWVudTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjRweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1idXR0b246IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDE4ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb2RlMjogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWNvZGUxOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tY29kZTsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH07CgogICAgfQoKICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT5gO05hLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTmEuY29udGVudCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBJYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO0lhLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpLElhLmlubmVySFRNTD0nPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWRpYWxvZy1zaGFyZWQtc3R5bGVzIj5cbiAgPHRlbXBsYXRlPlxuICAgIDxzdHlsZT5cbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbjogMjRweCA0MHB4O1xuXG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWRpYWxvZy1iYWNrZ3JvdW5kLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpKTtcbiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7XG5cbiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1ib2R5MTtcbiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwO1xuICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2c7XG4gICAgICB9XG5cbiAgICAgIDpob3N0ID4gOjpzbG90dGVkKCopIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICAgICAgcGFkZGluZzogMCAyNHB4O1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA+IDo6c2xvdHRlZCgubm8tcGFkZGluZykge1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgfVxuXG4gICAgICBcbiAgICAgIDpob3N0ID4gOjpzbG90dGVkKCo6Zmlyc3QtY2hpbGQpIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMjRweDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKjpsYXN0LWNoaWxkKSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gICAgICB9XG5cbiAgICAgIC8qIEluIDEueCwgdGhpcyBzZWxlY3RvciB3YXMgYDpob3N0ID4gOjpjb250ZW50IGgyYC4gSW4gMi54IDxzbG90PiBhbGxvd3NcbiAgICAgIHRvIHNlbGVjdCBkaXJlY3QgY2hpbGRyZW4gb25seSwgd2hpY2ggaW5jcmVhc2VzIHRoZSB3ZWlnaHQgb2YgdGhpc1xuICAgICAgc2VsZWN0b3IsIHNvIHdlIGhhdmUgdG8gcmUtZGVmaW5lIGZpcnN0LWNoaWxkL2xhc3QtY2hpbGQgbWFyZ2lucyBiZWxvdy4gKi9cbiAgICAgIDpob3N0ID4gOjpzbG90dGVkKGgyKSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtdGl0bGU7XG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZy10aXRsZTtcbiAgICAgIH1cblxuICAgICAgLyogQXBwbHkgbWl4aW4gYWdhaW4sIGluIGNhc2UgaXQgc2V0cyBtYXJnaW4tdG9wLiAqL1xuICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoaDI6Zmlyc3QtY2hpbGQpIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMjRweDtcbiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlO1xuICAgICAgfVxuXG4gICAgICAvKiBBcHBseSBtaXhpbiBhZ2FpbiwgaW4gY2FzZSBpdCBzZXRzIG1hcmdpbi1ib3R0b20uICovXG4gICAgICA6aG9zdCA+IDo6c2xvdHRlZChoMjpsYXN0LWNoaWxkKSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZy10aXRsZTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoLnBhcGVyLWRpYWxvZy1idXR0b25zKSxcbiAgICAgIDpob3N0ID4gOjpzbG90dGVkKC5idXR0b25zKSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgcGFkZGluZzogOHB4IDhweCA4cHggMjRweDtcbiAgICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1kaWFsb2ctYnV0dG9uLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7XG5cbiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7XG4gICAgICAgIEBhcHBseSAtLWxheW91dC1lbmQtanVzdGlmaWVkO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gIDwvdGVtcGxhdGU+XG48L2RvbS1tb2R1bGU+Jyxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKElhLmNvbnRlbnQpOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgUmE9W3twcm9wZXJ0aWVzOnthbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxlbnRyeUFuaW1hdGlvbjp7b2JzZXJ2ZXI6Il9lbnRyeUFuaW1hdGlvbkNoYW5nZWQiLHR5cGU6U3RyaW5nfSxleGl0QW5pbWF0aW9uOntvYnNlcnZlcjoiX2V4aXRBbmltYXRpb25DaGFuZ2VkIix0eXBlOlN0cmluZ319LF9lbnRyeUFuaW1hdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkNvbmZpZz10aGlzLmFuaW1hdGlvbkNvbmZpZ3x8e30sdGhpcy5hbmltYXRpb25Db25maWcuZW50cnk9W3tuYW1lOnRoaXMuZW50cnlBbmltYXRpb24sbm9kZTp0aGlzfV19LF9leGl0QW5pbWF0aW9uQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uQ29uZmlnPXRoaXMuYW5pbWF0aW9uQ29uZmlnfHx7fSx0aGlzLmFuaW1hdGlvbkNvbmZpZy5leGl0PVt7bmFtZTp0aGlzLmV4aXRBbmltYXRpb24sbm9kZTp0aGlzfV19LF9jb3B5UHJvcGVydGllczpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXX0sX2Nsb25lQ29uZmlnOmZ1bmN0aW9uKHQpe3ZhciBlPXtpc0Nsb25lOiEwfTtyZXR1cm4gdGhpcy5fY29weVByb3BlcnRpZXMoZSx0KSxlfSxfZ2V0QW5pbWF0aW9uQ29uZmlnUmVjdXJzaXZlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaTtpZih0aGlzLmFuaW1hdGlvbkNvbmZpZylpZih0aGlzLmFuaW1hdGlvbkNvbmZpZy52YWx1ZSYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuYW5pbWF0aW9uQ29uZmlnLnZhbHVlKXRoaXMuX3dhcm4odGhpcy5fbG9nZigicGxheUFuaW1hdGlvbiIsIlBsZWFzZSBwdXQgJ2FuaW1hdGlvbkNvbmZpZycgaW5zaWRlIG9mIHlvdXIgY29tcG9uZW50cyAncHJvcGVydGllcycgb2JqZWN0IGluc3RlYWQgb2Ygb3V0c2lkZSBvZiBpdC4iKSk7ZWxzZSBpZihpPXQ/dGhpcy5hbmltYXRpb25Db25maWdbdF06dGhpcy5hbmltYXRpb25Db25maWcsQXJyYXkuaXNBcnJheShpKXx8KGk9W2ldKSxpKWZvcih2YXIgcixvPTA7cj1pW29dO28rKylpZihyLmFuaW1hdGFibGUpci5hbmltYXRhYmxlLl9nZXRBbmltYXRpb25Db25maWdSZWN1cnNpdmUoci50eXBlfHx0LGUsbik7ZWxzZSBpZihyLmlkKXt2YXIgYT1lW3IuaWRdO2E/KGEuaXNDbG9uZXx8KGVbci5pZF09dGhpcy5fY2xvbmVDb25maWcoYSksYT1lW3IuaWRdKSx0aGlzLl9jb3B5UHJvcGVydGllcyhhLHIpKTplW3IuaWRdPXJ9ZWxzZSBuLnB1c2gocil9LGdldEFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbih0KXt2YXIgZT17fSxuPVtdO2Zvcih2YXIgaSBpbiB0aGlzLl9nZXRBbmltYXRpb25Db25maWdSZWN1cnNpdmUodCxlLG4pLGUpbi5wdXNoKGVbaV0pO3JldHVybiBufX0se19jb25maWd1cmVBbmltYXRpb25zOmZ1bmN0aW9uKHQpe3ZhciBlPVtdLG49W107aWYodC5sZW5ndGg+MClmb3IobGV0IGUsaT0wO2U9dFtpXTtpKyspe2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZS5uYW1lKTtpZih0LmlzTmVvbkFuaW1hdGlvbil7bGV0IGk9bnVsbDt0LmNvbmZpZ3VyZXx8KHQuY29uZmlndXJlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSksaT10LmNvbmZpZ3VyZShlKSxuLnB1c2goe3Jlc3VsdDppLGNvbmZpZzplLG5lb25BbmltYXRpb246dH0pfWVsc2UgY29uc29sZS53YXJuKHRoaXMuaXMrIjoiLGUubmFtZSwibm90IGZvdW5kISIpfWZvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgdD1uW2ldLnJlc3VsdCxyPW5baV0uY29uZmlnLG89bltpXS5uZW9uQW5pbWF0aW9uO3RyeXsiZnVuY3Rpb24iIT10eXBlb2YgdC5jYW5jZWwmJih0PWRvY3VtZW50LnRpbWVsaW5lLnBsYXkodCkpfWNhdGNoKGUpe3Q9bnVsbCxjb25zb2xlLndhcm4oIkNvdWxkbnQgcGxheSIsIigiLHIubmFtZSwiKS4iLGUpfXQmJmUucHVzaCh7bmVvbkFuaW1hdGlvbjpvLGNvbmZpZzpyLGFuaW1hdGlvbjp0fSl9cmV0dXJuIGV9LF9zaG91bGRDb21wbGV0ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9ITAsbj0wO248dC5sZW5ndGg7bisrKWlmKCJmaW5pc2hlZCIhPXRbbl0uYW5pbWF0aW9uLnBsYXlTdGF0ZSl7ZT0hMTticmVha31yZXR1cm4gZX0sX2NvbXBsZXRlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ubmVvbkFuaW1hdGlvbi5jb21wbGV0ZSh0W2VdLmNvbmZpZyk7Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLmFuaW1hdGlvbi5jYW5jZWwoKX0scGxheUFuaW1hdGlvbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZ2V0QW5pbWF0aW9uQ29uZmlnKHQpO2lmKG4pe3RoaXMuX2FjdGl2ZT10aGlzLl9hY3RpdmV8fHt9LHRoaXMuX2FjdGl2ZVt0XSYmKHRoaXMuX2NvbXBsZXRlKHRoaXMuX2FjdGl2ZVt0XSksZGVsZXRlIHRoaXMuX2FjdGl2ZVt0XSk7dmFyIGk9dGhpcy5fY29uZmlndXJlQW5pbWF0aW9ucyhuKTtpZigwIT1pLmxlbmd0aCl7dGhpcy5fYWN0aXZlW3RdPWk7Zm9yKHZhciByPTA7cjxpLmxlbmd0aDtyKyspaVtyXS5hbmltYXRpb24ub25maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9zaG91bGRDb21wbGV0ZShpKSYmKHRoaXMuX2NvbXBsZXRlKGkpLGRlbGV0ZSB0aGlzLl9hY3RpdmVbdF0sdGhpcy5maXJlKCJuZW9uLWFuaW1hdGlvbi1maW5pc2giLGUse2J1YmJsZXM6ITF9KSl9LmJpbmQodGhpcyl9ZWxzZSB0aGlzLmZpcmUoIm5lb24tYW5pbWF0aW9uLWZpbmlzaCIsZSx7YnViYmxlczohMX0pfX0sY2FuY2VsQW5pbWF0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2FjdGl2ZSl7dmFyIGU9dGhpcy5fYWN0aXZlW3RdO2Zvcih2YXIgbiBpbiBlKWVbbl0uYW5pbWF0aW9uLmNhbmNlbCgpfXRoaXMuX2FjdGl2ZT17fX19XTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpScih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWRpYWxvZy1zaGFyZWQtc3R5bGVzIj48L3N0eWxlPgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1kaWFsb2ciLGJlaGF2aW9yczpbUGEsUmFdLGxpc3RlbmVyczp7Im5lb24tYW5pbWF0aW9uLWZpbmlzaCI6Il9vbk5lb25BbmltYXRpb25GaW5pc2gifSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKSx0aGlzLnBsYXlBbmltYXRpb24oImVudHJ5Iil9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMucGxheUFuaW1hdGlvbigiZXhpdCIpfSxfb25OZW9uQW5pbWF0aW9uRmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBPYT1Scih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBjbGlwOiByZWN0KDBweCwwcHgsMHB4LDBweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGFyaWEtbGl2ZSQ9IltbbW9kZV1dIj5bW190ZXh0XV08L2Rpdj4KYCxpczoiaXJvbi1hMTF5LWFubm91bmNlciIscHJvcGVydGllczp7bW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBvbGl0ZSJ9LHRpbWVvdXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjE1MH0sX3RleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sY3JlYXRlZDpmdW5jdGlvbigpe09hLmluc3RhbmNlfHwoT2EuaW5zdGFuY2U9dGhpcyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiaXJvbi1hbm5vdW5jZSIsdGhpcy5fb25Jcm9uQW5ub3VuY2UuYmluZCh0aGlzKSl9LGFubm91bmNlOmZ1bmN0aW9uKHQpe3RoaXMuX3RleHQ9IiIsdGhpcy5hc3luYygoZnVuY3Rpb24oKXt0aGlzLl90ZXh0PXR9KSx0aGlzLnRpbWVvdXQpfSxfb25Jcm9uQW5ub3VuY2U6ZnVuY3Rpb24odCl7dC5kZXRhaWwmJnQuZGV0YWlsLnRleHQmJnRoaXMuYW5ub3VuY2UodC5kZXRhaWwudGV4dCl9fSk7T2EuaW5zdGFuY2U9bnVsbCxPYS5yZXF1ZXN0QXZhaWxhYmlsaXR5PWZ1bmN0aW9uKCl7T2EuaW5zdGFuY2V8fChPYS5pbnN0YW5jZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpcm9uLWExMXktYW5ub3VuY2VyIikpLGRvY3VtZW50LmJvZHk/ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChPYS5pbnN0YW5jZSk6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsKGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChPYS5pbnN0YW5jZSl9KSl9LAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KUnIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzbG90IGlkPSJjb250ZW50Ij48L3Nsb3Q+CmAsaXM6Imlyb24taW5wdXQiLGJlaGF2aW9yczpbYWFdLHByb3BlcnRpZXM6e2JpbmRWYWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LHZhbHVlOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVWYWx1ZShiaW5kVmFsdWUpIn0sYWxsb3dlZFBhdHRlcm46e3R5cGU6U3RyaW5nfSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2lucHV0RWxlbWVudDpPYmplY3R9LG9ic2VydmVyczpbIl9iaW5kVmFsdWVDaGFuZ2VkKGJpbmRWYWx1ZSwgX2lucHV0RWxlbWVudCkiXSxsaXN0ZW5lcnM6e2lucHV0OiJfb25JbnB1dCIsa2V5cHJlc3M6Il9vbktleXByZXNzIn0sY3JlYXRlZDpmdW5jdGlvbigpe09hLnJlcXVlc3RBdmFpbGFiaWxpdHkoKSx0aGlzLl9wcmV2aW91c1ZhbGlkSW5wdXQ9IiIsdGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkPSExfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyPVlpKHRoaXMpLm9ic2VydmVOb2RlcyhmdW5jdGlvbih0KXt0aGlzLl9pbml0U2xvdHRlZElucHV0KCl9LmJpbmQodGhpcykpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiYoWWkodGhpcykudW5vYnNlcnZlTm9kZXModGhpcy5fb2JzZXJ2ZXIpLHRoaXMuX29ic2VydmVyPW51bGwpfSxnZXQgaW5wdXRFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudH0sX2luaXRTbG90dGVkSW5wdXQ6ZnVuY3Rpb24oKXt0aGlzLl9pbnB1dEVsZW1lbnQ9dGhpcy5nZXRFZmZlY3RpdmVDaGlsZHJlbigpWzBdLHRoaXMuaW5wdXRFbGVtZW50JiZ0aGlzLmlucHV0RWxlbWVudC52YWx1ZSYmKHRoaXMuYmluZFZhbHVlPXRoaXMuaW5wdXRFbGVtZW50LnZhbHVlKSx0aGlzLmZpcmUoImlyb24taW5wdXQtcmVhZHkiKX0sZ2V0IF9wYXR0ZXJuUmVnRXhwKCl7dmFyIHQ7aWYodGhpcy5hbGxvd2VkUGF0dGVybil0PW5ldyBSZWdFeHAodGhpcy5hbGxvd2VkUGF0dGVybik7ZWxzZSBzd2l0Y2godGhpcy5pbnB1dEVsZW1lbnQudHlwZSl7Y2FzZSJudW1iZXIiOnQ9L1swLTkuLGUtXS99cmV0dXJuIHR9LF9iaW5kVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKHQsZSl7ZSYmKHZvaWQgMD09PXQ/ZS52YWx1ZT1udWxsOnQhPT1lLnZhbHVlJiYodGhpcy5pbnB1dEVsZW1lbnQudmFsdWU9dCksdGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKSx0aGlzLmZpcmUoImJpbmQtdmFsdWUtY2hhbmdlZCIse3ZhbHVlOnR9KSl9LF9vbklucHV0OmZ1bmN0aW9uKCl7dGhpcy5hbGxvd2VkUGF0dGVybiYmIXRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZCYmKHRoaXMuX2NoZWNrUGF0dGVyblZhbGlkaXR5KCl8fCh0aGlzLl9hbm5vdW5jZUludmFsaWRDaGFyYWN0ZXIoIkludmFsaWQgc3RyaW5nIG9mIGNoYXJhY3RlcnMgbm90IGVudGVyZWQuIiksdGhpcy5pbnB1dEVsZW1lbnQudmFsdWU9dGhpcy5fcHJldmlvdXNWYWxpZElucHV0KSksdGhpcy5iaW5kVmFsdWU9dGhpcy5fcHJldmlvdXNWYWxpZElucHV0PXRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLHRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZD0hMX0sX2lzUHJpbnRhYmxlOmZ1bmN0aW9uKHQpe3JldHVybiEoOD09dC5rZXlDb2RlfHw5PT10LmtleUNvZGV8fDEzPT10LmtleUNvZGV8fDI3PT10LmtleUNvZGV8fDA9PXQuY2hhckNvZGUmJigxOT09dC5rZXlDb2RlfHwyMD09dC5rZXlDb2RlfHw0NT09dC5rZXlDb2RlfHw0Nj09dC5rZXlDb2RlfHwxNDQ9PXQua2V5Q29kZXx8MTQ1PT10LmtleUNvZGV8fHQua2V5Q29kZT4zMiYmdC5rZXlDb2RlPDQxfHx0LmtleUNvZGU+MTExJiZ0LmtleUNvZGU8MTI0KSl9LF9vbktleXByZXNzOmZ1bmN0aW9uKHQpe2lmKHRoaXMuYWxsb3dlZFBhdHRlcm58fCJudW1iZXIiPT09dGhpcy5pbnB1dEVsZW1lbnQudHlwZSl7dmFyIGU9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZihlJiYhKHQubWV0YUtleXx8dC5jdHJsS2V5fHx0LmFsdEtleSkpe3RoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZD0hMDt2YXIgbj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQuY2hhckNvZGUpO3RoaXMuX2lzUHJpbnRhYmxlKHQpJiYhZS50ZXN0KG4pJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2Fubm91bmNlSW52YWxpZENoYXJhY3RlcigiSW52YWxpZCBjaGFyYWN0ZXIgIituKyIgbm90IGVudGVyZWQuIikpfX19LF9jaGVja1BhdHRlcm5WYWxpZGl0eTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BhdHRlcm5SZWdFeHA7aWYoIXQpcmV0dXJuITA7Zm9yKHZhciBlPTA7ZTx0aGlzLmlucHV0RWxlbWVudC52YWx1ZS5sZW5ndGg7ZSsrKWlmKCF0LnRlc3QodGhpcy5pbnB1dEVsZW1lbnQudmFsdWVbZV0pKXJldHVybiExO3JldHVybiEwfSx2YWxpZGF0ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmlucHV0RWxlbWVudClyZXR1cm4gdGhpcy5pbnZhbGlkPSExLCEwO3ZhciB0PXRoaXMuaW5wdXRFbGVtZW50LmNoZWNrVmFsaWRpdHkoKTtyZXR1cm4gdCYmKHRoaXMucmVxdWlyZWQmJiIiPT09dGhpcy5iaW5kVmFsdWU/dD0hMTp0aGlzLmhhc1ZhbGlkYXRvcigpJiYodD1hYS52YWxpZGF0ZS5jYWxsKHRoaXMsdGhpcy5iaW5kVmFsdWUpKSksdGhpcy5pbnZhbGlkPSF0LHRoaXMuZmlyZSgiaXJvbi1pbnB1dC12YWxpZGF0ZSIpLHR9LF9hbm5vdW5jZUludmFsaWRDaGFyYWN0ZXI6ZnVuY3Rpb24odCl7dGhpcy5maXJlKCJpcm9uLWFubm91bmNlIix7dGV4dDp0fSl9LF9jb21wdXRlVmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCB6YT17YXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoImFkZG9uLWF0dGFjaGVkIil9LHVwZGF0ZTpmdW5jdGlvbih0KXt9fTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovUnIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmbG9hdDogcmlnaHQ7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY2FwdGlvbjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c3Bhbj5bW19jaGFyQ291bnRlclN0cl1dPC9zcGFuPgpgLGlzOiJwYXBlci1pbnB1dC1jaGFyLWNvdW50ZXIiLGJlaGF2aW9yczpbemFdLHByb3BlcnRpZXM6e19jaGFyQ291bnRlclN0cjp7dHlwZTpTdHJpbmcsdmFsdWU6IjAifX0sdXBkYXRlOmZ1bmN0aW9uKHQpe2lmKHQuaW5wdXRFbGVtZW50KXt0LnZhbHVlPXQudmFsdWV8fCIiO3ZhciBlPXQudmFsdWUudG9TdHJpbmcoKS5sZW5ndGgudG9TdHJpbmcoKTt0LmlucHV0RWxlbWVudC5oYXNBdHRyaWJ1dGUoIm1heGxlbmd0aCIpJiYoZSs9Ii8iK3QuaW5wdXRFbGVtZW50LmdldEF0dHJpYnV0ZSgibWF4bGVuZ3RoIikpLHRoaXMuX2NoYXJDb3VudGVyU3RyPWV9fX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgRGE9X2VgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CiAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogdG8gbWFrZSBhIHN0YWNraW5nIGNvbnRleHQgKi8KICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWFsaWduLCBib3R0b20pOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgIH07CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CmA7RGEuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7IiksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChEYS5jb250ZW50KSxScih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyOwogICAgICB9CgogICAgICA6aG9zdChbaW5saW5lXSkgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIG9wYWNpdHk6IDAuMzM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5mbG9hdGVkLWxhYmVsLXBsYWNlaG9sZGVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgIH0KCiAgICAgIC51bmRlcmxpbmUgewogICAgICAgIGhlaWdodDogMnB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLmZvY3VzZWQtbGluZSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CgogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZTNkKDAsMSwxKTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMCwxLDEpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lLWZvY3VzOwogICAgICB9CgogICAgICAudW5kZXJsaW5lLmlzLWhpZ2hsaWdodGVkIC5mb2N1c2VkLWxpbmUgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBub25lOwogICAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1czsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdHJhbnNpdGlvbi1lYXNpbmc7CiAgICAgIH0KCiAgICAgIC51bmRlcmxpbmUuaXMtaW52YWxpZCAuZm9jdXNlZC1saW5lIHsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBub25lOwogICAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1czsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdHJhbnNpdGlvbi1lYXNpbmc7CiAgICAgIH0KCiAgICAgIC51bmZvY3VzZWQtbGluZSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci11bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC51bmZvY3VzZWQtbGluZSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZDsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lLWRpc2FibGVkOwogICAgICB9CgogICAgICAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleC1hdXRvOwogICAgICAgIEBhcHBseSAtLWxheW91dC1yZWxhdGl2ZTsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4yNXMsIHdpZHRoIDAuMjVzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1cywgd2lkdGggMC4yNXM7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IHRvcDsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IHRvcDsKICAgICAgICAvKiBGaXggZm9yIHNhZmFyaSBub3QgZm9jdXNpbmcgMC1oZWlnaHQgZGF0ZS90aW1lIGlucHV0cyB3aXRoIC13ZWJraXQtYXBwZXJhbmNlOiBub25lOyAqLwogICAgICAgIG1pbi1oZWlnaHQ6IDFweDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdHJhbnNpdGlvbi1lYXNpbmc7CiAgICAgIH0KCgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpOmJlZm9yZSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCk6YmVmb3JlIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWwtYmVmb3JlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpOmFmdGVyLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKTphZnRlciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWFmdGVyOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTc1JSkgc2NhbGUoMC43NSk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC03NSUpIHNjYWxlKDAuNzUpOwoKICAgICAgICAvKiBTaW5jZSB3ZSBzY2FsZSB0byA3NS8xMDAgb2YgdGhlIHNpemUsIHdlIGFjdHVhbGx5IGhhdmUgMTAwLzc1IG9mIHRoZQogICAgICAgIG9yaWdpbmFsIHNwYWNlIG5vdyBhdmFpbGFibGUgKi8KICAgICAgICB3aWR0aDogMTMzJTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWZsb2F0aW5nOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWZsb2F0aW5nIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIDpob3N0KDpkaXIocnRsKSkgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IGF1dG87CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiByaWdodCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWdobGlnaHRlZCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWdobGlnaHRlZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWwtZm9jdXM7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWRkZW4gOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlkZGVuIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpcm9uLWlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKHRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWlucHV0KSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTsKICAgICAgICAvKiBUaGUgYXBwbHkgc2hpbSBkb2Vzbid0IGFwcGx5IHRoZSBuZXN0ZWQgY29sb3IgY3VzdG9tIHByb3BlcnR5LAogICAgICAgICAgc28gd2UgaGF2ZSB0byByZS1hcHBseSBpdCBoZXJlLiAqLwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1zcGlubmVyOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmZvY3VzZWQgOjpzbG90dGVkKGlyb24taW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmZvY3VzZWQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtaW5wdXQpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtZm9jdXM7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoaXJvbi1pbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKHRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1pbnB1dCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1pbnZhbGlkOwogICAgICB9CgogICAgICAucHJlZml4IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleC1ub25lOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LXByZWZpeDsKICAgICAgfQoKICAgICAgLnN1ZmZpeCA6OnNsb3R0ZWQoKikgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtbm9uZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtc3VmZml4OwogICAgICB9CgogICAgICAvKiBGaXJlZm94IHNldHMgYSBtaW4td2lkdGggb24gdGhlIGlucHV0LCB3aGljaCBjYW4gY2F1c2UgbGF5b3V0IGlzc3VlcyAqLwogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaW5wdXQpIHsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCh0ZXh0YXJlYSkgewogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgfQoKICAgICAgLmFkZC1vbi1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5hZGQtb24tY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICAuYWRkLW9uLWNvbnRlbnQuaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKCopIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciIgYXJpYS1oaWRkZW49InRydWUiIGhpZGRlbj0iW1tub0xhYmVsRmxvYXRdXSI+Jm5ic3A7PC9kaXY+CgogICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgIDxzcGFuIGNsYXNzPSJwcmVmaXgiPjxzbG90IG5hbWU9InByZWZpeCI+PC9zbG90Pjwvc3Bhbj4KCiAgICAgIDxkaXYgY2xhc3MkPSJbW19jb21wdXRlSW5wdXRDb250ZW50Q2xhc3Mobm9MYWJlbEZsb2F0LGFsd2F5c0Zsb2F0TGFiZWwsZm9jdXNlZCxpbnZhbGlkLF9pbnB1dEhhc0NvbnRlbnQpXV0iIGlkPSJsYWJlbEFuZElucHV0Q29udGFpbmVyIj4KICAgICAgICA8c2xvdCBuYW1lPSJsYWJlbCI+PC9zbG90PgogICAgICAgIDxzbG90IG5hbWU9ImlucHV0Ij48L3Nsb3Q+CiAgICAgIDwvZGl2PgoKICAgICAgPHNwYW4gY2xhc3M9InN1ZmZpeCI+PHNsb3QgbmFtZT0ic3VmZml4Ij48L3Nsb3Q+PC9zcGFuPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcyQ9IltbX2NvbXB1dGVVbmRlcmxpbmVDbGFzcyhmb2N1c2VkLGludmFsaWQpXV0iPgogICAgICA8ZGl2IGNsYXNzPSJ1bmZvY3VzZWQtbGluZSI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZvY3VzZWQtbGluZSI+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzJD0iW1tfY29tcHV0ZUFkZE9uQ29udGVudENsYXNzKGZvY3VzZWQsaW52YWxpZCldXSI+CiAgICAgIDxzbG90IG5hbWU9ImFkZC1vbiI+PC9zbG90PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLWlucHV0LWNvbnRhaW5lciIscHJvcGVydGllczp7bm9MYWJlbEZsb2F0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYXR0ckZvclZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToiYmluZC12YWx1ZSJ9LGF1dG9WYWxpZGF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbnZhbGlkOntvYnNlcnZlcjoiX2ludmFsaWRDaGFuZ2VkIix0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGZvY3VzZWQ6e3JlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LF9hZGRvbnM6e3R5cGU6QXJyYXl9LF9pbnB1dEhhc0NvbnRlbnQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2lucHV0U2VsZWN0b3I6e3R5cGU6U3RyaW5nLHZhbHVlOiJpbnB1dCxpcm9uLWlucHV0LHRleHRhcmVhLC5wYXBlci1pbnB1dC1pbnB1dCJ9LF9ib3VuZE9uRm9jdXM6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpfX0sX2JvdW5kT25CbHVyOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uQmx1ci5iaW5kKHRoaXMpfX0sX2JvdW5kT25JbnB1dDp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbklucHV0LmJpbmQodGhpcyl9fSxfYm91bmRWYWx1ZUNoYW5nZWQ6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25WYWx1ZUNoYW5nZWQuYmluZCh0aGlzKX19fSxsaXN0ZW5lcnM6eyJhZGRvbi1hdHRhY2hlZCI6Il9vbkFkZG9uQXR0YWNoZWQiLCJpcm9uLWlucHV0LXZhbGlkYXRlIjoiX29uSXJvbklucHV0VmFsaWRhdGUifSxnZXQgX3ZhbHVlQ2hhbmdlZEV2ZW50KCl7cmV0dXJuIHRoaXMuYXR0ckZvclZhbHVlKyItY2hhbmdlZCJ9LGdldCBfcHJvcGVydHlGb3JWYWx1ZSgpe3JldHVybiBzdCh0aGlzLmF0dHJGb3JWYWx1ZSl9LGdldCBfaW5wdXRFbGVtZW50KCl7cmV0dXJuIFlpKHRoaXMpLnF1ZXJ5U2VsZWN0b3IodGhpcy5faW5wdXRTZWxlY3Rvcil9LGdldCBfaW5wdXRFbGVtZW50VmFsdWUoKXtyZXR1cm4gdGhpcy5faW5wdXRFbGVtZW50W3RoaXMuX3Byb3BlcnR5Rm9yVmFsdWVdfHx0aGlzLl9pbnB1dEVsZW1lbnQudmFsdWV9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZT0hMCx0aGlzLl9hZGRvbnN8fCh0aGlzLl9hZGRvbnM9W10pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2JvdW5kT25Gb2N1cywhMCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9ib3VuZE9uQmx1ciwhMCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5hdHRyRm9yVmFsdWU/dGhpcy5faW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5fdmFsdWVDaGFuZ2VkRXZlbnQsdGhpcy5fYm91bmRWYWx1ZUNoYW5nZWQpOnRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLHRoaXMuX29uSW5wdXQpLHRoaXMuX2lucHV0RWxlbWVudFZhbHVlJiYiIiE9dGhpcy5faW5wdXRFbGVtZW50VmFsdWU/dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50KTp0aGlzLl9oYW5kbGVWYWx1ZSh0aGlzLl9pbnB1dEVsZW1lbnQpfSxfb25BZGRvbkF0dGFjaGVkOmZ1bmN0aW9uKHQpe3RoaXMuX2FkZG9uc3x8KHRoaXMuX2FkZG9ucz1bXSk7dmFyIGU9dC50YXJnZXQ7LTE9PT10aGlzLl9hZGRvbnMuaW5kZXhPZihlKSYmKHRoaXMuX2FkZG9ucy5wdXNoKGUpLHRoaXMuaXNBdHRhY2hlZCYmdGhpcy5faGFuZGxlVmFsdWUodGhpcy5faW5wdXRFbGVtZW50KSl9LF9vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Rm9jdXNlZCghMCl9LF9vbkJsdXI6ZnVuY3Rpb24oKXt0aGlzLl9zZXRGb2N1c2VkKCExKSx0aGlzLl9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZSh0aGlzLl9pbnB1dEVsZW1lbnQpfSxfb25JbnB1dDpmdW5jdGlvbih0KXt0aGlzLl9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZSh0LnRhcmdldCl9LF9vblZhbHVlQ2hhbmdlZDpmdW5jdGlvbih0KXt2YXIgZT10LnRhcmdldDt0aGlzLl9faXNGaXJzdFZhbHVlVXBkYXRlJiYodGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZT0hMSx2b2lkIDA9PT1lLnZhbHVlfHwiIj09PWUudmFsdWUpfHx0aGlzLl9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZSh0LnRhcmdldCl9LF9oYW5kbGVWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZTt0aGlzLl9pbnB1dEhhc0NvbnRlbnQ9ISghZSYmMCE9PWUmJigibnVtYmVyIiE9PXQudHlwZXx8dC5jaGVja1ZhbGlkaXR5KCkpKSx0aGlzLnVwZGF0ZUFkZG9ucyh7aW5wdXRFbGVtZW50OnQsdmFsdWU6ZSxpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSxfaGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGU6ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5hdXRvVmFsaWRhdGUmJnQmJihlPXQudmFsaWRhdGU/dC52YWxpZGF0ZSh0aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZSk6dC5jaGVja1ZhbGlkaXR5KCksdGhpcy5pbnZhbGlkPSFlKSx0aGlzLl9oYW5kbGVWYWx1ZSh0KX0sX29uSXJvbklucHV0VmFsaWRhdGU6ZnVuY3Rpb24odCl7dGhpcy5pbnZhbGlkPXRoaXMuX2lucHV0RWxlbWVudC5pbnZhbGlkfSxfaW52YWxpZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hZGRvbnMmJnRoaXMudXBkYXRlQWRkb25zKHtpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSx1cGRhdGVBZGRvbnM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49MDtlPXRoaXMuX2FkZG9uc1tuXTtuKyspZS51cGRhdGUodCl9LF9jb21wdXRlSW5wdXRDb250ZW50Q2xhc3M6ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgbz0iaW5wdXQtY29udGVudCI7aWYodClyJiYobys9IiBsYWJlbC1pcy1oaWRkZW4iKSxpJiYobys9IiBpcy1pbnZhbGlkIik7ZWxzZXt2YXIgYT10aGlzLnF1ZXJ5U2VsZWN0b3IoImxhYmVsIik7ZXx8cj8obys9IiBsYWJlbC1pcy1mbG9hdGluZyIsdGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InN0YXRpYyIsaT9vKz0iIGlzLWludmFsaWQiOm4mJihvKz0iIGxhYmVsLWlzLWhpZ2hsaWdodGVkIikpOihhJiYodGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksaSYmKG8rPSIgaXMtaW52YWxpZCIpKX1yZXR1cm4gbiYmKG8rPSIgZm9jdXNlZCIpLG99LF9jb21wdXRlVW5kZXJsaW5lQ2xhc3M6ZnVuY3Rpb24odCxlKXt2YXIgbj0idW5kZXJsaW5lIjtyZXR1cm4gZT9uKz0iIGlzLWludmFsaWQiOnQmJihuKz0iIGlzLWhpZ2hsaWdodGVkIiksbn0sX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzczpmdW5jdGlvbih0LGUpe3ZhciBuPSJhZGQtb24tY29udGVudCI7cmV0dXJuIGU/bis9IiBpcy1pbnZhbGlkIjp0JiYobis9IiBpcy1oaWdobGlnaHRlZCIpLG59fSksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpScih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtZXJyb3I7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6MDsKICAgICAgICByaWdodDowOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIHsKICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogICAgICB9CgogICAgICAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2ludmFsaWRdKSAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPCEtLQogICAgSWYgdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXMgZGlyZWN0bHkgcmVmZXJlbmNlZCBieSBhbgogICAgXGBhcmlhLWRlc2NyaWJlZGJ5XGAgYXR0cmlidXRlLCBzdWNoIGFzIHdoZW4gdXNlZCBhcyBhIHBhcGVyLWlucHV0IGFkZC1vbiwKICAgIHRoZW4gYXBwbHlpbmcgXGB2aXNpYmlsaXR5OiBoaWRkZW47XGAgdG8gdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXRzZWxmCiAgICBkb2VzIG5vdCBoaWRlIHRoZSBlcnJvci4KCiAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOgogICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2FjY25hbWUtMS4xLyNtYXBwaW5nX2FkZGl0aW9uYWxfbmRfZGVzY3JpcHRpb24KICAgIC0tPgogICAgPGRpdiBpZD0iYTExeVdyYXBwZXIiPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItaW5wdXQtZXJyb3IiLGJlaGF2aW9yczpbemFdLHByb3BlcnRpZXM6e2ludmFsaWQ6e3JlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx0eXBlOkJvb2xlYW59fSx1cGRhdGU6ZnVuY3Rpb24odCl7dGhpcy5fc2V0SW52YWxpZCh0LmludmFsaWQpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgQmE9e05leHRMYWJlbElEOjEsTmV4dEFkZG9uSUQ6MSxOZXh0SW5wdXRJRDoxfSxIYT17cHJvcGVydGllczp7bGFiZWw6e3R5cGU6U3RyaW5nfSx2YWx1ZTp7bm90aWZ5OiEwLHR5cGU6U3RyaW5nfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbnZhbGlkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxhbGxvd2VkUGF0dGVybjp7dHlwZTpTdHJpbmd9LHR5cGU6e3R5cGU6U3RyaW5nfSxsaXN0Ont0eXBlOlN0cmluZ30scGF0dGVybjp7dHlwZTpTdHJpbmd9LHJlcXVpcmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGVycm9yTWVzc2FnZTp7dHlwZTpTdHJpbmd9LGNoYXJDb3VudGVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG5vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF1dG9WYWxpZGF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx2YWxpZGF0b3I6e3R5cGU6U3RyaW5nfSxhdXRvY29tcGxldGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJvZmYifSxhdXRvZm9jdXM6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2F1dG9mb2N1c0NoYW5nZWQifSxpbnB1dG1vZGU6e3R5cGU6U3RyaW5nfSxtaW5sZW5ndGg6e3R5cGU6TnVtYmVyfSxtYXhsZW5ndGg6e3R5cGU6TnVtYmVyfSxtaW46e3R5cGU6U3RyaW5nfSxtYXg6e3R5cGU6U3RyaW5nfSxzdGVwOnt0eXBlOlN0cmluZ30sbmFtZTp7dHlwZTpTdHJpbmd9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0scmVhZG9ubHk6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2l6ZTp7dHlwZTpOdW1iZXJ9LGF1dG9jYXBpdGFsaXplOnt0eXBlOlN0cmluZyx2YWx1ZToibm9uZSJ9LGF1dG9jb3JyZWN0Ont0eXBlOlN0cmluZyx2YWx1ZToib2ZmIn0sYXV0b3NhdmU6e3R5cGU6U3RyaW5nfSxyZXN1bHRzOnt0eXBlOk51bWJlcn0sYWNjZXB0Ont0eXBlOlN0cmluZ30sbXVsdGlwbGU6e3R5cGU6Qm9vbGVhbn0sX2FyaWFEZXNjcmliZWRCeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LF9hcmlhTGFiZWxsZWRCeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LF9pbnB1dElkOnt0eXBlOlN0cmluZyx2YWx1ZToiIn19LGxpc3RlbmVyczp7ImFkZG9uLWF0dGFjaGVkIjoiX29uQWRkb25BdHRhY2hlZCJ9LGtleUJpbmRpbmdzOnsic2hpZnQrdGFiOmtleWRvd24iOiJfb25TaGlmdFRhYkRvd24ifSxob3N0QXR0cmlidXRlczp7dGFiaW5kZXg6MH0sZ2V0IGlucHV0RWxlbWVudCgpe3JldHVybiB0aGlzLiR8fCh0aGlzLiQ9e30pLHRoaXMuJC5pbnB1dHx8KHRoaXMuX2dlbmVyYXRlSW5wdXRJZCgpLHRoaXMuJC5pbnB1dD10aGlzLiQkKCIjIit0aGlzLl9pbnB1dElkKSksdGhpcy4kLmlucHV0fSxnZXQgX2ZvY3VzYWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5pbnB1dEVsZW1lbnR9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl90eXBlc1RoYXRIYXZlVGV4dD1bImRhdGUiLCJkYXRldGltZSIsImRhdGV0aW1lLWxvY2FsIiwibW9udGgiLCJ0aW1lIiwid2VlayIsImZpbGUiXX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBcmlhTGFiZWxsZWRCeSgpLCF5ZSYmdGhpcy5pbnB1dEVsZW1lbnQmJi0xIT09dGhpcy5fdHlwZXNUaGF0SGF2ZVRleHQuaW5kZXhPZih0aGlzLmlucHV0RWxlbWVudC50eXBlKSYmKHRoaXMuYWx3YXlzRmxvYXRMYWJlbD0hMCl9LF9hcHBlbmRTdHJpbmdXaXRoU3BhY2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD90KyIgIitlOmV9LF9vbkFkZG9uQXR0YWNoZWQ6ZnVuY3Rpb24odCl7dmFyIGU9WWkodCkucm9vdFRhcmdldDtpZihlLmlkKXRoaXMuX2FyaWFEZXNjcmliZWRCeT10aGlzLl9hcHBlbmRTdHJpbmdXaXRoU3BhY2UodGhpcy5fYXJpYURlc2NyaWJlZEJ5LGUuaWQpO2Vsc2V7dmFyIG49InBhcGVyLWlucHV0LWFkZC1vbi0iK0JhLk5leHRBZGRvbklEKys7ZS5pZD1uLHRoaXMuX2FyaWFEZXNjcmliZWRCeT10aGlzLl9hcHBlbmRTdHJpbmdXaXRoU3BhY2UodGhpcy5fYXJpYURlc2NyaWJlZEJ5LG4pfX0sdmFsaWRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnB1dEVsZW1lbnQudmFsaWRhdGUoKX0sX2ZvY3VzQmx1ckhhbmRsZXI6ZnVuY3Rpb24odCl7cW8uX2ZvY3VzQmx1ckhhbmRsZXIuY2FsbCh0aGlzLHQpLHRoaXMuZm9jdXNlZCYmIXRoaXMuX3NoaWZ0VGFiUHJlc3NlZCYmdGhpcy5fZm9jdXNhYmxlRWxlbWVudCYmdGhpcy5fZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpfSxfb25TaGlmdFRhYkRvd246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7dGhpcy5fc2hpZnRUYWJQcmVzc2VkPSEwLHRoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksdGhpcy5hc3luYygoZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLGUpLHRoaXMuX3NoaWZ0VGFiUHJlc3NlZD0hMX0pLDEpfSxfaGFuZGxlQXV0b1ZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKX0sdXBkYXRlVmFsdWVBbmRQcmVzZXJ2ZUNhcmV0OmZ1bmN0aW9uKHQpe3RyeXt2YXIgZT10aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydDt0aGlzLnZhbHVlPXQsdGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ9ZSx0aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25FbmQ9ZX1jYXRjaChlKXt0aGlzLnZhbHVlPXR9fSxfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8dH0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7dmFyIHQsZT1ZaSh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3IoImxhYmVsIik7ZT8oZS5pZD90PWUuaWQ6KHQ9InBhcGVyLWlucHV0LWxhYmVsLSIrQmEuTmV4dExhYmVsSUQrKyxlLmlkPXQpLHRoaXMuX2FyaWFMYWJlbGxlZEJ5PXQpOnRoaXMuX2FyaWFMYWJlbGxlZEJ5PSIifSxfZ2VuZXJhdGVJbnB1dElkOmZ1bmN0aW9uKCl7dGhpcy5faW5wdXRJZCYmIiIhPT10aGlzLl9pbnB1dElkfHwodGhpcy5faW5wdXRJZD0iaW5wdXQtIitCYS5OZXh0SW5wdXRJRCsrKX0sX29uQ2hhbmdlOmZ1bmN0aW9uKHQpe3RoaXMuc2hhZG93Um9vdCYmdGhpcy5maXJlKHQudHlwZSx7c291cmNlRXZlbnQ6dH0se25vZGU6dGhpcyxidWJibGVzOnQuYnViYmxlcyxjYW5jZWxhYmxlOnQuY2FuY2VsYWJsZX0pfSxfYXV0b2ZvY3VzQ2hhbmdlZDpmdW5jdGlvbigpe2lmKHRoaXMuYXV0b2ZvY3VzJiZ0aGlzLl9mb2N1c2FibGVFbGVtZW50KXt2YXIgdD1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3QgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmdCE9PWRvY3VtZW50LmJvZHkmJnQhPT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fHRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKX19fSxGYT1bcW8sem8sSGFdOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KUnIoe2lzOiJwYXBlci1pbnB1dCIsX3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtmb2N1c2VkXSkgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBpbnB1dCB7CiAgICAgICAgLyogRmlyZWZveCBzZXRzIGEgbWluLXdpZHRoIG9uIHRoZSBpbnB1dCwgd2hpY2ggY2FuIGNhdXNlIGxheW91dCBpc3N1ZXMgKi8KICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC8qIEluIDEueCwgdGhlIDxpbnB1dD4gaXMgZGlzdHJpYnV0ZWQgdG8gcGFwZXItaW5wdXQtY29udGFpbmVyLCB3aGljaCBzdHlsZXMgaXQuCiAgICAgIEluIDIueCB0aGUgPGlyb24taW5wdXQ+IGlzIGRpc3RyaWJ1dGVkIHRvIHBhcGVyLWlucHV0LWNvbnRhaW5lciwgd2hpY2ggc3R5bGVzCiAgICAgIGl0LCBidXQgaW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHksIHdlIG5lZWQgdG8gcmVzZXQgc29tZQogICAgICBvZiB0aGUgbmF0aXZlIGlucHV0J3MgcHJvcGVydGllcyB0byBpbmhlcml0IChmcm9tIHRoZSBpcm9uLWlucHV0KSAqLwogICAgICBpcm9uLWlucHV0ID4gaW5wdXQgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1zaGFyZWQtaW5wdXQtc3R5bGU7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgZm9udC1zaXplOiBpbmhlcml0OwogICAgICAgIGxldHRlci1zcGFjaW5nOiBpbmhlcml0OwogICAgICAgIHdvcmQtc3BhY2luZzogaW5oZXJpdDsKICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDsKICAgICAgICB0ZXh0LXNoYWRvdzogaW5oZXJpdDsKICAgICAgICBjb2xvcjogaW5oZXJpdDsKICAgICAgICBjdXJzb3I6IGluaGVyaXQ7CiAgICAgIH0KCiAgICAgIGlucHV0OmRpc2FibGVkIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLAogICAgICBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1zcGlubmVyOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1jbGVhci1idXR0b24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtY2xlYXI7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3IgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIGlucHV0Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIGlucHV0OjotbW96LXBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICBpbnB1dDo6LW1zLWNsZWFyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItbXMtY2xlYXI7CiAgICAgIH0KCiAgICAgIGlucHV0OjotbXMtcmV2ZWFsIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItbXMtcmV2ZWFsOwogICAgICB9CgogICAgICBpbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIGxhYmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaW5wdXQtY29udGFpbmVyIGlkPSJjb250YWluZXIiIG5vLWxhYmVsLWZsb2F0PSJbW25vTGFiZWxGbG9hdF1dIiBhbHdheXMtZmxvYXQtbGFiZWw9IltbX2NvbXB1dGVBbHdheXNGbG9hdExhYmVsKGFsd2F5c0Zsb2F0TGFiZWwscGxhY2Vob2xkZXIpXV0iIGF1dG8tdmFsaWRhdGUkPSJbW2F1dG9WYWxpZGF0ZV1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgaW52YWxpZD0iW1tpbnZhbGlkXV0iPgoKICAgICAgPHNsb3QgbmFtZT0icHJlZml4IiBzbG90PSJwcmVmaXgiPjwvc2xvdD4KCiAgICAgIDxsYWJlbCBoaWRkZW4kPSJbWyFsYWJlbF1dIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9yJD0iW1tfaW5wdXRJZF1dIiBzbG90PSJsYWJlbCI+W1tsYWJlbF1dPC9sYWJlbD4KCiAgICAgIDwhLS0gTmVlZCB0byBiaW5kIG1heGxlbmd0aCBzbyB0aGF0IHRoZSBwYXBlci1pbnB1dC1jaGFyLWNvdW50ZXIgd29ya3MgY29ycmVjdGx5IC0tPgogICAgICA8aXJvbi1pbnB1dCBiaW5kLXZhbHVlPSJ7e3ZhbHVlfX0iIHNsb3Q9ImlucHV0IiBjbGFzcz0iaW5wdXQtZWxlbWVudCIgaWQkPSJbW19pbnB1dElkXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iIGFsbG93ZWQtcGF0dGVybj0iW1thbGxvd2VkUGF0dGVybl1dIiBpbnZhbGlkPSJ7e2ludmFsaWR9fSIgdmFsaWRhdG9yPSJbW3ZhbGlkYXRvcl1dIj4KICAgICAgICA8aW5wdXQgYXJpYS1sYWJlbGxlZGJ5JD0iW1tfYXJpYUxhYmVsbGVkQnldXSIgYXJpYS1kZXNjcmliZWRieSQ9IltbX2FyaWFEZXNjcmliZWRCeV1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgdGl0bGUkPSJbW3RpdGxlXV0iIHR5cGUkPSJbW3R5cGVdXSIgcGF0dGVybiQ9IltbcGF0dGVybl1dIiByZXF1aXJlZCQ9IltbcmVxdWlyZWRdXSIgYXV0b2NvbXBsZXRlJD0iW1thdXRvY29tcGxldGVdXSIgYXV0b2ZvY3VzJD0iW1thdXRvZm9jdXNdXSIgaW5wdXRtb2RlJD0iW1tpbnB1dG1vZGVdXSIgbWlubGVuZ3RoJD0iW1ttaW5sZW5ndGhdXSIgbWF4bGVuZ3RoJD0iW1ttYXhsZW5ndGhdXSIgbWluJD0iW1ttaW5dXSIgbWF4JD0iW1ttYXhdXSIgc3RlcCQ9Iltbc3RlcF1dIiBuYW1lJD0iW1tuYW1lXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgbGlzdCQ9IltbbGlzdF1dIiBzaXplJD0iW1tzaXplXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiBhdXRvY29ycmVjdCQ9IltbYXV0b2NvcnJlY3RdXSIgb24tY2hhbmdlPSJfb25DaGFuZ2UiIHRhYmluZGV4JD0iW1t0YWJJbmRleF1dIiBhdXRvc2F2ZSQ9IltbYXV0b3NhdmVdXSIgcmVzdWx0cyQ9IltbcmVzdWx0c11dIiBhY2NlcHQkPSJbW2FjY2VwdF1dIiBtdWx0aXBsZSQ9IltbbXVsdGlwbGVdXSIgcm9sZSQ9IltbaW5wdXRSb2xlXV0iIGFyaWEtaGFzcG9wdXAkPSJbW2lucHV0QXJpYUhhc3BvcHVwXV0iPgogICAgICA8L2lyb24taW5wdXQ+CgogICAgICA8c2xvdCBuYW1lPSJzdWZmaXgiIHNsb3Q9InN1ZmZpeCI+PC9zbG90PgoKICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Vycm9yTWVzc2FnZV1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtZXJyb3IgYXJpYS1saXZlPSJhc3NlcnRpdmUiIHNsb3Q9ImFkZC1vbiI+W1tlcnJvck1lc3NhZ2VdXTwvcGFwZXItaW5wdXQtZXJyb3I+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY2hhckNvdW50ZXJdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0LWNoYXItY291bnRlciBzbG90PSJhZGQtb24iPjwvcGFwZXItaW5wdXQtY2hhci1jb3VudGVyPgogICAgICA8L3RlbXBsYXRlPgoKICAgIDwvcGFwZXItaW5wdXQtY29udGFpbmVyPgogIGAsYmVoYXZpb3JzOltGYSxyYV0scHJvcGVydGllczp7dmFsdWU6e3R5cGU6U3RyaW5nfSxpbnB1dFJvbGU6e3R5cGU6U3RyaW5nLHZhbHVlOnZvaWQgMH0saW5wdXRBcmlhSGFzcG9wdXA6e3R5cGU6U3RyaW5nLHZhbHVlOnZvaWQgMH19LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC5faW5wdXRFbGVtZW50fSxsaXN0ZW5lcnM6eyJpcm9uLWlucHV0LXJlYWR5IjoiX29uSXJvbklucHV0UmVhZHkifSxfb25Jcm9uSW5wdXRSZWFkeTpmdW5jdGlvbigpe3RoaXMuJC5uYXRpdmVJbnB1dHx8KHRoaXMuJC5uYXRpdmVJbnB1dD10aGlzLiQkKCJpbnB1dCIpKSx0aGlzLmlucHV0RWxlbWVudCYmLTEhPT10aGlzLl90eXBlc1RoYXRIYXZlVGV4dC5pbmRleE9mKHRoaXMuJC5uYXRpdmVJbnB1dC50eXBlKSYmKHRoaXMuYWx3YXlzRmxvYXRMYWJlbD0hMCksdGhpcy5pbnB1dEVsZW1lbnQuYmluZFZhbHVlJiZ0aGlzLiQuY29udGFpbmVyLl9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZSh0aGlzLmlucHV0RWxlbWVudCl9fSksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpScih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB9CgogICAgICAjY29udGVudFdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgI2NvbnRlbnRXcmFwcGVyLmFuaW1hdGluZyA6OnNsb3R0ZWQoKikgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0iY29udGVudFdyYXBwZXIiPgogICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgPC9kaXY+CmAsaXM6Imlyb24tZHJvcGRvd24iLGJlaGF2aW9yczpbcW8sem8sa2EsUmFdLHByb3BlcnRpZXM6e2hvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImxlZnQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InRvcCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxvcGVuQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdH0sY2xvc2VBbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxmb2N1c1RhcmdldDp7dHlwZTpPYmplY3R9LG5vQW5pbWF0aW9uczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbGxvd091dHNpZGVTY3JvbGw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2FsbG93T3V0c2lkZVNjcm9sbENoYW5nZWQifX0sbGlzdGVuZXJzOnsibmVvbi1hbmltYXRpb24tZmluaXNoIjoiX29uTmVvbkFuaW1hdGlvbkZpbmlzaCJ9LG9ic2VydmVyczpbIl91cGRhdGVPdmVybGF5UG9zaXRpb24ocG9zaXRpb25UYXJnZXQsIHZlcnRpY2FsQWxpZ24sIGhvcml6b250YWxBbGlnbiwgdmVydGljYWxPZmZzZXQsIGhvcml6b250YWxPZmZzZXQpIl0sZ2V0IGNvbnRhaW5lZEVsZW1lbnQoKXtmb3IodmFyIHQ9WWkodGhpcy4kLmNvbnRlbnQpLmdldERpc3RyaWJ1dGVkTm9kZXMoKSxlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKWlmKHRbZV0ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4gdFtlXX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbEFjdGlvbnx8KHRoaXMuc2Nyb2xsQWN0aW9uPXRoaXMuYWxsb3dPdXRzaWRlU2Nyb2xsPyJyZWZpdCI6ImxvY2siKSx0aGlzLl9yZWFkaWVkPSEwfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc2l6aW5nVGFyZ2V0JiZ0aGlzLnNpemluZ1RhcmdldCE9PXRoaXN8fCh0aGlzLnNpemluZ1RhcmdldD10aGlzLmNvbnRhaW5lZEVsZW1lbnR8fHRoaXMpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuY2FuY2VsQW5pbWF0aW9uKCl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJnRoaXMuZGlzYWJsZWQ/dGhpcy5jYW5jZWwoKToodGhpcy5jYW5jZWxBbmltYXRpb24oKSx0aGlzLl91cGRhdGVBbmltYXRpb25Db25maWcoKSxDYS5fb3BlbmVkQ2hhbmdlZC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7IXRoaXMubm9BbmltYXRpb25zJiZ0aGlzLmFuaW1hdGlvbkNvbmZpZy5vcGVuPyh0aGlzLiQuY29udGVudFdyYXBwZXIuY2xhc3NMaXN0LmFkZCgiYW5pbWF0aW5nIiksdGhpcy5wbGF5QW5pbWF0aW9uKCJvcGVuIikpOkNhLl9yZW5kZXJPcGVuZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7IXRoaXMubm9BbmltYXRpb25zJiZ0aGlzLmFuaW1hdGlvbkNvbmZpZy5jbG9zZT8odGhpcy4kLmNvbnRlbnRXcmFwcGVyLmNsYXNzTGlzdC5hZGQoImFuaW1hdGluZyIpLHRoaXMucGxheUFuaW1hdGlvbigiY2xvc2UiKSk6Q2EuX3JlbmRlckNsb3NlZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9vbk5lb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLiQuY29udGVudFdyYXBwZXIuY2xhc3NMaXN0LnJlbW92ZSgiYW5pbWF0aW5nIiksdGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9LF91cGRhdGVBbmltYXRpb25Db25maWc6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5jb250YWluZWRFbGVtZW50LGU9W10uY29uY2F0KHRoaXMub3BlbkFuaW1hdGlvbkNvbmZpZ3x8W10pLmNvbmNhdCh0aGlzLmNsb3NlQW5pbWF0aW9uQ29uZmlnfHxbXSksbj0wO248ZS5sZW5ndGg7bisrKWVbbl0ubm9kZT10O3RoaXMuYW5pbWF0aW9uQ29uZmlnPXtvcGVuOnRoaXMub3BlbkFuaW1hdGlvbkNvbmZpZyxjbG9zZTp0aGlzLmNsb3NlQW5pbWF0aW9uQ29uZmlnfX0sX3VwZGF0ZU92ZXJsYXlQb3NpdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNBdHRhY2hlZCYmdGhpcy5ub3RpZnlSZXNpemUoKX0sX2FsbG93T3V0c2lkZVNjcm9sbENoYW5nZWQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVhZGllZCYmKHQ/dGhpcy5zY3JvbGxBY3Rpb24mJiJsb2NrIiE9PXRoaXMuc2Nyb2xsQWN0aW9ufHwodGhpcy5zY3JvbGxBY3Rpb249InJlZml0Iik6dGhpcy5zY3JvbGxBY3Rpb249ImxvY2siKX0sX2FwcGx5Rm9jdXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZvY3VzVGFyZ2V0fHx0aGlzLmNvbnRhaW5lZEVsZW1lbnQ7dCYmdGhpcy5vcGVuZWQmJiF0aGlzLm5vQXV0b0ZvY3VzP3QuZm9jdXMoKTpDYS5fYXBwbHlGb2N1cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBWYT17cHJvcGVydGllczp7YW5pbWF0aW9uVGltaW5nOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybntkdXJhdGlvbjo1MDAsZWFzaW5nOiJjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIixmaWxsOiJib3RoIn19fX0saXNOZW9uQW5pbWF0aW9uOiEwLGNyZWF0ZWQ6ZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LmFuaW1hdGV8fGNvbnNvbGUud2FybigiTm8gd2ViIGFuaW1hdGlvbnMgZGV0ZWN0ZWQuIFRoaXMgZWxlbWVudCB3aWxsIG5vdCBmdW5jdGlvbiB3aXRob3V0IGEgd2ViIGFuaW1hdGlvbnMgcG9seWZpbGwuIil9LHRpbWluZ0Zyb21Db25maWc6ZnVuY3Rpb24odCl7aWYodC50aW1pbmcpZm9yKHZhciBlIGluIHQudGltaW5nKXRoaXMuYW5pbWF0aW9uVGltaW5nW2VdPXQudGltaW5nW2VdO3JldHVybiB0aGlzLmFuaW1hdGlvblRpbWluZ30sc2V0UHJlZml4ZWRQcm9wZXJ0eTpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpLHI9e3RyYW5zZm9ybTpbIndlYmtpdFRyYW5zZm9ybSJdLHRyYW5zZm9ybU9yaWdpbjpbIm1velRyYW5zZm9ybU9yaWdpbiIsIndlYmtpdFRyYW5zZm9ybU9yaWdpbiJdfVtlXSxvPTA7aT1yW29dO28rKyl0LnN0eWxlW2ldPW47dC5zdHlsZVtlXT1ufSxjb21wbGV0ZTpmdW5jdGlvbih0KXt9fTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovUnIoe2lzOiJmYWRlLWluLWFuaW1hdGlvbiIsYmVoYXZpb3JzOltWYV0sY29uZmlndXJlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQubm9kZSxbe29wYWNpdHk6IjAifSx7b3BhY2l0eToiMSJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcodCkpLHRoaXMuX2VmZmVjdH19KSwKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovClJyKHtpczoiZmFkZS1vdXQtYW5pbWF0aW9uIixiZWhhdmlvcnM6W1ZhXSxjb25maWd1cmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodC5ub2RlLFt7b3BhY2l0eToiMSJ9LHtvcGFjaXR5OiIwIn1dLHRoaXMudGltaW5nRnJvbUNvbmZpZyh0KSksdGhpcy5fZWZmZWN0fX0pLAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KUnIoe2lzOiJwYXBlci1tZW51LWdyb3ctaGVpZ2h0LWFuaW1hdGlvbiIsX3RlbXBsYXRlOm51bGwsYmVoYXZpb3JzOltWYV0sY29uZmlndXJlOmZ1bmN0aW9uKHQpe3ZhciBlPXQubm9kZSxuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KGUsW3toZWlnaHQ6bi8yKyJweCJ9LHtoZWlnaHQ6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKHQpKSx0aGlzLl9lZmZlY3R9fSksUnIoe2lzOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W1ZhXSxjb25maWd1cmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5ub2RlLG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdChlLFt7d2lkdGg6bi8yKyJweCJ9LHt3aWR0aDpuKyJweCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcodCkpLHRoaXMuX2VmZmVjdH19KSxScih7aXM6InBhcGVyLW1lbnUtc2hyaW5rLXdpZHRoLWFuaW1hdGlvbiIsX3RlbXBsYXRlOm51bGwsYmVoYXZpb3JzOltWYV0sY29uZmlndXJlOmZ1bmN0aW9uKHQpe3ZhciBlPXQubm9kZSxuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QoZSxbe3dpZHRoOm4rInB4In0se3dpZHRoOm4tbi8yMCsicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKHQpKSx0aGlzLl9lZmZlY3R9fSksUnIoe2lzOiJwYXBlci1tZW51LXNocmluay1oZWlnaHQtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W1ZhXSxjb25maWd1cmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5ub2RlLG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7cmV0dXJuIHRoaXMuc2V0UHJlZml4ZWRQcm9wZXJ0eShlLCJ0cmFuc2Zvcm1PcmlnaW4iLCIwIDAiKSx0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KGUsW3toZWlnaHQ6bisicHgiLHRyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9LHtoZWlnaHQ6bi8yKyJweCIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yMHB4KSJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcodCkpLHRoaXMuX2VmZmVjdH19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCnZhciBVYT17QU5JTUFUSU9OX0NVQklDX0JFWklFUjoiY3ViaWMtYmV6aWVyKC4zLC45NSwuNSwxKSIsTUFYX0FOSU1BVElPTl9USU1FX01TOjQwMH07Y29uc3QgamE9UnIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgY3Vyc29yOiBhdXRvOwogICAgICAgIGNvbG9yOiB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWVudS1idXR0b24tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIGlyb24tZHJvcGRvd24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWRyb3Bkb3duOwogICAgICB9CgogICAgICAuZHJvcGRvd24tY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItbWVudS1idXR0b24tZHJvcGRvd24tYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbC1hbGlnbj0idG9wIl0pIC5kcm9wZG93bi1jb250ZW50IHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IC0xMHB4OwogICAgICAgIHRvcDogMTBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZlcnRpY2FsLWFsaWduPSJib3R0b20iXSkgLmRyb3Bkb3duLWNvbnRlbnQgewogICAgICAgIGJvdHRvbTogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAtMTBweDsKICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICB9CgogICAgICAjdHJpZ2dlciB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRyaWdnZXIiIG9uLXRhcD0idG9nZ2xlIj4KICAgICAgPHNsb3QgbmFtZT0iZHJvcGRvd24tdHJpZ2dlciI+PC9zbG90PgogICAgPC9kaXY+CgogICAgPGlyb24tZHJvcGRvd24gaWQ9ImRyb3Bkb3duIiBvcGVuZWQ9Int7b3BlbmVkfX0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIHZlcnRpY2FsLWFsaWduPSJbW3ZlcnRpY2FsQWxpZ25dXSIgZHluYW1pYy1hbGlnbj0iW1tkeW5hbWljQWxpZ25dXSIgaG9yaXpvbnRhbC1vZmZzZXQ9IltbaG9yaXpvbnRhbE9mZnNldF1dIiB2ZXJ0aWNhbC1vZmZzZXQ9IltbdmVydGljYWxPZmZzZXRdXSIgbm8tb3ZlcmxhcD0iW1tub092ZXJsYXBdXSIgb3Blbi1hbmltYXRpb24tY29uZmlnPSJbW29wZW5BbmltYXRpb25Db25maWddXSIgY2xvc2UtYW5pbWF0aW9uLWNvbmZpZz0iW1tjbG9zZUFuaW1hdGlvbkNvbmZpZ11dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBmb2N1cy10YXJnZXQ9IltbX2Ryb3Bkb3duQ29udGVudF1dIiBhbGxvdy1vdXRzaWRlLXNjcm9sbD0iW1thbGxvd091dHNpZGVTY3JvbGxdXSIgcmVzdG9yZS1mb2N1cy1vbi1jbG9zZT0iW1tyZXN0b3JlRm9jdXNPbkNsb3NlXV0iIG9uLWlyb24tb3ZlcmxheS1jYW5jZWxlZD0iX19vbklyb25PdmVybGF5Q2FuY2VsZWQiIGV4cGFuZC1zaXppbmctdGFyZ2V0LWZvci1zY3JvbGxiYXJzPSJbW2V4cGFuZFNpemluZ1RhcmdldEZvclNjcm9sbGJhcnNdXSI+CiAgICAgIDxkaXYgc2xvdD0iZHJvcGRvd24tY29udGVudCIgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgIDxzbG90IGlkPSJjb250ZW50IiBuYW1lPSJkcm9wZG93bi1jb250ZW50Ij48L3Nsb3Q+CiAgICAgIDwvZGl2PgogICAgPC9pcm9uLWRyb3Bkb3duPgpgLGlzOiJwYXBlci1tZW51LWJ1dHRvbiIsYmVoYXZpb3JzOlt6byxxb10scHJvcGVydGllczp7b3BlbmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImxlZnQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InRvcCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxkeW5hbWljQWxpZ246e3R5cGU6Qm9vbGVhbn0saG9yaXpvbnRhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LHZlcnRpY2FsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sbm9PdmVybGFwOnt0eXBlOkJvb2xlYW59LG5vQW5pbWF0aW9uczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpZ25vcmVTZWxlY3Q6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2xvc2VPbkFjdGl2YXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG9wZW5BbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3tuYW1lOiJmYWRlLWluLWFuaW1hdGlvbiIsdGltaW5nOntkZWxheToxMDAsZHVyYXRpb246MjAwfX0se25hbWU6InBhcGVyLW1lbnUtZ3Jvdy13aWR0aC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjE1MCxlYXNpbmc6VWEuQU5JTUFUSU9OX0NVQklDX0JFWklFUn19LHtuYW1lOiJwYXBlci1tZW51LWdyb3ctaGVpZ2h0LWFuaW1hdGlvbiIsdGltaW5nOntkZWxheToxMDAsZHVyYXRpb246Mjc1LGVhc2luZzpVYS5BTklNQVRJT05fQ1VCSUNfQkVaSUVSfX1dfX0sY2xvc2VBbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3tuYW1lOiJmYWRlLW91dC1hbmltYXRpb24iLHRpbWluZzp7ZHVyYXRpb246MTUwfX0se25hbWU6InBhcGVyLW1lbnUtc2hyaW5rLXdpZHRoLWFuaW1hdGlvbiIsdGltaW5nOntkZWxheToxMDAsZHVyYXRpb246NTAsZWFzaW5nOlVhLkFOSU1BVElPTl9DVUJJQ19CRVpJRVJ9fSx7bmFtZToicGFwZXItbWVudS1zaHJpbmstaGVpZ2h0LWFuaW1hdGlvbiIsdGltaW5nOntkdXJhdGlvbjoyMDAsZWFzaW5nOiJlYXNlLWluIn19XX19LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LGV4cGFuZFNpemluZ1RhcmdldEZvclNjcm9sbGJhcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2Ryb3Bkb3duQ29udGVudDp7dHlwZTpPYmplY3R9fSxob3N0QXR0cmlidXRlczp7cm9sZToiZ3JvdXAiLCJhcmlhLWhhc3BvcHVwIjoidHJ1ZSJ9LGxpc3RlbmVyczp7Imlyb24tYWN0aXZhdGUiOiJfb25Jcm9uQWN0aXZhdGUiLCJpcm9uLXNlbGVjdCI6Il9vbklyb25TZWxlY3QifSxnZXQgY29udGVudEVsZW1lbnQoKXtmb3IodmFyIHQ9WWkodGhpcy4kLmNvbnRlbnQpLmdldERpc3RyaWJ1dGVkTm9kZXMoKSxlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKWlmKHRbZV0ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4gdFtlXX0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8dGhpcy4kLmRyb3Bkb3duLm9wZW4oKX0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLiQuZHJvcGRvd24uY2xvc2UoKX0sX29uSXJvblNlbGVjdDpmdW5jdGlvbih0KXt0aGlzLmlnbm9yZVNlbGVjdHx8dGhpcy5jbG9zZSgpfSxfb25Jcm9uQWN0aXZhdGU6ZnVuY3Rpb24odCl7dGhpcy5jbG9zZU9uQWN0aXZhdGUmJnRoaXMuY2xvc2UoKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24odCxlKXt0Pyh0aGlzLl9kcm9wZG93bkNvbnRlbnQ9dGhpcy5jb250ZW50RWxlbWVudCx0aGlzLmZpcmUoInBhcGVyLWRyb3Bkb3duLW9wZW4iKSk6bnVsbCE9ZSYmdGhpcy5maXJlKCJwYXBlci1kcm9wZG93bi1jbG9zZSIpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKHQpe3FvLl9kaXNhYmxlZENoYW5nZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQmJnRoaXMub3BlbmVkJiZ0aGlzLmNsb3NlKCl9LF9fb25Jcm9uT3ZlcmxheUNhbmNlbGVkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuJC50cmlnZ2VyO1lpKHQuZGV0YWlsKS5wYXRoLmluZGV4T2YoZSk+LTEmJnQucHJldmVudERlZmF1bHQoKX19KTtPYmplY3Qua2V5cyhVYSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7amFbdF09VWFbdF19KSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBHYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO0dhLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpLEdhLmlubmVySFRNTD0nPGlyb24taWNvbnNldC1zdmcgbmFtZT0icGFwZXItZHJvcGRvd24tbWVudSIgc2l6ZT0iMjQiPlxuPHN2Zz48ZGVmcz5cbjxnIGlkPSJhcnJvdy1kcm9wLWRvd24iPjxwYXRoIGQ9Ik03IDEwbDUgNSA1LTV6Ij48L3BhdGg+PC9nPlxuPC9kZWZzPjwvc3ZnPlxuPC9pcm9uLWljb25zZXQtc3ZnPicsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChHYS5jb250ZW50KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IFdhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7V2Euc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7IiksV2EuaW5uZXJIVE1MPSc8ZG9tLW1vZHVsZSBpZD0icGFwZXItZHJvcGRvd24tbWVudS1zaGFyZWQtc3R5bGVzIj5cbiAgPHRlbXBsYXRlPlxuICAgIDxzdHlsZT5cbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG5cbiAgICAgICAgLyogTk9URShjZGF0YSk6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlXG4gICAgICAgICAqIHZhbHVlIHRvIGJlIGB0cmFuc3BhcmVudGAuXG4gICAgICAgICAqL1xuICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwwLDAsMCk7XG4gICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG5cbiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHtcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB9O1xuXG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnU7XG4gICAgICB9XG5cbiAgICAgIC8qIHBhcGVyLWRyb3Bkb3duLW1lbnUgYW5kIHBhcGVyLWRyb3Bkb3duLW1lbnUtbGlnaHQgYm90aCBkZWxlZ2F0ZSBmb2N1c1xuICAgICAgICogdG8gb3RoZXIgaW50ZXJuYWwgZWxlbWVudHMgd2hpY2ggbWFuYWdlIGZvY3VzIHN0eWxpbmcuICovXG4gICAgICA6aG9zdCg6Zm9jdXMpIHtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoOmRpcihydGwpKSB7XG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuXG4gICAgICAgIEBhcHBseSgtLXBhcGVyLWRyb3Bkb3duLW1lbnUpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdChbZGlzYWJsZWRdKSB7XG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtZGlzYWJsZWQ7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KFtub2lua10pIHBhcGVyLXJpcHBsZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KFtuby1sYWJlbC1mbG9hdF0pIHBhcGVyLXJpcHBsZSB7XG4gICAgICAgIHRvcDogOHB4O1xuICAgICAgfVxuXG4gICAgICBwYXBlci1yaXBwbGUge1xuICAgICAgICB0b3A6IDEycHg7XG4gICAgICAgIGxlZnQ6IDBweDtcbiAgICAgICAgYm90dG9tOiA4cHg7XG4gICAgICAgIHJpZ2h0OiAwcHg7XG5cbiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1yaXBwbGU7XG4gICAgICB9XG5cbiAgICAgIHBhcGVyLW1lbnUtYnV0dG9uIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBhZGRpbmc6IDA7XG5cbiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1idXR0b247XG4gICAgICB9XG5cbiAgICAgIHBhcGVyLWlucHV0IHtcbiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDtcbiAgICAgIH1cblxuICAgICAgaXJvbi1pY29uIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWRpc2FibGVkLXRleHQtY29sb3IpO1xuXG4gICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtaWNvbjtcbiAgICAgIH1cbiAgICA8L3N0eWxlPlxuICA8L3RlbXBsYXRlPlxuPC9kb20tbW9kdWxlPicsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChXYS5jb250ZW50KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IHFhPWVyKEhUTUxFbGVtZW50KTtScih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWRyb3Bkb3duLW1lbnUtc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KCiAgICA8cGFwZXItbWVudS1idXR0b24gaWQ9Im1lbnVCdXR0b24iIHZlcnRpY2FsLWFsaWduPSJbW3ZlcnRpY2FsQWxpZ25dXSIgaG9yaXpvbnRhbC1hbGlnbj0iW1tob3Jpem9udGFsQWxpZ25dXSIgZHluYW1pYy1hbGlnbj0iW1tkeW5hbWljQWxpZ25dXSIgdmVydGljYWwtb2Zmc2V0PSJbW19jb21wdXRlTWVudVZlcnRpY2FsT2Zmc2V0KG5vTGFiZWxGbG9hdCwgdmVydGljYWxPZmZzZXQpXV0iIGRpc2FibGVkPSJbW2Rpc2FibGVkXV0iIG5vLWFuaW1hdGlvbnM9Iltbbm9BbmltYXRpb25zXV0iIG9uLWlyb24tc2VsZWN0PSJfb25Jcm9uU2VsZWN0IiBvbi1pcm9uLWRlc2VsZWN0PSJfb25Jcm9uRGVzZWxlY3QiIG9wZW5lZD0ie3tvcGVuZWR9fSIgY2xvc2Utb24tYWN0aXZhdGUgYWxsb3ctb3V0c2lkZS1zY3JvbGw9IltbYWxsb3dPdXRzaWRlU2Nyb2xsXV0iIHJlc3RvcmUtZm9jdXMtb24tY2xvc2U9IltbcmVzdG9yZUZvY3VzT25DbG9zZV1dIiBleHBhbmQtc2l6aW5nLXRhcmdldC1mb3Itc2Nyb2xsYmFycz0iW1tleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzXV0iPgogICAgICA8IS0tIHN1cHBvcnQgaHlicmlkIG1vZGU6IHVzZXIgbWlnaHQgYmUgdXNpbmcgcGFwZXItbWVudS1idXR0b24gMS54IHdoaWNoIGRpc3RyaWJ1dGVzIHZpYSA8Y29udGVudD4gLS0+CiAgICAgIDxkaXYgY2xhc3M9ImRyb3Bkb3duLXRyaWdnZXIiIHNsb3Q9ImRyb3Bkb3duLXRyaWdnZXIiPgogICAgICAgIDxwYXBlci1yaXBwbGU+PC9wYXBlci1yaXBwbGU+CiAgICAgICAgPCEtLSBwYXBlci1pbnB1dCBoYXMgdHlwZT0idGV4dCIgZm9yIGExMXksIGRvIG5vdCByZW1vdmUgLS0+CiAgICAgICAgPHBhcGVyLWlucHV0IGlkPSJpbnB1dCIgdHlwZT0idGV4dCIgaW52YWxpZD0iW1tpbnZhbGlkXV0iIHJlYWRvbmx5IGRpc2FibGVkPSJbW2Rpc2FibGVkXV0iIHZhbHVlPSJbW3ZhbHVlXV0iIHBsYWNlaG9sZGVyPSJbW3BsYWNlaG9sZGVyXV0iIGVycm9yLW1lc3NhZ2U9IltbZXJyb3JNZXNzYWdlXV0iIGFsd2F5cy1mbG9hdC1sYWJlbD0iW1thbHdheXNGbG9hdExhYmVsXV0iIG5vLWxhYmVsLWZsb2F0PSJbW25vTGFiZWxGbG9hdF1dIiBsYWJlbD0iW1tsYWJlbF1dIiBpbnB1dC1yb2xlPSJidXR0b24iIGlucHV0LWFyaWEtaGFzcG9wdXA9Imxpc3Rib3giIGF1dG9jb21wbGV0ZT0ib2ZmIj4KICAgICAgICAgIDwhLS0gc3VwcG9ydCBoeWJyaWQgbW9kZTogdXNlciBtaWdodCBiZSB1c2luZyBwYXBlci1pbnB1dCAxLnggd2hpY2ggZGlzdHJpYnV0ZXMgdmlhIDxjb250ZW50PiAtLT4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0icGFwZXItZHJvcGRvd24tbWVudTphcnJvdy1kcm9wLWRvd24iIHN1ZmZpeCBzbG90PSJzdWZmaXgiPjwvaXJvbi1pY29uPgogICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDwvZGl2PgogICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgPC9wYXBlci1tZW51LWJ1dHRvbj4KYCxpczoicGFwZXItZHJvcGRvd24tbWVudSIsYmVoYXZpb3JzOltYbyxxbyxyYSxhYV0scHJvcGVydGllczp7c2VsZWN0ZWRJdGVtTGFiZWw6e3R5cGU6U3RyaW5nLG5vdGlmeTohMCxyZWFkT25seTohMH0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHZhbHVlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LGxhYmVsOnt0eXBlOlN0cmluZ30scGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nfSxlcnJvck1lc3NhZ2U6e3R5cGU6U3RyaW5nfSxvcGVuZWQ6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsdmFsdWU6ITEsb2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIn0sYWxsb3dPdXRzaWRlU2Nyb2xsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG5vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sYWx3YXlzRmxvYXRMYWJlbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToicmlnaHQifSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToidG9wIn0sdmVydGljYWxPZmZzZXQ6TnVtYmVyLGR5bmFtaWNBbGlnbjp7dHlwZTpCb29sZWFufSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LGV4cGFuZFNpemluZ1RhcmdldEZvclNjcm9sbGJhcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGxpc3RlbmVyczp7dGFwOiJfb25UYXAifSxrZXlCaW5kaW5nczp7InVwIGRvd24iOiJvcGVuIixlc2M6ImNsb3NlIn0sb2JzZXJ2ZXJzOlsiX3NlbGVjdGVkSXRlbUNoYW5nZWQoc2VsZWN0ZWRJdGVtKSJdLF9hdHRhY2hEb20odCl7Y29uc3QgZT1ZKHRoaXMpO3JldHVybiBlLmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiIsZGVsZWdhdGVzRm9jdXM6ITAsc2hhZHlVcGdyYWRlRnJhZ21lbnQ6dH0pLGUuc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0KSxxYS5wcm90b3R5cGUuX2F0dGFjaERvbS5jYWxsKHRoaXMsdCl9LGZvY3VzKCl7dGhpcy4kLmlucHV0Ll9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZW50RWxlbWVudDt0JiZ0LnNlbGVjdGVkSXRlbSYmdGhpcy5fc2V0U2VsZWN0ZWRJdGVtKHQuc2VsZWN0ZWRJdGVtKX0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciB0PVlpKHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksZT0wLG49dC5sZW5ndGg7ZTxuO2UrKylpZih0W2VdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIHRbZV19LG9wZW46ZnVuY3Rpb24oKXt0aGlzLiQubWVudUJ1dHRvbi5vcGVuKCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy4kLm1lbnVCdXR0b24uY2xvc2UoKX0sX29uSXJvblNlbGVjdDpmdW5jdGlvbih0KXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0odC5kZXRhaWwuaXRlbSl9LF9vbklyb25EZXNlbGVjdDpmdW5jdGlvbih0KXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0obnVsbCl9LF9vblRhcDpmdW5jdGlvbih0KXtkaSh0KT09PXRoaXMmJnRoaXMub3BlbigpfSxfc2VsZWN0ZWRJdGVtQ2hhbmdlZDpmdW5jdGlvbih0KXt2YXIgZTtlPXQ/dC5sYWJlbHx8dC5nZXRBdHRyaWJ1dGUoImxhYmVsIil8fHQudGV4dENvbnRlbnQudHJpbSgpOiIiLHRoaXMudmFsdWU9ZSx0aGlzLl9zZXRTZWxlY3RlZEl0ZW1MYWJlbChlKX0sX2NvbXB1dGVNZW51VmVydGljYWxPZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8KHQ/LTQ6OCl9LF9nZXRWYWxpZGl0eTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8IXRoaXMucmVxdWlyZWR8fHRoaXMucmVxdWlyZWQmJiEhdGhpcy52YWx1ZX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRlbnRFbGVtZW50O3QmJnQuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIix0aGlzLm9wZW5lZD8idHJ1ZSI6ImZhbHNlIil9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwp2YXIgWWE9e291dGVyU2Nyb2xsOntzY3JvbGw6ITB9LHNoYWRvd01vZGU6e3N0YW5kYXJkOjIsd2F0ZXJmYWxsOjEsIndhdGVyZmFsbC10YWxsIjoxfSx0YWxsTW9kZTp7IndhdGVyZmFsbC10YWxsIjohMH19O1JyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWw7CiAgICAgIH0KCiAgICAgICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgICB9CgogICAgICAjbWFpblBhbmVsIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLWJvZHk7CiAgICAgIH0KCiAgICAgICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBzY3JvbGwKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXNjcm9sbF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2Nyb2xsLWNvbnRhaW5lcjsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgOmhvc3QoW21vZGU9c2Nyb2xsXSkgewogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogY292ZXIKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPWNvdmVyXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1jb3Zlci1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgOmhvc3QoW21vZGU9Y292ZXJdKSAjbWFpblBhbmVsIHsKICAgICAgICBwb3NpdGlvbjogc3RhdGljOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBzdGFuZGFyZAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9c3RhbmRhcmRdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXN0YW5kYXJkLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogc2VhbWVkCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1zZWFtZWRdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXNlYW1lZC1jb250YWluZXI7CiAgICAgIH0KCgogICAgICAvKgogICAgICAgKiBtb2RlOiB3YXRlcmZhbGwKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXdhdGVyZmFsbF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtd2F0ZXJmYWxsLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogd2F0ZXJmYWxsLXRhbGwKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXdhdGVyZmFsbC10YWxsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC13YXRlcmZhbGwtdGFsbC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgICNkcm9wU2hhZG93IHsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXM7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMHB4IDVweCA2cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXNoYWRvdzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgI2Ryb3BTaGFkb3cuaGFzLXNoYWRvdyB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgPiA6OnNsb3R0ZWQoLmZpdCkgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgIH0KCiAgICA8L3N0eWxlPgoKICAgIDxzbG90IGlkPSJoZWFkZXJTbG90IiBuYW1lPSJoZWFkZXIiPjwvc2xvdD4KCiAgICA8ZGl2IGlkPSJtYWluUGFuZWwiPgogICAgICA8ZGl2IGlkPSJtYWluQ29udGFpbmVyIiBjbGFzc1wkPSJbW19jb21wdXRlTWFpbkNvbnRhaW5lckNsYXNzKG1vZGUpXV0iPgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgaWQ9ImRyb3BTaGFkb3ciPjwvZGl2PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLWhlYWRlci1wYW5lbCIscHJvcGVydGllczp7bW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6InN0YW5kYXJkIixvYnNlcnZlcjoiX21vZGVDaGFuZ2VkIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHNoYWRvdzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx0YWxsQ2xhc3M6e3R5cGU6U3RyaW5nLHZhbHVlOiJ0YWxsIn0sYXRUb3A6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfX0sb2JzZXJ2ZXJzOlsiX2NvbXB1dGVEcm9wU2hhZG93SGlkZGVuKGF0VG9wLCBtb2RlLCBzaGFkb3cpIl0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hZGRMaXN0ZW5lcigpLHRoaXMuX2tlZXBTY3JvbGxpbmdTdGF0ZSgpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUxpc3RlbmVyKCl9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxIYW5kbGVyPXRoaXMuX3Njcm9sbC5iaW5kKHRoaXMpLGNvbnNvbGUud2Fybih0aGlzLmlzLCJpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGFwcC1sYXlvdXQgaW5zdGVhZCEiKX0sZ2V0IGhlYWRlcigpe3JldHVybiBZaSh0aGlzLiQuaGVhZGVyU2xvdCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpWzBdfSxnZXQgc2Nyb2xsZXIoKXtyZXR1cm4gdGhpcy5fZ2V0U2Nyb2xsZXJGb3JNb2RlKHRoaXMubW9kZSl9LGdldCB2aXNpYmxlU2hhZG93KCl7cmV0dXJuIHRoaXMuJC5kcm9wU2hhZG93LmNsYXNzTGlzdC5jb250YWlucygiaGFzLXNoYWRvdyIpfSxfY29tcHV0ZURyb3BTaGFkb3dIaWRkZW46ZnVuY3Rpb24odCxlLG4pe3ZhciBpPVlhLnNoYWRvd01vZGVbZV07dGhpcy50b2dnbGVDbGFzcygiaGFzLXNoYWRvdyIsISF0aGlzLnNoYWRvd3x8Mj09PWl8fDE9PT1pJiYhdCx0aGlzLiQuZHJvcFNoYWRvdyl9LF9jb21wdXRlTWFpbkNvbnRhaW5lckNsYXNzOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBlLmZsZXg9ImNvdmVyIiE9PXQsT2JqZWN0LmtleXMoZSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKS5qb2luKCIgIil9LF9hZGRMaXN0ZW5lcjpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLnNjcm9sbEhhbmRsZXIpfSxfcmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5zY3JvbGxIYW5kbGVyKX0sX21vZGVDaGFuZ2VkOmZ1bmN0aW9uKHQsZSl7dmFyIG49WWEsaT10aGlzLmhlYWRlcjtpJiYobi50YWxsTW9kZVtlXSYmIW4udGFsbE1vZGVbdF0/KGkuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLnRhbGxDbGFzcyksdGhpcy5hc3luYygoZnVuY3Rpb24oKXtpLmNsYXNzTGlzdC5yZW1vdmUoImFuaW1hdGUiKX0pLDIwMCkpOnRoaXMudG9nZ2xlQ2xhc3MoImFuaW1hdGUiLG4udGFsbE1vZGVbdF0saSkpLHRoaXMuX2tlZXBTY3JvbGxpbmdTdGF0ZSgpfSxfa2VlcFNjcm9sbGluZ1N0YXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zY3JvbGxlcixlPXRoaXMuaGVhZGVyO3RoaXMuX3NldEF0VG9wKDA9PT10LnNjcm9sbFRvcCksZSYmdGhpcy50YWxsQ2xhc3MmJllhLnRhbGxNb2RlW3RoaXMubW9kZV0mJnRoaXMudG9nZ2xlQ2xhc3ModGhpcy50YWxsQ2xhc3MsdGhpcy5hdFRvcHx8ZS5jbGFzc0xpc3QuY29udGFpbnModGhpcy50YWxsQ2xhc3MpJiZ0LnNjcm9sbEhlaWdodDx0aGlzLm9mZnNldEhlaWdodCxlKX0sX3Njcm9sbDpmdW5jdGlvbigpe3RoaXMuX2tlZXBTY3JvbGxpbmdTdGF0ZSgpLHRoaXMuZmlyZSgiY29udGVudC1zY3JvbGwiLHt0YXJnZXQ6dGhpcy5zY3JvbGxlcn0se2J1YmJsZXM6ITF9KX0sX2dldFNjcm9sbGVyRm9yTW9kZTpmdW5jdGlvbih0KXtyZXR1cm4gWWEub3V0ZXJTY3JvbGxbdF0/dGhpczp0aGlzLiQubWFpbkNvbnRhaW5lcn19KSwKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovClJyKHtpczoicGFwZXItaWNvbi1idXR0b24iLF90ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgei1pbmRleDogMDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKCiAgICAgICAgd2lkdGg6IDQwcHg7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwoKICAgICAgICAvKgogICAgICAgICAgTk9URTogQm90aCB2YWx1ZXMgYXJlIG5lZWRlZCwgc2luY2Ugc29tZSBwaG9uZXMgcmVxdWlyZSB0aGUgdmFsdWUgdG8KICAgICAgICAgIGJlIFxgdHJhbnNwYXJlbnRcYC4KICAgICAgICAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICAvKiBCZWNhdXNlIG9mIHBvbHltZXIvMjU1OCwgdGhpcyBzdHlsZSBoYXMgbG93ZXIgc3BlY2lmaWNpdHkgdGhhbiAqICovCiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QgI2luayB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWljb24tYnV0dG9uLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWljb24tYnV0dG9uLWRpc2FibGVkLXRleHQsIHZhcigtLWRpc2FibGVkLXRleHQtY29sb3IpKTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBjdXJzb3I6IGF1dG87CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24tYnV0dG9uLWRpc2FibGVkOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QoOmhvdmVyKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaWNvbi1idXR0b24taG92ZXI7CiAgICAgIH0KCiAgICAgIGlyb24taWNvbiB7CiAgICAgICAgLS1pcm9uLWljb24td2lkdGg6IDEwMCU7CiAgICAgICAgLS1pcm9uLWljb24taGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxpcm9uLWljb24gaWQ9Imljb24iIHNyYz0iW1tzcmNdXSIgaWNvbj0iW1tpY29uXV0iCiAgICAgICAgICAgICAgIGFsdCQ9IltbYWx0XV0iPjwvaXJvbi1pY29uPgogIGAsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImJ1dHRvbiIsdGFiaW5kZXg6IjAifSxiZWhhdmlvcnM6W2NhXSxyZWdpc3RlcmVkOmZ1bmN0aW9uKCl7dGhpcy5fdGVtcGxhdGUuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIil9LHByb3BlcnRpZXM6e3NyYzp7dHlwZTpTdHJpbmd9LGljb246e3R5cGU6U3RyaW5nfSxhbHQ6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfYWx0Q2hhbmdlZCJ9fSxfYWx0Q2hhbmdlZDpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIik7biYmZSE9bnx8dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHQpfX0pLAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KUnIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDQwMHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkOwogICAgICAgIHBhZGRpbmc6IDJweDsKICAgICAgICAtbW96LWFwcGVhcmFuY2U6IHRleHRhcmVhOwogICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGFyZWE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLm1pcnJvci10ZXh0IHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWE7CiAgICAgIH0KCiAgICAgIC5maXQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgcmVzaXplOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgLyogc2VlIGNvbW1lbnRzIGluIHRlbXBsYXRlICovCiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDsKICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0OwogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWE7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhLXBsYWNlaG9sZGVyOwogICAgICB9CgogICAgICB0ZXh0YXJlYTotbW96LXBsYWNlaG9sZGVyIHsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhLXBsYWNlaG9sZGVyOwogICAgICB9CgogICAgICB0ZXh0YXJlYTo6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhLXBsYWNlaG9sZGVyOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDwhLS0gdGhlIG1pcnJvciBzaXplcyB0aGUgaW5wdXQvdGV4dGFyZWEgc28gaXQgZ3Jvd3Mgd2l0aCB0eXBpbmcgLS0+CiAgICA8IS0tIHVzZSAmIzE2MDsgaW5zdGVhZCAmbmJzcDsgb2YgdG8gYWxsb3cgdGhpcyBlbGVtZW50IHRvIGJlIHVzZWQgaW4gWEhUTUwgLS0+CiAgICA8ZGl2IGlkPSJtaXJyb3IiIGNsYXNzPSJtaXJyb3ItdGV4dCIgYXJpYS1oaWRkZW49InRydWUiPiZuYnNwOzwvZGl2PgoKICAgIDwhLS0gc2l6ZSB0aGUgaW5wdXQvdGV4dGFyZWEgd2l0aCBhIGRpdiwgYmVjYXVzZSB0aGUgdGV4dGFyZWEgaGFzIGludHJpbnNpYyBzaXplIGluIGZmIC0tPgogICAgPGRpdiBjbGFzcz0idGV4dGFyZWEtY29udGFpbmVyIGZpdCI+CiAgICAgIDx0ZXh0YXJlYSBpZD0idGV4dGFyZWEiIG5hbWUkPSJbW25hbWVdXSIgYXJpYS1sYWJlbCQ9IltbbGFiZWxdXSIgYXV0b2NvbXBsZXRlJD0iW1thdXRvY29tcGxldGVdXSIgYXV0b2ZvY3VzJD0iW1thdXRvZm9jdXNdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIGlucHV0bW9kZSQ9IltbaW5wdXRtb2RlXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiByb3dzJD0iW1tyb3dzXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iPjwvdGV4dGFyZWE+CiAgICA8L2Rpdj4KYCxpczoiaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSIsYmVoYXZpb3JzOlthYSxxb10scHJvcGVydGllczp7dmFsdWU6e29ic2VydmVyOiJfdmFsdWVDaGFuZ2VkIix0eXBlOlN0cmluZyxub3RpZnk6ITB9LGJpbmRWYWx1ZTp7b2JzZXJ2ZXI6Il9iaW5kVmFsdWVDaGFuZ2VkIix0eXBlOlN0cmluZyxub3RpZnk6ITB9LHJvd3M6e3R5cGU6TnVtYmVyLHZhbHVlOjEsb2JzZXJ2ZXI6Il91cGRhdGVDYWNoZWQifSxtYXhSb3dzOnt0eXBlOk51bWJlcix2YWx1ZTowLG9ic2VydmVyOiJfdXBkYXRlQ2FjaGVkIn0sYXV0b2NvbXBsZXRlOnt0eXBlOlN0cmluZyx2YWx1ZToib2ZmIn0sYXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF1dG9jYXBpdGFsaXplOnt0eXBlOlN0cmluZyx2YWx1ZToibm9uZSJ9LGlucHV0bW9kZTp7dHlwZTpTdHJpbmd9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZ30scmVhZG9ubHk6e3R5cGU6U3RyaW5nfSxyZXF1aXJlZDp7dHlwZTpCb29sZWFufSxtaW5sZW5ndGg6e3R5cGU6TnVtYmVyfSxtYXhsZW5ndGg6e3R5cGU6TnVtYmVyfSxsYWJlbDp7dHlwZTpTdHJpbmd9fSxsaXN0ZW5lcnM6e2lucHV0OiJfb25JbnB1dCJ9LGdldCB0ZXh0YXJlYSgpe3JldHVybiB0aGlzLiQudGV4dGFyZWF9LGdldCBzZWxlY3Rpb25TdGFydCgpe3JldHVybiB0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uU3RhcnR9LGdldCBzZWxlY3Rpb25FbmQoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvbkVuZH0sc2V0IHNlbGVjdGlvblN0YXJ0KHQpe3RoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydD10fSxzZXQgc2VsZWN0aW9uRW5kKHQpe3RoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25FbmQ9dH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OltvYV1kfGhvbmUpLykmJiFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9PUyAxWzM0NTY3ODldLykmJih0aGlzLiQudGV4dGFyZWEuc3R5bGUubWFyZ2luTGVmdD0iLTNweCIpfSx2YWxpZGF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJC50ZXh0YXJlYS52YWxpZGl0eS52YWxpZDtyZXR1cm4gdCYmKHRoaXMucmVxdWlyZWQmJiIiPT09dGhpcy52YWx1ZT90PSExOnRoaXMuaGFzVmFsaWRhdG9yKCkmJih0PWFhLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLnZhbHVlKSkpLHRoaXMuaW52YWxpZD0hdCx0aGlzLmZpcmUoImlyb24taW5wdXQtdmFsaWRhdGUiKSx0fSxfYmluZFZhbHVlQ2hhbmdlZDpmdW5jdGlvbih0KXt0aGlzLnZhbHVlPXR9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy50ZXh0YXJlYTtlJiYoZS52YWx1ZSE9PXQmJihlLnZhbHVlPXR8fDA9PT10P3Q6IiIpLHRoaXMuYmluZFZhbHVlPXQsdGhpcy4kLm1pcnJvci5pbm5lckhUTUw9dGhpcy5fdmFsdWVGb3JNaXJyb3IoKSx0aGlzLmZpcmUoImJpbmQtdmFsdWUtY2hhbmdlZCIse3ZhbHVlOnRoaXMuYmluZFZhbHVlfSkpfSxfb25JbnB1dDpmdW5jdGlvbih0KXt2YXIgZT1ZaSh0KS5wYXRoO3RoaXMudmFsdWU9ZT9lWzBdLnZhbHVlOnQudGFyZ2V0LnZhbHVlfSxfY29uc3RyYWluOmZ1bmN0aW9uKHQpe3ZhciBlO2Zvcih0PXR8fFsiIl0sZT10aGlzLm1heFJvd3M+MCYmdC5sZW5ndGg+dGhpcy5tYXhSb3dzP3Quc2xpY2UoMCx0aGlzLm1heFJvd3MpOnQuc2xpY2UoMCk7dGhpcy5yb3dzPjAmJmUubGVuZ3RoPHRoaXMucm93czspZS5wdXNoKCIiKTtyZXR1cm4gZS5qb2luKCI8YnIvPiIpKyImIzE2MDsifSxfdmFsdWVGb3JNaXJyb3I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRleHRhcmVhO2lmKHQpcmV0dXJuIHRoaXMudG9rZW5zPXQmJnQudmFsdWU/dC52YWx1ZS5yZXBsYWNlKC8mL2dtLCImYW1wOyIpLnJlcGxhY2UoLyIvZ20sIiZxdW90OyIpLnJlcGxhY2UoLycvZ20sIiYjMzk7IikucmVwbGFjZSgvPC9nbSwiJmx0OyIpLnJlcGxhY2UoLz4vZ20sIiZndDsiKS5zcGxpdCgiXG4iKTpbIiJdLHRoaXMuX2NvbnN0cmFpbih0aGlzLnRva2Vucyl9LF91cGRhdGVDYWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLiQubWlycm9yLmlubmVySFRNTD10aGlzLl9jb25zdHJhaW4odGhpcy50b2tlbnMpfX0pLAovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KUnIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgbGFiZWwgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dC1jb250YWluZXIgbm8tbGFiZWwtZmxvYXQkPSJbW25vTGFiZWxGbG9hdF1dIiBhbHdheXMtZmxvYXQtbGFiZWw9IltbX2NvbXB1dGVBbHdheXNGbG9hdExhYmVsKGFsd2F5c0Zsb2F0TGFiZWwscGxhY2Vob2xkZXIpXV0iIGF1dG8tdmFsaWRhdGUkPSJbW2F1dG9WYWxpZGF0ZV1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgaW52YWxpZD0iW1tpbnZhbGlkXV0iPgoKICAgICAgPGxhYmVsIGhpZGRlbiQ9IltbIWxhYmVsXV0iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb3IkPSJbW19pbnB1dElkXV0iIHNsb3Q9ImxhYmVsIj5bW2xhYmVsXV08L2xhYmVsPgoKICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3M9InBhcGVyLWlucHV0LWlucHV0IiBzbG90PSJpbnB1dCIgaWQkPSJbW19pbnB1dElkXV0iIGFyaWEtbGFiZWxsZWRieSQ9IltbX2FyaWFMYWJlbGxlZEJ5XV0iIGFyaWEtZGVzY3JpYmVkYnkkPSJbW19hcmlhRGVzY3JpYmVkQnldXSIgYmluZC12YWx1ZT0ie3t2YWx1ZX19IiBpbnZhbGlkPSJ7e2ludmFsaWR9fSIgdmFsaWRhdG9yJD0iW1t2YWxpZGF0b3JdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGlucHV0bW9kZSQ9IltbaW5wdXRtb2RlXV0iIG5hbWUkPSJbW25hbWVdXSIgcGxhY2Vob2xkZXIkPSJbW3BsYWNlaG9sZGVyXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiByZXF1aXJlZCQ9IltbcmVxdWlyZWRdXSIgbWlubGVuZ3RoJD0iW1ttaW5sZW5ndGhdXSIgbWF4bGVuZ3RoJD0iW1ttYXhsZW5ndGhdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIHJvd3MkPSJbW3Jvd3NdXSIgbWF4LXJvd3MkPSJbW21heFJvd3NdXSIgb24tY2hhbmdlPSJfb25DaGFuZ2UiPjwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tlcnJvck1lc3NhZ2VdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0LWVycm9yIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBzbG90PSJhZGQtb24iPltbZXJyb3JNZXNzYWdlXV08L3BhcGVyLWlucHV0LWVycm9yPgogICAgICA8L3RlbXBsYXRlPgoKICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJDb3VudGVyXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1jaGFyLWNvdW50ZXIgc2xvdD0iYWRkLW9uIj48L3BhcGVyLWlucHV0LWNoYXItY291bnRlcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICA8L3BhcGVyLWlucHV0LWNvbnRhaW5lcj4KYCxpczoicGFwZXItdGV4dGFyZWEiLGJlaGF2aW9yczpbRmEscmFdLHByb3BlcnRpZXM6e19hcmlhTGFiZWxsZWRCeTp7b2JzZXJ2ZXI6Il9hcmlhTGFiZWxsZWRCeUNoYW5nZWQiLHR5cGU6U3RyaW5nfSxfYXJpYURlc2NyaWJlZEJ5OntvYnNlcnZlcjoiX2FyaWFEZXNjcmliZWRCeUNoYW5nZWQiLHR5cGU6U3RyaW5nfSx2YWx1ZTp7dHlwZTpTdHJpbmd9LHJvd3M6e3R5cGU6TnVtYmVyLHZhbHVlOjF9LG1heFJvd3M6e3R5cGU6TnVtYmVyLHZhbHVlOjB9fSxnZXQgc2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0fSxzZXQgc2VsZWN0aW9uU3RhcnQodCl7dGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0PXR9LGdldCBzZWxlY3Rpb25FbmQoKXtyZXR1cm4gdGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvbkVuZH0sc2V0IHNlbGVjdGlvbkVuZCh0KXt0aGlzLiQuaW5wdXQudGV4dGFyZWEuc2VsZWN0aW9uRW5kPXR9LF9hcmlhTGFiZWxsZWRCeUNoYW5nZWQ6ZnVuY3Rpb24odCl7dGhpcy5fZm9jdXNhYmxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsdCl9LF9hcmlhRGVzY3JpYmVkQnlDaGFuZ2VkOmZ1bmN0aW9uKHQpe3RoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5Iix0KX0sZ2V0IF9mb2N1c2FibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50LnRleHRhcmVhfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgWGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtYYS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKSxYYS5pbm5lckhUTUw9Ijxkb20tbW9kdWxlIGlkPVwicGFwZXItaXRlbS1zaGFyZWQtc3R5bGVzXCI+XG4gIDx0ZW1wbGF0ZT5cbiAgICA8c3R5bGU+XG4gICAgICA6aG9zdCwgLnBhcGVyLWl0ZW0ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLW1pbi1oZWlnaHQsIDQ4cHgpO1xuICAgICAgICBwYWRkaW5nOiAwcHggMTZweDtcbiAgICAgIH1cblxuICAgICAgLnBhcGVyLWl0ZW0ge1xuICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7XG4gICAgICAgIGJvcmRlcjpub25lO1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KFtoaWRkZW5dKSwgLnBhcGVyLWl0ZW1baGlkZGVuXSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoLmlyb24tc2VsZWN0ZWQpLCAucGFwZXItaXRlbS5pcm9uLXNlbGVjdGVkIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tc2VsZWN0ZWQtd2VpZ2h0LCBib2xkKTtcblxuICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLXNlbGVjdGVkO1xuICAgICAgfVxuXG4gICAgICA6aG9zdChbZGlzYWJsZWRdKSwgLnBhcGVyLWl0ZW1bZGlzYWJsZWRdIHtcbiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWl0ZW0tZGlzYWJsZWQtY29sb3IsIHZhcigtLWRpc2FibGVkLXRleHQtY29sb3IpKTtcblxuICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWRpc2FibGVkO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCg6Zm9jdXMpLCAucGFwZXItaXRlbTpmb2N1cyB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgb3V0bGluZTogMDtcblxuICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWZvY3VzZWQ7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KDpmb2N1cyk6YmVmb3JlLCAucGFwZXItaXRlbTpmb2N1czpiZWZvcmUge1xuICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0O1xuXG4gICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIG9wYWNpdHk6IHZhcigtLWRhcmstZGl2aWRlci1vcGFjaXR5KTtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1mb2N1c2VkLWJlZm9yZTtcbiAgICAgIH1cbiAgICA8L3N0eWxlPlxuICA8L3RlbXBsYXRlPlxuPC9kb20tbW9kdWxlPiIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChYYS5jb250ZW50KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0ICRhPVtYbyxxbyx7aG9zdEF0dHJpYnV0ZXM6e3JvbGU6Im9wdGlvbiIsdGFiaW5kZXg6IjAifX1dOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KUnIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW07CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWl0ZW0iLGJlaGF2aW9yczpbJGFdfSksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpScih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsgLyogbmVlZGVkIGZvciB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcyB0byB3b3JrIG9uIGZmICovCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICB9CgogICAgICA6aG9zdChbdHdvLWxpbmVdKSB7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1ib2R5LXR3by1saW5lLW1pbi1oZWlnaHQsIDcycHgpOwogICAgICB9CgogICAgICA6aG9zdChbdGhyZWUtbGluZV0pIHsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLWJvZHktdGhyZWUtbGluZS1taW4taGVpZ2h0LCA4OHB4KTsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKikgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoW3NlY29uZGFyeV0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWJvZHkxOwoKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaXRlbS1ib2R5LXNlY29uZGFyeS1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1ib2R5LXNlY29uZGFyeTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWl0ZW0tYm9keSJ9KSwKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovClJyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItaXRlbS1zaGFyZWQtc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW07CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaWNvbi1pdGVtOwogICAgICB9CgogICAgICAuY29udGVudC1pY29uIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwoKICAgICAgICB3aWR0aDogdmFyKC0tcGFwZXItaXRlbS1pY29uLXdpZHRoLCA1NnB4KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWljb247CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0iY29udGVudEljb24iIGNsYXNzPSJjb250ZW50LWljb24iPgogICAgICA8c2xvdCBuYW1lPSJpdGVtLWljb24iPjwvc2xvdD4KICAgIDwvZGl2PgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1pY29uLWl0ZW0iLGJlaGF2aW9yczpbJGFdfSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBLYT17cHJvcGVydGllczp7bXVsdGk6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoibXVsdGlDaGFuZ2VkIn0sc2VsZWN0ZWRWYWx1ZXM6e3R5cGU6QXJyYXksbm90aWZ5OiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxzZWxlY3RlZEl0ZW1zOnt0eXBlOkFycmF5LHJlYWRPbmx5OiEwLG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19LG9ic2VydmVyczpbIl91cGRhdGVTZWxlY3RlZChzZWxlY3RlZFZhbHVlcy5zcGxpY2VzKSJdLHNlbGVjdDpmdW5jdGlvbih0KXt0aGlzLm11bHRpP3RoaXMuX3RvZ2dsZVNlbGVjdGVkKHQpOnRoaXMuc2VsZWN0ZWQ9dH0sbXVsdGlDaGFuZ2VkOmZ1bmN0aW9uKHQpe3RoaXMuX3NlbGVjdGlvbi5tdWx0aT10LHRoaXMuX3VwZGF0ZVNlbGVjdGVkKCl9LGdldCBfc2hvdWxkVXBkYXRlU2VsZWN0aW9uKCl7cmV0dXJuIG51bGwhPXRoaXMuc2VsZWN0ZWR8fG51bGwhPXRoaXMuc2VsZWN0ZWRWYWx1ZXMmJnRoaXMuc2VsZWN0ZWRWYWx1ZXMubGVuZ3RofSxfdXBkYXRlQXR0ckZvclNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5tdWx0aT90aGlzLnNlbGVjdGVkSXRlbXMmJnRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGg+MCYmKHRoaXMuc2VsZWN0ZWRWYWx1ZXM9dGhpcy5zZWxlY3RlZEl0ZW1zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2luZGV4VG9WYWx1ZSh0aGlzLmluZGV4T2YodCkpfSksdGhpcykuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH0pLHRoaXMpKTpqby5fdXBkYXRlQXR0ckZvclNlbGVjdGVkLmFwcGx5KHRoaXMpfSxfdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLm11bHRpP3RoaXMuX3NlbGVjdE11bHRpKHRoaXMuc2VsZWN0ZWRWYWx1ZXMpOnRoaXMuX3NlbGVjdFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQpfSxfc2VsZWN0TXVsdGk6ZnVuY3Rpb24odCl7dmFyIGU9KHRoaXMuX3ZhbHVlc1RvSXRlbXModD10fHxbXSl8fFtdKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10fSkpO3RoaXMuX3NlbGVjdGlvbi5jbGVhcihlKTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0aGlzLl9zZWxlY3Rpb24uc2V0SXRlbVNlbGVjdGVkKGVbbl0sITApO3RoaXMuZmFsbGJhY2tTZWxlY3Rpb24mJiF0aGlzLl9zZWxlY3Rpb24uZ2V0KCkubGVuZ3RoJiZ0aGlzLl92YWx1ZVRvSXRlbSh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKSYmdGhpcy5zZWxlY3QodGhpcy5mYWxsYmFja1NlbGVjdGlvbil9LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zZWxlY3Rpb24uZ2V0KCk7dGhpcy5tdWx0aT8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyh0KSx0aGlzLl9zZXRTZWxlY3RlZEl0ZW0odC5sZW5ndGg/dFswXTpudWxsKSk6bnVsbCE9dD8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhbdF0pLHRoaXMuX3NldFNlbGVjdGVkSXRlbSh0KSk6KHRoaXMuX3NldFNlbGVjdGVkSXRlbXMoW10pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShudWxsKSl9LF90b2dnbGVTZWxlY3RlZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnNlbGVjdGVkVmFsdWVzLmluZGV4T2YodCk7ZTwwP3RoaXMucHVzaCgic2VsZWN0ZWRWYWx1ZXMiLHQpOnRoaXMuc3BsaWNlKCJzZWxlY3RlZFZhbHVlcyIsZSwxKX0sX3ZhbHVlc1RvSXRlbXM6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bnVsbDp0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbHVlVG9JdGVtKHQpfSksdGhpcyl9fSxaYT17cHJvcGVydGllczp7Zm9jdXNlZEl0ZW06e29ic2VydmVyOiJfZm9jdXNlZEl0ZW1DaGFuZ2VkIixyZWFkT25seTohMCx0eXBlOk9iamVjdH0sYXR0ckZvckl0ZW1UaXRsZTp7dHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQifX0sX01PRElGSUVSX0tFWVM6WyJBbHQiLCJBbHRHcmFwaCIsIkNhcHNMb2NrIiwiQ29udHJvbCIsIkZuIiwiRm5Mb2NrIiwiSHlwZXIiLCJNZXRhIiwiTnVtTG9jayIsIk9TIiwiU2Nyb2xsTG9jayIsIlNoaWZ0IiwiU3VwZXIiLCJTeW1ib2wiLCJTeW1ib2xMb2NrIl0sX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TOjFlMyxfcHJldmlvdXNUYWJJbmRleDowLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51In0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU11bHRpc2VsZWN0YWJsZShtdWx0aSkiXSxsaXN0ZW5lcnM6e2ZvY3VzOiJfb25Gb2N1cyIsa2V5ZG93bjoiX29uS2V5ZG93biIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vbklyb25JdGVtc0NoYW5nZWQifSxrZXlCaW5kaW5nczp7dXA6Il9vblVwS2V5Iixkb3duOiJfb25Eb3duS2V5Iixlc2M6Il9vbkVzY0tleSIsInNoaWZ0K3RhYjprZXlkb3duIjoiX29uU2hpZnRUYWJEb3duIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXNldFRhYmluZGljZXMoKX0sc2VsZWN0OmZ1bmN0aW9uKHQpe3RoaXMuX2RlZmF1bHRGb2N1c0FzeW5jJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYyksdGhpcy5fZGVmYXVsdEZvY3VzQXN5bmM9bnVsbCk7dmFyIGU9dGhpcy5fdmFsdWVUb0l0ZW0odCk7ZSYmZS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fCh0aGlzLl9zZXRGb2N1c2VkSXRlbShlKSxLYS5zZWxlY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sX3Jlc2V0VGFiaW5kaWNlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXNbMF06dGhpcy5zZWxlY3RlZEl0ZW07dGhpcy5pdGVtcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLGU9PT10PyIwIjoiLTEiKSxlLnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsdGhpcy5fc2VsZWN0aW9uLmlzU2VsZWN0ZWQoZSkpfSksdGhpcyl9LF91cGRhdGVNdWx0aXNlbGVjdGFibGU6ZnVuY3Rpb24odCl7dD90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1tdWx0aXNlbGVjdGFibGUiLCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIil9LF9mb2N1c1dpdGhLZXlib2FyZEV2ZW50OmZ1bmN0aW9uKHQpe2lmKC0xPT09dGhpcy5fTU9ESUZJRVJfS0VZUy5pbmRleE9mKHQua2V5KSl7dGhpcy5jYW5jZWxEZWJvdW5jZXIoIl9jbGVhclNlYXJjaFRleHQiKTtmb3IodmFyIGUsbj10aGlzLl9zZWFyY2hUZXh0fHwiIixpPShuKz0odC5rZXkmJjE9PXQua2V5Lmxlbmd0aD90LmtleTpTdHJpbmcuZnJvbUNoYXJDb2RlKHQua2V5Q29kZSkpLnRvTG9jYWxlTG93ZXJDYXNlKCkpLmxlbmd0aCxyPTA7ZT10aGlzLml0ZW1zW3JdO3IrKylpZighZS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBvPXRoaXMuYXR0ckZvckl0ZW1UaXRsZXx8InRleHRDb250ZW50IixhPShlW29dfHxlLmdldEF0dHJpYnV0ZShvKXx8IiIpLnRyaW0oKTtpZighKGEubGVuZ3RoPGkpJiZhLnNsaWNlKDAsaSkudG9Mb2NhbGVMb3dlckNhc2UoKT09bil7dGhpcy5fc2V0Rm9jdXNlZEl0ZW0oZSk7YnJlYWt9fXRoaXMuX3NlYXJjaFRleHQ9bix0aGlzLmRlYm91bmNlKCJfY2xlYXJTZWFyY2hUZXh0Iix0aGlzLl9jbGVhclNlYXJjaFRleHQsdGhpcy5fU0VBUkNIX1JFU0VUX1RJTUVPVVRfTVMpfX0sX2NsZWFyU2VhcmNoVGV4dDpmdW5jdGlvbigpe3RoaXMuX3NlYXJjaFRleHQ9IiJ9LF9mb2N1c1ByZXZpb3VzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuaXRlbXMubGVuZ3RoLGU9TnVtYmVyKHRoaXMuaW5kZXhPZih0aGlzLmZvY3VzZWRJdGVtKSksbj0xO248dCsxO24rKyl7dmFyIGk9dGhpcy5pdGVtc1soZS1uK3QpJXRdO2lmKCFpLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSl7dmFyIHI9WWkoaSkuZ2V0T3duZXJSb290KCl8fGRvY3VtZW50O2lmKHRoaXMuX3NldEZvY3VzZWRJdGVtKGkpLFlpKHIpLmFjdGl2ZUVsZW1lbnQ9PWkpcmV0dXJufX19LF9mb2N1c05leHQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5pdGVtcy5sZW5ndGgsZT1OdW1iZXIodGhpcy5pbmRleE9mKHRoaXMuZm9jdXNlZEl0ZW0pKSxuPTE7bjx0KzE7bisrKXt2YXIgaT10aGlzLml0ZW1zWyhlK24pJXRdO2lmKCFpLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSl7dmFyIHI9WWkoaSkuZ2V0T3duZXJSb290KCl8fGRvY3VtZW50O2lmKHRoaXMuX3NldEZvY3VzZWRJdGVtKGkpLFlpKHIpLmFjdGl2ZUVsZW1lbnQ9PWkpcmV0dXJufX19LF9hcHBseVNlbGVjdGlvbjpmdW5jdGlvbih0LGUpe3Quc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIixlPyJ0cnVlIjoiZmFsc2UiKSxqby5fYXBwbHlTZWxlY3Rpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfZm9jdXNlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKHQsZSl7ZSYmZS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSwhdHx8dC5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fHRoaXMuZGlzYWJsZWR8fCh0LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIiksdC5mb2N1cygpKX0sX29uSXJvbkl0ZW1zQ2hhbmdlZDpmdW5jdGlvbih0KXt0LmRldGFpbC5hZGRlZE5vZGVzLmxlbmd0aCYmdGhpcy5fcmVzZXRUYWJpbmRpY2VzKCl9LF9vblNoaWZ0VGFiRG93bjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTtaYS5fc2hpZnRUYWJQcmVzc2VkPSEwLHRoaXMuX3NldEZvY3VzZWRJdGVtKG51bGwpLHRoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksdGhpcy5hc3luYygoZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLGUpLFphLl9zaGlmdFRhYlByZXNzZWQ9ITF9KSwxKX0sX29uRm9jdXM6ZnVuY3Rpb24odCl7aWYoIVphLl9zaGlmdFRhYlByZXNzZWQpe3ZhciBlPVlpKHQpLnJvb3RUYXJnZXQ7KGU9PT10aGlzfHx2b2lkIDA9PT1lLnRhYkluZGV4fHx0aGlzLmlzTGlnaHREZXNjZW5kYW50KGUpKSYmKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jPXRoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tdWx0aT90aGlzLnNlbGVjdGVkSXRlbXMmJnRoaXMuc2VsZWN0ZWRJdGVtc1swXTp0aGlzLnNlbGVjdGVkSXRlbTt0aGlzLl9zZXRGb2N1c2VkSXRlbShudWxsKSx0P3RoaXMuX3NldEZvY3VzZWRJdGVtKHQpOnRoaXMuaXRlbXNbMF0mJnRoaXMuX2ZvY3VzTmV4dCgpfSkpKX19LF9vblVwS2V5OmZ1bmN0aW9uKHQpe3RoaXMuX2ZvY3VzUHJldmlvdXMoKSx0LmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbkRvd25LZXk6ZnVuY3Rpb24odCl7dGhpcy5fZm9jdXNOZXh0KCksdC5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25Fc2NLZXk6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mb2N1c2VkSXRlbTtlJiZlLmJsdXIoKX0sX29uS2V5ZG93bjpmdW5jdGlvbih0KXt0aGlzLmtleWJvYXJkRXZlbnRNYXRjaGVzS2V5cyh0LCJ1cCBkb3duIGVzYyIpfHx0aGlzLl9mb2N1c1dpdGhLZXlib2FyZEV2ZW50KHQpLHQuc3RvcFByb3BhZ2F0aW9uKCl9LF9hY3RpdmF0ZUhhbmRsZXI6ZnVuY3Rpb24odCl7am8uX2FjdGl2YXRlSGFuZGxlci5jYWxsKHRoaXMsdCksdC5zdG9wUHJvcGFnYXRpb24oKX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbih0KXt0Pyh0aGlzLl9wcmV2aW91c1RhYkluZGV4PXRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpP3RoaXMudGFiSW5kZXg6MCx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKSk6dGhpcy5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHRoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdGhpcy5fcHJldmlvdXNUYWJJbmRleCl9LF9zaGlmdFRhYlByZXNzZWQ6ITF9LEphPVtbam8sS2FdLHpvLFphXTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovClJyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA4cHggMDsKCiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItbGlzdGJveC1iYWNrZ3JvdW5kLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItbGlzdGJveC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWxpc3Rib3g7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1saXN0Ym94IixiZWhhdmlvcnM6W0phXSxob3N0QXR0cmlidXRlczp7cm9sZToibGlzdGJveCJ9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBRYT1fZWAKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMSJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIzIl0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iNCJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi04ZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7UWEuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7IiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChRYS5jb250ZW50KSwKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovClJyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItbWF0ZXJpYWwtc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QoW2FuaW1hdGVkXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy10cmFuc2l0aW9uOwogICAgICB9CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLW1hdGVyaWFsIixwcm9wZXJ0aWVzOntlbGV2YXRpb246e3R5cGU6TnVtYmVyLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZToxfSxhbmltYXRlZDp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX19fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCB0cz17cHJvcGVydGllczp7dmFsdWU6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sbWluOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sbWF4Ont0eXBlOk51bWJlcix2YWx1ZToxMDAsbm90aWZ5OiEwfSxzdGVwOnt0eXBlOk51bWJlcix2YWx1ZToxLG5vdGlmeTohMH0scmF0aW86e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITAsbm90aWZ5OiEwfX0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZSh2YWx1ZSwgbWluLCBtYXgsIHN0ZXApIl0sX2NhbGNSYXRpbzpmdW5jdGlvbih0KXtyZXR1cm4odGhpcy5fY2xhbXBWYWx1ZSh0KS10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKX0sX2NsYW1wVmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWluKHRoaXMubWF4LE1hdGgubWF4KHRoaXMubWluLHRoaXMuX2NhbGNTdGVwKHQpKSl9LF9jYWxjU3RlcDpmdW5jdGlvbih0KXtpZih0PXBhcnNlRmxvYXQodCksIXRoaXMuc3RlcClyZXR1cm4gdDt2YXIgZT1NYXRoLnJvdW5kKCh0LXRoaXMubWluKS90aGlzLnN0ZXApO3JldHVybiB0aGlzLnN0ZXA8MT9lLygxL3RoaXMuc3RlcCkrdGhpcy5taW46ZSp0aGlzLnN0ZXArdGhpcy5taW59LF92YWxpZGF0ZVZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlKTtyZXR1cm4gdGhpcy52YWx1ZT10aGlzLm9sZFZhbHVlPWlzTmFOKHQpP3RoaXMub2xkVmFsdWU6dCx0aGlzLnZhbHVlIT09dH0sX3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX3ZhbGlkYXRlVmFsdWUoKSx0aGlzLl9zZXRSYXRpbygxMDAqdGhpcy5fY2FsY1JhdGlvKHRoaXMudmFsdWUpKX19OwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi9Scih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDIwMHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSksIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgICNwcm9ncmVzc0NvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItcHJvZ3Jlc3MtY29udGFpbmVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzQ29udGFpbmVyLAogICAgICAvKiB0aGUgc3RyaXBlIGZvciB0aGUgaW5kZXRlcm1pbmF0ZSBhbmltYXRpb24qLwogICAgICAuaW5kZXRlcm1pbmF0ZTo6YWZ0ZXIgewogICAgICAgIGhlaWdodDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaGVpZ2h0LCA0cHgpOwogICAgICB9CgogICAgICAjcHJpbWFyeVByb2dyZXNzLAogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MsCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzQ29udGFpbmVyLAogICAgICAuaW5kZXRlcm1pbmF0ZTo6YWZ0ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWNvbnRhaW5lci1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZXktMzAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KC50cmFuc2l0aW5nKSAjcHJpbWFyeVByb2dyZXNzLAogICAgICA6aG9zdCgudHJhbnNpdGluZykgI3NlY29uZGFyeVByb2dyZXNzIHsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6IC13ZWJraXQtdHJhbnNmb3JtOwogICAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybTsKCiAgICAgICAgLyogRHVyYXRpb24gKi8KICAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tZHVyYXRpb24sIDAuMDhzKTsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWR1cmF0aW9uLCAwLjA4cyk7CgogICAgICAgIC8qIFRpbWluZyBmdW5jdGlvbiAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLCBlYXNlKTsKICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24sIGVhc2UpOwoKICAgICAgICAvKiBEZWxheSAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kZWxheTogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kZWxheSwgMHMpOwogICAgICAgIHRyYW5zaXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tZGVsYXksIDBzKTsKICAgICAgfQoKICAgICAgI3ByaW1hcnlQcm9ncmVzcywKICAgICAgI3NlY29uZGFyeVByb2dyZXNzIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogbGVmdCBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgwKTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgwKTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAjcHJpbWFyeVByb2dyZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1hY3RpdmUtY29sb3IsIHZhcigtLWdvb2dsZS1ncmVlbi01MDApKTsKICAgICAgfQoKICAgICAgI3NlY29uZGFyeVByb2dyZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1zZWNvbmRhcnktY29sb3IsIHZhcigtLWdvb2dsZS1ncmVlbi0xMDApKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgI3ByaW1hcnlQcm9ncmVzcyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtZGlzYWJsZWQtYWN0aXZlLWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JleS01MDApKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgI3NlY29uZGFyeVByb2dyZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3IsIHZhcigtLWdvb2dsZS1ncmV5LTMwMCkpOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtkaXNhYmxlZF0pKSAjcHJpbWFyeVByb2dyZXNzLmluZGV0ZXJtaW5hdGUgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZS1iYXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb246IGluZGV0ZXJtaW5hdGUtYmFyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoW2Rpc2FibGVkXSkpICNwcmltYXJ5UHJvZ3Jlc3MuaW5kZXRlcm1pbmF0ZTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICIiOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwoKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZS1zcGxpdHRlciB2YXIoLS1wYXBlci1wcm9ncmVzcy1pbmRldGVybWluYXRlLWN5Y2xlLWR1cmF0aW9uLCAycykgbGluZWFyIGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZS1zcGxpdHRlciB2YXIoLS1wYXBlci1wcm9ncmVzcy1pbmRldGVybWluYXRlLWN5Y2xlLWR1cmF0aW9uLCAycykgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZS1iYXIgewogICAgICAgIDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgtMTAwJSk7CiAgICAgICAgfQogICAgICAgIDUwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgIH0KICAgICAgICA3NSUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC4yOCwuNjIsLjM3LC45MSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgwKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBpbmRldGVybWluYXRlLXNwbGl0dGVyIHsKICAgICAgICAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgtMTI1JSk7CiAgICAgICAgfQogICAgICAgIDMwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgtMTI1JSk7CiAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllciguNDIsMCwuNiwuOCk7CiAgICAgICAgfQogICAgICAgIDkwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgxMjUlKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgxMjUlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZS1iYXIgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoLTEwMCUpOwogICAgICAgIH0KICAgICAgICA1MCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICAgIDc1JSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllciguMjgsLjYyLC4zNywuOTEpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDApIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBpbmRldGVybWluYXRlLXNwbGl0dGVyIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgIH0KICAgICAgICAzMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllciguNDIsMCwuNiwuOCk7CiAgICAgICAgfQogICAgICAgIDkwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJwcm9ncmVzc0NvbnRhaW5lciI+CiAgICAgIDxkaXYgaWQ9InNlY29uZGFyeVByb2dyZXNzIiBoaWRkZW5cJD0iW1tfaGlkZVNlY29uZGFyeVByb2dyZXNzKHNlY29uZGFyeVJhdGlvKV1dIj48L2Rpdj4KICAgICAgPGRpdiBpZD0icHJpbWFyeVByb2dyZXNzIj48L2Rpdj4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1wcm9ncmVzcyIsYmVoYXZpb3JzOlt0c10scHJvcGVydGllczp7c2Vjb25kYXJ5UHJvZ3Jlc3M6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LHNlY29uZGFyeVJhdGlvOnt0eXBlOk51bWJlcix2YWx1ZTowLHJlYWRPbmx5OiEwfSxpbmRldGVybWluYXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il90b2dnbGVJbmRldGVybWluYXRlIn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQifX0sb2JzZXJ2ZXJzOlsiX3Byb2dyZXNzQ2hhbmdlZChzZWNvbmRhcnlQcm9ncmVzcywgdmFsdWUsIG1pbiwgbWF4LCBpbmRldGVybWluYXRlKSJdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJwcm9ncmVzc2JhciJ9LF90b2dnbGVJbmRldGVybWluYXRlOmZ1bmN0aW9uKHQpe3RoaXMudG9nZ2xlQ2xhc3MoImluZGV0ZXJtaW5hdGUiLHQsdGhpcy4kLnByaW1hcnlQcm9ncmVzcyl9LF90cmFuc2Zvcm1Qcm9ncmVzczpmdW5jdGlvbih0LGUpe3Quc3R5bGUudHJhbnNmb3JtPXQuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJzY2FsZVgoIitlLzEwMCsiKSJ9LF9tYWluUmF0aW9DaGFuZ2VkOmZ1bmN0aW9uKHQpe3RoaXMuX3RyYW5zZm9ybVByb2dyZXNzKHRoaXMuJC5wcmltYXJ5UHJvZ3Jlc3MsdCl9LF9wcm9ncmVzc0NoYW5nZWQ6ZnVuY3Rpb24odCxlLG4saSxyKXt0PXRoaXMuX2NsYW1wVmFsdWUodCksZT10aGlzLl9jbGFtcFZhbHVlKGUpO3ZhciBvPTEwMCp0aGlzLl9jYWxjUmF0aW8odCksYT0xMDAqdGhpcy5fY2FsY1JhdGlvKGUpO3RoaXMuX3NldFNlY29uZGFyeVJhdGlvKG8pLHRoaXMuX3RyYW5zZm9ybVByb2dyZXNzKHRoaXMuJC5zZWNvbmRhcnlQcm9ncmVzcyxvKSx0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQucHJpbWFyeVByb2dyZXNzLGEpLHRoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3M9dCxyP3RoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXZhbHVlbm93Iik6dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVub3ciLGUpLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbWluIixuKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1heCIsaSl9LF9kaXNhYmxlZENoYW5nZWQ6ZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLHQ/InRydWUiOiJmYWxzZSIpfSxfaGlkZVNlY29uZGFyeVByb2dyZXNzOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09dH19KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgZXM9X2VgCjxzdHlsZT4KICA6aG9zdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBsaW5lLWhlaWdodDogMDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tc2l6ZSwgMTZweCk7CiAgICAvKiAtMXB4IGlzIGEgc2VudGluZWwgZm9yIHRoZSBkZWZhdWx0IGFuZCBpcyByZXBsYWNlIGluIFxgYXR0YWNoZWRcYC4gKi8KICAgIC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemU6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSwgLTFweCk7CiAgfQoKICA6aG9zdCg6Zm9jdXMpIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQoKICAjcmFkaW9Db250YWluZXIgewogICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplKTsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgogICAgQGFwcGx5IC0tcGFwZXItcmFkaW8tYnV0dG9uLXJhZGlvLWNvbnRhaW5lcjsKICB9CgogICNpbmsgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA1MCU7CiAgICBsZWZ0OiA1MCU7CiAgICByaWdodDogYXV0bzsKICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSk7CiAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplKTsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjY7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICB9CgogICNpbmtbY2hlY2tlZF0gewogICAgY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgI29mZlJhZGlvLCAjb25SYWRpbyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgdG9wOiAwOwogICAgbGVmdDogMDsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogIH0KCiAgI29mZlJhZGlvIHsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1iYWNrZ3JvdW5kLWNvbG9yLCB0cmFuc3BhcmVudCk7CiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4yOHM7CiAgfQoKICAjb25SYWRpbyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gZWFzZSAwLjI4czsKICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNvZmZSYWRpbyB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNvblJhZGlvIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjUpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjUpOwogIH0KCiAgI3JhZGlvTGFiZWwgewogICAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICBtYXJnaW4tbGVmdDogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLXNwYWNpbmcsIDEwcHgpOwogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbDsKICB9CgogIDpob3N0KFtjaGVja2VkXSkgI3JhZGlvTGFiZWwgewogICAgQGFwcGx5IC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLWNoZWNrZWQ7CiAgfQoKICAjcmFkaW9MYWJlbDpkaXIocnRsKSB7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIG1hcmdpbi1yaWdodDogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLXNwYWNpbmcsIDEwcHgpOwogIH0KCiAgI3JhZGlvTGFiZWxbaGlkZGVuXSB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgLyogZGlzYWJsZWQgc3RhdGUgKi8KCiAgOmhvc3QoW2Rpc2FibGVkXSkgI29mZlJhZGlvIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIG9wYWNpdHk6IDAuNTsKICB9CgogIDpob3N0KFtkaXNhYmxlZF0pICNyYWRpb0xhYmVsIHsKICAgIC8qIHNsaWdodGx5IGRhcmtlciB0aGFuIHRoZSBidXR0b24sIHNvIHRoYXQgaXQncyByZWFkYWJsZSAqLwogICAgb3BhY2l0eTogMC42NTsKICB9Cjwvc3R5bGU+Cgo8ZGl2IGlkPSJyYWRpb0NvbnRhaW5lciI+CiAgPGRpdiBpZD0ib2ZmUmFkaW8iPjwvZGl2PgogIDxkaXYgaWQ9Im9uUmFkaW8iPjwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9InJhZGlvTGFiZWwiPjxzbG90Pjwvc2xvdD48L2Rpdj5gO2VzLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpLFJyKHtfdGVtcGxhdGU6ZXMsaXM6InBhcGVyLXJhZGlvLWJ1dHRvbiIsYmVoYXZpb3JzOlt1YV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvIiwiYXJpYS1jaGVja2VkIjohMSx0YWJpbmRleDowfSxwcm9wZXJ0aWVzOnthcmlhQWN0aXZlQXR0cmlidXRlOnt0eXBlOlN0cmluZyx2YWx1ZToiYXJpYS1jaGVja2VkIn19LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC5yYWRpb0NvbnRhaW5lcn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtMaSh0aGlzLChmdW5jdGlvbigpe2lmKCItMXB4Ij09PXRoaXMuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKCItLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplIikudHJpbSgpKXt2YXIgdD1wYXJzZUZsb2F0KHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKCItLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLXNpemUiKS50cmltKCkpLGU9TWF0aC5mbG9vcigzKnQpO2UlMiE9dCUyJiZlKyssdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSI6ZSsicHgifSl9fSkpfX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKICAgIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgbnM9e2hvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51YmFyIn0sa2V5QmluZGluZ3M6e2xlZnQ6Il9vbkxlZnRLZXkiLHJpZ2h0OiJfb25SaWdodEtleSJ9LF9vblVwS2V5OmZ1bmN0aW9uKHQpe3RoaXMuZm9jdXNlZEl0ZW0uY2xpY2soKSx0LmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbkRvd25LZXk6ZnVuY3Rpb24odCl7dGhpcy5mb2N1c2VkSXRlbS5jbGljaygpLHQuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sZ2V0IF9pc1JUTCgpe3JldHVybiJydGwiPT09d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlyZWN0aW9ufSxfb25MZWZ0S2V5OmZ1bmN0aW9uKHQpe3RoaXMuX2lzUlRMP3RoaXMuX2ZvY3VzTmV4dCgpOnRoaXMuX2ZvY3VzUHJldmlvdXMoKSx0LmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vblJpZ2h0S2V5OmZ1bmN0aW9uKHQpe3RoaXMuX2lzUlRMP3RoaXMuX2ZvY3VzUHJldmlvdXMoKTp0aGlzLl9mb2N1c05leHQoKSx0LmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbktleWRvd246ZnVuY3Rpb24odCl7dGhpcy5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXModCwidXAgZG93biBsZWZ0IHJpZ2h0IGVzYyIpfHx0aGlzLl9mb2N1c1dpdGhLZXlib2FyZEV2ZW50KHQpfX0saXM9W0phLG5zXTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovClJyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgcGFkZGluZzogdmFyKC0tcGFwZXItcmFkaW8tZ3JvdXAtaXRlbS1wYWRkaW5nLCAxMnB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLXJhZGlvLWdyb3VwIixiZWhhdmlvcnM6W2lzXSxob3N0QXR0cmlidXRlczp7cm9sZToicmFkaW9ncm91cCJ9LHByb3BlcnRpZXM6e2F0dHJGb3JTZWxlY3RlZDp7dHlwZTpTdHJpbmcsdmFsdWU6Im5hbWUifSxzZWxlY3RlZEF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImNoZWNrZWQifSxzZWxlY3RhYmxlOnt0eXBlOlN0cmluZyx2YWx1ZToicGFwZXItcmFkaW8tYnV0dG9uIn0sYWxsb3dFbXB0eVNlbGVjdGlvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sc2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbHVlVG9JdGVtKHQpO2lmKCFlfHwhZS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe2lmKHRoaXMuc2VsZWN0ZWQpe3ZhciBuPXRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuc2VsZWN0ZWQpO2lmKHRoaXMuc2VsZWN0ZWQ9PXQpe2lmKCF0aGlzLmFsbG93RW1wdHlTZWxlY3Rpb24pcmV0dXJuIHZvaWQobiYmKG4uY2hlY2tlZD0hMCkpO3Q9IiJ9biYmKG4uY2hlY2tlZD0hMSl9am8uc2VsZWN0LmFwcGx5KHRoaXMsW3RdKSx0aGlzLmZpcmUoInBhcGVyLXJhZGlvLWdyb3VwLWNoYW5nZWQiKX19LF9hY3RpdmF0ZUZvY3VzZWRJdGVtOmZ1bmN0aW9uKCl7dGhpcy5faXRlbUFjdGl2YXRlKHRoaXMuX3ZhbHVlRm9ySXRlbSh0aGlzLmZvY3VzZWRJdGVtKSx0aGlzLmZvY3VzZWRJdGVtKX0sX29uVXBLZXk6ZnVuY3Rpb24odCl7dGhpcy5fZm9jdXNQcmV2aW91cygpLHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9hY3RpdmF0ZUZvY3VzZWRJdGVtKCl9LF9vbkRvd25LZXk6ZnVuY3Rpb24odCl7dGhpcy5fZm9jdXNOZXh0KCksdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uTGVmdEtleTpmdW5jdGlvbih0KXtucy5fb25MZWZ0S2V5LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9hY3RpdmF0ZUZvY3VzZWRJdGVtKCl9LF9vblJpZ2h0S2V5OmZ1bmN0aW9uKHQpe25zLl9vblJpZ2h0S2V5LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9hY3RpdmF0ZUZvY3VzZWRJdGVtKCl9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBycz1fZWAKICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIEBhcHBseSAtLWxheW91dDsKICAgICAgQGFwcGx5IC0tbGF5b3V0LWp1c3RpZmllZDsKICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgd2lkdGg6IDIwMHB4OwogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1hY3RpdmUtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTcwMCkpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLXNlY29uZGFyeS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtMzAwKSk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtZGlzYWJsZWQtYWN0aXZlLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQtYWN0aXZlLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLXNlY29uZGFyeS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQ6IHZhcigtLXBhcGVyLXNsaWRlci1oZWlnaHQsIDJweCk7CiAgICB9CgogICAgLyogZm9jdXMgc2hvd3MgdGhlIHJpcHBsZSAqLwogICAgOmhvc3QoOmZvY3VzKSB7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IFRob3VnaCA6aG9zdC1jb250ZXh0IGlzIG5vdCB1bml2ZXJzYWxseSBzdXBwb3J0ZWQsIHNvbWUgcGFnZXMKICAgICAgKiBzdGlsbCByZWx5IG9uIHBhcGVyLXNsaWRlciBiZWluZyBmbGlwcGVkIHdoZW4gZGlyPSJydGwiIGlzIHNldCBvbiBib2R5LiBGb3IgZnVsbAogICAgICAqIGNvbXBhdGliaWxpdHksIGRpcj0icnRsIiBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0IG9uIHBhcGVyLXNsaWRlci4KICAgICAgKi8KICAgIDpkaXIocnRsKSAjc2xpZGVyQ29udGFpbmVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTsKICAgIH0KCiAgICAvKioKICAgICAgKiBOT1RFKGtlYW51bGVlKTogVGhpcyBpcyBzZXBhcmF0ZSBmcm9tIHRoZSBydWxlIGFib3ZlIGJlY2F1c2UgOmhvc3QtY29udGV4dCBtYXkKICAgICAgKiBub3QgYmUgcmVjb2duaXplZC4KICAgICAgKi8KICAgIDpob3N0KFtkaXI9InJ0bCJdKSAjc2xpZGVyQ29udGFpbmVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTsKICAgIH0KCiAgICAvKioKICAgICAgKiBOT1RFKGtlYW51bGVlKTogTmVlZGVkIHRvIG92ZXJyaWRlIHRoZSA6aG9zdC1jb250ZXh0IHJ1bGUgKHdoZXJlIHN1cHBvcnRlZCkKICAgICAgKiB0byBzdXBwb3J0IExUUiBzbGlkZXJzIGluIFJUTCBwYWdlcy4KICAgICAgKi8KICAgIDpob3N0KFtkaXI9Imx0ciJdKSAjc2xpZGVyQ29udGFpbmVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSk7CiAgICB9CgogICAgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogY2FsYygzMHB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KSk7CiAgICAgIG1hcmdpbi1sZWZ0OiBjYWxjKDE1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoMTVweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICB9CgogICAgI3NsaWRlckNvbnRhaW5lcjpmb2N1cyB7CiAgICAgIG91dGxpbmU6IDA7CiAgICB9CgogICAgI3NsaWRlckNvbnRhaW5lci5lZGl0YWJsZSB7CiAgICAgIG1hcmdpbi10b3A6IDEycHg7CiAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICB9CgogICAgLmJhci1jb250YWluZXIgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogMDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAucmluZyA+IC5iYXItY29udGFpbmVyIHsKICAgICAgbGVmdDogY2FsYyg1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgICB0cmFuc2l0aW9uOiBsZWZ0IDAuMThzIGVhc2U7CiAgICB9CgogICAgLnJpbmcuZXhwYW5kLmRyYWdnaW5nID4gLmJhci1jb250YWluZXIgewogICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgfQoKICAgIC5yaW5nLmV4cGFuZDpub3QoLnBpbikgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgIGxlZnQ6IGNhbGMoOHB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgIH0KCiAgICAjc2xpZGVyQmFyIHsKICAgICAgcGFkZGluZzogMTVweCAwOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWJhci1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLWNvbnRhaW5lci1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWNvbnRhaW5lci1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCk7CiAgICB9CgogICAgLnNsaWRlci1tYXJrZXJzIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAvKiBzbGlkZXIta25vYiBpcyAzMHB4ICsgdGhlIHNsaWRlci1oZWlnaHQgc28gdGhhdCB0aGUgbWFya2VycyBzaG91bGQgc3RhcnQgYXQgYSBvZmZzZXQgb2YgMTVweCovCiAgICAgIHRvcDogMTVweDsKICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogLTFweDsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgfQoKICAgIC5zbGlkZXItbWFya2VyIHsKICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICB9CiAgICAuc2xpZGVyLW1hcmtlcnM6OmFmdGVyLAogICAgLnNsaWRlci1tYXJrZXI6OmFmdGVyIHsKICAgICAgY29udGVudDogIiI7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBtYXJnaW4tbGVmdDogLTFweDsKICAgICAgd2lkdGg6IDJweDsKICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yLCAjMDAwKTsKICAgIH0KCiAgICAuc2xpZGVyLWtub2IgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHRvcDogMDsKICAgICAgbWFyZ2luLWxlZnQ6IGNhbGMoLTE1cHggLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgICB3aWR0aDogY2FsYygzMHB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KSk7CiAgICAgIGhlaWdodDogY2FsYygzMHB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KSk7CiAgICB9CgogICAgLnRyYW5zaXRpbmcgPiAuc2xpZGVyLWtub2IgewogICAgICB0cmFuc2l0aW9uOiBsZWZ0IDAuMDhzIGVhc2U7CiAgICB9CgogICAgLnNsaWRlci1rbm9iOmZvY3VzIHsKICAgICAgb3V0bGluZTogbm9uZTsKICAgIH0KCiAgICAuc2xpZGVyLWtub2IuZHJhZ2dpbmcgewogICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgfQoKICAgIC5zbmFwcyA+IC5zbGlkZXIta25vYi5kcmFnZ2luZyB7CiAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMDhzIGVhc2U7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjA4cyBlYXNlOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgIG1hcmdpbjogMTBweDsKICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOwogICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDIwcHgpOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwoKICAgICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwoKICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm0sIGJhY2tncm91bmQtY29sb3IsIGJvcmRlcjsKICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXI7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMThzOwogICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTsKICAgIH0KCiAgICAuZXhwYW5kOm5vdCgucGluKSA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjUpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNSk7CiAgICB9CgogICAgLnJpbmcgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICB9CgogICAgLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItcGluLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgIH0KCiAgICAucGluID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICBjb250ZW50OiAiIjsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGxlZnQ6IDUwJTsKICAgICAgbWFyZ2luLWxlZnQ6IC0xM3B4OwogICAgICB3aWR0aDogMjZweDsKICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICBib3JkZXItcmFkaXVzOiA1MCUgNTAlIDUwJSAwOwoKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDApIHRyYW5zbGF0ZSgwKTsKICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICB9CgogICAgLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUsCiAgICAuc2xpZGVyLWtub2ItaW5uZXI6OmFmdGVyIHsKICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gLjE4cyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIC4xOHMgZWFzZTsKICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4xOHMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAuMThzIGVhc2U7CiAgICB9CgogICAgLnBpbi5yaW5nID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgfQoKICAgIC5waW4uZXhwYW5kID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSkgdHJhbnNsYXRlKDE3cHgsIC0xN3B4KTsKICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgxKSB0cmFuc2xhdGUoMTdweCwgLTE3cHgpOwogICAgfQoKICAgIC5waW4gPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXI6OmFmdGVyIHsKICAgICAgY29udGVudDogYXR0cih2YWx1ZSk7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiA1MCU7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMTZweDsKICAgICAgd2lkdGg6IDMycHg7CiAgICAgIGhlaWdodDogMjZweDsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBjb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWZvbnQtY29sb3IsICNmZmYpOwogICAgICBmb250LXNpemU6IDEwcHg7CgogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZSgwKTsKICAgIH0KCiAgICAucGluLmV4cGFuZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YWZ0ZXIgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlKDAsIC0xN3B4KTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGUoMCwgLTE3cHgpOwogICAgfQoKICAgIC8qIHBhcGVyLWlucHV0ICovCiAgICAuc2xpZGVyLWlucHV0IHsKICAgICAgd2lkdGg6IDUwcHg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXNsaWRlci1pbnB1dC1jb250YWluZXItaW5wdXQ7CiAgICAgIH07CiAgICAgIEBhcHBseSAtLXBhcGVyLXNsaWRlci1pbnB1dDsKICAgIH0KCiAgICAvKiBkaXNhYmxlZCBzdGF0ZSAqLwogICAgI3NsaWRlckNvbnRhaW5lci5kaXNhYmxlZCB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQoKICAgIC5kaXNhYmxlZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1kaXNhYmxlZC1rbm9iLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQta25vYi1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlM2QoMC43NSwgMC43NSwgMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUzZCgwLjc1LCAwLjc1LCAxKTsKICAgIH0KCiAgICAuZGlzYWJsZWQucmluZyA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yLCB0cmFuc3BhcmVudCk7CiAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgIH0KCiAgICBwYXBlci1yaXBwbGUgewogICAgICBjb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTcwMCkpOwogICAgfQogIDwvc3R5bGU+CgogIDxkaXYgaWQ9InNsaWRlckNvbnRhaW5lciIgY2xhc3NcJD0iW1tfZ2V0Q2xhc3NOYW1lcyhkaXNhYmxlZCwgcGluLCBzbmFwcywgaW1tZWRpYXRlVmFsdWUsIG1pbiwgZXhwYW5kLCBkcmFnZ2luZywgdHJhbnNpdGluZywgZWRpdGFibGUpXV0iPgogICAgPGRpdiBjbGFzcz0iYmFyLWNvbnRhaW5lciI+CiAgICAgIDxwYXBlci1wcm9ncmVzcyBkaXNhYmxlZFwkPSJbW2Rpc2FibGVkXV0iIGlkPSJzbGlkZXJCYXIiIGFyaWEtaGlkZGVuPSJ0cnVlIiBtaW49IltbbWluXV0iIG1heD0iW1ttYXhdXSIgc3RlcD0iW1tzdGVwXV0iIHZhbHVlPSJbW2ltbWVkaWF0ZVZhbHVlXV0iIHNlY29uZGFyeS1wcm9ncmVzcz0iW1tzZWNvbmRhcnlQcm9ncmVzc11dIiBvbi1kb3duPSJfYmFyZG93biIgb24tdXA9Il9yZXNldEtub2IiIG9uLXRyYWNrPSJfYmFydHJhY2siIG9uLXRhcD0iX2JhcmNsaWNrIj4KICAgICAgPC9wYXBlci1wcm9ncmVzcz4KICAgIDwvZGl2PgoKICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzbmFwc11dIj4KICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLW1hcmtlcnMiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbbWFya2Vyc11dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1tYXJrZXIiPjwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KCiAgICA8ZGl2IGlkPSJzbGlkZXJLbm9iIiBjbGFzcz0ic2xpZGVyLWtub2IiIG9uLWRvd249Il9rbm9iZG93biIgb24tdXA9Il9yZXNldEtub2IiIG9uLXRyYWNrPSJfb25UcmFjayIgb24tdHJhbnNpdGlvbmVuZD0iX2tub2JUcmFuc2l0aW9uRW5kIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXIta25vYi1pbm5lciIgdmFsdWVcJD0iW1tpbW1lZGlhdGVWYWx1ZV1dIj48L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgoKICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZWRpdGFibGVdXSI+CiAgICA8cGFwZXItaW5wdXQgaWQ9ImlucHV0IiB0eXBlPSJudW1iZXIiIHN0ZXA9Iltbc3RlcF1dIiBtaW49IltbbWluXV0iIG1heD0iW1ttYXhdXSIgY2xhc3M9InNsaWRlci1pbnB1dCIgZGlzYWJsZWRcJD0iW1tkaXNhYmxlZF1dIiB2YWx1ZT0iW1tpbW1lZGlhdGVWYWx1ZV1dIiBvbi1jaGFuZ2U9Il9jaGFuZ2VWYWx1ZSIgb24ta2V5ZG93bj0iX2lucHV0S2V5RG93biIgbm8tbGFiZWwtZmxvYXQ+CiAgICA8L3BhcGVyLWlucHV0PgogIDwvdGVtcGxhdGU+CmA7cnMuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIiksUnIoe190ZW1wbGF0ZTpycyxpczoicGFwZXItc2xpZGVyIixiZWhhdmlvcnM6W3pvLHJhLGNhLHRzXSxwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc25hcHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LHBpbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sc2Vjb25kYXJ5UHJvZ3Jlc3M6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwLG9ic2VydmVyOiJfc2Vjb25kYXJ5UHJvZ3Jlc3NDaGFuZ2VkIn0sZWRpdGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW1tZWRpYXRlVmFsdWU6e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxtYXhNYXJrZXJzOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sZXhwYW5kOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LGlnbm9yZUJhclRvdWNoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRyYWdnaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSx0cmFuc2l0aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LG1hcmtlcnM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlS25vYih2YWx1ZSwgbWluLCBtYXgsIHNuYXBzLCBzdGVwKSIsIl92YWx1ZUNoYW5nZWQodmFsdWUpIiwiX2ltbWVkaWF0ZVZhbHVlQ2hhbmdlZChpbW1lZGlhdGVWYWx1ZSkiLCJfdXBkYXRlTWFya2VycyhtYXhNYXJrZXJzLCBtaW4sIG1heCwgc25hcHMpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InNsaWRlciIsdGFiaW5kZXg6MH0sa2V5QmluZGluZ3M6e2xlZnQ6Il9sZWZ0S2V5IixyaWdodDoiX3JpZ2h0S2V5IiwiZG93biBwYWdlZG93biBob21lIjoiX2RlY3JlbWVudEtleSIsInVwIHBhZ2V1cCBlbmQiOiJfaW5jcmVtZW50S2V5In0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmlnbm9yZUJhclRvdWNoJiZvaSh0aGlzLiQuc2xpZGVyQmFyLCJhdXRvIil9LGluY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlK3RoaXMuc3RlcCl9LGRlY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlLXRoaXMuc3RlcCl9LF91cGRhdGVLbm9iOmZ1bmN0aW9uKHQsZSxuLGkscil7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtaW4iLGUpLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbWF4IixuKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIsdCksdGhpcy5fcG9zaXRpb25Lbm9iKDEwMCp0aGlzLl9jYWxjUmF0aW8odCkpfSxfdmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJ2YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pfSxfaW1tZWRpYXRlVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kcmFnZ2luZz90aGlzLmZpcmUoImltbWVkaWF0ZS12YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pOnRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZX0sX3NlY29uZGFyeVByb2dyZXNzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3M9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnNlY29uZGFyeVByb2dyZXNzKX0sX2V4cGFuZEtub2I6ZnVuY3Rpb24oKXt0aGlzLl9zZXRFeHBhbmQoITApfSxfcmVzZXRLbm9iOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxEZWJvdW5jZXIoImV4cGFuZEtub2IiKSx0aGlzLl9zZXRFeHBhbmQoITEpfSxfcG9zaXRpb25Lbm9iOmZ1bmN0aW9uKHQpe3RoaXMuX3NldEltbWVkaWF0ZVZhbHVlKHRoaXMuX2NhbGNTdGVwKHRoaXMuX2NhbGNLbm9iUG9zaXRpb24odCkpKSx0aGlzLl9zZXRSYXRpbygxMDAqdGhpcy5fY2FsY1JhdGlvKHRoaXMuaW1tZWRpYXRlVmFsdWUpKSx0aGlzLiQuc2xpZGVyS25vYi5zdHlsZS5sZWZ0PXRoaXMucmF0aW8rIiUiLHRoaXMuZHJhZ2dpbmcmJih0aGlzLl9rbm9ic3RhcnR4PXRoaXMucmF0aW8qdGhpcy5fdy8xMDAsdGhpcy50cmFuc2xhdGUzZCgwLDAsMCx0aGlzLiQuc2xpZGVyS25vYikpfSxfY2FsY0tub2JQb3NpdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4odGhpcy5tYXgtdGhpcy5taW4pKnQvMTAwK3RoaXMubWlufSxfb25UcmFjazpmdW5jdGlvbih0KXtzd2l0Y2godC5zdG9wUHJvcGFnYXRpb24oKSx0LmRldGFpbC5zdGF0ZSl7Y2FzZSJzdGFydCI6dGhpcy5fdHJhY2tTdGFydCh0KTticmVhaztjYXNlInRyYWNrIjp0aGlzLl90cmFja1godCk7YnJlYWs7Y2FzZSJlbmQiOnRoaXMuX3RyYWNrRW5kKCl9fSxfdHJhY2tTdGFydDpmdW5jdGlvbih0KXt0aGlzLl9zZXRUcmFuc2l0aW5nKCExKSx0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGgsdGhpcy5feD10aGlzLnJhdGlvKnRoaXMuX3cvMTAwLHRoaXMuX3N0YXJ0eD10aGlzLl94LHRoaXMuX2tub2JzdGFydHg9dGhpcy5fc3RhcnR4LHRoaXMuX21pbng9LXRoaXMuX3N0YXJ0eCx0aGlzLl9tYXh4PXRoaXMuX3ctdGhpcy5fc3RhcnR4LHRoaXMuJC5zbGlkZXJLbm9iLmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIiksdGhpcy5fc2V0RHJhZ2dpbmcoITApfSxfdHJhY2tYOmZ1bmN0aW9uKHQpe3RoaXMuZHJhZ2dpbmd8fHRoaXMuX3RyYWNrU3RhcnQodCk7dmFyIGU9TWF0aC5taW4odGhpcy5fbWF4eCxNYXRoLm1heCh0aGlzLl9taW54LHQuZGV0YWlsLmR4Kih0aGlzLl9pc1JUTD8tMToxKSkpO3RoaXMuX3g9dGhpcy5fc3RhcnR4K2U7dmFyIG49dGhpcy5fY2FsY1N0ZXAodGhpcy5fY2FsY0tub2JQb3NpdGlvbih0aGlzLl94L3RoaXMuX3cqMTAwKSk7dGhpcy5fc2V0SW1tZWRpYXRlVmFsdWUobik7dmFyIGk9dGhpcy5fY2FsY1JhdGlvKHRoaXMuaW1tZWRpYXRlVmFsdWUpKnRoaXMuX3ctdGhpcy5fa25vYnN0YXJ0eDt0aGlzLnRyYW5zbGF0ZTNkKGkrInB4IiwwLDAsdGhpcy4kLnNsaWRlcktub2IpfSxfdHJhY2tFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiQuc2xpZGVyS25vYi5zdHlsZTt0aGlzLiQuc2xpZGVyS25vYi5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpLHRoaXMuX3NldERyYWdnaW5nKCExKSx0aGlzLl9yZXNldEtub2IoKSx0aGlzLnZhbHVlPXRoaXMuaW1tZWRpYXRlVmFsdWUsdC50cmFuc2Zvcm09dC53ZWJraXRUcmFuc2Zvcm09IiIsdGhpcy5maXJlKCJjaGFuZ2UiLHtjb21wb3NlZDohMH0pfSxfa25vYmRvd246ZnVuY3Rpb24odCl7dGhpcy5fZXhwYW5kS25vYigpLHQucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzKCl9LF9iYXJ0cmFjazpmdW5jdGlvbih0KXt0aGlzLl9hbGxvd0JhckV2ZW50KHQpJiZ0aGlzLl9vblRyYWNrKHQpfSxfYmFyY2xpY2s6ZnVuY3Rpb24odCl7dGhpcy5fdz10aGlzLiQuc2xpZGVyQmFyLm9mZnNldFdpZHRoO3ZhciBlPXRoaXMuJC5zbGlkZXJCYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj0odC5kZXRhaWwueC1lLmxlZnQpL3RoaXMuX3cqMTAwO3RoaXMuX2lzUlRMJiYobj0xMDAtbik7dmFyIGk9dGhpcy5yYXRpbzt0aGlzLl9zZXRUcmFuc2l0aW5nKCEwKSx0aGlzLl9wb3NpdGlvbktub2IobiksaT09PXRoaXMucmF0aW8mJnRoaXMuX3NldFRyYW5zaXRpbmcoITEpLHRoaXMuYXN5bmMoKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJjaGFuZ2UiLHtjb21wb3NlZDohMH0pfSkpLHQucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzKCl9LF9iYXJkb3duOmZ1bmN0aW9uKHQpe3RoaXMuX2FsbG93QmFyRXZlbnQodCkmJih0aGlzLmRlYm91bmNlKCJleHBhbmRLbm9iIix0aGlzLl9leHBhbmRLbm9iLDYwKSx0aGlzLl9iYXJjbGljayh0KSl9LF9rbm9iVHJhbnNpdGlvbkVuZDpmdW5jdGlvbih0KXt0LnRhcmdldD09PXRoaXMuJC5zbGlkZXJLbm9iJiZ0aGlzLl9zZXRUcmFuc2l0aW5nKCExKX0sX3VwZGF0ZU1hcmtlcnM6ZnVuY3Rpb24odCxlLG4saSl7aXx8dGhpcy5fc2V0TWFya2VycyhbXSk7dmFyIHI9TWF0aC5yb3VuZCgobi1lKS90aGlzLnN0ZXApO3I+dCYmKHI9dCksKHI8MHx8IWlzRmluaXRlKHIpKSYmKHI9MCksdGhpcy5fc2V0TWFya2VycyhuZXcgQXJyYXkocikpfSxfbWVyZ2VDbGFzc2VzOmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpLmpvaW4oIiAiKX0sX2dldENsYXNzTmFtZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWVyZ2VDbGFzc2VzKHtkaXNhYmxlZDp0aGlzLmRpc2FibGVkLHBpbjp0aGlzLnBpbixzbmFwczp0aGlzLnNuYXBzLHJpbmc6dGhpcy5pbW1lZGlhdGVWYWx1ZTw9dGhpcy5taW4sZXhwYW5kOnRoaXMuZXhwYW5kLGRyYWdnaW5nOnRoaXMuZHJhZ2dpbmcsdHJhbnNpdGluZzp0aGlzLnRyYW5zaXRpbmcsZWRpdGFibGU6dGhpcy5lZGl0YWJsZX0pfSxfYWxsb3dCYXJFdmVudDpmdW5jdGlvbih0KXtyZXR1cm4hdGhpcy5pZ25vcmVCYXJUb3VjaHx8dC5kZXRhaWwuc291cmNlRXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50fSxnZXQgX2lzUlRMKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuX19pc1JUTCYmKHRoaXMuX19pc1JUTD0icnRsIj09PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmRpcmVjdGlvbiksdGhpcy5fX2lzUlRMfSxfbGVmdEtleTpmdW5jdGlvbih0KXt0aGlzLl9pc1JUTD90aGlzLl9pbmNyZW1lbnRLZXkodCk6dGhpcy5fZGVjcmVtZW50S2V5KHQpfSxfcmlnaHRLZXk6ZnVuY3Rpb24odCl7dGhpcy5faXNSVEw/dGhpcy5fZGVjcmVtZW50S2V5KHQpOnRoaXMuX2luY3JlbWVudEtleSh0KX0sX2luY3JlbWVudEtleTpmdW5jdGlvbih0KXt0aGlzLmRpc2FibGVkfHwoImVuZCI9PT10LmRldGFpbC5rZXk/dGhpcy52YWx1ZT10aGlzLm1heDp0aGlzLmluY3JlbWVudCgpLHRoaXMuZmlyZSgiY2hhbmdlIiksdC5wcmV2ZW50RGVmYXVsdCgpKX0sX2RlY3JlbWVudEtleTpmdW5jdGlvbih0KXt0aGlzLmRpc2FibGVkfHwoImhvbWUiPT09dC5kZXRhaWwua2V5P3RoaXMudmFsdWU9dGhpcy5taW46dGhpcy5kZWNyZW1lbnQoKSx0aGlzLmZpcmUoImNoYW5nZSIpLHQucHJldmVudERlZmF1bHQoKSl9LF9jaGFuZ2VWYWx1ZTpmdW5jdGlvbih0KXt0aGlzLnZhbHVlPXQudGFyZ2V0LnZhbHVlLHRoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0sX2lucHV0S2V5RG93bjpmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JpcHBsZUNvbnRhaW5lcj10aGlzLiQuc2xpZGVyS25vYixsYS5fY3JlYXRlUmlwcGxlLmNhbGwodGhpcyl9LF9mb2N1c2VkQ2hhbmdlZDpmdW5jdGlvbih0KXt0JiZ0aGlzLmVuc3VyZVJpcHBsZSgpLHRoaXMuaGFzUmlwcGxlKCkmJih0aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT10PyIiOiJub25lIix0aGlzLl9yaXBwbGUuaG9sZERvd249dCl9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBvcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO29zLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpLG9zLmlubmVySFRNTD0iPGRvbS1tb2R1bGUgaWQ9XCJwYXBlci1zcGlubmVyLXN0eWxlc1wiPlxuICA8dGVtcGxhdGU+XG4gICAgPHN0eWxlPlxuICAgICAgLypcbiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgICAgIC8qIFNUWUxFUyBGT1IgVEhFIFNQSU5ORVIgKi9cbiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgICAgLypcbiAgICAgICAqIENvbnN0YW50czpcbiAgICAgICAqICAgICAgQVJDU0laRSAgICAgPSAyNzAgZGVncmVlcyAoYW1vdW50IG9mIGNpcmNsZSB0aGUgYXJjIHRha2VzIHVwKVxuICAgICAgICogICAgICBBUkNUSU1FICAgICA9IDEzMzNtcyAodGltZSBpdCB0YWtlcyB0byBleHBhbmQgYW5kIGNvbnRyYWN0IGFyYylcbiAgICAgICAqICAgICAgQVJDU1RBUlRST1QgPSAyMTYgZGVncmVlcyAoaG93IG11Y2ggdGhlIHN0YXJ0IGxvY2F0aW9uIG9mIHRoZSBhcmNcbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgcm90YXRlIGVhY2ggdGltZSwgMjE2IGdpdmVzIHVzIGFcbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IHBvaW50ZWQgc3RhciBzaGFwZSAoaXQncyAzNjAvNSAqIDMpLlxuICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhIDcgcG9pbnRlZCBzdGFyLCB3ZSBtaWdodCBkb1xuICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MC83ICogMyA9IDE1NC4yODYpXG4gICAgICAgKiAgICAgIFNIUklOS19USU1FID0gNDAwbXNcbiAgICAgICAqL1xuXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB3aWR0aDogMjhweDtcbiAgICAgICAgaGVpZ2h0OiAyOHB4O1xuXG4gICAgICAgIC8qIDM2MCAqIEFSQ1RJTUUgLyAoQVJDU1RBUlRST1QgKyAoMzYwLUFSQ1NJWkUpKSAqL1xuICAgICAgICAtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uOiAxNTY4bXM7XG5cbiAgICAgICAgLyogQVJDVElNRSAqL1xuICAgICAgICAtLXBhcGVyLXNwaW5uZXItZXhwYW5kLWNvbnRyYWN0LWR1cmF0aW9uOiAxMzMzbXM7XG5cbiAgICAgICAgLyogNCAqIEFSQ1RJTUUgKi9cbiAgICAgICAgLS1wYXBlci1zcGlubmVyLWZ1bGwtY3ljbGUtZHVyYXRpb246IDUzMzJtcztcblxuICAgICAgICAvKiBTSFJJTktfVElNRSAqL1xuICAgICAgICAtLXBhcGVyLXNwaW5uZXItY29vbGRvd24tZHVyYXRpb246IDQwMG1zO1xuICAgICAgfVxuXG4gICAgICAjc3Bpbm5lckNvbnRhaW5lciB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG5cbiAgICAgICAgLyogVGhlIHNwaW5uZXIgZG9lcyBub3QgaGF2ZSBhbnkgY29udGVudHMgdGhhdCB3b3VsZCBoYXZlIHRvIGJlXG4gICAgICAgICAqIGZsaXBwZWQgaWYgdGhlIGRpcmVjdGlvbiBjaGFuZ2VzLiBBbHdheXMgdXNlIGx0ciBzbyB0aGF0IHRoZVxuICAgICAgICAgKiBzdHlsZSB3b3JrcyBvdXQgY29ycmVjdGx5IGluIGJvdGggY2FzZXMuICovXG4gICAgICAgIGRpcmVjdGlvbjogbHRyO1xuICAgICAgfVxuXG4gICAgICAjc3Bpbm5lckNvbnRhaW5lci5hY3RpdmUge1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSB2YXIoLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbikgbGluZWFyIGluZmluaXRlO1xuICAgICAgICBhbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZTtcbiAgICAgIH1cblxuICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGNvbnRhaW5lci1yb3RhdGUge1xuICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB9XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgY29udGFpbmVyLXJvdGF0ZSB7XG4gICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB9XG4gICAgICB9XG5cbiAgICAgIC5zcGlubmVyLWxheWVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNTAwKSk7XG4gICAgICB9XG5cbiAgICAgIC5sYXllci0xIHtcbiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMS1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNTAwKSk7XG4gICAgICB9XG5cbiAgICAgIC5sYXllci0yIHtcbiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMi1jb2xvciwgdmFyKC0tZ29vZ2xlLXJlZC01MDApKTtcbiAgICAgIH1cblxuICAgICAgLmxheWVyLTMge1xuICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1sYXllci0zLWNvbG9yLCB2YXIoLS1nb29nbGUteWVsbG93LTUwMCkpO1xuICAgICAgfVxuXG4gICAgICAubGF5ZXItNCB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTQtY29sb3IsIHZhcigtLWdvb2dsZS1ncmVlbi01MDApKTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBJTVBPUlRBTlQgTk9URSBBQk9VVCBDU1MgQU5JTUFUSU9OIFBST1BFUlRJRVMgKGtlYW51bGVlKTpcbiAgICAgICAqXG4gICAgICAgKiBpT1MgU2FmYXJpICh0ZXN0ZWQgb24gaU9TIDguMSkgZG9lcyBub3QgaGFuZGxlIGFuaW1hdGlvbi1kZWxheSB2ZXJ5IHdlbGwgLSBpdCBkb2Vzbid0XG4gICAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgc3RhcnQgX2V4YWN0bHlfIGFmdGVyIHRoYXQgdmFsdWUuIFNvIHdlIGF2b2lkIHVzaW5nXG4gICAgICAgKiBhbmltYXRpb24tZGVsYXkgYW5kIGluc3RlYWQgc2V0IGN1c3RvbSBrZXlmcmFtZXMgZm9yIGVhY2ggY29sb3IgKGFzIGxheWVyLTJ1bmRhbnQgYXMgaXRcbiAgICAgICAqIHNlZW1zKS5cbiAgICAgICAqL1xuICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllciB7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZTtcbiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZnVsbC1jeWNsZS1kdXJhdGlvbik7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpO1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xuICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlO1xuICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZnVsbC1jeWNsZS1kdXJhdGlvbik7XG4gICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTtcbiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9XG5cbiAgICAgIC5hY3RpdmUgLnNwaW5uZXItbGF5ZXIubGF5ZXItMSB7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMS1mYWRlLWluLW91dDtcbiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMS1mYWRlLWluLW91dDtcbiAgICAgIH1cblxuICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0yIHtcbiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci0yLWZhZGUtaW4tb3V0O1xuICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci0yLWZhZGUtaW4tb3V0O1xuICAgICAgfVxuXG4gICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyLmxheWVyLTMge1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTMtZmFkZS1pbi1vdXQ7XG4gICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTMtZmFkZS1pbi1vdXQ7XG4gICAgICB9XG5cbiAgICAgIC5hY3RpdmUgLnNwaW5uZXItbGF5ZXIubGF5ZXItNCB7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItNC1mYWRlLWluLW91dDtcbiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItNC1mYWRlLWluLW91dDtcbiAgICAgIH1cblxuICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7XG4gICAgICAgIDEyLjUlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpIH0gLyogMC41ICogQVJDU0laRSAqL1xuICAgICAgICAyNSUgICB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKSB9IC8qIDEgICAqIEFSQ1NJWkUgKi9cbiAgICAgICAgMzcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovXG4gICAgICAgIDUwJSAgIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpIH0gLyogMiAgICogQVJDU0laRSAqL1xuICAgICAgICA2Mi41JSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKSB9IC8qIDIuNSAqIEFSQ1NJWkUgKi9cbiAgICAgICAgNzUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovXG4gICAgICAgIDg3LjUlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg5NDVkZWcpIH0gLyogMy41ICogQVJDU0laRSAqL1xuICAgICAgICB0byAgICB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZykgfSAvKiA0ICAgKiBBUkNTSVpFICovXG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgZmlsbC11bmZpbGwtcm90YXRlIHtcbiAgICAgICAgMTIuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpIH0gLyogMC41ICogQVJDU0laRSAqL1xuICAgICAgICAyNSUgICB7IHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgfSAvKiAxICAgKiBBUkNTSVpFICovXG4gICAgICAgIDM3LjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoNDA1ZGVnKSB9IC8qIDEuNSAqIEFSQ1NJWkUgKi9cbiAgICAgICAgNTAlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpIH0gLyogMiAgICogQVJDU0laRSAqL1xuICAgICAgICA2Mi41JSB7IHRyYW5zZm9ybTogcm90YXRlKDY3NWRlZykgfSAvKiAyLjUgKiBBUkNTSVpFICovXG4gICAgICAgIDc1JSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoODEwZGVnKSB9IC8qIDMgICAqIEFSQ1NJWkUgKi9cbiAgICAgICAgODcuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg5NDVkZWcpIH0gLyogMy41ICogQVJDU0laRSAqL1xuICAgICAgICB0byAgICB7IHRyYW5zZm9ybTogcm90YXRlKDEwODBkZWcpIH0gLyogNCAgICogQVJDU0laRSAqL1xuICAgICAgfVxuXG4gICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItMS1mYWRlLWluLW91dCB7XG4gICAgICAgIDAlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICAyNiUgeyBvcGFjaXR5OiAwIH1cbiAgICAgICAgODklIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICB0byB7IG9wYWNpdHk6IDEgfVxuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIGxheWVyLTEtZmFkZS1pbi1vdXQge1xuICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgMjYlIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIDg5JSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgdG8geyBvcGFjaXR5OiAxIH1cbiAgICAgIH1cblxuICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTItZmFkZS1pbi1vdXQge1xuICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICAxNSUgeyBvcGFjaXR5OiAwIH1cbiAgICAgICAgMjUlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIDUwJSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICA1MSUgeyBvcGFjaXR5OiAwIH1cbiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH1cbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyBsYXllci0yLWZhZGUtaW4tb3V0IHtcbiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH1cbiAgICAgICAgMTUlIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgNTElIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIHRvIHsgb3BhY2l0eTogMCB9XG4gICAgICB9XG5cbiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci0zLWZhZGUtaW4tb3V0IHtcbiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH1cbiAgICAgICAgNDAlIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIDUwJSB7IG9wYWNpdHk6IDEgfVxuICAgICAgICA3NSUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgNzYlIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIHRvIHsgb3BhY2l0eTogMCB9XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItMy1mYWRlLWluLW91dCB7XG4gICAgICAgIDAlIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIDQwJSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIDc2JSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICB0byB7IG9wYWNpdHk6IDAgfVxuICAgICAgfVxuXG4gICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItNC1mYWRlLWluLW91dCB7XG4gICAgICAgIDAlIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIDY1JSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICA3NSUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgOTAlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIHRvIHsgb3BhY2l0eTogMCB9XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItNC1mYWRlLWluLW91dCB7XG4gICAgICAgIDAlIHsgb3BhY2l0eTogMCB9XG4gICAgICAgIDY1JSB7IG9wYWNpdHk6IDAgfVxuICAgICAgICA3NSUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgOTAlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIHRvIHsgb3BhY2l0eTogMCB9XG4gICAgICB9XG5cbiAgICAgIC5jaXJjbGUtY2xpcHBlciB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB3aWR0aDogNTAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogUGF0Y2ggdGhlIGdhcCB0aGF0IGFwcGVhciBiZXR3ZWVuIHRoZSB0d28gYWRqYWNlbnQgZGl2LmNpcmNsZS1jbGlwcGVyIHdoaWxlIHRoZVxuICAgICAgICogc3Bpbm5lciBpcyByb3RhdGluZyAoYXBwZWFycyBvbiBDaHJvbWUgNTAsIFNhZmFyaSA5LjEuMSwgYW5kIEVkZ2UpLlxuICAgICAgICovXG4gICAgICAuc3Bpbm5lci1sYXllcjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgbGVmdDogNDUlO1xuICAgICAgICB3aWR0aDogMTAlO1xuICAgICAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDtcbiAgICAgIH1cblxuICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyLFxuICAgICAgLmNpcmNsZS1jbGlwcGVyIC5jaXJjbGUge1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgYm9yZGVyLXdpZHRoOiB2YXIoLS1wYXBlci1zcGlubmVyLXN0cm9rZS13aWR0aCwgM3B4KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgfVxuXG4gICAgICAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgd2lkdGg6IDIwMCU7XG4gICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICB9XG5cbiAgICAgIC5jaXJjbGUtY2xpcHBlci5sZWZ0IC5jaXJjbGUge1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTI5ZGVnKTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTI5ZGVnKTtcbiAgICAgIH1cblxuICAgICAgLmNpcmNsZS1jbGlwcGVyLnJpZ2h0IC5jaXJjbGUge1xuICAgICAgICBsZWZ0OiAtMTAwJTtcbiAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEyOWRlZyk7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpO1xuICAgICAgfVxuXG4gICAgICAuYWN0aXZlIC5nYXAtcGF0Y2g6OmFmdGVyLFxuICAgICAgLmFjdGl2ZSAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbik7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpO1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xuICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZXhwYW5kLWNvbnRyYWN0LWR1cmF0aW9uKTtcbiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpO1xuICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgICAgIH1cblxuICAgICAgLmFjdGl2ZSAuY2lyY2xlLWNsaXBwZXIubGVmdCAuY2lyY2xlIHtcbiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogbGVmdC1zcGluO1xuICAgICAgICBhbmltYXRpb24tbmFtZTogbGVmdC1zcGluO1xuICAgICAgfVxuXG4gICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHtcbiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogcmlnaHQtc3BpbjtcbiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IHJpZ2h0LXNwaW47XG4gICAgICB9XG5cbiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsZWZ0LXNwaW4ge1xuICAgICAgICAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9XG4gICAgICAgIDUwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTVkZWcpIH1cbiAgICAgICAgdG8geyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfVxuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIGxlZnQtc3BpbiB7XG4gICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9XG4gICAgICAgIDUwJSB7IHRyYW5zZm9ybTogcm90YXRlKC01ZGVnKSB9XG4gICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9XG4gICAgICB9XG5cbiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyByaWdodC1zcGluIHtcbiAgICAgICAgMCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH1cbiAgICAgICAgNTAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg1ZGVnKSB9XG4gICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKSB9XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgcmlnaHQtc3BpbiB7XG4gICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfVxuICAgICAgICA1MCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg1ZGVnKSB9XG4gICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfVxuICAgICAgfVxuXG4gICAgICAjc3Bpbm5lckNvbnRhaW5lci5jb29sZG93biB7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGUsIGZhZGUtb3V0IHZhcigtLXBhcGVyLXNwaW5uZXItY29vbGRvd24tZHVyYXRpb24pIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTtcbiAgICAgICAgYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGUsIGZhZGUtb3V0IHZhcigtLXBhcGVyLXNwaW5uZXItY29vbGRvd24tZHVyYXRpb24pIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTtcbiAgICAgIH1cblxuICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGZhZGUtb3V0IHtcbiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH1cbiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH1cbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyBmYWRlLW91dCB7XG4gICAgICAgIDAlIHsgb3BhY2l0eTogMSB9XG4gICAgICAgIHRvIHsgb3BhY2l0eTogMCB9XG4gICAgICB9XG4gICAgPC9zdHlsZT5cbiAgPC90ZW1wbGF0ZT5cbjwvZG9tLW1vZHVsZT4iLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQob3MuY29udGVudCk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBhcz17cHJvcGVydGllczp7YWN0aXZlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfX2FjdGl2ZUNoYW5nZWQifSxhbHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJsb2FkaW5nIixvYnNlcnZlcjoiX19hbHRDaGFuZ2VkIn0sX19jb29saW5nRG93bjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sX19jb21wdXRlQ29udGFpbmVyQ2xhc3NlczpmdW5jdGlvbih0LGUpe3JldHVyblt0fHxlPyJhY3RpdmUiOiIiLGU/ImNvb2xkb3duIjoiIl0uam9pbigiICIpfSxfX2FjdGl2ZUNoYW5nZWQ6ZnVuY3Rpb24odCxlKXt0aGlzLl9fc2V0QXJpYUhpZGRlbighdCksdGhpcy5fX2Nvb2xpbmdEb3duPSF0JiZlfSxfX2FsdENoYW5nZWQ6ZnVuY3Rpb24odCl7ImxvYWRpbmciPT09dD90aGlzLmFsdD10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpfHx0Oih0aGlzLl9fc2V0QXJpYUhpZGRlbigiIj09PXQpLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix0KSl9LF9fc2V0QXJpYUhpZGRlbjpmdW5jdGlvbih0KXt2YXIgZT0iYXJpYS1oaWRkZW4iO3Q/dGhpcy5zZXRBdHRyaWJ1dGUoZSwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKGUpfSxfX3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5hY3RpdmU9ITEsdGhpcy5fX2Nvb2xpbmdEb3duPSExfX0sc3M9X2VgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLXNwaW5uZXItc3R5bGVzIj48L3N0eWxlPgoKICA8ZGl2IGlkPSJzcGlubmVyQ29udGFpbmVyIiBjbGFzcy1uYW1lPSJbW19fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXMoYWN0aXZlLCBfX2Nvb2xpbmdEb3duKV1dIiBvbi1hbmltYXRpb25lbmQ9Il9fcmVzZXQiIG9uLXdlYmtpdC1hbmltYXRpb24tZW5kPSJfX3Jlc2V0Ij4KICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIiPgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CmA7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqL3NzLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpLFJyKHtfdGVtcGxhdGU6c3MsaXM6InBhcGVyLXNwaW5uZXItbGl0ZSIsYmVoYXZpb3JzOlthc119KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IGxzPV9lYAogIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1zcGlubmVyLXN0eWxlcyI+PC9zdHlsZT4KCiAgPGRpdiBpZD0ic3Bpbm5lckNvbnRhaW5lciIgY2xhc3MtbmFtZT0iW1tfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzKGFjdGl2ZSwgX19jb29saW5nRG93bildXSIgb24tYW5pbWF0aW9uZW5kPSJfX3Jlc2V0IiBvbi13ZWJraXQtYW5pbWF0aW9uLWVuZD0iX19yZXNldCI+CiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIGxheWVyLTEiPgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0yIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItMyI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIGxheWVyLTQiPgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CmA7bHMuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIiksUnIoe190ZW1wbGF0ZTpscyxpczoicGFwZXItc3Bpbm5lciIsYmVoYXZpb3JzOlthc119KTsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KY29uc3QgY3M9X2VgPGlyb24taWNvbnNldC1zdmcgbmFtZT0icGFwZXItdGFicyIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iY2hldnJvbi1sZWZ0Ij48cGF0aCBkPSJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGV2cm9uLXJpZ2h0Ij48cGF0aCBkPSJNMTAgNkw4LjU5IDcuNDEgMTMuMTcgMTJsLTQuNTggNC41OUwxMCAxOGw2LTZ6Ij48L3BhdGg+PC9nPgo8L2RlZnM+PC9zdmc+CjwvaXJvbi1pY29uc2V0LXN2Zz5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoY3MuY29udGVudCksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovClJyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKCiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYjsKICAgICAgfQoKICAgICAgOmhvc3QoOmZvY3VzKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2xpbmtdKSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLnRhYi1jb250ZW50IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjFzIGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSk7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudDsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdCguaXJvbi1zZWxlY3RlZCkpID4gLnRhYi1jb250ZW50IHsKICAgICAgICBvcGFjaXR5OiAwLjg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYi1jb250ZW50LXVuc2VsZWN0ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgLnRhYi1jb250ZW50IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYi1jb250ZW50LWZvY3VzZWQ7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRhYi1pbmssIHZhcigtLXBhcGVyLXllbGxvdy1hMTAwKSk7CiAgICAgIH0KCiAgICAgIC50YWItY29udGVudCA+IDo6c2xvdHRlZChhKSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKCiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij4KICAgICAgPHNsb3Q+PC9zbG90PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLXRhYiIsYmVoYXZpb3JzOltxbyxYbyxKb10scHJvcGVydGllczp7bGluazp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJ0YWIifSxsaXN0ZW5lcnM6e2Rvd246Il91cGRhdGVOb2luayIsdGFwOiJfb25UYXAifSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZU5vaW5rKCl9LGdldCBfcGFyZW50Tm9pbmsoKXt2YXIgdD1ZaSh0aGlzKS5wYXJlbnROb2RlO3JldHVybiEhdCYmISF0Lm5vaW5rfSxfdXBkYXRlTm9pbms6ZnVuY3Rpb24oKXt0aGlzLm5vaW5rPSEhdGhpcy5ub2lua3x8ISF0aGlzLl9wYXJlbnROb2lua30sX29uVGFwOmZ1bmN0aW9uKHQpe2lmKHRoaXMubGluayl7dmFyIGU9dGhpcy5xdWVyeUVmZmVjdGl2ZUNoaWxkcmVuKCJhIik7aWYoIWUpcmV0dXJuO2lmKHQudGFyZ2V0PT09ZSlyZXR1cm47ZS5jbGljaygpfX19KSwKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgKi8KUnIoe190ZW1wbGF0ZTpfZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwoKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwoKICAgICAgICAvKiBOT1RFOiBCb3RoIHZhbHVlcyBhcmUgbmVlZGVkLCBzaW5jZSBzb21lIHBob25lcyByZXF1aXJlIHRoZSB2YWx1ZSB0byBiZSBcYHRyYW5zcGFyZW50XGAuICovCiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYnM7CiAgICAgIH0KCiAgICAgIDpob3N0KDpkaXIocnRsKSkgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsLXJldmVyc2U7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleC1hdXRvOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYnMtY29udGFpbmVyOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAtbW96LWZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgLW1zLWZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudC5zY3JvbGxhYmxlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50Om5vdCguc2Nyb2xsYWJsZSksCiAgICAgICN0YWJzQ29udGVudC5zY3JvbGxhYmxlLmZpdC1jb250YWluZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZS5maXQtY29udGFpbmVyIHsKICAgICAgICBtaW4td2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudC5zY3JvbGxhYmxlLmZpdC1jb250YWluZXIgPiA6OnNsb3R0ZWQoKikgewogICAgICAgIC8qIElFIC0gcHJldmVudCB0YWJzIGZyb20gY29tcHJlc3Npbmcgd2hlbiB0aGV5IHNob3VsZCBzY3JvbGwuICovCiAgICAgICAgLW1zLWZsZXg6IDEgMCBhdXRvOwogICAgICAgIC13ZWJraXQtZmxleDogMSAwIGF1dG87CiAgICAgICAgZmxleDogMSAwIGF1dG87CiAgICAgIH0KCiAgICAgIC5oaWRkZW4gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5ub3QtdmlzaWJsZSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBtYXJnaW46IDAgNHB4OwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXItY29sb3IsIHZhcigtLXBhcGVyLXllbGxvdy1hMTAwKSk7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogbGVmdCBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCBjZW50ZXI7CiAgICAgICAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybTsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm07CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYnMtc2VsZWN0aW9uLWJhcjsKICAgICAgfQoKICAgICAgI3NlbGVjdGlvbkJhci5hbGlnbi1ib3R0b20gewogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IGF1dG87CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIuZXhwYW5kIHsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE1czsKICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKTsKICAgICAgfQoKICAgICAgI3NlbGVjdGlvbkJhci5jb250cmFjdCB7CiAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xOHM7CiAgICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjAsIDAuMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50ID4gOjpzbG90dGVkKDpub3QoI3NlbGVjdGlvbkJhcikpIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249InBhcGVyLXRhYnM6Y2hldnJvbi1sZWZ0IiBjbGFzcyQ9IltbX2NvbXB1dGVTY3JvbGxCdXR0b25DbGFzcyhfbGVmdEhpZGRlbiwgc2Nyb2xsYWJsZSwgaGlkZVNjcm9sbEJ1dHRvbnMpXV0iIG9uLXVwPSJfb25TY3JvbGxCdXR0b25VcCIgb24tZG93bj0iX29uTGVmdFNjcm9sbEJ1dHRvbkRvd24iIHRhYmluZGV4PSItMSI+PC9wYXBlci1pY29uLWJ1dHRvbj4KCiAgICA8ZGl2IGlkPSJ0YWJzQ29udGFpbmVyIiBvbi10cmFjaz0iX3Njcm9sbCIgb24tZG93bj0iX2Rvd24iPgogICAgICA8ZGl2IGlkPSJ0YWJzQ29udGVudCIgY2xhc3MkPSJbW19jb21wdXRlVGFic0NvbnRlbnRDbGFzcyhzY3JvbGxhYmxlLCBmaXRDb250YWluZXIpXV0iPgogICAgICAgIDxkaXYgaWQ9InNlbGVjdGlvbkJhciIgY2xhc3MkPSJbW19jb21wdXRlU2VsZWN0aW9uQmFyQ2xhc3Mobm9CYXIsIGFsaWduQm90dG9tKV1dIiBvbi10cmFuc2l0aW9uZW5kPSJfb25CYXJUcmFuc2l0aW9uRW5kIj48L2Rpdj4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249InBhcGVyLXRhYnM6Y2hldnJvbi1yaWdodCIgY2xhc3MkPSJbW19jb21wdXRlU2Nyb2xsQnV0dG9uQ2xhc3MoX3JpZ2h0SGlkZGVuLCBzY3JvbGxhYmxlLCBoaWRlU2Nyb2xsQnV0dG9ucyldXSIgb24tdXA9Il9vblNjcm9sbEJ1dHRvblVwIiBvbi1kb3duPSJfb25SaWdodFNjcm9sbEJ1dHRvbkRvd24iIHRhYmluZGV4PSItMSI+PC9wYXBlci1pY29uLWJ1dHRvbj4KYCxpczoicGFwZXItdGFicyIsYmVoYXZpb3JzOltnbyxpc10scHJvcGVydGllczp7bm9pbms6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX25vaW5rQ2hhbmdlZCJ9LG5vQmFyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG5vU2xpZGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2Nyb2xsYWJsZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxmaXRDb250YWluZXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZGlzYWJsZURyYWc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saGlkZVNjcm9sbEJ1dHRvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYWxpZ25Cb3R0b206e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2VsZWN0YWJsZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBhcGVyLXRhYiJ9LGF1dG9zZWxlY3Q6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYXV0b3NlbGVjdERlbGF5Ont0eXBlOk51bWJlcix2YWx1ZTowfSxfc3RlcDp7dHlwZTpOdW1iZXIsdmFsdWU6MTB9LF9ob2xkRGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjF9LF9sZWZ0SGlkZGVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9yaWdodEhpZGRlbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfcHJldmlvdXNUYWI6e3R5cGU6T2JqZWN0fX0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InRhYmxpc3QifSxsaXN0ZW5lcnM6eyJpcm9uLXJlc2l6ZSI6Il9vblRhYlNpemluZ0NoYW5nZWQiLCJpcm9uLWl0ZW1zLWNoYW5nZWQiOiJfb25UYWJTaXppbmdDaGFuZ2VkIiwiaXJvbi1zZWxlY3QiOiJfb25Jcm9uU2VsZWN0IiwiaXJvbi1kZXNlbGVjdCI6Il9vbklyb25EZXNlbGVjdCJ9LGtleUJpbmRpbmdzOnsibGVmdDprZXl1cCByaWdodDprZXl1cCI6Il9vbkFycm93S2V5dXAifSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5faG9sZEpvYj1udWxsLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT12b2lkIDAsdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0PXZvaWQgMCx0aGlzLl9iaW5kRGVsYXllZEFjdGl2YXRpb25IYW5kbGVyPXRoaXMuX2RlbGF5ZWRBY3RpdmF0aW9uSGFuZGxlci5iaW5kKHRoaXMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fb25CbHVyQ2FwdHVyZS5iaW5kKHRoaXMpLCEwKX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnNldFNjcm9sbERpcmVjdGlvbigieSIsdGhpcy4kLnRhYnNDb250YWluZXIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2NhbmNlbFBlbmRpbmdBY3RpdmF0aW9uKCl9LF9ub2lua0NoYW5nZWQ6ZnVuY3Rpb24odCl7WWkodGhpcykucXVlcnlTZWxlY3RvckFsbCgicGFwZXItdGFiIikuZm9yRWFjaCh0P3RoaXMuX3NldE5vaW5rQXR0cmlidXRlOnRoaXMuX3JlbW92ZU5vaW5rQXR0cmlidXRlKX0sX3NldE5vaW5rQXR0cmlidXRlOmZ1bmN0aW9uKHQpe3Quc2V0QXR0cmlidXRlKCJub2luayIsIiIpfSxfcmVtb3ZlTm9pbmtBdHRyaWJ1dGU6ZnVuY3Rpb24odCl7dC5yZW1vdmVBdHRyaWJ1dGUoIm5vaW5rIil9LF9jb21wdXRlU2Nyb2xsQnV0dG9uQ2xhc3M6ZnVuY3Rpb24odCxlLG4pe3JldHVybiFlfHxuPyJoaWRkZW4iOnQ/Im5vdC12aXNpYmxlIjoiIn0sX2NvbXB1dGVUYWJzQ29udGVudENsYXNzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/InNjcm9sbGFibGUiKyhlPyIgZml0LWNvbnRhaW5lciI6IiIpOiIgZml0LWNvbnRhaW5lciJ9LF9jb21wdXRlU2VsZWN0aW9uQmFyQ2xhc3M6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD8iaGlkZGVuIjplPyJhbGlnbi1ib3R0b20iOiIifSxfb25UYWJTaXppbmdDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kZWJvdW5jZSgiX29uVGFiU2l6aW5nQ2hhbmdlZCIsKGZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsKCksdGhpcy5fdGFiQ2hhbmdlZCh0aGlzLnNlbGVjdGVkSXRlbSl9KSwxMCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5fdGFiQ2hhbmdlZCh0LmRldGFpbC5pdGVtLHRoaXMuX3ByZXZpb3VzVGFiKSx0aGlzLl9wcmV2aW91c1RhYj10LmRldGFpbC5pdGVtLHRoaXMuY2FuY2VsRGVib3VuY2VyKCJ0YWItY2hhbmdlZCIpfSxfb25Jcm9uRGVzZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5kZWJvdW5jZSgidGFiLWNoYW5nZWQiLChmdW5jdGlvbigpe3RoaXMuX3RhYkNoYW5nZWQobnVsbCx0aGlzLl9wcmV2aW91c1RhYiksdGhpcy5fcHJldmlvdXNUYWI9bnVsbH0pLDEpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKSxaYS5fYWN0aXZhdGVIYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3NjaGVkdWxlQWN0aXZhdGlvbjpmdW5jdGlvbih0LGUpe3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT10LHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD10aGlzLmFzeW5jKHRoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXIsZSl9LF9kZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW07dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwLHQuZmlyZSh0aGlzLmFjdGl2YXRlRXZlbnQsbnVsbCx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSl9LF9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbjpmdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dCYmKHRoaXMuY2FuY2VsQXN5bmModGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0KSx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09dm9pZCAwLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD12b2lkIDApfSxfb25BcnJvd0tleXVwOmZ1bmN0aW9uKHQpe3RoaXMuYXV0b3NlbGVjdCYmdGhpcy5fc2NoZWR1bGVBY3RpdmF0aW9uKHRoaXMuZm9jdXNlZEl0ZW0sdGhpcy5hdXRvc2VsZWN0RGVsYXkpfSxfb25CbHVyQ2FwdHVyZTpmdW5jdGlvbih0KXt0LnRhcmdldD09PXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbSYmdGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sZ2V0IF90YWJDb250YWluZXJTY3JvbGxTaXplKCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsV2lkdGgtdGhpcy4kLnRhYnNDb250YWluZXIub2Zmc2V0V2lkdGgpfSxfc2Nyb2xsOmZ1bmN0aW9uKHQsZSl7dGhpcy5zY3JvbGxhYmxlJiZ0aGlzLl9hZmZlY3RTY3JvbGwoZSYmLWUuZGR4fHwwKX0sX2Rvd246ZnVuY3Rpb24odCl7dGhpcy5hc3luYygoZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYyYmKHRoaXMuY2FuY2VsQXN5bmModGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMpLHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jPW51bGwpfSksMSl9LF9hZmZlY3RTY3JvbGw6ZnVuY3Rpb24odCl7dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9dDt2YXIgZT10aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0O3RoaXMuX2xlZnRIaWRkZW49MD09PWUsdGhpcy5fcmlnaHRIaWRkZW49ZT09PXRoaXMuX3RhYkNvbnRhaW5lclNjcm9sbFNpemV9LF9vbkxlZnRTY3JvbGxCdXR0b25Eb3duOmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsVG9MZWZ0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb0xlZnQuYmluZCh0aGlzKSx0aGlzLl9ob2xkRGVsYXkpfSxfb25SaWdodFNjcm9sbEJ1dHRvbkRvd246ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxUb1JpZ2h0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb1JpZ2h0LmJpbmQodGhpcyksdGhpcy5faG9sZERlbGF5KX0sX29uU2Nyb2xsQnV0dG9uVXA6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKHRoaXMuX2hvbGRKb2IpLHRoaXMuX2hvbGRKb2I9bnVsbH0sX3Njcm9sbFRvTGVmdDpmdW5jdGlvbigpe3RoaXMuX2FmZmVjdFNjcm9sbCgtdGhpcy5fc3RlcCl9LF9zY3JvbGxUb1JpZ2h0OmZ1bmN0aW9uKCl7dGhpcy5fYWZmZWN0U2Nyb2xsKHRoaXMuX3N0ZXApfSxfdGFiQ2hhbmdlZDpmdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiB0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZCIpLHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiY29udHJhY3QiKSx2b2lkIHRoaXMuX3Bvc2l0aW9uQmFyKDAsMCk7dmFyIG49dGhpcy4kLnRhYnNDb250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9bi53aWR0aCxyPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1yLmxlZnQtbi5sZWZ0O2lmKHRoaXMuX3Bvcz17d2lkdGg6dGhpcy5fY2FsY1BlcmNlbnQoci53aWR0aCxpKSxsZWZ0OnRoaXMuX2NhbGNQZXJjZW50KG8saSl9LHRoaXMubm9TbGlkZXx8bnVsbD09ZSlyZXR1cm4gdGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3QucmVtb3ZlKCJleHBhbmQiKSx0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImNvbnRyYWN0Iiksdm9pZCB0aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9wb3Mud2lkdGgsdGhpcy5fcG9zLmxlZnQpO3ZhciBhPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz10aGlzLml0ZW1zLmluZGV4T2YoZSksbD10aGlzLml0ZW1zLmluZGV4T2YodCk7dGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3QuYWRkKCJleHBhbmQiKTt2YXIgYz1zPGw7dGhpcy5faXNSVEwmJihjPSFjKSxjP3RoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KHIubGVmdCtyLndpZHRoLWEubGVmdCxpKS01LHRoaXMuX2xlZnQpOnRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGEubGVmdCthLndpZHRoLXIubGVmdCxpKS01LHRoaXMuX2NhbGNQZXJjZW50KG8saSkrNSksdGhpcy5zY3JvbGxhYmxlJiZ0aGlzLl9zY3JvbGxUb1NlbGVjdGVkSWZOZWVkZWQoci53aWR0aCxvKX0sX3Njcm9sbFRvU2VsZWN0ZWRJZk5lZWRlZDpmdW5jdGlvbih0LGUpe3ZhciBuPWUtdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdDsobjwwfHwobis9dC10aGlzLiQudGFic0NvbnRhaW5lci5vZmZzZXRXaWR0aCk+MCkmJih0aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0Kz1uKX0sX2NhbGNQZXJjZW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDEwMCp0L2V9LF9wb3NpdGlvbkJhcjpmdW5jdGlvbih0LGUpe2U9ZXx8MCx0aGlzLl93aWR0aD10PXR8fDAsdGhpcy5fbGVmdD1lLHRoaXMudHJhbnNmb3JtKCJ0cmFuc2xhdGVYKCIrZSsiJSkgc2NhbGVYKCIrdC8xMDArIikiLHRoaXMuJC5zZWxlY3Rpb25CYXIpfSxfb25CYXJUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0O2UuY29udGFpbnMoImV4cGFuZCIpPyhlLnJlbW92ZSgiZXhwYW5kIiksZS5hZGQoImNvbnRyYWN0IiksdGhpcy5fcG9zaXRpb25CYXIodGhpcy5fcG9zLndpZHRoLHRoaXMuX3Bvcy5sZWZ0KSk6ZS5jb250YWlucygiY29udHJhY3QiKSYmZS5yZW1vdmUoImNvbnRyYWN0Iil9fSk7Ci8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwp2YXIgdXM9bnVsbDtScih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvYXN0LWJhY2tncm91bmQtY29sb3IsICMzMjMyMzIpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2FzdC1jb2xvciwgI2YxZjFmMSk7CiAgICAgICAgbWluLWhlaWdodDogNDhweDsKICAgICAgICBtaW4td2lkdGg6IDI4OHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yNik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG1hcmdpbjogMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcywgb3BhY2l0eSAwLjNzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzLCBvcGFjaXR5IDAuM3M7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDBweCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMHB4KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICB9CgogICAgICA6aG9zdCguY2Fwc3VsZSkgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KC5maXQtYm90dG9tKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICA6aG9zdCgucGFwZXItdG9hc3Qtb3BlbikgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c3BhbiBpZD0ibGFiZWwiPnt7dGV4dH19PC9zcGFuPgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci10b2FzdCIsYmVoYXZpb3JzOltrYV0scHJvcGVydGllczp7Zml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93LG9ic2VydmVyOiJfb25GaXRJbnRvQ2hhbmdlZCJ9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImxlZnQifSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToiYm90dG9tIn0sZHVyYXRpb246e3R5cGU6TnVtYmVyLHZhbHVlOjNlM30sdGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LG5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX19vblRyYW5zaXRpb25FbmQifSxnZXQgdmlzaWJsZSgpe3JldHVybiBmby5fd2FybigiYHZpc2libGVgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgb3BlbmVkYCBpbnN0ZWFkIiksdGhpcy5vcGVuZWR9LGdldCBfY2FuQXV0b0Nsb3NlKCl7cmV0dXJuIHRoaXMuZHVyYXRpb24+MCYmdGhpcy5kdXJhdGlvbiE9PTEvMH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2F1dG9DbG9zZT1udWxsLE9hLnJlcXVlc3RBdmFpbGFiaWxpdHkoKX0sc2hvdzpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4ic3RyaW5nIj09dHlwZW9mIHQmJih0PXt0ZXh0OnR9KSx0KTA9PT1lLmluZGV4T2YoIl8iKT9mby5fd2FybignVGhlIHByb3BlcnR5ICInK2UrJyIgaXMgcHJpdmF0ZSBhbmQgd2FzIG5vdCBzZXQuJyk6ZSBpbiB0aGlzP3RoaXNbZV09dFtlXTpmby5fd2FybignVGhlIHByb3BlcnR5ICInK2UrJyIgaXMgbm90IHZhbGlkLicpO3RoaXMub3BlbigpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZSgpfSxfX29uVHJhbnNpdGlvbkVuZDpmdW5jdGlvbih0KXt0JiZ0LnRhcmdldD09PXRoaXMmJiJvcGFjaXR5Ij09PXQucHJvcGVydHlOYW1lJiYodGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCkpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbigpe251bGwhPT10aGlzLl9hdXRvQ2xvc2UmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2F1dG9DbG9zZSksdGhpcy5fYXV0b0Nsb3NlPW51bGwpLHRoaXMub3BlbmVkPyh1cyYmdXMhPT10aGlzJiZ1cy5jbG9zZSgpLHVzPXRoaXMsdGhpcy5maXJlKCJpcm9uLWFubm91bmNlIix7dGV4dDp0aGlzLnRleHR9KSx0aGlzLl9jYW5BdXRvQ2xvc2UmJih0aGlzLl9hdXRvQ2xvc2U9dGhpcy5hc3luYyh0aGlzLmNsb3NlLHRoaXMuZHVyYXRpb24pKSk6dXM9PT10aGlzJiYodXM9bnVsbCksQ2EuX29wZW5lZENoYW5nZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QuYWRkKCJwYXBlci10b2FzdC1vcGVuIil9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLmNsYXNzTGlzdC5yZW1vdmUoInBhcGVyLXRvYXN0LW9wZW4iKX0sX29uRml0SW50b0NoYW5nZWQ6ZnVuY3Rpb24odCl7dGhpcy5wb3NpdGlvblRhcmdldD10fX0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBocz1fZWAKCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6bm9uZTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1iYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIG9wYWNpdHk6IDAuNDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIGxpbmVhciAuMDhzOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJhci1jb2xvciwgIzAwMDAwMCk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJhcjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IC0zcHg7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC42KTsKICAgICAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSBsaW5lYXIgLjA4cywgYmFja2dyb3VuZC1jb2xvciBsaW5lYXIgLjA4czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gbGluZWFyIC4wOHMsIGJhY2tncm91bmQtY29sb3IgbGluZWFyIC4wOHM7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1idXR0b24tY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNTApKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYnV0dG9uOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbi5kcmFnZ2luZyB7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXTpub3QoW2Rpc2FibGVkXSkpIC50b2dnbGUtYmFyIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJhci1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtYmFyOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudG9nZ2xlLWJhciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKICAgICAgICBvcGFjaXR5OiAwLjEyOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF0pIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDE2cHgsIDApOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDE2cHgsIDApOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF06bm90KFtkaXNhYmxlZF0pKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJ1dHRvbi1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtYnV0dG9uOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2JkYmRiZDsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAudG9nZ2xlLWluayB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogLTE0cHg7CiAgICAgICAgbGVmdDogLTE0cHg7CiAgICAgICAgcmlnaHQ6IGF1dG87CiAgICAgICAgYm90dG9tOiBhdXRvOwogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWluazsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAudG9nZ2xlLWluayB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWluazsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIC8qIFRoZSB0b2dnbGUgYnV0dG9uIGhhcyBhbiBhYnNvbHV0ZSBwb3NpdGlvbiBvZiAtM3B4OyBUaGUgZXh0cmEgMXB4CiAgICAgICAgLyogYWNjb3VudHMgZm9yIHRoZSB0b2dnbGUgYnV0dG9uIHNoYWRvdyBib3guICovCiAgICAgICAgbWFyZ2luOiA0cHggMXB4OwogICAgICB9CgogICAgICAudG9nZ2xlLWxhYmVsIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWxhYmVsLXNwYWNpbmcsIDhweCk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICAvKiBpbnZhbGlkIHN0YXRlICovCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgLnRvZ2dsZS1iYXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24taW52YWxpZC1iYXItY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24taW52YWxpZC1idXR0b24tY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgLnRvZ2dsZS1pbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtaW5rLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1jb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJ0b2dnbGVCYXIiIGNsYXNzPSJ0b2dnbGUtYmFyIj48L2Rpdj4KICAgICAgPGRpdiBpZD0idG9nZ2xlQnV0dG9uIiBjbGFzcz0idG9nZ2xlLWJ1dHRvbiI+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtbGFiZWwiPjxzbG90Pjwvc2xvdD48L2Rpdj4KCiAgYDtocy5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKSxScih7X3RlbXBsYXRlOmhzLGlzOiJwYXBlci10b2dnbGUtYnV0dG9uIixiZWhhdmlvcnM6W3VhXSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIiwiYXJpYS1wcmVzc2VkIjoiZmFsc2UiLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e30sbGlzdGVuZXJzOnt0cmFjazoiX29udHJhY2sifSxhdHRhY2hlZDpmdW5jdGlvbigpe0xpKHRoaXMsKGZ1bmN0aW9uKCl7b2kodGhpcywicGFuLXkiKX0pKX0sX29udHJhY2s6ZnVuY3Rpb24odCl7dmFyIGU9dC5kZXRhaWw7InN0YXJ0Ij09PWUuc3RhdGU/dGhpcy5fdHJhY2tTdGFydChlKToidHJhY2siPT09ZS5zdGF0ZT90aGlzLl90cmFja01vdmUoZSk6ImVuZCI9PT1lLnN0YXRlJiZ0aGlzLl90cmFja0VuZChlKX0sX3RyYWNrU3RhcnQ6ZnVuY3Rpb24odCl7dGhpcy5fd2lkdGg9dGhpcy4kLnRvZ2dsZUJhci5vZmZzZXRXaWR0aC8yLHRoaXMuX3RyYWNrQ2hlY2tlZD10aGlzLmNoZWNrZWQsdGhpcy4kLnRvZ2dsZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJkcmFnZ2luZyIpfSxfdHJhY2tNb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZHg7dGhpcy5feD1NYXRoLm1pbih0aGlzLl93aWR0aCxNYXRoLm1heCgwLHRoaXMuX3RyYWNrQ2hlY2tlZD90aGlzLl93aWR0aCtlOmUpKSx0aGlzLnRyYW5zbGF0ZTNkKHRoaXMuX3grInB4IiwwLDAsdGhpcy4kLnRvZ2dsZUJ1dHRvbiksdGhpcy5fdXNlckFjdGl2YXRlKHRoaXMuX3g+dGhpcy5fd2lkdGgvMil9LF90cmFja0VuZDpmdW5jdGlvbih0KXt0aGlzLiQudG9nZ2xlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIiksdGhpcy50cmFuc2Zvcm0oIiIsdGhpcy4kLnRvZ2dsZUJ1dHRvbil9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnRvZ2dsZUJ1dHRvbjt2YXIgdD1Kby5fY3JlYXRlUmlwcGxlKCk7cmV0dXJuIHQuaWQ9ImluayIsdC5zZXRBdHRyaWJ1dGUoInJlY2VudGVycyIsIiIpLHQuY2xhc3NMaXN0LmFkZCgiY2lyY2xlIiwidG9nZ2xlLWluayIpLHR9fSksCi8qKgogICAgQGxpY2Vuc2UKICAgIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwogICAgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudAogICAgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpScih7X3RlbXBsYXRlOl9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0OiB2YXIoLS1wYXBlci10b29sYmFyLWhlaWdodCwgNjRweCk7CiAgICAgICAgLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0OiB2YXIoLS1wYXBlci10b29sYmFyLXNtLWhlaWdodCwgNTZweCk7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCk7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItdG9vbGJhci1iYWNrZ3JvdW5kLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvb2xiYXItY29sb3IsIHZhcigtLWRhcmstdGhlbWUtdGV4dC1jb2xvcikpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXI7CiAgICAgIH0KCiAgICAgIDpob3N0KC5hbmltYXRlKSB7CiAgICAgICAgdHJhbnNpdGlvbjogdmFyKC0tcGFwZXItdG9vbGJhci10cmFuc2l0aW9uLCBoZWlnaHQgMC4xOHMgZWFzZS1pbik7CiAgICAgIH0KCiAgICAgIDpob3N0KC5tZWRpdW0tdGFsbCkgewogICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KSAqIDIpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItbWVkaXVtOwogICAgICB9CgogICAgICA6aG9zdCgudGFsbCkgewogICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KSAqIDMpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItdGFsbDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQpOwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItY29udGVudDsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogVE9ETzogV2hlcmUgc2hvdWxkIG1lZGlhIHF1ZXJ5IGJyZWFrcG9pbnRzIGxpdmUgc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZWxlbWVudHM/CiAgICAgICAqLwoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7CiAgICAgICAgOmhvc3QgewogICAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KTsKICAgICAgICB9CgogICAgICAgIDpob3N0KC5tZWRpdW0tdGFsbCkgewogICAgICAgICAgaGVpZ2h0OiBjYWxjKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1zbS1oZWlnaHQpICogMik7CiAgICAgICAgfQoKICAgICAgICA6aG9zdCgudGFsbCkgewogICAgICAgICAgaGVpZ2h0OiBjYWxjKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1zbS1oZWlnaHQpICogMyk7CiAgICAgICAgfQoKICAgICAgICAudG9vbGJhci10b29scyB7CiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1zbS1oZWlnaHQpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgI3RvcEJhciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAvKiBtaWRkbGUgYmFyICovCiAgICAgICNtaWRkbGVCYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgOmhvc3QoLnRhbGwpICNtaWRkbGVCYXIsCiAgICAgIDpob3N0KC5tZWRpdW0tdGFsbCkgI21pZGRsZUJhciB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOwogICAgICB9CgogICAgICAvKiBib3R0b20gYmFyICovCiAgICAgICNib3R0b21CYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbWFrZSBlbGVtZW50cyAoZS5nLiBidXR0b25zKSByZXNwb25kIHRvIG1vdXNlL3RvdWNoIGV2ZW50cwogICAgICAgKgogICAgICAgKiBcYC50b29sYmFyLXRvb2xzXGAgZGlzYWJsZXMgdG91Y2ggZXZlbnRzIHNvIG11bHRpcGxlIHRvb2xiYXJzIGNhbiBzdGFjayBhbmQgbm90CiAgICAgICAqIGFic29yYiBldmVudHMuIEFsbCBjaGlsZHJlbiBtdXN0IGhhdmUgcG9pbnRlciBldmVudHMgcmUtZW5hYmxlZCB0byB3b3JrIGFzCiAgICAgICAqIGV4cGVjdGVkLgogICAgICAgKi8KICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoKjpub3QoW2Rpc2FibGVkXSkpIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoLnRpdGxlKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIG1hcmdpbi1sZWZ0OiA1NnB4OwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZChwYXBlci1pY29uLWJ1dHRvbiArIC50aXRsZSkgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICB9CgogICAgICAvKioKICAgICAgICogVGhlIC0tcGFwZXItdG9vbGJhci10aXRsZSBtaXhpbiBpcyBhcHBsaWVkIGhlcmUgaW5zdGVhZCBvZiBhYm92ZSB0bwogICAgICAgKiBmaXggdGhlIGlzc3VlIHdpdGggbWFyZ2luLWxlZnQgYmVpbmcgaWdub3JlZCBkdWUgdG8gY3NzIG9yZGVyaW5nLgogICAgICAgKi8KICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoLnRpdGxlKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbGJhci10aXRsZTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQocGFwZXItaWNvbi1idXR0b25baWNvbj1tZW51XSkgewogICAgICAgIG1hcmdpbi1yaWdodDogMjRweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoLmZpdCkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IGF1dG87CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICAvKiBUT0RPKG5vbXMpOiBVbnRpbCB3ZSBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uIGZvciBjbGFzc2VzIHRoYXQgZG9uJ3QgdXNlCiAgICAgICAqIC9kZWVwLyBjcmVhdGUgb3VyIG93bi4KICAgICAgICovCiAgICAgIC5zdGFydC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1zdGFydC1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5jZW50ZXItanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmVuZC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1lbmQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuYXJvdW5kLWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWFyb3VuZC1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1qdXN0aWZpZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0idG9wQmFyIiBjbGFzc1wkPSJ0b29sYmFyLXRvb2xzIFtbX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXMoanVzdGlmeSldXSI+CiAgICAgIDxzbG90IG5hbWU9InRvcCI+PC9zbG90PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0ibWlkZGxlQmFyIiBjbGFzc1wkPSJ0b29sYmFyLXRvb2xzIFtbX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXMobWlkZGxlSnVzdGlmeSldXSI+CiAgICAgIDxzbG90IG5hbWU9Im1pZGRsZSI+PC9zbG90PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0iYm90dG9tQmFyIiBjbGFzc1wkPSJ0b29sYmFyLXRvb2xzIFtbX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXMoYm90dG9tSnVzdGlmeSldXSI+CiAgICAgIDxzbG90IG5hbWU9ImJvdHRvbSI+PC9zbG90PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLXRvb2xiYXIiLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJ0b29sYmFyIn0scHJvcGVydGllczp7Ym90dG9tSnVzdGlmeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LGp1c3RpZnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxtaWRkbGVKdXN0aWZ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn19LHJlYWR5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKHRoaXMuaXMsImlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXBwLWxheW91dCBpbnN0ZWFkISIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyPXRoaXMuX29ic2VydmUodGhpcyksdGhpcy5fdXBkYXRlQXJpYUxhYmVsbGVkQnkoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpfSxfb2JzZXJ2ZTpmdW5jdGlvbih0KXt2YXIgZT1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCl9LmJpbmQodGhpcykpO3JldHVybiBlLm9ic2VydmUodCx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxlfSxfdXBkYXRlQXJpYUxhYmVsbGVkQnk6ZnVuY3Rpb24oKXtEaSgpO2Zvcih2YXIgdCxlPVtdLG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoWWkodGhpcy5yb290KS5xdWVyeVNlbGVjdG9yQWxsKCJzbG90IikpLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChZaSh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3JBbGwoImNvbnRlbnQiKSkpLGk9MDt0PW5baV07aSsrKWZvcih2YXIgcixvPVlpKHQpLmdldERpc3RyaWJ1dGVkTm9kZXMoKSxhPTA7cj1vW2FdO2ErKylpZihyLmNsYXNzTGlzdCYmci5jbGFzc0xpc3QuY29udGFpbnMoInRpdGxlIikpaWYoci5pZCllLnB1c2goci5pZCk7ZWxzZXt2YXIgcz0icGFwZXItdG9vbGJhci1sYWJlbC0iK01hdGguZmxvb3IoMWU0Kk1hdGgucmFuZG9tKCkpO3IuaWQ9cyxlLnB1c2gocyl9ZS5sZW5ndGg+MCYmdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsZS5qb2luKCIgIikpfSxfY29tcHV0ZUJhckV4dHJhQ2xhc3NlczpmdW5jdGlvbih0KXtyZXR1cm4gdD90KygianVzdGlmaWVkIj09PXQ/IiI6Ii1qdXN0aWZpZWQiKToiIn19KSwKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovClJyKHtfdGVtcGxhdGU6X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB6LWluZGV4OiAxMDAyOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAjdG9vbHRpcCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b29sdGlwLWJhY2tncm91bmQsICM2MTYxNjEpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b29sdGlwLXRleHQtY29sb3IsIHdoaXRlKTsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXA7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTY2FsZVVwIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMCk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNjYWxlRG93biB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjApOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4wKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVGYWRlSW5PcGFjaXR5IHsKICAgICAgICAwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVGYWRlT3V0T3BhY2l0eSB7CiAgICAgICAgMCUgewogICAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lU2xpZGVEb3duSW4gewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjAwMHB4KTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICAgIDEwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNsaWRlRG93bk91dCB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIH0KICAgICAgICAxMCUgewogICAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjAwMHB4KTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICB9CgogICAgICAuZmFkZS1pbi1hbmltYXRpb24gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LWluLCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lRmFkZUluT3BhY2l0eTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLWluLCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5mYWRlLW91dC1hbmltYXRpb24gewogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZUZhZGVPdXRPcGFjaXR5OwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5zY2FsZS11cC1hbmltYXRpb24gewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZVNjYWxlVXA7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2NhbGUtZG93bi1hbmltYXRpb24gewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTY2FsZURvd247CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNsaWRlLWRvd24tYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2xpZGVEb3duSW47CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2xpZGUtZG93bi1hbmltYXRpb24tb3V0IHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTbGlkZURvd25PdXQ7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLmNhbmNlbC1hbmltYXRpb24gewogICAgICAgIGFuaW1hdGlvbi1kZWxheTogLTMwcyAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAvKiBUaGFua3MgSUUgMTAuICovCgogICAgICAuaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0idG9vbHRpcCIgY2xhc3M9ImhpZGRlbiI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10b29sdGlwIixob3N0QXR0cmlidXRlczp7cm9sZToidG9vbHRpcCIsdGFiaW5kZXg6LTF9LHByb3BlcnRpZXM6e2Zvcjp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9maW5kVGFyZ2V0In0sbWFudWFsTW9kZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfbWFudWFsTW9kZUNoYW5nZWQifSxwb3NpdGlvbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImJvdHRvbSJ9LGZpdFRvVmlzaWJsZUJvdW5kczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxvZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjE0fSxtYXJnaW5Ub3A6e3R5cGU6TnVtYmVyLHZhbHVlOjE0fSxhbmltYXRpb25EZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6NTAwLG9ic2VydmVyOiJfZGVsYXlDaGFuZ2UifSxhbmltYXRpb25FbnRyeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LGFuaW1hdGlvbkV4aXQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2VudHJ5Olt7bmFtZToiZmFkZS1pbi1hbmltYXRpb24iLG5vZGU6dGhpcyx0aW1pbmc6e2RlbGF5OjB9fV0sZXhpdDpbe25hbWU6ImZhZGUtb3V0LWFuaW1hdGlvbiIsbm9kZTp0aGlzfV19fX0sX3Nob3dpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGxpc3RlbmVyczp7d2Via2l0QW5pbWF0aW9uRW5kOiJfb25BbmltYXRpb25FbmQifSxnZXQgdGFyZ2V0KCl7dmFyIHQ9WWkodGhpcykucGFyZW50Tm9kZSxlPVlpKHRoaXMpLmdldE93bmVyUm9vdCgpO3JldHVybiB0aGlzLmZvcj9ZaShlKS5xdWVyeVNlbGVjdG9yKCIjIit0aGlzLmZvcik6dC5ub2RlVHlwZT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP2UuaG9zdDp0fSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmRUYXJnZXQoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX3JlbW92ZUxpc3RlbmVycygpfSxwbGF5QW5pbWF0aW9uOmZ1bmN0aW9uKHQpeyJlbnRyeSI9PT10P3RoaXMuc2hvdygpOiJleGl0Ij09PXQmJnRoaXMuaGlkZSgpfSxjYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKCJjYW5jZWwtYW5pbWF0aW9uIil9LHNob3c6ZnVuY3Rpb24oKXtpZighdGhpcy5fc2hvd2luZyl7aWYoIiI9PT1ZaSh0aGlzKS50ZXh0Q29udGVudC50cmltKCkpe2Zvcih2YXIgdD0hMCxlPVlpKHRoaXMpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYoIiIhPT1lW25dLnRleHRDb250ZW50LnRyaW0oKSl7dD0hMTticmVha31pZih0KXJldHVybn10aGlzLl9zaG93aW5nPSEwLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImNhbmNlbC1hbmltYXRpb24iKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy51cGRhdGVQb3NpdGlvbigpLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITAsdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKX19LGhpZGU6ZnVuY3Rpb24oKXtpZih0aGlzLl9zaG93aW5nKXtpZih0aGlzLl9hbmltYXRpb25QbGF5aW5nKXJldHVybiB0aGlzLl9zaG93aW5nPSExLHZvaWQgdGhpcy5fY2FuY2VsQW5pbWF0aW9uKCk7dGhpcy5fb25BbmltYXRpb25GaW5pc2goKSx0aGlzLl9zaG93aW5nPSExLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITB9fSx1cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXMuX3RhcmdldCYmdGhpcy5vZmZzZXRQYXJlbnQpe3ZhciB0PXRoaXMub2Zmc2V0OzE0IT10aGlzLm1hcmdpblRvcCYmMTQ9PXRoaXMub2Zmc2V0JiYodD10aGlzLm1hcmdpblRvcCk7dmFyIGUsbixpPXRoaXMub2Zmc2V0UGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9dGhpcy5fdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPShyLndpZHRoLW8ud2lkdGgpLzIscz0oci5oZWlnaHQtby5oZWlnaHQpLzIsbD1yLmxlZnQtaS5sZWZ0LGM9ci50b3AtaS50b3A7c3dpdGNoKHRoaXMucG9zaXRpb24pe2Nhc2UidG9wIjplPWwrYSxuPWMtby5oZWlnaHQtdDticmVhaztjYXNlImJvdHRvbSI6ZT1sK2Esbj1jK3IuaGVpZ2h0K3Q7YnJlYWs7Y2FzZSJsZWZ0IjplPWwtby53aWR0aC10LG49YytzO2JyZWFrO2Nhc2UicmlnaHQiOmU9bCtyLndpZHRoK3Qsbj1jK3N9dGhpcy5maXRUb1Zpc2libGVCb3VuZHM/KGkubGVmdCtlK28ud2lkdGg+d2luZG93LmlubmVyV2lkdGg/KHRoaXMuc3R5bGUucmlnaHQ9IjBweCIsdGhpcy5zdHlsZS5sZWZ0PSJhdXRvIik6KHRoaXMuc3R5bGUubGVmdD1NYXRoLm1heCgwLGUpKyJweCIsdGhpcy5zdHlsZS5yaWdodD0iYXV0byIpLGkudG9wK24rby5oZWlnaHQ+d2luZG93LmlubmVySGVpZ2h0Pyh0aGlzLnN0eWxlLmJvdHRvbT1pLmhlaWdodC1jK3QrInB4Iix0aGlzLnN0eWxlLnRvcD0iYXV0byIpOih0aGlzLnN0eWxlLnRvcD1NYXRoLm1heCgtaS50b3AsbikrInB4Iix0aGlzLnN0eWxlLmJvdHRvbT0iYXV0byIpKToodGhpcy5zdHlsZS5sZWZ0PWUrInB4Iix0aGlzLnN0eWxlLnRvcD1uKyJweCIpfX0sX2FkZExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX3RhcmdldCYmKHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwibW91c2VlbnRlciIsInNob3ciKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsImZvY3VzIiwic2hvdyIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwibW91c2VsZWF2ZSIsImhpZGUiKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsImJsdXIiLCJoaWRlIiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJ0YXAiLCJoaWRlIikpLHRoaXMubGlzdGVuKHRoaXMuJC50b29sdGlwLCJhbmltYXRpb25lbmQiLCJfb25BbmltYXRpb25FbmQiKSx0aGlzLmxpc3Rlbih0aGlzLCJtb3VzZWVudGVyIiwiaGlkZSIpfSxfZmluZFRhcmdldDpmdW5jdGlvbigpe3RoaXMubWFudWFsTW9kZXx8dGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCksdGhpcy5fdGFyZ2V0PXRoaXMudGFyZ2V0LHRoaXMubWFudWFsTW9kZXx8dGhpcy5fYWRkTGlzdGVuZXJzKCl9LF9kZWxheUNoYW5nZTpmdW5jdGlvbih0KXs1MDAhPT10JiZ0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiI6dCsibXMifSl9LF9tYW51YWxNb2RlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMubWFudWFsTW9kZT90aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKTp0aGlzLl9hZGRMaXN0ZW5lcnMoKX0sX2NhbmNlbEFuaW1hdGlvbjpmdW5jdGlvbigpe3RoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZW50cnkiKSksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImNhbmNlbC1hbmltYXRpb24iKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKX0sX29uQW5pbWF0aW9uRmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5fc2hvd2luZyYmKHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZW50cnkiKSksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSgiY2FuY2VsLWFuaW1hdGlvbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZXhpdCIpKSl9LF9vbkFuaW1hdGlvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITEsdGhpcy5fc2hvd2luZ3x8KHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZXhpdCIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKSl9LF9nZXRBbmltYXRpb25UeXBlOmZ1bmN0aW9uKHQpe2lmKCJlbnRyeSI9PT10JiYiIiE9PXRoaXMuYW5pbWF0aW9uRW50cnkpcmV0dXJuIHRoaXMuYW5pbWF0aW9uRW50cnk7aWYoImV4aXQiPT09dCYmIiIhPT10aGlzLmFuaW1hdGlvbkV4aXQpcmV0dXJuIHRoaXMuYW5pbWF0aW9uRXhpdDtpZih0aGlzLmFuaW1hdGlvbkNvbmZpZ1t0XSYmInN0cmluZyI9PXR5cGVvZiB0aGlzLmFuaW1hdGlvbkNvbmZpZ1t0XVswXS5uYW1lKXtpZih0aGlzLmFuaW1hdGlvbkNvbmZpZ1t0XVswXS50aW1pbmcmJnRoaXMuYW5pbWF0aW9uQ29uZmlnW3RdWzBdLnRpbWluZy5kZWxheSYmMCE9PXRoaXMuYW5pbWF0aW9uQ29uZmlnW3RdWzBdLnRpbWluZy5kZWxheSl7dmFyIGU9dGhpcy5hbmltYXRpb25Db25maWdbdF1bMF0udGltaW5nLmRlbGF5OyJlbnRyeSI9PT10P3RoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci10b29sdGlwLWRlbGF5LWluIjplKyJtcyJ9KToiZXhpdCI9PT10JiZ0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItdG9vbHRpcC1kZWxheS1vdXQiOmUrIm1zIn0pfXJldHVybiB0aGlzLmFuaW1hdGlvbkNvbmZpZ1t0XVswXS5uYW1lfX0sX3JlbW92ZUxpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX3RhcmdldCYmKHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWVudGVyIiwic2hvdyIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJmb2N1cyIsInNob3ciKSx0aGlzLnVubGlzdGVuKHRoaXMuX3RhcmdldCwibW91c2VsZWF2ZSIsImhpZGUiKSx0aGlzLnVubGlzdGVuKHRoaXMuX3RhcmdldCwiYmx1ciIsImhpZGUiKSx0aGlzLnVubGlzdGVuKHRoaXMuX3RhcmdldCwidGFwIiwiaGlkZSIpKSx0aGlzLnVubGlzdGVuKHRoaXMuJC50b29sdGlwLCJhbmltYXRpb25lbmQiLCJfb25BbmltYXRpb25FbmQiKSx0aGlzLnVubGlzdGVuKHRoaXMsIm1vdXNlZW50ZXIiLCJoaWRlIil9fSk7Y2xhc3MgZHN7Y29uc3RydWN0b3IodCl7dGhpcy5saXN0ZW5lcj10fX1jb25zdCBwcz1uZXcgU2V0LGZzPW5ldyBTZXQ7ZnVuY3Rpb24gbXModCl7Y29uc3QgZT1uZXcgZHModCk7cmV0dXJuIHBzLmFkZChlKSxlfWZ1bmN0aW9uIGdzKHQpe2NvbnN0IGU9bmV3IGRzKHQpO3JldHVybiBmcy5hZGQoZSksZX1mdW5jdGlvbiBfcygpe2ZzLmZvckVhY2goKHQ9PnQubGlzdGVuZXIoKSkpfWZ1bmN0aW9uIHlzKHQpe3BzLmRlbGV0ZSh0KX1mdW5jdGlvbiB2cyh0KXtmcy5kZWxldGUodCl9d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLCgoKT0+e3BzLmZvckVhY2goKHQ9PnQubGlzdGVuZXIoKSkpfSkpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzdG9yYWdlIiwoKCk9Pntmcy5mb3JFYWNoKCh0PT50Lmxpc3RlbmVyKCkpKX0pKTtsZXQgYnM9ITE7ZnVuY3Rpb24geHMoKXtyZXR1cm4gYnN9bGV0IHdzPSIiO2Z1bmN0aW9uIFNzKHQpe3dzPXR9ZnVuY3Rpb24gTXMoKXtyZXR1cm4gd3N9dmFyIEVzPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLHNldFVzZUhhc2g6ZnVuY3Rpb24gVHModCl7YnM9dH0sdXNlSGFzaDp4cyxzZXRGYWtlSGFzaDpTcyxnZXRGYWtlSGFzaDpNc30pO2xldCBDcz17fTtmdW5jdGlvbiBBcygpe3JldHVybiB4cygpP3dpbmRvdy5sb2NhdGlvbi5oYXNoLnNsaWNlKDEpOk1zKCl9ZnVuY3Rpb24ga3ModCl7Y29uc3QgZT17fTtyZXR1cm4gdC5zcGxpdCgiJiIpLmZvckVhY2goKHQ9Pntjb25zdCBuPXQuc3BsaXQoIj0iKTsxPT09bi5sZW5ndGg/ZS5fX3RhYl9fPW5bMF06Mj09PW4ubGVuZ3RoJiYoZVtkZWNvZGVVUklDb21wb25lbnQoblswXSldPWRlY29kZVVSSUNvbXBvbmVudChuWzFdKSl9KSksZX1mdW5jdGlvbiBMcyh0LGU9ITEpe2lmKHhzKCkpaWYoZSl7Y29uc3QgZT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtlLmhhc2g9dCx3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwiIixlLnRvU3RyaW5nKCkpfWVsc2Ugd2luZG93LmxvY2F0aW9uLmhhc2g9dDtlbHNlIFNzKHQpfWZ1bmN0aW9uIFBzKHQpe2xldCBlPSIiO3ZvaWQgMCE9PXQuX190YWJfXyYmKGUrPXQuX190YWJfXyk7Y29uc3Qgbj1PYmplY3Qua2V5cyh0KS5tYXAoKGU9PltlLHRbZV1dKSkuZmlsdGVyKCh0PT4iX190YWJfXyIhPT10WzBdKSkubWFwKCh0PT5lbmNvZGVVUklDb21wb25lbnQodFswXSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0WzFdKSkpLmpvaW4oIiYiKTtyZXR1cm4gbi5sZW5ndGg+MD9lKyImIituOmV9bXMoKCgpPT57Q3M9a3MoQXMoKSl9KSk7Y29uc3R7Z2V0Ok5zLHNldDpJcyxnZXRJbml0aWFsaXplcjpScyxnZXRPYnNlcnZlcjpPcyxkaXNwb3NlQmluZGluZzp6c309SnMoKHQ9PnQpLCh0PT50KSkse2dldDpEcyxzZXQ6QnMsZ2V0SW5pdGlhbGl6ZXI6SHMsZ2V0T2JzZXJ2ZXI6RnMsZGlzcG9zZUJpbmRpbmc6VnN9PUpzKCh0PT4idHJ1ZSI9PT10fHwiZmFsc2UiIT09dCYmdm9pZCAwKSwodD0+dC50b1N0cmluZygpKSkse2dldDpVcyxzZXQ6anMsZ2V0SW5pdGlhbGl6ZXI6R3MsZ2V0T2JzZXJ2ZXI6V3MsZGlzcG9zZUJpbmRpbmc6cXN9PUpzKCh0PT4rdCksKHQ9PnQudG9TdHJpbmcoKSkpLHtnZXQ6WXMsc2V0OlhzLGdldEluaXRpYWxpemVyOiRzLGdldE9ic2VydmVyOktzLGRpc3Bvc2VCaW5kaW5nOlpzfT1KcygodD0+SlNPTi5wYXJzZShhdG9iKHQpKSksKHQ9PmJ0b2EoSlNPTi5zdHJpbmdpZnkodCkpKSk7ZnVuY3Rpb24gSnModCxlKXtjb25zdCBuPVtdLGk9W107ZnVuY3Rpb24gcihlLG49e30pe2NvbnN0e2RlZmF1bHRWYWx1ZTppLHVzZUxvY2FsU3RvcmFnZTpyPSExfT1uLG89cj93aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oZSk6a3MoQXMoKSlbZV07cmV0dXJuIG51bGw9PW8/U2UuZXhwb3J0cy5jbG9uZURlZXAoaSk6dChvKX1mdW5jdGlvbiBvKHQsbixpPXt9KXtjb25zdHtkZWZhdWx0VmFsdWU6byx1c2VMb2NhbFN0b3JhZ2U6YT0hMSx1c2VMb2NhdGlvblJlcGxhY2U6cz0hMX09aSxsPWUobik7aWYoYSl3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0odCxsKSxfcygpO2Vsc2UgaWYoIVNlLmV4cG9ydHMuaXNFcXVhbChuLHIodCx7dXNlTG9jYWxTdG9yYWdlOmF9KSkpaWYoU2UuZXhwb3J0cy5pc0VxdWFsKG4sbykpIShmdW5jdGlvbiBjKHQpe2NvbnN0IGU9a3MoQXMoKSk7ZGVsZXRlIGVbdF0sTHMoUHMoZSkpfSkodCk7ZWxzZXtjb25zdCBlPWtzKEFzKCkpO2VbdF09bCxMcyhQcyhlKSxzKX19cmV0dXJue2dldDpyLHNldDpvLGdldEluaXRpYWxpemVyOmZ1bmN0aW9uIGEodCxlKXtjb25zdCBvPU9iamVjdC5hc3NpZ24oe2RlZmF1bHRWYWx1ZTplLmRlZmF1bHRWYWx1ZSxwb2x5bWVyUHJvcGVydHk6dCx1c2VMb2NhbFN0b3JhZ2U6ITF9LGUpO3JldHVybiBmdW5jdGlvbigpe2NvbnN0IGU9UXModGhpcyx0KSxhPSgpPT57Y29uc3QgdD1yKGUsbyk7U2UuZXhwb3J0cy5pc0VxdWFsKHQsdGhpc1tvLnBvbHltZXJQcm9wZXJ0eV0pfHwodGhpc1tvLnBvbHltZXJQcm9wZXJ0eV09dCl9LHM9KG8udXNlTG9jYWxTdG9yYWdlP2dzOm1zKSgoKCk9PmEoKSkpO3JldHVybiBvLnVzZUxvY2FsU3RvcmFnZT9pLnB1c2gocyk6bi5wdXNoKHMpLGEoKSx0aGlzW28ucG9seW1lclByb3BlcnR5XX19LGdldE9ic2VydmVyOmZ1bmN0aW9uIHModCxlKXtjb25zdCBuPU9iamVjdC5hc3NpZ24oe2RlZmF1bHRWYWx1ZTplLmRlZmF1bHRWYWx1ZSxwb2x5bWVyUHJvcGVydHk6dCx1c2VMb2NhbFN0b3JhZ2U6ITF9LGUpO3JldHVybiBmdW5jdGlvbigpe28oUXModGhpcyx0KSx0aGlzW24ucG9seW1lclByb3BlcnR5XSxuKX19LGRpc3Bvc2VCaW5kaW5nOmZ1bmN0aW9uIGwoKXtuLmZvckVhY2goKHQ9PnlzKHQpKSksaS5mb3JFYWNoKCh0PT52cyh0KSkpfX19ZnVuY3Rpb24gUXModCxlKXtjb25zdCBuPXQuZGlzYW1iaWd1YXRvcjtyZXR1cm4obnVsbD09bj9bZV06W24sZV0pLmpvaW4oIi4iKX1sZXQgdGw9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGFnRmlsdGVyPVJzKCJ0YWdGaWx0ZXIiLHtkZWZhdWx0VmFsdWU6IiIsdXNlTG9jYWxTdG9yYWdlOiExLHBvbHltZXJQcm9wZXJ0eToiX3RhZ0ZpbHRlciJ9KS5jYWxsKHRoaXMpLHRoaXMuX3RhZ0ZpbHRlck9ic2VydmVyPU9zKCJ0YWdGaWx0ZXIiLHtkZWZhdWx0VmFsdWU6IiIsdXNlTG9jYWxTdG9yYWdlOiExLHBvbHltZXJQcm9wZXJ0eToiX3RhZ0ZpbHRlciJ9KX1fY29tcHV0ZVRhZ0ZpbHRlcigpe3JldHVybiB0aGlzLl90YWdGaWx0ZXJ9fTtmdW5jdGlvbiBlbCh0KXtjb25zdHttb2R1bGVOYW1lOmUsc3R5bGVDb250ZW50Om59PXQsaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkb20tbW9kdWxlIikscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpLG89W107dC5zdHlsZURlcGVuZGVuY2llcyYmdC5zdHlsZURlcGVuZGVuY2llcy5mb3JFYWNoKCh0PT57Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2Uuc2V0QXR0cmlidXRlKCJpbmNsdWRlIix0KSxvLnB1c2goZSl9KSk7Y29uc3QgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO09iamVjdC5hc3NpZ24oYSx7dGV4dENvbnRlbnQ6bn0pLG8uZm9yRWFjaCgodD0+e3IuY29udGVudC5hcHBlbmRDaGlsZCh0KX0pKSxyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoYSksaS5hcHBlbmRDaGlsZChyKSxpLnJlZ2lzdGVyKGUpfXRsLnRlbXBsYXRlPV9lYAogICAgPHBhcGVyLWlucHV0CiAgICAgIG5vLWxhYmVsLWZsb2F0PSIiCiAgICAgIGxhYmVsPSJGaWx0ZXIgdGFncyAocmVndWxhciBleHByZXNzaW9ucyBzdXBwb3J0ZWQpIgogICAgICB2YWx1ZT0ie3tfdGFnRmlsdGVyfX0iCiAgICAgIGNsYXNzPSJzZWFyY2gtaW5wdXQiCiAgICA+CiAgICAgIDxpcm9uLWljb24gcHJlZml4PSIiIGljb249InNlYXJjaCIgc2xvdD0icHJlZml4Ij48L2lyb24taWNvbj4KICAgIDwvcGFwZXItaW5wdXQ+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDEwcHggNXB4IDEwcHggMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxjb21wdXRlZDoiX2NvbXB1dGVUYWdGaWx0ZXIoX3RhZ0ZpbHRlcikifSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHRsLnByb3RvdHlwZSwidGFnRmlsdGVyIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfdGFnRmlsdGVyT2JzZXJ2ZXIifSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHRsLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKSx0bD10KFtpKCJ0Zi10YWctZmlsdGVyZXIiKV0sdGwpLGVsKHttb2R1bGVOYW1lOiJkYXNoYm9hcmQtc3R5bGUiLHN0eWxlRGVwZW5kZW5jaWVzOlsiaXJvbi1mbGV4Il0sc3R5bGVDb250ZW50OiJcbiAgICAgIDpob3N0IHtcbiAgICAgICAgLS1zaWRlYmFyLXZlcnRpY2FsLXBhZGRpbmc6IDE1cHg7XG4gICAgICAgIC0tc2lkZWJhci1sZWZ0LXBhZGRpbmc6IDMwcHg7XG4gICAgICB9XG5cbiAgICAgIFtzbG90PSdzaWRlYmFyJ10ge1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgICAgICBwYWRkaW5nOiA1cHggMDtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICB9XG5cbiAgICAgIC5zZXR0aW5ncyB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDUwcHg7XG4gICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcbiAgICAgIH1cblxuICAgICAgLnJ1bnMtc2VsZWN0b3Ige1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDIwMHB4O1xuICAgICAgfVxuXG4gICAgICB0Zi1ydW5zLXNlbGVjdG9yIHtcbiAgICAgICAgZmxleC1ncm93OiAxO1xuICAgICAgICBmbGV4LXNocmluazogMTtcbiAgICAgICAgbGVmdDogdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpO1xuICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSB2YXIoLS1zaWRlYmFyLXZlcnRpY2FsLXBhZGRpbmcpICogMik7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICB9XG5cbiAgICAgIC5zZWFyY2gtaW5wdXQge1xuICAgICAgICBtYXJnaW46IDEwcHggNXB4IDAgMTBweDtcbiAgICAgIH1cblxuICAgICAgLnNpZGViYXItc2VjdGlvbiB7XG4gICAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCB2YXIoLS10Yi11aS1ib3JkZXIpO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gICAgICAgIHBhZGRpbmc6IHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgMFxuICAgICAgICAgIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgIC5zaWRlYmFyLXNlY3Rpb246Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIH1cblxuICAgICAgLnNpZGViYXItc2VjdGlvbiBwYXBlci1idXR0b24ge1xuICAgICAgICBtYXJnaW46IDVweDtcbiAgICAgIH1cblxuICAgICAgLnNpZGViYXItc2VjdGlvbiBwYXBlci1idXR0b246Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7XG4gICAgICB9XG5cbiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gcGFwZXItYnV0dG9uOmxhc3Qtb2YtdHlwZSB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50O1xuICAgICAgfVxuXG4gICAgICAuc2lkZWJhci1zZWN0aW9uID4gOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICB9XG5cbiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gPiA6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgfVxuXG4gICAgICAuc2lkZWJhci1zZWN0aW9uIGgzIHtcbiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4O1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIH1cblxuICAgICAgcGFwZXItY2hlY2tib3gge1xuICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTtcbiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTtcbiAgICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XG4gICAgICB9XG5cbiAgICAgIGEge1xuICAgICAgICBjb2xvcjogdmFyKC0tdGItbGluayk7XG4gICAgICB9XG5cbiAgICAgIGE6dmlzaXRlZCB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpO1xuICAgICAgfVxuICAifSk7Y29uc3Qgbmw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtmdW5jdGlvbiBpbCh0KXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0e2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9tYXliZVNldERhcmtNb2RlKCksdGhpcy5vYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcigodD0+e3Quc29tZSgodD0+ImNsYXNzIj09PXQuYXR0cmlidXRlTmFtZSkpJiZ0aGlzLl9tYXliZVNldERhcmtNb2RlKCl9KSksdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2F0dHJpYnV0ZXM6ITB9KX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3ZhciB0O3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksbnVsbD09PSh0PXRoaXMub2JzZXJ2ZXIpfHx2b2lkIDA9PT10fHx0LmRpc2Nvbm5lY3QoKX1fbWF5YmVTZXREYXJrTW9kZSgpe3RoaXMuY2xhc3NMaXN0LnRvZ2dsZSgiZGFyay1tb2RlIixkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygiZGFyay1tb2RlIikpfX19bmwuc2V0QXR0cmlidXRlKCJpcyIsImN1c3RvbS1zdHlsZSIpLG5sLnRleHRDb250ZW50PSJcbiAgOnJvb3Qge1xuICAgIC0tdGItb3JhbmdlLXdlYWs6ICNmZmE3MjY7XG4gICAgLS10Yi1vcmFuZ2Utc3Ryb25nOiAjZjU3YzAwO1xuICAgIC0tdGItb3JhbmdlLWRhcms6ICNkYzczMjA7XG4gICAgLS10Yi1ncmV5LWRhcmtlcjogI2UyZTJlMjtcbiAgICAtLXRiLWdyZXktbGlnaHRlcjogI2YzZjNmMztcbiAgICAtLXRiLXVpLWRhcmstYWNjZW50OiAjNzU3NTc1O1xuICAgIC0tdGItdWktbGlnaHQtYWNjZW50OiAjZTBlMGUwO1xuICAgIC0tdGItdWktYm9yZGVyOiB2YXIoLS1wYXBlci1ncmV5LTMwMCk7XG4gICAgLS10Yi1ncmFwaC1mYWRlZDogI2UwZDRiMztcbiAgICAtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTgwMCk7XG4gICAgLS10Yi1yYWlzZWQtYnV0dG9uLXNoYWRvdy1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3I6ICNlOWU5ZTk7XG4gICAgLS10Yi1sYXlvdXQtYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgICAtLXRiLWxpbms6ICMxOTc2ZDI7IC8qIG1hdGVyaWFsIGJsdWUgNzAwLiAqL1xuICAgIC0tdGItbGluay12aXNpdGVkOiAjN2IxZmEyOyAvKiBtYXRlcmlhbCBwdXJwbGUgNzAwLiAqL1xuICB9XG5cbiAgOnJvb3QgLmRhcmstbW9kZSB7XG4gICAgLS10Yi11aS1ib3JkZXI6IHZhcigtLXBhcGVyLWdyZXktNzAwKTtcbiAgICAtLXRiLXVpLWRhcmstYWNjZW50OiB2YXIoLS1wYXBlci1ncmV5LTQwMCk7XG4gICAgLS10Yi11aS1saWdodC1hY2NlbnQ6IHZhcigtLXBhcGVyLWdyZXktNjAwKTtcbiAgICAtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTQwMCk7XG4gICAgLS10Yi1yYWlzZWQtYnV0dG9uLXNoYWRvdy1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiAjZmZmO1xuICAgIC0tc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNDAwKTtcbiAgICAtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcjogIzMwMzAzMDsgIC8qIG1hdGVyaWFsIGdyZXkgQTQwMC4gKi9cbiAgICAtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yOiAjM2EzYTNhO1xuICAgIC0tdGItbGF5b3V0LWJhY2tncm91bmQtY29sb3I6ICMzYTNhM2E7XG4gICAgLS10Yi1saW5rOiAjNDJhNWY1OyAvKiBtYXRlcmlhbCBibHVlIDQwMC4gKi9cbiAgICAtLXRiLWxpbmstdmlzaXRlZDogI2JhNjhjODsgLyogbWF0ZXJpYWwgcHVycGxlIDMwMC4gKi9cbiAgICAvKiBPdmVycmlkZXMgcGFwZXItbWF0ZXJpYWwgKi9cbiAgICAtLXNoYWRvdy1lbGV2YXRpb24tMmRwXy1fYm94LXNoYWRvdzogMCAycHggMnB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSxcbiAgICAgIDAgMXB4IDVweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksXG4gICAgICAwIDNweCAxcHggLTJweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG4gIH1cbiIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChubCksZWwoe21vZHVsZU5hbWU6InNjcm9sbGJhci1zdHlsZSIsc3R5bGVDb250ZW50OiJcbiAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgICAgd2lkdGg6IDEwcHg7XG4gICAgfVxuXG4gICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTUwMCk7XG4gICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS05MDApO1xuICAgIH1cbiAgICAuc2Nyb2xsYmFyIHtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAifSk7bGV0IHJsPWNsYXNzIGV4dGVuZHMoaWwoeWUpKXt9O3JsLnRlbXBsYXRlPV9lYAogICAgPGRpdiBpZD0ic2lkZWJhciI+CiAgICAgIDxzbG90IG5hbWU9InNpZGViYXIiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImNlbnRlciI+CiAgICAgIDxzbG90IG5hbWU9ImNlbnRlciIgY2xhc3M9InNjb2xsYmFyIj48L3Nsb3Q+CiAgICA8L2Rpdj4KICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zZWNvbmRhcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgIH0KCiAgICAgICNzaWRlYmFyIHsKICAgICAgICBmbGV4OiAwIDAgdmFyKC0tdGYtZGFzaGJvYXJkLWxheW91dC1zaWRlYmFyLWJhc2lzLCAyNSUpOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1tYXgtd2lkdGgsIDM1MHB4KTsKICAgICAgICBtaW4td2lkdGg6IHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1taW4td2lkdGgsIDI3MHB4KTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAjY2VudGVyIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZChbc2xvdD0nY2VudGVyJ10pIHsKICAgICAgICBjb250YWluOiBzdHJpY3Q7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgIC50Zi1ncmFwaC1kYXNoYm9hcmQgI2NlbnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHJsPXQoW2koInRmLWRhc2hib2FyZC1sYXlvdXQiKV0scmwpO2NvbnN0IG9sPSJURi5UZW5zb3JCb2FyZC5QYWdpbmF0ZWRWaWV3LmxpbWl0IjtsZXQgYWw9bnVsbDtjb25zdCBzbD1uZXcgU2V0O2Z1bmN0aW9uIGxsKHQpe3NsLmFkZCh0KX1mdW5jdGlvbiBjbCh0KXtzbC5kZWxldGUodCl9ZnVuY3Rpb24gdWwoKXtyZXR1cm4gbnVsbD09YWwmJihhbD1VcyhvbCx7dXNlTG9jYWxTdG9yYWdlOiEwfSksKG51bGw9PWFsfHwhaXNGaW5pdGUoYWwpfHxhbDw9MCkmJihhbD0xMikpLGFsfWNsYXNzIGhsIGV4dGVuZHMgeWV7dXBkYXRlQXJyYXlQcm9wKHQsZSxuKXtsZXQgaT10aGlzLmdldCh0KTtjb25zdCByPWU7aWYoIUFycmF5LmlzQXJyYXkocikpdGhyb3cgUmFuZ2VFcnJvcihgRXhwZWN0ZWQgbmV3IHZhbHVlIHRvICcke3R9JyB0byBiZSBhbiBhcnJheS5gKTtBcnJheS5pc0FycmF5KGkpfHwoaT1bXSx0aGlzLnNldCh0LGkpKTtjb25zdCBvPW5ldyBTZXQoci5tYXAoKCh0LGUpPT5uKHQsZSkpKSk7bGV0IGE9MCxzPTA7Zm9yKDthPGkubGVuZ3RoJiZzPHIubGVuZ3RoOylvLmhhcyhuKGlbYV0sYSkpPyhuKGlbYV0sYSk9PW4ocltzXSxzKT90aGlzLnNldChgJHt0fS4ke2F9YCxyW3NdKTp0aGlzLnNwbGljZSh0LGEsMCxyW3NdKSxzKyssYSsrKTp0aGlzLnNwbGljZSh0LGEsMSk7YTxpLmxlbmd0aCYmdGhpcy5zcGxpY2UodCxhKSxzPHIubGVuZ3RoJiZ0aGlzLnB1c2godCwuLi5yLnNsaWNlKHMpKX19Y2xhc3MgZGwgZXh0ZW5kcyBobHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hcz0iaXRlbSIsdGhpcy5fY29udGVudEFjdGl2ZT0hMCx0aGlzLl9kb21Cb290c3RyYXBwZWQ9ITEsdGhpcy5fY3Rvcj1udWxsLHRoaXMuX3JlbmRlcmVkSXRlbXM9W10sdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Q9bmV3IE1hcCx0aGlzLl9scnVDYWNoZWRJdGVtcz1uZXcgTWFwLHRoaXMuX2NhY2hlU2l6ZT0xMCx0aGlzLl9nZXRJdGVtS2V5PXQ9PkpTT04uc3RyaW5naWZ5KHQpLHRoaXMuX2lzQ29ubmVjdGVkPSExfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9pc0Nvbm5lY3RlZD0hMH1zZXRDYWNoZVNpemUodCl7dGhpcy5fY2FjaGVTaXplPXR9c2V0R2V0SXRlbUtleSh0KXt0aGlzLl9nZXRJdGVtS2V5PXR9dXBkYXRlRG9tKHQpe3RoaXMudXBkYXRlQXJyYXlQcm9wKCJfcmVuZGVyZWRJdGVtcyIsdCx0aGlzLl9nZXRJdGVtS2V5KX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXtpZighdGhpcy5pc0Nvbm5lY3RlZClyZXR1cm4hMTtpZighdGhpcy5fY3Rvcil7Y29uc3QgdD10aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7dGhpcy5fY3Rvcj0kcih0LHRoaXMse3BhcmVudE1vZGVsOiEwLGluc3RhbmNlUHJvcHM6e1t0aGlzLmFzXTohMCxhY3RpdmU6dGhpcy5fY29udGVudEFjdGl2ZX0sZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHQsZSl7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZm9yRWFjaCgobj0+e24uZm9yd2FyZEhvc3RQcm9wKHQsZSl9KSl9fSl9cmV0dXJuITB9X2Jvb3RzdHJhcERvbSgpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCkmJiF0aGlzLl9kb21Cb290c3RyYXBwZWQmJihuZXcgTXV0YXRpb25PYnNlcnZlcigodD0+e2Zvcihjb25zdCBlIG9mIHQpaWYoImNoaWxkTGlzdCI9PT1lLnR5cGUpZm9yKGNvbnN0IHQgb2YgQXJyYXkuZnJvbShlLmFkZGVkTm9kZXMpKXQgaW5zdGFuY2VvZiBFbGVtZW50JiZ0LnNldEF0dHJpYnV0ZSgic2xvdCIsIml0ZW1zIil9KSkub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSxBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZvckVhY2goKHQ9Pnt0aGlzLnJlbW92ZUNoaWxkKHQpfSkpLHRoaXMuX2xydUNhY2hlZEl0ZW1zLmNsZWFyKCksdGhpcy5fcmVuZGVyZWRJdGVtcy5mb3JFYWNoKCgodCxlKT0+dGhpcy5faW5zZXJ0SXRlbSh0LGUpKSksdGhpcy5fZG9tQm9vdHN0cmFwcGVkPSEwKX1fdXBkYXRlQWN0aXZlKCl7dGhpcy5fZG9tQm9vdHN0cmFwcGVkJiZBcnJheS5mcm9tKHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LnZhbHVlcygpKS5mb3JFYWNoKCh0PT57dC5ub3RpZnlQYXRoKCJhY3RpdmUiLHRoaXMuX2NvbnRlbnRBY3RpdmUpfSkpfV91cGRhdGVEb20odCl7aWYodGhpcy5fZG9tQm9vdHN0cmFwcGVkJiYiX3JlbmRlcmVkSXRlbXMiIT10LnBhdGgmJiJfcmVuZGVyZWRJdGVtcy5sZW5ndGgiIT10LnBhdGgpaWYoIl9yZW5kZXJlZEl0ZW1zLnNwbGljZXMiPT09dC5wYXRoKXQudmFsdWUuaW5kZXhTcGxpY2VzLmZvckVhY2goKHQ9Pntjb25zdHtpbmRleDplLGFkZGVkQ291bnQ6bixvYmplY3Q6aSxyZW1vdmVkOnJ9PXQ7ci5mb3JFYWNoKCh0PT57dGhpcy5fcmVtb3ZlSXRlbSh0LHRoaXMuY2hpbGRyZW5bZV0pfSkpLGkuc2xpY2UoZSxlK24pLmZvckVhY2goKCh0LG4pPT50aGlzLl9pbnNlcnRJdGVtKHQsZStuKSkpLHRoaXMuX3RyaW1DYWNoZSgpfSkpO2Vsc2V7Y29uc3QgZT10aGlzLl9nZXRJdGVtS2V5KHQudmFsdWUpO3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmhhcyhlKT90aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5nZXQoZSkubm90aWZ5UGF0aCh0aGlzLmFzLHQudmFsdWUpOmNvbnNvbGUud2FybihgRXhwZWN0ZWQgJyR7ZX0nIHRvIGV4aXN0IGluIHRoZSBET00gYnV0IGNvdWxkIG5vdCBmaW5kIG9uZS5gKX19X2luc2VydEl0ZW0odCxlKXtpZighdGhpcy5fZW5zdXJlVGVtcGxhdGl6ZWQoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRlbXBsYXRpemVkIGJlZm9yZSBpbnNlcnRpbmcgYW4gaXRlbSIpO2xldCBuO2NvbnN0IGk9dGhpcy5fZ2V0SXRlbUtleSh0KTtpZih0aGlzLl9scnVDYWNoZWRJdGVtcy5oYXMoaSkpbj10aGlzLl9scnVDYWNoZWRJdGVtcy5nZXQoaSksdGhpcy5fbHJ1Q2FjaGVkSXRlbXMuZGVsZXRlKGkpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChpKS5ub3RpZnlQYXRoKCJhY3RpdmUiLHRoaXMuX2NvbnRlbnRBY3RpdmUpO2Vsc2V7Y29uc3QgZT1uZXcgdGhpcy5fY3Rvcih7W3RoaXMuYXNdOnQsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9KTtuPWUucm9vdCx0aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5zZXQoaSxlKX10aGlzLmNoaWxkcmVuW2VdP3RoaXMuaW5zZXJ0QmVmb3JlKG4sdGhpcy5jaGlsZHJlbltlXSk6KChuLm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/QXJyYXkuZnJvbShuLmNoaWxkcmVuKTpbbl0pLmZvckVhY2goKHQ9PnQuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKSkpLHRoaXMuYXBwZW5kQ2hpbGQobikpfV9yZW1vdmVJdGVtKHQsZSl7ZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSk7Y29uc3Qgbj10aGlzLl9nZXRJdGVtS2V5KHQpO3RoaXMuX2xydUNhY2hlZEl0ZW1zLnNldChuLGUpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChuKS5ub3RpZnlQYXRoKCJhY3RpdmUiLCExKX1fdHJpbUNhY2hlKCl7Zm9yKDt0aGlzLl9scnVDYWNoZWRJdGVtcy5zaXplPnRoaXMuX2NhY2hlU2l6ZTspe2NvbnN0W3RdPXRoaXMuX2xydUNhY2hlZEl0ZW1zLmtleXMoKTt0aGlzLl9scnVDYWNoZWRJdGVtcy5kZWxldGUodCksdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZGVsZXRlKHQpfX19dChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZGwucHJvdG90eXBlLCJhcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sZGwucHJvdG90eXBlLCJpdGVtcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGRsLnByb3RvdHlwZSwiX2NvbnRlbnRBY3RpdmUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGRsLnByb3RvdHlwZSwiX2RvbUJvb3RzdHJhcHBlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxkbC5wcm90b3R5cGUsIl9jdG9yIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxkbC5wcm90b3R5cGUsIl9yZW5kZXJlZEl0ZW1zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGRsLnByb3RvdHlwZSwiX3JlbmRlcmVkVGVtcGxhdGVJbnN0Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGRsLnByb3RvdHlwZSwiX2xydUNhY2hlZEl0ZW1zIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGRsLnByb3RvdHlwZSwiX2NhY2hlU2l6ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxkbC5wcm90b3R5cGUsIl9nZXRJdGVtS2V5Iix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxkbC5wcm90b3R5cGUsIl9pc0Nvbm5lY3RlZCIsdm9pZCAwKSx0KFthKCJfaXNDb25uZWN0ZWQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGRsLnByb3RvdHlwZSwiX2Jvb3RzdHJhcERvbSIsbnVsbCksdChbYSgiX2NvbnRlbnRBY3RpdmUiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGRsLnByb3RvdHlwZSwiX3VwZGF0ZUFjdGl2ZSIsbnVsbCksdChbYSgiX3JlbmRlcmVkSXRlbXMuKiIsIl9kb21Cb290c3RyYXBwZWQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbT2JqZWN0XSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGRsLnByb3RvdHlwZSwiX3VwZGF0ZURvbSIsbnVsbCksdChbYSgiX2NhY2hlU2l6ZSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZGwucHJvdG90eXBlLCJfdHJpbUNhY2hlIixudWxsKTtsZXQgcGw9Y2xhc3MgZXh0ZW5kcyBkbHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLmdldENhdGVnb3J5SXRlbUtleT10PT5KU09OLnN0cmluZ2lmeSh0KSx0aGlzLl9saW1pdD0xMix0aGlzLl9hY3RpdmVJbmRleD0wLHRoaXMuX3BhZ2VJbnB1dFJhd1ZhbHVlPSIiLHRoaXMuX3BhZ2VJbnB1dEZvY3VzZWQ9ITF9X2NvbXB1dGVDb3VudCgpe3JldHVybiB0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aH1nZXQgX2hhc011bHRpcGxlKCl7cmV0dXJuIHRoaXMuX2NvdW50PjF9X3RvZ2dsZVBhbmUoKXt0aGlzLm9wZW5lZD0hdGhpcy5vcGVuZWR9X2NoYW5nZUNvbnRlbnRBY3RpdmUodCl7dGhpcy5fY29udGVudEFjdGl2ZT10fV9vblBhbmVSZW5kZXJlZENoYW5nZWQodCxlKXt0JiZ0IT09ZSYmdGhpcy4kLmlmUmVuZGVyZWQucmVuZGVyKCl9X2NvbXB1dGVQYW5lUmVuZGVyZWQodCl7cmV0dXJuISh0Lm1ldGFkYXRhLnR5cGU9PT1ici5TRUFSQ0hfUkVTVUxUUyYmIiI9PT10Lm5hbWUpfWdldCBfaXRlbXNSZW5kZXJlZCgpe3JldHVybiB0aGlzLl9wYW5lUmVuZGVyZWQmJnRoaXMub3BlbmVkfV9jb21wdXRlSXNTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0PT09YnIuU0VBUkNIX1JFU1VMVFN9X2NvbXB1dGVJc0ludmFsaWRTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0LnR5cGU9PT1ici5TRUFSQ0hfUkVTVUxUUyYmIXQudmFsaWRSZWdleH1fY29tcHV0ZUlzVW5pdmVyc2FsU2VhcmNoUXVlcnkodCl7cmV0dXJuIHQudHlwZT09PWJyLlNFQVJDSF9SRVNVTFRTJiZ0LnVuaXZlcnNhbFJlZ2V4fV9pc0NvbXBvc2l0ZVNlYXJjaCgpe2NvbnN0e3R5cGU6dCxjb21wb3NpdGVTZWFyY2g6ZX09dGhpcy5jYXRlZ29yeS5tZXRhZGF0YTtyZXR1cm4gZSYmdD09PWJyLlNFQVJDSF9SRVNVTFRTfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLm9wZW5lZD1udWxsPT10aGlzLmluaXRpYWxPcGVuZWR8fHRoaXMuaW5pdGlhbE9wZW5lZCx0aGlzLl9saW1pdExpc3RlbmVyPSgpPT57dGhpcy5zZXQoIl9saW1pdCIsdWwoKSl9LGxsKHRoaXMuX2xpbWl0TGlzdGVuZXIpLHRoaXMuX2xpbWl0TGlzdGVuZXIoKX1kZXRhY2hlZCgpe2NsKHRoaXMuX2xpbWl0TGlzdGVuZXIpfV91cGRhdGVSZW5kZXJlZEl0ZW1zKCl7dmFyIHQ9dGhpcy5fbGltaXQsZT10aGlzLmRpc2FibGVQYWdpbmF0aW9uO2lmKCF0aGlzLl9pdGVtc1JlbmRlcmVkKXJldHVybjtjb25zdCBuPU1hdGguZmxvb3IodGhpcy5fYWN0aXZlSW5kZXgvdCksaT10aGlzLmNhdGVnb3J5Lml0ZW1zfHxbXSxyPWU/aTppLnNsaWNlKG4qdCwobisxKSp0KTt0aGlzLnVwZGF0ZURvbShyKX1fbGltaXRDaGFuZ2VkKHQpe3RoaXMuc2V0Q2FjaGVTaXplKDIqdCl9X2dldENhdGVnb3J5SXRlbUtleUNoYW5nZWQoKXt0aGlzLnNldEdldEl0ZW1LZXkodGhpcy5nZXRDYXRlZ29yeUl0ZW1LZXkpfWdldCBfY3VycmVudFBhZ2UoKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLl9hY3RpdmVJbmRleC90aGlzLl9saW1pdCkrMX1fY29tcHV0ZVBhZ2VDb3VudCh0LGUpe3JldHVybiB0aGlzLmNhdGVnb3J5P01hdGguY2VpbCh0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aC9lKTowfWdldCBfbXVsdGlwbGVQYWdlc0V4aXN0KCl7cmV0dXJuIXRoaXMuZGlzYWJsZVBhZ2luYXRpb24mJnRoaXMuX3BhZ2VDb3VudD4xfWdldCBfaGFzUHJldmlvdXNQYWdlKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRQYWdlPjF9Z2V0IF9oYXNOZXh0UGFnZSgpe3JldHVybiB0aGlzLl9jdXJyZW50UGFnZTx0aGlzLl9wYWdlQ291bnR9X2NvbXB1dGVJbnB1dFdpZHRoKHQpe3JldHVybmBjYWxjKCR7dC50b1N0cmluZygpLmxlbmd0aH1lbSArIDIwcHgpYH1fc2V0QWN0aXZlSW5kZXgodCl7Y29uc3QgZT0odGhpcy5jYXRlZ29yeS5pdGVtc3x8W10pLmxlbmd0aC0xO3Q+ZSYmKHQ9ZSksdDwwJiYodD0wKSx0aGlzLnNldCgiX2FjdGl2ZUluZGV4Iix0KX1fY2xhbXBBY3RpdmVJbmRleCgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4KX1fcGVyZm9ybVByZXZpb3VzUGFnZSgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4LXRoaXMuX2xpbWl0KX1fcGVyZm9ybU5leHRQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgrdGhpcy5fbGltaXQpfV9jb21wdXRlUGFnZUlucHV0VmFsdWUodCxlLG4pe3JldHVybiB0P2U6bi50b1N0cmluZygpfV9oYW5kbGVQYWdlSW5wdXRFdmVudCh0KXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0LnRhcmdldC52YWx1ZSk7Y29uc3QgZT1OdW1iZXIodC50YXJnZXQudmFsdWV8fE5hTik7aWYoaXNOYU4oZSkpcmV0dXJuO2NvbnN0IG49TWF0aC5tYXgoMSxNYXRoLm1pbihlLHRoaXMuX3BhZ2VDb3VudCkpLTE7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fbGltaXQqbil9X2hhbmRsZVBhZ2VDaGFuZ2VFdmVudCgpe3RoaXMuc2V0KCJfcGFnZUlucHV0UmF3VmFsdWUiLHRoaXMuX2N1cnJlbnRQYWdlLnRvU3RyaW5nKCkpfV9oYW5kbGVQYWdlRm9jdXNFdmVudCgpe3RoaXMuc2V0KCJfcGFnZUlucHV0UmF3VmFsdWUiLHRoaXMuX3BhZ2VJbnB1dFZhbHVlKSx0aGlzLnNldCgiX3BhZ2VJbnB1dEZvY3VzZWQiLCEwKX1faGFuZGxlUGFnZUJsdXJFdmVudCgpe3RoaXMuc2V0KCJfcGFnZUlucHV0Rm9jdXNlZCIsITEpfV91cGRhdGVQYWdlSW5wdXRWYWx1ZSh0KXtjb25zdCBlPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIjcGFnZS1pbnB1dCBpbnB1dCIpO2UmJihlLnZhbHVlPXQpfV91cGRhdGVJbnB1dFdpZHRoKCl7dGhpcy51cGRhdGVTdHlsZXMoeyItLXRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3LXBhZ2UtaW5wdXQtd2lkdGgiOnRoaXMuX2lucHV0V2lkdGh9KX19O3BsLnRlbXBsYXRlPV9lYAogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19wYW5lUmVuZGVyZWRdXSIgaWQ9ImlmUmVuZGVyZWQiPgogICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkaW5nIiBvbi10YXA9Il90b2dnbGVQYW5lIiBvcGVuLWJ1dHRvbiQ9Iltbb3BlbmVkXV0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNTZWFyY2hSZXN1bHRzXV0iPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3Bhbj5UYWdzIG1hdGNoaW5nIG11bHRpcGxlIGV4cGVyaW1lbnRzPC9zcGFuPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNJbnZhbGlkU2VhcmNoUmVzdWx0c11dIj4KICAgICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICAgID4mbmJzcDs8c3Ryb25nPihtYWxmb3JtZWQgcmVndWxhciBleHByZXNzaW9uKTwvc3Ryb25nPjwvc3BhbgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+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+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxwbC5wcm90b3R5cGUsImNhdGVnb3J5Iix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scGwucHJvdG90eXBlLCJpbml0aWFsT3BlbmVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHBsLnByb3RvdHlwZSwib3BlbmVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scGwucHJvdG90eXBlLCJkaXNhYmxlUGFnaW5hdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVDb3VudChjYXRlZ29yeS5pdGVtcy4qKSJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0scGwucHJvdG90eXBlLCJfY291bnQiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZVBhbmVSZW5kZXJlZChjYXRlZ29yeSkiLG9ic2VydmVyOiJfb25QYW5lUmVuZGVyZWRDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scGwucHJvdG90eXBlLCJfcGFuZVJlbmRlcmVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVJc1NlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEudHlwZSkifSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxwbC5wcm90b3R5cGUsIl9pc1NlYXJjaFJlc3VsdHMiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzSW52YWxpZFNlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEpIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scGwucHJvdG90eXBlLCJfaXNJbnZhbGlkU2VhcmNoUmVzdWx0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNVbml2ZXJzYWxTZWFyY2hRdWVyeShjYXRlZ29yeS5tZXRhZGF0YSkifSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxwbC5wcm90b3R5cGUsIl9pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Q2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scGwucHJvdG90eXBlLCJnZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9saW1pdENoYW5nZWQifSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLHBsLnByb3RvdHlwZSwiX2xpbWl0Iix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLHBsLnByb3RvdHlwZSwiX2FjdGl2ZUluZGV4Iix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VDb3VudChjYXRlZ29yeS5pdGVtcy4qLCBfbGltaXQpIn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxwbC5wcm90b3R5cGUsIl9wYWdlQ291bnQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlSW5wdXRXaWR0aChfcGFnZUNvdW50KSIsb2JzZXJ2ZXI6Il91cGRhdGVJbnB1dFdpZHRoIn0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxwbC5wcm90b3R5cGUsIl9pbnB1dFdpZHRoIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VJbnB1dFZhbHVlKF9wYWdlSW5wdXRGb2N1c2VkLCBfcGFnZUlucHV0UmF3VmFsdWUsIF9jdXJyZW50UGFnZSkiLG9ic2VydmVyOiJfdXBkYXRlUGFnZUlucHV0VmFsdWUifSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHBsLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFZhbHVlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHBsLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFJhd1ZhbHVlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scGwucHJvdG90eXBlLCJfcGFnZUlucHV0Rm9jdXNlZCIsdm9pZCAwKSx0KFtzKCJfY291bnQiKSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0scGwucHJvdG90eXBlLCJfaGFzTXVsdGlwbGUiLG51bGwpLHQoW2EoIm9wZW5lZCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtCb29sZWFuXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHBsLnByb3RvdHlwZSwiX2NoYW5nZUNvbnRlbnRBY3RpdmUiLG51bGwpLHQoW3MoIm9wZW5lZCIsIl9wYW5lUmVuZGVyZWQiKSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0scGwucHJvdG90eXBlLCJfaXRlbXNSZW5kZXJlZCIsbnVsbCksdChbYSgiX2l0ZW1zUmVuZGVyZWQiLCJjYXRlZ29yeS5pdGVtcy4qIiwiX2xpbWl0IiwiX2FjdGl2ZUluZGV4IiwiX3BhZ2VDb3VudCIsImRpc2FibGVQYWdpbmF0aW9uIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxwbC5wcm90b3R5cGUsIl91cGRhdGVSZW5kZXJlZEl0ZW1zIixudWxsKSx0KFtzKCJfbGltaXQiLCJfYWN0aXZlSW5kZXgiKSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxwbC5wcm90b3R5cGUsIl9jdXJyZW50UGFnZSIsbnVsbCksdChbcygiX3BhZ2VDb3VudCIsImRpc2FibGVQYWdpbmF0aW9uIiksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHBsLnByb3RvdHlwZSwiX211bHRpcGxlUGFnZXNFeGlzdCIsbnVsbCksdChbcygiX2N1cnJlbnRQYWdlIiksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHBsLnByb3RvdHlwZSwiX2hhc1ByZXZpb3VzUGFnZSIsbnVsbCksdChbcygiX2N1cnJlbnRQYWdlIiwiX3BhZ2VDb3VudCIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxwbC5wcm90b3R5cGUsIl9oYXNOZXh0UGFnZSIsbnVsbCksdChbYSgiY2F0ZWdvcnkuaXRlbXMuKiIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0scGwucHJvdG90eXBlLCJfY2xhbXBBY3RpdmVJbmRleCIsbnVsbCkscGw9dChbaSgidGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXciKV0scGwpO2NsYXNzIGZse2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXI9dH19Y2xhc3MgbWx7Y29uc3RydWN0b3IoKXt0aGlzLnJlcXVlc3RNYW5hZ2VyPW5ldyBkcigxKSx0aGlzLl9saXN0ZW5lcnM9bmV3IFNldCx0aGlzLmluaXRpYWxpemVkPSExfXJlZnJlc2goKXtyZXR1cm4gdGhpcy5sb2FkKCkudGhlbigoKCk9Pnt0aGlzLmluaXRpYWxpemVkPSEwfSkpfWFkZExpc3RlbmVyKHQpe2NvbnN0IGU9bmV3IGZsKHQpO3JldHVybiB0aGlzLl9saXN0ZW5lcnMuYWRkKGUpLGV9cmVtb3ZlTGlzdGVuZXJCeUtleSh0KXt0aGlzLl9saXN0ZW5lcnMuZGVsZXRlKHQpfWVtaXRDaGFuZ2UoKXt0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaCgodD0+e3RyeXt0Lmxpc3RlbmVyKCl9Y2F0Y2godCl7fX0pKX19Y2xhc3MgZ2wgZXh0ZW5kcyBtbHtsb2FkKCl7Y29uc3QgdD1fcigpLmVudmlyb25tZW50KCk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57Y29uc3QgZT17ZGF0YUxvY2F0aW9uOnQuZGF0YV9sb2NhdGlvbix3aW5kb3dUaXRsZTp0LndpbmRvd190aXRsZX07dm9pZCAwIT09dC5leHBlcmltZW50X25hbWUmJihlLmV4cGVyaW1lbnROYW1lPXQuZXhwZXJpbWVudF9uYW1lKSx2b2lkIDAhPT10LmV4cGVyaW1lbnRfZGVzY3JpcHRpb24mJihlLmV4cGVyaW1lbnREZXNjcmlwdGlvbj10LmV4cGVyaW1lbnRfZGVzY3JpcHRpb24pLHZvaWQgMCE9PXQuY3JlYXRpb25fdGltZSYmKGUuY3JlYXRpb25UaW1lPXQuY3JlYXRpb25fdGltZSksU2UuZXhwb3J0cy5pc0VxdWFsKHRoaXMuZW52aXJvbm1lbnQsZSl8fCh0aGlzLmVudmlyb25tZW50PWUsdGhpcy5lbWl0Q2hhbmdlKCkpfSkpfWdldERhdGFMb2NhdGlvbigpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZGF0YUxvY2F0aW9uOiIifWdldFdpbmRvd1RpdGxlKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC53aW5kb3dUaXRsZToiIn1nZXRFeHBlcmltZW50TmFtZSgpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZXhwZXJpbWVudE5hbWU6IiJ9Z2V0RXhwZXJpbWVudERlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5leHBlcmltZW50RGVzY3JpcHRpb246IiJ9Z2V0Q3JlYXRpb25UaW1lKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5jcmVhdGlvblRpbWU6bnVsbH19Y29uc3QgX2w9bmV3IGdsO2NsYXNzIHlsIGV4dGVuZHMgbWx7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bnM9W119bG9hZCgpe2NvbnN0IHQ9X3IoKS5ydW5zKCk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57U2UuZXhwb3J0cy5pc0VxdWFsKHRoaXMuX3J1bnMsdCl8fCh0aGlzLl9ydW5zPXQsdGhpcy5lbWl0Q2hhbmdlKCkpfSkpfWdldFJ1bnMoKXtyZXR1cm4gdGhpcy5fcnVucy5zbGljZSgpfX1jb25zdCB2bD1uZXcgeWw7ZnVuY3Rpb24gYmwodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24geGwodCl7cmV0dXJuIDE9PT10Lmxlbmd0aCYmKHQ9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIGJsKHQoZSksbil9fSkodCkpLHtsZWZ0OmZ1bmN0aW9uKGUsbixpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj1lLmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTt0KGVbb10sbik8MD9pPW8rMTpyPW99cmV0dXJuIGl9LHJpZ2h0OmZ1bmN0aW9uKGUsbixpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj1lLmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTt0KGVbb10sbik+MD9yPW86aT1vKzF9cmV0dXJuIGl9fX12YXIgd2w9eGwoYmwpLFNsPXdsLnJpZ2h0LE1sPXdsLmxlZnQ7ZnVuY3Rpb24gRWwodCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBUbCh0LGUsbil7dmFyIGkscixvLGEscz10Lmxlbmd0aCxsPWUubGVuZ3RoLGM9bmV3IEFycmF5KHMqbCk7Zm9yKG51bGw9PW4mJihuPUVsKSxpPW89MDtpPHM7KytpKWZvcihhPXRbaV0scj0wO3I8bDsrK3IsKytvKWNbb109bihhLGVbcl0pO3JldHVybiBjfWZ1bmN0aW9uIENsKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9ZnVuY3Rpb24gQWwodCxlKXt2YXIgbixpLHI9dC5sZW5ndGgsbz0wLGE9LTEscz0wLGw9MDtpZihudWxsPT1lKWZvcig7KythPHI7KWlzTmFOKG49Q2wodFthXSkpfHwobCs9KGk9bi1zKSoobi0ocys9aS8rK28pKSk7ZWxzZSBmb3IoOysrYTxyOylpc05hTihuPUNsKGUodFthXSxhLHQpKSl8fChsKz0oaT1uLXMpKihuLShzKz1pLysrbykpKTtpZihvPjEpcmV0dXJuIGwvKG8tMSl9ZnVuY3Rpb24ga2wodCxlKXt2YXIgbj1BbCh0LGUpO3JldHVybiBuP01hdGguc3FydChuKTpufWZ1bmN0aW9uIExsKHQsZSl7dmFyIG4saSxyLG89dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxvOylpZihudWxsIT0obj10W2FdKSYmbj49bilmb3IoaT1yPW47KythPG87KW51bGwhPShuPXRbYV0pJiYoaT5uJiYoaT1uKSxyPG4mJihyPW4pKX1lbHNlIGZvcig7KythPG87KWlmKG51bGwhPShuPWUodFthXSxhLHQpKSYmbj49bilmb3IoaT1yPW47KythPG87KW51bGwhPShuPWUodFthXSxhLHQpKSYmKGk+biYmKGk9bikscjxuJiYocj1uKSk7cmV0dXJuW2kscl19dmFyIFBsPUFycmF5LnByb3RvdHlwZSxObD1QbC5zbGljZSxJbD1QbC5tYXA7ZnVuY3Rpb24gUmwodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIE9sKHQpe3JldHVybiB0fWZ1bmN0aW9uIHpsKHQsZSxuKXt0PSt0LGU9K2Usbj0ocj1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOnI8Mz8xOituO2Zvcih2YXIgaT0tMSxyPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvbikpLG89bmV3IEFycmF5KHIpOysraTxyOylvW2ldPXQraSpuO3JldHVybiBvfXZhciBEbD1NYXRoLnNxcnQoNTApLEJsPU1hdGguc3FydCgxMCksSGw9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIEZsKHQsZSxuKXt2YXIgaSxyLG8sYSxzPS0xO2lmKG49K24sKHQ9K3QpPT0oZT0rZSkmJm4+MClyZXR1cm5bdF07aWYoKGk9ZTx0KSYmKHI9dCx0PWUsZT1yKSwwPT09KGE9VmwodCxlLG4pKXx8IWlzRmluaXRlKGEpKXJldHVybltdO2lmKGE+MClmb3IodD1NYXRoLmNlaWwodC9hKSxlPU1hdGguZmxvb3IoZS9hKSxvPW5ldyBBcnJheShyPU1hdGguY2VpbChlLXQrMSkpOysrczxyOylvW3NdPSh0K3MpKmE7ZWxzZSBmb3IodD1NYXRoLmZsb29yKHQqYSksZT1NYXRoLmNlaWwoZSphKSxvPW5ldyBBcnJheShyPU1hdGguY2VpbCh0LWUrMSkpOysrczxyOylvW3NdPSh0LXMpL2E7cmV0dXJuIGkmJm8ucmV2ZXJzZSgpLG99ZnVuY3Rpb24gVmwodCxlLG4pe3ZhciBpPShlLXQpL01hdGgubWF4KDAsbikscj1NYXRoLmZsb29yKE1hdGgubG9nKGkpL01hdGguTE4xMCksbz1pL01hdGgucG93KDEwLHIpO3JldHVybiByPj0wPyhvPj1EbD8xMDpvPj1CbD81Om8+PUhsPzI6MSkqTWF0aC5wb3coMTAscik6LU1hdGgucG93KDEwLC1yKS8obz49RGw/MTA6bz49Qmw/NTpvPj1IbD8yOjEpfWZ1bmN0aW9uIFVsKHQsZSxuKXt2YXIgaT1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbikscj1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGkpL01hdGguTE4xMCkpLG89aS9yO3JldHVybiBvPj1EbD9yKj0xMDpvPj1CbD9yKj01Om8+PUhsJiYocio9MiksZTx0Py1yOnJ9ZnVuY3Rpb24gamwodCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkvTWF0aC5MTjIpKzF9ZnVuY3Rpb24gR2wodCxlLG4pe2lmKG51bGw9PW4mJihuPUNsKSxpPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fGk8MilyZXR1cm4rbih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rbih0W2ktMV0saS0xLHQpO3ZhciBpLHI9KGktMSkqZSxvPU1hdGguZmxvb3IociksYT0rbih0W29dLG8sdCk7cmV0dXJuIGErKCtuKHRbbysxXSxvKzEsdCktYSkqKHItbyl9fWZ1bmN0aW9uIFdsKHQsZSl7dmFyIG4saSxyPXQubGVuZ3RoLG89LTE7aWYobnVsbD09ZSl7Zm9yKDsrK288cjspaWYobnVsbCE9KG49dFtvXSkmJm4+PW4pZm9yKGk9bjsrK288cjspbnVsbCE9KG49dFtvXSkmJm4+aSYmKGk9bil9ZWxzZSBmb3IoOysrbzxyOylpZihudWxsIT0obj1lKHRbb10sbyx0KSkmJm4+PW4pZm9yKGk9bjsrK288cjspbnVsbCE9KG49ZSh0W29dLG8sdCkpJiZuPmkmJihpPW4pO3JldHVybiBpfWZ1bmN0aW9uIHFsKHQpe2Zvcih2YXIgZSxuLGkscj10Lmxlbmd0aCxvPS0xLGE9MDsrK288cjspYSs9dFtvXS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGEpOy0tcj49MDspZm9yKGU9KGk9dFtyXSkubGVuZ3RoOy0tZT49MDspblstLWFdPWlbZV07cmV0dXJuIG59ZnVuY3Rpb24gWWwodCxlKXt2YXIgbixpLHI9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1lKXtmb3IoOysrbzxyOylpZihudWxsIT0obj10W29dKSYmbj49bilmb3IoaT1uOysrbzxyOyludWxsIT0obj10W29dKSYmaT5uJiYoaT1uKX1lbHNlIGZvcig7KytvPHI7KWlmKG51bGwhPShuPWUodFtvXSxvLHQpKSYmbj49bilmb3IoaT1uOysrbzxyOyludWxsIT0obj1lKHRbb10sbyx0KSkmJmk+biYmKGk9bik7cmV0dXJuIGl9ZnVuY3Rpb24gWGwodCl7aWYoIShyPXQubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIGU9LTEsbj1ZbCh0LCRsKSxpPW5ldyBBcnJheShuKTsrK2U8bjspZm9yKHZhciByLG89LTEsYT1pW2VdPW5ldyBBcnJheShyKTsrK288cjspYVtvXT10W29dW2VdO3JldHVybiBpfWZ1bmN0aW9uICRsKHQpe3JldHVybiB0Lmxlbmd0aH12YXIgS2w9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIFpsKHQpe3JldHVybiB0fXZhciBKbD0xZS02O2Z1bmN0aW9uIFFsKHQpe3JldHVybiJ0cmFuc2xhdGUoIisodCsuNSkrIiwwKSJ9ZnVuY3Rpb24gdGModCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQrLjUpKyIpIn1mdW5jdGlvbiBlYyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuK3QoZSl9fWZ1bmN0aW9uIG5jKHQpe3ZhciBlPU1hdGgubWF4KDAsdC5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiB0LnJvdW5kKCkmJihlPU1hdGgucm91bmQoZSkpLGZ1bmN0aW9uKG4pe3JldHVybit0KG4pK2V9fWZ1bmN0aW9uIGljKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIHJjKHQsZSl7dmFyIG49W10saT1udWxsLHI9bnVsbCxvPTYsYT02LHM9MyxsPTE9PT10fHw0PT09dD8tMToxLGM9ND09PXR8fDI9PT10PyJ4IjoieSIsdT0xPT09dHx8Mz09PXQ/UWw6dGM7ZnVuY3Rpb24gaChoKXt2YXIgZD1udWxsPT1pP2UudGlja3M/ZS50aWNrcy5hcHBseShlLG4pOmUuZG9tYWluKCk6aSxwPW51bGw9PXI/ZS50aWNrRm9ybWF0P2UudGlja0Zvcm1hdC5hcHBseShlLG4pOlpsOnIsZj1NYXRoLm1heChvLDApK3MsbT1lLnJhbmdlKCksZz0rbVswXSsuNSxfPSttW20ubGVuZ3RoLTFdKy41LHk9KGUuYmFuZHdpZHRoP25jOmVjKShlLmNvcHkoKSksdj1oLnNlbGVjdGlvbj9oLnNlbGVjdGlvbigpOmgsYj12LnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSx4PXYuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoZCxlKS5vcmRlcigpLHc9eC5leGl0KCksUz14LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksTT14LnNlbGVjdCgibGluZSIpLEU9eC5zZWxlY3QoInRleHQiKTtiPWIubWVyZ2UoYi5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSkseD14Lm1lcmdlKFMpLE09TS5tZXJnZShTLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIoYysiMiIsbCpvKSksRT1FLm1lcmdlKFMuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIoYyxsKmYpLmF0dHIoImR5IiwxPT09dD8iMGVtIjozPT09dD8iMC43MWVtIjoiMC4zMmVtIikpLGghPT12JiYoYj1iLnRyYW5zaXRpb24oaCkseD14LnRyYW5zaXRpb24oaCksTT1NLnRyYW5zaXRpb24oaCksRT1FLnRyYW5zaXRpb24oaCksdz13LnRyYW5zaXRpb24oaCkuYXR0cigib3BhY2l0eSIsSmwpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PXkodCkpP3UodCk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSkpLFMuYXR0cigib3BhY2l0eSIsSmwpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIHUoZSYmaXNGaW5pdGUoZT1lKHQpKT9lOnkodCkpfSkpKSx3LnJlbW92ZSgpLGIuYXR0cigiZCIsND09PXR8fDI9PXQ/YT8iTSIrbCphKyIsIitnKyJIMC41ViIrXysiSCIrbCphOiJNMC41LCIrZysiViIrXzphPyJNIitnKyIsIitsKmErIlYwLjVIIitfKyJWIitsKmE6Ik0iK2crIiwwLjVIIitfKSx4LmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiB1KHkodCkpfSkpLE0uYXR0cihjKyIyIixsKm8pLEUuYXR0cihjLGwqZikudGV4dChwKSx2LmZpbHRlcihpYykuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsMj09PXQ/InN0YXJ0Ijo0PT09dD8iZW5kIjoibWlkZGxlIiksdi5lYWNoKChmdW5jdGlvbigpe3RoaXMuX19heGlzPXl9KSl9cmV0dXJuIGguc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxoKTplfSxoLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIG49S2wuY2FsbChhcmd1bWVudHMpLGh9LGgudGlja0FyZ3VtZW50cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P1tdOktsLmNhbGwodCksaCk6bi5zbGljZSgpfSxoLnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09dD9udWxsOktsLmNhbGwodCksaCk6aSYmaS5zbGljZSgpfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxoKTpyfSxoLnRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWE9K3QsaCk6b30saC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGgpOm99LGgudGlja1NpemVPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxoKTphfSxoLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LGgpOnN9LGh9ZnVuY3Rpb24gb2ModCl7cmV0dXJuIHJjKDMsdCl9ZnVuY3Rpb24gYWModCl7cmV0dXJuIHJjKDQsdCl9dmFyIHNjPXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIGxjKCl7Zm9yKHZhciB0LGU9MCxuPWFyZ3VtZW50cy5sZW5ndGgsaT17fTtlPG47KytlKXtpZighKHQ9YXJndW1lbnRzW2VdKyIiKXx8dCBpbiBpfHwvW1xzLl0vLnRlc3QodCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7aVt0XT1bXX1yZXR1cm4gbmV3IGNjKGkpfWZ1bmN0aW9uIGNjKHQpe3RoaXMuXz10fWZ1bmN0aW9uIHVjKHQsZSl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIG49IiIsaT10LmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj10LnNsaWNlKGkrMSksdD10LnNsaWNlKDAsaSkpLHQmJiFlLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTpufX0pKX1mdW5jdGlvbiBoYyh0LGUpe2Zvcih2YXIgbixpPTAscj10Lmxlbmd0aDtpPHI7KytpKWlmKChuPXRbaV0pLm5hbWU9PT1lKXJldHVybiBuLnZhbHVlfWZ1bmN0aW9uIGRjKHQsZSxuKXtmb3IodmFyIGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYodFtpXS5uYW1lPT09ZSl7dFtpXT1zYyx0PXQuc2xpY2UoMCxpKS5jb25jYXQodC5zbGljZShpKzEpKTticmVha31yZXR1cm4gbnVsbCE9biYmdC5wdXNoKHtuYW1lOmUsdmFsdWU6bn0pLHR9Y2MucHJvdG90eXBlPWxjLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Y2Msb246ZnVuY3Rpb24odCxlKXt2YXIgbixpPXRoaXMuXyxyPXVjKHQrIiIsaSksbz0tMSxhPXIubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KytvPGE7KWlmKG49KHQ9cltvXSkudHlwZSlpW25dPWRjKGlbbl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IobiBpbiBpKWlbbl09ZGMoaVtuXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK288YTspaWYoKG49KHQ9cltvXSkudHlwZSkmJihuPWhjKGlbbl0sdC5uYW1lKSkpcmV0dXJuIG59LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IGNjKHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKG49YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgbixpLHI9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXJbb109YXJndW1lbnRzW28rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3Iobz0wLG49KGk9dGhpcy5fW3RdKS5sZW5ndGg7bzxuOysrbylpW29dLnZhbHVlLmFwcGx5KGUscil9LGFwcGx5OmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgaT10aGlzLl9bdF0scj0wLG89aS5sZW5ndGg7cjxvOysrcilpW3JdLnZhbHVlLmFwcGx5KGUsbil9fTt2YXIgcGM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGZjPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpwYyx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIG1jKHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLGZjLmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpmY1tlXSxsb2NhbDp0fTp0fWZ1bmN0aW9uIGdjKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxuPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBuPT09cGMmJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXBjP2UuY3JlYXRlRWxlbWVudCh0KTplLmNyZWF0ZUVsZW1lbnROUyhuLHQpfX1mdW5jdGlvbiBfYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiB5Yyh0KXt2YXIgZT1tYyh0KTtyZXR1cm4oZS5sb2NhbD9fYzpnYykoZSl9ZnVuY3Rpb24gdmMoKXt9ZnVuY3Rpb24gYmModCl7cmV0dXJuIG51bGw9PXQ/dmM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX1mdW5jdGlvbiB4Yygpe3JldHVybltdfWZ1bmN0aW9uIHdjKHQpe3JldHVybiBudWxsPT10P3hjOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19ZnVuY3Rpb24gU2ModCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19ZnVuY3Rpb24gTWModCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gRWModCxlKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPWV9ZnVuY3Rpb24gVGModCxlLG4saSxyLG8pe2Zvcih2YXIgYSxzPTAsbD1lLmxlbmd0aCxjPW8ubGVuZ3RoO3M8YzsrK3MpKGE9ZVtzXSk/KGEuX19kYXRhX189b1tzXSxpW3NdPWEpOm5bc109bmV3IEVjKHQsb1tzXSk7Zm9yKDtzPGw7KytzKShhPWVbc10pJiYocltzXT1hKX1mdW5jdGlvbiBDYyh0LGUsbixpLHIsbyxhKXt2YXIgcyxsLGMsdT17fSxoPWUubGVuZ3RoLGQ9by5sZW5ndGgscD1uZXcgQXJyYXkoaCk7Zm9yKHM9MDtzPGg7KytzKShsPWVbc10pJiYocFtzXT1jPSIkIithLmNhbGwobCxsLl9fZGF0YV9fLHMsZSksYyBpbiB1P3Jbc109bDp1W2NdPWwpO2ZvcihzPTA7czxkOysrcykobD11W2M9IiQiK2EuY2FsbCh0LG9bc10scyxvKV0pPyhpW3NdPWwsbC5fX2RhdGFfXz1vW3NdLHVbY109bnVsbCk6bltzXT1uZXcgRWModCxvW3NdKTtmb3Iocz0wO3M8aDsrK3MpKGw9ZVtzXSkmJnVbcFtzXV09PT1sJiYocltzXT1sKX1mdW5jdGlvbiBBYyh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBrYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gTGModCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBQYyh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fWZ1bmN0aW9uIE5jKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIEljKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX1mdW5jdGlvbiBSYyh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX1mdW5jdGlvbiBPYyh0KXtyZXR1cm4gdC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gemModCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gRGModCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX1mdW5jdGlvbiBCYyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09aT90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxpLG4pfX1mdW5jdGlvbiBIYyh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fE9jKHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIEZjKHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBWYyh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gVWModCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09bn19ZnVuY3Rpb24gamModCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIEdjKHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IFdjKHQpfWZ1bmN0aW9uIFdjKHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1qYyh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIHFjKHQsZSl7Zm9yKHZhciBuPUdjKHQpLGk9LTEscj1lLmxlbmd0aDsrK2k8cjspbi5hZGQoZVtpXSl9ZnVuY3Rpb24gWWModCxlKXtmb3IodmFyIG49R2ModCksaT0tMSxyPWUubGVuZ3RoOysraTxyOyluLnJlbW92ZShlW2ldKX1mdW5jdGlvbiBYYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtxYyh0aGlzLHQpfX1mdW5jdGlvbiAkYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtZYyh0aGlzLHQpfX1mdW5jdGlvbiBLYyh0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9xYzpZYykodGhpcyx0KX19ZnVuY3Rpb24gWmMoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIEpjKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gUWModCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIHR1KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gZXUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH19ZnVuY3Rpb24gbnUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBpdSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBydSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIG91KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gYXUoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBzdSgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCExKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gbHUoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fUVjLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RWMsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX0sV2MucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgY3U9e30sdXU9bnVsbDtmdW5jdGlvbiBodSh0LGUsbil7cmV0dXJuIHQ9ZHUodCxlLG4pLGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVsYXRlZFRhcmdldDtuJiYobj09PXRoaXN8fDgmbi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBkdSh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPXV1O3V1PWk7dHJ5e3QuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxuKX1maW5hbGx5e3V1PXJ9fX1mdW5jdGlvbiBwdSh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiBmdSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLGk9MCxyPS0xLG89ZS5sZW5ndGg7aTxvOysraSluPWVbaV0sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysrcl09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5jYXB0dXJlKTsrK3I/ZS5sZW5ndGg9cjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gbXUodCxlLG4pe3ZhciBpPWN1Lmhhc093blByb3BlcnR5KHQudHlwZSk/aHU6ZHU7cmV0dXJuIGZ1bmN0aW9uKHIsbyxhKXt2YXIgcyxsPXRoaXMuX19vbixjPWkoZSxvLGEpO2lmKGwpZm9yKHZhciB1PTAsaD1sLmxlbmd0aDt1PGg7Kyt1KWlmKChzPWxbdV0pLnR5cGU9PT10LnR5cGUmJnMubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyLHMuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyPWMscy5jYXB0dXJlPW4pLHZvaWQocy52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLGMsbikscz17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjpjLGNhcHR1cmU6bn0sbD9sLnB1c2gocyk6dGhpcy5fX29uPVtzXX19ZnVuY3Rpb24gZ3UodCxlLG4saSl7dmFyIHI9dXU7dC5zb3VyY2VFdmVudD11dSx1dT10O3RyeXtyZXR1cm4gZS5hcHBseShuLGkpfWZpbmFsbHl7dXU9cn19ZnVuY3Rpb24gX3UodCxlLG4pe3ZhciBpPU9jKHQpLHI9aS5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2Ygcj9yPW5ldyByKGUsbik6KHI9aS5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhyLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLHIuZGV0YWlsPW4uZGV0YWlsKTpyLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KHIpfWZ1bmN0aW9uIHl1KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIF91KHRoaXMsdCxlKX19ZnVuY3Rpb24gdnUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gX3UodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoY3U9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciBidT1bbnVsbF07ZnVuY3Rpb24geHUodCxlKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWV9ZnVuY3Rpb24gd3UoKXtyZXR1cm4gbmV3IHh1KFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sYnUpfWZ1bmN0aW9uIFN1KHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgeHUoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyB4dShbW3RdXSxidSl9eHUucHJvdG90eXBlPXd1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6eHUsc2VsZWN0OmZ1bmN0aW9uIE11KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1iYyh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhLHM9ZVtyXSxsPXMubGVuZ3RoLGM9aVtyXT1uZXcgQXJyYXkobCksdT0wO3U8bDsrK3UpKG89c1t1XSkmJihhPXQuY2FsbChvLG8uX19kYXRhX18sdSxzKSkmJigiX19kYXRhX18iaW4gbyYmKGEuX19kYXRhX189by5fX2RhdGFfXyksY1t1XT1hKTtyZXR1cm4gbmV3IHh1KGksdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbiBFdSh0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9d2ModCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPVtdLHI9W10sbz0wO288bjsrK28pZm9yKHZhciBhLHM9ZVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKShhPXNbY10pJiYoaS5wdXNoKHQuY2FsbChhLGEuX19kYXRhX18sYyxzKSksci5wdXNoKGEpKTtyZXR1cm4gbmV3IHh1KGkscil9LGZpbHRlcjpmdW5jdGlvbiBUdSh0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9U2ModCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcilmb3IodmFyIG8sYT1lW3JdLHM9YS5sZW5ndGgsbD1pW3JdPVtdLGM9MDtjPHM7KytjKShvPWFbY10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGMsYSkmJmwucHVzaChvKTtyZXR1cm4gbmV3IHh1KGksdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24gQ3UodCxlKXtpZighdClyZXR1cm4gZj1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHU9LTEsdGhpcy5lYWNoKChmdW5jdGlvbih0KXtmWysrdV09dH0pKSxmO3ZhciBuPWU/Q2M6VGMsaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD0oZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KSh0KSk7Zm9yKHZhciBhPXIubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLHU9MDt1PGE7Kyt1KXt2YXIgaD1pW3VdLGQ9clt1XSxwPWQubGVuZ3RoLGY9dC5jYWxsKGgsaCYmaC5fX2RhdGFfXyx1LGkpLG09Zi5sZW5ndGgsZz1sW3VdPW5ldyBBcnJheShtKSxfPXNbdV09bmV3IEFycmF5KG0pO24oaCxkLGcsXyxjW3VdPW5ldyBBcnJheShwKSxmLGUpO2Zvcih2YXIgeSx2LGI9MCx4PTA7YjxtOysrYilpZih5PWdbYl0pe2ZvcihiPj14JiYoeD1iKzEpOyEodj1fW3hdKSYmKyt4PG07KTt5Ll9uZXh0PXZ8fG51bGx9fXJldHVybihzPW5ldyB4dShzLGkpKS5fZW50ZXI9bCxzLl9leGl0PWMsc30sZW50ZXI6ZnVuY3Rpb24gQXUoKXtyZXR1cm4gbmV3IHh1KHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKE1jKSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbiBrdSgpe3JldHVybiBuZXcgeHUodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChNYyksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24gTHUodCxlLG4pe3ZhciBpPXRoaXMuZW50ZXIoKSxyPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90KGkpOmkuYXBwZW5kKHQrIiIpLG51bGwhPWUmJihyPWUocikpLG51bGw9PW4/by5yZW1vdmUoKTpuKG8pLGkmJnI/aS5tZXJnZShyKS5vcmRlcigpOnJ9LG1lcmdlOmZ1bmN0aW9uIFB1KHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMsaT1lLmxlbmd0aCxyPU1hdGgubWluKGksbi5sZW5ndGgpLG89bmV3IEFycmF5KGkpLGE9MDthPHI7KythKWZvcih2YXIgcyxsPWVbYV0sYz1uW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxkPTA7ZDx1OysrZCkocz1sW2RdfHxjW2RdKSYmKGhbZF09cyk7Zm9yKDthPGk7KythKW9bYV09ZVthXTtyZXR1cm4gbmV3IHh1KG8sdGhpcy5fcGFyZW50cyl9LG9yZGVyOmZ1bmN0aW9uIE51KCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLG49dC5sZW5ndGg7KytlPG47KWZvcih2YXIgaSxyPXRbZV0sbz1yLmxlbmd0aC0xLGE9cltvXTstLW8+PTA7KShpPXJbb10pJiYoYSYmNF5pLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpJiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGksYSksYT1pKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbiBJdSh0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIGUmJm4/dChlLl9fZGF0YV9fLG4uX19kYXRhX18pOiFlLSFufXR8fCh0PUFjKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgscj1uZXcgQXJyYXkoaSksbz0wO288aTsrK28pe2Zvcih2YXIgYSxzPW5bb10sbD1zLmxlbmd0aCxjPXJbb109bmV3IEFycmF5KGwpLHU9MDt1PGw7Kyt1KShhPXNbdV0pJiYoY1t1XT1hKTtjLnNvcnQoZSl9cmV0dXJuIG5ldyB4dShyLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24gUnUoKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uIE91KCl7dmFyIHQ9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxlPS0xO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7dFsrK2VdPXRoaXN9KSksdH0sbm9kZTpmdW5jdGlvbiB6dSgpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIGk9dFtlXSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKXt2YXIgYT1pW3JdO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24gRHUoKXt2YXIgdD0wO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7Kyt0fSkpLHR9LGVtcHR5OmZ1bmN0aW9uIEJ1KCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uIEh1KHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilmb3IodmFyIHIsbz1lW25dLGE9MCxzPW8ubGVuZ3RoO2E8czsrK2EpKHI9b1thXSkmJnQuY2FsbChyLHIuX19kYXRhX18sYSxvKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbiBGdSh0LGUpe3ZhciBuPW1jKHQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGk9dGhpcy5ub2RlKCk7cmV0dXJuIG4ubG9jYWw/aS5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOmkuZ2V0QXR0cmlidXRlKG4pfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/bi5sb2NhbD9MYzprYzoiZnVuY3Rpb24iPT10eXBlb2YgZT9uLmxvY2FsP1JjOkljOm4ubG9jYWw/TmM6UGMpKG4sZSkpfSxzdHlsZTpmdW5jdGlvbiBWdSh0LGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/emM6ImZ1bmN0aW9uIj09dHlwZW9mIGU/QmM6RGMpKHQsZSxudWxsPT1uPyIiOm4pKTpIYyh0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24gVXUodCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9GYzoiZnVuY3Rpb24iPT10eXBlb2YgZT9VYzpWYykodCxlKSk6dGhpcy5ub2RlKClbdF19LGNsYXNzZWQ6ZnVuY3Rpb24ganUodCxlKXt2YXIgbj1qYyh0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaT1HYyh0aGlzLm5vZGUoKSkscj0tMSxvPW4ubGVuZ3RoOysrcjxvOylpZighaS5jb250YWlucyhuW3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9LYzplP1hjOiRjKShuLGUpKX0sdGV4dDpmdW5jdGlvbiBHdSh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9aYzooImZ1bmN0aW9uIj09dHlwZW9mIHQ/UWM6SmMpKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbiBXdSh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD90dTooImZ1bmN0aW9uIj09dHlwZW9mIHQ/bnU6ZXUpKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uIHF1KCl7cmV0dXJuIHRoaXMuZWFjaChpdSl9LGxvd2VyOmZ1bmN0aW9uIFl1KCl7cmV0dXJuIHRoaXMuZWFjaChydSl9LGFwcGVuZDpmdW5jdGlvbiBYdSh0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnljKHQpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSl9LGluc2VydDpmdW5jdGlvbiAkdSh0LGUpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eWModCksaT1udWxsPT1lP291OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YmMoZSk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KSl9LHJlbW92ZTpmdW5jdGlvbiBLdSgpe3JldHVybiB0aGlzLmVhY2goYXUpfSxjbG9uZTpmdW5jdGlvbiBadSh0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD9sdTpzdSl9LGRhdHVtOmZ1bmN0aW9uIEp1KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24gUXUodCxlLG4pe3ZhciBpLHIsbz1wdSh0KyIiKSxhPW8ubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKHM9ZT9tdTpmdSxudWxsPT1uJiYobj0hMSksaT0wO2k8YTsrK2kpdGhpcy5lYWNoKHMob1tpXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciBsLGM9MCx1PXMubGVuZ3RoO2M8dTsrK2MpZm9yKGk9MCxsPXNbY107aTxhOysraSlpZigocj1vW2ldKS50eXBlPT09bC50eXBlJiZyLm5hbWU9PT1sLm5hbWUpcmV0dXJuIGwudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uIHRoKHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/dnU6eXUpKHQsZSkpfX07dmFyIGVoPTA7ZnVuY3Rpb24gbmgoKXtyZXR1cm4gbmV3IGlofWZ1bmN0aW9uIGloKCl7dGhpcy5fPSJAIisoKytlaCkudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIHJoKCl7Zm9yKHZhciB0LGU9dXU7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9ZnVuY3Rpb24gb2godCxlKXt2YXIgbj10Lm93bmVyU1ZHRWxlbWVudHx8dDtpZihuLmNyZWF0ZVNWR1BvaW50KXt2YXIgaT1uLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIGkueD1lLmNsaWVudFgsaS55PWUuY2xpZW50WSxbKGk9aS5tYXRyaXhUcmFuc2Zvcm0odC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGkueV19dmFyIHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bZS5jbGllbnRYLXIubGVmdC10LmNsaWVudExlZnQsZS5jbGllbnRZLXIudG9wLXQuY2xpZW50VG9wXX1mdW5jdGlvbiBhaCh0KXt2YXIgZT1yaCgpO3JldHVybiBlLmNoYW5nZWRUb3VjaGVzJiYoZT1lLmNoYW5nZWRUb3VjaGVzWzBdKSxvaCh0LGUpfWZ1bmN0aW9uIHNoKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgeHUoW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgeHUoW251bGw9PXQ/W106dF0sYnUpfWZ1bmN0aW9uIGxoKHQsZSxuKXthcmd1bWVudHMubGVuZ3RoPDMmJihuPWUsZT1yaCgpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIGkscj0wLG89ZT9lLmxlbmd0aDowO3I8bzsrK3IpaWYoKGk9ZVtyXSkuaWRlbnRpZmllcj09PW4pcmV0dXJuIG9oKHQsaSk7cmV0dXJuIG51bGx9ZnVuY3Rpb24gY2goKXt1dS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiB1aCgpe3V1LnByZXZlbnREZWZhdWx0KCksdXUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gaGgodCl7dmFyIGU9dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1TdSh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLHVoLCEwKTsib25zZWxlY3RzdGFydCJpbiBlP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLHVoLCEwKTooZS5fX25vc2VsZWN0PWUuc3R5bGUuTW96VXNlclNlbGVjdCxlLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiBkaCh0LGUpe3ZhciBuPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGk9U3UodCkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtlJiYoaS5vbigiY2xpY2suZHJhZyIsdWgsITApLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7aS5vbigiY2xpY2suZHJhZyIsbnVsbCl9KSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gbj9pLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKToobi5zdHlsZS5Nb3pVc2VyU2VsZWN0PW4uX19ub3NlbGVjdCxkZWxldGUgbi5fX25vc2VsZWN0KX1mdW5jdGlvbiBwaCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gZmgodCxlLG4saSxyLG8sYSxzLGwsYyl7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnN1YmplY3Q9bix0aGlzLmlkZW50aWZpZXI9aSx0aGlzLmFjdGl2ZT1yLHRoaXMueD1vLHRoaXMueT1hLHRoaXMuZHg9cyx0aGlzLmR5PWwsdGhpcy5fPWN9ZnVuY3Rpb24gbWgoKXtyZXR1cm4hdXUuY3RybEtleSYmIXV1LmJ1dHRvbn1mdW5jdGlvbiBnaCgpe3JldHVybiB0aGlzLnBhcmVudE5vZGV9ZnVuY3Rpb24gX2godCl7cmV0dXJuIG51bGw9PXQ/e3g6dXUueCx5OnV1Lnl9OnR9ZnVuY3Rpb24geWgoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gdmgoKXt2YXIgdCxlLG4saSxyPW1oLG89Z2gsYT1faCxzPXloLGw9e30sYz1sYygic3RhcnQiLCJkcmFnIiwiZW5kIiksdT0wLGg9MDtmdW5jdGlvbiBkKHQpe3Qub24oIm1vdXNlZG93bi5kcmFnIixwKS5maWx0ZXIocykub24oInRvdWNoc3RhcnQuZHJhZyIsZykub24oInRvdWNobW92ZS5kcmFnIixfKS5vbigidG91Y2hlbmQuZHJhZyB0b3VjaGNhbmNlbC5kcmFnIix5KS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gcCgpe2lmKCFpJiZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGE9digibW91c2UiLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpLGFoLHRoaXMsYXJndW1lbnRzKTthJiYoU3UodXUudmlldykub24oIm1vdXNlbW92ZS5kcmFnIixmLCEwKS5vbigibW91c2V1cC5kcmFnIixtLCEwKSxoaCh1dS52aWV3KSxjaCgpLG49ITEsdD11dS5jbGllbnRYLGU9dXUuY2xpZW50WSxhKCJzdGFydCIpKX19ZnVuY3Rpb24gZigpe2lmKHVoKCksIW4pe3ZhciBpPXV1LmNsaWVudFgtdCxyPXV1LmNsaWVudFktZTtuPWkqaStyKnI+aH1sLm1vdXNlKCJkcmFnIil9ZnVuY3Rpb24gbSgpe1N1KHV1LnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWciLG51bGwpLGRoKHV1LnZpZXcsbiksdWgoKSxsLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiBnKCl7aWYoci5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0LGUsbj11dS5jaGFuZ2VkVG91Y2hlcyxpPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLGE9bi5sZW5ndGg7Zm9yKHQ9MDt0PGE7Kyt0KShlPXYoblt0XS5pZGVudGlmaWVyLGksbGgsdGhpcyxhcmd1bWVudHMpKSYmKGNoKCksZSgic3RhcnQiKSl9fWZ1bmN0aW9uIF8oKXt2YXIgdCxlLG49dXUuY2hhbmdlZFRvdWNoZXMsaT1uLmxlbmd0aDtmb3IodD0wO3Q8aTsrK3QpKGU9bFtuW3RdLmlkZW50aWZpZXJdKSYmKHVoKCksZSgiZHJhZyIpKX1mdW5jdGlvbiB5KCl7dmFyIHQsZSxuPXV1LmNoYW5nZWRUb3VjaGVzLHI9bi5sZW5ndGg7Zm9yKGkmJmNsZWFyVGltZW91dChpKSxpPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7aT1udWxsfSksNTAwKSx0PTA7dDxyOysrdCkoZT1sW25bdF0uaWRlbnRpZmllcl0pJiYoY2goKSxlKCJlbmQiKSl9ZnVuY3Rpb24gdih0LGUsbixpLHIpe3ZhciBvLHMsaCxwPW4oZSx0KSxmPWMuY29weSgpO2lmKGd1KG5ldyBmaChkLCJiZWZvcmVzdGFydCIsbyx0LHUscFswXSxwWzFdLDAsMCxmKSwoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9KHV1LnN1YmplY3Q9bz1hLmFwcGx5KGkscikpJiYocz1vLngtcFswXXx8MCxoPW8ueS1wWzFdfHwwLCEwKX0pKSlyZXR1cm4gZnVuY3Rpb24gYShjKXt2YXIgbSxnPXA7c3dpdGNoKGMpe2Nhc2Uic3RhcnQiOmxbdF09YSxtPXUrKzticmVhaztjYXNlImVuZCI6ZGVsZXRlIGxbdF0sLS11O2Nhc2UiZHJhZyI6cD1uKGUsdCksbT11fWd1KG5ldyBmaChkLGMsbyx0LG0scFswXStzLHBbMV0raCxwWzBdLWdbMF0scFsxXS1nWzFdLGYpLGYuYXBwbHksZixbYyxpLHJdKX19cmV0dXJuIGQuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cGgoISF0KSxkKTpyfSxkLmNvbnRhaW5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnBoKHQpLGQpOm99LGQuc3ViamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnBoKHQpLGQpOmF9LGQudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cGgoISF0KSxkKTpzfSxkLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9Yy5vbi5hcHBseShjLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1jP2Q6dH0sZC5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSh0PSt0KSp0LGQpOk1hdGguc3FydChoKX0sZH1mdW5jdGlvbiBiaCh0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24geGgodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIGkgaW4gZSluW2ldPWVbaV07cmV0dXJuIG59ZnVuY3Rpb24gd2goKXt9aWgucHJvdG90eXBlPW5oLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aWgsZ2V0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl87IShlIGluIHQpOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHRbZV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0W3RoaXMuX109ZX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl8gaW4gdCYmZGVsZXRlIHRbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX0sZmgucHJvdG90eXBlLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fLm9uLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpO3JldHVybiB0PT09dGhpcy5fP3RoaXM6dH07dmFyIFNoPS43LE1oPTEvU2gsRWg9IlxccyooWystXT9cXGQrKVxccyoiLFRoPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLENoPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixBaD0vXiMoWzAtOWEtZl17Myw4fSkkLyxraD1uZXcgUmVnRXhwKCJecmdiXFwoIitbRWgsRWgsRWhdKyJcXCkkIiksTGg9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW0NoLENoLENoXSsiXFwpJCIpLFBoPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbRWgsRWgsRWgsVGhdKyJcXCkkIiksTmg9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tDaCxDaCxDaCxUaF0rIlxcKSQiKSxJaD1uZXcgUmVnRXhwKCJeaHNsXFwoIitbVGgsQ2gsQ2hdKyJcXCkkIiksUmg9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tUaCxDaCxDaCxUaF0rIlxcKSQiKSxPaD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiB6aCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIERoKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gQmgodCl7dmFyIGUsbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9QWguZXhlYyh0KSk/KG49ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09bj9IaChlKTozPT09bj9uZXcgamgoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1uP0ZoKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP0ZoKGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9a2guZXhlYyh0KSk/bmV3IGpoKGVbMV0sZVsyXSxlWzNdLDEpOihlPUxoLmV4ZWModCkpP25ldyBqaCgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1QaC5leGVjKHQpKT9GaChlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1OaC5leGVjKHQpKT9GaCgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1JaC5leGVjKHQpKT9ZaChlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPVJoLmV4ZWModCkpP1loKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6T2guaGFzT3duUHJvcGVydHkodCk/SGgoT2hbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBqaChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIEhoKHQpe3JldHVybiBuZXcgamgodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIEZoKHQsZSxuLGkpe3JldHVybiBpPD0wJiYodD1lPW49TmFOKSxuZXcgamgodCxlLG4saSl9ZnVuY3Rpb24gVmgodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB3aHx8KHQ9QmgodCkpLHQ/bmV3IGpoKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBqaH1mdW5jdGlvbiBVaCh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/VmgodCk6bmV3IGpoKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBqaCh0LGUsbixpKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gR2goKXtyZXR1cm4iIyIrcWgodGhpcy5yKStxaCh0aGlzLmcpK3FoKHRoaXMuYil9ZnVuY3Rpb24gV2goKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiBxaCh0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFloKHQsZSxuLGkpe3JldHVybiBpPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgS2godCxlLG4saSl9ZnVuY3Rpb24gWGgodCl7aWYodCBpbnN0YW5jZW9mIEtoKXJldHVybiBuZXcgS2godC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2Ygd2h8fCh0PUJoKHQpKSwhdClyZXR1cm4gbmV3IEtoO2lmKHQgaW5zdGFuY2VvZiBLaClyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUsaT10LmIvMjU1LHI9TWF0aC5taW4oZSxuLGkpLG89TWF0aC5tYXgoZSxuLGkpLGE9TmFOLHM9by1yLGw9KG8rcikvMjtyZXR1cm4gcz8oYT1lPT09bz8obi1pKS9zKzYqKG48aSk6bj09PW8/KGktZSkvcysyOihlLW4pL3MrNCxzLz1sPC41P28rcjoyLW8tcixhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IEtoKGEscyxsLHQub3BhY2l0eSl9ZnVuY3Rpb24gJGgodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1hoKHQpOm5ldyBLaCh0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gS2godCxlLG4saSl7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIFpoKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1iaCh3aCxCaCx7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDp6aCxmb3JtYXRIZXg6emgsZm9ybWF0SHNsOmZ1bmN0aW9uIEpoKCl7cmV0dXJuIFhoKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6RGgsdG9TdHJpbmc6RGh9KSxiaChqaCxVaCx4aCh3aCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9NaDpNYXRoLnBvdyhNaCx0KSxuZXcgamgodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/U2g6TWF0aC5wb3coU2gsdCksbmV3IGpoKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6R2gsZm9ybWF0SGV4OkdoLGZvcm1hdFJnYjpXaCx0b1N0cmluZzpXaH0pKSxiaChLaCwkaCx4aCh3aCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9NaDpNYXRoLnBvdyhNaCx0KSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9TaDpNYXRoLnBvdyhTaCx0KSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwsaT1uKyhuPC41P246MS1uKSplLHI9MipuLWk7cmV0dXJuIG5ldyBqaChaaCh0Pj0yNDA/dC0yNDA6dCsxMjAscixpKSxaaCh0LHIsaSksWmgodDwxMjA/dCsyNDA6dC0xMjAscixpKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisxMDAqKHRoaXMuc3x8MCkrIiUsICIrMTAwKih0aGlzLmx8fDApKyIlIisoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKTt2YXIgUWg9TWF0aC5QSS8xODAsdGQ9MTgwL01hdGguUEksZWQ9Ljk2NDIyLG5kPS44MjUyMSxpZD00LzI5LHJkPTYvMjksb2Q9MypyZCpyZDtmdW5jdGlvbiBhZCh0KXtpZih0IGluc3RhbmNlb2YgbGQpcmV0dXJuIG5ldyBsZCh0LmwsdC5hLHQuYix0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBtZClyZXR1cm4gZ2QodCk7dCBpbnN0YW5jZW9mIGpofHwodD1WaCh0KSk7dmFyIGUsbixpPWRkKHQucikscj1kZCh0LmcpLG89ZGQodC5iKSxhPWNkKCguMjIyNTA0NSppKy43MTY4Nzg2KnIrLjA2MDYxNjkqbykvMSk7cmV0dXJuIGk9PT1yJiZyPT09bz9lPW49YTooZT1jZCgoLjQzNjA3NDcqaSsuMzg1MDY0OSpyKy4xNDMwODA0Km8pL2VkKSxuPWNkKCguMDEzOTMyMippKy4wOTcxMDQ1KnIrLjcxNDE3MzMqbykvbmQpKSxuZXcgbGQoMTE2KmEtMTYsNTAwKihlLWEpLDIwMCooYS1uKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIHNkKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9hZCh0KTpuZXcgbGQodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIGxkKHQsZSxuLGkpe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBjZCh0KXtyZXR1cm4gdD4uMDA4ODU2NDUxNjc5MDM1NjMxP01hdGgucG93KHQsMS8zKTp0L29kK2lkfWZ1bmN0aW9uIHVkKHQpe3JldHVybiB0PnJkP3QqdCp0Om9kKih0LWlkKX1mdW5jdGlvbiBoZCh0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIGRkKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIHBkKHQpe2lmKHQgaW5zdGFuY2VvZiBtZClyZXR1cm4gbmV3IG1kKHQuaCx0LmMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIGxkfHwodD1hZCh0KSksMD09PXQuYSYmMD09PXQuYilyZXR1cm4gbmV3IG1kKE5hTiwwPHQubCYmdC5sPDEwMD8wOk5hTix0LmwsdC5vcGFjaXR5KTt2YXIgZT1NYXRoLmF0YW4yKHQuYix0LmEpKnRkO3JldHVybiBuZXcgbWQoZTwwP2UrMzYwOmUsTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYiksdC5sLHQub3BhY2l0eSl9ZnVuY3Rpb24gZmQodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3BkKHQpOm5ldyBtZCh0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gbWQodCxlLG4saSl7dGhpcy5oPSt0LHRoaXMuYz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIGdkKHQpe2lmKGlzTmFOKHQuaCkpcmV0dXJuIG5ldyBsZCh0LmwsMCwwLHQub3BhY2l0eSk7dmFyIGU9dC5oKlFoO3JldHVybiBuZXcgbGQodC5sLE1hdGguY29zKGUpKnQuYyxNYXRoLnNpbihlKSp0LmMsdC5vcGFjaXR5KX1iaChsZCxzZCx4aCh3aCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBsZCh0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGxkKHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LGU9aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxuPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIG5ldyBqaChoZCgzLjEzMzg1NjEqKGU9ZWQqdWQoZSkpLTEuNjE2ODY2NyoodD0xKnVkKHQpKS0uNDkwNjE0Nioobj1uZCp1ZChuKSkpLGhkKC0uOTc4NzY4NCplKzEuOTE2MTQxNSp0Ky4wMzM0NTQqbiksaGQoLjA3MTk0NTMqZS0uMjI4OTkxNCp0KzEuNDA1MjQyNypuKSx0aGlzLm9wYWNpdHkpfX0pKSxiaChtZCxmZCx4aCh3aCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtZCh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG1kKHRoaXMuaCx0aGlzLmMsdGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIGdkKHRoaXMpLnJnYigpfX0pKTt2YXIgX2Q9LS4yOTIyNyx5ZD0tLjkwNjQ5LHZkPTEuOTcyOTQ7ZnVuY3Rpb24gYmQodCl7aWYodCBpbnN0YW5jZW9mIHdkKXJldHVybiBuZXcgd2QodC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2Ygamh8fCh0PVZoKHQpKTt2YXIgZT10LmcvMjU1LG49dC5iLzI1NSxpPSgtLjY1NTc2MzY2Njc5OTk5OTkqbit0LnIvMjU1Ki0xLjc4ODQ1MDM4MDYtMy41MTcyOTgyNDM4KmUpLy01Ljk2MTUxMjI5MTIscj1uLWksbz0odmQqKGUtaSktX2QqcikveWQsYT1NYXRoLnNxcnQobypvK3IqcikvKHZkKmkqKDEtaSkpLHM9YT9NYXRoLmF0YW4yKG8scikqdGQtMTIwOk5hTjtyZXR1cm4gbmV3IHdkKHM8MD9zKzM2MDpzLGEsaSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIHhkKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9iZCh0KTpuZXcgd2QodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIHdkKHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBTZCh0LGUsbixpLHIpe3ZhciBvPXQqdCxhPW8qdDtyZXR1cm4oKDEtMyp0KzMqby1hKSplKyg0LTYqbyszKmEpKm4rKDErMyp0KzMqby0zKmEpKmkrYSpyKS82fWZ1bmN0aW9uIE1kKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxyPXRbaV0sbz10W2krMV07cmV0dXJuIFNkKChuLWkvZSkqZSxpPjA/dFtpLTFdOjIqci1vLHIsbyxpPGUtMT90W2krMl06MipvLXIpfX1mdW5jdGlvbiBFZCh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9TWF0aC5mbG9vcigoKG4lPTEpPDA/KytuOm4pKmUpO3JldHVybiBTZCgobi1pL2UpKmUsdFsoaStlLTEpJWVdLHRbaSVlXSx0WyhpKzEpJWVdLHRbKGkrMiklZV0pfX1mdW5jdGlvbiBUZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gQ2QodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX1mdW5jdGlvbiBBZCh0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9DZCh0LG4+MTgwfHxuPC0xODA/bi0zNjAqTWF0aC5yb3VuZChuLzM2MCk6bik6VGQoaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBrZCh0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9DZCh0LG4pOlRkKGlzTmFOKHQpP2U6dCl9Ymgod2QseGQseGgod2gse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/TWg6TWF0aC5wb3coTWgsdCksbmV3IHdkKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/U2g6TWF0aC5wb3coU2gsdCksbmV3IHdkKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpRaCxlPSt0aGlzLmwsbj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmUqKDEtZSksaT1NYXRoLmNvcyh0KSxyPU1hdGguc2luKHQpO3JldHVybiBuZXcgamgoMjU1KihlK24qKC0uMTQ4NjEqaSsxLjc4Mjc3KnIpKSwyNTUqKGUrbiooX2QqaSt5ZCpyKSksMjU1KihlK24qKHZkKmkpKSx0aGlzLm9wYWNpdHkpfX0pKTt2YXIgTGQ9KGZ1bmN0aW9uIHQoZSl7dmFyIG49KGZ1bmN0aW9uIGkodCl7cmV0dXJuIDE9PSh0PSt0KT9rZDpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/KGZ1bmN0aW9uIGkodCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGgucG93KHQraSplLG4pfX0pKGUsbix0KTpUZChpc05hTihlKT9uOmUpfX0pKGUpO2Z1bmN0aW9uIHIodCxlKXt2YXIgaT1uKCh0PVVoKHQpKS5yLChlPVVoKGUpKS5yKSxyPW4odC5nLGUuZyksbz1uKHQuYixlLmIpLGE9a2QodC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9aShlKSx0Lmc9cihlKSx0LmI9byhlKSx0Lm9wYWNpdHk9YShlKSx0KyIifX1yZXR1cm4gci5nYW1tYT10LHJ9KSgxKTtmdW5jdGlvbiBQZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4saSxyPWUubGVuZ3RoLG89bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLHM9bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxyOysrbilpPVVoKGVbbl0pLG9bbl09aS5yfHwwLGFbbl09aS5nfHwwLHNbbl09aS5ifHwwO3JldHVybiBvPXQobyksYT10KGEpLHM9dChzKSxpLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gaS5yPW8odCksaS5nPWEodCksaS5iPXModCksaSsiIn19fXZhciBOZD1QZChNZCksSWQ9UGQoRWQpO2Z1bmN0aW9uIFJkKHQsZSl7ZXx8KGU9W10pO3ZhciBuLGk9dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxyPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKG49MDtuPGk7KytuKXJbbl09dFtuXSooMS1vKStlW25dKm87cmV0dXJuIHJ9fWZ1bmN0aW9uIE9kKHQpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcodCkmJiEodCBpbnN0YW5jZW9mIERhdGFWaWV3KX1mdW5jdGlvbiB6ZCh0LGUpe3ZhciBuLGk9ZT9lLmxlbmd0aDowLHI9dD9NYXRoLm1pbihpLHQubGVuZ3RoKTowLG89bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxyOysrbilvW25dPWpkKHRbbl0sZVtuXSk7Zm9yKDtuPGk7KytuKWFbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPHI7KytuKWFbbl09b1tuXSh0KTtyZXR1cm4gYX19ZnVuY3Rpb24gRGQodCxlKXt2YXIgbj1uZXcgRGF0ZTtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKGkpe3JldHVybiBuLnNldFRpbWUodCooMS1pKStlKmkpLG59fWZ1bmN0aW9uIEJkKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gdCooMS1uKStlKm59fWZ1bmN0aW9uIEhkKHQsZSl7dmFyIG4saT17fSxyPXt9O2ZvcihuIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSluIGluIHQ/aVtuXT1qZCh0W25dLGVbbl0pOnJbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG4gaW4gaSlyW25dPWlbbl0odCk7cmV0dXJuIHJ9fXZhciBGZD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csVmQ9bmV3IFJlZ0V4cChGZC5zb3VyY2UsImciKTtmdW5jdGlvbiBVZCh0LGUpe3ZhciBuLGkscixvPUZkLmxhc3RJbmRleD1WZC5sYXN0SW5kZXg9MCxhPS0xLHM9W10sbD1bXTtmb3IodCs9IiIsZSs9IiI7KG49RmQuZXhlYyh0KSkmJihpPVZkLmV4ZWMoZSkpOykocj1pLmluZGV4KT5vJiYocj1lLnNsaWNlKG8sciksc1thXT9zW2FdKz1yOnNbKythXT1yKSwobj1uWzBdKT09PShpPWlbMF0pP3NbYV0/c1thXSs9aTpzWysrYV09aTooc1srK2FdPW51bGwsbC5wdXNoKHtpOmEseDpCZChuLGkpfSkpLG89VmQubGFzdEluZGV4O3JldHVybiBvPGUubGVuZ3RoJiYocj1lLnNsaWNlKG8pLHNbYV0/c1thXSs9cjpzWysrYV09cikscy5sZW5ndGg8Mj9sWzBdPyhmdW5jdGlvbiBjKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKSsiIn19KShsWzBdLngpOihmdW5jdGlvbiB1KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0pKGUpOihlPWwubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixpPTA7aTxlOysraSlzWyhuPWxbaV0pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIGpkKHQsZSl7dmFyIG4saT10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09aT9UZChlKTooIm51bWJlciI9PT1pP0JkOiJzdHJpbmciPT09aT8obj1CaChlKSk/KGU9bixMZCk6VWQ6ZSBpbnN0YW5jZW9mIEJoP0xkOmUgaW5zdGFuY2VvZiBEYXRlP0RkOk9kKGUpP1JkOkFycmF5LmlzQXJyYXkoZSk/emQ6ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpP0hkOkJkKSh0LGUpfWZ1bmN0aW9uIEdkKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZCh0KigxLW4pK2Uqbil9fXZhciBXZCxxZCxZZCxYZCwkZD0xODAvTWF0aC5QSSxLZD17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBaZCh0LGUsbixpLHIsbyl7dmFyIGEscyxsO3JldHVybihhPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1hLGUvPWEpLChsPXQqbitlKmkpJiYobi09dCpsLGktPWUqbCksKHM9TWF0aC5zcXJ0KG4qbitpKmkpKSYmKG4vPXMsaS89cyxsLz1zKSx0Kmk8ZSpuJiYodD0tdCxlPS1lLGw9LWwsYT0tYSkse3RyYW5zbGF0ZVg6cix0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIoZSx0KSokZCxza2V3WDpNYXRoLmF0YW4obCkqJGQsc2NhbGVYOmEsc2NhbGVZOnN9fWZ1bmN0aW9uIEpkKHQsZSxuLGkpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihvLGEpe3ZhciBzPVtdLGw9W107cmV0dXJuIG89dChvKSxhPXQoYSksKGZ1bmN0aW9uIGModCxpLHIsbyxhLHMpe2lmKHQhPT1yfHxpIT09byl7dmFyIGw9YS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6bC00LHg6QmQodCxyKX0se2k6bC0yLHg6QmQoaSxvKX0pfWVsc2Uocnx8bykmJmEucHVzaCgidHJhbnNsYXRlKCIrcitlK28rbil9KShvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVkscyxsKSwoZnVuY3Rpb24gdSh0LGUsbixvKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksby5wdXNoKHtpOm4ucHVzaChyKG4pKyJyb3RhdGUoIixudWxsLGkpLTIseDpCZCh0LGUpfSkpOmUmJm4ucHVzaChyKG4pKyJyb3RhdGUoIitlK2kpfSkoby5yb3RhdGUsYS5yb3RhdGUscyxsKSwoZnVuY3Rpb24gaCh0LGUsbixvKXt0IT09ZT9vLnB1c2goe2k6bi5wdXNoKHIobikrInNrZXdYKCIsbnVsbCxpKS0yLHg6QmQodCxlKX0pOmUmJm4ucHVzaChyKG4pKyJza2V3WCgiK2UraSl9KShvLnNrZXdYLGEuc2tld1gscyxsKSwoZnVuY3Rpb24gZCh0LGUsbixpLG8sYSl7aWYodCE9PW58fGUhPT1pKXt2YXIgcz1vLnB1c2gocihvKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7YS5wdXNoKHtpOnMtNCx4OkJkKHQsbil9LHtpOnMtMix4OkJkKGUsaSl9KX1lbHNlIDE9PT1uJiYxPT09aXx8by5wdXNoKHIobykrInNjYWxlKCIrbisiLCIraSsiKSIpfSkoby5zY2FsZVgsby5zY2FsZVksYS5zY2FsZVgsYS5zY2FsZVkscyxsKSxvPWE9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0tMSxpPWwubGVuZ3RoOysrbjxpOylzWyhlPWxbbl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciBRZD1KZCgoZnVuY3Rpb24gdHAodCl7cmV0dXJuIm5vbmUiPT09dD9LZDooV2R8fChXZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxxZD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsWWQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLFdkLnN0eWxlLnRyYW5zZm9ybT10LHQ9WWQuZ2V0Q29tcHV0ZWRTdHlsZShxZC5hcHBlbmRDaGlsZChXZCksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIikscWQucmVtb3ZlQ2hpbGQoV2QpLFpkKCsodD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIikpWzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9KSwicHgsICIsInB4KSIsImRlZykiKSxlcD1KZCgoZnVuY3Rpb24gbnAodCl7cmV0dXJuIG51bGw9PXQ/S2Q6KFhkfHwoWGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksWGQuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PVhkLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP1pkKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOktkKX0pLCIsICIsIikiLCIpIiksaXA9TWF0aC5TUVJUMjtmdW5jdGlvbiBycCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBvcCh0LGUpe3ZhciBuLGkscj10WzBdLG89dFsxXSxhPXRbMl0scz1lWzJdLGw9ZVswXS1yLGM9ZVsxXS1vLHU9bCpsK2MqYztpZih1PDFlLTEyKWk9TWF0aC5sb2cocy9hKS9pcCxuPWZ1bmN0aW9uKHQpe3JldHVybltyK3QqbCxvK3QqYyxhKk1hdGguZXhwKGlwKnQqaSldfTtlbHNle3ZhciBoPU1hdGguc3FydCh1KSxkPShzKnMtYSphKzQqdSkvKDIqYSoyKmgpLHA9KHMqcy1hKmEtNCp1KS8oMipzKjIqaCksZj1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLG09TWF0aC5sb2coTWF0aC5zcXJ0KHAqcCsxKS1wKTtpPShtLWYpL2lwLG49ZnVuY3Rpb24odCl7dmFyIGU9dCppLG49cnAoZikscz1hLygyKmgpKihuKihmdW5jdGlvbiB1KHQpe3JldHVybigodD1NYXRoLmV4cCgyKnQpKS0xKS8odCsxKX0pKGlwKmUrZiktKGZ1bmN0aW9uIGQodCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KShmKSk7cmV0dXJuW3IrcypsLG8rcypjLGEqbi9ycChpcCplK2YpXX19cmV0dXJuIG4uZHVyYXRpb249MWUzKmksbn1mdW5jdGlvbiBhcCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgaT10KChlPSRoKGUpKS5oLChuPSRoKG4pKS5oKSxyPWtkKGUucyxuLnMpLG89a2QoZS5sLG4ubCksYT1rZChlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1pKHQpLGUucz1yKHQpLGUubD1vKHQpLGUub3BhY2l0eT1hKHQpLGUrIiJ9fX12YXIgc3A9YXAoQWQpLGxwPWFwKGtkKTtmdW5jdGlvbiBjcCh0LGUpe3ZhciBuPWtkKCh0PXNkKHQpKS5sLChlPXNkKGUpKS5sKSxpPWtkKHQuYSxlLmEpLHI9a2QodC5iLGUuYiksbz1rZCh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQubD1uKGUpLHQuYT1pKGUpLHQuYj1yKGUpLHQub3BhY2l0eT1vKGUpLHQrIiJ9fWZ1bmN0aW9uIHVwKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPXQoKGU9ZmQoZSkpLmgsKG49ZmQobikpLmgpLHI9a2QoZS5jLG4uYyksbz1rZChlLmwsbi5sKSxhPWtkKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPWkodCksZS5jPXIodCksZS5sPW8odCksZS5vcGFjaXR5PWEodCksZSsiIn19fXZhciBocD11cChBZCksZHA9dXAoa2QpO2Z1bmN0aW9uIHBwKHQpe3JldHVybihmdW5jdGlvbiBlKG4pe2Z1bmN0aW9uIGkoZSxpKXt2YXIgcj10KChlPXhkKGUpKS5oLChpPXhkKGkpKS5oKSxvPWtkKGUucyxpLnMpLGE9a2QoZS5sLGkubCkscz1rZChlLm9wYWNpdHksaS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1yKHQpLGUucz1vKHQpLGUubD1hKE1hdGgucG93KHQsbikpLGUub3BhY2l0eT1zKHQpLGUrIiJ9fXJldHVybiBuPStuLGkuZ2FtbWE9ZSxpfSkoMSl9dmFyIGZwLG1wLGdwPXBwKEFkKSxfcD1wcChrZCkseXA9MCx2cD0wLGJwPTAseHA9MCx3cD0wLFNwPTAsTXA9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsRXA9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gVHAoKXtyZXR1cm4gd3B8fChFcChDcCksd3A9TXAubm93KCkrU3ApfWZ1bmN0aW9uIENwKCl7d3A9MH1mdW5jdGlvbiBBcCgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24ga3AodCxlLG4pe3ZhciBpPW5ldyBBcDtyZXR1cm4gaS5yZXN0YXJ0KHQsZSxuKSxpfWZ1bmN0aW9uIExwKCl7VHAoKSwrK3lwO2Zvcih2YXIgdCxlPWZwO2U7KSh0PXdwLWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS15cH1mdW5jdGlvbiBQcCgpe3dwPSh4cD1NcC5ub3coKSkrU3AseXA9dnA9MDt0cnl7THAoKX1maW5hbGx5e3lwPTAsKGZ1bmN0aW9uIHQoKXtmb3IodmFyIHQsZSxuPWZwLGk9MS8wO247KW4uX2NhbGw/KGk+bi5fdGltZSYmKGk9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTpmcD1lKTttcD10LElwKGkpfSkoKSx3cD0wfX1mdW5jdGlvbiBOcCgpe3ZhciB0PU1wLm5vdygpLGU9dC14cDtlPjFlMyYmKFNwLT1lLHhwPXQpfWZ1bmN0aW9uIElwKHQpe3lwfHwodnAmJih2cD1jbGVhclRpbWVvdXQodnApKSx0LXdwPjI0Pyh0PDEvMCYmKHZwPXNldFRpbWVvdXQoUHAsdC1NcC5ub3coKS1TcCkpLGJwJiYoYnA9Y2xlYXJJbnRlcnZhbChicCkpKTooYnB8fCh4cD1NcC5ub3coKSxicD1zZXRJbnRlcnZhbChOcCwxZTMpKSx5cD0xLEVwKFBwKSkpfWZ1bmN0aW9uIFJwKHQsZSxuKXt2YXIgaT1uZXcgQXA7cmV0dXJuIGkucmVzdGFydCgoZnVuY3Rpb24obil7aS5zdG9wKCksdChuK2UpfSksZT1udWxsPT1lPzA6K2UsbiksaX1BcC5wcm90b3R5cGU9a3AucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpBcCxyZXN0YXJ0OmZ1bmN0aW9uKHQsZSxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/VHAoKTorbikrKG51bGw9PWU/MDorZSksdGhpcy5fbmV4dHx8bXA9PT10aGlzfHwobXA/bXAuX25leHQ9dGhpczpmcD10aGlzLG1wPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPW4sSXAoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsSXAoKSl9fTt2YXIgT3A9bGMoInN0YXJ0IiwiZW5kIiwiY2FuY2VsIiwiaW50ZXJydXB0IiksenA9W107ZnVuY3Rpb24gRHAodCxlLG4saSxyLG8pe3ZhciBhPXQuX190cmFuc2l0aW9uO2lmKGEpe2lmKG4gaW4gYSlyZXR1cm59ZWxzZSB0Ll9fdHJhbnNpdGlvbj17fTshKGZ1bmN0aW9uIHModCxlLG4pe3ZhciBpLHI9dC5fX3RyYW5zaXRpb247ZnVuY3Rpb24gbyhsKXt2YXIgYyx1LGgsZDtpZigxIT09bi5zdGF0ZSlyZXR1cm4gcygpO2ZvcihjIGluIHIpaWYoKGQ9cltjXSkubmFtZT09PW4ubmFtZSl7aWYoMz09PWQuc3RhdGUpcmV0dXJuIFJwKG8pOzQ9PT1kLnN0YXRlPyhkLnN0YXRlPTYsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSByW2NdKTorYzxlJiYoZC5zdGF0ZT02LGQudGltZXIuc3RvcCgpLGQub24uY2FsbCgiY2FuY2VsIix0LHQuX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgcltjXSl9aWYoUnAoKGZ1bmN0aW9uKCl7Mz09PW4uc3RhdGUmJihuLnN0YXRlPTQsbi50aW1lci5yZXN0YXJ0KGEsbi5kZWxheSxuLnRpbWUpLGEobCkpfSkpLG4uc3RhdGU9MixuLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSwyPT09bi5zdGF0ZSl7Zm9yKG4uc3RhdGU9MyxpPW5ldyBBcnJheShoPW4udHdlZW4ubGVuZ3RoKSxjPTAsdT0tMTtjPGg7KytjKShkPW4udHdlZW5bY10udmFsdWUuY2FsbCh0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSkmJihpWysrdV09ZCk7aS5sZW5ndGg9dSsxfX1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgcj1lPG4uZHVyYXRpb24/bi5lYXNlLmNhbGwobnVsbCxlL24uZHVyYXRpb24pOihuLnRpbWVyLnJlc3RhcnQocyksbi5zdGF0ZT01LDEpLG89LTEsYT1pLmxlbmd0aDsrK288YTspaVtvXS5jYWxsKHQscik7NT09PW4uc3RhdGUmJihuLm9uLmNhbGwoImVuZCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkscygpKX1mdW5jdGlvbiBzKCl7Zm9yKHZhciBpIGluIG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxkZWxldGUgcltlXSxyKXJldHVybjtkZWxldGUgdC5fX3RyYW5zaXRpb259cltlXT1uLG4udGltZXI9a3AoKGZ1bmN0aW9uIGwodCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChvLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZvKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KSh0LG4se25hbWU6ZSxpbmRleDppLGdyb3VwOnIsb246T3AsdHdlZW46enAsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6MH0pfWZ1bmN0aW9uIEJwKHQsZSl7dmFyIG49RnAodCxlKTtpZihuLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiBIcCh0LGUpe3ZhciBuPUZwKHQsZSk7aWYobi5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBufWZ1bmN0aW9uIEZwKHQsZSl7dmFyIG49dC5fX3RyYW5zaXRpb247aWYoIW58fCEobj1uW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIG59ZnVuY3Rpb24gVnAodCxlKXt2YXIgbixpLHIsbz10Ll9fdHJhbnNpdGlvbixhPSEwO2lmKG8pe2ZvcihyIGluIGU9bnVsbD09ZT9udWxsOmUrIiIsbykobj1vW3JdKS5uYW1lPT09ZT8oaT1uLnN0YXRlPjImJm4uc3RhdGU8NSxuLnN0YXRlPTYsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKGk/ImludGVycnVwdCI6ImNhbmNlbCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIG9bcl0pOmE9ITE7YSYmZGVsZXRlIHQuX190cmFuc2l0aW9ufX1mdW5jdGlvbiBVcCh0LGUpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9SHAodGhpcyx0KSxvPXIudHdlZW47aWYobyE9PW4pZm9yKHZhciBhPTAscz0oaT1uPW8pLmxlbmd0aDthPHM7KythKWlmKGlbYV0ubmFtZT09PWUpeyhpPWkuc2xpY2UoKSkuc3BsaWNlKGEsMSk7YnJlYWt9ci50d2Vlbj1pfX1mdW5jdGlvbiBqcCh0LGUsbil7dmFyIGkscjtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89SHAodGhpcyx0KSxhPW8udHdlZW47aWYoYSE9PWkpe3I9KGk9YSkuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6ZSx2YWx1ZTpufSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PWUpe3JbbF09czticmVha31sPT09YyYmci5wdXNoKHMpfW8udHdlZW49cn19ZnVuY3Rpb24gR3AodCxlLG4pe3ZhciBpPXQuX2lkO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9SHAodGhpcyxpKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtlXT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pKSxmdW5jdGlvbih0KXtyZXR1cm4gRnAodCxpKS52YWx1ZVtlXX19ZnVuY3Rpb24gV3AodCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP0JkOmUgaW5zdGFuY2VvZiBCaD9MZDoobj1CaChlKSk/KGU9bixMZCk6VWQpKHQsZSl9ZnVuY3Rpb24gcXAodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIFlwKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gWHAodCxlLG4pe3ZhciBpLHIsbz1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3JldHVybiBhPT09bz9udWxsOmE9PT1pP3I6cj1lKGk9YSxuKX19ZnVuY3Rpb24gJHAodCxlLG4pe3ZhciBpLHIsbz1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gYT09PW8/bnVsbDphPT09aT9yOnI9ZShpPWEsbil9fWZ1bmN0aW9uIEtwKHQsZSxuKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscyxsPW4odGhpcyk7aWYobnVsbCE9bClyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT0ocz1sKyIiKT9udWxsOmE9PT1pJiZzPT09cj9vOihyPXMsbz1lKGk9YSxsKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIFpwKHQsZSxuKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscyxsPW4odGhpcyk7aWYobnVsbCE9bClyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCkpPT09KHM9bCsiIik/bnVsbDphPT09aSYmcz09PXI/bzoocj1zLG89ZShpPWEsbCkpO3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gSnAodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUodCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIFFwKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gdGYodCxlKXt2YXIgbixpO2Z1bmN0aW9uIHIoKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PWkmJihuPShpPXIpJiZRcCh0LHIpKSxufXJldHVybiByLl92YWx1ZT1lLHJ9ZnVuY3Rpb24gZWYodCxlKXt2YXIgbixpO2Z1bmN0aW9uIHIoKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PWkmJihuPShpPXIpJiZKcCh0LHIpKSxufXJldHVybiByLl92YWx1ZT1lLHJ9ZnVuY3Rpb24gbmYodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtCcCh0aGlzLHQpLmRlbGF5PStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gcmYodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe0JwKHRoaXMsdCkuZGVsYXk9ZX19ZnVuY3Rpb24gb2YodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtIcCh0aGlzLHQpLmR1cmF0aW9uPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gYWYodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe0hwKHRoaXMsdCkuZHVyYXRpb249ZX19ZnVuY3Rpb24gc2YodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7SHAodGhpcyx0KS5lYXNlPWV9fWZ1bmN0aW9uIGxmKHQsZSxuKXt2YXIgaSxyLG89KGZ1bmN0aW9uIGEodCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeSgoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSkpfSkoZSk/QnA6SHA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLHQpLHM9YS5vbjtzIT09aSYmKHI9KGk9cykuY29weSgpKS5vbihlLG4pLGEub249cn19dmFyIGNmPXd1LnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiB1Zih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBoZih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLmNhbGwodGhpcyxpKSxuKX19ZnVuY3Rpb24gZGYodCxlLG4pe3ZhciBpLHI7ZnVuY3Rpb24gbygpe3ZhciBvPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09ciYmKGk9KHI9bykmJmhmKHQsbyxuKSksaX1yZXR1cm4gby5fdmFsdWU9ZSxvfWZ1bmN0aW9uIHBmKHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBmZih0KXt2YXIgZSxuO2Z1bmN0aW9uIGkoKXt2YXIgaT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PW4mJihlPShuPWkpJiZwZihpKSksZX1yZXR1cm4gaS5fdmFsdWU9dCxpfXZhciBtZj0wO2Z1bmN0aW9uIGdmKHQsZSxuLGkpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9aX1mdW5jdGlvbiBfZih0KXtyZXR1cm4gd3UoKS50cmFuc2l0aW9uKHQpfWZ1bmN0aW9uIHlmKCl7cmV0dXJuKyttZn12YXIgdmY9d3UucHJvdG90eXBlO2Z1bmN0aW9uIGJmKHQpe3JldHVybit0fWZ1bmN0aW9uIHhmKHQpe3JldHVybiB0KnR9ZnVuY3Rpb24gd2YodCl7cmV0dXJuIHQqKDItdCl9ZnVuY3Rpb24gU2YodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQ6LS10KigyLXQpKzEpLzJ9ZnVuY3Rpb24gTWYodCl7cmV0dXJuIHQqdCp0fWZ1bmN0aW9uIEVmKHQpe3JldHVybi0tdCp0KnQrMX1mdW5jdGlvbiBUZih0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn1nZi5wcm90b3R5cGU9X2YucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpnZixzZWxlY3Q6ZnVuY3Rpb24gQ2YodCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1iYyh0KSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWZvcih2YXIgcyxsLGM9aVthXSx1PWMubGVuZ3RoLGg9b1thXT1uZXcgQXJyYXkodSksZD0wO2Q8dTsrK2QpKHM9Y1tkXSkmJihsPXQuY2FsbChzLHMuX19kYXRhX18sZCxjKSkmJigiX19kYXRhX18iaW4gcyYmKGwuX19kYXRhX189cy5fX2RhdGFfXyksaFtkXT1sLERwKGhbZF0sZSxuLGQsaCxGcChzLG4pKSk7cmV0dXJuIG5ldyBnZihvLHRoaXMuX3BhcmVudHMsZSxuKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIEFmKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9d2ModCkpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8cjsrK3MpZm9yKHZhciBsLGM9aVtzXSx1PWMubGVuZ3RoLGg9MDtoPHU7KytoKWlmKGw9Y1toXSl7Zm9yKHZhciBkLHA9dC5jYWxsKGwsbC5fX2RhdGFfXyxoLGMpLGY9RnAobCxuKSxtPTAsZz1wLmxlbmd0aDttPGc7KyttKShkPXBbbV0pJiZEcChkLGUsbixtLHAsZik7by5wdXNoKHApLGEucHVzaChsKX1yZXR1cm4gbmV3IGdmKG8sYSxlLG4pfSxmaWx0ZXI6ZnVuY3Rpb24ga2YodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVNjKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZm9yKHZhciBvLGE9ZVtyXSxzPWEubGVuZ3RoLGw9aVtyXT1bXSxjPTA7YzxzOysrYykobz1hW2NdKSYmdC5jYWxsKG8sby5fX2RhdGFfXyxjLGEpJiZsLnB1c2gobyk7cmV0dXJuIG5ldyBnZihpLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uIExmKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMsaT1lLmxlbmd0aCxyPU1hdGgubWluKGksbi5sZW5ndGgpLG89bmV3IEFycmF5KGkpLGE9MDthPHI7KythKWZvcih2YXIgcyxsPWVbYV0sYz1uW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxkPTA7ZDx1OysrZCkocz1sW2RdfHxjW2RdKSYmKGhbZF09cyk7Zm9yKDthPGk7KythKW9bYV09ZVthXTtyZXR1cm4gbmV3IGdmKG8sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uIFBmKCl7cmV0dXJuIG5ldyBjZih0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24gTmYoKXtmb3IodmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkLG49eWYoKSxpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgYSxzPWlbb10sbD1zLmxlbmd0aCxjPTA7YzxsOysrYylpZihhPXNbY10pe3ZhciB1PUZwKGEsZSk7RHAoYSx0LG4sYyxzLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyBnZihpLHRoaXMuX3BhcmVudHMsdCxuKX0sY2FsbDp2Zi5jYWxsLG5vZGVzOnZmLm5vZGVzLG5vZGU6dmYubm9kZSxzaXplOnZmLnNpemUsZW1wdHk6dmYuZW1wdHksZWFjaDp2Zi5lYWNoLG9uOmZ1bmN0aW9uIElmKHQsZSl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9GcCh0aGlzLm5vZGUoKSxuKS5vbi5vbih0KTp0aGlzLmVhY2gobGYobix0LGUpKX0sYXR0cjpmdW5jdGlvbiBSZih0LGUpe3ZhciBuPW1jKHQpLGk9InRyYW5zZm9ybSI9PT1uP2VwOldwO3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlPyhuLmxvY2FsP1pwOktwKShuLGksR3AodGhpcywiYXR0ci4iK3QsZSkpOm51bGw9PWU/KG4ubG9jYWw/WXA6cXApKG4pOihuLmxvY2FsPyRwOlhwKShuLGksZSkpfSxhdHRyVHdlZW46ZnVuY3Rpb24gT2YodCxlKXt2YXIgbj0iYXR0ci4iK3Q7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3ZhciBpPW1jKHQpO3JldHVybiB0aGlzLnR3ZWVuKG4sKGkubG9jYWw/dGY6ZWYpKGksZSkpfSxzdHlsZTpmdW5jdGlvbiB6Zih0LGUsbil7dmFyIGk9InRyYW5zZm9ybSI9PSh0Kz0iIik/UWQ6V3A7cmV0dXJuIG51bGw9PWU/dGhpcy5zdHlsZVR3ZWVuKHQsKGZ1bmN0aW9uIHIodCxlKXt2YXIgbixpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89SGModGhpcyx0KSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLEhjKHRoaXMsdCkpO3JldHVybiBvPT09YT9udWxsOm89PT1uJiZhPT09aT9yOnI9ZShuPW8saT1hKX19KSh0LGkpKS5vbigiZW5kLnN0eWxlLiIrdCx1Zih0KSk6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dGhpcy5zdHlsZVR3ZWVuKHQsKGZ1bmN0aW9uIGEodCxlLG4pe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1IYyh0aGlzLHQpLHM9bih0aGlzKSxsPXMrIiI7cmV0dXJuIG51bGw9PXMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGw9cz1IYyh0aGlzLHQpKSxhPT09bD9udWxsOmE9PT1pJiZsPT09cj9vOihyPWwsbz1lKGk9YSxzKSl9fSkodCxpLEdwKHRoaXMsInN0eWxlLiIrdCxlKSkpLmVhY2goKGZ1bmN0aW9uIG8odCxlKXt2YXIgbixpLHIsbyxhPSJzdHlsZS4iK2Uscz0iZW5kLiIrYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1IcCh0aGlzLHQpLGM9bC5vbix1PW51bGw9PWwudmFsdWVbYV0/b3x8KG89dWYoZSkpOnZvaWQgMDtjPT09biYmcj09PXV8fChpPShuPWMpLmNvcHkoKSkub24ocyxyPXUpLGwub249aX19KSh0aGlzLl9pZCx0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsKGZ1bmN0aW9uIHModCxlLG4pe3ZhciBpLHIsbz1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPUhjKHRoaXMsdCk7cmV0dXJuIGE9PT1vP251bGw6YT09PWk/cjpyPWUoaT1hLG4pfX0pKHQsaSxlKSxuKS5vbigiZW5kLnN0eWxlLiIrdCxudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbiBEZih0LGUsbil7dmFyIGk9InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGk9dGhpcy50d2VlbihpKSkmJmkuX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4oaSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oaSxkZih0LGUsbnVsbD09bj8iIjpuKSl9LHRleHQ6ZnVuY3Rpb24gQmYodCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0PyhmdW5jdGlvbiBlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fSkoR3AodGhpcywidGV4dCIsdCkpOihmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KShudWxsPT10PyIiOnQrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uIEhmKHQpe3ZhciBlPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZSxmZih0KSl9LHJlbW92ZTpmdW5jdGlvbiBGZigpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBuIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtuIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19KSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbiBWZih0LGUpe3ZhciBuPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBpLHI9RnAodGhpcy5ub2RlKCksbikudHdlZW4sbz0wLGE9ci5sZW5ndGg7bzxhOysrbylpZigoaT1yW29dKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP1VwOmpwKShuLHQsZSkpfSxkZWxheTpmdW5jdGlvbiBVZih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P25mOnJmKShlLHQpKTpGcCh0aGlzLm5vZGUoKSxlKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24gamYodCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9vZjphZikoZSx0KSk6RnAodGhpcy5ub2RlKCksZSkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24gR2YodCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHNmKGUsdCkpOkZwKHRoaXMubm9kZSgpLGUpLmVhc2V9LGVuZDpmdW5jdGlvbiBXZigpe3ZhciB0LGUsbj10aGlzLGk9bi5faWQscj1uLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG8sYSl7dmFyIHM9e3ZhbHVlOmF9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1yJiZvKCl9fTtuLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG49SHAodGhpcyxpKSxyPW4ub247ciE9PXQmJigoZT0odD1yKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2gocyksZS5fLmludGVycnVwdC5wdXNoKHMpLGUuXy5lbmQucHVzaChsKSksbi5vbj1lfSkpfSkpfX07dmFyIHFmPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIE1hdGgucG93KHQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KSgzKSxZZj0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxLU1hdGgucG93KDEtdCxlKX1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0pKDMpLFhmPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdyh0LGUpOjItTWF0aC5wb3coMi10LGUpKS8yfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSkoMyksJGY9TWF0aC5QSSxLZj0kZi8yO2Z1bmN0aW9uIFpmKHQpe3JldHVybiAxPT0rdD8xOjEtTWF0aC5jb3ModCpLZil9ZnVuY3Rpb24gSmYodCl7cmV0dXJuIE1hdGguc2luKHQqS2YpfWZ1bmN0aW9uIFFmKHQpe3JldHVybigxLU1hdGguY29zKCRmKnQpKS8yfWZ1bmN0aW9uIHRtKHQpe3JldHVybiAxLjAwMDk3NzUxNzEwNjU0OTQqKE1hdGgucG93KDIsLTEwKnQpLS4wMDA5NzY1NjI1KX1mdW5jdGlvbiBlbSh0KXtyZXR1cm4gdG0oMS0rdCl9ZnVuY3Rpb24gbm0odCl7cmV0dXJuIDEtdG0odCl9ZnVuY3Rpb24gaW0odCl7cmV0dXJuKCh0Kj0yKTw9MT90bSgxLXQpOjItdG0odC0xKSkvMn1mdW5jdGlvbiBybSh0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfWZ1bmN0aW9uIG9tKHQpe3JldHVybiBNYXRoLnNxcnQoMS0gLS10KnQpfWZ1bmN0aW9uIGFtKHQpe3JldHVybigodCo9Mik8PTE/MS1NYXRoLnNxcnQoMS10KnQpOk1hdGguc3FydCgxLSh0LT0yKSp0KSsxKS8yfXZhciBzbT03LjU2MjU7ZnVuY3Rpb24gbG0odCl7cmV0dXJuIDEtY20oMS10KX1mdW5jdGlvbiBjbSh0KXtyZXR1cm4odD0rdCk8LjM2MzYzNjM2MzYzNjM2MzY1P3NtKnQqdDp0PC43MjcyNzI3MjcyNzI3MjczP3NtKih0LT0uNTQ1NDU0NTQ1NDU0NTQ1NCkqdCsuNzU6dDwuOTA5MDkwOTA5MDkwOTA5MT9zbSoodC09LjgxODE4MTgxODE4MTgxODIpKnQrLjkzNzU6c20qKHQtPS45NTQ1NDU0NTQ1NDU0NTQ2KSp0Ky45ODQzNzV9ZnVuY3Rpb24gdW0odCl7cmV0dXJuKCh0Kj0yKTw9MT8xLWNtKDEtdCk6Y20odC0xKSsxKS8yfXZhciBobT0xLjcwMTU4LGRtPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuKHQ9K3QpKnQqKGUqKHQtMSkrdCl9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSkoaG0pLHBtPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuLS10KnQqKCh0KzEpKmUrdCkrMX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KShobSksZm09KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPDE/dCp0KigoZSsxKSp0LWUpOih0LT0yKSp0KigoZSsxKSp0K2UpKzIpLzJ9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSkoaG0pLG1tPTIqTWF0aC5QSSxnbT0oZnVuY3Rpb24gdChlLG4pe3ZhciBpPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89bW0pO2Z1bmN0aW9uIHIodCl7cmV0dXJuIGUqdG0oLSAtLXQpKk1hdGguc2luKChpLXQpL24pfXJldHVybiByLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qbW0pfSxyLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxyfSkoMSwuMyksX209KGZ1bmN0aW9uIHQoZSxuKXt2YXIgaT1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPW1tKTtmdW5jdGlvbiByKHQpe3JldHVybiAxLWUqdG0odD0rdCkqTWF0aC5zaW4oKHQraSkvbil9cmV0dXJuIHIuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbiptbSl9LHIucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LHJ9KSgxLC4zKSx5bT0oZnVuY3Rpb24gdChlLG4pe3ZhciBpPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89bW0pO2Z1bmN0aW9uIHIodCl7cmV0dXJuKCh0PTIqdC0xKTwwP2UqdG0oLXQpKk1hdGguc2luKChpLXQpL24pOjItZSp0bSh0KSpNYXRoLnNpbigoaSt0KS9uKSkvMn1yZXR1cm4gci5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKm1tKX0sci5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0scn0pKDEsLjMpLHZtPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGVhc2VMaW5lYXI6YmYsZWFzZVF1YWQ6U2YsZWFzZVF1YWRJbjp4ZixlYXNlUXVhZE91dDp3ZixlYXNlUXVhZEluT3V0OlNmLGVhc2VDdWJpYzpUZixlYXNlQ3ViaWNJbjpNZixlYXNlQ3ViaWNPdXQ6RWYsZWFzZUN1YmljSW5PdXQ6VGYsZWFzZVBvbHk6WGYsZWFzZVBvbHlJbjpxZixlYXNlUG9seU91dDpZZixlYXNlUG9seUluT3V0OlhmLGVhc2VTaW46UWYsZWFzZVNpbkluOlpmLGVhc2VTaW5PdXQ6SmYsZWFzZVNpbkluT3V0OlFmLGVhc2VFeHA6aW0sZWFzZUV4cEluOmVtLGVhc2VFeHBPdXQ6bm0sZWFzZUV4cEluT3V0OmltLGVhc2VDaXJjbGU6YW0sZWFzZUNpcmNsZUluOnJtLGVhc2VDaXJjbGVPdXQ6b20sZWFzZUNpcmNsZUluT3V0OmFtLGVhc2VCb3VuY2U6Y20sZWFzZUJvdW5jZUluOmxtLGVhc2VCb3VuY2VPdXQ6Y20sZWFzZUJvdW5jZUluT3V0OnVtLGVhc2VCYWNrOmZtLGVhc2VCYWNrSW46ZG0sZWFzZUJhY2tPdXQ6cG0sZWFzZUJhY2tJbk91dDpmbSxlYXNlRWxhc3RpYzpfbSxlYXNlRWxhc3RpY0luOmdtLGVhc2VFbGFzdGljT3V0Ol9tLGVhc2VFbGFzdGljSW5PdXQ6eW19KSxibT17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6VGZ9O2Z1bmN0aW9uIHhtKHQsZSl7Zm9yKHZhciBuOyEobj10Ll9fdHJhbnNpdGlvbil8fCEobj1uW2VdKTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIGJtLnRpbWU9VHAoKSxibTtyZXR1cm4gbn13dS5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uIHdtKHQpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7VnAodGhpcyx0KX0pKX0sd3UucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rpb24gU20odCl7dmFyIGUsbjt0IGluc3RhbmNlb2YgZ2Y/KGU9dC5faWQsdD10Ll9uYW1lKTooZT15ZigpLChuPWJtKS50aW1lPVRwKCksdD1udWxsPT10P251bGw6dCsiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgYSxzPWlbb10sbD1zLmxlbmd0aCxjPTA7YzxsOysrYykoYT1zW2NdKSYmRHAoYSx0LGUsYyxzLG58fHhtKGEsZSkpO3JldHVybiBuZXcgZ2YoaSx0aGlzLl9wYXJlbnRzLHQsZSl9O3ZhciBNbT1bbnVsbF07ZnVuY3Rpb24gRW0odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIFRtKHQsZSxuKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMuc2VsZWN0aW9uPW59ZnVuY3Rpb24gQ20oKXt1dS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBBbSgpe3V1LnByZXZlbnREZWZhdWx0KCksdXUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIGttPXtuYW1lOiJkcmFnIn0sTG09e25hbWU6InNwYWNlIn0sUG09e25hbWU6ImhhbmRsZSJ9LE5tPXtuYW1lOiJjZW50ZXIifTtmdW5jdGlvbiBJbSh0KXtyZXR1cm5bK3RbMF0sK3RbMV1dfWZ1bmN0aW9uIFJtKHQpe3JldHVybltJbSh0WzBdKSxJbSh0WzFdKV19ZnVuY3Rpb24gT20odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBsaChlLHV1LnRvdWNoZXMsdCl9fXZhciB6bT17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKEdtKSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P251bGw6W1srdFswXSxlWzBdWzFdXSxbK3RbMV0sZVsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfX0sRG09e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChHbSksaW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD9udWxsOltbZVswXVswXSwrdFswXV0sW2VbMV1bMF0sK3RbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVsxXSx0WzFdWzFdXX19LEJtPXtuYW1lOiJ4eSIsaGFuZGxlczpbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChHbSksaW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpSbSh0KX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sSG09e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LEZtPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxWbT17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sVW09e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0sam09e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX07ZnVuY3Rpb24gR20odCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gV20oKXtyZXR1cm4hdXUuY3RybEtleSYmIXV1LmJ1dHRvbn1mdW5jdGlvbiBxbSgpe3ZhciB0PXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgidmlld0JveCIpP1tbKHQ9dC52aWV3Qm94LmJhc2VWYWwpLngsdC55XSxbdC54K3Qud2lkdGgsdC55K3QuaGVpZ2h0XV06W1swLDBdLFt0LndpZHRoLmJhc2VWYWwudmFsdWUsdC5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIFltKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIFhtKHQpe2Zvcig7IXQuX19icnVzaDspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0Ll9fYnJ1c2h9ZnVuY3Rpb24gJG0odCl7cmV0dXJuIHRbMF1bMF09PT10WzFdWzBdfHx0WzBdWzFdPT09dFsxXVsxXX1mdW5jdGlvbiBLbSh0KXt2YXIgZT10Ll9fYnJ1c2g7cmV0dXJuIGU/ZS5kaW0ub3V0cHV0KGUuc2VsZWN0aW9uKTpudWxsfWZ1bmN0aW9uIFptKCl7cmV0dXJuIFFtKERtKX1mdW5jdGlvbiBKbSgpe3JldHVybiBRbShCbSl9ZnVuY3Rpb24gUW0odCl7dmFyIGUsbj1xbSxpPVdtLHI9WW0sbz0hMCxhPWxjKCJzdGFydCIsImJydXNoIiwiZW5kIikscz02O2Z1bmN0aW9uIGwoZSl7dmFyIG49ZS5wcm9wZXJ0eSgiX19icnVzaCIsbSkuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmRhdGEoW0dtKCJvdmVybGF5IildKTtuLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJvdmVybGF5IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKCJjdXJzb3IiLEhtLm92ZXJsYXkpLm1lcmdlKG4pLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9WG0odGhpcykuZXh0ZW50O1N1KHRoaXMpLmF0dHIoIngiLHRbMF1bMF0pLmF0dHIoInkiLHRbMF1bMV0pLmF0dHIoIndpZHRoIix0WzFdWzBdLXRbMF1bMF0pLmF0dHIoImhlaWdodCIsdFsxXVsxXS10WzBdWzFdKX0pKSxlLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW0dtKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLEhtLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciBpPWUuc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YSh0LmhhbmRsZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9KSk7aS5leGl0KCkucmVtb3ZlKCksaS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrdC50eXBlfSkpLmF0dHIoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiBIbVt0LnR5cGVdfSkpLGUuZWFjaChjKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikub24oIm1vdXNlZG93bi5icnVzaCIsZCkuZmlsdGVyKHIpLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixkKS5vbigidG91Y2htb3ZlLmJydXNoIixwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGYpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBjKCl7dmFyIHQ9U3UodGhpcyksZT1YbSh0aGlzKS5zZWxlY3Rpb247ZT8odC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZVswXVswXSkuYXR0cigieSIsZVswXVsxXSkuYXR0cigid2lkdGgiLGVbMV1bMF0tZVswXVswXSkuYXR0cigiaGVpZ2h0IixlWzFdWzFdLWVbMF1bMV0pLHQuc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9lWzFdWzBdLXMvMjplWzBdWzBdLXMvMn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuInMiPT09dC50eXBlWzBdP2VbMV1bMV0tcy8yOmVbMF1bMV0tcy8yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIm4iPT09dC50eXBlfHwicyI9PT10LnR5cGU/ZVsxXVswXS1lWzBdWzBdK3M6c30pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGV8fCJ3Ij09PXQudHlwZT9lWzFdWzFdLWVbMF1bMV0rczpzfSkpKTp0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiwuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCl9ZnVuY3Rpb24gdSh0LGUsbil7dmFyIGk9dC5fX2JydXNoLmVtaXR0ZXI7cmV0dXJuIWl8fG4mJmkuY2xlYW4/bmV3IGgodCxlLG4pOml9ZnVuY3Rpb24gaCh0LGUsbil7dGhpcy50aGF0PXQsdGhpcy5hcmdzPWUsdGhpcy5zdGF0ZT10Ll9fYnJ1c2gsdGhpcy5hY3RpdmU9MCx0aGlzLmNsZWFuPW59ZnVuY3Rpb24gZCgpe2lmKCghZXx8dXUudG91Y2hlcykmJmkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbixyLGEscyxsLGgsZCxwLGYsbSxnLF89dGhpcyx5PXV1LnRhcmdldC5fX2RhdGFfXy50eXBlLHY9InNlbGVjdGlvbiI9PT0obyYmdXUubWV0YUtleT95PSJvdmVybGF5Ijp5KT9rbTpvJiZ1dS5hbHRLZXk/Tm06UG0sYj10PT09RG0/bnVsbDpVbVt5XSx4PXQ9PT16bT9udWxsOmptW3ldLHc9WG0oXyksUz13LmV4dGVudCxNPXcuc2VsZWN0aW9uLEU9U1swXVswXSxUPVNbMF1bMV0sQz1TWzFdWzBdLEE9U1sxXVsxXSxrPTAsTD0wLFA9YiYmeCYmbyYmdXUuc2hpZnRLZXksTj11dS50b3VjaGVzP09tKHV1LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIpOmFoLEk9TihfKSxSPUksTz11KF8sYXJndW1lbnRzLCEwKS5iZWZvcmVzdGFydCgpOyJvdmVybGF5Ij09PXk/KE0mJihmPSEwKSx3LnNlbGVjdGlvbj1NPVtbbj10PT09RG0/RTpJWzBdLGE9dD09PXptP1Q6SVsxXV0sW2w9dD09PURtP0M6bixkPXQ9PT16bT9BOmFdXSk6KG49TVswXVswXSxhPU1bMF1bMV0sbD1NWzFdWzBdLGQ9TVsxXVsxXSkscj1uLHM9YSxoPWwscD1kO3ZhciB6PVN1KF8pLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEQ9ei5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixIbVt5XSk7aWYodXUudG91Y2hlcylPLm1vdmVkPUgsTy5lbmRlZD1WO2Vsc2V7dmFyIEI9U3UodXUudmlldykub24oIm1vdXNlbW92ZS5icnVzaCIsSCwhMCkub24oIm1vdXNldXAuYnJ1c2giLFYsITApO28mJkIub24oImtleWRvd24uYnJ1c2giLFUsITApLm9uKCJrZXl1cC5icnVzaCIsaiwhMCksaGgodXUudmlldyl9Q20oKSxWcChfKSxjLmNhbGwoXyksTy5zdGFydCgpfWZ1bmN0aW9uIEgoKXt2YXIgdD1OKF8pOyFQfHxtfHxnfHwoTWF0aC5hYnModFswXS1SWzBdKT5NYXRoLmFicyh0WzFdLVJbMV0pP2c9ITA6bT0hMCksUj10LGY9ITAsQW0oKSxGKCl9ZnVuY3Rpb24gRigpe3ZhciB0O3N3aXRjaChrPVJbMF0tSVswXSxMPVJbMV0tSVsxXSx2KXtjYXNlIExtOmNhc2Uga206YiYmKGs9TWF0aC5tYXgoRS1uLE1hdGgubWluKEMtbCxrKSkscj1uK2ssaD1sK2spLHgmJihMPU1hdGgubWF4KFQtYSxNYXRoLm1pbihBLWQsTCkpLHM9YStMLHA9ZCtMKTticmVhaztjYXNlIFBtOmI8MD8oaz1NYXRoLm1heChFLW4sTWF0aC5taW4oQy1uLGspKSxyPW4rayxoPWwpOmI+MCYmKGs9TWF0aC5tYXgoRS1sLE1hdGgubWluKEMtbCxrKSkscj1uLGg9bCtrKSx4PDA/KEw9TWF0aC5tYXgoVC1hLE1hdGgubWluKEEtYSxMKSkscz1hK0wscD1kKTp4PjAmJihMPU1hdGgubWF4KFQtZCxNYXRoLm1pbihBLWQsTCkpLHM9YSxwPWQrTCk7YnJlYWs7Y2FzZSBObTpiJiYocj1NYXRoLm1heChFLE1hdGgubWluKEMsbi1rKmIpKSxoPU1hdGgubWF4KEUsTWF0aC5taW4oQyxsK2sqYikpKSx4JiYocz1NYXRoLm1heChULE1hdGgubWluKEEsYS1MKngpKSxwPU1hdGgubWF4KFQsTWF0aC5taW4oQSxkK0wqeCkpKX1oPHImJihiKj0tMSx0PW4sbj1sLGw9dCx0PXIscj1oLGg9dCx5IGluIEZtJiZELmF0dHIoImN1cnNvciIsSG1beT1GbVt5XV0pKSxwPHMmJih4Kj0tMSx0PWEsYT1kLGQ9dCx0PXMscz1wLHA9dCx5IGluIFZtJiZELmF0dHIoImN1cnNvciIsSG1beT1WbVt5XV0pKSx3LnNlbGVjdGlvbiYmKE09dy5zZWxlY3Rpb24pLG0mJihyPU1bMF1bMF0saD1NWzFdWzBdKSxnJiYocz1NWzBdWzFdLHA9TVsxXVsxXSksTVswXVswXT09PXImJk1bMF1bMV09PT1zJiZNWzFdWzBdPT09aCYmTVsxXVsxXT09PXB8fCh3LnNlbGVjdGlvbj1bW3Isc10sW2gscF1dLGMuY2FsbChfKSxPLmJydXNoKCkpfWZ1bmN0aW9uIFYoKXtpZihDbSgpLHV1LnRvdWNoZXMpe2lmKHV1LnRvdWNoZXMubGVuZ3RoKXJldHVybjtlJiZjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2U9bnVsbH0pLDUwMCl9ZWxzZSBkaCh1dS52aWV3LGYpLEIub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO3ouYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKSxELmF0dHIoImN1cnNvciIsSG0ub3ZlcmxheSksdy5zZWxlY3Rpb24mJihNPXcuc2VsZWN0aW9uKSwkbShNKSYmKHcuc2VsZWN0aW9uPW51bGwsYy5jYWxsKF8pKSxPLmVuZCgpfWZ1bmN0aW9uIFUoKXtzd2l0Y2godXUua2V5Q29kZSl7Y2FzZSAxNjpQPWImJng7YnJlYWs7Y2FzZSAxODp2PT09UG0mJihiJiYobD1oLWsqYixuPXIraypiKSx4JiYoZD1wLUwqeCxhPXMrTCp4KSx2PU5tLEYoKSk7YnJlYWs7Y2FzZSAzMjp2IT09UG0mJnYhPT1ObXx8KGI8MD9sPWgtazpiPjAmJihuPXItaykseDwwP2Q9cC1MOng+MCYmKGE9cy1MKSx2PUxtLEQuYXR0cigiY3Vyc29yIixIbS5zZWxlY3Rpb24pLEYoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59QW0oKX1mdW5jdGlvbiBqKCl7c3dpdGNoKHV1LmtleUNvZGUpe2Nhc2UgMTY6UCYmKG09Zz1QPSExLEYoKSk7YnJlYWs7Y2FzZSAxODp2PT09Tm0mJihiPDA/bD1oOmI+MCYmKG49cikseDwwP2Q9cDp4PjAmJihhPXMpLHY9UG0sRigpKTticmVhaztjYXNlIDMyOnY9PT1MbSYmKHV1LmFsdEtleT8oYiYmKGw9aC1rKmIsbj1yK2sqYikseCYmKGQ9cC1MKngsYT1zK0wqeCksdj1ObSk6KGI8MD9sPWg6Yj4wJiYobj1yKSx4PDA/ZD1wOng+MCYmKGE9cyksdj1QbSksRC5hdHRyKCJjdXJzb3IiLEhtW3ldKSxGKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufUFtKCl9fWZ1bmN0aW9uIHAoKXt1KHRoaXMsYXJndW1lbnRzKS5tb3ZlZCgpfWZ1bmN0aW9uIGYoKXt1KHRoaXMsYXJndW1lbnRzKS5lbmRlZCgpfWZ1bmN0aW9uIG0oKXt2YXIgZT10aGlzLl9fYnJ1c2h8fHtzZWxlY3Rpb246bnVsbH07cmV0dXJuIGUuZXh0ZW50PVJtKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxlLmRpbT10LGV9cmV0dXJuIGwubW92ZT1mdW5jdGlvbihlLG4pe2Uuc2VsZWN0aW9uP2Uub24oInN0YXJ0LmJydXNoIiwoZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLChmdW5jdGlvbigpe3UodGhpcyxhcmd1bWVudHMpLmVuZCgpfSkpLnR3ZWVuKCJicnVzaCIsKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxpPWUuX19icnVzaCxyPXUoZSxhcmd1bWVudHMpLG89aS5zZWxlY3Rpb24sYT10LmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4saS5leHRlbnQpLHM9amQobyxhKTtmdW5jdGlvbiBsKHQpe2kuc2VsZWN0aW9uPTE9PT10JiZudWxsPT09YT9udWxsOnModCksYy5jYWxsKGUpLHIuYnJ1c2goKX1yZXR1cm4gbnVsbCE9PW8mJm51bGwhPT1hP2w6bCgxKX0pKTplLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxpPWFyZ3VtZW50cyxyPWUuX19icnVzaCxvPXQuaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseShlLGkpOm4sci5leHRlbnQpLGE9dShlLGkpLmJlZm9yZXN0YXJ0KCk7VnAoZSksci5zZWxlY3Rpb249bnVsbD09PW8/bnVsbDpvLGMuY2FsbChlKSxhLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pKX0sbC5jbGVhcj1mdW5jdGlvbih0KXtsLm1vdmUodCxudWxsKX0saC5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nPyh0aGlzLnN0YXJ0aW5nPSExLHRoaXMuZW1pdCgic3RhcnQiKSk6dGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihlKXtndShuZXcgVG0obCxlLHQub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSksYS5hcHBseSxhLFtlLHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LGwuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RW0oUm0odCkpLGwpOm59LGwuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RW0oISF0KSxsKTppfSxsLnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkVtKCEhdCksbCk6cn0sbC5oYW5kbGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LGwpOnN9LGwua2V5TW9kaWZpZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEhdCxsKTpvfSxsLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9YS5vbi5hcHBseShhLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1hP2w6dH0sbH12YXIgdGc9TWF0aC5jb3MsZWc9TWF0aC5zaW4sbmc9TWF0aC5QSSxpZz1uZy8yLHJnPTIqbmcsb2c9TWF0aC5tYXg7ZnVuY3Rpb24gYWcodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZS5zb3VyY2UudmFsdWUrZS50YXJnZXQudmFsdWUsbi5zb3VyY2UudmFsdWUrbi50YXJnZXQudmFsdWUpfX12YXIgc2c9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIGxnKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgY2c9TWF0aC5QSSx1Zz0yKmNnLGhnPTFlLTYsZGc9dWctaGc7ZnVuY3Rpb24gcGcoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBmZygpe3JldHVybiBuZXcgcGd9ZnVuY3Rpb24gbWcodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIGdnKHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBfZyh0KXtyZXR1cm4gdC5yYWRpdXN9ZnVuY3Rpb24geWcodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiB2Zyh0KXtyZXR1cm4gdC5lbmRBbmdsZX1wZy5wcm90b3R5cGU9ZmcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpwZyxtb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MT0rZSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5fKz0iUSIrICt0KyIsIisgK2UrIiwiKyh0aGlzLl94MT0rbikrIiwiKyh0aGlzLl95MT0raSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4saSxyLG8pe3RoaXMuXys9IkMiKyArdCsiLCIrICtlKyIsIisgK24rIiwiKyAraSsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStvKX0sYXJjVG86ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9KG49K24pLSh0PSt0KSxsPShpPStpKS0oZT0rZSksYz1vLXQsdT1hLWUsaD1jKmMrdSp1O2lmKChyPStyKTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3IpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGg+aGcpaWYoTWF0aC5hYnModSpzLWwqYyk+aGcmJnIpe3ZhciBkPW4tbyxwPWktYSxmPXMqcytsKmwsbT1kKmQrcCpwLGc9TWF0aC5zcXJ0KGYpLF89TWF0aC5zcXJ0KGgpLHk9cipNYXRoLnRhbigoY2ctTWF0aC5hY29zKChmK2gtbSkvKDIqZypfKSkpLzIpLHY9eS9fLGI9eS9nO01hdGguYWJzKHYtMSk+aGcmJih0aGlzLl8rPSJMIisodCt2KmMpKyIsIisoZSt2KnUpKSx0aGlzLl8rPSJBIityKyIsIityKyIsMCwwLCIrICsodSpkPmMqcCkrIiwiKyh0aGlzLl94MT10K2IqcykrIiwiKyh0aGlzLl95MT1lK2IqbCl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKX0sYXJjOmZ1bmN0aW9uKHQsZSxuLGkscixvKXt0PSt0LGU9K2Usbz0hIW87dmFyIGE9KG49K24pKk1hdGguY29zKGkpLHM9bipNYXRoLnNpbihpKSxsPXQrYSxjPWUrcyx1PTFebyxoPW8/aS1yOnItaTtpZihuPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrbik7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPmhnfHxNYXRoLmFicyh0aGlzLl95MS1jKT5oZykmJih0aGlzLl8rPSJMIitsKyIsIitjKSxuJiYoaDwwJiYoaD1oJXVnK3VnKSxoPmRnP3RoaXMuXys9IkEiK24rIiwiK24rIiwwLDEsIit1KyIsIisodC1hKSsiLCIrKGUtcykrIkEiK24rIiwiK24rIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPmhnJiYodGhpcy5fKz0iQSIrbisiLCIrbisiLDAsIisgKyhoPj1jZykrIiwiK3UrIiwiKyh0aGlzLl94MT10K24qTWF0aC5jb3MocikpKyIsIisodGhpcy5feTE9ZStuKk1hdGguc2luKHIpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsZSxuLGkpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArbisidiIrICtpKyJoIistbisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciBiZz0iJCI7ZnVuY3Rpb24geGcoKXt9ZnVuY3Rpb24gd2codCxlKXt2YXIgbj1uZXcgeGc7aWYodCBpbnN0YW5jZW9mIHhnKXQuZWFjaCgoZnVuY3Rpb24odCxlKXtuLnNldChlLHQpfSkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGkscj0tMSxvPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK3I8bzspbi5zZXQocix0W3JdKTtlbHNlIGZvcig7KytyPG87KW4uc2V0KGUoaT10W3JdLHIsdCksaSl9ZWxzZSBpZih0KWZvcih2YXIgYSBpbiB0KW4uc2V0KGEsdFthXSk7cmV0dXJuIG59ZnVuY3Rpb24gU2coKXtyZXR1cm57fX1mdW5jdGlvbiBNZyh0LGUsbil7dFtlXT1ufWZ1bmN0aW9uIEVnKCl7cmV0dXJuIHdnKCl9ZnVuY3Rpb24gVGcodCxlLG4pe3Quc2V0KGUsbil9ZnVuY3Rpb24gQ2coKXt9eGcucHJvdG90eXBlPXdnLnByb3RvdHlwZT17Y29uc3RydWN0b3I6eGcsaGFzOmZ1bmN0aW9uKHQpe3JldHVybiBiZyt0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1tiZyt0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbYmcrdF09ZSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9YmcrdDtyZXR1cm4gZSBpbiB0aGlzJiZkZWxldGUgdGhpc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09YmcmJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PWJnJiZ0LnB1c2goZS5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1iZyYmdC5wdXNoKHRoaXNbZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PWJnJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PWJnJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYodFswXT09PWJnKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1iZyYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTt2YXIgQWc9d2cucHJvdG90eXBlO2Z1bmN0aW9uIGtnKHQsZSl7dmFyIG49bmV3IENnO2lmKHQgaW5zdGFuY2VvZiBDZyl0LmVhY2goKGZ1bmN0aW9uKHQpe24uYWRkKHQpfSkpO2Vsc2UgaWYodCl7dmFyIGk9LTEscj10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytpPHI7KW4uYWRkKHRbaV0pO2Vsc2UgZm9yKDsrK2k8cjspbi5hZGQoZSh0W2ldLGksdCkpfXJldHVybiBufWZ1bmN0aW9uIExnKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaChuKTtyZXR1cm4gZX1DZy5wcm90b3R5cGU9a2cucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDZyxoYXM6QWcuaGFzLGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1tiZysodCs9IiIpXT10LHRoaXN9LHJlbW92ZTpBZy5yZW1vdmUsY2xlYXI6QWcuY2xlYXIsdmFsdWVzOkFnLmtleXMsc2l6ZTpBZy5zaXplLGVtcHR5OkFnLmVtcHR5LGVhY2g6QWcuZWFjaH07dmFyIFBnPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBOZyh0LGUpe3JldHVybiB0LWV9ZnVuY3Rpb24gSWcodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIFJnKHQsZSl7Zm9yKHZhciBuLGk9LTEscj1lLmxlbmd0aDsrK2k8cjspaWYobj1PZyh0LGVbaV0pKXJldHVybiBuO3JldHVybiAwfWZ1bmN0aW9uIE9nKHQsZSl7Zm9yKHZhciBuPWVbMF0saT1lWzFdLHI9LTEsbz0wLGE9dC5sZW5ndGgscz1hLTE7bzxhO3M9bysrKXt2YXIgbD10W29dLGM9bFswXSx1PWxbMV0saD10W3NdLGQ9aFswXSxwPWhbMV07aWYoemcobCxoLGUpKXJldHVybiAwO3U+aSE9cD5pJiZuPChkLWMpKihpLXUpLyhwLXUpK2MmJihyPS1yKX1yZXR1cm4gcn1mdW5jdGlvbiB6Zyh0LGUsbil7dmFyIGk7cmV0dXJuKGZ1bmN0aW9uIHIodCxlLG4pe3JldHVybihlWzBdLXRbMF0pKihuWzFdLXRbMV0pPT0oblswXS10WzBdKSooZVsxXS10WzFdKX0pKHQsZSxuKSYmKGZ1bmN0aW9uIG8odCxlLG4pe3JldHVybiB0PD1lJiZlPD1ufHxuPD1lJiZlPD10fSkodFtpPSsodFswXT09PWVbMF0pXSxuW2ldLGVbaV0pfWZ1bmN0aW9uIERnKCl7fXZhciBCZz1bW10sW1tbMSwxLjVdLFsuNSwxXV1dLFtbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsuNSwxXV1dLFtbWzEsLjVdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWy41LDFdXSxbWzEsLjVdLFsxLjUsMV1dXSxbW1sxLC41XSxbMSwxLjVdXV0sW1tbMSwuNV0sWy41LDFdXV0sW1tbLjUsMV0sWzEsLjVdXV0sW1tbMSwxLjVdLFsxLC41XV1dLFtbWy41LDFdLFsxLC41XV0sW1sxLjUsMV0sWzEsMS41XV1dLFtbWzEuNSwxXSxbMSwuNV1dXSxbW1suNSwxXSxbMS41LDFdXV0sW1tbMSwxLjVdLFsxLjUsMV1dXSxbW1suNSwxXSxbMSwxLjVdXV0sW11dO2Z1bmN0aW9uIEhnKCl7dmFyIHQ9MSxlPTEsbj1qbCxpPXM7ZnVuY3Rpb24gcih0KXt2YXIgZT1uKHQpO2lmKEFycmF5LmlzQXJyYXkoZSkpZT1lLnNsaWNlKCkuc29ydChOZyk7ZWxzZXt2YXIgaT1MbCh0KSxyPWlbMF0sYT1pWzFdO2U9VWwocixhLGUpLGU9emwoTWF0aC5mbG9vcihyL2UpKmUsTWF0aC5mbG9vcihhL2UpKmUsZSl9cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbyh0LGUpfSkpfWZ1bmN0aW9uIG8obixyKXt2YXIgbz1bXSxzPVtdO3JldHVybihmdW5jdGlvbiBsKG4saSxyKXt2YXIgbyxzLGwsYyx1LGg9bmV3IEFycmF5LGQ9bmV3IEFycmF5O2ZvcihvPXM9LTEsQmdbKGw9blswXT49aSk8PDFdLmZvckVhY2gocCk7KytvPHQtMTspQmdbbHwobD1uW28rMV0+PWkpPDwxXS5mb3JFYWNoKHApO2ZvcihCZ1tsPDwwXS5mb3JFYWNoKHApOysrczxlLTE7KXtmb3Iobz0tMSxCZ1sobD1uW3MqdCt0XT49aSk8PDF8KGM9bltzKnRdPj1pKTw8Ml0uZm9yRWFjaChwKTsrK288dC0xOyl1PWMsQmdbbHwobD1uW3MqdCt0K28rMV0+PWkpPDwxfChjPW5bcyp0K28rMV0+PWkpPDwyfHU8PDNdLmZvckVhY2gocCk7QmdbbHxjPDwzXS5mb3JFYWNoKHApfWZvcihvPS0xLEJnWyhjPW5bcyp0XT49aSk8PDJdLmZvckVhY2gocCk7KytvPHQtMTspdT1jLEJnWyhjPW5bcyp0K28rMV0+PWkpPDwyfHU8PDNdLmZvckVhY2gocCk7ZnVuY3Rpb24gcCh0KXt2YXIgZSxuLGk9W3RbMF1bMF0rbyx0WzBdWzFdK3NdLGw9W3RbMV1bMF0rbyx0WzFdWzFdK3NdLGM9YShpKSx1PWEobCk7KGU9ZFtjXSk/KG49aFt1XSk/KGRlbGV0ZSBkW2UuZW5kXSxkZWxldGUgaFtuLnN0YXJ0XSxlPT09bj8oZS5yaW5nLnB1c2gobCkscihlLnJpbmcpKTpoW2Uuc3RhcnRdPWRbbi5lbmRdPXtzdGFydDplLnN0YXJ0LGVuZDpuLmVuZCxyaW5nOmUucmluZy5jb25jYXQobi5yaW5nKX0pOihkZWxldGUgZFtlLmVuZF0sZS5yaW5nLnB1c2gobCksZFtlLmVuZD11XT1lKTooZT1oW3VdKT8obj1kW2NdKT8oZGVsZXRlIGhbZS5zdGFydF0sZGVsZXRlIGRbbi5lbmRdLGU9PT1uPyhlLnJpbmcucHVzaChsKSxyKGUucmluZykpOmhbbi5zdGFydF09ZFtlLmVuZF09e3N0YXJ0Om4uc3RhcnQsZW5kOmUuZW5kLHJpbmc6bi5yaW5nLmNvbmNhdChlLnJpbmcpfSk6KGRlbGV0ZSBoW2Uuc3RhcnRdLGUucmluZy51bnNoaWZ0KGkpLGhbZS5zdGFydD1jXT1lKTpoW2NdPWRbdV09e3N0YXJ0OmMsZW5kOnUscmluZzpbaSxsXX19QmdbYzw8M10uZm9yRWFjaChwKX0pKG4sciwoZnVuY3Rpb24odCl7aSh0LG4sciksKGZ1bmN0aW9uIGUodCl7Zm9yKHZhciBlPTAsbj10Lmxlbmd0aCxpPXRbbi0xXVsxXSp0WzBdWzBdLXRbbi0xXVswXSp0WzBdWzFdOysrZTxuOylpKz10W2UtMV1bMV0qdFtlXVswXS10W2UtMV1bMF0qdFtlXVsxXTtyZXR1cm4gaX0pKHQpPjA/by5wdXNoKFt0XSk6cy5wdXNoKHQpfSkpLHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49MCxpPW8ubGVuZ3RoO248aTsrK24paWYoLTEhPT1SZygoZT1vW25dKVswXSx0KSlyZXR1cm4gdm9pZCBlLnB1c2godCl9KSkse3R5cGU6Ik11bHRpUG9seWdvbiIsdmFsdWU6cixjb29yZGluYXRlczpvfX1mdW5jdGlvbiBhKGUpe3JldHVybiAyKmVbMF0rZVsxXSoodCsxKSo0fWZ1bmN0aW9uIHMobixpLHIpe24uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIG8sYT1uWzBdLHM9blsxXSxsPTB8YSxjPTB8cyx1PWlbYyp0K2xdO2E+MCYmYTx0JiZsPT09YSYmKG5bMF09YSsoci0obz1pW2MqdCtsLTFdKSkvKHUtbyktLjUpLHM+MCYmczxlJiZjPT09cyYmKG5bMV09cysoci0obz1pWyhjLTEpKnQrbF0pKS8odS1vKS0uNSl9KSl9cmV0dXJuIHIuY29udG91cj1vLHIuc2l6ZT1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bdCxlXTt2YXIgaT1NYXRoLmNlaWwoblswXSksbz1NYXRoLmNlaWwoblsxXSk7aWYoIShpPjAmJm8+MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gdD1pLGU9byxyfSxyLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP0lnKFBnLmNhbGwodCkpOklnKHQpLHIpOm59LHIuc21vb3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQ/czpEZyxyKTppPT09c30scn1mdW5jdGlvbiBGZyh0LGUsbil7Zm9yKHZhciBpPXQud2lkdGgscj10LmhlaWdodCxvPTErKG48PDEpLGE9MDthPHI7KythKWZvcih2YXIgcz0wLGw9MDtzPGkrbjsrK3MpczxpJiYobCs9dC5kYXRhW3MrYSppXSkscz49biYmKHM+PW8mJihsLT10LmRhdGFbcy1vK2EqaV0pLGUuZGF0YVtzLW4rYSppXT1sL01hdGgubWluKHMrMSxpLTErby1zLG8pKX1mdW5jdGlvbiBWZyh0LGUsbil7Zm9yKHZhciBpPXQud2lkdGgscj10LmhlaWdodCxvPTErKG48PDEpLGE9MDthPGk7KythKWZvcih2YXIgcz0wLGw9MDtzPHIrbjsrK3MpczxyJiYobCs9dC5kYXRhW2ErcyppXSkscz49biYmKHM+PW8mJihsLT10LmRhdGFbYSsocy1vKSppXSksZS5kYXRhW2ErKHMtbikqaV09bC9NYXRoLm1pbihzKzEsci0xK28tcyxvKSl9ZnVuY3Rpb24gVWcodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gamcodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gR2coKXtyZXR1cm4gMX12YXIgV2c9e30scWc9e307ZnVuY3Rpb24gWWcodCl7cmV0dXJuIG5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7Iit0Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK2UrJ10gfHwgIiInfSkpLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIFhnKHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobnVsbCksbj1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIGkgaW4gdClpIGluIGV8fG4ucHVzaChlW2ldPWkpfSkpLG59ZnVuY3Rpb24gJGcodCxlKXt2YXIgbj10KyIiLGk9bi5sZW5ndGg7cmV0dXJuIGk8ZT9uZXcgQXJyYXkoZS1pKzEpLmpvaW4oMCkrbjpufWZ1bmN0aW9uIEtnKHQpe3ZhciBlPW5ldyBSZWdFeHAoJ1siJyt0KyJcblxyXSIpLG49dC5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIGkodCxlKXt2YXIgaSxyPVtdLG89dC5sZW5ndGgsYT0wLHM9MCxsPW88PTAsYz0hMTtmdW5jdGlvbiB1KCl7aWYobClyZXR1cm4gcWc7aWYoYylyZXR1cm4gYz0hMSxXZzt2YXIgZSxpLHI9YTtpZigzND09PXQuY2hhckNvZGVBdChyKSl7Zm9yKDthKys8byYmMzQhPT10LmNoYXJDb2RlQXQoYSl8fDM0PT09dC5jaGFyQ29kZUF0KCsrYSk7KTtyZXR1cm4oZT1hKT49bz9sPSEwOjEwPT09KGk9dC5jaGFyQ29kZUF0KGErKykpP2M9ITA6MTM9PT1pJiYoYz0hMCwxMD09PXQuY2hhckNvZGVBdChhKSYmKythKSx0LnNsaWNlKHIrMSxlLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2E8bzspe2lmKDEwPT09KGk9dC5jaGFyQ29kZUF0KGU9YSsrKSkpYz0hMDtlbHNlIGlmKDEzPT09aSljPSEwLDEwPT09dC5jaGFyQ29kZUF0KGEpJiYrK2E7ZWxzZSBpZihpIT09biljb250aW51ZTtyZXR1cm4gdC5zbGljZShyLGUpfXJldHVybiBsPSEwLHQuc2xpY2UocixvKX1mb3IoMTA9PT10LmNoYXJDb2RlQXQoby0xKSYmLS1vLDEzPT09dC5jaGFyQ29kZUF0KG8tMSkmJi0tbzsoaT11KCkpIT09cWc7KXtmb3IodmFyIGg9W107aSE9PVdnJiZpIT09cWc7KWgucHVzaChpKSxpPXUoKTtlJiZudWxsPT0oaD1lKGgscysrKSl8fHIucHVzaChoKX1yZXR1cm4gcn1mdW5jdGlvbiByKGUsbil7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBhKGVbdF0pfSkpLmpvaW4odCl9KSl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZS5tYXAoYSkuam9pbih0KX1mdW5jdGlvbiBhKHQpe3JldHVybiBudWxsPT10PyIiOnQgaW5zdGFuY2VvZiBEYXRlPyhmdW5jdGlvbiBuKHQpe3ZhciBlPXQuZ2V0VVRDSG91cnMoKSxuPXQuZ2V0VVRDTWludXRlcygpLGk9dC5nZXRVVENTZWNvbmRzKCkscj10LmdldFVUQ01pbGxpc2Vjb25kcygpO3JldHVybiBpc05hTih0KT8iSW52YWxpZCBEYXRlIjooZnVuY3Rpb24gbyh0KXtyZXR1cm4gdDwwPyItIiskZygtdCw2KTp0Pjk5OTk/IisiKyRnKHQsNik6JGcodCw0KX0pKHQuZ2V0VVRDRnVsbFllYXIoKSkrIi0iKyRnKHQuZ2V0VVRDTW9udGgoKSsxLDIpKyItIiskZyh0LmdldFVUQ0RhdGUoKSwyKSsocj8iVCIrJGcoZSwyKSsiOiIrJGcobiwyKSsiOiIrJGcoaSwyKSsiLiIrJGcociwzKSsiWiI6aT8iVCIrJGcoZSwyKSsiOiIrJGcobiwyKSsiOiIrJGcoaSwyKSsiWiI6bnx8ZT8iVCIrJGcoZSwyKSsiOiIrJGcobiwyKSsiWiI6IiIpfSkodCk6ZS50ZXN0KHQrPSIiKT8nIicrdC5yZXBsYWNlKC8iL2csJyIiJykrJyInOnR9cmV0dXJue3BhcnNlOmZ1bmN0aW9uIHModCxlKXt2YXIgbixyLG89aSh0LChmdW5jdGlvbih0LGkpe2lmKG4pcmV0dXJuIG4odCxpLTEpO3I9dCxuPWU/KGZ1bmN0aW9uIG8odCxlKXt2YXIgbj1ZZyh0KTtyZXR1cm4gZnVuY3Rpb24oaSxyKXtyZXR1cm4gZShuKGkpLHIsdCl9fSkodCxlKTpZZyh0KX0pKTtyZXR1cm4gby5jb2x1bW5zPXJ8fFtdLG99LHBhcnNlUm93czppLGZvcm1hdDpmdW5jdGlvbiBsKGUsbil7cmV0dXJuIG51bGw9PW4mJihuPVhnKGUpKSxbbi5tYXAoYSkuam9pbih0KV0uY29uY2F0KHIoZSxuKSkuam9pbigiXG4iKX0sZm9ybWF0Qm9keTpmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIG51bGw9PWUmJihlPVhnKHQpKSxyKHQsZSkuam9pbigiXG4iKX0sZm9ybWF0Um93czpmdW5jdGlvbiB1KHQpe3JldHVybiB0Lm1hcChvKS5qb2luKCJcbiIpfSxmb3JtYXRSb3c6byxmb3JtYXRWYWx1ZTphfX12YXIgWmc9S2coIiwiKSxKZz1aZy5wYXJzZSxRZz1aZy5wYXJzZVJvd3MsdF89WmcuZm9ybWF0LGVfPVpnLmZvcm1hdEJvZHksbl89WmcuZm9ybWF0Um93cyxpXz1aZy5mb3JtYXRSb3cscl89WmcuZm9ybWF0VmFsdWUsb189S2coIlx0IiksYV89b18ucGFyc2Usc189b18ucGFyc2VSb3dzLGxfPW9fLmZvcm1hdCxjXz1vXy5mb3JtYXRCb2R5LHVfPW9fLmZvcm1hdFJvd3MsaF89b18uZm9ybWF0Um93LGRfPW9fLmZvcm1hdFZhbHVlLHBfPW5ldyBEYXRlKCIyMDE5LTAxLTAxVDAwOjAwIikuZ2V0SG91cnMoKXx8bmV3IERhdGUoIjIwMTktMDctMDFUMDA6MDAiKS5nZXRIb3VycygpO2Z1bmN0aW9uIGZfKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC5ibG9iKCl9ZnVuY3Rpb24gbV8odCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmFycmF5QnVmZmVyKCl9ZnVuY3Rpb24gZ18odCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LnRleHQoKX1mdW5jdGlvbiBfXyh0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4oZ18pfWZ1bmN0aW9uIHlfKHQpe3JldHVybiBmdW5jdGlvbihlLG4saSl7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKGk9bixuPXZvaWQgMCksX18oZSxuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gdChlLGkpfSkpfX12YXIgdl89eV8oSmcpLGJfPXlfKGFfKTtmdW5jdGlvbiB4Xyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7aWYoMjA0IT09dC5zdGF0dXMmJjIwNSE9PXQuc3RhdHVzKXJldHVybiB0Lmpzb24oKX1mdW5jdGlvbiB3Xyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gX18oZSxuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsdCl9KSl9fXZhciBTXz13XygiYXBwbGljYXRpb24veG1sIiksTV89d18oInRleHQvaHRtbCIpLEVfPXdfKCJpbWFnZS9zdmcreG1sIik7ZnVuY3Rpb24gVF8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIENfKCl7cmV0dXJuIDFlLTYqKE1hdGgucmFuZG9tKCktLjUpfWZ1bmN0aW9uIEFfKHQsZSxuLGkpe2lmKGlzTmFOKGUpfHxpc05hTihuKSlyZXR1cm4gdDt2YXIgcixvLGEscyxsLGMsdSxoLGQscD10Ll9yb290LGY9e2RhdGE6aX0sbT10Ll94MCxnPXQuX3kwLF89dC5feDEseT10Ll95MTtpZighcClyZXR1cm4gdC5fcm9vdD1mLHQ7Zm9yKDtwLmxlbmd0aDspaWYoKGM9ZT49KG89KG0rXykvMikpP209bzpfPW8sKHU9bj49KGE9KGcreSkvMikpP2c9YTp5PWEscj1wLCEocD1wW2g9dTw8MXxjXSkpcmV0dXJuIHJbaF09Zix0O2lmKHM9K3QuX3guY2FsbChudWxsLHAuZGF0YSksbD0rdC5feS5jYWxsKG51bGwscC5kYXRhKSxlPT09cyYmbj09PWwpcmV0dXJuIGYubmV4dD1wLHI/cltoXT1mOnQuX3Jvb3Q9Zix0O2Rve3I9cj9yW2hdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwoYz1lPj0obz0obStfKS8yKSk/bT1vOl89bywodT1uPj0oYT0oZyt5KS8yKSk/Zz1hOnk9YX13aGlsZSgoaD11PDwxfGMpPT0oZD0obD49YSk8PDF8cz49bykpO3JldHVybiByW2RdPXAscltoXT1mLHR9ZnVuY3Rpb24ga18odCxlLG4saSxyKXt0aGlzLm5vZGU9dCx0aGlzLngwPWUsdGhpcy55MD1uLHRoaXMueDE9aSx0aGlzLnkxPXJ9ZnVuY3Rpb24gTF8odCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gUF8odCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gTl8odCxlLG4pe3ZhciBpPW5ldyBJXyhudWxsPT1lP0xfOmUsbnVsbD09bj9QXzpuLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIG51bGw9PXQ/aTppLmFkZEFsbCh0KX1mdW5jdGlvbiBJXyh0LGUsbixpLHIsbyl7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl94MD1uLHRoaXMuX3kwPWksdGhpcy5feDE9cix0aGlzLl95MT1vLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIFJfKHQpe2Zvcih2YXIgZT17ZGF0YTp0LmRhdGF9LG49ZTt0PXQubmV4dDspbj1uLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gZX12YXIgT189Tl8ucHJvdG90eXBlPUlfLnByb3RvdHlwZTtmdW5jdGlvbiB6Xyh0KXtyZXR1cm4gdC54K3Qudnh9ZnVuY3Rpb24gRF8odCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIEJfKHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIEhfKHQsZSl7dmFyIG49dC5nZXQoZSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2UpO3JldHVybiBufWZ1bmN0aW9uIEZfKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gVl8odCl7cmV0dXJuIHQueX1PXy5jb3B5PWZ1bmN0aW9uKCl7dmFyIHQsZSxuPW5ldyBJXyh0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLGk9dGhpcy5fcm9vdDtpZighaSlyZXR1cm4gbjtpZighaS5sZW5ndGgpcmV0dXJuIG4uX3Jvb3Q9Ul8oaSksbjtmb3IodD1be3NvdXJjZTppLHRhcmdldDpuLl9yb290PW5ldyBBcnJheSg0KX1dO2k9dC5wb3AoKTspZm9yKHZhciByPTA7cjw0OysrcikoZT1pLnNvdXJjZVtyXSkmJihlLmxlbmd0aD90LnB1c2goe3NvdXJjZTplLHRhcmdldDppLnRhcmdldFtyXT1uZXcgQXJyYXkoNCl9KTppLnRhcmdldFtyXT1SXyhlKSk7cmV0dXJuIG59LE9fLmFkZD1mdW5jdGlvbiBVXyh0KXt2YXIgZT0rdGhpcy5feC5jYWxsKG51bGwsdCksbj0rdGhpcy5feS5jYWxsKG51bGwsdCk7cmV0dXJuIEFfKHRoaXMuY292ZXIoZSxuKSxlLG4sdCl9LE9fLmFkZEFsbD1mdW5jdGlvbiBqXyh0KXt2YXIgZSxuLGkscixvPXQubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9MS8wLGM9MS8wLHU9LTEvMCxoPS0xLzA7Zm9yKG49MDtuPG87KytuKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLGU9dFtuXSkpfHxpc05hTihyPSt0aGlzLl95LmNhbGwobnVsbCxlKSl8fChhW25dPWksc1tuXT1yLGk8bCYmKGw9aSksaT51JiYodT1pKSxyPGMmJihjPXIpLHI+aCYmKGg9cikpO2lmKGw+dXx8Yz5oKXJldHVybiB0aGlzO2Zvcih0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxuPTA7bjxvOysrbilBXyh0aGlzLGFbbl0sc1tuXSx0W25dKTtyZXR1cm4gdGhpc30sT18uY292ZXI9ZnVuY3Rpb24gR18odCxlKXtpZihpc05hTih0PSt0KXx8aXNOYU4oZT0rZSkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5feDAsaT10aGlzLl95MCxyPXRoaXMuX3gxLG89dGhpcy5feTE7aWYoaXNOYU4obikpcj0obj1NYXRoLmZsb29yKHQpKSsxLG89KGk9TWF0aC5mbG9vcihlKSkrMTtlbHNle2Zvcih2YXIgYSxzLGw9ci1uLGM9dGhpcy5fcm9vdDtuPnR8fHQ+PXJ8fGk+ZXx8ZT49bzspc3dpdGNoKHM9KGU8aSk8PDF8dDxuLChhPW5ldyBBcnJheSg0KSlbc109YyxjPWEsbCo9MixzKXtjYXNlIDA6cj1uK2wsbz1pK2w7YnJlYWs7Y2FzZSAxOm49ci1sLG89aStsO2JyZWFrO2Nhc2UgMjpyPW4rbCxpPW8tbDticmVhaztjYXNlIDM6bj1yLWwsaT1vLWx9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PWMpfXJldHVybiB0aGlzLl94MD1uLHRoaXMuX3kwPWksdGhpcy5feDE9cix0aGlzLl95MT1vLHRoaXN9LE9fLmRhdGE9ZnVuY3Rpb24gV18oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdCgoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRve3QucHVzaChlLmRhdGEpfXdoaWxlKGU9ZS5uZXh0KX0pKSx0fSxPXy5leHRlbnQ9ZnVuY3Rpb24gcV8odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrdFswXVswXSwrdFswXVsxXSkuY292ZXIoK3RbMV1bMF0sK3RbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19LE9fLmZpbmQ9ZnVuY3Rpb24gWV8odCxlLG4pe3ZhciBpLHIsbyxhLHMsbCxjLHU9dGhpcy5feDAsaD10aGlzLl95MCxkPXRoaXMuX3gxLHA9dGhpcy5feTEsZj1bXSxtPXRoaXMuX3Jvb3Q7Zm9yKG0mJmYucHVzaChuZXcga18obSx1LGgsZCxwKSksbnVsbD09bj9uPTEvMDoodT10LW4saD1lLW4sZD10K24scD1lK24sbio9bik7bD1mLnBvcCgpOylpZighKCEobT1sLm5vZGUpfHwocj1sLngwKT5kfHwobz1sLnkwKT5wfHwoYT1sLngxKTx1fHwocz1sLnkxKTxoKSlpZihtLmxlbmd0aCl7dmFyIGc9KHIrYSkvMixfPShvK3MpLzI7Zi5wdXNoKG5ldyBrXyhtWzNdLGcsXyxhLHMpLG5ldyBrXyhtWzJdLHIsXyxnLHMpLG5ldyBrXyhtWzFdLGcsbyxhLF8pLG5ldyBrXyhtWzBdLHIsbyxnLF8pKSwoYz0oZT49Xyk8PDF8dD49ZykmJihsPWZbZi5sZW5ndGgtMV0sZltmLmxlbmd0aC0xXT1mW2YubGVuZ3RoLTEtY10sZltmLmxlbmd0aC0xLWNdPWwpfWVsc2V7dmFyIHk9dC0rdGhpcy5feC5jYWxsKG51bGwsbS5kYXRhKSx2PWUtK3RoaXMuX3kuY2FsbChudWxsLG0uZGF0YSksYj15Knkrdip2O2lmKGI8bil7dmFyIHg9TWF0aC5zcXJ0KG49Yik7dT10LXgsaD1lLXgsZD10K3gscD1lK3gsaT1tLmRhdGF9fXJldHVybiBpfSxPXy5yZW1vdmU9ZnVuY3Rpb24gWF8odCl7aWYoaXNOYU4obz0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTihhPSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIGUsbixpLHIsbyxhLHMsbCxjLHUsaCxkLHA9dGhpcy5fcm9vdCxmPXRoaXMuX3gwLG09dGhpcy5feTAsZz10aGlzLl94MSxfPXRoaXMuX3kxO2lmKCFwKXJldHVybiB0aGlzO2lmKHAubGVuZ3RoKWZvcig7Oyl7aWYoKGM9bz49KHM9KGYrZykvMikpP2Y9czpnPXMsKHU9YT49KGw9KG0rXykvMikpP209bDpfPWwsZT1wLCEocD1wW2g9dTw8MXxjXSkpcmV0dXJuIHRoaXM7aWYoIXAubGVuZ3RoKWJyZWFrOyhlW2grMSYzXXx8ZVtoKzImM118fGVbaCszJjNdKSYmKG49ZSxkPWgpfWZvcig7cC5kYXRhIT09dDspaWYoaT1wLCEocD1wLm5leHQpKXJldHVybiB0aGlzO3JldHVybihyPXAubmV4dCkmJmRlbGV0ZSBwLm5leHQsaT8ocj9pLm5leHQ9cjpkZWxldGUgaS5uZXh0LHRoaXMpOmU/KHI/ZVtoXT1yOmRlbGV0ZSBlW2hdLChwPWVbMF18fGVbMV18fGVbMl18fGVbM10pJiZwPT09KGVbM118fGVbMl18fGVbMV18fGVbMF0pJiYhcC5sZW5ndGgmJihuP25bZF09cDp0aGlzLl9yb290PXApLHRoaXMpOih0aGlzLl9yb290PXIsdGhpcyl9LE9fLnJlbW92ZUFsbD1mdW5jdGlvbiAkXyh0KXtmb3IodmFyIGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpdGhpcy5yZW1vdmUodFtlXSk7cmV0dXJuIHRoaXN9LE9fLnJvb3Q9ZnVuY3Rpb24gS18oKXtyZXR1cm4gdGhpcy5fcm9vdH0sT18uc2l6ZT1mdW5jdGlvbiBaXygpe3ZhciB0PTA7cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3srK3R9d2hpbGUoZT1lLm5leHQpfSkpLHR9LE9fLnZpc2l0PWZ1bmN0aW9uIEpfKHQpe3ZhciBlLG4saSxyLG8sYSxzPVtdLGw9dGhpcy5fcm9vdDtmb3IobCYmcy5wdXNoKG5ldyBrXyhsLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1zLnBvcCgpOylpZighdChsPWUubm9kZSxpPWUueDAscj1lLnkwLG89ZS54MSxhPWUueTEpJiZsLmxlbmd0aCl7dmFyIGM9KGkrbykvMix1PShyK2EpLzI7KG49bFszXSkmJnMucHVzaChuZXcga18obixjLHUsbyxhKSksKG49bFsyXSkmJnMucHVzaChuZXcga18obixpLHUsYyxhKSksKG49bFsxXSkmJnMucHVzaChuZXcga18obixjLHIsbyx1KSksKG49bFswXSkmJnMucHVzaChuZXcga18obixpLHIsYyx1KSl9cmV0dXJuIHRoaXN9LE9fLnZpc2l0QWZ0ZXI9ZnVuY3Rpb24gUV8odCl7dmFyIGUsbj1bXSxpPVtdO2Zvcih0aGlzLl9yb290JiZuLnB1c2gobmV3IGtfKHRoaXMuX3Jvb3QsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPW4ucG9wKCk7KXt2YXIgcj1lLm5vZGU7aWYoci5sZW5ndGgpe3ZhciBvLGE9ZS54MCxzPWUueTAsbD1lLngxLGM9ZS55MSx1PShhK2wpLzIsaD0ocytjKS8yOyhvPXJbMF0pJiZuLnB1c2gobmV3IGtfKG8sYSxzLHUsaCkpLChvPXJbMV0pJiZuLnB1c2gobmV3IGtfKG8sdSxzLGwsaCkpLChvPXJbMl0pJiZuLnB1c2gobmV3IGtfKG8sYSxoLHUsYykpLChvPXJbM10pJiZuLnB1c2gobmV3IGtfKG8sdSxoLGwsYykpfWkucHVzaChlKX1mb3IoO2U9aS5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LE9fLng9ZnVuY3Rpb24gdHkodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9dCx0aGlzKTp0aGlzLl94fSxPXy55PWZ1bmN0aW9uIGV5KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX07dmFyIG55PU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKTtmdW5jdGlvbiBpeSh0LGUpe2lmKChuPSh0PWU/dC50b0V4cG9uZW50aWFsKGUtMSk6dC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgbixpPXQuc2xpY2UoMCxuKTtyZXR1cm5baS5sZW5ndGg+MT9pWzBdK2kuc2xpY2UoMik6aSwrdC5zbGljZShuKzEpXX1mdW5jdGlvbiByeSh0KXtyZXR1cm4odD1peShNYXRoLmFicyh0KSkpP3RbMV06TmFOfXZhciBveSxheT0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBzeSh0KXtpZighKGU9YXkuZXhlYyh0KSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIit0KTt2YXIgZTtyZXR1cm4gbmV3IGx5KHtmaWxsOmVbMV0sYWxpZ246ZVsyXSxzaWduOmVbM10sc3ltYm9sOmVbNF0semVybzplWzVdLHdpZHRoOmVbNl0sY29tbWE6ZVs3XSxwcmVjaXNpb246ZVs4XSYmZVs4XS5zbGljZSgxKSx0cmltOmVbOV0sdHlwZTplWzEwXX0pfWZ1bmN0aW9uIGx5KHQpe3RoaXMuZmlsbD12b2lkIDA9PT10LmZpbGw/IiAiOnQuZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PXQuYWxpZ24/Ij4iOnQuYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PXQuc2lnbj8iLSI6dC5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PXQuc3ltYm9sPyIiOnQuc3ltYm9sKyIiLHRoaXMuemVybz0hIXQuemVybyx0aGlzLndpZHRoPXZvaWQgMD09PXQud2lkdGg/dm9pZCAwOit0LndpZHRoLHRoaXMuY29tbWE9ISF0LmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PXQucHJlY2lzaW9uP3ZvaWQgMDordC5wcmVjaXNpb24sdGhpcy50cmltPSEhdC50cmltLHRoaXMudHlwZT12b2lkIDA9PT10LnR5cGU/IiI6dC50eXBlKyIifWZ1bmN0aW9uIGN5KHQsZSl7dmFyIG49aXkodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgaT1uWzBdLHI9blsxXTtyZXR1cm4gcjwwPyIwLiIrbmV3IEFycmF5KC1yKS5qb2luKCIwIikraTppLmxlbmd0aD5yKzE/aS5zbGljZSgwLHIrMSkrIi4iK2kuc2xpY2UocisxKTppK25ldyBBcnJheShyLWkubGVuZ3RoKzIpLmpvaW4oIjAiKX1zeS5wcm90b3R5cGU9bHkucHJvdG90eXBlLGx5LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O3ZhciB1eT17IiUiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKDEwMCp0KS50b0ZpeGVkKGUpfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKHQpe3JldHVybiB0KyIifSxkOmZ1bmN0aW9uIGh5KHQpe3JldHVybiBNYXRoLmFicyh0PU1hdGgucm91bmQodCkpPj0xZTIxP3QudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTp0LnRvU3RyaW5nKDEwKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRXhwb25lbnRpYWwoZSl9LGY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0ZpeGVkKGUpfSxnOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9QcmVjaXNpb24oZSl9LG86ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gY3koMTAwKnQsZSl9LHI6Y3ksczpmdW5jdGlvbiBkeSh0LGUpe3ZhciBuPWl5KHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIGk9blswXSxyPW5bMV0sbz1yLShveT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyLzMpKSkpKzEsYT1pLmxlbmd0aDtyZXR1cm4gbz09PWE/aTpvPmE/aStuZXcgQXJyYXkoby1hKzEpLmpvaW4oIjAiKTpvPjA/aS5zbGljZSgwLG8pKyIuIitpLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK2l5KHQsTWF0aC5tYXgoMCxlK28tMSkpWzBdfSxYOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIHB5KHQpe3JldHVybiB0fXZhciBmeSxteSxneSxfeT1BcnJheS5wcm90b3R5cGUubWFwLHl5PVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiwrUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTtmdW5jdGlvbiB2eSh0KXt2YXIgZT12b2lkIDA9PT10Lmdyb3VwaW5nfHx2b2lkIDA9PT10LnRob3VzYW5kcz9weTooZnVuY3Rpb24gbih0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2Zvcih2YXIgcj1uLmxlbmd0aCxvPVtdLGE9MCxzPXRbMF0sbD0wO3I+MCYmcz4wJiYobCtzKzE+aSYmKHM9TWF0aC5tYXgoMSxpLWwpKSxvLnB1c2gobi5zdWJzdHJpbmcoci09cyxyK3MpKSwhKChsKz1zKzEpPmkpKTspcz10W2E9KGErMSkldC5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKGUpfX0pKF95LmNhbGwodC5ncm91cGluZyxOdW1iZXIpLHQudGhvdXNhbmRzKyIiKSxpPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVswXSsiIixyPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVsxXSsiIixvPXZvaWQgMD09PXQuZGVjaW1hbD8iLiI6dC5kZWNpbWFsKyIiLGE9dm9pZCAwPT09dC5udW1lcmFscz9weTooZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvWzAtOV0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIHRbK2VdfSkpfX0pKF95LmNhbGwodC5udW1lcmFscyxTdHJpbmcpKSxsPXZvaWQgMD09PXQucGVyY2VudD8iJSI6dC5wZXJjZW50KyIiLGM9dm9pZCAwPT09dC5taW51cz8iLSI6dC5taW51cysiIix1PXZvaWQgMD09PXQubmFuPyJOYU4iOnQubmFuKyIiO2Z1bmN0aW9uIGgodCl7dmFyIG49KHQ9c3kodCkpLmZpbGwscz10LmFsaWduLGg9dC5zaWduLGQ9dC5zeW1ib2wscD10Lnplcm8sZj10LndpZHRoLG09dC5jb21tYSxnPXQucHJlY2lzaW9uLF89dC50cmltLHk9dC50eXBlOyJuIj09PXk/KG09ITAseT0iZyIpOnV5W3ldfHwodm9pZCAwPT09ZyYmKGc9MTIpLF89ITAseT0iZyIpLChwfHwiMCI9PT1uJiYiPSI9PT1zKSYmKHA9ITAsbj0iMCIscz0iPSIpO3ZhciB2PSIkIj09PWQ/aToiIyI9PT1kJiYvW2JveFhdLy50ZXN0KHkpPyIwIit5LnRvTG93ZXJDYXNlKCk6IiIsYj0iJCI9PT1kP3I6L1slcF0vLnRlc3QoeSk/bDoiIix4PXV5W3ldLHc9L1tkZWZncHJzJV0vLnRlc3QoeSk7ZnVuY3Rpb24gUyh0KXt2YXIgaSxyLGwsZD12LFM9YjtpZigiYyI9PT15KVM9eCh0KStTLHQ9IiI7ZWxzZXt2YXIgTT0odD0rdCk8MHx8MS90PDA7aWYodD1pc05hTih0KT91OngoTWF0aC5hYnModCksZyksXyYmKHQ9KGZ1bmN0aW9uIEUodCl7dDpmb3IodmFyIGUsbj10Lmxlbmd0aCxpPTEscj0tMTtpPG47KytpKXN3aXRjaCh0W2ldKXtjYXNlIi4iOnI9ZT1pO2JyZWFrO2Nhc2UiMCI6MD09PXImJihyPWkpLGU9aTticmVhaztkZWZhdWx0OmlmKCErdFtpXSlicmVhayB0O3I+MCYmKHI9MCl9cmV0dXJuIHI+MD90LnNsaWNlKDAscikrdC5zbGljZShlKzEpOnR9KSh0KSksTSYmMD09K3QmJiIrIiE9PWgmJihNPSExKSxkPShNPyIoIj09PWg/aDpjOiItIj09PWh8fCIoIj09PWg/IiI6aCkrZCxTPSgicyI9PT15P3l5Wzgrb3kvM106IiIpK1MrKE0mJiIoIj09PWg/IikiOiIiKSx3KWZvcihpPS0xLHI9dC5sZW5ndGg7KytpPHI7KWlmKDQ4PihsPXQuY2hhckNvZGVBdChpKSl8fGw+NTcpe1M9KDQ2PT09bD9vK3Quc2xpY2UoaSsxKTp0LnNsaWNlKGkpKStTLHQ9dC5zbGljZSgwLGkpO2JyZWFrfX1tJiYhcCYmKHQ9ZSh0LDEvMCkpO3ZhciBUPWQubGVuZ3RoK3QubGVuZ3RoK1MubGVuZ3RoLEM9VDxmP25ldyBBcnJheShmLVQrMSkuam9pbihuKToiIjtzd2l0Y2gobSYmcCYmKHQ9ZShDK3QsQy5sZW5ndGg/Zi1TLmxlbmd0aDoxLzApLEM9IiIpLHMpe2Nhc2UiPCI6dD1kK3QrUytDO2JyZWFrO2Nhc2UiPSI6dD1kK0MrdCtTO2JyZWFrO2Nhc2UiXiI6dD1DLnNsaWNlKDAsVD1DLmxlbmd0aD4+MSkrZCt0K1MrQy5zbGljZShUKTticmVhaztkZWZhdWx0OnQ9QytkK3QrU31yZXR1cm4gYSh0KX1yZXR1cm4gZz12b2lkIDA9PT1nPzY6L1tncHJzXS8udGVzdCh5KT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGcpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGcpKSxTLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQrIiJ9LFN9cmV0dXJue2Zvcm1hdDpoLGZvcm1hdFByZWZpeDpmdW5jdGlvbiBkKHQsZSl7dmFyIG49aCgoKHQ9c3kodCkpLnR5cGU9ImYiLHQpKSxpPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHJ5KGUpLzMpKSkscj1NYXRoLnBvdygxMCwtaSksbz15eVs4K2kvM107cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuKHIqdCkrb319fX1mdW5jdGlvbiBieSh0KXtyZXR1cm4gZnk9dnkodCksbXk9ZnkuZm9ybWF0LGd5PWZ5LmZvcm1hdFByZWZpeCxmeX1mdW5jdGlvbiB4eSh0KXtyZXR1cm4gTWF0aC5tYXgoMCwtcnkoTWF0aC5hYnModCkpKX1mdW5jdGlvbiB3eSh0LGUpe3JldHVybiBNYXRoLm1heCgwLDMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHJ5KGUpLzMpKSktcnkoTWF0aC5hYnModCkpKX1mdW5jdGlvbiBTeSh0LGUpe3JldHVybiB0PU1hdGguYWJzKHQpLGU9TWF0aC5hYnMoZSktdCxNYXRoLm1heCgwLHJ5KGUpLXJ5KHQpKSsxfWZ1bmN0aW9uIE15KCl7cmV0dXJuIG5ldyBFeX1mdW5jdGlvbiBFeSgpe3RoaXMucmVzZXQoKX1ieSh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sbWludXM6Ii0ifSksRXkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpFeSxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sYWRkOmZ1bmN0aW9uKHQpe0N5KFR5LHQsdGhpcy50KSxDeSh0aGlzLFR5LnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1UeS50OnRoaXMucz1UeS50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBUeT1uZXcgRXk7ZnVuY3Rpb24gQ3kodCxlLG4pe3ZhciBpPXQucz1lK24scj1pLWU7dC50PWUtKGktcikrKG4tcil9dmFyIEF5PTFlLTYsa3k9MWUtMTIsTHk9TWF0aC5QSSxQeT1MeS8yLE55PUx5LzQsSXk9MipMeSxSeT0xODAvTHksT3k9THkvMTgwLHp5PU1hdGguYWJzLER5PU1hdGguYXRhbixCeT1NYXRoLmF0YW4yLEh5PU1hdGguY29zLEZ5PU1hdGguY2VpbCxWeT1NYXRoLmV4cCxVeT1NYXRoLmxvZyxqeT1NYXRoLnBvdyxHeT1NYXRoLnNpbixXeT1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH0scXk9TWF0aC5zcXJ0LFl5PU1hdGgudGFuO2Z1bmN0aW9uIFh5KHQpe3JldHVybiB0PjE/MDp0PC0xP0x5Ok1hdGguYWNvcyh0KX1mdW5jdGlvbiAkeSh0KXtyZXR1cm4gdD4xP1B5OnQ8LTE/LVB5Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBLeSh0KXtyZXR1cm4odD1HeSh0LzIpKSp0fWZ1bmN0aW9uIFp5KCl7fWZ1bmN0aW9uIEp5KHQsZSl7dCYmdHYuaGFzT3duUHJvcGVydHkodC50eXBlKSYmdHZbdC50eXBlXSh0LGUpfXZhciBReT17RmVhdHVyZTpmdW5jdGlvbih0LGUpe0p5KHQuZ2VvbWV0cnksZSl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZmVhdHVyZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylKeShuW2ldLmdlb21ldHJ5LGUpfX0sdHY9e1NwaGVyZTpmdW5jdGlvbih0LGUpe2Uuc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKHQsZSl7ZS5wb2ludCgodD10LmNvb3JkaW5hdGVzKVswXSx0WzFdLHRbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOyllLnBvaW50KCh0PW5baV0pWzBdLHRbMV0sdFsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtldih0LmNvb3JkaW5hdGVzLGUsMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspZXYobltpXSxlLDApfSxQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7bnYodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOyludihuW2ldLGUpfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5nZW9tZXRyaWVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspSnkobltpXSxlKX19O2Z1bmN0aW9uIGV2KHQsZSxuKXt2YXIgaSxyPS0xLG89dC5sZW5ndGgtbjtmb3IoZS5saW5lU3RhcnQoKTsrK3I8bzspZS5wb2ludCgoaT10W3JdKVswXSxpWzFdLGlbMl0pO2UubGluZUVuZCgpfWZ1bmN0aW9uIG52KHQsZSl7dmFyIG49LTEsaT10Lmxlbmd0aDtmb3IoZS5wb2x5Z29uU3RhcnQoKTsrK248aTspZXYodFtuXSxlLDEpO2UucG9seWdvbkVuZCgpfWZ1bmN0aW9uIGl2KHQsZSl7dCYmUXkuaGFzT3duUHJvcGVydHkodC50eXBlKT9ReVt0LnR5cGVdKHQsZSk6SnkodCxlKX12YXIgcnYsb3YsYXYsc3YsbHYsY3Y9TXkoKSx1dj1NeSgpLGh2PXtwb2ludDpaeSxsaW5lU3RhcnQ6WnksbGluZUVuZDpaeSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtjdi5yZXNldCgpLGh2LmxpbmVTdGFydD1kdixodi5saW5lRW5kPXB2fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9K2N2O3V2LmFkZCh0PDA/SXkrdDp0KSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1aeX0sc3BoZXJlOmZ1bmN0aW9uKCl7dXYuYWRkKEl5KX19O2Z1bmN0aW9uIGR2KCl7aHYucG9pbnQ9ZnZ9ZnVuY3Rpb24gcHYoKXttdihydixvdil9ZnVuY3Rpb24gZnYodCxlKXtodi5wb2ludD1tdixydj10LG92PWUsYXY9dCo9T3ksc3Y9SHkoZT0oZSo9T3kpLzIrTnkpLGx2PUd5KGUpfWZ1bmN0aW9uIG12KHQsZSl7dmFyIG49KHQqPU95KS1hdixpPW4+PTA/MTotMSxyPWkqbixvPUh5KGU9KGUqPU95KS8yK055KSxhPUd5KGUpLHM9bHYqYSxsPXN2Km8rcypIeShyKSxjPXMqaSpHeShyKTtjdi5hZGQoQnkoYyxsKSksYXY9dCxzdj1vLGx2PWF9ZnVuY3Rpb24gZ3YodCl7cmV0dXJuW0J5KHRbMV0sdFswXSksJHkodFsyXSldfWZ1bmN0aW9uIF92KHQpe3ZhciBlPXRbMF0sbj10WzFdLGk9SHkobik7cmV0dXJuW2kqSHkoZSksaSpHeShlKSxHeShuKV19ZnVuY3Rpb24geXYodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24gdnYodCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfWZ1bmN0aW9uIGJ2KHQsZSl7dFswXSs9ZVswXSx0WzFdKz1lWzFdLHRbMl0rPWVbMl19ZnVuY3Rpb24geHYodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uIHd2KHQpe3ZhciBlPXF5KHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1lLHRbMV0vPWUsdFsyXS89ZX12YXIgU3YsTXYsRXYsVHYsQ3YsQXYsa3YsTHYsUHYsTnYsSXYsUnYsT3YsenYsRHYsQnYsSHYsRnYsVnYsVXYsanYsR3YsV3YscXYsWXYsWHYsJHY9TXkoKSxLdj17cG9pbnQ6WnYsbGluZVN0YXJ0OlF2LGxpbmVFbmQ6dGIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7S3YucG9pbnQ9ZWIsS3YubGluZVN0YXJ0PW5iLEt2LmxpbmVFbmQ9aWIsJHYucmVzZXQoKSxodi5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2h2LnBvbHlnb25FbmQoKSxLdi5wb2ludD1adixLdi5saW5lU3RhcnQ9UXYsS3YubGluZUVuZD10YixjdjwwPyhTdj0tKEV2PTE4MCksTXY9LShUdj05MCkpOiR2PkF5P1R2PTkwOiR2PC0xZS02JiYoTXY9LTkwKSxOdlswXT1TdixOdlsxXT1Fdn0sc3BoZXJlOmZ1bmN0aW9uKCl7U3Y9LShFdj0xODApLE12PS0oVHY9OTApfX07ZnVuY3Rpb24gWnYodCxlKXtQdi5wdXNoKE52PVtTdj10LEV2PXRdKSxlPE12JiYoTXY9ZSksZT5UdiYmKFR2PWUpfWZ1bmN0aW9uIEp2KHQsZSl7dmFyIG49X3YoW3QqT3ksZSpPeV0pO2lmKEx2KXt2YXIgaT12dihMdixuKSxyPXZ2KFtpWzFdLC1pWzBdLDBdLGkpO3d2KHIpLHI9Z3Yocik7dmFyIG8sYT10LUN2LHM9YT4wPzE6LTEsbD1yWzBdKlJ5KnMsYz16eShhKT4xODA7Y14ocypDdjxsJiZsPHMqdCk/KG89clsxXSpSeSk+VHYmJihUdj1vKTpjXihzKkN2PChsPShsKzM2MCklMzYwLTE4MCkmJmw8cyp0KT8obz0tclsxXSpSeSk8TXYmJihNdj1vKTooZTxNdiYmKE12PWUpLGU+VHYmJihUdj1lKSksYz90PEN2P3JiKFN2LHQpPnJiKFN2LEV2KSYmKEV2PXQpOnJiKHQsRXYpPnJiKFN2LEV2KSYmKFN2PXQpOkV2Pj1Tdj8odDxTdiYmKFN2PXQpLHQ+RXYmJihFdj10KSk6dD5Ddj9yYihTdix0KT5yYihTdixFdikmJihFdj10KTpyYih0LEV2KT5yYihTdixFdikmJihTdj10KX1lbHNlIFB2LnB1c2goTnY9W1N2PXQsRXY9dF0pO2U8TXYmJihNdj1lKSxlPlR2JiYoVHY9ZSksTHY9bixDdj10fWZ1bmN0aW9uIFF2KCl7S3YucG9pbnQ9SnZ9ZnVuY3Rpb24gdGIoKXtOdlswXT1TdixOdlsxXT1FdixLdi5wb2ludD1adixMdj1udWxsfWZ1bmN0aW9uIGViKHQsZSl7aWYoTHYpe3ZhciBuPXQtQ3Y7JHYuYWRkKHp5KG4pPjE4MD9uKyhuPjA/MzYwOi0zNjApOm4pfWVsc2UgQXY9dCxrdj1lO2h2LnBvaW50KHQsZSksSnYodCxlKX1mdW5jdGlvbiBuYigpe2h2LmxpbmVTdGFydCgpfWZ1bmN0aW9uIGliKCl7ZWIoQXYsa3YpLGh2LmxpbmVFbmQoKSx6eSgkdik+QXkmJihTdj0tKEV2PTE4MCkpLE52WzBdPVN2LE52WzFdPUV2LEx2PW51bGx9ZnVuY3Rpb24gcmIodCxlKXtyZXR1cm4oZS09dCk8MD9lKzM2MDplfWZ1bmN0aW9uIG9iKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBhYih0LGUpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PWUmJmU8PXRbMV06ZTx0WzBdfHx0WzFdPGV9dmFyIHNiPXtzcGhlcmU6WnkscG9pbnQ6bGIsbGluZVN0YXJ0OnViLGxpbmVFbmQ6cGIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7c2IubGluZVN0YXJ0PWZiLHNiLmxpbmVFbmQ9bWJ9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtzYi5saW5lU3RhcnQ9dWIsc2IubGluZUVuZD1wYn19O2Z1bmN0aW9uIGxiKHQsZSl7dCo9T3k7dmFyIG49SHkoZSo9T3kpO2NiKG4qSHkodCksbipHeSh0KSxHeShlKSl9ZnVuY3Rpb24gY2IodCxlLG4peysrSXYsT3YrPSh0LU92KS9Jdix6dis9KGUtenYpL0l2LER2Kz0obi1EdikvSXZ9ZnVuY3Rpb24gdWIoKXtzYi5wb2ludD1oYn1mdW5jdGlvbiBoYih0LGUpe3QqPU95O3ZhciBuPUh5KGUqPU95KTtxdj1uKkh5KHQpLFl2PW4qR3kodCksWHY9R3koZSksc2IucG9pbnQ9ZGIsY2IocXYsWXYsWHYpfWZ1bmN0aW9uIGRiKHQsZSl7dCo9T3k7dmFyIG49SHkoZSo9T3kpLGk9bipIeSh0KSxyPW4qR3kodCksbz1HeShlKSxhPUJ5KHF5KChhPVl2Km8tWHYqcikqYSsoYT1YdippLXF2Km8pKmErKGE9cXYqci1ZdippKSphKSxxdippK1l2KnIrWHYqbyk7UnYrPWEsQnYrPWEqKHF2Kyhxdj1pKSksSHYrPWEqKFl2KyhZdj1yKSksRnYrPWEqKFh2KyhYdj1vKSksY2IocXYsWXYsWHYpfWZ1bmN0aW9uIHBiKCl7c2IucG9pbnQ9bGJ9ZnVuY3Rpb24gZmIoKXtzYi5wb2ludD1nYn1mdW5jdGlvbiBtYigpe19iKEd2LFd2KSxzYi5wb2ludD1sYn1mdW5jdGlvbiBnYih0LGUpe0d2PXQsV3Y9ZSx0Kj1PeSxlKj1PeSxzYi5wb2ludD1fYjt2YXIgbj1IeShlKTtxdj1uKkh5KHQpLFl2PW4qR3kodCksWHY9R3koZSksY2IocXYsWXYsWHYpfWZ1bmN0aW9uIF9iKHQsZSl7dCo9T3k7dmFyIG49SHkoZSo9T3kpLGk9bipIeSh0KSxyPW4qR3kodCksbz1HeShlKSxhPVl2Km8tWHYqcixzPVh2KmktcXYqbyxsPXF2KnItWXYqaSxjPXF5KGEqYStzKnMrbCpsKSx1PSR5KGMpLGg9YyYmLXUvYztWdis9aCphLFV2Kz1oKnMsanYrPWgqbCxSdis9dSxCdis9dSoocXYrKHF2PWkpKSxIdis9dSooWXYrKFl2PXIpKSxGdis9dSooWHYrKFh2PW8pKSxjYihxdixZdixYdil9ZnVuY3Rpb24geWIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHZiKHQsZSl7ZnVuY3Rpb24gbihuLGkpe3JldHVybiBuPXQobixpKSxlKG5bMF0sblsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZlLmludmVydCYmKG4uaW52ZXJ0PWZ1bmN0aW9uKG4saSl7cmV0dXJuKG49ZS5pbnZlcnQobixpKSkmJnQuaW52ZXJ0KG5bMF0sblsxXSl9KSxufWZ1bmN0aW9uIGJiKHQsZSl7cmV0dXJuW3p5KHQpPkx5P3QrTWF0aC5yb3VuZCgtdC9JeSkqSXk6dCxlXX1mdW5jdGlvbiB4Yih0LGUsbil7cmV0dXJuKHQlPUl5KT9lfHxuP3ZiKFNiKHQpLE1iKGUsbikpOlNiKHQpOmV8fG4/TWIoZSxuKTpiYn1mdW5jdGlvbiB3Yih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm5bKGUrPXQpPkx5P2UtSXk6ZTwtTHk/ZStJeTplLG5dfX1mdW5jdGlvbiBTYih0KXt2YXIgZT13Yih0KTtyZXR1cm4gZS5pbnZlcnQ9d2IoLXQpLGV9ZnVuY3Rpb24gTWIodCxlKXt2YXIgbj1IeSh0KSxpPUd5KHQpLHI9SHkoZSksbz1HeShlKTtmdW5jdGlvbiBhKHQsZSl7dmFyIGE9SHkoZSkscz1IeSh0KSphLGw9R3kodCkqYSxjPUd5KGUpLHU9YypuK3MqaTtyZXR1cm5bQnkobCpyLXUqbyxzKm4tYyppKSwkeSh1KnIrbCpvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIGE9SHkoZSkscz1IeSh0KSphLGw9R3kodCkqYSxjPUd5KGUpLHU9YypyLWwqbztyZXR1cm5bQnkobCpyK2MqbyxzKm4rdSppKSwkeSh1Km4tcyppKV19LGF9ZnVuY3Rpb24gRWIodCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4oZT10KGVbMF0qT3ksZVsxXSpPeSkpWzBdKj1SeSxlWzFdKj1SeSxlfXJldHVybiB0PXhiKHRbMF0qT3ksdFsxXSpPeSx0Lmxlbmd0aD4yP3RbMl0qT3k6MCksZS5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dC5pbnZlcnQoZVswXSpPeSxlWzFdKk95KSlbMF0qPVJ5LGVbMV0qPVJ5LGV9LGV9ZnVuY3Rpb24gVGIodCxlLG4saSxyLG8pe2lmKG4pe3ZhciBhPUh5KGUpLHM9R3koZSksbD1pKm47bnVsbD09cj8ocj1lK2kqSXksbz1lLWwvMik6KHI9Q2IoYSxyKSxvPUNiKGEsbyksKGk+MD9yPG86cj5vKSYmKHIrPWkqSXkpKTtmb3IodmFyIGMsdT1yO2k+MD91Pm86dTxvO3UtPWwpYz1ndihbYSwtcypIeSh1KSwtcypHeSh1KV0pLHQucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gQ2IodCxlKXsoZT1fdihlKSlbMF0tPXQsd3YoZSk7dmFyIG49WHkoLWVbMV0pO3JldHVybigoLWVbMl08MD8tbjpuKStJeS1BeSklSXl9ZnVuY3Rpb24gQWIoKXt2YXIgdCxlPVtdO3JldHVybntwb2ludDpmdW5jdGlvbihlLG4saSl7dC5wdXNoKFtlLG4saV0pfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLnB1c2godD1bXSl9LGxpbmVFbmQ6WnkscmVqb2luOmZ1bmN0aW9uKCl7ZS5sZW5ndGg+MSYmZS5wdXNoKGUucG9wKCkuY29uY2F0KGUuc2hpZnQoKSkpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgbj1lO3JldHVybiBlPVtdLHQ9bnVsbCxufX19ZnVuY3Rpb24ga2IodCxlKXtyZXR1cm4genkodFswXS1lWzBdKTxBeSYmenkodFsxXS1lWzFdKTxBeX1mdW5jdGlvbiBMYih0LGUsbixpKXt0aGlzLng9dCx0aGlzLno9ZSx0aGlzLm89bix0aGlzLmU9aSx0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIFBiKHQsZSxuLGkscil7dmFyIG8sYSxzPVtdLGw9W107aWYodC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZighKChlPXQubGVuZ3RoLTEpPD0wKSl7dmFyIGUsbixpPXRbMF0sYT10W2VdO2lmKGtiKGksYSkpe2lmKCFpWzJdJiYhYVsyXSl7Zm9yKHIubGluZVN0YXJ0KCksbz0wO288ZTsrK28pci5wb2ludCgoaT10W29dKVswXSxpWzFdKTtyZXR1cm4gdm9pZCByLmxpbmVFbmQoKX1hWzBdKz0yZS02fXMucHVzaChuPW5ldyBMYihpLHQsbnVsbCwhMCkpLGwucHVzaChuLm89bmV3IExiKGksbnVsbCxuLCExKSkscy5wdXNoKG49bmV3IExiKGEsdCxudWxsLCExKSksbC5wdXNoKG4ubz1uZXcgTGIoYSxudWxsLG4sITApKX19KSkscy5sZW5ndGgpe2ZvcihsLnNvcnQoZSksTmIocyksTmIobCksbz0wLGE9bC5sZW5ndGg7bzxhOysrbylsW29dLmU9bj0hbjtmb3IodmFyIGMsdSxoPXNbMF07Oyl7Zm9yKHZhciBkPWgscD0hMDtkLnY7KWlmKChkPWQubik9PT1oKXJldHVybjtjPWQueixyLmxpbmVTdGFydCgpO2Rve2lmKGQudj1kLm8udj0hMCxkLmUpe2lmKHApZm9yKG89MCxhPWMubGVuZ3RoO288YTsrK28pci5wb2ludCgodT1jW29dKVswXSx1WzFdKTtlbHNlIGkoZC54LGQubi54LDEscik7ZD1kLm59ZWxzZXtpZihwKWZvcihvPShjPWQucC56KS5sZW5ndGgtMTtvPj0wOy0tbylyLnBvaW50KCh1PWNbb10pWzBdLHVbMV0pO2Vsc2UgaShkLngsZC5wLngsLTEscik7ZD1kLnB9Yz0oZD1kLm8pLnoscD0hcH13aGlsZSghZC52KTtyLmxpbmVFbmQoKX19fWZ1bmN0aW9uIE5iKHQpe2lmKGU9dC5sZW5ndGgpe2Zvcih2YXIgZSxuLGk9MCxyPXRbMF07KytpPGU7KXIubj1uPXRbaV0sbi5wPXIscj1uO3Iubj1uPXRbMF0sbi5wPXJ9fWJiLmludmVydD1iYjt2YXIgSWI9TXkoKTtmdW5jdGlvbiBSYih0KXtyZXR1cm4genkodFswXSk8PUx5P3RbMF06V3kodFswXSkqKCh6eSh0WzBdKStMeSklSXktTHkpfWZ1bmN0aW9uIE9iKHQsZSl7dmFyIG49UmIoZSksaT1lWzFdLHI9R3koaSksbz1bR3kobiksLUh5KG4pLDBdLGE9MCxzPTA7SWIucmVzZXQoKSwxPT09cj9pPVB5K0F5Oi0xPT09ciYmKGk9LVB5LUF5KTtmb3IodmFyIGw9MCxjPXQubGVuZ3RoO2w8YzsrK2wpaWYoaD0odT10W2xdKS5sZW5ndGgpZm9yKHZhciB1LGgsZD11W2gtMV0scD1SYihkKSxmPWRbMV0vMitOeSxtPUd5KGYpLGc9SHkoZiksXz0wO188aDsrK18scD12LG09eCxnPXcsZD15KXt2YXIgeT11W19dLHY9UmIoeSksYj15WzFdLzIrTnkseD1HeShiKSx3PUh5KGIpLFM9di1wLE09Uz49MD8xOi0xLEU9TSpTLFQ9RT5MeSxDPW0qeDtpZihJYi5hZGQoQnkoQypNKkd5KEUpLGcqdytDKkh5KEUpKSksYSs9VD9TK00qSXk6UyxUXnA+PW5edj49bil7dmFyIEE9dnYoX3YoZCksX3YoeSkpO3d2KEEpO3ZhciBrPXZ2KG8sQSk7d3Yoayk7dmFyIEw9KFReUz49MD8tMToxKSokeShrWzJdKTsoaT5MfHxpPT09TCYmKEFbMF18fEFbMV0pKSYmKHMrPVReUz49MD8xOi0xKX19cmV0dXJuKGE8LTFlLTZ8fGE8QXkmJkliPC0xZS02KV4xJnN9ZnVuY3Rpb24gemIodCxlLG4saSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBvLGEscyxsPWUociksYz1BYigpLHU9ZShjKSxoPSExLGQ9e3BvaW50OnAsbGluZVN0YXJ0Om0sbGluZUVuZDpnLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2QucG9pbnQ9XyxkLmxpbmVTdGFydD15LGQubGluZUVuZD12LGE9W10sbz1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2QucG9pbnQ9cCxkLmxpbmVTdGFydD1tLGQubGluZUVuZD1nLGE9cWwoYSk7dmFyIHQ9T2IobyxpKTthLmxlbmd0aD8oaHx8KHIucG9seWdvblN0YXJ0KCksaD0hMCksUGIoYSxCYix0LG4scikpOnQmJihofHwoci5wb2x5Z29uU3RhcnQoKSxoPSEwKSxyLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsciksci5saW5lRW5kKCkpLGgmJihyLnBvbHlnb25FbmQoKSxoPSExKSxhPW89bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7ci5wb2x5Z29uU3RhcnQoKSxyLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsciksci5saW5lRW5kKCksci5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBwKGUsbil7dChlLG4pJiZyLnBvaW50KGUsbil9ZnVuY3Rpb24gZih0LGUpe2wucG9pbnQodCxlKX1mdW5jdGlvbiBtKCl7ZC5wb2ludD1mLGwubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZygpe2QucG9pbnQ9cCxsLmxpbmVFbmQoKX1mdW5jdGlvbiBfKHQsZSl7cy5wdXNoKFt0LGVdKSx1LnBvaW50KHQsZSl9ZnVuY3Rpb24geSgpe3UubGluZVN0YXJ0KCkscz1bXX1mdW5jdGlvbiB2KCl7XyhzWzBdWzBdLHNbMF1bMV0pLHUubGluZUVuZCgpO3ZhciB0LGUsbixpLGw9dS5jbGVhbigpLGQ9Yy5yZXN1bHQoKSxwPWQubGVuZ3RoO2lmKHMucG9wKCksby5wdXNoKHMpLHM9bnVsbCxwKWlmKDEmbCl7aWYoKGU9KG49ZFswXSkubGVuZ3RoLTEpPjApe2ZvcihofHwoci5wb2x5Z29uU3RhcnQoKSxoPSEwKSxyLmxpbmVTdGFydCgpLHQ9MDt0PGU7Kyt0KXIucG9pbnQoKGk9blt0XSlbMF0saVsxXSk7ci5saW5lRW5kKCl9fWVsc2UgcD4xJiYyJmwmJmQucHVzaChkLnBvcCgpLmNvbmNhdChkLnNoaWZ0KCkpKSxhLnB1c2goZC5maWx0ZXIoRGIpKX1yZXR1cm4gZH19ZnVuY3Rpb24gRGIodCl7cmV0dXJuIHQubGVuZ3RoPjF9ZnVuY3Rpb24gQmIodCxlKXtyZXR1cm4oKHQ9dC54KVswXTwwP3RbMV0tUHktQXk6UHktdFsxXSktKChlPWUueClbMF08MD9lWzFdLVB5LUF5OlB5LWVbMV0pfXZhciBIYj16YigoZnVuY3Rpb24oKXtyZXR1cm4hMH0pLChmdW5jdGlvbiBGYih0KXt2YXIgZSxuPU5hTixpPU5hTixyPU5hTjtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKSxlPTF9LHBvaW50OmZ1bmN0aW9uKG8sYSl7dmFyIHM9bz4wP0x5Oi1MeSxsPXp5KG8tbik7enkobC1MeSk8QXk/KHQucG9pbnQobixpPShpK2EpLzI+MD9QeTotUHkpLHQucG9pbnQocixpKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxpKSx0LnBvaW50KG8saSksZT0wKTpyIT09cyYmbD49THkmJih6eShuLXIpPEF5JiYobi09cipBeSksenkoby1zKTxBeSYmKG8tPXMqQXkpLGk9KGZ1bmN0aW9uIGModCxlLG4saSl7dmFyIHIsbyxhPUd5KHQtbik7cmV0dXJuIHp5KGEpPkF5P0R5KChHeShlKSoobz1IeShpKSkqR3kobiktR3koaSkqKHI9SHkoZSkpKkd5KHQpKS8ocipvKmEpKTooZStpKS8yfSkobixpLG8sYSksdC5wb2ludChyLGkpLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLGkpLGU9MCksdC5wb2ludChuPW8saT1hKSxyPXN9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0LmxpbmVFbmQoKSxuPWk9TmFOfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiAyLWV9fX0pLChmdW5jdGlvbiBWYih0LGUsbixpKXt2YXIgcjtpZihudWxsPT10KWkucG9pbnQoLUx5LHI9bipQeSksaS5wb2ludCgwLHIpLGkucG9pbnQoTHksciksaS5wb2ludChMeSwwKSxpLnBvaW50KEx5LC1yKSxpLnBvaW50KDAsLXIpLGkucG9pbnQoLUx5LC1yKSxpLnBvaW50KC1MeSwwKSxpLnBvaW50KC1MeSxyKTtlbHNlIGlmKHp5KHRbMF0tZVswXSk+QXkpe3ZhciBvPXRbMF08ZVswXT9MeTotTHk7aS5wb2ludCgtbyxyPW4qby8yKSxpLnBvaW50KDAsciksaS5wb2ludChvLHIpfWVsc2UgaS5wb2ludChlWzBdLGVbMV0pfSksWy1MeSwtUHldKTtmdW5jdGlvbiBVYih0KXt2YXIgZT1IeSh0KSxuPTYqT3ksaT1lPjAscj16eShlKT5BeTtmdW5jdGlvbiBvKHQsbil7cmV0dXJuIEh5KHQpKkh5KG4pPmV9ZnVuY3Rpb24gYSh0LG4saSl7dmFyIHI9WzEsMCwwXSxvPXZ2KF92KHQpLF92KG4pKSxhPXl2KG8sbykscz1vWzBdLGw9YS1zKnM7aWYoIWwpcmV0dXJuIWkmJnQ7dmFyIGM9ZSphL2wsdT0tZSpzL2wsaD12dihyLG8pLGQ9eHYocixjKTtidihkLHh2KG8sdSkpO3ZhciBwPWgsZj15dihkLHApLG09eXYocCxwKSxnPWYqZi1tKih5dihkLGQpLTEpO2lmKCEoZzwwKSl7dmFyIF89cXkoZykseT14dihwLCgtZi1fKS9tKTtpZihidih5LGQpLHk9Z3YoeSksIWkpcmV0dXJuIHk7dmFyIHYsYj10WzBdLHg9blswXSx3PXRbMV0sUz1uWzFdO3g8YiYmKHY9YixiPXgseD12KTt2YXIgTT14LWIsRT16eShNLUx5KTxBeTtpZighRSYmUzx3JiYodj13LHc9UyxTPXYpLEV8fE08QXk/RT93K1M+MF55WzFdPCh6eSh5WzBdLWIpPEF5P3c6Uyk6dzw9eVsxXSYmeVsxXTw9UzpNPkx5XihiPD15WzBdJiZ5WzBdPD14KSl7dmFyIFQ9eHYocCwoLWYrXykvbSk7cmV0dXJuIGJ2KFQsZCksW3ksZ3YoVCldfX19ZnVuY3Rpb24gcyhlLG4pe3ZhciByPWk/dDpMeS10LG89MDtyZXR1cm4gZTwtcj9vfD0xOmU+ciYmKG98PTIpLG48LXI/b3w9NDpuPnImJihvfD04KSxvfXJldHVybiB6YihvLChmdW5jdGlvbiBsKHQpe3ZhciBlLG4sbCxjLHU7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2M9bD0hMSx1PTF9LHBvaW50OmZ1bmN0aW9uKGgsZCl7dmFyIHAsZj1baCxkXSxtPW8oaCxkKSxnPWk/bT8wOnMoaCxkKTptP3MoaCsoaDwwP0x5Oi1MeSksZCk6MDtpZighZSYmKGM9bD1tKSYmdC5saW5lU3RhcnQoKSxtIT09bCYmKCEocD1hKGUsZikpfHxrYihlLHApfHxrYihmLHApKSYmKGZbMl09MSksbSE9PWwpdT0wLG0/KHQubGluZVN0YXJ0KCkscD1hKGYsZSksdC5wb2ludChwWzBdLHBbMV0pKToocD1hKGUsZiksdC5wb2ludChwWzBdLHBbMV0sMiksdC5saW5lRW5kKCkpLGU9cDtlbHNlIGlmKHImJmUmJmlebSl7dmFyIF87ZyZufHwhKF89YShmLGUsITApKXx8KHU9MCxpPyh0LmxpbmVTdGFydCgpLHQucG9pbnQoX1swXVswXSxfWzBdWzFdKSx0LnBvaW50KF9bMV1bMF0sX1sxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KF9bMV1bMF0sX1sxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KF9bMF1bMF0sX1swXVsxXSwzKSkpfSFtfHxlJiZrYihlLGYpfHx0LnBvaW50KGZbMF0sZlsxXSksZT1mLGw9bSxuPWd9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtsJiZ0LmxpbmVFbmQoKSxlPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIHV8KGMmJmwpPDwxfX19KSwoZnVuY3Rpb24gYyhlLGkscixvKXtUYihvLHQsbixyLGUsaSl9KSxpP1swLC10XTpbLUx5LHQtTHldKX12YXIgamI9MWU5LEdiPS1qYjtmdW5jdGlvbiBXYih0LGUsbixpKXtmdW5jdGlvbiByKHIsbyl7cmV0dXJuIHQ8PXImJnI8PW4mJmU8PW8mJm88PWl9ZnVuY3Rpb24gbyhyLG8scyxjKXt2YXIgdT0wLGg9MDtpZihudWxsPT1yfHwodT1hKHIscykpIT09KGg9YShvLHMpKXx8bChyLG8pPDBecz4wKWRve2MucG9pbnQoMD09PXV8fDM9PT11P3Q6bix1PjE/aTplKX13aGlsZSgodT0odStzKzQpJTQpIT09aCk7ZWxzZSBjLnBvaW50KG9bMF0sb1sxXSl9ZnVuY3Rpb24gYShpLHIpe3JldHVybiB6eShpWzBdLXQpPEF5P3I+MD8wOjM6enkoaVswXS1uKTxBeT9yPjA/MjoxOnp5KGlbMV0tZSk8QXk/cj4wPzE6MDpyPjA/MzoyfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gbCh0LngsZS54KX1mdW5jdGlvbiBsKHQsZSl7dmFyIG49YSh0LDEpLGk9YShlLDEpO3JldHVybiBuIT09aT9uLWk6MD09PW4/ZVsxXS10WzFdOjE9PT1uP3RbMF0tZVswXToyPT09bj90WzFdLWVbMV06ZVswXS10WzBdfXJldHVybiBmdW5jdGlvbihhKXt2YXIgbCxjLHUsaCxkLHAsZixtLGcsXyx5LHY9YSxiPUFiKCkseD17cG9pbnQ6VCxsaW5lU3RhcnQ6ZnVuY3Rpb24gdygpe3gucG9pbnQ9QyxjJiZjLnB1c2godT1bXSksXz0hMCxnPSExLGY9bT1OYU59LGxpbmVFbmQ6ZnVuY3Rpb24gUygpe2wmJihDKGgsZCkscCYmZyYmYi5yZWpvaW4oKSxsLnB1c2goYi5yZXN1bHQoKSkpLHgucG9pbnQ9VCxnJiZ2LmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uIE0oKXt2PWIsbD1bXSxjPVtdLHk9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24gRSgpe3ZhciBlPShmdW5jdGlvbiBuKCl7Zm9yKHZhciBlPTAsbj0wLHI9Yy5sZW5ndGg7bjxyOysrbilmb3IodmFyIG8sYSxzPWNbbl0sbD0xLHU9cy5sZW5ndGgsaD1zWzBdLGQ9aFswXSxwPWhbMV07bDx1OysrbClvPWQsYT1wLGQ9KGg9c1tsXSlbMF0scD1oWzFdLGE8PWk/cD5pJiYoZC1vKSooaS1hKT4ocC1hKSoodC1vKSYmKytlOnA8PWkmJihkLW8pKihpLWEpPChwLWEpKih0LW8pJiYtLWU7cmV0dXJuIGV9KSgpLHI9eSYmZSxoPShsPXFsKGwpKS5sZW5ndGg7KHJ8fGgpJiYoYS5wb2x5Z29uU3RhcnQoKSxyJiYoYS5saW5lU3RhcnQoKSxvKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpKSxoJiZQYihsLHMsZSxvLGEpLGEucG9seWdvbkVuZCgpKSx2PWEsbD1jPXU9bnVsbH19O2Z1bmN0aW9uIFQodCxlKXtyKHQsZSkmJnYucG9pbnQodCxlKX1mdW5jdGlvbiBDKG8sYSl7dmFyIHM9cihvLGEpO2lmKGMmJnUucHVzaChbbyxhXSksXyloPW8sZD1hLHA9cyxfPSExLHMmJih2LmxpbmVTdGFydCgpLHYucG9pbnQobyxhKSk7ZWxzZSBpZihzJiZnKXYucG9pbnQobyxhKTtlbHNle3ZhciBsPVtmPU1hdGgubWF4KEdiLE1hdGgubWluKGpiLGYpKSxtPU1hdGgubWF4KEdiLE1hdGgubWluKGpiLG0pKV0sYj1bbz1NYXRoLm1heChHYixNYXRoLm1pbihqYixvKSksYT1NYXRoLm1heChHYixNYXRoLm1pbihqYixhKSldOyEoZnVuY3Rpb24geCh0LGUsbixpLHIsbyl7dmFyIGEscz10WzBdLGw9dFsxXSxjPTAsdT0xLGg9ZVswXS1zLGQ9ZVsxXS1sO2lmKGE9bi1zLGh8fCEoYT4wKSl7aWYoYS89aCxoPDApe2lmKGE8YylyZXR1cm47YTx1JiYodT1hKX1lbHNlIGlmKGg+MCl7aWYoYT51KXJldHVybjthPmMmJihjPWEpfWlmKGE9ci1zLGh8fCEoYTwwKSl7aWYoYS89aCxoPDApe2lmKGE+dSlyZXR1cm47YT5jJiYoYz1hKX1lbHNlIGlmKGg+MCl7aWYoYTxjKXJldHVybjthPHUmJih1PWEpfWlmKGE9aS1sLGR8fCEoYT4wKSl7aWYoYS89ZCxkPDApe2lmKGE8YylyZXR1cm47YTx1JiYodT1hKX1lbHNlIGlmKGQ+MCl7aWYoYT51KXJldHVybjthPmMmJihjPWEpfWlmKGE9by1sLGR8fCEoYTwwKSl7aWYoYS89ZCxkPDApe2lmKGE+dSlyZXR1cm47YT5jJiYoYz1hKX1lbHNlIGlmKGQ+MCl7aWYoYTxjKXJldHVybjthPHUmJih1PWEpfXJldHVybiBjPjAmJih0WzBdPXMrYypoLHRbMV09bCtjKmQpLHU8MSYmKGVbMF09cyt1KmgsZVsxXT1sK3UqZCksITB9fX19fSkobCxiLHQsZSxuLGkpP3MmJih2LmxpbmVTdGFydCgpLHYucG9pbnQobyxhKSx5PSExKTooZ3x8KHYubGluZVN0YXJ0KCksdi5wb2ludChsWzBdLGxbMV0pKSx2LnBvaW50KGJbMF0sYlsxXSksc3x8di5saW5lRW5kKCkseT0hMSl9Zj1vLG09YSxnPXN9cmV0dXJuIHh9fXZhciBxYixZYixYYiwkYj1NeSgpLEtiPXtzcGhlcmU6WnkscG9pbnQ6WnksbGluZVN0YXJ0OmZ1bmN0aW9uIFpiKCl7S2IucG9pbnQ9UWIsS2IubGluZUVuZD1KYn0sbGluZUVuZDpaeSxwb2x5Z29uU3RhcnQ6WnkscG9seWdvbkVuZDpaeX07ZnVuY3Rpb24gSmIoKXtLYi5wb2ludD1LYi5saW5lRW5kPVp5fWZ1bmN0aW9uIFFiKHQsZSl7cWI9dCo9T3ksWWI9R3koZSo9T3kpLFhiPUh5KGUpLEtiLnBvaW50PXR4fWZ1bmN0aW9uIHR4KHQsZSl7dCo9T3k7dmFyIG49R3koZSo9T3kpLGk9SHkoZSkscj16eSh0LXFiKSxvPUh5KHIpLGE9aSpHeShyKSxzPVhiKm4tWWIqaSpvLGw9WWIqbitYYippKm87JGIuYWRkKEJ5KHF5KGEqYStzKnMpLGwpKSxxYj10LFliPW4sWGI9aX1mdW5jdGlvbiBleCh0KXtyZXR1cm4gJGIucmVzZXQoKSxpdih0LEtiKSwrJGJ9dmFyIG54PVtudWxsLG51bGxdLGl4PXt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpueH07ZnVuY3Rpb24gcngodCxlKXtyZXR1cm4gbnhbMF09dCxueFsxXT1lLGV4KGl4KX12YXIgb3g9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gc3godC5nZW9tZXRyeSxlKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5mZWF0dXJlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KWlmKHN4KG5baV0uZ2VvbWV0cnksZSkpcmV0dXJuITA7cmV0dXJuITF9fSxheD17U3BoZXJlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LFBvaW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGx4KHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KWlmKGx4KG5baV0sZSkpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gY3godC5jb29yZGluYXRlcyxlKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylpZihjeChuW2ldLGUpKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHV4KHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYodXgobltpXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZ2VvbWV0cmllcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KWlmKHN4KG5baV0sZSkpcmV0dXJuITA7cmV0dXJuITF9fTtmdW5jdGlvbiBzeCh0LGUpe3JldHVybiEoIXR8fCFheC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpKSYmYXhbdC50eXBlXSh0LGUpfWZ1bmN0aW9uIGx4KHQsZSl7cmV0dXJuIDA9PT1yeCh0LGUpfWZ1bmN0aW9uIGN4KHQsZSl7Zm9yKHZhciBuLGkscixvPTAsYT10Lmxlbmd0aDtvPGE7bysrKXtpZigwPT09KGk9cngodFtvXSxlKSkpcmV0dXJuITA7aWYobz4wJiYocj1yeCh0W29dLHRbby0xXSkpPjAmJm48PXImJmk8PXImJihuK2ktcikqKDEtTWF0aC5wb3coKG4taSkvciwyKSk8a3kqcilyZXR1cm4hMDtuPWl9cmV0dXJuITF9ZnVuY3Rpb24gdXgodCxlKXtyZXR1cm4hIU9iKHQubWFwKGh4KSxkeChlKSl9ZnVuY3Rpb24gaHgodCl7cmV0dXJuKHQ9dC5tYXAoZHgpKS5wb3AoKSx0fWZ1bmN0aW9uIGR4KHQpe3JldHVyblt0WzBdKk95LHRbMV0qT3ldfWZ1bmN0aW9uIHB4KHQsZSxuKXt2YXIgaT16bCh0LGUtQXksbikuY29uY2F0KGUpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSkpfX1mdW5jdGlvbiBmeCh0LGUsbil7dmFyIGk9emwodCxlLUF5LG4pLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bZSx0XX0pKX19ZnVuY3Rpb24gbXgoKXt2YXIgdCxlLG4saSxyLG8sYSxzLGwsYyx1LGgsZD0xMCxwPWQsZj05MCxtPTM2MCxnPTIuNTtmdW5jdGlvbiBfKCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eSgpfX1mdW5jdGlvbiB5KCl7cmV0dXJuIHpsKEZ5KGkvZikqZixuLGYpLm1hcCh1KS5jb25jYXQoemwoRnkocy9tKSptLGEsbSkubWFwKGgpKS5jb25jYXQoemwoRnkoZS9kKSpkLHQsZCkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4genkodCVmKT5BeX0pKS5tYXAobCkpLmNvbmNhdCh6bChGeShvL3ApKnAscixwKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB6eSh0JW0pPkF5fSkpLm1hcChjKSl9cmV0dXJuIF8ubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4geSgpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9fSkpfSxfLm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3UoaSkuY29uY2F0KGgoYSkuc2xpY2UoMSksdShuKS5yZXZlcnNlKCkuc2xpY2UoMSksaChzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LF8uZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP18uZXh0ZW50TWFqb3IodCkuZXh0ZW50TWlub3IodCk6Xy5leHRlbnRNaW5vcigpfSxfLmV4dGVudE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0WzBdWzFdLGE9K3RbMV1bMV0sKGk9K3RbMF1bMF0pPihuPSt0WzFdWzBdKSYmKHQ9aSxpPW4sbj10KSxzPmEmJih0PXMscz1hLGE9dCksXy5wcmVjaXNpb24oZykpOltbaSxzXSxbbixhXV19LF8uZXh0ZW50TWlub3I9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K25bMF1bMV0scj0rblsxXVsxXSwoZT0rblswXVswXSk+KHQ9K25bMV1bMF0pJiYobj1lLGU9dCx0PW4pLG8+ciYmKG49byxvPXIscj1uKSxfLnByZWNpc2lvbihnKSk6W1tlLG9dLFt0LHJdXX0sXy5zdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP18uc3RlcE1ham9yKHQpLnN0ZXBNaW5vcih0KTpfLnN0ZXBNaW5vcigpfSxfLnN0ZXBNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0rdFswXSxtPSt0WzFdLF8pOltmLG1dfSxfLnN0ZXBNaW5vcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rdFswXSxwPSt0WzFdLF8pOltkLHBdfSxfLnByZWNpc2lvbj1mdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rZCxsPXB4KG8sciw5MCksYz1meChlLHQsZyksdT1weChzLGEsOTApLGg9ZngoaSxuLGcpLF8pOmd9LF8uZXh0ZW50TWFqb3IoW1stMTgwLC04OS45OTk5OTldLFsxODAsODkuOTk5OTk5XV0pLmV4dGVudE1pbm9yKFtbLTE4MCwtODAuMDAwMDAxXSxbMTgwLDgwLjAwMDAwMV1dKX1mdW5jdGlvbiBneCh0KXtyZXR1cm4gdH12YXIgX3gseXgsdngsYngseHg9TXkoKSx3eD1NeSgpLFN4PXtwb2ludDpaeSxsaW5lU3RhcnQ6WnksbGluZUVuZDpaeSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtTeC5saW5lU3RhcnQ9TXgsU3gubGluZUVuZD1DeH0scG9seWdvbkVuZDpmdW5jdGlvbigpe1N4LmxpbmVTdGFydD1TeC5saW5lRW5kPVN4LnBvaW50PVp5LHh4LmFkZCh6eSh3eCkpLHd4LnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PXh4LzI7cmV0dXJuIHh4LnJlc2V0KCksdH19O2Z1bmN0aW9uIE14KCl7U3gucG9pbnQ9RXh9ZnVuY3Rpb24gRXgodCxlKXtTeC5wb2ludD1UeCxfeD12eD10LHl4PWJ4PWV9ZnVuY3Rpb24gVHgodCxlKXt3eC5hZGQoYngqdC12eCplKSx2eD10LGJ4PWV9ZnVuY3Rpb24gQ3goKXtUeChfeCx5eCl9dmFyIEF4LGt4LEx4LFB4LE54PVN4LEl4PTEvMCxSeD1JeCxPeD0tSXgseng9T3gsRHg9e3BvaW50OmZ1bmN0aW9uIEJ4KHQsZSl7dDxJeCYmKEl4PXQpLHQ+T3gmJihPeD10KSxlPFJ4JiYoUng9ZSksZT56eCYmKHp4PWUpfSxsaW5lU3RhcnQ6WnksbGluZUVuZDpaeSxwb2x5Z29uU3RhcnQ6WnkscG9seWdvbkVuZDpaeSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1bW0l4LFJ4XSxbT3gsenhdXTtyZXR1cm4gT3g9eng9LShSeD1JeD0xLzApLHR9fSxIeD0wLEZ4PTAsVng9MCxVeD0wLGp4PTAsR3g9MCxXeD0wLHF4PTAsWXg9MCxYeD17cG9pbnQ6JHgsbGluZVN0YXJ0Okt4LGxpbmVFbmQ6UXgscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WHgubGluZVN0YXJ0PXR3LFh4LmxpbmVFbmQ9ZXd9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtYeC5wb2ludD0keCxYeC5saW5lU3RhcnQ9S3gsWHgubGluZUVuZD1ReH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9WXg/W1d4L1l4LHF4L1l4XTpHeD9bVXgvR3gsangvR3hdOlZ4P1tIeC9WeCxGeC9WeF06W05hTixOYU5dO3JldHVybiBIeD1GeD1WeD1VeD1qeD1HeD1XeD1xeD1ZeD0wLHR9fTtmdW5jdGlvbiAkeCh0LGUpe0h4Kz10LEZ4Kz1lLCsrVnh9ZnVuY3Rpb24gS3goKXtYeC5wb2ludD1aeH1mdW5jdGlvbiBaeCh0LGUpe1h4LnBvaW50PUp4LCR4KEx4PXQsUHg9ZSl9ZnVuY3Rpb24gSngodCxlKXt2YXIgbj10LUx4LGk9ZS1QeCxyPXF5KG4qbitpKmkpO1V4Kz1yKihMeCt0KS8yLGp4Kz1yKihQeCtlKS8yLEd4Kz1yLCR4KEx4PXQsUHg9ZSl9ZnVuY3Rpb24gUXgoKXtYeC5wb2ludD0keH1mdW5jdGlvbiB0dygpe1h4LnBvaW50PW53fWZ1bmN0aW9uIGV3KCl7aXcoQXgsa3gpfWZ1bmN0aW9uIG53KHQsZSl7WHgucG9pbnQ9aXcsJHgoQXg9THg9dCxreD1QeD1lKX1mdW5jdGlvbiBpdyh0LGUpe3ZhciBuPXQtTHgsaT1lLVB4LHI9cXkobipuK2kqaSk7VXgrPXIqKEx4K3QpLzIsangrPXIqKFB4K2UpLzIsR3grPXIsV3grPShyPVB4KnQtTHgqZSkqKEx4K3QpLHF4Kz1yKihQeCtlKSxZeCs9MypyLCR4KEx4PXQsUHg9ZSl9dmFyIHJ3PVh4O2Z1bmN0aW9uIG93KHQpe3RoaXMuX2NvbnRleHQ9dH1vdy5wcm90b3R5cGU9e19yYWRpdXM6NC41LHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yYWRpdXM9dCx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA9PT10aGlzLl9saW5lJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0K3RoaXMuX3JhZGl1cyxlKSx0aGlzLl9jb250ZXh0LmFyYyh0LGUsdGhpcy5fcmFkaXVzLDAsSXkpfX0scmVzdWx0Olp5fTt2YXIgYXcsc3csbHcsY3csdXcsaHc9TXkoKSxkdz17cG9pbnQ6WnksbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZHcucG9pbnQ9cHd9LGxpbmVFbmQ6ZnVuY3Rpb24oKXthdyYmZncoc3csbHcpLGR3LnBvaW50PVp5fSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXthdz0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe2F3PW51bGx9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PStodztyZXR1cm4gaHcucmVzZXQoKSx0fX07ZnVuY3Rpb24gcHcodCxlKXtkdy5wb2ludD1mdyxzdz1jdz10LGx3PXV3PWV9ZnVuY3Rpb24gZncodCxlKXtody5hZGQocXkoKGN3LT10KSpjdysodXctPWUpKnV3KSksY3c9dCx1dz1lfXZhciBtdz1kdztmdW5jdGlvbiBndygpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiBfdyh0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1mdW5jdGlvbiB5dyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49bmV3IHZ3O2Zvcih2YXIgaSBpbiB0KW5baV09dFtpXTtyZXR1cm4gbi5zdHJlYW09ZSxufX1mdW5jdGlvbiB2dygpe31mdW5jdGlvbiBidyh0LGUsbil7dmFyIGk9dC5jbGlwRXh0ZW50JiZ0LmNsaXBFeHRlbnQoKTtyZXR1cm4gdC5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksbnVsbCE9aSYmdC5jbGlwRXh0ZW50KG51bGwpLGl2KG4sdC5zdHJlYW0oRHgpKSxlKER4LnJlc3VsdCgpKSxudWxsIT1pJiZ0LmNsaXBFeHRlbnQoaSksdH1mdW5jdGlvbiB4dyh0LGUsbil7cmV0dXJuIGJ3KHQsKGZ1bmN0aW9uKG4pe3ZhciBpPWVbMV1bMF0tZVswXVswXSxyPWVbMV1bMV0tZVswXVsxXSxvPU1hdGgubWluKGkvKG5bMV1bMF0tblswXVswXSksci8oblsxXVsxXS1uWzBdWzFdKSksYT0rZVswXVswXSsoaS1vKihuWzFdWzBdK25bMF1bMF0pKS8yLHM9K2VbMF1bMV0rKHItbyooblsxXVsxXStuWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCpvKS50cmFuc2xhdGUoW2Esc10pfSksbil9ZnVuY3Rpb24gd3codCxlLG4pe3JldHVybiB4dyh0LFtbMCwwXSxlXSxuKX1mdW5jdGlvbiBTdyh0LGUsbil7cmV0dXJuIGJ3KHQsKGZ1bmN0aW9uKG4pe3ZhciBpPStlLHI9aS8oblsxXVswXS1uWzBdWzBdKSxvPShpLXIqKG5bMV1bMF0rblswXVswXSkpLzIsYT0tcipuWzBdWzFdO3Quc2NhbGUoMTUwKnIpLnRyYW5zbGF0ZShbbyxhXSl9KSxuKX1mdW5jdGlvbiBNdyh0LGUsbil7cmV0dXJuIGJ3KHQsKGZ1bmN0aW9uKG4pe3ZhciBpPStlLHI9aS8oblsxXVsxXS1uWzBdWzFdKSxvPS1yKm5bMF1bMF0sYT0oaS1yKihuWzFdWzFdK25bMF1bMV0pKS8yO3Quc2NhbGUoMTUwKnIpLnRyYW5zbGF0ZShbbyxhXSl9KSxuKX1ndy5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6X3coNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9dCx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixlKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT1fdyh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsZSx0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19LHZ3LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dncscG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIEV3PUh5KDMwKk95KTtmdW5jdGlvbiBUdyh0LGUpe3JldHVybitlPyhmdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gbihpLHIsbyxhLHMsbCxjLHUsaCxkLHAsZixtLGcpe3ZhciBfPWMtaSx5PXUtcix2PV8qXyt5Knk7aWYodj40KmUmJm0tLSl7dmFyIGI9YStkLHg9cytwLHc9bCtmLFM9cXkoYipiK3gqeCt3KncpLE09JHkody89UyksRT16eSh6eSh3KS0xKTxBeXx8enkoby1oKTxBeT8obytoKS8yOkJ5KHgsYiksVD10KEUsTSksQz1UWzBdLEE9VFsxXSxrPUMtaSxMPUEtcixQPXkqay1fKkw7KFAqUC92PmV8fHp5KChfKmsreSpMKS92LS41KT4uM3x8YSpkK3MqcCtsKmY8RXcpJiYobihpLHIsbyxhLHMsbCxDLEEsRSxiLz1TLHgvPVMsdyxtLGcpLGcucG9pbnQoQyxBKSxuKEMsQSxFLGIseCx3LGMsdSxoLGQscCxmLG0sZykpfX1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGkscixvLGEscyxsLGMsdSxoLGQscCxmLG09e3BvaW50OmcsbGluZVN0YXJ0Ol8sbGluZUVuZDp2LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksbS5saW5lU3RhcnQ9Yn0scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLG0ubGluZVN0YXJ0PV99fTtmdW5jdGlvbiBnKG4saSl7bj10KG4saSksZS5wb2ludChuWzBdLG5bMV0pfWZ1bmN0aW9uIF8oKXt1PU5hTixtLnBvaW50PXksZS5saW5lU3RhcnQoKX1mdW5jdGlvbiB5KGkscil7dmFyIG89X3YoW2kscl0pLGE9dChpLHIpO24odSxoLGMsZCxwLGYsdT1hWzBdLGg9YVsxXSxjPWksZD1vWzBdLHA9b1sxXSxmPW9bMl0sMTYsZSksZS5wb2ludCh1LGgpfWZ1bmN0aW9uIHYoKXttLnBvaW50PWcsZS5saW5lRW5kKCl9ZnVuY3Rpb24gYigpe18oKSxtLnBvaW50PXgsbS5saW5lRW5kPXd9ZnVuY3Rpb24geCh0LGUpe3koaT10LGUpLHI9dSxvPWgsYT1kLHM9cCxsPWYsbS5wb2ludD15fWZ1bmN0aW9uIHcoKXtuKHUsaCxjLGQscCxmLHIsbyxpLGEscyxsLDE2LGUpLG0ubGluZUVuZD12LHYoKX1yZXR1cm4gbX19KSh0LGUpOihmdW5jdGlvbiBpKHQpe3JldHVybiB5dyh7cG9pbnQ6ZnVuY3Rpb24oZSxuKXtlPXQoZSxuKSx0aGlzLnN0cmVhbS5wb2ludChlWzBdLGVbMV0pfX0pfSkodCl9dmFyIEN3PXl3KHtwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQqT3ksZSpPeSl9fSk7ZnVuY3Rpb24gQXcodCxlLG4saSxyKXtmdW5jdGlvbiBvKG8sYSl7cmV0dXJuW2UrdCoobyo9aSksbi10KihhKj1yKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuWyhvLWUpL3QqaSwobi1hKS90KnJdfSxvfWZ1bmN0aW9uIGt3KHQsZSxuLGkscixvKXt2YXIgYT1IeShvKSxzPUd5KG8pLGw9YSp0LGM9cyp0LHU9YS90LGg9cy90LGQ9KHMqbi1hKmUpL3QscD0ocyplK2EqbikvdDtmdW5jdGlvbiBmKHQsbyl7cmV0dXJuW2wqKHQqPWkpLWMqKG8qPXIpK2Usbi1jKnQtbCpvXX1yZXR1cm4gZi5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5baSoodSp0LWgqZStkKSxyKihwLWgqdC11KmUpXX0sZn1mdW5jdGlvbiBMdyh0KXtyZXR1cm4gUHcoKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSkoKX1mdW5jdGlvbiBQdyh0KXt2YXIgZSxuLGkscixvLGEscyxsLGMsdSxoPTE1MCxkPTQ4MCxwPTI1MCxmPTAsbT0wLGc9MCxfPTAseT0wLHY9MCxiPTEseD0xLHc9bnVsbCxTPUhiLE09bnVsbCxFPWd4LFQ9LjU7ZnVuY3Rpb24gQyh0KXtyZXR1cm4gbCh0WzBdKk95LHRbMV0qT3kpfWZ1bmN0aW9uIEEodCl7cmV0dXJuKHQ9bC5pbnZlcnQodFswXSx0WzFdKSkmJlt0WzBdKlJ5LHRbMV0qUnldfWZ1bmN0aW9uIGsoKXt2YXIgdD1rdyhoLDAsMCxiLHgsdikuYXBwbHkobnVsbCxlKGYsbSkpLGk9KHY/a3c6QXcpKGgsZC10WzBdLHAtdFsxXSxiLHgsdik7cmV0dXJuIG49eGIoZyxfLHkpLHM9dmIoZSxpKSxsPXZiKG4scyksYT1UdyhzLFQpLEwoKX1mdW5jdGlvbiBMKCl7cmV0dXJuIGM9dT1udWxsLEN9cmV0dXJuIEMuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBjJiZ1PT09dD9jOmM9Q3coKGZ1bmN0aW9uIGUodCl7cmV0dXJuIHl3KHtwb2ludDpmdW5jdGlvbihlLG4pe3ZhciBpPXQoZSxuKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoaVswXSxpWzFdKX19KX0pKG4pKFMoYShFKHU9dCkpKSkpfSxDLnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9dCx3PXZvaWQgMCxMKCkpOlN9LEMucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9dCxNPWk9cj1vPW51bGwsTCgpKTpFfSxDLmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz0rdD9VYih3PXQqT3kpOih3PW51bGwsSGIpLEwoKSk6dypSeX0sQy5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPW51bGw9PXQ/KE09aT1yPW89bnVsbCxneCk6V2IoTT0rdFswXVswXSxpPSt0WzBdWzFdLHI9K3RbMV1bMF0sbz0rdFsxXVsxXSksTCgpKTpudWxsPT1NP251bGw6W1tNLGldLFtyLG9dXX0sQy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxrKCkpOmh9LEMudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0WzBdLHA9K3RbMV0saygpKTpbZCxwXX0sQy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9dFswXSUzNjAqT3ksbT10WzFdJTM2MCpPeSxrKCkpOltmKlJ5LG0qUnldfSxDLnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10WzBdJTM2MCpPeSxfPXRbMV0lMzYwKk95LHk9dC5sZW5ndGg+Mj90WzJdJTM2MCpPeTowLGsoKSk6W2cqUnksXypSeSx5KlJ5XX0sQy5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10JTM2MCpPeSxrKCkpOnYqUnl9LEMucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9dD8tMToxLGsoKSk6YjwwfSxDLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PXQ/LTE6MSxrKCkpOng8MH0sQy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9VHcocyxUPXQqdCksTCgpKTpxeShUKX0sQy5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geHcoQyx0LGUpfSxDLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gd3coQyx0LGUpfSxDLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFN3KEMsdCxlKX0sQy5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTXcoQyx0LGUpfSxmdW5jdGlvbigpe3JldHVybiBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLEMuaW52ZXJ0PWUuaW52ZXJ0JiZBLGsoKX19ZnVuY3Rpb24gTncodCl7dmFyIGU9MCxuPUx5LzMsaT1Qdyh0KSxyPWkoZSxuKTtyZXR1cm4gci5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aShlPXRbMF0qT3ksbj10WzFdKk95KTpbZSpSeSxuKlJ5XX0scn1mdW5jdGlvbiBJdyh0LGUpe3ZhciBuPUd5KHQpLGk9KG4rR3koZSkpLzI7aWYoenkoaSk8QXkpcmV0dXJuKGZ1bmN0aW9uIHIodCl7dmFyIGU9SHkodCk7ZnVuY3Rpb24gbih0LG4pe3JldHVyblt0KmUsR3kobikvZV19cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuW3QvZSwkeShuKmUpXX0sbn0pKHQpO3ZhciBvPTErbiooMippLW4pLGE9cXkobykvaTtmdW5jdGlvbiBzKHQsZSl7dmFyIG49cXkoby0yKmkqR3koZSkpL2k7cmV0dXJuW24qR3kodCo9aSksYS1uKkh5KHQpXX1yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1hLWUscj1CeSh0LHp5KG4pKSpXeShuKTtyZXR1cm4gbippPDAmJihyLT1MeSpXeSh0KSpXeShuKSksW3IvaSwkeSgoby0odCp0K24qbikqaSppKS8oMippKSldfSxzfWZ1bmN0aW9uIFJ3KCl7cmV0dXJuIE53KEl3KS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfWZ1bmN0aW9uIE93KCl7cmV0dXJuIFJ3KCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9ZnVuY3Rpb24gencodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9SHkoZSkscj1IeShuKSxvPXQoaSpyKTtyZXR1cm5bbypyKkd5KGUpLG8qR3kobildfX1mdW5jdGlvbiBEdyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgaT1xeShlKmUrbipuKSxyPXQoaSksbz1HeShyKSxhPUh5KHIpO3JldHVybltCeShlKm8saSphKSwkeShpJiZuKm8vaSldfX12YXIgQnc9encoKGZ1bmN0aW9uKHQpe3JldHVybiBxeSgyLygxK3QpKX0pKTtCdy5pbnZlcnQ9RHcoKGZ1bmN0aW9uKHQpe3JldHVybiAyKiR5KHQvMil9KSk7dmFyIEh3PXp3KChmdW5jdGlvbih0KXtyZXR1cm4odD1YeSh0KSkmJnQvR3kodCl9KSk7ZnVuY3Rpb24gRncodCxlKXtyZXR1cm5bdCxVeShZeSgoUHkrZSkvMikpXX1mdW5jdGlvbiBWdyh0KXt2YXIgZSxuLGkscj1Mdyh0KSxvPXIuY2VudGVyLGE9ci5zY2FsZSxzPXIudHJhbnNsYXRlLGw9ci5jbGlwRXh0ZW50LGM9bnVsbDtmdW5jdGlvbiB1KCl7dmFyIG89THkqYSgpLHM9cihFYihyLnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gbChudWxsPT1jP1tbc1swXS1vLHNbMV0tb10sW3NbMF0rbyxzWzFdK29dXTp0PT09Rnc/W1tNYXRoLm1heChzWzBdLW8sYyksZV0sW01hdGgubWluKHNbMF0rbyxuKSxpXV06W1tjLE1hdGgubWF4KHNbMV0tbyxlKV0sW24sTWF0aC5taW4oc1sxXStvLGkpXV0pfXJldHVybiByLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhKHQpLHUoKSk6YSgpfSxyLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocyh0KSx1KCkpOnMoKX0sci5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8odCksdSgpKTpvKCl9LHIuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9jPWU9bj1pPW51bGw6KGM9K3RbMF1bMF0sZT0rdFswXVsxXSxuPSt0WzFdWzBdLGk9K3RbMV1bMV0pLHUoKSk6bnVsbD09Yz9udWxsOltbYyxlXSxbbixpXV19LHUoKX1mdW5jdGlvbiBVdyh0KXtyZXR1cm4gWXkoKFB5K3QpLzIpfWZ1bmN0aW9uIGp3KHQsZSl7dmFyIG49SHkodCksaT10PT09ZT9HeSh0KTpVeShuL0h5KGUpKS9VeShVdyhlKS9Vdyh0KSkscj1uKmp5KFV3KHQpLGkpL2k7aWYoIWkpcmV0dXJuIEZ3O2Z1bmN0aW9uIG8odCxlKXtyPjA/ZTwtUHkrQXkmJihlPS1QeStBeSk6ZT5QeS1BeSYmKGU9UHktQXkpO3ZhciBuPXIvankoVXcoZSksaSk7cmV0dXJuW24qR3koaSp0KSxyLW4qSHkoaSp0KV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG49ci1lLG89V3koaSkqcXkodCp0K24qbiksYT1CeSh0LHp5KG4pKSpXeShuKTtyZXR1cm4gbippPDAmJihhLT1MeSpXeSh0KSpXeShuKSksW2EvaSwyKkR5KGp5KHIvbywxL2kpKS1QeV19LG99ZnVuY3Rpb24gR3codCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBXdyh0LGUpe3ZhciBuPUh5KHQpLGk9dD09PWU/R3kodCk6KG4tSHkoZSkpLyhlLXQpLHI9bi9pK3Q7aWYoenkoaSk8QXkpcmV0dXJuIEd3O2Z1bmN0aW9uIG8odCxlKXt2YXIgbj1yLWUsbz1pKnQ7cmV0dXJuW24qR3kobyksci1uKkh5KG8pXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLWUsbz1CeSh0LHp5KG4pKSpXeShuKTtyZXR1cm4gbippPDAmJihvLT1MeSpXeSh0KSpXeShuKSksW28vaSxyLVd5KGkpKnF5KHQqdCtuKm4pXX0sb31Idy5pbnZlcnQ9RHcoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLEZ3LmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqRHkoVnkoZSkpLVB5XX0sR3cuaW52ZXJ0PUd3O3ZhciBxdz0xLjM0MDI2NCxZdz0tLjA4MTEwNixYdz04OTNlLTYsJHc9LjAwMzc5NixLdz1xeSgzKS8yO2Z1bmN0aW9uIFp3KHQsZSl7dmFyIG49JHkoS3cqR3koZSkpLGk9bipuLHI9aSppKmk7cmV0dXJuW3QqSHkobikvKEt3KihxdyszKll3KmkrciooNypYdys5KiR3KmkpKSksbioocXcrWXcqaStyKihYdyskdyppKSldfWZ1bmN0aW9uIEp3KHQsZSl7dmFyIG49SHkoZSksaT1IeSh0KSpuO3JldHVybltuKkd5KHQpL2ksR3koZSkvaV19ZnVuY3Rpb24gUXcodCxlKXt2YXIgbj1lKmUsaT1uKm47cmV0dXJuW3QqKC44NzA3LS4xMzE5NzkqbitpKihpKiguMDAzOTcxKm4tLjAwMTUyOSppKS0uMDEzNzkxKSksZSooMS4wMDcyMjYrbiooLjAxNTA4NStpKiguMDI4ODc0Km4tLjA0NDQ3NS0uMDA1OTE2KmkpKSldfWZ1bmN0aW9uIHRTKHQsZSl7cmV0dXJuW0h5KGUpKkd5KHQpLEd5KGUpXX1mdW5jdGlvbiBlUyh0LGUpe3ZhciBuPUh5KGUpLGk9MStIeSh0KSpuO3JldHVybltuKkd5KHQpL2ksR3koZSkvaV19ZnVuY3Rpb24gblModCxlKXtyZXR1cm5bVXkoWXkoKFB5K2UpLzIpKSwtdF19ZnVuY3Rpb24gaVModCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gclModCxlKXtyZXR1cm4gdCtlLnh9ZnVuY3Rpb24gb1ModCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLnkpfWZ1bmN0aW9uIGFTKHQpe3ZhciBlPTAsbj10LmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7aWYoaSlmb3IoOy0taT49MDspZSs9bltpXS52YWx1ZTtlbHNlIGU9MTt0LnZhbHVlPWV9ZnVuY3Rpb24gc1ModCxlKXt2YXIgbixpLHIsbyxhLHM9bmV3IGhTKHQpLGw9K3QudmFsdWUmJihzLnZhbHVlPXQudmFsdWUpLGM9W3NdO2ZvcihudWxsPT1lJiYoZT1sUyk7bj1jLnBvcCgpOylpZihsJiYobi52YWx1ZT0rbi5kYXRhLnZhbHVlKSwocj1lKG4uZGF0YSkpJiYoYT1yLmxlbmd0aCkpZm9yKG4uY2hpbGRyZW49bmV3IEFycmF5KGEpLG89YS0xO28+PTA7LS1vKWMucHVzaChpPW4uY2hpbGRyZW5bb109bmV3IGhTKHJbb10pKSxpLnBhcmVudD1uLGkuZGVwdGg9bi5kZXB0aCsxO3JldHVybiBzLmVhY2hCZWZvcmUodVMpfWZ1bmN0aW9uIGxTKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIGNTKHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiB1Uyh0KXt2YXIgZT0wO2Rve3QuaGVpZ2h0PWV9d2hpbGUoKHQ9dC5wYXJlbnQpJiZ0LmhlaWdodDwrK2UpfWZ1bmN0aW9uIGhTKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfVp3LmludmVydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbixpPWUscj1pKmksbz1yKnIqcixhPTA7YTwxMiYmKG89KHI9KGktPW49KGkqKHF3K1l3KnIrbyooWHcrJHcqcikpLWUpLyhxdyszKll3KnIrbyooNypYdys5KiR3KnIpKSkqaSkqcipyLCEoenkobik8a3kpKTsrK2EpO3JldHVybltLdyp0KihxdyszKll3KnIrbyooNypYdys5KiR3KnIpKS9IeShpKSwkeShHeShpKS9LdyldfSxKdy5pbnZlcnQ9RHcoRHkpLFF3LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuLGk9ZSxyPTI1O2Rve3ZhciBvPWkqaSxhPW8qbztpLT1uPShpKigxLjAwNzIyNitvKiguMDE1MDg1K2EqKC4wMjg4NzQqby0uMDQ0NDc1LS4wMDU5MTYqYSkpKS1lKS8oMS4wMDcyMjYrbyooLjA0NTI1NSthKiguMjU5ODY2Km8tLjMxMTMyNS0uMDA1OTE2KjExKmEpKSl9d2hpbGUoenkobik+QXkmJi0tcj4wKTtyZXR1cm5bdC8oLjg3MDcrKG89aSppKSoobyoobypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKS0uMDEzNzkxKS0uMTMxOTc5KSksaV19LHRTLmludmVydD1EdygkeSksZVMuaW52ZXJ0PUR3KChmdW5jdGlvbih0KXtyZXR1cm4gMipEeSh0KX0pKSxuUy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bLWUsMipEeShWeSh0KSktUHldfSxoUy5wcm90b3R5cGU9c1MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpoUyxjb3VudDpmdW5jdGlvbiBkUygpe3JldHVybiB0aGlzLmVhY2hBZnRlcihhUyl9LGVhY2g6ZnVuY3Rpb24gcFModCl7dmFyIGUsbixpLHIsbz10aGlzLGE9W29dO2Rve2ZvcihlPWEucmV2ZXJzZSgpLGE9W107bz1lLnBvcCgpOylpZih0KG8pLG49by5jaGlsZHJlbilmb3IoaT0wLHI9bi5sZW5ndGg7aTxyOysraSlhLnB1c2gobltpXSl9d2hpbGUoYS5sZW5ndGgpO3JldHVybiB0aGlzfSxlYWNoQWZ0ZXI6ZnVuY3Rpb24gZlModCl7Zm9yKHZhciBlLG4saSxyPXRoaXMsbz1bcl0sYT1bXTtyPW8ucG9wKCk7KWlmKGEucHVzaChyKSxlPXIuY2hpbGRyZW4pZm9yKG49MCxpPWUubGVuZ3RoO248aTsrK24pby5wdXNoKGVbbl0pO2Zvcig7cj1hLnBvcCgpOyl0KHIpO3JldHVybiB0aGlzfSxlYWNoQmVmb3JlOmZ1bmN0aW9uIG1TKHQpe2Zvcih2YXIgZSxuLGk9dGhpcyxyPVtpXTtpPXIucG9wKCk7KWlmKHQoaSksZT1pLmNoaWxkcmVuKWZvcihuPWUubGVuZ3RoLTE7bj49MDstLW4pci5wdXNoKGVbbl0pO3JldHVybiB0aGlzfSxzdW06ZnVuY3Rpb24gZ1ModCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKChmdW5jdGlvbihlKXtmb3IodmFyIG49K3QoZS5kYXRhKXx8MCxpPWUuY2hpbGRyZW4scj1pJiZpLmxlbmd0aDstLXI+PTA7KW4rPWlbcl0udmFsdWU7ZS52YWx1ZT1ufSkpfSxzb3J0OmZ1bmN0aW9uIF9TKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW4mJmUuY2hpbGRyZW4uc29ydCh0KX0pKX0scGF0aDpmdW5jdGlvbiB5Uyh0KXtmb3IodmFyIGU9dGhpcyxuPShmdW5jdGlvbiBpKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIG49dC5hbmNlc3RvcnMoKSxpPWUuYW5jZXN0b3JzKCkscj1udWxsO2Zvcih0PW4ucG9wKCksZT1pLnBvcCgpO3Q9PT1lOylyPXQsdD1uLnBvcCgpLGU9aS5wb3AoKTtyZXR1cm4gcn0pKGUsdCkscj1bZV07ZSE9PW47KXIucHVzaChlPWUucGFyZW50KTtmb3IodmFyIG89ci5sZW5ndGg7dCE9PW47KXIuc3BsaWNlKG8sMCx0KSx0PXQucGFyZW50O3JldHVybiByfSxhbmNlc3RvcnM6ZnVuY3Rpb24gdlMoKXtmb3IodmFyIHQ9dGhpcyxlPVt0XTt0PXQucGFyZW50OyllLnB1c2godCk7cmV0dXJuIGV9LGRlc2NlbmRhbnRzOmZ1bmN0aW9uIGJTKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSkpLHR9LGxlYXZlczpmdW5jdGlvbiB4Uygpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fHQucHVzaChlKX0pKSx0fSxsaW5rczpmdW5jdGlvbiB3Uygpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbihuKXtuIT09dCYmZS5wdXNoKHtzb3VyY2U6bi5wYXJlbnQsdGFyZ2V0Om59KX0pKSxlfSxjb3B5OmZ1bmN0aW9uIFNTKCl7cmV0dXJuIHNTKHRoaXMpLmVhY2hCZWZvcmUoY1MpfX07dmFyIE1TPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBFUyh0KXtmb3IodmFyIGUsbixpPTAscj0odD0oZnVuY3Rpb24gbyh0KXtmb3IodmFyIGUsbixpPXQubGVuZ3RoO2k7KW49TWF0aC5yYW5kb20oKSppLS18MCxlPXRbaV0sdFtpXT10W25dLHRbbl09ZTtyZXR1cm4gdH0pKE1TLmNhbGwodCkpKS5sZW5ndGgsYT1bXTtpPHI7KWU9dFtpXSxuJiZBUyhuLGUpPysraToobj1MUyhhPVRTKGEsZSkpLGk9MCk7cmV0dXJuIG59ZnVuY3Rpb24gVFModCxlKXt2YXIgbixpO2lmKGtTKGUsdCkpcmV0dXJuW2VdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24paWYoQ1MoZSx0W25dKSYma1MoUFModFtuXSxlKSx0KSlyZXR1cm5bdFtuXSxlXTtmb3Iobj0wO248dC5sZW5ndGgtMTsrK24pZm9yKGk9bisxO2k8dC5sZW5ndGg7KytpKWlmKENTKFBTKHRbbl0sdFtpXSksZSkmJkNTKFBTKHRbbl0sZSksdFtpXSkmJkNTKFBTKHRbaV0sZSksdFtuXSkmJmtTKE5TKHRbbl0sdFtpXSxlKSx0KSlyZXR1cm5bdFtuXSx0W2ldLGVdO3Rocm93IG5ldyBFcnJvcn1mdW5jdGlvbiBDUyh0LGUpe3ZhciBuPXQuci1lLnIsaT1lLngtdC54LHI9ZS55LXQueTtyZXR1cm4gbjwwfHxuKm48aSppK3Iqcn1mdW5jdGlvbiBBUyh0LGUpe3ZhciBuPXQuci1lLnIrMWUtNixpPWUueC10Lngscj1lLnktdC55O3JldHVybiBuPjAmJm4qbj5pKmkrcipyfWZ1bmN0aW9uIGtTKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24paWYoIUFTKHQsZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gTFModCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJue3g6dC54LHk6dC55LHI6dC5yfX0pKHRbMF0pO2Nhc2UgMjpyZXR1cm4gUFModFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIE5TKHRbMF0sdFsxXSx0WzJdKX19ZnVuY3Rpb24gUFModCxlKXt2YXIgbj10LngsaT10Lnkscj10LnIsbz1lLngsYT1lLnkscz1lLnIsbD1vLW4sYz1hLWksdT1zLXIsaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KG4rbytsL2gqdSkvMix5OihpK2ErYy9oKnUpLzIscjooaCtyK3MpLzJ9fWZ1bmN0aW9uIE5TKHQsZSxuKXt2YXIgaT10Lngscj10Lnksbz10LnIsYT1lLngscz1lLnksbD1lLnIsYz1uLngsdT1uLnksaD1uLnIsZD1pLWEscD1pLWMsZj1yLXMsbT1yLXUsZz1sLW8sXz1oLW8seT1pKmkrcipyLW8qbyx2PXktYSphLXMqcytsKmwsYj15LWMqYy11KnUraCpoLHg9cCpmLWQqbSx3PShmKmItbSp2KS8oMip4KS1pLFM9KG0qZy1mKl8pL3gsTT0ocCp2LWQqYikvKDIqeCktcixFPShkKl8tcCpnKS94LFQ9UypTK0UqRS0xLEM9Mioobyt3KlMrTSpFKSxBPXcqdytNKk0tbypvLGs9LShUPyhDK01hdGguc3FydChDKkMtNCpUKkEpKS8oMipUKTpBL0MpO3JldHVybnt4OmkrdytTKmsseTpyK00rRSprLHI6a319ZnVuY3Rpb24gSVModCxlLG4pe3ZhciBpLHIsbyxhLHM9dC54LWUueCxsPXQueS1lLnksYz1zKnMrbCpsO2M/KHI9ZS5yK24ucixhPXQucituLnIsKHIqPXIpPihhKj1hKT8oaT0oYythLXIpLygyKmMpLG89TWF0aC5zcXJ0KE1hdGgubWF4KDAsYS9jLWkqaSkpLG4ueD10LngtaSpzLW8qbCxuLnk9dC55LWkqbCtvKnMpOihpPShjK3ItYSkvKDIqYyksbz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxyL2MtaSppKSksbi54PWUueCtpKnMtbypsLG4ueT1lLnkraSpsK28qcykpOihuLng9ZS54K24ucixuLnk9ZS55KX1mdW5jdGlvbiBSUyh0LGUpe3ZhciBuPXQucitlLnItMWUtNixpPWUueC10Lngscj1lLnktdC55O3JldHVybiBuPjAmJm4qbj5pKmkrcipyfWZ1bmN0aW9uIE9TKHQpe3ZhciBlPXQuXyxuPXQubmV4dC5fLGk9ZS5yK24ucixyPShlLngqbi5yK24ueCplLnIpL2ksbz0oZS55Km4ucituLnkqZS5yKS9pO3JldHVybiByKnIrbypvfWZ1bmN0aW9uIHpTKHQpe3RoaXMuXz10LHRoaXMubmV4dD1udWxsLHRoaXMucHJldmlvdXM9bnVsbH1mdW5jdGlvbiBEUyh0KXtpZighKHI9dC5sZW5ndGgpKXJldHVybiAwO3ZhciBlLG4saSxyLG8sYSxzLGwsYyx1LGg7aWYoKGU9dFswXSkueD0wLGUueT0wLCEocj4xKSlyZXR1cm4gZS5yO2lmKGUueD0tKG49dFsxXSkucixuLng9ZS5yLG4ueT0wLCEocj4yKSlyZXR1cm4gZS5yK24ucjtJUyhuLGUsaT10WzJdKSxlPW5ldyB6UyhlKSxuPW5ldyB6UyhuKSxpPW5ldyB6UyhpKSxlLm5leHQ9aS5wcmV2aW91cz1uLG4ubmV4dD1lLnByZXZpb3VzPWksaS5uZXh0PW4ucHJldmlvdXM9ZTt0OmZvcihzPTM7czxyOysrcyl7SVMoZS5fLG4uXyxpPXRbc10pLGk9bmV3IHpTKGkpLGw9bi5uZXh0LGM9ZS5wcmV2aW91cyx1PW4uXy5yLGg9ZS5fLnI7ZG97aWYodTw9aCl7aWYoUlMobC5fLGkuXykpe2UubmV4dD1uPWwsbi5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYoUlMoYy5fLGkuXykpeyhlPWMpLm5leHQ9bixuLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9aCs9Yy5fLnIsYz1jLnByZXZpb3VzfX13aGlsZShsIT09Yy5uZXh0KTtmb3IoaS5wcmV2aW91cz1lLGkubmV4dD1uLGUubmV4dD1uLnByZXZpb3VzPW49aSxvPU9TKGUpOyhpPWkubmV4dCkhPT1uOykoYT1PUyhpKSk8byYmKGU9aSxvPWEpO249ZS5uZXh0fWZvcihlPVtuLl9dLGk9bjsoaT1pLm5leHQpIT09bjspZS5wdXNoKGkuXyk7Zm9yKGk9RVMoZSkscz0wO3M8cjsrK3MpKGU9dFtzXSkueC09aS54LGUueS09aS55O3JldHVybiBpLnJ9ZnVuY3Rpb24gQlModCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpIUyh0KX1mdW5jdGlvbiBIUyh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHR9ZnVuY3Rpb24gRlMoKXtyZXR1cm4gMH1mdW5jdGlvbiBWUyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gVVModCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX1mdW5jdGlvbiBqUyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8KGUucj1NYXRoLm1heCgwLCt0KGUpfHwwKSl9fWZ1bmN0aW9uIEdTKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKGk9bi5jaGlsZHJlbil7dmFyIGkscixvLGE9aS5sZW5ndGgscz10KG4pKmV8fDA7aWYocylmb3Iocj0wO3I8YTsrK3IpaVtyXS5yKz1zO2lmKG89RFMoaSkscylmb3Iocj0wO3I8YTsrK3IpaVtyXS5yLT1zO24ucj1vK3N9fX1mdW5jdGlvbiBXUyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49ZS5wYXJlbnQ7ZS5yKj10LG4mJihlLng9bi54K3QqZS54LGUueT1uLnkrdCplLnkpfX1mdW5jdGlvbiBxUyh0KXt0LngwPU1hdGgucm91bmQodC54MCksdC55MD1NYXRoLnJvdW5kKHQueTApLHQueDE9TWF0aC5yb3VuZCh0LngxKSx0LnkxPU1hdGgucm91bmQodC55MSl9ZnVuY3Rpb24gWVModCxlLG4saSxyKXtmb3IodmFyIG8sYT10LmNoaWxkcmVuLHM9LTEsbD1hLmxlbmd0aCxjPXQudmFsdWUmJihpLWUpL3QudmFsdWU7KytzPGw7KShvPWFbc10pLnkwPW4sby55MT1yLG8ueDA9ZSxvLngxPWUrPW8udmFsdWUqY312YXIgWFM9e2RlcHRoOi0xfSwkUz17fTtmdW5jdGlvbiBLUyh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBaUyh0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBKUyh0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiBRUyh0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbMF06dC50fWZ1bmN0aW9uIHRNKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVtlLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gZU0odCxlLG4pe3ZhciBpPW4vKGUuaS10LmkpO2UuYy09aSxlLnMrPW4sdC5jKz1pLGUueis9bixlLm0rPW59ZnVuY3Rpb24gbk0odCxlLG4pe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOm59ZnVuY3Rpb24gaU0odCxlKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9ZX1mdW5jdGlvbiByTSh0LGUsbixpLHIpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4scz0tMSxsPWEubGVuZ3RoLGM9dC52YWx1ZSYmKHItbikvdC52YWx1ZTsrK3M8bDspKG89YVtzXSkueDA9ZSxvLngxPWksby55MD1uLG8ueTE9bis9by52YWx1ZSpjfWlNLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGhTLnByb3RvdHlwZSk7dmFyIG9NPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiBhTSh0LGUsbixpLHIsbyl7Zm9yKHZhciBhLHMsbCxjLHUsaCxkLHAsZixtLGcsXz1bXSx5PWUuY2hpbGRyZW4sdj0wLGI9MCx4PXkubGVuZ3RoLHc9ZS52YWx1ZTt2PHg7KXtsPXItbixjPW8taTtkb3t1PXlbYisrXS52YWx1ZX13aGlsZSghdSYmYjx4KTtmb3IoaD1kPXUsZz11KnUqKG09TWF0aC5tYXgoYy9sLGwvYykvKHcqdCkpLGY9TWF0aC5tYXgoZC9nLGcvaCk7Yjx4OysrYil7aWYodSs9cz15W2JdLnZhbHVlLHM8aCYmKGg9cykscz5kJiYoZD1zKSxnPXUqdSptLChwPU1hdGgubWF4KGQvZyxnL2gpKT5mKXt1LT1zO2JyZWFrfWY9cH1fLnB1c2goYT17dmFsdWU6dSxkaWNlOmw8YyxjaGlsZHJlbjp5LnNsaWNlKHYsYil9KSxhLmRpY2U/WVMoYSxuLGkscix3P2krPWMqdS93Om8pOnJNKGEsbixpLHc/bis9bCp1L3c6cixvKSx3LT11LHY9Yn1yZXR1cm4gX312YXIgc009KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4saSxyLG8pe2FNKGUsdCxuLGkscixvKX1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxufSkob00pLGxNPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLGkscixvKXtpZigoYT10Ll9zcXVhcmlmeSkmJmEucmF0aW89PT1lKWZvcih2YXIgYSxzLGwsYyx1LGg9LTEsZD1hLmxlbmd0aCxwPXQudmFsdWU7KytoPGQ7KXtmb3IobD0ocz1hW2hdKS5jaGlsZHJlbixjPXMudmFsdWU9MCx1PWwubGVuZ3RoO2M8dTsrK2Mpcy52YWx1ZSs9bFtjXS52YWx1ZTtzLmRpY2U/WVMocyxuLGkscixpKz0oby1pKSpzLnZhbHVlL3ApOnJNKHMsbixpLG4rPShyLW4pKnMudmFsdWUvcCxvKSxwLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9YT1hTShlLHQsbixpLHIsbyksYS5yYXRpbz1lfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KShvTSk7ZnVuY3Rpb24gY00odCxlLG4pe3JldHVybihlWzBdLXRbMF0pKihuWzFdLXRbMV0pLShlWzFdLXRbMV0pKihuWzBdLXRbMF0pfWZ1bmN0aW9uIHVNKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIGhNKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxuPVswLDFdLGk9MixyPTI7cjxlOysrcil7Zm9yKDtpPjEmJmNNKHRbbltpLTJdXSx0W25baS0xXV0sdFtyXSk8PTA7KS0taTtuW2krK109cn1yZXR1cm4gbi5zbGljZSgwLGkpfWZ1bmN0aW9uIGRNKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9dmFyIHBNPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sMT09PWFyZ3VtZW50cy5sZW5ndGg/KG49dCx0PTApOm4tPXQsZnVuY3Rpb24oKXtyZXR1cm4gZSgpKm4rdH19cmV0dXJuIG4uc291cmNlPXQsbn0pKGRNKSxmTT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7dmFyIGkscjtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sZnVuY3Rpb24oKXt2YXIgbztpZihudWxsIT1pKW89aSxpPW51bGw7ZWxzZSBkb3tpPTIqZSgpLTEsbz0yKmUoKS0xLHI9aSppK28qb313aGlsZSghcnx8cj4xKTtyZXR1cm4gdCtuKm8qTWF0aC5zcXJ0KC0yKk1hdGgubG9nKHIpL3IpfX1yZXR1cm4gbi5zb3VyY2U9dCxufSkoZE0pLG1NPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4oKXt2YXIgdD1mTS5zb3VyY2UoZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cCh0KCkpfX1yZXR1cm4gbi5zb3VyY2U9dCxufSkoZE0pLGdNPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsaT0wO2k8dDsrK2kpbis9ZSgpO3JldHVybiBufX1yZXR1cm4gbi5zb3VyY2U9dCxufSkoZE0pLF9NPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49Z00uc291cmNlKGUpKHQpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKCkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0pKGRNKSx5TT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLWUoKSkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0pKGRNKTtmdW5jdGlvbiB2TSh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UodCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGUpLmRvbWFpbih0KX1yZXR1cm4gdGhpc31mdW5jdGlvbiBiTSh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMuaW50ZXJwb2xhdG9yKHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5pbnRlcnBvbGF0b3IoZSkuZG9tYWluKHQpfXJldHVybiB0aGlzfXZhciB4TT1BcnJheS5wcm90b3R5cGUsd009eE0ubWFwLFNNPXhNLnNsaWNlLE1NPXtuYW1lOiJpbXBsaWNpdCJ9O2Z1bmN0aW9uIEVNKCl7dmFyIHQ9d2coKSxlPVtdLG49W10saT1NTTtmdW5jdGlvbiByKHIpe3ZhciBvPXIrIiIsYT10LmdldChvKTtpZighYSl7aWYoaSE9PU1NKXJldHVybiBpO3Quc2V0KG8sYT1lLnB1c2gocikpfXJldHVybiBuWyhhLTEpJW4ubGVuZ3RoXX1yZXR1cm4gci5kb21haW49ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdLHQ9d2coKTtmb3IodmFyIGksbyxhPS0xLHM9bi5sZW5ndGg7KythPHM7KXQuaGFzKG89KGk9blthXSkrIiIpfHx0LnNldChvLGUucHVzaChpKSk7cmV0dXJuIHJ9LHIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49U00uY2FsbCh0KSxyKTpuLnNsaWNlKCl9LHIudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHIpOml9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiBFTShlLG4pLnVua25vd24oaSl9LHZNLmFwcGx5KHIsYXJndW1lbnRzKSxyfWZ1bmN0aW9uIFRNKCl7dmFyIHQsZSxuPUVNKCkudW5rbm93bih2b2lkIDApLGk9bi5kb21haW4scj1uLnJhbmdlLG89WzAsMV0sYT0hMSxzPTAsbD0wLGM9LjU7ZnVuY3Rpb24gdSgpe3ZhciBuPWkoKS5sZW5ndGgsdT1vWzFdPG9bMF0saD1vW3UtMF0sZD1vWzEtdV07dD0oZC1oKS9NYXRoLm1heCgxLG4tcysyKmwpLGEmJih0PU1hdGguZmxvb3IodCkpLGgrPShkLWgtdCoobi1zKSkqYyxlPXQqKDEtcyksYSYmKGg9TWF0aC5yb3VuZChoKSxlPU1hdGgucm91bmQoZSkpO3ZhciBwPXpsKG4pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGgrdCplfSkpO3JldHVybiByKHU/cC5yZXZlcnNlKCk6cCl9cmV0dXJuIGRlbGV0ZSBuLnVua25vd24sbi5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkodCksdSgpKTppKCl9LG4ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89Wyt0WzBdLCt0WzFdXSx1KCkpOm8uc2xpY2UoKX0sbi5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBvPVsrdFswXSwrdFsxXV0sYT0hMCx1KCl9LG4uYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LG4uc3RlcD1mdW5jdGlvbigpe3JldHVybiB0fSxuLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhdCx1KCkpOmF9LG4ucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLGw9K3QpLHUoKSk6c30sbi5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5taW4oMSx0KSx1KCkpOnN9LG4ucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSt0LHUoKSk6bH0sbi5hbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLHUoKSk6Y30sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFRNKGkoKSxvKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSx2TS5hcHBseSh1KCksYXJndW1lbnRzKX1mdW5jdGlvbiBDTSh0KXt2YXIgZT10LmNvcHk7cmV0dXJuIHQucGFkZGluZz10LnBhZGRpbmdPdXRlcixkZWxldGUgdC5wYWRkaW5nSW5uZXIsZGVsZXRlIHQucGFkZGluZ091dGVyLHQuY29weT1mdW5jdGlvbigpe3JldHVybiBDTShlKCkpfSx0fWZ1bmN0aW9uIEFNKCl7cmV0dXJuIENNKFRNLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uIGtNKHQpe3JldHVybit0fXZhciBMTT1bMCwxXTtmdW5jdGlvbiBQTSh0KXtyZXR1cm4gdH1mdW5jdGlvbiBOTSh0LGUpe3JldHVybihlLT10PSt0KT9mdW5jdGlvbihuKXtyZXR1cm4obi10KS9lfTooZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KShpc05hTihlKT9OYU46LjUpfWZ1bmN0aW9uIElNKHQpe3ZhciBlLG49dFswXSxpPXRbdC5sZW5ndGgtMV07cmV0dXJuIG4+aSYmKGU9bixuPWksaT1lKSxmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgobixNYXRoLm1pbihpLHQpKX19ZnVuY3Rpb24gUk0odCxlLG4pe3ZhciBpPXRbMF0scj10WzFdLG89ZVswXSxhPWVbMV07cmV0dXJuIHI8aT8oaT1OTShyLGkpLG89bihhLG8pKTooaT1OTShpLHIpLG89bihvLGEpKSxmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHQpKX19ZnVuY3Rpb24gT00odCxlLG4pe3ZhciBpPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKS0xLHI9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLGE9LTE7Zm9yKHRbaV08dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpOysrYTxpOylyW2FdPU5NKHRbYV0sdFthKzFdKSxvW2FdPW4oZVthXSxlW2ErMV0pO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1TbCh0LGUsMSxpKS0xO3JldHVybiBvW25dKHJbbl0oZSkpfX1mdW5jdGlvbiB6TSh0LGUpe3JldHVybiBlLmRvbWFpbih0LmRvbWFpbigpKS5yYW5nZSh0LnJhbmdlKCkpLmludGVycG9sYXRlKHQuaW50ZXJwb2xhdGUoKSkuY2xhbXAodC5jbGFtcCgpKS51bmtub3duKHQudW5rbm93bigpKX1mdW5jdGlvbiBETSgpe3ZhciB0LGUsbixpLHIsbyxhPUxNLHM9TE0sbD1qZCxjPVBNO2Z1bmN0aW9uIHUoKXtyZXR1cm4gaT1NYXRoLm1pbihhLmxlbmd0aCxzLmxlbmd0aCk+Mj9PTTpSTSxyPW89bnVsbCxofWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGlzTmFOKGU9K2UpP246KHJ8fChyPWkoYS5tYXAodCkscyxsKSkpKHQoYyhlKSkpfXJldHVybiBoLmludmVydD1mdW5jdGlvbihuKXtyZXR1cm4gYyhlKChvfHwobz1pKHMsYS5tYXAodCksQmQpKSkobikpKX0saC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9d00uY2FsbCh0LGtNKSxjPT09UE18fChjPUlNKGEpKSx1KCkpOmEuc2xpY2UoKX0saC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1TTS5jYWxsKHQpLHUoKSk6cy5zbGljZSgpfSxoLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHM9U00uY2FsbCh0KSxsPUdkLHUoKX0saC5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10P0lNKGEpOlBNLGgpOmMhPT1QTX0saC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10LHUoKSk6bH0saC51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaCk6bn0sZnVuY3Rpb24obixpKXtyZXR1cm4gdD1uLGU9aSx1KCl9fWZ1bmN0aW9uIEJNKHQsZSl7cmV0dXJuIERNKCkodCxlKX1mdW5jdGlvbiBITSh0LGUsbixpKXt2YXIgcixvPVVsKHQsZSxuKTtzd2l0Y2goKGk9c3kobnVsbD09aT8iLGYiOmkpKS50eXBlKXtjYXNlInMiOnZhciBhPU1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKTtyZXR1cm4gbnVsbCE9aS5wcmVjaXNpb258fGlzTmFOKHI9d3kobyxhKSl8fChpLnByZWNpc2lvbj1yKSxneShpLGEpO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPWkucHJlY2lzaW9ufHxpc05hTihyPVN5KG8sTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpKSl8fChpLnByZWNpc2lvbj1yLSgiZSI9PT1pLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9aS5wcmVjaXNpb258fGlzTmFOKHI9eHkobykpfHwoaS5wcmVjaXNpb249ci0yKigiJSI9PT1pLnR5cGUpKX1yZXR1cm4gbXkoaSl9ZnVuY3Rpb24gRk0odCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBGbChuWzBdLG5bbi5sZW5ndGgtMV0sbnVsbD09dD8xMDp0KX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsbil7dmFyIGk9ZSgpO3JldHVybiBITShpWzBdLGlbaS5sZW5ndGgtMV0sbnVsbD09dD8xMDp0LG4pfSx0Lm5pY2U9ZnVuY3Rpb24obil7bnVsbD09biYmKG49MTApO3ZhciBpLHI9ZSgpLG89MCxhPXIubGVuZ3RoLTEscz1yW29dLGw9clthXTtyZXR1cm4gbDxzJiYoaT1zLHM9bCxsPWksaT1vLG89YSxhPWkpLChpPVZsKHMsbCxuKSk+MD9pPVZsKHM9TWF0aC5mbG9vcihzL2kpKmksbD1NYXRoLmNlaWwobC9pKSppLG4pOmk8MCYmKGk9Vmwocz1NYXRoLmNlaWwocyppKS9pLGw9TWF0aC5mbG9vcihsKmkpL2ksbikpLGk+MD8ocltvXT1NYXRoLmZsb29yKHMvaSkqaSxyW2FdPU1hdGguY2VpbChsL2kpKmksZShyKSk6aTwwJiYocltvXT1NYXRoLmNlaWwocyppKS9pLHJbYV09TWF0aC5mbG9vcihsKmkpL2ksZShyKSksdH0sdH1mdW5jdGlvbiBWTSgpe3ZhciB0PUJNKFBNLFBNKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHpNKHQsVk0oKSl9LHZNLmFwcGx5KHQsYXJndW1lbnRzKSxGTSh0KX1mdW5jdGlvbiBVTSh0LGUpe3ZhciBuLGk9MCxyPSh0PXQuc2xpY2UoKSkubGVuZ3RoLTEsbz10W2ldLGE9dFtyXTtyZXR1cm4gYTxvJiYobj1pLGk9cixyPW4sbj1vLG89YSxhPW4pLHRbaV09ZS5mbG9vcihvKSx0W3JdPWUuY2VpbChhKSx0fWZ1bmN0aW9uIGpNKHQpe3JldHVybiBNYXRoLmxvZyh0KX1mdW5jdGlvbiBHTSh0KXtyZXR1cm4gTWF0aC5leHAodCl9ZnVuY3Rpb24gV00odCl7cmV0dXJuLU1hdGgubG9nKC10KX1mdW5jdGlvbiBxTSh0KXtyZXR1cm4tTWF0aC5leHAoLXQpfWZ1bmN0aW9uIFlNKHQpe3JldHVybiBpc0Zpbml0ZSh0KT8rKCIxZSIrdCk6dDwwPzA6dH1mdW5jdGlvbiBYTSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLXQoLWUpfX1mdW5jdGlvbiAkTSh0KXt2YXIgZSxuLGk9dChqTSxHTSkscj1pLmRvbWFpbixvPTEwO2Z1bmN0aW9uIGEoKXtyZXR1cm4gZT0oZnVuY3Rpb24gYSh0KXtyZXR1cm4gdD09PU1hdGguRT9NYXRoLmxvZzoxMD09PXQmJk1hdGgubG9nMTB8fDI9PT10JiZNYXRoLmxvZzJ8fCh0PU1hdGgubG9nKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhlKS90fSl9KShvKSxuPShmdW5jdGlvbiBzKHQpe3JldHVybiAxMD09PXQ/WU06dD09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3codCxlKX19KShvKSxyKClbMF08MD8oZT1YTShlKSxuPVhNKG4pLHQoV00scU0pKTp0KGpNLEdNKSxpfXJldHVybiBpLmJhc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsYSgpKTpvfSxpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocih0KSxhKCkpOnIoKX0saS50aWNrcz1mdW5jdGlvbih0KXt2YXIgaSxhPXIoKSxzPWFbMF0sbD1hW2EubGVuZ3RoLTFdOyhpPWw8cykmJihkPXMscz1sLGw9ZCk7dmFyIGMsdSxoLGQ9ZShzKSxwPWUobCksZj1udWxsPT10PzEwOit0LG09W107aWYoIShvJTEpJiZwLWQ8Zil7aWYoZD1NYXRoLnJvdW5kKGQpLTEscD1NYXRoLnJvdW5kKHApKzEscz4wKXtmb3IoO2Q8cDsrK2QpZm9yKHU9MSxjPW4oZCk7dTxvOysrdSlpZighKChoPWMqdSk8cykpe2lmKGg+bClicmVhazttLnB1c2goaCl9fWVsc2UgZm9yKDtkPHA7KytkKWZvcih1PW8tMSxjPW4oZCk7dT49MTstLXUpaWYoISgoaD1jKnUpPHMpKXtpZihoPmwpYnJlYWs7bS5wdXNoKGgpfX1lbHNlIG09RmwoZCxwLE1hdGgubWluKHAtZCxmKSkubWFwKG4pO3JldHVybiBpP20ucmV2ZXJzZSgpOm19LGkudGlja0Zvcm1hdD1mdW5jdGlvbih0LHIpe2lmKG51bGw9PXImJihyPTEwPT09bz8iLjBlIjoiLCIpLCJmdW5jdGlvbiIhPXR5cGVvZiByJiYocj1teShyKSksdD09PTEvMClyZXR1cm4gcjtudWxsPT10JiYodD0xMCk7dmFyIGE9TWF0aC5tYXgoMSxvKnQvaS50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBpPXQvbihNYXRoLnJvdW5kKGUodCkpKTtyZXR1cm4gaSpvPG8tLjUmJihpKj1vKSxpPD1hP3IodCk6IiJ9fSxpLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gcihVTShyKCkse2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybiBuKE1hdGguZmxvb3IoZSh0KSkpfSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybiBuKE1hdGguY2VpbChlKHQpKSl9fSkpfSxpfWZ1bmN0aW9uIEtNKCl7dmFyIHQ9JE0oRE0oKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiB6TSh0LEtNKCkpLmJhc2UodC5iYXNlKCkpfSx2TS5hcHBseSh0LGFyZ3VtZW50cyksdH1mdW5jdGlvbiBaTSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc2lnbihlKSpNYXRoLmxvZzFwKE1hdGguYWJzKGUvdCkpfX1mdW5jdGlvbiBKTSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc2lnbihlKSpNYXRoLmV4cG0xKE1hdGguYWJzKGUpKSp0fX1mdW5jdGlvbiBRTSh0KXt2YXIgZT0xLG49dChaTShlKSxKTShlKSk7cmV0dXJuIG4uY29uc3RhbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChaTShlPStuKSxKTShlKSk6ZX0sRk0obil9ZnVuY3Rpb24gdEUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlPDA/LU1hdGgucG93KC1lLHQpOk1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIGVFKHQpe3JldHVybiB0PDA/LU1hdGguc3FydCgtdCk6TWF0aC5zcXJ0KHQpfWZ1bmN0aW9uIG5FKHQpe3JldHVybiB0PDA/LXQqdDp0KnR9ZnVuY3Rpb24gaUUodCl7dmFyIGU9dChQTSxQTSksbj0xO2Z1bmN0aW9uIGkoKXtyZXR1cm4gMT09PW4/dChQTSxQTSk6LjU9PT1uP3QoZUUsbkUpOnQodEUobiksdEUoMS9uKSl9cmV0dXJuIGUuZXhwb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsaSgpKTpufSxGTShlKX1mdW5jdGlvbiByRSgpe3ZhciB0PWlFKERNKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gek0odCxyRSgpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSx2TS5hcHBseSh0LGFyZ3VtZW50cyksdH1mdW5jdGlvbiBvRSgpe3ZhciB0LGU9W10sbj1bXSxpPVtdO2Z1bmN0aW9uIHIoKXt2YXIgdD0wLHI9TWF0aC5tYXgoMSxuLmxlbmd0aCk7Zm9yKGk9bmV3IEFycmF5KHItMSk7Kyt0PHI7KWlbdC0xXT1HbChlLHQvcik7cmV0dXJuIG99ZnVuY3Rpb24gbyhlKXtyZXR1cm4gaXNOYU4oZT0rZSk/dDpuW1NsKGksZSldfXJldHVybiBvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXt2YXIgcj1uLmluZGV4T2YodCk7cmV0dXJuIHI8MD9bTmFOLE5hTl06W3I+MD9pW3ItMV06ZVswXSxyPGkubGVuZ3RoP2lbcl06ZVtlLmxlbmd0aC0xXV19LG8uZG9tYWluPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXTtmb3IodmFyIG4saT0wLG89dC5sZW5ndGg7aTxvOysraSludWxsPT0obj10W2ldKXx8aXNOYU4obj0rbil8fGUucHVzaChuKTtyZXR1cm4gZS5zb3J0KGJsKSxyKCl9LG8ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49U00uY2FsbCh0KSxyKCkpOm4uc2xpY2UoKX0sby51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbyk6dH0sby5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gaS5zbGljZSgpfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gb0UoKS5kb21haW4oZSkucmFuZ2UobikudW5rbm93bih0KX0sdk0uYXBwbHkobyxhcmd1bWVudHMpfWZ1bmN0aW9uIGFFKCl7dmFyIHQsZT0wLG49MSxpPTEscj1bLjVdLG89WzAsMV07ZnVuY3Rpb24gYShlKXtyZXR1cm4gZTw9ZT9vW1NsKHIsZSwwLGkpXTp0fWZ1bmN0aW9uIHMoKXt2YXIgdD0tMTtmb3Iocj1uZXcgQXJyYXkoaSk7Kyt0PGk7KXJbdF09KCh0KzEpKm4tKHQtaSkqZSkvKGkrMSk7cmV0dXJuIGF9cmV0dXJuIGEuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLG49K3RbMV0scygpKTpbZSxuXX0sYS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0obz1TTS5jYWxsKHQpKS5sZW5ndGgtMSxzKCkpOm8uc2xpY2UoKX0sYS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIGE9by5pbmRleE9mKHQpO3JldHVybiBhPDA/W05hTixOYU5dOmE8MT9bZSxyWzBdXTphPj1pP1tyW2ktMV0sbl06W3JbYS0xXSxyW2FdXX0sYS51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsYSk6YX0sYS50aHJlc2hvbGRzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuc2xpY2UoKX0sYS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGFFKCkuZG9tYWluKFtlLG5dKS5yYW5nZShvKS51bmtub3duKHQpfSx2TS5hcHBseShGTShhKSxhcmd1bWVudHMpfXZhciBzRT1uZXcgRGF0ZSxsRT1uZXcgRGF0ZTtmdW5jdGlvbiBjRSh0LGUsbixpKXtmdW5jdGlvbiByKGUpe3JldHVybiB0KGU9MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK2UpKSxlfXJldHVybiByLmZsb29yPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfSxyLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxyLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCksbj1yLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxyLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxyLnJhbmdlPWZ1bmN0aW9uKG4saSxvKXt2YXIgYSxzPVtdO2lmKG49ci5jZWlsKG4pLG89bnVsbD09bz8xOk1hdGguZmxvb3IobyksIShuPGkmJm8+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKGE9bmV3IERhdGUoK24pKSxlKG4sbyksdChuKX13aGlsZShhPG4mJm48aSk7cmV0dXJuIHN9LHIuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiBjRSgoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQsaSl7aWYodD49dClpZihpPDApZm9yKDsrK2k8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLWk+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoci5jb3VudD1mdW5jdGlvbihlLGkpe3JldHVybiBzRS5zZXRUaW1lKCtlKSxsRS5zZXRUaW1lKCtpKSx0KHNFKSx0KGxFKSxNYXRoLmZsb29yKG4oc0UsbEUpKX0sci5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIHIuY291bnQoMCxlKSV0PT0wfSk6cjpudWxsfSkscn12YXIgdUU9Y0UoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0pKTt1RS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2NFKChmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL3QpKnQpfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRUaW1lKCtlK24qdCl9KSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4obi1lKS90fSkpOnVFOm51bGx9O3ZhciBoRT11RSxkRT11RS5yYW5nZSxwRT0xZTMsZkU9NmU0LG1FPTM2ZTUsZ0U9ODY0ZTUsX0U9NjA0OGU1LHlFPWNFKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKnBFKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL3BFfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0pKSx2RT15RSxiRT15RS5yYW5nZSx4RT1jRSgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS10LmdldFNlY29uZHMoKSpwRSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpmRSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9mRX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9KSksd0U9eEUsU0U9eEUucmFuZ2UsTUU9Y0UoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqcEUtdC5nZXRNaW51dGVzKCkqZkUpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqbUUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvbUV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pKSxFRT1NRSxURT1NRS5yYW5nZSxDRT1jRSgoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKmZFKS9nRX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pKSxBRT1DRSxrRT1DRS5yYW5nZTtmdW5jdGlvbiBMRSh0KXtyZXR1cm4gY0UoKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKmZFKS9fRX0pKX12YXIgUEU9TEUoMCksTkU9TEUoMSksSUU9TEUoMiksUkU9TEUoMyksT0U9TEUoNCksekU9TEUoNSksREU9TEUoNiksQkU9UEUucmFuZ2UsSEU9TkUucmFuZ2UsRkU9SUUucmFuZ2UsVkU9UkUucmFuZ2UsVUU9T0UucmFuZ2UsakU9ekUucmFuZ2UsR0U9REUucmFuZ2UsV0U9Y0UoKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSgxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRNb250aCgpLXQuZ2V0TW9udGgoKSsxMiooZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0pKSxxRT1XRSxZRT1XRS5yYW5nZSxYRT1jRSgoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7WEUuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9jRSgoZnVuY3Rpb24oZSl7ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0RnVsbFllYXIoKS90KSp0KSxlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK24qdCl9KSk6bnVsbH07dmFyICRFPVhFLEtFPVhFLnJhbmdlLFpFPWNFKChmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKmZFKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2ZFfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pKSxKRT1aRSxRRT1aRS5yYW5nZSx0VD1jRSgoZnVuY3Rpb24odCl7dC5zZXRVVENNaW51dGVzKDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKm1FKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL21FfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSksZVQ9dFQsblQ9dFQucmFuZ2UsaVQ9Y0UoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9nRX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pKSxyVD1pVCxvVD1pVC5yYW5nZTtmdW5jdGlvbiBhVCh0KXtyZXR1cm4gY0UoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKS0oZS5nZXRVVENEYXkoKSs3LXQpJTcpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL19FfSkpfXZhciBzVD1hVCgwKSxsVD1hVCgxKSxjVD1hVCgyKSx1VD1hVCgzKSxoVD1hVCg0KSxkVD1hVCg1KSxwVD1hVCg2KSxmVD1zVC5yYW5nZSxtVD1sVC5yYW5nZSxnVD1jVC5yYW5nZSxfVD11VC5yYW5nZSx5VD1oVC5yYW5nZSx2VD1kVC5yYW5nZSxiVD1wVC5yYW5nZSx4VD1jRSgoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSkpLHdUPXhULFNUPXhULnJhbmdlLE1UPWNFKChmdW5jdGlvbih0KXt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0pKTtNVC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP2NFKChmdW5jdGlvbihlKXtlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrbip0KX0pKTpudWxsfTt2YXIgRVQ9TVQsVFQ9TVQucmFuZ2U7ZnVuY3Rpb24gQ1QodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIEFUKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIGtUKHQsZSxuKXtyZXR1cm57eTp0LG06ZSxkOm4sSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBMVCh0KXt2YXIgZT10LmRhdGVUaW1lLG49dC5kYXRlLGk9dC50aW1lLHI9dC5wZXJpb2RzLG89dC5kYXlzLGE9dC5zaG9ydERheXMscz10Lm1vbnRocyxsPXQuc2hvcnRNb250aHMsYz1VVChyKSx1PWpUKHIpLGg9VVQobyksZD1qVChvKSxwPVVUKGEpLGY9alQoYSksbT1VVChzKSxnPWpUKHMpLF89VVQobCkseT1qVChsKSx2PXthOmZ1bmN0aW9uIGIodCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24geCh0KXtyZXR1cm4gb1t0LmdldERheSgpXX0sYjpmdW5jdGlvbiB3KHQpe3JldHVybiBsW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24gUyh0KXtyZXR1cm4gc1t0LmdldE1vbnRoKCldfSxjOm51bGwsZDp1QyxlOnVDLGY6bUMsZzpUQyxHOkFDLEg6aEMsSTpkQyxqOnBDLEw6ZkMsbTpnQyxNOl9DLHA6ZnVuY3Rpb24gTSh0KXtyZXR1cm4gclsrKHQuZ2V0SG91cnMoKT49MTIpXX0scTpmdW5jdGlvbiBFKHQpe3JldHVybiAxK35+KHQuZ2V0TW9udGgoKS8zKX0sUTpaQyxzOkpDLFM6eUMsdTp2QyxVOmJDLFY6d0MsdzpTQyxXOk1DLHg6bnVsbCxYOm51bGwseTpFQyxZOkNDLFo6a0MsIiUiOktDfSxUPXthOmZ1bmN0aW9uIEModCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24gQSh0KXtyZXR1cm4gb1t0LmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbiBrKHQpe3JldHVybiBsW3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24gTCh0KXtyZXR1cm4gc1t0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpMQyxlOkxDLGY6T0MsZzpxQyxHOlhDLEg6UEMsSTpOQyxqOklDLEw6UkMsbTp6QyxNOkRDLHA6ZnVuY3Rpb24gUCh0KXtyZXR1cm4gclsrKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbiBOKHQpe3JldHVybiAxK35+KHQuZ2V0VVRDTW9udGgoKS8zKX0sUTpaQyxzOkpDLFM6QkMsdTpIQyxVOkZDLFY6VUMsdzpqQyxXOkdDLHg6bnVsbCxYOm51bGwseTpXQyxZOllDLFo6JEMsIiUiOktDfSxJPXthOmZ1bmN0aW9uIFIodCxlLG4pe3ZhciBpPXAuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC53PWZbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbiBPKHQsZSxuKXt2YXIgaT1oLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQudz1kW2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24geih0LGUsbil7dmFyIGk9Xy5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0Lm09eVtpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uIEQodCxlLG4pe3ZhciBpPW0uZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5tPWdbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbiBCKHQsbixpKXtyZXR1cm4gRyh0LGUsbixpKX0sZDp0QyxlOnRDLGY6YUMsZzpLVCxHOiRULEg6bkMsSTpuQyxqOmVDLEw6b0MsbTpRVCxNOmlDLHA6ZnVuY3Rpb24gSCh0LGUsbil7dmFyIGk9Yy5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0LnA9dVtpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxxOkpULFE6bEMsczpjQyxTOnJDLHU6V1QsVTpxVCxWOllULHc6R1QsVzpYVCx4OmZ1bmN0aW9uIEYodCxlLGkpe3JldHVybiBHKHQsbixlLGkpfSxYOmZ1bmN0aW9uIFYodCxlLG4pe3JldHVybiBHKHQsaSxlLG4pfSx5OktULFk6JFQsWjpaVCwiJSI6c0N9O2Z1bmN0aW9uIFUodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGkscixvLGE9W10scz0tMSxsPTAsYz10Lmxlbmd0aDtmb3IobiBpbnN0YW5jZW9mIERhdGV8fChuPW5ldyBEYXRlKCtuKSk7KytzPGM7KTM3PT09dC5jaGFyQ29kZUF0KHMpJiYoYS5wdXNoKHQuc2xpY2UobCxzKSksbnVsbCE9KHI9elRbaT10LmNoYXJBdCgrK3MpXSk/aT10LmNoYXJBdCgrK3MpOnI9ImUiPT09aT8iICI6IjAiLChvPWVbaV0pJiYoaT1vKG4scikpLGEucHVzaChpKSxsPXMrMSk7cmV0dXJuIGEucHVzaCh0LnNsaWNlKGwscykpLGEuam9pbigiIil9fWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGkscixvPWtUKDE5MDAsdm9pZCAwLDEpO2lmKEcobyx0LG4rPSIiLDApIT1uLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBvKXJldHVybiBuZXcgRGF0ZShvLlEpO2lmKCJzImluIG8pcmV0dXJuIG5ldyBEYXRlKDFlMypvLnMrKCJMImluIG8/by5MOjApKTtpZihlJiYhKCJaImluIG8pJiYoby5aPTApLCJwImluIG8mJihvLkg9by5IJTEyKzEyKm8ucCksdm9pZCAwPT09by5tJiYoby5tPSJxImluIG8/by5xOjApLCJWImluIG8pe2lmKG8uVjwxfHxvLlY+NTMpcmV0dXJuIG51bGw7InciaW4gb3x8KG8udz0xKSwiWiJpbiBvPyhyPShpPUFUKGtUKG8ueSwwLDEpKSkuZ2V0VVRDRGF5KCksaT1yPjR8fDA9PT1yP2xULmNlaWwoaSk6bFQoaSksaT1yVC5vZmZzZXQoaSw3KihvLlYtMSkpLG8ueT1pLmdldFVUQ0Z1bGxZZWFyKCksby5tPWkuZ2V0VVRDTW9udGgoKSxvLmQ9aS5nZXRVVENEYXRlKCkrKG8udys2KSU3KToocj0oaT1DVChrVChvLnksMCwxKSkpLmdldERheSgpLGk9cj40fHwwPT09cj9ORS5jZWlsKGkpOk5FKGkpLGk9QUUub2Zmc2V0KGksNyooby5WLTEpKSxvLnk9aS5nZXRGdWxsWWVhcigpLG8ubT1pLmdldE1vbnRoKCksby5kPWkuZ2V0RGF0ZSgpKyhvLncrNiklNyl9ZWxzZSgiVyJpbiBvfHwiVSJpbiBvKSYmKCJ3ImluIG98fChvLnc9InUiaW4gbz9vLnUlNzoiVyJpbiBvPzE6MCkscj0iWiJpbiBvP0FUKGtUKG8ueSwwLDEpKS5nZXRVVENEYXkoKTpDVChrVChvLnksMCwxKSkuZ2V0RGF5KCksby5tPTAsby5kPSJXImluIG8/KG8udys2KSU3Kzcqby5XLShyKzUpJTc6by53Kzcqby5VLShyKzYpJTcpO3JldHVybiJaImluIG8/KG8uSCs9by5aLzEwMHwwLG8uTSs9by5aJTEwMCxBVChvKSk6Q1Qobyl9fWZ1bmN0aW9uIEcodCxlLG4saSl7Zm9yKHZhciByLG8sYT0wLHM9ZS5sZW5ndGgsbD1uLmxlbmd0aDthPHM7KXtpZihpPj1sKXJldHVybi0xO2lmKDM3PT09KHI9ZS5jaGFyQ29kZUF0KGErKykpKXtpZihyPWUuY2hhckF0KGErKyksIShvPUlbciBpbiB6VD9lLmNoYXJBdChhKyspOnJdKXx8KGk9byh0LG4saSkpPDApcmV0dXJuLTF9ZWxzZSBpZihyIT1uLmNoYXJDb2RlQXQoaSsrKSlyZXR1cm4tMX1yZXR1cm4gaX1yZXR1cm4gdi54PVUobix2KSx2Llg9VShpLHYpLHYuYz1VKGUsdiksVC54PVUobixUKSxULlg9VShpLFQpLFQuYz1VKGUsVCkse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1VKHQrPSIiLHYpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPWoodCs9IiIsITEpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1VKHQrPSIiLFQpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y1BhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPWoodCs9IiIsITApO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9fX12YXIgUFQsTlQsSVQsUlQsT1QselQ9eyItIjoiIixfOiIgIiwwOiIwIn0sRFQ9L15ccypcZCsvLEJUPS9eJS8sSFQ9L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uIEZUKHQsZSxuKXt2YXIgaT10PDA/Ii0iOiIiLHI9KGk/LXQ6dCkrIiIsbz1yLmxlbmd0aDtyZXR1cm4gaSsobzxuP25ldyBBcnJheShuLW8rMSkuam9pbihlKStyOnIpfWZ1bmN0aW9uIFZUKHQpe3JldHVybiB0LnJlcGxhY2UoSFQsIlxcJCYiKX1mdW5jdGlvbiBVVCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAoVlQpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBqVCh0KXtmb3IodmFyIGU9e30sbj0tMSxpPXQubGVuZ3RoOysrbjxpOyllW3Rbbl0udG9Mb3dlckNhc2UoKV09bjtyZXR1cm4gZX1mdW5jdGlvbiBHVCh0LGUsbil7dmFyIGk9RFQuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIGk/KHQudz0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXVCh0LGUsbil7dmFyIGk9RFQuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIGk/KHQudT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxVCh0LGUsbil7dmFyIGk9RFQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuVT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZVCh0LGUsbil7dmFyIGk9RFQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuVj0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYVCh0LGUsbil7dmFyIGk9RFQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuVz0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkVCh0LGUsbil7dmFyIGk9RFQuZXhlYyhlLnNsaWNlKG4sbis0KSk7cmV0dXJuIGk/KHQueT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBLVCh0LGUsbil7dmFyIGk9RFQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQueT0raVswXSsoK2lbMF0+Njg/MTkwMDoyZTMpLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFpUKHQsZSxuKXt2YXIgaT0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIGk/KHQuWj1pWzFdPzA6LShpWzJdKyhpWzNdfHwiMDAiKSksbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSlQodCxlLG4pe3ZhciBpPURULmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiBpPyh0LnE9MyppWzBdLTMsbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUVQodCxlLG4pe3ZhciBpPURULmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Lm09aVswXS0xLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRDKHQsZSxuKXt2YXIgaT1EVC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5kPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVDKHQsZSxuKXt2YXIgaT1EVC5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gaT8odC5tPTAsdC5kPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5DKHQsZSxuKXt2YXIgaT1EVC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5IPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGlDKHQsZSxuKXt2YXIgaT1EVC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5NPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJDKHQsZSxuKXt2YXIgaT1EVC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5TPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG9DKHQsZSxuKXt2YXIgaT1EVC5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gaT8odC5MPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGFDKHQsZSxuKXt2YXIgaT1EVC5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gaT8odC5MPU1hdGguZmxvb3IoaVswXS8xZTMpLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHNDKHQsZSxuKXt2YXIgaT1CVC5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gaT9uK2lbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIGxDKHQsZSxuKXt2YXIgaT1EVC5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0LlE9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gY0ModCxlLG4pe3ZhciBpPURULmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQucz0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB1Qyh0LGUpe3JldHVybiBGVCh0LmdldERhdGUoKSxlLDIpfWZ1bmN0aW9uIGhDKHQsZSl7cmV0dXJuIEZUKHQuZ2V0SG91cnMoKSxlLDIpfWZ1bmN0aW9uIGRDKHQsZSl7cmV0dXJuIEZUKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBwQyh0LGUpe3JldHVybiBGVCgxK0FFLmNvdW50KCRFKHQpLHQpLGUsMyl9ZnVuY3Rpb24gZkModCxlKXtyZXR1cm4gRlQodC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIG1DKHQsZSl7cmV0dXJuIGZDKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gZ0ModCxlKXtyZXR1cm4gRlQodC5nZXRNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBfQyh0LGUpe3JldHVybiBGVCh0LmdldE1pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIHlDKHQsZSl7cmV0dXJuIEZUKHQuZ2V0U2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gdkModCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIGJDKHQsZSl7cmV0dXJuIEZUKFBFLmNvdW50KCRFKHQpLTEsdCksZSwyKX1mdW5jdGlvbiB4Qyh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiBlPj00fHwwPT09ZT9PRSh0KTpPRS5jZWlsKHQpfWZ1bmN0aW9uIHdDKHQsZSl7cmV0dXJuIHQ9eEModCksRlQoT0UuY291bnQoJEUodCksdCkrKDQ9PT0kRSh0KS5nZXREYXkoKSksZSwyKX1mdW5jdGlvbiBTQyh0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBNQyh0LGUpe3JldHVybiBGVChORS5jb3VudCgkRSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gRUModCxlKXtyZXR1cm4gRlQodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIFRDKHQsZSl7cmV0dXJuIEZUKCh0PXhDKHQpKS5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIENDKHQsZSl7cmV0dXJuIEZUKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBBQyh0LGUpe3ZhciBuPXQuZ2V0RGF5KCk7cmV0dXJuIEZUKCh0PW4+PTR8fDA9PT1uP09FKHQpOk9FLmNlaWwodCkpLmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24ga0ModCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihlPjA/Ii0iOihlKj0tMSwiKyIpKStGVChlLzYwfDAsIjAiLDIpK0ZUKGUlNjAsIjAiLDIpfWZ1bmN0aW9uIExDKHQsZSl7cmV0dXJuIEZUKHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24gUEModCxlKXtyZXR1cm4gRlQodC5nZXRVVENIb3VycygpLGUsMil9ZnVuY3Rpb24gTkModCxlKXtyZXR1cm4gRlQodC5nZXRVVENIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIElDKHQsZSl7cmV0dXJuIEZUKDErclQuY291bnQoRVQodCksdCksZSwzKX1mdW5jdGlvbiBSQyh0LGUpe3JldHVybiBGVCh0LmdldFVUQ01pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gT0ModCxlKXtyZXR1cm4gUkModCxlKSsiMDAwIn1mdW5jdGlvbiB6Qyh0LGUpe3JldHVybiBGVCh0LmdldFVUQ01vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIERDKHQsZSl7cmV0dXJuIEZUKHQuZ2V0VVRDTWludXRlcygpLGUsMil9ZnVuY3Rpb24gQkModCxlKXtyZXR1cm4gRlQodC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBIQyh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gRkModCxlKXtyZXR1cm4gRlQoc1QuY291bnQoRVQodCktMSx0KSxlLDIpfWZ1bmN0aW9uIFZDKHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIGU+PTR8fDA9PT1lP2hUKHQpOmhULmNlaWwodCl9ZnVuY3Rpb24gVUModCxlKXtyZXR1cm4gdD1WQyh0KSxGVChoVC5jb3VudChFVCh0KSx0KSsoND09PUVUKHQpLmdldFVUQ0RheSgpKSxlLDIpfWZ1bmN0aW9uIGpDKHQpe3JldHVybiB0LmdldFVUQ0RheSgpfWZ1bmN0aW9uIEdDKHQsZSl7cmV0dXJuIEZUKGxULmNvdW50KEVUKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBXQyh0LGUpe3JldHVybiBGVCh0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gcUModCxlKXtyZXR1cm4gRlQoKHQ9VkModCkpLmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gWUModCxlKXtyZXR1cm4gRlQodC5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIFhDKHQsZSl7dmFyIG49dC5nZXRVVENEYXkoKTtyZXR1cm4gRlQoKHQ9bj49NHx8MD09PW4/aFQodCk6aFQuY2VpbCh0KSkuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiAkQygpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gS0MoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gWkModCl7cmV0dXJuK3R9ZnVuY3Rpb24gSkModCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX1mdW5jdGlvbiBRQyh0KXtyZXR1cm4gUFQ9TFQodCksTlQ9UFQuZm9ybWF0LElUPVBULnBhcnNlLFJUPVBULnV0Y0Zvcm1hdCxPVD1QVC51dGNQYXJzZSxQVH1RQyh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO3ZhciB0QT0iJVktJW0tJWRUJUg6JU06JVMuJUxaIixlQT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9mdW5jdGlvbiBuQSh0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfTpSVCh0QSksaUE9K25ldyBEYXRlKCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFoiKT9mdW5jdGlvbiByQSh0KXt2YXIgZT1uZXcgRGF0ZSh0KTtyZXR1cm4gaXNOYU4oZSk/bnVsbDplfTpPVCh0QSksb0E9MzE1MzZlNjtmdW5jdGlvbiBhQSh0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gc0EodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gbEEodCxlLG4saSxyLG8sYSxzLGwpe3ZhciBjPUJNKFBNLFBNKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZD1sKCIuJUwiKSxwPWwoIjolUyIpLGY9bCgiJUk6JU0iKSxtPWwoIiVJICVwIiksZz1sKCIlYSAlZCIpLF89bCgiJWIgJWQiKSx5PWwoIiVCIiksdj1sKCIlWSIpLGI9W1thLDEsMWUzXSxbYSw1LDVlM10sW2EsMTUsMTVlM10sW2EsMzAsM2U0XSxbbywxLDZlNF0sW28sNSwzZTVdLFtvLDE1LDllNV0sW28sMzAsMThlNV0sW3IsMSwzNmU1XSxbciwzLDEwOGU1XSxbciw2LDIxNmU1XSxbciwxMiw0MzJlNV0sW2ksMSw4NjRlNV0sW2ksMiwxNzI4ZTVdLFtuLDEsNjA0OGU1XSxbZSwxLDI1OTJlNl0sW2UsMyw3Nzc2ZTZdLFt0LDEsb0FdXTtmdW5jdGlvbiB4KHMpe3JldHVybihhKHMpPHM/ZDpvKHMpPHM/cDpyKHMpPHM/ZjppKHMpPHM/bTplKHMpPHM/bihzKTxzP2c6Xzp0KHMpPHM/eTp2KShzKX1mdW5jdGlvbiB3KGUsbixpLHIpe2lmKG51bGw9PWUmJihlPTEwKSwibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBvPU1hdGguYWJzKGktbikvZSxhPXhsKChmdW5jdGlvbih0KXtyZXR1cm4gdFsyXX0pKS5yaWdodChiLG8pO2E9PT1iLmxlbmd0aD8ocj1VbChuL29BLGkvb0EsZSksZT10KTphPyhyPShhPWJbby9iW2EtMV1bMl08YlthXVsyXS9vP2EtMTphXSlbMV0sZT1hWzBdKToocj1NYXRoLm1heChVbChuLGksZSksMSksZT1zKX1yZXR1cm4gbnVsbD09cj9lOmUuZXZlcnkocil9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZSh1KHQpKX0sYy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aCh3TS5jYWxsKHQsc0EpKTpoKCkubWFwKGFBKX0sYy50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciBuLGk9aCgpLHI9aVswXSxvPWlbaS5sZW5ndGgtMV0sYT1vPHI7cmV0dXJuIGEmJihuPXIscj1vLG89biksbj0obj13KHQscixvLGUpKT9uLnJhbmdlKHIsbysxKTpbXSxhP24ucmV2ZXJzZSgpOm59LGMudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP3g6bChlKX0sYy5uaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49aCgpO3JldHVybih0PXcodCxuWzBdLG5bbi5sZW5ndGgtMV0sZSkpP2goVU0obix0KSk6Y30sYy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHpNKGMsbEEodCxlLG4saSxyLG8sYSxzLGwpKX0sY31mdW5jdGlvbiBjQSgpe3JldHVybiB2TS5hcHBseShsQSgkRSxxRSxQRSxBRSxFRSx3RSx2RSxoRSxOVCkuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdUEoKXt2YXIgdCxlLG4saSxyLG89MCxhPTEscz1QTSxsPSExO2Z1bmN0aW9uIGMoZSl7cmV0dXJuIGlzTmFOKGU9K2UpP3I6cygwPT09bj8uNTooZT0oaShlKS10KSpuLGw/TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKTplKSl9cmV0dXJuIGMuZG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWkobz0rclswXSksZT1pKGE9K3JbMV0pLG49dD09PWU/MDoxLyhlLXQpLGMpOltvLGFdfSxjLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSEhdCxjKTpsfSxjLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGMpOnN9LGMudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGMpOnJ9LGZ1bmN0aW9uKHIpe3JldHVybiBpPXIsdD1yKG8pLGU9cihhKSxuPXQ9PT1lPzA6MS8oZS10KSxjfX1mdW5jdGlvbiBoQSh0LGUpe3JldHVybiBlLmRvbWFpbih0LmRvbWFpbigpKS5pbnRlcnBvbGF0b3IodC5pbnRlcnBvbGF0b3IoKSkuY2xhbXAodC5jbGFtcCgpKS51bmtub3duKHQudW5rbm93bigpKX1mdW5jdGlvbiBkQSgpe3ZhciB0PWlFKHVBKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gaEEodCxkQSgpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxiTS5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gcEEoKXt2YXIgdCxlLG4saSxyLG8sYSxzPTAsbD0uNSxjPTEsdT1QTSxoPSExO2Z1bmN0aW9uIGQodCl7cmV0dXJuIGlzTmFOKHQ9K3QpP2E6KHQ9LjUrKCh0PStvKHQpKS1lKSoodDxlP2k6ciksdShoP01hdGgubWF4KDAsTWF0aC5taW4oMSx0KSk6dCkpfXJldHVybiBkLmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1vKHM9K2FbMF0pLGU9byhsPSthWzFdKSxuPW8oYz0rYVsyXSksaT10PT09ZT8wOi41LyhlLXQpLHI9ZT09PW4/MDouNS8obi1lKSxkKTpbcyxsLGNdfSxkLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSEhdCxkKTpofSxkLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LGQpOnV9LGQudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LGQpOmF9LGZ1bmN0aW9uKGEpe3JldHVybiBvPWEsdD1hKHMpLGU9YShsKSxuPWEoYyksaT10PT09ZT8wOi41LyhlLXQpLHI9ZT09PW4/MDouNS8obi1lKSxkfX1mdW5jdGlvbiBmQSgpe3ZhciB0PWlFKHBBKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gaEEodCxmQSgpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxiTS5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gbUEodCl7Zm9yKHZhciBlPXQubGVuZ3RoLzZ8MCxuPW5ldyBBcnJheShlKSxpPTA7aTxlOyluW2ldPSIjIit0LnNsaWNlKDYqaSw2KisraSk7cmV0dXJuIG59dmFyIGdBPW1BKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSxfQT1tQSgiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2IikseUE9bUEoIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NiIpLHZBPW1BKCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKSxiQT1tQSgiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIikseEE9bUEoImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjYyIpLHdBPW1BKCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKSxTQT1tQSgiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIiksTUE9bUEoIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZiIpLEVBPW1BKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKTtmdW5jdGlvbiBUQSh0KXtyZXR1cm4gTmQodFt0Lmxlbmd0aC0xXSl9dmFyIENBPW5ldyBBcnJheSgzKS5jb25jYXQoImQ4YjM2NWY1ZjVmNTVhYjRhYyIsImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MSIsImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIpLm1hcChtQSksQUE9VEEoQ0EpLGtBPW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcChtQSksTEE9VEEoa0EpLFBBPW5ldyBBcnJheSgzKS5jb25jYXQoImU5YTNjOWY3ZjdmN2ExZDc2YSIsImQwMWM4YmYxYjZkYWI4ZTE4NjRkYWMyNiIsImQwMWM4YmYxYjZkYWY3ZjdmN2I4ZTE4NjRkYWMyNiIsImM1MWI3ZGU5YTNjOWZkZTBlZmU2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGU5YTNjOWZkZTBlZmY3ZjdmN2U2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIpLm1hcChtQSksTkE9VEEoUEEpLElBPW5ldyBBcnJheSgzKS5jb25jYXQoIjk5OGVjM2Y3ZjdmN2YxYTM0MCIsIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMSIsIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMSIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIpLm1hcChtQSksUkE9VEEoSUEpLE9BPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcChtQSksekE9VEEoT0EpLERBPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmZmZmZmZjk5OTk5OSIsImNhMDAyMGY0YTU4MmJhYmFiYTQwNDA0MCIsImNhMDAyMGY0YTU4MmZmZmZmZmJhYmFiYTQwNDA0MCIsImIyMTgyYmVmOGE2MmZkZGJjN2UwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmVmOGE2MmZkZGJjN2ZmZmZmZmUwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIpLm1hcChtQSksQkE9VEEoREEpLEhBPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxYmZkYiIsImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNiIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNiIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIpLm1hcChtQSksRkE9VEEoSEEpLFZBPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcChtQSksVUE9VEEoVkEpLGpBPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjk5ZDU5NCIsImQ3MTkxY2ZkYWU2MWFiZGRhNDJiODNiYSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZGRhNDJiODNiYSIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmZmZmZiZmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIpLm1hcChtQSksR0E9VEEoakEpLFdBPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVmOTk5ZDhjOTJjYTI1ZiIsImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NSIsImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChtQSkscUE9VEEoV0EpLFlBPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcChtQSksWEE9VEEoWUEpLCRBPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZjNkYmE4ZGRiNTQzYTJjYSIsImYwZjllOGJhZTRiYzdiY2NjNDJiOGNiZSIsImYwZjllOGJhZTRiYzdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NjhhYzA4NDA4MSIpLm1hcChtQSksS0E9VEEoJEEpLFpBPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZThjOGZkYmI4NGUzNGEzMyIsImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZiIsImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMCIpLm1hcChtQSksSkE9VEEoWkEpLFFBPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcChtQSksdGs9VEEoUUEpLGVrPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTdmMmE2YmRkYjJiOGNiZSIsImYxZWVmNmJkYzllMTc0YTljZjA1NzBiMCIsImYxZWVmNmJkYzllMTc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDA0NWE4ZDAyMzg1OCIpLm1hcChtQSksbms9VEEoZWspLGlrPW5ldyBBcnJheSgzKS5jb25jYXQoImU3ZTFlZmM5OTRjN2RkMWM3NyIsImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NiIsImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZiIpLm1hcChtQSkscms9VEEoaWspLG9rPW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcChtQSksYWs9VEEob2spLHNrPW5ldyBBcnJheSgzKS5jb25jYXQoImVkZjhiMTdmY2RiYjJjN2ZiOCIsImZmZmZjY2ExZGFiNDQxYjZjNDIyNWVhOCIsImZmZmZjY2ExZGFiNDQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODI1MzQ5NDA4MWQ1OCIpLm1hcChtQSksbGs9VEEoc2spLGNrPW5ldyBBcnJheSgzKS5jb25jYXQoImY3ZmNiOWFkZGQ4ZTMxYTM1NCIsImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0MyIsImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOSIpLm1hcChtQSksdWs9VEEoY2spLGhrPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcChtQSksZGs9VEEoaGspLHBrPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZWRhMGZlYjI0Y2YwM2IyMCIsImZmZmZiMmZlY2M1Y2ZkOGQzY2UzMWExYyIsImZmZmZiMmZlY2M1Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2JkMDAyNjgwMDAyNiIpLm1hcChtQSksZms9VEEocGspLG1rPW5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcChtQSksZ2s9VEEobWspLF9rPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChtQSkseWs9VEEoX2spLHZrPW5ldyBBcnJheSgzKS5jb25jYXQoImYwZjBmMGJkYmRiZDYzNjM2MyIsImY3ZjdmN2NjY2NjYzk2OTY5NjUyNTI1MiIsImY3ZjdmN2NjY2NjYzk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNTAwMDAwMCIpLm1hcChtQSksYms9VEEodmspLHhrPW5ldyBBcnJheSgzKS5jb25jYXQoImVmZWRmNWJjYmRkYzc1NmJiMSIsImYyZjBmN2NiYzllMjllOWFjODZhNTFhMyIsImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZCIpLm1hcChtQSksd2s9VEEoeGspLFNrPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcChtQSksTWs9VEEoU2spLEVrPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTZjZWZkYWU2YmU2NTUwZCIsImZlZWRkZWZkYmU4NWZkOGQzY2Q5NDcwMSIsImZlZWRkZWZkYmU4NWZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMWE2MzYwMzdmMjcwNCIpLm1hcChtQSksVGs9VEEoRWspLENrPV9wKHhkKDMwMCwuNSwwKSx4ZCgtMjQwLC41LDEpKSxBaz1fcCh4ZCgtMTAwLC43NSwuMzUpLHhkKDgwLDEuNSwuOCkpLGtrPV9wKHhkKDI2MCwuNzUsLjM1KSx4ZCg4MCwxLjUsLjgpKSxMaz14ZCgpLFBrPVVoKCksTms9TWF0aC5QSS8zLElrPTIqTWF0aC5QSS8zO2Z1bmN0aW9uIFJrKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fXZhciBPaz1SayhtQSgiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1IikpLHprPVJrKG1BKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksRGs9UmsobUEoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxCaz1SayhtQSgiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpO2Z1bmN0aW9uIEhrKHQpe3JldHVybiBmdW5jdGlvbiBlKCl7cmV0dXJuIHR9fXZhciBGaz1NYXRoLmFicyxWaz1NYXRoLmF0YW4yLFVrPU1hdGguY29zLGprPU1hdGgubWF4LEdrPU1hdGgubWluLFdrPU1hdGguc2luLHFrPU1hdGguc3FydCxZaz0xZS0xMixYaz1NYXRoLlBJLCRrPVhrLzIsS2s9MipYaztmdW5jdGlvbiBaayh0KXtyZXR1cm4gdD4xPzA6dDwtMT9YazpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gSmsodCl7cmV0dXJuIHQ+PTE/JGs6dDw9LTE/LSRrOk1hdGguYXNpbih0KX1mdW5jdGlvbiBRayh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiB0TCh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBlTCh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIG5MKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIGlMKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIHJMKHQsZSxuLGkscixvLGEscyl7dmFyIGw9bi10LGM9aS1lLHU9YS1yLGg9cy1vLGQ9aCpsLXUqYztpZighKGQqZDxZaykpcmV0dXJuW3QrKGQ9KHUqKGUtbyktaCoodC1yKSkvZCkqbCxlK2QqY119ZnVuY3Rpb24gb0wodCxlLG4saSxyLG8sYSl7dmFyIHM9dC1uLGw9ZS1pLGM9KGE/bzotbykvcWsocypzK2wqbCksdT1jKmwsaD0tYypzLGQ9dCt1LHA9ZStoLGY9bit1LG09aStoLGc9KGQrZikvMixfPShwK20pLzIseT1mLWQsdj1tLXAsYj15Knkrdip2LHg9ci1vLHc9ZCptLWYqcCxTPSh2PDA/LTE6MSkqcWsoamsoMCx4KngqYi13KncpKSxNPSh3KnYteSpTKS9iLEU9KC13KnktdipTKS9iLFQ9KHcqdit5KlMpL2IsQz0oLXcqeSt2KlMpL2IsQT1NLWcsaz1FLV8sTD1ULWcsUD1DLV87cmV0dXJuIEEqQStrKms+TCpMK1AqUCYmKE09VCxFPUMpLHtjeDpNLGN5OkUseDAxOi11LHkwMTotaCx4MTE6TSooci94LTEpLHkxMTpFKihyL3gtMSl9fWZ1bmN0aW9uIGFMKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBzTCh0KXtyZXR1cm4gbmV3IGFMKHQpfWZ1bmN0aW9uIGxMKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGNMKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIHVMKCl7dmFyIHQ9bEwsZT1jTCxuPUhrKCEwKSxpPW51bGwscj1zTCxvPW51bGw7ZnVuY3Rpb24gYShhKXt2YXIgcyxsLGMsdT1hLmxlbmd0aCxoPSExO2ZvcihudWxsPT1pJiYobz1yKGM9ZmcoKSkpLHM9MDtzPD11OysrcykhKHM8dSYmbihsPWFbc10scyxhKSk9PT1oJiYoKGg9IWgpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGgmJm8ucG9pbnQoK3QobCxzLGEpLCtlKGwscyxhKSk7aWYoYylyZXR1cm4gbz1udWxsLGMrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOkhrKCtlKSxhKTp0fSxhLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIaygrdCksYSk6ZX0sYS5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SGsoISF0KSxhKTpufSxhLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbnVsbCE9aSYmKG89cihpKSksYSk6cn0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2k9bz1udWxsOm89cihpPXQpLGEpOml9LGF9ZnVuY3Rpb24gaEwoKXt2YXIgdD1sTCxlPW51bGwsbj1IaygwKSxpPWNMLHI9SGsoITApLG89bnVsbCxhPXNMLHM9bnVsbDtmdW5jdGlvbiBsKGwpe3ZhciBjLHUsaCxkLHAsZj1sLmxlbmd0aCxtPSExLGc9bmV3IEFycmF5KGYpLF89bmV3IEFycmF5KGYpO2ZvcihudWxsPT1vJiYocz1hKHA9ZmcoKSkpLGM9MDtjPD1mOysrYyl7aWYoIShjPGYmJnIoZD1sW2NdLGMsbCkpPT09bSlpZihtPSFtKXU9YyxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxoPWMtMTtoPj11Oy0taClzLnBvaW50KGdbaF0sX1toXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9bSYmKGdbY109K3QoZCxjLGwpLF9bY109K24oZCxjLGwpLHMucG9pbnQoZT8rZShkLGMsbCk6Z1tjXSxpPytpKGQsYyxsKTpfW2NdKSl9aWYocClyZXR1cm4gcz1udWxsLHArIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiB1TCgpLmRlZmluZWQocikuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gbC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246SGsoK24pLGU9bnVsbCxsKTp0fSxsLngwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6SGsoK2UpLGwpOnR9LGwueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SGsoK3QpLGwpOmV9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhrKCt0KSxpPW51bGwsbCk6bn0sbC55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhrKCt0KSxsKTpufSxsLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OkhrKCt0KSxsKTppfSxsLmxpbmVYMD1sLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KG4pfSxsLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KGkpfSxsLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KG4pfSxsLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIayghIXQpLGwpOnJ9LGwuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxudWxsIT1vJiYocz1hKG8pKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/bz1zPW51bGw6cz1hKG89dCksbCk6b30sbH1mdW5jdGlvbiBkTCh0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBwTCh0KXtyZXR1cm4gdH1hTC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX19fTt2YXIgZkw9Z0woc0wpO2Z1bmN0aW9uIG1MKHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gZ0wodCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gbmV3IG1MKHQoZSkpfXJldHVybiBlLl9jdXJ2ZT10LGV9ZnVuY3Rpb24gX0wodCl7dmFyIGU9dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoZ0wodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24geUwoKXtyZXR1cm4gX0wodUwoKS5jdXJ2ZShmTCkpfWZ1bmN0aW9uIHZMKCl7dmFyIHQ9aEwoKS5jdXJ2ZShmTCksZT10LmN1cnZlLG49dC5saW5lWDAsaT10LmxpbmVYMSxyPXQubGluZVkwLG89dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBfTChuKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gX0woaSgpKX0sZGVsZXRlIHQubGluZVgxLHQubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIF9MKHIoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBfTChvKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKGdMKHQpKTplKCkuX2N1cnZlfSx0fWZ1bmN0aW9uIGJMKHQsZSl7cmV0dXJuWyhlPStlKSpNYXRoLmNvcyh0LT1NYXRoLlBJLzIpLGUqTWF0aC5zaW4odCldfW1MLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX2N1cnZlLnBvaW50KGUqTWF0aC5zaW4odCksZSotTWF0aC5jb3ModCkpfX07dmFyIHhMPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiB3TCh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gU0wodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIE1MKHQpe3ZhciBlPXdMLG49U0wsaT1sTCxyPWNMLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIGEscz14TC5jYWxsKGFyZ3VtZW50cyksbD1lLmFwcGx5KHRoaXMscyksYz1uLmFwcGx5KHRoaXMscyk7aWYob3x8KG89YT1mZygpKSx0KG8sK2kuYXBwbHkodGhpcywoc1swXT1sLHMpKSwrci5hcHBseSh0aGlzLHMpLCtpLmFwcGx5KHRoaXMsKHNbMF09YyxzKSksK3IuYXBwbHkodGhpcyxzKSksYSlyZXR1cm4gbz1udWxsLGErIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsYSk6ZX0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxhKTpufSxhLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIaygrdCksYSk6aX0sYS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SGsoK3QpLGEpOnJ9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1udWxsPT10P251bGw6dCxhKTpvfSxhfWZ1bmN0aW9uIEVMKHQsZSxuLGkscil7dC5tb3ZlVG8oZSxuKSx0LmJlemllckN1cnZlVG8oZT0oZStpKS8yLG4sZSxyLGkscil9ZnVuY3Rpb24gVEwodCxlLG4saSxyKXt0Lm1vdmVUbyhlLG4pLHQuYmV6aWVyQ3VydmVUbyhlLG49KG4rcikvMixpLG4saSxyKX1mdW5jdGlvbiBDTCh0LGUsbixpLHIpe3ZhciBvPWJMKGUsbiksYT1iTChlLG49KG4rcikvMikscz1iTChpLG4pLGw9YkwoaSxyKTt0Lm1vdmVUbyhvWzBdLG9bMV0pLHQuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9dmFyIEFMPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvWGspO3QubW92ZVRvKG4sMCksdC5hcmMoMCwwLG4sMCxLayl9fSxrTD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlLzUpLzI7dC5tb3ZlVG8oLTMqbiwtbiksdC5saW5lVG8oLW4sLW4pLHQubGluZVRvKC1uLC0zKm4pLHQubGluZVRvKG4sLTMqbiksdC5saW5lVG8obiwtbiksdC5saW5lVG8oMypuLC1uKSx0LmxpbmVUbygzKm4sbiksdC5saW5lVG8obixuKSx0LmxpbmVUbyhuLDMqbiksdC5saW5lVG8oLW4sMypuKSx0LmxpbmVUbygtbixuKSx0LmxpbmVUbygtMypuLG4pLHQuY2xvc2VQYXRoKCl9fSxMTD1NYXRoLnNxcnQoMS8zKSxQTD0yKkxMLE5MPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvUEwpLGk9bipMTDt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhpLDApLHQubGluZVRvKDAsbiksdC5saW5lVG8oLWksMCksdC5jbG9zZVBhdGgoKX19LElMPU1hdGguc2luKFhrLzEwKS9NYXRoLnNpbig3KlhrLzEwKSxSTD1NYXRoLnNpbihLay8xMCkqSUwsT0w9LU1hdGguY29zKEtrLzEwKSpJTCx6TD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydCguODkwODEzMDkxNTI5Mjg1MiplKSxpPVJMKm4scj1PTCpuO3QubW92ZVRvKDAsLW4pLHQubGluZVRvKGkscik7Zm9yKHZhciBvPTE7bzw1Oysrbyl7dmFyIGE9S2sqby81LHM9TWF0aC5jb3MoYSksbD1NYXRoLnNpbihhKTt0LmxpbmVUbyhsKm4sLXMqbiksdC5saW5lVG8ocyppLWwqcixsKmkrcypyKX10LmNsb3NlUGF0aCgpfX0sREw9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZSksaT0tbi8yO3QucmVjdChpLGksbixuKX19LEJMPU1hdGguc3FydCgzKSxITD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPS1NYXRoLnNxcnQoZS8oMypCTCkpO3QubW92ZVRvKDAsMipuKSx0LmxpbmVUbygtQkwqbiwtbiksdC5saW5lVG8oQkwqbiwtbiksdC5jbG9zZVBhdGgoKX19LEZMPS0uNSxWTD1NYXRoLnNxcnQoMykvMixVTD0xL01hdGguc3FydCgxMiksakw9MyooVUwvMisxKSxHTD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlL2pMKSxpPW4vMixyPW4qVUwsbz1pLGE9bipVTCtuLHM9LW8sbD1hO3QubW92ZVRvKGksciksdC5saW5lVG8obyxhKSx0LmxpbmVUbyhzLGwpLHQubGluZVRvKEZMKmktVkwqcixWTCppK0ZMKnIpLHQubGluZVRvKEZMKm8tVkwqYSxWTCpvK0ZMKmEpLHQubGluZVRvKEZMKnMtVkwqbCxWTCpzK0ZMKmwpLHQubGluZVRvKEZMKmkrVkwqcixGTCpyLVZMKmkpLHQubGluZVRvKEZMKm8rVkwqYSxGTCphLVZMKm8pLHQubGluZVRvKEZMKnMrVkwqbCxGTCpsLVZMKnMpLHQuY2xvc2VQYXRoKCl9fSxXTD1bQUwsa0wsTkwsREwsekwsSEwsR0xdO2Z1bmN0aW9uIHFMKCl7fWZ1bmN0aW9uIFlMKHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqdC5feDArdC5feDEpLzMsKDIqdC5feTArdC5feTEpLzMsKHQuX3gwKzIqdC5feDEpLzMsKHQuX3kwKzIqdC5feTEpLzMsKHQuX3gwKzQqdC5feDErZSkvNiwodC5feTArNCp0Ll95MStuKS82KX1mdW5jdGlvbiBYTCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gJEwodCl7cmV0dXJuIG5ldyBYTCh0KX1mdW5jdGlvbiBLTCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gWkwodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEpMKHQsZSl7dGhpcy5fYmFzaXM9bmV3IFhMKHQpLHRoaXMuX2JldGE9ZX1YTC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOllMKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0OllMKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxLTC5wcm90b3R5cGU9e2FyZWFTdGFydDpxTCxhcmVhRW5kOnFMLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPXQsdGhpcy5feTI9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9dCx0aGlzLl95ND1lLHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNik7YnJlYWs7ZGVmYXVsdDpZTCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0sWkwucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIG49KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixpPSh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhuLGkpOnRoaXMuX2NvbnRleHQubW92ZVRvKG4saSk7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpZTCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0sSkwucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoLTE7aWYobj4wKWZvcih2YXIgaSxyPXRbMF0sbz1lWzBdLGE9dFtuXS1yLHM9ZVtuXS1vLGw9LTE7KytsPD1uOyl0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbbF0rKDEtdGhpcy5fYmV0YSkqKHIrKGk9bC9uKSphKSx0aGlzLl9iZXRhKmVbbF0rKDEtdGhpcy5fYmV0YSkqKG8raSpzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19O3ZhciBRTD0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxPT09ZT9uZXcgWEwodCk6bmV3IEpMKHQsZSl9cmV0dXJuIG4uYmV0YT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KSguODUpO2Z1bmN0aW9uIHRQKHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1uKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gZVAodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWVQLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0UCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6dFAodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBuUD0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgZVAodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0pKDApO2Z1bmN0aW9uIGlQKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1pUC5wcm90b3R5cGU9e2FyZWFTdGFydDpxTCxhcmVhRW5kOnFMLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6dFAodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciByUD0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgaVAodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0pKDApO2Z1bmN0aW9uIG9QKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1vUC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDp0UCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIGFQPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBvUCh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoMCk7ZnVuY3Rpb24gc1AodCxlLG4pe3ZhciBpPXQuX3gxLHI9dC5feTEsbz10Ll94MixhPXQuX3kyO2lmKHQuX2wwMV9hPllrKXt2YXIgcz0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSxsPTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtpPShpKnMtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvbCxyPShyKnMtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvbH1pZih0Ll9sMjNfYT5Zayl7dmFyIGM9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsdT0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7bz0obypjK3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvdSxhPShhKmMrdC5feTEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS91fXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhpLHIsbyxhLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBsUCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfWxQLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6c1AodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgY1A9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgbFAodCxlKTpuZXcgZVAodCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KSguNSk7ZnVuY3Rpb24gdVAodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX11UC5wcm90b3R5cGU9e2FyZWFTdGFydDpxTCxhcmVhRW5kOnFMLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OnNQKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIGhQPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IHVQKHQsZSk6bmV3IGlQKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoLjUpO2Z1bmN0aW9uIGRQKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9ZFAucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OnNQKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIHBQPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IGRQKHQsZSk6bmV3IG9QKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoLjUpO2Z1bmN0aW9uIGZQKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBtUCh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gZ1AodCxlLG4pe3ZhciBpPXQuX3gxLXQuX3gwLHI9ZS10Ll94MSxvPSh0Ll95MS10Ll95MCkvKGl8fHI8MCYmLTApLGE9KG4tdC5feTEpLyhyfHxpPDAmJi0wKSxzPShvKnIrYSppKS8oaStyKTtyZXR1cm4obVAobykrbVAoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBfUCh0LGUpe3ZhciBuPXQuX3gxLXQuX3gwO3JldHVybiBuPygzKih0Ll95MS10Ll95MCkvbi1lKS8yOmV9ZnVuY3Rpb24geVAodCxlLG4pe3ZhciBpPXQuX3gwLHI9dC5feDEsbz10Ll95MSxhPShyLWkpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGkrYSx0Ll95MCthKmUsci1hLG8tYSpuLHIsbyl9ZnVuY3Rpb24gdlAodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGJQKHQpe3RoaXMuX2NvbnRleHQ9bmV3IHhQKHQpfWZ1bmN0aW9uIHhQKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiB3UCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gU1AodCl7dmFyIGUsbixpPXQubGVuZ3RoLTEscj1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkoaSk7Zm9yKHJbMF09MCxvWzBdPTIsYVswXT10WzBdKzIqdFsxXSxlPTE7ZTxpLTE7KytlKXJbZV09MSxvW2VdPTQsYVtlXT00KnRbZV0rMip0W2UrMV07Zm9yKHJbaS0xXT0yLG9baS0xXT03LGFbaS0xXT04KnRbaS0xXSt0W2ldLGU9MTtlPGk7KytlKW9bZV0tPW49cltlXS9vW2UtMV0sYVtlXS09biphW2UtMV07Zm9yKHJbaS0xXT1hW2ktMV0vb1tpLTFdLGU9aS0yO2U+PTA7LS1lKXJbZV09KGFbZV0tcltlKzFdKS9vW2VdO2ZvcihvW2ktMV09KHRbaV0rcltpLTFdKS8yLGU9MDtlPGktMTsrK2Upb1tlXT0yKnRbZSsxXS1yW2UrMV07cmV0dXJuW3Isb119ZnVuY3Rpb24gTVAodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1lfWZ1bmN0aW9uIEVQKHQsZSl7aWYoKHI9dC5sZW5ndGgpPjEpZm9yKHZhciBuLGkscixvPTEsYT10W2VbMF1dLHM9YS5sZW5ndGg7bzxyOysrbylmb3IoaT1hLGE9dFtlW29dXSxuPTA7bjxzOysrbilhW25dWzFdKz1hW25dWzBdPWlzTmFOKGlbbl1bMV0pP2lbbl1bMF06aVtuXVsxXX1mdW5jdGlvbiBUUCh0KXtmb3IodmFyIGU9dC5sZW5ndGgsbj1uZXcgQXJyYXkoZSk7LS1lPj0wOyluW2VdPWU7cmV0dXJuIG59ZnVuY3Rpb24gQ1AodCxlKXtyZXR1cm4gdFtlXX1mdW5jdGlvbiBBUCh0KXt2YXIgZT10Lm1hcChrUCk7cmV0dXJuIFRQKHQpLnNvcnQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGVbdF0tZVtuXX0pKX1mdW5jdGlvbiBrUCh0KXtmb3IodmFyIGUsbj0tMSxpPTAscj10Lmxlbmd0aCxvPS0xLzA7KytuPHI7KShlPSt0W25dWzFdKT5vJiYobz1lLGk9bik7cmV0dXJuIGl9ZnVuY3Rpb24gTFAodCl7dmFyIGU9dC5tYXAoUFApO3JldHVybiBUUCh0KS5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdLWVbbl19KSl9ZnVuY3Rpb24gUFAodCl7Zm9yKHZhciBlLG49MCxpPS0xLHI9dC5sZW5ndGg7KytpPHI7KShlPSt0W2ldWzFdKSYmKG4rPWUpO3JldHVybiBufWZ1bmN0aW9uIE5QKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBJUCh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBSUCh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBPUCgpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIHpQKHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gRFAodCxlKXt2YXIgbj1lLGk9ZS5SLHI9bi5VO3I/ci5MPT09bj9yLkw9aTpyLlI9aTp0Ll89aSxpLlU9cixuLlU9aSxuLlI9aS5MLG4uUiYmKG4uUi5VPW4pLGkuTD1ufWZ1bmN0aW9uIEJQKHQsZSl7dmFyIG49ZSxpPWUuTCxyPW4uVTtyP3IuTD09PW4/ci5MPWk6ci5SPWk6dC5fPWksaS5VPXIsbi5VPWksbi5MPWkuUixuLkwmJihuLkwuVT1uKSxpLlI9bn1mdW5jdGlvbiBIUCh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9ZnVuY3Rpb24gRlAodCxlLG4saSl7dmFyIHI9W251bGwsbnVsbF0sbz11Ti5wdXNoKHIpLTE7cmV0dXJuIHIubGVmdD10LHIucmlnaHQ9ZSxuJiZVUChyLHQsZSxuKSxpJiZVUChyLGUsdCxpKSxsTlt0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxsTltlLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxyfWZ1bmN0aW9uIFZQKHQsZSxuKXt2YXIgaT1bZSxuXTtyZXR1cm4gaS5sZWZ0PXQsaX1mdW5jdGlvbiBVUCh0LGUsbixpKXt0WzBdfHx0WzFdP3QubGVmdD09PW4/dFsxXT1pOnRbMF09aToodFswXT1pLHQubGVmdD1lLHQucmlnaHQ9bil9ZnVuY3Rpb24galAodCxlLG4saSxyKXt2YXIgbyxhPXRbMF0scz10WzFdLGw9YVswXSxjPWFbMV0sdT0wLGg9MSxkPXNbMF0tbCxwPXNbMV0tYztpZihvPWUtbCxkfHwhKG8+MCkpe2lmKG8vPWQsZDwwKXtpZihvPHUpcmV0dXJuO288aCYmKGg9byl9ZWxzZSBpZihkPjApe2lmKG8+aClyZXR1cm47bz51JiYodT1vKX1pZihvPWktbCxkfHwhKG88MCkpe2lmKG8vPWQsZDwwKXtpZihvPmgpcmV0dXJuO28+dSYmKHU9byl9ZWxzZSBpZihkPjApe2lmKG88dSlyZXR1cm47bzxoJiYoaD1vKX1pZihvPW4tYyxwfHwhKG8+MCkpe2lmKG8vPXAscDwwKXtpZihvPHUpcmV0dXJuO288aCYmKGg9byl9ZWxzZSBpZihwPjApe2lmKG8+aClyZXR1cm47bz51JiYodT1vKX1pZihvPXItYyxwfHwhKG88MCkpe2lmKG8vPXAscDwwKXtpZihvPmgpcmV0dXJuO28+dSYmKHU9byl9ZWxzZSBpZihwPjApe2lmKG88dSlyZXR1cm47bzxoJiYoaD1vKX1yZXR1cm4hKHU+MHx8aDwxKXx8KHU+MCYmKHRbMF09W2wrdSpkLGMrdSpwXSksaDwxJiYodFsxXT1bbCtoKmQsYytoKnBdKSwhMCl9fX19fWZ1bmN0aW9uIEdQKHQsZSxuLGkscil7dmFyIG89dFsxXTtpZihvKXJldHVybiEwO3ZhciBhLHMsbD10WzBdLGM9dC5sZWZ0LHU9dC5yaWdodCxoPWNbMF0sZD1jWzFdLHA9dVswXSxmPXVbMV0sbT0oaCtwKS8yO2lmKGY9PT1kKXtpZihtPGV8fG0+PWkpcmV0dXJuO2lmKGg+cCl7aWYobCl7aWYobFsxXT49cilyZXR1cm59ZWxzZSBsPVttLG5dO289W20scl19ZWxzZXtpZihsKXtpZihsWzFdPG4pcmV0dXJufWVsc2UgbD1bbSxyXTtvPVttLG5dfX1lbHNlIGlmKHM9KGQrZikvMi0oYT0oaC1wKS8oZi1kKSkqbSxhPC0xfHxhPjEpaWYoaD5wKXtpZihsKXtpZihsWzFdPj1yKXJldHVybn1lbHNlIGw9WyhuLXMpL2Esbl07bz1bKHItcykvYSxyXX1lbHNle2lmKGwpe2lmKGxbMV08bilyZXR1cm59ZWxzZSBsPVsoci1zKS9hLHJdO289WyhuLXMpL2Esbl19ZWxzZSBpZihkPGYpe2lmKGwpe2lmKGxbMF0+PWkpcmV0dXJufWVsc2UgbD1bZSxhKmUrc107bz1baSxhKmkrc119ZWxzZXtpZihsKXtpZihsWzBdPGUpcmV0dXJufWVsc2UgbD1baSxhKmkrc107bz1bZSxhKmUrc119cmV0dXJuIHRbMF09bCx0WzFdPW8sITB9ZnVuY3Rpb24gV1AodCxlKXt2YXIgbj10LnNpdGUsaT1lLmxlZnQscj1lLnJpZ2h0O3JldHVybiBuPT09ciYmKHI9aSxpPW4pLHI/TWF0aC5hdGFuMihyWzFdLWlbMV0sclswXS1pWzBdKToobj09PWk/KGk9ZVsxXSxyPWVbMF0pOihpPWVbMF0scj1lWzFdKSxNYXRoLmF0YW4yKGlbMF0tclswXSxyWzFdLWlbMV0pKX1mdW5jdGlvbiBxUCh0LGUpe3JldHVybiBlWysoZS5sZWZ0IT09dC5zaXRlKV19ZnVuY3Rpb24gWVAodCxlKXtyZXR1cm4gZVsrKGUubGVmdD09PXQuc2l0ZSldfWZQLnByb3RvdHlwZT17YXJlYVN0YXJ0OnFMLGFyZWFFbmQ6cUwsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3Q9K3QsZT0rZSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSkpfX0sdlAucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOnlQKHRoaXMsdGhpcy5fdDAsX1AodGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1OYU47aWYoZT0rZSwodD0rdCkhPT10aGlzLl94MXx8ZSE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHlQKHRoaXMsX1AodGhpcyxuPWdQKHRoaXMsdCxlKSksbik7YnJlYWs7ZGVmYXVsdDp5UCh0aGlzLHRoaXMuX3QwLG49Z1AodGhpcyx0LGUpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9bn19fSwoYlAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodlAucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXt2UC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9LHhQLnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpLHIsbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUsdCxpLG4sbyxyKX19LHdQLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LG49dC5sZW5ndGg7aWYobilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sZVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxlWzBdKSwyPT09bil0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLGVbMV0pO2Vsc2UgZm9yKHZhciBpPVNQKHQpLHI9U1AoZSksbz0wLGE9MTthPG47KytvLCsrYSl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oaVswXVtvXSxyWzBdW29dLGlbMV1bb10sclsxXVtvXSx0W2FdLGVbYV0pOyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PW4pJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19LE1QLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciBuPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKG4sdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8obixlKX19dGhpcy5feD10LHRoaXMuX3k9ZX19LE9QLnByb3RvdHlwZT17Y29uc3RydWN0b3I6T1AsaW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO249dH1lbHNlIHRoaXMuXz8odD1IUCh0aGlzLl8pLGUuUD1udWxsLGUuTj10LHQuUD10Lkw9ZSxuPXQpOihlLlA9ZS5OPW51bGwsdGhpcy5fPWUsbj1udWxsKTtmb3IoZS5MPWUuUj1udWxsLGUuVT1uLGUuQz0hMCx0PWU7biYmbi5DOyluPT09KGk9bi5VKS5MPyhyPWkuUikmJnIuQz8obi5DPXIuQz0hMSxpLkM9ITAsdD1pKToodD09PW4uUiYmKERQKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsaS5DPSEwLEJQKHRoaXMsaSkpOihyPWkuTCkmJnIuQz8obi5DPXIuQz0hMSxpLkM9ITAsdD1pKToodD09PW4uTCYmKEJQKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsaS5DPSEwLERQKHRoaXMsaSkpLG49dC5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24odCl7dC5OJiYodC5OLlA9dC5QKSx0LlAmJih0LlAuTj10Lk4pLHQuTj10LlA9bnVsbDt2YXIgZSxuLGkscj10LlUsbz10LkwsYT10LlI7aWYobj1vP2E/SFAoYSk6bzphLHI/ci5MPT09dD9yLkw9bjpyLlI9bjp0aGlzLl89bixvJiZhPyhpPW4uQyxuLkM9dC5DLG4uTD1vLG8uVT1uLG4hPT1hPyhyPW4uVSxuLlU9dC5VLHIuTD10PW4uUixuLlI9YSxhLlU9bik6KG4uVT1yLHI9bix0PW4uUikpOihpPXQuQyx0PW4pLHQmJih0LlU9ciksIWkpaWYodCYmdC5DKXQuQz0hMTtlbHNle2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PXIuTCl7aWYoKGU9ci5SKS5DJiYoZS5DPSExLHIuQz0hMCxEUCh0aGlzLHIpLGU9ci5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLlImJmUuUi5DfHwoZS5MLkM9ITEsZS5DPSEwLEJQKHRoaXMsZSksZT1yLlIpLGUuQz1yLkMsci5DPWUuUi5DPSExLERQKHRoaXMsciksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYoKGU9ci5MKS5DJiYoZS5DPSExLHIuQz0hMCxCUCh0aGlzLHIpLGU9ci5MKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLkwmJmUuTC5DfHwoZS5SLkM9ITEsZS5DPSEwLERQKHRoaXMsZSksZT1yLkwpLGUuQz1yLkMsci5DPWUuTC5DPSExLEJQKHRoaXMsciksdD10aGlzLl87YnJlYWt9ZS5DPSEwLHQ9cixyPXIuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fTt2YXIgWFAsJFA9W107ZnVuY3Rpb24gS1AoKXt6UCh0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gWlAodCl7dmFyIGU9dC5QLG49dC5OO2lmKGUmJm4pe3ZhciBpPWUuc2l0ZSxyPXQuc2l0ZSxvPW4uc2l0ZTtpZihpIT09byl7dmFyIGE9clswXSxzPXJbMV0sbD1pWzBdLWEsYz1pWzFdLXMsdT1vWzBdLWEsaD1vWzFdLXMsZD0yKihsKmgtYyp1KTtpZighKGQ+PS1kTikpe3ZhciBwPWwqbCtjKmMsZj11KnUraCpoLG09KGgqcC1jKmYpL2QsZz0obCpmLXUqcCkvZCxfPSRQLnBvcCgpfHxuZXcgS1A7Xy5hcmM9dCxfLnNpdGU9cixfLng9bSthLF8ueT0oXy5jeT1nK3MpK01hdGguc3FydChtKm0rZypnKSx0LmNpcmNsZT1fO2Zvcih2YXIgeT1udWxsLHY9Y04uXzt2OylpZihfLnk8di55fHxfLnk9PT12LnkmJl8ueDw9di54KXtpZighdi5MKXt5PXYuUDticmVha312PXYuTH1lbHNle2lmKCF2LlIpe3k9djticmVha312PXYuUn1jTi5pbnNlcnQoeSxfKSx5fHwoWFA9Xyl9fX19ZnVuY3Rpb24gSlAodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KFhQPWUuTiksY04ucmVtb3ZlKGUpLCRQLnB1c2goZSkselAoZSksdC5jaXJjbGU9bnVsbCl9dmFyIFFQPVtdO2Z1bmN0aW9uIHROKCl7elAodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIGVOKHQpe3ZhciBlPVFQLnBvcCgpfHxuZXcgdE47cmV0dXJuIGUuc2l0ZT10LGV9ZnVuY3Rpb24gbk4odCl7SlAodCksc04ucmVtb3ZlKHQpLFFQLnB1c2godCkselAodCl9ZnVuY3Rpb24gaU4odCl7dmFyIGU9dC5jaXJjbGUsbj1lLngsaT1lLmN5LHI9W24saV0sbz10LlAsYT10Lk4scz1bdF07bk4odCk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKG4tbC5jaXJjbGUueCk8aE4mJk1hdGguYWJzKGktbC5jaXJjbGUuY3kpPGhOOylvPWwuUCxzLnVuc2hpZnQobCksbk4obCksbD1vO3MudW5zaGlmdChsKSxKUChsKTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMobi1jLmNpcmNsZS54KTxoTiYmTWF0aC5hYnMoaS1jLmNpcmNsZS5jeSk8aE47KWE9Yy5OLHMucHVzaChjKSxuTihjKSxjPWE7cy5wdXNoKGMpLEpQKGMpO3ZhciB1LGg9cy5sZW5ndGg7Zm9yKHU9MTt1PGg7Kyt1KVVQKChjPXNbdV0pLmVkZ2UsKGw9c1t1LTFdKS5zaXRlLGMuc2l0ZSxyKTsoYz1zW2gtMV0pLmVkZ2U9RlAoKGw9c1swXSkuc2l0ZSxjLnNpdGUsbnVsbCxyKSxaUChsKSxaUChjKX1mdW5jdGlvbiByTih0KXtmb3IodmFyIGUsbixpLHIsbz10WzBdLGE9dFsxXSxzPXNOLl87czspaWYoKGk9b04ocyxhKS1vKT5oTilzPXMuTDtlbHNle2lmKCEoKHI9by1hTihzLGEpKT5oTikpe2k+LWhOPyhlPXMuUCxuPXMpOnI+LWhOPyhlPXMsbj1zLk4pOmU9bj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn0hKGZ1bmN0aW9uIGwodCl7bE5bdC5pbmRleF09e3NpdGU6dCxoYWxmZWRnZXM6W119fSkodCk7dmFyIGM9ZU4odCk7aWYoc04uaW5zZXJ0KGUsYyksZXx8bil7aWYoZT09PW4pcmV0dXJuIEpQKGUpLG49ZU4oZS5zaXRlKSxzTi5pbnNlcnQoYyxuKSxjLmVkZ2U9bi5lZGdlPUZQKGUuc2l0ZSxjLnNpdGUpLFpQKGUpLHZvaWQgWlAobik7aWYobil7SlAoZSksSlAobik7dmFyIHU9ZS5zaXRlLGg9dVswXSxkPXVbMV0scD10WzBdLWgsZj10WzFdLWQsbT1uLnNpdGUsZz1tWzBdLWgsXz1tWzFdLWQseT0yKihwKl8tZipnKSx2PXAqcCtmKmYsYj1nKmcrXypfLHg9WyhfKnYtZipiKS95K2gsKHAqYi1nKnYpL3krZF07VVAobi5lZGdlLHUsbSx4KSxjLmVkZ2U9RlAodSx0LG51bGwseCksbi5lZGdlPUZQKHQsbSxudWxsLHgpLFpQKGUpLFpQKG4pfWVsc2UgYy5lZGdlPUZQKGUuc2l0ZSxjLnNpdGUpfX1mdW5jdGlvbiBvTih0LGUpe3ZhciBuPXQuc2l0ZSxpPW5bMF0scj1uWzFdLG89ci1lO2lmKCFvKXJldHVybiBpO3ZhciBhPXQuUDtpZighYSlyZXR1cm4tMS8wO3ZhciBzPShuPWEuc2l0ZSlbMF0sbD1uWzFdLGM9bC1lO2lmKCFjKXJldHVybiBzO3ZhciB1PXMtaSxoPTEvby0xL2MsZD11L2M7cmV0dXJuIGg/KC1kK01hdGguc3FydChkKmQtMipoKih1KnUvKC0yKmMpLWwrYy8yK3Itby8yKSkpL2graTooaStzKS8yfWZ1bmN0aW9uIGFOKHQsZSl7dmFyIG49dC5OO2lmKG4pcmV0dXJuIG9OKG4sZSk7dmFyIGk9dC5zaXRlO3JldHVybiBpWzFdPT09ZT9pWzBdOjEvMH12YXIgc04sbE4sY04sdU4saE49MWUtNixkTj0xZS0xMjtmdW5jdGlvbiBwTih0LGUsbil7cmV0dXJuKHRbMF0tblswXSkqKGVbMV0tdFsxXSktKHRbMF0tZVswXSkqKG5bMV0tdFsxXSl9ZnVuY3Rpb24gZk4odCxlKXtyZXR1cm4gZVsxXS10WzFdfHxlWzBdLXRbMF19ZnVuY3Rpb24gbU4odCxlKXt2YXIgbixpLHIsbz10LnNvcnQoZk4pLnBvcCgpO2Zvcih1Tj1bXSxsTj1uZXcgQXJyYXkodC5sZW5ndGgpLHNOPW5ldyBPUCxjTj1uZXcgT1A7OylpZihyPVhQLG8mJighcnx8b1sxXTxyLnl8fG9bMV09PT1yLnkmJm9bMF08ci54KSlvWzBdPT09biYmb1sxXT09PWl8fChyTihvKSxuPW9bMF0saT1vWzFdKSxvPXQucG9wKCk7ZWxzZXtpZighcilicmVhaztpTihyLmFyYyl9aWYoKGZ1bmN0aW9uIGEoKXtmb3IodmFyIHQsZSxuLGkscj0wLG89bE4ubGVuZ3RoO3I8bzsrK3IpaWYoKHQ9bE5bcl0pJiYoaT0oZT10LmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilhW25dPW4sc1tuXT1XUCh0LHVOW2Vbbl1dKTtmb3IoYS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBzW2VdLXNbdF19KSksbj0wO248aTsrK24pc1tuXT1lW2Fbbl1dO2ZvcihuPTA7bjxpOysrbillW25dPXNbbl19fSkoKSxlKXt2YXIgcz0rZVswXVswXSxsPStlWzBdWzFdLGM9K2VbMV1bMF0sdT0rZVsxXVsxXTshKGZ1bmN0aW9uIGgodCxlLG4saSl7Zm9yKHZhciByLG89dU4ubGVuZ3RoO28tLTspR1Aocj11TltvXSx0LGUsbixpKSYmalAocix0LGUsbixpKSYmKE1hdGguYWJzKHJbMF1bMF0tclsxXVswXSk+aE58fE1hdGguYWJzKHJbMF1bMV0tclsxXVsxXSk+aE4pfHxkZWxldGUgdU5bb119KShzLGwsYyx1KSwoZnVuY3Rpb24gZCh0LGUsbixpKXt2YXIgcixvLGEscyxsLGMsdSxoLGQscCxmLG0sZz1sTi5sZW5ndGgsXz0hMDtmb3Iocj0wO3I8ZzsrK3IpaWYobz1sTltyXSl7Zm9yKGE9by5zaXRlLHM9KGw9by5oYWxmZWRnZXMpLmxlbmd0aDtzLS07KXVOW2xbc11dfHxsLnNwbGljZShzLDEpO2ZvcihzPTAsYz1sLmxlbmd0aDtzPGM7KWY9KHA9WVAobyx1TltsW3NdXSkpWzBdLG09cFsxXSxoPSh1PXFQKG8sdU5bbFsrK3MlY11dKSlbMF0sZD11WzFdLChNYXRoLmFicyhmLWgpPmhOfHxNYXRoLmFicyhtLWQpPmhOKSYmKGwuc3BsaWNlKHMsMCx1Ti5wdXNoKFZQKGEscCxNYXRoLmFicyhmLXQpPGhOJiZpLW0+aE4/W3QsTWF0aC5hYnMoaC10KTxoTj9kOmldOk1hdGguYWJzKG0taSk8aE4mJm4tZj5oTj9bTWF0aC5hYnMoZC1pKTxoTj9oOm4saV06TWF0aC5hYnMoZi1uKTxoTiYmbS1lPmhOP1tuLE1hdGguYWJzKGgtbik8aE4/ZDplXTpNYXRoLmFicyhtLWUpPGhOJiZmLXQ+aE4/W01hdGguYWJzKGQtZSk8aE4/aDp0LGVdOm51bGwpKS0xKSwrK2MpO2MmJihfPSExKX1pZihfKXt2YXIgeSx2LGIseD0xLzA7Zm9yKHI9MCxfPW51bGw7cjxnOysrcikobz1sTltyXSkmJihiPSh5PShhPW8uc2l0ZSlbMF0tdCkqeSsodj1hWzFdLWUpKnYpPHgmJih4PWIsXz1vKTtpZihfKXt2YXIgdz1bdCxlXSxTPVt0LGldLE09W24saV0sRT1bbixlXTtfLmhhbGZlZGdlcy5wdXNoKHVOLnB1c2goVlAoYT1fLnNpdGUsdyxTKSktMSx1Ti5wdXNoKFZQKGEsUyxNKSktMSx1Ti5wdXNoKFZQKGEsTSxFKSktMSx1Ti5wdXNoKFZQKGEsRSx3KSktMSl9fWZvcihyPTA7cjxnOysrcikobz1sTltyXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBsTltyXSl9KShzLGwsYyx1KX10aGlzLmVkZ2VzPXVOLHRoaXMuY2VsbHM9bE4sc049Y049dU49bE49bnVsbH1mdW5jdGlvbiBnTih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gX04odCxlLG4pe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPWUsdGhpcy50cmFuc2Zvcm09bn1mdW5jdGlvbiB5Tih0LGUsbil7dGhpcy5rPXQsdGhpcy54PWUsdGhpcy55PW59bU4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjptTixwb2x5Z29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKChmdW5jdGlvbihlKXt2YXIgbj1lLmhhbGZlZGdlcy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBxUChlLHRbbl0pfSkpO3JldHVybiBuLmRhdGE9ZS5zaXRlLmRhdGEsbn0pKX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goKGZ1bmN0aW9uKG4saSl7aWYobz0ocj1uLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgcixvLGEscz1uLnNpdGUsbD0tMSxjPWVbcltvLTFdXSx1PWMubGVmdD09PXM/Yy5yaWdodDpjLmxlZnQ7KytsPG87KWE9dSx1PShjPWVbcltsXV0pLmxlZnQ9PT1zP2MucmlnaHQ6Yy5sZWZ0LGEmJnUmJmk8YS5pbmRleCYmaTx1LmluZGV4JiZwTihzLGEsdSk8MCYmdC5wdXNoKFtzLmRhdGEsYS5kYXRhLHUuZGF0YV0pfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KSl9LGZpbmQ6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaSxyLG89dGhpcyxhPW8uX2ZvdW5kfHwwLHM9by5jZWxscy5sZW5ndGg7IShyPW8uY2VsbHNbYV0pOylpZigrK2E+PXMpcmV0dXJuIG51bGw7dmFyIGw9dC1yLnNpdGVbMF0sYz1lLXIuc2l0ZVsxXSx1PWwqbCtjKmM7ZG97cj1vLmNlbGxzW2k9YV0sYT1udWxsLHIuaGFsZmVkZ2VzLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPW8uZWRnZXNbbl0scz1pLmxlZnQ7aWYocyE9PXIuc2l0ZSYmc3x8KHM9aS5yaWdodCkpe3ZhciBsPXQtc1swXSxjPWUtc1sxXSxoPWwqbCtjKmM7aDx1JiYodT1oLGE9cy5pbmRleCl9fSkpfXdoaWxlKG51bGwhPT1hKTtyZXR1cm4gby5fZm91bmQ9aSxudWxsPT1ufHx1PD1uKm4/ci5zaXRlOm51bGx9fSx5Ti5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnlOLHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyB5Tih0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10JjA9PT1lP3RoaXM6bmV3IHlOKHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuayplKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIHZOPW5ldyB5TigxLDAsMCk7ZnVuY3Rpb24gYk4odCl7Zm9yKDshdC5fX3pvb207KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiB2TjtyZXR1cm4gdC5fX3pvb219ZnVuY3Rpb24geE4oKXt1dS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiB3Tigpe3V1LnByZXZlbnREZWZhdWx0KCksdXUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gU04oKXtyZXR1cm4hdXUuY3RybEtleSYmIXV1LmJ1dHRvbn1mdW5jdGlvbiBNTigpe3ZhciB0PXRoaXM7cmV0dXJuIHQgaW5zdGFuY2VvZiBTVkdFbGVtZW50Pyh0PXQub3duZXJTVkdFbGVtZW50fHx0KS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT9bWyh0PXQudmlld0JveC5iYXNlVmFsKS54LHQueV0sW3QueCt0LndpZHRoLHQueSt0LmhlaWdodF1dOltbMCwwXSxbdC53aWR0aC5iYXNlVmFsLnZhbHVlLHQuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTpbWzAsMF0sW3QuY2xpZW50V2lkdGgsdC5jbGllbnRIZWlnaHRdXX1mdW5jdGlvbiBFTigpe3JldHVybiB0aGlzLl9fem9vbXx8dk59ZnVuY3Rpb24gVE4oKXtyZXR1cm4tdXUuZGVsdGFZKigxPT09dXUuZGVsdGFNb2RlPy4wNTp1dS5kZWx0YU1vZGU/MTouMDAyKX1mdW5jdGlvbiBDTigpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBBTih0LGUsbil7dmFyIGk9dC5pbnZlcnRYKGVbMF1bMF0pLW5bMF1bMF0scj10LmludmVydFgoZVsxXVswXSktblsxXVswXSxvPXQuaW52ZXJ0WShlWzBdWzFdKS1uWzBdWzFdLGE9dC5pbnZlcnRZKGVbMV1bMV0pLW5bMV1bMV07cmV0dXJuIHQudHJhbnNsYXRlKHI+aT8oaStyKS8yOk1hdGgubWluKDAsaSl8fE1hdGgubWF4KDAsciksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24ga04oKXt2YXIgdCxlLG49U04saT1NTixyPUFOLG89VE4sYT1DTixzPVswLDEvMF0sbD1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSxjPTI1MCx1PW9wLGg9bGMoInN0YXJ0Iiwiem9vbSIsImVuZCIpLGQ9NTAwLHA9MDtmdW5jdGlvbiBmKHQpe3QucHJvcGVydHkoIl9fem9vbSIsRU4pLm9uKCJ3aGVlbC56b29tIix4KS5vbigibW91c2Vkb3duLnpvb20iLHcpLm9uKCJkYmxjbGljay56b29tIixTKS5maWx0ZXIoYSkub24oInRvdWNoc3RhcnQuem9vbSIsTSkub24oInRvdWNobW92ZS56b29tIixFKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixUKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gbSh0LGUpe3JldHVybihlPU1hdGgubWF4KHNbMF0sTWF0aC5taW4oc1sxXSxlKSkpPT09dC5rP3Q6bmV3IHlOKGUsdC54LHQueSl9ZnVuY3Rpb24gZyh0LGUsbil7dmFyIGk9ZVswXS1uWzBdKnQuayxyPWVbMV0tblsxXSp0Lms7cmV0dXJuIGk9PT10LngmJnI9PT10Lnk/dDpuZXcgeU4odC5rLGkscil9ZnVuY3Rpb24gXyh0KXtyZXR1cm5bKCt0WzBdWzBdKyArdFsxXVswXSkvMiwoK3RbMF1bMV0rICt0WzFdWzFdKS8yXX1mdW5jdGlvbiB5KHQsZSxuKXt0Lm9uKCJzdGFydC56b29tIiwoZnVuY3Rpb24oKXt2KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsKGZ1bmN0aW9uKCl7dih0aGlzLGFyZ3VtZW50cykuZW5kKCl9KSkudHdlZW4oInpvb20iLChmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHMsbz12KHQsciksYT1pLmFwcGx5KHQscikscz1udWxsPT1uP18oYSk6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0LHIpOm4sbD1NYXRoLm1heChhWzFdWzBdLWFbMF1bMF0sYVsxXVsxXS1hWzBdWzFdKSxjPXQuX196b29tLGg9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0LHIpOmUsZD11KGMuaW52ZXJ0KHMpLmNvbmNhdChsL2MuayksaC5pbnZlcnQocykuY29uY2F0KGwvaC5rKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKDE9PT10KXQ9aDtlbHNle3ZhciBlPWQodCksbj1sL2VbMl07dD1uZXcgeU4obixzWzBdLWVbMF0qbixzWzFdLWVbMV0qbil9by56b29tKG51bGwsdCl9fSkpfWZ1bmN0aW9uIHYodCxlLG4pe3JldHVybiFuJiZ0Ll9fem9vbWluZ3x8bmV3IGIodCxlKX1mdW5jdGlvbiBiKHQsZSl7dGhpcy50aGF0PXQsdGhpcy5hcmdzPWUsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD1pLmFwcGx5KHQsZSksdGhpcy50YXBzPTB9ZnVuY3Rpb24geCgpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD12KHRoaXMsYXJndW1lbnRzKSxlPXRoaXMuX196b29tLGk9TWF0aC5tYXgoc1swXSxNYXRoLm1pbihzWzFdLGUuaypNYXRoLnBvdygyLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLGE9YWgodGhpcyk7aWYodC53aGVlbCl0Lm1vdXNlWzBdWzBdPT09YVswXSYmdC5tb3VzZVswXVsxXT09PWFbMV18fCh0Lm1vdXNlWzFdPWUuaW52ZXJ0KHQubW91c2VbMF09YSkpLGNsZWFyVGltZW91dCh0LndoZWVsKTtlbHNle2lmKGUuaz09PWkpcmV0dXJuO3QubW91c2U9W2EsZS5pbnZlcnQoYSldLFZwKHRoaXMpLHQuc3RhcnQoKX13TigpLHQud2hlZWw9c2V0VGltZW91dChjLDE1MCksdC56b29tKCJtb3VzZSIscihnKG0oZSxpKSx0Lm1vdXNlWzBdLHQubW91c2VbMV0pLHQuZXh0ZW50LGwpKX1mdW5jdGlvbiBjKCl7dC53aGVlbD1udWxsLHQuZW5kKCl9fWZ1bmN0aW9uIHcoKXtpZighZSYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PXYodGhpcyxhcmd1bWVudHMsITApLGk9U3UodXUudmlldykub24oIm1vdXNlbW92ZS56b29tIixjLCEwKS5vbigibW91c2V1cC56b29tIix1LCEwKSxvPWFoKHRoaXMpLGE9dXUuY2xpZW50WCxzPXV1LmNsaWVudFk7aGgodXUudmlldykseE4oKSx0Lm1vdXNlPVtvLHRoaXMuX196b29tLmludmVydChvKV0sVnAodGhpcyksdC5zdGFydCgpfWZ1bmN0aW9uIGMoKXtpZih3TigpLCF0Lm1vdmVkKXt2YXIgZT11dS5jbGllbnRYLWEsbj11dS5jbGllbnRZLXM7dC5tb3ZlZD1lKmUrbipuPnB9dC56b29tKCJtb3VzZSIscihnKHQudGhhdC5fX3pvb20sdC5tb3VzZVswXT1haCh0LnRoYXQpLHQubW91c2VbMV0pLHQuZXh0ZW50LGwpKX1mdW5jdGlvbiB1KCl7aS5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxkaCh1dS52aWV3LHQubW92ZWQpLHdOKCksdC5lbmQoKX19ZnVuY3Rpb24gUygpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD10aGlzLl9fem9vbSxlPWFoKHRoaXMpLG89dC5pbnZlcnQoZSksYT10LmsqKHV1LnNoaWZ0S2V5Py41OjIpLHM9cihnKG0odCxhKSxlLG8pLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLGwpO3dOKCksYz4wP1N1KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihjKS5jYWxsKHkscyxlKTpTdSh0aGlzKS5jYWxsKGYudHJhbnNmb3JtLHMpfX1mdW5jdGlvbiBNKCl7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBlLGkscixvLGE9dXUudG91Y2hlcyxzPWEubGVuZ3RoLGw9dih0aGlzLGFyZ3VtZW50cyx1dS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT1zKTtmb3IoeE4oKSxpPTA7aTxzOysraSlvPVtvPWxoKHRoaXMsYSwocj1hW2ldKS5pZGVudGlmaWVyKSx0aGlzLl9fem9vbS5pbnZlcnQobyksci5pZGVudGlmaWVyXSxsLnRvdWNoMD9sLnRvdWNoMXx8bC50b3VjaDBbMl09PT1vWzJdfHwobC50b3VjaDE9byxsLnRhcHM9MCk6KGwudG91Y2gwPW8sZT0hMCxsLnRhcHM9MSshIXQpO3QmJih0PWNsZWFyVGltZW91dCh0KSksZSYmKGwudGFwczwyJiYodD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3Q9bnVsbH0pLGQpKSxWcCh0aGlzKSxsLnN0YXJ0KCkpfX1mdW5jdGlvbiBFKCl7aWYodGhpcy5fX3pvb21pbmcpe3ZhciBlLG4saSxvLGE9dih0aGlzLGFyZ3VtZW50cykscz11dS5jaGFuZ2VkVG91Y2hlcyxjPXMubGVuZ3RoO2Zvcih3TigpLHQmJih0PWNsZWFyVGltZW91dCh0KSksYS50YXBzPTAsZT0wO2U8YzsrK2UpaT1saCh0aGlzLHMsKG49c1tlXSkuaWRlbnRpZmllciksYS50b3VjaDAmJmEudG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP2EudG91Y2gwWzBdPWk6YS50b3VjaDEmJmEudG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiYoYS50b3VjaDFbMF09aSk7aWYobj1hLnRoYXQuX196b29tLGEudG91Y2gxKXt2YXIgdT1hLnRvdWNoMFswXSxoPWEudG91Y2gwWzFdLGQ9YS50b3VjaDFbMF0scD1hLnRvdWNoMVsxXSxmPShmPWRbMF0tdVswXSkqZisoZj1kWzFdLXVbMV0pKmYsXz0oXz1wWzBdLWhbMF0pKl8rKF89cFsxXS1oWzFdKSpfO249bShuLE1hdGguc3FydChmL18pKSxpPVsodVswXStkWzBdKS8yLCh1WzFdK2RbMV0pLzJdLG89WyhoWzBdK3BbMF0pLzIsKGhbMV0rcFsxXSkvMl19ZWxzZXtpZighYS50b3VjaDApcmV0dXJuO2k9YS50b3VjaDBbMF0sbz1hLnRvdWNoMFsxXX1hLnpvb20oInRvdWNoIixyKGcobixpLG8pLGEuZXh0ZW50LGwpKX19ZnVuY3Rpb24gVCgpe2lmKHRoaXMuX196b29taW5nKXt2YXIgdCxuLGk9dih0aGlzLGFyZ3VtZW50cykscj11dS5jaGFuZ2VkVG91Y2hlcyxvPXIubGVuZ3RoO2Zvcih4TigpLGUmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZT1udWxsfSksZCksdD0wO3Q8bzsrK3Qpbj1yW3RdLGkudG91Y2gwJiZpLnRvdWNoMFsyXT09PW4uaWRlbnRpZmllcj9kZWxldGUgaS50b3VjaDA6aS50b3VjaDEmJmkudG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiZkZWxldGUgaS50b3VjaDE7aWYoaS50b3VjaDEmJiFpLnRvdWNoMCYmKGkudG91Y2gwPWkudG91Y2gxLGRlbGV0ZSBpLnRvdWNoMSksaS50b3VjaDApaS50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KGkudG91Y2gwWzBdKTtlbHNlIGlmKGkuZW5kKCksMj09PWkudGFwcyl7dmFyIGE9U3UodGhpcykub24oImRibGNsaWNrLnpvb20iKTthJiZhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBmLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0O2kucHJvcGVydHkoIl9fem9vbSIsRU4pLHQhPT1pP3kodCxlLG4pOmkuaW50ZXJydXB0KCkuZWFjaCgoZnVuY3Rpb24oKXt2KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplKS5lbmQoKX0pKX0sZi5zY2FsZUJ5PWZ1bmN0aW9uKHQsZSxuKXtmLnNjYWxlVG8odCwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fem9vbS5rLG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZTtyZXR1cm4gdCpufSksbil9LGYuc2NhbGVUbz1mdW5jdGlvbih0LGUsbil7Zi50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPXRoaXMuX196b29tLGE9bnVsbD09bj9fKHQpOiJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4scz1vLmludmVydChhKSxjPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmU7cmV0dXJuIHIoZyhtKG8sYyksYSxzKSx0LGwpfSksbil9LGYudHJhbnNsYXRlQnk9ZnVuY3Rpb24odCxlLG4pe2YudHJhbnNmb3JtKHQsKGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbCl9KSl9LGYudHJhbnNsYXRlVG89ZnVuY3Rpb24odCxlLG4sbyl7Zi50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhPXRoaXMuX196b29tLHM9bnVsbD09bz9fKHQpOiJmdW5jdGlvbiI9PXR5cGVvZiBvP28uYXBwbHkodGhpcyxhcmd1bWVudHMpOm87cmV0dXJuIHIodk4udHJhbnNsYXRlKHNbMF0sc1sxXSkuc2NhbGUoYS5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIGU/LWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1lLCJmdW5jdGlvbiI9PXR5cGVvZiBuPy1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotbiksdCxsKX0pLG8pfSxiLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PXQmJih0aGlzLm1vdXNlWzFdPWUuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMFsxXT1lLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gxWzFdPWUuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1lLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXtndShuZXcgX04oZix0LHRoaXMudGhhdC5fX3pvb20pLGguYXBwbHksaCxbdCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxmLndoZWVsRGVsdGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpnTigrdCksZik6b30sZi5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpnTighIXQpLGYpOm59LGYudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Z04oISF0KSxmKTphfSxmLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmdOKFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSxmKTppfSxmLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzWzBdPSt0WzBdLHNbMV09K3RbMV0sZik6W3NbMF0sc1sxXV19LGYudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsWzBdWzBdPSt0WzBdWzBdLGxbMV1bMF09K3RbMV1bMF0sbFswXVsxXT0rdFswXVsxXSxsWzFdWzFdPSt0WzFdWzFdLGYpOltbbFswXVswXSxsWzBdWzFdXSxbbFsxXVswXSxsWzFdWzFdXV19LGYuY29uc3RyYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsZik6cn0sZi5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCxmKTpjfSxmLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsZik6dX0sZi5vbj1mdW5jdGlvbigpe3ZhciB0PWgub24uYXBwbHkoaCxhcmd1bWVudHMpO3JldHVybiB0PT09aD9mOnR9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0odD0rdCkqdCxmKTpNYXRoLnNxcnQocCl9LGZ9Yk4ucHJvdG90eXBlPXlOLnByb3RvdHlwZTt2YXIgTE49T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsdmVyc2lvbjoiNS43LjAiLGJpc2VjdDpTbCxiaXNlY3RSaWdodDpTbCxiaXNlY3RMZWZ0Ok1sLGFzY2VuZGluZzpibCxiaXNlY3Rvcjp4bCxjcm9zczpUbCxkZXNjZW5kaW5nOmZ1bmN0aW9uIFBOKHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfSxkZXZpYXRpb246a2wsZXh0ZW50OkxsLGhpc3RvZ3JhbTpmdW5jdGlvbiBOTigpe3ZhciB0PU9sLGU9TGwsbj1qbDtmdW5jdGlvbiBpKGkpe3ZhciByLG8sYT1pLmxlbmd0aCxzPW5ldyBBcnJheShhKTtmb3Iocj0wO3I8YTsrK3Ipc1tyXT10KGlbcl0scixpKTt2YXIgbD1lKHMpLGM9bFswXSx1PWxbMV0saD1uKHMsYyx1KTtBcnJheS5pc0FycmF5KGgpfHwoaD1VbChjLHUsaCksaD16bChNYXRoLmNlaWwoYy9oKSpoLHUsaCkpO2Zvcih2YXIgZD1oLmxlbmd0aDtoWzBdPD1jOyloLnNoaWZ0KCksLS1kO2Zvcig7aFtkLTFdPnU7KWgucG9wKCksLS1kO3ZhciBwLGY9bmV3IEFycmF5KGQrMSk7Zm9yKHI9MDtyPD1kOysrcikocD1mW3JdPVtdKS54MD1yPjA/aFtyLTFdOmMscC54MT1yPGQ/aFtyXTp1O2ZvcihyPTA7cjxhOysrciljPD0obz1zW3JdKSYmbzw9dSYmZltTbChoLG8sMCxkKV0ucHVzaChpW3JdKTtyZXR1cm4gZn1yZXR1cm4gaS52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOlJsKGUpLGkpOnR9LGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmwoW3RbMF0sdFsxXV0pLGkpOmV9LGkudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/UmwoTmwuY2FsbCh0KSk6UmwodCksaSk6bn0saX0sdGhyZXNob2xkRnJlZWRtYW5EaWFjb25pczpmdW5jdGlvbiBJTih0LGUsbil7cmV0dXJuIHQ9SWwuY2FsbCh0LENsKS5zb3J0KGJsKSxNYXRoLmNlaWwoKG4tZSkvKDIqKEdsKHQsLjc1KS1HbCh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHRocmVzaG9sZFNjb3R0OmZ1bmN0aW9uIFJOKHQsZSxuKXtyZXR1cm4gTWF0aC5jZWlsKChuLWUpLygzLjUqa2wodCkqTWF0aC5wb3codC5sZW5ndGgsLTEvMykpKX0sdGhyZXNob2xkU3R1cmdlczpqbCxtYXg6V2wsbWVhbjpmdW5jdGlvbiBPTih0LGUpe3ZhciBuLGk9dC5sZW5ndGgscj1pLG89LTEsYT0wO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4obj1DbCh0W29dKSk/LS1yOmErPW47ZWxzZSBmb3IoOysrbzxpOylpc05hTihuPUNsKGUodFtvXSxvLHQpKSk/LS1yOmErPW47aWYocilyZXR1cm4gYS9yfSxtZWRpYW46ZnVuY3Rpb24gek4odCxlKXt2YXIgbixpPXQubGVuZ3RoLHI9LTEsbz1bXTtpZihudWxsPT1lKWZvcig7KytyPGk7KWlzTmFOKG49Q2wodFtyXSkpfHxvLnB1c2gobik7ZWxzZSBmb3IoOysrcjxpOylpc05hTihuPUNsKGUodFtyXSxyLHQpKSl8fG8ucHVzaChuKTtyZXR1cm4gR2woby5zb3J0KGJsKSwuNSl9LG1lcmdlOnFsLG1pbjpZbCxwYWlyczpmdW5jdGlvbiBETih0LGUpe251bGw9PWUmJihlPUVsKTtmb3IodmFyIG49MCxpPXQubGVuZ3RoLTEscj10WzBdLG89bmV3IEFycmF5KGk8MD8wOmkpO248aTspb1tuXT1lKHIscj10Wysrbl0pO3JldHVybiBvfSxwZXJtdXRlOmZ1bmN0aW9uIEJOKHQsZSl7Zm9yKHZhciBuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pO24tLTspaVtuXT10W2Vbbl1dO3JldHVybiBpfSxxdWFudGlsZTpHbCxyYW5nZTp6bCxzY2FuOmZ1bmN0aW9uIEhOKHQsZSl7aWYobj10Lmxlbmd0aCl7dmFyIG4saSxyPTAsbz0wLGE9dFtvXTtmb3IobnVsbD09ZSYmKGU9YmwpOysrcjxuOykoZShpPXRbcl0sYSk8MHx8MCE9PWUoYSxhKSkmJihhPWksbz1yKTtyZXR1cm4gMD09PWUoYSxhKT9vOnZvaWQgMH19LHNodWZmbGU6ZnVuY3Rpb24gRk4odCxlLG4pe2Zvcih2YXIgaSxyLG89KG51bGw9PW4/dC5sZW5ndGg6biktKGU9bnVsbD09ZT8wOitlKTtvOylyPU1hdGgucmFuZG9tKCkqby0tfDAsaT10W28rZV0sdFtvK2VdPXRbcitlXSx0W3IrZV09aTtyZXR1cm4gdH0sc3VtOmZ1bmN0aW9uIFZOKHQsZSl7dmFyIG4saT10Lmxlbmd0aCxyPS0xLG89MDtpZihudWxsPT1lKWZvcig7KytyPGk7KShuPSt0W3JdKSYmKG8rPW4pO2Vsc2UgZm9yKDsrK3I8aTspKG49K2UodFtyXSxyLHQpKSYmKG8rPW4pO3JldHVybiBvfSx0aWNrczpGbCx0aWNrSW5jcmVtZW50OlZsLHRpY2tTdGVwOlVsLHRyYW5zcG9zZTpYbCx2YXJpYW5jZTpBbCx6aXA6ZnVuY3Rpb24gVU4oKXtyZXR1cm4gWGwoYXJndW1lbnRzKX0sYXhpc1RvcDpmdW5jdGlvbiBqTih0KXtyZXR1cm4gcmMoMSx0KX0sYXhpc1JpZ2h0OmZ1bmN0aW9uIEdOKHQpe3JldHVybiByYygyLHQpfSxheGlzQm90dG9tOm9jLGF4aXNMZWZ0OmFjLGJydXNoOkptLGJydXNoWDpmdW5jdGlvbiBXTigpe3JldHVybiBRbSh6bSl9LGJydXNoWTpabSxicnVzaFNlbGVjdGlvbjpLbSxjaG9yZDpmdW5jdGlvbiBxTigpe3ZhciB0PTAsZT1udWxsLG49bnVsbCxpPW51bGw7ZnVuY3Rpb24gcihyKXt2YXIgbyxhLHMsbCxjLHUsaD1yLmxlbmd0aCxkPVtdLHA9emwoaCksZj1bXSxtPVtdLGc9bS5ncm91cHM9bmV3IEFycmF5KGgpLF89bmV3IEFycmF5KGgqaCk7Zm9yKG89MCxjPS0xOysrYzxoOyl7Zm9yKGE9MCx1PS0xOysrdTxoOylhKz1yW2NdW3VdO2QucHVzaChhKSxmLnB1c2goemwoaCkpLG8rPWF9Zm9yKGUmJnAuc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShkW3RdLGRbbl0pfSkpLG4mJmYuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LnNvcnQoKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIG4ocltlXVt0XSxyW2VdW2ldKX0pKX0pKSxsPShvPW9nKDAscmctdCpoKS9vKT90OnJnL2gsYT0wLGM9LTE7KytjPGg7KXtmb3Iocz1hLHU9LTE7Kyt1PGg7KXt2YXIgeT1wW2NdLHY9Zlt5XVt1XSxiPXJbeV1bdl0seD1hLHc9YSs9YipvO19bdipoK3ldPXtpbmRleDp5LHN1YmluZGV4OnYsc3RhcnRBbmdsZTp4LGVuZEFuZ2xlOncsdmFsdWU6Yn19Z1t5XT17aW5kZXg6eSxzdGFydEFuZ2xlOnMsZW5kQW5nbGU6YSx2YWx1ZTpkW3ldfSxhKz1sfWZvcihjPS0xOysrYzxoOylmb3IodT1jLTE7Kyt1PGg7KXt2YXIgUz1fW3UqaCtjXSxNPV9bYypoK3VdOyhTLnZhbHVlfHxNLnZhbHVlKSYmbS5wdXNoKFMudmFsdWU8TS52YWx1ZT97c291cmNlOk0sdGFyZ2V0OlN9Ontzb3VyY2U6Uyx0YXJnZXQ6TX0pfXJldHVybiBpP20uc29ydChpKTptfXJldHVybiByLnBhZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW9nKDAsZSkscik6dH0sci5zb3J0R3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQscik6ZX0sci5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQscik6bn0sci5zb3J0Q2hvcmRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2k9bnVsbDooaT1hZyh0KSkuXz10LHIpOmkmJmkuX30scn0scmliYm9uOmZ1bmN0aW9uIFlOKCl7dmFyIHQ9bWcsZT1nZyxuPV9nLGk9eWcscj12ZyxvPW51bGw7ZnVuY3Rpb24gYSgpe3ZhciBhLHM9c2cuY2FsbChhcmd1bWVudHMpLGw9dC5hcHBseSh0aGlzLHMpLGM9ZS5hcHBseSh0aGlzLHMpLHU9K24uYXBwbHkodGhpcywoc1swXT1sLHMpKSxoPWkuYXBwbHkodGhpcyxzKS1pZyxkPXIuYXBwbHkodGhpcyxzKS1pZyxwPXUqdGcoaCksZj11KmVnKGgpLG09K24uYXBwbHkodGhpcywoc1swXT1jLHMpKSxnPWkuYXBwbHkodGhpcyxzKS1pZyxfPXIuYXBwbHkodGhpcyxzKS1pZztpZihvfHwobz1hPWZnKCkpLG8ubW92ZVRvKHAsZiksby5hcmMoMCwwLHUsaCxkKSxoPT09ZyYmZD09PV98fChvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLG0qdGcoZyksbSplZyhnKSksby5hcmMoMCwwLG0sZyxfKSksby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxwLGYpLG8uY2xvc2VQYXRoKCksYSlyZXR1cm4gbz1udWxsLGErIiJ8fG51bGx9cmV0dXJuIGEucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bGcoK3QpLGEpOm59LGEuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmxnKCt0KSxhKTppfSxhLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bGcoK3QpLGEpOnJ9LGEuc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxhKTplfSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bnVsbD09dD9udWxsOnQsYSk6b30sYX0sbmVzdDpmdW5jdGlvbiBYTigpe3ZhciB0LGUsbixpPVtdLHI9W107ZnVuY3Rpb24gbyhuLHIsYSxzKXtpZihyPj1pLmxlbmd0aClyZXR1cm4gbnVsbCE9dCYmbi5zb3J0KHQpLG51bGwhPWU/ZShuKTpuO2Zvcih2YXIgbCxjLHUsaD0tMSxkPW4ubGVuZ3RoLHA9aVtyKytdLGY9d2coKSxtPWEoKTsrK2g8ZDspKHU9Zi5nZXQobD1wKGM9bltoXSkrIiIpKT91LnB1c2goYyk6Zi5zZXQobCxbY10pO3JldHVybiBmLmVhY2goKGZ1bmN0aW9uKHQsZSl7cyhtLGUsbyh0LHIsYSxzKSl9KSksbX1mdW5jdGlvbiBhKHQsbil7aWYoKytuPmkubGVuZ3RoKXJldHVybiB0O3ZhciBvLHM9cltuLTFdO3JldHVybiBudWxsIT1lJiZuPj1pLmxlbmd0aD9vPXQuZW50cmllcygpOihvPVtdLHQuZWFjaCgoZnVuY3Rpb24odCxlKXtvLnB1c2goe2tleTplLHZhbHVlczphKHQsbil9KX0pKSksbnVsbCE9cz9vLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHModC5rZXksZS5rZXkpfSkpOm99cmV0dXJuIG49e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0LDAsU2csTWcpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCwwLEVnLFRnKX0sZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gYShvKHQsMCxFZyxUZyksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gaS5wdXNoKHQpLG59LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiByW2kubGVuZ3RoLTFdPXQsbn0sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLG59LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LG59fX0sc2V0OmtnLG1hcDp3ZyxrZXlzOkxnLHZhbHVlczpmdW5jdGlvbiAkTih0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2godFtuXSk7cmV0dXJuIGV9LGVudHJpZXM6ZnVuY3Rpb24gS04odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHtrZXk6bix2YWx1ZTp0W25dfSk7cmV0dXJuIGV9LGNvbG9yOkJoLHJnYjpVaCxoc2w6JGgsbGFiOnNkLGhjbDpmZCxsY2g6ZnVuY3Rpb24gWk4odCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3BkKHQpOm5ldyBtZChuLGUsdCxudWxsPT1pPzE6aSl9LGdyYXk6ZnVuY3Rpb24gSk4odCxlKXtyZXR1cm4gbmV3IGxkKHQsMCwwLG51bGw9PWU/MTplKX0sY3ViZWhlbGl4OnhkLGNvbnRvdXJzOkhnLGNvbnRvdXJEZW5zaXR5OmZ1bmN0aW9uIFFOKCl7dmFyIHQ9VWcsZT1qZyxuPUdnLGk9OTYwLHI9NTAwLG89MjAsYT0yLHM9MypvLGw9aSsyKnM+PmEsYz1yKzIqcz4+YSx1PUlnKDIwKTtmdW5jdGlvbiBoKGkpe3ZhciByPW5ldyBGbG9hdDMyQXJyYXkobCpjKSxoPW5ldyBGbG9hdDMyQXJyYXkobCpjKTtpLmZvckVhY2goKGZ1bmN0aW9uKGksbyx1KXt2YXIgaD0rdChpLG8sdSkrcz4+YSxkPStlKGksbyx1KStzPj5hLHA9K24oaSxvLHUpO2g+PTAmJmg8bCYmZD49MCYmZDxjJiYocltoK2QqbF0rPXApfSkpLEZnKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6cn0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpofSxvPj5hKSxWZyh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmh9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6cn0sbz4+YSksRmcoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpyfSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmh9LG8+PmEpLFZnKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6aH0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpyfSxvPj5hKSxGZyh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnJ9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6aH0sbz4+YSksVmcoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpofSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnJ9LG8+PmEpO3ZhciBwPXUocik7aWYoIUFycmF5LmlzQXJyYXkocCkpe3ZhciBmPVdsKHIpO3A9VWwoMCxmLHApLChwPXpsKDAsTWF0aC5mbG9vcihmL3ApKnAscCkpLnNoaWZ0KCl9cmV0dXJuIEhnKCkudGhyZXNob2xkcyhwKS5zaXplKFtsLGNdKShyKS5tYXAoZCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdC52YWx1ZSo9TWF0aC5wb3coMiwtMiphKSx0LmNvb3JkaW5hdGVzLmZvckVhY2gocCksdH1mdW5jdGlvbiBwKHQpe3QuZm9yRWFjaChmKX1mdW5jdGlvbiBmKHQpe3QuZm9yRWFjaChtKX1mdW5jdGlvbiBtKHQpe3RbMF09dFswXSpNYXRoLnBvdygyLGEpLXMsdFsxXT10WzFdKk1hdGgucG93KDIsYSktc31mdW5jdGlvbiBnKCl7cmV0dXJuIGw9aSsyKihzPTMqbyk+PmEsYz1yKzIqcz4+YSxofXJldHVybiBoLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpJZygrZSksaCk6dH0saC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SWcoK3QpLGgpOmV9LGgud2VpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SWcoK3QpLGgpOm59LGguc2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5baSxyXTt2YXIgZT1NYXRoLmNlaWwodFswXSksbj1NYXRoLmNlaWwodFsxXSk7aWYoIShlPj0wfHxlPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2l6ZSIpO3JldHVybiBpPWUscj1uLGcoKX0saC5jZWxsU2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gMTw8YTtpZighKCh0PSt0KT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNlbGwgc2l6ZSIpO3JldHVybiBhPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLGcoKX0saC50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9JZyhQZy5jYWxsKHQpKTpJZyh0KSxoKTp1fSxoLmJhbmR3aWR0aD1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTWF0aC5zcXJ0KG8qKG8rMSkpO2lmKCEoKHQ9K3QpPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYmFuZHdpZHRoIik7cmV0dXJuIG89TWF0aC5yb3VuZCgoTWF0aC5zcXJ0KDQqdCp0KzEpLTEpLzIpLGcoKX0saH0sZGlzcGF0Y2g6bGMsZHJhZzp2aCxkcmFnRGlzYWJsZTpoaCxkcmFnRW5hYmxlOmRoLGRzdkZvcm1hdDpLZyxjc3ZQYXJzZTpKZyxjc3ZQYXJzZVJvd3M6UWcsY3N2Rm9ybWF0OnRfLGNzdkZvcm1hdEJvZHk6ZV8sY3N2Rm9ybWF0Um93czpuXyxjc3ZGb3JtYXRSb3c6aV8sY3N2Rm9ybWF0VmFsdWU6cl8sdHN2UGFyc2U6YV8sdHN2UGFyc2VSb3dzOnNfLHRzdkZvcm1hdDpsXyx0c3ZGb3JtYXRCb2R5OmNfLHRzdkZvcm1hdFJvd3M6dV8sdHN2Rm9ybWF0Um93OmhfLHRzdkZvcm1hdFZhbHVlOmRfLGF1dG9UeXBlOmZ1bmN0aW9uIHRJKHQpe2Zvcih2YXIgZSBpbiB0KXt2YXIgbixpLHI9dFtlXS50cmltKCk7aWYocilpZigidHJ1ZSI9PT1yKXI9ITA7ZWxzZSBpZigiZmFsc2UiPT09cilyPSExO2Vsc2UgaWYoIk5hTiI9PT1yKXI9TmFOO2Vsc2UgaWYoaXNOYU4obj0rcikpe2lmKCEoaT1yLm1hdGNoKC9eKFstK11cZHsyfSk/XGR7NH0oLVxkezJ9KC1cZHsyfSk/KT8oVFxkezJ9OlxkezJ9KDpcZHsyfShcLlxkezN9KT8pPyhafFstK11cZHsyfTpcZHsyfSk/KT8kLykpKWNvbnRpbnVlO3BfJiZpWzRdJiYhaVs3XSYmKHI9ci5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxyPW5ldyBEYXRlKHIpfWVsc2Ugcj1uO2Vsc2Ugcj1udWxsO3RbZV09cn1yZXR1cm4gdH0sZWFzZUxpbmVhcjpiZixlYXNlUXVhZDpTZixlYXNlUXVhZEluOnhmLGVhc2VRdWFkT3V0OndmLGVhc2VRdWFkSW5PdXQ6U2YsZWFzZUN1YmljOlRmLGVhc2VDdWJpY0luOk1mLGVhc2VDdWJpY091dDpFZixlYXNlQ3ViaWNJbk91dDpUZixlYXNlUG9seTpYZixlYXNlUG9seUluOnFmLGVhc2VQb2x5T3V0OllmLGVhc2VQb2x5SW5PdXQ6WGYsZWFzZVNpbjpRZixlYXNlU2luSW46WmYsZWFzZVNpbk91dDpKZixlYXNlU2luSW5PdXQ6UWYsZWFzZUV4cDppbSxlYXNlRXhwSW46ZW0sZWFzZUV4cE91dDpubSxlYXNlRXhwSW5PdXQ6aW0sZWFzZUNpcmNsZTphbSxlYXNlQ2lyY2xlSW46cm0sZWFzZUNpcmNsZU91dDpvbSxlYXNlQ2lyY2xlSW5PdXQ6YW0sZWFzZUJvdW5jZTpjbSxlYXNlQm91bmNlSW46bG0sZWFzZUJvdW5jZU91dDpjbSxlYXNlQm91bmNlSW5PdXQ6dW0sZWFzZUJhY2s6Zm0sZWFzZUJhY2tJbjpkbSxlYXNlQmFja091dDpwbSxlYXNlQmFja0luT3V0OmZtLGVhc2VFbGFzdGljOl9tLGVhc2VFbGFzdGljSW46Z20sZWFzZUVsYXN0aWNPdXQ6X20sZWFzZUVsYXN0aWNJbk91dDp5bSxibG9iOmZ1bmN0aW9uIGVJKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihmXyl9LGJ1ZmZlcjpmdW5jdGlvbiBuSSh0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4obV8pfSxkc3Y6ZnVuY3Rpb24gaUkodCxlLG4saSl7Mz09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoaT1uLG49dm9pZCAwKTt2YXIgcj1LZyh0KTtyZXR1cm4gX18oZSxuKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gci5wYXJzZSh0LGkpfSkpfSxjc3Y6dl8sdHN2OmJfLGltYWdlOmZ1bmN0aW9uIHJJKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciByPW5ldyBJbWFnZTtmb3IodmFyIG8gaW4gZSlyW29dPWVbb107ci5vbmVycm9yPWksci5vbmxvYWQ9ZnVuY3Rpb24oKXtuKHIpfSxyLnNyYz10fSkpfSxqc29uOmZ1bmN0aW9uIG9JKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbih4Xyl9LHRleHQ6X18seG1sOlNfLGh0bWw6TV8sc3ZnOkVfLGZvcmNlQ2VudGVyOmZ1bmN0aW9uIGFJKHQsZSl7dmFyIG47ZnVuY3Rpb24gaSgpe3ZhciBpLHIsbz1uLmxlbmd0aCxhPTAscz0wO2ZvcihpPTA7aTxvOysraSlhKz0ocj1uW2ldKS54LHMrPXIueTtmb3IoYT1hL28tdCxzPXMvby1lLGk9MDtpPG87KytpKShyPW5baV0pLngtPWEsci55LT1zfXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxpLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10fSxpLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2UsaSk6dH0saS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LGkpOmV9LGl9LGZvcmNlQ29sbGlkZTpmdW5jdGlvbiBzSSh0KXt2YXIgZSxuLGk9MSxyPTE7ZnVuY3Rpb24gbygpe2Zvcih2YXIgdCxvLHMsbCxjLHUsaCxkPWUubGVuZ3RoLHA9MDtwPHI7KytwKWZvcihvPU5fKGUsel8sRF8pLnZpc2l0QWZ0ZXIoYSksdD0wO3Q8ZDsrK3QpaD0odT1uWyhzPWVbdF0pLmluZGV4XSkqdSxsPXMueCtzLnZ4LGM9cy55K3Mudnksby52aXNpdChmKTtmdW5jdGlvbiBmKHQsZSxuLHIsbyl7dmFyIGE9dC5kYXRhLGQ9dC5yLHA9dStkO2lmKCFhKXJldHVybiBlPmwrcHx8cjxsLXB8fG4+YytwfHxvPGMtcDtpZihhLmluZGV4PnMuaW5kZXgpe3ZhciBmPWwtYS54LWEudngsbT1jLWEueS1hLnZ5LGc9ZipmK20qbTtnPHAqcCYmKDA9PT1mJiYoZys9KGY9Q18oKSkqZiksMD09PW0mJihnKz0obT1DXygpKSptKSxnPShwLShnPU1hdGguc3FydChnKSkpL2cqaSxzLnZ4Kz0oZio9ZykqKHA9KGQqPWQpLyhoK2QpKSxzLnZ5Kz0obSo9ZykqcCxhLnZ4LT1mKihwPTEtcCksYS52eS09bSpwKX19fWZ1bmN0aW9uIGEodCl7aWYodC5kYXRhKXJldHVybiB0LnI9blt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIGkscixvPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShvKSxpPTA7aTxvOysraSluWyhyPWVbaV0pLmluZGV4XT0rdChyLGksZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1UXyhudWxsPT10PzE6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LHMoKX0sby5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LG8pOnJ9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3Qsbyk6aX0sby5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpUXygrZSkscygpLG8pOnR9LG99LGZvcmNlTGluazpmdW5jdGlvbiBsSSh0KXt2YXIgZSxuLGkscixvLGE9Ql8scz1mdW5jdGlvbiBsKHQpe3JldHVybiAxL01hdGgubWluKHJbdC5zb3VyY2UuaW5kZXhdLHJbdC50YXJnZXQuaW5kZXhdKX0sYz1UXygzMCksdT0xO2Z1bmN0aW9uIGgoaSl7Zm9yKHZhciByPTAsYT10Lmxlbmd0aDtyPHU7KytyKWZvcih2YXIgcyxsLGMsaCxkLHAsZixtPTA7bTxhOysrbSloPShjPShzPXRbbV0pLnRhcmdldCkueCtjLnZ4LShsPXMuc291cmNlKS54LWwudnh8fENfKCksZD1jLnkrYy52eS1sLnktbC52eXx8Q18oKSxkKj1wPSgocD1NYXRoLnNxcnQoaCpoK2QqZCkpLW5bbV0pL3AqaSplW21dLGMudngtPShoKj1wKSooZj1vW21dKSxjLnZ5LT1kKmYsbC52eCs9aCooZj0xLWYpLGwudnkrPWQqZn1mdW5jdGlvbiBkKCl7aWYoaSl7dmFyIHMsbCxjPWkubGVuZ3RoLHU9dC5sZW5ndGgsaD13ZyhpLGEpO2ZvcihzPTAscj1uZXcgQXJyYXkoYyk7czx1OysrcykobD10W3NdKS5pbmRleD1zLCJvYmplY3QiIT10eXBlb2YgbC5zb3VyY2UmJihsLnNvdXJjZT1IXyhoLGwuc291cmNlKSksIm9iamVjdCIhPXR5cGVvZiBsLnRhcmdldCYmKGwudGFyZ2V0PUhfKGgsbC50YXJnZXQpKSxyW2wuc291cmNlLmluZGV4XT0ocltsLnNvdXJjZS5pbmRleF18fDApKzEscltsLnRhcmdldC5pbmRleF09KHJbbC50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihzPTAsbz1uZXcgQXJyYXkodSk7czx1OysrcylvW3NdPXJbKGw9dFtzXSkuc291cmNlLmluZGV4XS8ocltsLnNvdXJjZS5pbmRleF0rcltsLnRhcmdldC5pbmRleF0pO2U9bmV3IEFycmF5KHUpLHAoKSxuPW5ldyBBcnJheSh1KSxmKCl9fWZ1bmN0aW9uIHAoKXtpZihpKWZvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyOysrbillW25dPStzKHRbbl0sbix0KX1mdW5jdGlvbiBmKCl7aWYoaSlmb3IodmFyIGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpbltlXT0rYyh0W2VdLGUsdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxoLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7aT10LGQoKX0saC5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGQoKSxoKTp0fSxoLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsaCk6YX0saC5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LGgpOnV9LGguc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpUXygrdCkscCgpLGgpOnN9LGguZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpUXygrdCksZigpLGgpOmN9LGh9LGZvcmNlTWFueUJvZHk6ZnVuY3Rpb24gY0koKXt2YXIgdCxlLG4saSxyPVRfKC0zMCksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoaSl7dmFyIHIsbz10Lmxlbmd0aCxhPU5fKHQsRl8sVl8pLnZpc2l0QWZ0ZXIodSk7Zm9yKG49aSxyPTA7cjxvOysrcillPXRbcl0sYS52aXNpdChoKX1mdW5jdGlvbiBjKCl7aWYodCl7dmFyIGUsbixvPXQubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShvKSxlPTA7ZTxvOysrZSlpWyhuPXRbZV0pLmluZGV4XT0rcihuLGUsdCl9fWZ1bmN0aW9uIHUodCl7dmFyIGUsbixyLG8sYSxzPTAsbD0wO2lmKHQubGVuZ3RoKXtmb3Iocj1vPWE9MDthPDQ7KythKShlPXRbYV0pJiYobj1NYXRoLmFicyhlLnZhbHVlKSkmJihzKz1lLnZhbHVlLGwrPW4scis9biplLngsbys9biplLnkpO3QueD1yL2wsdC55PW8vbH1lbHNleyhlPXQpLng9ZS5kYXRhLngsZS55PWUuZGF0YS55O2Rve3MrPWlbZS5kYXRhLmluZGV4XX13aGlsZShlPWUubmV4dCl9dC52YWx1ZT1zfWZ1bmN0aW9uIGgodCxyLGwsYyl7aWYoIXQudmFsdWUpcmV0dXJuITA7dmFyIHU9dC54LWUueCxoPXQueS1lLnksZD1jLXIscD11KnUraCpoO2lmKGQqZC9zPHApcmV0dXJuIHA8YSYmKDA9PT11JiYocCs9KHU9Q18oKSkqdSksMD09PWgmJihwKz0oaD1DXygpKSpoKSxwPG8mJihwPU1hdGguc3FydChvKnApKSxlLnZ4Kz11KnQudmFsdWUqbi9wLGUudnkrPWgqdC52YWx1ZSpuL3ApLCEwO2lmKCEodC5sZW5ndGh8fHA+PWEpKXsodC5kYXRhIT09ZXx8dC5uZXh0KSYmKDA9PT11JiYocCs9KHU9Q18oKSkqdSksMD09PWgmJihwKz0oaD1DXygpKSpoKSxwPG8mJihwPU1hdGguc3FydChvKnApKSk7ZG97dC5kYXRhIT09ZSYmKGUudngrPXUqKGQ9aVt0LmRhdGEuaW5kZXhdKm4vcCksZS52eSs9aCpkKX13aGlsZSh0PXQubmV4dCl9fXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZSl7dD1lLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlRfKCt0KSxjKCksbCk6cn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10KnQsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQqdCxsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCp0LGwpOk1hdGguc3FydChzKX0sbH0sZm9yY2VSYWRpYWw6ZnVuY3Rpb24gdUkodCxlLG4pe3ZhciBpLHIsbyxhPVRfKC4xKTtmdW5jdGlvbiBzKHQpe2Zvcih2YXIgYT0wLHM9aS5sZW5ndGg7YTxzOysrYSl7dmFyIGw9aVthXSxjPWwueC1lfHwxZS02LHU9bC55LW58fDFlLTYsaD1NYXRoLnNxcnQoYypjK3UqdSksZD0ob1thXS1oKSpyW2FdKnQvaDtsLnZ4Kz1jKmQsbC52eSs9dSpkfX1mdW5jdGlvbiBsKCl7aWYoaSl7dmFyIGUsbj1pLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobiksZT0wO2U8bjsrK2Upb1tlXT0rdChpW2VdLGUsaSkscltlXT1pc05hTihvW2VdKT8wOithKGlbZV0sZSxpKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVRfKCt0KSksbnVsbD09ZSYmKGU9MCksbnVsbD09biYmKG49MCkscy5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCxsKCl9LHMuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpUXygrdCksbCgpLHMpOmF9LHMucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6VF8oK2UpLGwoKSxzKTp0fSxzLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qscyk6ZX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHMpOm59LHN9LGZvcmNlU2ltdWxhdGlvbjpmdW5jdGlvbiBoSSh0KXt2YXIgZSxuPTEsaT0uMDAxLHI9MS1NYXRoLnBvdyhpLDEvMzAwKSxvPTAsYT0uNixzPXdnKCksbD1rcCh1KSxjPWxjKCJ0aWNrIiwiZW5kIik7ZnVuY3Rpb24gdSgpe2goKSxjLmNhbGwoInRpY2siLGUpLG48aSYmKGwuc3RvcCgpLGMuY2FsbCgiZW5kIixlKSl9ZnVuY3Rpb24gaChpKXt2YXIgbCxjLHU9dC5sZW5ndGg7dm9pZCAwPT09aSYmKGk9MSk7Zm9yKHZhciBoPTA7aDxpOysraClmb3Iobis9KG8tbikqcixzLmVhY2goKGZ1bmN0aW9uKHQpe3Qobil9KSksbD0wO2w8dTsrK2wpbnVsbD09KGM9dFtsXSkuZng/Yy54Kz1jLnZ4Kj1hOihjLng9Yy5meCxjLnZ4PTApLG51bGw9PWMuZnk/Yy55Kz1jLnZ5Kj1hOihjLnk9Yy5meSxjLnZ5PTApO3JldHVybiBlfWZ1bmN0aW9uIGQoKXtmb3IodmFyIGUsbj0wLGk9dC5sZW5ndGg7bjxpOysrbil7aWYoKGU9dFtuXSkuaW5kZXg9bixudWxsIT1lLmZ4JiYoZS54PWUuZngpLG51bGwhPWUuZnkmJihlLnk9ZS5meSksaXNOYU4oZS54KXx8aXNOYU4oZS55KSl7dmFyIHI9MTAqTWF0aC5zcXJ0KG4pLG89bipueTtlLng9cipNYXRoLmNvcyhvKSxlLnk9cipNYXRoLnNpbihvKX0oaXNOYU4oZS52eCl8fGlzTmFOKGUudnkpKSYmKGUudng9ZS52eT0wKX19ZnVuY3Rpb24gcChlKXtyZXR1cm4gZS5pbml0aWFsaXplJiZlLmluaXRpYWxpemUodCksZX1yZXR1cm4gbnVsbD09dCYmKHQ9W10pLGQoKSxlPXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBsLnJlc3RhcnQodSksZX0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBsLnN0b3AoKSxlfSxub2RlczpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGQoKSxzLmVhY2gocCksZSk6dH0sYWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsZSk6bn0sYWxwaGFNaW46ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3QsZSk6aX0sYWxwaGFEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxlKTorcn0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsZSk6b30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0xLXQsZSk6MS1hfSxmb3JjZTpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KG51bGw9PW4/cy5yZW1vdmUodCk6cy5zZXQodCxwKG4pKSxlKTpzLmdldCh0KX0sZmluZDpmdW5jdGlvbihlLG4saSl7dmFyIHIsbyxhLHMsbCxjPTAsdT10Lmxlbmd0aDtmb3IobnVsbD09aT9pPTEvMDppKj1pLGM9MDtjPHU7KytjKShhPShyPWUtKHM9dFtjXSkueCkqcisobz1uLXMueSkqbyk8aSYmKGw9cyxpPWEpO3JldHVybiBsfSxvbjpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGMub24odCxuKSxlKTpjLm9uKHQpfX19LGZvcmNlWDpmdW5jdGlvbiBkSSh0KXt2YXIgZSxuLGkscj1UXyguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIHIsbz0wLGE9ZS5sZW5ndGg7bzxhOysrbykocj1lW29dKS52eCs9KGlbb10tci54KSpuW29dKnR9ZnVuY3Rpb24gYSgpe2lmKGUpe3ZhciBvLGE9ZS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGEpLGk9bmV3IEFycmF5KGEpLG89MDtvPGE7KytvKW5bb109aXNOYU4oaVtvXT0rdChlW29dLG8sZSkpPzA6K3IoZVtvXSxvLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9VF8obnVsbD09dD8wOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpUXygrdCksYSgpLG8pOnJ9LG8ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOlRfKCtlKSxhKCksbyk6dH0sb30sZm9yY2VZOmZ1bmN0aW9uIHBJKHQpe3ZhciBlLG4saSxyPVRfKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgcixvPTAsYT1lLmxlbmd0aDtvPGE7KytvKShyPWVbb10pLnZ5Kz0oaVtvXS1yLnkpKm5bb10qdH1mdW5jdGlvbiBhKCl7aWYoZSl7dmFyIG8sYT1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSksaT1uZXcgQXJyYXkoYSksbz0wO288YTsrK28pbltvXT1pc05hTihpW29dPSt0KGVbb10sbyxlKSk/MDorcihlW29dLG8sZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1UXyhudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlRfKCt0KSxhKCksbyk6cn0sby55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6VF8oK2UpLGEoKSxvKTp0fSxvfSxmb3JtYXREZWZhdWx0TG9jYWxlOmJ5LGdldCBmb3JtYXQoKXtyZXR1cm4gbXl9LGdldCBmb3JtYXRQcmVmaXgoKXtyZXR1cm4gZ3l9LGZvcm1hdExvY2FsZTp2eSxmb3JtYXRTcGVjaWZpZXI6c3ksRm9ybWF0U3BlY2lmaWVyOmx5LHByZWNpc2lvbkZpeGVkOnh5LHByZWNpc2lvblByZWZpeDp3eSxwcmVjaXNpb25Sb3VuZDpTeSxnZW9BcmVhOmZ1bmN0aW9uIGZJKHQpe3JldHVybiB1di5yZXNldCgpLGl2KHQsaHYpLDIqdXZ9LGdlb0JvdW5kczpmdW5jdGlvbiBtSSh0KXt2YXIgZSxuLGkscixvLGEscztpZihUdj1Fdj0tKFN2PU12PTEvMCksUHY9W10saXYodCxLdiksbj1Qdi5sZW5ndGgpe2ZvcihQdi5zb3J0KG9iKSxlPTEsbz1baT1QdlswXV07ZTxuOysrZSlhYihpLChyPVB2W2VdKVswXSl8fGFiKGksclsxXSk/KHJiKGlbMF0sclsxXSk+cmIoaVswXSxpWzFdKSYmKGlbMV09clsxXSkscmIoclswXSxpWzFdKT5yYihpWzBdLGlbMV0pJiYoaVswXT1yWzBdKSk6by5wdXNoKGk9cik7Zm9yKGE9LTEvMCxlPTAsaT1vW249by5sZW5ndGgtMV07ZTw9bjtpPXIsKytlKShzPXJiKGlbMV0sKHI9b1tlXSlbMF0pKT5hJiYoYT1zLFN2PXJbMF0sRXY9aVsxXSl9cmV0dXJuIFB2PU52PW51bGwsU3Y9PT0xLzB8fE12PT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW1N2LE12XSxbRXYsVHZdXX0sZ2VvQ2VudHJvaWQ6ZnVuY3Rpb24gZ0kodCl7SXY9UnY9T3Y9enY9RHY9QnY9SHY9RnY9VnY9VXY9anY9MCxpdih0LHNiKTt2YXIgZT1WdixuPVV2LGk9anYscj1lKmUrbipuK2kqaTtyZXR1cm4gcjxreSYmKGU9QnYsbj1IdixpPUZ2LFJ2PEF5JiYoZT1PdixuPXp2LGk9RHYpLChyPWUqZStuKm4raSppKTxreSk/W05hTixOYU5dOltCeShuLGUpKlJ5LCR5KGkvcXkocikpKlJ5XX0sZ2VvQ2lyY2xlOmZ1bmN0aW9uIF9JKCl7dmFyIHQsZSxuPXliKFswLDBdKSxpPXliKDkwKSxyPXliKDYpLG89e3BvaW50OmZ1bmN0aW9uIGEobixpKXt0LnB1c2gobj1lKG4saSkpLG5bMF0qPVJ5LG5bMV0qPVJ5fX07ZnVuY3Rpb24gcygpe3ZhciBhPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHM9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykqT3ksbD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpPeTtyZXR1cm4gdD1bXSxlPXhiKC1hWzBdKk95LC1hWzFdKk95LDApLmludmVydCxUYihvLHMsbCwxKSxhPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdF19LHQ9ZT1udWxsLGF9cmV0dXJuIHMuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eWIoWyt0WzBdLCt0WzFdXSkscyk6bn0scy5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp5YigrdCkscyk6aX0scy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp5YigrdCkscyk6cn0sc30sZ2VvQ2xpcEFudGltZXJpZGlhbjpIYixnZW9DbGlwQ2lyY2xlOlViLGdlb0NsaXBFeHRlbnQ6ZnVuY3Rpb24geUkoKXt2YXIgdCxlLG4saT0wLHI9MCxvPTk2MCxhPTUwMDtyZXR1cm4gbj17c3RyZWFtOmZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OnQ9V2IoaSxyLG8sYSkoZT1uKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStzWzBdWzBdLHI9K3NbMF1bMV0sbz0rc1sxXVswXSxhPStzWzFdWzFdLHQ9ZT1udWxsLG4pOltbaSxyXSxbbyxhXV19fX0sZ2VvQ2xpcFJlY3RhbmdsZTpXYixnZW9Db250YWluczpmdW5jdGlvbiB2SSh0LGUpe3JldHVybih0JiZveC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP294W3QudHlwZV06c3gpKHQsZSl9LGdlb0Rpc3RhbmNlOnJ4LGdlb0dyYXRpY3VsZTpteCxnZW9HcmF0aWN1bGUxMDpmdW5jdGlvbiBiSSgpe3JldHVybiBteCgpKCl9LGdlb0ludGVycG9sYXRlOmZ1bmN0aW9uIHhJKHQsZSl7dmFyIG49dFswXSpPeSxpPXRbMV0qT3kscj1lWzBdKk95LG89ZVsxXSpPeSxhPUh5KGkpLHM9R3koaSksbD1IeShvKSxjPUd5KG8pLHU9YSpIeShuKSxoPWEqR3kobiksZD1sKkh5KHIpLHA9bCpHeShyKSxmPTIqJHkocXkoS3koby1pKSthKmwqS3koci1uKSkpLG09R3koZiksZz1mP2Z1bmN0aW9uKHQpe3ZhciBlPUd5KHQqPWYpL20sbj1HeShmLXQpL20saT1uKnUrZSpkLHI9bipoK2UqcCxvPW4qcytlKmM7cmV0dXJuW0J5KHIsaSkqUnksQnkobyxxeShpKmkrcipyKSkqUnldfTpmdW5jdGlvbigpe3JldHVybltuKlJ5LGkqUnldfTtyZXR1cm4gZy5kaXN0YW5jZT1mLGd9LGdlb0xlbmd0aDpleCxnZW9QYXRoOmZ1bmN0aW9uIHdJKHQsZSl7dmFyIG4saSxyPTQuNTtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiYoImZ1bmN0aW9uIj09dHlwZW9mIHImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxpdih0LG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24odCl7cmV0dXJuIGl2KHQsbihOeCkpLE54LnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIGl2KHQsbihtdykpLG13LnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gaXYodCxuKER4KSksRHgucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGl2KHQsbihydykpLHJ3LnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09ZT8odD1udWxsLGd4KToodD1lKS5zdHJlYW0sbyk6dH0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/KGU9bnVsbCxuZXcgZ3cpOm5ldyBvdyhlPXQpLCJmdW5jdGlvbiIhPXR5cGVvZiByJiZpLnBvaW50UmFkaXVzKHIpLG8pOmV9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDooaS5wb2ludFJhZGl1cygrdCksK3QpLG8pOnJ9LG8ucHJvamVjdGlvbih0KS5jb250ZXh0KGUpfSxnZW9BbGJlcnM6T3csZ2VvQWxiZXJzVXNhOmZ1bmN0aW9uIFNJKCl7dmFyIHQsZSxuLGkscixvLGE9T3coKSxzPVJ3KCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxsPVJ3KCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGM9e3BvaW50OmZ1bmN0aW9uKHQsZSl7bz1bdCxlXX19O2Z1bmN0aW9uIHUodCl7dmFyIGU9dFswXSxhPXRbMV07cmV0dXJuIG89bnVsbCxuLnBvaW50KGUsYSksb3x8KGkucG9pbnQoZSxhKSxvKXx8KHIucG9pbnQoZSxhKSxvKX1mdW5jdGlvbiBoKCl7cmV0dXJuIHQ9ZT1udWxsLHV9cmV0dXJuIHUuaW52ZXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPWEuc2NhbGUoKSxuPWEudHJhbnNsYXRlKCksaT0odFswXS1uWzBdKS9lLHI9KHRbMV0tblsxXSkvZTtyZXR1cm4ocj49LjEyJiZyPC4yMzQmJmk+PS0uNDI1JiZpPC0uMjE0P3M6cj49LjE2NiYmcjwuMjM0JiZpPj0tLjIxNCYmaTwtLjExNT9sOmEpLmludmVydCh0KX0sdS5zdHJlYW09ZnVuY3Rpb24obil7cmV0dXJuIHQmJmU9PT1uP3Q6dD0oZnVuY3Rpb24gaSh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24obixpKXtmb3IodmFyIHI9LTE7KytyPGU7KXRbcl0ucG9pbnQobixpKX0sc3BoZXJlOmZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xOysrbjxlOyl0W25dLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPGU7KXRbbl0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPGU7KXRbbl0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPGU7KXRbbl0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPGU7KXRbbl0ucG9seWdvbkVuZCgpfX19KShbYS5zdHJlYW0oZT1uKSxzLnN0cmVhbShuKSxsLnN0cmVhbShuKV0pfSx1LnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYS5wcmVjaXNpb24odCkscy5wcmVjaXNpb24odCksbC5wcmVjaXNpb24odCksaCgpKTphLnByZWNpc2lvbigpfSx1LnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnNjYWxlKHQpLHMuc2NhbGUoLjM1KnQpLGwuc2NhbGUodCksdS50cmFuc2xhdGUoYS50cmFuc2xhdGUoKSkpOmEuc2NhbGUoKX0sdS50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGEudHJhbnNsYXRlKCk7dmFyIGU9YS5zY2FsZSgpLG89K3RbMF0sdT0rdFsxXTtyZXR1cm4gbj1hLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbby0uNDU1KmUsdS0uMjM4KmVdLFtvKy40NTUqZSx1Ky4yMzgqZV1dKS5zdHJlYW0oYyksaT1zLnRyYW5zbGF0ZShbby0uMzA3KmUsdSsuMjAxKmVdKS5jbGlwRXh0ZW50KFtbby0uNDI1KmUrQXksdSsuMTIqZStBeV0sW28tLjIxNCplLUF5LHUrLjIzNCplLUF5XV0pLnN0cmVhbShjKSxyPWwudHJhbnNsYXRlKFtvLS4yMDUqZSx1Ky4yMTIqZV0pLmNsaXBFeHRlbnQoW1tvLS4yMTQqZStBeSx1Ky4xNjYqZStBeV0sW28tLjExNSplLUF5LHUrLjIzNCplLUF5XV0pLnN0cmVhbShjKSxoKCl9LHUuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHh3KHUsdCxlKX0sdS5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHd3KHUsdCxlKX0sdS5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiBTdyh1LHQsZSl9LHUuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE13KHUsdCxlKX0sdS5zY2FsZSgxMDcwKX0sZ2VvQXppbXV0aGFsRXF1YWxBcmVhOmZ1bmN0aW9uIE1JKCl7cmV0dXJuIEx3KEJ3KS5zY2FsZSgxMjQuNzUpLmNsaXBBbmdsZSgxNzkuOTk5KX0sZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3OkJ3LGdlb0F6aW11dGhhbEVxdWlkaXN0YW50OmZ1bmN0aW9uIEVJKCl7cmV0dXJuIEx3KEh3KS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LGdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3Okh3LGdlb0NvbmljQ29uZm9ybWFsOmZ1bmN0aW9uIFRJKCl7cmV0dXJuIE53KGp3KS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfSxnZW9Db25pY0NvbmZvcm1hbFJhdzpqdyxnZW9Db25pY0VxdWFsQXJlYTpSdyxnZW9Db25pY0VxdWFsQXJlYVJhdzpJdyxnZW9Db25pY0VxdWlkaXN0YW50OmZ1bmN0aW9uIENJKCl7cmV0dXJuIE53KFd3KS5zY2FsZSgxMzEuMTU0KS5jZW50ZXIoWzAsMTMuOTM4OV0pfSxnZW9Db25pY0VxdWlkaXN0YW50UmF3Old3LGdlb0VxdWFsRWFydGg6ZnVuY3Rpb24gQUkoKXtyZXR1cm4gTHcoWncpLnNjYWxlKDE3Ny4xNTgpfSxnZW9FcXVhbEVhcnRoUmF3Olp3LGdlb0VxdWlyZWN0YW5ndWxhcjpmdW5jdGlvbiBrSSgpe3JldHVybiBMdyhHdykuc2NhbGUoMTUyLjYzKX0sZ2VvRXF1aXJlY3Rhbmd1bGFyUmF3Okd3LGdlb0dub21vbmljOmZ1bmN0aW9uIExJKCl7cmV0dXJuIEx3KEp3KS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfSxnZW9Hbm9tb25pY1JhdzpKdyxnZW9JZGVudGl0eTpmdW5jdGlvbiBQSSgpe3ZhciB0LGUsbixpLHIsbyxhLHM9MSxsPTAsYz0wLHU9MSxoPTEsZD0wLHA9bnVsbCxmPTEsbT0xLGc9eXcoe3BvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIG49dihbdCxlXSk7dGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KSxfPWd4O2Z1bmN0aW9uIHkoKXtyZXR1cm4gZj1zKnUsbT1zKmgsbz1hPW51bGwsdn1mdW5jdGlvbiB2KG4pe3ZhciBpPW5bMF0qZixyPW5bMV0qbTtpZihkKXt2YXIgbz1yKnQtaSplO2k9aSp0K3IqZSxyPW99cmV0dXJuW2krbCxyK2NdfXJldHVybiB2LmludmVydD1mdW5jdGlvbihuKXt2YXIgaT1uWzBdLWwscj1uWzFdLWM7aWYoZCl7dmFyIG89cip0K2kqZTtpPWkqdC1yKmUscj1vfXJldHVybltpL2Ysci9tXX0sdi5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIG8mJmE9PT10P286bz1nKF8oYT10KSl9LHYucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dCxwPW49aT1yPW51bGwseSgpKTpffSx2LmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89bnVsbD09dD8ocD1uPWk9cj1udWxsLGd4KTpXYihwPSt0WzBdWzBdLG49K3RbMF1bMV0saT0rdFsxXVswXSxyPSt0WzFdWzFdKSx5KCkpOm51bGw9PXA/bnVsbDpbW3Asbl0sW2kscl1dfSx2LnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LHkoKSk6c30sdi50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K3RbMF0sYz0rdFsxXSx5KCkpOltsLGNdfSx2LmFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUd5KGQ9biUzNjAqT3kpLHQ9SHkoZCkseSgpKTpkKlJ5fSx2LnJlZmxlY3RYPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQ/LTE6MSx5KCkpOnU8MH0sdi5yZWZsZWN0WT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD10Py0xOjEseSgpKTpoPDB9LHYuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHh3KHYsdCxlKX0sdi5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHd3KHYsdCxlKX0sdi5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiBTdyh2LHQsZSl9LHYuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE13KHYsdCxlKX0sdn0sZ2VvUHJvamVjdGlvbjpMdyxnZW9Qcm9qZWN0aW9uTXV0YXRvcjpQdyxnZW9NZXJjYXRvcjpmdW5jdGlvbiBOSSgpe3JldHVybiBWdyhGdykuc2NhbGUoOTYxL0l5KX0sZ2VvTWVyY2F0b3JSYXc6RncsZ2VvTmF0dXJhbEVhcnRoMTpmdW5jdGlvbiBJSSgpe3JldHVybiBMdyhRdykuc2NhbGUoMTc1LjI5NSl9LGdlb05hdHVyYWxFYXJ0aDFSYXc6UXcsZ2VvT3J0aG9ncmFwaGljOmZ1bmN0aW9uIFJJKCl7cmV0dXJuIEx3KHRTKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwLjAwMDAwMSl9LGdlb09ydGhvZ3JhcGhpY1Jhdzp0UyxnZW9TdGVyZW9ncmFwaGljOmZ1bmN0aW9uIE9JKCl7cmV0dXJuIEx3KGVTKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfSxnZW9TdGVyZW9ncmFwaGljUmF3OmVTLGdlb1RyYW5zdmVyc2VNZXJjYXRvcjpmdW5jdGlvbiB6SSgpe3ZhciB0PVZ3KG5TKSxlPXQuY2VudGVyLG49dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoWy10WzFdLHRbMF1dKTpbKHQ9ZSgpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9bigpKVswXSx0WzFdLHRbMl0tOTBdfSxuKFswLDAsOTBdKS5zY2FsZSgxNTkuMTU1KX0sZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yUmF3Om5TLGdlb1JvdGF0aW9uOkViLGdlb1N0cmVhbTppdixnZW9UcmFuc2Zvcm06ZnVuY3Rpb24gREkodCl7cmV0dXJue3N0cmVhbTp5dyh0KX19LGNsdXN0ZXI6ZnVuY3Rpb24gQkkoKXt2YXIgdD1pUyxlPTEsbj0xLGk9ITE7ZnVuY3Rpb24gcihyKXt2YXIgbyxhPTA7ci5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuY2hpbGRyZW47bj8oZS54PShmdW5jdGlvbiBpKHQpe3JldHVybiB0LnJlZHVjZShyUywwKS90Lmxlbmd0aH0pKG4pLGUueT0oZnVuY3Rpb24gcih0KXtyZXR1cm4gMSt0LnJlZHVjZShvUywwKX0pKG4pKTooZS54PW8/YSs9dChlLG8pOjAsZS55PTAsbz1lKX0pKTt2YXIgcz0oZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbMF07cmV0dXJuIHR9KShyKSxjPShmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gdH0pKHIpLGg9cy54LXQocyxjKS8yLGQ9Yy54K3QoYyxzKS8yO3JldHVybiByLmVhY2hBZnRlcihpP2Z1bmN0aW9uKHQpe3QueD0odC54LXIueCkqZSx0Lnk9KHIueS10LnkpKm59OmZ1bmN0aW9uKHQpe3QueD0odC54LWgpLyhkLWgpKmUsdC55PSgxLShyLnk/dC55L3IueToxKSkqbn0pfXJldHVybiByLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ITEsZT0rdFswXSxuPSt0WzFdLHIpOmk/bnVsbDpbZSxuXX0sci5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hMCxlPSt0WzBdLG49K3RbMV0scik6aT9bZSxuXTpudWxsfSxyfSxoaWVyYXJjaHk6c1MscGFjazpmdW5jdGlvbiBISSgpe3ZhciB0PW51bGwsZT0xLG49MSxpPUZTO2Z1bmN0aW9uIHIocil7cmV0dXJuIHIueD1lLzIsci55PW4vMix0P3IuZWFjaEJlZm9yZShqUyh0KSkuZWFjaEFmdGVyKEdTKGksLjUpKS5lYWNoQmVmb3JlKFdTKDEpKTpyLmVhY2hCZWZvcmUoalMoVVMpKS5lYWNoQWZ0ZXIoR1MoRlMsMSkpLmVhY2hBZnRlcihHUyhpLHIuci9NYXRoLm1pbihlLG4pKSkuZWFjaEJlZm9yZShXUyhNYXRoLm1pbihlLG4pLygyKnIucikpKSxyfXJldHVybiByLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1CUyhlKSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0sbj0rdFsxXSxyKTpbZSxuXX0sci5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VlMoK3QpLHIpOml9LHJ9LHBhY2tTaWJsaW5nczpmdW5jdGlvbiBGSSh0KXtyZXR1cm4gRFModCksdH0scGFja0VuY2xvc2U6RVMscGFydGl0aW9uOmZ1bmN0aW9uIFZJKCl7dmFyIHQ9MSxlPTEsbj0wLGk9ITE7ZnVuY3Rpb24gcihyKXt2YXIgbz1yLmhlaWdodCsxO3JldHVybiByLngwPXIueTA9bixyLngxPXQsci55MT1lL28sci5lYWNoQmVmb3JlKChmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe2kuY2hpbGRyZW4mJllTKGksaS54MCx0KihpLmRlcHRoKzEpL2UsaS54MSx0KihpLmRlcHRoKzIpL2UpO3ZhciByPWkueDAsbz1pLnkwLGE9aS54MS1uLHM9aS55MS1uO2E8ciYmKHI9YT0ocithKS8yKSxzPG8mJihvPXM9KG8rcykvMiksaS54MD1yLGkueTA9byxpLngxPWEsaS55MT1zfX0pKGUsbykpLGkmJnIuZWFjaEJlZm9yZShxUykscn1yZXR1cm4gci5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hIXQscik6aX0sci5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuWzBdLGU9K25bMV0scik6W3QsZV19LHIucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyKTpufSxyfSxzdHJhdGlmeTpmdW5jdGlvbiBVSSgpe3ZhciB0PUtTLGU9WlM7ZnVuY3Rpb24gbihuKXt2YXIgaSxyLG8sYSxzLGwsYyx1PW4ubGVuZ3RoLGg9bmV3IEFycmF5KHUpLGQ9e307Zm9yKHI9MDtyPHU7KytyKXM9aFtyXT1uZXcgaFMoaT1uW3JdKSxudWxsIT0obD10KGkscixuKSkmJihsKz0iIikmJihkW2M9IiQiKyhzLmlkPWwpXT1jIGluIGQ/JFM6cyk7Zm9yKHI9MDtyPHU7KytyKWlmKHM9aFtyXSxudWxsIT0obD1lKG5bcl0scixuKSkmJihsKz0iIikpe2lmKCEoYT1kWyIkIitsXSkpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2wpO2lmKGE9PT0kUyl0aHJvdyBuZXcgRXJyb3IoImFtYmlndW91czogIitsKTthLmNoaWxkcmVuP2EuY2hpbGRyZW4ucHVzaChzKTphLmNoaWxkcmVuPVtzXSxzLnBhcmVudD1hfWVsc2V7aWYobyl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIHJvb3RzIik7bz1zfWlmKCFvKXRocm93IG5ldyBFcnJvcigibm8gcm9vdCIpO2lmKG8ucGFyZW50PVhTLG8uZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC5kZXB0aD10LnBhcmVudC5kZXB0aCsxLC0tdX0pKS5lYWNoQmVmb3JlKHVTKSxvLnBhcmVudD1udWxsLHU+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIG99cmV0dXJuIG4uaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9SFMoZSksbik6dH0sbi5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1IUyh0KSxuKTplfSxufSx0cmVlOmZ1bmN0aW9uIGpJKCl7dmFyIHQ9SlMsZT0xLG49MSxpPW51bGw7ZnVuY3Rpb24gcihyKXt2YXIgbD0oZnVuY3Rpb24gYyh0KXtmb3IodmFyIGUsbixpLHIsbyxhPW5ldyBpTSh0LDApLHM9W2FdO2U9cy5wb3AoKTspaWYoaT1lLl8uY2hpbGRyZW4pZm9yKGUuY2hpbGRyZW49bmV3IEFycmF5KG89aS5sZW5ndGgpLHI9by0xO3I+PTA7LS1yKXMucHVzaChuPWUuY2hpbGRyZW5bcl09bmV3IGlNKGlbcl0scikpLG4ucGFyZW50PWU7cmV0dXJuKGEucGFyZW50PW5ldyBpTShudWxsLDApKS5jaGlsZHJlbj1bYV0sYX0pKHIpO2lmKGwuZWFjaEFmdGVyKG8pLGwucGFyZW50Lm09LWwueixsLmVhY2hCZWZvcmUoYSksaSlyLmVhY2hCZWZvcmUocyk7ZWxzZXt2YXIgdT1yLGg9cixkPXI7ci5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0Lng8dS54JiYodT10KSx0Lng+aC54JiYoaD10KSx0LmRlcHRoPmQuZGVwdGgmJihkPXQpfSkpO3ZhciBwPXU9PT1oPzE6dCh1LGgpLzIsZj1wLXUueCxtPWUvKGgueCtwK2YpLGc9bi8oZC5kZXB0aHx8MSk7ci5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0Lng9KHQueCtmKSptLHQueT10LmRlcHRoKmd9KSl9cmV0dXJuIHJ9ZnVuY3Rpb24gbyhlKXt2YXIgbj1lLmNoaWxkcmVuLGk9ZS5wYXJlbnQuY2hpbGRyZW4scj1lLmk/aVtlLmktMV06bnVsbDtpZihuKXshKGZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlLG49MCxpPTAscj10LmNoaWxkcmVuLG89ci5sZW5ndGg7LS1vPj0wOykoZT1yW29dKS56Kz1uLGUubSs9bixuKz1lLnMrKGkrPWUuYyl9KShlKTt2YXIgYT0oblswXS56K25bbi5sZW5ndGgtMV0ueikvMjtyPyhlLno9ci56K3QoZS5fLHIuXyksZS5tPWUuei1hKTplLno9YX1lbHNlIHImJihlLno9ci56K3QoZS5fLHIuXykpO2UucGFyZW50LkE9KGZ1bmN0aW9uIHMoZSxuLGkpe2lmKG4pe2Zvcih2YXIgcixvPWUsYT1lLHM9bixsPW8ucGFyZW50LmNoaWxkcmVuWzBdLGM9by5tLHU9YS5tLGg9cy5tLGQ9bC5tO3M9dE0ocyksbz1RUyhvKSxzJiZvOylsPVFTKGwpLChhPXRNKGEpKS5hPWUsKHI9cy56K2gtby56LWMrdChzLl8sby5fKSk+MCYmKGVNKG5NKHMsZSxpKSxlLHIpLGMrPXIsdSs9ciksaCs9cy5tLGMrPW8ubSxkKz1sLm0sdSs9YS5tO3MmJiF0TShhKSYmKGEudD1zLGEubSs9aC11KSxvJiYhUVMobCkmJihsLnQ9byxsLm0rPWMtZCxpPWUpfXJldHVybiBpfSkoZSxyLGUucGFyZW50LkF8fGlbMF0pfWZ1bmN0aW9uIGEodCl7dC5fLng9dC56K3QucGFyZW50Lm0sdC5tKz10LnBhcmVudC5tfWZ1bmN0aW9uIHModCl7dC54Kj1lLHQueT10LmRlcHRoKm59cmV0dXJuIHIuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHIpOnR9LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hMSxlPSt0WzBdLG49K3RbMV0scik6aT9udWxsOltlLG5dfSxyLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSEwLGU9K3RbMF0sbj0rdFsxXSxyKTppP1tlLG5dOm51bGx9LHJ9LHRyZWVtYXA6ZnVuY3Rpb24gR0koKXt2YXIgdD1zTSxlPSExLG49MSxpPTEscj1bMF0sbz1GUyxhPUZTLHM9RlMsbD1GUyxjPUZTO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9bix0LnkxPWksdC5lYWNoQmVmb3JlKGgpLHI9WzBdLGUmJnQuZWFjaEJlZm9yZShxUyksdH1mdW5jdGlvbiBoKGUpe3ZhciBuPXJbZS5kZXB0aF0saT1lLngwK24sdT1lLnkwK24saD1lLngxLW4sZD1lLnkxLW47aDxpJiYoaT1oPShpK2gpLzIpLGQ8dSYmKHU9ZD0odStkKS8yKSxlLngwPWksZS55MD11LGUueDE9aCxlLnkxPWQsZS5jaGlsZHJlbiYmKG49cltlLmRlcHRoKzFdPW8oZSkvMixpKz1jKGUpLW4sdSs9YShlKS1uLChoLT1zKGUpLW4pPGkmJihpPWg9KGkraCkvMiksKGQtPWwoZSktbik8dSYmKHU9ZD0odStkKS8yKSx0KGUsaSx1LGgsZCkpfXJldHVybiB1LnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSEhdCx1KTplfSx1LnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3RbMF0saT0rdFsxXSx1KTpbbixpXX0sdS50aWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUhTKGUpLHUpOnR9LHUucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6dS5wYWRkaW5nSW5uZXIoKX0sdS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpWUygrdCksdSk6b30sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpWUygrdCksdSk6YX0sdS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpWUygrdCksdSk6c30sdS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VlMoK3QpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpWUygrdCksdSk6Y30sdX0sdHJlZW1hcEJpbmFyeTpmdW5jdGlvbiBXSSh0LGUsbixpLHIpe3ZhciBvLGEscz10LmNoaWxkcmVuLGw9cy5sZW5ndGgsYz1uZXcgQXJyYXkobCsxKTtmb3IoY1swXT1hPW89MDtvPGw7KytvKWNbbysxXT1hKz1zW29dLnZhbHVlOyEoZnVuY3Rpb24gdChlLG4saSxyLG8sYSxsKXtpZihlPj1uLTEpe3ZhciB1PXNbZV07cmV0dXJuIHUueDA9cix1LnkwPW8sdS54MT1hLHZvaWQodS55MT1sKX1mb3IodmFyIGg9Y1tlXSxkPWkvMitoLHA9ZSsxLGY9bi0xO3A8Zjspe3ZhciBtPXArZj4+PjE7Y1ttXTxkP3A9bSsxOmY9bX1kLWNbcC0xXTxjW3BdLWQmJmUrMTxwJiYtLXA7dmFyIGc9Y1twXS1oLF89aS1nO2lmKGEtcj5sLW8pe3ZhciB5PShyKl8rYSpnKS9pO3QoZSxwLGcscixvLHksbCksdChwLG4sXyx5LG8sYSxsKX1lbHNle3ZhciB2PShvKl8rbCpnKS9pO3QoZSxwLGcscixvLGEsdiksdChwLG4sXyxyLHYsYSxsKX19KSgwLGwsdC52YWx1ZSxlLG4saSxyKX0sdHJlZW1hcERpY2U6WVMsdHJlZW1hcFNsaWNlOnJNLHRyZWVtYXBTbGljZURpY2U6ZnVuY3Rpb24gcUkodCxlLG4saSxyKXsoMSZ0LmRlcHRoP3JNOllTKSh0LGUsbixpLHIpfSx0cmVlbWFwU3F1YXJpZnk6c00sdHJlZW1hcFJlc3F1YXJpZnk6bE0saW50ZXJwb2xhdGU6amQsaW50ZXJwb2xhdGVBcnJheTpmdW5jdGlvbiBZSSh0LGUpe3JldHVybihPZChlKT9SZDp6ZCkodCxlKX0saW50ZXJwb2xhdGVCYXNpczpNZCxpbnRlcnBvbGF0ZUJhc2lzQ2xvc2VkOkVkLGludGVycG9sYXRlRGF0ZTpEZCxpbnRlcnBvbGF0ZURpc2NyZXRlOmZ1bmN0aW9uIFhJKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fSxpbnRlcnBvbGF0ZUh1ZTpmdW5jdGlvbiAkSSh0LGUpe3ZhciBuPUFkKCt0LCtlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bih0KTtyZXR1cm4gZS0zNjAqTWF0aC5mbG9vcihlLzM2MCl9fSxpbnRlcnBvbGF0ZU51bWJlcjpCZCxpbnRlcnBvbGF0ZU51bWJlckFycmF5OlJkLGludGVycG9sYXRlT2JqZWN0OkhkLGludGVycG9sYXRlUm91bmQ6R2QsaW50ZXJwb2xhdGVTdHJpbmc6VWQsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3M6UWQsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc6ZXAsaW50ZXJwb2xhdGVab29tOm9wLGludGVycG9sYXRlUmdiOkxkLGludGVycG9sYXRlUmdiQmFzaXM6TmQsaW50ZXJwb2xhdGVSZ2JCYXNpc0Nsb3NlZDpJZCxpbnRlcnBvbGF0ZUhzbDpzcCxpbnRlcnBvbGF0ZUhzbExvbmc6bHAsaW50ZXJwb2xhdGVMYWI6Y3AsaW50ZXJwb2xhdGVIY2w6aHAsaW50ZXJwb2xhdGVIY2xMb25nOmRwLGludGVycG9sYXRlQ3ViZWhlbGl4OmdwLGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZzpfcCxwaWVjZXdpc2U6ZnVuY3Rpb24gS0kodCxlKXtmb3IodmFyIG49MCxpPWUubGVuZ3RoLTEscj1lWzBdLG89bmV3IEFycmF5KGk8MD8wOmkpO248aTspb1tuXT10KHIscj1lWysrbl0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKGktMSxNYXRoLmZsb29yKHQqPWkpKSk7cmV0dXJuIG9bZV0odC1lKX19LHF1YW50aXplOmZ1bmN0aW9uIFpJKHQsZSl7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSluW2ldPXQoaS8oZS0xKSk7cmV0dXJuIG59LHBhdGg6ZmcscG9seWdvbkFyZWE6ZnVuY3Rpb24gSkkodCl7Zm9yKHZhciBlLG49LTEsaT10Lmxlbmd0aCxyPXRbaS0xXSxvPTA7KytuPGk7KW8rPShlPXIpWzFdKihyPXRbbl0pWzBdLWVbMF0qclsxXTtyZXR1cm4gby8yfSxwb2x5Z29uQ2VudHJvaWQ6ZnVuY3Rpb24gUUkodCl7Zm9yKHZhciBlLG4saT0tMSxyPXQubGVuZ3RoLG89MCxhPTAscz10W3ItMV0sbD0wOysraTxyOylsKz1uPShlPXMpWzBdKihzPXRbaV0pWzFdLXNbMF0qZVsxXSxvKz0oZVswXStzWzBdKSpuLGErPShlWzFdK3NbMV0pKm47cmV0dXJuW28vKGwqPTMpLGEvbF19LHBvbHlnb25IdWxsOmZ1bmN0aW9uIHRSKHQpe2lmKChuPXQubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciBlLG4saT1uZXcgQXJyYXkobikscj1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47KytlKWlbZV09Wyt0W2VdWzBdLCt0W2VdWzFdLGVdO2ZvcihpLnNvcnQodU0pLGU9MDtlPG47KytlKXJbZV09W2lbZV1bMF0sLWlbZV1bMV1dO3ZhciBvPWhNKGkpLGE9aE0ocikscz1hWzBdPT09b1swXSxsPWFbYS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLGM9W107Zm9yKGU9by5sZW5ndGgtMTtlPj0wOy0tZSljLnB1c2godFtpW29bZV1dWzJdXSk7Zm9yKGU9K3M7ZTxhLmxlbmd0aC1sOysrZSljLnB1c2godFtpW2FbZV1dWzJdXSk7cmV0dXJuIGN9LHBvbHlnb25Db250YWluczpmdW5jdGlvbiBlUih0LGUpe2Zvcih2YXIgbixpLHI9dC5sZW5ndGgsbz10W3ItMV0sYT1lWzBdLHM9ZVsxXSxsPW9bMF0sYz1vWzFdLHU9ITEsaD0wO2g8cjsrK2gpbj0obz10W2hdKVswXSwoaT1vWzFdKT5zIT1jPnMmJmE8KGwtbikqKHMtaSkvKGMtaSkrbiYmKHU9IXUpLGw9bixjPWk7cmV0dXJuIHV9LHBvbHlnb25MZW5ndGg6ZnVuY3Rpb24gblIodCl7Zm9yKHZhciBlLG4saT0tMSxyPXQubGVuZ3RoLG89dFtyLTFdLGE9b1swXSxzPW9bMV0sbD0wOysraTxyOyllPWEsbj1zLGUtPWE9KG89dFtpXSlbMF0sbi09cz1vWzFdLGwrPU1hdGguc3FydChlKmUrbipuKTtyZXR1cm4gbH0scXVhZHRyZWU6Tl8scmFuZG9tVW5pZm9ybTpwTSxyYW5kb21Ob3JtYWw6Zk0scmFuZG9tTG9nTm9ybWFsOm1NLHJhbmRvbUJhdGVzOl9NLHJhbmRvbUlyd2luSGFsbDpnTSxyYW5kb21FeHBvbmVudGlhbDp5TSxzY2FsZUJhbmQ6VE0sc2NhbGVQb2ludDpBTSxzY2FsZUlkZW50aXR5OmZ1bmN0aW9uIHQoZSl7dmFyIG47ZnVuY3Rpb24gaSh0KXtyZXR1cm4gaXNOYU4odD0rdCk/bjp0fXJldHVybiBpLmludmVydD1pLGkuZG9tYWluPWkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9d00uY2FsbCh0LGtNKSxpKTplLnNsaWNlKCl9LGkudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGkpOm59LGkuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUpLnVua25vd24obil9LGU9YXJndW1lbnRzLmxlbmd0aD93TS5jYWxsKGUsa00pOlswLDFdLEZNKGkpfSxzY2FsZUxpbmVhcjpWTSxzY2FsZUxvZzpLTSxzY2FsZVN5bWxvZzpmdW5jdGlvbiB0KCl7dmFyIGU9UU0oRE0oKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiB6TShlLHQoKSkuY29uc3RhbnQoZS5jb25zdGFudCgpKX0sdk0uYXBwbHkoZSxhcmd1bWVudHMpfSxzY2FsZU9yZGluYWw6RU0sc2NhbGVJbXBsaWNpdDpNTSxzY2FsZVBvdzpyRSxzY2FsZVNxcnQ6ZnVuY3Rpb24gaVIoKXtyZXR1cm4gckUuYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX0sc2NhbGVRdWFudGlsZTpvRSxzY2FsZVF1YW50aXplOmFFLHNjYWxlVGhyZXNob2xkOmZ1bmN0aW9uIHQoKXt2YXIgZSxuPVsuNV0saT1bMCwxXSxyPTE7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdDw9dD9pW1NsKG4sdCwwLHIpXTplfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1TTS5jYWxsKHQpLHI9TWF0aC5taW4obi5sZW5ndGgsaS5sZW5ndGgtMSksbyk6bi5zbGljZSgpfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVNNLmNhbGwodCkscj1NYXRoLm1pbihuLmxlbmd0aCxpLmxlbmd0aC0xKSxvKTppLnNsaWNlKCl9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBlPWkuaW5kZXhPZih0KTtyZXR1cm5bbltlLTFdLG5bZV1dfSxvLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxvKTplfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLmRvbWFpbihuKS5yYW5nZShpKS51bmtub3duKGUpfSx2TS5hcHBseShvLGFyZ3VtZW50cyl9LHNjYWxlVGltZTpjQSxzY2FsZVV0YzpmdW5jdGlvbiByUigpe3JldHVybiB2TS5hcHBseShsQShFVCx3VCxzVCxyVCxlVCxKRSx2RSxoRSxSVCkuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pLGFyZ3VtZW50cyl9LHNjYWxlU2VxdWVudGlhbDpmdW5jdGlvbiB0KCl7dmFyIGU9Rk0odUEoKShQTSkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gaEEoZSx0KCkpfSxiTS5hcHBseShlLGFyZ3VtZW50cyl9LHNjYWxlU2VxdWVudGlhbExvZzpmdW5jdGlvbiB0KCl7dmFyIGU9JE0odUEoKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBoQShlLHQoKSkuYmFzZShlLmJhc2UoKSl9LGJNLmFwcGx5KGUsYXJndW1lbnRzKX0sc2NhbGVTZXF1ZW50aWFsUG93OmRBLHNjYWxlU2VxdWVudGlhbFNxcnQ6ZnVuY3Rpb24gb1IoKXtyZXR1cm4gZEEuYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX0sc2NhbGVTZXF1ZW50aWFsU3ltbG9nOmZ1bmN0aW9uIHQoKXt2YXIgZT1RTSh1QSgpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGhBKGUsdCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxiTS5hcHBseShlLGFyZ3VtZW50cyl9LHNjYWxlU2VxdWVudGlhbFF1YW50aWxlOmZ1bmN0aW9uIHQoKXt2YXIgZT1bXSxuPVBNO2Z1bmN0aW9uIGkodCl7aWYoIWlzTmFOKHQ9K3QpKXJldHVybiBuKChTbChlLHQpLTEpLyhlLmxlbmd0aC0xKSl9cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXTtmb3IodmFyIG4scj0wLG89dC5sZW5ndGg7cjxvOysrciludWxsPT0obj10W3JdKXx8aXNOYU4obj0rbil8fGUucHVzaChuKTtyZXR1cm4gZS5zb3J0KGJsKSxpfSxpLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGkpOm59LGkuY29weT1mdW5jdGlvbigpe3JldHVybiB0KG4pLmRvbWFpbihlKX0sYk0uYXBwbHkoaSxhcmd1bWVudHMpfSxzY2FsZURpdmVyZ2luZzpmdW5jdGlvbiB0KCl7dmFyIGU9Rk0ocEEoKShQTSkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gaEEoZSx0KCkpfSxiTS5hcHBseShlLGFyZ3VtZW50cyl9LHNjYWxlRGl2ZXJnaW5nTG9nOmZ1bmN0aW9uIHQoKXt2YXIgZT0kTShwQSgpKS5kb21haW4oWy4xLDEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGhBKGUsdCgpKS5iYXNlKGUuYmFzZSgpKX0sYk0uYXBwbHkoZSxhcmd1bWVudHMpfSxzY2FsZURpdmVyZ2luZ1BvdzpmQSxzY2FsZURpdmVyZ2luZ1NxcnQ6ZnVuY3Rpb24gYVIoKXtyZXR1cm4gZkEuYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX0sc2NhbGVEaXZlcmdpbmdTeW1sb2c6ZnVuY3Rpb24gdCgpe3ZhciBlPVFNKHBBKCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gaEEoZSx0KCkpLmNvbnN0YW50KGUuY29uc3RhbnQoKSl9LGJNLmFwcGx5KGUsYXJndW1lbnRzKX0sdGlja0Zvcm1hdDpITSxzY2hlbWVDYXRlZ29yeTEwOmdBLHNjaGVtZUFjY2VudDpfQSxzY2hlbWVEYXJrMjp5QSxzY2hlbWVQYWlyZWQ6dkEsc2NoZW1lUGFzdGVsMTpiQSxzY2hlbWVQYXN0ZWwyOnhBLHNjaGVtZVNldDE6d0Esc2NoZW1lU2V0MjpTQSxzY2hlbWVTZXQzOk1BLHNjaGVtZVRhYmxlYXUxMDpFQSxpbnRlcnBvbGF0ZUJyQkc6QUEsc2NoZW1lQnJCRzpDQSxpbnRlcnBvbGF0ZVBSR246TEEsc2NoZW1lUFJHbjprQSxpbnRlcnBvbGF0ZVBpWUc6TkEsc2NoZW1lUGlZRzpQQSxpbnRlcnBvbGF0ZVB1T3I6UkEsc2NoZW1lUHVPcjpJQSxpbnRlcnBvbGF0ZVJkQnU6ekEsc2NoZW1lUmRCdTpPQSxpbnRlcnBvbGF0ZVJkR3k6QkEsc2NoZW1lUmRHeTpEQSxpbnRlcnBvbGF0ZVJkWWxCdTpGQSxzY2hlbWVSZFlsQnU6SEEsaW50ZXJwb2xhdGVSZFlsR246VUEsc2NoZW1lUmRZbEduOlZBLGludGVycG9sYXRlU3BlY3RyYWw6R0Esc2NoZW1lU3BlY3RyYWw6akEsaW50ZXJwb2xhdGVCdUduOnFBLHNjaGVtZUJ1R246V0EsaW50ZXJwb2xhdGVCdVB1OlhBLHNjaGVtZUJ1UHU6WUEsaW50ZXJwb2xhdGVHbkJ1OktBLHNjaGVtZUduQnU6JEEsaW50ZXJwb2xhdGVPclJkOkpBLHNjaGVtZU9yUmQ6WkEsaW50ZXJwb2xhdGVQdUJ1R246dGssc2NoZW1lUHVCdUduOlFBLGludGVycG9sYXRlUHVCdTpuayxzY2hlbWVQdUJ1OmVrLGludGVycG9sYXRlUHVSZDpyayxzY2hlbWVQdVJkOmlrLGludGVycG9sYXRlUmRQdTphayxzY2hlbWVSZFB1Om9rLGludGVycG9sYXRlWWxHbkJ1OmxrLHNjaGVtZVlsR25CdTpzayxpbnRlcnBvbGF0ZVlsR246dWssc2NoZW1lWWxHbjpjayxpbnRlcnBvbGF0ZVlsT3JCcjpkayxzY2hlbWVZbE9yQnI6aGssaW50ZXJwb2xhdGVZbE9yUmQ6Zmssc2NoZW1lWWxPclJkOnBrLGludGVycG9sYXRlQmx1ZXM6Z2ssc2NoZW1lQmx1ZXM6bWssaW50ZXJwb2xhdGVHcmVlbnM6eWssc2NoZW1lR3JlZW5zOl9rLGludGVycG9sYXRlR3JleXM6Ymssc2NoZW1lR3JleXM6dmssaW50ZXJwb2xhdGVQdXJwbGVzOndrLHNjaGVtZVB1cnBsZXM6eGssaW50ZXJwb2xhdGVSZWRzOk1rLHNjaGVtZVJlZHM6U2ssaW50ZXJwb2xhdGVPcmFuZ2VzOlRrLHNjaGVtZU9yYW5nZXM6RWssaW50ZXJwb2xhdGVDaXZpZGlzOmZ1bmN0aW9uIHNSKHQpe3JldHVybiB0PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksInJnYigiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoLTQuNTQtdCooMzUuMzQtdCooMjM4MS43My10Kig2NDAyLjctdCooNzAyNC43Mi0yNzEwLjU3KnQpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzMi40OSt0KigxNzAuNzMrdCooNTIuODItdCooMTMxLjQ2LXQqKDE3Ni41OC02Ny4zNyp0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoODEuMjQrdCooNDQyLjM2LXQqKDI0ODIuNDMtdCooNjE2Ny4yNC10Kig2NjE0Ljk0LTI0NzUuNjcqdCkpKSkpKSkrIikifSxpbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHQ6Q2ssaW50ZXJwb2xhdGVSYWluYm93OmZ1bmN0aW9uIGxSKHQpeyh0PDB8fHQ+MSkmJih0LT1NYXRoLmZsb29yKHQpKTt2YXIgZT1NYXRoLmFicyh0LS41KTtyZXR1cm4gTGsuaD0zNjAqdC0xMDAsTGsucz0xLjUtMS41KmUsTGsubD0uOC0uOSplLExrKyIifSxpbnRlcnBvbGF0ZVdhcm06QWssaW50ZXJwb2xhdGVDb29sOmtrLGludGVycG9sYXRlU2luZWJvdzpmdW5jdGlvbiBjUih0KXt2YXIgZTtyZXR1cm4gdD0oLjUtdCkqTWF0aC5QSSxQay5yPTI1NSooZT1NYXRoLnNpbih0KSkqZSxQay5nPTI1NSooZT1NYXRoLnNpbih0K05rKSkqZSxQay5iPTI1NSooZT1NYXRoLnNpbih0K0lrKSkqZSxQaysiIn0saW50ZXJwb2xhdGVUdXJibzpmdW5jdGlvbiB1Uih0KXtyZXR1cm4gdD1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDM0LjYxK3QqKDExNzIuMzMtdCooMTA3OTMuNTYtdCooMzMzMDAuMTItdCooMzgzOTQuNDktMTQ4MjUuMDUqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDIzLjMxK3QqKDU1Ny4zMyt0KigxMjI1LjMzLXQqKDM1NzQuOTYtdCooMTA3My43Nys3MDcuNTYqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDI3LjIrdCooMzIxMS4xLXQqKDE1MzI3Ljk3LXQqKDI3ODE0LXQqKDIyNTY5LjE4LTY4MzguNjYqdCkpKSkpKSkrIikifSxpbnRlcnBvbGF0ZVZpcmlkaXM6T2ssaW50ZXJwb2xhdGVNYWdtYTp6ayxpbnRlcnBvbGF0ZUluZmVybm86RGssaW50ZXJwb2xhdGVQbGFzbWE6QmssY3JlYXRlOmZ1bmN0aW9uIGhSKHQpe3JldHVybiBTdSh5Yyh0KS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfSxjcmVhdG9yOnljLGxvY2FsOm5oLG1hdGNoZXI6U2MsbW91c2U6YWgsbmFtZXNwYWNlOm1jLG5hbWVzcGFjZXM6ZmMsY2xpZW50UG9pbnQ6b2gsc2VsZWN0OlN1LHNlbGVjdEFsbDpzaCxzZWxlY3Rpb246d3Usc2VsZWN0b3I6YmMsc2VsZWN0b3JBbGw6d2Msc3R5bGU6SGMsdG91Y2g6bGgsdG91Y2hlczpmdW5jdGlvbiBkUih0LGUpe251bGw9PWUmJihlPXJoKCkudG91Y2hlcyk7Zm9yKHZhciBuPTAsaT1lP2UubGVuZ3RoOjAscj1uZXcgQXJyYXkoaSk7bjxpOysrbilyW25dPW9oKHQsZVtuXSk7cmV0dXJuIHJ9LHdpbmRvdzpPYyxnZXQgZXZlbnQoKXtyZXR1cm4gdXV9LGN1c3RvbUV2ZW50Omd1LGFyYzpmdW5jdGlvbiBwUigpe3ZhciB0PVFrLGU9dEwsbj1IaygwKSxpPW51bGwscj1lTCxvPW5MLGE9aUwscz1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgbCxjLHU9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGQ9ci5hcHBseSh0aGlzLGFyZ3VtZW50cyktJGsscD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS0kayxmPUZrKHAtZCksbT1wPmQ7aWYoc3x8KHM9bD1mZygpKSxoPHUmJihjPWgsaD11LHU9YyksaD5ZaylpZihmPktrLVlrKXMubW92ZVRvKGgqVWsoZCksaCpXayhkKSkscy5hcmMoMCwwLGgsZCxwLCFtKSx1PllrJiYocy5tb3ZlVG8odSpVayhwKSx1KldrKHApKSxzLmFyYygwLDAsdSxwLGQsbSkpO2Vsc2V7dmFyIGcsXyx5PWQsdj1wLGI9ZCx4PXAsdz1mLFM9ZixNPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsRT1NPllrJiYoaT8raS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cWsodSp1K2gqaCkpLFQ9R2soRmsoaC11KS8yLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksQz1ULEE9VDtpZihFPllrKXt2YXIgaz1KayhFL3UqV2soTSkpLEw9SmsoRS9oKldrKE0pKTsody09MiprKT5Zaz8oYis9ayo9bT8xOi0xLHgtPWspOih3PTAsYj14PShkK3ApLzIpLChTLT0yKkwpPllrPyh5Kz1MKj1tPzE6LTEsdi09TCk6KFM9MCx5PXY9KGQrcCkvMil9dmFyIFA9aCpVayh5KSxOPWgqV2soeSksST11KlVrKHgpLFI9dSpXayh4KTtpZihUPllrKXt2YXIgTyx6PWgqVWsodiksRD1oKldrKHYpLEI9dSpVayhiKSxIPXUqV2soYik7aWYoZjxYayYmKE89ckwoUCxOLEIsSCx6LEQsSSxSKSkpe3ZhciBGPVAtT1swXSxWPU4tT1sxXSxVPXotT1swXSxqPUQtT1sxXSxHPTEvV2soWmsoKEYqVStWKmopLyhxayhGKkYrVipWKSpxayhVKlUraipqKSkpLzIpLFc9cWsoT1swXSpPWzBdK09bMV0qT1sxXSk7Qz1HayhULCh1LVcpLyhHLTEpKSxBPUdrKFQsKGgtVykvKEcrMSkpfX1TPllrP0E+WWs/KGc9b0woQixILFAsTixoLEEsbSksXz1vTCh6LEQsSSxSLGgsQSxtKSxzLm1vdmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLEE8VD9zLmFyYyhnLmN4LGcuY3ksQSxWayhnLnkwMSxnLngwMSksVmsoXy55MDEsXy54MDEpLCFtKToocy5hcmMoZy5jeCxnLmN5LEEsVmsoZy55MDEsZy54MDEpLFZrKGcueTExLGcueDExKSwhbSkscy5hcmMoMCwwLGgsVmsoZy5jeStnLnkxMSxnLmN4K2cueDExKSxWayhfLmN5K18ueTExLF8uY3grXy54MTEpLCFtKSxzLmFyYyhfLmN4LF8uY3ksQSxWayhfLnkxMSxfLngxMSksVmsoXy55MDEsXy54MDEpLCFtKSkpOihzLm1vdmVUbyhQLE4pLHMuYXJjKDAsMCxoLHksdiwhbSkpOnMubW92ZVRvKFAsTiksdT5ZayYmdz5Zaz9DPllrPyhnPW9MKEksUix6LEQsdSwtQyxtKSxfPW9MKFAsTixCLEgsdSwtQyxtKSxzLmxpbmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLEM8VD9zLmFyYyhnLmN4LGcuY3ksQyxWayhnLnkwMSxnLngwMSksVmsoXy55MDEsXy54MDEpLCFtKToocy5hcmMoZy5jeCxnLmN5LEMsVmsoZy55MDEsZy54MDEpLFZrKGcueTExLGcueDExKSwhbSkscy5hcmMoMCwwLHUsVmsoZy5jeStnLnkxMSxnLmN4K2cueDExKSxWayhfLmN5K18ueTExLF8uY3grXy54MTEpLG0pLHMuYXJjKF8uY3gsXy5jeSxDLFZrKF8ueTExLF8ueDExKSxWayhfLnkwMSxfLngwMSksIW0pKSk6cy5hcmMoMCwwLHUseCxiLG0pOnMubGluZVRvKEksUil9ZWxzZSBzLm1vdmVUbygwLDApO2lmKHMuY2xvc2VQYXRoKCksbClyZXR1cm4gcz1udWxsLGwrIiJ8fG51bGx9cmV0dXJuIGwuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsaT0oK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItWGsvMjtyZXR1cm5bVWsoaSkqbixXayhpKSpuXX0sbC5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOkhrKCtlKSxsKTp0fSxsLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SGsoK3QpLGwpOmV9LGwuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SGsoK3QpLGwpOm59LGwucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OkhrKCt0KSxsKTppfSxsLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIaygrdCksbCk6cn0sbC5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhrKCt0KSxsKTpvfSxsLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SGsoK3QpLGwpOmF9LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1udWxsPT10P251bGw6dCxsKTpzfSxsfSxhcmVhOmhMLGxpbmU6dUwscGllOmZ1bmN0aW9uIGZSKCl7dmFyIHQ9cEwsZT1kTCxuPW51bGwsaT1IaygwKSxyPUhrKEtrKSxvPUhrKDApO2Z1bmN0aW9uIGEoYSl7dmFyIHMsbCxjLHUsaCxkPWEubGVuZ3RoLHA9MCxmPW5ldyBBcnJheShkKSxtPW5ldyBBcnJheShkKSxnPStpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxfPU1hdGgubWluKEtrLE1hdGgubWF4KC1LayxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSkseT1NYXRoLm1pbihNYXRoLmFicyhfKS9kLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKSx2PXkqKF88MD8tMToxKTtmb3Iocz0wO3M8ZDsrK3MpKGg9bVtmW3NdPXNdPSt0KGFbc10scyxhKSk+MCYmKHArPWgpO2ZvcihudWxsIT1lP2Yuc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShtW3RdLG1bbl0pfSkpOm51bGwhPW4mJmYuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihhW3RdLGFbZV0pfSkpLHM9MCxjPXA/KF8tZCp2KS9wOjA7czxkOysrcyxnPXUpbVtsPWZbc11dPXtkYXRhOmFbbF0saW5kZXg6cyx2YWx1ZTpoPW1bbF0sc3RhcnRBbmdsZTpnLGVuZEFuZ2xlOnU9ZysoaD4wP2gqYzowKSt2LHBhZEFuZ2xlOnl9O3JldHVybiBtfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6SGsoK2UpLGEpOnR9LGEuc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxhKTplfSxhLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwsYSk6bn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SGsoK3QpLGEpOml9LGEuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIaygrdCksYSk6cn0sYS5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhrKCt0KSxhKTpvfSxhfSxhcmVhUmFkaWFsOnZMLHJhZGlhbEFyZWE6dkwsbGluZVJhZGlhbDp5TCxyYWRpYWxMaW5lOnlMLHBvaW50UmFkaWFsOmJMLGxpbmtIb3Jpem9udGFsOmZ1bmN0aW9uIG1SKCl7cmV0dXJuIE1MKEVMKX0sbGlua1ZlcnRpY2FsOmZ1bmN0aW9uIGdSKCl7cmV0dXJuIE1MKFRMKX0sbGlua1JhZGlhbDpmdW5jdGlvbiBfUigpe3ZhciB0PU1MKENMKTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0fSxzeW1ib2w6ZnVuY3Rpb24geVIoKXt2YXIgdD1IayhBTCksZT1Iayg2NCksbj1udWxsO2Z1bmN0aW9uIGkoKXt2YXIgaTtpZihufHwobj1pPWZnKCkpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLmRyYXcobiwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGkpcmV0dXJuIG49bnVsbCxpKyIifHxudWxsfXJldHVybiBpLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpIayhlKSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIaygrdCksaSk6ZX0saS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDp0LGkpOm59LGl9LHN5bWJvbHM6V0wsc3ltYm9sQ2lyY2xlOkFMLHN5bWJvbENyb3NzOmtMLHN5bWJvbERpYW1vbmQ6Tkwsc3ltYm9sU3F1YXJlOkRMLHN5bWJvbFN0YXI6ekwsc3ltYm9sVHJpYW5nbGU6SEwsc3ltYm9sV3llOkdMLGN1cnZlQmFzaXNDbG9zZWQ6ZnVuY3Rpb24gdlIodCl7cmV0dXJuIG5ldyBLTCh0KX0sY3VydmVCYXNpc09wZW46ZnVuY3Rpb24gYlIodCl7cmV0dXJuIG5ldyBaTCh0KX0sY3VydmVCYXNpczokTCxjdXJ2ZUJ1bmRsZTpRTCxjdXJ2ZUNhcmRpbmFsQ2xvc2VkOnJQLGN1cnZlQ2FyZGluYWxPcGVuOmFQLGN1cnZlQ2FyZGluYWw6blAsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOmhQLGN1cnZlQ2F0bXVsbFJvbU9wZW46cFAsY3VydmVDYXRtdWxsUm9tOmNQLGN1cnZlTGluZWFyQ2xvc2VkOmZ1bmN0aW9uIHhSKHQpe3JldHVybiBuZXcgZlAodCl9LGN1cnZlTGluZWFyOnNMLGN1cnZlTW9ub3RvbmVYOmZ1bmN0aW9uIHdSKHQpe3JldHVybiBuZXcgdlAodCl9LGN1cnZlTW9ub3RvbmVZOmZ1bmN0aW9uIFNSKHQpe3JldHVybiBuZXcgYlAodCl9LGN1cnZlTmF0dXJhbDpmdW5jdGlvbiBNUih0KXtyZXR1cm4gbmV3IHdQKHQpfSxjdXJ2ZVN0ZXA6ZnVuY3Rpb24gRVIodCl7cmV0dXJuIG5ldyBNUCh0LC41KX0sY3VydmVTdGVwQWZ0ZXI6ZnVuY3Rpb24gVFIodCl7cmV0dXJuIG5ldyBNUCh0LDEpfSxjdXJ2ZVN0ZXBCZWZvcmU6ZnVuY3Rpb24gQ1IodCl7cmV0dXJuIG5ldyBNUCh0LDApfSxzdGFjazpmdW5jdGlvbiBBUigpe3ZhciB0PUhrKFtdKSxlPVRQLG49RVAsaT1DUDtmdW5jdGlvbiByKHIpe3ZhciBvLGEscz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxsPXIubGVuZ3RoLGM9cy5sZW5ndGgsdT1uZXcgQXJyYXkoYyk7Zm9yKG89MDtvPGM7KytvKXtmb3IodmFyIGgsZD1zW29dLHA9dVtvXT1uZXcgQXJyYXkobCksZj0wO2Y8bDsrK2YpcFtmXT1oPVswLCtpKHJbZl0sZCxmLHIpXSxoLmRhdGE9cltmXTtwLmtleT1kfWZvcihvPTAsYT1lKHUpO288YzsrK28pdVthW29dXS5pbmRleD1vO3JldHVybiBuKHUsYSksdX1yZXR1cm4gci5rZXlzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6SGsoeEwuY2FsbChlKSkscik6dH0sci52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhrKCt0KSxyKTppfSxyLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/VFA6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIayh4TC5jYWxsKHQpKSxyKTplfSxyLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P0VQOnQscik6bn0scn0sc3RhY2tPZmZzZXRFeHBhbmQ6ZnVuY3Rpb24ga1IodCxlKXtpZigoaT10Lmxlbmd0aCk+MCl7Zm9yKHZhciBuLGkscixvPTAsYT10WzBdLmxlbmd0aDtvPGE7KytvKXtmb3Iocj1uPTA7bjxpOysrbilyKz10W25dW29dWzFdfHwwO2lmKHIpZm9yKG49MDtuPGk7KytuKXRbbl1bb11bMV0vPXJ9RVAodCxlKX19LHN0YWNrT2Zmc2V0RGl2ZXJnaW5nOmZ1bmN0aW9uIExSKHQsZSl7aWYoKHM9dC5sZW5ndGgpPjApZm9yKHZhciBuLGkscixvLGEscyxsPTAsYz10W2VbMF1dLmxlbmd0aDtsPGM7KytsKWZvcihvPWE9MCxuPTA7bjxzOysrbikocj0oaT10W2Vbbl1dW2xdKVsxXS1pWzBdKT4wPyhpWzBdPW8saVsxXT1vKz1yKTpyPDA/KGlbMV09YSxpWzBdPWErPXIpOihpWzBdPTAsaVsxXT1yKX0sc3RhY2tPZmZzZXROb25lOkVQLHN0YWNrT2Zmc2V0U2lsaG91ZXR0ZTpmdW5jdGlvbiBQUih0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIG4saT0wLHI9dFtlWzBdXSxvPXIubGVuZ3RoO2k8bzsrK2kpe2Zvcih2YXIgYT0wLHM9MDthPG47KythKXMrPXRbYV1baV1bMV18fDA7cltpXVsxXSs9cltpXVswXT0tcy8yfUVQKHQsZSl9fSxzdGFja09mZnNldFdpZ2dsZTpmdW5jdGlvbiBOUih0LGUpe2lmKChyPXQubGVuZ3RoKT4wJiYoaT0obj10W2VbMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgbixpLHIsbz0wLGE9MTthPGk7KythKXtmb3IodmFyIHM9MCxsPTAsYz0wO3M8cjsrK3Mpe2Zvcih2YXIgdT10W2Vbc11dLGg9dVthXVsxXXx8MCxkPShoLSh1W2EtMV1bMV18fDApKS8yLHA9MDtwPHM7KytwKXt2YXIgZj10W2VbcF1dO2QrPShmW2FdWzFdfHwwKS0oZlthLTFdWzFdfHwwKX1sKz1oLGMrPWQqaH1uW2EtMV1bMV0rPW5bYS0xXVswXT1vLGwmJihvLT1jL2wpfW5bYS0xXVsxXSs9blthLTFdWzBdPW8sRVAodCxlKX19LHN0YWNrT3JkZXJBcHBlYXJhbmNlOkFQLHN0YWNrT3JkZXJBc2NlbmRpbmc6TFAsc3RhY2tPcmRlckRlc2NlbmRpbmc6ZnVuY3Rpb24gSVIodCl7cmV0dXJuIExQKHQpLnJldmVyc2UoKX0sc3RhY2tPcmRlckluc2lkZU91dDpmdW5jdGlvbiBSUih0KXt2YXIgZSxuLGk9dC5sZW5ndGgscj10Lm1hcChQUCksbz1BUCh0KSxhPTAscz0wLGw9W10sYz1bXTtmb3IoZT0wO2U8aTsrK2Upbj1vW2VdLGE8cz8oYSs9cltuXSxsLnB1c2gobikpOihzKz1yW25dLGMucHVzaChuKSk7cmV0dXJuIGMucmV2ZXJzZSgpLmNvbmNhdChsKX0sc3RhY2tPcmRlck5vbmU6VFAsc3RhY2tPcmRlclJldmVyc2U6ZnVuY3Rpb24gT1IodCl7cmV0dXJuIFRQKHQpLnJldmVyc2UoKX0sdGltZUludGVydmFsOmNFLHRpbWVNaWxsaXNlY29uZDpoRSx0aW1lTWlsbGlzZWNvbmRzOmRFLHV0Y01pbGxpc2Vjb25kOmhFLHV0Y01pbGxpc2Vjb25kczpkRSx0aW1lU2Vjb25kOnZFLHRpbWVTZWNvbmRzOmJFLHV0Y1NlY29uZDp2RSx1dGNTZWNvbmRzOmJFLHRpbWVNaW51dGU6d0UsdGltZU1pbnV0ZXM6U0UsdGltZUhvdXI6RUUsdGltZUhvdXJzOlRFLHRpbWVEYXk6QUUsdGltZURheXM6a0UsdGltZVdlZWs6UEUsdGltZVdlZWtzOkJFLHRpbWVTdW5kYXk6UEUsdGltZVN1bmRheXM6QkUsdGltZU1vbmRheTpORSx0aW1lTW9uZGF5czpIRSx0aW1lVHVlc2RheTpJRSx0aW1lVHVlc2RheXM6RkUsdGltZVdlZG5lc2RheTpSRSx0aW1lV2VkbmVzZGF5czpWRSx0aW1lVGh1cnNkYXk6T0UsdGltZVRodXJzZGF5czpVRSx0aW1lRnJpZGF5OnpFLHRpbWVGcmlkYXlzOmpFLHRpbWVTYXR1cmRheTpERSx0aW1lU2F0dXJkYXlzOkdFLHRpbWVNb250aDpxRSx0aW1lTW9udGhzOllFLHRpbWVZZWFyOiRFLHRpbWVZZWFyczpLRSx1dGNNaW51dGU6SkUsdXRjTWludXRlczpRRSx1dGNIb3VyOmVULHV0Y0hvdXJzOm5ULHV0Y0RheTpyVCx1dGNEYXlzOm9ULHV0Y1dlZWs6c1QsdXRjV2Vla3M6ZlQsdXRjU3VuZGF5OnNULHV0Y1N1bmRheXM6ZlQsdXRjTW9uZGF5OmxULHV0Y01vbmRheXM6bVQsdXRjVHVlc2RheTpjVCx1dGNUdWVzZGF5czpnVCx1dGNXZWRuZXNkYXk6dVQsdXRjV2VkbmVzZGF5czpfVCx1dGNUaHVyc2RheTpoVCx1dGNUaHVyc2RheXM6eVQsdXRjRnJpZGF5OmRULHV0Y0ZyaWRheXM6dlQsdXRjU2F0dXJkYXk6cFQsdXRjU2F0dXJkYXlzOmJULHV0Y01vbnRoOndULHV0Y01vbnRoczpTVCx1dGNZZWFyOkVULHV0Y1llYXJzOlRULHRpbWVGb3JtYXREZWZhdWx0TG9jYWxlOlFDLGdldCB0aW1lRm9ybWF0KCl7cmV0dXJuIE5UfSxnZXQgdGltZVBhcnNlKCl7cmV0dXJuIElUfSxnZXQgdXRjRm9ybWF0KCl7cmV0dXJuIFJUfSxnZXQgdXRjUGFyc2UoKXtyZXR1cm4gT1R9LHRpbWVGb3JtYXRMb2NhbGU6TFQsaXNvRm9ybWF0OmVBLGlzb1BhcnNlOmlBLG5vdzpUcCx0aW1lcjprcCx0aW1lckZsdXNoOkxwLHRpbWVvdXQ6UnAsaW50ZXJ2YWw6ZnVuY3Rpb24gelIodCxlLG4pe3ZhciBpPW5ldyBBcCxyPWU7cmV0dXJuIG51bGw9PWU/KGkucmVzdGFydCh0LGUsbiksaSk6KGU9K2Usbj1udWxsPT1uP1RwKCk6K24saS5yZXN0YXJ0KChmdW5jdGlvbiBvKGEpe2ErPXIsaS5yZXN0YXJ0KG8scis9ZSxuKSx0KGEpfSksZSxuKSxpKX0sdHJhbnNpdGlvbjpfZixhY3RpdmU6ZnVuY3Rpb24gRFIodCxlKXt2YXIgbixpLHI9dC5fX3RyYW5zaXRpb247aWYocilmb3IoaSBpbiBlPW51bGw9PWU/bnVsbDplKyIiLHIpaWYoKG49cltpXSkuc3RhdGU+MSYmbi5uYW1lPT09ZSlyZXR1cm4gbmV3IGdmKFtbdF1dLE1tLGUsK2kpO3JldHVybiBudWxsfSxpbnRlcnJ1cHQ6VnAsdm9yb25vaTpmdW5jdGlvbiBCUigpe3ZhciB0PUlQLGU9UlAsbj1udWxsO2Z1bmN0aW9uIGkoaSl7cmV0dXJuIG5ldyBtTihpLm1hcCgoZnVuY3Rpb24obixyKXt2YXIgbz1bTWF0aC5yb3VuZCh0KG4scixpKS9oTikqaE4sTWF0aC5yb3VuZChlKG4scixpKS9oTikqaE5dO3JldHVybiBvLmluZGV4PXIsby5kYXRhPW4sb30pKSxuKX1yZXR1cm4gaS5wb2x5Z29ucz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KS5wb2x5Z29ucygpfSxpLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLmxpbmtzKCl9LGkudHJpYW5nbGVzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLnRyaWFuZ2xlcygpfSxpLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpOUCgrZSksaSk6dH0saS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TlAoK3QpLGkpOmV9LGkuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDpbWyt0WzBdWzBdLCt0WzBdWzFdXSxbK3RbMV1bMF0sK3RbMV1bMV1dXSxpKTpuJiZbW25bMF1bMF0sblswXVsxXV0sW25bMV1bMF0sblsxXVsxXV1dfSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOltbMCwwXSxbK3RbMF0sK3RbMV1dXSxpKTpuJiZbblsxXVswXS1uWzBdWzBdLG5bMV1bMV0tblswXVsxXV19LGl9LHpvb206a04sem9vbVRyYW5zZm9ybTpiTix6b29tSWRlbnRpdHk6dk59KTtjb25zdCBIUj1bIiNmZjcwNDMiLCIjMDA3N2JiIiwiI2NjMzMxMSIsIiMzM2JiZWUiLCIjZWUzMzc3IiwiIzAwOTk4OCIsIiNiYmJiYmIiXTtjbGFzcyBGUiBleHRlbmRzIG1se2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBlcmltZW50cz1bXX1sb2FkKCl7Y29uc3QgdD1fcigpLmV4cGVyaW1lbnRzKCk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57U2UuZXhwb3J0cy5pc0VxdWFsKHRoaXMuX2V4cGVyaW1lbnRzLHQpfHwodGhpcy5fZXhwZXJpbWVudHM9dCx0aGlzLmVtaXRDaGFuZ2UoKSl9KSl9Z2V0RXhwZXJpbWVudHMoKXtyZXR1cm4gdGhpcy5fZXhwZXJpbWVudHMuc2xpY2UoKX19Y29uc3QgVlI9bmV3IEZSO2NsYXNzIFVSe2NvbnN0cnVjdG9yKHQ9SFIpe3RoaXMucGFsZXR0ZT10LHRoaXMuaWRlbnRpZmllcnM9d2coKX1zZXREb21haW4odCl7cmV0dXJuIHRoaXMuaWRlbnRpZmllcnM9d2coKSx0LmZvckVhY2goKCh0LGUpPT57dGhpcy5pZGVudGlmaWVycy5zZXQodCx0aGlzLnBhbGV0dGVbZSV0aGlzLnBhbGV0dGUubGVuZ3RoXSl9KSksdGhpc31nZXRDb2xvcih0KXtpZighdGhpcy5pZGVudGlmaWVycy5oYXModCkpdGhyb3cgbmV3IEVycm9yKGBTdHJpbmcgJHt0fSB3YXMgbm90IGluIHRoZSBkb21haW4uYCk7cmV0dXJuIHRoaXMuaWRlbnRpZmllcnMuZ2V0KHQpfX1mdW5jdGlvbiBqUih0LGUpe2NvbnN0IG49bmV3IFVSO2Z1bmN0aW9uIGkoKXtuLnNldERvbWFpbihlKCkpfXJldHVybiB0LmFkZExpc3RlbmVyKGkpLGkoKSx0PT5uLmdldENvbG9yKHQpfWNvbnN0IEdSPWpSKHZsLCgoKT0+dmwuZ2V0UnVucygpKSk7alIoVlIsKCgpPT5WUi5nZXRFeHBlcmltZW50cygpLm1hcCgoKHtuYW1lOnR9KT0+dCkpKSksZWwoe21vZHVsZU5hbWU6InJ1bi1jb2xvci1zdHlsZSIsc3R5bGVDb250ZW50OiJcbiAgICBbY29sb3ItY2xhc3M9J2xpZ2h0LWJsdWUnXSBwYXBlci1jaGVja2JveCB7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1saWdodC1ibHVlLTkwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwKTtcbiAgICB9XG4gICAgW2NvbG9yLWNsYXNzPSdyZWQnXSBwYXBlci1jaGVja2JveCB7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcmVkLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcmVkLTkwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApO1xuICAgIH1cbiAgICBbY29sb3ItY2xhc3M9J2dyZWVuJ10gcGFwZXItY2hlY2tib3gge1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItZ3JlZW4tNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi05MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi05MDApO1xuICAgIH1cbiAgICBbY29sb3ItY2xhc3M9J3B1cnBsZSddIHBhcGVyLWNoZWNrYm94IHtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1wdXJwbGUtNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1wdXJwbGUtOTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7XG4gICAgfVxuICAgIFtjb2xvci1jbGFzcz0ndGVhbCddIHBhcGVyLWNoZWNrYm94IHtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC01MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC01MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXRlYWwtOTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC05MDApO1xuICAgIH1cbiAgICBbY29sb3ItY2xhc3M9J3BpbmsnXSBwYXBlci1jaGVja2JveCB7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXBpbmstNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLTkwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXBpbmstOTAwKTtcbiAgICB9XG4gICAgW2NvbG9yLWNsYXNzPSdvcmFuZ2UnXSBwYXBlci1jaGVja2JveCB7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItb3JhbmdlLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItb3JhbmdlLTkwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApO1xuICAgIH1cbiAgICBbY29sb3ItY2xhc3M9J2Jyb3duJ10gcGFwZXItY2hlY2tib3gge1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItYnJvd24tNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi05MDApO1xuICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi05MDApO1xuICAgIH1cbiAgICBbY29sb3ItY2xhc3M9J2luZGlnbyddIHBhcGVyLWNoZWNrYm94IHtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7XG4gICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tNTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tOTAwKTtcbiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7XG4gICAgfVxuICAifSk7bGV0IFdSPWNsYXNzIGV4dGVuZHMoZXIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5uYW1lcz1bXSx0aGlzLmNvbG9yaW5nPXtnZXRDb2xvcjooKT0+IiJ9LHRoaXMucmVnZXg9IiIsdGhpcy5zZWxlY3Rpb25TdGF0ZT17fSx0aGlzLm1heE5hbWVzVG9FbmFibGVCeURlZmF1bHQ9NDAsdGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2U9dGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2VJbXBsKCl9X2RlYm91bmNlZFJlZ2V4Q2hhbmdlSW1wbCgpe3ZhciB0PVNlLmV4cG9ydHMuZGVib3VuY2UoKHQ9Pnt0aGlzLnJlZ2V4PXR9KSwxNTAse2xlYWRpbmc6ITF9KTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLiQkKCIjbmFtZXMtcmVnZXgiKS52YWx1ZTsiIj09ZT90aGlzLmFzeW5jKCgoKT0+e3RoaXMucmVnZXg9ZX0pLDMwKTp0KGUpfX1nZXQgX3JlZ2V4KCl7dmFyIHQ9dGhpcy5yZWdleDt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCl9Y2F0Y2godCl7cmV0dXJuIG51bGx9fV9zZXRJc29sYXRvckljb24oKXt2YXIgdD10aGlzLnNlbGVjdGlvblN0YXRlLGU9U2UuZXhwb3J0cy5maWx0ZXIoU2UuZXhwb3J0cy52YWx1ZXModCkpLmxlbmd0aDtBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgiLmlzb2xhdG9yIikpLmZvckVhY2goKGZ1bmN0aW9uKG4pe24uaWNvbj0xPT09ZSYmdFtuLm5hbWVdPyJyYWRpby1idXR0b24tY2hlY2tlZCI6InJhZGlvLWJ1dHRvbi11bmNoZWNrZWQifSkpfWNvbXB1dGVOYW1lc01hdGNoaW5nUmVnZXgodCxlKXtjb25zdCBuPXRoaXMuX3JlZ2V4O3JldHVybiBuP3RoaXMubmFtZXMuZmlsdGVyKCh0PT5uLnRlc3QodCkpKTp0aGlzLm5hbWVzfWNvbXB1dGVPdXRTZWxlY3RlZCh0LGUpe3ZhciBuPXRoaXMuc2VsZWN0aW9uU3RhdGUsaT10aGlzLm5hbWVzTWF0Y2hpbmdSZWdleC5sZW5ndGg8PXRoaXMubWF4TmFtZXNUb0VuYWJsZUJ5RGVmYXVsdDtyZXR1cm4gdGhpcy5uYW1lc01hdGNoaW5nUmVnZXguZmlsdGVyKCh0PT5udWxsPT1uW3RdP2k6blt0XSkpfXN5bmNocm9uaXplQ29sb3JzKHQpe3RoaXMuX3NldElzb2xhdG9ySWNvbigpLHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci1jaGVja2JveCIpLmZvckVhY2goKHQ9Pntjb25zdCBlPXRoaXMuY29sb3JpbmcuZ2V0Q29sb3IodC5uYW1lKTt0LnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvciI6ZSwiLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvciI6ZSwiLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IiOmUsIi0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvciI6ZX0pfSkpLHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCIuaXNvbGF0b3IiKS5mb3JFYWNoKCh0PT57Y29uc3QgZT10aGlzLmNvbG9yaW5nLmdldENvbG9yKHQubmFtZSk7dC5zdHlsZS5jb2xvcj1lfSkpLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57dGhpcy51cGRhdGVTdHlsZXMoKX0pKX1faXNvbGF0ZU5hbWUodCl7dmFyIGU9dC50YXJnZXQubmFtZSxuPXt9O3RoaXMubmFtZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7blt0XT10PT1lfSkpLHRoaXMuc2VsZWN0aW9uU3RhdGU9bn1fY2hlY2tib3hDaGFuZ2UodCl7dmFyIGU9dC50YXJnZXQ7Y29uc3Qgbj1TZS5leHBvcnRzLmNsb25lKHRoaXMuc2VsZWN0aW9uU3RhdGUpO25bZS5uYW1lXT1lLmNoZWNrZWQsdGhpcy5zZWxlY3Rpb25TdGF0ZT1ufV9pc0NoZWNrZWQodCxlKXtyZXR1cm4tMSE9dGhpcy5vdXRTZWxlY3RlZC5pbmRleE9mKHQpfXRvZ2dsZUFsbCgpe2NvbnN0IHQ9dGhpcy5uYW1lc01hdGNoaW5nUmVnZXguc29tZSgodD0+dGhpcy5vdXRTZWxlY3RlZC5pbmNsdWRlcyh0KSkpLGU9e307dGhpcy5uYW1lcy5mb3JFYWNoKChuPT57ZVtuXT0hdH0pKSx0aGlzLnNlbGVjdGlvblN0YXRlPWV9fTtXUi50ZW1wbGF0ZT1fZWAKICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icnVuLWNvbG9yLXN0eWxlIj48L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dAogICAgICBpZD0ibmFtZXMtcmVnZXgiCiAgICAgIG5vLWxhYmVsLWZsb2F0PSIiCiAgICAgIGxhYmVsPSJXcml0ZSBhIHJlZ2V4IHRvIGZpbHRlciBydW5zIgogICAgICB2YWx1ZT0iW1tyZWdleF1dIgogICAgICBvbi1iaW5kLXZhbHVlLWNoYW5nZWQ9Il9kZWJvdW5jZWRSZWdleENoYW5nZSIKICAgID48L3BhcGVyLWlucHV0PgogICAgPGRpdiBpZD0ib3V0ZXItY29udGFpbmVyIiBjbGFzcz0ic2Nyb2xsYmFyIj4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9IltbbmFtZXNNYXRjaGluZ1JlZ2V4XV0iCiAgICAgICAgb24tZG9tLWNoYW5nZT0ic3luY2hyb25pemVDb2xvcnMiCiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lLXJvdyI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJpY29uLWNvbnRhaW5lciBjaGVja2JveC1jb250YWluZXIgdmVydGljYWwtYWxpZ24tY29udGFpbmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjbGFzcz0iY2hlY2tib3ggdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIGlkJD0iY2hlY2tib3gtW1tpdGVtXV0iCiAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbX2lzQ2hlY2tlZChpdGVtLCBzZWxlY3Rpb25TdGF0ZS4qKV1dIgogICAgICAgICAgICAgIG9uLWNoYW5nZT0iX2NoZWNrYm94Q2hhbmdlIgogICAgICAgICAgICA+PC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iaWNvbi1jb250YWluZXIgaXNvbGF0b3ItY29udGFpbmVyIHZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgaWNvbj0icmFkaW8tYnV0dG9uLXVuY2hlY2tlZCIKICAgICAgICAgICAgICBjbGFzcz0iaXNvbGF0b3IgdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIG9uLXRhcD0iX2lzb2xhdGVOYW1lIgogICAgICAgICAgICAgIG5hbWU9IltbaXRlbV1dIgogICAgICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS1sYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICA8c3Bhbj5bW2l0ZW1dXTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAjb3V0ZXItY29udGFpbmVyIHsKICAgICAgICBjb250YWluOiBjb250ZW50OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAubmFtZS1yb3cgewogICAgICAgIGNvbnRhaW46IGNvbnRlbnQ7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNXB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOyAvKiBtYWtlcyB3cmFwcGluZyBvZiBoeXBlcnBhcmFtIHN0cmluZ3MgYmV0dGVyICovCiAgICAgIH0KICAgICAgLmljb24tY29udGFpbmVyIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgIH0KICAgICAgLmNoZWNrYm94IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmlzb2xhdG9yIHsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICB9CiAgICAgIC5pc29sYXRvci1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNnB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDsKICAgICAgfQogICAgICAuY2hlY2tib3gtY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgfQogICAgICAuaXRlbS1sYWJlbC1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICB3aWR0aDogMHB4OyAvKiBoYWNrIHRvIGdldCB0aGUgZmxleC1ncm93IHRvIHdvcmsgcHJvcGVybHkgKi8KICAgICAgfQogICAgICAudG9vbHRpcC12YWx1ZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CiAgICAgIC52ZXJ0aWNhbC1hbGlnbi1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tY2VudGVyIHsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tdG9wIHsKICAgICAgICBhbGlnbi1zZWxmOiBzdGFydDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxXUi5wcm90b3R5cGUsIm5hbWVzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFdSLnByb3RvdHlwZSwiY29sb3JpbmciLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFdSLnByb3RvdHlwZSwicmVnZXgiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheSxjb21wdXRlZDoiY29tcHV0ZU5hbWVzTWF0Y2hpbmdSZWdleChuYW1lcy4qLCBfcmVnZXgpIn0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFdSLnByb3RvdHlwZSwibmFtZXNNYXRjaGluZ1JlZ2V4Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXUi5wcm90b3R5cGUsInNlbGVjdGlvblN0YXRlIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXksbm90aWZ5OiEwLGNvbXB1dGVkOiJjb21wdXRlT3V0U2VsZWN0ZWQobmFtZXNNYXRjaGluZ1JlZ2V4LiosIHNlbGVjdGlvblN0YXRlLiopIn0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFdSLnByb3RvdHlwZSwib3V0U2VsZWN0ZWQiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sV1IucHJvdG90eXBlLCJtYXhOYW1lc1RvRW5hYmxlQnlEZWZhdWx0Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFdSLnByb3RvdHlwZSwiX2RlYm91bmNlZFJlZ2V4Q2hhbmdlIix2b2lkIDApLHQoW3MoInJlZ2V4IiksZSgiZGVzaWduOnR5cGUiLFJlZ0V4cCksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sV1IucHJvdG90eXBlLCJfcmVnZXgiLG51bGwpLHQoW2EoInNlbGVjdGlvblN0YXRlIiwibmFtZXMiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFdSLnByb3RvdHlwZSwiX3NldElzb2xhdG9ySWNvbiIsbnVsbCksV1I9dChbaSgidGYtbXVsdGktY2hlY2tib3giKV0sV1IpO2xldCBxUj1jbGFzcyBleHRlbmRzIHlle2dldCBfcGFydHMoKXt2YXIgdD10aGlzLnZhbHVlLGU9dGhpcy5kZWxpbWl0ZXJQYXR0ZXJuO2NvbnN0IG49W107Zm9yKDs7KXtjb25zdCBpPW5ldyBSZWdFeHAoZSwiZyIpO2lmKGkudGVzdCh0KSwwPT09aS5sYXN0SW5kZXgpe24ucHVzaCh0KTticmVha31uLnB1c2godC5zbGljZSgwLGkubGFzdEluZGV4KSksdD10LnNsaWNlKGkubGFzdEluZGV4KX1yZXR1cm4gbn19O3FSLnRlbXBsYXRlPV9lYAogICAgPCEtLQogICAgICBUaGlzIHVnbHkgZm9ybWF0dGluZyBpcyByZXF1aXJlZCB0byBwcmV2ZW50IHNwYWNlcyBmcm9tIHNsaXBwaW5nCiAgICAgIGludG8gdGhlIEhUTUwuCiAgICAtLT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3BhcnRzXV0iIGFzPSJwYXJ0IgogICAgICA+W1twYXJ0XV08d2JyCiAgICAvPjwvdGVtcGxhdGU+CiAgYCx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxxUi5wcm90b3R5cGUsInZhbHVlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHFSLnByb3RvdHlwZSwiZGVsaW1pdGVyUGF0dGVybiIsdm9pZCAwKSx0KFtzKCJ2YWx1ZSIsImRlbGltaXRlclBhdHRlcm4iKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHFSLnByb3RvdHlwZSwiX3BhcnRzIixudWxsKSxxUj10KFtpKCJ0Zi13YnItc3RyaW5nIildLHFSKTtsZXQgWVI9Y2xhc3MgZXh0ZW5kcyhlcih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJ1blNlbGVjdGlvblN0YXRlPSRzKCJydW5TZWxlY3Rpb25TdGF0ZSIse2RlZmF1bHRWYWx1ZTp7fX0pLmNhbGwodGhpcyksdGhpcy5yZWdleElucHV0PVJzKCJyZWdleElucHV0Iix7ZGVmYXVsdFZhbHVlOiIifSkuY2FsbCh0aGlzKSx0aGlzLl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoPTI1MCx0aGlzLl9kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuPSJbLz1fLC1dIix0aGlzLmNvbG9yaW5nPXtnZXRDb2xvcjpHUn0sdGhpcy5fc3RvcmVSdW5TZWxlY3Rpb25TdGF0ZT1LcygicnVuU2VsZWN0aW9uU3RhdGUiLHtkZWZhdWx0VmFsdWU6e319KSx0aGlzLl9yZWdleE9ic2VydmVyPU9zKCJyZWdleElucHV0Iix7ZGVmYXVsdFZhbHVlOiIifSl9YXR0YWNoZWQoKXt0aGlzLl9ydW5TdG9yZUxpc3RlbmVyPXZsLmFkZExpc3RlbmVyKCgoKT0+e3RoaXMuc2V0KCJydW5zIix2bC5nZXRSdW5zKCkpfSkpLHRoaXMuc2V0KCJydW5zIix2bC5nZXRSdW5zKCkpLHRoaXMuX2VudlN0b3JlTGlzdGVuZXI9X2wuYWRkTGlzdGVuZXIoKCgpPT57dGhpcy5zZXQoImRhdGFMb2NhdGlvbiIsX2wuZ2V0RGF0YUxvY2F0aW9uKCkpfSkpLHRoaXMuc2V0KCJkYXRhTG9jYXRpb24iLF9sLmdldERhdGFMb2NhdGlvbigpKX1kZXRhY2hlZCgpe3ZsLnJlbW92ZUxpc3RlbmVyQnlLZXkodGhpcy5fcnVuU3RvcmVMaXN0ZW5lciksX2wucmVtb3ZlTGlzdGVuZXJCeUtleSh0aGlzLl9lbnZTdG9yZUxpc3RlbmVyKX1fdG9nZ2xlQWxsKCl7dGhpcy4kLm11bHRpQ2hlY2tib3gudG9nZ2xlQWxsKCl9Z2V0IF9jbGlwcGVkRGF0YUxvY2F0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhTG9jYXRpb24sZT10aGlzLl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQubGVuZ3RoPmU/dC5zdWJzdHJpbmcoMCxlKTp0fV9vcGVuRGF0YUxvY2F0aW9uRGlhbG9nKHQpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLiQkKCIjZGF0YS1sb2NhdGlvbi1kaWFsb2ciKS5vcGVuKCl9X3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24odCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg+ZX19O1lSLnRlbXBsYXRlPV9lYAogICAgPHBhcGVyLWRpYWxvZyB3aXRoLWJhY2tkcm9wPSIiIGlkPSJkYXRhLWxvY2F0aW9uLWRpYWxvZyI+CiAgICAgIDxoMj5EYXRhIExvY2F0aW9uPC9oMj4KICAgICAgPHRmLXdici1zdHJpbmcKICAgICAgICB2YWx1ZT0iW1tkYXRhTG9jYXRpb25dXSIKICAgICAgICBkZWxpbWl0ZXItcGF0dGVybj0iW1tfZGF0YUxvY2F0aW9uRGVsaW1pdGVyUGF0dGVybl1dIgogICAgICA+CiAgICAgIDwvdGYtd2JyLXN0cmluZwogICAgPjwvcGFwZXItZGlhbG9nPgogICAgPGRpdiBpZD0idG9wLXRleHQiPgogICAgICA8aDMgaWQ9InRvb2x0aXAtaGVscCIgY2xhc3M9InRvb2x0aXAtY29udGFpbmVyIj5SdW5zPC9oMz4KICAgIDwvZGl2PgogICAgPHRmLW11bHRpLWNoZWNrYm94CiAgICAgIGlkPSJtdWx0aUNoZWNrYm94IgogICAgICBuYW1lcz0iW1tydW5zXV0iCiAgICAgIHNlbGVjdGlvbi1zdGF0ZT0ie3tydW5TZWxlY3Rpb25TdGF0ZX19IgogICAgICBvdXQtc2VsZWN0ZWQ9Int7c2VsZWN0ZWRSdW5zfX0iCiAgICAgIHJlZ2V4PSJ7e3JlZ2V4SW5wdXR9fSIKICAgICAgY29sb3Jpbmc9IltbY29sb3JpbmddXSIKICAgID48L3RmLW11bHRpLWNoZWNrYm94PgogICAgPHBhcGVyLWJ1dHRvbiBjbGFzcz0ieC1idXR0b24iIGlkPSJ0b2dnbGUtYWxsIiBvbi10YXA9Il90b2dnbGVBbGwiPgogICAgICBUb2dnbGUgQWxsIFJ1bnMKICAgIDwvcGFwZXItYnV0dG9uPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2RhdGFMb2NhdGlvbl1dIj4KICAgICAgPGRpdiBpZD0iZGF0YS1sb2NhdGlvbiI+CiAgICAgICAgPHRmLXdici1zdHJpbmcKICAgICAgICAgIHZhbHVlPSJbW19jbGlwcGVkRGF0YUxvY2F0aW9uXV0iCiAgICAgICAgICBkZWxpbWl0ZXItcGF0dGVybj0iW1tfZGF0YUxvY2F0aW9uRGVsaW1pdGVyUGF0dGVybl1dIgogICAgICAgID48L3RmLXdici1zdHJpbmcKICAgICAgICA+PCEtLQogICAgICAgICAgV2UgdXNlIEhUTUwgY29tbWVudHMgdG8gcmVtb3ZlIHNwYWNlcyBiZWZvcmUgdGhlIGVsbGlwc2lzLgogICAgICAgIC0tPjx0ZW1wbGF0ZQogICAgICAgICAgaXM9ImRvbS1pZiIKICAgICAgICAgIGlmPSJbW19zaG91bGRTaG93RXhwYW5kRGF0YUxvY2F0aW9uQnV0dG9uKGRhdGFMb2NhdGlvbiwgX2RhdGFMb2NhdGlvbkNsaXBMZW5ndGgpXV0iCiAgICAgICAgICA+PCEtLQogICAgICAgICAgLS0+PGEgaHJlZj0iIiBvbi1jbGljaz0iX29wZW5EYXRhTG9jYXRpb25EaWFsb2ciPuKApjwvYT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsKICAgICAgfQogICAgICAjdG9wLXRleHQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDE2cHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQogICAgICB0Zi13YnItc3RyaW5nIHsKICAgICAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIHRmLW11bHRpLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgIC54LWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgfQogICAgICAjdG9vbHRpcC1oZWxwIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgIH0KICAgICAgcGFwZXItYnV0dG9uIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgfQogICAgICAjZGF0YS1sb2NhdGlvbiB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luOiA1cHggMCAwIDA7CiAgICAgICAgbWF4LXdpZHRoOiAyODhweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfc3RvcmVSdW5TZWxlY3Rpb25TdGF0ZSJ9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWVIucHJvdG90eXBlLCJydW5TZWxlY3Rpb25TdGF0ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX3JlZ2V4T2JzZXJ2ZXIifSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFlSLnByb3RvdHlwZSwicmVnZXhJbnB1dCIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFlSLnByb3RvdHlwZSwic2VsZWN0ZWRSdW5zIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxZUi5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFlSLnByb3RvdHlwZSwiZGF0YUxvY2F0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLFlSLnByb3RvdHlwZSwiX2RhdGFMb2NhdGlvbkNsaXBMZW5ndGgiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWVIucHJvdG90eXBlLCJfZGF0YUxvY2F0aW9uRGVsaW1pdGVyUGF0dGVybiIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxZUi5wcm90b3R5cGUsImNvbG9yaW5nIix2b2lkIDApLHQoW3MoImRhdGFMb2NhdGlvbiIsIl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sWVIucHJvdG90eXBlLCJfY2xpcHBlZERhdGFMb2NhdGlvbiIsbnVsbCksWVI9dChbaSgidGYtcnVucy1zZWxlY3RvciIpXSxZUik7Y2xhc3MgWFJ7Y29uc3RydWN0b3IoKXt0aGlzLmNhbmNlbGxhdGlvbkNvdW50PTB9Y2FuY2VsbGFibGUodCl7Y29uc3QgZT10aGlzLmNhbmNlbGxhdGlvbkNvdW50O3JldHVybiBuPT50KHt2YWx1ZTpuLGNhbmNlbGxlZDp0aGlzLmNhbmNlbGxhdGlvbkNvdW50IT09ZX0pfWNhbmNlbEFsbCgpe3RoaXMuY2FuY2VsbGF0aW9uQ291bnQrK319bGV0ICRSPWNsYXNzIGV4dGVuZHMoZXIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5odG1sPSIifWdldCBzYW5pdGl6ZWRIdG1sKCl7cmV0dXJuIHRoaXMuaHRtbH1hdHRhY2hlZCgpe3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLm1hcmtkb3duLCEwKX0pKX19O2Z1bmN0aW9uIEtSKHQpe3JldHVybiB0P3QudG9TdHJpbmcoKS5yZXBsYWNlKC9HTVQtXGQrIFwoKFteKV0rKVwpLywiJDEiKToiIn0kUi50ZW1wbGF0ZT1fZWAKICAgIDxkaXYgaWQ9Im1hcmtkb3duIiBpbm5lci1oLXQtbS1sPSJbW3Nhbml0aXplZEh0bWxdXSI+PC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC8qCiAgICAgICAqIFJlZHVjZSB0b3Btb3N0IGFuZCBib3R0b21tb3N0IG1hcmdpbnMgZnJvbSAxNnB4IHRvIDAuM2VtIChyZW5kZXJzCiAgICAgICAqIGF0IGFib3V0IDQuOHB4KSB0byBrZWVwIHRoZSBsYXlvdXQgY29tcGFjdC4gVGhpcyBpbXByb3ZlcyB0aGUKICAgICAgICogYXBwZWFyYW5jZSB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGxpbmUgb2YgdGV4dDsgc3RhbmRhcmQgTWFya2Rvd24KICAgICAgICogcmVuZGVyZXJzIHdpbGwgc3RpbGwgaW5jbHVkZSBhIFxgPHA+XGAgZWxlbWVudC4KICAgICAgICoKICAgICAgICogQnkgdGFyZ2V0aW5nIG9ubHkgdGhlIHRvcC1sZXZlbCwgZXh0cmVtYWwgZWxlbWVudHMsIHdlIHByZXNlcnZlIGFueQogICAgICAgKiBhY3R1YWwgcGFyYWdyYXBoIGJyZWFrcyBhbmQgb25seSBjaGFuZ2UgdGhlIHBhZGRpbmcgYWdhaW5zdCB0aGUKICAgICAgICogY29tcG9uZW50IGVkZ2VzLgogICAgICAgKi8KICAgICAgI21hcmtkb3duID4gcDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMC4zZW07CiAgICAgIH0KICAgICAgI21hcmtkb3duID4gcDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjNlbTsKICAgICAgfQoKICAgICAgLyogUGxlYXNhbnQgc3R5bGVzIGZvciBNYXJrZG93biB0YWJsZXMuICovCiAgICAgICNtYXJrZG93biB0YWJsZSB7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgfQogICAgICAjbWFya2Rvd24gdGFibGUgdGggewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRoLAogICAgICAjbWFya2Rvd24gdGFibGUgdGQgewogICAgICAgIHBhZGRpbmc6IDZweCAxM3B4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXRiLXVpLWJvcmRlciwgI2RmZTJlNSk7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS10Yi11aS1ib3JkZXIsICNjNmNiZDEpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sJFIucHJvdG90eXBlLCJodG1sIix2b2lkIDApLHQoW3MoImh0bWwiKSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSwkUi5wcm90b3R5cGUsInNhbml0aXplZEh0bWwiLG51bGwpLCRSPXQoW2koInRmLW1hcmtkb3duLXZpZXciKV0sJFIpLGVsKHttb2R1bGVOYW1lOiJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiLHN0eWxlQ29udGVudDoiXG4gICAgZmlnY2FwdGlvbiB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAvKiogSG9yaXpvbnRhbCBsaW5lIG9mIGxhYmVscy4gKi9cbiAgICAuaGVhZGluZy1yb3cge1xuICAgICAgbWFyZ2luLXRvcDogLTRweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIH1cblxuICAgIC8qKiBQaWVjZSBvZiB0ZXh0IGluIHRoZSBmaWd1cmUgY2FwdGlvbi4gKi9cbiAgICAuaGVhZGluZy1sYWJlbCB7XG4gICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICBtYXJnaW4tdG9wOiA0cHg7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgfVxuXG4gICAgLyoqIE1ha2VzIGxhYmVsIHNob3cgb24gdGhlIHJpZ2h0LiAqL1xuICAgIC5oZWFkaW5nLXJpZ2h0IHtcbiAgICAgIGZsZXgtZ3JvdzogMDtcbiAgICB9XG4gICJ9KTtsZXQgWlI9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNwbGF5TmFtZT1udWxsLHRoaXMudGFnPW51bGwsdGhpcy5ydW49bnVsbCx0aGlzLmRlc2NyaXB0aW9uPW51bGwsdGhpcy5jb2xvcj1udWxsfV91cGRhdGVIZWFkaW5nU3R5bGUoKXt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGYtY2FyZC1oZWFkaW5nLWJhY2tncm91bmQtY29sb3IiOnRoaXMuX3J1bkJhY2tncm91bmQsIi0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yIjp0aGlzLl9ydW5Db2xvcn0pfV9jb21wdXRlUnVuQmFja2dyb3VuZCh0KXtyZXR1cm4gdHx8Im5vbmUifV9jb21wdXRlUnVuQ29sb3IodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7Y29uc3QgZT0oZnVuY3Rpb24gbih0KXtpZighdClyZXR1cm4gbnVsbDtsZXQgZT10Lm1hdGNoKC9eIyhbMC05YS1mXXsxLDJ9KShbMC05YS1mXXsxLDJ9KShbMC05YS1mXXsxLDJ9KSQvKTtpZighZSlyZXR1cm4gbnVsbDtpZig0PT10Lmxlbmd0aClmb3IodmFyIG49MTtuPD0zO24rKyllW25dPWVbbl0rZVtuXTtyZXR1cm5bcGFyc2VJbnQoZVsxXSwxNikscGFyc2VJbnQoZVsyXSwxNikscGFyc2VJbnQoZVszXSwxNildfSkodCk7cmV0dXJuIGU/TWF0aC5yb3VuZCgoMjk5KmVbMF0rNTg3KmVbMV0rMTE0KmVbMl0pLzFlMyk+MTI1PyJpbmhlcml0IjoiI2VlZSI6ImluaGVyaXQifSkodCl9Z2V0IF9uYW1lTGFiZWwoKXtyZXR1cm4gdGhpcy5kaXNwbGF5TmFtZXx8dGhpcy50YWd8fCIifWdldCBfdGFnTGFiZWwoKXt2YXIgdD10aGlzLnRhZztyZXR1cm4gdCYmdCE9PXRoaXMuZGlzcGxheU5hbWU/dDoiIn1fdG9nZ2xlRGVzY3JpcHRpb25EaWFsb2codCl7Y29uc3QgZT10aGlzLiQuZGVzY3JpcHRpb25EaWFsb2c7ZS5wb3NpdGlvblRhcmdldD10LnRhcmdldCxlLnRvZ2dsZSgpfX07WlIudGVtcGxhdGU9X2VgCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZmlnY2FwdGlvbiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19uYW1lTGFiZWxdXSI+CiAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9Im5hbWUiIGNsYXNzPSJoZWFkaW5nLWxhYmVsIG5hbWUiPltbX25hbWVMYWJlbF1dPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3J1bl1dIj4KICAgICAgICAgICAgPCEtLSBFeHRyYSB3cmFwcGluZyBzcGFuIG5lZWRlZCB0byBhdm9pZCBmbGV4Ym94IGJsb2NraWZpY2F0aW9uLiAtLT4KICAgICAgICAgICAgPCEtLSAoc2VlIGZsZXhib3ggc3BlYywgc2VjdGlvbiA0ICJGbGV4IEl0ZW1zIikgLS0+CiAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICBpdGVtcHJvcD0icnVuIgogICAgICAgICAgICAgICAgaWQ9ImhlYWRpbmctcnVuIgogICAgICAgICAgICAgICAgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCBydW4iCiAgICAgICAgICAgICAgICA+W1tydW5dXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0xhYmVsXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgICB0YWc6IDxzcGFuIGl0ZW1wcm9wPSJ0YWciPltbX3RhZ0xhYmVsXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZmlnY2FwdGlvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Rlc2NyaXB0aW9uXV0iPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iaW5mbyIKICAgICAgICAgIG9uLXRhcD0iX3RvZ2dsZURlc2NyaXB0aW9uRGlhbG9nIgogICAgICAgICAgdGl0bGU9IlNob3cgc3VtbWFyeSBkZXNjcmlwdGlvbiIKICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWRpYWxvZwogICAgICAgIGlkPSJkZXNjcmlwdGlvbkRpYWxvZyIKICAgICAgICBuby1vdmVybGFwPSIiCiAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIKICAgICAgICB2ZXJ0aWNhbC1hbGlnbj0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZT4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbZGVzY3JpcHRpb25dXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItZGlhbG9nLXNjcm9sbGFibGU+CiAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAubmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5ydW4gewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgcGFkZGluZzogMXB4IDRweCAycHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICBwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSB7CiAgICAgICAgbWF4LXdpZHRoOiA2NDBweDsKICAgICAgfQogICAgICAjaGVhZGluZy1ydW4gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRmLWNhcmQtaGVhZGluZy1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBjb2xvcjogdmFyKC0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFpSLnByb3RvdHlwZSwiZGlzcGxheU5hbWUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWlIucHJvdG90eXBlLCJ0YWciLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWlIucHJvdG90eXBlLCJydW4iLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWlIucHJvdG90eXBlLCJkZXNjcmlwdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxaUi5wcm90b3R5cGUsImNvbG9yIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkJhY2tncm91bmQoY29sb3IpIixyZWFkT25seTohMCxvYnNlcnZlcjoiX3VwZGF0ZUhlYWRpbmdTdHlsZSJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWlIucHJvdG90eXBlLCJfcnVuQmFja2dyb3VuZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSdW5Db2xvcihjb2xvcikiLHJlYWRPbmx5OiEwLG9ic2VydmVyOiJfdXBkYXRlSGVhZGluZ1N0eWxlIn0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxaUi5wcm90b3R5cGUsIl9ydW5Db2xvciIsdm9pZCAwKSx0KFtzKCJkaXNwbGF5TmFtZSIsInRhZyIpLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFpSLnByb3RvdHlwZSwiX25hbWVMYWJlbCIsbnVsbCksdChbcygiZGlzcGxheU5hbWUiLCJ0YWciKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxaUi5wcm90b3R5cGUsIl90YWdMYWJlbCIsbnVsbCksWlI9dChbaSgidGYtY2FyZC1oZWFkaW5nIildLFpSKTtsZXQgSlI9Y2xhc3MgZXh0ZW5kcyhlcih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9tZXRhZGF0YUNhbmNlbGxlcj1uZXcgWFIsdGhpcy5fc3RlcHM9W10sdGhpcy5fYXR0YWNoZWQ9ITF9Z2V0IF9ydW5Db2xvcigpe3JldHVybiBHUih0aGlzLnJ1bil9Z2V0IF9oYXNBdExlYXN0T25lU3RlcCgpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiEhdCYmdC5sZW5ndGg+MH1nZXQgX2hhc011bHRpcGxlU3RlcHMoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjF9Z2V0IF9tYXhTdGVwSW5kZXgoKXtyZXR1cm4gdGhpcy5fc3RlcHMubGVuZ3RoLTF9Z2V0IF9jdXJyZW50RGF0dW0oKXtyZXR1cm4gdGhpcy5fc3RlcHNbdGhpcy5fc3RlcEluZGV4XX1nZXQgX3NhbXBsZVRleHQoKXtyZXR1cm5gJHt0aGlzLnNhbXBsZSsxfWB9Z2V0IF9oYXNNdWx0aXBsZVNhbXBsZXMoKXtyZXR1cm4gdGhpcy50b3RhbFNhbXBsZXM+MX1hdHRhY2hlZCgpe3RoaXMuX2F0dGFjaGVkPSEwLHRoaXMucmVsb2FkKCl9X3JlbG9hZE9uUnVuVGFnQ2hhbmdlKCl7dGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtpZighdGhpcy5fYXR0YWNoZWQpcmV0dXJuO3RoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbEFsbCgpO2NvbnN0IHQ9X3IoKS5wbHVnaW5Sb3V0ZSgiYXVkaW8iLCIvYXVkaW8iLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzp0aGlzLnRhZyxydW46dGhpcy5ydW4sc2FtcGxlOlN0cmluZyh0aGlzLnNhbXBsZSl9KSksZT10aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxsYWJsZSgodD0+e2lmKHQuY2FuY2VsbGVkKXJldHVybjtjb25zdCBlPXQudmFsdWUubWFwKHRoaXMuX2NyZWF0ZVN0ZXBEYXR1bS5iaW5kKHRoaXMpKTt0aGlzLnNldCgiX3N0ZXBzIixlKSx0aGlzLnNldCgiX3N0ZXBJbmRleCIsZS5sZW5ndGgtMSl9KSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4oZSl9X2NyZWF0ZVN0ZXBEYXR1bSh0KXtjb25zdCBlPW5ldyBVUkxTZWFyY2hQYXJhbXModC5xdWVyeSk7ZS5hcHBlbmQoInRzIixTdHJpbmcodC53YWxsX3RpbWUpKTtjb25zdCBuPV9yKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL2luZGl2aWR1YWxBdWRpbyIsZSk7cmV0dXJue3dhbGxfdGltZTpLUihuZXcgRGF0ZSgxZTMqdC53YWxsX3RpbWUpKSxzdGVwOnQuc3RlcCxsYWJlbDp0LmxhYmVsLGNvbnRlbnRUeXBlOnQuY29udGVudFR5cGUsdXJsOm59fX07SlIudGVtcGxhdGU9X2VgCiAgICA8dGYtY2FyZC1oZWFkaW5nCiAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgcnVuPSJbW3J1bl1dIgogICAgICBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIKICAgICAgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIKICAgICAgY29sb3I9IltbX3J1bkNvbG9yXV0iCiAgICA+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVTYW1wbGVzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwiPgogICAgICAgICAgICBzYW1wbGU6IFtbX3NhbXBsZVRleHRdXSBvZiBbW3RvdGFsU2FtcGxlc11dCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcCA8c3Ryb25nPltbX2N1cnJlbnREYXR1bS5zdGVwXV08L3N0cm9uZz4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19jdXJyZW50RGF0dW0ud2FsbF90aW1lXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQiPgogICAgICAgICAgICAgIFtbX2N1cnJlbnREYXR1bS53YWxsX3RpbWVdXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVTdGVwc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgIGlkPSJzdGVwcyIKICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgICAgbWF4PSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcz0iIgogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXBdXSI+CiAgICAgIDxhdWRpbwogICAgICAgIGNvbnRyb2xzPSIiCiAgICAgICAgc3JjJD0iW1tfY3VycmVudERhdHVtLnVybF1dIgogICAgICAgIHR5cGUkPSJbW19jdXJyZW50RGF0dW0uY29udGVudFR5cGVdXSIKICAgICAgPjwvYXVkaW8+CiAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbX2N1cnJlbnREYXR1bS5sYWJlbF1dIj48L3RmLW1hcmtkb3duLXZpZXc+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBpZD0ibWFpbi1hdWRpby1jb250YWluZXIiPjwvZGl2PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDM1MHB4OwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yOiAjNDI0MjQyOwogICAgICAgIG1hcmdpbi1yaWdodDogMTVweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAjc3RlcHMgewogICAgICAgIGhlaWdodDogMTVweDsKICAgICAgICBtYXJnaW46IDAgMCAwIC0xNXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgcGFkZGluZzogMCA1cHg7IC8qIHNvIHRoZSBzbGlkZXIga25vYiBkb2Vzbid0IGJ1dHQgb3V0ICovCiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLEpSLnByb3RvdHlwZSwicnVuIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLEpSLnByb3RvdHlwZSwidGFnIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEpSLnByb3RvdHlwZSwic2FtcGxlIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEpSLnByb3RvdHlwZSwidG90YWxTYW1wbGVzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEpSLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsZHIpXSxKUi5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLFhSKV0sSlIucHJvdG90eXBlLCJfbWV0YWRhdGFDYW5jZWxsZXIiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLEpSLnByb3RvdHlwZSwiX3N0ZXBzIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEpSLnByb3RvdHlwZSwiX3N0ZXBJbmRleCIsdm9pZCAwKSx0KFtzKCJydW4iKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxKUi5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCksdChbcygiX3N0ZXBzIiksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEpSLnByb3RvdHlwZSwiX2hhc0F0TGVhc3RPbmVTdGVwIixudWxsKSx0KFtzKCJfc3RlcHMiKSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSlIucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTdGVwcyIsbnVsbCksdChbcygiX3N0ZXBzIiksZSgiZGVzaWduOnR5cGUiLE51bWJlciksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSlIucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKSx0KFtzKCJfc3RlcHMiLCJfc3RlcEluZGV4IiksZSgiZGVzaWduOnR5cGUiLE9iamVjdCksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSlIucHJvdG90eXBlLCJfY3VycmVudERhdHVtIixudWxsKSx0KFtzKCJzYW1wbGUiKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxKUi5wcm90b3R5cGUsIl9zYW1wbGVUZXh0IixudWxsKSx0KFtzKCJ0b3RhbFNhbXBsZXMiKSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSlIucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTYW1wbGVzIixudWxsKSx0KFthKCJydW4iLCJ0YWciKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEpSLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnQ2hhbmdlIixudWxsKSxKUj10KFtpKCJ0Zi1hdWRpby1sb2FkZXIiKV0sSlIpO2xldCBRUj1jbGFzcyBleHRlbmRzKGVyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl90YWdGaWx0ZXI9IiIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IGRyfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKCk9Pnt0aGlzLl9yZWxvYWRBdWRpbygpfSkpfV9mZXRjaFRhZ3MoKXtjb25zdCB0PV9yKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57aWYoU2UuZXhwb3J0cy5pc0VxdWFsKHQsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47Y29uc3QgZT1hcihTZS5leHBvcnRzLm1hcFZhbHVlcyh0LCh0PT5PYmplY3Qua2V5cyh0KSkpKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PWUubGVuZ3RoKSx0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsdCl9KSl9X3JlbG9hZEF1ZGlvKCl7dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWF1ZGlvLWxvYWRlciIpLmZvckVhY2goKHQ9Pnt0LnJlbG9hZCgpfSkpfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnSW5mbyxlPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcjtmdW5jdGlvbiBpKGUpe2NvbnN0IG49dFtlLnJ1bl1bZS50YWddLnNhbXBsZXM7cmV0dXJuIFNlLmV4cG9ydHMucmFuZ2UobikubWFwKCh0PT5PYmplY3QuYXNzaWduKHt9LGUse3NhbXBsZTp0LHRvdGFsU2FtcGxlczpufSkpKX1yZXR1cm4gTXIoU2UuZXhwb3J0cy5tYXBWYWx1ZXModCwodD0+T2JqZWN0LmtleXModCkpKSxlLG4pLm1hcCgodD0+T2JqZWN0LmFzc2lnbih7fSx0LHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sdC5pdGVtcy5tYXAoaSkpfSkpKX1fdGFnTWV0YWRhdGEodCxlLG4pe3JldHVybiB0W2VdW25dfX07UVIudGVtcGxhdGU9X2VgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3IKICAgICAgICAgICAgaWQ9InJ1bnMtc2VsZWN0b3IiCiAgICAgICAgICAgIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319IgogICAgICAgICAgPjwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBhdWRpbyBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgYXVkaW8gZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLWF1ZGlvLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgc2FtcGxlPSJbW2l0ZW0uc2FtcGxlXV0iCiAgICAgICAgICAgICAgICAgIHRvdGFsLXNhbXBsZXM9IltbaXRlbS50b3RhbFNhbXBsZXNdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgID48L3RmLWF1ZGlvLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxRUi5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFFSLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRUi5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxRUi5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUVIucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGRyKV0sUVIucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbcygiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiksZSgiZGVzaWduOnR5cGUiLEFycmF5KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxRUi5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKSxRUj10KFtpKCJ0Zi1hdWRpby1kYXNoYm9hcmQiKV0sUVIpO2xldCB0Tz1jbGFzcyBleHRlbmRzKGVyKHllKSl7YXR0YWNoZWQoKXt0aGlzLmFzeW5jKChmdW5jdGlvbigpe3RoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMubGlzdGVuKHQsInRhcCIsIl9zZWxlY3RUYXJnZXQiKX0uYmluZCh0aGlzKSl9KSl9X3NlbGVjdFRhcmdldCh0KXt0aGlzLnNlbGVjdGVkSWQ9dC5jdXJyZW50VGFyZ2V0LmlkfV9zZWxlY3RlZElkQ2hhbmdlZCgpe3ZhciB0PXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiIyIrdGhpcy5zZWxlY3RlZElkKTt0JiYodGhpcy5nZXRFZmZlY3RpdmVDaGlsZHJlbigpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKX0pKSx0LmNsYXNzTGlzdC5hZGQoInNlbGVjdGVkIikpfX07ZnVuY3Rpb24gZU8odCxlKXtsZXQgbjtjb25zdCBpPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChlPT57Y29uc3Qgcj10W2VdO3ZvaWQgMD09PW4mJihuPXIuZGlzcGxheU5hbWUpLG4hPT1yLmRpc3BsYXlOYW1lJiYobj1udWxsKSx2b2lkIDA9PT1pW3IuZGVzY3JpcHRpb25dJiYoaVtyLmRlc2NyaXB0aW9uXT1bXSksaVtyLmRlc2NyaXB0aW9uXS5wdXNoKGUpfSkpLHtkaXNwbGF5TmFtZTpudWxsIT1uP246ZSxkZXNjcmlwdGlvbjooKCk9Pntjb25zdCB0PU9iamVjdC5rZXlzKGkpO3JldHVybiAwPT09dC5sZW5ndGg/IiI6MT09PXQubGVuZ3RoP3RbMF06YDxwPjxzdHJvbmc+TXVsdGlwbGUgZGVzY3JpcHRpb25zOjwvc3Ryb25nPjwvcD48dWw+JHt0Lm1hcCgodD0+e2NvbnN0IGU9aVt0XS5tYXAoKHQ9PmA8Y29kZT4ke3QucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvJi9nLCImYW1wOyIpfTwvY29kZT5gKSksbj1lLmxlbmd0aD4yP2Uuc2xpY2UoMCxlLmxlbmd0aC0xKS5qb2luKCIsICIpKyIsIGFuZCAiK2VbZS5sZW5ndGgtMV06ZS5qb2luKCIgYW5kICIpO3JldHVybmA8bGk+PHA+Rm9yICR7KGZ1bmN0aW9uIHIodCxlLG4pe3JldHVybiAxPT09dD9lOm59KShlLmxlbmd0aCwicnVuIiwicnVucyIpfSAke259OjwvcD4ke3R9PC9saT5gfSkpLmpvaW4oIiIpfTwvdWw+YH0pKCl9fXRPLnRlbXBsYXRlPV9lYAogICAgPGRpdiBpZD0id3JhcCI+CiAgICAgIDxoMz5bW25hbWVdXTwvaDM+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtd3JhcHBlciI+PHNsb3Q+PC9zbG90PjwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKC5zZWxlY3RlZCkgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdE8ucHJvdG90eXBlLCJuYW1lIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX3NlbGVjdGVkSWRDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0Ty5wcm90b3R5cGUsInNlbGVjdGVkSWQiLHZvaWQgMCksdE89dChbaSgidGYtb3B0aW9uLXNlbGVjdG9yIildLHRPKTtsZXQgbk89Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy53ZWlnaHQ9LjYsdGhpcy5fdXBkYXRlV2VpZ2h0PVNlLmV4cG9ydHMuZGVib3VuY2UoKGZ1bmN0aW9uKHQpe3RoaXMud2VpZ2h0PXR9KSwyNTApfV9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlckNoYW5nZWQoKXt0aGlzLl9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQ9dGhpcy5faW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXIudG9TdHJpbmcoKSx0aGlzLl91cGRhdGVXZWlnaHQuY2FsbCh0aGlzLHRoaXMuX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyKX1faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0Q2hhbmdlZCgpeyt0aGlzLl9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQ8MD90aGlzLl9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQ9IjAiOit0aGlzLl9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQ+MSYmKHRoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD0iMSIpO3ZhciB0PSt0aGlzLl9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQ7aXNOYU4odCl8fHRoaXMuX3VwZGF0ZVdlaWdodC5jYWxsKHRoaXMsdCl9fTtmdW5jdGlvbiBpTyh0LGUpe2NvbnN0IG49T2JqZWN0LmtleXMoZSkuc29ydCgpLmZpbHRlcigodD0+dm9pZCAwIT09ZVt0XSkpO2lmKCFuLmxlbmd0aClyZXR1cm4gdDtjb25zdCBpPS0xIT09dC5pbmRleE9mKCI/Iik/IiYiOiI/IjtyZXR1cm4gdCtpK1tdLmNvbmNhdCguLi5uLm1hcCgodD0+e2NvbnN0IG49ZVt0XTtyZXR1cm4oQXJyYXkuaXNBcnJheShuKT9uOltuXSkubWFwKChlPT5gJHt0fT0keyhmdW5jdGlvbiBuKHQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQodCkucmVwbGFjZSgvXCgvZywiJTI4IikucmVwbGFjZSgvXCkvZywiJTI5Iil9KShlKX1gKSl9KSkpLmpvaW4oIiYiKX1uTy50ZW1wbGF0ZT1fZWAKICAgIDxoMyBjbGFzcz0idGl0bGUiPlNtb290aGluZzwvaDM+CiAgICA8ZGl2IGNsYXNzPSJzbW9vdGhpbmctYmxvY2siPgogICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgaWQ9InNsaWRlciIKICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyfX0iCiAgICAgICAgbWF4PSJbW21heF1dIgogICAgICAgIG1pbj0iW1ttaW5dXSIKICAgICAgICBwaW4KICAgICAgICBzdGVwPSJbW3N0ZXBdXSIKICAgICAgICB0eXBlPSJudW1iZXIiCiAgICAgICAgdmFsdWU9Int7d2VpZ2h0fX0iCiAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgaWQ9ImlucHV0IgogICAgICAgIGxhYmVsPSJ3ZWlnaHQiCiAgICAgICAgbm8tbGFiZWwtZmxvYXQKICAgICAgICB2YWx1ZT0ie3tfaW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0fX0iCiAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgIHN0ZXA9Iltbc3RlcF1dIgogICAgICAgIG1pbj0iW1ttaW5dXSIKICAgICAgICBtYXg9IltbbWF4XV0iCiAgICAgID48L3BhcGVyLWlucHV0PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC50aXRsZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAuc21vb3RoaW5nLWJsb2NrIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLW1hcmtlcnMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICBmbGV4LWdyb3c6IDI7CiAgICAgIH0KCiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxuTy5wcm90b3R5cGUsInN0ZXAiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sbk8ucHJvdG90eXBlLCJtYXgiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sbk8ucHJvdG90eXBlLCJtaW4iLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLG5PLnByb3RvdHlwZSwid2VpZ2h0Iix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLG5vdGlmeTohMCxvYnNlcnZlcjoiX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyQ2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sbk8ucHJvdG90eXBlLCJfaW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXIiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwLG9ic2VydmVyOiJfaW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0Q2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbk8ucHJvdG90eXBlLCJfaW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0Iix2b2lkIDApLG5PPXQoW2koInRmLXNtb290aGluZy1pbnB1dCIpXSxuTyk7dmFyIHJPPXt9LG9PPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9fHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W25dPWVbbl0pfSxhTz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbiB0KGUpe2Zvcih2YXIgbixpPTEscj1hcmd1bWVudHMubGVuZ3RoO2k8cjtpKyspZm9yKHZhciBvIGluIG49YXJndW1lbnRzW2ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLG8pJiYoZVtvXT1uW29dKTtyZXR1cm4gZX07Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlCiAgICB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZQogICAgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiAgICBUSElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCiAgICBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVECiAgICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLAogICAgTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC4KCiAgICBTZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMKICAgIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovZnVuY3Rpb24gc08odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdLG49MDtyZXR1cm4gZT9lLmNhbGwodCk6e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCYmbj49dC5sZW5ndGgmJih0PXZvaWQgMCkse3ZhbHVlOnQmJnRbbisrXSxkb25lOiF0fX19fWZ1bmN0aW9uIGxPKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiB0O3ZhciBpLHIsbz1uLmNhbGwodCksYT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09ZXx8ZS0tID4wKSYmIShpPW8ubmV4dCgpKS5kb25lOylhLnB1c2goaS52YWx1ZSl9Y2F0Y2godCl7cj17ZXJyb3I6dH19ZmluYWxseXt0cnl7aSYmIWkuZG9uZSYmKG49by5yZXR1cm4pJiZuLmNhbGwobyl9ZmluYWxseXtpZihyKXRocm93IHIuZXJyb3J9fXJldHVybiBhfWZ1bmN0aW9uIGNPKHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgY08/KHRoaXMudj10LHRoaXMpOm5ldyBjTyh0KX12YXIgdU89YmUoT2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsX19leHRlbmRzOmZ1bmN0aW9uIGhPKHQsZSl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH1vTyh0LGUpLHQucHJvdG90eXBlPW51bGw9PT1lP09iamVjdC5jcmVhdGUoZSk6KG4ucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyBuKX0sX19hc3NpZ246YU8sX19yZXN0OmZ1bmN0aW9uIGRPKHQsZSl7dmFyIG49e307Zm9yKHZhciBpIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsaSkmJmUuaW5kZXhPZihpKTwwJiYobltpXT10W2ldKTtpZihudWxsIT10JiYiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9MDtmb3IoaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO3I8aS5sZW5ndGg7cisrKWUuaW5kZXhPZihpW3JdKTwwJiYobltpW3JdXT10W2lbcl1dKX1yZXR1cm4gbn0sX19kZWNvcmF0ZTpmdW5jdGlvbiBwTyh0LGUsbixpKXt2YXIgcixvPWFyZ3VtZW50cy5sZW5ndGgsYT1vPDM/ZTpudWxsPT09aT9pPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKTppO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpYT1SZWZsZWN0LmRlY29yYXRlKHQsZSxuLGkpO2Vsc2UgZm9yKHZhciBzPXQubGVuZ3RoLTE7cz49MDtzLS0pKHI9dFtzXSkmJihhPShvPDM/cihhKTpvPjM/cihlLG4sYSk6cihlLG4pKXx8YSk7cmV0dXJuIG8+MyYmYSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixhKSxhfSxfX3BhcmFtOmZ1bmN0aW9uIGZPKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7ZShuLGksdCl9fSxfX21ldGFkYXRhOmZ1bmN0aW9uIG1PKHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSlyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YSh0LGUpfSxfX2F3YWl0ZXI6ZnVuY3Rpb24gZ08odCxlLG4saSl7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKHIsbyl7ZnVuY3Rpb24gYSh0KXt0cnl7bChpLm5leHQodCkpfWNhdGNoKHQpe28odCl9fWZ1bmN0aW9uIHModCl7dHJ5e2woaS50aHJvdyh0KSl9Y2F0Y2godCl7byh0KX19ZnVuY3Rpb24gbCh0KXt0LmRvbmU/cih0LnZhbHVlKTpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0LnZhbHVlKX0pKS50aGVuKGEscyl9bCgoaT1pLmFwcGx5KHQsZXx8W10pKS5uZXh0KCkpfSkpfSxfX2dlbmVyYXRvcjpmdW5jdGlvbiBfTyh0LGUpe3ZhciBuLGkscixvLGE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmclswXSl0aHJvdyByWzFdO3JldHVybiByWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIG89e25leHQ6cygwKSx0aHJvdzpzKDEpLHJldHVybjpzKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYob1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxvO2Z1bmN0aW9uIHMobyl7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybihmdW5jdGlvbiBsKG8pe2lmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7YTspdHJ5e2lmKG49MSxpJiYocj1pWzImb1swXT8icmV0dXJuIjpvWzBdPyJ0aHJvdyI6Im5leHQiXSkmJiEocj1yLmNhbGwoaSxvWzFdKSkuZG9uZSlyZXR1cm4gcjtzd2l0Y2goaT0wLHImJihvPVswLHIudmFsdWVdKSxvWzBdKXtjYXNlIDA6Y2FzZSAxOnI9bzticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6b1sxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLGk9b1sxXSxvPVswXTtjb250aW51ZTtjYXNlIDc6bz1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChyPShyPWEudHJ5cykubGVuZ3RoPjAmJnJbci5sZW5ndGgtMV0pfHw2IT09b1swXSYmMiE9PW9bMF0pKXthPTA7Y29udGludWV9aWYoMz09PW9bMF0mJighcnx8b1sxXT5yWzBdJiZvWzFdPHJbM10pKXthLmxhYmVsPW9bMV07YnJlYWt9aWYoNj09PW9bMF0mJmEubGFiZWw8clsxXSl7YS5sYWJlbD1yWzFdLHI9bzticmVha31pZihyJiZhLmxhYmVsPHJbMl0pe2EubGFiZWw9clsyXSxhLm9wcy5wdXNoKG8pO2JyZWFrfXJbMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1vPWUuY2FsbCh0LGEpfWNhdGNoKHQpe289WzYsdF0saT0wfWZpbmFsbHl7bj1yPTB9aWYoNSZvWzBdKXRocm93IG9bMV07cmV0dXJue3ZhbHVlOm9bMF0/b1sxXTp2b2lkIDAsZG9uZTohMH19KShbbyxzXSl9fX0sX19leHBvcnRTdGFyOmZ1bmN0aW9uIHlPKHQsZSl7Zm9yKHZhciBuIGluIHQpZS5oYXNPd25Qcm9wZXJ0eShuKXx8KGVbbl09dFtuXSl9LF9fdmFsdWVzOnNPLF9fcmVhZDpsTyxfX3NwcmVhZDpmdW5jdGlvbiB2Tygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0PXQuY29uY2F0KGxPKGFyZ3VtZW50c1tlXSkpO3JldHVybiB0fSxfX2F3YWl0OmNPLF9fYXN5bmNHZW5lcmF0b3I6ZnVuY3Rpb24gYk8odCxlLG4pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgaSxyPW4uYXBwbHkodCxlfHxbXSksbz1bXTtyZXR1cm4gaT17fSxhKCJuZXh0IiksYSgidGhyb3ciKSxhKCJyZXR1cm4iKSxpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxpO2Z1bmN0aW9uIGEodCl7clt0XSYmKGlbdF09ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe28ucHVzaChbdCxlLG4saV0pPjF8fHModCxlKX0pKX0pfWZ1bmN0aW9uIHModCxlKXt0cnl7IShmdW5jdGlvbiBuKHQpe3QudmFsdWUgaW5zdGFuY2VvZiBjTz9Qcm9taXNlLnJlc29sdmUodC52YWx1ZS52KS50aGVuKGwsYyk6dShvWzBdWzJdLHQpfSkoclt0XShlKSl9Y2F0Y2godCl7dShvWzBdWzNdLHQpfX1mdW5jdGlvbiBsKHQpe3MoIm5leHQiLHQpfWZ1bmN0aW9uIGModCl7cygidGhyb3ciLHQpfWZ1bmN0aW9uIHUodCxlKXt0KGUpLG8uc2hpZnQoKSxvLmxlbmd0aCYmcyhvWzBdWzBdLG9bMF1bMV0pfX0sX19hc3luY0RlbGVnYXRvcjpmdW5jdGlvbiB4Tyh0KXt2YXIgZSxuO3JldHVybiBlPXt9LGkoIm5leHQiKSxpKCJ0aHJvdyIsKGZ1bmN0aW9uKHQpe3Rocm93IHR9KSksaSgicmV0dXJuIiksZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGU7ZnVuY3Rpb24gaShpLHIpe3RbaV0mJihlW2ldPWZ1bmN0aW9uKGUpe3JldHVybihuPSFuKT97dmFsdWU6Y08odFtpXShlKSksZG9uZToicmV0dXJuIj09PWl9OnI/cihlKTplfSl9fSxfX2FzeW5jVmFsdWVzOmZ1bmN0aW9uIHdPKHQpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgZT10W1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gZT9lLmNhbGwodCk6c08odCl9LF9fbWFrZVRlbXBsYXRlT2JqZWN0OmZ1bmN0aW9uIFNPKHQsZSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmF3Iix7dmFsdWU6ZX0pOnQucmF3PWUsdH19KSk7ZnVuY3Rpb24gTU8odCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gRU8odCl7cmV0dXJuIDE9PT10Lmxlbmd0aCYmKHQ9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIE1PKHQoZSksbil9fSkodCkpLHtsZWZ0OmZ1bmN0aW9uKGUsbixpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj1lLmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTt0KGVbb10sbik8MD9pPW8rMTpyPW99cmV0dXJuIGl9LHJpZ2h0OmZ1bmN0aW9uKGUsbixpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj1lLmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTt0KGVbb10sbik+MD9yPW86aT1vKzF9cmV0dXJuIGl9fX12YXIgVE89RU8oTU8pLENPPVRPLnJpZ2h0LEFPPVRPLmxlZnQ7ZnVuY3Rpb24ga08odCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBMTyh0KXtyZXR1cm4gbnVsbD09PXQ/TmFOOit0fWZ1bmN0aW9uIFBPKHQsZSl7dmFyIG4saSxyPXQubGVuZ3RoLG89MCxhPS0xLHM9MCxsPTA7aWYobnVsbD09ZSlmb3IoOysrYTxyOylpc05hTihuPUxPKHRbYV0pKXx8KGwrPShpPW4tcykqKG4tKHMrPWkvKytvKSkpO2Vsc2UgZm9yKDsrK2E8cjspaXNOYU4obj1MTyhlKHRbYV0sYSx0KSkpfHwobCs9KGk9bi1zKSoobi0ocys9aS8rK28pKSk7aWYobz4xKXJldHVybiBsLyhvLTEpfWZ1bmN0aW9uIE5PKHQsZSl7dmFyIG49UE8odCxlKTtyZXR1cm4gbj9NYXRoLnNxcnQobik6bn1mdW5jdGlvbiBJTyh0LGUpe3ZhciBuLGkscixvPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8bzspaWYobnVsbCE9KG49dFthXSkmJm4+PW4pZm9yKGk9cj1uOysrYTxvOyludWxsIT0obj10W2FdKSYmKGk+biYmKGk9bikscjxuJiYocj1uKSl9ZWxzZSBmb3IoOysrYTxvOylpZihudWxsIT0obj1lKHRbYV0sYSx0KSkmJm4+PW4pZm9yKGk9cj1uOysrYTxvOyludWxsIT0obj1lKHRbYV0sYSx0KSkmJihpPm4mJihpPW4pLHI8biYmKHI9bikpO3JldHVybltpLHJdfXZhciBSTz1BcnJheS5wcm90b3R5cGUsT089Uk8uc2xpY2Usek89Uk8ubWFwO2Z1bmN0aW9uIERPKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBCTyh0KXtyZXR1cm4gdH1mdW5jdGlvbiBITyh0LGUsbil7dD0rdCxlPStlLG49KHI9YXJndW1lbnRzLmxlbmd0aCk8Mj8oZT10LHQ9MCwxKTpyPDM/MTorbjtmb3IodmFyIGk9LTEscj0wfE1hdGgubWF4KDAsTWF0aC5jZWlsKChlLXQpL24pKSxvPW5ldyBBcnJheShyKTsrK2k8cjspb1tpXT10K2kqbjtyZXR1cm4gb312YXIgRk89TWF0aC5zcXJ0KDUwKSxWTz1NYXRoLnNxcnQoMTApLFVPPU1hdGguc3FydCgyKTtmdW5jdGlvbiBqTyh0LGUsbil7dmFyIGk9KGUtdCkvTWF0aC5tYXgoMCxuKSxyPU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSxvPWkvTWF0aC5wb3coMTAscik7cmV0dXJuIHI+PTA/KG8+PUZPPzEwOm8+PVZPPzU6bz49VU8/MjoxKSpNYXRoLnBvdygxMCxyKTotTWF0aC5wb3coMTAsLXIpLyhvPj1GTz8xMDpvPj1WTz81Om8+PVVPPzI6MSl9ZnVuY3Rpb24gR08odCxlLG4pe3ZhciBpPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxuKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSksbz1pL3I7cmV0dXJuIG8+PUZPP3IqPTEwOm8+PVZPP3IqPTU6bz49VU8mJihyKj0yKSxlPHQ/LXI6cn1mdW5jdGlvbiBXTyh0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBxTyh0LGUsbil7aWYobnVsbD09biYmKG49TE8pLGk9dC5sZW5ndGgpe2lmKChlPStlKTw9MHx8aTwyKXJldHVybituKHRbMF0sMCx0KTtpZihlPj0xKXJldHVybituKHRbaS0xXSxpLTEsdCk7dmFyIGkscj0oaS0xKSplLG89TWF0aC5mbG9vcihyKSxhPStuKHRbb10sbyx0KTtyZXR1cm4gYSsoK24odFtvKzFdLG8rMSx0KS1hKSooci1vKX19ZnVuY3Rpb24gWU8odCxlKXt2YXIgbixpLHI9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1lKXtmb3IoOysrbzxyOylpZihudWxsIT0obj10W29dKSYmbj49bilmb3IoaT1uOysrbzxyOyludWxsIT0obj10W29dKSYmaT5uJiYoaT1uKX1lbHNlIGZvcig7KytvPHI7KWlmKG51bGwhPShuPWUodFtvXSxvLHQpKSYmbj49bilmb3IoaT1uOysrbzxyOyludWxsIT0obj1lKHRbb10sbyx0KSkmJmk+biYmKGk9bik7cmV0dXJuIGl9ZnVuY3Rpb24gWE8odCl7aWYoIShyPXQubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIGU9LTEsbj1ZTyh0LCRPKSxpPW5ldyBBcnJheShuKTsrK2U8bjspZm9yKHZhciByLG89LTEsYT1pW2VdPW5ldyBBcnJheShyKTsrK288cjspYVtvXT10W29dW2VdO3JldHVybiBpfWZ1bmN0aW9uICRPKHQpe3JldHVybiB0Lmxlbmd0aH12YXIgS089QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIFpPKHQpe3JldHVybiB0fXZhciBKTz0xZS02O2Z1bmN0aW9uIFFPKHQpe3JldHVybiJ0cmFuc2xhdGUoIisodCsuNSkrIiwwKSJ9ZnVuY3Rpb24gdHoodCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQrLjUpKyIpIn1mdW5jdGlvbiBleih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuK3QoZSl9fWZ1bmN0aW9uIG56KHQpe3ZhciBlPU1hdGgubWF4KDAsdC5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiB0LnJvdW5kKCkmJihlPU1hdGgucm91bmQoZSkpLGZ1bmN0aW9uKG4pe3JldHVybit0KG4pK2V9fWZ1bmN0aW9uIGl6KCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIHJ6KHQsZSl7dmFyIG49W10saT1udWxsLHI9bnVsbCxvPTYsYT02LHM9MyxsPTE9PT10fHw0PT09dD8tMToxLGM9ND09PXR8fDI9PT10PyJ4IjoieSIsdT0xPT09dHx8Mz09PXQ/UU86dHo7ZnVuY3Rpb24gaChoKXt2YXIgZD1udWxsPT1pP2UudGlja3M/ZS50aWNrcy5hcHBseShlLG4pOmUuZG9tYWluKCk6aSxwPW51bGw9PXI/ZS50aWNrRm9ybWF0P2UudGlja0Zvcm1hdC5hcHBseShlLG4pOlpPOnIsZj1NYXRoLm1heChvLDApK3MsbT1lLnJhbmdlKCksZz0rbVswXSsuNSxfPSttW20ubGVuZ3RoLTFdKy41LHk9KGUuYmFuZHdpZHRoP256OmV6KShlLmNvcHkoKSksdj1oLnNlbGVjdGlvbj9oLnNlbGVjdGlvbigpOmgsYj12LnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSx4PXYuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoZCxlKS5vcmRlcigpLHc9eC5leGl0KCksUz14LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksTT14LnNlbGVjdCgibGluZSIpLEU9eC5zZWxlY3QoInRleHQiKTtiPWIubWVyZ2UoYi5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCIjMDAwIikpLHg9eC5tZXJnZShTKSxNPU0ubWVyZ2UoUy5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwIikuYXR0cihjKyIyIixsKm8pKSxFPUUubWVyZ2UoUy5hcHBlbmQoInRleHQiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoYyxsKmYpLmF0dHIoImR5IiwxPT09dD8iMGVtIjozPT09dD8iMC43MWVtIjoiMC4zMmVtIikpLGghPT12JiYoYj1iLnRyYW5zaXRpb24oaCkseD14LnRyYW5zaXRpb24oaCksTT1NLnRyYW5zaXRpb24oaCksRT1FLnRyYW5zaXRpb24oaCksdz13LnRyYW5zaXRpb24oaCkuYXR0cigib3BhY2l0eSIsSk8pLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PXkodCkpP3UodCk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSkpLFMuYXR0cigib3BhY2l0eSIsSk8pLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIHUoZSYmaXNGaW5pdGUoZT1lKHQpKT9lOnkodCkpfSkpKSx3LnJlbW92ZSgpLGIuYXR0cigiZCIsND09PXR8fDI9PXQ/Ik0iK2wqYSsiLCIrZysiSDAuNVYiK18rIkgiK2wqYToiTSIrZysiLCIrbCphKyJWMC41SCIrXysiViIrbCphKSx4LmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiB1KHkodCkpfSkpLE0uYXR0cihjKyIyIixsKm8pLEUuYXR0cihjLGwqZikudGV4dChwKSx2LmZpbHRlcihpeikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsMj09PXQ/InN0YXJ0Ijo0PT09dD8iZW5kIjoibWlkZGxlIiksdi5lYWNoKChmdW5jdGlvbigpe3RoaXMuX19heGlzPXl9KSl9cmV0dXJuIGguc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxoKTplfSxoLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIG49S08uY2FsbChhcmd1bWVudHMpLGh9LGgudGlja0FyZ3VtZW50cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P1tdOktPLmNhbGwodCksaCk6bi5zbGljZSgpfSxoLnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09dD9udWxsOktPLmNhbGwodCksaCk6aSYmaS5zbGljZSgpfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxoKTpyfSxoLnRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWE9K3QsaCk6b30saC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGgpOm99LGgudGlja1NpemVPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxoKTphfSxoLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LGgpOnN9LGh9dmFyIG96PXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIGF6KCl7Zm9yKHZhciB0LGU9MCxuPWFyZ3VtZW50cy5sZW5ndGgsaT17fTtlPG47KytlKXtpZighKHQ9YXJndW1lbnRzW2VdKyIiKXx8dCBpbiBpfHwvW1xzLl0vLnRlc3QodCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7aVt0XT1bXX1yZXR1cm4gbmV3IHN6KGkpfWZ1bmN0aW9uIHN6KHQpe3RoaXMuXz10fWZ1bmN0aW9uIGx6KHQsZSl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIG49IiIsaT10LmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj10LnNsaWNlKGkrMSksdD10LnNsaWNlKDAsaSkpLHQmJiFlLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTpufX0pKX1mdW5jdGlvbiBjeih0LGUpe2Zvcih2YXIgbixpPTAscj10Lmxlbmd0aDtpPHI7KytpKWlmKChuPXRbaV0pLm5hbWU9PT1lKXJldHVybiBuLnZhbHVlfWZ1bmN0aW9uIHV6KHQsZSxuKXtmb3IodmFyIGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYodFtpXS5uYW1lPT09ZSl7dFtpXT1veix0PXQuc2xpY2UoMCxpKS5jb25jYXQodC5zbGljZShpKzEpKTticmVha31yZXR1cm4gbnVsbCE9biYmdC5wdXNoKHtuYW1lOmUsdmFsdWU6bn0pLHR9c3oucHJvdG90eXBlPWF6LnByb3RvdHlwZT17Y29uc3RydWN0b3I6c3osb246ZnVuY3Rpb24odCxlKXt2YXIgbixpPXRoaXMuXyxyPWx6KHQrIiIsaSksbz0tMSxhPXIubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KytvPGE7KWlmKG49KHQ9cltvXSkudHlwZSlpW25dPXV6KGlbbl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IobiBpbiBpKWlbbl09dXooaVtuXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK288YTspaWYoKG49KHQ9cltvXSkudHlwZSkmJihuPWN6KGlbbl0sdC5uYW1lKSkpcmV0dXJuIG59LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IHN6KHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKG49YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgbixpLHI9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXJbb109YXJndW1lbnRzW28rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3Iobz0wLG49KGk9dGhpcy5fW3RdKS5sZW5ndGg7bzxuOysrbylpW29dLnZhbHVlLmFwcGx5KGUscil9LGFwcGx5OmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgaT10aGlzLl9bdF0scj0wLG89aS5sZW5ndGg7cjxvOysrcilpW3JdLnZhbHVlLmFwcGx5KGUsbil9fTt2YXIgaHo9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGR6PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpoeix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIHB6KHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLGR6Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpkeltlXSxsb2NhbDp0fTp0fWZ1bmN0aW9uIGZ6KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxuPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBuPT09aHomJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PWh6P2UuY3JlYXRlRWxlbWVudCh0KTplLmNyZWF0ZUVsZW1lbnROUyhuLHQpfX1mdW5jdGlvbiBteih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBneih0KXt2YXIgZT1weih0KTtyZXR1cm4oZS5sb2NhbD9tejpmeikoZSl9ZnVuY3Rpb24gX3ooKXt9ZnVuY3Rpb24geXoodCl7cmV0dXJuIG51bGw9PXQ/X3o6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX1mdW5jdGlvbiB2eigpe3JldHVybltdfWZ1bmN0aW9uIGJ6KHQpe3JldHVybiBudWxsPT10P3Z6OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19ZnVuY3Rpb24geHoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19ZnVuY3Rpb24gd3oodCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gU3oodCxlKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPWV9ZnVuY3Rpb24gTXoodCxlLG4saSxyLG8pe2Zvcih2YXIgYSxzPTAsbD1lLmxlbmd0aCxjPW8ubGVuZ3RoO3M8YzsrK3MpKGE9ZVtzXSk/KGEuX19kYXRhX189b1tzXSxpW3NdPWEpOm5bc109bmV3IFN6KHQsb1tzXSk7Zm9yKDtzPGw7KytzKShhPWVbc10pJiYocltzXT1hKX1mdW5jdGlvbiBFeih0LGUsbixpLHIsbyxhKXt2YXIgcyxsLGMsdT17fSxoPWUubGVuZ3RoLGQ9by5sZW5ndGgscD1uZXcgQXJyYXkoaCk7Zm9yKHM9MDtzPGg7KytzKShsPWVbc10pJiYocFtzXT1jPSIkIithLmNhbGwobCxsLl9fZGF0YV9fLHMsZSksYyBpbiB1P3Jbc109bDp1W2NdPWwpO2ZvcihzPTA7czxkOysrcykobD11W2M9IiQiK2EuY2FsbCh0LG9bc10scyxvKV0pPyhpW3NdPWwsbC5fX2RhdGFfXz1vW3NdLHVbY109bnVsbCk6bltzXT1uZXcgU3oodCxvW3NdKTtmb3Iocz0wO3M8aDsrK3MpKGw9ZVtzXSkmJnVbcFtzXV09PT1sJiYocltzXT1sKX1mdW5jdGlvbiBUeih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBDeih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gQXoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBreih0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fWZ1bmN0aW9uIEx6KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIFB6KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX1mdW5jdGlvbiBOeih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX1mdW5jdGlvbiBJeih0KXtyZXR1cm4gdC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gUnoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gT3oodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX1mdW5jdGlvbiB6eih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09aT90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxpLG4pfX1mdW5jdGlvbiBEeih0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fEl6KHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIEJ6KHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBIeih0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gRnoodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09bn19ZnVuY3Rpb24gVnoodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFV6KHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IGp6KHQpfWZ1bmN0aW9uIGp6KHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1Weih0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIEd6KHQsZSl7Zm9yKHZhciBuPVV6KHQpLGk9LTEscj1lLmxlbmd0aDsrK2k8cjspbi5hZGQoZVtpXSl9ZnVuY3Rpb24gV3oodCxlKXtmb3IodmFyIG49VXoodCksaT0tMSxyPWUubGVuZ3RoOysraTxyOyluLnJlbW92ZShlW2ldKX1mdW5jdGlvbiBxeih0KXtyZXR1cm4gZnVuY3Rpb24oKXtHeih0aGlzLHQpfX1mdW5jdGlvbiBZeih0KXtyZXR1cm4gZnVuY3Rpb24oKXtXeih0aGlzLHQpfX1mdW5jdGlvbiBYeih0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9HejpXeikodGhpcyx0KX19ZnVuY3Rpb24gJHooKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIEt6KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gWnoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIEp6KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gUXoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH19ZnVuY3Rpb24gdEQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBlRCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBuRCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGlEKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gckQoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBvRCgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCExKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gYUQoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fVN6LnByb3RvdHlwZT17Y29uc3RydWN0b3I6U3osYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX0sanoucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgc0Q9e30sbEQ9bnVsbDtmdW5jdGlvbiBjRCh0LGUsbil7cmV0dXJuIHQ9dUQodCxlLG4pLGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVsYXRlZFRhcmdldDtuJiYobj09PXRoaXN8fDgmbi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiB1RCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPWxEO2xEPWk7dHJ5e3QuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxuKX1maW5hbGx5e2xEPXJ9fX1mdW5jdGlvbiBoRCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiBkRCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLGk9MCxyPS0xLG89ZS5sZW5ndGg7aTxvOysraSluPWVbaV0sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysrcl09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5jYXB0dXJlKTsrK3I/ZS5sZW5ndGg9cjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gcEQodCxlLG4pe3ZhciBpPXNELmhhc093blByb3BlcnR5KHQudHlwZSk/Y0Q6dUQ7cmV0dXJuIGZ1bmN0aW9uKHIsbyxhKXt2YXIgcyxsPXRoaXMuX19vbixjPWkoZSxvLGEpO2lmKGwpZm9yKHZhciB1PTAsaD1sLmxlbmd0aDt1PGg7Kyt1KWlmKChzPWxbdV0pLnR5cGU9PT10LnR5cGUmJnMubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyLHMuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyPWMscy5jYXB0dXJlPW4pLHZvaWQocy52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLGMsbikscz17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjpjLGNhcHR1cmU6bn0sbD9sLnB1c2gocyk6dGhpcy5fX29uPVtzXX19ZnVuY3Rpb24gZkQodCxlLG4pe3ZhciBpPUl6KHQpLHI9aS5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2Ygcj9yPW5ldyByKGUsbik6KHI9aS5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhyLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLHIuZGV0YWlsPW4uZGV0YWlsKTpyLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KHIpfWZ1bmN0aW9uIG1EKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGZEKHRoaXMsdCxlKX19ZnVuY3Rpb24gZ0QodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZkQodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoc0Q9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciBfRD1bbnVsbF07ZnVuY3Rpb24geUQodCxlKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWV9ZnVuY3Rpb24gdkQoKXtyZXR1cm4gbmV3IHlEKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sX0QpfWZ1bmN0aW9uIGJEKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgeUQoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyB5RChbW3RdXSxfRCl9ZnVuY3Rpb24geEQodCl7dmFyIGU9KGZ1bmN0aW9uIG4oKXtmb3IodmFyIHQsZT1sRDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX0pKCk7cmV0dXJuIGUuY2hhbmdlZFRvdWNoZXMmJihlPWUuY2hhbmdlZFRvdWNoZXNbMF0pLChmdW5jdGlvbiBpKHQsZSl7dmFyIG49dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYobi5jcmVhdGVTVkdQb2ludCl7dmFyIGk9bi5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBpLng9ZS5jbGllbnRYLGkueT1lLmNsaWVudFksWyhpPWkubWF0cml4VHJhbnNmb3JtKHQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxpLnldfXZhciByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2UuY2xpZW50WC1yLmxlZnQtdC5jbGllbnRMZWZ0LGUuY2xpZW50WS1yLnRvcC10LmNsaWVudFRvcF19KSh0LGUpfWZ1bmN0aW9uIHdEKCl7bEQucHJldmVudERlZmF1bHQoKSxsRC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBTRCh0KXt2YXIgZT10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPWJEKHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIsd0QsITApOyJvbnNlbGVjdHN0YXJ0ImluIGU/bi5vbigic2VsZWN0c3RhcnQuZHJhZyIsd0QsITApOihlLl9fbm9zZWxlY3Q9ZS5zdHlsZS5Nb3pVc2VyU2VsZWN0LGUuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIE1EKHQsZSl7dmFyIG49dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsaT1iRCh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO2UmJihpLm9uKCJjbGljay5kcmFnIix3RCwhMCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtpLm9uKCJjbGljay5kcmFnIixudWxsKX0pLDApKSwib25zZWxlY3RzdGFydCJpbiBuP2kub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihuLnN0eWxlLk1velVzZXJTZWxlY3Q9bi5fX25vc2VsZWN0LGRlbGV0ZSBuLl9fbm9zZWxlY3QpfWZ1bmN0aW9uIEVEKHQsZSxuKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1uLG4uY29uc3RydWN0b3I9dH1mdW5jdGlvbiBURCh0LGUpe3ZhciBuPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiBlKW5baV09ZVtpXTtyZXR1cm4gbn1mdW5jdGlvbiBDRCgpe315RC5wcm90b3R5cGU9dkQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5RCxzZWxlY3Q6ZnVuY3Rpb24gQUQodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXl6KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZm9yKHZhciBvLGEscz1lW3JdLGw9cy5sZW5ndGgsYz1pW3JdPW5ldyBBcnJheShsKSx1PTA7dTxsOysrdSkobz1zW3VdKSYmKGE9dC5jYWxsKG8sby5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBvJiYoYS5fX2RhdGFfXz1vLl9fZGF0YV9fKSxjW3VdPWEpO3JldHVybiBuZXcgeUQoaSx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIGtEKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ieih0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9W10scj1bXSxvPTA7bzxuOysrbylmb3IodmFyIGEscz1lW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpKGE9c1tjXSkmJihpLnB1c2godC5jYWxsKGEsYS5fX2RhdGFfXyxjLHMpKSxyLnB1c2goYSkpO3JldHVybiBuZXcgeUQoaSxyKX0sZmlsdGVyOmZ1bmN0aW9uIExEKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD14eih0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhPWVbcl0scz1hLmxlbmd0aCxsPWlbcl09W10sYz0wO2M8czsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmbC5wdXNoKG8pO3JldHVybiBuZXcgeUQoaSx0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbiBQRCh0LGUpe2lmKCF0KXJldHVybiBmPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdT0tMSx0aGlzLmVhY2goKGZ1bmN0aW9uKHQpe2ZbKyt1XT10fSkpLGY7dmFyIG49ZT9FejpNeixpPXRoaXMuX3BhcmVudHMscj10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PShmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0pKHQpKTtmb3IodmFyIGE9ci5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT0wO3U8YTsrK3Upe3ZhciBoPWlbdV0sZD1yW3VdLHA9ZC5sZW5ndGgsZj10LmNhbGwoaCxoJiZoLl9fZGF0YV9fLHUsaSksbT1mLmxlbmd0aCxnPWxbdV09bmV3IEFycmF5KG0pLF89c1t1XT1uZXcgQXJyYXkobSk7bihoLGQsZyxfLGNbdV09bmV3IEFycmF5KHApLGYsZSk7Zm9yKHZhciB5LHYsYj0wLHg9MDtiPG07KytiKWlmKHk9Z1tiXSl7Zm9yKGI+PXgmJih4PWIrMSk7ISh2PV9beF0pJiYrK3g8bTspO3kuX25leHQ9dnx8bnVsbH19cmV0dXJuKHM9bmV3IHlEKHMsaSkpLl9lbnRlcj1sLHMuX2V4aXQ9YyxzfSxlbnRlcjpmdW5jdGlvbiBORCgpe3JldHVybiBuZXcgeUQodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAod3opLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uIElEKCl7cmV0dXJuIG5ldyB5RCh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKHd6KSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiBSRCh0LGUsbil7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoaSk6aS5hcHBlbmQodCsiIiksbnVsbCE9ZSYmKHI9ZShyKSksbnVsbD09bj9vLnJlbW92ZSgpOm4obyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn0sbWVyZ2U6ZnVuY3Rpb24gT0QodCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxpPWUubGVuZ3RoLHI9TWF0aC5taW4oaSxuLmxlbmd0aCksbz1uZXcgQXJyYXkoaSksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGw9ZVthXSxjPW5bYV0sdT1sLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKShzPWxbZF18fGNbZF0pJiYoaFtkXT1zKTtmb3IoO2E8aTsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgeUQobyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24gekQoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciBpLHI9dFtlXSxvPXIubGVuZ3RoLTEsYT1yW29dOy0tbz49MDspKGk9cltvXSkmJihhJiY0XmkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaSxhKSxhPWkpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uIEREKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gZSYmbj90KGUuX19kYXRhX18sbi5fX2RhdGFfXyk6IWUtIW59dHx8KHQ9VHopO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxyPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbyl7Zm9yKHZhciBhLHM9bltvXSxsPXMubGVuZ3RoLGM9cltvXT1uZXcgQXJyYXkobCksdT0wO3U8bDsrK3UpKGE9c1t1XSkmJihjW3VdPWEpO2Muc29ydChlKX1yZXR1cm4gbmV3IHlEKHIsdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbiBCRCgpe3ZhciB0PWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsdC5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24gSEQoKXt2YXIgdD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGU9LTE7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt0WysrZV09dGhpc30pKSx0fSxub2RlOmZ1bmN0aW9uIEZEKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsbj10Lmxlbmd0aDtlPG47KytlKWZvcih2YXIgaT10W2VdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3Ipe3ZhciBhPWlbcl07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbiBWRCgpe3ZhciB0PTA7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXsrK3R9KSksdH0sZW1wdHk6ZnVuY3Rpb24gVUQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24gakQodCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWZvcih2YXIgcixvPWVbbl0sYT0wLHM9by5sZW5ndGg7YTxzOysrYSkocj1vW2FdKSYmdC5jYWxsKHIsci5fX2RhdGFfXyxhLG8pO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uIEdEKHQsZSl7dmFyIG49cHoodCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gbi5sb2NhbD9pLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6aS5nZXRBdHRyaWJ1dGUobil9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9uLmxvY2FsP0F6OkN6OiJmdW5jdGlvbiI9PXR5cGVvZiBlP24ubG9jYWw/Tno6UHo6bi5sb2NhbD9MejpreikobixlKSl9LHN0eWxlOmZ1bmN0aW9uIFdEKHQsZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9SejoiZnVuY3Rpb24iPT10eXBlb2YgZT96ejpPeikodCxlLG51bGw9PW4/IiI6bikpOkR6KHRoaXMubm9kZSgpLHQpfSxwcm9wZXJ0eTpmdW5jdGlvbiBxRCh0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP0J6OiJmdW5jdGlvbiI9PXR5cGVvZiBlP0Z6Okh6KSh0LGUpKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbiBZRCh0LGUpe3ZhciBuPVZ6KHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBpPVV6KHRoaXMubm9kZSgpKSxyPS0xLG89bi5sZW5ndGg7KytyPG87KWlmKCFpLmNvbnRhaW5zKG5bcl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP1h6OmU/cXo6WXopKG4sZSkpfSx0ZXh0OmZ1bmN0aW9uIFhEKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10PyR6OigiZnVuY3Rpb24iPT10eXBlb2YgdD9aejpLeikodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uICREKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P0p6OigiZnVuY3Rpb24iPT10eXBlb2YgdD90RDpReikodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24gS0QoKXtyZXR1cm4gdGhpcy5lYWNoKGVEKX0sbG93ZXI6ZnVuY3Rpb24gWkQoKXtyZXR1cm4gdGhpcy5lYWNoKG5EKX0sYXBwZW5kOmZ1bmN0aW9uIEpEKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Z3oodCk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pKX0saW5zZXJ0OmZ1bmN0aW9uIFFEKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpneih0KSxpPW51bGw9PWU/aUQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp5eihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pKX0scmVtb3ZlOmZ1bmN0aW9uIHRCKCl7cmV0dXJuIHRoaXMuZWFjaChyRCl9LGNsb25lOmZ1bmN0aW9uIGVCKHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P2FEOm9EKX0sZGF0dW06ZnVuY3Rpb24gbkIodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiBpQih0LGUsbil7dmFyIGkscixvPWhEKHQrIiIpLGE9by5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3Iocz1lP3BEOmRELG51bGw9PW4mJihuPSExKSxpPTA7aTxhOysraSl0aGlzLmVhY2gocyhvW2ldLGUsbikpO3JldHVybiB0aGlzfXZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocylmb3IodmFyIGwsYz0wLHU9cy5sZW5ndGg7Yzx1OysrYylmb3IoaT0wLGw9c1tjXTtpPGE7KytpKWlmKChyPW9baV0pLnR5cGU9PT1sLnR5cGUmJnIubmFtZT09PWwubmFtZSlyZXR1cm4gbC52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24gckIodCxlKXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9nRDptRCkodCxlKSl9fTt2YXIgb0I9LjcsYUI9MS9vQixzQj0iXFxzKihbKy1dP1xcZCspXFxzKiIsbEI9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsY0I9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHVCPS9eIyhbMC05YS1mXXszLDh9KSQvLGhCPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tzQixzQixzQl0rIlxcKSQiKSxkQj1uZXcgUmVnRXhwKCJecmdiXFwoIitbY0IsY0IsY0JdKyJcXCkkIikscEI9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tzQixzQixzQixsQl0rIlxcKSQiKSxmQj1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2NCLGNCLGNCLGxCXSsiXFwpJCIpLG1CPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tsQixjQixjQl0rIlxcKSQiKSxnQj1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW2xCLGNCLGNCLGxCXSsiXFwpJCIpLF9CPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIHlCKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gdkIoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBiQih0KXt2YXIgZSxuO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT11Qi5leGVjKHQpKT8obj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT1uP3hCKGUpOjM9PT1uP25ldyBFQihlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6OD09PW4/d0IoZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwoMjU1JmUpLzI1NSk6ND09PW4/d0IoZT4+MTImMTV8ZT4+OCYyNDAsZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgoMTUmZSk8PDR8MTUmZSkvMjU1KTpudWxsKTooZT1oQi5leGVjKHQpKT9uZXcgRUIoZVsxXSxlWzJdLGVbM10sMSk6KGU9ZEIuZXhlYyh0KSk/bmV3IEVCKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPXBCLmV4ZWModCkpP3dCKGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPWZCLmV4ZWModCkpP3dCKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPW1CLmV4ZWModCkpP2tCKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9Z0IuZXhlYyh0KSk/a0IoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpfQi5oYXNPd25Qcm9wZXJ0eSh0KT94QihfQlt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IEVCKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24geEIodCl7cmV0dXJuIG5ldyBFQih0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24gd0IodCxlLG4saSl7cmV0dXJuIGk8PTAmJih0PWU9bj1OYU4pLG5ldyBFQih0LGUsbixpKX1mdW5jdGlvbiBTQih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIENEfHwodD1iQih0KSksdD9uZXcgRUIoKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IEVCfWZ1bmN0aW9uIE1CKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9TQih0KTpuZXcgRUIodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIEVCKHQsZSxuLGkpe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBUQigpe3JldHVybiIjIitBQih0aGlzLnIpK0FCKHRoaXMuZykrQUIodGhpcy5iKX1mdW5jdGlvbiBDQigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfWZ1bmN0aW9uIEFCKHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24ga0IodCxlLG4saSl7cmV0dXJuIGk8PTA/dD1lPW49TmFOOm48PTB8fG4+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyBQQih0LGUsbixpKX1mdW5jdGlvbiBMQih0KXtpZih0IGluc3RhbmNlb2YgUEIpcmV0dXJuIG5ldyBQQih0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBDRHx8KHQ9YkIodCkpLCF0KXJldHVybiBuZXcgUEI7aWYodCBpbnN0YW5jZW9mIFBCKXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LG49dC5nLzI1NSxpPXQuYi8yNTUscj1NYXRoLm1pbihlLG4saSksbz1NYXRoLm1heChlLG4saSksYT1OYU4scz1vLXIsbD0obytyKS8yO3JldHVybiBzPyhhPWU9PT1vPyhuLWkpL3MrNioobjxpKTpuPT09bz8oaS1lKS9zKzI6KGUtbikvcys0LHMvPWw8LjU/bytyOjItby1yLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgUEIoYSxzLGwsdC5vcGFjaXR5KX1mdW5jdGlvbiBQQih0LGUsbixpKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gTkIodCxlLG4pe3JldHVybiAyNTUqKHQ8NjA/ZSsobi1lKSp0LzYwOnQ8MTgwP246dDwyNDA/ZSsobi1lKSooMjQwLXQpLzYwOmUpfWZ1bmN0aW9uIElCKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBSQih0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj8oZnVuY3Rpb24gaSh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdCtuKmV9fSkodCxuKTpJQihpc05hTih0KT9lOnQpfUVEKENELGJCLHtjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsdCl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OnlCLGZvcm1hdEhleDp5Qixmb3JtYXRIc2w6ZnVuY3Rpb24gT0IoKXtyZXR1cm4gTEIodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjp2Qix0b1N0cmluZzp2Qn0pLEVEKEVCLE1CLFREKENELHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P2FCOk1hdGgucG93KGFCLHQpLG5ldyBFQih0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9vQjpNYXRoLnBvdyhvQix0KSxuZXcgRUIodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpUQixmb3JtYXRIZXg6VEIsZm9ybWF0UmdiOkNCLHRvU3RyaW5nOkNCfSkpLEVEKFBCLChmdW5jdGlvbiB6Qih0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/TEIodCk6bmV3IFBCKHQsZSxuLG51bGw9PWk/MTppKX0pLFREKENELHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P2FCOk1hdGgucG93KGFCLHQpLG5ldyBQQih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P29COk1hdGgucG93KG9CLHQpLG5ldyBQQih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxpPW4rKG48LjU/bjoxLW4pKmUscj0yKm4taTtyZXR1cm4gbmV3IEVCKE5CKHQ+PTI0MD90LTI0MDp0KzEyMCxyLGkpLE5CKHQscixpKSxOQih0PDEyMD90KzI0MDp0LTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO3ZhciBEQj0oZnVuY3Rpb24gdChlKXt2YXIgbj0oZnVuY3Rpb24gaSh0KXtyZXR1cm4gMT09KHQ9K3QpP1JCOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT8oZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5wb3codCtpKmUsbil9fSkoZSxuLHQpOklCKGlzTmFOKGUpP246ZSl9fSkoZSk7ZnVuY3Rpb24gcih0LGUpe3ZhciBpPW4oKHQ9TUIodCkpLnIsKGU9TUIoZSkpLnIpLHI9bih0LmcsZS5nKSxvPW4odC5iLGUuYiksYT1SQih0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1pKGUpLHQuZz1yKGUpLHQuYj1vKGUpLHQub3BhY2l0eT1hKGUpLHQrIiJ9fXJldHVybiByLmdhbW1hPXQscn0pKDEpO2Z1bmN0aW9uIEJCKHQsZSl7ZXx8KGU9W10pO3ZhciBuLGk9dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxyPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKG49MDtuPGk7KytuKXJbbl09dFtuXSooMS1vKStlW25dKm87cmV0dXJuIHJ9fWZ1bmN0aW9uIEhCKHQsZSl7dmFyIG4saT1lP2UubGVuZ3RoOjAscj10P01hdGgubWluKGksdC5sZW5ndGgpOjAsbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPHI7KytuKW9bbl09cUIodFtuXSxlW25dKTtmb3IoO248aTsrK24pYVtuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3Iobj0wO248cjsrK24pYVtuXT1vW25dKHQpO3JldHVybiBhfX1mdW5jdGlvbiBGQih0LGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24oaSl7cmV0dXJuIG4uc2V0VGltZSh0KigxLWkpK2UqaSksbn19ZnVuY3Rpb24gVkIodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19ZnVuY3Rpb24gVUIodCxlKXt2YXIgbixpPXt9LHI9e307Zm9yKG4gaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKW4gaW4gdD9pW25dPXFCKHRbbl0sZVtuXSk6cltuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3IobiBpbiBpKXJbbl09aVtuXSh0KTtyZXR1cm4gcn19dmFyIGpCPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxHQj1uZXcgUmVnRXhwKGpCLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIFdCKHQsZSl7dmFyIG4saSxyLG89akIubGFzdEluZGV4PUdCLmxhc3RJbmRleD0wLGE9LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1qQi5leGVjKHQpKSYmKGk9R0IuZXhlYyhlKSk7KShyPWkuaW5kZXgpPm8mJihyPWUuc2xpY2UobyxyKSxzW2FdP3NbYV0rPXI6c1srK2FdPXIpLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OlZCKG4saSl9KSksbz1HQi5sYXN0SW5kZXg7cmV0dXJuIG88ZS5sZW5ndGgmJihyPWUuc2xpY2Uobyksc1thXT9zW2FdKz1yOnNbKythXT1yKSxzLmxlbmd0aDwyP2xbMF0/KGZ1bmN0aW9uIGModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0pKGxbMF0ueCk6KGZ1bmN0aW9uIHUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkoZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLGk9MDtpPGU7KytpKXNbKG49bFtpXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gcUIodCxlKXt2YXIgbixpPXR5cGVvZiBlO3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PT1pP0lCKGUpOigibnVtYmVyIj09PWk/VkI6InN0cmluZyI9PT1pPyhuPWJCKGUpKT8oZT1uLERCKTpXQjplIGluc3RhbmNlb2YgYkI/REI6ZSBpbnN0YW5jZW9mIERhdGU/RkI6KGZ1bmN0aW9uIHIodCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfSkoZSk/QkI6QXJyYXkuaXNBcnJheShlKT9IQjoiZnVuY3Rpb24iIT10eXBlb2YgZS52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZ3x8aXNOYU4oZSk/VUI6VkIpKHQsZSl9dmFyIFlCLFhCLCRCLEtCLFpCPTE4MC9NYXRoLlBJLEpCPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIFFCKHQsZSxuLGkscixvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPWEsZS89YSksKGw9dCpuK2UqaSkmJihuLT10KmwsaS09ZSpsKSwocz1NYXRoLnNxcnQobipuK2kqaSkpJiYobi89cyxpLz1zLGwvPXMpLHQqaTxlKm4mJih0PS10LGU9LWUsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDpyLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKlpCLHNrZXdYOk1hdGguYXRhbihsKSpaQixzY2FsZVg6YSxzY2FsZVk6c319ZnVuY3Rpb24gdEgodCxlLG4saSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKG8sYSl7dmFyIHM9W10sbD1bXTtyZXR1cm4gbz10KG8pLGE9dChhKSwoZnVuY3Rpb24gYyh0LGkscixvLGEscyl7aWYodCE9PXJ8fGkhPT1vKXt2YXIgbD1hLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLG4pO3MucHVzaCh7aTpsLTQseDpWQih0LHIpfSx7aTpsLTIseDpWQihpLG8pfSl9ZWxzZShyfHxvKSYmYS5wdXNoKCJ0cmFuc2xhdGUoIityK2UrbytuKX0pKG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVksYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxzLGwpLChmdW5jdGlvbiB1KHQsZSxuLG8pe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxvLnB1c2goe2k6bi5wdXNoKHIobikrInJvdGF0ZSgiLG51bGwsaSktMix4OlZCKHQsZSl9KSk6ZSYmbi5wdXNoKHIobikrInJvdGF0ZSgiK2UraSl9KShvLnJvdGF0ZSxhLnJvdGF0ZSxzLGwpLChmdW5jdGlvbiBoKHQsZSxuLG8pe3QhPT1lP28ucHVzaCh7aTpuLnB1c2gocihuKSsic2tld1goIixudWxsLGkpLTIseDpWQih0LGUpfSk6ZSYmbi5wdXNoKHIobikrInNrZXdYKCIrZStpKX0pKG8uc2tld1gsYS5za2V3WCxzLGwpLChmdW5jdGlvbiBkKHQsZSxuLGksbyxhKXtpZih0IT09bnx8ZSE9PWkpe3ZhciBzPW8ucHVzaChyKG8pKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTthLnB1c2goe2k6cy00LHg6VkIodCxuKX0se2k6cy0yLHg6VkIoZSxpKX0pfWVsc2UgMT09PW4mJjE9PT1pfHxvLnB1c2gocihvKSsic2NhbGUoIituKyIsIitpKyIpIil9KShvLnNjYWxlWCxvLnNjYWxlWSxhLnNjYWxlWCxhLnNjYWxlWSxzLGwpLG89YT1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLGk9bC5sZW5ndGg7KytuPGk7KXNbKGU9bFtuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIGVILG5ILGlIPXRIKChmdW5jdGlvbiBySCh0KXtyZXR1cm4ibm9uZSI9PT10P0pCOihZQnx8KFlCPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLFhCPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwkQj1kb2N1bWVudC5kZWZhdWx0VmlldyksWUIuc3R5bGUudHJhbnNmb3JtPXQsdD0kQi5nZXRDb21wdXRlZFN0eWxlKFhCLmFwcGVuZENoaWxkKFlCKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxYQi5yZW1vdmVDaGlsZChZQiksUUIoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLG9IPXRIKChmdW5jdGlvbiBhSCh0KXtyZXR1cm4gbnVsbD09dD9KQjooS0J8fChLQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxLQi5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9S0IudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/UUIoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6SkIpfSksIiwgIiwiKSIsIikiKSxzSD0wLGxIPTAsY0g9MCx1SD0wLGhIPTAsZEg9MCxwSD0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxmSD0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBtSCgpe3JldHVybiBoSHx8KGZIKGdIKSxoSD1wSC5ub3coKStkSCl9ZnVuY3Rpb24gZ0goKXtoSD0wfWZ1bmN0aW9uIF9IKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB5SCh0LGUsbil7dmFyIGk9bmV3IF9IO3JldHVybiBpLnJlc3RhcnQodCxlLG4pLGl9ZnVuY3Rpb24gdkgoKXtoSD0odUg9cEgubm93KCkpK2RILHNIPWxIPTA7dHJ5eyEoZnVuY3Rpb24gdCgpe21IKCksKytzSDtmb3IodmFyIHQsZT1lSDtlOykodD1oSC1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0tc0h9KSgpfWZpbmFsbHl7c0g9MCwoZnVuY3Rpb24gZSgpe2Zvcih2YXIgdCxlLG49ZUgsaT0xLzA7bjspbi5fY2FsbD8oaT5uLl90aW1lJiYoaT1uLl90aW1lKSx0PW4sbj1uLl9uZXh0KTooZT1uLl9uZXh0LG4uX25leHQ9bnVsbCxuPXQ/dC5fbmV4dD1lOmVIPWUpO25IPXQseEgoaSl9KSgpLGhIPTB9fWZ1bmN0aW9uIGJIKCl7dmFyIHQ9cEgubm93KCksZT10LXVIO2U+MWUzJiYoZEgtPWUsdUg9dCl9ZnVuY3Rpb24geEgodCl7c0h8fChsSCYmKGxIPWNsZWFyVGltZW91dChsSCkpLHQtaEg+MjQ/KHQ8MS8wJiYobEg9c2V0VGltZW91dCh2SCx0LXBILm5vdygpLWRIKSksY0gmJihjSD1jbGVhckludGVydmFsKGNIKSkpOihjSHx8KHVIPXBILm5vdygpLGNIPXNldEludGVydmFsKGJILDFlMykpLHNIPTEsZkgodkgpKSl9ZnVuY3Rpb24gd0godCxlLG4pe3ZhciBpPW5ldyBfSDtyZXR1cm4gaS5yZXN0YXJ0KChmdW5jdGlvbihuKXtpLnN0b3AoKSx0KG4rZSl9KSxlPW51bGw9PWU/MDorZSxuKSxpfV9ILnByb3RvdHlwZT15SC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl9ILHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9tSCgpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxuSD09PXRoaXN8fChuSD9uSC5fbmV4dD10aGlzOmVIPXRoaXMsbkg9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bix4SCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCx4SCgpKX19O3ZhciBTSD1heigic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxNSD1bXTtmdW5jdGlvbiBFSCh0LGUsbixpLHIsbyl7dmFyIGE9dC5fX3RyYW5zaXRpb247aWYoYSl7aWYobiBpbiBhKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyEoZnVuY3Rpb24gcyh0LGUsbil7dmFyIGkscj10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBvKGwpe3ZhciBjLHUsaCxkO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKGMgaW4gcilpZigoZD1yW2NdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09ZC5zdGF0ZSlyZXR1cm4gd0gobyk7ND09PWQuc3RhdGU/KGQuc3RhdGU9NixkLnRpbWVyLnN0b3AoKSxkLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGQuaW5kZXgsZC5ncm91cCksZGVsZXRlIHJbY10pOitjPGUmJihkLnN0YXRlPTYsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSByW2NdKX1pZih3SCgoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQoYSxuLmRlbGF5LG4udGltZSksYShsKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLGk9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLGM9MCx1PS0xO2M8aDsrK2MpKGQ9bi50d2VlbltjXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKGlbKyt1XT1kKTtpLmxlbmd0aD11KzF9fWZ1bmN0aW9uIGEoZSl7Zm9yKHZhciByPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksbz0tMSxhPWkubGVuZ3RoOysrbzxhOylpW29dLmNhbGwodCxyKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIGkgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSByW2VdLHIpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1yW2VdPW4sbi50aW1lcj15SCgoZnVuY3Rpb24gbCh0KXtuLnN0YXRlPTEsbi50aW1lci5yZXN0YXJ0KG8sbi5kZWxheSxuLnRpbWUpLG4uZGVsYXk8PXQmJm8odC1uLmRlbGF5KX0pLDAsbi50aW1lKX0pKHQsbix7bmFtZTplLGluZGV4OmksZ3JvdXA6cixvbjpTSCx0d2VlbjpNSCx0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9ZnVuY3Rpb24gVEgodCxlKXt2YXIgbj1BSCh0LGUpO2lmKG4uc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIENIKHQsZSl7dmFyIG49QUgodCxlKTtpZihuLnN0YXRlPjMpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIG59ZnVuY3Rpb24gQUgodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBrSCh0LGUpe3ZhciBuLGkscixvPXQuX190cmFuc2l0aW9uLGE9ITA7aWYobyl7Zm9yKHIgaW4gZT1udWxsPT1lP251bGw6ZSsiIixvKShuPW9bcl0pLm5hbWU9PT1lPyhpPW4uc3RhdGU+MiYmbi5zdGF0ZTw1LG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgb1tyXSk6YT0hMTthJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIExIKHQsZSl7dmFyIG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1DSCh0aGlzLHQpLG89ci50d2VlbjtpZihvIT09bilmb3IodmFyIGE9MCxzPShpPW49bykubGVuZ3RoO2E8czsrK2EpaWYoaVthXS5uYW1lPT09ZSl7KGk9aS5zbGljZSgpKS5zcGxpY2UoYSwxKTticmVha31yLnR3ZWVuPWl9fWZ1bmN0aW9uIFBIKHQsZSxuKXt2YXIgaSxyO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1DSCh0aGlzLHQpLGE9by50d2VlbjtpZihhIT09aSl7cj0oaT1hKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGw9MCxjPXIubGVuZ3RoO2w8YzsrK2wpaWYocltsXS5uYW1lPT09ZSl7cltsXT1zO2JyZWFrfWw9PT1jJiZyLnB1c2gocyl9by50d2Vlbj1yfX1mdW5jdGlvbiBOSCh0LGUsbil7dmFyIGk9dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1DSCh0aGlzLGkpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSkpLGZ1bmN0aW9uKHQpe3JldHVybiBBSCh0LGkpLnZhbHVlW2VdfX1mdW5jdGlvbiBJSCh0LGUpe3ZhciBuO3JldHVybigibnVtYmVyIj09dHlwZW9mIGU/VkI6ZSBpbnN0YW5jZW9mIGJCP0RCOihuPWJCKGUpKT8oZT1uLERCKTpXQikodCxlKX1mdW5jdGlvbiBSSCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gT0godCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiB6SCh0LGUsbil7dmFyIGkscixvPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIGE9PT1vP251bGw6YT09PWk/cjpyPWUoaT1hLG4pfX1mdW5jdGlvbiBESCh0LGUsbil7dmFyIGkscixvPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpO3JldHVybiBhPT09bz9udWxsOmE9PT1pP3I6cj1lKGk9YSxuKX19ZnVuY3Rpb24gQkgodCxlLG4pe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzLGw9bih0aGlzKTtpZihudWxsIT1sKXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlKHQpKT09PShzPWwrIiIpP251bGw6YT09PWkmJnM9PT1yP286KHI9cyxvPWUoaT1hLGwpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gSEgodCxlLG4pe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzLGw9bih0aGlzKTtpZihudWxsIT1sKXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKSk9PT0ocz1sKyIiKT9udWxsOmE9PT1pJiZzPT09cj9vOihyPXMsbz1lKGk9YSxsKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBGSCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gVkgodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBVSCh0LGUpe3ZhciBuLGk7ZnVuY3Rpb24gcigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09aSYmKG49KGk9cikmJlZIKHQscikpLG59cmV0dXJuIHIuX3ZhbHVlPWUscn1mdW5jdGlvbiBqSCh0LGUpe3ZhciBuLGk7ZnVuY3Rpb24gcigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09aSYmKG49KGk9cikmJkZIKHQscikpLG59cmV0dXJuIHIuX3ZhbHVlPWUscn1mdW5jdGlvbiBHSCh0LGUpe3JldHVybiBmdW5jdGlvbigpe1RIKHRoaXMsdCkuZGVsYXk9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBXSCh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7VEgodGhpcyx0KS5kZWxheT1lfX1mdW5jdGlvbiBxSCh0LGUpe3JldHVybiBmdW5jdGlvbigpe0NIKHRoaXMsdCkuZHVyYXRpb249K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBZSCh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7Q0godGhpcyx0KS5kdXJhdGlvbj1lfX1mdW5jdGlvbiBYSCh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtDSCh0aGlzLHQpLmVhc2U9ZX19ZnVuY3Rpb24gJEgodCxlLG4pe3ZhciBpLHIsbz0oZnVuY3Rpb24gYSh0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KChmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKHQ9dC5zbGljZSgwLGUpKSwhdHx8InN0YXJ0Ij09PXR9KSl9KShlKT9USDpDSDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsdCkscz1hLm9uO3MhPT1pJiYocj0oaT1zKS5jb3B5KCkpLm9uKGUsbiksYS5vbj1yfX12YXIgS0g9dkQucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIFpIKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIEpIKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUuY2FsbCh0aGlzLGkpLG4pfX1mdW5jdGlvbiBRSCh0LGUsbil7dmFyIGkscjtmdW5jdGlvbiBvKCl7dmFyIG89ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1yJiYoaT0ocj1vKSYmSkgodCxvLG4pKSxpfXJldHVybiBvLl92YWx1ZT1lLG99ZnVuY3Rpb24gdEYodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMudGV4dENvbnRlbnQ9dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIGVGKHQpe3ZhciBlLG47ZnVuY3Rpb24gaSgpe3ZhciBpPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09biYmKGU9KG49aSkmJnRGKGkpKSxlfXJldHVybiBpLl92YWx1ZT10LGl9dmFyIG5GPTA7ZnVuY3Rpb24gaUYodCxlLG4saSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9bix0aGlzLl9pZD1pfWZ1bmN0aW9uIHJGKCl7cmV0dXJuKytuRn12YXIgb0Y9dkQucHJvdG90eXBlO2lGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aUYsc2VsZWN0OmZ1bmN0aW9uIGFGKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9eXoodCkpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSlmb3IodmFyIHMsbCxjPWlbYV0sdT1jLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKShzPWNbZF0pJiYobD10LmNhbGwocyxzLl9fZGF0YV9fLGQsYykpJiYoIl9fZGF0YV9fImluIHMmJihsLl9fZGF0YV9fPXMuX19kYXRhX18pLGhbZF09bCxFSChoW2RdLGUsbixkLGgsQUgocyxuKSkpO3JldHVybiBuZXcgaUYobyx0aGlzLl9wYXJlbnRzLGUsbil9LHNlbGVjdEFsbDpmdW5jdGlvbiBzRih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWJ6KHQpKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1bXSxhPVtdLHM9MDtzPHI7KytzKWZvcih2YXIgbCxjPWlbc10sdT1jLmxlbmd0aCxoPTA7aDx1OysraClpZihsPWNbaF0pe2Zvcih2YXIgZCxwPXQuY2FsbChsLGwuX19kYXRhX18saCxjKSxmPUFIKGwsbiksbT0wLGc9cC5sZW5ndGg7bTxnOysrbSkoZD1wW21dKSYmRUgoZCxlLG4sbSxwLGYpO28ucHVzaChwKSxhLnB1c2gobCl9cmV0dXJuIG5ldyBpRihvLGEsZSxuKX0sZmlsdGVyOmZ1bmN0aW9uIGxGKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD14eih0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhPWVbcl0scz1hLmxlbmd0aCxsPWlbcl09W10sYz0wO2M8czsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmbC5wdXNoKG8pO3JldHVybiBuZXcgaUYoaSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbiBjRih0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLGk9ZS5sZW5ndGgscj1NYXRoLm1pbihpLG4ubGVuZ3RoKSxvPW5ldyBBcnJheShpKSxhPTA7YTxyOysrYSlmb3IodmFyIHMsbD1lW2FdLGM9blthXSx1PWwubGVuZ3RoLGg9b1thXT1uZXcgQXJyYXkodSksZD0wO2Q8dTsrK2QpKHM9bFtkXXx8Y1tkXSkmJihoW2RdPXMpO2Zvcig7YTxpOysrYSlvW2FdPWVbYV07cmV0dXJuIG5ldyBpRihvLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbiB1Rigpe3JldHVybiBuZXcgS0godGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIGhGKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxuPXJGKCksaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPTA7bzxyOysrbylmb3IodmFyIGEscz1pW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpaWYoYT1zW2NdKXt2YXIgdT1BSChhLGUpO0VIKGEsdCxuLGMscyx7dGltZTp1LnRpbWUrdS5kZWxheSt1LmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dS5kdXJhdGlvbixlYXNlOnUuZWFzZX0pfXJldHVybiBuZXcgaUYoaSx0aGlzLl9wYXJlbnRzLHQsbil9LGNhbGw6b0YuY2FsbCxub2RlczpvRi5ub2Rlcyxub2RlOm9GLm5vZGUsc2l6ZTpvRi5zaXplLGVtcHR5Om9GLmVtcHR5LGVhY2g6b0YuZWFjaCxvbjpmdW5jdGlvbiBkRih0LGUpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/QUgodGhpcy5ub2RlKCksbikub24ub24odCk6dGhpcy5lYWNoKCRIKG4sdCxlKSl9LGF0dHI6ZnVuY3Rpb24gcEYodCxlKXt2YXIgbj1weih0KSxpPSJ0cmFuc2Zvcm0iPT09bj9vSDpJSDtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT8obi5sb2NhbD9ISDpCSCkobixpLE5IKHRoaXMsImF0dHIuIit0LGUpKTpudWxsPT1lPyhuLmxvY2FsP09IOlJIKShuKToobi5sb2NhbD9ESDp6SCkobixpLGUpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uIGZGKHQsZSl7dmFyIG49ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjt2YXIgaT1weih0KTtyZXR1cm4gdGhpcy50d2VlbihuLChpLmxvY2FsP1VIOmpIKShpLGUpKX0sc3R5bGU6ZnVuY3Rpb24gbUYodCxlLG4pe3ZhciBpPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP2lIOklIO3JldHVybiBudWxsPT1lP3RoaXMuc3R5bGVUd2Vlbih0LChmdW5jdGlvbiByKHQsZSl7dmFyIG4saSxyO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUR6KHRoaXMsdCksYT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxEeih0aGlzLHQpKTtyZXR1cm4gbz09PWE/bnVsbDpvPT09biYmYT09PWk/cjpyPWUobj1vLGk9YSl9fSkodCxpKSkub24oImVuZC5zdHlsZS4iK3QsWkgodCkpOiJmdW5jdGlvbiI9PXR5cGVvZiBlP3RoaXMuc3R5bGVUd2Vlbih0LChmdW5jdGlvbiBhKHQsZSxuKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9RHoodGhpcyx0KSxzPW4odGhpcyksbD1zKyIiO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxsPXM9RHoodGhpcyx0KSksYT09PWw/bnVsbDphPT09aSYmbD09PXI/bzoocj1sLG89ZShpPWEscykpfX0pKHQsaSxOSCh0aGlzLCJzdHlsZS4iK3QsZSkpKS5lYWNoKChmdW5jdGlvbiBvKHQsZSl7dmFyIG4saSxyLG8sYT0ic3R5bGUuIitlLHM9ImVuZC4iK2E7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9Q0godGhpcyx0KSxjPWwub24sdT1udWxsPT1sLnZhbHVlW2FdP298fChvPVpIKGUpKTp2b2lkIDA7Yz09PW4mJnI9PT11fHwoaT0obj1jKS5jb3B5KCkpLm9uKHMscj11KSxsLm9uPWl9fSkodGhpcy5faWQsdCkpOnRoaXMuc3R5bGVUd2Vlbih0LChmdW5jdGlvbiBzKHQsZSxuKXt2YXIgaSxyLG89bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1Eeih0aGlzLHQpO3JldHVybiBhPT09bz9udWxsOmE9PT1pP3I6cj1lKGk9YSxuKX19KSh0LGksZSksbikub24oImVuZC5zdHlsZS4iK3QsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24gZ0YodCxlLG4pe3ZhciBpPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihpPXRoaXMudHdlZW4oaSkpJiZpLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKGksbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGksUUgodCxlLG51bGw9PW4/IiI6bikpfSx0ZXh0OmZ1bmN0aW9uIF9GKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD8oZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX0pKE5IKHRoaXMsInRleHQiLHQpKTooZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fSkobnVsbD09dD8iIjp0KyIiKSl9LHRleHRUd2VlbjpmdW5jdGlvbiB5Rih0KXt2YXIgZT0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZihudWxsPT10KXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGUsZUYodCkpfSxyZW1vdmU6ZnVuY3Rpb24gdkYoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PWUpcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fSkodGhpcy5faWQpKX0sdHdlZW46ZnVuY3Rpb24gYkYodCxlKXt2YXIgbj10aGlzLl9pZDtpZih0Kz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaSxyPUFIKHRoaXMubm9kZSgpLG4pLnR3ZWVuLG89MCxhPXIubGVuZ3RoO288YTsrK28paWYoKGk9cltvXSkubmFtZT09PXQpcmV0dXJuIGkudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9MSDpQSCkobix0LGUpKX0sZGVsYXk6ZnVuY3Rpb24geEYodCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9HSDpXSCkoZSx0KSk6QUgodGhpcy5ub2RlKCksZSkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uIHdGKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/cUg6WUgpKGUsdCkpOkFIKHRoaXMubm9kZSgpLGUpLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uIFNGKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChYSChlLHQpKTpBSCh0aGlzLm5vZGUoKSxlKS5lYXNlfSxlbmQ6ZnVuY3Rpb24gTUYoKXt2YXIgdCxlLG49dGhpcyxpPW4uX2lkLHI9bi5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihvLGEpe3ZhciBzPXt2YWx1ZTphfSxsPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0tciYmbygpfX07bi5lYWNoKChmdW5jdGlvbigpe3ZhciBuPUNIKHRoaXMsaSkscj1uLm9uO3IhPT10JiYoKGU9KHQ9cikuY29weSgpKS5fLmNhbmNlbC5wdXNoKHMpLGUuXy5pbnRlcnJ1cHQucHVzaChzKSxlLl8uZW5kLnB1c2gobCkpLG4ub249ZX0pKX0pKX19O3ZhciBFRj17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6VGZ9O2Z1bmN0aW9uIFRGKHQsZSl7Zm9yKHZhciBuOyEobj10Ll9fdHJhbnNpdGlvbil8fCEobj1uW2VdKTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIEVGLnRpbWU9bUgoKSxFRjtyZXR1cm4gbn1mdW5jdGlvbiBDRih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gQUYodCxlLG4pe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPWUsdGhpcy5zZWxlY3Rpb249bn1mdW5jdGlvbiBrRigpe2xELnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIExGKCl7bEQucHJldmVudERlZmF1bHQoKSxsRC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX12RC5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uIFBGKHQpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7a0godGhpcyx0KX0pKX0sdkQucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rpb24gTkYodCl7dmFyIGUsbjt0IGluc3RhbmNlb2YgaUY/KGU9dC5faWQsdD10Ll9uYW1lKTooZT1yRigpLChuPUVGKS50aW1lPW1IKCksdD1udWxsPT10P251bGw6dCsiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgYSxzPWlbb10sbD1zLmxlbmd0aCxjPTA7YzxsOysrYykoYT1zW2NdKSYmRUgoYSx0LGUsYyxzLG58fFRGKGEsZSkpO3JldHVybiBuZXcgaUYoaSx0aGlzLl9wYXJlbnRzLHQsZSl9O3ZhciBJRj17bmFtZToiZHJhZyJ9LFJGPXtuYW1lOiJzcGFjZSJ9LE9GPXtuYW1lOiJoYW5kbGUifSx6Rj17bmFtZToiY2VudGVyIn0sREY9e25hbWU6IngiLGhhbmRsZXM6WyJlIiwidyJdLm1hcChXRiksaW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmW1t0WzBdLGVbMF1bMV1dLFt0WzFdLGVbMV1bMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVswXSx0WzFdWzBdXX19LEJGPXtuYW1lOiJ5IixoYW5kbGVzOlsibiIsInMiXS5tYXAoV0YpLGlucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJltbZVswXVswXSx0WzBdXSxbZVsxXVswXSx0WzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMV0sdFsxXVsxXV19fSxIRj17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXS5tYXAoV0YpLGlucHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxGRj17b3ZlcmxheToiY3Jvc3NoYWlyIixzZWxlY3Rpb246Im1vdmUiLG46Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sVkY9e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LFVGPXtuOiJzIixzOiJuIixudzoic3ciLG5lOiJzZSIsc2U6Im5lIixzdzoibncifSxqRj17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46bnVsbCxlOjEsczpudWxsLHc6LTEsbnc6LTEsbmU6MSxzZToxLHN3Oi0xfSxHRj17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBXRih0KXtyZXR1cm57dHlwZTp0fX1mdW5jdGlvbiBxRigpe3JldHVybiFsRC5idXR0b259ZnVuY3Rpb24gWUYoKXt2YXIgdD10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm5bWzAsMF0sW3Qud2lkdGguYmFzZVZhbC52YWx1ZSx0LmhlaWdodC5iYXNlVmFsLnZhbHVlXV19ZnVuY3Rpb24gWEYodCl7Zm9yKDshdC5fX2JydXNoOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHQuX19icnVzaH1mdW5jdGlvbiAkRih0KXtyZXR1cm4gdFswXVswXT09PXRbMV1bMF18fHRbMF1bMV09PT10WzFdWzFdfWZ1bmN0aW9uIEtGKHQpe3ZhciBlLG49WUYsaT1xRixyPWF6KGEsInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxvPTY7ZnVuY3Rpb24gYShlKXt2YXIgbj1lLnByb3BlcnR5KCJfX2JydXNoIixoKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbV0YoIm92ZXJsYXkiKV0pO24uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm92ZXJsYXkiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoImN1cnNvciIsRkYub3ZlcmxheSkubWVyZ2UobikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1YRih0aGlzKS5leHRlbnQ7YkQodGhpcykuYXR0cigieCIsdFswXVswXSkuYXR0cigieSIsdFswXVsxXSkuYXR0cigid2lkdGgiLHRbMV1bMF0tdFswXVswXSkuYXR0cigiaGVpZ2h0Iix0WzFdWzFdLXRbMF1bMV0pfSkpLGUuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbV0YoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsRkYuc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGk9ZS5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKHQuaGFuZGxlcywoZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0pKTtpLmV4aXQoKS5yZW1vdmUoKSxpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIit0LnR5cGV9KSkuYXR0cigiY3Vyc29yIiwoZnVuY3Rpb24odCl7cmV0dXJuIEZGW3QudHlwZV19KSksZS5lYWNoKHMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsdSl9ZnVuY3Rpb24gcygpe3ZhciB0PWJEKHRoaXMpLGU9WEYodGhpcykuc2VsZWN0aW9uO2U/KHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLGVbMF1bMF0pLmF0dHIoInkiLGVbMF1bMV0pLmF0dHIoIndpZHRoIixlWzFdWzBdLWVbMF1bMF0pLmF0dHIoImhlaWdodCIsZVsxXVsxXS1lWzBdWzFdKSx0LnNlbGVjdEFsbCgiLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuImUiPT09dC50eXBlW3QudHlwZS5sZW5ndGgtMV0/ZVsxXVswXS1vLzI6ZVswXVswXS1vLzJ9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybiJzIj09PXQudHlwZVswXT9lWzFdWzFdLW8vMjplWzBdWzFdLW8vMn0pKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiJuIj09PXQudHlwZXx8InMiPT09dC50eXBlP2VbMV1bMF0tZVswXVswXStvOm99KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuImUiPT09dC50eXBlfHwidyI9PT10LnR5cGU/ZVsxXVsxXS1lWzBdWzFdK286b30pKSk6dC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdC5fX2JydXNoLmVtaXR0ZXJ8fG5ldyBjKHQsZSl9ZnVuY3Rpb24gYyh0LGUpe3RoaXMudGhhdD10LHRoaXMuYXJncz1lLHRoaXMuc3RhdGU9dC5fX2JydXNoLHRoaXMuYWN0aXZlPTB9ZnVuY3Rpb24gdSgpe2lmKGxELnRvdWNoZXMpe2lmKGxELmNoYW5nZWRUb3VjaGVzLmxlbmd0aDxsRC50b3VjaGVzLmxlbmd0aClyZXR1cm4gTEYoKX1lbHNlIGlmKGUpcmV0dXJuO2lmKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbixyLG8sYSxjLHUsaCxkLHAsZixtLGcsXyx5PXRoaXMsdj1sRC50YXJnZXQuX19kYXRhX18udHlwZSxiPSJzZWxlY3Rpb24iPT09KGxELm1ldGFLZXk/dj0ib3ZlcmxheSI6dik/SUY6bEQuYWx0S2V5P3pGOk9GLHg9dD09PUJGP251bGw6akZbdl0sdz10PT09REY/bnVsbDpHRlt2XSxTPVhGKHkpLE09Uy5leHRlbnQsRT1TLnNlbGVjdGlvbixUPU1bMF1bMF0sQz1NWzBdWzFdLEE9TVsxXVswXSxrPU1bMV1bMV0sTD14JiZ3JiZsRC5zaGlmdEtleSxQPXhEKHkpLE49UCxJPWwoeSxhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCk7Im92ZXJsYXkiPT09dj9TLnNlbGVjdGlvbj1FPVtbbj10PT09QkY/VDpQWzBdLG89dD09PURGP0M6UFsxXV0sW2M9dD09PUJGP0E6bixoPXQ9PT1ERj9rOm9dXToobj1FWzBdWzBdLG89RVswXVsxXSxjPUVbMV1bMF0saD1FWzFdWzFdKSxyPW4sYT1vLHU9YyxkPWg7dmFyIFI9YkQoeSkuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksTz1SLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLEZGW3ZdKTtpZihsRC50b3VjaGVzKVIub24oInRvdWNobW92ZS5icnVzaCIsRCwhMCkub24oInRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixILCEwKTtlbHNle3ZhciB6PWJEKGxELnZpZXcpLm9uKCJrZXlkb3duLmJydXNoIixGLCEwKS5vbigia2V5dXAuYnJ1c2giLFYsITApLm9uKCJtb3VzZW1vdmUuYnJ1c2giLEQsITApLm9uKCJtb3VzZXVwLmJydXNoIixILCEwKTtTRChsRC52aWV3KX1rRigpLGtIKHkpLHMuY2FsbCh5KSxJLnN0YXJ0KCl9ZnVuY3Rpb24gRCgpe3ZhciB0PXhEKHkpOyFMfHxnfHxffHwoTWF0aC5hYnModFswXS1OWzBdKT5NYXRoLmFicyh0WzFdLU5bMV0pP189ITA6Zz0hMCksTj10LG09ITAsTEYoKSxCKCl9ZnVuY3Rpb24gQigpe3ZhciB0O3N3aXRjaChwPU5bMF0tUFswXSxmPU5bMV0tUFsxXSxiKXtjYXNlIFJGOmNhc2UgSUY6eCYmKHA9TWF0aC5tYXgoVC1uLE1hdGgubWluKEEtYyxwKSkscj1uK3AsdT1jK3ApLHcmJihmPU1hdGgubWF4KEMtbyxNYXRoLm1pbihrLWgsZikpLGE9bytmLGQ9aCtmKTticmVhaztjYXNlIE9GOng8MD8ocD1NYXRoLm1heChULW4sTWF0aC5taW4oQS1uLHApKSxyPW4rcCx1PWMpOng+MCYmKHA9TWF0aC5tYXgoVC1jLE1hdGgubWluKEEtYyxwKSkscj1uLHU9YytwKSx3PDA/KGY9TWF0aC5tYXgoQy1vLE1hdGgubWluKGstbyxmKSksYT1vK2YsZD1oKTp3PjAmJihmPU1hdGgubWF4KEMtaCxNYXRoLm1pbihrLWgsZikpLGE9byxkPWgrZik7YnJlYWs7Y2FzZSB6Rjp4JiYocj1NYXRoLm1heChULE1hdGgubWluKEEsbi1wKngpKSx1PU1hdGgubWF4KFQsTWF0aC5taW4oQSxjK3AqeCkpKSx3JiYoYT1NYXRoLm1heChDLE1hdGgubWluKGssby1mKncpKSxkPU1hdGgubWF4KEMsTWF0aC5taW4oayxoK2YqdykpKX11PHImJih4Kj0tMSx0PW4sbj1jLGM9dCx0PXIscj11LHU9dCx2IGluIFZGJiZPLmF0dHIoImN1cnNvciIsRkZbdj1WRlt2XV0pKSxkPGEmJih3Kj0tMSx0PW8sbz1oLGg9dCx0PWEsYT1kLGQ9dCx2IGluIFVGJiZPLmF0dHIoImN1cnNvciIsRkZbdj1VRlt2XV0pKSxTLnNlbGVjdGlvbiYmKEU9Uy5zZWxlY3Rpb24pLGcmJihyPUVbMF1bMF0sdT1FWzFdWzBdKSxfJiYoYT1FWzBdWzFdLGQ9RVsxXVsxXSksRVswXVswXT09PXImJkVbMF1bMV09PT1hJiZFWzFdWzBdPT09dSYmRVsxXVsxXT09PWR8fChTLnNlbGVjdGlvbj1bW3IsYV0sW3UsZF1dLHMuY2FsbCh5KSxJLmJydXNoKCkpfWZ1bmN0aW9uIEgoKXtpZihrRigpLGxELnRvdWNoZXMpe2lmKGxELnRvdWNoZXMubGVuZ3RoKXJldHVybjtlJiZjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2U9bnVsbH0pLDUwMCksUi5vbigidG91Y2htb3ZlLmJydXNoIHRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixudWxsKX1lbHNlIE1EKGxELnZpZXcsbSksei5vbigia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaCIsbnVsbCk7Ui5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLE8uYXR0cigiY3Vyc29yIixGRi5vdmVybGF5KSxTLnNlbGVjdGlvbiYmKEU9Uy5zZWxlY3Rpb24pLCRGKEUpJiYoUy5zZWxlY3Rpb249bnVsbCxzLmNhbGwoeSkpLEkuZW5kKCl9ZnVuY3Rpb24gRigpe3N3aXRjaChsRC5rZXlDb2RlKXtjYXNlIDE2Okw9eCYmdzticmVhaztjYXNlIDE4OmI9PT1PRiYmKHgmJihjPXUtcCp4LG49citwKngpLHcmJihoPWQtZip3LG89YStmKncpLGI9ekYsQigpKTticmVhaztjYXNlIDMyOmIhPT1PRiYmYiE9PXpGfHwoeDwwP2M9dS1wOng+MCYmKG49ci1wKSx3PDA/aD1kLWY6dz4wJiYobz1hLWYpLGI9UkYsTy5hdHRyKCJjdXJzb3IiLEZGLnNlbGVjdGlvbiksQigpKTticmVhaztkZWZhdWx0OnJldHVybn1MRigpfWZ1bmN0aW9uIFYoKXtzd2l0Y2gobEQua2V5Q29kZSl7Y2FzZSAxNjpMJiYoZz1fPUw9ITEsQigpKTticmVhaztjYXNlIDE4OmI9PT16RiYmKHg8MD9jPXU6eD4wJiYobj1yKSx3PDA/aD1kOnc+MCYmKG89YSksYj1PRixCKCkpO2JyZWFrO2Nhc2UgMzI6Yj09PVJGJiYobEQuYWx0S2V5Pyh4JiYoYz11LXAqeCxuPXIrcCp4KSx3JiYoaD1kLWYqdyxvPWErZip3KSxiPXpGKTooeDwwP2M9dTp4PjAmJihuPXIpLHc8MD9oPWQ6dz4wJiYobz1hKSxiPU9GKSxPLmF0dHIoImN1cnNvciIsRkZbdl0pLEIoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59TEYoKX19ZnVuY3Rpb24gaCgpe3ZhciBlPXRoaXMuX19icnVzaHx8e3NlbGVjdGlvbjpudWxsfTtyZXR1cm4gZS5leHRlbnQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS5kaW09dCxlfXJldHVybiBhLm1vdmU9ZnVuY3Rpb24oZSxuKXtlLnNlbGVjdGlvbj9lLm9uKCJzdGFydC5icnVzaCIsKGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIiwoZnVuY3Rpb24oKXtsKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pKS50d2VlbigiYnJ1c2giLChmdW5jdGlvbigpe3ZhciBlPXRoaXMsaT1lLl9fYnJ1c2gscj1sKGUsYXJndW1lbnRzKSxvPWkuc2VsZWN0aW9uLGE9dC5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuLGkuZXh0ZW50KSxjPXFCKG8sYSk7ZnVuY3Rpb24gdSh0KXtpLnNlbGVjdGlvbj0xPT09dCYmJEYoYSk/bnVsbDpjKHQpLHMuY2FsbChlKSxyLmJydXNoKCl9cmV0dXJuIG8mJmE/dTp1KDEpfSkpOmUuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9YXJndW1lbnRzLHI9ZS5fX2JydXNoLG89dC5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KGUsaSk6bixyLmV4dGVudCksYT1sKGUsaSkuYmVmb3Jlc3RhcnQoKTtrSChlKSxyLnNlbGVjdGlvbj1udWxsPT1vfHwkRihvKT9udWxsOm8scy5jYWxsKGUpLGEuc3RhcnQoKS5icnVzaCgpLmVuZCgpfSkpfSxjLnByb3RvdHlwZT17YmVmb3Jlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMuc3RhdGUuZW1pdHRlcj10aGlzLHRoaXMuc3RhcnRpbmc9ITApLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRpbmcmJih0aGlzLnN0YXJ0aW5nPSExLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sYnJ1c2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlcix0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKGUpeyEoZnVuY3Rpb24gbih0LGUsaSxyKXt2YXIgbz1sRDt0LnNvdXJjZUV2ZW50PWxELGxEPXQ7dHJ5e2UuYXBwbHkoaSxyKX1maW5hbGx5e2xEPW99fSkobmV3IEFGKGEsZSx0Lm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLHIuYXBwbHkscixbZSx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxhLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkNGKFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSxhKTpufSxhLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkNGKCEhdCksYSk6aX0sYS5oYW5kbGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGEpOm99LGEub249ZnVuY3Rpb24oKXt2YXIgdD1yLm9uLmFwcGx5KHIsYXJndW1lbnRzKTtyZXR1cm4gdD09PXI/YTp0fSxhfWZ1bmN0aW9uIFpGKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIEpGKHQsZSxuKXt0PSt0LGU9K2Usbj0ocj1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOnI8Mz8xOituO2Zvcih2YXIgaT0tMSxyPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvbikpLG89bmV3IEFycmF5KHIpOysraTxyOylvW2ldPXQraSpuO3JldHVybiBvfSEoZnVuY3Rpb24gUUYodCl7MT09PXQubGVuZ3RoJiYodD0oZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gWkYodChlKSxuKX19KSh0KSl9KShaRik7dmFyIHRWPU1hdGguY29zLGVWPU1hdGguc2luLG5WPU1hdGguUEksaVY9blYvMixyVj0yKm5WLG9WPU1hdGgubWF4O2Z1bmN0aW9uIGFWKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiB0KGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlLG4uc291cmNlLnZhbHVlK24udGFyZ2V0LnZhbHVlKX19dmFyIHNWPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBsVih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIGNWPU1hdGguUEksdVY9MipjVixoVj0xZS02LGRWPXVWLWhWO2Z1bmN0aW9uIHBWKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gZlYoKXtyZXR1cm4gbmV3IHBWfWZ1bmN0aW9uIG1WKHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBnVih0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gX1YodCl7cmV0dXJuIHQucmFkaXVzfWZ1bmN0aW9uIHlWKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gdlYodCl7cmV0dXJuIHQuZW5kQW5nbGV9cFYucHJvdG90eXBlPWZWLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cFYsbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLGkpe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K24pKyIsIisodGhpcy5feTE9K2kpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLGkscixvKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtuKyIsIisgK2krIiwiKyh0aGlzLl94MT0rcikrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKHQsZSxuLGkscil7dmFyIG89dGhpcy5feDEsYT10aGlzLl95MSxzPShuPStuKS0odD0rdCksbD0oaT0raSktKGU9K2UpLGM9by10LHU9YS1lLGg9YypjK3UqdTtpZigocj0rcik8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIityKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZSBpZihoPmhWKWlmKE1hdGguYWJzKHUqcy1sKmMpPmhWJiZyKXt2YXIgZD1uLW8scD1pLWEsZj1zKnMrbCpsLG09ZCpkK3AqcCxnPU1hdGguc3FydChmKSxfPU1hdGguc3FydChoKSx5PXIqTWF0aC50YW4oKGNWLU1hdGguYWNvcygoZitoLW0pLygyKmcqXykpKS8yKSx2PXkvXyxiPXkvZztNYXRoLmFicyh2LTEpPmhWJiYodGhpcy5fKz0iTCIrKHQrdipjKSsiLCIrKGUrdip1KSksdGhpcy5fKz0iQSIrcisiLCIrcisiLDAsMCwiKyArKHUqZD5jKnApKyIsIisodGhpcy5feDE9dCtiKnMpKyIsIisodGhpcy5feTE9ZStiKmwpfWVsc2UgdGhpcy5fKz0iTCIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSl9LGFyYzpmdW5jdGlvbih0LGUsbixpLHIsbyl7dD0rdCxlPStlLG89ISFvO3ZhciBhPShuPStuKSpNYXRoLmNvcyhpKSxzPW4qTWF0aC5zaW4oaSksbD10K2EsYz1lK3MsdT0xXm8saD1vP2ktcjpyLWk7aWYobjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK24pO251bGw9PT10aGlzLl94MT90aGlzLl8rPSJNIitsKyIsIitjOihNYXRoLmFicyh0aGlzLl94MS1sKT5oVnx8TWF0aC5hYnModGhpcy5feTEtYyk+aFYpJiYodGhpcy5fKz0iTCIrbCsiLCIrYyksbiYmKGg8MCYmKGg9aCV1Vit1ViksaD5kVj90aGlzLl8rPSJBIituKyIsIituKyIsMCwxLCIrdSsiLCIrKHQtYSkrIiwiKyhlLXMpKyJBIituKyIsIituKyIsMCwxLCIrdSsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6aD5oViYmKHRoaXMuXys9IkEiK24rIiwiK24rIiwwLCIrICsoaD49Y1YpKyIsIit1KyIsIisodGhpcy5feDE9dCtuKk1hdGguY29zKHIpKSsiLCIrKHRoaXMuX3kxPWUrbipNYXRoLnNpbihyKSkpKX0scmVjdDpmdW5jdGlvbih0LGUsbixpKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpKyJoIisgK24rInYiKyAraSsiaCIrLW4rIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgYlY9IiQiO2Z1bmN0aW9uIHhWKCl7fWZ1bmN0aW9uIHdWKHQsZSl7dmFyIG49bmV3IHhWO2lmKHQgaW5zdGFuY2VvZiB4Vil0LmVhY2goKGZ1bmN0aW9uKHQsZSl7bi5zZXQoZSx0KX0pKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBpLHI9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytyPG87KW4uc2V0KHIsdFtyXSk7ZWxzZSBmb3IoOysrcjxvOyluLnNldChlKGk9dFtyXSxyLHQpLGkpfWVsc2UgaWYodClmb3IodmFyIGEgaW4gdCluLnNldChhLHRbYV0pO3JldHVybiBufWZ1bmN0aW9uIFNWKCl7cmV0dXJue319ZnVuY3Rpb24gTVYodCxlLG4pe3RbZV09bn1mdW5jdGlvbiBFVigpe3JldHVybiB3VigpfWZ1bmN0aW9uIFRWKHQsZSxuKXt0LnNldChlLG4pfWZ1bmN0aW9uIENWKCl7fXhWLnByb3RvdHlwZT13Vi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnhWLGhhczpmdW5jdGlvbih0KXtyZXR1cm4gYlYrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbYlYrdF19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzW2JWK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPWJWK3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWJWJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1iViYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09YlYmJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1iViYmdC5wdXNoKHtrZXk6ZS5zbGljZSgxKSx2YWx1ZTp0aGlzW2VdfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1iViYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKHRbMF09PT1iVilyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09YlYmJnQodGhpc1tlXSxlLnNsaWNlKDEpLHRoaXMpfX07dmFyIEFWPXdWLnByb3RvdHlwZTtmdW5jdGlvbiBrVih0LGUpe3ZhciBuPW5ldyBDVjtpZih0IGluc3RhbmNlb2YgQ1YpdC5lYWNoKChmdW5jdGlvbih0KXtuLmFkZCh0KX0pKTtlbHNlIGlmKHQpe3ZhciBpPS0xLHI9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysraTxyOyluLmFkZCh0W2ldKTtlbHNlIGZvcig7KytpPHI7KW4uYWRkKGUodFtpXSxpLHQpKX1yZXR1cm4gbn1mdW5jdGlvbiBMVih0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gUFYodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIGkgaW4gZSluW2ldPWVbaV07cmV0dXJuIG59ZnVuY3Rpb24gTlYoKXt9Q1YucHJvdG90eXBlPWtWLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Q1YsaGFzOkFWLmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbYlYrKHQrPSIiKV09dCx0aGlzfSxyZW1vdmU6QVYucmVtb3ZlLGNsZWFyOkFWLmNsZWFyLHZhbHVlczpBVi5rZXlzLHNpemU6QVYuc2l6ZSxlbXB0eTpBVi5lbXB0eSxlYWNoOkFWLmVhY2h9O3ZhciBJVj0uNyxSVj0xL0lWLE9WPSJcXHMqKFsrLV0/XFxkKylcXHMqIix6Vj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixEVj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsQlY9L14jKFswLTlhLWZdezN9KSQvLEhWPS9eIyhbMC05YS1mXXs2fSkkLyxGVj1uZXcgUmVnRXhwKCJecmdiXFwoIitbT1YsT1YsT1ZdKyJcXCkkIiksVlY9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW0RWLERWLERWXSsiXFwpJCIpLFVWPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbT1YsT1YsT1YselZdKyJcXCkkIiksalY9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tEVixEVixEVix6Vl0rIlxcKSQiKSxHVj1uZXcgUmVnRXhwKCJeaHNsXFwoIitbelYsRFYsRFZdKyJcXCkkIiksV1Y9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1t6VixEVixEVix6Vl0rIlxcKSQiKSxxVj17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBZVih0KXt2YXIgZTtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9QlYuZXhlYyh0KSk/bmV3IEpWKChlPXBhcnNlSW50KGVbMV0sMTYpKT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOihlPUhWLmV4ZWModCkpP1hWKHBhcnNlSW50KGVbMV0sMTYpKTooZT1GVi5leGVjKHQpKT9uZXcgSlYoZVsxXSxlWzJdLGVbM10sMSk6KGU9VlYuZXhlYyh0KSk/bmV3IEpWKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPVVWLmV4ZWModCkpPyRWKGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPWpWLmV4ZWModCkpPyRWKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPUdWLmV4ZWModCkpP1FWKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9V1YuZXhlYyh0KSk/UVYoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpxVi5oYXNPd25Qcm9wZXJ0eSh0KT9YVihxVlt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IEpWKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gWFYodCl7cmV0dXJuIG5ldyBKVih0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24gJFYodCxlLG4saSl7cmV0dXJuIGk8PTAmJih0PWU9bj1OYU4pLG5ldyBKVih0LGUsbixpKX1mdW5jdGlvbiBLVih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5WfHwodD1ZVih0KSksdD9uZXcgSlYoKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IEpWfWZ1bmN0aW9uIFpWKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9LVih0KTpuZXcgSlYodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIEpWKHQsZSxuLGkpe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBRVih0LGUsbixpKXtyZXR1cm4gaTw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IG5VKHQsZSxuLGkpfWZ1bmN0aW9uIHRVKHQpe2lmKHQgaW5zdGFuY2VvZiBuVSlyZXR1cm4gbmV3IG5VKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIE5WfHwodD1ZVih0KSksIXQpcmV0dXJuIG5ldyBuVTtpZih0IGluc3RhbmNlb2YgblUpcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LGk9dC5iLzI1NSxyPU1hdGgubWluKGUsbixpKSxvPU1hdGgubWF4KGUsbixpKSxhPU5hTixzPW8tcixsPShvK3IpLzI7cmV0dXJuIHM/KGE9ZT09PW8/KG4taSkvcys2KihuPGkpOm49PT1vPyhpLWUpL3MrMjooZS1uKS9zKzQscy89bDwuNT9vK3I6Mi1vLXIsYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBuVShhLHMsbCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGVVKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90VSh0KTpuZXcgblUodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIG5VKHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBpVSh0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9TFYoTlYsWVYse2Rpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKSsiIn19KSxMVihKVixaVixQVihOVix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9SVjpNYXRoLnBvdyhSVix0KSxuZXcgSlYodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/SVY6TWF0aC5wb3coSVYsdCksbmV3IEpWKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiAwPD10aGlzLnImJnRoaXMucjw9MjU1JiYwPD10aGlzLmcmJnRoaXMuZzw9MjU1JiYwPD10aGlzLmImJnRoaXMuYjw9MjU1JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSksTFYoblUsZVUsUFYoTlYse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/UlY6TWF0aC5wb3coUlYsdCksbmV3IG5VKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/SVY6TWF0aC5wb3coSVYsdCksbmV3IG5VKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLGk9bisobjwuNT9uOjEtbikqZSxyPTIqbi1pO3JldHVybiBuZXcgSlYoaVUodD49MjQwP3QtMjQwOnQrMTIwLHIsaSksaVUodCxyLGkpLGlVKHQ8MTIwP3QrMjQwOnQtMTIwLHIsaSksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpO3ZhciByVT1NYXRoLlBJLzE4MCxvVT0xODAvTWF0aC5QSSxhVT0uOTUwNDcsc1U9MS4wODg4MyxsVT00LzI5LGNVPTYvMjksdVU9MypjVSpjVTtmdW5jdGlvbiBoVSh0KXtpZih0IGluc3RhbmNlb2YgcFUpcmV0dXJuIG5ldyBwVSh0LmwsdC5hLHQuYix0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBiVSl7dmFyIGU9dC5oKnJVO3JldHVybiBuZXcgcFUodC5sLE1hdGguY29zKGUpKnQuYyxNYXRoLnNpbihlKSp0LmMsdC5vcGFjaXR5KX10IGluc3RhbmNlb2YgSlZ8fCh0PUtWKHQpKTt2YXIgbj1fVSh0LnIpLGk9X1UodC5nKSxyPV9VKHQuYiksbz1mVSgoLjQxMjQ1NjQqbisuMzU3NTc2MSppKy4xODA0Mzc1KnIpL2FVKSxhPWZVKCguMjEyNjcyOSpuKy43MTUxNTIyKmkrLjA3MjE3NSpyKS8xKTtyZXR1cm4gbmV3IHBVKDExNiphLTE2LDUwMCooby1hKSwyMDAqKGEtZlUoKC4wMTkzMzM5Km4rLjExOTE5MippKy45NTAzMDQxKnIpL3NVKSksdC5vcGFjaXR5KX1mdW5jdGlvbiBkVSh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/aFUodCk6bmV3IHBVKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBwVSh0LGUsbixpKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gZlUodCl7cmV0dXJuIHQ+LjAwODg1NjQ1MTY3OTAzNTYzMT9NYXRoLnBvdyh0LDEvMyk6dC91VStsVX1mdW5jdGlvbiBtVSh0KXtyZXR1cm4gdD5jVT90KnQqdDp1VSoodC1sVSl9ZnVuY3Rpb24gZ1UodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBfVSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiB5VSh0KXtpZih0IGluc3RhbmNlb2YgYlUpcmV0dXJuIG5ldyBiVSh0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBwVXx8KHQ9aFUodCkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqb1U7cmV0dXJuIG5ldyBiVShlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiB2VSh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eVUodCk6bmV3IGJVKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBiVSh0LGUsbixpKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K2l9TFYocFUsZFUsUFYoTlYse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcFUodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwVSh0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAsbj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiB0PTEqbVUodCksbmV3IEpWKGdVKDMuMjQwNDU0MiooZT1hVSptVShlKSktMS41MzcxMzg1KnQtLjQ5ODUzMTQqKG49c1UqbVUobikpKSxnVSgtLjk2OTI2NiplKzEuODc2MDEwOCp0Ky4wNDE1NTYqbiksZ1UoLjA1NTY0MzQqZS0uMjA0MDI1OSp0KzEuMDU3MjI1MipuKSx0aGlzLm9wYWNpdHkpfX0pKSxMVihiVSx2VSxQVihOVix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBiVSh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGJVKHRoaXMuaCx0aGlzLmMsdGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIGhVKHRoaXMpLnJnYigpfX0pKTt2YXIgeFU9LS4yOTIyNyx3VT0tLjkwNjQ5LFNVPTEuOTcyOTQ7ZnVuY3Rpb24gTVUodCl7aWYodCBpbnN0YW5jZW9mIFRVKXJldHVybiBuZXcgVFUodC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgSlZ8fCh0PUtWKHQpKTt2YXIgZT10LmcvMjU1LG49dC5iLzI1NSxpPSgtLjY1NTc2MzY2Njc5OTk5OTkqbit0LnIvMjU1Ki0xLjc4ODQ1MDM4MDYtMy41MTcyOTgyNDM4KmUpLy01Ljk2MTUxMjI5MTIscj1uLWksbz0oU1UqKGUtaSkteFUqcikvd1UsYT1NYXRoLnNxcnQobypvK3IqcikvKFNVKmkqKDEtaSkpLHM9YT9NYXRoLmF0YW4yKG8scikqb1UtMTIwOk5hTjtyZXR1cm4gbmV3IFRVKHM8MD9zKzM2MDpzLGEsaSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEVVKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9NVSh0KTpuZXcgVFUodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIFRVKHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1MVihUVSxFVSxQVihOVix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9SVjpNYXRoLnBvdyhSVix0KSxuZXcgVFUodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9JVjpNYXRoLnBvdyhJVix0KSxuZXcgVFUodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKnJVLGU9K3RoaXMubCxuPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqZSooMS1lKSxpPU1hdGguY29zKHQpLHI9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyBKVigyNTUqKGUrbiooLS4xNDg2MSppKzEuNzgyNzcqcikpLDI1NSooZStuKih4VSppK3dVKnIpKSwyNTUqKGUrbiooU1UqaSkpLHRoaXMub3BhY2l0eSl9fSkpO3ZhciBDVT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBBVSgpe2Zvcih2YXIgdCxlPTAsbj1hcmd1bWVudHMubGVuZ3RoLGk9e307ZTxuOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gaSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtpW3RdPVtdfXJldHVybiBuZXcga1UoaSl9ZnVuY3Rpb24ga1UodCl7dGhpcy5fPXR9ZnVuY3Rpb24gTFUodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixpPXQuaW5kZXhPZigiLiIpO2lmKGk+PTAmJihuPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIFBVKHQsZSl7Zm9yKHZhciBuLGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYoKG49dFtpXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gTlUodCxlLG4pe2Zvcih2YXIgaT0wLHI9dC5sZW5ndGg7aTxyOysraSlpZih0W2ldLm5hbWU9PT1lKXt0W2ldPUNVLHQ9dC5zbGljZSgwLGkpLmNvbmNhdCh0LnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1rVS5wcm90b3R5cGU9QVUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjprVSxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLGk9dGhpcy5fLHI9TFUodCsiIixpKSxvPS0xLGE9ci5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK288YTspaWYobj0odD1yW29dKS50eXBlKWlbbl09TlUoaVtuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIGkpaVtuXT1OVShpW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbzxhOylpZigobj0odD1yW29dKS50eXBlKSYmKG49UFUoaVtuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcga1UodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLGkscj1uZXcgQXJyYXkobiksbz0wO288bjsrK28pcltvXT1hcmd1bWVudHNbbysyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihvPTAsbj0oaT10aGlzLl9bdF0pLmxlbmd0aDtvPG47KytvKWlbb10udmFsdWUuYXBwbHkoZSxyKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciBpPXRoaXMuX1t0XSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKWlbcl0udmFsdWUuYXBwbHkoZSxuKX19O3ZhciBJVT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBSVSgpe2Zvcih2YXIgdCxlPTAsbj1hcmd1bWVudHMubGVuZ3RoLGk9e307ZTxuOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gaXx8L1tccy5dLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO2lbdF09W119cmV0dXJuIG5ldyBPVShpKX1mdW5jdGlvbiBPVSh0KXt0aGlzLl89dH1mdW5jdGlvbiB6VSh0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuPSIiLGk9dC5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49dC5zbGljZShpKzEpLHQ9dC5zbGljZSgwLGkpKSx0JiYhZS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6bn19KSl9ZnVuY3Rpb24gRFUodCxlKXtmb3IodmFyIG4saT0wLHI9dC5sZW5ndGg7aTxyOysraSlpZigobj10W2ldKS5uYW1lPT09ZSlyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBCVSh0LGUsbil7Zm9yKHZhciBpPTAscj10Lmxlbmd0aDtpPHI7KytpKWlmKHRbaV0ubmFtZT09PWUpe3RbaV09SVUsdD10LnNsaWNlKDAsaSkuY29uY2F0KHQuc2xpY2UoaSsxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTplLHZhbHVlOm59KSx0fU9VLnByb3RvdHlwZT1SVS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk9VLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG4saT10aGlzLl8scj16VSh0KyIiLGkpLG89LTEsYT1yLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrbzxhOylpZihuPSh0PXJbb10pLnR5cGUpaVtuXT1CVShpW25dLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKG4gaW4gaSlpW25dPUJVKGlbbl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytvPGE7KWlmKChuPSh0PXJbb10pLnR5cGUpJiYobj1EVShpW25dLHQubmFtZSkpKXJldHVybiBufSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciBuIGluIGUpdFtuXT1lW25dLnNsaWNlKCk7cmV0dXJuIG5ldyBPVSh0KX0sY2FsbDpmdW5jdGlvbih0LGUpe2lmKChuPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIG4saSxyPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbylyW29dPWFyZ3VtZW50c1tvKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKG89MCxuPShpPXRoaXMuX1t0XSkubGVuZ3RoO288bjsrK28paVtvXS52YWx1ZS5hcHBseShlLHIpfSxhcHBseTpmdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIGk9dGhpcy5fW3RdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3IpaVtyXS52YWx1ZS5hcHBseShlLG4pfX07dmFyIEhVPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixGVT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6SFUseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBWVSh0KXt2YXIgZT10Kz0iIixuPWUuaW5kZXhPZigiOiIpO3JldHVybiBuPj0wJiYieG1sbnMiIT09KGU9dC5zbGljZSgwLG4pKSYmKHQ9dC5zbGljZShuKzEpKSxGVS5oYXNPd25Qcm9wZXJ0eShlKT97c3BhY2U6RlVbZV0sbG9jYWw6dH06dH1mdW5jdGlvbiBVVSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnQsbj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gbj09PUhVJiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1IVT9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMobix0KX19ZnVuY3Rpb24galUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gR1UodCl7dmFyIGU9VlUodCk7cmV0dXJuKGUubG9jYWw/alU6VVUpKGUpfWZ1bmN0aW9uIFdVKCl7fWZ1bmN0aW9uIHFVKHQpe3JldHVybiBudWxsPT10P1dVOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19ZnVuY3Rpb24gWVUoKXtyZXR1cm5bXX1mdW5jdGlvbiBYVSh0KXtyZXR1cm4gbmV3IEFycmF5KHQubGVuZ3RoKX1mdW5jdGlvbiAkVSh0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX1mdW5jdGlvbiBLVSh0LGUsbixpLHIsbyl7Zm9yKHZhciBhLHM9MCxsPWUubGVuZ3RoLGM9by5sZW5ndGg7czxjOysrcykoYT1lW3NdKT8oYS5fX2RhdGFfXz1vW3NdLGlbc109YSk6bltzXT1uZXcgJFUodCxvW3NdKTtmb3IoO3M8bDsrK3MpKGE9ZVtzXSkmJihyW3NdPWEpfWZ1bmN0aW9uIFpVKHQsZSxuLGkscixvLGEpe3ZhciBzLGwsYyx1PXt9LGg9ZS5sZW5ndGgsZD1vLmxlbmd0aCxwPW5ldyBBcnJheShoKTtmb3Iocz0wO3M8aDsrK3MpKGw9ZVtzXSkmJihwW3NdPWM9IiQiK2EuY2FsbChsLGwuX19kYXRhX18scyxlKSxjIGluIHU/cltzXT1sOnVbY109bCk7Zm9yKHM9MDtzPGQ7KytzKShsPXVbYz0iJCIrYS5jYWxsKHQsb1tzXSxzLG8pXSk/KGlbc109bCxsLl9fZGF0YV9fPW9bc10sdVtjXT1udWxsKTpuW3NdPW5ldyAkVSh0LG9bc10pO2ZvcihzPTA7czxoOysrcykobD1lW3NdKSYmdVtwW3NdXT09PWwmJihyW3NdPWwpfWZ1bmN0aW9uIEpVKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIFFVKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiB0aih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGVqKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24gbmoodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gaWoodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fWZ1bmN0aW9uIHJqKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbil9fWZ1bmN0aW9uIG9qKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld31mdW5jdGlvbiBhaih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBzaih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fWZ1bmN0aW9uIGxqKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1pP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGksbil9fWZ1bmN0aW9uIGNqKHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8b2oodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gdWoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIGhqKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBkaih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX1mdW5jdGlvbiBwaih0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gZmoodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgbWoodCl9ZnVuY3Rpb24gbWoodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPXBqKHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gZ2oodCxlKXtmb3IodmFyIG49ZmoodCksaT0tMSxyPWUubGVuZ3RoOysraTxyOyluLmFkZChlW2ldKX1mdW5jdGlvbiBfaih0LGUpe2Zvcih2YXIgbj1maih0KSxpPS0xLHI9ZS5sZW5ndGg7KytpPHI7KW4ucmVtb3ZlKGVbaV0pfWZ1bmN0aW9uIHlqKHQpe3JldHVybiBmdW5jdGlvbigpe2dqKHRoaXMsdCl9fWZ1bmN0aW9uIHZqKHQpe3JldHVybiBmdW5jdGlvbigpe19qKHRoaXMsdCl9fWZ1bmN0aW9uIGJqKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP2dqOl9qKSh0aGlzLHQpfX1mdW5jdGlvbiB4aigpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gd2oodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBTaih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gTWooKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBFaih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBUaih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIENqKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIEFqKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24ga2ooKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBMaigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIFBqKCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITEpLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBOaigpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCEwKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9JFUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjokVSxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxtai5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciBJaj17fSxSaj1udWxsO2Z1bmN0aW9uIE9qKHQsZSxuKXtyZXR1cm4gdD16aih0LGUsbiksZnVuY3Rpb24oZSl7dmFyIG49ZS5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIHpqKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIHI9Umo7Umo9aTt0cnl7dC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLG4pfWZpbmFsbHl7Umo9cn19fWZ1bmN0aW9uIERqKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSkpfWZ1bmN0aW9uIEJqKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4saT0wLHI9LTEsbz1lLmxlbmd0aDtpPG87KytpKW49ZVtpXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytyXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLmNhcHR1cmUpOysrcj9lLmxlbmd0aD1yOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBIaih0LGUsbil7dmFyIGk9SWouaGFzT3duUHJvcGVydHkodC50eXBlKT9Pajp6ajtyZXR1cm4gZnVuY3Rpb24ocixvLGEpe3ZhciBzLGw9dGhpcy5fX29uLGM9aShlLG8sYSk7aWYobClmb3IodmFyIHU9MCxoPWwubGVuZ3RoO3U8aDsrK3UpaWYoKHM9bFt1XSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9YyxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsYyxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOmMsY2FwdHVyZTpufSxsP2wucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiBGaih0LGUsbixpKXt2YXIgcj1Sajt0LnNvdXJjZUV2ZW50PVJqLFJqPXQ7dHJ5e3JldHVybiBlLmFwcGx5KG4saSl9ZmluYWxseXtSaj1yfX1mdW5jdGlvbiBWaih0LGUsbil7dmFyIGk9b2oodCkscj1pLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiByP3I9bmV3IHIoZSxuKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KHIuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksci5kZXRhaWw9bi5kZXRhaWwpOnIuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gVWoodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gVmoodGhpcyx0LGUpfX1mdW5jdGlvbiBqaih0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBWaih0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fChJaj17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIEdqPVtudWxsXTtmdW5jdGlvbiBXaih0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiBxaih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IFdqKFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgV2ooW1t0XV0sR2opfWZ1bmN0aW9uIFlqKCl7Zm9yKHZhciB0LGU9Umo7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9ZnVuY3Rpb24gWGoodCxlKXt2YXIgbj10Lm93bmVyU1ZHRWxlbWVudHx8dDtpZihuLmNyZWF0ZVNWR1BvaW50KXt2YXIgaT1uLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIGkueD1lLmNsaWVudFgsaS55PWUuY2xpZW50WSxbKGk9aS5tYXRyaXhUcmFuc2Zvcm0odC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGkueV19dmFyIHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bZS5jbGllbnRYLXIubGVmdC10LmNsaWVudExlZnQsZS5jbGllbnRZLXIudG9wLXQuY2xpZW50VG9wXX1mdW5jdGlvbiAkaih0KXt2YXIgZT1ZaigpO3JldHVybiBlLmNoYW5nZWRUb3VjaGVzJiYoZT1lLmNoYW5nZWRUb3VjaGVzWzBdKSxYaih0LGUpfWZ1bmN0aW9uIEtqKHQsZSxuKXthcmd1bWVudHMubGVuZ3RoPDMmJihuPWUsZT1ZaigpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIGkscj0wLG89ZT9lLmxlbmd0aDowO3I8bzsrK3IpaWYoKGk9ZVtyXSkuaWRlbnRpZmllcj09PW4pcmV0dXJuIFhqKHQsaSk7cmV0dXJuIG51bGx9ZnVuY3Rpb24gWmooKXtSai5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBKaigpe1JqLnByZXZlbnREZWZhdWx0KCksUmouc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gUWoodCl7dmFyIGU9dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1xaih0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLEpqLCEwKTsib25zZWxlY3RzdGFydCJpbiBlP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLEpqLCEwKTooZS5fX25vc2VsZWN0PWUuc3R5bGUuTW96VXNlclNlbGVjdCxlLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiB0Ryh0LGUpe3ZhciBuPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGk9cWoodCkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtlJiYoaS5vbigiY2xpY2suZHJhZyIsSmosITApLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7aS5vbigiY2xpY2suZHJhZyIsbnVsbCl9KSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gbj9pLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKToobi5zdHlsZS5Nb3pVc2VyU2VsZWN0PW4uX19ub3NlbGVjdCxkZWxldGUgbi5fX25vc2VsZWN0KX1mdW5jdGlvbiBlRyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gbkcodCxlLG4saSxyLG8sYSxzLGwsYyl7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnN1YmplY3Q9bix0aGlzLmlkZW50aWZpZXI9aSx0aGlzLmFjdGl2ZT1yLHRoaXMueD1vLHRoaXMueT1hLHRoaXMuZHg9cyx0aGlzLmR5PWwsdGhpcy5fPWN9ZnVuY3Rpb24gaUcoKXtyZXR1cm4hUmouYnV0dG9ufWZ1bmN0aW9uIHJHKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX1mdW5jdGlvbiBvRyh0KXtyZXR1cm4gbnVsbD09dD97eDpSai54LHk6UmoueX06dH1mdW5jdGlvbiBhRygpe3JldHVybiJvbnRvdWNoc3RhcnQiaW4gdGhpc31Xai5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOldqLHNlbGVjdDpmdW5jdGlvbiBzRyh0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cVUodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcilmb3IodmFyIG8sYSxzPWVbcl0sbD1zLmxlbmd0aCxjPWlbcl09bmV3IEFycmF5KGwpLHU9MDt1PGw7Kyt1KShvPXNbdV0pJiYoYT10LmNhbGwobyxvLl9fZGF0YV9fLHUscykpJiYoIl9fZGF0YV9fImluIG8mJihhLl9fZGF0YV9fPW8uX19kYXRhX18pLGNbdV09YSk7cmV0dXJuIG5ldyBXaihpLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24gbEcodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PShmdW5jdGlvbiBlKHQpe3JldHVybiBudWxsPT10P1lVOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19KSh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLHI9W10sbz1bXSxhPTA7YTxpOysrYSlmb3IodmFyIHMsbD1uW2FdLGM9bC5sZW5ndGgsdT0wO3U8YzsrK3UpKHM9bFt1XSkmJihyLnB1c2godC5jYWxsKHMscy5fX2RhdGFfXyx1LGwpKSxvLnB1c2gocykpO3JldHVybiBuZXcgV2oocixvKX0sZmlsdGVyOmZ1bmN0aW9uIGNHKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD0oZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX0pKHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgscj1uZXcgQXJyYXkoaSksbz0wO288aTsrK28pZm9yKHZhciBhLHM9bltvXSxsPXMubGVuZ3RoLGM9cltvXT1bXSx1PTA7dTxsOysrdSkoYT1zW3VdKSYmdC5jYWxsKGEsYS5fX2RhdGFfXyx1LHMpJiZjLnB1c2goYSk7cmV0dXJuIG5ldyBXaihyLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uIHVHKHQsZSl7aWYoIXQpcmV0dXJuIGY9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx1PS0xLHRoaXMuZWFjaCgoZnVuY3Rpb24odCl7ZlsrK3VdPXR9KSksZjt2YXIgbj1lP1pVOktVLGk9dGhpcy5fcGFyZW50cyxyPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9KGZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkodCkpO2Zvcih2YXIgYT1yLmxlbmd0aCxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKSxjPW5ldyBBcnJheShhKSx1PTA7dTxhOysrdSl7dmFyIGg9aVt1XSxkPXJbdV0scD1kLmxlbmd0aCxmPXQuY2FsbChoLGgmJmguX19kYXRhX18sdSxpKSxtPWYubGVuZ3RoLGc9bFt1XT1uZXcgQXJyYXkobSksXz1zW3VdPW5ldyBBcnJheShtKTtuKGgsZCxnLF8sY1t1XT1uZXcgQXJyYXkocCksZixlKTtmb3IodmFyIHksdixiPTAseD0wO2I8bTsrK2IpaWYoeT1nW2JdKXtmb3IoYj49eCYmKHg9YisxKTshKHY9X1t4XSkmJisreDxtOyk7eS5fbmV4dD12fHxudWxsfX1yZXR1cm4ocz1uZXcgV2oocyxpKSkuX2VudGVyPWwscy5fZXhpdD1jLHN9LGVudGVyOmZ1bmN0aW9uIGhHKCl7cmV0dXJuIG5ldyBXaih0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChYVSksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24gZEcoKXtyZXR1cm4gbmV3IFdqKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoWFUpLHRoaXMuX3BhcmVudHMpfSxqb2luOmZ1bmN0aW9uIHBHKHQsZSxuKXt2YXIgaT10aGlzLmVudGVyKCkscj10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dChpKTppLmFwcGVuZCh0KyIiKSxudWxsIT1lJiYocj1lKHIpKSxudWxsPT1uP28ucmVtb3ZlKCk6bihvKSxpJiZyP2kubWVyZ2Uocikub3JkZXIoKTpyfSxtZXJnZTpmdW5jdGlvbiBmRyh0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLGk9ZS5sZW5ndGgscj1NYXRoLm1pbihpLG4ubGVuZ3RoKSxvPW5ldyBBcnJheShpKSxhPTA7YTxyOysrYSlmb3IodmFyIHMsbD1lW2FdLGM9blthXSx1PWwubGVuZ3RoLGg9b1thXT1uZXcgQXJyYXkodSksZD0wO2Q8dTsrK2QpKHM9bFtkXXx8Y1tkXSkmJihoW2RdPXMpO2Zvcig7YTxpOysrYSlvW2FdPWVbYV07cmV0dXJuIG5ldyBXaihvLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbiBtRygpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxuPXQubGVuZ3RoOysrZTxuOylmb3IodmFyIGkscj10W2VdLG89ci5sZW5ndGgtMSxhPXJbb107LS1vPj0wOykoaT1yW29dKSYmKGEmJjReaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKSYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpLGEpLGE9aSk7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24gZ0codCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD1KVSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKXtmb3IodmFyIGEscz1uW29dLGw9cy5sZW5ndGgsYz1yW29dPW5ldyBBcnJheShsKSx1PTA7dTxsOysrdSkoYT1zW3VdKSYmKGNbdV09YSk7Yy5zb3J0KGUpfXJldHVybiBuZXcgV2oocix0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uIF9HKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbiB5Rygpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3RbKytlXT10aGlzfSkpLHR9LG5vZGU6ZnVuY3Rpb24gdkcoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciBpPXRbZV0scj0wLG89aS5sZW5ndGg7cjxvOysrcil7dmFyIGE9aVtyXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uIGJHKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeysrdH0pKSx0fSxlbXB0eTpmdW5jdGlvbiB4Rygpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbiB3Ryh0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxpPWUubGVuZ3RoO248aTsrK24pZm9yKHZhciByLG89ZVtuXSxhPTAscz1vLmxlbmd0aDthPHM7KythKShyPW9bYV0pJiZ0LmNhbGwocixyLl9fZGF0YV9fLGEsbyk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24gU0codCxlKXt2YXIgbj1WVSh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP2kuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTppLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/dGo6UVU6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9yajppajpuLmxvY2FsP25qOmVqKShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24gTUcodCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP2FqOiJmdW5jdGlvbiI9PXR5cGVvZiBlP2xqOnNqKSh0LGUsbnVsbD09bj8iIjpuKSk6Y2oodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uIEVHKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/dWo6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZGo6aGopKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uIFRHKHQsZSl7dmFyIG49cGoodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9ZmoodGhpcy5ub2RlKCkpLHI9LTEsbz1uLmxlbmd0aDsrK3I8bzspaWYoIWkuY29udGFpbnMobltyXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/Ymo6ZT95ajp2aikobixlKSl9LHRleHQ6ZnVuY3Rpb24gQ0codCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/eGo6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P1NqOndqKSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24gQUcodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/TWo6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P1RqOkVqKSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbiBrRygpe3JldHVybiB0aGlzLmVhY2goQ2opfSxsb3dlcjpmdW5jdGlvbiBMRygpe3JldHVybiB0aGlzLmVhY2goQWopfSxhcHBlbmQ6ZnVuY3Rpb24gUEcodCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpHVSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24gTkcodCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkdVKHQpLGk9bnVsbD09ZT9rajoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOnFVKGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24gSUcoKXtyZXR1cm4gdGhpcy5lYWNoKExqKX0sY2xvbmU6ZnVuY3Rpb24gUkcodCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/Tmo6UGopfSxkYXR1bTpmdW5jdGlvbiBPRyh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uIHpHKHQsZSxuKXt2YXIgaSxyLG89RGoodCsiIiksYT1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/SGo6QmosbnVsbD09biYmKG49ITEpLGk9MDtpPGE7KytpKXRoaXMuZWFjaChzKG9baV0sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgbCxjPTAsdT1zLmxlbmd0aDtjPHU7KytjKWZvcihpPTAsbD1zW2NdO2k8YTsrK2kpaWYoKHI9b1tpXSkudHlwZT09PWwudHlwZSYmci5uYW1lPT09bC5uYW1lKXJldHVybiBsLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbiBERyh0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2pqOlVqKSh0LGUpKX19LG5HLnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gdD09PXRoaXMuXz90aGlzOnR9O3ZhciBCRz17fSxIRz17fTtmdW5jdGlvbiBGRyh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK3QubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrZSsiXSJ9KSkuam9pbigiLCIpKyJ9Iil9ZnVuY3Rpb24gVkcodCl7dmFyIGU9bmV3IFJlZ0V4cCgnWyInK3QrIlxuXHJdIiksbj10LmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gaSh0LGUpe3ZhciBpLHI9W10sbz10Lmxlbmd0aCxhPTAscz0wLGw9bzw9MCxjPSExO2Z1bmN0aW9uIHUoKXtpZihsKXJldHVybiBIRztpZihjKXJldHVybiBjPSExLEJHO3ZhciBlLGkscj1hO2lmKDM0PT09dC5jaGFyQ29kZUF0KHIpKXtmb3IoO2ErKzxvJiYzNCE9PXQuY2hhckNvZGVBdChhKXx8MzQ9PT10LmNoYXJDb2RlQXQoKythKTspO3JldHVybihlPWEpPj1vP2w9ITA6MTA9PT0oaT10LmNoYXJDb2RlQXQoYSsrKSk/Yz0hMDoxMz09PWkmJihjPSEwLDEwPT09dC5jaGFyQ29kZUF0KGEpJiYrK2EpLHQuc2xpY2UocisxLGUtMSkucmVwbGFjZSgvIiIvZywnIicpfWZvcig7YTxvOyl7aWYoMTA9PT0oaT10LmNoYXJDb2RlQXQoZT1hKyspKSljPSEwO2Vsc2UgaWYoMTM9PT1pKWM9ITAsMTA9PT10LmNoYXJDb2RlQXQoYSkmJisrYTtlbHNlIGlmKGkhPT1uKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKHIsZSl9cmV0dXJuIGw9ITAsdC5zbGljZShyLG8pfWZvcigxMD09PXQuY2hhckNvZGVBdChvLTEpJiYtLW8sMTM9PT10LmNoYXJDb2RlQXQoby0xKSYmLS1vOyhpPXUoKSkhPT1IRzspe2Zvcih2YXIgaD1bXTtpIT09QkcmJmkhPT1IRzspaC5wdXNoKGkpLGk9dSgpO2UmJm51bGw9PShoPWUoaCxzKyspKXx8ci5wdXNoKGgpfXJldHVybiByfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIGUubWFwKG8pLmpvaW4odCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbnVsbD09dD8iIjplLnRlc3QodCs9IiIpPyciJyt0LnJlcGxhY2UoLyIvZywnIiInKSsnIic6dH1yZXR1cm57cGFyc2U6ZnVuY3Rpb24gYSh0LGUpe3ZhciBuLHIsbz1pKHQsKGZ1bmN0aW9uKHQsaSl7aWYobilyZXR1cm4gbih0LGktMSk7cj10LG49ZT8oZnVuY3Rpb24gbyh0LGUpe3ZhciBuPUZHKHQpO3JldHVybiBmdW5jdGlvbihpLHIpe3JldHVybiBlKG4oaSkscix0KX19KSh0LGUpOkZHKHQpfSkpO3JldHVybiBvLmNvbHVtbnM9cnx8W10sb30scGFyc2VSb3dzOmksZm9ybWF0OmZ1bmN0aW9uIHMoZSxuKXtyZXR1cm4gbnVsbD09biYmKG49KGZ1bmN0aW9uIGkodCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSxuPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgaSBpbiB0KWkgaW4gZXx8bi5wdXNoKGVbaV09aSl9KSksbn0pKGUpKSxbbi5tYXAobykuam9pbih0KV0uY29uY2F0KGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBvKGVbdF0pfSkpLmpvaW4odCl9KSkpLmpvaW4oIlxuIil9LGZvcm1hdFJvd3M6ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC5tYXAocikuam9pbigiXG4iKX19fXZhciBVRz1WRygiLCIpLGpHPVVHLnBhcnNlLEdHPVVHLnBhcnNlUm93cyxXRz1VRy5mb3JtYXQscUc9VUcuZm9ybWF0Um93cyxZRz1WRygiXHQiKSxYRz1ZRy5wYXJzZSwkRz1ZRy5wYXJzZVJvd3MsS0c9WUcuZm9ybWF0LFpHPVlHLmZvcm1hdFJvd3M7ZnVuY3Rpb24gSkcodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQ6LS10KigyLXQpKzEpLzJ9ZnVuY3Rpb24gUUcodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9dmFyIHRXPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIE1hdGgucG93KHQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KSgzKSxlVz0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxLU1hdGgucG93KDEtdCxlKX1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0pKDMpLG5XPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdyh0LGUpOjItTWF0aC5wb3coMi10LGUpKS8yfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSkoMyksaVc9TWF0aC5QSSxyVz1pVy8yO2Z1bmN0aW9uIG9XKHQpe3JldHVybigxLU1hdGguY29zKGlXKnQpKS8yfWZ1bmN0aW9uIGFXKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3coMiwxMCp0LTEwKToyLU1hdGgucG93KDIsMTAtMTAqdCkpLzJ9ZnVuY3Rpb24gc1codCl7cmV0dXJuKCh0Kj0yKTw9MT8xLU1hdGguc3FydCgxLXQqdCk6TWF0aC5zcXJ0KDEtKHQtPTIpKnQpKzEpLzJ9dmFyIGxXPTcuNTYyNTtmdW5jdGlvbiBjVyh0KXtyZXR1cm4odD0rdCk8LjM2MzYzNjM2MzYzNjM2MzY1P2xXKnQqdDp0PC43MjcyNzI3MjcyNzI3MjczP2xXKih0LT0uNTQ1NDU0NTQ1NDU0NTQ1NCkqdCsuNzU6dDwuOTA5MDkwOTA5MDkwOTA5MT9sVyoodC09LjgxODE4MTgxODE4MTgxODIpKnQrLjkzNzU6bFcqKHQtPS45NTQ1NDU0NTQ1NDU0NTQ2KSp0Ky45ODQzNzV9dmFyIHVXPTEuNzAxNTgsaFc9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdCp0KigoZSsxKSp0LWUpfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0pKHVXKSxkVz0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybi0tdCp0KigoZSsxKSp0K2UpKzF9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSkodVcpLHBXPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuKCh0Kj0yKTwxP3QqdCooKGUrMSkqdC1lKToodC09MikqdCooKGUrMSkqdCtlKSsyKS8yfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0pKHVXKSxmVz0yKk1hdGguUEksbVc9KGZ1bmN0aW9uIHQoZSxuKXt2YXIgaT1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPWZXKTtmdW5jdGlvbiByKHQpe3JldHVybiBlKk1hdGgucG93KDIsMTAqLS10KSpNYXRoLnNpbigoaS10KS9uKX1yZXR1cm4gci5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKmZXKX0sci5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0scn0pKDEsLjMpLGdXPShmdW5jdGlvbiB0KGUsbil7dmFyIGk9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1mVyk7ZnVuY3Rpb24gcih0KXtyZXR1cm4gMS1lKk1hdGgucG93KDIsLTEwKih0PSt0KSkqTWF0aC5zaW4oKHQraSkvbil9cmV0dXJuIHIuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipmVyl9LHIucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LHJ9KSgxLC4zKSxfVz0oZnVuY3Rpb24gdChlLG4pe3ZhciBpPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89ZlcpO2Z1bmN0aW9uIHIodCl7cmV0dXJuKCh0PTIqdC0xKTwwP2UqTWF0aC5wb3coMiwxMCp0KSpNYXRoLnNpbigoaS10KS9uKToyLWUqTWF0aC5wb3coMiwtMTAqdCkqTWF0aC5zaW4oKGkrdCkvbikpLzJ9cmV0dXJuIHIuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipmVyl9LHIucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LHJ9KSgxLC4zKTtmdW5jdGlvbiB5Vyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gdlcoKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9ZnVuY3Rpb24gYlcodCxlLG4saSl7aWYoaXNOYU4oZSl8fGlzTmFOKG4pKXJldHVybiB0O3ZhciByLG8sYSxzLGwsYyx1LGgsZCxwPXQuX3Jvb3QsZj17ZGF0YTppfSxtPXQuX3gwLGc9dC5feTAsXz10Ll94MSx5PXQuX3kxO2lmKCFwKXJldHVybiB0Ll9yb290PWYsdDtmb3IoO3AubGVuZ3RoOylpZigoYz1lPj0obz0obStfKS8yKSk/bT1vOl89bywodT1uPj0oYT0oZyt5KS8yKSk/Zz1hOnk9YSxyPXAsIShwPXBbaD11PDwxfGNdKSlyZXR1cm4gcltoXT1mLHQ7aWYocz0rdC5feC5jYWxsKG51bGwscC5kYXRhKSxsPSt0Ll95LmNhbGwobnVsbCxwLmRhdGEpLGU9PT1zJiZuPT09bClyZXR1cm4gZi5uZXh0PXAscj9yW2hdPWY6dC5fcm9vdD1mLHQ7ZG97cj1yP3JbaF09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLChjPWU+PShvPShtK18pLzIpKT9tPW86Xz1vLCh1PW4+PShhPShnK3kpLzIpKT9nPWE6eT1hfXdoaWxlKChoPXU8PDF8Yyk9PShkPShsPj1hKTw8MXxzPj1vKSk7cmV0dXJuIHJbZF09cCxyW2hdPWYsdH1mdW5jdGlvbiB4Vyh0LGUsbixpLHIpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPW4sdGhpcy54MT1pLHRoaXMueTE9cn1mdW5jdGlvbiB3Vyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBTVyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBNVyh0LGUsbil7dmFyIGk9bmV3IEVXKG51bGw9PWU/d1c6ZSxudWxsPT1uP1NXOm4sTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9pOmkuYWRkQWxsKHQpfWZ1bmN0aW9uIEVXKHQsZSxuLGkscixvKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3gwPW4sdGhpcy5feTA9aSx0aGlzLl94MT1yLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gVFcodCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0sbj1lO3Q9dC5uZXh0OyluPW4ubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBDVz1NVy5wcm90b3R5cGU9RVcucHJvdG90eXBlO2Z1bmN0aW9uIEFXKHQpe3JldHVybiB0LngrdC52eH1mdW5jdGlvbiBrVyh0KXtyZXR1cm4gdC55K3Qudnl9Q1cuY29weT1mdW5jdGlvbigpe3ZhciB0LGUsbj1uZXcgRVcodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxpPXRoaXMuX3Jvb3Q7aWYoIWkpcmV0dXJuIG47aWYoIWkubGVuZ3RoKXJldHVybiBuLl9yb290PVRXKGkpLG47Zm9yKHQ9W3tzb3VyY2U6aSx0YXJnZXQ6bi5fcm9vdD1uZXcgQXJyYXkoNCl9XTtpPXQucG9wKCk7KWZvcih2YXIgcj0wO3I8NDsrK3IpKGU9aS5zb3VyY2Vbcl0pJiYoZS5sZW5ndGg/dC5wdXNoKHtzb3VyY2U6ZSx0YXJnZXQ6aS50YXJnZXRbcl09bmV3IEFycmF5KDQpfSk6aS50YXJnZXRbcl09VFcoZSkpO3JldHVybiBufSxDVy5hZGQ9ZnVuY3Rpb24gTFcodCl7dmFyIGU9K3RoaXMuX3guY2FsbChudWxsLHQpLG49K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiBiVyh0aGlzLmNvdmVyKGUsbiksZSxuLHQpfSxDVy5hZGRBbGw9ZnVuY3Rpb24gUFcodCl7dmFyIGUsbixpLHIsbz10Lmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPTEvMCxjPTEvMCx1PS0xLzAsaD0tMS8wO2ZvcihuPTA7bjxvOysrbilpc05hTihpPSt0aGlzLl94LmNhbGwobnVsbCxlPXRbbl0pKXx8aXNOYU4ocj0rdGhpcy5feS5jYWxsKG51bGwsZSkpfHwoYVtuXT1pLHNbbl09cixpPGwmJihsPWkpLGk+dSYmKHU9aSkscjxjJiYoYz1yKSxyPmgmJihoPXIpKTtpZihsPnV8fGM+aClyZXR1cm4gdGhpcztmb3IodGhpcy5jb3ZlcihsLGMpLmNvdmVyKHUsaCksbj0wO248bzsrK24pYlcodGhpcyxhW25dLHNbbl0sdFtuXSk7cmV0dXJuIHRoaXN9LENXLmNvdmVyPWZ1bmN0aW9uIE5XKHQsZSl7aWYoaXNOYU4odD0rdCl8fGlzTmFOKGU9K2UpKXJldHVybiB0aGlzO3ZhciBuPXRoaXMuX3gwLGk9dGhpcy5feTAscj10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKG4pKXI9KG49TWF0aC5mbG9vcih0KSkrMSxvPShpPU1hdGguZmxvb3IoZSkpKzE7ZWxzZXtmb3IodmFyIGEscyxsPXItbixjPXRoaXMuX3Jvb3Q7bj50fHx0Pj1yfHxpPmV8fGU+PW87KXN3aXRjaChzPShlPGkpPDwxfHQ8biwoYT1uZXcgQXJyYXkoNCkpW3NdPWMsYz1hLGwqPTIscyl7Y2FzZSAwOnI9bitsLG89aStsO2JyZWFrO2Nhc2UgMTpuPXItbCxvPWkrbDticmVhaztjYXNlIDI6cj1uK2wsaT1vLWw7YnJlYWs7Y2FzZSAzOm49ci1sLGk9by1sfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1jKX1yZXR1cm4gdGhpcy5feDA9bix0aGlzLl95MD1pLHRoaXMuX3gxPXIsdGhpcy5feTE9byx0aGlzfSxDVy5kYXRhPWZ1bmN0aW9uIElXKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3t0LnB1c2goZS5kYXRhKX13aGlsZShlPWUubmV4dCl9KSksdH0sQ1cuZXh0ZW50PWZ1bmN0aW9uIFJXKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxDVy5maW5kPWZ1bmN0aW9uIE9XKHQsZSxuKXt2YXIgaSxyLG8sYSxzLGwsYyx1PXRoaXMuX3gwLGg9dGhpcy5feTAsZD10aGlzLl94MSxwPXRoaXMuX3kxLGY9W10sbT10aGlzLl9yb290O2ZvcihtJiZmLnB1c2gobmV3IHhXKG0sdSxoLGQscCkpLG51bGw9PW4/bj0xLzA6KHU9dC1uLGg9ZS1uLGQ9dCtuLHA9ZStuLG4qPW4pO2w9Zi5wb3AoKTspaWYoISghKG09bC5ub2RlKXx8KHI9bC54MCk+ZHx8KG89bC55MCk+cHx8KGE9bC54MSk8dXx8KHM9bC55MSk8aCkpaWYobS5sZW5ndGgpe3ZhciBnPShyK2EpLzIsXz0obytzKS8yO2YucHVzaChuZXcgeFcobVszXSxnLF8sYSxzKSxuZXcgeFcobVsyXSxyLF8sZyxzKSxuZXcgeFcobVsxXSxnLG8sYSxfKSxuZXcgeFcobVswXSxyLG8sZyxfKSksKGM9KGU+PV8pPDwxfHQ+PWcpJiYobD1mW2YubGVuZ3RoLTFdLGZbZi5sZW5ndGgtMV09ZltmLmxlbmd0aC0xLWNdLGZbZi5sZW5ndGgtMS1jXT1sKX1lbHNle3ZhciB5PXQtK3RoaXMuX3guY2FsbChudWxsLG0uZGF0YSksdj1lLSt0aGlzLl95LmNhbGwobnVsbCxtLmRhdGEpLGI9eSp5K3YqdjtpZihiPG4pe3ZhciB4PU1hdGguc3FydChuPWIpO3U9dC14LGg9ZS14LGQ9dCt4LHA9ZSt4LGk9bS5kYXRhfX1yZXR1cm4gaX0sQ1cucmVtb3ZlPWZ1bmN0aW9uIHpXKHQpe2lmKGlzTmFOKG89K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4oYT0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBlLG4saSxyLG8sYSxzLGwsYyx1LGgsZCxwPXRoaXMuX3Jvb3QsZj10aGlzLl94MCxtPXRoaXMuX3kwLGc9dGhpcy5feDEsXz10aGlzLl95MTtpZighcClyZXR1cm4gdGhpcztpZihwLmxlbmd0aClmb3IoOzspe2lmKChjPW8+PShzPShmK2cpLzIpKT9mPXM6Zz1zLCh1PWE+PShsPShtK18pLzIpKT9tPWw6Xz1sLGU9cCwhKHA9cFtoPXU8PDF8Y10pKXJldHVybiB0aGlzO2lmKCFwLmxlbmd0aClicmVhazsoZVtoKzEmM118fGVbaCsyJjNdfHxlW2grMyYzXSkmJihuPWUsZD1oKX1mb3IoO3AuZGF0YSE9PXQ7KWlmKGk9cCwhKHA9cC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4ocj1wLm5leHQpJiZkZWxldGUgcC5uZXh0LGk/KHI/aS5uZXh0PXI6ZGVsZXRlIGkubmV4dCx0aGlzKTplPyhyP2VbaF09cjpkZWxldGUgZVtoXSwocD1lWzBdfHxlWzFdfHxlWzJdfHxlWzNdKSYmcD09PShlWzNdfHxlWzJdfHxlWzFdfHxlWzBdKSYmIXAubGVuZ3RoJiYobj9uW2RdPXA6dGhpcy5fcm9vdD1wKSx0aGlzKToodGhpcy5fcm9vdD1yLHRoaXMpfSxDVy5yZW1vdmVBbGw9ZnVuY3Rpb24gRFcodCl7Zm9yKHZhciBlPTAsbj10Lmxlbmd0aDtlPG47KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfSxDVy5yb290PWZ1bmN0aW9uIEJXKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LENXLnNpemU9ZnVuY3Rpb24gSFcoKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97Kyt0fXdoaWxlKGU9ZS5uZXh0KX0pKSx0fSxDVy52aXNpdD1mdW5jdGlvbiBGVyh0KXt2YXIgZSxuLGkscixvLGEscz1bXSxsPXRoaXMuX3Jvb3Q7Zm9yKGwmJnMucHVzaChuZXcgeFcobCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9cy5wb3AoKTspaWYoIXQobD1lLm5vZGUsaT1lLngwLHI9ZS55MCxvPWUueDEsYT1lLnkxKSYmbC5sZW5ndGgpe3ZhciBjPShpK28pLzIsdT0ocithKS8yOyhuPWxbM10pJiZzLnB1c2gobmV3IHhXKG4sYyx1LG8sYSkpLChuPWxbMl0pJiZzLnB1c2gobmV3IHhXKG4saSx1LGMsYSkpLChuPWxbMV0pJiZzLnB1c2gobmV3IHhXKG4sYyxyLG8sdSkpLChuPWxbMF0pJiZzLnB1c2gobmV3IHhXKG4saSxyLGMsdSkpfXJldHVybiB0aGlzfSxDVy52aXNpdEFmdGVyPWZ1bmN0aW9uIFZXKHQpe3ZhciBlLG49W10saT1bXTtmb3IodGhpcy5fcm9vdCYmbi5wdXNoKG5ldyB4Vyh0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIHI9ZS5ub2RlO2lmKHIubGVuZ3RoKXt2YXIgbyxhPWUueDAscz1lLnkwLGw9ZS54MSxjPWUueTEsdT0oYStsKS8yLGg9KHMrYykvMjsobz1yWzBdKSYmbi5wdXNoKG5ldyB4VyhvLGEscyx1LGgpKSwobz1yWzFdKSYmbi5wdXNoKG5ldyB4VyhvLHUscyxsLGgpKSwobz1yWzJdKSYmbi5wdXNoKG5ldyB4VyhvLGEsaCx1LGMpKSwobz1yWzNdKSYmbi5wdXNoKG5ldyB4VyhvLHUsaCxsLGMpKX1pLnB1c2goZSl9Zm9yKDtlPWkucG9wKCk7KXQoZS5ub2RlLGUueDAsZS55MCxlLngxLGUueTEpO3JldHVybiB0aGlzfSxDVy54PWZ1bmN0aW9uIFVXKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0sQ1cueT1mdW5jdGlvbiBqVyh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9O3ZhciBHVz0iJCI7ZnVuY3Rpb24gV1coKXt9ZnVuY3Rpb24gcVcodCxlKXt2YXIgbj1uZXcgV1c7aWYodCBpbnN0YW5jZW9mIFdXKXQuZWFjaCgoZnVuY3Rpb24odCxlKXtuLnNldChlLHQpfSkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGkscj0tMSxvPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK3I8bzspbi5zZXQocix0W3JdKTtlbHNlIGZvcig7KytyPG87KW4uc2V0KGUoaT10W3JdLHIsdCksaSl9ZWxzZSBpZih0KWZvcih2YXIgYSBpbiB0KW4uc2V0KGEsdFthXSk7cmV0dXJuIG59ZnVuY3Rpb24gWVcoKXt9V1cucHJvdG90eXBlPXFXLnByb3RvdHlwZT17Y29uc3RydWN0b3I6V1csaGFzOmZ1bmN0aW9uKHQpe3JldHVybiBHVyt0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1tHVyt0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbR1crdF09ZSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9R1crdDtyZXR1cm4gZSBpbiB0aGlzJiZkZWxldGUgdGhpc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09R1cmJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PUdXJiZ0LnB1c2goZS5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1HVyYmdC5wdXNoKHRoaXNbZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PUdXJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PUdXJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYodFswXT09PUdXKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1HVyYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTt2YXIgWFc9cVcucHJvdG90eXBlO2Z1bmN0aW9uICRXKHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIEtXKHQsZSl7dmFyIG49dC5nZXQoZSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2UpO3JldHVybiBufVlXLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WVcsaGFzOlhXLmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbR1crKHQrPSIiKV09dCx0aGlzfSxyZW1vdmU6WFcucmVtb3ZlLGNsZWFyOlhXLmNsZWFyLHZhbHVlczpYVy5rZXlzLHNpemU6WFcuc2l6ZSxlbXB0eTpYVy5lbXB0eSxlYWNoOlhXLmVhY2h9O3ZhciBaVz17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBKVygpe2Zvcih2YXIgdCxlPTAsbj1hcmd1bWVudHMubGVuZ3RoLGk9e307ZTxuOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gaXx8L1tccy5dLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO2lbdF09W119cmV0dXJuIG5ldyBRVyhpKX1mdW5jdGlvbiBRVyh0KXt0aGlzLl89dH1mdW5jdGlvbiB0cSh0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuPSIiLGk9dC5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49dC5zbGljZShpKzEpLHQ9dC5zbGljZSgwLGkpKSx0JiYhZS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6bn19KSl9ZnVuY3Rpb24gZXEodCxlKXtmb3IodmFyIG4saT0wLHI9dC5sZW5ndGg7aTxyOysraSlpZigobj10W2ldKS5uYW1lPT09ZSlyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBucSh0LGUsbil7Zm9yKHZhciBpPTAscj10Lmxlbmd0aDtpPHI7KytpKWlmKHRbaV0ubmFtZT09PWUpe3RbaV09WlcsdD10LnNsaWNlKDAsaSkuY29uY2F0KHQuc2xpY2UoaSsxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTplLHZhbHVlOm59KSx0fVFXLnByb3RvdHlwZT1KVy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlFXLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG4saT10aGlzLl8scj10cSh0KyIiLGkpLG89LTEsYT1yLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrbzxhOylpZihuPSh0PXJbb10pLnR5cGUpaVtuXT1ucShpW25dLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKG4gaW4gaSlpW25dPW5xKGlbbl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytvPGE7KWlmKChuPSh0PXJbb10pLnR5cGUpJiYobj1lcShpW25dLHQubmFtZSkpKXJldHVybiBufSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciBuIGluIGUpdFtuXT1lW25dLnNsaWNlKCk7cmV0dXJuIG5ldyBRVyh0KX0sY2FsbDpmdW5jdGlvbih0LGUpe2lmKChuPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIG4saSxyPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbylyW29dPWFyZ3VtZW50c1tvKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKG89MCxuPShpPXRoaXMuX1t0XSkubGVuZ3RoO288bjsrK28paVtvXS52YWx1ZS5hcHBseShlLHIpfSxhcHBseTpmdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIGk9dGhpcy5fW3RdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3IpaVtyXS52YWx1ZS5hcHBseShlLG4pfX07dmFyIGlxLHJxLG9xPTAsYXE9MCxzcT0wLGxxPTAsY3E9MCx1cT0wLGhxPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLGRxPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIHBxKCl7cmV0dXJuIGNxfHwoZHEoZnEpLGNxPWhxLm5vdygpK3VxKX1mdW5jdGlvbiBmcSgpe2NxPTB9ZnVuY3Rpb24gbXEoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIGdxKHQsZSxuKXt2YXIgaT1uZXcgbXE7cmV0dXJuIGkucmVzdGFydCh0LGUsbiksaX1mdW5jdGlvbiBfcSgpe2NxPShscT1ocS5ub3coKSkrdXEsb3E9YXE9MDt0cnl7IShmdW5jdGlvbiB0KCl7cHEoKSwrK29xO2Zvcih2YXIgdCxlPWlxO2U7KSh0PWNxLWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1vcX0pKCl9ZmluYWxseXtvcT0wLChmdW5jdGlvbiBlKCl7Zm9yKHZhciB0LGUsbj1pcSxpPTEvMDtuOyluLl9jYWxsPyhpPm4uX3RpbWUmJihpPW4uX3RpbWUpLHQ9bixuPW4uX25leHQpOihlPW4uX25leHQsbi5fbmV4dD1udWxsLG49dD90Ll9uZXh0PWU6aXE9ZSk7cnE9dCx2cShpKX0pKCksY3E9MH19ZnVuY3Rpb24geXEoKXt2YXIgdD1ocS5ub3coKSxlPXQtbHE7ZT4xZTMmJih1cS09ZSxscT10KX1mdW5jdGlvbiB2cSh0KXtvcXx8KGFxJiYoYXE9Y2xlYXJUaW1lb3V0KGFxKSksdC1jcT4yND8odDwxLzAmJihhcT1zZXRUaW1lb3V0KF9xLHQtaHEubm93KCktdXEpKSxzcSYmKHNxPWNsZWFySW50ZXJ2YWwoc3EpKSk6KHNxfHwobHE9aHEubm93KCksc3E9c2V0SW50ZXJ2YWwoeXEsMWUzKSksb3E9MSxkcShfcSkpKX1mdW5jdGlvbiBicSh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIHhxKHQpe3JldHVybiB0Lnl9bXEucHJvdG90eXBlPWdxLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bXEscmVzdGFydDpmdW5jdGlvbih0LGUsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtuPShudWxsPT1uP3BxKCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fHJxPT09dGhpc3x8KHJxP3JxLl9uZXh0PXRoaXM6aXE9dGhpcyxycT10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1uLHZxKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHZxKCkpfX07dmFyIHdxLFNxPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKTtmdW5jdGlvbiBNcSh0LGUpe2lmKChuPSh0PWU/dC50b0V4cG9uZW50aWFsKGUtMSk6dC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgbixpPXQuc2xpY2UoMCxuKTtyZXR1cm5baS5sZW5ndGg+MT9pWzBdK2kuc2xpY2UoMik6aSwrdC5zbGljZShuKzEpXX1mdW5jdGlvbiBFcSh0KXtyZXR1cm4odD1NcShNYXRoLmFicyh0KSkpP3RbMV06TmFOfWZ1bmN0aW9uIFRxKHQsZSl7dmFyIG49TXEodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgaT1uWzBdLHI9blsxXTtyZXR1cm4gcjwwPyIwLiIrbmV3IEFycmF5KC1yKS5qb2luKCIwIikraTppLmxlbmd0aD5yKzE/aS5zbGljZSgwLHIrMSkrIi4iK2kuc2xpY2UocisxKTppK25ldyBBcnJheShyLWkubGVuZ3RoKzIpLmpvaW4oIjAiKX12YXIgQ3E9eyIiOmZ1bmN0aW9uIEFxKHQsZSl7dDpmb3IodmFyIG4saT0odD10LnRvUHJlY2lzaW9uKGUpKS5sZW5ndGgscj0xLG89LTE7cjxpOysrcilzd2l0Y2godFtyXSl7Y2FzZSIuIjpvPW49cjticmVhaztjYXNlIjAiOjA9PT1vJiYobz1yKSxuPXI7YnJlYWs7Y2FzZSJlIjpicmVhayB0O2RlZmF1bHQ6bz4wJiYobz0wKX1yZXR1cm4gbz4wP3Quc2xpY2UoMCxvKSt0LnNsaWNlKG4rMSk6dH0sIiUiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKDEwMCp0KS50b0ZpeGVkKGUpfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKHQpe3JldHVybiB0KyIifSxkOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDEwKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRXhwb25lbnRpYWwoZSl9LGY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0ZpeGVkKGUpfSxnOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9QcmVjaXNpb24oZSl9LG86ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVHEoMTAwKnQsZSl9LHI6VHEsczpmdW5jdGlvbiBrcSh0LGUpe3ZhciBuPU1xKHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIGk9blswXSxyPW5bMV0sbz1yLSh3cT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyLzMpKSkpKzEsYT1pLmxlbmd0aDtyZXR1cm4gbz09PWE/aTpvPmE/aStuZXcgQXJyYXkoby1hKzEpLmpvaW4oIjAiKTpvPjA/aS5zbGljZSgwLG8pKyIuIitpLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK01xKHQsTWF0aC5tYXgoMCxlK28tMSkpWzBdfSxYOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KX19LExxPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLVwoIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KFthLXolXSk/JC9pO2Z1bmN0aW9uIFBxKHQpe3JldHVybiBuZXcgTnEodCl9ZnVuY3Rpb24gTnEodCl7aWYoIShlPUxxLmV4ZWModCkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrdCk7dmFyIGUsbj1lWzFdfHwiICIsaT1lWzJdfHwiPiIscj1lWzNdfHwiLSIsbz1lWzRdfHwiIixhPSEhZVs1XSxzPWVbNl0mJitlWzZdLGw9ISFlWzddLGM9ZVs4XSYmK2VbOF0uc2xpY2UoMSksdT1lWzldfHwiIjsibiI9PT11PyhsPSEwLHU9ImciKTpDcVt1XXx8KHU9IiIpLChhfHwiMCI9PT1uJiYiPSI9PT1pKSYmKGE9ITAsbj0iMCIsaT0iPSIpLHRoaXMuZmlsbD1uLHRoaXMuYWxpZ249aSx0aGlzLnNpZ249cix0aGlzLnN5bWJvbD1vLHRoaXMuemVybz1hLHRoaXMud2lkdGg9cyx0aGlzLmNvbW1hPWwsdGhpcy5wcmVjaXNpb249Yyx0aGlzLnR5cGU9dX1mdW5jdGlvbiBJcSh0KXtyZXR1cm4gdH1QcS5wcm90b3R5cGU9TnEucHJvdG90eXBlLE5xLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyhudWxsPT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsobnVsbD09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpK3RoaXMudHlwZX07dmFyIFJxLE9xLHpxLERxPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiwrUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTtmdW5jdGlvbiBCcSh0KXt2YXIgZT10Lmdyb3VwaW5nJiZ0LnRob3VzYW5kcz8oZnVuY3Rpb24gbih0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2Zvcih2YXIgcj1uLmxlbmd0aCxvPVtdLGE9MCxzPXRbMF0sbD0wO3I+MCYmcz4wJiYobCtzKzE+aSYmKHM9TWF0aC5tYXgoMSxpLWwpKSxvLnB1c2gobi5zdWJzdHJpbmcoci09cyxyK3MpKSwhKChsKz1zKzEpPmkpKTspcz10W2E9KGErMSkldC5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKGUpfX0pKHQuZ3JvdXBpbmcsdC50aG91c2FuZHMpOklxLGk9dC5jdXJyZW5jeSxyPXQuZGVjaW1hbCxvPXQubnVtZXJhbHM/KGZ1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1swLTldL2csKGZ1bmN0aW9uKGUpe3JldHVybiB0WytlXX0pKX19KSh0Lm51bWVyYWxzKTpJcSxzPXQucGVyY2VudHx8IiUiO2Z1bmN0aW9uIGwodCl7dmFyIG49KHQ9UHEodCkpLmZpbGwsYT10LmFsaWduLGw9dC5zaWduLGM9dC5zeW1ib2wsdT10Lnplcm8saD10LndpZHRoLGQ9dC5jb21tYSxwPXQucHJlY2lzaW9uLGY9dC50eXBlLG09IiQiPT09Yz9pWzBdOiIjIj09PWMmJi9bYm94WF0vLnRlc3QoZik/IjAiK2YudG9Mb3dlckNhc2UoKToiIixnPSIkIj09PWM/aVsxXTovWyVwXS8udGVzdChmKT9zOiIiLF89Q3FbZl0seT0hZnx8L1tkZWZncHJzJV0vLnRlc3QoZik7ZnVuY3Rpb24gdih0KXt2YXIgaSxzLGMsdj1tLGI9ZztpZigiYyI9PT1mKWI9Xyh0KStiLHQ9IiI7ZWxzZXt2YXIgeD0odD0rdCk8MDtpZih0PV8oTWF0aC5hYnModCkscCkseCYmMD09K3QmJih4PSExKSx2PSh4PyIoIj09PWw/bDoiLSI6Ii0iPT09bHx8IigiPT09bD8iIjpsKSt2LGI9KCJzIj09PWY/RHFbOCt3cS8zXToiIikrYisoeCYmIigiPT09bD8iKSI6IiIpLHkpZm9yKGk9LTEscz10Lmxlbmd0aDsrK2k8czspaWYoNDg+KGM9dC5jaGFyQ29kZUF0KGkpKXx8Yz41Nyl7Yj0oNDY9PT1jP3IrdC5zbGljZShpKzEpOnQuc2xpY2UoaSkpK2IsdD10LnNsaWNlKDAsaSk7YnJlYWt9fWQmJiF1JiYodD1lKHQsMS8wKSk7dmFyIHc9di5sZW5ndGgrdC5sZW5ndGgrYi5sZW5ndGgsUz13PGg/bmV3IEFycmF5KGgtdysxKS5qb2luKG4pOiIiO3N3aXRjaChkJiZ1JiYodD1lKFMrdCxTLmxlbmd0aD9oLWIubGVuZ3RoOjEvMCksUz0iIiksYSl7Y2FzZSI8Ijp0PXYrdCtiK1M7YnJlYWs7Y2FzZSI9Ijp0PXYrUyt0K2I7YnJlYWs7Y2FzZSJeIjp0PVMuc2xpY2UoMCx3PVMubGVuZ3RoPj4xKSt2K3QrYitTLnNsaWNlKHcpO2JyZWFrO2RlZmF1bHQ6dD1TK3YrdCtifXJldHVybiBvKHQpfXJldHVybiBwPW51bGw9PXA/Zj82OjEyOi9bZ3Byc10vLnRlc3QoZik/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxwKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxwKSksdi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0KyIifSx2fXJldHVybntmb3JtYXQ6bCxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24gYyh0LGUpe3ZhciBuPWwoKCh0PVBxKHQpKS50eXBlPSJmIix0KSksaT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihFcShlKS8zKSkpLHI9TWF0aC5wb3coMTAsLWkpLG89RHFbOCtpLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbihyKnQpK299fX19ZnVuY3Rpb24gSHEodCl7cmV0dXJuIFJxPUJxKHQpLE9xPVJxLmZvcm1hdCx6cT1ScS5mb3JtYXRQcmVmaXgsUnF9ZnVuY3Rpb24gRnEoKXtyZXR1cm4gbmV3IFZxfWZ1bmN0aW9uIFZxKCl7dGhpcy5yZXNldCgpfUhxKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pLFZxLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VnEscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbih0KXtqcShVcSx0LHRoaXMudCksanEodGhpcyxVcS5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9VXEudDp0aGlzLnM9VXEudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgVXE9bmV3IFZxO2Z1bmN0aW9uIGpxKHQsZSxuKXt2YXIgaT10LnM9ZStuLHI9aS1lO3QudD1lLShpLXIpKyhuLXIpfXZhciBHcT0xZS02LFdxPU1hdGguUEkscXE9V3EvMixZcT1XcS80LFhxPTIqV3EsJHE9MTgwL1dxLEtxPVdxLzE4MCxacT1NYXRoLmFicyxKcT1NYXRoLmF0YW4sUXE9TWF0aC5hdGFuMix0WT1NYXRoLmNvcyxlWT1NYXRoLmNlaWwsblk9TWF0aC5leHAsaVk9TWF0aC5sb2csclk9TWF0aC5wb3csb1k9TWF0aC5zaW4sYVk9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9LHNZPU1hdGguc3FydCxsWT1NYXRoLnRhbjtmdW5jdGlvbiBjWSh0KXtyZXR1cm4gdD4xPzA6dDwtMT9XcTpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gdVkodCl7cmV0dXJuIHQ+MT9xcTp0PC0xPy1xcTpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gaFkodCl7cmV0dXJuKHQ9b1kodC8yKSkqdH1mdW5jdGlvbiBkWSgpe31mdW5jdGlvbiBwWSh0LGUpe3QmJm1ZLmhhc093blByb3BlcnR5KHQudHlwZSkmJm1ZW3QudHlwZV0odCxlKX12YXIgZlk9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtwWSh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspcFkobltpXS5nZW9tZXRyeSxlKX19LG1ZPXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe2UucG9pbnQoKHQ9dC5jb29yZGluYXRlcylbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspZS5wb2ludCgodD1uW2ldKVswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Z1kodC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KWdZKG5baV0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe19ZKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspX1kobltpXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZ2VvbWV0cmllcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KXBZKG5baV0sZSl9fTtmdW5jdGlvbiBnWSh0LGUsbil7dmFyIGkscj0tMSxvPXQubGVuZ3RoLW47Zm9yKGUubGluZVN0YXJ0KCk7KytyPG87KWUucG9pbnQoKGk9dFtyXSlbMF0saVsxXSxpWzJdKTtlLmxpbmVFbmQoKX1mdW5jdGlvbiBfWSh0LGUpe3ZhciBuPS0xLGk9dC5sZW5ndGg7Zm9yKGUucG9seWdvblN0YXJ0KCk7KytuPGk7KWdZKHRbbl0sZSwxKTtlLnBvbHlnb25FbmQoKX1mdW5jdGlvbiB5WSh0LGUpe3QmJmZZLmhhc093blByb3BlcnR5KHQudHlwZSk/ZllbdC50eXBlXSh0LGUpOnBZKHQsZSl9dmFyIHZZLGJZLHhZLHdZLFNZLE1ZPUZxKCksRVk9RnEoKSxUWT17cG9pbnQ6ZFksbGluZVN0YXJ0OmRZLGxpbmVFbmQ6ZFkscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7TVkucmVzZXQoKSxUWS5saW5lU3RhcnQ9Q1ksVFkubGluZUVuZD1BWX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciB0PStNWTtFWS5hZGQodDwwP1hxK3Q6dCksdGhpcy5saW5lU3RhcnQ9dGhpcy5saW5lRW5kPXRoaXMucG9pbnQ9ZFl9LHNwaGVyZTpmdW5jdGlvbigpe0VZLmFkZChYcSl9fTtmdW5jdGlvbiBDWSgpe1RZLnBvaW50PWtZfWZ1bmN0aW9uIEFZKCl7TFkodlksYlkpfWZ1bmN0aW9uIGtZKHQsZSl7VFkucG9pbnQ9TFksdlk9dCxiWT1lLHhZPXQqPUtxLHdZPXRZKGU9KGUqPUtxKS8yK1lxKSxTWT1vWShlKX1mdW5jdGlvbiBMWSh0LGUpe3ZhciBuPSh0Kj1LcSkteFksaT1uPj0wPzE6LTEscj1pKm4sbz10WShlPShlKj1LcSkvMitZcSksYT1vWShlKSxzPVNZKmEsbD13WSpvK3MqdFkociksYz1zKmkqb1kocik7TVkuYWRkKFFxKGMsbCkpLHhZPXQsd1k9byxTWT1hfWZ1bmN0aW9uIFBZKHQpe3JldHVybltRcSh0WzFdLHRbMF0pLHVZKHRbMl0pXX1mdW5jdGlvbiBOWSh0KXt2YXIgZT10WzBdLG49dFsxXSxpPXRZKG4pO3JldHVybltpKnRZKGUpLGkqb1koZSksb1kobildfWZ1bmN0aW9uIElZKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfWZ1bmN0aW9uIFJZKHQsZSl7cmV0dXJuW3RbMV0qZVsyXS10WzJdKmVbMV0sdFsyXSplWzBdLXRbMF0qZVsyXSx0WzBdKmVbMV0tdFsxXSplWzBdXX1mdW5jdGlvbiBPWSh0LGUpe3RbMF0rPWVbMF0sdFsxXSs9ZVsxXSx0WzJdKz1lWzJdfWZ1bmN0aW9uIHpZKHQsZSl7cmV0dXJuW3RbMF0qZSx0WzFdKmUsdFsyXSplXX1mdW5jdGlvbiBEWSh0KXt2YXIgZT1zWSh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSk7dFswXS89ZSx0WzFdLz1lLHRbMl0vPWV9dmFyIEJZLEhZLEZZLFZZLFVZLGpZLEdZLFdZLHFZLFlZLFhZLCRZLEtZLFpZLEpZLFFZLHRYLGVYLG5YLGlYLHJYLG9YLGFYLHNYLGxYLGNYLHVYPUZxKCksaFg9e3BvaW50OmRYLGxpbmVTdGFydDpmWCxsaW5lRW5kOm1YLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2hYLnBvaW50PWdYLGhYLmxpbmVTdGFydD1fWCxoWC5saW5lRW5kPXlYLHVYLnJlc2V0KCksVFkucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtUWS5wb2x5Z29uRW5kKCksaFgucG9pbnQ9ZFgsaFgubGluZVN0YXJ0PWZYLGhYLmxpbmVFbmQ9bVgsTVk8MD8oQlk9LShGWT0xODApLEhZPS0oVlk9OTApKTp1WD5HcT9WWT05MDp1WDwtMWUtNiYmKEhZPS05MCksWVlbMF09QlksWVlbMV09Rll9fTtmdW5jdGlvbiBkWCh0LGUpe3FZLnB1c2goWVk9W0JZPXQsRlk9dF0pLGU8SFkmJihIWT1lKSxlPlZZJiYoVlk9ZSl9ZnVuY3Rpb24gcFgodCxlKXt2YXIgbj1OWShbdCpLcSxlKktxXSk7aWYoV1kpe3ZhciBpPVJZKFdZLG4pLHI9UlkoW2lbMV0sLWlbMF0sMF0saSk7RFkocikscj1QWShyKTt2YXIgbyxhPXQtVVkscz1hPjA/MTotMSxsPXJbMF0qJHEqcyxjPVpxKGEpPjE4MDtjXihzKlVZPGwmJmw8cyp0KT8obz1yWzFdKiRxKT5WWSYmKFZZPW8pOmNeKHMqVVk8KGw9KGwrMzYwKSUzNjAtMTgwKSYmbDxzKnQpPyhvPS1yWzFdKiRxKTxIWSYmKEhZPW8pOihlPEhZJiYoSFk9ZSksZT5WWSYmKFZZPWUpKSxjP3Q8VVk/dlgoQlksdCk+dlgoQlksRlkpJiYoRlk9dCk6dlgodCxGWSk+dlgoQlksRlkpJiYoQlk9dCk6Rlk+PUJZPyh0PEJZJiYoQlk9dCksdD5GWSYmKEZZPXQpKTp0PlVZP3ZYKEJZLHQpPnZYKEJZLEZZKSYmKEZZPXQpOnZYKHQsRlkpPnZYKEJZLEZZKSYmKEJZPXQpfWVsc2UgcVkucHVzaChZWT1bQlk9dCxGWT10XSk7ZTxIWSYmKEhZPWUpLGU+VlkmJihWWT1lKSxXWT1uLFVZPXR9ZnVuY3Rpb24gZlgoKXtoWC5wb2ludD1wWH1mdW5jdGlvbiBtWCgpe1lZWzBdPUJZLFlZWzFdPUZZLGhYLnBvaW50PWRYLFdZPW51bGx9ZnVuY3Rpb24gZ1godCxlKXtpZihXWSl7dmFyIG49dC1VWTt1WC5hZGQoWnEobik+MTgwP24rKG4+MD8zNjA6LTM2MCk6bil9ZWxzZSBqWT10LEdZPWU7VFkucG9pbnQodCxlKSxwWCh0LGUpfWZ1bmN0aW9uIF9YKCl7VFkubGluZVN0YXJ0KCl9ZnVuY3Rpb24geVgoKXtnWChqWSxHWSksVFkubGluZUVuZCgpLFpxKHVYKT5HcSYmKEJZPS0oRlk9MTgwKSksWVlbMF09QlksWVlbMV09RlksV1k9bnVsbH1mdW5jdGlvbiB2WCh0LGUpe3JldHVybihlLT10KTwwP2UrMzYwOmV9ZnVuY3Rpb24gYlgodCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIHhYKHQsZSl7cmV0dXJuIHRbMF08PXRbMV0/dFswXTw9ZSYmZTw9dFsxXTplPHRbMF18fHRbMV08ZX12YXIgd1g9e3NwaGVyZTpkWSxwb2ludDpTWCxsaW5lU3RhcnQ6RVgsbGluZUVuZDpBWCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt3WC5saW5lU3RhcnQ9a1gsd1gubGluZUVuZD1MWH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3dYLmxpbmVTdGFydD1FWCx3WC5saW5lRW5kPUFYfX07ZnVuY3Rpb24gU1godCxlKXt0Kj1LcTt2YXIgbj10WShlKj1LcSk7TVgobip0WSh0KSxuKm9ZKHQpLG9ZKGUpKX1mdW5jdGlvbiBNWCh0LGUsbil7KytYWSxLWSs9KHQtS1kpL1hZLFpZKz0oZS1aWSkvWFksSlkrPShuLUpZKS9YWX1mdW5jdGlvbiBFWCgpe3dYLnBvaW50PVRYfWZ1bmN0aW9uIFRYKHQsZSl7dCo9S3E7dmFyIG49dFkoZSo9S3EpO3NYPW4qdFkodCksbFg9bipvWSh0KSxjWD1vWShlKSx3WC5wb2ludD1DWCxNWChzWCxsWCxjWCl9ZnVuY3Rpb24gQ1godCxlKXt0Kj1LcTt2YXIgbj10WShlKj1LcSksaT1uKnRZKHQpLHI9bipvWSh0KSxvPW9ZKGUpLGE9UXEoc1koKGE9bFgqby1jWCpyKSphKyhhPWNYKmktc1gqbykqYSsoYT1zWCpyLWxYKmkpKmEpLHNYKmkrbFgqcitjWCpvKTskWSs9YSxRWSs9YSooc1grKHNYPWkpKSx0WCs9YSoobFgrKGxYPXIpKSxlWCs9YSooY1grKGNYPW8pKSxNWChzWCxsWCxjWCl9ZnVuY3Rpb24gQVgoKXt3WC5wb2ludD1TWH1mdW5jdGlvbiBrWCgpe3dYLnBvaW50PVBYfWZ1bmN0aW9uIExYKCl7Tlgob1gsYVgpLHdYLnBvaW50PVNYfWZ1bmN0aW9uIFBYKHQsZSl7b1g9dCxhWD1lLHQqPUtxLGUqPUtxLHdYLnBvaW50PU5YO3ZhciBuPXRZKGUpO3NYPW4qdFkodCksbFg9bipvWSh0KSxjWD1vWShlKSxNWChzWCxsWCxjWCl9ZnVuY3Rpb24gTlgodCxlKXt0Kj1LcTt2YXIgbj10WShlKj1LcSksaT1uKnRZKHQpLHI9bipvWSh0KSxvPW9ZKGUpLGE9bFgqby1jWCpyLHM9Y1gqaS1zWCpvLGw9c1gqci1sWCppLGM9c1koYSphK3MqcytsKmwpLHU9dVkoYyksaD1jJiYtdS9jO25YKz1oKmEsaVgrPWgqcyxyWCs9aCpsLCRZKz11LFFZKz11KihzWCsoc1g9aSkpLHRYKz11KihsWCsobFg9cikpLGVYKz11KihjWCsoY1g9bykpLE1YKHNYLGxYLGNYKX1mdW5jdGlvbiBJWCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gUlgodCxlKXtmdW5jdGlvbiBuKG4saSl7cmV0dXJuIG49dChuLGkpLGUoblswXSxuWzFdKX1yZXR1cm4gdC5pbnZlcnQmJmUuaW52ZXJ0JiYobi5pbnZlcnQ9ZnVuY3Rpb24obixpKXtyZXR1cm4obj1lLmludmVydChuLGkpKSYmdC5pbnZlcnQoblswXSxuWzFdKX0pLG59ZnVuY3Rpb24gT1godCxlKXtyZXR1cm5bdD5XcT90LVhxOnQ8LVdxP3QrWHE6dCxlXX1mdW5jdGlvbiB6WCh0LGUsbil7cmV0dXJuKHQlPVhxKT9lfHxuP1JYKEJYKHQpLEhYKGUsbikpOkJYKHQpOmV8fG4/SFgoZSxuKTpPWH1mdW5jdGlvbiBEWCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm5bKGUrPXQpPldxP2UtWHE6ZTwtV3E/ZStYcTplLG5dfX1mdW5jdGlvbiBCWCh0KXt2YXIgZT1EWCh0KTtyZXR1cm4gZS5pbnZlcnQ9RFgoLXQpLGV9ZnVuY3Rpb24gSFgodCxlKXt2YXIgbj10WSh0KSxpPW9ZKHQpLHI9dFkoZSksbz1vWShlKTtmdW5jdGlvbiBhKHQsZSl7dmFyIGE9dFkoZSkscz10WSh0KSphLGw9b1kodCkqYSxjPW9ZKGUpLHU9YypuK3MqaTtyZXR1cm5bUXEobCpyLXUqbyxzKm4tYyppKSx1WSh1KnIrbCpvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIGE9dFkoZSkscz10WSh0KSphLGw9b1kodCkqYSxjPW9ZKGUpLHU9YypyLWwqbztyZXR1cm5bUXEobCpyK2MqbyxzKm4rdSppKSx1WSh1Km4tcyppKV19LGF9ZnVuY3Rpb24gRlgodCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4oZT10KGVbMF0qS3EsZVsxXSpLcSkpWzBdKj0kcSxlWzFdKj0kcSxlfXJldHVybiB0PXpYKHRbMF0qS3EsdFsxXSpLcSx0Lmxlbmd0aD4yP3RbMl0qS3E6MCksZS5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dC5pbnZlcnQoZVswXSpLcSxlWzFdKktxKSlbMF0qPSRxLGVbMV0qPSRxLGV9LGV9ZnVuY3Rpb24gVlgodCxlLG4saSxyLG8pe2lmKG4pe3ZhciBhPXRZKGUpLHM9b1koZSksbD1pKm47bnVsbD09cj8ocj1lK2kqWHEsbz1lLWwvMik6KHI9VVgoYSxyKSxvPVVYKGEsbyksKGk+MD9yPG86cj5vKSYmKHIrPWkqWHEpKTtmb3IodmFyIGMsdT1yO2k+MD91Pm86dTxvO3UtPWwpYz1QWShbYSwtcyp0WSh1KSwtcypvWSh1KV0pLHQucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gVVgodCxlKXsoZT1OWShlKSlbMF0tPXQsRFkoZSk7dmFyIG49Y1koLWVbMV0pO3JldHVybigoLWVbMl08MD8tbjpuKStYcS1HcSklWHF9ZnVuY3Rpb24galgoKXt2YXIgdCxlPVtdO3JldHVybntwb2ludDpmdW5jdGlvbihlLG4pe3QucHVzaChbZSxuXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0sbGluZUVuZDpkWSxyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBuPWU7cmV0dXJuIGU9W10sdD1udWxsLG59fX1mdW5jdGlvbiBHWCh0LGUpe3JldHVybiBacSh0WzBdLWVbMF0pPEdxJiZacSh0WzFdLWVbMV0pPEdxfWZ1bmN0aW9uIFdYKHQsZSxuLGkpe3RoaXMueD10LHRoaXMuej1lLHRoaXMubz1uLHRoaXMuZT1pLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gcVgodCxlLG4saSxyKXt2YXIgbyxhLHM9W10sbD1bXTtpZih0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKCEoKGU9dC5sZW5ndGgtMSk8PTApKXt2YXIgZSxuLGk9dFswXSxhPXRbZV07aWYoR1goaSxhKSl7Zm9yKHIubGluZVN0YXJ0KCksbz0wO288ZTsrK28pci5wb2ludCgoaT10W29dKVswXSxpWzFdKTtyLmxpbmVFbmQoKX1lbHNlIHMucHVzaChuPW5ldyBXWChpLHQsbnVsbCwhMCkpLGwucHVzaChuLm89bmV3IFdYKGksbnVsbCxuLCExKSkscy5wdXNoKG49bmV3IFdYKGEsdCxudWxsLCExKSksbC5wdXNoKG4ubz1uZXcgV1goYSxudWxsLG4sITApKX19KSkscy5sZW5ndGgpe2ZvcihsLnNvcnQoZSksWVgocyksWVgobCksbz0wLGE9bC5sZW5ndGg7bzxhOysrbylsW29dLmU9bj0hbjtmb3IodmFyIGMsdSxoPXNbMF07Oyl7Zm9yKHZhciBkPWgscD0hMDtkLnY7KWlmKChkPWQubik9PT1oKXJldHVybjtjPWQueixyLmxpbmVTdGFydCgpO2Rve2lmKGQudj1kLm8udj0hMCxkLmUpe2lmKHApZm9yKG89MCxhPWMubGVuZ3RoO288YTsrK28pci5wb2ludCgodT1jW29dKVswXSx1WzFdKTtlbHNlIGkoZC54LGQubi54LDEscik7ZD1kLm59ZWxzZXtpZihwKWZvcihvPShjPWQucC56KS5sZW5ndGgtMTtvPj0wOy0tbylyLnBvaW50KCh1PWNbb10pWzBdLHVbMV0pO2Vsc2UgaShkLngsZC5wLngsLTEscik7ZD1kLnB9Yz0oZD1kLm8pLnoscD0hcH13aGlsZSghZC52KTtyLmxpbmVFbmQoKX19fWZ1bmN0aW9uIFlYKHQpe2lmKGU9dC5sZW5ndGgpe2Zvcih2YXIgZSxuLGk9MCxyPXRbMF07KytpPGU7KXIubj1uPXRbaV0sbi5wPXIscj1uO3Iubj1uPXRbMF0sbi5wPXJ9fU9YLmludmVydD1PWDt2YXIgWFg9RnEoKTtmdW5jdGlvbiAkWCh0LGUpe3ZhciBuPWVbMF0saT1lWzFdLHI9W29ZKG4pLC10WShuKSwwXSxvPTAsYT0wO1hYLnJlc2V0KCk7Zm9yKHZhciBzPTAsbD10Lmxlbmd0aDtzPGw7KytzKWlmKHU9KGM9dFtzXSkubGVuZ3RoKWZvcih2YXIgYyx1LGg9Y1t1LTFdLGQ9aFswXSxwPWhbMV0vMitZcSxmPW9ZKHApLG09dFkocCksZz0wO2c8dTsrK2csZD15LGY9YixtPXgsaD1fKXt2YXIgXz1jW2ddLHk9X1swXSx2PV9bMV0vMitZcSxiPW9ZKHYpLHg9dFkodiksdz15LWQsUz13Pj0wPzE6LTEsTT1TKncsRT1NPldxLFQ9ZipiO2lmKFhYLmFkZChRcShUKlMqb1koTSksbSp4K1QqdFkoTSkpKSxvKz1FP3crUypYcTp3LEVeZD49bl55Pj1uKXt2YXIgQz1SWShOWShoKSxOWShfKSk7RFkoQyk7dmFyIEE9UlkocixDKTtEWShBKTt2YXIgaz0oRV53Pj0wPy0xOjEpKnVZKEFbMl0pOyhpPmt8fGk9PT1rJiYoQ1swXXx8Q1sxXSkpJiYoYSs9RV53Pj0wPzE6LTEpfX1yZXR1cm4obzwtMWUtNnx8bzxHcSYmWFg8LTFlLTYpXjEmYX1mdW5jdGlvbiBLWCh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBaWCh0LGUsbil7dD0rdCxlPStlLG49KHI9YXJndW1lbnRzLmxlbmd0aCk8Mj8oZT10LHQ9MCwxKTpyPDM/MTorbjtmb3IodmFyIGk9LTEscj0wfE1hdGgubWF4KDAsTWF0aC5jZWlsKChlLXQpL24pKSxvPW5ldyBBcnJheShyKTsrK2k8cjspb1tpXT10K2kqbjtyZXR1cm4gb31mdW5jdGlvbiBKWCh0KXtmb3IodmFyIGUsbixpLHI9dC5sZW5ndGgsbz0tMSxhPTA7KytvPHI7KWErPXRbb10ubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShhKTstLXI+PTA7KWZvcihlPShpPXRbcl0pLmxlbmd0aDstLWU+PTA7KW5bLS1hXT1pW2VdO3JldHVybiBufWZ1bmN0aW9uIFFYKHQsZSxuLGkpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbyxhLHMsbD1lKHIpLGM9algoKSx1PWUoYyksaD0hMSxkPXtwb2ludDpwLGxpbmVTdGFydDptLGxpbmVFbmQ6Zyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtkLnBvaW50PV8sZC5saW5lU3RhcnQ9eSxkLmxpbmVFbmQ9dixhPVtdLG89W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtkLnBvaW50PXAsZC5saW5lU3RhcnQ9bSxkLmxpbmVFbmQ9ZyxhPUpYKGEpO3ZhciB0PSRYKG8saSk7YS5sZW5ndGg/KGh8fChyLnBvbHlnb25TdGFydCgpLGg9ITApLHFYKGEsZSQsdCxuLHIpKTp0JiYoaHx8KHIucG9seWdvblN0YXJ0KCksaD0hMCksci5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLHIpLHIubGluZUVuZCgpKSxoJiYoci5wb2x5Z29uRW5kKCksaD0hMSksYT1vPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe3IucG9seWdvblN0YXJ0KCksci5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLHIpLHIubGluZUVuZCgpLHIucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gcChlLG4pe3QoZSxuKSYmci5wb2ludChlLG4pfWZ1bmN0aW9uIGYodCxlKXtsLnBvaW50KHQsZSl9ZnVuY3Rpb24gbSgpe2QucG9pbnQ9ZixsLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGcoKXtkLnBvaW50PXAsbC5saW5lRW5kKCl9ZnVuY3Rpb24gXyh0LGUpe3MucHVzaChbdCxlXSksdS5wb2ludCh0LGUpfWZ1bmN0aW9uIHkoKXt1LmxpbmVTdGFydCgpLHM9W119ZnVuY3Rpb24gdigpe18oc1swXVswXSxzWzBdWzFdKSx1LmxpbmVFbmQoKTt2YXIgdCxlLG4saSxsPXUuY2xlYW4oKSxkPWMucmVzdWx0KCkscD1kLmxlbmd0aDtpZihzLnBvcCgpLG8ucHVzaChzKSxzPW51bGwscClpZigxJmwpe2lmKChlPShuPWRbMF0pLmxlbmd0aC0xKT4wKXtmb3IoaHx8KHIucG9seWdvblN0YXJ0KCksaD0hMCksci5saW5lU3RhcnQoKSx0PTA7dDxlOysrdClyLnBvaW50KChpPW5bdF0pWzBdLGlbMV0pO3IubGluZUVuZCgpfX1lbHNlIHA+MSYmMiZsJiZkLnB1c2goZC5wb3AoKS5jb25jYXQoZC5zaGlmdCgpKSksYS5wdXNoKGQuZmlsdGVyKHQkKSl9cmV0dXJuIGR9fWZ1bmN0aW9uIHQkKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIGUkKHQsZSl7cmV0dXJuKCh0PXQueClbMF08MD90WzFdLXFxLUdxOnFxLXRbMV0pLSgoZT1lLngpWzBdPDA/ZVsxXS1xcS1HcTpxcS1lWzFdKX0hKGZ1bmN0aW9uIG4kKHQpezE9PT10Lmxlbmd0aCYmKHQ9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIEtYKHQoZSksbil9fSkodCkpfSkoS1gpO3ZhciBpJD1RWCgoZnVuY3Rpb24oKXtyZXR1cm4hMH0pLChmdW5jdGlvbiByJCh0KXt2YXIgZSxuPU5hTixpPU5hTixyPU5hTjtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKSxlPTF9LHBvaW50OmZ1bmN0aW9uKG8sYSl7dmFyIHM9bz4wP1dxOi1XcSxsPVpxKG8tbik7WnEobC1XcSk8R3E/KHQucG9pbnQobixpPShpK2EpLzI+MD9xcTotcXEpLHQucG9pbnQocixpKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxpKSx0LnBvaW50KG8saSksZT0wKTpyIT09cyYmbD49V3EmJihacShuLXIpPEdxJiYobi09cipHcSksWnEoby1zKTxHcSYmKG8tPXMqR3EpLGk9KGZ1bmN0aW9uIGModCxlLG4saSl7dmFyIHIsbyxhPW9ZKHQtbik7cmV0dXJuIFpxKGEpPkdxP0pxKChvWShlKSoobz10WShpKSkqb1kobiktb1koaSkqKHI9dFkoZSkpKm9ZKHQpKS8ocipvKmEpKTooZStpKS8yfSkobixpLG8sYSksdC5wb2ludChyLGkpLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLGkpLGU9MCksdC5wb2ludChuPW8saT1hKSxyPXN9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0LmxpbmVFbmQoKSxuPWk9TmFOfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiAyLWV9fX0pLChmdW5jdGlvbiBvJCh0LGUsbixpKXt2YXIgcjtpZihudWxsPT10KWkucG9pbnQoLVdxLHI9bipxcSksaS5wb2ludCgwLHIpLGkucG9pbnQoV3EsciksaS5wb2ludChXcSwwKSxpLnBvaW50KFdxLC1yKSxpLnBvaW50KDAsLXIpLGkucG9pbnQoLVdxLC1yKSxpLnBvaW50KC1XcSwwKSxpLnBvaW50KC1XcSxyKTtlbHNlIGlmKFpxKHRbMF0tZVswXSk+R3Epe3ZhciBvPXRbMF08ZVswXT9XcTotV3E7aS5wb2ludCgtbyxyPW4qby8yKSxpLnBvaW50KDAsciksaS5wb2ludChvLHIpfWVsc2UgaS5wb2ludChlWzBdLGVbMV0pfSksWy1XcSwtcXFdKTtmdW5jdGlvbiBhJCh0KXt2YXIgZT10WSh0KSxuPTYqS3EsaT1lPjAscj1acShlKT5HcTtmdW5jdGlvbiBvKHQsbil7cmV0dXJuIHRZKHQpKnRZKG4pPmV9ZnVuY3Rpb24gYSh0LG4saSl7dmFyIHI9WzEsMCwwXSxvPVJZKE5ZKHQpLE5ZKG4pKSxhPUlZKG8sbykscz1vWzBdLGw9YS1zKnM7aWYoIWwpcmV0dXJuIWkmJnQ7dmFyIGM9ZSphL2wsdT0tZSpzL2wsaD1SWShyLG8pLGQ9elkocixjKTtPWShkLHpZKG8sdSkpO3ZhciBwPWgsZj1JWShkLHApLG09SVkocCxwKSxnPWYqZi1tKihJWShkLGQpLTEpO2lmKCEoZzwwKSl7dmFyIF89c1koZykseT16WShwLCgtZi1fKS9tKTtpZihPWSh5LGQpLHk9UFkoeSksIWkpcmV0dXJuIHk7dmFyIHYsYj10WzBdLHg9blswXSx3PXRbMV0sUz1uWzFdO3g8YiYmKHY9YixiPXgseD12KTt2YXIgTT14LWIsRT1acShNLVdxKTxHcTtpZighRSYmUzx3JiYodj13LHc9UyxTPXYpLEV8fE08R3E/RT93K1M+MF55WzFdPChacSh5WzBdLWIpPEdxP3c6Uyk6dzw9eVsxXSYmeVsxXTw9UzpNPldxXihiPD15WzBdJiZ5WzBdPD14KSl7dmFyIFQ9elkocCwoLWYrXykvbSk7cmV0dXJuIE9ZKFQsZCksW3ksUFkoVCldfX19ZnVuY3Rpb24gcyhlLG4pe3ZhciByPWk/dDpXcS10LG89MDtyZXR1cm4gZTwtcj9vfD0xOmU+ciYmKG98PTIpLG48LXI/b3w9NDpuPnImJihvfD04KSxvfXJldHVybiBRWChvLChmdW5jdGlvbiBsKHQpe3ZhciBlLG4sbCxjLHU7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2M9bD0hMSx1PTF9LHBvaW50OmZ1bmN0aW9uKGgsZCl7dmFyIHAsZj1baCxkXSxtPW8oaCxkKSxnPWk/bT8wOnMoaCxkKTptP3MoaCsoaDwwP1dxOi1XcSksZCk6MDtpZighZSYmKGM9bD1tKSYmdC5saW5lU3RhcnQoKSxtIT09bCYmKCEocD1hKGUsZikpfHxHWChlLHApfHxHWChmLHApKSYmKGZbMF0rPUdxLGZbMV0rPUdxLG09byhmWzBdLGZbMV0pKSxtIT09bCl1PTAsbT8odC5saW5lU3RhcnQoKSxwPWEoZixlKSx0LnBvaW50KHBbMF0scFsxXSkpOihwPWEoZSxmKSx0LnBvaW50KHBbMF0scFsxXSksdC5saW5lRW5kKCkpLGU9cDtlbHNlIGlmKHImJmUmJmlebSl7dmFyIF87ZyZufHwhKF89YShmLGUsITApKXx8KHU9MCxpPyh0LmxpbmVTdGFydCgpLHQucG9pbnQoX1swXVswXSxfWzBdWzFdKSx0LnBvaW50KF9bMV1bMF0sX1sxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KF9bMV1bMF0sX1sxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KF9bMF1bMF0sX1swXVsxXSkpKX0hbXx8ZSYmR1goZSxmKXx8dC5wb2ludChmWzBdLGZbMV0pLGU9ZixsPW0sbj1nfSxsaW5lRW5kOmZ1bmN0aW9uKCl7bCYmdC5saW5lRW5kKCksZT1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiB1fChjJiZsKTw8MX19fSksKGZ1bmN0aW9uIGMoZSxpLHIsbyl7Vlgobyx0LG4scixlLGkpfSksaT9bMCwtdF06Wy1XcSx0LVdxXSl9dmFyIHMkPTFlOSxsJD0tcyQ7ZnVuY3Rpb24gYyQodCxlLG4saSl7ZnVuY3Rpb24gcihyLG8pe3JldHVybiB0PD1yJiZyPD1uJiZlPD1vJiZvPD1pfWZ1bmN0aW9uIG8ocixvLHMsYyl7dmFyIHU9MCxoPTA7aWYobnVsbD09cnx8KHU9YShyLHMpKSE9PShoPWEobyxzKSl8fGwocixvKTwwXnM+MClkb3tjLnBvaW50KDA9PT11fHwzPT09dT90Om4sdT4xP2k6ZSl9d2hpbGUoKHU9KHUrcys0KSU0KSE9PWgpO2Vsc2UgYy5wb2ludChvWzBdLG9bMV0pfWZ1bmN0aW9uIGEoaSxyKXtyZXR1cm4gWnEoaVswXS10KTxHcT9yPjA/MDozOlpxKGlbMF0tbik8R3E/cj4wPzI6MTpacShpWzFdLWUpPEdxP3I+MD8xOjA6cj4wPzM6Mn1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIGwodC54LGUueCl9ZnVuY3Rpb24gbCh0LGUpe3ZhciBuPWEodCwxKSxpPWEoZSwxKTtyZXR1cm4gbiE9PWk/bi1pOjA9PT1uP2VbMV0tdFsxXToxPT09bj90WzBdLWVbMF06Mj09PW4/dFsxXS1lWzFdOmVbMF0tdFswXX1yZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGwsYyx1LGgsZCxwLGYsbSxnLF8seSx2PWEsYj1qWCgpLHg9e3BvaW50OlQsbGluZVN0YXJ0OmZ1bmN0aW9uIHcoKXt4LnBvaW50PUMsYyYmYy5wdXNoKHU9W10pLF89ITAsZz0hMSxmPW09TmFOfSxsaW5lRW5kOmZ1bmN0aW9uIFMoKXtsJiYoQyhoLGQpLHAmJmcmJmIucmVqb2luKCksbC5wdXNoKGIucmVzdWx0KCkpKSx4LnBvaW50PVQsZyYmdi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbiBNKCl7dj1iLGw9W10sYz1bXSx5PSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uIEUoKXt2YXIgZT0oZnVuY3Rpb24gbigpe2Zvcih2YXIgZT0wLG49MCxyPWMubGVuZ3RoO248cjsrK24pZm9yKHZhciBvLGEscz1jW25dLGw9MSx1PXMubGVuZ3RoLGg9c1swXSxkPWhbMF0scD1oWzFdO2w8dTsrK2wpbz1kLGE9cCxkPShoPXNbbF0pWzBdLHA9aFsxXSxhPD1pP3A+aSYmKGQtbykqKGktYSk+KHAtYSkqKHQtbykmJisrZTpwPD1pJiYoZC1vKSooaS1hKTwocC1hKSoodC1vKSYmLS1lO3JldHVybiBlfSkoKSxyPXkmJmUsaD0obD1KWChsKSkubGVuZ3RoOyhyfHxoKSYmKGEucG9seWdvblN0YXJ0KCksciYmKGEubGluZVN0YXJ0KCksbyhudWxsLG51bGwsMSxhKSxhLmxpbmVFbmQoKSksaCYmcVgobCxzLGUsbyxhKSxhLnBvbHlnb25FbmQoKSksdj1hLGw9Yz11PW51bGx9fTtmdW5jdGlvbiBUKHQsZSl7cih0LGUpJiZ2LnBvaW50KHQsZSl9ZnVuY3Rpb24gQyhvLGEpe3ZhciBzPXIobyxhKTtpZihjJiZ1LnB1c2goW28sYV0pLF8paD1vLGQ9YSxwPXMsXz0hMSxzJiYodi5saW5lU3RhcnQoKSx2LnBvaW50KG8sYSkpO2Vsc2UgaWYocyYmZyl2LnBvaW50KG8sYSk7ZWxzZXt2YXIgbD1bZj1NYXRoLm1heChsJCxNYXRoLm1pbihzJCxmKSksbT1NYXRoLm1heChsJCxNYXRoLm1pbihzJCxtKSldLGI9W289TWF0aC5tYXgobCQsTWF0aC5taW4ocyQsbykpLGE9TWF0aC5tYXgobCQsTWF0aC5taW4ocyQsYSkpXTshKGZ1bmN0aW9uIHgodCxlLG4saSxyLG8pe3ZhciBhLHM9dFswXSxsPXRbMV0sYz0wLHU9MSxoPWVbMF0tcyxkPWVbMV0tbDtpZihhPW4tcyxofHwhKGE+MCkpe2lmKGEvPWgsaDwwKXtpZihhPGMpcmV0dXJuO2E8dSYmKHU9YSl9ZWxzZSBpZihoPjApe2lmKGE+dSlyZXR1cm47YT5jJiYoYz1hKX1pZihhPXItcyxofHwhKGE8MCkpe2lmKGEvPWgsaDwwKXtpZihhPnUpcmV0dXJuO2E+YyYmKGM9YSl9ZWxzZSBpZihoPjApe2lmKGE8YylyZXR1cm47YTx1JiYodT1hKX1pZihhPWktbCxkfHwhKGE+MCkpe2lmKGEvPWQsZDwwKXtpZihhPGMpcmV0dXJuO2E8dSYmKHU9YSl9ZWxzZSBpZihkPjApe2lmKGE+dSlyZXR1cm47YT5jJiYoYz1hKX1pZihhPW8tbCxkfHwhKGE8MCkpe2lmKGEvPWQsZDwwKXtpZihhPnUpcmV0dXJuO2E+YyYmKGM9YSl9ZWxzZSBpZihkPjApe2lmKGE8YylyZXR1cm47YTx1JiYodT1hKX1yZXR1cm4gYz4wJiYodFswXT1zK2MqaCx0WzFdPWwrYypkKSx1PDEmJihlWzBdPXMrdSpoLGVbMV09bCt1KmQpLCEwfX19fX0pKGwsYix0LGUsbixpKT9zJiYodi5saW5lU3RhcnQoKSx2LnBvaW50KG8sYSkseT0hMSk6KGd8fCh2LmxpbmVTdGFydCgpLHYucG9pbnQobFswXSxsWzFdKSksdi5wb2ludChiWzBdLGJbMV0pLHN8fHYubGluZUVuZCgpLHk9ITEpfWY9byxtPWEsZz1zfXJldHVybiB4fX12YXIgdSQsaCQsZCQscCQ9RnEoKSxmJD17c3BoZXJlOmRZLHBvaW50OmRZLGxpbmVTdGFydDpmdW5jdGlvbiBtJCgpe2YkLnBvaW50PV8kLGYkLmxpbmVFbmQ9ZyR9LGxpbmVFbmQ6ZFkscG9seWdvblN0YXJ0OmRZLHBvbHlnb25FbmQ6ZFl9O2Z1bmN0aW9uIGckKCl7ZiQucG9pbnQ9ZiQubGluZUVuZD1kWX1mdW5jdGlvbiBfJCh0LGUpe3UkPXQqPUtxLGgkPW9ZKGUqPUtxKSxkJD10WShlKSxmJC5wb2ludD15JH1mdW5jdGlvbiB5JCh0LGUpe3QqPUtxO3ZhciBuPW9ZKGUqPUtxKSxpPXRZKGUpLHI9WnEodC11JCksbz10WShyKSxhPWkqb1kocikscz1kJCpuLWgkKmkqbyxsPWgkKm4rZCQqaSpvO3AkLmFkZChRcShzWShhKmErcypzKSxsKSksdSQ9dCxoJD1uLGQkPWl9ZnVuY3Rpb24gdiQodCl7cmV0dXJuIHAkLnJlc2V0KCkseVkodCxmJCksK3AkfXZhciBiJD1bbnVsbCxudWxsXSx4JD17dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6YiR9O2Z1bmN0aW9uIHckKHQsZSl7cmV0dXJuIGIkWzBdPXQsYiRbMV09ZSx2JCh4JCl9dmFyIFMkPXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEUkKHQuZ2VvbWV0cnksZSl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZmVhdHVyZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylpZihFJChuW2ldLmdlb21ldHJ5LGUpKXJldHVybiEwO3JldHVybiExfX0sTSQ9e1NwaGVyZTpmdW5jdGlvbigpe3JldHVybiEwfSxQb2ludDpmdW5jdGlvbih0LGUpe3JldHVybiBUJCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylpZihUJChuW2ldLGUpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEMkKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYoQyQobltpXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe3JldHVybiBBJCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KWlmKEEkKG5baV0sZSkpcmV0dXJuITA7cmV0dXJuITF9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Lmdlb21ldHJpZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylpZihFJChuW2ldLGUpKXJldHVybiEwO3JldHVybiExfX07ZnVuY3Rpb24gRSQodCxlKXtyZXR1cm4hKCF0fHwhTSQuaGFzT3duUHJvcGVydHkodC50eXBlKSkmJk0kW3QudHlwZV0odCxlKX1mdW5jdGlvbiBUJCh0LGUpe3JldHVybiAwPT09dyQodCxlKX1mdW5jdGlvbiBDJCh0LGUpe3ZhciBuPXckKHRbMF0sdFsxXSk7cmV0dXJuIHckKHRbMF0sZSkrdyQoZSx0WzFdKTw9bitHcX1mdW5jdGlvbiBBJCh0LGUpe3JldHVybiEhJFgodC5tYXAoayQpLEwkKGUpKX1mdW5jdGlvbiBrJCh0KXtyZXR1cm4odD10Lm1hcChMJCkpLnBvcCgpLHR9ZnVuY3Rpb24gTCQodCl7cmV0dXJuW3RbMF0qS3EsdFsxXSpLcV19ZnVuY3Rpb24gUCQodCxlLG4pe3ZhciBpPVpYKHQsZS1HcSxuKS5jb25jYXQoZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuW3QsZV19KSl9fWZ1bmN0aW9uIE4kKHQsZSxuKXt2YXIgaT1aWCh0LGUtR3EsbikuY29uY2F0KGUpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybltlLHRdfSkpfX1mdW5jdGlvbiBJJCgpe3ZhciB0LGUsbixpLHIsbyxhLHMsbCxjLHUsaCxkPTEwLHA9ZCxmPTkwLG09MzYwLGc9Mi41O2Z1bmN0aW9uIF8oKXtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczp5KCl9fWZ1bmN0aW9uIHkoKXtyZXR1cm4gWlgoZVkoaS9mKSpmLG4sZikubWFwKHUpLmNvbmNhdChaWChlWShzL20pKm0sYSxtKS5tYXAoaCkpLmNvbmNhdChaWChlWShlL2QpKmQsdCxkKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBacSh0JWYpPkdxfSkpLm1hcChsKSkuY29uY2F0KFpYKGVZKG8vcCkqcCxyLHApLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIFpxKHQlbSk+R3F9KSkubWFwKGMpKX1yZXR1cm4gXy5saW5lcz1mdW5jdGlvbigpe3JldHVybiB5KCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KSl9LF8ub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdShpKS5jb25jYXQoaChhKS5zbGljZSgxKSx1KG4pLnJldmVyc2UoKS5zbGljZSgxKSxoKHMpLnJldmVyc2UoKS5zbGljZSgxKSldfX0sXy5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Xy5leHRlbnRNYWpvcih0KS5leHRlbnRNaW5vcih0KTpfLmV4dGVudE1pbm9yKCl9LF8uZXh0ZW50TWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3RbMF1bMV0sYT0rdFsxXVsxXSwoaT0rdFswXVswXSk+KG49K3RbMV1bMF0pJiYodD1pLGk9bixuPXQpLHM+YSYmKHQ9cyxzPWEsYT10KSxfLnByZWNpc2lvbihnKSk6W1tpLHNdLFtuLGFdXX0sXy5leHRlbnRNaW5vcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rblswXVsxXSxyPStuWzFdWzFdLChlPStuWzBdWzBdKT4odD0rblsxXVswXSkmJihuPWUsZT10LHQ9biksbz5yJiYobj1vLG89cixyPW4pLF8ucHJlY2lzaW9uKGcpKTpbW2Usb10sW3Qscl1dfSxfLnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Xy5zdGVwTWFqb3IodCkuc3RlcE1pbm9yKHQpOl8uc3RlcE1pbm9yKCl9LF8uc3RlcE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLG09K3RbMV0sXyk6W2YsbV19LF8uc3RlcE1pbm9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0WzBdLHA9K3RbMV0sXyk6W2QscF19LF8ucHJlY2lzaW9uPWZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStkLGw9UCQobyxyLDkwKSxjPU4kKGUsdCxnKSx1PVAkKHMsYSw5MCksaD1OJChpLG4sZyksXyk6Z30sXy5leHRlbnRNYWpvcihbWy0xODAsLTg5Ljk5OTk5OV0sWzE4MCw4OS45OTk5OTldXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC4wMDAwMDFdLFsxODAsODAuMDAwMDAxXV0pfWZ1bmN0aW9uIFIkKHQpe3JldHVybiB0fXZhciBPJCx6JCxEJCxCJCxIJD1GcSgpLEYkPUZxKCksViQ9e3BvaW50OmRZLGxpbmVTdGFydDpkWSxsaW5lRW5kOmRZLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1YkLmxpbmVTdGFydD1VJCxWJC5saW5lRW5kPVckfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ViQubGluZVN0YXJ0PVYkLmxpbmVFbmQ9ViQucG9pbnQ9ZFksSCQuYWRkKFpxKEYkKSksRiQucmVzZXQoKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9SCQvMjtyZXR1cm4gSCQucmVzZXQoKSx0fX07ZnVuY3Rpb24gVSQoKXtWJC5wb2ludD1qJH1mdW5jdGlvbiBqJCh0LGUpe1YkLnBvaW50PUckLE8kPUQkPXQseiQ9QiQ9ZX1mdW5jdGlvbiBHJCh0LGUpe0YkLmFkZChCJCp0LUQkKmUpLEQkPXQsQiQ9ZX1mdW5jdGlvbiBXJCgpe0ckKE8kLHokKX12YXIgcSQsWSQsWCQsJCQsSyQ9MS8wLFokPUskLEokPS1LJCxRJD1KJCx0Sz17cG9pbnQ6ZnVuY3Rpb24gZUsodCxlKXt0PEskJiYoSyQ9dCksdD5KJCYmKEokPXQpLGU8WiQmJihaJD1lKSxlPlEkJiYoUSQ9ZSl9LGxpbmVTdGFydDpkWSxsaW5lRW5kOmRZLHBvbHlnb25TdGFydDpkWSxwb2x5Z29uRW5kOmRZLHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVtbSyQsWiRdLFtKJCxRJF1dO3JldHVybiBKJD1RJD0tKFokPUskPTEvMCksdH19LG5LPTAsaUs9MCxySz0wLG9LPTAsYUs9MCxzSz0wLGxLPTAsY0s9MCx1Sz0wLGhLPXtwb2ludDpkSyxsaW5lU3RhcnQ6cEssbGluZUVuZDpnSyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtoSy5saW5lU3RhcnQ9X0ssaEsubGluZUVuZD15S30scG9seWdvbkVuZDpmdW5jdGlvbigpe2hLLnBvaW50PWRLLGhLLmxpbmVTdGFydD1wSyxoSy5saW5lRW5kPWdLfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD11Sz9bbEsvdUssY0svdUtdOnNLP1tvSy9zSyxhSy9zS106cks/W25LL3JLLGlLL3JLXTpbTmFOLE5hTl07cmV0dXJuIG5LPWlLPXJLPW9LPWFLPXNLPWxLPWNLPXVLPTAsdH19O2Z1bmN0aW9uIGRLKHQsZSl7bksrPXQsaUsrPWUsKytyS31mdW5jdGlvbiBwSygpe2hLLnBvaW50PWZLfWZ1bmN0aW9uIGZLKHQsZSl7aEsucG9pbnQ9bUssZEsoWCQ9dCwkJD1lKX1mdW5jdGlvbiBtSyh0LGUpe3ZhciBuPXQtWCQsaT1lLSQkLHI9c1kobipuK2kqaSk7b0srPXIqKFgkK3QpLzIsYUsrPXIqKCQkK2UpLzIsc0srPXIsZEsoWCQ9dCwkJD1lKX1mdW5jdGlvbiBnSygpe2hLLnBvaW50PWRLfWZ1bmN0aW9uIF9LKCl7aEsucG9pbnQ9dkt9ZnVuY3Rpb24geUsoKXtiSyhxJCxZJCl9ZnVuY3Rpb24gdksodCxlKXtoSy5wb2ludD1iSyxkSyhxJD1YJD10LFkkPSQkPWUpfWZ1bmN0aW9uIGJLKHQsZSl7dmFyIG49dC1YJCxpPWUtJCQscj1zWShuKm4raSppKTtvSys9ciooWCQrdCkvMixhSys9ciooJCQrZSkvMixzSys9cixsSys9KHI9JCQqdC1YJCplKSooWCQrdCksY0srPXIqKCQkK2UpLHVLKz0zKnIsZEsoWCQ9dCwkJD1lKX1mdW5jdGlvbiB4Syh0KXt0aGlzLl9jb250ZXh0PXR9eEsucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFkaXVzPXQsdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5tb3ZlVG8odCt0aGlzLl9yYWRpdXMsZSksdGhpcy5fY29udGV4dC5hcmModCxlLHRoaXMuX3JhZGl1cywwLFhxKX19LHJlc3VsdDpkWX07dmFyIHdLLFNLLE1LLEVLLFRLLENLPUZxKCksQUs9e3BvaW50OmRZLGxpbmVTdGFydDpmdW5jdGlvbigpe0FLLnBvaW50PWtLfSxsaW5lRW5kOmZ1bmN0aW9uKCl7d0smJkxLKFNLLE1LKSxBSy5wb2ludD1kWX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7d0s9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt3Sz1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD0rQ0s7cmV0dXJuIENLLnJlc2V0KCksdH19O2Z1bmN0aW9uIGtLKHQsZSl7QUsucG9pbnQ9TEssU0s9RUs9dCxNSz1USz1lfWZ1bmN0aW9uIExLKHQsZSl7Q0suYWRkKHNZKChFSy09dCkqRUsrKFRLLT1lKSpUSykpLEVLPXQsVEs9ZX1mdW5jdGlvbiBQSygpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiBOSyh0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1mdW5jdGlvbiBJSyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49bmV3IFJLO2Zvcih2YXIgaSBpbiB0KW5baV09dFtpXTtyZXR1cm4gbi5zdHJlYW09ZSxufX1mdW5jdGlvbiBSSygpe31mdW5jdGlvbiBPSyh0LGUsbil7dmFyIGk9dC5jbGlwRXh0ZW50JiZ0LmNsaXBFeHRlbnQoKTtyZXR1cm4gdC5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksbnVsbCE9aSYmdC5jbGlwRXh0ZW50KG51bGwpLHlZKG4sdC5zdHJlYW0odEspKSxlKHRLLnJlc3VsdCgpKSxudWxsIT1pJiZ0LmNsaXBFeHRlbnQoaSksdH1mdW5jdGlvbiB6Syh0LGUsbil7cmV0dXJuIE9LKHQsKGZ1bmN0aW9uKG4pe3ZhciBpPWVbMV1bMF0tZVswXVswXSxyPWVbMV1bMV0tZVswXVsxXSxvPU1hdGgubWluKGkvKG5bMV1bMF0tblswXVswXSksci8oblsxXVsxXS1uWzBdWzFdKSksYT0rZVswXVswXSsoaS1vKihuWzFdWzBdK25bMF1bMF0pKS8yLHM9K2VbMF1bMV0rKHItbyooblsxXVsxXStuWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCpvKS50cmFuc2xhdGUoW2Esc10pfSksbil9ZnVuY3Rpb24gREsodCxlLG4pe3JldHVybiB6Syh0LFtbMCwwXSxlXSxuKX1mdW5jdGlvbiBCSyh0LGUsbil7cmV0dXJuIE9LKHQsKGZ1bmN0aW9uKG4pe3ZhciBpPStlLHI9aS8oblsxXVswXS1uWzBdWzBdKSxvPShpLXIqKG5bMV1bMF0rblswXVswXSkpLzIsYT0tcipuWzBdWzFdO3Quc2NhbGUoMTUwKnIpLnRyYW5zbGF0ZShbbyxhXSl9KSxuKX1mdW5jdGlvbiBISyh0LGUsbil7cmV0dXJuIE9LKHQsKGZ1bmN0aW9uKG4pe3ZhciBpPStlLHI9aS8oblsxXVsxXS1uWzBdWzFdKSxvPS1yKm5bMF1bMF0sYT0oaS1yKihuWzFdWzFdK25bMF1bMV0pKS8yO3Quc2NhbGUoMTUwKnIpLnRyYW5zbGF0ZShbbyxhXSl9KSxuKX1QSy5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6TksoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9dCx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixlKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT1OSyh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsZSx0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19LFJLLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UksscG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIEZLPXRZKDMwKktxKTtmdW5jdGlvbiBWSyh0LGUpe3JldHVybitlPyhmdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gbihpLHIsbyxhLHMsbCxjLHUsaCxkLHAsZixtLGcpe3ZhciBfPWMtaSx5PXUtcix2PV8qXyt5Knk7aWYodj40KmUmJm0tLSl7dmFyIGI9YStkLHg9cytwLHc9bCtmLFM9c1koYipiK3gqeCt3KncpLE09dVkody89UyksRT1acShacSh3KS0xKTxHcXx8WnEoby1oKTxHcT8obytoKS8yOlFxKHgsYiksVD10KEUsTSksQz1UWzBdLEE9VFsxXSxrPUMtaSxMPUEtcixQPXkqay1fKkw7KFAqUC92PmV8fFpxKChfKmsreSpMKS92LS41KT4uM3x8YSpkK3MqcCtsKmY8RkspJiYobihpLHIsbyxhLHMsbCxDLEEsRSxiLz1TLHgvPVMsdyxtLGcpLGcucG9pbnQoQyxBKSxuKEMsQSxFLGIseCx3LGMsdSxoLGQscCxmLG0sZykpfX1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGkscixvLGEscyxsLGMsdSxoLGQscCxmLG09e3BvaW50OmcsbGluZVN0YXJ0Ol8sbGluZUVuZDp2LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksbS5saW5lU3RhcnQ9Yn0scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLG0ubGluZVN0YXJ0PV99fTtmdW5jdGlvbiBnKG4saSl7bj10KG4saSksZS5wb2ludChuWzBdLG5bMV0pfWZ1bmN0aW9uIF8oKXt1PU5hTixtLnBvaW50PXksZS5saW5lU3RhcnQoKX1mdW5jdGlvbiB5KGkscil7dmFyIG89TlkoW2kscl0pLGE9dChpLHIpO24odSxoLGMsZCxwLGYsdT1hWzBdLGg9YVsxXSxjPWksZD1vWzBdLHA9b1sxXSxmPW9bMl0sMTYsZSksZS5wb2ludCh1LGgpfWZ1bmN0aW9uIHYoKXttLnBvaW50PWcsZS5saW5lRW5kKCl9ZnVuY3Rpb24gYigpe18oKSxtLnBvaW50PXgsbS5saW5lRW5kPXd9ZnVuY3Rpb24geCh0LGUpe3koaT10LGUpLHI9dSxvPWgsYT1kLHM9cCxsPWYsbS5wb2ludD15fWZ1bmN0aW9uIHcoKXtuKHUsaCxjLGQscCxmLHIsbyxpLGEscyxsLDE2LGUpLG0ubGluZUVuZD12LHYoKX1yZXR1cm4gbX19KSh0LGUpOihmdW5jdGlvbiBpKHQpe3JldHVybiBJSyh7cG9pbnQ6ZnVuY3Rpb24oZSxuKXtlPXQoZSxuKSx0aGlzLnN0cmVhbS5wb2ludChlWzBdLGVbMV0pfX0pfSkodCl9dmFyIFVLPUlLKHtwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQqS3EsZSpLcSl9fSk7ZnVuY3Rpb24gaksodCl7cmV0dXJuIEdLKChmdW5jdGlvbigpe3JldHVybiB0fSkpKCl9ZnVuY3Rpb24gR0sodCl7dmFyIGUsbixpLHIsbyxhLHMsbCxjLHUsaD0xNTAsZD00ODAscD0yNTAsZj0wLG09MCxnPTAsXz0wLHk9MCx2PW51bGwsYj1pJCx4PW51bGwsdz1SJCxTPS41LE09VksoQyxTKTtmdW5jdGlvbiBFKHQpe3JldHVyblsodD1vKHRbMF0qS3EsdFsxXSpLcSkpWzBdKmgrbixpLXRbMV0qaF19ZnVuY3Rpb24gVCh0KXtyZXR1cm4odD1vLmludmVydCgodFswXS1uKS9oLChpLXRbMV0pL2gpKSYmW3RbMF0qJHEsdFsxXSokcV19ZnVuY3Rpb24gQyh0LHIpe3JldHVyblsodD1lKHQscikpWzBdKmgrbixpLXRbMV0qaF19ZnVuY3Rpb24gQSgpe289Ulgocj16WChnLF8seSksZSk7dmFyIHQ9ZShmLG0pO3JldHVybiBuPWQtdFswXSpoLGk9cCt0WzFdKmgsaygpfWZ1bmN0aW9uIGsoKXtyZXR1cm4gYz11PW51bGwsRX1yZXR1cm4gRS5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIGMmJnU9PT10P2M6Yz1VSygoZnVuY3Rpb24gZSh0KXtyZXR1cm4gSUsoe3BvaW50OmZ1bmN0aW9uKGUsbil7dmFyIGk9dChlLG4pO3JldHVybiB0aGlzLnN0cmVhbS5wb2ludChpWzBdLGlbMV0pfX0pfSkocikoYihNKHcodT10KSkpKSl9LEUucHJlY2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10LHY9dm9pZCAwLGsoKSk6Yn0sRS5wb3N0Y2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz10LHg9YT1zPWw9bnVsbCxrKCkpOnd9LEUuY2xpcEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPSt0P2EkKHY9dCpLcSk6KHY9bnVsbCxpJCksaygpKTp2KiRxfSxFLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9bnVsbD09dD8oeD1hPXM9bD1udWxsLFIkKTpjJCh4PSt0WzBdWzBdLGE9K3RbMF1bMV0scz0rdFsxXVswXSxsPSt0WzFdWzFdKSxrKCkpOm51bGw9PXg/bnVsbDpbW3gsYV0sW3MsbF1dfSxFLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSt0LEEoKSk6aH0sRS50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9K3RbMF0scD0rdFsxXSxBKCkpOltkLHBdfSxFLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj10WzBdJTM2MCpLcSxtPXRbMV0lMzYwKktxLEEoKSk6W2YqJHEsbSokcV19LEUucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPXRbMF0lMzYwKktxLF89dFsxXSUzNjAqS3EseT10Lmxlbmd0aD4yP3RbMl0lMzYwKktxOjAsQSgpKTpbZyokcSxfKiRxLHkqJHFdfSxFLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT1WSyhDLFM9dCp0KSxrKCkpOnNZKFMpfSxFLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3JldHVybiB6SyhFLHQsZSl9LEUuZml0U2l6ZT1mdW5jdGlvbih0LGUpe3JldHVybiBESyhFLHQsZSl9LEUuZml0V2lkdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQksoRSx0LGUpfSxFLmZpdEhlaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBISyhFLHQsZSl9LGZ1bmN0aW9uKCl7cmV0dXJuIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksRS5pbnZlcnQ9ZS5pbnZlcnQmJlQsQSgpfX1mdW5jdGlvbiBXSyh0KXt2YXIgZT0wLG49V3EvMyxpPUdLKHQpLHI9aShlLG4pO3JldHVybiByLnBhcmFsbGVscz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9pKGU9dFswXSpLcSxuPXRbMV0qS3EpOltlKiRxLG4qJHFdfSxyfWZ1bmN0aW9uIHFLKHQsZSl7dmFyIG49b1kodCksaT0obitvWShlKSkvMjtpZihacShpKTxHcSlyZXR1cm4oZnVuY3Rpb24gcih0KXt2YXIgZT10WSh0KTtmdW5jdGlvbiBuKHQsbil7cmV0dXJuW3QqZSxvWShuKS9lXX1yZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm5bdC9lLHVZKG4qZSldfSxufSkodCk7dmFyIG89MStuKigyKmktbiksYT1zWShvKS9pO2Z1bmN0aW9uIHModCxlKXt2YXIgbj1zWShvLTIqaSpvWShlKSkvaTtyZXR1cm5bbipvWSh0Kj1pKSxhLW4qdFkodCldfXJldHVybiBzLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuPWEtZTtyZXR1cm5bUXEodCxacShuKSkvaSphWShuKSx1WSgoby0odCp0K24qbikqaSppKS8oMippKSldfSxzfWZ1bmN0aW9uIFlLKCl7cmV0dXJuIFdLKHFLKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfWZ1bmN0aW9uIFhLKCl7cmV0dXJuIFlLKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9ZnVuY3Rpb24gJEsodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9dFkoZSkscj10WShuKSxvPXQoaSpyKTtyZXR1cm5bbypyKm9ZKGUpLG8qb1kobildfX1mdW5jdGlvbiBLSyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgaT1zWShlKmUrbipuKSxyPXQoaSksbz1vWShyKSxhPXRZKHIpO3JldHVybltRcShlKm8saSphKSx1WShpJiZuKm8vaSldfX12YXIgWks9JEsoKGZ1bmN0aW9uKHQpe3JldHVybiBzWSgyLygxK3QpKX0pKTtaSy5pbnZlcnQ9S0soKGZ1bmN0aW9uKHQpe3JldHVybiAyKnVZKHQvMil9KSk7dmFyIEpLPSRLKChmdW5jdGlvbih0KXtyZXR1cm4odD1jWSh0KSkmJnQvb1kodCl9KSk7ZnVuY3Rpb24gUUsodCxlKXtyZXR1cm5bdCxpWShsWSgocXErZSkvMikpXX1mdW5jdGlvbiB0Wih0KXt2YXIgZSxuLGkscj1qSyh0KSxvPXIuY2VudGVyLGE9ci5zY2FsZSxzPXIudHJhbnNsYXRlLGw9ci5jbGlwRXh0ZW50LGM9bnVsbDtmdW5jdGlvbiB1KCl7dmFyIG89V3EqYSgpLHM9cihGWChyLnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gbChudWxsPT1jP1tbc1swXS1vLHNbMV0tb10sW3NbMF0rbyxzWzFdK29dXTp0PT09UUs/W1tNYXRoLm1heChzWzBdLW8sYyksZV0sW01hdGgubWluKHNbMF0rbyxuKSxpXV06W1tjLE1hdGgubWF4KHNbMV0tbyxlKV0sW24sTWF0aC5taW4oc1sxXStvLGkpXV0pfXJldHVybiByLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhKHQpLHUoKSk6YSgpfSxyLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocyh0KSx1KCkpOnMoKX0sci5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8odCksdSgpKTpvKCl9LHIuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9jPWU9bj1pPW51bGw6KGM9K3RbMF1bMF0sZT0rdFswXVsxXSxuPSt0WzFdWzBdLGk9K3RbMV1bMV0pLHUoKSk6bnVsbD09Yz9udWxsOltbYyxlXSxbbixpXV19LHUoKX1mdW5jdGlvbiBlWih0KXtyZXR1cm4gbFkoKHFxK3QpLzIpfWZ1bmN0aW9uIG5aKHQsZSl7dmFyIG49dFkodCksaT10PT09ZT9vWSh0KTppWShuL3RZKGUpKS9pWShlWihlKS9lWih0KSkscj1uKnJZKGVaKHQpLGkpL2k7aWYoIWkpcmV0dXJuIFFLO2Z1bmN0aW9uIG8odCxlKXtyPjA/ZTwtcXErR3EmJihlPS1xcStHcSk6ZT5xcS1HcSYmKGU9cXEtR3EpO3ZhciBuPXIvclkoZVooZSksaSk7cmV0dXJuW24qb1koaSp0KSxyLW4qdFkoaSp0KV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG49ci1lLG89YVkoaSkqc1kodCp0K24qbik7cmV0dXJuW1FxKHQsWnEobikpL2kqYVkobiksMipKcShyWShyL28sMS9pKSktcXFdfSxvfWZ1bmN0aW9uIGlaKHQsZSl7cmV0dXJuW3QsZV19ZnVuY3Rpb24gcloodCxlKXt2YXIgbj10WSh0KSxpPXQ9PT1lP29ZKHQpOihuLXRZKGUpKS8oZS10KSxyPW4vaSt0O2lmKFpxKGkpPEdxKXJldHVybiBpWjtmdW5jdGlvbiBvKHQsZSl7dmFyIG49ci1lLG89aSp0O3JldHVybltuKm9ZKG8pLHItbip0WShvKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG49ci1lO3JldHVybltRcSh0LFpxKG4pKS9pKmFZKG4pLHItYVkoaSkqc1kodCp0K24qbildfSxvfWZ1bmN0aW9uIG9aKHQsZSl7dmFyIG49dFkoZSksaT10WSh0KSpuO3JldHVybltuKm9ZKHQpL2ksb1koZSkvaV19ZnVuY3Rpb24gYVoodCxlLG4saSl7cmV0dXJuIDE9PT10JiYxPT09ZSYmMD09PW4mJjA9PT1pP1IkOklLKHtwb2ludDpmdW5jdGlvbihyLG8pe3RoaXMuc3RyZWFtLnBvaW50KHIqdCtuLG8qZStpKX19KX1mdW5jdGlvbiBzWih0LGUpe3ZhciBuPWUqZSxpPW4qbjtyZXR1cm5bdCooLjg3MDctLjEzMTk3OSpuK2kqKGkqKC4wMDM5NzEqbi0uMDAxNTI5KmkpLS4wMTM3OTEpKSxlKigxLjAwNzIyNituKiguMDE1MDg1K2kqKC4wMjg4NzQqbi0uMDQ0NDc1LS4wMDU5MTYqaSkpKV19ZnVuY3Rpb24gbFoodCxlKXtyZXR1cm5bdFkoZSkqb1kodCksb1koZSldfWZ1bmN0aW9uIGNaKHQsZSl7dmFyIG49dFkoZSksaT0xK3RZKHQpKm47cmV0dXJuW24qb1kodCkvaSxvWShlKS9pXX1mdW5jdGlvbiB1Wih0LGUpe3JldHVybltpWShsWSgocXErZSkvMikpLC10XX1mdW5jdGlvbiBoWih0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiBkWih0LGUpe3JldHVybiB0K2UueH1mdW5jdGlvbiBwWih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUueSl9ZnVuY3Rpb24gZloodCl7dmFyIGU9MCxuPXQuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDtpZihpKWZvcig7LS1pPj0wOyllKz1uW2ldLnZhbHVlO2Vsc2UgZT0xO3QudmFsdWU9ZX1mdW5jdGlvbiBtWih0LGUpe3ZhciBuLGkscixvLGEscz1uZXcgdloodCksbD0rdC52YWx1ZSYmKHMudmFsdWU9dC52YWx1ZSksYz1bc107Zm9yKG51bGw9PWUmJihlPWdaKTtuPWMucG9wKCk7KWlmKGwmJihuLnZhbHVlPStuLmRhdGEudmFsdWUpLChyPWUobi5kYXRhKSkmJihhPXIubGVuZ3RoKSlmb3Iobi5jaGlsZHJlbj1uZXcgQXJyYXkoYSksbz1hLTE7bz49MDstLW8pYy5wdXNoKGk9bi5jaGlsZHJlbltvXT1uZXcgdloocltvXSkpLGkucGFyZW50PW4saS5kZXB0aD1uLmRlcHRoKzE7cmV0dXJuIHMuZWFjaEJlZm9yZSh5Wil9ZnVuY3Rpb24gZ1oodCl7cmV0dXJuIHQuY2hpbGRyZW59ZnVuY3Rpb24gX1oodCl7dC5kYXRhPXQuZGF0YS5kYXRhfWZ1bmN0aW9uIHlaKHQpe3ZhciBlPTA7ZG97dC5oZWlnaHQ9ZX13aGlsZSgodD10LnBhcmVudCkmJnQuaGVpZ2h0PCsrZSl9ZnVuY3Rpb24gdloodCl7dGhpcy5kYXRhPXQsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9SksuaW52ZXJ0PUtLKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKSxRSy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCwyKkpxKG5ZKGUpKS1xcV19LGlaLmludmVydD1pWixvWi5pbnZlcnQ9S0soSnEpLHNaLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuLGk9ZSxyPTI1O2Rve3ZhciBvPWkqaSxhPW8qbztpLT1uPShpKigxLjAwNzIyNitvKiguMDE1MDg1K2EqKC4wMjg4NzQqby0uMDQ0NDc1LS4wMDU5MTYqYSkpKS1lKS8oMS4wMDcyMjYrbyooLjA0NTI1NSthKiguMjU5ODY2Km8tLjMxMTMyNS0uMDA1OTE2KjExKmEpKSl9d2hpbGUoWnEobik+R3EmJi0tcj4wKTtyZXR1cm5bdC8oLjg3MDcrKG89aSppKSoobyoobypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKS0uMDEzNzkxKS0uMTMxOTc5KSksaV19LGxaLmludmVydD1LSyh1WSksY1ouaW52ZXJ0PUtLKChmdW5jdGlvbih0KXtyZXR1cm4gMipKcSh0KX0pKSx1Wi5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bLWUsMipKcShuWSh0KSktcXFdfSx2Wi5wcm90b3R5cGU9bVoucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp2Wixjb3VudDpmdW5jdGlvbiBiWigpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmWil9LGVhY2g6ZnVuY3Rpb24geFoodCl7dmFyIGUsbixpLHIsbz10aGlzLGE9W29dO2Rve2ZvcihlPWEucmV2ZXJzZSgpLGE9W107bz1lLnBvcCgpOylpZih0KG8pLG49by5jaGlsZHJlbilmb3IoaT0wLHI9bi5sZW5ndGg7aTxyOysraSlhLnB1c2gobltpXSl9d2hpbGUoYS5sZW5ndGgpO3JldHVybiB0aGlzfSxlYWNoQWZ0ZXI6ZnVuY3Rpb24gd1oodCl7Zm9yKHZhciBlLG4saSxyPXRoaXMsbz1bcl0sYT1bXTtyPW8ucG9wKCk7KWlmKGEucHVzaChyKSxlPXIuY2hpbGRyZW4pZm9yKG49MCxpPWUubGVuZ3RoO248aTsrK24pby5wdXNoKGVbbl0pO2Zvcig7cj1hLnBvcCgpOyl0KHIpO3JldHVybiB0aGlzfSxlYWNoQmVmb3JlOmZ1bmN0aW9uIFNaKHQpe2Zvcih2YXIgZSxuLGk9dGhpcyxyPVtpXTtpPXIucG9wKCk7KWlmKHQoaSksZT1pLmNoaWxkcmVuKWZvcihuPWUubGVuZ3RoLTE7bj49MDstLW4pci5wdXNoKGVbbl0pO3JldHVybiB0aGlzfSxzdW06ZnVuY3Rpb24gTVoodCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKChmdW5jdGlvbihlKXtmb3IodmFyIG49K3QoZS5kYXRhKXx8MCxpPWUuY2hpbGRyZW4scj1pJiZpLmxlbmd0aDstLXI+PTA7KW4rPWlbcl0udmFsdWU7ZS52YWx1ZT1ufSkpfSxzb3J0OmZ1bmN0aW9uIEVaKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW4mJmUuY2hpbGRyZW4uc29ydCh0KX0pKX0scGF0aDpmdW5jdGlvbiBUWih0KXtmb3IodmFyIGU9dGhpcyxuPShmdW5jdGlvbiBpKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIG49dC5hbmNlc3RvcnMoKSxpPWUuYW5jZXN0b3JzKCkscj1udWxsO2Zvcih0PW4ucG9wKCksZT1pLnBvcCgpO3Q9PT1lOylyPXQsdD1uLnBvcCgpLGU9aS5wb3AoKTtyZXR1cm4gcn0pKGUsdCkscj1bZV07ZSE9PW47KXIucHVzaChlPWUucGFyZW50KTtmb3IodmFyIG89ci5sZW5ndGg7dCE9PW47KXIuc3BsaWNlKG8sMCx0KSx0PXQucGFyZW50O3JldHVybiByfSxhbmNlc3RvcnM6ZnVuY3Rpb24gQ1ooKXtmb3IodmFyIHQ9dGhpcyxlPVt0XTt0PXQucGFyZW50OyllLnB1c2godCk7cmV0dXJuIGV9LGRlc2NlbmRhbnRzOmZ1bmN0aW9uIEFaKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSkpLHR9LGxlYXZlczpmdW5jdGlvbiBrWigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fHQucHVzaChlKX0pKSx0fSxsaW5rczpmdW5jdGlvbiBMWigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbihuKXtuIT09dCYmZS5wdXNoKHtzb3VyY2U6bi5wYXJlbnQsdGFyZ2V0Om59KX0pKSxlfSxjb3B5OmZ1bmN0aW9uIFBaKCl7cmV0dXJuIG1aKHRoaXMpLmVhY2hCZWZvcmUoX1opfX07dmFyIE5aPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBJWih0KXtmb3IodmFyIGUsbixpPTAscj0odD0oZnVuY3Rpb24gbyh0KXtmb3IodmFyIGUsbixpPXQubGVuZ3RoO2k7KW49TWF0aC5yYW5kb20oKSppLS18MCxlPXRbaV0sdFtpXT10W25dLHRbbl09ZTtyZXR1cm4gdH0pKE5aLmNhbGwodCkpKS5sZW5ndGgsYT1bXTtpPHI7KWU9dFtpXSxuJiZ6WihuLGUpPysraToobj1CWihhPVJaKGEsZSkpLGk9MCk7cmV0dXJuIG59ZnVuY3Rpb24gUloodCxlKXt2YXIgbixpO2lmKERaKGUsdCkpcmV0dXJuW2VdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24paWYoT1ooZSx0W25dKSYmRFooSFoodFtuXSxlKSx0KSlyZXR1cm5bdFtuXSxlXTtmb3Iobj0wO248dC5sZW5ndGgtMTsrK24pZm9yKGk9bisxO2k8dC5sZW5ndGg7KytpKWlmKE9aKEhaKHRbbl0sdFtpXSksZSkmJk9aKEhaKHRbbl0sZSksdFtpXSkmJk9aKEhaKHRbaV0sZSksdFtuXSkmJkRaKEZaKHRbbl0sdFtpXSxlKSx0KSlyZXR1cm5bdFtuXSx0W2ldLGVdO3Rocm93IG5ldyBFcnJvcn1mdW5jdGlvbiBPWih0LGUpe3ZhciBuPXQuci1lLnIsaT1lLngtdC54LHI9ZS55LXQueTtyZXR1cm4gbjwwfHxuKm48aSppK3Iqcn1mdW5jdGlvbiB6Wih0LGUpe3ZhciBuPXQuci1lLnIrMWUtNixpPWUueC10Lngscj1lLnktdC55O3JldHVybiBuPjAmJm4qbj5pKmkrcipyfWZ1bmN0aW9uIERaKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24paWYoIXpaKHQsZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQloodCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJue3g6dC54LHk6dC55LHI6dC5yfX0pKHRbMF0pO2Nhc2UgMjpyZXR1cm4gSFoodFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIEZaKHRbMF0sdFsxXSx0WzJdKX19ZnVuY3Rpb24gSFoodCxlKXt2YXIgbj10LngsaT10Lnkscj10LnIsbz1lLngsYT1lLnkscz1lLnIsbD1vLW4sYz1hLWksdT1zLXIsaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KG4rbytsL2gqdSkvMix5OihpK2ErYy9oKnUpLzIscjooaCtyK3MpLzJ9fWZ1bmN0aW9uIEZaKHQsZSxuKXt2YXIgaT10Lngscj10Lnksbz10LnIsYT1lLngscz1lLnksbD1lLnIsYz1uLngsdT1uLnksaD1uLnIsZD1pLWEscD1pLWMsZj1yLXMsbT1yLXUsZz1sLW8sXz1oLW8seT1pKmkrcipyLW8qbyx2PXktYSphLXMqcytsKmwsYj15LWMqYy11KnUraCpoLHg9cCpmLWQqbSx3PShmKmItbSp2KS8oMip4KS1pLFM9KG0qZy1mKl8pL3gsTT0ocCp2LWQqYikvKDIqeCktcixFPShkKl8tcCpnKS94LFQ9UypTK0UqRS0xLEM9Mioobyt3KlMrTSpFKSxBPXcqdytNKk0tbypvLGs9LShUPyhDK01hdGguc3FydChDKkMtNCpUKkEpKS8oMipUKTpBL0MpO3JldHVybnt4OmkrdytTKmsseTpyK00rRSprLHI6a319ZnVuY3Rpb24gVloodCxlLG4pe3ZhciBpPXQueCxyPXQueSxvPWUucituLnIsYT10LnIrbi5yLHM9ZS54LWksbD1lLnktcixjPXMqcytsKmw7aWYoYyl7dmFyIHU9LjUrKChhKj1hKS0obyo9bykpLygyKmMpLGg9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihhK2MpLShhLT1jKSphLW8qbykpLygyKmMpO24ueD1pK3UqcytoKmwsbi55PXIrdSpsLWgqc31lbHNlIG4ueD1pK2Esbi55PXJ9ZnVuY3Rpb24gVVoodCxlKXt2YXIgbj1lLngtdC54LGk9ZS55LXQueSxyPXQucitlLnI7cmV0dXJuIHIqci0xZS02Pm4qbitpKml9ZnVuY3Rpb24galoodCl7dmFyIGU9dC5fLG49dC5uZXh0Ll8saT1lLnIrbi5yLHI9KGUueCpuLnIrbi54KmUucikvaSxvPShlLnkqbi5yK24ueSplLnIpL2k7cmV0dXJuIHIqcitvKm99ZnVuY3Rpb24gR1oodCl7dGhpcy5fPXQsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIFdaKHQpe2lmKCEocj10Lmxlbmd0aCkpcmV0dXJuIDA7dmFyIGUsbixpLHIsbyxhLHMsbCxjLHUsaDtpZigoZT10WzBdKS54PTAsZS55PTAsIShyPjEpKXJldHVybiBlLnI7aWYoZS54PS0obj10WzFdKS5yLG4ueD1lLnIsbi55PTAsIShyPjIpKXJldHVybiBlLnIrbi5yO1ZaKG4sZSxpPXRbMl0pLGU9bmV3IEdaKGUpLG49bmV3IEdaKG4pLGk9bmV3IEdaKGkpLGUubmV4dD1pLnByZXZpb3VzPW4sbi5uZXh0PWUucHJldmlvdXM9aSxpLm5leHQ9bi5wcmV2aW91cz1lO3Q6Zm9yKHM9MztzPHI7KytzKXtWWihlLl8sbi5fLGk9dFtzXSksaT1uZXcgR1ooaSksbD1uLm5leHQsYz1lLnByZXZpb3VzLHU9bi5fLnIsaD1lLl8ucjtkb3tpZih1PD1oKXtpZihVWihsLl8saS5fKSl7ZS5uZXh0PW49bCxuLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9dSs9bC5fLnIsbD1sLm5leHR9ZWxzZXtpZihVWihjLl8saS5fKSl7KGU9YykubmV4dD1uLG4ucHJldmlvdXM9ZSwtLXM7Y29udGludWUgdH1oKz1jLl8ucixjPWMucHJldmlvdXN9fXdoaWxlKGwhPT1jLm5leHQpO2ZvcihpLnByZXZpb3VzPWUsaS5uZXh0PW4sZS5uZXh0PW4ucHJldmlvdXM9bj1pLG89alooZSk7KGk9aS5uZXh0KSE9PW47KShhPWpaKGkpKTxvJiYoZT1pLG89YSk7bj1lLm5leHR9Zm9yKGU9W24uX10saT1uOyhpPWkubmV4dCkhPT1uOyllLnB1c2goaS5fKTtmb3IoaT1JWihlKSxzPTA7czxyOysrcykoZT10W3NdKS54LT1pLngsZS55LT1pLnk7cmV0dXJuIGkucn1mdW5jdGlvbiBxWih0KXtyZXR1cm4gbnVsbD09dD9udWxsOllaKHQpfWZ1bmN0aW9uIFlaKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH1mdW5jdGlvbiBYWigpe3JldHVybiAwfWZ1bmN0aW9uICRaKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBLWih0KXtyZXR1cm4gTWF0aC5zcXJ0KHQudmFsdWUpfWZ1bmN0aW9uIFpaKHQpe3JldHVybiBmdW5jdGlvbihlKXtlLmNoaWxkcmVufHwoZS5yPU1hdGgubWF4KDAsK3QoZSl8fDApKX19ZnVuY3Rpb24gSloodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7aWYoaT1uLmNoaWxkcmVuKXt2YXIgaSxyLG8sYT1pLmxlbmd0aCxzPXQobikqZXx8MDtpZihzKWZvcihyPTA7cjxhOysrcilpW3JdLnIrPXM7aWYobz1XWihpKSxzKWZvcihyPTA7cjxhOysrcilpW3JdLnItPXM7bi5yPW8rc319fWZ1bmN0aW9uIFFaKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1lLnBhcmVudDtlLnIqPXQsbiYmKGUueD1uLngrdCplLngsZS55PW4ueSt0KmUueSl9fWZ1bmN0aW9uIHRKKHQpe3QueDA9TWF0aC5yb3VuZCh0LngwKSx0LnkwPU1hdGgucm91bmQodC55MCksdC54MT1NYXRoLnJvdW5kKHQueDEpLHQueTE9TWF0aC5yb3VuZCh0LnkxKX1mdW5jdGlvbiBlSih0LGUsbixpLHIpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4scz0tMSxsPWEubGVuZ3RoLGM9dC52YWx1ZSYmKGktZSkvdC52YWx1ZTsrK3M8bDspKG89YVtzXSkueTA9bixvLnkxPXIsby54MD1lLG8ueDE9ZSs9by52YWx1ZSpjfXZhciBuSj17ZGVwdGg6LTF9LGlKPXt9O2Z1bmN0aW9uIHJKKHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIG9KKHQpe3JldHVybiB0LnBhcmVudElkfWZ1bmN0aW9uIGFKKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIHNKKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVswXTp0LnR9ZnVuY3Rpb24gbEoodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lW2UubGVuZ3RoLTFdOnQudH1mdW5jdGlvbiBjSih0LGUsbil7dmFyIGk9bi8oZS5pLXQuaSk7ZS5jLT1pLGUucys9bix0LmMrPWksZS56Kz1uLGUubSs9bn1mdW5jdGlvbiB1Sih0LGUsbil7cmV0dXJuIHQuYS5wYXJlbnQ9PT1lLnBhcmVudD90LmE6bn1mdW5jdGlvbiBoSih0LGUpe3RoaXMuXz10LHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1udWxsLHRoaXMuQT1udWxsLHRoaXMuYT10aGlzLHRoaXMuej0wLHRoaXMubT0wLHRoaXMuYz0wLHRoaXMucz0wLHRoaXMudD1udWxsLHRoaXMuaT1lfWZ1bmN0aW9uIGRKKHQsZSxuLGkscil7Zm9yKHZhciBvLGE9dC5jaGlsZHJlbixzPS0xLGw9YS5sZW5ndGgsYz10LnZhbHVlJiYoci1uKS90LnZhbHVlOysrczxsOykobz1hW3NdKS54MD1lLG8ueDE9aSxvLnkwPW4sby55MT1uKz1vLnZhbHVlKmN9aEoucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodloucHJvdG90eXBlKTt2YXIgcEo9KDErTWF0aC5zcXJ0KDUpKS8yO2Z1bmN0aW9uIGZKKHQsZSxuLGkscixvKXtmb3IodmFyIGEscyxsLGMsdSxoLGQscCxmLG0sZyxfPVtdLHk9ZS5jaGlsZHJlbix2PTAsYj0wLHg9eS5sZW5ndGgsdz1lLnZhbHVlO3Y8eDspe2w9ci1uLGM9by1pO2Rve3U9eVtiKytdLnZhbHVlfXdoaWxlKCF1JiZiPHgpO2ZvcihoPWQ9dSxnPXUqdSoobT1NYXRoLm1heChjL2wsbC9jKS8odyp0KSksZj1NYXRoLm1heChkL2csZy9oKTtiPHg7KytiKXtpZih1Kz1zPXlbYl0udmFsdWUsczxoJiYoaD1zKSxzPmQmJihkPXMpLGc9dSp1Km0sKHA9TWF0aC5tYXgoZC9nLGcvaCkpPmYpe3UtPXM7YnJlYWt9Zj1wfV8ucHVzaChhPXt2YWx1ZTp1LGRpY2U6bDxjLGNoaWxkcmVuOnkuc2xpY2UodixiKX0pLGEuZGljZT9lSihhLG4saSxyLHc/aSs9Yyp1L3c6byk6ZEooYSxuLGksdz9uKz1sKnUvdzpyLG8pLHctPXUsdj1ifXJldHVybiBffXZhciBtSj0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbixpLHIsbyl7ZkooZSx0LG4saSxyLG8pfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KShwSiksZ0o9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4saSxyLG8pe2lmKChhPXQuX3NxdWFyaWZ5KSYmYS5yYXRpbz09PWUpZm9yKHZhciBhLHMsbCxjLHUsaD0tMSxkPWEubGVuZ3RoLHA9dC52YWx1ZTsrK2g8ZDspe2ZvcihsPShzPWFbaF0pLmNoaWxkcmVuLGM9cy52YWx1ZT0wLHU9bC5sZW5ndGg7Yzx1OysrYylzLnZhbHVlKz1sW2NdLnZhbHVlO3MuZGljZT9lSihzLG4saSxyLGkrPShvLWkpKnMudmFsdWUvcCk6ZEoocyxuLGksbis9KHItbikqcy52YWx1ZS9wLG8pLHAtPXMudmFsdWV9ZWxzZSB0Ll9zcXVhcmlmeT1hPWZKKGUsdCxuLGkscixvKSxhLnJhdGlvPWV9cmV0dXJuIG4ucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0sbn0pKHBKKTtmdW5jdGlvbiBfSih0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24geUoodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIGkgaW4gZSluW2ldPWVbaV07cmV0dXJuIG59ZnVuY3Rpb24gdkooKXt9dmFyIGJKPS43LHhKPTEvYkosd0o9IlxccyooWystXT9cXGQrKVxccyoiLFNKPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLE1KPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixFSj0vXiMoWzAtOWEtZl17Myw4fSkkLyxUSj1uZXcgUmVnRXhwKCJecmdiXFwoIitbd0osd0osd0pdKyJcXCkkIiksQ0o9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW01KLE1KLE1KXSsiXFwpJCIpLEFKPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbd0osd0osd0osU0pdKyJcXCkkIiksa0o9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tNSixNSixNSixTSl0rIlxcKSQiKSxMSj1uZXcgUmVnRXhwKCJeaHNsXFwoIitbU0osTUosTUpdKyJcXCkkIiksUEo9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tTSixNSixNSixTSl0rIlxcKSQiKSxOSj17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBJSigpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIFJKKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gT0oodCl7dmFyIGUsbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9RUouZXhlYyh0KSk/KG49ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09bj96SihlKTozPT09bj9uZXcgRkooZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1uP0RKKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP0RKKGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9VEouZXhlYyh0KSk/bmV3IEZKKGVbMV0sZVsyXSxlWzNdLDEpOihlPUNKLmV4ZWModCkpP25ldyBGSigyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1BSi5leGVjKHQpKT9ESihlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1rSi5leGVjKHQpKT9ESigyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1MSi5leGVjKHQpKT9HSihlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPVBKLmV4ZWModCkpP0dKKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6TkouaGFzT3duUHJvcGVydHkodCk/ekooTkpbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBGSihOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIHpKKHQpe3JldHVybiBuZXcgRkoodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIERKKHQsZSxuLGkpe3JldHVybiBpPD0wJiYodD1lPW49TmFOKSxuZXcgRkoodCxlLG4saSl9ZnVuY3Rpb24gQkoodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB2Snx8KHQ9T0oodCkpLHQ/bmV3IEZKKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBGSn1mdW5jdGlvbiBISih0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/QkoodCk6bmV3IEZKKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBGSih0LGUsbixpKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gVkooKXtyZXR1cm4iIyIrakoodGhpcy5yKStqSih0aGlzLmcpK2pKKHRoaXMuYil9ZnVuY3Rpb24gVUooKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiBqSih0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIEdKKHQsZSxuLGkpe3JldHVybiBpPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgWUoodCxlLG4saSl9ZnVuY3Rpb24gV0oodCl7aWYodCBpbnN0YW5jZW9mIFlKKXJldHVybiBuZXcgWUoodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2Ygdkp8fCh0PU9KKHQpKSwhdClyZXR1cm4gbmV3IFlKO2lmKHQgaW5zdGFuY2VvZiBZSilyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUsaT10LmIvMjU1LHI9TWF0aC5taW4oZSxuLGkpLG89TWF0aC5tYXgoZSxuLGkpLGE9TmFOLHM9by1yLGw9KG8rcikvMjtyZXR1cm4gcz8oYT1lPT09bz8obi1pKS9zKzYqKG48aSk6bj09PW8/KGktZSkvcysyOihlLW4pL3MrNCxzLz1sPC41P28rcjoyLW8tcixhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IFlKKGEscyxsLHQub3BhY2l0eSl9ZnVuY3Rpb24gcUoodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1dKKHQpOm5ldyBZSih0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gWUoodCxlLG4saSl7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIFhKKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1fSih2SixPSix7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpJSixmb3JtYXRIZXg6SUosZm9ybWF0SHNsOmZ1bmN0aW9uICRKKCl7cmV0dXJuIFdKKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6UkosdG9TdHJpbmc6Ukp9KSxfSihGSixISix5Sih2Six7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD94SjpNYXRoLnBvdyh4Six0KSxuZXcgRkoodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Yko6TWF0aC5wb3coYkosdCksbmV3IEZKKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6VkosZm9ybWF0SGV4OlZKLGZvcm1hdFJnYjpVSix0b1N0cmluZzpVSn0pKSxfSihZSixxSix5Sih2Six7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD94SjpNYXRoLnBvdyh4Six0KSxuZXcgWUoodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9iSjpNYXRoLnBvdyhiSix0KSxuZXcgWUoodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwsaT1uKyhuPC41P246MS1uKSplLHI9MipuLWk7cmV0dXJuIG5ldyBGSihYSih0Pj0yNDA/dC0yNDA6dCsxMjAscixpKSxYSih0LHIsaSksWEoodDwxMjA/dCsyNDA6dC0xMjAscixpKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisxMDAqKHRoaXMuc3x8MCkrIiUsICIrMTAwKih0aGlzLmx8fDApKyIlIisoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKTt2YXIgS0o9TWF0aC5QSS8xODAsWko9MTgwL01hdGguUEksSko9Ljk2NDIyLFFKPS44MjUyMSx0UT00LzI5LGVRPTYvMjksblE9MyplUSplUTtmdW5jdGlvbiBpUSh0KXtpZih0IGluc3RhbmNlb2Ygb1EpcmV0dXJuIG5ldyBvUSh0LmwsdC5hLHQuYix0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBkUSlyZXR1cm4gcFEodCk7dCBpbnN0YW5jZW9mIEZKfHwodD1CSih0KSk7dmFyIGUsbixpPWNRKHQucikscj1jUSh0LmcpLG89Y1EodC5iKSxhPWFRKCguMjIyNTA0NSppKy43MTY4Nzg2KnIrLjA2MDYxNjkqbykvMSk7cmV0dXJuIGk9PT1yJiZyPT09bz9lPW49YTooZT1hUSgoLjQzNjA3NDcqaSsuMzg1MDY0OSpyKy4xNDMwODA0Km8pL0pKKSxuPWFRKCguMDEzOTMyMippKy4wOTcxMDQ1KnIrLjcxNDE3MzMqbykvUUopKSxuZXcgb1EoMTE2KmEtMTYsNTAwKihlLWEpLDIwMCooYS1uKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIHJRKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9pUSh0KTpuZXcgb1EodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIG9RKHQsZSxuLGkpe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBhUSh0KXtyZXR1cm4gdD4uMDA4ODU2NDUxNjc5MDM1NjMxP01hdGgucG93KHQsMS8zKTp0L25RK3RRfWZ1bmN0aW9uIHNRKHQpe3JldHVybiB0PmVRP3QqdCp0Om5RKih0LXRRKX1mdW5jdGlvbiBsUSh0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIGNRKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIHVRKHQpe2lmKHQgaW5zdGFuY2VvZiBkUSlyZXR1cm4gbmV3IGRRKHQuaCx0LmMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIG9RfHwodD1pUSh0KSksMD09PXQuYSYmMD09PXQuYilyZXR1cm4gbmV3IGRRKE5hTiwwPHQubCYmdC5sPDEwMD8wOk5hTix0LmwsdC5vcGFjaXR5KTt2YXIgZT1NYXRoLmF0YW4yKHQuYix0LmEpKlpKO3JldHVybiBuZXcgZFEoZTwwP2UrMzYwOmUsTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYiksdC5sLHQub3BhY2l0eSl9ZnVuY3Rpb24gaFEodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3VRKHQpOm5ldyBkUSh0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gZFEodCxlLG4saSl7dGhpcy5oPSt0LHRoaXMuYz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIHBRKHQpe2lmKGlzTmFOKHQuaCkpcmV0dXJuIG5ldyBvUSh0LmwsMCwwLHQub3BhY2l0eSk7dmFyIGU9dC5oKktKO3JldHVybiBuZXcgb1EodC5sLE1hdGguY29zKGUpKnQuYyxNYXRoLnNpbihlKSp0LmMsdC5vcGFjaXR5KX1fSihvUSxyUSx5Sih2Six7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvUSh0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG9RKHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LGU9aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxuPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIG5ldyBGSihsUSgzLjEzMzg1NjEqKGU9Skoqc1EoZSkpLTEuNjE2ODY2NyoodD0xKnNRKHQpKS0uNDkwNjE0Nioobj1RSipzUShuKSkpLGxRKC0uOTc4NzY4NCplKzEuOTE2MTQxNSp0Ky4wMzM0NTQqbiksbFEoLjA3MTk0NTMqZS0uMjI4OTkxNCp0KzEuNDA1MjQyNypuKSx0aGlzLm9wYWNpdHkpfX0pKSxfSihkUSxoUSx5Sih2Six7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBkUSh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGRRKHRoaXMuaCx0aGlzLmMsdGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHBRKHRoaXMpLnJnYigpfX0pKTt2YXIgZlE9LS4yOTIyNyxtUT0tLjkwNjQ5LGdRPTEuOTcyOTQ7ZnVuY3Rpb24gX1EodCl7aWYodCBpbnN0YW5jZW9mIHZRKXJldHVybiBuZXcgdlEodC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgRkp8fCh0PUJKKHQpKTt2YXIgZT10LmcvMjU1LG49dC5iLzI1NSxpPSgtLjY1NTc2MzY2Njc5OTk5OTkqbit0LnIvMjU1Ki0xLjc4ODQ1MDM4MDYtMy41MTcyOTgyNDM4KmUpLy01Ljk2MTUxMjI5MTIscj1uLWksbz0oZ1EqKGUtaSktZlEqcikvbVEsYT1NYXRoLnNxcnQobypvK3IqcikvKGdRKmkqKDEtaSkpLHM9YT9NYXRoLmF0YW4yKG8scikqWkotMTIwOk5hTjtyZXR1cm4gbmV3IHZRKHM8MD9zKzM2MDpzLGEsaSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIHlRKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9fUSh0KTpuZXcgdlEodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIHZRKHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBiUSh0LGUsbixpLHIpe3ZhciBvPXQqdCxhPW8qdDtyZXR1cm4oKDEtMyp0KzMqby1hKSplKyg0LTYqbyszKmEpKm4rKDErMyp0KzMqby0zKmEpKmkrYSpyKS82fWZ1bmN0aW9uIHhRKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxyPXRbaV0sbz10W2krMV07cmV0dXJuIGJRKChuLWkvZSkqZSxpPjA/dFtpLTFdOjIqci1vLHIsbyxpPGUtMT90W2krMl06MipvLXIpfX1mdW5jdGlvbiB3USh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9TWF0aC5mbG9vcigoKG4lPTEpPDA/KytuOm4pKmUpO3JldHVybiBiUSgobi1pL2UpKmUsdFsoaStlLTEpJWVdLHRbaSVlXSx0WyhpKzEpJWVdLHRbKGkrMiklZV0pfX1mdW5jdGlvbiBTUSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gTVEodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX1mdW5jdGlvbiBFUSh0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9NUSh0LG4+MTgwfHxuPC0xODA/bi0zNjAqTWF0aC5yb3VuZChuLzM2MCk6bik6U1EoaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBUUSh0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9NUSh0LG4pOlNRKGlzTmFOKHQpP2U6dCl9X0oodlEseVEseUoodkose2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/eEo6TWF0aC5wb3coeEosdCksbmV3IHZRKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Yko6TWF0aC5wb3coYkosdCksbmV3IHZRKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpLSixlPSt0aGlzLmwsbj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmUqKDEtZSksaT1NYXRoLmNvcyh0KSxyPU1hdGguc2luKHQpO3JldHVybiBuZXcgRkooMjU1KihlK24qKC0uMTQ4NjEqaSsxLjc4Mjc3KnIpKSwyNTUqKGUrbiooZlEqaSttUSpyKSksMjU1KihlK24qKGdRKmkpKSx0aGlzLm9wYWNpdHkpfX0pKTt2YXIgQ1E9KGZ1bmN0aW9uIHQoZSl7dmFyIG49KGZ1bmN0aW9uIGkodCl7cmV0dXJuIDE9PSh0PSt0KT9UUTpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/KGZ1bmN0aW9uIGkodCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGgucG93KHQraSplLG4pfX0pKGUsbix0KTpTUShpc05hTihlKT9uOmUpfX0pKGUpO2Z1bmN0aW9uIHIodCxlKXt2YXIgaT1uKCh0PUhKKHQpKS5yLChlPUhKKGUpKS5yKSxyPW4odC5nLGUuZyksbz1uKHQuYixlLmIpLGE9VFEodC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9aShlKSx0Lmc9cihlKSx0LmI9byhlKSx0Lm9wYWNpdHk9YShlKSx0KyIifX1yZXR1cm4gci5nYW1tYT10LHJ9KSgxKTtmdW5jdGlvbiBBUSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4saSxyPWUubGVuZ3RoLG89bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLHM9bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxyOysrbilpPUhKKGVbbl0pLG9bbl09aS5yfHwwLGFbbl09aS5nfHwwLHNbbl09aS5ifHwwO3JldHVybiBvPXQobyksYT10KGEpLHM9dChzKSxpLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gaS5yPW8odCksaS5nPWEodCksaS5iPXModCksaSsiIn19fXZhciBrUT1BUSh4USksTFE9QVEod1EpO2Z1bmN0aW9uIFBRKHQsZSl7dmFyIG4saT1lP2UubGVuZ3RoOjAscj10P01hdGgubWluKGksdC5sZW5ndGgpOjAsbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPHI7KytuKW9bbl09QlEodFtuXSxlW25dKTtmb3IoO248aTsrK24pYVtuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3Iobj0wO248cjsrK24pYVtuXT1vW25dKHQpO3JldHVybiBhfX1mdW5jdGlvbiBOUSh0LGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKGkpe3JldHVybiBuLnNldFRpbWUodCtlKmkpLG59fWZ1bmN0aW9uIElRKHQsZSl7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIHQrZSpufX1mdW5jdGlvbiBSUSh0LGUpe3ZhciBuLGk9e30scj17fTtmb3IobiBpbiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fHwodD17fSksbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZXx8KGU9e30pLGUpbiBpbiB0P2lbbl09QlEodFtuXSxlW25dKTpyW25dPWVbbl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihuIGluIGkpcltuXT1pW25dKHQpO3JldHVybiByfX12YXIgT1E9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLHpRPW5ldyBSZWdFeHAoT1Euc291cmNlLCJnIik7ZnVuY3Rpb24gRFEodCxlKXt2YXIgbixpLHIsbz1PUS5sYXN0SW5kZXg9elEubGFzdEluZGV4PTAsYT0tMSxzPVtdLGw9W107Zm9yKHQrPSIiLGUrPSIiOyhuPU9RLmV4ZWModCkpJiYoaT16US5leGVjKGUpKTspKHI9aS5pbmRleCk+byYmKHI9ZS5zbGljZShvLHIpLHNbYV0/c1thXSs9cjpzWysrYV09ciksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6SVEobixpKX0pKSxvPXpRLmxhc3RJbmRleDtyZXR1cm4gbzxlLmxlbmd0aCYmKHI9ZS5zbGljZShvKSxzW2FdP3NbYV0rPXI6c1srK2FdPXIpLHMubGVuZ3RoPDI/bFswXT8oZnVuY3Rpb24gYyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fSkobFswXS54KTooZnVuY3Rpb24gdSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KShlKTooZT1sLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIG4saT0wO2k8ZTsrK2kpc1sobj1sW2ldKS5pXT1uLngodCk7cmV0dXJuIHMuam9pbigiIil9KX1mdW5jdGlvbiBCUSh0LGUpe3ZhciBuLGk9dHlwZW9mIGU7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09PWk/U1EoZSk6KCJudW1iZXIiPT09aT9JUToic3RyaW5nIj09PWk/KG49T0ooZSkpPyhlPW4sQ1EpOkRROmUgaW5zdGFuY2VvZiBPSj9DUTplIGluc3RhbmNlb2YgRGF0ZT9OUTpBcnJheS5pc0FycmF5KGUpP1BROiJmdW5jdGlvbiIhPXR5cGVvZiBlLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiBlLnRvU3RyaW5nfHxpc05hTihlKT9SUTpJUSkodCxlKX12YXIgSFEsRlEsVlEsVVEsalE9MTgwL01hdGguUEksR1E9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gV1EodCxlLG4saSxyLG8pe3ZhciBhLHMsbDtyZXR1cm4oYT1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89YSxlLz1hKSwobD10Km4rZSppKSYmKG4tPXQqbCxpLT1lKmwpLChzPU1hdGguc3FydChuKm4raSppKSkmJihuLz1zLGkvPXMsbC89cyksdCppPGUqbiYmKHQ9LXQsZT0tZSxsPS1sLGE9LWEpLHt0cmFuc2xhdGVYOnIsdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqalEsc2tld1g6TWF0aC5hdGFuKGwpKmpRLHNjYWxlWDphLHNjYWxlWTpzfX1mdW5jdGlvbiBxUSh0LGUsbixpKXtmdW5jdGlvbiByKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24obyxhKXt2YXIgcz1bXSxsPVtdO3JldHVybiBvPXQobyksYT10KGEpLChmdW5jdGlvbiBjKHQsaSxyLG8sYSxzKXtpZih0IT09cnx8aSE9PW8pe3ZhciBsPWEucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxlLG51bGwsbik7cy5wdXNoKHtpOmwtNCx4OklRKHQscil9LHtpOmwtMix4OklRKGksbyl9KX1lbHNlKHJ8fG8pJiZhLnB1c2goInRyYW5zbGF0ZSgiK3IrZStvK24pfSkoby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLHMsbCksKGZ1bmN0aW9uIHUodCxlLG4sbyl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLG8ucHVzaCh7aTpuLnB1c2gocihuKSsicm90YXRlKCIsbnVsbCxpKS0yLHg6SVEodCxlKX0pKTplJiZuLnB1c2gocihuKSsicm90YXRlKCIrZStpKX0pKG8ucm90YXRlLGEucm90YXRlLHMsbCksKGZ1bmN0aW9uIGgodCxlLG4sbyl7dCE9PWU/by5wdXNoKHtpOm4ucHVzaChyKG4pKyJza2V3WCgiLG51bGwsaSktMix4OklRKHQsZSl9KTplJiZuLnB1c2gocihuKSsic2tld1goIitlK2kpfSkoby5za2V3WCxhLnNrZXdYLHMsbCksKGZ1bmN0aW9uIGQodCxlLG4saSxvLGEpe2lmKHQhPT1ufHxlIT09aSl7dmFyIHM9by5wdXNoKHIobykrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2EucHVzaCh7aTpzLTQseDpJUSh0LG4pfSx7aTpzLTIseDpJUShlLGkpfSl9ZWxzZSAxPT09biYmMT09PWl8fG8ucHVzaChyKG8pKyJzY2FsZSgiK24rIiwiK2krIikiKX0pKG8uc2NhbGVYLG8uc2NhbGVZLGEuc2NhbGVYLGEuc2NhbGVZLHMsbCksbz1hPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49LTEsaT1sLmxlbmd0aDsrK248aTspc1soZT1sW25dKS5pXT1lLngodCk7cmV0dXJuIHMuam9pbigiIil9fX12YXIgWVE9cVEoKGZ1bmN0aW9uIFhRKHQpe3JldHVybiJub25lIj09PXQ/R1E6KEhRfHwoSFE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksRlE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFZRPWRvY3VtZW50LmRlZmF1bHRWaWV3KSxIUS5zdHlsZS50cmFuc2Zvcm09dCx0PVZRLmdldENvbXB1dGVkU3R5bGUoRlEuYXBwZW5kQ2hpbGQoSFEpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLEZRLnJlbW92ZUNoaWxkKEhRKSxXUSgrKHQ9dC5zbGljZSg3LC0xKS5zcGxpdCgiLCIpKVswXSwrdFsxXSwrdFsyXSwrdFszXSwrdFs0XSwrdFs1XSkpfSksInB4LCAiLCJweCkiLCJkZWcpIiksJFE9cVEoKGZ1bmN0aW9uIEtRKHQpe3JldHVybiBudWxsPT10P0dROihVUXx8KFVRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLFVRLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1VUS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9XUSgodD10Lm1hdHJpeCkuYSx0LmIsdC5jLHQuZCx0LmUsdC5mKTpHUSl9KSwiLCAiLCIpIiwiKSIpLFpRPU1hdGguU1FSVDI7ZnVuY3Rpb24gSlEodCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKSsxL3QpLzJ9ZnVuY3Rpb24gUVEodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9dCgoZT1xSihlKSkuaCwobj1xSihuKSkuaCkscj1UUShlLnMsbi5zKSxvPVRRKGUubCxuLmwpLGE9VFEoZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9aSh0KSxlLnM9cih0KSxlLmw9byh0KSxlLm9wYWNpdHk9YSh0KSxlKyIifX19dmFyIHQxPVFRKEVRKSxlMT1RUShUUSk7ZnVuY3Rpb24gbjEodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9dCgoZT1oUShlKSkuaCwobj1oUShuKSkuaCkscj1UUShlLmMsbi5jKSxvPVRRKGUubCxuLmwpLGE9VFEoZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9aSh0KSxlLmM9cih0KSxlLmw9byh0KSxlLm9wYWNpdHk9YSh0KSxlKyIifX19dmFyIGkxPW4xKEVRKSxyMT1uMShUUSk7ZnVuY3Rpb24gbzEodCl7cmV0dXJuKGZ1bmN0aW9uIGUobil7ZnVuY3Rpb24gaShlLGkpe3ZhciByPXQoKGU9eVEoZSkpLmgsKGk9eVEoaSkpLmgpLG89VFEoZS5zLGkucyksYT1UUShlLmwsaS5sKSxzPVRRKGUub3BhY2l0eSxpLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5zPW8odCksZS5sPWEoTWF0aC5wb3codCxuKSksZS5vcGFjaXR5PXModCksZSsiIn19cmV0dXJuIG49K24saS5nYW1tYT1lLGl9KSgxKX12YXIgYTE9bzEoRVEpLHMxPW8xKFRRKSxsMT1NYXRoLlBJLGMxPTIqbDEsdTE9MWUtNixoMT1jMS11MTtmdW5jdGlvbiBkMSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIHAxKCl7cmV0dXJuIG5ldyBkMX1mdW5jdGlvbiBmMSh0LGUsbil7cmV0dXJuKGVbMF0tdFswXSkqKG5bMV0tdFsxXSktKGVbMV0tdFsxXSkqKG5bMF0tdFswXSl9ZnVuY3Rpb24gbTEodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gZzEodCl7Zm9yKHZhciBlPXQubGVuZ3RoLG49WzAsMV0saT0yLHI9MjtyPGU7KytyKXtmb3IoO2k+MSYmZjEodFtuW2ktMl1dLHRbbltpLTFdXSx0W3JdKTw9MDspLS1pO25baSsrXT1yfXJldHVybiBuLnNsaWNlKDAsaSl9ZnVuY3Rpb24gXzEodCxlLG4saSl7aWYoaXNOYU4oZSl8fGlzTmFOKG4pKXJldHVybiB0O3ZhciByLG8sYSxzLGwsYyx1LGgsZCxwPXQuX3Jvb3QsZj17ZGF0YTppfSxtPXQuX3gwLGc9dC5feTAsXz10Ll94MSx5PXQuX3kxO2lmKCFwKXJldHVybiB0Ll9yb290PWYsdDtmb3IoO3AubGVuZ3RoOylpZigoYz1lPj0obz0obStfKS8yKSk/bT1vOl89bywodT1uPj0oYT0oZyt5KS8yKSk/Zz1hOnk9YSxyPXAsIShwPXBbaD11PDwxfGNdKSlyZXR1cm4gcltoXT1mLHQ7aWYocz0rdC5feC5jYWxsKG51bGwscC5kYXRhKSxsPSt0Ll95LmNhbGwobnVsbCxwLmRhdGEpLGU9PT1zJiZuPT09bClyZXR1cm4gZi5uZXh0PXAscj9yW2hdPWY6dC5fcm9vdD1mLHQ7ZG97cj1yP3JbaF09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLChjPWU+PShvPShtK18pLzIpKT9tPW86Xz1vLCh1PW4+PShhPShnK3kpLzIpKT9nPWE6eT1hfXdoaWxlKChoPXU8PDF8Yyk9PShkPShsPj1hKTw8MXxzPj1vKSk7cmV0dXJuIHJbZF09cCxyW2hdPWYsdH1mdW5jdGlvbiB5MSh0LGUsbixpLHIpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPW4sdGhpcy54MT1pLHRoaXMueTE9cn1mdW5jdGlvbiB2MSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBiMSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiB4MSh0LGUsbil7dmFyIGk9bmV3IHcxKG51bGw9PWU/djE6ZSxudWxsPT1uP2IxOm4sTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9pOmkuYWRkQWxsKHQpfWZ1bmN0aW9uIHcxKHQsZSxuLGkscixvKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3gwPW4sdGhpcy5feTA9aSx0aGlzLl94MT1yLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gUzEodCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0sbj1lO3Q9dC5uZXh0OyluPW4ubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfWQxLnByb3RvdHlwZT1wMS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmQxLG1vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStlKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArZSsiLCIrKHRoaXMuX3gxPStuKSsiLCIrKHRoaXMuX3kxPStpKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpLHIsbyl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArbisiLCIrICtpKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LGUsbixpLHIpe3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz0obj0rbiktKHQ9K3QpLGw9KGk9K2kpLShlPStlKSxjPW8tdCx1PWEtZSxoPWMqYyt1KnU7aWYoKHI9K3IpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2UgaWYoaD51MSlpZihNYXRoLmFicyh1KnMtbCpjKT51MSYmcil7dmFyIGQ9bi1vLHA9aS1hLGY9cypzK2wqbCxtPWQqZCtwKnAsZz1NYXRoLnNxcnQoZiksXz1NYXRoLnNxcnQoaCkseT1yKk1hdGgudGFuKChsMS1NYXRoLmFjb3MoKGYraC1tKS8oMipnKl8pKSkvMiksdj15L18sYj15L2c7TWF0aC5hYnModi0xKT51MSYmKHRoaXMuXys9IkwiKyh0K3YqYykrIiwiKyhlK3YqdSkpLHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDAsIisgKyh1KmQ+YypwKSsiLCIrKHRoaXMuX3gxPXQrYipzKSsiLCIrKHRoaXMuX3kxPWUrYipsKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpfSxhcmM6ZnVuY3Rpb24odCxlLG4saSxyLG8pe3Q9K3QsZT0rZTt2YXIgYT0obj0rbikqTWF0aC5jb3MoaSkscz1uKk1hdGguc2luKGkpLGw9dCthLGM9ZStzLHU9MV5vLGg9bz9pLXI6ci1pO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIituKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+dTF8fE1hdGguYWJzKHRoaXMuX3kxLWMpPnUxKSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLG4mJihoPDAmJihoPWglYzErYzEpLGg+aDE/dGhpcy5fKz0iQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0LWEpKyIsIisoZS1zKSsiQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0aGlzLl94MT1sKSsiLCIrKHRoaXMuX3kxPWMpOmg+dTEmJih0aGlzLl8rPSJBIituKyIsIituKyIsMCwiKyArKGg+PWwxKSsiLCIrdSsiLCIrKHRoaXMuX3gxPXQrbipNYXRoLmNvcyhyKSkrIiwiKyh0aGlzLl95MT1lK24qTWF0aC5zaW4ocikpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtuKyJ2IisgK2krImgiKy1uKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIE0xPXgxLnByb3RvdHlwZT13MS5wcm90b3R5cGU7TTEuY29weT1mdW5jdGlvbigpe3ZhciB0LGUsbj1uZXcgdzEodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxpPXRoaXMuX3Jvb3Q7aWYoIWkpcmV0dXJuIG47aWYoIWkubGVuZ3RoKXJldHVybiBuLl9yb290PVMxKGkpLG47Zm9yKHQ9W3tzb3VyY2U6aSx0YXJnZXQ6bi5fcm9vdD1uZXcgQXJyYXkoNCl9XTtpPXQucG9wKCk7KWZvcih2YXIgcj0wO3I8NDsrK3IpKGU9aS5zb3VyY2Vbcl0pJiYoZS5sZW5ndGg/dC5wdXNoKHtzb3VyY2U6ZSx0YXJnZXQ6aS50YXJnZXRbcl09bmV3IEFycmF5KDQpfSk6aS50YXJnZXRbcl09UzEoZSkpO3JldHVybiBufSxNMS5hZGQ9ZnVuY3Rpb24gRTEodCl7dmFyIGU9K3RoaXMuX3guY2FsbChudWxsLHQpLG49K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiBfMSh0aGlzLmNvdmVyKGUsbiksZSxuLHQpfSxNMS5hZGRBbGw9ZnVuY3Rpb24gVDEodCl7dmFyIGUsbixpLHIsbz10Lmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPTEvMCxjPTEvMCx1PS0xLzAsaD0tMS8wO2ZvcihuPTA7bjxvOysrbilpc05hTihpPSt0aGlzLl94LmNhbGwobnVsbCxlPXRbbl0pKXx8aXNOYU4ocj0rdGhpcy5feS5jYWxsKG51bGwsZSkpfHwoYVtuXT1pLHNbbl09cixpPGwmJihsPWkpLGk+dSYmKHU9aSkscjxjJiYoYz1yKSxyPmgmJihoPXIpKTtmb3IodTxsJiYobD10aGlzLl94MCx1PXRoaXMuX3gxKSxoPGMmJihjPXRoaXMuX3kwLGg9dGhpcy5feTEpLHRoaXMuY292ZXIobCxjKS5jb3Zlcih1LGgpLG49MDtuPG87KytuKV8xKHRoaXMsYVtuXSxzW25dLHRbbl0pO3JldHVybiB0aGlzfSxNMS5jb3Zlcj1mdW5jdGlvbiBDMSh0LGUpe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihlPStlKSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl94MCxpPXRoaXMuX3kwLHI9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihuKSlyPShuPU1hdGguZmxvb3IodCkpKzEsbz0oaT1NYXRoLmZsb29yKGUpKSsxO2Vsc2V7aWYoIShuPnR8fHQ+cnx8aT5lfHxlPm8pKXJldHVybiB0aGlzO3ZhciBhLHMsbD1yLW4sYz10aGlzLl9yb290O3N3aXRjaChzPShlPChpK28pLzIpPDwxfHQ8KG4rcikvMil7Y2FzZSAwOmRveyhhPW5ldyBBcnJheSg0KSlbc109YyxjPWF9d2hpbGUobz1pKyhsKj0yKSx0PihyPW4rbCl8fGU+byk7YnJlYWs7Y2FzZSAxOmRveyhhPW5ldyBBcnJheSg0KSlbc109YyxjPWF9d2hpbGUobz1pKyhsKj0yKSwobj1yLWwpPnR8fGU+byk7YnJlYWs7Y2FzZSAyOmRveyhhPW5ldyBBcnJheSg0KSlbc109YyxjPWF9d2hpbGUoaT1vLShsKj0yKSx0PihyPW4rbCl8fGk+ZSk7YnJlYWs7Y2FzZSAzOmRveyhhPW5ldyBBcnJheSg0KSlbc109YyxjPWF9d2hpbGUoaT1vLShsKj0yKSwobj1yLWwpPnR8fGk+ZSl9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PWMpfXJldHVybiB0aGlzLl94MD1uLHRoaXMuX3kwPWksdGhpcy5feDE9cix0aGlzLl95MT1vLHRoaXN9LE0xLmRhdGE9ZnVuY3Rpb24gQTEoKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdCgoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRve3QucHVzaChlLmRhdGEpfXdoaWxlKGU9ZS5uZXh0KX0pKSx0fSxNMS5leHRlbnQ9ZnVuY3Rpb24gazEodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrdFswXVswXSwrdFswXVsxXSkuY292ZXIoK3RbMV1bMF0sK3RbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19LE0xLmZpbmQ9ZnVuY3Rpb24gTDEodCxlLG4pe3ZhciBpLHIsbyxhLHMsbCxjLHU9dGhpcy5feDAsaD10aGlzLl95MCxkPXRoaXMuX3gxLHA9dGhpcy5feTEsZj1bXSxtPXRoaXMuX3Jvb3Q7Zm9yKG0mJmYucHVzaChuZXcgeTEobSx1LGgsZCxwKSksbnVsbD09bj9uPTEvMDoodT10LW4saD1lLW4sZD10K24scD1lK24sbio9bik7bD1mLnBvcCgpOylpZighKCEobT1sLm5vZGUpfHwocj1sLngwKT5kfHwobz1sLnkwKT5wfHwoYT1sLngxKTx1fHwocz1sLnkxKTxoKSlpZihtLmxlbmd0aCl7dmFyIGc9KHIrYSkvMixfPShvK3MpLzI7Zi5wdXNoKG5ldyB5MShtWzNdLGcsXyxhLHMpLG5ldyB5MShtWzJdLHIsXyxnLHMpLG5ldyB5MShtWzFdLGcsbyxhLF8pLG5ldyB5MShtWzBdLHIsbyxnLF8pKSwoYz0oZT49Xyk8PDF8dD49ZykmJihsPWZbZi5sZW5ndGgtMV0sZltmLmxlbmd0aC0xXT1mW2YubGVuZ3RoLTEtY10sZltmLmxlbmd0aC0xLWNdPWwpfWVsc2V7dmFyIHk9dC0rdGhpcy5feC5jYWxsKG51bGwsbS5kYXRhKSx2PWUtK3RoaXMuX3kuY2FsbChudWxsLG0uZGF0YSksYj15Knkrdip2O2lmKGI8bil7dmFyIHg9TWF0aC5zcXJ0KG49Yik7dT10LXgsaD1lLXgsZD10K3gscD1lK3gsaT1tLmRhdGF9fXJldHVybiBpfSxNMS5yZW1vdmU9ZnVuY3Rpb24gUDEodCl7aWYoaXNOYU4obz0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTihhPSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIGUsbixpLHIsbyxhLHMsbCxjLHUsaCxkLHA9dGhpcy5fcm9vdCxmPXRoaXMuX3gwLG09dGhpcy5feTAsZz10aGlzLl94MSxfPXRoaXMuX3kxO2lmKCFwKXJldHVybiB0aGlzO2lmKHAubGVuZ3RoKWZvcig7Oyl7aWYoKGM9bz49KHM9KGYrZykvMikpP2Y9czpnPXMsKHU9YT49KGw9KG0rXykvMikpP209bDpfPWwsZT1wLCEocD1wW2g9dTw8MXxjXSkpcmV0dXJuIHRoaXM7aWYoIXAubGVuZ3RoKWJyZWFrOyhlW2grMSYzXXx8ZVtoKzImM118fGVbaCszJjNdKSYmKG49ZSxkPWgpfWZvcig7cC5kYXRhIT09dDspaWYoaT1wLCEocD1wLm5leHQpKXJldHVybiB0aGlzO3JldHVybihyPXAubmV4dCkmJmRlbGV0ZSBwLm5leHQsaT8ocj9pLm5leHQ9cjpkZWxldGUgaS5uZXh0LHRoaXMpOmU/KHI/ZVtoXT1yOmRlbGV0ZSBlW2hdLChwPWVbMF18fGVbMV18fGVbMl18fGVbM10pJiZwPT09KGVbM118fGVbMl18fGVbMV18fGVbMF0pJiYhcC5sZW5ndGgmJihuP25bZF09cDp0aGlzLl9yb290PXApLHRoaXMpOih0aGlzLl9yb290PXIsdGhpcyl9LE0xLnJlbW92ZUFsbD1mdW5jdGlvbiBOMSh0KXtmb3IodmFyIGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpdGhpcy5yZW1vdmUodFtlXSk7cmV0dXJuIHRoaXN9LE0xLnJvb3Q9ZnVuY3Rpb24gSTEoKXtyZXR1cm4gdGhpcy5fcm9vdH0sTTEuc2l6ZT1mdW5jdGlvbiBSMSgpe3ZhciB0PTA7cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3srK3R9d2hpbGUoZT1lLm5leHQpfSkpLHR9LE0xLnZpc2l0PWZ1bmN0aW9uIE8xKHQpe3ZhciBlLG4saSxyLG8sYSxzPVtdLGw9dGhpcy5fcm9vdDtmb3IobCYmcy5wdXNoKG5ldyB5MShsLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1zLnBvcCgpOylpZighdChsPWUubm9kZSxpPWUueDAscj1lLnkwLG89ZS54MSxhPWUueTEpJiZsLmxlbmd0aCl7dmFyIGM9KGkrbykvMix1PShyK2EpLzI7KG49bFszXSkmJnMucHVzaChuZXcgeTEobixjLHUsbyxhKSksKG49bFsyXSkmJnMucHVzaChuZXcgeTEobixpLHUsYyxhKSksKG49bFsxXSkmJnMucHVzaChuZXcgeTEobixjLHIsbyx1KSksKG49bFswXSkmJnMucHVzaChuZXcgeTEobixpLHIsYyx1KSl9cmV0dXJuIHRoaXN9LE0xLnZpc2l0QWZ0ZXI9ZnVuY3Rpb24gejEodCl7dmFyIGUsbj1bXSxpPVtdO2Zvcih0aGlzLl9yb290JiZuLnB1c2gobmV3IHkxKHRoaXMuX3Jvb3QsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPW4ucG9wKCk7KXt2YXIgcj1lLm5vZGU7aWYoci5sZW5ndGgpe3ZhciBvLGE9ZS54MCxzPWUueTAsbD1lLngxLGM9ZS55MSx1PShhK2wpLzIsaD0ocytjKS8yOyhvPXJbMF0pJiZuLnB1c2gobmV3IHkxKG8sYSxzLHUsaCkpLChvPXJbMV0pJiZuLnB1c2gobmV3IHkxKG8sdSxzLGwsaCkpLChvPXJbMl0pJiZuLnB1c2gobmV3IHkxKG8sYSxoLHUsYykpLChvPXJbM10pJiZuLnB1c2gobmV3IHkxKG8sdSxoLGwsYykpfWkucHVzaChlKX1mb3IoO2U9aS5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LE0xLng9ZnVuY3Rpb24gRDEodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9dCx0aGlzKTp0aGlzLl94fSxNMS55PWZ1bmN0aW9uIEIxKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX07dmFyIEgxPVtdLnNsaWNlLEYxPXt9O2Z1bmN0aW9uIFYxKHQpe3RoaXMuX3NpemU9dCx0aGlzLl9jYWxsPXRoaXMuX2Vycm9yPW51bGwsdGhpcy5fdGFza3M9W10sdGhpcy5fZGF0YT1bXSx0aGlzLl93YWl0aW5nPXRoaXMuX2FjdGl2ZT10aGlzLl9lbmRlZD10aGlzLl9zdGFydD0wfWZ1bmN0aW9uIFUxKHQpe2lmKCF0Ll9zdGFydCl0cnl7IShmdW5jdGlvbiBlKHQpe2Zvcig7dC5fc3RhcnQ9dC5fd2FpdGluZyYmdC5fYWN0aXZlPHQuX3NpemU7KXt2YXIgZT10Ll9lbmRlZCt0Ll9hY3RpdmUsbj10Ll90YXNrc1tlXSxpPW4ubGVuZ3RoLTEscj1uW2ldO25baV09ajEodCxlKSwtLXQuX3dhaXRpbmcsKyt0Ll9hY3RpdmUsbj1yLmFwcGx5KG51bGwsbiksdC5fdGFza3NbZV0mJih0Ll90YXNrc1tlXT1ufHxGMSl9fSkodCl9Y2F0Y2goZSl7aWYodC5fdGFza3NbdC5fZW5kZWQrdC5fYWN0aXZlLTFdKUcxKHQsZSk7ZWxzZSBpZighdC5fZGF0YSl0aHJvdyBlfX1mdW5jdGlvbiBqMSh0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe3QuX3Rhc2tzW2VdJiYoLS10Ll9hY3RpdmUsKyt0Ll9lbmRlZCx0Ll90YXNrc1tlXT1udWxsLG51bGw9PXQuX2Vycm9yJiYobnVsbCE9bj9HMSh0LG4pOih0Ll9kYXRhW2VdPWksdC5fd2FpdGluZz9VMSh0KTpXMSh0KSkpKX19ZnVuY3Rpb24gRzEodCxlKXt2YXIgbixpPXQuX3Rhc2tzLmxlbmd0aDtmb3IodC5fZXJyb3I9ZSx0Ll9kYXRhPXZvaWQgMCx0Ll93YWl0aW5nPU5hTjstLWk+PTA7KWlmKChuPXQuX3Rhc2tzW2ldKSYmKHQuX3Rhc2tzW2ldPW51bGwsbi5hYm9ydCkpdHJ5e24uYWJvcnQoKX1jYXRjaChlKXt9dC5fYWN0aXZlPU5hTixXMSh0KX1mdW5jdGlvbiBXMSh0KXtpZighdC5fYWN0aXZlJiZ0Ll9jYWxsKXt2YXIgZT10Ll9kYXRhO3QuX2RhdGE9dm9pZCAwLHQuX2NhbGwodC5fZXJyb3IsZSl9fWZ1bmN0aW9uIHExKHQpe2lmKG51bGw9PXQpdD0xLzA7ZWxzZSBpZighKCh0PSt0KT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNvbmN1cnJlbmN5Iik7cmV0dXJuIG5ldyBWMSh0KX1mdW5jdGlvbiBZMSgpe3JldHVybiBNYXRoLnJhbmRvbSgpfVYxLnByb3RvdHlwZT1xMS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlYxLGRlZmVyOmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjayIpO2lmKHRoaXMuX2NhbGwpdGhyb3cgbmV3IEVycm9yKCJkZWZlciBhZnRlciBhd2FpdCIpO2lmKG51bGwhPXRoaXMuX2Vycm9yKXJldHVybiB0aGlzO3ZhciBlPUgxLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBlLnB1c2godCksKyt0aGlzLl93YWl0aW5nLHRoaXMuX3Rhc2tzLnB1c2goZSksVTEodGhpcyksdGhpc30sYWJvcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09dGhpcy5fZXJyb3ImJkcxKHRoaXMsbmV3IEVycm9yKCJhYm9ydCIpKSx0aGlzfSxhd2FpdDpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2siKTtpZih0aGlzLl9jYWxsKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgYXdhaXQiKTtyZXR1cm4gdGhpcy5fY2FsbD1mdW5jdGlvbihlLG4pe3QuYXBwbHkobnVsbCxbZV0uY29uY2F0KG4pKX0sVzEodGhpcyksdGhpc30sYXdhaXRBbGw6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrIik7aWYodGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIGF3YWl0Iik7cmV0dXJuIHRoaXMuX2NhbGw9dCxXMSh0aGlzKSx0aGlzfX07dmFyIFgxPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sMT09PWFyZ3VtZW50cy5sZW5ndGg/KG49dCx0PTApOm4tPXQsZnVuY3Rpb24oKXtyZXR1cm4gZSgpKm4rdH19cmV0dXJuIG4uc291cmNlPXQsbn0pKFkxKSwkMT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7dmFyIGkscjtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sZnVuY3Rpb24oKXt2YXIgbztpZihudWxsIT1pKW89aSxpPW51bGw7ZWxzZSBkb3tpPTIqZSgpLTEsbz0yKmUoKS0xLHI9aSppK28qb313aGlsZSghcnx8cj4xKTtyZXR1cm4gdCtuKm8qTWF0aC5zcXJ0KC0yKk1hdGgubG9nKHIpL3IpfX1yZXR1cm4gbi5zb3VyY2U9dCxufSkoWTEpLEsxPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4oKXt2YXIgdD0kMS5zb3VyY2UoZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cCh0KCkpfX1yZXR1cm4gbi5zb3VyY2U9dCxufSkoWTEpLFoxPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsaT0wO2k8dDsrK2kpbis9ZSgpO3JldHVybiBufX1yZXR1cm4gbi5zb3VyY2U9dCxufSkoWTEpLEoxPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49WjEuc291cmNlKGUpKHQpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKCkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0pKFkxKSxRMT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLWUoKSkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0pKFkxKTtmdW5jdGlvbiB0MCh0LGUpe3ZhciBuLGkscixvLGE9bGMoImJlZm9yZXNlbmQiLCJwcm9ncmVzcyIsImxvYWQiLCJlcnJvciIpLHM9d2coKSxsPW5ldyBYTUxIdHRwUmVxdWVzdCxjPW51bGwsdT1udWxsLGg9MDtmdW5jdGlvbiBkKHQpe3ZhciBlLGk9bC5zdGF0dXM7aWYoIWkmJihmdW5jdGlvbiBvKHQpe3ZhciBlPXQucmVzcG9uc2VUeXBlO3JldHVybiBlJiYidGV4dCIhPT1lP3QucmVzcG9uc2U6dC5yZXNwb25zZVRleHR9KShsKXx8aT49MjAwJiZpPDMwMHx8MzA0PT09aSl7aWYocil0cnl7ZT1yLmNhbGwobixsKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBhLmNhbGwoImVycm9yIixuLHQpfWVsc2UgZT1sO2EuY2FsbCgibG9hZCIsbixlKX1lbHNlIGEuY2FsbCgiZXJyb3IiLG4sdCl9aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBYRG9tYWluUmVxdWVzdCYmISgid2l0aENyZWRlbnRpYWxzImluIGwpJiYvXihodHRwKHMpPzopP1wvXC8vLnRlc3QodCkmJihsPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBsP2wub25sb2FkPWwub25lcnJvcj1sLm9udGltZW91dD1kOmwub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKHQpe2wucmVhZHlTdGF0ZT4zJiZkKHQpfSxsLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24odCl7YS5jYWxsKCJwcm9ncmVzcyIsbix0KX0sbj17aGVhZGVyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9KHQrIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP3MuZ2V0KHQpOihudWxsPT1lP3MucmVtb3ZlKHQpOnMuc2V0KHQsZSsiIiksbil9LG1pbWVUeXBlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDp0KyIiLG4pOml9LHJlc3BvbnNlVHlwZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LG4pOm99LHRpbWVvdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3Qsbik6aH0sdXNlcjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP2M6KGM9bnVsbD09dD9udWxsOnQrIiIsbil9LHBhc3N3b3JkOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dToodT1udWxsPT10P251bGw6dCsiIixuKX0scmVzcG9uc2U6ZnVuY3Rpb24odCl7cmV0dXJuIHI9dCxufSxnZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zZW5kKCJHRVQiLHQsZSl9LHBvc3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zZW5kKCJQT1NUIix0LGUpfSxzZW5kOmZ1bmN0aW9uKGUscixkKXtyZXR1cm4gbC5vcGVuKGUsdCwhMCxjLHUpLG51bGw9PWl8fHMuaGFzKCJhY2NlcHQiKXx8cy5zZXQoImFjY2VwdCIsaSsiLCovKiIpLGwuc2V0UmVxdWVzdEhlYWRlciYmcy5lYWNoKChmdW5jdGlvbih0LGUpe2wuc2V0UmVxdWVzdEhlYWRlcihlLHQpfSkpLG51bGwhPWkmJmwub3ZlcnJpZGVNaW1lVHlwZSYmbC5vdmVycmlkZU1pbWVUeXBlKGkpLG51bGwhPW8mJihsLnJlc3BvbnNlVHlwZT1vKSxoPjAmJihsLnRpbWVvdXQ9aCksbnVsbD09ZCYmImZ1bmN0aW9uIj09dHlwZW9mIHImJihkPXIscj1udWxsKSxudWxsIT1kJiYxPT09ZC5sZW5ndGgmJihkPShmdW5jdGlvbiBwKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3QobnVsbD09ZT9uOm51bGwpfX0pKGQpKSxudWxsIT1kJiZuLm9uKCJlcnJvciIsZCkub24oImxvYWQiLChmdW5jdGlvbih0KXtkKG51bGwsdCl9KSksYS5jYWxsKCJiZWZvcmVzZW5kIixuLGwpLGwuc2VuZChudWxsPT1yP251bGw6ciksbn0sYWJvcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5hYm9ydCgpLG59LG9uOmZ1bmN0aW9uKCl7dmFyIHQ9YS5vbi5hcHBseShhLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1hP246dH19LG51bGwhPWUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtyZXR1cm4gbi5nZXQoZSl9cmV0dXJuIG59ZnVuY3Rpb24gZTAodCxlKXtyZXR1cm4gZnVuY3Rpb24obixpKXt2YXIgcj10MChuKS5taW1lVHlwZSh0KS5yZXNwb25zZShlKTtpZihudWxsIT1pKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgaSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIraSk7cmV0dXJuIHIuZ2V0KGkpfXJldHVybiByfX12YXIgbjA9ZTAoInRleHQvaHRtbCIsKGZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0LnJlc3BvbnNlVGV4dCl9KSksaTA9ZTAoImFwcGxpY2F0aW9uL2pzb24iLChmdW5jdGlvbih0KXtyZXR1cm4gSlNPTi5wYXJzZSh0LnJlc3BvbnNlVGV4dCl9KSkscjA9ZTAoInRleHQvcGxhaW4iLChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNwb25zZVRleHR9KSksbzA9ZTAoImFwcGxpY2F0aW9uL3htbCIsKGZ1bmN0aW9uKHQpe3ZhciBlPXQucmVzcG9uc2VYTUw7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJwYXJzZSBlcnJvciIpO3JldHVybiBlfSkpO2Z1bmN0aW9uIGEwKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSxyKXthcmd1bWVudHMubGVuZ3RoPDMmJihyPWksaT1udWxsKTt2YXIgbz10MChuKS5taW1lVHlwZSh0KTtyZXR1cm4gby5yb3c9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/by5yZXNwb25zZShzMChlLGk9dCkpOml9LG8ucm93KGkpLHI/by5nZXQocik6b319ZnVuY3Rpb24gczAodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQobi5yZXNwb25zZVRleHQsZSl9fXZhciBsMD1hMCgidGV4dC9jc3YiLEpnKSxjMD1hMCgidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIsYV8pO2Z1bmN0aW9uIHUwKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIGgwKHQpe3JldHVybiAxPT09dC5sZW5ndGgmJih0PShmdW5jdGlvbiBlKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiB1MCh0KGUpLG4pfX0pKHQpKSx7bGVmdDpmdW5jdGlvbihlLG4saSxyKXtmb3IobnVsbD09aSYmKGk9MCksbnVsbD09ciYmKHI9ZS5sZW5ndGgpO2k8cjspe3ZhciBvPWkrcj4+PjE7dChlW29dLG4pPDA/aT1vKzE6cj1vfXJldHVybiBpfSxyaWdodDpmdW5jdGlvbihlLG4saSxyKXtmb3IobnVsbD09aSYmKGk9MCksbnVsbD09ciYmKHI9ZS5sZW5ndGgpO2k8cjspe3ZhciBvPWkrcj4+PjE7dChlW29dLG4pPjA/cj1vOmk9bysxfXJldHVybiBpfX19dmFyIGQwPWgwKHUwKS5yaWdodDtmdW5jdGlvbiBwMCh0KXtyZXR1cm4gbnVsbD09PXQ/TmFOOit0fXZhciBmMD1NYXRoLnNxcnQoNTApLG0wPU1hdGguc3FydCgxMCksZzA9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIF8wKHQsZSxuKXt2YXIgaSxyLG8sYSxzPS0xO2lmKG49K24sKHQ9K3QpPT0oZT0rZSkmJm4+MClyZXR1cm5bdF07aWYoKGk9ZTx0KSYmKHI9dCx0PWUsZT1yKSwwPT09KGE9eTAodCxlLG4pKXx8IWlzRmluaXRlKGEpKXJldHVybltdO2lmKGE+MClmb3IodD1NYXRoLmNlaWwodC9hKSxlPU1hdGguZmxvb3IoZS9hKSxvPW5ldyBBcnJheShyPU1hdGguY2VpbChlLXQrMSkpOysrczxyOylvW3NdPSh0K3MpKmE7ZWxzZSBmb3IodD1NYXRoLmZsb29yKHQqYSksZT1NYXRoLmNlaWwoZSphKSxvPW5ldyBBcnJheShyPU1hdGguY2VpbCh0LWUrMSkpOysrczxyOylvW3NdPSh0LXMpL2E7cmV0dXJuIGkmJm8ucmV2ZXJzZSgpLG99ZnVuY3Rpb24geTAodCxlLG4pe3ZhciBpPShlLXQpL01hdGgubWF4KDAsbikscj1NYXRoLmZsb29yKE1hdGgubG9nKGkpL01hdGguTE4xMCksbz1pL01hdGgucG93KDEwLHIpO3JldHVybiByPj0wPyhvPj1mMD8xMDpvPj1tMD81Om8+PWcwPzI6MSkqTWF0aC5wb3coMTAscik6LU1hdGgucG93KDEwLC1yKS8obz49ZjA/MTA6bz49bTA/NTpvPj1nMD8yOjEpfWZ1bmN0aW9uIHYwKHQsZSxuKXt2YXIgaT1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbikscj1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGkpL01hdGguTE4xMCkpLG89aS9yO3JldHVybiBvPj1mMD9yKj0xMDpvPj1tMD9yKj01Om8+PWcwJiYocio9MiksZTx0Py1yOnJ9ZnVuY3Rpb24gYjAodCxlLG4pe2lmKG51bGw9PW4mJihuPXAwKSxpPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fGk8MilyZXR1cm4rbih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rbih0W2ktMV0saS0xLHQpO3ZhciBpLHI9KGktMSkqZSxvPU1hdGguZmxvb3IociksYT0rbih0W29dLG8sdCk7cmV0dXJuIGErKCtuKHRbbysxXSxvKzEsdCktYSkqKHItbyl9fXZhciB4MD0iJCI7ZnVuY3Rpb24gdzAoKXt9ZnVuY3Rpb24gUzAodCxlKXt2YXIgbj1uZXcgdzA7aWYodCBpbnN0YW5jZW9mIHcwKXQuZWFjaCgoZnVuY3Rpb24odCxlKXtuLnNldChlLHQpfSkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGkscj0tMSxvPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK3I8bzspbi5zZXQocix0W3JdKTtlbHNlIGZvcig7KytyPG87KW4uc2V0KGUoaT10W3JdLHIsdCksaSl9ZWxzZSBpZih0KWZvcih2YXIgYSBpbiB0KW4uc2V0KGEsdFthXSk7cmV0dXJuIG59ZnVuY3Rpb24gTTAoKXt9dzAucHJvdG90eXBlPVMwLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dzAsaGFzOmZ1bmN0aW9uKHQpe3JldHVybiB4MCt0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1t4MCt0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbeDArdF09ZSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9eDArdDtyZXR1cm4gZSBpbiB0aGlzJiZkZWxldGUgdGhpc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09eDAmJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PXgwJiZ0LnB1c2goZS5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT14MCYmdC5wdXNoKHRoaXNbZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PXgwJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PXgwJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYodFswXT09PXgwKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT14MCYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTt2YXIgRTA9UzAucHJvdG90eXBlO00wLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TTAsaGFzOkUwLmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbeDArKHQrPSIiKV09dCx0aGlzfSxyZW1vdmU6RTAucmVtb3ZlLGNsZWFyOkUwLmNsZWFyLHZhbHVlczpFMC5rZXlzLHNpemU6RTAuc2l6ZSxlbXB0eTpFMC5lbXB0eSxlYWNoOkUwLmVhY2h9O3ZhciBUMD1BcnJheS5wcm90b3R5cGUsQzA9VDAubWFwLEEwPVQwLnNsaWNlLGswPXtuYW1lOiJpbXBsaWNpdCJ9O2Z1bmN0aW9uIEwwKHQpe3ZhciBlPVMwKCksbj1bXSxpPWswO2Z1bmN0aW9uIHIocil7dmFyIG89cisiIixhPWUuZ2V0KG8pO2lmKCFhKXtpZihpIT09azApcmV0dXJuIGk7ZS5zZXQobyxhPW4ucHVzaChyKSl9cmV0dXJuIHRbKGEtMSkldC5sZW5ndGhdfXJldHVybiB0PW51bGw9PXQ/W106QTAuY2FsbCh0KSxyLmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbi5zbGljZSgpO249W10sZT1TMCgpO2Zvcih2YXIgaSxvLGE9LTEscz10Lmxlbmd0aDsrK2E8czspZS5oYXMobz0oaT10W2FdKSsiIil8fGUuc2V0KG8sbi5wdXNoKGkpKTtyZXR1cm4gcn0sci5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1BMC5jYWxsKGUpLHIpOnQuc2xpY2UoKX0sci51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQscik6aX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEwwKCkuZG9tYWluKG4pLnJhbmdlKHQpLnVua25vd24oaSl9LHJ9ZnVuY3Rpb24gUDAoKXt2YXIgdCxlLG49TDAoKS51bmtub3duKHZvaWQgMCksaT1uLmRvbWFpbixyPW4ucmFuZ2Usbz1bMCwxXSxhPSExLHM9MCxsPTAsYz0uNTtmdW5jdGlvbiB1KCl7dmFyIG49aSgpLmxlbmd0aCx1PW9bMV08b1swXSxoPW9bdS0wXSxkPW9bMS11XTt0PShkLWgpL01hdGgubWF4KDEsbi1zKzIqbCksYSYmKHQ9TWF0aC5mbG9vcih0KSksaCs9KGQtaC10KihuLXMpKSpjLGU9dCooMS1zKSxhJiYoaD1NYXRoLnJvdW5kKGgpLGU9TWF0aC5yb3VuZChlKSk7dmFyIHA9KGZ1bmN0aW9uIGYodCxlLG4pe3Q9K3QsZT0rZSxuPShyPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6cjwzPzE6K247Zm9yKHZhciBpPS0xLHI9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksbz1uZXcgQXJyYXkocik7KytpPHI7KW9baV09dCtpKm47cmV0dXJuIG99KShuKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBoK3QqZX0pKTtyZXR1cm4gcih1P3AucmV2ZXJzZSgpOnApfXJldHVybiBkZWxldGUgbi51bmtub3duLG4uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpKHQpLHUoKSk6aSgpfSxuLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVsrdFswXSwrdFsxXV0sdSgpKTpvLnNsaWNlKCl9LG4ucmFuZ2VSb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gbz1bK3RbMF0sK3RbMV1dLGE9ITAsdSgpfSxuLmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBlfSxuLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sbi5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIXQsdSgpKTphfSxuLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bD1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLHUoKSk6c30sbi5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSx1KCkpOnN9LG4ucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksdSgpKTpsfSxuLmFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksdSgpKTpjfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gUDAoKS5kb21haW4oaSgpKS5yYW5nZShvKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSx1KCl9ZnVuY3Rpb24gTjAodCl7dmFyIGU9dC5jb3B5O3JldHVybiB0LnBhZGRpbmc9dC5wYWRkaW5nT3V0ZXIsZGVsZXRlIHQucGFkZGluZ0lubmVyLGRlbGV0ZSB0LnBhZGRpbmdPdXRlcix0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTjAoZSgpKX0sdH1mdW5jdGlvbiBJMCh0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gUjAodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIGkgaW4gZSluW2ldPWVbaV07cmV0dXJuIG59ZnVuY3Rpb24gTzAoKXt9dmFyIHowPS43LEQwPTEvejAsQjA9IlxccyooWystXT9cXGQrKVxccyoiLEgwPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLEYwPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixWMD0vXiMoWzAtOWEtZl17Myw4fSkkLyxVMD1uZXcgUmVnRXhwKCJecmdiXFwoIitbQjAsQjAsQjBdKyJcXCkkIiksajA9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW0YwLEYwLEYwXSsiXFwpJCIpLEcwPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbQjAsQjAsQjAsSDBdKyJcXCkkIiksVzA9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tGMCxGMCxGMCxIMF0rIlxcKSQiKSxxMD1uZXcgUmVnRXhwKCJeaHNsXFwoIitbSDAsRjAsRjBdKyJcXCkkIiksWTA9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tIMCxGMCxGMCxIMF0rIlxcKSQiKSxYMD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiAkMCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIEswKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gWjAodCl7dmFyIGUsbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9VjAuZXhlYyh0KSk/KG49ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09bj9KMChlKTozPT09bj9uZXcgbjIoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1uP1EwKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP1EwKGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9VTAuZXhlYyh0KSk/bmV3IG4yKGVbMV0sZVsyXSxlWzNdLDEpOihlPWowLmV4ZWModCkpP25ldyBuMigyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1HMC5leGVjKHQpKT9RMChlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1XMC5leGVjKHQpKT9RMCgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1xMC5leGVjKHQpKT9hMihlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPVkwLmV4ZWModCkpP2EyKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6WDAuaGFzT3duUHJvcGVydHkodCk/SjAoWDBbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBuMihOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIEowKHQpe3JldHVybiBuZXcgbjIodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIFEwKHQsZSxuLGkpe3JldHVybiBpPD0wJiYodD1lPW49TmFOKSxuZXcgbjIodCxlLG4saSl9ZnVuY3Rpb24gdDIodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBPMHx8KHQ9WjAodCkpLHQ/bmV3IG4yKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBuMn1mdW5jdGlvbiBlMih0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dDIodCk6bmV3IG4yKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBuMih0LGUsbixpKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gaTIoKXtyZXR1cm4iIyIrbzIodGhpcy5yKStvMih0aGlzLmcpK28yKHRoaXMuYil9ZnVuY3Rpb24gcjIoKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiBvMih0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIGEyKHQsZSxuLGkpe3JldHVybiBpPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgbDIodCxlLG4saSl9ZnVuY3Rpb24gczIodCl7aWYodCBpbnN0YW5jZW9mIGwyKXJldHVybiBuZXcgbDIodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgTzB8fCh0PVowKHQpKSwhdClyZXR1cm4gbmV3IGwyO2lmKHQgaW5zdGFuY2VvZiBsMilyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUsaT10LmIvMjU1LHI9TWF0aC5taW4oZSxuLGkpLG89TWF0aC5tYXgoZSxuLGkpLGE9TmFOLHM9by1yLGw9KG8rcikvMjtyZXR1cm4gcz8oYT1lPT09bz8obi1pKS9zKzYqKG48aSk6bj09PW8/KGktZSkvcysyOihlLW4pL3MrNCxzLz1sPC41P28rcjoyLW8tcixhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IGwyKGEscyxsLHQub3BhY2l0eSl9ZnVuY3Rpb24gbDIodCxlLG4saSl7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIGMyKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1JMChPMCxaMCx7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDokMCxmb3JtYXRIZXg6JDAsZm9ybWF0SHNsOmZ1bmN0aW9uIHUyKCl7cmV0dXJuIHMyKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6SzAsdG9TdHJpbmc6SzB9KSxJMChuMixlMixSMChPMCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9EMDpNYXRoLnBvdyhEMCx0KSxuZXcgbjIodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/ejA6TWF0aC5wb3coejAsdCksbmV3IG4yKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6aTIsZm9ybWF0SGV4OmkyLGZvcm1hdFJnYjpyMix0b1N0cmluZzpyMn0pKSxJMChsMiwoZnVuY3Rpb24gaDIodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3MyKHQpOm5ldyBsMih0LGUsbixudWxsPT1pPzE6aSl9KSxSMChPMCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9EMDpNYXRoLnBvdyhEMCx0KSxuZXcgbDIodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD96MDpNYXRoLnBvdyh6MCx0KSxuZXcgbDIodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwsaT1uKyhuPC41P246MS1uKSplLHI9MipuLWk7cmV0dXJuIG5ldyBuMihjMih0Pj0yNDA/dC0yNDA6dCsxMjAscixpKSxjMih0LHIsaSksYzIodDwxMjA/dCsyNDA6dC0xMjAscixpKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisxMDAqKHRoaXMuc3x8MCkrIiUsICIrMTAwKih0aGlzLmx8fDApKyIlIisoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKTt2YXIgZDI9TWF0aC5QSS8xODAscDI9MTgwL01hdGguUEksZjI9LS4xNDg2MSxtMj0xLjc4Mjc3LGcyPS0uMjkyMjcsXzI9LS45MDY0OSx5Mj0xLjk3Mjk0LHYyPXkyKl8yLGIyPXkyKm0yLHgyPW0yKmcyLV8yKmYyO2Z1bmN0aW9uIHcyKHQpe2lmKHQgaW5zdGFuY2VvZiBNMilyZXR1cm4gbmV3IE0yKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIG4yfHwodD10Mih0KSk7dmFyIGU9dC5nLzI1NSxuPXQuYi8yNTUsaT0oeDIqbit2MioodC5yLzI1NSktYjIqZSkvKHgyK3YyLWIyKSxyPW4taSxvPSh5MiooZS1pKS1nMipyKS9fMixhPU1hdGguc3FydChvKm8rcipyKS8oeTIqaSooMS1pKSkscz1hP01hdGguYXRhbjIobyxyKSpwMi0xMjA6TmFOO3JldHVybiBuZXcgTTIoczwwP3MrMzYwOnMsYSxpLHQub3BhY2l0eSl9ZnVuY3Rpb24gUzIodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3cyKHQpOm5ldyBNMih0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gTTIodCxlLG4saSl7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIEUyKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBUMih0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdCtuKmV9fWZ1bmN0aW9uIEMyKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP1QyKHQsbik6RTIoaXNOYU4odCk/ZTp0KX1JMChNMixTMixSMChPMCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9EMDpNYXRoLnBvdyhEMCx0KSxuZXcgTTIodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD96MDpNYXRoLnBvdyh6MCx0KSxuZXcgTTIodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKmQyLGU9K3RoaXMubCxuPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqZSooMS1lKSxpPU1hdGguY29zKHQpLHI9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyBuMigyNTUqKGUrbiooZjIqaSttMipyKSksMjU1KihlK24qKGcyKmkrXzIqcikpLDI1NSooZStuKih5MippKSksdGhpcy5vcGFjaXR5KX19KSk7dmFyIEEyPShmdW5jdGlvbiB0KGUpe3ZhciBuPShmdW5jdGlvbiBpKHQpe3JldHVybiAxPT0odD0rdCk/QzI6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbi1lPyhmdW5jdGlvbiBpKHQsZSxuKXtyZXR1cm4gdD1NYXRoLnBvdyh0LG4pLGU9TWF0aC5wb3coZSxuKS10LG49MS9uLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLnBvdyh0K2kqZSxuKX19KShlLG4sdCk6RTIoaXNOYU4oZSk/bjplKX19KShlKTtmdW5jdGlvbiByKHQsZSl7dmFyIGk9bigodD1lMih0KSkuciwoZT1lMihlKSkucikscj1uKHQuZyxlLmcpLG89bih0LmIsZS5iKSxhPUMyKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPWkoZSksdC5nPXIoZSksdC5iPW8oZSksdC5vcGFjaXR5PWEoZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSkoMSk7ZnVuY3Rpb24gazIodCxlKXtlfHwoZT1bXSk7dmFyIG4saT10P01hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKTowLHI9ZS5zbGljZSgpO3JldHVybiBmdW5jdGlvbihvKXtmb3Iobj0wO248aTsrK24pcltuXT10W25dKigxLW8pK2Vbbl0qbztyZXR1cm4gcn19ZnVuY3Rpb24gTDIodCxlKXt2YXIgbixpPWU/ZS5sZW5ndGg6MCxyPXQ/TWF0aC5taW4oaSx0Lmxlbmd0aCk6MCxvPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShpKTtmb3Iobj0wO248cjsrK24pb1tuXT1EMih0W25dLGVbbl0pO2Zvcig7bjxpOysrbilhW25dPWVbbl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihuPTA7bjxyOysrbilhW25dPW9bbl0odCk7cmV0dXJuIGF9fWZ1bmN0aW9uIFAyKHQsZSl7dmFyIG49bmV3IERhdGU7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihpKXtyZXR1cm4gbi5zZXRUaW1lKHQqKDEtaSkrZSppKSxufX1mdW5jdGlvbiBOMih0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIHQqKDEtbikrZSpufX1mdW5jdGlvbiBJMih0LGUpe3ZhciBuLGk9e30scj17fTtmb3IobiBpbiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fHwodD17fSksbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZXx8KGU9e30pLGUpbiBpbiB0P2lbbl09RDIodFtuXSxlW25dKTpyW25dPWVbbl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihuIGluIGkpcltuXT1pW25dKHQpO3JldHVybiByfX12YXIgUjI9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLE8yPW5ldyBSZWdFeHAoUjIuc291cmNlLCJnIik7ZnVuY3Rpb24gejIodCxlKXt2YXIgbixpLHIsbz1SMi5sYXN0SW5kZXg9TzIubGFzdEluZGV4PTAsYT0tMSxzPVtdLGw9W107Zm9yKHQrPSIiLGUrPSIiOyhuPVIyLmV4ZWModCkpJiYoaT1PMi5leGVjKGUpKTspKHI9aS5pbmRleCk+byYmKHI9ZS5zbGljZShvLHIpLHNbYV0/c1thXSs9cjpzWysrYV09ciksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6TjIobixpKX0pKSxvPU8yLmxhc3RJbmRleDtyZXR1cm4gbzxlLmxlbmd0aCYmKHI9ZS5zbGljZShvKSxzW2FdP3NbYV0rPXI6c1srK2FdPXIpLHMubGVuZ3RoPDI/bFswXT8oZnVuY3Rpb24gYyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fSkobFswXS54KTooZnVuY3Rpb24gdSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KShlKTooZT1sLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIG4saT0wO2k8ZTsrK2kpc1sobj1sW2ldKS5pXT1uLngodCk7cmV0dXJuIHMuam9pbigiIil9KX1mdW5jdGlvbiBEMih0LGUpe3ZhciBuLGk9dHlwZW9mIGU7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09PWk/RTIoZSk6KCJudW1iZXIiPT09aT9OMjoic3RyaW5nIj09PWk/KG49WjAoZSkpPyhlPW4sQTIpOnoyOmUgaW5zdGFuY2VvZiBaMD9BMjplIGluc3RhbmNlb2YgRGF0ZT9QMjooZnVuY3Rpb24gcih0KXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBEYXRhVmlldyl9KShlKT9rMjpBcnJheS5pc0FycmF5KGUpP0wyOiJmdW5jdGlvbiIhPXR5cGVvZiBlLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiBlLnRvU3RyaW5nfHxpc05hTihlKT9JMjpOMikodCxlKX1mdW5jdGlvbiBCMih0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQodCooMS1uKStlKm4pfX1mdW5jdGlvbiBIMih0KXtyZXR1cm4oZnVuY3Rpb24gZShuKXtmdW5jdGlvbiBpKGUsaSl7dmFyIHI9dCgoZT1TMihlKSkuaCwoaT1TMihpKSkuaCksbz1DMihlLnMsaS5zKSxhPUMyKGUubCxpLmwpLHM9QzIoZS5vcGFjaXR5LGkub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9cih0KSxlLnM9byh0KSxlLmw9YShNYXRoLnBvdyh0LG4pKSxlLm9wYWNpdHk9cyh0KSxlKyIifX1yZXR1cm4gbj0rbixpLmdhbW1hPWUsaX0pKDEpfUgyKChmdW5jdGlvbiBGMih0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9UMih0LG4+MTgwfHxuPC0xODA/bi0zNjAqTWF0aC5yb3VuZChuLzM2MCk6bik6RTIoaXNOYU4odCk/ZTp0KX0pKTt2YXIgVjI9SDIoQzIpO2Z1bmN0aW9uIFUyKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBqMih0KXtyZXR1cm4rdH12YXIgRzI9WzAsMV07ZnVuY3Rpb24gVzIodCxlKXtyZXR1cm4oZS09dD0rdCk/ZnVuY3Rpb24obil7cmV0dXJuKG4tdCkvZX06VTIoZSl9ZnVuY3Rpb24gcTIodCxlLG4saSl7dmFyIHI9dFswXSxvPXRbMV0sYT1lWzBdLHM9ZVsxXTtyZXR1cm4gbzxyPyhyPW4obyxyKSxhPWkocyxhKSk6KHI9bihyLG8pLGE9aShhLHMpKSxmdW5jdGlvbih0KXtyZXR1cm4gYShyKHQpKX19ZnVuY3Rpb24gWTIodCxlLG4saSl7dmFyIHI9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLTEsbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocikscz0tMTtmb3IodFtyXTx0WzBdJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpLGU9ZS5zbGljZSgpLnJldmVyc2UoKSk7KytzPHI7KW9bc109bih0W3NdLHRbcysxXSksYVtzXT1pKGVbc10sZVtzKzFdKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49ZDAodCxlLDEsciktMTtyZXR1cm4gYVtuXShvW25dKGUpKX19ZnVuY3Rpb24gWDIodCxlKXtyZXR1cm4gZS5kb21haW4odC5kb21haW4oKSkucmFuZ2UodC5yYW5nZSgpKS5pbnRlcnBvbGF0ZSh0LmludGVycG9sYXRlKCkpLmNsYW1wKHQuY2xhbXAoKSl9ZnVuY3Rpb24gJDIodCxlKXt2YXIgbixpLHIsbz1HMixhPUcyLHM9RDIsbD0hMTtmdW5jdGlvbiBjKCl7cmV0dXJuIG49TWF0aC5taW4oby5sZW5ndGgsYS5sZW5ndGgpPjI/WTI6cTIsaT1yPW51bGwsdX1mdW5jdGlvbiB1KGUpe3JldHVybihpfHwoaT1uKG8sYSxsPyhmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPXQoZT0rZSxuPStuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PWU/MDp0Pj1uPzE6aSh0KX19fSkodCk6dCxzKSkpKCtlKX1yZXR1cm4gdS5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuKHJ8fChyPW4oYSxvLFcyLGw/KGZ1bmN0aW9uIGkodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9dChlPStlLG49K24pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9MD9lOnQ+PTE/bjppKHQpfX19KShlKTplKSkpKCt0KX0sdS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89QzAuY2FsbCh0LGoyKSxjKCkpOm8uc2xpY2UoKX0sdS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1BMC5jYWxsKHQpLGMoKSk6YS5zbGljZSgpfSx1LnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGE9QTAuY2FsbCh0KSxzPUIyLGMoKX0sdS5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0hIXQsYygpKTpsfSx1LmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsYygpKTpzfSxjKCl9ZnVuY3Rpb24gSzIodCxlKXtpZigobj0odD1lP3QudG9FeHBvbmVudGlhbChlLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIG4saT10LnNsaWNlKDAsbik7cmV0dXJuW2kubGVuZ3RoPjE/aVswXStpLnNsaWNlKDIpOmksK3Quc2xpY2UobisxKV19ZnVuY3Rpb24gWjIodCl7cmV0dXJuKHQ9SzIoTWF0aC5hYnModCkpKT90WzFdOk5hTn12YXIgSjIsUTI9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gdDUodCl7aWYoIShlPVEyLmV4ZWModCkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrdCk7dmFyIGU7cmV0dXJuIG5ldyBlNSh7ZmlsbDplWzFdLGFsaWduOmVbMl0sc2lnbjplWzNdLHN5bWJvbDplWzRdLHplcm86ZVs1XSx3aWR0aDplWzZdLGNvbW1hOmVbN10scHJlY2lzaW9uOmVbOF0mJmVbOF0uc2xpY2UoMSksdHJpbTplWzldLHR5cGU6ZVsxMF19KX1mdW5jdGlvbiBlNSh0KXt0aGlzLmZpbGw9dm9pZCAwPT09dC5maWxsPyIgIjp0LmZpbGwrIiIsdGhpcy5hbGlnbj12b2lkIDA9PT10LmFsaWduPyI+Ijp0LmFsaWduKyIiLHRoaXMuc2lnbj12b2lkIDA9PT10LnNpZ24/Ii0iOnQuc2lnbisiIix0aGlzLnN5bWJvbD12b2lkIDA9PT10LnN5bWJvbD8iIjp0LnN5bWJvbCsiIix0aGlzLnplcm89ISF0Lnplcm8sdGhpcy53aWR0aD12b2lkIDA9PT10LndpZHRoP3ZvaWQgMDordC53aWR0aCx0aGlzLmNvbW1hPSEhdC5jb21tYSx0aGlzLnByZWNpc2lvbj12b2lkIDA9PT10LnByZWNpc2lvbj92b2lkIDA6K3QucHJlY2lzaW9uLHRoaXMudHJpbT0hIXQudHJpbSx0aGlzLnR5cGU9dm9pZCAwPT09dC50eXBlPyIiOnQudHlwZSsiIn1mdW5jdGlvbiBuNSh0LGUpe3ZhciBuPUsyKHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIGk9blswXSxyPW5bMV07cmV0dXJuIHI8MD8iMC4iK25ldyBBcnJheSgtcikuam9pbigiMCIpK2k6aS5sZW5ndGg+cisxP2kuc2xpY2UoMCxyKzEpKyIuIitpLnNsaWNlKHIrMSk6aStuZXcgQXJyYXkoci1pLmxlbmd0aCsyKS5qb2luKCIwIil9dDUucHJvdG90eXBlPWU1LnByb3RvdHlwZSxlNS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodm9pZCAwPT09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHZvaWQgMD09PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTt2YXIgaTU9eyIlIjpmdW5jdGlvbih0LGUpe3JldHVybigxMDAqdCkudG9GaXhlZChlKX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gdCsiIn0sZDpmdW5jdGlvbiByNSh0KXtyZXR1cm4gTWF0aC5hYnModD1NYXRoLnJvdW5kKHQpKT49MWUyMT90LnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6dC50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0sZzpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvUHJlY2lzaW9uKGUpfSxvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG41KDEwMCp0LGUpfSxyOm41LHM6ZnVuY3Rpb24gbzUodCxlKXt2YXIgbj1LMih0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciBpPW5bMF0scj1uWzFdLG89ci0oSjI9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3Ioci8zKSkpKSsxLGE9aS5sZW5ndGg7cmV0dXJuIG89PT1hP2k6bz5hP2krbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP2kuc2xpY2UoMCxvKSsiLiIraS5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStLMih0LE1hdGgubWF4KDAsZStvLTEpKVswXX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9fTtmdW5jdGlvbiBhNSh0KXtyZXR1cm4gdH12YXIgczUsbDUsYzUsdTU9QXJyYXkucHJvdG90eXBlLm1hcCxoNT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gZDUodCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBfMChuWzBdLG5bbi5sZW5ndGgtMV0sbnVsbD09dD8xMDp0KX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsbil7cmV0dXJuKGZ1bmN0aW9uIGkodCxlLG4pe3ZhciBpLHI9dFswXSxvPXRbdC5sZW5ndGgtMV0sYT12MChyLG8sbnVsbD09ZT8xMDplKTtzd2l0Y2goKG49dDUobnVsbD09bj8iLGYiOm4pKS50eXBlKXtjYXNlInMiOnZhciBzPU1hdGgubWF4KE1hdGguYWJzKHIpLE1hdGguYWJzKG8pKTtyZXR1cm4gbnVsbCE9bi5wcmVjaXNpb258fGlzTmFOKGk9KGZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihaMihlKS8zKSkpLVoyKE1hdGguYWJzKHQpKSl9KShhLHMpKXx8KG4ucHJlY2lzaW9uPWkpLGM1KG4scyk7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbCE9bi5wcmVjaXNpb258fGlzTmFOKGk9KGZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxlPU1hdGguYWJzKGUpLXQsTWF0aC5tYXgoMCxaMihlKS1aMih0KSkrMX0pKGEsTWF0aC5tYXgoTWF0aC5hYnMociksTWF0aC5hYnMobykpKSl8fChuLnByZWNpc2lvbj1pLSgiZSI9PT1uLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9bi5wcmVjaXNpb258fGlzTmFOKGk9KGZ1bmN0aW9uIHUodCl7cmV0dXJuIE1hdGgubWF4KDAsLVoyKE1hdGguYWJzKHQpKSl9KShhKSl8fChuLnByZWNpc2lvbj1pLTIqKCIlIj09PW4udHlwZSkpfXJldHVybiBsNShuKX0pKGUoKSx0LG4pfSx0Lm5pY2U9ZnVuY3Rpb24obil7bnVsbD09biYmKG49MTApO3ZhciBpLHI9ZSgpLG89MCxhPXIubGVuZ3RoLTEscz1yW29dLGw9clthXTtyZXR1cm4gbDxzJiYoaT1zLHM9bCxsPWksaT1vLG89YSxhPWkpLChpPXkwKHMsbCxuKSk+MD9pPXkwKHM9TWF0aC5mbG9vcihzL2kpKmksbD1NYXRoLmNlaWwobC9pKSppLG4pOmk8MCYmKGk9eTAocz1NYXRoLmNlaWwocyppKS9pLGw9TWF0aC5mbG9vcihsKmkpL2ksbikpLGk+MD8ocltvXT1NYXRoLmZsb29yKHMvaSkqaSxyW2FdPU1hdGguY2VpbChsL2kpKmksZShyKSk6aTwwJiYocltvXT1NYXRoLmNlaWwocyppKS9pLHJbYV09TWF0aC5mbG9vcihsKmkpL2ksZShyKSksdH0sdH1mdW5jdGlvbiBwNSh0LGUpe3ZhciBuLGk9MCxyPSh0PXQuc2xpY2UoKSkubGVuZ3RoLTEsbz10W2ldLGE9dFtyXTtyZXR1cm4gYTxvJiYobj1pLGk9cixyPW4sbj1vLG89YSxhPW4pLHRbaV09ZS5mbG9vcihvKSx0W3JdPWUuY2VpbChhKSx0fWZ1bmN0aW9uIGY1KHQsZSl7cmV0dXJuKGU9TWF0aC5sb2coZS90KSk/ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgubG9nKG4vdCkvZX06VTIoZSl9ZnVuY3Rpb24gbTUodCxlKXtyZXR1cm4gdDwwP2Z1bmN0aW9uKG4pe3JldHVybi1NYXRoLnBvdygtZSxuKSpNYXRoLnBvdygtdCwxLW4pfTpmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZSxuKSpNYXRoLnBvdyh0LDEtbil9fWZ1bmN0aW9uIGc1KHQpe3JldHVybiBpc0Zpbml0ZSh0KT8rKCIxZSIrdCk6dDwwPzA6dH1mdW5jdGlvbiBfNSh0KXtyZXR1cm4gMTA9PT10P2c1OnQ9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucG93KHQsZSl9fWZ1bmN0aW9uIHk1KHQpe3JldHVybiB0PT09TWF0aC5FP01hdGgubG9nOjEwPT09dCYmTWF0aC5sb2cxMHx8Mj09PXQmJk1hdGgubG9nMnx8KHQ9TWF0aC5sb2codCksZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubG9nKGUpL3R9KX1mdW5jdGlvbiB2NSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLXQoLWUpfX1mdW5jdGlvbiBiNSh0LGUpe3JldHVybiB0PDA/LU1hdGgucG93KC10LGUpOk1hdGgucG93KHQsZSl9ZnVuY3Rpb24geDUoKXt2YXIgdD0xLGU9JDIoKGZ1bmN0aW9uIG4oZSxpKXtyZXR1cm4oaT1iNShpLHQpLShlPWI1KGUsdCkpKT9mdW5jdGlvbihuKXtyZXR1cm4oYjUobix0KS1lKS9pfTpVMihpKX0pLChmdW5jdGlvbiBpKGUsbil7cmV0dXJuIG49YjUobix0KS0oZT1iNShlLHQpKSxmdW5jdGlvbihpKXtyZXR1cm4gYjUoZStuKmksMS90KX19KSkscj1lLmRvbWFpbjtyZXR1cm4gZS5leHBvbmVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSxyKHIoKSkpOnR9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBYMihlLHg1KCkuZXhwb25lbnQodCkpfSxkNShlKX0hKGZ1bmN0aW9uIHc1KHQpe3M1PShmdW5jdGlvbiBlKHQpe3ZhciBlPXZvaWQgMD09PXQuZ3JvdXBpbmd8fHZvaWQgMD09PXQudGhvdXNhbmRzP2E1OihmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7Zm9yKHZhciByPW4ubGVuZ3RoLG89W10sYT0wLHM9dFswXSxsPTA7cj4wJiZzPjAmJihsK3MrMT5pJiYocz1NYXRoLm1heCgxLGktbCkpLG8ucHVzaChuLnN1YnN0cmluZyhyLT1zLHIrcykpLCEoKGwrPXMrMSk+aSkpOylzPXRbYT0oYSsxKSV0Lmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4oZSl9fSkodTUuY2FsbCh0Lmdyb3VwaW5nLE51bWJlciksdC50aG91c2FuZHMrIiIpLGk9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzBdKyIiLHI9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzFdKyIiLG89dm9pZCAwPT09dC5kZWNpbWFsPyIuIjp0LmRlY2ltYWwrIiIsYT12b2lkIDA9PT10Lm51bWVyYWxzP2E1OihmdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KSl9fSkodTUuY2FsbCh0Lm51bWVyYWxzLFN0cmluZykpLGw9dm9pZCAwPT09dC5wZXJjZW50PyIlIjp0LnBlcmNlbnQrIiIsYz12b2lkIDA9PT10Lm1pbnVzPyItIjp0Lm1pbnVzKyIiLHU9dm9pZCAwPT09dC5uYW4/Ik5hTiI6dC5uYW4rIiI7ZnVuY3Rpb24gaCh0KXt2YXIgbj0odD10NSh0KSkuZmlsbCxzPXQuYWxpZ24saD10LnNpZ24sZD10LnN5bWJvbCxwPXQuemVybyxmPXQud2lkdGgsbT10LmNvbW1hLGc9dC5wcmVjaXNpb24sXz10LnRyaW0seT10LnR5cGU7Im4iPT09eT8obT0hMCx5PSJnIik6aTVbeV18fCh2b2lkIDA9PT1nJiYoZz0xMiksXz0hMCx5PSJnIiksKHB8fCIwIj09PW4mJiI9Ij09PXMpJiYocD0hMCxuPSIwIixzPSI9Iik7dmFyIHY9IiQiPT09ZD9pOiIjIj09PWQmJi9bYm94WF0vLnRlc3QoeSk/IjAiK3kudG9Mb3dlckNhc2UoKToiIixiPSIkIj09PWQ/cjovWyVwXS8udGVzdCh5KT9sOiIiLHg9aTVbeV0sdz0vW2RlZmdwcnMlXS8udGVzdCh5KTtmdW5jdGlvbiBTKHQpe3ZhciBpLHIsbCxkPXYsUz1iO2lmKCJjIj09PXkpUz14KHQpK1MsdD0iIjtlbHNle3ZhciBNPSh0PSt0KTwwfHwxL3Q8MDtpZih0PWlzTmFOKHQpP3U6eChNYXRoLmFicyh0KSxnKSxfJiYodD0oZnVuY3Rpb24gRSh0KXt0OmZvcih2YXIgZSxuPXQubGVuZ3RoLGk9MSxyPS0xO2k8bjsrK2kpc3dpdGNoKHRbaV0pe2Nhc2UiLiI6cj1lPWk7YnJlYWs7Y2FzZSIwIjowPT09ciYmKHI9aSksZT1pO2JyZWFrO2RlZmF1bHQ6aWYoISt0W2ldKWJyZWFrIHQ7cj4wJiYocj0wKX1yZXR1cm4gcj4wP3Quc2xpY2UoMCxyKSt0LnNsaWNlKGUrMSk6dH0pKHQpKSxNJiYwPT0rdCYmIisiIT09aCYmKE09ITEpLGQ9KE0/IigiPT09aD9oOmM6Ii0iPT09aHx8IigiPT09aD8iIjpoKStkLFM9KCJzIj09PXk/aDVbOCtKMi8zXToiIikrUysoTSYmIigiPT09aD8iKSI6IiIpLHcpZm9yKGk9LTEscj10Lmxlbmd0aDsrK2k8cjspaWYoNDg+KGw9dC5jaGFyQ29kZUF0KGkpKXx8bD41Nyl7Uz0oNDY9PT1sP28rdC5zbGljZShpKzEpOnQuc2xpY2UoaSkpK1MsdD10LnNsaWNlKDAsaSk7YnJlYWt9fW0mJiFwJiYodD1lKHQsMS8wKSk7dmFyIFQ9ZC5sZW5ndGgrdC5sZW5ndGgrUy5sZW5ndGgsQz1UPGY/bmV3IEFycmF5KGYtVCsxKS5qb2luKG4pOiIiO3N3aXRjaChtJiZwJiYodD1lKEMrdCxDLmxlbmd0aD9mLVMubGVuZ3RoOjEvMCksQz0iIikscyl7Y2FzZSI8Ijp0PWQrdCtTK0M7YnJlYWs7Y2FzZSI9Ijp0PWQrQyt0K1M7YnJlYWs7Y2FzZSJeIjp0PUMuc2xpY2UoMCxUPUMubGVuZ3RoPj4xKStkK3QrUytDLnNsaWNlKFQpO2JyZWFrO2RlZmF1bHQ6dD1DK2QrdCtTfXJldHVybiBhKHQpfXJldHVybiBnPXZvaWQgMD09PWc/NjovW2dwcnNdLy50ZXN0KHkpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsZykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsZykpLFMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCsiIn0sU31yZXR1cm57Zm9ybWF0OmgsZm9ybWF0UHJlZml4OmZ1bmN0aW9uIGQodCxlKXt2YXIgbj1oKCgodD10NSh0KSkudHlwZT0iZiIsdCkpLGk9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoWjIoZSkvMykpKSxyPU1hdGgucG93KDEwLC1pKSxvPWg1WzgraS8zXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4ocip0KStvfX19fSkodCksbDU9czUuZm9ybWF0LGM1PXM1LmZvcm1hdFByZWZpeH0pKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KTt2YXIgUzU9bmV3IERhdGUsTTU9bmV3IERhdGU7ZnVuY3Rpb24gRTUodCxlLG4saSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdChlPTA9PT1hcmd1bWVudHMubGVuZ3RoP25ldyBEYXRlOm5ldyBEYXRlKCtlKSksZX1yZXR1cm4gci5mbG9vcj1mdW5jdGlvbihlKXtyZXR1cm4gdChlPW5ldyBEYXRlKCtlKSksZX0sci5jZWlsPWZ1bmN0aW9uKG4pe3JldHVybiB0KG49bmV3IERhdGUobi0xKSksZShuLDEpLHQobiksbn0sci5yb3VuZD1mdW5jdGlvbih0KXt2YXIgZT1yKHQpLG49ci5jZWlsKHQpO3JldHVybiB0LWU8bi10P2U6bn0sci5vZmZzZXQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh0PW5ldyBEYXRlKCt0KSxudWxsPT1uPzE6TWF0aC5mbG9vcihuKSksdH0sci5yYW5nZT1mdW5jdGlvbihuLGksbyl7dmFyIGEscz1bXTtpZihuPXIuY2VpbChuKSxvPW51bGw9PW8/MTpNYXRoLmZsb29yKG8pLCEobjxpJiZvPjApKXJldHVybiBzO2Rve3MucHVzaChhPW5ldyBEYXRlKCtuKSksZShuLG8pLHQobil9d2hpbGUoYTxuJiZuPGkpO3JldHVybiBzfSxyLmZpbHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gRTUoKGZ1bmN0aW9uKGUpe2lmKGU+PWUpZm9yKDt0KGUpLCFuKGUpOyllLnNldFRpbWUoZS0xKX0pLChmdW5jdGlvbih0LGkpe2lmKHQ+PXQpaWYoaTwwKWZvcig7KytpPD0wOylmb3IoO2UodCwtMSksIW4odCk7KTtlbHNlIGZvcig7LS1pPj0wOylmb3IoO2UodCwxKSwhbih0KTspO30pKX0sbiYmKHIuY291bnQ9ZnVuY3Rpb24oZSxpKXtyZXR1cm4gUzUuc2V0VGltZSgrZSksTTUuc2V0VGltZSgraSksdChTNSksdChNNSksTWF0aC5mbG9vcihuKFM1LE01KSl9LHIuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9yLmZpbHRlcihpP2Z1bmN0aW9uKGUpe3JldHVybiBpKGUpJXQ9PTB9OmZ1bmN0aW9uKGUpe3JldHVybiByLmNvdW50KDAsZSkldD09MH0pOnI6bnVsbH0pLHJ9dmFyIFQ1PUU1KChmdW5jdGlvbigpe30pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLXR9KSk7VDUuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9FNSgoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS90KSp0KX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0VGltZSgrZStuKnQpfSksKGZ1bmN0aW9uKGUsbil7cmV0dXJuKG4tZSkvdH0pKTpUNTpudWxsfTt2YXIgQzU9VDUsQTU9MWUzLGs1PTZlNCxMNT0zNmU1LFA1PTg2NGU1LE41PTYwNDhlNSxJNT1FNSgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpBNSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9BNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSksUjU9RTUoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqQTUpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqazUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvazV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSkpLE81PUU1KChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLXQuZ2V0U2Vjb25kcygpKkE1LXQuZ2V0TWludXRlcygpKms1KX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKkw1KX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL0w1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSksejU9RTUoKGZ1bmN0aW9uKHQpe3Quc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSprNSkvUDV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpLTF9KSk7ZnVuY3Rpb24gRDUodCl7cmV0dXJuIEU1KChmdW5jdGlvbihlKXtlLnNldERhdGUoZS5nZXREYXRlKCktKGUuZ2V0RGF5KCkrNy10KSU3KSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSprNSkvTjV9KSl9dmFyIEI1PUQ1KDApLEg1PUQ1KDEpO0Q1KDIpLEQ1KDMpO3ZhciBGNT1ENSg0KTtENSg1KSxENSg2KTt2YXIgVjU9RTUoKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSgxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRNb250aCgpLXQuZ2V0TW9udGgoKSsxMiooZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0pKSxVNT1FNSgoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7VTUuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9FNSgoZnVuY3Rpb24oZSl7ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0RnVsbFllYXIoKS90KSp0KSxlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK24qdCl9KSk6bnVsbH07dmFyIGo1PVU1LEc1PUU1KChmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKms1KX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2s1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pKSxXNT1FNSgoZnVuY3Rpb24odCl7dC5zZXRVVENNaW51dGVzKDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKkw1KX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL0w1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSkscTU9RTUoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9QNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pKTtmdW5jdGlvbiBZNSh0KXtyZXR1cm4gRTUoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKS0oZS5nZXRVVENEYXkoKSs3LXQpJTcpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL041fSkpfXZhciBYNT1ZNSgwKSwkNT1ZNSgxKTtZNSgyKSxZNSgzKTt2YXIgSzU9WTUoNCk7WTUoNSksWTUoNik7dmFyIFo1PUU1KChmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9KSksSjU9RTUoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSkpO0o1LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/RTUoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSkpOm51bGx9O3ZhciBRNT1KNTtmdW5jdGlvbiB0Myh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gZTModCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gbjModCxlLG4pe3JldHVybnt5OnQsbTplLGQ6bixIOjAsTTowLFM6MCxMOjB9fXZhciBpMyxyMyxvMyxhMz17Ii0iOiIiLF86IiAiLDA6IjAifSxzMz0vXlxzKlxkKy8sbDM9L14lLyxjMz0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gdTModCxlLG4pe3ZhciBpPXQ8MD8iLSI6IiIscj0oaT8tdDp0KSsiIixvPXIubGVuZ3RoO3JldHVybiBpKyhvPG4/bmV3IEFycmF5KG4tbysxKS5qb2luKGUpK3I6cil9ZnVuY3Rpb24gaDModCl7cmV0dXJuIHQucmVwbGFjZShjMywiXFwkJiIpfWZ1bmN0aW9uIGQzKHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcChoMykuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHAzKHQpe2Zvcih2YXIgZT17fSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KWVbdFtuXS50b0xvd2VyQ2FzZSgpXT1uO3JldHVybiBlfWZ1bmN0aW9uIGYzKHQsZSxuKXt2YXIgaT1zMy5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gaT8odC53PStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG0zKHQsZSxuKXt2YXIgaT1zMy5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gaT8odC51PStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGczKHQsZSxuKXt2YXIgaT1zMy5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5VPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIF8zKHQsZSxuKXt2YXIgaT1zMy5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5WPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHkzKHQsZSxuKXt2YXIgaT1zMy5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5XPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHYzKHQsZSxuKXt2YXIgaT1zMy5leGVjKGUuc2xpY2UobixuKzQpKTtyZXR1cm4gaT8odC55PStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGIzKHQsZSxuKXt2YXIgaT1zMy5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC55PStpWzBdKygraVswXT42OD8xOTAwOjJlMyksbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geDModCxlLG4pe3ZhciBpPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gaT8odC5aPWlbMV0/MDotKGlbMl0rKGlbM118fCIwMCIpKSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB3Myh0LGUsbil7dmFyIGk9czMuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIGk/KHQucT0zKmlbMF0tMyxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBTMyh0LGUsbil7dmFyIGk9czMuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQubT1pWzBdLTEsbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTTModCxlLG4pe3ZhciBpPXMzLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0LmQ9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRTModCxlLG4pe3ZhciBpPXMzLmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiBpPyh0Lm09MCx0LmQ9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVDModCxlLG4pe3ZhciBpPXMzLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Lkg9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQzModCxlLG4pe3ZhciBpPXMzLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Lk09K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQTModCxlLG4pe3ZhciBpPXMzLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0LlM9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gazModCxlLG4pe3ZhciBpPXMzLmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiBpPyh0Lkw9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTDModCxlLG4pe3ZhciBpPXMzLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiBpPyh0Lkw9TWF0aC5mbG9vcihpWzBdLzFlMyksbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUDModCxlLG4pe3ZhciBpPWwzLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiBpP24raVswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gTjModCxlLG4pe3ZhciBpPXMzLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQuUT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJMyh0LGUsbil7dmFyIGk9czMuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5zPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFIzKHQsZSl7cmV0dXJuIHUzKHQuZ2V0RGF0ZSgpLGUsMil9ZnVuY3Rpb24gTzModCxlKXtyZXR1cm4gdTModC5nZXRIb3VycygpLGUsMil9ZnVuY3Rpb24gejModCxlKXtyZXR1cm4gdTModC5nZXRIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIEQzKHQsZSl7cmV0dXJuIHUzKDErejUuY291bnQoajUodCksdCksZSwzKX1mdW5jdGlvbiBCMyh0LGUpe3JldHVybiB1Myh0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gSDModCxlKXtyZXR1cm4gQjModCxlKSsiMDAwIn1mdW5jdGlvbiBGMyh0LGUpe3JldHVybiB1Myh0LmdldE1vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIFYzKHQsZSl7cmV0dXJuIHUzKHQuZ2V0TWludXRlcygpLGUsMil9ZnVuY3Rpb24gVTModCxlKXtyZXR1cm4gdTModC5nZXRTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBqMyh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gRzModCxlKXtyZXR1cm4gdTMoQjUuY291bnQoajUodCktMSx0KSxlLDIpfWZ1bmN0aW9uIFczKHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIGU+PTR8fDA9PT1lP0Y1KHQpOkY1LmNlaWwodCl9ZnVuY3Rpb24gcTModCxlKXtyZXR1cm4gdD1XMyh0KSx1MyhGNS5jb3VudChqNSh0KSx0KSsoND09PWo1KHQpLmdldERheSgpKSxlLDIpfWZ1bmN0aW9uIFkzKHQpe3JldHVybiB0LmdldERheSgpfWZ1bmN0aW9uIFgzKHQsZSl7cmV0dXJuIHUzKEg1LmNvdW50KGo1KHQpLTEsdCksZSwyKX1mdW5jdGlvbiAkMyh0LGUpe3JldHVybiB1Myh0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gSzModCxlKXtyZXR1cm4gdTMoKHQ9VzModCkpLmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gWjModCxlKXtyZXR1cm4gdTModC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIEozKHQsZSl7dmFyIG49dC5nZXREYXkoKTtyZXR1cm4gdTMoKHQ9bj49NHx8MD09PW4/RjUodCk6RjUuY2VpbCh0KSkuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBRMyh0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK3UzKGUvNjB8MCwiMCIsMikrdTMoZSU2MCwiMCIsMil9ZnVuY3Rpb24gdDQodCxlKXtyZXR1cm4gdTModC5nZXRVVENEYXRlKCksZSwyKX1mdW5jdGlvbiBlNCh0LGUpe3JldHVybiB1Myh0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiBuNCh0LGUpe3JldHVybiB1Myh0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gaTQodCxlKXtyZXR1cm4gdTMoMStxNS5jb3VudChRNSh0KSx0KSxlLDMpfWZ1bmN0aW9uIHI0KHQsZSl7cmV0dXJuIHUzKHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBvNCh0LGUpe3JldHVybiByNCh0LGUpKyIwMDAifWZ1bmN0aW9uIGE0KHQsZSl7cmV0dXJuIHUzKHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gczQodCxlKXtyZXR1cm4gdTModC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBsNCh0LGUpe3JldHVybiB1Myh0LmdldFVUQ1NlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIGM0KHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiB1NCh0LGUpe3JldHVybiB1MyhYNS5jb3VudChRNSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gaDQodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gZT49NHx8MD09PWU/SzUodCk6SzUuY2VpbCh0KX1mdW5jdGlvbiBkNCh0LGUpe3JldHVybiB0PWg0KHQpLHUzKEs1LmNvdW50KFE1KHQpLHQpKyg0PT09UTUodCkuZ2V0VVRDRGF5KCkpLGUsMil9ZnVuY3Rpb24gcDQodCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gZjQodCxlKXtyZXR1cm4gdTMoJDUuY291bnQoUTUodCktMSx0KSxlLDIpfWZ1bmN0aW9uIG00KHQsZSl7cmV0dXJuIHUzKHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBnNCh0LGUpe3JldHVybiB1MygodD1oNCh0KSkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBfNCh0LGUpe3JldHVybiB1Myh0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24geTQodCxlKXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiB1MygodD1uPj00fHwwPT09bj9LNSh0KTpLNS5jZWlsKHQpKS5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIHY0KCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBiNCgpe3JldHVybiIlIn1mdW5jdGlvbiB4NCh0KXtyZXR1cm4rdH1mdW5jdGlvbiB3NCh0KXtyZXR1cm4gTWF0aC5mbG9vcigrdC8xZTMpfSEoZnVuY3Rpb24gUzQodCl7aTM9KGZ1bmN0aW9uIGUodCl7dmFyIGU9dC5kYXRlVGltZSxuPXQuZGF0ZSxpPXQudGltZSxyPXQucGVyaW9kcyxvPXQuZGF5cyxhPXQuc2hvcnREYXlzLHM9dC5tb250aHMsbD10LnNob3J0TW9udGhzLGM9ZDMociksdT1wMyhyKSxoPWQzKG8pLGQ9cDMobykscD1kMyhhKSxmPXAzKGEpLG09ZDMocyksZz1wMyhzKSxfPWQzKGwpLHk9cDMobCksdj17YTpmdW5jdGlvbiBiKHQpe3JldHVybiBhW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uIHgodCl7cmV0dXJuIG9bdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24gdyh0KXtyZXR1cm4gbFt0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uIFModCl7cmV0dXJuIHNbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6UjMsZTpSMyxmOkgzLGc6SzMsRzpKMyxIOk8zLEk6ejMsajpEMyxMOkIzLG06RjMsTTpWMyxwOmZ1bmN0aW9uIE0odCl7cmV0dXJuIHJbKyh0LmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24gRSh0KXtyZXR1cm4gMSt+fih0LmdldE1vbnRoKCkvMyl9LFE6eDQsczp3NCxTOlUzLHU6ajMsVTpHMyxWOnEzLHc6WTMsVzpYMyx4Om51bGwsWDpudWxsLHk6JDMsWTpaMyxaOlEzLCIlIjpiNH0sVD17YTpmdW5jdGlvbiBDKHQpe3JldHVybiBhW3QuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uIEEodCl7cmV0dXJuIG9bdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24gayh0KXtyZXR1cm4gbFt0LmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uIEwodCl7cmV0dXJuIHNbdC5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6dDQsZTp0NCxmOm80LGc6ZzQsRzp5NCxIOmU0LEk6bjQsajppNCxMOnI0LG06YTQsTTpzNCxwOmZ1bmN0aW9uIFAodCl7cmV0dXJuIHJbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24gTih0KXtyZXR1cm4gMSt+fih0LmdldFVUQ01vbnRoKCkvMyl9LFE6eDQsczp3NCxTOmw0LHU6YzQsVTp1NCxWOmQ0LHc6cDQsVzpmNCx4Om51bGwsWDpudWxsLHk6bTQsWTpfNCxaOnY0LCIlIjpiNH0sST17YTpmdW5jdGlvbiBSKHQsZSxuKXt2YXIgaT1wLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQudz1mW2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24gTyh0LGUsbil7dmFyIGk9aC5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0Lnc9ZFtpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uIHoodCxlLG4pe3ZhciBpPV8uZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5tPXlbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbiBEKHQsZSxuKXt2YXIgaT1tLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQubT1nW2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24gQih0LG4saSl7cmV0dXJuIEcodCxlLG4saSl9LGQ6TTMsZTpNMyxmOkwzLGc6YjMsRzp2MyxIOlQzLEk6VDMsajpFMyxMOmszLG06UzMsTTpDMyxwOmZ1bmN0aW9uIEgodCxlLG4pe3ZhciBpPWMuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5wPXVbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0scTp3MyxROk4zLHM6STMsUzpBMyx1Om0zLFU6ZzMsVjpfMyx3OmYzLFc6eTMseDpmdW5jdGlvbiBGKHQsZSxpKXtyZXR1cm4gRyh0LG4sZSxpKX0sWDpmdW5jdGlvbiBWKHQsZSxuKXtyZXR1cm4gRyh0LGksZSxuKX0seTpiMyxZOnYzLFo6eDMsIiUiOlAzfTtmdW5jdGlvbiBVKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLHIsbyxhPVtdLHM9LTEsbD0wLGM9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczxjOykzNz09PXQuY2hhckNvZGVBdChzKSYmKGEucHVzaCh0LnNsaWNlKGwscykpLG51bGwhPShyPWEzW2k9dC5jaGFyQXQoKytzKV0pP2k9dC5jaGFyQXQoKytzKTpyPSJlIj09PWk/IiAiOiIwIiwobz1lW2ldKSYmKGk9byhuLHIpKSxhLnB1c2goaSksbD1zKzEpO3JldHVybiBhLnB1c2godC5zbGljZShsLHMpKSxhLmpvaW4oIiIpfX1mdW5jdGlvbiBqKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLHIsbz1uMygxOTAwLHZvaWQgMCwxKTtpZihHKG8sdCxuKz0iIiwwKSE9bi5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gbylyZXR1cm4gbmV3IERhdGUoby5RKTtpZigicyJpbiBvKXJldHVybiBuZXcgRGF0ZSgxZTMqby5zKygiTCJpbiBvP28uTDowKSk7aWYoZSYmISgiWiJpbiBvKSYmKG8uWj0wKSwicCJpbiBvJiYoby5IPW8uSCUxMisxMipvLnApLHZvaWQgMD09PW8ubSYmKG8ubT0icSJpbiBvP28ucTowKSwiViJpbiBvKXtpZihvLlY8MXx8by5WPjUzKXJldHVybiBudWxsOyJ3ImluIG98fChvLnc9MSksIloiaW4gbz8ocj0oaT1lMyhuMyhvLnksMCwxKSkpLmdldFVUQ0RheSgpLGk9cj40fHwwPT09cj8kNS5jZWlsKGkpOiQ1KGkpLGk9cTUub2Zmc2V0KGksNyooby5WLTEpKSxvLnk9aS5nZXRVVENGdWxsWWVhcigpLG8ubT1pLmdldFVUQ01vbnRoKCksby5kPWkuZ2V0VVRDRGF0ZSgpKyhvLncrNiklNyk6KHI9KGk9dDMobjMoby55LDAsMSkpKS5nZXREYXkoKSxpPXI+NHx8MD09PXI/SDUuY2VpbChpKTpINShpKSxpPXo1Lm9mZnNldChpLDcqKG8uVi0xKSksby55PWkuZ2V0RnVsbFllYXIoKSxvLm09aS5nZXRNb250aCgpLG8uZD1pLmdldERhdGUoKSsoby53KzYpJTcpfWVsc2UoIlciaW4gb3x8IlUiaW4gbykmJigidyJpbiBvfHwoby53PSJ1ImluIG8/by51JTc6IlciaW4gbz8xOjApLHI9IloiaW4gbz9lMyhuMyhvLnksMCwxKSkuZ2V0VVRDRGF5KCk6dDMobjMoby55LDAsMSkpLmdldERheSgpLG8ubT0wLG8uZD0iVyJpbiBvPyhvLncrNiklNys3Km8uVy0ocis1KSU3Om8udys3Km8uVS0ocis2KSU3KTtyZXR1cm4iWiJpbiBvPyhvLkgrPW8uWi8xMDB8MCxvLk0rPW8uWiUxMDAsZTMobykpOnQzKG8pfX1mdW5jdGlvbiBHKHQsZSxuLGkpe2Zvcih2YXIgcixvLGE9MCxzPWUubGVuZ3RoLGw9bi5sZW5ndGg7YTxzOyl7aWYoaT49bClyZXR1cm4tMTtpZigzNz09PShyPWUuY2hhckNvZGVBdChhKyspKSl7aWYocj1lLmNoYXJBdChhKyspLCEobz1JW3IgaW4gYTM/ZS5jaGFyQXQoYSsrKTpyXSl8fChpPW8odCxuLGkpKTwwKXJldHVybi0xfWVsc2UgaWYociE9bi5jaGFyQ29kZUF0KGkrKykpcmV0dXJuLTF9cmV0dXJuIGl9cmV0dXJuIHYueD1VKG4sdiksdi5YPVUoaSx2KSx2LmM9VShlLHYpLFQueD1VKG4sVCksVC5YPVUoaSxUKSxULmM9VShlLFQpLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9VSh0Kz0iIix2KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1qKHQrPSIiLCExKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9VSh0Kz0iIixUKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1qKHQrPSIiLCEwKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfX19KSh0KSxyMz1pMy5mb3JtYXQsbzM9aTMudXRjRm9ybWF0fSkoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgTTQ9MzE1MzZlNjtmdW5jdGlvbiBFNCh0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gVDQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gQzQodCxlLG4saSxyLG8sYSxzLGwpe3ZhciBjPSQyKFcyLE4yKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZD1sKCIuJUwiKSxwPWwoIjolUyIpLGY9bCgiJUk6JU0iKSxtPWwoIiVJICVwIiksZz1sKCIlYSAlZCIpLF89bCgiJWIgJWQiKSx5PWwoIiVCIiksdj1sKCIlWSIpLGI9W1thLDEsMWUzXSxbYSw1LDVlM10sW2EsMTUsMTVlM10sW2EsMzAsM2U0XSxbbywxLDZlNF0sW28sNSwzZTVdLFtvLDE1LDllNV0sW28sMzAsMThlNV0sW3IsMSwzNmU1XSxbciwzLDEwOGU1XSxbciw2LDIxNmU1XSxbciwxMiw0MzJlNV0sW2ksMSw4NjRlNV0sW2ksMiwxNzI4ZTVdLFtuLDEsNjA0OGU1XSxbZSwxLDI1OTJlNl0sW2UsMyw3Nzc2ZTZdLFt0LDEsTTRdXTtmdW5jdGlvbiB4KHMpe3JldHVybihhKHMpPHM/ZDpvKHMpPHM/cDpyKHMpPHM/ZjppKHMpPHM/bTplKHMpPHM/bihzKTxzP2c6Xzp0KHMpPHM/eTp2KShzKX1mdW5jdGlvbiB3KGUsbixpLHIpe2lmKG51bGw9PWUmJihlPTEwKSwibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBvPU1hdGguYWJzKGktbikvZSxhPWgwKChmdW5jdGlvbih0KXtyZXR1cm4gdFsyXX0pKS5yaWdodChiLG8pO2E9PT1iLmxlbmd0aD8ocj12MChuL000LGkvTTQsZSksZT10KTphPyhyPShhPWJbby9iW2EtMV1bMl08YlthXVsyXS9vP2EtMTphXSlbMV0sZT1hWzBdKToocj1NYXRoLm1heCh2MChuLGksZSksMSksZT1zKX1yZXR1cm4gbnVsbD09cj9lOmUuZXZlcnkocil9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZSh1KHQpKX0sYy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aChDMC5jYWxsKHQsVDQpKTpoKCkubWFwKEU0KX0sYy50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciBuLGk9aCgpLHI9aVswXSxvPWlbaS5sZW5ndGgtMV0sYT1vPHI7cmV0dXJuIGEmJihuPXIscj1vLG89biksbj0obj13KHQscixvLGUpKT9uLnJhbmdlKHIsbysxKTpbXSxhP24ucmV2ZXJzZSgpOm59LGMudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP3g6bChlKX0sYy5uaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49aCgpO3JldHVybih0PXcodCxuWzBdLG5bbi5sZW5ndGgtMV0sZSkpP2gocDUobix0KSk6Y30sYy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFgyKGMsQzQodCxlLG4saSxyLG8sYSxzLGwpKX0sY31mdW5jdGlvbiBBNCh0KXtyZXR1cm4gdC5tYXRjaCgvLns2fS9nKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiIjIit0fSkpfXZhciBrND1BNCgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIiksTDQ9QTQoIjM5M2I3OTUyNTRhMzZiNmVjZjljOWVkZTYzNzkzOThjYTI1MmI1Y2Y2YmNlZGI5YzhjNmQzMWJkOWUzOWU3YmE1MmU3Y2I5NDg0M2MzOWFkNDk0YWQ2NjE2YmU3OTY5YzdiNDE3M2E1NTE5NGNlNmRiZGRlOWVkNiIpLFA0PUE0KCIzMTgyYmQ2YmFlZDY5ZWNhZTFjNmRiZWZlNjU1MGRmZDhkM2NmZGFlNmJmZGQwYTIzMWEzNTQ3NGM0NzZhMWQ5OWJjN2U5YzA3NTZiYjE5ZTlhYzhiY2JkZGNkYWRhZWI2MzYzNjM5Njk2OTZiZGJkYmRkOWQ5ZDkiKSxOND1BNCgiMWY3N2I0YWVjN2U4ZmY3ZjBlZmZiYjc4MmNhMDJjOThkZjhhZDYyNzI4ZmY5ODk2OTQ2N2JkYzViMGQ1OGM1NjRiYzQ5Yzk0ZTM3N2MyZjdiNmQyN2Y3ZjdmYzdjN2M3YmNiZDIyZGJkYjhkMTdiZWNmOWVkYWU1IiksSTQ9VjIoUzIoMzAwLC41LDApLFMyKC0yNDAsLjUsMSkpLFI0PVYyKFMyKC0xMDAsLjc1LC4zNSksUzIoODAsMS41LC44KSksTzQ9VjIoUzIoMjYwLC43NSwuMzUpLFMyKDgwLDEuNSwuOCkpLHo0PVMyKCk7ZnVuY3Rpb24gRDQodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4oZS0xLE1hdGguZmxvb3IobiplKSkpXX19dmFyIEI0PUQ0KEE0KCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksSDQ9RDQoQTQoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwOTAyMDIwYjAyMDIwZDAzMDMwZjAzMDMxMjA0MDQxNDA1MDQxNjA2MDUxODA2MDUxYTA3MDYxYzA4MDcxZTA5MDcyMDBhMDgyMjBiMDkyNDBjMDkyNjBkMGEyOTBlMGIyYjEwMGIyZDExMGMyZjEyMGQzMTEzMGQzNDE0MGUzNjE1MGUzODE2MGYzYjE4MGYzZDE5MTAzZjFhMTA0MjFjMTA0NDFkMTE0NzFlMTE0OTIwMTE0YjIxMTE0ZTIyMTE1MDI0MTI1MzI1MTI1NTI3MTI1ODI5MTE1YTJhMTE1YzJjMTE1ZjJkMTE2MTJmMTE2MzMxMTE2NTMzMTA2NzM0MTA2OTM2MTA2YjM4MTA2YzM5MGY2ZTNiMGY3MDNkMGY3MTNmMGY3MjQwMGY3NDQyMGY3NTQ0MGY3NjQ1MTA3NzQ3MTA3ODQ5MTA3ODRhMTA3OTRjMTE3YTRlMTE3YjRmMTI3YjUxMTI3YzUyMTM3YzU0MTM3ZDU2MTQ3ZDU3MTU3ZTU5MTU3ZTVhMTY3ZTVjMTY3ZjVkMTc3ZjVmMTg3ZjYwMTg4MDYyMTk4MDY0MWE4MDY1MWE4MDY3MWI4MDY4MWM4MTZhMWM4MTZiMWQ4MTZkMWQ4MTZlMWU4MTcwMWY4MTcyMWY4MTczMjA4MTc1MjE4MTc2MjE4MTc4MjI4MTc5MjI4MjdiMjM4MjdjMjM4MjdlMjQ4MjgwMjU4MjgxMjU4MTgzMjY4MTg0MjY4MTg2Mjc4MTg4Mjc4MTg5Mjg4MThiMjk4MThjMjk4MThlMmE4MTkwMmE4MTkxMmI4MTkzMmI4MDk0MmM4MDk2MmM4MDk4MmQ4MDk5MmQ4MDliMmU3ZjljMmU3ZjllMmY3ZmEwMmY3ZmExMzA3ZWEzMzA3ZWE1MzE3ZWE2MzE3ZGE4MzI3ZGFhMzM3ZGFiMzM3Y2FkMzQ3Y2FlMzQ3YmIwMzU3YmIyMzU3YmIzMzY3YWI1MzY3YWI3Mzc3OWI4Mzc3OWJhMzg3OGJjMzk3OGJkMzk3N2JmM2E3N2MwM2E3NmMyM2I3NWM0M2M3NWM1M2M3NGM3M2Q3M2M4M2U3M2NhM2U3MmNjM2Y3MWNkNDA3MWNmNDA3MGQwNDE2ZmQyNDI2ZmQzNDM2ZWQ1NDQ2ZGQ2NDU2Y2Q4NDU2Y2Q5NDY2YmRiNDc2YWRjNDg2OWRlNDk2OGRmNGE2OGUwNGM2N2UyNGQ2NmUzNGU2NWU0NGY2NGU1NTA2NGU3NTI2M2U4NTM2MmU5NTQ2MmVhNTY2MWViNTc2MGVjNTg2MGVkNWE1ZmVlNWI1ZWVmNWQ1ZWYwNWY1ZWYxNjA1ZGYyNjI1ZGYyNjQ1Y2YzNjU1Y2Y0Njc1Y2Y0Njk1Y2Y1NmI1Y2Y2NmM1Y2Y2NmU1Y2Y3NzA1Y2Y3NzI1Y2Y4NzQ1Y2Y4NzY1Y2Y5Nzg1ZGY5Nzk1ZGY5N2I1ZGZhN2Q1ZWZhN2Y1ZWZhODE1ZmZiODM1ZmZiODU2MGZiODc2MWZjODk2MWZjOGE2MmZjOGM2M2ZjOGU2NGZjOTA2NWZkOTI2NmZkOTQ2N2ZkOTY2OGZkOTg2OWZkOWE2YWZkOWI2YmZlOWQ2Y2ZlOWY2ZGZlYTE2ZWZlYTM2ZmZlYTU3MWZlYTc3MmZlYTk3M2ZlYWE3NGZlYWM3NmZlYWU3N2ZlYjA3OGZlYjI3YWZlYjQ3YmZlYjY3Y2ZlYjc3ZWZlYjk3ZmZlYmI4MWZlYmQ4MmZlYmY4NGZlYzE4NWZlYzI4N2ZlYzQ4OGZlYzY4YWZlYzg4Y2ZlY2E4ZGZlY2M4ZmZlY2Q5MGZlY2Y5MmZlZDE5NGZlZDM5NWZlZDU5N2ZlZDc5OWZlZDg5YWZkZGE5Y2ZkZGM5ZWZkZGVhMGZkZTBhMWZkZTJhM2ZkZTNhNWZkZTVhN2ZkZTdhOWZkZTlhYWZkZWJhY2ZjZWNhZWZjZWViMGZjZjBiMmZjZjJiNGZjZjRiNmZjZjZiOGZjZjdiOWZjZjliYmZjZmJiZGZjZmRiZiIpKSxGND1ENChBNCgiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTBhMDIwMjBjMDIwMjBlMDMwMjEwMDQwMzEyMDQwMzE0MDUwNDE3MDYwNDE5MDcwNTFiMDgwNTFkMDkwNjFmMGEwNzIyMGIwNzI0MGMwODI2MGQwODI5MGUwOTJiMTAwOTJkMTEwYTMwMTIwYTMyMTQwYjM0MTUwYjM3MTYwYjM5MTgwYzNjMTkwYzNlMWIwYzQxMWMwYzQzMWUwYzQ1MWYwYzQ4MjEwYzRhMjMwYzRjMjQwYzRmMjYwYzUxMjgwYjUzMjkwYjU1MmIwYjU3MmQwYjU5MmYwYTViMzEwYTVjMzIwYTVlMzQwYTVmMzYwOTYxMzgwOTYyMzkwOTYzM2IwOTY0M2QwOTY1M2UwOTY2NDAwYTY3NDIwYTY4NDQwYTY4NDUwYTY5NDcwYjZhNDkwYjZhNGEwYzZiNGMwYzZiNGQwZDZjNGYwZDZjNTEwZTZjNTIwZTZkNTQwZjZkNTUwZjZkNTcxMDZlNTkxMDZlNWExMTZlNWMxMjZlNWQxMjZlNWYxMzZlNjExMzZlNjIxNDZlNjQxNTZlNjUxNTZlNjcxNjZlNjkxNjZlNmExNzZlNmMxODZlNmQxODZlNmYxOTZlNzExOTZlNzIxYTZlNzQxYTZlNzUxYjZlNzcxYzZkNzgxYzZkN2ExZDZkN2MxZDZkN2QxZTZkN2YxZTZjODAxZjZjODIyMDZjODQyMDZiODUyMTZiODcyMTZiODgyMjZhOGEyMjZhOGMyMzY5OGQyMzY5OGYyNDY5OTAyNTY4OTIyNTY4OTMyNjY3OTUyNjY3OTcyNzY2OTgyNzY2OWEyODY1OWIyOTY0OWQyOTY0OWYyYTYzYTAyYTYzYTIyYjYyYTMyYzYxYTUyYzYwYTYyZDYwYTgyZTVmYTkyZTVlYWIyZjVlYWQzMDVkYWUzMDVjYjAzMTViYjEzMjVhYjMzMjVhYjQzMzU5YjYzNDU4YjczNTU3YjkzNTU2YmEzNjU1YmMzNzU0YmQzODUzYmYzOTUyYzAzYTUxYzEzYTUwYzMzYjRmYzQzYzRlYzYzZDRkYzczZTRjYzgzZjRiY2E0MDRhY2I0MTQ5Y2M0MjQ4Y2U0MzQ3Y2Y0NDQ2ZDA0NTQ1ZDI0NjQ0ZDM0NzQzZDQ0ODQyZDU0YTQxZDc0YjNmZDg0YzNlZDk0ZDNkZGE0ZTNjZGI1MDNiZGQ1MTNhZGU1MjM4ZGY1MzM3ZTA1NTM2ZTE1NjM1ZTI1NzM0ZTM1OTMzZTQ1YTMxZTU1YzMwZTY1ZDJmZTc1ZTJlZTg2MDJkZTk2MTJiZWE2MzJhZWI2NDI5ZWI2NjI4ZWM2NzI2ZWQ2OTI1ZWU2YTI0ZWY2YzIzZWY2ZTIxZjA2ZjIwZjE3MTFmZjE3MzFkZjI3NDFjZjM3NjFiZjM3ODE5ZjQ3OTE4ZjU3YjE3ZjU3ZDE1ZjY3ZTE0ZjY4MDEzZjc4MjEyZjc4NDEwZjg4NTBmZjg4NzBlZjg4OTBjZjk4YjBiZjk4YzBhZjk4ZTA5ZmE5MDA4ZmE5MjA3ZmE5NDA3ZmI5NjA2ZmI5NzA2ZmI5OTA2ZmI5YjA2ZmI5ZDA3ZmM5ZjA3ZmNhMTA4ZmNhMzA5ZmNhNTBhZmNhNjBjZmNhODBkZmNhYTBmZmNhYzExZmNhZTEyZmNiMDE0ZmNiMjE2ZmNiNDE4ZmJiNjFhZmJiODFkZmJiYTFmZmJiYzIxZmJiZTIzZmFjMDI2ZmFjMjI4ZmFjNDJhZmFjNjJkZjljNzJmZjljOTMyZjljYjM1ZjhjZDM3ZjhjZjNhZjdkMTNkZjdkMzQwZjZkNTQzZjZkNzQ2ZjVkOTQ5ZjVkYjRjZjRkZDRmZjRkZjUzZjRlMTU2ZjNlMzVhZjNlNTVkZjJlNjYxZjJlODY1ZjJlYTY5ZjFlYzZkZjFlZDcxZjFlZjc1ZjFmMTc5ZjJmMjdkZjJmNDgyZjNmNTg2ZjNmNjhhZjRmODhlZjVmOTkyZjZmYTk2ZjhmYjlhZjlmYzlkZmFmZGExZmNmZmE0IikpLFY0PUQ0KEE0KCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSksVTQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGo0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpVNCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIEc0KHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLGo0Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpqNFtlXSxsb2NhbDp0fTp0fWZ1bmN0aW9uIFc0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxuPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBuPT09VTQmJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVU0P2UuY3JlYXRlRWxlbWVudCh0KTplLmNyZWF0ZUVsZW1lbnROUyhuLHQpfX1mdW5jdGlvbiBxNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBZNCh0KXt2YXIgZT1HNCh0KTtyZXR1cm4oZS5sb2NhbD9xNDpXNCkoZSl9ZnVuY3Rpb24gWDQoKXt9ZnVuY3Rpb24gJDQodCl7cmV0dXJuIG51bGw9PXQ/WDQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX1mdW5jdGlvbiBLNCgpe3JldHVybltdfWZ1bmN0aW9uIFo0KHQpe3JldHVybiBudWxsPT10P0s0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19dmFyIEo0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KXt2YXIgUTQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2lmKCFRNC5tYXRjaGVzKXt2YXIgdDY9UTQud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxRNC5tc01hdGNoZXNTZWxlY3Rvcnx8UTQubW96TWF0Y2hlc1NlbGVjdG9yfHxRNC5vTWF0Y2hlc1NlbGVjdG9yO0o0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0Ni5jYWxsKHRoaXMsdCl9fX19dmFyIGU2PUo0O2Z1bmN0aW9uIG42KHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfWZ1bmN0aW9uIGk2KHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfWZ1bmN0aW9uIHI2KHQsZSxuLGkscixvKXtmb3IodmFyIGEscz0wLGw9ZS5sZW5ndGgsYz1vLmxlbmd0aDtzPGM7KytzKShhPWVbc10pPyhhLl9fZGF0YV9fPW9bc10saVtzXT1hKTpuW3NdPW5ldyBpNih0LG9bc10pO2Zvcig7czxsOysrcykoYT1lW3NdKSYmKHJbc109YSl9ZnVuY3Rpb24gbzYodCxlLG4saSxyLG8sYSl7dmFyIHMsbCxjLHU9e30saD1lLmxlbmd0aCxkPW8ubGVuZ3RoLHA9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykobD1lW3NdKSYmKHBbc109Yz0iJCIrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLGUpLGMgaW4gdT9yW3NdPWw6dVtjXT1sKTtmb3Iocz0wO3M8ZDsrK3MpKGw9dVtjPSIkIithLmNhbGwodCxvW3NdLHMsbyldKT8oaVtzXT1sLGwuX19kYXRhX189b1tzXSx1W2NdPW51bGwpOm5bc109bmV3IGk2KHQsb1tzXSk7Zm9yKHM9MDtzPGg7KytzKShsPWVbc10pJiZ1W3Bbc11dPT09bCYmKHJbc109bCl9ZnVuY3Rpb24gYTYodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gczYodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIGw2KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gYzYodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiB1Nih0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX1mdW5jdGlvbiBoNih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gZDYodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19ZnVuY3Rpb24gcDYodCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIGY2KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIG02KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxuKX19ZnVuY3Rpb24gZzYodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWk/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsaSxuKX19ZnVuY3Rpb24gXzYodCxlKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHxwNih0KS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX1mdW5jdGlvbiB5Nih0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19ZnVuY3Rpb24gdjYodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIGI2KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPW59fWZ1bmN0aW9uIHg2KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiB3Nih0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBTNih0KX1mdW5jdGlvbiBTNih0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9eDYodC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBNNih0LGUpe2Zvcih2YXIgbj13Nih0KSxpPS0xLHI9ZS5sZW5ndGg7KytpPHI7KW4uYWRkKGVbaV0pfWZ1bmN0aW9uIEU2KHQsZSl7Zm9yKHZhciBuPXc2KHQpLGk9LTEscj1lLmxlbmd0aDsrK2k8cjspbi5yZW1vdmUoZVtpXSl9ZnVuY3Rpb24gVDYodCl7cmV0dXJuIGZ1bmN0aW9uKCl7TTYodGhpcyx0KX19ZnVuY3Rpb24gQzYodCl7cmV0dXJuIGZ1bmN0aW9uKCl7RTYodGhpcyx0KX19ZnVuY3Rpb24gQTYodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXsoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/TTY6RTYpKHRoaXMsdCl9fWZ1bmN0aW9uIGs2KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBMNih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIFA2KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBONigpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIEk2KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fWZ1bmN0aW9uIFI2KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gTzYoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gejYoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBENigpe3JldHVybiBudWxsfWZ1bmN0aW9uIEI2KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gSDYoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMSksdGhpcy5uZXh0U2libGluZyl9ZnVuY3Rpb24gRjYoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMCksdGhpcy5uZXh0U2libGluZyl9aTYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjppNixhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxTNi5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciBWNj17fSxVNj1udWxsO2Z1bmN0aW9uIGo2KHQsZSxuKXtyZXR1cm4gdD1HNih0LGUsbiksZnVuY3Rpb24oZSl7dmFyIG49ZS5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIEc2KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIHI9VTY7VTY9aTt0cnl7dC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLG4pfWZpbmFsbHl7VTY9cn19fWZ1bmN0aW9uIFc2KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSkpfWZ1bmN0aW9uIHE2KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4saT0wLHI9LTEsbz1lLmxlbmd0aDtpPG87KytpKW49ZVtpXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytyXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLmNhcHR1cmUpOysrcj9lLmxlbmd0aD1yOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBZNih0LGUsbil7dmFyIGk9VjYuaGFzT3duUHJvcGVydHkodC50eXBlKT9qNjpHNjtyZXR1cm4gZnVuY3Rpb24ocixvLGEpe3ZhciBzLGw9dGhpcy5fX29uLGM9aShlLG8sYSk7aWYobClmb3IodmFyIHU9MCxoPWwubGVuZ3RoO3U8aDsrK3UpaWYoKHM9bFt1XSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9YyxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsYyxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOmMsY2FwdHVyZTpufSxsP2wucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiBYNih0LGUsbil7dmFyIGk9cDYodCkscj1pLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiByP3I9bmV3IHIoZSxuKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KHIuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksci5kZXRhaWw9bi5kZXRhaWwpOnIuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gJDYodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gWDYodGhpcyx0LGUpfX1mdW5jdGlvbiBLNih0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBYNih0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fChWNj17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIFo2PVtudWxsXTtmdW5jdGlvbiBKNih0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiBRNigpe3JldHVybiBuZXcgSjYoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxaNil9ZnVuY3Rpb24gdDkodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBKNihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEo2KFtbdF1dLFo2KX1KNi5wcm90b3R5cGU9UTYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKNixzZWxlY3Q6ZnVuY3Rpb24gZTkodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PSQ0KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZm9yKHZhciBvLGEscz1lW3JdLGw9cy5sZW5ndGgsYz1pW3JdPW5ldyBBcnJheShsKSx1PTA7dTxsOysrdSkobz1zW3VdKSYmKGE9dC5jYWxsKG8sby5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBvJiYoYS5fX2RhdGFfXz1vLl9fZGF0YV9fKSxjW3VdPWEpO3JldHVybiBuZXcgSjYoaSx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIG45KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1aNCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9W10scj1bXSxvPTA7bzxuOysrbylmb3IodmFyIGEscz1lW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpKGE9c1tjXSkmJihpLnB1c2godC5jYWxsKGEsYS5fX2RhdGFfXyxjLHMpKSxyLnB1c2goYSkpO3JldHVybiBuZXcgSjYoaSxyKX0sZmlsdGVyOmZ1bmN0aW9uIGk5KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1lNih0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhPWVbcl0scz1hLmxlbmd0aCxsPWlbcl09W10sYz0wO2M8czsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmbC5wdXNoKG8pO3JldHVybiBuZXcgSjYoaSx0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbiByOSh0LGUpe2lmKCF0KXJldHVybiBmPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdT0tMSx0aGlzLmVhY2goKGZ1bmN0aW9uKHQpe2ZbKyt1XT10fSkpLGY7dmFyIG49ZT9vNjpyNixpPXRoaXMuX3BhcmVudHMscj10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PShmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0pKHQpKTtmb3IodmFyIGE9ci5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT0wO3U8YTsrK3Upe3ZhciBoPWlbdV0sZD1yW3VdLHA9ZC5sZW5ndGgsZj10LmNhbGwoaCxoJiZoLl9fZGF0YV9fLHUsaSksbT1mLmxlbmd0aCxnPWxbdV09bmV3IEFycmF5KG0pLF89c1t1XT1uZXcgQXJyYXkobSk7bihoLGQsZyxfLGNbdV09bmV3IEFycmF5KHApLGYsZSk7Zm9yKHZhciB5LHYsYj0wLHg9MDtiPG07KytiKWlmKHk9Z1tiXSl7Zm9yKGI+PXgmJih4PWIrMSk7ISh2PV9beF0pJiYrK3g8bTspO3kuX25leHQ9dnx8bnVsbH19cmV0dXJuKHM9bmV3IEo2KHMsaSkpLl9lbnRlcj1sLHMuX2V4aXQ9YyxzfSxlbnRlcjpmdW5jdGlvbiBvOSgpe3JldHVybiBuZXcgSjYodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAobjYpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uIGE5KCl7cmV0dXJuIG5ldyBKNih0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKG42KSx0aGlzLl9wYXJlbnRzKX0sbWVyZ2U6ZnVuY3Rpb24gczkodCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxpPWUubGVuZ3RoLHI9TWF0aC5taW4oaSxuLmxlbmd0aCksbz1uZXcgQXJyYXkoaSksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGw9ZVthXSxjPW5bYV0sdT1sLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKShzPWxbZF18fGNbZF0pJiYoaFtkXT1zKTtmb3IoO2E8aTsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgSjYobyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24gbDkoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciBpLHI9dFtlXSxvPXIubGVuZ3RoLTEsYT1yW29dOy0tbz49MDspKGk9cltvXSkmJihhJiZhIT09aS5uZXh0U2libGluZyYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpLGEpLGE9aSk7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24gYzkodCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD1hNik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKXtmb3IodmFyIGEscz1uW29dLGw9cy5sZW5ndGgsYz1yW29dPW5ldyBBcnJheShsKSx1PTA7dTxsOysrdSkoYT1zW3VdKSYmKGNbdV09YSk7Yy5zb3J0KGUpfXJldHVybiBuZXcgSjYocix0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uIHU5KCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbiBoOSgpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3RbKytlXT10aGlzfSkpLHR9LG5vZGU6ZnVuY3Rpb24gZDkoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciBpPXRbZV0scj0wLG89aS5sZW5ndGg7cjxvOysrcil7dmFyIGE9aVtyXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uIHA5KCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeysrdH0pKSx0fSxlbXB0eTpmdW5jdGlvbiBmOSgpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbiBtOSh0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxpPWUubGVuZ3RoO248aTsrK24pZm9yKHZhciByLG89ZVtuXSxhPTAscz1vLmxlbmd0aDthPHM7KythKShyPW9bYV0pJiZ0LmNhbGwocixyLl9fZGF0YV9fLGEsbyk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24gZzkodCxlKXt2YXIgbj1HNCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP2kuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTppLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/bDY6czY6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9kNjpoNjpuLmxvY2FsP3U2OmM2KShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24gXzkodCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP2Y2OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2c2Om02KSh0LGUsbnVsbD09bj8iIjpuKSk6XzYodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uIHk5KHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/eTY6ImZ1bmN0aW9uIj09dHlwZW9mIGU/YjY6djYpKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uIHY5KHQsZSl7dmFyIG49eDYodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9dzYodGhpcy5ub2RlKCkpLHI9LTEsbz1uLmxlbmd0aDsrK3I8bzspaWYoIWkuY29udGFpbnMobltyXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/QTY6ZT9UNjpDNikobixlKSl9LHRleHQ6ZnVuY3Rpb24gYjkodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/azY6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P1A2Okw2KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24geDkodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/TjY6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P1I2Okk2KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbiB3OSgpe3JldHVybiB0aGlzLmVhY2goTzYpfSxsb3dlcjpmdW5jdGlvbiBTOSgpe3JldHVybiB0aGlzLmVhY2goejYpfSxhcHBlbmQ6ZnVuY3Rpb24gTTkodCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpZNCh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24gRTkodCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Olk0KHQpLGk9bnVsbD09ZT9ENjoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOiQ0KGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24gVDkoKXtyZXR1cm4gdGhpcy5lYWNoKEI2KX0sY2xvbmU6ZnVuY3Rpb24gQzkodCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/RjY6SDYpfSxkYXR1bTpmdW5jdGlvbiBBOSh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uIGs5KHQsZSxuKXt2YXIgaSxyLG89VzYodCsiIiksYT1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/WTY6cTYsbnVsbD09biYmKG49ITEpLGk9MDtpPGE7KytpKXRoaXMuZWFjaChzKG9baV0sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgbCxjPTAsdT1zLmxlbmd0aDtjPHU7KytjKWZvcihpPTAsbD1zW2NdO2k8YTsrK2kpaWYoKHI9b1tpXSkudHlwZT09PWwudHlwZSYmci5uYW1lPT09bC5uYW1lKXJldHVybiBsLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbiBMOSh0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP0s2OiQ2KSh0LGUpKX19O3ZhciBQOT0wO2Z1bmN0aW9uIE45KCl7cmV0dXJuIG5ldyBJOX1mdW5jdGlvbiBJOSgpe3RoaXMuXz0iQCIrKCsrUDkpLnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBSOSgpe2Zvcih2YXIgdCxlPVU2O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIE85KHQsZSl7dmFyIG49dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYobi5jcmVhdGVTVkdQb2ludCl7dmFyIGk9bi5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBpLng9ZS5jbGllbnRYLGkueT1lLmNsaWVudFksWyhpPWkubWF0cml4VHJhbnNmb3JtKHQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxpLnldfXZhciByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2UuY2xpZW50WC1yLmxlZnQtdC5jbGllbnRMZWZ0LGUuY2xpZW50WS1yLnRvcC10LmNsaWVudFRvcF19STkucHJvdG90eXBlPU45LnByb3RvdHlwZT17Y29uc3RydWN0b3I6STksZ2V0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl87IShlIGluIHQpOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHRbZV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0W3RoaXMuX109ZX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl8gaW4gdCYmZGVsZXRlIHRbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIHo5PU1hdGguUEksRDk9Mip6OSxCOT0xZS02LEg5PUQ5LUI5O2Z1bmN0aW9uIEY5KCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gVjkoKXtyZXR1cm4gbmV3IEY5fWZ1bmN0aW9uIFU5KHQpe3JldHVybiBmdW5jdGlvbiBlKCl7cmV0dXJuIHR9fUY5LnByb3RvdHlwZT1WOS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkY5LG1vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStlKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArZSsiLCIrKHRoaXMuX3gxPStuKSsiLCIrKHRoaXMuX3kxPStpKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpLHIsbyl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArbisiLCIrICtpKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LGUsbixpLHIpe3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz0obj0rbiktKHQ9K3QpLGw9KGk9K2kpLShlPStlKSxjPW8tdCx1PWEtZSxoPWMqYyt1KnU7aWYoKHI9K3IpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2UgaWYoaD5COSlpZihNYXRoLmFicyh1KnMtbCpjKT5COSYmcil7dmFyIGQ9bi1vLHA9aS1hLGY9cypzK2wqbCxtPWQqZCtwKnAsZz1NYXRoLnNxcnQoZiksXz1NYXRoLnNxcnQoaCkseT1yKk1hdGgudGFuKCh6OS1NYXRoLmFjb3MoKGYraC1tKS8oMipnKl8pKSkvMiksdj15L18sYj15L2c7TWF0aC5hYnModi0xKT5COSYmKHRoaXMuXys9IkwiKyh0K3YqYykrIiwiKyhlK3YqdSkpLHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDAsIisgKyh1KmQ+YypwKSsiLCIrKHRoaXMuX3gxPXQrYipzKSsiLCIrKHRoaXMuX3kxPWUrYipsKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpfSxhcmM6ZnVuY3Rpb24odCxlLG4saSxyLG8pe3Q9K3QsZT0rZSxvPSEhbzt2YXIgYT0obj0rbikqTWF0aC5jb3MoaSkscz1uKk1hdGguc2luKGkpLGw9dCthLGM9ZStzLHU9MV5vLGg9bz9pLXI6ci1pO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIituKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+Qjl8fE1hdGguYWJzKHRoaXMuX3kxLWMpPkI5KSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLG4mJihoPDAmJihoPWglRDkrRDkpLGg+SDk/dGhpcy5fKz0iQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0LWEpKyIsIisoZS1zKSsiQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0aGlzLl94MT1sKSsiLCIrKHRoaXMuX3kxPWMpOmg+QjkmJih0aGlzLl8rPSJBIituKyIsIituKyIsMCwiKyArKGg+PXo5KSsiLCIrdSsiLCIrKHRoaXMuX3gxPXQrbipNYXRoLmNvcyhyKSkrIiwiKyh0aGlzLl95MT1lK24qTWF0aC5zaW4ocikpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtuKyJ2IisgK2krImgiKy1uKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIGo5PU1hdGguYWJzLEc5PU1hdGguYXRhbjIsVzk9TWF0aC5jb3MscTk9TWF0aC5tYXgsWTk9TWF0aC5taW4sWDk9TWF0aC5zaW4sJDk9TWF0aC5zcXJ0LEs5PTFlLTEyLFo5PU1hdGguUEksSjk9WjkvMixROT0yKlo5O2Z1bmN0aW9uIHQ4KHQpe3JldHVybiB0PjE/MDp0PC0xP1o5Ok1hdGguYWNvcyh0KX1mdW5jdGlvbiBlOCh0KXtyZXR1cm4gdD49MT9KOTp0PD0tMT8tSjk6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIG44KHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIGk4KHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIHI4KHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gbzgodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gYTgodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gczgodCxlLG4saSxyLG8sYSxzKXt2YXIgbD1uLXQsYz1pLWUsdT1hLXIsaD1zLW8sZD0odSooZS1vKS1oKih0LXIpKS8oaCpsLXUqYyk7cmV0dXJuW3QrZCpsLGUrZCpjXX1mdW5jdGlvbiBsOCh0LGUsbixpLHIsbyxhKXt2YXIgcz10LW4sbD1lLWksYz0oYT9vOi1vKS8kOShzKnMrbCpsKSx1PWMqbCxoPS1jKnMsZD10K3UscD1lK2gsZj1uK3UsbT1pK2gsZz0oZCtmKS8yLF89KHArbSkvMix5PWYtZCx2PW0tcCxiPXkqeSt2KnYseD1yLW8sdz1kKm0tZipwLFM9KHY8MD8tMToxKSokOShxOSgwLHgqeCpiLXcqdykpLE09KHcqdi15KlMpL2IsRT0oLXcqeS12KlMpL2IsVD0odyp2K3kqUykvYixDPSgtdyp5K3YqUykvYixBPU0tZyxrPUUtXyxMPVQtZyxQPUMtXztyZXR1cm4gQSpBK2sqaz5MKkwrUCpQJiYoTT1ULEU9Qykse2N4Ok0sY3k6RSx4MDE6LXUseTAxOi1oLHgxMTpNKihyL3gtMSkseTExOkUqKHIveC0xKX19ZnVuY3Rpb24gYzgodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHU4KHQpe3JldHVybiBuZXcgYzgodCl9ZnVuY3Rpb24gaDgodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gZDgodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gcDgoKXt2YXIgdD1oOCxlPWQ4LG49VTkoITApLGk9bnVsbCxyPXU4LG89bnVsbDtmdW5jdGlvbiBhKGEpe3ZhciBzLGwsYyx1PWEubGVuZ3RoLGg9ITE7Zm9yKG51bGw9PWkmJihvPXIoYz1WOSgpKSkscz0wO3M8PXU7KytzKSEoczx1JiZuKGw9YVtzXSxzLGEpKT09PWgmJigoaD0haCk/by5saW5lU3RhcnQoKTpvLmxpbmVFbmQoKSksaCYmby5wb2ludCgrdChsLHMsYSksK2UobCxzLGEpKTtpZihjKXJldHVybiBvPW51bGwsYysiInx8bnVsbH1yZXR1cm4gYS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6VTkoK2UpLGEpOnR9LGEueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlU5KCt0KSxhKTplfSxhLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpVOSghIXQpLGEpOm59LGEuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxudWxsIT1pJiYobz1yKGkpKSxhKTpyfSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/aT1vPW51bGw6bz1yKGk9dCksYSk6aX0sYX1mdW5jdGlvbiBmOCgpe3ZhciB0PWg4LGU9bnVsbCxuPVU5KDApLGk9ZDgscj1VOSghMCksbz1udWxsLGE9dTgscz1udWxsO2Z1bmN0aW9uIGwobCl7dmFyIGMsdSxoLGQscCxmPWwubGVuZ3RoLG09ITEsZz1uZXcgQXJyYXkoZiksXz1uZXcgQXJyYXkoZik7Zm9yKG51bGw9PW8mJihzPWEocD1WOSgpKSksYz0wO2M8PWY7KytjKXtpZighKGM8ZiYmcihkPWxbY10sYyxsKSk9PT1tKWlmKG09IW0pdT1jLHMuYXJlYVN0YXJ0KCkscy5saW5lU3RhcnQoKTtlbHNle2ZvcihzLmxpbmVFbmQoKSxzLmxpbmVTdGFydCgpLGg9Yy0xO2g+PXU7LS1oKXMucG9pbnQoZ1toXSxfW2hdKTtzLmxpbmVFbmQoKSxzLmFyZWFFbmQoKX1tJiYoZ1tjXT0rdChkLGMsbCksX1tjXT0rbihkLGMsbCkscy5wb2ludChlPytlKGQsYyxsKTpnW2NdLGk/K2koZCxjLGwpOl9bY10pKX1pZihwKXJldHVybiBzPW51bGwscCsiInx8bnVsbH1mdW5jdGlvbiBjKCl7cmV0dXJuIHA4KCkuZGVmaW5lZChyKS5jdXJ2ZShhKS5jb250ZXh0KG8pfXJldHVybiBsLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpVOSgrbiksZT1udWxsLGwpOnR9LGwueDA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpVOSgrZSksbCk6dH0sbC54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpVOSgrdCksbCk6ZX0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VTkoK3QpLGk9bnVsbCxsKTpufSxsLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VTkoK3QpLGwpOm59LGwueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VTkoK3QpLGwpOml9LGwubGluZVgwPWwubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIGMoKS54KHQpLnkobil9LGwubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIGMoKS54KHQpLnkoaSl9LGwubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIGMoKS54KGUpLnkobil9LGwuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlU5KCEhdCksbCk6cn0sbC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LG51bGwhPW8mJihzPWEobykpLGwpOmF9LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9vPXM9bnVsbDpzPWEobz10KSxsKTpvfSxsfWZ1bmN0aW9uIG04KHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfWZ1bmN0aW9uIGc4KHQpe3JldHVybiB0fWM4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpfX19O3ZhciBfOD12OCh1OCk7ZnVuY3Rpb24geTgodCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiB2OCh0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgeTgodChlKSl9cmV0dXJuIGUuX2N1cnZlPXQsZX1mdW5jdGlvbiBiOCh0KXt2YXIgZT10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZSh2OCh0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiB4OCgpe3JldHVybiBiOChwOCgpLmN1cnZlKF84KSl9ZnVuY3Rpb24gdzgoKXt2YXIgdD1mOCgpLmN1cnZlKF84KSxlPXQuY3VydmUsbj10LmxpbmVYMCxpPXQubGluZVgxLHI9dC5saW5lWTAsbz10LmxpbmVZMTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnN0YXJ0QW5nbGU9dC54MCxkZWxldGUgdC54MCx0LmVuZEFuZ2xlPXQueDEsZGVsZXRlIHQueDEsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdC5pbm5lclJhZGl1cz10LnkwLGRlbGV0ZSB0LnkwLHQub3V0ZXJSYWRpdXM9dC55MSxkZWxldGUgdC55MSx0LmxpbmVTdGFydEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIGI4KG4oKSl9LGRlbGV0ZSB0LmxpbmVYMCx0LmxpbmVFbmRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBiOChpKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gYjgocigpKX0sZGVsZXRlIHQubGluZVkwLHQubGluZU91dGVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIGI4KG8oKSl9LGRlbGV0ZSB0LmxpbmVZMSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UodjgodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gUzgodCxlKXtyZXR1cm5bKGU9K2UpKk1hdGguY29zKHQtPU1hdGguUEkvMiksZSpNYXRoLnNpbih0KV19eTgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VydmUucG9pbnQoZSpNYXRoLnNpbih0KSxlKi1NYXRoLmNvcyh0KSl9fTt2YXIgTTg9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEU4KHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBUOCh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gQzgodCl7dmFyIGU9RTgsbj1UOCxpPWg4LHI9ZDgsbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgYSxzPU04LmNhbGwoYXJndW1lbnRzKSxsPWUuYXBwbHkodGhpcyxzKSxjPW4uYXBwbHkodGhpcyxzKTtpZihvfHwobz1hPVY5KCkpLHQobywraS5hcHBseSh0aGlzLChzWzBdPWwscykpLCtyLmFwcGx5KHRoaXMscyksK2kuYXBwbHkodGhpcywoc1swXT1jLHMpKSwrci5hcHBseSh0aGlzLHMpKSxhKXJldHVybiBvPW51bGwsYSsiInx8bnVsbH1yZXR1cm4gYS5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxhKTplfSxhLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGEpOm59LGEueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlU5KCt0KSxhKTppfSxhLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpVOSgrdCksYSk6cn0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW51bGw9PXQ/bnVsbDp0LGEpOm99LGF9ZnVuY3Rpb24gQTgodCxlLG4saSxyKXt0Lm1vdmVUbyhlLG4pLHQuYmV6aWVyQ3VydmVUbyhlPShlK2kpLzIsbixlLHIsaSxyKX1mdW5jdGlvbiBrOCh0LGUsbixpLHIpe3QubW92ZVRvKGUsbiksdC5iZXppZXJDdXJ2ZVRvKGUsbj0obityKS8yLGksbixpLHIpfWZ1bmN0aW9uIEw4KHQsZSxuLGkscil7dmFyIG89UzgoZSxuKSxhPVM4KGUsbj0obityKS8yKSxzPVM4KGksbiksbD1TOChpLHIpO3QubW92ZVRvKG9bMF0sb1sxXSksdC5iZXppZXJDdXJ2ZVRvKGFbMF0sYVsxXSxzWzBdLHNbMV0sbFswXSxsWzFdKX12YXIgUDg9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZS9aOSk7dC5tb3ZlVG8obiwwKSx0LmFyYygwLDAsbiwwLFE5KX19LE44PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvNSkvMjt0Lm1vdmVUbygtMypuLC1uKSx0LmxpbmVUbygtbiwtbiksdC5saW5lVG8oLW4sLTMqbiksdC5saW5lVG8obiwtMypuKSx0LmxpbmVUbyhuLC1uKSx0LmxpbmVUbygzKm4sLW4pLHQubGluZVRvKDMqbixuKSx0LmxpbmVUbyhuLG4pLHQubGluZVRvKG4sMypuKSx0LmxpbmVUbygtbiwzKm4pLHQubGluZVRvKC1uLG4pLHQubGluZVRvKC0zKm4sbiksdC5jbG9zZVBhdGgoKX19LEk4PU1hdGguc3FydCgxLzMpLFI4PTIqSTgsTzg9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZS9SOCksaT1uKkk4O3QubW92ZVRvKDAsLW4pLHQubGluZVRvKGksMCksdC5saW5lVG8oMCxuKSx0LmxpbmVUbygtaSwwKSx0LmNsb3NlUGF0aCgpfX0sejg9TWF0aC5zaW4oWjkvMTApL01hdGguc2luKDcqWjkvMTApLEQ4PU1hdGguc2luKFE5LzEwKSp6OCxCOD0tTWF0aC5jb3MoUTkvMTApKno4LEg4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KC44OTA4MTMwOTE1MjkyODUyKmUpLGk9RDgqbixyPUI4Km47dC5tb3ZlVG8oMCwtbiksdC5saW5lVG8oaSxyKTtmb3IodmFyIG89MTtvPDU7KytvKXt2YXIgYT1ROSpvLzUscz1NYXRoLmNvcyhhKSxsPU1hdGguc2luKGEpO3QubGluZVRvKGwqbiwtcypuKSx0LmxpbmVUbyhzKmktbCpyLGwqaStzKnIpfXQuY2xvc2VQYXRoKCl9fSxGOD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlKSxpPS1uLzI7dC5yZWN0KGksaSxuLG4pfX0sVjg9TWF0aC5zcXJ0KDMpLFU4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49LU1hdGguc3FydChlLygzKlY4KSk7dC5tb3ZlVG8oMCwyKm4pLHQubGluZVRvKC1WOCpuLC1uKSx0LmxpbmVUbyhWOCpuLC1uKSx0LmNsb3NlUGF0aCgpfX0sajg9LS41LEc4PU1hdGguc3FydCgzKS8yLFc4PTEvTWF0aC5zcXJ0KDEyKSxxOD0zKihXOC8yKzEpLFk4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvcTgpLGk9bi8yLHI9bipXOCxvPWksYT1uKlc4K24scz0tbyxsPWE7dC5tb3ZlVG8oaSxyKSx0LmxpbmVUbyhvLGEpLHQubGluZVRvKHMsbCksdC5saW5lVG8oajgqaS1HOCpyLEc4KmkrajgqciksdC5saW5lVG8oajgqby1HOCphLEc4Km8rajgqYSksdC5saW5lVG8oajgqcy1HOCpsLEc4KnMrajgqbCksdC5saW5lVG8oajgqaStHOCpyLGo4KnItRzgqaSksdC5saW5lVG8oajgqbytHOCphLGo4KmEtRzgqbyksdC5saW5lVG8oajgqcytHOCpsLGo4KmwtRzgqcyksdC5jbG9zZVBhdGgoKX19LFg4PVtQOCxOOCxPOCxGOCxIOCxVOCxZOF07ZnVuY3Rpb24gJDgoKXt9ZnVuY3Rpb24gSzgodCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStlKS82LCh0Ll95MCs0KnQuX3kxK24pLzYpfWZ1bmN0aW9uIFo4KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBKOCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gUTgodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHQ3KHQsZSl7dGhpcy5fYmFzaXM9bmV3IFo4KHQpLHRoaXMuX2JldGE9ZX1aOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOks4KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0Oks4KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxKOC5wcm90b3R5cGU9e2FyZWFTdGFydDokOCxhcmVhRW5kOiQ4LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPXQsdGhpcy5feTI9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9dCx0aGlzLl95ND1lLHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNik7YnJlYWs7ZGVmYXVsdDpLOCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0sUTgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIG49KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixpPSh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhuLGkpOnRoaXMuX2NvbnRleHQubW92ZVRvKG4saSk7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpLOCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0sdDcucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoLTE7aWYobj4wKWZvcih2YXIgaSxyPXRbMF0sbz1lWzBdLGE9dFtuXS1yLHM9ZVtuXS1vLGw9LTE7KytsPD1uOyl0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbbF0rKDEtdGhpcy5fYmV0YSkqKHIrKGk9bC9uKSphKSx0aGlzLl9iZXRhKmVbbF0rKDEtdGhpcy5fYmV0YSkqKG8raSpzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19O3ZhciBlNz0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxPT09ZT9uZXcgWjgodCk6bmV3IHQ3KHQsZSl9cmV0dXJuIG4uYmV0YT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KSguODUpO2Z1bmN0aW9uIG43KHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1uKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gaTcodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWk3LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpuNyh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6bjcodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciByNz0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgaTcodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0pKDApO2Z1bmN0aW9uIG83KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1vNy5wcm90b3R5cGU9e2FyZWFTdGFydDokOCxhcmVhRW5kOiQ4LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6bjcodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBhNz0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgbzcodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0pKDApO2Z1bmN0aW9uIHM3KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1zNy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpuNyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIGw3PShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBzNyh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoMCk7ZnVuY3Rpb24gYzcodCxlLG4pe3ZhciBpPXQuX3gxLHI9dC5feTEsbz10Ll94MixhPXQuX3kyO2lmKHQuX2wwMV9hPks5KXt2YXIgcz0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSxsPTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtpPShpKnMtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvbCxyPShyKnMtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvbH1pZih0Ll9sMjNfYT5LOSl7dmFyIGM9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsdT0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7bz0obypjK3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvdSxhPShhKmMrdC5feTEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS91fXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhpLHIsbyxhLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiB1Nyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfXU3LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6YzcodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgaDc9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgdTcodCxlKTpuZXcgaTcodCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KSguNSk7ZnVuY3Rpb24gZDcodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1kNy5wcm90b3R5cGU9e2FyZWFTdGFydDokOCxhcmVhRW5kOiQ4LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OmM3KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIHA3PShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IGQ3KHQsZSk6bmV3IG83KHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoLjUpO2Z1bmN0aW9uIGY3KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9ZjcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmM3KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIG03PShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IGY3KHQsZSk6bmV3IHM3KHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSkoLjUpO2Z1bmN0aW9uIGc3KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBfNyh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24geTcodCxlLG4pe3ZhciBpPXQuX3gxLXQuX3gwLHI9ZS10Ll94MSxvPSh0Ll95MS10Ll95MCkvKGl8fHI8MCYmLTApLGE9KG4tdC5feTEpLyhyfHxpPDAmJi0wKSxzPShvKnIrYSppKS8oaStyKTtyZXR1cm4oXzcobykrXzcoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiB2Nyh0LGUpe3ZhciBuPXQuX3gxLXQuX3gwO3JldHVybiBuPygzKih0Ll95MS10Ll95MCkvbi1lKS8yOmV9ZnVuY3Rpb24gYjcodCxlLG4pe3ZhciBpPXQuX3gwLHI9dC5feDEsbz10Ll95MSxhPShyLWkpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGkrYSx0Ll95MCthKmUsci1hLG8tYSpuLHIsbyl9ZnVuY3Rpb24geDcodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHc3KHQpe3RoaXMuX2NvbnRleHQ9bmV3IFM3KHQpfWZ1bmN0aW9uIFM3KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBNNyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gRTcodCl7dmFyIGUsbixpPXQubGVuZ3RoLTEscj1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkoaSk7Zm9yKHJbMF09MCxvWzBdPTIsYVswXT10WzBdKzIqdFsxXSxlPTE7ZTxpLTE7KytlKXJbZV09MSxvW2VdPTQsYVtlXT00KnRbZV0rMip0W2UrMV07Zm9yKHJbaS0xXT0yLG9baS0xXT03LGFbaS0xXT04KnRbaS0xXSt0W2ldLGU9MTtlPGk7KytlKW9bZV0tPW49cltlXS9vW2UtMV0sYVtlXS09biphW2UtMV07Zm9yKHJbaS0xXT1hW2ktMV0vb1tpLTFdLGU9aS0yO2U+PTA7LS1lKXJbZV09KGFbZV0tcltlKzFdKS9vW2VdO2ZvcihvW2ktMV09KHRbaV0rcltpLTFdKS8yLGU9MDtlPGktMTsrK2Upb1tlXT0yKnRbZSsxXS1yW2UrMV07cmV0dXJuW3Isb119ZnVuY3Rpb24gVDcodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1lfWZ1bmN0aW9uIEM3KHQsZSl7aWYoKHI9dC5sZW5ndGgpPjEpZm9yKHZhciBuLGkscixvPTEsYT10W2VbMF1dLHM9YS5sZW5ndGg7bzxyOysrbylmb3IoaT1hLGE9dFtlW29dXSxuPTA7bjxzOysrbilhW25dWzFdKz1hW25dWzBdPWlzTmFOKGlbbl1bMV0pP2lbbl1bMF06aVtuXVsxXX1mdW5jdGlvbiBBNyh0KXtmb3IodmFyIGU9dC5sZW5ndGgsbj1uZXcgQXJyYXkoZSk7LS1lPj0wOyluW2VdPWU7cmV0dXJuIG59ZnVuY3Rpb24gazcodCxlKXtyZXR1cm4gdFtlXX1mdW5jdGlvbiBMNyh0KXt2YXIgZT10Lm1hcChQNyk7cmV0dXJuIEE3KHQpLnNvcnQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGVbdF0tZVtuXX0pKX1mdW5jdGlvbiBQNyh0KXtmb3IodmFyIGUsbj0wLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspKGU9K3RbaV1bMV0pJiYobis9ZSk7cmV0dXJuIG59ZzcucHJvdG90eXBlPXthcmVhU3RhcnQ6JDgsYXJlYUVuZDokOCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dD0rdCxlPStlLHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSl9fSx4Ny5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6YjcodGhpcyx0aGlzLl90MCx2Nyh0aGlzLHRoaXMuX3QwKSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3ZhciBuPU5hTjtpZihlPStlLCh0PSt0KSE9PXRoaXMuX3gxfHxlIT09dGhpcy5feTEpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsYjcodGhpcyx2Nyh0aGlzLG49eTcodGhpcyx0LGUpKSxuKTticmVhaztkZWZhdWx0OmI3KHRoaXMsdGhpcy5fdDAsbj15Nyh0aGlzLHQsZSkpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZSx0aGlzLl90MD1ufX19LCh3Ny5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4Ny5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbih0LGUpe3g3LnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsZSx0KX0sUzcucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLGkscixvKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oZSx0LGksbixvLHIpfX0sTTcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3ksbj10Lmxlbmd0aDtpZihuKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxlWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLGVbMF0pLDI9PT1uKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sZVsxXSk7ZWxzZSBmb3IodmFyIGk9RTcodCkscj1FNyhlKSxvPTAsYT0xO2E8bjsrK28sKythKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhpWzBdW29dLHJbMF1bb10saVsxXVtvXSxyWzFdW29dLHRbYV0sZVthXSk7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09bikmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX0sVDcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD10aGlzLl95PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MDx0aGlzLl90JiZ0aGlzLl90PDEmJjI9PT10aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0aGlzLl95KSwodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT49MCYmKHRoaXMuX3Q9MS10aGlzLl90LHRoaXMuX2xpbmU9MS10aGlzLl9saW5lKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OmlmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxlKSx0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2Vsc2V7dmFyIG49dGhpcy5feCooMS10aGlzLl90KSt0KnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8obix0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhuLGUpfX10aGlzLl94PXQsdGhpcy5feT1lfX07dmFyIE43PW5ldyBEYXRlLEk3PW5ldyBEYXRlO2Z1bmN0aW9uIFI3KHQsZSxuLGkpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZSgrZSkpLGV9cmV0dXJuIHIuZmxvb3I9cixyLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxyLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCksbj1yLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxyLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxyLnJhbmdlPWZ1bmN0aW9uKG4saSxvKXt2YXIgYSxzPVtdO2lmKG49ci5jZWlsKG4pLG89bnVsbD09bz8xOk1hdGguZmxvb3IobyksIShuPGkmJm8+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKGE9bmV3IERhdGUoK24pKSxlKG4sbyksdChuKX13aGlsZShhPG4mJm48aSk7cmV0dXJuIHN9LHIuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiBSNygoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQsaSl7aWYodD49dClpZihpPDApZm9yKDsrK2k8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLWk+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoci5jb3VudD1mdW5jdGlvbihlLGkpe3JldHVybiBONy5zZXRUaW1lKCtlKSxJNy5zZXRUaW1lKCtpKSx0KE43KSx0KEk3KSxNYXRoLmZsb29yKG4oTjcsSTcpKX0sci5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIHIuY291bnQoMCxlKSV0PT0wfSk6cjpudWxsfSkscn12YXIgTzc9UjcoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0pKTtPNy5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP1I3KChmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL3QpKnQpfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRUaW1lKCtlK24qdCl9KSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4obi1lKS90fSkpOk83Om51bGx9O3ZhciB6Nz1PNy5yYW5nZSxENz0xZTMsQjc9NmU0LEg3PTM2ZTUsRjc9ODY0ZTUsVjc9NjA0OGU1LFU3PVI3KChmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L0Q3KSpENyl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpENyl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9EN30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSksajc9VTcucmFuZ2UsRzc9UjcoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvQjcpKkI3KX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKkI3KX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL0I3fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKSxXNz1HNy5yYW5nZSxxNz1SNygoZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpKkI3JUg3O2U8MCYmKGUrPUg3KSx0LnNldFRpbWUoTWF0aC5mbG9vcigoK3QtZSkvSDcpKkg3K2UpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqSDcpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvSDd9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pKSxZNz1xNy5yYW5nZSxYNz1SNygoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKkI3KS9GN30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pKSwkNz1YNy5yYW5nZTtmdW5jdGlvbiBLNyh0KXtyZXR1cm4gUjcoKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKkI3KS9WN30pKX12YXIgWjc9SzcoMCksSjc9SzcoMSksUTc9SzcoMiksdHR0PUs3KDMpLGV0dD1LNyg0KSxudHQ9SzcoNSksaXR0PUs3KDYpLHJ0dD1aNy5yYW5nZSxvdHQ9SjcucmFuZ2UsYXR0PVE3LnJhbmdlLHN0dD10dHQucmFuZ2UsbHR0PWV0dC5yYW5nZSxjdHQ9bnR0LnJhbmdlLHV0dD1pdHQucmFuZ2UsaHR0PVI3KChmdW5jdGlvbih0KXt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSksZHR0PWh0dC5yYW5nZSxwdHQ9UjcoKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO3B0dC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP1I3KChmdW5jdGlvbihlKXtlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRGdWxsWWVhcigpL3QpKnQpLGUuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrbip0KX0pKTpudWxsfTt2YXIgZnR0PXB0dC5yYW5nZSxtdHQ9UjcoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDU2Vjb25kcygwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqQjcpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvQjd9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWludXRlcygpfSkpLGd0dD1tdHQucmFuZ2UsX3R0PVI3KChmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqSDcpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvSDd9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pKSx5dHQ9X3R0LnJhbmdlLHZ0dD1SNygoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL0Y3fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSkpLGJ0dD12dHQucmFuZ2U7ZnVuY3Rpb24geHR0KHQpe3JldHVybiBSNygoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpLShlLmdldFVUQ0RheSgpKzctdCklNyksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvVjd9KSl9dmFyIHd0dD14dHQoMCksU3R0PXh0dCgxKSxNdHQ9eHR0KDIpLEV0dD14dHQoMyksVHR0PXh0dCg0KSxDdHQ9eHR0KDUpLEF0dD14dHQoNiksa3R0PXd0dC5yYW5nZSxMdHQ9U3R0LnJhbmdlLFB0dD1NdHQucmFuZ2UsTnR0PUV0dC5yYW5nZSxJdHQ9VHR0LnJhbmdlLFJ0dD1DdHQucmFuZ2UsT3R0PUF0dC5yYW5nZSx6dHQ9UjcoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSgxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENNb250aCh0LmdldFVUQ01vbnRoKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENNb250aCgpLXQuZ2V0VVRDTW9udGgoKSsxMiooZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTW9udGgoKX0pKSxEdHQ9enR0LnJhbmdlLEJ0dD1SNygoZnVuY3Rpb24odCl7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCl9KSk7QnR0LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/UjcoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSkpOm51bGx9O3ZhciBIdHQ9QnR0LnJhbmdlLEZ0dD1uZXcgRGF0ZSxWdHQ9bmV3IERhdGU7ZnVuY3Rpb24gVXR0KHQsZSxuLGkpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHQoZT0wPT09YXJndW1lbnRzLmxlbmd0aD9uZXcgRGF0ZTpuZXcgRGF0ZSgrZSkpLGV9cmV0dXJuIHIuZmxvb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZSgrZSkpLGV9LHIuY2VpbD1mdW5jdGlvbihuKXtyZXR1cm4gdChuPW5ldyBEYXRlKG4tMSkpLGUobiwxKSx0KG4pLG59LHIucm91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9cih0KSxuPXIuY2VpbCh0KTtyZXR1cm4gdC1lPG4tdD9lOm59LHIub2Zmc2V0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodD1uZXcgRGF0ZSgrdCksbnVsbD09bj8xOk1hdGguZmxvb3IobikpLHR9LHIucmFuZ2U9ZnVuY3Rpb24obixpLG8pe3ZhciBhLHM9W107aWYobj1yLmNlaWwobiksbz1udWxsPT1vPzE6TWF0aC5mbG9vcihvKSwhKG48aSYmbz4wKSlyZXR1cm4gcztkb3tzLnB1c2goYT1uZXcgRGF0ZSgrbikpLGUobixvKSx0KG4pfXdoaWxlKGE8biYmbjxpKTtyZXR1cm4gc30sci5maWx0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIFV0dCgoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQsaSl7aWYodD49dClpZihpPDApZm9yKDsrK2k8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLWk+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoci5jb3VudD1mdW5jdGlvbihlLGkpe3JldHVybiBGdHQuc2V0VGltZSgrZSksVnR0LnNldFRpbWUoK2kpLHQoRnR0KSx0KFZ0dCksTWF0aC5mbG9vcihuKEZ0dCxWdHQpKX0sci5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIHIuY291bnQoMCxlKSV0PT0wfSk6cjpudWxsfSkscn12YXIganR0PTg2NGU1LEd0dD02MDQ4ZTUsV3R0PVV0dCgoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkvanR0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSkpO2Z1bmN0aW9uIHF0dCh0KXtyZXR1cm4gVXR0KChmdW5jdGlvbihlKXtlLnNldERhdGUoZS5nZXREYXRlKCktKGUuZ2V0RGF5KCkrNy10KSU3KSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LTZlNCooZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkpL0d0dH0pKX12YXIgWXR0PXF0dCgwKSxYdHQ9cXR0KDEpO3F0dCgyKSxxdHQoMyk7dmFyICR0dD1xdHQoNCk7cXR0KDUpLHF0dCg2KTt2YXIgS3R0PVV0dCgoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7S3R0LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/VXR0KChmdW5jdGlvbihlKXtlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRGdWxsWWVhcigpL3QpKnQpLGUuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrbip0KX0pKTpudWxsfTt2YXIgWnR0PUt0dCxKdHQ9VXR0KChmdW5jdGlvbih0KXt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvanR0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSkpO2Z1bmN0aW9uIFF0dCh0KXtyZXR1cm4gVXR0KChmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9HdHR9KSl9dmFyIHRldD1RdHQoMCksZWV0PVF0dCgxKTtRdHQoMiksUXR0KDMpO3ZhciBuZXQ9UXR0KDQpO1F0dCg1KSxRdHQoNik7dmFyIGlldD1VdHQoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSkpO2lldC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP1V0dCgoZnVuY3Rpb24oZSl7ZS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0VVRDRnVsbFllYXIoKS90KSp0KSxlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK24qdCl9KSk6bnVsbH07dmFyIHJldD1pZXQ7ZnVuY3Rpb24gb2V0KHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpO3JldHVybiBlLnNldEZ1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUodC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKX1mdW5jdGlvbiBhZXQodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gc2V0KHQpe3JldHVybnt5OnQsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIGNldCh0KXt2YXIgZT10LmRhdGVUaW1lLG49dC5kYXRlLGk9dC50aW1lLHI9dC5wZXJpb2RzLG89dC5kYXlzLGE9dC5zaG9ydERheXMscz10Lm1vbnRocyxsPXQuc2hvcnRNb250aHMsYz14ZXQociksdT13ZXQociksaD14ZXQobyksZD13ZXQobykscD14ZXQoYSksZj13ZXQoYSksbT14ZXQocyksZz13ZXQocyksXz14ZXQobCkseT13ZXQobCksdj17YTpmdW5jdGlvbiBiKHQpe3JldHVybiBhW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uIHgodCl7cmV0dXJuIG9bdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24gdyh0KXtyZXR1cm4gbFt0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uIFModCl7cmV0dXJuIHNbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6amV0LGU6amV0LGY6WGV0LEg6R2V0LEk6V2V0LGo6cWV0LEw6WWV0LG06JGV0LE06S2V0LHA6ZnVuY3Rpb24gTSh0KXtyZXR1cm4gclsrKHQuZ2V0SG91cnMoKT49MTIpXX0sUTpNbnQsczpFbnQsUzpaZXQsdTpKZXQsVTpRZXQsVjp0bnQsdzplbnQsVzpubnQseDpudWxsLFg6bnVsbCx5OmludCxZOnJudCxaOm9udCwiJSI6U250fSxFPXthOmZ1bmN0aW9uIFQodCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24gQyh0KXtyZXR1cm4gb1t0LmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbiBBKHQpe3JldHVybiBsW3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24gayh0KXtyZXR1cm4gc1t0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDphbnQsZTphbnQsZjpobnQsSDpzbnQsSTpsbnQsajpjbnQsTDp1bnQsbTpkbnQsTTpwbnQscDpmdW5jdGlvbiBMKHQpe3JldHVybiByWysodC5nZXRVVENIb3VycygpPj0xMildfSxROk1udCxzOkVudCxTOmZudCx1Om1udCxVOmdudCxWOl9udCx3OnludCxXOnZudCx4Om51bGwsWDpudWxsLHk6Ym50LFk6eG50LFo6d250LCIlIjpTbnR9LFA9e2E6ZnVuY3Rpb24gTih0LGUsbil7dmFyIGk9cC5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0Lnc9ZltpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uIEkodCxlLG4pe3ZhciBpPWguZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC53PWRbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbiBSKHQsZSxuKXt2YXIgaT1fLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQubT15W2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24gTyh0LGUsbil7dmFyIGk9bS5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0Lm09Z1tpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uIHoodCxuLGkpe3JldHVybiBVKHQsZSxuLGkpfSxkOklldCxlOklldCxmOkhldCxIOk9ldCxJOk9ldCxqOlJldCxMOkJldCxtOk5ldCxNOnpldCxwOmZ1bmN0aW9uIEQodCxlLG4pe3ZhciBpPWMuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5wPXVbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sUTpWZXQsczpVZXQsUzpEZXQsdTpFZXQsVTpUZXQsVjpDZXQsdzpNZXQsVzpBZXQseDpmdW5jdGlvbiBCKHQsZSxpKXtyZXR1cm4gVSh0LG4sZSxpKX0sWDpmdW5jdGlvbiBIKHQsZSxuKXtyZXR1cm4gVSh0LGksZSxuKX0seTpMZXQsWTprZXQsWjpQZXQsIiUiOkZldH07ZnVuY3Rpb24gRih0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaSxyLG8sYT1bXSxzPS0xLGw9MCxjPXQubGVuZ3RoO2ZvcihuIGluc3RhbmNlb2YgRGF0ZXx8KG49bmV3IERhdGUoK24pKTsrK3M8YzspMzc9PT10LmNoYXJDb2RlQXQocykmJihhLnB1c2godC5zbGljZShsLHMpKSxudWxsIT0ocj1tZXRbaT10LmNoYXJBdCgrK3MpXSk/aT10LmNoYXJBdCgrK3MpOnI9ImUiPT09aT8iICI6IjAiLChvPWVbaV0pJiYoaT1vKG4scikpLGEucHVzaChpKSxsPXMrMSk7cmV0dXJuIGEucHVzaCh0LnNsaWNlKGwscykpLGEuam9pbigiIil9fWZ1bmN0aW9uIFYodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGkscixvPXNldCgxOTAwKTtpZihVKG8sdCxuKz0iIiwwKSE9bi5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gbylyZXR1cm4gbmV3IERhdGUoby5RKTtpZigicCJpbiBvJiYoby5IPW8uSCUxMisxMipvLnApLCJWImluIG8pe2lmKG8uVjwxfHxvLlY+NTMpcmV0dXJuIG51bGw7InciaW4gb3x8KG8udz0xKSwiWiJpbiBvPyhyPShpPWFldChzZXQoby55KSkpLmdldFVUQ0RheSgpLGk9cj40fHwwPT09cj9lZXQuY2VpbChpKTplZXQoaSksaT1KdHQub2Zmc2V0KGksNyooby5WLTEpKSxvLnk9aS5nZXRVVENGdWxsWWVhcigpLG8ubT1pLmdldFVUQ01vbnRoKCksby5kPWkuZ2V0VVRDRGF0ZSgpKyhvLncrNiklNyk6KHI9KGk9ZShzZXQoby55KSkpLmdldERheSgpLGk9cj40fHwwPT09cj9YdHQuY2VpbChpKTpYdHQoaSksaT1XdHQub2Zmc2V0KGksNyooby5WLTEpKSxvLnk9aS5nZXRGdWxsWWVhcigpLG8ubT1pLmdldE1vbnRoKCksby5kPWkuZ2V0RGF0ZSgpKyhvLncrNiklNyl9ZWxzZSgiVyJpbiBvfHwiVSJpbiBvKSYmKCJ3ImluIG98fChvLnc9InUiaW4gbz9vLnUlNzoiVyJpbiBvPzE6MCkscj0iWiJpbiBvP2FldChzZXQoby55KSkuZ2V0VVRDRGF5KCk6ZShzZXQoby55KSkuZ2V0RGF5KCksby5tPTAsby5kPSJXImluIG8/KG8udys2KSU3Kzcqby5XLShyKzUpJTc6by53Kzcqby5VLShyKzYpJTcpO3JldHVybiJaImluIG8/KG8uSCs9by5aLzEwMHwwLG8uTSs9by5aJTEwMCxhZXQobykpOmUobyl9fWZ1bmN0aW9uIFUodCxlLG4saSl7Zm9yKHZhciByLG8sYT0wLHM9ZS5sZW5ndGgsbD1uLmxlbmd0aDthPHM7KXtpZihpPj1sKXJldHVybi0xO2lmKDM3PT09KHI9ZS5jaGFyQ29kZUF0KGErKykpKXtpZihyPWUuY2hhckF0KGErKyksIShvPVBbciBpbiBtZXQ/ZS5jaGFyQXQoYSsrKTpyXSl8fChpPW8odCxuLGkpKTwwKXJldHVybi0xfWVsc2UgaWYociE9bi5jaGFyQ29kZUF0KGkrKykpcmV0dXJuLTF9cmV0dXJuIGl9cmV0dXJuIHYueD1GKG4sdiksdi5YPUYoaSx2KSx2LmM9RihlLHYpLEUueD1GKG4sRSksRS5YPUYoaSxFKSxFLmM9RihlLEUpLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9Rih0Kz0iIix2KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1WKHQrPSIiLG9ldCk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjRm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPUYodCs9IiIsRSk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjUGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9Vih0LGFldCk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX19fXZhciB1ZXQsaGV0LGRldCxwZXQsZmV0LG1ldD17Ii0iOiIiLF86IiAiLDA6IjAifSxnZXQ9L15ccypcZCsvLF9ldD0vXiUvLHlldD0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gdmV0KHQsZSxuKXt2YXIgaT10PDA/Ii0iOiIiLHI9KGk/LXQ6dCkrIiIsbz1yLmxlbmd0aDtyZXR1cm4gaSsobzxuP25ldyBBcnJheShuLW8rMSkuam9pbihlKStyOnIpfWZ1bmN0aW9uIGJldCh0KXtyZXR1cm4gdC5yZXBsYWNlKHlldCwiXFwkJiIpfWZ1bmN0aW9uIHhldCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAoYmV0KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gd2V0KHQpe2Zvcih2YXIgZT17fSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KWVbdFtuXS50b0xvd2VyQ2FzZSgpXT1uO3JldHVybiBlfWZ1bmN0aW9uIE1ldCh0LGUsbil7dmFyIGk9Z2V0LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiBpPyh0Lnc9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRWV0KHQsZSxuKXt2YXIgaT1nZXQuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIGk/KHQudT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBUZXQodCxlLG4pe3ZhciBpPWdldC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5VPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIENldCh0LGUsbil7dmFyIGk9Z2V0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0LlY9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQWV0KHQsZSxuKXt2YXIgaT1nZXQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuVz0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrZXQodCxlLG4pe3ZhciBpPWdldC5leGVjKGUuc2xpY2UobixuKzQpKTtyZXR1cm4gaT8odC55PStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIExldCh0LGUsbil7dmFyIGk9Z2V0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Lnk9K2lbMF0rKCtpWzBdPjY4PzE5MDA6MmUzKSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQZXQodCxlLG4pe3ZhciBpPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gaT8odC5aPWlbMV0/MDotKGlbMl0rKGlbM118fCIwMCIpKSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBOZXQodCxlLG4pe3ZhciBpPWdldC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5tPWlbMF0tMSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJZXQodCxlLG4pe3ZhciBpPWdldC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5kPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJldCh0LGUsbil7dmFyIGk9Z2V0LmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiBpPyh0Lm09MCx0LmQ9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT2V0KHQsZSxuKXt2YXIgaT1nZXQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuSD0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB6ZXQodCxlLG4pe3ZhciBpPWdldC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5NPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIERldCh0LGUsbil7dmFyIGk9Z2V0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0LlM9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQmV0KHQsZSxuKXt2YXIgaT1nZXQuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIGk/KHQuTD0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBIZXQodCxlLG4pe3ZhciBpPWdldC5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gaT8odC5MPU1hdGguZmxvb3IoaVswXS8xZTMpLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEZldCh0LGUsbil7dmFyIGk9X2V0LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiBpP24raVswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gVmV0KHQsZSxuKXt2YXIgaT1nZXQuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5RPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFVldCh0LGUsbil7dmFyIGk9Z2V0LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQuUT0xZTMqK2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gamV0KHQsZSl7cmV0dXJuIHZldCh0LmdldERhdGUoKSxlLDIpfWZ1bmN0aW9uIEdldCh0LGUpe3JldHVybiB2ZXQodC5nZXRIb3VycygpLGUsMil9ZnVuY3Rpb24gV2V0KHQsZSl7cmV0dXJuIHZldCh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gcWV0KHQsZSl7cmV0dXJuIHZldCgxK1d0dC5jb3VudChadHQodCksdCksZSwzKX1mdW5jdGlvbiBZZXQodCxlKXtyZXR1cm4gdmV0KHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBYZXQodCxlKXtyZXR1cm4gWWV0KHQsZSkrIjAwMCJ9ZnVuY3Rpb24gJGV0KHQsZSl7cmV0dXJuIHZldCh0LmdldE1vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIEtldCh0LGUpe3JldHVybiB2ZXQodC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBaZXQodCxlKXtyZXR1cm4gdmV0KHQuZ2V0U2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gSmV0KHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBRZXQodCxlKXtyZXR1cm4gdmV0KFl0dC5jb3VudChadHQodCksdCksZSwyKX1mdW5jdGlvbiB0bnQodCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uPyR0dCh0KTokdHQuY2VpbCh0KSx2ZXQoJHR0LmNvdW50KFp0dCh0KSx0KSsoND09PVp0dCh0KS5nZXREYXkoKSksZSwyKX1mdW5jdGlvbiBlbnQodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gbm50KHQsZSl7cmV0dXJuIHZldChYdHQuY291bnQoWnR0KHQpLHQpLGUsMil9ZnVuY3Rpb24gaW50KHQsZSl7cmV0dXJuIHZldCh0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gcm50KHQsZSl7cmV0dXJuIHZldCh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gb250KHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZT4wPyItIjooZSo9LTEsIisiKSkrdmV0KGUvNjB8MCwiMCIsMikrdmV0KGUlNjAsIjAiLDIpfWZ1bmN0aW9uIGFudCh0LGUpe3JldHVybiB2ZXQodC5nZXRVVENEYXRlKCksZSwyKX1mdW5jdGlvbiBzbnQodCxlKXtyZXR1cm4gdmV0KHQuZ2V0VVRDSG91cnMoKSxlLDIpfWZ1bmN0aW9uIGxudCh0LGUpe3JldHVybiB2ZXQodC5nZXRVVENIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIGNudCh0LGUpe3JldHVybiB2ZXQoMStKdHQuY291bnQocmV0KHQpLHQpLGUsMyl9ZnVuY3Rpb24gdW50KHQsZSl7cmV0dXJuIHZldCh0LmdldFVUQ01pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gaG50KHQsZSl7cmV0dXJuIHVudCh0LGUpKyIwMDAifWZ1bmN0aW9uIGRudCh0LGUpe3JldHVybiB2ZXQodC5nZXRVVENNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBwbnQodCxlKXtyZXR1cm4gdmV0KHQuZ2V0VVRDTWludXRlcygpLGUsMil9ZnVuY3Rpb24gZm50KHQsZSl7cmV0dXJuIHZldCh0LmdldFVUQ1NlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIG1udCh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gZ250KHQsZSl7cmV0dXJuIHZldCh0ZXQuY291bnQocmV0KHQpLHQpLGUsMil9ZnVuY3Rpb24gX250KHQsZSl7dmFyIG49dC5nZXRVVENEYXkoKTtyZXR1cm4gdD1uPj00fHwwPT09bj9uZXQodCk6bmV0LmNlaWwodCksdmV0KG5ldC5jb3VudChyZXQodCksdCkrKDQ9PT1yZXQodCkuZ2V0VVRDRGF5KCkpLGUsMil9ZnVuY3Rpb24geW50KHQpe3JldHVybiB0LmdldFVUQ0RheSgpfWZ1bmN0aW9uIHZudCh0LGUpe3JldHVybiB2ZXQoZWV0LmNvdW50KHJldCh0KSx0KSxlLDIpfWZ1bmN0aW9uIGJudCh0LGUpe3JldHVybiB2ZXQodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIHhudCh0LGUpe3JldHVybiB2ZXQodC5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIHdudCgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gU250KCl7cmV0dXJuIiUifWZ1bmN0aW9uIE1udCh0KXtyZXR1cm4rdH1mdW5jdGlvbiBFbnQodCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX1mdW5jdGlvbiBUbnQodCl7cmV0dXJuIHVldD1jZXQodCksaGV0PXVldC5mb3JtYXQsZGV0PXVldC5wYXJzZSxwZXQ9dWV0LnV0Y0Zvcm1hdCxmZXQ9dWV0LnV0Y1BhcnNlLHVldH1UbnQoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgQ250LEFudCxrbnQ9IiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIsTG50PURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nP2Z1bmN0aW9uIFBudCh0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfTpwZXQoa250KSxObnQ9K25ldyBEYXRlKCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFoiKT9mdW5jdGlvbiBJbnQodCl7dmFyIGU9bmV3IERhdGUodCk7cmV0dXJuIGlzTmFOKGUpP251bGw6ZX06ZmV0KGtudCksUm50PTAsT250PTAsem50PTAsRG50PTAsQm50PTAsSG50PTAsRm50PSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLFZudD0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBVbnQoKXtyZXR1cm4gQm50fHwoVm50KGpudCksQm50PUZudC5ub3coKStIbnQpfWZ1bmN0aW9uIGpudCgpe0JudD0wfWZ1bmN0aW9uIEdudCgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gV250KHQsZSxuKXt2YXIgaT1uZXcgR250O3JldHVybiBpLnJlc3RhcnQodCxlLG4pLGl9ZnVuY3Rpb24gcW50KCl7VW50KCksKytSbnQ7Zm9yKHZhciB0LGU9Q250O2U7KSh0PUJudC1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0tUm50fWZ1bmN0aW9uIFludCgpe0JudD0oRG50PUZudC5ub3coKSkrSG50LFJudD1PbnQ9MDt0cnl7cW50KCl9ZmluYWxseXtSbnQ9MCwoZnVuY3Rpb24gdCgpe2Zvcih2YXIgdCxlLG49Q250LGk9MS8wO247KW4uX2NhbGw/KGk+bi5fdGltZSYmKGk9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTpDbnQ9ZSk7QW50PXQsJG50KGkpfSkoKSxCbnQ9MH19ZnVuY3Rpb24gWG50KCl7dmFyIHQ9Rm50Lm5vdygpLGU9dC1EbnQ7ZT4xZTMmJihIbnQtPWUsRG50PXQpfWZ1bmN0aW9uICRudCh0KXtSbnR8fChPbnQmJihPbnQ9Y2xlYXJUaW1lb3V0KE9udCkpLHQtQm50PjI0Pyh0PDEvMCYmKE9udD1zZXRUaW1lb3V0KFludCx0LUZudC5ub3coKS1IbnQpKSx6bnQmJih6bnQ9Y2xlYXJJbnRlcnZhbCh6bnQpKSk6KHpudHx8KERudD1GbnQubm93KCksem50PXNldEludGVydmFsKFhudCwxZTMpKSxSbnQ9MSxWbnQoWW50KSkpfUdudC5wcm90b3R5cGU9V250LnByb3RvdHlwZT17Y29uc3RydWN0b3I6R250LHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9VbnQoKTorbikrKG51bGw9PWU/MDorZSksdGhpcy5fbmV4dHx8QW50PT09dGhpc3x8KEFudD9BbnQuX25leHQ9dGhpczpDbnQ9dGhpcyxBbnQ9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9biwkbnQoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsJG50KCkpfX07dmFyIEtudD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsWm50PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpLbnQseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBKbnQodCl7dmFyIGU9dCs9IiIsbj1lLmluZGV4T2YoIjoiKTtyZXR1cm4gbj49MCYmInhtbG5zIiE9PShlPXQuc2xpY2UoMCxuKSkmJih0PXQuc2xpY2UobisxKSksWm50Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpabnRbZV0sbG9jYWw6dH06dH1mdW5jdGlvbiBRbnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1LbnQmJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PUtudD9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMobix0KX19ZnVuY3Rpb24gdGl0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGVpdCh0KXt2YXIgZT1KbnQodCk7cmV0dXJuKGUubG9jYWw/dGl0OlFudCkoZSl9ZnVuY3Rpb24gbml0KCl7fWZ1bmN0aW9uIGlpdCh0KXtyZXR1cm4gbnVsbD09dD9uaXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX1mdW5jdGlvbiByaXQoKXtyZXR1cm5bXX1mdW5jdGlvbiBvaXQodCl7cmV0dXJuIG51bGw9PXQ/cml0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19ZnVuY3Rpb24gYWl0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fWZ1bmN0aW9uIHNpdCh0KXtyZXR1cm4gbmV3IEFycmF5KHQubGVuZ3RoKX1mdW5jdGlvbiBsaXQodCxlKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPWV9ZnVuY3Rpb24gY2l0KHQsZSxuLGkscixvKXtmb3IodmFyIGEscz0wLGw9ZS5sZW5ndGgsYz1vLmxlbmd0aDtzPGM7KytzKShhPWVbc10pPyhhLl9fZGF0YV9fPW9bc10saVtzXT1hKTpuW3NdPW5ldyBsaXQodCxvW3NdKTtmb3IoO3M8bDsrK3MpKGE9ZVtzXSkmJihyW3NdPWEpfWZ1bmN0aW9uIHVpdCh0LGUsbixpLHIsbyxhKXt2YXIgcyxsLGMsdT17fSxoPWUubGVuZ3RoLGQ9by5sZW5ndGgscD1uZXcgQXJyYXkoaCk7Zm9yKHM9MDtzPGg7KytzKShsPWVbc10pJiYocFtzXT1jPSIkIithLmNhbGwobCxsLl9fZGF0YV9fLHMsZSksYyBpbiB1P3Jbc109bDp1W2NdPWwpO2ZvcihzPTA7czxkOysrcykobD11W2M9IiQiK2EuY2FsbCh0LG9bc10scyxvKV0pPyhpW3NdPWwsbC5fX2RhdGFfXz1vW3NdLHVbY109bnVsbCk6bltzXT1uZXcgbGl0KHQsb1tzXSk7Zm9yKHM9MDtzPGg7KytzKShsPWVbc10pJiZ1W3Bbc11dPT09bCYmKHJbc109bCl9ZnVuY3Rpb24gaGl0KHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIGRpdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gcGl0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gZml0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24gbWl0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIGdpdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gX2l0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbil9fWZ1bmN0aW9uIHlpdCh0KXtyZXR1cm4gdC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gdml0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIGJpdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fWZ1bmN0aW9uIHhpdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09aT90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxpLG4pfX1mdW5jdGlvbiB3aXQodCxlKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHx5aXQodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gU2l0KHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBNaXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIEVpdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX1mdW5jdGlvbiBUaXQodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIENpdCh0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBBaXQodCl9ZnVuY3Rpb24gQWl0KHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1UaXQodC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBraXQodCxlKXtmb3IodmFyIG49Q2l0KHQpLGk9LTEscj1lLmxlbmd0aDsrK2k8cjspbi5hZGQoZVtpXSl9ZnVuY3Rpb24gTGl0KHQsZSl7Zm9yKHZhciBuPUNpdCh0KSxpPS0xLHI9ZS5sZW5ndGg7KytpPHI7KW4ucmVtb3ZlKGVbaV0pfWZ1bmN0aW9uIFBpdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtraXQodGhpcyx0KX19ZnVuY3Rpb24gTml0KHQpe3JldHVybiBmdW5jdGlvbigpe0xpdCh0aGlzLHQpfX1mdW5jdGlvbiBJaXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXsoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/a2l0OkxpdCkodGhpcyx0KX19ZnVuY3Rpb24gUml0KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBPaXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiB6aXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIERpdCgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIEJpdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBIaXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBGaXQoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gVml0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gVWl0KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gaml0KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gR2l0KCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITEpLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBXaXQoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWxpdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmxpdCxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxBaXQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgcWl0PXt9O2Z1bmN0aW9uIFlpdCh0LGUsbil7cmV0dXJuIHQ9WGl0KHQsZSxuKSxmdW5jdGlvbihlKXt2YXIgbj1lLnJlbGF0ZWRUYXJnZXQ7biYmKG49PT10aGlzfHw4Jm4uY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpfHx0LmNhbGwodGhpcyxlKX19ZnVuY3Rpb24gWGl0KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dHJ5e3QuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxuKX1maW5hbGx5e319fWZ1bmN0aW9uICRpdCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiBLaXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX29uO2lmKGUpe2Zvcih2YXIgbixpPTAscj0tMSxvPWUubGVuZ3RoO2k8bzsrK2kpbj1lW2ldLHQudHlwZSYmbi50eXBlIT09dC50eXBlfHxuLm5hbWUhPT10Lm5hbWU/ZVsrK3JdPW46dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG4udHlwZSxuLmxpc3RlbmVyLG4uY2FwdHVyZSk7KytyP2UubGVuZ3RoPXI6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIFppdCh0LGUsbil7dmFyIGk9cWl0Lmhhc093blByb3BlcnR5KHQudHlwZSk/WWl0OlhpdDtyZXR1cm4gZnVuY3Rpb24ocixvLGEpe3ZhciBzLGw9dGhpcy5fX29uLGM9aShlLG8sYSk7aWYobClmb3IodmFyIHU9MCxoPWwubGVuZ3RoO3U8aDsrK3UpaWYoKHM9bFt1XSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9YyxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsYyxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOmMsY2FwdHVyZTpufSxsP2wucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiBKaXQodCxlLG4pe3ZhciBpPXlpdCh0KSxyPWkuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIHI/cj1uZXcgcihlLG4pOihyPWkuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iiksbj8oci5pbml0RXZlbnQoZSxuLmJ1YmJsZXMsbi5jYW5jZWxhYmxlKSxyLmRldGFpbD1uLmRldGFpbCk6ci5pbml0RXZlbnQoZSwhMSwhMSkpLHQuZGlzcGF0Y2hFdmVudChyKX1mdW5jdGlvbiBRaXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSml0KHRoaXMsdCxlKX19ZnVuY3Rpb24gdHJ0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEppdCh0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fChxaXQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciBlcnQ9W251bGxdO2Z1bmN0aW9uIG5ydCh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiBpcnQoKXtyZXR1cm4gbmV3IG5ydChbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLGVydCl9bnJ0LnByb3RvdHlwZT1pcnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpucnQsc2VsZWN0OmZ1bmN0aW9uIHJydCh0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9aWl0KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZm9yKHZhciBvLGEscz1lW3JdLGw9cy5sZW5ndGgsYz1pW3JdPW5ldyBBcnJheShsKSx1PTA7dTxsOysrdSkobz1zW3VdKSYmKGE9dC5jYWxsKG8sby5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBvJiYoYS5fX2RhdGFfXz1vLl9fZGF0YV9fKSxjW3VdPWEpO3JldHVybiBuZXcgbnJ0KGksdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbiBvcnQodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PW9pdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9W10scj1bXSxvPTA7bzxuOysrbylmb3IodmFyIGEscz1lW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpKGE9c1tjXSkmJihpLnB1c2godC5jYWxsKGEsYS5fX2RhdGFfXyxjLHMpKSxyLnB1c2goYSkpO3JldHVybiBuZXcgbnJ0KGkscil9LGZpbHRlcjpmdW5jdGlvbiBhcnQodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWFpdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhPWVbcl0scz1hLmxlbmd0aCxsPWlbcl09W10sYz0wO2M8czsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmbC5wdXNoKG8pO3JldHVybiBuZXcgbnJ0KGksdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24gc3J0KHQsZSl7aWYoIXQpcmV0dXJuIGY9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx1PS0xLHRoaXMuZWFjaCgoZnVuY3Rpb24odCl7ZlsrK3VdPXR9KSksZjt2YXIgbj1lP3VpdDpjaXQsaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD0oZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KSh0KSk7Zm9yKHZhciBhPXIubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLHU9MDt1PGE7Kyt1KXt2YXIgaD1pW3VdLGQ9clt1XSxwPWQubGVuZ3RoLGY9dC5jYWxsKGgsaCYmaC5fX2RhdGFfXyx1LGkpLG09Zi5sZW5ndGgsZz1sW3VdPW5ldyBBcnJheShtKSxfPXNbdV09bmV3IEFycmF5KG0pO24oaCxkLGcsXyxjW3VdPW5ldyBBcnJheShwKSxmLGUpO2Zvcih2YXIgeSx2LGI9MCx4PTA7YjxtOysrYilpZih5PWdbYl0pe2ZvcihiPj14JiYoeD1iKzEpOyEodj1fW3hdKSYmKyt4PG07KTt5Ll9uZXh0PXZ8fG51bGx9fXJldHVybihzPW5ldyBucnQocyxpKSkuX2VudGVyPWwscy5fZXhpdD1jLHN9LGVudGVyOmZ1bmN0aW9uIGxydCgpe3JldHVybiBuZXcgbnJ0KHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKHNpdCksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24gY3J0KCl7cmV0dXJuIG5ldyBucnQodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChzaXQpLHRoaXMuX3BhcmVudHMpfSxqb2luOmZ1bmN0aW9uIHVydCh0LGUsbil7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoaSk6aS5hcHBlbmQodCsiIiksbnVsbCE9ZSYmKHI9ZShyKSksbnVsbD09bj9vLnJlbW92ZSgpOm4obyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn0sbWVyZ2U6ZnVuY3Rpb24gaHJ0KHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMsaT1lLmxlbmd0aCxyPU1hdGgubWluKGksbi5sZW5ndGgpLG89bmV3IEFycmF5KGkpLGE9MDthPHI7KythKWZvcih2YXIgcyxsPWVbYV0sYz1uW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxkPTA7ZDx1OysrZCkocz1sW2RdfHxjW2RdKSYmKGhbZF09cyk7Zm9yKDthPGk7KythKW9bYV09ZVthXTtyZXR1cm4gbmV3IG5ydChvLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbiBkcnQoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciBpLHI9dFtlXSxvPXIubGVuZ3RoLTEsYT1yW29dOy0tbz49MDspKGk9cltvXSkmJihhJiY0XmkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaSxhKSxhPWkpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uIHBydCh0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIGUmJm4/dChlLl9fZGF0YV9fLG4uX19kYXRhX18pOiFlLSFufXR8fCh0PWhpdCk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKXtmb3IodmFyIGEscz1uW29dLGw9cy5sZW5ndGgsYz1yW29dPW5ldyBBcnJheShsKSx1PTA7dTxsOysrdSkoYT1zW3VdKSYmKGNbdV09YSk7Yy5zb3J0KGUpfXJldHVybiBuZXcgbnJ0KHIsdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbiBmcnQoKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uIG1ydCgpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3RbKytlXT10aGlzfSkpLHR9LG5vZGU6ZnVuY3Rpb24gZ3J0KCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsbj10Lmxlbmd0aDtlPG47KytlKWZvcih2YXIgaT10W2VdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3Ipe3ZhciBhPWlbcl07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbiBfcnQoKXt2YXIgdD0wO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7Kyt0fSkpLHR9LGVtcHR5OmZ1bmN0aW9uIHlydCgpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbiB2cnQodCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWZvcih2YXIgcixvPWVbbl0sYT0wLHM9by5sZW5ndGg7YTxzOysrYSkocj1vW2FdKSYmdC5jYWxsKHIsci5fX2RhdGFfXyxhLG8pO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uIGJydCh0LGUpe3ZhciBuPUpudCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP2kuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTppLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/cGl0OmRpdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9uLmxvY2FsP19pdDpnaXQ6bi5sb2NhbD9taXQ6Zml0KShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24geHJ0KHQsZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT92aXQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/eGl0OmJpdCkodCxlLG51bGw9PW4/IiI6bikpOndpdCh0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24gd3J0KHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/U2l0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP0VpdDpNaXQpKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uIFNydCh0LGUpe3ZhciBuPVRpdCh0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaT1DaXQodGhpcy5ub2RlKCkpLHI9LTEsbz1uLmxlbmd0aDsrK3I8bzspaWYoIWkuY29udGFpbnMobltyXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/SWl0OmU/UGl0Ok5pdCkobixlKSl9LHRleHQ6ZnVuY3Rpb24gTXJ0KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P1JpdDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/eml0Ok9pdCkodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uIEVydCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9EaXQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P0hpdDpCaXQpKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uIFRydCgpe3JldHVybiB0aGlzLmVhY2goRml0KX0sbG93ZXI6ZnVuY3Rpb24gQ3J0KCl7cmV0dXJuIHRoaXMuZWFjaChWaXQpfSxhcHBlbmQ6ZnVuY3Rpb24gQXJ0KHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZWl0KHQpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSl9LGluc2VydDpmdW5jdGlvbiBrcnQodCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVpdCh0KSxpPW51bGw9PWU/VWl0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6aWl0KGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24gTHJ0KCl7cmV0dXJuIHRoaXMuZWFjaChqaXQpfSxjbG9uZTpmdW5jdGlvbiBQcnQodCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/V2l0OkdpdCl9LGRhdHVtOmZ1bmN0aW9uIE5ydCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uIElydCh0LGUsbil7dmFyIGkscixvPSRpdCh0KyIiKSxhPW8ubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKHM9ZT9aaXQ6S2l0LG51bGw9PW4mJihuPSExKSxpPTA7aTxhOysraSl0aGlzLmVhY2gocyhvW2ldLGUsbikpO3JldHVybiB0aGlzfXZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocylmb3IodmFyIGwsYz0wLHU9cy5sZW5ndGg7Yzx1OysrYylmb3IoaT0wLGw9c1tjXTtpPGE7KytpKWlmKChyPW9baV0pLnR5cGU9PT1sLnR5cGUmJnIubmFtZT09PWwubmFtZSlyZXR1cm4gbC52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24gUnJ0KHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/dHJ0OlFpdCkodCxlKSl9fTt2YXIgT3J0PXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIHpydCgpe2Zvcih2YXIgdCxlPTAsbj1hcmd1bWVudHMubGVuZ3RoLGk9e307ZTxuOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gaXx8L1tccy5dLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO2lbdF09W119cmV0dXJuIG5ldyBEcnQoaSl9ZnVuY3Rpb24gRHJ0KHQpe3RoaXMuXz10fWZ1bmN0aW9uIEJydCh0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuPSIiLGk9dC5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49dC5zbGljZShpKzEpLHQ9dC5zbGljZSgwLGkpKSx0JiYhZS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6bn19KSl9ZnVuY3Rpb24gSHJ0KHQsZSl7Zm9yKHZhciBuLGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYoKG49dFtpXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gRnJ0KHQsZSxuKXtmb3IodmFyIGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYodFtpXS5uYW1lPT09ZSl7dFtpXT1PcnQsdD10LnNsaWNlKDAsaSkuY29uY2F0KHQuc2xpY2UoaSsxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTplLHZhbHVlOm59KSx0fURydC5wcm90b3R5cGU9enJ0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RHJ0LG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG4saT10aGlzLl8scj1CcnQodCsiIixpKSxvPS0xLGE9ci5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK288YTspaWYobj0odD1yW29dKS50eXBlKWlbbl09RnJ0KGlbbl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IobiBpbiBpKWlbbl09RnJ0KGlbbl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytvPGE7KWlmKChuPSh0PXJbb10pLnR5cGUpJiYobj1IcnQoaVtuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgRHJ0KHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKG49YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgbixpLHI9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXJbb109YXJndW1lbnRzW28rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3Iobz0wLG49KGk9dGhpcy5fW3RdKS5sZW5ndGg7bzxuOysrbylpW29dLnZhbHVlLmFwcGx5KGUscil9LGFwcGx5OmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgaT10aGlzLl9bdF0scj0wLG89aS5sZW5ndGg7cjxvOysrcilpW3JdLnZhbHVlLmFwcGx5KGUsbil9fTt2YXIgVnJ0LFVydCxqcnQ9MCxHcnQ9MCxXcnQ9MCxxcnQ9MCxZcnQ9MCxYcnQ9MCwkcnQ9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsS3J0PSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIFpydCgpe3JldHVybiBZcnR8fChLcnQoSnJ0KSxZcnQ9JHJ0Lm5vdygpK1hydCl9ZnVuY3Rpb24gSnJ0KCl7WXJ0PTB9ZnVuY3Rpb24gUXJ0KCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB0b3QodCxlLG4pe3ZhciBpPW5ldyBRcnQ7cmV0dXJuIGkucmVzdGFydCh0LGUsbiksaX1mdW5jdGlvbiBlb3QoKXtZcnQ9KHFydD0kcnQubm93KCkpK1hydCxqcnQ9R3J0PTA7dHJ5eyEoZnVuY3Rpb24gdCgpe1pydCgpLCsranJ0O2Zvcih2YXIgdCxlPVZydDtlOykodD1ZcnQtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLWpydH0pKCl9ZmluYWxseXtqcnQ9MCwoZnVuY3Rpb24gZSgpe2Zvcih2YXIgdCxlLG49VnJ0LGk9MS8wO247KW4uX2NhbGw/KGk+bi5fdGltZSYmKGk9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTpWcnQ9ZSk7VXJ0PXQsaW90KGkpfSkoKSxZcnQ9MH19ZnVuY3Rpb24gbm90KCl7dmFyIHQ9JHJ0Lm5vdygpLGU9dC1xcnQ7ZT4xZTMmJihYcnQtPWUscXJ0PXQpfWZ1bmN0aW9uIGlvdCh0KXtqcnR8fChHcnQmJihHcnQ9Y2xlYXJUaW1lb3V0KEdydCkpLHQtWXJ0PjI0Pyh0PDEvMCYmKEdydD1zZXRUaW1lb3V0KGVvdCx0LSRydC5ub3coKS1YcnQpKSxXcnQmJihXcnQ9Y2xlYXJJbnRlcnZhbChXcnQpKSk6KFdydHx8KHFydD0kcnQubm93KCksV3J0PXNldEludGVydmFsKG5vdCwxZTMpKSxqcnQ9MSxLcnQoZW90KSkpfWZ1bmN0aW9uIHJvdCh0LGUsbil7dmFyIGk9bmV3IFFydDtyZXR1cm4gaS5yZXN0YXJ0KChmdW5jdGlvbihuKXtpLnN0b3AoKSx0KG4rZSl9KSxlPW51bGw9PWU/MDorZSxuKSxpfVFydC5wcm90b3R5cGU9dG90LnByb3RvdHlwZT17Y29uc3RydWN0b3I6UXJ0LHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9acnQoKTorbikrKG51bGw9PWU/MDorZSksdGhpcy5fbmV4dHx8VXJ0PT09dGhpc3x8KFVydD9VcnQuX25leHQ9dGhpczpWcnQ9dGhpcyxVcnQ9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixpb3QoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsaW90KCkpfX07dmFyIG9vdD16cnQoInN0YXJ0IiwiZW5kIiwiaW50ZXJydXB0IiksYW90PVtdO2Z1bmN0aW9uIHNvdCh0LGUsbixpLHIsbyl7dmFyIGE9dC5fX3RyYW5zaXRpb247aWYoYSl7aWYobiBpbiBhKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyEoZnVuY3Rpb24gcyh0LGUsbil7dmFyIGkscj10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBvKGwpe3ZhciBjLHUsaCxkO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKGMgaW4gcilpZigoZD1yW2NdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09ZC5zdGF0ZSlyZXR1cm4gcm90KG8pOzQ9PT1kLnN0YXRlPyhkLnN0YXRlPTYsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSByW2NdKTorYzxlJiYoZC5zdGF0ZT02LGQudGltZXIuc3RvcCgpLGRlbGV0ZSByW2NdKX1pZihyb3QoKGZ1bmN0aW9uKCl7Mz09PW4uc3RhdGUmJihuLnN0YXRlPTQsbi50aW1lci5yZXN0YXJ0KGEsbi5kZWxheSxuLnRpbWUpLGEobCkpfSkpLG4uc3RhdGU9MixuLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSwyPT09bi5zdGF0ZSl7Zm9yKG4uc3RhdGU9MyxpPW5ldyBBcnJheShoPW4udHdlZW4ubGVuZ3RoKSxjPTAsdT0tMTtjPGg7KytjKShkPW4udHdlZW5bY10udmFsdWUuY2FsbCh0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSkmJihpWysrdV09ZCk7aS5sZW5ndGg9dSsxfX1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgcj1lPG4uZHVyYXRpb24/bi5lYXNlLmNhbGwobnVsbCxlL24uZHVyYXRpb24pOihuLnRpbWVyLnJlc3RhcnQocyksbi5zdGF0ZT01LDEpLG89LTEsYT1pLmxlbmd0aDsrK288YTspaVtvXS5jYWxsKG51bGwscik7NT09PW4uc3RhdGUmJihuLm9uLmNhbGwoImVuZCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkscygpKX1mdW5jdGlvbiBzKCl7Zm9yKHZhciBpIGluIG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxkZWxldGUgcltlXSxyKXJldHVybjtkZWxldGUgdC5fX3RyYW5zaXRpb259cltlXT1uLG4udGltZXI9dG90KChmdW5jdGlvbiBsKHQpe24uc3RhdGU9MSxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbi5kZWxheTw9dCYmbyh0LW4uZGVsYXkpfSksMCxuLnRpbWUpfSkodCxuLHtuYW1lOmUsaW5kZXg6aSxncm91cDpyLG9uOm9vdCx0d2Vlbjphb3QsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6MH0pfWZ1bmN0aW9uIGxvdCh0LGUpe3ZhciBuPXVvdCh0LGUpO2lmKG4uc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIGNvdCh0LGUpe3ZhciBuPXVvdCh0LGUpO2lmKG4uc3RhdGU+Mil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHN0YXJ0ZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiB1b3QodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBob3QodCxlKXt2YXIgbixpLHIsbz10Ll9fdHJhbnNpdGlvbixhPSEwO2lmKG8pe2ZvcihyIGluIGU9bnVsbD09ZT9udWxsOmUrIiIsbykobj1vW3JdKS5uYW1lPT09ZT8oaT1uLnN0YXRlPjImJm4uc3RhdGU8NSxuLnN0YXRlPTYsbi50aW1lci5zdG9wKCksaSYmbi5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSBvW3JdKTphPSExO2EmJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gZG90KHQsZSxuKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1uLG4uY29uc3RydWN0b3I9dH1mdW5jdGlvbiBwb3QodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIGkgaW4gZSluW2ldPWVbaV07cmV0dXJuIG59ZnVuY3Rpb24gZm90KCl7fXZhciBtb3Q9LjcsZ290PTEvbW90LF9vdD0iXFxzKihbKy1dP1xcZCspXFxzKiIseW90PSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHZvdD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsYm90PS9eIyhbMC05YS1mXXszLDh9KSQvLHhvdD1uZXcgUmVnRXhwKCJecmdiXFwoIitbX290LF9vdCxfb3RdKyJcXCkkIiksd290PW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1t2b3Qsdm90LHZvdF0rIlxcKSQiKSxTb3Q9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tfb3QsX290LF9vdCx5b3RdKyJcXCkkIiksTW90PW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbdm90LHZvdCx2b3QseW90XSsiXFwpJCIpLEVvdD1uZXcgUmVnRXhwKCJeaHNsXFwoIitbeW90LHZvdCx2b3RdKyJcXCkkIiksVG90PW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbeW90LHZvdCx2b3QseW90XSsiXFwpJCIpLENvdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBBb3QoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBrb3QoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBMb3QodCl7dmFyIGUsbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9Ym90LmV4ZWModCkpPyhuPWVbMV0ubGVuZ3RoLGU9cGFyc2VJbnQoZVsxXSwxNiksNj09PW4/UG90KGUpOjM9PT1uP25ldyBPb3QoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1uP05vdChlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LCgyNTUmZSkvMjU1KTo0PT09bj9Ob3QoZT4+MTImMTV8ZT4+OCYyNDAsZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgoMTUmZSk8PDR8MTUmZSkvMjU1KTpudWxsKTooZT14b3QuZXhlYyh0KSk/bmV3IE9vdChlWzFdLGVbMl0sZVszXSwxKTooZT13b3QuZXhlYyh0KSk/bmV3IE9vdCgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1Tb3QuZXhlYyh0KSk/Tm90KGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPU1vdC5leGVjKHQpKT9Ob3QoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9RW90LmV4ZWModCkpP0hvdChlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPVRvdC5leGVjKHQpKT9Ib3QoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpDb3QuaGFzT3duUHJvcGVydHkodCk/UG90KENvdFt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IE9vdChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIFBvdCh0KXtyZXR1cm4gbmV3IE9vdCh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24gTm90KHQsZSxuLGkpe3JldHVybiBpPD0wJiYodD1lPW49TmFOKSxuZXcgT290KHQsZSxuLGkpfWZ1bmN0aW9uIElvdCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGZvdHx8KHQ9TG90KHQpKSx0P25ldyBPb3QoKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IE9vdH1mdW5jdGlvbiBSb3QodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0lvdCh0KTpuZXcgT290KHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBPb3QodCxlLG4saSl7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIHpvdCgpe3JldHVybiIjIitCb3QodGhpcy5yKStCb3QodGhpcy5nKStCb3QodGhpcy5iKX1mdW5jdGlvbiBEb3QoKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiBCb3QodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBIb3QodCxlLG4saSl7cmV0dXJuIGk8PTA/dD1lPW49TmFOOm48PTB8fG4+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyBWb3QodCxlLG4saSl9ZnVuY3Rpb24gRm90KHQpe2lmKHQgaW5zdGFuY2VvZiBWb3QpcmV0dXJuIG5ldyBWb3QodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgZm90fHwodD1Mb3QodCkpLCF0KXJldHVybiBuZXcgVm90O2lmKHQgaW5zdGFuY2VvZiBWb3QpcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LGk9dC5iLzI1NSxyPU1hdGgubWluKGUsbixpKSxvPU1hdGgubWF4KGUsbixpKSxhPU5hTixzPW8tcixsPShvK3IpLzI7cmV0dXJuIHM/KGE9ZT09PW8/KG4taSkvcys2KihuPGkpOm49PT1vPyhpLWUpL3MrMjooZS1uKS9zKzQscy89bDwuNT9vK3I6Mi1vLXIsYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBWb3QoYSxzLGwsdC5vcGFjaXR5KX1mdW5jdGlvbiBWb3QodCxlLG4saSl7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIFVvdCh0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9ZnVuY3Rpb24gam90KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBHb3QodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/KGZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX0pKHQsbik6am90KGlzTmFOKHQpP2U6dCl9ZG90KGZvdCxMb3Qse2NvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6QW90LGZvcm1hdEhleDpBb3QsZm9ybWF0SHNsOmZ1bmN0aW9uIFdvdCgpe3JldHVybiBGb3QodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjprb3QsdG9TdHJpbmc6a290fSksZG90KE9vdCxSb3QscG90KGZvdCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9nb3Q6TWF0aC5wb3coZ290LHQpLG5ldyBPb3QodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/bW90Ok1hdGgucG93KG1vdCx0KSxuZXcgT290KHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6em90LGZvcm1hdEhleDp6b3QsZm9ybWF0UmdiOkRvdCx0b1N0cmluZzpEb3R9KSksZG90KFZvdCwoZnVuY3Rpb24gcW90KHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9Gb3QodCk6bmV3IFZvdCh0LGUsbixudWxsPT1pPzE6aSl9KSxwb3QoZm90LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P2dvdDpNYXRoLnBvdyhnb3QsdCksbmV3IFZvdCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P21vdDpNYXRoLnBvdyhtb3QsdCksbmV3IFZvdCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxpPW4rKG48LjU/bjoxLW4pKmUscj0yKm4taTtyZXR1cm4gbmV3IE9vdChVb3QodD49MjQwP3QtMjQwOnQrMTIwLHIsaSksVW90KHQscixpKSxVb3QodDwxMjA/dCsyNDA6dC0xMjAscixpKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisxMDAqKHRoaXMuc3x8MCkrIiUsICIrMTAwKih0aGlzLmx8fDApKyIlIisoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKTt2YXIgWW90PShmdW5jdGlvbiB0KGUpe3ZhciBuPShmdW5jdGlvbiBpKHQpe3JldHVybiAxPT0odD0rdCk/R290OmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT8oZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5wb3codCtpKmUsbil9fSkoZSxuLHQpOmpvdChpc05hTihlKT9uOmUpfX0pKGUpO2Z1bmN0aW9uIHIodCxlKXt2YXIgaT1uKCh0PVJvdCh0KSkuciwoZT1Sb3QoZSkpLnIpLHI9bih0LmcsZS5nKSxvPW4odC5iLGUuYiksYT1Hb3QodC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9aShlKSx0Lmc9cihlKSx0LmI9byhlKSx0Lm9wYWNpdHk9YShlKSx0KyIifX1yZXR1cm4gci5nYW1tYT10LHJ9KSgxKTtmdW5jdGlvbiBYb3QodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19dmFyICRvdD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csS290PW5ldyBSZWdFeHAoJG90LnNvdXJjZSwiZyIpO2Z1bmN0aW9uIFpvdCh0LGUpe3ZhciBuLGkscixvPSRvdC5sYXN0SW5kZXg9S290Lmxhc3RJbmRleD0wLGE9LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsobj0kb3QuZXhlYyh0KSkmJihpPUtvdC5leGVjKGUpKTspKHI9aS5pbmRleCk+byYmKHI9ZS5zbGljZShvLHIpLHNbYV0/c1thXSs9cjpzWysrYV09ciksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6WG90KG4saSl9KSksbz1Lb3QubGFzdEluZGV4O3JldHVybiBvPGUubGVuZ3RoJiYocj1lLnNsaWNlKG8pLHNbYV0/c1thXSs9cjpzWysrYV09cikscy5sZW5ndGg8Mj9sWzBdPyhmdW5jdGlvbiBjKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKSsiIn19KShsWzBdLngpOihmdW5jdGlvbiB1KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0pKGUpOihlPWwubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixpPTA7aTxlOysraSlzWyhuPWxbaV0pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBKb3QsUW90LHRhdCxlYXQsbmF0PTE4MC9NYXRoLlBJLGlhdD17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiByYXQodCxlLG4saSxyLG8pe3ZhciBhLHMsbDtyZXR1cm4oYT1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89YSxlLz1hKSwobD10Km4rZSppKSYmKG4tPXQqbCxpLT1lKmwpLChzPU1hdGguc3FydChuKm4raSppKSkmJihuLz1zLGkvPXMsbC89cyksdCppPGUqbiYmKHQ9LXQsZT0tZSxsPS1sLGE9LWEpLHt0cmFuc2xhdGVYOnIsdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqbmF0LHNrZXdYOk1hdGguYXRhbihsKSpuYXQsc2NhbGVYOmEsc2NhbGVZOnN9fWZ1bmN0aW9uIG9hdCh0LGUsbixpKXtmdW5jdGlvbiByKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24obyxhKXt2YXIgcz1bXSxsPVtdO3JldHVybiBvPXQobyksYT10KGEpLChmdW5jdGlvbiBjKHQsaSxyLG8sYSxzKXtpZih0IT09cnx8aSE9PW8pe3ZhciBsPWEucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxlLG51bGwsbik7cy5wdXNoKHtpOmwtNCx4OlhvdCh0LHIpfSx7aTpsLTIseDpYb3QoaSxvKX0pfWVsc2Uocnx8bykmJmEucHVzaCgidHJhbnNsYXRlKCIrcitlK28rbil9KShvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVkscyxsKSwoZnVuY3Rpb24gdSh0LGUsbixvKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksby5wdXNoKHtpOm4ucHVzaChyKG4pKyJyb3RhdGUoIixudWxsLGkpLTIseDpYb3QodCxlKX0pKTplJiZuLnB1c2gocihuKSsicm90YXRlKCIrZStpKX0pKG8ucm90YXRlLGEucm90YXRlLHMsbCksKGZ1bmN0aW9uIGgodCxlLG4sbyl7dCE9PWU/by5wdXNoKHtpOm4ucHVzaChyKG4pKyJza2V3WCgiLG51bGwsaSktMix4OlhvdCh0LGUpfSk6ZSYmbi5wdXNoKHIobikrInNrZXdYKCIrZStpKX0pKG8uc2tld1gsYS5za2V3WCxzLGwpLChmdW5jdGlvbiBkKHQsZSxuLGksbyxhKXtpZih0IT09bnx8ZSE9PWkpe3ZhciBzPW8ucHVzaChyKG8pKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTthLnB1c2goe2k6cy00LHg6WG90KHQsbil9LHtpOnMtMix4OlhvdChlLGkpfSl9ZWxzZSAxPT09biYmMT09PWl8fG8ucHVzaChyKG8pKyJzY2FsZSgiK24rIiwiK2krIikiKX0pKG8uc2NhbGVYLG8uc2NhbGVZLGEuc2NhbGVYLGEuc2NhbGVZLHMsbCksbz1hPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49LTEsaT1sLmxlbmd0aDsrK248aTspc1soZT1sW25dKS5pXT1lLngodCk7cmV0dXJuIHMuam9pbigiIil9fX12YXIgYWF0PW9hdCgoZnVuY3Rpb24gc2F0KHQpe3JldHVybiJub25lIj09PXQ/aWF0OihKb3R8fChKb3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksUW90PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0YXQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLEpvdC5zdHlsZS50cmFuc2Zvcm09dCx0PXRhdC5nZXRDb21wdXRlZFN0eWxlKFFvdC5hcHBlbmRDaGlsZChKb3QpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLFFvdC5yZW1vdmVDaGlsZChKb3QpLHJhdCgrKHQ9dC5zbGljZSg3LC0xKS5zcGxpdCgiLCIpKVswXSwrdFsxXSwrdFsyXSwrdFszXSwrdFs0XSwrdFs1XSkpfSksInB4LCAiLCJweCkiLCJkZWcpIiksbGF0PW9hdCgoZnVuY3Rpb24gY2F0KHQpe3JldHVybiBudWxsPT10P2lhdDooZWF0fHwoZWF0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLGVhdC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9ZWF0LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP3JhdCgodD10Lm1hdHJpeCkuYSx0LmIsdC5jLHQuZCx0LmUsdC5mKTppYXQpfSksIiwgIiwiKSIsIikiKTtmdW5jdGlvbiB1YXQodCxlKXt2YXIgbixpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPWNvdCh0aGlzLHQpLG89ci50d2VlbjtpZihvIT09bilmb3IodmFyIGE9MCxzPShpPW49bykubGVuZ3RoO2E8czsrK2EpaWYoaVthXS5uYW1lPT09ZSl7KGk9aS5zbGljZSgpKS5zcGxpY2UoYSwxKTticmVha31yLnR3ZWVuPWl9fWZ1bmN0aW9uIGhhdCh0LGUsbil7dmFyIGkscjtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89Y290KHRoaXMsdCksYT1vLnR3ZWVuO2lmKGEhPT1pKXtyPShpPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOmUsdmFsdWU6bn0sbD0wLGM9ci5sZW5ndGg7bDxjOysrbClpZihyW2xdLm5hbWU9PT1lKXtyW2xdPXM7YnJlYWt9bD09PWMmJnIucHVzaChzKX1vLnR3ZWVuPXJ9fWZ1bmN0aW9uIGRhdCh0LGUsbil7dmFyIGk9dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1jb3QodGhpcyxpKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtlXT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pKSxmdW5jdGlvbih0KXtyZXR1cm4gdW90KHQsaSkudmFsdWVbZV19fWZ1bmN0aW9uIHBhdCh0LGUpe3ZhciBuO3JldHVybigibnVtYmVyIj09dHlwZW9mIGU/WG90OmUgaW5zdGFuY2VvZiBMb3Q/WW90OihuPUxvdChlKSk/KGU9bixZb3QpOlpvdCkodCxlKX1mdW5jdGlvbiBmYXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIG1hdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGdhdCh0LGUsbil7dmFyIGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PW4/bnVsbDpvPT09aT9yOnI9ZShpPW8sbil9fWZ1bmN0aW9uIF9hdCh0LGUsbil7dmFyIGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1uP251bGw6bz09PWk/cjpyPWUoaT1vLG4pfX1mdW5jdGlvbiB5YXQodCxlLG4pe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPW4odGhpcyk7aWYobnVsbCE9cylyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT1zP251bGw6YT09PWkmJnM9PT1yP286bz1lKGk9YSxyPXMpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiB2YXQodCxlLG4pe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPW4odGhpcyk7aWYobnVsbCE9cylyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCkpPT09cz9udWxsOmE9PT1pJiZzPT09cj9vOm89ZShpPWEscj1zKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGJhdCh0LGUpe2Z1bmN0aW9uIG4oKXt2YXIgbj10aGlzLGk9ZS5hcHBseShuLGFyZ3VtZW50cyk7cmV0dXJuIGkmJmZ1bmN0aW9uKGUpe24uc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGkoZSkpfX1yZXR1cm4gbi5fdmFsdWU9ZSxufWZ1bmN0aW9uIHhhdCh0LGUpe2Z1bmN0aW9uIG4oKXt2YXIgbj10aGlzLGk9ZS5hcHBseShuLGFyZ3VtZW50cyk7cmV0dXJuIGkmJmZ1bmN0aW9uKGUpe24uc2V0QXR0cmlidXRlKHQsaShlKSl9fXJldHVybiBuLl92YWx1ZT1lLG59ZnVuY3Rpb24gd2F0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7bG90KHRoaXMsdCkuZGVsYXk9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBTYXQodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe2xvdCh0aGlzLHQpLmRlbGF5PWV9fWZ1bmN0aW9uIE1hdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe2NvdCh0aGlzLHQpLmR1cmF0aW9uPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gRWF0KHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtjb3QodGhpcyx0KS5kdXJhdGlvbj1lfX1mdW5jdGlvbiBUYXQodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7Y290KHRoaXMsdCkuZWFzZT1lfX1mdW5jdGlvbiBDYXQodCxlLG4pe3ZhciBpLHIsbz0oZnVuY3Rpb24gYSh0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KChmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKHQ9dC5zbGljZSgwLGUpKSwhdHx8InN0YXJ0Ij09PXR9KSl9KShlKT9sb3Q6Y290O3JldHVybiBmdW5jdGlvbigpe3ZhciBhPW8odGhpcyx0KSxzPWEub247cyE9PWkmJihyPShpPXMpLmNvcHkoKSkub24oZSxuKSxhLm9uPXJ9fXZhciBBYXQ9aXJ0LnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBrYXQodCxlLG4pe2Z1bmN0aW9uIGkoKXt2YXIgaT10aGlzLHI9ZS5hcHBseShpLGFyZ3VtZW50cyk7cmV0dXJuIHImJmZ1bmN0aW9uKGUpe2kuc3R5bGUuc2V0UHJvcGVydHkodCxyKGUpLG4pfX1yZXR1cm4gaS5fdmFsdWU9ZSxpfXZhciBMYXQ9MDtmdW5jdGlvbiBQYXQodCxlLG4saSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9bix0aGlzLl9pZD1pfWZ1bmN0aW9uIE5hdCh0KXtyZXR1cm4gaXJ0KCkudHJhbnNpdGlvbih0KX1mdW5jdGlvbiBJYXQoKXtyZXR1cm4rK0xhdH12YXIgUmF0PWlydC5wcm90b3R5cGU7UGF0LnByb3RvdHlwZT1OYXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQYXQsc2VsZWN0OmZ1bmN0aW9uIE9hdCh0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWlpdCh0KSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWZvcih2YXIgcyxsLGM9aVthXSx1PWMubGVuZ3RoLGg9b1thXT1uZXcgQXJyYXkodSksZD0wO2Q8dTsrK2QpKHM9Y1tkXSkmJihsPXQuY2FsbChzLHMuX19kYXRhX18sZCxjKSkmJigiX19kYXRhX18iaW4gcyYmKGwuX19kYXRhX189cy5fX2RhdGFfXyksaFtkXT1sLHNvdChoW2RdLGUsbixkLGgsdW90KHMsbikpKTtyZXR1cm4gbmV3IFBhdChvLHRoaXMuX3BhcmVudHMsZSxuKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIHphdCh0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PW9pdCh0KSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89W10sYT1bXSxzPTA7czxyOysrcylmb3IodmFyIGwsYz1pW3NdLHU9Yy5sZW5ndGgsaD0wO2g8dTsrK2gpaWYobD1jW2hdKXtmb3IodmFyIGQscD10LmNhbGwobCxsLl9fZGF0YV9fLGgsYyksZj11b3QobCxuKSxtPTAsZz1wLmxlbmd0aDttPGc7KyttKShkPXBbbV0pJiZzb3QoZCxlLG4sbSxwLGYpO28ucHVzaChwKSxhLnB1c2gobCl9cmV0dXJuIG5ldyBQYXQobyxhLGUsbil9LGZpbHRlcjpmdW5jdGlvbiBEYXQodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWFpdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhPWVbcl0scz1hLmxlbmd0aCxsPWlbcl09W10sYz0wO2M8czsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmbC5wdXNoKG8pO3JldHVybiBuZXcgUGF0KGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24gQmF0KHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMsaT1lLmxlbmd0aCxyPU1hdGgubWluKGksbi5sZW5ndGgpLG89bmV3IEFycmF5KGkpLGE9MDthPHI7KythKWZvcih2YXIgcyxsPWVbYV0sYz1uW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxkPTA7ZDx1OysrZCkocz1sW2RdfHxjW2RdKSYmKGhbZF09cyk7Zm9yKDthPGk7KythKW9bYV09ZVthXTtyZXR1cm4gbmV3IFBhdChvLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbiBIYXQoKXtyZXR1cm4gbmV3IEFhdCh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24gRmF0KCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxuPUlhdCgpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBhLHM9aVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKWlmKGE9c1tjXSl7dmFyIHU9dW90KGEsZSk7c290KGEsdCxuLGMscyx7dGltZTp1LnRpbWUrdS5kZWxheSt1LmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dS5kdXJhdGlvbixlYXNlOnUuZWFzZX0pfXJldHVybiBuZXcgUGF0KGksdGhpcy5fcGFyZW50cyx0LG4pfSxjYWxsOlJhdC5jYWxsLG5vZGVzOlJhdC5ub2Rlcyxub2RlOlJhdC5ub2RlLHNpemU6UmF0LnNpemUsZW1wdHk6UmF0LmVtcHR5LGVhY2g6UmF0LmVhY2gsb246ZnVuY3Rpb24gVmF0KHQsZSl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj91b3QodGhpcy5ub2RlKCksbikub24ub24odCk6dGhpcy5lYWNoKENhdChuLHQsZSkpfSxhdHRyOmZ1bmN0aW9uIFVhdCh0LGUpe3ZhciBuPUpudCh0KSxpPSJ0cmFuc2Zvcm0iPT09bj9sYXQ6cGF0O3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlPyhuLmxvY2FsP3ZhdDp5YXQpKG4saSxkYXQodGhpcywiYXR0ci4iK3QsZSkpOm51bGw9PWU/KG4ubG9jYWw/bWF0OmZhdCkobik6KG4ubG9jYWw/X2F0OmdhdCkobixpLGUrIiIpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uIGphdCh0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIGk9Sm50KHQpO3JldHVybiB0aGlzLnR3ZWVuKG4sKGkubG9jYWw/YmF0OnhhdCkoaSxlKSl9LHN0eWxlOmZ1bmN0aW9uIEdhdCh0LGUsbil7dmFyIGk9InRyYW5zZm9ybSI9PSh0Kz0iIik/YWF0OnBhdDtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCwoZnVuY3Rpb24gbyh0LGUpe3ZhciBuLGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz13aXQodGhpcyx0KSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLHdpdCh0aGlzLHQpKTtyZXR1cm4gbz09PWE/bnVsbDpvPT09biYmYT09PWk/cjpyPWUobj1vLGk9YSl9fSkodCxpKSkub24oImVuZC5zdHlsZS4iK3QsKGZ1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19KSh0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KGZ1bmN0aW9uIGEodCxlLG4pe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT13aXQodGhpcyx0KSxzPW4odGhpcyk7cmV0dXJuIG51bGw9PXMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLHM9d2l0KHRoaXMsdCkpLGE9PT1zP251bGw6YT09PWkmJnM9PT1yP286bz1lKGk9YSxyPXMpfX0pKHQsaSxkYXQodGhpcywic3R5bGUuIit0LGUpKTooZnVuY3Rpb24gcyh0LGUsbil7dmFyIGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz13aXQodGhpcyx0KTtyZXR1cm4gbz09PW4/bnVsbDpvPT09aT9yOnI9ZShpPW8sbil9fSkodCxpLGUrIiIpLG4pfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uIFdhdCh0LGUsbil7dmFyIGk9InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGk9dGhpcy50d2VlbihpKSkmJmkuX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4oaSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oaSxrYXQodCxlLG51bGw9PW4/IiI6bikpfSx0ZXh0OmZ1bmN0aW9uIHFhdCh0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19KShkYXQodGhpcywidGV4dCIsdCkpOihmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KShudWxsPT10PyIiOnQrIiIpKX0scmVtb3ZlOmZ1bmN0aW9uIFlhdCgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBuIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtuIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19KSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbiBYYXQodCxlKXt2YXIgbj10aGlzLl9pZDtpZih0Kz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaSxyPXVvdCh0aGlzLm5vZGUoKSxuKS50d2VlbixvPTAsYT1yLmxlbmd0aDtvPGE7KytvKWlmKChpPXJbb10pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/dWF0OmhhdCkobix0LGUpKX0sZGVsYXk6ZnVuY3Rpb24gJGF0KHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/d2F0OlNhdCkoZSx0KSk6dW90KHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbiBLYXQodCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9NYXQ6RWF0KShlLHQpKTp1b3QodGhpcy5ub2RlKCksZSkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24gWmF0KHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChUYXQoZSx0KSk6dW90KHRoaXMubm9kZSgpLGUpLmVhc2V9fTt2YXIgSmF0PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpUZn07ZnVuY3Rpb24gUWF0KHQsZSl7Zm9yKHZhciBuOyEobj10Ll9fdHJhbnNpdGlvbil8fCEobj1uW2VdKTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIEphdC50aW1lPVpydCgpLEphdDtyZXR1cm4gbn1pcnQucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbiB0c3QodCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtob3QodGhpcyx0KX0pKX0saXJ0LnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uIGVzdCh0KXt2YXIgZSxuO3QgaW5zdGFuY2VvZiBQYXQ/KGU9dC5faWQsdD10Ll9uYW1lKTooZT1JYXQoKSwobj1KYXQpLnRpbWU9WnJ0KCksdD1udWxsPT10P251bGw6dCsiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgYSxzPWlbb10sbD1zLmxlbmd0aCxjPTA7YzxsOysrYykoYT1zW2NdKSYmc290KGEsdCxlLGMscyxufHxRYXQoYSxlKSk7cmV0dXJuIG5ldyBQYXQoaSx0aGlzLl9wYXJlbnRzLHQsZSl9O3ZhciBuc3Q9W251bGxdO2Z1bmN0aW9uIGlzdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gcnN0KHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIG9zdCh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBhc3QoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBzc3QodCl7dC5VPXQuQz10Lkw9dC5SPXQuUD10Lk49bnVsbH1mdW5jdGlvbiBsc3QodCxlKXt2YXIgbj1lLGk9ZS5SLHI9bi5VO3I/ci5MPT09bj9yLkw9aTpyLlI9aTp0Ll89aSxpLlU9cixuLlU9aSxuLlI9aS5MLG4uUiYmKG4uUi5VPW4pLGkuTD1ufWZ1bmN0aW9uIGNzdCh0LGUpe3ZhciBuPWUsaT1lLkwscj1uLlU7cj9yLkw9PT1uP3IuTD1pOnIuUj1pOnQuXz1pLGkuVT1yLG4uVT1pLG4uTD1pLlIsbi5MJiYobi5MLlU9biksaS5SPW59ZnVuY3Rpb24gdXN0KHQpe2Zvcig7dC5MOyl0PXQuTDtyZXR1cm4gdH1mdW5jdGlvbiBoc3QodCxlLG4saSl7dmFyIHI9W251bGwsbnVsbF0sbz1Pc3QucHVzaChyKS0xO3JldHVybiByLmxlZnQ9dCxyLnJpZ2h0PWUsbiYmcHN0KHIsdCxlLG4pLGkmJnBzdChyLGUsdCxpKSxJc3RbdC5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksSXN0W2UuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLHJ9ZnVuY3Rpb24gZHN0KHQsZSxuKXt2YXIgaT1bZSxuXTtyZXR1cm4gaS5sZWZ0PXQsaX1mdW5jdGlvbiBwc3QodCxlLG4saSl7dFswXXx8dFsxXT90LmxlZnQ9PT1uP3RbMV09aTp0WzBdPWk6KHRbMF09aSx0LmxlZnQ9ZSx0LnJpZ2h0PW4pfWZ1bmN0aW9uIGZzdCh0LGUsbixpLHIpe3ZhciBvLGE9dFswXSxzPXRbMV0sbD1hWzBdLGM9YVsxXSx1PTAsaD0xLGQ9c1swXS1sLHA9c1sxXS1jO2lmKG89ZS1sLGR8fCEobz4wKSl7aWYoby89ZCxkPDApe2lmKG88dSlyZXR1cm47bzxoJiYoaD1vKX1lbHNlIGlmKGQ+MCl7aWYobz5oKXJldHVybjtvPnUmJih1PW8pfWlmKG89aS1sLGR8fCEobzwwKSl7aWYoby89ZCxkPDApe2lmKG8+aClyZXR1cm47bz51JiYodT1vKX1lbHNlIGlmKGQ+MCl7aWYobzx1KXJldHVybjtvPGgmJihoPW8pfWlmKG89bi1jLHB8fCEobz4wKSl7aWYoby89cCxwPDApe2lmKG88dSlyZXR1cm47bzxoJiYoaD1vKX1lbHNlIGlmKHA+MCl7aWYobz5oKXJldHVybjtvPnUmJih1PW8pfWlmKG89ci1jLHB8fCEobzwwKSl7aWYoby89cCxwPDApe2lmKG8+aClyZXR1cm47bz51JiYodT1vKX1lbHNlIGlmKHA+MCl7aWYobzx1KXJldHVybjtvPGgmJihoPW8pfXJldHVybiEodT4wfHxoPDEpfHwodT4wJiYodFswXT1bbCt1KmQsYyt1KnBdKSxoPDEmJih0WzFdPVtsK2gqZCxjK2gqcF0pLCEwKX19fX19ZnVuY3Rpb24gbXN0KHQsZSxuLGkscil7dmFyIG89dFsxXTtpZihvKXJldHVybiEwO3ZhciBhLHMsbD10WzBdLGM9dC5sZWZ0LHU9dC5yaWdodCxoPWNbMF0sZD1jWzFdLHA9dVswXSxmPXVbMV0sbT0oaCtwKS8yO2lmKGY9PT1kKXtpZihtPGV8fG0+PWkpcmV0dXJuO2lmKGg+cCl7aWYobCl7aWYobFsxXT49cilyZXR1cm59ZWxzZSBsPVttLG5dO289W20scl19ZWxzZXtpZihsKXtpZihsWzFdPG4pcmV0dXJufWVsc2UgbD1bbSxyXTtvPVttLG5dfX1lbHNlIGlmKHM9KGQrZikvMi0oYT0oaC1wKS8oZi1kKSkqbSxhPC0xfHxhPjEpaWYoaD5wKXtpZihsKXtpZihsWzFdPj1yKXJldHVybn1lbHNlIGw9WyhuLXMpL2Esbl07bz1bKHItcykvYSxyXX1lbHNle2lmKGwpe2lmKGxbMV08bilyZXR1cm59ZWxzZSBsPVsoci1zKS9hLHJdO289WyhuLXMpL2Esbl19ZWxzZSBpZihkPGYpe2lmKGwpe2lmKGxbMF0+PWkpcmV0dXJufWVsc2UgbD1bZSxhKmUrc107bz1baSxhKmkrc119ZWxzZXtpZihsKXtpZihsWzBdPGUpcmV0dXJufWVsc2UgbD1baSxhKmkrc107bz1bZSxhKmUrc119cmV0dXJuIHRbMF09bCx0WzFdPW8sITB9ZnVuY3Rpb24gZ3N0KHQsZSl7dmFyIG49dC5zaXRlLGk9ZS5sZWZ0LHI9ZS5yaWdodDtyZXR1cm4gbj09PXImJihyPWksaT1uKSxyP01hdGguYXRhbjIoclsxXS1pWzFdLHJbMF0taVswXSk6KG49PT1pPyhpPWVbMV0scj1lWzBdKTooaT1lWzBdLHI9ZVsxXSksTWF0aC5hdGFuMihpWzBdLXJbMF0sclsxXS1pWzFdKSl9ZnVuY3Rpb24gX3N0KHQsZSl7cmV0dXJuIGVbKyhlLmxlZnQhPT10LnNpdGUpXX1mdW5jdGlvbiB5c3QodCxlKXtyZXR1cm4gZVsrKGUubGVmdD09PXQuc2l0ZSldfWFzdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmFzdCxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbixpLHI7aWYodCl7aWYoZS5QPXQsZS5OPXQuTix0Lk4mJih0Lk4uUD1lKSx0Lk49ZSx0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1lfWVsc2UgdC5SPWU7bj10fWVsc2UgdGhpcy5fPyh0PXVzdCh0aGlzLl8pLGUuUD1udWxsLGUuTj10LHQuUD10Lkw9ZSxuPXQpOihlLlA9ZS5OPW51bGwsdGhpcy5fPWUsbj1udWxsKTtmb3IoZS5MPWUuUj1udWxsLGUuVT1uLGUuQz0hMCx0PWU7biYmbi5DOyluPT09KGk9bi5VKS5MPyhyPWkuUikmJnIuQz8obi5DPXIuQz0hMSxpLkM9ITAsdD1pKToodD09PW4uUiYmKGxzdCh0aGlzLG4pLG49KHQ9bikuVSksbi5DPSExLGkuQz0hMCxjc3QodGhpcyxpKSk6KHI9aS5MKSYmci5DPyhuLkM9ci5DPSExLGkuQz0hMCx0PWkpOih0PT09bi5MJiYoY3N0KHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsaS5DPSEwLGxzdCh0aGlzLGkpKSxuPXQuVTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3QuTiYmKHQuTi5QPXQuUCksdC5QJiYodC5QLk49dC5OKSx0Lk49dC5QPW51bGw7dmFyIGUsbixpLHI9dC5VLG89dC5MLGE9dC5SO2lmKG49bz9hP3VzdChhKTpvOmEscj9yLkw9PT10P3IuTD1uOnIuUj1uOnRoaXMuXz1uLG8mJmE/KGk9bi5DLG4uQz10LkMsbi5MPW8sby5VPW4sbiE9PWE/KHI9bi5VLG4uVT10LlUsci5MPXQ9bi5SLG4uUj1hLGEuVT1uKToobi5VPXIscj1uLHQ9bi5SKSk6KGk9dC5DLHQ9biksdCYmKHQuVT1yKSwhaSlpZih0JiZ0LkMpdC5DPSExO2Vsc2V7ZG97aWYodD09PXRoaXMuXylicmVhaztpZih0PT09ci5MKXtpZigoZT1yLlIpLkMmJihlLkM9ITEsci5DPSEwLGxzdCh0aGlzLHIpLGU9ci5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLlImJmUuUi5DfHwoZS5MLkM9ITEsZS5DPSEwLGNzdCh0aGlzLGUpLGU9ci5SKSxlLkM9ci5DLHIuQz1lLlIuQz0hMSxsc3QodGhpcyxyKSx0PXRoaXMuXzticmVha319ZWxzZSBpZigoZT1yLkwpLkMmJihlLkM9ITEsci5DPSEwLGNzdCh0aGlzLHIpLGU9ci5MKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLkwmJmUuTC5DfHwoZS5SLkM9ITEsZS5DPSEwLGxzdCh0aGlzLGUpLGU9ci5MKSxlLkM9ci5DLHIuQz1lLkwuQz0hMSxjc3QodGhpcyxyKSx0PXRoaXMuXzticmVha31lLkM9ITAsdD1yLHI9ci5VfXdoaWxlKCF0LkMpO3QmJih0LkM9ITEpfX19O3ZhciB2c3QsYnN0PVtdO2Z1bmN0aW9uIHhzdCgpe3NzdCh0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gd3N0KHQpe3ZhciBlPXQuUCxuPXQuTjtpZihlJiZuKXt2YXIgaT1lLnNpdGUscj10LnNpdGUsbz1uLnNpdGU7aWYoaSE9PW8pe3ZhciBhPXJbMF0scz1yWzFdLGw9aVswXS1hLGM9aVsxXS1zLHU9b1swXS1hLGg9b1sxXS1zLGQ9MioobCpoLWMqdSk7aWYoIShkPj0tRHN0KSl7dmFyIHA9bCpsK2MqYyxmPXUqdStoKmgsbT0oaCpwLWMqZikvZCxnPShsKmYtdSpwKS9kLF89YnN0LnBvcCgpfHxuZXcgeHN0O18uYXJjPXQsXy5zaXRlPXIsXy54PW0rYSxfLnk9KF8uY3k9ZytzKStNYXRoLnNxcnQobSptK2cqZyksdC5jaXJjbGU9Xztmb3IodmFyIHk9bnVsbCx2PVJzdC5fO3Y7KWlmKF8ueTx2Lnl8fF8ueT09PXYueSYmXy54PD12Lngpe2lmKCF2Lkwpe3k9di5QO2JyZWFrfXY9di5MfWVsc2V7aWYoIXYuUil7eT12O2JyZWFrfXY9di5SfVJzdC5pbnNlcnQoeSxfKSx5fHwodnN0PV8pfX19fWZ1bmN0aW9uIFNzdCh0KXt2YXIgZT10LmNpcmNsZTtlJiYoZS5QfHwodnN0PWUuTiksUnN0LnJlbW92ZShlKSxic3QucHVzaChlKSxzc3QoZSksdC5jaXJjbGU9bnVsbCl9dmFyIE1zdD1bXTtmdW5jdGlvbiBFc3QoKXtzc3QodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIFRzdCh0KXt2YXIgZT1Nc3QucG9wKCl8fG5ldyBFc3Q7cmV0dXJuIGUuc2l0ZT10LGV9ZnVuY3Rpb24gQ3N0KHQpe1NzdCh0KSxOc3QucmVtb3ZlKHQpLE1zdC5wdXNoKHQpLHNzdCh0KX1mdW5jdGlvbiBBc3QodCl7dmFyIGU9dC5jaXJjbGUsbj1lLngsaT1lLmN5LHI9W24saV0sbz10LlAsYT10Lk4scz1bdF07Q3N0KHQpO2Zvcih2YXIgbD1vO2wuY2lyY2xlJiZNYXRoLmFicyhuLWwuY2lyY2xlLngpPHpzdCYmTWF0aC5hYnMoaS1sLmNpcmNsZS5jeSk8enN0OylvPWwuUCxzLnVuc2hpZnQobCksQ3N0KGwpLGw9bztzLnVuc2hpZnQobCksU3N0KGwpO2Zvcih2YXIgYz1hO2MuY2lyY2xlJiZNYXRoLmFicyhuLWMuY2lyY2xlLngpPHpzdCYmTWF0aC5hYnMoaS1jLmNpcmNsZS5jeSk8enN0OylhPWMuTixzLnB1c2goYyksQ3N0KGMpLGM9YTtzLnB1c2goYyksU3N0KGMpO3ZhciB1LGg9cy5sZW5ndGg7Zm9yKHU9MTt1PGg7Kyt1KXBzdCgoYz1zW3VdKS5lZGdlLChsPXNbdS0xXSkuc2l0ZSxjLnNpdGUscik7KGM9c1toLTFdKS5lZGdlPWhzdCgobD1zWzBdKS5zaXRlLGMuc2l0ZSxudWxsLHIpLHdzdChsKSx3c3QoYyl9ZnVuY3Rpb24ga3N0KHQpe2Zvcih2YXIgZSxuLGkscixvPXRbMF0sYT10WzFdLHM9TnN0Ll87czspaWYoKGk9THN0KHMsYSktbyk+enN0KXM9cy5MO2Vsc2V7aWYoISgocj1vLVBzdChzLGEpKT56c3QpKXtpPi16c3Q/KGU9cy5QLG49cyk6cj4tenN0PyhlPXMsbj1zLk4pOmU9bj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn0hKGZ1bmN0aW9uIGwodCl7SXN0W3QuaW5kZXhdPXtzaXRlOnQsaGFsZmVkZ2VzOltdfX0pKHQpO3ZhciBjPVRzdCh0KTtpZihOc3QuaW5zZXJ0KGUsYyksZXx8bil7aWYoZT09PW4pcmV0dXJuIFNzdChlKSxuPVRzdChlLnNpdGUpLE5zdC5pbnNlcnQoYyxuKSxjLmVkZ2U9bi5lZGdlPWhzdChlLnNpdGUsYy5zaXRlKSx3c3QoZSksdm9pZCB3c3Qobik7aWYobil7U3N0KGUpLFNzdChuKTt2YXIgdT1lLnNpdGUsaD11WzBdLGQ9dVsxXSxwPXRbMF0taCxmPXRbMV0tZCxtPW4uc2l0ZSxnPW1bMF0taCxfPW1bMV0tZCx5PTIqKHAqXy1mKmcpLHY9cCpwK2YqZixiPWcqZytfKl8seD1bKF8qdi1mKmIpL3kraCwocCpiLWcqdikveStkXTtwc3Qobi5lZGdlLHUsbSx4KSxjLmVkZ2U9aHN0KHUsdCxudWxsLHgpLG4uZWRnZT1oc3QodCxtLG51bGwseCksd3N0KGUpLHdzdChuKX1lbHNlIGMuZWRnZT1oc3QoZS5zaXRlLGMuc2l0ZSl9fWZ1bmN0aW9uIExzdCh0LGUpe3ZhciBuPXQuc2l0ZSxpPW5bMF0scj1uWzFdLG89ci1lO2lmKCFvKXJldHVybiBpO3ZhciBhPXQuUDtpZighYSlyZXR1cm4tMS8wO3ZhciBzPShuPWEuc2l0ZSlbMF0sbD1uWzFdLGM9bC1lO2lmKCFjKXJldHVybiBzO3ZhciB1PXMtaSxoPTEvby0xL2MsZD11L2M7cmV0dXJuIGg/KC1kK01hdGguc3FydChkKmQtMipoKih1KnUvKC0yKmMpLWwrYy8yK3Itby8yKSkpL2graTooaStzKS8yfWZ1bmN0aW9uIFBzdCh0LGUpe3ZhciBuPXQuTjtpZihuKXJldHVybiBMc3QobixlKTt2YXIgaT10LnNpdGU7cmV0dXJuIGlbMV09PT1lP2lbMF06MS8wfXZhciBOc3QsSXN0LFJzdCxPc3QsenN0PTFlLTYsRHN0PTFlLTEyO2Z1bmN0aW9uIEJzdCh0LGUsbil7cmV0dXJuKHRbMF0tblswXSkqKGVbMV0tdFsxXSktKHRbMF0tZVswXSkqKG5bMV0tdFsxXSl9ZnVuY3Rpb24gSHN0KHQsZSl7cmV0dXJuIGVbMV0tdFsxXXx8ZVswXS10WzBdfWZ1bmN0aW9uIEZzdCh0LGUpe3ZhciBuLGkscixvPXQuc29ydChIc3QpLnBvcCgpO2ZvcihPc3Q9W10sSXN0PW5ldyBBcnJheSh0Lmxlbmd0aCksTnN0PW5ldyBhc3QsUnN0PW5ldyBhc3Q7OylpZihyPXZzdCxvJiYoIXJ8fG9bMV08ci55fHxvWzFdPT09ci55JiZvWzBdPHIueCkpb1swXT09PW4mJm9bMV09PT1pfHwoa3N0KG8pLG49b1swXSxpPW9bMV0pLG89dC5wb3AoKTtlbHNle2lmKCFyKWJyZWFrO0FzdChyLmFyYyl9aWYoKGZ1bmN0aW9uIGEoKXtmb3IodmFyIHQsZSxuLGkscj0wLG89SXN0Lmxlbmd0aDtyPG87KytyKWlmKCh0PUlzdFtyXSkmJihpPShlPXQuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgYT1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPGk7KytuKWFbbl09bixzW25dPWdzdCh0LE9zdFtlW25dXSk7Zm9yKGEuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gc1tlXS1zW3RdfSkpLG49MDtuPGk7KytuKXNbbl09ZVthW25dXTtmb3Iobj0wO248aTsrK24pZVtuXT1zW25dfX0pKCksZSl7dmFyIHM9K2VbMF1bMF0sbD0rZVswXVsxXSxjPStlWzFdWzBdLHU9K2VbMV1bMV07IShmdW5jdGlvbiBoKHQsZSxuLGkpe2Zvcih2YXIgcixvPU9zdC5sZW5ndGg7by0tOyltc3Qocj1Pc3Rbb10sdCxlLG4saSkmJmZzdChyLHQsZSxuLGkpJiYoTWF0aC5hYnMoclswXVswXS1yWzFdWzBdKT56c3R8fE1hdGguYWJzKHJbMF1bMV0tclsxXVsxXSk+enN0KXx8ZGVsZXRlIE9zdFtvXX0pKHMsbCxjLHUpLChmdW5jdGlvbiBkKHQsZSxuLGkpe3ZhciByLG8sYSxzLGwsYyx1LGgsZCxwLGYsbSxnPUlzdC5sZW5ndGgsXz0hMDtmb3Iocj0wO3I8ZzsrK3IpaWYobz1Jc3Rbcl0pe2ZvcihhPW8uc2l0ZSxzPShsPW8uaGFsZmVkZ2VzKS5sZW5ndGg7cy0tOylPc3RbbFtzXV18fGwuc3BsaWNlKHMsMSk7Zm9yKHM9MCxjPWwubGVuZ3RoO3M8YzspZj0ocD15c3QobyxPc3RbbFtzXV0pKVswXSxtPXBbMV0saD0odT1fc3QobyxPc3RbbFsrK3MlY11dKSlbMF0sZD11WzFdLChNYXRoLmFicyhmLWgpPnpzdHx8TWF0aC5hYnMobS1kKT56c3QpJiYobC5zcGxpY2UocywwLE9zdC5wdXNoKGRzdChhLHAsTWF0aC5hYnMoZi10KTx6c3QmJmktbT56c3Q/W3QsTWF0aC5hYnMoaC10KTx6c3Q/ZDppXTpNYXRoLmFicyhtLWkpPHpzdCYmbi1mPnpzdD9bTWF0aC5hYnMoZC1pKTx6c3Q/aDpuLGldOk1hdGguYWJzKGYtbik8enN0JiZtLWU+enN0P1tuLE1hdGguYWJzKGgtbik8enN0P2Q6ZV06TWF0aC5hYnMobS1lKTx6c3QmJmYtdD56c3Q/W01hdGguYWJzKGQtZSk8enN0P2g6dCxlXTpudWxsKSktMSksKytjKTtjJiYoXz0hMSl9aWYoXyl7dmFyIHksdixiLHg9MS8wO2ZvcihyPTAsXz1udWxsO3I8ZzsrK3IpKG89SXN0W3JdKSYmKGI9KHk9KGE9by5zaXRlKVswXS10KSp5Kyh2PWFbMV0tZSkqdik8eCYmKHg9YixfPW8pO2lmKF8pe3ZhciB3PVt0LGVdLFM9W3QsaV0sTT1bbixpXSxFPVtuLGVdO18uaGFsZmVkZ2VzLnB1c2goT3N0LnB1c2goZHN0KGE9Xy5zaXRlLHcsUykpLTEsT3N0LnB1c2goZHN0KGEsUyxNKSktMSxPc3QucHVzaChkc3QoYSxNLEUpKS0xLE9zdC5wdXNoKGRzdChhLEUsdykpLTEpfX1mb3Iocj0wO3I8ZzsrK3IpKG89SXN0W3JdKSYmKG8uaGFsZmVkZ2VzLmxlbmd0aHx8ZGVsZXRlIElzdFtyXSl9KShzLGwsYyx1KX10aGlzLmVkZ2VzPU9zdCx0aGlzLmNlbGxzPUlzdCxOc3Q9UnN0PU9zdD1Jc3Q9bnVsbH1Gc3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGc3QscG9seWdvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLm1hcCgoZnVuY3Rpb24oZSl7dmFyIG49ZS5oYWxmZWRnZXMubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gX3N0KGUsdFtuXSl9KSk7cmV0dXJuIG4uZGF0YT1lLnNpdGUuZGF0YSxufSkpfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXSxlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaCgoZnVuY3Rpb24obixpKXtpZihvPShyPW4uaGFsZmVkZ2VzKS5sZW5ndGgpZm9yKHZhciByLG8sYSxzPW4uc2l0ZSxsPS0xLGM9ZVtyW28tMV1dLHU9Yy5sZWZ0PT09cz9jLnJpZ2h0OmMubGVmdDsrK2w8bzspYT11LHU9KGM9ZVtyW2xdXSkubGVmdD09PXM/Yy5yaWdodDpjLmxlZnQsYSYmdSYmaTxhLmluZGV4JiZpPHUuaW5kZXgmJkJzdChzLGEsdSk8MCYmdC5wdXNoKFtzLmRhdGEsYS5kYXRhLHUuZGF0YV0pfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KSl9LGZpbmQ6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaSxyLG89dGhpcyxhPW8uX2ZvdW5kfHwwLHM9by5jZWxscy5sZW5ndGg7IShyPW8uY2VsbHNbYV0pOylpZigrK2E+PXMpcmV0dXJuIG51bGw7dmFyIGw9dC1yLnNpdGVbMF0sYz1lLXIuc2l0ZVsxXSx1PWwqbCtjKmM7ZG97cj1vLmNlbGxzW2k9YV0sYT1udWxsLHIuaGFsZmVkZ2VzLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPW8uZWRnZXNbbl0scz1pLmxlZnQ7aWYocyE9PXIuc2l0ZSYmc3x8KHM9aS5yaWdodCkpe3ZhciBsPXQtc1swXSxjPWUtc1sxXSxoPWwqbCtjKmM7aDx1JiYodT1oLGE9cy5pbmRleCl9fSkpfXdoaWxlKG51bGwhPT1hKTtyZXR1cm4gby5fZm91bmQ9aSxudWxsPT1ufHx1PD1uKm4/ci5zaXRlOm51bGx9fTt2YXIgVnN0PXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIFVzdCgpe2Zvcih2YXIgdCxlPTAsbj1hcmd1bWVudHMubGVuZ3RoLGk9e307ZTxuOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gaXx8L1tccy5dLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO2lbdF09W119cmV0dXJuIG5ldyBqc3QoaSl9ZnVuY3Rpb24ganN0KHQpe3RoaXMuXz10fWZ1bmN0aW9uIEdzdCh0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuPSIiLGk9dC5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49dC5zbGljZShpKzEpLHQ9dC5zbGljZSgwLGkpKSx0JiYhZS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6bn19KSl9ZnVuY3Rpb24gV3N0KHQsZSl7Zm9yKHZhciBuLGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYoKG49dFtpXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gcXN0KHQsZSxuKXtmb3IodmFyIGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYodFtpXS5uYW1lPT09ZSl7dFtpXT1Wc3QsdD10LnNsaWNlKDAsaSkuY29uY2F0KHQuc2xpY2UoaSsxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTplLHZhbHVlOm59KSx0fWpzdC5wcm90b3R5cGU9VXN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6anN0LG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG4saT10aGlzLl8scj1Hc3QodCsiIixpKSxvPS0xLGE9ci5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK288YTspaWYobj0odD1yW29dKS50eXBlKWlbbl09cXN0KGlbbl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IobiBpbiBpKWlbbl09cXN0KGlbbl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytvPGE7KWlmKChuPSh0PXJbb10pLnR5cGUpJiYobj1Xc3QoaVtuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcganN0KHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKG49YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgbixpLHI9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXJbb109YXJndW1lbnRzW28rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3Iobz0wLG49KGk9dGhpcy5fW3RdKS5sZW5ndGg7bzxuOysrbylpW29dLnZhbHVlLmFwcGx5KGUscil9LGFwcGx5OmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgaT10aGlzLl9bdF0scj0wLG89aS5sZW5ndGg7cjxvOysrcilpW3JdLnZhbHVlLmFwcGx5KGUsbil9fTt2YXIgWXN0PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixYc3Q9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOllzdCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uICRzdCh0KXt2YXIgZT10Kz0iIixuPWUuaW5kZXhPZigiOiIpO3JldHVybiBuPj0wJiYieG1sbnMiIT09KGU9dC5zbGljZSgwLG4pKSYmKHQ9dC5zbGljZShuKzEpKSxYc3QuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOlhzdFtlXSxsb2NhbDp0fTp0fWZ1bmN0aW9uIEtzdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnQsbj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gbj09PVlzdCYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09WXN0P2UuY3JlYXRlRWxlbWVudCh0KTplLmNyZWF0ZUVsZW1lbnROUyhuLHQpfX1mdW5jdGlvbiBac3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gSnN0KHQpe3ZhciBlPSRzdCh0KTtyZXR1cm4oZS5sb2NhbD9ac3Q6S3N0KShlKX1mdW5jdGlvbiBRc3QoKXt9ZnVuY3Rpb24gdGx0KHQpe3JldHVybiBudWxsPT10P1FzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fWZ1bmN0aW9uIGVsdCgpe3JldHVybltdfWZ1bmN0aW9uIG5sdCh0KXtyZXR1cm4gbnVsbD09dD9lbHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX1mdW5jdGlvbiBpbHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19ZnVuY3Rpb24gcmx0KHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfWZ1bmN0aW9uIG9sdCh0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX1mdW5jdGlvbiBhbHQodCxlLG4saSxyLG8pe2Zvcih2YXIgYSxzPTAsbD1lLmxlbmd0aCxjPW8ubGVuZ3RoO3M8YzsrK3MpKGE9ZVtzXSk/KGEuX19kYXRhX189b1tzXSxpW3NdPWEpOm5bc109bmV3IG9sdCh0LG9bc10pO2Zvcig7czxsOysrcykoYT1lW3NdKSYmKHJbc109YSl9ZnVuY3Rpb24gc2x0KHQsZSxuLGkscixvLGEpe3ZhciBzLGwsYyx1PXt9LGg9ZS5sZW5ndGgsZD1vLmxlbmd0aCxwPW5ldyBBcnJheShoKTtmb3Iocz0wO3M8aDsrK3MpKGw9ZVtzXSkmJihwW3NdPWM9IiQiK2EuY2FsbChsLGwuX19kYXRhX18scyxlKSxjIGluIHU/cltzXT1sOnVbY109bCk7Zm9yKHM9MDtzPGQ7KytzKShsPXVbYz0iJCIrYS5jYWxsKHQsb1tzXSxzLG8pXSk/KGlbc109bCxsLl9fZGF0YV9fPW9bc10sdVtjXT1udWxsKTpuW3NdPW5ldyBvbHQodCxvW3NdKTtmb3Iocz0wO3M8aDsrK3MpKGw9ZVtzXSkmJnVbcFtzXV09PT1sJiYocltzXT1sKX1mdW5jdGlvbiBsbHQodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gY2x0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiB1bHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBobHQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiBkbHQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gcGx0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX1mdW5jdGlvbiBmbHQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19ZnVuY3Rpb24gbWx0KHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld31mdW5jdGlvbiBnbHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gX2x0KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxuKX19ZnVuY3Rpb24geWx0KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1pP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGksbil9fWZ1bmN0aW9uIHZsdCh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fG1sdCh0KS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX1mdW5jdGlvbiBibHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIHhsdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gd2x0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPW59fWZ1bmN0aW9uIFNsdCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gTWx0KHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IEVsdCh0KX1mdW5jdGlvbiBFbHQodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPVNsdCh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIFRsdCh0LGUpe2Zvcih2YXIgbj1NbHQodCksaT0tMSxyPWUubGVuZ3RoOysraTxyOyluLmFkZChlW2ldKX1mdW5jdGlvbiBDbHQodCxlKXtmb3IodmFyIG49TWx0KHQpLGk9LTEscj1lLmxlbmd0aDsrK2k8cjspbi5yZW1vdmUoZVtpXSl9ZnVuY3Rpb24gQWx0KHQpe3JldHVybiBmdW5jdGlvbigpe1RsdCh0aGlzLHQpfX1mdW5jdGlvbiBrbHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7Q2x0KHRoaXMsdCl9fWZ1bmN0aW9uIExsdCh0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9UbHQ6Q2x0KSh0aGlzLHQpfX1mdW5jdGlvbiBQbHQoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIE5sdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIElsdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gUmx0KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gT2x0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fWZ1bmN0aW9uIHpsdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIERsdCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBCbHQoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBIbHQoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBGbHQoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBWbHQoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMSksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIFVsdCgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCEwKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9b2x0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6b2x0LGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsZSl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19LEVsdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciBqbHQ9e30sR2x0PW51bGw7ZnVuY3Rpb24gV2x0KHQsZSxuKXtyZXR1cm4gdD1xbHQodCxlLG4pLGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVsYXRlZFRhcmdldDtuJiYobj09PXRoaXN8fDgmbi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBxbHQodCxlLG4pe3JldHVybiBmdW5jdGlvbihpKXt2YXIgcj1HbHQ7R2x0PWk7dHJ5e3QuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxuKX1maW5hbGx5e0dsdD1yfX19ZnVuY3Rpb24gWWx0KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSkpfWZ1bmN0aW9uIFhsdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLGk9MCxyPS0xLG89ZS5sZW5ndGg7aTxvOysraSluPWVbaV0sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysrcl09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5jYXB0dXJlKTsrK3I/ZS5sZW5ndGg9cjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gJGx0KHQsZSxuKXt2YXIgaT1qbHQuaGFzT3duUHJvcGVydHkodC50eXBlKT9XbHQ6cWx0O3JldHVybiBmdW5jdGlvbihyLG8sYSl7dmFyIHMsbD10aGlzLl9fb24sYz1pKGUsbyxhKTtpZihsKWZvcih2YXIgdT0wLGg9bC5sZW5ndGg7dTxoOysrdSlpZigocz1sW3VdKS50eXBlPT09dC50eXBlJiZzLm5hbWU9PT10Lm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihzLnR5cGUscy5saXN0ZW5lcixzLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihzLnR5cGUscy5saXN0ZW5lcj1jLHMuY2FwdHVyZT1uKSx2b2lkKHMudmFsdWU9ZSk7dGhpcy5hZGRFdmVudExpc3RlbmVyKHQudHlwZSxjLG4pLHM9e3R5cGU6dC50eXBlLG5hbWU6dC5uYW1lLHZhbHVlOmUsbGlzdGVuZXI6YyxjYXB0dXJlOm59LGw/bC5wdXNoKHMpOnRoaXMuX19vbj1bc119fWZ1bmN0aW9uIEtsdCh0LGUsbil7dmFyIGk9bWx0KHQpLHI9aS5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2Ygcj9yPW5ldyByKGUsbik6KHI9aS5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhyLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLHIuZGV0YWlsPW4uZGV0YWlsKTpyLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KHIpfWZ1bmN0aW9uIFpsdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBLbHQodGhpcyx0LGUpfX1mdW5jdGlvbiBKbHQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gS2x0KHRoaXMsdCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJigib25tb3VzZWVudGVyImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8KGpsdD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIFFsdD1bbnVsbF07ZnVuY3Rpb24gdGN0KHQsZSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lfWZ1bmN0aW9uIGVjdCgpe3JldHVybiBuZXcgdGN0KFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sUWx0KX1mdW5jdGlvbiBuY3QodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyB0Y3QoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyB0Y3QoW1t0XV0sUWx0KX1mdW5jdGlvbiBpY3QoKXtmb3IodmFyIHQsZT1HbHQ7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9ZnVuY3Rpb24gcmN0KHQsZSl7dmFyIG49dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYobi5jcmVhdGVTVkdQb2ludCl7dmFyIGk9bi5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBpLng9ZS5jbGllbnRYLGkueT1lLmNsaWVudFksWyhpPWkubWF0cml4VHJhbnNmb3JtKHQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxpLnldfXZhciByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2UuY2xpZW50WC1yLmxlZnQtdC5jbGllbnRMZWZ0LGUuY2xpZW50WS1yLnRvcC10LmNsaWVudFRvcF19ZnVuY3Rpb24gb2N0KHQpe3ZhciBlPWljdCgpO3JldHVybiBlLmNoYW5nZWRUb3VjaGVzJiYoZT1lLmNoYW5nZWRUb3VjaGVzWzBdKSxyY3QodCxlKX1mdW5jdGlvbiBhY3QodCxlLG4pe2FyZ3VtZW50cy5sZW5ndGg8MyYmKG49ZSxlPWljdCgpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIGkscj0wLG89ZT9lLmxlbmd0aDowO3I8bzsrK3IpaWYoKGk9ZVtyXSkuaWRlbnRpZmllcj09PW4pcmV0dXJuIHJjdCh0LGkpO3JldHVybiBudWxsfWZ1bmN0aW9uIHNjdCgpe0dsdC5wcmV2ZW50RGVmYXVsdCgpLEdsdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBsY3QodCl7dmFyIGU9dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1uY3QodCkub24oImRyYWdzdGFydC5kcmFnIixzY3QsITApOyJvbnNlbGVjdHN0YXJ0ImluIGU/bi5vbigic2VsZWN0c3RhcnQuZHJhZyIsc2N0LCEwKTooZS5fX25vc2VsZWN0PWUuc3R5bGUuTW96VXNlclNlbGVjdCxlLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiBjY3QodCxlKXt2YXIgbj10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpPW5jdCh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO2UmJihpLm9uKCJjbGljay5kcmFnIixzY3QsITApLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7aS5vbigiY2xpY2suZHJhZyIsbnVsbCl9KSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gbj9pLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKToobi5zdHlsZS5Nb3pVc2VyU2VsZWN0PW4uX19ub3NlbGVjdCxkZWxldGUgbi5fX25vc2VsZWN0KX1mdW5jdGlvbiB1Y3QodCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIGhjdCh0LGUpe3ZhciBuPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiBlKW5baV09ZVtpXTtyZXR1cm4gbn1mdW5jdGlvbiBkY3QoKXt9dGN0LnByb3RvdHlwZT1lY3QucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0Y3Qsc2VsZWN0OmZ1bmN0aW9uIHBjdCh0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9dGx0KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZm9yKHZhciBvLGEscz1lW3JdLGw9cy5sZW5ndGgsYz1pW3JdPW5ldyBBcnJheShsKSx1PTA7dTxsOysrdSkobz1zW3VdKSYmKGE9dC5jYWxsKG8sby5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBvJiYoYS5fX2RhdGFfXz1vLl9fZGF0YV9fKSxjW3VdPWEpO3JldHVybiBuZXcgdGN0KGksdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbiBmY3QodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PW5sdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9W10scj1bXSxvPTA7bzxuOysrbylmb3IodmFyIGEscz1lW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpKGE9c1tjXSkmJihpLnB1c2godC5jYWxsKGEsYS5fX2RhdGFfXyxjLHMpKSxyLnB1c2goYSkpO3JldHVybiBuZXcgdGN0KGkscil9LGZpbHRlcjpmdW5jdGlvbiBtY3QodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWlsdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhPWVbcl0scz1hLmxlbmd0aCxsPWlbcl09W10sYz0wO2M8czsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmbC5wdXNoKG8pO3JldHVybiBuZXcgdGN0KGksdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24gZ2N0KHQsZSl7aWYoIXQpcmV0dXJuIGY9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx1PS0xLHRoaXMuZWFjaCgoZnVuY3Rpb24odCl7ZlsrK3VdPXR9KSksZjt2YXIgbj1lP3NsdDphbHQsaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD0oZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KSh0KSk7Zm9yKHZhciBhPXIubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLHU9MDt1PGE7Kyt1KXt2YXIgaD1pW3VdLGQ9clt1XSxwPWQubGVuZ3RoLGY9dC5jYWxsKGgsaCYmaC5fX2RhdGFfXyx1LGkpLG09Zi5sZW5ndGgsZz1sW3VdPW5ldyBBcnJheShtKSxfPXNbdV09bmV3IEFycmF5KG0pO24oaCxkLGcsXyxjW3VdPW5ldyBBcnJheShwKSxmLGUpO2Zvcih2YXIgeSx2LGI9MCx4PTA7YjxtOysrYilpZih5PWdbYl0pe2ZvcihiPj14JiYoeD1iKzEpOyEodj1fW3hdKSYmKyt4PG07KTt5Ll9uZXh0PXZ8fG51bGx9fXJldHVybihzPW5ldyB0Y3QocyxpKSkuX2VudGVyPWwscy5fZXhpdD1jLHN9LGVudGVyOmZ1bmN0aW9uIF9jdCgpe3JldHVybiBuZXcgdGN0KHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKHJsdCksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24geWN0KCl7cmV0dXJuIG5ldyB0Y3QodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChybHQpLHRoaXMuX3BhcmVudHMpfSxqb2luOmZ1bmN0aW9uIHZjdCh0LGUsbil7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoaSk6aS5hcHBlbmQodCsiIiksbnVsbCE9ZSYmKHI9ZShyKSksbnVsbD09bj9vLnJlbW92ZSgpOm4obyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn0sbWVyZ2U6ZnVuY3Rpb24gYmN0KHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMsaT1lLmxlbmd0aCxyPU1hdGgubWluKGksbi5sZW5ndGgpLG89bmV3IEFycmF5KGkpLGE9MDthPHI7KythKWZvcih2YXIgcyxsPWVbYV0sYz1uW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxkPTA7ZDx1OysrZCkocz1sW2RdfHxjW2RdKSYmKGhbZF09cyk7Zm9yKDthPGk7KythKW9bYV09ZVthXTtyZXR1cm4gbmV3IHRjdChvLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbiB4Y3QoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciBpLHI9dFtlXSxvPXIubGVuZ3RoLTEsYT1yW29dOy0tbz49MDspKGk9cltvXSkmJihhJiY0XmkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaSxhKSxhPWkpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uIHdjdCh0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIGUmJm4/dChlLl9fZGF0YV9fLG4uX19kYXRhX18pOiFlLSFufXR8fCh0PWxsdCk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKXtmb3IodmFyIGEscz1uW29dLGw9cy5sZW5ndGgsYz1yW29dPW5ldyBBcnJheShsKSx1PTA7dTxsOysrdSkoYT1zW3VdKSYmKGNbdV09YSk7Yy5zb3J0KGUpfXJldHVybiBuZXcgdGN0KHIsdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbiBTY3QoKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uIE1jdCgpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3RbKytlXT10aGlzfSkpLHR9LG5vZGU6ZnVuY3Rpb24gRWN0KCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsbj10Lmxlbmd0aDtlPG47KytlKWZvcih2YXIgaT10W2VdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3Ipe3ZhciBhPWlbcl07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbiBUY3QoKXt2YXIgdD0wO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7Kyt0fSkpLHR9LGVtcHR5OmZ1bmN0aW9uIENjdCgpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbiBBY3QodCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWZvcih2YXIgcixvPWVbbl0sYT0wLHM9by5sZW5ndGg7YTxzOysrYSkocj1vW2FdKSYmdC5jYWxsKHIsci5fX2RhdGFfXyxhLG8pO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uIGtjdCh0LGUpe3ZhciBuPSRzdCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP2kuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTppLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/dWx0OmNsdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9uLmxvY2FsP2ZsdDpwbHQ6bi5sb2NhbD9kbHQ6aGx0KShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24gTGN0KHQsZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9nbHQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/eWx0Ol9sdCkodCxlLG51bGw9PW4/IiI6bikpOnZsdCh0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24gUGN0KHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/Ymx0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP3dsdDp4bHQpKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uIE5jdCh0LGUpe3ZhciBuPVNsdCh0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaT1NbHQodGhpcy5ub2RlKCkpLHI9LTEsbz1uLmxlbmd0aDsrK3I8bzspaWYoIWkuY29udGFpbnMobltyXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/TGx0OmU/QWx0OmtsdCkobixlKSl9LHRleHQ6ZnVuY3Rpb24gSWN0KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P1BsdDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/SWx0Ok5sdCkodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uIFJjdCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9SbHQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3psdDpPbHQpKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uIE9jdCgpe3JldHVybiB0aGlzLmVhY2goRGx0KX0sbG93ZXI6ZnVuY3Rpb24gemN0KCl7cmV0dXJuIHRoaXMuZWFjaChCbHQpfSxhcHBlbmQ6ZnVuY3Rpb24gRGN0KHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SnN0KHQpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSl9LGluc2VydDpmdW5jdGlvbiBCY3QodCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkpzdCh0KSxpPW51bGw9PWU/SGx0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6dGx0KGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24gSGN0KCl7cmV0dXJuIHRoaXMuZWFjaChGbHQpfSxjbG9uZTpmdW5jdGlvbiBGY3QodCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/VWx0OlZsdCl9LGRhdHVtOmZ1bmN0aW9uIFZjdCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uIFVjdCh0LGUsbil7dmFyIGkscixvPVlsdCh0KyIiKSxhPW8ubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKHM9ZT8kbHQ6WGx0LG51bGw9PW4mJihuPSExKSxpPTA7aTxhOysraSl0aGlzLmVhY2gocyhvW2ldLGUsbikpO3JldHVybiB0aGlzfXZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocylmb3IodmFyIGwsYz0wLHU9cy5sZW5ndGg7Yzx1OysrYylmb3IoaT0wLGw9c1tjXTtpPGE7KytpKWlmKChyPW9baV0pLnR5cGU9PT1sLnR5cGUmJnIubmFtZT09PWwubmFtZSlyZXR1cm4gbC52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24gamN0KHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/Smx0OlpsdCkodCxlKSl9fTt2YXIgR2N0PS43LFdjdD0xL0djdCxxY3Q9IlxccyooWystXT9cXGQrKVxccyoiLFljdD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixYY3Q9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLCRjdD0vXiMoWzAtOWEtZl17Myw4fSkkLyxLY3Q9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3FjdCxxY3QscWN0XSsiXFwpJCIpLFpjdD1uZXcgUmVnRXhwKCJecmdiXFwoIitbWGN0LFhjdCxYY3RdKyJcXCkkIiksSmN0PW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbcWN0LHFjdCxxY3QsWWN0XSsiXFwpJCIpLFFjdD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW1hjdCxYY3QsWGN0LFljdF0rIlxcKSQiKSx0dXQ9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW1ljdCxYY3QsWGN0XSsiXFwpJCIpLGV1dD1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW1ljdCxYY3QsWGN0LFljdF0rIlxcKSQiKSxudXQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gaXV0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gcnV0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gb3V0KHQpe3ZhciBlLG47cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPSRjdC5leGVjKHQpKT8obj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT1uP2F1dChlKTozPT09bj9uZXcgdXV0KGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTo4PT09bj9zdXQoZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwoMjU1JmUpLzI1NSk6ND09PW4/c3V0KGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9S2N0LmV4ZWModCkpP25ldyB1dXQoZVsxXSxlWzJdLGVbM10sMSk6KGU9WmN0LmV4ZWModCkpP25ldyB1dXQoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9SmN0LmV4ZWModCkpP3N1dChlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1RY3QuZXhlYyh0KSk/c3V0KDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPXR1dC5leGVjKHQpKT9mdXQoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1ldXQuZXhlYyh0KSk/ZnV0KGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6bnV0Lmhhc093blByb3BlcnR5KHQpP2F1dChudXRbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyB1dXQoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBhdXQodCl7cmV0dXJuIG5ldyB1dXQodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIHN1dCh0LGUsbixpKXtyZXR1cm4gaTw9MCYmKHQ9ZT1uPU5hTiksbmV3IHV1dCh0LGUsbixpKX1mdW5jdGlvbiBsdXQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBkY3R8fCh0PW91dCh0KSksdD9uZXcgdXV0KCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyB1dXR9ZnVuY3Rpb24gY3V0KHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9sdXQodCk6bmV3IHV1dCh0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gdXV0KHQsZSxuLGkpe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBodXQoKXtyZXR1cm4iIyIrcHV0KHRoaXMucikrcHV0KHRoaXMuZykrcHV0KHRoaXMuYil9ZnVuY3Rpb24gZHV0KCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gcHV0KHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gZnV0KHQsZSxuLGkpe3JldHVybiBpPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgZ3V0KHQsZSxuLGkpfWZ1bmN0aW9uIG11dCh0KXtpZih0IGluc3RhbmNlb2YgZ3V0KXJldHVybiBuZXcgZ3V0KHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIGRjdHx8KHQ9b3V0KHQpKSwhdClyZXR1cm4gbmV3IGd1dDtpZih0IGluc3RhbmNlb2YgZ3V0KXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LG49dC5nLzI1NSxpPXQuYi8yNTUscj1NYXRoLm1pbihlLG4saSksbz1NYXRoLm1heChlLG4saSksYT1OYU4scz1vLXIsbD0obytyKS8yO3JldHVybiBzPyhhPWU9PT1vPyhuLWkpL3MrNioobjxpKTpuPT09bz8oaS1lKS9zKzI6KGUtbikvcys0LHMvPWw8LjU/bytyOjItby1yLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgZ3V0KGEscyxsLHQub3BhY2l0eSl9ZnVuY3Rpb24gZ3V0KHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBfdXQodCxlLG4pe3JldHVybiAyNTUqKHQ8NjA/ZSsobi1lKSp0LzYwOnQ8MTgwP246dDwyNDA/ZSsobi1lKSooMjQwLXQpLzYwOmUpfWZ1bmN0aW9uIHl1dCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gdnV0KHQsZSl7dmFyIG49ZS10O3JldHVybiBuPyhmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19KSh0LG4pOnl1dChpc05hTih0KT9lOnQpfXVjdChkY3Qsb3V0LHtjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsdCl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4Oml1dCxmb3JtYXRIZXg6aXV0LGZvcm1hdEhzbDpmdW5jdGlvbiBidXQoKXtyZXR1cm4gbXV0KHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6cnV0LHRvU3RyaW5nOnJ1dH0pLHVjdCh1dXQsY3V0LGhjdChkY3Qse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/V2N0Ok1hdGgucG93KFdjdCx0KSxuZXcgdXV0KHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0djdDpNYXRoLnBvdyhHY3QsdCksbmV3IHV1dCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Omh1dCxmb3JtYXRIZXg6aHV0LGZvcm1hdFJnYjpkdXQsdG9TdHJpbmc6ZHV0fSkpLHVjdChndXQsKGZ1bmN0aW9uIHh1dCh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/bXV0KHQpOm5ldyBndXQodCxlLG4sbnVsbD09aT8xOmkpfSksaGN0KGRjdCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9XY3Q6TWF0aC5wb3coV2N0LHQpLG5ldyBndXQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9HY3Q6TWF0aC5wb3coR2N0LHQpLG5ldyBndXQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwsaT1uKyhuPC41P246MS1uKSplLHI9MipuLWk7cmV0dXJuIG5ldyB1dXQoX3V0KHQ+PTI0MD90LTI0MDp0KzEyMCxyLGkpLF91dCh0LHIsaSksX3V0KHQ8MTIwP3QrMjQwOnQtMTIwLHIsaSksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSk7dmFyIHd1dD0oZnVuY3Rpb24gdChlKXt2YXIgbj0oZnVuY3Rpb24gaSh0KXtyZXR1cm4gMT09KHQ9K3QpP3Z1dDpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/KGZ1bmN0aW9uIGkodCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGgucG93KHQraSplLG4pfX0pKGUsbix0KTp5dXQoaXNOYU4oZSk/bjplKX19KShlKTtmdW5jdGlvbiByKHQsZSl7dmFyIGk9bigodD1jdXQodCkpLnIsKGU9Y3V0KGUpKS5yKSxyPW4odC5nLGUuZyksbz1uKHQuYixlLmIpLGE9dnV0KHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPWkoZSksdC5nPXIoZSksdC5iPW8oZSksdC5vcGFjaXR5PWEoZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSkoMSk7ZnVuY3Rpb24gU3V0KHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gdCooMS1uKStlKm59fXZhciBNdXQ9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLEV1dD1uZXcgUmVnRXhwKE11dC5zb3VyY2UsImciKTtmdW5jdGlvbiBUdXQodCxlKXt2YXIgbixpLHIsbz1NdXQubGFzdEluZGV4PUV1dC5sYXN0SW5kZXg9MCxhPS0xLHM9W10sbD1bXTtmb3IodCs9IiIsZSs9IiI7KG49TXV0LmV4ZWModCkpJiYoaT1FdXQuZXhlYyhlKSk7KShyPWkuaW5kZXgpPm8mJihyPWUuc2xpY2UobyxyKSxzW2FdP3NbYV0rPXI6c1srK2FdPXIpLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OlN1dChuLGkpfSkpLG89RXV0Lmxhc3RJbmRleDtyZXR1cm4gbzxlLmxlbmd0aCYmKHI9ZS5zbGljZShvKSxzW2FdP3NbYV0rPXI6c1srK2FdPXIpLHMubGVuZ3RoPDI/bFswXT8oZnVuY3Rpb24gYyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fSkobFswXS54KTooZnVuY3Rpb24gdSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KShlKTooZT1sLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIG4saT0wO2k8ZTsrK2kpc1sobj1sW2ldKS5pXT1uLngodCk7cmV0dXJuIHMuam9pbigiIil9KX12YXIgQ3V0LEF1dCxrdXQsTHV0LFB1dD0xODAvTWF0aC5QSSxOdXQ9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gSXV0KHQsZSxuLGkscixvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPWEsZS89YSksKGw9dCpuK2UqaSkmJihuLT10KmwsaS09ZSpsKSwocz1NYXRoLnNxcnQobipuK2kqaSkpJiYobi89cyxpLz1zLGwvPXMpLHQqaTxlKm4mJih0PS10LGU9LWUsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDpyLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKlB1dCxza2V3WDpNYXRoLmF0YW4obCkqUHV0LHNjYWxlWDphLHNjYWxlWTpzfX1mdW5jdGlvbiBSdXQodCxlLG4saSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKG8sYSl7dmFyIHM9W10sbD1bXTtyZXR1cm4gbz10KG8pLGE9dChhKSwoZnVuY3Rpb24gYyh0LGkscixvLGEscyl7aWYodCE9PXJ8fGkhPT1vKXt2YXIgbD1hLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLG4pO3MucHVzaCh7aTpsLTQseDpTdXQodCxyKX0se2k6bC0yLHg6U3V0KGksbyl9KX1lbHNlKHJ8fG8pJiZhLnB1c2goInRyYW5zbGF0ZSgiK3IrZStvK24pfSkoby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLHMsbCksKGZ1bmN0aW9uIHUodCxlLG4sbyl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLG8ucHVzaCh7aTpuLnB1c2gocihuKSsicm90YXRlKCIsbnVsbCxpKS0yLHg6U3V0KHQsZSl9KSk6ZSYmbi5wdXNoKHIobikrInJvdGF0ZSgiK2UraSl9KShvLnJvdGF0ZSxhLnJvdGF0ZSxzLGwpLChmdW5jdGlvbiBoKHQsZSxuLG8pe3QhPT1lP28ucHVzaCh7aTpuLnB1c2gocihuKSsic2tld1goIixudWxsLGkpLTIseDpTdXQodCxlKX0pOmUmJm4ucHVzaChyKG4pKyJza2V3WCgiK2UraSl9KShvLnNrZXdYLGEuc2tld1gscyxsKSwoZnVuY3Rpb24gZCh0LGUsbixpLG8sYSl7aWYodCE9PW58fGUhPT1pKXt2YXIgcz1vLnB1c2gocihvKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7YS5wdXNoKHtpOnMtNCx4OlN1dCh0LG4pfSx7aTpzLTIseDpTdXQoZSxpKX0pfWVsc2UgMT09PW4mJjE9PT1pfHxvLnB1c2gocihvKSsic2NhbGUoIituKyIsIitpKyIpIil9KShvLnNjYWxlWCxvLnNjYWxlWSxhLnNjYWxlWCxhLnNjYWxlWSxzLGwpLG89YT1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLGk9bC5sZW5ndGg7KytuPGk7KXNbKGU9bFtuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIE91dD1SdXQoKGZ1bmN0aW9uIHp1dCh0KXtyZXR1cm4ibm9uZSI9PT10P051dDooQ3V0fHwoQ3V0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLEF1dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsa3V0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxDdXQuc3R5bGUudHJhbnNmb3JtPXQsdD1rdXQuZ2V0Q29tcHV0ZWRTdHlsZShBdXQuYXBwZW5kQ2hpbGQoQ3V0KSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxBdXQucmVtb3ZlQ2hpbGQoQ3V0KSxJdXQoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLER1dD1SdXQoKGZ1bmN0aW9uIEJ1dCh0KXtyZXR1cm4gbnVsbD09dD9OdXQ6KEx1dHx8KEx1dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxMdXQuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PUx1dC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9JdXQoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6TnV0KX0pLCIsICIsIikiLCIpIiksSHV0PU1hdGguU1FSVDI7ZnVuY3Rpb24gRnV0KHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIFZ1dCh0LGUpe3ZhciBuLGkscj10WzBdLG89dFsxXSxhPXRbMl0scz1lWzJdLGw9ZVswXS1yLGM9ZVsxXS1vLHU9bCpsK2MqYztpZih1PDFlLTEyKWk9TWF0aC5sb2cocy9hKS9IdXQsbj1mdW5jdGlvbih0KXtyZXR1cm5bcit0Kmwsbyt0KmMsYSpNYXRoLmV4cChIdXQqdCppKV19O2Vsc2V7dmFyIGg9TWF0aC5zcXJ0KHUpLGQ9KHMqcy1hKmErNCp1KS8oMiphKjIqaCkscD0ocypzLWEqYS00KnUpLygyKnMqMipoKSxmPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCksbT1NYXRoLmxvZyhNYXRoLnNxcnQocCpwKzEpLXApO2k9KG0tZikvSHV0LG49ZnVuY3Rpb24odCl7dmFyIGU9dCppLG49RnV0KGYpLHM9YS8oMipoKSoobiooZnVuY3Rpb24gdSh0KXtyZXR1cm4oKHQ9TWF0aC5leHAoMip0KSktMSkvKHQrMSl9KShIdXQqZStmKS0oZnVuY3Rpb24gZCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpLTEvdCkvMn0pKGYpKTtyZXR1cm5bcitzKmwsbytzKmMsYSpuL0Z1dChIdXQqZStmKV19fXJldHVybiBuLmR1cmF0aW9uPTFlMyppLG59dmFyIFV1dCxqdXQsR3V0PTAsV3V0PTAscXV0PTAsWXV0PTAsWHV0PTAsJHV0PTAsS3V0PSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLFp1dD0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBKdXQoKXtyZXR1cm4gWHV0fHwoWnV0KFF1dCksWHV0PUt1dC5ub3coKSskdXQpfWZ1bmN0aW9uIFF1dCgpe1h1dD0wfWZ1bmN0aW9uIHRodCgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gZWh0KHQsZSxuKXt2YXIgaT1uZXcgdGh0O3JldHVybiBpLnJlc3RhcnQodCxlLG4pLGl9ZnVuY3Rpb24gbmh0KCl7WHV0PShZdXQ9S3V0Lm5vdygpKSskdXQsR3V0PVd1dD0wO3RyeXshKGZ1bmN0aW9uIHQoKXtKdXQoKSwrK0d1dDtmb3IodmFyIHQsZT1VdXQ7ZTspKHQ9WHV0LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1HdXR9KSgpfWZpbmFsbHl7R3V0PTAsKGZ1bmN0aW9uIGUoKXtmb3IodmFyIHQsZSxuPVV1dCxpPTEvMDtuOyluLl9jYWxsPyhpPm4uX3RpbWUmJihpPW4uX3RpbWUpLHQ9bixuPW4uX25leHQpOihlPW4uX25leHQsbi5fbmV4dD1udWxsLG49dD90Ll9uZXh0PWU6VXV0PWUpO2p1dD10LHJodChpKX0pKCksWHV0PTB9fWZ1bmN0aW9uIGlodCgpe3ZhciB0PUt1dC5ub3coKSxlPXQtWXV0O2U+MWUzJiYoJHV0LT1lLFl1dD10KX1mdW5jdGlvbiByaHQodCl7R3V0fHwoV3V0JiYoV3V0PWNsZWFyVGltZW91dChXdXQpKSx0LVh1dD4yND8odDwxLzAmJihXdXQ9c2V0VGltZW91dChuaHQsdC1LdXQubm93KCktJHV0KSkscXV0JiYocXV0PWNsZWFySW50ZXJ2YWwocXV0KSkpOihxdXR8fChZdXQ9S3V0Lm5vdygpLHF1dD1zZXRJbnRlcnZhbChpaHQsMWUzKSksR3V0PTEsWnV0KG5odCkpKX1mdW5jdGlvbiBvaHQodCxlLG4pe3ZhciBpPW5ldyB0aHQ7cmV0dXJuIGkucmVzdGFydCgoZnVuY3Rpb24obil7aS5zdG9wKCksdChuK2UpfSksZT1udWxsPT1lPzA6K2UsbiksaX10aHQucHJvdG90eXBlPWVodC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnRodCxyZXN0YXJ0OmZ1bmN0aW9uKHQsZSxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/SnV0KCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fGp1dD09PXRoaXN8fChqdXQ/anV0Ll9uZXh0PXRoaXM6VXV0PXRoaXMsanV0PXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPW4scmh0KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHJodCgpKX19O3ZhciBhaHQ9VXN0KCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLHNodD1bXTtmdW5jdGlvbiBsaHQodCxlLG4saSxyLG8pe3ZhciBhPXQuX190cmFuc2l0aW9uO2lmKGEpe2lmKG4gaW4gYSlyZXR1cm59ZWxzZSB0Ll9fdHJhbnNpdGlvbj17fTshKGZ1bmN0aW9uIHModCxlLG4pe3ZhciBpLHI9dC5fX3RyYW5zaXRpb247ZnVuY3Rpb24gbyhsKXt2YXIgYyx1LGgsZDtpZigxIT09bi5zdGF0ZSlyZXR1cm4gcygpO2ZvcihjIGluIHIpaWYoKGQ9cltjXSkubmFtZT09PW4ubmFtZSl7aWYoMz09PWQuc3RhdGUpcmV0dXJuIG9odChvKTs0PT09ZC5zdGF0ZT8oZC5zdGF0ZT02LGQudGltZXIuc3RvcCgpLGQub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgcltjXSk6K2M8ZSYmKGQuc3RhdGU9NixkLnRpbWVyLnN0b3AoKSxkLm9uLmNhbGwoImNhbmNlbCIsdCx0Ll9fZGF0YV9fLGQuaW5kZXgsZC5ncm91cCksZGVsZXRlIHJbY10pfWlmKG9odCgoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQoYSxuLmRlbGF5LG4udGltZSksYShsKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLGk9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLGM9MCx1PS0xO2M8aDsrK2MpKGQ9bi50d2VlbltjXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKGlbKyt1XT1kKTtpLmxlbmd0aD11KzF9fWZ1bmN0aW9uIGEoZSl7Zm9yKHZhciByPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksbz0tMSxhPWkubGVuZ3RoOysrbzxhOylpW29dLmNhbGwodCxyKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIGkgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSByW2VdLHIpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1yW2VdPW4sbi50aW1lcj1laHQoKGZ1bmN0aW9uIGwodCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChvLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZvKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KSh0LG4se25hbWU6ZSxpbmRleDppLGdyb3VwOnIsb246YWh0LHR3ZWVuOnNodCx0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9ZnVuY3Rpb24gY2h0KHQsZSl7dmFyIG49aGh0KHQsZSk7aWYobi5zdGF0ZT4wKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIG59ZnVuY3Rpb24gdWh0KHQsZSl7dmFyIG49aGh0KHQsZSk7aWYobi5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBufWZ1bmN0aW9uIGhodCh0LGUpe3ZhciBuPXQuX190cmFuc2l0aW9uO2lmKCFufHwhKG49bltlXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBufWZ1bmN0aW9uIGRodCh0LGUpe3ZhciBuLGkscixvPXQuX190cmFuc2l0aW9uLGE9ITA7aWYobyl7Zm9yKHIgaW4gZT1udWxsPT1lP251bGw6ZSsiIixvKShuPW9bcl0pLm5hbWU9PT1lPyhpPW4uc3RhdGU+MiYmbi5zdGF0ZTw1LG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgb1tyXSk6YT0hMTthJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIHBodCh0LGUpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dWh0KHRoaXMsdCksbz1yLnR3ZWVuO2lmKG8hPT1uKWZvcih2YXIgYT0wLHM9KGk9bj1vKS5sZW5ndGg7YTxzOysrYSlpZihpW2FdLm5hbWU9PT1lKXsoaT1pLnNsaWNlKCkpLnNwbGljZShhLDEpO2JyZWFrfXIudHdlZW49aX19ZnVuY3Rpb24gZmh0KHQsZSxuKXt2YXIgaSxyO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz11aHQodGhpcyx0KSxhPW8udHdlZW47aWYoYSE9PWkpe3I9KGk9YSkuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6ZSx2YWx1ZTpufSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PWUpe3JbbF09czticmVha31sPT09YyYmci5wdXNoKHMpfW8udHdlZW49cn19ZnVuY3Rpb24gbWh0KHQsZSxuKXt2YXIgaT10Ll9pZDtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PXVodCh0aGlzLGkpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSkpLGZ1bmN0aW9uKHQpe3JldHVybiBoaHQodCxpKS52YWx1ZVtlXX19ZnVuY3Rpb24gZ2h0KHQsZSl7dmFyIG47cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgZT9TdXQ6ZSBpbnN0YW5jZW9mIG91dD93dXQ6KG49b3V0KGUpKT8oZT1uLHd1dCk6VHV0KSh0LGUpfWZ1bmN0aW9uIF9odCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24geWh0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gdmh0KHQsZSxuKXt2YXIgaSxyLG89bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gYT09PW8/bnVsbDphPT09aT9yOnI9ZShpPWEsbil9fWZ1bmN0aW9uIGJodCh0LGUsbil7dmFyIGkscixvPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpO3JldHVybiBhPT09bz9udWxsOmE9PT1pP3I6cj1lKGk9YSxuKX19ZnVuY3Rpb24geGh0KHQsZSxuKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscyxsPW4odGhpcyk7aWYobnVsbCE9bClyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT0ocz1sKyIiKT9udWxsOmE9PT1pJiZzPT09cj9vOihyPXMsbz1lKGk9YSxsKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIHdodCh0LGUsbil7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHMsbD1uKHRoaXMpO2lmKG51bGwhPWwpcmV0dXJuKGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PShzPWwrIiIpP251bGw6YT09PWkmJnM9PT1yP286KHI9cyxvPWUoaT1hLGwpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIFNodCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gTWh0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gRWh0KHQsZSl7dmFyIG4saTtmdW5jdGlvbiByKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHIhPT1pJiYobj0oaT1yKSYmTWh0KHQscikpLG59cmV0dXJuIHIuX3ZhbHVlPWUscn1mdW5jdGlvbiBUaHQodCxlKXt2YXIgbixpO2Z1bmN0aW9uIHIoKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PWkmJihuPShpPXIpJiZTaHQodCxyKSksbn1yZXR1cm4gci5fdmFsdWU9ZSxyfWZ1bmN0aW9uIENodCh0LGUpe3JldHVybiBmdW5jdGlvbigpe2NodCh0aGlzLHQpLmRlbGF5PStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gQWh0KHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtjaHQodGhpcyx0KS5kZWxheT1lfX1mdW5jdGlvbiBraHQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt1aHQodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIExodCh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7dWh0KHRoaXMsdCkuZHVyYXRpb249ZX19ZnVuY3Rpb24gUGh0KHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3VodCh0aGlzLHQpLmVhc2U9ZX19ZnVuY3Rpb24gTmh0KHQsZSxuKXt2YXIgaSxyLG89KGZ1bmN0aW9uIGEodCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeSgoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSkpfSkoZSk/Y2h0OnVodDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsdCkscz1hLm9uO3MhPT1pJiYocj0oaT1zKS5jb3B5KCkpLm9uKGUsbiksYS5vbj1yfX12YXIgSWh0PWVjdC5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gUmh0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIE9odCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLmNhbGwodGhpcyxpKSxuKX19ZnVuY3Rpb24gemh0KHQsZSxuKXt2YXIgaSxyO2Z1bmN0aW9uIG8oKXt2YXIgbz1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PXImJihpPShyPW8pJiZPaHQodCxvLG4pKSxpfXJldHVybiBvLl92YWx1ZT1lLG99ZnVuY3Rpb24gRGh0KHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBCaHQodCl7dmFyIGUsbjtmdW5jdGlvbiBpKCl7dmFyIGk9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1uJiYoZT0obj1pKSYmRGh0KGkpKSxlfXJldHVybiBpLl92YWx1ZT10LGl9dmFyIEhodD0wO2Z1bmN0aW9uIEZodCh0LGUsbixpKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWUsdGhpcy5fbmFtZT1uLHRoaXMuX2lkPWl9ZnVuY3Rpb24gVmh0KCl7cmV0dXJuKytIaHR9dmFyIFVodD1lY3QucHJvdG90eXBlO0ZodC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkZodCxzZWxlY3Q6ZnVuY3Rpb24gamh0KHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9dGx0KHQpKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGwsYz1pW2FdLHU9Yy5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxkPTA7ZDx1OysrZCkocz1jW2RdKSYmKGw9dC5jYWxsKHMscy5fX2RhdGFfXyxkLGMpKSYmKCJfX2RhdGFfXyJpbiBzJiYobC5fX2RhdGFfXz1zLl9fZGF0YV9fKSxoW2RdPWwsbGh0KGhbZF0sZSxuLGQsaCxoaHQocyxuKSkpO3JldHVybiBuZXcgRmh0KG8sdGhpcy5fcGFyZW50cyxlLG4pfSxzZWxlY3RBbGw6ZnVuY3Rpb24gR2h0KHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9bmx0KHQpKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1bXSxhPVtdLHM9MDtzPHI7KytzKWZvcih2YXIgbCxjPWlbc10sdT1jLmxlbmd0aCxoPTA7aDx1OysraClpZihsPWNbaF0pe2Zvcih2YXIgZCxwPXQuY2FsbChsLGwuX19kYXRhX18saCxjKSxmPWhodChsLG4pLG09MCxnPXAubGVuZ3RoO208ZzsrK20pKGQ9cFttXSkmJmxodChkLGUsbixtLHAsZik7by5wdXNoKHApLGEucHVzaChsKX1yZXR1cm4gbmV3IEZodChvLGEsZSxuKX0sZmlsdGVyOmZ1bmN0aW9uIFdodCh0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9aWx0KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZm9yKHZhciBvLGE9ZVtyXSxzPWEubGVuZ3RoLGw9aVtyXT1bXSxjPTA7YzxzOysrYykobz1hW2NdKSYmdC5jYWxsKG8sby5fX2RhdGFfXyxjLGEpJiZsLnB1c2gobyk7cmV0dXJuIG5ldyBGaHQoaSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbiBxaHQodCl7aWYodC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxpPWUubGVuZ3RoLHI9TWF0aC5taW4oaSxuLmxlbmd0aCksbz1uZXcgQXJyYXkoaSksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGw9ZVthXSxjPW5bYV0sdT1sLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKShzPWxbZF18fGNbZF0pJiYoaFtkXT1zKTtmb3IoO2E8aTsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgRmh0KG8sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uIFlodCgpe3JldHVybiBuZXcgSWh0KHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbiBYaHQoKXtmb3IodmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkLG49Vmh0KCksaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPTA7bzxyOysrbylmb3IodmFyIGEscz1pW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpaWYoYT1zW2NdKXt2YXIgdT1oaHQoYSxlKTtsaHQoYSx0LG4sYyxzLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyBGaHQoaSx0aGlzLl9wYXJlbnRzLHQsbil9LGNhbGw6VWh0LmNhbGwsbm9kZXM6VWh0Lm5vZGVzLG5vZGU6VWh0Lm5vZGUsc2l6ZTpVaHQuc2l6ZSxlbXB0eTpVaHQuZW1wdHksZWFjaDpVaHQuZWFjaCxvbjpmdW5jdGlvbiAkaHQodCxlKXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2hodCh0aGlzLm5vZGUoKSxuKS5vbi5vbih0KTp0aGlzLmVhY2goTmh0KG4sdCxlKSl9LGF0dHI6ZnVuY3Rpb24gS2h0KHQsZSl7dmFyIG49JHN0KHQpLGk9InRyYW5zZm9ybSI9PT1uP0R1dDpnaHQ7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG4ubG9jYWw/d2h0OnhodCkobixpLG1odCh0aGlzLCJhdHRyLiIrdCxlKSk6bnVsbD09ZT8obi5sb2NhbD95aHQ6X2h0KShuKToobi5sb2NhbD9iaHQ6dmh0KShuLGksZSkpfSxhdHRyVHdlZW46ZnVuY3Rpb24gWmh0KHQsZSl7dmFyIG49ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjt2YXIgaT0kc3QodCk7cmV0dXJuIHRoaXMudHdlZW4obiwoaS5sb2NhbD9FaHQ6VGh0KShpLGUpKX0sc3R5bGU6ZnVuY3Rpb24gSmh0KHQsZSxuKXt2YXIgaT0idHJhbnNmb3JtIj09KHQrPSIiKT9PdXQ6Z2h0O3JldHVybiBudWxsPT1lP3RoaXMuc3R5bGVUd2Vlbih0LChmdW5jdGlvbiByKHQsZSl7dmFyIG4saSxyO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXZsdCh0aGlzLHQpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksdmx0KHRoaXMsdCkpO3JldHVybiBvPT09YT9udWxsOm89PT1uJiZhPT09aT9yOnI9ZShuPW8saT1hKX19KSh0LGkpKS5vbigiZW5kLnN0eWxlLiIrdCxSaHQodCkpOiJmdW5jdGlvbiI9PXR5cGVvZiBlP3RoaXMuc3R5bGVUd2Vlbih0LChmdW5jdGlvbiBhKHQsZSxuKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dmx0KHRoaXMsdCkscz1uKHRoaXMpLGw9cysiIjtyZXR1cm4gbnVsbD09cyYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksbD1zPXZsdCh0aGlzLHQpKSxhPT09bD9udWxsOmE9PT1pJiZsPT09cj9vOihyPWwsbz1lKGk9YSxzKSl9fSkodCxpLG1odCh0aGlzLCJzdHlsZS4iK3QsZSkpKS5lYWNoKChmdW5jdGlvbiBvKHQsZSl7dmFyIG4saSxyLG8sYT0ic3R5bGUuIitlLHM9ImVuZC4iK2E7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dWh0KHRoaXMsdCksYz1sLm9uLHU9bnVsbD09bC52YWx1ZVthXT9vfHwobz1SaHQoZSkpOnZvaWQgMDtjPT09biYmcj09PXV8fChpPShuPWMpLmNvcHkoKSkub24ocyxyPXUpLGwub249aX19KSh0aGlzLl9pZCx0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsKGZ1bmN0aW9uIHModCxlLG4pe3ZhciBpLHIsbz1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXZsdCh0aGlzLHQpO3JldHVybiBhPT09bz9udWxsOmE9PT1pP3I6cj1lKGk9YSxuKX19KSh0LGksZSksbikub24oImVuZC5zdHlsZS4iK3QsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24gUWh0KHQsZSxuKXt2YXIgaT0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLHpodCh0LGUsbnVsbD09bj8iIjpuKSl9LHRleHQ6ZnVuY3Rpb24gdGR0KHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD8oZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX0pKG1odCh0aGlzLCJ0ZXh0Iix0KSk6KGZ1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0pKG51bGw9PXQ/IiI6dCsiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24gZWR0KHQpe3ZhciBlPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZSxCaHQodCkpfSxyZW1vdmU6ZnVuY3Rpb24gbmR0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLChmdW5jdGlvbiB0KGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIG4gaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK24hPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX0pKHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uIGlkdCh0LGUpe3ZhciBuPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBpLHI9aGh0KHRoaXMubm9kZSgpLG4pLnR3ZWVuLG89MCxhPXIubGVuZ3RoO288YTsrK28paWYoKGk9cltvXSkubmFtZT09PXQpcmV0dXJuIGkudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9waHQ6Zmh0KShuLHQsZSkpfSxkZWxheTpmdW5jdGlvbiByZHQodCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9DaHQ6QWh0KShlLHQpKTpoaHQodGhpcy5ub2RlKCksZSkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uIG9kdCh0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2todDpMaHQpKGUsdCkpOmhodCh0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbiBhZHQodCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKFBodChlLHQpKTpoaHQodGhpcy5ub2RlKCksZSkuZWFzZX0sZW5kOmZ1bmN0aW9uIHNkdCgpe3ZhciB0LGUsbj10aGlzLGk9bi5faWQscj1uLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG8sYSl7dmFyIHM9e3ZhbHVlOmF9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1yJiZvKCl9fTtuLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG49dWh0KHRoaXMsaSkscj1uLm9uO3IhPT10JiYoKGU9KHQ9cikuY29weSgpKS5fLmNhbmNlbC5wdXNoKHMpLGUuXy5pbnRlcnJ1cHQucHVzaChzKSxlLl8uZW5kLnB1c2gobCkpLG4ub249ZX0pKX0pKX19O3ZhciBsZHQ9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOlRmfTtmdW5jdGlvbiBjZHQodCxlKXtmb3IodmFyIG47IShuPXQuX190cmFuc2l0aW9uKXx8IShuPW5bZV0pOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm4gbGR0LnRpbWU9SnV0KCksbGR0O3JldHVybiBufWZ1bmN0aW9uIHVkdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gaGR0KHQsZSxuKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMudHJhbnNmb3JtPW59ZnVuY3Rpb24gZGR0KHQsZSxuKXt0aGlzLms9dCx0aGlzLng9ZSx0aGlzLnk9bn1lY3QucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbiBwZHQodCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtkaHQodGhpcyx0KX0pKX0sZWN0LnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uIGZkdCh0KXt2YXIgZSxuO3QgaW5zdGFuY2VvZiBGaHQ/KGU9dC5faWQsdD10Ll9uYW1lKTooZT1WaHQoKSwobj1sZHQpLnRpbWU9SnV0KCksdD1udWxsPT10P251bGw6dCsiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgYSxzPWlbb10sbD1zLmxlbmd0aCxjPTA7YzxsOysrYykoYT1zW2NdKSYmbGh0KGEsdCxlLGMscyxufHxjZHQoYSxlKSk7cmV0dXJuIG5ldyBGaHQoaSx0aGlzLl9wYXJlbnRzLHQsZSl9LGRkdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRkdCxzY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQ/dGhpczpuZXcgZGR0KHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PXQmMD09PWU/dGhpczpuZXcgZGR0KHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuayplKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIG1kdD1uZXcgZGR0KDEsMCwwKTtmdW5jdGlvbiBnZHQodCl7cmV0dXJuIHQuX196b29tfHxtZHR9ZnVuY3Rpb24gX2R0KCl7R2x0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHlkdCgpe0dsdC5wcmV2ZW50RGVmYXVsdCgpLEdsdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiB2ZHQoKXtyZXR1cm4hR2x0LmJ1dHRvbn1mdW5jdGlvbiBiZHQoKXt2YXIgdCxlLG49dGhpcztyZXR1cm4gbiBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ/KHQ9KG49bi5vd25lclNWR0VsZW1lbnR8fG4pLndpZHRoLmJhc2VWYWwudmFsdWUsZT1uLmhlaWdodC5iYXNlVmFsLnZhbHVlKToodD1uLmNsaWVudFdpZHRoLGU9bi5jbGllbnRIZWlnaHQpLFtbMCwwXSxbdCxlXV19ZnVuY3Rpb24geGR0KCl7cmV0dXJuIHRoaXMuX196b29tfHxtZHR9ZnVuY3Rpb24gd2R0KCl7cmV0dXJuLUdsdC5kZWx0YVkqKEdsdC5kZWx0YU1vZGU/MTIwOjEpLzUwMH1mdW5jdGlvbiBTZHQoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gTWR0KHQsZSxuKXt2YXIgaT10LmludmVydFgoZVswXVswXSktblswXVswXSxyPXQuaW52ZXJ0WChlWzFdWzBdKS1uWzFdWzBdLG89dC5pbnZlcnRZKGVbMF1bMV0pLW5bMF1bMV0sYT10LmludmVydFkoZVsxXVsxXSktblsxXVsxXTtyZXR1cm4gdC50cmFuc2xhdGUocj5pPyhpK3IpLzI6TWF0aC5taW4oMCxpKXx8TWF0aC5tYXgoMCxyKSxhPm8/KG8rYSkvMjpNYXRoLm1pbigwLG8pfHxNYXRoLm1heCgwLGEpKX1nZHQucHJvdG90eXBlPWRkdC5wcm90b3R5cGU7dmFyIEVkdD1iZShPYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCx2ZXJzaW9uOiI0LjEzLjAiLGJpc2VjdDpDTyxiaXNlY3RSaWdodDpDTyxiaXNlY3RMZWZ0OkFPLGFzY2VuZGluZzpNTyxiaXNlY3RvcjpFTyxjcm9zczpmdW5jdGlvbiBUZHQodCxlLG4pe3ZhciBpLHIsbyxhLHM9dC5sZW5ndGgsbD1lLmxlbmd0aCxjPW5ldyBBcnJheShzKmwpO2ZvcihudWxsPT1uJiYobj1rTyksaT1vPTA7aTxzOysraSlmb3IoYT10W2ldLHI9MDtyPGw7KytyLCsrbyljW29dPW4oYSxlW3JdKTtyZXR1cm4gY30sZGVzY2VuZGluZzpmdW5jdGlvbiBDZHQodCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LGRldmlhdGlvbjpOTyxleHRlbnQ6SU8saGlzdG9ncmFtOmZ1bmN0aW9uIEFkdCgpe3ZhciB0PUJPLGU9SU8sbj1XTztmdW5jdGlvbiBpKGkpe3ZhciByLG8sYT1pLmxlbmd0aCxzPW5ldyBBcnJheShhKTtmb3Iocj0wO3I8YTsrK3Ipc1tyXT10KGlbcl0scixpKTt2YXIgbD1lKHMpLGM9bFswXSx1PWxbMV0saD1uKHMsYyx1KTtBcnJheS5pc0FycmF5KGgpfHwoaD1HTyhjLHUsaCksaD1ITyhNYXRoLmNlaWwoYy9oKSpoLE1hdGguZmxvb3IodS9oKSpoLGgpKTtmb3IodmFyIGQ9aC5sZW5ndGg7aFswXTw9YzspaC5zaGlmdCgpLC0tZDtmb3IoO2hbZC0xXT51OyloLnBvcCgpLC0tZDt2YXIgcCxmPW5ldyBBcnJheShkKzEpO2ZvcihyPTA7cjw9ZDsrK3IpKHA9ZltyXT1bXSkueDA9cj4wP2hbci0xXTpjLHAueDE9cjxkP2hbcl06dTtmb3Iocj0wO3I8YTsrK3IpYzw9KG89c1tyXSkmJm88PXUmJmZbQ08oaCxvLDAsZCldLnB1c2goaVtyXSk7cmV0dXJuIGZ9cmV0dXJuIGkudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpETyhlKSxpKTp0fSxpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkRPKFt0WzBdLHRbMV1dKSxpKTplfSxpLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP0RPKE9PLmNhbGwodCkpOkRPKHQpLGkpOm59LGl9LHRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXM6ZnVuY3Rpb24ga2R0KHQsZSxuKXtyZXR1cm4gdD16Ty5jYWxsKHQsTE8pLnNvcnQoTU8pLE1hdGguY2VpbCgobi1lKS8oMioocU8odCwuNzUpLXFPKHQsLjI1KSkqTWF0aC5wb3codC5sZW5ndGgsLTEvMykpKX0sdGhyZXNob2xkU2NvdHQ6ZnVuY3Rpb24gTGR0KHQsZSxuKXtyZXR1cm4gTWF0aC5jZWlsKChuLWUpLygzLjUqTk8odCkqTWF0aC5wb3codC5sZW5ndGgsLTEvMykpKX0sdGhyZXNob2xkU3R1cmdlczpXTyxtYXg6ZnVuY3Rpb24gUGR0KHQsZSl7dmFyIG4saSxyPXQubGVuZ3RoLG89LTE7aWYobnVsbD09ZSl7Zm9yKDsrK288cjspaWYobnVsbCE9KG49dFtvXSkmJm4+PW4pZm9yKGk9bjsrK288cjspbnVsbCE9KG49dFtvXSkmJm4+aSYmKGk9bil9ZWxzZSBmb3IoOysrbzxyOylpZihudWxsIT0obj1lKHRbb10sbyx0KSkmJm4+PW4pZm9yKGk9bjsrK288cjspbnVsbCE9KG49ZSh0W29dLG8sdCkpJiZuPmkmJihpPW4pO3JldHVybiBpfSxtZWFuOmZ1bmN0aW9uIE5kdCh0LGUpe3ZhciBuLGk9dC5sZW5ndGgscj1pLG89LTEsYT0wO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4obj1MTyh0W29dKSk/LS1yOmErPW47ZWxzZSBmb3IoOysrbzxpOylpc05hTihuPUxPKGUodFtvXSxvLHQpKSk/LS1yOmErPW47aWYocilyZXR1cm4gYS9yfSxtZWRpYW46ZnVuY3Rpb24gSWR0KHQsZSl7dmFyIG4saT10Lmxlbmd0aCxyPS0xLG89W107aWYobnVsbD09ZSlmb3IoOysrcjxpOylpc05hTihuPUxPKHRbcl0pKXx8by5wdXNoKG4pO2Vsc2UgZm9yKDsrK3I8aTspaXNOYU4obj1MTyhlKHRbcl0scix0KSkpfHxvLnB1c2gobik7cmV0dXJuIHFPKG8uc29ydChNTyksLjUpfSxtZXJnZTpmdW5jdGlvbiBSZHQodCl7Zm9yKHZhciBlLG4saSxyPXQubGVuZ3RoLG89LTEsYT0wOysrbzxyOylhKz10W29dLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSk7LS1yPj0wOylmb3IoZT0oaT10W3JdKS5sZW5ndGg7LS1lPj0wOyluWy0tYV09aVtlXTtyZXR1cm4gbn0sbWluOllPLHBhaXJzOmZ1bmN0aW9uIE9kdCh0LGUpe251bGw9PWUmJihlPWtPKTtmb3IodmFyIG49MCxpPXQubGVuZ3RoLTEscj10WzBdLG89bmV3IEFycmF5KGk8MD8wOmkpO248aTspb1tuXT1lKHIscj10Wysrbl0pO3JldHVybiBvfSxwZXJtdXRlOmZ1bmN0aW9uIHpkdCh0LGUpe2Zvcih2YXIgbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKTtuLS07KWlbbl09dFtlW25dXTtyZXR1cm4gaX0scXVhbnRpbGU6cU8scmFuZ2U6SE8sc2NhbjpmdW5jdGlvbiBEZHQodCxlKXtpZihuPXQubGVuZ3RoKXt2YXIgbixpLHI9MCxvPTAsYT10W29dO2ZvcihudWxsPT1lJiYoZT1NTyk7KytyPG47KShlKGk9dFtyXSxhKTwwfHwwIT09ZShhLGEpKSYmKGE9aSxvPXIpO3JldHVybiAwPT09ZShhLGEpP286dm9pZCAwfX0sc2h1ZmZsZTpmdW5jdGlvbiBCZHQodCxlLG4pe2Zvcih2YXIgaSxyLG89KG51bGw9PW4/dC5sZW5ndGg6biktKGU9bnVsbD09ZT8wOitlKTtvOylyPU1hdGgucmFuZG9tKCkqby0tfDAsaT10W28rZV0sdFtvK2VdPXRbcitlXSx0W3IrZV09aTtyZXR1cm4gdH0sc3VtOmZ1bmN0aW9uIEhkdCh0LGUpe3ZhciBuLGk9dC5sZW5ndGgscj0tMSxvPTA7aWYobnVsbD09ZSlmb3IoOysrcjxpOykobj0rdFtyXSkmJihvKz1uKTtlbHNlIGZvcig7KytyPGk7KShuPStlKHRbcl0scix0KSkmJihvKz1uKTtyZXR1cm4gb30sdGlja3M6ZnVuY3Rpb24gRmR0KHQsZSxuKXt2YXIgaSxyLG8sYSxzPS0xO2lmKG49K24sKHQ9K3QpPT0oZT0rZSkmJm4+MClyZXR1cm5bdF07aWYoKGk9ZTx0KSYmKHI9dCx0PWUsZT1yKSwwPT09KGE9ak8odCxlLG4pKXx8IWlzRmluaXRlKGEpKXJldHVybltdO2lmKGE+MClmb3IodD1NYXRoLmNlaWwodC9hKSxlPU1hdGguZmxvb3IoZS9hKSxvPW5ldyBBcnJheShyPU1hdGguY2VpbChlLXQrMSkpOysrczxyOylvW3NdPSh0K3MpKmE7ZWxzZSBmb3IodD1NYXRoLmZsb29yKHQqYSksZT1NYXRoLmNlaWwoZSphKSxvPW5ldyBBcnJheShyPU1hdGguY2VpbCh0LWUrMSkpOysrczxyOylvW3NdPSh0LXMpL2E7cmV0dXJuIGkmJm8ucmV2ZXJzZSgpLG99LHRpY2tJbmNyZW1lbnQ6ak8sdGlja1N0ZXA6R08sdHJhbnNwb3NlOlhPLHZhcmlhbmNlOlBPLHppcDpmdW5jdGlvbiBWZHQoKXtyZXR1cm4gWE8oYXJndW1lbnRzKX0sYXhpc1RvcDpmdW5jdGlvbiBVZHQodCl7cmV0dXJuIHJ6KDEsdCl9LGF4aXNSaWdodDpmdW5jdGlvbiBqZHQodCl7cmV0dXJuIHJ6KDIsdCl9LGF4aXNCb3R0b206ZnVuY3Rpb24gR2R0KHQpe3JldHVybiByeigzLHQpfSxheGlzTGVmdDpmdW5jdGlvbiBXZHQodCl7cmV0dXJuIHJ6KDQsdCl9LGJydXNoOmZ1bmN0aW9uIHFkdCgpe3JldHVybiBLRihIRil9LGJydXNoWDpmdW5jdGlvbiBZZHQoKXtyZXR1cm4gS0YoREYpfSxicnVzaFk6ZnVuY3Rpb24gWGR0KCl7cmV0dXJuIEtGKEJGKX0sYnJ1c2hTZWxlY3Rpb246ZnVuY3Rpb24gJGR0KHQpe3ZhciBlPXQuX19icnVzaDtyZXR1cm4gZT9lLmRpbS5vdXRwdXQoZS5zZWxlY3Rpb24pOm51bGx9LGNob3JkOmZ1bmN0aW9uIEtkdCgpe3ZhciB0PTAsZT1udWxsLG49bnVsbCxpPW51bGw7ZnVuY3Rpb24gcihyKXt2YXIgbyxhLHMsbCxjLHUsaD1yLmxlbmd0aCxkPVtdLHA9SkYoaCksZj1bXSxtPVtdLGc9bS5ncm91cHM9bmV3IEFycmF5KGgpLF89bmV3IEFycmF5KGgqaCk7Zm9yKG89MCxjPS0xOysrYzxoOyl7Zm9yKGE9MCx1PS0xOysrdTxoOylhKz1yW2NdW3VdO2QucHVzaChhKSxmLnB1c2goSkYoaCkpLG8rPWF9Zm9yKGUmJnAuc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShkW3RdLGRbbl0pfSkpLG4mJmYuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LnNvcnQoKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIG4ocltlXVt0XSxyW2VdW2ldKX0pKX0pKSxsPShvPW9WKDAsclYtdCpoKS9vKT90OnJWL2gsYT0wLGM9LTE7KytjPGg7KXtmb3Iocz1hLHU9LTE7Kyt1PGg7KXt2YXIgeT1wW2NdLHY9Zlt5XVt1XSxiPXJbeV1bdl0seD1hLHc9YSs9YipvO19bdipoK3ldPXtpbmRleDp5LHN1YmluZGV4OnYsc3RhcnRBbmdsZTp4LGVuZEFuZ2xlOncsdmFsdWU6Yn19Z1t5XT17aW5kZXg6eSxzdGFydEFuZ2xlOnMsZW5kQW5nbGU6YSx2YWx1ZTpkW3ldfSxhKz1sfWZvcihjPS0xOysrYzxoOylmb3IodT1jLTE7Kyt1PGg7KXt2YXIgUz1fW3UqaCtjXSxNPV9bYypoK3VdOyhTLnZhbHVlfHxNLnZhbHVlKSYmbS5wdXNoKFMudmFsdWU8TS52YWx1ZT97c291cmNlOk0sdGFyZ2V0OlN9Ontzb3VyY2U6Uyx0YXJnZXQ6TX0pfXJldHVybiBpP20uc29ydChpKTptfXJldHVybiByLnBhZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW9WKDAsZSkscik6dH0sci5zb3J0R3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQscik6ZX0sci5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQscik6bn0sci5zb3J0Q2hvcmRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2k9bnVsbDooaT1hVih0KSkuXz10LHIpOmkmJmkuX30scn0scmliYm9uOmZ1bmN0aW9uIFpkdCgpe3ZhciB0PW1WLGU9Z1Ysbj1fVixpPXlWLHI9dlYsbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgYSxzPXNWLmNhbGwoYXJndW1lbnRzKSxsPXQuYXBwbHkodGhpcyxzKSxjPWUuYXBwbHkodGhpcyxzKSx1PStuLmFwcGx5KHRoaXMsKHNbMF09bCxzKSksaD1pLmFwcGx5KHRoaXMscyktaVYsZD1yLmFwcGx5KHRoaXMscyktaVYscD11KnRWKGgpLGY9dSplVihoKSxtPStuLmFwcGx5KHRoaXMsKHNbMF09YyxzKSksZz1pLmFwcGx5KHRoaXMscyktaVYsXz1yLmFwcGx5KHRoaXMscyktaVY7aWYob3x8KG89YT1mVigpKSxvLm1vdmVUbyhwLGYpLG8uYXJjKDAsMCx1LGgsZCksaD09PWcmJmQ9PT1ffHwoby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxtKnRWKGcpLG0qZVYoZykpLG8uYXJjKDAsMCxtLGcsXykpLG8ucXVhZHJhdGljQ3VydmVUbygwLDAscCxmKSxvLmNsb3NlUGF0aCgpLGEpcmV0dXJuIG89bnVsbCxhKyIifHxudWxsfXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmxWKCt0KSxhKTpufSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpsVigrdCksYSk6aX0sYS5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmxWKCt0KSxhKTpyfSxhLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGEpOnR9LGEudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsYSk6ZX0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW51bGw9PXQ/bnVsbDp0LGEpOm99LGF9LG5lc3Q6ZnVuY3Rpb24gSmR0KCl7dmFyIHQsZSxuLGk9W10scj1bXTtmdW5jdGlvbiBvKG4scixhLHMpe2lmKHI+PWkubGVuZ3RoKXJldHVybiBudWxsIT10JiZuLnNvcnQodCksbnVsbCE9ZT9lKG4pOm47Zm9yKHZhciBsLGMsdSxoPS0xLGQ9bi5sZW5ndGgscD1pW3IrK10sZj13VigpLG09YSgpOysraDxkOykodT1mLmdldChsPXAoYz1uW2hdKSsiIikpP3UucHVzaChjKTpmLnNldChsLFtjXSk7cmV0dXJuIGYuZWFjaCgoZnVuY3Rpb24odCxlKXtzKG0sZSxvKHQscixhLHMpKX0pKSxtfWZ1bmN0aW9uIGEodCxuKXtpZigrK24+aS5sZW5ndGgpcmV0dXJuIHQ7dmFyIG8scz1yW24tMV07cmV0dXJuIG51bGwhPWUmJm4+PWkubGVuZ3RoP289dC5lbnRyaWVzKCk6KG89W10sdC5lYWNoKChmdW5jdGlvbih0LGUpe28ucHVzaCh7a2V5OmUsdmFsdWVzOmEodCxuKX0pfSkpKSxudWxsIT1zP28uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gcyh0LmtleSxlLmtleSl9KSk6b31yZXR1cm4gbj17b2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHQsMCxTVixNVil9LG1hcDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0LDAsRVYsVFYpfSxlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBhKG8odCwwLEVWLFRWKSwwKX0sa2V5OmZ1bmN0aW9uKHQpe3JldHVybiBpLnB1c2godCksbn0sc29ydEtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIHJbaS5sZW5ndGgtMV09dCxufSxzb3J0VmFsdWVzOmZ1bmN0aW9uKGUpe3JldHVybiB0PWUsbn0scm9sbHVwOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQsbn19fSxzZXQ6a1YsbWFwOndWLGtleXM6ZnVuY3Rpb24gUWR0KHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaChuKTtyZXR1cm4gZX0sdmFsdWVzOmZ1bmN0aW9uIHRwdCh0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2godFtuXSk7cmV0dXJuIGV9LGVudHJpZXM6ZnVuY3Rpb24gZXB0KHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaCh7a2V5Om4sdmFsdWU6dFtuXX0pO3JldHVybiBlfSxjb2xvcjpZVixyZ2I6WlYsaHNsOmVVLGxhYjpkVSxoY2w6dlUsY3ViZWhlbGl4OkVVLGRpc3BhdGNoOkFVLGRyYWc6ZnVuY3Rpb24gbnB0KCl7dmFyIHQsZSxuLGkscj1pRyxvPXJHLGE9b0cscz1hRyxsPXt9LGM9UlUoInN0YXJ0IiwiZHJhZyIsImVuZCIpLHU9MCxoPTA7ZnVuY3Rpb24gZCh0KXt0Lm9uKCJtb3VzZWRvd24uZHJhZyIscCkuZmlsdGVyKHMpLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLGcpLm9uKCJ0b3VjaG1vdmUuZHJhZyIsXykub24oInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZyIseSkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIHAoKXtpZighaSYmci5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBhPXYoIm1vdXNlIixvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwkaix0aGlzLGFyZ3VtZW50cyk7YSYmKHFqKFJqLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyIsZiwhMCkub24oIm1vdXNldXAuZHJhZyIsbSwhMCksUWooUmoudmlldyksWmooKSxuPSExLHQ9UmouY2xpZW50WCxlPVJqLmNsaWVudFksYSgic3RhcnQiKSl9fWZ1bmN0aW9uIGYoKXtpZihKaigpLCFuKXt2YXIgaT1Sai5jbGllbnRYLXQscj1Sai5jbGllbnRZLWU7bj1pKmkrcipyPmh9bC5tb3VzZSgiZHJhZyIpfWZ1bmN0aW9uIG0oKXtxaihSai52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSx0RyhSai52aWV3LG4pLEpqKCksbC5tb3VzZSgiZW5kIil9ZnVuY3Rpb24gZygpe2lmKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdCxlLG49UmouY2hhbmdlZFRvdWNoZXMsaT1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhPW4ubGVuZ3RoO2Zvcih0PTA7dDxhOysrdCkoZT12KG5bdF0uaWRlbnRpZmllcixpLEtqLHRoaXMsYXJndW1lbnRzKSkmJihaaigpLGUoInN0YXJ0IikpfX1mdW5jdGlvbiBfKCl7dmFyIHQsZSxuPVJqLmNoYW5nZWRUb3VjaGVzLGk9bi5sZW5ndGg7Zm9yKHQ9MDt0PGk7Kyt0KShlPWxbblt0XS5pZGVudGlmaWVyXSkmJihKaigpLGUoImRyYWciKSl9ZnVuY3Rpb24geSgpe3ZhciB0LGUsbj1Sai5jaGFuZ2VkVG91Y2hlcyxyPW4ubGVuZ3RoO2ZvcihpJiZjbGVhclRpbWVvdXQoaSksaT1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2k9bnVsbH0pLDUwMCksdD0wO3Q8cjsrK3QpKGU9bFtuW3RdLmlkZW50aWZpZXJdKSYmKFpqKCksZSgiZW5kIikpfWZ1bmN0aW9uIHYodCxlLG4saSxyKXt2YXIgbyxzLGgscD1uKGUsdCksZj1jLmNvcHkoKTtpZihGaihuZXcgbkcoZCwiYmVmb3Jlc3RhcnQiLG8sdCx1LHBbMF0scFsxXSwwLDAsZiksKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPShSai5zdWJqZWN0PW89YS5hcHBseShpLHIpKSYmKHM9by54LXBbMF18fDAsaD1vLnktcFsxXXx8MCwhMCl9KSkpcmV0dXJuIGZ1bmN0aW9uIGEoYyl7dmFyIG0sZz1wO3N3aXRjaChjKXtjYXNlInN0YXJ0IjpsW3RdPWEsbT11Kys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBsW3RdLC0tdTtjYXNlImRyYWciOnA9bihlLHQpLG09dX1GaihuZXcgbkcoZCxjLG8sdCxtLHBbMF0rcyxwWzFdK2gscFswXS1nWzBdLHBbMV0tZ1sxXSxmKSxmLmFwcGx5LGYsW2MsaSxyXSl9fXJldHVybiBkLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVHKCEhdCksZCk6cn0sZC5jb250YWluZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDplRyh0KSxkKTpvfSxkLnN1YmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDplRyh0KSxkKTphfSxkLnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVHKCEhdCksZCk6c30sZC5vbj1mdW5jdGlvbigpe3ZhciB0PWMub24uYXBwbHkoYyxhcmd1bWVudHMpO3JldHVybiB0PT09Yz9kOnR9LGQuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0odD0rdCkqdCxkKTpNYXRoLnNxcnQoaCl9LGR9LGRyYWdEaXNhYmxlOlFqLGRyYWdFbmFibGU6dEcsZHN2Rm9ybWF0OlZHLGNzdlBhcnNlOmpHLGNzdlBhcnNlUm93czpHRyxjc3ZGb3JtYXQ6V0csY3N2Rm9ybWF0Um93czpxRyx0c3ZQYXJzZTpYRyx0c3ZQYXJzZVJvd3M6JEcsdHN2Rm9ybWF0OktHLHRzdkZvcm1hdFJvd3M6WkcsZWFzZUxpbmVhcjpmdW5jdGlvbiBpcHQodCl7cmV0dXJuK3R9LGVhc2VRdWFkOkpHLGVhc2VRdWFkSW46ZnVuY3Rpb24gcnB0KHQpe3JldHVybiB0KnR9LGVhc2VRdWFkT3V0OmZ1bmN0aW9uIG9wdCh0KXtyZXR1cm4gdCooMi10KX0sZWFzZVF1YWRJbk91dDpKRyxlYXNlQ3ViaWM6UUcsZWFzZUN1YmljSW46ZnVuY3Rpb24gYXB0KHQpe3JldHVybiB0KnQqdH0sZWFzZUN1YmljT3V0OmZ1bmN0aW9uIHNwdCh0KXtyZXR1cm4tLXQqdCp0KzF9LGVhc2VDdWJpY0luT3V0OlFHLGVhc2VQb2x5Om5XLGVhc2VQb2x5SW46dFcsZWFzZVBvbHlPdXQ6ZVcsZWFzZVBvbHlJbk91dDpuVyxlYXNlU2luOm9XLGVhc2VTaW5JbjpmdW5jdGlvbiBscHQodCl7cmV0dXJuIDEtTWF0aC5jb3ModCpyVyl9LGVhc2VTaW5PdXQ6ZnVuY3Rpb24gY3B0KHQpe3JldHVybiBNYXRoLnNpbih0KnJXKX0sZWFzZVNpbkluT3V0Om9XLGVhc2VFeHA6YVcsZWFzZUV4cEluOmZ1bmN0aW9uIHVwdCh0KXtyZXR1cm4gTWF0aC5wb3coMiwxMCp0LTEwKX0sZWFzZUV4cE91dDpmdW5jdGlvbiBocHQodCl7cmV0dXJuIDEtTWF0aC5wb3coMiwtMTAqdCl9LGVhc2VFeHBJbk91dDphVyxlYXNlQ2lyY2xlOnNXLGVhc2VDaXJjbGVJbjpmdW5jdGlvbiBkcHQodCl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtdCp0KX0sZWFzZUNpcmNsZU91dDpmdW5jdGlvbiBwcHQodCl7cmV0dXJuIE1hdGguc3FydCgxLSAtLXQqdCl9LGVhc2VDaXJjbGVJbk91dDpzVyxlYXNlQm91bmNlOmNXLGVhc2VCb3VuY2VJbjpmdW5jdGlvbiBmcHQodCl7cmV0dXJuIDEtY1coMS10KX0sZWFzZUJvdW5jZU91dDpjVyxlYXNlQm91bmNlSW5PdXQ6ZnVuY3Rpb24gbXB0KHQpe3JldHVybigodCo9Mik8PTE/MS1jVygxLXQpOmNXKHQtMSkrMSkvMn0sZWFzZUJhY2s6cFcsZWFzZUJhY2tJbjpoVyxlYXNlQmFja091dDpkVyxlYXNlQmFja0luT3V0OnBXLGVhc2VFbGFzdGljOmdXLGVhc2VFbGFzdGljSW46bVcsZWFzZUVsYXN0aWNPdXQ6Z1csZWFzZUVsYXN0aWNJbk91dDpfVyxmb3JjZUNlbnRlcjpmdW5jdGlvbiBncHQodCxlKXt2YXIgbjtmdW5jdGlvbiBpKCl7dmFyIGkscixvPW4ubGVuZ3RoLGE9MCxzPTA7Zm9yKGk9MDtpPG87KytpKWErPShyPW5baV0pLngscys9ci55O2ZvcihhPWEvby10LHM9cy9vLWUsaT0wO2k8bzsrK2kpKHI9bltpXSkueC09YSxyLnktPXN9cmV0dXJuIG51bGw9PXQmJih0PTApLG51bGw9PWUmJihlPTApLGkuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXR9LGkueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSxpKTp0fSxpLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3QsaSk6ZX0saX0sZm9yY2VDb2xsaWRlOmZ1bmN0aW9uIF9wdCh0KXt2YXIgZSxuLGk9MSxyPTE7ZnVuY3Rpb24gbygpe2Zvcih2YXIgdCxvLHMsbCxjLHUsaCxkPWUubGVuZ3RoLHA9MDtwPHI7KytwKWZvcihvPU1XKGUsQVcsa1cpLnZpc2l0QWZ0ZXIoYSksdD0wO3Q8ZDsrK3QpaD0odT1uWyhzPWVbdF0pLmluZGV4XSkqdSxsPXMueCtzLnZ4LGM9cy55K3Mudnksby52aXNpdChmKTtmdW5jdGlvbiBmKHQsZSxuLHIsbyl7dmFyIGE9dC5kYXRhLGQ9dC5yLHA9dStkO2lmKCFhKXJldHVybiBlPmwrcHx8cjxsLXB8fG4+YytwfHxvPGMtcDtpZihhLmluZGV4PnMuaW5kZXgpe3ZhciBmPWwtYS54LWEudngsbT1jLWEueS1hLnZ5LGc9ZipmK20qbTtnPHAqcCYmKDA9PT1mJiYoZys9KGY9dlcoKSkqZiksMD09PW0mJihnKz0obT12VygpKSptKSxnPShwLShnPU1hdGguc3FydChnKSkpL2cqaSxzLnZ4Kz0oZio9ZykqKHA9KGQqPWQpLyhoK2QpKSxzLnZ5Kz0obSo9ZykqcCxhLnZ4LT1mKihwPTEtcCksYS52eS09bSpwKX19fWZ1bmN0aW9uIGEodCl7aWYodC5kYXRhKXJldHVybiB0LnI9blt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIGkscixvPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShvKSxpPTA7aTxvOysraSluWyhyPWVbaV0pLmluZGV4XT0rdChyLGksZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD15VyhudWxsPT10PzE6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LHMoKX0sby5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LG8pOnJ9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3Qsbyk6aX0sby5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp5VygrZSkscygpLG8pOnR9LG99LGZvcmNlTGluazpmdW5jdGlvbiB5cHQodCl7dmFyIGUsbixpLHIsbyxhPSRXLHM9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gMS9NYXRoLm1pbihyW3Quc291cmNlLmluZGV4XSxyW3QudGFyZ2V0LmluZGV4XSl9LGM9eVcoMzApLHU9MTtmdW5jdGlvbiBoKGkpe2Zvcih2YXIgcj0wLGE9dC5sZW5ndGg7cjx1Oysrcilmb3IodmFyIHMsbCxjLGgsZCxwLGYsbT0wO208YTsrK20paD0oYz0ocz10W21dKS50YXJnZXQpLngrYy52eC0obD1zLnNvdXJjZSkueC1sLnZ4fHx2VygpLGQ9Yy55K2MudnktbC55LWwudnl8fHZXKCksZCo9cD0oKHA9TWF0aC5zcXJ0KGgqaCtkKmQpKS1uW21dKS9wKmkqZVttXSxjLnZ4LT0oaCo9cCkqKGY9b1ttXSksYy52eS09ZCpmLGwudngrPWgqKGY9MS1mKSxsLnZ5Kz1kKmZ9ZnVuY3Rpb24gZCgpe2lmKGkpe3ZhciBzLGwsYz1pLmxlbmd0aCx1PXQubGVuZ3RoLGg9cVcoaSxhKTtmb3Iocz0wLHI9bmV3IEFycmF5KGMpO3M8dTsrK3MpKGw9dFtzXSkuaW5kZXg9cywib2JqZWN0IiE9dHlwZW9mIGwuc291cmNlJiYobC5zb3VyY2U9S1coaCxsLnNvdXJjZSkpLCJvYmplY3QiIT10eXBlb2YgbC50YXJnZXQmJihsLnRhcmdldD1LVyhoLGwudGFyZ2V0KSkscltsLnNvdXJjZS5pbmRleF09KHJbbC5zb3VyY2UuaW5kZXhdfHwwKSsxLHJbbC50YXJnZXQuaW5kZXhdPShyW2wudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3Iocz0wLG89bmV3IEFycmF5KHUpO3M8dTsrK3Mpb1tzXT1yWyhsPXRbc10pLnNvdXJjZS5pbmRleF0vKHJbbC5zb3VyY2UuaW5kZXhdK3JbbC50YXJnZXQuaW5kZXhdKTtlPW5ldyBBcnJheSh1KSxwKCksbj1uZXcgQXJyYXkodSksZigpfX1mdW5jdGlvbiBwKCl7aWYoaSlmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjsrK24pZVtuXT0rcyh0W25dLG4sdCl9ZnVuY3Rpb24gZigpe2lmKGkpZm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKW5bZV09K2ModFtlXSxlLHQpfXJldHVybiBudWxsPT10JiYodD1bXSksaC5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCxkKCl9LGgubGlua3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxkKCksaCk6dH0saC5pZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LGgpOmF9LGguaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxoKTp1fSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eVcoK3QpLHAoKSxoKTpzfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eVcoK3QpLGYoKSxoKTpjfSxofSxmb3JjZU1hbnlCb2R5OmZ1bmN0aW9uIHZwdCgpe3ZhciB0LGUsbixpLHI9eVcoLTMwKSxvPTEsYT0xLzAscz0uODE7ZnVuY3Rpb24gbChpKXt2YXIgcixvPXQubGVuZ3RoLGE9TVcodCxicSx4cSkudmlzaXRBZnRlcih1KTtmb3Iobj1pLHI9MDtyPG87KytyKWU9dFtyXSxhLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZih0KXt2YXIgZSxuLG89dC5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KG8pLGU9MDtlPG87KytlKWlbKG49dFtlXSkuaW5kZXhdPStyKG4sZSx0KX19ZnVuY3Rpb24gdSh0KXt2YXIgZSxuLHIsbyxhLHM9MCxsPTA7aWYodC5sZW5ndGgpe2ZvcihyPW89YT0wO2E8NDsrK2EpKGU9dFthXSkmJihuPU1hdGguYWJzKGUudmFsdWUpKSYmKHMrPWUudmFsdWUsbCs9bixyKz1uKmUueCxvKz1uKmUueSk7dC54PXIvbCx0Lnk9by9sfWVsc2V7KGU9dCkueD1lLmRhdGEueCxlLnk9ZS5kYXRhLnk7ZG97cys9aVtlLmRhdGEuaW5kZXhdfXdoaWxlKGU9ZS5uZXh0KX10LnZhbHVlPXN9ZnVuY3Rpb24gaCh0LHIsbCxjKXtpZighdC52YWx1ZSlyZXR1cm4hMDt2YXIgdT10LngtZS54LGg9dC55LWUueSxkPWMtcixwPXUqdStoKmg7aWYoZCpkL3M8cClyZXR1cm4gcDxhJiYoMD09PXUmJihwKz0odT12VygpKSp1KSwwPT09aCYmKHArPShoPXZXKCkpKmgpLHA8byYmKHA9TWF0aC5zcXJ0KG8qcCkpLGUudngrPXUqdC52YWx1ZSpuL3AsZS52eSs9aCp0LnZhbHVlKm4vcCksITA7aWYoISh0Lmxlbmd0aHx8cD49YSkpeyh0LmRhdGEhPT1lfHx0Lm5leHQpJiYoMD09PXUmJihwKz0odT12VygpKSp1KSwwPT09aCYmKHArPShoPXZXKCkpKmgpLHA8byYmKHA9TWF0aC5zcXJ0KG8qcCkpKTtkb3t0LmRhdGEhPT1lJiYoZS52eCs9dSooZD1pW3QuZGF0YS5pbmRleF0qbi9wKSxlLnZ5Kz1oKmQpfXdoaWxlKHQ9dC5uZXh0KX19cmV0dXJuIGwuaW5pdGlhbGl6ZT1mdW5jdGlvbihlKXt0PWUsYygpfSxsLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eVcoK3QpLGMoKSxsKTpyfSxsLmRpc3RhbmNlTWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQqdCxsKTpNYXRoLnNxcnQobyl9LGwuZGlzdGFuY2VNYXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCp0LGwpOk1hdGguc3FydChhKX0sbC50aGV0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10KnQsbCk6TWF0aC5zcXJ0KHMpfSxsfSxmb3JjZVJhZGlhbDpmdW5jdGlvbiBicHQodCxlLG4pe3ZhciBpLHIsbyxhPXlXKC4xKTtmdW5jdGlvbiBzKHQpe2Zvcih2YXIgYT0wLHM9aS5sZW5ndGg7YTxzOysrYSl7dmFyIGw9aVthXSxjPWwueC1lfHwxZS02LHU9bC55LW58fDFlLTYsaD1NYXRoLnNxcnQoYypjK3UqdSksZD0ob1thXS1oKSpyW2FdKnQvaDtsLnZ4Kz1jKmQsbC52eSs9dSpkfX1mdW5jdGlvbiBsKCl7aWYoaSl7dmFyIGUsbj1pLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobiksZT0wO2U8bjsrK2Upb1tlXT0rdChpW2VdLGUsaSkscltlXT1pc05hTihvW2VdKT8wOithKGlbZV0sZSxpKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXlXKCt0KSksbnVsbD09ZSYmKGU9MCksbnVsbD09biYmKG49MCkscy5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCxsKCl9LHMuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp5VygrdCksbCgpLHMpOmF9LHMucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6eVcoK2UpLGwoKSxzKTp0fSxzLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qscyk6ZX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHMpOm59LHN9LGZvcmNlU2ltdWxhdGlvbjpmdW5jdGlvbiB4cHQodCl7dmFyIGUsbj0xLGk9LjAwMSxyPTEtTWF0aC5wb3coaSwxLzMwMCksbz0wLGE9LjYscz1xVygpLGw9Z3EodSksYz1KVygidGljayIsImVuZCIpO2Z1bmN0aW9uIHUoKXtoKCksYy5jYWxsKCJ0aWNrIixlKSxuPGkmJihsLnN0b3AoKSxjLmNhbGwoImVuZCIsZSkpfWZ1bmN0aW9uIGgoKXt2YXIgZSxpLGw9dC5sZW5ndGg7Zm9yKG4rPShvLW4pKnIscy5lYWNoKChmdW5jdGlvbih0KXt0KG4pfSkpLGU9MDtlPGw7KytlKW51bGw9PShpPXRbZV0pLmZ4P2kueCs9aS52eCo9YTooaS54PWkuZngsaS52eD0wKSxudWxsPT1pLmZ5P2kueSs9aS52eSo9YTooaS55PWkuZnksaS52eT0wKX1mdW5jdGlvbiBkKCl7Zm9yKHZhciBlLG49MCxpPXQubGVuZ3RoO248aTsrK24pe2lmKChlPXRbbl0pLmluZGV4PW4saXNOYU4oZS54KXx8aXNOYU4oZS55KSl7dmFyIHI9MTAqTWF0aC5zcXJ0KG4pLG89bipTcTtlLng9cipNYXRoLmNvcyhvKSxlLnk9cipNYXRoLnNpbihvKX0oaXNOYU4oZS52eCl8fGlzTmFOKGUudnkpKSYmKGUudng9ZS52eT0wKX19ZnVuY3Rpb24gcChlKXtyZXR1cm4gZS5pbml0aWFsaXplJiZlLmluaXRpYWxpemUodCksZX1yZXR1cm4gbnVsbD09dCYmKHQ9W10pLGQoKSxlPXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBsLnJlc3RhcnQodSksZX0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBsLnN0b3AoKSxlfSxub2RlczpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGQoKSxzLmVhY2gocCksZSk6dH0sYWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsZSk6bn0sYWxwaGFNaW46ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3QsZSk6aX0sYWxwaGFEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxlKTorcn0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsZSk6b30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0xLXQsZSk6MS1hfSxmb3JjZTpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KG51bGw9PW4/cy5yZW1vdmUodCk6cy5zZXQodCxwKG4pKSxlKTpzLmdldCh0KX0sZmluZDpmdW5jdGlvbihlLG4saSl7dmFyIHIsbyxhLHMsbCxjPTAsdT10Lmxlbmd0aDtmb3IobnVsbD09aT9pPTEvMDppKj1pLGM9MDtjPHU7KytjKShhPShyPWUtKHM9dFtjXSkueCkqcisobz1uLXMueSkqbyk8aSYmKGw9cyxpPWEpO3JldHVybiBsfSxvbjpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGMub24odCxuKSxlKTpjLm9uKHQpfX19LGZvcmNlWDpmdW5jdGlvbiB3cHQodCl7dmFyIGUsbixpLHI9eVcoLjEpO2Z1bmN0aW9uIG8odCl7Zm9yKHZhciByLG89MCxhPWUubGVuZ3RoO288YTsrK28pKHI9ZVtvXSkudngrPShpW29dLXIueCkqbltvXSp0fWZ1bmN0aW9uIGEoKXtpZihlKXt2YXIgbyxhPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShhKSxpPW5ldyBBcnJheShhKSxvPTA7bzxhOysrbyluW29dPWlzTmFOKGlbb109K3QoZVtvXSxvLGUpKT8wOityKGVbb10sbyxlKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXlXKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eVcoK3QpLGEoKSxvKTpyfSxvLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp5VygrZSksYSgpLG8pOnR9LG99LGZvcmNlWTpmdW5jdGlvbiBTcHQodCl7dmFyIGUsbixpLHI9eVcoLjEpO2Z1bmN0aW9uIG8odCl7Zm9yKHZhciByLG89MCxhPWUubGVuZ3RoO288YTsrK28pKHI9ZVtvXSkudnkrPShpW29dLXIueSkqbltvXSp0fWZ1bmN0aW9uIGEoKXtpZihlKXt2YXIgbyxhPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShhKSxpPW5ldyBBcnJheShhKSxvPTA7bzxhOysrbyluW29dPWlzTmFOKGlbb109K3QoZVtvXSxvLGUpKT8wOityKGVbb10sbyxlKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXlXKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eVcoK3QpLGEoKSxvKTpyfSxvLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp5VygrZSksYSgpLG8pOnR9LG99LGZvcm1hdERlZmF1bHRMb2NhbGU6SHEsZ2V0IGZvcm1hdCgpe3JldHVybiBPcX0sZ2V0IGZvcm1hdFByZWZpeCgpe3JldHVybiB6cX0sZm9ybWF0TG9jYWxlOkJxLGZvcm1hdFNwZWNpZmllcjpQcSxwcmVjaXNpb25GaXhlZDpmdW5jdGlvbiBNcHQodCl7cmV0dXJuIE1hdGgubWF4KDAsLUVxKE1hdGguYWJzKHQpKSl9LHByZWNpc2lvblByZWZpeDpmdW5jdGlvbiBFcHQodCxlKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihFcShlKS8zKSkpLUVxKE1hdGguYWJzKHQpKSl9LHByZWNpc2lvblJvdW5kOmZ1bmN0aW9uIFRwdCh0LGUpe3JldHVybiB0PU1hdGguYWJzKHQpLGU9TWF0aC5hYnMoZSktdCxNYXRoLm1heCgwLEVxKGUpLUVxKHQpKSsxfSxnZW9BcmVhOmZ1bmN0aW9uIENwdCh0KXtyZXR1cm4gRVkucmVzZXQoKSx5WSh0LFRZKSwyKkVZfSxnZW9Cb3VuZHM6ZnVuY3Rpb24gQXB0KHQpe3ZhciBlLG4saSxyLG8sYSxzO2lmKFZZPUZZPS0oQlk9SFk9MS8wKSxxWT1bXSx5WSh0LGhYKSxuPXFZLmxlbmd0aCl7Zm9yKHFZLnNvcnQoYlgpLGU9MSxvPVtpPXFZWzBdXTtlPG47KytlKXhYKGksKHI9cVlbZV0pWzBdKXx8eFgoaSxyWzFdKT8odlgoaVswXSxyWzFdKT52WChpWzBdLGlbMV0pJiYoaVsxXT1yWzFdKSx2WChyWzBdLGlbMV0pPnZYKGlbMF0saVsxXSkmJihpWzBdPXJbMF0pKTpvLnB1c2goaT1yKTtmb3IoYT0tMS8wLGU9MCxpPW9bbj1vLmxlbmd0aC0xXTtlPD1uO2k9ciwrK2UpKHM9dlgoaVsxXSwocj1vW2VdKVswXSkpPmEmJihhPXMsQlk9clswXSxGWT1pWzFdKX1yZXR1cm4gcVk9WVk9bnVsbCxCWT09PTEvMHx8SFk9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbQlksSFldLFtGWSxWWV1dfSxnZW9DZW50cm9pZDpmdW5jdGlvbiBrcHQodCl7WFk9JFk9S1k9Wlk9Slk9UVk9dFg9ZVg9blg9aVg9clg9MCx5WSh0LHdYKTt2YXIgZT1uWCxuPWlYLGk9clgscj1lKmUrbipuK2kqaTtyZXR1cm4gcjwxZS0xMiYmKGU9UVksbj10WCxpPWVYLCRZPEdxJiYoZT1LWSxuPVpZLGk9SlkpLChyPWUqZStuKm4raSppKTwxZS0xMik/W05hTixOYU5dOltRcShuLGUpKiRxLHVZKGkvc1kocikpKiRxXX0sZ2VvQ2lyY2xlOmZ1bmN0aW9uIExwdCgpe3ZhciB0LGUsbj1JWChbMCwwXSksaT1JWCg5MCkscj1JWCg2KSxvPXtwb2ludDpmdW5jdGlvbiBhKG4saSl7dC5wdXNoKG49ZShuLGkpKSxuWzBdKj0kcSxuWzFdKj0kcX19O2Z1bmN0aW9uIHMoKXt2YXIgYT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpKktxLGw9ci5hcHBseSh0aGlzLGFyZ3VtZW50cykqS3E7cmV0dXJuIHQ9W10sZT16WCgtYVswXSpLcSwtYVsxXSpLcSwwKS5pbnZlcnQsVlgobyxzLGwsMSksYT17dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3RdfSx0PWU9bnVsbCxhfXJldHVybiBzLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OklYKFsrdFswXSwrdFsxXV0pLHMpOm59LHMucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SVgoK3QpLHMpOml9LHMucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SVgoK3QpLHMpOnJ9LHN9LGdlb0NsaXBBbnRpbWVyaWRpYW46aSQsZ2VvQ2xpcENpcmNsZTphJCxnZW9DbGlwRXh0ZW50OmZ1bmN0aW9uIFBwdCgpe3ZhciB0LGUsbixpPTAscj0wLG89OTYwLGE9NTAwO3JldHVybiBuPXtzdHJlYW06ZnVuY3Rpb24obil7cmV0dXJuIHQmJmU9PT1uP3Q6dD1jJChpLHIsbyxhKShlPW4pfSxleHRlbnQ6ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3NbMF1bMF0scj0rc1swXVsxXSxvPStzWzFdWzBdLGE9K3NbMV1bMV0sdD1lPW51bGwsbik6W1tpLHJdLFtvLGFdXX19fSxnZW9DbGlwUmVjdGFuZ2xlOmMkLGdlb0NvbnRhaW5zOmZ1bmN0aW9uIE5wdCh0LGUpe3JldHVybih0JiZTJC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP1MkW3QudHlwZV06RSQpKHQsZSl9LGdlb0Rpc3RhbmNlOnckLGdlb0dyYXRpY3VsZTpJJCxnZW9HcmF0aWN1bGUxMDpmdW5jdGlvbiBJcHQoKXtyZXR1cm4gSSQoKSgpfSxnZW9JbnRlcnBvbGF0ZTpmdW5jdGlvbiBScHQodCxlKXt2YXIgbj10WzBdKktxLGk9dFsxXSpLcSxyPWVbMF0qS3Esbz1lWzFdKktxLGE9dFkoaSkscz1vWShpKSxsPXRZKG8pLGM9b1kobyksdT1hKnRZKG4pLGg9YSpvWShuKSxkPWwqdFkocikscD1sKm9ZKHIpLGY9Mip1WShzWShoWShvLWkpK2EqbCpoWShyLW4pKSksbT1vWShmKSxnPWY/ZnVuY3Rpb24odCl7dmFyIGU9b1kodCo9ZikvbSxuPW9ZKGYtdCkvbSxpPW4qdStlKmQscj1uKmgrZSpwLG89bipzK2UqYztyZXR1cm5bUXEocixpKSokcSxRcShvLHNZKGkqaStyKnIpKSokcV19OmZ1bmN0aW9uKCl7cmV0dXJuW24qJHEsaSokcV19O3JldHVybiBnLmRpc3RhbmNlPWYsZ30sZ2VvTGVuZ3RoOnYkLGdlb1BhdGg6ZnVuY3Rpb24gT3B0KHQsZSl7dmFyIG4saSxyPTQuNTtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiYoImZ1bmN0aW9uIj09dHlwZW9mIHImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx5WSh0LG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24odCl7cmV0dXJuIHlZKHQsbihWJCkpLFYkLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIHlZKHQsbihBSykpLEFLLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4geVkodCxuKHRLKSksdEsucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHlZKHQsbihoSykpLGhLLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09ZT8odD1udWxsLFIkKToodD1lKS5zdHJlYW0sbyk6dH0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/KGU9bnVsbCxuZXcgUEspOm5ldyB4SyhlPXQpLCJmdW5jdGlvbiIhPXR5cGVvZiByJiZpLnBvaW50UmFkaXVzKHIpLG8pOmV9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDooaS5wb2ludFJhZGl1cygrdCksK3QpLG8pOnJ9LG8ucHJvamVjdGlvbih0KS5jb250ZXh0KGUpfSxnZW9BbGJlcnM6WEssZ2VvQWxiZXJzVXNhOmZ1bmN0aW9uIHpwdCgpe3ZhciB0LGUsbixpLHIsbyxhPVhLKCkscz1ZSygpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4LjVdKS5wYXJhbGxlbHMoWzU1LDY1XSksbD1ZSygpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxjPXtwb2ludDpmdW5jdGlvbih0LGUpe289W3QsZV19fTtmdW5jdGlvbiB1KHQpe3ZhciBlPXRbMF0sYT10WzFdO3JldHVybiBvPW51bGwsbi5wb2ludChlLGEpLG98fChpLnBvaW50KGUsYSksbyl8fChyLnBvaW50KGUsYSksbyl9ZnVuY3Rpb24gaCgpe3JldHVybiB0PWU9bnVsbCx1fXJldHVybiB1LmludmVydD1mdW5jdGlvbih0KXt2YXIgZT1hLnNjYWxlKCksbj1hLnRyYW5zbGF0ZSgpLGk9KHRbMF0tblswXSkvZSxyPSh0WzFdLW5bMV0pL2U7cmV0dXJuKHI+PS4xMiYmcjwuMjM0JiZpPj0tLjQyNSYmaTwtLjIxND9zOnI+PS4xNjYmJnI8LjIzNCYmaT49LS4yMTQmJmk8LS4xMTU/bDphKS5pbnZlcnQodCl9LHUuc3RyZWFtPWZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OnQ9KGZ1bmN0aW9uIGkodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJue3BvaW50OmZ1bmN0aW9uKG4saSl7Zm9yKHZhciByPS0xOysrcjxlOyl0W3JdLnBvaW50KG4saSl9LHNwaGVyZTpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248ZTspdFtuXS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xOysrbjxlOyl0W25dLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xOysrbjxlOyl0W25dLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xOysrbjxlOyl0W25dLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xOysrbjxlOyl0W25dLnBvbHlnb25FbmQoKX19fSkoW2Euc3RyZWFtKGU9bikscy5zdHJlYW0obiksbC5zdHJlYW0obildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEucHJlY2lzaW9uKHQpLHMucHJlY2lzaW9uKHQpLGwucHJlY2lzaW9uKHQpLGgoKSk6YS5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYS5zY2FsZSh0KSxzLnNjYWxlKC4zNSp0KSxsLnNjYWxlKHQpLHUudHJhbnNsYXRlKGEudHJhbnNsYXRlKCkpKTphLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBhLnRyYW5zbGF0ZSgpO3ZhciBlPWEuc2NhbGUoKSxvPSt0WzBdLHU9K3RbMV07cmV0dXJuIG49YS50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW28tLjQ1NSplLHUtLjIzOCplXSxbbysuNDU1KmUsdSsuMjM4KmVdXSkuc3RyZWFtKGMpLGk9cy50cmFuc2xhdGUoW28tLjMwNyplLHUrLjIwMSplXSkuY2xpcEV4dGVudChbW28tLjQyNSplK0dxLHUrLjEyKmUrR3FdLFtvLS4yMTQqZS1HcSx1Ky4yMzQqZS1HcV1dKS5zdHJlYW0oYykscj1sLnRyYW5zbGF0ZShbby0uMjA1KmUsdSsuMjEyKmVdKS5jbGlwRXh0ZW50KFtbby0uMjE0KmUrR3EsdSsuMTY2KmUrR3FdLFtvLS4xMTUqZS1HcSx1Ky4yMzQqZS1HcV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3JldHVybiB6Syh1LHQsZSl9LHUuZml0U2l6ZT1mdW5jdGlvbih0LGUpe3JldHVybiBESyh1LHQsZSl9LHUuZml0V2lkdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQksodSx0LGUpfSx1LmZpdEhlaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBISyh1LHQsZSl9LHUuc2NhbGUoMTA3MCl9LGdlb0F6aW11dGhhbEVxdWFsQXJlYTpmdW5jdGlvbiBEcHQoKXtyZXR1cm4gaksoWkspLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE3OS45OTkpfSxnZW9BemltdXRoYWxFcXVhbEFyZWFSYXc6WkssZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnQ6ZnVuY3Rpb24gQnB0KCl7cmV0dXJuIGpLKEpLKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LGdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3OkpLLGdlb0NvbmljQ29uZm9ybWFsOmZ1bmN0aW9uIEhwdCgpe3JldHVybiBXSyhuWikuc2NhbGUoMTA5LjUpLnBhcmFsbGVscyhbMzAsMzBdKX0sZ2VvQ29uaWNDb25mb3JtYWxSYXc6blosZ2VvQ29uaWNFcXVhbEFyZWE6WUssZ2VvQ29uaWNFcXVhbEFyZWFSYXc6cUssZ2VvQ29uaWNFcXVpZGlzdGFudDpmdW5jdGlvbiBGcHQoKXtyZXR1cm4gV0soclopLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9LGdlb0NvbmljRXF1aWRpc3RhbnRSYXc6closZ2VvRXF1aXJlY3Rhbmd1bGFyOmZ1bmN0aW9uIFZwdCgpe3JldHVybiBqSyhpWikuc2NhbGUoMTUyLjYzKX0sZ2VvRXF1aXJlY3Rhbmd1bGFyUmF3OmlaLGdlb0dub21vbmljOmZ1bmN0aW9uIFVwdCgpe3JldHVybiBqSyhvWikuc2NhbGUoMTQ0LjA0OSkuY2xpcEFuZ2xlKDYwKX0sZ2VvR25vbW9uaWNSYXc6b1osZ2VvSWRlbnRpdHk6ZnVuY3Rpb24ganB0KCl7dmFyIHQsZSxuLGkscixvLGE9MSxzPTAsbD0wLGM9MSx1PTEsaD1SJCxkPW51bGwscD1SJDtmdW5jdGlvbiBmKCl7cmV0dXJuIGk9cj1udWxsLG99cmV0dXJuIG89e3N0cmVhbTpmdW5jdGlvbih0KXtyZXR1cm4gaSYmcj09PXQ/aTppPWgocChyPXQpKX0scG9zdGNsaXA6ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9aSxkPXQ9ZT1uPW51bGwsZigpKTpwfSxjbGlwRXh0ZW50OmZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPW51bGw9PWk/KGQ9dD1lPW49bnVsbCxSJCk6YyQoZD0raVswXVswXSx0PStpWzBdWzFdLGU9K2lbMV1bMF0sbj0raVsxXVsxXSksZigpKTpudWxsPT1kP251bGw6W1tkLHRdLFtlLG5dXX0sc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9YVooKGE9K3QpKmMsYSp1LHMsbCksZigpKTphfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9YVooYSpjLGEqdSxzPSt0WzBdLGw9K3RbMV0pLGYoKSk6W3MsbF19LHJlZmxlY3RYOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPWFaKGEqKGM9dD8tMToxKSxhKnUscyxsKSxmKCkpOmM8MH0scmVmbGVjdFk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9YVooYSpjLGEqKHU9dD8tMToxKSxzLGwpLGYoKSk6dTwwfSxmaXRFeHRlbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4geksobyx0LGUpfSxmaXRTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIERLKG8sdCxlKX0sZml0V2lkdGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gQksobyx0LGUpfSxmaXRIZWlnaHQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gSEsobyx0LGUpfX19LGdlb1Byb2plY3Rpb246akssZ2VvUHJvamVjdGlvbk11dGF0b3I6R0ssZ2VvTWVyY2F0b3I6ZnVuY3Rpb24gR3B0KCl7cmV0dXJuIHRaKFFLKS5zY2FsZSg5NjEvWHEpfSxnZW9NZXJjYXRvclJhdzpRSyxnZW9OYXR1cmFsRWFydGgxOmZ1bmN0aW9uIFdwdCgpe3JldHVybiBqSyhzWikuc2NhbGUoMTc1LjI5NSl9LGdlb05hdHVyYWxFYXJ0aDFSYXc6c1osZ2VvT3J0aG9ncmFwaGljOmZ1bmN0aW9uIHFwdCgpe3JldHVybiBqSyhsWikuc2NhbGUoMjQ5LjUpLmNsaXBBbmdsZSg5MC4wMDAwMDEpfSxnZW9PcnRob2dyYXBoaWNSYXc6bFosZ2VvU3RlcmVvZ3JhcGhpYzpmdW5jdGlvbiBZcHQoKXtyZXR1cm4gaksoY1opLnNjYWxlKDI1MCkuY2xpcEFuZ2xlKDE0Mil9LGdlb1N0ZXJlb2dyYXBoaWNSYXc6Y1osZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yOmZ1bmN0aW9uIFhwdCgpe3ZhciB0PXRaKHVaKSxlPXQuY2VudGVyLG49dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoWy10WzFdLHRbMF1dKTpbKHQ9ZSgpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9bigpKVswXSx0WzFdLHRbMl0tOTBdfSxuKFswLDAsOTBdKS5zY2FsZSgxNTkuMTU1KX0sZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yUmF3OnVaLGdlb1JvdGF0aW9uOkZYLGdlb1N0cmVhbTp5WSxnZW9UcmFuc2Zvcm06ZnVuY3Rpb24gJHB0KHQpe3JldHVybntzdHJlYW06SUsodCl9fSxjbHVzdGVyOmZ1bmN0aW9uIEtwdCgpe3ZhciB0PWhaLGU9MSxuPTEsaT0hMTtmdW5jdGlvbiByKHIpe3ZhciBvLGE9MDtyLmVhY2hBZnRlcigoZnVuY3Rpb24oZSl7dmFyIG49ZS5jaGlsZHJlbjtuPyhlLng9KGZ1bmN0aW9uIGkodCl7cmV0dXJuIHQucmVkdWNlKGRaLDApL3QubGVuZ3RofSkobiksZS55PShmdW5jdGlvbiByKHQpe3JldHVybiAxK3QucmVkdWNlKHBaLDApfSkobikpOihlLng9bz9hKz10KGUsbyk6MCxlLnk9MCxvPWUpfSkpO3ZhciBzPShmdW5jdGlvbiBsKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVswXTtyZXR1cm4gdH0pKHIpLGM9KGZ1bmN0aW9uIHUodCl7Zm9yKHZhciBlO2U9dC5jaGlsZHJlbjspdD1lW2UubGVuZ3RoLTFdO3JldHVybiB0fSkociksaD1zLngtdChzLGMpLzIsZD1jLngrdChjLHMpLzI7cmV0dXJuIHIuZWFjaEFmdGVyKGk/ZnVuY3Rpb24odCl7dC54PSh0Lngtci54KSplLHQueT0oci55LXQueSkqbn06ZnVuY3Rpb24odCl7dC54PSh0LngtaCkvKGQtaCkqZSx0Lnk9KDEtKHIueT90Lnkvci55OjEpKSpufSl9cmV0dXJuIHIuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHIpOnR9LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hMSxlPSt0WzBdLG49K3RbMV0scik6aT9udWxsOltlLG5dfSxyLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSEwLGU9K3RbMF0sbj0rdFsxXSxyKTppP1tlLG5dOm51bGx9LHJ9LGhpZXJhcmNoeTptWixwYWNrOmZ1bmN0aW9uIFpwdCgpe3ZhciB0PW51bGwsZT0xLG49MSxpPVhaO2Z1bmN0aW9uIHIocil7cmV0dXJuIHIueD1lLzIsci55PW4vMix0P3IuZWFjaEJlZm9yZShaWih0KSkuZWFjaEFmdGVyKEpaKGksLjUpKS5lYWNoQmVmb3JlKFFaKDEpKTpyLmVhY2hCZWZvcmUoWlooS1opKS5lYWNoQWZ0ZXIoSlooWFosMSkpLmVhY2hBZnRlcihKWihpLHIuci9NYXRoLm1pbihlLG4pKSkuZWFjaEJlZm9yZShRWihNYXRoLm1pbihlLG4pLygyKnIucikpKSxyfXJldHVybiByLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1xWihlKSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0sbj0rdFsxXSxyKTpbZSxuXX0sci5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6JFooK3QpLHIpOml9LHJ9LHBhY2tTaWJsaW5nczpmdW5jdGlvbiBKcHQodCl7cmV0dXJuIFdaKHQpLHR9LHBhY2tFbmNsb3NlOklaLHBhcnRpdGlvbjpmdW5jdGlvbiBRcHQoKXt2YXIgdD0xLGU9MSxuPTAsaT0hMTtmdW5jdGlvbiByKHIpe3ZhciBvPXIuaGVpZ2h0KzE7cmV0dXJuIHIueDA9ci55MD1uLHIueDE9dCxyLnkxPWUvbyxyLmVhY2hCZWZvcmUoKGZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gZnVuY3Rpb24oaSl7aS5jaGlsZHJlbiYmZUooaSxpLngwLHQqKGkuZGVwdGgrMSkvZSxpLngxLHQqKGkuZGVwdGgrMikvZSk7dmFyIHI9aS54MCxvPWkueTAsYT1pLngxLW4scz1pLnkxLW47YTxyJiYocj1hPShyK2EpLzIpLHM8byYmKG89cz0obytzKS8yKSxpLngwPXIsaS55MD1vLGkueDE9YSxpLnkxPXN9fSkoZSxvKSksaSYmci5lYWNoQmVmb3JlKHRKKSxyfXJldHVybiByLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSEhdCxyKTppfSxyLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K25bMF0sZT0rblsxXSxyKTpbdCxlXX0sci5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHIpOm59LHJ9LHN0cmF0aWZ5OmZ1bmN0aW9uIHRmdCgpe3ZhciB0PXJKLGU9b0o7ZnVuY3Rpb24gbihuKXt2YXIgaSxyLG8sYSxzLGwsYyx1PW4ubGVuZ3RoLGg9bmV3IEFycmF5KHUpLGQ9e307Zm9yKHI9MDtyPHU7KytyKXM9aFtyXT1uZXcgdlooaT1uW3JdKSxudWxsIT0obD10KGkscixuKSkmJihsKz0iIikmJihkW2M9IiQiKyhzLmlkPWwpXT1jIGluIGQ/aUo6cyk7Zm9yKHI9MDtyPHU7KytyKWlmKHM9aFtyXSxudWxsIT0obD1lKG5bcl0scixuKSkmJihsKz0iIikpe2lmKCEoYT1kWyIkIitsXSkpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2wpO2lmKGE9PT1pSil0aHJvdyBuZXcgRXJyb3IoImFtYmlndW91czogIitsKTthLmNoaWxkcmVuP2EuY2hpbGRyZW4ucHVzaChzKTphLmNoaWxkcmVuPVtzXSxzLnBhcmVudD1hfWVsc2V7aWYobyl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIHJvb3RzIik7bz1zfWlmKCFvKXRocm93IG5ldyBFcnJvcigibm8gcm9vdCIpO2lmKG8ucGFyZW50PW5KLG8uZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC5kZXB0aD10LnBhcmVudC5kZXB0aCsxLC0tdX0pKS5lYWNoQmVmb3JlKHlaKSxvLnBhcmVudD1udWxsLHU+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIG99cmV0dXJuIG4uaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9WVooZSksbik6dH0sbi5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1ZWih0KSxuKTplfSxufSx0cmVlOmZ1bmN0aW9uIGVmdCgpe3ZhciB0PWFKLGU9MSxuPTEsaT1udWxsO2Z1bmN0aW9uIHIocil7dmFyIGw9KGZ1bmN0aW9uIGModCl7Zm9yKHZhciBlLG4saSxyLG8sYT1uZXcgaEoodCwwKSxzPVthXTtlPXMucG9wKCk7KWlmKGk9ZS5fLmNoaWxkcmVuKWZvcihlLmNoaWxkcmVuPW5ldyBBcnJheShvPWkubGVuZ3RoKSxyPW8tMTtyPj0wOy0tcilzLnB1c2gobj1lLmNoaWxkcmVuW3JdPW5ldyBoSihpW3JdLHIpKSxuLnBhcmVudD1lO3JldHVybihhLnBhcmVudD1uZXcgaEoobnVsbCwwKSkuY2hpbGRyZW49W2FdLGF9KShyKTtpZihsLmVhY2hBZnRlcihvKSxsLnBhcmVudC5tPS1sLnosbC5lYWNoQmVmb3JlKGEpLGkpci5lYWNoQmVmb3JlKHMpO2Vsc2V7dmFyIHU9cixoPXIsZD1yO3IuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC54PHUueCYmKHU9dCksdC54PmgueCYmKGg9dCksdC5kZXB0aD5kLmRlcHRoJiYoZD10KX0pKTt2YXIgcD11PT09aD8xOnQodSxoKS8yLGY9cC11LngsbT1lLyhoLngrcCtmKSxnPW4vKGQuZGVwdGh8fDEpO3IuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC54PSh0LngrZikqbSx0Lnk9dC5kZXB0aCpnfSkpfXJldHVybiByfWZ1bmN0aW9uIG8oZSl7dmFyIG49ZS5jaGlsZHJlbixpPWUucGFyZW50LmNoaWxkcmVuLHI9ZS5pP2lbZS5pLTFdOm51bGw7aWYobil7IShmdW5jdGlvbiBvKHQpe2Zvcih2YXIgZSxuPTAsaT0wLHI9dC5jaGlsZHJlbixvPXIubGVuZ3RoOy0tbz49MDspKGU9cltvXSkueis9bixlLm0rPW4sbis9ZS5zKyhpKz1lLmMpfSkoZSk7dmFyIGE9KG5bMF0ueituW24ubGVuZ3RoLTFdLnopLzI7cj8oZS56PXIueit0KGUuXyxyLl8pLGUubT1lLnotYSk6ZS56PWF9ZWxzZSByJiYoZS56PXIueit0KGUuXyxyLl8pKTtlLnBhcmVudC5BPShmdW5jdGlvbiBzKGUsbixpKXtpZihuKXtmb3IodmFyIHIsbz1lLGE9ZSxzPW4sbD1vLnBhcmVudC5jaGlsZHJlblswXSxjPW8ubSx1PWEubSxoPXMubSxkPWwubTtzPWxKKHMpLG89c0oobykscyYmbzspbD1zSihsKSwoYT1sSihhKSkuYT1lLChyPXMueitoLW8uei1jK3Qocy5fLG8uXykpPjAmJihjSih1SihzLGUsaSksZSxyKSxjKz1yLHUrPXIpLGgrPXMubSxjKz1vLm0sZCs9bC5tLHUrPWEubTtzJiYhbEooYSkmJihhLnQ9cyxhLm0rPWgtdSksbyYmIXNKKGwpJiYobC50PW8sbC5tKz1jLWQsaT1lKX1yZXR1cm4gaX0pKGUscixlLnBhcmVudC5BfHxpWzBdKX1mdW5jdGlvbiBhKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiBzKHQpe3QueCo9ZSx0Lnk9dC5kZXB0aCpufXJldHVybiByLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ITEsZT0rdFswXSxuPSt0WzFdLHIpOmk/bnVsbDpbZSxuXX0sci5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hMCxlPSt0WzBdLG49K3RbMV0scik6aT9bZSxuXTpudWxsfSxyfSx0cmVlbWFwOmZ1bmN0aW9uIG5mdCgpe3ZhciB0PW1KLGU9ITEsbj0xLGk9MSxyPVswXSxvPVhaLGE9WFoscz1YWixsPVhaLGM9WFo7ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC54MD10LnkwPTAsdC54MT1uLHQueTE9aSx0LmVhY2hCZWZvcmUoaCkscj1bMF0sZSYmdC5lYWNoQmVmb3JlKHRKKSx0fWZ1bmN0aW9uIGgoZSl7dmFyIG49cltlLmRlcHRoXSxpPWUueDArbix1PWUueTArbixoPWUueDEtbixkPWUueTEtbjtoPGkmJihpPWg9KGkraCkvMiksZDx1JiYodT1kPSh1K2QpLzIpLGUueDA9aSxlLnkwPXUsZS54MT1oLGUueTE9ZCxlLmNoaWxkcmVuJiYobj1yW2UuZGVwdGgrMV09byhlKS8yLGkrPWMoZSktbix1Kz1hKGUpLW4sKGgtPXMoZSktbik8aSYmKGk9aD0oaStoKS8yKSwoZC09bChlKS1uKTx1JiYodT1kPSh1K2QpLzIpLHQoZSxpLHUsaCxkKSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISF0LHUpOmV9LHUuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdFswXSxpPSt0WzFdLHUpOltuLGldfSx1LnRpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9WVooZSksdSk6dH0sdS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ0lubmVyKHQpLnBhZGRpbmdPdXRlcih0KTp1LnBhZGRpbmdJbm5lcigpfSx1LnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OiRaKCt0KSx1KTpvfSx1LnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdUb3AodCkucGFkZGluZ1JpZ2h0KHQpLnBhZGRpbmdCb3R0b20odCkucGFkZGluZ0xlZnQodCk6dS5wYWRkaW5nVG9wKCl9LHUucGFkZGluZ1RvcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OiRaKCt0KSx1KTphfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OiRaKCt0KSx1KTpzfSx1LnBhZGRpbmdCb3R0b209ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokWigrdCksdSk6bH0sdS5wYWRkaW5nTGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OiRaKCt0KSx1KTpjfSx1fSx0cmVlbWFwQmluYXJ5OmZ1bmN0aW9uIGlmdCh0LGUsbixpLHIpe3ZhciBvLGEscz10LmNoaWxkcmVuLGw9cy5sZW5ndGgsYz1uZXcgQXJyYXkobCsxKTtmb3IoY1swXT1hPW89MDtvPGw7KytvKWNbbysxXT1hKz1zW29dLnZhbHVlOyEoZnVuY3Rpb24gdChlLG4saSxyLG8sYSxsKXtpZihlPj1uLTEpe3ZhciB1PXNbZV07cmV0dXJuIHUueDA9cix1LnkwPW8sdS54MT1hLHZvaWQodS55MT1sKX1mb3IodmFyIGg9Y1tlXSxkPWkvMitoLHA9ZSsxLGY9bi0xO3A8Zjspe3ZhciBtPXArZj4+PjE7Y1ttXTxkP3A9bSsxOmY9bX1kLWNbcC0xXTxjW3BdLWQmJmUrMTxwJiYtLXA7dmFyIGc9Y1twXS1oLF89aS1nO2lmKGEtcj5sLW8pe3ZhciB5PShyKl8rYSpnKS9pO3QoZSxwLGcscixvLHksbCksdChwLG4sXyx5LG8sYSxsKX1lbHNle3ZhciB2PShvKl8rbCpnKS9pO3QoZSxwLGcscixvLGEsdiksdChwLG4sXyxyLHYsYSxsKX19KSgwLGwsdC52YWx1ZSxlLG4saSxyKX0sdHJlZW1hcERpY2U6ZUosdHJlZW1hcFNsaWNlOmRKLHRyZWVtYXBTbGljZURpY2U6ZnVuY3Rpb24gcmZ0KHQsZSxuLGkscil7KDEmdC5kZXB0aD9kSjplSikodCxlLG4saSxyKX0sdHJlZW1hcFNxdWFyaWZ5Om1KLHRyZWVtYXBSZXNxdWFyaWZ5OmdKLGludGVycG9sYXRlOkJRLGludGVycG9sYXRlQXJyYXk6UFEsaW50ZXJwb2xhdGVCYXNpczp4USxpbnRlcnBvbGF0ZUJhc2lzQ2xvc2VkOndRLGludGVycG9sYXRlRGF0ZTpOUSxpbnRlcnBvbGF0ZU51bWJlcjpJUSxpbnRlcnBvbGF0ZU9iamVjdDpSUSxpbnRlcnBvbGF0ZVJvdW5kOmZ1bmN0aW9uIG9mdCh0LGUpe3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKHQrZSpuKX19LGludGVycG9sYXRlU3RyaW5nOkRRLGludGVycG9sYXRlVHJhbnNmb3JtQ3NzOllRLGludGVycG9sYXRlVHJhbnNmb3JtU3ZnOiRRLGludGVycG9sYXRlWm9vbTpmdW5jdGlvbiBhZnQodCxlKXt2YXIgbixpLHI9dFswXSxvPXRbMV0sYT10WzJdLHM9ZVsyXSxsPWVbMF0tcixjPWVbMV0tbyx1PWwqbCtjKmM7aWYodTwxZS0xMilpPU1hdGgubG9nKHMvYSkvWlEsbj1mdW5jdGlvbih0KXtyZXR1cm5bcit0Kmwsbyt0KmMsYSpNYXRoLmV4cChaUSp0KmkpXX07ZWxzZXt2YXIgaD1NYXRoLnNxcnQodSksZD0ocypzLWEqYSs0KnUpLygyKmEqMipoKSxwPShzKnMtYSphLTQqdSkvKDIqcyoyKmgpLGY9TWF0aC5sb2coTWF0aC5zcXJ0KGQqZCsxKS1kKSxtPU1hdGgubG9nKE1hdGguc3FydChwKnArMSktcCk7aT0obS1mKS9aUSxuPWZ1bmN0aW9uKHQpe3ZhciBlPXQqaSxuPUpRKGYpLHM9YS8oMipoKSoobiooZnVuY3Rpb24gdSh0KXtyZXR1cm4oKHQ9TWF0aC5leHAoMip0KSktMSkvKHQrMSl9KShaUSplK2YpLShmdW5jdGlvbiBkKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfSkoZikpO3JldHVybltyK3MqbCxvK3MqYyxhKm4vSlEoWlEqZStmKV19fXJldHVybiBuLmR1cmF0aW9uPTFlMyppLG59LGludGVycG9sYXRlUmdiOkNRLGludGVycG9sYXRlUmdiQmFzaXM6a1EsaW50ZXJwb2xhdGVSZ2JCYXNpc0Nsb3NlZDpMUSxpbnRlcnBvbGF0ZUhzbDp0MSxpbnRlcnBvbGF0ZUhzbExvbmc6ZTEsaW50ZXJwb2xhdGVMYWI6ZnVuY3Rpb24gc2Z0KHQsZSl7dmFyIG49VFEoKHQ9clEodCkpLmwsKGU9clEoZSkpLmwpLGk9VFEodC5hLGUuYSkscj1UUSh0LmIsZS5iKSxvPVRRKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5sPW4oZSksdC5hPWkoZSksdC5iPXIoZSksdC5vcGFjaXR5PW8oZSksdCsiIn19LGludGVycG9sYXRlSGNsOmkxLGludGVycG9sYXRlSGNsTG9uZzpyMSxpbnRlcnBvbGF0ZUN1YmVoZWxpeDphMSxpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc6czEscXVhbnRpemU6ZnVuY3Rpb24gbGZ0KHQsZSl7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSluW2ldPXQoaS8oZS0xKSk7cmV0dXJuIG59LHBhdGg6cDEscG9seWdvbkFyZWE6ZnVuY3Rpb24gY2Z0KHQpe2Zvcih2YXIgZSxuPS0xLGk9dC5sZW5ndGgscj10W2ktMV0sbz0wOysrbjxpOylvKz0oZT1yKVsxXSoocj10W25dKVswXS1lWzBdKnJbMV07cmV0dXJuIG8vMn0scG9seWdvbkNlbnRyb2lkOmZ1bmN0aW9uIHVmdCh0KXtmb3IodmFyIGUsbixpPS0xLHI9dC5sZW5ndGgsbz0wLGE9MCxzPXRbci0xXSxsPTA7KytpPHI7KWwrPW49KGU9cylbMF0qKHM9dFtpXSlbMV0tc1swXSplWzFdLG8rPShlWzBdK3NbMF0pKm4sYSs9KGVbMV0rc1sxXSkqbjtyZXR1cm5bby8obCo9MyksYS9sXX0scG9seWdvbkh1bGw6ZnVuY3Rpb24gaGZ0KHQpe2lmKChuPXQubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciBlLG4saT1uZXcgQXJyYXkobikscj1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47KytlKWlbZV09Wyt0W2VdWzBdLCt0W2VdWzFdLGVdO2ZvcihpLnNvcnQobTEpLGU9MDtlPG47KytlKXJbZV09W2lbZV1bMF0sLWlbZV1bMV1dO3ZhciBvPWcxKGkpLGE9ZzEocikscz1hWzBdPT09b1swXSxsPWFbYS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLGM9W107Zm9yKGU9by5sZW5ndGgtMTtlPj0wOy0tZSljLnB1c2godFtpW29bZV1dWzJdXSk7Zm9yKGU9K3M7ZTxhLmxlbmd0aC1sOysrZSljLnB1c2godFtpW2FbZV1dWzJdXSk7cmV0dXJuIGN9LHBvbHlnb25Db250YWluczpmdW5jdGlvbiBkZnQodCxlKXtmb3IodmFyIG4saSxyPXQubGVuZ3RoLG89dFtyLTFdLGE9ZVswXSxzPWVbMV0sbD1vWzBdLGM9b1sxXSx1PSExLGg9MDtoPHI7KytoKW49KG89dFtoXSlbMF0sKGk9b1sxXSk+cyE9Yz5zJiZhPChsLW4pKihzLWkpLyhjLWkpK24mJih1PSF1KSxsPW4sYz1pO3JldHVybiB1fSxwb2x5Z29uTGVuZ3RoOmZ1bmN0aW9uIHBmdCh0KXtmb3IodmFyIGUsbixpPS0xLHI9dC5sZW5ndGgsbz10W3ItMV0sYT1vWzBdLHM9b1sxXSxsPTA7KytpPHI7KWU9YSxuPXMsZS09YT0obz10W2ldKVswXSxuLT1zPW9bMV0sbCs9TWF0aC5zcXJ0KGUqZStuKm4pO3JldHVybiBsfSxxdWFkdHJlZTp4MSxxdWV1ZTpxMSxyYW5kb21Vbmlmb3JtOlgxLHJhbmRvbU5vcm1hbDokMSxyYW5kb21Mb2dOb3JtYWw6SzEscmFuZG9tQmF0ZXM6SjEscmFuZG9tSXJ3aW5IYWxsOloxLHJhbmRvbUV4cG9uZW50aWFsOlExLHJlcXVlc3Q6dDAsaHRtbDpuMCxqc29uOmkwLHRleHQ6cjAseG1sOm8wLGNzdjpsMCx0c3Y6YzAsc2NhbGVCYW5kOlAwLHNjYWxlUG9pbnQ6ZnVuY3Rpb24gZmZ0KCl7cmV0dXJuIE4wKFAwKCkucGFkZGluZ0lubmVyKDEpKX0sc2NhbGVJZGVudGl0eTpmdW5jdGlvbiB0KCl7dmFyIGU9WzAsMV07ZnVuY3Rpb24gbih0KXtyZXR1cm4rdH1yZXR1cm4gbi5pbnZlcnQ9bixuLmRvbWFpbj1uLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUMwLmNhbGwodCxqMiksbik6ZS5zbGljZSgpfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLmRvbWFpbihlKX0sZDUobil9LHNjYWxlTGluZWFyOmZ1bmN0aW9uIHQoKXt2YXIgZT0kMihXMixOMik7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBYMihlLHQoKSl9LGQ1KGUpfSxzY2FsZUxvZzpmdW5jdGlvbiB0KCl7dmFyIGU9JDIoZjUsbTUpLmRvbWFpbihbMSwxMF0pLG49ZS5kb21haW4saT0xMCxyPXk1KDEwKSxvPV81KDEwKTtmdW5jdGlvbiBhKCl7cmV0dXJuIHI9eTUoaSksbz1fNShpKSxuKClbMF08MCYmKHI9djUociksbz12NShvKSksZX1yZXR1cm4gZS5iYXNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LGEoKSk6aX0sZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4odCksYSgpKTpuKCl9LGUudGlja3M9ZnVuY3Rpb24odCl7dmFyIGUsYT1uKCkscz1hWzBdLGw9YVthLmxlbmd0aC0xXTsoZT1sPHMpJiYoZD1zLHM9bCxsPWQpO3ZhciBjLHUsaCxkPXIocykscD1yKGwpLGY9bnVsbD09dD8xMDordCxtPVtdO2lmKCEoaSUxKSYmcC1kPGYpe2lmKGQ9TWF0aC5yb3VuZChkKS0xLHA9TWF0aC5yb3VuZChwKSsxLHM+MCl7Zm9yKDtkPHA7KytkKWZvcih1PTEsYz1vKGQpO3U8aTsrK3UpaWYoISgoaD1jKnUpPHMpKXtpZihoPmwpYnJlYWs7bS5wdXNoKGgpfX1lbHNlIGZvcig7ZDxwOysrZClmb3IodT1pLTEsYz1vKGQpO3U+PTE7LS11KWlmKCEoKGg9Yyp1KTxzKSl7aWYoaD5sKWJyZWFrO20ucHVzaChoKX19ZWxzZSBtPV8wKGQscCxNYXRoLm1pbihwLWQsZikpLm1hcChvKTtyZXR1cm4gZT9tLnJldmVyc2UoKTptfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxuKXtpZihudWxsPT1uJiYobj0xMD09PWk/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49bDUobikpLHQ9PT0xLzApcmV0dXJuIG47bnVsbD09dCYmKHQ9MTApO3ZhciBhPU1hdGgubWF4KDEsaSp0L2UudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10L28oTWF0aC5yb3VuZChyKHQpKSk7cmV0dXJuIGUqaTxpLS41JiYoZSo9aSksZTw9YT9uKHQpOiIifX0sZS5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIG4ocDUobigpLHtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4gbyhNYXRoLmZsb29yKHIodCkpKX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gbyhNYXRoLmNlaWwocih0KSkpfX0pKX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFgyKGUsdCgpLmJhc2UoaSkpfSxlfSxzY2FsZU9yZGluYWw6TDAsc2NhbGVJbXBsaWNpdDprMCxzY2FsZVBvdzp4NSxzY2FsZVNxcnQ6ZnVuY3Rpb24gbWZ0KCl7cmV0dXJuIHg1KCkuZXhwb25lbnQoLjUpfSxzY2FsZVF1YW50aWxlOmZ1bmN0aW9uIHQoKXt2YXIgZT1bXSxuPVtdLGk9W107ZnVuY3Rpb24gcigpe3ZhciB0PTAscj1NYXRoLm1heCgxLG4ubGVuZ3RoKTtmb3IoaT1uZXcgQXJyYXkoci0xKTsrK3Q8cjspaVt0LTFdPWIwKGUsdC9yKTtyZXR1cm4gb31mdW5jdGlvbiBvKHQpe2lmKCFpc05hTih0PSt0KSlyZXR1cm4gbltkMChpLHQpXX1yZXR1cm4gby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIHI9bi5pbmRleE9mKHQpO3JldHVybiByPDA/W05hTixOYU5dOltyPjA/aVtyLTFdOmVbMF0scjxpLmxlbmd0aD9pW3JdOmVbZS5sZW5ndGgtMV1dfSxvLmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBuLGk9MCxvPXQubGVuZ3RoO2k8bzsrK2kpbnVsbD09KG49dFtpXSl8fGlzTmFOKG49K24pfHxlLnB1c2gobik7cmV0dXJuIGUuc29ydCh1MCkscigpfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPUEwLmNhbGwodCkscigpKTpuLnNsaWNlKCl9LG8ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS5kb21haW4oZSkucmFuZ2Uobil9LG99LHNjYWxlUXVhbnRpemU6ZnVuY3Rpb24gdCgpe3ZhciBlPTAsbj0xLGk9MSxyPVsuNV0sbz1bMCwxXTtmdW5jdGlvbiBhKHQpe2lmKHQ8PXQpcmV0dXJuIG9bZDAocix0LDAsaSldfWZ1bmN0aW9uIHMoKXt2YXIgdD0tMTtmb3Iocj1uZXcgQXJyYXkoaSk7Kyt0PGk7KXJbdF09KCh0KzEpKm4tKHQtaSkqZSkvKGkrMSk7cmV0dXJuIGF9cmV0dXJuIGEuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLG49K3RbMV0scygpKTpbZSxuXX0sYS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0obz1BMC5jYWxsKHQpKS5sZW5ndGgtMSxzKCkpOm8uc2xpY2UoKX0sYS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIGE9by5pbmRleE9mKHQpO3JldHVybiBhPDA/W05hTixOYU5dOmE8MT9bZSxyWzBdXTphPj1pP1tyW2ktMV0sbl06W3JbYS0xXSxyW2FdXX0sYS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS5kb21haW4oW2Usbl0pLnJhbmdlKG8pfSxkNShhKX0sc2NhbGVUaHJlc2hvbGQ6ZnVuY3Rpb24gdCgpe3ZhciBlPVsuNV0sbj1bMCwxXSxpPTE7ZnVuY3Rpb24gcih0KXtpZih0PD10KXJldHVybiBuW2QwKGUsdCwwLGkpXX1yZXR1cm4gci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9QTAuY2FsbCh0KSxpPU1hdGgubWluKGUubGVuZ3RoLG4ubGVuZ3RoLTEpLHIpOmUuc2xpY2UoKX0sci5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1BMC5jYWxsKHQpLGk9TWF0aC5taW4oZS5sZW5ndGgsbi5sZW5ndGgtMSkscik6bi5zbGljZSgpfSxyLmludmVydEV4dGVudD1mdW5jdGlvbih0KXt2YXIgaT1uLmluZGV4T2YodCk7cmV0dXJuW2VbaS0xXSxlW2ldXX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS5kb21haW4oZSkucmFuZ2Uobil9LHJ9LHNjYWxlVGltZTpmdW5jdGlvbiBnZnQoKXtyZXR1cm4gQzQoajUsVjUsQjUsejUsTzUsUjUsSTUsQzUscjMpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKX0sc2NhbGVVdGM6ZnVuY3Rpb24gX2Z0KCl7cmV0dXJuIEM0KFE1LFo1LFg1LHE1LFc1LEc1LEk1LEM1LG8zKS5kb21haW4oW0RhdGUuVVRDKDJlMywwLDEpLERhdGUuVVRDKDJlMywwLDIpXSl9LHNjaGVtZUNhdGVnb3J5MTA6azQsc2NoZW1lQ2F0ZWdvcnkyMGI6TDQsc2NoZW1lQ2F0ZWdvcnkyMGM6UDQsc2NoZW1lQ2F0ZWdvcnkyMDpONCxpbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHQ6STQsaW50ZXJwb2xhdGVSYWluYm93OmZ1bmN0aW9uIHlmdCh0KXsodDwwfHx0PjEpJiYodC09TWF0aC5mbG9vcih0KSk7dmFyIGU9TWF0aC5hYnModC0uNSk7cmV0dXJuIHo0Lmg9MzYwKnQtMTAwLHo0LnM9MS41LTEuNSplLHo0Lmw9LjgtLjkqZSx6NCsiIn0saW50ZXJwb2xhdGVXYXJtOlI0LGludGVycG9sYXRlQ29vbDpPNCxpbnRlcnBvbGF0ZVZpcmlkaXM6QjQsaW50ZXJwb2xhdGVNYWdtYTpINCxpbnRlcnBvbGF0ZUluZmVybm86RjQsaW50ZXJwb2xhdGVQbGFzbWE6VjQsc2NhbGVTZXF1ZW50aWFsOmZ1bmN0aW9uIHQoZSl7dmFyIG49MCxpPTEscj0hMTtmdW5jdGlvbiBvKHQpe3ZhciBvPSh0LW4pLyhpLW4pO3JldHVybiBlKHI/TWF0aC5tYXgoMCxNYXRoLm1pbigxLG8pKTpvKX1yZXR1cm4gby5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3RbMF0saT0rdFsxXSxvKTpbbixpXX0sby5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hIXQsbyk6cn0sby5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxvKTplfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlKS5kb21haW4oW24saV0pLmNsYW1wKHIpfSxkNShvKX0sY3JlYXRlOmZ1bmN0aW9uIHZmdCh0KXtyZXR1cm4gdDkoWTQodCkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX0sY3JlYXRvcjpZNCxsb2NhbDpOOSxtYXRjaGVyOmU2LG1vdXNlOmZ1bmN0aW9uIGJmdCh0KXt2YXIgZT1SOSgpO3JldHVybiBlLmNoYW5nZWRUb3VjaGVzJiYoZT1lLmNoYW5nZWRUb3VjaGVzWzBdKSxPOSh0LGUpfSxuYW1lc3BhY2U6RzQsbmFtZXNwYWNlczpqNCxjbGllbnRQb2ludDpPOSxzZWxlY3Q6dDksc2VsZWN0QWxsOmZ1bmN0aW9uIHhmdCh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IEo2KFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEo2KFtudWxsPT10P1tdOnRdLFo2KX0sc2VsZWN0aW9uOlE2LHNlbGVjdG9yOiQ0LHNlbGVjdG9yQWxsOlo0LHN0eWxlOl82LHRvdWNoOmZ1bmN0aW9uIHdmdCh0LGUsbil7YXJndW1lbnRzLmxlbmd0aDwzJiYobj1lLGU9UjkoKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBpLHI9MCxvPWU/ZS5sZW5ndGg6MDtyPG87KytyKWlmKChpPWVbcl0pLmlkZW50aWZpZXI9PT1uKXJldHVybiBPOSh0LGkpO3JldHVybiBudWxsfSx0b3VjaGVzOmZ1bmN0aW9uIFNmdCh0LGUpe251bGw9PWUmJihlPVI5KCkudG91Y2hlcyk7Zm9yKHZhciBuPTAsaT1lP2UubGVuZ3RoOjAscj1uZXcgQXJyYXkoaSk7bjxpOysrbilyW25dPU85KHQsZVtuXSk7cmV0dXJuIHJ9LHdpbmRvdzpwNixnZXQgZXZlbnQoKXtyZXR1cm4gVTZ9LGN1c3RvbUV2ZW50OmZ1bmN0aW9uIE1mdCh0LGUsbixpKXt2YXIgcj1VNjt0LnNvdXJjZUV2ZW50PVU2LFU2PXQ7dHJ5e3JldHVybiBlLmFwcGx5KG4saSl9ZmluYWxseXtVNj1yfX0sYXJjOmZ1bmN0aW9uIEVmdCgpe3ZhciB0PW44LGU9aTgsbj1VOSgwKSxpPW51bGwscj1yOCxvPW84LGE9YTgscz1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgbCxjLHU9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGQ9ci5hcHBseSh0aGlzLGFyZ3VtZW50cyktSjkscD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1KOSxmPWo5KHAtZCksbT1wPmQ7aWYoc3x8KHM9bD1WOSgpKSxoPHUmJihjPWgsaD11LHU9YyksaD5LOSlpZihmPlE5LUs5KXMubW92ZVRvKGgqVzkoZCksaCpYOShkKSkscy5hcmMoMCwwLGgsZCxwLCFtKSx1Pks5JiYocy5tb3ZlVG8odSpXOShwKSx1Klg5KHApKSxzLmFyYygwLDAsdSxwLGQsbSkpO2Vsc2V7dmFyIGcsXyx5PWQsdj1wLGI9ZCx4PXAsdz1mLFM9ZixNPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsRT1NPks5JiYoaT8raS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6JDkodSp1K2gqaCkpLFQ9WTkoajkoaC11KS8yLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksQz1ULEE9VDtpZihFPks5KXt2YXIgaz1lOChFL3UqWDkoTSkpLEw9ZTgoRS9oKlg5KE0pKTsody09MiprKT5LOT8oYis9ayo9bT8xOi0xLHgtPWspOih3PTAsYj14PShkK3ApLzIpLChTLT0yKkwpPks5Pyh5Kz1MKj1tPzE6LTEsdi09TCk6KFM9MCx5PXY9KGQrcCkvMil9dmFyIFA9aCpXOSh5KSxOPWgqWDkoeSksST11Klc5KHgpLFI9dSpYOSh4KTtpZihUPks5KXt2YXIgTz1oKlc5KHYpLHo9aCpYOSh2KSxEPXUqVzkoYiksQj11Klg5KGIpO2lmKGY8Wjkpe3ZhciBIPXc+Szk/czgoUCxOLEQsQixPLHosSSxSKTpbSSxSXSxGPVAtSFswXSxWPU4tSFsxXSxVPU8tSFswXSxqPXotSFsxXSxHPTEvWDkodDgoKEYqVStWKmopLygkOShGKkYrVipWKSokOShVKlUraipqKSkpLzIpLFc9JDkoSFswXSpIWzBdK0hbMV0qSFsxXSk7Qz1ZOShULCh1LVcpLyhHLTEpKSxBPVk5KFQsKGgtVykvKEcrMSkpfX1TPks5P0E+Szk/KGc9bDgoRCxCLFAsTixoLEEsbSksXz1sOChPLHosSSxSLGgsQSxtKSxzLm1vdmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLEE8VD9zLmFyYyhnLmN4LGcuY3ksQSxHOShnLnkwMSxnLngwMSksRzkoXy55MDEsXy54MDEpLCFtKToocy5hcmMoZy5jeCxnLmN5LEEsRzkoZy55MDEsZy54MDEpLEc5KGcueTExLGcueDExKSwhbSkscy5hcmMoMCwwLGgsRzkoZy5jeStnLnkxMSxnLmN4K2cueDExKSxHOShfLmN5K18ueTExLF8uY3grXy54MTEpLCFtKSxzLmFyYyhfLmN4LF8uY3ksQSxHOShfLnkxMSxfLngxMSksRzkoXy55MDEsXy54MDEpLCFtKSkpOihzLm1vdmVUbyhQLE4pLHMuYXJjKDAsMCxoLHksdiwhbSkpOnMubW92ZVRvKFAsTiksdT5LOSYmdz5LOT9DPks5PyhnPWw4KEksUixPLHosdSwtQyxtKSxfPWw4KFAsTixELEIsdSwtQyxtKSxzLmxpbmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLEM8VD9zLmFyYyhnLmN4LGcuY3ksQyxHOShnLnkwMSxnLngwMSksRzkoXy55MDEsXy54MDEpLCFtKToocy5hcmMoZy5jeCxnLmN5LEMsRzkoZy55MDEsZy54MDEpLEc5KGcueTExLGcueDExKSwhbSkscy5hcmMoMCwwLHUsRzkoZy5jeStnLnkxMSxnLmN4K2cueDExKSxHOShfLmN5K18ueTExLF8uY3grXy54MTEpLG0pLHMuYXJjKF8uY3gsXy5jeSxDLEc5KF8ueTExLF8ueDExKSxHOShfLnkwMSxfLngwMSksIW0pKSk6cy5hcmMoMCwwLHUseCxiLG0pOnMubGluZVRvKEksUil9ZWxzZSBzLm1vdmVUbygwLDApO2lmKHMuY2xvc2VQYXRoKCksbClyZXR1cm4gcz1udWxsLGwrIiJ8fG51bGx9cmV0dXJuIGwuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsaT0oK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItWjkvMjtyZXR1cm5bVzkoaSkqbixYOShpKSpuXX0sbC5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOlU5KCtlKSxsKTp0fSxsLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VTkoK3QpLGwpOmV9LGwuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VTkoK3QpLGwpOm59LGwucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OlU5KCt0KSxsKTppfSxsLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpVOSgrdCksbCk6cn0sbC5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlU5KCt0KSxsKTpvfSxsLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VTkoK3QpLGwpOmF9LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1udWxsPT10P251bGw6dCxsKTpzfSxsfSxhcmVhOmY4LGxpbmU6cDgscGllOmZ1bmN0aW9uIFRmdCgpe3ZhciB0PWc4LGU9bTgsbj1udWxsLGk9VTkoMCkscj1VOShROSksbz1VOSgwKTtmdW5jdGlvbiBhKGEpe3ZhciBzLGwsYyx1LGgsZD1hLmxlbmd0aCxwPTAsZj1uZXcgQXJyYXkoZCksbT1uZXcgQXJyYXkoZCksZz0raS5hcHBseSh0aGlzLGFyZ3VtZW50cyksXz1NYXRoLm1pbihROSxNYXRoLm1heCgtUTksci5hcHBseSh0aGlzLGFyZ3VtZW50cyktZykpLHk9TWF0aC5taW4oTWF0aC5hYnMoXykvZCxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksdj15KihfPDA/LTE6MSk7Zm9yKHM9MDtzPGQ7KytzKShoPW1bZltzXT1zXT0rdChhW3NdLHMsYSkpPjAmJihwKz1oKTtmb3IobnVsbCE9ZT9mLnNvcnQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUobVt0XSxtW25dKX0pKTpudWxsIT1uJiZmLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oYVt0XSxhW2VdKX0pKSxzPTAsYz1wPyhfLWQqdikvcDowO3M8ZDsrK3MsZz11KW1bbD1mW3NdXT17ZGF0YTphW2xdLGluZGV4OnMsdmFsdWU6aD1tW2xdLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTp1PWcrKGg+MD9oKmM6MCkrdixwYWRBbmdsZTp5fTtyZXR1cm4gbX1yZXR1cm4gYS52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOlU5KCtlKSxhKTp0fSxhLnNvcnRWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuPW51bGwsYSk6ZX0sYS5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZT1udWxsLGEpOm59LGEuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlU5KCt0KSxhKTppfSxhLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VTkoK3QpLGEpOnJ9LGEucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpVOSgrdCksYSk6b30sYX0sYXJlYVJhZGlhbDp3OCxyYWRpYWxBcmVhOnc4LGxpbmVSYWRpYWw6eDgscmFkaWFsTGluZTp4OCxwb2ludFJhZGlhbDpTOCxsaW5rSG9yaXpvbnRhbDpmdW5jdGlvbiBDZnQoKXtyZXR1cm4gQzgoQTgpfSxsaW5rVmVydGljYWw6ZnVuY3Rpb24gQWZ0KCl7cmV0dXJuIEM4KGs4KX0sbGlua1JhZGlhbDpmdW5jdGlvbiBrZnQoKXt2YXIgdD1DOChMOCk7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdH0sc3ltYm9sOmZ1bmN0aW9uIExmdCgpe3ZhciB0PVU5KFA4KSxlPVU5KDY0KSxuPW51bGw7ZnVuY3Rpb24gaSgpe3ZhciBpO2lmKG58fChuPWk9VjkoKSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhuLCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksaSlyZXR1cm4gbj1udWxsLGkrIiJ8fG51bGx9cmV0dXJuIGkudHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOlU5KGUpLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlU5KCt0KSxpKTplfSxpLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOnQsaSk6bn0saX0sc3ltYm9sczpYOCxzeW1ib2xDaXJjbGU6UDgsc3ltYm9sQ3Jvc3M6Tjgsc3ltYm9sRGlhbW9uZDpPOCxzeW1ib2xTcXVhcmU6Rjgsc3ltYm9sU3RhcjpIOCxzeW1ib2xUcmlhbmdsZTpVOCxzeW1ib2xXeWU6WTgsY3VydmVCYXNpc0Nsb3NlZDpmdW5jdGlvbiBQZnQodCl7cmV0dXJuIG5ldyBKOCh0KX0sY3VydmVCYXNpc09wZW46ZnVuY3Rpb24gTmZ0KHQpe3JldHVybiBuZXcgUTgodCl9LGN1cnZlQmFzaXM6ZnVuY3Rpb24gSWZ0KHQpe3JldHVybiBuZXcgWjgodCl9LGN1cnZlQnVuZGxlOmU3LGN1cnZlQ2FyZGluYWxDbG9zZWQ6YTcsY3VydmVDYXJkaW5hbE9wZW46bDcsY3VydmVDYXJkaW5hbDpyNyxjdXJ2ZUNhdG11bGxSb21DbG9zZWQ6cDcsY3VydmVDYXRtdWxsUm9tT3BlbjptNyxjdXJ2ZUNhdG11bGxSb206aDcsY3VydmVMaW5lYXJDbG9zZWQ6ZnVuY3Rpb24gUmZ0KHQpe3JldHVybiBuZXcgZzcodCl9LGN1cnZlTGluZWFyOnU4LGN1cnZlTW9ub3RvbmVYOmZ1bmN0aW9uIE9mdCh0KXtyZXR1cm4gbmV3IHg3KHQpfSxjdXJ2ZU1vbm90b25lWTpmdW5jdGlvbiB6ZnQodCl7cmV0dXJuIG5ldyB3Nyh0KX0sY3VydmVOYXR1cmFsOmZ1bmN0aW9uIERmdCh0KXtyZXR1cm4gbmV3IE03KHQpfSxjdXJ2ZVN0ZXA6ZnVuY3Rpb24gQmZ0KHQpe3JldHVybiBuZXcgVDcodCwuNSl9LGN1cnZlU3RlcEFmdGVyOmZ1bmN0aW9uIEhmdCh0KXtyZXR1cm4gbmV3IFQ3KHQsMSl9LGN1cnZlU3RlcEJlZm9yZTpmdW5jdGlvbiBGZnQodCl7cmV0dXJuIG5ldyBUNyh0LDApfSxzdGFjazpmdW5jdGlvbiBWZnQoKXt2YXIgdD1VOShbXSksZT1BNyxuPUM3LGk9azc7ZnVuY3Rpb24gcihyKXt2YXIgbyxhLHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbD1yLmxlbmd0aCxjPXMubGVuZ3RoLHU9bmV3IEFycmF5KGMpO2ZvcihvPTA7bzxjOysrbyl7Zm9yKHZhciBoLGQ9c1tvXSxwPXVbb109bmV3IEFycmF5KGwpLGY9MDtmPGw7KytmKXBbZl09aD1bMCwraShyW2ZdLGQsZixyKV0saC5kYXRhPXJbZl07cC5rZXk9ZH1mb3Iobz0wLGE9ZSh1KTtvPGM7KytvKXVbYVtvXV0uaW5kZXg9bztyZXR1cm4gbih1LGEpLHV9cmV0dXJuIHIua2V5cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOlU5KE04LmNhbGwoZSkpLHIpOnR9LHIudmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpVOSgrdCkscik6aX0sci5vcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P0E3OiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VTkoTTguY2FsbCh0KSkscik6ZX0sci5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9DNzp0LHIpOm59LHJ9LHN0YWNrT2Zmc2V0RXhwYW5kOmZ1bmN0aW9uIFVmdCh0LGUpe2lmKChpPXQubGVuZ3RoKT4wKXtmb3IodmFyIG4saSxyLG89MCxhPXRbMF0ubGVuZ3RoO288YTsrK28pe2ZvcihyPW49MDtuPGk7KytuKXIrPXRbbl1bb11bMV18fDA7aWYocilmb3Iobj0wO248aTsrK24pdFtuXVtvXVsxXS89cn1DNyh0LGUpfX0sc3RhY2tPZmZzZXREaXZlcmdpbmc6ZnVuY3Rpb24gamZ0KHQsZSl7aWYoKHM9dC5sZW5ndGgpPjEpZm9yKHZhciBuLGkscixvLGEscyxsPTAsYz10W2VbMF1dLmxlbmd0aDtsPGM7KytsKWZvcihvPWE9MCxuPTA7bjxzOysrbikocj0oaT10W2Vbbl1dW2xdKVsxXS1pWzBdKT49MD8oaVswXT1vLGlbMV09bys9cik6cjwwPyhpWzFdPWEsaVswXT1hKz1yKTppWzBdPW99LHN0YWNrT2Zmc2V0Tm9uZTpDNyxzdGFja09mZnNldFNpbGhvdWV0dGU6ZnVuY3Rpb24gR2Z0KHQsZSl7aWYoKG49dC5sZW5ndGgpPjApe2Zvcih2YXIgbixpPTAscj10W2VbMF1dLG89ci5sZW5ndGg7aTxvOysraSl7Zm9yKHZhciBhPTAscz0wO2E8bjsrK2Epcys9dFthXVtpXVsxXXx8MDtyW2ldWzFdKz1yW2ldWzBdPS1zLzJ9QzcodCxlKX19LHN0YWNrT2Zmc2V0V2lnZ2xlOmZ1bmN0aW9uIFdmdCh0LGUpe2lmKChyPXQubGVuZ3RoKT4wJiYoaT0obj10W2VbMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgbixpLHIsbz0wLGE9MTthPGk7KythKXtmb3IodmFyIHM9MCxsPTAsYz0wO3M8cjsrK3Mpe2Zvcih2YXIgdT10W2Vbc11dLGg9dVthXVsxXXx8MCxkPShoLSh1W2EtMV1bMV18fDApKS8yLHA9MDtwPHM7KytwKXt2YXIgZj10W2VbcF1dO2QrPShmW2FdWzFdfHwwKS0oZlthLTFdWzFdfHwwKX1sKz1oLGMrPWQqaH1uW2EtMV1bMV0rPW5bYS0xXVswXT1vLGwmJihvLT1jL2wpfW5bYS0xXVsxXSs9blthLTFdWzBdPW8sQzcodCxlKX19LHN0YWNrT3JkZXJBc2NlbmRpbmc6TDcsc3RhY2tPcmRlckRlc2NlbmRpbmc6ZnVuY3Rpb24gcWZ0KHQpe3JldHVybiBMNyh0KS5yZXZlcnNlKCl9LHN0YWNrT3JkZXJJbnNpZGVPdXQ6ZnVuY3Rpb24gWWZ0KHQpe3ZhciBlLG4saT10Lmxlbmd0aCxyPXQubWFwKFA3KSxvPUE3KHQpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbZV0tclt0XX0pKSxhPTAscz0wLGw9W10sYz1bXTtmb3IoZT0wO2U8aTsrK2Upbj1vW2VdLGE8cz8oYSs9cltuXSxsLnB1c2gobikpOihzKz1yW25dLGMucHVzaChuKSk7cmV0dXJuIGMucmV2ZXJzZSgpLmNvbmNhdChsKX0sc3RhY2tPcmRlck5vbmU6QTcsc3RhY2tPcmRlclJldmVyc2U6ZnVuY3Rpb24gWGZ0KHQpe3JldHVybiBBNyh0KS5yZXZlcnNlKCl9LHRpbWVJbnRlcnZhbDpSNyx0aW1lTWlsbGlzZWNvbmQ6TzcsdGltZU1pbGxpc2Vjb25kczp6Nyx1dGNNaWxsaXNlY29uZDpPNyx1dGNNaWxsaXNlY29uZHM6ejcsdGltZVNlY29uZDpVNyx0aW1lU2Vjb25kczpqNyx1dGNTZWNvbmQ6VTcsdXRjU2Vjb25kczpqNyx0aW1lTWludXRlOkc3LHRpbWVNaW51dGVzOlc3LHRpbWVIb3VyOnE3LHRpbWVIb3VyczpZNyx0aW1lRGF5Olg3LHRpbWVEYXlzOiQ3LHRpbWVXZWVrOlo3LHRpbWVXZWVrczpydHQsdGltZVN1bmRheTpaNyx0aW1lU3VuZGF5czpydHQsdGltZU1vbmRheTpKNyx0aW1lTW9uZGF5czpvdHQsdGltZVR1ZXNkYXk6UTcsdGltZVR1ZXNkYXlzOmF0dCx0aW1lV2VkbmVzZGF5OnR0dCx0aW1lV2VkbmVzZGF5czpzdHQsdGltZVRodXJzZGF5OmV0dCx0aW1lVGh1cnNkYXlzOmx0dCx0aW1lRnJpZGF5Om50dCx0aW1lRnJpZGF5czpjdHQsdGltZVNhdHVyZGF5Oml0dCx0aW1lU2F0dXJkYXlzOnV0dCx0aW1lTW9udGg6aHR0LHRpbWVNb250aHM6ZHR0LHRpbWVZZWFyOnB0dCx0aW1lWWVhcnM6ZnR0LHV0Y01pbnV0ZTptdHQsdXRjTWludXRlczpndHQsdXRjSG91cjpfdHQsdXRjSG91cnM6eXR0LHV0Y0RheTp2dHQsdXRjRGF5czpidHQsdXRjV2Vlazp3dHQsdXRjV2Vla3M6a3R0LHV0Y1N1bmRheTp3dHQsdXRjU3VuZGF5czprdHQsdXRjTW9uZGF5OlN0dCx1dGNNb25kYXlzOkx0dCx1dGNUdWVzZGF5Ok10dCx1dGNUdWVzZGF5czpQdHQsdXRjV2VkbmVzZGF5OkV0dCx1dGNXZWRuZXNkYXlzOk50dCx1dGNUaHVyc2RheTpUdHQsdXRjVGh1cnNkYXlzOkl0dCx1dGNGcmlkYXk6Q3R0LHV0Y0ZyaWRheXM6UnR0LHV0Y1NhdHVyZGF5OkF0dCx1dGNTYXR1cmRheXM6T3R0LHV0Y01vbnRoOnp0dCx1dGNNb250aHM6RHR0LHV0Y1llYXI6QnR0LHV0Y1llYXJzOkh0dCx0aW1lRm9ybWF0RGVmYXVsdExvY2FsZTpUbnQsZ2V0IHRpbWVGb3JtYXQoKXtyZXR1cm4gaGV0fSxnZXQgdGltZVBhcnNlKCl7cmV0dXJuIGRldH0sZ2V0IHV0Y0Zvcm1hdCgpe3JldHVybiBwZXR9LGdldCB1dGNQYXJzZSgpe3JldHVybiBmZXR9LHRpbWVGb3JtYXRMb2NhbGU6Y2V0LGlzb0Zvcm1hdDpMbnQsaXNvUGFyc2U6Tm50LG5vdzpVbnQsdGltZXI6V250LHRpbWVyRmx1c2g6cW50LHRpbWVvdXQ6ZnVuY3Rpb24gJGZ0KHQsZSxuKXt2YXIgaT1uZXcgR250O3JldHVybiBpLnJlc3RhcnQoKGZ1bmN0aW9uKG4pe2kuc3RvcCgpLHQobitlKX0pLGU9bnVsbD09ZT8wOitlLG4pLGl9LGludGVydmFsOmZ1bmN0aW9uIEtmdCh0LGUsbil7dmFyIGk9bmV3IEdudCxyPWU7cmV0dXJuIG51bGw9PWU/KGkucmVzdGFydCh0LGUsbiksaSk6KGU9K2Usbj1udWxsPT1uP1VudCgpOituLGkucmVzdGFydCgoZnVuY3Rpb24gbyhhKXthKz1yLGkucmVzdGFydChvLHIrPWUsbiksdChhKX0pLGUsbiksaSl9LHRyYW5zaXRpb246TmF0LGFjdGl2ZTpmdW5jdGlvbiBaZnQodCxlKXt2YXIgbixpLHI9dC5fX3RyYW5zaXRpb247aWYocilmb3IoaSBpbiBlPW51bGw9PWU/bnVsbDplKyIiLHIpaWYoKG49cltpXSkuc3RhdGU+MSYmbi5uYW1lPT09ZSlyZXR1cm4gbmV3IFBhdChbW3RdXSxuc3QsZSwraSk7cmV0dXJuIG51bGx9LGludGVycnVwdDpob3Qsdm9yb25vaTpmdW5jdGlvbiBKZnQoKXt2YXIgdD1yc3QsZT1vc3Qsbj1udWxsO2Z1bmN0aW9uIGkoaSl7cmV0dXJuIG5ldyBGc3QoaS5tYXAoKGZ1bmN0aW9uKG4scil7dmFyIG89W01hdGgucm91bmQodChuLHIsaSkvenN0KSp6c3QsTWF0aC5yb3VuZChlKG4scixpKS96c3QpKnpzdF07cmV0dXJuIG8uaW5kZXg9cixvLmRhdGE9bixvfSkpLG4pfXJldHVybiBpLnBvbHlnb25zPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLnBvbHlnb25zKCl9LGkubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkubGlua3MoKX0saS50cmlhbmdsZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkudHJpYW5nbGVzKCl9LGkueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmlzdCgrZSksaSk6dH0saS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aXN0KCt0KSxpKTplfSxpLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6W1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0saSk6biYmW1tuWzBdWzBdLG5bMF1bMV1dLFtuWzFdWzBdLG5bMV1bMV1dXX0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDpbWzAsMF0sWyt0WzBdLCt0WzFdXV0saSk6biYmW25bMV1bMF0tblswXVswXSxuWzFdWzFdLW5bMF1bMV1dfSxpfSx6b29tOmZ1bmN0aW9uIFFmdCgpe3ZhciB0LGUsbj12ZHQsaT1iZHQscj1NZHQsbz13ZHQsYT1TZHQscz1bMCwxLzBdLGw9W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0sYz0yNTAsdT1WdXQsaD1bXSxkPVVzdCgic3RhcnQiLCJ6b29tIiwiZW5kIikscD01MDAsZj0wO2Z1bmN0aW9uIG0odCl7dC5wcm9wZXJ0eSgiX196b29tIix4ZHQpLm9uKCJ3aGVlbC56b29tIix3KS5vbigibW91c2Vkb3duLnpvb20iLFMpLm9uKCJkYmxjbGljay56b29tIixNKS5maWx0ZXIoYSkub24oInRvdWNoc3RhcnQuem9vbSIsRSkub24oInRvdWNobW92ZS56b29tIixUKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixDKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gZyh0LGUpe3JldHVybihlPU1hdGgubWF4KHNbMF0sTWF0aC5taW4oc1sxXSxlKSkpPT09dC5rP3Q6bmV3IGRkdChlLHQueCx0LnkpfWZ1bmN0aW9uIF8odCxlLG4pe3ZhciBpPWVbMF0tblswXSp0Lmsscj1lWzFdLW5bMV0qdC5rO3JldHVybiBpPT09dC54JiZyPT09dC55P3Q6bmV3IGRkdCh0LmssaSxyKX1mdW5jdGlvbiB5KHQpe3JldHVyblsoK3RbMF1bMF0rICt0WzFdWzBdKS8yLCgrdFswXVsxXSsgK3RbMV1bMV0pLzJdfWZ1bmN0aW9uIHYodCxlLG4pe3Qub24oInN0YXJ0Lnpvb20iLChmdW5jdGlvbigpe2IodGhpcyxhcmd1bWVudHMpLnN0YXJ0KCl9KSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIiwoZnVuY3Rpb24oKXtiKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pKS50d2Vlbigiem9vbSIsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cyxvPWIodCxyKSxhPWkuYXBwbHkodCxyKSxzPW58fHkoYSksbD1NYXRoLm1heChhWzFdWzBdLWFbMF1bMF0sYVsxXVsxXS1hWzBdWzFdKSxjPXQuX196b29tLGg9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0LHIpOmUsZD11KGMuaW52ZXJ0KHMpLmNvbmNhdChsL2MuayksaC5pbnZlcnQocykuY29uY2F0KGwvaC5rKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKDE9PT10KXQ9aDtlbHNle3ZhciBlPWQodCksbj1sL2VbMl07dD1uZXcgZGR0KG4sc1swXS1lWzBdKm4sc1sxXS1lWzFdKm4pfW8uem9vbShudWxsLHQpfX0pKX1mdW5jdGlvbiBiKHQsZSl7Zm9yKHZhciBuLGk9MCxyPWgubGVuZ3RoO2k8cjsrK2kpaWYoKG49aFtpXSkudGhhdD09PXQpcmV0dXJuIG47cmV0dXJuIG5ldyB4KHQsZSl9ZnVuY3Rpb24geCh0LGUpe3RoaXMudGhhdD10LHRoaXMuYXJncz1lLHRoaXMuaW5kZXg9LTEsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD1pLmFwcGx5KHQsZSl9ZnVuY3Rpb24gdygpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD1iKHRoaXMsYXJndW1lbnRzKSxlPXRoaXMuX196b29tLGk9TWF0aC5tYXgoc1swXSxNYXRoLm1pbihzWzFdLGUuaypNYXRoLnBvdygyLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLGE9b2N0KHRoaXMpO2lmKHQud2hlZWwpdC5tb3VzZVswXVswXT09PWFbMF0mJnQubW91c2VbMF1bMV09PT1hWzFdfHwodC5tb3VzZVsxXT1lLmludmVydCh0Lm1vdXNlWzBdPWEpKSxjbGVhclRpbWVvdXQodC53aGVlbCk7ZWxzZXtpZihlLms9PT1pKXJldHVybjt0Lm1vdXNlPVthLGUuaW52ZXJ0KGEpXSxkaHQodGhpcyksdC5zdGFydCgpfXlkdCgpLHQud2hlZWw9c2V0VGltZW91dChjLDE1MCksdC56b29tKCJtb3VzZSIscihfKGcoZSxpKSx0Lm1vdXNlWzBdLHQubW91c2VbMV0pLHQuZXh0ZW50LGwpKX1mdW5jdGlvbiBjKCl7dC53aGVlbD1udWxsLHQuZW5kKCl9fWZ1bmN0aW9uIFMoKXtpZighZSYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PWIodGhpcyxhcmd1bWVudHMpLGk9bmN0KEdsdC52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLGMsITApLm9uKCJtb3VzZXVwLnpvb20iLHUsITApLG89b2N0KHRoaXMpLGE9R2x0LmNsaWVudFgscz1HbHQuY2xpZW50WTtsY3QoR2x0LnZpZXcpLF9kdCgpLHQubW91c2U9W28sdGhpcy5fX3pvb20uaW52ZXJ0KG8pXSxkaHQodGhpcyksdC5zdGFydCgpfWZ1bmN0aW9uIGMoKXtpZih5ZHQoKSwhdC5tb3ZlZCl7dmFyIGU9R2x0LmNsaWVudFgtYSxuPUdsdC5jbGllbnRZLXM7dC5tb3ZlZD1lKmUrbipuPmZ9dC56b29tKCJtb3VzZSIscihfKHQudGhhdC5fX3pvb20sdC5tb3VzZVswXT1vY3QodC50aGF0KSx0Lm1vdXNlWzFdKSx0LmV4dGVudCxsKSl9ZnVuY3Rpb24gdSgpe2kub24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbSIsbnVsbCksY2N0KEdsdC52aWV3LHQubW92ZWQpLHlkdCgpLHQuZW5kKCl9fWZ1bmN0aW9uIE0oKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQ9dGhpcy5fX3pvb20sZT1vY3QodGhpcyksbz10LmludmVydChlKSxhPXQuayooR2x0LnNoaWZ0S2V5Py41OjIpLHM9cihfKGcodCxhKSxlLG8pLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLGwpO3lkdCgpLGM+MD9uY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGMpLmNhbGwodixzLGUpOm5jdCh0aGlzKS5jYWxsKG0udHJhbnNmb3JtLHMpfX1mdW5jdGlvbiBFKCl7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBlLGkscixvLGE9Yih0aGlzLGFyZ3VtZW50cykscz1HbHQuY2hhbmdlZFRvdWNoZXMsbD1zLmxlbmd0aDtmb3IoX2R0KCksaT0wO2k8bDsrK2kpbz1bbz1hY3QodGhpcyxzLChyPXNbaV0pLmlkZW50aWZpZXIpLHRoaXMuX196b29tLmludmVydChvKSxyLmlkZW50aWZpZXJdLGEudG91Y2gwP2EudG91Y2gxfHwoYS50b3VjaDE9byk6KGEudG91Y2gwPW8sZT0hMCk7aWYodCYmKHQ9Y2xlYXJUaW1lb3V0KHQpLCFhLnRvdWNoMSkpcmV0dXJuIGEuZW5kKCksdm9pZCgobz1uY3QodGhpcykub24oImRibGNsaWNrLnpvb20iKSkmJm8uYXBwbHkodGhpcyxhcmd1bWVudHMpKTtlJiYodD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3Q9bnVsbH0pLHApLGRodCh0aGlzKSxhLnN0YXJ0KCkpfX1mdW5jdGlvbiBUKCl7dmFyIGUsbixpLG8sYT1iKHRoaXMsYXJndW1lbnRzKSxzPUdsdC5jaGFuZ2VkVG91Y2hlcyxjPXMubGVuZ3RoO2Zvcih5ZHQoKSx0JiYodD1jbGVhclRpbWVvdXQodCkpLGU9MDtlPGM7KytlKWk9YWN0KHRoaXMscywobj1zW2VdKS5pZGVudGlmaWVyKSxhLnRvdWNoMCYmYS50b3VjaDBbMl09PT1uLmlkZW50aWZpZXI/YS50b3VjaDBbMF09aTphLnRvdWNoMSYmYS50b3VjaDFbMl09PT1uLmlkZW50aWZpZXImJihhLnRvdWNoMVswXT1pKTtpZihuPWEudGhhdC5fX3pvb20sYS50b3VjaDEpe3ZhciB1PWEudG91Y2gwWzBdLGg9YS50b3VjaDBbMV0sZD1hLnRvdWNoMVswXSxwPWEudG91Y2gxWzFdLGY9KGY9ZFswXS11WzBdKSpmKyhmPWRbMV0tdVsxXSkqZixtPShtPXBbMF0taFswXSkqbSsobT1wWzFdLWhbMV0pKm07bj1nKG4sTWF0aC5zcXJ0KGYvbSkpLGk9Wyh1WzBdK2RbMF0pLzIsKHVbMV0rZFsxXSkvMl0sbz1bKGhbMF0rcFswXSkvMiwoaFsxXStwWzFdKS8yXX1lbHNle2lmKCFhLnRvdWNoMClyZXR1cm47aT1hLnRvdWNoMFswXSxvPWEudG91Y2gwWzFdfWEuem9vbSgidG91Y2giLHIoXyhuLGksbyksYS5leHRlbnQsbCkpfWZ1bmN0aW9uIEMoKXt2YXIgdCxuLGk9Yih0aGlzLGFyZ3VtZW50cykscj1HbHQuY2hhbmdlZFRvdWNoZXMsbz1yLmxlbmd0aDtmb3IoX2R0KCksZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlPW51bGx9KSxwKSx0PTA7dDxvOysrdCluPXJbdF0saS50b3VjaDAmJmkudG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP2RlbGV0ZSBpLnRvdWNoMDppLnRvdWNoMSYmaS50b3VjaDFbMl09PT1uLmlkZW50aWZpZXImJmRlbGV0ZSBpLnRvdWNoMTtpLnRvdWNoMSYmIWkudG91Y2gwJiYoaS50b3VjaDA9aS50b3VjaDEsZGVsZXRlIGkudG91Y2gxKSxpLnRvdWNoMD9pLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoaS50b3VjaDBbMF0pOmkuZW5kKCl9cmV0dXJuIG0udHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0O24ucHJvcGVydHkoIl9fem9vbSIseGR0KSx0IT09bj92KHQsZSk6bi5pbnRlcnJ1cHQoKS5lYWNoKChmdW5jdGlvbigpe2IodGhpcyxhcmd1bWVudHMpLnN0YXJ0KCkuem9vbShudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUpLmVuZCgpfSkpfSxtLnNjYWxlQnk9ZnVuY3Rpb24odCxlKXttLnNjYWxlVG8odCwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fem9vbS5rLG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZTtyZXR1cm4gdCpufSkpfSxtLnNjYWxlVG89ZnVuY3Rpb24odCxlKXttLnRyYW5zZm9ybSh0LChmdW5jdGlvbigpe3ZhciB0PWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLG49dGhpcy5fX3pvb20sbz15KHQpLGE9bi5pbnZlcnQobykscz0iZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplO3JldHVybiByKF8oZyhuLHMpLG8sYSksdCxsKX0pKX0sbS50cmFuc2xhdGVCeT1mdW5jdGlvbih0LGUsbil7bS50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXtyZXR1cm4gcih0aGlzLl9fem9vbS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSwiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxsKX0pKX0sbS50cmFuc2xhdGVUbz1mdW5jdGlvbih0LGUsbil7bS50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPXRoaXMuX196b29tLGE9eSh0KTtyZXR1cm4gcihtZHQudHJhbnNsYXRlKGFbMF0sYVsxXSkuc2NhbGUoby5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIGU/LWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1lLCJmdW5jdGlvbiI9PXR5cGVvZiBuPy1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotbiksdCxsKX0pKX0seC5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLmluZGV4PWgucHVzaCh0aGlzKS0xLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm1vdXNlJiYibW91c2UiIT09dCYmKHRoaXMubW91c2VbMV09ZS5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gwWzFdPWUuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJiJ0b3VjaCIhPT10JiYodGhpcy50b3VjaDFbMV09ZS5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPWUsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihoLnNwbGljZSh0aGlzLmluZGV4LDEpLHRoaXMuaW5kZXg9LTEsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXshKGZ1bmN0aW9uIGUodCxuLGkscil7dmFyIG89R2x0O3Quc291cmNlRXZlbnQ9R2x0LEdsdD10O3RyeXtuLmFwcGx5KGkscil9ZmluYWxseXtHbHQ9b319KShuZXcgaGR0KG0sdCx0aGlzLnRoYXQuX196b29tKSxkLmFwcGx5LGQsW3QsdGhpcy50aGF0LHRoaXMuYXJnc10pfX0sbS53aGVlbERlbHRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWR0KCt0KSxtKTpvfSxtLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnVkdCghIXQpLG0pOm59LG0udG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWR0KCEhdCksbSk6YX0sbS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1ZHQoW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLG0pOml9LG0uc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHNbMF09K3RbMF0sc1sxXT0rdFsxXSxtKTpbc1swXSxzWzFdXX0sbS50cmFuc2xhdGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGxbMF1bMF09K3RbMF1bMF0sbFsxXVswXT0rdFsxXVswXSxsWzBdWzFdPSt0WzBdWzFdLGxbMV1bMV09K3RbMV1bMV0sbSk6W1tsWzBdWzBdLGxbMF1bMV1dLFtsWzFdWzBdLGxbMV1bMV1dXX0sbS5jb25zdHJhaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxtKTpyfSxtLmR1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSt0LG0pOmN9LG0uaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxtKTp1fSxtLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9ZC5vbi5hcHBseShkLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1kP206dH0sbS5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSh0PSt0KSp0LG0pOk1hdGguc3FydChmKX0sbX0sem9vbVRyYW5zZm9ybTpnZHQsem9vbUlkZW50aXR5Om1kdH0pKTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKgogICAgICogQGZpbGVvdmVydmlldyBtYW51YWxseSBhZGQgZDMtc2VsZWN0aW9uLW11bHRpIHRvIGQzIGRlZmF1bHQgYnVuZGxlLiBNb3N0IG9mIHRoaXMgY29kZSBpcwogICAgICogY29waWVkIGZyb20gZDMtc2VsZWN0aW9uLW11bHRpQDEuMC4wLgogICAgICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy1zZWxlY3Rpb24tbXVsdGkvaXNzdWVzLzExIGZvciB3aHkgd2UgaGF2ZSB0byBkbyB0aGlzCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdG10PUVkdCxlbXQ9RWR0O2Z1bmN0aW9uIG5tdCh0LGUpe3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj10bXQuc2VsZWN0KHRoaXMpO2Zvcih2YXIgaSBpbiB0KW4uYXR0cihpLHRbaV0pfSkpfWZ1bmN0aW9uIGltdCh0LGUpe2Zvcih2YXIgbiBpbiBlKXQuYXR0cihuLGVbbl0pO3JldHVybiB0fWZ1bmN0aW9uIHJtdCh0LGUsbil7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxpPXRtdC5zZWxlY3QodGhpcyk7Zm9yKHZhciByIGluIHQpaS5zdHlsZShyLHRbcl0sbil9KSl9ZnVuY3Rpb24gb210KHQsZSxuKXtmb3IodmFyIGkgaW4gZSl0LnN0eWxlKGksZVtpXSxuKTtyZXR1cm4gdH1mdW5jdGlvbiBhbXQodCxlKXtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLG49dG10LnNlbGVjdCh0aGlzKTtmb3IodmFyIGkgaW4gdCluLnByb3BlcnR5KGksdFtpXSl9KSl9ZnVuY3Rpb24gc210KHQsZSl7Zm9yKHZhciBuIGluIGUpdC5wcm9wZXJ0eShuLGVbbl0pO3JldHVybiB0fWZ1bmN0aW9uIGxtdCh0LGUpe3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT10bXQuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24odCk7Zm9yKHZhciByIGluIG4paS5hdHRyKHIsbltyXSl9KSl9ZnVuY3Rpb24gY210KHQsZSl7Zm9yKHZhciBuIGluIGUpdC5hdHRyKG4sZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gdW10KHQsZSxuKXtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHI9dG10LnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKHQpO2Zvcih2YXIgbyBpbiBpKXIuc3R5bGUobyxpW29dLG4pfSkpfWZ1bmN0aW9uIGhtdCh0LGUsbil7Zm9yKHZhciBpIGluIGUpdC5zdHlsZShpLGVbaV0sbik7cmV0dXJuIHR9dG10LnNlbGVjdGlvbi5wcm90b3R5cGUuYXR0cnM9ZnVuY3Rpb24gZG10KHQpe3JldHVybigiZnVuY3Rpb24iPT10eXBlb2YgdD9ubXQ6aW10KSh0aGlzLHQpfSx0bXQuc2VsZWN0aW9uLnByb3RvdHlwZS5zdHlsZXM9ZnVuY3Rpb24gcG10KHQsZSl7cmV0dXJuKCJmdW5jdGlvbiI9PXR5cGVvZiB0P3JtdDpvbXQpKHRoaXMsdCxudWxsPT1lPyIiOmUpfSx0bXQuc2VsZWN0aW9uLnByb3RvdHlwZS5wcm9wZXJ0aWVzPWZ1bmN0aW9uIGZtdCh0KXtyZXR1cm4oImZ1bmN0aW9uIj09dHlwZW9mIHQ/YW10OnNtdCkodGhpcyx0KX0sZW10LnRyYW5zaXRpb24ucHJvdG90eXBlLmF0dHJzPWZ1bmN0aW9uIG1tdCh0KXtyZXR1cm4oImZ1bmN0aW9uIj09dHlwZW9mIHQ/bG10OmNtdCkodGhpcyx0KX0sZW10LnRyYW5zaXRpb24ucHJvdG90eXBlLnN0eWxlcz1mdW5jdGlvbiBnbXQodCxlKXtyZXR1cm4oImZ1bmN0aW9uIj09dHlwZW9mIHQ/dW10OmhtdCkodGhpcyx0LG51bGw9PWU/IiI6ZSl9O3ZhciBfbXQ9e30seW10PXt9LHZtdD1iZSh2bSksYm10PXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShibXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB4bXQ9RWR0O2JtdC5jb2VyY2VFeHRlcm5hbEQzPWZ1bmN0aW9uIHdtdCh0KXtpZihudWxsPT10LmF0dHJzKXtpZihudWxsPT10Lm5vZGVzKXt2YXIgZT1bXTtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbigpe2UucHVzaCh0aGlzKX0pKSx4bXQuc2VsZWN0QWxsKGUpfXJldHVybiB4bXQuc2VsZWN0QWxsKHQubm9kZXMoKSl9cmV0dXJuIHR9O3ZhciBTbXQ9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovT2JqZWN0LmRlZmluZVByb3BlcnR5KFNtdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksU210Lm1ha2VFbnVtPWZ1bmN0aW9uIE1tdCh0KXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZV09ZSx0fSkse30pfSwKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KHltdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEVtdD1ibXQsVG10PXtsaW5lYXI6dm10LmVhc2VMaW5lYXIscXVhZDp2bXQuZWFzZVF1YWQscXVhZEluOnZtdC5lYXNlUXVhZEluLHF1YWRPdXQ6dm10LmVhc2VRdWFkT3V0LHF1YWRJbk91dDp2bXQuZWFzZVF1YWRJbk91dCxjdWJpYzp2bXQuZWFzZUN1YmljLGN1YmljSW46dm10LmVhc2VDdWJpY0luLGN1YmljT3V0OnZtdC5lYXNlQ3ViaWNPdXQsY3ViaWNJbk91dDp2bXQuZWFzZUN1YmljSW5PdXQscG9seTp2bXQuZWFzZVBvbHkscG9seUluOnZtdC5lYXNlUG9seUluLHBvbHlPdXQ6dm10LmVhc2VQb2x5T3V0LHBvbHlJbk91dDp2bXQuZWFzZVBvbHlJbk91dCxzaW46dm10LmVhc2VTaW4sc2luSW46dm10LmVhc2VTaW5JbixzaW5PdXQ6dm10LmVhc2VTaW5PdXQsc2luSW5PdXQ6dm10LmVhc2VTaW5Jbk91dCxleHA6dm10LmVhc2VFeHAsZXhwSW46dm10LmVhc2VFeHBJbixleHBPdXQ6dm10LmVhc2VFeHBPdXQsZXhwSW5PdXQ6dm10LmVhc2VFeHBJbk91dCxjaXJjbGU6dm10LmVhc2VDaXJjbGUsY2lyY2xlSW46dm10LmVhc2VDaXJjbGVJbixjaXJjbGVPdXQ6dm10LmVhc2VDaXJjbGVPdXQsY2lyY2xlSW5PdXQ6dm10LmVhc2VDaXJjbGVJbk91dCxib3VuY2U6dm10LmVhc2VCb3VuY2UsYm91bmNlSW46dm10LmVhc2VCb3VuY2VJbixib3VuY2VPdXQ6dm10LmVhc2VCb3VuY2VPdXQsYm91bmNlSW5PdXQ6dm10LmVhc2VCb3VuY2VJbk91dCxiYWNrOnZtdC5lYXNlQmFjayxiYWNrSW46dm10LmVhc2VCYWNrSW4sYmFja091dDp2bXQuZWFzZUJhY2tPdXQsYmFja0luT3V0OnZtdC5lYXNlQmFja0luT3V0LGVsYXN0aWM6dm10LmVhc2VFbGFzdGljLGVsYXN0aWNJbjp2bXQuZWFzZUVsYXN0aWNJbixlbGFzdGljT3V0OnZtdC5lYXNlRWxhc3RpY091dCxlbGFzdGljSW5PdXQ6dm10LmVhc2VFbGFzdGljSW5PdXR9O3ltdC5FYXNlTmFtZT1TbXQubWFrZUVudW0oWyJsaW5lYXIiLCJxdWFkIiwicXVhZEluIiwicXVhZE91dCIsInF1YWRJbk91dCIsImN1YmljIiwiY3ViaWNJbiIsImN1YmljT3V0IiwiY3ViaWNJbk91dCIsInBvbHkiLCJwb2x5SW4iLCJwb2x5T3V0IiwicG9seUluT3V0Iiwic2luIiwic2luSW4iLCJzaW5PdXQiLCJzaW5Jbk91dCIsImV4cCIsImV4cEluIiwiZXhwT3V0IiwiZXhwSW5PdXQiLCJjaXJjbGUiLCJjaXJjbGVJbiIsImNpcmNsZU91dCIsImNpcmNsZUluT3V0IiwiYm91bmNlIiwiYm91bmNlSW4iLCJib3VuY2VPdXQiLCJib3VuY2VJbk91dCIsImJhY2siLCJiYWNrSW4iLCJiYWNrT3V0IiwiYmFja0luT3V0IiwiZWxhc3RpYyIsImVsYXN0aWNJbiIsImVsYXN0aWNPdXQiLCJlbGFzdGljSW5PdXQiXSk7dmFyIENtdD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fc3RhcnREZWxheT10Ll9ERUZBVUxUX1NUQVJUX0RFTEFZX01JTExJU0VDT05EUyx0aGlzLl9zdGVwRHVyYXRpb249dC5fREVGQVVMVF9TVEVQX0RVUkFUSU9OX01JTExJU0VDT05EUyx0aGlzLl9zdGVwRGVsYXk9dC5fREVGQVVMVF9JVEVSQVRJVkVfREVMQVlfTUlMTElTRUNPTkRTLHRoaXMuX21heFRvdGFsRHVyYXRpb249dC5fREVGQVVMVF9NQVhfVE9UQUxfRFVSQVRJT05fTUlMTElTRUNPTkRTLHRoaXMuX2Vhc2luZ01vZGU9dC5fREVGQVVMVF9FQVNJTkdfTU9ERX1yZXR1cm4gdC5wcm90b3R5cGUudG90YWxUaW1lPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldEFkanVzdGVkSXRlcmF0aXZlRGVsYXkodCk7cmV0dXJuIHRoaXMuc3RhcnREZWxheSgpK2UqTWF0aC5tYXgodC0xLDApK3RoaXMuc3RlcER1cmF0aW9uKCl9LHQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9KHQ9RW10LmNvZXJjZUV4dGVybmFsRDModCkpLnNpemUoKSxyPXRoaXMuX2dldEFkanVzdGVkSXRlcmF0aXZlRGVsYXkoaSk7cmV0dXJuIHQudHJhbnNpdGlvbigpLmVhc2UodGhpcy5fZ2V0RWFzZUZhY3RvcnkoKSkuZHVyYXRpb24odGhpcy5zdGVwRHVyYXRpb24oKSkuZGVsYXkoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc3RhcnREZWxheSgpK3IqZX0pKS5hdHRycyhlKX0sdC5wcm90b3R5cGUuc3RhcnREZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9zdGFydERlbGF5Oih0aGlzLl9zdGFydERlbGF5PXQsdGhpcyl9LHQucHJvdG90eXBlLnN0ZXBEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9NYXRoLm1pbih0aGlzLl9zdGVwRHVyYXRpb24sdGhpcy5fbWF4VG90YWxEdXJhdGlvbik6KHRoaXMuX3N0ZXBEdXJhdGlvbj10LHRoaXMpfSx0LnByb3RvdHlwZS5zdGVwRGVsYXk9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fc3RlcERlbGF5Oih0aGlzLl9zdGVwRGVsYXk9dCx0aGlzKX0sdC5wcm90b3R5cGUubWF4VG90YWxEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9tYXhUb3RhbER1cmF0aW9uOih0aGlzLl9tYXhUb3RhbER1cmF0aW9uPXQsdGhpcyl9LHQucHJvdG90eXBlLmVhc2luZ01vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZWFzaW5nTW9kZToodGhpcy5fZWFzaW5nTW9kZT10LHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0RWFzZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVhc2luZ01vZGUoKTtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPVRtdFt0XTtyZXR1cm4gbnVsbD09ZT9UbXQubGluZWFyOmV9cmV0dXJuIHR9LHQucHJvdG90eXBlLl9nZXRBZGp1c3RlZEl0ZXJhdGl2ZURlbGF5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWF4VG90YWxEdXJhdGlvbigpLXRoaXMuc3RlcER1cmF0aW9uKCksbj0oZT1NYXRoLm1heChlLDApKS9NYXRoLm1heCh0LTEsMSk7cmV0dXJuIE1hdGgubWluKHRoaXMuc3RlcERlbGF5KCksbil9LHQuX0RFRkFVTFRfU1RBUlRfREVMQVlfTUlMTElTRUNPTkRTPTAsdC5fREVGQVVMVF9TVEVQX0RVUkFUSU9OX01JTExJU0VDT05EUz0zMDAsdC5fREVGQVVMVF9JVEVSQVRJVkVfREVMQVlfTUlMTElTRUNPTkRTPTE1LHQuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUz0xLzAsdC5fREVGQVVMVF9FQVNJTkdfTU9ERT0iZXhwT3V0Iix0fSkoKTt5bXQuRWFzaW5nPUNtdDt2YXIgQW10PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShBbXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBrbXQ9Ym10LExtdD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24odCl7cmV0dXJuIDB9LHQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD1rbXQuY29lcmNlRXh0ZXJuYWxEMyh0KSkuYXR0cnMoZSl9LHR9KSgpO0FtdC5OdWxsPUxtdCwoZnVuY3Rpb24odCl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZT11TztlLl9fZXhwb3J0U3Rhcih5bXQsdCksZS5fX2V4cG9ydFN0YXIoQW10LHQpfSkoX210KTt2YXIgUG10PXt9LE5tdD17fSxJbXQ9e30sUm10PXt9LE9tdD17fSx6bXQ9e30sRG10PXt9LEJtdD17fSxIbXQ9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KEhtdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEZtdD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuY2FjaGU9e30sdGhpcy5jb21wdXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jYWNoZS5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuY2FjaGVbdF09dGhpcy5jb21wdXRlKHQpKSx0aGlzLmNhY2hlW3RdfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhY2hlPXt9LHRoaXN9LHR9KSgpO0htdC5DYWNoZT1GbXQ7dmFyIFZtdD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVm10LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgVW10PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuYXJyYXlFcT1mdW5jdGlvbih0LGUpe2lmKG51bGw9PXR8fG51bGw9PWUpcmV0dXJuIHQ9PT1lO2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXSE9PWVbbl0pcmV0dXJuITE7cmV0dXJuITB9LHQub2JqRXE9ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lfHxudWxsPT1uKXJldHVybiBlPT09bjt2YXIgaT1PYmplY3Qua2V5cyhlKS5zb3J0KCkscj1PYmplY3Qua2V5cyhuKS5zb3J0KCksbz1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KSksYT1yLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19KSk7cmV0dXJuIHQuYXJyYXlFcShpLHIpJiZ0LmFycmF5RXEobyxhKX0sdC5zdHJpY3RFcT1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZX0sdC5kZWZhdWx0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTtpZihudWxsPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO3ZhciBpPU9iamVjdCh0KTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihudWxsIT10KWZvcih2YXIgZSBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpJiYoaVtlXT10W2VdKX0pKSxpfSx0fSkoKTtWbXQuTWV0aG9kcz1VbXQ7dmFyIGptdD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoam10LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgR210PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuY29tYmluZVdoaXRlc3BhY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWyBcdF0rL2csIiAiKX0sdC5pc05vdEVtcHR5U3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYiIiE9PXQudHJpbSgpfSx0LnRyaW1TdGFydD1mdW5jdGlvbihlLG4pe2lmKCFlKXJldHVybiBlO3ZhciBpPWUuc3BsaXQoIiIpLHI9bj9mdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdChuKS5zb21lKHQuaXNOb3RFbXB0eVN0cmluZyl9OnQuaXNOb3RFbXB0eVN0cmluZztyZXR1cm4gaS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCtlKT90K2U6dH0pLCIiKX0sdC50cmltRW5kPWZ1bmN0aW9uKGUsbil7aWYoIWUpcmV0dXJuIGU7dmFyIGk9ZS5zcGxpdCgiIik7cmV0dXJuIGkucmV2ZXJzZSgpLChpPXQudHJpbVN0YXJ0KGkuam9pbigiIiksbikuc3BsaXQoIiIpKS5yZXZlcnNlKCksaS5qb2luKCIiKX0sdH0pKCk7am10LlN0cmluZ01ldGhvZHM9R210O3ZhciBXbXQ9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KFdtdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHFtdD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5Xb3JkRGl2aWRlclJlZ0V4cD1uZXcgUmVnRXhwKCJcXFciKSx0aGlzLldoaXRlc3BhY2VSZWdFeHA9bmV3IFJlZ0V4cCgiXFxzIil9cmV0dXJuIHQucHJvdG90eXBlLnRva2VuaXplPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQuc3BsaXQoIiIpLnJlZHVjZSgoZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5zbGljZSgwLC0xKS5jb25jYXQoZS5zaG91bGRDcmVhdGVOZXdUb2tlbih0W3QubGVuZ3RoLTFdLG4pKX0pLFsiIl0pfSx0LnByb3RvdHlwZS5zaG91bGRDcmVhdGVOZXdUb2tlbj1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybltlXTt2YXIgbj10W3QubGVuZ3RoLTFdO3JldHVybiB0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChuKSYmdGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3QoZSk/W3QrZV06dGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qobil8fHRoaXMuV2hpdGVzcGFjZVJlZ0V4cC50ZXN0KGUpP1t0LGVdOnRoaXMuV29yZERpdmlkZXJSZWdFeHAudGVzdChuKT9uPT09ZT9bdCtlXTpbdCxlXTpbdCtlXX0sdH0pKCk7V210LlRva2VuaXplcj1xbXQsKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7Zm9yKHZhciBuIGluIGUpdC5oYXNPd25Qcm9wZXJ0eShuKXx8KHRbbl09ZVtuXSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUoSG10KSxlKFZtdCksZShqbXQpLGUoV210KX0pKEJtdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KERtdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFltdD1CbXQsWG10PXt0ZXh0Um90YXRpb246MCx0ZXh0U2hlYXI6MCx4QWxpZ246ImxlZnQiLHlBbGlnbjoidG9wIn0sJG10PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX21lYXN1cmVyPXQsdGhpcy5fcGVuRmFjdG9yeT1lLHRoaXMuX3dyYXBwZXI9bn1yZXR1cm4gdC5wcm90b3R5cGUubWVhc3VyZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21lYXN1cmVyPXQsdGhpc30sdC5wcm90b3R5cGUud3JhcHBlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd3JhcHBlcj10LHRoaXN9LHQucHJvdG90eXBlLnBlbkZhY3Rvcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BlbkZhY3Rvcnk9dCx0aGlzfSx0LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLG4saSxyLG8pe2lmKHZvaWQgMD09PXImJihyPXt9KSxyPVltdC5NZXRob2RzLmRlZmF1bHRzKHt9LFhtdCxyKSwtMT09PXQuU3VwcG9ydGVkUm90YXRpb24uaW5kZXhPZihyLnRleHRSb3RhdGlvbikpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCByb3RhdGlvbiAtICIrci50ZXh0Um90YXRpb24rIi4gU3VwcG9ydGVkIHJvdGF0aW9ucyBhcmUgIit0LlN1cHBvcnRlZFJvdGF0aW9uLmpvaW4oIiwgIikpO2lmKG51bGwhPXIudGV4dFNoZWFyJiZyLnRleHRTaGVhcjwtODB8fHIudGV4dFNoZWFyPjgwKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgc2hlYXIgYW5nbGUgLSAiK3IudGV4dFNoZWFyKyIuIE11c3QgYmUgYmV0d2VlbiAtODAgYW5kIDgwIik7dmFyIGE9TWF0aC5hYnMoTWF0aC5hYnMoci50ZXh0Um90YXRpb24pLTkwKT40NSxzPWE/bjppLGw9YT9pOm4sYz1yLnRleHRTaGVhcix1PWMqTWF0aC5QSS8xODAsaD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LGQ9aCpNYXRoLnRhbih1KSxwPXMvTWF0aC5jb3ModSktTWF0aC5hYnMoZCksZj1sKk1hdGguY29zKHUpLG09WW10LlN0cmluZ01ldGhvZHMuY29tYmluZVdoaXRlc3BhY2UoZSksZz0odGhpcy5fd3JhcHBlcj90aGlzLl93cmFwcGVyLndyYXAobSx0aGlzLl9tZWFzdXJlcixwLGYpLndyYXBwZWRUZXh0Om0pLnNwbGl0KCJcbiIpLF89dC5YT2Zmc2V0RmFjdG9yW3IueEFsaWduXSpwKk1hdGguc2luKHUpLXQuWU9mZnNldEZhY3RvcltyLnlBbGlnbl0qKGYtZy5sZW5ndGgqaCkseT1bMCwwXSx2PXIudGV4dFJvdGF0aW9uK2M7c3dpdGNoKHIudGV4dFJvdGF0aW9uKXtjYXNlIDkwOnk9W24rXywwXTticmVhaztjYXNlLTkwOnk9Wy1fLGldO2JyZWFrO2Nhc2UgMTgwOnk9W24saStfXTticmVhaztkZWZhdWx0Onk9WzAsLV9dfXZhciBiPXRoaXMuX3BlbkZhY3RvcnkuY3JlYXRlUGVuKGUse3RyYW5zbGF0ZTp5LHJvdGF0ZTp2fSxvKTt0aGlzLndyaXRlTGluZXMoZyxiLHAsaCxkLHIueEFsaWduKSxudWxsIT1iLmRlc3Ryb3kmJmIuZGVzdHJveSgpfSx0LnByb3RvdHlwZS53cml0ZUxpbmVzPWZ1bmN0aW9uKHQsZSxuLGkscixvKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQsYSl7ZS53cml0ZSh0LG4sbyxyPjA/KGErMSkqcjphKnIsKGErMSkqaSl9KSl9LHR9KSgpOyRtdC5YT2Zmc2V0RmFjdG9yPXtjZW50ZXI6LjUsbGVmdDowLHJpZ2h0OjF9LCRtdC5ZT2Zmc2V0RmFjdG9yPXtib3R0b206MSxjZW50ZXI6LjUsdG9wOjB9LCRtdC5TdXBwb3J0ZWRSb3RhdGlvbj1bLTkwLDAsMTgwLDkwXSxEbXQuV3JpdGVyPSRtdCwoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLChmdW5jdGlvbiBlKG4pe2Zvcih2YXIgaSBpbiBuKXQuaGFzT3duUHJvcGVydHkoaSl8fCh0W2ldPW5baV0pfSkoRG10KX0pKHptdCk7dmFyIEttdD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoS210LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWm10PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuYXBwZW5kPWZ1bmN0aW9uKGUsbil7Zm9yKHZhciBpPVtdLHI9MjtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWlbci0yXT1hcmd1bWVudHNbcl07dmFyIG89dC5jcmVhdGUuYXBwbHkodCxbbl0uY29uY2F0KGkpKTtyZXR1cm4gZS5hcHBlbmRDaGlsZChvKSxvfSx0LmNyZWF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIG49W10saT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbltpLTFdPWFyZ3VtZW50c1tpXTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3JldHVybiB0LmFkZENsYXNzZXMuYXBwbHkodCxbcl0uY29uY2F0KG4pKSxyfSx0LmFkZENsYXNzZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07ZT1lLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXR9KSksbnVsbCE9dC5jbGFzc0xpc3Q/ZS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmNsYXNzTGlzdC5hZGQoZSl9KSk6dC5zZXRBdHRyaWJ1dGUoImNsYXNzIixlLmpvaW4oIiAiKSl9LHQuZ2V0RGltZW5zaW9ucz1mdW5jdGlvbih0KXtpZih0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl0cnl7dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57d2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9fWNhdGNoKHQpe31yZXR1cm57aGVpZ2h0OjAsd2lkdGg6MH19LHR9KSgpO0ttdC5IdG1sVXRpbHM9Wm10O3ZhciBKbXQ9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dm9pZCAwPT09biYmKG49ITEpO3ZhciBpPXRoaXM7dGhpcy5lbGVtZW50PXQsdGhpcy5jbGFzc05hbWU9ZSx0aGlzLmFkZFRpdGxlPW4sdGhpcy5jcmVhdGVSdWxlcj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1abXQuYXBwZW5kKGkuZWxlbWVudCwic3BhbiIsInRleHQtdG1wIixpLmNsYXNzTmFtZSk7ZS50ZXh0Q29udGVudD10O3ZhciBuPVptdC5nZXREaW1lbnNpb25zKGUpO3JldHVybiBpLmVsZW1lbnQucmVtb3ZlQ2hpbGQoZSksbn19LHRoaXMuY3JlYXRlUGVuPWZ1bmN0aW9uKHQsZSxuKXtudWxsPT1uJiYobj1pLmVsZW1lbnQpO3ZhciByPVptdC5hcHBlbmQobiwiZGl2IiwidGV4dC1ibG9jayIsaS5jbGFzc05hbWUpO3JldHVybiByLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsci5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZSgwLCAtMWVtKSB0cmFuc2xhdGUoIitlLnRyYW5zbGF0ZVswXSsicHgsICIrZS50cmFuc2xhdGVbMV0rInB4KSByb3RhdGUoIitlLnJvdGF0ZSsiZGVnKSIsci5zdHlsZS50cmFuc2Zvcm1PcmlnaW49IjAgMS4yZW0iLGkuYWRkVGl0bGUmJnIuc2V0QXR0cmlidXRlKCJ0aXRsZSIsdCksaS5jcmVhdGVIdG1sTGluZVBlbihyKX19cmV0dXJuIHQucHJvdG90eXBlLnNldEFkZFRpdGxlPWZ1bmN0aW9uKHQpe3RoaXMuYWRkVGl0bGU9dH0sdC5wcm90b3R5cGUuY3JlYXRlSHRtbExpbmVQZW49ZnVuY3Rpb24odCl7cmV0dXJue3dyaXRlOmZ1bmN0aW9uKGUsbixpLHIsbyl7dmFyIGE9Wm10LmFwcGVuZCh0LCJkaXYiLCJ0ZXh0LWxpbmUiKTthLnRleHRDb250ZW50PWUsYS5zdHlsZS53aWR0aD1uKyJweCIsYS5zdHlsZS50ZXh0QWxpZ249aSxhLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYS5zdHlsZS53aGl0ZVNwYWNlPSJub3dyYXAiLGEuc3R5bGUudG9wPW8rInB4IixhLnN0eWxlLmxlZnQ9cisicHgifX19LHR9KSgpO0ttdC5IdG1sQ29udGV4dD1KbXQsT2JqZWN0LmRlZmluZVByb3BlcnR5KE9tdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFFtdD16bXQsdGd0PUttdCxlZ3Q9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5hcHBlbmQ9ZnVuY3Rpb24oZSxuKXtmb3IodmFyIGk9W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspaVtyLTJdPWFyZ3VtZW50c1tyXTt2YXIgbz10LmNyZWF0ZS5hcHBseSh0LFtuXS5jb25jYXQoaSkpO3JldHVybiBlLmFwcGVuZENoaWxkKG8pLG99LHQuY3JlYXRlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj1bXSxpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMV09YXJndW1lbnRzW2ldO3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LlNWR19OUyxlKTtyZXR1cm4gdGd0Lkh0bWxVdGlscy5hZGRDbGFzc2VzLmFwcGx5KHRndC5IdG1sVXRpbHMsW3JdLmNvbmNhdChuKSkscn0sdC5nZXREaW1lbnNpb25zPWZ1bmN0aW9uKHQpe2lmKHQuZ2V0QkJveCl0cnl7dmFyIGU9dC5nZXRCQm94KCk7cmV0dXJue3dpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0fX1jYXRjaCh0KXt9cmV0dXJue2hlaWdodDowLHdpZHRoOjB9fSx0fSkoKTtlZ3QuU1ZHX05TPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsT210LlN2Z1V0aWxzPWVndDt2YXIgbmd0PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZvaWQgMD09PW4mJihuPSExKTt2YXIgaT10aGlzO3RoaXMuZWxlbWVudD10LHRoaXMuY2xhc3NOYW1lPWUsdGhpcy5hZGRUaXRsZUVsZW1lbnQ9bix0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7dmFyIHQ9aS5nZXRUZXh0RWxlbWVudHMoaS5lbGVtZW50KSxlPXQucGFyZW50RWxlbWVudCxuPXQuY29udGFpbmVyRWxlbWVudCxyPXQudGV4dEVsZW1lbnQ7cmV0dXJuIGZ1bmN0aW9uKHQpe2UuYXBwZW5kQ2hpbGQobiksci50ZXh0Q29udGVudD10O3ZhciBpPWVndC5nZXREaW1lbnNpb25zKHIpO3JldHVybiBlLnJlbW92ZUNoaWxkKG4pLGl9fSx0aGlzLmNyZWF0ZVBlbj1mdW5jdGlvbih0LGUsbil7bnVsbD09biYmKG49aS5lbGVtZW50KTt2YXIgcj1lZ3QuYXBwZW5kKG4sImciLCJ0ZXh0LWNvbnRhaW5lciIsaS5jbGFzc05hbWUpO2kuYWRkVGl0bGVFbGVtZW50JiYoZWd0LmFwcGVuZChyLCJ0aXRsZSIpLnRleHRDb250ZW50PXQsci5zZXRBdHRyaWJ1dGUoInRpdGxlIix0KSk7dmFyIG89ZWd0LmFwcGVuZChyLCJnIiwidGV4dC1hcmVhIik7cmV0dXJuIG8uc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLnRyYW5zbGF0ZVswXSsiLCIrZS50cmFuc2xhdGVbMV0rIilyb3RhdGUoIitlLnJvdGF0ZSsiKSIpLGkuY3JlYXRlU3ZnTGluZVBlbihvKX19cmV0dXJuIHQucHJvdG90eXBlLnNldEFkZFRpdGxlRWxlbWVudD1mdW5jdGlvbih0KXt0aGlzLmFkZFRpdGxlRWxlbWVudD10fSx0LnByb3RvdHlwZS5jcmVhdGVTdmdMaW5lUGVuPWZ1bmN0aW9uKGUpe3JldHVybnt3cml0ZTpmdW5jdGlvbihuLGkscixvLGEpe28rPWkqUW10LldyaXRlci5YT2Zmc2V0RmFjdG9yW3JdO3ZhciBzPWVndC5hcHBlbmQoZSwidGV4dCIsInRleHQtbGluZSIpO3MudGV4dENvbnRlbnQ9bixzLnNldEF0dHJpYnV0ZSgidGV4dC1hbmNob3IiLHQuQW5jaG9yTWFwW3JdKSxzLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbysiLCIrYSsiKSIpLHMuc2V0QXR0cmlidXRlKCJ5IiwiLTAuMjVlbSIpfX19LHQucHJvdG90eXBlLmdldFRleHRFbGVtZW50cz1mdW5jdGlvbih0KXtpZigidGV4dCI9PT10LnRhZ05hbWUpcmV0dXJuIG51bGw9PShlPXQucGFyZW50RWxlbWVudCkmJihlPXQucGFyZW50Tm9kZSksZS5yZW1vdmVDaGlsZCh0KSx7Y29udGFpbmVyRWxlbWVudDp0LHBhcmVudEVsZW1lbnQ6ZSx0ZXh0RWxlbWVudDp0fTt2YXIgZSxuPXQucXVlcnlTZWxlY3RvcigidGV4dCIpO2lmKG51bGwhPW4pcmV0dXJuIG51bGw9PShlPW4ucGFyZW50RWxlbWVudCkmJihlPW4ucGFyZW50Tm9kZSksZS5yZW1vdmVDaGlsZChuKSx7Y29udGFpbmVyRWxlbWVudDpuLHBhcmVudEVsZW1lbnQ6ZSx0ZXh0RWxlbWVudDpufTt2YXIgaT1lZ3QuY3JlYXRlKCJ0ZXh0Iix0aGlzLmNsYXNzTmFtZSk7cmV0dXJue2NvbnRhaW5lckVsZW1lbnQ6aSxwYXJlbnRFbGVtZW50OnQsdGV4dEVsZW1lbnQ6aX19LHR9KSgpO25ndC5BbmNob3JNYXA9e2NlbnRlcjoibWlkZGxlIixsZWZ0OiJzdGFydCIscmlnaHQ6ImVuZCJ9LE9tdC5TdmdDb250ZXh0PW5ndDt2YXIgaWd0PXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShpZ3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByZ3Q9em10LG9ndD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2b2lkIDA9PT1lJiYoZT0xMCksdm9pZCAwPT09biYmKG49e30pO3ZhciBpPXRoaXM7dGhpcy5jdHg9dCx0aGlzLmxpbmVIZWlnaHQ9ZSx0aGlzLnN0eWxlPW4sdGhpcy5jcmVhdGVSdWxlcj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5jdHguZm9udD1pLnN0eWxlLmZvbnQse3dpZHRoOmkuY3R4Lm1lYXN1cmVUZXh0KHQpLndpZHRoLGhlaWdodDppLmxpbmVIZWlnaHR9fX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24odCxlLG4pe3JldHVybiBudWxsPT1uJiYobj1pLmN0eCksbi5zYXZlKCksbi50cmFuc2xhdGUoZS50cmFuc2xhdGVbMF0sZS50cmFuc2xhdGVbMV0pLG4ucm90YXRlKGUucm90YXRlKk1hdGguUEkvMTgwKSxpLmNyZWF0ZUNhbnZhc1BlbihuKX0sdm9pZCAwPT09dGhpcy5zdHlsZS5maWxsJiYodGhpcy5zdHlsZS5maWxsPSIjNDQ0Iil9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZUNhbnZhc1Blbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybntkZXN0cm95OmZ1bmN0aW9uKCl7dC5yZXN0b3JlKCl9LHdyaXRlOmZ1bmN0aW9uKG4saSxyLG8sYSl7bys9aSpyZ3QuV3JpdGVyLlhPZmZzZXRGYWN0b3Jbcl0sdC50ZXh0QWxpZ249cixudWxsIT1lLnN0eWxlLmZvbnQmJih0LmZvbnQ9ZS5zdHlsZS5mb250KSxudWxsIT1lLnN0eWxlLmZpbGwmJih0LmZpbGxTdHlsZT1lLnN0eWxlLmZpbGwsdC5maWxsVGV4dChuLG8sYSkpLG51bGwhPWUuc3R5bGUuc3Ryb2tlJiYodC5zdHJva2VTdHlsZT1lLnN0eWxlLmZpbGwsdC5zdHJva2VUZXh0KG4sbyxhKSl9fX0sdH0pKCk7aWd0LkNhbnZhc0NvbnRleHQ9b2d0LChmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe2Zvcih2YXIgbiBpbiBlKXQuaGFzT3duUHJvcGVydHkobil8fCh0W25dPWVbbl0pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlKE9tdCksZShpZ3QpLGUoS210KX0pKFJtdCk7dmFyIGFndD17fSxzZ3Q9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KHNndCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGxndD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMucnVsZXI9bnVsbCE9dC5jcmVhdGVSdWxlcj90LmNyZWF0ZVJ1bGVyKCk6dH1yZXR1cm4gdC5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dC5IRUlHSFRfVEVYVCksdGhpcy5ydWxlcihlKX0sdH0pKCk7bGd0LkhFSUdIVF9URVhUPSJiZHBxbCIsc2d0LkFic3RyYWN0TWVhc3VyZXI9bGd0O3ZhciBjZ3Q9e30sdWd0PXt9LGhndD17fSxkZ3Q9dmUmJnZlLl9fZXh0ZW5kc3x8KGZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX18fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSl9O3JldHVybiBmdW5jdGlvbihlLG4pe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9dChlLG4pLGUucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KGkucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyBpKX19KSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShoZ3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBwZ3Q9c2d0LGZndD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZvaWQgMD09PW4mJihuPSExKTt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS51c2VHdWFyZHM9bixpfXJldHVybiBkZ3QoZSx0KSxlLnByb3RvdHlwZS5fYWRkR3VhcmRzPWZ1bmN0aW9uKHQpe3JldHVybiBwZ3QuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCt0K3BndC5BYnN0cmFjdE1lYXN1cmVyLkhFSUdIVF9URVhUfSxlLnByb3RvdHlwZS5fbWVhc3VyZUxpbmU9ZnVuY3Rpb24oZSxuKXt2b2lkIDA9PT1uJiYobj0hMSk7dmFyIGk9dGhpcy51c2VHdWFyZHN8fG58fC9eW1x0IF0kLy50ZXN0KGUpLHI9aT90aGlzLl9hZGRHdWFyZHMoZSk6ZSxvPXQucHJvdG90eXBlLm1lYXN1cmUuY2FsbCh0aGlzLHIpO3JldHVybiBvLndpZHRoLT1pPzIqdGhpcy5nZXRHdWFyZFdpZHRoKCk6MCxvfSxlLnByb3RvdHlwZS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodm9pZCAwPT09dCYmKHQ9cGd0LkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFQpLCIiPT09dC50cmltKCkpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjB9O3ZhciBuPXQudHJpbSgpLnNwbGl0KCJcbiIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX21lYXN1cmVMaW5lKHQpfSkpO3JldHVybntoZWlnaHQ6bi5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZS5oZWlnaHR9KSwwKSx3aWR0aDpuLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLndpZHRoKX0pLDApfX0sZS5wcm90b3R5cGUuZ2V0R3VhcmRXaWR0aD1mdW5jdGlvbigpe3JldHVybiBudWxsPT10aGlzLmd1YXJkV2lkdGgmJih0aGlzLmd1YXJkV2lkdGg9dC5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMpLndpZHRoKSx0aGlzLmd1YXJkV2lkdGh9LGV9KShwZ3QuQWJzdHJhY3RNZWFzdXJlcik7aGd0Lk1lYXN1cmVyPWZndDt2YXIgbWd0PXZlJiZ2ZS5fX2V4dGVuZHN8fChmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9fHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W25dPWVbbl0pfTtyZXR1cm4gZnVuY3Rpb24oZSxuKXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXQoZSxuKSxlLnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihpLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgaSl9fSkoKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodWd0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ2d0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbWd0KGUsdCksZS5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvdG90eXBlLl9tZWFzdXJlTGluZS5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9tZWFzdXJlTGluZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC5zcGxpdCgiIikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fbWVhc3VyZUNoYXJhY3Rlcih0KX0pKTtyZXR1cm57aGVpZ2h0Om4ucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUuaGVpZ2h0KX0pLDApLHdpZHRoOm4ucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2Uud2lkdGh9KSwwKX19LGV9KShoZ3QuTWVhc3VyZXIpO3VndC5DaGFyYWN0ZXJNZWFzdXJlcj1nZ3Q7dmFyIF9ndD12ZSYmdmUuX19leHRlbmRzfHwoZnVuY3Rpb24oKXt2YXIgdD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxlKXt0Ll9fcHJvdG9fXz1lfXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1lW25dKX07cmV0dXJuIGZ1bmN0aW9uKGUsbil7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX10KGUsbiksZS5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooaS5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IGkpfX0pKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGNndCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHlndD1CbXQsdmd0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gaS5jYWNoZT1uZXcgeWd0LkNhY2hlKChmdW5jdGlvbih0KXtyZXR1cm4gaS5fbWVhc3VyZUNoYXJhY3Rlck5vdEZyb21DYWNoZSh0KX0pKSxpfXJldHVybiBfZ3QoZSx0KSxlLnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlck5vdEZyb21DYWNoZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXIuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jYWNoZS5nZXQodCl9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jYWNoZS5jbGVhcigpfSxlfSkodWd0LkNoYXJhY3Rlck1lYXN1cmVyKTtjZ3QuQ2FjaGVDaGFyYWN0ZXJNZWFzdXJlcj12Z3Q7dmFyIGJndD17fSx4Z3Q9dmUmJnZlLl9fZXh0ZW5kc3x8KGZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX18fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSl9O3JldHVybiBmdW5jdGlvbihlLG4pe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9dChlLG4pLGUucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KGkucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyBpKX19KSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiZ3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB3Z3Q9Qm10LFNndD1zZ3QsTWd0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBuLmRpbUNhY2hlPW5ldyB3Z3QuQ2FjaGUoKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9tZWFzdXJlTm90RnJvbUNhY2hlKHQpfSkpLG59cmV0dXJuIHhndChlLHQpLGUucHJvdG90eXBlLl9tZWFzdXJlTm90RnJvbUNhY2hlPWZ1bmN0aW9uKGUpe3JldHVybiB0LnByb3RvdHlwZS5tZWFzdXJlLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9U2d0LkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFQpLHRoaXMuZGltQ2FjaGUuZ2V0KHQpfSxlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuZGltQ2FjaGUuY2xlYXIoKSx0LnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpfSxlfSkoY2d0LkNhY2hlQ2hhcmFjdGVyTWVhc3VyZXIpO2JndC5DYWNoZU1lYXN1cmVyPU1ndCwoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtmb3IodmFyIG4gaW4gZSl0Lmhhc093blByb3BlcnR5KG4pfHwodFtuXT1lW25dKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZShzZ3QpLGUoY2d0KSxlKGJndCksZSh1Z3QpLGUoaGd0KX0pKGFndCk7dmFyIEVndD17fSxUZ3Q9e30sQ2d0PXt9LEFndD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQWd0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIga2d0PUJtdCxMZ3Q9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMubWF4TGluZXMoMS8wKSx0aGlzLnRleHRUcmltbWluZygiZWxsaXBzaXMiKSx0aGlzLmFsbG93QnJlYWtpbmdXb3JkcyghMSksdGhpcy5fdG9rZW5pemVyPW5ldyBrZ3QuVG9rZW5pemVyLHRoaXMuX2JyZWFraW5nQ2hhcmFjdGVyPSItIn1yZXR1cm4gdC5wcm90b3R5cGUubWF4TGluZXM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fbWF4TGluZXM6KHRoaXMuX21heExpbmVzPXQsdGhpcyl9LHQucHJvdG90eXBlLnRleHRUcmltbWluZz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl90ZXh0VHJpbW1pbmc7aWYoImVsbGlwc2lzIiE9PXQmJiJub25lIiE9PXQpdGhyb3cgbmV3IEVycm9yKHQrIiAtIHVuc3VwcG9ydGVkIHRleHQgdHJpbW1pbmcgb3B0aW9uLiIpO3JldHVybiB0aGlzLl90ZXh0VHJpbW1pbmc9dCx0aGlzfSx0LnByb3RvdHlwZS5hbGxvd0JyZWFraW5nV29yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fYWxsb3dCcmVha2luZ1dvcmRzOih0aGlzLl9hbGxvd0JyZWFraW5nV29yZHM9dCx0aGlzKX0sdC5wcm90b3R5cGUud3JhcD1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj10aGlzO3ZvaWQgMD09PWkmJihpPTEvMCk7dmFyIG89e25vQnJva2VXb3JkczowLG5vTGluZXM6MCxvcmlnaW5hbFRleHQ6dCx0cnVuY2F0ZWRUZXh0OiIiLHdyYXBwZWRUZXh0OiIifSxhPXthdmFpbGFibGVMaW5lczpNYXRoLm1pbihNYXRoLmZsb29yKGkvZS5tZWFzdXJlKCkuaGVpZ2h0KSx0aGlzLl9tYXhMaW5lcyksYXZhaWxhYmxlV2lkdGg6bixjYW5GaXRUZXh0OiEwLGN1cnJlbnRMaW5lOiIiLHdyYXBwaW5nOm99LHM9dC5zcGxpdCgiXG4iKTtyZXR1cm4gcy5yZWR1Y2UoKGZ1bmN0aW9uKHQsbixpKXtyZXR1cm4gci5icmVha0xpbmVUb0ZpdFdpZHRoKHQsbixpIT09cy5sZW5ndGgtMSxlKX0pLGEpLndyYXBwaW5nfSx0LnByb3RvdHlwZS5icmVha0xpbmVUb0ZpdFdpZHRoPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXM7dC5jYW5GaXRUZXh0fHwiIj09PXQud3JhcHBpbmcudHJ1bmNhdGVkVGV4dHx8KHQud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9IlxuIiksdD10aGlzLl90b2tlbml6ZXIudG9rZW5pemUoZSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiByLndyYXBOZXh0VG9rZW4oZSx0LGkpfSksdCk7dmFyIG89a2d0LlN0cmluZ01ldGhvZHMudHJpbUVuZCh0LmN1cnJlbnRMaW5lKTtyZXR1cm4gdC53cmFwcGluZy5ub0xpbmVzKz0rKCIiIT09byksdC53cmFwcGluZy5ub0xpbmVzPT09dC5hdmFpbGFibGVMaW5lcyYmIm5vbmUiIT09dGhpcy5fdGV4dFRyaW1taW5nJiZuP3QuY2FuRml0VGV4dD0hMTp0LndyYXBwaW5nLndyYXBwZWRUZXh0Kz1vLHQuY3VycmVudExpbmU9IlxuIix0fSx0LnByb3RvdHlwZS5jYW5GaXRUb2tlbj1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcyxyPXQuc3BsaXQoIiIpLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gbiE9PXQubGVuZ3RoLTE/ZStpLl9icmVha2luZ0NoYXJhY3RlcjplfSkpO3JldHVybiBuLm1lYXN1cmUodCkud2lkdGg8PWV8fHIuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiBuLm1lYXN1cmUodCkud2lkdGg8PWV9KSl9LHQucHJvdG90eXBlLmFkZEVsbGlwc2lzPWZ1bmN0aW9uKHQsZSxuKXtpZigibm9uZSI9PT10aGlzLl90ZXh0VHJpbW1pbmcpcmV0dXJue3JlbWFpbmluZ1Rva2VuOiIiLHdyYXBwZWRUb2tlbjp0fTt2YXIgaT10LnN1YnN0cmluZygwKS50cmltKCkscj1uLm1lYXN1cmUoaSkud2lkdGgsbz1uLm1lYXN1cmUoIi4uLiIpLndpZHRoLGE9dC5sZW5ndGg+MCYmIlxuIj09PXRbMF0/IlxuIjoiIjtpZihlPD1vKXt2YXIgcz1NYXRoLmZsb29yKGUvKG8vMykpO3JldHVybntyZW1haW5pbmdUb2tlbjp0LHdyYXBwZWRUb2tlbjphKyIuLi4iLnN1YnN0cigwLHMpfX1mb3IoO3Irbz5lOylpPWtndC5TdHJpbmdNZXRob2RzLnRyaW1FbmQoaS5zdWJzdHIoMCxpLmxlbmd0aC0xKSkscj1uLm1lYXN1cmUoaSkud2lkdGg7cmV0dXJue3JlbWFpbmluZ1Rva2VuOmtndC5TdHJpbmdNZXRob2RzLnRyaW1FbmQodC5zdWJzdHJpbmcoaS5sZW5ndGgpLCItIikudHJpbSgpLHdyYXBwZWRUb2tlbjphK2krIi4uLiJ9fSx0LnByb3RvdHlwZS53cmFwTmV4dFRva2VuPWZ1bmN0aW9uKHQsZSxuKXtpZighZS5jYW5GaXRUZXh0fHxlLmF2YWlsYWJsZUxpbmVzPT09ZS53cmFwcGluZy5ub0xpbmVzfHwhdGhpcy5jYW5GaXRUb2tlbih0LGUuYXZhaWxhYmxlV2lkdGgsbikpcmV0dXJuIHRoaXMuZmluaXNoV3JhcHBpbmcodCxlLG4pO2Zvcih2YXIgaT10O2k7KXt2YXIgcj10aGlzLmJyZWFrVG9rZW5Ub0ZpdEluV2lkdGgoaSxlLmN1cnJlbnRMaW5lLGUuYXZhaWxhYmxlV2lkdGgsbik7aWYoZS5jdXJyZW50TGluZT1yLmxpbmUsbnVsbCE9KGk9ci5yZW1haW5pbmdUb2tlbikpe2lmKGUud3JhcHBpbmcubm9Ccm9rZVdvcmRzKz0rci5icmVha1dvcmQsKytlLndyYXBwaW5nLm5vTGluZXMsZS5hdmFpbGFibGVMaW5lcz09PWUud3JhcHBpbmcubm9MaW5lcyl7dmFyIG89dGhpcy5hZGRFbGxpcHNpcyhlLmN1cnJlbnRMaW5lLGUuYXZhaWxhYmxlV2lkdGgsbik7cmV0dXJuIGUud3JhcHBpbmcud3JhcHBlZFRleHQrPW8ud3JhcHBlZFRva2VuLGUud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9by5yZW1haW5pbmdUb2tlbitpLGUuY3VycmVudExpbmU9IlxuIixlfWUud3JhcHBpbmcud3JhcHBlZFRleHQrPWtndC5TdHJpbmdNZXRob2RzLnRyaW1FbmQoZS5jdXJyZW50TGluZSksZS5jdXJyZW50TGluZT0iXG4ifX1yZXR1cm4gZX0sdC5wcm90b3R5cGUuZmluaXNoV3JhcHBpbmc9ZnVuY3Rpb24odCxlLG4pe2lmKGUuY2FuRml0VGV4dCYmZS5hdmFpbGFibGVMaW5lcyE9PWUud3JhcHBpbmcubm9MaW5lcyYmIm5vbmUiIT09dGhpcy5fdGV4dFRyaW1taW5nKXt2YXIgaT10aGlzLmFkZEVsbGlwc2lzKGUuY3VycmVudExpbmUrdCxlLmF2YWlsYWJsZVdpZHRoLG4pO2Uud3JhcHBpbmcud3JhcHBlZFRleHQrPWkud3JhcHBlZFRva2VuLGUud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9aS5yZW1haW5pbmdUb2tlbixlLndyYXBwaW5nLm5vQnJva2VXb3Jkcys9KyhpLnJlbWFpbmluZ1Rva2VuLmxlbmd0aDx0Lmxlbmd0aCksZS53cmFwcGluZy5ub0xpbmVzKz0rKGkud3JhcHBlZFRva2VuLmxlbmd0aD4wKSxlLmN1cnJlbnRMaW5lPSIifWVsc2UgZS53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz10O3JldHVybiBlLmNhbkZpdFRleHQ9ITEsZX0sdC5wcm90b3R5cGUuYnJlYWtUb2tlblRvRml0SW5XaWR0aD1mdW5jdGlvbih0LGUsbixpLHIpe2lmKHZvaWQgMD09PXImJihyPXRoaXMuX2JyZWFraW5nQ2hhcmFjdGVyKSxpLm1lYXN1cmUoZSt0KS53aWR0aDw9bilyZXR1cm57YnJlYWtXb3JkOiExLGxpbmU6ZSt0LHJlbWFpbmluZ1Rva2VuOm51bGx9O2lmKCIiPT09dC50cmltKCkpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOmUscmVtYWluaW5nVG9rZW46IiJ9O2lmKCF0aGlzLl9hbGxvd0JyZWFraW5nV29yZHMmJiIiIT09ZS50cmltKCkpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOmUscmVtYWluaW5nVG9rZW46dH07Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aCYmaS5tZWFzdXJlKGUrdC5zdWJzdHJpbmcoMCxvKzEpK3IpLndpZHRoPD1uOykrK287dmFyIGE9IiI7cmV0dXJuIG8+MCYmKGE9cikse2JyZWFrV29yZDpvPjAsbGluZTplK3Quc3Vic3RyaW5nKDAsbykrYSxyZW1haW5pbmdUb2tlbjp0LnN1YnN0cmluZyhvKX19LHR9KSgpO0FndC5XcmFwcGVyPUxndDt2YXIgUGd0PXZlJiZ2ZS5fX2V4dGVuZHN8fChmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9fHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W25dPWVbbl0pfTtyZXR1cm4gZnVuY3Rpb24oZSxuKXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXQoZSxuKSxlLnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihpLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgaSl9fSkoKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2d0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTmd0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gUGd0KGUsdCksZS5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihuLGkscixvKXt2YXIgYT10aGlzO2lmKHZvaWQgMD09PW8mJihvPTEvMCksbi5zcGxpdCgiXG4iKS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlNpbmdsZUxpbmVXcmFwcGVyIGlzIGRlc2lnbmVkIHRvIHdvcmsgb25seSBvbiBzaW5nbGUgbGluZSIpO3ZhciBzPWZ1bmN0aW9uKGUpe3JldHVybiB0LnByb3RvdHlwZS53cmFwLmNhbGwoYSxuLGksZSxvKX0sbD1zKHIpO2lmKGwubm9MaW5lczwyKXJldHVybiBsO2Zvcih2YXIgYz0wLHU9cixoPTA7aDxlLk5PX1dSQVBfSVRFUkFUSU9OUyYmdT5jOysraCl7dmFyIGQ9KHUrYykvMixwPXMoZCk7dGhpcy5hcmVTYW1lUmVzdWx0cyhsLHApPyh1PWQsbD1wKTpjPWR9cmV0dXJuIGx9LGUucHJvdG90eXBlLmFyZVNhbWVSZXN1bHRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubm9MaW5lcz09PWUubm9MaW5lcyYmdC50cnVuY2F0ZWRUZXh0PT09ZS50cnVuY2F0ZWRUZXh0fSxlfSkoQWd0LldyYXBwZXIpO05ndC5OT19XUkFQX0lURVJBVElPTlM9NSxDZ3QuU2luZ2xlTGluZVdyYXBwZXI9Tmd0LChmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe2Zvcih2YXIgbiBpbiBlKXQuaGFzT3duUHJvcGVydHkobil8fCh0W25dPWVbbl0pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlKENndCksZShBZ3QpfSkoVGd0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRWd0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSWd0PVJtdCxSZ3Q9YWd0LE9ndD1UZ3Qsemd0PXptdCxEZ3Q9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLm1lYXN1cmVyPW5ldyBSZ3QuQ2FjaGVNZWFzdXJlcih0aGlzLmNvbnRleHQpLHRoaXMud3JhcHBlcj1uZXcgT2d0LldyYXBwZXIsdGhpcy53cml0ZXI9bmV3IHpndC5Xcml0ZXIodGhpcy5tZWFzdXJlcix0aGlzLmNvbnRleHQsdGhpcy53cmFwcGVyKX1yZXR1cm4gdC5zdmc9ZnVuY3Rpb24oZSxuLGkpe3JldHVybiBuZXcgdChuZXcgSWd0LlN2Z0NvbnRleHQoZSxuLGkpKX0sdC5jYW52YXM9ZnVuY3Rpb24oZSxuLGkpe3JldHVybiBuZXcgdChuZXcgSWd0LkNhbnZhc0NvbnRleHQoZSxuLGkpKX0sdC5odG1sPWZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gbmV3IHQobmV3IElndC5IdG1sQ29udGV4dChlLG4saSkpfSx0LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LGUsbixpLHIpe3RoaXMud3JpdGVyLndyaXRlKHQsZSxuLGkscil9LHQucHJvdG90eXBlLmNsZWFyTWVhc3VyZXJDYWNoZT1mdW5jdGlvbigpe3RoaXMubWVhc3VyZXIucmVzZXQoKX0sdH0pKCk7RWd0LlR5cGVzZXR0ZXI9RGd0LChmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe2Zvcih2YXIgbiBpbiBlKXQuaGFzT3duUHJvcGVydHkobil8fCh0W25dPWVbbl0pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlKFJtdCksZShhZ3QpLGUoRWd0KSxlKEJtdCksZShUZ3QpLGUoem10KX0pKEltdCk7dmFyIEJndD17fSxIZ3Q9e30sRmd0PXt9LFZndD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KFZndCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFVndD1FZHQsamd0PXdpbmRvdy5BcnJheTtWZ3QuYWRkPWZ1bmN0aW9uIEdndCh0LGUpe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhdHRlbXB0ZWQgdG8gYWRkIGFycmF5cyBvZiB1bmVxdWFsIGxlbmd0aCIpO3JldHVybiB0Lm1hcCgoZnVuY3Rpb24obixpKXtyZXR1cm4gdFtpXStlW2ldfSkpfSxWZ3QudW5pcT1mdW5jdGlvbiBXZ3QodCl7dmFyIGU9VWd0LnNldCgpLG49W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZS5oYXMoU3RyaW5nKHQpKXx8KGUuYWRkKFN0cmluZyh0KSksbi5wdXNoKHQpKX0pKSxufSxWZ3QuZmxhdHRlbj1mdW5jdGlvbiBxZ3QodCl7cmV0dXJuIGpndC5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLHQpfSxWZ3QuY3JlYXRlRmlsbGVkQXJyYXk9ZnVuY3Rpb24gWWd0KHQsZSl7Zm9yKHZhciBuPVtdLGk9MDtpPGU7aSsrKW5baV09ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dChpKTp0O3JldHVybiBufTt2YXIgWGd0PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShYZ3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciAkZ3Q9RWR0LEtndD13aW5kb3cuTWF0aDtmdW5jdGlvbiBaZ3QodCl7dmFyIGU9JGd0LnJnYih0KSxuPWZ1bmN0aW9uKHQpe3JldHVybih0Lz0yNTUpPD0uMDM5Mjg/dC8xMi45MjpLZ3QucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9O3JldHVybi4yMTI2Km4oZS5yKSsuNzE1MipuKGUuZykrLjA3MjIqbihlLmIpfVhndC5jb250cmFzdD1mdW5jdGlvbiBKZ3QodCxlKXt2YXIgbj1aZ3QodCkrLjA1LGk9Wmd0KGUpKy4wNTtyZXR1cm4gbj5pP24vaTppL259LFhndC5saWdodGVuQ29sb3I9ZnVuY3Rpb24gUWd0KHQsZSl7cmV0dXJuICRndC5jb2xvcih0KS5icmlnaHRlcihlKS5yZ2IoKS50b1N0cmluZygpfSxYZ3QuY29sb3JUZXN0PWZ1bmN0aW9uIHRfdCh0LGUpe3QuY2xhc3NlZChlLCEwKTt2YXIgbj10LnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIik7aWYoInRyYW5zcGFyZW50Ij09PW4pcmV0dXJuIG51bGw7dmFyIGk9L1woKC4rKVwpLy5leGVjKG4pO2lmKCFpKXJldHVybiBudWxsO3ZhciByPWlbMV0uc3BsaXQoIiwiKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPSt0LG49ZS50b1N0cmluZygxNik7cmV0dXJuIGU8MTY/IjAiK246bn0pKTtpZig0PT09ci5sZW5ndGgmJiIwMCI9PT1yWzNdKXJldHVybiBudWxsO3ZhciBvPSIjIityLmpvaW4oIiIpO3JldHVybiB0LmNsYXNzZWQoZSwhMSksb307dmFyIGVfdD17fTshKGZ1bmN0aW9uKHQpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGU9RWR0LG49d2luZG93Lk1hdGg7ZnVuY3Rpb24gaSh0KXt2YXIgZTt0cnl7ZT10Lm5vZGUoKS5nZXRCQm94KCl9Y2F0Y2godCl7ZT17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX1yZXR1cm4gZX10LmNvbnRhaW5zPWZ1bmN0aW9uIHIodCxlKXtmb3IodmFyIG49ZTtudWxsIT1uJiZuIT09dDspbj1uLnBhcmVudE5vZGU7cmV0dXJuIG49PT10fSx0LmVsZW1lbnRCQm94PWksdC5lbnRpdHlCb3VuZHM9ZnVuY3Rpb24gbyh0KXtpZih0IGluc3RhbmNlb2YgU1ZHRWxlbWVudClyZXR1cm4gaShlLnNlbGVjdCh0KSk7aWYodCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KXt2YXIgbj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt4Om4ubGVmdCx5Om4udG9wLHdpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0fX1yZXR1cm57eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX0sdC5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUz0xZTMvNjAsdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbD1mdW5jdGlvbiBhKGUpe251bGwhPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKTpzZXRUaW1lb3V0KGUsdC5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUyl9LHQuZWxlbWVudFdpZHRoPWZ1bmN0aW9uIHModCl7dmFyIG49dCBpbnN0YW5jZW9mIGUuc2VsZWN0aW9uP3Qubm9kZSgpOnQsaT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShuKTtyZXR1cm4gbShpLCJ3aWR0aCIpK20oaSwicGFkZGluZy1sZWZ0IikrbShpLCJwYWRkaW5nLXJpZ2h0IikrbShpLCJib3JkZXItbGVmdC13aWR0aCIpK20oaSwiYm9yZGVyLXJpZ2h0LXdpZHRoIil9LHQuZWxlbWVudEhlaWdodD1mdW5jdGlvbiBsKHQpe3ZhciBuPXQgaW5zdGFuY2VvZiBlLnNlbGVjdGlvbj90Lm5vZGUoKTp0LGk9d2luZG93LmdldENvbXB1dGVkU3R5bGUobik7cmV0dXJuIG0oaSwiaGVpZ2h0IikrbShpLCJwYWRkaW5nLXRvcCIpK20oaSwicGFkZGluZy1ib3R0b20iKSttKGksImJvcmRlci10b3Atd2lkdGgiKSttKGksImJvcmRlci1ib3R0b20td2lkdGgiKX07dmFyIGM9Iig/OlstK10/WzAtOV0qXFwuP1swLTldKykiLHU9Iig/Oig/OlxccyssP1xccyopfCg/OixcXHMqKSkiLGg9bmV3IFJlZ0V4cCgidHJhbnNsYXRlXFxzKlxcKFxccyooIitjKyIpKD86Iit1KyIoIitjKyIpKT9cXHMqXFwpIiksZD1uZXcgUmVnRXhwKCJyb3RhdGVcXHMqXFwoXFxzKigiK2MrIilcXHMqXFwpIikscD1uZXcgUmVnRXhwKCJzY2FsZVxccypcXChcXHMqKCIrYysiKSg/OiIrdSsiKCIrYysiKSk/XFxzKlxcKSIpO2Z1bmN0aW9uIGYodCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybnttaW46dCxtYXg6dH07aWYodCBpbnN0YW5jZW9mIE9iamVjdCYmIm1pbiJpbiB0JiYibWF4ImluIHQpcmV0dXJuIHQ7dGhyb3cgbmV3IEVycm9yKCJpbnB1dCAnIit0KyInIGNhbid0IGJlIHBhcnNlZCBhcyBhbiBSYW5nZSIpfWZ1bmN0aW9uIG0odCxlKXt2YXIgbj10LmdldFByb3BlcnR5VmFsdWUoZSk7cmV0dXJuIHBhcnNlRmxvYXQobil8fDB9dC5nZXRUcmFuc2xhdGVWYWx1ZXM9ZnVuY3Rpb24gZyh0KXt2YXIgZT1oLmV4ZWModC5hdHRyKCJ0cmFuc2Zvcm0iKSk7aWYobnVsbCE9ZSl7dmFyIG49ZVsyXTtyZXR1cm5bK2VbMV0sKyh2b2lkIDA9PT1uPzA6bildfXJldHVyblswLDBdfSx0LmdldFJvdGF0ZT1mdW5jdGlvbiBfKHQpe3ZhciBlPWQuZXhlYyh0LmF0dHIoInRyYW5zZm9ybSIpKTtyZXR1cm4gbnVsbCE9ZT8rZVsxXTowfSx0LmdldFNjYWxlVmFsdWVzPWZ1bmN0aW9uIHkodCl7dmFyIGU9cC5leGVjKHQuYXR0cigidHJhbnNmb3JtIikpO2lmKG51bGwhPWUpe3ZhciBuPWVbMV0saT1lWzJdO3JldHVyblsrbixudWxsPT1pPytuOitpXX1yZXR1cm5bMCwwXX0sdC5jbGllbnRSZWN0c092ZXJsYXA9ZnVuY3Rpb24gdih0LGUpe3JldHVybiEobi5mbG9vcih0LnJpZ2h0KTw9bi5jZWlsKGUubGVmdCl8fG4uY2VpbCh0LmxlZnQpPj1uLmZsb29yKGUucmlnaHQpfHxuLmZsb29yKHQuYm90dG9tKTw9bi5jZWlsKGUudG9wKXx8bi5jZWlsKHQudG9wKT49bi5mbG9vcihlLmJvdHRvbSkpfSx0LmV4cGFuZFJlY3Q9ZnVuY3Rpb24gYih0LGUpe3JldHVybntsZWZ0OnQubGVmdC1lLHRvcDp0LnRvcC1lLHJpZ2h0OnQucmlnaHQrZSxib3R0b206dC5ib3R0b20rZSx3aWR0aDp0LndpZHRoKzIqZSxoZWlnaHQ6dC5oZWlnaHQrMiplfX0sdC5jbGllbnRSZWN0SW5zaWRlPWZ1bmN0aW9uIHgodCxlKXtyZXR1cm4gbi5mbG9vcihlLmxlZnQpPD1uLmNlaWwodC5sZWZ0KSYmbi5mbG9vcihlLnRvcCk8PW4uY2VpbCh0LnRvcCkmJm4uZmxvb3IodC5yaWdodCk8PW4uY2VpbChlLnJpZ2h0KSYmbi5mbG9vcih0LmJvdHRvbSk8PW4uY2VpbChlLmJvdHRvbSl9LHQuaW50ZXJzZWN0c0JCb3g9ZnVuY3Rpb24gdyh0LGUsbixpKXt2b2lkIDA9PT1pJiYoaT0uNSk7dmFyIHI9Zih0KSxvPWYoZSk7cmV0dXJuIG4ueCtuLndpZHRoPj1yLm1pbi1pJiZuLng8PXIubWF4K2kmJm4ueStuLmhlaWdodD49by5taW4taSYmbi55PD1vLm1heCtpfSx0LmdldEh0bWxFbGVtZW50QW5jZXN0b3JzPWZ1bmN0aW9uIFModCl7Zm9yKHZhciBlPVtdO3QmJnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDspZS5wdXNoKHQpLHQ9dC5wYXJlbnRFbGVtZW50O3JldHVybiBlfSx0LmdldEVsZW1lbnRUcmFuc2Zvcm09ZnVuY3Rpb24gTSh0KXt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpO3JldHVybihmdW5jdGlvbiBuKHQpe2lmKG51bGw9PXR8fCJub25lIj09PXQpcmV0dXJuIG51bGw7dmFyIGU9dC5tYXRjaChFKTtpZihudWxsPT1lfHxlLmxlbmd0aDwyKXJldHVybiBudWxsO3ZhciBuPWVbMV0uc3BsaXQoVCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pKTtyZXR1cm4gNiE9bi5sZW5ndGg/bnVsbDpufSkoZS5nZXRQcm9wZXJ0eVZhbHVlKCItd2Via2l0LXRyYW5zZm9ybSIpfHxlLmdldFByb3BlcnR5VmFsdWUoIi1tb3otdHJhbnNmb3JtIil8fGUuZ2V0UHJvcGVydHlWYWx1ZSgiLW1zLXRyYW5zZm9ybSIpfHxlLmdldFByb3BlcnR5VmFsdWUoIi1vLXRyYW5zZm9ybSIpfHxlLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpKX07dmFyIEU9L15tYXRyaXhcKChbXildKylcKSQvLFQ9L1ssIF0rL30pKGVfdCk7dmFyIG5fdD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi9PYmplY3QuZGVmaW5lUHJvcGVydHkobl90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaV90PUVkdCxyX3Q9ZV90LG9fdD13aW5kb3cuTWF0aCxhX3Q9WzEsMCwwLDEsMCwwXTtmdW5jdGlvbiBzX3QodCxlKXtyZXR1cm5bdFswXSplWzBdK3RbMl0qZVsxXSx0WzFdKmVbMF0rdFszXSplWzFdLHRbMF0qZVsyXSt0WzJdKmVbM10sdFsxXSplWzJdK3RbM10qZVszXSx0WzBdKmVbNF0rdFsyXSplWzVdK3RbNF0sdFsxXSplWzRdK3RbM10qZVs1XSt0WzVdXX1mdW5jdGlvbiBsX3QodCxlKXtyZXR1cm5bdFswXSx0WzFdLHRbMl0sdFszXSx0WzBdKmVbMF0rdFsyXSplWzFdK3RbNF0sdFsxXSplWzBdK3RbM10qZVsxXSt0WzVdXX1mdW5jdGlvbiBjX3QodCl7dmFyIGU9dFswXSp0WzNdLXRbMV0qdFsyXTtpZigwPT09ZSl0aHJvdyBuZXcgRXJyb3IoInNpbmd1bGFyIG1hdHJpeCIpO3ZhciBuPTEvZTtyZXR1cm5bbip0WzNdLG4qLXRbMV0sbiotdFsyXSxuKnRbMF0sbiooLXRbM10qdFs0XSt0WzJdKnRbNV0pLG4qKHRbMV0qdFs0XSstdFswXSp0WzVdKV19bl90LmluUmFuZ2U9ZnVuY3Rpb24gdV90KHQsZSxuKXtyZXR1cm4gb190Lm1pbihlLG4pPD10JiZ0PD1vX3QubWF4KGUsbil9LG5fdC5jbGFtcD1mdW5jdGlvbiBoX3QodCxlLG4pe3JldHVybiBvX3QubWluKG9fdC5tYXgoZSx0KSxuKX0sbl90Lm1heD1mdW5jdGlvbiBkX3QodCxlLG4pe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6bnVsbCxyPW51bGw9PWk/ZTpuLG89bnVsbD09aT9pX3QubWF4KHQpOmlfdC5tYXgodCxpKTtyZXR1cm4gdm9pZCAwIT09bz9vOnJ9LG5fdC5taW49ZnVuY3Rpb24gcF90KHQsZSxuKXt2YXIgaT0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm51bGwscj1udWxsPT1pP2U6bixvPW51bGw9PWk/aV90Lm1pbih0KTppX3QubWluKHQsaSk7cmV0dXJuIHZvaWQgMCE9PW8/bzpyfSxuX3QuaXNOYU49ZnVuY3Rpb24gZl90KHQpe3JldHVybiB0IT10fSxuX3QuaXNWYWxpZE51bWJlcj1mdW5jdGlvbiBtX3QodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0LXQ8MX0sbl90LnJhbmdlPWZ1bmN0aW9uIGdfdCh0LGUsbil7aWYodm9pZCAwPT09biYmKG49MSksMD09PW4pdGhyb3cgbmV3IEVycm9yKCJzdGVwIGNhbm5vdCBiZSAwIik7Zm9yKHZhciBpPW9fdC5tYXgob190LmNlaWwoKGUtdCkvbiksMCkscj1bXSxvPTA7bzxpOysrbylyW29dPXQrbipvO3JldHVybiByfSxuX3QuZGlzdGFuY2VTcXVhcmVkPWZ1bmN0aW9uIF9fdCh0LGUpe3JldHVybiBvX3QucG93KGUueS10LnksMikrb190LnBvdyhlLngtdC54LDIpfSxuX3QuZGVncmVlc1RvUmFkaWFucz1mdW5jdGlvbiB5X3QodCl7cmV0dXJuIHQvMzYwKm9fdC5QSSoyfSxuX3Qud2l0aGluPWZ1bmN0aW9uIHZfdCh0LGUpe3JldHVybiBlLnRvcExlZnQueDw9dC54JiZlLmJvdHRvbVJpZ2h0Lng+PXQueCYmZS50b3BMZWZ0Lnk8PXQueSYmZS5ib3R0b21SaWdodC55Pj10Lnl9LG5fdC5ib3VuZHNJbnRlcnNlY3RzPWZ1bmN0aW9uIGJfdCh0LGUsbixpLHIsbyxhLHMpe3JldHVybiB0PD1yK2EmJnI8PXQrbiYmZTw9bytzJiZvPD1lK2l9LG5fdC5nZXRDdW11bGF0aXZlVHJhbnNmb3JtPWZ1bmN0aW9uIHhfdCh0KXtmb3IodmFyIGU9cl90LmdldEh0bWxFbGVtZW50QW5jZXN0b3JzKHQpLG49YV90LGk9bnVsbCxyPTAsbz1lO3I8by5sZW5ndGg7cisrKXt2YXIgYT1vW3JdLHM9cl90LmdldEVsZW1lbnRUcmFuc2Zvcm0oYSk7aWYobnVsbCE9cyl7dmFyIGw9YS5jbGllbnRXaWR0aC8yLGM9YS5jbGllbnRIZWlnaHQvMjtuPWxfdChuLFtsLGNdKSxuPWxfdChuPXNfdChuLGNfdChzKSksWy1sLC1jXSl9dmFyIHU9YS5zY3JvbGxMZWZ0LGg9YS5zY3JvbGxUb3A7bnVsbCE9PWkmJmEhPT1pfHwodS09YS5vZmZzZXRMZWZ0K2EuY2xpZW50TGVmdCxoLT1hLm9mZnNldFRvcCthLmNsaWVudFRvcCxpPWEub2Zmc2V0UGFyZW50KSxuPWxfdChuLFt1LGhdKX1yZXR1cm4gbn0sbl90Lm11bHRpcGx5TWF0cml4PXNfdCxuX3QucHJlbXVsdGlwbHlUcmFuc2xhdGU9ZnVuY3Rpb24gd190KHQsZSl7cmV0dXJuW2VbMF0sZVsxXSxlWzJdLGVbM10sZVs0XSt0WzBdLGVbNV0rdFsxXV19LG5fdC5tdWx0aXBseVRyYW5zbGF0ZT1sX3Qsbl90LmludmVydE1hdHJpeD1jX3Qsbl90LmFwcGx5VHJhbnNmb3JtPWZ1bmN0aW9uIFNfdCh0LGUpe3JldHVybnt4OnRbMF0qZS54K3RbMl0qZS55K3RbNF0seTp0WzFdKmUueCt0WzNdKmUueSt0WzVdfX07dmFyIE1fdD17fSxFX3Q9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTctcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFX3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBUX3Q9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49TWF0aC5jZWlsKHQubGVuZ3RoLzIpLGk9MDtpPG47aSsrKWVbMF0uaW5zZXJ0KHRbaV0pO2ZvcihpPW47aTx0Lmxlbmd0aDtpKyspZVsxXS5pbnNlcnQodFtpXSl9LHR9KSgpO0VfdC5TcGxpdFN0cmF0ZWd5VHJpdmlhbD1UX3Q7dmFyIENfdD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe2Zvcih0PXQuc2xpY2UoKSx0aGlzLmNob29zZUZpcnN0U3BsaXQodCxlKTt0Lmxlbmd0aD4wOyl0aGlzLmFkZE5leHQodCxlKX0sdC5wcm90b3R5cGUuY2hvb3NlRmlyc3RTcGxpdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLGk9MCxyPXQubGVuZ3RoLTEsbz10Lmxlbmd0aC0xLGE9MTthPHQubGVuZ3RoLTE7YSsrKXt2YXIgcz10W2FdO3MuYm91bmRzLnhsPnRbcl0uYm91bmRzLnhsP3I9YTpzLmJvdW5kcy54aDx0W25dLmJvdW5kcy54aCYmKG49YSkscy5ib3VuZHMueWw+dFtvXS5ib3VuZHMueWw/bz1hOnMuYm91bmRzLnloPHRbaV0uYm91bmRzLnloJiYoaT1hKX12YXIgbD1NYXRoLmFicyh0W25dLmJvdW5kcy54aC10W3JdLmJvdW5kcy54bCk+TWF0aC5hYnModFtpXS5ib3VuZHMueWgtdFtvXS5ib3VuZHMueWwpP1tuLHJdOltpLG9dLGM9bFswXSx1PWxbMV07Yz09PXUmJihjPTAsdT10Lmxlbmd0aC0xKSxlWzBdLmluc2VydCh0LnNwbGljZShNYXRoLm1heChjLHUpLDEpWzBdKSxlWzFdLmluc2VydCh0LnNwbGljZShNYXRoLm1pbihjLHUpLDEpWzBdKX0sdC5wcm90b3R5cGUuYWRkTmV4dD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1udWxsLGk9bnVsbCxyPW51bGwsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgYT10W29dLHM9ZVswXS51bmlvbkFyZWFEaWZmZXJlbmNlKGEuYm91bmRzKSxsPWVbMV0udW5pb25BcmVhRGlmZmVyZW5jZShhLmJvdW5kcyk7KHM8aXx8bnVsbD09bikmJihuPW8saT1zLHI9ZVswXSksbDxpJiYobj1vLGk9bCxyPWVbMV0pfXIuaW5zZXJ0KHQuc3BsaWNlKG4sMSlbMF0pfSx0fSkoKTtFX3QuU3BsaXRTdHJhdGVneUxpbmVhcj1DX3QsKGZ1bmN0aW9uKHQpewovKioKICAgICAqIENvcHlyaWdodCAyMDE3LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGUsbj1uZXcgRV90LlNwbGl0U3RyYXRlZ3lMaW5lYXI7ZnVuY3Rpb24gaSh0LG4saSl7dmFyIHI9MS8wLG89MS8wO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz1uKGEuYm91bmRzLHQpLGw9aShhLmJvdW5kcyx0KTtyZXR1cm4gbnVsbCE9YS52YWx1ZT9zPHI/KHI9cyxvPWwsZS5QQVNTX0FORF9PVkVSV1JJVEUpOnM9PT1yP2UuUEFTUzplLkZBSUw6cz5vP2UuRkFJTDoobz1NYXRoLm1heChsLG8pLGUuUEFTUyl9fWZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gZnVuY3Rpb24obixpKXtyZXR1cm4gZShpLmJvdW5kcyx0KS1lKG4uYm91bmRzLHQpfX0hKGZ1bmN0aW9uKHQpe3RbdC5QQVNTPTBdPSJQQVNTIix0W3QuRkFJTD0xXT0iRkFJTCIsdFt0LlBBU1NfQU5EX09WRVJXUklURT0yXT0iUEFTU19BTkRfT1ZFUldSSVRFIn0pKGU9dC5RdWVyeVByZWRpY2F0ZVJlc3VsdHx8KHQuUXVlcnlQcmVkaWNhdGVSZXN1bHQ9e30pKSx0LmNyZWF0ZU1pbmltaXppbmdOb2RlUHJlZGljYXRlPWksdC5jcmVhdGVOb2RlU29ydD1yO3ZhciBvPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2b2lkIDA9PT10JiYodD01KSx2b2lkIDA9PT1lJiYoZT1uKSx0aGlzLm1heE5vZGVDaGlsZHJlbj10LHRoaXMuc3BsaXRTdHJhdGVneT1lLHRoaXMucm9vdD1uZXcgYSghMCksdGhpcy5zaXplPTB9cmV0dXJuIHQucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290fSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMucm9vdD1uZXcgYSghMCksdGhpcy5zaXplPTB9LHQucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnJvb3Q7IW4ubGVhZjspbj1uLnN1YnRyZWUodCk7dmFyIGk9YS52YWx1ZU5vZGUodCxlKTtmb3Iobi5pbnNlcnQoaSksdGhpcy5zaXplKz0xO24ub3ZlcmZsb3codGhpcy5tYXhOb2RlQ2hpbGRyZW4pOyludWxsPT0obj1uLnNwbGl0KHRoaXMuc3BsaXRTdHJhdGVneSkpLnBhcmVudCYmKHRoaXMucm9vdD1uKTtyZXR1cm4gaX0sdC5wcm90b3R5cGUubG9jYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gZS5jb250YWlucyh0KX0pKX0sdC5wcm90b3R5cGUubG9jYXRlTmVhcmVzdD1mdW5jdGlvbih0KXt2YXIgZT1pKHQscy5kaXN0YW5jZVNxdWFyZWRUb05lYXJFZGdlLHMuZGlzdGFuY2VTcXVhcmVkVG9GYXJFZGdlKTtyZXR1cm4gdGhpcy5xdWVyeU5vZGVzKGUpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KSl9LHQucHJvdG90eXBlLmxvY2F0ZU5lYXJlc3RYPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCxzLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWCxzLmFic29sdXRlRGlzdGFuY2VUb0ZhckVkZ2VYKSxuPXRoaXMucXVlcnlOb2RlcyhlKTtyZXR1cm4gbi5zb3J0KHIodCxzLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSkpLG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pKX0sdC5wcm90b3R5cGUubG9jYXRlTmVhcmVzdFk9ZnVuY3Rpb24odCl7dmFyIGU9aSh0LHMuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VZLHMuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVkpLG49dGhpcy5xdWVyeU5vZGVzKGUpO3JldHVybiBuLnNvcnQocih0LHMuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYKSksbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSkpfSx0LnByb3RvdHlwZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBzLmlzQm91bmRzT3ZlcmxhcEJvdW5kcyhlLHQpfSkpfSx0LnByb3RvdHlwZS5pbnRlcnNlY3RYPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gcy5pc0JvdW5kc092ZXJsYXBYKGUsdCl9KSl9LHQucHJvdG90eXBlLmludGVyc2VjdFk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBzLmlzQm91bmRzT3ZlcmxhcFkoZSx0KX0pKX0sdC5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCl7dmFyIGU9W107aWYobnVsbCE9dGhpcy5yb290LmJvdW5kcyYmIXQodGhpcy5yb290LmJvdW5kcykpcmV0dXJuIGU7Zm9yKHZhciBuPVt0aGlzLnJvb3RdO24ubGVuZ3RoPjA7KWZvcih2YXIgaT1uLnNoaWZ0KCkscj0wO3I8aS5lbnRyaWVzLmxlbmd0aDtyKyspe3ZhciBvPWkuZW50cmllc1tyXTt0KG8uYm91bmRzKSYmKGkubGVhZj9lLnB1c2goby52YWx1ZSk6bi5wdXNoKG8pKX1yZXR1cm4gZX0sdC5wcm90b3R5cGUucXVlcnlOb2Rlcz1mdW5jdGlvbih0KXt2YXIgbj1bXTtpZihudWxsIT10aGlzLnJvb3QuYm91bmRzJiZ0KHRoaXMucm9vdCk9PT1lLkZBSUwpcmV0dXJuIG47Zm9yKHZhciBpPVt0aGlzLnJvb3RdO2kubGVuZ3RoPjA7KWZvcih2YXIgcj1pLnNoaWZ0KCksbz0wO288ci5lbnRyaWVzLmxlbmd0aDtvKyspe3ZhciBhPXIuZW50cmllc1tvXSxzPXQoYSk7cz09PWUuUEFTU19BTkRfT1ZFUldSSVRFJiYobj1bXSkscyE9PWUuUEFTUyYmcyE9PWUuUEFTU19BTkRfT1ZFUldSSVRFfHwoci5sZWFmP24ucHVzaChhKTppLnB1c2goYSkpfXJldHVybiBufSx0fSkoKTt0LlJUcmVlPW87dmFyIGE9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmxlYWY9dCx0aGlzLmJvdW5kcz1udWxsLHRoaXMuZW50cmllcz1bXSx0aGlzLnBhcmVudD1udWxsLHRoaXMudmFsdWU9bnVsbH1yZXR1cm4gdC52YWx1ZU5vZGU9ZnVuY3Rpb24oZSxuKXt2YXIgaT1uZXcgdCghMCk7cmV0dXJuIGkuYm91bmRzPWUsaS52YWx1ZT1uLGl9LHQucHJvdG90eXBlLm92ZXJmbG93PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVudHJpZXMubGVuZ3RoPnR9LHQucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0KXt0aGlzLmVudHJpZXMucHVzaCh0KSx0LnBhcmVudD10aGlzO2Zvcih2YXIgZT10aGlzO251bGwhPWU7KWUuYm91bmRzPXMudW5pb25BbGwoW2UuYm91bmRzLHQuYm91bmRzXSksZT1lLnBhcmVudDtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZW50cmllcy5pbmRleE9mKHQpO2lmKGU+PTApe3RoaXMuZW50cmllcy5zcGxpY2UoZSwxKTtmb3IodmFyIG49dGhpcztudWxsIT1uOyluLmJvdW5kcz1zLnVuaW9uQWxsKG4uZW50cmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJvdW5kc30pKSksbj1uLnBhcmVudH1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuc3VidHJlZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MS8wLG49bnVsbCxpPTA7aTx0aGlzLmVudHJpZXMubGVuZ3RoO2krKyl7dmFyIHI9dGhpcy5lbnRyaWVzW2ldLG89ci51bmlvbkFyZWFEaWZmZXJlbmNlKHQpOyhvPGV8fG89PT1lJiZudWxsIT1uJiZyLmVudHJpZXMubGVuZ3RoPG4uZW50cmllcy5sZW5ndGgpJiYobj1yKX1yZXR1cm4gbn0sdC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZSl7bnVsbCE9dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LnJlbW92ZSh0aGlzKTt2YXIgbj1bbmV3IHQodGhpcy5sZWFmKSxuZXcgdCh0aGlzLmxlYWYpXTtlLnNwbGl0KHRoaXMuZW50cmllcyxuKTt2YXIgaT1udWxsIT10aGlzLnBhcmVudD90aGlzLnBhcmVudDpuZXcgdCghMSk7cmV0dXJuIGkuaW5zZXJ0KG5bMF0pLGkuaW5zZXJ0KG5bMV0pLGkubGVhZj0hMSxpfSx0LnByb3RvdHlwZS51bmlvbkFyZWFEaWZmZXJlbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyhzLnVuaW9uKHRoaXMuYm91bmRzLHQpLmFyZWEoKS10aGlzLmJvdW5kcy5hcmVhKCkpfSx0LnByb3RvdHlwZS5tYXhEZXB0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlYWY/MToxK3RoaXMuZW50cmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1heERlcHRoKCl9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUpfSkpfSx0fSkoKTt0LlJUcmVlTm9kZT1hO3ZhciBzPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dGhpcy54bD10LHRoaXMueWw9ZSx0aGlzLnhoPW4sdGhpcy55aD1pLHRoaXMud2lkdGg9dGhpcy54aC10aGlzLnhsLHRoaXMuaGVpZ2h0PXRoaXMueWgtdGhpcy55bH1yZXR1cm4gdC54eXdoPWZ1bmN0aW9uKGUsbixpLHIpe3JldHVybiBuZXcgdChlLG4sZStpLG4rcil9LHQuZW50aXR5Qm91bmRzPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdChlLngsZS55LGUueCtlLndpZHRoLGUueStlLmhlaWdodCl9LHQuYm91bmRzPWZ1bmN0aW9uKGUpe3JldHVybiB0LnBvaW50UGFpcihlLnRvcExlZnQsZS5ib3R0b21SaWdodCl9LHQucG9pbnRQYWlyPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyB0KE1hdGgubWluKGUueCxuLngpLE1hdGgubWluKGUueSxuLnkpLE1hdGgubWF4KGUueCxuLngpLE1hdGgubWF4KGUueSxuLnkpKX0sdC5wb2ludHM9ZnVuY3Rpb24oZSl7aWYoZS5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIm5lZWQgYXQgbGVhc3QgMiBwb2ludHMgdG8gY3JlYXRlIGJvdW5kcyIpO3ZhciBuPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLGk9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSk7cmV0dXJuIG5ldyB0KG4ucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1pbih0LGUpfSkpLGkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1pbih0LGUpfSkpLG4ucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUpfSkpLGkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUpfSkpKX0sdC51bmlvbj1mdW5jdGlvbihlLG4pe3JldHVybiBuZXcgdChNYXRoLm1pbihlLnhsLG4ueGwpLE1hdGgubWluKGUueWwsbi55bCksTWF0aC5tYXgoZS54aCxuLnhoKSxNYXRoLm1heChlLnloLG4ueWgpKX0sdC51bmlvbkFsbD1mdW5jdGlvbihlKXtyZXR1cm4gMD09PShlPWUuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH0pKSkubGVuZ3RoP251bGw6ZS5yZWR1Y2UoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQudW5pb24oZSxuKX0pKX0sdC5pc0JvdW5kc092ZXJsYXBCb3VuZHM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5pc0JvdW5kc092ZXJsYXBYKGUsbikmJnQuaXNCb3VuZHNPdmVybGFwWShlLG4pfSx0LmlzQm91bmRzT3ZlcmxhcFg9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKHQueGg8ZS54bHx8dC54bD5lLnhoKX0sdC5pc0JvdW5kc092ZXJsYXBZPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISh0LnloPGUueWx8fHQueWw+ZS55aCl9LHQuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC53aWR0aC8yO3JldHVybiBNYXRoLm1heChNYXRoLmFicyhlLngtKHQueGwrbikpLW4sMCl9LHQuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VZPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5oZWlnaHQvMjtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoZS55LSh0LnlsK24pKS1uLDApfSx0LmFic29sdXRlRGlzdGFuY2VUb0ZhckVkZ2VYPWZ1bmN0aW9uKGUsbil7dmFyIGk9dC5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgoZSxuKTtyZXR1cm4gMD09PWk/MDppK2Uud2lkdGh9LHQuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVk9ZnVuY3Rpb24oZSxuKXt2YXIgaT10LmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWShlLG4pO3JldHVybiAwPT09aT8wOmkrZS5oZWlnaHR9LHQuZGlzdGFuY2VTcXVhcmVkVG9OZWFyRWRnZT1mdW5jdGlvbihlLG4pe3ZhciBpPXQuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYKGUsbikscj10LmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWShlLG4pO3JldHVybiBpKmkrcipyfSx0LmRpc3RhbmNlU3F1YXJlZFRvRmFyRWRnZT1mdW5jdGlvbihlLG4pe3ZhciBpPXQuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVgoZSxuKSxyPXQuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVkoZSxuKTtyZXR1cm4gaSppK3Iqcn0sdC5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiBudWxsPT10aGlzLmFyZWFDYWNoZWQmJih0aGlzLmFyZWFDYWNoZWQ9KHRoaXMueGgtdGhpcy54bCkqKHRoaXMueWgtdGhpcy55bCkpLHRoaXMuYXJlYUNhY2hlZH0sdC5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGw8PXQueCYmdGhpcy54aD49dC54JiZ0aGlzLnlsPD10LnkmJnRoaXMueWg+PXQueX0sdH0pKCk7dC5SVHJlZUJvdW5kcz1zfSkoTV90KTt2YXIgQV90PXt9OyEoZnVuY3Rpb24odCl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZT1FZHQsbj1TZS5leHBvcnRzLGk9Rmd0O3QuSVN0YWNraW5nT3JkZXI9U210Lm1ha2VFbnVtKFsidG9wZG93biIsImJvdHRvbXVwIl0pO3ZhciByPXdpbmRvdy5NYXRoO3Quc3RhY2s9ZnVuY3Rpb24gbyhuLHIsYSxzKXt2b2lkIDA9PT1zJiYocz0iYm90dG9tdXAiKTt2YXIgbD1lLm1hcCgpLGM9ZS5tYXAoKSx1PW5ldyBpLk1hcDsidG9wZG93biI9PT1zJiYobj1uLnNsaWNlKCkpLnJldmVyc2UoKTtmb3IodmFyIGg9MCxkPW47aDxkLmxlbmd0aDtoKyspe2Zvcih2YXIgcD1kW2hdLGY9bmV3IGkuTWFwLG09cC5kYXRhKCksZz1tLmxlbmd0aCxfPTA7XzxnO18rKyl7dmFyIHk9bVtfXSx2PXIoeSxfLHApLGI9dC5ub3JtYWxpemVLZXkodikseD0rYSh5LF8scCksdz12b2lkIDAsUz14Pj0wP2w6YztTLmhhcyhiKT8odz1TLmdldChiKSxTLnNldChiLHcreCkpOih3PTAsUy5zZXQoYix4KSksZi5zZXQoYix7b2Zmc2V0OncsdmFsdWU6eCxheGlzVmFsdWU6dixvcmlnaW5hbERhdHVtOnksb3JpZ2luYWxEYXRhc2V0OnAsb3JpZ2luYWxJbmRleDpffSl9dS5zZXQocCxmKX1yZXR1cm4gdX0sdC5zdGFja2VkRXh0ZW50cz1mdW5jdGlvbiBhKHQpe3ZhciBlPW5ldyBpLk1hcCxuPW5ldyBpLk1hcDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmZvckVhY2goKGZ1bmN0aW9uKHQscil7dmFyIG89dC5vZmZzZXQrdC52YWx1ZSxhPWkuTWF0aC5tYXgoW28sdC5vZmZzZXRdLHQub2Zmc2V0KSxzPWkuTWF0aC5taW4oW28sdC5vZmZzZXRdLHQub2Zmc2V0KSxsPXQuYXhpc1ZhbHVlO2UuaGFzKHIpP2UuZ2V0KHIpLmV4dGVudDxhJiZlLnNldChyLHtleHRlbnQ6YSxheGlzVmFsdWU6bCxzdGFja2VkRGF0dW06dH0pOmUuc2V0KHIse2V4dGVudDphLGF4aXNWYWx1ZTpsLHN0YWNrZWREYXR1bTp0fSksbi5oYXMocik/bi5nZXQocikuZXh0ZW50PnMmJm4uc2V0KHIse2V4dGVudDpzLGF4aXNWYWx1ZTpsLHN0YWNrZWREYXR1bTp0fSk6bi5zZXQocix7ZXh0ZW50OnMsYXhpc1ZhbHVlOmwsc3RhY2tlZERhdHVtOnR9KX0pKX0pKSx7bWF4aW11bUV4dGVudHM6ZSxtaW5pbXVtRXh0ZW50czpufX0sdC5zdGFja2VkRXh0ZW50PWZ1bmN0aW9uIHMoZSxuLG8pe3ZhciBhPVtdO2UuZm9yRWFjaCgoZnVuY3Rpb24oZSxpKXtmb3IodmFyIHI9aS5kYXRhKCkscz1yLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIGM9cltsXTtpZihudWxsPT1vfHxvKGMsbCxpKSl7dmFyIHU9ZS5nZXQodC5ub3JtYWxpemVLZXkobihjLGwsaSkpKTthLnB1c2godS52YWx1ZSt1Lm9mZnNldCl9fX0pKTt2YXIgcz1pLk1hdGgubWF4KGEsMCksbD1pLk1hdGgubWluKGEsMCk7cmV0dXJuW3IubWluKGwsMCksci5tYXgoMCxzKV19LHQubm9ybWFsaXplS2V5PW4ubWVtb2l6ZSgoZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KX0pKX0pKEFfdCk7dmFyIGtfdD17fSxMX3Q9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMX3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLExfdC5TSE9XX1dBUk5JTkdTPSEwLExfdC5BRERfVElUTEVfRUxFTUVOVFM9ITAsCi8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShrX3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBQX3Q9TF90O2Z1bmN0aW9uIE5fdCh0KXtQX3QuU0hPV19XQVJOSU5HUyYmY29uc29sZS53YXJuKHQpfWZ1bmN0aW9uIElfdCh0LGUpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3JldHVybiAwPT09ZT8odChuKSwtMSk6d2luZG93LnNldFRpbWVvdXQodCxlLG4pfWtfdC53YXJuPU5fdCxrX3Quc2V0VGltZW91dD1JX3Qsa190LmRlYm91bmNlPWZ1bmN0aW9uIFJfdCh0LGUsbil7dmFyIGk9bnVsbCxyPVtdLG89ZnVuY3Rpb24oKXtlLmFwcGx5KG4scil9O3JldHVybiBmdW5jdGlvbigpe3I9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxjbGVhclRpbWVvdXQoaSksaT1JX3Qobyx0KX19LGtfdC5kZXByZWNhdGVkPWZ1bmN0aW9uIE9fdCh0LGUsbil7dm9pZCAwPT09biYmKG49IiIpLE5fdCgiTWV0aG9kICIrdCsiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAiK2UrIi4gUGxlYXNlIHJlZmVyIHRvIHRoZSByZWxlYXNlIG5vdGVzLiAiK24pfTt2YXIgel90PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE3LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqL09iamVjdC5kZWZpbmVQcm9wZXJ0eSh6X3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBEX3Q9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5lbnRyeUluZGV4PXQsdGhpcy5leGl0SW5kZXg9dCx0aGlzLm1pbkluZGV4PXQsdGhpcy5tYXhJbmRleD10LHRoaXMuYnVja2V0VmFsdWU9ZSx0aGlzLm1pblZhbHVlPW4sdGhpcy5tYXhWYWx1ZT1ufXJldHVybiB0LnByb3RvdHlwZS5pc0luQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT10aGlzLmJ1Y2tldFZhbHVlfSx0LnByb3RvdHlwZS5hZGRUb0J1Y2tldD1mdW5jdGlvbih0LGUpe3Q8dGhpcy5taW5WYWx1ZSYmKHRoaXMubWluVmFsdWU9dCx0aGlzLm1pbkluZGV4PWUpLHQ+dGhpcy5tYXhWYWx1ZSYmKHRoaXMubWF4VmFsdWU9dCx0aGlzLm1heEluZGV4PWUpLHRoaXMuZXhpdEluZGV4PWV9LHQucHJvdG90eXBlLmdldFVuaXF1ZUluZGljZXM9ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5lbnRyeUluZGV4LHRoaXMubWF4SW5kZXgsdGhpcy5taW5JbmRleCx0aGlzLmV4aXRJbmRleF07cmV0dXJuIHQuZmlsdGVyKChmdW5jdGlvbihlLG4pe3JldHVybiAwPT1ufHxlIT10W24tMV19KSl9LHR9KSgpO3pfdC5CdWNrZXQ9RF90O3ZhciBCX3Q9e30sSF90PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoSF90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRl90PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXsiZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93LlNldD90aGlzLl9lczZTZXQ9bmV3IHdpbmRvdy5TZXQ6dGhpcy5fdmFsdWVzPVtdLHRoaXMuc2l6ZT0wfXJldHVybiB0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXRoaXMuX2VzNlNldD8odGhpcy5fZXM2U2V0LmFkZCh0KSx0aGlzLnNpemU9dGhpcy5fZXM2U2V0LnNpemUsdGhpcyk6KHRoaXMuaGFzKHQpfHwodGhpcy5fdmFsdWVzLnB1c2godCksdGhpcy5zaXplPXRoaXMuX3ZhbHVlcy5sZW5ndGgpLHRoaXMpfSx0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7aWYobnVsbCE9dGhpcy5fZXM2U2V0KXt2YXIgZT10aGlzLl9lczZTZXQuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemU9dGhpcy5fZXM2U2V0LnNpemUsZX12YXIgbj10aGlzLl92YWx1ZXMuaW5kZXhPZih0KTtyZXR1cm4tMSE9PW4mJih0aGlzLl92YWx1ZXMuc3BsaWNlKG4sMSksdGhpcy5zaXplPXRoaXMuX3ZhbHVlcy5sZW5ndGgsITApfSx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXRoaXMuX2VzNlNldD90aGlzLl9lczZTZXQuaGFzKHQpOi0xIT09dGhpcy5fdmFsdWVzLmluZGV4T2YodCl9LHQucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO251bGw9PXRoaXMuX2VzNlNldD90aGlzLl92YWx1ZXMuZm9yRWFjaCgoZnVuY3Rpb24oaSl7dC5jYWxsKGUsaSxpLG4pfSkpOnRoaXMuX2VzNlNldC5mb3JFYWNoKChmdW5jdGlvbihpLHIpe3JldHVybiB0LmNhbGwoZSxpLHIsbil9KSxlKX0sdH0pKCk7SF90LlNldD1GX3QsCi8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCX3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBWX3Q9dU8sVV90PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gVl90Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmNhbGxDYWxsYmFja3M9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKG4pe24uYXBwbHkodCxlKX0pKSx0aGlzfSxlfSkoSF90LlNldCk7Ql90LkNhbGxiYWNrU2V0PVVfdDt2YXIgal90PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShqX3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBHX3Q9TV90LFdfdD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fZW50aXRpZXM9W10sdGhpcy5fcnRyZWU9bmV3IEdfdC5SVHJlZX1yZXR1cm4gdC5wcm90b3R5cGUuYWRkQWxsPWZ1bmN0aW9uKHQsZSxuKXtpZih0aGlzLl9lbnRpdGllcz10aGlzLl9lbnRpdGllcy5jb25jYXQodCksdm9pZCAwIT09bilmb3IodmFyIGk9R190LlJUcmVlQm91bmRzLmJvdW5kcyhuKSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPUdfdC5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMoZShhPXRbcl0pKTtHX3QuUlRyZWVCb3VuZHMuaXNCb3VuZHNPdmVybGFwQm91bmRzKGksbykmJnRoaXMuX3J0cmVlLmluc2VydChvLGEpfWVsc2UgZm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE7bz1HX3QuUlRyZWVCb3VuZHMuZW50aXR5Qm91bmRzKGUoYT10W3JdKSksdGhpcy5fcnRyZWUuaW5zZXJ0KG8sYSl9fSx0LnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0KHQpLnBvcCgpfSx0LnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUubG9jYXRlTmVhcmVzdFgodCkucG9wKCl9LHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3RZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0WSh0KS5wb3AoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0KEdfdC5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHModCkpfSx0LnByb3RvdHlwZS5lbnRpdGllc0luWEJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0WChHX3QuUlRyZWVCb3VuZHMuZW50aXR5Qm91bmRzKHQpKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3J0cmVlLmludGVyc2VjdFkoR190LlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LHQucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VudGl0aWVzfSx0fSkoKTtqX3QuRW50aXR5U3RvcmU9V190O3ZhciBxX3Q9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovT2JqZWN0LmRlZmluZVByb3BlcnR5KHFfdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFlfdD1uX3QsWF90PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXsiZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93Lk1hcD90aGlzLl9lczZNYXA9bmV3IHdpbmRvdy5NYXA6dGhpcy5fa2V5VmFsdWVQYWlycz1bXX1yZXR1cm4gdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7aWYoWV90LmlzTmFOKHQpKXRocm93IG5ldyBFcnJvcigiTmFOIG1heSBub3QgYmUgdXNlZCBhcyBhIGtleSB0byB0aGUgTWFwIik7aWYobnVsbCE9dGhpcy5fZXM2TWFwKXJldHVybiB0aGlzLl9lczZNYXAuc2V0KHQsZSksdGhpcztmb3IodmFyIG49MDtuPHRoaXMuX2tleVZhbHVlUGFpcnMubGVuZ3RoO24rKylpZih0aGlzLl9rZXlWYWx1ZVBhaXJzW25dLmtleT09PXQpcmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnNbbl0udmFsdWU9ZSx0aGlzO3JldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzLnB1c2goe2tleTp0LHZhbHVlOmV9KSx0aGlzfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7aWYobnVsbCE9dGhpcy5fZXM2TWFwKXJldHVybiB0aGlzLl9lczZNYXAuZ2V0KHQpO2Zvcih2YXIgZT0wO2U8dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7ZSsrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbZV0ua2V5PT09dClyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlyc1tlXS52YWx1ZX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXRoaXMuX2VzNk1hcClyZXR1cm4gdGhpcy5fZXM2TWFwLmhhcyh0KTtmb3IodmFyIGU9MDtlPHRoaXMuX2tleVZhbHVlUGFpcnMubGVuZ3RoO2UrKylpZih0aGlzLl9rZXlWYWx1ZVBhaXJzW2VdLmtleT09PXQpcmV0dXJuITA7cmV0dXJuITF9LHQucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO251bGw9PXRoaXMuX2VzNk1hcD90aGlzLl9rZXlWYWx1ZVBhaXJzLmZvckVhY2goKGZ1bmN0aW9uKGkpe3QuY2FsbChlLGkudmFsdWUsaS5rZXksbil9KSk6dGhpcy5fZXM2TWFwLmZvckVhY2goKGZ1bmN0aW9uKGkscil7cmV0dXJuIHQuY2FsbChlLGkscixuKX0pLGUpfSx0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7aWYobnVsbCE9dGhpcy5fZXM2TWFwKXJldHVybiB0aGlzLl9lczZNYXAuZGVsZXRlKHQpO2Zvcih2YXIgZT0wO2U8dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7ZSsrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbZV0ua2V5PT09dClyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlycy5zcGxpY2UoZSwxKSwhMDtyZXR1cm4hMX0sdH0pKCk7cV90Lk1hcD1YX3Q7dmFyICRfdD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNy1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi9PYmplY3QuZGVmaW5lUHJvcGVydHkoJF90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSwkX3QuYXNzaWduPWZ1bmN0aW9uIEtfdCgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtmb3IodmFyIG49e30saT0wLHI9dDtpPHIubGVuZ3RoO2krKylmb3IodmFyIG89cltpXSxhPU9iamVjdC5rZXlzKG8pLHM9MCxsPWE7czxsLmxlbmd0aDtzKyspe3ZhciBjPWxbc107bltjXT1vW2NdfXJldHVybiBufTt2YXIgWl90PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE3LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShaX3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBKX3Q9Rmd0LFFfdD0iX19QbG90dGFibGVfQ2xpZW50VHJhbnNsYXRvciI7Wl90LmdldFRyYW5zbGF0b3I9ZnVuY3Rpb24gdHl0KHQpe3ZhciBlPXQucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpLG49ZVtRX3RdO3JldHVybiBudWxsPT1uJiYobj1uZXcgZXl0KGUpLGVbUV90XT1uKSxufTt2YXIgZXl0PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fcm9vdEVsZW1lbnQ9dH1yZXR1cm4gdC5wcm90b3R5cGUuY29tcHV0ZVBvc2l0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIG49e3g6dCx5OmV9LGk9Sl90Lk1hdGguZ2V0Q3VtdWxhdGl2ZVRyYW5zZm9ybSh0aGlzLl9yb290RWxlbWVudCk7cmV0dXJuIG51bGw9PWk/bjpKX3QuTWF0aC5hcHBseVRyYW5zZm9ybShpLG4pfSx0LmlzRXZlbnRJbnNpZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSl90LkRPTS5jb250YWlucyh0LnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSxlLnRhcmdldCl9LHR9KSgpO1pfdC5UcmFuc2xhdG9yPWV5dCwoZnVuY3Rpb24odCl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZT11Tzt0LkFycmF5PVZndCx0LkNvbG9yPVhndCx0LkRPTT1lX3QsdC5NYXRoPW5fdCx0LlJUcmVlPU1fdCx0LlN0YWNraW5nPUFfdCx0LldpbmRvdz1rX3QsZS5fX2V4cG9ydFN0YXIoel90LHQpLGUuX19leHBvcnRTdGFyKEJfdCx0KSxlLl9fZXhwb3J0U3RhcihibXQsdCksZS5fX2V4cG9ydFN0YXIoal90LHQpLGUuX19leHBvcnRTdGFyKHFfdCx0KSxlLl9fZXhwb3J0U3RhcigkX3QsdCksZS5fX2V4cG9ydFN0YXIoSF90LHQpLGUuX19leHBvcnRTdGFyKFpfdCx0KX0pKEZndCk7dmFyIG55dD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi9PYmplY3QuZGVmaW5lUHJvcGVydHkobnl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaXl0PUZndCxyeXQ9SGd0LG95dD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyeXQuZmx1c2goKX0sdH0pKCk7bnl0LkltbWVkaWF0ZT1veXQ7dmFyIGF5dD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtpeXQuRE9NLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKHJ5dC5mbHVzaCl9LHR9KSgpO255dC5BbmltYXRpb25GcmFtZT1heXQ7dmFyIHN5dD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fdGltZW91dE1zZWM9aXl0LkRPTS5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EU31yZXR1cm4gdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7c2V0VGltZW91dChyeXQuZmx1c2gsdGhpcy5fdGltZW91dE1zZWMpfSx0fSkoKTtueXQuVGltZW91dD1zeXQsKGZ1bmN0aW9uKHQpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGU9Rmd0LG49U210LGk9bnl0LHI9bmV3IGUuU2V0LG89bmV3IGUuU2V0LGE9ITEscz0hMTt0LlBvbGljeT1uLm1ha2VFbnVtKFsiaW1tZWRpYXRlIiwiYW5pbWF0aW9uRnJhbWUiLCJ0aW1lb3V0Il0pO3ZhciBsPW5ldyBpLkFuaW1hdGlvbkZyYW1lO2Z1bmN0aW9uIGModCl7by5hZGQodCksci5hZGQodCksdSgpfWZ1bmN0aW9uIHUoKXthfHwoYT0hMCxsLnJlbmRlcigpKX10LnJlbmRlclBvbGljeT1mdW5jdGlvbiBoKG4pe2lmKG51bGw9PW4pcmV0dXJuIGw7c3dpdGNoKG4pe2Nhc2UgdC5Qb2xpY3kuaW1tZWRpYXRlOmw9bmV3IGkuSW1tZWRpYXRlO2JyZWFrO2Nhc2UgdC5Qb2xpY3kuYW5pbWF0aW9uRnJhbWU6bD1uZXcgaS5BbmltYXRpb25GcmFtZTticmVhaztjYXNlIHQuUG9saWN5LnRpbWVvdXQ6bD1uZXcgaS5UaW1lb3V0O2JyZWFrO2RlZmF1bHQ6ZS5XaW5kb3cud2FybigiVW5yZWNvZ25pemVkIHJlbmRlclBvbGljeTogIituKX19LHQucmVnaXN0ZXJUb1JlbmRlcj1mdW5jdGlvbiBkKHQpe3MmJmUuV2luZG93Lndhcm4oIlJlZ2lzdGVyZWQgdG8gcmVuZGVyIHdoaWxlIG90aGVyIGNvbXBvbmVudHMgYXJlIGZsdXNoaW5nOiByZXF1ZXN0IG1heSBiZSBpZ25vcmVkIiksci5hZGQodCksdSgpfSx0LnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyPWMsdC5yZWdpc3RlclRvQ29tcHV0ZUxheW91dD1mdW5jdGlvbiBwKHQpe2ModCl9LHQuZmx1c2g9ZnVuY3Rpb24gZigpe2lmKGEpe28uZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29tcHV0ZUxheW91dCgpfSkpLHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVuZGVyKCl9KSkscz0hMDt2YXIgdD1uZXcgZS5TZXQ7ci5mb3JFYWNoKChmdW5jdGlvbihlKXt0cnl7ZS5yZW5kZXJJbW1lZGlhdGVseSgpfWNhdGNoKG4pe3dpbmRvdy5zZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IG59KSwwKSx0LmFkZChlKX19KSksbz1uZXcgZS5TZXQscj10LGE9ITEscz0hMX19fSkoSGd0KSwKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KEJndCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGx5dD1FZHQsY3l0PUhndCx1eXQ9Rmd0LGh5dD1TZS5leHBvcnRzLGR5dD1ibXQscHl0PVNtdDtCZ3QuWEFsaWdubWVudD1weXQubWFrZUVudW0oWyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSksQmd0LllBbGlnbm1lbnQ9cHl0Lm1ha2VFbnVtKFsidG9wIiwiY2VudGVyIiwiYm90dG9tIl0pO3ZhciBmeXQ9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX292ZXJmbG93SGlkZGVuPSExLHRoaXMuX29yaWdpbj17eDowLHk6MH0sdGhpcy5feEFsaWdubWVudD0ibGVmdCIsdGhpcy5feUFsaWdubWVudD0idG9wIix0aGlzLl9pc1NldHVwPSExLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fY3NzQ2xhc3Nlcz1uZXcgdXl0LlNldCx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25BbmNob3JDYWxsYmFja3M9bmV3IHV5dC5DYWxsYmFja1NldCx0aGlzLl9vbkRldGFjaENhbGxiYWNrcz1uZXcgdXl0LkNhbGxiYWNrU2V0LHRoaXMuX2Nzc0NsYXNzZXMuYWRkKCJjb21wb25lbnQiKX1yZXR1cm4gdC5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHQpe2lmKHQ9ZHl0LmNvZXJjZUV4dGVybmFsRDModCksdGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgcmV1c2UgZGVzdHJveSgpLWVkIENvbXBvbmVudHMhIik7cmV0dXJuIHRoaXMuaXNSb290KCkmJih0aGlzLl9yb290RWxlbWVudD10LHRoaXMuX3Jvb3RFbGVtZW50LmNsYXNzZWQoInBsb3R0YWJsZSIsITApKSxudWxsIT10aGlzLl9lbGVtZW50P3Qubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQubm9kZSgpKToodGhpcy5fZWxlbWVudD10LmFwcGVuZCgiZGl2IiksdGhpcy5fc2V0dXAoKSksdGhpcy5faXNBbmNob3JlZD0hMCx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLm9uQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0KHRoaXMpLHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSx0LnByb3RvdHlwZS5vZmZBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2lzU2V0dXB8fCh0aGlzLl9jc3NDbGFzc2VzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuX2VsZW1lbnQuY2xhc3NlZChlLCEwKX0pKSx0aGlzLl9jc3NDbGFzc2VzPW5ldyB1eXQuU2V0LHRoaXMuX2JhY2tncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImJhY2tncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fY29udGVudD10aGlzLl9lbGVtZW50LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgiY29udGVudCIsITApLHRoaXMuX2ZvcmVncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImZvcmVncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fY29udGVudC5jbGFzc2VkKHRoaXMuX292ZXJmbG93SGlkZGVuPyJjb21wb25lbnQtb3ZlcmZsb3ctaGlkZGVuIjoiY29tcG9uZW50LW92ZXJmbG93LXZpc2libGUiLCEwKSx0aGlzLl9pc1NldHVwPSEwKX0sdC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm57bWluV2lkdGg6MCxtaW5IZWlnaHQ6MH19LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24oZSxuLGkpe2lmKG51bGw9PWV8fG51bGw9PW58fG51bGw9PWkpe2lmKG51bGw9PXRoaXMuX2VsZW1lbnQpdGhyb3cgbmV3IEVycm9yKCJhbmNob3IoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgY29tcHV0ZUxheW91dCgpIik7aWYobnVsbD09dGhpcy5fcm9vdEVsZW1lbnQpdGhyb3cgbmV3IEVycm9yKCJudWxsIGFyZ3VtZW50cyBjYW5ub3QgYmUgcGFzc2VkIHRvIGNvbXB1dGVMYXlvdXQoKSBvbiBhIG5vbi1yb290LCB1bmFuY2hvcmVkIG5vZGUiKTtlPXt4OjAseTowfTt2YXIgcj10aGlzLl9yb290RWxlbWVudC5ub2RlKCk7bj11eXQuRE9NLmVsZW1lbnRXaWR0aChyKSxpPXV5dC5ET00uZWxlbWVudEhlaWdodChyKX12YXIgbz10aGlzLl9zaXplRnJvbU9mZmVyKG4saSksYT1vLmhlaWdodCxzPW8ud2lkdGg7cmV0dXJuIHRoaXMuc2V0Qm91bmRzKHMsYSxlLngrKG4tcykqdC5feEFsaWduVG9Qcm9wb3J0aW9uW3RoaXMuX3hBbGlnbm1lbnRdLGUueSsoaS1hKSp0Ll95QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feUFsaWdubWVudF0pLHRoaXN9LHQucHJvdG90eXBlLnNldEJvdW5kcz1mdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09aSYmKGk9MCksdGhpcy5fd2lkdGg9dCx0aGlzLl9oZWlnaHQ9ZSx0aGlzLl9vcmlnaW49e3g6bix5Oml9LG51bGwhPXRoaXMuX2VsZW1lbnQmJnRoaXMuX2VsZW1lbnQuc3R5bGVzKHtsZWZ0Om4rInB4IixoZWlnaHQ6ZSsicHgiLHRvcDppKyJweCIsd2lkdGg6dCsicHgifSksbnVsbCE9dGhpcy5fcmVzaXplSGFuZGxlciYmdGhpcy5fcmVzaXplSGFuZGxlcih7d2lkdGg6dCxoZWlnaHQ6ZX0pLHRoaXN9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5yZXF1ZXN0ZWRTcGFjZSh0LGUpO3JldHVybnt3aWR0aDp0aGlzLmZpeGVkV2lkdGgoKT9NYXRoLm1pbih0LG4ubWluV2lkdGgpOnQsaGVpZ2h0OnRoaXMuZml4ZWRIZWlnaHQoKT9NYXRoLm1pbihlLG4ubWluSGVpZ2h0KTplfX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX2lzU2V0dXAmJnRoaXMud2lkdGgoKT49MCYmdGhpcy5oZWlnaHQoKT49MCYmY3l0LnJlZ2lzdGVyVG9SZW5kZXIodGhpcyksdGhpc30sdC5wcm90b3R5cGUucmVuZGVyTG93UHJpb3JpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXIoKX0sdC5wcm90b3R5cGUuX3NjaGVkdWxlQ29tcHV0ZUxheW91dD1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX2lzU2V0dXAmJmN5dC5yZWdpc3RlclRvQ29tcHV0ZUxheW91dEFuZFJlbmRlcih0aGlzKX0sdC5wcm90b3R5cGUub25SZXNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc2l6ZUhhbmRsZXI9dCx0aGlzfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNBbmNob3JlZCYmdGhpcy5faXNTZXR1cCYmKHRoaXMuaXNSb290KCk/dGhpcy5fc2NoZWR1bGVDb21wdXRlTGF5b3V0KCk6dGhpcy5wYXJlbnQoKS5yZWRyYXcoKSksdGhpc30sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5yZW5kZXJUbz1mdW5jdGlvbih0KXtpZih0aGlzLmRldGFjaCgpLG51bGwhPXQpe3ZhciBlPXZvaWQgMDtpZighKGU9InN0cmluZyI9PXR5cGVvZiB0fHxoeXQuaXNFbGVtZW50KHQpP2x5dC5zZWxlY3QodCk6ZHl0LmNvZXJjZUV4dGVybmFsRDModCkpLm5vZGUoKXx8bnVsbD09ZS5ub2RlKCkubm9kZU5hbWUpdGhyb3cgbmV3IEVycm9yKCJQbG90dGFibGUgcmVxdWlyZXMgYSB2YWxpZCBFbGVtZW50IHRvIHJlbmRlclRvIik7aWYoInN2ZyI9PT1lLm5vZGUoKS5ub2RlTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlBsb3R0YWJsZSAzLnggYW5kIGxhdGVyIGNhbiBvbmx5IHJlbmRlclRvIGFuIEhUTUwgY29tcG9uZW50OyBwYXNzIGEgZGl2IGluc3RlYWQhIik7dGhpcy5hbmNob3IoZSl9aWYobnVsbD09dGhpcy5fZWxlbWVudCl0aHJvdyBuZXcgRXJyb3IoIklmIGEgQ29tcG9uZW50IGhhcyBuZXZlciBiZWVuIHJlbmRlcmVkIGJlZm9yZSwgdGhlbiByZW5kZXJUbyBtdXN0IGJlIGdpdmVuIGEgbm9kZSB0byByZW5kZXIgdG8sIG9yIGEgZDMuU2VsZWN0aW9uLCBvciBhIHNlbGVjdG9yIHN0cmluZyIpO3JldHVybiBjeXQucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXIodGhpcyksY3l0LmZsdXNoKCksdGhpc30sdC5wcm90b3R5cGUueEFsaWdubWVudD1mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiB0aGlzLl94QWxpZ25tZW50O2lmKGU9ZS50b0xvd2VyQ2FzZSgpLG51bGw9PXQuX3hBbGlnblRvUHJvcG9ydGlvbltlXSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGFsaWdubWVudDogIitlKTtyZXR1cm4gdGhpcy5feEFsaWdubWVudD1lLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUueUFsaWdubWVudD1mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiB0aGlzLl95QWxpZ25tZW50O2lmKGU9ZS50b0xvd2VyQ2FzZSgpLG51bGw9PXQuX3lBbGlnblRvUHJvcG9ydGlvbltlXSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGFsaWdubWVudDogIitlKTtyZXR1cm4gdGhpcy5feUFsaWdubWVudD1lLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuaGFzQ2xhc3M9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJihudWxsPT10aGlzLl9lbGVtZW50P3RoaXMuX2Nzc0NsYXNzZXMuaGFzKHQpOnRoaXMuX2VsZW1lbnQuY2xhc3NlZCh0KSl9LHQucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fHwobnVsbD09dGhpcy5fZWxlbWVudD90aGlzLl9jc3NDbGFzc2VzLmFkZCh0KTp0aGlzLl9lbGVtZW50LmNsYXNzZWQodCwhMCkpLHRoaXN9LHQucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fHwobnVsbD09dGhpcy5fZWxlbWVudD90aGlzLl9jc3NDbGFzc2VzLmRlbGV0ZSh0KTp0aGlzLl9lbGVtZW50LmNsYXNzZWQodCwhMSkpLHRoaXN9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KG51bGwpLHRoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX2VsZW1lbnQucmVtb3ZlKCksdGhpcy5faXNBbmNob3JlZD0hMSx0aGlzLl9vbkRldGFjaENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLm9uRGV0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vbkRldGFjaENhbGxiYWNrcy5hZGQodCksdGhpc30sdC5wcm90b3R5cGUub2ZmRGV0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vbkRldGFjaENhbGxiYWNrcy5kZWxldGUodCksdGhpc30sdC5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpcmV0dXJuIHRoaXMuX3BhcmVudDtpZihudWxsIT09dCYmIXQuaGFzKHRoaXMpKXRocm93IG5ldyBFcnJvcigiUGFzc2VkIGludmFsaWQgcGFyZW50Iik7cmV0dXJuIHRoaXMuX3BhcmVudD10LHRoaXN9LHQucHJvdG90eXBlLmJvdW5kcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3JpZ2luKCk7cmV0dXJue3RvcExlZnQ6dCxib3R0b21SaWdodDp7eDp0LngrdGhpcy53aWR0aCgpLHk6dC55K3RoaXMuaGVpZ2h0KCl9fX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLmRldGFjaCgpfSx0LnByb3RvdHlwZS53aWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93aWR0aH0sdC5wcm90b3R5cGUuaGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hlaWdodH0sdC5wcm90b3R5cGUub3JpZ2luPWZ1bmN0aW9uKCl7cmV0dXJue3g6dGhpcy5fb3JpZ2luLngseTp0aGlzLl9vcmlnaW4ueX19LHQucHJvdG90eXBlLm9yaWdpblRvUm9vdD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLm9yaWdpbigpLGU9dGhpcy5wYXJlbnQoKTtudWxsIT1lOyl7dmFyIG49ZS5vcmlnaW4oKTt0LngrPW4ueCx0LnkrPW4ueSxlPWUucGFyZW50KCl9cmV0dXJuIHR9LHQucHJvdG90eXBlLnJvb3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpczshdC5pc1Jvb3QoKTspdD10LnBhcmVudCgpO3JldHVybiB0fSx0LnByb3RvdHlwZS5pc1Jvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09dGhpcy5wYXJlbnQoKX0sdC5wcm90b3R5cGUuZm9yZWdyb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3JlZ3JvdW5kQ29udGFpbmVyfSx0LnByb3RvdHlwZS5jb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRlbnR9LHQucHJvdG90eXBlLmVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudH0sdC5wcm90b3R5cGUucm9vdEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290KCkuX3Jvb3RFbGVtZW50fSx0LnByb3RvdHlwZS5iYWNrZ3JvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb250YWluZXJ9LHQuX3hBbGlnblRvUHJvcG9ydGlvbj17bGVmdDowLGNlbnRlcjouNSxyaWdodDoxfSx0Ll95QWxpZ25Ub1Byb3BvcnRpb249e3RvcDowLGNlbnRlcjouNSxib3R0b206MX0sdH0pKCk7Qmd0LkNvbXBvbmVudD1meXQ7dmFyIG15dD17fSxneXQ9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShneXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBfeXQ9RWR0O2Z1bmN0aW9uIHl5dCh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9Myksdnl0KHQpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvRml4ZWQodCl9fWZ1bmN0aW9uIHZ5dCh0KXtpZih0PDB8fHQ+MjApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkZvcm1hdHRlciBwcmVjaXNpb24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDIwIik7aWYodCE9PU1hdGguZmxvb3IodCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkZvcm1hdHRlciBwcmVjaXNpb24gbXVzdCBiZSBhbiBpbnRlZ2VyIil9Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovZ3l0LmN1cnJlbmN5PWZ1bmN0aW9uIGJ5dCh0LGUsbil7dm9pZCAwPT09dCYmKHQ9Miksdm9pZCAwPT09ZSYmKGU9IiQiKSx2b2lkIDA9PT1uJiYobj0hMCk7dmFyIGk9eXl0KHQpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1pKE1hdGguYWJzKHQpKTtyZXR1cm4iIiE9PXImJihuP3I9ZStyOnIrPWUsdDwwJiYocj0iLSIrcikpLHJ9fSxneXQuZml4ZWQ9eXl0LGd5dC5nZW5lcmFsPWZ1bmN0aW9uIHh5dCh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9Myksdnl0KHQpLGZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiPT10eXBlb2YgZSl7dmFyIG49TWF0aC5wb3coMTAsdCk7cmV0dXJuIFN0cmluZyhNYXRoLnJvdW5kKGUqbikvbil9cmV0dXJuIFN0cmluZyhlKX19LGd5dC5pZGVudGl0eT1mdW5jdGlvbiB3eXQoKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KX19LGd5dC5wZXJjZW50YWdlPWZ1bmN0aW9uIFN5dCh0KXt2b2lkIDA9PT10JiYodD0wKTt2YXIgZT15eXQodCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPTEwMCp0LGk9dC50b1N0cmluZygpLHI9TWF0aC5wb3coMTAsaS5sZW5ndGgtKGkuaW5kZXhPZigiLiIpKzEpKTtyZXR1cm4gbj1wYXJzZUludCgobipyKS50b1N0cmluZygpLDEwKS9yLGUobikrIiUifX0sZ3l0LnNpU3VmZml4PWZ1bmN0aW9uIE15dCh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9Myksdnl0KHQpLGZ1bmN0aW9uKGUpe3JldHVybiBfeXQuZm9ybWF0KCIuIit0KyJzIikoZSl9fSxneXQuc2hvcnRTY2FsZT1mdW5jdGlvbiBFeXQodCl7dm9pZCAwPT09dCYmKHQ9Myksdnl0KHQpO3ZhciBlPSJLTUJUUSIsbj1feXQuZm9ybWF0KCIuIit0KyJlIiksaT1feXQuZm9ybWF0KCIuIit0KyJmIikscj1NYXRoLnBvdygxMCwzKihlLmxlbmd0aCsxKSksbz1NYXRoLnBvdygxMCwtdCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBhPU1hdGguYWJzKHQpO2lmKChhPG98fGE+PXIpJiYwIT09YSlyZXR1cm4gbih0KTtmb3IodmFyIHM9LTE7YT49TWF0aC5wb3coMWUzLHMrMikmJnM8ZS5sZW5ndGgtMTspcysrO3ZhciBsPSIiO3JldHVybiBsPS0xPT09cz9pKHQpOmkodC9NYXRoLnBvdygxZTMscysxKSkrZVtzXSwodD4wJiYiMTAwMCI9PT1sLnN1YnN0cigwLDQpfHx0PDAmJiItMTAwMCI9PT1sLnN1YnN0cigwLDUpKSYmKHM8ZS5sZW5ndGgtMT8ocysrLGw9aSh0L01hdGgucG93KDFlMyxzKzEpKStlW3NdKTpsPW4odCkpLGx9fSxneXQubXVsdGlUaW1lPWZ1bmN0aW9uIFR5dCgpe3ZhciB0PVt7c3BlY2lmaWVyOiIuJUwiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gMCE9PXQuZ2V0TWlsbGlzZWNvbmRzKCl9fSx7c3BlY2lmaWVyOiI6JVMiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gMCE9PXQuZ2V0U2Vjb25kcygpfX0se3NwZWNpZmllcjoiJUk6JU0iLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gMCE9PXQuZ2V0TWludXRlcygpfX0se3NwZWNpZmllcjoiJUkgJXAiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gMCE9PXQuZ2V0SG91cnMoKX19LHtzcGVjaWZpZXI6IiVhICVkIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10LmdldERheSgpJiYxIT09dC5nZXREYXRlKCl9fSx7c3BlY2lmaWVyOiIlYiAlZCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiAxIT09dC5nZXREYXRlKCl9fSx7c3BlY2lmaWVyOiIlYiIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dC5nZXRNb250aCgpfX1dO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj10LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQucHJlZGljYXRlKGUpfSkpO3JldHVybiBfeXQudGltZUZvcm1hdChuLmxlbmd0aD4wP25bMF0uc3BlY2lmaWVyOiIlWSIpKGUpfX0sZ3l0LnRpbWU9ZnVuY3Rpb24gQ3l0KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxlP195dC51dGNGb3JtYXQodCk6X3l0LnRpbWVGb3JtYXQodCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShteXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBBeXQ9dU8sa3l0PUVkdCxMeXQ9SW10LFB5dD1CZ3QsTnl0PWd5dCxJeXQ9Rmd0O215dC5BeGlzT3JpZW50YXRpb249U210Lm1ha2VFbnVtKFsiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwidG9wIl0pO3ZhciBSeXQ9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7aWYoaS5fZW5kVGlja0xlbmd0aD01LGkuX2lubmVyVGlja0xlbmd0aD01LGkuX3RpY2tMYWJlbFBhZGRpbmc9MTAsaS5fbWFyZ2luPTE1LGkuX3Nob3dFbmRUaWNrTGFiZWxzPSExLGkuX2Fubm90YXRpb25zRW5hYmxlZD0hMSxpLl9hbm5vdGF0aW9uVGllckNvdW50PTEsbnVsbD09ZXx8bnVsbD09bil0aHJvdyBuZXcgRXJyb3IoIkF4aXMgcmVxdWlyZXMgYSBzY2FsZSBhbmQgb3JpZW50YXRpb24iKTtyZXR1cm4gaS5fc2NhbGU9ZSxpLm9yaWVudGF0aW9uKG4pLGkuX3NldERlZmF1bHRBbGlnbm1lbnQoKSxpLmFkZENsYXNzKCJheGlzIiksaS5pc0hvcml6b250YWwoKT9pLmFkZENsYXNzKCJ4LWF4aXMiKTppLmFkZENsYXNzKCJ5LWF4aXMiKSxpLmZvcm1hdHRlcihOeXQuaWRlbnRpdHkoKSksaS5fcmVzY2FsZUNhbGxiYWNrPWZ1bmN0aW9uKHQpe3JldHVybiBpLl9yZXNjYWxlKCl9LGkuX3NjYWxlLm9uVXBkYXRlKGkuX3Jlc2NhbGVDYWxsYmFjayksaS5fYW5ub3RhdGVkVGlja3M9W10saS5fYW5ub3RhdGlvbkZvcm1hdHRlcj1OeXQuaWRlbnRpdHkoKSxpfXJldHVybiBBeXQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVzY2FsZUNhbGxiYWNrKX0sZS5wcm90b3R5cGUudGlja0xhYmVsRGF0YU9uRWxlbWVudD1mdW5jdGlvbih0KXtpZihudWxsIT10KXtmb3IodmFyIG47bnVsbCE9dCYmdC5jbGFzc0xpc3QmJnZvaWQgMD09PW47KXQuY2xhc3NMaXN0LmNvbnRhaW5zKGUuVElDS19MQUJFTF9DTEFTUyk/bj10OnQ9dC5wYXJlbnROb2RlO3JldHVybiB2b2lkIDA9PT10P3ZvaWQgMDpreXQuc2VsZWN0KHQpLmRhdHVtKCl9fSxlLnByb3RvdHlwZS5fY29tcHV0ZVdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heExhYmVsVGlja0xlbmd0aCgpfSxlLnByb3RvdHlwZS5fY29tcHV0ZUhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKX0sZS5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24odCxuKXt2YXIgaT0wLHI9MDtyZXR1cm4gdGhpcy5pc0hvcml6b250YWwoKT8ocj10aGlzLl9jb21wdXRlSGVpZ2h0KCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkmJihyKz0odGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMiplLl9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkcpKnRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpKSk6KGk9dGhpcy5fY29tcHV0ZVdpZHRoKCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkmJihpKz0odGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMiplLl9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkcpKnRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpKSkse21pbldpZHRoOmksbWluSGVpZ2h0OnJ9fSxlLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbCgpfSxlLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNIb3Jpem9udGFsKCl9LGUucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXIoKX0sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihlLG4saSl7cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLGUsbixpKSx0aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX3NjYWxlLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pOnRoaXMuX3NjYWxlLnJhbmdlKFt0aGlzLmhlaWdodCgpLDBdKSx0aGlzfSxlLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMucmVxdWVzdGVkU3BhY2UodCxlKTtyZXR1cm4gdGhpcy5pc0hvcml6b250YWwoKT97d2lkdGg6dCxoZWlnaHQ6bi5taW5IZWlnaHR9OntoZWlnaHQ6ZSx3aWR0aDpuLm1pbldpZHRofX0sZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fdGlja01hcmtDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZChlLlRJQ0tfTUFSS19DTEFTUysiLWNvbnRhaW5lciIsITApLHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKGUuVElDS19MQUJFTF9DTEFTUysiLWNvbnRhaW5lciIsITApLHRoaXMuX2Jhc2VsaW5lPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWNvbnRhaW5lciIsITApLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1saW5lLWNvbnRhaW5lciIsITApLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1jaXJjbGUtY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXJlY3QtY29udGFpbmVyIiwhMCk7dmFyIG49dGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWxhYmVsLWNvbnRhaW5lciIsITApLGk9bmV3IEx5dC5TdmdDb250ZXh0KG4ubm9kZSgpKTt0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXI9bmV3IEx5dC5DYWNoZU1lYXN1cmVyKGkpLHRoaXMuX2Fubm90YXRpb25Xcml0ZXI9bmV3IEx5dC5Xcml0ZXIodGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLGkpfSxlLnByb3RvdHlwZS5fZ2V0VGlja1ZhbHVlcz1mdW5jdGlvbigpe3JldHVybltdfSxlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxuPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrZS5USUNLX01BUktfQ0xBU1MpLmRhdGEodCksaT1uLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChlLlRJQ0tfTUFSS19DTEFTUywhMCkubWVyZ2Uobik7cmV0dXJuIGkuYXR0cnModGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCkpLGt5dC5zZWxlY3QoaS5ub2RlcygpWzBdKS5jbGFzc2VkKGUuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCkuYXR0cnModGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCEwKSksa3l0LnNlbGVjdChpLm5vZGVzKClbdC5sZW5ndGgtMV0pLmNsYXNzZWQoZS5FTkRfVElDS19NQVJLX0NMQVNTLCEwKS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goITApKSxuLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9iYXNlbGluZS5hdHRycyh0aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKSksdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLl9kcmF3QW5ub3RhdGlvbnMoKTp0aGlzLl9yZW1vdmVBbm5vdGF0aW9ucygpLHRoaXN9LGUucHJvdG90eXBlLmFubm90YXRlZFRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2Fubm90YXRlZFRpY2tzOih0aGlzLl9hbm5vdGF0ZWRUaWNrcz10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmFubm90YXRpb25Gb3JtYXR0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcjoodGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcj10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmFubm90YXRpb25zRW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9hbm5vdGF0aW9uc0VuYWJsZWQ6KHRoaXMuX2Fubm90YXRpb25zRW5hYmxlZD10LHRoaXMucmVkcmF3KCksdGhpcyl9LGUucHJvdG90eXBlLmFubm90YXRpb25UaWVyQ291bnQ9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fYW5ub3RhdGlvblRpZXJDb3VudDtpZih0PDApdGhyb3cgbmV3IEVycm9yKCJhbm5vdGF0aW9uVGllckNvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbm5vdGF0aW9uVGllckNvdW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5fZHJhd0Fubm90YXRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWUuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORyxpPW5ldyBJeXQuTWFwLHI9dGhpcy5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcigpO3IuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9dC5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUodC5hbm5vdGF0aW9uRm9ybWF0dGVyKCkoZSkpO2kuc2V0KGUse3dpZHRoOnIud2lkdGgrMipuLGhlaWdodDpyLmhlaWdodCsyKm59KX0pKTt2YXIgbz10aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCsyKm4sYT10aGlzLl9hbm5vdGF0aW9uVG9UaWVyKGkpLHM9bmV3IEl5dC5TZXQsbD10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLGM9dGhpcy5fY29yZVNpemUoKSx1PU1hdGgubWluKHRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpLE1hdGguZmxvb3IoKGwtYykvbykpO2EuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXsoLTE9PT10fHx0Pj11KSYmcy5hZGQoZSl9KSk7dmFyIGgsZD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5zZWxlY3RBbGwoIi4iK24pLmRhdGEociksbz1pLmVudGVyKCkuYXBwZW5kKGUpLmNsYXNzZWQobiwhMCkubWVyZ2UoaSk7cmV0dXJuIGkuZXhpdCgpLnJlbW92ZSgpLG99LHA9ZnVuY3Rpb24oZSl7c3dpdGNoKHQub3JpZW50YXRpb24oKSl7Y2FzZSJib3R0b20iOmNhc2UicmlnaHQiOnJldHVybiBhLmdldChlKSpvK2M7Y2FzZSJ0b3AiOmNhc2UibGVmdCI6cmV0dXJuIGwtYy1hLmdldChlKSpvfX0sZj1mdW5jdGlvbihlKXtyZXR1cm4gdC5fc2NhbGUuc2NhbGUoZSl9LG09ZnVuY3Rpb24odCl7cmV0dXJuIHMuaGFzKHQpPyJoaWRkZW4iOiJ2aXNpYmxlIn07c3dpdGNoKHRoaXMub3JpZW50YXRpb24oKSl7Y2FzZSJib3R0b20iOmNhc2UicmlnaHQiOmg9MDticmVhaztjYXNlInRvcCI6aD10aGlzLmhlaWdodCgpO2JyZWFrO2Nhc2UibGVmdCI6aD10aGlzLndpZHRoKCl9dmFyIGc9dGhpcy5pc0hvcml6b250YWwoKTtkKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1saW5lLWNvbnRhaW5lciIpLCJsaW5lIixlLkFOTk9UQVRJT05fTElORV9DTEFTUykuYXR0cnMoe3gxOmc/ZjpoLHgyOmc/ZjpwLHkxOmc/aDpmLHkyOmc/cDpmLHZpc2liaWxpdHk6bX0pLGQodGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3QoIi5hbm5vdGF0aW9uLWNpcmNsZS1jb250YWluZXIiKSwiY2lyY2xlIixlLkFOTk9UQVRJT05fQ0lSQ0xFX0NMQVNTKS5hdHRycyh7Y3g6Zz9mOmgsY3k6Zz9oOmYscjozfSk7dmFyIF89ZnVuY3Rpb24oZSl7c3dpdGNoKHQub3JpZW50YXRpb24oKSl7Y2FzZSJib3R0b20iOmNhc2UicmlnaHQiOnJldHVybiBwKGUpO2Nhc2UidG9wIjpjYXNlImxlZnQiOnJldHVybiBwKGUpLWkuZ2V0KGUpLmhlaWdodH19O2QodGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3QoIi5hbm5vdGF0aW9uLXJlY3QtY29udGFpbmVyIiksInJlY3QiLGUuQU5OT1RBVElPTl9SRUNUX0NMQVNTKS5hdHRycyh7eDpnP2Y6Xyx5Omc/XzpmLHdpZHRoOmc/ZnVuY3Rpb24odCl7cmV0dXJuIGkuZ2V0KHQpLndpZHRofTpmdW5jdGlvbih0KXtyZXR1cm4gaS5nZXQodCkuaGVpZ2h0fSxoZWlnaHQ6Zz9mdW5jdGlvbih0KXtyZXR1cm4gaS5nZXQodCkuaGVpZ2h0fTpmdW5jdGlvbih0KXtyZXR1cm4gaS5nZXQodCkud2lkdGh9LHZpc2liaWxpdHk6bX0pO3ZhciB5PXRoaXMuX2Fubm90YXRpb25Xcml0ZXIsdj10aGlzLmFubm90YXRpb25Gb3JtYXR0ZXIoKSxiPWQodGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3QoIi5hbm5vdGF0aW9uLWxhYmVsLWNvbnRhaW5lciIpLCJnIixlLkFOTk9UQVRJT05fTEFCRUxfQ0xBU1MpO2Iuc2VsZWN0QWxsKCIudGV4dC1jb250YWluZXIiKS5yZW1vdmUoKSxiLmF0dHJzKHt0cmFuc2Zvcm06ZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiKyhnP2YodCk6Xyh0KSkrIiwiKyhnP18odCk6Zih0KSkrIikifSx2aXNpYmlsaXR5Om19KS5lYWNoKChmdW5jdGlvbih0KXt5LndyaXRlKHYodCksZz9pLmdldCh0KS53aWR0aDppLmdldCh0KS5oZWlnaHQsZz9pLmdldCh0KS5oZWlnaHQ6aS5nZXQodCkud2lkdGgse3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciIsdGV4dFJvdGF0aW9uOmc/MDo5MH0sa3l0LnNlbGVjdCh0aGlzKS5ub2RlKCkpfSkpfSxlLnByb3RvdHlwZS5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9zY2FsZS5yYW5nZSgpO3JldHVybiBJeXQuQXJyYXkudW5pcSh0aGlzLmFubm90YXRlZFRpY2tzKCkuZmlsdGVyKChmdW5jdGlvbihuKXtyZXR1cm4gbnVsbCE9biYmSXl0Lk1hdGguaW5SYW5nZSh0Ll9zY2FsZS5zY2FsZShuKSxlWzBdLGVbMV0pfSkpKX0sZS5wcm90b3R5cGUuX2NvcmVTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5pc0hvcml6b250YWwoKT90aGlzLmhlaWdodCgpOnRoaXMud2lkdGgoKSxlPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fY29tcHV0ZUhlaWdodCgpOnRoaXMuX2NvbXB1dGVXaWR0aCgpO3JldHVybiBNYXRoLm1pbihlLHQpfSxlLnByb3RvdHlwZS5fYW5ub3RhdGlvblRpZXJIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMiplLl9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkd9LGUucHJvdG90eXBlLl9hbm5vdGF0aW9uVG9UaWVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bW11dLGk9bmV3IEl5dC5NYXAscj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpO3JldHVybiB0aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCkuZm9yRWFjaCgoZnVuY3Rpb24obyl7dmFyIGE9ZS5fc2NhbGUuc2NhbGUobykscz10LmdldChvKS53aWR0aDtpZihhPDB8fGErcz5yKWkuc2V0KG8sLTEpO2Vsc2V7Zm9yKHZhciBsPTA7bltsXS5zb21lKChmdW5jdGlvbihuKXt2YXIgaT1lLl9zY2FsZS5zY2FsZShuKSxyPXQuZ2V0KG4pLndpZHRoO3JldHVybiBhK3M+PWkmJmE8PWkrcn0pKTspbCsrLG4ubGVuZ3RoPT09bCYmbi5wdXNoKFtdKTtuW2xdLnB1c2gobyksaS5zZXQobyxsKX19KSksaX0sZS5wcm90b3R5cGUuX3JlbW92ZUFubm90YXRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWxpbmUiKS5yZW1vdmUoKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tY2lyY2xlIikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLXJlY3QiKS5yZW1vdmUoKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tbGFiZWwiKS5yZW1vdmUoKX0sZS5wcm90b3R5cGUuX2dlbmVyYXRlQmFzZWxpbmVBdHRySGFzaD1mdW5jdGlvbigpe3ZhciB0PXt4MTowLHkxOjAseDI6MCx5MjowfTtzd2l0Y2godGhpcy5fb3JpZW50YXRpb24pe2Nhc2UiYm90dG9tIjp0LngyPXRoaXMud2lkdGgoKTticmVhaztjYXNlInRvcCI6dC54Mj10aGlzLndpZHRoKCksdC55MT10aGlzLmhlaWdodCgpLHQueTI9dGhpcy5oZWlnaHQoKTticmVhaztjYXNlImxlZnQiOnQueDE9dGhpcy53aWR0aCgpLHQueDI9dGhpcy53aWR0aCgpLHQueTI9dGhpcy5oZWlnaHQoKTticmVhaztjYXNlInJpZ2h0Ijp0LnkyPXRoaXMuaGVpZ2h0KCl9cmV0dXJuIHR9LGUucHJvdG90eXBlLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt2b2lkIDA9PT10JiYodD0hMSk7dmFyIG49e3gxOjAseTE6MCx4MjowLHkyOjB9LGk9ZnVuY3Rpb24odCl7cmV0dXJuIGUuX3NjYWxlLnNjYWxlKHQpfTt0aGlzLmlzSG9yaXpvbnRhbCgpPyhuLngxPWksbi54Mj1pKToobi55MT1pLG4ueTI9aSk7dmFyIHI9dD90aGlzLl9lbmRUaWNrTGVuZ3RoOnRoaXMuX2lubmVyVGlja0xlbmd0aDtzd2l0Y2godGhpcy5fb3JpZW50YXRpb24pe2Nhc2UiYm90dG9tIjpuLnkyPXI7YnJlYWs7Y2FzZSJ0b3AiOm4ueTE9dGhpcy5oZWlnaHQoKSxuLnkyPXRoaXMuaGVpZ2h0KCktcjticmVhaztjYXNlImxlZnQiOm4ueDE9dGhpcy53aWR0aCgpLG4ueDI9dGhpcy53aWR0aCgpLXI7YnJlYWs7Y2FzZSJyaWdodCI6bi54Mj1yfXJldHVybiBufSxlLnByb3RvdHlwZS5fc2V0RGVmYXVsdEFsaWdubWVudD1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9vcmllbnRhdGlvbil7Y2FzZSJib3R0b20iOnRoaXMueUFsaWdubWVudCgidG9wIik7YnJlYWs7Y2FzZSJ0b3AiOnRoaXMueUFsaWdubWVudCgiYm90dG9tIik7YnJlYWs7Y2FzZSJsZWZ0Ijp0aGlzLnhBbGlnbm1lbnQoInJpZ2h0Iik7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy54QWxpZ25tZW50KCJsZWZ0Iil9fSxlLnByb3RvdHlwZS5pc0hvcml6b250YWw9ZnVuY3Rpb24oKXtyZXR1cm4idG9wIj09PXRoaXMuX29yaWVudGF0aW9ufHwiYm90dG9tIj09PXRoaXMuX29yaWVudGF0aW9ufSxlLnByb3RvdHlwZS5nZXRTY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zY2FsZX0sZS5wcm90b3R5cGUuZm9ybWF0dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2Zvcm1hdHRlcjoodGhpcy5fZm9ybWF0dGVyPXQsdGhpcy5yZWRyYXcoKSx0aGlzKX0sZS5wcm90b3R5cGUuaW5uZXJUaWNrTGVuZ3RoPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX2lubmVyVGlja0xlbmd0aDtpZih0PDApdGhyb3cgbmV3IEVycm9yKCJpbm5lciB0aWNrIGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX2lubmVyVGlja0xlbmd0aD10LHRoaXMucmVkcmF3KCksdGhpc30sZS5wcm90b3R5cGUuZW5kVGlja0xlbmd0aD1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9lbmRUaWNrTGVuZ3RoO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoImVuZCB0aWNrIGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX2VuZFRpY2tMZW5ndGg9dCx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLl9tYXhMYWJlbFRpY2tMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaG93RW5kVGlja0xhYmVscygpP01hdGgubWF4KHRoaXMuaW5uZXJUaWNrTGVuZ3RoKCksdGhpcy5lbmRUaWNrTGVuZ3RoKCkpOnRoaXMuaW5uZXJUaWNrTGVuZ3RoKCl9LGUucHJvdG90eXBlLnRpY2tMYWJlbFBhZGRpbmc9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fdGlja0xhYmVsUGFkZGluZztpZih0PDApdGhyb3cgbmV3IEVycm9yKCJ0aWNrIGxhYmVsIHBhZGRpbmcgbXVzdCBiZSBwb3NpdGl2ZSIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxQYWRkaW5nPXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5tYXJnaW49ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fbWFyZ2luO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoIm1hcmdpbiBzaXplIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5fbWFyZ2luPXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5vcmllbnRhdGlvbj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9vcmllbnRhdGlvbjt2YXIgZT10LnRvTG93ZXJDYXNlKCk7aWYoInRvcCIhPT1lJiYiYm90dG9tIiE9PWUmJiJsZWZ0IiE9PWUmJiJyaWdodCIhPT1lKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgb3JpZW50YXRpb24iKTtyZXR1cm4gdGhpcy5fb3JpZW50YXRpb249ZSx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLnNob3dFbmRUaWNrTGFiZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3Nob3dFbmRUaWNrTGFiZWxzOih0aGlzLl9zaG93RW5kVGlja0xhYmVscz10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLl9zaG93QWxsVGlja01hcmtzPWZ1bmN0aW9uKCl7dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIitlLlRJQ0tfTUFSS19DTEFTUykuZWFjaCgoZnVuY3Rpb24oKXtreXQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpfSkpfSxlLnByb3RvdHlwZS5fc2hvd0FsbFRpY2tMYWJlbHM9ZnVuY3Rpb24oKXt0aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIitlLlRJQ0tfTEFCRUxfQ0xBU1MpLmVhY2goKGZ1bmN0aW9uKCl7a3l0LnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKX0pKX0sZS5wcm90b3R5cGUuX2hpZGVPdmVyZmxvd2luZ1RpY2tMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQoKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIitlLlRJQ0tfTEFCRUxfQ0xBU1MpO24uZW1wdHkoKXx8bi5lYWNoKChmdW5jdGlvbihlLG4pe0l5dC5ET00uY2xpZW50UmVjdEluc2lkZSh0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHQpfHxreXQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9KSl9LGUucHJvdG90eXBlLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIitlLlRJQ0tfTUFSS19DTEFTUyksbj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIitlLlRJQ0tfTEFCRUxfQ0xBU1MpLmZpbHRlcigoZnVuY3Rpb24odCxlKXt2YXIgbj1reXQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuImluaGVyaXQiPT09bnx8InZpc2libGUiPT09bn0pKS5kYXRhKCk7dC5lYWNoKChmdW5jdGlvbih0LGUpey0xPT09bi5pbmRleE9mKHQpJiZreXQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9KSl9LGUucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5yZXNldCgpfSxlLkVORF9USUNLX01BUktfQ0xBU1M9ImVuZC10aWNrLW1hcmsiLGUuVElDS19NQVJLX0NMQVNTPSJ0aWNrLW1hcmsiLGUuVElDS19MQUJFTF9DTEFTUz0idGljay1sYWJlbCIsZS5BTk5PVEFUSU9OX0xJTkVfQ0xBU1M9ImFubm90YXRpb24tbGluZSIsZS5BTk5PVEFUSU9OX1JFQ1RfQ0xBU1M9ImFubm90YXRpb24tcmVjdCIsZS5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUz0iYW5ub3RhdGlvbi1jaXJjbGUiLGUuQU5OT1RBVElPTl9MQUJFTF9DTEFTUz0iYW5ub3RhdGlvbi1sYWJlbCIsZS5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HPTQsZX0pKFB5dC5Db21wb25lbnQpO215dC5BeGlzPVJ5dCwKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KE5tdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE95dD11Tyx6eXQ9RWR0LER5dD1JbXQsQnl0PUJndCxIeXQ9Rmd0LEZ5dD1teXQsVnl0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dm9pZCAwPT09biYmKG49ImJvdHRvbSIpO3ZhciBpPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIGkuX3RpY2tMYWJlbEFuZ2xlPTAsaS5fdGlja0xhYmVsU2hlYXJBbmdsZT0wLGkuYWRkQ2xhc3MoImNhdGVnb3J5LWF4aXMiKSxpfXJldHVybiBPeXQuX19leHRlbmRzKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJfd3JhcHBlciIse2dldDpmdW5jdGlvbigpe3ZhciB0PW5ldyBEeXQuV3JhcHBlcjtyZXR1cm4gbnVsbCE9dGhpcy5fdGlja0xhYmVsTWF4TGluZXMmJnQubWF4TGluZXModGhpcy5fdGlja0xhYmVsTWF4TGluZXMpLHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJfd3JpdGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEeXQuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHRoaXMuX3R5cGVzZXR0ZXJDb250ZXh0LHRoaXMuX3dyYXBwZXIpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3QucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3R5cGVzZXR0ZXJDb250ZXh0PW5ldyBEeXQuU3ZnQ29udGV4dCh0aGlzLl90aWNrTGFiZWxDb250YWluZXIubm9kZSgpKSx0aGlzLl9tZWFzdXJlcj1uZXcgRHl0LkNhY2hlTWVhc3VyZXIodGhpcy5fdHlwZXNldHRlckNvbnRleHQpfSxlLnByb3RvdHlwZS5fcmVzY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZHJhdygpfSxlLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuaXNIb3Jpem9udGFsKCk/MDp0aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpK3RoaXMubWFyZ2luKCksaT10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkrdGhpcy5tYXJnaW4oKTowO2lmKDA9PT10aGlzLl9zY2FsZS5kb21haW4oKS5sZW5ndGgpcmV0dXJue21pbldpZHRoOjAsbWluSGVpZ2h0OjB9O2lmKHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkpe3ZhciByPXRoaXMuX2Fubm90YXRpb25UaWVySGVpZ2h0KCkqdGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCk7dGhpcy5pc0hvcml6b250YWwoKT9pKz1yOm4rPXJ9dmFyIG89dGhpcy5fbWVhc3VyZVRpY2tMYWJlbHModCxlKTtyZXR1cm57bWluV2lkdGg6by51c2VkV2lkdGgrbixtaW5IZWlnaHQ6by51c2VkSGVpZ2h0K2l9fSxlLnByb3RvdHlwZS5fY29yZVNpemU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLGU9dGhpcy5pc0hvcml6b250YWwoKT90aGlzLnJlcXVlc3RlZFNwYWNlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKS5taW5IZWlnaHQ6dGhpcy5yZXF1ZXN0ZWRTcGFjZSh0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSkubWluV2lkdGgsbj10aGlzLm1hcmdpbigpK3RoaXMuX2Fubm90YXRpb25UaWVySGVpZ2h0KCk7cmV0dXJuIE1hdGgubWluKGUtbix0KX0sZS5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXREb3duc2FtcGxlSW5mbygpLmRvbWFpbn0sZS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQnl0LkNvbXBvbmVudC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHQsZSl9LGUucHJvdG90eXBlLmdldERvd25zYW1wbGVJbmZvPWZ1bmN0aW9uKHQsbil7dm9pZCAwPT09dCYmKHQ9dGhpcy5fc2NhbGUpLHZvaWQgMD09PW4mJihuPXQuaW52ZXJ0UmFuZ2UoKSk7dmFyIGk9MD09PXRoaXMuX3RpY2tMYWJlbEFuZ2xlPzE6MS9NYXRoLmNvcyh0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlLzE4MCpNYXRoLlBJKSxyPU1hdGguY2VpbChlLl9NSU5JTVVNX1dJRFRIX1BFUl9MQUJFTF9QWCppL3Quc3RlcFdpZHRoKCkpO3JldHVybntkb21haW46bi5maWx0ZXIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlcj09MH0pKSxzdGVwV2lkdGg6cip0LnN0ZXBXaWR0aCgpfX0sZS5wcm90b3R5cGUudGlja0xhYmVsQW5nbGU9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fdGlja0xhYmVsQW5nbGU7aWYoMCE9PXQmJjkwIT09dCYmLTkwIT09dCl0aHJvdyBuZXcgRXJyb3IoIkFuZ2xlICIrdCsiIG5vdCBzdXBwb3J0ZWQ7IG9ubHkgMCwgOTAsIGFuZCAtOTAgYXJlIHZhbGlkIHZhbHVlcyIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxBbmdsZT10LHRoaXMucmVkcmF3KCksdGhpc30sZS5wcm90b3R5cGUudGlja0xhYmVsU2hlYXJBbmdsZT1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlO2lmKHQ8LTgwfHx0PjgwKXRocm93IG5ldyBFcnJvcigiQW5nbGUgIit0KyIgbm90IHN1cHBvcnRlZDsgTXVzdCBiZSBiZXR3ZWVuIFstODAsIDgwXSIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlPXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS50aWNrTGFiZWxNYXhXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fdGlja0xhYmVsTWF4V2lkdGg6KHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoPXQsdGhpcy5yZWRyYXcoKSx0aGlzKX0sZS5wcm90b3R5cGUudGlja0xhYmVsTWF4TGluZXM9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX3RpY2tMYWJlbE1heExpbmVzOih0aGlzLl90aWNrTGFiZWxNYXhMaW5lcz10LHRoaXMucmVkcmF3KCksdGhpcyl9LGUucHJvdG90eXBlLl90aWNrU3BhY2VSZXF1aXJlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSt0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKX0sZS5wcm90b3R5cGUuX2RyYXdUaWNrcz1mdW5jdGlvbih0LGUpe3ZhciBuLGkscj10aGlzO3N3aXRjaCh0aGlzLnRpY2tMYWJlbEFuZ2xlKCkpe2Nhc2UgMDpuPXtsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9LGk9e2xlZnQ6ImNlbnRlciIscmlnaHQ6ImNlbnRlciIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn07YnJlYWs7Y2FzZSA5MDpuPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoicmlnaHQiLGJvdHRvbToibGVmdCJ9LGk9e2xlZnQ6InRvcCIscmlnaHQ6ImJvdHRvbSIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWs7Y2FzZS05MDpuPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoibGVmdCIsYm90dG9tOiJyaWdodCJ9LGk9e2xlZnQ6ImJvdHRvbSIscmlnaHQ6InRvcCIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn19ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgbz16eXQuc2VsZWN0KHRoaXMpLGE9ci5pc0hvcml6b250YWwoKT90OnIud2lkdGgoKS1yLl90aWNrU3BhY2VSZXF1aXJlZCgpLHM9ci5pc0hvcml6b250YWwoKT9yLmhlaWdodCgpLXIuX3RpY2tTcGFjZVJlcXVpcmVkKCk6dCxsPXt4QWxpZ246bltyLm9yaWVudGF0aW9uKCldLHlBbGlnbjppW3Iub3JpZW50YXRpb24oKV0sdGV4dFJvdGF0aW9uOnIudGlja0xhYmVsQW5nbGUoKSx0ZXh0U2hlYXI6ci50aWNrTGFiZWxTaGVhckFuZ2xlKCl9O2lmKG51bGwhPXIuX3RpY2tMYWJlbE1heFdpZHRoKXtpZigibGVmdCI9PT1yLm9yaWVudGF0aW9uKCkmJmE+ci5fdGlja0xhYmVsTWF4V2lkdGgpe3ZhciBjPWEtci5fdGlja0xhYmVsTWF4V2lkdGgsdT1vLmF0dHIoInRyYW5zZm9ybSIpKyIgdHJhbnNsYXRlKCIrYysiLCAwKSI7by5hdHRyKCJ0cmFuc2Zvcm0iLHUpfWE9TWF0aC5taW4oYSxyLl90aWNrTGFiZWxNYXhXaWR0aCl9ci5fd3JpdGVyLndyaXRlKHIuZm9ybWF0dGVyKCkoZSksYSxzLGwsby5ub2RlKCkpfSkpfSxlLnByb3RvdHlwZS5fbWVhc3VyZVRpY2tMYWJlbHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9dGhpcy5fc2NhbGUuY2xvbmVXaXRob3V0UHJvdmlkZXJzKCkucmFuZ2UoWzAsdGhpcy5pc0hvcml6b250YWwoKT90OmVdKSxyPXRoaXMuZ2V0RG93bnNhbXBsZUluZm8oaSksbz1yLmRvbWFpbixhPXIuc3RlcFdpZHRoLHM9dC10aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpO3RoaXMuaXNIb3Jpem9udGFsKCkmJihzPWEsMCE9PXRoaXMuX3RpY2tMYWJlbEFuZ2xlJiYocz1lLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkpLHM9TWF0aC5tYXgocywwKSk7dmFyIGw9YTt0aGlzLmlzSG9yaXpvbnRhbCgpJiYobD1lLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCksMCE9PXRoaXMuX3RpY2tMYWJlbEFuZ2xlJiYobD10LXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkpLGw9TWF0aC5tYXgobCwwKSksbnVsbCE9dGhpcy5fdGlja0xhYmVsTWF4V2lkdGgmJihzPU1hdGgubWluKHMsdGhpcy5fdGlja0xhYmVsTWF4V2lkdGgpKTt2YXIgYyx1PW8ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbi5fd3JhcHBlci53cmFwKG4uZm9ybWF0dGVyKCkodCksbi5fbWVhc3VyZXIscyxsKX0pKSxoPXRoaXMuaXNIb3Jpem9udGFsKCkmJjA9PT10aGlzLl90aWNrTGFiZWxBbmdsZT96eXQuc3VtOkh5dC5NYXRoLm1heCxkPXRoaXMuaXNIb3Jpem9udGFsKCkmJjA9PT10aGlzLl90aWNrTGFiZWxBbmdsZT9IeXQuTWF0aC5tYXg6enl0LnN1bSxwPWgodSwoZnVuY3Rpb24odCl7cmV0dXJuIG4uX21lYXN1cmVyLm1lYXN1cmUodC53cmFwcGVkVGV4dCkud2lkdGh9KSwwKSxmPWQodSwoZnVuY3Rpb24odCl7cmV0dXJuIG4uX21lYXN1cmVyLm1lYXN1cmUodC53cmFwcGVkVGV4dCkuaGVpZ2h0fSksMCk7cmV0dXJuIDAhPT10aGlzLl90aWNrTGFiZWxBbmdsZSYmKHA9KGM9W2YscF0pWzBdLGY9Y1sxXSkse3VzZWRXaWR0aDpwLHVzZWRIZWlnaHQ6Zn19LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciBuPXRoaXMuX3NjYWxlLGk9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhuKSxyPWkuZG9tYWluLG89aS5zdGVwV2lkdGgsYT1vO3RoaXMuaXNIb3Jpem9udGFsKCkmJm51bGwhPXRoaXMuX3RpY2tMYWJlbE1heFdpZHRoJiYoYT1NYXRoLm1pbihhLHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoKSk7dmFyIHM9dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrRnl0LkF4aXMuVElDS19MQUJFTF9DTEFTUykuZGF0YShyKSxsPXMuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKEZ5dC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsITApLm1lcmdlKHMpO3MuZXhpdCgpLnJlbW92ZSgpLGwuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCxpKXt2YXIgcj1uLnNjYWxlKHQpLWEvMjtyZXR1cm4idHJhbnNsYXRlKCIrKGUuaXNIb3Jpem9udGFsKCk/cjowKSsiLCIrKGUuaXNIb3Jpem9udGFsKCk/MDpyKSsiKSJ9KSksbC50ZXh0KCIiKSx0aGlzLl9kcmF3VGlja3MobyxsKTt2YXIgYz0icmlnaHQiPT09dGhpcy5vcmllbnRhdGlvbigpP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MCx1PSJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MDtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2MrIiwiK3UrIikiKSx0aGlzLl9zaG93QWxsVGlja01hcmtzKCksdGhpcy5fc2hvd0FsbFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsKCksdGhpc30sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihlLG4saSl7cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLGUsbixpKSx0aGlzLmlzSG9yaXpvbnRhbCgpfHx0aGlzLl9zY2FsZS5yYW5nZShbMCx0aGlzLmhlaWdodCgpXSksdGhpc30sZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sZS5fTUlOSU1VTV9XSURUSF9QRVJfTEFCRUxfUFg9MTUsZX0pKEZ5dC5BeGlzKTtObXQuQ2F0ZWdvcnk9Vnl0O3ZhciBVeXQ9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovT2JqZWN0LmRlZmluZVByb3BlcnR5KFV5dCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGp5dD11TyxHeXQ9RWR0LFd5dD1JbXQscXl0PWd5dCxZeXQ9Rmd0LFh5dD1teXQsJHl0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gaS5fdGlja0xhYmVsUG9zaXRpb25pbmc9ImNlbnRlciIsaS5fdXNlc1RleHRXaWR0aEFwcHJveGltYXRpb249ITEsaS5mb3JtYXR0ZXIocXl0LmdlbmVyYWwoKSksaX1yZXR1cm4ganl0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3QucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3ZhciBlPW5ldyBXeXQuU3ZnQ29udGV4dCh0aGlzLl90aWNrTGFiZWxDb250YWluZXIubm9kZSgpLFh5dC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpO3RoaXMuX21lYXN1cmVyPW5ldyBXeXQuQ2FjaGVNZWFzdXJlcihlKSx0aGlzLl93cmFwcGVyPShuZXcgV3l0LldyYXBwZXIpLm1heExpbmVzKDEpfSxlLnByb3RvdHlwZS5fY29tcHV0ZVdpZHRoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdXNlc1RleHRXaWR0aEFwcHJveGltYXRpb24/dGhpcy5fY29tcHV0ZUFwcHJveGltYXRlVGV4dFdpZHRoKCk6dGhpcy5fY29tcHV0ZUV4YWN0VGV4dFdpZHRoKCk7cmV0dXJuImNlbnRlciI9PT10aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZz90aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSt0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSt0Ok1hdGgubWF4KHRoaXMuX21heExhYmVsVGlja0xlbmd0aCgpLHRoaXMudGlja0xhYmVsUGFkZGluZygpK3QpfSxlLnByb3RvdHlwZS5fY29tcHV0ZUV4YWN0VGV4dFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuX2dldFRpY2tWYWx1ZXMoKS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZm9ybWF0dGVyKCkoZSk7cmV0dXJuIHQuX21lYXN1cmVyLm1lYXN1cmUobikud2lkdGh9KSk7cmV0dXJuIFl5dC5NYXRoLm1heChlLDApfSxlLnByb3RvdHlwZS5fY29tcHV0ZUFwcHJveGltYXRlVGV4dFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxuPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoIk0iKS53aWR0aCxpPWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdC5mb3JtYXR0ZXIoKShlKS5sZW5ndGgqbn0pKTtyZXR1cm4gWXl0Lk1hdGgubWF4KGksMCl9LGUucHJvdG90eXBlLl9jb21wdXRlSGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodDtyZXR1cm4iY2VudGVyIj09PXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nP3RoaXMuX21heExhYmVsVGlja0xlbmd0aCgpK3RoaXMudGlja0xhYmVsUGFkZGluZygpK3Q6TWF0aC5tYXgodGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCksdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrdCl9LGUucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc2NhbGUsZT10LmRvbWFpbigpLG49ZVswXTw9ZVsxXT9lWzBdOmVbMV0saT1lWzBdPj1lWzFdP2VbMF06ZVsxXTtyZXR1cm4gdC50aWNrcygpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQ+PW4mJnQ8PWl9KSl9LGUucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7aWYodGhpcy5faXNTZXR1cCl7aWYoIXRoaXMuaXNIb3Jpem9udGFsKCkpe3ZhciB0PXRoaXMuX2NvbXB1dGVXaWR0aCgpO2lmKHQ+dGhpcy53aWR0aCgpfHx0PHRoaXMud2lkdGgoKS10aGlzLm1hcmdpbigpKXJldHVybiB2b2lkIHRoaXMucmVkcmF3KCl9dGhpcy5yZW5kZXIoKX19LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciBuPXt4OjAseTowLGR4OiIwZW0iLGR5OiIwLjNlbSJ9LGk9dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkscj10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSxvPSJtaWRkbGUiLGE9MCxzPTAsbD0wLGM9MDtpZih0aGlzLmlzSG9yaXpvbnRhbCgpKXN3aXRjaCh0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZyl7Y2FzZSJsZWZ0IjpvPSJlbmQiLGE9LXIsYz1yO2JyZWFrO2Nhc2UiY2VudGVyIjpjPWkrcjticmVhaztjYXNlInJpZ2h0IjpvPSJzdGFydCIsYT1yLGM9cn1lbHNlIHN3aXRjaCh0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZyl7Y2FzZSJ0b3AiOm4uZHk9Ii0wLjNlbSIsbD1yLHM9LXI7YnJlYWs7Y2FzZSJjZW50ZXIiOmw9aStyO2JyZWFrO2Nhc2UiYm90dG9tIjpuLmR5PSIxZW0iLGw9cixzPXJ9dmFyIHU9dGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCk7c3dpdGNoKHRoaXMub3JpZW50YXRpb24oKSl7Y2FzZSJib3R0b20iOm4ueD11LngxLG4uZHk9IjAuOTVlbSIscz11LnkxK2M7YnJlYWs7Y2FzZSJ0b3AiOm4ueD11LngxLG4uZHk9Ii0uMjVlbSIscz11LnkxLWM7YnJlYWs7Y2FzZSJsZWZ0IjpvPSJlbmQiLGE9dS54MS1sLG4ueT11LnkxO2JyZWFrO2Nhc2UicmlnaHQiOm89InN0YXJ0IixhPXUueDErbCxuLnk9dS55MX12YXIgaD10aGlzLl9nZXRUaWNrVmFsdWVzKCksZD10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIitYeXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5kYXRhKGgpO3JldHVybiBkLmV4aXQoKS5yZW1vdmUoKSxkLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChYeXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKS5tZXJnZShkKS5zdHlsZSgidGV4dC1hbmNob3IiLG8pLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpLmF0dHJzKG4pLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmZvcm1hdHRlcigpKHQpfSkpLHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithKyIsICIrcysiKSIpLHRoaXMuX3Nob3dBbGxUaWNrTWFya3MoKSx0aGlzLnNob3dFbmRUaWNrTGFiZWxzKCl8fHRoaXMuX2hpZGVFbmRUaWNrTGFiZWxzKCksdGhpcy5faGlkZU92ZXJmbG93aW5nVGlja0xhYmVscygpLHRoaXMuX2hpZGVPdmVybGFwcGluZ1RpY2tMYWJlbHMoKSwiY2VudGVyIiE9PXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nJiZ0aGlzLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsKCksdGhpc30sZS5wcm90b3R5cGUudGlja0xhYmVsUG9zaXRpb249ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc7dmFyIGU9dC50b0xvd2VyQ2FzZSgpO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpe2lmKCJsZWZ0IiE9PWUmJiJjZW50ZXIiIT09ZSYmInJpZ2h0IiE9PWUpdGhyb3cgbmV3IEVycm9yKGUrIiBpcyBub3QgYSB2YWxpZCB0aWNrIGxhYmVsIHBvc2l0aW9uIGZvciBhIGhvcml6b250YWwgTnVtZXJpY0F4aXMiKX1lbHNlIGlmKCJ0b3AiIT09ZSYmImNlbnRlciIhPT1lJiYiYm90dG9tIiE9PWUpdGhyb3cgbmV3IEVycm9yKGUrIiBpcyBub3QgYSB2YWxpZCB0aWNrIGxhYmVsIHBvc2l0aW9uIGZvciBhIHZlcnRpY2FsIE51bWVyaWNBeGlzIik7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPWUsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS51c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbjoodGhpcy5fdXNlc1RleHRXaWR0aEFwcHJveGltYXRpb249dCx0aGlzKX0sZS5wcm90b3R5cGUuX2hpZGVFbmRUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGU9dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrWHl0LkF4aXMuVElDS19MQUJFTF9DTEFTUyk7aWYoMCE9PWUuc2l6ZSgpKXt2YXIgbj1lLm5vZGVzKClbMF07WXl0LkRPTS5jbGllbnRSZWN0SW5zaWRlKG4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdCl8fEd5dC5zZWxlY3Qobikuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKTt2YXIgaT1lLm5vZGVzKClbZS5zaXplKCktMV07WXl0LkRPTS5jbGllbnRSZWN0SW5zaWRlKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdCl8fEd5dC5zZWxlY3QoaSkuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX19LGUucHJvdG90eXBlLl9oaWRlT3ZlcmxhcHBpbmdUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK1h5dC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmZpbHRlcigoZnVuY3Rpb24odCxlKXt2YXIgbj1HeXQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuImluaGVyaXQiPT09bnx8InZpc2libGUiPT09bn0pKSxlPXQubm9kZXMoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSkpLG49MTshdGhpcy5faGFzT3ZlcmxhcFdpdGhJbnRlcnZhbChuLGUpJiZuPGUubGVuZ3RoOyluKz0xO3QuZWFjaCgoZnVuY3Rpb24odCxlKXt2YXIgaT1HeXQuc2VsZWN0KHRoaXMpO2UlbiE9MCYmaS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSkpfSxlLnByb3RvdHlwZS5faGFzT3ZlcmxhcFdpdGhJbnRlcnZhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0iY2VudGVyIj09PXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nP3RoaXMudGlja0xhYmVsUGFkZGluZygpOjMqdGhpcy50aWNrTGFiZWxQYWRkaW5nKCksaT1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIFl5dC5ET00uZXhwYW5kUmVjdCh0LG4pfSkpLHI9MDtyPGkubGVuZ3RoLXQ7cis9dClpZihZeXQuRE9NLmNsaWVudFJlY3RzT3ZlcmxhcChpW3JdLGlbcit0XSkpcmV0dXJuITE7cmV0dXJuITB9LGUucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX21lYXN1cmVyLnJlc2V0KCl9LGV9KShYeXQuQXhpcyk7VXl0Lk51bWVyaWM9JHl0O3ZhciBLeXQ9e30sWnl0PXt9LEp5dD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KEp5dCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFF5dD1GZ3Q7Snl0LmludGVydmFsVGlja0dlbmVyYXRvcj1mdW5jdGlvbiB0dnQodCl7aWYodDw9MCl0aHJvdyBuZXcgRXJyb3IoImludGVydmFsIG11c3QgYmUgcG9zaXRpdmUgbnVtYmVyIik7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPWUuZG9tYWluKCksaT1NYXRoLm1pbihuWzBdLG5bMV0pLHI9TWF0aC5tYXgoblswXSxuWzFdKSxvPU1hdGguY2VpbChpL3QpKnQsYT1NYXRoLmZsb29yKChyLW8pL3QpKzEscz1pJXQ9PTA/W106W2ldLGw9UXl0Lk1hdGgucmFuZ2UoMCxhKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBvK2UqdH0pKSxjPXIldD09MD9bXTpbcl07cmV0dXJuIHMuY29uY2F0KGwpLmNvbmNhdChjKX19LEp5dC5pbnRlZ2VyVGlja0dlbmVyYXRvcj1mdW5jdGlvbiBldnQoKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5kZWZhdWx0VGlja3MoKTtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQlMT09MHx8MD09PW58fG49PT1lLmxlbmd0aC0xfSkpfX07dmFyIG52dD17fSxpdnQ9e307ZnVuY3Rpb24gcnZ0KHQsZSxuKXtyZXR1cm4gbi0obi10KSplfWZ1bmN0aW9uIG92dCh0LGUsbil7cmV0dXJuKHQqZS1uKS8oZS0xKX1mdW5jdGlvbiBhdnQodCxlLG4saSl7dmFyIHI9ZT4xLG89cj9pOm47aWYobnVsbD09bylyZXR1cm4gZTt2YXIgYT10LmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCkscz1NYXRoLmFicyhhWzFdLWFbMF0pO3JldHVybihyP01hdGgubWluOk1hdGgubWF4KShlLG8vcyl9ZnVuY3Rpb24gc3Z0KHQsZSxuLGkscil7aWYoZTw9MSlyZXR1cm57Y2VudGVyUG9pbnQ6bix6b29tQW1vdW50OmV9O2lmKG51bGw9PWkmJm51bGw9PXIpcmV0dXJue2NlbnRlclBvaW50Om4sem9vbUFtb3VudDplfTt2YXIgbz1sdnQodCksYT0oZnVuY3Rpb24gcyh0KXt2YXIgZT10LmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCk7cmV0dXJuIGVbMV08ZVswXX0pKHQpO2k9bnVsbD09aT9hPzEvMDotMS8wOmkscj1udWxsPT1yP2E/LTEvMDoxLzA6cjt2YXIgbD10LmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCksYz1sWzBdLHU9bFsxXSxoPXQuc2NhbGVUcmFuc2Zvcm1hdGlvbihyKSxkPXQuc2NhbGVUcmFuc2Zvcm1hdGlvbih1KSxwPXJ2dChkLGUsbiksZj10LnNjYWxlVHJhbnNmb3JtYXRpb24oaSksbT10LnNjYWxlVHJhbnNmb3JtYXRpb24oYyksZz1ydnQobSxlLG4pLF89TWF0aC5hYnMoaC1mKTtpZihNYXRoLmFicyhwLWcpPl8pe3ZhciB5PShoLWYpLyhkLW0pO3JldHVybiAxIT09eT97Y2VudGVyUG9pbnQ6b3Z0KGQseSxoKSx6b29tQW1vdW50Onl9OntjZW50ZXJQb2ludDpuLHpvb21BbW91bnQ6eX19cmV0dXJuIHA+aCE9bz97Y2VudGVyUG9pbnQ6b3Z0KGQsZSxoKSx6b29tQW1vdW50OmV9Omc8ZiE9bz97Y2VudGVyUG9pbnQ6b3Z0KG0sZSxmKSx6b29tQW1vdW50OmV9OntjZW50ZXJQb2ludDpuLHpvb21BbW91bnQ6ZX19ZnVuY3Rpb24gbHZ0KHQpe3ZhciBlPXQucmFuZ2UoKTtyZXR1cm4gZVsxXTxlWzBdfQovKioKICAgICAqIENvcHlyaWdodCAyMDE3LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoaXZ0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxpdnQuem9vbU91dD1ydnQsaXZ0LmNvbnN0cmFpbmVkWm9vbT1mdW5jdGlvbiBjdnQodCxlLG4saSxyLG8sYSl7cmV0dXJuIHN2dCh0LGU9YXZ0KHQsZSxpLHIpLG4sbyxhKX0saXZ0LmNvbnN0cmFpblpvb21FeHRlbnRzPWF2dCxpdnQuY29uc3RyYWluWm9vbVZhbHVlcz1zdnQsaXZ0LmNvbnN0cmFpbmVkVHJhbnNsYXRpb249ZnVuY3Rpb24gdXZ0KHQsZSxuLGkpe3ZhciByLG89dC5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLGE9b1swXSxzPW9bMV0sbD1sdnQodCk7aWYoZT4wIT09bCl7aWYobnVsbCE9KHI9aSkpe3ZhciBjPXQuc2NhbGVUcmFuc2Zvcm1hdGlvbihzKSx1PXQuc2NhbGVUcmFuc2Zvcm1hdGlvbihyKTtlPShsP01hdGgubWF4Ok1hdGgubWluKShjK2UsdSktY319ZWxzZSBpZihudWxsIT0ocj1uKSl7dmFyIGg9dC5zY2FsZVRyYW5zZm9ybWF0aW9uKGEpLGQ9dC5zY2FsZVRyYW5zZm9ybWF0aW9uKHIpO2U9KGw/TWF0aC5taW46TWF0aC5tYXgpKGgrZSxkKS1ofXJldHVybiBlfTt2YXIgaHZ0PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShodnQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBkdnQ9Rmd0LHB2dD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITAsdGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMSx0aGlzLl91cGRhdGVJZD0wLHRoaXMuX2NhbGxiYWNrcz1uZXcgZHZ0LkNhbGxiYWNrU2V0LHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzPW5ldyBkdnQuU2V0fXJldHVybiB0LnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm5bXX0sdC5wcm90b3R5cGUuX2dldEFsbEluY2x1ZGVkVmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuPVtdO3JldHVybiB0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycy5mb3JFYWNoKChmdW5jdGlvbihpKXt2YXIgcj1pKGUsdCk7bj1uLmNvbmNhdChyKX0pKSxufSx0LnByb3RvdHlwZS5fZ2V0RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuW119LHQucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3MuYWRkKHQpLHRoaXN9LHQucHJvdG90eXBlLm9mZlVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSx0LnByb3RvdHlwZS5fZGlzcGF0Y2hVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVJZCsrLHRoaXMuX2NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMpfSx0LnByb3RvdHlwZS5hdXRvRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9Eb21haW5BdXRvbWF0aWNhbGx5PSEwLHRoaXMuX3NldERvbWFpbih0aGlzLl9nZXRFeHRlbnQoKSksdGhpc30sdC5wcm90b3R5cGUuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZT1mdW5jdGlvbigpe3RoaXMuX2F1dG9Eb21haW5BdXRvbWF0aWNhbGx5JiZ0aGlzLmF1dG9Eb21haW4oKX0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzY2FsZSIpfSx0LnByb3RvdHlwZS50aWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSx0LnByb3RvdHlwZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZ2V0RG9tYWluKCk6KHRoaXMuX2F1dG9Eb21haW5BdXRvbWF0aWNhbGx5PSExLHRoaXMuX3NldERvbWFpbih0KSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2dldERvbWFpbiIpfSx0LnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKHQpe3RoaXMuX2RvbWFpbk1vZGlmaWNhdGlvbkluUHJvZ3Jlc3N8fCh0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzPSEwLHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbih0KSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMuX2RvbWFpbk1vZGlmaWNhdGlvbkluUHJvZ3Jlc3M9ITEpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2JhY2tpbmdEb21haW4iKX0sdC5wcm90b3R5cGUucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZ2V0UmFuZ2UoKToodGhpcy5fc2V0UmFuZ2UodCksdGhpcyl9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2dldFJhbmdlIil9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9zZXRSYW5nZSIpfSx0LnByb3RvdHlwZS5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycy5hZGQodCksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlSW5jbHVkZWRWYWx1ZXNQcm92aWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnMuZGVsZXRlKHQpLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LHQucHJvdG90eXBlLnVwZGF0ZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZUlkfSx0fSkoKTtodnQuU2NhbGU9cHZ0LAovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkobnZ0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZnZ0PXVPLG12dD1FZHQsZ3Z0PWl2dCxfdnQ9Rmd0LHl2dD1bMCwxXSx2dnQ9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX3JhbmdlPVswLDFdLG4uX2QzU2NhbGU9bXZ0LnNjYWxlQmFuZCgpLG4uX2QzU2NhbGUucmFuZ2UoeXZ0KSxuLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGU9bXZ0LnNjYWxlTGluZWFyKCksbi5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbih5dnQpLG4uX2lubmVyUGFkZGluZz1lLl9jb252ZXJ0VG9QbG90dGFibGVJbm5lclBhZGRpbmcoLjMpLG4uX291dGVyUGFkZGluZz1lLl9jb252ZXJ0VG9QbG90dGFibGVPdXRlclBhZGRpbmcoLjUsLjMpLG59cmV0dXJuIGZ2dC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5jbG9uZVdpdGhvdXRQcm92aWRlcnM9ZnVuY3Rpb24oKXt2YXIgdD0obmV3IGUpLmRvbWFpbih0aGlzLmRvbWFpbigpKS5yYW5nZSh0aGlzLnJhbmdlKCkpLmlubmVyUGFkZGluZyh0aGlzLmlubmVyUGFkZGluZygpKS5vdXRlclBhZGRpbmcodGhpcy5vdXRlclBhZGRpbmcoKSk7cmV0dXJuIHQuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbigpKSx0fSxlLnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gX3Z0LkFycmF5LnVuaXEodCl9LGUucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gX3Z0LkFycmF5LnVuaXEodGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKSl9LGUucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUuZG9tYWluLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuaW52ZXJ0UmFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt2b2lkIDA9PT10JiYodD10aGlzLnJhbmdlKCkpO3ZhciBuPXRoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCksaT10aGlzLmludmVydGVkVHJhbnNmb3JtYXRpb24odFswXSkscj10aGlzLmludmVydGVkVHJhbnNmb3JtYXRpb24odFsxXSksbz10aGlzLl9kM1NjYWxlLmRvbWFpbigpLGE9by5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9kM1NjYWxlKHQpK24vMn0pKSxzPW12dC5iaXNlY3QoYSxpKSxsPW12dC5iaXNlY3QoYSxyKTtyZXR1cm4gby5zbGljZShzLGwpfSxlLnByb3RvdHlwZS5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUucmFuZ2UuY2FsbCh0aGlzLGUpfSxlLl9jb252ZXJ0VG9QbG90dGFibGVJbm5lclBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIDEvKDEtdCktMX0sZS5fY29udmVydFRvUGxvdHRhYmxlT3V0ZXJQYWRkaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQvKDEtZSl9LGUucHJvdG90eXBlLl9zZXRCYW5kcz1mdW5jdGlvbigpe3ZhciB0PTEtMS8oMSt0aGlzLmlubmVyUGFkZGluZygpKSxlPXRoaXMub3V0ZXJQYWRkaW5nKCkvKDErdGhpcy5pbm5lclBhZGRpbmcoKSk7dGhpcy5fZDNTY2FsZS5wYWRkaW5nSW5uZXIodCksdGhpcy5fZDNTY2FsZS5wYWRkaW5nT3V0ZXIoZSl9LGUucHJvdG90eXBlLnJhbmdlQmFuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNjYWxlQmFuZCh0aGlzLl9kM1NjYWxlLmJhbmR3aWR0aCgpKX0sZS5wcm90b3R5cGUuc3RlcFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc2NhbGVCYW5kKHRoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkqKDErdGhpcy5pbm5lclBhZGRpbmcoKSkpfSxlLnByb3RvdHlwZS50aWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSxlLnByb3RvdHlwZS5pbm5lclBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5faW5uZXJQYWRkaW5nOih0aGlzLl9pbm5lclBhZGRpbmc9dCx0aGlzLnJhbmdlKHRoaXMucmFuZ2UoKSksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzKX0sZS5wcm90b3R5cGUub3V0ZXJQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX291dGVyUGFkZGluZzoodGhpcy5fb3V0ZXJQYWRkaW5nPXQsdGhpcy5yYW5nZSh0aGlzLnJhbmdlKCkpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcyl9LGUucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2QzU2NhbGUodCkrdGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKS8yO3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUoZSl9LGUucHJvdG90eXBlLnpvb209ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKChmdW5jdGlvbihpKXtyZXR1cm4gbi5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmludmVydChndnQuem9vbU91dChpLHQsZSkpfSkpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSxlLnByb3RvdHlwZS5wYW49ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5yYW5nZSgpLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIGUuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQobit0KX0pKSksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX0sZS5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKHQpfSxlLnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KHQpfSxlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB5dnR9LGUucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4oKX0sZS5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24odCl7dGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbih0KSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSxlLnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSxlLnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHQpLHRoaXMuX3NldEJhbmRzKCksdGhpcyl9LGUucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yYW5nZX0sZS5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX3JhbmdlPXQsdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKHQpLHRoaXMuX3NldEJhbmRzKCl9LGUucHJvdG90eXBlLl9yZXNjYWxlQmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hYnModGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKHQpLXRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZSgwKSl9LGV9KShodnQuU2NhbGUpO252dC5DYXRlZ29yeT12dnQ7dmFyIGJ2dD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi9PYmplY3QuZGVmaW5lUHJvcGVydHkoYnZ0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgeHZ0PXVPLHd2dD1FZHQsU3Z0PUZndCxNdnQ9aHZ0LEV2dD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5jb3VudD0wLHRoaXMudHJhY2tlcj17fX1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0SW5kZXg9ZnVuY3Rpb24odCl7aWYobnVsbCE9dGhpcy50cmFja2VyW3RdKXJldHVybiB0aGlzLnRyYWNrZXJbdF07dmFyIGU9dGhpcy5jb3VudDtyZXR1cm4gdGhpcy50cmFja2VyW3RdPWUsdGhpcy5jb3VudCs9MSxlfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuY291bnQ9MCx0aGlzLnRyYWNrZXI9e319LHR9KSgpLFR2dD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXt2YXIgaSxyPXQuY2FsbCh0aGlzKXx8dGhpcztzd2l0Y2goci5fcmFuZ2VMZW5ndGg9MSxyLl90cmFja2VyPW5ldyBFdnQsbil7Y2FzZSBudWxsOmNhc2Ugdm9pZCAwOm51bGw9PWUuX3Bsb3R0YWJsZUNvbG9yQ2FjaGUmJihlLl9wbG90dGFibGVDb2xvckNhY2hlPWUuX2dldFBsb3R0YWJsZUNvbG9ycygpKSxpPXd2dC5zY2FsZU9yZGluYWwoKS5yYW5nZShlLl9wbG90dGFibGVDb2xvckNhY2hlKTticmVhaztjYXNlIkNhdGVnb3J5MTAiOmNhc2UiY2F0ZWdvcnkxMCI6Y2FzZSIxMCI6aT13dnQuc2NhbGVPcmRpbmFsKHd2dC5zY2hlbWVDYXRlZ29yeTEwKTticmVhaztjYXNlIkNhdGVnb3J5MjAiOmNhc2UiY2F0ZWdvcnkyMCI6Y2FzZSIyMCI6aT13dnQuc2NhbGVPcmRpbmFsKHd2dC5zY2hlbWVDYXRlZ29yeTIwKTticmVhaztjYXNlIkNhdGVnb3J5MjBiIjpjYXNlImNhdGVnb3J5MjBiIjpjYXNlIjIwYiI6aT13dnQuc2NhbGVPcmRpbmFsKHd2dC5zY2hlbWVDYXRlZ29yeTIwYik7YnJlYWs7Y2FzZSJDYXRlZ29yeTIwYyI6Y2FzZSJjYXRlZ29yeTIwYyI6Y2FzZSIyMGMiOmk9d3Z0LnNjYWxlT3JkaW5hbCh3dnQuc2NoZW1lQ2F0ZWdvcnkyMGMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDb2xvclNjYWxlIHR5cGUiKX1yZXR1cm4gci5fZDNTY2FsZT1pLHIuX3JhbmdlTGVuZ3RoPXIuX2QzU2NhbGUucmFuZ2UoKS5sZW5ndGgscn1yZXR1cm4geHZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBTdnQuQXJyYXkudW5pcSh0KX0sZS5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBTdnQuQXJyYXkudW5pcSh0aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpKX0sZS5pbnZhbGlkYXRlQ29sb3JDYWNoZT1mdW5jdGlvbigpe2UuX3Bsb3R0YWJsZUNvbG9yQ2FjaGU9bnVsbH0sZS5fZ2V0UGxvdHRhYmxlQ29sb3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9d3Z0LnNlbGVjdCgiYm9keSIpLmFwcGVuZCgicGxvdHRhYmxlLWNvbG9yLXRlc3RlciIpLG49U3Z0LkNvbG9yLmNvbG9yVGVzdChlLCIiKSxpPTAscj1TdnQuQ29sb3IuY29sb3JUZXN0KGUsInBsb3R0YWJsZS1jb2xvcnMtMCIpO251bGwhPXImJmk8dGhpcy5fTUFYSU1VTV9DT0xPUlNfRlJPTV9DU1MmJihyIT09bnx8ciE9PXRbdC5sZW5ndGgtMV0pOyl0LnB1c2gociksaSsrLHI9U3Z0LkNvbG9yLmNvbG9yVGVzdChlLCJwbG90dGFibGUtY29sb3JzLSIraSk7cmV0dXJuIGUucmVtb3ZlKCksdH0sZS5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fZDNTY2FsZSh0KSxpPXRoaXMuX3RyYWNrZXIuZ2V0SW5kZXgodCkscj1NYXRoLmZsb29yKGkvdGhpcy5fcmFuZ2VMZW5ndGgpO2lmKDA9PT1yKXJldHVybiBuO3ZhciBvPU1hdGgubG9nKHIqZS5fTE9PUF9MSUdIVEVOX0ZBQ1RPUisxKTtyZXR1cm4gU3Z0LkNvbG9yLmxpZ2h0ZW5Db2xvcihuLG8pfSxlLnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSxlLnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHQpLHRoaXMuX3RyYWNrZXIuY2xlYXIoKSx0aGlzKX0sZS5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sZS5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX2QzU2NhbGUucmFuZ2UodCksdGhpcy5fcmFuZ2VMZW5ndGg9dC5sZW5ndGh9LGUuX0xPT1BfTElHSFRFTl9GQUNUT1I9MS42LGUuX01BWElNVU1fQ09MT1JTX0ZST01fQ1NTPTI1NixlfSkoTXZ0LlNjYWxlKTtidnQuQ29sb3I9VHZ0O3ZhciBDdnQ9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovT2JqZWN0LmRlZmluZVByb3BlcnR5KEN2dCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEF2dD11TyxrdnQ9RWR0LEx2dD1GZ3QsUHZ0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3ZvaWQgMD09PW4mJihuPSJsaW5lYXIiKTt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7c3dpdGNoKG4pe2Nhc2UibGluZWFyIjppLl9jb2xvclNjYWxlPWt2dC5zY2FsZUxpbmVhcigpO2JyZWFrO2Nhc2UibG9nIjppLl9jb2xvclNjYWxlPWt2dC5zY2FsZUxvZygpO2JyZWFrO2Nhc2Uic3FydCI6aS5fY29sb3JTY2FsZT1rdnQuc2NhbGVTcXJ0KCk7YnJlYWs7Y2FzZSJwb3ciOmkuX2NvbG9yU2NhbGU9a3Z0LnNjYWxlUG93KCl9aWYobnVsbD09aS5fY29sb3JTY2FsZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gUXVhbnRpdGF0aXZlU2NhbGUgc2NhbGUgdHlwZSAiK24pO3JldHVybiBpLnJhbmdlKGUuUkVEUyksaX1yZXR1cm4gQXZ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBlPWt2dC5leHRlbnQodCk7cmV0dXJuIG51bGw9PWVbMF18fG51bGw9PWVbMV0/W106ZX0sZS5wcm90b3R5cGUuX2QzSW50ZXJwb2xhdGVkU2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29sb3JTY2FsZS5yYW5nZShbMCwxXSkuaW50ZXJwb2xhdGUodGhpcy5faW50ZXJwb2xhdGVDb2xvcnMoKSl9LGUucHJvdG90eXBlLl9pbnRlcnBvbGF0ZUNvbG9ycz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbG9yUmFuZ2U7aWYodC5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIkNvbG9yIHNjYWxlIGFycmF5cyBtdXN0IGhhdmUgYXQgbGVhc3QgdHdvIGVsZW1lbnRzLiIpO3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj0oZT1NYXRoLm1heCgwLE1hdGgubWluKDEsZSkpKSoodC5sZW5ndGgtMSksaT1NYXRoLmZsb29yKG4pLHI9TWF0aC5jZWlsKG4pLG89bi1pO3JldHVybiBrdnQuaW50ZXJwb2xhdGVMYWIodFtpXSx0W3JdKShvKX19fSxlLnByb3RvdHlwZS5fcmVzZXRTY2FsZT1mdW5jdGlvbigpe3RoaXMuX2QzU2NhbGU9dGhpcy5fZDNJbnRlcnBvbGF0ZWRTY2FsZSgpLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCl9LGUucHJvdG90eXBlLmF1dG9Eb21haW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpO3JldHVybiB0Lmxlbmd0aD4wJiZ0aGlzLl9zZXREb21haW4oW0x2dC5NYXRoLm1pbih0LDApLEx2dC5NYXRoLm1heCh0LDApXSksdGhpc30sZS5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUodCl9LGUucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LGUucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4odCksdGhpcyl9LGUucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvclJhbmdlfSxlLnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5fY29sb3JSYW5nZT10LHRoaXMuX3Jlc2V0U2NhbGUoKX0sZS5SRURTPVsiI0ZGRkZGRiIsIiNGRkY2RTEiLCIjRkVGNEMwIiwiI0ZFRDk3NiIsIiNGRUIyNEMiLCIjRkQ4RDNDIiwiI0ZDNEUyQSIsIiNFMzFBMUMiLCIjQjEwMDI2Il0sZS5CTFVFUz1bIiNGRkZGRkYiLCIjQ0NGRkZGIiwiI0E1RkZGRCIsIiM4NUY3RkIiLCIjNkVEM0VGIiwiIzU1QTdFMCIsIiM0MTdGRDAiLCIjMjU0NUQzIiwiIzBCMDJFMSJdLGUuUE9TTkVHPVsiIzBCMDJFMSIsIiMyNTQ1RDMiLCIjNDE3RkQwIiwiIzU1QTdFMCIsIiM2RUQzRUYiLCIjODVGN0ZCIiwiI0E1RkZGRCIsIiNDQ0ZGRkYiLCIjRkZGRkZGIiwiI0ZGRjZFMSIsIiNGRUY0QzAiLCIjRkVEOTc2IiwiI0ZFQjI0QyIsIiNGRDhEM0MiLCIjRkM0RTJBIiwiI0UzMUExQyIsIiNCMTAwMjYiXSxlfSkoaHZ0LlNjYWxlKTtDdnQuSW50ZXJwb2xhdGVkQ29sb3I9UHZ0O3ZhciBOdnQ9e30sSXZ0PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoSXZ0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUnZ0PXVPLE92dD1FZHQsenZ0PWl2dCxEdnQ9Rmd0LEJ2dD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5fdGlja0dlbmVyYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gdC5kZWZhdWx0VGlja3MoKX0sZS5fcGFkUHJvcG9ydGlvbj0uMDUsZS5fc25hcHBpbmdEb21haW5FbmFibGVkPSEwLGUuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzPW5ldyBEdnQuU2V0LGV9cmV0dXJuIFJ2dC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5hdXRvRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvbWFpbk1pbj1udWxsLHRoaXMuX2RvbWFpbk1heD1udWxsLHQucHJvdG90eXBlLmF1dG9Eb21haW4uY2FsbCh0aGlzKSx0aGlzfSxlLnByb3RvdHlwZS5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlPWZ1bmN0aW9uKCl7aWYobnVsbD09dGhpcy5fZG9tYWluTWlufHxudWxsPT10aGlzLl9kb21haW5NYXgpe3ZhciBlPXRoaXMuX2dldEV4dGVudCgpO2lmKG51bGwhPXRoaXMuX2RvbWFpbk1pbil7dmFyIG49ZVsxXTtyZXR1cm4gdGhpcy5fZG9tYWluTWluPj1uJiYobj10aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihbdGhpcy5fZG9tYWluTWluLHRoaXMuX2RvbWFpbk1pbl0pWzFdKSx2b2lkIHRoaXMuX3NldERvbWFpbihbdGhpcy5fZG9tYWluTWluLG5dKX1pZihudWxsIT10aGlzLl9kb21haW5NYXgpe3ZhciBpPWVbMF07cmV0dXJuIHRoaXMuX2RvbWFpbk1heDw9aSYmKGk9dGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4oW3RoaXMuX2RvbWFpbk1heCx0aGlzLl9kb21haW5NYXhdKVswXSksdm9pZCB0aGlzLl9zZXREb21haW4oW2ksdGhpcy5fZG9tYWluTWF4XSl9dC5wcm90b3R5cGUuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZS5jYWxsKHRoaXMpfWVsc2UgdGhpcy5fc2V0RG9tYWluKFt0aGlzLl9kb21haW5NaW4sdGhpcy5fZG9tYWluTWF4XSl9LGUucHJvdG90eXBlLl9nZXRVbmJvdW5kZWRFeHRlbnQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBlPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKHQpLG49dGhpcy5fZGVmYXVsdEV4dGVudCgpO2lmKDAhPT1lLmxlbmd0aCl7dmFyIGk9W0R2dC5NYXRoLm1pbihlLG5bMF0pLER2dC5NYXRoLm1heChlLG5bMV0pXTtuPXRoaXMuX3BhZERvbWFpbihpKX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFVuYm91bmRlZEV4dGVudCgpO3JldHVybiBudWxsIT10aGlzLl9kb21haW5NaW4mJih0WzBdPXRoaXMuX2RvbWFpbk1pbiksbnVsbCE9dGhpcy5fZG9tYWluTWF4JiYodFsxXT10aGlzLl9kb21haW5NYXgpLHR9LGUucHJvdG90eXBlLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzLmFkZCh0KSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSxlLnByb3RvdHlwZS5yZW1vdmVQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycy5kZWxldGUodCksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sZS5wcm90b3R5cGUucGFkUHJvcG9ydGlvbj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9wYWRQcm9wb3J0aW9uO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoInBhZFByb3BvcnRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTtyZXR1cm4gdGhpcy5fcGFkUHJvcG9ydGlvbj10LHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LGUucHJvdG90eXBlLl9wYWREb21haW49ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0WzBdLnZhbHVlT2YoKT09PXRbMV0udmFsdWVPZigpKXJldHVybiB0aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbih0KTtpZigwPT09dGhpcy5fcGFkUHJvcG9ydGlvbilyZXR1cm4gdDt2YXIgbj10aGlzLl9wYWRQcm9wb3J0aW9uLzIsaT10WzBdLHI9dFsxXSxvPSExLGE9ITE7dGhpcy5fcGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dChlKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnZhbHVlT2YoKT09PWkudmFsdWVPZigpJiYobz0hMCksdC52YWx1ZU9mKCk9PT1yLnZhbHVlT2YoKSYmKGE9ITApfSkpfSkpO3ZhciBzPXRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpO3RoaXMuX2JhY2tpbmdTY2FsZURvbWFpbih0KTt2YXIgbD1vP2k6dGhpcy5pbnZlcnQodGhpcy5zY2FsZShpKS0odGhpcy5zY2FsZShyKS10aGlzLnNjYWxlKGkpKSpuKSxjPWE/cjp0aGlzLmludmVydCh0aGlzLnNjYWxlKHIpKyh0aGlzLnNjYWxlKHIpLXRoaXMuc2NhbGUoaSkpKm4pO3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4ocyksdGhpcy5fc25hcHBpbmdEb21haW5FbmFibGVkP3RoaXMuX25pY2VEb21haW4oW2wsY10pOltsLGNdfSxlLnByb3RvdHlwZS5zbmFwcGluZ0RvbWFpbkVuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fc25hcHBpbmdEb21haW5FbmFibGVkOih0aGlzLl9zbmFwcGluZ0RvbWFpbkVuYWJsZWQ9dCx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzKX0sZS5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxlLnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBpbnZlcnQiKX0sZS5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiYodGhpcy5fZG9tYWluTWluPWVbMF0sdGhpcy5fZG9tYWluTWF4PWVbMV0pLHQucHJvdG90eXBlLmRvbWFpbi5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLmRvbWFpbk1pbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLmRvbWFpbigpWzBdOih0aGlzLl9kb21haW5NaW49dCx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzKX0sZS5wcm90b3R5cGUuZG9tYWluTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuZG9tYWluKClbMV06KHRoaXMuX2RvbWFpbk1heD10LHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXMpfSxlLnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1PdnQuZXh0ZW50KHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gRHZ0Lk1hdGguaXNWYWxpZE51bWJlcigrdCl9KSkpO3JldHVybiBudWxsPT1lWzBdfHxudWxsPT1lWzFdP1tdOmV9LGUucHJvdG90eXBlLnpvb209ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3RoaXMuZG9tYWluKHRoaXMucmFuZ2UoKS5tYXAoKGZ1bmN0aW9uKGkpe3JldHVybiBuLmludmVydCh6dnQuem9vbU91dChpLHQsZSkpfSkpKX0sZS5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5kb21haW4odGhpcy5yYW5nZSgpLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIGUuaW52ZXJ0KG4rdCl9KSkpfSxlLnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2NhbGVUcmFuc2Zvcm1hdGlvbiIpfSxlLnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbiIpfSxlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQiKX0sZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIGdldFRyYW5zZm9ybWF0aW9uRG9tYWluIil9LGUucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2V0VHJhbnNmb3JtYXRpb25Eb21haW4iKX0sZS5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbihlKXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gRHZ0Lk1hdGguaXNOYU4odCl8fHQ9PT0xLzB8fHQ9PT0tMS8wfTtuKGVbMF0pfHxuKGVbMV0pP0R2dC5XaW5kb3cud2FybigiV2FybmluZzogUXVhbnRpdGF0aXZlU2NhbGVzIGNhbm5vdCB0YWtlIE5hTiBvciBJbmZpbml0eSBhcyBhIGRvbWFpbiB2YWx1ZS4gSWdub3JpbmcuIik6dC5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2dldERlZmF1bHRUaWNrcyIpfSxlLnByb3RvdHlwZS50aWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90aWNrR2VuZXJhdG9yKHRoaXMpfSxlLnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbih0LGUpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX25pY2VEb21haW4iKX0sZS5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9kZWZhdWx0RXh0ZW50Iil9LGUucHJvdG90eXBlLnRpY2tHZW5lcmF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fdGlja0dlbmVyYXRvcjoodGhpcy5fdGlja0dlbmVyYXRvcj10LHRoaXMpfSxlLl9ERUZBVUxUX05VTV9USUNLUz0xMCxlfSkoaHZ0LlNjYWxlKTtJdnQuUXVhbnRpdGF0aXZlU2NhbGU9QnZ0LAovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoTnZ0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSHZ0PXVPLEZ2dD1FZHQsVnZ0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLl9kM1NjYWxlPUZ2dC5zY2FsZUxpbmVhcigpLGV9cmV0dXJuIEh2dC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3JldHVyblswLDFdfSxlLnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09PT10WzFdP1t0WzBdLTEsdFsxXSsxXTp0fSxlLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZDNTY2FsZSh0KX0sZS5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zY2FsZSh0KX0sZS5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnZlcnQodCl9LGUucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9LGUucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LGUucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHQpe3RoaXMuZG9tYWluKHQpfSxlLnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSxlLnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHQpLHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5yYW5nZSgpfSxlLnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5fZDNTY2FsZS5yYW5nZSh0KX0sZS5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kM1NjYWxlLmludmVydCh0KX0sZS5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUudGlja3MoZS5fREVGQVVMVF9OVU1fVElDS1MpfSxlLnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9kM1NjYWxlLmNvcHkoKS5kb21haW4odCkubmljZShlKS5kb21haW4oKX0sZX0pKEl2dC5RdWFudGl0YXRpdmVTY2FsZSk7TnZ0LkxpbmVhcj1WdnQ7dmFyIFV2dD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi9PYmplY3QuZGVmaW5lUHJvcGVydHkoVXZ0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIganZ0PXVPLEd2dD1FZHQsV3Z0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPTEwKTt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2QzU2NhbGU9R3Z0LnNjYWxlTG9nKCkuYmFzZShlKSxuLl9zZXREb21haW4obi5fZGVmYXVsdEV4dGVudCgpKSxufXJldHVybiBqdnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMSx0aGlzLl9kM1NjYWxlLmJhc2UoKV19LGUucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PXRbMV0/W3RbMF0vdGhpcy5fZDNTY2FsZS5iYXNlKCksdFsxXSp0aGlzLl9kM1NjYWxlLmJhc2UoKV06dH0sZS5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUodCl9LGUucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2NhbGUodCl9LGUucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52ZXJ0KHQpfSxlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfSxlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSxlLnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbih0KXt0aGlzLmRvbWFpbih0KX0sZS5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbih0KSx0aGlzKX0sZS5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sZS5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX2QzU2NhbGUucmFuZ2UodCl9LGUucHJvdG90eXBlLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQodCl9LGUucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKGUuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sZS5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5jb3B5KCkuZG9tYWluKHQpLm5pY2UoKS5kb21haW4oKX0sZX0pKEl2dC5RdWFudGl0YXRpdmVTY2FsZSk7VXZ0LkxvZz1XdnQ7dmFyIHF2dD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi9PYmplY3QuZGVmaW5lUHJvcGVydHkocXZ0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWXZ0PXVPLFh2dD1FZHQsJHZ0PUZndCxLdnQ9Wnl0LFp2dD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT0xMCk7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX2xvZ1RpY2tHZW5lcmF0b3I9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCxlLG4pe3JldHVyblt0LGUsbl0uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpWzFdfSxpPSR2dC5NYXRoLm1pbihuLl91bnRyYW5zZm9ybWVkRG9tYWluLDApLHI9JHZ0Lk1hdGgubWF4KG4uX3VudHJhbnNmb3JtZWREb21haW4sMCksbz1pLGE9ZShpLHIsLW4uX3Bpdm90KSxzPWUoaSxyLG4uX3Bpdm90KSxsPXIsYz1uLl9sb2dUaWNrcygtYSwtbykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4tdH0pKS5yZXZlcnNlKCksdT1uLl9sb2dUaWNrcyhzLGwpLGg9TWF0aC5tYXgoaSwtbi5fcGl2b3QpLGQ9TWF0aC5taW4ocixuLl9waXZvdCkscD1YdnQuc2NhbGVMaW5lYXIoKS5kb21haW4oW2gsZF0pLnRpY2tzKG4uX2hvd01hbnlUaWNrcyhoLGQpKSxmPWMuY29uY2F0KHApLmNvbmNhdCh1KTtyZXR1cm4gZi5sZW5ndGg8PTEmJihmPVh2dC5zY2FsZUxpbmVhcigpLmRvbWFpbihbaSxyXSkudGlja3MoS3Z0Lk1vZGlmaWVkTG9nLl9ERUZBVUxUX05VTV9USUNLUykpLGZ9LG4uX2QzU2NhbGU9WHZ0LnNjYWxlTGluZWFyKCksbi5fYmFzZT1lLG4uX3Bpdm90PW4uX2Jhc2Usbi5fc2V0RG9tYWluKG4uX2RlZmF1bHRFeHRlbnQoKSksbi50aWNrR2VuZXJhdG9yKG4uX2xvZ1RpY2tHZW5lcmF0b3IpLGU8PTEpdGhyb3cgbmV3IEVycm9yKCJNb2RpZmllZExvZ1NjYWxlOiBUaGUgYmFzZSBtdXN0IGJlID4gMSIpO3JldHVybiBufXJldHVybiBZdnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2FkanVzdGVkTG9nPWZ1bmN0aW9uKHQpe3ZhciBlPXQ8MD8tMToxO3JldHVybih0Kj1lKTx0aGlzLl9waXZvdCYmKHQrPSh0aGlzLl9waXZvdC10KS90aGlzLl9waXZvdCksKHQ9TWF0aC5sb2codCkvTWF0aC5sb2codGhpcy5fYmFzZSkpKmV9LGUucHJvdG90eXBlLl9pbnZlcnRlZEFkanVzdGVkTG9nPWZ1bmN0aW9uKHQpe3ZhciBlPXQ8MD8tMToxO3JldHVybiB0Kj1lLCh0PU1hdGgucG93KHRoaXMuX2Jhc2UsdCkpPHRoaXMuX3Bpdm90JiYodD10aGlzLl9waXZvdCoodC0xKS8odGhpcy5fcGl2b3QtMSkpLHQqZX0sZS5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUodGhpcy5fYWRqdXN0ZWRMb2codCkpfSxlLnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludmVydGVkQWRqdXN0ZWRMb2codGhpcy5fZDNTY2FsZS5pbnZlcnQodCkpfSxlLnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNjYWxlKHQpfSxlLnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludmVydCh0KX0sZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKX0sZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sZS5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24odCl7dGhpcy5kb21haW4odCl9LGUucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbn0sZS5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbihlKXt0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluPWU7dmFyIG49W3RoaXMuX2FkanVzdGVkTG9nKGVbMF0pLHRoaXMuX2FkanVzdGVkTG9nKGVbMV0pXTt0LnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxuKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbih0KSx0aGlzKX0sZS5wcm90b3R5cGUuX2xvZ1RpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPXRoaXMuX2hvd01hbnlUaWNrcyh0LGUpO2lmKDA9PT1pKXJldHVybltdO3ZhciByPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5sb2codGhpcy5fYmFzZSkpLG89TWF0aC5jZWlsKE1hdGgubG9nKGUpL01hdGgubG9nKHRoaXMuX2Jhc2UpKSxhPVh2dC5yYW5nZShvLHIsLU1hdGguY2VpbCgoby1yKS9pKSkscz1YdnQucmFuZ2UodGhpcy5fYmFzZSwxLC0odGhpcy5fYmFzZS0xKSkubWFwKE1hdGguZmxvb3IpLGw9JHZ0LkFycmF5LnVuaXEocyksYz1hLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGwubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3cobi5fYmFzZSx0LTEpKmV9KSl9KSk7cmV0dXJuICR2dC5BcnJheS5mbGF0dGVuKGMpLmZpbHRlcigoZnVuY3Rpb24obil7cmV0dXJuIHQ8PW4mJm48PWV9KSkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpfSxlLnByb3RvdHlwZS5faG93TWFueVRpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fYWRqdXN0ZWRMb2coJHZ0Lk1hdGgubWluKHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLGk9dGhpcy5fYWRqdXN0ZWRMb2coJHZ0Lk1hdGgubWF4KHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLHI9dGhpcy5fYWRqdXN0ZWRMb2codCksbz10aGlzLl9hZGp1c3RlZExvZyhlKTtyZXR1cm4gTWF0aC5jZWlsKChvLXIpLyhpLW4pKkt2dC5Nb2RpZmllZExvZy5fREVGQVVMVF9OVU1fVElDS1MpfSxlLnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbih0LGUpe3JldHVybiB0fSxlLnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3JldHVyblswLHRoaXMuX2Jhc2VdfSxlLnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24odCl7aWYodFswXT09PXRbMV0pe3ZhciBlPXRbMF07cmV0dXJuIGU+MD9bZS90aGlzLl9iYXNlLGUqdGhpcy5fYmFzZV06MD09PWU/Wy10aGlzLl9iYXNlLHRoaXMuX2Jhc2VdOltlKnRoaXMuX2Jhc2UsZS90aGlzLl9iYXNlXX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sZS5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX2QzU2NhbGUucmFuZ2UodCl9LGUucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKEt2dC5Nb2RpZmllZExvZy5fREVGQVVMVF9OVU1fVElDS1MpfSxlfSkoSXZ0LlF1YW50aXRhdGl2ZVNjYWxlKTtxdnQuTW9kaWZpZWRMb2c9WnZ0O3ZhciBKdnQ9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovT2JqZWN0LmRlZmluZVByb3BlcnR5KEp2dCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFF2dD11Tyx0YnQ9RWR0LGVidD1LeXQsbmJ0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLl9kM1NjYWxlPXRidC5zY2FsZVRpbWUoKSxlLmF1dG9Eb21haW4oKSxlfXJldHVybiBRdnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUudGlja0ludGVydmFsPWZ1bmN0aW9uKHQsbixpKXt2b2lkIDA9PT1uJiYobj0xKSx2b2lkIDA9PT1pJiYoaT0hMSk7dmFyIHI9dGJ0LnNjYWxlVGltZSgpLG89ZS50aW1lSW50ZXJ2YWxUb0QzVGltZSh0LGkpLmV2ZXJ5KG4pO3JldHVybiByLmRvbWFpbih0aGlzLmRvbWFpbigpKSxyLnJhbmdlKHRoaXMucmFuZ2UoKSksci50aWNrcyhvKX0sZS5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbihlKXtpZihlWzFdPGVbMF0pdGhyb3cgbmV3IEVycm9yKCJTY2FsZS5UaW1lIGRvbWFpbiB2YWx1ZXMgbXVzdCBiZSBpbiBjaHJvbm9sb2dpY2FsIG9yZGVyIik7cmV0dXJuIHQucHJvdG90eXBlLl9zZXREb21haW4uY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3JldHVybltuZXcgRGF0ZSgiMTk3MC0wMS0wMSIpLG5ldyBEYXRlKCIxOTcwLTAxLTAyIildfSxlLnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24odCl7dmFyIGU9dFswXS5nZXRUaW1lKCksbj10WzFdLmdldFRpbWUoKTtpZihlPT09bil7dmFyIGk9bmV3IERhdGUoZSk7aS5zZXREYXRlKGkuZ2V0RGF0ZSgpLTEpO3ZhciByPW5ldyBEYXRlKG4pO3JldHVybiByLnNldERhdGUoci5nZXREYXRlKCkrMSksW2kscl19cmV0dXJuIHR9LGUucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kM1NjYWxlKHQpfSxlLnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNjYWxlKG5ldyBEYXRlKHQpKX0sZS5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnZlcnQodCkuZ2V0VGltZSgpfSxlLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCk7cmV0dXJuW3RbMF0udmFsdWVPZigpLHRbMV0udmFsdWVPZigpXX0sZS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRvbWFpbigpO3JldHVyblt0WzBdLnZhbHVlT2YoKSx0WzFdLnZhbHVlT2YoKV19LGUucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMV07dGhpcy5kb21haW4oW25ldyBEYXRlKHRbMF0pLG5ldyBEYXRlKGUpXSl9LGUucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LGUucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4odCksdGhpcyl9LGUucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LGUucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9kM1NjYWxlLnJhbmdlKHQpfSxlLnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHQpfSxlLnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcyhlLl9ERUZBVUxUX05VTV9USUNLUyl9LGUucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kM1NjYWxlLmNvcHkoKS5kb21haW4odCkubmljZSgpLmRvbWFpbigpfSxlLnRpbWVJbnRlcnZhbFRvRDNUaW1lPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQpe2Nhc2UgZWJ0LlRpbWVJbnRlcnZhbC5zZWNvbmQ6cmV0dXJuIGU/dGJ0LnV0Y1NlY29uZDp0YnQudGltZVNlY29uZDtjYXNlIGVidC5UaW1lSW50ZXJ2YWwubWludXRlOnJldHVybiBlP3RidC51dGNNaW51dGU6dGJ0LnRpbWVNaW51dGU7Y2FzZSBlYnQuVGltZUludGVydmFsLmhvdXI6cmV0dXJuIGU/dGJ0LnV0Y0hvdXI6dGJ0LnRpbWVIb3VyO2Nhc2UgZWJ0LlRpbWVJbnRlcnZhbC5kYXk6cmV0dXJuIGU/dGJ0LnV0Y0RheTp0YnQudGltZURheTtjYXNlIGVidC5UaW1lSW50ZXJ2YWwud2VlazpyZXR1cm4gZT90YnQudXRjV2Vlazp0YnQudGltZVdlZWs7Y2FzZSBlYnQuVGltZUludGVydmFsLm1vbnRoOnJldHVybiBlP3RidC51dGNNb250aDp0YnQudGltZU1vbnRoO2Nhc2UgZWJ0LlRpbWVJbnRlcnZhbC55ZWFyOnJldHVybiBlP3RidC51dGNZZWFyOnRidC50aW1lWWVhcjtkZWZhdWx0OnRocm93IEVycm9yKCJUaW1lSW50ZXJ2YWwgc3BlY2lmaWVkIGRvZXMgbm90IGV4aXN0OiAiK3QpfX0sZX0pKEl2dC5RdWFudGl0YXRpdmVTY2FsZSk7SnZ0LlRpbWU9bmJ0LChmdW5jdGlvbih0KXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlPXVPO3QuVGlja0dlbmVyYXRvcnM9Snl0LGUuX19leHBvcnRTdGFyKG52dCx0KSxlLl9fZXhwb3J0U3RhcihidnQsdCksZS5fX2V4cG9ydFN0YXIoQ3Z0LHQpLGUuX19leHBvcnRTdGFyKE52dCx0KSxlLl9fZXhwb3J0U3RhcihVdnQsdCksZS5fX2V4cG9ydFN0YXIocXZ0LHQpLGUuX19leHBvcnRTdGFyKEp2dCx0KTt2YXIgbj1udnQsaT1JdnQ7dC5pc1RyYW5zZm9ybWFibGU9ZnVuY3Rpb24gcih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGkuUXVhbnRpdGF0aXZlU2NhbGV8fHQgaW5zdGFuY2VvZiBuLkNhdGVnb3J5fX0pKFp5dCksKGZ1bmN0aW9uKHQpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGU9dU8sbj1FZHQsaT1JbXQscj1neXQsbz1aeXQsYT1GZ3Qscz1TbXQsbD1teXQ7dC5UaW1lSW50ZXJ2YWw9cy5tYWtlRW51bShbInNlY29uZCIsIm1pbnV0ZSIsImhvdXIiLCJkYXkiLCJ3ZWVrIiwibW9udGgiLCJ5ZWFyIl0pLHQuVGltZUF4aXNPcmllbnRhdGlvbj1zLm1ha2VFbnVtKFsidG9wIiwiYm90dG9tIl0pLHQuVGllckxhYmVsUG9zaXRpb249cy5tYWtlRW51bShbImJldHdlZW4iLCJjZW50ZXIiXSk7dmFyIGMsdT0oZnVuY3Rpb24ocyl7ZnVuY3Rpb24gdSh0LGUsbil7dmFyIGk9cy5jYWxsKHRoaXMsdCxlKXx8dGhpcztyZXR1cm4gaS5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uPW51bGwsaS5fdGllckxhYmVsUG9zaXRpb25zPVtdLGkuX3VzZVVUQz1uLGkuYWRkQ2xhc3MoInRpbWUtYXhpcyIpLGkudGlja0xhYmVsUGFkZGluZyg1KSxpLmF4aXNDb25maWd1cmF0aW9ucyh1Ll9ERUZBVUxUX1RJTUVfQVhJU19DT05GSUdVUkFUSU9OUyhpLl91c2VVVEMpKSxpLmFubm90YXRpb25Gb3JtYXR0ZXIoci50aW1lKCIlYSAlYiAlZCwgJVkiLGkuX3VzZVVUQykpLGl9cmV0dXJuIGUuX19leHRlbmRzKHUscyksdS5wcm90b3R5cGUudGllckxhYmVsUG9zaXRpb25zPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9ucztpZighdC5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuImJldHdlZW4iPT09dC50b0xvd2VyQ2FzZSgpfHwiY2VudGVyIj09PXQudG9Mb3dlckNhc2UoKX0pKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHBvc2l0aW9uIGZvciB0aWVyIGxhYmVscyIpO3JldHVybiB0aGlzLl90aWVyTGFiZWxQb3NpdGlvbnM9dCx0aGlzLnJlZHJhdygpLHRoaXN9LHUucHJvdG90eXBlLm1heFRpbWVJbnRlcnZhbFByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb246KHRoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbj10LHRoaXMucmVkcmF3KCksdGhpcyl9LHUucHJvdG90eXBlLmN1cnJlbnRBeGlzQ29uZmlndXJhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnNbdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleF19LHUucHJvdG90eXBlLmF4aXNDb25maWd1cmF0aW9ucz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnM7dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zPXQsdGhpcy5fbnVtVGllcnM9YS5NYXRoLm1heCh0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9KSksMCksdGhpcy5faXNBbmNob3JlZCYmdGhpcy5fc2V0dXBEb21FbGVtZW50cygpO2Zvcih2YXIgZT10aGlzLnRpZXJMYWJlbFBvc2l0aW9ucygpLG49W10saT0wO2k8dGhpcy5fbnVtVGllcnM7aSsrKW4ucHVzaChlW2ldfHwiYmV0d2VlbiIpO3JldHVybiB0aGlzLnRpZXJMYWJlbFBvc2l0aW9ucyhuKSx0aGlzLnJlZHJhdygpLHRoaXN9LHUucHJvdG90eXBlLl9nZXRNb3N0UHJlY2lzZUNvbmZpZ3VyYXRpb25JbmRleD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMubGVuZ3RoO3JldHVybiB0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24obixpKXtpPGUmJm4uZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9jaGVja1RpbWVBeGlzVGllckNvbmZpZ3VyYXRpb24oZSl9KSkmJihlPWkpfSkpLGU9PT10aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMubGVuZ3RoJiYoYS5XaW5kb3cud2Fybigiem9vbWVkIG91dCB0b28gZmFyOiBjb3VsZCBub3QgZmluZCBzdWl0YWJsZSBpbnRlcnZhbCB0byBkaXNwbGF5IGxhYmVscyIpLC0tZSksZX0sdS5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24odCl7aWYodCYmKCJyaWdodCI9PT10LnRvTG93ZXJDYXNlKCl8fCJsZWZ0Ij09PXQudG9Mb3dlckNhc2UoKSkpdGhyb3cgbmV3IEVycm9yKHQrIiBpcyBub3QgYSBzdXBwb3J0ZWQgb3JpZW50YXRpb24gZm9yIFRpbWVBeGlzIC0gb25seSBob3Jpem9udGFsIG9yaWVudGF0aW9ucyBhcmUgc3VwcG9ydGVkIik7cmV0dXJuIHMucHJvdG90eXBlLm9yaWVudGF0aW9uLmNhbGwodGhpcyx0KX0sdS5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3RoaXMuX3RpZXJIZWlnaHRzPVtdO2Zvcih2YXIgZT0wO2U8dGhpcy5fbnVtVGllcnM7ZSsrKXRoaXMuX3RpZXJIZWlnaHRzLnB1c2godCt0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSsoImJldHdlZW4iPT09dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW2VdPzA6dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkpKTtyZXR1cm4gbi5zdW0odGhpcy5fdGllckhlaWdodHMpfSx1LnByb3RvdHlwZS5fZ2V0SW50ZXJ2YWxMZW5ndGg9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc2NhbGUuZG9tYWluKClbMF0sbj1vLlRpbWUudGltZUludGVydmFsVG9EM1RpbWUodC5pbnRlcnZhbCx0aGlzLl91c2VVVEMpLm9mZnNldChlLHQuc3RlcCk7cmV0dXJuIG4+dGhpcy5fc2NhbGUuZG9tYWluKClbMV0/dGhpcy53aWR0aCgpOk1hdGguYWJzKHRoaXMuX3NjYWxlLnNjYWxlKG4pLXRoaXMuX3NjYWxlLnNjYWxlKGUpKX0sdS5wcm90b3R5cGUuX21heFdpZHRoRm9ySW50ZXJ2YWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21lYXN1cmVyLm1lYXN1cmUodC5mb3JtYXR0ZXIodS5fTE9OR19EQVRFKSkud2lkdGh9LHUucHJvdG90eXBlLl9jaGVja1RpbWVBeGlzVGllckNvbmZpZ3VyYXRpb249ZnVuY3Rpb24odCl7aWYobnVsbCE9dGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uKXt2YXIgZT11Ll9TT1JURURfVElNRV9JTlRFUlZBTF9JTkRFWFt0aGlzLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb25dLG49dS5fU09SVEVEX1RJTUVfSU5URVJWQUxfSU5ERVhbdC5pbnRlcnZhbF07aWYobnVsbCE9ZSYmbnVsbCE9biYmbjxlKXJldHVybiExfXZhciBpPXRoaXMuX21heFdpZHRoRm9ySW50ZXJ2YWwodCkrMip0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTtyZXR1cm4gTWF0aC5taW4odGhpcy5fZ2V0SW50ZXJ2YWxMZW5ndGgodCksdGhpcy53aWR0aCgpKT49aX0sdS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj1zLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlci5jYWxsKHRoaXMsdCxlKSxpPXRoaXMuX3RpZXJIZWlnaHRzLnJlZHVjZSgoZnVuY3Rpb24odCxlLGkscil7cmV0dXJuIHQrZT5uLmhlaWdodD90OnQrZX0pKSxyPXRoaXMubWFyZ2luKCkrKHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCk/dGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCkqdGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKTowKTtyZXR1cm4gbi5oZWlnaHQ9TWF0aC5taW4obi5oZWlnaHQsaStyKSxufSx1LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtzLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9zZXR1cERvbUVsZW1lbnRzKCl9LHUucHJvdG90eXBlLl9zZXR1cERvbUVsZW1lbnRzPWZ1bmN0aW9uKCl7dGhpcy5jb250ZW50KCkuc2VsZWN0QWxsKCIuIit1LlRJTUVfQVhJU19USUVSX0NMQVNTKS5yZW1vdmUoKSx0aGlzLl90aWVyTGFiZWxDb250YWluZXJzPVtdLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVycz1bXSx0aGlzLl90aWVyQmFzZWxpbmVzPVtdLHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5yZW1vdmUoKSx0aGlzLl9iYXNlbGluZS5yZW1vdmUoKTtmb3IodmFyIHQ9MDt0PHRoaXMuX251bVRpZXJzOysrdCl7dmFyIGU9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh1LlRJTUVfQVhJU19USUVSX0NMQVNTLCEwKTt0aGlzLl90aWVyTGFiZWxDb250YWluZXJzLnB1c2goZS5hcHBlbmQoImciKS5jbGFzc2VkKGwuQXhpcy5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCkpLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVycy5wdXNoKGUuYXBwZW5kKCJnIikuY2xhc3NlZChsLkF4aXMuVElDS19NQVJLX0NMQVNTKyItY29udGFpbmVyIiwhMCkpLHRoaXMuX3RpZXJCYXNlbGluZXMucHVzaChlLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCkpfXZhciBuPW5ldyBpLlN2Z0NvbnRleHQodGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1swXS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBpLkNhY2hlTWVhc3VyZXIobil9LHUucHJvdG90eXBlLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3NjYWxlLnRpY2tJbnRlcnZhbCh0LmludGVydmFsLHQuc3RlcCx0aGlzLl91c2VVVEMpfSx1LnByb3RvdHlwZS5fZ2V0VGlja1ZhbHVlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uc1t0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4XS5yZWR1Y2UoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGUuY29uY2F0KHQuX2dldFRpY2tJbnRlcnZhbFZhbHVlcyhuKSl9KSxbXSl9LHUucHJvdG90eXBlLl9jbGVhblRpZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDx0aGlzLl90aWVyTGFiZWxDb250YWluZXJzLmxlbmd0aDt0KyspdGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1t0XS5zZWxlY3RBbGwoIi4iK2wuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5yZW1vdmUoKSx0aGlzLl90aWVyTWFya0NvbnRhaW5lcnNbdF0uc2VsZWN0QWxsKCIuIitsLkF4aXMuVElDS19NQVJLX0NMQVNTKS5yZW1vdmUoKSx0aGlzLl90aWVyQmFzZWxpbmVzW3RdLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9LHUucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzRm9yQ29uZmlndXJhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zY2FsZS50aWNrSW50ZXJ2YWwodC5pbnRlcnZhbCx0LnN0ZXAsdGhpcy5fdXNlVVRDKSxuPXRoaXMuX3NjYWxlLmRvbWFpbigpLGk9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlT2YoKX0pKTtyZXR1cm4tMT09PWkuaW5kZXhPZihuWzBdLnZhbHVlT2YoKSkmJmUudW5zaGlmdChuWzBdKSwtMT09PWkuaW5kZXhPZihuWzFdLnZhbHVlT2YoKSkmJmUucHVzaChuWzFdKSxlfSx1LnByb3RvdHlwZS5fcmVuZGVyVGllckxhYmVscz1mdW5jdGlvbih0LGUsaSl7dmFyIHI9dGhpcyxvPXRoaXMuX2dldFRpY2tWYWx1ZXNGb3JDb25maWd1cmF0aW9uKGUpLGE9W107ImJldHdlZW4iPT09dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW2ldJiYxPT09ZS5zdGVwP28ubWFwKChmdW5jdGlvbih0LGUpe2UrMT49by5sZW5ndGh8fGEucHVzaChuZXcgRGF0ZSgob1tlKzFdLnZhbHVlT2YoKS1vW2VdLnZhbHVlT2YoKSkvMitvW2VdLnZhbHVlT2YoKSkpfSkpOmE9bzt2YXIgcz10LnNlbGVjdEFsbCgiLiIrbC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEoYSwoZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0LnZhbHVlT2YoKSl9KSksYz1zLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChsLkF4aXMuVElDS19MQUJFTF9DTEFTUywhMCk7Yy5hcHBlbmQoInRleHQiKTt2YXIgdSxoPSJjZW50ZXIiPT09dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW2ldfHwxPT09ZS5zdGVwPzA6dGhpcy50aWNrTGFiZWxQYWRkaW5nKCk7dT0iYm90dG9tIj09PXRoaXMub3JpZW50YXRpb24oKT9uLnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkrMSkpLXRoaXMudGlja0xhYmVsUGFkZGluZygpOiJjZW50ZXIiPT09dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW2ldP3RoaXMuaGVpZ2h0KCktbi5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxpKSktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCktdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCk6dGhpcy5oZWlnaHQoKS1uLnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkpKS10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTt2YXIgZD1zLm1lcmdlKGMpLHA9ZC5zZWxlY3RBbGwoInRleHQiKTtwLnNpemUoKT4wJiZwLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2grIiwiK3UrIikiKSxzLmV4aXQoKS5yZW1vdmUoKSxkLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIityLl9zY2FsZS5zY2FsZSh0KSsiLDApIn0pKTt2YXIgZj0iY2VudGVyIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXXx8MT09PWUuc3RlcD8ibWlkZGxlIjoic3RhcnQiO2Quc2VsZWN0QWxsKCJ0ZXh0IikudGV4dChlLmZvcm1hdHRlcikuc3R5bGUoInRleHQtYW5jaG9yIixmKX0sdS5wcm90b3R5cGUuX3JlbmRlclRpY2tNYXJrcz1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX3RpZXJNYXJrQ29udGFpbmVyc1tlXS5zZWxlY3RBbGwoIi4iK2wuQXhpcy5USUNLX01BUktfQ0xBU1MpLmRhdGEodCkscj1pLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChsLkF4aXMuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShpKSxvPXRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpLGE9dGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxlKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLDApOyJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpPyhvLnkxPWEsby55Mj1hKygiY2VudGVyIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tlXT90aGlzLmlubmVyVGlja0xlbmd0aCgpOnRoaXMuX3RpZXJIZWlnaHRzW2VdKSk6KG8ueTE9dGhpcy5oZWlnaHQoKS1hLG8ueTI9dGhpcy5oZWlnaHQoKS0oYSsoImNlbnRlciI9PT10aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbZV0/dGhpcy5pbm5lclRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tlXSkpKSxyLmF0dHJzKG8pLCJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpPyhvLnkxPWEsby55Mj1hKygiY2VudGVyIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tlXT90aGlzLmVuZFRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tlXSkpOihvLnkxPXRoaXMuaGVpZ2h0KCktYSxvLnkyPXRoaXMuaGVpZ2h0KCktKGErKCJjZW50ZXIiPT09dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW2VdP3RoaXMuZW5kVGlja0xlbmd0aCgpOnRoaXMuX3RpZXJIZWlnaHRzW2VdKSkpLG4uc2VsZWN0KHIubm9kZXMoKVswXSkuYXR0cnMobyksbi5zZWxlY3Qoci5ub2RlcygpW3Iuc2l6ZSgpLTFdKS5hdHRycyhvKSxuLnNlbGVjdChyLm5vZGVzKClbMF0pLmNsYXNzZWQobC5BeGlzLkVORF9USUNLX01BUktfQ0xBU1MsITApLG4uc2VsZWN0KHIubm9kZXMoKVtyLnNpemUoKS0xXSkuY2xhc3NlZChsLkF4aXMuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCksaS5leGl0KCkucmVtb3ZlKCl9LHUucHJvdG90eXBlLl9yZW5kZXJMYWJlbGxlc3NUaWNrTWFya3M9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIitsLkF4aXMuVElDS19NQVJLX0NMQVNTKS5kYXRhKHQpLG49ZS5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQobC5BeGlzLlRJQ0tfTUFSS19DTEFTUywhMCkubWVyZ2UoZSksaT10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtpLnkyPSJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpP3RoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMuaGVpZ2h0KCktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCksbi5hdHRycyhpKSxlLmV4aXQoKS5yZW1vdmUoKX0sdS5wcm90b3R5cGUuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleDwxP1tdOnRoaXMuX2dldFRpY2tJbnRlcnZhbFZhbHVlcyh0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnNbdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleC0xXVswXSl9LHUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4PXRoaXMuX2dldE1vc3RQcmVjaXNlQ29uZmlndXJhdGlvbkluZGV4KCk7dmFyIGU9dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdO3RoaXMuX2NsZWFuVGllcnMoKSxlLmZvckVhY2goKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuX3JlbmRlclRpZXJMYWJlbHModC5fdGllckxhYmVsQ29udGFpbmVyc1tuXSxlLG4pfSkpO2Zvcih2YXIgbj1lLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5fZ2V0VGlja1ZhbHVlc0ZvckNvbmZpZ3VyYXRpb24oZSl9KSksaT0wLHI9MDtyPE1hdGgubWF4KGUubGVuZ3RoLDEpOysrcil7dmFyIG89dGhpcy5fZ2VuZXJhdGVCYXNlbGluZUF0dHJIYXNoKCk7by55MSs9ImJvdHRvbSI9PT10aGlzLm9yaWVudGF0aW9uKCk/aTotaSxvLnkyPW8ueTEsdGhpcy5fdGllckJhc2VsaW5lc1tyXS5hdHRycyhvKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKSxpKz10aGlzLl90aWVySGVpZ2h0c1tyXX12YXIgYT1bXSxzPXRoaXMuX3NjYWxlLmRvbWFpbigpLGw9dGhpcy5fc2NhbGUuc2NhbGUoc1sxXSktdGhpcy5fc2NhbGUuc2NhbGUoc1swXSk7Zm9yKDEuNSp0aGlzLl9nZXRJbnRlcnZhbExlbmd0aChlWzBdKT49bCYmKGE9dGhpcy5fZ2VuZXJhdGVMYWJlbGxlc3NUaWNrcygpKSx0aGlzLl9yZW5kZXJMYWJlbGxlc3NUaWNrTWFya3MoYSksdGhpcy5faGlkZU92ZXJmbG93aW5nVGllcnMoKSxyPTA7cjxlLmxlbmd0aDsrK3IpdGhpcy5fcmVuZGVyVGlja01hcmtzKG5bcl0sciksdGhpcy5faGlkZU92ZXJsYXBwaW5nQW5kQ3V0T2ZmTGFiZWxzKHIpO3JldHVybiB0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpP3RoaXMuX2RyYXdBbm5vdGF0aW9ucygpOnRoaXMuX3JlbW92ZUFubm90YXRpb25zKCksdGhpc30sdS5wcm90b3R5cGUuX2hpZGVPdmVyZmxvd2luZ1RpZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuaGVpZ2h0KCksbj0wO3RoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiLiIrdS5USU1FX0FYSVNfVElFUl9DTEFTUykuYXR0cigidmlzaWJpbGl0eSIsKGZ1bmN0aW9uKGkscil7cmV0dXJuKG4rPXQuX3RpZXJIZWlnaHRzW3JdKTw9ZT8iaW5oZXJpdCI6ImhpZGRlbiJ9KSl9LHUucHJvdG90eXBlLl9oaWRlT3ZlcmxhcHBpbmdBbmRDdXRPZmZMYWJlbHM9ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzLHI9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89dGhpcy5fdGllck1hcmtDb250YWluZXJzW3RdLnNlbGVjdEFsbCgiLiIrbC5BeGlzLlRJQ0tfTUFSS19DTEFTUykuZmlsdGVyKChmdW5jdGlvbih0LGUpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuInZpc2libGUiPT09aXx8ImluaGVyaXQiPT09aX0pKS5ub2RlcygpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KSk7dGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1t0XS5zZWxlY3RBbGwoIi4iK2wuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoKGZ1bmN0aW9uKHQsZSl7dmFyIGk9bi5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4idmlzaWJsZSI9PT1pfHwiaW5oZXJpdCI9PT1pfSkpLmVhY2goKGZ1bmN0aW9uKHQscyl7dmFyIGwsYz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9bi5zZWxlY3QodGhpcyksaD1vW3NdLGQ9b1tzKzFdLHA9bnVsbCE9ZSYmYS5ET00uY2xpZW50UmVjdHNPdmVybGFwKGMsZSksZj1udWxsIT1oJiZhLkRPTS5jbGllbnRSZWN0c092ZXJsYXAoYyxoKSxtPW51bGwhPWQmJmEuRE9NLmNsaWVudFJlY3RzT3ZlcmxhcChjLGQpO2w9YywhKE1hdGguZmxvb3Ioci5sZWZ0KTw9TWF0aC5jZWlsKGwubGVmdCkmJk1hdGguZmxvb3Ioci50b3ApPD1NYXRoLmNlaWwobC50b3ApJiZNYXRoLmZsb29yKGwucmlnaHQpPD1NYXRoLmNlaWwoci5sZWZ0K2kud2lkdGgoKSkmJk1hdGguZmxvb3IobC5ib3R0b20pPD1NYXRoLmNlaWwoci50b3AraS5oZWlnaHQoKSkpfHxwfHxmfHxtP3Uuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKTooZT1jLHUuc3R5bGUoInZpc2liaWxpdHkiLCJpbmhlcml0IikpfSkpfSx1LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtzLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSx1LlRJTUVfQVhJU19USUVSX0NMQVNTPSJ0aW1lLWF4aXMtdGllciIsdS5fU09SVEVEX1RJTUVfSU5URVJWQUxfSU5ERVg9KChjPXt9KVt0LlRpbWVJbnRlcnZhbC5zZWNvbmRdPTAsY1t0LlRpbWVJbnRlcnZhbC5taW51dGVdPTEsY1t0LlRpbWVJbnRlcnZhbC5ob3VyXT0yLGNbdC5UaW1lSW50ZXJ2YWwuZGF5XT0zLGNbdC5UaW1lSW50ZXJ2YWwud2Vla109NCxjW3QuVGltZUludGVydmFsLm1vbnRoXT01LGNbdC5UaW1lSW50ZXJ2YWwueWVhcl09NixjKSx1Ll9ERUZBVUxUX1RJTUVfQVhJU19DT05GSUdVUkFUSU9OUz1mdW5jdGlvbihlKXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gci50aW1lKHQsZSl9O3JldHVybltbe2ludGVydmFsOnQuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6dC5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6NSxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOnQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDoxMCxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOnQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDoxNSxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOnQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDozMCxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOnQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6dC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOnQuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjUsZm9ybWF0dGVyOm4oIiVJOiVNICVwIil9LHtpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6dC5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MTAsZm9ybWF0dGVyOm4oIiVJOiVNICVwIil9LHtpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6dC5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MTUsZm9ybWF0dGVyOm4oIiVJOiVNICVwIil9LHtpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6dC5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MzAsZm9ybWF0dGVyOm4oIiVJOiVNICVwIil9LHtpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6dC5UaW1lSW50ZXJ2YWwuaG91cixzdGVwOjEsZm9ybWF0dGVyOm4oIiVJICVwIil9LHtpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6dC5UaW1lSW50ZXJ2YWwuaG91cixzdGVwOjMsZm9ybWF0dGVyOm4oIiVJICVwIil9LHtpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6dC5UaW1lSW50ZXJ2YWwuaG91cixzdGVwOjYsZm9ybWF0dGVyOm4oIiVJICVwIil9LHtpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6dC5UaW1lSW50ZXJ2YWwuaG91cixzdGVwOjEyLGZvcm1hdHRlcjpuKCIlSSAlcCIpfSx7aW50ZXJ2YWw6dC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOnQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVhICVlIil9LHtpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVZIil9XSxbe2ludGVydmFsOnQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVlIil9LHtpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVZIil9XSxbe2ludGVydmFsOnQuVGltZUludGVydmFsLm1vbnRoLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIiKX0se2ludGVydmFsOnQuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6dC5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDozLGZvcm1hdHRlcjpuKCIlYiIpfSx7aW50ZXJ2YWw6dC5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOnQuVGltZUludGVydmFsLm1vbnRoLHN0ZXA6Nixmb3JtYXR0ZXI6bigiJWIiKX0se2ludGVydmFsOnQuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6dC5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiV5Iil9XSxbe2ludGVydmFsOnQuVGltZUludGVydmFsLnllYXIsc3RlcDo1LGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDp0LlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MjUsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOnQuVGltZUludGVydmFsLnllYXIsc3RlcDo1MCxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6dC5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEwMCxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6dC5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjIwMCxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6dC5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjUwMCxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6dC5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjFlMyxmb3JtYXR0ZXI6bigiJVkiKX1dXX0sdS5fTE9OR19EQVRFPW5ldyBEYXRlKDk5OTksOCwyOSwxMiw1OSw5OTk5KSx1fSkobC5BeGlzKTt0LlRpbWU9dX0pKEt5dCksKGZ1bmN0aW9uKHQpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGU9dU87ZS5fX2V4cG9ydFN0YXIoTm10LHQpLGUuX19leHBvcnRTdGFyKFV5dCx0KSxlLl9fZXhwb3J0U3RhcihLeXQsdCl9KShQbXQpO3ZhciBpYnQ9e30scmJ0PXt9LG9idD17fSxhYnQ9e30sc2J0PXt9LGxidD17fSxjYnQ9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjYnQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB1YnQ9Rmd0LGhidD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbj17fSx0aGlzLl9ldmVudFRhcmdldD1kb2N1bWVudCx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0PXt9LHRoaXMuX2Nvbm5lY3RlZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUuX2hhc05vQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKHRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXQpLGU9MDtlPHQubGVuZ3RoO2UrKylpZigwIT09dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0W2VdXS5zaXplKXJldHVybiExO3JldHVybiEwfSx0LnByb3RvdHlwZS5fY29ubmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29ubmVjdGVkfHwoT2JqZWN0LmtleXModGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5fZXZlbnRUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihlLHQuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bZV0sIndoZWVsIj09PWU/e3Bhc3NpdmU6ITF9OnZvaWQgMCl9KSksdGhpcy5fY29ubmVjdGVkPSEwKX0sdC5wcm90b3R5cGUuX2Rpc2Nvbm5lY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2Nvbm5lY3RlZCYmdGhpcy5faGFzTm9DYWxsYmFja3MoKSYmKE9iamVjdC5rZXlzKHRoaXMuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb24pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuX2V2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0Ll9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW2VdKX0pKSx0aGlzLl9jb25uZWN0ZWQ9ITEpfSx0LnByb3RvdHlwZS5fYWRkQ2FsbGJhY2tGb3JFdmVudD1mdW5jdGlvbih0LGUpe251bGw9PXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF0mJih0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdPW5ldyB1YnQuQ2FsbGJhY2tTZXQpLHRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF0uYWRkKGUpLHRoaXMuX2Nvbm5lY3QoKX0sdC5wcm90b3R5cGUuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQ9ZnVuY3Rpb24odCxlKXtudWxsIT10aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdJiZ0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdLmRlbGV0ZShlKSx0aGlzLl9kaXNjb25uZWN0KCl9LHQucHJvdG90eXBlLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XTtudWxsIT1pJiZpLmNhbGxDYWxsYmFja3MuYXBwbHkoaSxlKX0sdH0pKCk7Y2J0LkRpc3BhdGNoZXI9aGJ0LAovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkobGJ0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZGJ0PXVPLHBidD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltlLl9LRVlET1dOX0VWRU5UX05BTUVdPWZ1bmN0aW9uKHQpe3JldHVybiBuLl9wcm9jZXNzS2V5ZG93bih0KX0sbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltlLl9LRVlVUF9FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gbi5fcHJvY2Vzc0tleXVwKHQpfSxufXJldHVybiBkYnQuX19leHRlbmRzKGUsdCksZS5nZXREaXNwYXRjaGVyPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnRbZS5fRElTUEFUQ0hFUl9LRVldO3JldHVybiBudWxsPT10JiYodD1uZXcgZSxkb2N1bWVudFtlLl9ESVNQQVRDSEVSX0tFWV09dCksdH0sZS5wcm90b3R5cGUuX3Byb2Nlc3NLZXlkb3duPWZ1bmN0aW9uKHQpe3RoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChlLl9LRVlET1dOX0VWRU5UX05BTUUsdC5rZXlDb2RlLHQpfSxlLnByb3RvdHlwZS5fcHJvY2Vzc0tleXVwPWZ1bmN0aW9uKHQpe3RoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChlLl9LRVlVUF9FVkVOVF9OQU1FLHQua2V5Q29kZSx0KX0sZS5wcm90b3R5cGUub25LZXlEb3duPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KGUuX0tFWURPV05fRVZFTlRfTkFNRSx0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZLZXlEb3duPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KGUuX0tFWURPV05fRVZFTlRfTkFNRSx0KSx0aGlzfSxlLnByb3RvdHlwZS5vbktleVVwPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KGUuX0tFWVVQX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub2ZmS2V5VXA9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQoZS5fS0VZVVBfRVZFTlRfTkFNRSx0KSx0aGlzfSxlLl9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9LZXkiLGUuX0tFWURPV05fRVZFTlRfTkFNRT0ia2V5ZG93biIsZS5fS0VZVVBfRVZFTlRfTkFNRT0ia2V5dXAiLGV9KShjYnQuRGlzcGF0Y2hlcik7bGJ0LktleT1wYnQ7dmFyIGZidD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi9PYmplY3QuZGVmaW5lUHJvcGVydHkoZmJ0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbWJ0PXVPLGdidD1GZ3QsX2J0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztpLl9sYXN0TW91c2VQb3NpdGlvbj17eDotMSx5Oi0xfSxpLl90cmFuc2xhdG9yPWdidC5nZXRUcmFuc2xhdG9yKG4pO3ZhciByPWZ1bmN0aW9uKHQpe3JldHVybiBpLl9tZWFzdXJlQW5kRGlzcGF0Y2gobix0LGUuX01PVVNFTU9WRV9FVkVOVF9OQU1FLCJwYWdlIil9O3JldHVybiBpLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW2UuX01PVVNFT1ZFUl9FVkVOVF9OQU1FXT1yLGkuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bZS5fTU9VU0VNT1ZFX0VWRU5UX05BTUVdPXIsaS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltlLl9NT1VTRU9VVF9FVkVOVF9OQU1FXT1yLGkuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bZS5fTU9VU0VET1dOX0VWRU5UX05BTUVdPWZ1bmN0aW9uKHQpe3JldHVybiBpLl9tZWFzdXJlQW5kRGlzcGF0Y2gobix0LGUuX01PVVNFRE9XTl9FVkVOVF9OQU1FKX0saS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltlLl9NT1VTRVVQX0VWRU5UX05BTUVdPWZ1bmN0aW9uKHQpe3JldHVybiBpLl9tZWFzdXJlQW5kRGlzcGF0Y2gobix0LGUuX01PVVNFVVBfRVZFTlRfTkFNRSwicGFnZSIpfSxpLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW2UuX1dIRUVMX0VWRU5UX05BTUVdPWZ1bmN0aW9uKHQpe3JldHVybiBpLl9tZWFzdXJlQW5kRGlzcGF0Y2gobix0LGUuX1dIRUVMX0VWRU5UX05BTUUpfSxpLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW2UuX0RCTENMSUNLX0VWRU5UX05BTUVdPWZ1bmN0aW9uKHQpe3JldHVybiBpLl9tZWFzdXJlQW5kRGlzcGF0Y2gobix0LGUuX0RCTENMSUNLX0VWRU5UX05BTUUpfSxpfXJldHVybiBtYnQuX19leHRlbmRzKGUsdCksZS5nZXREaXNwYXRjaGVyPWZ1bmN0aW9uKHQpe3ZhciBuPXQucm9vdCgpLnJvb3RFbGVtZW50KCksaT1uW2UuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gbnVsbD09aSYmKGk9bmV3IGUodCksbltlLl9ESVNQQVRDSEVSX0tFWV09aSksaX0sZS5wcm90b3R5cGUub25Nb3VzZU1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQoZS5fTU9VU0VNT1ZFX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub2ZmTW91c2VNb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KGUuX01PVVNFTU9WRV9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9uTW91c2VEb3duPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KGUuX01PVVNFRE9XTl9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZk1vdXNlRG93bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChlLl9NT1VTRURPV05fRVZFTlRfTkFNRSx0KSx0aGlzfSxlLnByb3RvdHlwZS5vbk1vdXNlVXA9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQoZS5fTU9VU0VVUF9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZk1vdXNlVXA9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQoZS5fTU9VU0VVUF9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9uV2hlZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQoZS5fV0hFRUxfRVZFTlRfTkFNRSx0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZXaGVlbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChlLl9XSEVFTF9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9uRGJsQ2xpY2s9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQoZS5fREJMQ0xJQ0tfRVZFTlRfTkFNRSx0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZEYmxDbGljaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChlLl9EQkxDTElDS19FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLl9tZWFzdXJlQW5kRGlzcGF0Y2g9ZnVuY3Rpb24odCxlLG4saSl7aWYodm9pZCAwPT09aSYmKGk9ImVsZW1lbnQiKSwicGFnZSIhPT1pJiYiZWxlbWVudCIhPT1pKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzY29wZSAnIitpKyInLCBtdXN0IGJlICdlbGVtZW50JyBvciAncGFnZSciKTtpZigicGFnZSI9PT1pfHx0aGlzLmV2ZW50SW5zaWRlKHQsZSkpe3ZhciByPXRoaXMuX3RyYW5zbGF0b3IuY29tcHV0ZVBvc2l0aW9uKGUuY2xpZW50WCxlLmNsaWVudFkpO3RoaXMuX2xhc3RNb3VzZVBvc2l0aW9uPXIsdGhpcy5fY2FsbENhbGxiYWNrc0ZvckV2ZW50KG4sdGhpcy5sYXN0TW91c2VQb3NpdGlvbigpLGUpfX0sZS5wcm90b3R5cGUuZXZlbnRJbnNpZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZ2J0LlRyYW5zbGF0b3IuaXNFdmVudEluc2lkZSh0LGUpfSxlLnByb3RvdHlwZS5sYXN0TW91c2VQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXN0TW91c2VQb3NpdGlvbn0sZS5fRElTUEFUQ0hFUl9LRVk9Il9fUGxvdHRhYmxlX0Rpc3BhdGNoZXJfTW91c2UiLGUuX01PVVNFT1ZFUl9FVkVOVF9OQU1FPSJtb3VzZW92ZXIiLGUuX01PVVNFTU9WRV9FVkVOVF9OQU1FPSJtb3VzZW1vdmUiLGUuX01PVVNFT1VUX0VWRU5UX05BTUU9Im1vdXNlb3V0IixlLl9NT1VTRURPV05fRVZFTlRfTkFNRT0ibW91c2Vkb3duIixlLl9NT1VTRVVQX0VWRU5UX05BTUU9Im1vdXNldXAiLGUuX1dIRUVMX0VWRU5UX05BTUU9IndoZWVsIixlLl9EQkxDTElDS19FVkVOVF9OQU1FPSJkYmxjbGljayIsZX0pKGNidC5EaXNwYXRjaGVyKTtmYnQuTW91c2U9X2J0O3ZhciB5YnQ9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovT2JqZWN0LmRlZmluZVByb3BlcnR5KHlidCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHZidD11TyxiYnQ9Rmd0LHhidD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX3RyYW5zbGF0b3I9YmJ0LmdldFRyYW5zbGF0b3IobiksaS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltlLl9UT1VDSFNUQVJUX0VWRU5UX05BTUVdPWZ1bmN0aW9uKHQpe3JldHVybiBpLl9tZWFzdXJlQW5kRGlzcGF0Y2gobix0LGUuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSwicGFnZSIpfSxpLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW2UuX1RPVUNITU9WRV9FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gaS5fbWVhc3VyZUFuZERpc3BhdGNoKG4sdCxlLl9UT1VDSE1PVkVfRVZFTlRfTkFNRSwicGFnZSIpfSxpLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW2UuX1RPVUNIRU5EX0VWRU5UX05BTUVdPWZ1bmN0aW9uKHQpe3JldHVybiBpLl9tZWFzdXJlQW5kRGlzcGF0Y2gobix0LGUuX1RPVUNIRU5EX0VWRU5UX05BTUUsInBhZ2UiKX0saS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltlLl9UT1VDSENBTkNFTF9FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gaS5fbWVhc3VyZUFuZERpc3BhdGNoKG4sdCxlLl9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLCJwYWdlIil9LGl9cmV0dXJuIHZidC5fX2V4dGVuZHMoZSx0KSxlLmdldERpc3BhdGNoZXI9ZnVuY3Rpb24odCl7dmFyIG49dC5yb290KCkucm9vdEVsZW1lbnQoKSxpPW5bZS5fRElTUEFUQ0hFUl9LRVldO3JldHVybiBudWxsPT1pJiYoaT1uZXcgZSh0KSxuW2UuX0RJU1BBVENIRVJfS0VZXT1pKSxpfSxlLnByb3RvdHlwZS5vblRvdWNoU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQoZS5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlRvdWNoU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQoZS5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9uVG91Y2hNb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KGUuX1RPVUNITU9WRV9FVkVOVF9OQU1FLHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlRvdWNoTW92ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChlLl9UT1VDSE1PVkVfRVZFTlRfTkFNRSx0KSx0aGlzfSxlLnByb3RvdHlwZS5vblRvdWNoRW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KGUuX1RPVUNIRU5EX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub2ZmVG91Y2hFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQoZS5fVE9VQ0hFTkRfRVZFTlRfTkFNRSx0KSx0aGlzfSxlLnByb3RvdHlwZS5vblRvdWNoQ2FuY2VsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KGUuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsdCksdGhpc30sZS5wcm90b3R5cGUub2ZmVG91Y2hDYW5jZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQoZS5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRSx0KSx0aGlzfSxlLnByb3RvdHlwZS5fbWVhc3VyZUFuZERpc3BhdGNoPWZ1bmN0aW9uKHQsZSxuLGkpe2lmKHZvaWQgMD09PWkmJihpPSJlbGVtZW50IiksInBhZ2UiIT09aSYmImVsZW1lbnQiIT09aSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2NvcGUgJyIraSsiJywgbXVzdCBiZSAnZWxlbWVudCcgb3IgJ3BhZ2UnIik7aWYoImVsZW1lbnQiIT09aXx8dGhpcy5ldmVudEluc2lkZSh0LGUpKXtmb3IodmFyIHI9ZS5jaGFuZ2VkVG91Y2hlcyxvPXt9LGE9W10scz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgbD1yW3NdLGM9bC5pZGVudGlmaWVyLHU9dGhpcy5fdHJhbnNsYXRvci5jb21wdXRlUG9zaXRpb24obC5jbGllbnRYLGwuY2xpZW50WSk7bnVsbCE9dSYmKG9bY109dSxhLnB1c2goYykpfWEubGVuZ3RoPjAmJnRoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChuLGEsbyxlKX19LGUucHJvdG90eXBlLmV2ZW50SW5zaWRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGJidC5UcmFuc2xhdG9yLmlzRXZlbnRJbnNpZGUodCxlKX0sZS5fRElTUEFUQ0hFUl9LRVk9Il9fUGxvdHRhYmxlX0Rpc3BhdGNoZXJfVG91Y2giLGUuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRT0idG91Y2hzdGFydCIsZS5fVE9VQ0hNT1ZFX0VWRU5UX05BTUU9InRvdWNobW92ZSIsZS5fVE9VQ0hFTkRfRVZFTlRfTkFNRT0idG91Y2hlbmQiLGUuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUU9InRvdWNoY2FuY2VsIixlfSkoY2J0LkRpc3BhdGNoZXIpO3lidC5Ub3VjaD14YnQsKGZ1bmN0aW9uKHQpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGU9dU87ZS5fX2V4cG9ydFN0YXIobGJ0LHQpLGUuX19leHBvcnRTdGFyKGZidCx0KSxlLl9fZXhwb3J0U3Rhcih5YnQsdCl9KShzYnQpO3ZhciB3YnQ9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovT2JqZWN0LmRlZmluZVByb3BlcnR5KHdidCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFNidD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIHQ9dGhpczt0aGlzLl9hbmNob3JDYWxsYmFjaz1mdW5jdGlvbihlKXtyZXR1cm4gdC5fYW5jaG9yKGUpfSx0aGlzLl9lbmFibGVkPSEwfXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2hUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZGlzY29ubmVjdCgpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG89dCx0aGlzLl9jb25uZWN0KCksdGhpc30sdC5wcm90b3R5cGUuZGV0YWNoRnJvbT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZXRhY2goKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2Nvbm5lY3QoKSx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvPW51bGwsdGhpc30sdC5wcm90b3R5cGUuZW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9lbmFibGVkOih0aGlzLl9lbmFibGVkPXQsdGhpcy5fZW5hYmxlZD90aGlzLl9jb25uZWN0KCk6dGhpcy5fZGlzY29ubmVjdCgpLHRoaXMpfSx0LnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHQpe3RoaXMuX2lzQW5jaG9yZWQ9ITB9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQ9ITF9LHQucHJvdG90eXBlLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ub3JpZ2luVG9Sb290KCk7cmV0dXJue3g6dC54LWUueCx5OnQueS1lLnl9fSx0LnByb3RvdHlwZS5faXNJbnNpZGVDb21wb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIDA8PXQueCYmMDw9dC55JiZ0Lng8PXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSYmdC55PD10aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLmhlaWdodCgpfSx0LnByb3RvdHlwZS5fY29ubmVjdD1mdW5jdGlvbigpe3RoaXMuZW5hYmxlZCgpJiZudWxsIT10aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvJiYhdGhpcy5faXNBbmNob3JlZCYmdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5vbkFuY2hvcih0aGlzLl9hbmNob3JDYWxsYmFjayl9LHQucHJvdG90eXBlLl9kaXNjb25uZWN0PWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZCYmdGhpcy5fdW5hbmNob3IoKSxudWxsIT10aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvJiZ0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLm9mZkFuY2hvcih0aGlzLl9hbmNob3JDYWxsYmFjayl9LHR9KSgpO3didC5JbnRlcmFjdGlvbj1TYnQsCi8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShhYnQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBNYnQ9dU8sRWJ0PXNidCxUYnQ9Rmd0LENidD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5fY2xpY2tlZERvd249ITEsZS5fZG91YmxlQ2xpY2tpbmc9ITEsZS5fb25DbGlja0NhbGxiYWNrcz1uZXcgVGJ0LkNhbGxiYWNrU2V0LGUuX29uRG91YmxlQ2xpY2tDYWxsYmFja3M9bmV3IFRidC5DYWxsYmFja1NldCxlLl9tb3VzZURvd25DYWxsYmFjaz1mdW5jdGlvbih0LG4pe3JldHVybiBlLl9oYW5kbGVDbGlja0Rvd24odCxuKX0sZS5fbW91c2VVcENhbGxiYWNrPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuX2hhbmRsZUNsaWNrVXAodCxuKX0sZS5fZGJsQ2xpY2tDYWxsYmFjaz1mdW5jdGlvbih0LG4pe3JldHVybiBlLl9oYW5kbGVEYmxDbGljayh0LG4pfSxlLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24odCxuLGkpe3JldHVybiBlLl9oYW5kbGVDbGlja0Rvd24oblt0WzBdXSxpKX0sZS5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbih0LG4saSl7cmV0dXJuIGUuX2hhbmRsZUNsaWNrVXAoblt0WzBdXSxpKX0sZS5fdG91Y2hDYW5jZWxDYWxsYmFjaz1mdW5jdGlvbih0LG4pe3JldHVybiBlLl9jbGlja2VkRG93bj0hMX0sZX1yZXR1cm4gTWJ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsZSksdGhpcy5fbW91c2VEaXNwYXRjaGVyPUVidC5Nb3VzZS5nZXREaXNwYXRjaGVyKGUpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlRG93bih0aGlzLl9tb3VzZURvd25DYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbkRibENsaWNrKHRoaXMuX2RibENsaWNrQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj1FYnQuVG91Y2guZ2V0RGlzcGF0Y2hlcihlKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayl9LGUucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe3QucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9mZkRibENsaWNrKHRoaXMuX2RibENsaWNrQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1udWxsLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaENhbmNlbCh0aGlzLl90b3VjaENhbmNlbENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9bnVsbH0sZS5wcm90b3R5cGUuX2hhbmRsZUNsaWNrRG93bj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodCk7dGhpcy5faXNJbnNpZGVDb21wb25lbnQobikmJih0aGlzLl9jbGlja2VkRG93bj0hMCx0aGlzLl9jbGlja2VkUG9pbnQ9bil9LGUucHJvdG90eXBlLl9oYW5kbGVDbGlja1VwPWZ1bmN0aW9uKHQsbil7dmFyIGk9dGhpcyxyPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodCk7dGhpcy5fY2xpY2tlZERvd24mJmUuX3BvaW50c0VxdWFsKHIsdGhpcy5fY2xpY2tlZFBvaW50KSYmc2V0VGltZW91dCgoZnVuY3Rpb24oKXtpLl9kb3VibGVDbGlja2luZ3x8aS5fb25DbGlja0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHIsbil9KSwwKSx0aGlzLl9jbGlja2VkRG93bj0hMX0sZS5wcm90b3R5cGUuX2hhbmRsZURibENsaWNrPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodCk7dGhpcy5fZG91YmxlQ2xpY2tpbmc9ITAsdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKGksZSksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZG91YmxlQ2xpY2tpbmc9ITF9KSwwKX0sZS5fcG9pbnRzRXF1YWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54PT09ZS54JiZ0Lnk9PT1lLnl9LGUucHJvdG90eXBlLm9uQ2xpY2s9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29uQ2xpY2tDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkNsaWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vbkNsaWNrQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vbkRvdWJsZUNsaWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZEb3VibGVDbGljaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZX0pKHdidC5JbnRlcmFjdGlvbik7YWJ0LkNsaWNrPUNidDt2YXIgQWJ0PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShBYnQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBrYnQ9dU8sTGJ0PXNidCxQYnQ9Rmd0LE5idD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX2RyYWdnaW5nPSExLGkuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ9ITAsaS5fbW91c2VGaWx0ZXI9ZS5fREVGQVVMVF9NT1VTRV9GSUxURVIsaS5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBQYnQuQ2FsbGJhY2tTZXQsaS5fZHJhZ0NhbGxiYWNrcz1uZXcgUGJ0LkNhbGxiYWNrU2V0LGkuX2RyYWdFbmRDYWxsYmFja3M9bmV3IFBidC5DYWxsYmFja1NldCxpLl9tb3VzZURvd25DYWxsYmFjaz1mdW5jdGlvbih0LGUpe3JldHVybiBpLl9zdGFydERyYWcodCxlKX0saS5fbW91c2VNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaS5fZG9EcmFnKHQsZSl9LGkuX21vdXNlVXBDYWxsYmFjaz1mdW5jdGlvbih0LGUpe3JldHVybiBpLl9lbmREcmFnKHQsZSl9LGkuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGkuX3N0YXJ0RHJhZyhlW3RbMF1dLG4pfSxpLl90b3VjaE1vdmVDYWxsYmFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGkuX2RvRHJhZyhlW3RbMF1dLG4pfSxpLl90b3VjaEVuZENhbGxiYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5fZW5kRHJhZyhlW3RbMF1dLG4pfSxpLl9tb3VzZUJ1dHRvbj12b2lkIDAhPT1uP246MCxpfXJldHVybiBrYnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxlKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9TGJ0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9TGJ0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayl9LGUucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe3QucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwsdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LGUucHJvdG90eXBlLl90cmFuc2xhdGVBbmRDb25zdHJhaW49ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZSh0KTtyZXR1cm4gdGhpcy5fY29uc3RyYWluZWRUb0NvbXBvbmVudD97eDpQYnQuTWF0aC5jbGFtcChlLngsMCx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLndpZHRoKCkpLHk6UGJ0Lk1hdGguY2xhbXAoZS55LDAsdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5oZWlnaHQoKSl9OmV9LGUucHJvdG90eXBlLl9zdGFydERyYWc9ZnVuY3Rpb24odCxlKXtpZighKGUgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KXx8dGhpcy5fbW91c2VGaWx0ZXIoZSkpe3ZhciBuPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodCk7dGhpcy5faXNJbnNpZGVDb21wb25lbnQobikmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZHJhZ2dpbmc9ITAsdGhpcy5fZHJhZ09yaWdpbj1uLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMuX2RyYWdPcmlnaW4pKX19LGUucHJvdG90eXBlLl9kb0RyYWc9ZnVuY3Rpb24odCxlKXt0aGlzLl9kcmFnZ2luZyYmdGhpcy5fZHJhZ0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMuX2RyYWdPcmlnaW4sdGhpcy5fdHJhbnNsYXRlQW5kQ29uc3RyYWluKHQpKX0sZS5wcm90b3R5cGUuX2VuZERyYWc9ZnVuY3Rpb24odCxlKXtlIGluc3RhbmNlb2YgTW91c2VFdmVudCYmZS5idXR0b24hPT10aGlzLl9tb3VzZUJ1dHRvbnx8dGhpcy5fZHJhZ2dpbmcmJih0aGlzLl9kcmFnZ2luZz0hMSx0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbix0aGlzLl90cmFuc2xhdGVBbmRDb25zdHJhaW4odCkpKX0sZS5wcm90b3R5cGUuY29uc3RyYWluZWRUb0NvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9jb25zdHJhaW5lZFRvQ29tcG9uZW50Oih0aGlzLl9jb25zdHJhaW5lZFRvQ29tcG9uZW50PXQsdGhpcyl9LGUucHJvdG90eXBlLm1vdXNlRmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9tb3VzZUZpbHRlcjoodGhpcy5fbW91c2VGaWx0ZXI9dCx0aGlzKX0sZS5wcm90b3R5cGUub25EcmFnU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmRHJhZ1N0YXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLm9uRHJhZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ0NhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmRHJhZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ0NhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUub25EcmFnRW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZEcmFnRW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLl9ERUZBVUxUX01PVVNFX0ZJTFRFUj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXQuYnV0dG9ufSxlfSkod2J0LkludGVyYWN0aW9uKTtBYnQuRHJhZz1OYnQ7dmFyIElidD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi9PYmplY3QuZGVmaW5lUHJvcGVydHkoSWJ0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUmJ0PXVPLE9idD1zYnQsemJ0PUZndCxEYnQ9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT1udWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGUuX2tleVByZXNzQ2FsbGJhY2tzPXt9LGUuX2tleVJlbGVhc2VDYWxsYmFja3M9e30sZS5fbW91c2VNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24odCl7cmV0dXJuITF9LGUuX2Rvd25lZEtleXM9bmV3IHpidC5TZXQsZS5fa2V5RG93bkNhbGxiYWNrPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuX2hhbmRsZUtleURvd25FdmVudCh0LG4pfSxlLl9rZXlVcENhbGxiYWNrPWZ1bmN0aW9uKHQpe3JldHVybiBlLl9oYW5kbGVLZXlVcEV2ZW50KHQpfSxlfXJldHVybiBSYnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxlKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9T2J0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyPU9idC5LZXkuZ2V0RGlzcGF0Y2hlcigpLHRoaXMuX2tleURpc3BhdGNoZXIub25LZXlEb3duKHRoaXMuX2tleURvd25DYWxsYmFjayksdGhpcy5fa2V5RGlzcGF0Y2hlci5vbktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spfSxlLnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9bnVsbCx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleURvd24odGhpcy5fa2V5RG93bkNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spLHRoaXMuX2tleURpc3BhdGNoZXI9bnVsbH0sZS5wcm90b3R5cGUuX2hhbmRsZUtleURvd25FdmVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLmxhc3RNb3VzZVBvc2l0aW9uKCkpO3RoaXMuX2lzSW5zaWRlQ29tcG9uZW50KG4pJiYhZS5yZXBlYXQmJih0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1t0XSYmdGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbdF0uY2FsbENhbGxiYWNrcyh0KSx0aGlzLl9kb3duZWRLZXlzLmFkZCh0KSl9LGUucHJvdG90eXBlLl9oYW5kbGVLZXlVcEV2ZW50PWZ1bmN0aW9uKHQpe3RoaXMuX2Rvd25lZEtleXMuaGFzKHQpJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3RdJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3RdLmNhbGxDYWxsYmFja3ModCksdGhpcy5fZG93bmVkS2V5cy5kZWxldGUodCl9LGUucHJvdG90eXBlLm9uS2V5UHJlc3M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbdF18fCh0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1t0XT1uZXcgemJ0LkNhbGxiYWNrU2V0KSx0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1t0XS5hZGQoZSksdGhpc30sZS5wcm90b3R5cGUub2ZmS2V5UHJlc3M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbdF0uZGVsZXRlKGUpLDA9PT10aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1t0XS5zaXplJiZkZWxldGUgdGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbdF0sdGhpc30sZS5wcm90b3R5cGUub25LZXlSZWxlYXNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3NbdF18fCh0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3RdPW5ldyB6YnQuQ2FsbGJhY2tTZXQpLHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3NbdF0uYWRkKGUpLHRoaXN9LGUucHJvdG90eXBlLm9mZktleVJlbGVhc2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1t0XS5kZWxldGUoZSksMD09PXRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3NbdF0uc2l6ZSYmZGVsZXRlIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3NbdF0sdGhpc30sZX0pKHdidC5JbnRlcmFjdGlvbik7SWJ0LktleT1EYnQ7dmFyIEJidD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi9PYmplY3QuZGVmaW5lUHJvcGVydHkoQmJ0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSGJ0PXVPLEZidD1FZHQsVmJ0PXNidCxVYnQ9Wnl0LGpidD1GZ3QsR2J0PW9idCxXYnQ9aXZ0LHFidD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fd2hlZWxGaWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuITB9LGkuX3doZWVsQ2FsbGJhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaS5faGFuZGxlV2hlZWxFdmVudCh0LGUpfSxpLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBpLl9oYW5kbGVUb3VjaFN0YXJ0KHQsZSxuKX0saS5fdG91Y2hNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBpLl9oYW5kbGVQaW5jaCh0LGUsbil9LGkuX3RvdWNoRW5kQ2FsbGJhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBpLl9oYW5kbGVUb3VjaEVuZCh0LGUsbil9LGkuX3RvdWNoQ2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBpLl9oYW5kbGVUb3VjaEVuZCh0LGUsbil9LGkuX3BhbkVuZENhbGxiYWNrcz1uZXcgamJ0LkNhbGxiYWNrU2V0LGkuX3pvb21FbmRDYWxsYmFja3M9bmV3IGpidC5DYWxsYmFja1NldCxpLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzPW5ldyBqYnQuQ2FsbGJhY2tTZXQsaS5feFNjYWxlcz1uZXcgamJ0LlNldCxpLl95U2NhbGVzPW5ldyBqYnQuU2V0LGkuX2RyYWdJbnRlcmFjdGlvbj1uZXcgR2J0LkRyYWcsaS5fc2V0dXBEcmFnSW50ZXJhY3Rpb24oKSxpLl90b3VjaElkcz1GYnQubWFwKCksaS5fbWluRG9tYWluRXh0ZW50cz1uZXcgamJ0Lk1hcCxpLl9tYXhEb21haW5FeHRlbnRzPW5ldyBqYnQuTWFwLGkuX21pbkRvbWFpblZhbHVlcz1uZXcgamJ0Lk1hcCxpLl9tYXhEb21haW5WYWx1ZXM9bmV3IGpidC5NYXAsbnVsbCE9ZSYmaS5hZGRYU2NhbGUoZSksbnVsbCE9biYmaS5hZGRZU2NhbGUobiksaX1yZXR1cm4gSGJ0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmRyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259LGUucHJvdG90eXBlLndoZWVsRmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl93aGVlbEZpbHRlcjoodGhpcy5fd2hlZWxGaWx0ZXI9dCx0aGlzKX0sZS5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy54U2NhbGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24obil7bi5wYW4oZS5fY29uc3RyYWluZWRUcmFuc2xhdGlvbihuLHQueCkpfSkpLHRoaXMueVNjYWxlcygpLmZvckVhY2goKGZ1bmN0aW9uKG4pe24ucGFuKGUuX2NvbnN0cmFpbmVkVHJhbnNsYXRpb24obix0LnkpKX0pKSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKX0sZS5wcm90b3R5cGUuem9vbT1mdW5jdGlvbih0LGUsbil7dmFyIGkscixvPXRoaXM7cmV0dXJuIHZvaWQgMD09PW4mJihuPSEwKSxudWxsIT1lJiYoaT1lLngscj1lLnksbiYmKHRoaXMueFNjYWxlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPW8uX2NvbnN0cmFpbmVkWm9vbShlLHQsaSk7aT1uLmNlbnRlclBvaW50LHQ9bi56b29tQW1vdW50fSkpLHRoaXMueVNjYWxlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPW8uX2NvbnN0cmFpbmVkWm9vbShlLHQscik7cj1uLmNlbnRlclBvaW50LHQ9bi56b29tQW1vdW50fSkpKSksdGhpcy54U2NhbGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49ZS5yYW5nZSgpO2Uuem9vbSh0LG51bGw9PWk/KG5bMV0rblswXSkvMjppKX0pKSx0aGlzLnlTY2FsZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1lLnJhbmdlKCk7ZS56b29tKHQsbnVsbD09cj8oblsxXStuWzBdKS8yOnIpfSkpLHRoaXMuX3Bhblpvb21VcGRhdGVDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpLHt6b29tQW1vdW50OnQsY2VudGVyVmFsdWU6e2NlbnRlclg6aSxjZW50ZXJZOnJ9fX0sZS5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxlKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8oZSksdGhpcy5fbW91c2VEaXNwYXRjaGVyPVZidC5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbldoZWVsKHRoaXMuX3doZWVsQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj1WYnQuVG91Y2guZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaENhbmNlbCh0aGlzLl90b3VjaENhbmNlbENhbGxiYWNrKX0sZS5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3VuYW5jaG9yLmNhbGwodGhpcyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9mZldoZWVsKHRoaXMuX3doZWVsQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1udWxsLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaENhbmNlbCh0aGlzLl90b3VjaENhbmNlbENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9bnVsbCx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9LGUucHJvdG90eXBlLl9oYW5kbGVUb3VjaFN0YXJ0PWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoJiZ0aGlzLl90b3VjaElkcy5zaXplKCk8MjtpKyspe3ZhciByPXRbaV07dGhpcy5fdG91Y2hJZHMuc2V0KHIudG9TdHJpbmcoKSx0aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKGVbcl0pKX19LGUucHJvdG90eXBlLl9oYW5kbGVQaW5jaD1mdW5jdGlvbih0LG4saSl7dmFyIHI9dGhpcztpZighKHRoaXMuX3RvdWNoSWRzLnNpemUoKTwyKSl7dmFyIG89dGhpcy5fdG91Y2hJZHMudmFsdWVzKCk7aWYodGhpcy5faXNJbnNpZGVDb21wb25lbnQodGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShvWzBdKSkmJnRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uob1sxXSkpKXt2YXIgYT1lLl9wb2ludERpc3RhbmNlKG9bMF0sb1sxXSk7aWYoMCE9PWEpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7ci5fdG91Y2hJZHMuaGFzKHQudG9TdHJpbmcoKSkmJnIuX3RvdWNoSWRzLnNldCh0LnRvU3RyaW5nKCksci5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShuW3RdKSl9KSk7dmFyIHM9dGhpcy5fdG91Y2hJZHMudmFsdWVzKCksbD1lLl9wb2ludERpc3RhbmNlKHNbMF0sc1sxXSk7aWYoMCE9PWwpe3ZhciBjPWEvbCx1PXMubWFwKChmdW5jdGlvbih0LGUpe3JldHVybnt4Oih0Lngtb1tlXS54KS9jLHk6KHQueS1vW2VdLnkpL2N9fSkpLGg9ZS5jZW50ZXJQb2ludChvWzBdLG9bMV0pLGQ9dGhpcy56b29tKGMsaCkscD1kLmNlbnRlclZhbHVlLGY9ZC56b29tQW1vdW50LG09cC5jZW50ZXJYLGc9cC5jZW50ZXJZLF89by5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3g6dVtlXS54KmYrdC54LHk6dVtlXS55KmYrdC55fX0pKTt0aGlzLnBhbih7eDptLShfWzBdLngrX1sxXS54KS8yLHk6Zy0oX1swXS55K19bMV0ueSkvMn0pfX19fX0sZS5jZW50ZXJQb2ludD1mdW5jdGlvbih0LGUpe3ZhciBuPU1hdGgubWluKHQueCxlLngpLGk9TWF0aC5tYXgodC54LGUueCkscj1NYXRoLm1pbih0LnksZS55KTtyZXR1cm57eDoobitpKS8yLHk6KE1hdGgubWF4KHQueSxlLnkpK3IpLzJ9fSxlLl9wb2ludERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5taW4odC54LGUueCksaT1NYXRoLm1heCh0LngsZS54KSxyPU1hdGgubWluKHQueSxlLnkpLG89TWF0aC5tYXgodC55LGUueSk7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhpLW4sMikrTWF0aC5wb3coby1yLDIpKX0sZS5wcm90b3R5cGUuX2hhbmRsZVRvdWNoRW5kPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7aS5fdG91Y2hJZHMucmVtb3ZlKHQudG9TdHJpbmcoKSl9KSksdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPjAmJnRoaXMuX3pvb21FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfSxlLnByb3RvdHlwZS5faGFuZGxlV2hlZWxFdmVudD1mdW5jdGlvbih0LG4pe2lmKHRoaXMuX3doZWVsRmlsdGVyKG4pKXt2YXIgaT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHQpO2lmKHRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpKXtuLnByZXZlbnREZWZhdWx0KCk7dmFyIHI9TWF0aC5wb3coMiwoMCE9PW4uZGVsdGFZP24uZGVsdGFZOm4uZGVsdGFYKSoobi5kZWx0YU1vZGU/ZS5fUElYRUxTX1BFUl9MSU5FOjEpKi4wMDIpO3RoaXMuem9vbShyLGkpLHRoaXMuX3pvb21FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfX19LGUucHJvdG90eXBlLl9jb25zdHJhaW5lZFpvb209ZnVuY3Rpb24odCxlLG4pe3JldHVybiBXYnQuY29uc3RyYWluZWRab29tKHQsZSxuLHRoaXMubWluRG9tYWluRXh0ZW50KHQpLHRoaXMubWF4RG9tYWluRXh0ZW50KHQpLHRoaXMubWluRG9tYWluVmFsdWUodCksdGhpcy5tYXhEb21haW5WYWx1ZSh0KSl9LGUucHJvdG90eXBlLl9jb25zdHJhaW5lZFRyYW5zbGF0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFdidC5jb25zdHJhaW5lZFRyYW5zbGF0aW9uKHQsZSx0aGlzLm1pbkRvbWFpblZhbHVlKHQpLHRoaXMubWF4RG9tYWluVmFsdWUodCkpfSxlLnByb3RvdHlwZS5fc2V0dXBEcmFnSW50ZXJhY3Rpb249ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXM7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmNvbnN0cmFpbmVkVG9Db21wb25lbnQoITEpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydCgoZnVuY3Rpb24oKXtyZXR1cm4gdD1udWxsfSkpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcoKGZ1bmN0aW9uKG4saSl7ZS5fdG91Y2hJZHMuc2l6ZSgpPj0yfHwoZS5wYW4oe3g6KG51bGw9PXQ/bi54OnQueCktaS54LHk6KG51bGw9PXQ/bi55OnQueSktaS55fSksdD1pKX0pKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKChmdW5jdGlvbigpe3JldHVybiBlLl9wYW5FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfSkpfSxlLnByb3RvdHlwZS5fbm9uTGluZWFyU2NhbGVXaXRoRXh0ZW50cz1mdW5jdGlvbih0KXtyZXR1cm4hKG51bGw9PXRoaXMubWluRG9tYWluRXh0ZW50KHQpfHxudWxsPT10aGlzLm1heERvbWFpbkV4dGVudCh0KXx8dCBpbnN0YW5jZW9mIFVidC5MaW5lYXJ8fHQgaW5zdGFuY2VvZiBVYnQuVGltZSl9LGUucHJvdG90eXBlLnhTY2FsZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZihudWxsPT10KXt2YXIgbj1bXTtyZXR1cm4gdGhpcy5feFNjYWxlcy5mb3JFYWNoKChmdW5jdGlvbih0KXtuLnB1c2godCl9KSksbn1yZXR1cm4gdGhpcy5feFNjYWxlcz1uZXcgamJ0LlNldCx0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2UuYWRkWFNjYWxlKHQpfSkpLHRoaXN9LGUucHJvdG90eXBlLnlTY2FsZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZihudWxsPT10KXt2YXIgbj1bXTtyZXR1cm4gdGhpcy5feVNjYWxlcy5mb3JFYWNoKChmdW5jdGlvbih0KXtuLnB1c2godCl9KSksbn1yZXR1cm4gdGhpcy5feVNjYWxlcz1uZXcgamJ0LlNldCx0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2UuYWRkWVNjYWxlKHQpfSkpLHRoaXN9LGUucHJvdG90eXBlLmFkZFhTY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5feFNjYWxlcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUucmVtb3ZlWFNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl94U2NhbGVzLmRlbGV0ZSh0KSx0aGlzLl9taW5Eb21haW5FeHRlbnRzLmRlbGV0ZSh0KSx0aGlzLl9tYXhEb21haW5FeHRlbnRzLmRlbGV0ZSh0KSx0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHQpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUuYWRkWVNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl95U2NhbGVzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5yZW1vdmVZU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3lTY2FsZXMuZGVsZXRlKHQpLHRoaXMuX21pbkRvbWFpbkV4dGVudHMuZGVsZXRlKHQpLHRoaXMuX21heERvbWFpbkV4dGVudHMuZGVsZXRlKHQpLHRoaXMuX21pbkRvbWFpblZhbHVlcy5kZWxldGUodCksdGhpcy5fbWF4RG9tYWluVmFsdWVzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5taW5Eb21haW5FeHRlbnQ9ZnVuY3Rpb24odCxlKXtpZihudWxsPT1lKXJldHVybiB0aGlzLl9taW5Eb21haW5FeHRlbnRzLmdldCh0KTtpZihlLnZhbHVlT2YoKTwwKXRocm93IG5ldyBFcnJvcigiZXh0ZW50IG11c3QgYmUgbm9uLW5lZ2F0aXZlIik7dmFyIG49dGhpcy5tYXhEb21haW5FeHRlbnQodCk7aWYobnVsbCE9biYmbi52YWx1ZU9mKCk8ZS52YWx1ZU9mKCkpdGhyb3cgbmV3IEVycm9yKCJtaW5Eb21haW5FeHRlbnQgbXVzdCBiZSBzbWFsbGVyIHRoYW4gbWF4RG9tYWluRXh0ZW50IGZvciB0aGUgc2FtZSBTY2FsZSIpO3JldHVybiB0aGlzLl9ub25MaW5lYXJTY2FsZVdpdGhFeHRlbnRzKHQpJiZqYnQuV2luZG93Lndhcm4oIlBhbm5pbmcgYW5kIHpvb21pbmcgd2l0aCBleHRlbnRzIG9uIGEgbm9ubGluZWFyIHNjYWxlIG1heSBoYXZlIHVuaW50ZW5kZWQgYmVoYXZpb3IuIiksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5zZXQodCxlKSx0aGlzfSxlLnByb3RvdHlwZS5tYXhEb21haW5FeHRlbnQ9ZnVuY3Rpb24odCxlKXtpZihudWxsPT1lKXJldHVybiB0aGlzLl9tYXhEb21haW5FeHRlbnRzLmdldCh0KTtpZihlLnZhbHVlT2YoKTw9MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIHBvc2l0aXZlIik7dmFyIG49dGhpcy5taW5Eb21haW5FeHRlbnQodCk7aWYobnVsbCE9biYmZS52YWx1ZU9mKCk8bi52YWx1ZU9mKCkpdGhyb3cgbmV3IEVycm9yKCJtYXhEb21haW5FeHRlbnQgbXVzdCBiZSBsYXJnZXIgdGhhbiBtaW5Eb21haW5FeHRlbnQgZm9yIHRoZSBzYW1lIFNjYWxlIik7cmV0dXJuIHRoaXMuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHModCkmJmpidC5XaW5kb3cud2FybigiUGFubmluZyBhbmQgem9vbWluZyB3aXRoIGV4dGVudHMgb24gYSBub25saW5lYXIgc2NhbGUgbWF5IGhhdmUgdW5pbnRlbmRlZCBiZWhhdmlvci4iKSx0aGlzLl9tYXhEb21haW5FeHRlbnRzLnNldCh0LGUpLHRoaXN9LGUucHJvdG90eXBlLm1pbkRvbWFpblZhbHVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PWU/dGhpcy5fbWluRG9tYWluVmFsdWVzLmdldCh0KToodGhpcy5fbWluRG9tYWluVmFsdWVzLnNldCh0LGUpLHRoaXMpfSxlLnByb3RvdHlwZS5tYXhEb21haW5WYWx1ZT1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP3RoaXMuX21heERvbWFpblZhbHVlcy5nZXQodCk6KHRoaXMuX21heERvbWFpblZhbHVlcy5zZXQodCxlKSx0aGlzKX0sZS5wcm90b3R5cGUuc2V0TWluTWF4RG9tYWluVmFsdWVzVG89ZnVuY3Rpb24odCl7dGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZSh0KSx0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKHQpO3ZhciBlPXQuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKSxuPWVbMV07cmV0dXJuIHRoaXMubWluRG9tYWluVmFsdWUodCxlWzBdKSx0aGlzLm1heERvbWFpblZhbHVlKHQsbiksdGhpc30sZS5wcm90b3R5cGUub25QYW5FbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhbkVuZENhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmUGFuRW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYW5FbmRDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLm9uWm9vbUVuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmWm9vbUVuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUub25QYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZQYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLl9QSVhFTFNfUEVSX0xJTkU9MTIwLGV9KSh3YnQuSW50ZXJhY3Rpb24pO0JidC5QYW5ab29tPXFidDt2YXIgWWJ0PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShZYnQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBYYnQ9dU8sJGJ0PXNidCxLYnQ9Rmd0LFpidD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5fb3ZlckNvbXBvbmVudD0hMSxlLl9wb2ludGVyRW50ZXJDYWxsYmFja3M9bmV3IEtidC5DYWxsYmFja1NldCxlLl9wb2ludGVyTW92ZUNhbGxiYWNrcz1uZXcgS2J0LkNhbGxiYWNrU2V0LGUuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzPW5ldyBLYnQuQ2FsbGJhY2tTZXQsZS5fbW91c2VNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5faGFuZGxlTW91c2VFdmVudCh0LG4pfSxlLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24odCxuLGkpe3JldHVybiBlLl9oYW5kbGVUb3VjaEV2ZW50KG5bdFswXV0saSl9LGV9cmV0dXJuIFhidC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLGUpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj0kYnQuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj0kYnQuVG91Y2guZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayl9LGUucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe3QucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1udWxsLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LGUucHJvdG90eXBlLl9oYW5kbGVNb3VzZUV2ZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbW91c2VEaXNwYXRjaGVyLmV2ZW50SW5zaWRlKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8sZSk7dGhpcy5faGFuZGxlUG9pbnRlckV2ZW50KHQsbil9LGUucHJvdG90eXBlLl9oYW5kbGVUb3VjaEV2ZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fdG91Y2hEaXNwYXRjaGVyLmV2ZW50SW5zaWRlKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8sZSk7dGhpcy5faGFuZGxlUG9pbnRlckV2ZW50KHQsbil9LGUucHJvdG90eXBlLl9oYW5kbGVQb2ludGVyRXZlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHQpLGk9dGhpcy5faXNJbnNpZGVDb21wb25lbnQobik7aSYmZT8odGhpcy5fb3ZlckNvbXBvbmVudHx8dGhpcy5fcG9pbnRlckVudGVyQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobiksdGhpcy5fcG9pbnRlck1vdmVDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSk6dGhpcy5fb3ZlckNvbXBvbmVudCYmdGhpcy5fcG9pbnRlckV4aXRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSx0aGlzLl9vdmVyQ29tcG9uZW50PWkmJmV9LGUucHJvdG90eXBlLm9uUG9pbnRlckVudGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb2ludGVyRW50ZXJDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlBvaW50ZXJFbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9pbnRlckVudGVyQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vblBvaW50ZXJNb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb2ludGVyTW92ZUNhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmUG9pbnRlck1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vblBvaW50ZXJFeGl0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb2ludGVyRXhpdENhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmUG9pbnRlckV4aXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlfSkod2J0LkludGVyYWN0aW9uKTtZYnQuUG9pbnRlcj1aYnQsKGZ1bmN0aW9uKHQpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGU9dU87ZS5fX2V4cG9ydFN0YXIoYWJ0LHQpLGUuX19leHBvcnRTdGFyKEFidCx0KSxlLl9fZXhwb3J0U3RhcihJYnQsdCksZS5fX2V4cG9ydFN0YXIoQmJ0LHQpLGUuX19leHBvcnRTdGFyKFlidCx0KSx0Lnpvb21PdXQ9aXZ0Lnpvb21PdXR9KShvYnQpO3ZhciBKYnQ9e307IShmdW5jdGlvbih0KXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlLG49dU8saT1GZ3Qscj1CZ3Q7IShmdW5jdGlvbih0KXt0W3QuVkFMVUU9MF09IlZBTFVFIix0W3QuUElYRUw9MV09IlBJWEVMIn0pKGU9dC5Qcm9wZXJ0eU1vZGV8fCh0LlByb3BlcnR5TW9kZT17fSkpO3ZhciBvPShmdW5jdGlvbih0KXtmdW5jdGlvbiByKCl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9ib3hWaXNpYmxlPSExLG4uX2JveEJvdW5kcz17dG9wTGVmdDp7eDowLHk6MH0sYm90dG9tUmlnaHQ6e3g6MCx5OjB9fSxuLl94Qm91bmRzTW9kZT1lLlBJWEVMLG4uX3lCb3VuZHNNb2RlPWUuUElYRUwsbi5hZGRDbGFzcygic2VsZWN0aW9uLWJveC1sYXllciIpLG4uX2FkanVzdEJvdW5kc0NhbGxiYWNrPWZ1bmN0aW9uKCl7bi5yZW5kZXIoKX0sbi5fb3ZlcmZsb3dIaWRkZW49ITAsbi5feEV4dGVudD1bdm9pZCAwLHZvaWQgMF0sbi5feUV4dGVudD1bdm9pZCAwLHZvaWQgMF0sbn1yZXR1cm4gbi5fX2V4dGVuZHMocix0KSxyLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9ib3g9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2VsZWN0aW9uLWJveCIsITApLnJlbW92ZSgpLHRoaXMuX2JveEFyZWE9dGhpcy5fYm94LmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNlbGVjdGlvbi1hcmVhIiwhMCl9LHIucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3dpZHRoOnQsaGVpZ2h0OmV9fSxyLnByb3RvdHlwZS5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZ2V0Qm91bmRzKCk6KHRoaXMuX3NldEJvdW5kcyh0KSx0aGlzLl94Qm91bmRzTW9kZT1lLlBJWEVMLHRoaXMuX3lCb3VuZHNNb2RlPWUuUElYRUwsdGhpcy5yZW5kZXIoKSx0aGlzKX0sci5wcm90b3R5cGUuX3NldEJvdW5kcz1mdW5jdGlvbih0KXt2YXIgZT17eDpNYXRoLm1pbih0LnRvcExlZnQueCx0LmJvdHRvbVJpZ2h0LngpLHk6TWF0aC5taW4odC50b3BMZWZ0LnksdC5ib3R0b21SaWdodC55KX0sbj17eDpNYXRoLm1heCh0LnRvcExlZnQueCx0LmJvdHRvbVJpZ2h0LngpLHk6TWF0aC5tYXgodC50b3BMZWZ0LnksdC5ib3R0b21SaWdodC55KX07dGhpcy5fYm94Qm91bmRzPXt0b3BMZWZ0OmUsYm90dG9tUmlnaHQ6bn19LHIucHJvdG90eXBlLl9nZXRCb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm57dG9wTGVmdDp7eDp0aGlzLl94Qm91bmRzTW9kZT09PWUuUElYRUw/dGhpcy5fYm94Qm91bmRzLnRvcExlZnQueDpudWxsPT10aGlzLl94U2NhbGU/MDpNYXRoLm1pbih0aGlzLnhTY2FsZSgpLnNjYWxlKHRoaXMueEV4dGVudCgpWzBdKSx0aGlzLnhTY2FsZSgpLnNjYWxlKHRoaXMueEV4dGVudCgpWzFdKSkseTp0aGlzLl95Qm91bmRzTW9kZT09PWUuUElYRUw/dGhpcy5fYm94Qm91bmRzLnRvcExlZnQueTpudWxsPT10aGlzLl95U2NhbGU/MDpNYXRoLm1pbih0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9LGJvdHRvbVJpZ2h0Ont4OnRoaXMuX3hCb3VuZHNNb2RlPT09ZS5QSVhFTD90aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueDpudWxsPT10aGlzLl94U2NhbGU/MDpNYXRoLm1heCh0aGlzLnhTY2FsZSgpLnNjYWxlKHRoaXMueEV4dGVudCgpWzBdKSx0aGlzLnhTY2FsZSgpLnNjYWxlKHRoaXMueEV4dGVudCgpWzFdKSkseTp0aGlzLl95Qm91bmRzTW9kZT09PWUuUElYRUw/dGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0Lnk6bnVsbD09dGhpcy5feVNjYWxlPzA6TWF0aC5tYXgodGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVswXSksdGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVsxXSkpfX19LHIucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7aWYodC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9ib3hWaXNpYmxlKXt2YXIgZT10aGlzLmJvdW5kcygpLG49ZS50b3BMZWZ0Lnkscj1lLmJvdHRvbVJpZ2h0Lnksbz1lLnRvcExlZnQueCxhPWUuYm90dG9tUmlnaHQueDtpZighKGkuTWF0aC5pc1ZhbGlkTnVtYmVyKG4pJiZpLk1hdGguaXNWYWxpZE51bWJlcihyKSYmaS5NYXRoLmlzVmFsaWROdW1iZXIobykmJmkuTWF0aC5pc1ZhbGlkTnVtYmVyKGEpKSl0aHJvdyBuZXcgRXJyb3IoImJvdW5kcyBoYXZlIG5vdCBiZWVuIHByb3Blcmx5IHNldCIpO3RoaXMuX2JveEFyZWEuYXR0cnMoe3g6byx5Om4sd2lkdGg6YS1vLGhlaWdodDpyLW59KSx0aGlzLmNvbnRlbnQoKS5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fYm94Lm5vZGUoKSl9ZWxzZSB0aGlzLl9ib3gucmVtb3ZlKCk7cmV0dXJuIHRoaXN9LHIucHJvdG90eXBlLmJveFZpc2libGU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fYm94VmlzaWJsZToodGhpcy5fYm94VmlzaWJsZT10LHRoaXMucmVuZGVyKCksdGhpcyl9LHIucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sci5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sci5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3hTY2FsZToobnVsbCE9dGhpcy5feFNjYWxlJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLl94U2NhbGU9dCx0aGlzLl94Qm91bmRzTW9kZT1lLlZBTFVFLHRoaXMuX3hTY2FsZS5vblVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5yZW5kZXIoKSx0aGlzKX0sci5wcm90b3R5cGUueVNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3lTY2FsZToobnVsbCE9dGhpcy5feVNjYWxlJiZ0aGlzLl95U2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLl95U2NhbGU9dCx0aGlzLl95Qm91bmRzTW9kZT1lLlZBTFVFLHRoaXMuX3lTY2FsZS5vblVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5yZW5kZXIoKSx0aGlzKX0sci5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9nZXRYRXh0ZW50KCk6KHRoaXMuX3NldFhFeHRlbnQodCksdGhpcy5feEJvdW5kc01vZGU9ZS5WQUxVRSx0aGlzLnJlbmRlcigpLHRoaXMpfSxyLnByb3RvdHlwZS5fZ2V0WEV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl94Qm91bmRzTW9kZT09PWUuVkFMVUU/dGhpcy5feEV4dGVudDpudWxsPT10aGlzLl94U2NhbGU/W3ZvaWQgMCx2b2lkIDBdOlt0aGlzLl94U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy50b3BMZWZ0LngpLHRoaXMuX3hTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0LngpXX0sci5wcm90b3R5cGUuX3NldFhFeHRlbnQ9ZnVuY3Rpb24odCl7dGhpcy5feEV4dGVudD10fSxyLnByb3RvdHlwZS55RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2dldFlFeHRlbnQoKToodGhpcy5fc2V0WUV4dGVudCh0KSx0aGlzLl95Qm91bmRzTW9kZT1lLlZBTFVFLHRoaXMucmVuZGVyKCksdGhpcyl9LHIucHJvdG90eXBlLl9nZXRZRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3lCb3VuZHNNb2RlPT09ZS5WQUxVRT90aGlzLl95RXh0ZW50Om51bGw9PXRoaXMuX3lTY2FsZT9bdm9pZCAwLHZvaWQgMF06W3RoaXMuX3lTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLnRvcExlZnQueSksdGhpcy5feVNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueSldfSxyLnByb3RvdHlwZS5fc2V0WUV4dGVudD1mdW5jdGlvbih0KXt0aGlzLl95RXh0ZW50PXR9LHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksbnVsbCE9dGhpcy5feFNjYWxlJiZ0aGlzLnhTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksbnVsbCE9dGhpcy5feVNjYWxlJiZ0aGlzLnlTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayl9LHJ9KShyLkNvbXBvbmVudCk7dC5TZWxlY3Rpb25Cb3hMYXllcj1vfSkoSmJ0KSwKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KHJidCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFFidD11Tyx0eHQ9b2J0LGV4dD1GZ3Qsbnh0PWJtdCxpeHQ9aWJ0LHJ4dD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5fZGV0ZWN0aW9uUmFkaXVzPTMsZS5fcmVzaXphYmxlPSExLGUuX21vdmFibGU9ITEsZS5faGFzQ29ybmVycz0hMCxlLmFkZENsYXNzKCJkcmFnLWJveC1sYXllciIpLGUuX2RyYWdJbnRlcmFjdGlvbj1uZXcgdHh0LkRyYWcsZS5fc2V0VXBDYWxsYmFja3MoKSxlLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8oZSksZS5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBleHQuQ2FsbGJhY2tTZXQsZS5fZHJhZ0NhbGxiYWNrcz1uZXcgZXh0LkNhbGxiYWNrU2V0LGUuX2RyYWdFbmRDYWxsYmFja3M9bmV3IGV4dC5DYWxsYmFja1NldCxlfXJldHVybiBRYnQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX3NldFVwQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLGkscj10aGlzLG89MCxhPWZ1bmN0aW9uKGEpe3Q9ci5fZ2V0UmVzaXppbmdFZGdlcyhhKTt2YXIgcz1yLmJvdW5kcygpLGw9cy50b3BMZWZ0Lng8PWEueCYmYS54PD1zLmJvdHRvbVJpZ2h0LngmJnMudG9wTGVmdC55PD1hLnkmJmEueTw9cy5ib3R0b21SaWdodC55O3IuYm94VmlzaWJsZSgpJiYodC50b3B8fHQuYm90dG9tfHx0LmxlZnR8fHQucmlnaHQpP289MTpyLmJveFZpc2libGUoKSYmci5tb3ZhYmxlKCkmJmw/bz0yOihvPTAsci5fc2V0Qm91bmRzKHt0b3BMZWZ0OmEsYm90dG9tUmlnaHQ6YX0pLHIuX3hCb3VuZHNNb2RlPT09aXh0LlByb3BlcnR5TW9kZS5WQUxVRSYmbnVsbCE9ci54U2NhbGUoKSYmci5fc2V0WEV4dGVudChbci54U2NhbGUoKS5pbnZlcnQoYS54KSxyLnhTY2FsZSgpLmludmVydChhLngpXSksci5feUJvdW5kc01vZGU9PT1peHQuUHJvcGVydHlNb2RlLlZBTFVFJiZudWxsIT1yLnlTY2FsZSgpJiZyLl9zZXRZRXh0ZW50KFtyLnlTY2FsZSgpLmludmVydChhLnkpLHIueVNjYWxlKCkuaW52ZXJ0KGEueSldKSxyLnJlbmRlcigpKSxyLmJveFZpc2libGUoITApLHM9ci5ib3VuZHMoKSxlPXt4OnMudG9wTGVmdC54LHk6cy50b3BMZWZ0Lnl9LG49e3g6cy5ib3R0b21SaWdodC54LHk6cy5ib3R0b21SaWdodC55fSxpPWEsci5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3Mocyl9LHM9ZnVuY3Rpb24oYSxzKXtzd2l0Y2gobyl7Y2FzZSAwOm4ueD1zLngsbi55PXMueTticmVhaztjYXNlIDE6dC5ib3R0b20/bi55PXMueTp0LnRvcCYmKGUueT1zLnkpLHQucmlnaHQ/bi54PXMueDp0LmxlZnQmJihlLng9cy54KTticmVhaztjYXNlIDI6dmFyIGw9cy54LWkueCxjPXMueS1pLnk7ZS54Kz1sLGUueSs9YyxuLngrPWwsbi55Kz1jLGk9c31yLl9zZXRCb3VuZHMoe3RvcExlZnQ6ZSxib3R0b21SaWdodDpufSksci5feEJvdW5kc01vZGU9PT1peHQuUHJvcGVydHlNb2RlLlZBTFVFJiZudWxsIT1yLnhTY2FsZSgpJiZyLl9zZXRYRXh0ZW50KFtyLnhTY2FsZSgpLmludmVydChlLngpLHIueFNjYWxlKCkuaW52ZXJ0KG4ueCldKSxyLl95Qm91bmRzTW9kZT09PWl4dC5Qcm9wZXJ0eU1vZGUuVkFMVUUmJm51bGwhPXIueVNjYWxlKCkmJnIuX3NldFlFeHRlbnQoW3IueVNjYWxlKCkuaW52ZXJ0KGUueSksci55U2NhbGUoKS5pbnZlcnQobi55KV0pLHIucmVuZGVyKCksci5fZHJhZ0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHIuYm91bmRzKCkpfSxsPWZ1bmN0aW9uKHQsZSl7MD09PW8mJnQueD09PWUueCYmdC55PT09ZS55JiZyLmJveFZpc2libGUoITEpLHIuX2RyYWdFbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhyLmJvdW5kcygpKX07dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ1N0YXJ0KGEpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcocyksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChsKSx0aGlzLl9kaXNjb25uZWN0SW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ1N0YXJ0KGEpLHIuX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnKHMpLHIuX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnRW5kKGwpLHIuX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKX19LGUucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4gZS5fYm94LmFwcGVuZCgibGluZSIpLnN0eWxlcyh7b3BhY2l0eTowLHN0cm9rZToicGluayIsInBvaW50ZXItZXZlbnRzIjoidmlzaWJsZVN0cm9rZSJ9KX07aWYodGhpcy5fZGV0ZWN0aW9uRWRnZVQ9bigpLmNsYXNzZWQoImRyYWctZWRnZS10YiIsITApLHRoaXMuX2RldGVjdGlvbkVkZ2VCPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtdGIiLCEwKSx0aGlzLl9kZXRlY3Rpb25FZGdlTD1uKCkuY2xhc3NlZCgiZHJhZy1lZGdlLWxyIiwhMCksdGhpcy5fZGV0ZWN0aW9uRWRnZVI9bigpLmNsYXNzZWQoImRyYWctZWRnZS1sciIsITApLHRoaXMuX2hhc0Nvcm5lcnMpe3ZhciBpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuX2JveC5hcHBlbmQoImNpcmNsZSIpLnN0eWxlcyh7b3BhY2l0eTowLGZpbGw6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVGaWxsIn0pfTt0aGlzLl9kZXRlY3Rpb25Db3JuZXJUTD1pKCkuY2xhc3NlZCgiZHJhZy1jb3JuZXItdGwiLCEwKSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJUUj1pKCkuY2xhc3NlZCgiZHJhZy1jb3JuZXItdHIiLCEwKSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJCTD1pKCkuY2xhc3NlZCgiZHJhZy1jb3JuZXItYmwiLCEwKSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJCUj1pKCkuY2xhc3NlZCgiZHJhZy1jb3JuZXItYnIiLCEwKX19LGUucHJvdG90eXBlLl9nZXRSZXNpemluZ0VkZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXt0b3A6ITEsYm90dG9tOiExLGxlZnQ6ITEscmlnaHQ6ITF9O2lmKCF0aGlzLnJlc2l6YWJsZSgpKXJldHVybiBlO3ZhciBuPXRoaXMuYm91bmRzKCksaT1uLnRvcExlZnQueSxyPW4uYm90dG9tUmlnaHQueSxvPW4udG9wTGVmdC54LGE9bi5ib3R0b21SaWdodC54LHM9dGhpcy5fZGV0ZWN0aW9uUmFkaXVzO3JldHVybiBvLXM8PXQueCYmdC54PD1hK3MmJihlLnRvcD1pLXM8PXQueSYmdC55PD1pK3MsZS5ib3R0b209ci1zPD10LnkmJnQueTw9citzKSxpLXM8PXQueSYmdC55PD1yK3MmJihlLmxlZnQ9by1zPD10LngmJnQueDw9bytzLGUucmlnaHQ9YS1zPD10LngmJnQueDw9YStzKSxlfSxlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe2lmKHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5ib3hWaXNpYmxlKCkpe3ZhciBlPXRoaXMuYm91bmRzKCksbj1lLnRvcExlZnQueSxpPWUuYm90dG9tUmlnaHQueSxyPWUudG9wTGVmdC54LG89ZS5ib3R0b21SaWdodC54O3RoaXMuX2RldGVjdGlvbkVkZ2VULmF0dHJzKHt4MTpyLHkxOm4seDI6byx5MjpuLCJzdHJva2Utd2lkdGgiOjIqdGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpcy5fZGV0ZWN0aW9uRWRnZUIuYXR0cnMoe3gxOnIseTE6aSx4MjpvLHkyOmksInN0cm9rZS13aWR0aCI6Mip0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25FZGdlTC5hdHRycyh7eDE6cix5MTpuLHgyOnIseTI6aSwic3Ryb2tlLXdpZHRoIjoyKnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkVkZ2VSLmF0dHJzKHt4MTpvLHkxOm4seDI6byx5MjppLCJzdHJva2Utd2lkdGgiOjIqdGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpcy5faGFzQ29ybmVycyYmKHRoaXMuX2RldGVjdGlvbkNvcm5lclRMLmF0dHJzKHtjeDpyLGN5Om4scjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJUUi5hdHRycyh7Y3g6byxjeTpuLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQkwuYXR0cnMoe2N4OnIsY3k6aSxyOnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkNvcm5lckJSLmF0dHJzKHtjeDpvLGN5Omkscjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSl9cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLmRldGVjdGlvblJhZGl1cz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9kZXRlY3Rpb25SYWRpdXM7aWYodDwwKXRocm93IG5ldyBFcnJvcigiZGV0ZWN0aW9uIHJhZGl1cyBjYW5ub3QgYmUgbmVnYXRpdmUuIik7cmV0dXJuIHRoaXMuX2RldGVjdGlvblJhZGl1cz10LHRoaXMucmVuZGVyKCksdGhpc30sZS5wcm90b3R5cGUucmVzaXphYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3Jlc2l6YWJsZToodGhpcy5fcmVzaXphYmxlPXQsdGhpcy5fc2V0UmVzaXphYmxlQ2xhc3Nlcyh0KSx0aGlzKX0sZS5wcm90b3R5cGUuX3NldFJlc2l6YWJsZUNsYXNzZXM9ZnVuY3Rpb24odCl7dCYmdGhpcy5lbmFibGVkKCk/KHRoaXMuYWRkQ2xhc3MoIngtcmVzaXphYmxlIiksdGhpcy5hZGRDbGFzcygieS1yZXNpemFibGUiKSk6KHRoaXMucmVtb3ZlQ2xhc3MoIngtcmVzaXphYmxlIiksdGhpcy5yZW1vdmVDbGFzcygieS1yZXNpemFibGUiKSl9LGUucHJvdG90eXBlLm1vdmFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fbW92YWJsZToodGhpcy5fbW92YWJsZT10LHRoaXMuX3NldE1vdmFibGVDbGFzcygpLHRoaXMpfSxlLnByb3RvdHlwZS5fc2V0TW92YWJsZUNsYXNzPWZ1bmN0aW9uKCl7dGhpcy5tb3ZhYmxlKCkmJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoIm1vdmFibGUiKTp0aGlzLnJlbW92ZUNsYXNzKCJtb3ZhYmxlIil9LGUucHJvdG90eXBlLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmRHJhZ0VuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUuZHJhZ0ludGVyYWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdJbnRlcmFjdGlvbn0sZS5wcm90b3R5cGUuZW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9kcmFnSW50ZXJhY3Rpb24uZW5hYmxlZCgpOih0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZW5hYmxlZCh0KSx0aGlzLl9zZXRSZXNpemFibGVDbGFzc2VzKHRoaXMucmVzaXphYmxlKCkpLHRoaXMuX3NldE1vdmFibGVDbGFzcygpLHRoaXMpfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZSh0KX0pKSx0aGlzLl9kcmFnQ2FsbGJhY2tzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZSh0KX0pKSx0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9kcmFnRW5kQ2FsbGJhY2tzLmRlbGV0ZSh0KX0pKSx0aGlzLl9kaXNjb25uZWN0SW50ZXJhY3Rpb24oKX0sZS5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc2V0U3RhdGUoKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCksdC5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyksdGhpc30sZS5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKGUpe3JldHVybiBlPW54dC5jb2VyY2VFeHRlcm5hbEQzKGUpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5hdHRhY2hUbyh0aGlzKSx0LnByb3RvdHlwZS5hbmNob3IuY2FsbCh0aGlzLGUpLHRoaXN9LGUucHJvdG90eXBlLl9yZXNldFN0YXRlPWZ1bmN0aW9uKCl7dGhpcy5ib3VuZHMoe3RvcExlZnQ6e3g6MCx5OjB9LGJvdHRvbVJpZ2h0Ont4OjAseTowfX0pfSxlfSkoSmJ0LlNlbGVjdGlvbkJveExheWVyKTtyYnQuRHJhZ0JveExheWVyPXJ4dDt2YXIgb3h0PXt9LGF4dD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGF4dCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHN4dCxseHQ9dU8sY3h0PUZndCx1eHQ9Qmd0OyEoZnVuY3Rpb24odCl7dFt0LlZBTFVFPTBdPSJWQUxVRSIsdFt0LlBJWEVMPTFdPSJQSVhFTCJ9KShzeHR8fChzeHQ9e30pKTt2YXIgaHh0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztpZihpLl9tb2RlPXN4dC5WQUxVRSxuIT09ZS5PUklFTlRBVElPTl9WRVJUSUNBTCYmbiE9PWUuT1JJRU5UQVRJT05fSE9SSVpPTlRBTCl0aHJvdyBuZXcgRXJyb3IobisiIGlzIG5vdCBhIHZhbGlkIG9yaWVudGF0aW9uIGZvciBHdWlkZUxpbmVMYXllciIpO3JldHVybiBpLl9vcmllbnRhdGlvbj1uLGkuX292ZXJmbG93SGlkZGVuPSEwLGkuYWRkQ2xhc3MoImd1aWRlLWxpbmUtbGF5ZXIiKSxpLl9pc1ZlcnRpY2FsKCk/aS5hZGRDbGFzcygidmVydGljYWwiKTppLmFkZENsYXNzKCJob3Jpem9udGFsIiksaS5fc2NhbGVVcGRhdGVDYWxsYmFjaz1mdW5jdGlvbigpe2kuX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWUoKSxpLnJlbmRlcigpfSxpfXJldHVybiBseHQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fZ3VpZGVMaW5lPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImd1aWRlLWxpbmUiLCEwKX0sZS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm57d2lkdGg6dCxoZWlnaHQ6ZX19LGUucHJvdG90eXBlLl9pc1ZlcnRpY2FsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9uPT09ZS5PUklFTlRBVElPTl9WRVJUSUNBTH0sZS5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMsZSxuLGkpLG51bGwhPXRoaXMuc2NhbGUoKSYmKHRoaXMuX2lzVmVydGljYWwoKT90aGlzLnNjYWxlKCkucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSk6dGhpcy5zY2FsZSgpLnJhbmdlKFt0aGlzLmhlaWdodCgpLDBdKSksdGhpc30sZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5fZ3VpZGVMaW5lLmF0dHJzKHt4MTp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6MCx5MTp0aGlzLl9pc1ZlcnRpY2FsKCk/MDp0aGlzLnBpeGVsUG9zaXRpb24oKSx4Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6dGhpcy53aWR0aCgpLHkyOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLmhlaWdodCgpOnRoaXMucGl4ZWxQb3NpdGlvbigpfSksdGhpc30sZS5wcm90b3R5cGUuX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWU9ZnVuY3Rpb24oKXtudWxsIT10aGlzLnNjYWxlKCkmJih0aGlzLl9tb2RlPT09c3h0LlZBTFVFJiZudWxsIT10aGlzLnZhbHVlKCk/dGhpcy5fcGl4ZWxQb3NpdGlvbj10aGlzLnNjYWxlKCkuc2NhbGUodGhpcy52YWx1ZSgpKTp0aGlzLl9tb2RlPT09c3h0LlBJWEVMJiZudWxsIT10aGlzLnBpeGVsUG9zaXRpb24oKSYmKHRoaXMuX3ZhbHVlPXRoaXMuc2NhbGUoKS5pbnZlcnQodGhpcy5waXhlbFBvc2l0aW9uKCkpKSl9LGUucHJvdG90eXBlLl9zZXRQaXhlbFBvc2l0aW9uV2l0aG91dENoYW5naW5nTW9kZT1mdW5jdGlvbih0KXt0aGlzLl9waXhlbFBvc2l0aW9uPXQsbnVsbCE9dGhpcy5zY2FsZSgpJiYodGhpcy5fdmFsdWU9dGhpcy5zY2FsZSgpLmludmVydCh0aGlzLnBpeGVsUG9zaXRpb24oKSkpLHRoaXMucmVuZGVyKCl9LGUucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3NjYWxlO3ZhciBlPXRoaXMuX3NjYWxlO3JldHVybiBudWxsIT1lJiZlLm9mZlVwZGF0ZSh0aGlzLl9zY2FsZVVwZGF0ZUNhbGxiYWNrKSx0aGlzLl9zY2FsZT10LHRoaXMuX3NjYWxlLm9uVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spLHRoaXMuX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWUoKSx0aGlzLnJlZHJhdygpLHRoaXN9LGUucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3ZhbHVlOih0aGlzLl92YWx1ZT10LHRoaXMuX21vZGU9c3h0LlZBTFVFLHRoaXMuX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5waXhlbFBvc2l0aW9uPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3BpeGVsUG9zaXRpb247aWYoIWN4dC5NYXRoLmlzVmFsaWROdW1iZXIodCkpdGhyb3cgbmV3IEVycm9yKCJwaXhlbFBvc2l0aW9uIG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyIik7cmV0dXJuIHRoaXMuX3BpeGVsUG9zaXRpb249dCx0aGlzLl9tb2RlPXN4dC5QSVhFTCx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLG51bGwhPXRoaXMuc2NhbGUoKSYmdGhpcy5zY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9zY2FsZVVwZGF0ZUNhbGxiYWNrKX0sZS5PUklFTlRBVElPTl9WRVJUSUNBTD0idmVydGljYWwiLGUuT1JJRU5UQVRJT05fSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsZX0pKHV4dC5Db21wb25lbnQpO2F4dC5HdWlkZUxpbmVMYXllcj1oeHQsCi8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShveHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBkeHQ9dU8scHh0PW9idCxmeHQ9Rmd0LG14dD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztuLl9kZXRlY3Rpb25SYWRpdXM9MyxuLl9lbmFibGVkPSEwLG4uYWRkQ2xhc3MoImRyYWctbGluZS1sYXllciIpLG4uYWRkQ2xhc3MoImVuYWJsZWQiKSxuLl9kcmFnSW50ZXJhY3Rpb249bmV3IHB4dC5EcmFnLG4uX2RyYWdJbnRlcmFjdGlvbi5hdHRhY2hUbyhuKTt2YXIgaT0hMSxyPWZ1bmN0aW9uKHQpeyhmdW5jdGlvbih0KXtyZXR1cm4gbi5faXNWZXJ0aWNhbCgpJiZuLnBpeGVsUG9zaXRpb24oKS1uLmRldGVjdGlvblJhZGl1cygpPD10LngmJnQueDw9bi5waXhlbFBvc2l0aW9uKCkrbi5kZXRlY3Rpb25SYWRpdXMoKXx8IW4uX2lzVmVydGljYWwoKSYmbi5waXhlbFBvc2l0aW9uKCktbi5kZXRlY3Rpb25SYWRpdXMoKTw9dC55JiZ0Lnk8PW4ucGl4ZWxQb3NpdGlvbigpK24uZGV0ZWN0aW9uUmFkaXVzKCl9KSh0KSYmKGk9ITAsbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtuLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQocik7dmFyIG89ZnVuY3Rpb24odCxlKXtpJiYobi5fc2V0UGl4ZWxQb3NpdGlvbldpdGhvdXRDaGFuZ2luZ01vZGUobi5faXNWZXJ0aWNhbCgpP2UueDplLnkpLG4uX2RyYWdDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSl9O24uX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcobyk7dmFyIGE9ZnVuY3Rpb24odCxlKXtpJiYoaT0hMSxuLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtyZXR1cm4gbi5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChhKSxuLl9kaXNjb25uZWN0SW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtuLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ1N0YXJ0KHIpLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnKG8pLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnRW5kKGEpLG4uX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKX0sbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBmeHQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0NhbGxiYWNrcz1uZXcgZnh0LkNhbGxiYWNrU2V0LG4uX2RyYWdFbmRDYWxsYmFja3M9bmV3IGZ4dC5DYWxsYmFja1NldCxufXJldHVybiBkeHQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fZGV0ZWN0aW9uRWRnZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCxzdHJva2U6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVTdHJva2UifSkuY2xhc3NlZCgiZHJhZy1lZGdlIiwhMCl9LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5fZGV0ZWN0aW9uRWRnZS5hdHRycyh7eDE6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOjAseTE6dGhpcy5faXNWZXJ0aWNhbCgpPzA6dGhpcy5waXhlbFBvc2l0aW9uKCkseDI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOnRoaXMud2lkdGgoKSx5Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLnBpeGVsUG9zaXRpb24oKSwic3Ryb2tlLXdpZHRoIjoyKnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXN9LGUucHJvdG90eXBlLmRldGVjdGlvblJhZGl1cz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9kZXRlY3Rpb25SYWRpdXM7aWYodDwwKXRocm93IG5ldyBFcnJvcigiZGV0ZWN0aW9uIHJhZGl1cyBjYW5ub3QgYmUgbmVnYXRpdmUuIik7cmV0dXJuIHRoaXMuX2RldGVjdGlvblJhZGl1cz10LHRoaXMucmVuZGVyKCksdGhpc30sZS5wcm90b3R5cGUuZW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9lbmFibGVkOih0aGlzLl9lbmFibGVkPXQsdD90aGlzLmFkZENsYXNzKCJlbmFibGVkIik6dGhpcy5yZW1vdmVDbGFzcygiZW5hYmxlZCIpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5lbmFibGVkKHQpLHRoaXMpfSxlLnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUodCl9KSksdGhpcy5fZHJhZ0NhbGxiYWNrcy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fZHJhZ0NhbGxiYWNrcy5kZWxldGUodCl9KSksdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUodCl9KSksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9LGV9KShheHQuR3VpZGVMaW5lTGF5ZXIpO294dC5EcmFnTGluZUxheWVyPW14dDt2YXIgZ3h0PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShneHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBfeHQ9dU87ZnVuY3Rpb24geXh0KHQsZSxuKXt2YXIgaT17fTtpZih2b2lkIDAhPT1uKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKWlbbltyXV09bltyLTFdO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixvPXQuc2NhbGUobik7aWYoIWUpcmV0dXJuIG87dmFyIGE9dm9pZCAwPT09aVtuXT92b2lkIDA6dC5zY2FsZShpW25dKTtyZXR1cm4gdm9pZCAwIT09YSYmKHI9YSsoby1hKS8yKSxyfX12YXIgdnh0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLmFkZENsYXNzKCJncmlkbGluZXMiKSxpLl94U2NhbGU9ZSxpLl95U2NhbGU9bixpLl9yZW5kZXJDYWxsYmFjaz1mdW5jdGlvbih0KXtyZXR1cm4gaS5yZW5kZXIoKX0saS5feFNjYWxlJiZpLl94U2NhbGUub25VcGRhdGUoaS5fcmVuZGVyQ2FsbGJhY2spLGkuX3lTY2FsZSYmaS5feVNjYWxlLm9uVXBkYXRlKGkuX3JlbmRlckNhbGxiYWNrKSxpfXJldHVybiBfeHQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuYmV0d2Vlblg9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5fYmV0d2Vlblg6KHQhPT10aGlzLl9iZXR3ZWVuWCYmKHRoaXMuX2JldHdlZW5YPXQsdGhpcy5yZW5kZXIoKSksdGhpcyl9LGUucHJvdG90eXBlLmJldHdlZW5ZPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P3RoaXMuX2JldHdlZW5ZOih0IT09dGhpcy5fYmV0d2VlblkmJih0aGlzLl9iZXR3ZWVuWT10LHRoaXMucmVuZGVyKCkpLHRoaXMpfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl94U2NhbGUmJnRoaXMuX3hTY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVuZGVyQ2FsbGJhY2spLHRoaXMuX3lTY2FsZSYmdGhpcy5feVNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayksdGhpc30sZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5feExpbmVzQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtZ3JpZGxpbmVzIiwhMCksdGhpcy5feUxpbmVzQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInktZ3JpZGxpbmVzIiwhMCl9LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5fcmVkcmF3WExpbmVzKCksdGhpcy5fcmVkcmF3WUxpbmVzKCksdGhpc30sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihlLG4saSl7cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLGUsbixpKSxudWxsIT10aGlzLl94U2NhbGUmJnRoaXMuX3hTY2FsZS5yYW5nZShbMCx0aGlzLndpZHRoKCldKSxudWxsIT10aGlzLl95U2NhbGUmJnRoaXMuX3lTY2FsZS5yYW5nZShbdGhpcy5oZWlnaHQoKSwwXSksdGhpc30sZS5wcm90b3R5cGUuX3JlZHJhd1hMaW5lcz1mdW5jdGlvbigpe2lmKHRoaXMuX3hTY2FsZSl7dmFyIHQ9dGhpcy5iZXR3ZWVuWCgpLGU9dGhpcy5feFNjYWxlLnRpY2tzKCkuc2xpY2UodD8xOjApLG49dGhpcy5feExpbmVzQ29udGFpbmVyLnNlbGVjdEFsbCgibGluZSIpLmRhdGEoZSk7bi5lbnRlcigpLmFwcGVuZCgibGluZSIpLm1lcmdlKG4pLmF0dHIoIngxIix5eHQodGhpcy5feFNjYWxlLHQsdGhpcy5feFNjYWxlLnRpY2tzKCkpKS5hdHRyKCJ5MSIsMCkuYXR0cigieDIiLHl4dCh0aGlzLl94U2NhbGUsdCx0aGlzLl94U2NhbGUudGlja3MoKSkpLmF0dHIoInkyIix0aGlzLmhlaWdodCgpKS5jbGFzc2VkKCJiZXR3ZWVubGluZSIsdCkuY2xhc3NlZCgiemVyb2xpbmUiLChmdW5jdGlvbih0KXtyZXR1cm4gMD09PXR9KSksbi5leGl0KCkucmVtb3ZlKCl9fSxlLnByb3RvdHlwZS5fcmVkcmF3WUxpbmVzPWZ1bmN0aW9uKCl7aWYodGhpcy5feVNjYWxlKXt2YXIgdD10aGlzLmJldHdlZW5ZKCksZT10aGlzLl95U2NhbGUudGlja3MoKS5zbGljZSh0PzE6MCksbj10aGlzLl95TGluZXNDb250YWluZXIuc2VsZWN0QWxsKCJsaW5lIikuZGF0YShlKTtuLmVudGVyKCkuYXBwZW5kKCJsaW5lIikubWVyZ2UobikuYXR0cigieDEiLDApLmF0dHIoInkxIix5eHQodGhpcy5feVNjYWxlLHQsdGhpcy5feVNjYWxlLnRpY2tzKCkpKS5hdHRyKCJ4MiIsdGhpcy53aWR0aCgpKS5hdHRyKCJ5MiIseXh0KHRoaXMuX3lTY2FsZSx0LHRoaXMuX3lTY2FsZS50aWNrcygpKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHQpLmNsYXNzZWQoInplcm9saW5lIiwoZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10fSkpLG4uZXhpdCgpLnJlbW92ZSgpfX0sZX0pKEJndC5Db21wb25lbnQpO2d4dC5HcmlkbGluZXM9dnh0O3ZhciBieHQ9e30seHh0PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoeHh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgd3h0PXVPLFN4dD1ibXQsTXh0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLl9kZXRhY2hDYWxsYmFjaz1mdW5jdGlvbih0KXtyZXR1cm4gZS5yZW1vdmUodCl9LGV9cmV0dXJuIHd4dC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztyZXR1cm4gZT1TeHQuY29lcmNlRXh0ZXJuYWxEMyhlKSx0LnByb3RvdHlwZS5hbmNob3IuY2FsbCh0aGlzLGUpLHRoaXMuX2ZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFuY2hvcihuLmVsZW1lbnQoKSl9KSksdGhpc30sZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlbmRlcigpfSkpLHRoaXN9LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoImhhcygpIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBDb21wb25lbnRDb250YWluZXIiKX0sZS5wcm90b3R5cGUuX2Fkb3B0QW5kQW5jaG9yPWZ1bmN0aW9uKHQpe3QucGFyZW50KHRoaXMpLHQub25EZXRhY2godGhpcy5fZGV0YWNoQ2FsbGJhY2spLHRoaXMuX2lzQW5jaG9yZWQmJnQuYW5jaG9yKHRoaXMuZWxlbWVudCgpKX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhcyh0KSYmKHQub2ZmRGV0YWNoKHRoaXMuX2RldGFjaENhbGxiYWNrKSx0aGlzLl9yZW1vdmUodCksdC5kZXRhY2goKSx0aGlzLnJlZHJhdygpKSx0aGlzfSxlLnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiExfSxlLnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIl9mb3JFYWNoKCkgaXMgbm90IGltcGxlbWVudGVkIG9uIENvbXBvbmVudENvbnRhaW5lciIpfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2ZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pKX0sZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dGhpcy5fZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaW52YWxpZGF0ZUNhY2hlKCl9KSl9LGV9KShCZ3QuQ29tcG9uZW50KTt4eHQuQ29tcG9uZW50Q29udGFpbmVyPU14dCwKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGJ4dCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEV4dD11TyxUeHQ9Rmd0LEN4dD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9jb21wb25lbnRzPVtdLG4uYWRkQ2xhc3MoImNvbXBvbmVudC1ncm91cCIpLGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIG4uYXBwZW5kKHQpfSkpLG59cmV0dXJuIEV4dC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbih0KXt0aGlzLmNvbXBvbmVudHMoKS5mb3JFYWNoKHQpfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuaW5kZXhPZih0KT49MH0sZS5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9jb21wb25lbnRzLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVxdWVzdGVkU3BhY2UodCxlKX0pKTtyZXR1cm57bWluV2lkdGg6VHh0Lk1hdGgubWF4KG4sKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1pbldpZHRofSksMCksbWluSGVpZ2h0OlR4dC5NYXRoLm1heChuLChmdW5jdGlvbih0KXtyZXR1cm4gdC5taW5IZWlnaHR9KSwwKX19LGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24oZSxuLGkpe3ZhciByPXRoaXM7cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLGUsbixpKSx0aGlzLl9mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNvbXB1dGVMYXlvdXQoe3g6MCx5OjB9LHIud2lkdGgoKSxyLmhlaWdodCgpKX0pKSx0aGlzfSxlLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybnt3aWR0aDp0LGhlaWdodDplfX0sZS5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC5maXhlZFdpZHRoKCl9KSl9LGUucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZpeGVkSGVpZ2h0KCl9KSl9LGUucHJvdG90eXBlLmNvbXBvbmVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29tcG9uZW50cy5zbGljZSgpfSxlLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXR8fHRoaXMuaGFzKHQpfHwodC5kZXRhY2goKSx0aGlzLl9jb21wb25lbnRzLnB1c2godCksdGhpcy5fYWRvcHRBbmRBbmNob3IodCksdGhpcy5yZWRyYXcoKSksdGhpc30sZS5wcm90b3R5cGUuX3JlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9jb21wb25lbnRzLmluZGV4T2YodCk7cmV0dXJuIGU+PTAmJih0aGlzLl9jb21wb25lbnRzLnNwbGljZShlLDEpLCEwKX0sZX0pKHh4dC5Db21wb25lbnRDb250YWluZXIpO2J4dC5Hcm91cD1DeHQ7dmFyIEF4dD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi9PYmplY3QuZGVmaW5lUHJvcGVydHkoQXh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIga3h0PXVPLEx4dD1JbXQsUHh0PUxfdCxOeHQ9Z3l0LEl4dD1GZ3QsUnh0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztpZihuLl90ZXh0UGFkZGluZz01LG51bGw9PWUpdGhyb3cgbmV3IEVycm9yKCJJbnRlcnBvbGF0ZWRDb2xvckxlZ2VuZCByZXF1aXJlcyBhIGludGVycG9sYXRlZENvbG9yU2NhbGUiKTtyZXR1cm4gbi5fc2NhbGU9ZSxuLl9yZWRyYXdDYWxsYmFjaz1mdW5jdGlvbih0KXtyZXR1cm4gbi5yZWRyYXcoKX0sbi5fc2NhbGUub25VcGRhdGUobi5fcmVkcmF3Q2FsbGJhY2spLG4uX2Zvcm1hdHRlcj1OeHQuZ2VuZXJhbCgpLG4uX29yaWVudGF0aW9uPSJob3Jpem9udGFsIixuLl9leHBhbmRzPSExLG4uYWRkQ2xhc3MoImxlZ2VuZCIpLG4uYWRkQ2xhc3MoImludGVycG9sYXRlZC1jb2xvci1sZWdlbmQiKSxufXJldHVybiBreHQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spfSxlLnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLnByb3RvdHlwZS5leHBhbmRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2V4cGFuZHM6KHRoaXMuX2V4cGFuZHM9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLl9lbnN1cmVPcmllbnRhdGlvbj1mdW5jdGlvbih0KXtpZigiaG9yaXpvbnRhbCI9PT0odD10LnRvTG93ZXJDYXNlKCkpfHwibGVmdCI9PT10fHwicmlnaHQiPT09dClyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoJyInK3QrJyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEludGVycG9sYXRlZENvbG9yTGVnZW5kJyl9LGUucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX29yaWVudGF0aW9uOih0aGlzLl9vcmllbnRhdGlvbj1lLl9lbnN1cmVPcmllbnRhdGlvbih0KSx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHx0aGlzLl9pc1ZlcnRpY2FsKCl9LGUucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHwhdGhpcy5faXNWZXJ0aWNhbCgpfSxlLnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrcz1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD1lLl9ERUZBVUxUX05VTV9TV0FUQ0hFUyk7dmFyIG49dGhpcy5fc2NhbGUuZG9tYWluKCk7aWYoMT09PXQpcmV0dXJuW25bMF1dO2Zvcih2YXIgaT0oblsxXS1uWzBdKS8odC0xKSxyPVtdLG89MDtvPHQ7bysrKXIucHVzaChuWzBdK2kqbyk7cmV0dXJuIHJ9LGUucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3QucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3N3YXRjaENvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzd2F0Y2gtY29udGFpbmVyIiwhMCksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3g9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic3dhdGNoLWJvdW5kaW5nLWJveCIsITApLHRoaXMuX2xvd2VyTGFiZWw9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZChlLkxFR0VORF9MQUJFTF9DTEFTUywhMCksdGhpcy5fdXBwZXJMYWJlbD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKGUuTEVHRU5EX0xBQkVMX0NMQVNTLCEwKTt2YXIgbj1uZXcgTHh0LlN2Z0NvbnRleHQodGhpcy5jb250ZW50KCkubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgTHh0Lk1lYXN1cmVyKG4pLHRoaXMuX3dyYXBwZXI9bmV3IEx4dC5XcmFwcGVyLHRoaXMuX3dyaXRlcj1uZXcgTHh0LldyaXRlcih0aGlzLl9tZWFzdXJlcixuLHRoaXMuX3dyYXBwZXIpfSxlLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LG4pe3ZhciBpLHIsbz10aGlzLGE9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCxzPWEsbD10aGlzLl9zY2FsZS5kb21haW4oKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBvLl9tZWFzdXJlci5tZWFzdXJlKG8uX2Zvcm1hdHRlcih0KSkud2lkdGh9KSksYz1lLl9ERUZBVUxUX05VTV9TV0FUQ0hFUztpZih0aGlzLl9pc1ZlcnRpY2FsKCkpe3ZhciB1PUl4dC5NYXRoLm1heChsLDApO3I9cythK3RoaXMuX3RleHRQYWRkaW5nK3UrdGhpcy5fdGV4dFBhZGRpbmcsaT1jKmF9ZWxzZSBpPXMrYStzLHI9dGhpcy5fdGV4dFBhZGRpbmcrbFswXStjKmErbFsxXSt0aGlzLl90ZXh0UGFkZGluZztyZXR1cm57bWluV2lkdGg6cixtaW5IZWlnaHQ6aX19LGUucHJvdG90eXBlLl9pc1ZlcnRpY2FsPWZ1bmN0aW9uKCl7cmV0dXJuImhvcml6b250YWwiIT09dGhpcy5fb3JpZW50YXRpb259LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciBuLGkscixvLGEscyxsPXRoaXMuX3NjYWxlLmRvbWFpbigpLGM9dGhpcy5fZm9ybWF0dGVyKGxbMF0pLHU9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShjKS53aWR0aCxoPXRoaXMuX2Zvcm1hdHRlcihsWzFdKSxkPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoaCkud2lkdGgscD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LGY9dGhpcy5fdGV4dFBhZGRpbmcsbT17eDowLHk6MH0sZz17eDowLHk6MH0sXz17eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIix0ZXh0Um90YXRpb246MH0seT17eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIix0ZXh0Um90YXRpb246MH0sdj17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfTtpZih0aGlzLl9pc1ZlcnRpY2FsKCkpe3M9TWF0aC5mbG9vcih0aGlzLmhlaWdodCgpKTt2YXIgYj1NYXRoLm1heCh1LGQpO2E9KHRoaXMud2lkdGgoKS1iLTIqdGhpcy5fdGV4dFBhZGRpbmcpLzIsbj1NYXRoLm1heCh0aGlzLndpZHRoKCktYS0yKmYtYiwwKSxpPTEsbz1mdW5jdGlvbih0LG4pe3JldHVybiBlLmhlaWdodCgpLShuKzEpfSx5LnlBbGlnbj0idG9wIixtLnk9MCxfLnlBbGlnbj0iYm90dG9tIixnLnk9MCwibGVmdCI9PT10aGlzLl9vcmllbnRhdGlvbj8ocj1mdW5jdGlvbih0LGUpe3JldHVybiBmK2IrZn0seS54QWxpZ249InJpZ2h0IixtLng9LShhK24rZiksXy54QWxpZ249InJpZ2h0IixnLng9LShhK24rZikpOihyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGF9LHkueEFsaWduPSJsZWZ0IixtLng9YStuK2YsXy54QWxpZ249ImxlZnQiLGcueD1hK24rZiksdi53aWR0aD1uLHYuaGVpZ2h0PXMqaX1lbHNlIGE9TWF0aC5tYXgoZiwodGhpcy5oZWlnaHQoKS1wKS8yKSxzPU1hdGgubWF4KE1hdGguZmxvb3IodGhpcy53aWR0aCgpLTQqZi11LWQpLDApLG49MSxpPU1hdGgubWF4KHRoaXMuaGVpZ2h0KCktMiphLDApLHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5mbG9vcih1KzIqZikrZX0sbz1mdW5jdGlvbih0LGUpe3JldHVybiBhfSx5LnhBbGlnbj0icmlnaHQiLG0ueD0tZixfLnhBbGlnbj0ibGVmdCIsZy54PWYsdi55PWEsdi53aWR0aD1zKm4sdi5oZWlnaHQ9aTt2Lng9cihudWxsLDApLHRoaXMuX3VwcGVyTGFiZWwudGV4dCgiIiksdGhpcy5fd3JpdGVyLndyaXRlKGgsdGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkseSx0aGlzLl91cHBlckxhYmVsLm5vZGUoKSksdGhpcy5fdXBwZXJMYWJlbC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIittLngrIiwgIittLnkrIikiKSx0aGlzLl9sb3dlckxhYmVsLnRleHQoIiIpLHRoaXMuX3dyaXRlci53cml0ZShjLHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpLF8sdGhpcy5fbG93ZXJMYWJlbC5ub2RlKCkpLHRoaXMuX2xvd2VyTGFiZWwuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZy54KyIsICIrZy55KyIpIiksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3guYXR0cnModik7dmFyIHg9dGhpcy5fZ2VuZXJhdGVUaWNrcyhzKSx3PXRoaXMuX3N3YXRjaENvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc3dhdGNoIikuZGF0YSh4KSxTPXcuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzd2F0Y2giLCEwKSxNPXcubWVyZ2UoUyk7cmV0dXJuIHcuZXhpdCgpLnJlbW92ZSgpLE0uYXR0cnMoe2ZpbGw6ZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5fc2NhbGUuc2NhbGUodCl9LHdpZHRoOm4saGVpZ2h0OmkseDpyLHk6bywic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KSxQeHQuQUREX1RJVExFX0VMRU1FTlRTJiZTLmFwcGVuZCgidGl0bGUiKS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gZS5fZm9ybWF0dGVyKHQpfSkpLHRoaXN9LGUuX0RFRkFVTFRfTlVNX1NXQVRDSEVTPTExLGUuTEVHRU5EX0xBQkVMX0NMQVNTPSJsZWdlbmQtbGFiZWwiLGV9KShCZ3QuQ29tcG9uZW50KTtBeHQuSW50ZXJwb2xhdGVkQ29sb3JMZWdlbmQ9Unh0O3ZhciBPeHQ9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovT2JqZWN0LmRlZmluZVByb3BlcnR5KE94dCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHp4dD11TyxEeHQ9SW10LEJ4dD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZvaWQgMD09PWUmJihlPSIiKSx2b2lkIDA9PT1uJiYobj0wKTt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImxhYmVsIiksaS50ZXh0KGUpLGkuYW5nbGUobiksaS54QWxpZ25tZW50KCJjZW50ZXIiKS55QWxpZ25tZW50KCJjZW50ZXIiKSxpLl9wYWRkaW5nPTAsaX1yZXR1cm4genh0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh0aGlzLl90ZXh0KTtyZXR1cm57bWluV2lkdGg6KDA9PT10aGlzLmFuZ2xlKCk/bi53aWR0aDpuLmhlaWdodCkrMip0aGlzLnBhZGRpbmcoKSxtaW5IZWlnaHQ6KDA9PT10aGlzLmFuZ2xlKCk/bi5oZWlnaHQ6bi53aWR0aCkrMip0aGlzLnBhZGRpbmcoKX19LGUucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3QucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3RleHRDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIik7dmFyIGU9bmV3IER4dC5TdmdDb250ZXh0KHRoaXMuX3RleHRDb250YWluZXIubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgRHh0LkNhY2hlTWVhc3VyZXIoZSksdGhpcy5fd3JhcHBlcj1uZXcgRHh0LldyYXBwZXIsdGhpcy5fd3JpdGVyPW5ldyBEeHQuV3JpdGVyKHRoaXMuX21lYXN1cmVyLGUsdGhpcy5fd3JhcHBlciksdGhpcy50ZXh0KHRoaXMuX3RleHQpfSxlLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3RleHQ7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiTGFiZWwudGV4dCgpIG9ubHkgdGFrZXMgc3RyaW5ncyBhcyBpbnB1dCIpO3JldHVybiB0aGlzLl90ZXh0PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5hbmdsZT1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9hbmdsZTtpZigodCU9MzYwKT4xODA/dC09MzYwOnQ8LTE4MCYmKHQrPTM2MCksLTkwIT09dCYmMCE9PXQmJjkwIT09dCl0aHJvdyBuZXcgRXJyb3IodCsiIGlzIG5vdCBhIHZhbGlkIGFuZ2xlIGZvciBMYWJlbCIpO3JldHVybiB0aGlzLl9hbmdsZT10LHRoaXMucmVkcmF3KCksdGhpc30sZS5wcm90b3R5cGUucGFkZGluZz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9wYWRkaW5nO2lmKCh0PSt0KTwwKXRocm93IG5ldyBFcnJvcih0KyIgaXMgbm90IGEgdmFsaWQgcGFkZGluZyB2YWx1ZS4gQ2Fubm90IGJlIGxlc3MgdGhhbiAwLiIpO3JldHVybiB0aGlzLl9wYWRkaW5nPXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl90ZXh0Q29udGFpbmVyLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3ZhciBlPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUodGhpcy5fdGV4dCksbj1NYXRoLm1heChNYXRoLm1pbigodGhpcy5oZWlnaHQoKS1lLmhlaWdodCkvMix0aGlzLnBhZGRpbmcoKSksMCksaT1NYXRoLm1heChNYXRoLm1pbigodGhpcy53aWR0aCgpLWUud2lkdGgpLzIsdGhpcy5wYWRkaW5nKCkpLDApO3RoaXMuX3RleHRDb250YWluZXIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraSsiLCIrbisiKSIpO3ZhciByPXRoaXMud2lkdGgoKS0yKmksbz10aGlzLmhlaWdodCgpLTIqbixhPXt4QWxpZ246dGhpcy54QWxpZ25tZW50KCkseUFsaWduOnRoaXMueUFsaWdubWVudCgpLHRleHRSb3RhdGlvbjp0aGlzLmFuZ2xlKCl9O3JldHVybiB0aGlzLl93cml0ZXIud3JpdGUodGhpcy5fdGV4dCxyLG8sYSksdGhpc30sZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sZX0pKEJndC5Db21wb25lbnQpO094dC5MYWJlbD1CeHQ7dmFyIEh4dD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3ZhciByPXQuY2FsbCh0aGlzLG4saSl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoZS5USVRMRV9MQUJFTF9DTEFTUykscn1yZXR1cm4genh0Ll9fZXh0ZW5kcyhlLHQpLGUuVElUTEVfTEFCRUxfQ0xBU1M9InRpdGxlLWxhYmVsIixlfSkoQnh0KTtPeHQuVGl0bGVMYWJlbD1IeHQ7dmFyIEZ4dD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3ZhciByPXQuY2FsbCh0aGlzLG4saSl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoZS5BWElTX0xBQkVMX0NMQVNTKSxyfXJldHVybiB6eHQuX19leHRlbmRzKGUsdCksZS5BWElTX0xBQkVMX0NMQVNTPSJheGlzLWxhYmVsIixlfSkoQnh0KTtPeHQuQXhpc0xhYmVsPUZ4dDt2YXIgVnh0PXt9LFV4dD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KFV4dCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGp4dD1FZHQ7VXh0LmNpcmNsZT1mdW5jdGlvbiBHeHQoKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGp4dC5zeW1ib2woKS50eXBlKGp4dC5zeW1ib2xDaXJjbGUpLnNpemUoTWF0aC5QSSpNYXRoLnBvdyh0LzIsMikpfX0sVXh0LnNxdWFyZT1mdW5jdGlvbiBXeHQoKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGp4dC5zeW1ib2woKS50eXBlKGp4dC5zeW1ib2xTcXVhcmUpLnNpemUoTWF0aC5wb3codCwyKSl9fSxVeHQuY3Jvc3M9ZnVuY3Rpb24gcXh0KCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBqeHQuc3ltYm9sKCkudHlwZShqeHQuc3ltYm9sQ3Jvc3MpLnNpemUoNS85Kk1hdGgucG93KHQsMikpfX0sVXh0LmRpYW1vbmQ9ZnVuY3Rpb24gWXh0KCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBqeHQuc3ltYm9sKCkudHlwZShqeHQuc3ltYm9sRGlhbW9uZCkuc2l6ZShNYXRoLnRhbihNYXRoLlBJLzYpKk1hdGgucG93KHQsMikvMil9fSxVeHQudHJpYW5nbGU9ZnVuY3Rpb24gWHh0KCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBqeHQuc3ltYm9sKCkudHlwZShqeHQuc3ltYm9sVHJpYW5nbGUpLnNpemUoTWF0aC5zcXJ0KDMpKk1hdGgucG93KHQvMiwyKSl9fSxVeHQuc3Rhcj1mdW5jdGlvbiAkeHQoKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGp4dC5zeW1ib2woKS50eXBlKGp4dC5zeW1ib2xTdGFyKS5zaXplKC44OTA4MTMwOTE1MjkyODUyKk1hdGgucG93KHQvMiwyKSl9fTt2YXIgS3h0PTMqKDEvTWF0aC5zcXJ0KDEyKS8yKzEpO1V4dC53eWU9ZnVuY3Rpb24gWnh0KCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBqeHQuc3ltYm9sKCkudHlwZShqeHQuc3ltYm9sV3llKS5zaXplKEt4dCpNYXRoLnBvdyh0LzIuNCwyKSl9fSwKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ4dCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEp4dD11TyxReHQ9RWR0LHR3dD1JbXQsZXd0PUxfdCxud3Q9Z3l0LGl3dD1VeHQscnd0PUZndCxvd3Q9Qmd0LGF3dD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09biYmKG49MS8wKSx0aGlzLmNvbHVtbnM9dCx0aGlzLmJvdHRvbVBhZGRpbmc9ZSx0aGlzLm1heFdpZHRoPW59cmV0dXJuIHQucHJvdG90eXBlLmFkZENvbHVtbj1mdW5jdGlvbih0KXt2YXIgZT10LndpZHRoLG49dGhpcy5nZXRXaWR0aEF2YWlsYWJsZSgpO3Qud2lkdGg9TWF0aC5taW4obixlKSx0aGlzLmNvbHVtbnMucHVzaCh0KX0sdC5wcm90b3R5cGUuZ2V0Qm91bmRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmNvbHVtbnNbdF0sbj0wLGk9MDtpPHQ7aSsrKW4rPXRoaXMuY29sdW1uc1tpXS53aWR0aDtyZXR1cm57dG9wTGVmdDp7eDpuLHk6MH0sYm90dG9tUmlnaHQ6e3g6bitlLndpZHRoLHk6ZS5oZWlnaHR9fX0sdC5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHJ3dC5NYXRoLm1heCh0aGlzLmNvbHVtbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSksMCkrdGhpcy5ib3R0b21QYWRkaW5nfSx0LnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbih0aGlzLmNvbHVtbnMucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2Uud2lkdGh9KSwwKSx0aGlzLm1heFdpZHRoKX0sdC5wcm90b3R5cGUuZ2V0V2lkdGhBdmFpbGFibGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFdpZHRoKCk7cmV0dXJuIE1hdGgubWF4KHRoaXMubWF4V2lkdGgtdCwwKX0sdH0pKCksc3d0PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dm9pZCAwPT09dCYmKHQ9MS8wKSx2b2lkIDA9PT1lJiYoZT0xLzApLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PWkmJihpPVtdKSx0aGlzLm1heFdpZHRoPXQsdGhpcy5tYXhIZWlnaHQ9ZSx0aGlzLnBhZGRpbmc9bix0aGlzLnJvd3M9aX1yZXR1cm4gdC5wcm90b3R5cGUuYWRkUm93PWZ1bmN0aW9uKHQpe3QubWF4V2lkdGg9dGhpcy5tYXhXaWR0aC0yKnRoaXMucGFkZGluZyx0aGlzLnJvd3MucHVzaCh0KX0sdC5wcm90b3R5cGUuZ2V0Q29sdW1uQm91bmRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5nZXRSb3dCb3VuZHModCksaT10aGlzLnJvd3NbdF0uZ2V0Qm91bmRzKGUpO3JldHVybiBpLnRvcExlZnQueCs9bi50b3BMZWZ0LngsaS5ib3R0b21SaWdodC54Kz1uLnRvcExlZnQueCxpLnRvcExlZnQueSs9bi50b3BMZWZ0LnksaS5ib3R0b21SaWdodC55Kz1uLnRvcExlZnQueSxpfSx0LnByb3RvdHlwZS5nZXRSb3dCb3VuZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMucGFkZGluZyxuPXRoaXMucGFkZGluZyxpPTA7aTx0O2krKyluKz10aGlzLnJvd3NbaV0uZ2V0SGVpZ2h0KCk7cmV0dXJue3RvcExlZnQ6e3g6ZSx5Om59LGJvdHRvbVJpZ2h0Ont4OmUrdGhpcy5yb3dzW3RdLmdldFdpZHRoKCkseTpuK3RoaXMucm93c1t0XS5nZXRIZWlnaHQoKX19fSx0LnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5yb3dzLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLmdldEhlaWdodCgpfSksMCkrMip0aGlzLnBhZGRpbmcsdGhpcy5tYXhIZWlnaHQpfSx0LnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbihyd3QuTWF0aC5tYXgodGhpcy5yb3dzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0V2lkdGgoKX0pKSwwKSsyKnRoaXMucGFkZGluZyx0aGlzLm1heFdpZHRoKX0sdH0pKCksbHd0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9wYWRkaW5nPTUsbi5fcm93Qm90dG9tUGFkZGluZz0zLG4uYWRkQ2xhc3MoImxlZ2VuZCIpLG4ubWF4RW50cmllc1BlclJvdygxKSxudWxsPT1lKXRocm93IG5ldyBFcnJvcigiTGVnZW5kIHJlcXVpcmVzIGEgY29sb3JTY2FsZSIpO3JldHVybiBuLl9jb2xvclNjYWxlPWUsbi5fcmVkcmF3Q2FsbGJhY2s9ZnVuY3Rpb24odCl7cmV0dXJuIG4ucmVkcmF3KCl9LG4uX2NvbG9yU2NhbGUub25VcGRhdGUobi5fcmVkcmF3Q2FsbGJhY2spLG4uX2Zvcm1hdHRlcj1ud3QuaWRlbnRpdHkoKSxuLm1heExpbmVzUGVyRW50cnkoMSksbi54QWxpZ25tZW50KCJyaWdodCIpLnlBbGlnbm1lbnQoInRvcCIpLG4uY29tcGFyYXRvcigoZnVuY3Rpb24odCxlKXt2YXIgaT1uLl9jb2xvclNjYWxlLmRvbWFpbigpLnNsaWNlKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbi5fZm9ybWF0dGVyKHQpfSkpO3JldHVybiBpLmluZGV4T2YodCktaS5pbmRleE9mKGUpfSkpLG4uX3N5bWJvbEZhY3RvcnlBY2Nlc3Nvcj1mdW5jdGlvbigpe3JldHVybiBpd3QuY2lyY2xlKCl9LG4uX3N5bWJvbE9wYWNpdHlBY2Nlc3Nvcj1mdW5jdGlvbigpe3JldHVybiAxfSxufXJldHVybiBKeHQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIG49dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZChlLkxFR0VORF9ST1dfQ0xBU1MsITApO24uYXBwZW5kKCJnIikuY2xhc3NlZChlLkxFR0VORF9FTlRSWV9DTEFTUywhMCkuYXBwZW5kKCJ0ZXh0Iik7dmFyIGk9bmV3IHR3dC5TdmdDb250ZXh0KG4ubm9kZSgpLG51bGwsZXd0LkFERF9USVRMRV9FTEVNRU5UUyk7dGhpcy5fbWVhc3VyZXI9bmV3IHR3dC5DYWNoZU1lYXN1cmVyKGkpLHRoaXMuX3dyYXBwZXI9KG5ldyB0d3QuV3JhcHBlcikubWF4TGluZXModGhpcy5tYXhMaW5lc1BlckVudHJ5KCkpLHRoaXMuX3dyaXRlcj1uZXcgdHd0LldyaXRlcih0aGlzLl9tZWFzdXJlcixpLHRoaXMuX3dyYXBwZXIpfSxlLnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLnByb3RvdHlwZS5tYXhFbnRyaWVzUGVyUm93PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX21heEVudHJpZXNQZXJSb3c6KHRoaXMuX21heEVudHJpZXNQZXJSb3c9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLnByb3RvdHlwZS5tYXhMaW5lc1BlckVudHJ5PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX21heExpbmVzUGVyRW50cnk6KHRoaXMuX21heExpbmVzUGVyRW50cnk9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLnByb3RvdHlwZS5tYXhXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9tYXhXaWR0aDoodGhpcy5fbWF4V2lkdGg9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLnByb3RvdHlwZS5jb21wYXJhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2NvbXBhcmF0b3I6KHRoaXMuX2NvbXBhcmF0b3I9dCx0aGlzLnJlZHJhdygpLHRoaXMpfSxlLnByb3RvdHlwZS5jb2xvclNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10Pyh0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayksdGhpcy5fY29sb3JTY2FsZT10LHRoaXMuX2NvbG9yU2NhbGUub25VcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spLHRoaXMucmVkcmF3KCksdGhpcyk6dGhpcy5fY29sb3JTY2FsZX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayl9LGUucHJvdG90eXBlLl9idWlsZExlZ2VuZFRhYmxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQscj1uZXcgc3d0KHQsZSx0aGlzLl9wYWRkaW5nKSxvPXRoaXMuX2NvbG9yU2NhbGUuZG9tYWluKCkuc2xpY2UoKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBuLl9jb21wYXJhdG9yKG4uX2Zvcm1hdHRlcih0KSxuLl9mb3JtYXR0ZXIoZSkpfSkpLGE9bmV3IGF3dDtyZXR1cm4gci5hZGRSb3coYSksYS5ib3R0b21QYWRkaW5nPXRoaXMuX3Jvd0JvdHRvbVBhZGRpbmcsby5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2EuY29sdW1ucy5sZW5ndGgvMj09PW4ubWF4RW50cmllc1BlclJvdygpJiYoKGE9bmV3IGF3dCkuYm90dG9tUGFkZGluZz1uLl9yb3dCb3R0b21QYWRkaW5nLHIuYWRkUm93KGEpKTt2YXIgbz1hLmdldFdpZHRoQXZhaWxhYmxlKCkscz1uLl9mb3JtYXR0ZXIodCksbD1uLl9tZWFzdXJlci5tZWFzdXJlKHMpLndpZHRoO28taS1sPDAmJmEuY29sdW1ucy5sZW5ndGg+MSYmKChhPW5ldyBhd3QpLmJvdHRvbVBhZGRpbmc9bi5fcm93Qm90dG9tUGFkZGluZyxyLmFkZFJvdyhhKSksYS5hZGRDb2x1bW4oe3dpZHRoOmksaGVpZ2h0OmksZGF0YTp7bmFtZTp0LHR5cGU6InN5bWJvbCJ9fSksbz1hLmdldFdpZHRoQXZhaWxhYmxlKCk7dmFyIGM9TWF0aC5taW4obyxsKTtuLl93cmFwcGVyLm1heExpbmVzKG4ubWF4TGluZXNQZXJFbnRyeSgpKTt2YXIgdT1uLl93cmFwcGVyLndyYXAocyxuLl9tZWFzdXJlcixjKS5ub0xpbmVzO2EuYWRkQ29sdW1uKHt3aWR0aDpjLGhlaWdodDp1KmksZGF0YTp7bmFtZTp0LHR5cGU6InRleHQifX0pfSkpLHJ9LGUucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fYnVpbGRMZWdlbmRUYWJsZShyd3QuTWF0aC5taW4oW3RoaXMubWF4V2lkdGgoKSx0XSx0KSxlKTtyZXR1cm57bWluSGVpZ2h0Om4uZ2V0SGVpZ2h0KCksbWluV2lkdGg6bi5nZXRXaWR0aCgpfX0sZS5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbih0KXt2YXIgbj10aGlzO2lmKCF0aGlzLl9pc1NldHVwKXJldHVybltdO3ZhciBpPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpO3JldHVybiBpLnJvd3MucmVkdWNlKChmdW5jdGlvbihyLG8sYSl7aWYoMCE9PXIubGVuZ3RoKXJldHVybiByO3ZhciBzPWkuZ2V0Um93Qm91bmRzKGEpO3JldHVybiByd3QuTWF0aC53aXRoaW4odCxzKT9vLmNvbHVtbnMucmVkdWNlKChmdW5jdGlvbihyLG8scyl7dmFyIGw9aS5nZXRDb2x1bW5Cb3VuZHMoYSxzKTtpZihyd3QuTWF0aC53aXRoaW4odCxsKSl7dmFyIGM9bi5jb250ZW50KCkuc2VsZWN0QWxsKCIuIitlLkxFR0VORF9ST1dfQ0xBU1MpLm5vZGVzKClbYV0sdT1ReHQuc2VsZWN0KGMpLnNlbGVjdEFsbCgiLiIrZS5MRUdFTkRfRU5UUllfQ0xBU1MpLm5vZGVzKClbTWF0aC5mbG9vcihzLzIpXSxoPVF4dC5zZWxlY3QodSkuc2VsZWN0KCIuIitlLkxFR0VORF9TWU1CT0xfQ0xBU1MpLGQ9cnd0LkRPTS5nZXRUcmFuc2xhdGVWYWx1ZXMoUXh0LnNlbGVjdChjKSkscD1yd3QuRE9NLmdldFRyYW5zbGF0ZVZhbHVlcyhoKTtyZXR1cm5be2JvdW5kczpyd3QuRE9NLmVsZW1lbnRCQm94KFF4dC5zZWxlY3QoYykpLGRhdHVtOm8uZGF0YS5uYW1lLHBvc2l0aW9uOnt4OmRbMF0rcFswXSx5OmRbMV0rcFsxXX0sc2VsZWN0aW9uOlF4dC5zZWxlY3QodSksY29tcG9uZW50Om59XX1yZXR1cm4gcn0pLHIpOnJ9KSxbXSl9LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt2YXIgbj10aGlzLl9idWlsZExlZ2VuZFRhYmxlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKTt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTt2YXIgaT10aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoImcuIitlLkxFR0VORF9ST1dfQ0xBU1MpLmRhdGEobi5yb3dzKSxyPWkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGUuTEVHRU5EX1JPV19DTEFTUywhMCkubWVyZ2UoaSk7aS5leGl0KCkucmVtb3ZlKCksci5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0LGUpe3ZhciBpPW4uZ2V0Um93Qm91bmRzKGUpO3JldHVybiJ0cmFuc2xhdGUoIitpLnRvcExlZnQueCsiLCAiK2kudG9wTGVmdC55KyIpIn0pKTt2YXIgbz10aGlzO3JldHVybiByLmVhY2goKGZ1bmN0aW9uKHQsaSl7Zm9yKHZhciByPVtdLGE9MDthPHQuY29sdW1ucy5sZW5ndGg7YSs9MilyLnB1c2goW3QuY29sdW1uc1thXSx0LmNvbHVtbnNbYSsxXV0pO3ZhciBzPVF4dC5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLiIrZS5MRUdFTkRfRU5UUllfQ0xBU1MpLmRhdGEociksbD1zLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChlLkxFR0VORF9FTlRSWV9DTEFTUywhMCkubWVyZ2Uocyk7bC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwoZnVuY3Rpb24odCxlKXt2YXIgbj10WzBdO3JldHVybiBvLnN5bWJvbCgpKG4uZGF0YS5uYW1lLGkpKC42Km4uaGVpZ2h0KShudWxsKX0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sbz1uLnJvd3NbaV0uY29sdW1ucy5pbmRleE9mKHIpO3JldHVybiJ0cmFuc2xhdGUoIisobi5nZXRDb2x1bW5Cb3VuZHMoaSxvKS50b3BMZWZ0Lngrci53aWR0aC8yKSsiLCAiK3IuaGVpZ2h0LzIrIikifSkpLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gby5fY29sb3JTY2FsZS5zY2FsZSh0WzBdLmRhdGEubmFtZSl9KSkuYXR0cigib3BhY2l0eSIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uc3ltYm9sT3BhY2l0eSgpKHRbMF0uZGF0YS5uYW1lLGkpfSkpLmNsYXNzZWQoZS5MRUdFTkRfU1lNQk9MX0NMQVNTLCEwKSxsLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRleHQtY29udGFpbmVyIiwhMCkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCxlKXt2YXIgcj1uLnJvd3NbaV0uY29sdW1ucy5pbmRleE9mKHRbMV0pO3JldHVybiJ0cmFuc2xhdGUoIituLmdldENvbHVtbkJvdW5kcyhpLHIpLnRvcExlZnQueCsiLCAwKSJ9KSkuZWFjaCgoZnVuY3Rpb24odCxlLG4pe3ZhciBpPVF4dC5zZWxlY3QodGhpcykscj10WzFdO28uX3dyaXRlci53cml0ZShvLl9mb3JtYXR0ZXIoci5kYXRhLm5hbWUpLHIud2lkdGgsby5oZWlnaHQoKSx7eEFsaWduOiJsZWZ0Iix5QWxpZ246InRvcCIsdGV4dFJvdGF0aW9uOjB9LGkubm9kZSgpKX0pKSxzLmV4aXQoKS5yZW1vdmUoKX0pKSx0aGlzfSxlLnByb3RvdHlwZS5zeW1ib2w9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fc3ltYm9sRmFjdG9yeUFjY2Vzc29yOih0aGlzLl9zeW1ib2xGYWN0b3J5QWNjZXNzb3I9dCx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5zeW1ib2xPcGFjaXR5PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX3N5bWJvbE9wYWNpdHlBY2Nlc3NvcjoodGhpcy5fc3ltYm9sT3BhY2l0eUFjY2Vzc29yPSJudW1iZXIiPT10eXBlb2YgdD9mdW5jdGlvbigpe3JldHVybiB0fTp0LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sZS5MRUdFTkRfUk9XX0NMQVNTPSJsZWdlbmQtcm93IixlLkxFR0VORF9FTlRSWV9DTEFTUz0ibGVnZW5kLWVudHJ5IixlLkxFR0VORF9TWU1CT0xfQ0xBU1M9ImxlZ2VuZC1zeW1ib2wiLGV9KShvd3QuQ29tcG9uZW50KTtWeHQuTGVnZW5kPWx3dDt2YXIgY3d0PXt9LHV3dD17fSxod3Q9e307IShmdW5jdGlvbih0KXt2YXIgZTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLChlPXQuQW5pbWF0b3J8fCh0LkFuaW1hdG9yPXt9KSkuTUFJTj0ibWFpbiIsZS5SRVNFVD0icmVzZXQifSkoaHd0KTt2YXIgZHd0PXt9LHB3dD17fSxmd3Q9e307ZnVuY3Rpb24gbXd0KHQpe3JldHVybiEwPT09KGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG51bGwhPWUmJiJvYmplY3QiPT10eXBlb2YgZSYmITE9PT1BcnJheS5pc0FycmF5KGUpfSkodCkmJiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfXZhciBnd3Q9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShnd3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBfd3Q9Rmd0LHl3dD0wLHZ3dD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl91cGRhdGVJZD15d3QrKyx0aGlzLl9kYXRhPXQsdGhpcy5fbWV0YWRhdGE9ZSx0aGlzLl9jYWxsYmFja3M9bmV3IF93dC5DYWxsYmFja1NldH1yZXR1cm4gdC5wcm90b3R5cGUub25VcGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcy5hZGQodCksdGhpc30sdC5wcm90b3R5cGUub2ZmVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LHQucHJvdG90eXBlLmRhdGE9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZGF0YToodGhpcy5fZGF0YT10LHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLm1ldGFkYXRhPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX21ldGFkYXRhOih0aGlzLl9tZXRhZGF0YT10LHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLnVwZGF0ZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZUlkfSx0LnByb3RvdHlwZS5fZGlzcGF0Y2hVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVJZD15d3QrKyx0aGlzLl9jYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKX0sdH0pKCk7Z3d0LkRhdGFzZXQ9dnd0LAovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyB0aGUgU2lnbmF0dXJlIEFQSSB0byBoZWxwIGluIGNvbXBhcmluZyB3aGVuIHR3bwogICAgICogUGxvdHRhYmxlIG9iamVjdHMgaGF2ZSAiY2hhbmdlZCIuCiAgICAgKgogICAgICogTWVtb2l6YXRpb24gaW4gUGxvdHRhYmxlIGlzIGNvbXBsaWNhdGVkIGJ5IG11dGFibGUgc2NhbGVzIGFuZCBkYXRhc2V0cy4gV2UgY2Fubm90IHNpbXBseQogICAgICogcmVmZXJlbmNlIGNvbXBhcmUgdHdvIGUuZy4gc2NhbGVzIHNpbmNlIGl0IG1heSBoYXZlIGludGVybmFsbHkgbXV0YXRlZC4gVG8gcmVzb2x2ZSB0aGlzLAogICAgICogd2Ugd3JpdGUgYSByZWN1cnNpdmUgU2lnbmF0dXJlIGludGVyZmFjZSB0aGF0IGhvbGRzIGFuIGltbXV0YWJsZSBzbmFwc2hvdCBvZiB3aGF0ZXZlcgogICAgICogc3RhdGUgdGhlIHNjYWxlL2RhdGEgd2FzIGluIGF0IHRoZSB0aW1lLiBUaGVuIG9uIG1lbW9pemVkIGZ1bmN0aW9uIGludm9jYXRpb24gd2Ugc2lnbiB0aGUKICAgICAqIG5ldyBpbnB1dHMgYW5kIGNvbXBhcmUgdGhlIHNpZ25hdHVyZXMgdG8gZGVjaWRlIGlmIHdlIHNob3VsZCByZWNvbXB1dGUuCiAgICAgKgogICAgICogV2UgbXVzdCBoYW5kLXdyaXRlIGEgc2lnbmF0dXJlIGZvciBlYWNoIGN1c3RvbSBjbGFzcyB3ZSB3aXNoIHRvIHN1cHBvcnQuCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ3dCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGJ3dD11Tyx4d3Q9Z3d0LHd3dD1odnQ7ZnVuY3Rpb24gU3d0KHQpe3JldHVybiB0IGluc3RhbmNlb2Yga3d0P3Q6dCBpbnN0YW5jZW9mIERhdGU/VHd0KHQudmFsdWVPZigpKTp0IGluc3RhbmNlb2Ygd3d0LlNjYWxlP013dCh0KTp0IGluc3RhbmNlb2YgeHd0LkRhdGFzZXQ/RXd0KHQpOihmdW5jdGlvbiB0KGUpe3ZhciBuLGk7cmV0dXJuITEhPT1td3QoZSkmJiJmdW5jdGlvbiI9PXR5cGVvZihuPWUuY29uc3RydWN0b3IpJiYhMSE9PW13dChpPW4ucHJvdG90eXBlKSYmITEhPT1pLmhhc093blByb3BlcnR5KCJpc1Byb3RvdHlwZU9mIil9KSh0KT9Bd3QodCk6QXJyYXkuaXNBcnJheSh0KT9Dd3QodCk6VHd0KHQpfWZ1bmN0aW9uIE13dCh0KXtyZXR1cm4gQXd0KHtkb21haW46dC5kb21haW4oKSxyYW5nZTp0LnJhbmdlKCksdXBkYXRlSWQ6dC51cGRhdGVJZCgpLHJlZjpUd3QodCl9KX1mdW5jdGlvbiBFd3QodCl7cmV0dXJuIEF3dCh7cmVmOlR3dCh0KSx1cGRhdGVJZDp0LnVwZGF0ZUlkKCl9KX1mdW5jdGlvbiBUd3QodCl7cmV0dXJuIG5ldyBQd3QodCl9ZnVuY3Rpb24gQ3d0KHQpe3JldHVybiBuZXcgTHd0KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gU3d0KHQpfSkpKX1mdW5jdGlvbiBBd3QodCl7dmFyIGU9e307Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09U3d0KHRbbl0pKTtyZXR1cm4gbmV3IE53dChlKX1md3Quc2lnbj1Td3QsZnd0LnNpZ25TY2FsZT1Nd3QsZnd0LnNpZ25EYXRhc2V0PUV3dCxmd3Quc2lnblJlZj1Ud3QsZnd0LnNpZ25BcnJheT1Dd3QsZnd0LnNpZ25PYmo9QXd0O3ZhciBrd3Q9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuaXNEaWZmZXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuISh0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil8fHRoaXMuaXNTaWduYXR1cmVEaWZmZXJlbnQodCl9LHR9KSgpO2Z3dC5TaWduYXR1cmU9a3d0O3ZhciBMd3Q9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLmFycmF5PWUsbn1yZXR1cm4gYnd0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmlzU2lnbmF0dXJlRGlmZmVyZW50PWZ1bmN0aW9uKHQpe2lmKHQuYXJyYXkubGVuZ3RoIT09dGhpcy5hcnJheS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBlPTA7ZTx0aGlzLmFycmF5Lmxlbmd0aDtlKyspaWYodGhpcy5hcnJheVtlXS5pc0RpZmZlcmVudCh0LmFycmF5W2VdKSlyZXR1cm4hMDtyZXR1cm4hMX0sZX0pKGt3dCk7Znd0LkFycmF5U2lnbmF0dXJlPUx3dDt2YXIgUHd0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5yZWY9ZSxufXJldHVybiBid3QuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVmIT09dC5yZWZ9LGV9KShrd3QpO2Z3dC5SZWZlcmVuY2VTaWduYXR1cmU9UHd0O3ZhciBOd3Q9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLm9iaj1lLG59cmV0dXJuIGJ3dC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5pc1NpZ25hdHVyZURpZmZlcmVudD1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3Qua2V5cyh0aGlzLm9iaiksbj1PYmplY3Qua2V5cyh0Lm9iaik7aWYoZS5sZW5ndGghPT1uLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIGk9MCxyPWU7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXJbaV07aWYoIXQub2JqLmhhc093blByb3BlcnR5KG8pKXJldHVybiEwO2lmKHRoaXMub2JqW29dLmlzRGlmZmVyZW50KHQub2JqW29dKSlyZXR1cm4hMH1yZXR1cm4hMX0sZX0pKGt3dCk7Znd0Lk9iamVjdFNpZ25hdHVyZT1Od3QsCi8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICogQGZpbGVvdmVydmlldyBJbXBsZW1lbnRzIGEgZnVuY3Rpb24gbWVtb2l6ZXIgdXNpbmcgdGhlIFNpZ25hdHVyZSBBUEkuCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KHB3dCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEl3dD1md3Q7cHd0Lm1lbW9pemU9ZnVuY3Rpb24gUnd0KHQpe3ZhciBlLG49dm9pZCAwLGk9ITEscj0hMSxvPWZ1bmN0aW9uKCl7Zm9yKHZhciBvPVtdLGE9MDthPGFyZ3VtZW50cy5sZW5ndGg7YSsrKW9bYV09YXJndW1lbnRzW2FdO2lmKGkpcmV0dXJuIGU7dmFyIHM9SXd0LnNpZ25BcnJheShvKTtyZXR1cm4gdm9pZCAwPT09bnx8bi5pc0RpZmZlcmVudChzKT8ociYmY29uc29sZS53YXJuKCJjYWNoZSBtaXNzISBjb21wdXRpbmciKSxuPXMsZT10LmFwcGx5KHRoaXMsbykpOnImJmNvbnNvbGUud2FybigiY2FjaGUgaGl0ISIpLGV9O3JldHVybiBvLmRvTG9ja2VkPWZ1bmN0aW9uKHQpe2lmKGkpdGhyb3cgbmV3IEVycm9yKCJMb2NraW5nIGFuIGFscmVhZHkgbG9ja2VkIG1lbW9pemUgZnVuY3Rpb24hIik7aT0hMDt2YXIgZT10LmFwcGx5KHRoaXMpO3JldHVybiBpPSExLGV9LG8ubG9nUGVyZm9ybWFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSxyPXQsdGhpc30sb307dmFyIE93dD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoT3d0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgend0PVNlLmV4cG9ydHMsRHd0PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLm1hcD1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZXhpc3RzPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIHQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMubWFwW3RdLGRlbGV0ZSB0aGlzLmV4aXN0c1t0XSwhMH0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcFt0XX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5leGlzdHNbdF19LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm1hcFt0XT1lLHRoaXMuZXhpc3RzW3RdPSEwLHRoaXN9LHR9KSgpLEJ3dD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5tYXA9bmV3IER3dH1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5nZXQodFswXSkuZ2V0KHRbMV0pfSx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLmhhcyh0WzBdKSYmdGhpcy5tYXAuZ2V0KHRbMF0pLmhhcyh0WzFdKX0sdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMubWFwLmhhcyh0WzBdKXx8dGhpcy5tYXAuc2V0KHRbMF0sbmV3IER3dCksdGhpcy5tYXAuZ2V0KHRbMF0pLnNldCh0WzFdLGUpLHRoaXN9LHQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAuaGFzKHRbMF0pJiZ0aGlzLm1hcC5nZXQodFswXSkuZGVsZXRlKHRbMV0pLCEwfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMubWFwPW5ldyBEd3R9LHQucmVzb2x2ZXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybltuLnVwZGF0ZUlkKCksZV19LHR9KSgpO2Z1bmN0aW9uIEh3dCh0KXt2YXIgZT16d3QubWVtb2l6ZSh0LEJ3dC5yZXNvbHZlcik7cmV0dXJuIGUuY2FjaGU9bmV3IEJ3dCxlfU93dC5tZW1vaXplUHJvamVjdG9yPUh3dCxPd3QubWVtb2l6ZVByb2plY3RvcnM9ZnVuY3Rpb24gRnd0KHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXt0W2VdPUh3dCh0W2VdKX0pKSx0fTt2YXIgVnd0PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyBhIGNvbnZlbmllbnQgdGh1bmsgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBjb21tb24gY2FzZQogICAgICogb2YgY3JlYXRpbmcgYSBtZW1vaXplZCBmdW5jdGlvbiB0aGF0IHRha2VzIGl0cyBpbnB1dHMgZnJvbSBtdXRhYmxlIGNsYXNzIHByb3BlcnRpZXMuCiAgICAgKi9PYmplY3QuZGVmaW5lUHJvcGVydHkoVnd0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgVXd0PWR3dDtWd3QubWVtVGh1bms9ZnVuY3Rpb24gand0KCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciBuPXQuc2xpY2UoMCwtMSksaT10W3QubGVuZ3RoLTFdLHI9VXd0Lm1lbW9pemUoaSksbz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1uLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXBwbHkodCl9KSk7cmV0dXJuIHIuYXBwbHkodm9pZCAwLGUpfTtyZXR1cm4gb30sKGZ1bmN0aW9uKHQpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGU9dU87ZS5fX2V4cG9ydFN0YXIocHd0LHQpLGUuX19leHBvcnRTdGFyKE93dCx0KSxlLl9fZXhwb3J0U3RhcihWd3QsdCksdC5zaWduPWZ3dC5zaWdufSkoZHd0KTt2YXIgR3d0PXt9OyEoZnVuY3Rpb24odCl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZT1FZHQsbj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2RyYXdTdGVwPWV9cmV0dXJuIHQucHJvdG90eXBlLmdldERyYXdTdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYXdTdGVwfSx0LnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSl7dmFyIG49ZVtlLmxlbmd0aC0xXS5hdHRyVG9BcHBsaWVkUHJvamVjdG9yO3RoaXMuX2NvbnRleHQuc2F2ZSgpLHRoaXMuX2RyYXdTdGVwKHRoaXMuX2NvbnRleHQsdCxuKSx0aGlzLl9jb250ZXh0LnJlc3RvcmUoKX0sdC5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlcz1mdW5jdGlvbigpe3JldHVybltdfSx0LnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt9LHR9KSgpO2Z1bmN0aW9uIGkodCxlLG4saSl7Zm9yKHZhciByPXt9LG89MCxhPWU7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107dC5oYXNPd25Qcm9wZXJ0eShzKSYmKHJbc109dFtzXShuLGkpKX1yZXR1cm4gcn1mdW5jdGlvbiByKHQpe3JldHVybiBudWxsIT10WyJzdHJva2Utd2lkdGgiXT9wYXJzZUZsb2F0KHRbInN0cm9rZS13aWR0aCJdKToxfWZ1bmN0aW9uIG8odCl7dmFyIGU9dFsic3Ryb2tlLWRhc2hhcnJheSJdO2lmKG51bGwhPWUpdHJ5e3JldHVybiBlLnNwbGl0KC9bICxdKy8pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlSW50KHQsMTApfSkpfWNhdGNoKHQpe3JldHVybiBjb25zb2xlLmVycm9yKCJnZXRTdHJva2VEYXNoQXJyYXkgZmFpbGVkIHdpdGg6ICIrdCksW119cmV0dXJuW119ZnVuY3Rpb24gYSh0LG4pe2lmKG4uc3Ryb2tlKXt0LmxpbmVXaWR0aD1yKG4pO3ZhciBpPWUuY29sb3Iobi5zdHJva2UpLGE9byhuKTt0LnNldExpbmVEYXNoKGEpLGkub3BhY2l0eSo9KGZ1bmN0aW9uIHModCl7dmFyIGU9bnVsbCE9dC5vcGFjaXR5P3BhcnNlRmxvYXQodC5vcGFjaXR5KToxO3JldHVybihudWxsIT10WyJzdHJva2Utb3BhY2l0eSJdP3BhcnNlRmxvYXQodFsic3Ryb2tlLW9wYWNpdHkiXSk6MSkqZX0pKG4pLHQuc3Ryb2tlU3R5bGU9aS50b1N0cmluZygpLHQuc3Ryb2tlKCl9aWYobi5maWxsKXt2YXIgbD1lLmNvbG9yKG4uZmlsbCk7bC5vcGFjaXR5Kj0oZnVuY3Rpb24gYyh0KXt2YXIgZT1udWxsIT10Lm9wYWNpdHk/cGFyc2VGbG9hdCh0Lm9wYWNpdHkpOjE7cmV0dXJuKG51bGwhPXRbImZpbGwtb3BhY2l0eSJdP3BhcnNlRmxvYXQodFsiZmlsbC1vcGFjaXR5Il0pOjEpKmV9KShuKSx0LmZpbGxTdHlsZT1sLnRvU3RyaW5nKCksdC5maWxsKCl9fXQuQ2FudmFzRHJhd2VyPW4sdC5Db250ZXh0U3R5bGVBdHRycz1bImZpbGwtb3BhY2l0eSIsImZpbGwiLCJvcGFjaXR5Iiwic3Ryb2tlLW9wYWNpdHkiLCJzdHJva2Utd2lkdGgiLCJzdHJva2UiLCJzdHJva2UtZGFzaGFycmF5Il0sdC5yZXNvbHZlQXR0cmlidXRlc1N1YnNldFdpdGhTdHlsZXM9ZnVuY3Rpb24gcyhlLG4scixvKXtyZXR1cm4gaShlLHQuQ29udGV4dFN0eWxlQXR0cnMuY29uY2F0KG4pLHIsbyl9LHQucmVzb2x2ZUF0dHJpYnV0ZXM9aSx0LmdldFN0cm9rZVdpZHRoPXIsdC5nZXRTdHJva2VEYXNoQXJyYXk9byx0LnJlbmRlckFyZWE9ZnVuY3Rpb24gbCh0LGUsbixpKXt0LnNhdmUoKSx0LmJlZ2luUGF0aCgpLGUuY29udGV4dCh0KSxlKG4pLHQubGluZUpvaW49InJvdW5kIixhKHQsaSksdC5yZXN0b3JlKCl9LHQucmVuZGVyTGluZT1mdW5jdGlvbiBjKHQsZSxuLGkpe3Quc2F2ZSgpLHQuYmVnaW5QYXRoKCksZS5jb250ZXh0KHQpLGUobiksdC5saW5lSm9pbj0icm91bmQiLGEodCxpKSx0LnJlc3RvcmUoKX0sdC5yZW5kZXJQYXRoV2l0aFN0eWxlPWF9KShHd3QpO3ZhciBXd3Q9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovT2JqZWN0LmRlZmluZVByb3BlcnR5KFd3dCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHF3dD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeT10LHRoaXMuX2NhbnZhc0RyYXdlckZhY3Rvcnk9ZX1yZXR1cm4gdC5wcm90b3R5cGUudXNlU1ZHPWZ1bmN0aW9uKHQpe251bGwhPXRoaXMuX2N1cnJlbnREcmF3ZXImJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCk7dmFyIGU9dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeSgpO2UuYXR0YWNoVG8odCksdGhpcy5fY3VycmVudERyYXdlcj1lfSx0LnByb3RvdHlwZS51c2VDYW52YXM9ZnVuY3Rpb24odCl7bnVsbCE9dGhpcy5fY3VycmVudERyYXdlciYmdGhpcy5fY3VycmVudERyYXdlci5yZW1vdmUoKSx0aGlzLl9jdXJyZW50RHJhd2VyPXRoaXMuX2NhbnZhc0RyYXdlckZhY3RvcnkodC5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKSl9LHQucHJvdG90eXBlLmdldERyYXdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50RHJhd2VyfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtudWxsIT10aGlzLl9jdXJyZW50RHJhd2VyJiZ0aGlzLl9jdXJyZW50RHJhd2VyLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VycmVudERyYXdlci5kcmF3KHQsZSl9LHQucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudERyYXdlci5nZXRWaXN1YWxQcmltaXRpdmVzKCl9LHQucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2N1cnJlbnREcmF3ZXIuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleCh0KX0sdH0pKCk7V3d0LlByb3h5RHJhd2VyPXF3dDt2YXIgWXd0PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShZd3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBYd3Q9RWR0LCR3dD1GZ3QsS3d0PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9yb290PVh3dC5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksdGhpcy5fY2xhc3NOYW1lPWUsdGhpcy5fc3ZnRWxlbWVudE5hbWU9dH1yZXR1cm4gdC5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dGhpcy5fY3JlYXRlQW5kRGVzdHJveURPTUVsZW1lbnRzKHQpO2Zvcih2YXIgaT0wLHI9ZS5sZW5ndGgsbz1mdW5jdGlvbihyKXt2YXIgbz1lW3JdOyR3dC5XaW5kb3cuc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd1N0ZXAobyl9KSxpKSxpKz1vLmFuaW1hdG9yLnRvdGFsVGltZSh0Lmxlbmd0aCl9LGE9MDthPHI7YSsrKW8oYSl9LHQucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09dGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzJiYodGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPXRoaXMuX3NlbGVjdGlvbi5ub2RlcygpKSx0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXN9LHQucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlTWFwP251bGw6dGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVNYXAuZ2V0KHQpfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9yb290LnJlbW92ZSgpfSx0LnByb3RvdHlwZS5hdHRhY2hUbz1mdW5jdGlvbih0KXt0Lm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9yb290Lm5vZGUoKSl9LHQucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sdC5wcm90b3R5cGUuc2VsZWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3ZnRWxlbWVudE5hbWV9LHQucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuX2NyZWF0ZUFuZERlc3Ryb3lET01FbGVtZW50cz1mdW5jdGlvbih0KXt2YXIgZT10Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dD97ZDp0LGk6ZX06bnVsbH0pKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10fSkpLG49dGhpcy5fcm9vdC5zZWxlY3RBbGwodGhpcy5zZWxlY3RvcigpKS5kYXRhKGUpO3RoaXMuX3NlbGVjdGlvbj1uLmVudGVyKCkuYXBwZW5kKHRoaXMuX3N2Z0VsZW1lbnROYW1lKS5tZXJnZShuKSxuLmV4aXQoKS5yZW1vdmUoKTt2YXIgaT1uZXcgJHd0Lk1hcDt0aGlzLl9zZWxlY3Rpb24uZWFjaCgoZnVuY3Rpb24odCl7aS5zZXQodC5pLHRoaXMpfSkpLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlTWFwPWksdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPW51bGwsdGhpcy5fc2VsZWN0aW9uLmRhdGEodGhpcy5fc2VsZWN0aW9uLmRhdGEoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmR9KSkpLG51bGwhPXRoaXMuX2NsYXNzTmFtZSYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKSx0aGlzLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzKHRoaXMuX3NlbGVjdGlvbil9LHQucHJvdG90eXBlLl9kcmF3U3RlcD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO1siZmlsbCIsInN0cm9rZSJdLmZvckVhY2goKGZ1bmN0aW9uKG4pe251bGwhPXQuYXR0clRvQXBwbGllZFByb2plY3RvcltuXSYmZS5fc2VsZWN0aW9uLmF0dHIobix0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3Jbbl0pfSkpLHQuYW5pbWF0b3IuYW5pbWF0ZSh0aGlzLl9zZWxlY3Rpb24sdC5hdHRyVG9BcHBsaWVkUHJvamVjdG9yKSxudWxsIT10aGlzLl9jbGFzc05hbWUmJnRoaXMuX3NlbGVjdGlvbi5jbGFzc2VkKHRoaXMuX2NsYXNzTmFtZSwhMCl9LHR9KSgpO1l3dC5TVkdEcmF3ZXI9S3d0O3ZhciBad3Q9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTctcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovT2JqZWN0LmRlZmluZVByb3BlcnR5KFp3dCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEp3dD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIHQ9dGhpczt0aGlzLnNjYWxlPTAsdGhpcy50cmFuc2xhdGU9MCx0aGlzLmNhY2hlZERvbWFpbj1bbnVsbCxudWxsXSx0aGlzLmxhc3RTZWVuRG9tYWluPVtudWxsLG51bGxdLHRoaXMudXBkYXRlRG9tYWluPWZ1bmN0aW9uKGUpe3QubGFzdFNlZW5Eb21haW49ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpO3ZhciBuPWUuc2NhbGVUcmFuc2Zvcm1hdGlvbih0LmNhY2hlZERvbWFpblsxXSktZS5zY2FsZVRyYW5zZm9ybWF0aW9uKHQuY2FjaGVkRG9tYWluWzBdKSxpPWUuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzFdKS1lLnNjYWxlVHJhbnNmb3JtYXRpb24odC5sYXN0U2VlbkRvbWFpblswXSk7dC5zY2FsZT1uL2l8fDEsdC50cmFuc2xhdGU9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKHQuY2FjaGVkRG9tYWluWzBdKS1lLnNjYWxlVHJhbnNmb3JtYXRpb24odC5sYXN0U2VlbkRvbWFpblswXSkqdC5zY2FsZXx8MH19cmV0dXJuIHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5zY2FsZT0xLHRoaXMudHJhbnNsYXRlPTAsdGhpcy5jYWNoZWREb21haW49dGhpcy5sYXN0U2VlbkRvbWFpbn0sdC5wcm90b3R5cGUuc2V0RG9tYWluPWZ1bmN0aW9uKHQpe3RoaXMuY2FjaGVkRG9tYWluPXQuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKX0sdH0pKCksUXd0PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxuKXt2YXIgaT10aGlzO3RoaXMucmVuZGVyQ2FsbGJhY2s9ZSx0aGlzLmFwcGx5VHJhbnNmb3JtQ2FsbGJhY2s9bix0aGlzLmRvbWFpblRyYW5zZm9ybVg9bmV3IEp3dCx0aGlzLmRvbWFpblRyYW5zZm9ybVk9bmV3IEp3dCx0aGlzLnJlbmRlckRlZmVycmVkPWZ1bmN0aW9uKCl7aS5hcHBseVRyYW5zZm9ybSgpLGNsZWFyVGltZW91dChpLnRpbWVvdXRUb2tlbiksaS50aW1lb3V0VG9rZW49c2V0VGltZW91dCgoZnVuY3Rpb24oKXtpLnJlbmRlckNhbGxiYWNrKCl9KSx0LkRFRkVSUkVEX1JFTkRFUklOR19ERUxBWSl9fXJldHVybiB0LnByb3RvdHlwZS5zZXREb21haW5zPWZ1bmN0aW9uKHQsZSl7dCYmdGhpcy5kb21haW5UcmFuc2Zvcm1YLnNldERvbWFpbih0KSxlJiZ0aGlzLmRvbWFpblRyYW5zZm9ybVkuc2V0RG9tYWluKGUpLHRoaXMucmVuZGVyRGVmZXJyZWQoKX0sdC5wcm90b3R5cGUudXBkYXRlRG9tYWlucz1mdW5jdGlvbih0LGUpe3QmJnRoaXMuZG9tYWluVHJhbnNmb3JtWC51cGRhdGVEb21haW4odCksZSYmdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnVwZGF0ZURvbWFpbihlKSx0aGlzLnJlbmRlckRlZmVycmVkKCl9LHQucHJvdG90eXBlLnJlc2V0VHJhbnNmb3Jtcz1mdW5jdGlvbigpe3RoaXMuZG9tYWluVHJhbnNmb3JtWC5yZXNldCgpLHRoaXMuZG9tYWluVHJhbnNmb3JtWS5yZXNldCgpLHRoaXMuYXBwbHlUcmFuc2Zvcm0oKX0sdC5wcm90b3R5cGUuYXBwbHlUcmFuc2Zvcm09ZnVuY3Rpb24oKXt0aGlzLmFwcGx5VHJhbnNmb3JtQ2FsbGJhY2sodGhpcy5kb21haW5UcmFuc2Zvcm1YLnRyYW5zbGF0ZSx0aGlzLmRvbWFpblRyYW5zZm9ybVkudHJhbnNsYXRlLHRoaXMuZG9tYWluVHJhbnNmb3JtWC5zY2FsZSx0aGlzLmRvbWFpblRyYW5zZm9ybVkuc2NhbGUpfSx0LkRFRkVSUkVEX1JFTkRFUklOR19ERUxBWT0yMDAsdH0pKCk7Wnd0LkRlZmVycmVkUmVuZGVyZXI9UXd0LAovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkodXd0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdFN0PXVPLGVTdD1FZHQsblN0PV9tdCxpU3Q9Rmd0LHJTdD1od3Qsb1N0PWR3dCxhU3Q9Qmd0LHNTdD1Hd3QsbFN0PVd3dCxjU3Q9WXd0LHVTdD1ibXQsaFN0PVp3dDt1d3QuUmVuZGVyZXI9U210Lm1ha2VFbnVtKFsic3ZnIiwiY2FudmFzIl0pO3ZhciBkU3Q9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7bi5fZGF0YUNoYW5nZWQ9ITEsbi5fYXR0ckV4dGVudHM9e30sbi5fYW5pbWF0ZT0hMSxuLl9hbmltYXRvcnM9e30sbi5fcHJvcGVydHlFeHRlbnRzPXt9LG4uX3Jlc2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24oKXtuLl9jYWNoZWRFbnRpdHlTdG9yZT12b2lkIDB9LG4uX292ZXJmbG93SGlkZGVuPSEwLG4uYWRkQ2xhc3MoInBsb3QiKSxuLl9kYXRhc2V0VG9EcmF3ZXI9bmV3IGlTdC5NYXAsbi5fYXR0ckJpbmRpbmdzPWVTdC5tYXAoKSxuLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uX2luY2x1ZGVkVmFsdWVzRm9yU2NhbGUodCxlKX0sbi5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gbi5yZW5kZXIoKX0sbi5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gbi5fb25EYXRhc2V0VXBkYXRlKCl9LG4uX3Byb3BlcnR5QmluZGluZ3M9ZVN0Lm1hcCgpO3ZhciBpPShuZXcgblN0LkVhc2luZykubWF4VG90YWxEdXJhdGlvbihlLl9BTklNQVRJT05fTUFYX0RVUkFUSU9OKTtyZXR1cm4gbi5hbmltYXRvcihyU3QuQW5pbWF0b3IuTUFJTixpKSxuLmFuaW1hdG9yKHJTdC5BbmltYXRvci5SRVNFVCxuZXcgblN0Lk51bGwpLG4uX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZT1pU3QuV2luZG93LmRlYm91bmNlKGhTdC5EZWZlcnJlZFJlbmRlcmVyLkRFRkVSUkVEX1JFTkRFUklOR19ERUxBWSxuLl9yZXNldEVudGl0eVN0b3JlKSxufXJldHVybiB0U3QuX19leHRlbmRzKGUsdCksZS5nZXRUb3RhbERyYXdUaW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUucmVkdWNlKChmdW5jdGlvbihlLG4pe3JldHVybiBlK24uYW5pbWF0b3IudG90YWxUaW1lKHQubGVuZ3RoKX0pLDApfSxlLmFwcGx5RHJhd1N0ZXBzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXt2YXIgbj10LmF0dHJUb1Byb2plY3RvcixpPXt9O3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChmdW5jdGlvbih0KXtpW3RdPWZ1bmN0aW9uKGkscil7cmV0dXJuIG5bdF0oaSxyLGUpfX0pKSx7YXR0clRvQXBwbGllZFByb2plY3RvcjppLGFuaW1hdG9yOnQuYW5pbWF0b3J9fSkpfSxlLnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dVN0LmNvZXJjZUV4dGVybmFsRDMoZSksdC5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxlKSx0aGlzLl9kYXRhQ2hhbmdlZD0hMCx0aGlzLl9yZXNldEVudGl0eVN0b3JlKCksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LGUucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5faXNTZXR1cHx8KHQucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLG51bGwhPXRoaXMuX2NhbnZhcyYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX3JlbmRlckFyZWE9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicmVuZGVyLWFyZWEiLCEwKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldCh0KX0pKSl9LGUucHJvdG90eXBlLl9hcHBlbmRDYW52YXNOb2RlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50KCkuc2VsZWN0KCIucGxvdC1jYW52YXMtY29udGFpbmVyIik7dC5lbXB0eSgpJiYodD10aGlzLmVsZW1lbnQoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInBsb3QtY2FudmFzLWNvbnRhaW5lciIsITApKS5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fY2FudmFzLm5vZGUoKSl9LGUucHJvdG90eXBlLnNldEJvdW5kcz1mdW5jdGlvbihlLG4saSxyKXtpZih0LnByb3RvdHlwZS5zZXRCb3VuZHMuY2FsbCh0aGlzLGUsbixpLHIpLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSxudWxsIT10aGlzLl9jYW52YXMpe2lmKHRoaXMuX2J1ZmZlckNhbnZhcyYmIXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkKXt0aGlzLl9idWZmZXJDYW52YXMuYXR0cigid2lkdGgiLHRoaXMuX2NhbnZhcy5hdHRyKCJ3aWR0aCIpKSx0aGlzLl9idWZmZXJDYW52YXMuYXR0cigiaGVpZ2h0Iix0aGlzLl9jYW52YXMuYXR0cigiaGVpZ2h0IikpO3ZhciBvPXRoaXMuX2J1ZmZlckNhbnZhcy5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKTtpZihvKXt2YXIgYT10aGlzLl9jYW52YXMubm9kZSgpO2Eud2lkdGg+MCYmYS5oZWlnaHQ+MD9vLmNhbnZhcy53aWR0aD4wJiZvLmNhbnZhcy5oZWlnaHQ+MCYmby5kcmF3SW1hZ2UoYSwwLDApOmNvbnNvbGUud2FybigiRmFpbGVkIHRvIGZpbGwgYnVmZmVyIGNhbnZhcyB3aXRoIHdpdGggMHgwIGNhbnZhcyIpfXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSEwfXZhciBzPW51bGwhPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOjE7dGhpcy5fY2FudmFzLmF0dHIoIndpZHRoIixlKnMpLHRoaXMuX2NhbnZhcy5hdHRyKCJoZWlnaHQiLG4qcyk7dmFyIGw9dGhpcy5fY2FudmFzLm5vZGUoKS5nZXRDb250ZXh0KCIyZCIpO2lmKGwmJihsLnNldFRyYW5zZm9ybShzLDAsMCxzLDAsMCksdGhpcy5fYnVmZmVyQ2FudmFzKSl7dmFyIGM9dGhpcy5fYnVmZmVyQ2FudmFzLm5vZGUoKTtjLndpZHRoPjAmJmMuaGVpZ2h0PjA/bC5jYW52YXMud2lkdGg+MCYmbC5jYW52YXMuaGVpZ2h0PjAmJmwuZHJhd0ltYWdlKGMsMCwwLGUsbik6Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gZmlsbCBjYW52YXMgd2l0aCAweDAgYnVmZmVyIGNhbnZhcyIpfX1yZXR1cm4gdGhpc30sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm9mZlVwZGF0ZShlLl9yZW5kZXJDYWxsYmFjayl9KSksdGhpcy5kYXRhc2V0cyhbXSl9LGUucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZGF0YXNldFRvRHJhd2VyLmdldCh0KTtyZXR1cm4ic3ZnIj09PXRoaXMucmVuZGVyZXIoKT9lLnVzZVNWRyh0aGlzLl9yZW5kZXJBcmVhKTplLnVzZUNhbnZhcyh0aGlzLl9jYW52YXMpLGV9LGUucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBsU3QuUHJveHlEcmF3ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjU3QuU1ZHRHJhd2VyKCJwYXRoIiwiIil9KSwoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzU3QuQ2FudmFzRHJhd2VyKHQsKGZ1bmN0aW9uKCl7fSkpfSkpfSxlLnByb3RvdHlwZS5fZ2V0QW5pbWF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSYmdGhpcy5fYW5pbWF0b3JzW3RdfHxuZXcgblN0Lk51bGx9LGUucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVFeHRlbnRzKCksdGhpcy5fZGF0YUNoYW5nZWQ9ITAsdGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMucmVuZGVyTG93UHJpb3JpdHkoKX0sZS5wcm90b3R5cGUuYXR0cj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG51bGw9PWU/dGhpcy5fYXR0ckJpbmRpbmdzLmdldCh0KToodGhpcy5fYmluZEF0dHIodCxlLG4pLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLl9iaW5kUHJvcGVydHk9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodCksbz1udWxsIT1yP3Iuc2NhbGU6bnVsbDt0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLnNldCh0LHthY2Nlc3NvcjoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7cmV0dXJuIGV9LHNjYWxlOm4scG9zdFNjYWxlOml9KSxudWxsIT1vJiZ0aGlzLl91bmluc3RhbGxTY2FsZUZvcktleShvLHQpLG51bGwhPW4mJnRoaXMuX2luc3RhbGxTY2FsZUZvcktleShuLHQpLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKX0sZS5wcm90b3R5cGUuX2JpbmRBdHRyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLl9hdHRyQmluZGluZ3MuZ2V0KHQpLHI9bnVsbCE9aT9pLnNjYWxlOm51bGw7dGhpcy5fYXR0ckJpbmRpbmdzLnNldCh0LHthY2Nlc3NvcjoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7cmV0dXJuIGV9LHNjYWxlOm59KSxudWxsIT1yJiZ0aGlzLl91bmluc3RhbGxTY2FsZUZvcktleShyLHQpLG51bGwhPW4mJnRoaXMuX2luc3RhbGxTY2FsZUZvcktleShuLHQpLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKX0sZS5wcm90b3R5cGUuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGU9ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yfSxlLnByb3RvdHlwZS5fZ2V0QXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7aWYobnVsbD09dGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yKXt2YXIgdD10aGlzLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3RvcigpO2UuT1BUSU1JWkVfTUVNT0laRV9QUk9KRUNUT1JTJiYodD1vU3QubWVtb2l6ZVByb2plY3RvcnModCkpLHRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3Rvcj10fXJldHVybiBpU3QuYXNzaWduKHt9LHRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3Rvcil9LGUucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciB0PXt9O3RoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKChmdW5jdGlvbihuLGkpe3RbaV09ZS5fc2NhbGVkQWNjZXNzb3Iobil9KSk7dmFyIG49dGhpcy5fcHJvcGVydHlQcm9qZWN0b3JzKCk7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGZ1bmN0aW9uKGUpe251bGw9PXRbZV0mJih0W2VdPW5bZV0pfSkpLHR9LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5faXNBbmNob3JlZCYmKHRoaXMuX3BhaW50KCksdGhpcy5fZGF0YUNoYW5nZWQ9ITEpLHRoaXN9LGUucHJvdG90eXBlLnJlbmRlckxvd1ByaW9yaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlckNhbGxiYWNrKCksdGhpc30sZS5wcm90b3R5cGUuYW5pbWF0ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fYW5pbWF0ZToodGhpcy5fYW5pbWF0ZT10LHRoaXMpfSxlLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LGUucHJvdG90eXBlLl9zY2FsZXM9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5fYXR0ckJpbmRpbmdzLmVhY2goKGZ1bmN0aW9uKGUsbil7dmFyIGk9ZS5zY2FsZTtudWxsIT1pJiYtMT09PXQuaW5kZXhPZihpKSYmdC5wdXNoKGkpfSkpLHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZWFjaCgoZnVuY3Rpb24oZSxuKXt2YXIgaT1lLnNjYWxlO251bGwhPWkmJi0xPT09dC5pbmRleE9mKGkpJiZ0LnB1c2goaSl9KSksdH0sZS5wcm90b3R5cGUuX3VwZGF0ZUV4dGVudHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3Jlc2V0RW50aXR5U3RvcmUoKSx0aGlzLl9zY2FsZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHQuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXIpfSkpfSxlLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLmdldEV4dGVudHNGb3JBdHRyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYobnVsbD09dGhpcy5fYXR0ckV4dGVudHNbdF0pe3ZhciBuPW9TdC5tZW1UaHVuaygoZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRhc2V0cygpfSksKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2F0dHJCaW5kaW5ncy5nZXQodCl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09ZXx8bnVsbD09ZS5hY2Nlc3Nvcj9udWxsOnQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcFN0KHQsZSxudWxsKX0pKX0pKTt0aGlzLl9hdHRyRXh0ZW50c1t0XT1ufXJldHVybiB0aGlzLl9hdHRyRXh0ZW50c1t0XSgpfSxlLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZihudWxsPT10aGlzLl9wcm9wZXJ0eUV4dGVudHNbdF0pe3ZhciBuPW9TdC5tZW1UaHVuaygoZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRhc2V0cygpfSksKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQpfSksKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2ZpbHRlckZvclByb3BlcnR5KHQpfSksKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbnVsbD09ZXx8bnVsbD09ZS5hY2Nlc3Nvcj9udWxsOnQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcFN0KHQsZSxuKX0pKX0pKTt0aGlzLl9wcm9wZXJ0eUV4dGVudHNbdF09bn1yZXR1cm4gdGhpcy5fcHJvcGVydHlFeHRlbnRzW3RdKCl9LGUucHJvdG90eXBlLl9pbmNsdWRlZFZhbHVlc0ZvclNjYWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZighdGhpcy5faXNBbmNob3JlZCYmIWUpcmV0dXJuW107dmFyIGk9W107cmV0dXJuIHRoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKChmdW5jdGlvbihlLHIpe2lmKGUuc2NhbGU9PT10KXt2YXIgbz1uLmdldEV4dGVudHNGb3JBdHRyKHIpO251bGwhPW8mJihpPWkuY29uY2F0KGVTdC5tZXJnZShvKSkpfX0pKSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goKGZ1bmN0aW9uKGUscil7aWYoZS5zY2FsZT09PXQpe3ZhciBvPW4uZ2V0RXh0ZW50c0ZvclByb3BlcnR5KHIpO251bGwhPW8mJihpPWkuY29uY2F0KGVTdC5tZXJnZShvKSkpfX0pKSxpfSxlLnByb3RvdHlwZS5hbmltYXRvcj1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lP3RoaXMuX2FuaW1hdG9yc1t0XToodGhpcy5fYW5pbWF0b3JzW3RdPWUsdGhpcyl9LGUucHJvdG90eXBlLnJlbmRlcmVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHZvaWQgMD09PXQ/bnVsbD09dGhpcy5fY2FudmFzPyJzdmciOiJjYW52YXMiOihudWxsPT10aGlzLl9jYW52YXMmJiJjYW52YXMiPT09dD8odGhpcy5fY2FudmFzPWVTdC5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikpLmNsYXNzZWQoInBsb3QtY2FudmFzIiwhMCksdGhpcy5fYnVmZmVyQ2FudmFzPWVTdC5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikpLG51bGwhPXRoaXMuZWxlbWVudCgpJiZ0aGlzLl9hcHBlbmRDYW52YXNOb2RlKCksdGhpcy5fZGF0YXNldFRvRHJhd2VyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudXNlQ2FudmFzKGUuX2NhbnZhcyl9KSksdGhpcy5yZW5kZXIoKSk6bnVsbCE9dGhpcy5fY2FudmFzJiYic3ZnIj09dCYmKHRoaXMuX2NhbnZhcy5yZW1vdmUoKSx0aGlzLl9jYW52YXM9bnVsbCx0aGlzLl9idWZmZXJDYW52YXM9bnVsbCx0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC51c2VTVkcoZS5fcmVuZGVyQXJlYSl9KSksdGhpcy5yZW5kZXIoKSksdGhpcyl9LGUucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FkZERhdGFzZXQodCksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpc30sZS5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24odCl7dGhpcy5fcmVtb3ZlRGF0YXNldCh0KTt2YXIgZT10aGlzLl9jcmVhdGVEcmF3ZXIodCk7cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5zZXQodCxlKSx0aGlzLl9pc1NldHVwJiZ0aGlzLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQodCksdC5vblVwZGF0ZSh0aGlzLl9vbkRhdGFzZXRVcGRhdGVDYWxsYmFjayksdGhpc30sZS5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVtb3ZlRGF0YXNldCh0KSx0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzfSxlLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbih0KXtyZXR1cm4tMT09PXRoaXMuZGF0YXNldHMoKS5pbmRleE9mKHQpfHwodGhpcy5fcmVtb3ZlRGF0YXNldE5vZGVzKHQpLHQub2ZmVXBkYXRlKHRoaXMuX29uRGF0YXNldFVwZGF0ZUNhbGxiYWNrKSx0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZGVsZXRlKHQpKSx0aGlzfSxlLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHQpe3RoaXMuX2RhdGFzZXRUb0RyYXdlci5nZXQodCkucmVtb3ZlKCl9LGUucHJvdG90eXBlLmRhdGFzZXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bXTtyZXR1cm4gdGhpcy5fZGF0YXNldFRvRHJhd2VyLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4ucHVzaChlKX0pKSxudWxsPT10P246KG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3JlbW92ZURhdGFzZXQodCl9KSksdC5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fYWRkRGF0YXNldCh0KX0pKSx0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzKX0sZS5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6bmV3IG5TdC5OdWxsfV19LGUucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXtmb3IodmFyIHI9ZS5fZGF0YXNldFRvRHJhd2VyLmdldCh0KSxvPTAsYT10LmRhdGEoKSxzPWEubGVuZ3RoLGw9ZnVuY3Rpb24ocyl7dmFyIGw9YVtzXSxjPWUuX3BpeGVsUG9pbnQobCxzLHQpO2lmKGlTdC5NYXRoLmlzTmFOKGMueCl8fGlTdC5NYXRoLmlzTmFOKGMueSkpcmV0dXJuImNvbnRpbnVlIjt2YXIgdT1lO24ucHVzaCh7ZGF0dW06bCxnZXQgcG9zaXRpb24oKXtyZXR1cm4gdS5fcGl4ZWxQb2ludC5jYWxsKHUsbCxzLHQpfSxpbmRleDpzLGRhdGFzZXQ6dCxkYXRhc2V0SW5kZXg6aSxjb21wb25lbnQ6ZSxkcmF3ZXI6cix2YWxpZERhdHVtSW5kZXg6b30pLG8rK30sYz0wO2M8cztjKyspbChjKX0pKSxufSxlLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciB0PW5ldyBpU3QuTWFwO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2V0KGUsZS5kYXRhKCkpfSkpLHR9LGUucHJvdG90eXBlLl9wYWludD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7ZGVsZXRlIHRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3Rvcjt2YXIgbj10aGlzLl9nZW5lcmF0ZURyYXdTdGVwcygpLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLHI9dGhpcy5kYXRhc2V0cygpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX2RhdGFzZXRUb0RyYXdlci5nZXQoZSl9KSk7aWYoImNhbnZhcyI9PT10aGlzLnJlbmRlcmVyKCkpe3ZhciBvPXRoaXMuX2NhbnZhcy5ub2RlKCk7by5nZXRDb250ZXh0KCIyZCIpLmNsZWFyUmVjdCgwLDAsby5jbGllbnRXaWR0aCxvLmNsaWVudEhlaWdodCksdGhpcy5fYnVmZmVyQ2FudmFzVmFsaWQ9ITF9dGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKHQsbyl7dmFyIGE9ZS5hcHBseURyYXdTdGVwcyhuLHQpO3Jbb10uZHJhdyhpLmdldCh0KSxhKX0pKTt2YXIgYT10aGlzLmRhdGFzZXRzKCkubWFwKChmdW5jdGlvbih0LHIpe3JldHVybiBlLmdldFRvdGFsRHJhd1RpbWUoaS5nZXQodCksbil9KSkscz1pU3QuTWF0aC5tYXgoYSwwKTt0aGlzLl9hZGRpdGlvbmFsUGFpbnQocyl9LGUucHJvdG90eXBlLnNlbGVjdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih2b2lkIDA9PT10JiYodD10aGlzLmRhdGFzZXRzKCkpLCJjYW52YXMiPT09dGhpcy5yZW5kZXJlcigpKXJldHVybiBlU3Quc2VsZWN0QWxsKCk7dmFyIG49W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9ZS5fZGF0YXNldFRvRHJhd2VyLmdldCh0KTtpZihudWxsIT1pKXt2YXIgcj1pLmdldFZpc3VhbFByaW1pdGl2ZXMoKTtuLnB1c2guYXBwbHkobixyKX19KSksZVN0LnNlbGVjdEFsbChuKX0sZS5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5fZ2V0RW50aXR5U3RvcmUodCkuZW50aXRpZXMoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkodCl9KSl9LGUucHJvdG90eXBlLmZpbHRlckVudGl0aWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXMoKS5maWx0ZXIodCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KHQpfSkpfSxlLnByb3RvdHlwZS5fZ2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLGk9ZnVuY3Rpb24odCl7cmV0dXJuIG4uX2VudGl0eUJvdW5kcyh0KX07cmV0dXJuIHZvaWQgMCE9PXQ/KChlPW5ldyBpU3QuRW50aXR5U3RvcmUpLmFkZEFsbCh0aGlzLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzKHQpLGksdGhpcy5fbG9jYWxPcmlnaW5Cb3VuZHMoKSksZSk6KHZvaWQgMD09PXRoaXMuX2NhY2hlZEVudGl0eVN0b3JlJiYoKGU9bmV3IGlTdC5FbnRpdHlTdG9yZSkuYWRkQWxsKHRoaXMuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXModGhpcy5kYXRhc2V0cygpKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlPWUpLHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlKX0sZS5wcm90b3R5cGUuX2xvY2FsT3JpZ2luQm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJue3RvcExlZnQ6e3g6MCx5OjB9LGJvdHRvbVJpZ2h0Ont4OnRoaXMud2lkdGgoKSx5OnRoaXMuaGVpZ2h0KCl9fX0sZS5wcm90b3R5cGUuX2VudGl0eUJvdW5kcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9waXhlbFBvaW50KHQuZGF0dW0sdC5pbmRleCx0LmRhdGFzZXQpO3JldHVybnt4OmUueCx5OmUueSx3aWR0aDowLGhlaWdodDowfX0sZS5wcm90b3R5cGUuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eT1mdW5jdGlvbih0KXtyZXR1cm57Ym91bmRzOnRoaXMuX2VudGl0eUJvdW5kcyh0KSxjb21wb25lbnQ6dC5jb21wb25lbnQsZGF0YXNldDp0LmRhdGFzZXQsZGF0YXNldEluZGV4OnQuZGF0YXNldEluZGV4LGRhdHVtOnQuZGF0dW0saW5kZXg6dC5pbmRleCxwb3NpdGlvbjp0LnBvc2l0aW9uLHNlbGVjdGlvbjplU3Quc2VsZWN0KHQuZHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXgodC52YWxpZERhdHVtSW5kZXgpKX19LGUucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwbG90cyBtdXN0IGltcGxlbWVudCBlbnRpdGllc0F0Iil9LGUucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0KHQpO3JldHVybiB2b2lkIDA9PT1lP3ZvaWQgMDp0aGlzLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoZSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lbnRpdGllc0luQm91bmRzKG51bGw9PWU/e3g6dC50b3BMZWZ0LngseTp0LnRvcExlZnQueSx3aWR0aDp0LmJvdHRvbVJpZ2h0LngtdC50b3BMZWZ0LngsaGVpZ2h0OnQuYm90dG9tUmlnaHQueS10LnRvcExlZnQueX06e3g6dC5taW4seTplLm1pbix3aWR0aDp0Lm1heC10Lm1pbixoZWlnaHQ6ZS5tYXgtZS5taW59KX0sZS5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllc0luQm91bmRzKHQpO2lmKG4pcmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KHQpfSkpfSxlLnByb3RvdHlwZS5lbnRpdGllc0luWEJvdW5kcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllc0luWEJvdW5kcyh0KTtpZihuKXJldHVybiBuLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eSh0KX0pKX0sZS5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJbllCb3VuZHModCk7aWYobilyZXR1cm4gbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkodCl9KSl9LGUucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbih0LGUpe3Qub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSx0Lm9mZlVwZGF0ZSh0aGlzLl9kZWZlcnJlZFJlc2V0RW50aXR5U3RvcmUpLHQucmVtb3ZlSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX0sZS5wcm90b3R5cGUuX2luc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbih0LGUpe3Qub25VcGRhdGUodGhpcy5fcmVuZGVyQ2FsbGJhY2spLHQub25VcGRhdGUodGhpcy5fZGVmZXJyZWRSZXNldEVudGl0eVN0b3JlKSx0LmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcil9LGUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm57fX0sZS5fc2NhbGVkQWNjZXNzb3I9ZnVuY3Rpb24odCl7dmFyIGU9dC5zY2FsZSxuPXQuYWNjZXNzb3IsaT10LnBvc3RTY2FsZSxyPW51bGw9PWU/bjpmdW5jdGlvbih0LGkscil7cmV0dXJuIGUuc2NhbGUobih0LGkscikpfTtyZXR1cm4gbnVsbD09aT9yOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaShyKHQsZSxuKSx0LGUsbil9fSxlLnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbih0LGUsbil7cmV0dXJue3g6MCx5OjB9fSxlLnByb3RvdHlwZS5fYW5pbWF0ZU9uTmV4dFJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRlJiZ0aGlzLl9kYXRhQ2hhbmdlZH0sZS5PUFRJTUlaRV9NRU1PSVpFX1BST0pFQ1RPUlM9ITEsZS5fQU5JTUFUSU9OX01BWF9EVVJBVElPTj02MDAsZX0pKGFTdC5Db21wb25lbnQpO2Z1bmN0aW9uIHBTdCh0LGUsbil7dmFyIGk9ZS5hY2Nlc3NvcixyPWUuc2NhbGU7aWYobnVsbD09cilyZXR1cm5bXTt2YXIgbz10LmRhdGEoKTtudWxsIT1uJiYobz1vLmZpbHRlcigoZnVuY3Rpb24oZSxpKXtyZXR1cm4gbihlLGksdCl9KSkpO3ZhciBhPW8ubWFwKChmdW5jdGlvbihlLG4pe3JldHVybiBpKGUsbix0KX0pKTtyZXR1cm4gci5leHRlbnRPZlZhbHVlcyhhKX0KLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi91d3QuUGxvdD1kU3QsT2JqZWN0LmRlZmluZVByb3BlcnR5KGN3dCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGZTdD11TyxtU3Q9dXd0LGdTdD1GZ3QsX1N0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gZlN0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24odCl7dmFyIGUsbj0xLzA7cmV0dXJuIHRoaXMuY29tcG9uZW50cygpLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZhciByPWkuZW50aXR5TmVhcmVzdCh0KTtpZihudWxsIT1yKXt2YXIgbz1nU3QuTWF0aC5kaXN0YW5jZVNxdWFyZWQoci5wb3NpdGlvbix0KTtvPD1uJiYobj1vLGU9cil9fSkpLGV9LGUucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihlKXtpZihudWxsIT1lJiYhKGUgaW5zdGFuY2VvZiBtU3QuUGxvdCkpdGhyb3cgbmV3IEVycm9yKCJQbG90IEdyb3VwIG9ubHkgYWNjZXB0cyBwbG90cyIpO3JldHVybiB0LnByb3RvdHlwZS5hcHBlbmQuY2FsbCh0aGlzLGUpLHRoaXN9LGV9KShieHQuR3JvdXApO2N3dC5QbG90R3JvdXA9X1N0O3ZhciB5U3Q9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovT2JqZWN0LmRlZmluZVByb3BlcnR5KHlTdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHZTdD11TyxiU3Q9RWR0LHhTdD1GZ3Qsd1N0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPVtdKTt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX3Jvd1BhZGRpbmc9MCxuLl9jb2x1bW5QYWRkaW5nPTAsbi5fcm93cz1bXSxuLl9yb3dXZWlnaHRzPVtdLG4uX2NvbHVtbldlaWdodHM9W10sbi5fblJvd3M9MCxuLl9uQ29scz0wLG4uX2NhbGN1bGF0ZWRMYXlvdXQ9bnVsbCxuLmFkZENsYXNzKCJ0YWJsZSIpLGUuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQsaSl7bnVsbCE9dCYmbi5hZGQodCxlLGkpfSkpfSkpLG59cmV0dXJuIHZTdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMuX25Sb3dzO2UrKylmb3IodmFyIG49MDtuPHRoaXMuX25Db2xzO24rKyludWxsIT10aGlzLl9yb3dzW2VdW25dJiZ0KHRoaXMuX3Jvd3NbZV1bbl0pfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0aGlzLl9uUm93cztlKyspZm9yKHZhciBuPTA7bjx0aGlzLl9uQ29scztuKyspaWYodGhpcy5fcm93c1tlXVtuXT09PXQpcmV0dXJuITA7cmV0dXJuITF9LGUucHJvdG90eXBlLmNvbXBvbmVudEF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8MHx8dD49dGhpcy5fblJvd3N8fGU8MHx8ZT49dGhpcy5fbkNvbHM/bnVsbDp0aGlzLl9yb3dzW3RdW2VdfSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlLG4pe2lmKG51bGw9PXQpdGhyb3cgRXJyb3IoIkNhbm5vdCBhZGQgbnVsbCB0byBhIHRhYmxlIGNlbGwiKTtpZighdGhpcy5oYXModCkpe2lmKG51bGwhPSh0aGlzLl9yb3dzW2VdJiZ0aGlzLl9yb3dzW2VdW25dKSl0aHJvdyBuZXcgRXJyb3IoImNlbGwgaXMgb2NjdXBpZWQiKTt0LmRldGFjaCgpLHRoaXMuX25Sb3dzPU1hdGgubWF4KGUrMSx0aGlzLl9uUm93cyksdGhpcy5fbkNvbHM9TWF0aC5tYXgobisxLHRoaXMuX25Db2xzKSx0aGlzLl9wYWRUYWJsZVRvU2l6ZSh0aGlzLl9uUm93cyx0aGlzLl9uQ29scyksdGhpcy5fcm93c1tlXVtuXT10LHRoaXMuX2Fkb3B0QW5kQW5jaG9yKHQpLHRoaXMucmVkcmF3KCl9cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0aGlzLl9uUm93cztlKyspZm9yKHZhciBuPTA7bjx0aGlzLl9uQ29scztuKyspaWYodGhpcy5fcm93c1tlXVtuXT09PXQpcmV0dXJuIHRoaXMuX3Jvd3NbZV1bbl09bnVsbCwhMDtyZXR1cm4hMX0sZS5wcm90b3R5cGUuX2l0ZXJhdGVMYXlvdXQ9ZnVuY3Rpb24odCxuLGkpe3ZvaWQgMD09PWkmJihpPSExKTtmb3IodmFyIHIsbyxhLHMsbCxjPXRoaXMuX3Jvd3MsdT1iU3QudHJhbnNwb3NlKHRoaXMuX3Jvd3MpLGg9dC10aGlzLl9jb2x1bW5QYWRkaW5nKih0aGlzLl9uQ29scy0xKSxkPW4tdGhpcy5fcm93UGFkZGluZyoodGhpcy5fblJvd3MtMSkscD1lLl9jYWxjQ29tcG9uZW50V2VpZ2h0cyh0aGlzLl9yb3dXZWlnaHRzLGMsKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fHx0LmZpeGVkSGVpZ2h0KCl9KSksZj1lLl9jYWxjQ29tcG9uZW50V2VpZ2h0cyh0aGlzLl9jb2x1bW5XZWlnaHRzLHUsKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fHx0LmZpeGVkV2lkdGgoKX0pKSxtPWYubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQ/LjU6dH0pKSxnPXAubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQ/LjU6dH0pKSxfPWUuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZShtLGgpLHk9ZS5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGcsZCksdj14U3QuQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoMCx0aGlzLl9uQ29scyksYj14U3QuQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoMCx0aGlzLl9uUm93cykseD0wOzspe3ZhciB3PXhTdC5BcnJheS5hZGQoYix5KSxTPXhTdC5BcnJheS5hZGQodixfKTt2PShhPXRoaXMuX2RldGVybWluZUd1YXJhbnRlZXMoUyx3LGkpKS5ndWFyYW50ZWVkV2lkdGhzLGI9YS5ndWFyYW50ZWVkSGVpZ2h0cyxzPWEud2FudHNXaWR0aEFyci5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKSxsPWEud2FudHNIZWlnaHRBcnIuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSk7dmFyIE09cixFPW87cj1oLWJTdC5zdW0oYS5ndWFyYW50ZWVkV2lkdGhzKSxvPWQtYlN0LnN1bShhLmd1YXJhbnRlZWRIZWlnaHRzKTt2YXIgVD12b2lkIDA7cz8oVD1hLndhbnRzV2lkdGhBcnIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdD8uMTowfSkpLFQ9eFN0LkFycmF5LmFkZChULGYpKTpUPWY7dmFyIEM9dm9pZCAwO2lmKGw/KEM9YS53YW50c0hlaWdodEFyci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Py4xOjB9KSksQz14U3QuQXJyYXkuYWRkKEMscCkpOkM9cCxfPWUuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZShULHIpLHk9ZS5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKEMsbykseCsrLCEocj4wJiZyIT09TXx8bz4wJiZvIT09RSkpYnJlYWs7aWYoeD41KWJyZWFrfXJldHVybiByPWgtYlN0LnN1bShhLmd1YXJhbnRlZWRXaWR0aHMpLG89ZC1iU3Quc3VtKGEuZ3VhcmFudGVlZEhlaWdodHMpLHtjb2xQcm9wb3J0aW9uYWxTcGFjZTpfPWUuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZShmLHIpLHJvd1Byb3BvcnRpb25hbFNwYWNlOnk9ZS5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKHAsbyksZ3VhcmFudGVlZFdpZHRoczphLmd1YXJhbnRlZWRXaWR0aHMsZ3VhcmFudGVlZEhlaWdodHM6YS5ndWFyYW50ZWVkSGVpZ2h0cyx3YW50c1dpZHRoOnMsd2FudHNIZWlnaHQ6bH19LGUucHJvdG90eXBlLl9kZXRlcm1pbmVHdWFyYW50ZWVzPWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj0hMSk7dmFyIGk9eFN0LkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fbkNvbHMpLHI9eFN0LkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fblJvd3MpLG89eFN0LkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KCExLHRoaXMuX25Db2xzKSxhPXhTdC5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSghMSx0aGlzLl9uUm93cyk7cmV0dXJuIHRoaXMuX3Jvd3MuZm9yRWFjaCgoZnVuY3Rpb24ocyxsKXtzLmZvckVhY2goKGZ1bmN0aW9uKHMsYyl7dmFyIHU7dT1udWxsIT1zP3MucmVxdWVzdGVkU3BhY2UodFtjXSxlW2xdKTp7bWluV2lkdGg6MCxtaW5IZWlnaHQ6MH07dmFyIGg9bj9NYXRoLm1pbih1Lm1pbldpZHRoLHRbY10pOnUubWluV2lkdGg7aVtjXT1NYXRoLm1heChpW2NdLGgpO3ZhciBkPW4/TWF0aC5taW4odS5taW5IZWlnaHQsZVtsXSk6dS5taW5IZWlnaHQ7cltsXT1NYXRoLm1heChyW2xdLGQpLG9bY109b1tjXXx8dS5taW5XaWR0aD50W2NdLGFbbF09YVtsXXx8dS5taW5IZWlnaHQ+ZVtsXX0pKX0pKSx7Z3VhcmFudGVlZFdpZHRoczppLGd1YXJhbnRlZWRIZWlnaHRzOnIsd2FudHNXaWR0aEFycjpvLHdhbnRzSGVpZ2h0QXJyOmF9fSxlLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jYWxjdWxhdGVkTGF5b3V0PXRoaXMuX2l0ZXJhdGVMYXlvdXQodCxlKSx7bWluV2lkdGg6YlN0LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRXaWR0aHMpLG1pbkhlaWdodDpiU3Quc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZEhlaWdodHMpfX0sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihlLG4saSl7dmFyIHI9dGhpczt0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxlLG4saSk7dmFyIG89YlN0LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRXaWR0aHMpLGE9YlN0LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRIZWlnaHRzKSxzPXRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQ7KG8+dGhpcy53aWR0aCgpfHxhPnRoaXMuaGVpZ2h0KCkpJiYocz10aGlzLl9pdGVyYXRlTGF5b3V0KHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpLCEwKSk7dmFyIGw9MCxjPXhTdC5BcnJheS5hZGQocy5yb3dQcm9wb3J0aW9uYWxTcGFjZSxzLmd1YXJhbnRlZWRIZWlnaHRzKSx1PXhTdC5BcnJheS5hZGQocy5jb2xQcm9wb3J0aW9uYWxTcGFjZSxzLmd1YXJhbnRlZWRXaWR0aHMpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dmFyIG49MDt0LmZvckVhY2goKGZ1bmN0aW9uKHQsaSl7bnVsbCE9dCYmdC5jb21wdXRlTGF5b3V0KHt4Om4seTpsfSx1W2ldLGNbZV0pLG4rPXVbaV0rci5fY29sdW1uUGFkZGluZ30pKSxsKz1jW2VdK3IuX3Jvd1BhZGRpbmd9KSksdGhpc30sZS5wcm90b3R5cGUucm93UGFkZGluZz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9yb3dQYWRkaW5nO2lmKCF4U3QuTWF0aC5pc1ZhbGlkTnVtYmVyKHQpfHx0PDApdGhyb3cgRXJyb3IoInJvd1BhZGRpbmcgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgdmFsdWUiKTtyZXR1cm4gdGhpcy5fcm93UGFkZGluZz10LHRoaXMucmVkcmF3KCksdGhpc30sZS5wcm90b3R5cGUuY29sdW1uUGFkZGluZz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9jb2x1bW5QYWRkaW5nO2lmKCF4U3QuTWF0aC5pc1ZhbGlkTnVtYmVyKHQpfHx0PDApdGhyb3cgRXJyb3IoImNvbHVtblBhZGRpbmcgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgdmFsdWUiKTtyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZz10LHRoaXMucmVkcmF3KCksdGhpc30sZS5wcm90b3R5cGUucm93V2VpZ2h0PWZ1bmN0aW9uKHQsZSl7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy5fcm93V2VpZ2h0c1t0XTtpZigheFN0Lk1hdGguaXNWYWxpZE51bWJlcihlKXx8ZTwwKXRocm93IEVycm9yKCJyb3dXZWlnaHQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgdmFsdWUiKTtyZXR1cm4gdGhpcy5fcm93V2VpZ2h0c1t0XT1lLHRoaXMucmVkcmF3KCksdGhpc30sZS5wcm90b3R5cGUuY29sdW1uV2VpZ2h0PWZ1bmN0aW9uKHQsZSl7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy5fY29sdW1uV2VpZ2h0c1t0XTtpZigheFN0Lk1hdGguaXNWYWxpZE51bWJlcihlKXx8ZTwwKXRocm93IEVycm9yKCJjb2x1bW5XZWlnaHQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgdmFsdWUiKTtyZXR1cm4gdGhpcy5fY29sdW1uV2VpZ2h0c1t0XT1lLHRoaXMucmVkcmF3KCksdGhpc30sZS5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3ZhciB0PWJTdC50cmFuc3Bvc2UodGhpcy5fcm93cyk7cmV0dXJuIGUuX2ZpeGVkU3BhY2UodCwoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXR8fHQuZml4ZWRXaWR0aCgpfSkpfSxlLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiBlLl9maXhlZFNwYWNlKHRoaXMuX3Jvd3MsKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fHx0LmZpeGVkSGVpZ2h0KCl9KSl9LGUucHJvdG90eXBlLl9wYWRUYWJsZVRvU2l6ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248dDtuKyspe3ZvaWQgMD09PXRoaXMuX3Jvd3Nbbl0mJih0aGlzLl9yb3dzW25dPVtdLHRoaXMuX3Jvd1dlaWdodHNbbl09bnVsbCk7Zm9yKHZhciBpPTA7aTxlO2krKyl2b2lkIDA9PT10aGlzLl9yb3dzW25dW2ldJiYodGhpcy5fcm93c1tuXVtpXT1udWxsKX1mb3IoaT0wO2k8ZTtpKyspdm9pZCAwPT09dGhpcy5fY29sdW1uV2VpZ2h0c1tpXSYmKHRoaXMuX2NvbHVtbldlaWdodHNbaV09bnVsbCl9LGUuX2NhbGNDb21wb25lbnRXZWlnaHRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIG51bGwhPXQ/dDplW2ldLm1hcChuKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJmV9KSwhMCk/MDoxfSkpfSxlLl9jYWxjUHJvcG9ydGlvbmFsU3BhY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1iU3Quc3VtKHQpO3JldHVybiAwPT09bj94U3QuQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoMCx0Lmxlbmd0aCk6dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlKnQvbn0pKX0sZS5fZml4ZWRTcGFjZT1mdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmZX0pLCEwKX07cmV0dXJuIG4odC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBuKHQubWFwKGUpKX0pKSl9LGV9KSh4eHQuQ29tcG9uZW50Q29udGFpbmVyKTt5U3QuVGFibGU9d1N0O3ZhciBTU3Q9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovT2JqZWN0LmRlZmluZVByb3BlcnR5KFNTdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE1TdD11TyxFU3Q9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT1udWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGUuX21heExpbmVzPTIsZX1yZXR1cm4gTVN0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fd3JhcHBlci5tYXhMaW5lcyh0aGlzLl9tYXhMaW5lcyk7dmFyIG49MD09PXRoaXMuYW5nbGUoKT90OmU7MD09PW4mJihuPTEvMCk7dmFyIGk9dGhpcy5fd3JhcHBlci53cmFwKHRoaXMuX3RleHQsdGhpcy5fbWVhc3VyZXIsbikscj10aGlzLl9tZWFzdXJlci5tZWFzdXJlKGkud3JhcHBlZFRleHQpO3JldHVybnttaW5XaWR0aDooMD09PXRoaXMuYW5nbGUoKT9yLndpZHRoOnIuaGVpZ2h0KSsyKnRoaXMucGFkZGluZygpLG1pbkhlaWdodDooMD09PXRoaXMuYW5nbGUoKT9yLmhlaWdodDpyLndpZHRoKSsyKnRoaXMucGFkZGluZygpfX0sZS5wcm90b3R5cGUubWF4TGluZXM9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX21heExpbmVzOih0aGlzLl9tYXhMaW5lcz10LHRoaXMucmVkcmF3KCksdGhpcyl9LGV9KShPeHQuTGFiZWwpO1NTdC5XcmFwcGVkTGFiZWw9RVN0O3ZhciBUU3Q9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovT2JqZWN0LmRlZmluZVByb3BlcnR5KFRTdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIENTdD11TyxBU3Q9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGUuYWRkQ2xhc3MoIngtZHJhZy1ib3gtbGF5ZXIiKSxlLl9oYXNDb3JuZXJzPSExLGV9cmV0dXJuIENTdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMsZSxuLGkpLHRoaXMuX3NldEJvdW5kcyh0aGlzLmJvdW5kcygpKSx0aGlzfSxlLnByb3RvdHlwZS5fc2V0Qm91bmRzPWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLl9zZXRCb3VuZHMuY2FsbCh0aGlzLHt0b3BMZWZ0Ont4OmUudG9wTGVmdC54LHk6MH0sYm90dG9tUmlnaHQ6e3g6ZS5ib3R0b21SaWdodC54LHk6dGhpcy5oZWlnaHQoKX19KX0sZS5wcm90b3R5cGUuX3NldFJlc2l6YWJsZUNsYXNzZXM9ZnVuY3Rpb24odCl7dCYmdGhpcy5lbmFibGVkKCk/dGhpcy5hZGRDbGFzcygieC1yZXNpemFibGUiKTp0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpfSxlLnByb3RvdHlwZS55U2NhbGU9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4gdC5wcm90b3R5cGUueVNjYWxlLmNhbGwodGhpcyk7dGhyb3cgbmV3IEVycm9yKCJ5U2NhbGVzIGNhbm5vdCBiZSBzZXQgb24gYW4gWERyYWdCb3hMYXllciIpfSxlLnByb3RvdHlwZS55RXh0ZW50PWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpcmV0dXJuIHQucHJvdG90eXBlLnlFeHRlbnQuY2FsbCh0aGlzKTt0aHJvdyBuZXcgRXJyb3IoIlhEcmFnQm94TGF5ZXIgaGFzIG5vIHlFeHRlbnQiKX0sZX0pKHJidC5EcmFnQm94TGF5ZXIpO1RTdC5YRHJhZ0JveExheWVyPUFTdDt2YXIga1N0PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShrU3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBMU3Q9dU8sUFN0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLmFkZENsYXNzKCJ5LWRyYWctYm94LWxheWVyIiksZS5faGFzQ29ybmVycz0hMSxlfXJldHVybiBMU3QuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihlLG4saSl7cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLGUsbixpKSx0aGlzLl9zZXRCb3VuZHModGhpcy5ib3VuZHMoKSksdGhpc30sZS5wcm90b3R5cGUuX3NldEJvdW5kcz1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5fc2V0Qm91bmRzLmNhbGwodGhpcyx7dG9wTGVmdDp7eDowLHk6ZS50b3BMZWZ0Lnl9LGJvdHRvbVJpZ2h0Ont4OnRoaXMud2lkdGgoKSx5OmUuYm90dG9tUmlnaHQueX19KX0sZS5wcm90b3R5cGUuX3NldFJlc2l6YWJsZUNsYXNzZXM9ZnVuY3Rpb24odCl7dCYmdGhpcy5lbmFibGVkKCk/dGhpcy5hZGRDbGFzcygieS1yZXNpemFibGUiKTp0aGlzLnJlbW92ZUNsYXNzKCJ5LXJlc2l6YWJsZSIpfSxlLnByb3RvdHlwZS54U2NhbGU9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4gdC5wcm90b3R5cGUueFNjYWxlLmNhbGwodGhpcyk7dGhyb3cgbmV3IEVycm9yKCJ4U2NhbGVzIGNhbm5vdCBiZSBzZXQgb24gYW4gWURyYWdCb3hMYXllciIpfSxlLnByb3RvdHlwZS54RXh0ZW50PWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpcmV0dXJuIHQucHJvdG90eXBlLnhFeHRlbnQuY2FsbCh0aGlzKTt0aHJvdyBuZXcgRXJyb3IoIllEcmFnQm94TGF5ZXIgaGFzIG5vIHhFeHRlbnQiKX0sZX0pKHJidC5EcmFnQm94TGF5ZXIpO2tTdC5ZRHJhZ0JveExheWVyPVBTdCwoZnVuY3Rpb24odCl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZT11TztlLl9fZXhwb3J0U3RhcihyYnQsdCksZS5fX2V4cG9ydFN0YXIob3h0LHQpLGUuX19leHBvcnRTdGFyKGd4dCx0KSxlLl9fZXhwb3J0U3RhcihieHQsdCksZS5fX2V4cG9ydFN0YXIoYXh0LHQpLGUuX19leHBvcnRTdGFyKEF4dCx0KSxlLl9fZXhwb3J0U3RhcihPeHQsdCksZS5fX2V4cG9ydFN0YXIoVnh0LHQpLGUuX19leHBvcnRTdGFyKGN3dCx0KSxlLl9fZXhwb3J0U3RhcihKYnQsdCksZS5fX2V4cG9ydFN0YXIoeVN0LHQpLGUuX19leHBvcnRTdGFyKFNTdCx0KSxlLl9fZXhwb3J0U3RhcihUU3QsdCksZS5fX2V4cG9ydFN0YXIoa1N0LHQpfSkoaWJ0KTt2YXIgTlN0PXt9LElTdD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KElTdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFJTdD11TyxPU3Q9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gdC5jYWxsKHRoaXMsInBhdGgiLCJhcmMgZmlsbCIpfHx0aGlzfXJldHVybiBSU3QuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24odCl7dC5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfSxlfSkoWXd0LlNWR0RyYXdlcik7SVN0LkFyY1NWR0RyYXdlcj1PU3Q7dmFyIHpTdD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi9PYmplY3QuZGVmaW5lUHJvcGVydHkoelN0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRFN0PXVPLEJTdD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiB0LmNhbGwodGhpcywicGF0aCIsImFyYyBvdXRsaW5lIil8fHRoaXN9cmV0dXJuIERTdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcz1mdW5jdGlvbih0KXt0LnN0eWxlKCJmaWxsIiwibm9uZSIpfSxlfSkoWXd0LlNWR0RyYXdlcik7elN0LkFyY091dGxpbmVTVkdEcmF3ZXI9QlN0O3ZhciBIU3Q9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovT2JqZWN0LmRlZmluZVByb3BlcnR5KEhTdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEZTdD11TyxWU3Q9R3d0LFVTdD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiB0LmNhbGwodGhpcywicGF0aCIsImFyZWEiKXx8dGhpc31yZXR1cm4gRlN0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe3Quc3R5bGUoInN0cm9rZSIsIm5vbmUiKX0sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleC5jYWxsKHRoaXMsMCl9LGV9KShZd3QuU1ZHRHJhd2VyKTtIU3QuQXJlYVNWR0RyYXdlcj1VU3Q7dmFyIGpTdD1bIm9wYWNpdHkiLCJmaWxsIiwiZmlsbC1vcGFjaXR5Il0sR1N0PVsib3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCJdO0hTdC5tYWtlQXJlYUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uIFdTdCh0LGUpe3JldHVybiBmdW5jdGlvbihuLGkscil7dmFyIG89VlN0LnJlc29sdmVBdHRyaWJ1dGVzKHIsalN0LGlbMF0sMCk7VlN0LnJlbmRlckFyZWEobix0KCksaVswXSxvKTt2YXIgYT1WU3QucmVzb2x2ZUF0dHJpYnV0ZXMocixHU3QsaVswXSwwKTtWU3QucmVuZGVyTGluZShuLGUoKSxpWzBdLGEpfX07dmFyIHFTdD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi9PYmplY3QuZGVmaW5lUHJvcGVydHkocVN0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWVN0PXVPLFhTdD1Hd3QsJFN0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIHQuY2FsbCh0aGlzLCJwYXRoIiwibGluZSIpfHx0aGlzfXJldHVybiBZU3QuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24odCl7dC5zdHlsZSgiZmlsbCIsIm5vbmUiKX0sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleC5jYWxsKHRoaXMsMCl9LGV9KShZd3QuU1ZHRHJhd2VyKTtxU3QuTGluZVNWR0RyYXdlcj0kU3Q7dmFyIEtTdD1bIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXTtxU3QubWFrZUxpbmVDYW52YXNEcmF3U3RlcD1mdW5jdGlvbiBaU3QodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixpKXt2YXIgcj1YU3QucmVzb2x2ZUF0dHJpYnV0ZXMoaSxLU3QsblswXSwwKTtYU3QucmVuZGVyTGluZShlLHQoKSxuWzBdLHIpfX07dmFyIEpTdD17fTshKGZ1bmN0aW9uKHQpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGU9dU8sbj1Hd3QsaT0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlKXt2b2lkIDA9PT1lJiYoZT0iIik7dmFyIG49dC5jYWxsKHRoaXMsInJlY3QiLCIiKXx8dGhpcztyZXR1cm4gbi5fcm9vdENsYXNzTmFtZT1lLG4uX3Jvb3QuY2xhc3NlZChuLl9yb290Q2xhc3NOYW1lLCEwKSxufXJldHVybiBlLl9fZXh0ZW5kcyhuLHQpLG59KShZd3QuU1ZHRHJhd2VyKTt0LlJlY3RhbmdsZVNWR0RyYXdlcj1pO3ZhciByPW4uQ29udGV4dFN0eWxlQXR0cnMuY29uY2F0KFsieCIsInkiLCJ3aWR0aCIsImhlaWdodCJdKTt0LlJlY3RhbmdsZUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKHQsZSxpKXt0LnNhdmUoKTtmb3IodmFyIG89ZS5sZW5ndGgsYT0wO2E8bzthKyspe3ZhciBzPWVbYV07aWYobnVsbCE9cyl7dmFyIGw9bi5yZXNvbHZlQXR0cmlidXRlcyhpLHIscyxhKTt0LmJlZ2luUGF0aCgpLHQucmVjdChsLngsbC55LGwud2lkdGgsbC5oZWlnaHQpLG4ucmVuZGVyUGF0aFdpdGhTdHlsZSh0LGwpfX10LnJlc3RvcmUoKX07dmFyIG89KGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIGkoZSl7cmV0dXJuIG4uY2FsbCh0aGlzLGUsdC5SZWN0YW5nbGVDYW52YXNEcmF3U3RlcCl8fHRoaXN9cmV0dXJuIGUuX19leHRlbmRzKGksbiksaX0pKG4uQ2FudmFzRHJhd2VyKTt0LlJlY3RhbmdsZUNhbnZhc0RyYXdlcj1vfSkoSlN0KTt2YXIgUVN0PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShRU3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB0TXQ9dU8sZU10PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIHQuY2FsbCh0aGlzLCJsaW5lIiwiIil8fHRoaXN9cmV0dXJuIHRNdC5fX2V4dGVuZHMoZSx0KSxlfSkoWXd0LlNWR0RyYXdlcik7UVN0LlNlZ21lbnRTVkdEcmF3ZXI9ZU10O3ZhciBuTXQ9e30saU10PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE3LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoaU10LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgck10PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxuLGkpe3ZvaWQgMD09PWkmJihpPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSx0aGlzLnNjcmVlbldpZHRoPWUsdGhpcy5zY3JlZW5IZWlnaHQ9bix0aGlzLmRldmljZVBpeGVsUmF0aW89aSx0aGlzLnBpeGVsV2lkdGg9ZSppLHRoaXMucGl4ZWxIZWlnaHQ9bippLHRoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIiksdC5zaXplUGl4ZWxzKHRoaXMuY3R4LGUsbixpKX1yZXR1cm4gdC5zaXplUGl4ZWxzPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXQuY2FudmFzO3Iud2lkdGg9ZSppLHIuaGVpZ2h0PW4qaSxyLnN0eWxlLndpZHRoPWUrInB4IixyLnN0eWxlLmhlaWdodD1uKyJweCIsdC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHQuc2NhbGUoaSxpKX0sdC5wcm90b3R5cGUuYmxpdD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09biYmKG49MCksdC5kcmF3SW1hZ2UodGhpcy5jYW52YXMsZSxuLHRoaXMuc2NyZWVuV2lkdGgsdGhpcy5zY3JlZW5IZWlnaHQpfSx0LnByb3RvdHlwZS5ibGl0Q2VudGVyPWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT0wKSx2b2lkIDA9PT1uJiYobj0wKSx0aGlzLmJsaXQodCxNYXRoLmZsb29yKGUtdGhpcy5zY3JlZW5XaWR0aC8yKSxNYXRoLmZsb29yKG4tdGhpcy5zY3JlZW5IZWlnaHQvMikpfSx0LnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oZSxuLGkpe3ZvaWQgMD09PWkmJihpPSExKTt2YXIgcj10aGlzLmRldmljZVBpeGVsUmF0aW87cmV0dXJuIHRoaXMuc2NyZWVuV2lkdGg9ZSx0aGlzLnNjcmVlbkhlaWdodD1uLHRoaXMucGl4ZWxXaWR0aD1lKnIsdGhpcy5waXhlbEhlaWdodD1uKnIsdC5zaXplUGl4ZWxzKHRoaXMuY3R4LGUsbixyKSxpJiZ0aGlzLmN0eC50cmFuc2xhdGUoZS8yLGUvMiksdGhpc30sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWUucGl4ZWxXaWR0aCxpPWUucGl4ZWxIZWlnaHQscj1lLmN0eDtyZXR1cm4gci5zYXZlKCksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLG51bGw9PXQ/ci5jbGVhclJlY3QoMCwwLG4saSk6KHIuZmlsbFN0eWxlPXQsci5maWxsUmVjdCgwLDAsbixpKSksci5yZXN0b3JlKCksdGhpc30sdC5wcm90b3R5cGUuZ2V0SW1hZ2VEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4LmdldEltYWdlRGF0YSgwLDAsdGhpcy5waXhlbFdpZHRoLHRoaXMucGl4ZWxIZWlnaHQpfSx0fSkoKTtpTXQuQ2FudmFzQnVmZmVyPXJNdCwKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KG5NdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG9NdD11TyxhTXQ9R3d0LHNNdD1pTXQsbE10PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIHQuY2FsbCh0aGlzLCJwYXRoIiwic3ltYm9sIil8fHRoaXN9cmV0dXJuIG9NdC5fX2V4dGVuZHMoZSx0KSxlfSkoWXd0LlNWR0RyYXdlcik7bk10LlN5bWJvbFNWR0RyYXdlcj1sTXQ7dmFyIGNNdD1hTXQuQ29udGV4dFN0eWxlQXR0cnMuY29uY2F0KFsieCIsInkiXSk7ZnVuY3Rpb24gdU10KHQsZSxuLGkscil7cmV0dXJuIG4rcj49MCYmbi1yPD10JiZpK3I+PTAmJmktcjw9ZX1mdW5jdGlvbiBoTXQodCxlLG4pe2lmKG51bGw9PXQpcmV0dXJuITE7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciByPW5baV07aWYodFtyXSE9ZVtyXSlyZXR1cm4hMX1yZXR1cm4hMH1uTXQubWFrZVN5bWJvbENhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uIGRNdCh0LGUsbixpKXt2YXIgcj10aGlzO3JldHVybiBmdW5jdGlvbihvLGEscyl7Zm9yKHZhciBsPW8uY2FudmFzLGM9bC5jbGllbnRXaWR0aCx1PWwuY2xpZW50SGVpZ2h0LGg9dm9pZCAwPT09aT9uZXcgc010LkNhbnZhc0J1ZmZlcigwLDApOmksZD1lKCkscD1uKCksZj1udWxsLG09bnVsbCxnPW51bGwsXz0wO188YS5sZW5ndGg7XysrKXt2YXIgeT1hW19dO2lmKG51bGwhPXkpe3ZhciB2PWFNdC5yZXNvbHZlQXR0cmlidXRlcyhzLGNNdCx5LF8pLGI9cCh5LF8sdCk7aWYodU10KGMsdSx2Lngsdi55LGIpKXt2YXIgeD1oTXQoZix2LGFNdC5Db250ZXh0U3R5bGVBdHRycyksdz1kKHksXyxyLl9kYXRhc2V0KTtpZih4JiZnPT1iJiZtPT13KTtlbHNle3ZhciBTPWIrYU10LmdldFN0cm9rZVdpZHRoKHYpKzE7KFM+aC5zY3JlZW5XaWR0aHx8Uz5oLnNjcmVlbkhlaWdodCkmJmgucmVzaXplKFMsUywhMCksaC5jbGVhcigpO3ZhciBNPWguY3R4O00uYmVnaW5QYXRoKCksdyhiKS5jb250ZXh0KE0pKG51bGwpLE0uY2xvc2VQYXRoKCksYU10LnJlbmRlclBhdGhXaXRoU3R5bGUoTSx2KSxtPXcsZz1iLGY9dn1oLmJsaXRDZW50ZXIobyx2Lngsdi55KX19fX19LChmdW5jdGlvbih0KXsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlPXVPO2UuX19leHBvcnRTdGFyKElTdCx0KSxlLl9fZXhwb3J0U3Rhcih6U3QsdCksZS5fX2V4cG9ydFN0YXIoSFN0LHQpLGUuX19leHBvcnRTdGFyKEd3dCx0KSxlLl9fZXhwb3J0U3RhcihXd3QsdCksZS5fX2V4cG9ydFN0YXIocVN0LHQpLGUuX19leHBvcnRTdGFyKEpTdCx0KSxlLl9fZXhwb3J0U3RhcihRU3QsdCksZS5fX2V4cG9ydFN0YXIoWXd0LHQpLGUuX19leHBvcnRTdGFyKG5NdCx0KX0pKE5TdCk7dmFyIHBNdD17fSxmTXQ9e30sbU10PXt9LGdNdD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGdNdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIF9NdD11Tyx5TXQ9Wnl0LHZNdD1GZ3QsYk10PVp3dCx4TXQ9dXd0LHdNdD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj0hMSxlLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPSExLGUuX2RlZmVycmVkUmVuZGVyaW5nPSExLGUuX2FwcGx5RGVmZXJyZWRSZW5kZXJpbmdUcmFuc2Zvcm09ZnVuY3Rpb24odCxuLGkscil7ZS5faXNBbmNob3JlZCYmKG51bGwhPWUuX3JlbmRlckFyZWEmJmUuX3JlbmRlckFyZWEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdCsiLCAiK24rIikgc2NhbGUoIitpKyIsICIrcisiKSIpLG51bGwhPWUuX2NhbnZhcyYmZS5fY2FudmFzLnN0eWxlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyJweCwgIituKyJweCkgc2NhbGUoIitpKyIsICIrcisiKSIpKX0sZS5hZGRDbGFzcygieHktcGxvdCIpLGUuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s9ZnVuY3Rpb24odCl7cmV0dXJuIGUuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YKCl9LGUuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2s9ZnVuY3Rpb24odCl7cmV0dXJuIGUuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZKCl9LGUuX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKCl7aWYoZS5kZWZlcnJlZFJlbmRlcmluZygpKXt2YXIgdD1lLngoKSYmZS54KCkuc2NhbGUsbj1lLnkoKSYmZS55KCkuc2NhbGU7ZS5fZGVmZXJyZWRSZW5kZXJlci51cGRhdGVEb21haW5zKHQsbil9ZWxzZSBlLnJlbmRlcigpfSxlLl9kZWZlcnJlZFJlbmRlcmVyPW5ldyBiTXQuRGVmZXJyZWRSZW5kZXJlcigoZnVuY3Rpb24oKXtyZXR1cm4gZS5yZW5kZXIoKX0pLGUuX2FwcGx5RGVmZXJyZWRSZW5kZXJpbmdUcmFuc2Zvcm0pLGV9cmV0dXJuIF9NdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZlcnJlZFJlbmRlcmluZygpJiZ0aGlzLl9kZWZlcnJlZFJlbmRlcmVyLnJlc2V0VHJhbnNmb3JtcygpLHQucHJvdG90eXBlLnJlbmRlci5jYWxsKHRoaXMpfSxlLnByb3RvdHlwZS5kZWZlcnJlZFJlbmRlcmluZz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9kZWZlcnJlZFJlbmRlcmluZztpZih0KXt2YXIgZT10aGlzLngoKSYmdGhpcy54KCkuc2NhbGUsbj10aGlzLnkoKSYmdGhpcy55KCkuc2NhbGU7dGhpcy5fZGVmZXJyZWRSZW5kZXJlci5zZXREb21haW5zKGUsbil9cmV0dXJuIHRoaXMuX2RlZmVycmVkUmVuZGVyaW5nPXQsdGhpc30sZS5wcm90b3R5cGUueD1mdW5jdGlvbih0LG4saSl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoZS5fWF9LRVkpO3RoaXMuX2JpbmRQcm9wZXJ0eShlLl9YX0tFWSx0LG4saSk7dmFyIHI9dGhpcy53aWR0aCgpO3JldHVybiBudWxsIT1uJiZudWxsIT1yJiZuLnJhbmdlKFswLHJdKSx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW4oKSx0aGlzLnJlbmRlcigpLHRoaXN9LGUucHJvdG90eXBlLnk9ZnVuY3Rpb24odCxuLGkpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KGUuX1lfS0VZKTt0aGlzLl9iaW5kUHJvcGVydHkoZS5fWV9LRVksdCxuLGkpO3ZhciByPXRoaXMuaGVpZ2h0KCk7cmV0dXJuIG51bGwhPW4mJm51bGwhPXImJm4ucmFuZ2UobiBpbnN0YW5jZW9mIHlNdC5DYXRlZ29yeT9bMCxyXTpbciwwXSksdGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbiYmdGhpcy5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpcy5yZW5kZXIoKSx0aGlzfSxlLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIngiPT09dCYmdGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj90aGlzLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eSgieSIpOiJ5IiE9PXQmJiJ5MCIhPT10fHwhdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj9udWxsOnRoaXMuX21ha2VGaWx0ZXJCeVByb3BlcnR5KCJ4Iil9LGUucHJvdG90eXBlLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0KTtpZihudWxsIT1lKXt2YXIgbj1lLmFjY2Vzc29yLGk9ZS5zY2FsZTtpZihudWxsIT1pKXJldHVybiBmdW5jdGlvbih0LGUscil7dmFyIG89aS5yYW5nZSgpO3JldHVybiB2TXQuTWF0aC5pblJhbmdlKGkuc2NhbGUobih0LGUscikpLG9bMF0sb1sxXSl9fXJldHVybiBudWxsfSxlLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24obixpKXt0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLG4saSksbi5vZmZVcGRhdGUoaT09PWUuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjayl9LGUucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24obixpKXt0LnByb3RvdHlwZS5faW5zdGFsbFNjYWxlRm9yS2V5LmNhbGwodGhpcyxuLGkpLG4ub25VcGRhdGUoaT09PWUuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjayl9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMueCgpLnNjYWxlJiZ0aGlzLngoKS5zY2FsZS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVhDYWxsYmFjayksdGhpcy55KCkuc2NhbGUmJnRoaXMueSgpLnNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RYRG9tYWluT25DaGFuZ2VGcm9tWUNhbGxiYWNrKSx0aGlzfSxlLnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4/IngiOnRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW4/InkiOiJub25lIjtzd2l0Y2godCl7Y2FzZSJ4Ijp0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSEwLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITEsdGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVkoKTticmVhaztjYXNlInkiOnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMCx0aGlzLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWCgpO2JyZWFrO2Nhc2Uibm9uZSI6dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj0hMSx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPSExO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNjYWxlIG5hbWUgJyIrdCsiJywgbXVzdCBiZSAneCcsICd5JyBvciAnbm9uZSciKX1yZXR1cm4gdGhpc30sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihlLG4saSl7dC5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMsZSxuLGkpO3ZhciByPXRoaXMueCgpLG89ciYmci5zY2FsZTtudWxsIT1vJiZvLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pO3ZhciBhPXRoaXMueSgpLHM9YSYmYS5zY2FsZTtyZXR1cm4gbnVsbCE9cyYmcy5yYW5nZShzIGluc3RhbmNlb2YgeU10LkNhdGVnb3J5P1swLHRoaXMuaGVpZ2h0KCldOlt0aGlzLmhlaWdodCgpLDBdKSx0aGlzfSxlLnByb3RvdHlwZS5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54KCkuc2NhbGU7bnVsbCE9dCYmdC5hdXRvRG9tYWluKCl9LGUucHJvdG90eXBlLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnkoKS5zY2FsZTtudWxsIT10JiZ0LmF1dG9Eb21haW4oKX0sZS5wcm90b3R5cGUuc2hvd0FsbERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpc30sZS5wcm90b3R5cGUuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YPWZ1bmN0aW9uKCl7dGhpcy5fcHJvamVjdG9yc1JlYWR5KCkmJnRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVlFeHRlbnRzQW5kQXV0b2RvbWFpbigpfSxlLnByb3RvdHlwZS5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVk9ZnVuY3Rpb24oKXt0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSYmdGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbiYmdGhpcy5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluKCl9LGUucHJvdG90eXBlLl9wcm9qZWN0b3JzUmVhZHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLngoKSxlPXRoaXMueSgpO3JldHVybiBudWxsIT10JiZudWxsIT10LmFjY2Vzc29yJiZudWxsIT1lJiZudWxsIT1lLmFjY2Vzc29yfSxlLnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbih0LGUsbil7dmFyIGk9eE10LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxyPXhNdC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJue3g6aSh0LGUsbikseTpyKHQsZSxuKX19LGUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxuPXQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyksaT10aGlzLmF0dHIoImRlZmluZWQiKTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe24uc2V0KHQsbi5nZXQodCkuZmlsdGVyKChmdW5jdGlvbihuLHIpe3JldHVybihmdW5jdGlvbih0LG4scil7dmFyIG89eE10LlBsb3QuX3NjYWxlZEFjY2Vzc29yKGUueCgpKSh0LG4sciksYT14TXQuUGxvdC5fc2NhbGVkQWNjZXNzb3IoZS55KCkpKHQsbixyKTtyZXR1cm4oIWl8fCExIT09aS5hY2Nlc3Nvcih0LG4scikpJiZ2TXQuTWF0aC5pc1ZhbGlkTnVtYmVyKG8pJiZ2TXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGEpfSkobixyLHQpfSkpKX0pKSxufSxlLl9YX0tFWT0ieCIsZS5fWV9LRVk9InkiLGV9KSh4TXQuUGxvdCk7Z010LlhZUGxvdD13TXQsCi8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtTXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBTTXQ9dU8sTU10PUVkdCxFTXQ9X210LFRNdD1OU3QsQ010PVd3dCxBTXQ9cVN0LGtNdD1aeXQsTE10PUl2dCxQTXQ9Rmd0LE5NdD1wTXQsSU10PXV3dCxSTXQ9Z010LE9NdD17bGluZWFyOk1NdC5jdXJ2ZUxpbmVhcixsaW5lYXJDbG9zZWQ6TU10LmN1cnZlTGluZWFyQ2xvc2VkLHN0ZXA6TU10LmN1cnZlU3RlcCxzdGVwQmVmb3JlOk1NdC5jdXJ2ZVN0ZXBCZWZvcmUsc3RlcEFmdGVyOk1NdC5jdXJ2ZVN0ZXBBZnRlcixiYXNpczpNTXQuY3VydmVCYXNpcyxiYXNpc09wZW46TU10LmN1cnZlQmFzaXNPcGVuLGJhc2lzQ2xvc2VkOk1NdC5jdXJ2ZUJhc2lzQ2xvc2VkLGJ1bmRsZTpNTXQuY3VydmVCdW5kbGUsY2FyZGluYWw6TU10LmN1cnZlQ2FyZGluYWwsY2FyZGluYWxPcGVuOk1NdC5jdXJ2ZUNhcmRpbmFsT3BlbixjYXJkaW5hbENsb3NlZDpNTXQuY3VydmVDYXJkaW5hbENsb3NlZCxtb25vdG9uZTpNTXQuY3VydmVNb25vdG9uZVh9O21NdC5DdXJ2ZU5hbWU9U210Lm1ha2VFbnVtKFsibGluZWFyIiwibGluZWFyQ2xvc2VkIiwic3RlcCIsInN0ZXBCZWZvcmUiLCJzdGVwQWZ0ZXIiLCJiYXNpcyIsImJhc2lzT3BlbiIsImJhc2lzQ2xvc2VkIiwiYnVuZGxlIiwiY2FyZGluYWwiLCJjYXJkaW5hbE9wZW4iLCJjYXJkaW5hbENsb3NlZCIsIm1vbm90b25lIl0pO3ZhciB6TXQ9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7ZS5fY3VydmU9ImxpbmVhciIsZS5fYXV0b3JhbmdlU21vb3RoPSExLGUuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPSEwLGUuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD0hMSxlLl9kb3duc2FtcGxpbmdFbmFibGVkPSExLGUuYWRkQ2xhc3MoImxpbmUtcGxvdCIpO3ZhciBuPW5ldyBFTXQuRWFzaW5nO3JldHVybiBuLnN0ZXBEdXJhdGlvbihJTXQuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksbi5lYXNpbmdNb2RlKCJleHBJbk91dCIpLG4ubWF4VG90YWxEdXJhdGlvbihJTXQuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksZS5hbmltYXRvcihOTXQuQW5pbWF0b3IuTUFJTixuKSxlLmF0dHIoInN0cm9rZSIsKG5ldyBrTXQuQ29sb3IpLnJhbmdlKClbMF0pLGUuYXR0cigic3Ryb2tlLXdpZHRoIiwiMnB4IiksZX1yZXR1cm4gU010Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLng9ZnVuY3Rpb24oZSxuLGkpe3JldHVybiBudWxsPT1lP3QucHJvdG90eXBlLnguY2FsbCh0aGlzKToodC5wcm90b3R5cGUueC5jYWxsKHRoaXMsZSxuLGkpLHRoaXMuX3NldFNjYWxlU25hcHBpbmcoKSx0aGlzKX0sZS5wcm90b3R5cGUueT1mdW5jdGlvbihlLG4saSl7cmV0dXJuIG51bGw9PWU/dC5wcm90b3R5cGUueS5jYWxsKHRoaXMpOih0LnByb3RvdHlwZS55LmNhbGwodGhpcyxlLG4saSksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSxlLnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3QucHJvdG90eXBlLmF1dG9yYW5nZU1vZGUuY2FsbCh0aGlzKToodC5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZS5jYWxsKHRoaXMsZSksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSxlLnByb3RvdHlwZS5hdXRvcmFuZ2VTbW9vdGg9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fYXV0b3JhbmdlU21vb3RoOih0aGlzLl9hdXRvcmFuZ2VTbW9vdGg9dCx0aGlzLl9zZXRTY2FsZVNuYXBwaW5nKCksdGhpcyl9LGUucHJvdG90eXBlLl9zZXRTY2FsZVNuYXBwaW5nPWZ1bmN0aW9uKCl7IngiPT09dGhpcy5hdXRvcmFuZ2VNb2RlKCkmJnRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUgaW5zdGFuY2VvZiBMTXQuUXVhbnRpdGF0aXZlU2NhbGUmJnRoaXMueCgpLnNjYWxlLnNuYXBwaW5nRG9tYWluRW5hYmxlZCghdGhpcy5hdXRvcmFuZ2VTbW9vdGgoKSksInkiPT09dGhpcy5hdXRvcmFuZ2VNb2RlKCkmJnRoaXMueSgpJiZ0aGlzLnkoKS5zY2FsZSYmdGhpcy55KCkuc2NhbGUgaW5zdGFuY2VvZiBMTXQuUXVhbnRpdGF0aXZlU2NhbGUmJnRoaXMueSgpLnNjYWxlLnNuYXBwaW5nRG9tYWluRW5hYmxlZCghdGhpcy5hdXRvcmFuZ2VTbW9vdGgoKSl9LGUucHJvdG90eXBlLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2N1cnZlOih0aGlzLl9jdXJ2ZT10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmRvd25zYW1wbGluZ0VuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZG93bnNhbXBsaW5nRW5hYmxlZDoodGhpcy5fZG93bnNhbXBsaW5nRW5hYmxlZD10LHRoaXMpfSxlLnByb3RvdHlwZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZDoodGhpcy5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ9dCx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5jb2xsYXBzZURlbnNlTGluZXNFbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZDoodGhpcy5fY29sbGFwc2VEZW5zZVZlcnRpY2FsTGluZXNFbmFibGVkPXQsdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBuZXcgQ010LlByb3h5RHJhd2VyKChmdW5jdGlvbigpe3JldHVybiBuZXcgQU10LkxpbmVTVkdEcmF3ZXJ9KSwoZnVuY3Rpb24obil7cmV0dXJuIG5ldyBUTXQuQ2FudmFzRHJhd2VyKG4sQU10Lm1ha2VMaW5lQ2FudmFzRHJhd1N0ZXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2QzTGluZUZhY3RvcnkodCl9KSkpfSkpfSxlLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24oZSl7dmFyIG49dC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxlKTtpZighdGhpcy5fYXV0b3JhbmdlU21vb3RoKXJldHVybiBuO2lmKHRoaXMuYXV0b3JhbmdlTW9kZSgpIT09ZSlyZXR1cm4gbjtpZigieCIhPT10aGlzLmF1dG9yYW5nZU1vZGUoKSYmInkiIT09dGhpcy5hdXRvcmFuZ2VNb2RlKCkpcmV0dXJuIG47dmFyIGkscj10aGlzLl9nZXRFZGdlSW50ZXJzZWN0aW9uUG9pbnRzKCk7cmV0dXJuIGk9InkiPT09dGhpcy5hdXRvcmFuZ2VNb2RlKCk/ci5sZWZ0LmNvbmNhdChyLnJpZ2h0KS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSk6ci50b3AuY29uY2F0KHIuYm90dG9tKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSksbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBNTXQuZXh0ZW50KE1NdC5tZXJnZShbdCxpXSkpfSkpfSxlLnByb3RvdHlwZS5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoISh0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIExNdC5RdWFudGl0YXRpdmVTY2FsZSYmdGhpcy54KCkuc2NhbGUgaW5zdGFuY2VvZiBMTXQuUXVhbnRpdGF0aXZlU2NhbGUpKXJldHVybntsZWZ0OltdLHJpZ2h0OltdLHRvcDpbXSxib3R0b206W119O3ZhciBlPXRoaXMueSgpLnNjYWxlLG49dGhpcy54KCkuc2NhbGUsaT17bGVmdDpbXSxyaWdodDpbXSx0b3A6W10sYm90dG9tOltdfSxyPW4uc2NhbGUobi5kb21haW4oKVswXSksbz1uLnNjYWxlKG4uZG9tYWluKClbMV0pLGE9ZS5zY2FsZShlLmRvbWFpbigpWzBdKSxzPWUuc2NhbGUoZS5kb21haW4oKVsxXSk7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKChmdW5jdGlvbihsKXtmb3IodmFyIGMsdSxoLGQscD1sLmRhdGEoKSxmPTE7ZjxwLmxlbmd0aDtmKyspYz1ofHxuLnNjYWxlKHQueCgpLmFjY2Vzc29yKHBbZi0xXSxmLTEsbCkpLHU9ZHx8ZS5zY2FsZSh0LnkoKS5hY2Nlc3NvcihwW2YtMV0sZi0xLGwpKSxoPW4uc2NhbGUodC54KCkuYWNjZXNzb3IocFtmXSxmLGwpKSxkPWUuc2NhbGUodC55KCkuYWNjZXNzb3IocFtmXSxmLGwpKSxjPHI9PXI8PWgmJmkubGVmdC5wdXNoKHt4OnIseTplLmludmVydCh1KyhyLWMpKihkLXUpLyhoLWMpKX0pLGM8bz09bzw9aCYmaS5yaWdodC5wdXNoKHt4Om8seTplLmludmVydCh1KyhvLWMpKihkLXUpLyhoLWMpKX0pLHU8cz09czw9ZCYmaS50b3AucHVzaCh7eDpuLmludmVydChjKyhzLXUpKihoLWMpLyhkLXUpKSx5OnN9KSx1PGE9PWE8PWQmJmkuYm90dG9tLnB1c2goe3g6bi5pbnZlcnQoYysoYS11KSooaC1jKS8oZC11KSkseTphfSl9KSksaX0sZS5wcm90b3R5cGUuX2dldFJlc2V0WUZ1bmN0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy55KCkuc2NhbGUuZG9tYWluKCksZT1NYXRoLm1heCh0WzBdLHRbMV0pLG49TWF0aC5taW4odFswXSx0WzFdKSxpPWU8MCYmZXx8bj4wJiZufHwwLHI9dGhpcy55KCkuc2NhbGUuc2NhbGUoaSk7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gcn19LGUucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciB0PVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIGU9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7ZS5kPXRoaXMuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3IoSU10LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpKSx0LnB1c2goe2F0dHJUb1Byb2plY3RvcjplLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKE5NdC5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gdC5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoTk10LkFuaW1hdG9yLk1BSU4pfSksdH0sZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIGU9dC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyk7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKCJkIiE9PXQpe3ZhciBuPWVbdF07ZVt0XT1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIHQubGVuZ3RoPjA/bih0WzBdLGUsaSk6bnVsbH19fSkpLGV9LGUucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5lbnRpdHlOZWFyZXN0QnlYVGhlblkodCk7cmV0dXJuIG51bGwhPWU/W2VdOltdfSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0QnlYVGhlblk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49MS8wLGk9MS8wLHI9dGhpcy5ib3VuZHMoKSxvPXRoaXMuZW50aXRpZXMoKSxhPW8ubGVuZ3RoLHM9MDtzPGE7cysrKXt2YXIgbD1vW3NdO2lmKFBNdC5NYXRoLndpdGhpbihsLnBvc2l0aW9uLHIpKXt2YXIgYz1NYXRoLmFicyh0LngtbC5wb3NpdGlvbi54KSx1PU1hdGguYWJzKHQueS1sLnBvc2l0aW9uLnkpOyhjPG58fGM9PT1uJiZ1PGkpJiYoZT1sLG49YyxpPXUpfX1yZXR1cm4gZX0sZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciBlPXQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKTtyZXR1cm4gZS5kPXRoaXMuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3IoSU10LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxJTXQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKSxlfSxlLnByb3RvdHlwZS5fY29uc3RydWN0TGluZVByb2plY3Rvcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKGkscixvKXtyZXR1cm4gbi5fZDNMaW5lRmFjdG9yeShvLHQsZSkoaSl9fSxlLnByb3RvdHlwZS5fZDNMaW5lRmFjdG9yeT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PWUmJihlPUlNdC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkpLHZvaWQgMD09PW4mJihuPUlNdC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpLE1NdC5saW5lKCkueCgoZnVuY3Rpb24obixpKXtyZXR1cm4gZShuLGksdCl9KSkueSgoZnVuY3Rpb24oZSxpKXtyZXR1cm4gbihlLGksdCl9KSkuY3VydmUodGhpcy5fZ2V0Q3VydmVGYWN0b3J5KCkpLmRlZmluZWQoKGZ1bmN0aW9uKGkscil7cmV0dXJuKGZ1bmN0aW9uKHQsaSxyKXt2YXIgbz1lKHQsaSxyKSxhPW4odCxpLHIpO3JldHVybiBQTXQuTWF0aC5pc1ZhbGlkTnVtYmVyKG8pJiZQTXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGEpfSkoaSxyLHQpfSkpfSxlLnByb3RvdHlwZS5fZ2V0Q3VydmVGYWN0b3J5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJ2ZSgpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9T010W3RdO3JldHVybiBudWxsPT1lP09NdC5saW5lYXI6ZX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9bmV3IFBNdC5NYXA7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT1uLmRhdGEoKTtpZih0Ll9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZHx8dC5fZG93bnNhbXBsaW5nRW5hYmxlZCl7Zm9yKHZhciByPVtdLG89aS5sZW5ndGgsYT0wO2E8bzthKyspclthXT1hO3QuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkJiYocj10Ll9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nKG4scikpLHQuX2Rvd25zYW1wbGluZ0VuYWJsZWQmJihyPXQuX2ZpbHRlckRvd25zYW1wbGluZyhuLHIpKSx0Ll9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQmJihyPXQuX2ZpbHRlckRlbnNlTGluZXMobixyKSk7dmFyIHM9W10sbD1yLmxlbmd0aDtmb3IoYT0wO2E8bDthKyspc1thXT1pW3JbYV1dO2Uuc2V0KG4sW3NdKX1lbHNlIGUuc2V0KG4sW2ldKX0pKSxlfSxlLnByb3RvdHlwZS5fZmlsdGVyQ3JvcHBlZFJlbmRlcmluZz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLGk9SU10LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxyPUlNdC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksbz10LmRhdGEoKSxhPVtdLHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gUE10Lk1hdGguaW5SYW5nZSh0LDAsbi53aWR0aCgpKSYmUE10Lk1hdGguaW5SYW5nZShlLDAsbi5oZWlnaHQoKSl9LGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGM9cyhpKG9bZVtsXV0sZVtsXSx0KSxyKG9bZVtsXV0sZVtsXSx0KSk7aWYoIWMmJm51bGwhPWVbbC0xXSYmbnVsbCE9b1tlW2wtMV1dKXt2YXIgdT1pKG9bZVtsLTFdXSxlW2wtMV0sdCksaD1yKG9bZVtsLTFdXSxlW2wtMV0sdCk7Yz1jfHxzKHUsaCl9aWYoIWMmJm51bGwhPWVbbCsxXSYmbnVsbCE9b1tlW2wrMV1dKXt2YXIgZD1pKG9bZVtsKzFdXSxlW2wrMV0sdCkscD1yKG9bZVtsKzFdXSxlW2wrMV0sdCk7Yz1jfHxzKGQscCl9YyYmYS5wdXNoKGVbbF0pfXJldHVybiBhfSxlLnByb3RvdHlwZS5fZmlsdGVyRG93bnNhbXBsaW5nPWZ1bmN0aW9uKHQsZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybltdO2Zvcih2YXIgbj10LmRhdGEoKSxpPUlNdC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkscj1JTXQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLG89W2VbMF1dLGE9ZnVuY3Rpb24obyxhKXt2YXIgcz1pKG5bZVtvXV0sZVtvXSx0KSxsPXIobltlW29dXSxlW29dLHQpLGM9aShuW2VbbysxXV0sZVtvKzFdLHQpLHU9cihuW2VbbysxXV0sZVtvKzFdLHQpO2lmKGE9PT0xLzApcmV0dXJuIE1hdGguZmxvb3Iocyk9PT1NYXRoLmZsb29yKGMpO3ZhciBoPWwrKGMtcykqYTtyZXR1cm4gTWF0aC5mbG9vcih1KT09PU1hdGguZmxvb3IoaCl9LHM9MDtzPGUubGVuZ3RoLTE7KXtmb3IodmFyIGw9ZVtzXSxjPWkobltlW3NdXSxlW3NdLHQpLHU9cihuW2Vbc11dLGVbc10sdCksaD1pKG5bZVtzKzFdXSxlW3MrMV0sdCksZD1yKG5bZVtzKzFdXSxlW3MrMV0sdCkscD1NYXRoLmZsb29yKGMpPT09TWF0aC5mbG9vcihoKT8xLzA6KGQtdSkvKGgtYyksZj1lW3NdLG09cD09PTEvMD91OmMsZz1mLF89bSx5PSEwO3M8ZS5sZW5ndGgtMSYmKHl8fGEocyxwKSk7KXtzKysseT0hMTt2YXIgdj1wPT09MS8wP3IobltlW3NdXSxlW3NdLHQpOmkobltlW3NdXSxlW3NdLHQpO3Y+XyYmKF89dixnPWVbc10pLHY8bSYmKG09dixmPWVbc10pfXZhciBiPWVbc107ZiE9PWwmJm8ucHVzaChmKSxnIT09ZiYmZyE9PWwmJm8ucHVzaChnKSxiIT09bCYmYiE9PWYmJmIhPT1nJiZvLnB1c2goYil9cmV0dXJuIG99LGUucHJvdG90eXBlLl9maWx0ZXJEZW5zZUxpbmVzPWZ1bmN0aW9uKHQsZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybltdO3ZhciBuPXQuZGF0YSgpLGk9SU10LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxyPUlNdC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJuIHRoaXMuX2J1Y2tldEJ5WCh0LGUsKGZ1bmN0aW9uKGUpe3JldHVybiBpKG5bZV0sZSx0KX0pLChmdW5jdGlvbihlKXtyZXR1cm4gcihuW2VdLGUsdCl9KSl9LGUucHJvdG90eXBlLl9idWNrZXRCeVg9ZnVuY3Rpb24odCxlLG4saSl7Zm9yKHZhciByPVtdLG89dC5kYXRhKCksYT1udWxsLHM9ZS5sZW5ndGgsbD0wO2w8PXM7KytsKXt2YXIgYz1lW2xdO2lmKG51bGwhPW9bY10pe3ZhciB1PU1hdGguZmxvb3IobihjKSksaD1pKGMpO251bGw9PWE/YT1uZXcgUE10LkJ1Y2tldChjLHUsaCk6YS5pc0luQnVja2V0KHUpP2EuYWRkVG9CdWNrZXQoaCxjKTooci5wdXNoLmFwcGx5KHIsYS5nZXRVbmlxdWVJbmRpY2VzKCkpLGE9bmV3IFBNdC5CdWNrZXQoYyx1LGgpKX19cmV0dXJuIG51bGwhPWEmJnIucHVzaC5hcHBseShyLGEuZ2V0VW5pcXVlSW5kaWNlcygpKSxyfSxlfSkoUk10LlhZUGxvdCk7bU10LkxpbmU9ek10LAovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZk10LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRE10PXVPLEJNdD1FZHQsSE10PVp5dCxGTXQ9Rmd0LFZNdD1OU3QsVU10PUhTdCxqTXQ9V3d0LEdNdD1xU3QsV010PXBNdCxxTXQ9dXd0LFlNdD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5hZGRDbGFzcygiYXJlYS1wbG90IiksZS55MCgwKSxlLmF0dHIoImZpbGwtb3BhY2l0eSIsLjI1KSxlLmF0dHIoImZpbGwiLChuZXcgSE10LkNvbG9yKS5yYW5nZSgpWzBdKSxlLl9saW5lRHJhd2Vycz1uZXcgRk10Lk1hcCxlfXJldHVybiBETXQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUueT1mdW5jdGlvbihuLGkpe2lmKG51bGw9PW4pcmV0dXJuIHQucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihudWxsPT1pP3QucHJvdG90eXBlLnkuY2FsbCh0aGlzLG4pOnQucHJvdG90eXBlLnkuY2FsbCh0aGlzLG4saSksbnVsbCE9aSl7dmFyIHI9dGhpcy55MCgpLmFjY2Vzc29yO251bGwhPXImJnRoaXMuX2JpbmRQcm9wZXJ0eShlLl9ZMF9LRVkscixpKSx0aGlzLl91cGRhdGVZU2NhbGUoKX1yZXR1cm4gdGhpc30sZS5wcm90b3R5cGUueTA9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoZS5fWTBfS0VZKTt2YXIgbj10aGlzLnkoKTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KGUuX1kwX0tFWSx0LG4mJm4uc2NhbGUpLHRoaXMuX3VwZGF0ZVlTY2FsZSgpLHRoaXMucmVuZGVyKCksdGhpc30sZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZT1mdW5jdGlvbigpe3QucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGUuY2FsbCh0aGlzKSx0aGlzLl91cGRhdGVZU2NhbGUoKX0sZS5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5fbGluZURyYXdlcnMuc2V0KGUsbmV3IFZNdC5Qcm94eURyYXdlcigoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEdNdC5MaW5lU1ZHRHJhd2VyfSksKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVk10LkNhbnZhc0RyYXdlcih0LEdNdC5tYWtlTGluZUNhbnZhc0RyYXdTdGVwKChmdW5jdGlvbigpe3ZhciB0PXFNdC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihuLngoKSksaT1xTXQuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi55KCkpO3JldHVybiBuLl9kM0xpbmVGYWN0b3J5KGUsdCxpKX0pKSl9KSkpLHQucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyxlKSx0aGlzfSxlLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQuY2FsbCh0aGlzLGUpO3ZhciBuPXRoaXMuX2xpbmVEcmF3ZXJzLmdldChlKTtyZXR1cm4ic3ZnIj09PXRoaXMucmVuZGVyZXIoKT9uLnVzZVNWRyh0aGlzLl9yZW5kZXJBcmVhKTpuLnVzZUNhbnZhcyh0aGlzLl9jYW52YXMpLG59LGUucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMsZSksdGhpcy5fbGluZURyYXdlcnMuZ2V0KGUpLnJlbW92ZSgpfSxlLnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuX2dlbmVyYXRlTGluZURyYXdTdGVwcygpLG49dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKChmdW5jdGlvbihpKXt2YXIgcj1xTXQuUGxvdC5hcHBseURyYXdTdGVwcyhlLGkpO3QuX2xpbmVEcmF3ZXJzLmdldChpKS5kcmF3KG4uZ2V0KGkpLHIpfSkpfSxlLnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHQ9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgZT10aGlzLl9nZW5lcmF0ZUxpbmVBdHRyVG9Qcm9qZWN0b3IoKTtlLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3RvcihxTXQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHRoaXMuX2dldFJlc2V0WUZ1bmN0aW9uKCkpLHQucHVzaCh7YXR0clRvUHJvamVjdG9yOmUsYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoV010LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiB0LnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZW5lcmF0ZUxpbmVBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihXTXQuQW5pbWF0b3IuTUFJTil9KSx0fSxlLnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7cmV0dXJuIHQuZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKHFNdC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkscU10LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSksdH0sZS5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBuZXcgak10LlByb3h5RHJhd2VyKChmdW5jdGlvbigpe3JldHVybiBuZXcgVU10LkFyZWFTVkdEcmF3ZXJ9KSwoZnVuY3Rpb24obil7cmV0dXJuIG5ldyBWTXQuQ2FudmFzRHJhd2VyKG4sVU10Lm1ha2VBcmVhQ2FudmFzRHJhd1N0ZXAoKGZ1bmN0aW9uKCl7dmFyIG49ZS5fY29vcmRpbmF0ZVByb2plY3RvcnMoKSxpPW5bMF0scj1uWzFdLG89blsyXSxhPWUuX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoaSxyKTtyZXR1cm4gZS5fY3JlYXRlQXJlYUdlbmVyYXRvcihpLHIsbyxhLHQpfSksKGZ1bmN0aW9uKCl7dmFyIG49ZS5fY29vcmRpbmF0ZVByb2plY3RvcnMoKSxpPW5bMF0scj1uWzFdLG89ZS5fY3JlYXRlRGVmaW5lZFByb2plY3RvcihpLHIpO3JldHVybiBlLl9jcmVhdGVUb3BMaW5lR2VuZXJhdG9yKGkscixvLHQpfSkpKX0pKX0sZS5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHQ9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgZT10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtlLmQ9dGhpcy5fY29uc3RydWN0QXJlYVByb2plY3RvcihxTXQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHRoaXMuX2dldFJlc2V0WUZ1bmN0aW9uKCkscU10LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSkpLHQucHVzaCh7YXR0clRvUHJvamVjdG9yOmUsYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoV010LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiB0LnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihXTXQuQW5pbWF0b3IuTUFJTil9KSx0fSxlLnByb3RvdHlwZS5fdXBkYXRlWVNjYWxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRFeHRlbnRzRm9yUHJvcGVydHkoInkwIiksZT1GTXQuQXJyYXkuZmxhdHRlbih0KSxuPUZNdC5BcnJheS51bmlxKGUpLGk9MT09PW4ubGVuZ3RoP25bMF06bnVsbCxyPXRoaXMueSgpLG89ciYmci5zY2FsZTtudWxsIT1vJiYobnVsbCE9dGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXImJihvLnJlbW92ZVBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXIpLHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyPW51bGwpLG51bGwhPWkmJih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltpXX0sby5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSkpfSxlLnByb3RvdHlwZS5fZ2V0UmVzZXRZRnVuY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gcU10LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSl9LGUucHJvdG90eXBlLl9jb29yZGluYXRlUHJvamVjdG9ycz1mdW5jdGlvbigpe3JldHVybltxTXQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHFNdC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkscU10LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSldfSxlLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIGU9dC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpLG49dGhpcy5fY29vcmRpbmF0ZVByb2plY3RvcnMoKTtyZXR1cm4gZS5kPXRoaXMuX2NvbnN0cnVjdEFyZWFQcm9qZWN0b3IoblswXSxuWzFdLG5bMl0pLGV9LGUucHJvdG90eXBlLnNlbGVjdGlvbnM9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztpZih2b2lkIDA9PT1lJiYoZT10aGlzLmRhdGFzZXRzKCkpLCJjYW52YXMiPT09dGhpcy5yZW5kZXJlcigpKXJldHVybiBCTXQuc2VsZWN0QWxsKCk7dmFyIGk9dC5wcm90b3R5cGUuc2VsZWN0aW9ucy5jYWxsKHRoaXMsZSkubm9kZXMoKTtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9saW5lRHJhd2Vycy5nZXQodCl9KSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH0pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gaS5wdXNoLmFwcGx5KGksdC5nZXRWaXN1YWxQcmltaXRpdmVzKCkpfSkpLEJNdC5zZWxlY3RBbGwoaSl9LGUucHJvdG90eXBlLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLHI9dGhpcy5fY3JlYXRlRGVmaW5lZFByb2plY3RvcihxTXQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHFNdC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpO3JldHVybiBmdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2NyZWF0ZUFyZWFHZW5lcmF0b3IodCxlLG4scixzKShvKX19LGUucHJvdG90eXBlLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSxyKXt2YXIgbz10KG4saSxyKSxhPWUobixpLHIpO3JldHVybiBGTXQuTWF0aC5pc1ZhbGlkTnVtYmVyKG8pJiZGTXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGEpfX0sZS5wcm90b3R5cGUuX2NyZWF0ZUFyZWFHZW5lcmF0b3I9ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgbz10aGlzLl9nZXRDdXJ2ZUZhY3RvcnkoKTtyZXR1cm4gQk10LmFyZWEoKS54KChmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsbixyKX0pKS55MSgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh0LG4scil9KSkueTAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlLHIpfSkpLmN1cnZlKG8pLmRlZmluZWQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkodCxlLHIpfSkpfSxlLnByb3RvdHlwZS5fY3JlYXRlVG9wTGluZUdlbmVyYXRvcj1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj10aGlzLl9nZXRDdXJ2ZUZhY3RvcnkoKTtyZXR1cm4gQk10LmxpbmUoKS54KChmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsbixpKX0pKS55KChmdW5jdGlvbih0LG4pe3JldHVybiBlKHQsbixpKX0pKS5jdXJ2ZShyKS5kZWZpbmVkKChmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsZSxpKX0pKX0sZS5fWTBfS0VZPSJ5MCIsZX0pKG1NdC5MaW5lKTtmTXQuQXJlYT1ZTXQ7dmFyIFhNdD17fTshKGZ1bmN0aW9uKHQpewovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqLwpPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGU9dU8sbj1FZHQsaT1JbXQscj1fbXQsbz1neXQsYT1OU3Qscz1Xd3QsbD1KU3QsYz1kd3QsdT1aeXQsaD1JdnQsZD1GZ3QscD1TbXQsZj1wTXQsbT11d3QsZz1nTXQ7dC5CYXJPcmllbnRhdGlvbj1wLm1ha2VFbnVtKFsidmVydGljYWwiLCJob3Jpem9udGFsIl0pLHQuTGFiZWxzUG9zaXRpb249cC5tYWtlRW51bShbInN0YXJ0IiwibWlkZGxlIiwiZW5kIiwib3V0c2lkZSJdKSx0LkJhckFsaWdubWVudD1wLm1ha2VFbnVtKFsic3RhcnQiLCJtaWRkbGUiLCJlbmQiXSk7dmFyIF89KGZ1bmN0aW9uKHApe2Z1bmN0aW9uIGcoZSl7dm9pZCAwPT09ZSYmKGU9InZlcnRpY2FsIik7dmFyIG49cC5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX2xhYmVsRm9ybWF0dGVyPW8uaWRlbnRpdHkoKSxuLl9sYWJlbHNFbmFibGVkPSExLG4uX2xhYmVsc1Bvc2l0aW9uPXQuTGFiZWxzUG9zaXRpb24uZW5kLG4uX2hpZGVCYXJzSWZBbnlBcmVUb29XaWRlPSEwLG4uX2JhckFsaWdubWVudD0ibWlkZGxlIixuLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3M9Yy5tZW1vaXplKHkpLG4uX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M9ITAsbi5hZGRDbGFzcygiYmFyLXBsb3QiKSwidmVydGljYWwiIT09ZSYmImhvcml6b250YWwiIT09ZSl0aHJvdyBuZXcgRXJyb3IoZSsiIGlzIG5vdCBhIHZhbGlkIG9yaWVudGF0aW9uIGZvciBQbG90cy5CYXIiKTtyZXR1cm4gbi5faXNWZXJ0aWNhbD0idmVydGljYWwiPT09ZSxuLmFuaW1hdG9yKCJiYXNlbGluZSIsbmV3IHIuTnVsbCksbi5hdHRyKCJmaWxsIiwobmV3IHUuQ29sb3IpLnJhbmdlKClbMF0pLG4uYXR0cihnLl9CQVJfVEhJQ0tORVNTX0tFWSwoZnVuY3Rpb24oKXtyZXR1cm4gbi5fYmFyUGl4ZWxUaGlja25lc3MoKX0pKSxuLl9sYWJlbENvbmZpZz1uZXcgZC5NYXAsbi5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuW24uYmFzZWxpbmVWYWx1ZSgpXX0sbn1yZXR1cm4gZS5fX2V4dGVuZHMoZyxwKSxnLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gcC5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMsdCxlLG4pLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzfSxnLnByb3RvdHlwZS54PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQ/cC5wcm90b3R5cGUueC5jYWxsKHRoaXMpOihudWxsPT1lP3AucHJvdG90eXBlLnguY2FsbCh0aGlzLHQpOnAucHJvdG90eXBlLnguY2FsbCh0aGlzLHQsZSksdGhpcy5fdXBkYXRlVGhpY2tuZXNzQXR0cigpLHRoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCksdGhpcyl9LGcucHJvdG90eXBlLnk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD9wLnByb3RvdHlwZS55LmNhbGwodGhpcyk6KG51bGw9PWU/cC5wcm90b3R5cGUueS5jYWxsKHRoaXMsdCk6cC5wcm90b3R5cGUueS5jYWxsKHRoaXMsdCxlKSx0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMpfSxnLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD90aGlzLnkoKTp0aGlzLngoKX0sZy5wcm90b3R5cGUucG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD90aGlzLngoKTp0aGlzLnkoKX0sZy5wcm90b3R5cGUuYmFyRW5kPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KGcuX0JBUl9FTkRfS0VZKTt2YXIgZT10aGlzLnBvc2l0aW9uKCk7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eShnLl9CQVJfRU5EX0tFWSx0LGUmJmUuc2NhbGUpLHRoaXMuX3VwZGF0ZVRoaWNrbmVzc0F0dHIoKSx0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMucmVuZGVyKCksdGhpc30sZy5wcm90b3R5cGUuYmFyQWxpZ25tZW50PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2JhckFsaWdubWVudDoodGhpcy5fYmFyQWxpZ25tZW50PXQsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LGcucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVmVydGljYWw/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCJ9LGcucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHMuUHJveHlEcmF3ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBsLlJlY3RhbmdsZVNWR0RyYXdlcihnLl9CQVJfQVJFQV9DTEFTUyl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhLlJlY3RhbmdsZUNhbnZhc0RyYXdlcih0KX0pKX0sZy5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7cC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fYmFzZWxpbmU9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApfSxnLnByb3RvdHlwZS5iYXNlbGluZVZhbHVlPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpe2lmKG51bGwhPXRoaXMuX2Jhc2VsaW5lVmFsdWUpcmV0dXJuIHRoaXMuX2Jhc2VsaW5lVmFsdWU7aWYoIXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXJldHVybiAwO3ZhciBlPXRoaXMubGVuZ3RoKCkuc2NhbGU7cmV0dXJuIGUmJmUgaW5zdGFuY2VvZiB1LlRpbWU/bmV3IERhdGUoMCk6MH1yZXR1cm4gdGhpcy5fYmFzZWxpbmVWYWx1ZT10LHRoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCksdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpc30sZy5wcm90b3R5cGUuYWRkRGF0YXNldD1mdW5jdGlvbih0KXtyZXR1cm4gcC5wcm90b3R5cGUuYWRkRGF0YXNldC5jYWxsKHRoaXMsdCksdGhpc30sZy5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHAucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyx0KSx0aGlzfSxnLnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBwLnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyx0KSx0aGlzfSxnLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbih0KXtyZXR1cm4gcC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQuY2FsbCh0aGlzLHQpLHRoaXN9LGcucHJvdG90eXBlLmRhdGFzZXRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3AucHJvdG90eXBlLmRhdGFzZXRzLmNhbGwodGhpcyk6KHAucHJvdG90eXBlLmRhdGFzZXRzLmNhbGwodGhpcyx0KSx0aGlzKX0sZy5wcm90b3R5cGUubGFiZWxzRW5hYmxlZD1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P3RoaXMuX2xhYmVsc0VuYWJsZWQ6KHRoaXMuX2xhYmVsc0VuYWJsZWQ9dCxudWxsIT1lJiYodGhpcy5fbGFiZWxzUG9zaXRpb249ZSksdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LGcucHJvdG90eXBlLmxhYmVsRm9ybWF0dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2xhYmVsRm9ybWF0dGVyOih0aGlzLl9sYWJlbEZvcm1hdHRlcj10LHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSxnLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXAucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQuY2FsbCh0aGlzLHQpLG49dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKGcuX0xBQkVMX0FSRUFfQ0xBU1MsITApLHI9bmV3IGkuU3ZnQ29udGV4dChuLm5vZGUoKSksbz1uZXcgaS5DYWNoZU1lYXN1cmVyKHIpLGE9bmV3IGkuV3JpdGVyKG8scik7cmV0dXJuIHRoaXMuX2xhYmVsQ29uZmlnLnNldCh0LHtsYWJlbEFyZWE6bixtZWFzdXJlcjpvLHdyaXRlcjphfSksZX0sZy5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcz1mdW5jdGlvbih0KXtwLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzLmNhbGwodGhpcyx0KTt2YXIgZT10aGlzLl9sYWJlbENvbmZpZy5nZXQodCk7bnVsbCE9ZSYmKGUubGFiZWxBcmVhLnJlbW92ZSgpLHRoaXMuX2xhYmVsQ29uZmlnLmRlbGV0ZSh0KSl9LGcucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWZ1bmN0aW9uKCl7dmFyIG49ZS5faXNWZXJ0aWNhbD9lLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0eU5lYXJlc3RYKHQpOmUuX2dldEVudGl0eVN0b3JlKCkuZW50aXR5TmVhcmVzdFkodCk7cmV0dXJuIHZvaWQgMD09PW4/dm9pZCAwOmUuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShuKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKG4pOm4oKX0sZy5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49ZnVuY3Rpb24oKXtyZXR1cm4gZS5fZW50aXRpZXNJbnRlcnNlY3RpbmcodC54LHQueSl9O3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChuKTpuKCl9LGcucHJvdG90eXBlLmVudGl0aWVzSW5Cb3VuZHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWZ1bmN0aW9uKCl7cmV0dXJuIHAucHJvdG90eXBlLmVudGl0aWVzSW5Cb3VuZHMuY2FsbChlLHQpfTtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQobik6bigpfSxnLnByb3RvdHlwZS5lbnRpdGllc0luWEJvdW5kcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49ZnVuY3Rpb24oKXtyZXR1cm4gcC5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHMuY2FsbChlLHQpfTtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQobik6bigpfSxnLnByb3RvdHlwZS5lbnRpdGllc0luWUJvdW5kcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49ZnVuY3Rpb24oKXtyZXR1cm4gcC5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHMuY2FsbChlLHQpfTtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQobik6bigpfSxnLnByb3RvdHlwZS5fZW50aXRpZXNJbnRlcnNlY3Rpbmc9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49W10saT10aGlzLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0aWVzKCkscj1pLmxlbmd0aCxvPTA7bzxyO28rKyl7dmFyIGE9aVtvXTtkLkRPTS5pbnRlcnNlY3RzQkJveCh0LGUsdGhpcy5fZW50aXR5Qm91bmRzKGEpKSYmbi5wdXNoKHRoaXMuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShhKSl9cmV0dXJuIG59LGcucHJvdG90eXBlLl91cGRhdGVMZW5ndGhTY2FsZT1mdW5jdGlvbigpe2lmKHRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXt2YXIgdD10aGlzLmxlbmd0aCgpLnNjYWxlO3QgaW5zdGFuY2VvZiBoLlF1YW50aXRhdGl2ZVNjYWxlJiYodC5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlciksdC5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlcikpfX0sZy5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLl9iYXJQaXhlbFRoaWNrbmVzcygpLHRoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZCgoZnVuY3Rpb24oKXtyZXR1cm4gcC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0KX0pKX0sZy5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy5sZW5ndGgoKS5zY2FsZS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksaT17eDE6dGhpcy5faXNWZXJ0aWNhbD8wOm4seTE6dGhpcy5faXNWZXJ0aWNhbD9uOjAseDI6dGhpcy5faXNWZXJ0aWNhbD90aGlzLndpZHRoKCk6bix5Mjp0aGlzLl9pc1ZlcnRpY2FsP246dGhpcy5oZWlnaHQoKX07dGhpcy5fZ2V0QW5pbWF0b3IoImJhc2VsaW5lIikuYW5pbWF0ZSh0aGlzLl9iYXNlbGluZSxpKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xhYmVsQ29uZmlnLmdldCh0KS5sYWJlbEFyZWEuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCl9KSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmZC5XaW5kb3cuc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5fZHJhd0xhYmVscygpfSksdCl9LGcucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbih0KXt2YXIgZSxpPXRoaXMscj1wLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLHQpO2lmKCJ4Ij09PXQmJnRoaXMuX2lzVmVydGljYWwpZT10aGlzLngoKTtlbHNle2lmKCJ5IiE9PXR8fHRoaXMuX2lzVmVydGljYWwpcmV0dXJuIHI7ZT10aGlzLnkoKX1pZighKGUmJmUuc2NhbGUmJmUuc2NhbGUgaW5zdGFuY2VvZiBoLlF1YW50aXRhdGl2ZVNjYWxlKSlyZXR1cm4gcjt2YXIgbz1lLnNjYWxlLGE9dGhpcy5fYmFyUGl4ZWxUaGlja25lc3MoKTtyZXR1cm4gci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBuLmV4dGVudChbby5pbnZlcnQoaS5fZ2V0UG9zaXRpb25BdHRyKG8uc2NhbGUodFswXSksYSkpLG8uaW52ZXJ0KGkuX2dldFBvc2l0aW9uQXR0cihvLnNjYWxlKHRbMF0pLGEpK2EpLG8uaW52ZXJ0KGkuX2dldFBvc2l0aW9uQXR0cihvLnNjYWxlKHRbMV0pLGEpKSxvLmludmVydChpLl9nZXRQb3NpdGlvbkF0dHIoby5zY2FsZSh0WzFdKSxhKSthKV0pfSkpfSxnLnByb3RvdHlwZS5fZ2V0UG9zaXRpb25BdHRyPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX2lzVmVydGljYWx8fCh0LT1lLGUqPS0xKSx0aGlzLl9iYXJBbGlnbm1lbnQpe2Nhc2Uic3RhcnQiOnJldHVybiB0O2Nhc2UiZW5kIjpyZXR1cm4gdC1lO2Nhc2UibWlkZGxlIjpkZWZhdWx0OnJldHVybiB0LWUvMn19LGcucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuX2dldERhdGFUb0RyYXcoKSxuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGk9dGhpcy5kYXRhc2V0cygpLnNvbWUoKGZ1bmN0aW9uKGkpe3JldHVybiBlLmdldChpKS5zb21lKChmdW5jdGlvbihlLHIpe3JldHVybiBudWxsIT1lJiZ0Ll9kcmF3TGFiZWwoZSxyLGksbil9KSl9KSk7dGhpcy5faGlkZUJhcnNJZkFueUFyZVRvb1dpZGUmJmkmJnRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gdC5fbGFiZWxDb25maWcuZ2V0KGUpLmxhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKX0pKX0sZy5wcm90b3R5cGUuX2RyYXdMYWJlbD1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj10aGlzLl9sYWJlbENvbmZpZy5nZXQobiksbz1yLmxhYmVsQXJlYSxhPXIubWVhc3VyZXIscz1yLndyaXRlcixsPSgwLHRoaXMubGVuZ3RoKCkuYWNjZXNzb3IpKHQsZSxuKSxjPXRoaXMubGVuZ3RoKCkuc2NhbGUsdT1udWxsIT1jP2Muc2NhbGUobCk6bCxoPW51bGwhPWM/Yy5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSk6dGhpcy5iYXNlbGluZVZhbHVlKCksZD17eDppLngodCxlLG4pLHk6aS55KHQsZSxuKX0scD17d2lkdGg6aS53aWR0aCh0LGUsbiksaGVpZ2h0OmkuaGVpZ2h0KHQsZSxuKX0sZj10aGlzLl9sYWJlbEZvcm1hdHRlcihsLHQsZSxuKSxtPWEubWVhc3VyZShmKSxnPXRoaXMuX3Nob3VsZFNob3dMYWJlbE9uQmFyKGQscCxtKSxfPXRoaXMuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcyhkLHAsbSxnLHRoaXMuX2lzVmVydGljYWw/dTw9aDp1PGgpLHk9Xy5jb250YWluZXJEaW1lbnNpb25zLHY9Xy5sYWJlbENvbnRhaW5lck9yaWdpbixiPV8ubGFiZWxPcmlnaW4seD1fLmFsaWdubWVudCx3PWkuZmlsbCh0LGUsbiksUz10aGlzLl9jcmVhdGVMYWJlbENvbnRhaW5lcihvLHYsYixtLGcsdyk7cmV0dXJuIHMud3JpdGUoZix5LndpZHRoLHkuaGVpZ2h0LHt4QWxpZ246eC54LHlBbGlnbjp4Lnl9LFMubm9kZSgpKSx0aGlzLl9pc1ZlcnRpY2FsP3Aud2lkdGg8bS53aWR0aDpwLmhlaWdodDxtLmhlaWdodH0sZy5wcm90b3R5cGUuX3Nob3VsZFNob3dMYWJlbE9uQmFyPWZ1bmN0aW9uKGUsbixpKXtpZih0aGlzLl9sYWJlbHNQb3NpdGlvbj09PXQuTGFiZWxzUG9zaXRpb24ub3V0c2lkZSlyZXR1cm4hMTt2YXIgcj10aGlzLl9pc1ZlcnRpY2FsP2UueTplLngsbz10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om4ud2lkdGgsYT10aGlzLl9pc1ZlcnRpY2FsP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLHM9citvLGw9bztyZXR1cm4gcz5hP2w9YS1yOnI8MCYmKGw9cyksKHRoaXMuX2lzVmVydGljYWw/aS5oZWlnaHQ6aS53aWR0aCkrZy5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVI8PWx9LGcucHJvdG90eXBlLl9jYWxjdWxhdGVMYWJlbFByb3BlcnRpZXM9ZnVuY3Rpb24oZSxuLGkscixvKXt2YXIgYT10aGlzLHM9dGhpcy5faXNWZXJ0aWNhbD9lLnk6ZS54LGw9dGhpcy5faXNWZXJ0aWNhbD9uLmhlaWdodDpuLndpZHRoLGM9dGhpcy5faXNWZXJ0aWNhbD9pLmhlaWdodDppLndpZHRoLHU9ImNlbnRlciIsaD1sLGQ9cyxwPXMsZj1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJ0b3BMZWZ0IjpyZXR1cm4gdT1hLl9pc1ZlcnRpY2FsPyJ0b3AiOiJsZWZ0IixkKz1nLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUix2b2lkKHArPWcuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSKTtjYXNlImNlbnRlciI6cmV0dXJuIHZvaWQocCs9KGwrYykvMik7Y2FzZSJib3R0b21SaWdodCI6cmV0dXJuIHU9YS5faXNWZXJ0aWNhbD8iYm90dG9tIjoicmlnaHQiLGQtPWcuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSLHZvaWQocCs9aC1nLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUi1jKX19O2lmKHIpc3dpdGNoKHRoaXMuX2xhYmVsc1Bvc2l0aW9uKXtjYXNlIHQuTGFiZWxzUG9zaXRpb24uc3RhcnQ6ZihvPyJib3R0b21SaWdodCI6InRvcExlZnQiKTticmVhaztjYXNlIHQuTGFiZWxzUG9zaXRpb24ubWlkZGxlOmYoImNlbnRlciIpO2JyZWFrO2Nhc2UgdC5MYWJlbHNQb3NpdGlvbi5lbmQ6ZihvPyJ0b3BMZWZ0IjoiYm90dG9tUmlnaHQiKX1lbHNlIG8/KHU9dGhpcy5faXNWZXJ0aWNhbD8idG9wIjoibGVmdCIsaD1sK2cuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK2MsZC09Zy5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrYyxwLT1nLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUitjKToodT10aGlzLl9pc1ZlcnRpY2FsPyJib3R0b20iOiJyaWdodCIsaD1sK2cuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK2MscCs9bCtnLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUik7cmV0dXJue2NvbnRhaW5lckRpbWVuc2lvbnM6e3dpZHRoOnRoaXMuX2lzVmVydGljYWw/bi53aWR0aDpoLGhlaWdodDp0aGlzLl9pc1ZlcnRpY2FsP2g6bi5oZWlnaHR9LGxhYmVsQ29udGFpbmVyT3JpZ2luOnt4OnRoaXMuX2lzVmVydGljYWw/ZS54OmQseTp0aGlzLl9pc1ZlcnRpY2FsP2Q6ZS55fSxsYWJlbE9yaWdpbjp7eDp0aGlzLl9pc1ZlcnRpY2FsP2UueCtuLndpZHRoLzItaS53aWR0aC8yOnAseTp0aGlzLl9pc1ZlcnRpY2FsP3A6ZS55K24uaGVpZ2h0LzItaS5oZWlnaHQvMn0sYWxpZ25tZW50Ont4OnRoaXMuX2lzVmVydGljYWw/ImNlbnRlciI6dSx5OnRoaXMuX2lzVmVydGljYWw/dToiY2VudGVyIn19fSxnLnByb3RvdHlwZS5fY3JlYXRlTGFiZWxDb250YWluZXI9ZnVuY3Rpb24odCxlLG4saSxyLG8pe3ZhciBhPXQuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS54KyIsICIrZS55KyIpIik7aWYocil7YS5jbGFzc2VkKCJvbi1iYXItbGFiZWwiLCEwKTt2YXIgcz0xLjYqZC5Db2xvci5jb250cmFzdCgid2hpdGUiLG8pPGQuQ29sb3IuY29udHJhc3QoImJsYWNrIixvKTthLmNsYXNzZWQocz8iZGFyay1sYWJlbCI6ImxpZ2h0LWxhYmVsIiwhMCl9ZWxzZSBhLmNsYXNzZWQoIm9mZi1iYXItbGFiZWwiLCEwKTtyZXR1cm4gYX0sZy5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHQ9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgZT10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxuPXRoaXMubGVuZ3RoKCkuc2NhbGUuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpLGk9dGhpcy5faXNWZXJ0aWNhbD8iaGVpZ2h0Ijoid2lkdGgiO2VbdGhpcy5faXNWZXJ0aWNhbD8ieSI6IngiXT1mdW5jdGlvbigpe3JldHVybiBufSxlW2ldPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHQucHVzaCh7YXR0clRvUHJvamVjdG9yOmUsYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoZi5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gdC5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoZi5BbmltYXRvci5NQUlOKX0pLHR9LGcucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1wLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxuPXRoaXMubGVuZ3RoKCkuc2NhbGUuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpLGk9dGhpcy5faXNWZXJ0aWNhbD8ieSI6IngiLHI9dGhpcy5faXNWZXJ0aWNhbD8ieCI6InkiLG89bS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnBvc2l0aW9uKCkpLGE9bS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmxlbmd0aCgpKSxzPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gTWF0aC5hYnMobi1hKHQsZSxpKSl9LGw9ZVtnLl9CQVJfVEhJQ0tORVNTX0tFWV0sYz1lLmdhcCx1PW51bGw9PWM/bDpmdW5jdGlvbih0LGUsbil7dmFyIGk9bCh0LGUsbik7cmV0dXJuIGk8Zy5fQkFSX0dBUExFU1NfVEhSRVNIT0xEX1BYP2k6aS1jKHQsZSxuKX07cmV0dXJuIGUud2lkdGg9dGhpcy5faXNWZXJ0aWNhbD91OnMsZS5oZWlnaHQ9dGhpcy5faXNWZXJ0aWNhbD9zOnUsZVtpXT1mdW5jdGlvbih0LGUsaSl7dmFyIHI9YSh0LGUsaSk7cmV0dXJuIHI+bj9uOnJ9LGVbcl09ZnVuY3Rpb24oZSxuLGkpe3JldHVybiB0Ll9nZXRQb3NpdGlvbkF0dHIobyhlLG4saSksbChlLG4saSkpfSxlfSxnLnByb3RvdHlwZS5fdXBkYXRlVGhpY2tuZXNzQXR0cj1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLnBvc2l0aW9uKCksbj10aGlzLmJhckVuZCgpO251bGwhPWUmJm51bGwhPW4/KHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M9ITEsdGhpcy5hdHRyKGcuX0JBUl9USElDS05FU1NfS0VZLChmdW5jdGlvbih0LGkscil7dmFyIG89ZS5hY2Nlc3Nvcih0LGksciksYT1uLmFjY2Vzc29yKHQsaSxyKTtyZXR1cm4gbz1lLnNjYWxlP2Uuc2NhbGUuc2NhbGUobyk6byxhPW4uc2NhbGU/bi5zY2FsZS5zY2FsZShhKTphLE1hdGguYWJzKGEtbyl9KSkpOih0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSEwLHRoaXMuYXR0cihnLl9CQVJfVEhJQ0tORVNTX0tFWSwoZnVuY3Rpb24oKXtyZXR1cm4gdC5fYmFyUGl4ZWxUaGlja25lc3MoKX0pKSl9LGcucHJvdG90eXBlLl9iYXJQaXhlbFRoaWNrbmVzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzJiZ0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKT90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3ModGhpcy5wb3NpdGlvbigpLHRoaXMuZGF0YXNldHMoKSx0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpKTowfSxnLnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9dGhpcy5kYXRhc2V0cygpKSx0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKT9wLnByb3RvdHlwZS5lbnRpdGllcy5jYWxsKHRoaXMsdCk6W119LGcucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BpeGVsQm91bmRzKHQuZGF0dW0sdC5pbmRleCx0LmRhdGFzZXQpfSxnLnByb3RvdHlwZS5fcGl4ZWxCb3VuZHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybnt4OmkueCh0LGUsbikseTppLnkodCxlLG4pLHdpZHRoOmkud2lkdGgodCxlLG4pLGhlaWdodDppLmhlaWdodCh0LGUsbil9fSxnLnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcy5fcGl4ZWxCb3VuZHModCxlLG4pLHI9bS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpOnRoaXMueCgpKSh0LGUsbiksbz0odGhpcy5faXNWZXJ0aWNhbD90aGlzLnkoKS5zY2FsZTp0aGlzLngoKS5zY2FsZSkuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpO3JldHVybiB0aGlzLl9waXhlbFBvaW50QmFyKHIsbyxpKX0sZy5wcm90b3R5cGUuX3BpeGVsUG9pbnRCYXI9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHI7cmV0dXJuIHRoaXMuX2lzVmVydGljYWw/KGk9bi54K24ud2lkdGgvMixyPXQ8PWU/bi55Om4ueStuLmhlaWdodCk6KGk9dD49ZT9uLngrbi53aWR0aDpuLngscj1uLnkrbi5oZWlnaHQvMikse3g6aSx5OnJ9fSxnLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24odCxlKXtwLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHQsZSl9LGcucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPW5ldyBkLk1hcCxuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGk9dGhpcy53aWR0aCgpLHI9dGhpcy5oZWlnaHQoKTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKG8pe3ZhciBhPW8uZGF0YSgpLm1hcCgoZnVuY3Rpb24oZSxhKXtyZXR1cm4gdC5faXNEYXR1bU9uU2NyZWVuKG4saSxyLGUsYSxvKT9lOm51bGx9KSk7ZS5zZXQobyxhKX0pKSxlfSxnLnByb3RvdHlwZS5faXNEYXR1bU9uU2NyZWVuPWZ1bmN0aW9uKHQsZSxuLGkscixvKXt2YXIgYT10LngoaSxyLG8pLHM9dC55KGkscixvKSxsPXQud2lkdGgoaSxyLG8pLGM9dC5oZWlnaHQoaSxyLG8pO3JldHVybiEhKGQuTWF0aC5pc1ZhbGlkTnVtYmVyKGEpJiZkLk1hdGguaXNWYWxpZE51bWJlcihzKSYmZC5NYXRoLmlzVmFsaWROdW1iZXIobCkmJmQuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpKSYmZC5NYXRoLmJvdW5kc0ludGVyc2VjdHMoYSxzLGwsYywwLDAsZSxuKX0sZy5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztwLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX2xhYmVsQ29uZmlnLmdldChlKS5tZWFzdXJlci5yZXNldCgpfSkpfSxnLl9CQVJfVEhJQ0tORVNTX1JBVElPPS45NSxnLl9CQVJfR0FQTEVTU19USFJFU0hPTERfUFg9MyxnLl9TSU5HTEVfQkFSX0RJTUVOU0lPTl9SQVRJTz0uNCxnLl9CQVJfQVJFQV9DTEFTUz0iYmFyLWFyZWEiLGcuX0JBUl9FTkRfS0VZPSJiYXJFbmQiLGcuX0JBUl9USElDS05FU1NfS0VZPSJ3aWR0aCIsZy5fTEFCRUxfQVJFQV9DTEFTUz0iYmFyLWxhYmVsLXRleHQtYXJlYSIsZy5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVI9MTAsZ30pKGcuWFlQbG90KTtmdW5jdGlvbiB5KHQsZSxpKXt2YXIgcixvPXQuc2NhbGU7aWYobyBpbnN0YW5jZW9mIHUuQ2F0ZWdvcnkpcj1vLnJhbmdlQmFuZCgpO2Vsc2V7dmFyIGE9dC5hY2Nlc3NvcixzPW4uc2V0KGQuQXJyYXkuZmxhdHRlbihlLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGF0YSgpLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gYShlLG4sdCl9KSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlT2YoKX0pKX0pKSkpLnZhbHVlcygpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuK3R9KSk7cy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSk7dmFyIGw9cy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBvLnNjYWxlKHQpfSkpLGM9bi5wYWlycyhsKTtyPWQuTWF0aC5taW4oYywoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnModFsxXS10WzBdKX0pLGkqXy5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU8pLHIqPV8uX0JBUl9USElDS05FU1NfUkFUSU99cmV0dXJuIHJ9dC5CYXI9X30pKFhNdCk7dmFyICRNdD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi9PYmplY3QuZGVmaW5lUHJvcGVydHkoJE10LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgS010PXVPLFpNdD1aeXQsSk10PUZndCxRTXQ9WE10LHRFdD11d3QsZUV0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPSJ2ZXJ0aWNhbCIpO3ZhciBuPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBuLl9jbHVzdGVyT2Zmc2V0cz1uZXcgSk10Lk1hcCxufXJldHVybiBLTXQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxuPXQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLGk9dGhpcy5fbWFrZUlubmVyU2NhbGUoKSxyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkucmFuZ2VCYW5kKCl9O24ud2lkdGg9dGhpcy5faXNWZXJ0aWNhbD9yOm4ud2lkdGgsbi5oZWlnaHQ9dGhpcy5faXNWZXJ0aWNhbD9uLmhlaWdodDpyO3ZhciBvPW4ueCxhPW4ueTtyZXR1cm4gbi54PXRoaXMuX2lzVmVydGljYWw/ZnVuY3Rpb24odCxuLGkpe3JldHVybiBvKHQsbixpKStlLl9jbHVzdGVyT2Zmc2V0cy5nZXQoaSl9OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbyh0LGUsbil9LG4ueT10aGlzLl9pc1ZlcnRpY2FsP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gYSh0LGUsbil9OmZ1bmN0aW9uKHQsbixpKXtyZXR1cm4gYSh0LG4saSkrZS5fY2x1c3Rlck9mZnNldHMuZ2V0KGkpfSxufSxlLnByb3RvdHlwZS5fdXBkYXRlQ2x1c3RlclBvc2l0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuX21ha2VJbm5lclNjYWxlKCk7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKG4saSl7cmV0dXJuIHQuX2NsdXN0ZXJPZmZzZXRzLnNldChuLGUuc2NhbGUoU3RyaW5nKGkpKS1lLnJhbmdlQmFuZCgpLzIpfSkpfSxlLnByb3RvdHlwZS5fbWFrZUlubmVyU2NhbGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgWk10LkNhdGVnb3J5O3QuZG9tYWluKHRoaXMuZGF0YXNldHMoKS5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFN0cmluZyhlKX0pKSk7dmFyIGU9dEV0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuYXR0cihRTXQuQmFyLl9CQVJfVEhJQ0tORVNTX0tFWSkpO3JldHVybiB0LnJhbmdlKFswLGUobnVsbCwwLG51bGwpXSksdH0sZS5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlQ2x1c3RlclBvc2l0aW9uKCksdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXcuY2FsbCh0aGlzKX0sZX0pKFFNdC5CYXIpOyRNdC5DbHVzdGVyZWRCYXI9ZUV0O3ZhciBuRXQ9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovT2JqZWN0LmRlZmluZVByb3BlcnR5KG5FdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGlFdD11TyxyRXQ9RWR0LG9FdD1JbXQsYUV0PV9tdCxzRXQ9Z3l0LGxFdD1aeXQsY0V0PUZndCx1RXQ9SVN0LGhFdD16U3QsZEV0PVd3dCxwRXQ9a190LGZFdD11d3QsbUV0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLl9zdGFydEFuZ2xlPTAsZS5fZW5kQW5nbGU9MipNYXRoLlBJLGUuX2xhYmVsRm9ybWF0dGVyPXNFdC5pZGVudGl0eSgpLGUuX2xhYmVsc0VuYWJsZWQ9ITEsZS5pbm5lclJhZGl1cygwKSxlLm91dGVyUmFkaXVzKChmdW5jdGlvbigpe3ZhciB0PWUuX3BpZUNlbnRlcigpO3JldHVybiBNYXRoLm1pbihNYXRoLm1heChlLndpZHRoKCktdC54LHQueCksTWF0aC5tYXgoZS5oZWlnaHQoKS10LnksdC55KSl9KSksZS5hZGRDbGFzcygicGllLXBsb3QiKSxlLmF0dHIoImZpbGwiLChmdW5jdGlvbih0LGUpe3JldHVybiBTdHJpbmcoZSl9KSxuZXcgbEV0LkNvbG9yKSxlLl9zdHJva2VEcmF3ZXJzPW5ldyBjRXQuTWFwLGV9cmV0dXJuIGlFdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3N0cm9rZURyYXdlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYXR0YWNoVG8oZS5fcmVuZGVyQXJlYSl9KSl9LGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24oZSxuLGkpe3QucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLGUsbixpKTt2YXIgcj10aGlzLl9waWVDZW50ZXIoKTt0aGlzLl9yZW5kZXJBcmVhLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3IueCsiLCIrci55KyIpIik7dmFyIG89TWF0aC5taW4oTWF0aC5tYXgodGhpcy53aWR0aCgpLXIueCxyLngpLE1hdGgubWF4KHRoaXMuaGVpZ2h0KCktci55LHIueSkpO3JldHVybiBudWxsIT10aGlzLmlubmVyUmFkaXVzKCkuc2NhbGUmJnRoaXMuaW5uZXJSYWRpdXMoKS5zY2FsZS5yYW5nZShbMCxvXSksbnVsbCE9dGhpcy5vdXRlclJhZGl1cygpLnNjYWxlJiZ0aGlzLm91dGVyUmFkaXVzKCkuc2NhbGUucmFuZ2UoWzAsb10pLHRoaXN9LGUucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLGUpLHRoaXN9LGUucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLmRhdGFzZXRzKCkubGVuZ3RoKXJldHVybiBjRXQuV2luZG93Lndhcm4oIk9ubHkgb25lIGRhdGFzZXQgaXMgc3VwcG9ydGVkIGluIFBpZSBwbG90cyIpLHRoaXM7dGhpcy5fdXBkYXRlUGllQW5nbGVzKCksdC5wcm90b3R5cGUuX2FkZERhdGFzZXQuY2FsbCh0aGlzLGUpO3ZhciBuPW5ldyBoRXQuQXJjT3V0bGluZVNWR0RyYXdlcjtyZXR1cm4gdGhpcy5faXNTZXR1cCYmbi5hdHRhY2hUbyh0aGlzLl9yZW5kZXJBcmVhKSx0aGlzLl9zdHJva2VEcmF3ZXJzLnNldChlLG4pLHRoaXN9LGUucHJvdG90eXBlLnJlbW92ZURhdGFzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvdG90eXBlLnJlbW92ZURhdGFzZXQuY2FsbCh0aGlzLGUpLHRoaXN9LGUucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMsZSksdGhpcy5fc3Ryb2tlRHJhd2Vycy5nZXQoZSkucmVtb3ZlKCl9LGUucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsZSksdGhpcy5fc3Ryb2tlRHJhd2Vycy5kZWxldGUoZSksdGhpcy5fc3RhcnRBbmdsZXM9W10sdGhpcy5fZW5kQW5nbGVzPVtdLHRoaXN9LGUucHJvdG90eXBlLnNlbGVjdGlvbnM9ZnVuY3Rpb24oZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT10aGlzLmRhdGFzZXRzKCkpO3ZhciBpPXQucHJvdG90eXBlLnNlbGVjdGlvbnMuY2FsbCh0aGlzLGUpLm5vZGVzKCk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5fc3Ryb2tlRHJhd2Vycy5nZXQodCk7bnVsbCE9ZSYmaS5wdXNoLmFwcGx5KGksZS5nZXRWaXN1YWxQcmltaXRpdmVzKCkpfSkpLHJFdC5zZWxlY3RBbGwoaSl9LGUucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlUGllQW5nbGVzKCksdGhpcy5yZW5kZXIoKX0sZS5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgZEV0LlByb3h5RHJhd2VyKChmdW5jdGlvbigpe3JldHVybiBuZXcgdUV0LkFyY1NWR0RyYXdlcn0pLChmdW5jdGlvbigpe3JldHVybiBwRXQud2FybigiY2FudmFzIHJlbmRlcmVyIGlzIG5vdCBzdXBwb3J0ZWQgb24gUGllIFBsb3QhIiksbnVsbH0pKX0sZS5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dGhpcy5kYXRhc2V0cygpKSx0LnByb3RvdHlwZS5lbnRpdGllcy5jYWxsKHRoaXMsZSkubWFwKChmdW5jdGlvbih0KXt0LnBvc2l0aW9uLngrPW4ud2lkdGgoKS8yLHQucG9zaXRpb24ueSs9bi5oZWlnaHQoKS8yO3ZhciBlPXJFdC5zZWxlY3Qobi5fc3Ryb2tlRHJhd2Vycy5nZXQodC5kYXRhc2V0KS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4KHQuaW5kZXgpKSxpPXQ7cmV0dXJuIGkuc3Ryb2tlU2VsZWN0aW9uPWUsaX0pKX0sZS5wcm90b3R5cGUuc2VjdG9yVmFsdWU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09dD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChlLl9TRUNUT1JfVkFMVUVfS0VZKToodGhpcy5fYmluZFByb3BlcnR5KGUuX1NFQ1RPUl9WQUxVRV9LRVksdCxuKSx0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5pbm5lclJhZGl1cz1mdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT10P3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KGUuX0lOTkVSX1JBRElVU19LRVkpOih0aGlzLl9iaW5kUHJvcGVydHkoZS5fSU5ORVJfUkFESVVTX0tFWSx0LG4pLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG51bGw9PXQ/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoZS5fT1VURVJfUkFESVVTX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eShlLl9PVVRFUl9SQURJVVNfS0VZLHQsbiksdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9zdGFydEFuZ2xlOih0aGlzLl9zdGFydEFuZ2xlPXQsdGhpcy5fdXBkYXRlUGllQW5nbGVzKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fZW5kQW5nbGU6KHRoaXMuX2VuZEFuZ2xlPXQsdGhpcy5fdXBkYXRlUGllQW5nbGVzKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUubGFiZWxzRW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXQsdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUubGFiZWxGb3JtYXR0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fbGFiZWxGb3JtYXR0ZXI6KHRoaXMuX2xhYmVsRm9ybWF0dGVyPXQsdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLndpZHRoKCkvMixuPXRoaXMuaGVpZ2h0KCkvMixpPXRoaXMuX3NsaWNlSW5kZXhGb3JQb2ludCh7eDp0LngtZSx5OnQueS1ufSk7cmV0dXJuIG51bGw9PWk/W106W3RoaXMuZW50aXRpZXMoKVtpXV19LGUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLG49dC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpLGk9ZkV0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuaW5uZXJSYWRpdXMoKSkscj1mRXQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKTtyZXR1cm4gbi5kPWZ1bmN0aW9uKHQsbixvKXtyZXR1cm4gckV0LmFyYygpLmlubmVyUmFkaXVzKGkodCxuLG8pKS5vdXRlclJhZGl1cyhyKHQsbixvKSkuc3RhcnRBbmdsZShlLl9zdGFydEFuZ2xlc1tuXSkuZW5kQW5nbGUoZS5fZW5kQW5nbGVzW25dKSh0LG4pfSxufSxlLnByb3RvdHlwZS5fdXBkYXRlUGllQW5nbGVzPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5zZWN0b3JWYWx1ZSgpJiYwIT09dGhpcy5kYXRhc2V0cygpLmxlbmd0aCl7dmFyIHQ9ZkV0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2VjdG9yVmFsdWUoKSksZT10aGlzLmRhdGFzZXRzKClbMF0sbj10aGlzLl9nZXREYXRhVG9EcmF3KCkuZ2V0KGUpLGk9ckV0LnBpZSgpLnNvcnQobnVsbCkuc3RhcnRBbmdsZSh0aGlzLl9zdGFydEFuZ2xlKS5lbmRBbmdsZSh0aGlzLl9lbmRBbmdsZSkudmFsdWUoKGZ1bmN0aW9uKG4saSl7cmV0dXJuIHQobixpLGUpfSkpKG4pO3RoaXMuX3N0YXJ0QW5nbGVzPWkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfSkpLHRoaXMuX2VuZEFuZ2xlcz1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZW5kQW5nbGV9KSl9fSxlLnByb3RvdHlwZS5fcGllQ2VudGVyPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLGkscj10aGlzLl9zdGFydEFuZ2xlPHRoaXMuX2VuZEFuZ2xlP3RoaXMuX3N0YXJ0QW5nbGU6dGhpcy5fZW5kQW5nbGUsbz10aGlzLl9zdGFydEFuZ2xlPHRoaXMuX2VuZEFuZ2xlP3RoaXMuX2VuZEFuZ2xlOnRoaXMuX3N0YXJ0QW5nbGUsYT1NYXRoLnNpbihyKSxzPU1hdGguY29zKHIpLGw9TWF0aC5zaW4obyksYz1NYXRoLmNvcyhvKTtyZXR1cm4gYT49MCYmbD49MD9zPj0wJiZjPj0wPyh0PXMsZT0wLGk9MCxuPWwpOnM8MCYmYzwwPyh0PTAsZT0tYyxpPTAsbj1hKTpzPj0wJiZjPDA/KHQ9cyxlPS1jLGk9MCxuPWEpOnM8MCYmYz49MCYmKHQ9MSxlPTEsaT0xLG49TWF0aC5tYXgoYSxsKSk6YT49MCYmbDwwP3M+PTAmJmM+PTA/KHQ9TWF0aC5tYXgocyxjKSxlPTEsaT0xLG49MSk6czwwJiZjPDA/KHQ9MCxlPTEsaT0tbCxuPWEpOnM+PTAmJmM8MD8odD1zLGU9MSxpPS1sLG49MSk6czwwJiZjPj0wJiYodD1jLGU9MSxpPTEsbj1hKTphPDAmJmw+PTA/cz49MCYmYz49MD8odD0xLGU9MCxpPS1hLG49bCk6czwwJiZjPDA/KHQ9MSxlPU1hdGgubWF4KC1zLC1jKSxpPTEsbj0xKTpzPj0wJiZjPDA/KHQ9MSxlPS1jLGk9LWEsbj0xKTpzPDAmJmM+PTAmJih0PTEsZT0tcyxpPTEsbj1sKTphPDAmJmw8MCYmKHM+PTAmJmM+PTA/KHQ9YyxlPTAsaT0tYSxuPTApOnM8MCYmYzwwPyh0PTAsZT0tcyxpPS1sLG49MCk6cz49MCYmYzwwPyh0PTEsZT0xLGk9TWF0aC5tYXgocywtYyksbj0xKTpzPDAmJmM+PTAmJih0PWMsZT0tcyxpPTEsbj0wKSkse3g6aStuPT0wPzA6aS8oaStuKSp0aGlzLndpZHRoKCkseTp0K2U9PTA/MDp0Lyh0K2UpKnRoaXMuaGVpZ2h0KCl9fSxlLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciBuPXQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyk7aWYoMD09PXRoaXMuZGF0YXNldHMoKS5sZW5ndGgpcmV0dXJuIG47dmFyIGk9ZkV0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2VjdG9yVmFsdWUoKSkscj10aGlzLmRhdGFzZXRzKClbMF0sbz1uLmdldChyKS5maWx0ZXIoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuX2lzVmFsaWREYXRhKGkodCxuLHIpKX0pKTtyZXR1cm4gbi5zZXQocixvKSxufSxlLl9pc1ZhbGlkRGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gY0V0Lk1hdGguaXNWYWxpZE51bWJlcih0KSYmdD49MH0sZS5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24odCxuLGkpe3ZhciByPWZFdC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpO2lmKCFlLl9pc1ZhbGlkRGF0YShyKHQsbixpKSkpcmV0dXJue3g6TmFOLHk6TmFOfTt2YXIgbz0oZkV0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuaW5uZXJSYWRpdXMoKSkodCxuLGkpK2ZFdC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLm91dGVyUmFkaXVzKCkpKHQsbixpKSkvMixhPXJFdC5waWUoKS5zb3J0KG51bGwpLnZhbHVlKChmdW5jdGlvbih0LG4pe3ZhciBvPXIodCxuLGkpO3JldHVybiBlLl9pc1ZhbGlkRGF0YShvKT9vOjB9KSkuc3RhcnRBbmdsZSh0aGlzLl9zdGFydEFuZ2xlKS5lbmRBbmdsZSh0aGlzLl9lbmRBbmdsZSkoaS5kYXRhKCkpLHM9KGFbbl0uc3RhcnRBbmdsZSthW25dLmVuZEFuZ2xlKS8yO3JldHVybnt4Om8qTWF0aC5zaW4ocykseTotbypNYXRoLmNvcyhzKX19LGUucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZW5kZXJBcmVhLnNlbGVjdCgiLmxhYmVsLWFyZWEiKS5yZW1vdmUoKSx0aGlzLl9sYWJlbHNFbmFibGVkJiZjRXQuV2luZG93LnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2RyYXdMYWJlbHMoKX0pLHQpO3ZhciBuPXRoaXMuX2dlbmVyYXRlU3Ryb2tlRHJhd1N0ZXBzKCksaT10aGlzLl9nZXREYXRhVG9EcmF3KCk7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPWZFdC5QbG90LmFwcGx5RHJhd1N0ZXBzKG4sdCk7ZS5fc3Ryb2tlRHJhd2Vycy5nZXQodCkuZHJhdyhpLmdldCh0KSxyKX0pKX0sZS5wcm90b3R5cGUuX2dlbmVyYXRlU3Ryb2tlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6bmV3IGFFdC5OdWxsfV19LGUucHJvdG90eXBlLl9zbGljZUluZGV4Rm9yUG9pbnQ9ZnVuY3Rpb24odCl7dmFyIGUsbj1NYXRoLnNxcnQoTWF0aC5wb3codC54LDIpK01hdGgucG93KHQueSwyKSksaT1NYXRoLmFjb3MoLXQueS9uKTt0Lng8MCYmKGk9MipNYXRoLlBJLWkpO2Zvcih2YXIgcj0wO3I8dGhpcy5fc3RhcnRBbmdsZXMubGVuZ3RoO3IrKylpZih0aGlzLl9zdGFydEFuZ2xlc1tyXTxpJiZ0aGlzLl9lbmRBbmdsZXNbcl0+aSl7ZT1yO2JyZWFrfWlmKHZvaWQgMCE9PWUpe3ZhciBvPXRoaXMuZGF0YXNldHMoKVswXSxhPW8uZGF0YSgpW2VdLHM9dGhpcy5pbm5lclJhZGl1cygpLmFjY2Vzc29yKGEsZSxvKSxsPXRoaXMub3V0ZXJSYWRpdXMoKS5hY2Nlc3NvcihhLGUsbyk7aWYobj5zJiZuPGwpcmV0dXJuIGV9cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxuPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLGk9bmV3IG9FdC5TdmdDb250ZXh0KG4ubm9kZSgpKSxyPW5ldyBvRXQuQ2FjaGVNZWFzdXJlcihpKSxvPW5ldyBvRXQuV3JpdGVyKHIsaSksYT10aGlzLmRhdGFzZXRzKClbMF0scz10aGlzLl9nZXREYXRhVG9EcmF3KCkuZ2V0KGEpLGw9cy5sZW5ndGgsYz1mdW5jdGlvbihpKXt2YXIgbD1zW2ldLGM9dS5zZWN0b3JWYWx1ZSgpLmFjY2Vzc29yKGwsaSxhKTtpZighY0V0Lk1hdGguaXNWYWxpZE51bWJlcihjKSlyZXR1cm4iY29udGludWUiO2M9dS5fbGFiZWxGb3JtYXR0ZXIoYyxsLGksYSk7dmFyIGg9ci5tZWFzdXJlKGMpLGQ9KHUuX2VuZEFuZ2xlc1tpXSt1Ll9zdGFydEFuZ2xlc1tpXSkvMixwPXUub3V0ZXJSYWRpdXMoKS5hY2Nlc3NvcihsLGksYSk7dS5vdXRlclJhZGl1cygpLnNjYWxlJiYocD11Lm91dGVyUmFkaXVzKCkuc2NhbGUuc2NhbGUocCkpO3ZhciBmPXUuaW5uZXJSYWRpdXMoKS5hY2Nlc3NvcihsLGksYSk7dS5pbm5lclJhZGl1cygpLnNjYWxlJiYoZj11LmlubmVyUmFkaXVzKCkuc2NhbGUuc2NhbGUoZikpO3ZhciBtPShwK2YpLzIsZz1NYXRoLnNpbihkKSptLWgud2lkdGgvMixfPS1NYXRoLmNvcyhkKSptLWguaGVpZ2h0LzIseT1be3g6Zyx5Ol99LHt4OmcseTpfK2guaGVpZ2h0fSx7eDpnK2gud2lkdGgseTpffSx7eDpnK2gud2lkdGgseTpfK2guaGVpZ2h0fV0sdj15LmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5hYnMoZS54KTw9dC53aWR0aCgpLzImJk1hdGguYWJzKGUueSk8PXQuaGVpZ2h0KCkvMn0pKTt2JiYodj15Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX3NsaWNlSW5kZXhGb3JQb2ludChlKX0pKS5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1pfSkpKTt2YXIgYj1lLmZpbGwobCxpLGEpLHg9MS42KmNFdC5Db2xvci5jb250cmFzdCgid2hpdGUiLGIpPGNFdC5Db2xvci5jb250cmFzdCgiYmxhY2siLGIpLHc9bi5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitnKyIsIitfKyIpIik7dy5jbGFzc2VkKHg/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCIsITApLHcuc3R5bGUoInZpc2liaWxpdHkiLHY/ImluaGVyaXQiOiJoaWRkZW4iKSxvLndyaXRlKGMsaC53aWR0aCxoLmhlaWdodCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIn0sdy5ub2RlKCkpfSx1PXRoaXMsaD0wO2g8bDtoKyspYyhoKX0sZS5fSU5ORVJfUkFESVVTX0tFWT0iaW5uZXItcmFkaXVzIixlLl9PVVRFUl9SQURJVVNfS0VZPSJvdXRlci1yYWRpdXMiLGUuX1NFQ1RPUl9WQUxVRV9LRVk9InNlY3Rvci12YWx1ZSIsZX0pKGZFdC5QbG90KTtuRXQuUGllPW1FdDt2YXIgZ0V0PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShnRXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBfRXQ9dU8seUV0PUVkdCx2RXQ9SW10LGJFdD1fbXQseEV0PU5TdCx3RXQ9V3d0LFNFdD1KU3QsTUV0PVp5dCxFRXQ9Rmd0LFRFdD11d3QsQ0V0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLl9sYWJlbHNFbmFibGVkPSExLGUuX2xhYmVsPW51bGwsZS5hbmltYXRvcigicmVjdGFuZ2xlcyIsbmV3IGJFdC5OdWxsKSxlLmFkZENsYXNzKCJyZWN0YW5nbGUtcGxvdCIpLGUuYXR0cigiZmlsbCIsKG5ldyBNRXQuQ29sb3IpLnJhbmdlKClbMF0pLGV9cmV0dXJuIF9FdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3RXQuUHJveHlEcmF3ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTRXQuUmVjdGFuZ2xlU1ZHRHJhd2VyfSksKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeEV0LlJlY3RhbmdsZUNhbnZhc0RyYXdlcih0KX0pKX0sZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIG49dGhpcyxpPXQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLHI9VEV0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxvPWlbZS5fWDJfS0VZXSxhPVRFdC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkscz1pW2UuX1kyX0tFWV0sbD10aGlzLngoKS5zY2FsZSxjPXRoaXMueSgpLnNjYWxlO3JldHVybiBudWxsIT1vPyhpLndpZHRoPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5hYnMobyh0LGUsbiktcih0LGUsbikpfSxpLng9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLm1pbihvKHQsZSxuKSxyKHQsZSxuKSl9KTooaS53aWR0aD1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIG4uX3JlY3RhbmdsZVdpZHRoKGwpfSxpLng9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByKHQsZSxuKS0uNSppLndpZHRoKHQsZSxuKX0pLG51bGwhPXM/KGkuaGVpZ2h0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5hYnMocyh0LGUsbiktYSh0LGUsbikpfSxpLnk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLm1heChzKHQsZSxuKSxhKHQsZSxuKSktaS5oZWlnaHQodCxlLG4pfSk6KGkuaGVpZ2h0PWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbi5fcmVjdGFuZ2xlV2lkdGgoYyl9LGkueT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGEodCxlLG4pLS41KmkuaGVpZ2h0KHQsZSxuKX0pLGRlbGV0ZSBpW2UuX1gyX0tFWV0sZGVsZXRlIGlbZS5fWTJfS0VZXSxpfSxlLnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXtyZXR1cm5be2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcigicmVjdGFuZ2xlcyIpfV19LGUucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcywieDIiPT09ZT8ieCI6InkyIj09PWU/InkiOmUpfSxlLnByb3RvdHlwZS54PWZ1bmN0aW9uKG4saSxyKXtpZihudWxsPT1uKXJldHVybiB0LnByb3RvdHlwZS54LmNhbGwodGhpcyk7aWYobnVsbD09aT90LnByb3RvdHlwZS54LmNhbGwodGhpcyxuKTp0LnByb3RvdHlwZS54LmNhbGwodGhpcyxuLGksciksbnVsbCE9aSl7dmFyIG89dGhpcy54MigpLGE9byYmby5hY2Nlc3NvcjtudWxsIT1hJiZ0aGlzLl9iaW5kUHJvcGVydHkoZS5fWDJfS0VZLGEsaSxvLnBvc3RTY2FsZSl9cmV0dXJuIGkgaW5zdGFuY2VvZiBNRXQuQ2F0ZWdvcnkmJmkuaW5uZXJQYWRkaW5nKDApLm91dGVyUGFkZGluZygwKSx0aGlzfSxlLnByb3RvdHlwZS54Mj1mdW5jdGlvbih0LG4pe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KGUuX1gyX0tFWSk7dmFyIGk9dGhpcy54KCk7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eShlLl9YMl9LRVksdCxpJiZpLnNjYWxlLG4pLHRoaXMucmVuZGVyKCksdGhpc30sZS5wcm90b3R5cGUueT1mdW5jdGlvbihuLGkscil7aWYobnVsbD09bilyZXR1cm4gdC5wcm90b3R5cGUueS5jYWxsKHRoaXMpO2lmKG51bGw9PWk/dC5wcm90b3R5cGUueS5jYWxsKHRoaXMsbik6dC5wcm90b3R5cGUueS5jYWxsKHRoaXMsbixpLHIpLG51bGwhPWkpe3ZhciBvPXRoaXMueTIoKSxhPW8mJm8uYWNjZXNzb3I7bnVsbCE9YSYmdGhpcy5fYmluZFByb3BlcnR5KGUuX1kyX0tFWSxhLGksby5wb3N0U2NhbGUpfXJldHVybiBpIGluc3RhbmNlb2YgTUV0LkNhdGVnb3J5JiZpLmlubmVyUGFkZGluZygwKS5vdXRlclBhZGRpbmcoMCksdGhpc30sZS5wcm90b3R5cGUueTI9ZnVuY3Rpb24odCxuKXtpZihudWxsPT10KXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChlLl9ZMl9LRVkpO3ZhciBpPXRoaXMueSgpO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkoZS5fWTJfS0VZLHQsaSYmaS5zY2FsZSxuKSx0aGlzLnJlbmRlcigpLHRoaXN9LGUucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7cmV0dXJuIHRoaXMuZW50aXRpZXMoKS5maWx0ZXIoKGZ1bmN0aW9uKG4pe3ZhciBpPW4uZGF0dW0scj1uLmluZGV4LG89bi5kYXRhc2V0LGE9ZS54KGkscixvKSxzPWUueShpLHIsbyksbD1lLndpZHRoKGkscixvKSxjPWUuaGVpZ2h0KGkscixvKTtyZXR1cm4gYTw9dC54JiZ0Lng8PWErbCYmczw9dC55JiZ0Lnk8PXMrY30pKX0sZS5wcm90b3R5cGUuX2VudGl0eUJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZW50aXR5QkJveCh0LmRhdHVtLHQuaW5kZXgsdC5kYXRhc2V0LHRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpKX0sZS5wcm90b3R5cGUuX2VudGl0eUJCb3g9ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJue3g6aS54KHQsZSxuKSx5OmkueSh0LGUsbiksd2lkdGg6aS53aWR0aCh0LGUsbiksaGVpZ2h0OmkuaGVpZ2h0KHQsZSxuKX19LGUucHJvdG90eXBlLmxhYmVsPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuX2xhYmVsOih0aGlzLl9sYWJlbD10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD10LHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgZT10LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyk7cmV0dXJuIG51bGwhPXRoaXMueDIoKSYmKGUueDI9VEV0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueDIoKSkpLG51bGwhPXRoaXMueTIoKSYmKGUueTI9VEV0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTIoKSkpLGV9LGUucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxyPWkueCh0LGUsbiksbz1pLnkodCxlLG4pO3JldHVybnt4OnIraS53aWR0aCh0LGUsbikvMix5Om8raS5oZWlnaHQodCxlLG4pLzJ9fSxlLnByb3RvdHlwZS5fcmVjdGFuZ2xlV2lkdGg9ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIE1FdC5DYXRlZ29yeSlyZXR1cm4gdC5yYW5nZUJhbmQoKTt2YXIgZT10PT09dGhpcy54KCkuc2NhbGU/dGhpcy54KCkuYWNjZXNzb3I6dGhpcy55KCkuYWNjZXNzb3Isbj15RXQuc2V0KEVFdC5BcnJheS5mbGF0dGVuKHRoaXMuZGF0YXNldHMoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRhdGEoKS5tYXAoKGZ1bmN0aW9uKG4saSl7cmV0dXJuIGUobixpLHQpLnZhbHVlT2YoKX0pKX0pKSkpLnZhbHVlcygpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuK3R9KSksaT1FRXQuTWF0aC5taW4obiwwKSxyPUVFdC5NYXRoLm1heChuLDApLG89dC5zY2FsZShpKTtyZXR1cm4odC5zY2FsZShyKS1vKS9NYXRoLmFicyhyLWkpfSxlLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciB0PW5ldyBFRXQuTWFwLGU9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT1uLmRhdGEoKS5tYXAoKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIEVFdC5NYXRoLmlzVmFsaWROdW1iZXIoZS54KHQsaSxuKSkmJkVFdC5NYXRoLmlzVmFsaWROdW1iZXIoZS55KHQsaSxuKSkmJkVFdC5NYXRoLmlzVmFsaWROdW1iZXIoZS53aWR0aCh0LGksbikpJiZFRXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGUuaGVpZ2h0KHQsaSxuKSk/dDpudWxsfSkpO3Quc2V0KG4saSl9KSksdH0sZS5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3JlbmRlckFyZWEuc2VsZWN0QWxsKCIubGFiZWwtYXJlYSIpLnJlbW92ZSgpLHRoaXMuX2xhYmVsc0VuYWJsZWQmJm51bGwhPXRoaXMubGFiZWwoKSYmRUV0LldpbmRvdy5zZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlLl9kcmF3TGFiZWxzKCl9KSx0KX0sZS5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKChmdW5jdGlvbihuLGkpe3JldHVybiB0Ll9kcmF3TGFiZWwoZSxuLGkpfSkpfSxlLnByb3RvdHlwZS5fZHJhd0xhYmVsPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCkscj10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxhYmVsLWFyZWEiLCEwKSxvPW5ldyB2RXQuU3ZnQ29udGV4dChyLm5vZGUoKSksYT1uZXcgdkV0LkNhY2hlTWVhc3VyZXIobykscz1uZXcgdkV0LldyaXRlcihhLG8pLGw9dGhpcy54KCkuc2NhbGUucmFuZ2UoKSxjPXRoaXMueSgpLnNjYWxlLnJhbmdlKCksdT1NYXRoLm1pbi5hcHBseShudWxsLGwpLGg9TWF0aC5tYXguYXBwbHkobnVsbCxsKSxkPU1hdGgubWluLmFwcGx5KG51bGwsYykscD1NYXRoLm1heC5hcHBseShudWxsLGMpLGY9dC5nZXQoZSksbT1mLmxlbmd0aCxnPTA7ZzxtO2crKyl7dmFyIF89ZltnXTtpZihudWxsIT1fKXt2YXIgeT0iIit0aGlzLmxhYmVsKCkoXyxnLGUpLHY9YS5tZWFzdXJlKHkpLGI9aS54KF8sZyxlKSx4PWkueShfLGcsZSksdz1pLndpZHRoKF8sZyxlKSxTPWkuaGVpZ2h0KF8sZyxlKTtpZih2LmhlaWdodDw9UyYmdi53aWR0aDw9dyl7dmFyIE09e21pbjpiKz0ody12LndpZHRoKS8yLG1heDpiK3Yud2lkdGh9LEU9e21pbjp4Kz0oUy12LmhlaWdodCkvMixtYXg6eCt2LmhlaWdodH07aWYoTS5taW48dXx8TS5tYXg+aHx8RS5taW48ZHx8RS5tYXg+cCljb250aW51ZTtpZih0aGlzLl9vdmVybGF5TGFiZWwoTSxFLGcsbix0KSljb250aW51ZTt2YXIgVD1pLmZpbGwoXyxnLGUpLEM9MS42KkVFdC5Db2xvci5jb250cmFzdCgid2hpdGUiLFQpPEVFdC5Db2xvci5jb250cmFzdCgiYmxhY2siLFQpLEE9ci5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitiKyIsIit4KyIpIik7QS5jbGFzc2VkKEM/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCIsITApLHMud3JpdGUoeSx2LndpZHRoLHYuaGVpZ2h0LHt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifSxBLm5vZGUoKSl9fX19LGUucHJvdG90eXBlLl9vdmVybGF5TGFiZWw9ZnVuY3Rpb24odCxlLG4saSxyKXtmb3IodmFyIG89dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYT10aGlzLmRhdGFzZXRzKCkscz1pO3M8YS5sZW5ndGg7cysrKWZvcih2YXIgbD1hW3NdLGM9ci5nZXQobCksdT1jLmxlbmd0aCxoPXM9PT1pP24rMTowO2g8dTtoKyspaWYoRUV0LkRPTS5pbnRlcnNlY3RzQkJveCh0LGUsdGhpcy5fZW50aXR5QkJveChjW2hdLGgsbCxvKSkpcmV0dXJuITA7cmV0dXJuITF9LGUuX1gyX0tFWT0ieDIiLGUuX1kyX0tFWT0ieTIiLGV9KShnTXQuWFlQbG90KTtnRXQuUmVjdGFuZ2xlPUNFdDt2YXIgQUV0PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShBRXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBrRXQ9dU8sTEV0PUltdCxQRXQ9Z3l0LE5FdD1VeHQsSUV0PVd3dCxSRXQ9bk10LE9FdD1fbXQsekV0PU5TdCxERXQ9Wnl0LEJFdD1GZ3QsSEV0PXBNdCxGRXQ9dXd0LFZFdD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztlLl9sYWJlbEZvcm1hdHRlcj1QRXQuaWRlbnRpdHkoKSxlLl9sYWJlbHNFbmFibGVkPSExLGUuYWRkQ2xhc3MoInNjYXR0ZXItcGxvdCIpO3ZhciBuPW5ldyBPRXQuRWFzaW5nO24uc3RhcnREZWxheSg1KSxuLnN0ZXBEdXJhdGlvbigyNTApLG4ubWF4VG90YWxEdXJhdGlvbihGRXQuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksZS5hbmltYXRvcihIRXQuQW5pbWF0b3IuTUFJTixuKSxlLmF0dHIoIm9wYWNpdHkiLC42KSxlLmF0dHIoImZpbGwiLChuZXcgREV0LkNvbG9yKS5yYW5nZSgpWzBdKSxlLnNpemUoNik7dmFyIGk9TkV0LmNpcmNsZSgpO3JldHVybiBlLnN5bWJvbCgoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKSxlLl9sYWJlbENvbmZpZz1uZXcgQkV0Lk1hcCxlfXJldHVybiBrRXQuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXM9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztyZXR1cm4gdC5wcm90b3R5cGUuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXMuY2FsbCh0aGlzLGUpLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9RkV0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4uc2l6ZSgpKSh0LmRhdHVtLHQuaW5kZXgsdC5kYXRhc2V0KTtyZXR1cm4gdC5kaWFtZXRlcj1lLHR9KSl9LGUucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gbmV3IElFdC5Qcm94eURyYXdlcigoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFJFdC5TeW1ib2xTVkdEcmF3ZXJ9KSwoZnVuY3Rpb24obil7cmV0dXJuIG5ldyB6RXQuQ2FudmFzRHJhd2VyKG4sUkV0Lm1ha2VTeW1ib2xDYW52YXNEcmF3U3RlcCh0LChmdW5jdGlvbigpe3JldHVybiBGRXQuUGxvdC5fc2NhbGVkQWNjZXNzb3IoZS5zeW1ib2woKSl9KSwoZnVuY3Rpb24oKXtyZXR1cm4gRkV0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKGUuc2l6ZSgpKX0pKSl9KSl9LGUucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09dD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChlLl9TSVpFX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eShlLl9TSVpFX0tFWSx0LG4pLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLnN5bWJvbD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChlLl9TWU1CT0xfS0VZKToodGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQoZS5fU1lNQk9MX0tFWSx7YWNjZXNzb3I6dH0pLHRoaXMucmVuZGVyKCksdGhpcyl9LGUucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciB0PVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIGU9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbj1GRXQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zeW1ib2woKSk7ZS5kPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbih0LGUsaSkoMCkobnVsbCl9LHQucHVzaCh7YXR0clRvUHJvamVjdG9yOmUsYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoSEV0LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiB0LnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihIRXQuQW5pbWF0b3IuTUFJTil9KSx0fSxlLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIGU9dC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpLG49RkV0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxpPUZFdC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJuIGUueD1uLGUueT1pLGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4idHJhbnNsYXRlKCIrbih0LGUscikrIiwiK2kodCxlLHIpKyIpIn0sZS5kPXRoaXMuX2NvbnN0cnVjdFN5bWJvbEdlbmVyYXRvcigpLGV9LGUucHJvdG90eXBlLl9jb25zdHJ1Y3RTeW1ib2xHZW5lcmF0b3I9ZnVuY3Rpb24oKXt2YXIgdD1GRXQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zeW1ib2woKSksZT1GRXQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zaXplKCkpO3JldHVybiBmdW5jdGlvbihuLGkscil7cmV0dXJuIHQobixpLHIpKGUobixpLHIpKShudWxsKX19LGUucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJue3g6dC5wb3NpdGlvbi54LXQuZGlhbWV0ZXIvMix5OnQucG9zaXRpb24ueS10LmRpYW1ldGVyLzIsd2lkdGg6dC5kaWFtZXRlcixoZWlnaHQ6dC5kaWFtZXRlcn19LGUucHJvdG90eXBlLl9lbnRpdHlWaXNpYmxlT25QbG90PWZ1bmN0aW9uKHQsZSl7dmFyIG49e21pbjplLnRvcExlZnQueCxtYXg6ZS5ib3R0b21SaWdodC54fSxpPXttaW46ZS50b3BMZWZ0LnksbWF4OmUuYm90dG9tUmlnaHQueX0scj10aGlzLl9lbnRpdHlCb3VuZHModCk7cmV0dXJuIEJFdC5ET00uaW50ZXJzZWN0c0JCb3gobixpLHIpfSxlLnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHQpe3ZhciBlPUZFdC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksbj1GRXQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLGk9RkV0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKTtyZXR1cm4gdGhpcy5lbnRpdGllcygpLmZpbHRlcigoZnVuY3Rpb24ocil7dmFyIG89ci5kYXR1bSxhPXIuaW5kZXgscz1yLmRhdGFzZXQsbD1lKG8sYSxzKSxjPW4obyxhLHMpLHU9aShvLGEscyk7cmV0dXJuIGwtdS8yPD10LngmJnQueDw9bCt1LzImJmMtdS8yPD10LnkmJnQueTw9Yyt1LzJ9KSl9LGUucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD10LHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSxlLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKG4pe3ZhciBpPXQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQuY2FsbCh0aGlzLG4pLHI9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKGUuX0xBQkVMX0FSRUFfQ0xBU1MsITApLG89bmV3IExFdC5TdmdDb250ZXh0KHIubm9kZSgpKSxhPW5ldyBMRXQuQ2FjaGVNZWFzdXJlcihvKSxzPW5ldyBMRXQuV3JpdGVyKGEsbyk7cmV0dXJuIHRoaXMuX2xhYmVsQ29uZmlnLnNldChuLHtsYWJlbEFyZWE6cixtZWFzdXJlcjphLHdyaXRlcjpzfSksaX0sZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcz1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzLmNhbGwodGhpcyxlKTt2YXIgbj10aGlzLl9sYWJlbENvbmZpZy5nZXQoZSk7bnVsbCE9biYmKG4ubGFiZWxBcmVhLnJlbW92ZSgpLHRoaXMuX2xhYmVsQ29uZmlnLmRlbGV0ZShlKSl9LGUucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xhYmVsQ29uZmlnLmdldCh0KS5sYWJlbEFyZWEuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCl9KSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmQkV0LldpbmRvdy5zZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlLl9kcmF3TGFiZWxzKCl9KSx0KX0sZS5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goKGZ1bmN0aW9uKGkpe2Zvcih2YXIgcj1lLmdldChpKSxvPXIubGVuZ3RoLGE9MDthPG87YSsrKXt2YXIgcz1yW2FdO251bGwhPXMmJnQuX2RyYXdMYWJlbChzLGEsaSxuKX19KSl9LGUucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24odCxlLG4saSl7aWYobnVsbCE9dC5sYWJlbCl7dmFyIHI9dGhpcy5fbGFiZWxDb25maWcuZ2V0KG4pLG89ci5sYWJlbEFyZWEsYT1yLm1lYXN1cmVyLHM9ci53cml0ZXIsbD17eDppLngodCxlLG4pLHk6aS55KHQsZSxuKX0sYz1GRXQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zaXplKCkpKHQsZSxuKSx1PXRoaXMuX2xhYmVsRm9ybWF0dGVyKHQubGFiZWwsdCxlLG4pLGg9YS5tZWFzdXJlKHUpLGQ9dGhpcy5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzKGwsYyxoKSxwPWQuY29udGFpbmVyRGltZW5zaW9ucyxmPWQuYWxpZ25tZW50LG09dGhpcy5fY3JlYXRlTGFiZWxDb250YWluZXIobyxkLmxhYmVsQ29udGFpbmVyT3JpZ2luLGQubGFiZWxPcmlnaW4saCk7cy53cml0ZSh1LHAud2lkdGgscC5oZWlnaHQse3hBbGlnbjpmLngseUFsaWduOmYueX0sbS5ub2RlKCkpfX0sZS5wcm90b3R5cGUuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcz1mdW5jdGlvbih0LG4saSl7cmV0dXJue2NvbnRhaW5lckRpbWVuc2lvbnM6e3dpZHRoOmkud2lkdGgsaGVpZ2h0OmkuaGVpZ2h0fSxsYWJlbENvbnRhaW5lck9yaWdpbjp7eDp0LngtaS53aWR0aC8yLHk6dC55LWkuaGVpZ2h0LzIrKG48aS5oZWlnaHQ/bi8yK2UuX0xBQkVMX01BUkdJTl9GUk9NX0JVQkJMRTowKX0sbGFiZWxPcmlnaW46e3g6dC54LHk6dC55fSxhbGlnbm1lbnQ6e3g6ImNlbnRlciIseToiY2VudGVyIn19fSxlLnByb3RvdHlwZS5fY3JlYXRlTGFiZWxDb250YWluZXI9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dC5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLngrIiwgIitlLnkrIikiKTtyZXR1cm4gci5jbGFzc2VkKCJvbi1iYXItbGFiZWwiLCEwKSxyfSxlLl9TSVpFX0tFWT0ic2l6ZSIsZS5fU1lNQk9MX0tFWT0ic3ltYm9sIixlLl9MQUJFTF9BUkVBX0NMQVNTPSJzY2F0dGVyLWxhYmVsLXRleHQtYXJlYSIsZS5fTEFCRUxfTUFSR0lOX0ZST01fQlVCQkxFPTE1LGV9KShnTXQuWFlQbG90KTtBRXQuU2NhdHRlcj1WRXQ7dmFyIFVFdD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi9PYmplY3QuZGVmaW5lUHJvcGVydHkoVUV0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgakV0PXVPLEdFdD1fbXQsV0V0PVd3dCxxRXQ9UVN0LFlFdD1aeXQsWEV0PWtfdCwkRXQ9dXd0LEtFdD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5hZGRDbGFzcygic2VnbWVudC1wbG90IiksZS5hdHRyKCJzdHJva2UiLChuZXcgWUV0LkNvbG9yKS5yYW5nZSgpWzBdKSxlLmF0dHIoInN0cm9rZS13aWR0aCIsIjJweCIpLGV9cmV0dXJuIGpFdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXRXQuUHJveHlEcmF3ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBxRXQuU2VnbWVudFNWR0RyYXdlcn0pLChmdW5jdGlvbigpe3JldHVybiBYRXQud2FybigiY2FudmFzIHJlbmRlcmVyIGlzIG5vdCBzdXBwb3J0ZWQgb24gU2VnbWVudCBQbG90ISIpLG51bGx9KSl9LGUucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBHRXQuTnVsbH1dfSxlLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngyIj09PWU/IngiOiJ5MiI9PT1lPyJ5IjplKX0sZS5wcm90b3R5cGUueD1mdW5jdGlvbihuLGkpe2lmKG51bGw9PW4pcmV0dXJuIHQucHJvdG90eXBlLnguY2FsbCh0aGlzKTtpZihudWxsPT1pKXQucHJvdG90eXBlLnguY2FsbCh0aGlzLG4pO2Vsc2V7dC5wcm90b3R5cGUueC5jYWxsKHRoaXMsbixpKTt2YXIgcj10aGlzLngyKCksbz1yJiZyLmFjY2Vzc29yO251bGwhPW8mJnRoaXMuX2JpbmRQcm9wZXJ0eShlLl9YMl9LRVksbyxpKX1yZXR1cm4gdGhpc30sZS5wcm90b3R5cGUueDI9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoZS5fWDJfS0VZKTt2YXIgbj10aGlzLngoKTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KGUuX1gyX0tFWSx0LG4mJm4uc2NhbGUpLHRoaXMucmVuZGVyKCksdGhpc30sZS5wcm90b3R5cGUueT1mdW5jdGlvbihuLGkpe2lmKG51bGw9PW4pcmV0dXJuIHQucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihudWxsPT1pKXQucHJvdG90eXBlLnkuY2FsbCh0aGlzLG4pO2Vsc2V7dC5wcm90b3R5cGUueS5jYWxsKHRoaXMsbixpKTt2YXIgcj10aGlzLnkyKCksbz1yJiZyLmFjY2Vzc29yO251bGwhPW8mJnRoaXMuX2JpbmRQcm9wZXJ0eShlLl9ZMl9LRVksbyxpKX1yZXR1cm4gdGhpc30sZS5wcm90b3R5cGUueTI9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoZS5fWTJfS0VZKTt2YXIgbj10aGlzLnkoKTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KGUuX1kyX0tFWSx0LG4mJm4uc2NhbGUpLHRoaXMucmVuZGVyKCksdGhpc30sZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciBlPXQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKTtyZXR1cm4gZS54MT0kRXQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLGUueDI9bnVsbD09dGhpcy54MigpPyRFdC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSk6JEV0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueDIoKSksZS55MT0kRXQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLGUueTI9bnVsbD09dGhpcy55MigpPyRFdC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk6JEV0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTIoKSksZX0sZS5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmVudGl0eU5lYXJlc3QodCk7cmV0dXJuIG51bGwhPWU/W2VdOltdfSxlLnByb3RvdHlwZS5lbnRpdGllc0luPWZ1bmN0aW9uKHQsZSl7dmFyIG4saTtyZXR1cm4gbnVsbD09ZT8obj17bWluOnQudG9wTGVmdC54LG1heDp0LmJvdHRvbVJpZ2h0Lnh9LGk9e21pbjp0LnRvcExlZnQueSxtYXg6dC5ib3R0b21SaWdodC55fSk6KG49dCxpPWUpLHRoaXMuX2VudGl0aWVzSW50ZXJzZWN0aW5nKG4saSl9LGUucHJvdG90eXBlLl9lbnRpdGllc0ludGVyc2VjdGluZz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1bXSxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLHI9dGhpcy5lbnRpdGllcygpLG89ci5sZW5ndGgsYT0wO2E8bzthKyspe3ZhciBzPXJbYV07dGhpcy5fbGluZUludGVyc2VjdHNCb3gocyx0LGUsaSkmJm4ucHVzaChzKX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuX2xpbmVJbnRlcnNlY3RzQm94PWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMsbz1pLngxKHQuZGF0dW0sdC5pbmRleCx0LmRhdGFzZXQpLGE9aS54Mih0LmRhdHVtLHQuaW5kZXgsdC5kYXRhc2V0KSxzPWkueTEodC5kYXR1bSx0LmluZGV4LHQuZGF0YXNldCksbD1pLnkyKHQuZGF0dW0sdC5pbmRleCx0LmRhdGFzZXQpO2lmKGUubWluPD1vJiZvPD1lLm1heCYmbi5taW48PXMmJnM8PW4ubWF4fHxlLm1pbjw9YSYmYTw9ZS5tYXgmJm4ubWluPD1sJiZsPD1uLm1heClyZXR1cm4hMDt2YXIgYz17eDpvLHk6c30sdT17eDphLHk6bH0saD1be3g6ZS5taW4seTpuLm1pbn0se3g6ZS5taW4seTpuLm1heH0se3g6ZS5tYXgseTpuLm1heH0se3g6ZS5tYXgseTpuLm1pbn1dO3JldHVybiBoLmZpbHRlcigoZnVuY3Rpb24odCxlKXtyZXR1cm4gMCE9PWUmJnIuX2xpbmVJbnRlcnNlY3RzU2VnbWVudChjLHUsdCxoW2UtMV0pJiZyLl9saW5lSW50ZXJzZWN0c1NlZ21lbnQodCxoW2UtMV0sYyx1KX0pKS5sZW5ndGg+MH0sZS5wcm90b3R5cGUuX2xpbmVJbnRlcnNlY3RzU2VnbWVudD1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuKGUueC10LngpKihuLnktZS55KS0oZS55LXQueSkqKG4ueC1lLngpfTtyZXR1cm4gcih0LGUsbikqcih0LGUsaSk8MH0sZS5fWDJfS0VZPSJ4MiIsZS5fWTJfS0VZPSJ5MiIsZX0pKGdNdC5YWVBsb3QpO1VFdC5TZWdtZW50PUtFdDt2YXIgWkV0PXt9OwovKioKICAgICAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAgICAgKiBAbGljZW5zZSBNSVQKICAgICAqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShaRXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBKRXQ9dU8sUUV0PUVkdCx0VHQ9X210LGVUdD1kd3QsblR0PUZndCxpVHQ9dXd0LHJUdD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5fc3RhY2tpbmdSZXN1bHQ9ZVR0Lm1lbVRodW5rKChmdW5jdGlvbigpe3JldHVybiBlLmRhdGFzZXRzKCl9KSwoZnVuY3Rpb24oKXtyZXR1cm4gZS54KCkuYWNjZXNzb3J9KSwoZnVuY3Rpb24oKXtyZXR1cm4gZS55KCkuYWNjZXNzb3J9KSwoZnVuY3Rpb24oKXtyZXR1cm4gZS5fc3RhY2tpbmdPcmRlcn0pLChmdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gblR0LlN0YWNraW5nLnN0YWNrKHQsZSxuLGkpfSkpLGUuX3N0YWNrZWRFeHRlbnQ9ZVR0Lm1lbVRodW5rKGUuX3N0YWNraW5nUmVzdWx0LChmdW5jdGlvbigpe3JldHVybiBlLngoKS5hY2Nlc3Nvcn0pLChmdW5jdGlvbigpe3JldHVybiBlLl9maWx0ZXJGb3JQcm9wZXJ0eSgieSIpfSksKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gblR0LlN0YWNraW5nLnN0YWNrZWRFeHRlbnQodCxlLG4pfSkpLGUuX2Jhc2VsaW5lVmFsdWU9MCxlLl9zdGFja2luZ09yZGVyPSJib3R0b211cCIsZS5hZGRDbGFzcygic3RhY2tlZC1hcmVhLXBsb3QiKSxlLl9iYXNlbGluZVZhbHVlUHJvdmlkZXI9ZnVuY3Rpb24oKXtyZXR1cm5bZS5fYmFzZWxpbmVWYWx1ZV19LGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQoITEpLGV9cmV0dXJuIEpFdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT90LnByb3RvdHlwZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZC5jYWxsKHRoaXMpOmU/KG5UdC5XaW5kb3cud2FybigiV2FybmluZzogU3RhY2tlZCBBcmVhIFBsb3QgZG9lcyBub3Qgc3VwcG9ydCBjcm9wcGVkIHJlbmRlcmluZy4iKSx0aGlzKTp0LnByb3RvdHlwZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZC5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9nZXRBbmltYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHRUdC5OdWxsfSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9iYXNlbGluZT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCl9LGUucHJvdG90eXBlLng9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbnVsbD09ZT90LnByb3RvdHlwZS54LmNhbGwodGhpcyk6KG51bGw9PW4/dC5wcm90b3R5cGUueC5jYWxsKHRoaXMsZSk6dC5wcm90b3R5cGUueC5jYWxsKHRoaXMsZSxuKSx0aGlzLl9jaGVja1NhbWVEb21haW4oKSx0aGlzKX0sZS5wcm90b3R5cGUueT1mdW5jdGlvbihlLG4pe3JldHVybiBudWxsPT1lP3QucHJvdG90eXBlLnkuY2FsbCh0aGlzKToobnVsbD09bj90LnByb3RvdHlwZS55LmNhbGwodGhpcyxlKTp0LnByb3RvdHlwZS55LmNhbGwodGhpcyxlLG4pLHRoaXMuX2NoZWNrU2FtZURvbWFpbigpLHRoaXMpfSxlLnByb3RvdHlwZS55T2Zmc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fc3RhY2tpbmdSZXN1bHQoKTtpZihudWxsIT1uKXt2YXIgaT1uLmdldCh0KTtpZihudWxsIT1pKXt2YXIgcj1pLmdldChTdHJpbmcoZSkpO2lmKG51bGwhPXIpcmV0dXJuIHIub2Zmc2V0fX19LGUucHJvdG90eXBlLnN0YWNraW5nT3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fc3RhY2tpbmdPcmRlcjoodGhpcy5fc3RhY2tpbmdPcmRlcj10LHRoaXMuX29uRGF0YXNldFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3QucHJvdG90eXBlLmRvd25zYW1wbGluZ0VuYWJsZWQuY2FsbCh0aGlzKTooblR0LldpbmRvdy53YXJuKCJXYXJuaW5nOiBTdGFja2VkIEFyZWEgUGxvdCBkb2VzIG5vdCBzdXBwb3J0IGRvd25zYW1wbGluZyIpLHRoaXMpfSxlLnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy55KCkuc2NhbGUuc2NhbGUodGhpcy5fYmFzZWxpbmVWYWx1ZSksZT17eDE6MCx5MTp0LHgyOnRoaXMud2lkdGgoKSx5Mjp0fTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLGUpfSxlLnByb3RvdHlwZS5fdXBkYXRlWVNjYWxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy55KCksZT10JiZ0LnNjYWxlO251bGwhPWUmJihlLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSxlLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSl9LGUucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksdC5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXN9LGUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihlKXtyZXR1cm4ieSI9PT1lP1t0aGlzLl9zdGFja2VkRXh0ZW50KCldOnQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9jaGVja1NhbWVEb21haW49ZnVuY3Rpb24oKXtpZih0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSl7dmFyIHQ9dGhpcy5kYXRhc2V0cygpLG49dGhpcy54KCkuYWNjZXNzb3IsaT10Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIFFFdC5zZXQodC5kYXRhKCkubWFwKChmdW5jdGlvbihlLGkpe3JldHVybiBuVHQuU3RhY2tpbmcubm9ybWFsaXplS2V5KG4oZSxpLHQpKX0pKSkudmFsdWVzKCl9KSkscj1lLl9kb21haW5LZXlzKHQsbik7aS5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGghPT1yLmxlbmd0aH0pKSYmblR0LldpbmRvdy53YXJuKCJ0aGUgZG9tYWlucyBhY3Jvc3MgdGhlIGRhdGFzZXRzIGFyZSBub3QgdGhlIHNhbWUuIFBsb3QgbWF5IHByb2R1Y2UgdW5pbnRlbmRlZCBiZWhhdmlvci4iKX19LGUuX2RvbWFpbktleXM9ZnVuY3Rpb24odCxlKXt2YXIgbj1RRXQuc2V0KCk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciBpPXQuZGF0YSgpLHI9aS5sZW5ndGgsbz0wO288cjtvKyspbi5hZGQoZShpW29dLG8sdCkpfSkpLG4udmFsdWVzKCl9LGUucHJvdG90eXBlLl9jb29yZGluYXRlUHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1pVHQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLG49dGhpcy55KCkuYWNjZXNzb3IsaT10aGlzLngoKS5hY2Nlc3NvcixyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gblR0LlN0YWNraW5nLm5vcm1hbGl6ZUtleShpKHQsZSxuKSl9LG89dGhpcy5fc3RhY2tpbmdSZXN1bHQoKTtyZXR1cm5bZSxmdW5jdGlvbihlLGksYSl7dmFyIHM9K24oZSxpLGEpLGw9by5nZXQoYSkuZ2V0KHIoZSxpLGEpKS5vZmZzZXQ7cmV0dXJuIHQueSgpLnNjYWxlLnNjYWxlKHMrbCl9LGZ1bmN0aW9uKGUsbixpKXt2YXIgYT1vLmdldChpKS5nZXQocihlLG4saSkpLm9mZnNldDtyZXR1cm4gdC55KCkuc2NhbGUuc2NhbGUoYSl9XX0sZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciBlPXQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxuPXRoaXMuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCk7cmV0dXJuIGUuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKG5bMF0sblsxXSxuWzJdKSxlfSxlLnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihlLG4saSl7dmFyIHI9dC5wcm90b3R5cGUuX3BpeGVsUG9pbnQuY2FsbCh0aGlzLGUsbixpKSxvPXRoaXMueCgpLmFjY2Vzc29yKGUsbixpKSxhPXRoaXMueSgpLmFjY2Vzc29yKGUsbixpKSxzPXRoaXMueSgpLnNjYWxlLnNjYWxlKCthK3RoaXMuX3N0YWNraW5nUmVzdWx0KCkuZ2V0KGkpLmdldChuVHQuU3RhY2tpbmcubm9ybWFsaXplS2V5KG8pKS5vZmZzZXQpO3JldHVybnt4OnIueCx5OnN9fSxlfSkoZk10LkFyZWEpO1pFdC5TdGFja2VkQXJlYT1yVHQ7dmFyIG9UdD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi9PYmplY3QuZGVmaW5lUHJvcGVydHkob1R0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYVR0PXVPLHNUdD1JbXQsbFR0PWd5dCxjVHQ9ZHd0LHVUdD1GZ3QsaFR0PVhNdCxkVHQ9dXd0LHBUdD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT0idmVydGljYWwiKTt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi5fZXh0cmVtYUZvcm1hdHRlcj1sVHQuaWRlbnRpdHkoKSxuLl9zdGFja2luZ1Jlc3VsdD1jVHQubWVtVGh1bmsoKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZGF0YXNldHMoKX0pLChmdW5jdGlvbigpe3JldHVybiBuLnBvc2l0aW9uKCkuYWNjZXNzb3J9KSwoZnVuY3Rpb24oKXtyZXR1cm4gbi5sZW5ndGgoKS5hY2Nlc3Nvcn0pLChmdW5jdGlvbigpe3JldHVybiBuLl9zdGFja2luZ09yZGVyfSksKGZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiB1VHQuU3RhY2tpbmcuc3RhY2sodCxlLG4saSl9KSksbi5fc3RhY2tlZEV4dGVudD1jVHQubWVtVGh1bmsobi5fc3RhY2tpbmdSZXN1bHQsKGZ1bmN0aW9uKCl7cmV0dXJuIG4ucG9zaXRpb24oKS5hY2Nlc3Nvcn0pLChmdW5jdGlvbigpe3JldHVybiBuLl9maWx0ZXJGb3JQcm9wZXJ0eShuLl9pc1ZlcnRpY2FsPyJ5IjoieCIpfSksKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdVR0LlN0YWNraW5nLnN0YWNrZWRFeHRlbnQodCxlLG4pfSkpLG4uYWRkQ2xhc3MoInN0YWNrZWQtYmFyLXBsb3QiKSxuLl9zdGFja2luZ09yZGVyPSJib3R0b211cCIsbn1yZXR1cm4gYVR0Ll9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLnN0YWNraW5nT3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fc3RhY2tpbmdPcmRlcjoodGhpcy5fc3RhY2tpbmdPcmRlcj10LHRoaXMuX29uRGF0YXNldFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS5leHRyZW1hRm9ybWF0dGVyPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9leHRyZW1hRm9ybWF0dGVyOih0aGlzLl9leHRyZW1hRm9ybWF0dGVyPXQsdGhpcy5yZW5kZXIoKSx0aGlzKX0sZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZChoVHQuQmFyLl9MQUJFTF9BUkVBX0NMQVNTLCEwKTt2YXIgZT1uZXcgc1R0LlN2Z0NvbnRleHQodGhpcy5fbGFiZWxBcmVhLm5vZGUoKSk7dGhpcy5fbWVhc3VyZXI9bmV3IHNUdC5DYWNoZU1lYXN1cmVyKGUpLHRoaXMuX3dyaXRlcj1uZXcgc1R0LldyaXRlcih0aGlzLl9tZWFzdXJlcixlKX0sZS5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgbj10aGlzO3QucHJvdG90eXBlLl9kcmF3TGFiZWxzLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3ZhciBpPSt0aGlzLmJhc2VsaW5lVmFsdWUoKSxyPXRoaXMucG9zaXRpb24oKS5zY2FsZSxvPXRoaXMubGVuZ3RoKCkuc2NhbGUsYT11VHQuU3RhY2tpbmcuc3RhY2tlZEV4dGVudHModGhpcy5fc3RhY2tpbmdSZXN1bHQoKSkscz1hLm1pbmltdW1FeHRlbnRzLGw9W10sYz1mdW5jdGlvbih0LGUpe3ZhciBhPW4uX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCkscz1uLndpZHRoKCksYz1uLmhlaWdodCgpO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYodC5leHRlbnQhPT1pKXt2YXIgdT1uLmV4dHJlbWFGb3JtYXR0ZXIoKSh0LmV4dGVudCksaD1uLl9tZWFzdXJlci5tZWFzdXJlKHUpLGQ9dC5zdGFja2VkRGF0dW0scD1kLm9yaWdpbmFsRGF0dW0sZj1kLm9yaWdpbmFsSW5kZXgsbT1kLm9yaWdpbmFsRGF0YXNldDtpZighbi5faXNEYXR1bU9uU2NyZWVuKGEscyxjLHAsZixtKSlyZXR1cm47dmFyIGc9ZFR0LlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4uYXR0cihoVHQuQmFyLl9CQVJfVEhJQ0tORVNTX0tFWSkpKHAsZixtKSxfPW8uc2NhbGUodC5leHRlbnQpLHk9bi5fZ2V0UG9zaXRpb25BdHRyKHIuc2NhbGUodC5heGlzVmFsdWUpLGcpK2cvMix2PWUobi5faXNWZXJ0aWNhbD97eDp5LHk6X306e3g6Xyx5Onl9LGgsZyksYj0oZnVuY3Rpb24odCxlLGkpe3ZhciByPWUudG9wTGVmdCxvPXIueCxhPXIueSxzPWUuYm90dG9tUmlnaHQueC1lLnRvcExlZnQueCxsPWUuYm90dG9tUmlnaHQueS1lLnRvcExlZnQueSxjPW4uX2lzVmVydGljYWw/cz5pOmw+aTtpZighYyl7dmFyIHU9bi5fbGFiZWxBcmVhLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28rIiwgIithKyIpIik7dS5jbGFzc2VkKCJzdGFja2VkLWJhci1sYWJlbCIsITApLG4uX3dyaXRlci53cml0ZSh0LHMsbCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIn0sdS5ub2RlKCkpfXJldHVybiBjfSkodSx7dG9wTGVmdDp2LGJvdHRvbVJpZ2h0Ont4OnYueCtoLndpZHRoLHk6di55K2guaGVpZ2h0fX0sZyk7bC5wdXNoKGIpfX0pKX07YyhhLm1heGltdW1FeHRlbnRzLChmdW5jdGlvbih0LGkscil7dmFyIG89bi5faXNWZXJ0aWNhbD9pLndpZHRoOmkuaGVpZ2h0O3JldHVybnt4Om4uX2lzVmVydGljYWw/dC54LW8vMjp0LngrZS5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVIseTpuLl9pc1ZlcnRpY2FsP3QueS0obi5faXNWZXJ0aWNhbD9pLmhlaWdodDppLndpZHRoKTp0Lnktby8yfX0pKSxjKHMsKGZ1bmN0aW9uKHQsaSxyKXt2YXIgbz1uLl9pc1ZlcnRpY2FsP2kud2lkdGg6aS5oZWlnaHQ7cmV0dXJue3g6bi5faXNWZXJ0aWNhbD90Lngtby8yOnQueC0obi5faXNWZXJ0aWNhbD9pLmhlaWdodDppLndpZHRoKSx5Om4uX2lzVmVydGljYWw/dC55K2UuX0VYVFJFTUFfTEFCRUxfTUFSR0lOX0ZST01fQkFSOnQueS1vLzJ9fSkpLGwuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkmJnRoaXMuX2xhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKX0sZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxuPXQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLGk9dGhpcy5faXNWZXJ0aWNhbD8ieSI6IngiLHI9dGhpcy5sZW5ndGgoKS5zY2FsZSxvPXRoaXMubGVuZ3RoKCkuYWNjZXNzb3IsYT10aGlzLnBvc2l0aW9uKCkuYWNjZXNzb3Iscz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHVUdC5TdGFja2luZy5ub3JtYWxpemVLZXkoYSh0LGUsbikpfSxsPXRoaXMuX3N0YWNraW5nUmVzdWx0KCksYz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHIuc2NhbGUobC5nZXQobikuZ2V0KHModCxlLG4pKS5vZmZzZXQpfSx1PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5zY2FsZSgrbyh0LGUsbikrbC5nZXQobikuZ2V0KHModCxlLG4pKS5vZmZzZXQpfSxoPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5hYnModSh0LGUsbiktYyh0LGUsbikpfTtuW3RoaXMuX2lzVmVydGljYWw/ImhlaWdodCI6IndpZHRoIl09aDt2YXIgZD1mdW5jdGlvbih0LGUsbil7cmV0dXJuK28odCxlLG4pPDA/Yyh0LGUsbik6dSh0LGUsbil9O3JldHVybiBuW2ldPWZ1bmN0aW9uKHQsbixpKXtyZXR1cm4gZS5faXNWZXJ0aWNhbD9kKHQsbixpKTpkKHQsbixpKS1oKHQsbixpKX0sbn0sZS5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09KHRoaXMuX2lzVmVydGljYWw/InkiOiJ4Iik/W3RoaXMuX3N0YWNrZWRFeHRlbnQoKV06dC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sZS5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVI9NSxlfSkoaFR0LkJhcik7b1R0LlN0YWNrZWRCYXI9cFR0O3ZhciBmVHQ9e307Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovT2JqZWN0LmRlZmluZVByb3BlcnR5KGZUdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG1UdD11TyxnVHQ9Rmd0LF9UdD11d3QseVR0PShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLl9jb25uZWN0b3JzRW5hYmxlZD0hMSxlLmFkZENsYXNzKCJ3YXRlcmZhbGwtcGxvdCIpLGV9cmV0dXJuIG1UdC5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5jb25uZWN0b3JzRW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9jb25uZWN0b3JzRW5hYmxlZDoodGhpcy5fY29ubmVjdG9yc0VuYWJsZWQ9dCx0aGlzKX0sZS5wcm90b3R5cGUudG90YWw9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoZS5fVE9UQUxfS0VZKToodGhpcy5fYmluZFByb3BlcnR5KGUuX1RPVEFMX0tFWSx0LG51bGwpLHRoaXMpfSxlLnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fY29ubmVjdG9yQXJlYS5zZWxlY3RBbGwoImxpbmUiKS5yZW1vdmUoKSx0aGlzLl9jb25uZWN0b3JzRW5hYmxlZCYmZ1R0LldpbmRvdy5zZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlLl9kcmF3Q29ubmVjdG9ycygpfSksdCl9LGUucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24obil7dmFyIGk9dC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMsbik7cmV0dXJuIHRoaXMuX2Nvbm5lY3RvckFyZWE9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKGUuX0NPTk5FQ1RPUl9BUkVBX0NMQVNTLCEwKSxpfSxlLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24oZSl7cmV0dXJuInkiPT09ZT9bdGhpcy5fZXh0ZW50XTp0LnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgbj10aGlzLGk9dC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcykscj10aGlzLnkoKS5zY2FsZSxvPV9UdC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnRvdGFsKCkpO3JldHVybiBudWxsPT10aGlzLmF0dHIoInkiKSYmKGkueT1mdW5jdGlvbih0LGUsaSl7dmFyIGE9bi55KCkuYWNjZXNzb3IodCxlLGkpO2lmKG8odCxlLGkpKXJldHVybiBNYXRoLm1pbihyLnNjYWxlKGEpLHIuc2NhbGUoMCkpO3ZhciBzPW4uX3N1YnRvdGFsc1tlXTtpZigwPT09ZSlyZXR1cm4gci5zY2FsZShhPDA/cy1hOnMpO3ZhciBsPW4uX3N1YnRvdGFsc1tlLTFdO3JldHVybiByLnNjYWxlKHM+bD9zOmwpfSksbnVsbD09dGhpcy5hdHRyKCJoZWlnaHQiKSYmKGkuaGVpZ2h0PWZ1bmN0aW9uKHQsZSxpKXt2YXIgYT1vKHQsZSxpKSxzPW4ueSgpLmFjY2Vzc29yKHQsZSxpKTtpZihhKXJldHVybiBNYXRoLmFicyhyLnNjYWxlKHMpLXIuc2NhbGUoMCkpO3ZhciBsPW4uX3N1YnRvdGFsc1tlXTtpZigwPT09ZSlyZXR1cm4gTWF0aC5hYnMoci5zY2FsZShsKS1yLnNjYWxlKGwtcykpO3ZhciBjPW4uX3N1YnRvdGFsc1tlLTFdO3JldHVybiBNYXRoLmFicyhyLnNjYWxlKGwpLXIuc2NhbGUoYykpfSksaS5jbGFzcz1mdW5jdGlvbih0LGkscil7dmFyIGE9IiI7cmV0dXJuIG51bGwhPW4uYXR0cigiY2xhc3MiKSYmKGE9bi5hdHRyKCJjbGFzcyIpLmFjY2Vzc29yKHQsaSxyKSsiICIpLG8odCxpLHIpP2ErZS5fQkFSX1RPVEFMX0NMQVNTOmErKG4ueSgpLmFjY2Vzc29yKHQsaSxyKT4wP2UuX0JBUl9HUk9XVEhfQ0xBU1M6ZS5fQkFSX0RFQ0xJTkVfQ0xBU1MpfSxpfSxlLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVN1YnRvdGFscygpLHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGUuY2FsbCh0aGlzKSx0aGlzfSxlLnByb3RvdHlwZS5fY2FsY3VsYXRlU3VidG90YWxzQW5kRXh0ZW50PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1OdW1iZXIuTUFYX1ZBTFVFLG49TnVtYmVyLk1JTl9WQUxVRSxpPTAscj0hMSxvPXQuZGF0YSgpLGE9by5sZW5ndGgscz0wO3M8YTtzKyspe3ZhciBsPW9bc10sYz10aGlzLnkoKS5hY2Nlc3NvcihsLHMsdCksdT10aGlzLnRvdGFsKCkuYWNjZXNzb3IobCxzLHQpO2lmKHUmJjAhPT1zfHwoaSs9YyksdGhpcy5fc3VidG90YWxzLnB1c2goaSksaTxlJiYoZT1pKSxpPm4mJihuPWkpLHUmJihjPGUmJihlPWMpLGM+biYmKG49YykpLCFyJiZ1KXtmb3IodmFyIGg9Yy1pLGQ9MDtkPHRoaXMuX3N1YnRvdGFscy5sZW5ndGg7ZCsrKXRoaXMuX3N1YnRvdGFsc1tkXSs9aDtyPSEwLGkrPWgsZSs9aCxuKz1ofX10aGlzLl9leHRlbnQ9W2Usbl19LGUucHJvdG90eXBlLl9kcmF3Q29ubmVjdG9ycz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxuPXRoaXMuZGF0YXNldHMoKVswXSxpPTE7aTxuLmRhdGEoKS5sZW5ndGg7aSsrKXt2YXIgcj1pLTEsbz1uLmRhdGEoKVtpXSxhPW4uZGF0YSgpW3JdLHM9dC54KGEscixuKSxsPXQueChvLGksbikrdC53aWR0aChvLGksbiksYz10LnkobyxpLG4pOyh0aGlzLl9zdWJ0b3RhbHNbaV0+MCYmdGhpcy5fc3VidG90YWxzW2ldPnRoaXMuX3N1YnRvdGFsc1tyXXx8dGhpcy5fc3VidG90YWxzW2ldPDAmJnRoaXMuX3N1YnRvdGFsc1tpXT49dGhpcy5fc3VidG90YWxzW3JdKSYmKGM9dC55KG8saSxuKSt0LmhlaWdodChvLGksbikpLHRoaXMuX2Nvbm5lY3RvckFyZWEuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChlLl9DT05ORUNUT1JfQ0xBU1MsITApLmF0dHIoIngxIixzKS5hdHRyKCJ4MiIsbCkuYXR0cigieTEiLGMpLmF0dHIoInkyIixjKX19LGUucHJvdG90eXBlLl91cGRhdGVTdWJ0b3RhbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGFzZXRzKCk7aWYodC5sZW5ndGg+MCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTt0aGlzLl9zdWJ0b3RhbHM9bmV3IEFycmF5LHRoaXMuX2NhbGN1bGF0ZVN1YnRvdGFsc0FuZEV4dGVudChlKX19LGUuX0JBUl9ERUNMSU5FX0NMQVNTPSJ3YXRlcmZhbGwtZGVjbGluZSIsZS5fQkFSX0dST1dUSF9DTEFTUz0id2F0ZXJmYWxsLWdyb3d0aCIsZS5fQkFSX1RPVEFMX0NMQVNTPSJ3YXRlcmZhbGwtdG90YWwiLGUuX0NPTk5FQ1RPUl9DTEFTUz0iY29ubmVjdG9yIixlLl9DT05ORUNUT1JfQVJFQV9DTEFTUz0iY29ubmVjdG9yLWFyZWEiLGUuX1RPVEFMX0tFWT0idG90YWwiLGV9KShYTXQuQmFyKTtmVHQuV2F0ZXJmYWxsPXlUdCwoZnVuY3Rpb24odCl7Ci8qKgogICAgICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICAgICAqIEBsaWNlbnNlIE1JVAogICAgICovCk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZT11TztlLl9fZXhwb3J0U3RhcihmTXQsdCksZS5fX2V4cG9ydFN0YXIoWE10LHQpLGUuX19leHBvcnRTdGFyKGh3dCx0KSxlLl9fZXhwb3J0U3RhcigkTXQsdCksZS5fX2V4cG9ydFN0YXIobU10LHQpLGUuX19leHBvcnRTdGFyKG5FdCx0KSxlLl9fZXhwb3J0U3RhcihnRXQsdCksZS5fX2V4cG9ydFN0YXIoQUV0LHQpLGUuX19leHBvcnRTdGFyKFVFdCx0KSxlLl9fZXhwb3J0U3RhcihaRXQsdCksZS5fX2V4cG9ydFN0YXIob1R0LHQpLGUuX19leHBvcnRTdGFyKGZUdCx0KX0pKHBNdCk7dmFyIHZUdD17fTsKLyoqCiAgICAgKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogICAgICogQGxpY2Vuc2UgTUlUCiAgICAgKi9PYmplY3QuZGVmaW5lUHJvcGVydHkodlR0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx2VHQudmVyc2lvbj0iMy45LjAiLChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGU9dU87dC5BbmltYXRvcnM9X210LHQuQXhlcz1QbXQsdC5Db21wb25lbnRzPWlidCx0LkNvbmZpZ3M9TF90LHQuRm9ybWF0dGVycz1neXQsdC5SZW5kZXJDb250cm9sbGVyPUhndCx0LlJlbmRlclBvbGljaWVzPW55dCx0LlN5bWJvbEZhY3Rvcmllcz1VeHQsdC5EaXNwYXRjaGVycz1zYnQsdC5EcmF3ZXJzPU5TdCx0LkludGVyYWN0aW9ucz1vYnQsdC5QbG90cz1wTXQsdC5TY2FsZXM9Wnl0LHQuVXRpbHM9Rmd0LGUuX19leHBvcnRTdGFyKG15dCx0KSx0LlRpbWVJbnRlcnZhbD1LeXQuVGltZUludGVydmFsLGUuX19leHBvcnRTdGFyKEJndCx0KSxlLl9fZXhwb3J0U3Rhcih4eHQsdCksZS5fX2V4cG9ydFN0YXIoZ3d0LHQpLHQudmVyc2lvbj12VHQudmVyc2lvbixlLl9fZXhwb3J0U3RhcihjYnQsdCksZS5fX2V4cG9ydFN0YXIoV3d0LHQpLGUuX19leHBvcnRTdGFyKHdidCx0KSxlLl9fZXhwb3J0U3RhcihJYnQsdCksZS5fX2V4cG9ydFN0YXIoZ010LHQpLGUuX19leHBvcnRTdGFyKHV3dCx0KSxlLl9fZXhwb3J0U3RhcihJdnQsdCksZS5fX2V4cG9ydFN0YXIoaHZ0LHQpfSkock8pO2NvbnN0IGJUdD1be2NoYXJhY3Rlcjoi4pe8IixtZXRob2Q6ck8uU3ltYm9sRmFjdG9yaWVzLnNxdWFyZX0se2NoYXJhY3Rlcjoi4peGIixtZXRob2Q6ck8uU3ltYm9sRmFjdG9yaWVzLmRpYW1vbmR9LHtjaGFyYWN0ZXI6IuKWsiIsbWV0aG9kOnJPLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZX0se2NoYXJhY3Rlcjoi4piFIixtZXRob2Q6ck8uU3ltYm9sRmFjdG9yaWVzLnN0YXJ9LHtjaGFyYWN0ZXI6IuKcmiIsbWV0aG9kOnJPLlN5bWJvbEZhY3Rvcmllcy5jcm9zc31dO3ZhciB4VHQ7ZnVuY3Rpb24gd1R0KHQpe3JldHVybiBlPT57bGV0IG4saT1NYXRoLmFicyhlKTtyZXR1cm4gaTwxZS0xNSYmKGk9MCksbj1teShpPj0xZTR8fGk+MCYmaTwuMDE/Ii4iK3QrIn5lIjoiLiIrdCsifmciKSxuKGUpfX0hKGZ1bmN0aW9uKHQpe3QuU1RFUD0ic3RlcCIsdC5SRUxBVElWRT0icmVsYXRpdmUiLHQuV0FMTF9USU1FPSJ3YWxsX3RpbWUifSkoeFR0fHwoeFR0PXt9KSk7Y29uc3QgU1R0PW15KCIuNH5zIik7ZnVuY3Rpb24gTVR0KCl7bGV0IHQ9bmV3IHJPLlNjYWxlcy5MaW5lYXI7dC50aWNrR2VuZXJhdG9yKHJPLlNjYWxlcy5UaWNrR2VuZXJhdG9ycy5pbnRlZ2VyVGlja0dlbmVyYXRvcigpKTtsZXQgZT1uZXcgck8uQXhlcy5OdW1lcmljKHQsImJvdHRvbSIpO3JldHVybiBlLmZvcm1hdHRlcihTVHQpLHtzY2FsZTp0LGF4aXM6ZSxhY2Nlc3Nvcjp0PT50LnN0ZXB9fWxldCBFVHQ9ck8uRm9ybWF0dGVycy50aW1lKCIlYSAlYiAlZSwgJUg6JU06JVMiKSxUVHQ9KHQsZSxuKT0+e2lmKG51bGwhPXQucmVsYXRpdmUpcmV0dXJuIHQucmVsYXRpdmU7bGV0IGk9bi5kYXRhKCk7cmV0dXJuKCt0LndhbGxfdGltZS0oaS5sZW5ndGg+MD8raVswXS53YWxsX3RpbWU6MCkpLzM2ZTV9LENUdD10PT57bGV0IGU9IiIsbj1NYXRoLmZsb29yKHQvMjQpO3QtPTI0Km4sbiYmKGUrPW4rImQgIik7bGV0IGk9TWF0aC5mbG9vcih0KTt0LT1pLHQqPTYwLChpfHxuKSYmKGUrPWkrImggIik7bGV0IHI9TWF0aC5mbG9vcih0KTtyZXR1cm4gdC09cix0Kj02MCwocnx8aXx8bikmJihlKz1yKyJtICIpLGUrTWF0aC5mbG9vcih0KSsicyJ9O2Z1bmN0aW9uIEFUdCh0KXtzd2l0Y2godCl7Y2FzZSB4VHQuU1RFUDpyZXR1cm4gTVR0KCk7Y2FzZSB4VHQuV0FMTF9USU1FOnJldHVybihmdW5jdGlvbiBlKCl7bGV0IHQ9bmV3IHJPLlNjYWxlcy5UaW1lO3JldHVybntzY2FsZTp0LGF4aXM6bmV3IHJPLkF4ZXMuVGltZSh0LCJib3R0b20iKSxhY2Nlc3Nvcjp0PT50LndhbGxfdGltZX19KSgpO2Nhc2UgeFR0LlJFTEFUSVZFOnJldHVybihmdW5jdGlvbiBuKCl7bGV0IHQ9bmV3IHJPLlNjYWxlcy5MaW5lYXI7cmV0dXJue3NjYWxlOnQsYXhpczpuZXcgck8uQXhlcy5OdW1lcmljKHQsImJvdHRvbSIpLGFjY2Vzc29yOlRUdH19KSgpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHhUeXBlOiAiK3QpfX12YXIga1R0O2Z1bmN0aW9uIExUdCh0KXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmxvYWRLZXk9IiIsdGhpcy5kYXRhVG9Mb2FkPVtdLHRoaXMuZ2V0RGF0YUxvYWROYW1lPXQ9PlN0cmluZyh0KSx0aGlzLmRhdGFMb2FkaW5nPSExLHRoaXMuZGF0YUxvYWRlZEF0TGVhc3RPbmNlPSExLHRoaXMuX2lzQ29ubmVjdGVkPSExLHRoaXMuX2RhdGFMb2FkU3RhdGU9bmV3IE1hcCx0aGlzLl9jYW5jZWxsZXI9bmV3IFhSLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCx0aGlzLl9sb2FkRGF0YT1TZS5leHBvcnRzLnRocm90dGxlKHRoaXMuX2xvYWREYXRhSW1wbCwxMDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5faXNDb25uZWN0ZWQ9ITB9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX2lzQ29ubmVjdGVkPSExfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmU6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2xvYWREYXRhSWZBY3RpdmUifSxfaXNDb25uZWN0ZWQ6e3R5cGU6Qm9vbGVhbn0sbG9hZEtleTp7dHlwZTpTdHJpbmd9LGRhdGFUb0xvYWQ6e3R5cGU6QXJyYXl9LGdldERhdGFMb2FkTmFtZTp7dHlwZTpPYmplY3R9LGxvYWREYXRhQ2FsbGJhY2s6e3R5cGU6T2JqZWN0fSxyZXF1ZXN0RGF0YTp7dHlwZTpPYmplY3R9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RhdGFUb0xvYWRDaGFuZ2VkKF9pc0Nvbm5lY3RlZCwgZGF0YVRvTG9hZC4qKSJdfW9uTG9hZEZpbmlzaCgpe31yZWxvYWQoKXt0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5fbG9hZERhdGEoKX1yZXNldCgpe251bGwhPXRoaXMuX2xvYWREYXRhQXN5bmMmJihjbGVhclRpbWVvdXQodGhpcy5fbG9hZERhdGFBc3luYyksdGhpcy5fbG9hZERhdGFBc3luYz1udWxsKSx0aGlzLl9jYW5jZWxsZXImJnRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9kYXRhTG9hZFN0YXRlJiZ0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9X2RhdGFUb0xvYWRDaGFuZ2VkKCl7dGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9ZGV0YWNoZWQoKXtudWxsIT10aGlzLl9sb2FkRGF0YUFzeW5jJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCl9X2xvYWREYXRhSWZBY3RpdmUoKXt0aGlzLmFjdGl2ZSYmdGhpcy5fbG9hZERhdGEoKX1fbG9hZERhdGFJbXBsKCl7dGhpcy5hY3RpdmUmJihudWxsIT09dGhpcy5fbG9hZERhdGFBc3luYyYmY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9c2V0VGltZW91dCh0aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoKHQ9PntpZih0LmNhbmNlbGxlZClyZXR1cm47dGhpcy5kYXRhTG9hZGluZz0hMDtjb25zdCBlPXRoaXMuZGF0YVRvTG9hZC5maWx0ZXIoKHQ9Pntjb25zdCBlPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHQpO3JldHVybiF0aGlzLl9kYXRhTG9hZFN0YXRlLmhhcyhlKX0pKTtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHQpO3RoaXMuX2RhdGFMb2FkU3RhdGUuc2V0KGUsa1R0LkxPQURJTkcpfWNvbnN0IG49dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKCh0PT57aWYodC5jYW5jZWxsZWQpcmV0dXJuO2NvbnN0e2l0ZW06ZSxkYXRhOm59PXQudmFsdWUsaT10aGlzLmdldERhdGFMb2FkTmFtZShlKTt0aGlzLl9kYXRhTG9hZFN0YXRlLnNldChpLGtUdC5MT0FERUQpLHRoaXMubG9hZERhdGFDYWxsYmFjayh0aGlzLGUsbil9KSksaT10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoKHQ9PntpZighdC5jYW5jZWxsZWQpe2NvbnN0IHQ9bmV3IFNldChlLm1hcCgodD0+dGhpcy5nZXREYXRhTG9hZE5hbWUodCkpKSk7dGhpcy5kYXRhVG9Mb2FkLnNvbWUoKGU9PnQuaGFzKHRoaXMuZ2V0RGF0YUxvYWROYW1lKGUpKSkpJiZ0aGlzLm9uTG9hZEZpbmlzaCgpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMH1BcnJheS5mcm9tKHRoaXMuX2RhdGFMb2FkU3RhdGUudmFsdWVzKCkpLmluY2x1ZGVzKGtUdC5MT0FESU5HKXx8KHRoaXMuZGF0YUxvYWRpbmc9ITEpfSkpO3RoaXMucmVxdWVzdERhdGEoZSxuLCgoKT0+aSh2b2lkIDApKSl9KSkpKX19fSEoZnVuY3Rpb24odCl7dFt0LkxPQURJTkc9MF09IkxPQURJTkciLHRbdC5MT0FERUQ9MV09IkxPQURFRCJ9KShrVHR8fChrVHQ9e30pKSxlbCh7bW9kdWxlTmFtZToicGxvdHRhYmxlLXN0eWxlIixzdHlsZUNvbnRlbnQ6IlxuICAgIFxuLnBsb3R0YWJsZS1jb2xvcnMtMCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1Mjc5Yzc7IC8qIElORElHTyAqL1xufVxuXG4ucGxvdHRhYmxlLWNvbG9ycy0xIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZkMzczZTsgLyogQ09SQUxfUkVEICovXG59XG5cbi5wbG90dGFibGUtY29sb3JzLTIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjNjMjYxOyAvKiBGRVJOICovXG59XG5cbi5wbG90dGFibGUtY29sb3JzLTMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFkNDE5OyAvKiBCUklHSFRfU1VOICovXG59XG5cbi5wbG90dGFibGUtY29sb3JzLTQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmMyYjZmOyAvKiBKQUNBUlRBICovXG59XG5cbi5wbG90dGFibGUtY29sb3JzLTUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3OTM5OyAvKiBCVVJOSU5HX09SQU5HRSAqL1xufVxuXG4ucGxvdHRhYmxlLWNvbG9ycy02IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RiMmU2NTsgLyogQ0VSSVNFX1JFRCAqL1xufVxuXG4ucGxvdHRhYmxlLWNvbG9ycy03IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk5Y2U1MDsgLyogQ09OSUZFUiAqL1xufVxuXG4ucGxvdHRhYmxlLWNvbG9ycy04IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk2MjU2NTsgLyogUk9ZQUxfSEVBVEggKi9cbn1cblxuLnBsb3R0YWJsZS1jb2xvcnMtOSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwNmNjY2M7IC8qIFJPQklOU19FR0dfQkxVRSAqL1xufVxuXG4vKipcbiAqIFVzZXItc3VwcGxpZWQgcmVuZGVyVG8gZWxlbWVudC5cbiAqL1xuLnBsb3R0YWJsZSB7XG4gIGRpc3BsYXk6IGJsb2NrOyAvKiBtdXN0IGJlIGJsb2NrIGVsZW1lbnRzIGZvciB3aWR0aC9oZWlnaHQgY2FsY3VsYXRpb25zIHRvIHdvcmsgaW4gRmlyZWZveC4gKi9cbiAgcG9pbnRlci1ldmVudHM6IHZpc2libGVGaWxsO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC8qKlxuICAgKiBQcmUgMy4wLCB1c2VycyBjb3VsZCBzZXQgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHR3byB3YXlzOiBlaXRoZXIgdXNpbmcgQ1NTXG4gICAqIChpbmxpbmUgb3IgdGhyb3VnaCBhIHN0eWxlc2hlZXQpLCBvciB1c2luZyB0aGUgU1ZHIHdpZHRoL2hlaWdodCBhdHRyaWJ1dGVzLiBCeSBkZWZhdWx0LCB3ZVxuICAgKiBzZXQgdGhlIFNWRyB3aWR0aC9oZWlnaHQgYXR0cmlidXRlcyB0byAxMDAlLlxuICAgKlxuICAgKiBQb3N0IDMuMCB0aGUgcm9vdCBlbGVtZW50IGlzIGFsd2F5cyBhIG5vcm1hbCBkaXYgYW5kIHRoZSBvbmx5IHdheSB0byBzZXQgdGhlIGRpbWVuc2lvbnMgaXNcbiAgICogdG8gdXNlIENTUy4gVG8gcmVwbGljYXRlIHRoZSBcIjEwMCUtYnktZGVmYXVsdFwiIGJlaGF2aW9yLCB3ZSBhcHBseSB3aWR0aC9oZWlnaHQgMTAwJS5cbiAgICovXG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi8qKlxuICogVGhlIF9lbGVtZW50IHRoYXQgcm9vdHMgZWFjaCBDb21wb25lbnQncyBET00uXG4gKi9cbi5wbG90dGFibGUgLmNvbXBvbmVudCB7XG4gIC8qIEFsbG93IGNvbXBvbmVudHMgdG8gYmUgcG9zaXRpb25lZCB3aXRoIGV4cGxpY2l0IGxlZnQvdG9wL3dpZHRoL2hlaWdodCBzdHlsZXMgKi9cbiAgcG9zaXRpb246IGFic29sdXRlO1xufVxuXG4ucGxvdHRhYmxlIC5iYWNrZ3JvdW5kLWNvbnRhaW5lcixcbi5wbG90dGFibGUgLmNvbnRlbnQsXG4ucGxvdHRhYmxlIC5mb3JlZ3JvdW5kLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLyoqXG4gKiBEb24ndCBhbGxvdyBzdmcgZWxlbWVudHMgYWJvdmUgdGhlIGNvbnRlbnQgdG8gc3RlYWwgZXZlbnRzXG4gKi9cbi5wbG90dGFibGUgLmZvcmVncm91bmQtY29udGFpbmVyIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy1oaWRkZW4ge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ucGxvdHRhYmxlIC5jb21wb25lbnQtb3ZlcmZsb3ctdmlzaWJsZSB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuXG4ucGxvdHRhYmxlIC5wbG90LWNhbnZhcy1jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ucGxvdHRhYmxlIC5wbG90LWNhbnZhcyB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIC8qKlxuICAgKiBQbGF5IHdlbGwgd2l0aCBkZWZlcnJlZCByZW5kZXJpbmcuXG4gICAqL1xuICB0cmFuc2Zvcm0tb3JpZ2luOiAwcHggMHB4IDBweDtcbn1cblxuLnBsb3R0YWJsZSB0ZXh0IHtcbiAgdGV4dC1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjtcbn1cblxuLnBsb3R0YWJsZSAubGFiZWwgdGV4dCB7XG4gIGZpbGw6ICMzMjMxM0Y7XG59XG5cbi5wbG90dGFibGUgLmJhci1sYWJlbC10ZXh0LWFyZWEgdGV4dCxcbi5wbG90dGFibGUgLnNjYXR0ZXItbGFiZWwtdGV4dC1hcmVhIHRleHQge1xuICBmb250LXNpemU6IDEycHg7XG59XG5cbi5wbG90dGFibGUgLmxhYmVsLWFyZWEgdGV4dCB7XG4gIGZpbGw6ICMzMjMxM0Y7XG4gIGZvbnQtc2l6ZTogMTRweDtcbn1cblxuLnBsb3R0YWJsZSAubGlnaHQtbGFiZWwgdGV4dCB7XG4gIGZpbGw6IHdoaXRlO1xufVxuXG4ucGxvdHRhYmxlIC5kYXJrLWxhYmVsIHRleHQge1xuICBmaWxsOiAjMzIzMTNGO1xufVxuXG4ucGxvdHRhYmxlIC5vZmYtYmFyLWxhYmVsIHRleHQge1xuICBmaWxsOiAjMzIzMTNGO1xufVxuXG4ucGxvdHRhYmxlIC5zdGFja2VkLWJhci1sYWJlbCB0ZXh0IHtcbiAgZmlsbDogIzMyMzEzRjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG4ucGxvdHRhYmxlIC5zdGFja2VkLWJhci1wbG90IC5vZmYtYmFyLWxhYmVsIHtcbiAgLyogSEFDS0hBQ0sgIzI3OTU6IGNvcnJlY3Qgb2ZmLWJhciBsYWJlbCBsb2dpYyB0byBiZSBpbXBsZW1lbnRlZCBvbiBTdGFja2VkQmFyICovXG4gIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50O1xufVxuXG4ucGxvdHRhYmxlIC5heGlzLWxhYmVsIHRleHQge1xuICBmb250LXNpemU6IDEwcHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsZXR0ZXItc3BhY2luZzogMXB4O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG4ucGxvdHRhYmxlIC50aXRsZS1sYWJlbCB0ZXh0IHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLnBsb3R0YWJsZSAuYXhpcyBsaW5lLmJhc2VsaW5lIHtcbiAgc3Ryb2tlOiAjQ0NDO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cblxuLnBsb3R0YWJsZSAuYXhpcyBsaW5lLnRpY2stbWFyayB7XG4gIHN0cm9rZTogI0NDQztcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG5cbi5wbG90dGFibGUgLmF4aXMgdGV4dCB7XG4gIGZpbGw6ICMzMjMxM0Y7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cblxuLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1jaXJjbGUge1xuICBmaWxsOiB3aGl0ZTtcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIHN0cm9rZTogI0NDQztcbn1cblxuLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1saW5lIHtcbiAgc3Ryb2tlOiAjQ0NDO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cblxuLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1yZWN0IHtcbiAgc3Ryb2tlOiAjQ0NDO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbiAgZmlsbDogd2hpdGU7XG59XG5cbi5wbG90dGFibGUgLmJhci1wbG90IC5iYXNlbGluZSB7XG4gIHN0cm9rZTogIzk5OTtcbn1cblxuLnBsb3R0YWJsZSAuZ3JpZGxpbmVzIGxpbmUge1xuICBzdHJva2U6ICMzQzNDM0M7IC8qIGhhY2toYWNrOiBncmlkbGluZXMgc2hvdWxkIGJlIHNvbGlkOyBzZWUgIzgyMCAqL1xuICBvcGFjaXR5OiAwLjI1O1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cblxuLnBsb3R0YWJsZSAuc2VsZWN0aW9uLWJveC1sYXllciAuc2VsZWN0aW9uLWFyZWEge1xuICBmaWxsOiBibGFjaztcbiAgZmlsbC1vcGFjaXR5OiAwLjAzO1xuICBzdHJva2U6ICNDQ0M7XG59XG4vKiBEcmFnQm94TGF5ZXIgKi9cbi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlIC5kcmFnLWVkZ2UtbHIge1xuICBjdXJzb3I6IGV3LXJlc2l6ZTtcbn1cbi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLnktcmVzaXphYmxlIC5kcmFnLWVkZ2UtdGIge1xuICBjdXJzb3I6IG5zLXJlc2l6ZTtcbn1cblxuLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLXRsIHtcbiAgY3Vyc29yOiBud3NlLXJlc2l6ZTtcbn1cbi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci10ciB7XG4gIGN1cnNvcjogbmVzdy1yZXNpemU7XG59XG4ucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItYmwge1xuICBjdXJzb3I6IG5lc3ctcmVzaXplO1xufVxuLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLWJyIHtcbiAgY3Vyc29yOiBud3NlLXJlc2l6ZTtcbn1cblxuLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIubW92YWJsZSAuc2VsZWN0aW9uLWFyZWEge1xuICBjdXJzb3I6IG1vdmU7IC8qIElFIGZhbGxiYWNrICovXG4gIGN1cnNvcjogLW1vei1ncmFiO1xuICBjdXJzb3I6IC13ZWJraXQtZ3JhYjtcbiAgY3Vyc29yOiBncmFiO1xufVxuXG4ucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci5tb3ZhYmxlIC5zZWxlY3Rpb24tYXJlYTphY3RpdmUge1xuICBjdXJzb3I6IC1tb3otZ3JhYmJpbmc7XG4gIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZztcbiAgY3Vyc29yOiBncmFiYmluZztcbn1cbi8qIC9EcmFnQm94TGF5ZXIgKi9cblxuLnBsb3R0YWJsZSAuZ3VpZGUtbGluZS1sYXllciBsaW5lLmd1aWRlLWxpbmUge1xuICBzdHJva2U6ICNDQ0M7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xufVxuXG4ucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC52ZXJ0aWNhbCBsaW5lLmRyYWctZWRnZSB7XG4gIGN1cnNvcjogZXctcmVzaXplO1xufVxuXG4ucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC5ob3Jpem9udGFsIGxpbmUuZHJhZy1lZGdlIHtcbiAgY3Vyc29yOiBucy1yZXNpemU7XG59XG5cbi5wbG90dGFibGUgLmxlZ2VuZCB0ZXh0IHtcbiAgZmlsbDogIzMyMzEzRjtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cblxuLnBsb3R0YWJsZSAuaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCByZWN0LnN3YXRjaC1ib3VuZGluZy1ib3gge1xuICBmaWxsOiBub25lO1xuICBzdHJva2U6ICNDQ0M7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLnBsb3R0YWJsZSAud2F0ZXJmYWxsLXBsb3QgbGluZS5jb25uZWN0b3Ige1xuICBzdHJva2U6ICNDQ0M7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xufVxuXG4ucGxvdHRhYmxlIC5waWUtcGxvdCAuYXJjLm91dGxpbmUge1xuICBzdHJva2UtbGluZWpvaW46IHJvdW5kO1xufVxuXG4ifSk7Y29uc3QgUFR0PVsxLDAsMCwxLDAsMF07Y2xhc3MgTlR0IGV4dGVuZHMgck8uVXRpbHMuVHJhbnNsYXRvcntjb21wdXRlUG9zaXRpb24odCxlKXtjb25zdCBuPXt4OnQseTplfSxpPShmdW5jdGlvbiByKHQpe2NvbnN0IGU9KGZ1bmN0aW9uIG4odCl7Y29uc3QgZT1bXTtmb3IoO3QmJnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDspaWYoZS5wdXNoKHQpLHQuYXNzaWduZWRTbG90KXQ9dC5hc3NpZ25lZFNsb3Q7ZWxzZSBpZih0LnBhcmVudEVsZW1lbnQpdD10LnBhcmVudEVsZW1lbnQ7ZWxzZXtjb25zdCBlPXQucGFyZW50Tm9kZTt0PWUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50P2UuaG9zdDplIT09dD9lOm51bGx9cmV0dXJuIGV9KSh0KTtsZXQgaT1QVHQscj1udWxsO2Zvcihjb25zdCB0IG9mIGUpe2NvbnN0IGU9ck8uVXRpbHMuRE9NLmdldEVsZW1lbnRUcmFuc2Zvcm0odCk7aWYobnVsbCE9ZSl7Y29uc3Qgbj10LmNsaWVudFdpZHRoLzIscj10LmNsaWVudEhlaWdodC8yO2k9ck8uVXRpbHMuTWF0aC5tdWx0aXBseVRyYW5zbGF0ZShpLFtuLHJdKSxpPXJPLlV0aWxzLk1hdGgubXVsdGlwbHlNYXRyaXgoaSxyTy5VdGlscy5NYXRoLmludmVydE1hdHJpeChlKSksaT1yTy5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKGksWy1uLC1yXSl9bGV0IG49dC5zY3JvbGxMZWZ0LG89dC5zY3JvbGxUb3A7bnVsbCE9PXImJnQhPT1yfHwobi09dC5vZmZzZXRMZWZ0K3QuY2xpZW50TGVmdCxvLT10Lm9mZnNldFRvcCt0LmNsaWVudFRvcCxyPXQub2Zmc2V0UGFyZW50KSxpPXJPLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUoaSxbbixvXSl9cmV0dXJuIGl9KSh0aGlzLl9yb290RWxlbWVudCk7cmV0dXJuIG51bGw9PWk/bjpyTy5VdGlscy5NYXRoLmFwcGx5VHJhbnNmb3JtKGksbil9fWNsYXNzIElUdCBleHRlbmRzIHJPLkRpc3BhdGNoZXJzLk1vdXNle2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuX2V2ZW50VGFyZ2V0PXQucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpLHRoaXMuX3RyYW5zbGF0b3I9bmV3IE5UdCh0LnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSl9c3RhdGljIGdldERpc3BhdGNoZXIodCl7Y29uc3QgZT10LnJvb3QoKS5yb290RWxlbWVudCgpO2xldCBuPWVbSVR0Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBJVHQodCksZVtJVHQuX0RJU1BBVENIRVJfS0VZXT1uKSxufX1jbGFzcyBSVHQgZXh0ZW5kcyByTy5EaXNwYXRjaGVycy5Ub3VjaHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLl9ldmVudFRhcmdldD10LnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSx0aGlzLl90cmFuc2xhdG9yPW5ldyBOVHQodC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHQpe2NvbnN0IGU9dC5yb290KCkucm9vdEVsZW1lbnQoKTtsZXQgbj1lW1JUdC5fRElTUEFUQ0hFUl9LRVldO3JldHVybiBufHwobj1uZXcgUlR0KHQpLGVbUlR0Ll9ESVNQQVRDSEVSX0tFWV09biksbn19ck8uSW50ZXJhY3Rpb24ucHJvdG90eXBlLl9pc0luc2lkZUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gMDw9dC54JiYwPD10LnkmJnQueDx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLndpZHRoKCkmJnQueTx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLmhlaWdodCgpfTtjbGFzcyBPVHQgZXh0ZW5kcyByTy5JbnRlcmFjdGlvbnMuUG9pbnRlcntfYW5jaG9yKHQpe2NvbnN0IGU9dGhpcztlLl9pc0FuY2hvcmVkPSEwLGUuX21vdXNlRGlzcGF0Y2hlcj1JVHQuZ2V0RGlzcGF0Y2hlcihlLl9jb21wb25lbnRBdHRhY2hlZFRvKSxlLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUoZS5fbW91c2VNb3ZlQ2FsbGJhY2spLGUuX3RvdWNoRGlzcGF0Y2hlcj1SVHQuZ2V0RGlzcGF0Y2hlcihlLl9jb21wb25lbnRBdHRhY2hlZFRvKSxlLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KGUuX3RvdWNoU3RhcnRDYWxsYmFjayl9fXZhciB6VHQ7IShmdW5jdGlvbih0KXt0LkFVVE89ImF1dG8iLHQuQk9UVE9NPSJib3R0b20iLHQuUklHSFQ9InJpZ2h0In0pKHpUdHx8KHpUdD17fSkpO2NvbnN0IERUdD17Ym94U2hhZG93OiIwIDFweCA0cHggcmdiYSgwLCAwLCAwLCAuMykiLG9wYWNpdHk6MCxwb3NpdGlvbjoiZml4ZWQiLHdpbGxDaGFuZ2U6InRyYW5zZm9ybSIsekluZGV4OjV9O2xldCBCVHQ9Y2xhc3MgZXh0ZW5kcyhlcih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnBvc2l0aW9uPXpUdC5BVVRPLHRoaXMubWluRGlzdEZyb21FZGdlPTE1LHRoaXMuX3N0eWxlQ2FjaGU9bnVsbCx0aGlzLl9yYWY9bnVsbCx0aGlzLl90dW5uZWw9bnVsbH1yZWFkeSgpe3RoaXMuX3N0eWxlQ2FjaGU9bnVsbCx0aGlzLl9yYWY9bnVsbCx0aGlzLl90dW5uZWw9bnVsbH1hdHRhY2hlZCgpe3RoaXMuX3R1bm5lbD10aGlzLl9jcmVhdGVUdW5uZWwoKSx0aGlzLl9oaWRlT25CbHVyPSgpPT57ZG9jdW1lbnQuaGlkZGVuJiZ0aGlzLmhpZGUoKX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMuX2hpZGVPbkJsdXIpfWRldGFjaGVkKCl7dGhpcy5oaWRlKCksdGhpcy5fcmVtb3ZlVHVubmVsKHRoaXMuX3R1bm5lbCksdGhpcy5fdHVubmVsPW51bGwsd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMuX2hpZGVPbkJsdXIpfWNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fdHVubmVsLnNoYWRvd1Jvb3R9aGlkZSgpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpLHRoaXMuX3N0eWxlQ2FjaGU9bnVsbCx0aGlzLl90dW5uZWwuc3R5bGUub3BhY2l0eT0wfXVwZGF0ZUFuZFBvc2l0aW9uKHQpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpLHRoaXMuX3JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3RoaXMuaXNBdHRhY2hlZCYmdGhpcy5fcmVwb3NpdGlvbkltcGwodCl9KSl9X3JlcG9zaXRpb25JbXBsKHQpe2NvbnN0IGU9dGhpcy5fdHVubmVsLG49dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj13aW5kb3cuaW5uZXJIZWlnaHQsbz1kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoLGE9bi50b3Ascz1hK24uaGVpZ2h0LGw9aS5oZWlnaHQrMjA7bGV0IGM9bnVsbCx1PU1hdGgubWF4KHRoaXMubWluRGlzdEZyb21FZGdlLG4ubGVmdCksaD1udWxsLGQ9YTt0aGlzLnBvc2l0aW9uPT16VHQuUklHSFQ/dT1uLnJpZ2h0OihkPXMrMjAsbzx1K2kud2lkdGgrdGhpcy5taW5EaXN0RnJvbUVkZ2UmJih1PW51bGwsaD10aGlzLm1pbkRpc3RGcm9tRWRnZSkpLHRoaXMucG9zaXRpb249PXpUdC5BVVRPJiZuLnRvcC1sPjAmJnI8bi50b3Arbi5oZWlnaHQrbCYmKGQ9bnVsbCxjPXItYSsyMCk7Y29uc3QgcD17Y29udGFpbjoiY29udGVudCIsb3BhY2l0eToxLGxlZnQ6dT9gJHt1fXB4YDpudWxsLHJpZ2h0Omg/YCR7aH1weGA6bnVsbCx0b3A6ZD9gJHtkfXB4YDpudWxsLGJvdHRvbTpjP2Ake2N9cHhgOm51bGx9O1NlLmV4cG9ydHMuaXNFcXVhbCh0aGlzLl9zdHlsZUNhY2hlLHApfHwoT2JqZWN0LmFzc2lnbihlLnN0eWxlLHApLHRoaXMuX3N0eWxlQ2FjaGU9cCl9X2NyZWF0ZVR1bm5lbCgpe2lmKCF0aGlzLmNvbnRlbnRDb21wb25lbnROYW1lKXRocm93IG5ldyBSYW5nZUVycm9yKCJSZXF1aXJlIGBjb250ZW50Q29tcG9uZW50TmFtZWAgdG8gYmUgYSBuYW1lIG9mIGEgUG9seW1lciBjb21wb25lbnQiKTtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5jb250ZW50Q29tcG9uZW50TmFtZSk7cmV0dXJuIE9iamVjdC5hc3NpZ24odC5zdHlsZSxEVHQpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksdH1fcmVtb3ZlVHVubmVsKHQpe2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCl9fTt0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxCVHQucHJvdG90eXBlLCJjb250ZW50Q29tcG9uZW50TmFtZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxCVHQucHJvdG90eXBlLCJwb3NpdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxCVHQucHJvdG90eXBlLCJtaW5EaXN0RnJvbUVkZ2UiLHZvaWQgMCksQlR0PXQoW2koInZ6LWNoYXJ0LXRvb2x0aXAiKV0sQlR0KTtjb25zdCBIVHQ9bXkoIi4yfmUiKSxGVHQ9bXkoIi40fnIiKSxWVHQ9bXkoIix+Iik7ZnVuY3Rpb24gVVR0KHQpe2lmKDA9PT10KXJldHVybiIwIjtjb25zdCBlPU1hdGguYWJzKHQpO3JldHVybiBlPj0xZTR8fGU8LjAwMT9IVHQodCk6RlR0KHQpfWNvbnN0IGpUdD17Zm9ybWF0VGljazpVVHQsZm9ybWF0U2hvcnQ6VVR0LGZvcm1hdFJlYWRhYmxlKHQpe2NvbnN0IGU9TWF0aC5hYnModCk7cmV0dXJuIGU+PTFlNHx8ZTwuMDAxP0hUdCh0KTpWVHQodCl9LGZvcm1hdExvbmc6VlR0fTtteSgiMC4zfnMiKSxteSgiLC4zfmYiKSxteSgiLjR+Iik7Y29uc3QgR1R0PWNBKCkudGlja0Zvcm1hdCgpO2xldCBXVHQ7Y29uc3QgcVR0PXtmb3JtYXRUaWNrOnQ9PkdUdChuZXcgRGF0ZSh0KSksZm9ybWF0U2hvcnQ6dD0+bmV3IERhdGUodCkudG9Mb2NhbGVTdHJpbmcoV1R0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSksZm9ybWF0UmVhZGFibGU6dD0+bmV3IERhdGUodCkudG9Mb2NhbGVTdHJpbmcoV1R0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMiLHRpbWVab25lTmFtZToic2hvcnQifSksZm9ybWF0TG9uZzp0PT5uZXcgRGF0ZSh0KS50b0xvY2FsZVN0cmluZyhXVHQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJsb25nIixkYXk6Im51bWVyaWMiLGhvdXI6Im51bWVyaWMiLG1pbnV0ZToibnVtZXJpYyIsc2Vjb25kOiJudW1lcmljIix0aW1lWm9uZU5hbWU6InNob3J0IixmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOjN9KX07dmFyIFlUdDshKGZ1bmN0aW9uKHQpe3RbdC5MSU5FQVI9MF09IkxJTkVBUiIsdFt0LkxPRzEwPTFdPSJMT0cxMCIsdFt0LlRJTUU9Ml09IlRJTUUifSkoWVR0fHwoWVR0PXt9KSk7Y2xhc3MgWFR0e2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPWpUdH10cmFuc2Zvcm0odCxlLG4pe2NvbnN0W2kscl09dCxvPXItaSxbYSxzXT1lO3JldHVybiAwPT09bz9hOihzLWEpL28qKG4taSkrYX1mb3J3YXJkKHQsZSxuKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0odCxlLG4pfXJldmVyc2UodCxlLG4pe3JldHVybiB0aGlzLnRyYW5zZm9ybShlLHQsbil9bmljZURvbWFpbih0KXtsZXRbZSxuXT10O2lmKG48ZSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgaW5wdXQ6IG1pbiBpcyBsYXJnZXIgdGhhbiBtYXgiKTtpZihuPT09ZSlyZXR1cm4gMD09PWU/Wy0xLDFdOmU8MD9bMiplLDBdOlswLDIqZV07Y29uc3QgaT1WTSgpLHI9LjA1KihuLWUrTnVtYmVyLkVQU0lMT04pLFtvLGFdPWkuZG9tYWluKFtlLXIsbityXSkubmljZSgpLmRvbWFpbigpO3JldHVybltvLGFdfXRpY2tzKHQsZSl7cmV0dXJuIFZNKCkuZG9tYWluKHQpLnRpY2tzKGUpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX1jbGFzcyAkVHR7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9alR0fXRyYW5zZm9ybSh0KXtyZXR1cm4gTWF0aC5sb2cxMCh0PjA/dDpOdW1iZXIuTUlOX1ZBTFVFKX11bnRyYW5zZm9ybSh0KXtyZXR1cm4gTWF0aC5leHAodC9NYXRoLkxPRzEwRSl9Zm9yd2FyZCh0LGUsbil7aWYobjw9MClyZXR1cm4gZVswXTtjb25zdFtpLHJdPXQsW28sYV09ZSxzPXRoaXMudHJhbnNmb3JtKGkpLGw9dGhpcy50cmFuc2Zvcm0ociktcyxjPWEtbztyZXR1cm4gbj10aGlzLnRyYW5zZm9ybShuKSxjLyhsK051bWJlci5FUFNJTE9OKSoobi1zKStvfXJldmVyc2UodCxlLG4pe2NvbnN0W2kscl09dCxbbyxhXT1lLHM9dGhpcy50cmFuc2Zvcm0oaSksbD10aGlzLnRyYW5zZm9ybShyKTtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybSgobC1zKS8oYS1vK051bWJlci5FUFNJTE9OKSoobi1vKStzKX1uaWNlRG9tYWluKHQpe2NvbnN0W2Usbl09dDtpZihlPm4pdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGlucHV0OiBtaW4gaXMgbGFyZ2VyIHRoYW4gbWF4Iik7Y29uc3QgaT1NYXRoLm1heChlLE51bWJlci5NSU5fVkFMVUUpLHI9TWF0aC5tYXgobixOdW1iZXIuTUlOX1ZBTFVFKTtyZXR1cm4gbjw9MD9bTnVtYmVyLk1JTl9WQUxVRSwxXTpbTWF0aC5tYXgoTnVtYmVyLk1JTl9WQUxVRSwuNSppKSwyKnJdfXRpY2tzKHQsZSl7Y29uc3Qgbj10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxpPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLHI9S00oKS5kb21haW4oW24saV0pLnRpY2tzKGUpO3JldHVybiByLmxlbmd0aD9yOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19Y2xhc3MgS1R0e2NvbnN0cnVjdG9yKCl7dGhpcy5zY2FsZT1jQSgpLHRoaXMuZGVmYXVsdEZvcm1hdHRlcj1xVHR9Zm9yd2FyZCh0LGUsbil7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpKG4pfXJldmVyc2UodCxlLG4pe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShlKS5pbnZlcnQobikuZ2V0VGltZSgpfW5pY2VEb21haW4odCl7Y29uc3RbZSxuXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLG4uZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoKHQ9PnQuZ2V0VGltZSgpKSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fWNsYXNzIFpUdCBleHRlbmRzIHJPLlNjYWxlcy5MaW5lYXJ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX2lnbm9yZU91dGxpZXI9ITEsdGhpcy5wYWRQcm9wb3J0aW9uKC4yKX1zZXRWYWx1ZVByb3ZpZGVyRm9yRG9tYWluKHQpe3JldHVybiB0aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluPXQsdGhpc31fbmljZURvbWFpbih0LGUpe2NvbnN0W24saV09dDtyZXR1cm4oZnVuY3Rpb24gcih0KXtzd2l0Y2godCl7Y2FzZSBZVHQuTElORUFSOnJldHVybiBuZXcgWFR0O2Nhc2UgWVR0LkxPRzEwOnJldHVybiBuZXcgJFR0O2Nhc2UgWVR0LlRJTUU6cmV0dXJuIG5ldyBLVHQ7ZGVmYXVsdDp0aHJvdyBuZXcgUmFuZ2VFcnJvcihgU2NhbGVUeXBlICR7dH0gbm90IHN1cHBvcnRlZC5gKX19KShZVHQuTElORUFSKS5uaWNlRG9tYWluKFtuLGldKX1fZ2V0VW5ib3VuZGVkRXh0ZW50KHQpe2NvbnN0IGU9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModCk7bGV0IG49dGhpcy5fZGVmYXVsdEV4dGVudCgpO2lmKDAhPT1lLmxlbmd0aCl7Y29uc3QgdD1bck8uVXRpbHMuTWF0aC5taW4oZSxuWzBdKSxyTy5VdGlscy5NYXRoLm1heChlLG5bMV0pXTtuPXRoaXMuX25pY2VEb21haW4odCl9cmV0dXJuIG59X2dldEFsbEluY2x1ZGVkVmFsdWVzKHQ9ITEpe2NvbnN0IGU9dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj90aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluKCk6W107cmV0dXJuIHRoaXMuZXh0ZW50T2ZWYWx1ZXMoZSl9ZXh0ZW50T2ZWYWx1ZXModCl7Y29uc3QgZT10LmZpbHRlcigodD0+ck8uVXRpbHMuTWF0aC5pc1ZhbGlkTnVtYmVyKHQpKSk7bGV0IG49ZTtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7Y29uc3QgdD1lLnNvcnQoKCh0LGUpPT50LWUpKSxpPUdsKHQsLjA1KSxyPUdsKHQsLjk1KTtuPWUuZmlsdGVyKCh0PT50Pj1pJiZ0PD1yKSl9Y29uc3QgaT1MbChuKTtyZXR1cm4gbnVsbD09aVswXXx8bnVsbD09aVsxXT9bXTppfWlnbm9yZU91dGxpZXIodCl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdD8odGhpcy5faWdub3JlT3V0bGllcj10LHRoaXMpOnRoaXMuX2lnbm9yZU91dGxpZXJ9fWNsYXNzIEpUdCBleHRlbmRzIHJPLlF1YW50aXRhdGl2ZVNjYWxle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9pZ25vcmVPdXRsaWVyPSExfXNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4odCl7cmV0dXJuIHRoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW49dCx0aGlzfWlnbm9yZU91dGxpZXIodCl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdD8odGhpcy5faWdub3JlT3V0bGllcj10LHRoaXMpOnRoaXMuX2lnbm9yZU91dGxpZXJ9X2dldEFsbEluY2x1ZGVkVmFsdWVzKHQ9ITEpe2NvbnN0IGU9dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj90aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluKCk6W107cmV0dXJuIHRoaXMuZXh0ZW50T2ZWYWx1ZXMoZSl9fWNvbnN0IFFUdD1NYXRoLnBvdygyLC0xMDc0KTtmdW5jdGlvbiB0Q3QodCl7cmV0dXJuIE1hdGgubG9nMTAodCl9ZnVuY3Rpb24gZUN0KHQpe3JldHVybiBNYXRoLnBvdygxMCx0KX1jbGFzcyBuQ3QgZXh0ZW5kcyBKVHR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX2QzTG9nU2NhbGU9S00oKSx0aGlzLnBhZFByb3BvcnRpb24oLjIpfXNjYWxlKHQpe3JldHVybiB0PD0wP05hTjp0aGlzLl9kM0xvZ1NjYWxlKHQpfWludmVydCh0KXtyZXR1cm4gdGhpcy5fZDNMb2dTY2FsZS5pbnZlcnQodCl9c2NhbGVUcmFuc2Zvcm1hdGlvbih0KXtyZXR1cm4gdGhpcy5zY2FsZSh0KX1pbnZlcnRlZFRyYW5zZm9ybWF0aW9uKHQpe3JldHVybiB0aGlzLmludmVydCh0KX1nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpe3JldHVybiB0aGlzLmRvbWFpbigpfXNldFRyYW5zZm9ybWF0aW9uRG9tYWluKHQpe3RoaXMuZG9tYWluKHQpfWdldFRyYW5zZm9ybWF0aW9uRXh0ZW50KCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9X2dldERvbWFpbigpe3JldHVybiB0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWlufV9zZXREb21haW4odCl7dGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbj10O2NvbnN0W2Usbl09dDtzdXBlci5fc2V0RG9tYWluKFtNYXRoLm1heChRVHQsZSksbl0pfV9uaWNlRG9tYWluKHQsZSl7Y29uc3RbbixpXT10LHI9TWF0aC5tYXgodEN0KFFUdCksdEN0KG4pKSxvPXRDdChpKSxhPW8tcixzPWE/YSp0aGlzLnBhZFByb3BvcnRpb24oKToxO3JldHVybltlQ3QoTWF0aC5tYXgodEN0KFFUdCksci1zKSksZUN0KG8rcyldfV9nZXRVbmJvdW5kZWRFeHRlbnQodCl7Y29uc3QgZT10aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0KTtsZXQgbj10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYoMCE9PWUubGVuZ3RoKXtjb25zdCB0PVtyTy5VdGlscy5NYXRoLm1pbihlLG5bMF0pLHJPLlV0aWxzLk1hdGgubWF4KGUsblsxXSldO249dGhpcy5fbmljZURvbWFpbih0KX1yZXR1cm4gbn1fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModD0hMSl7cmV0dXJuIHN1cGVyLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpLm1hcCgodD0+dD4wP3Q6UVR0KSl9X2RlZmF1bHRFeHRlbnQoKXtyZXR1cm5bMSwxMF19X2JhY2tpbmdTY2FsZURvbWFpbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLl9kM0xvZ1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM0xvZ1NjYWxlLmRvbWFpbih0KSx0aGlzKX1fZ2V0UmFuZ2UoKXtyZXR1cm4gdGhpcy5fZDNMb2dTY2FsZS5yYW5nZSgpfV9zZXRSYW5nZSh0KXt0aGlzLl9kM0xvZ1NjYWxlLnJhbmdlKHQpfWRlZmF1bHRUaWNrcygpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnRpY2tzKDEpfXRpY2tzKCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUudGlja3MoKX1leHRlbnRPZlZhbHVlcyh0KXtjb25zdCBlPXQuZmlsdGVyKCh0PT5yTy5VdGlscy5NYXRoLmlzVmFsaWROdW1iZXIodCkmJnQ+MCkpO2xldCBuPWU7aWYodGhpcy5pZ25vcmVPdXRsaWVyKCkpe2NvbnN0IHQ9ZS5tYXAodEN0KS5zb3J0KCgodCxlKT0+dC1lKSksaT1HbCh0LC4wNSkscj1HbCh0LC45NSk7bj10LmZpbHRlcigodD0+dD49aSYmdDw9cikpLm1hcChlQ3QpfWNvbnN0IGk9TGwobik7cmV0dXJuIG51bGw9PWlbMF18fG51bGw9PWlbMV0/W106aX19Y2xhc3MgaUN0IGV4dGVuZHMgck8uQ29tcG9uZW50cy5TZWxlY3Rpb25Cb3hMYXllcntjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIoKSx0aGlzLmVhc2VGbj1UZix0aGlzLl9hbmltYXRpb25UaW1lPTc1MCx0aGlzLnhTY2FsZSh0KSx0aGlzLnlTY2FsZShlKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb249bmV3IHJPLkludGVyYWN0aW9ucy5EcmFnLHRoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb249bmV3IHJPLkludGVyYWN0aW9ucy5DbGljayx0aGlzLnNldHVwQ2FsbGJhY2tzKCksdGhpcy51bnpvb21NZXRob2Q9bix0aGlzLm9uRGV0YWNoKCgoKT0+e3RoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0aGlzKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0aGlzKX0pKSx0aGlzLm9uQW5jaG9yKCgoKT0+e3RoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHRoaXMpfSkpfWludGVyYWN0aW9uU3RhcnQodCl7dGhpcy5vblN0YXJ0PXR9aW50ZXJhY3Rpb25FbmQodCl7dGhpcy5vbkVuZD10fWRyYWdJbnRlcmFjdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259c2V0dXBDYWxsYmFja3MoKXtsZXQgdD0hMTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoKHQ9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDp0LGJvdHRvbVJpZ2h0OnR9KSx0aGlzLm9uU3RhcnQoKX0pKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKCgoZSxuKT0+e3RoaXMuYm91bmRzKHt0b3BMZWZ0OmUsYm90dG9tUmlnaHQ6bn0pLHRoaXMuYm94VmlzaWJsZSghMCksdD0hMH0pKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKCgoZSxuKT0+e3RoaXMuYm94VmlzaWJsZSghMSksdGhpcy5ib3VuZHMoe3RvcExlZnQ6ZSxib3R0b21SaWdodDpufSksdD90aGlzLnpvb20oKTp0aGlzLm9uRW5kKCksdD0hMX0pKSx0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLm9uRG91YmxlQ2xpY2sodGhpcy51bnpvb20uYmluZCh0aGlzKSl9YW5pbWF0aW9uVGltZSh0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9hbmltYXRpb25UaW1lO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoImFuaW1hdGlvblRpbWUgY2Fubm90IGJlIG5lZ2F0aXZlIik7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblRpbWU9dCx0aGlzfWVhc2UodCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJlYXNlIGZ1bmN0aW9uIG11c3QgYmUgYSBmdW5jdGlvbiIpO3JldHVybiAwPT09dCgwKSYmMT09PXQoMSl8fHJPLlV0aWxzLldpbmRvdy53YXJuKCJFYXNpbmcgZnVuY3Rpb24gZG9lcyBub3QgbWFpbnRhaW4gaW52YXJpYW50IGYoMCk9PTAgJiYgZigxKT09MS4gQmFkIGJlaGF2aW9yIG1heSByZXN1bHQuIiksdGhpcy5lYXNlRm49dCx0aGlzfXpvb20oKXtsZXQgdD10aGlzLnhFeHRlbnQoKVswXS52YWx1ZU9mKCksZT10aGlzLnhFeHRlbnQoKVsxXS52YWx1ZU9mKCksbj10aGlzLnlFeHRlbnQoKVsxXS52YWx1ZU9mKCksaT10aGlzLnlFeHRlbnQoKVswXS52YWx1ZU9mKCk7dCE9PWUmJm4hPT1pJiZ0aGlzLmludGVycG9sYXRlWm9vbSh0LGUsbixpKX11bnpvb20oKXtsZXQgdD10aGlzLnhTY2FsZSgpO3QuX2RvbWFpbk1pbj1udWxsLHQuX2RvbWFpbk1heD1udWxsO2xldCBlPXQuX2dldEV4dGVudCgpO3RoaXMueFNjYWxlKCkuZG9tYWluKGUpLHRoaXMudW56b29tTWV0aG9kKCl9aXNab29taW5nKHQpe3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5lbmFibGVkKCF0KSx0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLmVuYWJsZWQoIXQpfWludGVycG9sYXRlWm9vbSh0LGUsbixpKXtsZXQgcj10aGlzLnhTY2FsZSgpLmRvbWFpbigpWzBdLnZhbHVlT2YoKSxvPXRoaXMueFNjYWxlKCkuZG9tYWluKClbMV0udmFsdWVPZigpLGE9dGhpcy55U2NhbGUoKS5kb21haW4oKVswXS52YWx1ZU9mKCkscz10aGlzLnlTY2FsZSgpLmRvbWFpbigpWzFdLnZhbHVlT2YoKSxsPXRoaXMuZWFzZUZuLGM9KHQsZSxuKT0+QmQodCxlKShsKG4pKTt0aGlzLmlzWm9vbWluZyghMCk7bGV0IHU9RGF0ZS5ub3coKSxoPSgpPT57bGV0IGw9RGF0ZS5ub3coKSxkPTA9PT10aGlzLl9hbmltYXRpb25UaW1lPzE6TWF0aC5taW4oMSwobC11KS90aGlzLl9hbmltYXRpb25UaW1lKSxwPWMocix0LGQpLGY9YyhvLGUsZCksbT1jKGEsbixkKSxnPWMocyxpLGQpO3RoaXMueFNjYWxlKCkuZG9tYWluKFtwLGZdKSx0aGlzLnlTY2FsZSgpLmRvbWFpbihbbSxnXSksZDwxP3JPLlV0aWxzLkRPTS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbChoKToodGhpcy5vbkVuZCgpLHRoaXMuaXNab29taW5nKCExKSl9O2goKX19dmFyIHJDdCxvQ3QsYUN0LHNDdDshKGZ1bmN0aW9uKHQpe3RbdC5OT05FPTBdPSJOT05FIix0W3QuRFJBR19aT09NSU5HPTFdPSJEUkFHX1pPT01JTkciLHRbdC5QQU5OSU5HPTJdPSJQQU5OSU5HIn0pKHJDdHx8KHJDdD17fSkpO2NsYXNzIGxDdCBleHRlbmRzIHJPLkNvbXBvbmVudHMuR3JvdXB7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5zdGF0ZT1yQ3QuTk9ORSx0aGlzLnBhblN0YXJ0Q2FsbGJhY2s9bmV3IHJPLlV0aWxzLkNhbGxiYWNrU2V0LHRoaXMucGFuRW5kQ2FsbGJhY2s9bmV3IHJPLlV0aWxzLkNhbGxiYWNrU2V0LHRoaXMucGFuWm9vbT1uZXcgck8uSW50ZXJhY3Rpb25zLlBhblpvb20odCxlKSx0aGlzLnBhblpvb20uZHJhZ0ludGVyYWN0aW9uKCkubW91c2VGaWx0ZXIoKHQ9PmxDdC5pc1BhbktleSh0KSYmMD09PXQuYnV0dG9uKSksdGhpcy5wYW5ab29tLndoZWVsRmlsdGVyKHRoaXMuY2FuU2Nyb2xsWm9vbSksdGhpcy5kcmFnWm9vbUxheWVyPW5ldyBpQ3QodCxlLG4pLHRoaXMuZHJhZ1pvb21MYXllci5kcmFnSW50ZXJhY3Rpb24oKS5tb3VzZUZpbHRlcigodD0+IWxDdC5pc1BhbktleSh0KSYmMD09PXQuYnV0dG9uKSksdGhpcy5hcHBlbmQodGhpcy5kcmFnWm9vbUxheWVyKTtjb25zdCBpPXRoaXMub25XaGVlbC5iaW5kKHRoaXMpO3RoaXMub25BbmNob3IoKCgpPT57dGhpcy5fbW91c2VEaXNwYXRjaGVyPXJPLkRpc3BhdGNoZXJzLk1vdXNlLmdldERpc3BhdGNoZXIodGhpcyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uV2hlZWwoaSksdGhpcy5wYW5ab29tLmF0dGFjaFRvKHRoaXMpfSkpLHRoaXMub25EZXRhY2goKCgpPT57dGhpcy5wYW5ab29tLmRldGFjaEZyb20odGhpcyksdGhpcy5fbW91c2VEaXNwYXRjaGVyJiYodGhpcy5fbW91c2VEaXNwYXRjaGVyLm9mZldoZWVsKGkpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1udWxsKX0pKSx0aGlzLnBhblpvb20uZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnU3RhcnQoKCgpPT57dGhpcy5zdGF0ZT09ckN0Lk5PTkUmJnRoaXMuc2V0U3RhdGUockN0LlBBTk5JTkcpfSkpLHRoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5vbkRyYWdFbmQoKCgpPT57dGhpcy5zdGF0ZT09ckN0LlBBTk5JTkcmJnRoaXMuc2V0U3RhdGUockN0Lk5PTkUpfSkpLHRoaXMuZHJhZ1pvb21MYXllci5kcmFnSW50ZXJhY3Rpb24oKS5vbkRyYWdTdGFydCgoKCk9Pnt0aGlzLnN0YXRlPT1yQ3QuTk9ORSYmdGhpcy5zZXRTdGF0ZShyQ3QuRFJBR19aT09NSU5HKX0pKSx0aGlzLmRyYWdab29tTGF5ZXIuZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnRW5kKCgoKT0+e3RoaXMuc3RhdGU9PXJDdC5EUkFHX1pPT01JTkcmJnRoaXMuc2V0U3RhdGUockN0Lk5PTkUpfSkpfW9uV2hlZWwodCxlKXtpZih0aGlzLmNhblNjcm9sbFpvb20oZSkpcmV0dXJuO2NvbnN0IG49dGhpcy5lbGVtZW50KCk7aWYoIW4uc2VsZWN0KCIuaGVscCIpLmVtcHR5KCkpcmV0dXJuO2NvbnN0IGk9bi5hcHBlbmQoImRpdiIpLmNsYXNzZWQoImhlbHAiLCEwKTtpLmFwcGVuZCgic3BhbiIpLnRleHQoIkFsdCArIFNjcm9sbCB0byBab29tIiksaS5vbigiYW5pbWF0aW9uZW5kIiwoKCk9PntpLnJlbW92ZSgpfSkpfXN0YXRpYyBpc1BhbktleSh0KXtyZXR1cm4gQm9vbGVhbih0LmFsdEtleSl8fEJvb2xlYW4odC5zaGlmdEtleSl9Y2FuU2Nyb2xsWm9vbSh0KXtyZXR1cm4gdC5hbHRLZXl9c2V0U3RhdGUodCl7aWYodGhpcy5zdGF0ZT09dClyZXR1cm47Y29uc3QgZT10aGlzLnN0YXRlO3RoaXMuc3RhdGU9dCx0aGlzLnJvb3QoKS5yZW1vdmVDbGFzcyh0aGlzLnN0YXRlQ2xhc3NOYW1lKGUpKSx0aGlzLnJvb3QoKS5hZGRDbGFzcyh0aGlzLnN0YXRlQ2xhc3NOYW1lKHQpKSxlPT1yQ3QuUEFOTklORyYmdGhpcy5wYW5FbmRDYWxsYmFjay5jYWxsQ2FsbGJhY2tzKCksdD09ckN0LlBBTk5JTkcmJnRoaXMucGFuU3RhcnRDYWxsYmFjay5jYWxsQ2FsbGJhY2tzKCl9c3RhdGVDbGFzc05hbWUodCl7c3dpdGNoKHQpe2Nhc2UgckN0LlBBTk5JTkc6cmV0dXJuInBhbm5pbmciO2Nhc2UgckN0LkRSQUdfWk9PTUlORzpyZXR1cm4iZHJhZy16b29taW5nIjtjYXNlIHJDdC5OT05FOmRlZmF1bHQ6cmV0dXJuIiJ9fW9uUGFuU3RhcnQodCl7dGhpcy5wYW5TdGFydENhbGxiYWNrLmFkZCh0KX1vblBhbkVuZCh0KXt0aGlzLnBhbkVuZENhbGxiYWNrLmFkZCh0KX1vblNjcm9sbFpvb20odCl7dGhpcy5wYW5ab29tLm9uWm9vbUVuZCh0KX1vbkRyYWdab29tU3RhcnQodCl7dGhpcy5kcmFnWm9vbUxheWVyLmludGVyYWN0aW9uU3RhcnQodCl9b25EcmFnWm9vbUVuZCh0KXt0aGlzLmRyYWdab29tTGF5ZXIuaW50ZXJhY3Rpb25FbmQodCl9fSEoZnVuY3Rpb24odCl7dFt0LlRFWFQ9MF09IlRFWFQiLHRbdC5ET009MV09IkRPTSJ9KShvQ3R8fChvQ3Q9e30pKSwoZnVuY3Rpb24odCl7dC5MT0c9ImxvZyIsdC5MSU5FQVI9ImxpbmVhciJ9KShhQ3R8fChhQ3Q9e30pKTtjbGFzcyBjQ3R7Y29uc3RydWN0b3IodCxlLG4saSxyLG8sYSxzLGwsYyx1KXt0aGlzLmRpcnR5RGF0YXNldHM9bmV3IFNldCx0aGlzLnNlcmllc05hbWVzPVtdLHRoaXMubmFtZTJkYXRhc2V0cz17fSx0aGlzLmNvbG9yU2NhbGU9aSx0aGlzLnRvb2x0aXA9cix0aGlzLmRhdGFzZXRzPVtdLHRoaXMuX2lnbm9yZVlPdXRsaWVycz0hMSx0aGlzLmxhc3RQb2ludHNEYXRhc2V0PW5ldyByTy5EYXRhc2V0LHRoaXMubmFuRGF0YXNldD1uZXcgck8uRGF0YXNldCx0aGlzLnlWYWx1ZUFjY2Vzc29yPWUsdGhpcy5zeW1ib2xGdW5jdGlvbj1jLHRoaXMuX2RlZmF1bHRYUmFuZ2U9cyx0aGlzLl9kZWZhdWx0WVJhbmdlPWwsdGhpcy50b29sdGlwQ29sdW1ucz1vLHRoaXMuYnVpbGRDaGFydCh0LGUsbixhLHUpfWJ1aWxkQ2hhcnQodCxlLG4saSxyKXt0aGlzLmRlc3Ryb3koKTtjb25zdCBvPXQoKTt0aGlzLnhBY2Nlc3Nvcj1vLmFjY2Vzc29yLHRoaXMueFNjYWxlPW8uc2NhbGUsdGhpcy54QXhpcz1vLmF4aXMsdGhpcy54QXhpcy5tYXJnaW4oMSkudGlja0xhYmVsUGFkZGluZygzKSxyJiZ0aGlzLnhBeGlzLmZvcm1hdHRlcihyKSx0aGlzLnlTY2FsZT1jQ3QuZ2V0WVNjYWxlRnJvbVR5cGUobiksdGhpcy55U2NhbGUuc2V0VmFsdWVQcm92aWRlckZvckRvbWFpbigoKCk9PnRoaXMuZ2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCkpKSx0aGlzLnlBeGlzPW5ldyByTy5BeGVzLk51bWVyaWModGhpcy55U2NhbGUsImxlZnQiKTtsZXQgYT13VHQoMyk7dGhpcy55QXhpcy5tYXJnaW4oMCkudGlja0xhYmVsUGFkZGluZyg1KS5mb3JtYXR0ZXIoYSksdGhpcy55QXhpcy51c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbighMCksdGhpcy5maWxsQXJlYT1pO2NvbnN0IHM9bmV3IGxDdCh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSwoKCk9PnRoaXMucmVzZXREb21haW4oKSkpO3RoaXMudG9vbHRpcEludGVyYWN0aW9uPXRoaXMuY3JlYXRlVG9vbHRpcEludGVyYWN0aW9uKHMpLHRoaXMudG9vbHRpcFBvaW50c0NvbXBvbmVudD1uZXcgck8uQ29tcG9uZW50O2NvbnN0IGw9dGhpcy5idWlsZFBsb3QodGhpcy54U2NhbGUsdGhpcy55U2NhbGUsaSk7dGhpcy5ncmlkbGluZXM9bmV3IHJPLkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKTtsZXQgYz1udWxsO24hPT1hQ3QuTE9HJiYoYz1uZXcgck8uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigiaG9yaXpvbnRhbCIpLGMuc2NhbGUodGhpcy55U2NhbGUpLnZhbHVlKDApKTtsZXQgdT1uZXcgck8uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigidmVydGljYWwiKTt1LnNjYWxlKHRoaXMueFNjYWxlKS52YWx1ZSgwKSx0aGlzLmNlbnRlcj1uZXcgck8uQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsYyx1LGwsdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LHNdKSx0aGlzLmNlbnRlci5hZGRDbGFzcygibWFpbiIpLHRoaXMub3V0ZXI9bmV3IHJPLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LGUsbil7biYmKHRoaXMubWFyZ2luQXJlYVBsb3Q9bmV3IHJPLlBsb3RzLkFyZWEsdGhpcy5tYXJnaW5BcmVhUGxvdC54KHRoaXMueEFjY2Vzc29yLHQpLHRoaXMubWFyZ2luQXJlYVBsb3QueShuLmhpZ2hlckFjY2Vzc29yLGUpLHRoaXMubWFyZ2luQXJlYVBsb3QueTAobi5sb3dlckFjY2Vzc29yKSx0aGlzLm1hcmdpbkFyZWFQbG90LmF0dHIoImZpbGwiLCgodCxlLG4pPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUobi5tZXRhZGF0YSgpLm5hbWUpKSksdGhpcy5tYXJnaW5BcmVhUGxvdC5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKSx0aGlzLm1hcmdpbkFyZWFQbG90LmF0dHIoInN0cm9rZS13aWR0aCIsMCkpLHRoaXMuc21vb3RoZWRBY2Nlc3Nvcj10PT50LnNtb290aGVkO2xldCBpPW5ldyByTy5QbG90cy5MaW5lO2kueCh0aGlzLnhBY2Nlc3Nvcix0KSxpLnkodGhpcy55VmFsdWVBY2Nlc3NvcixlKSxpLmF0dHIoInN0cm9rZSIsKCh0LGUsbik9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShuLm1ldGFkYXRhKCkubmFtZSkpKSx0aGlzLmxpbmVQbG90PWksdGhpcy5zZXR1cFRvb2x0aXBzKGkpO2xldCByPW5ldyByTy5QbG90cy5MaW5lO2lmKHIueCh0aGlzLnhBY2Nlc3Nvcix0KSxyLnkodGhpcy5zbW9vdGhlZEFjY2Vzc29yLGUpLHIuYXR0cigic3Ryb2tlIiwoKHQsZSxuKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKG4ubWV0YWRhdGEoKS5uYW1lKSkpLHRoaXMuc21vb3RoTGluZVBsb3Q9cix0aGlzLnN5bWJvbEZ1bmN0aW9uKXtjb25zdCBuPW5ldyByTy5QbG90cy5TY2F0dGVyO24ueCh0aGlzLnhBY2Nlc3Nvcix0KSxuLnkodGhpcy55VmFsdWVBY2Nlc3NvcixlKSxuLmF0dHIoImZpbGwiLCgodCxlLG4pPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUobi5tZXRhZGF0YSgpLm5hbWUpKSksbi5hdHRyKCJvcGFjaXR5IiwxKSxuLnNpemUoOCksbi5zeW1ib2woKCh0LGUsbik9PnRoaXMuc3ltYm9sRnVuY3Rpb24obi5tZXRhZGF0YSgpLm5hbWUpKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3Q9bn1sZXQgbz1uZXcgck8uUGxvdHMuU2NhdHRlcjtvLngodGhpcy54QWNjZXNzb3IsdCksby55KHRoaXMueVZhbHVlQWNjZXNzb3IsZSksby5hdHRyKCJmaWxsIiwodD0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHQubmFtZSkpKSxvLmF0dHIoIm9wYWNpdHkiLDEpLG8uc2l6ZSg4KSxvLmRhdGFzZXRzKFt0aGlzLmxhc3RQb2ludHNEYXRhc2V0XSksdGhpcy5zY2F0dGVyUGxvdD1vO2xldCBhPW5ldyByTy5QbG90cy5TY2F0dGVyO2EueCh0aGlzLnhBY2Nlc3Nvcix0KSxhLnkoKHQ9PnQuZGlzcGxheVkpLGUpLGEuYXR0cigiZmlsbCIsKHQ9PnRoaXMuY29sb3JTY2FsZS5zY2FsZSh0Lm5hbWUpKSksYS5hdHRyKCJvcGFjaXR5IiwxKSxhLnNpemUoMTIpLGEuZGF0YXNldHMoW3RoaXMubmFuRGF0YXNldF0pLGEuc3ltYm9sKHJPLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZSksdGhpcy5uYW5EaXNwbGF5PWE7Y29uc3Qgcz1bYSxvLHIsaV07cmV0dXJuIHRoaXMubWFyZ2luQXJlYVBsb3QmJnMucHVzaCh0aGlzLm1hcmdpbkFyZWFQbG90KSx0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCYmcy5wdXNoKHRoaXMubWFya2Vyc1NjYXR0ZXJQbG90KSxuZXcgck8uQ29tcG9uZW50cy5Hcm91cChzKX1pZ25vcmVZT3V0bGllcnModCl7dCE9PXRoaXMuX2lnbm9yZVlPdXRsaWVycyYmKHRoaXMuX2lnbm9yZVlPdXRsaWVycz10LHRoaXMudXBkYXRlU3BlY2lhbERhdGFzZXRzKCksdGhpcy55U2NhbGUuaWdub3JlT3V0bGllcih0KSx0aGlzLnJlc2V0WURvbWFpbigpKX1nZXRWYWx1ZXNGb3JZQXhpc0RvbWFpbkNvbXB1dGUoKXtjb25zdCB0PXRoaXMuZ2V0QWNjZXNzb3JzRm9yQ29tcHV0aW5nWVJhbmdlKCk7cmV0dXJuIFNlLmV4cG9ydHMuZmxhdHRlbkRlZXAodGhpcy5kYXRhc2V0cy5tYXAoKGU9PnQubWFwKCh0PT5lLmRhdGEoKS5tYXAoKG49PnQobiwtMSxlKSkpKSkpKSkuZmlsdGVyKGlzRmluaXRlKX11cGRhdGVTcGVjaWFsRGF0YXNldHMoKXtjb25zdCB0PXRoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpO2xldCBlPXRoaXMuZGF0YXNldHMubWFwKChlPT57bGV0IG49bnVsbCxpPWUuZGF0YSgpLmZpbHRlcigobj0+IWlzTmFOKHQobiwtMSxlKSkpKTtyZXR1cm4gaS5sZW5ndGg+MCYmKG49aVtpLmxlbmd0aC0xXSxuLm5hbWU9ZS5tZXRhZGF0YSgpLm5hbWUsbi5yZWxhdGl2ZT1UVHQobiwwLGUpKSxufSkpLmZpbHRlcigodD0+bnVsbCE9dCkpO3RoaXMubGFzdFBvaW50c0RhdGFzZXQuZGF0YShlKSx0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCYmdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cy5tYXAodGhpcy5jcmVhdGVTYW1wbGVkRGF0YXNldEZvck1hcmtlcnMpKTtsZXQgbj1TZS5leHBvcnRzLmZsYXR0ZW4odGhpcy5kYXRhc2V0cy5tYXAoKGU9PntsZXQgbj1udWxsLGk9ZS5kYXRhKCkscj0wO2Zvcig7cjxpLmxlbmd0aCYmbnVsbD09bjspaXNOYU4odChpW3JdLC0xLGUpKXx8KG49dChpW3JdLC0xLGUpKSxyKys7bnVsbD09biYmKG49MCk7bGV0IG89W107Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKylpc05hTih0KGlbcl0sLTEsZSkpPyhpW3JdLm5hbWU9ZS5tZXRhZGF0YSgpLm5hbWUsaVtyXS5kaXNwbGF5WT1uLGlbcl0ucmVsYXRpdmU9VFR0KGlbcl0sMCxlKSxvLnB1c2goaVtyXSkpOm49dChpW3JdLC0xLGUpO3JldHVybiBvfSkpKTt0aGlzLm5hbkRhdGFzZXQuZGF0YShuKX1yZXNldERvbWFpbigpe3RoaXMucmVzZXRYRG9tYWluKCksdGhpcy5yZXNldFlEb21haW4oKX1yZXNldFhEb21haW4oKXtsZXQgdDtpZihudWxsIT10aGlzLl9kZWZhdWx0WFJhbmdlKXQ9dGhpcy5fZGVmYXVsdFhSYW5nZTtlbHNle2NvbnN0IGU9dGhpcy54U2NhbGU7ZS5fZG9tYWluTWluPW51bGwsZS5fZG9tYWluTWF4PW51bGwsdD1lLl9nZXRFeHRlbnQoKX10aGlzLnhTY2FsZS5kb21haW4odCl9cmVzZXRZRG9tYWluKCl7bnVsbCE9dGhpcy5fZGVmYXVsdFlSYW5nZT90aGlzLnlTY2FsZS5kb21haW4odGhpcy5fZGVmYXVsdFlSYW5nZSk6KHRoaXMueVNjYWxlLmF1dG9Eb21haW4oKSx0aGlzLnlTY2FsZS5kb21haW4odGhpcy55U2NhbGUuZG9tYWluKCkpKX1nZXRBY2Nlc3NvcnNGb3JDb21wdXRpbmdZUmFuZ2UoKXtjb25zdCB0PVt0aGlzLmdldFlBeGlzQWNjZXNzb3IoKV07cmV0dXJuIHRoaXMuZmlsbEFyZWEmJnQucHVzaCh0aGlzLmZpbGxBcmVhLmxvd2VyQWNjZXNzb3IsdGhpcy5maWxsQXJlYS5oaWdoZXJBY2Nlc3NvciksdH1nZXRZQXhpc0FjY2Vzc29yKCl7cmV0dXJuIHRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcn1jcmVhdGVUb29sdGlwSW50ZXJhY3Rpb24odCl7Y29uc3QgZT1uZXcgT1R0LG49KCk9PntlLmVuYWJsZWQoITEpLHRoaXMuaGlkZVRvb2x0aXBzKCl9LGk9KCk9PmUuZW5hYmxlZCghMCk7cmV0dXJuIHQub25QYW5TdGFydChuKSx0Lm9uRHJhZ1pvb21TdGFydChuKSx0Lm9uUGFuRW5kKGkpLHQub25EcmFnWm9vbUVuZChpKSx0Lm9uU2Nyb2xsWm9vbSgoKCk9PnRoaXMudXBkYXRlVG9vbHRpcENvbnRlbnQodGhpcy5fbGFzdE1vdXNlUG9zaXRpb24pKSksZS5vblBvaW50ZXJNb3ZlKCh0PT57dGhpcy5fbGFzdE1vdXNlUG9zaXRpb249dCx0aGlzLnVwZGF0ZVRvb2x0aXBDb250ZW50KHQpfSkpLGUub25Qb2ludGVyRXhpdCgoKCk9PnRoaXMuaGlkZVRvb2x0aXBzKCkpKSxlfXVwZGF0ZVRvb2x0aXBDb250ZW50KHQpe3RoaXMubGluZVBsb3QmJih3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lKSx0aGlzLl90b29sdGlwVXBkYXRlQW5pbWF0aW9uRnJhbWU9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9PntsZXQgZT17eDp0LngseTp0LnksZGF0dW06bnVsbCxkYXRhc2V0Om51bGx9LG49dGhpcy5ncmlkbGluZXMuY29udGVudCgpLm5vZGUoKS5nZXRCQm94KCksaT10aGlzLmxpbmVQbG90LmRhdGFzZXRzKCkubWFwKCh0PT50aGlzLmZpbmRDbG9zZXN0UG9pbnQoZSx0KSkpLmZpbHRlcihCb29sZWFuKSxyPXJPLlV0aWxzLkRPTS5pbnRlcnNlY3RzQkJveCxvPWkuZmlsdGVyKCh0PT5yKHQueCx0Lnksbil8fGlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IodC5kYXR1bSwwLHQuZGF0YXNldCkpKSksYT1vLmZpbHRlcigodD0+IWlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IodC5kYXR1bSwwLHQuZGF0YXNldCkpKSk7aWYoMCE9PWkubGVuZ3RoKXt0aGlzLnNjYXR0ZXJQbG90LmF0dHIoImRpc3BsYXkiLCJub25lIik7Y29uc3QgdD10aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQuY29udGVudCgpLnNlbGVjdEFsbCgiLnBvaW50IikuZGF0YShhLCh0PT50LmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKSk7dC5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuY2xhc3NlZCgicG9pbnQiLCEwKSx0LmF0dHIoInIiLDQpLmF0dHIoImN4IiwodD0+dC54KSkuYXR0cigiY3kiLCh0PT50LnkpKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZpbGwiLCh0PT50aGlzLmNvbG9yU2NhbGUuc2NhbGUodC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpKSx0LmV4aXQoKS5yZW1vdmUoKSx0aGlzLmRyYXdUb29sdGlwcyhvLGUsdGhpcy50b29sdGlwQ29sdW1ucyl9ZWxzZSB0aGlzLmhpZGVUb29sdGlwcygpfSkpKX1oaWRlVG9vbHRpcHMoKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lKSx0aGlzLnRvb2x0aXAuaGlkZSgpLHRoaXMuc2NhdHRlclBsb3QuYXR0cigiZGlzcGxheSIsImJsb2NrIiksdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LmNvbnRlbnQoKS5zZWxlY3RBbGwoIi5wb2ludCIpLnJlbW92ZSgpfXNldHVwVG9vbHRpcHModCl7dC5vbkRldGFjaCgoKCk9Pnt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5kZXRhY2hGcm9tKHQpLHRoaXMudG9vbHRpcEludGVyYWN0aW9uLmVuYWJsZWQoITEpfSkpLHQub25BbmNob3IoKCgpPT57dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uYXR0YWNoVG8odCksdGhpcy50b29sdGlwSW50ZXJhY3Rpb24uZW5hYmxlZCghMCl9KSl9ZHJhd1Rvb2x0aXBzKHQsZSxuKXtpZighdC5sZW5ndGgpcmV0dXJuIHZvaWQgdGhpcy50b29sdGlwLmhpZGUoKTtjb25zdHtjb2xvclNjYWxlOml9PXRoaXM7bj1be3RpdGxlOiIiLHN0YXRpYzohMSxldmFsVHlwZTpvQ3QuRE9NLGV2YWx1YXRlKHQpe3JldHVybiBTdSh0aGlzKS5zZWxlY3QoInNwYW4iKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCgpPT5pLnNjYWxlKHQuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpKSksIiJ9LGVudGVyKHQpe1N1KHRoaXMpLmFwcGVuZCgic3BhbiIpLmNsYXNzZWQoInN3YXRjaCIsITApLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwoKCk9Pmkuc2NhbGUodC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpKX19LC4uLm5dO2NvbnN0IHI9dD0+TWF0aC5wb3codC54LWUueCwyKStNYXRoLnBvdyh0LnktZS55LDIpLG89U2UuZXhwb3J0cy5taW4odC5tYXAocikpLGE9dGhpcy5zbW9vdGhpbmdFbmFibGVkP3RoaXMuc21vb3RoZWRBY2Nlc3Nvcjp0aGlzLnlWYWx1ZUFjY2Vzc29yO3Q9ImFzY2VuZGluZyI9PT10aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kP1NlLmV4cG9ydHMuc29ydEJ5KHQsKHQ9PmEodC5kYXR1bSwtMSx0LmRhdGFzZXQpKSk6ImRlc2NlbmRpbmciPT09dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD9TZS5leHBvcnRzLnNvcnRCeSh0LCh0PT5hKHQuZGF0dW0sLTEsdC5kYXRhc2V0KSkpLnJldmVyc2UoKToibmVhcmVzdCI9PT10aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kP1NlLmV4cG9ydHMuc29ydEJ5KHQscik6dC5zbGljZSgwKS5yZXZlcnNlKCk7Y29uc3Qgcz10aGlzLGw9U3UodGhpcy50b29sdGlwLmNvbnRlbnQoKSkuc2VsZWN0KCJ0YWJsZSIpLGM9bC5zZWxlY3QoInRoZWFkIikuc2VsZWN0QWxsKCJ0aCIpLmRhdGEobiwoKHQsZSxuKT0+dC50aXRsZSkpO2MuZW50ZXIoKS5hcHBlbmQoInRoIikudGV4dCgodD0+dC50aXRsZSkpLm5vZGVzKCksYy5leGl0KCkucmVtb3ZlKCk7Y29uc3QgdT1sLnNlbGVjdCgidGJvZHkiKS5zZWxlY3RBbGwoInRyIikuZGF0YSh0LCgodCxlLG4pPT50LmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKSk7dS5jbGFzc2VkKCJkaXN0YW50IiwodD0+e2xldCBuPXQuZGF0YXNldC5kYXRhKClbMF0saT1TZS5leHBvcnRzLmxhc3QodC5kYXRhc2V0LmRhdGEoKSkscj10aGlzLnhTY2FsZS5zY2FsZSh0aGlzLnhBY2Nlc3NvcihuLDAsdC5kYXRhc2V0KSksbz10aGlzLnhTY2FsZS5zY2FsZSh0aGlzLnhBY2Nlc3NvcihpLDAsdC5kYXRhc2V0KSksYT10aGlzLnNtb290aGluZ0VuYWJsZWQ/dC5kYXR1bS5zbW9vdGhlZDp0aGlzLnlWYWx1ZUFjY2Vzc29yKHQuZGF0dW0sMCx0LmRhdGFzZXQpO3JldHVybiBlLng8cnx8ZS54Pm98fGlzTmFOKGEpfSkpLmNsYXNzZWQoImNsb3Nlc3QiLCh0PT5yKHQpPT09bykpLmVhY2goKGZ1bmN0aW9uKHQpe3MuZHJhd1Rvb2x0aXBSb3codGhpcyxuLHQpfSkpLm9yZGVyKCksdS5leGl0KCkucmVtb3ZlKCksdS5lbnRlcigpLmFwcGVuZCgidHIiKS5lYWNoKChmdW5jdGlvbih0KXtzLmRyYXdUb29sdGlwUm93KHRoaXMsbix0KX0pKS5ub2RlcygpLHRoaXMudG9vbHRpcC51cGRhdGVBbmRQb3NpdGlvbih0aGlzLnRhcmdldFNWRy5ub2RlKCkpfWRyYXdUb29sdGlwUm93KHQsZSxuKXtjb25zdCBpPXRoaXMscj1TdSh0KS5zZWxlY3RBbGwoInRkIikuZGF0YShlKTtyLmVhY2goKGZ1bmN0aW9uKHQpe3Quc3RhdGljfHxpLmRyYXdUb29sdGlwQ29sdW1uLmNhbGwoaSx0aGlzLHQsbil9KSksci5leGl0KCkucmVtb3ZlKCksci5lbnRlcigpLmFwcGVuZCgidGQiKS5lYWNoKChmdW5jdGlvbih0KXsiZW50ZXIiaW4gdCYmdC5lbnRlciYmdC5lbnRlci5jYWxsKHRoaXMsbiksaS5kcmF3VG9vbHRpcENvbHVtbi5jYWxsKGksdGhpcyx0LG4pfSkpfWRyYXdUb29sdGlwQ29sdW1uKHQsZSxuKXtjb25zdHtzbW9vdGhpbmdFbmFibGVkOml9PXRoaXM7ImV2YWxUeXBlImluIGUmJmUuZXZhbFR5cGU9PW9DdC5ET00/ZS5ldmFsdWF0ZS5jYWxsKHQsbix7c21vb3RoaW5nRW5hYmxlZDppfSk6U3UodCkudGV4dChlLmV2YWx1YXRlLmNhbGwodCxuLHtzbW9vdGhpbmdFbmFibGVkOml9KSl9ZmluZENsb3Nlc3RQb2ludCh0LGUpe2NvbnN0IG49ZS5kYXRhKCkubWFwKCgodCxuKT0+dGhpcy54U2NhbGUuc2NhbGUodGhpcy54QWNjZXNzb3IodCxuLGUpKSkpO2xldCBpPVNlLmV4cG9ydHMuc29ydGVkSW5kZXgobix0LngpO2lmKDA9PW4ubGVuZ3RoKXJldHVybiBudWxsO2k9PT1uLmxlbmd0aD9pLT0xOjAhPT1pJiYoaT1NYXRoLmFicyhuW2ktMV0tdC54KTxNYXRoLmFicyhuW2ldLXQueCk/aS0xOmkpO2NvbnN0IHI9ZS5kYXRhKClbaV0sbz10aGlzLnNtb290aGluZ0VuYWJsZWQ/dGhpcy5zbW9vdGhlZEFjY2Vzc29yKHIsaSxlKTp0aGlzLnlWYWx1ZUFjY2Vzc29yKHIsaSxlKTtyZXR1cm57eDpuW2ldLHk6dGhpcy55U2NhbGUuc2NhbGUobyksZGF0dW06cixkYXRhc2V0OmV9fXJlc21vb3RoRGF0YXNldCh0KXtsZXQgZT10LmRhdGEoKTtjb25zdCBuPXRoaXMuc21vb3RoaW5nV2VpZ2h0O2xldCBpPWUubGVuZ3RoPjA/MDpOYU4scj0wO2NvbnN0IG89ZS5tYXAoKChlLG4pPT50aGlzLnlWYWx1ZUFjY2Vzc29yKGUsbix0KSkpLGE9by5ldmVyeSgodD0+dD09b1swXSkpO2UuZm9yRWFjaCgoKHQsZSk9Pntjb25zdCBzPW9bZV07aWYoYXx8IU51bWJlci5pc0Zpbml0ZShzKSl0LnNtb290aGVkPXM7ZWxzZXtpPWkqbisoMS1uKSpzLHIrKztsZXQgZT0xOzEhPT1uJiYoZT0xLU1hdGgucG93KG4scikpLHQuc21vb3RoZWQ9aS9lfX0pKX1nZXREYXRhc2V0KHQpe3JldHVybiB2b2lkIDA9PT10aGlzLm5hbWUyZGF0YXNldHNbdF0mJih0aGlzLm5hbWUyZGF0YXNldHNbdF09bmV3IHJPLkRhdGFzZXQoW10se25hbWU6dCxtZXRhOm51bGx9KSksdGhpcy5uYW1lMmRhdGFzZXRzW3RdfXN0YXRpYyBnZXRZU2NhbGVGcm9tVHlwZSh0KXtpZih0PT09YUN0LkxPRylyZXR1cm4gbmV3IG5DdDtpZih0PT09YUN0LkxJTkVBUilyZXR1cm4gbmV3IFpUdDt0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB5U2NhbGUgdHlwZSAiK3QpfXNldFZpc2libGVTZXJpZXModCl7dGhpcy5kaXNhYmxlQ2hhbmdlcygpLCh0PXQuc29ydCgpKS5yZXZlcnNlKCksdGhpcy5zZXJpZXNOYW1lcz10fWRpc2FibGVDaGFuZ2VzKCl7dGhpcy5kaXJ0eURhdGFzZXRzLnNpemV8fCh0aGlzLmxpbmVQbG90LmRhdGFzZXRzKFtdKSx0aGlzLnNtb290aExpbmVQbG90JiZ0aGlzLnNtb290aExpbmVQbG90LmRhdGFzZXRzKFtdKSx0aGlzLm1hcmdpbkFyZWFQbG90JiZ0aGlzLm1hcmdpbkFyZWFQbG90LmRhdGFzZXRzKFtdKSl9Y29tbWl0Q2hhbmdlcygpe3RoaXMuZGF0YXNldHM9dGhpcy5zZXJpZXNOYW1lcy5tYXAoKHQ9PnRoaXMuZ2V0RGF0YXNldCh0KSkpLFsuLi50aGlzLmRpcnR5RGF0YXNldHNdLmZvckVhY2goKHQ9Pnt0aGlzLnNtb290aGluZ0VuYWJsZWQmJnRoaXMucmVzbW9vdGhEYXRhc2V0KHRoaXMuZ2V0RGF0YXNldCh0KSl9KSksdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSx0aGlzLmxpbmVQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMuc21vb3RoaW5nRW5hYmxlZCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSx0aGlzLm1hcmdpbkFyZWFQbG90JiZ0aGlzLm1hcmdpbkFyZWFQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpLHRoaXMuZGlydHlEYXRhc2V0cy5jbGVhcigpfWNyZWF0ZVNhbXBsZWREYXRhc2V0Rm9yTWFya2Vycyh0KXtjb25zdCBlPXQuZGF0YSgpO2lmKGUubGVuZ3RoPD0yMClyZXR1cm4gdDtjb25zdCBuPU1hdGguY2VpbChlLmxlbmd0aC8yMCksaT1uZXcgQXJyYXkoTWF0aC5mbG9vcihlLmxlbmd0aC9uKSk7Zm9yKGxldCB0PTAscj0wO3Q8aS5sZW5ndGg7dCsrLHIrPW4paVt0XT1lW3JdO3JldHVybiBuZXcgck8uRGF0YXNldChpLHQubWV0YWRhdGEoKSl9c2V0U2VyaWVzRGF0YSh0LGUpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0aGlzLmdldERhdGFzZXQodCkuZGF0YShlKSx0aGlzLmRpcnR5RGF0YXNldHMuYWRkKHQpfXNldFNlcmllc01ldGFkYXRhKHQsZSl7dGhpcy5kaXNhYmxlQ2hhbmdlcygpLHRoaXMuZ2V0RGF0YXNldCh0KS5tZXRhZGF0YShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXREYXRhc2V0KHQpLm1ldGFkYXRhKCkpLHttZXRhOmV9KSksdGhpcy5kaXJ0eURhdGFzZXRzLmFkZCh0KX1zbW9vdGhpbmdVcGRhdGUodCl7dGhpcy5zbW9vdGhpbmdXZWlnaHQ9dCx0aGlzLmRhdGFzZXRzLmZvckVhY2goKHQ9PnRoaXMucmVzbW9vdGhEYXRhc2V0KHQpKSksdGhpcy5zbW9vdGhpbmdFbmFibGVkfHwodGhpcy5saW5lUGxvdC5hZGRDbGFzcygiZ2hvc3QiKSx0aGlzLnNjYXR0ZXJQbG90LnkodGhpcy5zbW9vdGhlZEFjY2Vzc29yLHRoaXMueVNjYWxlKSx0aGlzLnNtb290aGluZ0VuYWJsZWQ9ITAsdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LnkodGhpcy5nZXRZQXhpc0FjY2Vzc29yKCksdGhpcy55U2NhbGUpLHRoaXMudXBkYXRlU3BlY2lhbERhdGFzZXRzKCl9c21vb3RoaW5nRGlzYWJsZSgpe3RoaXMuc21vb3RoaW5nRW5hYmxlZCYmKHRoaXMubGluZVBsb3QucmVtb3ZlQ2xhc3MoImdob3N0IiksdGhpcy5zY2F0dGVyUGxvdC55KHRoaXMueVZhbHVlQWNjZXNzb3IsdGhpcy55U2NhbGUpLHRoaXMuc21vb3RoTGluZVBsb3QuZGF0YXNldHMoW10pLHRoaXMuc21vb3RoaW5nRW5hYmxlZD0hMSx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpKSx0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCYmdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QueSh0aGlzLmdldFlBeGlzQWNjZXNzb3IoKSx0aGlzLnlTY2FsZSl9c2V0Q29sb3JTY2FsZSh0KXt0aGlzLmNvbG9yU2NhbGU9dH1zZXRUb29sdGlwQ29sdW1ucyh0KXt0aGlzLnRvb2x0aXBDb2x1bW5zPXR9c2V0VG9vbHRpcFNvcnRpbmdNZXRob2QodCl7dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD10fXJlbmRlclRvKHQpe3RoaXMudGFyZ2V0U1ZHPXQsdGhpcy5vdXRlci5yZW5kZXJUbyh0KSxudWxsIT10aGlzLl9kZWZhdWx0WFJhbmdlJiZ0aGlzLnJlc2V0WERvbWFpbigpLG51bGwhPXRoaXMuX2RlZmF1bHRZUmFuZ2UmJnRoaXMucmVzZXRZRG9tYWluKCksdGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dEluUmFmKCl9cmVkcmF3KCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlZHJhd1JhZiksdGhpcy5fcmVkcmF3UmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57dGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dCgpLHRoaXMub3V0ZXIucmVkcmF3KCl9KSl9bWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9pbnZhbGlkYXRlTGF5b3V0UmFmKSx0aGlzLl9pbnZhbGlkYXRlTGF5b3V0UmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57dGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dCgpfSkpfW1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0KCl7aWYodGhpcy5fbGFzdERyYXdCQm94KXtjb25zdHt3aWR0aDp0fT10aGlzLl9sYXN0RHJhd0JCb3gse3dpZHRoOmV9PXRoaXMudGFyZ2V0U1ZHLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTswPT10JiZ0PGUmJnRoaXMub3V0ZXIuaW52YWxpZGF0ZUNhY2hlKCl9dGhpcy5fbGFzdERyYXdCQm94PXRoaXMudGFyZ2V0U1ZHLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1kZXN0cm95KCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlZHJhd1JhZiksd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWYpLHRoaXMub3V0ZXImJnRoaXMub3V0ZXIuZGVzdHJveSgpfW9uQW5jaG9yKHQpe3RoaXMub3V0ZXImJnRoaXMub3V0ZXIub25BbmNob3IodCl9aXNEYXRhRml0VG9Eb21haW4oKXtyZXR1cm4gdCh0aGlzLnhBeGlzLmdldFNjYWxlKCkpJiZ0KHRoaXMueUF4aXMuZ2V0U2NhbGUoKSk7ZnVuY3Rpb24gdCh0KXtjb25zdCBlPXQuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKSxuPXQuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQoKTtyZXR1cm4gblswXT09PWVbMF0mJm5bMV09PT1lWzFdfX19IShmdW5jdGlvbih0KXt0LkdST1VQPSJHIix0LkRJVj0iRElWIix0LlNWRz0iU1ZHIix0LlRFWFQ9IlRFWFQifSkoc0N0fHwoc0N0PXt9KSk7Y2xhc3MgdUN0IGV4dGVuZHMgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy51bmlxdWVJZD0wLHRoaXMucm9vdD10fWV4cG9ydEFzU3RyaW5nKCl7Y29uc3QgdD10aGlzLmNvbnZlcnQodGhpcy5yb290KTtpZighdClyZXR1cm4iIjtjb25zdCBlPXRoaXMuY3JlYXRlUm9vdFN2ZygpO3JldHVybiBlLmFwcGVuZENoaWxkKHQpLGUub3V0ZXJIVE1MfWNyZWF0ZVVuaXF1ZUlkKHQpe3JldHVybmAke3R9XyR7dGhpcy51bmlxdWVJZCsrfWB9Z2V0U2l6ZSgpe3JldHVybiB0aGlzLnJvb3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y3JlYXRlUm9vdFN2Zygpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3ZnIiksZT10aGlzLmdldFNpemUoKTtyZXR1cm4gdC5zZXRBdHRyaWJ1dGVOUygic3ZnIiwidmlld0JveCIsYDAgMCAke2Uud2lkdGh9ICR7ZS5oZWlnaHR9YCksdC5zZXRBdHRyaWJ1dGUoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKSx0fWNvbnZlcnQodCl7bGV0IGU9bnVsbDtjb25zdCBuPXQubm9kZU5hbWUudG9VcHBlckNhc2UoKTtpZih0Lm5vZGVUeXBlIT1Ob2RlLkVMRU1FTlRfTk9ERXx8biE9c0N0LkRJViYmbiE9c0N0LlNWRyllPXQuY2xvbmVOb2RlKCk7ZWxzZXtlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoc0N0LkdST1VQKTtjb25zdCBuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLGk9cGFyc2VJbnQobi5sZWZ0LDEwKSxyPXBhcnNlSW50KG4udG9wLDEwKTtpZihpfHxyKXtjb25zdCB0PXRoaXMuY3JlYXRlVW5pcXVlSWQoImNsaXAiKTtlLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7aX0sICR7cn0pYCksZS5zZXRBdHRyaWJ1dGUoImNsaXAtcGF0aCIsYHVybCgjJHt0fSlgKTtjb25zdCBvPXBhcnNlSW50KG4ud2lkdGgsMTApLGE9cGFyc2VJbnQobi5oZWlnaHQsMTApLHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicmVjdCIpO3Muc2V0QXR0cmlidXRlKCJ3aWR0aCIsU3RyaW5nKG8pKSxzLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixTdHJpbmcoYSkpO2NvbnN0IGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJzdmciLCJjbGlwUGF0aCIpO2wuaWQ9dCxsLmFwcGVuZENoaWxkKHMpLGUuYXBwZW5kQ2hpbGQobCl9fXJldHVybiBBcnJheS5mcm9tKHQuY2hpbGROb2RlcykubWFwKCh0PT50aGlzLmNvbnZlcnQodCkpKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaCgodD0+ZS5hcHBlbmRDaGlsZCh0KSkpLGUubm9kZU5hbWUudG9VcHBlckNhc2UoKT09c0N0LkdST1VQJiYhZS5oYXNDaGlsZE5vZGVzKCl8fHRoaXMuc2hvdWxkT21pdE5vZGUodCk/bnVsbDp0aGlzLnN0cmlwQ2xhc3ModGhpcy50cmFuc2ZlclN0eWxlKHQsZSkpfXN0cmlwQ2xhc3ModCl7cmV0dXJuIHQubm9kZVR5cGU9PU5vZGUuRUxFTUVOVF9OT0RFJiZ0LnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKSx0fXRyYW5zZmVyU3R5bGUodCxlKXtpZihlLm5vZGVUeXBlIT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4gZTtjb25zdCBuPWUsaT1lLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkscj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTtyZXR1cm4gaT09c0N0LlRFWFQmJk9iamVjdC5hc3NpZ24obi5zdHlsZSx7Zm9udEZhbWlseTpyLmZvbnRGYW1pbHksZm9udFNpemU6ci5mb250U2l6ZSxmb250V2VpZ2h0OnIuZm9udFdlaWdodH0pLGkhPXNDdC5HUk9VUCYmKG4uc2V0QXR0cmlidXRlKCJmaWxsIixyLmZpbGwpLG4uc2V0QXR0cmlidXRlKCJzdHJva2UiLHIuc3Ryb2tlKSxuLnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIixyLnN0cm9rZVdpZHRoKSksIjEiIT1yLm9wYWNpdHkmJm4uc2V0QXR0cmlidXRlKCJvcGFjaXR5IixyLm9wYWNpdHkpLGV9c2hvdWxkT21pdE5vZGUodCl7cmV0dXJuITF9fXtzaG91bGRPbWl0Tm9kZSh0KXtyZXR1cm4gdC5ub2RlVHlwZT09Tm9kZS5FTEVNRU5UX05PREUmJnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJzY2F0dGVyLXBsb3QiKX19ZWwoe21vZHVsZU5hbWU6InZ6LXBhbi16b29tLXN0eWxlIixzdHlsZUNvbnRlbnQ6IlxuICAgIC5oZWxwIHtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBhbmltYXRpb24tZGVsYXk6IDFzO1xuICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAxcztcbiAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYWRlLW91dDtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzAsIDMwLCAzMCwgMC42KTtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgbGVmdDogMDtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogMDtcbiAgICAgIHRvcDogMDtcbiAgICB9XG5cbiAgICAuaGVscCA+IHNwYW4ge1xuICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICB9XG5cbiAgICBAa2V5ZnJhbWVzIGZhZGUtb3V0IHtcbiAgICAgIDAlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgIH1cblxuICAgICAgMTAwJSB7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB9XG4gICAgfVxuICAifSk7Y29uc3QgaEN0PXdUdCg0KSxkQ3Q9dD0+aXNOYU4odCk/Ik5hTiI6aEN0KHQpLHBDdD1be3RpdGxlOiJOYW1lIixldmFsdWF0ZTp0PT50LmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlNtb290aGVkIixldmFsdWF0ZSh0LGUpe2NvbnN0e3Ntb290aGluZ0VuYWJsZWQ6bn09ZTtyZXR1cm4gZEN0KG4/dC5kYXR1bS5zbW9vdGhlZDp0LmRhdHVtLnNjYWxhcil9fSx7dGl0bGU6IlZhbHVlIixldmFsdWF0ZTp0PT5kQ3QodC5kYXR1bS5zY2FsYXIpfSx7dGl0bGU6IlN0ZXAiLGV2YWx1YXRlOnQ9PlNUdCh0LmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOnQ9PkVUdCh0LmRhdHVtLndhbGxfdGltZSl9LHt0aXRsZToiUmVsYXRpdmUiLGV2YWx1YXRlOnQ9PkNUdChUVHQodC5kYXR1bSwwLHQuZGF0YXNldCkpfV07bGV0IGZDdD1jbGFzcyBleHRlbmRzKGVyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29sb3JTY2FsZT0obmV3IHJPLlNjYWxlcy5Db2xvcikucmFuZ2UoZ0Euc2xpY2UoMCkpLHRoaXMuc21vb3RoaW5nRW5hYmxlZD0hMSx0aGlzLnNtb290aGluZ1dlaWdodD0uNix0aGlzLnhUeXBlPW51bGwsdGhpcy54Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kPW51bGwsdGhpcy55VmFsdWVBY2Nlc3Nvcj10PT50LnNjYWxhcix0aGlzLnRvb2x0aXBDb2x1bW5zPXBDdCx0aGlzLnlTY2FsZVR5cGU9YUN0LkxJTkVBUix0aGlzLmlnbm9yZVlPdXRsaWVycz0hMSx0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPSJkZWZhdWx0Iix0aGlzLnRvb2x0aXBQb3NpdGlvbj16VHQuQk9UVE9NLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZT17fSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLmNoYXJ0ZGl2LCEwKX1hdHRhY2hlZCgpe2NvbnN0IHQ9e2NhcHR1cmU6ITAscGFzc2l2ZTohMH07dGhpcy5fbGlzdGVuKHRoaXMsIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZURvd24uYmluZCh0aGlzKSx0KSx0aGlzLl9saXN0ZW4odGhpcywibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHdpbmRvdywia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHdpbmRvdywia2V5dXAiLHRoaXMuX29uS2V5VXAuYmluZCh0aGlzKSx0KX1kZXRhY2hlZCgpe3RoaXMuY2FuY2VsQXN5bmModGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkKSx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LmRlc3Ryb3koKSx0aGlzLl9jaGFydD12b2lkIDApLHRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKCgoe25vZGU6dCxldmVudE5hbWU6ZSxmdW5jOm4sb3B0aW9uOml9KT0+e3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4saSl9KSksdGhpcy5fbGlzdGVuZXJzLmNsZWFyKCkpfV9saXN0ZW4odCxlLG4saT17fSl7dGhpcy5fbGlzdGVuZXJzfHwodGhpcy5fbGlzdGVuZXJzPW5ldyBTZXQpLHRoaXMuX2xpc3RlbmVycy5hZGQoe25vZGU6dCxldmVudE5hbWU6ZSxmdW5jOm4sb3B0aW9uOml9KSx0LmFkZEV2ZW50TGlzdGVuZXIoZSxuLGkpfV9vbktleURvd24odCl7dGhpcy50b2dnbGVDbGFzcygicGFua2V5IixsQ3QuaXNQYW5LZXkodCkpfV9vbktleVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsbEN0LmlzUGFuS2V5KHQpKX1fb25Nb3VzZURvd24odCl7dGhpcy50b2dnbGVDbGFzcygibW91c2Vkb3duIiwhMCl9X29uTW91c2VVcCh0KXt0aGlzLnRvZ2dsZUNsYXNzKCJtb3VzZWRvd24iLCExKX1pc0RhdGFGaXRUb0RvbWFpbigpe3JldHVybiF0aGlzLl9jaGFydHx8dGhpcy5fY2hhcnQuaXNEYXRhRml0VG9Eb21haW4oKX1zZXRWaXNpYmxlU2VyaWVzKHQpe1NlLmV4cG9ydHMuaXNFcXVhbCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUsdCl8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCl9c2V0U2VyaWVzRGF0YSh0LGUpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1lLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQsZSl9c2V0U2VyaWVzTWV0YWRhdGEodCxlKXt0aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdPWUsdGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc01ldGFkYXRhKHQsZSl9Y29tbWl0Q2hhbmdlcygpe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5jb21taXRDaGFuZ2VzKCl9cmVzZXREb21haW4oKXt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQucmVzZXREb21haW4oKX1yZWRyYXcoKXt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQucmVkcmF3KCl9X21ha2VDaGFydCgpe251bGwhPT10aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGwpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD10aGlzLmFzeW5jKChmdW5jdGlvbigpe3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsO2xldCB0PXRoaXMueENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZDtpZih0aGlzLnhUeXBlfHx0P3RoaXMueFR5cGUmJih0PSgpPT5BVHQodGhpcy54VHlwZSkpOnQ9TVR0LHQmJnRoaXMueVZhbHVlQWNjZXNzb3ImJnRoaXMudG9vbHRpcENvbHVtbnMpe3ZhciBlPW5ldyBjQ3QodCx0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlVHlwZSx0aGlzLmNvbG9yU2NhbGUsdGhpcy4kLnRvb2x0aXAsdGhpcy50b29sdGlwQ29sdW1ucyx0aGlzLmZpbGxBcmVhLHRoaXMuZGVmYXVsdFhSYW5nZSx0aGlzLmRlZmF1bHRZUmFuZ2UsdGhpcy5zeW1ib2xGdW5jdGlvbix0aGlzLnhBeGlzRm9ybWF0dGVyKSxuPVN1KHRoaXMuJC5jaGFydGRpdik7ZS5yZW5kZXJUbyhuKSx0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuZGVzdHJveSgpLHRoaXMuX2NoYXJ0PWUsdGhpcy5fY2hhcnQub25BbmNob3IoKCgpPT50aGlzLmZpcmUoImNoYXJ0LWF0dGFjaGVkIikpKX19KSwzNTApfV9yZWxvYWRGcm9tQ2FjaGUoKXt0aGlzLl9jaGFydCYmKHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5mb3JFYWNoKCh0PT57dGhpcy5fY2hhcnQuc2V0U2VyaWVzRGF0YSh0LHRoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XXx8W10pfSkpLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5maWx0ZXIoKHQ9PnRoaXMuX3Nlcmllc01ldGFkYXRhQ2FjaGVbdF0pKS5mb3JFYWNoKCh0PT57dGhpcy5fY2hhcnQuc2V0U2VyaWVzTWV0YWRhdGEodCx0aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdKX0pKSx0aGlzLl9jaGFydC5zZXRWaXNpYmxlU2VyaWVzKHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZSksdGhpcy5fY2hhcnQuY29tbWl0Q2hhbmdlcygpKX1fc21vb3RoaW5nQ2hhbmdlZCgpe3RoaXMuX2NoYXJ0JiYodGhpcy5zbW9vdGhpbmdFbmFibGVkP3RoaXMuX2NoYXJ0LnNtb290aGluZ1VwZGF0ZSh0aGlzLnNtb290aGluZ1dlaWdodCk6dGhpcy5fY2hhcnQuc21vb3RoaW5nRGlzYWJsZSgpKX1fb3V0bGllcnNDaGFuZ2VkKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0Lmlnbm9yZVlPdXRsaWVycyh0aGlzLmlnbm9yZVlPdXRsaWVycyl9X2NvbG9yU2NhbGVDaGFuZ2VkKCl7dGhpcy5fY2hhcnQmJih0aGlzLl9jaGFydC5zZXRDb2xvclNjYWxlKHRoaXMuY29sb3JTY2FsZSksdGhpcy5fY2hhcnQucmVkcmF3KCkpfV90b29sdGlwQ29sdW1uc0NoYW5nZWQoKXt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuc2V0VG9vbHRpcENvbHVtbnModGhpcy50b29sdGlwQ29sdW1ucyl9X3Rvb2x0aXBTb3J0aW5nTWV0aG9kQ2hhbmdlZCgpe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRUb29sdGlwU29ydGluZ01ldGhvZCh0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kKX1nZXRFeHBvcnRlcigpe3JldHVybiBuZXcgdUN0KHRoaXMuJC5jaGFydGRpdil9fTtmQ3QudGVtcGxhdGU9X2VgCiAgICA8ZGl2IGlkPSJjaGFydGRpdiI+PC9kaXY+CiAgICA8dnotY2hhcnQtdG9vbHRpcAogICAgICBpZD0idG9vbHRpcCIKICAgICAgcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgIGNvbnRlbnQtY29tcG9uZW50LW5hbWU9InZ6LWxpbmUtY2hhcnQtdG9vbHRpcCIKICAgID48L3Z6LWNoYXJ0LXRvb2x0aXA+CiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZ6LXBhbi16b29tLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgICBkaXYgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgICNjaGFydGRpdiAubWFpbiB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICAgIGN1cnNvcjogY3Jvc3NoYWlyOwogICAgICB9CgogICAgICA6aG9zdCgucGFua2V5KSAjY2hhcnRkaXYgOm5vdCguZHJhZy16b29taW5nKSAubWFpbiB7CiAgICAgICAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgICAgICAgY3Vyc29yOiBncmFiOwogICAgICB9CgogICAgICA6aG9zdCgubW91c2Vkb3duKSAjY2hhcnRkaXYgLnBhbm5pbmcgLm1haW4gewogICAgICAgIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZzsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICB9CgogICAgICAjY2hhcnRkaXYgewogICAgICAgIGNvbnRhaW46IHN0cmljdDsKICAgICAgfQoKICAgICAgI2NoYXJ0ZGl2IGxpbmUuZ3VpZGUtbGluZSB7CiAgICAgICAgc3Ryb2tlOiAjOTk5OwogICAgICAgIHN0cm9rZS13aWR0aDogMS41cHg7CiAgICAgIH0KICAgICAgI2NoYXJ0ZGl2OmhvdmVyIC5tYWluIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQoKICAgICAgLnBsb3R0YWJsZSAuYXhpcyB0ZXh0IHsKICAgICAgICBmaWxsOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC5wbG90dGFibGUgLmdyaWRsaW5lcyBsaW5lIHsKICAgICAgICBzdHJva2U6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLHJPLlNjYWxlcy5Db2xvcildLGZDdC5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxmQ3QucHJvdG90eXBlLCJzeW1ib2xGdW5jdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxmQ3QucHJvdG90eXBlLCJzbW9vdGhpbmdFbmFibGVkIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLGZDdC5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxmQ3QucHJvdG90eXBlLCJ4VHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLGZDdC5wcm90b3R5cGUsInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxmQ3QucHJvdG90eXBlLCJ4QXhpc0Zvcm1hdHRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLGZDdC5wcm90b3R5cGUsInlWYWx1ZUFjY2Vzc29yIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxmQ3QucHJvdG90eXBlLCJ0b29sdGlwQ29sdW1ucyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmQ3QucHJvdG90eXBlLCJmaWxsQXJlYSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sZkN0LnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sZkN0LnByb3RvdHlwZSwiZGVmYXVsdFlSYW5nZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxmQ3QucHJvdG90eXBlLCJ5U2NhbGVUeXBlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZkN0LnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGZDdC5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGZDdC5wcm90b3R5cGUsInRvb2x0aXBQb3NpdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmQ3QucHJvdG90eXBlLCJfY2hhcnQiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLGZDdC5wcm90b3R5cGUsIl92aXNpYmxlU2VyaWVzQ2FjaGUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZkN0LnByb3RvdHlwZSwiX3Nlcmllc0RhdGFDYWNoZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmQ3QucHJvdG90eXBlLCJfc2VyaWVzTWV0YWRhdGFDYWNoZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxmQ3QucHJvdG90eXBlLCJfbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkIix2b2lkIDApLHQoW2EoInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLCJ4VHlwZSIsInlWYWx1ZUFjY2Vzc29yIiwieVNjYWxlVHlwZSIsImlzQXR0YWNoZWQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGZDdC5wcm90b3R5cGUsIl9tYWtlQ2hhcnQiLG51bGwpLHQoW2EoIl9jaGFydCIsIl92aXNpYmxlU2VyaWVzQ2FjaGUiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGZDdC5wcm90b3R5cGUsIl9yZWxvYWRGcm9tQ2FjaGUiLG51bGwpLHQoW2EoInNtb290aGluZ0VuYWJsZWQiLCJzbW9vdGhpbmdXZWlnaHQiLCJfY2hhcnQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGZDdC5wcm90b3R5cGUsIl9zbW9vdGhpbmdDaGFuZ2VkIixudWxsKSx0KFthKCJpZ25vcmVZT3V0bGllcnMiLCJfY2hhcnQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGZDdC5wcm90b3R5cGUsIl9vdXRsaWVyc0NoYW5nZWQiLG51bGwpLHQoW2EoImNvbG9yU2NhbGUiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGZDdC5wcm90b3R5cGUsIl9jb2xvclNjYWxlQ2hhbmdlZCIsbnVsbCksdChbYSgidG9vbHRpcENvbHVtbnMiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGZDdC5wcm90b3R5cGUsIl90b29sdGlwQ29sdW1uc0NoYW5nZWQiLG51bGwpLHQoW2EoInRvb2x0aXBTb3J0aW5nTWV0aG9kIiwiX2NoYXJ0IiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxmQ3QucHJvdG90eXBlLCJfdG9vbHRpcFNvcnRpbmdNZXRob2RDaGFuZ2VkIixudWxsKSxmQ3Q9dChbaSgidnotbGluZS1jaGFydDIiKV0sZkN0KTtsZXQgbUN0PWNsYXNzIGV4dGVuZHMgeWV7fTttQ3QudGVtcGxhdGU9X2VgCiAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgPHRhYmxlPgogICAgICAgIDx0aGVhZD48L3RoZWFkPgogICAgICAgIDx0Ym9keT48L3Rib2R5PgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40ZW07CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgIHRoZWFkIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIHRib2R5IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIxcHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgdGQgewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICB9CgogICAgICAuc3dhdGNoIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICB9CgogICAgICAuY2xvc2VzdCAuc3dhdGNoIHsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggI2ZmZjsKICAgICAgfQoKICAgICAgdGggewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5kaXN0YW50IHRkOm5vdCguc3dhdGNoKSB7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLG1DdD10KFtpKCJ2ei1saW5lLWNoYXJ0LXRvb2x0aXAiKV0sbUN0KTtjb25zdCBnQ3Q9W10sX0N0PVNlLmV4cG9ydHMudGhyb3R0bGUoKGZ1bmN0aW9uIHQoKXtpZigwPT1nQ3QubGVuZ3RoKXJldHVybjtjb25zdCBlPWdDdC5zaGlmdCgpO2UmJmUuYWN0aXZlJiYoZS5yZWRyYXcoKSxlLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMSksd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKDApLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9KSwxMDApO2xldCB5Q3Q9Y2xhc3MgZXh0ZW5kcyhMVHQoZXIoeWUpKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3JlZHJhd1JhZj1udWxsLHRoaXMuYWN0aXZlPSExLHRoaXMubG9nU2NhbGVBY3RpdmU9ITEsdGhpcy5jb2xvclNjYWxlPXtzY2FsZTpHUn0sdGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkPSEwLHRoaXMuX21heWJlUmVuZGVyZWRJbkJhZFN0YXRlPSExfW9uTG9hZEZpbmlzaCgpe3RoaXMuY29tbWl0Q2hhbmdlcygpLHRoaXMuZGF0YVRvTG9hZC5sZW5ndGg+MCYmdGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkJiYodGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkPSExLHRoaXMuZ2V0Q2hhcnQoKS5yZXNldERvbWFpbigpKSx0aGlzLnJlZHJhdygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxudWxsIT09dGhpcy5fcmVkcmF3UmFmJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpfWV4cG9ydEFzU3ZnU3RyaW5nKCl7cmV0dXJuIHRoaXMuZ2V0Q2hhcnQoKS5nZXRFeHBvcnRlcigpLmV4cG9ydEFzU3RyaW5nKCl9Z2V0Q2hhcnQoKXtyZXR1cm4gdGhpcy4kLmNoYXJ0fXJlc2V0RG9tYWluKCl7dGhpcy5nZXRDaGFydCgpLnJlc2V0RG9tYWluKCl9c2V0U2VyaWVzRGF0YSh0LGUpe3RoaXMuZ2V0Q2hhcnQoKS5zZXRTZXJpZXNEYXRhKHQsZSl9c2V0U2VyaWVzTWV0YWRhdGEodCxlKXt0aGlzLmdldENoYXJ0KCkuc2V0U2VyaWVzTWV0YWRhdGEodCxlKX1jb21taXRDaGFuZ2VzKCl7dGhpcy5nZXRDaGFydCgpLmNvbW1pdENoYW5nZXMoKX1yZWRyYXcoKXtudWxsIT09dGhpcy5fcmVkcmF3UmFmJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHRoaXMuX3JlZHJhd1JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3RoaXMuYWN0aXZlP3RoaXMuZ2V0Q2hhcnQoKS5yZWRyYXcoKTp0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMH0pKX1fbG9hZEtleUNoYW5nZWQoKXt0aGlzLnJlc2V0KCksdGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkPSEwfV9kYXRhU2VyaWVzQ2hhbmdlZCgpe3RoaXMuZ2V0Q2hhcnQoKS5zZXRWaXNpYmxlU2VyaWVzKHRoaXMuZGF0YVNlcmllcyl9X2xvZ1NjYWxlQ2hhbmdlZCh0KXt0aGlzLmdldENoYXJ0KCkueVNjYWxlVHlwZT10P2FDdC5MT0c6YUN0LkxJTkVBUix0aGlzLnJlZHJhdygpfV9maXhCYWRTdGF0ZVdoZW5BY3RpdmUoKXt0aGlzLmFjdGl2ZSYmdGhpcy5fbWF5YmVSZW5kZXJlZEluQmFkU3RhdGUmJihnQ3QucHVzaCh0aGlzKSxfQ3QoKSl9X29uQ2hhcnRBdHRhY2hlZCgpe3RoaXMuYWN0aXZlfHwodGhpcy5fbWF5YmVSZW5kZXJlZEluQmFkU3RhdGU9ITApfX07eUN0LnRlbXBsYXRlPV9lYAogICAgPGRpdiBpZD0iY2hhcnQtYW5kLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgPHZ6LWxpbmUtY2hhcnQyCiAgICAgICAgaWQ9ImNoYXJ0IgogICAgICAgIGRhdGEtbG9hZGluZyQ9IltbZGF0YUxvYWRpbmddXSIKICAgICAgICBkYXRhLWxvYWRlZC1vbmNlJD0iW1tkYXRhTG9hZGVkQXRMZWFzdE9uY2VdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tjb2xvclNjYWxlXV0iCiAgICAgICAgZGVmYXVsdC14LXJhbmdlPSJbW2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgICBkZWZhdWx0LXktcmFuZ2U9IltbZGVmYXVsdFlSYW5nZV1dIgogICAgICAgIGZpbGwtYXJlYT0iW1tmaWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIG9uLWNoYXJ0LWF0dGFjaGVkPSJfb25DaGFydEF0dGFjaGVkIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tzeW1ib2xGdW5jdGlvbl1dIgogICAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1t0b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtY29tcG9uZW50cy1jcmVhdGlvbi1tZXRob2Q9IltbeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbeVZhbHVlQWNjZXNzb3JdXSIKICAgICAgPjwvdnotbGluZS1jaGFydDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tkYXRhTG9hZGluZ11dIj4KICAgICAgICA8ZGl2IGlkPSJsb2FkaW5nLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlPSIiPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICA6aG9zdChbX21heWJlLXJlbmRlcmVkLWluLWJhZC1zdGF0ZV0pIHZ6LWxpbmUtY2hhcnQgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgI2NoYXJ0LWFuZC1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjbG9hZGluZy1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDIgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDJbZGF0YS1sb2FkaW5nXSB7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfZml4QmFkU3RhdGVXaGVuQWN0aXZlIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0seUN0LnByb3RvdHlwZSwiYWN0aXZlIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSx5Q3QucHJvdG90eXBlLCJkYXRhU2VyaWVzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGRyKV0seUN0LnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbG9nU2NhbGVDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0seUN0LnByb3RvdHlwZSwibG9nU2NhbGVBY3RpdmUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0seUN0LnByb3RvdHlwZSwieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx5Q3QucHJvdG90eXBlLCJ4VHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLHlDdC5wcm90b3R5cGUsInlWYWx1ZUFjY2Vzc29yIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHlDdC5wcm90b3R5cGUsImZpbGxBcmVhIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0seUN0LnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx5Q3QucHJvdG90eXBlLCJzbW9vdGhpbmdXZWlnaHQiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLHlDdC5wcm90b3R5cGUsInRvb2x0aXBDb2x1bW5zIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHlDdC5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHlDdC5wcm90b3R5cGUsInRvb2x0aXBQb3NpdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHlDdC5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0seUN0LnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0seUN0LnByb3RvdHlwZSwiZGVmYXVsdFlSYW5nZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLHlDdC5wcm90b3R5cGUsInN5bWJvbEZ1bmN0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHlDdC5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx5Q3QucHJvdG90eXBlLCJfcmVzZXREb21haW5Pbk5leHRMb2FkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHlDdC5wcm90b3R5cGUsIl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZSIsdm9pZCAwKSx0KFthKCJsb2FkS2V5IiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx5Q3QucHJvdG90eXBlLCJfbG9hZEtleUNoYW5nZWQiLG51bGwpLHQoW2EoImRhdGFTZXJpZXMuKiIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0seUN0LnByb3RvdHlwZSwiX2RhdGFTZXJpZXNDaGFuZ2VkIixudWxsKSx5Q3Q9dChbaSgidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpXSx5Q3QpLGVsKHttb2R1bGVOYW1lOiJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiLHN0eWxlQ29udGVudDoiXG4gICAgOmhvc3Qge1xuICAgICAgbWFyZ2luOiA1cHggMTBweDtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiAzMzBweDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDtcbiAgICB9XG5cbiAgICA6aG9zdChbX2V4cGFuZGVkXSkge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7XG4gICAgICBoZWlnaHQ6IDQwMHB4O1xuICAgIH1cblxuICAgIGgxIHtcbiAgICAgIGZvbnQtc2l6ZTogMTlweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgfVxuXG4gICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHtcbiAgICAgIGhlaWdodDogMjAwcHg7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAjYnV0dG9ucyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICB9XG5cbiAgICBwYXBlci1pY29uLWJ1dHRvbiB7XG4gICAgICBjb2xvcjogIzIxOTZmMztcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgICB3aWR0aDogMzJweDtcbiAgICAgIGhlaWdodDogMzJweDtcbiAgICAgIHBhZGRpbmc6IDRweDtcbiAgICB9XG5cbiAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0ge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTtcbiAgICB9XG5cbiAgICAuZG93bmxvYWQtbGlua3Mge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGhlaWdodDogMzJweDtcbiAgICB9XG5cbiAgICAuZG93bmxvYWQtbGlua3MgYSB7XG4gICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICBtYXJnaW46IDJweDtcbiAgICB9XG5cbiAgICAuZG93bmxvYWQtbGlua3MgcGFwZXItZHJvcGRvd24tbWVudSB7XG4gICAgICB3aWR0aDogMTAwcHg7XG4gICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDoge1xuICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICB9XG4gICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDoge1xuICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICB9XG4gICAgfVxuICAifSk7Y2xhc3MgdkN0e2NvbnN0cnVjdG9yKHQsZSxuLGkscil7dGhpcy5ydW49dCx0aGlzLnRhZz1lLHRoaXMubmFtZT1uLHRoaXMuc2NhbGFyRGF0YT1pLHRoaXMuc3ltYm9sPXJ9Z2V0TmFtZSgpe3JldHVybiB0aGlzLm5hbWV9c2V0RGF0YSh0KXt0aGlzLnNjYWxhckRhdGE9dH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuc2NhbGFyRGF0YX1nZXRSdW4oKXtyZXR1cm4gdGhpcy5ydW59Z2V0VGFnKCl7cmV0dXJuIHRoaXMudGFnfWdldFN5bWJvbCgpe3JldHVybiB0aGlzLnN5bWJvbH19ZnVuY3Rpb24gYkN0KHQsZSl7cmV0dXJuYCR7ZX0gKCR7dH0pYH1jbGFzcyB4Q3R7Y29uc3RydWN0b3IodCl7dGhpcy5ydW5CYXNlZENvbG9yU2NhbGU9dH1zY2FsZSh0KXtyZXR1cm4gdGhpcy5ydW5CYXNlZENvbG9yU2NhbGUuc2NhbGUodGhpcy5wYXJzZVJ1bk5hbWUodCkpfXBhcnNlUnVuTmFtZSh0KXtjb25zdCBlPXQubWF0Y2goL1woKC4qKVwpJC8pO3JldHVybiBlP2VbMV06IiJ9fWxldCB3Q3Q9Y2xhc3MgZXh0ZW5kcyhlcih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdGl2ZT0hMCx0aGlzLl9jb2xvclNjYWxlPW5ldyB4Q3Qoe3NjYWxlOkdSfSksdGhpcy5fbmFtZVRvRGF0YVNlcmllcz17fSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxlLG4pPT57Y29uc3QgaT1fcigpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoKHQ9Pntjb25zdCBuPWlPKGkse3RhZzp0aGlzLl90YWdGaWx0ZXIscnVuOnR9KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KG4pLnRoZW4oKG49PntlKHtpdGVtOnQsZGF0YTpufSl9KSl9KSkpLmZpbmFsbHkoKCgpPT57bigpfSkpfSx0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleD17fSx0aGlzLl9tYXRjaGVzTGlzdE9wZW5lZD0hMSx0aGlzLl9maWxsQXJlYT17bG93ZXJBY2Nlc3Nvcjp0PT50Lmxvd2VyLGhpZ2hlckFjY2Vzc29yOnQ9PnQudXBwZXJ9LHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2NvbnN0IHQ9d1R0KDQpLGU9ZT0+aXNOYU4oZSk/Ik5hTiI6dChlKTtyZXR1cm5be3RpdGxlOiJOYW1lIixldmFsdWF0ZTp0PT50LmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlZhbHVlIixldmFsdWF0ZTp0PT5lKHQuZGF0dW0uc2NhbGFyKX0se3RpdGxlOiJMb3dlciBNYXJnaW4iLGV2YWx1YXRlOnQ9PmUodC5kYXR1bS5sb3dlcil9LHt0aXRsZToiVXBwZXIgTWFyZ2luIixldmFsdWF0ZTp0PT5lKHQuZGF0dW0udXBwZXIpfSx7dGl0bGU6IlN0ZXAiLGV2YWx1YXRlOnQ9PlNUdCh0LmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOnQ9PkVUdCh0LmRhdHVtLndhbGxfdGltZSl9LHt0aXRsZToiUmVsYXRpdmUiLGV2YWx1YXRlOnQ9PkNUdChUVHQodC5kYXR1bSwwLHQuZGF0YXNldCkpfV19KSgpLHRoaXMuX21pc3NpbmdUYWdzPVtdLHRoaXMuX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQ9ITF9cmVsb2FkKCl7dGhpcy4kLmxvYWRlci5yZWxvYWQoKX1yZWRyYXcoKXt0aGlzLiQubG9hZGVyLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtjb25zdCB0PXRoaXMuJC5sb2FkZXI7dCYmdC5yZXNldERvbWFpbigpfV9jc3ZVcmwodCxlKXtyZXR1cm4gZT9pTyh0aGlzLl9kb3dubG9hZERhdGFVcmwodCxlKSx7Zm9ybWF0OiJjc3YifSk6IiJ9X2pzb25VcmwodCxlKXtyZXR1cm4gZT9pTyh0aGlzLl9kb3dubG9hZERhdGFVcmwodCxlKSx7Zm9ybWF0OiJqc29uIn0pOiIifV9kb3dubG9hZERhdGFVcmwodCxlKXtjb25zdCBuPXRbZV0saT17dGFnOm4uZ2V0VGFnKCkscnVuOm4uZ2V0UnVuKCl9O3JldHVybiBpTyhfcigpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9kb3dubG9hZF9kYXRhIiksaSl9X2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24odCl7cmV0dXJuKGUsbixpKT0+e2lmKCFpLnJlZ2V4X3ZhbGlkKXJldHVybiB2b2lkIHRoaXMuc2V0KCJfdGFnRmlsdGVySW52YWxpZCIsITApO2NvbnN0IHI9U2UuZXhwb3J0cy5jbG9uZSh0aGlzLl9uYW1lVG9EYXRhU2VyaWVzKSxvPVtdO1NlLmV4cG9ydHMuZm9yRWFjaCh0LCh0PT57bGV0IGU9ITE7Y29uc3QgYT1pLnRhZ190b19ldmVudHNbdC52YWx1ZV0scz1pLnRhZ190b19ldmVudHNbdC5sb3dlcl0sbD1pLnRhZ190b19ldmVudHNbdC51cHBlcl07aWYoU2UuZXhwb3J0cy5pc1VuZGVmaW5lZChhKSYmKG8ucHVzaCh0LnZhbHVlKSxlPSEwKSxTZS5leHBvcnRzLmlzVW5kZWZpbmVkKHMpJiYoby5wdXNoKHQubG93ZXIpLGU9ITApLFNlLmV4cG9ydHMuaXNVbmRlZmluZWQobCkmJihvLnB1c2godC51cHBlciksZT0hMCksZSlyZXR1cm47Y29uc3QgYz10PT50WzFdLHU9dGhpcy5fZmluZFN0ZXBNaXNtYXRjaCh0LGEubWFwKGMpLHMubWFwKGMpLGwubWFwKGMpKTtpZih1KXJldHVybiB2b2lkIHRoaXMuc2V0KCJfc3RlcHNNaXNtYXRjaCIsdSk7Y29uc3QgaD10PT50WzJdLGQ9YS5tYXAoKCh0LGUpPT4oe3dhbGxfdGltZTpuZXcgRGF0ZSgxZTMqdFswXSksc3RlcDpjKHQpLHNjYWxhcjpoKHQpLGxvd2VyOmgoc1tlXSksdXBwZXI6aChsW2VdKX0pKSkscD1iQ3Qobix0LnZhbHVlKSxmPXJbcF07aWYoZilmLnNldERhdGEoZCk7ZWxzZXtjb25zdCBlPXRoaXMuX2NyZWF0ZU5ld0RhdGFTZXJpZXMobix0LnZhbHVlLHAsZCk7cltwXT1lfX0pKSx0aGlzLnNldCgiX25hbWVUb0RhdGFTZXJpZXMiLHIpO2NvbnN0IGE9U2UuZXhwb3J0cy5maW5kSW5kZXgodGhpcy5fbWlzc2luZ1RhZ3MsKHQ9PnQucnVuPT09bikpO2lmKG8ubGVuZ3RoJiYzIT1vLmxlbmd0aCl7Y29uc3QgdD17cnVuOm4sdGFnczpvfTthPj0wP3RoaXMuc3BsaWNlKCJfbWlzc2luZ1RhZ3MiLGEsMSx0KTp0aGlzLnB1c2goIl9taXNzaW5nVGFncyIsdCl9ZWxzZSBhPj0wJiZ0aGlzLnNwbGljZSgiX21pc3NpbmdUYWdzIixhLDEpfX1fZmluZFN0ZXBNaXNtYXRjaCh0LGUsbixpKXtyZXR1cm4gU2UuZXhwb3J0cy5pc0VxdWFsKG4sZSkmJlNlLmV4cG9ydHMuaXNFcXVhbChpLGUpP251bGw6e3Nlcmllc09iamVjdDp0LHZhbHVlU3RlcHM6ZSxsb3dlclN0ZXBzOm4sdXBwZXJTdGVwczppfX1fY3JlYXRlTmV3RGF0YVNlcmllcyh0LGUsbixpKXt0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFt0XXw9MDtjb25zdCByPW5ldyB2Q3QodCxlLG4saSxiVHRbdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF1dKTtyZXR1cm4gdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF09KHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3RdKzEpJWJUdC5sZW5ndGgscn1fdXBkYXRlQ2hhcnQoKXtTZS5leHBvcnRzLmZvck93bih0aGlzLl9uYW1lVG9EYXRhU2VyaWVzLCh0PT57dGhpcy4kLmxvYWRlci5zZXRTZXJpZXNEYXRhKHQuZ2V0TmFtZSgpLHQuZ2V0RGF0YSgpKX0pKSx0aGlzLiQubG9hZGVyLmNvbW1pdENoYW5nZXMoKX1nZXQgX3Nlcmllc05hbWVzKCl7Y29uc3QgdD1uZXcgU2V0KHRoaXMucnVucyk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZpbHRlcigoKFtlLG5dKT0+dC5oYXMobi5ydW4pKSkubWFwKCgoW3RdKT0+dCkpfV9kZXRlcm1pbmVDb2xvcih0LGUpe3JldHVybiB0LnNjYWxlKGUpfV9yZWZyZXNoRGF0YVNlcmllcygpe3RoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIse30pfV9jcmVhdGVTeW1ib2xGdW5jdGlvbigpe3JldHVybiB0PT50aGlzLl9uYW1lVG9EYXRhU2VyaWVzW3RdLmdldFN5bWJvbCgpLm1ldGhvZCgpfV9kZXRlcm1pbmVTeW1ib2wodCxlKXtyZXR1cm4gdFtlXS5nZXRTeW1ib2woKS5jaGFyYWN0ZXJ9Z2V0IF90YWdGaWx0ZXIoKXtyZXR1cm4gU2UuZXhwb3J0cy5mbGF0dGVuKHRoaXMubWFyZ2luQ2hhcnRTZXJpZXMubWFwKCh0PT5bdC52YWx1ZSx0Lmxvd2VyLHQudXBwZXJdKSkpLm1hcCgodD0+IigiK3RoaXMuX2VzY2FwZVJlZ2V4Q2hhcmFjdGVycyh0KSsiKSIpKS5qb2luKCJ8Iil9X2VzY2FwZVJlZ2V4Q2hhcmFjdGVycyh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bLiorP14ke30oKXxbXF1cXF0vZywiXFwkJiIpfV9nZXRUb2dnbGVDb2xsYXBzaWJsZUljb24odCl7cmV0dXJuIHQ/ImV4cGFuZC1sZXNzIjoiZXhwYW5kLW1vcmUifV90b2dnbGVNYXRjaGVzT3Blbigpe3RoaXMuc2V0KCJfbWF0Y2hlc0xpc3RPcGVuZWQiLCF0aGlzLl9tYXRjaGVzTGlzdE9wZW5lZCl9Z2V0IF90aXRsZURpc3BsYXlTdHJpbmcoKXtyZXR1cm4gdGhpcy50aXRsZXx8InVudGl0bGVkIn1fc2VwYXJhdGVXaXRoQ29tbWFzKHQpe3JldHVybiB0LmpvaW4oIiwgIil9X3RvZ2dsZU1pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuKCl7dGhpcy5zZXQoIl9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkIiwhdGhpcy5fbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZCl9X21hdGNoTGlzdEVudHJ5Q29sb3JVcGRhdGVkKCl7Y29uc3QgdD10aGlzLiQkKCIjbWF0Y2gtbGlzdC1yZXBlYXQiKTt0JiZ0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgiLm1hdGNoLWxpc3QtZW50cnkiKS5mb3JFYWNoKChlPT57Y29uc3Qgbj10Lml0ZW1Gb3JFbGVtZW50KGUpO2Uuc3R5bGUuY29sb3I9dGhpcy5fZGV0ZXJtaW5lQ29sb3IodGhpcy5fY29sb3JTY2FsZSxuKX0pKX19O3dDdC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgZGlzcGxheS1uYW1lPSJbW190aXRsZURpc3BsYXlTdHJpbmddXSI+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgaWQ9ImxvYWRlciIKICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVdXSIKICAgICAgICBkYXRhLXNlcmllcz0iW1tfc2VyaWVzTmFtZXNdXSIKICAgICAgICBmaWxsLWFyZWE9IltbX2ZpbGxBcmVhXV0iCiAgICAgICAgaWdub3JlLXktb3V0bGllcnM9IltbaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgbG9hZC1rZXk9IltbX3RhZ0ZpbHRlcl1dIgogICAgICAgIGRhdGEtdG8tbG9hZD0iW1tydW5zXV0iCiAgICAgICAgcmVxdWVzdC1kYXRhPSJbW19yZXF1ZXN0RGF0YV1dIgogICAgICAgIGxvZy1zY2FsZS1hY3RpdmU9IltbX2xvZ1NjYWxlQWN0aXZlXV0iCiAgICAgICAgbG9hZC1kYXRhLWNhbGxiYWNrPSJbW19jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKG1hcmdpbkNoYXJ0U2VyaWVzKV1dIgogICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tfY3JlYXRlU3ltYm9sRnVuY3Rpb24oKV1dIgogICAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1tfdG9vbHRpcENvbHVtbnNdXSIKICAgICAgICB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iCiAgICAgICAgeC10eXBlPSJbW3hUeXBlXV0iCiAgICAgID4KICAgICAgPC90Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJidXR0b25zIj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2xvZ1NjYWxlQWN0aXZlXV0iCiAgICAgICAgaWNvbj0ibGluZS13ZWlnaHQiCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlTG9nU2NhbGUiCiAgICAgICAgdGl0bGU9IlRvZ2dsZSB5LWF4aXMgbG9nIHNjYWxlIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgaWNvbj0ic2V0dGluZ3Mtb3ZlcnNjYW4iCiAgICAgICAgb24tdGFwPSJfcmVzZXREb21haW4iCiAgICAgICAgdGl0bGU9IkZpdCBkb21haW4gdG8gZGF0YSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxzcGFuIHN0eWxlPSJmbGV4LWdyb3c6IDEiPjwvc3Bhbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dEb3dubG9hZExpbmtzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImRvd25sb2FkLWxpbmtzIj4KICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIgogICAgICAgICAgICBsYWJlbD0ic2VyaWVzIHRvIGRvd25sb2FkIgogICAgICAgICAgICBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWR9fSIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgICBpdGVtcz0iW1tfc2VyaWVzTmFtZXNdXSIKICAgICAgICAgICAgICAgIGFzPSJkYXRhU2VyaWVzTmFtZSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgICAgICAgICAgICAgPltbZGF0YVNlcmllc05hbWVdXTwvcGFwZXItaXRlbQogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgIDxhCiAgICAgICAgICAgIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5jc3YiCiAgICAgICAgICAgIGhyZWY9IltbX2NzdlVybChfbmFtZVRvRGF0YVNlcmllcywgX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZCldXSIKICAgICAgICAgICAgPkNTVjwvYQogICAgICAgICAgPgogICAgICAgICAgPGEKICAgICAgICAgICAgZG93bmxvYWQ9IltbX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZF1dLmpzb24iCiAgICAgICAgICAgIGhyZWY9IltbX2pzb25VcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iCiAgICAgICAgICAgID5KU09OPC9hCiAgICAgICAgICA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8IS0tIGhlcmUgLS0+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX21pc3NpbmdUYWdzLmxlbmd0aF1dIj4KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2libGUtbGlzdC10aXRsZSI+CiAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICBpY29uPSJbW19nZXRUb2dnbGVDb2xsYXBzaWJsZUljb24oX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQpXV0iCiAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZU1pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuIgogICAgICAgICAgY2xhc3M9InRvZ2dsZS1jb2xsYXBzaWJsZS1idXR0b24iCiAgICAgICAgPgogICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxhcHNpYmxlLXRpdGxlLXRleHQiPgogICAgICAgICAgPGlyb24taWNvbiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+IE1pc3NpbmcgVGFncwogICAgICAgIDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0iW1tfbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJlcnJvci1jb250ZW50Ij4KICAgICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX21pc3NpbmdUYWdzXV0iIGFzPSJtaXNzaW5nRW50cnkiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtaXNzaW5nLXRhZ3MtZm9yLXJ1bi1jb250YWluZXIiPgogICAgICAgICAgICAgIFJ1biAiW1ttaXNzaW5nRW50cnkucnVuXV0iIGxhY2tzIGRhdGEgZm9yIHRhZ3MKICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgICAgIGl0ZW1zPSJbW21pc3NpbmdFbnRyeS50YWdzXV0iCiAgICAgICAgICAgICAgICAgIGFzPSJ0YWciCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxsaT5bW3RhZ11dPC9saT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L2lyb24tY29sbGFwc2U+CiAgICA8L3RlbXBsYXRlPgoKICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfdGFnRmlsdGVySW52YWxpZF1dIj4KICAgICAgPGRpdiBjbGFzcz0iZXJyb3ItY29udGVudCI+CiAgICAgICAgPGlyb24taWNvbiBjbGFzcz0iZXJyb3ItaWNvbiIgaWNvbj0iaWNvbnM6ZXJyb3IiPjwvaXJvbi1pY29uPgogICAgICAgIFRoaXMgcmVndWxhciBleHByZXNpb24gaXMgaW52YWxpZDo8YnIgLz4KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZC1yZWdleCI+W1tfdGFnRmlsdGVyXV08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3N0ZXBzTWlzbWF0Y2hdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImVycm9yLWNvbnRlbnQiPgogICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICBUaGUgc3RlcHMgZm9yIHZhbHVlLCBsb3dlciwgYW5kIHVwcGVyIHRhZ3MgZG8gbm90IG1hdGNoOgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZy1uYW1lIj5bW19zdGVwc01pc21hdGNoLnNlcmllc09iamVjdC52YWx1ZV1dPC9zcGFuPjoKICAgICAgICAgICAgW1tfc2VwYXJhdGVXaXRoQ29tbWFzKF9zdGVwc01pc21hdGNoLnZhbHVlU3RlcHMpXV0KICAgICAgICAgIDwvbGk+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWctbmFtZSI+W1tfc3RlcHNNaXNtYXRjaC5zZXJpZXNPYmplY3QubG93ZXJdXTwvc3Bhbj46CiAgICAgICAgICAgIFtbX3NlcGFyYXRlV2l0aENvbW1hcyhfc3RlcHNNaXNtYXRjaC5sb3dlclN0ZXBzKV1dCiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnLW5hbWUiPltbX3N0ZXBzTWlzbWF0Y2guc2VyaWVzT2JqZWN0LnVwcGVyXV08L3NwYW4+OgogICAgICAgICAgICBbW19zZXBhcmF0ZVdpdGhDb21tYXMoX3N0ZXBzTWlzbWF0Y2gudXBwZXJTdGVwcyldXQogICAgICAgICAgPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPGRpdiBpZD0ibWF0Y2hlcy1jb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJjb2xsYXBzaWJsZS1saXN0LXRpdGxlIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICBpY29uPSJbW19nZXRUb2dnbGVDb2xsYXBzaWJsZUljb24oX21hdGNoZXNMaXN0T3BlbmVkKV1dIgogICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZU1hdGNoZXNPcGVuIgogICAgICAgICAgICBjbGFzcz0idG9nZ2xlLW1hdGNoZXMtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICA8c3BhbiBjbGFzcz0iY29sbGFwc2libGUtdGl0bGUtdGV4dCI+CiAgICAgICAgICBNYXRjaGVzIChbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSkKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21hdGNoZXNMaXN0T3BlbmVkXV0iPgogICAgICAgICAgPGRpdiBpZD0ibWF0Y2hlcy1saXN0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgYXM9InNlcmllc05hbWUiCiAgICAgICAgICAgICAgaWQ9Im1hdGNoLWxpc3QtcmVwZWF0IgogICAgICAgICAgICAgIG9uLWRvbS1jaGFuZ2U9Il9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hdGNoLWxpc3QtZW50cnkiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoLWVudHJ5LXN5bWJvbCI+CiAgICAgICAgICAgICAgICAgIFtbX2RldGVybWluZVN5bWJvbChfbmFtZVRvRGF0YVNlcmllcywgc2VyaWVzTmFtZSldXQogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgW1tzZXJpZXNOYW1lXV0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5lcnJvci1jb250ZW50IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBtYXJnaW46IDEwcHggMCAwIDA7CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgfQoKICAgICAgLmVycm9yLWljb24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZpbGw6ICNmZmY7CiAgICAgICAgbWFyZ2luOiAwIGF1dG8gNXB4IGF1dG87CiAgICAgIH0KCiAgICAgIC5pbnZhbGlkLXJlZ2V4IHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQoKICAgICAgLmVycm9yLWNvbnRlbnQgdWwgewogICAgICAgIG1hcmdpbjogMXB4IDAgMCAwOwogICAgICAgIHBhZGRpbmc6IDAgMCAwIDE5cHg7CiAgICAgIH0KCiAgICAgIC50YWctbmFtZSB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzaWJsZS1saXN0LXRpdGxlIHsKICAgICAgICBtYXJnaW46IDEwcHggMCA1cHggMDsKICAgICAgfQoKICAgICAgLmNvbGxhcHNpYmxlLXRpdGxlLXRleHQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgICNtYXRjaGVzLWxpc3QgewogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIC5tYXRjaC1saXN0LWVudHJ5IHsKICAgICAgICBtYXJnaW46IDAgMCA1cHggMDsKICAgICAgfQoKICAgICAgLm1hdGNoLWVudHJ5LXN5bWJvbCB7CiAgICAgICAgZm9udC1mYW1pbHk6IGFyaWFsLCBzYW5zLXNlcmlmOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgfQoKICAgICAgLm1pc3NpbmctdGFncy1mb3ItcnVuLWNvbnRhaW5lciB7CiAgICAgICAgbWFyZ2luOiA4cHggMCAwIDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sd0N0LnByb3RvdHlwZSwicnVucyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3Q3QucHJvdG90eXBlLCJ4VHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHdDdC5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3Q3QucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sd0N0LnByb3RvdHlwZSwibWFyZ2luQ2hhcnRTZXJpZXMiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx3Q3QucHJvdG90eXBlLCJpZ25vcmVZT3V0bGllcnMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsZHIpXSx3Q3QucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHdDdC5wcm90b3R5cGUsInNob3dEb3dubG9hZExpbmtzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHdDdC5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHdDdC5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHdDdC5wcm90b3R5cGUsIl9jb2xvclNjYWxlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sd0N0LnByb3RvdHlwZSwiX3RhZ0ZpbHRlckludmFsaWQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd0N0LnByb3RvdHlwZSwiX25hbWVUb0RhdGFTZXJpZXMiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sd0N0LnByb3RvdHlwZSwiX2V4cGFuZGVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sd0N0LnByb3RvdHlwZSwiX2xvZ1NjYWxlQWN0aXZlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sd0N0LnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHdDdC5wcm90b3R5cGUsIl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHdDdC5wcm90b3R5cGUsIl9tYXRjaGVzTGlzdE9wZW5lZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSx3Q3QucHJvdG90eXBlLCJfZmlsbEFyZWEiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLHdDdC5wcm90b3R5cGUsIl90b29sdGlwQ29sdW1ucyIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sd0N0LnByb3RvdHlwZSwiX21pc3NpbmdUYWdzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sd0N0LnByb3RvdHlwZSwiX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd0N0LnByb3RvdHlwZSwiX3N0ZXBzTWlzbWF0Y2giLHZvaWQgMCksdChbYSgiX25hbWVUb0RhdGFTZXJpZXMiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHdDdC5wcm90b3R5cGUsIl91cGRhdGVDaGFydCIsbnVsbCksdChbcygiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksZSgiZGVzaWduOnR5cGUiLE9iamVjdCksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sd0N0LnByb3RvdHlwZSwiX3Nlcmllc05hbWVzIixudWxsKSx0KFthKCJfdGFnRmlsdGVyIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx3Q3QucHJvdG90eXBlLCJfcmVmcmVzaERhdGFTZXJpZXMiLG51bGwpLHQoW3MoIm1hcmdpbkNoYXJ0U2VyaWVzIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sd0N0LnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsbnVsbCksdChbcygidGl0bGUiKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx3Q3QucHJvdG90eXBlLCJfdGl0bGVEaXNwbGF5U3RyaW5nIixudWxsKSx3Q3Q9dChbaSgidGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZCIpXSx3Q3QpO3ZhciBTQ3Q9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsVFlQRVM6W10sZ2V0UnVuc05hbWVkOmZ1bmN0aW9uIE1DdCh0KXtyZXR1cm4gU2UuZXhwb3J0cy5rZXlzKHQpLnNvcnQobnIpfSxnZXRUYWdzOmFyLGZpbHRlclRhZ3M6ZnVuY3Rpb24gRUN0KHQsZSl7bGV0IG49W107cmV0dXJuIGUuZm9yRWFjaCgoZT0+bj1uLmNvbmNhdCh0W2VdKSkpLFNlLmV4cG9ydHMudW5pcShuKS5zb3J0KG5yKX0sTGlzdGVuS2V5OmZsLEJhc2VTdG9yZTptbCxDYW5jZWxsZXI6WFIsRW52aXJvbm1lbnRTdG9yZTpnbCxlbnZpcm9ubWVudFN0b3JlOl9sLEV4cGVyaW1lbnRzU3RvcmU6RlIsZXhwZXJpbWVudHNTdG9yZTpWUixSZXF1ZXN0Q2FuY2VsbGF0aW9uRXJyb3I6c3IsSW52YWxpZFJlcXVlc3RPcHRpb25zRXJyb3I6bHIsUmVxdWVzdE5ldHdvcmtFcnJvcjpjcixnZXQgSHR0cE1ldGhvZFR5cGUoKXtyZXR1cm4gdXJ9LFJlcXVlc3RPcHRpb25zOmhyLFJlcXVlc3RNYW5hZ2VyOmRyLGNyZWF0ZVJvdXRlcjpncixnZXRSb3V0ZXI6X3Isc2V0Um91dGVyOmZ1bmN0aW9uIFRDdCh0KXtpZihudWxsPT10KXRocm93IG5ldyBFcnJvcigiUm91dGVyIHJlcXVpcmVkLCBidXQgZ290OiAiK3QpO21yPXR9LGNyZWF0ZVNlYXJjaFBhcmFtOnZyLFJ1bnNTdG9yZTp5bCxydW5zU3RvcmU6dmwsYWRkUGFyYW1zOmlPfSk7bGV0IENDdD1jbGFzcyBleHRlbmRzKGVyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWN0aXZlPSEwLHRoaXMuX2NvbG9yU2NhbGU9bmV3IHhDdCh7c2NhbGU6R1J9KSx0aGlzLl9uYW1lVG9EYXRhU2VyaWVzPXt9LHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LGUsbik9Pntjb25zdCBpPV9yKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL3NjYWxhcnMiKTtQcm9taXNlLmFsbCh0Lm1hcCgodD0+e2NvbnN0IG49aU8oaSx7dGFnOnRoaXMuX3RhZ0ZpbHRlcixydW46dH0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QobikudGhlbigobj0+e2Uoe2l0ZW06dCxkYXRhOm59KX0pKX0pKSkuZmluYWxseSgoKCk9PntuKCl9KSl9LHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4PXt9LHRoaXMuX21hdGNoZXNMaXN0T3BlbmVkPSExfXJlbG9hZCgpe3RoaXMuJC5sb2FkZXIucmVsb2FkKCl9cmVkcmF3KCl7dGhpcy4kLmxvYWRlci5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfV90b2dnbGVMb2dTY2FsZSgpe3RoaXMuc2V0KCJfbG9nU2NhbGVBY3RpdmUiLCF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9X3Jlc2V0RG9tYWluKCl7Y29uc3QgdD10aGlzLiQubG9hZGVyO3QmJnQucmVzZXREb21haW4oKX1fY3N2VXJsKHQsZSl7cmV0dXJuIGU/aU8odGhpcy5fZG93bmxvYWREYXRhVXJsKHQsZSkse2Zvcm1hdDoiY3N2In0pOiIifV9qc29uVXJsKHQsZSl7cmV0dXJuIGU/aU8odGhpcy5fZG93bmxvYWREYXRhVXJsKHQsZSkse2Zvcm1hdDoianNvbiJ9KToiIn1fZG93bmxvYWREYXRhVXJsKHQsZSl7Y29uc3Qgbj10W2VdLGk9e3RhZzpuLmdldFRhZygpLHJ1bjpuLmdldFJ1bigpfTtyZXR1cm4gaU8oX3IoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvZG93bmxvYWRfZGF0YSIpLGkpfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQsZSxuKT0+e2lmKG4ucmVnZXhfdmFsaWQpe2NvbnN0IHQ9U2UuZXhwb3J0cy5jbG9uZSh0aGlzLl9uYW1lVG9EYXRhU2VyaWVzKTtTZS5leHBvcnRzLmZvck93bihuLnRhZ190b19ldmVudHMsKChuLGkpPT57Y29uc3Qgcj1uLm1hcCgodD0+KHt3YWxsX3RpbWU6bmV3IERhdGUoMWUzKnRbMF0pLHN0ZXA6dFsxXSxzY2FsYXI6dFsyXX0pKSksbz1iQ3QoZSxpKSxhPXRbb107aWYoYSlhLnNldERhdGEocik7ZWxzZXtTZS5leHBvcnRzLmlzVW5kZWZpbmVkKHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W2VdKSYmKHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W2VdPTApO2NvbnN0IG49bmV3IHZDdChlLGksbyxyLGJUdFt0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtlXV0pO3Rbb109bix0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtlXT0odGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbZV0rMSklYlR0Lmxlbmd0aH19KSksdGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIix0KX19fV91cGRhdGVDaGFydCgpe09iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZvckVhY2goKChbdCxlXSk9Pnt0aGlzLiQubG9hZGVyLnNldFNlcmllc0RhdGEodCxlLmdldERhdGEoKSl9KSksdGhpcy4kLmxvYWRlci5jb21taXRDaGFuZ2VzKCl9X2NvbXB1dGVTZWxlY3RlZFJ1bnNTZXQodCl7Y29uc3QgZT17fTtyZXR1cm4gU2UuZXhwb3J0cy5mb3JFYWNoKHQsKHQ9PntlW3RdPTF9KSksZX1nZXQgX3Nlcmllc05hbWVzKCl7Y29uc3QgdD1uZXcgU2V0KHRoaXMucnVucyk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZpbHRlcigoKFtlLG5dKT0+dC5oYXMobi5ydW4pKSkubWFwKCgoW3RdKT0+dCkpfV9kZXRlcm1pbmVDb2xvcih0LGUpe3JldHVybiB0LnNjYWxlKGUpfV9yZWZyZXNoRGF0YVNlcmllcygpe3RoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIse30pfV9jcmVhdGVTeW1ib2xGdW5jdGlvbigpe3JldHVybiB0PT50aGlzLl9uYW1lVG9EYXRhU2VyaWVzW3RdLmdldFN5bWJvbCgpLm1ldGhvZCgpfV9kZXRlcm1pbmVTeW1ib2wodCxlKXtyZXR1cm4gdFtlXS5nZXRTeW1ib2woKS5jaGFyYWN0ZXJ9Z2V0IF90YWdGaWx0ZXIoKXt2YXIgdD10aGlzLnRhZ1JlZ2V4ZXM7cmV0dXJuIDE9PT10Lmxlbmd0aD90WzBdOnQubWFwKCh0PT4iKCIrdCsiKSIpKS5qb2luKCJ8Iil9X2dldFRvZ2dsZU1hdGNoZXNJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwhdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQpfWdldCBfdGl0bGVEaXNwbGF5U3RyaW5nKCl7cmV0dXJuIHRoaXMudGl0bGV8fCJ1bnRpdGxlZCJ9X21hdGNoTGlzdEVudHJ5Q29sb3JVcGRhdGVkKHQpe2NvbnN0IGU9dGhpcy4kJCgiI21hdGNoLWxpc3QtcmVwZWF0Iik7ZSYmdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXRjaC1saXN0LWVudHJ5IikuZm9yRWFjaCgodD0+e2NvbnN0IG49ZS5pdGVtRm9yRWxlbWVudCh0KTt0LnN0eWxlLmNvbG9yPXRoaXMuX2RldGVybWluZUNvbG9yKHRoaXMuX2NvbG9yU2NhbGUsbil9KSl9fTtDQ3QudGVtcGxhdGU9X2VgCiAgICA8dGYtY2FyZC1oZWFkaW5nIGRpc3BsYXktbmFtZT0iW1tfdGl0bGVEaXNwbGF5U3RyaW5nXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgaWdub3JlLXktb3V0bGllcnM9IltbaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgbG9hZC1rZXk9IltbX3RhZ0ZpbHRlcl1dIgogICAgICAgIGRhdGEtdG8tbG9hZD0iW1tydW5zXV0iCiAgICAgICAgcmVxdWVzdC1kYXRhPSJbW19yZXF1ZXN0RGF0YV1dIgogICAgICAgIGxvZy1zY2FsZS1hY3RpdmU9IltbX2xvZ1NjYWxlQWN0aXZlXV0iCiAgICAgICAgbG9hZC1kYXRhLWNhbGxiYWNrPSJbW19jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCldXSIKICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICBzbW9vdGhpbmctZW5hYmxlZD0iW1tzbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgICAgc21vb3RoaW5nLXdlaWdodD0iW1tzbW9vdGhpbmdXZWlnaHRdXSIKICAgICAgICBzeW1ib2wtZnVuY3Rpb249IltbX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCldXSIKICAgICAgICB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iCiAgICAgICAgeC10eXBlPSJbW3hUeXBlXV0iCiAgICAgID4KICAgICAgPC90Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJidXR0b25zIj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2xvZ1NjYWxlQWN0aXZlXV0iCiAgICAgICAgaWNvbj0ibGluZS13ZWlnaHQiCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlTG9nU2NhbGUiCiAgICAgICAgdGl0bGU9IlRvZ2dsZSB5LWF4aXMgbG9nIHNjYWxlIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgaWNvbj0ic2V0dGluZ3Mtb3ZlcnNjYW4iCiAgICAgICAgb24tdGFwPSJfcmVzZXREb21haW4iCiAgICAgICAgdGl0bGU9IkZpdCBkb21haW4gdG8gZGF0YSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxzcGFuIHN0eWxlPSJmbGV4LWdyb3c6IDEiPjwvc3Bhbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dEb3dubG9hZExpbmtzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImRvd25sb2FkLWxpbmtzIj4KICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIgogICAgICAgICAgICBsYWJlbD0ic2VyaWVzIHRvIGRvd25sb2FkIgogICAgICAgICAgICBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWR9fSIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgICBpdGVtcz0iW1tfc2VyaWVzTmFtZXNdXSIKICAgICAgICAgICAgICAgIGFzPSJkYXRhU2VyaWVzTmFtZSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgICAgICAgICAgICAgPltbZGF0YVNlcmllc05hbWVdXTwvcGFwZXItaXRlbQogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgIDxhCiAgICAgICAgICAgIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5jc3YiCiAgICAgICAgICAgIGhyZWY9IltbX2NzdlVybChfbmFtZVRvRGF0YVNlcmllcywgX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZCldXSIKICAgICAgICAgICAgPkNTVjwvYQogICAgICAgICAgPgogICAgICAgICAgPGEKICAgICAgICAgICAgZG93bmxvYWQ9IltbX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZF1dLmpzb24iCiAgICAgICAgICAgIGhyZWY9IltbX2pzb25VcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iCiAgICAgICAgICAgID5KU09OPC9hCiAgICAgICAgICA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9Im1hdGNoZXMtY29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0ibWF0Y2hlcy1saXN0LXRpdGxlIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICBpY29uPSJbW19nZXRUb2dnbGVNYXRjaGVzSWNvbihfbWF0Y2hlc0xpc3RPcGVuZWQpXV0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlTWF0Y2hlc09wZW4iCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtbWF0Y2hlcy1idXR0b24iCiAgICAgICAgICA+CiAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgIDxzcGFuIGNsYXNzPSJtYXRjaGVzLXRleHQiPiBNYXRjaGVzIChbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSkgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW19tYXRjaGVzTGlzdE9wZW5lZF1dIj4KICAgICAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgIGFzPSJzZXJpZXNOYW1lIgogICAgICAgICAgICAgIGlkPSJtYXRjaC1saXN0LXJlcGVhdCIKICAgICAgICAgICAgICBvbi1kb20tY2hhbmdlPSJfbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRjaC1saXN0LWVudHJ5Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtYXRjaC1lbnRyeS1zeW1ib2wiPgogICAgICAgICAgICAgICAgICBbW19kZXRlcm1pbmVTeW1ib2woX25hbWVUb0RhdGFTZXJpZXMsIHNlcmllc05hbWUpXV0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIFtbc2VyaWVzTmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAjbWF0Y2hlcy1saXN0LXRpdGxlIHsKICAgICAgICBtYXJnaW46IDEwcHggMCA1cHggMDsKICAgICAgfQoKICAgICAgI21hdGNoZXMtbGlzdCB7CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgLm1hdGNoLWxpc3QtZW50cnkgewogICAgICAgIG1hcmdpbjogMCAwIDVweCAwOwogICAgICB9CgogICAgICAubWF0Y2gtZW50cnktc3ltYm9sIHsKICAgICAgICBmb250LWZhbWlseTogYXJpYWwsIHNhbnMtc2VyaWY7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICB9CgogICAgICAubWF0Y2hlcy10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLENDdC5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQ0N0LnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxDQ3QucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQ0N0LnByb3RvdHlwZSwidGl0bGUiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLENDdC5wcm90b3R5cGUsInRhZ1JlZ2V4ZXMiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxDQ3QucHJvdG90eXBlLCJpZ25vcmVZT3V0bGllcnMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsZHIpXSxDQ3QucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLENDdC5wcm90b3R5cGUsInNob3dEb3dubG9hZExpbmtzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQ0N0LnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxDQ3QucHJvdG90eXBlLCJzbW9vdGhpbmdXZWlnaHQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQ0N0LnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQ0N0LnByb3RvdHlwZSwidG9vbHRpcFNvcnRpbmdNZXRob2QiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIseEN0KV0sQ0N0LnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQ0N0LnByb3RvdHlwZSwiX25hbWVUb0RhdGFTZXJpZXMiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQ0N0LnByb3RvdHlwZSwiX2V4cGFuZGVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQ0N0LnByb3RvdHlwZSwiX2xvZ1NjYWxlQWN0aXZlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sQ0N0LnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLENDdC5wcm90b3R5cGUsIl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLENDdC5wcm90b3R5cGUsIl9tYXRjaGVzTGlzdE9wZW5lZCIsdm9pZCAwKSx0KFthKCJfbmFtZVRvRGF0YVNlcmllcyIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQ0N0LnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKSx0KFtzKCJfbmFtZVRvRGF0YVNlcmllcyIsInJ1bnMiKSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxDQ3QucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpLHQoW2EoIl90YWdGaWx0ZXIiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLENDdC5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCksdChbcygidGFnUmVnZXhlcyIpLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLENDdC5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLG51bGwpLHQoW3MoInRpdGxlIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sQ0N0LnByb3RvdHlwZSwiX3RpdGxlRGlzcGxheVN0cmluZyIsbnVsbCksQ0N0PXQoW2koInRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIildLENDdCk7bGV0IEFDdD1jbGFzcyBleHRlbmRzIHlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgZHIoNTApLHRoaXMuX2NhbmNlbGxlcj1uZXcgWFIsdGhpcy5fc2hvd0Rvd25sb2FkTGlua3M9SHMoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3Ntb290aGluZ1dlaWdodD1HcygiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLmNhbGwodGhpcyksdGhpcy5faWdub3JlWU91dGxpZXJzPUhzKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pLmNhbGwodGhpcyksdGhpcy5feFR5cGU9InN0ZXAiLHRoaXMuX2FjdGl2ZT0hMCx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fc2hvd0Rvd25sb2FkTGlua3NPYnNlcnZlcj1GcygiX3Nob3dEb3dubG9hZExpbmtzIix7ZGVmYXVsdFZhbHVlOiExLHVzZUxvY2FsU3RvcmFnZTohMH0pLHRoaXMuX3Ntb290aGluZ1dlaWdodE9ic2VydmVyPVdzKCJfc21vb3RoaW5nV2VpZ2h0Iix7ZGVmYXVsdFZhbHVlOi42fSksdGhpcy5faWdub3JlWU91dGxpZXJzT2JzZXJ2ZXI9RnMoIl9pZ25vcmVZT3V0bGllcnMiLHtkZWZhdWx0VmFsdWU6ITAsdXNlTG9jYWxTdG9yYWdlOiEwfSl9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtjb25zdCB0PV9yKCkucGx1Z2luc0xpc3RpbmcoKSxlPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSgodD0+e3QuY2FuY2VsbGVkfHwodGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLCF0LnZhbHVlLmN1c3RvbV9zY2FsYXJzKSx0aGlzLl9kYXRhTm90Rm91bmR8fHRoaXMuX3JldHJpZXZlTGF5b3V0QW5kRGF0YSgpKX0pKTt0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4oZSl9X3JlbG9hZENoYXJ0cygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkLCB0Zi1jdXN0b20tc2NhbGFyLW11bHRpLWxpbmUtY2hhcnQtY2FyZCIpLmZvckVhY2goKHQ9Pnt0LnJlbG9hZCgpfSkpfV9yZXRyaWV2ZUxheW91dEFuZERhdGEoKXtjb25zdCB0PV9yKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL2xheW91dCIpLGU9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKCh0PT57dC5jYW5jZWxsZWR8fCh0aGlzLnNldCgiX2xheW91dCIsdC52YWx1ZSksdGhpcy5fZGF0YU5vdEZvdW5kfHx0aGlzLl9yZWxvYWRDaGFydHMoKSl9KSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKGUpfWdldCBfc21vb3RoaW5nRW5hYmxlZCgpe3JldHVybiB0aGlzLl9zbW9vdGhpbmdXZWlnaHQ+MH1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9sYXlvdXQ7aWYoIXQuY2F0ZWdvcnkpcmV0dXJuW107bGV0IGU9ITE7cmV0dXJuIHRoaXMuX29wZW5lZENhdGVnb3JpZXN8fChlPSEwLHRoaXMuX29wZW5lZENhdGVnb3JpZXM9e30pLHQuY2F0ZWdvcnkubWFwKCh0PT4oZSYmIXQuY2xvc2VkJiYodGhpcy5fb3BlbmVkQ2F0ZWdvcmllc1t0LnRpdGxlXT0hMCkse25hbWU6dC50aXRsZSxpdGVtczp0LmNoYXJ0LG1ldGFkYXRhOnt0eXBlOmJyLlBSRUZJWF9HUk9VUCxvcGVuZWQ6ISF0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW3QudGl0bGVdfX0pKSl9X2NhdGVnb3J5T3BlbmVkVG9nZ2xlZCh0KXtjb25zdCBlPXQudGFyZ2V0O2Uub3BlbmVkP3RoaXMuX29wZW5lZENhdGVnb3JpZXNbZS5jYXRlZ29yeS5uYW1lXT0hMDpkZWxldGUgdGhpcy5fb3BlbmVkQ2F0ZWdvcmllc1tlLmNhdGVnb3J5Lm5hbWVdfX07QUN0LnRlbXBsYXRlPV9lYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+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+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CiAgICAgICN0b29sdGlwLXNvcnRpbmcgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHdpZHRoOiAxMDVweDsKICAgICAgfQogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsZHIpXSxBQ3QucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsWFIpXSxBQ3QucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxBQ3QucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQUN0LnByb3RvdHlwZSwiX3Nob3dEb3dubG9hZExpbmtzIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLG5vdGlmeTohMCxvYnNlcnZlcjoiX3Ntb290aGluZ1dlaWdodE9ic2VydmVyIn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxBQ3QucHJvdG90eXBlLCJfc21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQUN0LnByb3RvdHlwZSwiX2lnbm9yZVlPdXRsaWVycyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxBQ3QucHJvdG90eXBlLCJfeFR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQUN0LnByb3RvdHlwZSwiX2xheW91dCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEFDdC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQUN0LnByb3RvdHlwZSwiX29wZW5lZENhdGVnb3JpZXMiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxBQ3QucHJvdG90eXBlLCJfYWN0aXZlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQUN0LnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKSx0KFtzKCJfc21vb3RoaW5nV2VpZ2h0IiksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEFDdC5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKSx0KFtzKCJfbGF5b3V0IiksZSgiZGVzaWduOnR5cGUiLEFycmF5KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxBQ3QucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCksQUN0PXQoW2koInRmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkIildLEFDdCk7Y2xhc3Mga0N0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5ydW4yZGF0YXNldHM9e30sdGhpcy5jb2xvclNjYWxlPWUsdGhpcy5idWlsZENoYXJ0KHQpfWdldERhdGFzZXQodCl7cmV0dXJuIHZvaWQgMD09PXRoaXMucnVuMmRhdGFzZXRzW3RdJiYodGhpcy5ydW4yZGF0YXNldHNbdF09bmV3IHJPLkRhdGFzZXQoW10se3J1bjp0fSkpLHRoaXMucnVuMmRhdGFzZXRzW3RdfWJ1aWxkQ2hhcnQodCl7dGhpcy5vdXRlciYmdGhpcy5vdXRlci5kZXN0cm95KCk7bGV0IGU9QVR0KHQpO3RoaXMueEFjY2Vzc29yPWUuYWNjZXNzb3IsdGhpcy54U2NhbGU9ZS5zY2FsZSx0aGlzLnhBeGlzPWUuYXhpcyx0aGlzLnhBeGlzLm1hcmdpbigwKSx0aGlzLnhBeGlzLnRpY2tMYWJlbFBhZGRpbmcoMyksdGhpcy55U2NhbGU9bmV3IHJPLlNjYWxlcy5MaW5lYXIsdGhpcy55QXhpcz1uZXcgck8uQXhlcy5OdW1lcmljKHRoaXMueVNjYWxlLCJsZWZ0Iik7bGV0IG49d1R0KDMpO3RoaXMueUF4aXMubWFyZ2luKDApLnRpY2tMYWJlbFBhZGRpbmcoNSkuZm9ybWF0dGVyKG4pLHRoaXMueUF4aXMudXNlc1RleHRXaWR0aEFwcHJveGltYXRpb24oITApO2xldCBpPXRoaXMuYnVpbGRQbG90KHRoaXMueEFjY2Vzc29yLHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKTt0aGlzLmdyaWRsaW5lcz1uZXcgck8uQ29tcG9uZW50cy5HcmlkbGluZXModGhpcy54U2NhbGUsdGhpcy55U2NhbGUpLHRoaXMuY2VudGVyPW5ldyByTy5Db21wb25lbnRzLkdyb3VwKFt0aGlzLmdyaWRsaW5lcyxpXSksdGhpcy5vdXRlcj1uZXcgck8uQ29tcG9uZW50cy5UYWJsZShbW3RoaXMueUF4aXMsdGhpcy5jZW50ZXJdLFtudWxsLHRoaXMueEF4aXNdXSl9YnVpbGRQbG90KHQsZSxuKXtsZXQgaT1bMCwyMjgsMTU4NywzMDg1LDVlMyw2OTE1LDg0MTMsOTc3MiwxZTRdLHI9U2UuZXhwb3J0cy5yYW5nZShpLmxlbmd0aC0xKS5tYXAoKHQ9PihpW3QrMV0taVt0XSkvMjUwMCkpLG89aS5tYXAoKCh0LGUpPT50PT50W2VdWzFdKSksYT1vWzRdLHM9U2UuZXhwb3J0cy5yYW5nZShvLmxlbmd0aC0xKS5tYXAoKGk9PntsZXQgYT1uZXcgck8uUGxvdHMuQXJlYTthLngodCxlKTtsZXQgcz1pPjQ/b1tpXTpvW2krMV07cmV0dXJuIGEueShpPjQ/b1tpKzFdOm9baV0sbiksYS55MChzKSxhLmF0dHIoImZpbGwiLCgodCxlLG4pPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUobi5tZXRhZGF0YSgpLnJ1bikpKSxhLmF0dHIoInN0cm9rZSIsKCh0LGUsbik9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShuLm1ldGFkYXRhKCkucnVuKSkpLGEuYXR0cigic3Ryb2tlLXdlaWdodCIsKCh0LGUsbik9PiIwLjVweCIpKSxhLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwoKCk9PnJbaV0pKSxhLmF0dHIoImZpbGwtb3BhY2l0eSIsKCgpPT5yW2ldKSksYX0pKSxsPW5ldyByTy5QbG90cy5MaW5lO3JldHVybiBsLngodCxlKSxsLnkoYSxuKSxsLmF0dHIoInN0cm9rZSIsKCh0LGUsbik9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShuLnJ1bikpKSx0aGlzLnBsb3RzPXMsbmV3IHJPLkNvbXBvbmVudHMuR3JvdXAocyl9c2V0VmlzaWJsZVNlcmllcyh0KXt0aGlzLnJ1bnM9dDtsZXQgZT10Lm1hcCgodD0+dGhpcy5nZXREYXRhc2V0KHQpKSk7dGhpcy5wbG90cy5mb3JFYWNoKCh0PT50LmRhdGFzZXRzKGUpKSl9c2V0U2VyaWVzRGF0YSh0LGUpe3RoaXMuZ2V0RGF0YXNldCh0KS5kYXRhKGUpfXJlbmRlclRvKHQpe3RoaXMudGFyZ2V0U1ZHPXQsdGhpcy5vdXRlci5yZW5kZXJUbyh0KX1yZWRyYXcoKXt0aGlzLm91dGVyLnJlZHJhdygpfWRlc3Ryb3koKXt0aGlzLm91dGVyLmRlc3Ryb3koKX19bGV0IExDdD1jbGFzcyBleHRlbmRzKGVyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29sb3JTY2FsZT0obmV3IHJPLlNjYWxlcy5Db2xvcikucmFuZ2UoZ0Euc2xpY2UoKSksdGhpcy54VHlwZT0ic3RlcCIsdGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlPVtdLHRoaXMuX3Nlcmllc0RhdGFDYWNoZT17fSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbH1zZXRWaXNpYmxlU2VyaWVzKHQpe3RoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT10LHRoaXMuX2NoYXJ0JiYodGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0KSx0aGlzLnJlZHJhdygpKX1zZXRTZXJpZXNEYXRhKHQsZSl7dGhpcy5fc2VyaWVzRGF0YUNhY2hlW3RdPWUsdGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEodCxlKX1yZWRyYXcoKXt0aGlzLl9jaGFydC5yZWRyYXcoKX1fbWFrZUNoYXJ0KCl7dmFyIHQ9dGhpcy54VHlwZSxlPXRoaXMuY29sb3JTY2FsZSxuPXRoaXMuX2F0dGFjaGVkO251bGw9PT10aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQmJnRoaXMuY2FuY2VsQXN5bmModGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkKSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9dGhpcy5hc3luYygoZnVuY3Rpb24oKXtpZih0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbCxuKXt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuZGVzdHJveSgpO3ZhciBpPW5ldyBrQ3QodCxlKSxyPVN1KHRoaXMuJC5jaGFydGRpdik7aS5yZW5kZXJUbyhyKSx0aGlzLl9jaGFydD1pfX0pLDM1MCl9X3JlbG9hZEZyb21DYWNoZSgpe3RoaXMuX2NoYXJ0JiYodGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEodCx0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbdF18fFtdKX0uYmluZCh0aGlzKSkpfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX19O0xDdC50ZW1wbGF0ZT1fZWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwbG90dGFibGUtc3R5bGUiPjwvc3R5bGU+CiAgICA8ZGl2IGlkPSJjaGFydGRpdiI+PC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgI2NoYXJ0ZGl2IHsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICB9CiAgICAgIC5wbG90dGFibGUgLmF4aXMgdGV4dCB7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsck8uU2NhbGVzLkNvbG9yKV0sTEN0LnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxMQ3QucHJvdG90eXBlLCJ4VHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExDdC5wcm90b3R5cGUsIl9hdHRhY2hlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixrQ3QpXSxMQ3QucHJvdG90eXBlLCJfY2hhcnQiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLExDdC5wcm90b3R5cGUsIl92aXNpYmxlU2VyaWVzQ2FjaGUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTEN0LnByb3RvdHlwZSwiX3Nlcmllc0RhdGFDYWNoZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMQ3QucHJvdG90eXBlLCJfbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkIix2b2lkIDApLHQoW2EoInhUeXBlIiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sTEN0LnByb3RvdHlwZSwiX21ha2VDaGFydCIsbnVsbCksdChbYSgiX2NoYXJ0IiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMQ3QucHJvdG90eXBlLCJfcmVsb2FkRnJvbUNhY2hlIixudWxsKSxMQ3Q9dChbaSgidnotZGlzdHJpYnV0aW9uLWNoYXJ0IildLExDdCk7bGV0IFBDdD1jbGFzcyBleHRlbmRzKExUdChlcih5ZSkpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5nZXREYXRhTG9hZE5hbWU9KHtydW46dH0pPT50LHRoaXMucmVxdWVzdERhdGE9KHQsZSxuKT0+e2NvbnN0IGk9X3IoKS5wbHVnaW5Sb3V0ZSgiZGlzdHJpYnV0aW9ucyIsIi9kaXN0cmlidXRpb25zIik7UHJvbWlzZS5hbGwodC5tYXAoKHQ9Pntjb25zdCBuPWlPKGkse3RhZzp0LnRhZyxydW46dC5ydW59KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KG4pLnRoZW4oKG49PntlKHtpdGVtOnQsZGF0YTpufSl9KSl9KSkpLmZpbmFsbHkoKCgpPT57bigpfSkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQsZSxuKT0+e2NvbnN0IGk9bi5tYXAoKHQ9Pntjb25zdFtlLG4saV09dDtyZXR1cm4gaS53YWxsX3RpbWU9bmV3IERhdGUoMWUzKmUpLGkuc3RlcD1uLGl9KSkscj10aGlzLmdldERhdGFMb2FkTmFtZShlKTt0aGlzLiQuY2hhcnQuc2V0U2VyaWVzRGF0YShyLGkpLHRoaXMuJC5jaGFydC5zZXRWaXNpYmxlU2VyaWVzKFtyXSl9LHRoaXMuX2NvbG9yU2NhbGU9e3NjYWxlOkdSfSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9jYW5jZWxsZXI9bmV3IFhSfV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt0aGlzLmRhdGFUb0xvYWQ9W3tydW46dGhpcy5ydW4sdGFnOnRoaXMudGFnfV19Z2V0IF9ydW5Db2xvcigpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnNjYWxlKHRoaXMucnVuKX1yZWRyYXcoKXt0aGlzLiQuY2hhcnQucmVkcmF3KCl9X3RvZ2dsZUV4cGFuZGVkKHQpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCksdGhpcy5yZWRyYXcoKX19O1BDdC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KICAgIDwhLS0KICAgICAgVGhlIG1haW4gZGlzdHJpYnV0aW9uIHRoYXQgd2UgcmVuZGVyLiBEYXRhIGlzIHNldCBkaXJlY3RseSB3aXRoCiAgICAgIFxgc2V0U2VyaWVzRGF0YVxgLCBub3Qgd2l0aCBhIGJvdW5kIHByb3BlcnR5LgogICAgLS0+CiAgICA8dnotZGlzdHJpYnV0aW9uLWNoYXJ0CiAgICAgIGlkPSJjaGFydCIKICAgICAgeC10eXBlPSJbW3hUeXBlXV0iCiAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICA+PC92ei1kaXN0cmlidXRpb24tY2hhcnQ+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgICBoZWlnaHQ6IDIzNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDcwMHB4OwogICAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQQ3QucHJvdG90eXBlLCJydW4iLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUEN0LnByb3RvdHlwZSwidGFnIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFBDdC5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFBDdC5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFBDdC5wcm90b3R5cGUsImdldERhdGFMb2FkTmFtZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQQ3QucHJvdG90eXBlLCJsb2FkRGF0YUNhbGxiYWNrIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFBDdC5wcm90b3R5cGUsIl9jb2xvclNjYWxlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBDdC5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixkcildLFBDdC5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLFhSKV0sUEN0LnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKSx0KFthKCJydW4iLCJ0YWciKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFBDdC5wcm90b3R5cGUsIl9yZWxvYWRPblJ1blRhZ0NoYW5nZSIsbnVsbCksdChbYSgicnVuIiwidGFnIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxQQ3QucHJvdG90eXBlLCJfdXBkYXRlRGF0YVRvTG9hZCIsbnVsbCksdChbcygicnVuIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sUEN0LnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKSxQQ3Q9dChbaSgidGYtZGlzdHJpYnV0aW9uLWxvYWRlciIpXSxQQ3QpO2xldCBOQ3Q9Y2xhc3MgZXh0ZW5kcyhlcih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5feFR5cGU9InN0ZXAiLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBkcn1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCgpPT57dGhpcy5fcmVsb2FkRGlzdHJpYnV0aW9ucygpfSkpfV9mZXRjaFRhZ3MoKXtjb25zdCB0PV9yKCkucGx1Z2luUm91dGUoImRpc3RyaWJ1dGlvbnMiLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4oKHQ9PntpZihTZS5leHBvcnRzLmlzRXF1YWwodCx0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtjb25zdCBlPVNlLmV4cG9ydHMubWFwVmFsdWVzKHQsKHQ9Pk9iamVjdC5rZXlzKHQpKSksbj1hcihlKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PW4ubGVuZ3RoKSx0aGlzLnNldCgiX3J1blRvVGFnIixlKSx0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsdCksdGhpcy5hc3luYygoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSkpfSkpfV9yZWxvYWREaXN0cmlidXRpb25zKCl7dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWRpc3RyaWJ1dGlvbi1sb2FkZXIiKS5mb3JFYWNoKCh0PT57dC5yZWxvYWQoKX0pKX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXtyZXR1cm4gTXIodGhpcy5fcnVuVG9UYWcsdGhpcy5fc2VsZWN0ZWRSdW5zLHRoaXMuX3RhZ0ZpbHRlcil9X3RhZ01ldGFkYXRhKHQsZSxuKXtyZXR1cm4gdFtlXVtuXX19O05DdC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9InhUeXBlU2VsZWN0b3IiCiAgICAgICAgICAgICAgbmFtZT0iSG9yaXpvbnRhbCBheGlzIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e194VHlwZX19IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0ic3RlcCI+c3RlcDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gZGlzdHJpYnV0aW9uIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhpc3RvZ3JhbSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgICAoSGlzdG9ncmFtcyBhbmQgZGlzdHJpYnV0aW9ucyBib3RoIHVzZSB0aGUgaGlzdG9ncmFtIHN1bW1hcnkKICAgICAgICAgICAgICAgIG9wZXJhdGlvbi4pCiAgICAgICAgICAgICAgPC9saT4KCiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLWRpc3RyaWJ1dGlvbi1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW4sIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICB4LXR5cGU9IltbX3hUeXBlXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgID48L3RmLWRpc3RyaWJ1dGlvbi1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE5DdC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTkN0LnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxOQ3QucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLE5DdC5wcm90b3R5cGUsIl9ydW5Ub1RhZyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxOQ3QucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTkN0LnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxOQ3QucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTkN0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixkcildLE5DdC5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtzKCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLE5DdC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKSxOQ3Q9dChbaSgidGYtZGlzdHJpYnV0aW9uLWRhc2hib2FyZCIpXSxOQ3QpO3ZhciBJQ3Q9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsTGlzdGVuS2V5OmRzLGFkZEhhc2hMaXN0ZW5lcjptcyxhZGRTdG9yYWdlTGlzdGVuZXI6Z3MsZmlyZVN0b3JhZ2VDaGFuZ2VkOl9zLHJlbW92ZUhhc2hMaXN0ZW5lckJ5S2V5OnlzLHJlbW92ZVN0b3JhZ2VMaXN0ZW5lckJ5S2V5OnZzLGdldFVybEhhc2hEaWN0OmZ1bmN0aW9uIFJDdCgpe3JldHVybiBDc30sRElTQU1CSUdVQVRPUjoiZGlzYW1iaWd1YXRvciIsZ2V0U3RyaW5nOk5zLHNldFN0cmluZzpJcyxnZXRTdHJpbmdJbml0aWFsaXplcjpScyxnZXRTdHJpbmdPYnNlcnZlcjpPcyxkaXNwb3NlU3RyaW5nQmluZGluZzp6cyxnZXRCb29sZWFuOkRzLHNldEJvb2xlYW46QnMsZ2V0Qm9vbGVhbkluaXRpYWxpemVyOkhzLGdldEJvb2xlYW5PYnNlcnZlcjpGcyxkaXNwb3NlQm9vbGVhbkJpbmRpbmc6VnMsZ2V0TnVtYmVyOlVzLHNldE51bWJlcjpqcyxnZXROdW1iZXJJbml0aWFsaXplcjpHcyxnZXROdW1iZXJPYnNlcnZlcjpXcyxkaXNwb3NlTnVtYmVyQmluZGluZzpxcyxnZXRPYmplY3Q6WXMsc2V0T2JqZWN0OlhzLGdldE9iamVjdEluaXRpYWxpemVyOiRzLGdldE9iamVjdE9ic2VydmVyOktzLGRpc3Bvc2VPYmplY3RCaW5kaW5nOlpzLG1ha2VCaW5kaW5nczpKcyxtaWdyYXRlTGVnYWN5VVJMU2NoZW1lOmZ1bmN0aW9uIE9DdCgpe2NvbnN0IHQ9bmV3IFNldChbImV4YW1wbGVzUGF0aCIsImhpZGVNb2RlbFBhbmUyIiwibW9kZWxOYW1lMSIsIm1vZGVsTmFtZTIiLCJpbmZlcmVuY2VBZGRyZXNzMSIsImluZmVyZW5jZUFkZHJlc3MyIiwibW9kZWxUeXBlIiwibW9kZWxWZXJzaW9uMSIsIm1vZGVsVmVyc2lvbjIiLCJtb2RlbFNpZ25hdHVyZTEiLCJtb2RlbFNpZ25hdHVyZTIiLCJtYXhFeGFtcGxlcyIsImxhYmVsVm9jYWJQYXRoIiwibXVsdGlDbGFzcyIsInNlcXVlbmNlRXhhbXBsZXMiLCJtYXhDbGFzc2VzVG9EaXNwbGF5Iiwic2FtcGxpbmdPZGRzIiwidXNlUHJlZGljdEFwaSIsInByZWRpY3RJbnB1dFRlbnNvciIsInByZWRpY3RPdXRwdXRUZW5zb3IiXSksZT1rcyhBcygpKTtpZigid2hhdGlmIj09PWUuX190YWJfXylmb3IobGV0IG4gb2YgdCluIGluIGUmJihlW2BwLndoYXRpZi4ke259YF09ZVtuXSk7THMoUHMoZSkpLChmdW5jdGlvbiBuKHQpe0NzPXR9KShlKX19KSx6Q3Q9ZnVuY3Rpb24gREN0KHQsZSl7cmV0dXJuIHQ9PT1lfHx0IT10JiZlIT1lfSxCQ3Q9ekN0LEhDdD1mdW5jdGlvbiBGQ3QodCxlKXtmb3IodmFyIG49dC5sZW5ndGg7bi0tOylpZihCQ3QodFtuXVswXSxlKSlyZXR1cm4gbjtyZXR1cm4tMX0sVkN0PUhDdCxVQ3Q9QXJyYXkucHJvdG90eXBlLnNwbGljZSxqQ3Q9SEN0LEdDdD1IQ3QsV0N0PUhDdDtmdW5jdGlvbiBxQ3QodCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciBpPXRbZV07dGhpcy5zZXQoaVswXSxpWzFdKX19cUN0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBZQ3QoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfSxxQ3QucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBYQ3QodCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPVZDdChlLHQpO3JldHVybiEobjwwfHwobj09ZS5sZW5ndGgtMT9lLnBvcCgpOlVDdC5jYWxsKGUsbiwxKSwtLXRoaXMuc2l6ZSwwKSl9LHFDdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uICRDdCh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLG49akN0KGUsdCk7cmV0dXJuIG48MD92b2lkIDA6ZVtuXVsxXX0scUN0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gS0N0KHQpe3JldHVybiBHQ3QodGhpcy5fX2RhdGFfXyx0KT4tMX0scUN0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gWkN0KHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXyxpPVdDdChuLHQpO3JldHVybiBpPDA/KCsrdGhpcy5zaXplLG4ucHVzaChbdCxlXSkpOm5baV1bMV09ZSx0aGlzfTt2YXIgSkN0LFFDdD1xQ3QsdEF0PVFDdCxlQXQ9Im9iamVjdCI9PXR5cGVvZiB2ZSYmdmUmJnZlLk9iamVjdD09PU9iamVjdCYmdmUsbkF0PSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsaUF0PWVBdHx8bkF0fHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLHJBdD1pQXQuU3ltYm9sLG9BdD1PYmplY3QucHJvdG90eXBlLGFBdD1vQXQuaGFzT3duUHJvcGVydHksc0F0PW9BdC50b1N0cmluZyxsQXQ9ckF0P3JBdC50b1N0cmluZ1RhZzp2b2lkIDAsY0F0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsdUF0PXJBdD9yQXQudG9TdHJpbmdUYWc6dm9pZCAwLGhBdD1mdW5jdGlvbiBkQXQodCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwPT09dD8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxsXSI6dUF0JiZ1QXQgaW4gT2JqZWN0KHQpPyhmdW5jdGlvbiBlKHQpe3ZhciBlPWFBdC5jYWxsKHQsbEF0KSxuPXRbbEF0XTt0cnl7dFtsQXRdPXZvaWQgMDt2YXIgaT0hMH1jYXRjaCh0KXt9dmFyIHI9c0F0LmNhbGwodCk7cmV0dXJuIGkmJihlP3RbbEF0XT1uOmRlbGV0ZSB0W2xBdF0pLHJ9KSh0KTooZnVuY3Rpb24gbih0KXtyZXR1cm4gY0F0LmNhbGwodCl9KSh0KX0scEF0PWZ1bmN0aW9uIGZBdCh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbCE9dCYmKCJvYmplY3QiPT1lfHwiZnVuY3Rpb24iPT1lKX0sbUF0PWhBdCxnQXQ9cEF0LF9BdD1mdW5jdGlvbiB5QXQodCl7aWYoIWdBdCh0KSlyZXR1cm4hMTt2YXIgZT1tQXQodCk7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09ZXx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09ZXx8IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT1lfHwiW29iamVjdCBQcm94eV0iPT1lfSx2QXQ9aUF0WyJfX2NvcmUtanNfc2hhcmVkX18iXSxiQXQ9KEpDdD0vW14uXSskLy5leGVjKHZBdCYmdkF0LmtleXMmJnZBdC5rZXlzLklFX1BST1RPfHwiIikpPyJTeW1ib2woc3JjKV8xLiIrSkN0OiIiLHhBdD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsd0F0PWZ1bmN0aW9uIFNBdCh0KXtpZihudWxsIT10KXt0cnl7cmV0dXJuIHhBdC5jYWxsKHQpfWNhdGNoKHQpe310cnl7cmV0dXJuIHQrIiJ9Y2F0Y2godCl7fX1yZXR1cm4iIn0sTUF0PV9BdCxFQXQ9cEF0LFRBdD13QXQsQ0F0PS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLEFBdD1SZWdFeHAoIl4iK0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpLGtBdD1mdW5jdGlvbiBMQXQodCxlKXt2YXIgbj0oZnVuY3Rpb24gaSh0LGUpe3JldHVybiBudWxsPT10P3ZvaWQgMDp0W2VdfSkodCxlKTtyZXR1cm4oZnVuY3Rpb24gcih0KXtyZXR1cm4hKCFFQXQodCl8fChmdW5jdGlvbiBlKHQpe3JldHVybiEhYkF0JiZiQXQgaW4gdH0pKHQpKSYmKE1BdCh0KT9BQXQ6Q0F0KS50ZXN0KFRBdCh0KSl9KShuKT9uOnZvaWQgMH0sUEF0PWtBdChpQXQsIk1hcCIpLE5BdD1rQXQoT2JqZWN0LCJjcmVhdGUiKSxJQXQ9TkF0LFJBdD1OQXQsT0F0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksekF0PU5BdCxEQXQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxCQXQ9TkF0O2Z1bmN0aW9uIEhBdCh0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxuOyl7dmFyIGk9dFtlXTt0aGlzLnNldChpWzBdLGlbMV0pfX1IQXQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIEZBdCgpe3RoaXMuX19kYXRhX189SUF0P0lBdChudWxsKTp7fSx0aGlzLnNpemU9MH0sSEF0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gVkF0KHQpe3ZhciBlPXRoaXMuaGFzKHQpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t0XTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfSxIQXQucHJvdG90eXBlLmdldD1mdW5jdGlvbiBVQXQodCl7dmFyIGU9dGhpcy5fX2RhdGFfXztpZihSQXQpe3ZhciBuPWVbdF07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09bj92b2lkIDA6bn1yZXR1cm4gT0F0LmNhbGwoZSx0KT9lW3RdOnZvaWQgMH0sSEF0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gakF0KHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIHpBdD92b2lkIDAhPT1lW3RdOkRBdC5jYWxsKGUsdCl9LEhBdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIEdBdCh0LGUpe3ZhciBuPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXModCk/MDoxLG5bdF09QkF0JiZ2b2lkIDA9PT1lPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjplLHRoaXN9O3ZhciBXQXQ9SEF0LHFBdD1RQ3QsWUF0PVBBdCxYQXQ9ZnVuY3Rpb24gJEF0KHQsZSl7dmFyIG49dC5fX2RhdGFfXztyZXR1cm4oZnVuY3Rpb24gaSh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4ic3RyaW5nIj09ZXx8Im51bWJlciI9PWV8fCJzeW1ib2wiPT1lfHwiYm9vbGVhbiI9PWU/Il9fcHJvdG9fXyIhPT10Om51bGw9PT10fSkoZSk/blsic3RyaW5nIj09dHlwZW9mIGU/InN0cmluZyI6Imhhc2giXTpuLm1hcH0sS0F0PVhBdCxaQXQ9WEF0LEpBdD1YQXQsUUF0PVhBdDtmdW5jdGlvbiB0a3QodCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciBpPXRbZV07dGhpcy5zZXQoaVswXSxpWzFdKX19dGt0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBla3QoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBXQXQsbWFwOm5ldyhZQXR8fHFBdCksc3RyaW5nOm5ldyBXQXR9fSx0a3QucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBua3QodCl7dmFyIGU9S0F0KHRoaXMsdCkuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9LHRrdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIGlrdCh0KXtyZXR1cm4gWkF0KHRoaXMsdCkuZ2V0KHQpfSx0a3QucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBya3QodCl7cmV0dXJuIEpBdCh0aGlzLHQpLmhhcyh0KX0sdGt0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gb2t0KHQsZSl7dmFyIG49UUF0KHRoaXMsdCksaT1uLnNpemU7cmV0dXJuIG4uc2V0KHQsZSksdGhpcy5zaXplKz1uLnNpemU9PWk/MDoxLHRoaXN9O3ZhciBha3Q9dGt0LHNrdD1RQ3QsbGt0PVBBdCxja3Q9YWt0LHVrdD1RQ3Q7ZnVuY3Rpb24gaGt0KHQpe3ZhciBlPXRoaXMuX19kYXRhX189bmV3IHVrdCh0KTt0aGlzLnNpemU9ZS5zaXplfWhrdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gZGt0KCl7dGhpcy5fX2RhdGFfXz1uZXcgdEF0LHRoaXMuc2l6ZT0wfSxoa3QucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBwa3QodCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPWUuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemU9ZS5zaXplLG59LGhrdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIGZrdCh0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQodCl9LGhrdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIG1rdCh0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9LGhrdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIGdrdCh0LGUpe3ZhciBuPXRoaXMuX19kYXRhX187aWYobiBpbnN0YW5jZW9mIHNrdCl7dmFyIGk9bi5fX2RhdGFfXztpZighbGt0fHxpLmxlbmd0aDwxOTkpcmV0dXJuIGkucHVzaChbdCxlXSksdGhpcy5zaXplPSsrbi5zaXplLHRoaXM7bj10aGlzLl9fZGF0YV9fPW5ldyBja3QoaSl9cmV0dXJuIG4uc2V0KHQsZSksdGhpcy5zaXplPW4uc2l6ZSx0aGlzfTt2YXIgX2t0PWhrdCx5a3Q9ZnVuY3Rpb24gdmt0KHQsZSl7Zm9yKHZhciBuPS0xLGk9bnVsbD09dD8wOnQubGVuZ3RoOysrbjxpJiYhMSE9PWUodFtuXSxuLHQpOyk7cmV0dXJuIHR9LGJrdD1rQXQseGt0PShmdW5jdGlvbigpe3RyeXt2YXIgdD1ia3QoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiB0KHt9LCIiLHt9KSx0fWNhdGNoKHQpe319KSgpLHdrdD14a3QsU2t0PWZ1bmN0aW9uIE1rdCh0LGUsbil7Il9fcHJvdG9fXyI9PWUmJndrdD93a3QodCxlLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpuLHdyaXRhYmxlOiEwfSk6dFtlXT1ufSxFa3Q9U2t0LFRrdD16Q3QsQ2t0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksQWt0PWZ1bmN0aW9uIGtrdCh0LGUsbil7dmFyIGk9dFtlXTtDa3QuY2FsbCh0LGUpJiZUa3QoaSxuKSYmKHZvaWQgMCE9PW58fGUgaW4gdCl8fEVrdCh0LGUsbil9LExrdD1Ba3QsUGt0PVNrdCxOa3Q9ZnVuY3Rpb24gSWt0KHQsZSxuLGkpe3ZhciByPSFuO258fChuPXt9KTtmb3IodmFyIG89LTEsYT1lLmxlbmd0aDsrK288YTspe3ZhciBzPWVbb10sbD1pP2kobltzXSx0W3NdLHMsbix0KTp2b2lkIDA7dm9pZCAwPT09bCYmKGw9dFtzXSkscj9Qa3QobixzLGwpOkxrdChuLHMsbCl9cmV0dXJuIG59LFJrdD1mdW5jdGlvbiBPa3QodCl7cmV0dXJuIG51bGwhPXQmJiJvYmplY3QiPT10eXBlb2YgdH0semt0PWhBdCxEa3Q9Umt0LEJrdD1mdW5jdGlvbiBIa3QodCl7cmV0dXJuIERrdCh0KSYmIltvYmplY3QgQXJndW1lbnRzXSI9PXprdCh0KX0sRmt0PVJrdCxWa3Q9T2JqZWN0LnByb3RvdHlwZSxVa3Q9Vmt0Lmhhc093blByb3BlcnR5LGprdD1Wa3QucHJvcGVydHlJc0VudW1lcmFibGUsR2t0PUJrdCgoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSkoKSk/Qmt0OmZ1bmN0aW9uKHQpe3JldHVybiBGa3QodCkmJlVrdC5jYWxsKHQsImNhbGxlZSIpJiYhamt0LmNhbGwodCwiY2FsbGVlIil9LFdrdD1BcnJheS5pc0FycmF5LHFrdD17ZXhwb3J0czp7fX0sWWt0PWZ1bmN0aW9uIFhrdCgpe3JldHVybiExfTshKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZSYmIWUubm9kZVR5cGUmJmUsaT1uJiZ0JiYhdC5ub2RlVHlwZSYmdCxyPWkmJmkuZXhwb3J0cz09PW4/aUF0LkJ1ZmZlcjp2b2lkIDA7dC5leHBvcnRzPShyP3IuaXNCdWZmZXI6dm9pZCAwKXx8WWt0fSkocWt0LHFrdC5leHBvcnRzKTt2YXIgJGt0PS9eKD86MHxbMS05XVxkKikkLyxLa3Q9ZnVuY3Rpb24gWmt0KHQsZSl7dmFyIG49dHlwZW9mIHQ7cmV0dXJuISEoZT1udWxsPT1lPzkwMDcxOTkyNTQ3NDA5OTE6ZSkmJigibnVtYmVyIj09bnx8InN5bWJvbCIhPW4mJiRrdC50ZXN0KHQpKSYmdD4tMSYmdCUxPT0wJiZ0PGV9LEprdD1mdW5jdGlvbiBRa3QodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pi0xJiZ0JTE9PTAmJnQ8PTkwMDcxOTkyNTQ3NDA5OTF9LHRMdD1oQXQsZUx0PUprdCxuTHQ9Umt0LGlMdD17fTtpTHRbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPWlMdFsiW29iamVjdCBGbG9hdDY0QXJyYXldIl09aUx0WyJbb2JqZWN0IEludDhBcnJheV0iXT1pTHRbIltvYmplY3QgSW50MTZBcnJheV0iXT1pTHRbIltvYmplY3QgSW50MzJBcnJheV0iXT1pTHRbIltvYmplY3QgVWludDhBcnJheV0iXT1pTHRbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09aUx0WyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPWlMdFsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxpTHRbIltvYmplY3QgQXJndW1lbnRzXSJdPWlMdFsiW29iamVjdCBBcnJheV0iXT1pTHRbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09aUx0WyJbb2JqZWN0IEJvb2xlYW5dIl09aUx0WyJbb2JqZWN0IERhdGFWaWV3XSJdPWlMdFsiW29iamVjdCBEYXRlXSJdPWlMdFsiW29iamVjdCBFcnJvcl0iXT1pTHRbIltvYmplY3QgRnVuY3Rpb25dIl09aUx0WyJbb2JqZWN0IE1hcF0iXT1pTHRbIltvYmplY3QgTnVtYmVyXSJdPWlMdFsiW29iamVjdCBPYmplY3RdIl09aUx0WyJbb2JqZWN0IFJlZ0V4cF0iXT1pTHRbIltvYmplY3QgU2V0XSJdPWlMdFsiW29iamVjdCBTdHJpbmddIl09aUx0WyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7dmFyIHJMdD1mdW5jdGlvbiBvTHQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfX0sYUx0PXtleHBvcnRzOnt9fTshKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZSYmIWUubm9kZVR5cGUmJmUsaT1uJiZ0JiYhdC5ub2RlVHlwZSYmdCxyPWkmJmkuZXhwb3J0cz09PW4mJmVBdC5wcm9jZXNzLG89KGZ1bmN0aW9uKCl7dHJ5e3JldHVybiBpJiZpLnJlcXVpcmUmJmkucmVxdWlyZSgidXRpbCIpLnR5cGVzfHxyJiZyLmJpbmRpbmcmJnIuYmluZGluZygidXRpbCIpfWNhdGNoKHQpe319KSgpO3QuZXhwb3J0cz1vfSkoYUx0LGFMdC5leHBvcnRzKTt2YXIgc0x0PWFMdC5leHBvcnRzLGxMdD1zTHQmJnNMdC5pc1R5cGVkQXJyYXksY0x0PWxMdD9yTHQobEx0KTpmdW5jdGlvbiB1THQodCl7cmV0dXJuIG5MdCh0KSYmZUx0KHQubGVuZ3RoKSYmISFpTHRbdEx0KHQpXX0saEx0PUdrdCxkTHQ9V2t0LHBMdD1xa3QuZXhwb3J0cyxmTHQ9S2t0LG1MdD1jTHQsZ0x0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksX0x0PWZ1bmN0aW9uIHlMdCh0LGUpe3ZhciBuPWRMdCh0KSxpPSFuJiZoTHQodCkscj0hbiYmIWkmJnBMdCh0KSxvPSFuJiYhaSYmIXImJm1MdCh0KSxhPW58fGl8fHJ8fG8scz1hPyhmdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciBuPS0xLGk9QXJyYXkodCk7KytuPHQ7KWlbbl09ZShuKTtyZXR1cm4gaX0pKHQubGVuZ3RoLFN0cmluZyk6W10sYz1zLmxlbmd0aDtmb3IodmFyIHUgaW4gdCkhZSYmIWdMdC5jYWxsKHQsdSl8fGEmJigibGVuZ3RoIj09dXx8ciYmKCJvZmZzZXQiPT11fHwicGFyZW50Ij09dSl8fG8mJigiYnVmZmVyIj09dXx8ImJ5dGVMZW5ndGgiPT11fHwiYnl0ZU9mZnNldCI9PXUpfHxmTHQodSxjKSl8fHMucHVzaCh1KTtyZXR1cm4gc30sdkx0PU9iamVjdC5wcm90b3R5cGUsYkx0PWZ1bmN0aW9uIHhMdCh0KXt2YXIgZT10JiZ0LmNvbnN0cnVjdG9yO3JldHVybiB0PT09KCJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLnByb3RvdHlwZXx8dkx0KX0sd0x0PWZ1bmN0aW9uIFNMdCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdChlKG4pKX19LE1MdD13THQoT2JqZWN0LmtleXMsT2JqZWN0KSxFTHQ9Ykx0LFRMdD1NTHQsQ0x0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksQUx0PWZ1bmN0aW9uIGtMdCh0KXtpZighRUx0KHQpKXJldHVybiBUTHQodCk7dmFyIGU9W107Zm9yKHZhciBuIGluIE9iamVjdCh0KSlDTHQuY2FsbCh0LG4pJiYiY29uc3RydWN0b3IiIT1uJiZlLnB1c2gobik7cmV0dXJuIGV9LExMdD1fQXQsUEx0PUprdCxOTHQ9ZnVuY3Rpb24gSUx0KHQpe3JldHVybiBudWxsIT10JiZQTHQodC5sZW5ndGgpJiYhTEx0KHQpfSxSTHQ9X0x0LE9MdD1BTHQsekx0PU5MdCxETHQ9ZnVuY3Rpb24gQkx0KHQpe3JldHVybiB6THQodCk/Ukx0KHQpOk9MdCh0KX0sSEx0PU5rdCxGTHQ9REx0LFZMdD1wQXQsVUx0PWJMdCxqTHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxHTHQ9X0x0LFdMdD1OTHQscUx0PWZ1bmN0aW9uIFlMdCh0KXtyZXR1cm4gV0x0KHQpP0dMdCh0LCEwKTooZnVuY3Rpb24gZSh0KXtpZighVkx0KHQpKXJldHVybihmdW5jdGlvbiBlKHQpe3ZhciBlPVtdO2lmKG51bGwhPXQpZm9yKHZhciBuIGluIE9iamVjdCh0KSllLnB1c2gobik7cmV0dXJuIGV9KSh0KTt2YXIgbj1VTHQodCksaT1bXTtmb3IodmFyIHIgaW4gdCkoImNvbnN0cnVjdG9yIiE9cnx8IW4mJmpMdC5jYWxsKHQscikpJiZpLnB1c2gocik7cmV0dXJuIGl9KSh0KX0sWEx0PU5rdCwkTHQ9cUx0LEtMdD17ZXhwb3J0czp7fX07IShmdW5jdGlvbih0LGUpe3ZhciBuPWUmJiFlLm5vZGVUeXBlJiZlLGk9biYmdCYmIXQubm9kZVR5cGUmJnQscj1pJiZpLmV4cG9ydHM9PT1uP2lBdC5CdWZmZXI6dm9pZCAwLG89cj9yLmFsbG9jVW5zYWZlOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24gYSh0LGUpe2lmKGUpcmV0dXJuIHQuc2xpY2UoKTt2YXIgbj10Lmxlbmd0aCxpPW8/byhuKTpuZXcgdC5jb25zdHJ1Y3RvcihuKTtyZXR1cm4gdC5jb3B5KGkpLGl9fSkoS0x0LEtMdC5leHBvcnRzKTt2YXIgWkx0PWZ1bmN0aW9uIEpMdCh0LGUpe3ZhciBuPS0xLGk9dC5sZW5ndGg7Zm9yKGV8fChlPUFycmF5KGkpKTsrK248aTspZVtuXT10W25dO3JldHVybiBlfSxRTHQ9ZnVuY3Rpb24gdFB0KHQsZSl7Zm9yKHZhciBuPS0xLGk9bnVsbD09dD8wOnQubGVuZ3RoLHI9MCxvPVtdOysrbjxpOyl7dmFyIGE9dFtuXTtlKGEsbix0KSYmKG9bcisrXT1hKX1yZXR1cm4gb30sZVB0PWZ1bmN0aW9uIG5QdCgpe3JldHVybltdfSxpUHQ9UUx0LHJQdD1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLG9QdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGFQdD1vUHQ/ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/W106KHQ9T2JqZWN0KHQpLGlQdChvUHQodCksKGZ1bmN0aW9uKGUpe3JldHVybiByUHQuY2FsbCh0LGUpfSkpKX06ZVB0LHNQdD1Oa3QsbFB0PWFQdCxjUHQ9ZnVuY3Rpb24gdVB0KHQsZSl7Zm9yKHZhciBuPS0xLGk9ZS5sZW5ndGgscj10Lmxlbmd0aDsrK248aTspdFtyK25dPWVbbl07cmV0dXJuIHR9LGhQdD13THQoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCksZFB0PWNQdCxwUHQ9aFB0LGZQdD1hUHQsbVB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdO3Q7KWRQdChlLGZQdCh0KSksdD1wUHQodCk7cmV0dXJuIGV9OmVQdCxnUHQ9Tmt0LF9QdD1tUHQseVB0PWNQdCx2UHQ9V2t0LGJQdD1mdW5jdGlvbiB4UHQodCxlLG4pe3ZhciBpPWUodCk7cmV0dXJuIHZQdCh0KT9pOnlQdChpLG4odCkpfSx3UHQ9YlB0LFNQdD1hUHQsTVB0PURMdCxFUHQ9ZnVuY3Rpb24gVFB0KHQpe3JldHVybiB3UHQodCxNUHQsU1B0KX0sQ1B0PWJQdCxBUHQ9bVB0LGtQdD1xTHQsTFB0PWtBdChpQXQsIkRhdGFWaWV3IiksUFB0PWtBdChpQXQsIlByb21pc2UiKSxOUHQ9a0F0KGlBdCwiU2V0IiksSVB0PUxQdCxSUHQ9UEF0LE9QdD1QUHQselB0PU5QdCxEUHQ9a0F0KGlBdCwiV2Vha01hcCIpLEJQdD1oQXQsSFB0PXdBdCxGUHQ9IltvYmplY3QgTWFwXSIsVlB0PSJbb2JqZWN0IFByb21pc2VdIixVUHQ9IltvYmplY3QgU2V0XSIsalB0PSJbb2JqZWN0IFdlYWtNYXBdIixHUHQ9IltvYmplY3QgRGF0YVZpZXddIixXUHQ9SFB0KElQdCkscVB0PUhQdChSUHQpLFlQdD1IUHQoT1B0KSxYUHQ9SFB0KHpQdCksJFB0PUhQdChEUHQpLEtQdD1CUHQ7KElQdCYmS1B0KG5ldyBJUHQobmV3IEFycmF5QnVmZmVyKDEpKSkhPUdQdHx8UlB0JiZLUHQobmV3IFJQdCkhPUZQdHx8T1B0JiZLUHQoT1B0LnJlc29sdmUoKSkhPVZQdHx8elB0JiZLUHQobmV3IHpQdCkhPVVQdHx8RFB0JiZLUHQobmV3IERQdCkhPWpQdCkmJihLUHQ9ZnVuY3Rpb24odCl7dmFyIGU9QlB0KHQpLG49IltvYmplY3QgT2JqZWN0XSI9PWU/dC5jb25zdHJ1Y3Rvcjp2b2lkIDAsaT1uP0hQdChuKToiIjtpZihpKXN3aXRjaChpKXtjYXNlIFdQdDpyZXR1cm4gR1B0O2Nhc2UgcVB0OnJldHVybiBGUHQ7Y2FzZSBZUHQ6cmV0dXJuIFZQdDtjYXNlIFhQdDpyZXR1cm4gVVB0O2Nhc2UgJFB0OnJldHVybiBqUHR9cmV0dXJuIGV9KTt2YXIgWlB0PUtQdCxKUHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxRUHQ9aUF0LlVpbnQ4QXJyYXksdE50PVFQdCxlTnQ9ZnVuY3Rpb24gbk50KHQpe3ZhciBlPW5ldyB0LmNvbnN0cnVjdG9yKHQuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyB0TnQoZSkuc2V0KG5ldyB0TnQodCkpLGV9LGlOdD1lTnQsck50PS9cdyokLyxvTnQ9ckF0P3JBdC5wcm90b3R5cGU6dm9pZCAwLGFOdD1vTnQ/b050LnZhbHVlT2Y6dm9pZCAwLHNOdD1lTnQsbE50PWZ1bmN0aW9uIGNOdCh0LGUpe3ZhciBuPWU/c050KHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3Iobix0LmJ5dGVPZmZzZXQsdC5sZW5ndGgpfSx1TnQ9ZU50LGhOdD1sTnQsZE50PXBBdCxwTnQ9T2JqZWN0LmNyZWF0ZSxmTnQ9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gZnVuY3Rpb24oZSl7aWYoIWROdChlKSlyZXR1cm57fTtpZihwTnQpcmV0dXJuIHBOdChlKTt0LnByb3RvdHlwZT1lO3ZhciBuPW5ldyB0O3JldHVybiB0LnByb3RvdHlwZT12b2lkIDAsbn19KSgpLG1OdD1mTnQsZ050PWhQdCxfTnQ9Ykx0LHlOdD1mdW5jdGlvbiB2TnQodCl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQuY29uc3RydWN0b3J8fF9OdCh0KT97fTptTnQoZ050KHQpKX0sYk50PVpQdCx4TnQ9Umt0LHdOdD1hTHQuZXhwb3J0cyxTTnQ9d050JiZ3TnQuaXNNYXAsTU50PVNOdD9yTHQoU050KTpmdW5jdGlvbiBFTnQodCl7cmV0dXJuIHhOdCh0KSYmIltvYmplY3QgTWFwXSI9PWJOdCh0KX0sVE50PVpQdCxDTnQ9Umt0LEFOdD1hTHQuZXhwb3J0cyxrTnQ9QU50JiZBTnQuaXNTZXQsTE50PWtOdD9yTHQoa050KTpmdW5jdGlvbiBQTnQodCl7cmV0dXJuIENOdCh0KSYmIltvYmplY3QgU2V0XSI9PVROdCh0KX0sTk50PV9rdCxJTnQ9eWt0LFJOdD1Ba3QsT050PUtMdC5leHBvcnRzLHpOdD1aTHQsRE50PUVQdCxCTnQ9ZnVuY3Rpb24gSE50KHQpe3JldHVybiBDUHQodCxrUHQsQVB0KX0sRk50PVpQdCxWTnQ9eU50LFVOdD1Xa3Qsak50PXFrdC5leHBvcnRzLEdOdD1NTnQsV050PXBBdCxxTnQ9TE50LFlOdD1ETHQsWE50PXFMdCwkTnQ9IltvYmplY3QgQXJndW1lbnRzXSIsS050PSJbb2JqZWN0IEZ1bmN0aW9uXSIsWk50PSJbb2JqZWN0IE9iamVjdF0iLEpOdD17fTtKTnRbJE50XT1KTnRbIltvYmplY3QgQXJyYXldIl09Sk50WyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPUpOdFsiW29iamVjdCBEYXRhVmlld10iXT1KTnRbIltvYmplY3QgQm9vbGVhbl0iXT1KTnRbIltvYmplY3QgRGF0ZV0iXT1KTnRbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPUpOdFsiW29iamVjdCBGbG9hdDY0QXJyYXldIl09Sk50WyJbb2JqZWN0IEludDhBcnJheV0iXT1KTnRbIltvYmplY3QgSW50MTZBcnJheV0iXT1KTnRbIltvYmplY3QgSW50MzJBcnJheV0iXT1KTnRbIltvYmplY3QgTWFwXSJdPUpOdFsiW29iamVjdCBOdW1iZXJdIl09Sk50W1pOdF09Sk50WyJbb2JqZWN0IFJlZ0V4cF0iXT1KTnRbIltvYmplY3QgU2V0XSJdPUpOdFsiW29iamVjdCBTdHJpbmddIl09Sk50WyJbb2JqZWN0IFN5bWJvbF0iXT1KTnRbIltvYmplY3QgVWludDhBcnJheV0iXT1KTnRbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09Sk50WyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPUpOdFsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxKTnRbIltvYmplY3QgRXJyb3JdIl09Sk50W0tOdF09Sk50WyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7dmFyIFFOdD1mdW5jdGlvbiB0KGUsbixpLHIsbyxhKXt2YXIgcyxsPTEmbixjPTImbix1PTQmbjtpZihpJiYocz1vP2koZSxyLG8sYSk6aShlKSksdm9pZCAwIT09cylyZXR1cm4gcztpZighV050KGUpKXJldHVybiBlO3ZhciBoPVVOdChlKTtpZihoKXtpZihzPShmdW5jdGlvbiBkKHQpe3ZhciBlPXQubGVuZ3RoLG49bmV3IHQuY29uc3RydWN0b3IoZSk7cmV0dXJuIGUmJiJzdHJpbmciPT10eXBlb2YgdFswXSYmSlB0LmNhbGwodCwiaW5kZXgiKSYmKG4uaW5kZXg9dC5pbmRleCxuLmlucHV0PXQuaW5wdXQpLG59KShlKSwhbClyZXR1cm4gek50KGUscyl9ZWxzZXt2YXIgcD1GTnQoZSksZj1wPT1LTnR8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PXA7aWYoak50KGUpKXJldHVybiBPTnQoZSxsKTtpZihwPT1aTnR8fHA9PSROdHx8ZiYmIW8pe2lmKHM9Y3x8Zj97fTpWTnQoZSksIWwpcmV0dXJuIGM/KGZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZ1B0KHQsX1B0KHQpLGUpfSkoZSwoZnVuY3Rpb24gbSh0LGUpe3JldHVybiB0JiZYTHQoZSwkTHQoZSksdCl9KShzLGUpKTooZnVuY3Rpb24geSh0LGUpe3JldHVybiBzUHQodCxsUHQodCksZSl9KShlLChmdW5jdGlvbiBfKHQsZSl7cmV0dXJuIHQmJkhMdChlLEZMdChlKSx0KX0pKHMsZSkpfWVsc2V7aWYoIUpOdFtwXSlyZXR1cm4gbz9lOnt9O3M9KGZ1bmN0aW9uIHYodCxlLG4pe3ZhciBpPXQuY29uc3RydWN0b3I7c3dpdGNoKGUpe2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiB1TnQodCk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOnJldHVybiBuZXcgaSgrdCk7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6cmV0dXJuKGZ1bmN0aW9uIHIodCxlKXt2YXIgbj1lP2lOdCh0LmJ1ZmZlcik6dC5idWZmZXI7cmV0dXJuIG5ldyB0LmNvbnN0cnVjdG9yKG4sdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCl9KSh0LG4pO2Nhc2UiW29iamVjdCBGbG9hdDMyQXJyYXldIjpjYXNlIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOmNhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpjYXNlIltvYmplY3QgVWludDhBcnJheV0iOmNhc2UiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiBoTnQodCxuKTtjYXNlIltvYmplY3QgTWFwXSI6cmV0dXJuIG5ldyBpO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBpKHQpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4oZnVuY3Rpb24gbyh0KXt2YXIgZT1uZXcgdC5jb25zdHJ1Y3Rvcih0LnNvdXJjZSxyTnQuZXhlYyh0KSk7cmV0dXJuIGUubGFzdEluZGV4PXQubGFzdEluZGV4LGV9KSh0KTtjYXNlIltvYmplY3QgU2V0XSI6cmV0dXJuIG5ldyBpO2Nhc2UiW29iamVjdCBTeW1ib2xdIjpyZXR1cm4oZnVuY3Rpb24gYSh0KXtyZXR1cm4gYU50P09iamVjdChhTnQuY2FsbCh0KSk6e319KSh0KX19KShlLHAsbCl9fWF8fChhPW5ldyBOTnQpO3ZhciBiPWEuZ2V0KGUpO2lmKGIpcmV0dXJuIGI7YS5zZXQoZSxzKSxxTnQoZSk/ZS5mb3JFYWNoKChmdW5jdGlvbihyKXtzLmFkZCh0KHIsbixpLHIsZSxhKSl9KSk6R050KGUpJiZlLmZvckVhY2goKGZ1bmN0aW9uKHIsbyl7cy5zZXQobyx0KHIsbixpLG8sZSxhKSl9KSk7dmFyIHg9aD92b2lkIDA6KHU/Yz9CTnQ6RE50OmM/WE50OllOdCkoZSk7cmV0dXJuIElOdCh4fHxlLChmdW5jdGlvbihyLG8pe3gmJihyPWVbbz1yXSksUk50KHMsbyx0KHIsbixpLG8sZSxhKSl9KSksc30sdEl0PVFOdCxlSXQ9ZnVuY3Rpb24gbkl0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0saUl0PShmdW5jdGlvbiBySXQodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixpKXtmb3IodmFyIHI9LTEsbz1PYmplY3QoZSksYT1pKGUpLHM9YS5sZW5ndGg7cy0tOyl7dmFyIGw9YVt0P3M6KytyXTtpZighMT09PW4ob1tsXSxsLG8pKWJyZWFrfXJldHVybiBlfX0pKCksb0l0PWlJdCxhSXQ9REx0LHNJdD1mdW5jdGlvbiBsSXQodCxlKXtyZXR1cm4gdCYmb0l0KHQsZSxhSXQpfSxjSXQ9Tkx0LHVJdD0oZnVuY3Rpb24gaEl0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7aWYobnVsbD09bilyZXR1cm4gbjtpZighY0l0KG4pKXJldHVybiB0KG4saSk7Zm9yKHZhciByPW4ubGVuZ3RoLG89ZT9yOi0xLGE9T2JqZWN0KG4pOyhlP28tLTorK288cikmJiExIT09aShhW29dLG8sYSk7KTtyZXR1cm4gbn19KShzSXQpLGRJdD1mdW5jdGlvbiBwSXQodCl7cmV0dXJuIHR9LGZJdD1kSXQsbUl0PWZ1bmN0aW9uIGdJdCh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZJdH0sX0l0PXlrdCx5SXQ9dUl0LHZJdD1tSXQsYkl0PVdrdCx4SXQ9ZnVuY3Rpb24gd0l0KHQsZSl7cmV0dXJuKGJJdCh0KT9fSXQ6eUl0KSh0LHZJdChlKSl9LFNJdD14SXQsTUl0PXVJdCxFSXQ9YWt0O2Z1bmN0aW9uIFRJdCh0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgRUl0OysrZTxuOyl0aGlzLmFkZCh0W2VdKX1USXQucHJvdG90eXBlLmFkZD1USXQucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24gQ0l0KHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldCh0LCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIiksdGhpc30sVEl0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gQUl0KHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX07dmFyIGtJdD1USXQsTEl0PWZ1bmN0aW9uIFBJdCh0LGUpe3JldHVybiB0LmhhcyhlKX0sTkl0PWtJdCxJSXQ9ZnVuY3Rpb24gUkl0KHQsZSl7Zm9yKHZhciBuPS0xLGk9bnVsbD09dD8wOnQubGVuZ3RoOysrbjxpOylpZihlKHRbbl0sbix0KSlyZXR1cm4hMDtyZXR1cm4hMX0sT0l0PUxJdCx6SXQ9ZnVuY3Rpb24gREl0KHQsZSxuLGkscixvKXt2YXIgYT0xJm4scz10Lmxlbmd0aCxsPWUubGVuZ3RoO2lmKHMhPWwmJiEoYSYmbD5zKSlyZXR1cm4hMTt2YXIgYz1vLmdldCh0KSx1PW8uZ2V0KGUpO2lmKGMmJnUpcmV0dXJuIGM9PWUmJnU9PXQ7dmFyIGg9LTEsZD0hMCxwPTImbj9uZXcgTkl0OnZvaWQgMDtmb3Ioby5zZXQodCxlKSxvLnNldChlLHQpOysraDxzOyl7dmFyIGY9dFtoXSxtPWVbaF07aWYoaSl2YXIgZz1hP2kobSxmLGgsZSx0LG8pOmkoZixtLGgsdCxlLG8pO2lmKHZvaWQgMCE9PWcpe2lmKGcpY29udGludWU7ZD0hMTticmVha31pZihwKXtpZighSUl0KGUsKGZ1bmN0aW9uKHQsZSl7aWYoIU9JdChwLGUpJiYoZj09PXR8fHIoZix0LG4saSxvKSkpcmV0dXJuIHAucHVzaChlKX0pKSl7ZD0hMTticmVha319ZWxzZSBpZihmIT09bSYmIXIoZixtLG4saSxvKSl7ZD0hMTticmVha319cmV0dXJuIG8uZGVsZXRlKHQpLG8uZGVsZXRlKGUpLGR9LEJJdD1mdW5jdGlvbiBISXQodCl7dmFyIGU9LTEsbj1BcnJheSh0LnNpemUpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe25bKytlXT10fSkpLG59LEZJdD1RUHQsVkl0PXpDdCxVSXQ9ekl0LGpJdD1mdW5jdGlvbiBHSXQodCl7dmFyIGU9LTEsbj1BcnJheSh0LnNpemUpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQsaSl7blsrK2VdPVtpLHRdfSkpLG59LFdJdD1CSXQscUl0PXJBdD9yQXQucHJvdG90eXBlOnZvaWQgMCxZSXQ9cUl0P3FJdC52YWx1ZU9mOnZvaWQgMCxYSXQ9RVB0LCRJdD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEtJdD1fa3QsWkl0PXpJdCxKSXQ9WlB0LFFJdD1Xa3QsdFJ0PXFrdC5leHBvcnRzLGVSdD1jTHQsblJ0PSJbb2JqZWN0IEFyZ3VtZW50c10iLGlSdD0iW29iamVjdCBBcnJheV0iLHJSdD0iW29iamVjdCBPYmplY3RdIixvUnQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhUnQ9Umt0LHNSdD1mdW5jdGlvbiB0KGUsbixpLHIsbyl7cmV0dXJuIGU9PT1ufHwobnVsbD09ZXx8bnVsbD09bnx8IWFSdChlKSYmIWFSdChuKT9lIT1lJiZuIT1uOihmdW5jdGlvbiBhKHQsZSxuLGkscixvKXt2YXIgYT1RSXQodCkscz1RSXQoZSksbD1hP2lSdDpKSXQodCksYz1zP2lSdDpKSXQoZSksdT0obD1sPT1uUnQ/clJ0OmwpPT1yUnQsaD0oYz1jPT1uUnQ/clJ0OmMpPT1yUnQsZD1sPT1jO2lmKGQmJnRSdCh0KSl7aWYoIXRSdChlKSlyZXR1cm4hMTthPSEwLHU9ITF9aWYoZCYmIXUpcmV0dXJuIG98fChvPW5ldyBLSXQpLGF8fGVSdCh0KT9aSXQodCxlLG4saSxyLG8pOihmdW5jdGlvbiBwKHQsZSxuLGkscixvLGEpe3N3aXRjaChuKXtjYXNlIltvYmplY3QgRGF0YVZpZXddIjppZih0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8dC5ieXRlT2Zmc2V0IT1lLmJ5dGVPZmZzZXQpcmV0dXJuITE7dD10LmJ1ZmZlcixlPWUuYnVmZmVyO2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiEodC5ieXRlTGVuZ3RoIT1lLmJ5dGVMZW5ndGh8fCFvKG5ldyBGSXQodCksbmV3IEZJdChlKSkpO2Nhc2UiW29iamVjdCBCb29sZWFuXSI6Y2FzZSJbb2JqZWN0IERhdGVdIjpjYXNlIltvYmplY3QgTnVtYmVyXSI6cmV0dXJuIFZJdCgrdCwrZSk7Y2FzZSJbb2JqZWN0IEVycm9yXSI6cmV0dXJuIHQubmFtZT09ZS5uYW1lJiZ0Lm1lc3NhZ2U9PWUubWVzc2FnZTtjYXNlIltvYmplY3QgUmVnRXhwXSI6Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVybiB0PT1lKyIiO2Nhc2UiW29iamVjdCBNYXBdIjp2YXIgcz1qSXQ7Y2FzZSJbb2JqZWN0IFNldF0iOmlmKHN8fChzPVdJdCksdC5zaXplIT1lLnNpemUmJiEoMSZpKSlyZXR1cm4hMTt2YXIgbD1hLmdldCh0KTtpZihsKXJldHVybiBsPT1lO2l8PTIsYS5zZXQodCxlKTt2YXIgYz1VSXQocyh0KSxzKGUpLGkscixvLGEpO3JldHVybiBhLmRlbGV0ZSh0KSxjO2Nhc2UiW29iamVjdCBTeW1ib2xdIjppZihZSXQpcmV0dXJuIFlJdC5jYWxsKHQpPT1ZSXQuY2FsbChlKX1yZXR1cm4hMX0pKHQsZSxsLG4saSxyLG8pO2lmKCEoMSZuKSl7dmFyIGY9dSYmb1J0LmNhbGwodCwiX193cmFwcGVkX18iKSxtPWgmJm9SdC5jYWxsKGUsIl9fd3JhcHBlZF9fIik7aWYoZnx8bSl7dmFyIGc9Zj90LnZhbHVlKCk6dCxfPW0/ZS52YWx1ZSgpOmU7cmV0dXJuIG98fChvPW5ldyBLSXQpLHIoZyxfLG4saSxvKX19cmV0dXJuISFkJiYob3x8KG89bmV3IEtJdCksKGZ1bmN0aW9uIHkodCxlLG4saSxyLG8pe3ZhciBhPTEmbixzPVhJdCh0KSxsPXMubGVuZ3RoO2lmKGwhPVhJdChlKS5sZW5ndGgmJiFhKXJldHVybiExO2Zvcih2YXIgYz1sO2MtLTspe3ZhciB1PXNbY107aWYoIShhP3UgaW4gZTokSXQuY2FsbChlLHUpKSlyZXR1cm4hMX12YXIgaD1vLmdldCh0KSxkPW8uZ2V0KGUpO2lmKGgmJmQpcmV0dXJuIGg9PWUmJmQ9PXQ7dmFyIHA9ITA7by5zZXQodCxlKSxvLnNldChlLHQpO2Zvcih2YXIgZj1hOysrYzxsOyl7dmFyIG09dFt1PXNbY11dLGc9ZVt1XTtpZihpKXZhciBfPWE/aShnLG0sdSxlLHQsbyk6aShtLGcsdSx0LGUsbyk7aWYoISh2b2lkIDA9PT1fP209PT1nfHxyKG0sZyxuLGksbyk6Xykpe3A9ITE7YnJlYWt9Znx8KGY9ImNvbnN0cnVjdG9yIj09dSl9aWYocCYmIWYpe3ZhciB5PXQuY29uc3RydWN0b3Isdj1lLmNvbnN0cnVjdG9yO3k9PXZ8fCEoImNvbnN0cnVjdG9yImluIHQpfHwhKCJjb25zdHJ1Y3RvciJpbiBlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIHkmJnkgaW5zdGFuY2VvZiB5JiYiZnVuY3Rpb24iPT10eXBlb2YgdiYmdiBpbnN0YW5jZW9mIHZ8fChwPSExKX1yZXR1cm4gby5kZWxldGUodCksby5kZWxldGUoZSkscH0pKHQsZSxuLGkscixvKSl9KShlLG4saSxyLHQsbykpfSxsUnQ9X2t0LGNSdD1zUnQsdVJ0PXBBdCxoUnQ9ZnVuY3Rpb24gZFJ0KHQpe3JldHVybiB0PT10JiYhdVJ0KHQpfSxwUnQ9aFJ0LGZSdD1ETHQsbVJ0PWZ1bmN0aW9uIGdSdCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbnVsbCE9biYmblt0XT09PWUmJih2b2lkIDAhPT1lfHx0IGluIE9iamVjdChuKSl9fSxfUnQ9bVJ0LHlSdD1oQXQsdlJ0PVJrdCxiUnQ9ZnVuY3Rpb24geFJ0KHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdHx8dlJ0KHQpJiYiW29iamVjdCBTeW1ib2xdIj09eVJ0KHQpfSx3UnQ9V2t0LFNSdD1iUnQsTVJ0PS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLEVSdD0vXlx3KiQvLFRSdD1mdW5jdGlvbiBDUnQodCxlKXtpZih3UnQodCkpcmV0dXJuITE7dmFyIG49dHlwZW9mIHQ7cmV0dXJuISgibnVtYmVyIiE9biYmInN5bWJvbCIhPW4mJiJib29sZWFuIiE9biYmbnVsbCE9dCYmIVNSdCh0KSl8fEVSdC50ZXN0KHQpfHwhTVJ0LnRlc3QodCl8fG51bGwhPWUmJnQgaW4gT2JqZWN0KGUpfSxBUnQ9YWt0O2Z1bmN0aW9uIGtSdCh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0fHxudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGZ1bmN0aW9uIik7dmFyIG49ZnVuY3Rpb24oKXt2YXIgaT1hcmd1bWVudHMscj1lP2UuYXBwbHkodGhpcyxpKTppWzBdLG89bi5jYWNoZTtpZihvLmhhcyhyKSlyZXR1cm4gby5nZXQocik7dmFyIGE9dC5hcHBseSh0aGlzLGkpO3JldHVybiBuLmNhY2hlPW8uc2V0KHIsYSl8fG8sYX07cmV0dXJuIG4uY2FjaGU9bmV3KGtSdC5DYWNoZXx8QVJ0KSxufWtSdC5DYWNoZT1BUnQ7dmFyIExSdCxQUnQ9a1J0LE5SdD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxJUnQ9L1xcKFxcKT8vZyxSUnQ9KGZ1bmN0aW9uIE9SdCh0KXt2YXIgZT1QUnQodCwoZnVuY3Rpb24odCl7cmV0dXJuIDUwMD09PW4uc2l6ZSYmbi5jbGVhcigpLHR9KSksbj1lLmNhY2hlO3JldHVybiBlfSkoKGZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiA0Nj09PXQuY2hhckNvZGVBdCgwKSYmZS5wdXNoKCIiKSx0LnJlcGxhY2UoTlJ0LChmdW5jdGlvbih0LG4saSxyKXtlLnB1c2goaT9yLnJlcGxhY2UoSVJ0LCIkMSIpOm58fHQpfSkpLGV9KSkselJ0PWZ1bmN0aW9uIERSdCh0LGUpe2Zvcih2YXIgbj0tMSxpPW51bGw9PXQ/MDp0Lmxlbmd0aCxyPUFycmF5KGkpOysrbjxpOylyW25dPWUodFtuXSxuLHQpO3JldHVybiByfSxCUnQ9elJ0LEhSdD1Xa3QsRlJ0PWJSdCxWUnQ9ckF0P3JBdC5wcm90b3R5cGU6dm9pZCAwLFVSdD1WUnQ/VlJ0LnRvU3RyaW5nOnZvaWQgMCxqUnQ9ZnVuY3Rpb24gdChlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoSFJ0KGUpKXJldHVybiBCUnQoZSx0KSsiIjtpZihGUnQoZSkpcmV0dXJuIFVSdD9VUnQuY2FsbChlKToiIjt2YXIgbj1lKyIiO3JldHVybiIwIj09biYmMS9lPT0tMS8wPyItMCI6bn0sR1J0PWZ1bmN0aW9uIFdSdCh0KXtyZXR1cm4gbnVsbD09dD8iIjpqUnQodCl9LHFSdD1Xa3QsWVJ0PVRSdCxYUnQ9UlJ0LCRSdD1HUnQsS1J0PWZ1bmN0aW9uIFpSdCh0LGUpe3JldHVybiBxUnQodCk/dDpZUnQodCxlKT9bdF06WFJ0KCRSdCh0KSl9LEpSdD1iUnQsUVJ0PWZ1bmN0aW9uIHRPdCh0KXtpZigic3RyaW5nIj09dHlwZW9mIHR8fEpSdCh0KSlyZXR1cm4gdDt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tMS8wPyItMCI6ZX0sZU90PUtSdCxuT3Q9UVJ0LGlPdD1mdW5jdGlvbiByT3QodCxlKXtmb3IodmFyIG49MCxpPShlPWVPdChlLHQpKS5sZW5ndGg7bnVsbCE9dCYmbjxpOyl0PXRbbk90KGVbbisrXSldO3JldHVybiBuJiZuPT1pP3Q6dm9pZCAwfSxvT3Q9aU90LGFPdD1LUnQsc090PUdrdCxsT3Q9V2t0LGNPdD1La3QsdU90PUprdCxoT3Q9UVJ0LGRPdD1mdW5jdGlvbiBwT3QodCxlLG4pe2Zvcih2YXIgaT0tMSxyPShlPWFPdChlLHQpKS5sZW5ndGgsbz0hMTsrK2k8cjspe3ZhciBhPWhPdChlW2ldKTtpZighKG89bnVsbCE9dCYmbih0LGEpKSlicmVhazt0PXRbYV19cmV0dXJuIG98fCsraSE9cj9vOiEhKHI9bnVsbD09dD8wOnQubGVuZ3RoKSYmdU90KHIpJiZjT3QoYSxyKSYmKGxPdCh0KXx8c090KHQpKX0sZk90PWZ1bmN0aW9uIG1PdCh0LGUpe3JldHVybiBudWxsIT10JiZlIGluIE9iamVjdCh0KX0sZ090PWRPdCxfT3Q9ZnVuY3Rpb24geU90KHQsZSl7cmV0dXJuIG51bGwhPXQmJmdPdCh0LGUsZk90KX0sdk90PXNSdCxiT3Q9X090LHhPdD1UUnQsd090PWhSdCxTT3Q9bVJ0LE1PdD1RUnQsRU90PWZ1bmN0aW9uIFRPdCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmVbdF19fSxDT3Q9aU90LEFPdD1FT3Qsa090PVRSdCxMT3Q9UVJ0LFBPdD1kSXQsTk90PVdrdCxJT3Q9ZnVuY3Rpb24gUk90KHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bnVsbD09dD9QT3Q6Im9iamVjdCI9PXR5cGVvZiB0P05PdCh0KT8oZnVuY3Rpb24gZSh0LG4pe3JldHVybiB4T3QodCkmJndPdChuKT9TT3QoTU90KHQpLG4pOmZ1bmN0aW9uKGUpe3ZhciBpPShmdW5jdGlvbiByKHQsZSxuKXt2YXIgaT1udWxsPT10P3ZvaWQgMDpvT3QodCxlKTtyZXR1cm4gdm9pZCAwPT09aT9uOml9KShlLHQpO3JldHVybiB2b2lkIDA9PT1pJiZpPT09bj9iT3QoZSx0KTp2T3QobixpLDMpfX0pKHRbMF0sdFsxXSk6KGZ1bmN0aW9uIG4odCl7dmFyIGU9KGZ1bmN0aW9uIG4odCl7Zm9yKHZhciBlPWZSdCh0KSxuPWUubGVuZ3RoO24tLTspe3ZhciBpPWVbbl0scj10W2ldO2Vbbl09W2kscixwUnQocildfXJldHVybiBlfSkodCk7cmV0dXJuIDE9PWUubGVuZ3RoJiZlWzBdWzJdP19SdChlWzBdWzBdLGVbMF1bMV0pOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09dHx8KGZ1bmN0aW9uIGkodCxlLG4scil7dmFyIG89bi5sZW5ndGgsYT1vLHM9IXI7aWYobnVsbD09dClyZXR1cm4hYTtmb3IodD1PYmplY3QodCk7by0tOyl7dmFyIGw9bltvXTtpZihzJiZsWzJdP2xbMV0hPT10W2xbMF1dOiEobFswXWluIHQpKXJldHVybiExfWZvcig7KytvPGE7KXt2YXIgYz0obD1uW29dKVswXSx1PXRbY10saD1sWzFdO2lmKHMmJmxbMl0pe2lmKHZvaWQgMD09PXUmJiEoYyBpbiB0KSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyBsUnQ7aWYocil2YXIgcD1yKHUsaCxjLHQsZSxkKTtpZighKHZvaWQgMD09PXA/Y1J0KGgsdSwzLHIsZCk6cCkpcmV0dXJuITF9fXJldHVybiEwfSkobix0LGUpfX0pKHQpOihmdW5jdGlvbiBpKHQpe3JldHVybiBrT3QodCk/QU90KExPdCh0KSk6KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBDT3QoZSx0KX19KSh0KX0pKHQpfSxPT3Q9UUx0LHpPdD1mdW5jdGlvbiBET3QodCxlKXt2YXIgbj1bXTtyZXR1cm4gTUl0KHQsKGZ1bmN0aW9uKHQsaSxyKXtlKHQsaSxyKSYmbi5wdXNoKHQpfSkpLG59LEJPdD1JT3QsSE90PVdrdCxGT3Q9ZnVuY3Rpb24gVk90KHQsZSl7cmV0dXJuKEhPdCh0KT9PT3Q6ek90KSh0LEJPdChlKSl9LFVPdD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGpPdD1mdW5jdGlvbiBHT3QodCxlKXtyZXR1cm4gbnVsbCE9dCYmVU90LmNhbGwodCxlKX0sV090PWRPdCxxT3Q9ZnVuY3Rpb24gWU90KHQsZSl7cmV0dXJuIG51bGwhPXQmJldPdCh0LGUsak90KX0sWE90PUFMdCwkT3Q9WlB0LEtPdD1Ha3QsWk90PVdrdCxKT3Q9Tkx0LFFPdD1xa3QuZXhwb3J0cyx0enQ9Ykx0LGV6dD1jTHQsbnp0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksaXp0PWZ1bmN0aW9uIHJ6dCh0KXtyZXR1cm4gdm9pZCAwPT09dH0sb3p0PXVJdCxhenQ9Tkx0LHN6dD1mdW5jdGlvbiBsenQodCxlKXt2YXIgbj0tMSxpPWF6dCh0KT9BcnJheSh0Lmxlbmd0aCk6W107cmV0dXJuIG96dCh0LChmdW5jdGlvbih0LHIsbyl7aVsrK25dPWUodCxyLG8pfSkpLGl9LGN6dD16UnQsdXp0PUlPdCxoenQ9c3p0LGR6dD1Xa3QscHp0PWZ1bmN0aW9uIGZ6dCh0LGUpe3JldHVybihkenQodCk/Y3p0Omh6dCkodCx1enQoZSkpfSxtenQ9ZnVuY3Rpb24gZ3p0KHQsZSxuLGkpe3ZhciByPS0xLG89bnVsbD09dD8wOnQubGVuZ3RoO2ZvcihpJiZvJiYobj10Wysrcl0pOysrcjxvOyluPWUobix0W3JdLHIsdCk7cmV0dXJuIG59LF96dD11SXQseXp0PUlPdCx2enQ9ZnVuY3Rpb24gYnp0KHQsZSxuLGkscil7cmV0dXJuIHIodCwoZnVuY3Rpb24odCxyLG8pe249aT8oaT0hMSx0KTplKG4sdCxyLG8pfSkpLG59LHh6dD1Xa3Qsd3p0PWZ1bmN0aW9uIFN6dCh0LGUsbil7dmFyIGk9eHp0KHQpP216dDp2enQscj1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIGkodCx5enQoZSksbixyLF96dCl9LE16dD1oQXQsRXp0PVdrdCxUenQ9Umt0LEN6dD1FT3QoImxlbmd0aCIpLEF6dD1SZWdFeHAoIltcXHUyMDBkXFx1ZDgwMC1cXHVkZmZmXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmXFx1ZmUwZVxcdWZlMGZdIiksa3p0PSJbXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmXSIsTHp0PSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLFB6dD0iW15cXHVkODAwLVxcdWRmZmZdIixOenQ9Iig/OlxcdWQ4M2NbXFx1ZGRlNi1cXHVkZGZmXSl7Mn0iLEl6dD0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIsUnp0PSIoPzoiK2t6dCsifCIrTHp0KyIpPyIsT3p0PSJbXFx1ZmUwZVxcdWZlMGZdPyIsenp0PU96dCtSenQrIig/OlxcdTIwMGQoPzoiK1tQenQsTnp0LEl6dF0uam9pbigifCIpKyIpIitPenQrUnp0KyIpKiIsRHp0PSIoPzoiK1tQenQra3p0KyI/IixrenQsTnp0LEl6dCwiW1xcdWQ4MDAtXFx1ZGZmZl0iXS5qb2luKCJ8IikrIikiLEJ6dD1SZWdFeHAoTHp0KyIoPz0iK0x6dCsiKXwiK0R6dCt6enQsImciKSxIenQ9Q3p0LEZ6dD1BTHQsVnp0PVpQdCxVenQ9Tkx0LGp6dD1mdW5jdGlvbiBHenQodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIEF6dC50ZXN0KHQpfSkodCk/KGZ1bmN0aW9uIG4odCl7Zm9yKHZhciBlPUJ6dC5sYXN0SW5kZXg9MDtCenQudGVzdCh0KTspKytlO3JldHVybiBlfSkodCk6SHp0KHQpfSxXenQ9eWt0LHF6dD1mTnQsWXp0PXNJdCxYenQ9SU90LCR6dD1oUHQsS3p0PVdrdCxaenQ9cWt0LmV4cG9ydHMsSnp0PV9BdCxRenQ9cEF0LHREdD1jTHQsZUR0PUdrdCxuRHQ9V2t0LGlEdD1yQXQ/ckF0LmlzQ29uY2F0U3ByZWFkYWJsZTp2b2lkIDAsckR0PWNQdCxvRHQ9ZnVuY3Rpb24gYUR0KHQpe3JldHVybiBuRHQodCl8fGVEdCh0KXx8ISEoaUR0JiZ0JiZ0W2lEdF0pfSxzRHQ9ZnVuY3Rpb24gdChlLG4saSxyLG8pe3ZhciBhPS0xLHM9ZS5sZW5ndGg7Zm9yKGl8fChpPW9EdCksb3x8KG89W10pOysrYTxzOyl7dmFyIGw9ZVthXTtuPjAmJmkobCk/bj4xP3QobCxuLTEsaSxyLG8pOnJEdChvLGwpOnJ8fChvW28ubGVuZ3RoXT1sKX1yZXR1cm4gb30sbER0PWZ1bmN0aW9uIGNEdCh0LGUsbil7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHQuY2FsbChlKTtjYXNlIDE6cmV0dXJuIHQuY2FsbChlLG5bMF0pO2Nhc2UgMjpyZXR1cm4gdC5jYWxsKGUsblswXSxuWzFdKTtjYXNlIDM6cmV0dXJuIHQuY2FsbChlLG5bMF0sblsxXSxuWzJdKX1yZXR1cm4gdC5hcHBseShlLG4pfSx1RHQ9TWF0aC5tYXgsaER0PWZ1bmN0aW9uIGREdCh0LGUsbil7cmV0dXJuIGU9dUR0KHZvaWQgMD09PWU/dC5sZW5ndGgtMTplLDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBpPWFyZ3VtZW50cyxyPS0xLG89dUR0KGkubGVuZ3RoLWUsMCksYT1BcnJheShvKTsrK3I8bzspYVtyXT1pW2Urcl07cj0tMTtmb3IodmFyIHM9QXJyYXkoZSsxKTsrK3I8ZTspc1tyXT1pW3JdO3JldHVybiBzW2VdPW4oYSksbER0KHQsdGhpcyxzKX19LHBEdD1lSXQsZkR0PXhrdCxtRHQ9RGF0ZS5ub3csZ0R0PShmdW5jdGlvbiBfRHQodCl7dmFyIGU9MCxuPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9bUR0KCkscj0xNi0oaS1uKTtpZihuPWkscj4wKXtpZigrK2U+PTgwMClyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2UgZT0wO3JldHVybiB0LmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX0pKGZEdD9mdW5jdGlvbih0LGUpe3JldHVybiBmRHQodCwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpwRHQoZSksd3JpdGFibGU6ITB9KX06ZEl0KSx5RHQ9ZEl0LHZEdD1oRHQsYkR0PWdEdCx4RHQ9ZnVuY3Rpb24gd0R0KHQsZSl7cmV0dXJuIGJEdCh2RHQodCxlLHlEdCksdCsiIil9LFNEdD1mdW5jdGlvbiBNRHQodCxlLG4saSl7Zm9yKHZhciByPXQubGVuZ3RoLG89bisoaT8xOi0xKTtpP28tLTorK288cjspaWYoZSh0W29dLG8sdCkpcmV0dXJuIG87cmV0dXJuLTF9LEVEdD1TRHQsVER0PWZ1bmN0aW9uIENEdCh0KXtyZXR1cm4gdCE9dH0sQUR0PU5QdCxrRHQ9QUR0JiYxL0JJdChuZXcgQUR0KFssLTBdKSlbMV09PTEvMD9mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEFEdCh0KX06ZnVuY3Rpb24gTER0KCl7fSxQRHQ9a0l0LE5EdD1mdW5jdGlvbiBJRHQodCxlKXtyZXR1cm4hKG51bGw9PXR8fCF0Lmxlbmd0aCkmJihmdW5jdGlvbiBuKHQsZSxpKXtyZXR1cm4gZT09ZT8oZnVuY3Rpb24gcih0LGUsbil7Zm9yKHZhciBpPW4tMSxyPXQubGVuZ3RoOysraTxyOylpZih0W2ldPT09ZSlyZXR1cm4gaTtyZXR1cm4tMX0pKHQsZSxpKTpFRHQodCxURHQsaSl9KSh0LGUsMCk+LTF9LFJEdD1mdW5jdGlvbiBPRHQodCxlLG4pe2Zvcih2YXIgaT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK2k8cjspaWYobihlLHRbaV0pKXJldHVybiEwO3JldHVybiExfSx6RHQ9TEl0LEREdD1rRHQsQkR0PUJJdCxIRHQ9Tkx0LEZEdD1Sa3QsVkR0PWZ1bmN0aW9uIFVEdCh0KXtyZXR1cm4gRkR0KHQpJiZIRHQodCl9LGpEdD1zRHQsR0R0PVZEdCxXRHQ9eER0KChmdW5jdGlvbih0KXtyZXR1cm4oZnVuY3Rpb24gZSh0LG4saSl7dmFyIHI9LTEsbz1ORHQsYT10Lmxlbmd0aCxzPSEwLGw9W10sYz1sO2lmKGkpcz0hMSxvPVJEdDtlbHNlIGlmKGE+PTIwMCl7dmFyIHU9bj9udWxsOkREdCh0KTtpZih1KXJldHVybiBCRHQodSk7cz0hMSxvPXpEdCxjPW5ldyBQRHR9ZWxzZSBjPW4/W106bDt0OmZvcig7KytyPGE7KXt2YXIgaD10W3JdLGQ9bj9uKGgpOmg7aWYoaD1pfHwwIT09aD9oOjAscyYmZD09ZCl7Zm9yKHZhciBwPWMubGVuZ3RoO3AtLTspaWYoY1twXT09PWQpY29udGludWUgdDtuJiZjLnB1c2goZCksbC5wdXNoKGgpfWVsc2UgbyhjLGQsaSl8fChjIT09bCYmYy5wdXNoKGQpLGwucHVzaChoKSl9cmV0dXJuIGx9KShqRHQodCwxLEdEdCwhMCkpfSkpLHFEdD16UnQsWUR0PURMdCxYRHQ9ZnVuY3Rpb24gJER0KHQpe3JldHVybiBudWxsPT10P1tdOihmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHFEdChuLChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKX0pKHQsWUR0KHQpKX07dHJ5e0xSdD17Y2xvbmU6ZnVuY3Rpb24gS0R0KHQpe3JldHVybiB0SXQodCw0KX0sY29uc3RhbnQ6ZUl0LGVhY2g6U0l0LGZpbHRlcjpGT3QsaGFzOnFPdCxpc0FycmF5OldrdCxpc0VtcHR5OmZ1bmN0aW9uIFpEdCh0KXtpZihudWxsPT10KXJldHVybiEwO2lmKEpPdCh0KSYmKFpPdCh0KXx8InN0cmluZyI9PXR5cGVvZiB0fHwiZnVuY3Rpb24iPT10eXBlb2YgdC5zcGxpY2V8fFFPdCh0KXx8ZXp0KHQpfHxLT3QodCkpKXJldHVybiF0Lmxlbmd0aDt2YXIgZT0kT3QodCk7aWYoIltvYmplY3QgTWFwXSI9PWV8fCJbb2JqZWN0IFNldF0iPT1lKXJldHVybiF0LnNpemU7aWYodHp0KHQpKXJldHVybiFYT3QodCkubGVuZ3RoO2Zvcih2YXIgbiBpbiB0KWlmKG56dC5jYWxsKHQsbikpcmV0dXJuITE7cmV0dXJuITB9LGlzRnVuY3Rpb246X0F0LGlzVW5kZWZpbmVkOml6dCxrZXlzOkRMdCxtYXA6cHp0LHJlZHVjZTp3enQsc2l6ZTpmdW5jdGlvbiBKRHQodCl7aWYobnVsbD09dClyZXR1cm4gMDtpZihVenQodCkpcmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHwhRXp0KHQpJiZUenQodCkmJiJbb2JqZWN0IFN0cmluZ10iPT1NenQodCl9KSh0KT9qenQodCk6dC5sZW5ndGg7dmFyIG49Vnp0KHQpO3JldHVybiJbb2JqZWN0IE1hcF0iPT1ufHwiW29iamVjdCBTZXRdIj09bj90LnNpemU6Rnp0KHQpLmxlbmd0aH0sdHJhbnNmb3JtOmZ1bmN0aW9uIFFEdCh0LGUsbil7dmFyIGk9S3p0KHQpLHI9aXx8Wnp0KHQpfHx0RHQodCk7aWYoZT1YenQoZSksbnVsbD09bil7dmFyIG89dCYmdC5jb25zdHJ1Y3RvcjtuPXI/aT9uZXcgbzpbXTpRenQodCkmJkp6dChvKT9xenQoJHp0KHQpKTp7fX1yZXR1cm4ocj9XenQ6WXp0KSh0LChmdW5jdGlvbih0LGkscil7cmV0dXJuIGUobix0LGkscil9KSksbn0sdW5pb246V0R0LHZhbHVlczpYRHR9fWNhdGNoKHQpe31MUnR8fChMUnQ9d2luZG93Ll8pO3ZhciB0QnQ9TFJ0LGVCdD10QnQsbkJ0PXJCdCxpQnQ9IlwwIjtmdW5jdGlvbiByQnQodCl7dGhpcy5faXNEaXJlY3RlZD0hZUJ0Lmhhcyh0LCJkaXJlY3RlZCIpfHx0LmRpcmVjdGVkLHRoaXMuX2lzTXVsdGlncmFwaD0hIWVCdC5oYXModCwibXVsdGlncmFwaCIpJiZ0Lm11bHRpZ3JhcGgsdGhpcy5faXNDb21wb3VuZD0hIWVCdC5oYXModCwiY29tcG91bmQiKSYmdC5jb21wb3VuZCx0aGlzLl9sYWJlbD12b2lkIDAsdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPWVCdC5jb25zdGFudCh2b2lkIDApLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1lQnQuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuWyJcMCJdPXt9KSx0aGlzLl9pbj17fSx0aGlzLl9wcmVkcz17fSx0aGlzLl9vdXQ9e30sdGhpcy5fc3Vjcz17fSx0aGlzLl9lZGdlT2Jqcz17fSx0aGlzLl9lZGdlTGFiZWxzPXt9fWZ1bmN0aW9uIG9CdCh0LGUpe3RbZV0/dFtlXSsrOnRbZV09MX1mdW5jdGlvbiBhQnQodCxlKXstLXRbZV18fGRlbGV0ZSB0W2VdfWZ1bmN0aW9uIHNCdCh0LGUsbixpKXt2YXIgcj0iIitlLG89IiIrbjtpZighdCYmcj5vKXt2YXIgYT1yO3I9byxvPWF9cmV0dXJuIHIrIgEiK28rIgEiKyhlQnQuaXNVbmRlZmluZWQoaSk/IlwwIjppKX1mdW5jdGlvbiBsQnQodCxlLG4saSl7dmFyIHI9IiIrZSxvPSIiK247aWYoIXQmJnI+byl7dmFyIGE9cjtyPW8sbz1hfXZhciBzPXt2OnIsdzpvfTtyZXR1cm4gaSYmKHMubmFtZT1pKSxzfWZ1bmN0aW9uIGNCdCh0LGUpe3JldHVybiBzQnQodCxlLnYsZS53LGUubmFtZSl9ckJ0LnByb3RvdHlwZS5fbm9kZUNvdW50PTAsckJ0LnByb3RvdHlwZS5fZWRnZUNvdW50PTAsckJ0LnByb3RvdHlwZS5pc0RpcmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9LHJCdC5wcm90b3R5cGUuaXNNdWx0aWdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlncmFwaH0sckJ0LnByb3RvdHlwZS5pc0NvbXBvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9LHJCdC5wcm90b3R5cGUuc2V0R3JhcGg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhYmVsPXQsdGhpc30sckJ0LnByb3RvdHlwZS5ncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYWJlbH0sckJ0LnByb3RvdHlwZS5zZXREZWZhdWx0Tm9kZUxhYmVsPWZ1bmN0aW9uKHQpe3JldHVybiBlQnQuaXNGdW5jdGlvbih0KXx8KHQ9ZUJ0LmNvbnN0YW50KHQpKSx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49dCx0aGlzfSxyQnQucHJvdG90eXBlLm5vZGVDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9LHJCdC5wcm90b3R5cGUubm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gZUJ0LmtleXModGhpcy5fbm9kZXMpfSxyQnQucHJvdG90eXBlLnNvdXJjZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBlQnQuZmlsdGVyKHRoaXMubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIGVCdC5pc0VtcHR5KHQuX2luW2VdKX0pKX0sckJ0LnByb3RvdHlwZS5zaW5rcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIGVCdC5maWx0ZXIodGhpcy5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gZUJ0LmlzRW1wdHkodC5fb3V0W2VdKX0pKX0sckJ0LnByb3RvdHlwZS5zZXROb2Rlcz1mdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cyxpPXRoaXM7cmV0dXJuIGVCdC5lYWNoKHQsKGZ1bmN0aW9uKHQpe24ubGVuZ3RoPjE/aS5zZXROb2RlKHQsZSk6aS5zZXROb2RlKHQpfSkpLHRoaXN9LHJCdC5wcm90b3R5cGUuc2V0Tm9kZT1mdW5jdGlvbih0LGUpe3JldHVybiBlQnQuaGFzKHRoaXMuX25vZGVzLHQpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1t0XT1lKSx0aGlzKToodGhpcy5fbm9kZXNbdF09YXJndW1lbnRzLmxlbmd0aD4xP2U6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKHQpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbdF09aUJ0LHRoaXMuX2NoaWxkcmVuW3RdPXt9LHRoaXMuX2NoaWxkcmVuWyJcMCJdW3RdPSEwKSx0aGlzLl9pblt0XT17fSx0aGlzLl9wcmVkc1t0XT17fSx0aGlzLl9vdXRbdF09e30sdGhpcy5fc3Vjc1t0XT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX0sckJ0LnByb3RvdHlwZS5ub2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ub2Rlc1t0XX0sckJ0LnByb3RvdHlwZS5oYXNOb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBlQnQuaGFzKHRoaXMuX25vZGVzLHQpfSxyQnQucHJvdG90eXBlLnJlbW92ZU5vZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZihlQnQuaGFzKHRoaXMuX25vZGVzLHQpKXt2YXIgbj1mdW5jdGlvbih0KXtlLnJlbW92ZUVkZ2UoZS5fZWRnZU9ianNbdF0pfTtkZWxldGUgdGhpcy5fbm9kZXNbdF0sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHQpLGRlbGV0ZSB0aGlzLl9wYXJlbnRbdF0sZUJ0LmVhY2godGhpcy5jaGlsZHJlbih0KSwoZnVuY3Rpb24odCl7ZS5zZXRQYXJlbnQodCl9KSksZGVsZXRlIHRoaXMuX2NoaWxkcmVuW3RdKSxlQnQuZWFjaChlQnQua2V5cyh0aGlzLl9pblt0XSksbiksZGVsZXRlIHRoaXMuX2luW3RdLGRlbGV0ZSB0aGlzLl9wcmVkc1t0XSxlQnQuZWFjaChlQnQua2V5cyh0aGlzLl9vdXRbdF0pLG4pLGRlbGV0ZSB0aGlzLl9vdXRbdF0sZGVsZXRlIHRoaXMuX3N1Y3NbdF0sLS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9LHJCdC5wcm90b3R5cGUuc2V0UGFyZW50PWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuX2lzQ29tcG91bmQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IHBhcmVudCBpbiBhIG5vbi1jb21wb3VuZCBncmFwaCIpO2lmKGVCdC5pc1VuZGVmaW5lZChlKSllPWlCdDtlbHNle2Zvcih2YXIgbj1lKz0iIjshZUJ0LmlzVW5kZWZpbmVkKG4pO249dGhpcy5wYXJlbnQobikpaWYobj09PXQpdGhyb3cgbmV3IEVycm9yKCJTZXR0aW5nICIrZSsiIGFzIHBhcmVudCBvZiAiK3QrIiB3b3VsZCBjcmVhdGUgYSBjeWNsZSIpO3RoaXMuc2V0Tm9kZShlKX1yZXR1cm4gdGhpcy5zZXROb2RlKHQpLHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHQpLHRoaXMuX3BhcmVudFt0XT1lLHRoaXMuX2NoaWxkcmVuW2VdW3RdPSEwLHRoaXN9LHJCdC5wcm90b3R5cGUuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0PWZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbdF1dW3RdfSxyQnQucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtpZih0aGlzLl9pc0NvbXBvdW5kKXt2YXIgZT10aGlzLl9wYXJlbnRbdF07aWYoZSE9PWlCdClyZXR1cm4gZX19LHJCdC5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24odCl7aWYoZUJ0LmlzVW5kZWZpbmVkKHQpJiYodD1pQnQpLHRoaXMuX2lzQ29tcG91bmQpe3ZhciBlPXRoaXMuX2NoaWxkcmVuW3RdO2lmKGUpcmV0dXJuIGVCdC5rZXlzKGUpfWVsc2V7aWYodD09PWlCdClyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZSh0KSlyZXR1cm5bXX19LHJCdC5wcm90b3R5cGUucHJlZGVjZXNzb3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ByZWRzW3RdO2lmKGUpcmV0dXJuIGVCdC5rZXlzKGUpfSxyQnQucHJvdG90eXBlLnN1Y2Nlc3NvcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3Vjc1t0XTtpZihlKXJldHVybiBlQnQua2V5cyhlKX0sckJ0LnByb3RvdHlwZS5uZWlnaGJvcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wcmVkZWNlc3NvcnModCk7aWYoZSlyZXR1cm4gZUJ0LnVuaW9uKGUsdGhpcy5zdWNjZXNzb3JzKHQpKX0sckJ0LnByb3RvdHlwZS5pc0xlYWY9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT0odGhpcy5pc0RpcmVjdGVkKCk/dGhpcy5zdWNjZXNzb3JzKHQpOnRoaXMubmVpZ2hib3JzKHQpKS5sZW5ndGh9LHJCdC5wcm90b3R5cGUuZmlsdGVyTm9kZXM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHRoaXMuY29uc3RydWN0b3Ioe2RpcmVjdGVkOnRoaXMuX2lzRGlyZWN0ZWQsbXVsdGlncmFwaDp0aGlzLl9pc011bHRpZ3JhcGgsY29tcG91bmQ6dGhpcy5faXNDb21wb3VuZH0pO2Uuc2V0R3JhcGgodGhpcy5ncmFwaCgpKTt2YXIgbj10aGlzO2VCdC5lYWNoKHRoaXMuX25vZGVzLChmdW5jdGlvbihuLGkpe3QoaSkmJmUuc2V0Tm9kZShpLG4pfSkpLGVCdC5lYWNoKHRoaXMuX2VkZ2VPYmpzLChmdW5jdGlvbih0KXtlLmhhc05vZGUodC52KSYmZS5oYXNOb2RlKHQudykmJmUuc2V0RWRnZSh0LG4uZWRnZSh0KSl9KSk7dmFyIGk9e307ZnVuY3Rpb24gcih0KXt2YXIgbz1uLnBhcmVudCh0KTtyZXR1cm4gdm9pZCAwPT09b3x8ZS5oYXNOb2RlKG8pPyhpW3RdPW8sbyk6byBpbiBpP2lbb106cihvKX1yZXR1cm4gdGhpcy5faXNDb21wb3VuZCYmZUJ0LmVhY2goZS5ub2RlcygpLChmdW5jdGlvbih0KXtlLnNldFBhcmVudCh0LHIodCkpfSkpLGV9LHJCdC5wcm90b3R5cGUuc2V0RGVmYXVsdEVkZ2VMYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4gZUJ0LmlzRnVuY3Rpb24odCl8fCh0PWVCdC5jb25zdGFudCh0KSksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPXQsdGhpc30sckJ0LnByb3RvdHlwZS5lZGdlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fSxyQnQucHJvdG90eXBlLmVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIGVCdC52YWx1ZXModGhpcy5fZWRnZU9ianMpfSxyQnQucHJvdG90eXBlLnNldFBhdGg9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9YXJndW1lbnRzO3JldHVybiBlQnQucmVkdWNlKHQsKGZ1bmN0aW9uKHQscil7cmV0dXJuIGkubGVuZ3RoPjE/bi5zZXRFZGdlKHQscixlKTpuLnNldEVkZ2UodCxyKSxyfSkpLHRoaXN9LHJCdC5wcm90b3R5cGUuc2V0RWRnZT1mdW5jdGlvbigpe3ZhciB0LGUsbixpLHI9ITEsbz1hcmd1bWVudHNbMF07Im9iamVjdCI9PXR5cGVvZiBvJiZudWxsIT09byYmInYiaW4gbz8odD1vLnYsZT1vLncsbj1vLm5hbWUsMj09PWFyZ3VtZW50cy5sZW5ndGgmJihpPWFyZ3VtZW50c1sxXSxyPSEwKSk6KHQ9byxlPWFyZ3VtZW50c1sxXSxuPWFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjImJihpPWFyZ3VtZW50c1syXSxyPSEwKSksdD0iIit0LGU9IiIrZSxlQnQuaXNVbmRlZmluZWQobil8fChuPSIiK24pO3ZhciBhPXNCdCh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKTtpZihlQnQuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsYSkpcmV0dXJuIHImJih0aGlzLl9lZGdlTGFiZWxzW2FdPWkpLHRoaXM7aWYoIWVCdC5pc1VuZGVmaW5lZChuKSYmIXRoaXMuX2lzTXVsdGlncmFwaCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgYSBuYW1lZCBlZGdlIHdoZW4gaXNNdWx0aWdyYXBoID0gZmFsc2UiKTt0aGlzLnNldE5vZGUodCksdGhpcy5zZXROb2RlKGUpLHRoaXMuX2VkZ2VMYWJlbHNbYV09cj9pOnRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbih0LGUsbik7dmFyIHM9bEJ0KHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pO3JldHVybiB0PXMudixlPXMudyxPYmplY3QuZnJlZXplKHMpLHRoaXMuX2VkZ2VPYmpzW2FdPXMsb0J0KHRoaXMuX3ByZWRzW2VdLHQpLG9CdCh0aGlzLl9zdWNzW3RdLGUpLHRoaXMuX2luW2VdW2FdPXMsdGhpcy5fb3V0W3RdW2FdPXMsdGhpcy5fZWRnZUNvdW50KyssdGhpc30sckJ0LnByb3RvdHlwZS5lZGdlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0xPT09YXJndW1lbnRzLmxlbmd0aD9jQnQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOnNCdCh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKTtyZXR1cm4gdGhpcy5fZWRnZUxhYmVsc1tpXX0sckJ0LnByb3RvdHlwZS5oYXNFZGdlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0xPT09YXJndW1lbnRzLmxlbmd0aD9jQnQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOnNCdCh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKTtyZXR1cm4gZUJ0Lmhhcyh0aGlzLl9lZGdlTGFiZWxzLGkpfSxyQnQucHJvdG90eXBlLnJlbW92ZUVkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPTE9PT1hcmd1bWVudHMubGVuZ3RoP2NCdCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6c0J0KHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pLHI9dGhpcy5fZWRnZU9ianNbaV07cmV0dXJuIHImJih0PXIudixlPXIudyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tpXSxkZWxldGUgdGhpcy5fZWRnZU9ianNbaV0sYUJ0KHRoaXMuX3ByZWRzW2VdLHQpLGFCdCh0aGlzLl9zdWNzW3RdLGUpLGRlbGV0ZSB0aGlzLl9pbltlXVtpXSxkZWxldGUgdGhpcy5fb3V0W3RdW2ldLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfSxyQnQucHJvdG90eXBlLmluRWRnZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pblt0XTtpZihuKXt2YXIgaT1lQnQudmFsdWVzKG4pO3JldHVybiBlP2VCdC5maWx0ZXIoaSwoZnVuY3Rpb24odCl7cmV0dXJuIHQudj09PWV9KSk6aX19LHJCdC5wcm90b3R5cGUub3V0RWRnZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9vdXRbdF07aWYobil7dmFyIGk9ZUJ0LnZhbHVlcyhuKTtyZXR1cm4gZT9lQnQuZmlsdGVyKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnc9PT1lfSkpOml9fSxyQnQucHJvdG90eXBlLm5vZGVFZGdlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuaW5FZGdlcyh0LGUpO2lmKG4pcmV0dXJuIG4uY29uY2F0KHRoaXMub3V0RWRnZXModCxlKSl9O3ZhciB1QnQ9e0dyYXBoOm5CdCx2ZXJzaW9uOiIyLjEuOCJ9LGhCdD10QnQsZEJ0PW5CdCxwQnQ9e3dyaXRlOmZ1bmN0aW9uIGZCdCh0KXt2YXIgZT17b3B0aW9uczp7ZGlyZWN0ZWQ6dC5pc0RpcmVjdGVkKCksbXVsdGlncmFwaDp0LmlzTXVsdGlncmFwaCgpLGNvbXBvdW5kOnQuaXNDb21wb3VuZCgpfSxub2RlczpnQnQodCksZWRnZXM6X0J0KHQpfTtyZXR1cm4gaEJ0LmlzVW5kZWZpbmVkKHQuZ3JhcGgoKSl8fChlLnZhbHVlPWhCdC5jbG9uZSh0LmdyYXBoKCkpKSxlfSxyZWFkOmZ1bmN0aW9uIG1CdCh0KXt2YXIgZT1uZXcgZEJ0KHQub3B0aW9ucykuc2V0R3JhcGgodC52YWx1ZSk7cmV0dXJuIGhCdC5lYWNoKHQubm9kZXMsKGZ1bmN0aW9uKHQpe2Uuc2V0Tm9kZSh0LnYsdC52YWx1ZSksdC5wYXJlbnQmJmUuc2V0UGFyZW50KHQudix0LnBhcmVudCl9KSksaEJ0LmVhY2godC5lZGdlcywoZnVuY3Rpb24odCl7ZS5zZXRFZGdlKHt2OnQudix3OnQudyxuYW1lOnQubmFtZX0sdC52YWx1ZSl9KSksZX19O2Z1bmN0aW9uIGdCdCh0KXtyZXR1cm4gaEJ0Lm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKSxpPXQucGFyZW50KGUpLHI9e3Y6ZX07cmV0dXJuIGhCdC5pc1VuZGVmaW5lZChuKXx8KHIudmFsdWU9biksaEJ0LmlzVW5kZWZpbmVkKGkpfHwoci5wYXJlbnQ9aSkscn0pKX1mdW5jdGlvbiBfQnQodCl7cmV0dXJuIGhCdC5tYXAodC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSksaT17djplLnYsdzplLnd9O3JldHVybiBoQnQuaXNVbmRlZmluZWQoZS5uYW1lKXx8KGkubmFtZT1lLm5hbWUpLGhCdC5pc1VuZGVmaW5lZChuKXx8KGkudmFsdWU9biksaX0pKX12YXIgeUJ0PXRCdCx2QnQ9dEJ0LGJCdD14QnQ7ZnVuY3Rpb24geEJ0KCl7dGhpcy5fYXJyPVtdLHRoaXMuX2tleUluZGljZXM9e319eEJ0LnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5sZW5ndGh9LHhCdC5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9KSl9LHhCdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB2QnQuaGFzKHRoaXMuX2tleUluZGljZXMsdCl9LHhCdC5wcm90b3R5cGUucHJpb3JpdHk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fa2V5SW5kaWNlc1t0XTtpZih2b2lkIDAhPT1lKXJldHVybiB0aGlzLl9hcnJbZV0ucHJpb3JpdHl9LHhCdC5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuc2l6ZSgpKXRocm93IG5ldyBFcnJvcigiUXVldWUgdW5kZXJmbG93Iik7cmV0dXJuIHRoaXMuX2FyclswXS5rZXl9LHhCdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fa2V5SW5kaWNlcztpZih0PVN0cmluZyh0KSwhdkJ0LmhhcyhuLHQpKXt2YXIgaT10aGlzLl9hcnIscj1pLmxlbmd0aDtyZXR1cm4gblt0XT1yLGkucHVzaCh7a2V5OnQscHJpb3JpdHk6ZX0pLHRoaXMuX2RlY3JlYXNlKHIpLCEwfXJldHVybiExfSx4QnQucHJvdG90eXBlLnJlbW92ZU1pbj1mdW5jdGlvbigpe3RoaXMuX3N3YXAoMCx0aGlzLl9hcnIubGVuZ3RoLTEpO3ZhciB0PXRoaXMuX2Fyci5wb3AoKTtyZXR1cm4gZGVsZXRlIHRoaXMuX2tleUluZGljZXNbdC5rZXldLHRoaXMuX2hlYXBpZnkoMCksdC5rZXl9LHhCdC5wcm90b3R5cGUuZGVjcmVhc2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9rZXlJbmRpY2VzW3RdO2lmKGU+dGhpcy5fYXJyW25dLnByaW9yaXR5KXRocm93IG5ldyBFcnJvcigiTmV3IHByaW9yaXR5IGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IHByaW9yaXR5LiBLZXk6ICIrdCsiIE9sZDogIit0aGlzLl9hcnJbbl0ucHJpb3JpdHkrIiBOZXc6ICIrZSk7dGhpcy5fYXJyW25dLnByaW9yaXR5PWUsdGhpcy5fZGVjcmVhc2Uobil9LHhCdC5wcm90b3R5cGUuX2hlYXBpZnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYXJyLG49Mip0LGk9bisxLHI9dDtuPGUubGVuZ3RoJiYocj1lW25dLnByaW9yaXR5PGVbcl0ucHJpb3JpdHk/bjpyLGk8ZS5sZW5ndGgmJihyPWVbaV0ucHJpb3JpdHk8ZVtyXS5wcmlvcml0eT9pOnIpLHIhPT10JiYodGhpcy5fc3dhcCh0LHIpLHRoaXMuX2hlYXBpZnkocikpKX0seEJ0LnByb3RvdHlwZS5fZGVjcmVhc2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49dGhpcy5fYXJyLGk9blt0XS5wcmlvcml0eTswIT09dCYmIShuW2U9dD4+MV0ucHJpb3JpdHk8aSk7KXRoaXMuX3N3YXAodCxlKSx0PWV9LHhCdC5wcm90b3R5cGUuX3N3YXA9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9hcnIsaT10aGlzLl9rZXlJbmRpY2VzLHI9blt0XSxvPW5bZV07blt0XT1vLG5bZV09cixpW28ua2V5XT10LGlbci5rZXldPWV9O3ZhciB3QnQ9YkJ0LFNCdD1mdW5jdGlvbiBNQnQodCxlLG4saSl7cmV0dXJuKGZ1bmN0aW9uIHIodCxlLG4saSl7dmFyIHIsbyxhPXt9LHM9bmV3IHdCdCxsPWZ1bmN0aW9uKHQpe3ZhciBlPXQudiE9PXI/dC52OnQudyxpPWFbZV0sbD1uKHQpLGM9by5kaXN0YW5jZStsO2lmKGw8MCl0aHJvdyBuZXcgRXJyb3IoImRpamtzdHJhIGRvZXMgbm90IGFsbG93IG5lZ2F0aXZlIGVkZ2Ugd2VpZ2h0cy4gQmFkIGVkZ2U6ICIrdCsiIFdlaWdodDogIitsKTtjPGkuZGlzdGFuY2UmJihpLmRpc3RhbmNlPWMsaS5wcmVkZWNlc3Nvcj1yLHMuZGVjcmVhc2UoZSxjKSl9O2Zvcih0Lm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dD09PWU/MDpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7YVt0XT17ZGlzdGFuY2U6bn0scy5hZGQodCxuKX0pKTtzLnNpemUoKT4wJiYocj1zLnJlbW92ZU1pbigpLChvPWFbcl0pLmRpc3RhbmNlIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTspaShyKS5mb3JFYWNoKGwpO3JldHVybiBhfSkodCxTdHJpbmcoZSksbnx8RUJ0LGl8fGZ1bmN0aW9uKGUpe3JldHVybiB0Lm91dEVkZ2VzKGUpfSl9LEVCdD10QnQuY29uc3RhbnQoMSksVEJ0PVNCdCxDQnQ9dEJ0LEFCdD10QnQsa0J0PWZ1bmN0aW9uIExCdCh0KXt2YXIgZT0wLG49W10saT17fSxyPVtdO2Z1bmN0aW9uIG8oYSl7dmFyIHM9aVthXT17b25TdGFjazohMCxsb3dsaW5rOmUsaW5kZXg6ZSsrfTtpZihuLnB1c2goYSksdC5zdWNjZXNzb3JzKGEpLmZvckVhY2goKGZ1bmN0aW9uKHQpe0FCdC5oYXMoaSx0KT9pW3RdLm9uU3RhY2smJihzLmxvd2xpbms9TWF0aC5taW4ocy5sb3dsaW5rLGlbdF0uaW5kZXgpKToobyh0KSxzLmxvd2xpbms9TWF0aC5taW4ocy5sb3dsaW5rLGlbdF0ubG93bGluaykpfSkpLHMubG93bGluaz09PXMuaW5kZXgpe3ZhciBsLGM9W107ZG97bD1uLnBvcCgpLGlbbF0ub25TdGFjaz0hMSxjLnB1c2gobCl9d2hpbGUoYSE9PWwpO3IucHVzaChjKX19cmV0dXJuIHQubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXtBQnQuaGFzKGksdCl8fG8odCl9KSkscn0sUEJ0PXRCdCxOQnQ9a0J0LElCdD10QnQuY29uc3RhbnQoMSksUkJ0PXRCdCxPQnQ9ekJ0O2Z1bmN0aW9uIHpCdCh0KXt2YXIgZT17fSxuPXt9LGk9W107aWYoUkJ0LmVhY2godC5zaW5rcygpLChmdW5jdGlvbiByKG8pe2lmKFJCdC5oYXMobixvKSl0aHJvdyBuZXcgREJ0O1JCdC5oYXMoZSxvKXx8KG5bb109ITAsZVtvXT0hMCxSQnQuZWFjaCh0LnByZWRlY2Vzc29ycyhvKSxyKSxkZWxldGUgbltvXSxpLnB1c2gobykpfSkpLFJCdC5zaXplKGUpIT09dC5ub2RlQ291bnQoKSl0aHJvdyBuZXcgREJ0O3JldHVybiBpfWZ1bmN0aW9uIERCdCgpe316QnQuQ3ljbGVFeGNlcHRpb249REJ0LERCdC5wcm90b3R5cGU9bmV3IEVycm9yO3ZhciBCQnQ9T0J0LEhCdD10QnQsRkJ0PWZ1bmN0aW9uIFZCdCh0LGUsbil7SEJ0LmlzQXJyYXkoZSl8fChlPVtlXSk7dmFyIGk9KHQuaXNEaXJlY3RlZCgpP3Quc3VjY2Vzc29yczp0Lm5laWdoYm9ycykuYmluZCh0KSxyPVtdLG89e307cmV0dXJuIEhCdC5lYWNoKGUsKGZ1bmN0aW9uKGUpe2lmKCF0Lmhhc05vZGUoZSkpdGhyb3cgbmV3IEVycm9yKCJHcmFwaCBkb2VzIG5vdCBoYXZlIG5vZGU6ICIrZSk7VUJ0KHQsZSwicG9zdCI9PT1uLG8saSxyKX0pKSxyfTtmdW5jdGlvbiBVQnQodCxlLG4saSxyLG8pe0hCdC5oYXMoaSxlKXx8KGlbZV09ITAsbnx8by5wdXNoKGUpLEhCdC5lYWNoKHIoZSksKGZ1bmN0aW9uKGUpe1VCdCh0LGUsbixpLHIsbyl9KSksbiYmby5wdXNoKGUpKX12YXIgakJ0LEdCdD1GQnQsV0J0PUZCdCxxQnQ9dEJ0LFlCdD1uQnQsWEJ0PWJCdCwkQnQ9e0dyYXBoOnVCdC5HcmFwaCxqc29uOnBCdCxhbGc6e2NvbXBvbmVudHM6ZnVuY3Rpb24gS0J0KHQpe3ZhciBlLG49e30saT1bXTtmdW5jdGlvbiByKGkpe3lCdC5oYXMobixpKXx8KG5baV09ITAsZS5wdXNoKGkpLHlCdC5lYWNoKHQuc3VjY2Vzc29ycyhpKSxyKSx5QnQuZWFjaCh0LnByZWRlY2Vzc29ycyhpKSxyKSl9cmV0dXJuIHlCdC5lYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7ZT1bXSxyKHQpLGUubGVuZ3RoJiZpLnB1c2goZSl9KSksaX0sZGlqa3N0cmE6U0J0LGRpamtzdHJhQWxsOmZ1bmN0aW9uIFpCdCh0LGUsbil7cmV0dXJuIENCdC50cmFuc2Zvcm0odC5ub2RlcygpLChmdW5jdGlvbihpLHIpe2lbcl09VEJ0KHQscixlLG4pfSkse30pfSxmaW5kQ3ljbGVzOmZ1bmN0aW9uIEpCdCh0KXtyZXR1cm4gUEJ0LmZpbHRlcihOQnQodCksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aD4xfHwxPT09ZS5sZW5ndGgmJnQuaGFzRWRnZShlWzBdLGVbMF0pfSkpfSxmbG95ZFdhcnNoYWxsOmZ1bmN0aW9uIFFCdCh0LGUsbil7cmV0dXJuKGZ1bmN0aW9uIGkodCxlLG4pe3ZhciBpPXt9LHI9dC5ub2RlcygpO3JldHVybiByLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lbdF09e30saVt0XVt0XT17ZGlzdGFuY2U6MH0sci5mb3JFYWNoKChmdW5jdGlvbihlKXt0IT09ZSYmKGlbdF1bZV09e2Rpc3RhbmNlOk51bWJlci5QT1NJVElWRV9JTkZJTklUWX0pfSkpLG4odCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHI9bi52PT09dD9uLnc6bi52LG89ZShuKTtpW3RdW3JdPXtkaXN0YW5jZTpvLHByZWRlY2Vzc29yOnR9fSkpfSkpLHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9aVt0XTtyLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBvPWlbbl07ci5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT1lW25dLHI9b1tuXSxhPW9bdF0uZGlzdGFuY2UraS5kaXN0YW5jZTthPHIuZGlzdGFuY2UmJihyLmRpc3RhbmNlPWEsci5wcmVkZWNlc3Nvcj1pLnByZWRlY2Vzc29yKX0pKX0pKX0pKSxpfSkodCxlfHxJQnQsbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZSl9KX0saXNBY3ljbGljOmZ1bmN0aW9uIHRIdCh0KXt0cnl7QkJ0KHQpfWNhdGNoKHQpe2lmKHQgaW5zdGFuY2VvZiBCQnQuQ3ljbGVFeGNlcHRpb24pcmV0dXJuITE7dGhyb3cgdH1yZXR1cm4hMH0scG9zdG9yZGVyOmZ1bmN0aW9uIGVIdCh0LGUpe3JldHVybiBHQnQodCxlLCJwb3N0Iil9LHByZW9yZGVyOmZ1bmN0aW9uIG5IdCh0LGUpe3JldHVybiBXQnQodCxlLCJwcmUiKX0scHJpbTpmdW5jdGlvbiBpSHQodCxlKXt2YXIgbixpPW5ldyBZQnQscj17fSxvPW5ldyBYQnQ7ZnVuY3Rpb24gYSh0KXt2YXIgaT10LnY9PT1uP3Qudzp0LnYsYT1vLnByaW9yaXR5KGkpO2lmKHZvaWQgMCE9PWEpe3ZhciBzPWUodCk7czxhJiYocltpXT1uLG8uZGVjcmVhc2UoaSxzKSl9fWlmKDA9PT10Lm5vZGVDb3VudCgpKXJldHVybiBpO3FCdC5lYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7by5hZGQodCxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLGkuc2V0Tm9kZSh0KX0pKSxvLmRlY3JlYXNlKHQubm9kZXMoKVswXSwwKTtmb3IodmFyIHM9ITE7by5zaXplKCk+MDspe2lmKG49by5yZW1vdmVNaW4oKSxxQnQuaGFzKHIsbikpaS5zZXRFZGdlKG4scltuXSk7ZWxzZXtpZihzKXRocm93IG5ldyBFcnJvcigiSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogIit0KTtzPSEwfXQubm9kZUVkZ2VzKG4pLmZvckVhY2goYSl9cmV0dXJuIGl9LHRhcmphbjprQnQsdG9wc29ydDpPQnR9LHZlcnNpb246dUJ0LnZlcnNpb259O3RyeXtqQnQ9JEJ0fWNhdGNoKHQpe31qQnR8fChqQnQ9d2luZG93LmdyYXBobGliKTt2YXIgckh0LG9IdD1qQnQsYUh0PVFOdCxzSHQ9ekN0LGxIdD1OTHQsY0h0PUtrdCx1SHQ9cEF0LGhIdD1mdW5jdGlvbiBkSHQodCxlLG4pe2lmKCF1SHQobikpcmV0dXJuITE7dmFyIGk9dHlwZW9mIGU7cmV0dXJuISEoIm51bWJlciI9PWk/bEh0KG4pJiZjSHQoZSxuLmxlbmd0aCk6InN0cmluZyI9PWkmJmUgaW4gbikmJnNIdChuW2VdLHQpfSxwSHQ9ekN0LGZIdD1oSHQsbUh0PXFMdCxnSHQ9T2JqZWN0LnByb3RvdHlwZSxfSHQ9Z0h0Lmhhc093blByb3BlcnR5LHlIdD14RHQoKGZ1bmN0aW9uKHQsZSl7dD1PYmplY3QodCk7dmFyIG49LTEsaT1lLmxlbmd0aCxyPWk+Mj9lWzJdOnZvaWQgMDtmb3IociYmZkh0KGVbMF0sZVsxXSxyKSYmKGk9MSk7KytuPGk7KWZvcih2YXIgbz1lW25dLGE9bUh0KG8pLHM9LTEsbD1hLmxlbmd0aDsrK3M8bDspe3ZhciBjPWFbc10sdT10W2NdOyh2b2lkIDA9PT11fHxwSHQodSxnSHRbY10pJiYhX0h0LmNhbGwodCxjKSkmJih0W2NdPW9bY10pfXJldHVybiB0fSkpLHZIdD1JT3QsYkh0PU5MdCx4SHQ9REx0LHdIdD0vXHMvLFNIdD0vXlxzKy8sTUh0PXBBdCxFSHQ9YlJ0LFRIdD0vXlstK10weFswLTlhLWZdKyQvaSxDSHQ9L14wYlswMV0rJC9pLEFIdD0vXjBvWzAtN10rJC9pLGtIdD1wYXJzZUludCxMSHQ9ZnVuY3Rpb24gUEh0KHQpe3JldHVybiB0PzEvMD09PSh0PShmdW5jdGlvbiBlKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdDtpZihFSHQodCkpcmV0dXJuIE5hTjtpZihNSHQodCkpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnZhbHVlT2Y/dC52YWx1ZU9mKCk6dDt0PU1IdChlKT9lKyIiOmV9aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiAwPT09dD90Oit0O3Q9KGZ1bmN0aW9uIG4odCl7cmV0dXJuIHQ/dC5zbGljZSgwLChmdW5jdGlvbiBlKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlLS0mJndIdC50ZXN0KHQuY2hhckF0KGUpKTspO3JldHVybiBlfSkodCkrMSkucmVwbGFjZShTSHQsIiIpOnR9KSh0KTt2YXIgaT1DSHQudGVzdCh0KTtyZXR1cm4gaXx8QUh0LnRlc3QodCk/a0h0KHQuc2xpY2UoMiksaT8yOjgpOlRIdC50ZXN0KHQpP05hTjordH0pKHQpKXx8dD09PS0xLzA/MTc5NzY5MzEzNDg2MjMxNTdlMjkyKih0PDA/LTE6MSk6dD09dD90OjA6MD09PXQ/dDowfSxOSHQ9TEh0LElIdD1TRHQsUkh0PUlPdCxPSHQ9TWF0aC5tYXgsekh0PShmdW5jdGlvbiBCSHQodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixpKXt2YXIgcj1PYmplY3QoZSk7aWYoIWJIdChlKSl7dmFyIG89dkh0KG4pO2U9eEh0KGUpLG49ZnVuY3Rpb24odCl7cmV0dXJuIG8oclt0XSx0LHIpfX12YXIgYT10KGUsbixpKTtyZXR1cm4gYT4tMT9yW28/ZVthXTphXTp2b2lkIDB9fSkoKGZ1bmN0aW9uIERIdCh0LGUsbil7dmFyIGk9bnVsbD09dD8wOnQubGVuZ3RoO2lmKCFpKXJldHVybi0xO3ZhciByPW51bGw9PW4/MDooZnVuY3Rpb24gbyh0KXt2YXIgZT1OSHQodCksbj1lJTE7cmV0dXJuIGU9PWU/bj9lLW46ZTowfSkobik7cmV0dXJuIHI8MCYmKHI9T0h0KGkrciwwKSksSUh0KHQsUkh0KGUpLHIpfSkpLEhIdD1zRHQsRkh0PWZ1bmN0aW9uIFZIdCh0KXtyZXR1cm4gbnVsbCE9dCYmdC5sZW5ndGg/SEh0KHQsMSk6W119LFVIdD1pSXQsakh0PW1JdCxHSHQ9cUx0LFdIdD1Ta3QscUh0PXNJdCxZSHQ9SU90LFhIdD1iUnQsJEh0PWZ1bmN0aW9uIEtIdCh0LGUsbil7Zm9yKHZhciBpPS0xLHI9dC5sZW5ndGg7KytpPHI7KXt2YXIgbz10W2ldLGE9ZShvKTtpZihudWxsIT1hJiYodm9pZCAwPT09cz9hPT1hJiYhWEh0KGEpOm4oYSxzKSkpdmFyIHM9YSxsPW99cmV0dXJuIGx9LFpIdD0kSHQsSkh0PWZ1bmN0aW9uIFFIdCh0LGUpe3JldHVybiB0PmV9LHRGdD1kSXQsZUZ0PVNrdCxuRnQ9ekN0LGlGdD1mdW5jdGlvbiByRnQodCxlLG4peyh2b2lkIDAhPT1uJiYhbkZ0KHRbZV0sbil8fHZvaWQgMD09PW4mJiEoZSBpbiB0KSkmJmVGdCh0LGUsbil9LG9GdD1oQXQsYUZ0PWhQdCxzRnQ9Umt0LGxGdD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsY0Z0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksdUZ0PWxGdC5jYWxsKE9iamVjdCksaEZ0PWZ1bmN0aW9uIGRGdCh0LGUpe2lmKCgiY29uc3RydWN0b3IiIT09ZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHRbZV0pJiYiX19wcm90b19fIiE9ZSlyZXR1cm4gdFtlXX0scEZ0PU5rdCxmRnQ9cUx0LG1GdD1pRnQsZ0Z0PUtMdC5leHBvcnRzLF9GdD1sTnQseUZ0PVpMdCx2RnQ9eU50LGJGdD1Ha3QseEZ0PVdrdCx3RnQ9VkR0LFNGdD1xa3QuZXhwb3J0cyxNRnQ9X0F0LEVGdD1wQXQsVEZ0PWNMdCxDRnQ9aEZ0LEFGdD1fa3Qsa0Z0PWlGdCxMRnQ9aUl0LFBGdD1wQXQsTkZ0PXFMdCxJRnQ9aEZ0LFJGdD14RHQsT0Z0PWhIdCx6RnQ9ZnVuY3Rpb24gdChlLG4saSxyLG8pe2UhPT1uJiZMRnQobiwoZnVuY3Rpb24oYSxzKXtpZihvfHwobz1uZXcgQUZ0KSxQRnQoYSkpIShmdW5jdGlvbiBsKHQsZSxuLGkscixvLGEpe3ZhciBzPUNGdCh0LG4pLGw9Q0Z0KGUsbiksYz1hLmdldChsKTtpZihjKW1GdCh0LG4sYyk7ZWxzZXt2YXIgdT1vP28ocyxsLG4rIiIsdCxlLGEpOnZvaWQgMCxoPXZvaWQgMD09PXU7aWYoaCl7dmFyIGQ9eEZ0KGwpLHA9IWQmJlNGdChsKSxmPSFkJiYhcCYmVEZ0KGwpO3U9bCxkfHxwfHxmP3hGdChzKT91PXM6d0Z0KHMpP3U9eUZ0KHMpOnA/KGg9ITEsdT1nRnQobCwhMCkpOmY/KGg9ITEsdT1fRnQobCwhMCkpOnU9W106KGZ1bmN0aW9uIG0odCl7aWYoIXNGdCh0KXx8IltvYmplY3QgT2JqZWN0XSIhPW9GdCh0KSlyZXR1cm4hMTt2YXIgZT1hRnQodCk7aWYobnVsbD09PWUpcmV0dXJuITA7dmFyIG49Y0Z0LmNhbGwoZSwiY29uc3RydWN0b3IiKSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIG4mJmxGdC5jYWxsKG4pPT11RnR9KShsKXx8YkZ0KGwpPyh1PXMsYkZ0KHMpP3U9KGZ1bmN0aW9uIGcodCl7cmV0dXJuIHBGdCh0LGZGdCh0KSl9KShzKTpFRnQocykmJiFNRnQocyl8fCh1PXZGdChsKSkpOmg9ITF9aCYmKGEuc2V0KGwsdSkscih1LGwsaSxvLGEpLGEuZGVsZXRlKGwpKSxtRnQodCxuLHUpfX0pKGUsbixzLGksdCxyLG8pO2Vsc2V7dmFyIGM9cj9yKElGdChlLHMpLGEscysiIixlLG4sbyk6dm9pZCAwO3ZvaWQgMD09PWMmJihjPWEpLGtGdChlLHMsYyl9fSksTkZ0KX0sREZ0PShmdW5jdGlvbiBCRnQodCl7cmV0dXJuIFJGdCgoZnVuY3Rpb24oZSxuKXt2YXIgaT0tMSxyPW4ubGVuZ3RoLG89cj4xP25bci0xXTp2b2lkIDAsYT1yPjI/blsyXTp2b2lkIDA7Zm9yKG89dC5sZW5ndGg+MyYmImZ1bmN0aW9uIj09dHlwZW9mIG8/KHItLSxvKTp2b2lkIDAsYSYmT0Z0KG5bMF0sblsxXSxhKSYmKG89cjwzP3ZvaWQgMDpvLHI9MSksZT1PYmplY3QoZSk7KytpPHI7KXt2YXIgcz1uW2ldO3MmJnQoZSxzLGksbyl9cmV0dXJuIGV9KSl9KSgoZnVuY3Rpb24odCxlLG4pe3pGdCh0LGUsbil9KSksSEZ0PWZ1bmN0aW9uIEZGdCh0LGUpe3JldHVybiB0PGV9LFZGdD0kSHQsVUZ0PUhGdCxqRnQ9ZEl0LEdGdD0kSHQsV0Z0PUlPdCxxRnQ9SEZ0LFlGdD1pQXQsWEZ0PUFrdCwkRnQ9S1J0LEtGdD1La3QsWkZ0PXBBdCxKRnQ9UVJ0LFFGdD1pT3QsdFZ0PWZ1bmN0aW9uIGVWdCh0LGUsbixpKXtpZighWkZ0KHQpKXJldHVybiB0O2Zvcih2YXIgcj0tMSxvPShlPSRGdChlLHQpKS5sZW5ndGgsYT1vLTEscz10O251bGwhPXMmJisrcjxvOyl7dmFyIGw9SkZ0KGVbcl0pLGM9bjtpZigiX19wcm90b19fIj09PWx8fCJjb25zdHJ1Y3RvciI9PT1sfHwicHJvdG90eXBlIj09PWwpcmV0dXJuIHQ7aWYociE9YSl7dmFyIHU9c1tsXTt2b2lkIDA9PT0oYz1pP2kodSxsLHMpOnZvaWQgMCkmJihjPVpGdCh1KT91OktGdChlW3IrMV0pP1tdOnt9KX1YRnQocyxsLGMpLHM9c1tsXX1yZXR1cm4gdH0sblZ0PUtSdCxpVnQ9X090LHJWdD1GSHQsb1Z0PWhEdCxhVnQ9Z0R0LHNWdD0oZnVuY3Rpb24gbFZ0KHQpe3JldHVybiBhVnQob1Z0KHQsdm9pZCAwLHJWdCksdCsiIil9KSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD97fTooZnVuY3Rpb24gbih0LGUpe3JldHVybihmdW5jdGlvbiBuKHQsZSxpKXtmb3IodmFyIHI9LTEsbz1lLmxlbmd0aCxhPXt9OysrcjxvOyl7dmFyIHM9ZVtyXSxsPVFGdCh0LHMpO2kobCxzKSYmdFZ0KGEsblZ0KHMsdCksbCl9cmV0dXJuIGF9KSh0LGUsKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGlWdCh0LG4pfSkpfSkodCxlKX0pKSxjVnQ9TWF0aC5jZWlsLHVWdD1NYXRoLm1heCxoVnQ9aEh0LGRWdD1MSHQscFZ0PShmdW5jdGlvbiBmVnQodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gaSYmIm51bWJlciIhPXR5cGVvZiBpJiZoVnQoZSxuLGkpJiYobj1pPXZvaWQgMCksZT1kVnQoZSksdm9pZCAwPT09bj8obj1lLGU9MCk6bj1kVnQobiksKGZ1bmN0aW9uIHIodCxlLG4saSl7Zm9yKHZhciByPS0xLG89dVZ0KGNWdCgoZS10KS8obnx8MSkpLDApLGE9QXJyYXkobyk7by0tOylhW2k/bzorK3JdPXQsdCs9bjtyZXR1cm4gYX0pKGUsbixpPXZvaWQgMD09PWk/ZTxuPzE6LTE6ZFZ0KGkpLHQpfX0pKCksbVZ0PWJSdCxnVnQ9ZnVuY3Rpb24gX1Z0KHQsZSl7aWYodCE9PWUpe3ZhciBuPXZvaWQgMCE9PXQsaT1udWxsPT09dCxyPXQ9PXQsbz1tVnQodCksYT12b2lkIDAhPT1lLHM9bnVsbD09PWUsbD1lPT1lLGM9bVZ0KGUpO2lmKCFzJiYhYyYmIW8mJnQ+ZXx8byYmYSYmbCYmIXMmJiFjfHxpJiZhJiZsfHwhbiYmbHx8IXIpcmV0dXJuIDE7aWYoIWkmJiFvJiYhYyYmdDxlfHxjJiZuJiZyJiYhaSYmIW98fHMmJm4mJnJ8fCFhJiZyfHwhbClyZXR1cm4tMX1yZXR1cm4gMH0seVZ0PXpSdCx2VnQ9aU90LGJWdD1JT3QseFZ0PXN6dCx3VnQ9ckx0LFNWdD1kSXQsTVZ0PVdrdCxFVnQ9c0R0LFRWdD1oSHQsQ1Z0PXhEdCgoZnVuY3Rpb24odCxlKXtpZihudWxsPT10KXJldHVybltdO3ZhciBuPWUubGVuZ3RoO3JldHVybiBuPjEmJlRWdCh0LGVbMF0sZVsxXSk/ZT1bXTpuPjImJlRWdChlWzBdLGVbMV0sZVsyXSkmJihlPVtlWzBdXSksKGZ1bmN0aW9uIGkodCxlLG4pe2U9ZS5sZW5ndGg/eVZ0KGUsKGZ1bmN0aW9uKHQpe3JldHVybiBNVnQodCk/ZnVuY3Rpb24oZSl7cmV0dXJuIHZWdChlLDE9PT10Lmxlbmd0aD90WzBdOnQpfTp0fSkpOltTVnRdO3ZhciBpPS0xO3JldHVybiBlPXlWdChlLHdWdChiVnQpKSwoZnVuY3Rpb24gcih0LGUpe3ZhciBuPXQubGVuZ3RoO2Zvcih0LnNvcnQoZSk7bi0tOyl0W25dPXRbbl0udmFsdWU7cmV0dXJuIHR9KSh4VnQodCwoZnVuY3Rpb24odCxuLHIpe3JldHVybntjcml0ZXJpYTp5VnQoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KSksaW5kZXg6KytpLHZhbHVlOnR9fSkpLChmdW5jdGlvbih0LGUpe3JldHVybihmdW5jdGlvbiBpKHQsZSxuKXtmb3IodmFyIGk9LTEscj10LmNyaXRlcmlhLG89ZS5jcml0ZXJpYSxhPXIubGVuZ3RoLHM9bi5sZW5ndGg7KytpPGE7KXt2YXIgbD1nVnQocltpXSxvW2ldKTtpZihsKXJldHVybiBpPj1zP2w6bCooImRlc2MiPT1uW2ldPy0xOjEpfXJldHVybiB0LmluZGV4LWUuaW5kZXh9KSh0LGUsbil9KSl9KSh0LEVWdChlLDEpLFtdKX0pKSxBVnQ9R1J0LGtWdD0wLExWdD1Ba3Q7dHJ5e3JIdD17Y2xvbmVEZWVwOmZ1bmN0aW9uIFBWdCh0KXtyZXR1cm4gYUh0KHQsNSl9LGNvbnN0YW50OmVJdCxkZWZhdWx0czp5SHQsZWFjaDpTSXQsZmlsdGVyOkZPdCxmaW5kOnpIdCxmbGF0dGVuOkZIdCxmb3JFYWNoOnhJdCxmb3JJbjpmdW5jdGlvbiBOVnQodCxlKXtyZXR1cm4gbnVsbD09dD90OlVIdCh0LGpIdChlKSxHSHQpfSxoYXM6cU90LGlzVW5kZWZpbmVkOml6dCxsYXN0OmZ1bmN0aW9uIElWdCh0KXt2YXIgZT1udWxsPT10PzA6dC5sZW5ndGg7cmV0dXJuIGU/dFtlLTFdOnZvaWQgMH0sbWFwOnB6dCxtYXBWYWx1ZXM6ZnVuY3Rpb24gUlZ0KHQsZSl7dmFyIG49e307cmV0dXJuIGU9WUh0KGUpLHFIdCh0LChmdW5jdGlvbih0LGkscil7V0h0KG4saSxlKHQsaSxyKSl9KSksbn0sbWF4OmZ1bmN0aW9uIE9WdCh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/Wkh0KHQsdEZ0LEpIdCk6dm9pZCAwfSxtZXJnZTpERnQsbWluOmZ1bmN0aW9uIHpWdCh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/VkZ0KHQsakZ0LFVGdCk6dm9pZCAwfSxtaW5CeTpmdW5jdGlvbiBEVnQodCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/R0Z0KHQsV0Z0KGUpLHFGdCk6dm9pZCAwfSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4gWUZ0LkRhdGUubm93KCl9LHBpY2s6c1Z0LHJhbmdlOnBWdCxyZWR1Y2U6d3p0LHNvcnRCeTpDVnQsdW5pcXVlSWQ6ZnVuY3Rpb24gQlZ0KHQpe3ZhciBlPSsra1Z0O3JldHVybiBBVnQodCkrZX0sdmFsdWVzOlhEdCx6aXBPYmplY3Q6ZnVuY3Rpb24gSFZ0KHQsZSl7cmV0dXJuKGZ1bmN0aW9uIG4odCxlLGkpe2Zvcih2YXIgcj0tMSxvPXQubGVuZ3RoLGE9ZS5sZW5ndGgscz17fTsrK3I8bzspaShzLHRbcl0scjxhP2Vbcl06dm9pZCAwKTtyZXR1cm4gc30pKHR8fFtdLGV8fFtdLExWdCl9fX1jYXRjaCh0KXt9ckh0fHwockh0PXdpbmRvdy5fKTt2YXIgRlZ0PXJIdCxWVnQ9VVZ0O2Z1bmN0aW9uIFVWdCgpe3ZhciB0PXt9O3QuX25leHQ9dC5fcHJldj10LHRoaXMuX3NlbnRpbmVsPXR9ZnVuY3Rpb24galZ0KHQpe3QuX3ByZXYuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PXQuX3ByZXYsZGVsZXRlIHQuX25leHQsZGVsZXRlIHQuX3ByZXZ9ZnVuY3Rpb24gR1Z0KHQsZSl7aWYoIl9uZXh0IiE9PXQmJiJfcHJldiIhPT10KXJldHVybiBlfVVWdC5wcm90b3R5cGUuZGVxdWV1ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3NlbnRpbmVsLGU9dC5fcHJldjtpZihlIT09dClyZXR1cm4galZ0KGUpLGV9LFVWdC5wcm90b3R5cGUuZW5xdWV1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zZW50aW5lbDt0Ll9wcmV2JiZ0Ll9uZXh0JiZqVnQodCksdC5fbmV4dD1lLl9uZXh0LGUuX25leHQuX3ByZXY9dCxlLl9uZXh0PXQsdC5fcHJldj1lfSxVVnQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9dGhpcy5fc2VudGluZWwsbj1lLl9wcmV2O24hPT1lOyl0LnB1c2goSlNPTi5zdHJpbmdpZnkobixHVnQpKSxuPW4uX3ByZXY7cmV0dXJuIlsiK3Quam9pbigiLCAiKSsiXSJ9O3ZhciBXVnQ9RlZ0LHFWdD1vSHQuR3JhcGgsWVZ0PVZWdCxYVnQ9V1Z0LmNvbnN0YW50KDEpO2Z1bmN0aW9uICRWdCh0LGUsbixpLHIpe3ZhciBvPXI/W106dm9pZCAwO3JldHVybiBXVnQuZm9yRWFjaCh0LmluRWRnZXMoaS52KSwoZnVuY3Rpb24oaSl7dmFyIGE9dC5lZGdlKGkpLHM9dC5ub2RlKGkudik7ciYmby5wdXNoKHt2Omkudix3Omkud30pLHMub3V0LT1hLEtWdChlLG4scyl9KSksV1Z0LmZvckVhY2godC5vdXRFZGdlcyhpLnYpLChmdW5jdGlvbihpKXt2YXIgcj10LmVkZ2UoaSksbz10Lm5vZGUoaS53KTtvLmluLT1yLEtWdChlLG4sbyl9KSksdC5yZW1vdmVOb2RlKGkudiksb31mdW5jdGlvbiBLVnQodCxlLG4pe24ub3V0P24uaW4/dFtuLm91dC1uLmluK2VdLmVucXVldWUobik6dFt0Lmxlbmd0aC0xXS5lbnF1ZXVlKG4pOnRbMF0uZW5xdWV1ZShuKX12YXIgWlZ0PUZWdCxKVnQ9e3J1bjpmdW5jdGlvbiBRVnQodCl7dmFyIGU9ImdyZWVkeSI9PT10LmdyYXBoKCkuYWN5Y2xpY2VyPyhmdW5jdGlvbiBpKHQsZSl7aWYodC5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgbj0oZnVuY3Rpb24gaSh0LGUpe3ZhciBuPW5ldyBxVnQsaT0wLHI9MDtXVnQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe24uc2V0Tm9kZSh0LHt2OnQsaW46MCxvdXQ6MH0pfSkpLFdWdC5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIG89bi5lZGdlKHQudix0LncpfHwwLGE9ZSh0KTtuLnNldEVkZ2UodC52LHQudyxvK2EpLHI9TWF0aC5tYXgocixuLm5vZGUodC52KS5vdXQrPWEpLGk9TWF0aC5tYXgoaSxuLm5vZGUodC53KS5pbis9YSl9KSk7dmFyIG89V1Z0LnJhbmdlKHIraSszKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBZVnR9KSksYT1pKzE7cmV0dXJuIFdWdC5mb3JFYWNoKG4ubm9kZXMoKSwoZnVuY3Rpb24odCl7S1Z0KG8sYSxuLm5vZGUodCkpfSkpLHtncmFwaDpuLGJ1Y2tldHM6byx6ZXJvSWR4OmF9fSkodCxlfHxYVnQpLHI9KGZ1bmN0aW9uIG8odCxlLG4pe2Zvcih2YXIgaSxyPVtdLG89ZVtlLmxlbmd0aC0xXSxhPWVbMF07dC5ub2RlQ291bnQoKTspe2Zvcig7aT1hLmRlcXVldWUoKTspJFZ0KHQsZSxuLGkpO2Zvcig7aT1vLmRlcXVldWUoKTspJFZ0KHQsZSxuLGkpO2lmKHQubm9kZUNvdW50KCkpZm9yKHZhciBzPWUubGVuZ3RoLTI7cz4wOy0tcylpZihpPWVbc10uZGVxdWV1ZSgpKXtyPXIuY29uY2F0KCRWdCh0LGUsbixpLCEwKSk7YnJlYWt9fXJldHVybiByfSkobi5ncmFwaCxuLmJ1Y2tldHMsbi56ZXJvSWR4KTtyZXR1cm4gV1Z0LmZsYXR0ZW4oV1Z0Lm1hcChyLChmdW5jdGlvbihlKXtyZXR1cm4gdC5vdXRFZGdlcyhlLnYsZS53KX0pKSwhMCl9KSh0LChmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5lZGdlKGUpLndlaWdodH19KSh0KSk6KGZ1bmN0aW9uIHIodCl7dmFyIGU9W10sbj17fSxpPXt9O3JldHVybiBaVnQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uIHIobyl7WlZ0LmhhcyhpLG8pfHwoaVtvXT0hMCxuW29dPSEwLFpWdC5mb3JFYWNoKHQub3V0RWRnZXMobyksKGZ1bmN0aW9uKHQpe1pWdC5oYXMobix0LncpP2UucHVzaCh0KTpyKHQudyl9KSksZGVsZXRlIG5bb10pfSkpLGV9KSh0KTtaVnQuZm9yRWFjaChlLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7dC5yZW1vdmVFZGdlKGUpLG4uZm9yd2FyZE5hbWU9ZS5uYW1lLG4ucmV2ZXJzZWQ9ITAsdC5zZXRFZGdlKGUudyxlLnYsbixaVnQudW5pcXVlSWQoInJldiIpKX0pKX0sdW5kbzpmdW5jdGlvbiB0VXQodCl7WlZ0LmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7aWYobi5yZXZlcnNlZCl7dC5yZW1vdmVFZGdlKGUpO3ZhciBpPW4uZm9yd2FyZE5hbWU7ZGVsZXRlIG4ucmV2ZXJzZWQsZGVsZXRlIG4uZm9yd2FyZE5hbWUsdC5zZXRFZGdlKGUudyxlLnYsbixpKX19KSl9fSxlVXQ9RlZ0LG5VdD1vSHQuR3JhcGgsaVV0PXthZGREdW1teU5vZGU6Z1V0LHNpbXBsaWZ5OmZ1bmN0aW9uIHJVdCh0KXt2YXIgZT0obmV3IG5VdCkuc2V0R3JhcGgodC5ncmFwaCgpKTtyZXR1cm4gZVV0LmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXtlLnNldE5vZGUobix0Lm5vZGUobikpfSkpLGVVdC5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9ZS5lZGdlKG4udixuLncpfHx7d2VpZ2h0OjAsbWlubGVuOjF9LHI9dC5lZGdlKG4pO2Uuc2V0RWRnZShuLnYsbi53LHt3ZWlnaHQ6aS53ZWlnaHQrci53ZWlnaHQsbWlubGVuOk1hdGgubWF4KGkubWlubGVuLHIubWlubGVuKX0pfSkpLGV9LGFzTm9uQ29tcG91bmRHcmFwaDpmdW5jdGlvbiBvVXQodCl7dmFyIGU9bmV3IG5VdCh7bXVsdGlncmFwaDp0LmlzTXVsdGlncmFwaCgpfSkuc2V0R3JhcGgodC5ncmFwaCgpKTtyZXR1cm4gZVV0LmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt0LmNoaWxkcmVuKG4pLmxlbmd0aHx8ZS5zZXROb2RlKG4sdC5ub2RlKG4pKX0pKSxlVXQuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe2Uuc2V0RWRnZShuLHQuZWRnZShuKSl9KSksZX0sc3VjY2Vzc29yV2VpZ2h0czpmdW5jdGlvbiBhVXQodCl7dmFyIGU9ZVV0Lm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXt9O3JldHVybiBlVXQuZm9yRWFjaCh0Lm91dEVkZ2VzKGUpLChmdW5jdGlvbihlKXtuW2Uud109KG5bZS53XXx8MCkrdC5lZGdlKGUpLndlaWdodH0pKSxufSkpO3JldHVybiBlVXQuemlwT2JqZWN0KHQubm9kZXMoKSxlKX0scHJlZGVjZXNzb3JXZWlnaHRzOmZ1bmN0aW9uIHNVdCh0KXt2YXIgZT1lVXQubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49e307cmV0dXJuIGVVdC5mb3JFYWNoKHQuaW5FZGdlcyhlKSwoZnVuY3Rpb24oZSl7bltlLnZdPShuW2Uudl18fDApK3QuZWRnZShlKS53ZWlnaHR9KSksbn0pKTtyZXR1cm4gZVV0LnppcE9iamVjdCh0Lm5vZGVzKCksZSl9LGludGVyc2VjdFJlY3Q6ZnVuY3Rpb24gbFV0KHQsZSl7dmFyIG4saSxyPXQueCxvPXQueSxhPWUueC1yLHM9ZS55LW8sbD10LndpZHRoLzIsYz10LmhlaWdodC8yO2lmKCFhJiYhcyl0aHJvdyBuZXcgRXJyb3IoIk5vdCBwb3NzaWJsZSB0byBmaW5kIGludGVyc2VjdGlvbiBpbnNpZGUgb2YgdGhlIHJlY3RhbmdsZSIpO3JldHVybiBNYXRoLmFicyhzKSpsPk1hdGguYWJzKGEpKmM/KHM8MCYmKGM9LWMpLG49YyphL3MsaT1jKTooYTwwJiYobD0tbCksbj1sLGk9bCpzL2EpLHt4OnIrbix5Om8raX19LGJ1aWxkTGF5ZXJNYXRyaXg6ZnVuY3Rpb24gY1V0KHQpe3ZhciBlPWVVdC5tYXAoZVV0LnJhbmdlKF9VdCh0KSsxKSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTtyZXR1cm4gZVV0LmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT10Lm5vZGUobikscj1pLnJhbms7ZVV0LmlzVW5kZWZpbmVkKHIpfHwoZVtyXVtpLm9yZGVyXT1uKX0pKSxlfSxub3JtYWxpemVSYW5rczpmdW5jdGlvbiB1VXQodCl7dmFyIGU9ZVV0Lm1pbihlVXQubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpKTtlVXQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQubm9kZShuKTtlVXQuaGFzKGksInJhbmsiKSYmKGkucmFuay09ZSl9KSl9LHJlbW92ZUVtcHR5UmFua3M6ZnVuY3Rpb24gaFV0KHQpe3ZhciBlPWVVdC5taW4oZVV0Lm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkucmFua30pKSksbj1bXTtlVXQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGkpe3ZhciByPXQubm9kZShpKS5yYW5rLWU7bltyXXx8KG5bcl09W10pLG5bcl0ucHVzaChpKX0pKTt2YXIgaT0wLHI9dC5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yO2VVdC5mb3JFYWNoKG4sKGZ1bmN0aW9uKGUsbil7ZVV0LmlzVW5kZWZpbmVkKGUpJiZuJXIhPTA/LS1pOmkmJmVVdC5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3Qubm9kZShlKS5yYW5rKz1pfSkpfSkpfSxhZGRCb3JkZXJOb2RlOmZ1bmN0aW9uIGRVdCh0LGUsbixpKXt2YXIgcj17d2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTQmJihyLnJhbms9bixyLm9yZGVyPWkpLGdVdCh0LCJib3JkZXIiLHIsZSl9LG1heFJhbms6X1V0LHBhcnRpdGlvbjpmdW5jdGlvbiBwVXQodCxlKXt2YXIgbj17bGhzOltdLHJoczpbXX07cmV0dXJuIGVVdC5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQpe2UodCk/bi5saHMucHVzaCh0KTpuLnJocy5wdXNoKHQpfSkpLG59LHRpbWU6ZnVuY3Rpb24gZlV0KHQsZSl7dmFyIG49ZVV0Lm5vdygpO3RyeXtyZXR1cm4gZSgpfWZpbmFsbHl7Y29uc29sZS5sb2codCsiIHRpbWU6ICIrKGVVdC5ub3coKS1uKSsibXMiKX19LG5vdGltZTpmdW5jdGlvbiBtVXQodCxlKXtyZXR1cm4gZSgpfX07ZnVuY3Rpb24gZ1V0KHQsZSxuLGkpe3ZhciByO2Rve3I9ZVV0LnVuaXF1ZUlkKGkpfXdoaWxlKHQuaGFzTm9kZShyKSk7cmV0dXJuIG4uZHVtbXk9ZSx0LnNldE5vZGUocixuKSxyfWZ1bmN0aW9uIF9VdCh0KXtyZXR1cm4gZVV0Lm1heChlVXQubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5ub2RlKGUpLnJhbms7aWYoIWVVdC5pc1VuZGVmaW5lZChuKSlyZXR1cm4gbn0pKSl9dmFyIHlVdD1GVnQsdlV0PWlVdCxiVXQ9e3J1bjpmdW5jdGlvbiB4VXQodCl7dC5ncmFwaCgpLmR1bW15Q2hhaW5zPVtdLHlVdC5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7IShmdW5jdGlvbiBuKHQsZSl7dmFyIG4saSxyLG89ZS52LGE9dC5ub2RlKG8pLnJhbmsscz1lLncsbD10Lm5vZGUocykucmFuayxjPWUubmFtZSx1PXQuZWRnZShlKSxoPXUubGFiZWxSYW5rO2lmKGwhPT1hKzEpe2Zvcih0LnJlbW92ZUVkZ2UoZSkscj0wLCsrYTthPGw7KytyLCsrYSl1LnBvaW50cz1bXSxuPXZVdC5hZGREdW1teU5vZGUodCwiZWRnZSIsaT17d2lkdGg6MCxoZWlnaHQ6MCxlZGdlTGFiZWw6dSxlZGdlT2JqOmUscmFuazphfSwiX2QiKSxhPT09aCYmKGkud2lkdGg9dS53aWR0aCxpLmhlaWdodD11LmhlaWdodCxpLmR1bW15PSJlZGdlLWxhYmVsIixpLmxhYmVscG9zPXUubGFiZWxwb3MpLHQuc2V0RWRnZShvLG4se3dlaWdodDp1LndlaWdodH0sYyksMD09PXImJnQuZ3JhcGgoKS5kdW1teUNoYWlucy5wdXNoKG4pLG89bjt0LnNldEVkZ2UobyxzLHt3ZWlnaHQ6dS53ZWlnaHR9LGMpfX0pKHQsZSl9KSl9LHVuZG86ZnVuY3Rpb24gd1V0KHQpe3lVdC5mb3JFYWNoKHQuZ3JhcGgoKS5kdW1teUNoYWlucywoZnVuY3Rpb24oZSl7dmFyIG4saT10Lm5vZGUoZSkscj1pLmVkZ2VMYWJlbDtmb3IodC5zZXRFZGdlKGkuZWRnZU9iaixyKTtpLmR1bW15OyluPXQuc3VjY2Vzc29ycyhlKVswXSx0LnJlbW92ZU5vZGUoZSksci5wb2ludHMucHVzaCh7eDppLngseTppLnl9KSwiZWRnZS1sYWJlbCI9PT1pLmR1bW15JiYoci54PWkueCxyLnk9aS55LHIud2lkdGg9aS53aWR0aCxyLmhlaWdodD1pLmhlaWdodCksaT10Lm5vZGUoZT1uKX0pKX19LFNVdD1GVnQsTVV0PWZ1bmN0aW9uIEVVdCh0KXt2YXIgZT17fTtTVXQuZm9yRWFjaCh0LnNvdXJjZXMoKSwoZnVuY3Rpb24gbihpKXt2YXIgcj10Lm5vZGUoaSk7aWYoU1V0LmhhcyhlLGkpKXJldHVybiByLnJhbms7ZVtpXT0hMDt2YXIgbz1TVXQubWluKFNVdC5tYXAodC5vdXRFZGdlcyhpKSwoZnVuY3Rpb24oZSl7cmV0dXJuIG4oZS53KS10LmVkZ2UoZSkubWlubGVufSkpKTtyZXR1cm4gbyE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmbnVsbCE9b3x8KG89MCksci5yYW5rPW99KSl9LFRVdD1mdW5jdGlvbiBDVXQodCxlKXtyZXR1cm4gdC5ub2RlKGUudykucmFuay10Lm5vZGUoZS52KS5yYW5rLXQuZWRnZShlKS5taW5sZW59LEFVdD1GVnQsa1V0PW9IdC5HcmFwaCxMVXQ9VFV0LFBVdD1mdW5jdGlvbiBOVXQodCl7dmFyIGUsbixpPW5ldyBrVXQoe2RpcmVjdGVkOiExfSkscj10Lm5vZGVzKClbMF0sbz10Lm5vZGVDb3VudCgpO2ZvcihpLnNldE5vZGUocix7fSk7SVV0KGksdCk8bzspZT1SVXQoaSx0KSxuPWkuaGFzTm9kZShlLnYpP0xVdCh0LGUpOi1MVXQodCxlKSxPVXQoaSx0LG4pO3JldHVybiBpfTtmdW5jdGlvbiBJVXQodCxlKXtyZXR1cm4gQVV0LmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbiBuKGkpe0FVdC5mb3JFYWNoKGUubm9kZUVkZ2VzKGkpLChmdW5jdGlvbihyKXt2YXIgbz1yLnYsYT1pPT09bz9yLnc6bzt0Lmhhc05vZGUoYSl8fExVdChlLHIpfHwodC5zZXROb2RlKGEse30pLHQuc2V0RWRnZShpLGEse30pLG4oYSkpfSkpfSkpLHQubm9kZUNvdW50KCl9ZnVuY3Rpb24gUlV0KHQsZSl7cmV0dXJuIEFVdC5taW5CeShlLmVkZ2VzKCksKGZ1bmN0aW9uKG4pe2lmKHQuaGFzTm9kZShuLnYpIT09dC5oYXNOb2RlKG4udykpcmV0dXJuIExVdChlLG4pfSkpfWZ1bmN0aW9uIE9VdCh0LGUsbil7QVV0LmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbih0KXtlLm5vZGUodCkucmFuays9bn0pKX12YXIgelV0PUZWdCxEVXQ9UFV0LEJVdD1UVXQsSFV0PU1VdCxGVXQ9b0h0LmFsZy5wcmVvcmRlcixWVXQ9b0h0LmFsZy5wb3N0b3JkZXIsVVV0PWlVdC5zaW1wbGlmeSxqVXQ9R1V0O2Z1bmN0aW9uIEdVdCh0KXt0PVVVdCh0KSxIVXQodCk7dmFyIGUsbj1EVXQodCk7Zm9yKFlVdChuKSxXVXQobix0KTtlPSRVdChuKTspWlV0KG4sdCxlLEtVdChuLHQsZSkpfWZ1bmN0aW9uIFdVdCh0LGUpe3ZhciBuPVZVdCh0LHQubm9kZXMoKSk7bj1uLnNsaWNlKDAsbi5sZW5ndGgtMSkselV0LmZvckVhY2gobiwoZnVuY3Rpb24obil7IShmdW5jdGlvbiBpKHQsZSxuKXt2YXIgaT10Lm5vZGUobik7dC5lZGdlKG4saS5wYXJlbnQpLmN1dHZhbHVlPXFVdCh0LGUsbil9KSh0LGUsbil9KSl9ZnVuY3Rpb24gcVV0KHQsZSxuKXt2YXIgaT10Lm5vZGUobikucGFyZW50LHI9ITAsbz1lLmVkZ2UobixpKSxhPTA7cmV0dXJuIG98fChyPSExLG89ZS5lZGdlKGksbikpLGE9by53ZWlnaHQselV0LmZvckVhY2goZS5ub2RlRWRnZXMobiksKGZ1bmN0aW9uKG8pe3ZhciBzPW8udj09PW4sbD1zP28udzpvLnY7aWYobCE9PWkpe3ZhciBjPXM9PT1yLHU9ZS5lZGdlKG8pLndlaWdodDtpZihhKz1jP3U6LXUsKGZ1bmN0aW9uIGgodCxlLG4pe3JldHVybiB0Lmhhc0VkZ2UoZSxuKX0pKHQsbixsKSl7dmFyIGQ9dC5lZGdlKG4sbCkuY3V0dmFsdWU7YSs9Yz8tZDpkfX19KSksYX1mdW5jdGlvbiBZVXQodCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPXQubm9kZXMoKVswXSksWFV0KHQse30sMSxlKX1mdW5jdGlvbiBYVXQodCxlLG4saSxyKXt2YXIgbz1uLGE9dC5ub2RlKGkpO3JldHVybiBlW2ldPSEwLHpVdC5mb3JFYWNoKHQubmVpZ2hib3JzKGkpLChmdW5jdGlvbihyKXt6VXQuaGFzKGUscil8fChuPVhVdCh0LGUsbixyLGkpKX0pKSxhLmxvdz1vLGEubGltPW4rKyxyP2EucGFyZW50PXI6ZGVsZXRlIGEucGFyZW50LG59ZnVuY3Rpb24gJFV0KHQpe3JldHVybiB6VXQuZmluZCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3JldHVybiB0LmVkZ2UoZSkuY3V0dmFsdWU8MH0pKX1mdW5jdGlvbiBLVXQodCxlLG4pe3ZhciBpPW4udixyPW4udztlLmhhc0VkZ2UoaSxyKXx8KGk9bi53LHI9bi52KTt2YXIgbz10Lm5vZGUoaSksYT10Lm5vZGUocikscz1vLGw9ITE7by5saW0+YS5saW0mJihzPWEsbD0hMCk7dmFyIGM9elV0LmZpbHRlcihlLmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3JldHVybiBsPT09SlV0KDAsdC5ub2RlKGUudikscykmJmwhPT1KVXQoMCx0Lm5vZGUoZS53KSxzKX0pKTtyZXR1cm4gelV0Lm1pbkJ5KGMsKGZ1bmN0aW9uKHQpe3JldHVybiBCVXQoZSx0KX0pKX1mdW5jdGlvbiBaVXQodCxlLG4saSl7dC5yZW1vdmVFZGdlKG4udixuLncpLHQuc2V0RWRnZShpLnYsaS53LHt9KSxZVXQodCksV1V0KHQsZSksKGZ1bmN0aW9uIHIodCxlKXt2YXIgbj16VXQuZmluZCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe3JldHVybiFlLm5vZGUodCkucGFyZW50fSkpLGk9RlV0KHQsbik7aT1pLnNsaWNlKDEpLHpVdC5mb3JFYWNoKGksKGZ1bmN0aW9uKG4pe3ZhciBpPXQubm9kZShuKS5wYXJlbnQscj1lLmVkZ2UobixpKSxvPSExO3J8fChyPWUuZWRnZShpLG4pLG89ITApLGUubm9kZShuKS5yYW5rPWUubm9kZShpKS5yYW5rKyhvP3IubWlubGVuOi1yLm1pbmxlbil9KSl9KSh0LGUpfWZ1bmN0aW9uIEpVdCh0LGUsbil7cmV0dXJuIG4ubG93PD1lLmxpbSYmZS5saW08PW4ubGltfUdVdC5pbml0TG93TGltVmFsdWVzPVlVdCxHVXQuaW5pdEN1dFZhbHVlcz1XVXQsR1V0LmNhbGNDdXRWYWx1ZT1xVXQsR1V0LmxlYXZlRWRnZT0kVXQsR1V0LmVudGVyRWRnZT1LVXQsR1V0LmV4Y2hhbmdlRWRnZXM9WlV0O3ZhciBRVXQ9TVV0LHRqdD1QVXQsZWp0PWpVdCxuanQ9UVV0O2Z1bmN0aW9uIGlqdCh0KXtlanQodCl9dmFyIHJqdD1GVnQsb2p0PUZWdCxhanQ9aVV0O2Z1bmN0aW9uIHNqdCh0LGUsbixpLHIsbyxhKXt2YXIgcz10LmNoaWxkcmVuKGEpO2lmKHMubGVuZ3RoKXt2YXIgbD1hanQuYWRkQm9yZGVyTm9kZSh0LCJfYnQiKSxjPWFqdC5hZGRCb3JkZXJOb2RlKHQsIl9iYiIpLHU9dC5ub2RlKGEpO3Quc2V0UGFyZW50KGwsYSksdS5ib3JkZXJUb3A9bCx0LnNldFBhcmVudChjLGEpLHUuYm9yZGVyQm90dG9tPWMsb2p0LmZvckVhY2gocywoZnVuY3Rpb24ocyl7c2p0KHQsZSxuLGkscixvLHMpO3ZhciB1PXQubm9kZShzKSxoPXUuYm9yZGVyVG9wP3UuYm9yZGVyVG9wOnMsZD11LmJvcmRlckJvdHRvbT91LmJvcmRlckJvdHRvbTpzLHA9dS5ib3JkZXJUb3A/aToyKmksZj1oIT09ZD8xOnItb1thXSsxO3Quc2V0RWRnZShsLGgse3dlaWdodDpwLG1pbmxlbjpmLG5lc3RpbmdFZGdlOiEwfSksdC5zZXRFZGdlKGQsYyx7d2VpZ2h0OnAsbWlubGVuOmYsbmVzdGluZ0VkZ2U6ITB9KX0pKSx0LnBhcmVudChhKXx8dC5zZXRFZGdlKGUsbCx7d2VpZ2h0OjAsbWlubGVuOnIrb1thXX0pfWVsc2UgYSE9PWUmJnQuc2V0RWRnZShlLGEse3dlaWdodDowLG1pbmxlbjpufSl9dmFyIGxqdD1GVnQsY2p0PWlVdDtmdW5jdGlvbiB1anQodCxlLG4saSxyLG8pe3ZhciBhPXJbZV1bby0xXSxzPWNqdC5hZGREdW1teU5vZGUodCwiYm9yZGVyIix7d2lkdGg6MCxoZWlnaHQ6MCxyYW5rOm8sYm9yZGVyVHlwZTplfSxuKTtyW2VdW29dPXMsdC5zZXRQYXJlbnQocyxpKSxhJiZ0LnNldEVkZ2UoYSxzLHt3ZWlnaHQ6MX0pfXZhciBoanQ9RlZ0O2Z1bmN0aW9uIGRqdCh0KXtoanQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3BqdCh0Lm5vZGUoZSkpfSkpLGhqdC5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7cGp0KHQuZWRnZShlKSl9KSl9ZnVuY3Rpb24gcGp0KHQpe3ZhciBlPXQud2lkdGg7dC53aWR0aD10LmhlaWdodCx0LmhlaWdodD1lfWZ1bmN0aW9uIGZqdCh0KXt0Lnk9LXQueX1mdW5jdGlvbiBtanQodCl7dmFyIGU9dC54O3QueD10LnksdC55PWV9dmFyIGdqdD1GVnQsX2p0PUZWdDtmdW5jdGlvbiB5anQodCxlLG4pe2Zvcih2YXIgaT1fanQuemlwT2JqZWN0KG4sX2p0Lm1hcChuLChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpKSxyPV9qdC5mbGF0dGVuKF9qdC5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIF9qdC5zb3J0QnkoX2p0Lm1hcCh0Lm91dEVkZ2VzKGUpLChmdW5jdGlvbihlKXtyZXR1cm57cG9zOmlbZS53XSx3ZWlnaHQ6dC5lZGdlKGUpLndlaWdodH19KSksInBvcyIpfSkpLCEwKSxvPTE7bzxuLmxlbmd0aDspbzw8PTE7dmFyIGE9MipvLTE7by09MTt2YXIgcz1fanQubWFwKG5ldyBBcnJheShhKSwoZnVuY3Rpb24oKXtyZXR1cm4gMH0pKSxsPTA7cmV0dXJuIF9qdC5mb3JFYWNoKHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5wb3MrbztzW2VdKz10LndlaWdodDtmb3IodmFyIG49MDtlPjA7KWUlMiYmKG4rPXNbZSsxXSksc1tlPWUtMT4+MV0rPXQud2VpZ2h0O2wrPXQud2VpZ2h0Km59KSkpLGx9dmFyIHZqdD1GVnQsYmp0PUZWdCx4anQ9RlZ0LHdqdD1pVXQ7ZnVuY3Rpb24gU2p0KHQsZSxuKXtmb3IodmFyIGk7ZS5sZW5ndGgmJihpPXhqdC5sYXN0KGUpKS5pPD1uOyllLnBvcCgpLHQucHVzaChpLnZzKSxuKys7cmV0dXJuIG59dmFyIE1qdD1GVnQsRWp0PUZWdCxUanQ9b0h0LkdyYXBoLENqdD1GVnQsQWp0PUZWdCxranQ9ZnVuY3Rpb24gTGp0KHQsZSl7Zm9yKHZhciBuPTAsaT0xO2k8ZS5sZW5ndGg7KytpKW4rPXlqdCh0LGVbaS0xXSxlW2ldKTtyZXR1cm4gbn0sUGp0PWZ1bmN0aW9uIHQoZSxuLGkscil7dmFyIG89ZS5jaGlsZHJlbihuKSxhPWUubm9kZShuKSxzPWE/YS5ib3JkZXJMZWZ0OnZvaWQgMCxsPWE/YS5ib3JkZXJSaWdodDp2b2lkIDAsYz17fTtzJiYobz1NanQuZmlsdGVyKG8sKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09cyYmdCE9PWx9KSkpO3ZhciB1PShmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHZqdC5tYXAoZSwoZnVuY3Rpb24oZSl7dmFyIG49dC5pbkVkZ2VzKGUpO2lmKG4ubGVuZ3RoKXt2YXIgaT12anQucmVkdWNlKG4sKGZ1bmN0aW9uKGUsbil7dmFyIGk9dC5lZGdlKG4pLHI9dC5ub2RlKG4udik7cmV0dXJue3N1bTplLnN1bStpLndlaWdodCpyLm9yZGVyLHdlaWdodDplLndlaWdodCtpLndlaWdodH19KSx7c3VtOjAsd2VpZ2h0OjB9KTtyZXR1cm57djplLGJhcnljZW50ZXI6aS5zdW0vaS53ZWlnaHQsd2VpZ2h0Omkud2VpZ2h0fX1yZXR1cm57djplfX0pKX0pKGUsbyk7TWp0LmZvckVhY2godSwoZnVuY3Rpb24obil7aWYoZS5jaGlsZHJlbihuLnYpLmxlbmd0aCl7dmFyIG89dChlLG4udixpLHIpO2Nbbi52XT1vLE1qdC5oYXMobywiYmFyeWNlbnRlciIpJiYoZnVuY3Rpb24gYSh0LGUpe01qdC5pc1VuZGVmaW5lZCh0LmJhcnljZW50ZXIpPyh0LmJhcnljZW50ZXI9ZS5iYXJ5Y2VudGVyLHQud2VpZ2h0PWUud2VpZ2h0KToodC5iYXJ5Y2VudGVyPSh0LmJhcnljZW50ZXIqdC53ZWlnaHQrZS5iYXJ5Y2VudGVyKmUud2VpZ2h0KS8odC53ZWlnaHQrZS53ZWlnaHQpLHQud2VpZ2h0Kz1lLndlaWdodCl9KShuLG8pfX0pKTt2YXIgZD0oZnVuY3Rpb24gcCh0LGUpe3ZhciBuPXt9O3JldHVybiBianQuZm9yRWFjaCh0LChmdW5jdGlvbih0LGUpe3ZhciBpPW5bdC52XT17aW5kZWdyZWU6MCxpbjpbXSxvdXQ6W10sdnM6W3Qudl0saTplfTtianQuaXNVbmRlZmluZWQodC5iYXJ5Y2VudGVyKXx8KGkuYmFyeWNlbnRlcj10LmJhcnljZW50ZXIsaS53ZWlnaHQ9dC53ZWlnaHQpfSkpLGJqdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIGU9blt0LnZdLGk9blt0LnddO2JqdC5pc1VuZGVmaW5lZChlKXx8Ymp0LmlzVW5kZWZpbmVkKGkpfHwoaS5pbmRlZ3JlZSsrLGUub3V0LnB1c2goblt0LnddKSl9KSksKGZ1bmN0aW9uIGkodCl7dmFyIGU9W107ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5tZXJnZWR8fChianQuaXNVbmRlZmluZWQoZS5iYXJ5Y2VudGVyKXx8Ymp0LmlzVW5kZWZpbmVkKHQuYmFyeWNlbnRlcil8fGUuYmFyeWNlbnRlcj49dC5iYXJ5Y2VudGVyKSYmKGZ1bmN0aW9uIG4odCxlKXt2YXIgbj0wLGk9MDt0LndlaWdodCYmKG4rPXQuYmFyeWNlbnRlcip0LndlaWdodCxpKz10LndlaWdodCksZS53ZWlnaHQmJihuKz1lLmJhcnljZW50ZXIqZS53ZWlnaHQsaSs9ZS53ZWlnaHQpLHQudnM9ZS52cy5jb25jYXQodC52cyksdC5iYXJ5Y2VudGVyPW4vaSx0LndlaWdodD1pLHQuaT1NYXRoLm1pbihlLmksdC5pKSxlLm1lcmdlZD0hMH0pKHQsZSl9fWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uaW4ucHVzaChlKSwwPT0tLW4uaW5kZWdyZWUmJnQucHVzaChuKX19Zm9yKDt0Lmxlbmd0aDspe3ZhciByPXQucG9wKCk7ZS5wdXNoKHIpLGJqdC5mb3JFYWNoKHIuaW4ucmV2ZXJzZSgpLG4ocikpLGJqdC5mb3JFYWNoKHIub3V0LGkocikpfXJldHVybiBianQubWFwKGJqdC5maWx0ZXIoZSwoZnVuY3Rpb24odCl7cmV0dXJuIXQubWVyZ2VkfSkpLChmdW5jdGlvbih0KXtyZXR1cm4gYmp0LnBpY2sodCxbInZzIiwiaSIsImJhcnljZW50ZXIiLCJ3ZWlnaHQiXSl9KSl9KShianQuZmlsdGVyKG4sKGZ1bmN0aW9uKHQpe3JldHVybiF0LmluZGVncmVlfSkpKX0pKHUsaSk7IShmdW5jdGlvbiBmKHQsZSl7TWp0LmZvckVhY2godCwoZnVuY3Rpb24odCl7dC52cz1NanQuZmxhdHRlbih0LnZzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF0/ZVt0XS52czp0fSkpLCEwKX0pKX0pKGQsYyk7dmFyIG09KGZ1bmN0aW9uIGcodCxlKXt2YXIgbj13anQucGFydGl0aW9uKHQsKGZ1bmN0aW9uKHQpe3JldHVybiB4anQuaGFzKHQsImJhcnljZW50ZXIiKX0pKSxpPW4ubGhzLHI9eGp0LnNvcnRCeShuLnJocywoZnVuY3Rpb24odCl7cmV0dXJuLXQuaX0pKSxvPVtdLGE9MCxzPTAsbD0wO2kuc29ydCgoZnVuY3Rpb24gYyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gZS5iYXJ5Y2VudGVyPG4uYmFyeWNlbnRlcj8tMTplLmJhcnljZW50ZXI+bi5iYXJ5Y2VudGVyPzE6dD9uLmktZS5pOmUuaS1uLml9fSkoISFlKSksbD1TanQobyxyLGwpLHhqdC5mb3JFYWNoKGksKGZ1bmN0aW9uKHQpe2wrPXQudnMubGVuZ3RoLG8ucHVzaCh0LnZzKSxhKz10LmJhcnljZW50ZXIqdC53ZWlnaHQscys9dC53ZWlnaHQsbD1TanQobyxyLGwpfSkpO3ZhciB1PXt2czp4anQuZmxhdHRlbihvLCEwKX07cmV0dXJuIHMmJih1LmJhcnljZW50ZXI9YS9zLHUud2VpZ2h0PXMpLHV9KShkLHIpO2lmKHMmJihtLnZzPU1qdC5mbGF0dGVuKFtzLG0udnMsbF0sITApLGUucHJlZGVjZXNzb3JzKHMpLmxlbmd0aCkpe3ZhciBfPWUubm9kZShlLnByZWRlY2Vzc29ycyhzKVswXSkseT1lLm5vZGUoZS5wcmVkZWNlc3NvcnMobClbMF0pO01qdC5oYXMobSwiYmFyeWNlbnRlciIpfHwobS5iYXJ5Y2VudGVyPTAsbS53ZWlnaHQ9MCksbS5iYXJ5Y2VudGVyPShtLmJhcnljZW50ZXIqbS53ZWlnaHQrXy5vcmRlcit5Lm9yZGVyKS8obS53ZWlnaHQrMiksbS53ZWlnaHQrPTJ9cmV0dXJuIG19LE5qdD1vSHQuR3JhcGgsSWp0PWlVdDtmdW5jdGlvbiBSanQodCxlLG4pe3JldHVybiBBanQubWFwKGUsKGZ1bmN0aW9uKGUpe3JldHVybihmdW5jdGlvbiBpKHQsZSxuKXt2YXIgaT0oZnVuY3Rpb24gcih0KXtmb3IodmFyIGU7dC5oYXNOb2RlKGU9RWp0LnVuaXF1ZUlkKCJfcm9vdCIpKTspO3JldHVybiBlfSkodCksbz1uZXcgVGp0KHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290Oml9KS5zZXREZWZhdWx0Tm9kZUxhYmVsKChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpfSkpO3JldHVybiBFanQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHIpe3ZhciBhPXQubm9kZShyKSxzPXQucGFyZW50KHIpOyhhLnJhbms9PT1lfHxhLm1pblJhbms8PWUmJmU8PWEubWF4UmFuaykmJihvLnNldE5vZGUociksby5zZXRQYXJlbnQocixzfHxpKSxFanQuZm9yRWFjaCh0W25dKHIpLChmdW5jdGlvbihlKXt2YXIgbj1lLnY9PT1yP2UudzplLnYsaT1vLmVkZ2UobixyKSxhPUVqdC5pc1VuZGVmaW5lZChpKT8wOmkud2VpZ2h0O28uc2V0RWRnZShuLHIse3dlaWdodDp0LmVkZ2UoZSkud2VpZ2h0K2F9KX0pKSxFanQuaGFzKGEsIm1pblJhbmsiKSYmby5zZXROb2RlKHIse2JvcmRlckxlZnQ6YS5ib3JkZXJMZWZ0W2VdLGJvcmRlclJpZ2h0OmEuYm9yZGVyUmlnaHRbZV19KSl9KSksb30pKHQsZSxuKX0pKX1mdW5jdGlvbiBPanQodCxlKXt2YXIgbj1uZXcgTmp0O0FqdC5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQpe3ZhciBpPXQuZ3JhcGgoKS5yb290LHI9UGp0KHQsaSxuLGUpO0FqdC5mb3JFYWNoKHIudnMsKGZ1bmN0aW9uKGUsbil7dC5ub2RlKGUpLm9yZGVyPW59KSksKGZ1bmN0aW9uIG8odCxlLG4pe3ZhciBpLHI9e307Q2p0LmZvckVhY2gobiwoZnVuY3Rpb24obil7Zm9yKHZhciBvLGEscz10LnBhcmVudChuKTtzOyl7aWYoKG89dC5wYXJlbnQocykpPyhhPXJbb10scltvXT1zKTooYT1pLGk9cyksYSYmYSE9PXMpcmV0dXJuIHZvaWQgZS5zZXRFZGdlKGEscyk7cz1vfX0pKX0pKHQsbixyLnZzKX0pKX1mdW5jdGlvbiB6anQodCxlKXtBanQuZm9yRWFjaChlLChmdW5jdGlvbihlKXtBanQuZm9yRWFjaChlLChmdW5jdGlvbihlLG4pe3Qubm9kZShlKS5vcmRlcj1ufSkpfSkpfXZhciBEanQ9RlZ0LEJqdD1vSHQuR3JhcGgsSGp0PWlVdDtmdW5jdGlvbiBGanQodCxlLG4pe2lmKGU+bil7dmFyIGk9ZTtlPW4sbj1pfXZhciByPXRbZV07cnx8KHRbZV09cj17fSkscltuXT0hMH1mdW5jdGlvbiBWanQodCxlLG4pe2lmKGU+bil7dmFyIGk9ZTtlPW4sbj1pfXJldHVybiBEanQuaGFzKHRbZV0sbil9dmFyIFVqdD1GVnQsamp0PWlVdCxHanQ9RlZ0LFdqdD1KVnQscWp0PWJVdCxZanQ9aVV0Lm5vcm1hbGl6ZVJhbmtzLFhqdD1pVXQucmVtb3ZlRW1wdHlSYW5rcywkanQ9ZnVuY3Rpb24gS2p0KHQpe3ZhciBlPWFqdC5hZGREdW1teU5vZGUodCwicm9vdCIse30sIl9yb290Iiksbj0oZnVuY3Rpb24gaSh0KXt2YXIgZT17fTtmdW5jdGlvbiBuKGkscil7dmFyIG89dC5jaGlsZHJlbihpKTtvJiZvLmxlbmd0aCYmb2p0LmZvckVhY2gobywoZnVuY3Rpb24odCl7bih0LHIrMSl9KSksZVtpXT1yfXJldHVybiBvanQuZm9yRWFjaCh0LmNoaWxkcmVuKCksKGZ1bmN0aW9uKHQpe24odCwxKX0pKSxlfSkodCkscj1vanQubWF4KG9qdC52YWx1ZXMobikpLTEsbz0yKnIrMTt0LmdyYXBoKCkubmVzdGluZ1Jvb3Q9ZSxvanQuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3QuZWRnZShlKS5taW5sZW4qPW99KSk7dmFyIGE9KGZ1bmN0aW9uIHModCl7cmV0dXJuIG9qdC5yZWR1Y2UodC5lZGdlcygpLChmdW5jdGlvbihlLG4pe3JldHVybiBlK3QuZWRnZShuKS53ZWlnaHR9KSwwKX0pKHQpKzE7b2p0LmZvckVhY2godC5jaGlsZHJlbigpLChmdW5jdGlvbihpKXtzanQodCxlLG8sYSxyLG4saSl9KSksdC5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yPW99LFpqdD1pVXQsSmp0PW9IdC5HcmFwaCxRanQ9WyJub2Rlc2VwIiwiZWRnZXNlcCIsInJhbmtzZXAiLCJtYXJnaW54IiwibWFyZ2lueSJdLHRHdD17cmFua3NlcDo1MCxlZGdlc2VwOjIwLG5vZGVzZXA6NTAscmFua2RpcjoidGIifSxlR3Q9WyJhY3ljbGljZXIiLCJyYW5rZXIiLCJyYW5rZGlyIiwiYWxpZ24iXSxuR3Q9WyJ3aWR0aCIsImhlaWdodCJdLGlHdD17d2lkdGg6MCxoZWlnaHQ6MH0sckd0PVsibWlubGVuIiwid2VpZ2h0Iiwid2lkdGgiLCJoZWlnaHQiLCJsYWJlbG9mZnNldCJdLG9HdD17bWlubGVuOjEsd2VpZ2h0OjEsd2lkdGg6MCxoZWlnaHQ6MCxsYWJlbG9mZnNldDoxMCxsYWJlbHBvczoiciJ9LGFHdD1bImxhYmVscG9zIl07ZnVuY3Rpb24gc0d0KHQsZSl7cmV0dXJuIEdqdC5tYXBWYWx1ZXMoR2p0LnBpY2sodCxlKSxOdW1iZXIpfWZ1bmN0aW9uIGxHdCh0KXt2YXIgZT17fTtyZXR1cm4gR2p0LmZvckVhY2godCwoZnVuY3Rpb24odCxuKXtlW24udG9Mb3dlckNhc2UoKV09dH0pKSxlfXZhciBjR3QsdUd0LGhHdD1GVnQsZEd0PWlVdCxwR3Q9b0h0LkdyYXBoLGZHdD17Z3JhcGhsaWI6b0h0LGxheW91dDpmdW5jdGlvbiBtR3QodCxlKXt2YXIgbj1lJiZlLmRlYnVnVGltaW5nP1pqdC50aW1lOlpqdC5ub3RpbWU7bigibGF5b3V0IiwoZnVuY3Rpb24oKXt2YXIgZT1uKCIgIGJ1aWxkTGF5b3V0R3JhcGgiLChmdW5jdGlvbigpe3JldHVybihmdW5jdGlvbiBlKHQpe3ZhciBlPW5ldyBKanQoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KSxuPWxHdCh0LmdyYXBoKCkpO3JldHVybiBlLnNldEdyYXBoKEdqdC5tZXJnZSh7fSx0R3Qsc0d0KG4sUWp0KSxHanQucGljayhuLGVHdCkpKSxHanQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPWxHdCh0Lm5vZGUobikpO2Uuc2V0Tm9kZShuLEdqdC5kZWZhdWx0cyhzR3QoaSxuR3QpLGlHdCkpLGUuc2V0UGFyZW50KG4sdC5wYXJlbnQobikpfSkpLEdqdC5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9bEd0KHQuZWRnZShuKSk7ZS5zZXRFZGdlKG4sR2p0Lm1lcmdlKHt9LG9HdCxzR3QoaSxyR3QpLEdqdC5waWNrKGksYUd0KSkpfSkpLGV9KSh0KX0pKTtuKCIgIHJ1bkxheW91dCIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUsbil7bigiICAgIG1ha2VTcGFjZUZvckVkZ2VMYWJlbHMiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXt2YXIgbj1lLmdyYXBoKCk7bi5yYW5rc2VwLz0yLEdqdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIGk9ZS5lZGdlKHQpO2kubWlubGVuKj0yLCJjIiE9PWkubGFiZWxwb3MudG9Mb3dlckNhc2UoKSYmKCJUQiI9PT1uLnJhbmtkaXJ8fCJCVCI9PT1uLnJhbmtkaXI/aS53aWR0aCs9aS5sYWJlbG9mZnNldDppLmhlaWdodCs9aS5sYWJlbG9mZnNldCl9KSl9KShlKX0pKSxuKCIgICAgcmVtb3ZlU2VsZkVkZ2VzIiwoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSl7R2p0LmZvckVhY2goZS5lZGdlcygpLChmdW5jdGlvbih0KXtpZih0LnY9PT10Lncpe3ZhciBuPWUubm9kZSh0LnYpO24uc2VsZkVkZ2VzfHwobi5zZWxmRWRnZXM9W10pLG4uc2VsZkVkZ2VzLnB1c2goe2U6dCxsYWJlbDplLmVkZ2UodCl9KSxlLnJlbW92ZUVkZ2UodCl9fSkpfSkoZSl9KSksbigiICAgIGFjeWNsaWMiLChmdW5jdGlvbigpe1dqdC5ydW4oZSl9KSksbigiICAgIG5lc3RpbmdHcmFwaC5ydW4iLChmdW5jdGlvbigpeyRqdChlKX0pKSxuKCIgICAgcmFuayIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe3N3aXRjaChlLmdyYXBoKCkucmFua2VyKXtjYXNlIm5ldHdvcmstc2ltcGxleCI6aWp0KGUpO2JyZWFrO2Nhc2UidGlnaHQtdHJlZSI6IShmdW5jdGlvbiBuKHQpe1FVdCh0KSx0anQodCl9KShlKTticmVhaztjYXNlImxvbmdlc3QtcGF0aCI6bmp0KGUpO2JyZWFrO2RlZmF1bHQ6aWp0KGUpfX0pKFpqdC5hc05vbkNvbXBvdW5kR3JhcGgoZSkpfSkpLG4oIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIiwoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSl7R2p0LmZvckVhY2goZS5lZGdlcygpLChmdW5jdGlvbih0KXt2YXIgbj1lLmVkZ2UodCk7aWYobi53aWR0aCYmbi5oZWlnaHQpe3ZhciBpPWUubm9kZSh0LnYpLHI9ZS5ub2RlKHQudyk7Wmp0LmFkZER1bW15Tm9kZShlLCJlZGdlLXByb3h5Iix7cmFuazooci5yYW5rLWkucmFuaykvMitpLnJhbmssZTp0fSwiX2VwIil9fSkpfSkoZSl9KSksbigiICAgIHJlbW92ZUVtcHR5UmFua3MiLChmdW5jdGlvbigpe1hqdChlKX0pKSxuKCIgICAgbmVzdGluZ0dyYXBoLmNsZWFudXAiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXt2YXIgbj1lLmdyYXBoKCk7ZS5yZW1vdmVOb2RlKG4ubmVzdGluZ1Jvb3QpLGRlbGV0ZSBuLm5lc3RpbmdSb290LG9qdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7ZS5lZGdlKHQpLm5lc3RpbmdFZGdlJiZlLnJlbW92ZUVkZ2UodCl9KSl9KShlKX0pKSxuKCIgICAgbm9ybWFsaXplUmFua3MiLChmdW5jdGlvbigpe1lqdChlKX0pKSxuKCIgICAgYXNzaWduUmFua01pbk1heCIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe3ZhciBuPTA7R2p0LmZvckVhY2goZS5ub2RlcygpLChmdW5jdGlvbih0KXt2YXIgaT1lLm5vZGUodCk7aS5ib3JkZXJUb3AmJihpLm1pblJhbms9ZS5ub2RlKGkuYm9yZGVyVG9wKS5yYW5rLGkubWF4UmFuaz1lLm5vZGUoaS5ib3JkZXJCb3R0b20pLnJhbmssbj1HanQubWF4KG4saS5tYXhSYW5rKSl9KSksZS5ncmFwaCgpLm1heFJhbms9bn0pKGUpfSkpLG4oIiAgICByZW1vdmVFZGdlTGFiZWxQcm94aWVzIiwoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSl7R2p0LmZvckVhY2goZS5ub2RlcygpLChmdW5jdGlvbih0KXt2YXIgbj1lLm5vZGUodCk7ImVkZ2UtcHJveHkiPT09bi5kdW1teSYmKGUuZWRnZShuLmUpLmxhYmVsUmFuaz1uLnJhbmssZS5yZW1vdmVOb2RlKHQpKX0pKX0pKGUpfSkpLG4oIiAgICBub3JtYWxpemUucnVuIiwoZnVuY3Rpb24oKXtxanQucnVuKGUpfSkpLG4oIiAgICBwYXJlbnREdW1teUNoYWlucyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe3ZhciBuPShmdW5jdGlvbiBpKHQpe3ZhciBlPXt9LG49MDtyZXR1cm4gcmp0LmZvckVhY2godC5jaGlsZHJlbigpLChmdW5jdGlvbiBpKHIpe3ZhciBvPW47cmp0LmZvckVhY2godC5jaGlsZHJlbihyKSxpKSxlW3JdPXtsb3c6byxsaW06bisrfX0pKSxlfSkoZSk7cmp0LmZvckVhY2goZS5ncmFwaCgpLmR1bW15Q2hhaW5zLChmdW5jdGlvbih0KXtmb3IodmFyIGk9ZS5ub2RlKHQpLHI9aS5lZGdlT2JqLG89KGZ1bmN0aW9uIGEodCxlLG4saSl7dmFyIHIsbyxhPVtdLHM9W10sbD1NYXRoLm1pbihlW25dLmxvdyxlW2ldLmxvdyksYz1NYXRoLm1heChlW25dLmxpbSxlW2ldLmxpbSk7cj1uO2Rve3I9dC5wYXJlbnQociksYS5wdXNoKHIpfXdoaWxlKHImJihlW3JdLmxvdz5sfHxjPmVbcl0ubGltKSk7Zm9yKG89cixyPWk7KHI9dC5wYXJlbnQocikpIT09bzspcy5wdXNoKHIpO3JldHVybntwYXRoOmEuY29uY2F0KHMucmV2ZXJzZSgpKSxsY2E6b319KShlLG4sci52LHIudykscz1vLnBhdGgsbD1vLmxjYSxjPTAsdT1zW2NdLGg9ITA7dCE9PXIudzspe2lmKGk9ZS5ub2RlKHQpLGgpe2Zvcig7KHU9c1tjXSkhPT1sJiZlLm5vZGUodSkubWF4UmFuazxpLnJhbms7KWMrKzt1PT09bCYmKGg9ITEpfWlmKCFoKXtmb3IoO2M8cy5sZW5ndGgtMSYmZS5ub2RlKHU9c1tjKzFdKS5taW5SYW5rPD1pLnJhbms7KWMrKzt1PXNbY119ZS5zZXRQYXJlbnQodCx1KSx0PWUuc3VjY2Vzc29ycyh0KVswXX19KSl9KShlKX0pKSxuKCIgICAgYWRkQm9yZGVyU2VnbWVudHMiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXtsanQuZm9yRWFjaChlLmNoaWxkcmVuKCksKGZ1bmN0aW9uIHQobil7dmFyIGk9ZS5jaGlsZHJlbihuKSxyPWUubm9kZShuKTtpZihpLmxlbmd0aCYmbGp0LmZvckVhY2goaSx0KSxsanQuaGFzKHIsIm1pblJhbmsiKSl7ci5ib3JkZXJMZWZ0PVtdLHIuYm9yZGVyUmlnaHQ9W107Zm9yKHZhciBvPXIubWluUmFuayxhPXIubWF4UmFuaysxO288YTsrK28pdWp0KGUsImJvcmRlckxlZnQiLCJfYmwiLG4scixvKSx1anQoZSwiYm9yZGVyUmlnaHQiLCJfYnIiLG4scixvKX19KSl9KShlKX0pKSxuKCIgICAgb3JkZXIiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXt2YXIgbj1JanQubWF4UmFuayhlKSxpPVJqdChlLEFqdC5yYW5nZSgxLG4rMSksImluRWRnZXMiKSxyPVJqdChlLEFqdC5yYW5nZShuLTEsLTEsLTEpLCJvdXRFZGdlcyIpLG89KGZ1bmN0aW9uIGEodCl7dmFyIGU9e30sbj1nanQuZmlsdGVyKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIXQuY2hpbGRyZW4oZSkubGVuZ3RofSkpLGk9Z2p0Lm1heChnanQubWFwKG4sKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkucmFua30pKSkscj1nanQubWFwKGdqdC5yYW5nZShpKzEpLChmdW5jdGlvbigpe3JldHVybltdfSkpLG89Z2p0LnNvcnRCeShuLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLnJhbmt9KSk7cmV0dXJuIGdqdC5mb3JFYWNoKG8sKGZ1bmN0aW9uIG4oaSl7aWYoIWdqdC5oYXMoZSxpKSl7ZVtpXT0hMDt2YXIgbz10Lm5vZGUoaSk7cltvLnJhbmtdLnB1c2goaSksZ2p0LmZvckVhY2godC5zdWNjZXNzb3JzKGkpLG4pfX0pKSxyfSkoZSk7emp0KGUsbyk7Zm9yKHZhciBzLGw9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGM9MCx1PTA7dTw0OysrYywrK3Upe09qdChjJTI/aTpyLGMlND49Miksbz1JanQuYnVpbGRMYXllck1hdHJpeChlKTt2YXIgaD1ranQoZSxvKTtoPGwmJih1PTAscz1BanQuY2xvbmVEZWVwKG8pLGw9aCl9emp0KGUscyl9KShlKX0pKSxuKCIgICAgaW5zZXJ0U2VsZkVkZ2VzIiwoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSl7dmFyIG49Wmp0LmJ1aWxkTGF5ZXJNYXRyaXgoZSk7R2p0LmZvckVhY2gobiwoZnVuY3Rpb24odCl7dmFyIG49MDtHanQuZm9yRWFjaCh0LChmdW5jdGlvbih0LGkpe3ZhciByPWUubm9kZSh0KTtyLm9yZGVyPWkrbixHanQuZm9yRWFjaChyLnNlbGZFZGdlcywoZnVuY3Rpb24odCl7Wmp0LmFkZER1bW15Tm9kZShlLCJzZWxmZWRnZSIse3dpZHRoOnQubGFiZWwud2lkdGgsaGVpZ2h0OnQubGFiZWwuaGVpZ2h0LHJhbms6ci5yYW5rLG9yZGVyOmkrICsrbixlOnQuZSxsYWJlbDp0LmxhYmVsfSwiX3NlIil9KSksZGVsZXRlIHIuc2VsZkVkZ2VzfSkpfSkpfSkoZSl9KSksbigiICAgIGFkanVzdENvb3JkaW5hdGVTeXN0ZW0iLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXt2YXIgbj1lLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyJsciIhPT1uJiYicmwiIT09bnx8ZGp0KGUpfSkoZSl9KSksbigiICAgIHBvc2l0aW9uIiwoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSl7KGZ1bmN0aW9uIG4odCl7dmFyIGU9amp0LmJ1aWxkTGF5ZXJNYXRyaXgodCksbj10LmdyYXBoKCkucmFua3NlcCxpPTA7VWp0LmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIHI9VWp0Lm1heChVanQubWFwKGUsKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkuaGVpZ2h0fSkpKTtVanQuZm9yRWFjaChlLChmdW5jdGlvbihlKXt0Lm5vZGUoZSkueT1pK3IvMn0pKSxpKz1yK259KSl9KShlPWpqdC5hc05vbkNvbXBvdW5kR3JhcGgoZSkpLFVqdC5mb3JFYWNoKChmdW5jdGlvbiBpKHQpe3ZhciBlLG49SGp0LmJ1aWxkTGF5ZXJNYXRyaXgodCksaT1EanQubWVyZ2UoKGZ1bmN0aW9uIHIodCxlKXt2YXIgbj17fTtyZXR1cm4gRGp0LnJlZHVjZShlLChmdW5jdGlvbiBpKGUscil7dmFyIG89MCxhPTAscz1lLmxlbmd0aCxsPURqdC5sYXN0KHIpO3JldHVybiBEanQuZm9yRWFjaChyLChmdW5jdGlvbihlLGkpe3ZhciBjPShmdW5jdGlvbiB1KHQsZSl7aWYodC5ub2RlKGUpLmR1bW15KXJldHVybiBEanQuZmluZCh0LnByZWRlY2Vzc29ycyhlKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5kdW1teX0pKX0pKHQsZSksaD1jP3Qubm9kZShjKS5vcmRlcjpzOyhjfHxlPT09bCkmJihEanQuZm9yRWFjaChyLnNsaWNlKGEsaSsxKSwoZnVuY3Rpb24oZSl7RGp0LmZvckVhY2godC5wcmVkZWNlc3NvcnMoZSksKGZ1bmN0aW9uKGkpe3ZhciByPXQubm9kZShpKSxhPXIub3JkZXI7IShhPG98fGg8YSl8fHIuZHVtbXkmJnQubm9kZShlKS5kdW1teXx8Rmp0KG4saSxlKX0pKX0pKSxhPWkrMSxvPWgpfSkpLHJ9KSksbn0pKHQsbiksKGZ1bmN0aW9uIG8odCxlKXt2YXIgbj17fTtmdW5jdGlvbiBpKGUsaSxyLG8sYSl7dmFyIHM7RGp0LmZvckVhY2goRGp0LnJhbmdlKGksciksKGZ1bmN0aW9uKGkpe3Qubm9kZShzPWVbaV0pLmR1bW15JiZEanQuZm9yRWFjaCh0LnByZWRlY2Vzc29ycyhzKSwoZnVuY3Rpb24oZSl7dmFyIGk9dC5ub2RlKGUpO2kuZHVtbXkmJihpLm9yZGVyPG98fGkub3JkZXI+YSkmJkZqdChuLGUscyl9KSl9KSl9cmV0dXJuIERqdC5yZWR1Y2UoZSwoZnVuY3Rpb24gcihlLG4pe3ZhciByLG89LTEsYT0wO3JldHVybiBEanQuZm9yRWFjaChuLChmdW5jdGlvbihzLGwpe2lmKCJib3JkZXIiPT09dC5ub2RlKHMpLmR1bW15KXt2YXIgYz10LnByZWRlY2Vzc29ycyhzKTtjLmxlbmd0aCYmKHI9dC5ub2RlKGNbMF0pLm9yZGVyLGkobixhLGwsbyxyKSxhPWwsbz1yKX1pKG4sYSxuLmxlbmd0aCxyLGUubGVuZ3RoKX0pKSxufSkpLG59KSh0LG4pKSxhPXt9O0RqdC5mb3JFYWNoKFsidSIsImQiXSwoZnVuY3Rpb24ocil7ZT0idSI9PT1yP246RGp0LnZhbHVlcyhuKS5yZXZlcnNlKCksRGp0LmZvckVhY2goWyJsIiwiciJdLChmdW5jdGlvbihuKXsiciI9PT1uJiYoZT1EanQubWFwKGUsKGZ1bmN0aW9uKHQpe3JldHVybiBEanQudmFsdWVzKHQpLnJldmVyc2UoKX0pKSk7dmFyIG89KCJ1Ij09PXI/dC5wcmVkZWNlc3NvcnM6dC5zdWNjZXNzb3JzKS5iaW5kKHQpLHM9KGZ1bmN0aW9uIGwodCxlLG4saSl7dmFyIHI9e30sbz17fSxhPXt9O3JldHVybiBEanQuZm9yRWFjaChlLChmdW5jdGlvbih0KXtEanQuZm9yRWFjaCh0LChmdW5jdGlvbih0LGUpe3JbdF09dCxvW3RdPXQsYVt0XT1lfSkpfSkpLERqdC5mb3JFYWNoKGUsKGZ1bmN0aW9uKHQpe3ZhciBlPS0xO0RqdC5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQpe3ZhciBzPWkodCk7aWYocy5sZW5ndGgpZm9yKHZhciBsPSgocz1EanQuc29ydEJ5KHMsKGZ1bmN0aW9uKHQpe3JldHVybiBhW3RdfSkpKS5sZW5ndGgtMSkvMixjPU1hdGguZmxvb3IobCksdT1NYXRoLmNlaWwobCk7Yzw9dTsrK2Mpe3ZhciBoPXNbY107b1t0XT09PXQmJmU8YVtoXSYmIVZqdChuLHQsaCkmJihvW2hdPXQsb1t0XT1yW3RdPXJbaF0sZT1hW2hdKX19KSl9KSkse3Jvb3Q6cixhbGlnbjpvfX0pKDAsZSxpLG8pLGM9KGZ1bmN0aW9uIHUodCxlLG4saSxyKXt2YXIgbz17fSxhPShmdW5jdGlvbiBzKHQsZSxuLGkpe3ZhciByPW5ldyBCanQsbz10LmdyYXBoKCksYT0oZnVuY3Rpb24gcyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKGkscixvKXt2YXIgYSxzPWkubm9kZShyKSxsPWkubm9kZShvKSxjPTA7aWYoYys9cy53aWR0aC8yLERqdC5oYXMocywibGFiZWxwb3MiKSlzd2l0Y2gocy5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOmE9LXMud2lkdGgvMjticmVhaztjYXNlInIiOmE9cy53aWR0aC8yfWlmKGEmJihjKz1uP2E6LWEpLGE9MCxjKz0ocy5kdW1teT9lOnQpLzIsYys9KGwuZHVtbXk/ZTp0KS8yLGMrPWwud2lkdGgvMixEanQuaGFzKGwsImxhYmVscG9zIikpc3dpdGNoKGwubGFiZWxwb3MudG9Mb3dlckNhc2UoKSl7Y2FzZSJsIjphPWwud2lkdGgvMjticmVhaztjYXNlInIiOmE9LWwud2lkdGgvMn1yZXR1cm4gYSYmKGMrPW4/YTotYSksYT0wLGN9fSkoby5ub2Rlc2VwLG8uZWRnZXNlcCxpKTtyZXR1cm4gRGp0LmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIGk7RGp0LmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIG89bltlXTtpZihyLnNldE5vZGUobyksaSl7dmFyIHM9bltpXSxsPXIuZWRnZShzLG8pO3Iuc2V0RWRnZShzLG8sTWF0aC5tYXgoYSh0LGUsaSksbHx8MCkpfWk9ZX0pKX0pKSxyfSkodCxlLG4sciksbD1yPyJib3JkZXJMZWZ0IjoiYm9yZGVyUmlnaHQiO2Z1bmN0aW9uIGModCxlKXtmb3IodmFyIG49YS5ub2RlcygpLGk9bi5wb3AoKSxyPXt9O2k7KXJbaV0/dChpKToocltpXT0hMCxuLnB1c2goaSksbj1uLmNvbmNhdChlKGkpKSksaT1uLnBvcCgpfXJldHVybiBjKChmdW5jdGlvbiB1KHQpe29bdF09YS5pbkVkZ2VzKHQpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxvW2Uudl0rYS5lZGdlKGUpKX0pLDApfSksYS5wcmVkZWNlc3NvcnMuYmluZChhKSksYygoZnVuY3Rpb24gaChlKXt2YXIgbj1hLm91dEVkZ2VzKGUpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5taW4odCxvW2Uud10tYS5lZGdlKGUpKX0pLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksaT10Lm5vZGUoZSk7biE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmaS5ib3JkZXJUeXBlIT09bCYmKG9bZV09TWF0aC5tYXgob1tlXSxuKSl9KSxhLnN1Y2Nlc3NvcnMuYmluZChhKSksRGp0LmZvckVhY2goaSwoZnVuY3Rpb24odCl7b1t0XT1vW25bdF1dfSkpLG99KSh0LGUscy5yb290LHMuYWxpZ24sInIiPT09bik7InIiPT09biYmKGM9RGp0Lm1hcFZhbHVlcyhjLChmdW5jdGlvbih0KXtyZXR1cm4tdH0pKSksYVtyK25dPWN9KSl9KSk7dmFyIHM9KGZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gRGp0Lm1pbkJ5KERqdC52YWx1ZXMoZSksKGZ1bmN0aW9uKGUpe3ZhciBuPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtyZXR1cm4gRGp0LmZvckluKGUsKGZ1bmN0aW9uKGUscil7dmFyIG89KGZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdC5ub2RlKGUpLndpZHRofSkodCxyKS8yO249TWF0aC5tYXgoZStvLG4pLGk9TWF0aC5taW4oZS1vLGkpfSkpLG4taX0pKX0pKHQsYSk7cmV0dXJuKGZ1bmN0aW9uIGModCxlKXt2YXIgbj1EanQudmFsdWVzKGUpLGk9RGp0Lm1pbihuKSxyPURqdC5tYXgobik7RGp0LmZvckVhY2goWyJ1IiwiZCJdLChmdW5jdGlvbihuKXtEanQuZm9yRWFjaChbImwiLCJyIl0sKGZ1bmN0aW9uKG8pe3ZhciBhLHM9bitvLGw9dFtzXTtpZihsIT09ZSl7dmFyIGM9RGp0LnZhbHVlcyhsKTsoYT0ibCI9PT1vP2ktRGp0Lm1pbihjKTpyLURqdC5tYXgoYykpJiYodFtzXT1EanQubWFwVmFsdWVzKGwsKGZ1bmN0aW9uKHQpe3JldHVybiB0K2F9KSkpfX0pKX0pKX0pKGEscyksKGZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gRGp0Lm1hcFZhbHVlcyh0LnVsLChmdW5jdGlvbihuLGkpe2lmKGUpcmV0dXJuIHRbZS50b0xvd2VyQ2FzZSgpXVtpXTt2YXIgcj1EanQuc29ydEJ5KERqdC5tYXAodCxpKSk7cmV0dXJuKHJbMV0rclsyXSkvMn0pKX0pKGEsdC5ncmFwaCgpLmFsaWduKX0pKGUpLChmdW5jdGlvbih0LG4pe2Uubm9kZShuKS54PXR9KSl9KShlKX0pKSxuKCIgICAgcG9zaXRpb25TZWxmRWRnZXMiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXtHanQuZm9yRWFjaChlLm5vZGVzKCksKGZ1bmN0aW9uKHQpe3ZhciBuPWUubm9kZSh0KTtpZigic2VsZmVkZ2UiPT09bi5kdW1teSl7dmFyIGk9ZS5ub2RlKG4uZS52KSxyPWkueCtpLndpZHRoLzIsbz1pLnksYT1uLngtcixzPWkuaGVpZ2h0LzI7ZS5zZXRFZGdlKG4uZSxuLmxhYmVsKSxlLnJlbW92ZU5vZGUodCksbi5sYWJlbC5wb2ludHM9W3t4OnIrMiphLzMseTpvLXN9LHt4OnIrNSphLzYseTpvLXN9LHt4OnIrYSx5Om99LHt4OnIrNSphLzYseTpvK3N9LHt4OnIrMiphLzMseTpvK3N9XSxuLmxhYmVsLng9bi54LG4ubGFiZWwueT1uLnl9fSkpfSkoZSl9KSksbigiICAgIHJlbW92ZUJvcmRlck5vZGVzIiwoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSl7R2p0LmZvckVhY2goZS5ub2RlcygpLChmdW5jdGlvbih0KXtpZihlLmNoaWxkcmVuKHQpLmxlbmd0aCl7dmFyIG49ZS5ub2RlKHQpLGk9ZS5ub2RlKG4uYm9yZGVyVG9wKSxyPWUubm9kZShuLmJvcmRlckJvdHRvbSksbz1lLm5vZGUoR2p0Lmxhc3Qobi5ib3JkZXJMZWZ0KSksYT1lLm5vZGUoR2p0Lmxhc3Qobi5ib3JkZXJSaWdodCkpO24ud2lkdGg9TWF0aC5hYnMoYS54LW8ueCksbi5oZWlnaHQ9TWF0aC5hYnMoci55LWkueSksbi54PW8ueCtuLndpZHRoLzIsbi55PWkueStuLmhlaWdodC8yfX0pKSxHanQuZm9yRWFjaChlLm5vZGVzKCksKGZ1bmN0aW9uKHQpeyJib3JkZXIiPT09ZS5ub2RlKHQpLmR1bW15JiZlLnJlbW92ZU5vZGUodCl9KSl9KShlKX0pKSxuKCIgICAgbm9ybWFsaXplLnVuZG8iLChmdW5jdGlvbigpe3FqdC51bmRvKGUpfSkpLG4oIiAgICBmaXh1cEVkZ2VMYWJlbENvb3JkcyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe0dqdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIG49ZS5lZGdlKHQpO2lmKEdqdC5oYXMobiwieCIpKXN3aXRjaCgibCIhPT1uLmxhYmVscG9zJiYiciIhPT1uLmxhYmVscG9zfHwobi53aWR0aC09bi5sYWJlbG9mZnNldCksbi5sYWJlbHBvcyl7Y2FzZSJsIjpuLngtPW4ud2lkdGgvMituLmxhYmVsb2Zmc2V0O2JyZWFrO2Nhc2UiciI6bi54Kz1uLndpZHRoLzIrbi5sYWJlbG9mZnNldH19KSl9KShlKX0pKSxuKCIgICAgdW5kb0Nvb3JkaW5hdGVTeXN0ZW0iLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXt2YXIgbj1lLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyJidCIhPT1uJiYicmwiIT09bnx8KGZ1bmN0aW9uIGkodCl7aGp0LmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtmanQodC5ub2RlKGUpKX0pKSxoanQuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtoanQuZm9yRWFjaChuLnBvaW50cyxmanQpLGhqdC5oYXMobiwieSIpJiZmanQobil9KSl9KShlKSwibHIiIT09biYmInJsIiE9PW58fCgoZnVuY3Rpb24gcih0KXtoanQuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe21qdCh0Lm5vZGUoZSkpfSkpLGhqdC5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO2hqdC5mb3JFYWNoKG4ucG9pbnRzLG1qdCksaGp0LmhhcyhuLCJ4IikmJm1qdChuKX0pKX0pKGUpLGRqdChlKSl9KShlKX0pKSxuKCIgICAgdHJhbnNsYXRlR3JhcGgiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gdChlKXt2YXIgbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksaT0wLHI9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG89MCxhPWUuZ3JhcGgoKSxzPWEubWFyZ2lueHx8MCxsPWEubWFyZ2lueXx8MDtmdW5jdGlvbiBjKHQpe3ZhciBlPXQueCxhPXQueSxzPXQud2lkdGgsbD10LmhlaWdodDtuPU1hdGgubWluKG4sZS1zLzIpLGk9TWF0aC5tYXgoaSxlK3MvMikscj1NYXRoLm1pbihyLGEtbC8yKSxvPU1hdGgubWF4KG8sYStsLzIpfUdqdC5mb3JFYWNoKGUubm9kZXMoKSwoZnVuY3Rpb24odCl7YyhlLm5vZGUodCkpfSkpLEdqdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIG49ZS5lZGdlKHQpO0dqdC5oYXMobiwieCIpJiZjKG4pfSkpLG4tPXMsci09bCxHanQuZm9yRWFjaChlLm5vZGVzKCksKGZ1bmN0aW9uKHQpe3ZhciBpPWUubm9kZSh0KTtpLngtPW4saS55LT1yfSkpLEdqdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIGk9ZS5lZGdlKHQpO0dqdC5mb3JFYWNoKGkucG9pbnRzLChmdW5jdGlvbih0KXt0LngtPW4sdC55LT1yfSkpLEdqdC5oYXMoaSwieCIpJiYoaS54LT1uKSxHanQuaGFzKGksInkiKSYmKGkueS09cil9KSksYS53aWR0aD1pLW4rcyxhLmhlaWdodD1vLXIrbH0pKGUpfSkpLG4oIiAgICBhc3NpZ25Ob2RlSW50ZXJzZWN0cyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe0dqdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIG4saSxyPWUuZWRnZSh0KSxvPWUubm9kZSh0LnYpLGE9ZS5ub2RlKHQudyk7ci5wb2ludHM/KG49ci5wb2ludHNbMF0saT1yLnBvaW50c1tyLnBvaW50cy5sZW5ndGgtMV0pOihyLnBvaW50cz1bXSxuPWEsaT1vKSxyLnBvaW50cy51bnNoaWZ0KFpqdC5pbnRlcnNlY3RSZWN0KG8sbikpLHIucG9pbnRzLnB1c2goWmp0LmludGVyc2VjdFJlY3QoYSxpKSl9KSl9KShlKX0pKSxuKCIgICAgcmV2ZXJzZVBvaW50cyIsKGZ1bmN0aW9uKCl7IShmdW5jdGlvbiB0KGUpe0dqdC5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIG49ZS5lZGdlKHQpO24ucmV2ZXJzZWQmJm4ucG9pbnRzLnJldmVyc2UoKX0pKX0pKGUpfSkpLG4oIiAgICBhY3ljbGljLnVuZG8iLChmdW5jdGlvbigpe1dqdC51bmRvKGUpfSkpfSkoZSxuKX0pKSxuKCIgIHVwZGF0ZUlucHV0R3JhcGgiLChmdW5jdGlvbigpeyEoZnVuY3Rpb24gbih0LGUpe0dqdC5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pLHI9ZS5ub2RlKG4pO2kmJihpLng9ci54LGkueT1yLnksZS5jaGlsZHJlbihuKS5sZW5ndGgmJihpLndpZHRoPXIud2lkdGgsaS5oZWlnaHQ9ci5oZWlnaHQpKX0pKSxHanQuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQuZWRnZShuKSxyPWUuZWRnZShuKTtpLnBvaW50cz1yLnBvaW50cyxHanQuaGFzKHIsIngiKSYmKGkueD1yLngsaS55PXIueSl9KSksdC5ncmFwaCgpLndpZHRoPWUuZ3JhcGgoKS53aWR0aCx0LmdyYXBoKCkuaGVpZ2h0PWUuZ3JhcGgoKS5oZWlnaHR9KSh0LGUpfSkpfSkpfSxkZWJ1Zzp7ZGVidWdPcmRlcmluZzpmdW5jdGlvbiBnR3QodCl7dmFyIGU9ZEd0LmJ1aWxkTGF5ZXJNYXRyaXgodCksbj1uZXcgcEd0KHtjb21wb3VuZDohMCxtdWx0aWdyYXBoOiEwfSkuc2V0R3JhcGgoe30pO3JldHVybiBoR3QuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe24uc2V0Tm9kZShlLHtsYWJlbDplfSksbi5zZXRQYXJlbnQoZSwibGF5ZXIiK3Qubm9kZShlKS5yYW5rKX0pKSxoR3QuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKHQpe24uc2V0RWRnZSh0LnYsdC53LHt9LHQubmFtZSl9KSksaEd0LmZvckVhY2goZSwoZnVuY3Rpb24odCxlKXtuLnNldE5vZGUoImxheWVyIitlLHtyYW5rOiJzYW1lIn0pLGhHdC5yZWR1Y2UodCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zZXRFZGdlKHQsZSx7c3R5bGU6ImludmlzIn0pLGV9KSl9KSksbn19LHV0aWw6e3RpbWU6aVV0LnRpbWUsbm90aW1lOmlVdC5ub3RpbWV9LHZlcnNpb246IjAuOC41In07IShmdW5jdGlvbih0KXt0LkZFVENIX1BCVFhUX0JZVEVTPSJGRVRDSF9QQlRYVF9CWVRFUyIsdC5GRVRDSF9QQlRYVF9CWVRFU19GUk9NX0ZJTEVTWVNURU09IkZFVENIX1BCVFhUX0JZVEVTX0ZST01fRklMRVNZU1RFTSIsdC5GRVRDSF9QQlRYVF9CWVRFU19GUk9NX1NFUlZFUj0iRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVIiLHQuUEFSU0VfUEJUWFRfSU5UT19PQkpFQ1Q9IlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUIix0LkZFVENIX01FVEFEQVRBX1BCVFhUX0JZVEVTPSJGRVRDSF9NRVRBREFUQV9QQlRYVF9CWVRFUyIsdC5QQVJTRV9NRVRBREFUQV9QQlRYVF9JTlRPX09CSkVDVD0iUEFSU0VfTUVUQURBVEFfUEJUWFRfSU5UT19PQkpFQ1QiLHQuTk9STUFMSVpJTkdfTkFNRVM9Ik5PUk1BTElaSU5HX05BTUVTIix0LkJVSUxEX1NMSU1fR1JBUEg9IkJVSUxEX1NMSU1fR1JBUEgiLHQuSElFUkFSQ0hZX0FERF9OT0RFUz0iSElFUkFSQ0hZX0FERF9OT0RFUyIsdC5ISUVSQVJDSFlfREVURUNUX1NFUklFUz0iSElFUkFSQ0hZX0RFVEVDVF9TRVJJRVMiLHQuSElFUkFSQ0hZX0FERF9FREdFUz0iSElFUkFSQ0hZX0FERF9FREdFUyIsdC5ISUVSQVJDSFlfRklORF9TSU1JTEFSX1NVQkdSQVBIUz0iSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFMiLHQuUkVOREVSX0JVSUxEX0hJRVJBUkNIWT0iUkVOREVSX0JVSUxEX0hJRVJBUkNIWSIsdC5SRU5ERVJfU0NFTkVfTEFZT1VUPSJSRU5ERVJfU0NFTkVfTEFZT1VUIix0LlJFTkRFUl9TQ0VORV9CVUlMRF9TQ0VORT0iUkVOREVSX1NDRU5FX0JVSUxEX1NDRU5FIix0LkdSQVBIX0xPQURfU1VDQ0VFREVEPSJHUkFQSF9MT0FEX1NVQ0NFRURFRCIsdC5HUkFQSF9MT0FEX0ZBSUxFRD0iR1JBUEhfTE9BRF9GQUlMRUQifSkoY0d0fHwoY0d0PXt9KSksKGZ1bmN0aW9uKHQpe3QuTk9ERV9FWFBBTlNJT05fVE9HR0xFRD0iTk9ERV9FWFBBTlNJT05fVE9HR0xFRCIsdC5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRD0iTk9ERV9TRUFSQ0hfUkVTVUxUX0ZPQ1VTRUQiLHQuTk9ERV9BVVhJTElBUllfRVhUUkFDVElPTl9DSEFOR0VEPSJOT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQiLHQuR1JBUEhfVFlQRV9DSEFOR0VEPSJHUkFQSF9UWVBFX0NIQU5HRUQiLHQuVFJBQ0VfSU5QVVRfTU9ERV9UT0dHTEVEPSJUUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUQiLHQuTk9ERV9DT0xPUl9NT0RFX0NIQU5HRUQ9Ik5PREVfQ09MT1JfTU9ERV9DSEFOR0VEIix0LlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTT0iVVBMT0FERURfR1JBUEhfRlJPTV9GSUxFU1lTVEVNIn0pKHVHdHx8KHVHdD17fSkpO2NvbnN0IF9HdD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sY0d0KSx1R3QpO3ZhciB5R3Q7IShmdW5jdGlvbih0KXt0Lk9QX0dSQVBIPSJvcF9ncmFwaCIsdC5DT05DRVBUVUFMX0dSQVBIPSJjb25jZXB0dWFsX2dyYXBoIix0LlBST0ZJTEU9InByb2ZpbGUifSkoeUd0fHwoeUd0PXt9KSk7bGV0IHZHdD17Tm9kZTp7Q09OVEFJTkVSOiJub2RlcyIsR1JPVVA6Im5vZGUiLFNIQVBFOiJub2Rlc2hhcGUiLENPTE9SX1RBUkdFVDoibm9kZWNvbG9ydGFyZ2V0IixMQUJFTDoibm9kZWxhYmVsIixCVVRUT05fQ09OVEFJTkVSOiJidXR0b25jb250YWluZXIiLEJVVFRPTl9DSVJDTEU6ImJ1dHRvbmNpcmNsZSIsRVhQQU5EX0JVVFRPTjoiZXhwYW5kYnV0dG9uIixDT0xMQVBTRV9CVVRUT046ImNvbGxhcHNlYnV0dG9uIn0sRWRnZTp7Q09OVEFJTkVSOiJlZGdlcyIsR1JPVVA6ImVkZ2UiLExJTkU6ImVkZ2VsaW5lIixSRUZFUkVOQ0VfRURHRToicmVmZXJlbmNlZWRnZSIsUkVGX0xJTkU6InJlZmxpbmUiLFNFTEVDVEFCTEU6InNlbGVjdGFibGVlZGdlIixTRUxFQ1RFRDoic2VsZWN0ZWRlZGdlIixTVFJVQ1RVUkFMOiJzdHJ1Y3R1cmFsIn0sQW5ub3RhdGlvbjp7T1VUQk9YOiJvdXQtYW5ub3RhdGlvbnMiLElOQk9YOiJpbi1hbm5vdGF0aW9ucyIsR1JPVVA6ImFubm90YXRpb24iLE5PREU6ImFubm90YXRpb24tbm9kZSIsRURHRToiYW5ub3RhdGlvbi1lZGdlIixDT05UUk9MX0VER0U6ImFubm90YXRpb24tY29udHJvbC1lZGdlIixMQUJFTDoiYW5ub3RhdGlvbi1sYWJlbCIsRUxMSVBTSVM6ImFubm90YXRpb24tZWxsaXBzaXMifSxTY2VuZTp7R1JPVVA6InNjZW5lIixDT1JFOiJjb3JlIixGVU5DVElPTl9MSUJSQVJZOiJmdW5jdGlvbi1saWJyYXJ5IixJTkVYVFJBQ1Q6ImluLWV4dHJhY3QiLE9VVEVYVFJBQ1Q6Im91dC1leHRyYWN0In0sU3Vic2NlbmU6e0dST1VQOiJzdWJzY2VuZSJ9LE9QTk9ERToib3AiLE1FVEFOT0RFOiJtZXRhIixTRVJJRVNOT0RFOiJzZXJpZXMiLEJSSURHRU5PREU6ImJyaWRnZSIsRUxMSVBTSVNOT0RFOiJlbGxpcHNpcyJ9O2NvbnN0IGJHdD0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO2Z1bmN0aW9uIHhHdCh0LGUsbil7bGV0IGk9dC5ub2RlKCkuY2hpbGROb2Rlcztmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyl7bGV0IHI9aVt0XTtpZihyLnRhZ05hbWU9PT1lKWlmKG4gaW5zdGFuY2VvZiBBcnJheSl7bGV0IHQ9ITA7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspdD10JiZyLmNsYXNzTGlzdC5jb250YWlucyhuW2VdKTtpZih0KXJldHVybiBTdShyKX1lbHNlIGlmKCFufHxyLmNsYXNzTGlzdC5jb250YWlucyhuKSlyZXR1cm4gU3Uocil9cmV0dXJuIFN1KG51bGwpfWZ1bmN0aW9uIHdHdCh0LGUsbixpKXtsZXQgcj14R3QodCxlLG4pO2lmKCFyLmVtcHR5KCkpcmV0dXJuIHI7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsZSk7aWYobiBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKW8uY2xhc3NMaXN0LmFkZChuW3RdKTtlbHNlIG8uY2xhc3NMaXN0LmFkZChuKTtyZXR1cm4gaT90Lm5vZGUoKS5pbnNlcnRCZWZvcmUobyxpKTp0Lm5vZGUoKS5hcHBlbmRDaGlsZChvKSxTdShvKS5kYXR1bSh0LmRhdHVtKCkpfWNsYXNzIFNHdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnRvdGFsQnl0ZXM9MCx0aGlzLm91dHB1dFNpemU9dH1hZGRFeGVjdXRpb25UaW1lKHQsZSl7dGhpcy5zdGFydFRpbWU9bnVsbCE9dGhpcy5zdGFydFRpbWU/TWF0aC5taW4odGhpcy5zdGFydFRpbWUsdCk6dCx0aGlzLmVuZFRpbWU9bnVsbCE9dGhpcy5lbmRUaW1lP01hdGgubWF4KHRoaXMuZW5kVGltZSxlKTplfWFkZEJ5dGVzQWxsb2NhdGlvbih0KXt0aGlzLnRvdGFsQnl0ZXM9bnVsbCE9dGhpcy50b3RhbEJ5dGVzP01hdGgubWF4KHRoaXMudG90YWxCeXRlcyx0KTp0fWNvbWJpbmUodCl7bnVsbCE9dC50b3RhbEJ5dGVzJiYodGhpcy50b3RhbEJ5dGVzKz10LnRvdGFsQnl0ZXMpLG51bGwhPXQuZ2V0VG90YWxNaWNyb3MoKSYmdGhpcy5hZGRFeGVjdXRpb25UaW1lKHQuc3RhcnRUaW1lLHQuZW5kVGltZSl9Z2V0VG90YWxNaWNyb3MoKXtyZXR1cm4gbnVsbD09dGhpcy5zdGFydFRpbWV8fG51bGw9PXRoaXMuZW5kVGltZT9udWxsOnRoaXMuZW5kVGltZS10aGlzLnN0YXJ0VGltZX19Y29uc3QgTUd0PS43NSxFR3Q9ckUoKS5leHBvbmVudCguMykuZG9tYWluKFsxLDVlNl0pLnJhbmdlKFtNR3QsMTJdKS5jbGFtcCghMCk7ZnVuY3Rpb24gVEd0KHQpeyEoZnVuY3Rpb24gZSh0KXt0Lmhhc093blByb3BlcnR5KCJ0aW1pbmdJZCIpfSkodCl9ZnVuY3Rpb24gQ0d0KHQsZSxuKXtsZXQgaT1EYXRlLm5vdygpLHI9ZSgpO2NvbnN0IG89RGF0ZS5ub3coKS1pO3JldHVybiBjb25zb2xlLmxvZyh0LCI6IixvLCJtcyIpLG4mJlRHdCh7dGltaW5nSWQ6bixldmVudFZhbHVlOm99KSxyfWZ1bmN0aW9uIEFHdCh0KXtyZXR1cm57c2V0TWVzc2FnZTpmdW5jdGlvbihlKXt0LnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTp0LnByb2dyZXNzLnZhbHVlLG1zZzplfSl9LHVwZGF0ZVByb2dyZXNzOmZ1bmN0aW9uKGUpe3Quc2V0KCJwcm9ncmVzcyIse3ZhbHVlOnQucHJvZ3Jlc3MudmFsdWUrZSxtc2c6dC5wcm9ncmVzcy5tc2d9KX0scmVwb3J0RXJyb3I6ZnVuY3Rpb24oZSxuKXtjb25zb2xlLmVycm9yKG4uc3RhY2spLHQuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOnQucHJvZ3Jlc3MudmFsdWUsbXNnOmUsZXJyb3I6ITB9KX19fWZ1bmN0aW9uIGtHdCh0LGUsbil7cmV0dXJue3NldE1lc3NhZ2U6ZnVuY3Rpb24oZSl7dC5zZXRNZXNzYWdlKG4rIjogIitlKX0sdXBkYXRlUHJvZ3Jlc3M6ZnVuY3Rpb24obil7dC51cGRhdGVQcm9ncmVzcyhuKmUvMTAwKX0scmVwb3J0RXJyb3I6ZnVuY3Rpb24oZSxpKXt0LnJlcG9ydEVycm9yKG4rIjogIitlLGkpfX19ZnVuY3Rpb24gTEd0KHQsZSxuLGkscil7cmV0dXJuIG5ldyBQcm9taXNlKCgobyxhKT0+e2kuc2V0TWVzc2FnZSh0KSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3RyeXtsZXQgYT1DR3QodCxuLHIpO2kudXBkYXRlUHJvZ3Jlc3MoZSksbyhhKX1jYXRjaChlKXtpLnJlcG9ydEVycm9yKCJGYWlsZWQgIit0LGUpfX0pLDIwKX0pKX1mdW5jdGlvbiBQR3QodCxlLG4saSxyKXtyZXR1cm4gbmV3IFByb21pc2UoKChvLGEpPT57bGV0IHM9ZnVuY3Rpb24oZSl7aS5yZXBvcnRFcnJvcigiRmFpbGVkICIrdCxlKSxhKGUpfTtpLnNldE1lc3NhZ2UodCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0cnl7bGV0IGE9RGF0ZS5ub3coKTtuKCkudGhlbigoZnVuY3Rpb24obil7Y29uc3Qgcz1EYXRlLm5vdygpLWE7Y29uc29sZS5sb2codCwiOiIscywibXMiKSxpLnVwZGF0ZVByb2dyZXNzKGUpLFRHdCh7dGltaW5nSWQ6cixldmVudFZhbHVlOnN9KSxvKG4pfSkpLmNhdGNoKHMpfWNhdGNoKHQpe3ModCl9fSksMjApfSkpfWNvbnN0IE5HdD1be3N5bWJvbDoiQiJ9LHtzeW1ib2w6IktCIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJNQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiR0IiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6IlRCIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJQQiIsbnVtVW5pdHM6MTAyNH1dLElHdD1be3N5bWJvbDoiwrVzIn0se3N5bWJvbDoibXMiLG51bVVuaXRzOjFlM30se3N5bWJvbDoicyIsbnVtVW5pdHM6MWUzfSx7c3ltYm9sOiJtaW4iLG51bVVuaXRzOjYwfSx7c3ltYm9sOiJociIsbnVtVW5pdHM6NjB9LHtzeW1ib2w6ImRheXMiLG51bVVuaXRzOjI0fV07ZnVuY3Rpb24gUkd0KHQsZSxuPTApe3JldHVybiBuKzE8ZS5sZW5ndGgmJnQ+PWVbbisxXS5udW1Vbml0cz9SR3QodC9lW24rMV0ubnVtVW5pdHMsZSxuKzEpOk51bWJlcih0LnRvUHJlY2lzaW9uKDMpKSsiICIrZVtuXS5zeW1ib2x9ZnVuY3Rpb24gT0d0KHQpe3JldHVybiEoIXR8fCEodC50b3RhbEJ5dGVzPjB8fHQuZ2V0VG90YWxNaWNyb3MoKT4wfHx0Lm91dHB1dFNpemUpKX1mdW5jdGlvbiB6R3QodCl7aWYodC5sZW5ndGg8MilyZXR1cm4gdDtsZXQgZT0wLG49MCxpPVNlLmV4cG9ydHMubWluKFNlLmV4cG9ydHMubWFwKHQsKHQ9PnQubGVuZ3RoKSkpO2Zvcig7Oyl7ZSsrO2xldCByPVNlLmV4cG9ydHMubWFwKHQsKHQ9PnQuc3Vic3RyaW5nKDAsZSkpKTtpZighci5ldmVyeSgoKHQsZSk9PjA9PT1lfHx0PT09cltlLTFdKSkpYnJlYWs7aWYoZT49aSlyZXR1cm4gdDtuPWV9cmV0dXJuIFNlLmV4cG9ydHMubWFwKHQsKHQ9PnQuc3Vic3RyaW5nKG4pKSl9Y29uc3QgREd0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIik7ZnVuY3Rpb24gQkd0KHQsZSl7cmV0dXJuIERHdC5mb250PWAke2V9cHggUm9ib3RvLCBzYW5zLXNlcmlmYCxER3QubWVhc3VyZVRleHQodCkud2lkdGh9Y29uc3QgSEd0PSIvIixGR3Q9Il9fcm9vdF9fIixWR3Q9Il9fZnVuY3Rpb25fbGlicmFyeV9fIjt2YXIgVUd0LGpHdCxHR3QsV0d0OyEoZnVuY3Rpb24odCl7dFt0LkZVTEw9MF09IkZVTEwiLHRbdC5FTUJFRERFRD0xXT0iRU1CRURERUQiLHRbdC5NRVRBPTJdPSJNRVRBIix0W3QuU0VSSUVTPTNdPSJTRVJJRVMiLHRbdC5DT1JFPTRdPSJDT1JFIix0W3QuU0hBRE9XPTVdPSJTSEFET1ciLHRbdC5CUklER0U9Nl09IkJSSURHRSIsdFt0LkVER0U9N109IkVER0UifSkoVUd0fHwoVUd0PXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5NRVRBPTBdPSJNRVRBIix0W3QuT1A9MV09Ik9QIix0W3QuU0VSSUVTPTJdPSJTRVJJRVMiLHRbdC5CUklER0U9M109IkJSSURHRSIsdFt0LkVMTElQU0lTPTRdPSJFTExJUFNJUyJ9KShqR3R8fChqR3Q9e30pKSwoZnVuY3Rpb24odCl7dFt0LklOQ0xVREU9MF09IklOQ0xVREUiLHRbdC5FWENMVURFPTFdPSJFWENMVURFIix0W3QuVU5TUEVDSUZJRUQ9Ml09IlVOU1BFQ0lGSUVEIn0pKEdHdHx8KEdHdD17fSkpLChmdW5jdGlvbih0KXt0W3QuR1JPVVA9MF09IkdST1VQIix0W3QuVU5HUk9VUD0xXT0iVU5HUk9VUCJ9KShXR3R8fChXR3Q9e30pKTtjbGFzcyBxR3R7Y29uc3RydWN0b3IoKXt0aGlzLm5vZGVzPXt9LHRoaXMuZWRnZXM9W119fWNsYXNzIFlHdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnR5cGU9akd0LkVMTElQU0lTLHRoaXMuaXNHcm91cE5vZGU9ITEsdGhpcy5jYXJkaW5hbGl0eT0xLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuc3RhdHM9bnVsbCx0aGlzLnNldE51bU1vcmVOb2Rlcyh0KSx0aGlzLmluY2x1ZGU9R0d0LlVOU1BFQ0lGSUVEfXNldE51bU1vcmVOb2Rlcyh0KXt0aGlzLm51bU1vcmVOb2Rlcz10LHRoaXMubmFtZT0iLi4uICIrdCsiIG1vcmUifX1jbGFzcyBYR3R7Y29uc3RydWN0b3IodCl7dGhpcy5vcD10Lm9wLHRoaXMubmFtZT10Lm5hbWUsdGhpcy5kZXZpY2U9dC5kZXZpY2UsdGhpcy5hdHRyPXQuYXR0cix0aGlzLmlucHV0cz0oZnVuY3Rpb24gZSh0KXtjb25zdCBlPVtdO2xldCBuPW51bGw7Zm9yKGxldCBpIG9mIHR8fFtdKXtjb25zdCB0PWkuc3RhcnRzV2l0aCgiXiIpO3QmJihpPWkuc3Vic3RyaW5nKDEpKTtsZXQgcj1pLG89IjAiO2NvbnN0IGE9aS5pbmNsdWRlcygiOiIpJiZpLm1hdGNoKG5XdCk7YSYmKHI9YVsxXSxvPWFbMl0pLG4hPT1yJiYobj1yLGUucHVzaCh7bmFtZTpyLG91dHB1dFRlbnNvcktleTpvLGlzQ29udHJvbERlcGVuZGVuY3k6dH0pKX1yZXR1cm4gZX0pKHQuaW5wdXQpLHRoaXMub3V0cHV0U2hhcGVzPShmdW5jdGlvbiBuKHQpe2lmKCF0KXJldHVybiBudWxsO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtsZXR7a2V5Om4sdmFsdWU6aX09dFtlXTtpZigiX291dHB1dF9zaGFwZXMiPT09bil7aWYoIWkubGlzdHx8IWkubGlzdC5zaGFwZSlyZXR1cm4gbnVsbDtsZXQgbj1pLmxpc3Quc2hhcGUubWFwKCh0PT50LnVua25vd25fcmFuaz9udWxsOm51bGw9PXQuZGltfHwxPT09dC5kaW0ubGVuZ3RoJiZudWxsPT10LmRpbVswXS5zaXplP1tdOnQuZGltLm1hcCgodD0+dC5zaXplKSkpKTtyZXR1cm4gdC5zcGxpY2UoZSwxKSxufX1yZXR1cm4gbnVsbH0pKHQuYXR0ciksdGhpcy54bGFDbHVzdGVyPShmdW5jdGlvbiBpKHQpe2lmKCF0KXJldHVybiBudWxsO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKCJfWGxhQ2x1c3RlciI9PT10W2VdLmtleSlyZXR1cm4gdFtlXS52YWx1ZS5zfHxudWxsO3JldHVybiBudWxsfSkodC5hdHRyKSx0aGlzLmNvbXBhdGlibGU9ITEsdGhpcy50eXBlPWpHdC5PUCx0aGlzLmlzR3JvdXBOb2RlPSExLHRoaXMuY2FyZGluYWxpdHk9MSx0aGlzLmluRW1iZWRkaW5ncz1bXSx0aGlzLm91dEVtYmVkZGluZ3M9W10sdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpcy5pbmNsdWRlPUdHdC5VTlNQRUNJRklFRCx0aGlzLm93bmluZ1Nlcmllcz1udWxsfX1mdW5jdGlvbiAkR3QodCxlPXt9KXtyZXR1cm4gbmV3IEtHdCh0LGUpfWNsYXNzIEtHdHtjb25zdHJ1Y3Rvcih0LGU9e30pe3RoaXMubmFtZT10LHRoaXMudHlwZT1qR3QuTUVUQSx0aGlzLmRlcHRoPTEsdGhpcy5pc0dyb3VwTm9kZT0hMCx0aGlzLmNhcmRpbmFsaXR5PTAsdGhpcy5tZXRhZ3JhcGg9b1d0KHQsVUd0Lk1FVEEsZSksdGhpcy5icmlkZ2VncmFwaD1udWxsLHRoaXMub3BIaXN0b2dyYW09e30sdGhpcy5kZXZpY2VIaXN0b2dyYW09e30sdGhpcy54bGFDbHVzdGVySGlzdG9ncmFtPXt9LHRoaXMuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbT17Y29tcGF0aWJsZTowLGluY29tcGF0aWJsZTowfSx0aGlzLnRlbXBsYXRlSWQ9bnVsbCx0aGlzLnBhcmVudE5vZGU9bnVsbCx0aGlzLmhhc05vbkNvbnRyb2xFZGdlcz0hMSx0aGlzLmluY2x1ZGU9R0d0LlVOU1BFQ0lGSUVELHRoaXMuYXNzb2NpYXRlZEZ1bmN0aW9uPSIifWdldEZpcnN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5tZXRhZ3JhcGgubm9kZSh0aGlzLm1ldGFncmFwaC5ub2RlcygpWzBdKX1nZXRSb290T3AoKXtsZXQgdD10aGlzLm5hbWUuc3BsaXQoIi8iKTtyZXR1cm4gdGhpcy5tZXRhZ3JhcGgubm9kZSh0aGlzLm5hbWUrIi8oIit0W3QubGVuZ3RoLTFdKyIpIil9bGVhdmVzKCl7bGV0IHQsZT1bXSxuPVt0aGlzXTtmb3IoO24ubGVuZ3RoOyl7bGV0IGk9bi5zaGlmdCgpO2kuaXNHcm91cE5vZGU/KHQ9aS5tZXRhZ3JhcGgsU2UuZXhwb3J0cy5lYWNoKHQubm9kZXMoKSwoZT0+bi5wdXNoKHQubm9kZShlKSkpKSk6ZS5wdXNoKGkubmFtZSl9cmV0dXJuIGV9fWZ1bmN0aW9uIFpHdCh0LGUpe3JldHVybiBuZXcgSkd0KHQsZSl9Y2xhc3MgSkd0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy52PXQsdGhpcy53PWUsdGhpcy5iYXNlRWRnZUxpc3Q9W10sdGhpcy5pbmJvdW5kPW51bGwsdGhpcy5udW1SZWd1bGFyRWRnZXM9MCx0aGlzLm51bUNvbnRyb2xFZGdlcz0wLHRoaXMubnVtUmVmRWRnZXM9MCx0aGlzLnRvdGFsU2l6ZT0wfWFkZEJhc2VFZGdlKHQsZSl7dGhpcy5iYXNlRWRnZUxpc3QucHVzaCh0KSx0LmlzQ29udHJvbERlcGVuZGVuY3k/dGhpcy5udW1Db250cm9sRWRnZXMrPTE6dGhpcy5udW1SZWd1bGFyRWRnZXMrPTEsdC5pc1JlZmVyZW5jZUVkZ2UmJih0aGlzLm51bVJlZkVkZ2VzKz0xKSx0aGlzLnRvdGFsU2l6ZSs9Skd0LmNvbXB1dGVTaXplT2ZFZGdlKHQsZSksZS5tYXhNZXRhRWRnZVNpemU9TWF0aC5tYXgoZS5tYXhNZXRhRWRnZVNpemUsdGhpcy50b3RhbFNpemUpfXN0YXRpYyBjb21wdXRlU2l6ZU9mRWRnZSh0LGUpe2xldCBuPWUubm9kZSh0LnYpO2lmKCFuLm91dHB1dFNoYXBlcylyZXR1cm4gMTtlLmhhc1NoYXBlSW5mbz0hMDtjb25zdCBpPU9iamVjdC5rZXlzKG4ub3V0cHV0U2hhcGVzKS5tYXAoKHQ9Pm4ub3V0cHV0U2hhcGVzW3RdKSkubWFwKCh0PT5udWxsPT10PzE6dC5yZWR1Y2UoKCh0LGUpPT4oLTE9PT1lJiYoZT0xKSx0KmUpKSwxKSkpO3JldHVybiBTZS5leHBvcnRzLnN1bShpKX19ZnVuY3Rpb24gUUd0KHQsZSxuLGkscixvKXtyZXR1cm4gbmV3IGVXdCh0LGUsbixpLHIsbyl9ZnVuY3Rpb24gdFd0KHQsZSxuLGkscil7cmV0dXJuKG4/bisiLyI6IiIpK3QrKHZvaWQgMCE9PWkmJnZvaWQgMCE9PXI/IlsiK2krIi0iK3IrIl0iOiIjIikrZX1jbGFzcyBlV3R7Y29uc3RydWN0b3IodCxlLG4saSxyLG8pe3RoaXMubmFtZT1yfHx0V3QodCxlLG4pLHRoaXMudHlwZT1qR3QuU0VSSUVTLHRoaXMuaGFzTG9vcD0hMSx0aGlzLnByZWZpeD10LHRoaXMuc3VmZml4PWUsdGhpcy5jbHVzdGVySWQ9aSx0aGlzLmlkcz1bXSx0aGlzLnBhcmVudD1uLHRoaXMuaXNHcm91cE5vZGU9ITAsdGhpcy5jYXJkaW5hbGl0eT0wLHRoaXMubWV0YWdyYXBoPW9XdChyLFVHdC5TRVJJRVMsbyksdGhpcy5icmlkZ2VncmFwaD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuZGV2aWNlSGlzdG9ncmFtPXt9LHRoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT17fSx0aGlzLmNvbXBhdGliaWxpdHlIaXN0b2dyYW09e2NvbXBhdGlibGU6MCxpbmNvbXBhdGlibGU6MH0sdGhpcy5oYXNOb25Db250cm9sRWRnZXM9ITEsdGhpcy5pbmNsdWRlPUdHdC5VTlNQRUNJRklFRH19Y29uc3Qgbld0PS9eKFteOl0rKTooKFx3Kzp8KVxkKykkLztmdW5jdGlvbiBpV3QodCxlLG4saSxyLG8pe2UhPT1uLm5hbWUmJnQuZWRnZXMucHVzaCh7djplLHc6bi5uYW1lLG91dHB1dFRlbnNvcktleTppLm91dHB1dFRlbnNvcktleSxpc0NvbnRyb2xEZXBlbmRlbmN5OmkuaXNDb250cm9sRGVwZW5kZW5jeSxpc1JlZmVyZW5jZUVkZ2U6ITA9PT1yLnJlZkVkZ2VzW24ub3ArIiAiK29dfSl9Y29uc3Qgcld0PXtlbmFibGVFbWJlZGRpbmc6ITAsaW5FbWJlZGRpbmdUeXBlczpbIkNvbnN0Il0sb3V0RW1iZWRkaW5nVHlwZXM6WyJeW2EtekEtWl0rU3VtbWFyeSQiXSxyZWZFZGdlczp7IkFzc2lnbiAwIjohMCwiQXNzaWduQWRkIDAiOiEwLCJBc3NpZ25TdWIgMCI6ITAsImFzc2lnbiAwIjohMCwiYXNzaWduX2FkZCAwIjohMCwiYXNzaWduX3N1YiAwIjohMCwiY291bnRfdXBfdG8gMCI6ITAsIlNjYXR0ZXJBZGQgMCI6ITAsIlNjYXR0ZXJTdWIgMCI6ITAsIlNjYXR0ZXJVcGRhdGUgMCI6ITAsInNjYXR0ZXJfYWRkIDAiOiEwLCJzY2F0dGVyX3N1YiAwIjohMCwic2NhdHRlcl91cGRhdGUgMCI6ITB9fTtmdW5jdGlvbiBvV3QodCxlLG49e30pe2NvbnN0IGk9bmV3IGZHdC5ncmFwaGxpYi5HcmFwaChuKTtyZXR1cm4gaS5zZXRHcmFwaCh7bmFtZTp0LHJhbmtkaXI6bi5yYW5rZGlyfHwiQlQiLHR5cGU6ZX0pLGl9ZnVuY3Rpb24gYVd0KHQpe3JldHVybiBmdW5jdGlvbihlKXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7bGV0IGk9bmV3IFJlZ0V4cCh0W25dKTtpZigic3RyaW5nIj09dHlwZW9mIGUub3AmJmUub3AubWF0Y2goaSkpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHNXdCh0KXtsZXQgZT10LnNwbGl0KEhHdCk7cmV0dXJuIHQrSEd0KyIoIitlW2UubGVuZ3RoLTFdKyIpIn1mdW5jdGlvbiBsV3QodCl7bGV0IGU9dC5ub2RlcygpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQubmVpZ2hib3JzKGUpLmxlbmd0aH0pKTtyZXR1cm4gZS5zb3J0KCksZX1mdW5jdGlvbiBjV3QodCxlKXtsZXQgbj1bXSxpPXQuaW5kZXhPZihIR3QpO2Zvcig7aT49MDspbi5wdXNoKHQuc3Vic3RyaW5nKDAsaSkpLGk9dC5pbmRleE9mKEhHdCxpKzEpO2lmKGUpe2xldCBpPWVbdF07aSYmbi5wdXNoKGkpfXJldHVybiBuLnB1c2godCksbn1mdW5jdGlvbiB1V3QodCl7cmV0dXJuIHQ9PT1HR3QuRVhDTFVERT8iQWRkIHRvIG1haW4gZ3JhcGgiOiJSZW1vdmUgZnJvbSBtYWluIGdyYXBoIn1sZXQgaFd0PSIjMGY5ZDU4IixkV3Q9IiNkYjQ0MzciLHBXdD17REVGQVVMVF9GSUxMOiIjZDlkOWQ5IixERUZBVUxUX1NUUk9LRToiI2E2YTZhNiIsU0FUVVJBVElPTjouNixMSUdIVE5FU1M6Ljg1LEVYUEFOREVEX0NPTE9SOiIjZjBmMGYwIixIVUVTOlsyMjAsMTAwLDE4MCw0MCwyMCwzNDAsMjYwLDMwMCwxNDAsNjBdLFNUUlVDVFVSRV9QQUxFVFRFKHQsZSl7bGV0IG49cFd0LkhVRVMsaT1uW3Qlbi5sZW5ndGhdLHI9TWF0aC5zaW4oaSpNYXRoLlBJLzM2MCk7cmV0dXJuICRoKGksLjAxKihlPzMwOjkwLTYwKnIpLC4wMSooZT85NTo4MCkpLnRvU3RyaW5nKCl9LERFVklDRV9QQUxFVFRFOnQ9PnBXdC5TVFJVQ1RVUkVfUEFMRVRURSh0KSxYTEFfQ0xVU1RFUl9QQUxFVFRFOnQ9PnBXdC5TVFJVQ1RVUkVfUEFMRVRURSh0KSxVTktOT1dOOiIjZWVlIixHUkFESUVOVF9PVVRMSU5FOiIjODg4In07Y29uc3QgZld0PVsiTm9PcCJdLG1XdD1bXSxnV3Q9WyIjZmZmNWYwIiwiI2ZiNmE0YSJdLF9XdD1uZXcgUmVnRXhwKCJeKD86X19mdW5jdGlvbl9saWJyYXJ5X18pPyhcXHcrKV9bYS16MC05XXs4fSg/Ol9cXGQrKT8kIik7Y2xhc3MgeVd0e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmhpZXJhcmNoeT10LHRoaXMuZGlzcGxheWluZ1N0YXRzPWUsdGhpcy5hdXRvRXh0cmFjdE5vZGVzPW4sdGhpcy5pbmRleD17fSx0aGlzLnJlbmRlcmVkT3BOYW1lcz1bXSx0aGlzLmNvbXB1dGVTY2FsZXMoKSx0aGlzLmhhc1N1YmhpZXJhcmNoeT17fSx0aGlzLnJvb3Q9bmV3IFRXdCh0LnJvb3QsdC5ncmFwaE9wdGlvbnMpLHRoaXMuaW5kZXhbdC5yb290Lm5hbWVdPXRoaXMucm9vdCx0aGlzLnJlbmRlcmVkT3BOYW1lcy5wdXNoKHQucm9vdC5uYW1lKSx0aGlzLmJ1aWxkU3ViaGllcmFyY2h5KHQucm9vdC5uYW1lKSx0aGlzLnJvb3QuZXhwYW5kZWQ9ITAsdGhpcy50cmFjZUlucHV0cz0hMX1jb21wdXRlU2NhbGVzKCl7dGhpcy5kZXZpY2VDb2xvck1hcD1FTSgpLmRvbWFpbih0aGlzLmhpZXJhcmNoeS5kZXZpY2VzKS5yYW5nZShTZS5leHBvcnRzLm1hcCh6bCh0aGlzLmhpZXJhcmNoeS5kZXZpY2VzLmxlbmd0aCkscFd0LkRFVklDRV9QQUxFVFRFKSksdGhpcy54bGFDbHVzdGVyQ29sb3JNYXA9RU0oKS5kb21haW4odGhpcy5oaWVyYXJjaHkueGxhQ2x1c3RlcnMpLnJhbmdlKFNlLmV4cG9ydHMubWFwKHpsKHRoaXMuaGllcmFyY2h5LnhsYUNsdXN0ZXJzLmxlbmd0aCkscFd0LlhMQV9DTFVTVEVSX1BBTEVUVEUpKTtsZXQgdD10aGlzLmhpZXJhcmNoeS5yb290Lm1ldGFncmFwaCxlPVdsKHQubm9kZXMoKSwoKGUsbik9PntsZXQgaT10Lm5vZGUoZSk7aWYobnVsbCE9aS5zdGF0cylyZXR1cm4gaS5zdGF0cy50b3RhbEJ5dGVzfSkpO3RoaXMubWVtb3J5VXNhZ2VTY2FsZT1WTSgpLmRvbWFpbihbMCxlXSkucmFuZ2UoZ1d0KTtsZXQgbj1XbCh0Lm5vZGVzKCksKChlLG4pPT57bGV0IGk9dC5ub2RlKGUpO2lmKG51bGwhPWkuc3RhdHMpcmV0dXJuIGkuc3RhdHMuZ2V0VG90YWxNaWNyb3MoKX0pKTt0aGlzLmNvbXB1dGVUaW1lU2NhbGU9Vk0oKS5kb21haW4oWzAsbl0pLnJhbmdlKGdXdCksdGhpcy5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGU9dGhpcy5oaWVyYXJjaHkuaGFzU2hhcGVJbmZvP0VHdDpWTSgpLmRvbWFpbihbMSx0aGlzLmhpZXJhcmNoeS5tYXhNZXRhRWRnZVNpemVdKS5yYW5nZShbTUd0LDEyXSl9Z2V0UmVuZGVyTm9kZUJ5TmFtZSh0KXtyZXR1cm4gdGhpcy5pbmRleFt0XX1nZXROb2RlQnlOYW1lKHQpe3JldHVybiB0aGlzLmhpZXJhcmNoeS5ub2RlKHQpfWNvbG9ySGlzdG9ncmFtKHQsZSl7aWYoT2JqZWN0LmtleXModCkubGVuZ3RoPjApe2NvbnN0IG49U2UuZXhwb3J0cy5zdW0oT2JqZWN0LmtleXModCkubWFwKChlPT50W2VdKSkpO3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoKGk9Pih7Y29sb3I6ZShpKSxwcm9wb3J0aW9uOnRbaV0vbn0pKSl9cmV0dXJuIG51bGx9Z2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQgaW4gdGhpcy5pbmRleClyZXR1cm4gdGhpcy5pbmRleFt0XTtsZXQgZT10aGlzLmhpZXJhcmNoeS5ub2RlKHQpO2lmKCFlKXJldHVybiBudWxsO2xldCBuPWUuaXNHcm91cE5vZGU/bmV3IFRXdChlLHRoaXMuaGllcmFyY2h5LmdyYXBoT3B0aW9ucyk6bmV3IHdXdChlKTt0aGlzLmluZGV4W3RdPW4sdGhpcy5yZW5kZXJlZE9wTmFtZXMucHVzaCh0KSxlLnN0YXRzJiYobi5tZW1vcnlDb2xvcj10aGlzLm1lbW9yeVVzYWdlU2NhbGUoZS5zdGF0cy50b3RhbEJ5dGVzKSxuLmNvbXB1dGVUaW1lQ29sb3I9dGhpcy5jb21wdXRlVGltZVNjYWxlKGUuc3RhdHMuZ2V0VG90YWxNaWNyb3MoKSkpLG4uaXNGYWRlZE91dD10aGlzLmRpc3BsYXlpbmdTdGF0cyYmIU9HdChlLnN0YXRzKTt2YXIgaT1udWxsLHI9bnVsbCxvPW51bGw7aWYoZS5pc0dyb3VwTm9kZSl7aT1lLmRldmljZUhpc3RvZ3JhbSxyPWUueGxhQ2x1c3Rlckhpc3RvZ3JhbTtsZXQgdD1lLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZSxuPWUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7MD09dCYmMD09bnx8KG89dC8odCtuKSl9ZWxzZXtsZXQgdD1uLm5vZGUuZGV2aWNlO3QmJihpPXtbdF06MX0pO2xldCBlPW4ubm9kZS54bGFDbHVzdGVyO2UmJihyPXtbZV06MX0pLG4ubm9kZS50eXBlPT09akd0Lk9QJiYobz1uLm5vZGUuY29tcGF0aWJsZT8xOjApfXJldHVybiBpJiYobi5kZXZpY2VDb2xvcnM9dGhpcy5jb2xvckhpc3RvZ3JhbShpLHRoaXMuZGV2aWNlQ29sb3JNYXApKSxyJiYobi54bGFDbHVzdGVyQ29sb3JzPXRoaXMuY29sb3JIaXN0b2dyYW0ocix0aGlzLnhsYUNsdXN0ZXJDb2xvck1hcCkpLG51bGwhPW8mJihuLmNvbXBhdGliaWxpdHlDb2xvcnM9W3tjb2xvcjpoV3QscHJvcG9ydGlvbjpvfSx7Y29sb3I6ZFd0LHByb3BvcnRpb246MS1vfV0pLHRoaXMuaW5kZXhbdF19Z2V0TmVhcmVzdFZpc2libGVBbmNlc3Rvcih0KXtsZXQgZT1jV3QodCksbj0wLGk9bnVsbCxyPXQ7Zm9yKDtuPGUubGVuZ3RoJiYocj1lW25dLGk9dGhpcy5nZXRSZW5kZXJOb2RlQnlOYW1lKHIpLGkuZXhwYW5kZWQpO24rKyk7aWYobj09ZS5sZW5ndGgtMil7bGV0IHQ9ZVtuKzFdO2lmKGkuaW5Bbm5vdGF0aW9ucy5ub2RlTmFtZXNbdF0pcmV0dXJuIHQ7aWYoaS5vdXRBbm5vdGF0aW9ucy5ub2RlTmFtZXNbdF0pcmV0dXJuIHR9cmV0dXJuIHJ9c2V0RGVwdGgodCl7Q1d0KHRoaXMucm9vdCwrdCl9aXNOb2RlQXV4aWxpYXJ5KHQpe2xldCBlPXRoaXMuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0Lm5vZGUucGFyZW50Tm9kZS5uYW1lKSxuPVNlLmV4cG9ydHMuZmluZChlLmlzb2xhdGVkSW5FeHRyYWN0LChlPT5lLm5vZGUubmFtZT09PXQubm9kZS5uYW1lKSk7cmV0dXJuISFufHwobj1TZS5leHBvcnRzLmZpbmQoZS5pc29sYXRlZE91dEV4dHJhY3QsKGU9PmUubm9kZS5uYW1lPT09dC5ub2RlLm5hbWUpKSwhIW4pfWdldE5hbWVzT2ZSZW5kZXJlZE9wcygpe3JldHVybiB0aGlzLnJlbmRlcmVkT3BOYW1lc31jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHQsZSxuLGkpe2NvbnN0IHI9bi5uYW1lLnJlcGxhY2UoZSxpKTtsZXQgbz10Lm1ldGFncmFwaC5ub2RlKHIpO2lmKG8pcmV0dXJuIG87bz1uZXcgWEd0KHtuYW1lOnIsaW5wdXQ6W10sZGV2aWNlOm4uZGV2aWNlLG9wOm4ub3AsYXR0cjpTZS5leHBvcnRzLmNsb25lRGVlcChuLmF0dHIpfSksby5jYXJkaW5hbGl0eT1uLmNhcmRpbmFsaXR5LG8uaW5jbHVkZT1uLmluY2x1ZGUsby5vdXRwdXRTaGFwZXM9U2UuZXhwb3J0cy5jbG9uZURlZXAobi5vdXRwdXRTaGFwZXMpLG8ueGxhQ2x1c3Rlcj1uLnhsYUNsdXN0ZXIsby5mdW5jdGlvbklucHV0SW5kZXg9bi5mdW5jdGlvbklucHV0SW5kZXgsby5mdW5jdGlvbk91dHB1dEluZGV4PW4uZnVuY3Rpb25PdXRwdXRJbmRleCxvLmlucHV0cz1uLmlucHV0cy5tYXAoKHQ9Pntjb25zdCBuPVNlLmV4cG9ydHMuY2xvbmUodCk7cmV0dXJuIG4ubmFtZT10Lm5hbWUucmVwbGFjZShlLGkpLG59KSksby5wYXJlbnROb2RlPXQsdC5tZXRhZ3JhcGguc2V0Tm9kZShvLm5hbWUsbyksdGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShvLm5hbWUsbyk7Y29uc3QgYT1uPT50aGlzLmNsb25lQW5kQWRkRnVuY3Rpb25PcE5vZGUodCxlLG4saSk7cmV0dXJuIG8uaW5FbWJlZGRpbmdzPW4uaW5FbWJlZGRpbmdzLm1hcChhKSxvLm91dEVtYmVkZGluZ3M9bi5vdXRFbWJlZGRpbmdzLm1hcChhKSxvfWNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGUodCxlLG4saSxyKXtjb25zdCBvPXt9LGE9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlSGVscGVyKHQsZSxuLGkscixvKTtyZXR1cm4gU2UuZXhwb3J0cy5pc0VtcHR5KG8pfHx0aGlzLnBhdGNoRWRnZXNGcm9tRnVuY3Rpb25PdXRwdXRzKGUsbyksYX1jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlSGVscGVyKHQsZSxuLGkscixvKXtjb25zdCBhPSRHdChuLm5hbWUucmVwbGFjZShpLHIpKTtyZXR1cm4gYS5kZXB0aD1uLmRlcHRoLGEuY2FyZGluYWxpdHk9bi5jYXJkaW5hbGl0eSxhLnRlbXBsYXRlSWQ9bi50ZW1wbGF0ZUlkLGEub3BIaXN0b2dyYW09U2UuZXhwb3J0cy5jbG9uZShuLm9wSGlzdG9ncmFtKSxhLmRldmljZUhpc3RvZ3JhbT1TZS5leHBvcnRzLmNsb25lKG4uZGV2aWNlSGlzdG9ncmFtKSxhLnhsYUNsdXN0ZXJIaXN0b2dyYW09U2UuZXhwb3J0cy5jbG9uZShuLnhsYUNsdXN0ZXJIaXN0b2dyYW0pLGEuaGFzTm9uQ29udHJvbEVkZ2VzPW4uaGFzTm9uQ29udHJvbEVkZ2VzLGEuaW5jbHVkZT1uLmluY2x1ZGUsYS5ub2RlQXR0cmlidXRlcz1TZS5leHBvcnRzLmNsb25lKG4ubm9kZUF0dHJpYnV0ZXMpLGEuYXNzb2NpYXRlZEZ1bmN0aW9uPW4uYXNzb2NpYXRlZEZ1bmN0aW9uLFNlLmV4cG9ydHMuZWFjaChuLm1ldGFncmFwaC5ub2RlcygpLChzPT57Y29uc3QgbD1uLm1ldGFncmFwaC5ub2RlKHMpO3N3aXRjaChsLnR5cGUpe2Nhc2Ugakd0Lk1FVEE6Y29uc3Qgbj10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGVIZWxwZXIodCxlLGwsaSxyLG8pO24ucGFyZW50Tm9kZT1hLGEubWV0YWdyYXBoLnNldE5vZGUobi5uYW1lLG4pLHRoaXMuaGllcmFyY2h5LnNldE5vZGUobi5uYW1lLG4pO2JyZWFrO2Nhc2Ugakd0Lk9QOmNvbnN0IHM9dGhpcy5jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKGEsaSxsLHIpO1NlLmV4cG9ydHMuaXNOdW1iZXIocy5mdW5jdGlvbklucHV0SW5kZXgpJiZ0aGlzLnBhdGNoRWRnZXNJbnRvRnVuY3Rpb25JbnB1dHMoZSxzKSxTZS5leHBvcnRzLmlzTnVtYmVyKHMuZnVuY3Rpb25PdXRwdXRJbmRleCkmJihvW3MuZnVuY3Rpb25PdXRwdXRJbmRleF09cyk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4obC5uYW1lKyIgaXMgb2RkbHkgbmVpdGhlciBhIG1ldGFub2RlIG5vciBhbiBvcG5vZGUuIil9fSkpLHRoaXMuY2xvbmVMaWJyYXJ5TWV0YW5vZGVFZGdlcyhuLGEsaSxyKSxhfWNsb25lTGlicmFyeU1ldGFub2RlRWRnZXModCxlLG4saSl7U2UuZXhwb3J0cy5lYWNoKHQubWV0YWdyYXBoLmVkZ2VzKCksKHI9Pntjb25zdCBvPXQubWV0YWdyYXBoLmVkZ2UociksYT1vLnYucmVwbGFjZShuLGkpLHM9by53LnJlcGxhY2UobixpKSxsPW5ldyBKR3QoYSxzKTtsLmluYm91bmQ9by5pbmJvdW5kLGwubnVtUmVndWxhckVkZ2VzPW8ubnVtUmVndWxhckVkZ2VzLGwubnVtQ29udHJvbEVkZ2VzPW8ubnVtQ29udHJvbEVkZ2VzLGwubnVtUmVmRWRnZXM9by5udW1SZWZFZGdlcyxsLnRvdGFsU2l6ZT1vLnRvdGFsU2l6ZSxvLmJhc2VFZGdlTGlzdCYmKGwuYmFzZUVkZ2VMaXN0PW8uYmFzZUVkZ2VMaXN0Lm1hcCgodD0+e2NvbnN0IGU9U2UuZXhwb3J0cy5jbG9uZSh0KTtyZXR1cm4gZS52PXQudi5yZXBsYWNlKG4saSksZS53PXQudy5yZXBsYWNlKG4saSksZX0pKSksZS5tZXRhZ3JhcGgubm9kZShzKT9lLm1ldGFncmFwaC5zZXRFZGdlKGEscyxsKTplLm1ldGFncmFwaC5zZXRFZGdlKHMsYSxsKX0pKX1wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHQsZSl7bGV0IG49TWF0aC5taW4oZS5mdW5jdGlvbklucHV0SW5kZXgsdC5pbnB1dHMubGVuZ3RoLTEpLGk9U2UuZXhwb3J0cy5jbG9uZSh0LmlucHV0c1tuXSk7Zm9yKDtpLmlzQ29udHJvbERlcGVuZGVuY3k7KW4rKyxpPXQuaW5wdXRzW25dO2UuaW5wdXRzLnB1c2goaSk7Y29uc3Qgcj10aGlzLmhpZXJhcmNoeS5nZXRQcmVkZWNlc3NvcnModC5uYW1lKTtsZXQgbyxhPTA7U2UuZXhwb3J0cy5lYWNoKHIucmVndWxhciwodD0+e2lmKGErPXQubnVtUmVndWxhckVkZ2VzLGE+bilyZXR1cm4gbz10LCExfSkpLFNlLmV4cG9ydHMuZWFjaChvLmJhc2VFZGdlTGlzdCwobj0+e24udz09PXQubmFtZSYmKG4udz1lLm5hbWUpLG4udj09PXQubmFtZSYmKG4udj1lLm5hbWUpfSkpfXBhdGNoRWRnZXNGcm9tRnVuY3Rpb25PdXRwdXRzKHQsZSl7Y29uc3Qgbj10aGlzLmhpZXJhcmNoeS5nZXRTdWNjZXNzb3JzKHQubmFtZSk7U2UuZXhwb3J0cy5lYWNoKG4ucmVndWxhciwobj0+e1NlLmV4cG9ydHMuZWFjaChuLmJhc2VFZGdlTGlzdCwobj0+e2NvbnN0IGk9dGhpcy5oaWVyYXJjaHkubm9kZShuLncpO1NlLmV4cG9ydHMuZWFjaChpLmlucHV0cywoaT0+e2kubmFtZT09PXQubmFtZSYmKGkubmFtZT1lW2kub3V0cHV0VGVuc29yS2V5XS5uYW1lLGkub3V0cHV0VGVuc29yS2V5PW4ub3V0cHV0VGVuc29yS2V5KX0pKX0pKSxTZS5leHBvcnRzLmVhY2gobi5iYXNlRWRnZUxpc3QsKHQ9Pnt0LnY9ZVt0Lm91dHB1dFRlbnNvcktleV0ubmFtZSx0Lm91dHB1dFRlbnNvcktleT0iMCJ9KSl9KSl9YnVpbGRTdWJoaWVyYXJjaHkodCl7aWYodCBpbiB0aGlzLmhhc1N1YmhpZXJhcmNoeSlyZXR1cm47dGhpcy5oYXNTdWJoaWVyYXJjaHlbdF09ITA7bGV0IGU9dGhpcy5pbmRleFt0XTtpZihlLm5vZGUudHlwZSE9PWpHdC5NRVRBJiZlLm5vZGUudHlwZSE9PWpHdC5TRVJJRVMpcmV0dXJuO2xldCBuPWUsaT1uLm5vZGUubWV0YWdyYXBoLHI9bi5jb3JlR3JhcGg7Y29uc3Qgbz1bXSxhPVtdO1NlLmV4cG9ydHMuaXNFbXB0eSh0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zKXx8KFNlLmV4cG9ydHMuZWFjaChpLm5vZGVzKCksKHQ9Pntjb25zdCBlPWkubm9kZSh0KSxuPXRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnNbZS5vcF07aWYoIW4pcmV0dXJuO2lmKDA9PT10LmluZGV4T2YoVkd0KSlyZXR1cm47Y29uc3Qgcj10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGUoaSxlLG4ubm9kZSxuLm5vZGUubmFtZSxlLm5hbWUpO28ucHVzaChlKSxhLnB1c2gocil9KSksU2UuZXhwb3J0cy5lYWNoKGEsKCh0LGUpPT57Y29uc3Qgbj1vW2VdO3QucGFyZW50Tm9kZT1uLnBhcmVudE5vZGUsaS5zZXROb2RlKG4ubmFtZSx0KSx0aGlzLmhpZXJhcmNoeS5zZXROb2RlKG4ubmFtZSx0KX0pKSksU2UuZXhwb3J0cy5lYWNoKGkubm9kZXMoKSwodD0+e2xldCBlPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpLG49ZS5ub2RlO3Iuc2V0Tm9kZSh0LGUpLG4uaXNHcm91cE5vZGV8fChTZS5leHBvcnRzLmVhY2gobi5pbkVtYmVkZGluZ3MsKHQ9PntsZXQgbj1uZXcgU1d0KG51bGwpLGk9bmV3IHdXdCh0KTtNV3QoZSx0LGksbixiV3QuQ09OU1RBTlQpLHRoaXMuaW5kZXhbdC5uYW1lXT1pfSkpLFNlLmV4cG9ydHMuZWFjaChuLm91dEVtYmVkZGluZ3MsKHQ9PntsZXQgbj1uZXcgU1d0KG51bGwpLGk9bmV3IHdXdCh0KTtFV3QoZSx0LGksbixiV3QuU1VNTUFSWSksdGhpcy5pbmRleFt0Lm5hbWVdPWl9KSkpfSkpLFNlLmV4cG9ydHMuZWFjaChpLmVkZ2VzKCksKHQ9PntsZXQgZT1pLmVkZ2UodCksbj1uZXcgU1d0KGUpO24uaXNGYWRlZE91dD10aGlzLmluZGV4W3Qudl0uaXNGYWRlZE91dHx8dGhpcy5pbmRleFt0LnddLmlzRmFkZWRPdXQsci5zZXRFZGdlKHQudix0Lncsbil9KSksbi5ub2RlLnR5cGU9PT1qR3QuTUVUQSYmKGZ1bmN0aW9uIHModCxlKXsoZnVuY3Rpb24gbih0KXtsZXQgZT10LmNvcmVHcmFwaDtTZS5leHBvcnRzLmVhY2goZS5ub2RlcygpLChuPT57ZS5ub2RlKG4pLm5vZGUuaW5jbHVkZSE9PUdHdC5FWENMVURFfHxuLnN0YXJ0c1dpdGgoVkd0KXx8KHQuY29yZUdyYXBoLm91dEVkZ2VzKG4pLmxlbmd0aD50LmNvcmVHcmFwaC5pbkVkZ2VzKG4pLmxlbmd0aD9rV3QodCxuKTpMV3QodCxuKSl9KSl9KSh0KSxmV3QubGVuZ3RoJiYoZnVuY3Rpb24gaSh0KXtsZXQgZT10LmNvcmVHcmFwaDtTZS5leHBvcnRzLmVhY2goZS5ub2RlcygpLChuPT57bGV0IGk9ZS5ub2RlKG4pO2kubm9kZS5pbmNsdWRlPT09R0d0LlVOU1BFQ0lGSUVEJiZQV3QoaS5ub2RlLGZXdCkmJmtXdCh0LG4pfSkpfSkodCksbVd0Lmxlbmd0aCYmKGZ1bmN0aW9uIHIodCl7bGV0IGU9dC5jb3JlR3JhcGg7U2UuZXhwb3J0cy5lYWNoKGUubm9kZXMoKSwobj0+e2xldCBpPWUubm9kZShuKTtpLm5vZGUuaW5jbHVkZT09PUdHdC5VTlNQRUNJRklFRCYmUFd0KGkubm9kZSxtV3QpJiZMV3QodCxuKX0pKX0pKHQpLGUmJihmdW5jdGlvbiBvKHQpe2xldCBlPXQuY29yZUdyYXBoLG49e30saT17fSxyPTA7aWYoU2UuZXhwb3J0cy5lYWNoKGUubm9kZXMoKSwodD0+e2lmKGUubm9kZSh0KS5ub2RlLmluY2x1ZGUhPT1HR3QuVU5TUEVDSUZJRUQpcmV0dXJuO2xldCBvPVNlLmV4cG9ydHMucmVkdWNlKGUucHJlZGVjZXNzb3JzKHQpLCgobixpKT0+bisoZS5lZGdlKGksdCkubWV0YWVkZ2UubnVtUmVndWxhckVkZ2VzPzE6MCkpLDApOzA9PT1vJiZlLnByZWRlY2Vzc29ycyh0KS5sZW5ndGg+MCYmKG89ZS5wcmVkZWNlc3NvcnModCkubGVuZ3RoKTtsZXQgYT1TZS5leHBvcnRzLnJlZHVjZShlLnN1Y2Nlc3NvcnModCksKChuLGkpPT5uKyhlLmVkZ2UodCxpKS5tZXRhZWRnZS5udW1SZWd1bGFyRWRnZXM/MTowKSksMCk7MD09PWEmJmUuc3VjY2Vzc29ycyh0KS5sZW5ndGg+MCYmKGE9ZS5zdWNjZXNzb3JzKHQpLmxlbmd0aCksblt0XT1vLGlbdF09YSxyKyt9KSkscjwxNSlyZXR1cm47bGV0IG89TWF0aC5yb3VuZCguNzUqciksYT1NYXRoLnJvdW5kKC4yNSpyKSxzPU9iamVjdC5rZXlzKG4pLnNvcnQoKCh0LGUpPT5uW3RdLW5bZV0pKSxsPW5bc1tvXV0sYz1sK2wtbltzW2FdXTtjPU1hdGgubWF4KGMsNCk7Zm9yKGxldCBlPXItMTtuW3NbZV1dPmM7ZS0tKUxXdCh0LHNbZV0pO2xldCB1PU9iamVjdC5rZXlzKGkpLnNvcnQoKCh0LGUpPT5pW3RdLWlbZV0pKSxoPWlbdVtvXV0sZD1oKzQqKGgtaVt1W2FdXSk7ZD1NYXRoLm1heChkLDQpO2ZvcihsZXQgbj1yLTE7aVt1W25dXT5kO24tLSl7bGV0IGk9ZS5ub2RlKHVbbl0pO2kmJiFpLmlzSW5FeHRyYWN0JiZrV3QodCx1W25dKX19KSh0KSwoZnVuY3Rpb24gYSh0KXtsZXQgZT10LmNvcmVHcmFwaCxuPXt9O1NlLmV4cG9ydHMuZWFjaChlLmVkZ2VzKCksKHQ9PntlLmVkZ2UodCkubWV0YWVkZ2UubnVtUmVndWxhckVkZ2VzfHwoKG5bdC52XT1uW3Qudl18fFtdKS5wdXNoKHQpLChuW3Qud109blt0LnddfHxbXSkucHVzaCh0KSl9KSksU2UuZXhwb3J0cy5lYWNoKG4sKCh0LG4pPT57dC5sZW5ndGg+NCYmU2UuZXhwb3J0cy5lYWNoKHQsKHQ9PkFXdChlLHQudix0LncpKSl9KSl9KSh0KTtsZXQgcz10LmNvcmVHcmFwaDtTZS5leHBvcnRzLmVhY2gocy5ub2RlcygpLChlPT57bGV0IG49cy5ub2RlKGUpLGk9cy5uZWlnaGJvcnMoZSkubGVuZ3RoO2lmKG4ubm9kZS5pbmNsdWRlPT09R0d0LlVOU1BFQ0lGSUVEJiYwPT09aSl7bGV0IGk9bi5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wLHI9bi5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA7bi5pc0luRXh0cmFjdD8odC5pc29sYXRlZEluRXh0cmFjdC5wdXNoKG4pLG4ubm9kZS5pbmNsdWRlPUdHdC5FWENMVURFLHMucmVtb3ZlTm9kZShlKSk6bi5pc091dEV4dHJhY3Q/KHQuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2gobiksbi5ub2RlLmluY2x1ZGU9R0d0LkVYQ0xVREUscy5yZW1vdmVOb2RlKGUpKTppJiYhcj8obi5pc0luRXh0cmFjdD0hMCx0Lmlzb2xhdGVkSW5FeHRyYWN0LnB1c2gobiksbi5ub2RlLmluY2x1ZGU9R0d0LkVYQ0xVREUscy5yZW1vdmVOb2RlKGUpKTpyJiYhaSYmKG4uaXNPdXRFeHRyYWN0PSEwLHQuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2gobiksbi5ub2RlLmluY2x1ZGU9R0d0LkVYQ0xVREUscy5yZW1vdmVOb2RlKGUpKX19KSl9KShuLHRoaXMuYXV0b0V4dHJhY3ROb2RlcyksU2UuZXhwb3J0cy5pc0VtcHR5KHRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnMpfHx0aGlzLmJ1aWxkU3ViaGllcmFyY2hpZXNGb3JOZWVkZWRGdW5jdGlvbnMoaSksdD09PUZHdCYmU2UuZXhwb3J0cy5mb3JPd24odGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9ucywoKHQsZSk9Pntjb25zdCBpPXQubm9kZSxvPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKGkubmFtZSk7bi5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5wdXNoKG8pLG8ubm9kZS5pbmNsdWRlPUdHdC5FWENMVURFLHIucmVtb3ZlTm9kZShpLm5hbWUpfSkpO2xldCBsPW4ubm9kZS5wYXJlbnROb2RlO2lmKCFsKXJldHVybjtsZXQgYz10aGlzLmluZGV4W2wubmFtZV0sdT0odCwuLi5lKT0+ZS5jb25jYXQoW3Q/IklOIjoiT1VUIl0pLmpvaW4oIn5+IiksaD10aGlzLmhpZXJhcmNoeS5nZXRCcmlkZ2VncmFwaCh0KSxkPXtpbjp7fSxvdXQ6e30sY29udHJvbDp7fX07U2UuZXhwb3J0cy5lYWNoKGguZWRnZXMoKSwodD0+e2xldCBlPSEhaS5ub2RlKHQudyksbj1lP3Qudjp0Lnc7aC5lZGdlKHQpLm51bVJlZ3VsYXJFZGdlcz9lP2Qub3V0W25dPShkLm91dFtuXXx8MCkrMTpkLmluW25dPShkLmluW25dfHwwKSsxOmQuY29udHJvbFtuXT0oZC5jb250cm9sW25dfHwwKSsxfSkpO2xldCBwPXRoaXMuaGllcmFyY2h5LmdldE5vZGVNYXAoKTtTZS5leHBvcnRzLmVhY2goaC5lZGdlcygpLChuPT57bGV0IG89aC5lZGdlKG4pLGE9ISFpLm5vZGUobi53KSxbcyxmXT1hP1tuLncsbi52XTpbbi52LG4ud10sbT10aGlzLmluZGV4W3NdLGc9dGhpcy5pbmRleFtmXSxfPWc/Zy5ub2RlOnBbZl0seT0hby5udW1SZWd1bGFyRWRnZXMmJmQuY29udHJvbFtmXT40LFssdl09YT9bZS5pbkFubm90YXRpb25zLG0uaW5Bbm5vdGF0aW9uc106W2Uub3V0QW5ub3RhdGlvbnMsbS5vdXRBbm5vdGF0aW9uc10sYj1udWxsLHg9ITE7aWYoISgoYT9kLm91dDpkLmluKVtmXT40KSYmIXkmJm0uaXNJbkNvcmUoKSl7bGV0IGU9ZT0+Yy5jb3JlR3JhcGguZWRnZShhP3t2OmUsdzp0fTp7djp0LHc6ZX0pO2I9ZShmKSxifHwoYj1lKHUoYSxmLGwubmFtZSkpKSx4PSEhYn1sZXQgdz0hMTtpZihiJiYhby5udW1SZWd1bGFyRWRnZXMpe2xldCB0PWIsZT1jLm5vZGU7Zm9yKDt0LmFkam9pbmluZ01ldGFlZGdlOyl0PXQuYWRqb2luaW5nTWV0YWVkZ2UsZT1lLnBhcmVudE5vZGU7bGV0IG49dGhpcy5oaWVyYXJjaHkuZ2V0VG9wb2xvZ2ljYWxPcmRlcmluZyhlLm5hbWUpLGk9dC5tZXRhZWRnZTt3PW5baS52XT5uW2kud119aWYoeD14JiYhdywheClyZXR1cm4gdm9pZCB2LnB1c2gobmV3IHZXdChfLGcsbmV3IFNXdChvKSxiV3QuU0hPUlRDVVQsYSkpO2xldCBTPXUoYSx0KSxNPXUoYSxmLHQpLEU9ci5ub2RlKE0pO2lmKCFFKXtsZXQgdD1yLm5vZGUoUyk7dHx8KHQ9bmV3IHdXdCh7bmFtZTpTLHR5cGU6akd0LkJSSURHRSxpc0dyb3VwTm9kZTohMSxjYXJkaW5hbGl0eTowLHBhcmVudE5vZGU6bnVsbCxzdGF0czpudWxsLGluY2x1ZGU6R0d0LlVOU1BFQ0lGSUVELGluYm91bmQ6YSxub2RlQXR0cmlidXRlczp7fX0pLHRoaXMuaW5kZXhbU109dCxyLnNldE5vZGUoUyx0KSksRT1uZXcgd1d0KHtuYW1lOk0sdHlwZTpqR3QuQlJJREdFLGlzR3JvdXBOb2RlOiExLGNhcmRpbmFsaXR5OjEscGFyZW50Tm9kZTpudWxsLHN0YXRzOm51bGwsaW5jbHVkZTpHR3QuVU5TUEVDSUZJRUQsaW5ib3VuZDphLG5vZGVBdHRyaWJ1dGVzOnt9fSksdGhpcy5pbmRleFtNXT1FLHIuc2V0Tm9kZShNLEUpLHIuc2V0UGFyZW50KE0sUyksdC5ub2RlLmNhcmRpbmFsaXR5Kyt9bGV0IFQ9bmV3IFNXdChvKTtULmFkam9pbmluZ01ldGFlZGdlPWIsYT9yLnNldEVkZ2UoTSxzLFQpOnIuc2V0RWRnZShzLE0sVCl9KSksU2UuZXhwb3J0cy5lYWNoKFshMCwhMV0sKGU9PntsZXQgbj11KGUsdCksaT1yLm5vZGUobik7aSYmU2UuZXhwb3J0cy5lYWNoKHIubm9kZXMoKSwobz0+e2lmKHIubm9kZShvKS5ub2RlLnR5cGU9PT1qR3QuQlJJREdFKXJldHVybjtpZighKGU/IXIucHJlZGVjZXNzb3JzKG8pLmxlbmd0aDohci5zdWNjZXNzb3JzKG8pLmxlbmd0aCkpcmV0dXJuO2xldCBhPXUoZSx0LCJTVFJVQ1RVUkFMX1RBUkdFVCIpLHM9ci5ub2RlKGEpO3N8fChzPW5ldyB3V3Qoe25hbWU6YSx0eXBlOmpHdC5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MSxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOkdHdC5VTlNQRUNJRklFRCxpbmJvdW5kOmUsbm9kZUF0dHJpYnV0ZXM6e319KSxzLnN0cnVjdHVyYWw9ITAsdGhpcy5pbmRleFthXT1zLHIuc2V0Tm9kZShhLHMpLGkubm9kZS5jYXJkaW5hbGl0eSsrLHIuc2V0UGFyZW50KGEsbikpO2xldCBsPW5ldyBTV3QobnVsbCk7bC5zdHJ1Y3R1cmFsPSEwLGwud2VpZ2h0LS0sZT9yLnNldEVkZ2UoYSxvLGwpOnIuc2V0RWRnZShvLGEsbCl9KSl9KSl9YnVpbGRTdWJoaWVyYXJjaGllc0Zvck5lZWRlZEZ1bmN0aW9ucyh0KXtTZS5leHBvcnRzLmVhY2godC5lZGdlcygpLChlPT57bGV0IG49dC5lZGdlKGUpLGk9bmV3IFNXdChuKTtTZS5leHBvcnRzLmZvckVhY2goaS5tZXRhZWRnZS5iYXNlRWRnZUxpc3QsKHQ9Pntjb25zdCBlPXQudi5zcGxpdChIR3QpO2ZvcihsZXQgdD1lLmxlbmd0aDt0Pj0wO3QtLSl7Y29uc3Qgbj1lLnNsaWNlKDAsdCksaT10aGlzLmhpZXJhcmNoeS5ub2RlKG4uam9pbihIR3QpKTtpZihpKXtpZihpLnR5cGU9PT1qR3QuT1AmJnRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnNbaS5vcF0pZm9yKGxldCB0PTE7dDxuLmxlbmd0aDt0Kyspe2NvbnN0IGU9bi5zbGljZSgwLHQpLmpvaW4oSEd0KTtlJiZ0aGlzLmJ1aWxkU3ViaGllcmFyY2h5KGUpfWJyZWFrfX19KSl9KSl9fWNsYXNzIHZXdHtjb25zdHJ1Y3Rvcih0LGUsbixpLHIpe3RoaXMubm9kZT10LHRoaXMucmVuZGVyTm9kZUluZm89ZSx0aGlzLnJlbmRlck1ldGFlZGdlSW5mbz1uLHRoaXMuYW5ub3RhdGlvblR5cGU9aSx0aGlzLmR4PTAsdGhpcy5keT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLG4mJm4ubWV0YWVkZ2UmJih0aGlzLnY9bi5tZXRhZWRnZS52LHRoaXMudz1uLm1ldGFlZGdlLncpLHRoaXMuaXNJbj1yLHRoaXMucG9pbnRzPVtdfX12YXIgYld0OyEoZnVuY3Rpb24odCl7dFt0LlNIT1JUQ1VUPTBdPSJTSE9SVENVVCIsdFt0LkNPTlNUQU5UPTFdPSJDT05TVEFOVCIsdFt0LlNVTU1BUlk9Ml09IlNVTU1BUlkiLHRbdC5FTExJUFNJUz0zXT0iRUxMSVBTSVMifSkoYld0fHwoYld0PXt9KSk7Y2xhc3MgeFd0e2NvbnN0cnVjdG9yKCl7dGhpcy5saXN0PVtdLHRoaXMubm9kZU5hbWVzPXt9fXB1c2godCl7aWYodC5ub2RlLm5hbWUgaW4gdGhpcy5ub2RlTmFtZXMpcmV0dXJuO2lmKHRoaXMubm9kZU5hbWVzW3Qubm9kZS5uYW1lXT0hMCx0aGlzLmxpc3QubGVuZ3RoPDUpcmV0dXJuIHZvaWQgdGhpcy5saXN0LnB1c2godCk7bGV0IGU9dGhpcy5saXN0W3RoaXMubGlzdC5sZW5ndGgtMV07aWYoZS5hbm5vdGF0aW9uVHlwZT09PWJXdC5FTExJUFNJUyl7bGV0IHQ9ZS5ub2RlO3JldHVybiB2b2lkIHQuc2V0TnVtTW9yZU5vZGVzKCsrdC5udW1Nb3JlTm9kZXMpfWxldCBuPW5ldyBZR3QoMSk7dGhpcy5saXN0LnB1c2gobmV3IHZXdChuLG5ldyB3V3QobiksbnVsbCxiV3QuRUxMSVBTSVMsdC5pc0luKSl9fWNsYXNzIHdXdHtjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLm5vZGU9dCx0aGlzLmV4cGFuZGVkPSExLHRoaXMuaW5Bbm5vdGF0aW9ucz1uZXcgeFd0LHRoaXMub3V0QW5ub3RhdGlvbnM9bmV3IHhXdCx0aGlzLng9MCx0aGlzLnk9MCx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCx0aGlzLmluYm94V2lkdGg9MCx0aGlzLm91dGJveFdpZHRoPTAsdGhpcy5leGNsdWRlZD0hMSx0aGlzLnN0cnVjdHVyYWw9ITEsdGhpcy5sYWJlbE9mZnNldD0wLHRoaXMucmFkaXVzPTAsdGhpcy5sYWJlbEhlaWdodD0wLHRoaXMucGFkZGluZ1RvcD0wLHRoaXMucGFkZGluZ0xlZnQ9MCx0aGlzLnBhZGRpbmdSaWdodD0wLHRoaXMucGFkZGluZ0JvdHRvbT0wLHRoaXMuaXNJbkV4dHJhY3Q9ITEsdGhpcy5pc091dEV4dHJhY3Q9ITEsdGhpcy5jb3JlQm94PXt3aWR0aDowLGhlaWdodDowfSx0aGlzLmlzRmFkZWRPdXQ9ITEsdGhpcy5kaXNwbGF5TmFtZT10Lm5hbWUuc3Vic3RyaW5nKHQubmFtZS5sYXN0SW5kZXhPZihIR3QpKzEpLHQudHlwZT09PWpHdC5NRVRBJiZ0LmFzc29jaWF0ZWRGdW5jdGlvbil7Y29uc3QgdD10aGlzLmRpc3BsYXlOYW1lLm1hdGNoKF9XdCk7dD90aGlzLmRpc3BsYXlOYW1lPXRbMV06U2UuZXhwb3J0cy5zdGFydHNXaXRoKHRoaXMuZGlzcGxheU5hbWUsVkd0KSYmKHRoaXMuZGlzcGxheU5hbWU9dGhpcy5kaXNwbGF5TmFtZS5zdWJzdHJpbmcoVkd0Lmxlbmd0aCkpfX1pc0luQ29yZSgpe3JldHVybiF0aGlzLmlzSW5FeHRyYWN0JiYhdGhpcy5pc091dEV4dHJhY3QmJiF0aGlzLmlzTGlicmFyeUZ1bmN0aW9ufX1jbGFzcyBTV3R7Y29uc3RydWN0b3IodCl7dGhpcy5tZXRhZWRnZT10LHRoaXMuYWRqb2luaW5nTWV0YWVkZ2U9bnVsbCx0aGlzLnN0cnVjdHVyYWw9ITEsdGhpcy53ZWlnaHQ9MSx0aGlzLmlzRmFkZWRPdXQ9ITF9fWZ1bmN0aW9uIE1XdCh0LGUsbixpLHIpe2xldCBvPW5ldyB2V3QoZSxuLGksciwhMCk7dC5pbkFubm90YXRpb25zLnB1c2gobyl9ZnVuY3Rpb24gRVd0KHQsZSxuLGkscil7bGV0IG89bmV3IHZXdChlLG4saSxyLCExKTt0Lm91dEFubm90YXRpb25zLnB1c2gobyl9Y2xhc3MgVFd0IGV4dGVuZHMgd1d0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCk7bGV0IG49dC5tZXRhZ3JhcGguZ3JhcGgoKTt0aGlzLmNvcmVHcmFwaD1vV3Qobi5uYW1lLFVHdC5DT1JFLGUpLHRoaXMuaW5FeHRyYWN0Qm94PXt3aWR0aDowLGhlaWdodDowfSx0aGlzLm91dEV4dHJhY3RCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMubGlicmFyeUZ1bmN0aW9uc0JveD17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5pc29sYXRlZEluRXh0cmFjdD1bXSx0aGlzLmlzb2xhdGVkT3V0RXh0cmFjdD1bXSx0aGlzLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0PVtdfX1mdW5jdGlvbiBDV3QodCxlKXt0LmNvcmVHcmFwaCYmKGZ1bmN0aW9uIG4odCxlKXtTZS5leHBvcnRzLmVhY2godC5ub2RlcygpLChuPT57bGV0IGk9dC5ub2RlKG4pO2lmKGkuZXhwYW5kZWQ9ZT4xLGU+MClzd2l0Y2goaS5ub2RlLnR5cGUpe2Nhc2Ugakd0Lk1FVEE6Y2FzZSBqR3QuU0VSSUVTOkNXdChpLGUtMSl9fSkpfSkodC5jb3JlR3JhcGgsZSl9ZnVuY3Rpb24gQVd0KHQsZSxuKXtsZXQgaT10Lm5vZGUoZSkscj10Lm5vZGUobiksbz10LmVkZ2UoZSxuKTsoaS5ub2RlLmluY2x1ZGUhPT1HR3QuSU5DTFVERSYmci5ub2RlLmluY2x1ZGUhPT1HR3QuSU5DTFVERXx8aS5ub2RlLmluY2x1ZGU9PT1HR3QuRVhDTFVERXx8ci5ub2RlLmluY2x1ZGU9PT1HR3QuRVhDTFVERSkmJihFV3QoaSxyLm5vZGUscixvLGJXdC5TSE9SVENVVCksTVd0KHIsaS5ub2RlLGksbyxiV3QuU0hPUlRDVVQpLHQucmVtb3ZlRWRnZShlLG4pKX1mdW5jdGlvbiBrV3QodCxlLG4pe2xldCBpPXQuY29yZUdyYXBoLHI9aS5ub2RlKGUpO3IuaXNPdXRFeHRyYWN0PSEwLFNlLmV4cG9ydHMuZWFjaChpLnByZWRlY2Vzc29ycyhlKSwoKHQsbik9PntBV3QoaSx0LGUpfSkpLFNlLmV4cG9ydHMuZWFjaChpLnN1Y2Nlc3NvcnMoZSksKCh0LG4pPT57QVd0KGksZSx0KX0pKSwwPT09aS5uZWlnaGJvcnMoZSkubGVuZ3RoJiYoci5ub2RlLmluY2x1ZGU9R0d0LkVYQ0xVREUsdC5pc29sYXRlZE91dEV4dHJhY3QucHVzaChyKSxpLnJlbW92ZU5vZGUoZSkpfWZ1bmN0aW9uIExXdCh0LGUsbil7bGV0IGk9dC5jb3JlR3JhcGgscj1pLm5vZGUoZSk7ci5pc0luRXh0cmFjdD0hMCxTZS5leHBvcnRzLmVhY2goaS5zdWNjZXNzb3JzKGUpLCgodCxuKT0+e0FXdChpLGUsdCl9KSksU2UuZXhwb3J0cy5lYWNoKGkucHJlZGVjZXNzb3JzKGUpLCgodCxuKT0+e0FXdChpLHQsZSl9KSksMD09PWkubmVpZ2hib3JzKGUpLmxlbmd0aCYmKHIubm9kZS5pbmNsdWRlPUdHdC5FWENMVURFLHQuaXNvbGF0ZWRJbkV4dHJhY3QucHVzaChyKSxpLnJlbW92ZU5vZGUoZSkpfWZ1bmN0aW9uIFBXdCh0LGUpe2lmKHQudHlwZT09PWpHdC5PUCl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspaWYodC5vcD09PWVbbl0pcmV0dXJuITB9ZWxzZSBpZih0LnR5cGU9PT1qR3QuTUVUQSl7bGV0IG49dC5nZXRSb290T3AoKTtpZihuKWZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWlmKG4ub3A9PT1lW3RdKXJldHVybiEwfXJldHVybiExfWNvbnN0IE5XdD17YW5pbWF0aW9uOntkdXJhdGlvbjoyNTB9LGdyYXBoOnttZXRhOntub2RlU2VwOjUscmFua1NlcDoyNSxlZGdlU2VwOjV9LHNlcmllczp7bm9kZVNlcDo1LHJhbmtTZXA6MjUsZWRnZVNlcDo1fSxwYWRkaW5nOntwYWRkaW5nVG9wOjQwLHBhZGRpbmdMZWZ0OjIwfX0sc3Vic2NlbmU6e21ldGE6e3BhZGRpbmdUb3A6MTAscGFkZGluZ0JvdHRvbToxMCxwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAsbGFiZWxIZWlnaHQ6MjAsZXh0cmFjdFhPZmZzZXQ6MTUsZXh0cmFjdFlPZmZzZXQ6MjB9LHNlcmllczp7cGFkZGluZ1RvcDoxMCxwYWRkaW5nQm90dG9tOjEwLHBhZGRpbmdMZWZ0OjEwLHBhZGRpbmdSaWdodDoxMCxsYWJlbEhlaWdodDoxMH19LG5vZGVTaXplOnttZXRhOntyYWRpdXM6NSx3aWR0aDo2MCxtYXhMYWJlbFdpZHRoOjUyLGhlaWdodDpWTSgpLmRvbWFpbihbMSwyMDBdKS5yYW5nZShbMTUsNjBdKS5jbGFtcCghMCksZXhwYW5kQnV0dG9uUmFkaXVzOjN9LG9wOnt3aWR0aDoxNSxoZWlnaHQ6NixyYWRpdXM6MyxsYWJlbE9mZnNldDotOCxtYXhMYWJlbFdpZHRoOjMwfSxzZXJpZXM6e2V4cGFuZGVkOntyYWRpdXM6MTAsbGFiZWxPZmZzZXQ6MH0sdmVydGljYWw6e3dpZHRoOjE2LGhlaWdodDoxMyxsYWJlbE9mZnNldDotMTN9LGhvcml6b250YWw6e3dpZHRoOjI0LGhlaWdodDo4LHJhZGl1czoxMCxsYWJlbE9mZnNldDotMTB9fSxicmlkZ2U6e3dpZHRoOjIwLGhlaWdodDoyMCxyYWRpdXM6MixsYWJlbE9mZnNldDowfX0sc2hvcnRjdXRTaXplOntvcDp7d2lkdGg6MTAsaGVpZ2h0OjR9LG1ldGE6e3dpZHRoOjEyLGhlaWdodDo0LHJhZGl1czoxfSxzZXJpZXM6e3dpZHRoOjE0LGhlaWdodDo0fX0sYW5ub3RhdGlvbnM6e2luYm94V2lkdGg6NTAsb3V0Ym94V2lkdGg6NTAseE9mZnNldDoxMCx5T2Zmc2V0OjMsbGFiZWxPZmZzZXQ6MixtYXhMYWJlbFdpZHRoOjQwfSxjb25zdGFudDp7c2l6ZTp7d2lkdGg6NCxoZWlnaHQ6NH19LHNlcmllczp7bWF4U3RhY2tDb3VudDozLHBhcmFsbGVsU3RhY2tPZmZzZXRSYXRpbzouMix0b3dlclN0YWNrT2Zmc2V0UmF0aW86LjV9LG1pbmltYXA6e3NpemU6MTUwfX0sSVd0PTE0MDtmdW5jdGlvbiBSV3QodCl7dC5ub2RlLmlzR3JvdXBOb2RlJiYoZnVuY3Rpb24gZSh0KXtsZXQgZT10LmNvcmVHcmFwaC5ub2RlcygpLm1hcCgoZT0+dC5jb3JlR3JhcGgubm9kZShlKSkpLmNvbmNhdCh0Lmlzb2xhdGVkSW5FeHRyYWN0LHQuaXNvbGF0ZWRPdXRFeHRyYWN0LHQubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QpO1NlLmV4cG9ydHMuZWFjaChlLCh0PT57c3dpdGNoKHQubm9kZS50eXBlKXtjYXNlIGpHdC5PUDpTZS5leHBvcnRzLmV4dGVuZCh0LE5XdC5ub2RlU2l6ZS5vcCk7YnJlYWs7Y2FzZSBqR3QuQlJJREdFOlNlLmV4cG9ydHMuZXh0ZW5kKHQsTld0Lm5vZGVTaXplLmJyaWRnZSk7YnJlYWs7Y2FzZSBqR3QuTUVUQTp0LmV4cGFuZGVkP1JXdCh0KTooU2UuZXhwb3J0cy5leHRlbmQodCxOV3Qubm9kZVNpemUubWV0YSksdC5oZWlnaHQ9Tld0Lm5vZGVTaXplLm1ldGEuaGVpZ2h0KHQubm9kZS5jYXJkaW5hbGl0eSkpO2JyZWFrO2Nhc2Ugakd0LlNFUklFUzp0LmV4cGFuZGVkPyhTZS5leHBvcnRzLmV4dGVuZCh0LE5XdC5ub2RlU2l6ZS5zZXJpZXMuZXhwYW5kZWQpLFJXdCh0KSk6U2UuZXhwb3J0cy5leHRlbmQodCx0Lm5vZGUuaGFzTm9uQ29udHJvbEVkZ2VzP05XdC5ub2RlU2l6ZS5zZXJpZXMudmVydGljYWw6Tld0Lm5vZGVTaXplLnNlcmllcy5ob3Jpem9udGFsKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK3Qubm9kZS50eXBlKX10LmV4cGFuZGVkfHwoZnVuY3Rpb24gZSh0KXt0LmluYm94V2lkdGg9dC5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA/Tld0LmFubm90YXRpb25zLmluYm94V2lkdGg6MCx0Lm91dGJveFdpZHRoPXQub3V0QW5ub3RhdGlvbnMubGlzdC5sZW5ndGg+MD9OV3QuYW5ub3RhdGlvbnMub3V0Ym94V2lkdGg6MCx0LmNvcmVCb3gud2lkdGg9dC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0PXQuaGVpZ2h0LHQud2lkdGg9TWF0aC5tYXgodC5jb3JlQm94LndpZHRoK3QuaW5ib3hXaWR0aCt0Lm91dGJveFdpZHRoLDMqdC5kaXNwbGF5TmFtZS5sZW5ndGgpfSkodCksKGZ1bmN0aW9uIG4odCl7aWYodC5leHBhbmRlZClyZXR1cm47bGV0IGU9dC5pbkFubm90YXRpb25zLmxpc3Qsbj10Lm91dEFubm90YXRpb25zLmxpc3Q7U2UuZXhwb3J0cy5lYWNoKGUsKHQ9PnpXdCh0KSkpLFNlLmV4cG9ydHMuZWFjaChuLCh0PT56V3QodCkpKTtsZXQgaT1OV3QuYW5ub3RhdGlvbnMscj1TZS5leHBvcnRzLnJlZHVjZShlLCgoZSxuLHIpPT57bGV0IG89cj4wP2kueU9mZnNldDowO3JldHVybiBuLmR4PS0odC5jb3JlQm94LndpZHRoK24ud2lkdGgpLzItaS54T2Zmc2V0LG4uZHk9ZStvK24uaGVpZ2h0LzIsZStvK24uaGVpZ2h0fSksMCk7U2UuZXhwb3J0cy5lYWNoKGUsKHQ9Pnt0LmR5LT1yLzIsdC5sYWJlbE9mZnNldD1pLmxhYmVsT2Zmc2V0fSkpO2xldCBvPVNlLmV4cG9ydHMucmVkdWNlKG4sKChlLG4scik9PntsZXQgbz1yPjA/aS55T2Zmc2V0OjA7cmV0dXJuIG4uZHg9KHQuY29yZUJveC53aWR0aCtuLndpZHRoKS8yK2kueE9mZnNldCxuLmR5PWUrbytuLmhlaWdodC8yLGUrbytuLmhlaWdodH0pLDApO1NlLmV4cG9ydHMuZWFjaChuLCh0PT57dC5keS09by8yLHQubGFiZWxPZmZzZXQ9aS5sYWJlbE9mZnNldH0pKTtsZXQgYT1NYXRoLm1pbih0LmhlaWdodC8yLXQucmFkaXVzLHIvMik7YT1hPDA/MDphO2xldCBzPVZNKCkuZG9tYWluKFswLGUubGVuZ3RoLTFdKS5yYW5nZShbLWEsYV0pO1NlLmV4cG9ydHMuZWFjaChlLCgobixpKT0+e24ucG9pbnRzPVt7ZHg6bi5keCtuLndpZHRoLzIsZHk6bi5keX0se2R4Oi10LmNvcmVCb3gud2lkdGgvMixkeTplLmxlbmd0aD4xP3MoaSk6MH1dfSkpO2xldCBsPU1hdGgubWluKHQuaGVpZ2h0LzItdC5yYWRpdXMsby8yKTtsPWw8MD8wOmw7bGV0IGM9Vk0oKS5kb21haW4oWzAsbi5sZW5ndGgtMV0pLnJhbmdlKFstbCxsXSk7U2UuZXhwb3J0cy5lYWNoKG4sKChlLGkpPT57ZS5wb2ludHM9W3tkeDp0LmNvcmVCb3gud2lkdGgvMixkeTpuLmxlbmd0aD4xP2MoaSk6MH0se2R4OmUuZHgtZS53aWR0aC8yLGR5OmUuZHl9XX0pKSx0LmhlaWdodD1NYXRoLm1heCh0LmhlaWdodCxyLG8pfSkodCl9KSl9KSh0KSx0Lm5vZGUudHlwZT09PWpHdC5NRVRBPyhmdW5jdGlvbiBuKHQpe2xldCBlPU5XdC5zdWJzY2VuZS5tZXRhO1NlLmV4cG9ydHMuZXh0ZW5kKHQsZSksU2UuZXhwb3J0cy5leHRlbmQodC5jb3JlQm94LE9XdCh0LmNvcmVHcmFwaCxOV3QuZ3JhcGgubWV0YSkpO2xldCBuPXQuaXNvbGF0ZWRJbkV4dHJhY3QubGVuZ3RoP1NlLmV4cG9ydHMubWF4QnkodC5pc29sYXRlZEluRXh0cmFjdCwodD0+dC53aWR0aCkpLndpZHRoOm51bGw7dC5pbkV4dHJhY3RCb3gud2lkdGg9bnVsbCE9bj9uOjAsdC5pbkV4dHJhY3RCb3guaGVpZ2h0PVNlLmV4cG9ydHMucmVkdWNlKHQuaXNvbGF0ZWRJbkV4dHJhY3QsKCh0LG4saSk9PntsZXQgcj1pPjA/ZS5leHRyYWN0WU9mZnNldDowO3JldHVybiBuLng9MCxuLnk9dCtyK24uaGVpZ2h0LzIsdCtyK24uaGVpZ2h0fSksMCk7bGV0IGk9dC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoP1NlLmV4cG9ydHMubWF4QnkodC5pc29sYXRlZE91dEV4dHJhY3QsKHQ9PnQud2lkdGgpKS53aWR0aDpudWxsO3Qub3V0RXh0cmFjdEJveC53aWR0aD1udWxsIT1pP2k6MCx0Lm91dEV4dHJhY3RCb3guaGVpZ2h0PVNlLmV4cG9ydHMucmVkdWNlKHQuaXNvbGF0ZWRPdXRFeHRyYWN0LCgodCxuLGkpPT57bGV0IHI9aT4wP2UuZXh0cmFjdFlPZmZzZXQ6MDtyZXR1cm4gbi54PTAsbi55PXQrcituLmhlaWdodC8yLHQrcituLmhlaWdodH0pLDApO2xldCByPXQubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QubGVuZ3RoP1NlLmV4cG9ydHMubWF4QnkodC5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdCwodD0+dC53aWR0aCkpLndpZHRoOm51bGw7dC5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoPW51bGwhPXI/cjowLHQubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQ9U2UuZXhwb3J0cy5yZWR1Y2UodC5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdCwoKHQsbixpKT0+e2xldCByPWk+MD9lLmV4dHJhY3RZT2Zmc2V0OjA7cmV0dXJuIG4ueD0wLG4ueT10K3Irbi5oZWlnaHQvMix0K3Irbi5oZWlnaHR9KSwwKTtsZXQgbz0wO3QuaXNvbGF0ZWRJbkV4dHJhY3QubGVuZ3RoPjAmJm8rKyx0Lmlzb2xhdGVkT3V0RXh0cmFjdC5sZW5ndGg+MCYmbysrLHQubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QubGVuZ3RoPjAmJm8rKyx0LmNvcmVHcmFwaC5ub2RlQ291bnQoKT4wJiZvKys7bGV0IGE9bzw9MT8wOm8qTld0LnN1YnNjZW5lLm1ldGEuZXh0cmFjdFhPZmZzZXQ7Y29uc3Qgcz1NYXRoLm1heChJV3QsdC5pbkV4dHJhY3RCb3gud2lkdGgrdC5vdXRFeHRyYWN0Qm94LndpZHRoKTt0LmNvcmVCb3gud2lkdGgrPXMrYSt0LmxpYnJhcnlGdW5jdGlvbnNCb3gud2lkdGgrYSx0LmNvcmVCb3guaGVpZ2h0PWUubGFiZWxIZWlnaHQrTWF0aC5tYXgodC5pbkV4dHJhY3RCb3guaGVpZ2h0LHQuY29yZUJveC5oZWlnaHQsdC5saWJyYXJ5RnVuY3Rpb25zQm94LmhlaWdodCx0Lm91dEV4dHJhY3RCb3guaGVpZ2h0KSx0LndpZHRoPXQuY29yZUJveC53aWR0aCtlLnBhZGRpbmdMZWZ0K2UucGFkZGluZ1JpZ2h0LHQuaGVpZ2h0PXQucGFkZGluZ1RvcCt0LmNvcmVCb3guaGVpZ2h0K3QucGFkZGluZ0JvdHRvbX0pKHQpOnQubm9kZS50eXBlPT09akd0LlNFUklFUyYmKGZ1bmN0aW9uIGkodCl7bGV0IGU9dC5jb3JlR3JhcGgsbj1OV3Quc3Vic2NlbmUuc2VyaWVzO1NlLmV4cG9ydHMuZXh0ZW5kKHQsbiksU2UuZXhwb3J0cy5leHRlbmQodC5jb3JlQm94LE9XdCh0LmNvcmVHcmFwaCxOV3QuZ3JhcGguc2VyaWVzKSksU2UuZXhwb3J0cy5lYWNoKGUubm9kZXMoKSwodD0+e2Uubm9kZSh0KS5leGNsdWRlZD0hMX0pKSx0LndpZHRoPXQuY29yZUJveC53aWR0aCtuLnBhZGRpbmdMZWZ0K24ucGFkZGluZ1JpZ2h0LHQuaGVpZ2h0PXQuY29yZUJveC5oZWlnaHQrbi5wYWRkaW5nVG9wK24ucGFkZGluZ0JvdHRvbX0pKHQpfWZ1bmN0aW9uIE9XdCh0LGUpe1NlLmV4cG9ydHMuZXh0ZW5kKHQuZ3JhcGgoKSx7bm9kZXNlcDplLm5vZGVTZXAscmFua3NlcDplLnJhbmtTZXAsZWRnZXNlcDplLmVkZ2VTZXB9KTtsZXQgbj1bXTtpZihTZS5leHBvcnRzLmVhY2godC5ub2RlcygpLChlPT57dC5ub2RlKGUpLm5vZGUudHlwZT09PWpHdC5CUklER0V8fG4ucHVzaChlKX0pKSwhbi5sZW5ndGgpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjB9O2ZHdC5sYXlvdXQodCk7bGV0IGk9MS8wLHI9MS8wLG89LTEvMCxhPS0xLzA7cmV0dXJuIFNlLmV4cG9ydHMuZWFjaChuLChlPT57bGV0IG49dC5ub2RlKGUpLHM9LjUqbi53aWR0aCxsPW4ueC1zLGM9bi54K3M7aT1sPGk/bDppLG89Yz5vP2M6bztsZXQgdT0uNSpuLmhlaWdodCxoPW4ueS11LGQ9bi55K3U7cj1oPHI/aDpyLGE9ZD5hP2Q6YX0pKSxTZS5leHBvcnRzLmVhY2godC5lZGdlcygpLChlPT57bGV0IG49dC5lZGdlKGUpO2lmKG4uc3RydWN0dXJhbClyZXR1cm47bGV0IHM9dC5ub2RlKG4ubWV0YWVkZ2UudiksbD10Lm5vZGUobi5tZXRhZWRnZS53KTtpZigzPT09bi5wb2ludHMubGVuZ3RoJiYoZnVuY3Rpb24gYyh0KXtsZXQgZT1CV3QodFswXSx0WzFdKTtmb3IobGV0IG49MTtuPHQubGVuZ3RoLTE7bisrKXtsZXQgaT1CV3QodFtuXSx0W24rMV0pO2lmKE1hdGguYWJzKGktZSk+MSlyZXR1cm4hMTtlPWl9cmV0dXJuITB9KShuLnBvaW50cykpe2lmKG51bGwhPXMpe2xldCB0PXMuZXhwYW5kZWQ/cy54OkRXdChzKTtuLnBvaW50c1swXS54PXR9aWYobnVsbCE9bCl7bGV0IHQ9bC5leHBhbmRlZD9sLng6RFd0KGwpO24ucG9pbnRzWzJdLng9dH1uLnBvaW50cz1bbi5wb2ludHNbMF0sbi5wb2ludHNbMV1dfW51bGwhPWwmJihuLnBvaW50c1tuLnBvaW50cy5sZW5ndGgtMV09SFd0KG4ucG9pbnRzW24ucG9pbnRzLmxlbmd0aC0yXSxsKSksbnVsbCE9cyYmKG4ucG9pbnRzWzBdPUhXdChuLnBvaW50c1sxXSxzKSksU2UuZXhwb3J0cy5lYWNoKG4ucG9pbnRzLCh0PT57aT10Lng8aT90Lng6aSxvPXQueD5vP3QueDpvLHI9dC55PHI/dC55OnIsYT10Lnk+YT90Lnk6YX0pKX0pKSxTZS5leHBvcnRzLmVhY2godC5ub2RlcygpLChlPT57bGV0IG49dC5ub2RlKGUpO24ueC09aSxuLnktPXJ9KSksU2UuZXhwb3J0cy5lYWNoKHQuZWRnZXMoKSwoZT0+e1NlLmV4cG9ydHMuZWFjaCh0LmVkZ2UoZSkucG9pbnRzLCh0PT57dC54LT1pLHQueS09cn0pKX0pKSx7d2lkdGg6by1pLGhlaWdodDphLXJ9fWZ1bmN0aW9uIHpXdCh0KXtzd2l0Y2godC5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBiV3QuQ09OU1RBTlQ6U2UuZXhwb3J0cy5leHRlbmQodCxOV3QuY29uc3RhbnQuc2l6ZSk7YnJlYWs7Y2FzZSBiV3QuU0hPUlRDVVQ6aWYodC5ub2RlLnR5cGU9PT1qR3QuT1ApU2UuZXhwb3J0cy5leHRlbmQodCxOV3Quc2hvcnRjdXRTaXplLm9wKTtlbHNlIGlmKHQubm9kZS50eXBlPT09akd0Lk1FVEEpU2UuZXhwb3J0cy5leHRlbmQodCxOV3Quc2hvcnRjdXRTaXplLm1ldGEpO2Vsc2V7aWYodC5ub2RlLnR5cGUhPT1qR3QuU0VSSUVTKXRocm93IEVycm9yKCJJbnZhbGlkIG5vZGUgdHlwZTogIit0Lm5vZGUudHlwZSk7U2UuZXhwb3J0cy5leHRlbmQodCxOV3Quc2hvcnRjdXRTaXplLnNlcmllcyl9YnJlYWs7Y2FzZSBiV3QuU1VNTUFSWTpTZS5leHBvcnRzLmV4dGVuZCh0LE5XdC5jb25zdGFudC5zaXplKX19ZnVuY3Rpb24gRFd0KHQpe3JldHVybiB0LmV4cGFuZGVkP3QueDp0LngtdC53aWR0aC8yKyh0LmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg/dC5pbmJveFdpZHRoOjApK3QuY29yZUJveC53aWR0aC8yfWZ1bmN0aW9uIEJXdCh0LGUpe3JldHVybiAxODAqTWF0aC5hdGFuKChlLnktdC55KS8oZS54LXQueCkpL01hdGguUEl9ZnVuY3Rpb24gSFd0KHQsZSl7bGV0IG4saSxyPWUuZXhwYW5kZWQ/ZS54OkRXdChlKSxvPWUueSxhPXQueC1yLHM9dC55LW8sbD1lLmV4cGFuZGVkP2Uud2lkdGg6ZS5jb3JlQm94LndpZHRoLGM9ZS5leHBhbmRlZD9lLmhlaWdodDplLmNvcmVCb3guaGVpZ2h0O3JldHVybiBNYXRoLmFicyhzKSpsLzI+TWF0aC5hYnMoYSkqYy8yPyhzPDAmJihjPS1jKSxuPTA9PT1zPzA6Yy8yKmEvcyxpPWMvMik6KGE8MCYmKGw9LWwpLG49bC8yLGk9MD09PWE/MDpsLzIqcy9hKSx7eDpyK24seTpvK2l9fWNvbnN0IEZXdD14R3QsVld0PXZHdDtsZXQgVVd0PVt7YmFja2dyb3VuZF9jb2xvcjoiI0NDMkYyQyIsbGFiZWw6Ik5hTiJ9LHtiYWNrZ3JvdW5kX2NvbG9yOiIjRkY4RDAwIixsYWJlbDoiLeKIniJ9LHtiYWNrZ3JvdW5kX2NvbG9yOiIjRUFFQUVBIixsYWJlbDoiLSJ9LHtiYWNrZ3JvdW5kX2NvbG9yOiIjQTVBNUE1IixsYWJlbDoiMCJ9LHtiYWNrZ3JvdW5kX2NvbG9yOiIjMjYyNjI2IixsYWJlbDoiKyJ9LHtiYWNrZ3JvdW5kX2NvbG9yOiIjMDAzRUQ0IixsYWJlbDoiK+KIniJ9XTtmdW5jdGlvbiBqV3QodCxlLG4pe251bGwhPXQuYXR0cigidHJhbnNmb3JtIikmJih0PXQudHJhbnNpdGlvbigicG9zaXRpb24iKSksdC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlKyIsIituKyIpIil9ZnVuY3Rpb24gR1d0KHQsZSxuLGkscil7dC50cmFuc2l0aW9uKCkuYXR0cigieCIsZS1pLzIpLmF0dHIoInkiLG4tci8yKS5hdHRyKCJ3aWR0aCIsaSkuYXR0cigiaGVpZ2h0IixyKX1mdW5jdGlvbiBXV3QodCxlLG4saSxyKXt0LnRyYW5zaXRpb24oKS5hdHRyKCJjeCIsZSkuYXR0cigiY3kiLG4pLmF0dHIoInJ4IixpLzIpLmF0dHIoInJ5IixyLzIpfWZ1bmN0aW9uIHFXdCh0LGUpe3JldHVybiBlP3QudG9GaXhlZCgwKTpNYXRoLmFicyh0KT49MT90LnRvRml4ZWQoMSk6dC50b0V4cG9uZW50aWFsKDEpfWxldCBZV3Q9Y2xhc3MgZXh0ZW5kcyhlcih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXA9MCx0aGlzLmhlYWx0aFBpbGxFbnRyaWVzPVVXdH1yZWFkeSgpe3N1cGVyLnJlYWR5KCk7dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5Db250YWluZXIiKSxlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRmLWRhc2hib2FyZC1sYXlvdXQgLnNjcm9sbGJhciIpO3QmJmUmJih0LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGUuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpfV9oZWFsdGhQaWxsc0F2YWlsYWJsZSh0LGUpe3JldHVybiB0JiZlfV9jb21wdXRlVGVuc29yQ291bnRTdHJpbmcodCxlKXtyZXR1cm4gdD90W2VdLnRvRml4ZWQoMCk6IiJ9Z2V0IGhlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGUoKXt2YXIgdD10aGlzLnNlbGVjdGVkTm9kZTtpZih0aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZylyZXR1cm4gbnVsbDtpZighdClyZXR1cm4gbnVsbDtjb25zdCBlPXRoaXMubm9kZU5hbWVzVG9IZWFsdGhQaWxsc1t0XTtpZighZSlyZXR1cm4gbnVsbDtjb25zdCBuPWVbdGhpcy5hbGxTdGVwc01vZGVFbmFibGVkPzA6dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4XTtyZXR1cm4gbj9uLnZhbHVlLnNsaWNlKDIsOCk6bnVsbH1nZXQgX2N1cnJlbnRTdGVwRGlzcGxheVZhbHVlKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLGU9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4LG49dGhpcy5hcmVIZWFsdGhQaWxsc0xvYWRpbmc7aWYodGhpcy5hbGxTdGVwc01vZGVFbmFibGVkKXJldHVybiB0aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXAudG9GaXhlZCgwKTtpZihuKXJldHVybiAwO2ZvcihsZXQgbiBpbiB0KXJldHVybiB0W25dW2VdLnN0ZXAudG9GaXhlZCgwKTtyZXR1cm4gMH1nZXQgX2JpZ2dlc3RTdGVwRXZlclNlZW4oKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHM7Zm9yKGxldCBuIGluIHQpe3ZhciBlPXRbbl07cmV0dXJuIE1hdGgubWF4KHRoaXMuX2JpZ2dlc3RTdGVwRXZlclNlZW4sZVtlLmxlbmd0aC0xXS5zdGVwKX1yZXR1cm4gdGhpcy5fYmlnZ2VzdFN0ZXBFdmVyU2Vlbnx8MH1nZXQgX21heFN0ZXBJbmRleCgpe3ZhciB0PXRoaXMubm9kZU5hbWVzVG9IZWFsdGhQaWxscztmb3IobGV0IGUgaW4gdClyZXR1cm4gdFtlXS5sZW5ndGgtMTtyZXR1cm4gMH1faGFzRGVidWdnZXJOdW1lcmljQWxlcnRzKHQpe3JldHVybiB0JiZ0Lmxlbmd0aH1fdXBkYXRlQWxlcnRzTGlzdCgpe3ZhciB0PXRoaXMuZGVidWdnZXJOdW1lcmljQWxlcnRzLGU9dGhpcy4kJCgiI251bWVyaWMtYWxlcnRzLWJvZHkiKTtpZihlKXtlLmlubmVyVGV4dD0iIjtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO28uaW5uZXJUZXh0PShmPWkuZmlyc3RfdGltZXN0YW1wLChtPStuZXcgRGF0ZS0rbmV3IERhdGUoZi8xZTMpKTwzZTQ/Imp1c3Qgbm93IjptPDZlND9NYXRoLmZsb29yKG0vMWUzKSsiIHNlY29uZHMgYWdvIjptPDEyZTQ/ImEgbWludXRlIGFnbyI6bTwzNmU1P01hdGguZmxvb3IobS82ZTQpKyIgbWludXRlcyBhZ28iOjE9PU1hdGguZmxvb3IobS8zNmU1KT8iYW4gaG91ciBhZ28iOm08ODY0ZTU/TWF0aC5mbG9vcihtLzM2ZTUpKyIgaG91cnMgYWdvIjptPDE3MjhlNT8ieWVzdGVyZGF5IjpNYXRoLmZsb29yKG0vODY0ZTUpKyIgZGF5cyBhZ28iKSxvLmNsYXNzTGlzdC5hZGQoImZpcnN0LW9mZmVuc2UtdGQiKSxyLmFwcGVuZENoaWxkKG8pO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7YS5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3ItZGV2aWNlLXRkIik7dmFyIHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cy5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itc2VjdGlvbi13aXRoaW4tdGFibGUiKSxzLmlubmVyVGV4dD1pLnRlbnNvcl9uYW1lLHRoaXMuX2FkZE9wRXhwYW5zaW9uTGlzdGVuZXIocyxpLnRlbnNvcl9uYW1lKSxhLmFwcGVuZENoaWxkKHMpO3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuY2xhc3NMaXN0LmFkZCgiZGV2aWNlLXNlY3Rpb24td2l0aGluLXRhYmxlIiksbC5pbm5lclRleHQ9IigiK2kuZGV2aWNlX25hbWUrIikiLGEuYXBwZW5kQ2hpbGQobCksci5hcHBlbmRDaGlsZChhKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLmNsYXNzTGlzdC5hZGQoIm1pbmktaGVhbHRoLXBpbGwiKTt2YXIgdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2lmKHUuY2xhc3NMaXN0LmFkZCgibWluaS1oZWFsdGgtcGlsbC10ZCIpLHUuYXBwZW5kQ2hpbGQoYyksci5hcHBlbmRDaGlsZCh1KSxpLm5lZ19pbmZfZXZlbnRfY291bnQpe3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2guY2xhc3NMaXN0LmFkZCgibmVnYXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLGguaW5uZXJUZXh0PWkubmVnX2luZl9ldmVudF9jb3VudCxoLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkubmVnX2luZl9ldmVudF9jb3VudCsiIGV2ZW50cyB3aXRoIC3iiJ4iKSxjLmFwcGVuZENoaWxkKGgpfWlmKGkucG9zX2luZl9ldmVudF9jb3VudCl7dmFyIGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZC5jbGFzc0xpc3QuYWRkKCJwb3NpdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uIiksZC5pbm5lclRleHQ9aS5wb3NfaW5mX2V2ZW50X2NvdW50LGQuc2V0QXR0cmlidXRlKCJ0aXRsZSIsaS5wb3NfaW5mX2V2ZW50X2NvdW50KyIgZXZlbnRzIHdpdGggK+KIniIpLGMuYXBwZW5kQ2hpbGQoZCl9aWYoaS5uYW5fZXZlbnRfY291bnQpe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3AuY2xhc3NMaXN0LmFkZCgibmFuLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLHAuaW5uZXJUZXh0PWkubmFuX2V2ZW50X2NvdW50LHAuc2V0QXR0cmlidXRlKCJ0aXRsZSIsaS5uYW5fZXZlbnRfY291bnQrIiBldmVudHMgd2l0aCBOYU4iKSxjLmFwcGVuZENoaWxkKHApfVlpKGUpLmFwcGVuZENoaWxkKHIpfXZhciBmLG19fV9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKHQsZSl7dC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCgpPT57dmFyIHQsbj0oZnVuY3Rpb24gaSh0LGUsbil7Y29uc3QgaT1uLnNwbGl0KCIvIikscj1pW2kubGVuZ3RoLTFdLm1hdGNoKC8oLiopOlx3Ky8pOzI9PT1yLmxlbmd0aCYmKGlbaS5sZW5ndGgtMV09clsxXSk7bGV0IG89aVswXSxhPWUuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKTtmb3IobGV0IG49MTtuPGkubGVuZ3RoJiZhLm5vZGUudHlwZSE9PWpHdC5PUDtuKyspZS5idWlsZFN1YmhpZXJhcmNoeShvKSxhLmV4cGFuZGVkPSEwLHQuc2V0Tm9kZUV4cGFuZGVkKGEpLG8rPSIvIitpW25dLGE9ZS5nZXRSZW5kZXJOb2RlQnlOYW1lKG8pO3JldHVybiBhLm5vZGUubmFtZX0pKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzY2VuZSIpLHRoaXMucmVuZGVySGllcmFyY2h5LGUpLHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidGYtZ3JhcGgtaW5mbyNncmFwaC1pbmZvIik7ciYmKHQ9ci5zY3JvbGxIZWlnaHQtci5zY3JvbGxUb3ApO3ZhciBvPXRoaXMuc2VsZWN0ZWROb2RlO3RoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLG4pO3ZhciBhPSgpPT57ci5zY3JvbGxUb3A9ci5zY3JvbGxIZWlnaHQtdH07ciYmKG8/YSgpOndpbmRvdy5zZXRUaW1lb3V0KGEsMjApKX0pKX19O3ZhciBYV3Q7WVd0LnRlbXBsYXRlPV9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICBoMiB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtbGVnZW5kIHsKICAgICAgICBwYWRkaW5nOiAxNXB4OwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtbGVnZW5kIGgyIHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgewogICAgICAgIG1hcmdpbjogMTBweCAxMHB4IDEwcHggMDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC5jb2xvci1wcmV2aWV3IHsKICAgICAgICB3aWR0aDogMjZweDsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBtYXJnaW46IDAgMTBweCAwIDA7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAuY29sb3ItbGFiZWwsCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAudGVuc29yLWNvdW50IHsKICAgICAgICBjb2xvcjogIzc3NzsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgICAgICBsaW5lLWhlaWdodDogMjZweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLnRlbnNvci1jb3VudCB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CgogICAgICAjaGVhbHRoLXBpbGwtc3RlcC1zbGlkZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbjogMCAwIDAgLTE1cHg7CiAgICAgICAgLyogMzEgY29tZXMgZnJvbSBhZGRpbmcgYSBwYWRkaW5nIG9mIDE1cHggZnJvbSBib3RoIHNpZGVzIG9mIHRoZSBwYXBlci1zbGlkZXIsIHN1YnRyYWN0aW5nCiAgICogMXB4IHNvIHRoYXQgdGhlIHNsaWRlciB3aWR0aCBhbGlnbnMgd2l0aCB0aGUgaW1hZ2UgKHRoZSBsYXN0IHNsaWRlciBtYXJrZXIgdGFrZXMgdXAgMXB4KSwKICAgKiBhbmQgYWRkaW5nIDJweCB0byBhY2NvdW50IGZvciBhIGJvcmRlciBvZiAxcHggb24gYm90aCBzaWRlcyBvZiB0aGUgaW1hZ2UuIDMwIC0gMSArIDIuCiAgICogQXBwYXJlbnRseSwgdGhlIHBhcGVyLXNsaWRlciBsYWNrcyBhIG1peGluIGZvciB0aG9zZSBwYWRkaW5nIHZhbHVlcy4gKi8KICAgICAgICB3aWR0aDogY2FsYygxMDAlICsgMzFweCk7CiAgICAgIH0KCiAgICAgICNoZWFsdGgtcGlsbHMtbG9hZGluZy1zcGlubmVyIHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgfQoKICAgICAgI2hlYWx0aC1waWxsLXN0ZXAtbnVtYmVyLWlucHV0IHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LWhlaWdodDogNDAwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZSB7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlIHRkIHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUgLmZpcnN0LW9mZmVuc2UtdGQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLmZpcnN0LW9mZmVuc2UtdGQgewogICAgICAgIHdpZHRoOiA4MHB4OwogICAgICB9CgogICAgICAudGVuc29yLWRldmljZS10ZCB7CiAgICAgICAgbWF4LXdpZHRoOiAxNDBweDsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KCiAgICAgIC50ZW5zb3Itc2VjdGlvbi13aXRoaW4tdGFibGUgewogICAgICAgIGNvbG9yOiAjMjY2MjM2OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIC50ZW5zb3Itc2VjdGlvbi13aXRoaW4tdGFibGU6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5kZXZpY2Utc2VjdGlvbi13aXRoaW4tdGFibGUgewogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAubWluaS1oZWFsdGgtcGlsbCB7CiAgICAgICAgd2lkdGg6IDEzMHB4OwogICAgICB9CgogICAgICAubWluaS1oZWFsdGgtcGlsbCA+IGRpdiB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQoKICAgICAgI2V2ZW50LWNvdW50cy10aCB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMTBweDsKICAgICAgfQoKICAgICAgLm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigyNTUsIDE0MSwgMCk7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5wb3NpdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMCwgNjIsIDIxMik7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uYW4tbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMjA0LCA0NywgNDQpOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICB9CgogICAgICAubmVnYXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiwKICAgICAgLnBvc2l0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24sCiAgICAgIC5uYW4tbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uIHsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1hcmdpbjogMCAwIDAgMTBweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5uby1udW1lcmljLWFsZXJ0cy1ub3RpZmljYXRpb24gewogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxwYXBlci1tYXRlcmlhbCBlbGV2YXRpb249IjEiIGNsYXNzPSJjYXJkIGhlYWx0aC1waWxsLWxlZ2VuZCI+CiAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj4KICAgICAgICBFbmFibGUgYWxsIChub3QganVzdCBzYW1wbGVkKSBzdGVwcy4gUmVxdWlyZXMgc2xvdyBkaXNrIHJlYWQuCiAgICAgIDwvZGl2PgogICAgICA8cGFwZXItdG9nZ2xlLWJ1dHRvbgogICAgICAgIGlkPSJlbmFibGVBbGxTdGVwc01vZGVUb2dnbGUiCiAgICAgICAgY2hlY2tlZD0ie3thbGxTdGVwc01vZGVFbmFibGVkfX0iCiAgICAgID4KICAgICAgPC9wYXBlci10b2dnbGUtYnV0dG9uPgogICAgICA8aDI+CiAgICAgICAgU3RlcCBvZiBIZWFsdGggUGlsbHM6CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2FsbFN0ZXBzTW9kZUVuYWJsZWRdXSI+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgICBpZD0iaGVhbHRoLXBpbGwtc3RlcC1udW1iZXItaW5wdXQiCiAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgbWF4PSJbW19iaWdnZXN0U3RlcEV2ZXJTZWVuXV0iCiAgICAgICAgICAgIHZhbHVlPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXA6OmlucHV0fX0iCiAgICAgICAgICAvPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFhbGxTdGVwc01vZGVFbmFibGVkXV0iPgogICAgICAgICAgW1tfY3VycmVudFN0ZXBEaXNwbGF5VmFsdWVdXQogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHBhcGVyLXNwaW5uZXItbGl0ZQogICAgICAgICAgYWN0aXZlCiAgICAgICAgICBoaWRkZW4kPSJbWyFhcmVIZWFsdGhQaWxsc0xvYWRpbmddXSIKICAgICAgICAgIGlkPSJoZWFsdGgtcGlsbHMtbG9hZGluZy1zcGlubmVyIgogICAgICAgID48L3BhcGVyLXNwaW5uZXItbGl0ZT4KICAgICAgPC9oMj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2FsbFN0ZXBzTW9kZUVuYWJsZWRdXSI+CiAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIgogICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICAgIG1heD0iW1tfYmlnZ2VzdFN0ZXBFdmVyU2Vlbl1dIgogICAgICAgICAgc25hcHMKICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICB2YWx1ZT0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWFsbFN0ZXBzTW9kZUVuYWJsZWRdXSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19tYXhTdGVwSW5kZXhdXSI+CiAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgIGlkPSJoZWFsdGgtcGlsbC1zdGVwLXNsaWRlciIKICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIKICAgICAgICAgICAgbWF4PSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgc25hcHMKICAgICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgICAgdmFsdWU9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxoMj4KICAgICAgICBIZWFsdGggUGlsbAogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlXV0iPgogICAgICAgICAgQ291bnRzIGZvciBTZWxlY3RlZCBOb2RlCiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWhlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGVdXSI+CiAgICAgICAgICBMZWdlbmQKICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2gyPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2hlYWx0aFBpbGxFbnRyaWVzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWx0aC1waWxsLWVudHJ5Ij4KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9ImNvbG9yLXByZXZpZXciCiAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOltbaXRlbS5iYWNrZ3JvdW5kX2NvbG9yXV0iCiAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sYWJlbCI+W1tpdGVtLmxhYmVsXV08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRlbnNvci1jb3VudCI+CiAgICAgICAgICAgIFtbX2NvbXB1dGVUZW5zb3JDb3VudFN0cmluZyhoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlLAogICAgICAgICAgICBpbmRleCldXQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgaGlkZGVuJD0iW1shX2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyhkZWJ1Z2dlck51bWVyaWNBbGVydHMpXV0iPgogICAgICAgIDxoMiBpZD0ibnVtZXJpYy1hbGVydHMtaGVhZGVyIj5OdW1lcmljIEFsZXJ0czwvaDI+CiAgICAgICAgPHA+QWxlcnRzIGFyZSBzb3J0ZWQgZnJvbSB0b3AgdG8gYm90dG9tIGJ5IGluY3JlYXNpbmcgdGltZXN0YW1wLjwvcD4KICAgICAgICA8ZGl2IGlkPSJudW1lcmljLWFsZXJ0cy10YWJsZS1jb250YWluZXIiPgogICAgICAgICAgPHRhYmxlIGlkPSJudW1lcmljLWFsZXJ0cy10YWJsZSI+CiAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGg+Rmlyc3QgT2ZmZW5zZTwvdGg+CiAgICAgICAgICAgICAgICA8dGg+VGVuc29yIChEZXZpY2UpPC90aD4KICAgICAgICAgICAgICAgIDx0aCBpZD0iZXZlbnQtY291bnRzLXRoIj5FdmVudCBDb3VudHM8L3RoPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgIDx0Ym9keSBpZD0ibnVtZXJpYy1hbGVydHMtYm9keSI+PC90Ym9keT4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUKICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgIGlmPSJbWyFfaGFzRGVidWdnZXJOdW1lcmljQWxlcnRzKGRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyldXSIKICAgICAgPgogICAgICAgIDxwIGNsYXNzPSJuby1udW1lcmljLWFsZXJ0cy1ub3RpZmljYXRpb24iPgogICAgICAgICAgTm8gbnVtZXJpYyBhbGVydHMgc28gZmFyLiBUaGF0IGlzIGxpa2VseSBnb29kLiBBbGVydHMgaW5kaWNhdGUgdGhlCiAgICAgICAgICBwcmVzZW5jZSBvZiBOYU4gb3IgKCsvLSkgSW5maW5pdHkgdmFsdWVzLCB3aGljaCBtYXkgYmUgY29uY2VybmluZy4KICAgICAgICA8L3A+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3BhcGVyLW1hdGVyaWFsPgogIGAsdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIseVd0KV0sWVd0LnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFlXdC5wcm90b3R5cGUsImRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxZV3QucHJvdG90eXBlLCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxZV3QucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxZV3QucHJvdG90eXBlLCJzcGVjaWZpY0hlYWx0aFBpbGxTdGVwIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxZV3QucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFlXdC5wcm90b3R5cGUsImhpZ2hsaWdodGVkTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWVd0LnByb3RvdHlwZSwic2VsZWN0ZWROb2RlSW5jbHVkZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWVd0LnByb3RvdHlwZSwiYXJlSGVhbHRoUGlsbHNMb2FkaW5nIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxZV3QucHJvdG90eXBlLCJoZWFsdGhQaWxsRW50cmllcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFlXdC5wcm90b3R5cGUsImFsbFN0ZXBzTW9kZUVuYWJsZWQiLHZvaWQgMCksdChbcygibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJzZWxlY3RlZE5vZGUiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwiYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiksZSgiZGVzaWduOnR5cGUiLEFycmF5KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxZV3QucHJvdG90eXBlLCJoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlIixudWxsKSx0KFtzKCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsImFsbFN0ZXBzTW9kZUVuYWJsZWQiLCJzcGVjaWZpY0hlYWx0aFBpbGxTdGVwIiwiYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiksZSgiZGVzaWduOnR5cGUiLE9iamVjdCksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sWVd0LnByb3RvdHlwZSwiX2N1cnJlbnRTdGVwRGlzcGxheVZhbHVlIixudWxsKSx0KFtzKCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiksZSgiZGVzaWduOnR5cGUiLE51bWJlciksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sWVd0LnByb3RvdHlwZSwiX2JpZ2dlc3RTdGVwRXZlclNlZW4iLG51bGwpLHQoW3MoIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiKSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxZV3QucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKSx0KFthKCJkZWJ1Z2dlck51bWVyaWNBbGVydHMiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFlXdC5wcm90b3R5cGUsIl91cGRhdGVBbGVydHNMaXN0IixudWxsKSxZV3Q9dChbaSgidGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkIildLFlXdCksKGZ1bmN0aW9uKHQpe3QuQ09OU1Q9IkNPTlNUIix0Lk1FVEE9Ik1FVEEiLHQuT1A9Ik9QIix0LlNFUklFUz0iU0VSSUVTIix0LlNVTU1BUlk9IlNVTU1BUlkifSkoWFd0fHwoWFd0PXt9KSk7bGV0ICRXdD1jbGFzcyBleHRlbmRzKGVyKGlsKHllKSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnZlcnRpY2FsPSExLHRoaXMuZmlsbE92ZXJyaWRlPW51bGwsdGhpcy5zdHJva2VPdmVycmlkZT1udWxsLHRoaXMuaGVpZ2h0PTIwLHRoaXMuZmFkZWQ9ITF9Z2V0U3ZnRGVmaW5hYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLiQuc3ZnRGVmc31nZXQgX2ZpbGwoKXt2YXIgdD10aGlzLmZpbGxPdmVycmlkZTtpZihudWxsIT10KXJldHVybiB0O3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2UgWFd0Lk1FVEE6cmV0dXJuIHBXdC5ERUZBVUxUX0ZJTEw7Y2FzZSBYV3QuU0VSSUVTOnJldHVybiJ3aGl0ZSI7ZGVmYXVsdDpyZXR1cm4iI2ZmZmZmZiJ9fWdldCBfc3Ryb2tlKCl7dmFyIHQ9dGhpcy5zdHJva2VPdmVycmlkZTtpZihudWxsIT10KXJldHVybiB0O3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2UgWFd0Lk1FVEE6cmV0dXJuIHBXdC5ERUZBVUxUX1NUUk9LRTtjYXNlIFhXdC5TRVJJRVM6ZGVmYXVsdDpyZXR1cm4iI2IyYjJiMiJ9fV9pc1R5cGUodCxlKXtyZXR1cm4gdD09PWV9X2ZhZGVkQ2xhc3ModCxlKXtyZXR1cm4gdD8iZmFkZWQtIitlOiIifX07JFd0LnRlbXBsYXRlPV9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1zaXplOiAwOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSBzdmcgewogICAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCB7CiAgICAgICAgZmlsbDogdXJsKCNyZWN0SGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtZWxsaXBzZSB7CiAgICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCwKICAgICAgLmZhZGVkLWVsbGlwc2UsCiAgICAgIC5mYWRlZC1zZXJpZXMgewogICAgICAgIHN0cm9rZTogdmFyKC0tdGItZ3JhcGgtZmFkZWQpICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgI3JlY3RIYXRjaCBsaW5lLAogICAgICAjZWxsaXBzZUhhdGNoIGxpbmUgewogICAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogd2hpdGU7CiAgICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+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+CiAgYCx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSwkV3QucHJvdG90eXBlLCJ0eXBlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJFd0LnByb3RvdHlwZSwidmVydGljYWwiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sJFd0LnByb3RvdHlwZSwiZmlsbE92ZXJyaWRlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLCRXdC5wcm90b3R5cGUsInN0cm9rZU92ZXJyaWRlIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLCRXdC5wcm90b3R5cGUsImhlaWdodCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLCRXdC5wcm90b3R5cGUsImZhZGVkIix2b2lkIDApLHQoW3MoInR5cGUiLCJmaWxsT3ZlcnJpZGUiKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSwkV3QucHJvdG90eXBlLCJfZmlsbCIsbnVsbCksdChbcygidHlwZSIsInN0cm9rZU92ZXJyaWRlIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sJFd0LnByb3RvdHlwZSwiX3N0cm9rZSIsbnVsbCksJFd0PXQoW2koInRmLWdyYXBoLWljb24iKV0sJFd0KTt2YXIgS1d0PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGdldCBHcmFwaEljb25UeXBlKCl7cmV0dXJuIFhXdH19KTtmdW5jdGlvbiBaV3QodCxlKXtjb25zdCBuPXQuZ2V0Q29udGV4dE1lbnUoKSxpPVN1KHQuZ2V0Q29udGV4dE1lbnUoKSk7cmV0dXJuIGZ1bmN0aW9uKHIsbyl7bGV0IGE9dXU7Y29uc3Qgcz0oZnVuY3Rpb24gbCh0KXtsZXQgZT0wLG49MCxpPXQ7Zm9yKDtpJiZpLm9mZnNldExlZnQ+PTAmJmkub2Zmc2V0VG9wPj0wOyllKz1pLm9mZnNldExlZnQtaS5zY3JvbGxMZWZ0LG4rPWkub2Zmc2V0VG9wLWkuc2Nyb2xsVG9wLGk9aS5vZmZzZXRQYXJlbnQ7cmV0dXJue2xlZnQ6ZSx0b3A6bn19KSh0KTtmdW5jdGlvbiBjKHQpe3QmJnQuY29tcG9zZWRQYXRoKCkuaW5jbHVkZXMobil8fChpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixjLHtjYXB0dXJlOiEwfSkpfWkuc3R5bGUoImRpc3BsYXkiLCJibG9jayIpLnN0eWxlKCJsZWZ0IixhLmNsaWVudFgtcy5sZWZ0KzErInB4Iikuc3R5bGUoInRvcCIsYS5jbGllbnRZLXMudG9wKzErInB4IiksYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGMse2NhcHR1cmU6ITB9KSxpLmh0bWwoIiIpLGkuYXBwZW5kKCJ1bCIpLnNlbGVjdEFsbCgibGkiKS5kYXRhKGUpLmVudGVyKCkuYXBwZW5kKCJsaSIpLm9uKCJjbGljayIsKCh0LGUpPT57dC5hY3Rpb24odGhpcyxyLG8pLGMoKX0pKS5odG1sKChmdW5jdGlvbih0KXtyZXR1cm4gdC50aXRsZShyKX0pKX19bGV0IEpXdD1hRSgpLmRvbWFpbihbTUd0LDEyXSkucmFuZ2UoWyJzbWFsbCIsIm1lZGl1bSIsImxhcmdlIiwieGxhcmdlIl0pO2Z1bmN0aW9uIFFXdCh0KXtyZXR1cm4gdC52KyItLSIrdC53fWZ1bmN0aW9uIHRxdCh0LGUpe2xldCBuPWUuZ2V0Tm9kZUJ5TmFtZSh0LnYpO2lmKG51bGw9PW4ub3V0cHV0U2hhcGVzfHxTZS5leHBvcnRzLmlzRW1wdHkobi5vdXRwdXRTaGFwZXMpKXJldHVybiBudWxsO2xldCBpPW4ub3V0cHV0U2hhcGVzW3Qub3V0cHV0VGVuc29yS2V5XTtyZXR1cm4gbnVsbD09aT9udWxsOjA9PT1pLmxlbmd0aD8ic2NhbGFyIjppLm1hcCgodD0+LTE9PT10PyI/Ijp0KSkuam9pbigiw5ciKX1mdW5jdGlvbiBlcXQodCxlKXtyZXR1cm4gZS5lZGdlTGFiZWxGdW5jdGlvbj9lLmVkZ2VMYWJlbEZ1bmN0aW9uKHQsZSk6dC5iYXNlRWRnZUxpc3QubGVuZ3RoPjE/dC5iYXNlRWRnZUxpc3QubGVuZ3RoKyIgdGVuc29ycyI6dHF0KHQuYmFzZUVkZ2VMaXN0WzBdLGUpfWZ1bmN0aW9uIG5xdCh0LGUsbil7Y29uc3QgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoYkd0LCJwYXRoIik7Zm9yKGxldCByPTE7cjx0Lmxlbmd0aDtyKyspaWYoaS5zZXRBdHRyaWJ1dGUoImQiLG4odC5zbGljZSgwLHIpKSksaS5nZXRUb3RhbExlbmd0aCgpPmUpcmV0dXJuIHItMTtyZXR1cm4gdC5sZW5ndGgtMX1mdW5jdGlvbiBpcXQodCxlLG4pe2xldCBpPXVMKCkueCgodD0+dC54KSkueSgodD0+dC55KSkscj1TdShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpKS5hdHRyKCJkIixpKHQpKSxvPStlLmF0dHIoIm1hcmtlcldpZHRoIiksYT1lLmF0dHIoInZpZXdCb3giKS5zcGxpdCgiICIpLm1hcChOdW1iZXIpLHM9YVsyXS1hWzBdLGw9K2UuYXR0cigicmVmWCIpLGM9ci5ub2RlKCk7aWYobil7Y29uc3QgZT1vKigxLWwvcyksbj1jLmdldFBvaW50QXRMZW5ndGgoZSkscj1ucXQodCxlLGkpO3JldHVybiB0W3ItMV09e3g6bi54LHk6bi55fSx0LnNsaWNlKHItMSl9e2NvbnN0IGU9MS1sL3Msbj1jLmdldFRvdGFsTGVuZ3RoKCktbyplLHI9Yy5nZXRQb2ludEF0TGVuZ3RoKG4pLGE9bnF0KHQsbixpKTtyZXR1cm4gdFthXT17eDpyLngseTpyLnl9LHQuc2xpY2UoMCxhKzEpfX1mdW5jdGlvbiBycXQodCxlLG4saSl7aT1pfHx2R3QuRWRnZS5MSU5FLGUubGFiZWwmJmUubGFiZWwuc3RydWN0dXJhbCYmKGkrPSIgIit2R3QuRWRnZS5TVFJVQ1RVUkFMKSxlLmxhYmVsJiZlLmxhYmVsLm1ldGFlZGdlJiZlLmxhYmVsLm1ldGFlZGdlLm51bVJlZkVkZ2VzJiYoaSs9IiAiK3ZHdC5FZGdlLlJFRkVSRU5DRV9FREdFKSxuLmhhbmRsZUVkZ2VTZWxlY3RlZCYmKGkrPSIgIit2R3QuRWRnZS5TRUxFQ1RBQkxFKTtsZXQgcixvPSJwYXRoXyIrUVd0KGUpO2lmKG4ucmVuZGVySGllcmFyY2h5LmVkZ2VXaWR0aEZ1bmN0aW9uKXI9bi5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoRnVuY3Rpb24oZSxpKTtlbHNle2xldCB0PTE7bnVsbCE9ZS5sYWJlbCYmbnVsbCE9ZS5sYWJlbC5tZXRhZWRnZSYmKHQ9ZS5sYWJlbC5tZXRhZWRnZS50b3RhbFNpemUpLHI9bi5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoU2l6ZWRCYXNlZFNjYWxlKHQpfWxldCBhPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLG8pLmF0dHIoImNsYXNzIixpKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyKyJweCIpO2lmKGUubGFiZWwmJmUubGFiZWwubWV0YWVkZ2UpaWYoZS5sYWJlbC5tZXRhZWRnZS5udW1SZWZFZGdlcyl7Y29uc3QgdD1gcmVmZXJlbmNlLWFycm93aGVhZC0ke0pXdChyKX1gO2Euc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHt0fSlgKSxlLmxhYmVsLnN0YXJ0TWFya2VySWQ9dH1lbHNle2NvbnN0IHQ9YGRhdGFmbG93LWFycm93aGVhZC0ke0pXdChyKX1gO2Euc3R5bGUoIm1hcmtlci1lbmQiLGB1cmwoIyR7dH0pYCksZS5sYWJlbC5lbmRNYXJrZXJJZD10fWlmKG51bGw9PWUubGFiZWx8fG51bGw9PWUubGFiZWwubWV0YWVkZ2UpcmV0dXJuO2xldCBzPWVxdChlLmxhYmVsLm1ldGFlZGdlLG4ucmVuZGVySGllcmFyY2h5KTtudWxsIT1zJiZ0LmFwcGVuZCgidGV4dCIpLmFwcGVuZCgidGV4dFBhdGgiKS5hdHRyKCJ4bGluazpocmVmIiwiIyIrbykuYXR0cigic3RhcnRPZmZzZXQiLCI1MCUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLnRleHQocyl9bGV0IG9xdD11TCgpLmN1cnZlKCRMKS54KCh0PT50LngpKS55KCh0PT50LnkpKTt2YXIgYXF0O2Z1bmN0aW9uIHNxdCh0LGUsbil7bGV0IGk9d0d0KHQsImciLHZHdC5Ob2RlLkNPTlRBSU5FUikuc2VsZWN0QWxsKChmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXN9KSkuZGF0YShlLCh0PT50Lm5vZGUubmFtZSsiOiIrdC5ub2RlLnR5cGUpKTtyZXR1cm4gaS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImRhdGEtbmFtZSIsKHQ9PnQubm9kZS5uYW1lKSkuZWFjaCgoZnVuY3Rpb24odCl7bGV0IGU9U3UodGhpcyk7bi5hZGROb2RlR3JvdXAodC5ub2RlLm5hbWUsZSl9KSkubWVyZ2UoaSkuYXR0cigiY2xhc3MiLCh0PT52R3QuTm9kZS5HUk9VUCsiICIreXF0KHQpKSkuZWFjaCgoZnVuY3Rpb24odCl7bGV0IGU9U3UodGhpcyk7QXF0KHdHdChlLCJnIix2R3QuQW5ub3RhdGlvbi5JTkJPWCksdC5pbkFubm90YXRpb25zLHQsbiksQXF0KHdHdChlLCJnIix2R3QuQW5ub3RhdGlvbi5PVVRCT1gpLHQub3V0QW5ub3RhdGlvbnMsdCxuKTtsZXQgaT1fcXQoZSx0LHZHdC5Ob2RlLlNIQVBFKTt0Lm5vZGUuaXNHcm91cE5vZGUmJihmdW5jdGlvbiByKHQsZSxuKXtsZXQgaT13R3QodCwiZyIsdkd0Lk5vZGUuQlVUVE9OX0NPTlRBSU5FUik7d0d0KGksImNpcmNsZSIsdkd0Lk5vZGUuQlVUVE9OX0NJUkNMRSksd0d0KGksInBhdGgiLHZHdC5Ob2RlLkVYUEFORF9CVVRUT04pLmF0dHIoImQiLCJNMCwtMi4yIFYyLjIgTS0yLjIsMCBIMi4yIiksd0d0KGksInBhdGgiLHZHdC5Ob2RlLkNPTExBUFNFX0JVVFRPTikuYXR0cigiZCIsIk0tMi4yLDAgSDIuMiIpLGkub24oImNsaWNrIiwodD0+e3V1LnN0b3BQcm9wYWdhdGlvbigpLG4uZmlyZSgibm9kZS10b2dnbGUtZXhwYW5kIix7bmFtZTp0Lm5vZGUubmFtZX0pfSkpLChmdW5jdGlvbiByKHQsZSl7bGV0IG49RFd0KGUpKyhlLmV4cGFuZGVkP2Uud2lkdGg6ZS5jb3JlQm94LndpZHRoKS8yLTYsaT1lLnktKGUuZXhwYW5kZWQ/ZS5oZWlnaHQ6ZS5jb3JlQm94LmhlaWdodCkvMis2O2Uubm9kZS50eXBlIT09akd0LlNFUklFU3x8ZS5leHBhbmRlZHx8KG4rPTEwLGktPTIpO2xldCByPSJ0cmFuc2xhdGUoIituKyIsIitpKyIpIjt0LnNlbGVjdEFsbCgicGF0aCIpLnRyYW5zaXRpb24oKS5hdHRyKCJ0cmFuc2Zvcm0iLHIpLHQuc2VsZWN0KCJjaXJjbGUiKS50cmFuc2l0aW9uKCkuYXR0cih7Y3g6bixjeTppLHI6Tld0Lm5vZGVTaXplLm1ldGEuZXhwYW5kQnV0dG9uUmFkaXVzfSl9KShpLGUpfSkoaSx0LG4pLGNxdChpLHQsbiksKGZ1bmN0aW9uIG8odCxlLG4pe2lmKGUubm9kZS5pc0dyb3VwTm9kZSl7aWYoZS5leHBhbmRlZClyZXR1cm4gTHF0KHQsZSxuLHZHdC5TdWJzY2VuZS5HUk9VUCk7Rld0KHQsImciLHZHdC5TdWJzY2VuZS5HUk9VUCkucmVtb3ZlKCl9fSkoZSx0LG4pLGNxdCgoZnVuY3Rpb24gYSh0LGUsbil7bGV0IGk9ZS5kaXNwbGF5TmFtZSxyPWUubm9kZS50eXBlPT09akd0Lk1FVEEmJiFlLmV4cGFuZGVkLG89d0d0KHQsInRleHQiLHZHdC5Ob2RlLkxBQkVMKSxhPW8ubm9kZSgpO2EucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChhKSxvLmF0dHIoImR5IiwiLjM1ZW0iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpO2xldCBzPTg7c3dpdGNoKGUubm9kZS50eXBlKXtjYXNlIGpHdC5NRVRBOnM9ZS5leHBhbmRlZD85Ojg7YnJlYWs7Y2FzZSBqR3QuT1A6cz02fWlmKHIpe2kubGVuZ3RoPm4ubWF4TWV0YW5vZGVMYWJlbExlbmd0aCYmKGk9aS5zdWJzdHIoMCxuLm1heE1ldGFub2RlTGFiZWxMZW5ndGgtMikrIuKApiIpO2xldCB0PShmdW5jdGlvbiBsKHQpe3JldHVybiBtcXR8fChtcXQ9Vk0oKS5kb21haW4oW3QubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udCx0Lm1heE1ldGFub2RlTGFiZWxMZW5ndGhdKS5yYW5nZShbdC5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemUsdC5taW5NZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemVdKS5jbGFtcCghMCkpLG1xdH0pKG4pO28uYXR0cigiZm9udC1zaXplIix0KGkubGVuZ3RoKSsicHgiKSxzPXQoaS5sZW5ndGgpfXJldHVybiBmcXQoby50ZXh0KGkpLGUubm9kZS50eXBlLHMsZSksb30pKGUsdCxuKSx0LG4sdC5ub2RlLnR5cGU9PT1qR3QuTUVUQSksd3F0KGUsdCxuKSwoZnVuY3Rpb24gcyh0LGUpe2xldCBuPUZXdCh0LCJnIix2R3QuTm9kZS5TSEFQRSksaT1EV3QoZSk7c3dpdGNoKGUubm9kZS50eXBlKXtjYXNlIGpHdC5PUDp7Y29uc3Qgcj1lLm5vZGU7U2UuZXhwb3J0cy5pc051bWJlcihyLmZ1bmN0aW9uSW5wdXRJbmRleCl8fFNlLmV4cG9ydHMuaXNOdW1iZXIoci5mdW5jdGlvbk91dHB1dEluZGV4KT8oZnVuY3Rpb24gcih0LGUsbixpLG8pe2NvbnN0IGE9by8yLHM9aS8yLGw9W1tlLG4tYV0sW2UrcyxuK2FdLFtlLXMsbithXV07dC50cmFuc2l0aW9uKCkuYXR0cigicG9pbnRzIixsLm1hcCgodD0+dC5qb2luKCIsIikpKS5qb2luKCIgIikpfSkoRld0KG4sInBvbHlnb24iKSxlLngsZS55LGUuY29yZUJveC53aWR0aCxlLmNvcmVCb3guaGVpZ2h0KTpXV3QoRld0KG4sImVsbGlwc2UiKSxpLGUueSxlLmNvcmVCb3gud2lkdGgsZS5jb3JlQm94LmhlaWdodCksZ3F0KHQsaSxlLnksZS5sYWJlbE9mZnNldCk7YnJlYWt9Y2FzZSBqR3QuTUVUQTp7bGV0IHI9bi5zZWxlY3RBbGwoInJlY3QiKTtlLmV4cGFuZGVkPyhHV3QocixlLngsZS55LGUud2lkdGgsZS5oZWlnaHQpLGxxdCh0LGUpLGdxdCh0LGksZS55LC1lLmhlaWdodC8yK2UubGFiZWxIZWlnaHQvMikpOihHV3QocixpLGUueSxlLmNvcmVCb3gud2lkdGgsZS5jb3JlQm94LmhlaWdodCksZ3F0KHQsaSxlLnksMCkpO2JyZWFrfWNhc2Ugakd0LlNFUklFUzp7bGV0IHI9Rld0KG4sInVzZSIpO2UuZXhwYW5kZWQ/KEdXdChyLGUueCxlLnksZS53aWR0aCxlLmhlaWdodCksbHF0KHQsZSksZ3F0KHQsaSxlLnksLWUuaGVpZ2h0LzIrZS5sYWJlbEhlaWdodC8yKSk6KEdXdChyLGksZS55LGUuY29yZUJveC53aWR0aCxlLmNvcmVCb3guaGVpZ2h0KSxncXQodCxpLGUueSxlLmxhYmVsT2Zmc2V0KSk7YnJlYWt9Y2FzZSBqR3QuQlJJREdFOkdXdChGV3QobiwicmVjdCIpLGUueCxlLnksZS53aWR0aCxlLmhlaWdodCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSl9fSkoZSx0KX0pKSxpLmV4aXQoKS5lYWNoKChmdW5jdGlvbih0KXtuLnJlbW92ZU5vZGVHcm91cCh0Lm5vZGUubmFtZSk7bGV0IGU9U3UodGhpcyk7dC5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmUuc2VsZWN0KCIuIit2R3QuQW5ub3RhdGlvbi5JTkJPWCkuc2VsZWN0QWxsKCIuIit2R3QuQW5ub3RhdGlvbi5HUk9VUCkuZWFjaCgoZT0+e24ucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKGUsdCl9KSksdC5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wJiZlLnNlbGVjdCgiLiIrdkd0LkFubm90YXRpb24uT1VUQk9YKS5zZWxlY3RBbGwoIi4iK3ZHdC5Bbm5vdGF0aW9uLkdST1VQKS5lYWNoKChlPT57bi5yZW1vdmVBbm5vdGF0aW9uR3JvdXAoZSx0KX0pKX0pKS5yZW1vdmUoKSxpfWZ1bmN0aW9uIGxxdCh0LGUpe2xldCBuPWUueC1lLndpZHRoLzIrZS5wYWRkaW5nTGVmdCxpPWUueS1lLmhlaWdodC8yK2UucGFkZGluZ1RvcDtqV3QoRld0KHQsImciLHZHdC5TdWJzY2VuZS5HUk9VUCksbixpKX1mdW5jdGlvbiBjcXQodCxlLG4saSl7aWYoaSlyZXR1cm4gdm9pZCB0LmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO2xldCByPVpXdChuLHVxdChlLm5vZGUsbikpO3Qub24oImRibGNsaWNrIiwodD0+e24uZmlyZSgibm9kZS10b2dnbGUtZXhwYW5kIix7bmFtZTp0Lm5vZGUubmFtZX0pfSkpLm9uKCJtb3VzZW92ZXIiLCh0PT57bi5pc05vZGVFeHBhbmRlZCh0KXx8bi5maXJlKCJub2RlLWhpZ2hsaWdodCIse25hbWU6dC5ub2RlLm5hbWV9KX0pKS5vbigibW91c2VvdXQiLCh0PT57bi5pc05vZGVFeHBhbmRlZCh0KXx8bi5maXJlKCJub2RlLXVuaGlnaGxpZ2h0Iix7bmFtZTp0Lm5vZGUubmFtZX0pfSkpLm9uKCJjbGljayIsKHQ9Pnt1dS5zdG9wUHJvcGFnYXRpb24oKSxuLmZpcmUoIm5vZGUtc2VsZWN0Iix7bmFtZTp0Lm5vZGUubmFtZX0pfSkpLm9uKCJjb250ZXh0bWVudSIsKCh0LGUpPT57bi5maXJlKCJub2RlLXNlbGVjdCIse25hbWU6dC5ub2RlLm5hbWV9KSxyLmNhbGwodCxlKX0pKX1mdW5jdGlvbiB1cXQodCxlKXtsZXQgbj1be3RpdGxlOmU9PnVXdCh0LmluY2x1ZGUpLGFjdGlvbjoobixpLHIpPT57ZS5maXJlKCJub2RlLXRvZ2dsZS1leHRyYWN0Iix7bmFtZTp0Lm5hbWV9KX19XTtyZXR1cm4gZS5ub2RlQ29udGV4dE1lbnVJdGVtcyYmKG49bi5jb25jYXQoZS5ub2RlQ29udGV4dE1lbnVJdGVtcykpLGhxdCh0KSYmbi5wdXNoKHt0aXRsZTplPT5wcXQodCksYWN0aW9uOihuLGkscik9PntlLmZpcmUoIm5vZGUtdG9nZ2xlLXNlcmllc2dyb3VwIix7bmFtZTpkcXQodCl9KX19KSxufWZ1bmN0aW9uIGhxdCh0KXtyZXR1cm4gbnVsbCE9PWRxdCh0KX1mdW5jdGlvbiBkcXQodCl7cmV0dXJuIHQ/dC50eXBlPT09akd0LlNFUklFUz90Lm5hbWU6dC50eXBlPT09akd0Lk9QP3Qub3duaW5nU2VyaWVzOm51bGw6bnVsbH1mdW5jdGlvbiBwcXQodCl7cmV0dXJuKGZ1bmN0aW9uIG4odCl7cmV0dXJuIHQ9PT1XR3QuR1JPVVA/IlVuZ3JvdXAgdGhpcyBzZXJpZXMgb2Ygbm9kZXMiOiJHcm91cCB0aGlzIHNlcmllcyBvZiBub2RlcyJ9KShudWxsIT09KGZ1bmN0aW9uIGUodCl7bGV0IGU9bnVsbDtyZXR1cm4gdD8odC50eXBlPT09akd0LlNFUklFUz9lPXQ6dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUudHlwZT09PWpHdC5TRVJJRVMmJihlPXQucGFyZW50Tm9kZSksZSk6bnVsbH0pKHQpP1dHdC5HUk9VUDpXR3QuVU5HUk9VUCl9ZnVuY3Rpb24gZnF0KHQsZSxuLGkpe2xldCByPXQubm9kZSgpLG89ci50ZXh0Q29udGVudCxhPW51bGw7c3dpdGNoKGUpe2Nhc2Ugakd0Lk1FVEE6aSYmIWkuZXhwYW5kZWQmJihhPU5XdC5ub2RlU2l6ZS5tZXRhLm1heExhYmVsV2lkdGgpO2JyZWFrO2Nhc2Ugakd0Lk9QOmE9Tld0Lm5vZGVTaXplLm9wLm1heExhYmVsV2lkdGg7YnJlYWs7Y2FzZS0xOmE9Tld0LmFubm90YXRpb25zLm1heExhYmVsV2lkdGh9aWYobnVsbCE9PWEpcmV0dXJuIHIudGV4dENvbnRlbnQ9KGZ1bmN0aW9uIHModCxlLG4pe2lmKCF0KXJldHVybiIiO2lmKEJHdCh0LGUpPD1uKXJldHVybiB0O2xldCBpPTAscj10Lmxlbmd0aDtmb3IoO2k8cjspe2NvbnN0IG89aStNYXRoLnJvdW5kKChyLWkpLzIpO0JHdCh0LnNsaWNlKDAsbykrIuKApiIsZSk8PW4/aT1vOnI9by0xfXJldHVybiAwPT09aT90WzBdOnQuc2xpY2UoMCxpKSsi4oCmIn0pKHIudGV4dENvbnRlbnQsbixhKSx0LmFwcGVuZCgidGl0bGUiKS50ZXh0KG8pfSEoZnVuY3Rpb24odCl7dC5OT05FPSJub25lIix0LkNPTVBVVEVfVElNRT0iY29tcHV0ZV90aW1lIix0LkRFVklDRT0iZGV2aWNlIix0Lk1FTU9SWT0ibWVtb3J5Iix0Lk9QX0NPTVBBVElCSUxJVFk9Im9wX2NvbXBhdGliaWxpdHkiLHQuU1RSVUNUVVJFPSJzdHJ1Y3R1cmUiLHQuWExBX0NMVVNURVI9InhsYV9jbHVzdGVyIn0pKGFxdHx8KGFxdD17fSkpO2xldCBtcXQ9bnVsbDtmdW5jdGlvbiBncXQodCxlLG4saSl7Rld0KHQsInRleHQiLHZHdC5Ob2RlLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsZSkuYXR0cigieSIsbitpKX1mdW5jdGlvbiBfcXQodCxlLG4pe2xldCBpPXdHdCh0LCJnIixuKTtzd2l0Y2goZS5ub2RlLnR5cGUpe2Nhc2Ugakd0Lk9QOmNvbnN0IHQ9ZS5ub2RlO2lmKFNlLmV4cG9ydHMuaXNOdW1iZXIodC5mdW5jdGlvbklucHV0SW5kZXgpfHxTZS5leHBvcnRzLmlzTnVtYmVyKHQuZnVuY3Rpb25PdXRwdXRJbmRleCkpe3dHdChpLCJwb2x5Z29uIix2R3QuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrfXdHdChpLCJlbGxpcHNlIix2R3QuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrO2Nhc2Ugakd0LlNFUklFUzpsZXQgbj0iYW5ub3RhdGlvbiIscj1lO3IuY29yZUdyYXBoJiYobj1yLm5vZGUuaGFzTm9uQ29udHJvbEVkZ2VzPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwiKTtsZXQgbz1bdkd0Lk5vZGUuQ09MT1JfVEFSR0VUXTtyLmlzRmFkZWRPdXQmJm8ucHVzaCgiZmFkZWQtZWxsaXBzZSIpLHdHdChpLCJ1c2UiLG8pLmF0dHIoInhsaW5rOmhyZWYiLCIjb3Atc2VyaWVzLSIrbisiLXN0YW1wIiksd0d0KGksInJlY3QiLHZHdC5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLGUucmFkaXVzKS5hdHRyKCJyeSIsZS5yYWRpdXMpO2JyZWFrO2Nhc2Ugakd0LkJSSURHRTpjYXNlIGpHdC5NRVRBOndHdChpLCJyZWN0Iix2R3QuTm9kZS5DT0xPUl9UQVJHRVQpLmF0dHIoInJ4IixlLnJhZGl1cykuYXR0cigicnkiLGUucmFkaXVzKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK2Uubm9kZS50eXBlKX1yZXR1cm4gaX1mdW5jdGlvbiB5cXQodCl7c3dpdGNoKHQubm9kZS50eXBlKXtjYXNlIGpHdC5PUDpyZXR1cm4gdkd0Lk9QTk9ERTtjYXNlIGpHdC5NRVRBOnJldHVybiB2R3QuTUVUQU5PREU7Y2FzZSBqR3QuU0VSSUVTOnJldHVybiB2R3QuU0VSSUVTTk9ERTtjYXNlIGpHdC5CUklER0U6cmV0dXJuIHZHdC5CUklER0VOT0RFO2Nhc2Ugakd0LkVMTElQU0lTOnJldHVybiB2R3QuRUxMSVBTSVNOT0RFfXRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK3Qubm9kZS50eXBlKX1mdW5jdGlvbiB2cXQodCxlLG4pe2xldCBpPShmdW5jdGlvbiByKHQpe3JldHVybiB0LnJlcGxhY2UoLyhbOi5cW1xdLC9cXFwoXCldKS9nLCJcXCQxIil9KSh0KTtpZighbilyZXR1cm5gdXJsKCMke2l9KWA7bGV0IG89U3UobiksYT1vLnNlbGVjdCgiZGVmcyNfZ3JhcGgtZ3JhZGllbnRzIik7YS5lbXB0eSgpJiYoYT1vLmFwcGVuZCgiZGVmcyIpLmF0dHIoImlkIiwiX2dyYXBoLWdyYWRpZW50cyIpKTtsZXQgcz1hLnNlbGVjdCgibGluZWFyR3JhZGllbnQjIitpKTtpZihzLmVtcHR5KCkpe3M9YS5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cigiaWQiLHQpLHMuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7bGV0IG49MDtTZS5leHBvcnRzLmVhY2goZSwodD0+e2xldCBlPXQuY29sb3I7cy5hcHBlbmQoInN0b3AiKS5hdHRyKCJvZmZzZXQiLG4pLmF0dHIoInN0b3AtY29sb3IiLGUpLHMuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixuK3QucHJvcG9ydGlvbikuYXR0cigic3RvcC1jb2xvciIsZSksbis9dC5wcm9wb3J0aW9ufSkpfXJldHVybmB1cmwoIyR7aX0pYH1mdW5jdGlvbiBicXQodCl7U3UodCkuc2VsZWN0KCJkZWZzI19ncmFwaC1ncmFkaWVudHMiKS5yZW1vdmUoKX1mdW5jdGlvbiB4cXQodCxlLG4saSxyKXtsZXQgbz1wV3Q7c3dpdGNoKHQ9dHx8KCgpPT4wKSxlKXtjYXNlIGFxdC5OT05FOmNhc2UgYXF0LlNUUlVDVFVSRTppZihuLm5vZGUudHlwZT09PWpHdC5NRVRBKXtsZXQgcj1uLm5vZGUudGVtcGxhdGVJZDtyZXR1cm4gZT09PWFxdC5TVFJVQ1RVUkUmJm51bGwhPT1yP28uU1RSVUNUVVJFX1BBTEVUVEUodChyKSxpKTpvLlVOS05PV059cmV0dXJuIG4ubm9kZS50eXBlPT09akd0LlNFUklFUz9pP28uRVhQQU5ERURfQ09MT1I6IndoaXRlIjpuLm5vZGUudHlwZT09PWpHdC5CUklER0U/bi5zdHJ1Y3R1cmFsPyIjZjBlIjpuLm5vZGUuaW5ib3VuZD8iIzBlZiI6IiNmZTAiOlNlLmV4cG9ydHMuaXNOdW1iZXIobi5ub2RlLmZ1bmN0aW9uSW5wdXRJbmRleCk/IiM3OTU1NDgiOlNlLmV4cG9ydHMuaXNOdW1iZXIobi5ub2RlLmZ1bmN0aW9uT3V0cHV0SW5kZXgpPyIjMDA5Njg4Ijoid2hpdGUiO2Nhc2UgYXF0LkRFVklDRTpyZXR1cm4gbnVsbD09bi5kZXZpY2VDb2xvcnM/by5VTktOT1dOOmk/by5FWFBBTkRFRF9DT0xPUjp2cXQoImRldmljZS0iK24ubm9kZS5uYW1lLG4uZGV2aWNlQ29sb3JzLHIpO2Nhc2UgYXF0LlhMQV9DTFVTVEVSOnJldHVybiBudWxsPT1uLnhsYUNsdXN0ZXJDb2xvcnM/by5VTktOT1dOOmk/by5FWFBBTkRFRF9DT0xPUjp2cXQoInhsYS0iK24ubm9kZS5uYW1lLG4ueGxhQ2x1c3RlckNvbG9ycyxyKTtjYXNlIGFxdC5DT01QVVRFX1RJTUU6cmV0dXJuIGk/by5FWFBBTkRFRF9DT0xPUjpuLmNvbXB1dGVUaW1lQ29sb3J8fG8uVU5LTk9XTjtjYXNlIGFxdC5NRU1PUlk6cmV0dXJuIGk/by5FWFBBTkRFRF9DT0xPUjpuLm1lbW9yeUNvbG9yfHxvLlVOS05PV047Y2FzZSBhcXQuT1BfQ09NUEFUSUJJTElUWTpyZXR1cm4gbnVsbD09bi5jb21wYXRpYmlsaXR5Q29sb3JzP28uVU5LTk9XTjppP28uRVhQQU5ERURfQ09MT1I6dnF0KCJvcC1jb21wYXQtIituLm5vZGUubmFtZSxuLmNvbXBhdGliaWxpdHlDb2xvcnMscik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2FzZSB0byBjb2xvciBub2RlcyBieSIpfX1mdW5jdGlvbiB3cXQodCxlLG4saSl7aT1pfHx2R3QuTm9kZS5TSEFQRTtjb25zdCByPW4uaXNOb2RlSGlnaGxpZ2h0ZWQoZS5ub2RlLm5hbWUpLG89bi5pc05vZGVTZWxlY3RlZChlLm5vZGUubmFtZSksYT1lLmlzSW5FeHRyYWN0fHxlLmlzT3V0RXh0cmFjdHx8ZS5pc0xpYnJhcnlGdW5jdGlvbixzPWUuZXhwYW5kZWQmJmkhPT12R3QuQW5ub3RhdGlvbi5OT0RFLGw9ZS5pc0ZhZGVkT3V0O3QuY2xhc3NlZCgiaGlnaGxpZ2h0ZWQiLHIpLHQuY2xhc3NlZCgic2VsZWN0ZWQiLG8pLHQuY2xhc3NlZCgiZXh0cmFjdCIsYSksdC5jbGFzc2VkKCJleHBhbmRlZCIscyksdC5jbGFzc2VkKCJmYWRlZCIsbCk7Y29uc3QgYz10LnNlbGVjdCgiLiIraSsiIC4iK3ZHdC5Ob2RlLkNPTE9SX1RBUkdFVCksdT14cXQobi50ZW1wbGF0ZUluZGV4LG4uY29sb3JCeSxlLHMsbi5nZXRHcmFwaFN2Z1Jvb3QoKSk7Yy5zdHlsZSgiZmlsbCIsdSksYy5zdHlsZSgic3Ryb2tlIixvP251bGw6U3F0KHUpKX1mdW5jdGlvbiBTcXQodCl7cmV0dXJuInVybCI9PT10LnN1YnN0cmluZygwLDMpP3BXdC5HUkFESUVOVF9PVVRMSU5FOlVoKHQpLmRhcmtlcigpLnRvU3RyaW5nKCl9ZnVuY3Rpb24gTXF0KHQsZSxuLGkpe2NvbnN0IHI9U3UodCk7aWYoci5zZWxlY3RBbGwoIi5pbnB1dC1oaWdobGlnaHQiKS5jbGFzc2VkKCJpbnB1dC1oaWdobGlnaHQiLCExKSxyLnNlbGVjdEFsbCgiLm5vbi1pbnB1dCIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsITEpLHIuc2VsZWN0QWxsKCIuaW5wdXQtcGFyZW50IikuY2xhc3NlZCgiaW5wdXQtcGFyZW50IiwhMSksci5zZWxlY3RBbGwoIi5pbnB1dC1jaGlsZCIpLmNsYXNzZWQoImlucHV0LWNoaWxkIiwhMSksci5zZWxlY3RBbGwoIi5pbnB1dC1lZGdlLWhpZ2hsaWdodCIpLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMSksci5zZWxlY3RBbGwoIi5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCExKSxyLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIsITEpLCFlfHwhaXx8IW4pcmV0dXJuO2xldCBvPUVxdChuLGUpLGE9e307U2UuZXhwb3J0cy5lYWNoKG8sKGZ1bmN0aW9uKG4pe2E9VHF0KHQsZSxuLGEpfSkpO2xldCBzPU9iamVjdC5rZXlzKGEpLGw9KGZ1bmN0aW9uIGModCxlKXtsZXQgbj17fTtyZXR1cm4gU2UuZXhwb3J0cy5lYWNoKGUsKGZ1bmN0aW9uKGUpe2xldCBpPXQuZ2V0Tm9kZUJ5TmFtZShlKSxyPUNxdCh0LGkpO25bci5uYW1lXT1yfSkpLG59KShlLHMpOyEoZnVuY3Rpb24gdSh0LGUpe1NlLmV4cG9ydHMuZm9yT3duKGUsKGZ1bmN0aW9uKGUpe2xldCBuPWU7Zm9yKDtuLm5hbWUhPT1GR3Q7KXtjb25zdCBlPVN1KHQpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke24ubmFtZX0iXWApOyFlLm5vZGVzKCkubGVuZ3RofHxlLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIpfHxlLmNsYXNzZWQoInNlbGVjdGVkIil8fGUuY2xhc3NlZCgib3AiKXx8ZS5jbGFzc2VkKCJpbnB1dC1wYXJlbnQiLCEwKSxuPW4ucGFyZW50Tm9kZX19KSl9KSh0LGwpLHIuc2VsZWN0QWxsKCJnLm5vZGU6bm90KC5zZWxlY3RlZCk6bm90KC5pbnB1dC1oaWdobGlnaHQpOm5vdCguaW5wdXQtcGFyZW50KTpub3QoLmlucHV0LWNoaWxkcmVuKSIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsITApLmVhY2goKGZ1bmN0aW9uKHQpe3Iuc2VsZWN0QWxsKGBbZGF0YS1uYW1lPSIke3Qubm9kZS5uYW1lfSJdYCkuY2xhc3NlZCgibm9uLWlucHV0IiwhMCl9KSksci5zZWxlY3RBbGwoImcuZWRnZTpub3QoLmlucHV0LWVkZ2UtaGlnaGxpZ2h0KSIpLmNsYXNzZWQoIm5vbi1pbnB1dC1lZGdlLWhpZ2hsaWdodCIsITApfWZ1bmN0aW9uIEVxdCh0LGUpe2xldCBuPVtdLGk9ZS5nZXROb2RlQnlOYW1lKHQpO2lmKGkgaW5zdGFuY2VvZiBYR3QpcmV0dXJuW2ldLmNvbmNhdChpLmluRW1iZWRkaW5ncyk7bGV0IHI9aS5tZXRhZ3JhcGgubm9kZXMoKTtyZXR1cm4gU2UuZXhwb3J0cy5lYWNoKHIsKGZ1bmN0aW9uKHQpe249bi5jb25jYXQoRXF0KHQsZSkpfSkpLG59ZnVuY3Rpb24gVHF0KHQsZSxuLGkpe2lmKGlbbi5uYW1lXSlyZXR1cm4gaTtpW24ubmFtZV09ITA7bGV0IHI9bi5pbnB1dHMsbz1DcXQoZSxuKTtTdSh0KS5zZWxlY3QoYC5ub2RlW2RhdGEtbmFtZT0iJHtvLm5hbWV9Il1gKS5jbGFzc2VkKCJpbnB1dC1oaWdobGlnaHQiLCEwKTtsZXQgYT17fTtTZS5leHBvcnRzLmVhY2gociwoZnVuY3Rpb24odCl7bGV0IG49ZS5nZXROb2RlQnlOYW1lKHQubmFtZSk7aWYodm9pZCAwPT09bilyZXR1cm47aWYobiBpbnN0YW5jZW9mIEtHdCl7bGV0IHQ9c1d0KG4ubmFtZSk7bj1lLmdldE5vZGVCeU5hbWUodCl9bGV0IGk9Q3F0KGUsbikscj1hW2kubmFtZV07cj9yLm9wTm9kZXMucHVzaChuKTphW2kubmFtZV09e3Zpc2libGVQYXJlbnQ6aSxvcE5vZGVzOltuXX19KSk7bGV0IHM9e30sbD1bb107c1tvLm5hbWVdPXt0cmFjZWQ6ITEsaW5kZXg6MCxjb25uZWN0aW9uRW5kcG9pbnRzOltdfTtsZXQgYz1vO2ZvcihsZXQgdD0xO2MubmFtZSE9PUZHdDt0KyspYz1jLnBhcmVudE5vZGUsc1tjLm5hbWVdPXt0cmFjZWQ6ITEsaW5kZXg6dCxjb25uZWN0aW9uRW5kcG9pbnRzOltdfSxsW3RdPWM7cmV0dXJuIFNlLmV4cG9ydHMuZm9yT3duKGEsKGZ1bmN0aW9uKG4scil7bGV0IGE9bi52aXNpYmxlUGFyZW50O1NlLmV4cG9ydHMuZWFjaChuLm9wTm9kZXMsKGZ1bmN0aW9uKG4pe2k9VHF0KHQsZSxuLGkpfSkpLGEubmFtZSE9PW8ubmFtZSYmKGZ1bmN0aW9uIGModCxlLG4saSl7bGV0IHI9ZSxvPWUsYT1bXTtmb3IoOyFuW3IubmFtZV07KW8ubmFtZSE9PXIubmFtZSYmYS5wdXNoKFtvLHJdKSxvPXIscj1yLnBhcmVudE5vZGU7bGV0IHM9bltyLm5hbWVdLmluZGV4LGw9aVtNYXRoLm1heChzLTEsMCldLm5hbWUsYz1sLHU9by5uYW1lLGg9by5uYW1lO2NvbnN0IGQ9U3UodCk7ZC5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7aH0tLSR7bH0iXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCksU2UuZXhwb3J0cy5lYWNoKGEsKGZ1bmN0aW9uKHQpe2Quc2VsZWN0QWxsKGBbZGF0YS1lZGdlPSIke3RbMF0ubmFtZX0tLSR7Y31+fiR7dFsxXS5uYW1lfX5+T1VUIl1gKS5jbGFzc2VkKCJpbnB1dC1lZGdlLWhpZ2hsaWdodCIsITApfSkpO2ZvcihsZXQgdD0xO3Q8czt0KyspZC5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7dX1+fiR7aVt0XS5uYW1lfX5+SU4tLSR7aVt0LTFdLm5hbWV9Il1gKS5jbGFzc2VkKCJpbnB1dC1lZGdlLWhpZ2hsaWdodCIsITApfSkodCxhLHMsbCl9KSksaX1mdW5jdGlvbiBDcXQodCxlKXtsZXQgbj0hMSxpPWU7Zm9yKDshbjspaWYoaT0oZT1pKS5wYXJlbnROb2RlLHZvaWQgMD09PWkpbj0hMDtlbHNle2xldCBlPXQuZ2V0UmVuZGVyTm9kZUJ5TmFtZShpLm5hbWUpO2UmJihlLmV4cGFuZGVkfHxpIGluc3RhbmNlb2YgWEd0KSYmKG49ITApfXJldHVybiBlfWZ1bmN0aW9uIEFxdCh0LGUsbixpKXtsZXQgcj10LnNlbGVjdEFsbCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkpLmRhdGEoZS5saXN0LCh0PT50Lm5vZGUubmFtZSkpO3JldHVybiByLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1uYW1lIiwodD0+dC5ub2RlLm5hbWUpKS5lYWNoKChmdW5jdGlvbih0KXtsZXQgZT1TdSh0aGlzKTtpLmFkZEFubm90YXRpb25Hcm91cCh0LG4sZSk7bGV0IHI9dkd0LkFubm90YXRpb24uRURHRSxvPXQucmVuZGVyTWV0YWVkZ2VJbmZvJiZ0LnJlbmRlck1ldGFlZGdlSW5mby5tZXRhZWRnZTtvJiYhby5udW1SZWd1bGFyRWRnZXMmJihyKz0iICIrdkd0LkFubm90YXRpb24uQ09OVFJPTF9FREdFKSxvJiZvLm51bVJlZkVkZ2VzJiYocis9IiAiK3ZHdC5FZGdlLlJFRl9MSU5FKSxycXQoZSx0LGksciksdC5hbm5vdGF0aW9uVHlwZSE9PWJXdC5FTExJUFNJUz8oKGZ1bmN0aW9uIGEodCxlKXtsZXQgbj1lLm5vZGUubmFtZS5zcGxpdCgiLyIpO2txdCh0LG5bbi5sZW5ndGgtMV0sZSxudWxsKX0pKGUsdCksKGZ1bmN0aW9uIHModCxlKXtlLmFubm90YXRpb25UeXBlPT09Yld0LlNVTU1BUlk/d0d0KHQsInVzZSIpLmF0dHIoImNsYXNzIiwic3VtbWFyeSIpLmF0dHIoInhsaW5rOmhyZWYiLCIjc3VtbWFyeS1pY29uIikuYXR0cigiY3Vyc29yIiwicG9pbnRlciIpOndHdChfcXQodCxlLHZHdC5Bbm5vdGF0aW9uLk5PREUpLCJ0aXRsZSIpLnRleHQoZS5ub2RlLm5hbWUpfSkoZSx0KSk6a3F0KGUsdC5ub2RlLm5hbWUsdCx2R3QuQW5ub3RhdGlvbi5FTExJUFNJUyl9KSkubWVyZ2UocikuYXR0cigiY2xhc3MiLCh0PT52R3QuQW5ub3RhdGlvbi5HUk9VUCsiICIrKGZ1bmN0aW9uIGUodCl7cmV0dXJuKGJXdFt0XXx8IiIpLnRvTG93ZXJDYXNlKCl8fG51bGx9KSh0LmFubm90YXRpb25UeXBlKSsiICIreXF0KHQpKSkuZWFjaCgoZnVuY3Rpb24odCl7bGV0IGU9U3UodGhpcyk7IShmdW5jdGlvbiByKHQsZSxuLGkpe2xldCByPURXdChlKTtuLnJlbmRlck5vZGVJbmZvJiZuLmFubm90YXRpb25UeXBlIT09Yld0LkVMTElQU0lTJiZ3cXQodCxuLnJlbmRlck5vZGVJbmZvLGksdkd0LkFubm90YXRpb24uTk9ERSksbi5hbm5vdGF0aW9uVHlwZT09PWJXdC5TVU1NQVJZJiYobi53aWR0aCs9MTApLHQuc2VsZWN0KCJ0ZXh0LiIrdkd0LkFubm90YXRpb24uTEFCRUwpLnRyYW5zaXRpb24oKS5hdHRyKCJ4IixyK24uZHgrKG4uaXNJbj8tMToxKSoobi53aWR0aC8yK24ubGFiZWxPZmZzZXQpKS5hdHRyKCJ5IixlLnkrbi5keSksdC5zZWxlY3QoInVzZS5zdW1tYXJ5IikudHJhbnNpdGlvbigpLmF0dHIoIngiLHIrbi5keC0zKS5hdHRyKCJ5IixlLnkrbi5keS02KSxXV3QodC5zZWxlY3QoIi4iK3ZHdC5Bbm5vdGF0aW9uLk5PREUrIiBlbGxpcHNlIikscituLmR4LGUueStuLmR5LG4ud2lkdGgsbi5oZWlnaHQpLEdXdCh0LnNlbGVjdCgiLiIrdkd0LkFubm90YXRpb24uTk9ERSsiIHJlY3QiKSxyK24uZHgsZS55K24uZHksbi53aWR0aCxuLmhlaWdodCksR1d0KHQuc2VsZWN0KCIuIit2R3QuQW5ub3RhdGlvbi5OT0RFKyIgdXNlIikscituLmR4LGUueStuLmR5LG4ud2lkdGgsbi5oZWlnaHQpLHQuc2VsZWN0KCJwYXRoLiIrdkd0LkFubm90YXRpb24uRURHRSkudHJhbnNpdGlvbigpLmF0dHIoImQiLCh0PT57bGV0IG49dC5wb2ludHMubWFwKCh0PT4oe3g6dC5keCtyLHk6dC5keStlLnl9KSkpO3JldHVybiBvcXQobil9KSl9KShlLG4sdCxpKSx0LmFubm90YXRpb25UeXBlIT09Yld0LkVMTElQU0lTJiYoZnVuY3Rpb24gbyh0LGUsbixpKXt0Lm9uKCJtb3VzZW92ZXIiLCh0PT57aS5maXJlKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIse25hbWU6dC5ub2RlLm5hbWUsaG9zdE5hbWU6ZS5ub2RlLm5hbWV9KX0pKS5vbigibW91c2VvdXQiLCh0PT57aS5maXJlKCJhbm5vdGF0aW9uLXVuaGlnaGxpZ2h0Iix7bmFtZTp0Lm5vZGUubmFtZSxob3N0TmFtZTplLm5vZGUubmFtZX0pfSkpLm9uKCJjbGljayIsKHQ9Pnt1dS5zdG9wUHJvcGFnYXRpb24oKSxpLmZpcmUoImFubm90YXRpb24tc2VsZWN0Iix7bmFtZTp0Lm5vZGUubmFtZSxob3N0TmFtZTplLm5vZGUubmFtZX0pfSkpLG4uYW5ub3RhdGlvblR5cGUhPT1iV3QuU1VNTUFSWSYmbi5hbm5vdGF0aW9uVHlwZSE9PWJXdC5DT05TVEFOVCYmdC5vbigiY29udGV4dG1lbnUiLFpXdChpLHVxdChuLm5vZGUsaSkpKX0pKGUsbix0LGkpfSkpLHIuZXhpdCgpLmVhY2goKGZ1bmN0aW9uKHQpe2kucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKHQsbil9KSkucmVtb3ZlKCkscn1mdW5jdGlvbiBrcXQodCxlLG4saSl7bGV0IHI9dkd0LkFubm90YXRpb24uTEFCRUw7cmV0dXJuIGkmJihyKz0iICIraSksZnF0KHQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLHIpLmF0dHIoImR5IiwiLjM1ZW0iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsbi5pc0luPyJlbmQiOiJzdGFydCIpLnRleHQoZSksLTEsNSl9ZnVuY3Rpb24gTHF0KHQsZSxuLGkpe2xldCByPXhHdCh0LCJnIixpPWl8fHZHdC5TY2VuZS5HUk9VUCkuZW1wdHkoKSxvPXdHdCh0LCJnIixpKSxhPXdHdChvLCJnIix2R3QuU2NlbmUuQ09SRSkscz1TZS5leHBvcnRzLnJlZHVjZShlLmNvcmVHcmFwaC5ub2RlcygpLCgodCxuKT0+e2xldCBpPWUuY29yZUdyYXBoLm5vZGUobik7cmV0dXJuIGkuZXhjbHVkZWR8fHQucHVzaChpKSx0fSksW10pO3JldHVybiBlLm5vZGUudHlwZT09PWpHdC5TRVJJRVMmJnMucmV2ZXJzZSgpLChmdW5jdGlvbiBsKHQsZSxuKXtjb25zdCBpPW47bGV0IHI9W107cj1TZS5leHBvcnRzLnJlZHVjZShlLmVkZ2VzKCksKCh0LG4pPT57bGV0IGk9ZS5lZGdlKG4pO3JldHVybiB0LnB1c2goe3Y6bi52LHc6bi53LGxhYmVsOml9KSx0fSkscik7bGV0IG89d0d0KHQsImciLHZHdC5FZGdlLkNPTlRBSU5FUikuc2VsZWN0QWxsKChmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXN9KSkuZGF0YShyLFFXdCk7by5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIix2R3QuRWRnZS5HUk9VUCkuYXR0cigiZGF0YS1lZGdlIixRV3QpLmVhY2goKGZ1bmN0aW9uKHQpe2xldCBlPVN1KHRoaXMpO3QubGFiZWwuZWRnZUdyb3VwPWUsaS5fZWRnZUdyb3VwSW5kZXhbUVd0KHQpXT1lLGkuaGFuZGxlRWRnZVNlbGVjdGVkJiZlLm9uKCJjbGljayIsKHQ9Pnt1dS5zdG9wUHJvcGFnYXRpb24oKSxpLmZpcmUoImVkZ2Utc2VsZWN0Iix7ZWRnZURhdGE6dCxlZGdlR3JvdXA6ZX0pfSkpLHJxdChlLHQsaSl9KSkubWVyZ2UobykuZWFjaCgoZnVuY3Rpb24oKXshKGZ1bmN0aW9uIHQoZSxuKXtTdShuKS5zZWxlY3QoInBhdGguIit2R3QuRWRnZS5MSU5FKS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJkIiwoZnVuY3Rpb24odCxuLGkpe3JldHVybihmdW5jdGlvbiByKHQsZSxuLGksbyl7bGV0IGE9bi5sYWJlbCxzPWEuYWRqb2luaW5nTWV0YWVkZ2UsbD1hLnBvaW50cztjb25zdHtzaGFkb3dSb290OmN9PXQ7aWYobi5sYWJlbC5zdGFydE1hcmtlcklkJiYobD1pcXQobCxTdShjLnF1ZXJ5U2VsZWN0b3IoIiMiK24ubGFiZWwuc3RhcnRNYXJrZXJJZCkpLCEwKSksbi5sYWJlbC5lbmRNYXJrZXJJZCYmKGw9aXF0KGwsU3UoYy5xdWVyeVNlbGVjdG9yKCIjIituLmxhYmVsLmVuZE1hcmtlcklkKSksITEpKSwhcylyZXR1cm4gamQobyxvcXQobCkpO2xldCB1PXMuZWRnZUdyb3VwLm5vZGUoKS5maXJzdENoaWxkLGg9YS5tZXRhZWRnZS5pbmJvdW5kO3JldHVybiBmdW5jdGlvbih0KXtsZXQgbj11LmdldFBvaW50QXRMZW5ndGgoaD91LmdldFRvdGFsTGVuZ3RoKCk6MCkubWF0cml4VHJhbnNmb3JtKHUuZ2V0Q1RNKCkpLm1hdHJpeFRyYW5zZm9ybShlLmdldENUTSgpLmludmVyc2UoKSksaT1oPzA6bC5sZW5ndGgtMTtyZXR1cm4gbFtpXS54PW4ueCxsW2ldLnk9bi55LG9xdChsKX19KShlLHRoaXMsdCwwLGkpfSkpfSkobix0aGlzKX0pKS5lYWNoKChmdW5jdGlvbih0KXshKGZ1bmN0aW9uIGUodCxuLGkpe3QuY2xhc3NlZCgiZmFkZWQiLG4ubGFiZWwuaXNGYWRlZE91dCk7bGV0IHI9bi5sYWJlbC5tZXRhZWRnZTt0LnNlbGVjdCgicGF0aC4iK3ZHdC5FZGdlLkxJTkUpLmNsYXNzZWQoImNvbnRyb2wtZGVwIixyJiYhci5udW1SZWd1bGFyRWRnZXMpfSkoU3UodGhpcyksdCl9KSksby5leGl0KCkuZWFjaCgodD0+e2RlbGV0ZSBpLl9lZGdlR3JvdXBJbmRleFtRV3QodCldfSkpLnJlbW92ZSgpfSkoYSxlLmNvcmVHcmFwaCxuKSxzcXQoYSxzLG4pLGUuaXNvbGF0ZWRJbkV4dHJhY3QubGVuZ3RoPjA/c3F0KHdHdChvLCJnIix2R3QuU2NlbmUuSU5FWFRSQUNUKSxlLmlzb2xhdGVkSW5FeHRyYWN0LG4pOnhHdChvLCJnIix2R3QuU2NlbmUuSU5FWFRSQUNUKS5yZW1vdmUoKSxlLmlzb2xhdGVkT3V0RXh0cmFjdC5sZW5ndGg+MD9zcXQod0d0KG8sImciLHZHdC5TY2VuZS5PVVRFWFRSQUNUKSxlLmlzb2xhdGVkT3V0RXh0cmFjdCxuKTp4R3QobywiZyIsdkd0LlNjZW5lLk9VVEVYVFJBQ1QpLnJlbW92ZSgpLGUubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QubGVuZ3RoPjA/c3F0KHdHdChvLCJnIix2R3QuU2NlbmUuRlVOQ1RJT05fTElCUkFSWSksZS5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdCxuKTp4R3QobywiZyIsdkd0LlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkpLnJlbW92ZSgpLChmdW5jdGlvbiBjKHQsZSl7bGV0IG49ZS5ub2RlLnR5cGU9PT1qR3QuU0VSSUVTPzA6Tld0LnN1YnNjZW5lLm1ldGEubGFiZWxIZWlnaHQ7ald0KEZXdCh0LCJnIixWV3QuU2NlbmUuQ09SRSksMCxuKTtsZXQgaT1lLmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wLHI9ZS5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjAsbz1lLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wLGE9Tld0LnN1YnNjZW5lLm1ldGEuZXh0cmFjdFhPZmZzZXQscz0wO2lmKGkmJihzKz1lLm91dEV4dHJhY3RCb3gud2lkdGgpLHImJihzKz1lLm91dEV4dHJhY3RCb3gud2lkdGgpLGkpe2xldCBpPWUuY29yZUJveC53aWR0aDtpPXM8SVd0P2ktSVd0K2UuaW5FeHRyYWN0Qm94LndpZHRoLzI6aS1lLmluRXh0cmFjdEJveC53aWR0aC8yLWUub3V0RXh0cmFjdEJveC53aWR0aC0ocj9hOjApLGk9aS1lLmxpYnJhcnlGdW5jdGlvbnNCb3gud2lkdGgtKG8/YTowKSxqV3QoRld0KHQsImciLFZXdC5TY2VuZS5JTkVYVFJBQ1QpLGksbil9aWYocil7bGV0IGk9ZS5jb3JlQm94LndpZHRoO3M8SVd0P2k9aS1JV3QrZS5vdXRFeHRyYWN0Qm94LndpZHRoLzI6aS09ZS5vdXRFeHRyYWN0Qm94LndpZHRoLzIsaT1pLWUubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGpXdChGV3QodCwiZyIsVld0LlNjZW5lLk9VVEVYVFJBQ1QpLGksbil9aWYobyl7bGV0IGk9ZS5jb3JlQm94LndpZHRoLWUubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC8yO2pXdChGV3QodCwiZyIsVld0LlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkpLGksbil9fSkobyxlKSxyJiZvLmF0dHIoIm9wYWNpdHkiLDApLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwxKSxvfWxldCBQcXQ9Y2xhc3MgZXh0ZW5kcyhlcih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm5vZGU9bnVsbCx0aGlzLnJlbmRlckluZm89bnVsbCx0aGlzLmNvbG9yQnk9YXF0LlNUUlVDVFVSRSx0aGlzLnRlbXBsYXRlSW5kZXg9bnVsbCx0aGlzLnR5cGU9bnVsbCx0aGlzLnZlcnRpY2FsPSExLHRoaXMuY29uc3Q9ITEsdGhpcy5zdW1tYXJ5PSExLHRoaXMuZmlsbD1udWxsLHRoaXMuaGVpZ2h0PTIwfV9jb21wdXRlRmlsbE92ZXJyaWRlKHQsZSxuLGkscil7cmV0dXJuIHQmJmUmJmk/eHF0KGksbixlLCExKTpyfV9nZXRTdHJva2VPdmVycmlkZSh0KXtyZXR1cm4gdD9TcXQodCk6bnVsbH1fZ2V0VHlwZSh0LGUsbixpKXtjb25zdHtHcmFwaEljb25UeXBlOnJ9PUtXdDtpZih0KXN3aXRjaCh0LnR5cGUpe2Nhc2Ugakd0Lk9QOntjb25zdCBpPXQub3A7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBpP3IuT1A6IkNvbnN0Ij09PWl8fG4/ci5DT05TVDppLmVuZHNXaXRoKCJTdW1tYXJ5Iil8fGU/ci5TVU1NQVJZOnIuT1B9Y2FzZSBqR3QuTUVUQTpyZXR1cm4gci5NRVRBO2Nhc2Ugakd0LlNFUklFUzpyZXR1cm4gci5TRVJJRVN9cmV0dXJuIGl9X2lzVmVydGljYWwodCxlKXtyZXR1cm4gdD90Lmhhc05vbkNvbnRyb2xFZGdlczohIWV9X2dldEZhZGVkKHQpe3JldHVybiB0JiZ0LmlzRmFkZWRPdXR9X29uRmlsbE92ZXJyaWRlQ2hhbmdlZCh0LGUpe2NvbnN0e25vZGU6bixyZW5kZXJJbmZvOmksY29sb3JCeTpyLHRlbXBsYXRlSW5kZXg6b309dGhpczt0IT09ZSYmYnF0KHRoaXMuJC5pY29uLmdldFN2Z0RlZmluYWJsZUVsZW1lbnQoKSksbiYmaSYmbyYmeHF0KG8scixpLCExLHRoaXMuJC5pY29uLmdldFN2Z0RlZmluYWJsZUVsZW1lbnQoKSl9fTtQcXQudGVtcGxhdGU9X2VgCiAgICA8c3R5bGU+CiAgICAgIHRmLWdyYXBoLWljb24gewogICAgICAgIC0tdGItZ3JhcGgtZmFkZWQ6IHZhcigtLXRiLWdyYXBoLWZhZGVkKTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgIGlkPSJpY29uIgogICAgICB0eXBlPSJbW19nZXRUeXBlKG5vZGUsIHN1bW1hcnksIGNvbnN0LCB0eXBlKV1dIgogICAgICBoZWlnaHQ9IltbaGVpZ2h0XV0iCiAgICAgIGZpbGwtb3ZlcnJpZGU9IltbX2ZpbGxPdmVycmlkZV1dIgogICAgICBzdHJva2Utb3ZlcnJpZGU9IltbX2dldFN0cm9rZU92ZXJyaWRlKF9maWxsT3ZlcnJpZGUpXV0iCiAgICAgIGZhZGVkPSJbW19nZXRGYWRlZChyZW5kZXJJbmZvKV1dIgogICAgICB2ZXJ0aWNhbD0iW1tfaXNWZXJ0aWNhbChub2RlLCB2ZXJ0aWNhbCldXSIKICAgID48L3RmLWdyYXBoLWljb24+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQcXQucHJvdG90eXBlLCJub2RlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFBxdC5wcm90b3R5cGUsInJlbmRlckluZm8iLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUHF0LnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFBxdC5wcm90b3R5cGUsInRlbXBsYXRlSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUHF0LnByb3RvdHlwZSwidHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBxdC5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUHF0LnByb3RvdHlwZSwiY29uc3QiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQcXQucHJvdG90eXBlLCJzdW1tYXJ5Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFBxdC5wcm90b3R5cGUsImZpbGwiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUHF0LnByb3RvdHlwZSwiaGVpZ2h0Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZUZpbGxPdmVycmlkZShub2RlLCByZW5kZXJJbmZvLCBjb2xvckJ5LCB0ZW1wbGF0ZUluZGV4LCBmaWxsKSIsb2JzZXJ2ZXI6Il9vbkZpbGxPdmVycmlkZUNoYW5nZWQifSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFBxdC5wcm90b3R5cGUsIl9maWxsT3ZlcnJpZGUiLHZvaWQgMCksUHF0PXQoW2koInRmLW5vZGUtaWNvbiIpXSxQcXQpO2xldCBOcXQ9Y2xhc3MgZXh0ZW5kcyhlcih5ZSkpe19pdGVtVHlwZUNoYW5nZWQoKXsic3Vibm9kZSIhPT10aGlzLml0ZW1UeXBlP3RoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LmFkZCgiY2xpY2thYmxlIik6dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QucmVtb3ZlKCJjbGlja2FibGUiKX1fbm9kZUxpc3RlbmVyKHQpe3RoaXMuZmlyZSgibm9kZS1saXN0LWl0ZW0tIit0LnR5cGUse25vZGVOYW1lOnRoaXMubmFtZSx0eXBlOnRoaXMuaXRlbVR5cGV9KX1fZmFkZWRDbGFzcyh0KXtyZXR1cm4gdCYmdC5pc0ZhZGVkT3V0PyJmYWRlZCI6IiJ9fTtmdW5jdGlvbiBJcXQodCxlLG4pe3JldHVybiBTZS5leHBvcnRzLnNvcnRCeSh0LFt0PT5lLm5vZGUodCkub3AsdD0+ZS5ub2RlKHQpLnRlbXBsYXRlSWQsdD0+ZS5uZWlnaGJvcnModCkubGVuZ3RoLHQ9PmUucHJlZGVjZXNzb3JzKHQpLmxlbmd0aCx0PT5lLnN1Y2Nlc3NvcnModCkubGVuZ3RoLHQ9PnQuc3Vic3RyKG4ubGVuZ3RoKV0pfWZ1bmN0aW9uIFJxdCh0LGUpe2lmKCEoZnVuY3Rpb24gbih0LGUpe2xldCBuPWxXdCh0KSxpPWxXdChlKTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKylpZihuW3RdIT09aVt0XSlyZXR1cm4hMTtyZXR1cm4hMH0pKHQsZSkpcmV0dXJuITE7bGV0IGk9dC5ncmFwaCgpLm5hbWUscj1lLmdyYXBoKCkubmFtZSxvPXt9LGE9e30scz1bXTtmdW5jdGlvbiBsKHQsZSl7bGV0IG49dC5zdWJzdHIoaS5sZW5ndGgpLGw9ZS5zdWJzdHIoci5sZW5ndGgpO3JldHVybiBvW25dXmFbbF0/KGNvbnNvbGUud2FybigiZGlmZmVyZW50IHZpc2l0IHBhdHRlcm4iLCJbIitpKyJdIixuLCJbIityKyJdIixsKSwhMCk6KG9bbl18fChvW25dPWFbbF09ITAscy5wdXNoKHtuMTp0LG4yOmV9KSksITEpfWxldCBjPXQuc291cmNlcygpLHU9ZS5zb3VyY2VzKCk7aWYoYy5sZW5ndGghPT11Lmxlbmd0aClyZXR1cm4gY29uc29sZS5sb2coImRpZmZlcmVudCBzb3VyY2UgbGVuZ3RoIiksITE7Yz1JcXQoYyx0LGkpLHU9SXF0KHUsZSxyKTtmb3IobGV0IHQ9MDt0PGMubGVuZ3RoO3QrKylpZihsKGNbdF0sdVt0XSkpcmV0dXJuITE7Zm9yKDtzLmxlbmd0aD4wOyl7bGV0IG49cy5wb3AoKTtpZighT3F0KHQubm9kZShuLm4xKSxlLm5vZGUobi5uMikpKXJldHVybiExO2xldCBvPXQuc3VjY2Vzc29ycyhuLm4xKSxhPWUuc3VjY2Vzc29ycyhuLm4yKTtpZihvLmxlbmd0aCE9PWEubGVuZ3RoKXJldHVybiBjb25zb2xlLmxvZygiIyBvZiBzdWNjZXNzb3JzIG1pc21hdGNoIixvLGEpLCExO289SXF0KG8sdCxpKSxhPUlxdChhLGUscik7Zm9yKGxldCB0PTA7dDxvLmxlbmd0aDt0KyspaWYobChvW3RdLGFbdF0pKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIE9xdCh0LGUpe2lmKHQudHlwZT09PWpHdC5NRVRBKXtsZXQgbj10LGk9ZTtyZXR1cm4gbi50ZW1wbGF0ZUlkJiZpLnRlbXBsYXRlSWQmJm4udGVtcGxhdGVJZD09PWkudGVtcGxhdGVJZH1pZih0LnR5cGU9PT1qR3QuT1AmJmUudHlwZT09PWpHdC5PUClyZXR1cm4gdC5vcD09PWUub3A7aWYodC50eXBlPT09akd0LlNFUklFUyYmZS50eXBlPT09akd0LlNFUklFUyl7bGV0IG49dCxpPWUscj1uLm1ldGFncmFwaC5ub2RlQ291bnQoKTtyZXR1cm4gcj09PWkubWV0YWdyYXBoLm5vZGVDb3VudCgpJiYoMD09PXJ8fG4ubWV0YWdyYXBoLm5vZGUobi5tZXRhZ3JhcGgubm9kZXMoKVswXSkub3A9PT1pLm1ldGFncmFwaC5ub2RlKGkubWV0YWdyYXBoLm5vZGVzKClbMF0pLm9wKX1yZXR1cm4hMX12YXIgenF0O05xdC50ZW1wbGF0ZT1fZWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5jbGlja2FibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuIHsKICAgICAgICBtYXJnaW4tbGVmdDogNDBweDsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbS5leGNsdWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuLmVkZ2UtbGFiZWwgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDNweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMXB4OwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgfQoKICAgICAgLmZhZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGAsdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTnF0LnByb3RvdHlwZSwiY2FyZE5vZGUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTnF0LnByb3RvdHlwZSwiaXRlbU5vZGUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTnF0LnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLE5xdC5wcm90b3R5cGUsIml0ZW1SZW5kZXJJbmZvIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLE5xdC5wcm90b3R5cGUsIm5hbWUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9pdGVtVHlwZUNoYW5nZWQifSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLE5xdC5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLE5xdC5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTnF0LnByb3RvdHlwZSwiY29sb3JCeVBhcmFtcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLE5xdC5wcm90b3R5cGUsInRlbXBsYXRlSW5kZXgiLHZvaWQgMCksTnF0PXQoW2koInRmLWdyYXBoLW9wLWNvbXBhdC1saXN0LWl0ZW0iKV0sTnF0KSwoZnVuY3Rpb24odCl7dFt0LlRFTVBMQVRFU19VUERBVEVEPTBdPSJURU1QTEFURVNfVVBEQVRFRCJ9KSh6cXR8fCh6cXQ9e30pKTtjbGFzcyBEcXQgZXh0ZW5kcyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnM9bmV3IE1hcH1nZXRMaXN0ZW5lcnModCl7cmV0dXJuIHRoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnMuaGFzKHQpfHx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLnNldCh0LFtdKSx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLmdldCh0KX1hZGRMaXN0ZW5lcih0LGUpe3RoaXMuZ2V0TGlzdGVuZXJzKHQpLnB1c2goZSl9cmVtb3ZlTGlzdGVuZXIodCxlKXtjb25zdCBuPXRoaXMuZ2V0TGlzdGVuZXJzKHQpLmZpbHRlcigodD0+dCE9PWUpKTt0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLnNldCh0LG4pfWRpc3BhdGNoRXZlbnQodCxlKXtmb3IoY29uc3QgbiBvZiB0aGlzLmdldExpc3RlbmVycyh0KSluKGUpfX17Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmhhc1NoYXBlSW5mbz0hMSx0aGlzLm1heE1ldGFFZGdlU2l6ZT0xLHRoaXMuZ3JhcGhPcHRpb25zPXt9LHRoaXMudGVtcGxhdGVzPW51bGwsdGhpcy5ncmFwaE9wdGlvbnMuY29tcG91bmQ9ITAsdGhpcy5ncmFwaE9wdGlvbnMucmFua2Rpcj10LnJhbmtEaXJlY3Rpb24sdGhpcy5yb290PSRHdChGR3QsdGhpcy5ncmFwaE9wdGlvbnMpLHRoaXMubGlicmFyeUZ1bmN0aW9ucz17fSx0aGlzLnNlcmllc0dyb3VwTWFwPW5ldyBNYXAodC5zZXJpZXNNYXApLHRoaXMuZGV2aWNlcz1udWxsLHRoaXMueGxhQ2x1c3RlcnM9bnVsbCx0aGlzLnZlcmlmeVRlbXBsYXRlPXQudmVyaWZ5VGVtcGxhdGUsdGhpcy5pbmRleD17fSx0aGlzLmluZGV4Ll9fcm9vdF9fPXRoaXMucm9vdCx0aGlzLm9yZGVyaW5ncz17fX1nZXRTZXJpZXNHcm91cFR5cGUodCl7dmFyIGU7cmV0dXJuIG51bGwhPT0oZT10aGlzLnNlcmllc0dyb3VwTWFwLmdldCh0KSkmJnZvaWQgMCE9PWU/ZTpXR3QuR1JPVVB9c2V0U2VyaWVzR3JvdXBUeXBlKHQsZSl7cmV0dXJuIHRoaXMuc2VyaWVzR3JvdXBNYXAuc2V0KHQsZSl9YnVpbGRTZXJpZXNHcm91cE1hcFRvZ2dsZWQodCl7Y29uc3QgZT10aGlzLmdldFNlcmllc0dyb3VwVHlwZSh0KT09PVdHdC5HUk9VUD9XR3QuVU5HUk9VUDpXR3QuR1JPVVA7cmV0dXJuIG5ldyBNYXAoWy4uLnRoaXMuc2VyaWVzR3JvdXBNYXAsW3QsZV1dKX1nZXROb2RlTWFwKCl7cmV0dXJuIHRoaXMuaW5kZXh9bm9kZSh0KXtyZXR1cm4gdGhpcy5pbmRleFt0XX1zZXROb2RlKHQsZSl7dGhpcy5pbmRleFt0XT1lfWdldEJyaWRnZWdyYXBoKHQpe2xldCBlPXRoaXMuaW5kZXhbdF07aWYoIWUpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5vZGUgaW4gaGllcmFyY2h5OiAiK3QpO2lmKCEoIm1ldGFncmFwaCJpbiBlKSlyZXR1cm4gbnVsbDtpZihlLmJyaWRnZWdyYXBoKXJldHVybiBlLmJyaWRnZWdyYXBoO2xldCBuPWUuYnJpZGdlZ3JhcGg9b1d0KCJCUklER0VHUkFQSCIsVUd0LkJSSURHRSx0aGlzLmdyYXBoT3B0aW9ucyk7aWYoIWUucGFyZW50Tm9kZXx8ISgibWV0YWdyYXBoImluIGUucGFyZW50Tm9kZSkpcmV0dXJuIG47bGV0IGk9ZS5wYXJlbnROb2RlLHI9aS5tZXRhZ3JhcGgsbz10aGlzLmdldEJyaWRnZWdyYXBoKGkubmFtZSk7cmV0dXJuIFNlLmV4cG9ydHMuZWFjaChbcixvXSwoZT0+e2UuZWRnZXMoKS5maWx0ZXIoKGU9PmUudj09PXR8fGUudz09PXQpKS5mb3JFYWNoKChpPT57bGV0IHI9aS53PT09dCxvPWUuZWRnZShpKTtTZS5leHBvcnRzLmVhY2goby5iYXNlRWRnZUxpc3QsKGU9PntsZXRbbyxhXT1yP1tlLncsaS52XTpbZS52LGkud10scz10aGlzLmdldENoaWxkTmFtZSh0LG8pLGw9e3Y6cj9hOnMsdzpyP3M6YX0sYz1uLmVkZ2UobCk7Y3x8KGM9Wkd0KGwudixsLncpLGMuaW5ib3VuZD1yLG4uc2V0RWRnZShsLnYsbC53LGMpKSxjLmFkZEJhc2VFZGdlKGUsdGhpcyl9KSl9KSl9KSksbn1nZXRDaGlsZE5hbWUodCxlKXtsZXQgbj10aGlzLmluZGV4W2VdO2Zvcig7bjspe2lmKG4ucGFyZW50Tm9kZSYmbi5wYXJlbnROb2RlLm5hbWU9PT10KXJldHVybiBuLm5hbWU7bj1uLnBhcmVudE5vZGV9dGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGltbWVkaWF0ZSBjaGlsZCBmb3IgZGVzY2VuZGFudDogIitlKX1nZXRQcmVkZWNlc3NvcnModCl7bGV0IGU9dGhpcy5pbmRleFt0XTtpZighZSl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSB3aXRoIG5hbWU6ICIrdCk7bGV0IG49dGhpcy5nZXRPbmVXYXlFZGdlcyhlLCEwKTtyZXR1cm4gZS5pc0dyb3VwTm9kZXx8U2UuZXhwb3J0cy5lYWNoKGUuaW5FbWJlZGRpbmdzLChpPT57U2UuZXhwb3J0cy5lYWNoKGUuaW5wdXRzLChlPT57aWYoZS5uYW1lPT09aS5uYW1lKXtsZXQgcj1uZXcgSkd0KGkubmFtZSx0KTtyLmFkZEJhc2VFZGdlKHtpc0NvbnRyb2xEZXBlbmRlbmN5OmUuaXNDb250cm9sRGVwZW5kZW5jeSxvdXRwdXRUZW5zb3JLZXk6ZS5vdXRwdXRUZW5zb3JLZXksaXNSZWZlcmVuY2VFZGdlOiExLHY6aS5uYW1lLHc6dH0sdGhpcyksbi5yZWd1bGFyLnB1c2gocil9fSkpfSkpLG59Z2V0U3VjY2Vzc29ycyh0KXtsZXQgZT10aGlzLmluZGV4W3RdO2lmKCFlKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtsZXQgbj10aGlzLmdldE9uZVdheUVkZ2VzKGUsITEpO3JldHVybiBlLmlzR3JvdXBOb2RlfHxTZS5leHBvcnRzLmVhY2goZS5vdXRFbWJlZGRpbmdzLChlPT57U2UuZXhwb3J0cy5lYWNoKGUuaW5wdXRzLChpPT57aWYoaS5uYW1lPT09dCl7bGV0IHI9bmV3IEpHdCh0LGUubmFtZSk7ci5hZGRCYXNlRWRnZSh7aXNDb250cm9sRGVwZW5kZW5jeTppLmlzQ29udHJvbERlcGVuZGVuY3ksb3V0cHV0VGVuc29yS2V5Omkub3V0cHV0VGVuc29yS2V5LGlzUmVmZXJlbmNlRWRnZTohMSx2OnQsdzplLm5hbWV9LHRoaXMpLG4ucmVndWxhci5wdXNoKHIpfX0pKX0pKSxufWdldE9uZVdheUVkZ2VzKHQsZSl7bGV0IG49e2NvbnRyb2w6W10scmVndWxhcjpbXX07aWYoIXQucGFyZW50Tm9kZXx8IXQucGFyZW50Tm9kZS5pc0dyb3VwTm9kZSlyZXR1cm4gbjtsZXQgaT10LnBhcmVudE5vZGUscj1pLm1ldGFncmFwaCxvPXRoaXMuZ2V0QnJpZGdlZ3JhcGgoaS5uYW1lKTtyZXR1cm4gQnF0KHIsdCxlLG4pLEJxdChvLHQsZSxuKSxufWdldFRvcG9sb2dpY2FsT3JkZXJpbmcodCl7bGV0IGU9dGhpcy5pbmRleFt0XTtpZighZSl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSB3aXRoIG5hbWU6ICIrdCk7aWYoIWUuaXNHcm91cE5vZGUpcmV0dXJuIG51bGw7aWYodCBpbiB0aGlzLm9yZGVyaW5ncylyZXR1cm4gdGhpcy5vcmRlcmluZ3NbdF07bGV0IG49e30saT17fSxyPWUubWV0YWdyYXBoO1NlLmV4cG9ydHMuZWFjaChyLmVkZ2VzKCksKHQ9PntyLmVkZ2UodCkubnVtUmVndWxhckVkZ2VzJiYodC52IGluIG58fChuW3Qudl09W10pLG5bdC52XS5wdXNoKHQudyksaVt0LnddPSEwKX0pKTtsZXQgbz1TZS5leHBvcnRzLmRpZmZlcmVuY2UoU2UuZXhwb3J0cy5rZXlzKG4pLFNlLmV4cG9ydHMua2V5cyhpKSksYT10aGlzLm9yZGVyaW5nc1t0XT17fSxzPTA7Zm9yKDtvLmxlbmd0aDspe2xldCB0PW8uc2hpZnQoKTthW3RdPXMrKyxTZS5leHBvcnRzLmVhY2goblt0XSwodD0+by5wdXNoKHQpKSksZGVsZXRlIG5bdF19cmV0dXJuIGF9Z2V0VGVtcGxhdGVJbmRleCgpe2lmKCF0aGlzLnRlbXBsYXRlcylyZXR1cm4gbnVsbDtsZXQgdD1MZyh0aGlzLnRlbXBsYXRlcyk7aWYoIXQubGVuZ3RoKXJldHVybiBudWxsO2xldCBlPUVNKCkuZG9tYWluKHQpLnJhbmdlKHpsKDAsdC5sZW5ndGgpKTtyZXR1cm4gdD0+ZSh0KX11cGRhdGVUZW1wbGF0ZXMoKXtDR3QoIkZpbmRpbmcgc2ltaWxhciBzdWJncmFwaHMiLCgoKT0+e3RoaXMudGVtcGxhdGVzPShmdW5jdGlvbiB0KGUsbil7bGV0IGk9KGZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gU2UuZXhwb3J0cy5yZWR1Y2UodCwoZnVuY3Rpb24odCxuKXtsZXQgaT1uWzBdLHI9W107cmV0dXJuIG5bMV0ubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspaWYoIWV8fFJxdChyW25dLm1ldGFub2RlLm1ldGFncmFwaCx0Lm1ldGFncmFwaCkpcmV0dXJuIHQudGVtcGxhdGVJZD1yW25dLm1ldGFub2RlLnRlbXBsYXRlSWQsdm9pZCByW25dLm1lbWJlcnMucHVzaCh0Lm5hbWUpO3QudGVtcGxhdGVJZD1pKyJbIityLmxlbmd0aCsiXSIsci5wdXNoKHttZXRhbm9kZTp0LG1lbWJlcnM6W3QubmFtZV19KX0pKSxyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RbZS5tZXRhbm9kZS50ZW1wbGF0ZUlkXT17bGV2ZWw6blsxXS5sZXZlbCxub2RlczplLm1lbWJlcnN9fSkpLHR9KSx7fSl9KSgoZnVuY3Rpb24gcih0KXtjb25zdCBlPXQuZ2V0Tm9kZU1hcCgpO2xldCBuPU9iamVjdC5rZXlzKGUpLnJlZHVjZSgoKHQsbik9Pntjb25zdCBpPWVbbl07aWYoaS50eXBlIT09akd0Lk1FVEEpcmV0dXJuIHQ7bGV0IHI9bi5zcGxpdCgiLyIpLmxlbmd0aC0xLG89KGZ1bmN0aW9uIGEodCl7cmV0dXJuIFNlLmV4cG9ydHMubWFwKHtkZXB0aDp0LmRlcHRoLCJ8VnwiOnQubWV0YWdyYXBoLm5vZGVzKCkubGVuZ3RoLCJ8RXwiOnQubWV0YWdyYXBoLmVkZ2VzKCkubGVuZ3RofSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSsiPSIrdH0pKS5qb2luKCIgIikrIiBbb3BzXSAiK1NlLmV4cG9ydHMubWFwKHQub3BIaXN0b2dyYW0sKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUrIj0iK3R9KSkuam9pbigiLCIpfSkoaSkscz10W29dfHx7bm9kZXM6W10sbGV2ZWw6cn07cmV0dXJuIHRbb109cyxzLm5vZGVzLnB1c2goaSkscy5sZXZlbD5yJiYocy5sZXZlbD1yKSx0fSkse30pO3JldHVybiBPYmplY3Qua2V5cyhuKS5tYXAoKHQ9Plt0LG5bdF1dKSkuZmlsdGVyKCgoW3QsZV0pPT57Y29uc3R7bm9kZXM6bn09ZTtpZihuLmxlbmd0aD4xKXJldHVybiEwO2NvbnN0IGk9blswXTtyZXR1cm4gaS50eXBlPT09akd0Lk1FVEEmJmkuYXNzb2NpYXRlZEZ1bmN0aW9ufSkpLnNvcnQoKChbdCxlXSk9PmUubm9kZXNbMF0uZGVwdGgpKX0pKGUpLG4pO3JldHVybiBPYmplY3Qua2V5cyhpKS5zb3J0KCh0PT5pW3RdLmxldmVsKSkucmVkdWNlKCgodCxlKT0+KHRbZV09aVtlXSx0KSkse30pfSkodGhpcyx0aGlzLnZlcmlmeVRlbXBsYXRlKSx0aGlzLmRpc3BhdGNoRXZlbnQoenF0LlRFTVBMQVRFU19VUERBVEVEKX0pLF9HdC5ISUVSQVJDSFlfRklORF9TSU1JTEFSX1NVQkdSQVBIUyl9fWZ1bmN0aW9uIEJxdCh0LGUsbixpKXtsZXQgcj1uP3QuaW5FZGdlcyhlLm5hbWUpOnQub3V0RWRnZXMoZS5uYW1lKTtTZS5leHBvcnRzLmVhY2gociwoZT0+e2xldCBuPXQuZWRnZShlKTsobi5udW1SZWd1bGFyRWRnZXM/aS5yZWd1bGFyOmkuY29udHJvbCkucHVzaChuKX0pKX1jb25zdCBIcXQ9e3ZlcmlmeVRlbXBsYXRlOiEwLHNlcmllc05vZGVNaW5TaXplOjUsc2VyaWVzTWFwOm5ldyBNYXAscmFua0RpcmVjdGlvbjoiQlQiLHVzZUdlbmVyYWxpemVkU2VyaWVzUGF0dGVybnM6ITF9O2Z1bmN0aW9uIEZxdCh0LGUsbil7Y29uc3QgaT1uZXcgRHF0KGUpLHI9e307cmV0dXJuIExHdCgiQWRkaW5nIG5vZGVzIiwzMCwoKCk9PntsZXQgZT17fSxuPXt9O1NlLmV4cG9ydHMuZWFjaCh0Lm5vZGVzLCgodCxpKT0+e3QuZGV2aWNlJiYoZVt0LmRldmljZV09ITApLHQueGxhQ2x1c3RlciYmKG5bdC54bGFDbHVzdGVyXT0hMCl9KSksaS5kZXZpY2VzPVNlLmV4cG9ydHMua2V5cyhlKSxpLnhsYUNsdXN0ZXJzPVNlLmV4cG9ydHMua2V5cyhuKSwoZnVuY3Rpb24gcih0LGUpe2NvbnN0IG49e307U2UuZXhwb3J0cy5lYWNoKGUubm9kZXMsKChlLGkpPT57bGV0IHI9Y1d0KGUubmFtZSksbz10LnJvb3Q7by5kZXB0aD1NYXRoLm1heChyLmxlbmd0aCxvLmRlcHRoKSxuW2Uub3BdfHwobltlLm9wXT1bXSksbltlLm9wXS5wdXNoKGUpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGgmJihvLmRlcHRoPU1hdGgubWF4KG8uZGVwdGgsci5sZW5ndGgtaSksby5jYXJkaW5hbGl0eSs9ZS5jYXJkaW5hbGl0eSxvLm9wSGlzdG9ncmFtW2Uub3BdPShvLm9wSGlzdG9ncmFtW2Uub3BdfHwwKSsxLG51bGwhPWUuZGV2aWNlJiYoby5kZXZpY2VIaXN0b2dyYW1bZS5kZXZpY2VdPShvLmRldmljZUhpc3RvZ3JhbVtlLmRldmljZV18fDApKzEpLG51bGwhPWUueGxhQ2x1c3RlciYmKG8ueGxhQ2x1c3Rlckhpc3RvZ3JhbVtlLnhsYUNsdXN0ZXJdPShvLnhsYUNsdXN0ZXJIaXN0b2dyYW1bZS54bGFDbHVzdGVyXXx8MCkrMSksZS5jb21wYXRpYmxlP28uY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShvLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTpvLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShvLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxLFNlLmV4cG9ydHMuZWFjaChlLmluRW1iZWRkaW5ncywodD0+e3QuY29tcGF0aWJsZT9vLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oby5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6by5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0oby5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pKSxTZS5leHBvcnRzLmVhY2goZS5vdXRFbWJlZGRpbmdzLCh0PT57dC5jb21wYXRpYmxlP28uY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShvLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTpvLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShvLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSkpLGkhPT1yLmxlbmd0aC0xKTtpKyspe2xldCBlPXJbaV0sYT10Lm5vZGUoZSk7aWYoIWEmJihhPSRHdChlLHQuZ3JhcGhPcHRpb25zKSxhLnBhcmVudE5vZGU9byx0LnNldE5vZGUoZSxhKSxvLm1ldGFncmFwaC5zZXROb2RlKGUsYSksMD09PWUuaW5kZXhPZihWR3QpJiZvLm5hbWU9PT1GR3QpKXtjb25zdCBpPWUuc3Vic3RyaW5nKFZHdC5sZW5ndGgpO25baV18fChuW2ldPVtdKSx0LmxpYnJhcnlGdW5jdGlvbnNbaV09e25vZGU6YSx1c2FnZXM6bltpXX0sYS5hc3NvY2lhdGVkRnVuY3Rpb249aX1vPWF9dC5zZXROb2RlKGUubmFtZSxlKSxlLnBhcmVudE5vZGU9byxvLm1ldGFncmFwaC5zZXROb2RlKGUubmFtZSxlKSxTZS5leHBvcnRzLmVhY2goZS5pbkVtYmVkZGluZ3MsKGZ1bmN0aW9uKG4pe3Quc2V0Tm9kZShuLm5hbWUsbiksbi5wYXJlbnROb2RlPWV9KSksU2UuZXhwb3J0cy5lYWNoKGUub3V0RW1iZWRkaW5ncywoZnVuY3Rpb24obil7dC5zZXROb2RlKG4ubmFtZSxuKSxuLnBhcmVudE5vZGU9ZX0pKX0pKX0pKGksdCl9KSxuLF9HdC5ISUVSQVJDSFlfQUREX05PREVTKS50aGVuKCgoKT0+TEd0KCJEZXRlY3Qgc2VyaWVzIiwzMCwoKCk9PntlLnNlcmllc05vZGVNaW5TaXplPjAmJlZxdChpLnJvb3QsaSxyLGUuc2VyaWVzTm9kZU1pblNpemUsZS5zZXJpZXNNYXAsZS51c2VHZW5lcmFsaXplZFNlcmllc1BhdHRlcm5zKX0pLG4sX0d0LkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTKSkpLnRoZW4oKCgpPT5MR3QoIkFkZGluZyBlZGdlcyIsNDAsKCgpPT57IShmdW5jdGlvbiBlKHQsbixpKXtsZXQgcj10LmdldE5vZGVNYXAoKSxvPVtdLGE9W10scz0odCxlKT0+e2xldCBuPTA7Zm9yKDt0OyllW24rK109dC5uYW1lLHQ9dC5wYXJlbnROb2RlO3JldHVybiBuLTF9O1NlLmV4cG9ydHMuZWFjaChuLmVkZ2VzLChlPT57bGV0IGk9cyhuLm5vZGVzW2Uudl0sbyksbD1zKG4ubm9kZXNbZS53XSxhKTtpZigtMT09PWl8fC0xPT09bClyZXR1cm47Zm9yKDtvW2ldPT09YVtsXTspaWYoaS0tLGwtLSxpPDB8fGw8MCl0aHJvdyBFcnJvcigiTm8gZGlmZmVyZW5jZSBmb3VuZCBiZXR3ZWVuIGFuY2VzdG9yIHBhdGhzLiIpO2xldCBjPXJbb1tpKzFdXSx1PW9baV0saD1hW2xdLGQ9Yy5tZXRhZ3JhcGguZWRnZSh1LGgpO2R8fChkPVpHdCh1LGgpLGMubWV0YWdyYXBoLnNldEVkZ2UodSxoLGQpKSxjLmhhc05vbkNvbnRyb2xFZGdlc3x8ZS5pc0NvbnRyb2xEZXBlbmRlbmN5fHwoYy5oYXNOb25Db250cm9sRWRnZXM9ITApLGQuYWRkQmFzZUVkZ2UoZSx0KX0pKX0pKGksdCl9KSxuLF9HdC5ISUVSQVJDSFlfQUREX0VER0VTKSkpLnRoZW4oKCgpPT5pKSl9ZnVuY3Rpb24gVnF0KHQsZSxuLGkscixvKXtsZXQgYT10Lm1ldGFncmFwaDtTZS5leHBvcnRzLmVhY2goYS5ub2RlcygpLCh0PT57bGV0IHM9YS5ub2RlKHQpO3MudHlwZT09PWpHdC5NRVRBJiZWcXQocyxlLG4saSxyLG8pfSkpO2xldCBzPShmdW5jdGlvbiBsKHQpe3JldHVybiBTZS5leHBvcnRzLnJlZHVjZSh0Lm5vZGVzKCksKChlLG4pPT57bGV0IGk9dC5ub2RlKG4pO2lmKGkudHlwZT09PWpHdC5NRVRBKXJldHVybiBlO2xldCByPWkub3A7cmV0dXJuIHImJihlW3JdPWVbcl18fFtdLGVbcl0ucHVzaChpLm5hbWUpKSxlfSkse30pfSkoYSksYz0obz9qcXQ6VXF0KShzLGEsZS5ncmFwaE9wdGlvbnMpO1NlLmV4cG9ydHMuZWFjaChjLChmdW5jdGlvbih0LHIpe2xldCBvPXQubWV0YWdyYXBoLm5vZGVzKCk7U2UuZXhwb3J0cy5lYWNoKG8sKHQ9PntsZXQgZT1hLm5vZGUodCk7ZS5vd25pbmdTZXJpZXN8fChlLm93bmluZ1Nlcmllcz1yKX0pKSxvLmxlbmd0aDxpJiZlLmdldFNlcmllc0dyb3VwVHlwZSh0Lm5hbWUpPT09V0d0LkdST1VQJiZlLnNldFNlcmllc0dyb3VwVHlwZSh0Lm5hbWUsV0d0LlVOR1JPVVApLGUuZ2V0U2VyaWVzR3JvdXBUeXBlKHQubmFtZSkhPT1XR3QuVU5HUk9VUCYmKGUuc2V0Tm9kZShyLHQpLGEuc2V0Tm9kZShyLHQpLFNlLmV4cG9ydHMuZWFjaChvLChlPT57bGV0IGk9YS5ub2RlKGUpO3QubWV0YWdyYXBoLnNldE5vZGUoZSxpKSx0LnBhcmVudE5vZGU9aS5wYXJlbnROb2RlLHQuY2FyZGluYWxpdHkrKyxudWxsIT1pLmRldmljZSYmKHQuZGV2aWNlSGlzdG9ncmFtW2kuZGV2aWNlXT0odC5kZXZpY2VIaXN0b2dyYW1baS5kZXZpY2VdfHwwKSsxKSxudWxsIT1pLnhsYUNsdXN0ZXImJih0LnhsYUNsdXN0ZXJIaXN0b2dyYW1baS54bGFDbHVzdGVyXT0odC54bGFDbHVzdGVySGlzdG9ncmFtW2kueGxhQ2x1c3Rlcl18fDApKzEpLGkuY29tcGF0aWJsZT90LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0odC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6dC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0odC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMSxTZS5leHBvcnRzLmVhY2goaS5pbkVtYmVkZGluZ3MsKGU9PntlLmNvbXBhdGlibGU/dC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KHQuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOnQuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KHQuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzF9KSksU2UuZXhwb3J0cy5lYWNoKGkub3V0RW1iZWRkaW5ncywoZT0+e2UuY29tcGF0aWJsZT90LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0odC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6dC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0odC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pKSxpLnBhcmVudE5vZGU9dCxuW2VdPXIsYS5yZW1vdmVOb2RlKGUpfSkpKX0pKX1mdW5jdGlvbiBVcXQodCxlLG4pe2xldCBpPXt9O3JldHVybiBTZS5leHBvcnRzLmVhY2godCwoZnVuY3Rpb24odCxyKXtpZih0Lmxlbmd0aDw9MSlyZXR1cm47bGV0IG89e307U2UuZXhwb3J0cy5lYWNoKHQsKGZ1bmN0aW9uKHQpe2NvbnN0IGU9IioiPT09dC5jaGFyQXQodC5sZW5ndGgtMSksaT10LnNwbGl0KCIvIikscj1pW2kubGVuZ3RoLTFdLGE9aS5zbGljZSgwLGkubGVuZ3RoLTEpLmpvaW4oIi8iKSxzPXIubWF0Y2goL14oXEQqKShcZCspJC8pO2xldCBsLGMsdT0iIjtzPyhsPXNbMV0sYz1zWzJdKToobD1lP3Iuc3Vic3RyKDAsci5sZW5ndGgtMSk6cixjPTAsdT1lPyIqIjoiIik7Y29uc3QgaD10V3QobCx1LGEpO29baF09b1toXXx8W107Y29uc3QgZD1RR3QobCx1LGEsK2MsdCxuKTtvW2hdLnB1c2goZCl9KSksU2UuZXhwb3J0cy5lYWNoKG8sKGZ1bmN0aW9uKHQsbyl7aWYodC5sZW5ndGg8MilyZXR1cm47dC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybit0LmNsdXN0ZXJJZC0rZS5jbHVzdGVySWR9KSk7bGV0IGE9W3RbMF1dO2ZvcihsZXQgbz0xO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dO3MuY2x1c3RlcklkIT09YVthLmxlbmd0aC0xXS5jbHVzdGVySWQrMT8oR3F0KGEsaSwrcixlLG4pLGE9W3NdKTphLnB1c2gocyl9R3F0KGEsaSwrcixlLG4pfSkpfSkpLGl9ZnVuY3Rpb24ganF0KHQsZSxuKXtsZXQgaT17fTtyZXR1cm4gU2UuZXhwb3J0cy5lYWNoKHQsKGZ1bmN0aW9uKHQscil7aWYodC5sZW5ndGg8PTEpcmV0dXJuO2xldCBvPXt9LGE9e307U2UuZXhwb3J0cy5lYWNoKHQsKGZ1bmN0aW9uKHQpe2xldCBlPSIqIj09PXQuY2hhckF0KHQubGVuZ3RoLTEpLGk9dC5zcGxpdCgiLyIpLHI9aVtpLmxlbmd0aC0xXSxzPWkuc2xpY2UoMCxpLmxlbmd0aC0xKS5qb2luKCIvIik7Y29uc3QgbD0vKFxkKykvZztsZXQgYyx1LGgsZCxwLGY9MDtmb3IoO2M9bC5leGVjKHIpOykrK2YsdT1yLnNsaWNlKDAsYy5pbmRleCksaD1jWzBdLGQ9ci5zbGljZShjLmluZGV4K2NbMF0ubGVuZ3RoKSxwPXRXdCh1LGQscyksb1twXT1vW3BdLG9bcF18fChvW3BdPVFHdCh1LGQscywraCx0LG4pKSxvW3BdLmlkcy5wdXNoKGgpLGFbdF09YVt0XXx8W10sYVt0XS5wdXNoKFtwLGhdKTtmPDEmJih1PWU/ci5zdWJzdHIoMCxyLmxlbmd0aC0xKTpyLGg9MCxkPWU/IioiOiIiLHA9dFd0KHUsZCxzKSxvW3BdPW9bcF0sb1twXXx8KG9bcF09UUd0KHUsZCxzLCtoLHQsbikpLG9bcF0uaWRzLnB1c2goaCksYVt0XT1hW3RdfHxbXSxhW3RdLnB1c2goW3AsaF0pKX0pKTt2YXIgcz17fTtTZS5leHBvcnRzLmVhY2goYSwoZnVuY3Rpb24odCxlKXt0LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG9bZVswXV0uaWRzLmxlbmd0aC1vW3RbMF1dLmlkcy5sZW5ndGh9KSk7dmFyIGk9dFswXVswXSxyPXRbMF1bMV07c1tpXT1zW2ldfHxbXTtjb25zdCBhPWUuc3BsaXQoIi8iKSxsPWEuc2xpY2UoMCxhLmxlbmd0aC0xKS5qb2luKCIvIik7dmFyIGM9UUd0KG9baV0ucHJlZml4LG9baV0uc3VmZml4LGwsK3IsZSxuKTtzW2ldLnB1c2goYyl9KSksU2UuZXhwb3J0cy5lYWNoKHMsKGZ1bmN0aW9uKHQsbyl7aWYodC5sZW5ndGg8MilyZXR1cm47dC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybit0LmNsdXN0ZXJJZC0rZS5jbHVzdGVySWR9KSk7bGV0IGE9W3RbMF1dO2ZvcihsZXQgbz0xO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dO3MuY2x1c3RlcklkIT09YVthLmxlbmd0aC0xXS5jbHVzdGVySWQrMT8oR3F0KGEsaSwrcixlLG4pLGE9W3NdKTphLnB1c2gocyl9R3F0KGEsaSwrcixlLG4pfSkpfSkpLGl9ZnVuY3Rpb24gR3F0KHQsZSxuLGkscil7aWYodC5sZW5ndGg+MSl7bGV0IG89dFd0KHRbMF0ucHJlZml4LHRbMF0uc3VmZml4LHRbMF0ucGFyZW50LHRbMF0uY2x1c3RlcklkLHRbdC5sZW5ndGgtMV0uY2x1c3RlcklkKSxhPVFHdCh0WzBdLnByZWZpeCx0WzBdLnN1ZmZpeCx0WzBdLnBhcmVudCxuLG8scik7U2UuZXhwb3J0cy5lYWNoKHQsKGZ1bmN0aW9uKHQpe2EuaWRzLnB1c2godC5jbHVzdGVySWQpLGEubWV0YWdyYXBoLnNldE5vZGUodC5uYW1lLGkubm9kZSh0Lm5hbWUpKX0pKSxlW29dPWF9fWxldCBXcXQ9Y2xhc3MgZXh0ZW5kcyhlcihpbCh5ZSkpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZXhwYW5kZWQ9ITAsdGhpcy5fb3BDb21wYXRDb2xvcj1oV3QsdGhpcy5fb3BJbmNvbXBhdENvbG9yPWRXdCx0aGlzLl90ZW1wbGF0ZUluZGV4PW51bGx9X2dldE5vZGUodCxlKXtyZXR1cm4gZS5ub2RlKHQpfV9nZXRSZW5kZXJJbmZvKHQsZSl7cmV0dXJuIHRoaXMucmVuZGVySGllcmFyY2h5LmdldE9yQ3JlYXRlUmVuZGVyTm9kZUJ5TmFtZSh0KX1fdG9nZ2xlRXhwYW5kZWQoKXt0aGlzLl9leHBhbmRlZD0hdGhpcy5fZXhwYW5kZWR9X2dldFRvZ2dsZUljb24odCl7cmV0dXJuIHQ/ImV4cGFuZC1sZXNzIjoiZXhwYW5kLW1vcmUifV9yZXNpemVMaXN0KHQpe3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7ZSYmZS5maXJlKCJpcm9uLXJlc2l6ZSIpfWdldCBfaW5jb21wYXRpYmxlT3BOb2Rlcygpe2NvbnN0IHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdCYmdC5yb290Pyh0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLCIjaW5jb21wYXRpYmxlT3BzTGlzdCIpKSwoZnVuY3Rpb24gZSh0KXtjb25zdCBlPVtdLG49e307cmV0dXJuIFNlLmV4cG9ydHMuZWFjaCh0LnJvb3QubGVhdmVzKCksKGk9PntsZXQgcj10Lm5vZGUoaSk7aWYoci50eXBlPT1qR3QuT1Ape2xldCBpPXI7aWYoIWkuY29tcGF0aWJsZSlpZihpLm93bmluZ1Nlcmllcyl7aWYodC5nZXRTZXJpZXNHcm91cFR5cGUoaS5vd25pbmdTZXJpZXMpPT09V0d0LlVOR1JPVVApZS5wdXNoKGkpO2Vsc2UgaWYoIW5baS5vd25pbmdTZXJpZXNdKXtsZXQgcj10Lm5vZGUoaS5vd25pbmdTZXJpZXMpO3ImJihuW2kub3duaW5nU2VyaWVzXT1yLGUucHVzaChyKSl9fWVsc2UgZS5wdXNoKGkpO1NlLmV4cG9ydHMuZWFjaChpLmluRW1iZWRkaW5ncywodD0+e3QuY29tcGF0aWJsZXx8ZS5wdXNoKHQpfSkpLFNlLmV4cG9ydHMuZWFjaChpLm91dEVtYmVkZGluZ3MsKHQ9Pnt0LmNvbXBhdGlibGV8fGUucHVzaCh0KX0pKX19KSksZX0pKHQpKTpbXX1nZXQgX29wQ29tcGF0U2NvcmUoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHQmJnQucm9vdCl7dmFyIGU9dC5yb290LG49ZS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGUsaT1lLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlO3JldHVybiAwPT1uJiYwPT1pPzA6TWF0aC5mbG9vcigxMDAqbi8obitpKSkvMTAwfXJldHVybiAwfWdldCBfb3BDb21wYXRTY29yZUxhYmVsKCl7dmFyIHQ9dGhpcy5fb3BDb21wYXRTY29yZTtyZXR1cm4gbXkoIi4wJSIpKHQpfWdldCBfdG90YWxJbmNvbXBhdE9wcygpe3ZhciB0PXRoaXMuZ3JhcGhIaWVyYXJjaHk7cmV0dXJuIHQmJnQucm9vdD90LnJvb3QuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU6MH1fZ3JhcGhIaWVyYXJjaHlDaGFuZ2VkKCl7dGhpcy5fdGVtcGxhdGVJbmRleD10aGlzLmdyYXBoSGllcmFyY2h5LmdldFRlbXBsYXRlSW5kZXgoKSx0aGlzLmdyYXBoSGllcmFyY2h5LmFkZExpc3RlbmVyKHpxdC5URU1QTEFURVNfVVBEQVRFRCwoKCk9Pnt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpfSkpfX07V3F0LnRlbXBsYXRlPV9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgbWF4LWhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIC5pbmNvbXBhdGlibGUtb3BzLWxpc3QgewogICAgICAgIGhlaWdodDogMzUwcHg7CiAgICAgICAgbWF4LWhlaWdodDogNDAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgaXJvbi1saXN0IHsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zZWNvbmRhcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgIH0KCiAgICAgIHBhcGVyLWl0ZW0tYm9keVt0d28tbGluZV0gewogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHggNHB4OwogICAgICB9CgogICAgICAuZXhwYW5kZWRJbmZvIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZvbnQtc2l6ZTogMTJwdDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm5vZGUtbmFtZSB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgZm9udC1zaXplOiAxNHB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5zdWJ0aXRsZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDEycHQ7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgbWF4LWhlaWdodDogMjBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLm5vbi1jb250cm9sLWxpc3QtaXRlbSB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgICB9CgogICAgICBkaXYub3AtY29tcGF0LWRpc3BsYXkgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2FkbHksIGJlY2F1c2UgdGhlIHdob2xlIGJvZHkgaXMgaW52ZXJ0ZWQgaW4gY29sb3IsIGxlZ2VuZHMgYWxzbyBuZWVkCiAgICAgICAqIHRvIGJlIGludmVydGVkLgogICAgICAgKiovCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIGRpdi5vcC1jb21wYXQtZGlzcGxheSB7CiAgICAgICAgZmlsdGVyOiBpbnZlcnQoMSk7CiAgICAgIH0KCiAgICAgIHN2Zy5vcC1jb21wYXQgewogICAgICAgIHdpZHRoOiAyNTBweDsKICAgICAgICBoZWlnaHQ6IDI1cHg7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgIH0KCiAgICAgIGRpdi5vcC1jb21wYXQtdmFsdWUgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiBibGFjazsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaXRlbT4KICAgICAgPHBhcGVyLWl0ZW0tYm9keSB0d28tbGluZT4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGljb249Int7X2dldFRvZ2dsZUljb24oX2V4cGFuZGVkKX19IgogICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICAgICAgICBjbGFzcz0idG9nZ2xlLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJub2RlLW5hbWUiIGlkPSJub2RldGl0bGUiPltbbm9kZVRpdGxlXV08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHNlY29uZGFyeT4KICAgICAgICAgIDxkaXYgY2xhc3M9InN1YnRpdGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3AtY29tcGF0LWRpc3BsYXkiPgogICAgICAgICAgICAgIDxzdmcKICAgICAgICAgICAgICAgIGNsYXNzPSJvcC1jb21wYXQiCiAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgdmlld0JveD0iMCAwIDI1MCAyNSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVmcz4KICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPSJvcC1jb21wYXQtZmlsbCI+CiAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yJD0iW1tfb3BDb21wYXRDb2xvcl1dIj48L3N0b3A+CiAgICAgICAgICAgICAgICAgICAgPHN0b3AKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCQ9IltbX29wQ29tcGF0U2NvcmVdXSIKICAgICAgICAgICAgICAgICAgICAgIHN0b3AtY29sb3IkPSJbW19vcENvbXBhdENvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0JD0iW1tfb3BDb21wYXRTY29yZV1dIgogICAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX29wSW5jb21wYXRDb2xvcl1dIgogICAgICAgICAgICAgICAgICAgID48L3N0b3A+CiAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yJD0iW1tfb3BJbmNvbXBhdENvbG9yIF1dIj48L3N0b3A+CiAgICAgICAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICA8cmVjdAogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjI1IgogICAgICAgICAgICAgICAgICB3aWR0aD0iMjUwIgogICAgICAgICAgICAgICAgICByeD0iNSIKICAgICAgICAgICAgICAgICAgcnk9IjUiCiAgICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiB1cmwoJyNvcC1jb21wYXQtZmlsbCcpOyIKICAgICAgICAgICAgICAgID48L3JlY3Q+CiAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3AtY29tcGF0LXZhbHVlIj5bW19vcENvbXBhdFNjb3JlTGFiZWxdXTwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3BhcGVyLWl0ZW0tYm9keT4KICAgIDwvcGFwZXItaXRlbT4KCiAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Int7X2V4cGFuZGVkfX0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2V4cGFuZGVkfX0iIHJlc3RhbXA9InRydWUiPgogICAgICAgIDxkaXYgY2xhc3M9ImV4cGFuZGVkSW5mbyI+CiAgICAgICAgICBJbmNvbXBhdGlibGUgT3BlcmF0aW9uczogKDxzcGFuPltbX3RvdGFsSW5jb21wYXRPcHNdXTwvc3Bhbj4pCiAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgIGNsYXNzPSJpbmNvbXBhdGlibGUtb3BzLWxpc3QiCiAgICAgICAgICAgIGlkPSJpbmNvbXBhdGlibGVPcHNMaXN0IgogICAgICAgICAgICBpdGVtcz0iW1tfaW5jb21wYXRpYmxlT3BOb2Rlc11dIgogICAgICAgICAgPgogICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgPHRmLWdyYXBoLW9wLWNvbXBhdC1saXN0LWl0ZW0KICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbV1dIgogICAgICAgICAgICAgICAgaXRlbS1yZW5kZXItaW5mbz0iW1tfZ2V0UmVuZGVySW5mbyhpdGVtLm5hbWUsIHJlbmRlckhpZXJhcmNoeSldXSIKICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgaXRlbS10eXBlPSJpbmNvbXBhdGlibGUtb3BzIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3RmLWdyYXBoLW9wLWNvbXBhdC1saXN0LWl0ZW0+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvaXJvbi1jb2xsYXBzZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLERxdCldLFdxdC5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLHlXdCldLFdxdC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxXcXQucHJvdG90eXBlLCJub2RlVGl0bGUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxXcXQucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV3F0LnByb3RvdHlwZSwiX29wQ29tcGF0Q29sb3IiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV3F0LnByb3RvdHlwZSwiX29wSW5jb21wYXRDb2xvciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFdxdC5wcm90b3R5cGUsIl90ZW1wbGF0ZUluZGV4Iix2b2lkIDApLHQoW3MoImdyYXBoSGllcmFyY2h5IiksZSgiZGVzaWduOnR5cGUiLEFycmF5KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxXcXQucHJvdG90eXBlLCJfaW5jb21wYXRpYmxlT3BOb2RlcyIsbnVsbCksdChbcygiZ3JhcGhIaWVyYXJjaHkiKSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxXcXQucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZSIsbnVsbCksdChbcygiX29wQ29tcGF0U2NvcmUiKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxXcXQucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZUxhYmVsIixudWxsKSx0KFtzKCJncmFwaEhpZXJhcmNoeSIpLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFdxdC5wcm90b3R5cGUsIl90b3RhbEluY29tcGF0T3BzIixudWxsKSx0KFthKCJncmFwaEhpZXJhcmNoeSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sV3F0LnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCksV3F0PXQoW2koInRmLWdyYXBoLW9wLWNvbXBhdC1jYXJkIildLFdxdCk7bGV0IHFxdD1jbGFzcyBleHRlbmRzKGVyKGlsKHllKSkpe19pdGVtVHlwZUNoYW5nZWQoKXsic3Vibm9kZSIhPT10aGlzLml0ZW1UeXBlP3RoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LmFkZCgiY2xpY2thYmxlIik6dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QucmVtb3ZlKCJjbGlja2FibGUiKX1fbm9kZUxpc3RlbmVyKHQpe3RoaXMuZmlyZSgibm9kZS1saXN0LWl0ZW0tIit0LnR5cGUse2NhcmROb2RlOnRoaXMuY2FyZE5vZGUubmFtZSxub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07cXF0LnRlbXBsYXRlPV9lYAogICAgPHN0eWxlPgogICAgICAjbGlzdC1pdGVtIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWdvb2dsZS15ZWxsb3ctMTAwKTsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgI2xpc3QtaXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXIteWVsbG93LTkwMCk7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIC5jbGlja2FibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuIHsKICAgICAgICBtYXJnaW4tbGVmdDogNDBweDsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbS5leGNsdWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuLmVkZ2UtbGFiZWwgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDNweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMXB4OwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgfQoKICAgICAgLmZhZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2CiAgICAgIGlkPSJsaXN0LWl0ZW0iCiAgICAgIG9uLW1vdXNlb3Zlcj0iX25vZGVMaXN0ZW5lciIKICAgICAgb24tbW91c2VvdXQ9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLWNsaWNrPSJfbm9kZUxpc3RlbmVyIgogICAgPgogICAgICA8ZGl2IGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhpdGVtUmVuZGVySW5mbyl9fSI+CiAgICAgICAgPHRmLW5vZGUtaWNvbgogICAgICAgICAgY2xhc3M9Im5vZGUtaWNvbiIKICAgICAgICAgIGhlaWdodD0iMTIiCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbY29sb3JCeVBhcmFtc11dIgogICAgICAgICAgbm9kZT0iW1tpdGVtTm9kZV1dIgogICAgICAgICAgcmVuZGVyLWluZm89IltbaXRlbVJlbmRlckluZm9dXSIKICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICA+PC90Zi1ub2RlLWljb24+CiAgICAgICAgPHNwYW4gdGl0bGUkPSJbW25hbWVdXSI+W1tuYW1lXV08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImVkZ2UtbGFiZWwiPltbZWRnZUxhYmVsXV08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxxcXQucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxxcXQucHJvdG90eXBlLCJpdGVtTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxxcXQucHJvdG90eXBlLCJlZGdlTGFiZWwiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scXF0LnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scXF0LnByb3RvdHlwZSwibmFtZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2l0ZW1UeXBlQ2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scXF0LnByb3RvdHlwZSwiaXRlbVR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scXF0LnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxxcXQucHJvdG90eXBlLCJjb2xvckJ5UGFyYW1zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHFxdC5wcm90b3R5cGUsInRlbXBsYXRlSW5kZXgiLHZvaWQgMCkscXF0PXQoW2koInRmLW5vZGUtbGlzdC1pdGVtIildLHFxdCk7bGV0IFlxdD1jbGFzcyBleHRlbmRzKGVyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2V4cGFuZGVkPSEwLHRoaXMuX29wZW5lZENvbnRyb2xQcmVkPSExLHRoaXMuX29wZW5lZENvbnRyb2xTdWNjPSExLHRoaXMuX3RlbXBsYXRlSW5kZXg9bnVsbH1leHBhbmROb2RlKCl7dGhpcy5maXJlKCJfbm9kZS5leHBhbmQiLHRoaXMubm9kZSl9X2dldE5vZGUodCxlKXtyZXR1cm4gZS5ub2RlKHQpfV9nZXROb2RlU3RhdHModCxlKXt2YXIgbj10aGlzLl9nZXROb2RlKHQsZSk7cmV0dXJuIG4/bi5zdGF0czpudWxsfV9nZXRUb3RhbE1pY3Jvcyh0KXtyZXR1cm4gdD90LmdldFRvdGFsTWljcm9zKCk6MH1nZXQgX2hhc0Rpc3BsYXlhYmxlTm9kZVN0YXRzKCl7cmV0dXJuIE9HdCh0aGlzLl9ub2RlU3RhdHMpfWdldCBfbm9kZVN0YXRzRm9ybWF0dGVkQnl0ZXMoKXt2YXIgdD10aGlzLl9ub2RlU3RhdHM7aWYodCYmdC50b3RhbEJ5dGVzKXJldHVybiBSR3QodC50b3RhbEJ5dGVzLE5HdCl9Z2V0IF9ub2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZSgpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztpZih0JiZ0LmdldFRvdGFsTWljcm9zKCkpcmV0dXJuIFJHdCh0LmdldFRvdGFsTWljcm9zKCksSUd0KX1nZXQgX25vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzKCl7dmFyIHQ9dGhpcy5fbm9kZVN0YXRzO2lmKHQmJnQub3V0cHV0U2l6ZSYmdC5vdXRwdXRTaXplLmxlbmd0aClyZXR1cm4gU2UuZXhwb3J0cy5tYXAodC5vdXRwdXRTaXplLChmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RoPyJzY2FsYXIiOiJbIit0LmpvaW4oIiwgIikrIl0ifSkpfV9nZXRSZW5kZXJJbmZvKHQsZSl7cmV0dXJuIHRoaXMucmVuZGVySGllcmFyY2h5LmdldE9yQ3JlYXRlUmVuZGVyTm9kZUJ5TmFtZSh0KX1nZXQgX2F0dHJpYnV0ZXMoKXt2YXIgdD10aGlzLl9ub2RlO2lmKHRoaXMuYXN5bmModGhpcy5fcmVzaXplTGlzdC5iaW5kKHRoaXMsIiNhdHRyaWJ1dGVzTGlzdCIpKSwhdHx8IXQuYXR0cilyZXR1cm5bXTt2YXIgZT1bXTtyZXR1cm4gU2UuZXhwb3J0cy5lYWNoKHQuYXR0ciwoZnVuY3Rpb24odCl7Il90b29fbGFyZ2VfYXR0cnMiPT09dC5rZXk/ZT1lLmNvbmNhdCh0LnZhbHVlLmxpc3Qucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntrZXk6dCx2YWx1ZToiVG9vIGxhcmdlIHRvIHNob3cuLi4ifX0pKSk6ZS5wdXNoKHtrZXk6dC5rZXksdmFsdWU6SlNPTi5zdHJpbmdpZnkodC52YWx1ZSl9KX0pKSxlfWdldCBfZGV2aWNlKCl7dmFyIHQ9dGhpcy5fbm9kZTtyZXR1cm4gdD90LmRldmljZTpudWxsfWdldCBfc3VjY2Vzc29ycygpe3ZhciB0PXRoaXMuX25vZGUsZT10aGlzLmdyYXBoSGllcmFyY2h5O3JldHVybiB0aGlzLl9yZWZyZXNoTm9kZUl0ZW1MaXN0KCJpbnB1dHNMaXN0IiksdD90aGlzLl9jb252ZXJ0RWRnZUxpc3RUb0VkZ2VJbmZvTGlzdChlLmdldFN1Y2Nlc3NvcnModC5uYW1lKSwhMSx0LmlzR3JvdXBOb2RlKTp7cmVndWxhcjpbXSxjb250cm9sOltdfX1nZXQgX3ByZWRlY2Vzc29ycygpe3ZhciB0PXRoaXMuX25vZGUsZT10aGlzLmdyYXBoSGllcmFyY2h5O3JldHVybiB0aGlzLl9yZWZyZXNoTm9kZUl0ZW1MaXN0KCJvdXRwdXRzTGlzdCIpLHQ/dGhpcy5fY29udmVydEVkZ2VMaXN0VG9FZGdlSW5mb0xpc3QoZS5nZXRQcmVkZWNlc3NvcnModC5uYW1lKSwhMCx0LmlzR3JvdXBOb2RlKTp7cmVndWxhcjpbXSxjb250cm9sOltdfX1nZXQgX2Z1bmN0aW9uVXNhZ2VzKCl7dmFyIHQ9dGhpcy5fbm9kZSxlPXRoaXMuZ3JhcGhIaWVyYXJjaHk7aWYodGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgiZnVuY3Rpb25Vc2FnZXNMaXN0IiksIXR8fHQudHlwZSE9PWpHdC5NRVRBKXJldHVybltdO2NvbnN0IG49ZS5saWJyYXJ5RnVuY3Rpb25zW3QuYXNzb2NpYXRlZEZ1bmN0aW9uXTtyZXR1cm4gbj9uLnVzYWdlczpbXX1fcmVmcmVzaE5vZGVJdGVtTGlzdCh0KXt0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLGAjJHt0fWApKX1fY29udmVydEVkZ2VMaXN0VG9FZGdlSW5mb0xpc3QodCxlLG4pe3ZhciBpPXQ9PlNlLmV4cG9ydHMubWFwKHQuYmFzZUVkZ2VMaXN0LCh0PT57dmFyIG49ZT90LnY6dC53O3JldHVybntuYW1lOm4sbm9kZTp0aGlzLl9nZXROb2RlKG4sdGhpcy5ncmFwaEhpZXJhcmNoeSksZWRnZUxhYmVsOnRxdCh0LHRoaXMucmVuZGVySGllcmFyY2h5KSxyZW5kZXJJbmZvOnRoaXMuX2dldFJlbmRlckluZm8obix0aGlzLnJlbmRlckhpZXJhcmNoeSl9fSkpLHI9ZnVuY3Rpb24odCl7dmFyIHI9W107cmV0dXJuIFNlLmV4cG9ydHMuZWFjaCh0LCh0PT57dmFyIG89ZT90LnY6dC53O24mJjEhPXQuYmFzZUVkZ2VMaXN0Lmxlbmd0aD9yLnB1c2goe25hbWU6byxub2RlOnRoaXMuX2dldE5vZGUobyx0aGlzLmdyYXBoSGllcmFyY2h5KSxlZGdlTGFiZWw6ZXF0KHQsdGhpcy5yZW5kZXJIaWVyYXJjaHkpLHJlbmRlckluZm86dGhpcy5fZ2V0UmVuZGVySW5mbyhvLHRoaXMucmVuZGVySGllcmFyY2h5KX0pOnI9ci5jb25jYXQoaSh0KSl9KSkscn0uYmluZCh0aGlzKTtyZXR1cm57cmVndWxhcjpyKHQucmVndWxhciksY29udHJvbDpyKHQuY29udHJvbCl9fWdldCBfc3Vibm9kZXMoKXt2YXIgdD10aGlzLl9ub2RlO3JldHVybiB0JiZ0Lm1ldGFncmFwaD90Lm1ldGFncmFwaC5ub2RlcygpOm51bGx9Z2V0IF90b3RhbFByZWRlY2Vzc29ycygpe3ZhciB0PXRoaXMuX3ByZWRlY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofWdldCBfdG90YWxTdWNjZXNzb3JzKCl7dmFyIHQ9dGhpcy5fc3VjY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofV90b2dnbGVDb250cm9sUHJlZCgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSF0aGlzLl9vcGVuZWRDb250cm9sUHJlZH1fdG9nZ2xlQ29udHJvbFN1Y2MoKXt0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hdGhpcy5fb3BlbmVkQ29udHJvbFN1Y2N9X3RvZ2dsZUV4cGFuZGVkKCl7dGhpcy5fZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfV9nZXRUb2dnbGVJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fcmVzZXRTdGF0ZSgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSExLHRoaXMuX29wZW5lZENvbnRyb2xTdWNjPSExLHRoaXMuc2V0KCJfZ3JvdXBCdXR0b25UZXh0IixwcXQodGhpcy5fbm9kZSkpfV9yZXNpemVMaXN0KHQpe3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7ZSYmZS5maXJlKCJpcm9uLXJlc2l6ZSIpfV90b2dnbGVJbmNsdWRlKCl7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1pbmNsdXNpb24iLHtuYW1lOnRoaXMuZ3JhcGhOb2RlTmFtZX0pfV9ub2RlSW5jbHVkZVN0YXRlQ2hhbmdlZCh0LGUpe3RoaXMuc2V0KCJfYXV4QnV0dG9uVGV4dCIsdVd0KHQpKX1fdG9nZ2xlR3JvdXAoKXt2YXIgdD1kcXQodGhpcy5fbm9kZSk7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIse25hbWU6dH0pfV9pc0xpYnJhcnlGdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5uYW1lLnN0YXJ0c1dpdGgoVkd0KX1faXNJblNlcmllcyh0KXtyZXR1cm4gaHF0KHQpfV9ncmFwaEhpZXJhcmNoeUNoYW5nZWQoKXt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpLHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoenF0LlRFTVBMQVRFU19VUERBVEVELCgoKT0+e3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl9KSl9fTtZcXQudGVtcGxhdGU9X2VgCiAgICA8c3R5bGU+CiAgICAgIC5zdWItbGlzdC1ncm91cCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBmb250LXNpemU6IDEycHQ7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDhweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgIH0KCiAgICAgIC5hdHRyLWxlZnQgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIHdpZHRoOiAzMCU7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KCiAgICAgIC5hdHRyLXJpZ2h0IHsKICAgICAgICBtYXJnaW4tbGVmdDogMzAlOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZSB7CiAgICAgICAgZGlzcGxheTogdGFibGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1yb3cgewogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdzsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0LXRhYmxlLXJvdyAuc3ViLWxpc3QtdGFibGUtY2VsbDpsYXN0LWNoaWxkIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0LXRhYmxlLWNlbGwgewogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgICAgIHBhZGRpbmc6IDAgNHB4OwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgIH0KCiAgICAgIHBhcGVyLWl0ZW0tYm9keVt0d28tbGluZV0gewogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHggNHB4OwogICAgICB9CgogICAgICAuZXhwYW5kZWRJbmZvIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgfQoKICAgICAgLmNvbnRyb2xEZXBzIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCA4cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIGZvbnQtc2l6ZTogMTRwdDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubm9kZS1pY29uIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KCiAgICAgIC5zdWJ0aXRsZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDEycHQ7CiAgICAgIH0KCiAgICAgIC5jb250cm9sTGluZSB7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgbWF4LWhlaWdodDogMjBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtdG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgbWF4LWhlaWdodDogMjBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlLWdyb3VwIHsKICAgICAgICBwYWRkaW5nLXRvcDogNHB4OwogICAgICB9CgogICAgICAudG9nZ2xlLWluY2x1ZGUgewogICAgICAgIG1hcmdpbjogNXB4IDZweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTBwdDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAudG9nZ2xlLWluY2x1ZGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWdvb2dsZS15ZWxsb3ctMTAwKTsKICAgICAgfQoKICAgICAgLm5vbi1jb250cm9sLWxpc3QtaXRlbSB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHBhcGVyLWl0ZW0+CiAgICAgIDxwYXBlci1pdGVtLWJvZHkgdHdvLWxpbmU+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICBpY29uPSJ7e19nZXRUb2dnbGVJY29uKF9leHBhbmRlZCl9fSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1idXR0b24iCiAgICAgICAgICA+CiAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm9kZS1uYW1lIj4KICAgICAgICAgICAgPHRmLXdici1zdHJpbmcgdmFsdWU9IltbX25vZGUubmFtZV1dIiBkZWxpbWl0ZXItcGF0dGVybj0iLyI+CiAgICAgICAgICAgIDwvdGYtd2JyLXN0cmluZz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPHRmLW5vZGUtaWNvbgogICAgICAgICAgICBjbGFzcz0ibm9kZS1pY29uIgogICAgICAgICAgICBub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgIHJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKGdyYXBoTm9kZU5hbWUsIHJlbmRlckhpZXJhcmNoeSldXSIKICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgPjwvdGYtbm9kZS1pY29uPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19ub2RlLm9wfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWJ0aXRsZSI+CiAgICAgICAgICAgICAgT3BlcmF0aW9uOgogICAgICAgICAgICAgIDxzcGFuPltbX25vZGUub3BdXTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19ub2RlLm1ldGFncmFwaH19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICAgIFN1YmdyYXBoOgogICAgICAgICAgICAgIDxzcGFuPltbX25vZGUuY2FyZGluYWxpdHldXTwvc3Bhbj4gbm9kZXMKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3BhcGVyLWl0ZW0tYm9keT4KICAgIDwvcGFwZXItaXRlbT4KICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfZXhwYW5kZWR9fSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZXhwYW5kZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXhwYW5kZWRJbmZvIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIGF0dHJpYnV0ZXMiPgogICAgICAgICAgICBBdHRyaWJ1dGVzICg8c3Bhbj5bW19hdHRyaWJ1dGVzLmxlbmd0aF1dPC9zcGFuPikKICAgICAgICAgICAgPGlyb24tbGlzdAogICAgICAgICAgICAgIGNsYXNzPSJzdWItbGlzdCIKICAgICAgICAgICAgICBpZD0iYXR0cmlidXRlc0xpc3QiCiAgICAgICAgICAgICAgaXRlbXM9IltbX2F0dHJpYnV0ZXNdXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItbGVmdCI+W1tpdGVtLmtleV1dPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItcmlnaHQiPltbaXRlbS52YWx1ZV1dPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZGV2aWNlfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBkZXZpY2UiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItbGVmdCI+RGV2aWNlPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXR0ci1yaWdodCI+W1tfZGV2aWNlXV08L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHByZWRlY2Vzc29ycyI+CiAgICAgICAgICAgIElucHV0cyAoPHNwYW4+W1tfdG90YWxQcmVkZWNlc3NvcnNdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgaWQ9ImlucHV0c0xpc3QiCiAgICAgICAgICAgICAgaXRlbXM9IltbX3ByZWRlY2Vzc29ycy5yZWd1bGFyXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0KICAgICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgZWRnZS1sYWJlbD0iW1tpdGVtLmVkZ2VMYWJlbF1dIgogICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InByZWRlY2Vzc29ycyIKICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19wcmVkZWNlc3NvcnMuY29udHJvbC5sZW5ndGhdXSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbERlcHMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbExpbmUiPgogICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICBpY29uPSJ7e19nZXRUb2dnbGVJY29uKF9vcGVuZWRDb250cm9sUHJlZCl9fSIKICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUNvbnRyb2xQcmVkIgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjb250cm9sLXRvZ2dsZS1idXR0b24iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgQ29udHJvbCBkZXBlbmRlbmNpZXMKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e19vcGVuZWRDb250cm9sUHJlZH19IiBuby1hbmltYXRpb24+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgICAgICAgICAgICAgaWY9Int7X29wZW5lZENvbnRyb2xQcmVkfX0iCiAgICAgICAgICAgICAgICAgICAgcmVzdGFtcD0idHJ1ZSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzdWItbGlzdCIKICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19wcmVkZWNlc3NvcnMuY29udHJvbF1dIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InByZWRlY2Vzc29ycyIKICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHN1Y2Nlc3NvcnMiPgogICAgICAgICAgICBPdXRwdXRzICg8c3Bhbj5bW190b3RhbFN1Y2Nlc3NvcnNdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgaWQ9Im91dHB1dHNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19zdWNjZXNzb3JzLnJlZ3VsYXJdXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICBjbGFzcz0ibm9uLWNvbnRyb2wtbGlzdC1pdGVtIgogICAgICAgICAgICAgICAgICBjYXJkLW5vZGU9IltbX25vZGVdXSIKICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIgogICAgICAgICAgICAgICAgICBlZGdlLWxhYmVsPSJbW2l0ZW0uZWRnZUxhYmVsXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iCiAgICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0ic3VjY2Vzc29yIgogICAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3N1Y2Nlc3NvcnMuY29udHJvbC5sZW5ndGhdXSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbERlcHMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbExpbmUiPgogICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICBpY29uPSJ7e19nZXRUb2dnbGVJY29uKF9vcGVuZWRDb250cm9sU3VjYyl9fSIKICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUNvbnRyb2xTdWNjIgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjb250cm9sLXRvZ2dsZS1idXR0b24iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgQ29udHJvbCBkZXBlbmRlbmNpZXMKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e19vcGVuZWRDb250cm9sU3VjY319IiBuby1hbmltYXRpb24+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgICAgICAgICAgICAgaWY9Int7X29wZW5lZENvbnRyb2xTdWNjfX0iCiAgICAgICAgICAgICAgICAgICAgcmVzdGFtcD0idHJ1ZSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxpcm9uLWxpc3QgY2xhc3M9InN1Yi1saXN0IiBpdGVtcz0iW1tfc3VjY2Vzc29ycy5jb250cm9sXV0iPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0KICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkLW5vZGU9IltbX25vZGVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1yZW5kZXItaW5mbz0iW1tpdGVtLnJlbmRlckluZm9dXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0ic3VjY2Vzc29ycyIKICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19oYXNEaXNwbGF5YWJsZU5vZGVTdGF0c319Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgbm9kZS1zdGF0cyI+CiAgICAgICAgICAgICAgTm9kZSBTdGF0cwogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlIj4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZVN0YXRzLnRvdGFsQnl0ZXN9fSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+TWVtb3J5PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgICAgICAgICBbW19ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlc11dCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZ2V0VG90YWxNaWNyb3MoX25vZGVTdGF0cyl9fSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+Q29tcHV0ZSBUaW1lPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgICAgICAgICBbW19ub2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZV1dCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZVN0YXRzLm91dHB1dFNpemV9fSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+VGVuc29yIE91dHB1dCBTaXplczwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgICAgICAgICBpdGVtcz0ie3tfbm9kZVN0YXRzRm9ybWF0dGVkT3V0cHV0U2l6ZXN9fSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgW1tpdGVtXV0gPGJyIC8+CiAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2Z1bmN0aW9uVXNhZ2VzLmxlbmd0aF1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgcHJlZGVjZXNzb3JzIj4KICAgICAgICAgICAgICBVc2FnZXMgb2YgdGhlIEZ1bmN0aW9uICg8c3Bhbj5bW19mdW5jdGlvblVzYWdlcy5sZW5ndGhdXTwvc3Bhbj4pCiAgICAgICAgICAgICAgPGlyb24tbGlzdAogICAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgICAgaWQ9ImZ1bmN0aW9uVXNhZ2VzTGlzdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19mdW5jdGlvblVzYWdlc11dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgICAgICBjYXJkLW5vZGU9IltbX25vZGVdXSIKICAgICAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbV1dIgogICAgICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJmdW5jdGlvblVzYWdlcyIKICAgICAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzTGlicmFyeUZ1bmN0aW9uKF9ub2RlKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9nZ2xlLWluY2x1ZGUtZ3JvdXAiPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgICAgIHJhaXNlZAogICAgICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1pbmNsdWRlIgogICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVJbmNsdWRlIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxzcGFuPltbX2F1eEJ1dHRvblRleHRdXTwvc3Bhbj4KICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfaXNJblNlcmllcyhfbm9kZSl9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1pbmNsdWRlLWdyb3VwIj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICByYWlzZWQKICAgICAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtaW5jbHVkZSIKICAgICAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlR3JvdXAiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHNwYW4+W1tfZ3JvdXBCdXR0b25UZXh0XV08L3NwYW4+CiAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvaXJvbi1jb2xsYXBzZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFlxdC5wcm90b3R5cGUsImdyYXBoTm9kZU5hbWUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsRHF0KV0sWXF0LnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWXF0LnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFlxdC5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9nZXROb2RlKGdyYXBoTm9kZU5hbWUsIGdyYXBoSGllcmFyY2h5KSIsb2JzZXJ2ZXI6Il9yZXNldFN0YXRlIn0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxZcXQucHJvdG90eXBlLCJfbm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldE5vZGVTdGF0cyhncmFwaE5vZGVOYW1lLCBncmFwaEhpZXJhcmNoeSkiLG9ic2VydmVyOiJfcmVzZXRTdGF0ZSJ9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWXF0LnByb3RvdHlwZSwiX25vZGVTdGF0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX25vZGVJbmNsdWRlU3RhdGVDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxZcXQucHJvdG90eXBlLCJub2RlSW5jbHVkZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFlxdC5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFlxdC5wcm90b3R5cGUsIl9vcGVuZWRDb250cm9sUHJlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFlxdC5wcm90b3R5cGUsIl9vcGVuZWRDb250cm9sU3VjYyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxZcXQucHJvdG90eXBlLCJfYXV4QnV0dG9uVGV4dCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxZcXQucHJvdG90eXBlLCJfZ3JvdXBCdXR0b25UZXh0Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sWXF0LnByb3RvdHlwZSwiX3RlbXBsYXRlSW5kZXgiLHZvaWQgMCksdChbcygiX25vZGVTdGF0cyIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxZcXQucHJvdG90eXBlLCJfaGFzRGlzcGxheWFibGVOb2RlU3RhdHMiLG51bGwpLHQoW3MoIl9ub2RlU3RhdHMiKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxZcXQucHJvdG90eXBlLCJfbm9kZVN0YXRzRm9ybWF0dGVkQnl0ZXMiLG51bGwpLHQoW3MoIl9ub2RlU3RhdHMiKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxZcXQucHJvdG90eXBlLCJfbm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWUiLG51bGwpLHQoW3MoIl9ub2RlU3RhdHMiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFlxdC5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRPdXRwdXRTaXplcyIsbnVsbCksdChbcygiX25vZGUiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFlxdC5wcm90b3R5cGUsIl9hdHRyaWJ1dGVzIixudWxsKSx0KFtzKCJfbm9kZSIpLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFlxdC5wcm90b3R5cGUsIl9kZXZpY2UiLG51bGwpLHQoW3MoIl9ub2RlIiwiZ3JhcGhIaWVyYXJjaHkiKSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxZcXQucHJvdG90eXBlLCJfc3VjY2Vzc29ycyIsbnVsbCksdChbcygiX25vZGUiLCJncmFwaEhpZXJhcmNoeSIpLGUoImRlc2lnbjp0eXBlIixPYmplY3QpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFlxdC5wcm90b3R5cGUsIl9wcmVkZWNlc3NvcnMiLG51bGwpLHQoW3MoIl9ub2RlIiwiZ3JhcGhIaWVyYXJjaHkiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFlxdC5wcm90b3R5cGUsIl9mdW5jdGlvblVzYWdlcyIsbnVsbCksdChbcygiX25vZGUiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFlxdC5wcm90b3R5cGUsIl9zdWJub2RlcyIsbnVsbCksdChbcygiX3ByZWRlY2Vzc29ycyIpLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFlxdC5wcm90b3R5cGUsIl90b3RhbFByZWRlY2Vzc29ycyIsbnVsbCksdChbcygiX3N1Y2Nlc3NvcnMiKSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxZcXQucHJvdG90eXBlLCJfdG90YWxTdWNjZXNzb3JzIixudWxsKSx0KFthKCJncmFwaEhpZXJhcmNoeSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWXF0LnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCksWXF0PXQoW2koInRmLW5vZGUtaW5mbyIpXSxZcXQpO2xldCBYcXQ9Y2xhc3MgZXh0ZW5kcyhlcih5ZSkpe3JlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtbGlzdC1pdGVtLWNsaWNrIix0aGlzLl9ub2RlTGlzdEl0ZW1DbGlja2VkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1saXN0LWl0ZW0tbW91c2VvdmVyIix0aGlzLl9ub2RlTGlzdEl0ZW1Nb3VzZW92ZXIuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLWxpc3QtaXRlbS1tb3VzZW91dCIsdGhpcy5fbm9kZUxpc3RJdGVtTW91c2VvdXQuYmluZCh0aGlzKSl9X25vZGVMaXN0SXRlbUNsaWNrZWQodCl7dGhpcy5zZWxlY3RlZE5vZGU9dC5kZXRhaWwubm9kZU5hbWV9X25vZGVMaXN0SXRlbU1vdXNlb3Zlcih0KXt0aGlzLmhpZ2hsaWdodGVkTm9kZT10LmRldGFpbC5ub2RlTmFtZX1fbm9kZUxpc3RJdGVtTW91c2VvdXQoKXt0aGlzLmhpZ2hsaWdodGVkTm9kZT1udWxsfV9oZWFsdGhQaWxsc0F2YWlsYWJsZSh0LGUpe3JldHVybiB0JiZlJiZPYmplY3Qua2V5cyhlKS5sZW5ndGg+MH1fZXF1YWxzKHQsZSl7cmV0dXJuIHQ9PT1lfX07WHF0LnRlbXBsYXRlPV9lYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXgtaGVpZ2h0OiA2NTBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgaDIgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tzZWxlY3RlZE5vZGV9fSI+CiAgICAgIDxwYXBlci1tYXRlcmlhbCBlbGV2YXRpb249IjEiIGNsYXNzPSJjYXJkIj4KICAgICAgICA8dGYtbm9kZS1pbmZvCiAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbZ3JhcGhIaWVyYXJjaHldXSIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgICBmbGF0LWdyYXBoPSJbW2dyYXBoXV0iCiAgICAgICAgICBncmFwaC1ub2RlLW5hbWU9Iltbc2VsZWN0ZWROb2RlXV0iCiAgICAgICAgICBub2RlLWluY2x1ZGU9Iltbc2VsZWN0ZWROb2RlSW5jbHVkZV1dIgogICAgICAgICAgaGlnaGxpZ2h0ZWQtbm9kZT0ie3toaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICA+CiAgICAgICAgPC90Zi1ub2RlLWluZm8+CiAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ29wX2NvbXBhdGliaWxpdHknKV1dIj4KICAgICAgPHRmLWdyYXBoLW9wLWNvbXBhdC1jYXJkCiAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIKICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgbm9kZS10aXRsZT0iW1tjb21wYXROb2RlVGl0bGVdXSIKICAgICAgPgogICAgICA8L3RmLWdyYXBoLW9wLWNvbXBhdC1jYXJkPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZQogICAgICBpcz0iZG9tLWlmIgogICAgICBpZj0iW1tfaGVhbHRoUGlsbHNBdmFpbGFibGUoZGVidWdnZXJEYXRhRW5hYmxlZCwgbm9kZU5hbWVzVG9IZWFsdGhQaWxscyldXSIKICAgID4KICAgICAgPHRmLWdyYXBoLWRlYnVnZ2VyLWRhdGEtY2FyZAogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgZGVidWdnZXItbnVtZXJpYy1hbGVydHM9IltbZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iCiAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgaGlnaGxpZ2h0ZWQtbm9kZT0ie3toaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgYWxsLXN0ZXBzLW1vZGUtZW5hYmxlZD0ie3thbGxTdGVwc01vZGVFbmFibGVkfX0iCiAgICAgICAgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iCiAgICAgID4KICAgICAgPC90Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQ+CiAgICA8L3RlbXBsYXRlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWHF0LnByb3RvdHlwZSwidGl0bGUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsRHF0KV0sWHF0LnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIscUd0KV0sWHF0LnByb3RvdHlwZSwiZ3JhcGgiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIseVd0KV0sWHF0LnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFhxdC5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLFhxdC5wcm90b3R5cGUsImhlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWHF0LnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxYcXQucHJvdG90eXBlLCJjb21wYXROb2RlVGl0bGUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFhxdC5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWHF0LnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxYcXQucHJvdG90eXBlLCJzZWxlY3RlZE5vZGVJbmNsdWRlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sWHF0LnByb3RvdHlwZSwiZGVidWdnZXJEYXRhRW5hYmxlZCIsdm9pZCAwKSxYcXQ9dChbaSgidGYtZ3JhcGgtaW5mbyIpXSxYcXQpO2NsYXNzICRxdHtjb25zdHJ1Y3Rvcih0LGUsbixpLHIsbyl7dGhpcy5zdmc9dCx0aGlzLmxhYmVsUGFkZGluZz1vLHRoaXMuem9vbUc9ZSx0aGlzLm1haW5ab29tPW4sdGhpcy5tYXhXYW5kSD1yO2xldCBhPVN1KGkuc2hhZG93Um9vdCkscz1hLnNlbGVjdCgic3ZnIiksbD1zLnNlbGVjdCgicmVjdCIpO3RoaXMudmlld3BvaW50Q29vcmQ9e3g6MCx5OjB9O2xldCBjPXZoKCkuc3ViamVjdChPYmplY3QpLm9uKCJkcmFnIiwodD0+e3RoaXMudmlld3BvaW50Q29vcmQueD11dS54LHRoaXMudmlld3BvaW50Q29vcmQueT11dS55LHRoaXMudXBkYXRlVmlld3BvaW50KCl9KSk7bC5kYXR1bSh0aGlzLnZpZXdwb2ludENvb3JkKS5jYWxsKGMpLHMub24oImNsaWNrIiwoKCk9PntpZih1dS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtsZXQgdD1OdW1iZXIobC5hdHRyKCJ3aWR0aCIpKSxlPU51bWJlcihsLmF0dHIoImhlaWdodCIpKSxuPWFoKHMubm9kZSgpKTt0aGlzLnZpZXdwb2ludENvb3JkLng9blswXS10LzIsdGhpcy52aWV3cG9pbnRDb29yZC55PW5bMV0tZS8yLHRoaXMudXBkYXRlVmlld3BvaW50KCl9KSksdGhpcy52aWV3cG9pbnQ9bC5ub2RlKCksdGhpcy5taW5pbWFwU3ZnPXMubm9kZSgpLHRoaXMubWluaW1hcD1pLHRoaXMuY2FudmFzPWEuc2VsZWN0KCJjYW52YXMuZmlyc3QiKS5ub2RlKCksdGhpcy5jYW52YXNCdWZmZXI9YS5zZWxlY3QoImNhbnZhcy5zZWNvbmQiKS5ub2RlKCksdGhpcy5kb3dubG9hZENhbnZhcz1hLnNlbGVjdCgiY2FudmFzLmRvd25sb2FkIikubm9kZSgpLFN1KHRoaXMuZG93bmxvYWRDYW52YXMpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMudXBkYXRlKCl9dXBkYXRlVmlld3BvaW50KCl7U3UodGhpcy52aWV3cG9pbnQpLmF0dHIoIngiLHRoaXMudmlld3BvaW50Q29vcmQueCkuYXR0cigieSIsdGhpcy52aWV3cG9pbnRDb29yZC55KTtsZXQgdD0tdGhpcy52aWV3cG9pbnRDb29yZC54KnRoaXMuc2NhbGVNYWluL3RoaXMuc2NhbGVNaW5pbWFwLGU9LXRoaXMudmlld3BvaW50Q29vcmQueSp0aGlzLnNjYWxlTWFpbi90aGlzLnNjYWxlTWluaW1hcDtTdSh0aGlzLnN2ZykuY2FsbCh0aGlzLm1haW5ab29tLnRyYW5zZm9ybSx2Ti50cmFuc2xhdGUodCxlKS5zY2FsZSh0aGlzLnNjYWxlTWFpbikpfWdldEltYWdlQmxvYigpe3JldHVybiBuZXcgUHJvbWlzZSgodD0+e3RoaXMuZG93bmxvYWRDYW52YXMudG9CbG9iKChlPT57dChlKX0pLCJpbWFnZS9wbmciKX0pKX11cGRhdGUoKXtsZXQgdD1udWxsO3RyeXtpZih0PXRoaXMuem9vbUcuZ2V0QkJveCgpLDA9PT10LndpZHRoKXJldHVybn1jYXRjaCh0KXtyZXR1cm59bGV0IGU9U3UodGhpcy5zdmcpLG49IiI7Y29uc3QgaT10aGlzLnN2ZyxyPShpLmdldFJvb3ROb2RlP2kuZ2V0Um9vdE5vZGUoKTp0aGlzLnN2Zy5wYXJlbnROb2RlKS5zdHlsZVNoZWV0cztmb3IobGV0IHQ9MDt0PHIubGVuZ3RoO3QrKyl0cnl7bGV0IGU9clt0XS5jc3NSdWxlc3x8clt0XS5ydWxlcztpZihudWxsPT1lKWNvbnRpbnVlO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKW4rPWVbdF0uY3NzVGV4dC5yZXBsYWNlKC8gP3RmLVtcdy1dKyA/L2csIiIpKyJcbiJ9Y2F0Y2godCl7aWYoIlNlY3VyaXR5RXJyb3IiIT09dC5uYW1lKXRocm93IHR9bGV0IG89ZS5hcHBlbmQoInN0eWxlIik7by50ZXh0KG4pO2xldCBhPVN1KHRoaXMuem9vbUcpLHM9YS5hdHRyKCJ0cmFuc2Zvcm0iKTthLmF0dHIoInRyYW5zZm9ybSIsbnVsbCksdC5oZWlnaHQrPXQueSx0LndpZHRoKz10LngsdC5oZWlnaHQrPTIqdGhpcy5sYWJlbFBhZGRpbmcsdC53aWR0aCs9Mip0aGlzLmxhYmVsUGFkZGluZyxlLmF0dHIoIndpZHRoIix0LndpZHRoKS5hdHRyKCJoZWlnaHQiLHQuaGVpZ2h0KSx0aGlzLnNjYWxlTWluaW1hcD10aGlzLm1heFdhbmRIL01hdGgubWF4KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMubWluaW1hcFNpemU9e3dpZHRoOnQud2lkdGgqdGhpcy5zY2FsZU1pbmltYXAsaGVpZ2h0OnQuaGVpZ2h0KnRoaXMuc2NhbGVNaW5pbWFwfSxTdSh0aGlzLm1pbmltYXBTdmcpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSksU3UodGhpcy5jYW52YXNCdWZmZXIpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSk7Y29uc3QgbD1TdSh0aGlzLmRvd25sb2FkQ2FudmFzKTtsLnN0eWxlKCJ3aWR0aCIsdC53aWR0aCksbC5zdHlsZSgiaGVpZ2h0Iix0LmhlaWdodCksbC5hdHRyKCJ3aWR0aCIsMyp0LndpZHRoKSxsLmF0dHIoImhlaWdodCIsMyp0LmhlaWdodCksbnVsbCE9dGhpcy50cmFuc2xhdGUmJm51bGwhPXRoaXMuem9vbSYmcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+dGhpcy56b29tKCkpKTtsZXQgYz0obmV3IFhNTFNlcmlhbGl6ZXIpLnNlcmlhbGl6ZVRvU3RyaW5nKHRoaXMuc3ZnKTtvLnJlbW92ZSgpLGUuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCksYS5hdHRyKCJ0cmFuc2Zvcm0iLHMpO2xldCB1PW5ldyBJbWFnZTt1Lm9ubG9hZD0oKT0+e2xldCB0PXRoaXMuY2FudmFzQnVmZmVyLmdldENvbnRleHQoIjJkIik7dC5jbGVhclJlY3QoMCwwLHRoaXMuY2FudmFzQnVmZmVyLndpZHRoLHRoaXMuY2FudmFzQnVmZmVyLmhlaWdodCksdC5kcmF3SW1hZ2UodSwwLDAsdGhpcy5taW5pbWFwU2l6ZS53aWR0aCx0aGlzLm1pbmltYXBTaXplLmhlaWdodCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e1N1KHRoaXMuY2FudmFzQnVmZmVyKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksU3UodGhpcy5jYW52YXMpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLFt0aGlzLmNhbnZhcyx0aGlzLmNhbnZhc0J1ZmZlcl09W3RoaXMuY2FudmFzQnVmZmVyLHRoaXMuY2FudmFzXX0pKTtsZXQgZT10aGlzLmRvd25sb2FkQ2FudmFzLmdldENvbnRleHQoIjJkIik7ZS5jbGVhclJlY3QoMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpLGUuZHJhd0ltYWdlKHUsMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpfSx1Lm9uZXJyb3I9KCk9PntsZXQgdD1uZXcgQmxvYihbY10se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCJ9KTt1LnNyYz1VUkwuY3JlYXRlT2JqZWN0VVJMKHQpfSx1LnNyYz0iZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoYyl9em9vbSh0KXtpZihudWxsPT10aGlzLnNjYWxlTWluaW1hcClyZXR1cm47dCYmKHRoaXMudHJhbnNsYXRlPVt0LngsdC55XSx0aGlzLnNjYWxlTWFpbj10LmspO2xldCBlPXRoaXMuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49U3UodGhpcy52aWV3cG9pbnQpO3RoaXMudmlld3BvaW50Q29vcmQueD0tdGhpcy50cmFuc2xhdGVbMF0qdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW4sdGhpcy52aWV3cG9pbnRDb29yZC55PS10aGlzLnRyYW5zbGF0ZVsxXSp0aGlzLnNjYWxlTWluaW1hcC90aGlzLnNjYWxlTWFpbjtsZXQgaT1lLndpZHRoKnRoaXMuc2NhbGVNaW5pbWFwL3RoaXMuc2NhbGVNYWluLHI9ZS5oZWlnaHQqdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47bi5hdHRyKCJ4Iix0aGlzLnZpZXdwb2ludENvb3JkLngpLmF0dHIoInkiLHRoaXMudmlld3BvaW50Q29vcmQueSkuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIscik7bGV0IG89dGhpcy5taW5pbWFwU2l6ZS53aWR0aCxhPXRoaXMubWluaW1hcFNpemUuaGVpZ2h0LHM9dGhpcy52aWV3cG9pbnRDb29yZC54LGw9dGhpcy52aWV3cG9pbnRDb29yZC55OyhNYXRoLm1pbihNYXRoLm1heCgwLHMraSksbyktTWF0aC5taW4oTWF0aC5tYXgoMCxzKSxvKSkqKE1hdGgubWluKE1hdGgubWF4KDAsbCtyKSxhKS1NYXRoLm1pbihNYXRoLm1heCgwLGwpLGEpKS8obyphKTwuOD90aGlzLm1pbmltYXAuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik6dGhpcy5taW5pbWFwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfX1sZXQgS3F0PWNsYXNzIGV4dGVuZHMgeWV7aW5pdCh0LGUsbixpLHIpe3JldHVybiBuZXcgJHF0KHQsZSxuLHRoaXMsaSxyKX19O0txdC50ZW1wbGF0ZT1fZWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBsaW5lYXI7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KC5oaWRkZW4pIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICBjYW52YXMgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAgIH0KCiAgICAgIHJlY3QgewogICAgICAgIGZpbGw6IHdoaXRlOwogICAgICAgIHN0cm9rZTogIzExMTExMTsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgICBmaWxsLW9wYWNpdHk6IDA7CiAgICAgICAgZmlsdGVyOiB1cmwoI21pbmltYXBEcm9wU2hhZG93KTsKICAgICAgICBjdXJzb3I6IG1vdmU7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHN2Zz4KICAgICAgPGRlZnM+CiAgICAgICAgPGZpbHRlcgogICAgICAgICAgaWQ9Im1pbmltYXBEcm9wU2hhZG93IgogICAgICAgICAgeD0iLTIwJSIKICAgICAgICAgIHk9Ii0yMCUiCiAgICAgICAgICB3aWR0aD0iMTUwJSIKICAgICAgICAgIGhlaWdodD0iMTUwJSIKICAgICAgICA+CiAgICAgICAgICA8ZmVPZmZzZXQgcmVzdWx0PSJvZmZPdXQiIGluPSJTb3VyY2VHcmFwaGljIiBkeD0iMSIgZHk9IjEiPjwvZmVPZmZzZXQ+CiAgICAgICAgICA8ZmVDb2xvck1hdHJpeAogICAgICAgICAgICByZXN1bHQ9Im1hdHJpeE91dCIKICAgICAgICAgICAgaW49Im9mZk91dCIKICAgICAgICAgICAgdHlwZT0ibWF0cml4IgogICAgICAgICAgICB2YWx1ZXM9IjAuMSAwIDAgMCAwIDAgMC4xIDAgMCAwIDAgMCAwLjEgMCAwIDAgMCAwIDAuNSAwIgogICAgICAgICAgPjwvZmVDb2xvck1hdHJpeD4KICAgICAgICAgIDxmZUdhdXNzaWFuQmx1cgogICAgICAgICAgICByZXN1bHQ9ImJsdXJPdXQiCiAgICAgICAgICAgIGluPSJtYXRyaXhPdXQiCiAgICAgICAgICAgIHN0ZERldmlhdGlvbj0iMiIKICAgICAgICAgID48L2ZlR2F1c3NpYW5CbHVyPgogICAgICAgICAgPGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iYmx1ck91dCIgbW9kZT0ibm9ybWFsIj48L2ZlQmxlbmQ+CiAgICAgICAgPC9maWx0ZXI+CiAgICAgIDwvZGVmcz4KICAgICAgPHJlY3Q+PC9yZWN0PgogICAgPC9zdmc+CiAgICA8Y2FudmFzIGNsYXNzPSJmaXJzdCI+PC9jYW52YXM+CiAgICA8IS0tIEFkZGl0aW9uYWwgY2FudmFzIHRvIHVzZSBhcyBidWZmZXIgdG8gYXZvaWQgZmxpY2tlcmluZyBiZXR3ZWVuIHVwZGF0ZXMgLS0+CiAgICA8Y2FudmFzIGNsYXNzPSJzZWNvbmQiPjwvY2FudmFzPgogICAgPGNhbnZhcyBjbGFzcz0iZG93bmxvYWQiPjwvY2FudmFzPgogIGAsS3F0PXQoW2koInRmLWdyYXBoLW1pbmltYXAiKV0sS3F0KTtjb25zdCBacXQ9X2VgCiAgPHN0eWxlPgogICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICBmaWx0ZXI6IGludmVydCgxKTsKICAgIH0KCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAjc3ZnIHsKICAgICAgZmxleDogMTsKICAgICAgZm9udC1mYW1pbHk6IFJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAjaGlkZGVuIHsKICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB0b3A6IDBweDsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgIHRleHQgewogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiAtLS0gTm9kZSBhbmQgYW5ub3RhdGlvbi1ub2RlIGZvciBNZXRhbm9kZSAtLS0gKi8KCiAgICAubWV0YSA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm1ldGEgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogaHNsKDAsIDAlLCA3MCUpOwogICAgfQogICAgLm5vZGUubWV0YS5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm5vZGUubWV0YS5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQogICAgLmFubm90YXRpb24ubWV0YS5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLmFubm90YXRpb24ubWV0YS5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgfQogICAgLm1ldGEuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgIC5tZXRhLnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQogICAgLm5vZGUubWV0YS5zZWxlY3RlZC5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm5vZGUubWV0YS5zZWxlY3RlZC5leHBhbmRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiA0OwogICAgfQoKICAgIC5mYWRlZCwKICAgIC5mYWRlZCByZWN0LAogICAgLmZhZGVkIGVsbGlwc2UsCiAgICAuZmFkZWQgcGF0aCwKICAgIC5mYWRlZCB1c2UsCiAgICAjcmVjdEhhdGNoIGxpbmUsCiAgICAjZWxsaXBzZUhhdGNoIGxpbmUgewogICAgICBjb2xvcjogI2UwZDRiMyAhaW1wb3J0YW50OwogICAgICBmaWxsOiB3aGl0ZTsKICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIHBhdGggewogICAgICBzdHJva2Utd2lkdGg6IDFweCAhaW1wb3J0YW50OwogICAgfQoKICAgIC5mYWRlZCByZWN0IHsKICAgICAgZmlsbDogdXJsKCNyZWN0SGF0Y2gpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIGVsbGlwc2UsCiAgICAuZmFkZWQgdXNlIHsKICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIHRleHQgewogICAgICBvcGFjaXR5OiAwOwogICAgfQoKICAgIC8qIFJ1bGVzIHVzZWQgZm9yIGlucHV0LXRyYWNpbmcuICovCiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gKiA+IHJlY3QsCiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gKiA+IGVsbGlwc2UsCiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gKiA+IHVzZSB7CiAgICAgIGZpbGw6IHdoaXRlOwogICAgICBzdHJva2U6ICNmZjk4MDAgIWltcG9ydGFudDsKICAgIH0KCiAgICAvKiAgLSBGYWRlZCBub24taW5wdXQgc3R5bGluZyAqLwogICAgLm5vbi1pbnB1dCA+ICogPiByZWN0LAoubm9uLWlucHV0ID4gKiA+IGVsbGlwc2UsCi5ub24taW5wdXQgPiAqID4gdXNlLAovKiBGb3IgQ29uc3Qgbm9kZXMuICovCi5ub24taW5wdXQgPiAqID4gLmNvbnN0YW50Om5vdChbY2xhc3MqPSJpbnB1dC1oaWdobGlnaHQiXSkgPgogIC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlLAovKiBGb3Igc3R5bGluZyBvZiBhbm5vdGF0aW9uIG5vZGVzIG9mIG5vbi1pbnB1dCBub2Rlcy4gKi8KLm5vbi1pbnB1dCA+IGcgPiAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIHN0cm9rZS13aWR0aDogaW5oZXJpdDsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogaW5oZXJpdDsKICAgIH0KCiAgICAubm9uLWlucHV0IHBhdGggewogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgLm5vbi1pbnB1dCA+IC5ub2Rlc2hhcGUgPiByZWN0LAoubm9uLWlucHV0ID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QsCi8qIEZvciBzdHlsaW5nIG9mIGFubm90YXRpb24gbm9kZXMgb2Ygbm9uLWlucHV0IG5vZGVzLiAqLwoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAubm9uLWlucHV0IGVsbGlwc2UsCiAgICAubm9uLWlucHV0IHVzZSB7CiAgICAgIGZpbGw6IHVybCgjZWxsaXBzZUhhdGNoKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC5ub24taW5wdXQgPiB0ZXh0IHsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICAubm9uLWlucHV0IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIG1hcmtlci1lbmQ6IHVybCgjYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC5ub24taW5wdXQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLnJlZmxpbmUgewogICAgICBtYXJrZXItc3RhcnQ6IHVybCgjcmVmLWFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgIH0KCiAgICAvKiBJbnB1dCBlZGdlcy4gKi8KICAgIC5pbnB1dC1lZGdlLWhpZ2hsaWdodCA+IHRleHQgewogICAgICBmaWxsOiBibGFjayAhaW1wb3J0YW50OwogICAgfQogICAgLmlucHV0LWhpZ2hsaWdodCA+IC5pbi1hbm5vdGF0aW9ucyA+IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSwKICAgIC5pbnB1dC1oaWdobGlnaHQtc2VsZWN0ZWQKICAgICAgPiAuaW4tYW5ub3RhdGlvbnMKICAgICAgPiAuYW5ub3RhdGlvbgogICAgICA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICBzdHJva2U6ICM5OTkgIWltcG9ydGFudDsKICAgIH0KCiAgICAvKiBOb24taW5wdXQgZWRnZXMuICovCiAgICAubm9uLWlucHV0LWVkZ2UtaGlnaGxpZ2h0LAoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gcGF0aCwKLyogQW5ub3RhdGlvbiBzdHlsZXMgKGxhYmVsIGFuZCBlZGdlcyByZXNwZWN0aXZlbHkpLiAqLwoubm9uLWlucHV0ID4gZyA+Ci5hbm5vdGF0aW9uOm5vdCguaW5wdXQtaGlnaGxpZ2h0KTpub3QoLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCkgPgouYW5ub3RhdGlvbi1sYWJlbAovKi5hbm5vdGF0aW9uLWVkZ2UqLyB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAvKiAtLS0gT3AgTm9kZSAtLS0gKi8KCiAgICAub3AgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiAjZmZmOwogICAgICBzdHJva2U6ICNjY2M7CiAgICB9CgogICAgLm9wLnNlbGVjdGVkID4gLm5vZGVzaGFwZSA+IC5ub2RlY29sb3J0YXJnZXQsCiAgICAub3Auc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gLm5vZGVjb2xvcnRhcmdldCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLm9wLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IC5ub2RlY29sb3J0YXJnZXQsCiAgICAub3AuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gLm5vZGVjb2xvcnRhcmdldCB7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KCiAgICAvKiAtLS0gU2VyaWVzIE5vZGUgLS0tICovCgogICAgLyogQnkgZGVmYXVsdCwgZG9uJ3Qgc2hvdyB0aGUgc2VyaWVzIGJhY2tncm91bmQgPHJlY3Q+LiAqLwogICAgLnNlcmllcyA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgZmlsbDogaHNsKDAsIDAlLCA3MCUpOwogICAgICBmaWxsLW9wYWNpdHk6IDA7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDUsIDU7CiAgICAgIHN0cm9rZS1vcGFjaXR5OiAwOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CgogICAgLyogT25jZSBleHBhbmRlZCwgc2hvdyB0aGUgc2VyaWVzIGJhY2tncm91bmQgPHJlY3Q+IGFuZCBoaWRlIHRoZSA8dXNlPi4gKi8KICAgIC5zZXJpZXMuZXhwYW5kZWQgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgIGZpbGwtb3BhY2l0eTogMC4xNTsKICAgICAgc3Ryb2tlOiBoc2woMCwgMCUsIDcwJSk7CiAgICAgIHN0cm9rZS1vcGFjaXR5OiAxOwogICAgfQogICAgLnNlcmllcy5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiB1c2UgewogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgLyoqCiAqIFRPRE86IFNpbXBsaWZ5IHRoaXMgYnkgYXBwbHlpbmcgYSBzdGFibGUgY2xhc3MgbmFtZSB0byBhbGwgPGc+CiAqIGVsZW1lbnRzIHRoYXQgY3VycmVudGx5IGhhdmUgZWl0aGVyIHRoZSBub2Rlc2hhcGUgb3IgYW5ub3RhdGlvbi1ub2RlIGNsYXNzZXMuCiAqLwogICAgLnNlcmllcyA+IC5ub2Rlc2hhcGUgPiB1c2UsCiAgICAuc2VyaWVzID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZTogI2NjYzsKICAgIH0KICAgIC5zZXJpZXMuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gdXNlLAogICAgLnNlcmllcy5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAuc2VyaWVzLnNlbGVjdGVkID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gdXNlIHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KCiAgICAuc2VyaWVzLnNlbGVjdGVkID4gLm5vZGVzaGFwZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC5hbm5vdGF0aW9uLnNlcmllcy5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC8qIC0tLSBCcmlkZ2UgTm9kZSAtLS0gKi8KICAgIC5icmlkZ2UgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogI2YwZjsKICAgICAgb3BhY2l0eTogMC4yOwogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qIC0tLSBTdHJ1Y3R1cmFsIEVsZW1lbnRzIC0tLSAqLwogICAgLmVkZ2UgPiBwYXRoLmVkZ2VsaW5lLnN0cnVjdHVyYWwgewogICAgICBzdHJva2U6ICNmMGY7CiAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAvKiBSZWZlcmVuY2UgRWRnZSAqLwogICAgLmVkZ2UgPiBwYXRoLmVkZ2VsaW5lLnJlZmVyZW5jZWVkZ2UgewogICAgICBzdHJva2U6ICNmZmI3NGQ7CiAgICAgIG9wYWNpdHk6IDE7CiAgICB9CgogICAgLyogLS0tIFNlcmllcyBOb2RlcyAtLS0gKi8KCiAgICAvKiBIaWRlIHRoZSByZWN0IGZvciBhIHNlcmllcycgYW5ub3RhdGlvbi4gKi8KICAgIC5zZXJpZXMgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIE5vZGUgbGFiZWwgLS0tICovCgogICAgLm5vZGUgewogICAgICAvKiBQcm92aWRlIGEgaGludCB0byBicm93c2VycyB0byBhdm9pZCB1c2luZyB0aGVpciBzdGF0aWMgcmFzdGVyaXphdGlvbgogICAgICBhdCBpbml0aWFsIHNjYWxlLCB3aGljaCBsb29rcyB2ZXJ5IHBpeGVsYXRlZCBvbiBDaHJvbWl1bSB3aGVuIHpvb21lZCBpbi4KICAgICAgTm90ZSB0aGF0IHdlIGludGVudGlvbmFsbHkgZG8gKm5vdCogdXNlICd3aWxsLWNoYW5nZTogdHJhbnNmb3JtJyBhbmQKICAgICAgJ3RyYW5zbGF0ZVooMCkgaGVyZSwgd2hpY2ggaW50cm9kdWNlIGJsdXJyaW5lc3Mgb24gRmlyZWZveC4KICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2lzc3Vlcy80NzQ0ICovCiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigxcHgpOwogICAgfQoKICAgIC5ub2RlID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGZpbGw6ICM0NDQ7CiAgICB9CgogICAgLm1ldGEuZXhwYW5kZWQgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgfQoKICAgIC5zZXJpZXMgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogOHB4OwogICAgfQoKICAgIC5vcCA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA2cHg7CiAgICB9CgogICAgLmJyaWRnZSA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAubm9kZS5tZXRhLmV4cGFuZGVkID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBjdXJzb3I6IG5vcm1hbDsKICAgIH0KCiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gdGV4dC5hbm5vdGF0aW9uLWxhYmVsIHsKICAgICAgZmlsbDogIzUwYTNmNzsKICAgIH0KCiAgICAuYW5ub3RhdGlvbi5tZXRhLnNlbGVjdGVkID4gdGV4dC5hbm5vdGF0aW9uLWxhYmVsIHsKICAgICAgZmlsbDogIzQyODVmNDsKICAgIH0KCiAgICAvKiAtLS0gQW5ub3RhdGlvbiAtLS0gKi8KCiAgICAvKiBvbmx5IGFwcGxpZWQgZm9yIGFubm90YXRpb25zIHRoYXQgYXJlIG5vdCBzdW1tYXJ5IG9yIGNvbnN0YW50LgooLnN1bW1hcnksIC5jb25zdGFudCBnZXRzIG92ZXJyaWRkZW4gYmVsb3cpICovCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLW5vZGUgPiAqIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAwLjU7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEsIDE7CiAgICB9CgogICAgLmFubm90YXRpb24uc3VtbWFyeSA+IC5hbm5vdGF0aW9uLW5vZGUgPiAqLAogICAgLmFubm90YXRpb24uY29uc3RhbnQgPiAuYW5ub3RhdGlvbi1ub2RlID4gKiB7CiAgICAgIHN0cm9rZS13aWR0aDogMTsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICBmaWxsOiBub25lOwogICAgICBzdHJva2U6ICNhYWE7CiAgICAgIHN0cm9rZS13aWR0aDogMC41OwogICAgICBtYXJrZXItZW5kOiB1cmwoI2Fubm90YXRpb24tYXJyb3doZWFkKTsKICAgIH0KCiAgICAuZmFkZWQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlIHsKICAgICAgbWFya2VyLWVuZDogdXJsKCNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCk7CiAgICB9CgogICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLnJlZmxpbmUgewogICAgICBtYXJrZXItc3RhcnQ6IHVybCgjcmVmLWFubm90YXRpb24tYXJyb3doZWFkKTsKICAgIH0KCiAgICAuZmFkZWQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLnJlZmxpbmUgewogICAgICBtYXJrZXItc3RhcnQ6IHVybCgjcmVmLWFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWNvbnRyb2wtZWRnZSB7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEsIDE7CiAgICB9CgogICAgI2Fubm90YXRpb24tYXJyb3doZWFkIHsKICAgICAgZmlsbDogI2FhYTsKICAgIH0KCiAgICAjYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQgewogICAgICBmaWxsOiAjZTBkNGIzOwogICAgfQoKICAgICNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjYWFhOwogICAgfQoKICAgICNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQgewogICAgICBmaWxsOiAjZTBkNGIzOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbGFiZWwgewogICAgICBmb250LXNpemU6IDVweDsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQogICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1sYWJlbC5hbm5vdGF0aW9uLWVsbGlwc2lzIHsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgfQoKICAgIC8qIEhpZGUgYW5ub3RhdGlvbnMgb24gZXhwYW5kZWQgbWV0YSBub2RlcyBzaW5jZSB0aGV5J3JlIHJlZHVuZGFudC4gKi8KICAgIC5leHBhbmRlZCA+IC5pbi1hbm5vdGF0aW9ucywKICAgIC5leHBhbmRlZCA+IC5vdXQtYW5ub3RhdGlvbnMgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qIC0tLSBBbm5vdGF0aW9uOiBDb25zdGFudCAtLS0gKi8KCiAgICAuY29uc3RhbnQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogIzg0ODQ4NDsKICAgIH0KCiAgICAuY29uc3RhbnQuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIGZpbGw6IHdoaXRlOwogICAgICBzdHJva2U6IHJlZDsKICAgIH0KCiAgICAuY29uc3RhbnQuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgfQoKICAgIC8qIC0tLSBBbm5vdGF0aW9uOiBTdW1tYXJ5IC0tLSAqLwoKICAgIC5zdW1tYXJ5ID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGZpbGw6ICNkYjQ0Mzc7CiAgICAgIHN0cm9rZTogI2RiNDQzNzsKICAgIH0KCiAgICAuc3VtbWFyeS5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgZmlsbDogI2E1MjcxNDsKICAgICAgc3Ryb2tlOiAjYTUyNzE0OwogICAgfQoKICAgIC5zdW1tYXJ5LmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICBzdHJva2Utd2lkdGg6IDEuNTsKICAgIH0KCiAgICAvKiAtLS0gRWRnZSAtLS0gKi8KCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUgewogICAgICBmaWxsOiBub25lOwogICAgICBzdHJva2U6ICNiYmI7CiAgICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAwLjc1OwogICAgfQoKICAgIC5lZGdlIC5zZWxlY3RhYmxlZWRnZSB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAuc2VsZWN0ZWRlZGdlID4gcGF0aC5lZGdlbGluZSB7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgc3Ryb2tlOiAjZjAwOwogICAgfQoKICAgIC5lZGdlLnNlbGVjdGVkZWRnZSB0ZXh0IHsKICAgICAgZmlsbDogIzAwMDsKICAgIH0KCiAgICAvKiBMYWJlbHMgc2hvd2luZyB0ZW5zb3Igc2hhcGVzIG9uIGVkZ2VzICovCiAgICAuZWRnZSA+IHRleHQgewogICAgICBmb250LXNpemU6IDMuNXB4OwogICAgICBmaWxsOiAjNjY2OwogICAgfQoKICAgIC5kYXRhZmxvdy1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjYmJiOwogICAgfQoKICAgIC5yZWZlcmVuY2UtYXJyb3doZWFkIHsKICAgICAgZmlsbDogI2ZmYjc0ZDsKICAgIH0KCiAgICAuc2VsZWN0ZWQtYXJyb3doZWFkIHsKICAgICAgZmlsbDogI2YwMDsKICAgIH0KCiAgICAuZWRnZSAuY29udHJvbC1kZXAgewogICAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgfQoKICAgIC8qIC0tLSBHcm91cCBub2RlIGV4cGFuZC9jb2xsYXBzZSBidXR0b24gLS0tICovCgogICAgLyogSGlkZXMgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbnMgd2hlbiBhIG5vZGUgaXNuJ3QgZXhwYW5kZWQgb3IgaGlnaGxpZ2h0ZWQuIFVzaW5nCiAgIGluY3JlZGlibHkgc21hbGwgb3BhY2l0eSBzbyB0aGF0IHRoZSBib3VuZGluZyBib3ggb2YgdGhlIDxnPiBwYXJlbnQgc3RpbGwgdGFrZXMKICAgdGhpcyBjb250YWluZXIgaW50byBhY2NvdW50IGV2ZW4gd2hlbiBpdCBpc24ndCB2aXNpYmxlICovCiAgICAubm9kZTpub3QoLmhpZ2hsaWdodGVkKTpub3QoLmV4cGFuZGVkKSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyIHsKICAgICAgb3BhY2l0eTogMC4wMTsKICAgIH0KICAgIC5ub2RlLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CiAgICAuYnV0dG9uY2lyY2xlIHsKICAgICAgZmlsbDogI2U3ODExZDsKICAgIH0KICAgIC5idXR0b25jaXJjbGU6aG92ZXIgewogICAgICBmaWxsOiAjYjk2NzE3OwogICAgfQogICAgLmV4cGFuZGJ1dHRvbiwKICAgIC5jb2xsYXBzZWJ1dHRvbiB7CiAgICAgIHN0cm9rZTogd2hpdGU7CiAgICB9CiAgICAvKiBEbyBub3QgbGV0IHRoZSBwYXRoIGVsZW1lbnRzIGluIHRoZSBidXR0b24gdGFrZSBwb2ludGVyIGZvY3VzICovCiAgICAubm9kZSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmV4cGFuZGJ1dHRvbiwKICAgIC5ub2RlID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgPiAuY29sbGFwc2VidXR0b24gewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KICAgIC8qIE9ubHkgc2hvdyB0aGUgZXhwYW5kIGJ1dHRvbiB3aGVuIGEgbm9kZSBpcyBjb2xsYXBzZWQgYW5kIG9ubHkgc2hvdyB0aGUKICAgY29sbGFwc2UgYnV0dG9uIHdoZW4gYSBub2RlIGlzIGV4cGFuZGVkLiAqLwogICAgLm5vZGUuZXhwYW5kZWQgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5leHBhbmRidXR0b24gewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQogICAgLm5vZGU6bm90KC5leHBhbmRlZCkgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5jb2xsYXBzZWJ1dHRvbiB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLmhlYWx0aC1waWxsLXN0YXRzIHsKICAgICAgZm9udC1zaXplOiA0cHg7CiAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICB9CgogICAgLmhlYWx0aC1waWxsIHJlY3QgewogICAgICBmaWx0ZXI6IHVybCgjaGVhbHRoLXBpbGwtc2hhZG93KTsKICAgICAgcng6IDM7CiAgICAgIHJ5OiAzOwogICAgfQoKICAgIC50aXRsZUNvbnRhaW5lciB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgdG9wOiAyMHB4OwogICAgfQoKICAgIC50aXRsZSwKICAgIC5hdXhUaXRsZSwKICAgIC5mdW5jdGlvbkxpYnJhcnlUaXRsZSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIH0KCiAgICAjbWluaW1hcCB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgcmlnaHQ6IDIwcHg7CiAgICAgIGJvdHRvbTogMjBweDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBkaXNwbGF5OiBub25lOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTJlMmUyOwogICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgbWluLXdpZHRoOiAxNTBweDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Q0ZDRkNDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHVsIHsKICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogICAgICBtYXJnaW46IDA7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgcGFkZGluZzogNHB4IDE2cHg7CiAgICB9CgogICAgLmNvbnRleHQtbWVudSB1bCBsaTpob3ZlciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgIGNvbG9yOiB3aGl0ZTsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9InRpdGxlQ29udGFpbmVyIj4KICAgIDxkaXYgaWQ9InRpdGxlIiBjbGFzcz0idGl0bGUiPk1haW4gR3JhcGg8L2Rpdj4KICAgIDxkaXYgaWQ9ImF1eFRpdGxlIiBjbGFzcz0iYXV4VGl0bGUiPkF1eGlsaWFyeSBOb2RlczwvZGl2PgogICAgPGRpdiBpZD0iZnVuY3Rpb25MaWJyYXJ5VGl0bGUiIGNsYXNzPSJmdW5jdGlvbkxpYnJhcnlUaXRsZSI+RnVuY3Rpb25zPC9kaXY+CiAgPC9kaXY+CiAgPHN2ZyBpZD0ic3ZnIj4KICAgIDxkZWZzPgogICAgICA8IS0tIEFycm93IGhlYWRzIGZvciByZWZlcmVuY2UgZWRnZSBwYXRocyBvZiBkaWZmZXJlbnQgcHJlZGVmaW5lZCBzaXplcyBwZXIgY29sb3IuIC0tPgogICAgICA8cGF0aAogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiCiAgICAgICAgZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIgogICAgICA+PC9wYXRoPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtc21hbGwiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjcmVmZXJlbmNlLWFycm93aGVhZC1wYXRoIj48L3VzZT4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIKICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1tZWRpdW0iCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxMyIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjEzIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLWxhcmdlIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMTYiCiAgICAgICAgbWFya2VySGVpZ2h0PSIxNiIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjcmVmZXJlbmNlLWFycm93aGVhZC1wYXRoIj48L3VzZT4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIKICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC14bGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIyMCIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjIwIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KCiAgICAgIDwhLS0gQXJyb3cgaGVhZHMgZm9yIGRhdGFmbG93IGVkZ2UgcGF0aHMgb2YgZGlmZmVyZW50IHByZWRlZmluZWQgc2l6ZXMgcGVyIGNvbG9yLiAtLT4KICAgICAgPHBhdGgKICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiCiAgICAgICAgZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIgogICAgICA+PC9wYXRoPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIKICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLXNtYWxsIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI2RhdGFmbG93LWFycm93aGVhZC1wYXRoIj48L3VzZT4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIgogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtbWVkaXVtIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMTMiCiAgICAgICAgbWFya2VySGVpZ2h0PSIxMyIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1sYXJnZSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjE2IgogICAgICAgIG1hcmtlckhlaWdodD0iMTYiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI2RhdGFmbG93LWFycm93aGVhZC1wYXRoIj48L3VzZT4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIgogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQteGxhcmdlIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMjAiCiAgICAgICAgbWFya2VySGVpZ2h0PSIyMCIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KCiAgICAgIDwhLS0gQXJyb3cgaGVhZCBmb3IgYW5ub3RhdGlvbiBlZGdlIHBhdGhzLiAtLT4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJhbm5vdGF0aW9uLWFycm93aGVhZCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iNSIKICAgICAgICByZWZZPSIyLjUiCiAgICAgICAgb3JpZW50PSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhdGggZD0iTSAwLDAgTCA1LDIuNSBMIDAsNSBMIDAsMCI+PC9wYXRoPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iNSIKICAgICAgICByZWZZPSIyLjUiCiAgICAgICAgb3JpZW50PSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhdGggZD0iTSAwLDAgTCA1LDIuNSBMIDAsNSBMIDAsMCI+PC9wYXRoPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjAiCiAgICAgICAgcmVmWT0iMi41IgogICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXRoIGQ9Ik0gNSwwIEwgMCwyLjUgTCA1LDUgTCA1LDAiPjwvcGF0aD4KICAgICAgPC9tYXJrZXI+CiAgICAgIDxtYXJrZXIKICAgICAgICBpZD0icmVmLWFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSIwIgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDUsMCBMIDAsMi41IEwgNSw1IEwgNSwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8IS0tIFRlbXBsYXRlIGZvciBhbiBPcCBub2RlIGVsbGlwc2UuIC0tPgogICAgICA8ZWxsaXBzZQogICAgICAgIGlkPSJvcC1ub2RlLXN0YW1wIgogICAgICAgIHJ4PSI3LjUiCiAgICAgICAgcnk9IjMiCiAgICAgICAgc3Ryb2tlPSJpbmhlcml0IgogICAgICAgIGZpbGw9ImluaGVyaXQiCiAgICAgID48L2VsbGlwc2U+CiAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGFuIE9wIG5vZGUgYW5ub3RhdGlvbiBlbGxpcHNlIChzbWFsbGVyKS4gLS0+CiAgICAgIDxlbGxpcHNlCiAgICAgICAgaWQ9Im9wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIKICAgICAgICByeD0iNSIKICAgICAgICByeT0iMiIKICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgZmlsbD0iaW5oZXJpdCIKICAgICAgPjwvZWxsaXBzZT4KICAgICAgPCEtLSBWZXJ0aWNhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIHdoZW4gdW5leHBhbmRlZC4gLS0+CiAgICAgIDxnIGlkPSJvcC1zZXJpZXMtdmVydGljYWwtc3RhbXAiPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjkiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjYiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjMiPjwvdXNlPgogICAgICA8L2c+CiAgICAgIDwhLS0gSG9yaXpvbnRhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIHdoZW4gdW5leHBhbmRlZC4gLS0+CiAgICAgIDxnIGlkPSJvcC1zZXJpZXMtaG9yaXpvbnRhbC1zdGFtcCI+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTYiIHk9IjQiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjEyIiB5PSI0Ij48L3VzZT4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI0Ij48L3VzZT4KICAgICAgPC9nPgogICAgICA8IS0tIEhvcml6b250YWxseSBzdGFja2VkIHNlcmllcyBvZiBPcCBub2RlcyBmb3IgYW5ub3RhdGlvbi4gLS0+CiAgICAgIDxnIGlkPSJvcC1zZXJpZXMtYW5ub3RhdGlvbi1zdGFtcCI+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIiB4PSI5IiB5PSIyIj48L3VzZT4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHg9IjciIHk9IjIiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iNSIgeT0iMiI+PC91c2U+CiAgICAgIDwvZz4KICAgICAgPHN2ZwogICAgICAgIGlkPSJzdW1tYXJ5LWljb24iCiAgICAgICAgZmlsbD0iIzg0ODQ4NCIKICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgIHZpZXdCb3g9IjAgMCAyNCAyNCIKICAgICAgICB3aWR0aD0iMTIiCiAgICAgID4KICAgICAgICA8cGF0aAogICAgICAgICAgZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiIKICAgICAgICA+PC9wYXRoPgogICAgICA8L3N2Zz4KCiAgICAgIDwhLS0gSGF0Y2ggcGF0dGVybnMgZm9yIGZhZGVkIG91dCBub2Rlcy4gLS0+CiAgICAgIDxwYXR0ZXJuCiAgICAgICAgaWQ9InJlY3RIYXRjaCIKICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtPSJyb3RhdGUoNDUgMCAwKSIKICAgICAgICB3aWR0aD0iNSIKICAgICAgICBoZWlnaHQ9IjUiCiAgICAgICAgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSI1IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIj48L2xpbmU+CiAgICAgIDwvcGF0dGVybj4KICAgICAgPHBhdHRlcm4KICAgICAgICBpZD0iZWxsaXBzZUhhdGNoIgogICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgIHdpZHRoPSIyIgogICAgICAgIGhlaWdodD0iMiIKICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjIiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgPC9wYXR0ZXJuPgoKICAgICAgPCEtLSBBIHNoYWRvdyBmb3IgaGVhbHRoIHBpbGxzLiAtLT4KICAgICAgPGZpbHRlcgogICAgICAgIGlkPSJoZWFsdGgtcGlsbC1zaGFkb3ciCiAgICAgICAgeD0iLTQwJSIKICAgICAgICB5PSItNDAlIgogICAgICAgIHdpZHRoPSIxODAlIgogICAgICAgIGhlaWdodD0iMTgwJSIKICAgICAgPgogICAgICAgIDxmZUdhdXNzaWFuQmx1ciBpbj0iU291cmNlQWxwaGEiIHN0ZERldmlhdGlvbj0iMC44Ij48L2ZlR2F1c3NpYW5CbHVyPgogICAgICAgIDxmZU9mZnNldCBkeD0iMCIgZHk9IjAiIHJlc3VsdD0ib2Zmc2V0Ymx1ciI+PC9mZU9mZnNldD4KICAgICAgICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0iIzAwMDAwMCI+PC9mZUZsb29kPgogICAgICAgIDxmZUNvbXBvc2l0ZSBpbjI9Im9mZnNldGJsdXIiIG9wZXJhdG9yPSJpbiI+PC9mZUNvbXBvc2l0ZT4KICAgICAgICA8ZmVNZXJnZT4KICAgICAgICAgIDxmZU1lcmdlTm9kZT48L2ZlTWVyZ2VOb2RlPgogICAgICAgICAgPGZlTWVyZ2VOb2RlIGluPSJTb3VyY2VHcmFwaGljIj48L2ZlTWVyZ2VOb2RlPgogICAgICAgIDwvZmVNZXJnZT4KICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8IS0tIE1ha2UgYSBsYXJnZSByZWN0YW5nbGUgdGhhdCBmaWxscyB0aGUgc3ZnIHNwYWNlIHNvIHRoYXQKICB6b29tIGV2ZW50cyBnZXQgY2FwdHVyZWQgb24gc2FmYXJpIC0tPgogICAgPHJlY3QgZmlsbD0id2hpdGUiIHdpZHRoPSIxMDAwMCIgaGVpZ2h0PSIxMDAwMCI+PC9yZWN0PgogICAgPGcgaWQ9InJvb3QiPjwvZz4KICA8L3N2Zz4KICA8dGYtZ3JhcGgtbWluaW1hcCBpZD0ibWluaW1hcCI+PC90Zi1ncmFwaC1taW5pbWFwPgogIDxkaXYgaWQ9ImNvbnRleHRNZW51IiBjbGFzcz0iY29udGV4dC1tZW51Ij48L2Rpdj4KYDtsZXQgSnF0PWNsYXNzIGV4dGVuZHMoZXIoaWwoeWUpKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3pvb21lZD0hMSx0aGlzLl96b29tU3RhcnRDb29yZHM9bnVsbCx0aGlzLl96b29tVHJhbnNmb3JtPW51bGwsdGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s9MjAsdGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemU9OSx0aGlzLm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZT02LHRoaXMubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udD0xMSx0aGlzLm1heE1ldGFub2RlTGFiZWxMZW5ndGg9MTh9Z2V0Tm9kZSh0KXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0KX1pc05vZGVFeHBhbmRlZCh0KXtyZXR1cm4gdC5leHBhbmRlZH1zZXROb2RlRXhwYW5kZWQodCl7dGhpcy5fYnVpbGQodGhpcy5yZW5kZXJIaWVyYXJjaHkpLHRoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1wYW5Ub05vZGUodCl7KGZ1bmN0aW9uIGUodCxuLGkscil7Y29uc3Qgbz1TdShuKS5zZWxlY3QoYFtkYXRhLW5hbWU9IiR7dH0iXWApLm5vZGUoKTtpZighbylyZXR1cm4gY29uc29sZS53YXJuKGBwYW5Ub05vZGUoKSBmYWlsZWQgZm9yIG5vZGUgbmFtZSAiJHt0fSJgKSwhMTtsZXQgYT1vLmdldEJCb3goKSxzPW8uZ2V0U2NyZWVuQ1RNKCksbD1uLmNyZWF0ZVNWR1BvaW50KCksYz1uLmNyZWF0ZVNWR1BvaW50KCk7bC54PWEueCxsLnk9YS55LGMueD1hLngrYS53aWR0aCxjLnk9YS55K2EuaGVpZ2h0LGw9bC5tYXRyaXhUcmFuc2Zvcm0ocyksYz1jLm1hdHJpeFRyYW5zZm9ybShzKTtsZXQgdT0odCxlLG4saSk9PiEodD5uJiZlPGkpLGg9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBkPWgudG9wK2guaGVpZ2h0LTE1MDtpZih1KGwueCxjLngsaC5sZWZ0LGgubGVmdCtoLndpZHRoLTMyMCl8fHUobC55LGMueSxoLnRvcCxkKSl7bGV0IHQ9aC5sZWZ0K2gud2lkdGgvMi0obC54K2MueCkvMixlPWgudG9wK2guaGVpZ2h0LzItKGwueStjLnkpLzI7Y29uc3QgaT1iTihuKTtyZXR1cm4gU3UobikudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuY2FsbChyLnRyYW5zbGF0ZUJ5LHQvaS5rLGUvaS5rKSwhMH1yZXR1cm4hMX0pKHQsdGhpcy4kLnN2ZywwLHRoaXMuX3pvb20pJiYodGhpcy5fem9vbWVkPSEwKX1nZXRHcmFwaFN2Z1Jvb3QoKXtyZXR1cm4gdGhpcy4kLnN2Z31nZXRDb250ZXh0TWVudSgpe3JldHVybiB0aGlzLiQuY29udGV4dE1lbnV9X3Jlc2V0U3RhdGUoKXt0aGlzLl9ub2RlR3JvdXBJbmRleD17fSx0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleD17fSx0aGlzLl9lZGdlR3JvdXBJbmRleD17fSx0aGlzLl91cGRhdGVMYWJlbHMoITEpLFN1KHRoaXMuJC5zdmcpLnNlbGVjdCgiI3Jvb3QiKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSxicXQodGhpcy4kLnN2Zyl9X2J1aWxkKHQpe3RoaXMudGVtcGxhdGVJbmRleD10LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksQ0d0KCJ0Zi1ncmFwaC1zY2VuZSAobGF5b3V0KToiLGZ1bmN0aW9uKCl7Uld0KHQucm9vdCl9LmJpbmQodGhpcyksX0d0LlJFTkRFUl9TQ0VORV9MQVlPVVQpLENHdCgidGYtZ3JhcGgtc2NlbmUgKGJ1aWxkIHNjZW5lKToiLGZ1bmN0aW9uKCl7THF0KFN1KHRoaXMuJC5yb290KSx0LnJvb3QsdGhpcyksKGZ1bmN0aW9uIGUodCxuKXtTdSh0KS5vbigiY2xpY2siLCgoKT0+e24uZmlyZSgiZ3JhcGgtc2VsZWN0Iil9KSl9KSh0aGlzLiQuc3ZnLHRoaXMpLHRoaXMuX3VwZGF0ZUlucHV0VHJhY2UoKX0uYmluZCh0aGlzKSxfR3QuUkVOREVSX1NDRU5FX0JVSUxEX1NDRU5FKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSGVhbHRoUGlsbHModGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHRoaXMuaGVhbHRoUGlsbFN0ZXBJbmRleCksdGhpcy5taW5pbWFwLnVwZGF0ZSgpfS5iaW5kKHRoaXMpLE5XdC5hbmltYXRpb24uZHVyYXRpb24pfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl96b29tPWtOKCkub24oImVuZCIsZnVuY3Rpb24oKXt0aGlzLl96b29tU3RhcnRDb29yZHMmJihNYXRoLnNxcnQoTWF0aC5wb3codGhpcy5fem9vbVN0YXJ0Q29vcmRzLngtdGhpcy5fem9vbVRyYW5zZm9ybS54LDIpK01hdGgucG93KHRoaXMuX3pvb21TdGFydENvb3Jkcy55LXRoaXMuX3pvb21UcmFuc2Zvcm0ueSwyKSk8dGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s/dGhpcy5fZmlyZUVuYWJsZUNsaWNrKCk6c2V0VGltZW91dCh0aGlzLl9maXJlRW5hYmxlQ2xpY2suYmluZCh0aGlzKSw1MCkpLHRoaXMuX3pvb21TdGFydENvb3Jkcz1udWxsfS5iaW5kKHRoaXMpKS5vbigiem9vbSIsZnVuY3Rpb24oKXt0aGlzLl96b29tVHJhbnNmb3JtPXV1LnRyYW5zZm9ybSx0aGlzLl96b29tU3RhcnRDb29yZHN8fCh0aGlzLl96b29tU3RhcnRDb29yZHM9dGhpcy5fem9vbVRyYW5zZm9ybSx0aGlzLmZpcmUoImRpc2FibGUtY2xpY2siKSksdGhpcy5fem9vbWVkPSEwLFN1KHRoaXMuJC5yb290KS5hdHRyKCJ0cmFuc2Zvcm0iLHV1LnRyYW5zZm9ybSksdGhpcy5taW5pbWFwLnpvb20odXUudHJhbnNmb3JtKX0uYmluZCh0aGlzKSksU3UodGhpcy4kLnN2ZykuY2FsbCh0aGlzLl96b29tKS5vbigiZGJsY2xpY2suem9vbSIsbnVsbCksU3Uod2luZG93KS5vbigicmVzaXplIixmdW5jdGlvbigpe3RoaXMubWluaW1hcC56b29tKCl9LmJpbmQodGhpcykpLHRoaXMubWluaW1hcD10aGlzLiQubWluaW1hcC5pbml0KHRoaXMuJC5zdmcsdGhpcy4kLnJvb3QsdGhpcy5fem9vbSxOV3QubWluaW1hcC5zaXplLE5XdC5zdWJzY2VuZS5tZXRhLmxhYmVsSGVpZ2h0KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9X3JlbmRlckhpZXJhcmNoeUNoYW5nZWQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeTt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMSx0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fYnVpbGQodCl9X2FuaW1hdGVBbmRGaXQoKXshdGhpcy5faGFzUmVuZGVySGllcmFyY2h5QmVlbkZpdE9uY2UmJnRoaXMuX2lzQXR0YWNoZWQmJnNldFRpbWVvdXQodGhpcy5maXQuYmluZCh0aGlzKSxOV3QuYW5pbWF0aW9uLmR1cmF0aW9uKX1fdXBkYXRlTGFiZWxzKHQpe3ZhciBlPXRoaXMuJCQoIi50aXRsZSIpLG49ZS5zdHlsZSxpPXRoaXMuJCQoIi5hdXhUaXRsZSIpLHI9aS5zdHlsZSxvPXRoaXMuJCQoIi5mdW5jdGlvbkxpYnJhcnlUaXRsZSIpLnN0eWxlO2NvbnN0IGE9U3UodGhpcy4kLnN2Zyk7dmFyIHM9YS5zZWxlY3QoIi4iK1ZXdC5TY2VuZS5HUk9VUCsiPi4iK1ZXdC5TY2VuZS5DT1JFKS5ub2RlKCk7aWYodCYmcyYmdGhpcy5wcm9ncmVzcyYmMTAwPT09dGhpcy5wcm9ncmVzcy52YWx1ZSl7dmFyIGw9YS5zZWxlY3QoIi4iK1ZXdC5TY2VuZS5HUk9VUCsiPi4iK1ZXdC5TY2VuZS5JTkVYVFJBQ1QpLm5vZGUoKXx8YS5zZWxlY3QoIi4iK1ZXdC5TY2VuZS5HUk9VUCsiPi4iK1ZXdC5TY2VuZS5PVVRFWFRSQUNUKS5ub2RlKCksYz1zLmdldENUTSgpLmUsdT1sP2wuZ2V0Q1RNKCkuZTpudWxsO24uZGlzcGxheT0iaW5saW5lIixuLmxlZnQ9YysicHgiLG51bGwhPT11JiZ1IT09Yz8oci5kaXNwbGF5PSJpbmxpbmUiLHU9TWF0aC5tYXgoYytlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLHUpLHIubGVmdD11KyJweCIpOnIuZGlzcGxheT0ibm9uZSI7bGV0IHQ9YS5zZWxlY3QoIi4iK1ZXdC5TY2VuZS5HUk9VUCsiPi4iK1ZXdC5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5ub2RlKCksaD10P3QuZ2V0Q1RNKCkuZTpudWxsO251bGwhPT1oJiZoIT09dT8oby5kaXNwbGF5PSJpbmxpbmUiLGg9TWF0aC5tYXgodStpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLGgpLG8ubGVmdD1oKyJweCIpOm8uZGlzcGxheT0ibm9uZSJ9ZWxzZSBuLmRpc3BsYXk9Im5vbmUiLHIuZGlzcGxheT0ibm9uZSIsby5kaXNwbGF5PSJub25lIn1ub2RlQ29sb3JzQ2hhbmdlZCgpe251bGwhPXRoaXMucmVuZGVySGllcmFyY2h5JiYodGhpcy50ZW1wbGF0ZUluZGV4PXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksU2UuZXhwb3J0cy5lYWNoKHRoaXMuX25vZGVHcm91cEluZGV4LCgodCxlKT0+e3RoaXMuX3VwZGF0ZU5vZGVTdGF0ZShlKX0pKSx0aGlzLm1pbmltYXAudXBkYXRlKCkpfWZpdCgpe3RoaXMuX2hhc1JlbmRlckhpZXJhcmNoeUJlZW5GaXRPbmNlPSEwLChmdW5jdGlvbiB0KGUsbixpLHIpe2xldCBvPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1udWxsO3RyeXtpZihhPW4uZ2V0QkJveCgpLDA9PT1hLndpZHRoKXJldHVybn1jYXRjaCh0KXtyZXR1cm59bGV0IHM9LjkqTWF0aC5taW4oby53aWR0aC9hLndpZHRoLG8uaGVpZ2h0L2EuaGVpZ2h0LDIpLGw9Tld0LmdyYXBoO2NvbnN0IGM9dk4uc2NhbGUocykudHJhbnNsYXRlKGwucGFkZGluZy5wYWRkaW5nTGVmdCxsLnBhZGRpbmcucGFkZGluZ1RvcCk7U3UoZSkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuY2FsbChpLnRyYW5zZm9ybSxjKS5vbigiZW5kLmZpdHRlZCIsKCgpPT57aS5vbigiZW5kLmZpdHRlZCIsbnVsbCkscigpfSkpfSkodGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tLGZ1bmN0aW9uKCl7dGhpcy5fem9vbWVkPSExfS5iaW5kKHRoaXMpKX1nZXRJbWFnZUJsb2IoKXtyZXR1cm4gdGhpcy5taW5pbWFwLmdldEltYWdlQmxvYigpfWlzTm9kZVNlbGVjdGVkKHQpe3JldHVybiB0PT09dGhpcy5zZWxlY3RlZE5vZGV9aXNOb2RlSGlnaGxpZ2h0ZWQodCl7cmV0dXJuIHQ9PT10aGlzLmhpZ2hsaWdodGVkTm9kZX1hZGRBbm5vdGF0aW9uR3JvdXAodCxlLG4pe3ZhciBpPXQubm9kZS5uYW1lO3RoaXMuX2Fubm90YXRpb25Hcm91cEluZGV4W2ldPXRoaXMuX2Fubm90YXRpb25Hcm91cEluZGV4W2ldfHx7fSx0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXVtlLm5vZGUubmFtZV09bn1nZXRBbm5vdGF0aW9uR3JvdXBzSW5kZXgodCl7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25Hcm91cEluZGV4W3RdfXJlbW92ZUFubm90YXRpb25Hcm91cCh0LGUpe2RlbGV0ZSB0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFt0Lm5vZGUubmFtZV1bZS5ub2RlLm5hbWVdfWFkZE5vZGVHcm91cCh0LGUpe3RoaXMuX25vZGVHcm91cEluZGV4W3RdPWV9Z2V0Tm9kZUdyb3VwKHQpe3JldHVybiB0aGlzLl9ub2RlR3JvdXBJbmRleFt0XX1yZW1vdmVOb2RlR3JvdXAodCl7ZGVsZXRlIHRoaXMuX25vZGVHcm91cEluZGV4W3RdfWFkZEVkZ2VHcm91cCh0LGUpe3RoaXMuX2VkZ2VHcm91cEluZGV4W3RdPWV9Z2V0RWRnZUdyb3VwKHQpe3JldHVybiB0aGlzLl9lZGdlR3JvdXBJbmRleFt0XX1fdXBkYXRlSGVhbHRoUGlsbHMoKXshKGZ1bmN0aW9uIHQoZSxuLGkpe2lmKCFuKXJldHVybjtsZXQgcj0xO1N1KGUpLnNlbGVjdEFsbCgiZy5ub2Rlc2hhcGUiKS5lYWNoKChmdW5jdGlvbih0KXtjb25zdCBlPW5bdC5ub2RlLm5hbWVdOyEoZnVuY3Rpb24gbyh0LGUsbixpLHI9NjAsYT0xMCxzPTAsbCl7aWYoU3UodC5wYXJlbnROb2RlKS5zZWxlY3RBbGwoIi5oZWFsdGgtcGlsbCIpLnJlbW92ZSgpLCFlKXJldHVybjtjb25zdCBjPWUudmFsdWUsdT1jLnNsaWNlKDIsOCksaD11WzBdLGQ9dVsxXSxwPXVbNV07bGV0IGY9Y1sxXTtjb25zdCBtPXttaW46Y1s4XSxtYXg6Y1s5XSxtZWFuOmNbMTBdLHN0ZGRldjpNYXRoLnNxcnQoY1sxMV0pfTtudWxsPT1yJiYocj02MCksbnVsbD09YSYmKGE9MTApLG51bGw9PXMmJihzPTApLG51bGwhPW4mJm4ubm9kZS50eXBlPT09akd0Lk9QJiYoci89MixhLz0yKTtsZXQgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoYkd0LCJnIik7Zy5jbGFzc0xpc3QuYWRkKCJoZWFsdGgtcGlsbCIpO2xldCBfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhiR3QsImRlZnMiKTtnLmFwcGVuZENoaWxkKF8pO2xldCB5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhiR3QsImxpbmVhckdyYWRpZW50Iik7Y29uc3Qgdj0iaGVhbHRoLXBpbGwtZ3JhZGllbnQtIitpO3kuc2V0QXR0cmlidXRlKCJpZCIsdik7bGV0IGI9MCx4PSIwJSI7Zm9yKGxldCB0PTA7dDx1Lmxlbmd0aDt0Kyspe2lmKCF1W3RdKWNvbnRpbnVlO2IrPXVbdF07bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGJHdCwic3RvcCIpO2Uuc2V0QXR0cmlidXRlKCJvZmZzZXQiLHgpLGUuc2V0QXR0cmlidXRlKCJzdG9wLWNvbG9yIixVV3RbdF0uYmFja2dyb3VuZF9jb2xvcikseS5hcHBlbmRDaGlsZChlKTtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoYkd0LCJzdG9wIiksaT0xMDAqYi9mKyIlIjtuLnNldEF0dHJpYnV0ZSgib2Zmc2V0IixpKSxuLnNldEF0dHJpYnV0ZSgic3RvcC1jb2xvciIsVVd0W3RdLmJhY2tncm91bmRfY29sb3IpLHkuYXBwZW5kQ2hpbGQobikseD1pfV8uYXBwZW5kQ2hpbGQoeSk7bGV0IHc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGJHdCwicmVjdCIpO3cuc2V0QXR0cmlidXRlKCJmaWxsIiwidXJsKCMiK3YrIikiKSx3LnNldEF0dHJpYnV0ZSgid2lkdGgiLFN0cmluZyhyKSksdy5zZXRBdHRyaWJ1dGUoImhlaWdodCIsU3RyaW5nKGEpKSx3LnNldEF0dHJpYnV0ZSgieSIsU3RyaW5nKHMpKSxnLmFwcGVuZENoaWxkKHcpO2xldCBTPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhiR3QsInRpdGxlIik7Uy50ZXh0Q29udGVudD0oZnVuY3Rpb24gTSh0LGUsbixpKXtsZXQgcj0iRGV2aWNlOiAiK3QuZGV2aWNlX25hbWUrIlxuIjtyKz0iZHR5cGU6ICIrdC5kdHlwZSsiXG4iO2xldCBvPSIoc2NhbGFyKSI7dC5zaGFwZS5sZW5ndGg+MCYmKG89IigiK3Quc2hhcGUuam9pbigiLCIpKyIpIikscis9Ilxuc2hhcGU6ICIrbysiXG5cbiIscis9IiMoZWxlbWVudHMpOiAiK2UrIlxuIjtjb25zdCBhPVtdO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKW5bdF0+MCYmYS5wdXNoKCIjKCIrVVd0W3RdLmxhYmVsKyIpOiAiK25bdF0pO3JldHVybiByKz1hLmpvaW4oIiwgIikrIlxuXG4iLGkubWF4Pj1pLm1pbiYmKHIrPSJtaW46ICIraS5taW4rIiwgbWF4OiAiK2kubWF4KyJcbiIscis9Im1lYW46ICIraS5tZWFuKyIsIHN0ZGRldjogIitpLnN0ZGRldikscn0pKGUsZix1LG0pLGcuYXBwZW5kQ2hpbGQoUyk7bGV0IEU9ITE7aWYobnVsbCE9bil7bGV0IHQ9bi55LWEtbi5oZWlnaHQvMi0yO2lmKG4ubGFiZWxPZmZzZXQ8MCYmKHQrPW4ubGFiZWxPZmZzZXQpLGcuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisobi54LXIvMikrIiwgIit0KyIpIiksdVsyXXx8dVszXXx8dVs0XSl7bGV0IHQ9bi5ub2RlLmF0dHI7aWYodCYmdC5sZW5ndGgpZm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoIlQiPT09dFtlXS5rZXkpe2xldCBuPXRbZV0udmFsdWUudHlwZTtFPW4mJi9eRFRfKEJPT0x8SU5UfFVJTlQpLy50ZXN0KG4pO2JyZWFrfX19bGV0IFQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGJHdCwidGV4dCIpO2lmKE51bWJlci5pc0Zpbml0ZShtLm1pbikmJk51bWJlci5pc0Zpbml0ZShtLm1heCkpe2NvbnN0IHQ9cVd0KG0ubWluLEUpLGU9cVd0KG0ubWF4LEUpO2lmKFQudGV4dENvbnRlbnQ9Zj4xP3QrIiB+ICIrZTp0LGg+MHx8ZD4wfHxwPjApe1QudGV4dENvbnRlbnQrPSIgKCI7Y29uc3QgdD1bXTtoPjAmJnQucHVzaChgTmFOw5cke2h9YCksZD4wJiZ0LnB1c2goYC3iiJ7DlyR7ZH1gKSxwPjAmJnQucHVzaChgK+KInsOXJHtwfWApLFQudGV4dENvbnRlbnQrPXQuam9pbigiOyAiKSsiKSJ9fWVsc2UgVC50ZXh0Q29udGVudD0iKE5vIGZpbml0ZSBlbGVtZW50cykiO1QuY2xhc3NMaXN0LmFkZCgiaGVhbHRoLXBpbGwtc3RhdHMiKSxudWxsPT1sJiYobD1yLzIpLFQuc2V0QXR0cmlidXRlKCJ4IixTdHJpbmcobCkpLFQuc2V0QXR0cmlidXRlKCJ5IixTdHJpbmcocy0yKSksZy5hcHBlbmRDaGlsZChUKSxZaSh0LnBhcmVudE5vZGUpLmFwcGVuZENoaWxkKGcpfSkodGhpcyxlP2VbaV06bnVsbCx0LHIrKyl9KSl9KSh0aGlzLiQuc3ZnLHRoaXMubm9kZU5hbWVzVG9IZWFsdGhQaWxscyx0aGlzLmhlYWx0aFBpbGxTdGVwSW5kZXgpfV91cGRhdGVOb2RlU3RhdGUodCl7dmFyIGU9dGhpcy5nZXROb2RlKHQpLG49dGhpcy5nZXROb2RlR3JvdXAodCk7biYmd3F0KG4sZSx0aGlzKSxlLm5vZGUudHlwZT09PWpHdC5NRVRBJiZlLm5vZGUuYXNzb2NpYXRlZEZ1bmN0aW9uJiYhZS5pc0xpYnJhcnlGdW5jdGlvbiYmd3F0KFN1KCIuIitWV3QuU2NlbmUuR1JPVVArIj4uIitWV3QuU2NlbmUuRlVOQ1RJT05fTElCUkFSWSsnIGdbZGF0YS1uYW1lPSInKyhWR3QrZS5ub2RlLmFzc29jaWF0ZWRGdW5jdGlvbikrJyJdJyksZSx0aGlzKTt2YXIgaT10aGlzLmdldEFubm90YXRpb25Hcm91cHNJbmRleCh0KTtTZS5leHBvcnRzLmVhY2goaSwoKHQsbik9Pnt3cXQodCxlLHRoaXMsVld0LkFubm90YXRpb24uTk9ERSl9KSl9X3NlbGVjdGVkTm9kZUNoYW5nZWQodCxlKXtpZih0IT09ZSYmKGUmJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZShlKSx0KSl7dGhpcy5taW5pbWFwLnVwZGF0ZSgpO2Zvcih2YXIgbixpPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5ub2RlKHQpLHI9W107bnVsbCE9aS5wYXJlbnROb2RlJiZpLnBhcmVudE5vZGUubmFtZSE9Rkd0OylyLnB1c2goKGk9aS5wYXJlbnROb2RlKS5uYW1lKTtTZS5leHBvcnRzLmZvckVhY2hSaWdodChyLCh0PT57dGhpcy5yZW5kZXJIaWVyYXJjaHkuYnVpbGRTdWJoaWVyYXJjaHkodCk7dmFyIGU9dGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0KTtlLm5vZGUuaXNHcm91cE5vZGUmJiFlLmV4cGFuZGVkJiYoZS5leHBhbmRlZD0hMCxufHwobj1lKSl9KSksbiYmKHRoaXMuc2V0Tm9kZUV4cGFuZGVkKG4pLHRoaXMuX3pvb21lZD0hMCksdCYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKHQpLHNldFRpbWVvdXQoKCgpPT57dGhpcy5wYW5Ub05vZGUodCl9KSxOV3QuYW5pbWF0aW9uLmR1cmF0aW9uKX19X2hpZ2hsaWdodGVkTm9kZUNoYW5nZWQodCxlKXt0IT09ZSYmKHQmJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZSh0KSxlJiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUoZSkpfV9vblpvb21DaGFuZ2VkKCl7dGhpcy5fdXBkYXRlTGFiZWxzKCF0aGlzLl96b29tZWQpfV9maXJlRW5hYmxlQ2xpY2soKXt0aGlzLmZpcmUoImVuYWJsZS1jbGljayIpfV91cGRhdGVJbnB1dFRyYWNlKCl7TXF0KHRoaXMuZ2V0R3JhcGhTdmdSb290KCksdGhpcy5yZW5kZXJIaWVyYXJjaHksdGhpcy5zZWxlY3RlZE5vZGUsdGhpcy50cmFjZUlucHV0cyl9fTtKcXQudGVtcGxhdGU9WnF0LHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLHlXdCldLEpxdC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKcXQucHJvdG90eXBlLCJuYW1lIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLEpxdC5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKcXQucHJvdG90eXBlLCJ0cmFjZUlucHV0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpxdC5wcm90b3R5cGUsIl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpxdC5wcm90b3R5cGUsIl9pc0F0dGFjaGVkIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEpxdC5wcm90b3R5cGUsIl96b29tIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaGlnaGxpZ2h0ZWROb2RlQ2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSnF0LnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfc2VsZWN0ZWROb2RlQ2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSnF0LnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEpxdC5wcm90b3R5cGUsImhhbmRsZUVkZ2VTZWxlY3RlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9vblpvb21DaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnF0LnByb3RvdHlwZSwiX3pvb21lZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxKcXQucHJvdG90eXBlLCJfem9vbVN0YXJ0Q29vcmRzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEpxdC5wcm90b3R5cGUsIl96b29tVHJhbnNmb3JtIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEpxdC5wcm90b3R5cGUsIl9tYXhab29tRGlzdGFuY2VGb3JDbGljayIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEpxdC5wcm90b3R5cGUsInRlbXBsYXRlSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnF0LnByb3RvdHlwZSwiX25vZGVHcm91cEluZGV4Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEpxdC5wcm90b3R5cGUsIl9hbm5vdGF0aW9uR3JvdXBJbmRleCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxKcXQucHJvdG90eXBlLCJfZWRnZUdyb3VwSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSnF0LnByb3RvdHlwZSwibWF4TWV0YW5vZGVMYWJlbExlbmd0aEZvbnRTaXplIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEpxdC5wcm90b3R5cGUsIm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxKcXQucHJvdG90eXBlLCJtYXhNZXRhbm9kZUxhYmVsTGVuZ3RoTGFyZ2VGb250Iix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEpxdC5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGgiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnF0LnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLEpxdC5wcm90b3R5cGUsIm5vZGVDb250ZXh0TWVudUl0ZW1zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEpxdC5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSnF0LnByb3RvdHlwZSwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKSx0KFthKCJyZW5kZXJIaWVyYXJjaHkiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEpxdC5wcm90b3R5cGUsIl9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkIixudWxsKSx0KFthKCJfaXNBdHRhY2hlZCIsInJlbmRlckhpZXJhcmNoeSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sSnF0LnByb3RvdHlwZSwiX2FuaW1hdGVBbmRGaXQiLG51bGwpLHQoW2EoImNvbG9yQnkiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEpxdC5wcm90b3R5cGUsIm5vZGVDb2xvcnNDaGFuZ2VkIixudWxsKSx0KFthKCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiwiaGVhbHRoUGlsbFN0ZXBJbmRleCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sSnF0LnByb3RvdHlwZSwiX3VwZGF0ZUhlYWx0aFBpbGxzIixudWxsKSx0KFthKCJ0cmFjZUlucHV0cyIsInNlbGVjdGVkTm9kZSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sSnF0LnByb3RvdHlwZSwiX3VwZGF0ZUlucHV0VHJhY2UiLG51bGwpLEpxdD10KFtpKCJ0Zi1ncmFwaC1zY2VuZSIpXSxKcXQpO2xldCBRcXQ9Y2xhc3MgZXh0ZW5kcyhlcih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJEZXB0aD0xLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITAsdGhpcy5lZGdlV2lkdGhGdW5jdGlvbj0iIix0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZD0iIix0aGlzLmVkZ2VMYWJlbEZ1bmN0aW9uPSIiLHRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkPSIifXBhblRvTm9kZSh0KXt0aGlzLiQkKCJ0Zi1ncmFwaC1zY2VuZSIpLnBhblRvTm9kZSh0KX1fYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHQpe2Zvcihjb25zdCBlIG9mIE9iamVjdC52YWx1ZXModC5nZXROb2RlTWFwKCkpKWUuaW5jbHVkZT1HR3QuVU5TUEVDSUZJRUQ7dGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodCl9fV9idWlsZE5ld1JlbmRlckhpZXJhcmNoeSgpe3ZhciB0PXRoaXMuZ3JhcGhIaWVyYXJjaHk7dCYmdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodCl9X3N0YXRzQ2hhbmdlZCgpe3ZhciB0PXRoaXMuc3RhdHMsZT10aGlzLmRldmljZXNGb3JTdGF0czt0aGlzLmdyYXBoSGllcmFyY2h5JiYodCYmZSYmKChmdW5jdGlvbiBuKHQsZSxpKXtTZS5leHBvcnRzLmVhY2godC5ub2RlcywodD0+e3Quc3RhdHM9bnVsbH0pKSxTZS5leHBvcnRzLmVhY2goZS5kZXZfc3RhdHMsKGU9PntpJiYhaVtlLmRldmljZV18fFNlLmV4cG9ydHMuZWFjaChlLm5vZGVfc3RhdHMsKG49PntsZXQgaT1uLm5vZGVfbmFtZSBpbiB0Lm5vZGVzP24ubm9kZV9uYW1lOnNXdChuLm5vZGVfbmFtZSk7aWYoIShpIGluIHQubm9kZXMpKXJldHVybjtsZXQgcj0wO24ubWVtb3J5JiZTZS5leHBvcnRzLmVhY2gobi5tZW1vcnksKHQ9Pnt0LnRvdGFsX2J5dGVzJiYodC50b3RhbF9ieXRlcz4wP3IrPU51bWJlcih0LnRvdGFsX2J5dGVzKTpjb25zb2xlLmxvZygiaWdub3JpbmcgbmVnYXRpdmUgbWVtb3J5IGFsbG9jYXRpb24gZm9yICIraSkpfSkpO2xldCBvPW51bGw7bi5vdXRwdXQmJihvPVNlLmV4cG9ydHMubWFwKG4ub3V0cHV0LCh0PT5TZS5leHBvcnRzLm1hcCh0LnRlbnNvcl9kZXNjcmlwdGlvbi5zaGFwZS5kaW0sKHQ9Pk51bWJlcih0LnNpemUpKSkpKSksdC5ub2Rlc1tpXS5kZXZpY2U9ZS5kZXZpY2UsbnVsbD09dC5ub2Rlc1tpXS5zdGF0cyYmKHQubm9kZXNbaV0uc3RhdHM9bmV3IFNHdChvKSksdC5ub2Rlc1tpXS5zdGF0cy5hZGRCeXRlc0FsbG9jYXRpb24ociksbi5hbGxfZW5kX3JlbF9taWNyb3MmJihuLmFsbF9lbmRfcmVsX21pY3Jvcz4wP3Qubm9kZXNbaV0uc3RhdHMuYWRkRXhlY3V0aW9uVGltZShuLmFsbF9zdGFydF9taWNyb3Msbi5hbGxfc3RhcnRfbWljcm9zK24uYWxsX2VuZF9yZWxfbWljcm9zKTpjb25zb2xlLmxvZygiaWdub3JpbmcgbmVnYXRpdmUgcnVudGltZSBmb3IgIitpKSl9KSl9KSl9KSh0aGlzLmJhc2ljR3JhcGgsdCxlKSwoZnVuY3Rpb24gaSh0LGUpe2xldCBuPXt9LGk9e307U2UuZXhwb3J0cy5lYWNoKHQucm9vdC5sZWF2ZXMoKSwoZT0+e2xldCByPXQubm9kZShlKTtudWxsIT1yLmRldmljZSYmKG5bci5kZXZpY2VdPSEwKSxudWxsIT1yLnhsYUNsdXN0ZXImJihpW3IueGxhQ2x1c3Rlcl09ITApfSkpLHQuZGV2aWNlcz1TZS5leHBvcnRzLmtleXMobiksdC54bGFDbHVzdGVycz1TZS5leHBvcnRzLmtleXMoaSksU2UuZXhwb3J0cy5lYWNoKHQuZ2V0Tm9kZU1hcCgpLCgodCxlKT0+e3QuaXNHcm91cE5vZGUmJih0LnN0YXRzPW5ldyBTR3QobnVsbCksdC5kZXZpY2VIaXN0b2dyYW09e30pfSkpLFNlLmV4cG9ydHMuZWFjaCh0LnJvb3QubGVhdmVzKCksKGU9PntsZXQgbj10Lm5vZGUoZSksaT1uO2Zvcig7bnVsbCE9aS5wYXJlbnROb2RlOyl7aWYobnVsbCE9bi5kZXZpY2Upe2xldCB0PWkucGFyZW50Tm9kZS5kZXZpY2VIaXN0b2dyYW07dFtuLmRldmljZV09KHRbbi5kZXZpY2VdfHwwKSsxfWlmKG51bGwhPW4ueGxhQ2x1c3Rlcil7bGV0IHQ9aS5wYXJlbnROb2RlLnhsYUNsdXN0ZXJIaXN0b2dyYW07dFtuLnhsYUNsdXN0ZXJdPSh0W24ueGxhQ2x1c3Rlcl18fDApKzF9bnVsbCE9bi5zdGF0cyYmaS5wYXJlbnROb2RlLnN0YXRzLmNvbWJpbmUobi5zdGF0cyksaT1pLnBhcmVudE5vZGV9fSkpfSkodGhpcy5ncmFwaEhpZXJhcmNoeSkpLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpKX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJncmFwaC1zZWxlY3QiLHRoaXMuX2dyYXBoU2VsZWN0ZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJkaXNhYmxlLWNsaWNrIix0aGlzLl9kaXNhYmxlQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJlbmFibGUtY2xpY2siLHRoaXMuX2VuYWJsZUNsaWNrLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXhwYW5kIix0aGlzLl9ub2RlVG9nZ2xlRXhwYW5kLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1zZWxlY3QiLHRoaXMuX25vZGVTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtaGlnaGxpZ2h0Iix0aGlzLl9ub2RlSGlnaGxpZ2h0ZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXVuaGlnaGxpZ2h0Iix0aGlzLl9ub2RlVW5oaWdobGlnaHRlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtdG9nZ2xlLWV4dHJhY3QiLHRoaXMuX25vZGVUb2dnbGVFeHRyYWN0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHRoaXMuX25vZGVUb2dnbGVTZXJpZXNHcm91cC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImVkZ2Utc2VsZWN0Iix0aGlzLl9lZGdlU2VsZWN0ZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJhbm5vdGF0aW9uLXNlbGVjdCIsdGhpcy5fbm9kZVNlbGVjdGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5ub3RhdGlvbi1oaWdobGlnaHQiLHRoaXMuX25vZGVIaWdobGlnaHRlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImFubm90YXRpb24tdW5oaWdobGlnaHQiLHRoaXMuX25vZGVVbmhpZ2hsaWdodGVkLmJpbmQodGhpcykpfV9idWlsZFJlbmRlckhpZXJhcmNoeSh0KXtpZih0LnJvb3QudHlwZSE9PWpHdC5NRVRBKXJldHVybjtjb25zdCBlPXRoaXMsbj1DR3QoIm5ldyB0Zl9ncmFwaF9yZW5kZXIuSGllcmFyY2h5IiwoKCk9Pntjb25zdCBuPW5ldyB5V3QodCwhIXRoaXMuc3RhdHMsdGhpcy5hdXRvRXh0cmFjdE5vZGVzKTtmdW5jdGlvbiBpKHQpe3JldHVybnttaW5WYWx1ZTp0LmRvbWFpbigpWzBdLG1heFZhbHVlOnQuZG9tYWluKClbMV0sc3RhcnRDb2xvcjp0LnJhbmdlKClbMF0sZW5kQ29sb3I6dC5yYW5nZSgpWzFdfX1yZXR1cm4gbi5lZGdlTGFiZWxGdW5jdGlvbj10aGlzLmVkZ2VMYWJlbEZ1bmN0aW9uLG4uZWRnZVdpZHRoRnVuY3Rpb249dGhpcy5lZGdlV2lkdGhGdW5jdGlvbixlLl9zZXRDb2xvckJ5UGFyYW1zKHtjb21wdXRlX3RpbWU6aShuLmNvbXB1dGVUaW1lU2NhbGUpLG1lbW9yeTppKG4ubWVtb3J5VXNhZ2VTY2FsZSksZGV2aWNlOlNlLmV4cG9ydHMubWFwKG4uZGV2aWNlQ29sb3JNYXAuZG9tYWluKCksKGZ1bmN0aW9uKHQpe3JldHVybntkZXZpY2U6dCxjb2xvcjpuLmRldmljZUNvbG9yTWFwKHQpfX0pKSx4bGFfY2x1c3RlcjpTZS5leHBvcnRzLm1hcChuLnhsYUNsdXN0ZXJDb2xvck1hcC5kb21haW4oKSwoZnVuY3Rpb24odCl7cmV0dXJue3hsYV9jbHVzdGVyOnQsY29sb3I6bi54bGFDbHVzdGVyQ29sb3JNYXAodCl9fSkpfSksbn0pLF9HdC5SRU5ERVJfQlVJTERfSElFUkFSQ0hZKTtlLl9zZXRSZW5kZXJIaWVyYXJjaHkobil9X2dldFZpc2libGUodCl7cmV0dXJuIHQ/dGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0TmVhcmVzdFZpc2libGVBbmNlc3Rvcih0KTp0fWZpdCgpe3RoaXMuJC5zY2VuZS5maXQoKX1nZXRJbWFnZUJsb2IoKXtyZXR1cm4gdGhpcy4kLnNjZW5lLmdldEltYWdlQmxvYigpfV9ncmFwaENoYW5nZWQoKXt0aGlzLmdyYXBoSGllcmFyY2h5JiYodGhpcy5ncmFwaEhpZXJhcmNoeS5hZGRMaXN0ZW5lcih6cXQuVEVNUExBVEVTX1VQREFURUQsKCgpPT57dGhpcy4kLnNjZW5lLm5vZGVDb2xvcnNDaGFuZ2VkKCl9KSksdGhpcy5maXJlKCJncmFwaC1zZWxlY3QiKSl9X2dyYXBoU2VsZWN0ZWQodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdCYmKHRoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLG51bGwpLHRoaXMuc2V0KCJzZWxlY3RlZEVkZ2UiLG51bGwpKSx0aGlzLl9hbGxvd0dyYXBoU2VsZWN0PSEwfV9kaXNhYmxlQ2xpY2sodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMX1fZW5hYmxlQ2xpY2sodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fc2VsZWN0ZWROb2RlQ2hhbmdlZCgpe3RoaXMuaGFuZGxlTm9kZVNlbGVjdGVkJiZ0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZCh0aGlzLnNlbGVjdGVkTm9kZSl9X3NlbGVjdGVkRWRnZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkRWRnZTt0aGlzLl9kZXNlbGVjdFByZXZpb3VzRWRnZSgpLHQmJih0aGlzLl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAuY2xhc3NlZChWV3QuRWRnZS5TRUxFQ1RFRCwhMCksdGhpcy5fdXBkYXRlTWFya2VyT2ZTZWxlY3RlZEVkZ2UodCkpLHRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkJiZ0aGlzLmhhbmRsZUVkZ2VTZWxlY3RlZCh0KX1fbm9kZVNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJnRoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLHQuZGV0YWlsLm5hbWUpLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X2VkZ2VTZWxlY3RlZCh0KXt0aGlzLl9hbGxvd0dyYXBoU2VsZWN0JiYodGhpcy5zZXQoIl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAiLHQuZGV0YWlsLmVkZ2VHcm91cCksdGhpcy5zZXQoInNlbGVjdGVkRWRnZSIsdC5kZXRhaWwuZWRnZURhdGEpKSx0aGlzLl9hbGxvd0dyYXBoU2VsZWN0PSEwfV9ub2RlSGlnaGxpZ2h0ZWQodCl7dGhpcy5zZXQoImhpZ2hsaWdodGVkTm9kZSIsdC5kZXRhaWwubmFtZSl9X25vZGVVbmhpZ2hsaWdodGVkKHQpe3RoaXMuc2V0KCJoaWdobGlnaHRlZE5vZGUiLG51bGwpfV9ub2RlVG9nZ2xlRXhwYW5kKHQpe3RoaXMuX25vZGVTZWxlY3RlZCh0KTt2YXIgZT10LmRldGFpbC5uYW1lLG49dGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZShlKTtuLm5vZGUudHlwZSE9PWpHdC5PUCYmKHRoaXMucmVuZGVySGllcmFyY2h5LmJ1aWxkU3ViaGllcmFyY2h5KGUpLG4uZXhwYW5kZWQ9IW4uZXhwYW5kZWQsdGhpcy5hc3luYygoZnVuY3Rpb24oKXt0aGlzLiQuc2NlbmUuc2V0Tm9kZUV4cGFuZGVkKG4pfSksNzUpLFRHdCh7YWN0aW9uSWQ6X0d0Lk5PREVfRVhQQU5TSU9OX1RPR0dMRUQsZXZlbnRMYWJlbDpuLmV4cGFuZGVkPyJleHBhbmRlZCI6ImNvbGxhcHNlZCJ9KSl9X25vZGVUb2dnbGVFeHRyYWN0KHQpe3RoaXMubm9kZVRvZ2dsZUV4dHJhY3QodC5kZXRhaWwubmFtZSl9bm9kZVRvZ2dsZUV4dHJhY3QodCl7Y29uc3QgZT10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHQpO2Uubm9kZS5pbmNsdWRlPWUubm9kZS5pbmNsdWRlPT1HR3QuSU5DTFVERT9HR3QuRVhDTFVERTplLm5vZGUuaW5jbHVkZT09R0d0LkVYQ0xVREV8fHRoaXMucmVuZGVySGllcmFyY2h5LmlzTm9kZUF1eGlsaWFyeShlKT9HR3QuSU5DTFVERTpHR3QuRVhDTFVERSx0aGlzLl9idWlsZFJlbmRlckhpZXJhcmNoeSh0aGlzLmdyYXBoSGllcmFyY2h5KSxUR3Qoe2FjdGlvbklkOl9HdC5OT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQsZXZlbnRMYWJlbDplLm5vZGUuaW5jbHVkZT09PUdHdC5JTkNMVURFPyJBdXhpbGlhcnkgdG8gTWFpbiI6Ik1haW4gdG8gQXV4aWxpYXJ5In0pfV9ub2RlVG9nZ2xlU2VyaWVzR3JvdXAodCl7dGhpcy5ub2RlVG9nZ2xlU2VyaWVzR3JvdXAodC5kZXRhaWwubmFtZSl9bm9kZVRvZ2dsZVNlcmllc0dyb3VwKHQpe3RoaXMuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOjAsbXNnOiIifSk7dmFyIGU9a0d0KEFHdCh0aGlzKSwxMDAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKTtjb25zdCBuPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmhpZXJhcmNoeVBhcmFtcykse3Nlcmllc01hcDp0aGlzLmdyYXBoSGllcmFyY2h5LmJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpfSk7RnF0KHRoaXMuYmFzaWNHcmFwaCxuLGUpLnRoZW4oZnVuY3Rpb24odCl7dGhpcy5zZXQoImdyYXBoSGllcmFyY2h5Iix0KSx0aGlzLl9idWlsZFJlbmRlckhpZXJhcmNoeSh0aGlzLmdyYXBoSGllcmFyY2h5KX0uYmluZCh0aGlzKSl9X2Rlc2VsZWN0UHJldmlvdXNFZGdlKCl7U3UoIi4iK1ZXdC5FZGdlLlNFTEVDVEVEKS5jbGFzc2VkKFZXdC5FZGdlLlNFTEVDVEVELCExKS5lYWNoKCgodCxlKT0+e2lmKHQubGFiZWwpe2NvbnN0IGU9U3UodGhpcykuc2VsZWN0QWxsKCJwYXRoLmVkZ2VsaW5lIik7dC5sYWJlbC5zdGFydE1hcmtlcklkJiZlLnN0eWxlKCJtYXJrZXItc3RhcnQiLGB1cmwoIyR7dC5sYWJlbC5zdGFydE1hcmtlcklkfSlgKSx0LmxhYmVsLmVuZE1hcmtlcklkJiZlLnN0eWxlKCJtYXJrZXItZW5kIixgdXJsKCMke3QubGFiZWwuZW5kTWFya2VySWR9KWApfX0pKX1fdXBkYXRlTWFya2VyT2ZTZWxlY3RlZEVkZ2UodCl7aWYodC5sYWJlbCl7Y29uc3QgZT10LmxhYmVsLnN0YXJ0TWFya2VySWR8fHQubGFiZWwuZW5kTWFya2VySWQ7aWYoZSl7Y29uc3Qgbj1lLnJlcGxhY2UoImRhdGFmbG93LSIsInNlbGVjdGVkLSIpO2xldCBpPXRoaXMuJCQoIiMiK24pO2lmKCFpKXtjb25zdCB0PXRoaXMuJC5zY2VuZS5xdWVyeVNlbGVjdG9yKCIjIitlKTtpPXQuY2xvbmVOb2RlKCEwKSxpLnNldEF0dHJpYnV0ZSgiaWQiLG4pLGkuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQtYXJyb3doZWFkIiksdC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGkpfWNvbnN0IHI9dC5sYWJlbC5zdGFydE1hcmtlcklkPyJtYXJrZXItc3RhcnQiOiJtYXJrZXItZW5kIjt0aGlzLl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAuc2VsZWN0QWxsKCJwYXRoLmVkZ2VsaW5lIikuc3R5bGUocixgdXJsKCMke259KWApfX19bm90KHQpe3JldHVybiF0fX07UXF0LnRlbXBsYXRlPV9lYAogICAgPHN0eWxlPgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgfQoKICAgICAgLnZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICB9CgogICAgICAuYXV0byB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJ2ZXJ0aWNhbCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3RpdGxlXV0iPgogICAgICAgICAgPGgyPltbdGl0bGVdXTwvaDI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGYtZ3JhcGgtc2NlbmUKICAgICAgICAgIGlkPSJzY2VuZSIKICAgICAgICAgIGNsYXNzPSJhdXRvIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9IltbX2dldFZpc2libGUoaGlnaGxpZ2h0ZWROb2RlKV1dIgogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHNlbGVjdGVkLWVkZ2U9Int7c2VsZWN0ZWRFZGdlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICBwcm9ncmVzcz0iW1twcm9ncmVzc11dIgogICAgICAgICAgbm9kZS1jb250ZXh0LW1lbnUtaXRlbXM9Iltbbm9kZUNvbnRleHRNZW51SXRlbXNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgaGFuZGxlLWVkZ2Utc2VsZWN0ZWQ9IltbaGFuZGxlRWRnZVNlbGVjdGVkXV0iCiAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbdHJhY2VJbnB1dHNdXSIKICAgICAgICA+PC90Zi1ncmFwaC1zY2VuZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2dyYXBoQ2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsRHF0KV0sUXF0LnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIscUd0KV0sUXF0LnByb3RvdHlwZSwiYmFzaWNHcmFwaCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRcXQucHJvdG90eXBlLCJzdGF0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRcXQucHJvdG90eXBlLCJkZXZpY2VzRm9yU3RhdHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUXF0LnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRcXQucHJvdG90eXBlLCJwcm9ncmVzcyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxRcXQucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUXF0LnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRcXQucHJvdG90eXBlLCJzZWxlY3RlZEVkZ2UiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUXF0LnByb3RvdHlwZSwiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUXF0LnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLFFxdC5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFFxdC5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLHlXdCldLFFxdC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFxdC5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUXF0LnByb3RvdHlwZSwiYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sUXF0LnByb3RvdHlwZSwibm9kZUNvbnRleHRNZW51SXRlbXMiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUXF0LnByb3RvdHlwZSwiX3JlbmRlckRlcHRoIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUXF0LnByb3RvdHlwZSwiX2FsbG93R3JhcGhTZWxlY3QiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUXF0LnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxRcXQucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFFxdC5wcm90b3R5cGUsImVkZ2VXaWR0aEZ1bmN0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFFxdC5wcm90b3R5cGUsImhhbmRsZU5vZGVTZWxlY3RlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRcXQucHJvdG90eXBlLCJlZGdlTGFiZWxGdW5jdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRcXQucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCksdChbYSgiYXV0b0V4dHJhY3ROb2RlcyIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUXF0LnByb3RvdHlwZSwiX2F1dG9FeHRyYWN0Tm9kZXNDaGFuZ2VkIixudWxsKSx0KFthKCJncmFwaEhpZXJhcmNoeSIsImVkZ2VXaWR0aEZ1bmN0aW9uIiwiaGFuZGxlTm9kZVNlbGVjdGVkIiwiZWRnZUxhYmVsRnVuY3Rpb24iLCJoYW5kbGVFZGdlU2VsZWN0ZWQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFFxdC5wcm90b3R5cGUsIl9idWlsZE5ld1JlbmRlckhpZXJhcmNoeSIsbnVsbCksdChbYSgic3RhdHMiLCJkZXZpY2VzRm9yU3RhdHMiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFFxdC5wcm90b3R5cGUsIl9zdGF0c0NoYW5nZWQiLG51bGwpLHQoW2EoInNlbGVjdGVkTm9kZSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUXF0LnByb3RvdHlwZSwiX3NlbGVjdGVkTm9kZUNoYW5nZWQiLG51bGwpLHQoW2EoInNlbGVjdGVkRWRnZSIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUXF0LnByb3RvdHlwZSwiX3NlbGVjdGVkRWRnZUNoYW5nZWQiLG51bGwpLFFxdD10KFtpKCJ0Zi1ncmFwaCIpXSxRcXQpO2NvbnN0IHRZdD17TUFYX05PREVfQ09VTlQ6MWU0LE1BWF9FREdFX0NPVU5UOjFlNH07bGV0IGVZdD1jbGFzcyBleHRlbmRzKGVyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaGllcmFyY2h5UGFyYW1zPUhxdCx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ9ITEsdGhpcy5zcGVjaWZpY0hlYWx0aFBpbGxTdGVwPTAsdGhpcy5jb21wYXROb2RlVGl0bGU9IlRQVSBDb21wYXRpYmlsaXR5In1maXQoKXt0aGlzLiQuZ3JhcGguZml0KCl9ZG93bmxvYWRBc0ltYWdlKHQpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLiQuZ3JhcGguZ2V0SW1hZ2VCbG9iKCksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7bi5ocmVmPVVSTC5jcmVhdGVPYmplY3RVUkwoZSksbi5kb3dubG9hZD10LG4uY2xpY2soKSxVUkwucmV2b2tlT2JqZWN0VVJMKG4uaHJlZil9KSl9X2lzTm90Q29tcGxldGUodCl7cmV0dXJuIHQudmFsdWU8MTAwfV9nZXRDb250YWluZXJDbGFzcyh0KXt2YXIgZT0iY29udGFpbmVyIjtyZXR1cm4gdC5lcnJvciYmKGUrPSIgZXJyb3IiKSx0aGlzLl9pc05vdENvbXBsZXRlKHQpJiYoZSs9IiBsb2FkaW5nIiksZX1fb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZUV4dHJhY3QodC5kZXRhaWwubmFtZSl9X29uTm9kZVNlcmllc0dyb3VwVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHQuZGV0YWlsLm5hbWUpfV91cGRhdGVOb2RlSW5jbHVkZSgpe2NvbnN0IHQ9dGhpcy5yZW5kZXJIaWVyYXJjaHk/dGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0Tm9kZUJ5TmFtZSh0aGlzLnNlbGVjdGVkTm9kZSk6bnVsbDt0aGlzLl9zZWxlY3RlZE5vZGVJbmNsdWRlPXQ/dC5pbmNsdWRlOkdHdC5VTlNQRUNJRklFRH1fc2xpbUdyYXBoQ2hhbmdlZCgpe2lmKCF0aGlzLmdyYXBoKXJldHVybjtjb25zdHtNQVhfTk9ERV9DT1VOVDp0LE1BWF9FREdFX0NPVU5UOmV9PXRZdDtPYmplY3Qua2V5cyh0aGlzLmdyYXBoLm5vZGVzKS5sZW5ndGg+dCYmdGhpcy5ncmFwaC5lZGdlcy5sZW5ndGg+ZSYmdGhpcy5jb2xvckJ5PT09YXF0LlNUUlVDVFVSRSYmKHRoaXMuY29sb3JCeT1hcXQuTk9ORSl9X2Vuc3VyZVRlbXBsYXRlcygpe3RoaXMuZ3JhcGhIaWVyYXJjaHkmJnRoaXMuY29sb3JCeT09PWFxdC5TVFJVQ1RVUkUmJih0aGlzLmdyYXBoSGllcmFyY2h5LmdldFRlbXBsYXRlSW5kZXgoKXx8dGhpcy5ncmFwaEhpZXJhcmNoeS51cGRhdGVUZW1wbGF0ZXMoKSl9fTtlWXQudGVtcGxhdGU9X2VgCiAgICA8c3R5bGU+CiAgICAgIDo6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC9kZWVwLyAuY2xvc2UgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgbGVmdDogMTVweDsKICAgICAgICBib3R0b206IDE1cHg7CiAgICAgIH0KCiAgICAgIC5jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuY29udGFpbmVyLmxvYWRpbmcgewogICAgICAgIGN1cnNvcjogcHJvZ3Jlc3M7CiAgICAgICAgb3BhY2l0eTogMC4xOwogICAgICB9CgogICAgICAuY29udGFpbmVyLmxvYWRpbmcuZXJyb3IgewogICAgICAgIGN1cnNvcjogYXV0bzsKICAgICAgfQoKICAgICAgI2luZm8gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogNXB4OwogICAgICAgIHRvcDogNXB4OwogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgICBtYXgtd2lkdGg6IDM4MHB4OwogICAgICAgIG1pbi13aWR0aDogMzIwcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICB9CgogICAgICAjbWFpbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjcHJvZ3Jlc3MtYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA0MHB4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAjcHJvZ3Jlc3MtbXNnIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgfQoKICAgICAgcGFwZXItcHJvZ3Jlc3MgewogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWhlaWdodDogNnB4OwogICAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtYWN0aXZlLWNvbG9yOiAjZjM5MTNlOwogICAgICB9CgogICAgICAuY29udGV4dC1tZW51IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTJlMmUyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWluLXdpZHRoOiAxNTBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZDRkNGQ0OwogICAgICB9CgogICAgICAvZGVlcC8gLmNvbnRleHQtbWVudSB1bCB7CiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgbGkgewogICAgICAgIHBhZGRpbmc6IDRweCAxNnB4OwogICAgICB9CgogICAgICAvZGVlcC8gLmNvbnRleHQtbWVudSB1bCBsaTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzOTEzZTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzTm90Q29tcGxldGUocHJvZ3Jlc3MpXV0iPgogICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1iYXIiPgogICAgICAgIDxkaXYgaWQ9InByb2dyZXNzLW1zZyI+W1twcm9ncmVzcy5tc2ddXTwvZGl2PgogICAgICAgIDxwYXBlci1wcm9ncmVzcyB2YWx1ZT0iW1twcm9ncmVzcy52YWx1ZV1dIj48L3BhcGVyLXByb2dyZXNzPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzJD0iW1tfZ2V0Q29udGFpbmVyQ2xhc3MocHJvZ3Jlc3MpXV0iPgogICAgICA8ZGl2IGlkPSJtYWluIj4KICAgICAgICA8dGYtZ3JhcGgKICAgICAgICAgIGlkPSJncmFwaCIKICAgICAgICAgIGdyYXBoLWhpZXJhcmNoeT0ie3tncmFwaEhpZXJhcmNoeX19IgogICAgICAgICAgYmFzaWMtZ3JhcGg9IltbZ3JhcGhdXSIKICAgICAgICAgIGhpZXJhcmNoeS1wYXJhbXM9IltbaGllcmFyY2h5UGFyYW1zXV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJ7e3JlbmRlckhpZXJhcmNoeX19IgogICAgICAgICAgZGV2aWNlcy1mb3Itc3RhdHM9IltbZGV2aWNlc0ZvclN0YXRzXV0iCiAgICAgICAgICBzdGF0cz0iW1tzdGF0c11dIgogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7X2hpZ2hsaWdodGVkTm9kZX19IgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJ7e2NvbG9yQnlQYXJhbXN9fSIKICAgICAgICAgIHByb2dyZXNzPSJ7e3Byb2dyZXNzfX0iCiAgICAgICAgICBlZGdlLWxhYmVsLWZ1bmN0aW9uPSJbW2VkZ2VMYWJlbEZ1bmN0aW9uXV0iCiAgICAgICAgICBlZGdlLXdpZHRoLWZ1bmN0aW9uPSJbW2VkZ2VXaWR0aEZ1bmN0aW9uXV0iCiAgICAgICAgICBub2RlLW5hbWVzLXRvLWhlYWx0aC1waWxscz0iW1tub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iCiAgICAgICAgICBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJbW2hlYWx0aFBpbGxTdGVwSW5kZXhdXSIKICAgICAgICAgIGhhbmRsZS1ub2RlLXNlbGVjdGVkPSJbW2hhbmRsZU5vZGVTZWxlY3RlZF1dIgogICAgICAgICAgaGFuZGxlLWVkZ2Utc2VsZWN0ZWQ9IltbaGFuZGxlRWRnZVNlbGVjdGVkXV0iCiAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbdHJhY2VJbnB1dHNdXSIKICAgICAgICAgIGF1dG8tZXh0cmFjdC1ub2Rlcz0iW1thdXRvRXh0cmFjdE5vZGVzXV0iCiAgICAgICAgPjwvdGYtZ3JhcGg+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJpbmZvIj4KICAgICAgICA8dGYtZ3JhcGgtaW5mbwogICAgICAgICAgaWQ9ImdyYXBoLWluZm8iCiAgICAgICAgICB0aXRsZT0ic2VsZWN0ZWQiCiAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbZ3JhcGhIaWVyYXJjaHldXSIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgICBncmFwaD0iW1tncmFwaF1dIgogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGUtaW5jbHVkZT0ie3tfc2VsZWN0ZWROb2RlSW5jbHVkZX19IgogICAgICAgICAgaGlnaGxpZ2h0ZWQtbm9kZT0ie3tfaGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbY29sb3JCeVBhcmFtc11dIgogICAgICAgICAgZGVidWdnZXItZGF0YS1lbmFibGVkPSJbW2RlYnVnZ2VyRGF0YUVuYWJsZWRdXSIKICAgICAgICAgIGFyZS1oZWFsdGgtcGlsbHMtbG9hZGluZz0iW1thcmVIZWFsdGhQaWxsc0xvYWRpbmddXSIKICAgICAgICAgIGRlYnVnZ2VyLW51bWVyaWMtYWxlcnRzPSJbW2RlYnVnZ2VyTnVtZXJpY0FsZXJ0c11dIgogICAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgICAgYWxsLXN0ZXBzLW1vZGUtZW5hYmxlZD0ie3thbGxTdGVwc01vZGVFbmFibGVkfX0iCiAgICAgICAgICBzcGVjaWZpYy1oZWFsdGgtcGlsbC1zdGVwPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgY29tcGF0LW5vZGUtdGl0bGU9IltbY29tcGF0Tm9kZVRpdGxlXV0iCiAgICAgICAgICBvbi1ub2RlLXRvZ2dsZS1pbmNsdXNpb249Il9vbk5vZGVJbmNsdXNpb25Ub2dnbGVkIgogICAgICAgICAgb24tbm9kZS10b2dnbGUtc2VyaWVzZ3JvdXA9Il9vbk5vZGVTZXJpZXNHcm91cFRvZ2dsZWQiCiAgICAgICAgPjwvdGYtZ3JhcGgtaW5mbz4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLERxdCldLGVZdC5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLHFHdCldLGVZdC5wcm90b3R5cGUsImdyYXBoIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGVZdC5wcm90b3R5cGUsImhpZXJhcmNoeVBhcmFtcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlWXQucHJvdG90eXBlLCJzdGF0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlWXQucHJvdG90eXBlLCJwcm9ncmVzcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGVZdC5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZVl0LnByb3RvdHlwZSwiYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZVl0LnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZVl0LnByb3RvdHlwZSwiY29sb3JCeVBhcmFtcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIseVd0KV0sZVl0LnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZVl0LnByb3RvdHlwZSwiZGVidWdnZXJEYXRhRW5hYmxlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGVZdC5wcm90b3R5cGUsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLGVZdC5wcm90b3R5cGUsImRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlWXQucHJvdG90eXBlLCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGVZdC5wcm90b3R5cGUsImFsbFN0ZXBzTW9kZUVuYWJsZWQiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLGVZdC5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sZVl0LnByb3RvdHlwZSwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZVl0LnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGVZdC5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlWXQucHJvdG90eXBlLCJlZGdlV2lkdGhGdW5jdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxlWXQucHJvdG90eXBlLCJfc2VsZWN0ZWROb2RlSW5jbHVkZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxlWXQucHJvdG90eXBlLCJfaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGVZdC5wcm90b3R5cGUsImhhbmRsZU5vZGVTZWxlY3RlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlWXQucHJvdG90eXBlLCJlZGdlTGFiZWxGdW5jdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlWXQucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCksdChbYSgic2VsZWN0ZWROb2RlIiwicmVuZGVySGllcmFyY2h5IiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxlWXQucHJvdG90eXBlLCJfdXBkYXRlTm9kZUluY2x1ZGUiLG51bGwpLHQoW2EoImdyYXBoIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxlWXQucHJvdG90eXBlLCJfc2xpbUdyYXBoQ2hhbmdlZCIsbnVsbCksdChbYSgiY29sb3JCeSIsImdyYXBoSGllcmFyY2h5IiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxlWXQucHJvdG90eXBlLCJfZW5zdXJlVGVtcGxhdGVzIixudWxsKSxlWXQ9dChbaSgidGYtZ3JhcGgtYm9hcmQiKV0sZVl0KTtsZXQgbll0PWNsYXNzIGV4dGVuZHMoZXIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcmF3UmVnZXhJbnB1dD0iIix0aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQ9IiIsdGhpcy5fc2VhcmNoVGltZW91dERlbGF5PTE1MCx0aGlzLl9tYXhSZWdleFJlc3VsdHM9NDJ9Z2V0IF9yZWdleElucHV0KCl7cmV0dXJuIHRoaXMuX3Jhd1JlZ2V4SW5wdXQudHJpbSgpfV9yZWdleElucHV0Q2hhbmdlZCgpe3RoaXMuX3JlcXVlc3RTZWFyY2goKX1fY2xlYXJTZWFyY2hSZXN1bHRzKCl7dGhpcy5zZXQoIl9yZWdleE1hdGNoZXMiLFtdKX1fcmVxdWVzdFNlYXJjaCgpe3RoaXMuX3NlYXJjaFBlbmRpbmd8fCh0aGlzLl9yZWdleElucHV0IT09dGhpcy5fcHJldmlvdXNSZWdleElucHV0Pyh0aGlzLl9zZWFyY2hQZW5kaW5nPSEwLHRoaXMuX2V4ZWN1dGVTZWFyY2goKSx0aGlzLmFzeW5jKCgoKT0+e3RoaXMuX3NlYXJjaFBlbmRpbmc9ITEsdGhpcy5fcmVxdWVzdFNlYXJjaCgpfSksdGhpcy5fc2VhcmNoVGltZW91dERlbGF5KSk6dGhpcy5fc2VhcmNoUGVuZGluZz0hMSl9X2V4ZWN1dGVTZWFyY2goKXtpZih0aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQ9dGhpcy5fcmVnZXhJbnB1dCwhdGhpcy5fcmVnZXhJbnB1dClyZXR1cm4gdm9pZCB0aGlzLl9jbGVhclNlYXJjaFJlc3VsdHMoKTt0cnl7dmFyIHQ9bmV3IFJlZ0V4cCh0aGlzLl9yZWdleElucHV0KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLl9jbGVhclNlYXJjaFJlc3VsdHMoKX1jb25zdCBlPVtdLG49dGhpcy5yZW5kZXJIaWVyYXJjaHkuaGllcmFyY2h5LmdldE5vZGVNYXAoKTtTZS5leHBvcnRzLmVhY2gobiwoKG4saSk9PntpZihlLmxlbmd0aD49dGhpcy5fbWF4UmVnZXhSZXN1bHRzKXJldHVybiExO3QudGVzdChpKSYmZS5wdXNoKGkpfSkpLHRoaXMuc2V0KCJfcmVnZXhNYXRjaGVzIixlKX1fbWF0Y2hDbGlja2VkKHQpe3RoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLHQubW9kZWwuaXRlbSksVEd0KHthY3Rpb25JZDpfR3QuTk9ERV9TRUFSQ0hfUkVTVUxUX0ZPQ1VTRUR9KX19O25ZdC50ZW1wbGF0ZT1fZWAKICAgIDxkaXYgaWQ9InNlYXJjaC1jb250YWluZXIiPgogICAgICA8cGFwZXItaW5wdXQKICAgICAgICBpZD0icnVucy1yZWdleCIKICAgICAgICBsYWJlbD0iU2VhcmNoIG5vZGVzIChyZWdleCkiCiAgICAgICAgdmFsdWU9Int7X3Jhd1JlZ2V4SW5wdXR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8ZGl2IGlkPSJzZWFyY2gtcmVzdWx0cy1hbmNob3IiPgogICAgICAgIDxkaXYgaWQ9InNlYXJjaC1yZXN1bHRzIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3JlZ2V4TWF0Y2hlc11dIj4KICAgICAgICAgICAgPGRpdiBpZD0ic2VhcmNoLW1hdGNoIiBvbi1jbGljaz0iX21hdGNoQ2xpY2tlZCI+W1tpdGVtXV08L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgICNzZWFyY2gtY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgI3J1bnMtcmVnZXggewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjc2VhcmNoLXJlc3VsdHMtYW5jaG9yIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtcmVzdWx0cyB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAjc2VhcmNoLW1hdGNoIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICBwYWRkaW5nOiAzcHg7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlyZWN0aW9uOiBydGw7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtbWF0Y2g6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLW9yYW5nZS13ZWFrKTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxuWXQucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLG5ZdC5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxuWXQucHJvdG90eXBlLCJfcmF3UmVnZXhJbnB1dCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxuWXQucHJvdG90eXBlLCJfcHJldmlvdXNSZWdleElucHV0Iix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLG5ZdC5wcm90b3R5cGUsIl9zZWFyY2hUaW1lb3V0RGVsYXkiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxuWXQucHJvdG90eXBlLCJfc2VhcmNoUGVuZGluZyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxuWXQucHJvdG90eXBlLCJfbWF4UmVnZXhSZXN1bHRzIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxuWXQucHJvdG90eXBlLCJfcmVnZXhNYXRjaGVzIix2b2lkIDApLHQoW3MoInJlbmRlckhpZXJhcmNoeSIsIl9yYXdSZWdleElucHV0IiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbll0LnByb3RvdHlwZSwiX3JlZ2V4SW5wdXQiLG51bGwpLHQoW2EoIl9yZWdleElucHV0IiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxuWXQucHJvdG90eXBlLCJfcmVnZXhJbnB1dENoYW5nZWQiLG51bGwpLG5ZdD10KFtpKCJ0Zi1ncmFwaC1ub2RlLXNlYXJjaCIpXSxuWXQpO2NvbnN0IGlZdD0vZGV2aWNlOihbXjpdKzpbMC05XSspJC8scll0PVt7cmVnZXg6aVl0fV0sb1l0PVtdLGFZdD1uZXcgU2V0KFthcXQuQ09NUFVURV9USU1FLGFxdC5NRU1PUlldKTtsZXQgc1l0PWNsYXNzIGV4dGVuZHMoZXIoaWwoeWUpKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuQ29sb3JCeT1hcXQsdGhpcy5zdGF0cz1udWxsLHRoaXMuZGV2aWNlc0ZvclN0YXRzPW51bGwsdGhpcy5jb2xvckJ5PWFxdC5TVFJVQ1RVUkUsdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9zZWxlY3RlZFJ1bkluZGV4PTAsdGhpcy50cmFjZUlucHV0cz0hMSx0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9ITAsdGhpcy5fc2VsZWN0ZWRUYWdJbmRleD0wLHRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlPXlHdC5PUF9HUkFQSCx0aGlzLnNob3dTZXNzaW9uUnVuc0Ryb3Bkb3duPSEwLHRoaXMuc2hvd1VwbG9hZEJ1dHRvbj0hMCx0aGlzLl9sZWdlbmRPcGVuZWQ9ITAsdGhpcy5fZG93bmxvYWRGaWxlbmFtZT0iZ3JhcGgucG5nIn1fb25HcmFwaFR5cGVDaGFuZ2VkQnlVc2VyR2VzdHVyZSgpe1RHdCh7YWN0aW9uSWQ6X0d0LkdSQVBIX1RZUEVfQ0hBTkdFRCxldmVudExhYmVsOnRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlfSl9X29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7VEd0KHthY3Rpb25JZDpfR3QuTk9ERV9DT0xPUl9NT0RFX0NIQU5HRUQsZXZlbnRMYWJlbDp0aGlzLmNvbG9yQnl9KX1fb25UcmFjZUlucHV0c0NoYW5nZWRCeVVzZXJHZXN0dXJlKCl7VEd0KHthY3Rpb25JZDpfR3QuVFJBQ0VfSU5QVVRfTU9ERV9UT0dHTEVEfSl9X3hsYUNsdXN0ZXJzUHJvdmlkZWQodCl7cmV0dXJuIHQmJnQuaGllcmFyY2h5JiZ0LmhpZXJhcmNoeS54bGFDbHVzdGVycy5sZW5ndGg+MH1fc3RhdHNDaGFuZ2VkKHQpe2lmKG51bGwhPXQpe3ZhciBlPXt9O1NlLmV4cG9ydHMuZWFjaCh0LmRldl9zdGF0cywoZnVuY3Rpb24odCl7dmFyIG49U2UuZXhwb3J0cy5zb21lKHJZdCwoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVnZXgudGVzdCh0LmRldmljZSl9KSksaT1TZS5leHBvcnRzLnNvbWUob1l0LChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWdleC50ZXN0KHQuZGV2aWNlKX0pKTtuJiYhaSYmKGVbdC5kZXZpY2VdPSEwKX0pKSx0aGlzLnNldCgiZGV2aWNlc0ZvclN0YXRzIixlKX19Z2V0IF9jdXJyZW50RGV2aWNlcygpe3ZhciB0PXRoaXMuZGV2aWNlc0ZvclN0YXRzO2NvbnN0IGU9dGhpcy5zdGF0cyxuPShlP2UuZGV2X3N0YXRzOltdKS5tYXAoKHQ9PnQuZGV2aWNlKSkuZmlsdGVyKCh0PT5yWXQuc29tZSgoZT0+ZS5yZWdleC50ZXN0KHQpKSkpKSxpPXpHdChuKTtpZigxPT1pLmxlbmd0aCl7Y29uc3QgdD1pWzBdLm1hdGNoKGlZdCk7dCYmKGlbMF09dFsxXSl9cmV0dXJuIG4ubWFwKCgoZSxuKT0+e2xldCByPW51bGw7cmV0dXJuIG9ZdC5mb3JFYWNoKCh0PT57dC5yZWdleC50ZXN0KGUpJiYocj10Lm1zZyl9KSkse2RldmljZTplLHN1ZmZpeDppW25dLHVzZWQ6dFtlXSxpZ25vcmVkTXNnOnJ9fSkpfV9kZXZpY2VDaGVja2JveENsaWNrZWQodCl7Y29uc3QgZT10LnRhcmdldCxuPU9iamVjdC5hc3NpZ24oe30sdGhpcy5kZXZpY2VzRm9yU3RhdHMpLGk9ZS52YWx1ZTtlLmNoZWNrZWQ/bltpXT0hMDpkZWxldGUgbltpXSx0aGlzLnNldCgiZGV2aWNlc0ZvclN0YXRzIixuKX1fbnVtVGFncyh0LGUpe3JldHVybiB0aGlzLl9nZXRUYWdzKHQsZSkubGVuZ3RofV9nZXRUYWdzKHQsZSl7cmV0dXJuIHQmJnRbZV0/dFtlXS50YWdzOltdfV9maXQoKXt0aGlzLmZpcmUoImZpdC10YXAiKX1faXNHcmFkaWVudENvbG9yaW5nKHQsZSl7cmV0dXJuIGFZdC5oYXMoZSkmJm51bGwhPXR9X2VxdWFscyh0LGUpe3JldHVybiB0PT09ZX1nZXQgX2N1cnJlbnREZXZpY2VQYXJhbXMoKXtjb25zdCB0PXRoaXMuY29sb3JCeVBhcmFtcy5kZXZpY2UuZmlsdGVyKCh0PT5yWXQuc29tZSgoZT0+ZS5yZWdleC50ZXN0KHQuZGV2aWNlKSkpKSksZT16R3QodC5tYXAoKHQ9PnQuZGV2aWNlKSkpO2lmKDE9PWUubGVuZ3RoKXt2YXIgbj1lWzBdLm1hdGNoKGlZdCk7biYmKGVbMF09blsxXSl9cmV0dXJuIHQubWFwKCgodCxuKT0+KHtkZXZpY2U6ZVtuXSxjb2xvcjp0LmNvbG9yfSkpKX1nZXQgX2N1cnJlbnRYbGFDbHVzdGVyUGFyYW1zKCl7cmV0dXJuIHRoaXMuY29sb3JCeVBhcmFtcy54bGFfY2x1c3Rlcn1nZXQgX2N1cnJlbnRHcmFkaWVudFBhcmFtcygpe3ZhciB0PXRoaXMuY29sb3JCeVBhcmFtcyxlPXRoaXMuY29sb3JCeTtpZighdGhpcy5faXNHcmFkaWVudENvbG9yaW5nKHRoaXMuc3RhdHMsZSkpcmV0dXJuO2NvbnN0IG49dFtlXTtsZXQgaT1uLm1pblZhbHVlLHI9bi5tYXhWYWx1ZTtyZXR1cm4gZT09PWFxdC5NRU1PUlk/KGk9Ukd0KGksTkd0KSxyPVJHdChyLE5HdCkpOmU9PT1hcXQuQ09NUFVURV9USU1FJiYoaT1SR3QoaSxJR3QpLHI9Ukd0KHIsSUd0KSkse21pblZhbHVlOmksbWF4VmFsdWU6cixzdGFydENvbG9yOm4uc3RhcnRDb2xvcixlbmRDb2xvcjpuLmVuZENvbG9yfX1kb3dubG9hZCgpe3RoaXMuZmlyZSgiZG93bmxvYWQtaW1hZ2UtcmVxdWVzdGVkIix0aGlzLl9kb3dubG9hZEZpbGVuYW1lKX1fdXBkYXRlRmlsZUlucHV0KHQpe2NvbnN0IGU9dC50YXJnZXQuZmlsZXNbMF07aWYoIWUpcmV0dXJuO2xldCBuPWUubmFtZTtjb25zdCBpPW4ubGFzdEluZGV4T2YoIi4iKTtpPj0wJiYobj1uLnN1YnN0cmluZygwLGkpKTtjb25zdCByPW4ubGFzdEluZGV4T2YoIi8iKTtyPj0wJiYobj1uLnN1YnN0cmluZyhyKzEpKSx0aGlzLl9zZXREb3dubG9hZEZpbGVuYW1lKG4pLHRoaXMuc2V0KCJzZWxlY3RlZEZpbGUiLHQpLFRHdCh7YWN0aW9uSWQ6X0d0LlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTX0pfV9kYXRhc2V0c0NoYW5nZWQodCxlKXt2YXIgbjtudWxsIT1lJiYodGhpcy5fc2VsZWN0ZWRSdW5JbmRleD0wKSx0aGlzLl9zZXREb3dubG9hZEZpbGVuYW1lKG51bGw9PT0obj10aGlzLmRhdGFzZXRzW3RoaXMuX3NlbGVjdGVkUnVuSW5kZXhdKXx8dm9pZCAwPT09bj92b2lkIDA6bi5uYW1lKX1fY29tcHV0ZVNlbGVjdGlvbih0LGUsbixpKXtyZXR1cm4gdFtlXSYmdFtlXS50YWdzW25dP3tydW46dFtlXS5uYW1lLHRhZzp0W2VdLnRhZ3Nbbl0udGFnLHR5cGU6aX06bnVsbH1fc2VsZWN0ZWRSdW5JbmRleENoYW5nZWQodCl7dmFyIGU7dGhpcy5kYXRhc2V0cyYmKHRoaXMuY29sb3JCeT1hcXQuU1RSVUNUVVJFLHRoaXMuX3NlbGVjdGVkVGFnSW5kZXg9MCx0aGlzLl9zZWxlY3RlZEdyYXBoVHlwZT10aGlzLl9nZXREZWZhdWx0U2VsZWN0aW9uVHlwZSgpLHRoaXMudHJhY2VJbnB1dHM9ITEsdGhpcy5fc2V0RG93bmxvYWRGaWxlbmFtZShudWxsPT09KGU9dGhpcy5kYXRhc2V0c1t0XSl8fHZvaWQgMD09PWU/dm9pZCAwOmUubmFtZSkpfV9zZWxlY3RlZFRhZ0luZGV4Q2hhbmdlZCgpe3RoaXMuX3NlbGVjdGVkR3JhcGhUeXBlPXRoaXMuX2dldERlZmF1bHRTZWxlY3Rpb25UeXBlKCl9X2dldERlZmF1bHRTZWxlY3Rpb25UeXBlKCl7Y29uc3R7ZGF0YXNldHM6dCxfc2VsZWN0ZWRSdW5JbmRleDplLF9zZWxlY3RlZFRhZ0luZGV4Om59PXRoaXM7aWYoIXR8fCF0W2VdfHwhdFtlXS50YWdzW25dfHx0W2VdLnRhZ3Nbbl0ub3BHcmFwaClyZXR1cm4geUd0Lk9QX0dSQVBIO2NvbnN0IGk9dFtlXTtyZXR1cm4gaS50YWdzW25dLnByb2ZpbGU/eUd0LlBST0ZJTEU6aS50YWdzW25dLmNvbmNlcHR1YWxHcmFwaD95R3QuQ09OQ0VQVFVBTF9HUkFQSDp5R3QuT1BfR1JBUEh9X2dldEZpbGUoKXt0aGlzLiQkKCIjZmlsZSIpLmNsaWNrKCl9X3NldERvd25sb2FkRmlsZW5hbWUodCl7dGhpcy5fZG93bmxvYWRGaWxlbmFtZT0odHx8ImdyYXBoIikrIi5wbmcifV9zdGF0c05vdE51bGwodCl7cmV0dXJuIG51bGwhPT10fV90b2dnbGVMZWdlbmRPcGVuKCl7dGhpcy5zZXQoIl9sZWdlbmRPcGVuZWQiLCF0aGlzLl9sZWdlbmRPcGVuZWQpfV9nZXRUb2dnbGVMZWdlbmRJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbW9yZSI6ImV4cGFuZC1sZXNzIn1fZ2V0U2VsZWN0aW9uT3BHcmFwaERpc2FibGVkKHQsZSxuKXtyZXR1cm4hdFtlXXx8IXRbZV0udGFnc1tuXXx8IXRbZV0udGFnc1tuXS5vcEdyYXBofV9nZXRTZWxlY3Rpb25Qcm9maWxlRGlzYWJsZWQodCxlLG4pe3JldHVybiF0W2VdfHwhdFtlXS50YWdzW25dfHwhdFtlXS50YWdzW25dLnByb2ZpbGV9X2dldFNlbGVjdGlvbkNvbmNlcHR1YWxHcmFwaERpc2FibGVkKHQsZSxuKXtyZXR1cm4hdFtlXXx8IXRbZV0udGFnc1tuXXx8IXRbZV0udGFnc1tuXS5jb25jZXB0dWFsR3JhcGh9fTtzWXQudGVtcGxhdGU9X2VgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3I6ICMwMDA7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy1sZWdlbmQtdGV4dC1jb2xvcjogIzAwMDsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRleHQtY29sb3I6ICM1NTU7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy10aXRsZS1mb250LXNpemU6IDE0cHg7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy1zdWJ0aXRsZS1mb250LXNpemU6IDE0cHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItc2hhcmVkLWlucHV0LXN0eWxlXy1fZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tcGFwZXItZm9udC1zdWJoZWFkXy1fZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy10aXRsZS1jb2xvcjogI2ZmZjsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLWxlZ2VuZC10ZXh0LWNvbG9yOiAjZjNmM2YzOwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcjogI2VlZTsKICAgICAgfQoKICAgICAgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgLS1wYXBlci1kcm9wZG93bi1tZW51LWlucHV0OiB7CiAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgY29sb3I6IGdyYXk7CiAgICAgICAgfQogICAgICAgIC0taXJvbi1pY29uLXdpZHRoOiAxNXB4OwogICAgICAgIC0taXJvbi1pY29uLWhlaWdodDogMTVweDsKICAgICAgICAtLXByaW1hcnktdGV4dC1jb2xvcjogZ3JheTsKICAgICAgICAtLXBhcGVyLWl0ZW0tbWluLWhlaWdodDogMzBweDsKICAgICAgfQoKICAgICAgcGFwZXItYnV0dG9uW3JhaXNlZF0ua2V5Ym9hcmQtZm9jdXMgewogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIH0KCiAgICAgIC5ydW4tZHJvcGRvd24gewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyOiB7CiAgICAgICAgICBwYWRkaW5nOiA1cHggMCA1cHggNXB4OwogICAgICAgIH0KICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CiAgICAgIH0KCiAgICAgIHRhYmxlIHRyIHsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIHRhYmxlIHRkIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIHsKICAgICAgICBwYWRkaW5nOiAwIDIwcHggMjBweDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1ob2xkZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy10ZXh0LWNvbG9yKTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLmxlZ2VuZC10b29sYmFyIHsKICAgICAgICBhcHBlYXJhbmNlOiBub25lOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtbGVnZW5kLXRleHQtY29sb3IpOwogICAgICAgIGZvbnQ6IGluaGVyaXQ7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLmxlZ2VuZC10b29sYmFyLAogICAgICAubGVnZW5kLWNvbnRlbnQgewogICAgICAgIHBhZGRpbmc6IDhweCAyMHB4OwogICAgICB9CgogICAgICAudG9nZ2xlLWxlZ2VuZC1idXR0b24gewogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtbGVnZW5kLXRleHQgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplKTsKICAgICAgfQoKICAgICAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgIH0KICAgICAgc3ZnLmljb24sCiAgICAgIHRmLWdyYXBoLWljb24gewogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgfQogICAgICAuZG9tYWluVmFsdWVzIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICAgIHdpZHRoOiAxNjVweDsKICAgICAgfQogICAgICAuZG9tYWluU3RhcnQgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CiAgICAgIC5kb21haW5FbmQgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgfQogICAgICAuY29sb3JCb3ggewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICB9CgogICAgICAuaW1hZ2UtaWNvbiB7CiAgICAgICAgd2lkdGg6IDI0cHg7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICB9CgogICAgICAuaGVscC1pY29uIHsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5ncmF5IHsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgICAgbWFyZ2luOiA4cHggNXB4IDhweCAwOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy10aXRsZS1jb2xvcik7CiAgICAgIH0KICAgICAgLnRpdGxlIHNtYWxsIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CiAgICAgIC5kZXZpY2VMaXN0LAogICAgICAueGxhQ2x1c3Rlckxpc3QgewogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgICNmaWxlIHsKICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgfQoKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgewogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgY2xlYXI6IGJvdGg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICB9CgogICAgICAuY29sb3ItbGVnZW5kLXJvdyAubGFiZWwsCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHN2ZywKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgdGYtZ3JhcGgtaWNvbiB7CiAgICAgICAgZmxleDogMCAwIDQwcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICAuZGV2aWNlcy1jaGVja2JveCBpbnB1dCB7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAuY29udHJvbC1ob2xkZXIgLmljb24tYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXN1YnRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgICAgbWFyZ2luOiAwIC01cHg7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy10ZXh0LWNvbG9yKTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi10ZXh0IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KCiAgICAgIC51cGxvYWQtYnV0dG9uIHsKICAgICAgICB3aWR0aDogMTY1cHg7CiAgICAgICAgaGVpZ2h0OiAyNXB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi1pY29uIHsKICAgICAgICB3aWR0aDogMjZweDsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICB9CgogICAgICAuaGlkZGVuLWlucHV0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAuYWxsY29udHJvbHMgLmNvbnRyb2wtaG9sZGVyIHsKICAgICAgICBjbGVhcjogYm90aDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC5jb250cm9sLWhvbGRlci5jb250cm9sLW9wdGlvbnMgewogICAgICAgIHBhZGRpbmc6IDAgMCAxNXB4IDE1cHg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC5jb250cm9sLWhvbGRlciBwYXBlci10b2dnbGUtYnV0dG9uIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgIH0KCiAgICAgIHNwYW4uY291bnRlciB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy1zdWJ0aXRsZS1mb250LXNpemUpOwogICAgICAgIGNvbG9yOiBncmF5OwogICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7CiAgICAgIH0KCiAgICAgIC5ydW5zLXJvdyAudGl0bGUsCiAgICAgIC50YWdzLXJvdyAudGl0bGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICB9CgogICAgICAucnVucy1yb3cgcGFwZXItaXRlbSwKICAgICAgLnRhZ3Mtcm93IHBhcGVyLWl0ZW0gewogICAgICAgIC0tcGFwZXItaXRlbTogewogICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRhYmxlLmNvbnRyb2wtaG9sZGVyIHsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgfQoKICAgICAgdGFibGUudGYtZ3JhcGgtY29udHJvbHMgdGQuaW5wdXQtZWxlbWVudC10YWJsZS1kYXRhIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAyMHB4OwogICAgICB9CgogICAgICAuc3BhY2VyIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KCiAgICAgIC5jb2xvci10ZXh0IHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuY29sb3ItdGV4dC5ncmFkaWVudC1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogMCA1cHg7CiAgICAgIH0KCiAgICAgIC8qKiBPdmVycmlkZSBpbmxpbmUgc3R5bGVzIHRoYXQgc3VwcHJlc3MgcG9pbnRlciBldmVudHMgZm9yIGRpc2FibGVkIGJ1dHRvbnMuIE90aGVyd2lzZSwgdGhlICovCiAgICAgIC8qICB0b29sdGlwcyBkbyBub3QgYXBwZWFyLiAqLwogICAgICBwYXBlci1yYWRpby1ncm91cCBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtY2xhcmlmaWVyIHsKICAgICAgICBjb2xvcjogIzI2NjIzNjsKICAgICAgICBjdXJzb3I6IGhlbHA7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CgogICAgICAubGVnZW5kLWNsYXJpZmllciBwYXBlci10b29sdGlwIHsKICAgICAgICB3aWR0aDogMTUwcHg7CiAgICAgIH0KCiAgICAgIC8qKiBPdGhlcndpc2UsIHBvbHltZXIgVUkgY29udHJvbHMgYXBwZWFyIGF0b3Agbm9kZSBzZWFyY2guICovCiAgICAgIHRmLWdyYXBoLW5vZGUtc2VhcmNoIHsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iYWxsY29udHJvbHMiPgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPHRmLWdyYXBoLW5vZGUtc2VhcmNoCiAgICAgICAgICBzZWxlY3RlZC1ub2RlPSJ7e3NlbGVjdGVkTm9kZX19IgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIKICAgICAgICA+PC90Zi1ncmFwaC1ub2RlLXNlYXJjaD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJpY29uLWJ1dHRvbiIgb24tdGFwPSJfZml0IiBhbHQ9IkZpdCB0byBzY3JlZW4iPgogICAgICAgICAgPGlyb24taWNvbiBpY29uPSJhc3BlY3QtcmF0aW8iIGNsYXNzPSJidXR0b24taWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iYnV0dG9uLXRleHQiPkZpdCB0byBzY3JlZW48L3NwYW4+CiAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgY2xhc3M9Imljb24tYnV0dG9uIgogICAgICAgICAgb24tY2xpY2s9ImRvd25sb2FkIgogICAgICAgICAgYWx0PSJEb3dubG9hZCBQTkciCiAgICAgICAgPgogICAgICAgICAgPGlyb24taWNvbiBpY29uPSJmaWxlLWRvd25sb2FkIiBjbGFzcz0iYnV0dG9uLWljb24iPjwvaXJvbi1pY29uPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImJ1dHRvbi10ZXh0Ij5Eb3dubG9hZCBQTkc8L3NwYW4+CiAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd1VwbG9hZEJ1dHRvbl1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgIGNsYXNzPSJpY29uLWJ1dHRvbiIKICAgICAgICAgICAgb24tY2xpY2s9Il9nZXRGaWxlIgogICAgICAgICAgICBhbHQ9IlVwbG9hZCBmaWxlIgogICAgICAgICAgICB0aXRsZT0iVXBsb2FkIGEgcGJ0eHQgZmlsZSB0byB2aWV3IGEgZ3JhcGggZnJvbSB0aGUgbG9jYWwgZmlsZXN5c3RlbSIKICAgICAgICAgID4KICAgICAgICAgICAgPGlyb24taWNvbiBpY29uPSJmaWxlLXVwbG9hZCIgY2xhc3M9ImJ1dHRvbi1pY29uIj48L2lyb24taWNvbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJ1dHRvbi10ZXh0Ij5VcGxvYWQgZmlsZTwvc3Bhbj4KICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgoKICAgICAgICAgIDxkaXYgY2xhc3M9ImhpZGRlbi1pbnB1dCI+CiAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgIHR5cGU9ImZpbGUiCiAgICAgICAgICAgICAgaWQ9ImZpbGUiCiAgICAgICAgICAgICAgbmFtZT0iZmlsZSIKICAgICAgICAgICAgICBvbi1jaGFuZ2U9Il91cGRhdGVGaWxlSW5wdXQiCiAgICAgICAgICAgICAgYWNjZXB0PSIucGJ0eHQiCiAgICAgICAgICAgIC8+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgcnVucy1yb3ciPgogICAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj4KICAgICAgICAgIFJ1biA8c3BhbiBjbGFzcz0iY291bnRlciI+KFtbZGF0YXNldHMubGVuZ3RoXV0pPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICBuby1sYWJlbC1mbG9hdAogICAgICAgICAgbm8tYW5pbWF0aW9ucwogICAgICAgICAgbm9pbmsKICAgICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgICAgICBjbGFzcz0icnVuLWRyb3Bkb3duIgogICAgICAgID4KICAgICAgICAgIDxwYXBlci1saXN0Ym94CiAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRSdW5JbmRleH19IgogICAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2RhdGFzZXRzXV0iPgogICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbaXRlbS5uYW1lXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dTZXNzaW9uUnVuc0Ryb3Bkb3duXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIHRhZ3Mtcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj4KICAgICAgICAgICAgVGFnCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb3VudGVyIgogICAgICAgICAgICAgID4oW1tfbnVtVGFncyhkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgpXV0pPC9zcGFuCiAgICAgICAgICAgID4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgbm8tbGFiZWwtZmxvYXQKICAgICAgICAgICAgbm8tYW5pbWF0aW9ucwogICAgICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICAgICAgICBub2luawogICAgICAgICAgICBjbGFzcz0icnVuLWRyb3Bkb3duIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZFRhZ0luZGV4fX0iCiAgICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgICBpdGVtcz0iW1tfZ2V0VGFncyhkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgpXV0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+W1tpdGVtLmRpc3BsYXlOYW1lXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+R3JhcGggdHlwZTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkR3JhcGhUeXBlfX0iCiAgICAgICAgICBvbi1wYXBlci1yYWRpby1ncm91cC1jaGFuZ2VkPSJfb25HcmFwaFR5cGVDaGFuZ2VkQnlVc2VyR2VzdHVyZSIKICAgICAgICA+CiAgICAgICAgICA8IS0tIE5vdGUgdGhhdCB0aGUgbmFtZSBoYXMgdG8gbWF0Y2ggdGhhdCBvZiB0Zl9ncmFwaF9jb21tb24uU2VsZWN0aW9uVHlwZS4gLS0+CiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICAgIG5hbWU9Im9wX2dyYXBoIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uT3BHcmFwaERpc2FibGVkKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgpXV0iCiAgICAgICAgICAgID5PcCBncmFwaDwvcGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICA+CiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICAgIG5hbWU9ImNvbmNlcHR1YWxfZ3JhcGgiCiAgICAgICAgICAgIGRpc2FibGVkPSJbW19nZXRTZWxlY3Rpb25Db25jZXB0dWFsR3JhcGhEaXNhYmxlZChkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4KV1dIgogICAgICAgICAgICA+Q29uY2VwdHVhbCBncmFwaDwvcGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICA+CiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICAgIG5hbWU9InByb2ZpbGUiCiAgICAgICAgICAgIGRpc2FibGVkPSJbW19nZXRTZWxlY3Rpb25Qcm9maWxlRGlzYWJsZWQoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4LCBfc2VsZWN0ZWRUYWdJbmRleCldXSIKICAgICAgICAgICAgPlByb2ZpbGU8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+Tm9kZSBvcHRpb25zPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIGNvbnRyb2wtb3B0aW9ucyI+CiAgICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24KICAgICAgICAgIGNoZWNrZWQ9Int7dHJhY2VJbnB1dHN9fSIKICAgICAgICAgIG9uLWNoYW5nZT0iX29uVHJhY2VJbnB1dHNDaGFuZ2VkQnlVc2VyR2VzdHVyZSIKICAgICAgICA+CiAgICAgICAgICBUcmFjZSBpbnB1dHMKICAgICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24gY2hlY2tlZD0ie3thdXRvRXh0cmFjdE5vZGVzfX0iPgogICAgICAgICAgQXV0by1leHRyYWN0IGhpZ2gtZGVncmVlIG5vZGVzCiAgICAgICAgPC9wYXBlci10b2dnbGUtYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlYWx0aFBpbGxzRmVhdHVyZUVuYWJsZWRdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24gY2hlY2tlZD0ie3toZWFsdGhQaWxsc1RvZ2dsZWRPbn19IgogICAgICAgICAgICA+U2hvdyBoZWFsdGggcGlsbHM8L3BhcGVyLXRvZ2dsZS1idXR0b24KICAgICAgICAgID4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPkNvbG9yIGJ5PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIGNvbnRyb2wtb3B0aW9ucyI+CiAgICAgICAgPHBhcGVyLXJhZGlvLWdyb3VwCiAgICAgICAgICBzZWxlY3RlZD0ie3tjb2xvckJ5fX0iCiAgICAgICAgICBvbi1wYXBlci1yYWRpby1ncm91cC1jaGFuZ2VkPSJfb25Db2xvckJ5Q2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJbW0NvbG9yQnkuTk9ORV1dIj5Ob25lPC9wYXBlci1yYWRpby1idXR0b24+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJbW0NvbG9yQnkuU1RSVUNUVVJFXV0iCiAgICAgICAgICAgID5TdHJ1Y3R1cmU8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5LkRFVklDRV1dIgogICAgICAgICAgICA+RGV2aWNlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICAgIGlkPSJ4bGEtY2x1c3Rlci1yYWRpby1idXR0b24iCiAgICAgICAgICAgIG5hbWU9IltbQ29sb3JCeS5YTEFfQ0xVU1RFUl1dIgogICAgICAgICAgICBkaXNhYmxlZD0iW1shX3hsYUNsdXN0ZXJzUHJvdmlkZWQocmVuZGVySGllcmFyY2h5KV1dIgogICAgICAgICAgPgogICAgICAgICAgICBYTEEgY2x1c3RlcgogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0ieGxhLWNsdXN0ZXItcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgID4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgWExBIGNsdXN0ZXIgaXMgb25seSBlbmFibGVkIGlmIGF0IGxlYXN0IDEgb3Agc3BlY2lmaWVzCiAgICAgICAgICAgIGFuIFhMQSBjbHVzdGVyLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgaWQ9ImNvbXB1dGUtdGltZS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIG5hbWU9IltbQ29sb3JCeS5DT01QVVRFX1RJTUVdXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIXN0YXRzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbXB1dGUgdGltZQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0iY29tcHV0ZS10aW1lLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IGNvbXB1dGUgdGltZSBpcyBvbmx5IGVuYWJsZWQgaWYgdGhlIFJ1bk1ldGFkYXRhIHByb3RvIGlzCiAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgRmlsZVdyaXRlciB3aGVuIGEgc3BlY2lmaWMgc2Vzc2lvbiBpcyBydW4uCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0ibWVtb3J5LXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgbmFtZT0iW1tDb2xvckJ5Lk1FTU9SWV1dIgogICAgICAgICAgICBkaXNhYmxlZD0iW1shc3RhdHNdXSIKICAgICAgICAgID4KICAgICAgICAgICAgTWVtb3J5CiAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgZm9yPSJtZW1vcnktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgID4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgbWVtb3J5IGlzIG9ubHkgZW5hYmxlZCBpZiB0aGUgUnVuTWV0YWRhdGEgcHJvdG8gaXMKICAgICAgICAgICAgcGFzc2VkIHRvIHRoZSBGaWxlV3JpdGVyIHdoZW4gYSBzcGVjaWZpYyBzZXNzaW9uIGlzIHJ1bi4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICAgIGlkPSJ0cHUtY29tcGF0aWJpbGl0eS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIG5hbWU9IltbQ29sb3JCeS5PUF9DT01QQVRJQklMSVRZXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIFRQVSBjb21wYXRpYmlsaXR5CiAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgZm9yPSJ0cHUtY29tcGF0aWJpbGl0eS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgPgogICAgICAgICAgICBDb2xvcmluZyBieSB3aGV0aGVyIGFuIG9wZXJhdGlvbiBpcyBjb21wYXRpYmxlIGZvciB0aGUgVFBVIGRldmljZS4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgIDxzcGFuIGNsYXNzPSJzcGFjZXIiPjwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1ob2xkZXIiPgogICAgICA8YnV0dG9uIGNsYXNzPSJsZWdlbmQtdG9vbGJhciIgb24tY2xpY2s9Il90b2dnbGVMZWdlbmRPcGVuIj4KICAgICAgICA8c3BhbiBjbGFzcz0idG9nZ2xlLWxlZ2VuZC10ZXh0Ij5MZWdlbmQ8L3NwYW4+CiAgICAgICAgPGlyb24taWNvbgogICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlTGVnZW5kSWNvbihfbGVnZW5kT3BlbmVkKV1dIgogICAgICAgICAgY2xhc3M9InRvZ2dsZS1sZWdlbmQtYnV0dG9uIgogICAgICAgID4KICAgICAgICA8L2lyb24taWNvbj4KICAgICAgPC9idXR0b24+CiAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0iW1tfbGVnZW5kT3BlbmVkXV0iIGNsYXNzPSJsZWdlbmQtY29udGVudCI+CiAgICAgICAgPCEtLSBDb2xvci1tb2RlLXNwZWNpZmljIGxlZ2VuZCBpdGVtcyAtLT4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0dyYWRpZW50Q29sb3Jpbmcoc3RhdHMsIGNvbG9yQnkpXV0iPgogICAgICAgICAgICA8c3ZnIHdpZHRoPSIxNDAiIGhlaWdodD0iMjAiIGNsYXNzPSJjb2xvci10ZXh0IGdyYWRpZW50LWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQKICAgICAgICAgICAgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50IgogICAgICAgICAgICAgICAgICB4MT0iMCUiCiAgICAgICAgICAgICAgICAgIHkxPSIwJSIKICAgICAgICAgICAgICAgICAgeDI9IjEwMCUiCiAgICAgICAgICAgICAgICAgIHkyPSIwJSIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPHN0b3AKICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic3RhcnQiCiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwJSIKICAgICAgICAgICAgICAgICAgICBzdG9wLWNvbG9yJD0iW1tfY3VycmVudEdyYWRpZW50UGFyYW1zLnN0YXJ0Q29sb3JdXSIKICAgICAgICAgICAgICAgICAgPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgPHN0b3AKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZW5kIgogICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMTAwJSIKICAgICAgICAgICAgICAgICAgICBzdG9wLWNvbG9yJD0iW1tfY3VycmVudEdyYWRpZW50UGFyYW1zLmVuZENvbG9yXV0iCiAgICAgICAgICAgICAgICAgID48L3N0b3A+CiAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PgogICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICA8cmVjdAogICAgICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICB3aWR0aD0iMTM1IgogICAgICAgICAgICAgICAgaGVpZ2h0PSIyMCIKICAgICAgICAgICAgICAgIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQpIgogICAgICAgICAgICAgICAgc3Ryb2tlPSJibGFjayIKICAgICAgICAgICAgICA+PC9yZWN0PgogICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG9tYWluVmFsdWVzIGNvbG9yLXRleHQiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvbWFpblN0YXJ0Ij5bW19jdXJyZW50R3JhZGllbnRQYXJhbXMubWluVmFsdWVdXTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvbWFpbkVuZCI+W1tfY3VycmVudEdyYWRpZW50UGFyYW1zLm1heFZhbHVlXV08L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxiciBzdHlsZT0iY2xlYXI6IGJvdGgiIC8+CiAgICAgICAgICAgIDxkaXY+RGV2aWNlcyBpbmNsdWRlZCBpbiBzdGF0czo8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGV2aWNlTGlzdCI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY3VycmVudERldmljZXNdXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93IGRldmljZXMtY2hlY2tib3giPgogICAgICAgICAgICAgICAgICA8c3BhbgogICAgICAgICAgICAgICAgICAgID48aW5wdXQKICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImNoZWNrYm94IgogICAgICAgICAgICAgICAgICAgICAgdmFsdWUkPSJbW2l0ZW0uZGV2aWNlXV0iCiAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkJD0iW1tpdGVtLnVzZWRdXSIKICAgICAgICAgICAgICAgICAgICAgIG9uLWNsaWNrPSJfZGV2aWNlQ2hlY2tib3hDbGlja2VkIgogICAgICAgICAgICAgICAgICAvPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHNwYW4+W1tpdGVtLnN1ZmZpeF1dPC9zcGFuPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaXRlbS5pZ25vcmVkTXNnXV0iPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgaWNvbj0iaGVscCIKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJoZWxwLWljb24iCiAgICAgICAgICAgICAgICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgID5bW2l0ZW0uaWdub3JlZE1zZ11dPC9wYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ3N0cnVjdHVyZScpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+IGNvbG9ycyA8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5zYW1lIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgIHR5cGU9Ik1FVEEiCiAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgIGZpbGwtb3ZlcnJpZGU9IiNlZWUiCiAgICAgICAgICAgICAgICAgIHN0cm9rZS1vdmVycmlkZT0iI2E2YTZhNiIKICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj51bmlxdWUgc3Vic3RydWN0dXJlPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAnZGV2aWNlJyldXSI+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY3VycmVudERldmljZVBhcmFtc11dIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICAgIHR5cGU9Ik1FVEEiCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSJbW2l0ZW0uY29sb3JdXSIKICAgICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNhNmE2YTYiCiAgICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPltbaXRlbS5kZXZpY2VdXTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjZWVlIgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNhNmE2YTYiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW5rbm93biBkZXZpY2U8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICd4bGFfY2x1c3RlcicpXV0iPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnRYbGFDbHVzdGVyUGFyYW1zXV0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICAgIDxzdmc+CiAgICAgICAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgICAgICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgICAgICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjdW5maWxsZWQtcmVjdCIKICAgICAgICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6W1tpdGVtLmNvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgPjwvdXNlPgogICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+W1tpdGVtLnhsYV9jbHVzdGVyXV08L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHN2Zz4KICAgICAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNncmV5LXJlY3QiCiAgICAgICAgICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgICA+PC91c2U+CiAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVua25vd24gWExBIGNsdXN0ZXI8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdvcF9jb21wYXRpYmlsaXR5JyldXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLXRleHQiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgdHlwZT0iT1AiCiAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgIGZpbGwtb3ZlcnJpZGU9IiMwZjlkNTgiCiAgICAgICAgICAgICAgICAgIHN0cm9rZS1vdmVycmlkZT0iI2NjYyIKICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5WYWxpZCBPcDwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgIHR5cGU9Ik9QIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjZGI0NDM3IgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+SW52YWxpZCBPcDwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdGF0c05vdE51bGwoc3RhdHMpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJNRVRBIiBoZWlnaHQ9IjE2IiBmYWRlZD48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW51c2VkIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIENvbW1vbiBsZWdlbmQgaXRlbXMgLS0+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD48L3RkPgogICAgICAgICAgICAgICAgPHRkPigqID0gZXhwYW5kYWJsZSk8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICAgIHR5cGU9Ik1FVEEiCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjZDlkOWQ5IgogICAgICAgICAgICAgICAgICAgIHN0cm9rZS1vdmVycmlkZT0iI2NjYyIKICAgICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIE5hbWVzcGFjZTxzcGFuIGNsYXNzPSJncmF5Ij4qPC9zcGFuPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRW5jYXBzdWxhdGVzIGEgc2V0IG9mIG5vZGVzLiBOYW1lc3BhY2UgaXMgaGllcmFyY2hpY2FsIGFuZAogICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gc2NvcGUuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9Ik9QIiBoZWlnaHQ9IjE2Ij48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBPcE5vZGUKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIE5vZGUgdGhhdCBwZXJmb3JtcyBhbiBvcGVyYXRpb24uIFRoZXNlIG5vZGVzIGNhbm5vdAogICAgICAgICAgICAgICAgICAgICAgZXhwYW5kLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJTRVJJRVMiIGhlaWdodD0iMTYiPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIFVuY29ubmVjdGVkIHNlcmllczxzcGFuIGNsYXNzPSJncmF5Ij4qPC9zcGFuPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgU2VxdWVuY2Ugb2YgbnVtYmVyZWQgbm9kZXMgdGhhdCBhcmUgbm90IGNvbm5lY3RlZCB0byBlYWNoCiAgICAgICAgICAgICAgICAgICAgICBvdGhlci4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJTRVJJRVMiCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbAogICAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgQ29ubmVjdGVkIHNlcmllczxzcGFuIGNsYXNzPSJncmF5Ij4qPC9zcGFuPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgU2VxdWVuY2Ugb2YgbnVtYmVyZWQgbm9kZXMgdGhhdCBhcmUgY29ubmVjdGVkIHRvIGVhY2gKICAgICAgICAgICAgICAgICAgICAgIG90aGVyLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIj4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlCiAgICAgICAgICAgICAgICAgICAgICBmaWxsPSJ3aGl0ZSIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT0iIzg0ODQ4NCIKICAgICAgICAgICAgICAgICAgICAgIGN4PSIxMCIKICAgICAgICAgICAgICAgICAgICAgIGN5PSIxMCIKICAgICAgICAgICAgICAgICAgICAgIHI9IjUiCiAgICAgICAgICAgICAgICAgICAgPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIENvbnN0YW50CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBOb2RlIHRoYXQgb3V0cHV0cyBhIGNvbnN0YW50IHZhbHVlLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJTVU1NQVJZIiBoZWlnaHQ9IjIwIj48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBTdW1tYXJ5CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBOb2RlIHRoYXQgY29sbGVjdHMgZGF0YSBmb3IgdmlzdWFsaXphdGlvbiB3aXRoaW4KICAgICAgICAgICAgICAgICAgICAgIFRlbnNvckJvYXJkLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8c3ZnCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Imljb24iCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNXB4IgogICAgICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICAgICAgdmlld0JveD0iMCAwIDE1IDE1IgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgICAgICA8bWFya2VyCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtbGVnZW5kIgogICAgICAgICAgICAgICAgICAgICAgICBmaWxsPSIjYmJiIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJXaWR0aD0iMTAiCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlckhlaWdodD0iMTAiCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZlg9IjkiCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZlk9IjUiCiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICAgIDwvbWFya2VyPgogICAgICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICAgICAgICAgbWFya2VyLWVuZD0idXJsKCNkYXRhZmxvdy1hcnJvd2hlYWQtbGVnZW5kKSIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT0iI2JiYiIKICAgICAgICAgICAgICAgICAgICAgIGQ9Ik0yIDkgbCAyOSAwIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogICAgICAgICAgICAgICAgICAgID48L3BhdGg+CiAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgRGF0YWZsb3cgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoZSBkYXRhIGZsb3cgYmV0d2VlbiBvcGVyYXRpb25zLiBFZGdlcyBmbG93CiAgICAgICAgICAgICAgICAgICAgICB1cHdhcmRzIHVubGVzcyBhcnJvd2hlYWRzIHNwZWNpZnkgb3RoZXJ3aXNlLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8c3ZnCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Imljb24iCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNXB4IgogICAgICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICAgICAgdmlld0JveD0iMCAwIDE1IDE1IgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT0iI2JiYiIKICAgICAgICAgICAgICAgICAgICAgIGQ9Ik0yIDkgbCAyOSAwIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT0iMiwgMiIKICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPgogICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jeSBlZGdlCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBFZGdlIHNob3dpbmcgdGhlIGNvbnRyb2wgZGVwZW5kZW5jeSBiZXR3ZWVuIG9wZXJhdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxzdmcKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaWNvbiIKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE1cHgiCiAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PSIwIDAgMTUgMTUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8ZGVmcz4KICAgICAgICAgICAgICAgICAgICAgIDxtYXJrZXIKICAgICAgICAgICAgICAgICAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtbGVnZW5kIgogICAgICAgICAgICAgICAgICAgICAgICBmaWxsPSIjRkZCNzREIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJXaWR0aD0iMTAiCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlckhlaWdodD0iMTAiCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZlg9IjkiCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZlk9IjUiCiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICAgIDwvbWFya2VyPgogICAgICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICAgICAgICAgbWFya2VyLWVuZD0idXJsKCNyZWZlcmVuY2UtYXJyb3doZWFkLWxlZ2VuZCkiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNGRkI3NEQiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPgogICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZSBlZGdlCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBFZGdlIHNob3dpbmcgdGhhdCB0aGUgb3V0Z29pbmcgb3BlcmF0aW9uIG5vZGUgY2FuIG11dGF0ZQogICAgICAgICAgICAgICAgICAgICAgdGhlIGluY29taW5nIHRlbnNvci4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgPC9kaXY+CiAgYCx0KFtvKHt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3N0YXRzQ2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sc1l0LnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHNZdC5wcm90b3R5cGUsImRldmljZXNGb3JTdGF0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sc1l0LnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sc1l0LnByb3RvdHlwZSwiY29sb3JCeVBhcmFtcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5LG9ic2VydmVyOiJfZGF0YXNldHNDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxzWXQucHJvdG90eXBlLCJkYXRhc2V0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIix5V3QpXSxzWXQucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLGNvbXB1dGVkOiJfY29tcHV0ZVNlbGVjdGlvbihkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4LCBfc2VsZWN0ZWRHcmFwaFR5cGUpIn0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxzWXQucHJvdG90eXBlLCJzZWxlY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHNZdC5wcm90b3R5cGUsInNlbGVjdGVkRmlsZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX3NlbGVjdGVkUnVuSW5kZXhDaGFuZ2VkIn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxzWXQucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5JbmRleCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxzWXQucHJvdG90eXBlLCJ0cmFjZUlucHV0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxzWXQucHJvdG90eXBlLCJhdXRvRXh0cmFjdE5vZGVzIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLG9ic2VydmVyOiJfc2VsZWN0ZWRUYWdJbmRleENoYW5nZWQifSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLHNZdC5wcm90b3R5cGUsIl9zZWxlY3RlZFRhZ0luZGV4Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHNZdC5wcm90b3R5cGUsIl9zZWxlY3RlZEdyYXBoVHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sc1l0LnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sc1l0LnByb3RvdHlwZSwic2hvd1Nlc3Npb25SdW5zRHJvcGRvd24iLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxzWXQucHJvdG90eXBlLCJzaG93VXBsb2FkQnV0dG9uIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sc1l0LnByb3RvdHlwZSwiaGVhbHRoUGlsbHNGZWF0dXJlRW5hYmxlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxzWXQucHJvdG90eXBlLCJoZWFsdGhQaWxsc1RvZ2dsZWRPbiIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHNZdC5wcm90b3R5cGUsIl9sZWdlbmRPcGVuZWQiLHZvaWQgMCksdChbcygiZGV2aWNlc0ZvclN0YXRzIiksZSgiZGVzaWduOnR5cGUiLEFycmF5KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxzWXQucHJvdG90eXBlLCJfY3VycmVudERldmljZXMiLG51bGwpLHQoW3MoImNvbG9yQnlQYXJhbXMiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLHNZdC5wcm90b3R5cGUsIl9jdXJyZW50RGV2aWNlUGFyYW1zIixudWxsKSx0KFtzKCJjb2xvckJ5UGFyYW1zIiksZSgiZGVzaWduOnR5cGUiLEFycmF5KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxzWXQucHJvdG90eXBlLCJfY3VycmVudFhsYUNsdXN0ZXJQYXJhbXMiLG51bGwpLHQoW3MoImNvbG9yQnlQYXJhbXMiLCJjb2xvckJ5IiksZSgiZGVzaWduOnR5cGUiLE9iamVjdCksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sc1l0LnByb3RvdHlwZSwiX2N1cnJlbnRHcmFkaWVudFBhcmFtcyIsbnVsbCksc1l0PXQoW2koInRmLWdyYXBoLWNvbnRyb2xzIildLHNZdCk7Y2xhc3MgbFl0e2lzTm90VHB1T3AodCl7cmV0dXJuLTEhPXQudG9Mb3dlckNhc2UoKS5zZWFyY2goImNwdToiKXx8LTEhPXQudG9Mb3dlckNhc2UoKS5zZWFyY2goImdwdToiKXx8LTE9PXQudG9Mb3dlckNhc2UoKS5zZWFyY2goInRwdSIpfW9wVmFsaWQodCl7cmV0dXJuIDA9PXQubmFtZS5zZWFyY2goVkd0KXx8IXQub3B8fCEoIXQuZGV2aWNlfHwhdGhpcy5pc05vdFRwdU9wKHQuZGV2aWNlKSl8fCEoIXQuZGV2aWNlfHwtMT09dC5kZXZpY2Uuc2VhcmNoKCJUUFVfU1lTVEVNIikpfHxTZS5leHBvcnRzLmluY2x1ZGVzKGxZdC5XSElURUxJU1QsdC5vcCl9fWZ1bmN0aW9uIGNZdCh0KXtyZXR1cm4gbmV3IFByb21pc2UoKChlLG4pPT57ZmV0Y2godCkudGhlbigodD0+e3Qub2s/dC5hcnJheUJ1ZmZlcigpLnRoZW4oZSxuKTp0LnRleHQoKS50aGVuKG4sbil9KSl9KSl9bFl0LldISVRFTElTVD1bIkFicyIsIkFjb3MiLCJBY29zaCIsIkFkZCIsIkFkZE4iLCJBZGRWMiIsIkFkanVzdENvbnRyYXN0djIiLCJBZGp1c3RIdWUiLCJBZGp1c3RTYXR1cmF0aW9uIiwiQWxsIiwiQWxsVG9BbGwiLCJBbmdsZSIsIkFueSIsIkFwcHJveGltYXRlRXF1YWwiLCJBcmdNYXgiLCJBcmdNaW4iLCJBc2luIiwiQXNpbmgiLCJBc3NlcnQiLCJBc3NpZ25BZGRWYXJpYWJsZU9wIiwiQXNzaWduU3ViVmFyaWFibGVPcCIsIkFzc2lnblZhcmlhYmxlT3AiLCJBdGFuIiwiQXRhbjIiLCJBdGFuaCIsIkF2Z1Bvb2wiLCJBdmdQb29sM0QiLCJBdmdQb29sM0RHcmFkIiwiQXZnUG9vbEdyYWQiLCJCYXRjaE1hdE11bCIsIkJhdGNoTWF0TXVsVjIiLCJCYXRjaFRvU3BhY2UiLCJCYXRjaFRvU3BhY2VORCIsIkJlc3NlbEkwZSIsIkJlc3NlbEkxZSIsIkJldGFpbmMiLCJCaWFzQWRkIiwiQmlhc0FkZEdyYWQiLCJCaWFzQWRkVjEiLCJCaXRjYXN0IiwiQml0d2lzZUFuZCIsIkJpdHdpc2VPciIsIkJpdHdpc2VYb3IiLCJCcm9hZGNhc3RBcmdzIiwiQnJvYWRjYXN0R3JhZGllbnRBcmdzIiwiQnJvYWRjYXN0VG8iLCJCdWNrZXRpemUiLCJDYXNlIiwiQ2FzdCIsIkNlaWwiLCJDaGVja051bWVyaWNzIiwiQ2hvbGVza3kiLCJDbGlwQnlWYWx1ZSIsIkNvbGxlY3RpdmVQZXJtdXRlIiwiQ29sbGVjdGl2ZVJlZHVjZVYyIiwiQ29tcGxleCIsIkNvbXBsZXhBYnMiLCJDb25jYXQiLCJDb25jYXRPZmZzZXQiLCJDb25jYXRWMiIsIkNvbmoiLCJDb25qdWdhdGVUcmFuc3Bvc2UiLCJDb25zdCIsIkNvbnRyb2xUcmlnZ2VyIiwiQ29udjJEIiwiQ29udjJEQmFja3Byb3BGaWx0ZXIiLCJDb252MkRCYWNrcHJvcElucHV0IiwiQ29udjNEIiwiQ29udjNEQmFja3Byb3BGaWx0ZXJWMiIsIkNvbnYzREJhY2twcm9wSW5wdXRWMiIsIkNvcyIsIkNvc2giLCJDcm9zcyIsIkNyb3NzUmVwbGljYVN1bSIsIkN1bXByb2QiLCJDdW1zdW0iLCJEYXRhRm9ybWF0RGltTWFwIiwiRGF0YUZvcm1hdFZlY1Blcm11dGUiLCJEZXB0aFRvU3BhY2UiLCJEZXB0aHdpc2VDb252MmROYXRpdmUiLCJEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlciIsIkRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQiLCJEZXF1YW50aXplIiwiRGV2aWNlSW5kZXgiLCJEaWFnIiwiRGlhZ1BhcnQiLCJEaWdhbW1hIiwiRGl2IiwiRGl2Tm9OYW4iLCJEeW5hbWljU3RpdGNoIiwiRWluc3VtIiwiRWx1IiwiRWx1R3JhZCIsIkVtcHR5IiwiRW1wdHlUZW5zb3JMaXN0IiwiRW5zdXJlU2hhcGUiLCJFcXVhbCIsIkVyZiIsIkVyZmMiLCJFcmZpbnYiLCJFeHAiLCJFeHBhbmREaW1zIiwiRXhwbTEiLCJFeHRyYWN0SW1hZ2VQYXRjaGVzIiwiRkZUIiwiRkZUMkQiLCJGRlQzRCIsIkZha2VQYXJhbSIsIkZha2VRdWFudFdpdGhNaW5NYXhBcmdzIiwiRmFrZVF1YW50V2l0aE1pbk1heEFyZ3NHcmFkaWVudCIsIkZha2VRdWFudFdpdGhNaW5NYXhWYXJzIiwiRmFrZVF1YW50V2l0aE1pbk1heFZhcnNHcmFkaWVudCIsIkZpbGwiLCJGbG9vciIsIkZsb29yRGl2IiwiRmxvb3JNb2QiLCJGdXNlZEJhdGNoTm9ybSIsIkZ1c2VkQmF0Y2hOb3JtR3JhZCIsIkZ1c2VkQmF0Y2hOb3JtR3JhZFYyIiwiRnVzZWRCYXRjaE5vcm1HcmFkVjMiLCJGdXNlZEJhdGNoTm9ybVYyIiwiRnVzZWRCYXRjaE5vcm1WMyIsIkdhdGhlciIsIkdhdGhlck5kIiwiR2F0aGVyVjIiLCJHZXRJdGVtIiwiR3JlYXRlciIsIkdyZWF0ZXJFcXVhbCIsIkhTVlRvUkdCIiwiSUZGVCIsIklGRlQyRCIsIklGRlQzRCIsIklSRkZUIiwiSVJGRlQyRCIsIklSRkZUM0QiLCJJZGVudGl0eSIsIklkZW50aXR5TiIsIklmIiwiSWdhbW1hIiwiSWdhbW1hR3JhZEEiLCJJZ2FtbWFjIiwiSW1hZyIsIkluVG9wS1YyIiwiSW5mZWVkRGVxdWV1ZSIsIkluZmVlZERlcXVldWVUdXBsZSIsIklucGxhY2VBZGQiLCJJbnBsYWNlVXBkYXRlIiwiSW52IiwiSW52ZXJ0IiwiSW52ZXJ0UGVybXV0YXRpb24iLCJJc0Zpbml0ZSIsIklzSW5mIiwiSXNOYW4iLCJLdGhPcmRlclN0YXRpc3RpYyIsIkwyTG9zcyIsIkxSTiIsIkxSTkdyYWQiLCJMZWFreVJlbHUiLCJMZWFreVJlbHVHcmFkIiwiTGVmdFNoaWZ0IiwiTGVzcyIsIkxlc3NFcXVhbCIsIkxnYW1tYSIsIkxpblNwYWNlIiwiTGlzdERpZmYiLCJMb2ciLCJMb2cxcCIsIkxvZ1NvZnRtYXgiLCJMb2dpY2FsQW5kIiwiTG9naWNhbE5vdCIsIkxvZ2ljYWxPciIsIkxvd2VyQm91bmQiLCJNYWtlVW5pcXVlIiwiTWF0TXVsIiwiTWF0cml4QmFuZFBhcnQiLCJNYXRyaXhEaWFnIiwiTWF0cml4RGlhZ1BhcnQiLCJNYXRyaXhEaWFnUGFydFYyIiwiTWF0cml4RGlhZ1BhcnRWMyIsIk1hdHJpeERpYWdWMiIsIk1hdHJpeERpYWdWMyIsIk1hdHJpeEludmVyc2UiLCJNYXRyaXhTZXREaWFnIiwiTWF0cml4U2V0RGlhZ1YyIiwiTWF0cml4U2V0RGlhZ1YzIiwiTWF0cml4U29sdmUiLCJNYXRyaXhUcmlhbmd1bGFyU29sdmUiLCJNYXgiLCJNYXhQb29sIiwiTWF4UG9vbDNEIiwiTWF4UG9vbDNER3JhZCIsIk1heFBvb2wzREdyYWRHcmFkIiwiTWF4UG9vbEdyYWQiLCJNYXhQb29sR3JhZEdyYWQiLCJNYXhQb29sR3JhZEdyYWRWMiIsIk1heFBvb2xHcmFkVjIiLCJNYXhQb29sVjIiLCJNYXhpbXVtIiwiTWVhbiIsIk1pbiIsIk1pbmltdW0iLCJNaXJyb3JQYWQiLCJNaXJyb3JQYWRHcmFkIiwiTW9kIiwiTXVsIiwiTXVsTm9OYW4iLCJNdWx0aW5vbWlhbCIsIk5kdHJpIiwiTmVnIiwiTmV4dEFmdGVyIiwiTm9PcCIsIk5vbk1heFN1cHByZXNzaW9uVjQiLCJOb3RFcXVhbCIsIk9uZUhvdCIsIk9uZXNMaWtlIiwiT3V0ZmVlZEVucXVldWUiLCJPdXRmZWVkRW5xdWV1ZVR1cGxlIiwiUGFjayIsIlBhZCIsIlBhZFYyIiwiUGFyYWxsZWxEeW5hbWljU3RpdGNoIiwiUGFyYW1ldGVyaXplZFRydW5jYXRlZE5vcm1hbCIsIlBhcnRpdGlvbmVkQ2FsbCIsIlBsYWNlaG9sZGVyV2l0aERlZmF1bHQiLCJQb2x5Z2FtbWEiLCJQb3B1bGF0aW9uQ291bnQiLCJQb3ciLCJQcmV2ZW50R3JhZGllbnQiLCJQcm9kIiwiUXIiLCJRdWFudGl6ZUFuZERlcXVhbnRpemVWMiIsIlF1YW50aXplQW5kRGVxdWFudGl6ZVYzIiwiUkZGVCIsIlJGRlQyRCIsIlJGRlQzRCIsIlJHQlRvSFNWIiwiUmFuZG9tR2FtbWFHcmFkIiwiUmFuZG9tU2h1ZmZsZSIsIlJhbmRvbVN0YW5kYXJkTm9ybWFsIiwiUmFuZG9tVW5pZm9ybSIsIlJhbmRvbVVuaWZvcm1JbnQiLCJSYW5nZSIsIlJhbmsiLCJSZWFkVmFyaWFibGVPcCIsIlJlYWwiLCJSZWFsRGl2IiwiUmVjaXByb2NhbCIsIlJlY2lwcm9jYWxHcmFkIiwiUmVsdSIsIlJlbHU2IiwiUmVsdTZHcmFkIiwiUmVsdUdyYWQiLCJSZXNoYXBlIiwiUmVzaXplQmlsaW5lYXIiLCJSZXNpemVCaWxpbmVhckdyYWQiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3IiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkIiwiUmVzb3VyY2VBcHBseUFkYU1heCIsIlJlc291cmNlQXBwbHlBZGFkZWx0YSIsIlJlc291cmNlQXBwbHlBZGFncmFkIiwiUmVzb3VyY2VBcHBseUFkYWdyYWREQSIsIlJlc291cmNlQXBwbHlBZGFncmFkVjIiLCJSZXNvdXJjZUFwcGx5QWRhbSIsIlJlc291cmNlQXBwbHlBZGRTaWduIiwiUmVzb3VyY2VBcHBseUNlbnRlcmVkUk1TUHJvcCIsIlJlc291cmNlQXBwbHlGdHJsIiwiUmVzb3VyY2VBcHBseUZ0cmxWMiIsIlJlc291cmNlQXBwbHlHcmFkaWVudERlc2NlbnQiLCJSZXNvdXJjZUFwcGx5S2VyYXNNb21lbnR1bSIsIlJlc291cmNlQXBwbHlNb21lbnR1bSIsIlJlc291cmNlQXBwbHlQb3dlclNpZ24iLCJSZXNvdXJjZUFwcGx5UHJveGltYWxBZGFncmFkIiwiUmVzb3VyY2VBcHBseVByb3hpbWFsR3JhZGllbnREZXNjZW50IiwiUmVzb3VyY2VBcHBseVJNU1Byb3AiLCJSZXNvdXJjZUdhdGhlciIsIlJlc291cmNlU2NhdHRlckFkZCIsIlJlc291cmNlU2NhdHRlckRpdiIsIlJlc291cmNlU2NhdHRlck1heCIsIlJlc291cmNlU2NhdHRlck1pbiIsIlJlc291cmNlU2NhdHRlck11bCIsIlJlc291cmNlU2NhdHRlck5kQWRkIiwiUmVzb3VyY2VTY2F0dGVyTmRTdWIiLCJSZXNvdXJjZVNjYXR0ZXJOZFVwZGF0ZSIsIlJlc291cmNlU2NhdHRlclN1YiIsIlJlc291cmNlU2NhdHRlclVwZGF0ZSIsIlJlc291cmNlU3RyaWRlZFNsaWNlQXNzaWduIiwiUmV2ZXJzZSIsIlJldmVyc2VTZXF1ZW5jZSIsIlJldmVyc2VWMiIsIlJpZ2h0U2hpZnQiLCJSaW50IiwiUm5nUmVhZEFuZFNraXAiLCJSbmdTa2lwIiwiUm9sbCIsIlJvdW5kIiwiUnNxcnQiLCJSc3FydEdyYWQiLCJTY2F0dGVyTmQiLCJTZWxlY3QiLCJTZWxlY3RWMiIsIlNlbGZBZGpvaW50RWlnVjIiLCJTZWx1IiwiU2VsdUdyYWQiLCJTaGFwZSIsIlNoYXBlTiIsIlNpZ21vaWQiLCJTaWdtb2lkR3JhZCIsIlNpZ24iLCJTaW4iLCJTaW5oIiwiU2l6ZSIsIlNsaWNlIiwiU25hcHNob3QiLCJTb2Z0bWF4IiwiU29mdG1heENyb3NzRW50cm9weVdpdGhMb2dpdHMiLCJTb2Z0cGx1cyIsIlNvZnRwbHVzR3JhZCIsIlNvZnRzaWduIiwiU29mdHNpZ25HcmFkIiwiU3BhY2VUb0JhdGNoIiwiU3BhY2VUb0JhdGNoTkQiLCJTcGFjZVRvRGVwdGgiLCJTcGFyc2VNYXRNdWwiLCJTcGFyc2VTb2Z0bWF4Q3Jvc3NFbnRyb3B5V2l0aExvZ2l0cyIsIlNwYXJzZVRvRGVuc2UiLCJTcGxpdCIsIlNwbGl0ViIsIlNxcnQiLCJTcXJ0R3JhZCIsIlNxdWFyZSIsIlNxdWFyZWREaWZmZXJlbmNlIiwiU3F1ZWV6ZSIsIlN0YWNrQ2xvc2VWMiIsIlN0YWNrUG9wVjIiLCJTdGFja1B1c2hWMiIsIlN0YWNrVjIiLCJTdGF0ZWZ1bFBhcnRpdGlvbmVkQ2FsbCIsIlN0YXRlZnVsU3RhbmRhcmROb3JtYWxWMiIsIlN0YXRlZnVsVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVmdWxVbmlmb3JtIiwiU3RhdGVmdWxVbmlmb3JtRnVsbEludCIsIlN0YXRlZnVsVW5pZm9ybUludCIsIlN0YXRlbGVzc0Nhc2UiLCJTdGF0ZWxlc3NJZiIsIlN0YXRlbGVzc011bHRpbm9taWFsIiwiU3RhdGVsZXNzUmFuZG9tR2V0QWxnIiwiU3RhdGVsZXNzUmFuZG9tR2V0S2V5Q291bnRlciIsIlN0YXRlbGVzc1JhbmRvbUdldEtleUNvdW50ZXJBbGciLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWwiLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWxWMiIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm0iLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtRnVsbEludCIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm1GdWxsSW50VjIiLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtSW50IiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybUludFYyIiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybVYyIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsVjIiLCJTdGF0ZWxlc3NXaGlsZSIsIlN0b3BHcmFkaWVudCIsIlN0cmlkZWRTbGljZSIsIlN0cmlkZWRTbGljZUdyYWQiLCJTdWIiLCJTdW0iLCJTdmQiLCJTeW1ib2xpY0dyYWRpZW50IiwiVFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJUYW4iLCJUYW5oIiwiVGFuaEdyYWQiLCJUZW5zb3JBcnJheUNsb3NlVjMiLCJUZW5zb3JBcnJheUNvbmNhdFYzIiwiVGVuc29yQXJyYXlHYXRoZXJWMyIsIlRlbnNvckFycmF5R3JhZFYzIiwiVGVuc29yQXJyYXlSZWFkVjMiLCJUZW5zb3JBcnJheVNjYXR0ZXJWMyIsIlRlbnNvckFycmF5U2l6ZVYzIiwiVGVuc29yQXJyYXlTcGxpdFYzIiwiVGVuc29yQXJyYXlWMyIsIlRlbnNvckFycmF5V3JpdGVWMyIsIlRlbnNvckxpc3RDb25jYXRWMiIsIlRlbnNvckxpc3RFbGVtZW50U2hhcGUiLCJUZW5zb3JMaXN0RnJvbVRlbnNvciIsIlRlbnNvckxpc3RHYXRoZXIiLCJUZW5zb3JMaXN0R2V0SXRlbSIsIlRlbnNvckxpc3RMZW5ndGgiLCJUZW5zb3JMaXN0UG9wQmFjayIsIlRlbnNvckxpc3RQdXNoQmFjayIsIlRlbnNvckxpc3RSZXNlcnZlIiwiVGVuc29yTGlzdFNldEl0ZW0iLCJUZW5zb3JMaXN0U3BsaXQiLCJUZW5zb3JMaXN0U3RhY2siLCJUZW5zb3JTY2F0dGVyQWRkIiwiVGVuc29yU2NhdHRlck1heCIsIlRlbnNvclNjYXR0ZXJNaW4iLCJUZW5zb3JTY2F0dGVyU3ViIiwiVGVuc29yU2NhdHRlclVwZGF0ZSIsIlRlbnNvclN0cmlkZWRTbGljZVVwZGF0ZSIsIlRpbGUiLCJUb3BLVW5pcXVlIiwiVG9wS1YyIiwiVG9wS1dpdGhVbmlxdWUiLCJUcmFuc3Bvc2UiLCJUcmlkaWFnb25hbFNvbHZlIiwiVHJ1bmNhdGVEaXYiLCJUcnVuY2F0ZU1vZCIsIlRydW5jYXRlZE5vcm1hbCIsIlVuaXF1ZSIsIlVucGFjayIsIlVuc29ydGVkU2VnbWVudE1heCIsIlVuc29ydGVkU2VnbWVudE1pbiIsIlVuc29ydGVkU2VnbWVudFByb2QiLCJVbnNvcnRlZFNlZ21lbnRTdW0iLCJVcHBlckJvdW5kIiwiVmFySXNJbml0aWFsaXplZE9wIiwiVmFyaWFibGVTaGFwZSIsIldoZXJlIiwiV2hpbGUiLCJYZGl2eSIsIlhsYUJyb2FkY2FzdEhlbHBlciIsIlhsYUNvbnYiLCJYbGFDb252VjIiLCJYbGFEZXF1YW50aXplIiwiWGxhRG90IiwiWGxhRG90VjIiLCJYbGFEeW5hbWljU2xpY2UiLCJYbGFEeW5hbWljVXBkYXRlU2xpY2UiLCJYbGFFaW5zdW0iLCJYbGFHYXRoZXIiLCJYbGFIb3N0Q29tcHV0ZSIsIlhsYUlmIiwiWGxhS2V5VmFsdWVTb3J0IiwiWGxhUGFkIiwiWGxhUmVjdiIsIlhsYVJlY3ZGcm9tSG9zdCIsIlhsYVJlZHVjZSIsIlhsYVJlZHVjZVdpbmRvdyIsIlhsYVJlcGxpY2FJZCIsIlhsYVNjYXR0ZXIiLCJYbGFTZWxlY3RBbmRTY2F0dGVyIiwiWGxhU2VsZkFkam9pbnRFaWciLCJYbGFTZW5kIiwiWGxhU2VuZFRvSG9zdCIsIlhsYVNldEJvdW5kIiwiWGxhU2V0RHluYW1pY0RpbWVuc2lvblNpemUiLCJYbGFTaGFyZGluZyIsIlhsYVNvcnQiLCJYbGFTcG1kRnVsbFRvU2hhcmRTaGFwZSIsIlhsYVNwbWRTaGFyZFRvRnVsbFNoYXBlIiwiWGxhU3ZkIiwiWGxhVmFyaWFkaWNSZWR1Y2UiLCJYbGFWYXJpYWRpY1NvcnQiLCJYbGFXaGlsZSIsIlhsb2cxcHkiLCJYbG9neSIsIlplcm9zTGlrZSIsIlpldGEiLCJFbnRlciIsIkV4aXQiLCJMb29wQ29uZCIsIk1lcmdlIiwiTmV4dEl0ZXJhdGlvbiIsIlN3aXRjaCIsIl9BcmciLCJfQXJyYXlUb0xpc3QiLCJfRnVzZWRCYXRjaE5vcm1FeCIsIl9MaXN0VG9BcnJheSIsIl9QYXJhbGxlbENvbmNhdFVwZGF0ZSIsIl9SZWN2VFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJfUmVjdlRQVUVtYmVkZGluZ0RlZHVwbGljYXRpb25EYXRhIiwiX1JldHZhbCIsIl9TZW5kVFBVRW1iZWRkaW5nR3JhZGllbnRzIiwiX1RQVUNvbXBpbGUiLCJfVFBVRXhlY3V0ZSIsIl9VbmFyeU9wc0NvbXBvc2l0aW9uIiwiVFBVQ29tcGlsYXRpb25SZXN1bHQiLCJUUFVSZXBsaWNhdGVkSW5wdXQiLCJUUFVSZXBsaWNhdGVkT3V0cHV0IiwiVFBVUmVwbGljYXRlTWV0YWRhdGEiLCJNZXJnZVYyQ2hlY2twb2ludHMiLCJSZXN0b3JlVjIiLCJTYXZlVjIiLCJBYm9ydCIsIkFzc2VydCIsIkFzc2lnbiIsIlBsYWNlaG9sZGVyIiwiUGxhY2Vob2xkZXJWMiIsIlNoYXJkZWRGaWxlbmFtZSIsIlN0cmluZ0pvaW4iLCJWYXJpYWJsZSIsIlZhcmlhYmxlVjIiLCJWYXJIYW5kbGVPcCIsIkF1ZGlvU3VtbWFyeSIsIkF1ZGlvU3VtbWFyeVYyIiwiRGVidWdOdW1lcmljU3VtbWFyeSIsIkhpc3RvZ3JhbVN1bW1hcnkiLCJJbWFnZVN1bW1hcnkiLCJNZXJnZVN1bW1hcnkiLCJTY2FsYXJTdW1tYXJ5IiwiU3RhdHNBZ2dyZWdhdG9yU3VtbWFyeSJdO2NvbnN0IHVZdD17ImxpYnJhcnkuZnVuY3Rpb24iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5pbnB1dCI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ciI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmIiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5mIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QuZnVuYyI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmkiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5zIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3Quc2hhcGUiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC50ZW5zb3IiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC50eXBlIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLnNoYXBlLmRpbSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS50ZW5zb3Iuc3RyaW5nX3ZhbCI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS50ZW5zb3IudGVuc29yX3NoYXBlLmRpbSI6ITAsImxpYnJhcnkuZnVuY3Rpb24uc2lnbmF0dXJlLmlucHV0X2FyZyI6ITAsImxpYnJhcnkuZnVuY3Rpb24uc2lnbmF0dXJlLm91dHB1dF9hcmciOiEwLCJsaWJyYXJ5LnZlcnNpb25zIjohMCxub2RlOiEwLCJub2RlLmlucHV0IjohMCwibm9kZS5hdHRyIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuYiI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmYiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5mdW5jIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuaSI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnMiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zaGFwZSI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnNoYXBlLmRpbSI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnRlbnNvciI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnR5cGUiOiEwLCJub2RlLmF0dHIudmFsdWUuc2hhcGUuZGltIjohMCwibm9kZS5hdHRyLnZhbHVlLnRlbnNvci5zdHJpbmdfdmFsIjohMCwibm9kZS5hdHRyLnZhbHVlLnRlbnNvci50ZW5zb3Jfc2hhcGUuZGltIjohMH0saFl0PXsic3RlcF9zdGF0cy5kZXZfc3RhdHMiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzIjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cy5vdXRwdXQiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzLm1lbW9yeSI6ITAsInN0ZXBfc3RhdHMuZGV2X3N0YXRzLm5vZGVfc3RhdHMub3V0cHV0LnRlbnNvcl9kZXNjcmlwdGlvbi5zaGFwZS5kaW0iOiEwfTtmdW5jdGlvbiBkWXQodCxlKXtsZXQgbj17fSxpPVtdLHI9W10sbz1uO2Z1bmN0aW9uIGEodCxuLGkscil7bGV0IG89dFtuXTtudWxsPT1vP3Rbbl09ci5qb2luKCIuIilpbiBlP1tpXTppOkFycmF5LmlzQXJyYXkobyk/by5wdXNoKGkpOnRbbl09W28saV19cmV0dXJuKGZ1bmN0aW9uIHModCxlLG49MWU2LGk9IlxuIil7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG8peyEoZnVuY3Rpb24gYShzLGwsYyl7Y29uc3QgdT1jPj10LmJ5dGVMZW5ndGgsaD1sLnNwbGl0KGkpO2hbMF09cytoWzBdO2NvbnN0IGQ9dT8iIjpoLnBvcCgpO2ZvcihsZXQgdCBvZiBoKXRyeXtlKHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIG8odCl9aWYodSlyZXR1cm4gdm9pZCByKCEwKTtjb25zdCBwPW5ldyBCbG9iKFt0LnNsaWNlKGMsYytuKV0pLGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9ZnVuY3Rpb24odCl7YShkLHQudGFyZ2V0LnJlc3VsdCxjK24pfSxmLnJlYWRBc1RleHQocCl9KSgiIiwiIiwwKX0pKX0pKHQsKGZ1bmN0aW9uKHQpe2lmKHQ9dC50cmltKCkpc3dpdGNoKHRbdC5sZW5ndGgtMV0pe2Nhc2UieyI6bGV0IGU9dC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC0yKS50cmltKCksbj17fTtpLnB1c2gobyksci5wdXNoKGUpLGEobyxlLG4sciksbz1uO2JyZWFrO2Nhc2UifSI6bz1pLnBvcCgpLHIucG9wKCk7YnJlYWs7ZGVmYXVsdDpsZXQgcz0oZnVuY3Rpb24gZSh0KXtsZXQgZT10LmluZGV4T2YoIjoiKTtyZXR1cm57bmFtZTp0LnN1YnN0cmluZygwLGUpLnRyaW0oKSx2YWx1ZTooZnVuY3Rpb24gbih0KXtpZigidHJ1ZSI9PT10KXJldHVybiEwO2lmKCJmYWxzZSI9PT10KXJldHVybiExO2lmKCciJz09PXRbMF0pcmV0dXJuIHQuc3Vic3RyaW5nKDEsdC5sZW5ndGgtMSk7bGV0IGU9cGFyc2VGbG9hdCh0KTtyZXR1cm4gaXNOYU4oZSk/dDplfSkodC5zdWJzdHJpbmcoZSsyKS50cmltKCkpfX0pKHQpO2EobyxzLm5hbWUscy52YWx1ZSxyLmNvbmNhdChzLm5hbWUpKX19KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbn0pKX1sZXQgcFl0PWNsYXNzIGV4dGVuZHMoZXIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb21wYXRpYmlsaXR5UHJvdmlkZXI9bmV3IGxZdCx0aGlzLmhpZXJhcmNoeVBhcmFtcz1IcXQsdGhpcy5fdGVtcGxhdGU9bnVsbH1fc2VsZWN0aW9uQ2hhbmdlZCgpe3RoaXMuc2VsZWN0aW9uJiZ0aGlzLmRlYm91bmNlKCJzZWxlY3Rpb25jaGFuZ2UiLCgoKT0+e3RoaXMuX2xvYWQodGhpcy5zZWxlY3Rpb24pfSkpfV9sb2FkKHQpe2NvbnN0e3J1bjplLHRhZzpuLHR5cGU6aX09dDtzd2l0Y2goaSl7Y2FzZSB5R3QuT1BfR1JBUEg6Y2FzZSB5R3QuQ09OQ0VQVFVBTF9HUkFQSDp7KGZ1bmN0aW9uKCl7dGhpcy5fc2V0T3V0U3RhdHMobnVsbCl9KS5iaW5kKHRoaXMpKCk7Y29uc3QgdD1uZXcgVVJMU2VhcmNoUGFyYW1zO3Quc2V0KCJydW4iLGUpLHQuc2V0KCJjb25jZXB0dWFsIixTdHJpbmcoaT09PXlHdC5DT05DRVBUVUFMX0dSQVBIKSksbiYmdC5zZXQoInRhZyIsbik7Y29uc3Qgcj1fcigpLnBsdWdpblJvdXRlKCJncmFwaHMiLCIvZ3JhcGgiLHQpO3JldHVybiB0aGlzLl9mZXRjaEFuZENvbnN0cnVjdEhpZXJhcmNoaWNhbEdyYXBoKHIpLnRoZW4oKCgpPT57dGhpcy5fZ3JhcGhSdW5UYWc9e3J1bjplLHRhZzpufX0pKX1jYXNlIHlHdC5QUk9GSUxFOntjb25zdHt0YWdzOnR9PXRoaXMuZGF0YXNldHMuZmluZCgoKHtuYW1lOnR9KT0+dD09PWUpKSxpPXQuZmluZCgodD0+dC50YWc9PT1uKSkub3BHcmFwaD9uOm51bGw7Y29uc29sZS5hc3NlcnQodC5maW5kKCh0PT50LnRhZz09PWkpKSxgUmVxdWlyZWQgdGFnICgke2l9KSBpcyBtaXNzaW5nLmApO2NvbnN0IHI9dGhpcy5fZ3JhcGhSdW5UYWcmJnRoaXMuX2dyYXBoUnVuVGFnLnJ1bj09PWUmJnRoaXMuX2dyYXBoUnVuVGFnLnRhZz09PWk/UHJvbWlzZS5yZXNvbHZlKCk6dGhpcy5fbG9hZCh7cnVuOmUsdGFnOmksdHlwZTp5R3QuT1BfR1JBUEh9KSxvPW5ldyBVUkxTZWFyY2hQYXJhbXM7by5zZXQoInRhZyIsbiksby5zZXQoInJ1biIsZSk7Y29uc3QgYT1fcigpLnBsdWdpblJvdXRlKCJncmFwaHMiLCIvcnVuX21ldGFkYXRhIixvKTtyZXR1cm4gci50aGVuKCgoKT0+dGhpcy5fcmVhZEFuZFBhcnNlTWV0YWRhdGEoYSkpKX1kZWZhdWx0OnJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVua25vd24gc2VsZWN0aW9uIHR5cGU6ICR7aX1gKSl9fV9yZWFkQW5kUGFyc2VNZXRhZGF0YSh0KXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pLChmdW5jdGlvbiBlKHQsbil7cmV0dXJuKGZ1bmN0aW9uIGkodCxlLG4scixvKXtyLnNldE1lc3NhZ2UodCk7dHJ5e2xldCBpPUNHdCh0LG4sbyk7cmV0dXJuIHIudXBkYXRlUHJvZ3Jlc3MoZSksaX1jYXRjaChlKXtyLnJlcG9ydEVycm9yKCJGYWlsZWQgIit0LGUpfX0pKCJSZWFkaW5nIG1ldGFkYXRhIHBidHh0Iiw0MCwoKCk9Pm51bGw9PXQ/UHJvbWlzZS5yZXNvbHZlKG51bGwpOmNZdCh0KSksbixfR3QuRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMpLnRoZW4oKHQ9PlBHdCgiUGFyc2luZyBtZXRhZGF0YS5wYnR4dCIsNjAsKCgpPT5udWxsIT10PyhmdW5jdGlvbiBlKHQpe3JldHVybiBkWXQodCxoWXQpLnRoZW4oKHQ9PnQuc3RlcF9zdGF0cykpfSkodCk6UHJvbWlzZS5yZXNvbHZlKG51bGwpKSxuLF9HdC5QQVJTRV9NRVRBREFUQV9QQlRYVF9JTlRPX09CSkVDVCkpKX0pKHQsQUd0KHRoaXMpKS50aGVuKGZ1bmN0aW9uKHQpe3RoaXMuX3NldE91dFN0YXRzKHQpfS5iaW5kKHRoaXMpKX1fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaCh0LGUpe3JldHVybiB0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pLChmdW5jdGlvbiBpKHQsZSxyLG89bmV3IGxZdCxhPUhxdCl7Y29uc3Qgcz1rR3QodCwzMCwiRGF0YSIpLGw9a0d0KHQsMjAsIkdyYXBoIiksYz1rR3QodCw1MCwiTmFtZXNwYWNlIGhpZXJhcmNoeSIpLHU9RGF0ZS5ub3coKTtyZXR1cm4oZnVuY3Rpb24gaCh0LGUsaSl7cmV0dXJuIFBHdCgiUmVhZGluZyBncmFwaCBwYnR4dCIsNDAsKCgpPT5uKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj1EYXRlLm5vdygpO2lmKGUpe2NvbnN0IHQ9eWllbGQgbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQsbil7bGV0IGk9bmV3IEZpbGVSZWFkZXI7aS5vbmxvYWQ9KCk9PnQoaS5yZXN1bHQpLGkub25lcnJvcj0oKT0+bihpLmVycm9yKSxpLnJlYWRBc0FycmF5QnVmZmVyKGUpfSkpO3JldHVybiBUR3Qoe3RpbWluZ0lkOl9HdC5GRVRDSF9QQlRYVF9CWVRFU19GUk9NX0ZJTEVTWVNURU0sZXZlbnRWYWx1ZTpEYXRlLm5vdygpLW59KSx0fWNvbnN0IGk9eWllbGQgY1l0KHQpO3JldHVybiBUR3Qoe3RpbWluZ0lkOl9HdC5GRVRDSF9QQlRYVF9CWVRFU19GUk9NX1NFUlZFUixldmVudFZhbHVlOkRhdGUubm93KCktbn0pLGl9KSkpLGksX0d0LkZFVENIX1BCVFhUX0JZVEVTKS50aGVuKCh0PT5QR3QoIlBhcnNpbmcgZ3JhcGgucGJ0eHQiLDYwLCgoKT0+KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGRZdCh0LHVZdCl9KSh0KSksaSxfR3QuUEFSU0VfUEJUWFRfSU5UT19PQkpFQ1QpKSl9KShlLHIscykudGhlbigoZnVuY3Rpb24odCl7aWYoIXQubm9kZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBncmFwaCBpcyBlbXB0eS4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gVGVuc29yRmxvdyBjb3VsZCBub3QgdHJhY2UgYW55IGdyYXBoLiBQbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzE5NjEgZm9yIG1vcmUgaW5mb3JtYXRpb24uIik7cmV0dXJuKGZ1bmN0aW9uIGUodCxuLGkpe2xldCByPXt9LG89e30sYT17fSxzPWFXdChuLmluRW1iZWRkaW5nVHlwZXMpLGw9YVd0KG4ub3V0RW1iZWRkaW5nVHlwZXMpLGM9W10sdT10Lm5vZGUsaD1uZXcgQXJyYXkodS5sZW5ndGgpO3JldHVybiBMR3QoIk5vcm1hbGl6aW5nIG5hbWVzIiwzMCwoKCk9PntsZXQgZT1uZXcgQXJyYXkodS5sZW5ndGgpLG49MDtjb25zdCBpPXQ9PntsZXQgaT1uZXcgWEd0KHQpO3JldHVybiBzKGkpPyhjLnB1c2goaS5uYW1lKSxyW2kubmFtZV09aSxpKTpsKGkpPyhjLnB1c2goaS5uYW1lKSxvW2kubmFtZV09aSxTZS5leHBvcnRzLmVhY2goaS5pbnB1dHMsKHQ9PntsZXQgZT10Lm5hbWU7YVtlXT1hW2VdfHxbXSxhW2VdLnB1c2goaSl9KSksaSk6KGVbbl09aSxoW25dPWkubmFtZSxuKyssaSl9O3JldHVybiBTZS5leHBvcnRzLmVhY2godSxpKSx0LmxpYnJhcnkmJnQubGlicmFyeS5mdW5jdGlvbiYmU2UuZXhwb3J0cy5lYWNoKHQubGlicmFyeS5mdW5jdGlvbiwodD0+e2NvbnN0IGU9Vkd0K3Quc2lnbmF0dXJlLm5hbWU7aWYoaSh7bmFtZTplLGlucHV0OltdLGRldmljZToiIixvcDoiIixhdHRyOltdfSksdC5zaWduYXR1cmUuaW5wdXRfYXJnKXtsZXQgbj0wO2NvbnN0IHI9dD0+e2koe25hbWU6ZStIR3QrdC5uYW1lLGlucHV0OltdLGRldmljZToiIixvcDoiaW5wdXRfYXJnIixhdHRyOlt7a2V5OiJUIix2YWx1ZTp7dHlwZTp0LnR5cGV9fV19KS5mdW5jdGlvbklucHV0SW5kZXg9bixuKyt9O3Quc2lnbmF0dXJlLmlucHV0X2FyZy5uYW1lP3IodC5zaWduYXR1cmUuaW5wdXRfYXJnKTpTZS5leHBvcnRzLmVhY2godC5zaWduYXR1cmUuaW5wdXRfYXJnLHIpfWxldCBuPTA7Y29uc3Qgcj17fTtpZih0LnNpZ25hdHVyZS5vdXRwdXRfYXJnKXtjb25zdCBpPXQ9PntyW2UrSEd0K3QubmFtZV09bixuKyt9O3Quc2lnbmF0dXJlLm91dHB1dF9hcmcubmFtZT9pKHQuc2lnbmF0dXJlLm91dHB1dF9hcmcpOlNlLmV4cG9ydHMuZWFjaCh0LnNpZ25hdHVyZS5vdXRwdXRfYXJnLGkpfVNlLmV4cG9ydHMuZWFjaCh0Lm5vZGVfZGVmLCh0PT57dC5uYW1lPWUrIi8iK3QubmFtZSwic3RyaW5nIj09dHlwZW9mIHQuaW5wdXQmJih0LmlucHV0PVt0LmlucHV0XSk7Y29uc3Qgbj1pKHQpO1NlLmV4cG9ydHMuaXNOdW1iZXIoclt0Lm5hbWVdKSYmKG4uZnVuY3Rpb25PdXRwdXRJbmRleD1yW3QubmFtZV0pLFNlLmV4cG9ydHMuZWFjaChuLmlucHV0cywodD0+e3QubmFtZT1lK0hHdCt0Lm5hbWV9KSl9KSl9KSksZS5zcGxpY2UobiksaC5zcGxpY2UobiksZX0pLGksX0d0Lk5PUk1BTElaSU5HX05BTUVTKS50aGVuKCh0PT5MR3QoIkJ1aWxkaW5nIHRoZSBkYXRhIHN0cnVjdHVyZSIsNzAsKCgpPT57bGV0IGU9KGZ1bmN0aW9uIGkodCxlKXtsZXQgbj17fSxpPXt9O3Quc29ydCgpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGgtMTsrK2Upe2xldCByPXRbZV07U2UuZXhwb3J0cy5lYWNoKGNXdChyKS5zbGljZSgwLC0xKSwodD0+e2lbdF09ITB9KSk7Zm9yKGxldCBpPWUrMTtpPHQubGVuZ3RoOysraSl7bGV0IGU9dFtpXTtpZighU2UuZXhwb3J0cy5zdGFydHNXaXRoKGUscikpYnJlYWs7aWYoZS5sZW5ndGg+ci5sZW5ndGgmJmUuY2hhckF0KHIubGVuZ3RoKT09PUhHdCl7bltyXT1zV3Qocik7YnJlYWt9fX1yZXR1cm4gU2UuZXhwb3J0cy5lYWNoKGUsKHQ9Pnt0IGluIGkmJihuW3RdPXNXdCh0KSl9KSksbn0pKGgsYykscz1uZXcgcUd0O3JldHVybiBTZS5leHBvcnRzLmVhY2godCwodD0+e2xldCBuPWVbdC5uYW1lXXx8dC5uYW1lO3Mubm9kZXNbbl09dCx0Lm5hbWUgaW4gYSYmKHQub3V0RW1iZWRkaW5ncz1hW3QubmFtZV0sU2UuZXhwb3J0cy5lYWNoKHQub3V0RW1iZWRkaW5ncywodD0+e3QubmFtZT1lW3QubmFtZV18fHQubmFtZX0pKSksdC5uYW1lPW59KSksU2UuZXhwb3J0cy5lYWNoKHQsKHQ9PntTZS5leHBvcnRzLmVhY2godC5pbnB1dHMsKChpLGEpPT57bGV0IGw9aS5uYW1lO2lmKGwgaW4gcil7bGV0IGk9cltsXTt0LmluRW1iZWRkaW5ncy5wdXNoKGkpO2ZvcihsZXQgciBvZiBpLmlucHV0cylpV3QocyxlW3IubmFtZV18fHIubmFtZSx0LHIsbixhKX1lbHNlIGlmKGwgaW4gbyl7bGV0IHI9b1tsXTtmb3IobGV0IG8gb2Ygci5pbnB1dHMpaVd0KHMsZVtvLm5hbWVdfHxvLm5hbWUsdCxpLG4sYSl9ZWxzZSBpV3QocyxlW2xdfHxsLHQsaSxuLGEpfSkpfSkpLFNlLmV4cG9ydHMuZWFjaChyLCgodCxuKT0+e3QubmFtZT1lW3QubmFtZV18fHQubmFtZX0pKSxzfSksaSxfR3QuQlVJTERfU0xJTV9HUkFQSCkpKX0pKHQscld0LGwpfSksKCgpPT57dGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgR3JhcGhEZWYuIFRoaXMgY2FuIHNvbWV0aW1lcyBiZSBjYXVzZWQgYnkgYSBiYWQgbmV0d29yayBjb25uZWN0aW9uIG9yIGRpZmZpY3VsdHkgcmVjb25jaWxpbmcgbXVsdGlwbGUgR3JhcGhEZWZzOyBmb3IgdGhlIGxhdHRlciBjYXNlLCBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzE5MjkuIil9KSkudGhlbigodD0+bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpeyEoZnVuY3Rpb24gZSh0LG4pe2lmKG51bGw9PT1uKXRocm93IG5ldyBFcnJvcigiQ29tcGF0aWJpbGl0eSBwcm92aWRlciByZXF1aXJlZCwgYnV0IGdvdDogIituKTtTZS5leHBvcnRzLmVhY2godC5ub2RlcywodD0+e3QuY29tcGF0aWJsZT1uLm9wVmFsaWQodCksU2UuZXhwb3J0cy5lYWNoKHQuaW5FbWJlZGRpbmdzLCh0PT57dC5jb21wYXRpYmxlPW4ub3BWYWxpZCh0KX0pKSxTZS5leHBvcnRzLmVhY2godC5vdXRFbWJlZGRpbmdzLCh0PT57dC5jb21wYXRpYmxlPW4ub3BWYWxpZCh0KX0pKX0pKX0pKHQsbyk7Y29uc3Qgbj15aWVsZCBGcXQodCxhLGMpO3JldHVybiBUR3Qoe3RpbWluZ0lkOl9HdC5HUkFQSF9MT0FEX1NVQ0NFRURFRCxldmVudFZhbHVlOkRhdGUubm93KCktdX0pLHtncmFwaDp0LGdyYXBoSGllcmFyY2h5Om59fSkpKSkuY2F0Y2goKGU9Pnt0aHJvdyB0LnJlcG9ydEVycm9yKGBHcmFwaCB2aXN1YWxpemF0aW9uIGZhaWxlZC5cblxuJHtlfWAsZSksVEd0KHt0aW1pbmdJZDpfR3QuR1JBUEhfTE9BRF9GQUlMRUQsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLXV9KSxlfSkpfSkoQUd0KHRoaXMpLHQsZSx0aGlzLmNvbXBhdGliaWxpdHlQcm92aWRlcix0aGlzLmhpZXJhcmNoeVBhcmFtcykudGhlbihmdW5jdGlvbih7Z3JhcGg6dCxncmFwaEhpZXJhcmNoeTplfSl7dGhpcy5fc2V0T3V0R3JhcGgodCksdGhpcy5fc2V0T3V0R3JhcGhIaWVyYXJjaHkoZSl9LmJpbmQodGhpcykpfV9zZWxlY3RlZEZpbGVDaGFuZ2VkKCl7dmFyIHQ9dGhpcy5zZWxlY3RlZEZpbGU7aWYoIXQpcmV0dXJuO2NvbnN0IGU9dC50YXJnZXQsbj1lLmZpbGVzWzBdO24mJihlLnZhbHVlPSIiLHRoaXMuX2ZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgobnVsbCxuKSl9fTt0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0scFl0LnByb3RvdHlwZSwiZGF0YXNldHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHBZdC5wcm90b3R5cGUsInByb2dyZXNzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHBZdC5wcm90b3R5cGUsInNlbGVjdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxwWXQucHJvdG90eXBlLCJzZWxlY3RlZEZpbGUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scFl0LnByb3RvdHlwZSwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHBZdC5wcm90b3R5cGUsImhpZXJhcmNoeVBhcmFtcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsRHF0KV0scFl0LnByb3RvdHlwZSwib3V0R3JhcGhIaWVyYXJjaHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLHFHdCldLHBZdC5wcm90b3R5cGUsIm91dEdyYXBoIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxwWXQucHJvdG90eXBlLCJvdXRTdGF0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxwWXQucHJvdG90eXBlLCJfZ3JhcGhSdW5UYWciLHZvaWQgMCksdChbYSgic2VsZWN0aW9uIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxwWXQucHJvdG90eXBlLCJfc2VsZWN0aW9uQ2hhbmdlZCIsbnVsbCksdChbYSgic2VsZWN0ZWRGaWxlIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxwWXQucHJvdG90eXBlLCJfc2VsZWN0ZWRGaWxlQ2hhbmdlZCIsbnVsbCkscFl0PXQoW2koInRmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIiKV0scFl0KTtsZXQgZll0PWNsYXNzIGV4dGVuZHMoZXIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZGF0YXNldHM9W10sdGhpcy5fZGF0YXNldHNGZXRjaGVkPSExLHRoaXMuX3NlbGVjdGVkRGF0YXNldD0wLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBkcix0aGlzLl9jYW5jZWxsZXI9bmV3IFhSLHRoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcD0wLHRoaXMuaGVhbHRoUGlsbHNUb2dnbGVkT249ITEsdGhpcy5fZGVidWdnZXJOdW1lcmljQWxlcnRzPVtdLHRoaXMuX25vZGVOYW1lc1RvSGVhbHRoUGlsbHM9e30sdGhpcy5faGVhbHRoUGlsbFJlcXVlc3RJZD0xLHRoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVyRGVsYXk9NTAwLHRoaXMucnVuPVJzKCJydW4iLHtkZWZhdWx0VmFsdWU6IiIsdXNlTG9jYWxTdG9yYWdlOiExfSkuY2FsbCh0aGlzKSx0aGlzLl9ydW5PYnNlcnZlcj1PcygicnVuIix7ZGVmYXVsdFZhbHVlOiIiLHBvbHltZXJQcm9wZXJ0eToicnVuIix1c2VMb2NhbFN0b3JhZ2U6ITF9KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXhwYW5kIix0aGlzLl9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kLmJpbmQodGhpcykpfXJlbG9hZCgpe3RoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWR8fHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoX3IoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKHRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSgodD0+e3QuY2FuY2VsbGVkfHx0LnZhbHVlLmRlYnVnZ2VyJiZ0aGlzLnNldCgiX2RlYnVnZ2VyRGF0YUVuYWJsZWQiLCEwKX0pKSksdGhpcy5fbWF5YmVGZXRjaEhlYWx0aFBpbGxzKCl9X2ZpdCgpe3RoaXMuJCQoIiNncmFwaGJvYXJkIikuZml0KCl9X29uRG93bmxvYWRJbWFnZVJlcXVlc3RlZCh0KXt0aGlzLiQkKCIjZ3JhcGhib2FyZCIpLmRvd25sb2FkQXNJbWFnZSh0LmRldGFpbCl9X2dldEdyYXBoRGlzcGxheUNsYXNzTmFtZSh0LGUpe3JldHVybiB0fHxlLmxlbmd0aD8iIjoibm8tZ3JhcGgifV9mZXRjaERhdGFzZXQoKXtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChfcigpLnBsdWdpblJvdXRlKCJncmFwaHMiLCIvaW5mbyIpKX1fZmV0Y2hIZWFsdGhQaWxscyh0LGUpe2NvbnN0IG49e25vZGVfbmFtZXM6SlNPTi5zdHJpbmdpZnkodCkscnVuOiJfX2RlYnVnZ2VyX2RhdGFfXyJ9O3ZvaWQgMCE9PWUmJihuLnN0ZXA9ZSk7Y29uc3QgaT1fcigpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9oZWFsdGhfcGlsbHMiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChpLG4pfV9mZXRjaERlYnVnZ2VyTnVtZXJpY3NBbGVydHMoKXtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChfcigpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9udW1lcmljc19hbGVydF9yZXBvcnQiKSl9X2dyYXBoVXJsKHQsZSxuKXtyZXR1cm4gX3IoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2dyYXBoIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtydW46dCxsaW1pdF9hdHRyX3NpemU6ZSxsYXJnZV9hdHRyc19rZXk6bn0pKX1fc2hvdWxkUmVxdWVzdEhlYWx0aFBpbGxzKCl7cmV0dXJuIHRoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWQmJnRoaXMuaGVhbHRoUGlsbHNUb2dnbGVkT24mJnRoaXMuX3JlbmRlckhpZXJhcmNoeSYmdGhpcy5fZGF0YXNldHNTdGF0ZSh0aGlzLl9kYXRhc2V0c0ZldGNoZWQsdGhpcy5fZGF0YXNldHMsIlBSRVNFTlQiKX1fbWF5YmVJbml0aWFsaXplRGFzaGJvYXJkKCl7IXRoaXMuX2luaXRpYWxpemVkJiZ0aGlzLl9pc0F0dGFjaGVkJiYodGhpcy5zZXQoIl9jb21wYXRpYmlsaXR5UHJvdmlkZXIiLG5ldyBsWXQpLHRoaXMuX2luaXRpYWxpemVkPSEwLHRoaXMuX2ZldGNoRGF0YXNldCgpLnRoZW4oKHQ9Pntjb25zdCBlPU9iamVjdC5rZXlzKHQpO3RoaXMuX2RhdGFzZXRzPWUuc29ydChucikubWFwKChlPT57Y29uc3Qgbj10W2VdLGk9T2JqZWN0LmtleXMobi50YWdzKS5zb3J0KG5yKS5tYXAoKHQ9Pm4udGFnc1t0XSkpLm1hcCgoKHt0YWc6dCxjb25jZXB0dWFsX2dyYXBoOmUsb3BfZ3JhcGg6bixwcm9maWxlOml9KT0+KHt0YWc6dCxkaXNwbGF5TmFtZTp0LGNvbmNlcHR1YWxHcmFwaDplLG9wR3JhcGg6bixwcm9maWxlOml9KSkpO3JldHVybntuYW1lOmUsdGFnczpuLnJ1bl9ncmFwaD9be3RhZzpudWxsLGRpc3BsYXlOYW1lOiJEZWZhdWx0Iixjb25jZXB0dWFsR3JhcGg6ITEsb3BHcmFwaDohMCxwcm9maWxlOiExfSwuLi5pXTppfX0pKSx0aGlzLl9kYXRhc2V0c0ZldGNoZWQ9ITB9KSkpfV9kZXRlcm1pbmVTZWxlY3RlZERhdGFzZXQoKXt2YXIgdD10aGlzLl9kYXRhc2V0c0ZldGNoZWQsZT10aGlzLl9kYXRhc2V0cyxuPXRoaXMucnVuO2lmKCFuKXJldHVybiB2b2lkIHRoaXMuc2V0KCJfc2VsZWN0ZWREYXRhc2V0IiwwKTtjb25zdCBpPWUuZmluZEluZGV4KCh0PT50Lm5hbWU9PT1uKSk7aWYoLTEhPT1pKXRoaXMuc2V0KCJfc2VsZWN0ZWREYXRhc2V0IixpKTtlbHNlIGlmKHQpe2NvbnN0IHQ9dGhpcy4kJCgiI2Vycm9yLWRpYWxvZyIpO3QudGV4dENvbnRlbnQ9YE5vIGRhdGFzZXQgbmFtZWQgIiR7bn0iIGNvdWxkIGJlIGZvdW5kLmAsdC5vcGVuKCl9fV91cGRhdGVTZWxlY3RlZERhdGFzZXROYW1lKCl7dmFyIHQ9dGhpcy5fZGF0YXNldHMsZT10aGlzLl9zZWxlY3RlZERhdGFzZXQ7dGhpcy5fZGF0YXNldHNGZXRjaGVkJiYodC5sZW5ndGg8PWV8fHRoaXMuc2V0KCJydW4iLHRbZV0ubmFtZSkpfV9yZXF1ZXN0SGVhbHRoUGlsbHMoKXt0aGlzLnNldCgiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsITApO3ZhciB0PSsrdGhpcy5faGVhbHRoUGlsbFJlcXVlc3RJZDtudWxsIT09dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCksdGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsKSx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ/dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsLHRoaXMuX2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KX0uYmluZCh0aGlzKSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5KTp0aGlzLl9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHModCl9X2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KXtpZih0aGlzLl9oZWFsdGhQaWxsUmVxdWVzdElkIT09dClyZXR1cm47Y29uc3QgZT10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ/dGhpcy5zcGVjaWZpY0hlYWx0aFBpbGxTdGVwOnZvaWQgMCxuPXRoaXMuX2ZldGNoSGVhbHRoUGlsbHModGhpcy5fcmVuZGVySGllcmFyY2h5LmdldE5hbWVzT2ZSZW5kZXJlZE9wcygpLGUpLGk9dGhpcy5fZmV0Y2hEZWJ1Z2dlck51bWVyaWNzQWxlcnRzKCk7UHJvbWlzZS5hbGwoW24saV0pLnRoZW4oZnVuY3Rpb24oZSl7dmFyIG49ZVswXSxpPWVbMV07aWYodGhpcy5oZWFsdGhQaWxsc1RvZ2dsZWRPbiYmdD09PXRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQpe2Zvcih2YXIgciBpbiBuKXt0aGlzLnNldCgiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLG5bcl0ubGVuZ3RoLTEpO2JyZWFrfXRoaXMuc2V0KCJfZGVidWdnZXJOdW1lcmljQWxlcnRzIixpKSx0aGlzLnNldCgiX25vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLG4pLHRoaXMuc2V0KCJfYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiwhMSksdGhpcy5zZXQoIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIixudWxsKX19LmJpbmQodGhpcykpfV9kYXRhc2V0c1N0YXRlKHQsZSxuKXtyZXR1cm4gdD9lJiZlLmxlbmd0aD8iUFJFU0VOVCI9PT1uOiJFTVBUWSI9PT1uOiJOT1RfTE9BREVEIj09PW59X3JlbmRlckhpZXJhcmNoeUNoYW5nZWQodCl7dGhpcy5yZWxvYWQoKX1faGFuZGxlTm9kZVRvZ2dsZUV4cGFuZCgpe3RoaXMuX21heWJlRmV0Y2hIZWFsdGhQaWxscygpfV9oZWFsdGhQaWxsc1RvZ2dsZWRPbkNoYW5nZWQodCl7dD90aGlzLnJlbG9hZCgpOnRoaXMuc2V0KCJfbm9kZU5hbWVzVG9IZWFsdGhQaWxscyIse30pfV9tYXliZUZldGNoSGVhbHRoUGlsbHMoKXt0aGlzLl9zaG91bGRSZXF1ZXN0SGVhbHRoUGlsbHMoKSYmdGhpcy5fcmVxdWVzdEhlYWx0aFBpbGxzKCl9fTtmWXQudGVtcGxhdGU9X2VgCiAgICA8cGFwZXItZGlhbG9nIGlkPSJlcnJvci1kaWFsb2ciIHdpdGgtYmFja2Ryb3A+PC9wYXBlci1kaWFsb2c+CiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPHRmLWdyYXBoLWNvbnRyb2xzCiAgICAgICAgaWQ9ImNvbnRyb2xzIgogICAgICAgIGNsYXNzPSJzaWRlYmFyIgogICAgICAgIHNsb3Q9InNpZGViYXIiCiAgICAgICAgZGV2aWNlcy1mb3Itc3RhdHM9Int7X2RldmljZXNGb3JTdGF0c319IgogICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0iW1tfY29sb3JCeVBhcmFtc11dIgogICAgICAgIHN0YXRzPSJbW19zdGF0c11dIgogICAgICAgIGNvbG9yLWJ5PSJ7e19jb2xvckJ5fX0iCiAgICAgICAgZGF0YXNldHM9IltbX2RhdGFzZXRzXV0iCiAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0iW1tfcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgc2VsZWN0aW9uPSJ7e19zZWxlY3Rpb259fSIKICAgICAgICBzZWxlY3RlZC1maWxlPSJ7e19zZWxlY3RlZEZpbGV9fSIKICAgICAgICBzZWxlY3RlZC1ub2RlPSJ7e19zZWxlY3RlZE5vZGV9fSIKICAgICAgICBoZWFsdGgtcGlsbHMtZmVhdHVyZS1lbmFibGVkPSJbW19kZWJ1Z2dlckRhdGFFbmFibGVkXV0iCiAgICAgICAgaGVhbHRoLXBpbGxzLXRvZ2dsZWQtb249Int7aGVhbHRoUGlsbHNUb2dnbGVkT259fSIKICAgICAgICBvbi1maXQtdGFwPSJfZml0IgogICAgICAgIHRyYWNlLWlucHV0cz0ie3tfdHJhY2VJbnB1dHN9fSIKICAgICAgICBhdXRvLWV4dHJhY3Qtbm9kZXM9Int7X2F1dG9FeHRyYWN0Tm9kZXN9fSIKICAgICAgICBvbi1kb3dubG9hZC1pbWFnZS1yZXF1ZXN0ZWQ9Il9vbkRvd25sb2FkSW1hZ2VSZXF1ZXN0ZWQiCiAgICAgID48L3RmLWdyYXBoLWNvbnRyb2xzPgogICAgICA8ZGl2CiAgICAgICAgY2xhc3MkPSJjZW50ZXIgW1tfZ2V0R3JhcGhEaXNwbGF5Q2xhc3NOYW1lKF9zZWxlY3RlZEZpbGUsIF9kYXRhc2V0cyldXSIKICAgICAgICBzbG90PSJjZW50ZXIiCiAgICAgID4KICAgICAgICA8dGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlcgogICAgICAgICAgaWQ9ImxvYWRlciIKICAgICAgICAgIGRhdGFzZXRzPSJbW19kYXRhc2V0c11dIgogICAgICAgICAgc2VsZWN0aW9uPSJbW19zZWxlY3Rpb25dXSIKICAgICAgICAgIHNlbGVjdGVkLWZpbGU9IltbX3NlbGVjdGVkRmlsZV1dIgogICAgICAgICAgb3V0LWdyYXBoLWhpZXJhcmNoeT0ie3tfZ3JhcGhIaWVyYXJjaHl9fSIKICAgICAgICAgIG91dC1ncmFwaD0ie3tfZ3JhcGh9fSIKICAgICAgICAgIG91dC1zdGF0cz0ie3tfc3RhdHN9fSIKICAgICAgICAgIHByb2dyZXNzPSJ7e19wcm9ncmVzc319IgogICAgICAgICAgaGllcmFyY2h5LXBhcmFtcz0iW1tfaGllcmFyY2h5UGFyYW1zXV0iCiAgICAgICAgICBjb21wYXRpYmlsaXR5LXByb3ZpZGVyPSJbW19jb21wYXRpYmlsaXR5UHJvdmlkZXJdXSIKICAgICAgICA+PC90Zi1ncmFwaC1kYXNoYm9hcmQtbG9hZGVyPgogICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtbWVzc2FnZSI+CiAgICAgICAgICA8aDM+Tm8gZ3JhcGggZGVmaW5pdGlvbiBmaWxlcyB3ZXJlIGZvdW5kLjwvaDM+CiAgICAgICAgICA8cD4KICAgICAgICAgICAgVG8gc3RvcmUgYSBncmFwaCwgY3JlYXRlIGEKICAgICAgICAgICAgPGNvZGU+dGYuc3VtbWFyeS5GaWxlV3JpdGVyPC9jb2RlPgogICAgICAgICAgICBhbmQgcGFzcyB0aGUgZ3JhcGggZWl0aGVyIHZpYSB0aGUgY29uc3RydWN0b3IsIG9yIGJ5IGNhbGxpbmcgaXRzCiAgICAgICAgICAgIDxjb2RlPmFkZF9ncmFwaCgpPC9jb2RlPiBtZXRob2QuIFlvdSBtYXkgd2FudCB0byBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL3RlbnNvcmJvYXJkL2dyYXBocyIKICAgICAgICAgICAgICA+ZXhhbWluaW5nIHRoZSBUZW5zb3JGbG93IGdyYXBoIHR1dG9yaWFsPC9hCiAgICAgICAgICAgID4uCiAgICAgICAgICA8L3A+CgogICAgICAgICAgPHA+CiAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvIGFkZAogICAgICAgICAgICBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgID4KICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgPi4KICAgICAgICAgIDwvcD4KCiAgICAgICAgICA8cD4KICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgID4KICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3JhcGhib2FyZCI+CiAgICAgICAgICA8dGYtZ3JhcGgtYm9hcmQKICAgICAgICAgICAgaWQ9ImdyYXBoYm9hcmQiCiAgICAgICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJbW19kZXZpY2VzRm9yU3RhdHNdXSIKICAgICAgICAgICAgY29sb3ItYnk9Int7X2NvbG9yQnl9fSIKICAgICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJ7e19jb2xvckJ5UGFyYW1zfX0iCiAgICAgICAgICAgIGdyYXBoLWhpZXJhcmNoeT0iW1tfZ3JhcGhIaWVyYXJjaHldXSIKICAgICAgICAgICAgZ3JhcGg9IltbX2dyYXBoXV0iCiAgICAgICAgICAgIGhpZXJhcmNoeS1wYXJhbXM9IltbX2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgICBwcm9ncmVzcz0iW1tfcHJvZ3Jlc3NdXSIKICAgICAgICAgICAgZGVidWdnZXItZGF0YS1lbmFibGVkPSJbW19kZWJ1Z2dlckRhdGFFbmFibGVkXV0iCiAgICAgICAgICAgIGFyZS1oZWFsdGgtcGlsbHMtbG9hZGluZz0iW1tfYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgICAgIGRlYnVnZ2VyLW51bWVyaWMtYWxlcnRzPSJbW19kZWJ1Z2dlck51bWVyaWNBbGVydHNdXSIKICAgICAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9IltbX25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgICAgYWxsLXN0ZXBzLW1vZGUtZW5hYmxlZD0ie3thbGxTdGVwc01vZGVFbmFibGVkfX0iCiAgICAgICAgICAgIHNwZWNpZmljLWhlYWx0aC1waWxsLXN0ZXA9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgICAgICBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJbW19oZWFsdGhQaWxsU3RlcEluZGV4XV0iCiAgICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9Int7X3JlbmRlckhpZXJhcmNoeX19IgogICAgICAgICAgICBzZWxlY3RlZC1ub2RlPSJ7e19zZWxlY3RlZE5vZGV9fSIKICAgICAgICAgICAgc3RhdHM9IltbX3N0YXRzXV0iCiAgICAgICAgICAgIHRyYWNlLWlucHV0cz0iW1tfdHJhY2VJbnB1dHNdXSIKICAgICAgICAgICAgYXV0by1leHRyYWN0LW5vZGVzPSJbW19hdXRvRXh0cmFjdE5vZGVzXV0iCiAgICAgICAgICA+PC90Zi1ncmFwaC1ib2FyZD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IC9kZWVwLyB7CiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAuc2lkZWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRpYWxvZyB7CiAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgfQoKICAgICAgLm5vLWRhdGEtbWVzc2FnZSB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KCiAgICAgIC5ncmFwaGJvYXJkIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5uby1ncmFwaCAuZ3JhcGhib2FyZCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLmNlbnRlcjpub3QoLm5vLWdyYXBoKSAubm8tZGF0YS1tZXNzYWdlIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItbGluayk7CiAgICAgIH0KCiAgICAgIGE6dmlzaXRlZCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmstdmlzaXRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sZll0LnByb3RvdHlwZSwiX2RhdGFzZXRzIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZll0LnByb3RvdHlwZSwiX2RhdGFzZXRzRmV0Y2hlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxmWXQucHJvdG90eXBlLCJfc2VsZWN0ZWREYXRhc2V0Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfcmVuZGVySGllcmFyY2h5Q2hhbmdlZCJ9KSxlKCJkZXNpZ246dHlwZSIseVd0KV0sZll0LnByb3RvdHlwZSwiX3JlbmRlckhpZXJhcmNoeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixkcildLGZZdC5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixYUildLGZZdC5wcm90b3R5cGUsIl9jYW5jZWxsZXIiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxmWXQucHJvdG90eXBlLCJfZGVidWdnZXJEYXRhRW5hYmxlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGZZdC5wcm90b3R5cGUsImFsbFN0ZXBzTW9kZUVuYWJsZWQiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sZll0LnByb3RvdHlwZSwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9oZWFsdGhQaWxsc1RvZ2dsZWRPbkNoYW5nZWQifSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxmWXQucHJvdG90eXBlLCJoZWFsdGhQaWxsc1RvZ2dsZWRPbiIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZll0LnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZll0LnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxmWXQucHJvdG90eXBlLCJfaW5pdGlhbGl6ZWQiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxmWXQucHJvdG90eXBlLCJfYXJlSGVhbHRoUGlsbHNMb2FkaW5nIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sZll0LnByb3RvdHlwZSwiX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmWXQucHJvdG90eXBlLCJfbm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxmWXQucHJvdG90eXBlLCJfaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxmWXQucHJvdG90eXBlLCJfaGVhbHRoUGlsbFJlcXVlc3RJZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxmWXQucHJvdG90eXBlLCJfaGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxmWXQucHJvdG90eXBlLCJfaGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJEZWxheSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sZll0LnByb3RvdHlwZSwicnVucyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9ydW5PYnNlcnZlciJ9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZll0LnByb3RvdHlwZSwicnVuIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGZZdC5wcm90b3R5cGUsIl9zZWxlY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZll0LnByb3RvdHlwZSwiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGZZdC5wcm90b3R5cGUsIl90cmFjZUlucHV0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGZZdC5wcm90b3R5cGUsIl9hdXRvRXh0cmFjdE5vZGVzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGZZdC5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGUiLHZvaWQgMCksdChbYSgiX2lzQXR0YWNoZWQiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGZZdC5wcm90b3R5cGUsIl9tYXliZUluaXRpYWxpemVEYXNoYm9hcmQiLG51bGwpLHQoW2EoIl9kYXRhc2V0c0ZldGNoZWQiLCJfZGF0YXNldHMiLCJydW4iKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGZZdC5wcm90b3R5cGUsIl9kZXRlcm1pbmVTZWxlY3RlZERhdGFzZXQiLG51bGwpLHQoW2EoIl9kYXRhc2V0c0ZldGNoZWQiLCJfZGF0YXNldHMiLCJfc2VsZWN0ZWREYXRhc2V0IiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxmWXQucHJvdG90eXBlLCJfdXBkYXRlU2VsZWN0ZWREYXRhc2V0TmFtZSIsbnVsbCksZll0PXQoW2koInRmLWdyYXBoLWRhc2hib2FyZCIpXSxmWXQpO2NvbnN0IG1ZdD1MTjtsZXQgZ1l0PWNsYXNzIGV4dGVuZHMoZXIoaWwoeWUpKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubW9kZT0ib2Zmc2V0Iix0aGlzLnRpbWVQcm9wZXJ0eT0ic3RlcCIsdGhpcy5iaW5zPSJiaW5zIix0aGlzLng9IngiLHRoaXMuZHg9ImR4Iix0aGlzLnk9InkiLHRoaXMuY29sb3JTY2FsZT1tWXQuc2NhbGVPcmRpbmFsKG1ZdC5zY2hlbWVDYXRlZ29yeTEwKSx0aGlzLm1vZGVUcmFuc2l0aW9uRHVyYXRpb249NTAwLHRoaXMuX25hbWU9bnVsbCx0aGlzLl9kYXRhPW51bGx9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX1zZXRTZXJpZXNEYXRhKHQsZSl7dGhpcy5fbmFtZT10LHRoaXMuX2RhdGE9ZSx0aGlzLnJlZHJhdygpfV9yZWRyYXdPbkNoYW5nZSgpe3RoaXMucmVkcmF3KCl9cmVkcmF3KCl7dGhpcy5fZHJhdygwKX1fbW9kZVJlZHJhdygpe3RoaXMuX2RyYXcodGhpcy5tb2RlVHJhbnNpdGlvbkR1cmF0aW9uKX1fZHJhdyh0KXtpZighdGhpcy5fYXR0YWNoZWR8fCF0aGlzLl9kYXRhKXJldHVybjtpZih2b2lkIDA9PT10KXRocm93IG5ldyBFcnJvcigidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgX2RyYXcgbmVlZHMgZHVyYXRpb24iKTtpZih0aGlzLl9kYXRhLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBlbm91Z2ggc3RlcHMgaW4gdGhlIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmJpbnMpKXRocm93IG5ldyBFcnJvcigiTm8gYmlucyBwcm9wZXJ0eSBvZiAnIit0aGlzLmJpbnMrIicgaW4gZGF0YSIpO2lmKHRoaXMuX2RhdGFbMF1bdGhpcy5iaW5zXS5sZW5ndGg8PTApdGhyb3cgbmV3IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGJpbiBpbiBiaW5zIGluIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueCkpdGhyb3cgbmV3IEVycm9yKCJObyB4IHByb3BlcnR5ICciK3RoaXMueCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMuZHgpKXRocm93IG5ldyBFcnJvcigiTm8gZHggcHJvcGVydHkgJyIrdGhpcy5keCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueSkpdGhyb3cgbmV3IEVycm9yKCJObyB5IHByb3BlcnR5ICciK3RoaXMueSsiJyBvbiBiaW5zIGRhdGEiKTt2YXIgZT10aGlzLnRpbWVQcm9wZXJ0eSxuPXRoaXMueCxpPXRoaXMuYmlucyxyPXRoaXMuZHgsbz10aGlzLnksYT10aGlzLl9kYXRhLHM9dGhpcy5tb2RlLGw9bVl0LmhjbCh0aGlzLmNvbG9yU2NhbGUodGhpcy5fbmFtZSkpLGM9bVl0LnNlbGVjdCh0aGlzLiQudG9vbHRpcCksdT1mdW5jdGlvbih0KXtyZXR1cm4gdFtuXX0saD1mdW5jdGlvbih0KXtyZXR1cm4gdFtvXX0sZD1mdW5jdGlvbih0KXtyZXR1cm4gdFtuXSt0W3JdfSxwPWZ1bmN0aW9uKHQpe3JldHVybiB0W2VdfTsicmVsYXRpdmUiPT09ZSYmKHA9ZnVuY3Rpb24odCl7cmV0dXJuIHQud2FsbF90aW1lLWFbMF0ud2FsbF90aW1lfSk7dmFyIGYsbT10aGlzLiQuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGc9bS53aWR0aCxfPW0uaGVpZ2h0LHk9e3RvcDo1LHJpZ2h0OjYwLGJvdHRvbToyMCxsZWZ0OjI0fTsib2Zmc2V0Ij09PXM/eS50b3A9NSsoZj1fLzIuNSk6Zj1fLXkudG9wLXkuYm90dG9tO3ZhciB2PWcteS5sZWZ0LXkucmlnaHQsYj1fLXkudG9wLXkuYm90dG9tO21ZdC5taW4oYSx1KSxtWXQubWF4KGEsZCk7dmFyIHg9bVl0LmZvcm1hdCgiLjNuIiksdz1tWXQuZm9ybWF0KCIuMGYiKTsid2FsbF90aW1lIj09PWU/dz1tWXQudGltZUZvcm1hdCgiJW0vJWQgJVgiKToicmVsYXRpdmUiPT09ZSYmKHc9ZnVuY3Rpb24odCl7cmV0dXJuIG1ZdC5mb3JtYXQoIi4xciIpKHQvMzZlNSkrImgifSk7dmFyIFM9YS5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW21ZdC5taW4odFtpXSx1KSxtWXQubWF4KHRbaV0sZCldfSkpLE09YS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBtWXQuZXh0ZW50KHRbaV0saCl9KSksRT01MDAsVD1tWXQuZXh0ZW50KGEscCksQz0oIndhbGxfdGltZSI9PT1lP21ZdC5zY2FsZVRpbWUoKTptWXQuc2NhbGVMaW5lYXIoKSkuZG9tYWluKFQpLnJhbmdlKFswLCJvZmZzZXQiPT09cz9iOjBdKSxBPW1ZdC5zY2FsZUxpbmVhcigpLmRvbWFpbihbMCxtWXQubWF4KGEsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1bZV1bMV19KSldKS5yYW5nZShbZiwwXSksaz1tWXQuc2NhbGVMaW5lYXIoKS5kb21haW4oQS5kb21haW4oKSkucmFuZ2UoW0UsMF0pLEw9bVl0LnNjYWxlTGluZWFyKCkuZG9tYWluKFttWXQubWluKGEsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNbZV1bMF19KSksbVl0Lm1heChhLChmdW5jdGlvbih0LGUpe3JldHVybiBTW2VdWzFdfSkpXSkubmljZSgpLnJhbmdlKFswLHZdKSxQPW1ZdC5zY2FsZUxpbmVhcigpLmRvbWFpbihMLmRvbWFpbigpKS5yYW5nZShbMCxFXSk7Y29uc3QgTj1tWXQuc2NhbGVMaW5lYXIoKS5kb21haW4obVl0LmV4dGVudChhLHApKS5yYW5nZShbbC5icmlnaHRlcigpLGwuZGFya2VyKCldKS5pbnRlcnBvbGF0ZShtWXQuaW50ZXJwb2xhdGVIY2wpO3ZhciBJPW1ZdC5heGlzQm90dG9tKEwpLnRpY2tzKE1hdGgubWF4KDIsdi8yMCkpLFI9bVl0LmF4aXNSaWdodChDKS50aWNrcyhNYXRoLm1heCgyLGIvMTUpKS50aWNrRm9ybWF0KHcpLE89bVl0LmF4aXNSaWdodChBKS50aWNrcyhNYXRoLm1heCgyLGIvMTUpKS50aWNrU2l6ZSh2KzUpLnRpY2tGb3JtYXQoeCksej1mdW5jdGlvbih0KXtyZXR1cm4gdFtuXSt0W3JdLzJ9LEQ9bVl0LmxpbmUoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gUCh6KHQpKX0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gayh0W29dKX0pKSxCPXRoaXMuJC5zdmcsSD1tWXQuc2VsZWN0KEIpLEY9SC50cmFuc2l0aW9uKCkuZHVyYXRpb24odCksVj1ILnNlbGVjdCgiZyIpLmNsYXNzZWQoInNtYWxsIiwoZnVuY3Rpb24oKXtyZXR1cm4gdj4wJiZ2PD0xNTB9KSkuY2xhc3NlZCgibWVkaXVtIiwoZnVuY3Rpb24oKXtyZXR1cm4gdj4xNTAmJnY8PTMwMH0pKS5jbGFzc2VkKCJsYXJnZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHY+MzAwfSkpLFU9Ri5zZWxlY3QoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit5LmxlZnQrIiwiK3kudG9wKyIpIiksaj1tWXQuYmlzZWN0b3IoZCkubGVmdCxHPVYuc2VsZWN0KCIuc3RhZ2UiKS5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXtKLnN0eWxlKCJvcGFjaXR5IiwxKSxldC5zdHlsZSgib3BhY2l0eSIsMSkscnQuc3R5bGUoIm9wYWNpdHkiLDEpLHN0LnN0eWxlKCJvcGFjaXR5IiwxKSxjLnN0eWxlKCJvcGFjaXR5IiwxKX0pKS5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe0ouc3R5bGUoIm9wYWNpdHkiLDApLGV0LnN0eWxlKCJvcGFjaXR5IiwwKSxydC5zdHlsZSgib3BhY2l0eSIsMCksc3Quc3R5bGUoIm9wYWNpdHkiLDApLEouY2xhc3NlZCgiaG92ZXItY2xvc2VzdCIsITEpLEsuY2xhc3NlZCgib3V0bGluZS1ob3ZlciIsITEpLGMuc3R5bGUoIm9wYWNpdHkiLDApfSkpLm9uKCJtb3VzZW1vdmUiLChmdW5jdGlvbiBXKCl7dmFyIHQsYT1tWXQubW91c2UodGhpcyksbD1MLmludmVydChhWzBdKTtmdW5jdGlvbiB1KHQpe3JldHVybiBNYXRoLm1pbih0W2ldLmxlbmd0aC0xLGoodFtpXSxsKSl9Qy5pbnZlcnQoYVsxXSk7dmFyIGgsZD0xLzA7Si5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbihlLGwpe3ZhciBjPXUoZSk7aD1lO3ZhciBtPUwoZVtpXVtjXVtuXStlW2ldW2NdW3JdLzIpLGc9QShlW2ldW2NdW29dKSxfPSJvZmZzZXQiPT09cz9DKHAoZSkpLShmLWcpOmcseT1NYXRoLmFicyhhWzFdLV8pO3JldHVybiB5PGQmJihkPXksdD1lKSwidHJhbnNsYXRlKCIrbSsiLCIrZysiKSJ9KSksSi5zZWxlY3QoInRleHQiKS50ZXh0KChmdW5jdGlvbih0KXt2YXIgZT11KHQpO3JldHVybiB0W2ldW2VdW29dfSkpLEouY2xhc3NlZCgiaG92ZXItY2xvc2VzdCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dH0pKSxLLmNsYXNzZWQoIm91dGxpbmUtaG92ZXIiLChmdW5jdGlvbihlKXtyZXR1cm4gZT09PXR9KSk7dmFyIG09dShoKTtldC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrTChoW2ldW21dW25dK2hbaV1bbV1bcl0vMikrIiwgIitiKyIpIn0pKS5zZWxlY3QoInRleHQiKS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4geChoW2ldW21dW25dK2hbaV1bbV1bcl0vMil9KSk7dmFyIGc9Ui50aWNrRm9ybWF0KCk7cnQuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24oZSl7cmV0dXJuInRyYW5zbGF0ZSgiK3YrIiwgIisoIm9mZnNldCI9PT1zP0MocCh0KSk6MCkrIikifSkpLnN0eWxlKCJkaXNwbGF5Iiwib2Zmc2V0Ij09PXM/IiI6Im5vbmUiKS5zZWxlY3QoInRleHQiKS50ZXh0KChmdW5jdGlvbihlKXtyZXR1cm4gZyhwKHQpKX0pKTt2YXIgXz1PLnRpY2tGb3JtYXQoKTtzdC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRlKCIrdisiLCAiKygib2Zmc2V0Ij09PXM/MDpBKHRbaV1bbV1bb10pKSsiKSJ9KSkuc3R5bGUoImRpc3BsYXkiLCJvZmZzZXQiPT09cz8ibm9uZSI6IiIpLnNlbGVjdCgidGV4dCIpLnRleHQoKGZ1bmN0aW9uKGUpe3JldHVybiBfKHRbaV1bbV1bb10pfSkpO3ZhciB5PW1ZdC5tb3VzZShCKTtjLnN0eWxlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoeVswXSsxNSkrInB4LCIrKHlbMV0tMTUpKyJweCkiKS5zZWxlY3QoInNwYW4iKS50ZXh0KCJvZmZzZXQiPT09cz9fKHRbaV1bbV1bb10pOigic3RlcCI9PT1lPyJzdGVwICI6IiIpK2cocCh0KSkpfSkpO0cuc2VsZWN0KCIuYmFja2dyb3VuZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy15LmxlZnQrIiwiKy15LnRvcCsiKSIpLmF0dHIoIndpZHRoIixnKS5hdHRyKCJoZWlnaHQiLF8pO3ZhciBxPUcuc2VsZWN0QWxsKCIuaGlzdG9ncmFtIikuZGF0YShhKTtxLmV4aXQoKS5yZW1vdmUoKTt2YXIgWT1xLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJoaXN0b2dyYW0iKSxYPVkubWVyZ2UocSkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gcCh0KS1wKGUpfSkpLCQ9VS5zZWxlY3RBbGwoIi5oaXN0b2dyYW0iKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKDAsICIrKCJvZmZzZXQiPT09cz9DKHAodCkpLWY6MCkrIikifSkpO1kuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJiYXNlbGluZSIpLCQuc2VsZWN0KCIuYmFzZWxpbmUiKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4ib2Zmc2V0Ij09PXM/LjE6MH0pKS5hdHRyKCJ5MSIsZikuYXR0cigieTIiLGYpLmF0dHIoIngyIix2KSxZLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwib3V0bGluZSIpO3ZhciBLPVguc2VsZWN0KCIub3V0bGluZSIpLmF0dHIoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIiwoZnVuY3Rpb24odCl7cmV0dXJuKGZ1bmN0aW9uKHQpe3JldHVybiJNIitQKHoodFswXSkpKyIsIitrKDApKyJMIitEKHQpLnNsaWNlKDEpKyJMIitQKHoodFt0Lmxlbmd0aC0xXSkpKyIsIitrKDApfSkodFtpXSl9KSkuc3R5bGUoInN0cm9rZS13aWR0aCIsMSk7JC5zZWxlY3QoIi5vdXRsaW5lIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoIit2L0UrIiwgIitmL0UrIikiKS5zdHlsZSgic3Ryb2tlIiwoZnVuY3Rpb24odCl7cmV0dXJuIm9mZnNldCI9PT1zPyIiOk4ocCh0KSl9KSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiJvZmZzZXQiPT09cz8xOjB9KSkuc3R5bGUoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gTihwKHQpKX0pKTt2YXIgWj1ZLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiaG92ZXIiKSxKPVguc2VsZWN0KCIuaG92ZXIiKS5zdHlsZSgiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiBOKHAodCkpfSkpO1ouYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJyIiwyKSxaLmFwcGVuZCgidGV4dCIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoImR4Iiw0KTt2YXIgUT1WLnNlbGVjdCgiLngtYXhpcy1ob3ZlciIpLnNlbGVjdEFsbCgiLmxhYmVsIikuZGF0YShbIngiXSksdHQ9US5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxldD1RLm1lcmdlKHR0KTt0dC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMjApLmF0dHIoInkiLDYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCksdHQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIiwwKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDYpLHR0LmFwcGVuZCgidGV4dCIpLmF0dHIoImR5IiwxOCk7dmFyIG50PVYuc2VsZWN0KCIueS1heGlzLWhvdmVyIikuc2VsZWN0QWxsKCIubGFiZWwiKS5kYXRhKFsieSJdKSxpdD1udC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxydD1udC5tZXJnZShpdCk7aXQuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsOCkuYXR0cigieSIsLTYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCksaXQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIiw2KS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDApLGl0LmFwcGVuZCgidGV4dCIpLmF0dHIoImR4Iiw4KS5hdHRyKCJkeSIsNCk7dmFyIG90PVYuc2VsZWN0KCIueS1zbGljZS1heGlzLWhvdmVyIikuc2VsZWN0QWxsKCIubGFiZWwiKS5kYXRhKFsieSJdKSxhdD1vdC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxzdD1vdC5tZXJnZShhdCk7YXQuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsOCkuYXR0cigieSIsLTYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCksYXQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIiw2KS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDApLGF0LmFwcGVuZCgidGV4dCIpLmF0dHIoImR4Iiw4KS5hdHRyKCJkeSIsNCksVS5zZWxlY3QoIi55LmF4aXMuc2xpY2UiKS5zdHlsZSgib3BhY2l0eSIsIm9mZnNldCI9PT1zPzA6MSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsICIrKCJvZmZzZXQiPT09cz8tZjowKSsiKSIpLmNhbGwoTyksVS5zZWxlY3QoIi54LmF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIitiKyIpIikuY2FsbChJKSxVLnNlbGVjdCgiLnkuYXhpcyIpLnN0eWxlKCJvcGFjaXR5Iiwib2Zmc2V0Ij09PXM/MTowKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2KyIsICIrKCJvZmZzZXQiPT09cz8wOmIpKyIpIikuY2FsbChSKSxVLnNlbGVjdEFsbCgiLnRpY2sgdGV4dCIpLmF0dHIoImZpbGwiLCIjYWFhIiksVS5zZWxlY3RBbGwoIi5heGlzIHBhdGguZG9tYWluIikuYXR0cigic3Ryb2tlIiwibm9uZSIpfX07ZnVuY3Rpb24gX1l0KHQpe2NvbnN0W2UsbixpXT10O3JldHVybnt3YWxsX3RpbWU6ZSxzdGVwOm4sbWluOllsKGkubWFwKCgoW3QsLF0pPT50KSkpLG1heDpXbChpLm1hcCgoKFssdF0pPT50KSkpLGJ1Y2tldHM6aS5tYXAoKChbdCxlLG5dKT0+KHtsZWZ0OnQscmlnaHQ6ZSxjb3VudDpufSkpKX19ZnVuY3Rpb24geVl0KHQsZSxuLGk9MzApe249PT1lJiYobj0xLjEqZSsxLGU9ZS8xLjEtMSk7Y29uc3Qgcj0obi1lKS9pO2xldCBvPTA7cmV0dXJuIHpsKGUsbixyKS5tYXAoKGk9Pntjb25zdCBhPWkrcjtsZXQgcz0wO2Zvcig7bzx0LmJ1Y2tldHMubGVuZ3RoOyl7Y29uc3Qgcj1NYXRoLm1pbihuLHQuYnVja2V0c1tvXS5yaWdodCksbD1NYXRoLm1heChlLHQuYnVja2V0c1tvXS5sZWZ0KSxjPU1hdGgubWluKHIsYSktTWF0aC5tYXgobCxpKSx1PWMvKHItbCkqdC5idWNrZXRzW29dLmNvdW50O2lmKHMrPWM+MD91OjAscj5hKWJyZWFrO28rK31yZXR1cm57eDppLGR4OnIseTpzfX0pKX1nWXQudGVtcGxhdGU9X2VgCiAgICA8ZGl2IGlkPSJ0b29sdGlwIj48c3Bhbj48L3NwYW4+PC9kaXY+CiAgICA8c3ZnIGlkPSJzdmciPgogICAgICA8Zz4KICAgICAgICA8ZyBjbGFzcz0iYXhpcyB4Ij48L2c+CiAgICAgICAgPGcgY2xhc3M9ImF4aXMgeSI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJheGlzIHkgc2xpY2UiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ic3RhZ2UiPgogICAgICAgICAgPHJlY3QgY2xhc3M9ImJhY2tncm91bmQiPjwvcmVjdD4KICAgICAgICA8L2c+CiAgICAgICAgPGcgY2xhc3M9IngtYXhpcy1ob3ZlciI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJ5LWF4aXMtaG92ZXIiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ieS1zbGljZS1heGlzLWhvdmVyIj48L2c+CiAgICAgIDwvZz4KICAgIDwvc3ZnPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6ICNmZmY7CiAgICAgICAgLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yOiAjZmZmOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcjogIzAwMDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6IHZhcigKICAgICAgICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yCiAgICAgICAgKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLW91dGxpbmUtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgZm9udC1mYW1pbHk6IHJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLmJhY2tncm91bmQgewogICAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgICBmaWxsOiByZWQ7CiAgICAgIH0KCiAgICAgIC5oaXN0b2dyYW0gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuaG92ZXIgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyIGNpcmNsZSB7CiAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CgogICAgICAuaG92ZXIgdGV4dCB7CiAgICAgICAgZmlsbDogYmxhY2s7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyLmhvdmVyLWNsb3Nlc3QgY2lyY2xlIHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1vdXRsaW5lLWNvbG9yKSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaG92ZXIuaG92ZXItY2xvc2VzdCB0ZXh0IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuYmFzZWxpbmUgewogICAgICAgIHN0cm9rZTogYmxhY2s7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLm91dGxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yKTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAub3V0bGluZS5vdXRsaW5lLWhvdmVyIHsKICAgICAgICBzdHJva2U6IHZhcigtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3IpICFpbXBvcnRhbnQ7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIsCiAgICAgIC55LWF4aXMtaG92ZXIsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIC5sYWJlbCwKICAgICAgLnktYXhpcy1ob3ZlciAubGFiZWwsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgLmxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB0ZXh0LWFuY2hvcjogZW5kOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHRleHQgewogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgbGluZSwKICAgICAgLnktYXhpcy1ob3ZlciBsaW5lLAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIGxpbmUgewogICAgICAgIHN0cm9rZTogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHJlY3QsCiAgICAgIC55LWF4aXMtaG92ZXIgcmVjdCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciByZWN0IHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1iZy1jb2xvcik7CiAgICAgIH0KCiAgICAgICN0b29sdGlwLAogICAgICAueC1heGlzLWhvdmVyIHRleHQsCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICBjb2xvcjogdmFyKC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5heGlzIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC5heGlzIHBhdGguZG9tYWluIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICB9CgogICAgICAuYXhpcyAudGljayBsaW5lIHsKICAgICAgICBzdHJva2U6ICNkZGQ7CiAgICAgIH0KCiAgICAgIC5heGlzLnNsaWNlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAuYXhpcy5zbGljZSAudGljayBsaW5lIHsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiAyOwogICAgICB9CgogICAgICAuc21hbGwgLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6Zmlyc3Qtb2YtdHlwZSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6bGFzdC1vZi10eXBlIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5tZWRpdW0gLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAubWVkaXVtIC5heGlzIC50aWNrOm50aC1jaGlsZCgybiArIDEpIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyAudGljazpudGgtY2hpbGQoMm4gKyAxKSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGdZdC5wcm90b3R5cGUsIm1vZGUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZ1l0LnByb3RvdHlwZSwidGltZVByb3BlcnR5Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGdZdC5wcm90b3R5cGUsImJpbnMiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZ1l0LnByb3RvdHlwZSwieCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxnWXQucHJvdG90eXBlLCJkeCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxnWXQucHJvdG90eXBlLCJ5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGdZdC5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sZ1l0LnByb3RvdHlwZSwibW9kZVRyYW5zaXRpb25EdXJhdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGdZdC5wcm90b3R5cGUsIl9hdHRhY2hlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxnWXQucHJvdG90eXBlLCJfbmFtZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sZ1l0LnByb3RvdHlwZSwiX2RhdGEiLHZvaWQgMCksdChbYSgidGltZVByb3BlcnR5IiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZ1l0LnByb3RvdHlwZSwiX3JlZHJhd09uQ2hhbmdlIixudWxsKSx0KFthKCJtb2RlIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxnWXQucHJvdG90eXBlLCJfbW9kZVJlZHJhdyIsbnVsbCksZ1l0PXQoW2koInZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIildLGdZdCk7bGV0IHZZdD1jbGFzcyBleHRlbmRzKExUdChlcih5ZSkpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5nZXREYXRhTG9hZE5hbWU9KHtydW46dH0pPT50LHRoaXMucmVxdWVzdERhdGE9KHQsZSxuKT0+e2NvbnN0IGk9X3IoKS5wbHVnaW5Sb3V0ZSgiaGlzdG9ncmFtcyIsIi9oaXN0b2dyYW1zIik7UHJvbWlzZS5hbGwodC5tYXAoKHQ9Pntjb25zdCBuPWlPKGkse3RhZzp0LnRhZyxydW46dC5ydW59KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KG4pLnRoZW4oKG49PntlKHtpdGVtOnQsZGF0YTpufSl9KSl9KSkpLmZpbmFsbHkoKCgpPT57bigpfSkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQsZSxuKT0+e2NvbnN0IGk9KGZ1bmN0aW9uIHIodCl7Y29uc3QgZT10Lm1hcChfWXQpLG49WWwoZSwodD0+dC5taW4pKSxpPVdsKGUsKHQ9PnQubWF4KSk7cmV0dXJuIGUubWFwKCh0PT4oe3dhbGxfdGltZTp0LndhbGxfdGltZSxzdGVwOnQuc3RlcCxiaW5zOnlZdCh0LG4saSl9KSkpfSkobiksbz10aGlzLmdldERhdGFMb2FkTmFtZShlKTt0aGlzLiQuY2hhcnQuc2V0U2VyaWVzRGF0YShvLGkpfSx0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb249R1IsdGhpcy5fZXhwYW5kZWQ9ITF9X3JlbG9hZE9uUnVuVGFnUmVxdWVzdE1hbmFnZXJDaGFuZ2UoKXt0aGlzLnJlbG9hZCgpfV91cGRhdGVEYXRhVG9Mb2FkKCl7dGhpcy5kYXRhVG9Mb2FkPVt7cnVuOnRoaXMucnVuLHRhZzp0aGlzLnRhZ31dfWdldCBfcnVuQ29sb3IoKXtyZXR1cm4gdGhpcy5fY29sb3JTY2FsZUZ1bmN0aW9uKHRoaXMucnVuKX1yZWRyYXcoKXt0aGlzLiQuY2hhcnQucmVkcmF3KCl9X3RvZ2dsZUV4cGFuZGVkKHQpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCksdGhpcy5yZWRyYXcoKX19O3ZZdC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KICAgIDwhLS0KICAgICAgVGhlIG1haW4gaGlzdG9ncmFtIHRoYXQgd2UgcmVuZGVyLiBEYXRhIGlzIHNldCBkaXJlY3RseSB3aXRoCiAgICAgIFxgc2V0U2VyaWVzRGF0YVxgLCBub3Qgd2l0aCBhIGJvdW5kIHByb3BlcnR5LgogICAgLS0+CiAgICA8dnotaGlzdG9ncmFtLXRpbWVzZXJpZXMKICAgICAgaWQ9ImNoYXJ0IgogICAgICB0aW1lLXByb3BlcnR5PSJbW3RpbWVQcm9wZXJ0eV1dIgogICAgICBtb2RlPSJbW2hpc3RvZ3JhbU1vZGVdXSIKICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVGdW5jdGlvbl1dIgogICAgPjwvdnotaGlzdG9ncmFtLXRpbWVzZXJpZXM+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgICBoZWlnaHQ6IDIzNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDcwMHB4OwogICAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGNvbG9yOiAjMjE5NmYzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgd2lkdGg6IDkwJTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHZZdC5wcm90b3R5cGUsInJ1biIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx2WXQucHJvdG90eXBlLCJ0YWciLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdll0LnByb3RvdHlwZSwiZ2V0RGF0YUxvYWROYW1lIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGRyKV0sdll0LnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdll0LnByb3RvdHlwZSwibG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSx2WXQucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx2WXQucHJvdG90eXBlLCJ0aW1lUHJvcGVydHkiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdll0LnByb3RvdHlwZSwiaGlzdG9ncmFtTW9kZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLHZZdC5wcm90b3R5cGUsIl9jb2xvclNjYWxlRnVuY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdll0LnByb3RvdHlwZSwiX2V4cGFuZGVkIix2b2lkIDApLHQoW2EoInJ1biIsInRhZyIsInJlcXVlc3RNYW5hZ2VyIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx2WXQucHJvdG90eXBlLCJfcmVsb2FkT25SdW5UYWdSZXF1ZXN0TWFuYWdlckNoYW5nZSIsbnVsbCksdChbYSgicnVuIiwidGFnIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx2WXQucHJvdG90eXBlLCJfdXBkYXRlRGF0YVRvTG9hZCIsbnVsbCksdChbcygicnVuIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sdll0LnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKSx2WXQ9dChbaSgidGYtaGlzdG9ncmFtLWxvYWRlciIpXSx2WXQpO2xldCBiWXQ9Y2xhc3MgZXh0ZW5kcyhlcih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5faGlzdG9ncmFtTW9kZT0ib2Zmc2V0Iix0aGlzLl90aW1lUHJvcGVydHk9InN0ZXAiLHRoaXMuX3Jlc3RhbXA9ITEsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IGRyfV9yZWRyYXdDYXRlZ29yeVBhbmUodCxlKXtlJiZ0LnRhcmdldC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1oaXN0b2dyYW0tbG9hZGVyIikuZm9yRWFjaCgodD0+dC5yZWRyYXcoKSkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKCk9Pnt0aGlzLl9yZWxvYWRIaXN0b2dyYW1zKCl9KSl9X2ZldGNoVGFncygpe2NvbnN0IHQ9X3IoKS5wbHVnaW5Sb3V0ZSgiaGlzdG9ncmFtcyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbigodD0+e2lmKFNlLmV4cG9ydHMuaXNFcXVhbCh0LHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2NvbnN0IGU9U2UuZXhwb3J0cy5tYXBWYWx1ZXModCwodD0+T2JqZWN0LmtleXModCkpKSxuPWFyKGUpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwwPT09bi5sZW5ndGgpLHRoaXMuc2V0KCJfcnVuVG9UYWciLGUpLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIix0KSx0aGlzLmFzeW5jKCgoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KSl9KSl9X3JlbG9hZEhpc3RvZ3JhbXMoKXt0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgidGYtaGlzdG9ncmFtLWxvYWRlciIpLmZvckVhY2goKHQ9Pnt0LnJlbG9hZCgpfSkpfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfWdldCBfY2F0ZWdvcmllcygpe3JldHVybiBNcih0aGlzLl9ydW5Ub1RhZyx0aGlzLl9zZWxlY3RlZFJ1bnMsdGhpcy5fdGFnRmlsdGVyKX1fdGFnTWV0YWRhdGEodCxlLG4pe3JldHVybiB0W2VdW25dfX07ZnVuY3Rpb24geFl0KHQpe3JldHVybiIiIT09dC5kaXNwbGF5TmFtZSYmdm9pZCAwIT09dC5kaXNwbGF5TmFtZT90LmRpc3BsYXlOYW1lOnQubmFtZX1mdW5jdGlvbiB3WXQodCl7aWYoIiIhPT10LmRpc3BsYXlOYW1lJiZ2b2lkIDAhPT10LmRpc3BsYXlOYW1lKXJldHVybiB0LmRpc3BsYXlOYW1lO2xldCBlPXQubmFtZS5ncm91cCxuPXQubmFtZS50YWc7cmV0dXJuIHZvaWQgMD09PWUmJihlPSIiKSx2b2lkIDA9PT1uJiYobj0iIiksIiI9PT1lP246ZSsiLiIrbn1mdW5jdGlvbiBTWXQodCxlKXtyZXR1cm4gZTx0LmhwYXJhbUNvbHVtbnMubGVuZ3RoP3hZdCh0LmhwYXJhbUNvbHVtbnNbZV0uaHBhcmFtSW5mbyk6d1l0KHQubWV0cmljQ29sdW1uc1tlLXQuaHBhcmFtQ29sdW1ucy5sZW5ndGhdLm1ldHJpY0luZm8pfWZ1bmN0aW9uIE1ZdCh0KXtyZXR1cm4gdC5ocGFyYW1Db2x1bW5zLmxlbmd0aH1mdW5jdGlvbiBFWXQodCl7cmV0dXJuIHQubWV0cmljQ29sdW1ucy5sZW5ndGh9ZnVuY3Rpb24gVFl0KHQpe3JldHVybiBNWXQodCkrRVl0KHQpfWZ1bmN0aW9uIENZdCh0LGUpe3JldHVybiB0W2VdfWZ1bmN0aW9uIEFZdCh0LGUpe3JldHVybiB0LmZpbmQoKHQ9PlNlLmV4cG9ydHMuaXNFcXVhbCh0Lm5hbWUsZSkpKX1mdW5jdGlvbiBrWXQodCxlLG4pe3JldHVybiBlLmhwYXJhbXNbdC5ocGFyYW1Db2x1bW5zW25dLmhwYXJhbUluZm8ubmFtZV19ZnVuY3Rpb24gTFl0KHQsZSxuKXtjb25zdCBpPUFZdChlLm1ldHJpY1ZhbHVlcyx0Lm1ldHJpY0NvbHVtbnNbbl0ubWV0cmljSW5mby5uYW1lKTtyZXR1cm4gdm9pZCAwPT09aT92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiBQWXQodCxlLG4pe3JldHVybiBuPHQuaHBhcmFtQ29sdW1ucy5sZW5ndGg/a1l0KHQsZSxuKTpMWXQodCxlLG4tdC5ocGFyYW1Db2x1bW5zLmxlbmd0aCl9ZnVuY3Rpb24gTll0KHQsZSxuKXtyZXR1cm4gTGwoZSwoZT0+UFl0KHQsZSxuKSkpfWZ1bmN0aW9uIElZdCh0LGUsbil7bGV0IGk7aWYobjxlLmhwYXJhbUluZm9zLmxlbmd0aClpPXQuaHBhcmFtQ29sdW1ucy5maW5kSW5kZXgoKHQ9PnQuaHBhcmFtSW5mby5uYW1lPT09ZS5ocGFyYW1JbmZvc1tuXS5uYW1lKSk7ZWxzZXtjb25zdCByPWUubWV0cmljSW5mb3Nbbi1lLmhwYXJhbUluZm9zLmxlbmd0aF0ubmFtZTtpPXQuaHBhcmFtQ29sdW1ucy5sZW5ndGgrdC5tZXRyaWNDb2x1bW5zLmZpbmRJbmRleCgodD0+dC5tZXRyaWNJbmZvLm5hbWU9PT1yKSl9cmV0dXJuIGNvbnNvbGUuYXNzZXJ0KC0xIT09aSksaX1mdW5jdGlvbiBSWXQodCl7cmV0dXJuIHQuaHBhcmFtSW5mb3MubGVuZ3RofWZ1bmN0aW9uIE9ZdCh0KXtyZXR1cm4gdC5tZXRyaWNJbmZvcy5sZW5ndGh9ZnVuY3Rpb24gell0KHQsZSxuKXtyZXR1cm4gTGwoZSwoZT0+Rll0KHQsZSxuKSkpfWZ1bmN0aW9uIERZdCh0LGUpe3JldHVybiB0LmZpbmQoKHQ9PnQubmFtZT09PWUpKX1mdW5jdGlvbiBCWXQodCxlLG4pe3JldHVybiBlLmhwYXJhbXNbdC5ocGFyYW1JbmZvc1tuXS5uYW1lXX1mdW5jdGlvbiBIWXQodCxlLG4pe2NvbnN0IGk9QVl0KGUubWV0cmljVmFsdWVzLHQubWV0cmljSW5mb3Nbbl0ubmFtZSk7cmV0dXJuIHZvaWQgMD09PWk/dm9pZCAwOmkudmFsdWV9ZnVuY3Rpb24gRll0KHQsZSxuKXtyZXR1cm4gbjx0LmhwYXJhbUluZm9zLmxlbmd0aD9CWXQodCxlLG4pOkhZdCh0LGUsbi10LmhwYXJhbUluZm9zLmxlbmd0aCl9ZnVuY3Rpb24gVll0KHQpe3JldHVybiBTZS5leHBvcnRzLmlzTnVtYmVyKHQpP3QudG9QcmVjaXNpb24oNSk6dm9pZCAwPT09dD8iIjp0LnRvU3RyaW5nKCl9ZnVuY3Rpb24gVVl0KHQsZSl7cmV0dXJuIHQqdCtlKmV9ZnVuY3Rpb24gall0KHQsZSxuLGkpe3JldHVybiBNYXRoLnNxcnQoVVl0KHQtbixlLWkpKX1mdW5jdGlvbiBHWXQodCxlLG4saSxyLG8pe2lmKHQ8biYmZTxpKXJldHVybiBqWXQodCxlLG4saSk7aWYobjw9dCYmdDxyJiZlPGkpcmV0dXJuIGktZTtpZihyPD10JiZlPGkpcmV0dXJuIGpZdCh0LGUscixpKTtpZih0PG4mJmk8PWUmJmU8bylyZXR1cm4gbi10O2lmKG48PXQmJnQ8ciYmaTw9ZSYmZTxvKXJldHVybiAwO2lmKHI8PXQmJmk8PWUmJmU8bylyZXR1cm4gdC1yO2lmKHQ8biYmbzw9ZSlyZXR1cm4gall0KHQsZSxuLG8pO2lmKG48PXQmJnQ8ciYmbzw9ZSlyZXR1cm4gZS1vO2lmKHI8PXQmJm88PWUpcmV0dXJuIGpZdCh0LGUscixvKTt0aHJvdyJQb2ludCAoeCx5KSBtdXN0IGJlIGluIG9uZSBvZiB0aGUgcmVnaW9ucyBkZWZpbmVkIGFib3ZlLiJ9ZnVuY3Rpb24gV1l0KHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/InRyYW5zbGF0ZSgiK3QrIikiOiJ0cmFuc2xhdGUoIit0KyIsIitlKyIpIn1mdW5jdGlvbiBxWXQodCxlLG4pe2NvbnN0IGk9dC5nZXQoZSx0KTtBcnJheS5pc0FycmF5KGkpP3Quc3BsaWNlLmFwcGx5KHQsW2UsMCxpLmxlbmd0aF0uY29uY2F0KG4pKTp0LnNldChlLG4pfWZ1bmN0aW9uIFlZdCh0KXtsZXQgZT0wO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7KytuKWU9MzEqZSt0LmNoYXJDb2RlQXQobikmNDI5NDk2NzI5NTtyZXR1cm4gZStNYXRoLnBvdygyLDMxKX1iWXQudGVtcGxhdGU9X2VgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9Imhpc3RvZ3JhbU1vZGVTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIaXN0b2dyYW0gbW9kZSIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfaGlzdG9ncmFtTW9kZX19IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0ib3ZlcmxheSI+b3ZlcmxheTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9Im9mZnNldCI+b2Zmc2V0PC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9InRpbWVQcm9wZXJ0eVNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ik9mZnNldCB0aW1lIGF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3RpbWVQcm9wZXJ0eX19IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0ic3RlcCI+c3RlcDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBoaXN0b2dyYW0gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaGlzdG9ncmFtIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1oaXN0b2dyYW0tbG9hZGVyCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICB0YWctbWV0YWRhdGE9IltbX3RhZ01ldGFkYXRhKF9ydW5Ub1RhZ0luZm8sIGl0ZW0ucnVuLCBpdGVtLnRhZyldXSIKICAgICAgICAgICAgICAgICAgdGltZS1wcm9wZXJ0eT0iW1tfdGltZVByb3BlcnR5XV0iCiAgICAgICAgICAgICAgICAgIGhpc3RvZ3JhbS1tb2RlPSJbW19oaXN0b2dyYW1Nb2RlXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgID48L3RmLWhpc3RvZ3JhbS1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGJZdC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sYll0LnByb3RvdHlwZSwiX2hpc3RvZ3JhbU1vZGUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sYll0LnByb3RvdHlwZSwiX3RpbWVQcm9wZXJ0eSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sYll0LnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxiWXQucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sYll0LnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGJZdC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sYll0LnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGJZdC5wcm90b3R5cGUsIl9yZXN0YW1wIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sYll0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixkcildLGJZdC5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtzKCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGJZdC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKSxiWXQ9dChbaSgidGYtaGlzdG9ncmFtLWRhc2hib2FyZCIpXSxiWXQpO3ZhciBYWXQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsaHBhcmFtTmFtZTp4WXQsbWV0cmljTmFtZTp3WXQsc2NoZW1hQ29sdW1uTmFtZTpTWXQsbnVtSFBhcmFtczpNWXQsbnVtTWV0cmljczpFWXQsbnVtQ29sdW1uczpUWXQsaHBhcmFtVmFsdWVCeU5hbWU6Q1l0LG1ldHJpY1ZhbHVlQnlOYW1lOkFZdCxocGFyYW1WYWx1ZUJ5SW5kZXg6a1l0LG1ldHJpY1ZhbHVlQnlJbmRleDpMWXQsY29sdW1uVmFsdWVCeUluZGV4OlBZdCxudW1lcmljQ29sdW1uRXh0ZW50Ok5ZdCxnZXRBYnNvbHV0ZUNvbHVtbkluZGV4OklZdCxzY2hlbWFWaXNpYmxlQ29sdW1uTmFtZTpmdW5jdGlvbiAkWXQodCxlKXtyZXR1cm4gZTx0LmhwYXJhbUluZm9zLmxlbmd0aD94WXQodC5ocGFyYW1JbmZvc1tlXSk6d1l0KHQubWV0cmljSW5mb3NbZS10LmhwYXJhbUluZm9zLmxlbmd0aF0pfSxudW1WaXNpYmxlSFBhcmFtczpSWXQsbnVtVmlzaWJsZU1ldHJpY3M6T1l0LG51bVZpc2libGVDb2x1bW5zOmZ1bmN0aW9uIEtZdCh0KXtyZXR1cm4gUll0KHQpK09ZdCh0KX0sdmlzaWJsZU51bWVyaWNDb2x1bW5FeHRlbnQ6ell0LHByZXR0eVByaW50SFBhcmFtVmFsdWVCeU5hbWU6ZnVuY3Rpb24gWll0KHQsZSl7cmV0dXJuIFZZdChDWXQodCxlKSl9LHByZXR0eVByaW50TWV0cmljVmFsdWVCeU5hbWU6ZnVuY3Rpb24gSll0KHQsZSl7cmV0dXJuIFZZdChBWXQodCxlKSl9LHNlc3Npb25Hcm91cFdpdGhOYW1lOkRZdCxocGFyYW1WYWx1ZUJ5VmlzaWJsZUluZGV4OkJZdCxtZXRyaWNWYWx1ZUJ5VmlzaWJsZUluZGV4OkhZdCxjb2x1bW5WYWx1ZUJ5VmlzaWJsZUluZGV4OkZZdCxwcmV0dHlQcmludDpWWXQsbDJOb3JtU3F1YXJlZDpVWXQsZXVjbGlkZWFuRGlzdDpqWXQscG9pbnRUb1JlY3RhbmdsZURpc3Q6R1l0LHRyYW5zbGF0ZVN0cjpXWXQscm90YXRlU3RyOmZ1bmN0aW9uIFFZdCh0LGUsbil7bGV0IGk9InJvdGF0ZSgiK3Q7cmV0dXJuIHZvaWQgMCE9PWUmJnZvaWQgMCE9PW4mJihpPWkrIiwiK2UrIiwiK24pLGkrPSIpIixpfSxpc051bGxPclVuZGVmaW5lZDpmdW5jdGlvbiB0WHQodCl7cmV0dXJuIG51bGw9PXR9LHF1YWRUcmVlVmlzaXRQb2ludHNJblJlY3Q6ZnVuY3Rpb24gZVh0KHQsZSxuLGkscixvKXt0LnZpc2l0KCgoYSxzLGwsYyx1KT0+e2lmKHZvaWQgMD09PWEubGVuZ3RoKXtkb3tjb25zdCBzPXQueCgpKGEuZGF0YSksbD10LnkoKShhLmRhdGEpO2U8PXMmJnM8aSYmbjw9bCYmbDxyJiZvKGEuZGF0YSl9d2hpbGUoYT1hLm5leHQpO3JldHVybiEwfXJldHVybiBzPj1pfHxjPD1lfHxsPj1yfHx1PD1ufSkpfSxxdWFkVHJlZVZpc2l0UG9pbnRzSW5EaXNrOmZ1bmN0aW9uIG5YdCh0LGUsbixpLHIpe3QudmlzaXQoKChvLGEscyxsLGMpPT57aWYodm9pZCAwPT09by5sZW5ndGgpe2Rve2NvbnN0IGE9dC54KCkoby5kYXRhKSxzPXQueSgpKG8uZGF0YSksbD1qWXQoZSxuLGEscyk7bDw9aSYmcihvLmRhdGEsbCl9d2hpbGUobz1vLm5leHQpO3JldHVybiEwfXJldHVybiBHWXQoZSxuLGEscyxsLGMpPml9KSl9LGZpbHRlclNldDpmdW5jdGlvbiBpWHQodCxlKXtjb25zdCBuPW5ldyBTZXQ7cmV0dXJuIHQuZm9yRWFjaCgodD0+e2UodCkmJm4uYWRkKHQpfSkpLG59LHNldEFycmF5T2JzZXJ2YWJseTpxWXQsaGFzaE9mU3RyaW5nOllZdH0pO2xldCByWHQ9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5vcmllbnRhdGlvbj0iaG9yaXpvbnRhbCJ9fTtyWHQudGVtcGxhdGU9X2VgCiAgICA8c2xvdCBuYW1lPSJjb250ZW50Ij48L3Nsb3Q+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0IHNsb3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKikgewogICAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXSkgc2xvdCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIHNsb3QgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QgOjpzbG90dGVkKCo6bm90KDpsYXN0LWNoaWxkKSkgewogICAgICAgIGJvcmRlcjogMCBzb2xpZCB2YXIoLS1kaXZpZGVyLWNvbG9yLCAjY2NjKTsKICAgICAgfQoKICAgICAgOmhvc3QoW29yaWVudGF0aW9uPSd2ZXJ0aWNhbCddKSA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogNXB4OwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXSkgOjpzbG90dGVkKCo6bm90KDpsYXN0LWNoaWxkKSkgewogICAgICAgIGJvcmRlci1yaWdodC13aWR0aDogNXB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmcscmVmbGVjdFRvQXR0cmlidXRlOiEwfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLHJYdC5wcm90b3R5cGUsIm9yaWVudGF0aW9uIix2b2lkIDApLHJYdD10KFtpKCJocGFyYW1zLXNwbGl0LWxheW91dCIpXSxyWHQpO2xldCBvWHQ9Y2xhc3MgZXh0ZW5kcyhlcih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbmZpZ3VyYXRpb249e3NjaGVtYTp7aHBhcmFtQ29sdW1uczpbXSxtZXRyaWNDb2x1bW5zOltdfSxjb2x1bW5zVmlzaWJpbGl0eTpbXSx2aXNpYmxlU2NoZW1hOntocGFyYW1JbmZvczpbXSxtZXRyaWNJbmZvczpbXX19LHRoaXMuc2Vzc2lvbkdyb3Vwcz1bXSx0aGlzLmRhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zPSExLHRoaXMuZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXM9ITEsdGhpcy5fc3RhdHVzZXM9W3t2YWx1ZToiU1RBVFVTX1VOS05PV04iLGRpc3BsYXlOYW1lOiJVbmtub3duIixhbGxvd2VkOiEwfSx7dmFsdWU6IlNUQVRVU19TVUNDRVNTIixkaXNwbGF5TmFtZToiU3VjY2VzcyIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfRkFJTFVSRSIsZGlzcGxheU5hbWU6IkZhaWx1cmUiLGFsbG93ZWQ6ITB9LHt2YWx1ZToiU1RBVFVTX1JVTk5JTkciLGRpc3BsYXlOYW1lOiJSdW5uaW5nIixhbGxvd2VkOiEwfV0sdGhpcy5fZ2V0RXhwZXJpbWVudFJlc29sdmVkPW5ldyBQcm9taXNlKCh0PT57dGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQ9dH0pKSx0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlcj1uZXcgWFIsdGhpcy5fcGFnZVNpemVJbnB1dD17dmFsdWU6IjEwMCIsaW52YWxpZDohMX0sdGhpcy5fcGFnZU51bWJlcklucHV0PXt2YWx1ZToiMSIsaW52YWxpZDohMX0sdGhpcy5fcGFnZUNvdW50U3RyPSI/Iix0aGlzLl9ocGFyYW1OYW1lPXhZdCx0aGlzLl9tZXRyaWNOYW1lPXdZdCx0aGlzLl9wcmV0dHlQcmludD1WWXR9cmVsb2FkKCl7dGhpcy5fcXVlcnlTZXJ2ZXIoKX1fY3N2VXJsKHQsZSl7cmV0dXJuIHRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LGUsImNzdiIpfV9qc29uVXJsKHQsZSl7cmV0dXJuIHRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LGUsImpzb24iKX1fbGF0ZXhVcmwodCxlKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsZSwibGF0ZXgiKX1fZG93bmxvYWREYXRhVXJsKHQsZSxuKXtyZXR1cm4gdGhpcy5iYWNrZW5kLmdldERvd25sb2FkVXJsKG4sdCxlLmNvbHVtbnNWaXNpYmlsaXR5KX1fY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMoKXtjb25zdCB0PVhZdDt0LmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuYmFja2VuZCl8fHQuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5leHBlcmltZW50TmFtZSl8fHRoaXMuYmFja2VuZC5nZXRFeHBlcmltZW50KHtleHBlcmltZW50TmFtZTp0aGlzLmV4cGVyaW1lbnROYW1lfSkudGhlbigodD0+e1NlLmV4cG9ydHMuaXNFcXVhbCh0LHRoaXMuX2V4cGVyaW1lbnQpfHwodGhpcy5zZXQoIl9leHBlcmltZW50Iix0KSx0aGlzLl9jb21wdXRlSFBhcmFtcygpLHRoaXMuX2NvbXB1dGVNZXRyaWNzKCksdGhpcy5fcXVlcnlTZXJ2ZXIoKSx0aGlzLl9yZXNvbHZlR2V0RXhwZXJpbWVudCgpKX0pKS5maW5hbGx5KCgoKT0+e3RoaXMuX2NvbXB1dGVEYXRhRm91bmQoKX0pKX1fY29tcHV0ZURhdGFGb3VuZCgpe2NvbnN0IHQ9Qm9vbGVhbih0aGlzLl9leHBlcmltZW50JiZ0aGlzLl9leHBlcmltZW50LmhwYXJhbUluZm9zJiZ0aGlzLl9leHBlcmltZW50LmhwYXJhbUluZm9zLmxlbmd0aD4wJiZ0aGlzLl9leHBlcmltZW50Lm1ldHJpY0luZm9zJiZ0aGlzLl9leHBlcmltZW50Lm1ldHJpY0luZm9zLmxlbmd0aD4wKTt0aGlzLnNldCgiZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXMiLHQpLHRoaXMuc2V0KCJkYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsIXQpfV9jb21wdXRlSFBhcmFtcygpe2NvbnN0IHQ9W107dGhpcy5fZXhwZXJpbWVudC5ocGFyYW1JbmZvcy5mb3JFYWNoKCgoZSxuKT0+e2NvbnN0IGk9e2luZm86ZSxkaXNwbGF5ZWQ6bjw1LGZpbHRlcjp7fX07aS5pbmZvLmhhc093blByb3BlcnR5KCJkb21haW5EaXNjcmV0ZSIpPyhpLmZpbHRlci5kb21haW5EaXNjcmV0ZT1bXSxpLmluZm8uZG9tYWluRGlzY3JldGUuZm9yRWFjaCgodD0+e2kuZmlsdGVyLmRvbWFpbkRpc2NyZXRlLnB1c2goe3ZhbHVlOnQsY2hlY2tlZDohMH0pfSkpKToiREFUQV9UWVBFX0JPT0wiPT09aS5pbmZvLnR5cGU/aS5maWx0ZXIuZG9tYWluRGlzY3JldGU9W3t2YWx1ZTohMSxjaGVja2VkOiEwfSx7dmFsdWU6ITAsY2hlY2tlZDohMH1dOiJEQVRBX1RZUEVfRkxPQVQ2NCI9PT1pLmluZm8udHlwZT9pLmZpbHRlci5pbnRlcnZhbD17bWluOnt2YWx1ZToiIixpbnZhbGlkOiExfSxtYXg6e3ZhbHVlOiIiLGludmFsaWQ6ITF9fToiREFUQV9UWVBFX1NUUklORyI9PT1pLmluZm8udHlwZT9pLmZpbHRlci5yZWdleHA9IiI6Y29uc29sZS53YXJuKCJ1bmtub3duIGhwYXJhbS5pbmZvLnR5cGU6ICVzIixpLmluZm8udHlwZSksdC5wdXNoKGkpfSkpLHRoaXMuc2V0KCJfaHBhcmFtcyIsdCl9X2NvbXB1dGVNZXRyaWNzKCl7Y29uc3QgdD1bXTt0aGlzLl9leHBlcmltZW50Lm1ldHJpY0luZm9zLmZvckVhY2goKChlLG4pPT57dC5wdXNoKHtpbmZvOmUsZmlsdGVyOntpbnRlcnZhbDp7bWluOnt2YWx1ZToiIixpbnZhbGlkOiExfSxtYXg6e3ZhbHVlOiIiLGludmFsaWQ6ITF9fX0sZGlzcGxheWVkOm48NX0pfSkpLHRoaXMuc2V0KCJfbWV0cmljcyIsdCl9X2NvbXB1dGVTY2hlbWEoKXtyZXR1cm4gdGhpcy5faHBhcmFtcyYmdGhpcy5fbWV0cmljcz97aHBhcmFtQ29sdW1uczp0aGlzLl9ocGFyYW1zLm1hcCgodD0+KHtocGFyYW1JbmZvOnQuaW5mb30pKSksbWV0cmljQ29sdW1uczp0aGlzLl9tZXRyaWNzLm1hcCgodD0+KHttZXRyaWNJbmZvOnQuaW5mb30pKSl9OntocGFyYW1Db2x1bW5zOltdLG1ldHJpY0NvbHVtbnM6W119fV91cGRhdGVDb25maWd1cmF0aW9uKCl7dGhpcy5kZWJvdW5jZSgiX3VwZGF0ZUNvbmZpZ3VyYXRpb24iLCgoKT0+e3RoaXMuY29uZmlndXJhdGlvbj17c2NoZW1hOnRoaXMuX2NvbXB1dGVTY2hlbWEoKSxjb2x1bW5zVmlzaWJpbGl0eTp0aGlzLl9jb21wdXRlQ29sdW1uc1Zpc2liaWxpdHkoKSx2aXNpYmxlU2NoZW1hOnRoaXMuX2NvbXB1dGVWaXNpYmxlU2NoZW1hKCl9fSkpfV9jb21wdXRlQ29sdW1uc1Zpc2liaWxpdHkoKXtyZXR1cm4gdGhpcy5faHBhcmFtcyYmdGhpcy5fbWV0cmljcz90aGlzLl9ocGFyYW1zLm1hcCgodD0+dC5kaXNwbGF5ZWQpKS5jb25jYXQodGhpcy5fbWV0cmljcy5tYXAoKHQ9PnQuZGlzcGxheWVkKSkpOltdfV9jb21wdXRlVmlzaWJsZVNjaGVtYSgpe3JldHVybiB0aGlzLl9ocGFyYW1zJiZ0aGlzLl9tZXRyaWNzP3tocGFyYW1JbmZvczp0aGlzLl9ocGFyYW1zLmZpbHRlcigodD0+dC5kaXNwbGF5ZWQpKS5tYXAoKHQ9PnQuaW5mbykpLG1ldHJpY0luZm9zOnRoaXMuX21ldHJpY3MuZmlsdGVyKCh0PT50LmRpc3BsYXllZCkpLm1hcCgodD0+dC5pbmZvKSl9OntocGFyYW1JbmZvczpbXSxtZXRyaWNJbmZvczpbXX19X3F1ZXJ5U2VydmVyKCl7dGhpcy5kZWJvdW5jZSgicXVlcnlTZXJ2ZXIiLCgoKT0+dGhpcy5fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCkpLDEwMCl9X3F1ZXJ5U2VydmVyTm9EZWJvdW5jZSgpe2lmKHRoaXMuX2hwYXJhbXMmJnRoaXMuX21ldHJpY3MpcmV0dXJuIHRoaXMuX3NlbmRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKS50aGVuKHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKCgoe3ZhbHVlOnQsY2FuY2VsbGVkOmV9KT0+e2V8fCh0LnRvdGFsU2l6ZT49MD8odGhpcy5zZXQoIl9wYWdlQ291bnRTdHIiLFN0cmluZyhNYXRoLmNlaWwodC50b3RhbFNpemUvK3RoaXMuX3BhZ2VTaXplSW5wdXQudmFsdWUpKSksdGhpcy5zZXQoIl90b3RhbFNlc3Npb25Hcm91cHNDb3VudFN0ciIsdC50b3RhbFNpemUpKToodGhpcy5zZXQoIl9wYWdlQ291bnRTdHIiLCI/IiksdGhpcy5zZXQoIl90b3RhbFNlc3Npb25Hcm91cHNDb3VudFN0ciIsIlVua25vd24iKSkscVl0KHRoaXMsInNlc3Npb25Hcm91cHMiLHQuc2Vzc2lvbkdyb3VwcykpfSkpKX1fc2VuZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpe2NvbnN0IHQ9dGhpcy5fYnVpbGRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKTtpZihudWxsIT09dClyZXR1cm4gdGhpcy5zZXQoIl9zZXNzaW9uR3JvdXBzUmVxdWVzdCIsdCksdGhpcy5fbGlzdFNlc3Npb25Hcm91cHNDYW5jZWxsZXIuY2FuY2VsQWxsKCksdGhpcy5iYWNrZW5kLmxpc3RTZXNzaW9uR3JvdXBzKHQpfV9idWlsZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpe2NvbnN0IHQ9dGhpcztsZXQgZT0hMDtmdW5jdGlvbiBuKG4pe2NvbnN0IGk9dC5nZXQobisiLm1pbi52YWx1ZSIpO2NvbnNvbGUuYXNzZXJ0KHZvaWQgMCE9PWkpO2NvbnN0IHI9IiI9PT1pPyItSW5maW5pdHkiOitpO3Quc2V0KG4rIi5taW4uaW52YWxpZCIsaXNOYU4ocikpLGU9ZSYmIWlzTmFOKHIpO2NvbnN0IG89dC5nZXQobisiLm1heC52YWx1ZSIpO2NvbnNvbGUuYXNzZXJ0KHZvaWQgMCE9PW8pO2NvbnN0IGE9IiI9PT1vPyJJbmZpbml0eSI6K287cmV0dXJuIHQuc2V0KG4rIi5tYXguaW52YWxpZCIsaXNOYU4oYSkpLGU9ZSYmIWlzTmFOKGEpLGlzTmFOKHIpfHxpc05hTihhKT9udWxsOnttaW5WYWx1ZTpyLG1heFZhbHVlOmF9fWZ1bmN0aW9uIGkobil7Y29uc3QgaT10LmdldChuKyIudmFsdWUiKTtjb25zb2xlLmFzc2VydCh2b2lkIDAhPT1pKTtjb25zdCByPStpLG89TnVtYmVyLmlzSW50ZWdlcihyKSYmcj4wO3JldHVybiB0LnNldChuKyIuaW52YWxpZCIsIW8pLGU9ZSYmbyxvP3I6bnVsbH1jb25zdCByPXRoaXMuX3N0YXR1c2VzLmZpbHRlcigodD0+dC5hbGxvd2VkKSkubWFwKCh0PT50LnZhbHVlKSk7bGV0IG89W107aWYodGhpcy5faHBhcmFtcy5mb3JFYWNoKCgodCxlKT0+e2xldCBpPXtocGFyYW06dC5pbmZvLm5hbWV9O2lmKHQuZmlsdGVyLmRvbWFpbkRpc2NyZXRlKWkuZmlsdGVyRGlzY3JldGU9W10sdC5maWx0ZXIuZG9tYWluRGlzY3JldGUuZm9yRWFjaCgodD0+e3QuY2hlY2tlZCYmaS5maWx0ZXJEaXNjcmV0ZS5wdXNoKHQudmFsdWUpfSkpO2Vsc2UgaWYodC5maWx0ZXIuaW50ZXJ2YWwpaS5maWx0ZXJJbnRlcnZhbD1uKCJfaHBhcmFtcy4iK2UrIi5maWx0ZXIuaW50ZXJ2YWwiKTtlbHNle2lmKCF0LmZpbHRlci5yZWdleHApcmV0dXJuIGNvbnNvbGUuZXJyb3IoImhwYXJhbS5maWx0ZXIgd2l0aCBubyBkb21haW5EaXNjcmV0ZSwgaW50ZXJ2YWwgb3IgcmVnZXhwIHByb3BlcnRpZXMgc2V0OiAlcyIsdCksbnVsbDtpLmZpbHRlclJlZ2V4cD10LmZpbHRlci5yZWdleHB9by5wdXNoKGkpfSkpLHRoaXMuX21ldHJpY3MuZm9yRWFjaCgoKHQsZSk9PntsZXQgaT17bWV0cmljOnQuaW5mby5uYW1lLGZpbHRlckludGVydmFsOm4oIl9tZXRyaWNzLiIrZSsiLmZpbHRlci5pbnRlcnZhbCIpfTtvLnB1c2goaSl9KSksdm9pZCAwIT09dGhpcy5fc29ydEJ5SW5kZXgmJnZvaWQgMCE9PXRoaXMuX3NvcnREaXJlY3Rpb24pe2lmKCEodGhpcy5fc29ydEJ5SW5kZXggaW4gbykpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIk5vIGNvbHVtbiBpbiBjb2xQYXJhbXMgd2l0aCBpbmRleCBzb3J0QnlJbmRleDogJXMiLHRoaXMuX3NvcnRCeUluZGV4KSxudWxsO29bdGhpcy5fc29ydEJ5SW5kZXhdLm9yZGVyPTA9PT10aGlzLl9zb3J0RGlyZWN0aW9uPyJPUkRFUl9BU0MiOiJPUkRFUl9ERVNDIn1jb25zdCBhPWkoIl9wYWdlTnVtYmVySW5wdXQiKSxzPWkoIl9wYWdlU2l6ZUlucHV0Iik7cmV0dXJuIGU/e2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWUsYWxsb3dlZFN0YXR1c2VzOnIsY29sUGFyYW1zOm8sc3RhcnRJbmRleDpzKihhLTEpLHNsaWNlU2l6ZTpzfTpudWxsfV9tZXRyaWNTb3J0QnlJbmRleCh0KXtyZXR1cm4gdCt0aGlzLl9ocGFyYW1zLmxlbmd0aH19O29YdC50ZW1wbGF0ZT1fZWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dCBvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIGh5cGVycGFyYW1ldGVycyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+SHlwZXJwYXJhbWV0ZXJzPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tfaHBhcmFtc319IiBhcz0iaHBhcmFtIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhwYXJhbSI+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgIGNoZWNrZWQ9Int7aHBhcmFtLmRpc3BsYXllZH19IgogICAgICAgICAgICAgIGNsYXNzPSJocGFyYW0tY2hlY2tib3giCiAgICAgICAgICAgID4KICAgICAgICAgICAgICBbW19ocGFyYW1OYW1lKGhwYXJhbS5pbmZvKV1dCiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgIDwhLS0gUHJlY2lzZWx5IG9uZSBvZiB0aGUgdGVtcGxhdGVzIGJlbG93IHdpbGwgYmUgc3RhbXBlZC4tLT4KICAgICAgICAgICAgPCEtLSAxLiBBIGxpc3Qgb2YgY2hlY2tib3hlcyAtLT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hwYXJhbS5maWx0ZXIuZG9tYWluRGlzY3JldGVdXSI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW2hwYXJhbS5maWx0ZXIuZG9tYWluRGlzY3JldGVdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICAgICAgY2hlY2tlZD0ie3tpdGVtLmNoZWNrZWR9fSIKICAgICAgICAgICAgICAgICAgY2xhc3M9ImRpc2NyZXRlLXZhbHVlLWNoZWNrYm94IgogICAgICAgICAgICAgICAgICBvbi1jaGFuZ2U9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgW1tfcHJldHR5UHJpbnQoaXRlbS52YWx1ZSldXQogICAgICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8IS0tIDIuIEEgbnVtZXJpYyBpbnRlcnZhbCAtLT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWxdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICBsYWJlbD0iTWluIgogICAgICAgICAgICAgICAgdmFsdWU9Int7aHBhcmFtLmZpbHRlci5pbnRlcnZhbC5taW4udmFsdWV9fSIKICAgICAgICAgICAgICAgIGFsbG93ZWRfcGF0dGVybj0iWzAtOS5lXFwtXSIKICAgICAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgICAgICBpbnZhbGlkPSJbW2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWluLmludmFsaWRdXSIKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSItaW5maW5pdHkiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICBsYWJlbD0iTWF4IgogICAgICAgICAgICAgICAgdmFsdWU9Int7aHBhcmFtLmZpbHRlci5pbnRlcnZhbC5tYXgudmFsdWV9fSIKICAgICAgICAgICAgICAgIGFsbG93ZWRfcGF0dGVybj0iWzAtOS5lXFwtXSIKICAgICAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgICAgICBpbnZhbGlkPSJbW2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWF4LmludmFsaWRdXSIKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSIraW5maW5pdHkiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwhLS0gMy4gQSByZWdleHAgLS0+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tocGFyYW0uZmlsdGVyLnJlZ2V4cF1dIj4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJSZWd1bGFyIGV4cHJlc3Npb24iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tocGFyYW0uZmlsdGVyLnJlZ2V4cH19IgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gbWV0cmljcyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+TWV0cmljczwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7X21ldHJpY3N9fSIgYXM9Im1ldHJpYyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRyaWMiPgogICAgICAgICAgICA8IS0tIFRPRE8oZXJleik6IE1ha2UgaXQgZWFzaWVyIHRvIGhhbmRsZSBhIGxhcmdlIG51bWJlciBvZgogICAgICAgICAgICAgICAgICBtZXRyaWNzOgogICAgICAgICAgICAgICAgICAxLiBBZGQgYW4gJ2lzb2xhdG9yJyByYWRpby1idXR0b24gdG8gc2VsZWN0IGp1c3Qgb25lCiAgICAgICAgICAgICAgICAgIG1ldHJpYyBhbmQKICAgICAgICAgICAgICAgICAgaGlkZSBhbGwgdGhlIHJlc3QKICAgICAgICAgICAgICAgICAgMi4gQWRkIGEgJ3RvZ2dsZS1hbGwnIGJ1dHRvbiB0aGF0IHdpbGwgaGlkZS91bmhpZGUKICAgICAgICAgICAgICAgICAgICBhbGwgdGhlCiAgICAgICAgICAgICAgICAgIG1ldHJpY3MuCiAgICAgICAgICAgICAgICAgIFVzZSBzaW1pbGFyIGxvZ2ljL2FwcGVhcmFuY2UgdG8gdGhlIHJ1bi1zZWxlY3RvciBvZgogICAgICAgICAgICAgICAgICBzY2FsYXJzLi0tPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjaGVja2VkPSJ7e21ldHJpYy5kaXNwbGF5ZWR9fSIKICAgICAgICAgICAgICBjbGFzcz0ibWV0cmljLWNoZWNrYm94IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgW1tfbWV0cmljTmFtZShtZXRyaWMuaW5mbyldXQogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtZWxlbWVudCI+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICBsYWJlbD0iTWluIgogICAgICAgICAgICAgICAgdmFsdWU9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5taW4udmFsdWV9fSIKICAgICAgICAgICAgICAgIGFsbG93ZWQtcGF0dGVybj0iWzAtOS5lXFwtXSIKICAgICAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgICAgICBpbnZhbGlkPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWluLmludmFsaWR9fSIKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSItaW5maW5pdHkiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtZWxlbWVudCI+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICBsYWJlbD0iTWF4IgogICAgICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgdmFsdWU9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5tYXgudmFsdWV9fSIKICAgICAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgICAgICBpbnZhbGlkPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWF4LmludmFsaWR9fSIKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSIraW5maW5pdHkiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gc3RhdHVzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TdGF0dXM8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19zdGF0dXNlc11dIiBhcz0ic3RhdHVzIj4KICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e3N0YXR1cy5hbGxvd2VkfX0iIG9uLWNoYW5nZT0iX3F1ZXJ5U2VydmVyIj4KICAgICAgICAgICAgW1tzdGF0dXMuZGlzcGxheU5hbWVdXQogICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBzb3J0aW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Tb3J0aW5nPC9kaXY+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgIGxhYmVsPSJTb3J0IGJ5IgogICAgICAgICAgb24tc2VsZWN0ZWQtaXRlbS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICAgID4KICAgICAgICAgIDxwYXBlci1saXN0Ym94CiAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICBzZWxlY3RlZD0ie3tfc29ydEJ5SW5kZXh9fSIKICAgICAgICAgICAgb24tc2VsZWN0ZWQtaXRlbS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICA+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2hwYXJhbXNdXSIgYXM9ImhwYXJhbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+IFtbX2hwYXJhbU5hbWUoaHBhcmFtLmluZm8pXV0gPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19tZXRyaWNzXV0iIGFzPSJtZXRyaWMiPgogICAgICAgICAgICAgIDxwYXBlci1pdGVtPiBbW19tZXRyaWNOYW1lKG1ldHJpYy5pbmZvKV1dIDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgIGxhYmVsPSJEaXJlY3Rpb24iCiAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgICAgPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zb3J0RGlyZWN0aW9ufX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1pdGVtPkFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0+RGVzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIHBhZ2luZyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UGFnaW5nPC9kaXY+CiAgICAgICAgPGRpdj4KICAgICAgICAgIE51bWJlciBvZiBtYXRjaGluZyBzZXNzaW9uIGdyb3VwczogW1tfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHJdXQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50IHBhZ2UtbnVtYmVyLWlucHV0Ij4KICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICBsYWJlbD0iUGFnZSAjIgogICAgICAgICAgICB2YWx1ZT0ie3tfcGFnZU51bWJlcklucHV0LnZhbHVlfX0iCiAgICAgICAgICAgIGFsbG93ZWQtcGF0dGVybj0iWzAtOV0iCiAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgIGludmFsaWQ9IltbX3BhZ2VOdW1iZXJJbnB1dC5pbnZhbGlkXV0iCiAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgICAgPGRpdiBzbG90PSJzdWZmaXgiIGNsYXNzPSJwYWdlLXN1ZmZpeCI+LyBbW19wYWdlQ291bnRTdHJdXTwvZGl2PgogICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtZWxlbWVudCBwYWdlLXNpemUtaW5wdXQiPgogICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgIGxhYmVsPSJNYXggIyBvZiBzZXNzaW9uIGdyb3VwcyBwZXIgcGFnZToiCiAgICAgICAgICAgIHZhbHVlPSJ7e19wYWdlU2l6ZUlucHV0LnZhbHVlfX0iCiAgICAgICAgICAgIGFsbG93ZWQtcGF0dGVybj0iWzAtOV0iCiAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgIGludmFsaWQ9IltbX3BhZ2VTaXplSW5wdXQuaW52YWxpZF1dIgogICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICA+CiAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBkb3dubG9hZCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXNzaW9uR3JvdXBzUmVxdWVzdF1dIj4KICAgICAgICAgIERvd25sb2FkIGRhdGEgYXMKICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGlkPSJjc3ZMaW5rIgogICAgICAgICAgICAgIGRvd25sb2FkPSJocGFyYW1zX3RhYmxlLmNzdiIKICAgICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX3Nlc3Npb25Hcm91cHNSZXF1ZXN0LCBjb25maWd1cmF0aW9uKV1dIgogICAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgICAgPgogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGlkPSJqc29uTGluayIKICAgICAgICAgICAgICBkb3dubG9hZD0iaHBhcmFtc190YWJsZS5qc29uIgogICAgICAgICAgICAgIGhyZWY9IltbX2pzb25VcmwoX3Nlc3Npb25Hcm91cHNSZXF1ZXN0LCBjb25maWd1cmF0aW9uKV1dIgogICAgICAgICAgICAgID5KU09OPC9hCiAgICAgICAgICAgID4KICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBpZD0ibGF0ZXhMaW5rIgogICAgICAgICAgICAgIGRvd25sb2FkPSJocGFyYW1zX3RhYmxlLnRleCIKICAgICAgICAgICAgICBocmVmPSJbW19sYXRleFVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkxhVGVYPC9hCiAgICAgICAgICAgID4KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvaHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICA8c3R5bGU+CiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICB9CiAgICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICBtYXJnaW4tYm90dG9tOiA3cHg7CiAgICAgIH0KICAgICAgLmRpc2NyZXRlLXZhbHVlLWNoZWNrYm94LAogICAgICAubWV0cmljLWNoZWNrYm94LAogICAgICAuaHBhcmFtLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuZGlzY3JldGUtdmFsdWUtY2hlY2tib3ggewogICAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4OwogICAgICB9CiAgICAgIC5ocGFyYW0sCiAgICAgIC5tZXRyaWMgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5pbmxpbmUtZWxlbWVudCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiA0MCU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgIH0KICAgICAgLnBhZ2UtbnVtYmVyLWlucHV0IHsKICAgICAgICB3aWR0aDogMjAlOwogICAgICB9CiAgICAgIC5wYWdlLXNpemUtaW5wdXQgewogICAgICAgIHdpZHRoOiA2MCU7CiAgICAgIH0KICAgICAgdmFhZGluLXNwbGl0LWxheW91dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIHBhcGVyLWxpc3Rib3ggewogICAgICAgIG1heC1oZWlnaHQ6IDE1ZW07CiAgICAgIH0KICAgICAgLnBhZ2Utc3VmZml4IHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sb1h0LnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLG9YdC5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sb1h0LnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxvWHQucHJvdG90eXBlLCJkYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxvWHQucHJvdG90eXBlLCJkYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxvWHQucHJvdG90eXBlLCJfZXhwZXJpbWVudCIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sb1h0LnByb3RvdHlwZSwiX2hwYXJhbXMiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLG9YdC5wcm90b3R5cGUsIl9tZXRyaWNzIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sb1h0LnByb3RvdHlwZSwiX3N0YXR1c2VzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLG9YdC5wcm90b3R5cGUsIl9nZXRFeHBlcmltZW50UmVzb2x2ZWQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxvWHQucHJvdG90eXBlLCJfcmVzb2x2ZUdldEV4cGVyaW1lbnQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sb1h0LnByb3RvdHlwZSwiX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLG9YdC5wcm90b3R5cGUsIl9zb3J0QnlJbmRleCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxvWHQucHJvdG90eXBlLCJfc29ydERpcmVjdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxvWHQucHJvdG90eXBlLCJfcGFnZVNpemVJbnB1dCIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxvWHQucHJvdG90eXBlLCJfcGFnZU51bWJlcklucHV0Iix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLG9YdC5wcm90b3R5cGUsIl9wYWdlQ291bnRTdHIiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sb1h0LnByb3RvdHlwZSwiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLG9YdC5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBzUmVxdWVzdCIsdm9pZCAwKSx0KFthKCJiYWNrZW5kIiwiZXhwZXJpbWVudE5hbWUiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG9YdC5wcm90b3R5cGUsIl9jb21wdXRlRXhwZXJpbWVudEFuZFJlbGF0ZWRQcm9wcyIsbnVsbCksdChbYSgiX2hwYXJhbXMuKiIsIl9tZXRyaWNzLioiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG9YdC5wcm90b3R5cGUsIl91cGRhdGVDb25maWd1cmF0aW9uIixudWxsKSxvWHQ9dChbaSgidGYtaHBhcmFtcy1xdWVyeS1wYW5lIildLG9YdCk7bGV0IGFYdD1jbGFzcyBleHRlbmRzIHlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm9wdGlvbnM9bnVsbH1fY29uZmlndXJhdGlvbkNoYW5nZWQoKXtjb25zdCB0PXRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLGU9dGhpcy5jb25maWd1cmF0aW9uLnNjaGVtYSxuPXtjb2x1bW5zOnQuaHBhcmFtSW5mb3MubWFwKCgobixpKT0+KHtuYW1lOnhZdChuKSxpbmRleDppLGFic29sdXRlSW5kZXg6SVl0KGUsdCxpKSxzY2FsZTp0aGlzLl9pc051bWVyaWNDb2x1bW4oaSk/IkxJTkVBUiI6Ik5PTl9OVU1FUklDIn0pKSkuY29uY2F0KHQubWV0cmljSW5mb3MubWFwKCgobixpKT0+e2NvbnN0IHI9aSt0LmhwYXJhbUluZm9zLmxlbmd0aDtyZXR1cm57c2NhbGU6IkxJTkVBUiIsbmFtZTp3WXQobiksaW5kZXg6cixhYnNvbHV0ZUluZGV4OklZdChlLHQscil9fSkpKSxtaW5Db2xvcjoiIzAwMDBGRiIsbWF4Q29sb3I6IiNGRjAwMDAiLGNvbmZpZ3VyYXRpb246dGhpcy5jb25maWd1cmF0aW9ufTt0aGlzLnNldCgib3B0aW9ucyIsbiksRGkoKSx0aGlzLnNldCgib3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgiLHRoaXMuX2RlZmF1bHRDb2xvckJ5Q29sdW1uSW5kZXgoKSl9X3Vuc2VsZWN0RGlzYWJsZWRMb2dTY2FsZXMoKXtudWxsIT09dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKCh0PT57Y29uc3QgZT0ib3B0aW9ucy5jb2x1bW5zLiIrdC5pbmRleDt0aGlzLl9hbGxvd0xvZ1NjYWxlKHQpfHwiTE9HIiE9PXQuc2NhbGV8fHRoaXMuc2V0KGUrIi5zY2FsZSIsIkxJTkVBUiIpfSkpfV9hbGxvd0xvZ1NjYWxlKHQpe2lmKCF0aGlzLl9pc051bWVyaWNDb2x1bW4odC5pbmRleCl8fCF0aGlzLnNlc3Npb25Hcm91cHMpcmV0dXJuITE7Y29uc3RbZSxuXT16WXQodGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEsdGhpcy5zZXNzaW9uR3JvdXBzLHQuaW5kZXgpO3JldHVybiBlPjB8fG48MH1faXNOdW1lcmljQ29sdW1uKHQpe3JldHVybiB0Pj10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5sZW5ndGh8fCJEQVRBX1RZUEVfRkxPQVQ2NCI9PT10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvc1t0XS50eXBlfV9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCl7aWYodGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3MubGVuZ3RoPjApcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zLmxlbmd0aDtjb25zdCB0PXRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zLmZpbmRJbmRleCgodD0+IkRBVEFfVFlQRV9GTE9BVDY0Ij09PXQudHlwZSkpO3JldHVybi0xIT09dD90OnZvaWQgMH19O2FYdC50ZW1wbGF0ZT1fZWAKICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtcGFuZWwiPgogICAgICA8IS0tICdDb2xvciBieScgZHJvcCBkb3duIG1lbnUgLS0+CiAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgbGFiZWw9IkNvbG9yIGJ5IgogICAgICAgIGlkPSJjb2xvckJ5RHJvcERvd25NZW51IgogICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgID4KICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgc2VsZWN0ZWQ9Int7b3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXh9fSIKICAgICAgICAgIGlkPSJjb2xvckJ5TGlzdEJveCIKICAgICAgICA+CiAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgIGl0ZW1zPSJbW29wdGlvbnMuY29sdW1uc11dIgogICAgICAgICAgICBhcz0iY29sdW1uIgogICAgICAgICAgICBpZD0iY29sb3JCeUNvbHVtblRlbXBsYXRlIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItaXRlbSBkaXNhYmxlZD0iW1shX2lzTnVtZXJpY0NvbHVtbihjb2x1bW4uaW5kZXgpXV0iPgogICAgICAgICAgICAgIFtbY29sdW1uLm5hbWVdXQogICAgICAgICAgICA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgoKICAgICAgPCEtLSBDb2x1bW5zIHNjYWxlcyAtLT4KICAgICAgPGRpdiBjbGFzcz0iY29sdW1ucy1jb250YWluZXIiPgogICAgICAgIDwhLS0gU2NhbGUgb3B0aW9ucyBmb3IgZWFjaCBudW1lcmljIGZlYXR1cmUgLS0+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvcHRpb25zLmNvbHVtbnN9fSIgYXM9ImNvbHVtbiI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzTnVtZXJpY0NvbHVtbihjb2x1bW4uaW5kZXgpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbi10aXRsZSI+W1tjb2x1bW4ubmFtZV1dPC9kaXY+CiAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgICAgICAgICBjbGFzcz0ic2NhbGUtcmFkaW8tZ3JvdXAiCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPSJ7e2NvbHVtbi5zY2FsZX19IgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IkxJTkVBUiI+CiAgICAgICAgICAgICAgICAgICAgTGluZWFyCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8IS0tIFRoZSBpZCBoZXJlIGlzIHVzZWQgdG8gYWNjZXNzIHRoaXMgYnV0dG9uIGluIHVuaXQKICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cy4tLT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICAgICAgICAgIGlkPSJsb2dTY2FsZUJ1dHRvbl9bW2NvbHVtbi5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgbmFtZT0iTE9HIgogICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbWyFfYWxsb3dMb2dTY2FsZShjb2x1bW4sIHNlc3Npb25Hcm91cHMuKildXSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIExvZ2FyaXRobWljCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IlFVQU5USUxFIj4KICAgICAgICAgICAgICAgICAgICBRdWFudGlsZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5jb250cm9sLXBhbmVsIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQogICAgICAuY29sdW1uIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggZGFya2dyYXk7CiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5jb2x1bW4tdGl0bGUgewogICAgICAgIC8qIEZpdCBldmVyeSB0aXRsZSBpbiBvbmUgbGluZSBzbyB0aGUgcmFkaW8gYm94ZXMgYWxpZ24gdmVydGljYWxseS4gKi8KICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgIC5jb2x1bW5zLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgIC5zY2FsZS1yYWRpby1ncm91cCBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDJweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBwYXBlci1saXN0Ym94IHsKICAgICAgICBtYXgtaGVpZ2h0OiAxNWVtOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sYVh0LnByb3RvdHlwZSwiY29uZmlndXJhdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sYVh0LnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sYVh0LnByb3RvdHlwZSwib3B0aW9ucyIsdm9pZCAwKSx0KFthKCJjb25maWd1cmF0aW9uLioiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGFYdC5wcm90b3R5cGUsIl9jb25maWd1cmF0aW9uQ2hhbmdlZCIsbnVsbCksdChbYSgic2Vzc2lvbkdyb3Vwcy4qIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxhWHQucHJvdG90eXBlLCJfdW5zZWxlY3REaXNhYmxlZExvZ1NjYWxlcyIsbnVsbCksYVh0PXQoW2koInRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzIildLGFYdCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgICAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICAgKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQKICAgICAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICAgKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdAogICAgICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAgKi8KY29uc3Qgc1h0PSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZudWxsIT13aW5kb3cuY3VzdG9tRWxlbWVudHMmJnZvaWQgMCE9PXdpbmRvdy5jdXN0b21FbGVtZW50cy5wb2x5ZmlsbFdyYXBGbHVzaENhbGxiYWNrLGxYdD0odCxlLG49bnVsbCk9Pntmb3IoO2UhPT1uOyl7Y29uc3Qgbj1lLm5leHRTaWJsaW5nO3QucmVtb3ZlQ2hpbGQoZSksZT1ufX0sY1h0PWB7e2xpdC0ke1N0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgyKX19fWAsdVh0PWBceDNjIS0tJHtjWHR9LS1ceDNlYCxoWHQ9bmV3IFJlZ0V4cChgJHtjWHR9fCR7dVh0fWApLGRYdD0iJGxpdCQiO2NsYXNzIHBYdHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucGFydHM9W10sdGhpcy5lbGVtZW50PWU7Y29uc3Qgbj1bXSxpPVtdLHI9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihlLmNvbnRlbnQsMTMzLG51bGwsITEpO2xldCBvPTAsYT0tMSxzPTA7Y29uc3R7c3RyaW5nczpsLHZhbHVlczp7bGVuZ3RoOmN9fT10O2Zvcig7czxjOyl7Y29uc3QgdD1yLm5leHROb2RlKCk7aWYobnVsbCE9PXQpe2lmKGErKywxPT09dC5ub2RlVHlwZSl7aWYodC5oYXNBdHRyaWJ1dGVzKCkpe2NvbnN0IGU9dC5hdHRyaWJ1dGVzLHtsZW5ndGg6bn09ZTtsZXQgaT0wO2ZvcihsZXQgdD0wO3Q8bjt0KyspZlh0KGVbdF0ubmFtZSxkWHQpJiZpKys7Zm9yKDtpLS0gPjA7KXtjb25zdCBlPV9YdC5leGVjKGxbc10pWzJdLG49ZS50b0xvd2VyQ2FzZSgpK2RYdCxpPXQuZ2V0QXR0cmlidXRlKG4pO3QucmVtb3ZlQXR0cmlidXRlKG4pO2NvbnN0IHI9aS5zcGxpdChoWHQpO3RoaXMucGFydHMucHVzaCh7dHlwZToiYXR0cmlidXRlIixpbmRleDphLG5hbWU6ZSxzdHJpbmdzOnJ9KSxzKz1yLmxlbmd0aC0xfX0iVEVNUExBVEUiPT09dC50YWdOYW1lJiYoaS5wdXNoKHQpLHIuY3VycmVudE5vZGU9dC5jb250ZW50KX1lbHNlIGlmKDM9PT10Lm5vZGVUeXBlKXtjb25zdCBlPXQuZGF0YTtpZihlLmluZGV4T2YoY1h0KT49MCl7Y29uc3QgaT10LnBhcmVudE5vZGUscj1lLnNwbGl0KGhYdCksbz1yLmxlbmd0aC0xO2ZvcihsZXQgZT0wO2U8bztlKyspe2xldCBuLG89cltlXTtpZigiIj09PW8pbj1nWHQoKTtlbHNle2NvbnN0IHQ9X1h0LmV4ZWMobyk7bnVsbCE9PXQmJmZYdCh0WzJdLGRYdCkmJihvPW8uc2xpY2UoMCx0LmluZGV4KSt0WzFdK3RbMl0uc2xpY2UoMCwtZFh0Lmxlbmd0aCkrdFszXSksbj1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShvKX1pLmluc2VydEJlZm9yZShuLHQpLHRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6KythfSl9IiI9PT1yW29dPyhpLmluc2VydEJlZm9yZShnWHQoKSx0KSxuLnB1c2godCkpOnQuZGF0YT1yW29dLHMrPW99fWVsc2UgaWYoOD09PXQubm9kZVR5cGUpaWYodC5kYXRhPT09Y1h0KXtjb25zdCBlPXQucGFyZW50Tm9kZTtudWxsIT09dC5wcmV2aW91c1NpYmxpbmcmJmEhPT1vfHwoYSsrLGUuaW5zZXJ0QmVmb3JlKGdYdCgpLHQpKSxvPWEsdGhpcy5wYXJ0cy5wdXNoKHt0eXBlOiJub2RlIixpbmRleDphfSksbnVsbD09PXQubmV4dFNpYmxpbmc/dC5kYXRhPSIiOihuLnB1c2godCksYS0tKSxzKyt9ZWxzZXtsZXQgZT0tMTtmb3IoOy0xIT09KGU9dC5kYXRhLmluZGV4T2YoY1h0LGUrMSkpOyl0aGlzLnBhcnRzLnB1c2goe3R5cGU6Im5vZGUiLGluZGV4Oi0xfSkscysrfX1lbHNlIHIuY3VycmVudE5vZGU9aS5wb3AoKX1mb3IoY29uc3QgdCBvZiBuKXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX19Y29uc3QgZlh0PSh0LGUpPT57Y29uc3Qgbj10Lmxlbmd0aC1lLmxlbmd0aDtyZXR1cm4gbj49MCYmdC5zbGljZShuKT09PWV9LG1YdD10PT4tMSE9PXQuaW5kZXgsZ1h0PSgpPT5kb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKSxfWHQ9LyhbIFx4MDlceDBhXHgwY1x4MGRdKShbXlwwLVx4MUZceDdGLVx4OUYgIic+PS9dKykoWyBceDA5XHgwYVx4MGNceDBkXSo9WyBceDA5XHgwYVx4MGNceDBkXSooPzpbXiBceDA5XHgwYVx4MGNceDBkIidgPD49XSp8IlteIl0qfCdbXiddKikpJC87ZnVuY3Rpb24geVh0KHQsZSl7Y29uc3R7ZWxlbWVudDp7Y29udGVudDpufSxwYXJ0czppfT10LHI9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihuLDEzMyxudWxsLCExKTtsZXQgbz1iWHQoaSksYT1pW29dLHM9LTEsbD0wO2NvbnN0IGM9W107bGV0IHU9bnVsbDtmb3IoO3IubmV4dE5vZGUoKTspe3MrKztjb25zdCB0PXIuY3VycmVudE5vZGU7Zm9yKHQucHJldmlvdXNTaWJsaW5nPT09dSYmKHU9bnVsbCksZS5oYXModCkmJihjLnB1c2godCksbnVsbD09PXUmJih1PXQpKSxudWxsIT09dSYmbCsrO3ZvaWQgMCE9PWEmJmEuaW5kZXg9PT1zOylhLmluZGV4PW51bGwhPT11Py0xOmEuaW5kZXgtbCxvPWJYdChpLG8pLGE9aVtvXX1jLmZvckVhY2goKHQ9PnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSkpfWNvbnN0IHZYdD10PT57bGV0IGU9MTE9PT10Lm5vZGVUeXBlPzA6MTtjb25zdCBuPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIodCwxMzMsbnVsbCwhMSk7Zm9yKDtuLm5leHROb2RlKCk7KWUrKztyZXR1cm4gZX0sYlh0PSh0LGU9LTEpPT57Zm9yKGxldCBuPWUrMTtuPHQubGVuZ3RoO24rKylpZihtWHQodFtuXSkpcmV0dXJuIG47cmV0dXJuLTF9LHhYdD1uZXcgV2Vha01hcCx3WHQ9e30sU1h0PXt9OwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICAgKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgICAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgICAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICAgKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgICAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQKICAgICAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgICovCmNsYXNzIE1YdHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5fX3BhcnRzPVtdLHRoaXMudGVtcGxhdGU9dCx0aGlzLnByb2Nlc3Nvcj1lLHRoaXMub3B0aW9ucz1ufXVwZGF0ZSh0KXtsZXQgZT0wO2Zvcihjb25zdCBuIG9mIHRoaXMuX19wYXJ0cyl2b2lkIDAhPT1uJiZuLnNldFZhbHVlKHRbZV0pLGUrKztmb3IoY29uc3QgdCBvZiB0aGlzLl9fcGFydHMpdm9pZCAwIT09dCYmdC5jb21taXQoKX1fY2xvbmUoKXtjb25zdCB0PXNYdD90aGlzLnRlbXBsYXRlLmVsZW1lbnQuY29udGVudC5jbG9uZU5vZGUoITApOmRvY3VtZW50LmltcG9ydE5vZGUodGhpcy50ZW1wbGF0ZS5lbGVtZW50LmNvbnRlbnQsITApLGU9W10sbj10aGlzLnRlbXBsYXRlLnBhcnRzLGk9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcih0LDEzMyxudWxsLCExKTtsZXQgcixvPTAsYT0wLHM9aS5uZXh0Tm9kZSgpO2Zvcig7bzxuLmxlbmd0aDspaWYocj1uW29dLG1YdChyKSl7Zm9yKDthPHIuaW5kZXg7KWErKywiVEVNUExBVEUiPT09cy5ub2RlTmFtZSYmKGUucHVzaChzKSxpLmN1cnJlbnROb2RlPXMuY29udGVudCksbnVsbD09PShzPWkubmV4dE5vZGUoKSkmJihpLmN1cnJlbnROb2RlPWUucG9wKCkscz1pLm5leHROb2RlKCkpO2lmKCJub2RlIj09PXIudHlwZSl7Y29uc3QgdD10aGlzLnByb2Nlc3Nvci5oYW5kbGVUZXh0RXhwcmVzc2lvbih0aGlzLm9wdGlvbnMpO3QuaW5zZXJ0QWZ0ZXJOb2RlKHMucHJldmlvdXNTaWJsaW5nKSx0aGlzLl9fcGFydHMucHVzaCh0KX1lbHNlIHRoaXMuX19wYXJ0cy5wdXNoKC4uLnRoaXMucHJvY2Vzc29yLmhhbmRsZUF0dHJpYnV0ZUV4cHJlc3Npb25zKHMsci5uYW1lLHIuc3RyaW5ncyx0aGlzLm9wdGlvbnMpKTtvKyt9ZWxzZSB0aGlzLl9fcGFydHMucHVzaCh2b2lkIDApLG8rKztyZXR1cm4gc1h0JiYoZG9jdW1lbnQuYWRvcHROb2RlKHQpLGN1c3RvbUVsZW1lbnRzLnVwZ3JhZGUodCkpLHR9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICAgKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgICAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgICAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICAgKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgICAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQKICAgICAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgICovY29uc3QgRVh0PXdpbmRvdy50cnVzdGVkVHlwZXMmJnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImxpdC1odG1sIix7Y3JlYXRlSFRNTDp0PT50fSksVFh0PWAgJHtjWHR9IGA7Y2xhc3MgQ1h0e2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuX19wZW5kaW5nVmFsdWU9dm9pZCAwLHRoaXMub3B0aW9ucz10fWFwcGVuZEludG8odCl7dGhpcy5zdGFydE5vZGU9dC5hcHBlbmRDaGlsZChnWHQoKSksdGhpcy5lbmROb2RlPXQuYXBwZW5kQ2hpbGQoZ1h0KCkpfWluc2VydEFmdGVyTm9kZSh0KXt0aGlzLnN0YXJ0Tm9kZT10LHRoaXMuZW5kTm9kZT10Lm5leHRTaWJsaW5nfWFwcGVuZEludG9QYXJ0KHQpe3QuX19pbnNlcnQodGhpcy5zdGFydE5vZGU9Z1h0KCkpLHQuX19pbnNlcnQodGhpcy5lbmROb2RlPWdYdCgpKX1pbnNlcnRBZnRlclBhcnQodCl7dC5fX2luc2VydCh0aGlzLnN0YXJ0Tm9kZT1nWHQoKSksdGhpcy5lbmROb2RlPXQuZW5kTm9kZSx0LmVuZE5vZGU9dGhpcy5zdGFydE5vZGV9c2V0VmFsdWUodCl7dGhpcy5fX3BlbmRpbmdWYWx1ZT10fWNvbW1pdCgpe2lmKG51bGw9PT10aGlzLnN0YXJ0Tm9kZS5wYXJlbnROb2RlKXJldHVybjtmb3IoOyJmdW5jdGlvbiI9PXR5cGVvZih0PXRoaXMuX19wZW5kaW5nVmFsdWUpJiZ4WHQuaGFzKHQpOyl7Y29uc3QgdD10aGlzLl9fcGVuZGluZ1ZhbHVlO3RoaXMuX19wZW5kaW5nVmFsdWU9d1h0LHQodGhpcyl9dmFyIHQ7Y29uc3QgZT10aGlzLl9fcGVuZGluZ1ZhbHVlO2UhPT13WHQmJigodD0+bnVsbD09PXR8fCEoIm9iamVjdCI9PXR5cGVvZiB0fHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpKGUpP2UhPT10aGlzLnZhbHVlJiZ0aGlzLl9fY29tbWl0VGV4dChlKTplIGluc3RhbmNlb2YgY2xhc3N7Y29uc3RydWN0b3IodCxlLG4saSl7dGhpcy5zdHJpbmdzPXQsdGhpcy52YWx1ZXM9ZSx0aGlzLnR5cGU9bix0aGlzLnByb2Nlc3Nvcj1pfWdldEhUTUwoKXtjb25zdCB0PXRoaXMuc3RyaW5ncy5sZW5ndGgtMTtsZXQgZT0iIixuPSExO2ZvcihsZXQgaT0wO2k8dDtpKyspe2NvbnN0IHQ9dGhpcy5zdHJpbmdzW2ldLHI9dC5sYXN0SW5kZXhPZigiXHgzYyEtLSIpO249KHI+LTF8fG4pJiYtMT09PXQuaW5kZXhPZigiLS1ceDNlIixyKzEpO2NvbnN0IG89X1h0LmV4ZWModCk7ZSs9bnVsbD09PW8/dCsobj9UWHQ6dVh0KTp0LnN1YnN0cigwLG8uaW5kZXgpK29bMV0rb1syXStkWHQrb1szXStjWHR9cmV0dXJuIGUrPXRoaXMuc3RyaW5nc1t0XSxlfWdldFRlbXBsYXRlRWxlbWVudCgpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtsZXQgZT10aGlzLmdldEhUTUwoKTtyZXR1cm4gdm9pZCAwIT09RVh0JiYoZT1FWHQuY3JlYXRlSFRNTChlKSksdC5pbm5lckhUTUw9ZSx0fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICAgKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICAgKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgICAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdAogICAgICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgICAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICAgKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0CiAgICAgKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICAqLz90aGlzLl9fY29tbWl0VGVtcGxhdGVSZXN1bHQoZSk6ZSBpbnN0YW5jZW9mIE5vZGU/dGhpcy5fX2NvbW1pdE5vZGUoZSk6KHQ9PkFycmF5LmlzQXJyYXkodCl8fCEoIXR8fCF0W1N5bWJvbC5pdGVyYXRvcl0pKShlKT90aGlzLl9fY29tbWl0SXRlcmFibGUoZSk6ZT09PVNYdD8odGhpcy52YWx1ZT1TWHQsdGhpcy5jbGVhcigpKTp0aGlzLl9fY29tbWl0VGV4dChlKSl9X19pbnNlcnQodCl7dGhpcy5lbmROb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQsdGhpcy5lbmROb2RlKX1fX2NvbW1pdE5vZGUodCl7dGhpcy52YWx1ZSE9PXQmJih0aGlzLmNsZWFyKCksdGhpcy5fX2luc2VydCh0KSx0aGlzLnZhbHVlPXQpfV9fY29tbWl0VGV4dCh0KXtjb25zdCBlPXRoaXMuc3RhcnROb2RlLm5leHRTaWJsaW5nLG49InN0cmluZyI9PXR5cGVvZih0PW51bGw9PXQ/IiI6dCk/dDpTdHJpbmcodCk7ZT09PXRoaXMuZW5kTm9kZS5wcmV2aW91c1NpYmxpbmcmJjM9PT1lLm5vZGVUeXBlP2UuZGF0YT1uOnRoaXMuX19jb21taXROb2RlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pKSx0aGlzLnZhbHVlPXR9X19jb21taXRUZW1wbGF0ZVJlc3VsdCh0KXtjb25zdCBlPXRoaXMub3B0aW9ucy50ZW1wbGF0ZUZhY3RvcnkodCk7aWYodGhpcy52YWx1ZSBpbnN0YW5jZW9mIE1YdCYmdGhpcy52YWx1ZS50ZW1wbGF0ZT09PWUpdGhpcy52YWx1ZS51cGRhdGUodC52YWx1ZXMpO2Vsc2V7Y29uc3Qgbj1uZXcgTVh0KGUsdC5wcm9jZXNzb3IsdGhpcy5vcHRpb25zKSxpPW4uX2Nsb25lKCk7bi51cGRhdGUodC52YWx1ZXMpLHRoaXMuX19jb21taXROb2RlKGkpLHRoaXMudmFsdWU9bn19X19jb21taXRJdGVyYWJsZSh0KXtBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpfHwodGhpcy52YWx1ZT1bXSx0aGlzLmNsZWFyKCkpO2NvbnN0IGU9dGhpcy52YWx1ZTtsZXQgbixpPTA7Zm9yKGNvbnN0IHIgb2YgdCluPWVbaV0sdm9pZCAwPT09biYmKG49bmV3IENYdCh0aGlzLm9wdGlvbnMpLGUucHVzaChuKSwwPT09aT9uLmFwcGVuZEludG9QYXJ0KHRoaXMpOm4uaW5zZXJ0QWZ0ZXJQYXJ0KGVbaS0xXSkpLG4uc2V0VmFsdWUociksbi5jb21taXQoKSxpKys7aTxlLmxlbmd0aCYmKGUubGVuZ3RoPWksdGhpcy5jbGVhcihuJiZuLmVuZE5vZGUpKX1jbGVhcih0PXRoaXMuc3RhcnROb2RlKXtsWHQodGhpcy5zdGFydE5vZGUucGFyZW50Tm9kZSx0Lm5leHRTaWJsaW5nLHRoaXMuZW5kTm9kZSl9fWxldCBBWHQ9ITE7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgICAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICAgKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQKICAgICAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICAgKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdAogICAgICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAgKi8KZnVuY3Rpb24ga1h0KHQpe2xldCBlPUxYdC5nZXQodC50eXBlKTt2b2lkIDA9PT1lJiYoZT17c3RyaW5nc0FycmF5Om5ldyBXZWFrTWFwLGtleVN0cmluZzpuZXcgTWFwfSxMWHQuc2V0KHQudHlwZSxlKSk7bGV0IG49ZS5zdHJpbmdzQXJyYXkuZ2V0KHQuc3RyaW5ncyk7aWYodm9pZCAwIT09bilyZXR1cm4gbjtjb25zdCBpPXQuc3RyaW5ncy5qb2luKGNYdCk7cmV0dXJuIG49ZS5rZXlTdHJpbmcuZ2V0KGkpLHZvaWQgMD09PW4mJihuPW5ldyBwWHQodCx0LmdldFRlbXBsYXRlRWxlbWVudCgpKSxlLmtleVN0cmluZy5zZXQoaSxuKSksZS5zdHJpbmdzQXJyYXkuc2V0KHQuc3RyaW5ncyxuKSxufSgoKT0+e3RyeXtjb25zdCB0PXtnZXQgY2FwdHVyZSgpe3JldHVybiBBWHQ9ITAsITF9fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsdCx0KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsdCx0KX1jYXRjaCh0KXt9fSkoKTtjb25zdCBMWHQ9bmV3IE1hcCxQWHQ9bmV3IFdlYWtNYXA7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgICAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICAgKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQKICAgICAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICAgKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdAogICAgICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICAgKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICAgKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgICAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdAogICAgICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgICAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICAgKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0CiAgICAgKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICAqLwoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5saXRIdG1sVmVyc2lvbnN8fCh3aW5kb3cubGl0SHRtbFZlcnNpb25zPVtdKSkucHVzaCgiMS40LjEiKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAgICAgKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICAgKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgICAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdAogICAgICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICAgICAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAgICAgKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0CiAgICAgKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICAqL2NvbnN0IE5YdD0odCxlKT0+YCR7dH0tLSR7ZX1gO2xldCBJWHQ9ITA7dm9pZCAwPT09d2luZG93LlNoYWR5Q1NTP0lYdD0hMTp2b2lkIDA9PT13aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlRG9tJiYoY29uc29sZS53YXJuKCJJbmNvbXBhdGlibGUgU2hhZHlDU1MgdmVyc2lvbiBkZXRlY3RlZC4gUGxlYXNlIHVwZGF0ZSB0byBhdCBsZWFzdCBAd2ViY29tcG9uZW50cy93ZWJjb21wb25lbnRzanNAMi4wLjIgYW5kIEB3ZWJjb21wb25lbnRzL3NoYWR5Y3NzQDEuMy4xLiIpLElYdD0hMSk7Y29uc3QgUlh0PXQ9PmU9Pntjb25zdCBuPU5YdChlLnR5cGUsdCk7bGV0IGk9TFh0LmdldChuKTt2b2lkIDA9PT1pJiYoaT17c3RyaW5nc0FycmF5Om5ldyBXZWFrTWFwLGtleVN0cmluZzpuZXcgTWFwfSxMWHQuc2V0KG4saSkpO2xldCByPWkuc3RyaW5nc0FycmF5LmdldChlLnN0cmluZ3MpO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHI7Y29uc3Qgbz1lLnN0cmluZ3Muam9pbihjWHQpO2lmKHI9aS5rZXlTdHJpbmcuZ2V0KG8pLHZvaWQgMD09PXIpe2NvbnN0IG49ZS5nZXRUZW1wbGF0ZUVsZW1lbnQoKTtJWHQmJndpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGVEb20obix0KSxyPW5ldyBwWHQoZSxuKSxpLmtleVN0cmluZy5zZXQobyxyKX1yZXR1cm4gaS5zdHJpbmdzQXJyYXkuc2V0KGUuc3RyaW5ncyxyKSxyfSxPWHQ9WyJodG1sIiwic3ZnIl0selh0PW5ldyBTZXQ7d2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHk9KHQsZSk9PnQ7Y29uc3QgRFh0PXt0b0F0dHJpYnV0ZSh0LGUpe3N3aXRjaChlKXtjYXNlIEJvb2xlYW46cmV0dXJuIHQ/IiI6bnVsbDtjYXNlIE9iamVjdDpjYXNlIEFycmF5OnJldHVybiBudWxsPT10P3Q6SlNPTi5zdHJpbmdpZnkodCl9cmV0dXJuIHR9LGZyb21BdHRyaWJ1dGUodCxlKXtzd2l0Y2goZSl7Y2FzZSBCb29sZWFuOnJldHVybiBudWxsIT09dDtjYXNlIE51bWJlcjpyZXR1cm4gbnVsbD09PXQ/bnVsbDpOdW1iZXIodCk7Y2FzZSBPYmplY3Q6Y2FzZSBBcnJheTpyZXR1cm4gSlNPTi5wYXJzZSh0KX1yZXR1cm4gdH19LEJYdD0odCxlKT0+ZSE9PXQmJihlPT1lfHx0PT10KSxIWHQ9e2F0dHJpYnV0ZTohMCx0eXBlOlN0cmluZyxjb252ZXJ0ZXI6RFh0LHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDpCWHR9O2NsYXNzIEZYdCBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmluaXRpYWxpemUoKX1zdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3RoaXMuZmluYWxpemUoKTtjb25zdCB0PVtdO3JldHVybiB0aGlzLl9jbGFzc1Byb3BlcnRpZXMuZm9yRWFjaCgoKGUsbik9Pntjb25zdCBpPXRoaXMuX2F0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShuLGUpO3ZvaWQgMCE9PWkmJih0aGlzLl9hdHRyaWJ1dGVUb1Byb3BlcnR5TWFwLnNldChpLG4pLHQucHVzaChpKSl9KSksdH1zdGF0aWMgX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9jbGFzc1Byb3BlcnRpZXMiLHRoaXMpKSl7dGhpcy5fY2xhc3NQcm9wZXJ0aWVzPW5ldyBNYXA7Y29uc3QgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2NsYXNzUHJvcGVydGllczt2b2lkIDAhPT10JiZ0LmZvckVhY2goKCh0LGUpPT50aGlzLl9jbGFzc1Byb3BlcnRpZXMuc2V0KGUsdCkpKX19c3RhdGljIGNyZWF0ZVByb3BlcnR5KHQsZT1IWHQpe2lmKHRoaXMuX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpLHRoaXMuX2NsYXNzUHJvcGVydGllcy5zZXQodCxlKSxlLm5vQWNjZXNzb3J8fHRoaXMucHJvdG90eXBlLmhhc093blByb3BlcnR5KHQpKXJldHVybjtjb25zdCBuPSJzeW1ib2wiPT10eXBlb2YgdD9TeW1ib2woKTpgX18ke3R9YCxpPXRoaXMuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQsbixlKTt2b2lkIDAhPT1pJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wcm90b3R5cGUsdCxpKX1zdGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQsZSxuKXtyZXR1cm57Z2V0KCl7cmV0dXJuIHRoaXNbZV19LHNldChpKXtjb25zdCByPXRoaXNbdF07dGhpc1tlXT1pLHRoaXMucmVxdWVzdFVwZGF0ZUludGVybmFsKHQscixuKX0sY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9fXN0YXRpYyBnZXRQcm9wZXJ0eU9wdGlvbnModCl7cmV0dXJuIHRoaXMuX2NsYXNzUHJvcGVydGllcyYmdGhpcy5fY2xhc3NQcm9wZXJ0aWVzLmdldCh0KXx8SFh0fXN0YXRpYyBmaW5hbGl6ZSgpe2NvbnN0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO2lmKHQuaGFzT3duUHJvcGVydHkoImZpbmFsaXplZCIpfHx0LmZpbmFsaXplKCksdGhpcy5maW5hbGl6ZWQ9ITAsdGhpcy5fZW5zdXJlQ2xhc3NQcm9wZXJ0aWVzKCksdGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eU1hcD1uZXcgTWFwLHRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgicHJvcGVydGllcyIsdGhpcykpKXtjb25zdCB0PXRoaXMucHJvcGVydGllcyxlPVsuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KSwuLi4iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpOltdXTtmb3IoY29uc3QgbiBvZiBlKXRoaXMuY3JlYXRlUHJvcGVydHkobix0W25dKX19c3RhdGljIF9hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkodCxlKXtjb25zdCBuPWUuYXR0cmlidXRlO3JldHVybiExPT09bj92b2lkIDA6InN0cmluZyI9PXR5cGVvZiBuP246InN0cmluZyI9PXR5cGVvZiB0P3QudG9Mb3dlckNhc2UoKTp2b2lkIDB9c3RhdGljIF92YWx1ZUhhc0NoYW5nZWQodCxlLG49Qlh0KXtyZXR1cm4gbih0LGUpfXN0YXRpYyBfcHJvcGVydHlWYWx1ZUZyb21BdHRyaWJ1dGUodCxlKXtjb25zdCBuPWUuY29udmVydGVyfHxEWHQsaT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOm4uZnJvbUF0dHJpYnV0ZTtyZXR1cm4gaT9pKHQsZS50eXBlKTp0fXN0YXRpYyBfcHJvcGVydHlWYWx1ZVRvQXR0cmlidXRlKHQsZSl7aWYodm9pZCAwPT09ZS5yZWZsZWN0KXJldHVybjtjb25zdCBuPWUuY29udmVydGVyO3JldHVybihuJiZuLnRvQXR0cmlidXRlfHxEWHQudG9BdHRyaWJ1dGUpKHQsZS50eXBlKX1pbml0aWFsaXplKCl7dGhpcy5fdXBkYXRlU3RhdGU9MCx0aGlzLl91cGRhdGVQcm9taXNlPW5ldyBQcm9taXNlKCh0PT50aGlzLl9lbmFibGVVcGRhdGluZ1Jlc29sdmVyPXQpKSx0aGlzLl9jaGFuZ2VkUHJvcGVydGllcz1uZXcgTWFwLHRoaXMuX3NhdmVJbnN0YW5jZVByb3BlcnRpZXMoKSx0aGlzLnJlcXVlc3RVcGRhdGVJbnRlcm5hbCgpfV9zYXZlSW5zdGFuY2VQcm9wZXJ0aWVzKCl7dGhpcy5jb25zdHJ1Y3Rvci5fY2xhc3NQcm9wZXJ0aWVzLmZvckVhY2goKCh0LGUpPT57aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShlKSl7Y29uc3QgdD10aGlzW2VdO2RlbGV0ZSB0aGlzW2VdLHRoaXMuX2luc3RhbmNlUHJvcGVydGllc3x8KHRoaXMuX2luc3RhbmNlUHJvcGVydGllcz1uZXcgTWFwKSx0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXMuc2V0KGUsdCl9fSkpfV9hcHBseUluc3RhbmNlUHJvcGVydGllcygpe3RoaXMuX2luc3RhbmNlUHJvcGVydGllcy5mb3JFYWNoKCgodCxlKT0+dGhpc1tlXT10KSksdGhpcy5faW5zdGFuY2VQcm9wZXJ0aWVzPXZvaWQgMH1jb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuZW5hYmxlVXBkYXRpbmcoKX1lbmFibGVVcGRhdGluZygpe3ZvaWQgMCE9PXRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXImJih0aGlzLl9lbmFibGVVcGRhdGluZ1Jlc29sdmVyKCksdGhpcy5fZW5hYmxlVXBkYXRpbmdSZXNvbHZlcj12b2lkIDApfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7fWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LGUsbil7ZSE9PW4mJnRoaXMuX2F0dHJpYnV0ZVRvUHJvcGVydHkodCxuKX1fcHJvcGVydHlUb0F0dHJpYnV0ZSh0LGUsbj1IWHQpe2NvbnN0IGk9dGhpcy5jb25zdHJ1Y3RvcixyPWkuX2F0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eSh0LG4pO2lmKHZvaWQgMCE9PXIpe2NvbnN0IHQ9aS5fcHJvcGVydHlWYWx1ZVRvQXR0cmlidXRlKGUsbik7aWYodm9pZCAwPT09dClyZXR1cm47dGhpcy5fdXBkYXRlU3RhdGU9OHx0aGlzLl91cGRhdGVTdGF0ZSxudWxsPT10P3RoaXMucmVtb3ZlQXR0cmlidXRlKHIpOnRoaXMuc2V0QXR0cmlidXRlKHIsdCksdGhpcy5fdXBkYXRlU3RhdGU9LTkmdGhpcy5fdXBkYXRlU3RhdGV9fV9hdHRyaWJ1dGVUb1Byb3BlcnR5KHQsZSl7aWYoOCZ0aGlzLl91cGRhdGVTdGF0ZSlyZXR1cm47Y29uc3Qgbj10aGlzLmNvbnN0cnVjdG9yLGk9bi5fYXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5nZXQodCk7aWYodm9pZCAwIT09aSl7Y29uc3QgdD1uLmdldFByb3BlcnR5T3B0aW9ucyhpKTt0aGlzLl91cGRhdGVTdGF0ZT0xNnx0aGlzLl91cGRhdGVTdGF0ZSx0aGlzW2ldPW4uX3Byb3BlcnR5VmFsdWVGcm9tQXR0cmlidXRlKGUsdCksdGhpcy5fdXBkYXRlU3RhdGU9LTE3JnRoaXMuX3VwZGF0ZVN0YXRlfX1yZXF1ZXN0VXBkYXRlSW50ZXJuYWwodCxlLG4pe2xldCBpPSEwO2lmKHZvaWQgMCE9PXQpe2NvbnN0IHI9dGhpcy5jb25zdHJ1Y3RvcjtuPW58fHIuZ2V0UHJvcGVydHlPcHRpb25zKHQpLHIuX3ZhbHVlSGFzQ2hhbmdlZCh0aGlzW3RdLGUsbi5oYXNDaGFuZ2VkKT8odGhpcy5fY2hhbmdlZFByb3BlcnRpZXMuaGFzKHQpfHx0aGlzLl9jaGFuZ2VkUHJvcGVydGllcy5zZXQodCxlKSwhMCE9PW4ucmVmbGVjdHx8MTYmdGhpcy5fdXBkYXRlU3RhdGV8fCh2b2lkIDA9PT10aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcyYmKHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzPW5ldyBNYXApLHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzLnNldCh0LG4pKSk6aT0hMX0hdGhpcy5faGFzUmVxdWVzdGVkVXBkYXRlJiZpJiYodGhpcy5fdXBkYXRlUHJvbWlzZT10aGlzLl9lbnF1ZXVlVXBkYXRlKCkpfXJlcXVlc3RVcGRhdGUodCxlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwodCxlKSx0aGlzLnVwZGF0ZUNvbXBsZXRlfWFzeW5jIF9lbnF1ZXVlVXBkYXRlKCl7dGhpcy5fdXBkYXRlU3RhdGU9NHx0aGlzLl91cGRhdGVTdGF0ZTt0cnl7YXdhaXQgdGhpcy5fdXBkYXRlUHJvbWlzZX1jYXRjaCh0KXt9Y29uc3QgdD10aGlzLnBlcmZvcm1VcGRhdGUoKTtyZXR1cm4gbnVsbCE9dCYmYXdhaXQgdCwhdGhpcy5faGFzUmVxdWVzdGVkVXBkYXRlfWdldCBfaGFzUmVxdWVzdGVkVXBkYXRlKCl7cmV0dXJuIDQmdGhpcy5fdXBkYXRlU3RhdGV9Z2V0IGhhc1VwZGF0ZWQoKXtyZXR1cm4gMSZ0aGlzLl91cGRhdGVTdGF0ZX1wZXJmb3JtVXBkYXRlKCl7aWYoIXRoaXMuX2hhc1JlcXVlc3RlZFVwZGF0ZSlyZXR1cm47dGhpcy5faW5zdGFuY2VQcm9wZXJ0aWVzJiZ0aGlzLl9hcHBseUluc3RhbmNlUHJvcGVydGllcygpO2xldCB0PSExO2NvbnN0IGU9dGhpcy5fY2hhbmdlZFByb3BlcnRpZXM7dHJ5e3Q9dGhpcy5zaG91bGRVcGRhdGUoZSksdD90aGlzLnVwZGF0ZShlKTp0aGlzLl9tYXJrVXBkYXRlZCgpfWNhdGNoKGUpe3Rocm93IHQ9ITEsdGhpcy5fbWFya1VwZGF0ZWQoKSxlfXQmJigxJnRoaXMuX3VwZGF0ZVN0YXRlfHwodGhpcy5fdXBkYXRlU3RhdGU9MXx0aGlzLl91cGRhdGVTdGF0ZSx0aGlzLmZpcnN0VXBkYXRlZChlKSksdGhpcy51cGRhdGVkKGUpKX1fbWFya1VwZGF0ZWQoKXt0aGlzLl9jaGFuZ2VkUHJvcGVydGllcz1uZXcgTWFwLHRoaXMuX3VwZGF0ZVN0YXRlPS01JnRoaXMuX3VwZGF0ZVN0YXRlfWdldCB1cGRhdGVDb21wbGV0ZSgpe3JldHVybiB0aGlzLl9nZXRVcGRhdGVDb21wbGV0ZSgpfV9nZXRVcGRhdGVDb21wbGV0ZSgpe3JldHVybiB0aGlzLmdldFVwZGF0ZUNvbXBsZXRlKCl9Z2V0VXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5fdXBkYXRlUHJvbWlzZX1zaG91bGRVcGRhdGUodCl7cmV0dXJuITB9dXBkYXRlKHQpe3ZvaWQgMCE9PXRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzJiZ0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcy5zaXplPjAmJih0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcy5mb3JFYWNoKCgodCxlKT0+dGhpcy5fcHJvcGVydHlUb0F0dHJpYnV0ZShlLHRoaXNbZV0sdCkpKSx0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcz12b2lkIDApLHRoaXMuX21hcmtVcGRhdGVkKCl9dXBkYXRlZCh0KXt9Zmlyc3RVcGRhdGVkKHQpe319Rlh0LmZpbmFsaXplZD0hMDsKLyoqCiAgICBAbGljZW5zZQogICAgQ29weXJpZ2h0IChjKSAyMDE5IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogICAgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCiAgICBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CiAgICBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICAgICovCmNvbnN0IFZYdD13aW5kb3cuU2hhZG93Um9vdCYmKHZvaWQgMD09PXdpbmRvdy5TaGFkeUNTU3x8d2luZG93LlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdykmJiJhZG9wdGVkU3R5bGVTaGVldHMiaW4gRG9jdW1lbnQucHJvdG90eXBlJiYicmVwbGFjZSJpbiBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZSxVWHQ9U3ltYm9sKCk7Y2xhc3Mgalh0e2NvbnN0cnVjdG9yKHQsZSl7aWYoZSE9PVVYdCl0aHJvdyBuZXcgRXJyb3IoIkNTU1Jlc3VsdCBpcyBub3QgY29uc3RydWN0YWJsZS4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgIGluc3RlYWQuIik7dGhpcy5jc3NUZXh0PXR9Z2V0IHN0eWxlU2hlZXQoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fc3R5bGVTaGVldCYmKFZYdD8odGhpcy5fc3R5bGVTaGVldD1uZXcgQ1NTU3R5bGVTaGVldCx0aGlzLl9zdHlsZVNoZWV0LnJlcGxhY2VTeW5jKHRoaXMuY3NzVGV4dCkpOnRoaXMuX3N0eWxlU2hlZXQ9bnVsbCksdGhpcy5fc3R5bGVTaGVldH10b1N0cmluZygpe3JldHVybiB0aGlzLmNzc1RleHR9fWNvbnN0IEdYdD0odCwuLi5lKT0+e2NvbnN0IG49ZS5yZWR1Y2UoKChlLG4saSk9PmUrKHQ9PntpZih0IGluc3RhbmNlb2Ygalh0KXJldHVybiB0LmNzc1RleHQ7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0O3Rocm93IG5ldyBFcnJvcihgVmFsdWUgcGFzc2VkIHRvICdjc3MnIGZ1bmN0aW9uIG11c3QgYmUgYSAnY3NzJyBmdW5jdGlvbiByZXN1bHQ6ICR7dH0uIFVzZSAndW5zYWZlQ1NTJyB0byBwYXNzIG5vbi1saXRlcmFsIHZhbHVlcywgYnV0XG4gICAgICAgICAgICB0YWtlIGNhcmUgdG8gZW5zdXJlIHBhZ2Ugc2VjdXJpdHkuYCl9KShuKSt0W2krMV0pLHRbMF0pO3JldHVybiBuZXcgalh0KG4sVVh0KX07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICAgICAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogICAgICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAgICAgKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQKICAgICAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAgICAgKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogICAgICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdAogICAgICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAgKi8KKHdpbmRvdy5saXRFbGVtZW50VmVyc2lvbnN8fCh3aW5kb3cubGl0RWxlbWVudFZlcnNpb25zPVtdKSkucHVzaCgiMi41LjEiKTtjb25zdCBXWHQ9e307Y2xhc3MgcVh0IGV4dGVuZHMgRlh0e3N0YXRpYyBnZXRTdHlsZXMoKXtyZXR1cm4gdGhpcy5zdHlsZXN9c3RhdGljIF9nZXRVbmlxdWVTdHlsZXMoKXtpZih0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9zdHlsZXMiLHRoaXMpKSlyZXR1cm47Y29uc3QgdD10aGlzLmdldFN0eWxlcygpO2lmKEFycmF5LmlzQXJyYXkodCkpe2NvbnN0IGU9KHQsbik9PnQucmVkdWNlUmlnaHQoKCh0LG4pPT5BcnJheS5pc0FycmF5KG4pP2Uobix0KToodC5hZGQobiksdCkpLG4pLG49ZSh0LG5ldyBTZXQpLGk9W107bi5mb3JFYWNoKCh0PT5pLnVuc2hpZnQodCkpKSx0aGlzLl9zdHlsZXM9aX1lbHNlIHRoaXMuX3N0eWxlcz12b2lkIDA9PT10P1tdOlt0XTt0aGlzLl9zdHlsZXM9dGhpcy5fc3R5bGVzLm1hcCgodD0+dCBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQmJiFWWHQ/KHQ9Pm5ldyBqWHQoU3RyaW5nKHQpLFVYdCkpKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQuY3NzUnVsZXMpLnJlZHVjZSgoKHQsZSk9PnQrZS5jc3NUZXh0KSwiIikpOnQpKX1pbml0aWFsaXplKCl7c3VwZXIuaW5pdGlhbGl6ZSgpLHRoaXMuY29uc3RydWN0b3IuX2dldFVuaXF1ZVN0eWxlcygpLHRoaXMucmVuZGVyUm9vdD10aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSx3aW5kb3cuU2hhZG93Um9vdCYmdGhpcy5yZW5kZXJSb290IGluc3RhbmNlb2Ygd2luZG93LlNoYWRvd1Jvb3QmJnRoaXMuYWRvcHRTdHlsZXMoKX1jcmVhdGVSZW5kZXJSb290KCl7cmV0dXJuIHRoaXMuYXR0YWNoU2hhZG93KHRoaXMuY29uc3RydWN0b3Iuc2hhZG93Um9vdE9wdGlvbnMpfWFkb3B0U3R5bGVzKCl7Y29uc3QgdD10aGlzLmNvbnN0cnVjdG9yLl9zdHlsZXM7MCE9PXQubGVuZ3RoJiYodm9pZCAwPT09d2luZG93LlNoYWR5Q1NTfHx3aW5kb3cuU2hhZHlDU1MubmF0aXZlU2hhZG93P1ZYdD90aGlzLnJlbmRlclJvb3QuYWRvcHRlZFN0eWxlU2hlZXRzPXQubWFwKCh0PT50IGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldD90OnQuc3R5bGVTaGVldCkpOnRoaXMuX25lZWRzU2hpbUFkb3B0ZWRTdHlsZVNoZWV0cz0hMDp3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0ucHJlcGFyZUFkb3B0ZWRDc3NUZXh0KHQubWFwKCh0PT50LmNzc1RleHQpKSx0aGlzLmxvY2FsTmFtZSkpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhc1VwZGF0ZWQmJnZvaWQgMCE9PXdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLnN0eWxlRWxlbWVudCh0aGlzKX11cGRhdGUodCl7Y29uc3QgZT10aGlzLnJlbmRlcigpO3N1cGVyLnVwZGF0ZSh0KSxlIT09V1h0JiZ0aGlzLmNvbnN0cnVjdG9yLnJlbmRlcihlLHRoaXMucmVuZGVyUm9vdCx7c2NvcGVOYW1lOnRoaXMubG9jYWxOYW1lLGV2ZW50Q29udGV4dDp0aGlzfSksdGhpcy5fbmVlZHNTaGltQWRvcHRlZFN0eWxlU2hlZXRzJiYodGhpcy5fbmVlZHNTaGltQWRvcHRlZFN0eWxlU2hlZXRzPSExLHRoaXMuY29uc3RydWN0b3IuX3N0eWxlcy5mb3JFYWNoKCh0PT57Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2UudGV4dENvbnRlbnQ9dC5jc3NUZXh0LHRoaXMucmVuZGVyUm9vdC5hcHBlbmRDaGlsZChlKX0pKSl9cmVuZGVyKCl7cmV0dXJuIFdYdH19cVh0LmZpbmFsaXplZD0hMCxxWHQucmVuZGVyPSh0LGUsbik9PntpZighbnx8Im9iamVjdCIhPXR5cGVvZiBufHwhbi5zY29wZU5hbWUpdGhyb3cgbmV3IEVycm9yKCJUaGUgYHNjb3BlTmFtZWAgb3B0aW9uIGlzIHJlcXVpcmVkLiIpO2NvbnN0IGk9bi5zY29wZU5hbWUscj1QWHQuaGFzKGUpLG89SVh0JiYxMT09PWUubm9kZVR5cGUmJiEhZS5ob3N0LGE9byYmIXpYdC5oYXMoaSkscz1hP2RvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTplO2lmKCgodCxlLG4pPT57bGV0IGk9UFh0LmdldChlKTt2b2lkIDA9PT1pJiYobFh0KGUsZS5maXJzdENoaWxkKSxQWHQuc2V0KGUsaT1uZXcgQ1h0KE9iamVjdC5hc3NpZ24oe3RlbXBsYXRlRmFjdG9yeTprWHR9LG4pKSksaS5hcHBlbmRJbnRvKGUpKSxpLnNldFZhbHVlKHQpLGkuY29tbWl0KCl9KSh0LHMsT2JqZWN0LmFzc2lnbih7dGVtcGxhdGVGYWN0b3J5OlJYdChpKX0sbikpLGEpe2NvbnN0IHQ9UFh0LmdldChzKTtQWHQuZGVsZXRlKHMpLCgodCxlLG4pPT57elh0LmFkZCh0KTtjb25zdCBpPW4/bi5lbGVtZW50OmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIikscj1lLnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIikse2xlbmd0aDpvfT1yO2lmKDA9PT1vKXJldHVybiB2b2lkIHdpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGVTdHlsZXMoaSx0KTtjb25zdCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Zm9yKGxldCB0PTA7dDxvO3QrKyl7Y29uc3QgZT1yW3RdO2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSxhLnRleHRDb250ZW50Kz1lLnRleHRDb250ZW50fSh0PT57T1h0LmZvckVhY2goKGU9Pntjb25zdCBuPUxYdC5nZXQoTlh0KGUsdCkpO3ZvaWQgMCE9PW4mJm4ua2V5U3RyaW5nLmZvckVhY2goKHQ9Pntjb25zdHtlbGVtZW50Ontjb250ZW50OmV9fT10LG49bmV3IFNldDtBcnJheS5mcm9tKGUucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKSkuZm9yRWFjaCgodD0+e24uYWRkKHQpfSkpLHlYdCh0LG4pfSkpfSkpfSkodCk7Y29uc3Qgcz1pLmNvbnRlbnQ7bj8oZnVuY3Rpb24gbCh0LGUsbj1udWxsKXtjb25zdHtlbGVtZW50Ontjb250ZW50Oml9LHBhcnRzOnJ9PXQ7aWYobnVsbD09bilyZXR1cm4gdm9pZCBpLmFwcGVuZENoaWxkKGUpO2NvbnN0IG89ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihpLDEzMyxudWxsLCExKTtsZXQgYT1iWHQocikscz0wLGw9LTE7Zm9yKDtvLm5leHROb2RlKCk7KWZvcihsKyssby5jdXJyZW50Tm9kZT09PW4mJihzPXZYdChlKSxuLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsbikpOy0xIT09YSYmclthXS5pbmRleD09PWw7KXtpZihzPjApe2Zvcig7LTEhPT1hOylyW2FdLmluZGV4Kz1zLGE9Ylh0KHIsYSk7cmV0dXJufWE9Ylh0KHIsYSl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAgICAgKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICAgICAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICAgICAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogICAgICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0CiAgICAgKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgICAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQKICAgICAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogICAgICovKShuLGEscy5maXJzdENoaWxkKTpzLmluc2VydEJlZm9yZShhLHMuZmlyc3RDaGlsZCksd2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZVN0eWxlcyhpLHQpO2NvbnN0IGM9cy5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpO2lmKHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3cmJm51bGwhPT1jKWUuaW5zZXJ0QmVmb3JlKGMuY2xvbmVOb2RlKCEwKSxlLmZpcnN0Q2hpbGQpO2Vsc2UgaWYobil7cy5pbnNlcnRCZWZvcmUoYSxzLmZpcnN0Q2hpbGQpO2NvbnN0IHQ9bmV3IFNldDt0LmFkZChhKSx5WHQobix0KX19KShpLHMsdC52YWx1ZSBpbnN0YW5jZW9mIE1YdD90LnZhbHVlLnRlbXBsYXRlOnZvaWQgMCksbFh0KGUsZS5maXJzdENoaWxkKSxlLmFwcGVuZENoaWxkKHMpLFBYdC5zZXQoZSx0KX0hciYmbyYmd2luZG93LlNoYWR5Q1NTLnN0eWxlRWxlbWVudChlLmhvc3QpfSxxWHQuc2hhZG93Um9vdE9wdGlvbnM9e21vZGU6Im9wZW4ifTtsZXQgWVh0PTA7Y29uc3QgWFh0PXt9LCRYdD0odCxlLG4pPT57Y29uc3QgaT1uJiZuLm1vZHVsZUlkfHwiY3VzdG9tLXN0eWxlLW1vZHVsZS0iK1lYdCsrO0FycmF5LmlzQXJyYXkoZSl8fChlPWU/W2VdOltdKSxlLmZvckVhY2goKHQ9PntpZighKHQgaW5zdGFuY2VvZiBqWHQpKXRocm93IG5ldyBFcnJvcigiQW4gaXRlbSBpbiBzdHlsZXMgaXMgbm90IG9mIHR5cGUgQ1NTUmVzdWx0LiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AuIik7aWYoIVhYdFt0XSl7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkb20tbW9kdWxlIik7ZS5pbm5lckhUTUw9YFxuICAgICAgICA8dGVtcGxhdGU+XG4gICAgICAgICAgPHN0eWxlPiR7dC50b1N0cmluZygpfTwvc3R5bGU+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICBgO2NvbnN0IG49ImN1c3RvbS1zdHlsZS1tb2R1bGUtIitZWHQrKztlLnJlZ2lzdGVyKG4pLFhYdFt0XT1ufX0pKTtjb25zdCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKTtpZih0KXtjb25zdCBlPWN1c3RvbUVsZW1lbnRzLmdldCh0KTtlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiX19maW5hbGl6ZWQiKSYmY29uc29sZS53YXJuKGBUaGUgY3VzdG9tIGVsZW1lbnQgZGVmaW5pdGlvbiBmb3IgIiR7dH0iXG4gICAgICB3YXMgZmluYWxpemVkIGJlZm9yZSBhIHN0eWxlIG1vZHVsZSB3YXMgcmVnaXN0ZXJlZC5cbiAgICAgIE1ha2Ugc3VyZSB0byBhZGQgY29tcG9uZW50IHNwZWNpZmljIHN0eWxlIG1vZHVsZXMgYmVmb3JlXG4gICAgICBpbXBvcnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgY3VzdG9tIGVsZW1lbnQuYCksci5zZXRBdHRyaWJ1dGUoInRoZW1lLWZvciIsdCl9ci5pbm5lckhUTUw9YFxuICAgIDx0ZW1wbGF0ZT5cbiAgICAgICR7KG4mJm4uaW5jbHVkZXx8W10pLm1hcCgodD0+YDxzdHlsZSBpbmNsdWRlPSR7dH0+PC9zdHlsZT5gKSl9XG4gICAgICAke2UubWFwKCh0PT5gPHN0eWxlIGluY2x1ZGU9JHtYWHRbdF19Pjwvc3R5bGU+YCkpfVxuICAgIDwvdGVtcGxhdGU+XG4gIGAsci5yZWdpc3RlcihpKX07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBWYWFkaW4gTHRkLgogICAgICogVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgICovCmNsYXNzIEtYdCBleHRlbmRzIEhUTUxFbGVtZW50e3N0YXRpYyBnZXQgdmVyc2lvbigpe3JldHVybiIyMC4wLjIifX1jdXN0b21FbGVtZW50cy5kZWZpbmUoInZhYWRpbi1sdW1vLXN0eWxlcyIsS1h0KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IChjKSAyMDIxIFZhYWRpbiBMdGQuCiAgICAgKiBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAgKi8KY29uc3QgWlh0PUdYdGAKICA6aG9zdCB7CiAgICAvKiBCYXNlIChiYWNrZ3JvdW5kKSAqLwogICAgLS1sdW1vLWJhc2UtY29sb3I6ICNmZmY7CgogICAgLyogVGludCAqLwogICAgLS1sdW1vLXRpbnQtNXBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC4zKTsKICAgIC0tbHVtby10aW50LTEwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjM3KTsKICAgIC0tbHVtby10aW50LTIwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjQ0KTsKICAgIC0tbHVtby10aW50LTMwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjUpOwogICAgLS1sdW1vLXRpbnQtNDBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNTcpOwogICAgLS1sdW1vLXRpbnQtNTBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNjQpOwogICAgLS1sdW1vLXRpbnQtNjBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNyk7CiAgICAtLWx1bW8tdGludC03MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC43Nyk7CiAgICAtLWx1bW8tdGludC04MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC44NCk7CiAgICAtLWx1bW8tdGludC05MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC45KTsKICAgIC0tbHVtby10aW50OiAjZmZmOwoKICAgIC8qIFNoYWRlICovCiAgICAtLWx1bW8tc2hhZGUtNXBjdDogaHNsYSgyMTQsIDYxJSwgMjUlLCAwLjA1KTsKICAgIC0tbHVtby1zaGFkZS0xMHBjdDogaHNsYSgyMTQsIDU3JSwgMjQlLCAwLjEpOwogICAgLS1sdW1vLXNoYWRlLTIwcGN0OiBoc2xhKDIxNCwgNTMlLCAyMyUsIDAuMTYpOwogICAgLS1sdW1vLXNoYWRlLTMwcGN0OiBoc2xhKDIxNCwgNTAlLCAyMiUsIDAuMjYpOwogICAgLS1sdW1vLXNoYWRlLTQwcGN0OiBoc2xhKDIxNCwgNDclLCAyMSUsIDAuMzgpOwogICAgLS1sdW1vLXNoYWRlLTUwcGN0OiBoc2xhKDIxNCwgNDUlLCAyMCUsIDAuNSk7CiAgICAtLWx1bW8tc2hhZGUtNjBwY3Q6IGhzbGEoMjE0LCA0MyUsIDE5JSwgMC42MSk7CiAgICAtLWx1bW8tc2hhZGUtNzBwY3Q6IGhzbGEoMjE0LCA0MiUsIDE4JSwgMC43Mik7CiAgICAtLWx1bW8tc2hhZGUtODBwY3Q6IGhzbGEoMjE0LCA0MSUsIDE3JSwgMC44Myk7CiAgICAtLWx1bW8tc2hhZGUtOTBwY3Q6IGhzbGEoMjE0LCA0MCUsIDE2JSwgMC45NCk7CiAgICAtLWx1bW8tc2hhZGU6IGhzbCgyMTQsIDM1JSwgMTUlKTsKCiAgICAvKiBDb250cmFzdCAqLwogICAgLS1sdW1vLWNvbnRyYXN0LTVwY3Q6IHZhcigtLWx1bW8tc2hhZGUtNXBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMTBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtMTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTIwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC0zMHBjdDogdmFyKC0tbHVtby1zaGFkZS0zMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNDBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtNDBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTUwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTUwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC02MHBjdDogdmFyKC0tbHVtby1zaGFkZS02MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNzBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtNzBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTgwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTgwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC05MHBjdDogdmFyKC0tbHVtby1zaGFkZS05MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3Q6IHZhcigtLWx1bW8tc2hhZGUpOwoKICAgIC8qIFRleHQgKi8KICAgIC0tbHVtby1oZWFkZXItdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdCk7CiAgICAtLWx1bW8tYm9keS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTkwcGN0KTsKICAgIC0tbHVtby1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC03MHBjdCk7CiAgICAtLWx1bW8tdGVydGlhcnktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC01MHBjdCk7CiAgICAtLWx1bW8tZGlzYWJsZWQtdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CgogICAgLyogUHJpbWFyeSAqLwogICAgLS1sdW1vLXByaW1hcnktY29sb3I6IGhzbCgyMTQsIDkwJSwgNTIlKTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0OiBoc2xhKDIxNCwgOTAlLCA1MiUsIDAuNSk7CiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvci0xMHBjdDogaHNsYSgyMTQsIDkwJSwgNTIlLCAwLjEpOwogICAgLS1sdW1vLXByaW1hcnktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yKTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbnRyYXN0LWNvbG9yOiAjZmZmOwoKICAgIC8qIEVycm9yICovCiAgICAtLWx1bW8tZXJyb3ItY29sb3I6IGhzbCgzLCAxMDAlLCA2MSUpOwogICAgLS1sdW1vLWVycm9yLWNvbG9yLTUwcGN0OiBoc2xhKDMsIDEwMCUsIDYwJSwgMC41KTsKICAgIC0tbHVtby1lcnJvci1jb2xvci0xMHBjdDogaHNsYSgzLCAxMDAlLCA2MCUsIDAuMSk7CiAgICAtLWx1bW8tZXJyb3ItdGV4dC1jb2xvcjogaHNsKDMsIDkyJSwgNTMlKTsKICAgIC0tbHVtby1lcnJvci1jb250cmFzdC1jb2xvcjogI2ZmZjsKCiAgICAvKiBTdWNjZXNzICovCiAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvcjogaHNsKDE0NSwgODAlLCA0MiUpOyAvKiBoc2woMTQ0LDgyJSwzNyUpOyAqLwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItNTBwY3Q6IGhzbGEoMTQ1LCA3NiUsIDQ0JSwgMC41NSk7CiAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvci0xMHBjdDogaHNsYSgxNDUsIDc2JSwgNDQlLCAwLjEyKTsKICAgIC0tbHVtby1zdWNjZXNzLXRleHQtY29sb3I6IGhzbCgxNDUsIDEwMCUsIDMyJSk7CiAgICAtLWx1bW8tc3VjY2Vzcy1jb250cmFzdC1jb2xvcjogI2ZmZjsKICB9CmAsSlh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7Slh0LmlubmVySFRNTD1gPHN0eWxlPiR7Wlh0LnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoSlh0LmNvbnRlbnQpLCRYdCgiIixHWHRgCiAgW3RoZW1lfj0nZGFyayddIHsKICAgIC8qIEJhc2UgKGJhY2tncm91bmQpICovCiAgICAtLWx1bW8tYmFzZS1jb2xvcjogaHNsKDIxNCwgMzUlLCAyMSUpOwoKICAgIC8qIFRpbnQgKi8KICAgIC0tbHVtby10aW50LTVwY3Q6IGhzbGEoMjE0LCA2NSUsIDg1JSwgMC4wNik7CiAgICAtLWx1bW8tdGludC0xMHBjdDogaHNsYSgyMTQsIDYwJSwgODAlLCAwLjE0KTsKICAgIC0tbHVtby10aW50LTIwcGN0OiBoc2xhKDIxNCwgNjQlLCA4MiUsIDAuMjMpOwogICAgLS1sdW1vLXRpbnQtMzBwY3Q6IGhzbGEoMjE0LCA2OSUsIDg0JSwgMC4zMik7CiAgICAtLWx1bW8tdGludC00MHBjdDogaHNsYSgyMTQsIDczJSwgODYlLCAwLjQxKTsKICAgIC0tbHVtby10aW50LTUwcGN0OiBoc2xhKDIxNCwgNzglLCA4OCUsIDAuNSk7CiAgICAtLWx1bW8tdGludC02MHBjdDogaHNsYSgyMTQsIDgyJSwgOTAlLCAwLjYpOwogICAgLS1sdW1vLXRpbnQtNzBwY3Q6IGhzbGEoMjE0LCA4NyUsIDkyJSwgMC43KTsKICAgIC0tbHVtby10aW50LTgwcGN0OiBoc2xhKDIxNCwgOTElLCA5NCUsIDAuOCk7CiAgICAtLWx1bW8tdGludC05MHBjdDogaHNsYSgyMTQsIDk2JSwgOTYlLCAwLjkpOwogICAgLS1sdW1vLXRpbnQ6IGhzbCgyMTQsIDEwMCUsIDk4JSk7CgogICAgLyogU2hhZGUgKi8KICAgIC0tbHVtby1zaGFkZS01cGN0OiBoc2xhKDIxNCwgMCUsIDAlLCAwLjA3KTsKICAgIC0tbHVtby1zaGFkZS0xMHBjdDogaHNsYSgyMTQsIDQlLCAyJSwgMC4xNSk7CiAgICAtLWx1bW8tc2hhZGUtMjBwY3Q6IGhzbGEoMjE0LCA4JSwgNCUsIDAuMjMpOwogICAgLS1sdW1vLXNoYWRlLTMwcGN0OiBoc2xhKDIxNCwgMTIlLCA2JSwgMC4zMik7CiAgICAtLWx1bW8tc2hhZGUtNDBwY3Q6IGhzbGEoMjE0LCAxNiUsIDglLCAwLjQxKTsKICAgIC0tbHVtby1zaGFkZS01MHBjdDogaHNsYSgyMTQsIDIwJSwgMTAlLCAwLjUpOwogICAgLS1sdW1vLXNoYWRlLTYwcGN0OiBoc2xhKDIxNCwgMjQlLCAxMiUsIDAuNik7CiAgICAtLWx1bW8tc2hhZGUtNzBwY3Q6IGhzbGEoMjE0LCAyOCUsIDEzJSwgMC43KTsKICAgIC0tbHVtby1zaGFkZS04MHBjdDogaHNsYSgyMTQsIDMyJSwgMTMlLCAwLjgpOwogICAgLS1sdW1vLXNoYWRlLTkwcGN0OiBoc2xhKDIxNCwgMzMlLCAxMyUsIDAuOSk7CiAgICAtLWx1bW8tc2hhZGU6IGhzbCgyMTQsIDMzJSwgMTMlKTsKCiAgICAvKiBDb250cmFzdCAqLwogICAgLS1sdW1vLWNvbnRyYXN0LTVwY3Q6IHZhcigtLWx1bW8tdGludC01cGN0KTsKICAgIC0tbHVtby1jb250cmFzdC0xMHBjdDogdmFyKC0tbHVtby10aW50LTEwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC0yMHBjdDogdmFyKC0tbHVtby10aW50LTIwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC0zMHBjdDogdmFyKC0tbHVtby10aW50LTMwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC00MHBjdDogdmFyKC0tbHVtby10aW50LTQwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC01MHBjdDogdmFyKC0tbHVtby10aW50LTUwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC02MHBjdDogdmFyKC0tbHVtby10aW50LTYwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC03MHBjdDogdmFyKC0tbHVtby10aW50LTcwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC04MHBjdDogdmFyKC0tbHVtby10aW50LTgwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC05MHBjdDogdmFyKC0tbHVtby10aW50LTkwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdDogdmFyKC0tbHVtby10aW50KTsKCiAgICAvKiBUZXh0ICovCiAgICAtLWx1bW8taGVhZGVyLXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QpOwogICAgLS1sdW1vLWJvZHktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC05MHBjdCk7CiAgICAtLWx1bW8tc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNzBwY3QpOwogICAgLS1sdW1vLXRlcnRpYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNTBwY3QpOwogICAgLS1sdW1vLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwoKICAgIC8qIFByaW1hcnkgKi8KICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yOiBoc2woMjE0LCA4NiUsIDU1JSk7CiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdDogaHNsYSgyMTQsIDg2JSwgNTUlLCAwLjUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItMTBwY3Q6IGhzbGEoMjE0LCA5MCUsIDYzJSwgMC4xKTsKICAgIC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3I6IGhzbCgyMTQsIDEwMCUsIDcwJSk7CiAgICAtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcjogI2ZmZjsKCiAgICAvKiBFcnJvciAqLwogICAgLS1sdW1vLWVycm9yLWNvbG9yOiBoc2woMywgOTAlLCA2MyUpOwogICAgLS1sdW1vLWVycm9yLWNvbG9yLTUwcGN0OiBoc2xhKDMsIDkwJSwgNjMlLCAwLjUpOwogICAgLS1sdW1vLWVycm9yLWNvbG9yLTEwcGN0OiBoc2xhKDMsIDkwJSwgNjMlLCAwLjEpOwogICAgLS1sdW1vLWVycm9yLXRleHQtY29sb3I6IGhzbCgzLCAxMDAlLCA2NyUpOwoKICAgIC8qIFN1Y2Nlc3MgKi8KICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yOiBoc2woMTQ1LCA2NSUsIDQyJSk7CiAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvci01MHBjdDogaHNsYSgxNDUsIDY1JSwgNDIlLCAwLjUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItMTBwY3Q6IGhzbGEoMTQ1LCA2NSUsIDQyJSwgMC4xKTsKICAgIC0tbHVtby1zdWNjZXNzLXRleHQtY29sb3I6IGhzbCgxNDUsIDg1JSwgNDclKTsKICB9CgogIGh0bWwgewogICAgY29sb3I6IHZhcigtLWx1bW8tYm9keS10ZXh0LWNvbG9yKTsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgfQoKICBbdGhlbWV+PSdkYXJrJ10gewogICAgY29sb3I6IHZhcigtLWx1bW8tYm9keS10ZXh0LWNvbG9yKTsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgfQoKICBoMSwKICBoMiwKICBoMywKICBoNCwKICBoNSwKICBoNiB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1oZWFkZXItdGV4dC1jb2xvcik7CiAgfQoKICBhIHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktdGV4dC1jb2xvcik7CiAgfQoKICBibG9ja3F1b3RlIHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICB9CgogIGNvZGUsCiAgcHJlIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMTBwY3QpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pOwogIH0KYCx7bW9kdWxlSWQ6Imx1bW8tY29sb3IifSksJFh0KCIiLEdYdGAKICA6aG9zdCB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1ib2R5LXRleHQtY29sb3IpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpICFpbXBvcnRhbnQ7CiAgfQpgLHttb2R1bGVJZDoibHVtby1jb2xvci1sZWdhY3kiLGluY2x1ZGU6WyJsdW1vLWNvbG9yIl19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IChjKSAyMDIxIFZhYWRpbiBMdGQuCiAgICAgKiBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAgKi8KY29uc3QgUVh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7UVh0LmlubmVySFRNTD0nXG4gIDxzdHlsZT5cbiAgICBAZm9udC1mYWNlIHtcbiAgICAgIGZvbnQtZmFtaWx5OiBcJ2x1bW8taWNvbnNcJztcbiAgICAgIHNyYzogdXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFCRWNBQXNBQUFBQUlpd0FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCSFUxVkNBQUFCQ0FBQUFEc0FBQUJVSUlzbGVrOVRMeklBQUFGRUFBQUFRd0FBQUZaQUlVdUtZMjFoY0FBQUFZZ0FBQUQ0QUFBRHJzQ1U4ZDVuYkhsbUFBQUNnQUFBQzJNQUFCZDRoOVRvMldobFlXUUFBQTNrQUFBQU1BQUFBRFphLzZTc2FHaGxZUUFBRGhRQUFBQWRBQUFBSkFicEEzNW9iWFI0QUFBT05BQUFBQkFBQUFDc3BCQUFBR3h2WTJFQUFBNUVBQUFBV0FBQUFGaDU1SUFzYldGNGNBQUFEcHdBQUFBZkFBQUFJQUZLQVhCdVlXMWxBQUFPdkFBQUFURUFBQUl1VVVKWkNIQnZjM1FBQUEvd0FBQUJLd0FBQWVsbThTelZlSnhqWUdSZ1lPQmlNR0N3WTJCeWNmTUpZZURMU1N6Slk1QmlZR0dBQUpBOE1wc3hKek05a1lFRHhnUEtzWUJwRGlCbWc0Z0NBQ1k3QlVnQWVKeGpZR1MreURpQmdaV0JnYW1LYVE4REEwTVBoR1o4d0dESXlBUVVaV0JsWnNBS0F0SmNVeGdjWGpHKzBtSU8rcC9GRU1VY3hEQU5LTXdJa2dNQUJuOE1MUUI0bk8zU1dXNkRNQUJGMFV0d0NFbklQTS96aExLOExxaGZYUnliU1AxNFhVWXRIVjloR1lRd1FCTklvM2NVSVBraFFlTTdyaWIxZWtxblhnOTgxWHVDMXF2eTg0bHpvamxlaDNwdXhMMGhQakdqUlU0NzN0ZWxvRWVmQVVOR2pKa3daY2FjQlV0V3JObXdaY2VlQTBkT25MbHc1Y2FkQjA5ZWxQR2hHZitqME5USS82NUtmWGVyVDZKaHFLbnBSS3RnT3B1cWFUcnRLalBVbHFIbWh0bzIxSTdwTDZpNmhscVkzcTdxR1dyZlVBZUdPalRVa2FHT0RYVmlxRk5EblJucTNGQVhocm8wMUpXaHJnMTFZNmhiUTkwWjZ0NVFENFo2Tk5TVG9aNE45V0tvVjBPOUdlcmRVQitHK2pUVWw2R1dSdmtMMjRCa0VYaWN0Vmg5YkZ2VkZiL254dmJ6KzdSZi9ONnpIY2QyYkNmUCtXZ2MxWjlOMGpwTm5FTDZrYlJWUzZIQTJoUVlHaDlUR1IxQ2JDcWEyclhyV09rUUUvc0hOSmdtdFp2b1ZOWnFFMUIxRE5IeHpUUXhDZWhVVFlpSlRReUVOdWkwcVNMZXpyM1BkdXlRZmdtUldPZmRlOCs5NTUxejdybm4vTzRqTG9KL2JSUDBVYUtRTUxGSmpwQkF2cGhMWkMzRGswb2s3V0J6UjIvdXBKczdSeXcvbmZGYmxuL3V1Ti9hcEN2d3JLTHJTdlVxUnVmYm01cG4wZnMwdzRnWXhuR1ZQNnFIbk80YldpRFFHUWd3dFM2bG0zbEIzUW9YMU0ydndFbXV6aXJGMzl5K0VzMitESjhkMXBreXFCSXFvemUzRDErWno0RHJGb2F6eEk4ZFd3TXJEbFoyRE1xUUFSOUFST3NKVSsyY21sVFBhelRjbzUyRjF4VGEyYTIrSzh2dnE5MmRWSG10TG9QZVFYL0FaUFJZR3RoRFlPZVpqQmpLb0ZzVkd1bFIzbFdVOTVXZUNLNDRxSFU3TWhXVUdVS1pEVDNvS1VjRzJHV3VoK0VERGZVWUEvamhBaGwwVE9zSk5ZU0V1N21RbWkzVXpmWHdaS0E0QnNWc0hMWFFZR2dSVzk1dUV0cEoxVmZuOVhpTHJpUkJsRkVxeHNEakEwOXlDTlVvUXh4d2Q3S1dTVHQyeTNHVEtpZmxxSFJTb1daYzNtMTFXYS9mSmRGZ1hENHNTWWZsZUpCS2Q4R016N0o4ZFpuL2NHUkNjS0dEbkEyR2UzZkt6Y3ZsblRETnRoR1dMWHpYL1dhWHRVQW1SZ2VMbEhTcjMwcjBHOVVUWE1iMEF0bXd6T295NzNma1NsSFprZHV3L1RZdVU5Y0FENFl1dFBveFRUc0EzNzk3d1ZyNFovMU5DNXpBUkhyNHZ0eEpqeElmaVpNaE1rYldrKzE0Qm5KWkt3cUdad0Rmc3dMeXhXRFNnMTFyRkxKRjdOb3B4amQxaDEvUU9UK29lemdmdTNZcStIaytkdWY1eCs0MG8xR1RrYUlnaWtLL0lFbkM2YVl4Q1VCYVpKU040WFRZRmpVL1lNTklLcUp3aERHT0NDSThGRFhuWG1YanRHaEdKeVNocWpBT25CT2tXMkpHOVM3R2dZZU1XQVU1SnpobldtQk9hT00rQ0tFUG9xU2ZGREMyVW5xK0RMbFVnVVZVRkZMWkdKZzZqdGxvanNkc2E4a1BPYlB1SmRpNWRuQmRCc0xKTUdUV0RhNHQySnZ0d3VQbzlzK1k4NnN1di9XMzNRRzFyQWFPQVVWK3Z4NEs2ZjJEMDRQVktsQzdXTFNyWnpBaTQ1WlY2bElDN1dvWHFtUnl2VXFvVndyelVvVnNJamVUWFdRditSSDVHVGxCWGlCL0luOGxuMEliQkNBRk9hakFKcmdaWXlPSFdxT2ZVZS9hSGpJMTJSNk9RbzFqQ2d0MjE1bCs0ZjZYUGIrME1Ob3UwVis0M24yRjc3dFNmUmIyNGQ3eml0Z25LbXZZSHM2OXp1Z2FQdkJ3djZpb1hrYjJMZEw2NUF0dzUxdUxrWGx1MWJoTU1SY1hTUGNZb3FLSVJsaDM0bFFQOC81SmJ1VUZ5ZTR2eEQ2LzZNeEZGMTFDMHVWTHI5VWxndzQ0dFMzcE1WaU5MVUV4YnljRmdMSWN0K1FETWliUmlteDF5ZFV6OEZYWml1T0lEQk9NVlgyblVaYytodU5FNVhVSjgxdWlKb2lhYndxYVZGMHVhY0tiYXUvcGw0UjJWVzBYWGxKcmE2Ym9WcllHNjQ2VEY1Tll6d3k0dmpFTlZyRGxjTnBaUGw4REg2WFg4WFdDeDBtdldWWlk2S0ZMcnZzWTY2L3pQaWN0NUZueGFOVVIvanV2WkNNM1R2RDYwRTJXMXRaaXpiWFRQRHVhYmNtMG5iYnpwV0twbUExYXlCUThnaWVkTFVNK0Ewa05qQmpRam11WXo3WXJnSVhZdm1GNjNaTEJ3U1hycG45VGI5d3dkZC9VMUgwUE1RSzNYY084dWwzV1Q3UHlQUGRweTBUZW1LeE5SY0pOYXVpWEpublVEcFVwcFFXczRTblVJeTBFRVNHWXFKWVFMR0h4emFHV3dWSWFTNlk3bVFGTThaallEUTNheGpmNjFTV2pVMzNKd09aQTFwd2FHMUw5bXpmNzFhSFJkWDFKSHc2RnAwYVhoTndicXllR05nNE5iZHpHQ0J4b3o0WlhqeTROdTY5WnI2c0RZNnZNckxVNW5BMVA4SmtiZFdYSjZFUmZNcnl2TmgxSmZROStUNGRJaEd2Szl3M2R4akJCemF0c1EvTWxPSFZJRG5ZcER6Nm9kQVhsUTAxdDJQYTVJYWZkOE1NcHhBZURLUDBDNkNqZ1ZMVDVvc0I2aWNVeDAxbFdqWHh6VC9HeVJGMndlbEVNNVovN2pHM1ZqUTFTck5uNUlieXpPRzVkb2JCMy9RSHh5WnZzWGNvejhJb0V3UzdwbENnK3p4SFFrNDI0cTlCZkVwa0VTSmJGSFF1c0RCU1dGa3VCa29QTzBrTEt3UlZZanhHWGxIVGNURFFNSi9INlRYOWFma083bW5yYVRPMWZlVG5aQVhMdTRjcDdIQVhNbU5HMXllRms5VGdTL05IaFpSLzRRb0JUci9aQis2aENneWwxNU5xMVViTjZuRTEvWm5QMVUyY2l6Q0JwdnM4Y0pRWko0TGtZeDVOL3laUEFVWk5RUTBWNGYzQlFsbFdySzNZUnpsMzBkT1Q2UlZuMnVwTnVyNndvU2E4Q3FwZFQvYUtuQk00bzNqTnVyOWQ5eHF0VVQ2dmVCRXQ5Q2E5YXQrRVJ6RUVoVWtSOHNhNW1RNGFWdkpvVmVFQTh6STRlaTVtVUxYRkd5VTd6LzZUQWVZTFZjcHpTV1pZOFBZWUY1eXJUVjYwc1QwK1hWMTQxdlgrK1dmMTZWMmJGZUdWUFpYeEZwa3Z5ZUtUV0xsemZXMG1uS3hzWTZZMzI5NC8wOTk4U0NmWDFibG01cGJjdkZHbHEvcjA3TVJBTWhZSURpVzVKRktXVzN2ZHJFcENzWlNKRytvbTdadS9QU1NjWkpoTmtMYm1XNVdzcjEycFdxVzV6S3Rsd1JTNGJGT3hVdzE3bUN6eTZsc2tDRGwxV1lPR1dEWXJBRHJNQTdCRER3ZVdXTmQ1a29pSm5SMWR6K3l0TFAycTBTcVBCMWxuSzJjY0I3UlllNEZTb1BrczNpQjN0NHR4VFNIY3RiMnN5MWl2azBwdkh1Q05tNncxZjZ3eHYzK09DZ043OExxZFFuVVZoN1Iwb1RBcDB6T2YycmJXNzcwVnU1QzJkSXlHZFRuSG84elNqaTdkcHBqMFVTb1ZDeitsaFJNVGg1M1RlcTlWYkdmYmp1U2JBb29TZFhheVk0UFlIZzM3NEM2ZjdnbDFCL0RYdUo0L1FYeE9CZEpGSnNwRnNJM2VncG9XVVVDamxUSUZuTllObCtaeVpLbUJlWUtHSGtEMVF5RGxoYUtiS3dLY0lKcUo0VExKMk9tZFkvSldYYWU0RGRHQnc4SFo3ZVhjZ0ZGMnpyMlNvYWxEcnk1aUtxb2EwUHVoZTNoUFEyczNlbFRZTStNSStuM3JLMEtnTDcvTGEzR2VNTHQ2bTd1OTEydkdudnRPUmlJYTBxQm1ocVZpK1hXOVhOQm1xYjhlVmdLeklIZkdJNWJOb0c3WDBVQ3plSVNtcUljTy9uWThGSDdVOGF2WDlmeC9TVCtoeDBzZXpQdzlReThNdW0zR1dmMk40VXkveUlZR1ZCWGJKSFdJWnA3ZGZUY3B0ZE1UcjlRbXE3RGFpSy91a3FDTDRrdDRSVWZTNVhQbk10bVQyMi9tUUZxRjdlbVNxdHJsdThTVkVseERSSnJaT0RrcHV3ZTBWZlRmamRFcDFmN0E3ditmb3pOQlhVSi82V1R1SzJUdEZscEZWWkFaM0xjRnZVaTFaMnAyWVQrRU1Ba0dKVlN0T3pMVEFQZzRJcVdJQWx6UlNqT0JrbDJ6eGozVEt5Y3B6VC9NbnZYM3VhU01XTStnVTBya1hqb2hoZWZWUk1hcHMzL2tMTVNLdjIzbFQyM3V4UXJrUWp5T0psZU1Ec2RoQW5ENlpHRWxXWjVNakNYekNFL2hrV1grV0Y0a256R2hWT3lLMmVRWmVrVjNleW8wekw4a3VZV0NuREN2ampoQWtjVFBPQkRYVmRvYXYzSFZjRm5Rakx2dFY5UzJwMHpBNkplZ1B3TVF4dCt5RmIzbGw5ekdscS81ZFJLYjNjRXlRWW9hTllwaGFySjd4Q0I3QVd4c0xZM2pqWlhZMFhzWmowV2p3YzlJNlBQL2RLQUJuQ1phcUhwYVpFQUN4azRaZUxaU0tOZ1pBQmwrbFlRWDFzSlFPU1gzbjZyNDEwZXZjb3VkNUplQUdVWFZQOUgxdFpPS2VqVHE0T25vMHowZXJybzFGcm5PcG9odmExZC9oVGR0VnNRZEtONVc5UmxUM05qRDBuem55S05UZ0tBTWZXTldjeW9kVjBJR0xQSUhPRjBvNEp5cXVmYUs0ejZXSUl6dUdoM2Q4Yzhjd1FnOEVSK09WeHlyamRtOHZOdWh0czRMb09paEd4SU11VWRnendpWU43eGhoMStvWm5KTnVURzdnUVp2dTRYV1o5R0FaWmpHRXVid2VQcVlodEtEVEgrOVZRa2wxNy9pR3lic25KKzgrc0t0eVByY2xsOXR5NjVac2RzdC85aXFwRUtoN001VmRCeGgzY3NPZE5jNnRXM0kxdXlNMVB6T1hlZ1NPckxGc0ZOSTJPMjdNK1RGMkFwbk45TVV2NXVkNkxqeEl2RVFuSFJ6eEl1NElzQTlNTEZrSm4ydGNab1o3T043ZFhlN3VqcmM4SHJ1c1BLYW1scVh3ZDc3bFFVdUxwaWxhdTRQVU1hcHVlQmI3aXJVNFJvVVhFWVh1VnVJR2xSR21PcCsybE5rYVJQVnppT3FtbGFadmFxRzRkRmdTajBqeEVKV3J2MTJJVVdudG13K3JmUWFyUkUwQXBoNG9jSTZubFVsR3FzK3UzLytUL2V0aFc2MlBwSHAyZUhiWnN0bmgvd09POTV5REFIaWNZMkJrWUdBQTRwbUo2UUh4L0RaZkdiaVpYd0JGR0dwVU56UWk2UCt2bWFjeTNRSnlPUmlZUUtJQU5vVUxWWGljWTJCa1lHQU8rcDhGSkY4d0FBSHpWQVpHQmxTZ0RRQlc5Z052QUFBQWVKeGpZR0JnWUg0eE5EQUF6d1FtandBQUFBQUFUZ0NhQU9nQkNnRXNBVTRCY0FHYUFjUUI3Z0lhQXB3QzZBU2FCTHdFMWdUeUJRNEZLZ1Y2QmRBRi9nWkVCbVlHdGdjWUI1QUlHQWhTQ0dvSS9nbEdDYjRKMmdvRUNqd0tnZ3E0Q3ZBTFVBdVdDN3g0bkdOZ1pHQmcwR1pNWVJCbEFBRW1JT1lDUWdhRy8yQStBd0FZbEFHOEFIaWNiWkU5VHNNd0dJYmY5QS9SU2dnRVltSHhBZ3RxK2pOMlpHajNEdDNUMUdsVE9YSGt1Qlc5QXlmZ0VCeUNnVE53Q0E3QlcvTkpsVkJ0eWQvangrOFhLd21BYTN3aHduRkU2SWIxT0JxNDRPNlBtNlFiNFJiNVFiaU5IaDZGTy9SRDRTNmVNUkh1NFJhYVQ0aGFselIzZUJWdTRBcHZ3azM2ZCtFVytVTzRqWHQ4Q25mb3Y0VzdXT0JIdUllbjZNWHNDdHZQVTF2V2M3M2VtY1NkeElrVzJ0VzVMZFVvSHA3a1RKZmFKVjZ2MVBLZzZ2MTY3SDJtTW1jTE5iV2wxOFpZVlRtNzFhbVBOOTVYazhFZ0V4K250b0RCRGdVcytzaVJzcGFvTWVmN3J1a05Fcml6aVhOdXdTN0htb2U5d2dneHYrZTU1SXpKTXFRVGVOWVYwMHNjdU5iWTgrWXhyVWZHZmNhTVpiL0NOUFFlMDRiVDBsVGhiRXVUMHNmWWhLNksvMjNBbWYzTHgrSDI0aGNqNEdTY0FBQUFlSnh0anRsdWd6QVFSYmtKVUVKSXV1Lzd2cVI4bEdOUEFjV3gwWUFiNWUvTGtsUjk2RWdlblN1ZkdZMDM4UHFLdmY5cmhnR0c4QkVneEE0aWpCQmpqQVFUVExHTFBlempBSWM0d2pGT2NJb3puT01DbDdqQ05XNXdpenZjNHdHUGVNSXpYdkNLTjd6akF6Tjhlb25RUldaU1NhWW1qdnVnNmFzZTk4aEZsdGV4TUptbVZObVYyV0J2ZE5nWlVjK3VqQVd6WFczVURudTF3NDNhc1N0SGM4R3B6QVhYL3B5MGpxVFFaSlRna2N4SkxwYUNGMGxEMzJ4TnQrNDN0QXNuMjlEZnQwMnVES1MyY2pHVU5nc2syNnFLMmxGdGhZb1UyN0lOUHFtaURxZzVnb2UwcHFSNXFTb3FNZGVrL0NVWkZ5d0w0NnJFc2lJbWxlcWlxb015dDRiYVhsdS8xR0xkTkZmNXpiY05tZHIxWVVXQ1plNDdvK3pVbWIvRG9TdGJ3M2NWc2VmOUFMamppUFFBKSBmb3JtYXQoXCd3b2ZmXCcpO1xuICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB9XG5cbiAgICBodG1sIHtcbiAgICAgIC0tbHVtby1pY29ucy1hbGlnbi1jZW50ZXI6ICJcXGVhMDEiO1xuICAgICAgLS1sdW1vLWljb25zLWFsaWduLWxlZnQ6ICJcXGVhMDIiO1xuICAgICAgLS1sdW1vLWljb25zLWFsaWduLXJpZ2h0OiAiXFxlYTAzIjtcbiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1kb3duOiAiXFxlYTA0IjtcbiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1sZWZ0OiAiXFxlYTA1IjtcbiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1yaWdodDogIlxcZWEwNiI7XG4gICAgICAtLWx1bW8taWNvbnMtYW5nbGUtdXA6ICJcXGVhMDciO1xuICAgICAgLS1sdW1vLWljb25zLWFycm93LWRvd246ICJcXGVhMDgiO1xuICAgICAgLS1sdW1vLWljb25zLWFycm93LWxlZnQ6ICJcXGVhMDkiO1xuICAgICAgLS1sdW1vLWljb25zLWFycm93LXJpZ2h0OiAiXFxlYTBhIjtcbiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy11cDogIlxcZWEwYiI7XG4gICAgICAtLWx1bW8taWNvbnMtYmFyLWNoYXJ0OiAiXFxlYTBjIjtcbiAgICAgIC0tbHVtby1pY29ucy1iZWxsOiAiXFxlYTBkIjtcbiAgICAgIC0tbHVtby1pY29ucy1jYWxlbmRhcjogIlxcZWEwZSI7XG4gICAgICAtLWx1bW8taWNvbnMtY2hlY2ttYXJrOiAiXFxlYTBmIjtcbiAgICAgIC0tbHVtby1pY29ucy1jaGV2cm9uLWRvd246ICJcXGVhMTAiO1xuICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tbGVmdDogIlxcZWExMSI7XG4gICAgICAtLWx1bW8taWNvbnMtY2hldnJvbi1yaWdodDogIlxcZWExMiI7XG4gICAgICAtLWx1bW8taWNvbnMtY2hldnJvbi11cDogIlxcZWExMyI7XG4gICAgICAtLWx1bW8taWNvbnMtY2xvY2s6ICJcXGVhMTQiO1xuICAgICAgLS1sdW1vLWljb25zLWNvZzogIlxcZWExNSI7XG4gICAgICAtLWx1bW8taWNvbnMtY3Jvc3M6ICJcXGVhMTYiO1xuICAgICAgLS1sdW1vLWljb25zLWRvd25sb2FkOiAiXFxlYTE3IjtcbiAgICAgIC0tbHVtby1pY29ucy1kcm9wZG93bjogIlxcZWExOCI7XG4gICAgICAtLWx1bW8taWNvbnMtZWRpdDogIlxcZWExOSI7XG4gICAgICAtLWx1bW8taWNvbnMtZXJyb3I6ICJcXGVhMWEiO1xuICAgICAgLS1sdW1vLWljb25zLWV5ZTogIlxcZWExYiI7XG4gICAgICAtLWx1bW8taWNvbnMtZXllLWRpc2FibGVkOiAiXFxlYTFjIjtcbiAgICAgIC0tbHVtby1pY29ucy1tZW51OiAiXFxlYTFkIjtcbiAgICAgIC0tbHVtby1pY29ucy1taW51czogIlxcZWExZSI7XG4gICAgICAtLWx1bW8taWNvbnMtb3JkZXJlZC1saXN0OiAiXFxlYTFmIjtcbiAgICAgIC0tbHVtby1pY29ucy1waG9uZTogIlxcZWEyMCI7XG4gICAgICAtLWx1bW8taWNvbnMtcGhvdG86ICJcXGVhMjEiO1xuICAgICAgLS1sdW1vLWljb25zLXBsYXk6ICJcXGVhMjIiO1xuICAgICAgLS1sdW1vLWljb25zLXBsdXM6ICJcXGVhMjMiO1xuICAgICAgLS1sdW1vLWljb25zLXJlZG86ICJcXGVhMjQiO1xuICAgICAgLS1sdW1vLWljb25zLXJlbG9hZDogIlxcZWEyNSI7XG4gICAgICAtLWx1bW8taWNvbnMtc2VhcmNoOiAiXFxlYTI2IjtcbiAgICAgIC0tbHVtby1pY29ucy11bmRvOiAiXFxlYTI3IjtcbiAgICAgIC0tbHVtby1pY29ucy11bm9yZGVyZWQtbGlzdDogIlxcZWEyOCI7XG4gICAgICAtLWx1bW8taWNvbnMtdXBsb2FkOiAiXFxlYTI5IjtcbiAgICAgIC0tbHVtby1pY29ucy11c2VyOiAiXFxlYTJhIjtcbiAgICB9XG4gIDwvc3R5bGU+XG4nLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoUVh0LmNvbnRlbnQpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMjEgVmFhZGluIEx0ZC4KICAgICAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICAqLwpjb25zdCB0JHQ9R1h0YAogIDpob3N0IHsKICAgIC0tbHVtby1zaXplLXhzOiAxLjYyNXJlbTsKICAgIC0tbHVtby1zaXplLXM6IDEuODc1cmVtOwogICAgLS1sdW1vLXNpemUtbTogMi4yNXJlbTsKICAgIC0tbHVtby1zaXplLWw6IDIuNzVyZW07CiAgICAtLWx1bW8tc2l6ZS14bDogMy41cmVtOwoKICAgIC8qIEljb25zICovCiAgICAtLWx1bW8taWNvbi1zaXplLXM6IDEuMjVlbTsKICAgIC0tbHVtby1pY29uLXNpemUtbTogMS41ZW07CiAgICAtLWx1bW8taWNvbi1zaXplLWw6IDIuMjVlbTsKICAgIC8qIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwogICAgLS1sdW1vLWljb24tc2l6ZTogdmFyKC0tbHVtby1pY29uLXNpemUtbSk7CiAgfQpgLGUkdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO2UkdC5pbm5lckhUTUw9YDxzdHlsZT4ke3QkdC50b1N0cmluZygpLnJlcGxhY2UoIjpob3N0IiwiaHRtbCIpfTwvc3R5bGU+YCxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUkdC5jb250ZW50KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IChjKSAyMDIxIFZhYWRpbiBMdGQuCiAgICAgKiBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAgKi8KY29uc3QgbiR0PUdYdGAKICA6aG9zdCB7CiAgICAvKiBTcXVhcmUgKi8KICAgIC0tbHVtby1zcGFjZS14czogMC4yNXJlbTsKICAgIC0tbHVtby1zcGFjZS1zOiAwLjVyZW07CiAgICAtLWx1bW8tc3BhY2UtbTogMXJlbTsKICAgIC0tbHVtby1zcGFjZS1sOiAxLjVyZW07CiAgICAtLWx1bW8tc3BhY2UteGw6IDIuNXJlbTsKCiAgICAvKiBXaWRlICovCiAgICAtLWx1bW8tc3BhY2Utd2lkZS14czogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UteHMpOwogICAgLS1sdW1vLXNwYWNlLXdpZGUtczogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXMpIC8gMikgdmFyKC0tbHVtby1zcGFjZS1zKTsKICAgIC0tbHVtby1zcGFjZS13aWRlLW06IGNhbGModmFyKC0tbHVtby1zcGFjZS1tKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UtbSk7CiAgICAtLWx1bW8tc3BhY2Utd2lkZS1sOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UtbCkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLWwpOwogICAgLS1sdW1vLXNwYWNlLXdpZGUteGw6IGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLXhsKTsKCiAgICAvKiBUYWxsICovCiAgICAtLWx1bW8tc3BhY2UtdGFsbC14czogdmFyKC0tbHVtby1zcGFjZS14cykgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwtczogdmFyKC0tbHVtby1zcGFjZS1zKSBjYWxjKHZhcigtLWx1bW8tc3BhY2UtcykgLyAyKTsKICAgIC0tbHVtby1zcGFjZS10YWxsLW06IHZhcigtLWx1bW8tc3BhY2UtbSkgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLW0pIC8gMik7CiAgICAtLWx1bW8tc3BhY2UtdGFsbC1sOiB2YXIoLS1sdW1vLXNwYWNlLWwpIGNhbGModmFyKC0tbHVtby1zcGFjZS1sKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwteGw6IHZhcigtLWx1bW8tc3BhY2UteGwpIGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKTsKICB9CmAsaSR0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7aSR0LmlubmVySFRNTD1gPHN0eWxlPiR7biR0LnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaSR0LmNvbnRlbnQpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMjEgVmFhZGluIEx0ZC4KICAgICAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICAqLwpjb25zdCByJHQ9R1h0YAogIDpob3N0IHsKICAgIC8qIEJvcmRlciByYWRpdXMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLXM6IDAuMjVlbTsgLyogQ2hlY2tib3gsIGJhZGdlLCBkYXRlLXBpY2tlciB5ZWFyIGluZGljYXRvciwgZXRjICovCiAgICAtLWx1bW8tYm9yZGVyLXJhZGl1cy1tOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMsIDAuMjVlbSk7IC8qIEJ1dHRvbiwgdGV4dCBmaWVsZCwgbWVudSBvdmVybGF5LCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLWw6IDAuNWVtOyAvKiBEaWFsb2csIG5vdGlmaWNhdGlvbiwgZXRjICovCiAgICAtLWx1bW8tYm9yZGVyLXJhZGl1czogMC4yNWVtOyAvKiBEZXByZWNhdGVkICovCgogICAgLyogU2hhZG93ICovCiAgICAtLWx1bW8tYm94LXNoYWRvdy14czogMCAxcHggNHB4IC0xcHggdmFyKC0tbHVtby1zaGFkZS01MHBjdCk7CiAgICAtLWx1bW8tYm94LXNoYWRvdy1zOiAwIDJweCA0cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCAzcHggMTJweCAtMXB4IHZhcigtLWx1bW8tc2hhZGUtMzBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3ctbTogMCAycHggNnB4IC0xcHggdmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIDAgOHB4IDI0cHggLTRweCB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKICAgIC0tbHVtby1ib3gtc2hhZG93LWw6IDAgM3B4IDE4cHggLTJweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCAxMnB4IDQ4cHggLTZweCB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKICAgIC0tbHVtby1ib3gtc2hhZG93LXhsOiAwIDRweCAyNHB4IC0zcHggdmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIDAgMThweCA2NHB4IC04cHggdmFyKC0tbHVtby1zaGFkZS00MHBjdCk7CgogICAgLyogQ2xpY2thYmxlIGVsZW1lbnQgY3Vyc29yICovCiAgICAtLWx1bW8tY2xpY2thYmxlLWN1cnNvcjogZGVmYXVsdDsKICB9CmAsbyR0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7byR0LmlubmVySFRNTD1gPHN0eWxlPiR7ciR0LnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobyR0LmNvbnRlbnQpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMjEgVmFhZGluIEx0ZC4KICAgICAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICAqLwpjb25zdCBhJHQ9R1h0YAogIDpob3N0IHsKICAgIC8qIHByZXR0aWVyLWlnbm9yZSAqLwogICAgLS1sdW1vLWZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdSb2JvdG8nLCAnU2Vnb2UgVUknLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmLCAnQXBwbGUgQ29sb3IgRW1vamknLCAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJzsKCiAgICAvKiBGb250IHNpemVzICovCiAgICAtLWx1bW8tZm9udC1zaXplLXh4czogMC43NXJlbTsKICAgIC0tbHVtby1mb250LXNpemUteHM6IDAuODEyNXJlbTsKICAgIC0tbHVtby1mb250LXNpemUtczogMC44NzVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLW06IDFyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLWw6IDEuMTI1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS14bDogMS4zNzVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXh4bDogMS43NXJlbTsKICAgIC0tbHVtby1mb250LXNpemUteHh4bDogMi41cmVtOwoKICAgIC8qIExpbmUgaGVpZ2h0cyAqLwogICAgLS1sdW1vLWxpbmUtaGVpZ2h0LXhzOiAxLjI1OwogICAgLS1sdW1vLWxpbmUtaGVpZ2h0LXM6IDEuMzc1OwogICAgLS1sdW1vLWxpbmUtaGVpZ2h0LW06IDEuNjI1OwogIH0KYCxzJHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtzJHQuaW5uZXJIVE1MPWA8c3R5bGU+JHthJHQudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmAsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzJHQuY29udGVudCksJFh0KCIiLEdYdGAKICBodG1sIHsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1sdW1vLWZvbnQtZmFtaWx5KTsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUsIHZhcigtLWx1bW8tZm9udC1zaXplLW0pKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LW0pOwogICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwogIH0KCiAgLyogQ2Fu4oCZdCBjb21iaW5lIHdpdGggdGhlIGFib3ZlIHNlbGVjdG9yIGJlY2F1c2UgdGhhdCBkb2VzbuKAmXQgd29yayBpbiBicm93c2VycyB3aXRob3V0IG5hdGl2ZSBzaGFkb3cgZG9tICovCiAgOmhvc3QgewogICAgZm9udC1mYW1pbHk6IHZhcigtLWx1bW8tZm9udC1mYW1pbHkpOwogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZSwgdmFyKC0tbHVtby1mb250LXNpemUtbSkpOwogICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtbSk7CiAgICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7CiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7CiAgfQoKICBzbWFsbCwKICBbdGhlbWV+PSdmb250LXNpemUtcyddIHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUtcyk7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1zKTsKICB9CgogIFt0aGVtZX49J2ZvbnQtc2l6ZS14cyddIHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHMpOwogICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQteHMpOwogIH0KCiAgaDEsCiAgaDIsCiAgaDMsCiAgaDQsCiAgaDUsCiAgaDYgewogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXhzKTsKICAgIG1hcmdpbi10b3A6IDEuMjVlbTsKICB9CgogIGgxIHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHh4bCk7CiAgICBtYXJnaW4tYm90dG9tOiAwLjc1ZW07CiAgfQoKICBoMiB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXh4bCk7CiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKICB9CgogIGgzIHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteGwpOwogICAgbWFyZ2luLWJvdHRvbTogMC41ZW07CiAgfQoKICBoNCB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLWwpOwogICAgbWFyZ2luLWJvdHRvbTogMC41ZW07CiAgfQoKICBoNSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pOwogICAgbWFyZ2luLWJvdHRvbTogMC4yNWVtOwogIH0KCiAgaDYgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14cyk7CiAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAzZW07CiAgfQoKICBwLAogIGJsb2NrcXVvdGUgewogICAgbWFyZ2luLXRvcDogMC41ZW07CiAgICBtYXJnaW4tYm90dG9tOiAwLjc1ZW07CiAgfQoKICBhIHsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICB9CgogIGE6aG92ZXIgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgfQoKICBociB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICBoZWlnaHQ6IDFweDsKICAgIGJvcmRlcjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBtYXJnaW46IHZhcigtLWx1bW8tc3BhY2UtcykgY2FsYyh2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtbSkgLyAyKTsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMTBwY3QpOwogIH0KCiAgYmxvY2txdW90ZSB7CiAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkIHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogIH0KCiAgYiwKICBzdHJvbmcgewogICAgZm9udC13ZWlnaHQ6IDYwMDsKICB9CgogIC8qIFJUTCBzcGVjaWZpYyBzdHlsZXMgKi8KCiAgYmxvY2txdW90ZVtkaXI9J3J0bCddIHsKICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgfQpgLHttb2R1bGVJZDoibHVtby10eXBvZ3JhcGh5In0pLCRYdCgidmFhZGluLWNoZWNrYm94IixHWHRgCiAgICA6aG9zdCB7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgW3BhcnQ9J2xhYmVsJ106bm90KFtlbXB0eV0pIHsKICAgICAgbWFyZ2luOiAwLjE4NzVlbSAwLjg3NWVtIDAuMTg3NWVtIDAuMzc1ZW07CiAgICB9CgogICAgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB3aWR0aDogY2FsYygxZW0gKyAycHgpOwogICAgICBoZWlnaHQ6IGNhbGMoMWVtICsgMnB4KTsKICAgICAgbWFyZ2luOiAwLjE4NzVlbTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcyk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBjdWJpYy1iZXppZXIoMC4xMiwgMC4zMiwgMC41NCwgMiksIGJhY2tncm91bmQtY29sb3IgMC4xNXM7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgfQoKICAgIDpob3N0KFtpbmRldGVybWluYXRlXSkgW3BhcnQ9J2NoZWNrYm94J10sCiAgICA6aG9zdChbY2hlY2tlZF0pIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yKTsKICAgIH0KCiAgICAvKiBOZWVkZWQgdG8gYWxpZ24gdGhlIGNoZWNrYm94IG5pY2VseSBvbiB0aGUgYmFzZWxpbmUgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjpiZWZvcmUgewogICAgICBjb250ZW50OiAnXFwyMDAzJzsKICAgIH0KCiAgICAvKiBDaGVja21hcmsgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIHdpZHRoOiAwOwogICAgICBoZWlnaHQ6IDA7CiAgICAgIGJvcmRlcjogMCBzb2xpZCB2YXIoLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3IpOwogICAgICBib3JkZXItd2lkdGg6IDAuMTg3NWVtIDAgMCAwLjE4NzVlbTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMCAwOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMC44MTI1ZW07CiAgICAgIGxlZnQ6IDAuNWVtOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNTUpIHJvdGF0ZSgtMTM1ZGVnKTsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICA6aG9zdChbY2hlY2tlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICAgIHdpZHRoOiAwLjYyNWVtOwogICAgICBoZWlnaHQ6IDEuMDYyNWVtOwogICAgfQoKICAgIC8qIEluZGV0ZXJtaW5hdGUgY2hlY2ttYXJrICovCiAgICA6aG9zdChbaW5kZXRlcm1pbmF0ZV0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgb3BhY2l0eTogMTsKICAgICAgdG9wOiA0NSU7CiAgICAgIGhlaWdodDogMTAlOwogICAgICBsZWZ0OiAyMiU7CiAgICAgIHJpZ2h0OiAyMiU7CiAgICAgIHdpZHRoOiBhdXRvOwogICAgICBib3JkZXI6IDA7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcik7CiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yNXM7CiAgICB9CgogICAgLyogRm9jdXMgcmluZyAqLwogICAgOmhvc3QoW2ZvY3VzLXJpbmddKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIC8qIERpc2FibGVkICovCiAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBjb2xvcjogdmFyKC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nbGFiZWwnXSA6OnNsb3R0ZWQoKikgewogICAgICBjb2xvcjogaW5oZXJpdDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMTBwY3QpOwogICAgfQoKICAgIDpob3N0KFtkaXNhYmxlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgOmhvc3QoW2luZGV0ZXJtaW5hdGVdW2Rpc2FibGVkXSkgW3BhcnQ9J2NoZWNrYm94J106OmFmdGVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0PSdsYWJlbCddOm5vdChbZW1wdHldKSB7CiAgICAgIG1hcmdpbjogMC4xODc1ZW0gMC4zNzVlbSAwLjE4NzVlbSAwLjg3NWVtOwogICAgfQoKICAgIC8qIFRyYW5zaXRpb24gdGhlIGNoZWNrbWFyayBpZiBhY3RpdmF0ZWQgd2l0aCB0aGUgbW91c2UgKGRpc2FibGVkIGZvciBncmlkIHNlbGVjdC1hbGwgdGhpcyB3YXkpICovCiAgICA6aG9zdCg6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMXMsIGhlaWdodCAwLjI1czsKICAgIH0KCiAgICAvKiBVc2VkIGZvciBhY3RpdmF0aW9uICJoYWxvIiAqLwogICAgW3BhcnQ9J2NoZWNrYm94J106OmJlZm9yZSB7CiAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNCk7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzLCBvcGFjaXR5IDAuOHM7CiAgICB9CgogICAgLyogSG92ZXIgKi8KICAgIDpob3N0KDpub3QoW2NoZWNrZWRdKTpub3QoW2luZGV0ZXJtaW5hdGVdKTpub3QoW2Rpc2FibGVkXSk6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgLyogRGlzYWJsZSBob3ZlciBmb3IgdG91Y2ggZGV2aWNlcyAqLwogICAgQG1lZGlhIChwb2ludGVyOiBjb2Fyc2UpIHsKICAgICAgOmhvc3QoOm5vdChbY2hlY2tlZF0pOm5vdChbaW5kZXRlcm1pbmF0ZV0pOm5vdChbZGlzYWJsZWRdKTpob3ZlcikgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICB9CiAgICB9CgogICAgLyogQWN0aXZlICovCiAgICA6aG9zdChbYWN0aXZlXSkgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDVzOwogICAgfQoKICAgIDpob3N0KFthY3RpdmVdW2NoZWNrZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsKICAgIH0KCiAgICA6aG9zdChbYWN0aXZlXTpub3QoW2NoZWNrZWRdKSkgW3BhcnQ9J2NoZWNrYm94J106OmJlZm9yZSB7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFzLCAwLjAxczsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgb3BhY2l0eTogMC40OwogICAgfQogIGAse21vZHVsZUlkOiJsdW1vLWNoZWNrYm94In0pO2NvbnN0IGwkdD10PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3RoZW1lOnt0eXBlOlN0cmluZyxyZWFkT25seTohMH19fWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LGUsbil7c3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxuKSwidGhlbWUiPT09dCYmdGhpcy5fc2V0VGhlbWUobil9fSxjJHQ9dD0+Y2xhc3MgZXh0ZW5kcyhsJHQodCkpe3N0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCk7Y29uc3QgdD10aGlzLnByb3RvdHlwZS5fdGVtcGxhdGUsZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy5wcm90b3R5cGUpLl90ZW1wbGF0ZTtlJiZBcnJheS5mcm9tKGUuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZVtpbmNsdWRlXSIpKS5mb3JFYWNoKChlPT57dGhpcy5faW5jbHVkZVN0eWxlKGUuZ2V0QXR0cmlidXRlKCJpbmNsdWRlIiksdCl9KSksdGhpcy5faW5jbHVkZU1hdGNoaW5nVGhlbWVzKHQpfXN0YXRpYyBfaW5jbHVkZU1hdGNoaW5nVGhlbWVzKHQpe2NvbnN0IGU9Qi5wcm90b3R5cGUubW9kdWxlcztsZXQgbj0hMTtjb25zdCBpPXRoaXMuaXMrIi1kZWZhdWx0LXRoZW1lIjtPYmplY3Qua2V5cyhlKS5zb3J0KCgodCxlKT0+e2NvbnN0IG49MD09PXQuaW5kZXhPZigidmFhZGluLSIpLGk9MD09PWUuaW5kZXhPZigidmFhZGluLSIpLHI9WyJsdW1vLSIsIm1hdGVyaWFsLSJdLG89ci5maWx0ZXIoKGU9PjA9PT10LmluZGV4T2YoZSkpKS5sZW5ndGg+MCxhPXIuZmlsdGVyKCh0PT4wPT09ZS5pbmRleE9mKHQpKSkubGVuZ3RoPjA7cmV0dXJuIG4hPT1pP24/LTE6MTpvIT09YT9vPy0xOjE6MH0pKS5mb3JFYWNoKChyPT57aWYociE9PWkpe2NvbnN0IGk9ZVtyXS5nZXRBdHRyaWJ1dGUoInRoZW1lLWZvciIpO2kmJmkuc3BsaXQoIiAiKS5mb3JFYWNoKChlPT57bmV3IFJlZ0V4cCgiXiIrZS5zcGxpdCgiKiIpLmpvaW4oIi4qIikrIiQiKS50ZXN0KHRoaXMuaXMpJiYobj0hMCx0aGlzLl9pbmNsdWRlU3R5bGUocix0KSl9KSl9fSkpLCFuJiZlW2ldJiZ0aGlzLl9pbmNsdWRlU3R5bGUoaSx0KX1zdGF0aWMgX2luY2x1ZGVTdHlsZSh0LGUpe2lmKGUmJiFlLmNvbnRlbnQucXVlcnlTZWxlY3Rvcihgc3R5bGVbaW5jbHVkZT0iJHt0fSJdYCkpe2NvbnN0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtuLnNldEF0dHJpYnV0ZSgiaW5jbHVkZSIsdCksZS5jb250ZW50LmFwcGVuZENoaWxkKG4pfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBWYWFkaW4gTHRkLgogICAgICogVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgICovO2xldCB1JHQ9ITE7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCgoKT0+e3UkdD0hMH0pLHtjYXB0dXJlOiEwfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCgpPT57dSR0PSExfSkse2NhcHR1cmU6ITB9KTtjb25zdCBoJHQ9dD0+Y2xhc3MgZXh0ZW5kcygodD0+Y2xhc3MgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnt0YWJpbmRleDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il90YWJpbmRleENoYW5nZWQifX19fSkodCkpe3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthdXRvZm9jdXM6e3R5cGU6Qm9vbGVhbn0sX3ByZXZpb3VzVGFiSW5kZXg6e3R5cGU6TnVtYmVyfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfZGlzYWJsZWRDaGFuZ2VkIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LF9pc1NoaWZ0VGFiYmluZzp7dHlwZTpCb29sZWFufX19cmVhZHkoKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLCh0PT57dC5jb21wb3NlZFBhdGgoKVswXT09PXRoaXM/dGhpcy5jb250YWlucyh0LnJlbGF0ZWRUYXJnZXQpfHx0aGlzLl9mb2N1cygpOi0xPT09dC5jb21wb3NlZFBhdGgoKS5pbmRleE9mKHRoaXMuZm9jdXNFbGVtZW50KXx8dGhpcy5kaXNhYmxlZHx8dGhpcy5fc2V0Rm9jdXNlZCghMCl9KSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsKCgpPT50aGlzLl9zZXRGb2N1c2VkKCExKSkpLHN1cGVyLnJlYWR5KCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwodD0+eyF0LmRlZmF1bHRQcmV2ZW50ZWQmJjk9PT10LmtleUNvZGUmJnQuc2hpZnRLZXkmJih0aGlzLl9pc1NoaWZ0VGFiYmluZz0hMCxIVE1MRWxlbWVudC5wcm90b3R5cGUuZm9jdXMuYXBwbHkodGhpcyksdGhpcy5fc2V0Rm9jdXNlZCghMSksc2V0VGltZW91dCgoKCk9PnRoaXMuX2lzU2hpZnRUYWJiaW5nPSExKSwwKSl9KSksdGhpcy5hdXRvZm9jdXMmJiF0aGlzLmRpc2FibGVkJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3RoaXMuX2ZvY3VzKCksdGhpcy5fc2V0Rm9jdXNlZCghMCksdGhpcy5zZXRBdHRyaWJ1dGUoImZvY3VzLXJpbmciLCIiKX0pKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5oYXNBdHRyaWJ1dGUoImZvY3VzZWQiKSYmdGhpcy5fc2V0Rm9jdXNlZCghMSl9X3NldEZvY3VzZWQodCl7dD90aGlzLnNldEF0dHJpYnV0ZSgiZm9jdXNlZCIsIiIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJmb2N1c2VkIiksdCYmdSR0P3RoaXMuc2V0QXR0cmlidXRlKCJmb2N1cy1yaW5nIiwiIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImZvY3VzLXJpbmciKX1nZXQgZm9jdXNFbGVtZW50KCl7cmV0dXJuIHdpbmRvdy5jb25zb2xlLndhcm4oYFBsZWFzZSBpbXBsZW1lbnQgdGhlICdmb2N1c0VsZW1lbnQnIHByb3BlcnR5IGluIDwke3RoaXMubG9jYWxOYW1lfT5gKSx0aGlzfV9mb2N1cygpe3RoaXMuZm9jdXNFbGVtZW50JiYhdGhpcy5faXNTaGlmdFRhYmJpbmcmJih0aGlzLmZvY3VzRWxlbWVudC5mb2N1cygpLHRoaXMuX3NldEZvY3VzZWQoITApKX1mb2N1cygpe3RoaXMuZm9jdXNFbGVtZW50JiYhdGhpcy5kaXNhYmxlZCYmKHRoaXMuZm9jdXNFbGVtZW50LmZvY3VzKCksdGhpcy5fc2V0Rm9jdXNlZCghMCkpfWJsdXIoKXt0aGlzLmZvY3VzRWxlbWVudCYmKHRoaXMuZm9jdXNFbGVtZW50LmJsdXIoKSx0aGlzLl9zZXRGb2N1c2VkKCExKSl9X2Rpc2FibGVkQ2hhbmdlZCh0KXt0aGlzLmZvY3VzRWxlbWVudC5kaXNhYmxlZD10LHQ/KHRoaXMuYmx1cigpLHRoaXMuX3ByZXZpb3VzVGFiSW5kZXg9dGhpcy50YWJpbmRleCx0aGlzLnRhYmluZGV4PS0xLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIiwidHJ1ZSIpKToodm9pZCAwIT09dGhpcy5fcHJldmlvdXNUYWJJbmRleCYmKHRoaXMudGFiaW5kZXg9dGhpcy5fcHJldmlvdXNUYWJJbmRleCksdGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiKSl9X3RhYmluZGV4Q2hhbmdlZCh0KXt2b2lkIDAhPT10JiYodGhpcy5mb2N1c0VsZW1lbnQudGFiSW5kZXg9dCksdGhpcy5kaXNhYmxlZCYmdGhpcy50YWJpbmRleCYmKC0xIT09dGhpcy50YWJpbmRleCYmKHRoaXMuX3ByZXZpb3VzVGFiSW5kZXg9dGhpcy50YWJpbmRleCksdGhpcy50YWJpbmRleD10PXZvaWQgMCl9Y2xpY2soKXt0aGlzLmRpc2FibGVkfHxzdXBlci5jbGljaygpfX0sZCR0PS9cL1wqXCpccyt2YWFkaW4tZGV2LW1vZGU6c3RhcnQoW1xzXFNdKil2YWFkaW4tZGV2LW1vZGU6ZW5kXHMrXCpcKlwvL2kscCR0PXdpbmRvdy5WYWFkaW4mJndpbmRvdy5WYWFkaW4uRmxvdyYmd2luZG93LlZhYWRpbi5GbG93LmNsaWVudHM7ZnVuY3Rpb24gZiR0KHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpcmV0dXJuO2NvbnN0IG49ZCR0LmV4ZWModC50b1N0cmluZygpKTtpZihuKXRyeXt0PW5ldyBGdW5jdGlvbihuWzFdKX1jYXRjaCh0KXtjb25zb2xlLmxvZygidmFhZGluLWRldmVsb3BtZW50LW1vZGUtZGV0ZWN0b3I6IHVuY29tbWVudEFuZFJ1bigpIGZhaWxlZCIsdCl9cmV0dXJuIHQoZSl9ZnVuY3Rpb24gbSR0KCl7fXdpbmRvdy5WYWFkaW49d2luZG93LlZhYWRpbnx8e30sdm9pZCAwPT09d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGUmJih3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZT0oZnVuY3Rpb24gZyR0KCl7dHJ5e3JldHVybiEhKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInZhYWRpbi5kZXZlbG9wbWVudG1vZGUuZm9yY2UiKX0pKCl8fCEhKGZ1bmN0aW9uIGUoKXtyZXR1cm5bImxvY2FsaG9zdCIsIjEyNy4wLjAuMSJdLmluZGV4T2Yod2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKT49MH0pKCkmJihwJHQ/IShmdW5jdGlvbiBuKCl7cmV0dXJuISEocCR0JiZPYmplY3Qua2V5cyhwJHQpLm1hcCgodD0+cCR0W3RdKSkuZmlsdGVyKCh0PT50LnByb2R1Y3Rpb25Nb2RlKSkubGVuZ3RoPjApfSkoKTohKGZ1bmN0aW9uIGkoKXtyZXR1cm4gZiR0KChmdW5jdGlvbiB0KCl7cmV0dXJuITB9KSl9KSgpKX1jYXRjaCh0KXtyZXR1cm4hMX19KSgpKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IChjKSAyMDIxIFZhYWRpbiBMdGQuCiAgICAgKiBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAgKi8KY2xhc3MgXyR0e3N0YXRpYyBkZXRlY3RTY3JvbGxUeXBlKCl7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LnRleHRDb250ZW50PSJBQkNEIix0LmRpcj0icnRsIix0LnN0eWxlLmZvbnRTaXplPSIxNHB4Iix0LnN0eWxlLndpZHRoPSI0cHgiLHQuc3R5bGUuaGVpZ2h0PSIxcHgiLHQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0LnN0eWxlLnRvcD0iLTEwMDBweCIsdC5zdHlsZS5vdmVyZmxvdz0ic2Nyb2xsIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpO2xldCBlPSJyZXZlcnNlIjtyZXR1cm4gdC5zY3JvbGxMZWZ0PjA/ZT0iZGVmYXVsdCI6KHQuc2Nyb2xsTGVmdD0yLHQuc2Nyb2xsTGVmdDwyJiYoZT0ibmVnYXRpdmUiKSksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KSxlfXN0YXRpYyBnZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0LGUsbil7Y29uc3R7c2Nyb2xsTGVmdDppfT1uO2lmKCJydGwiIT09ZXx8IXQpcmV0dXJuIGk7c3dpdGNoKHQpe2Nhc2UibmVnYXRpdmUiOnJldHVybiBuLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgraTtjYXNlInJldmVyc2UiOnJldHVybiBuLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgtaX1yZXR1cm4gaX1zdGF0aWMgc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQodCxlLG4saSl7aWYoInJ0bCI9PT1lJiZ0KXN3aXRjaCh0KXtjYXNlIm5lZ2F0aXZlIjpuLnNjcm9sbExlZnQ9bi5jbGllbnRXaWR0aC1uLnNjcm9sbFdpZHRoK2k7YnJlYWs7Y2FzZSJyZXZlcnNlIjpuLnNjcm9sbExlZnQ9bi5zY3JvbGxXaWR0aC1uLmNsaWVudFdpZHRoLWk7YnJlYWs7ZGVmYXVsdDpuLnNjcm9sbExlZnQ9aX1lbHNlIG4uc2Nyb2xsTGVmdD1pfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IChjKSAyMDIxIFZhYWRpbiBMdGQuCiAgICAgKiBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAgKi9jb25zdCB5JHQ9W107bGV0IHYkdDtuZXcgTXV0YXRpb25PYnNlcnZlcigoZnVuY3Rpb24oKXtjb25zdCB0PXgkdCgpO3kkdC5mb3JFYWNoKChlPT57YiR0KGUsdCl9KSl9KSkub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQse2F0dHJpYnV0ZXM6ITAsYXR0cmlidXRlRmlsdGVyOlsiZGlyIl19KTtjb25zdCBiJHQ9ZnVuY3Rpb24odCxlLG49dC5nZXRBdHRyaWJ1dGUoImRpciIpKXtlP3Quc2V0QXR0cmlidXRlKCJkaXIiLGUpOm51bGwhPW4mJnQucmVtb3ZlQXR0cmlidXRlKCJkaXIiKX0seCR0PWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRpciIpfSx3JHQ9dD0+Y2xhc3MgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntkaXI6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19fXN0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCksdiR0fHwodiR0PV8kdC5kZXRlY3RTY3JvbGxUeXBlKCkpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhc0F0dHJpYnV0ZSgiZGlyIil8fCh0aGlzLl9fc3Vic2NyaWJlKCksYiR0KHRoaXMseCR0KCksbnVsbCkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LGUsbil7aWYoc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxuKSwiZGlyIiE9PXQpcmV0dXJuO2NvbnN0IGk9eCR0KCkscj1uPT09aSYmLTE9PT15JHQuaW5kZXhPZih0aGlzKSxvPSFuJiZlJiYtMT09PXkkdC5pbmRleE9mKHRoaXMpLGE9biE9PWkmJmU9PT1pO3J8fG8/KHRoaXMuX19zdWJzY3JpYmUoKSxiJHQodGhpcyxpLG4pKTphJiZ0aGlzLl9fc3Vic2NyaWJlKCExKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fX3N1YnNjcmliZSghMSksdGhpcy5yZW1vdmVBdHRyaWJ1dGUoImRpciIpfV92YWx1ZVRvTm9kZUF0dHJpYnV0ZSh0LGUsbil7KCJkaXIiIT09bnx8IiIhPT1lfHx0Lmhhc0F0dHJpYnV0ZSgiZGlyIikpJiZzdXBlci5fdmFsdWVUb05vZGVBdHRyaWJ1dGUodCxlLG4pfV9hdHRyaWJ1dGVUb1Byb3BlcnR5KHQsZSxuKXsiZGlyIiE9PXR8fGU/c3VwZXIuX2F0dHJpYnV0ZVRvUHJvcGVydHkodCxlLG4pOnRoaXMuZGlyPSIifV9fc3Vic2NyaWJlKHQ9ITApe3Q/LTE9PT15JHQuaW5kZXhPZih0aGlzKSYmeSR0LnB1c2godGhpcyk6eSR0LmluZGV4T2YodGhpcyk+LTEmJnkkdC5zcGxpY2UoeSR0LmluZGV4T2YodGhpcyksMSl9X19nZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0KXtyZXR1cm4gXyR0LmdldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHYkdCx0aGlzLmdldEF0dHJpYnV0ZSgiZGlyIil8fCJsdHIiLHQpfV9fc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQodCxlKXtyZXR1cm4gXyR0LnNldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHYkdCx0aGlzLmdldEF0dHJpYnV0ZSgiZGlyIil8fCJsdHIiLHQsZSl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMjEgVmFhZGluIEx0ZC4KICAgICAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICAqLztsZXQgUyR0O3dpbmRvdy5WYWFkaW49d2luZG93LlZhYWRpbnx8e30sd2luZG93LlZhYWRpbi5yZWdpc3RyYXRpb25zPXdpbmRvdy5WYWFkaW4ucmVnaXN0cmF0aW9uc3x8W10sd2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGVDYWxsYmFjaz13aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrfHx7fSx3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrWyJ2YWFkaW4tdXNhZ2Utc3RhdGlzdGljcyJdPWZ1bmN0aW9uKCl7dmFyIHQ7dD1tJHQsd2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGUmJmYkdCh0LHZvaWQgMCl9O2NvbnN0IE0kdD1uZXcgU2V0LEUkdD10PT5jbGFzcyBleHRlbmRzKHckdCh0KSl7c3RhdGljIGZpbmFsaXplKCl7c3VwZXIuZmluYWxpemUoKTtjb25zdHtpczp0fT10aGlzO3QmJiFNJHQuaGFzKHQpJiYod2luZG93LlZhYWRpbi5yZWdpc3RyYXRpb25zLnB1c2godGhpcyksTSR0LmFkZCh0KSx3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrJiYoUyR0PVRuLmRlYm91bmNlKFMkdCx5dCwoKCk9Pnt3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrWyJ2YWFkaW4tdXNhZ2Utc3RhdGlzdGljcyJdKCl9KSksQW4oUyR0KSkpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSxudWxsPT09ZG9jdW1lbnQuZG9jdHlwZSYmY29uc29sZS53YXJuKCdWYWFkaW4gY29tcG9uZW50cyByZXF1aXJlIHRoZSAic3RhbmRhcmRzIG1vZGUiIGRlY2xhcmF0aW9uLiBQbGVhc2UgYWRkIDwhRE9DVFlQRSBodG1sPiB0byB0aGUgSFRNTCBkb2N1bWVudC4nKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBWYWFkaW4gTHRkLgogICAgICogVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgICovO2NsYXNzIFQkdCBleHRlbmRzKEUkdChoJHQoYyR0KHBpKHllKSkpKSl7c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBfZWAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgfQoKICAgICAgICBsYWJlbCB7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICBmbGV4OiBub25lOwogICAgICAgIH0KCiAgICAgICAgaW5wdXRbdHlwZT0nY2hlY2tib3gnXSB7CiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICB0b3A6IDA7CiAgICAgICAgICBsZWZ0OiAwOwogICAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICBjdXJzb3I6IGluaGVyaXQ7CiAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KCiAgICAgIDxsYWJlbD4KICAgICAgICA8c3BhbiBwYXJ0PSJjaGVja2JveCI+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgIGNoZWNrZWQ9Int7Y2hlY2tlZDo6Y2hhbmdlfX0iCiAgICAgICAgICAgIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIgogICAgICAgICAgICBpbmRldGVybWluYXRlPSJ7e2luZGV0ZXJtaW5hdGU6OmNoYW5nZX19IgogICAgICAgICAgICByb2xlPSJwcmVzZW50YXRpb24iCiAgICAgICAgICAgIHRhYmluZGV4PSItMSIKICAgICAgICAgIC8+CiAgICAgICAgPC9zcGFuPgoKICAgICAgICA8c3BhbiBwYXJ0PSJsYWJlbCI+CiAgICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgICAgPC9zcGFuPgogICAgICA8L2xhYmVsPgogICAgYH1zdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1jaGVja2JveCJ9c3RhdGljIGdldCB2ZXJzaW9uKCl7cmV0dXJuIjIwLjAuMiJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2NoZWNrZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jaGVja2VkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxpbmRldGVybWluYXRlOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLG9ic2VydmVyOiJfaW5kZXRlcm1pbmF0ZUNoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0sdmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiJvbiJ9LF9uYXRpdmVDaGVja2JveDp7dHlwZTpPYmplY3R9fX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCl9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5jaGVja2VkP3RoaXMuX3N0b3JlZE5hbWU6IiJ9c2V0IG5hbWUodCl7dGhpcy5fc3RvcmVkTmFtZT10fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsImNoZWNrYm94IiksdGhpcy5fbmF0aXZlQ2hlY2tib3g9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9oYW5kbGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLl9hZGRBY3RpdmVMaXN0ZW5lcnMoKTtjb25zdCB0PXRoaXMuZ2V0QXR0cmlidXRlKCJuYW1lIik7dCYmKHRoaXMubmFtZT10KSx0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW3BhcnR+PSJsYWJlbCJdJykucXVlcnlTZWxlY3Rvcigic2xvdCIpLmFkZEV2ZW50TGlzdGVuZXIoInNsb3RjaGFuZ2UiLHRoaXMuX3VwZGF0ZUxhYmVsQXR0cmlidXRlLmJpbmQodGhpcykpLHRoaXMuX3VwZGF0ZUxhYmVsQXR0cmlidXRlKCl9X3VwZGF0ZUxhYmVsQXR0cmlidXRlKCl7Y29uc3QgdD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW3BhcnR+PSJsYWJlbCJdJyksZT10LmZpcnN0RWxlbWVudENoaWxkLmFzc2lnbmVkTm9kZXMoKTt0aGlzLl9pc0Fzc2lnbmVkTm9kZXNFbXB0eShlKT90LnNldEF0dHJpYnV0ZSgiZW1wdHkiLCIiKTp0LnJlbW92ZUF0dHJpYnV0ZSgiZW1wdHkiKX1faXNBc3NpZ25lZE5vZGVzRW1wdHkodCl7cmV0dXJuIDA9PT10Lmxlbmd0aHx8MT09dC5sZW5ndGgmJnRbMF0ubm9kZVR5cGU9PU5vZGUuVEVYVF9OT0RFJiYiIj09PXRbMF0udGV4dENvbnRlbnQudHJpbSgpfV9jaGVja2VkQ2hhbmdlZCh0KXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIix0aGlzLmluZGV0ZXJtaW5hdGU/Im1peGVkIjpCb29sZWFuKHQpKX1faW5kZXRlcm1pbmF0ZUNoYW5nZWQodCl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsdD8ibWl4ZWQiOnRoaXMuY2hlY2tlZCl9X2FkZEFjdGl2ZUxpc3RlbmVycygpe3RoaXMuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcywiZG93biIsKHQ9Pnt0aGlzLl9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KSYmdGhpcy5zZXRBdHRyaWJ1dGUoImFjdGl2ZSIsIiIpfSkpLHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcywidXAiLCgoKT0+dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFjdGl2ZSIpKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwodD0+e3RoaXMuX19pbnRlcmFjdGlvbnNBbGxvd2VkKHQpJiYzMj09PXQua2V5Q29kZSYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLnNldEF0dHJpYnV0ZSgiYWN0aXZlIiwiIikpfSkpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCh0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJjMyPT09dC5rZXlDb2RlJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYWN0aXZlIiksdGhpcy5pbmRldGVybWluYXRlJiYodGhpcy5pbmRldGVybWluYXRlPSExKSl9KSl9Z2V0IGZvY3VzRWxlbWVudCgpe3JldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKX1fX2ludGVyYWN0aW9uc0FsbG93ZWQodCl7cmV0dXJuIXRoaXMuZGlzYWJsZWQmJiJhIiE9PXQudGFyZ2V0LmxvY2FsTmFtZX1faGFuZGxlQ2xpY2sodCl7dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJih0aGlzLmluZGV0ZXJtaW5hdGU/KHRoaXMuaW5kZXRlcm1pbmF0ZT0hMSx0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fdG9nZ2xlQ2hlY2tlZCgpKTp0LmNvbXBvc2VkUGF0aCgpWzBdIT09dGhpcy5fbmF0aXZlQ2hlY2tib3gmJih0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fdG9nZ2xlQ2hlY2tlZCgpKSl9X3RvZ2dsZUNoZWNrZWQoKXt0aGlzLmNoZWNrZWQ9IXRoaXMuY2hlY2tlZCx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjaGFuZ2UiLHtjb21wb3NlZDohMSxidWJibGVzOiEwfSkpfX1jdXN0b21FbGVtZW50cy5kZWZpbmUoVCR0LmlzLFQkdCksJFh0KCJ2YWFkaW4tZ3JpZCIsR1h0YAogICAgOmhvc3QgewogICAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUtbSk7CiAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXMpOwogICAgICBjb2xvcjogdmFyKC0tbHVtby1ib2R5LXRleHQtY29sb3IpOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwoKICAgICAgLyogRm9yIGludGVybmFsIHVzZSBvbmx5ICovCiAgICAgIC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICAtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0xMHBjdCk7CiAgICAgIC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGg6IDFweDsKICAgICAgLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTEwcGN0KTsKICAgIH0KCiAgICAvKiBObyAob3V0ZXIpIGJvcmRlciAqLwoKICAgIDpob3N0KDpub3QoW3RoZW1lfj0nbm8tYm9yZGVyJ10pKSB7CiAgICAgIGJvcmRlcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBDZWxsIHN0eWxlcyAqLwoKICAgIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgbWluLWhlaWdodDogdmFyKC0tbHVtby1zaXplLW0pOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBwYWRkaW5nOiB2YXIoLS1sdW1vLXNwYWNlLXhzKSB2YXIoLS1sdW1vLXNwYWNlLW0pOwogICAgfQoKICAgIC8qIEFwcGx5IHJvdyBib3JkZXJzIGJ5IGRlZmF1bHQgYW5kIGludHJvZHVjZSB0aGUgIm5vLXJvdy1ib3JkZXJzIiB2YXJpYW50ICovCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydH49J2NlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItdG9wOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBIaWRlIGZpcnN0IGJvZHkgcm93IHRvcCBib3JkZXIgKi8KICAgIDpob3N0KDpub3QoW3RoZW1lfj0nbm8tcm93LWJvcmRlcnMnXSkpIFtwYXJ0PSdyb3cnXVtmaXJzdF0gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXRvcDogMDsKICAgICAgbWluLWhlaWdodDogY2FsYyh2YXIoLS1sdW1vLXNpemUtbSkgLSB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkpOwogICAgfQoKICAgIC8qIEZvY3VzLXJpbmcgKi8KCiAgICBbcGFydH49J2NlbGwnXTpmb2N1cyB7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgOmhvc3QoW25hdmlnYXRpbmddKSBbcGFydH49J2NlbGwnXTpmb2N1czo6YmVmb3JlIHsKICAgICAgY29udGVudDogJyc7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBsZWZ0OiAwOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMnB4IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdCk7CiAgICB9CgogICAgLyogRHJhZyBhbmQgRHJvcCBzdHlsZXMgKi8KICAgIDpob3N0KFtkcmFnb3Zlcl0pOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHotaW5kZXg6IDEwMDsKICAgICAgdG9wOiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBsZWZ0OiAwOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMnB4IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdCk7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcl0gewogICAgICB6LWluZGV4OiAxMDAgIWltcG9ydGFudDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyXSBbcGFydH49J2NlbGwnXSB7CiAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdIFtwYXJ0fj0nY2VsbCddOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgaGVpZ2h0OiBjYWxjKHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSArIDJweCk7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIDpob3N0KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pIFtkcmFnb3Zlcl0gW3BhcnR+PSdjZWxsJ106OmFmdGVyIHsKICAgICAgaGVpZ2h0OiAycHg7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcj0nYmVsb3cnXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICB0b3A6IDEwMCU7CiAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgbWFyZ2luLXRvcDogLTFweDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyPSdhYm92ZSddIFtwYXJ0fj0nY2VsbCddOjphZnRlciB7CiAgICAgIHRvcDogYXV0bzsKICAgICAgYm90dG9tOiAxMDAlOwogICAgICBtYXJnaW4tYm90dG9tOiAtMXB4OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZGV0YWlscy1vcGVuZWRdW2RyYWdvdmVyPSdiZWxvdyddIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKTo6YWZ0ZXIsCiAgICBbcGFydH49J3JvdyddW2RldGFpbHMtb3BlbmVkXVtkcmFnb3Zlcj0nYWJvdmUnXSBbcGFydH49J2RldGFpbHMtY2VsbCddOjphZnRlciB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcl1bZHJhZ292ZXI9J29uLXRvcCddIFtwYXJ0fj0nY2VsbCddOjphZnRlciB7CiAgICAgIGhlaWdodDogMTAwJTsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gewogICAgICAvKiBBZGQgYm90dG9tLXNwYWNlIHRvIHRoZSByb3cgc28gdGhlIGRyYWcgbnVtYmVyIGRvZXNuJ3QgZ2V0IGNsaXBwZWQuIE5lZWRlZCBmb3IgSUUvRWRnZSAqLwogICAgICBib3JkZXItYm90dG9tOiAxMDBweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgei1pbmRleDogMTAwICFpbXBvcnRhbnQ7CiAgICAgIG9wYWNpdHk6IDAuOTsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ10gewogICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXVtsYXN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ11bZmlyc3QtY29sdW1uXSB7CiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSAwIDAgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpOwogICAgfQoKICAgIFtpb3NdIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXSB7CiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdCk7CiAgICB9CgogICAgI3Njcm9sbGVyOm5vdChbaW9zXSkgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdOm5vdChbZHJhZ3N0YXJ0PScnXSk6OmFmdGVyIHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgbGVmdDogdmFyKC0tX2dyaWQtZHJhZy1zdGFydC14KTsKICAgICAgdG9wOiB2YXIoLS1fZ3JpZC1kcmFnLXN0YXJ0LXkpOwogICAgICB6LWluZGV4OiAxMDA7CiAgICAgIGNvbnRlbnQ6IGF0dHIoZHJhZ3N0YXJ0KTsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBhZGRpbmc6IGNhbGModmFyKC0tbHVtby1zcGFjZS14cykgKiAwLjgpOwogICAgICBjb2xvcjogdmFyKC0tbHVtby1lcnJvci1jb250cmFzdC1jb2xvcik7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tZXJyb3ItY29sb3IpOwogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtbSk7CiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1sdW1vLWZvbnQtZmFtaWx5KTsKICAgICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14eHMpOwogICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgdGV4dC10cmFuc2Zvcm06IGluaXRpYWw7CiAgICAgIGxldHRlci1zcGFjaW5nOiBpbml0aWFsOwogICAgICBtaW4td2lkdGg6IGNhbGModmFyKC0tbHVtby1zaXplLXMpICogMC43KTsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgfQoKICAgIC8qIEhlYWRlcnMgYW5kIGZvb3RlcnMgKi8KCiAgICBbcGFydH49J2hlYWRlci1jZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCksCiAgICBbcGFydH49J2Zvb3Rlci1jZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCksCiAgICBbcGFydH49J3Jlb3JkZXItZ2hvc3QnXSB7CiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUtcyk7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICB9CgogICAgW3BhcnR+PSdmb290ZXItY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgIH0KCiAgICBbcGFydD0ncm93J106b25seS1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBtaW4taGVpZ2h0OiB2YXIoLS1sdW1vLXNpemUteGwpOwogICAgfQoKICAgIC8qIEhlYWRlciBib3JkZXJzICovCgogICAgLyogSGlkZSBmaXJzdCBoZWFkZXIgcm93IHRvcCBib3JkZXIgKi8KICAgIDpob3N0KDpub3QoW3RoZW1lfj0nbm8tcm93LWJvcmRlcnMnXSkpIFtwYXJ0PSdyb3cnXTpmaXJzdC1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBib3JkZXItdG9wOiAwOwogICAgfQoKICAgIFtwYXJ0PSdyb3cnXTpsYXN0LWNoaWxkIFtwYXJ0fj0naGVhZGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci1ib3R0b206IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J106bGFzdC1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIE92ZXJmbG93IHVzZXMgYSBzdHJvbmdlciBib3JkZXIgY29sb3IgKi8KICAgIDpob3N0KFtvdmVyZmxvd349J3RvcCddKSBbcGFydD0ncm93J106bGFzdC1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogRm9vdGVyIGJvcmRlcnMgKi8KCiAgICBbcGFydD0ncm93J106Zmlyc3QtY2hpbGQgW3BhcnR+PSdmb290ZXItY2VsbCddIHsKICAgICAgYm9yZGVyLXRvcDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHRyYW5zcGFyZW50OwogICAgfQoKICAgIDpob3N0KDpub3QoW3RoZW1lfj0nbm8tcm93LWJvcmRlcnMnXSkpIFtwYXJ0PSdyb3cnXTpmaXJzdC1jaGlsZCBbcGFydH49J2Zvb3Rlci1jZWxsJ10gewogICAgICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIE92ZXJmbG93IHVzZXMgYSBzdHJvbmdlciBib3JkZXIgY29sb3IgKi8KICAgIDpob3N0KFtvdmVyZmxvd349J2JvdHRvbSddKSBbcGFydD0ncm93J106Zmlyc3QtY2hpbGQgW3BhcnR+PSdmb290ZXItY2VsbCddIHsKICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIENvbHVtbiByZW9yZGVyaW5nICovCgogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J2NlbGwnXSB7CiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgdmFyKC0tbHVtby1zaGFkZS0yMHBjdCkpIHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgICB9CgogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J2NlbGwnXVtyZW9yZGVyLXN0YXR1cz0nYWxsb3dlZCddIHsKICAgICAgYmFja2dyb3VuZDogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0nY2VsbCddW3Jlb3JkZXItc3RhdHVzPSdkcmFnZ2luZyddIHsKICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHZhcigtLWx1bW8tY29udHJhc3QtNXBjdCksIHZhcigtLWx1bW8tY29udHJhc3QtNXBjdCkpIHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgICB9CgogICAgW3BhcnR+PSdyZW9yZGVyLWdob3N0J10gewogICAgICBvcGFjaXR5OiAwLjg1OwogICAgICBib3gtc2hhZG93OiB2YXIoLS1sdW1vLWJveC1zaGFkb3ctcyk7CiAgICAgIC8qIFRPRE8gVXNlIHRoZSBzYW1lIHN0eWxlcyBhcyBmb3IgdGhlIGNlbGwgZWxlbWVudCAocmVvcmRlci1naG9zdCBjb3BpZXMgc3R5bGVzIGZyb20gdGhlIGNlbGwgZWxlbWVudCkgKi8KICAgICAgcGFkZGluZzogdmFyKC0tbHVtby1zcGFjZS1zKSB2YXIoLS1sdW1vLXNwYWNlLW0pICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLyogQ29sdW1uIHJlc2l6aW5nICovCgogICAgW3BhcnQ9J3Jlc2l6ZS1oYW5kbGUnXSB7CiAgICAgIHdpZHRoOiAzcHg7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdCk7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAgIH0KCiAgICA6aG9zdCg6bm90KFtyZW9yZGVyaW5nXSkpICo6bm90KFtjb2x1bW4tcmVzaXppbmddKSBbcGFydH49J2NlbGwnXTpob3ZlciBbcGFydD0ncmVzaXplLWhhbmRsZSddLAogICAgW3BhcnQ9J3Jlc2l6ZS1oYW5kbGUnXTphY3RpdmUgewogICAgICBvcGFjaXR5OiAxOwogICAgICB0cmFuc2l0aW9uLWRlbGF5OiAwLjE1czsKICAgIH0KCiAgICAvKiBDb2x1bW4gYm9yZGVycyAqLwoKICAgIDpob3N0KFt0aGVtZX49J2NvbHVtbi1ib3JkZXJzJ10pIFtwYXJ0fj0nY2VsbCddOm5vdChbbGFzdC1jb2x1bW5dKTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItcmlnaHQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIEZyb3plbiBjb2x1bW5zICovCgogICAgW2xhc3QtZnJvemVuXSB7CiAgICAgIGJvcmRlci1yaWdodDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHRyYW5zcGFyZW50OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIDpob3N0KFtvdmVyZmxvd349J2xlZnQnXSkgW3BhcnR+PSdjZWxsJ11bbGFzdC1mcm96ZW5dOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIFJvdyBzdHJpcGVzICovCgogICAgOmhvc3QoW3RoZW1lfj0ncm93LXN0cmlwZXMnXSkgW3BhcnR+PSdyb3cnXTpub3QoW29kZF0pIFtwYXJ0fj0nYm9keS1jZWxsJ10sCiAgICA6aG9zdChbdGhlbWV+PSdyb3ctc3RyaXBlcyddKSBbcGFydH49J3JvdyddOm5vdChbb2RkXSkgW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSB7CiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpLCB2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpKTsKICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OwogICAgfQoKICAgIC8qIFNlbGVjdGVkIHJvdyAqLwoKICAgIC8qIFJhaXNlIHRoZSBzZWxlY3RlZCByb3dzIGFib3ZlIHVuc2VsZWN0ZWQgcm93cyAoc28gdGhhdCBib3gtc2hhZG93IGNhbiBjb3ZlciB1bnNlbGVjdGVkIHJvd3MpICovCiAgICA6aG9zdCg6bm90KFtyZW9yZGVyaW5nXSkpIFtwYXJ0fj0ncm93J11bc2VsZWN0ZWRdIHsKICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICA6aG9zdCg6bm90KFtyZW9yZGVyaW5nXSkpIFtwYXJ0fj0ncm93J11bc2VsZWN0ZWRdIFtwYXJ0fj0nYm9keS1jZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHZhcigtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yKSwgdmFyKC0tX2x1bW8tZ3JpZC1zZWxlY3RlZC1yb3ctY29sb3IpKTsKICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDsKICAgIH0KCiAgICAvKiBDb3ZlciB0aGUgYm9yZGVyIG9mIGFuIHVuc2VsZWN0ZWQgcm93ICovCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydH49J3JvdyddW3NlbGVjdGVkXSBbcGFydH49J2NlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3gtc2hhZG93OiAwIHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSAwIDAgdmFyKC0tX2x1bW8tZ3JpZC1zZWxlY3RlZC1yb3ctY29sb3IpOwogICAgfQoKICAgIC8qIENvbXBhY3QgKi8KCiAgICA6aG9zdChbdGhlbWV+PSdjb21wYWN0J10pIFtwYXJ0PSdyb3cnXTpvbmx5LWNoaWxkIFtwYXJ0fj0naGVhZGVyLWNlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS1tKTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSdjb21wYWN0J10pIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgbWluLWhlaWdodDogdmFyKC0tbHVtby1zaXplLXMpOwogICAgfQoKICAgIDpob3N0KFt0aGVtZX49J2NvbXBhY3QnXSkgW3BhcnQ9J3JvdyddW2ZpcnN0XSBbcGFydH49J2NlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBtaW4taGVpZ2h0OiBjYWxjKHZhcigtLWx1bW8tc2l6ZS1zKSAtIHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSk7CiAgICB9CgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIHBhZGRpbmc6IHZhcigtLWx1bW8tc3BhY2UteHMpIHZhcigtLWx1bW8tc3BhY2Utcyk7CiAgICB9CgogICAgLyogV3JhcCBjZWxsIGNvbnRlbnRzICovCgogICAgOmhvc3QoW3RoZW1lfj0nd3JhcC1jZWxsLWNvbnRlbnQnXSkgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgfQoKICAgIC8qIFJUTCBzcGVjaWZpYyBzdHlsZXMgKi8KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2xhc3QtY29sdW1uXSB7CiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSAwIDAgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpOwogICAgfQoKICAgIDpob3N0KFtkaXI9J3J0bCddKSBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ11bZmlyc3QtY29sdW1uXSB7CiAgICAgIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSAwOwogICAgfQoKICAgIDpob3N0KFtkaXI9J3J0bCddW3RoZW1lfj0nY29sdW1uLWJvcmRlcnMnXSkgW3BhcnR+PSdjZWxsJ106bm90KFtsYXN0LWNvbHVtbl0pOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgYm9yZGVyLWxlZnQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIDpob3N0KFtkaXI9J3J0bCddKSBbbGFzdC1mcm96ZW5dIHsKICAgICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgICBib3JkZXItbGVmdDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHRyYW5zcGFyZW50OwogICAgfQoKICAgIDpob3N0KFtkaXI9J3J0bCddW292ZXJmbG93fj0ncmlnaHQnXSkgW3BhcnR+PSdjZWxsJ11bbGFzdC1mcm96ZW5dOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcik7CiAgICB9CiAgYCx7bW9kdWxlSWQ6Imx1bW8tZ3JpZCJ9KSwkWHQoInZhYWRpbi1jaGVja2JveCIsR1h0YAogICAgOmhvc3QoLnZhYWRpbi1ncmlkLXNlbGVjdC1hbGwtY2hlY2tib3gpIHsKICAgICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKTsKICAgIH0KICBgLHttb2R1bGVJZDoidmFhZGluLWdyaWQtc2VsZWN0LWFsbC1jaGVja2JveC1sdW1vIn0pOwovKioKICAgIEBsaWNlbnNlCiAgICBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogICAgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICAgIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogICAgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICAgIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAgICAqLwpjb25zdCBDJHQ9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpob25lfGFkOyg/OiBVOyk/IENQVSkgT1MgKFxkKykvKSxBJHQ9QyR0JiZDJHRbMV0+PTgsayR0PUlyKHtiZWhhdmlvcnM6W2dvLERvXSxfcmF0aW86LjUsX3Njcm9sbGVyUGFkZGluZ1RvcDowLF9zY3JvbGxQb3NpdGlvbjowLF9waHlzaWNhbFNpemU6MCxfcGh5c2ljYWxBdmVyYWdlOjAsX3BoeXNpY2FsQXZlcmFnZUNvdW50OjAsX3BoeXNpY2FsVG9wOjAsX3ZpcnR1YWxDb3VudDowLF9lc3RTY3JvbGxIZWlnaHQ6MCxfc2Nyb2xsSGVpZ2h0OjAsX3ZpZXdwb3J0SGVpZ2h0OjAsX3ZpZXdwb3J0V2lkdGg6MCxfcGh5c2ljYWxJdGVtczpudWxsLF9waHlzaWNhbFNpemVzOm51bGwsX2ZpcnN0VmlzaWJsZUluZGV4VmFsOm51bGwsX2xhc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbWF4UGFnZXM6MixfZm9jdXNlZFZpcnR1YWxJbmRleDotMSxfdGVtcGxhdGVDb3N0OjAsZ2V0IF9waHlzaWNhbEJvdHRvbSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9waHlzaWNhbFNpemV9LGdldCBfc2Nyb2xsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX3ZpcnR1YWxFbmQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMX0sZ2V0IF9oaWRkZW5Db250ZW50U2l6ZSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFNpemUtdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfbWF4U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl92aWV3cG9ydEhlaWdodCt0aGlzLl9zY3JvbGxPZmZzZXR9LGdldCBfbWF4VmlydHVhbFN0YXJ0KCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3BoeXNpY2FsQ291bnQpfSxzZXQgX3ZpcnR1YWxTdGFydCh0KXt0PXRoaXMuX2NsYW1wKHQsMCx0aGlzLl9tYXhWaXJ0dWFsU3RhcnQpLHRoaXMuX3ZpcnR1YWxTdGFydFZhbD10fSxnZXQgX3ZpcnR1YWxTdGFydCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnRWYWx8fDB9LHNldCBfcGh5c2ljYWxTdGFydCh0KXsodCU9dGhpcy5fcGh5c2ljYWxDb3VudCk8MCYmKHQ9dGhpcy5fcGh5c2ljYWxDb3VudCt0KSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPXR9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQodCl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD10fSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gMD09PXRoaXMuX3ZpZXdwb3J0SGVpZ2h0PzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe2xldCB0PXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKG51bGw9PXQpe2xldCBlPXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDt0PXRoaXMuX2l0ZXJhdGVJdGVtcygoZnVuY3Rpb24odCxuKXtpZihlKz10aGlzLl9waHlzaWNhbFNpemVzW3RdLGU+dGhpcy5fc2Nyb2xsUG9zaXRpb24pcmV0dXJuIG59KSl8fDAsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9dH1yZXR1cm4gdH0sZ2V0IGxhc3RWaXNpYmxlSW5kZXgoKXtsZXQgdD10aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsO2lmKG51bGw9PXQpe2xldCBlPXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDt0aGlzLl9pdGVyYXRlSXRlbXMoKGZ1bmN0aW9uKG4saSl7ZTx0aGlzLl9zY3JvbGxCb3R0b20mJih0PWkpLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbbl19KSksdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD10fXJldHVybiB0fSxnZXQgX3Njcm9sbE9mZnNldCgpe3JldHVybiB0aGlzLl9zY3JvbGxlclBhZGRpbmdUb3B9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixfdCksdGhpcy5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpfSx1cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXM6ZnVuY3Rpb24oKXtjb25zdCB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpO3RoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcD10aGlzLnNjcm9sbFRhcmdldD09PXRoaXM/MDpwYXJzZUludCh0WyJwYWRkaW5nLXRvcCJdLDEwKSx0aGlzLl9pc1JUTD1Cb29sZWFuKCJydGwiPT09dC5kaXJlY3Rpb24pLHRoaXMuX3ZpZXdwb3J0V2lkdGg9dGhpcy4kLml0ZW1zLm9mZnNldFdpZHRoLHRoaXMuX3ZpZXdwb3J0SGVpZ2h0PXRoaXMuX3Njcm9sbFRhcmdldEhlaWdodH0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXtjb25zdCB0PU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5fbWF4U2Nyb2xsVG9wLHRoaXMuX3Njcm9sbFRvcCkpO2xldCBlPXQtdGhpcy5fc2Nyb2xsUG9zaXRpb247Y29uc3Qgbj1lPj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPXQsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnMoZSk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7ZS09dGhpcy5fc2Nyb2xsT2Zmc2V0O2NvbnN0IHQ9TWF0aC5yb3VuZChlL3RoaXMuX3BoeXNpY2FsQXZlcmFnZSk7dGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydCt0LHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCt0LHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UsdGhpcy5fdXBkYXRlKCl9ZWxzZSBpZih0aGlzLl9waHlzaWNhbENvdW50PjApe2NvbnN0e3BoeXNpY2FsVG9wOnQsaW5kZXhlczplfT10aGlzLl9nZXRSZXVzYWJsZXMobik7bj8odGhpcy5fcGh5c2ljYWxUb3A9dCx0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K2UubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtlLmxlbmd0aCk6KHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQtZS5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0LWUubGVuZ3RoKSx0aGlzLl91cGRhdGUoZSxuP251bGw6ZSksdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLDApLHZ0KX19LF9nZXRSZXVzYWJsZXM6ZnVuY3Rpb24odCl7bGV0IGUsbixpO2NvbnN0IHI9W10sbz10aGlzLl9oaWRkZW5Db250ZW50U2l6ZSp0aGlzLl9yYXRpbyxhPXRoaXMuX3ZpcnR1YWxTdGFydCxzPXRoaXMuX3ZpcnR1YWxFbmQsbD10aGlzLl9waHlzaWNhbENvdW50O2xldCBjPXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDtjb25zdCB1PXRoaXMuX3Njcm9sbFRvcCxoPXRoaXMuX3Njcm9sbEJvdHRvbTtmb3IodD8oZT10aGlzLl9waHlzaWNhbFN0YXJ0LG49dS1jKTooZT10aGlzLl9waHlzaWNhbEVuZCxuPXRoaXMuX3BoeXNpY2FsQm90dG9tK3RoaXMuX3Njcm9sbE9mZnNldC1oKTtpPXRoaXMuX3BoeXNpY2FsU2l6ZXNbZV0sbi09aSwhKHIubGVuZ3RoPj1sfHxuPD1vKTspaWYodCl7aWYocytyLmxlbmd0aCsxPj10aGlzLl92aXJ0dWFsQ291bnQpYnJlYWs7aWYoYytpPj11LXRoaXMuX3Njcm9sbE9mZnNldClicmVhaztyLnB1c2goZSksYys9aSxlPShlKzEpJWx9ZWxzZXtpZihhLXIubGVuZ3RoPD0wKWJyZWFrO2lmKGMrdGhpcy5fcGh5c2ljYWxTaXplLWk8PWgpYnJlYWs7ci5wdXNoKGUpLGMtPWksZT0wPT09ZT9sLTE6ZS0xfXJldHVybntpbmRleGVzOnIscGh5c2ljYWxUb3A6Yy10aGlzLl9zY3JvbGxPZmZzZXR9fSxfdXBkYXRlOmZ1bmN0aW9uKHQsZSl7aWYoISh0JiYwPT09dC5sZW5ndGh8fDA9PT10aGlzLl9waHlzaWNhbENvdW50KSl7aWYodGhpcy5fYXNzaWduTW9kZWxzKHQpLHRoaXMuX3VwZGF0ZU1ldHJpY3ModCksZSlmb3IoO2UubGVuZ3RoOyl7Y29uc3QgdD1lLnBvcCgpO3RoaXMuX3BoeXNpY2FsVG9wLT10aGlzLl9waHlzaWNhbFNpemVzW3RdfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9pc0NsaWVudEZ1bGw6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbEJvdHRvbS0xPj10aGlzLl9zY3JvbGxCb3R0b20mJnRoaXMuX3BoeXNpY2FsVG9wPD10aGlzLl9zY3JvbGxQb3NpdGlvbn0sX2luY3JlYXNlUG9vbElmTmVlZGVkOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fY2xhbXAodGhpcy5fcGh5c2ljYWxDb3VudCt0LDMsdGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCktdGhpcy5fcGh5c2ljYWxDb3VudDtsZXQgbj1NYXRoLnJvdW5kKC41KnRoaXMuX3BoeXNpY2FsQ291bnQpO2lmKCEoZTwwKSl7aWYoZT4wKXtjb25zdCB0PXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtbXS5wdXNoLmFwcGx5KHRoaXMuX3BoeXNpY2FsSXRlbXMsdGhpcy5fY3JlYXRlUG9vbChlKSk7Zm9yKGxldCB0PTA7dDxlO3QrKyl0aGlzLl9waHlzaWNhbFNpemVzLnB1c2goMCk7dGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50K2UsdGhpcy5fcGh5c2ljYWxTdGFydD50aGlzLl9waHlzaWNhbEVuZCYmdGhpcy5faXNJbmRleFJlbmRlcmVkKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpJiZ0aGlzLl9nZXRQaHlzaWNhbEluZGV4KHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpPHRoaXMuX3BoeXNpY2FsRW5kJiYodGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K2UpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX3RlbXBsYXRlQ29zdD0od2luZG93LnBlcmZvcm1hbmNlLm5vdygpLXQpL2Usbj1NYXRoLnJvdW5kKC41KnRoaXMuX3BoeXNpY2FsQ291bnQpfXRoaXMuX3ZpcnR1YWxFbmQ+PXRoaXMuX3ZpcnR1YWxDb3VudC0xfHwwPT09bnx8KHRoaXMuX2lzQ2xpZW50RnVsbCgpP3RoaXMuX3BoeXNpY2FsU2l6ZTx0aGlzLl9vcHRQaHlzaWNhbFNpemUmJnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyx0aGlzLl9jbGFtcChNYXRoLnJvdW5kKDUwL3RoaXMuX3RlbXBsYXRlQ29zdCksMSxuKSkseXQpOnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyxuKSx2dCkpfX0sX3JlbmRlcjpmdW5jdGlvbigpe2lmKHRoaXMuaXNBdHRhY2hlZCYmdGhpcy5faXNWaXNpYmxlKWlmKDAhPT10aGlzLl9waHlzaWNhbENvdW50KXtjb25zdHtwaHlzaWNhbFRvcDp0LGluZGV4ZXM6ZX09dGhpcy5fZ2V0UmV1c2FibGVzKCEwKTt0aGlzLl9waHlzaWNhbFRvcD10LHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrZS5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K2UubGVuZ3RoLHRoaXMuX3VwZGF0ZShlKSx0aGlzLl91cGRhdGUoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKX1lbHNlIHRoaXMuX3ZpcnR1YWxDb3VudD4wJiYodGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgzKSl9LF9pdGVtc0NoYW5nZWQ6ZnVuY3Rpb24odCl7Iml0ZW1zIj09PXQucGF0aCYmKHRoaXMuX3ZpcnR1YWxTdGFydD0wLHRoaXMuX3BoeXNpY2FsVG9wPTAsdGhpcy5fdmlydHVhbENvdW50PXRoaXMuaXRlbXM/dGhpcy5pdGVtcy5sZW5ndGg6MCx0aGlzLl9waHlzaWNhbEluZGV4Rm9yS2V5PXt9LHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX3BoeXNpY2FsQ291bnQ9dGhpcy5fcGh5c2ljYWxDb3VudHx8MCx0aGlzLl9waHlzaWNhbEl0ZW1zPXRoaXMuX3BoeXNpY2FsSXRlbXN8fFtdLHRoaXMuX3BoeXNpY2FsU2l6ZXM9dGhpcy5fcGh5c2ljYWxTaXplc3x8W10sdGhpcy5fcGh5c2ljYWxTdGFydD0wLHRoaXMuX3Njcm9sbFRvcD50aGlzLl9zY3JvbGxPZmZzZXQmJnRoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24oMCksdGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixfdCkpfSxfaXRlcmF0ZUl0ZW1zOmZ1bmN0aW9uKHQsZSl7bGV0IG4saSxyLG87aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgmJmUpe2ZvcihvPTA7bzxlLmxlbmd0aDtvKyspaWYobj1lW29dLGk9dGhpcy5fY29tcHV0ZVZpZHgobiksbnVsbCE9KHI9dC5jYWxsKHRoaXMsbixpKSkpcmV0dXJuIHJ9ZWxzZXtmb3Iobj10aGlzLl9waHlzaWNhbFN0YXJ0LGk9dGhpcy5fdmlydHVhbFN0YXJ0O248dGhpcy5fcGh5c2ljYWxDb3VudDtuKyssaSsrKWlmKG51bGwhPShyPXQuY2FsbCh0aGlzLG4saSkpKXJldHVybiByO2ZvcihuPTA7bjx0aGlzLl9waHlzaWNhbFN0YXJ0O24rKyxpKyspaWYobnVsbCE9KHI9dC5jYWxsKHRoaXMsbixpKSkpcmV0dXJuIHJ9fSxfY29tcHV0ZVZpZHg6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PXRoaXMuX3BoeXNpY2FsU3RhcnQ/dGhpcy5fdmlydHVhbFN0YXJ0Kyh0LXRoaXMuX3BoeXNpY2FsU3RhcnQpOnRoaXMuX3ZpcnR1YWxTdGFydCsodGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl9waHlzaWNhbFN0YXJ0KSt0fSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbih0KXtpZighdGhpcy5faXNWaXNpYmxlKXJldHVybjtEaSgpO2xldCBlPTAsbj0wO2NvbnN0IGk9dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQscj10aGlzLl9waHlzaWNhbEF2ZXJhZ2U7dGhpcy5faXRlcmF0ZUl0ZW1zKChmdW5jdGlvbih0KXtuKz10aGlzLl9waHlzaWNhbFNpemVzW3RdLHRoaXMuX3BoeXNpY2FsU2l6ZXNbdF09dGhpcy5fcGh5c2ljYWxJdGVtc1t0XS5vZmZzZXRIZWlnaHQsZSs9dGhpcy5fcGh5c2ljYWxTaXplc1t0XSx0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCs9dGhpcy5fcGh5c2ljYWxTaXplc1t0XT8xOjB9KSx0KSx0aGlzLl9waHlzaWNhbFNpemU9dGhpcy5fcGh5c2ljYWxTaXplK2Utbix0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCE9PWkmJih0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9TWF0aC5yb3VuZCgocippK2UpL3RoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50KSl9LF9wb3NpdGlvbkl0ZW1zOmZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0U2Nyb2xsUG9zaXRpb24oKTtsZXQgdD10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMoKGZ1bmN0aW9uKGUpe3RoaXMudHJhbnNsYXRlM2QoMCx0KyJweCIsMCx0aGlzLl9waHlzaWNhbEl0ZW1zW2VdKSx0Kz10aGlzLl9waHlzaWNhbFNpemVzW2VdfSkpfSxfYWRqdXN0U2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oKXtjb25zdCB0PTA9PT10aGlzLl92aXJ0dWFsU3RhcnQ/dGhpcy5fcGh5c2ljYWxUb3A6TWF0aC5taW4odGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fcGh5c2ljYWxUb3AsMCk7aWYoMCE9PXQpe3RoaXMuX3BoeXNpY2FsVG9wPXRoaXMuX3BoeXNpY2FsVG9wLXQ7Y29uc3QgZT10aGlzLl9zY3JvbGxUb3A7IUEkdCYmZT4wJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKGUtdCl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbih0KXt0aGlzLnNjcm9sbFRhcmdldCYmdD49MCYmKHRoaXMuX3Njcm9sbFRvcD10LHRoaXMuX3Njcm9sbFBvc2l0aW9uPXRoaXMuX3Njcm9sbFRvcCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24odCl7dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0PXRoaXMuX3BoeXNpY2FsQm90dG9tK01hdGgubWF4KHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCwwKSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UsKCh0PSh0PXR8fDA9PT10aGlzLl9zY3JvbGxIZWlnaHQpfHx0aGlzLl9zY3JvbGxQb3NpdGlvbj49dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3BoeXNpY2FsU2l6ZSl8fE1hdGguYWJzKHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9zY3JvbGxIZWlnaHQpPj10aGlzLl92aWV3cG9ydEhlaWdodCkmJih0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCsicHgiLHRoaXMuX3Njcm9sbEhlaWdodD10aGlzLl9lc3RTY3JvbGxIZWlnaHQpfSxzY3JvbGxUb0luZGV4OmZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdHx8dDwwfHx0PnRoaXMuaXRlbXMubGVuZ3RoLTEpcmV0dXJuO2lmKERpKCksMD09PXRoaXMuX3BoeXNpY2FsQ291bnQpcmV0dXJuO3Q9dGhpcy5fY2xhbXAodCwwLHRoaXMuX3ZpcnR1YWxDb3VudC0xKSwoIXRoaXMuX2lzSW5kZXhSZW5kZXJlZCh0KXx8dD49dGhpcy5fbWF4VmlydHVhbFN0YXJ0KSYmKHRoaXMuX3ZpcnR1YWxTdGFydD10LTEpLHRoaXMuX2Fzc2lnbk1vZGVscygpLHRoaXMuX3VwZGF0ZU1ldHJpY3MoKSx0aGlzLl9waHlzaWNhbFRvcD1NYXRoLmZsb29yKHRoaXMuX3ZpcnR1YWxTdGFydCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlO2xldCBlPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQsaT0wO2NvbnN0IHI9dGhpcy5faGlkZGVuQ29udGVudFNpemU7Zm9yKDtuPHQmJmk8PXI7KWkrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbZV0sZT0oZSsxKSV0aGlzLl9waHlzaWNhbENvdW50LG4rKzt0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoITApLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCtpKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKSx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbH0sX3Jlc2V0QXZlcmFnZTpmdW5jdGlvbigpe3RoaXMuX3BoeXNpY2FsQXZlcmFnZT0wLHRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50PTB9LF9yZXNpemVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLChmdW5jdGlvbigpe3RoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy5faXNWaXNpYmxlPyh0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCEwKSx0aGlzLl9yZXNldEF2ZXJhZ2UoKSx0aGlzLl9yZW5kZXIoKSk6dGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMSl9KSxfdCl9LF9pc0luZGV4UmVuZGVyZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PXRoaXMuX3ZpcnR1YWxTdGFydCYmdDw9dGhpcy5fdmlydHVhbEVuZH0sX2dldFBoeXNpY2FsSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrKHQtdGhpcy5fdmlydHVhbFN0YXJ0KSkldGhpcy5fcGh5c2ljYWxDb3VudH0sX2NsYW1wOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5taW4obixNYXRoLm1heChlLHQpKX0sX2RlYm91bmNlOmZ1bmN0aW9uKHQsZSxuKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbdF09VG4uZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1t0XSxuLGUuYmluZCh0aGlzKSksQW4odGhpcy5fZGVib3VuY2Vyc1t0XSl9fSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBWYWFkaW4gTHRkLgogICAgICogVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgICovCmNsYXNzIEwkdCBleHRlbmRzIGskdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57c2l6ZTp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSxfdmlkeE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZWZmZWN0aXZlU2l6ZUNoYW5nZWQoX2VmZmVjdGl2ZVNpemUpIl19Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKX1fdXBkYXRlU2Nyb2xsZXJJdGVtKCl7fV9hZnRlclNjcm9sbCgpe31fZ2V0Um93VGFyZ2V0KCl7fV9jcmVhdGVTY3JvbGxlclJvd3MoKXt9X2NhblBvcHVsYXRlKCl7fXNjcm9sbFRvSW5kZXgodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoInNjcm9sbFRvSW5kZXgiKSx0aGlzLl9zY3JvbGxpbmdUb0luZGV4PSEwLHQ9TWF0aC5taW4oTWF0aC5tYXgodCwwKSx0aGlzLl9lZmZlY3RpdmVTaXplLTEpLHRoaXMuJC50YWJsZS5zY3JvbGxUb3A9dC90aGlzLl9lZmZlY3RpdmVTaXplKih0aGlzLiQudGFibGUuc2Nyb2xsSGVpZ2h0LXRoaXMuJC50YWJsZS5vZmZzZXRIZWlnaHQpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKCk9PnRoaXMuX21heFNjcm9sbFRvcCkpJiZ0aGlzLl92aXJ0dWFsQ291bnQ8dGhpcy5fZWZmZWN0aXZlU2l6ZSYmdGhpcy5fYWRqdXN0VmlydHVhbEluZGV4T2Zmc2V0KDFlNiksdGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCgpPT5zdXBlci5zY3JvbGxUb0luZGV4KHQtdGhpcy5fdmlkeE9mZnNldCkpKSx0aGlzLl9zY3JvbGxIYW5kbGVyKCk7Y29uc3QgZT1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKChlPT5lLmluZGV4PT09dCkpWzBdO2lmKGUpe2NvbnN0IHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtdGhpcy4kLmhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207TWF0aC5hYnModCk+MSYmKHRoaXMuJC50YWJsZS5zY3JvbGxUb3ArPXQsdGhpcy5fc2Nyb2xsSGFuZGxlcigpKX10aGlzLl9zY3JvbGxpbmdUb0luZGV4PSExfV9lZmZlY3RpdmVTaXplQ2hhbmdlZCh0KXtsZXQgZSxuPTA7dGhpcy5faXRlcmF0ZUl0ZW1zKCgodCxpKT0+e2lmKGk9PT10aGlzLl9maXJzdFZpc2libGVJbmRleCl7Y29uc3QgaT10aGlzLl9waHlzaWNhbEl0ZW1zW3RdO2U9aS5pbmRleCxuPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wfX0pKSx0aGlzLml0ZW1zJiZ0PHRoaXMuaXRlbXMubGVuZ3RoJiYodGhpcy5fc2Nyb2xsVG9wPTApLEFycmF5LmlzQXJyYXkodGhpcy5pdGVtcyl8fCh0aGlzLml0ZW1zPXtsZW5ndGg6TWF0aC5taW4odCwxZTUpfSksdGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCgpPT5zdXBlci5faXRlbXNDaGFuZ2VkKHtwYXRoOiJpdGVtcyJ9KSkpLHRoaXMuX3ZpcnR1YWxDb3VudD1NYXRoLm1pbih0aGlzLml0ZW1zLmxlbmd0aCx0KXx8MCwwPT09dGhpcy5fc2Nyb2xsVG9wJiYodGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCgpPT50aGlzLl9zY3JvbGxUb0luZGV4KE1hdGgubWluKHQtMSxlKSkpKSx0aGlzLl9pdGVyYXRlSXRlbXMoKHQ9Pntjb25zdCBpPXRoaXMuX3BoeXNpY2FsSXRlbXNbdF07aWYoaS5pbmRleD09PWUmJih0aGlzLiQudGFibGUuc2Nyb2xsVG9wKz1NYXRoLnJvdW5kKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLW4pKSxpLmluZGV4PT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCYmdGhpcy5faXRlbXNGb2N1c2FibGUmJnRoaXMuJC5pdGVtcy5jb250YWlucyh0aGlzLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCkpe2NvbnN0IHQ9QXJyYXkuZnJvbSh0aGlzLl9pdGVtc0ZvY3VzYWJsZS5wYXJlbnRFbGVtZW50LmNoaWxkcmVuKS5pbmRleE9mKHRoaXMuX2l0ZW1zRm9jdXNhYmxlKTtpLmNoaWxkcmVuW3RdLmZvY3VzKCl9fSkpKSx0aGlzLl9hc3NpZ25Nb2RlbHMoKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT50aGlzLl91cGRhdGUoKSkpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9wb3NpdGlvbkl0ZW1zKCl7bGV0IHQ7dGhpcy5fYWRqdXN0U2Nyb2xsUG9zaXRpb24oKSxpc05hTih0aGlzLl9waHlzaWNhbFRvcCkmJih0PSEwLHRoaXMuX3BoeXNpY2FsVG9wPTApO2xldCBlPXRoaXMuX3BoeXNpY2FsVG9wO3RoaXMuX2l0ZXJhdGVJdGVtcygodD0+e3RoaXMuX3BoeXNpY2FsSXRlbXNbdF0uc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVZKCR7ZX1weClgLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF19KSksdCYmdGhpcy5fc2Nyb2xsVG9JbmRleCgwKX1faW5jcmVhc2VQb29sSWZOZWVkZWQodCl7MD09PXQmJnRoaXMuX3Njcm9sbGluZ1RvSW5kZXh8fCF0aGlzLl9jYW5Qb3B1bGF0ZSgpfHwhdGhpcy5fZWZmZWN0aXZlU2l6ZXx8KHRoaXMuX2luaXRpYWxQb29sQ3JlYXRlZD90aGlzLl9vcHRQaHlzaWNhbFNpemUhPT0xLzAmJih0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbD1Ubi5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbCxfdCwoKCk9Pnt0aGlzLl91cGRhdGVNZXRyaWNzKCk7bGV0IHQ9TWF0aC5jZWlsKCh0aGlzLl9vcHRQaHlzaWNhbFNpemUtdGhpcy5fcGh5c2ljYWxTaXplKS90aGlzLl9waHlzaWNhbEF2ZXJhZ2UpO3RoaXMuX3BoeXNpY2FsQ291bnQrdD50aGlzLl9lZmZlY3RpdmVTaXplJiYodD1NYXRoLm1heCgwLHRoaXMuX2VmZmVjdGl2ZVNpemUtdGhpcy5fcGh5c2ljYWxDb3VudCkpLHRoaXMuX3BoeXNpY2FsU2l6ZSYmdD4wJiZ0aGlzLl9vcHRQaHlzaWNhbFNpemUhPT0xLzAmJihzdXBlci5faW5jcmVhc2VQb29sSWZOZWVkZWQodCksdGhpcy5fX3Jlb3JkZXJDaGlsZE5vZGVzKCkpfSkpKToodGhpcy5faW5pdGlhbFBvb2xDcmVhdGVkPSEwLHN1cGVyLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgyNSkpKX1fX3Jlb3JkZXJDaGlsZE5vZGVzKCl7Y29uc3QgdD1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZE5vZGVzKTt0LnJlZHVjZSgoKHQsZSxuLGkpPT57aWYoMD09PW58fGlbbi0xXS5pbmRleD09PWUuaW5kZXgtMSlyZXR1cm4gdH0pLCEwKXx8dC5zb3J0KCgodCxlKT0+dC5pbmRleC1lLmluZGV4KSkuZm9yRWFjaCgodD0+dGhpcy4kLml0ZW1zLmFwcGVuZENoaWxkKHQpKSl9X2NyZWF0ZVBvb2wodCl7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbj10aGlzLl9jcmVhdGVTY3JvbGxlclJvd3ModCk7bi5mb3JFYWNoKCh0PT5lLmFwcGVuZENoaWxkKHQpKSksdGhpcy5fZ2V0Um93VGFyZ2V0KCkuYXBwZW5kQ2hpbGQoZSk7Y29uc3QgaT10aGlzLnF1ZXJ5U2VsZWN0b3IoIltzbG90XSIpO2lmKGkpe2NvbnN0IHQ9aS5nZXRBdHRyaWJ1dGUoInNsb3QiKTtpLnNldEF0dHJpYnV0ZSgic2xvdCIsImZvby1iYXIiKSxpLnNldEF0dHJpYnV0ZSgic2xvdCIsdCl9cmV0dXJuIExpKHRoaXMsKCgpPT50aGlzLm5vdGlmeVJlc2l6ZSgpKSksbn1fYXNzaWduTW9kZWxzKHQpe3RoaXMuX2l0ZXJhdGVJdGVtcygoKHQsZSk9Pntjb25zdCBuPXRoaXMuX3BoeXNpY2FsSXRlbXNbdF07dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJoaWRkZW4iLGU+PXRoaXMuX2VmZmVjdGl2ZVNpemUsbiksdGhpcy5fdXBkYXRlU2Nyb2xsZXJJdGVtKG4sZSsodGhpcy5fdmlkeE9mZnNldHx8MCkpfSksdCl9X3Njcm9sbEhhbmRsZXIoKXtjb25zdCB0PXRoaXMuJC50YWJsZS5zY3JvbGxUb3AtdGhpcy5fc2Nyb2xsUG9zaXRpb247dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoc3VwZXIuX3Njcm9sbEhhbmRsZXIpO2NvbnN0IGU9dGhpcy5fdmlkeE9mZnNldDt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKCk9PnRoaXMuX21heFNjcm9sbFRvcCkpJiZ0aGlzLl92aXJ0dWFsQ291bnQ8dGhpcy5fZWZmZWN0aXZlU2l6ZT90aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCk6dGhpcy5fdmlkeE9mZnNldD0wLHRoaXMuX3ZpZHhPZmZzZXQhPT1lJiZ0aGlzLl91cGRhdGUoKSx0aGlzLl9hZnRlclNjcm9sbCgpfV9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCl7aWYoTWF0aC5hYnModCk+MWU0KXtpZih0aGlzLl9ub1NjYWxlKXJldHVybiB2b2lkKHRoaXMuX25vU2NhbGU9ITEpO2NvbnN0IHQ9dGhpcy4kLnRhYmxlLnNjcm9sbFRvcC8odGhpcy4kLnRhYmxlLnNjcm9sbEhlaWdodC10aGlzLiQudGFibGUub2Zmc2V0SGVpZ2h0KTt0aGlzLl92aWR4T2Zmc2V0PU1hdGgucm91bmQodCp0aGlzLl9lZmZlY3RpdmVTaXplLXQqdGhpcy5fdmlydHVhbENvdW50KX1lbHNle2NvbnN0IHQ9dGhpcy5fdmlkeE9mZnNldHx8MCxlPTFlMyxuPTEwMDswPT09dGhpcy5fc2Nyb2xsVG9wPyh0aGlzLl92aWR4T2Zmc2V0PTAsdCE9PXRoaXMuX3ZpZHhPZmZzZXQmJnN1cGVyLnNjcm9sbFRvSW5kZXgoMCkpOnRoaXMuZmlyc3RWaXNpYmxlSW5kZXg8ZSYmdGhpcy5fdmlkeE9mZnNldD4wJiYodGhpcy5fdmlkeE9mZnNldC09TWF0aC5taW4odGhpcy5fdmlkeE9mZnNldCxuKSx0IT09dGhpcy5fdmlkeE9mZnNldCYmc3VwZXIuc2Nyb2xsVG9JbmRleCh0aGlzLmZpcnN0VmlzaWJsZUluZGV4Kyh0LXRoaXMuX3ZpZHhPZmZzZXQpKSx0aGlzLl9ub1NjYWxlPSEwKTtjb25zdCBpPXRoaXMuX2VmZmVjdGl2ZVNpemUtdGhpcy5fdmlydHVhbENvdW50O3RoaXMuX3Njcm9sbFRvcD49dGhpcy5fbWF4U2Nyb2xsVG9wJiZ0aGlzLl9tYXhTY3JvbGxUb3A+MD8odGhpcy5fdmlkeE9mZnNldD1pLHQhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KHRoaXMuX3ZpcnR1YWxDb3VudCkpOnRoaXMuZmlyc3RWaXNpYmxlSW5kZXg+dGhpcy5fdmlydHVhbENvdW50LWUmJnRoaXMuX3ZpZHhPZmZzZXQ8aSYmKHRoaXMuX3ZpZHhPZmZzZXQrPU1hdGgubWluKGktdGhpcy5fdmlkeE9mZnNldCxuKSx0IT09dGhpcy5fdmlkeE9mZnNldCYmc3VwZXIuc2Nyb2xsVG9JbmRleCh0aGlzLmZpcnN0VmlzaWJsZUluZGV4LSh0aGlzLl92aWR4T2Zmc2V0LXQpKSx0aGlzLl9ub1NjYWxlPSEwKX19X2FjY2Vzc0lyb25MaXN0QVBJKHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkPSExO2NvbnN0IGU9dC5hcHBseSh0aGlzKTtyZXR1cm4gdGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3M9VG4uZGVib3VuY2UodGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3MsX3QsKCgpPT50aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2Vzc0FzeW5jRW5hYmxlZD0hMCkpLGV9X2RlYm91bmNlUmVuZGVyKHQsZSl7c3VwZXIuX2RlYm91bmNlUmVuZGVyKCgoKT0+dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkodCkpLGUpfV93YXJuUHJpdmF0ZUFQSUFjY2Vzcyh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2Vzc0FzeW5jRW5hYmxlZCYmY29uc29sZS53YXJuKGBBY2Nlc3NpbmcgcHJpdmF0ZSBBUEkgKCR7dH0pIWApfV9yZW5kZXIoKXt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSShzdXBlci5fcmVuZGVyKX1faXRlbXNDaGFuZ2VkKCl7fWdldCBfZmlyc3RWaXNpYmxlSW5kZXgoKXtyZXR1cm4gdGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCgpPT5zdXBlci5maXJzdFZpc2libGVJbmRleCkpfWdldCBfbGFzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKCk9PnN1cGVyLmxhc3RWaXNpYmxlSW5kZXgpKX1fc2Nyb2xsVG9JbmRleCh0KXt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKCk9PnRoaXMuc2Nyb2xsVG9JbmRleCh0KSkpfWdldCBmaXJzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygiZmlyc3RWaXNpYmxlSW5kZXgiKSxzdXBlci5maXJzdFZpc2libGVJbmRleH1zZXQgZmlyc3RWaXNpYmxlSW5kZXgodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoImZpcnN0VmlzaWJsZUluZGV4Iiksc3VwZXIuZmlyc3RWaXNpYmxlSW5kZXg9dH1nZXQgbGFzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygibGFzdFZpc2libGVJbmRleCIpLHN1cGVyLmxhc3RWaXNpYmxlSW5kZXh9c2V0IGxhc3RWaXNpYmxlSW5kZXgodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoImxhc3RWaXNpYmxlSW5kZXgiKSxzdXBlci5sYXN0VmlzaWJsZUluZGV4PXR9dXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoInVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllcyIpLHN1cGVyLnVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9X3Jlc2l6ZUhhbmRsZXIoKXtzdXBlci5fcmVzaXplSGFuZGxlcigpLERpKCl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMjEgVmFhZGluIEx0ZC4KICAgICAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICAqL2NvbnN0IFAkdD10PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9hMTF5VXBkYXRlR3JpZFNpemUoc2l6ZSwgX2NvbHVtblRyZWUsIF9jb2x1bW5UcmVlLiopIl19X2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0KXtyZXR1cm4gdC5maWx0ZXIoKHQ9PnQuc29tZSgodD0+dC5faGVhZGVyVGVtcGxhdGV8fHQuaGVhZGVyUmVuZGVyZXJ8fHQucGF0aHx8dC5oZWFkZXIpKSkpLmxlbmd0aH1fYTExeUdldEZvb3RlclJvd0NvdW50KHQpe3JldHVybiB0LmZpbHRlcigodD0+dC5zb21lKCh0PT50Ll9oZWFkZXJUZW1wbGF0ZXx8dC5oZWFkZXJSZW5kZXJlcikpKSkubGVuZ3RofV9hMTF5VXBkYXRlR3JpZFNpemUodCxlKXtpZih2b2lkIDA9PT10fHx2b2lkIDA9PT1lKXJldHVybjtjb25zdCBuPWVbZS5sZW5ndGgtMV07dGhpcy4kLnRhYmxlLnNldEF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIsdCt0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQoZSkrdGhpcy5fYTExeUdldEZvb3RlclJvd0NvdW50KGUpKSx0aGlzLiQudGFibGUuc2V0QXR0cmlidXRlKCJhcmlhLWNvbGNvdW50IixuJiZuLmxlbmd0aHx8MCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpfV9hMTF5VXBkYXRlSGVhZGVyUm93cygpe0FycmF5LmZyb20odGhpcy4kLmhlYWRlci5jaGlsZHJlbikuZm9yRWFjaCgoKHQsZSk9PnQuc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4IixlKzEpKSl9X2ExMXlVcGRhdGVGb290ZXJSb3dzKCl7QXJyYXkuZnJvbSh0aGlzLiQuZm9vdGVyLmNoaWxkcmVuKS5mb3JFYWNoKCgodCxlKT0+dC5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLHRoaXMuX2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0aGlzLl9jb2x1bW5UcmVlKSt0aGlzLnNpemUrZSsxKSkpfV9hMTF5VXBkYXRlUm93Um93aW5kZXgodCxlKXt0LnNldEF0dHJpYnV0ZSgiYXJpYS1yb3dpbmRleCIsZSt0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQodGhpcy5fY29sdW1uVHJlZSkrMSl9X2ExMXlVcGRhdGVSb3dTZWxlY3RlZCh0LGUpe3Quc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIixCb29sZWFuKGUpKSxBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKHQ9PnQuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIixCb29sZWFuKGUpKSkpfV9hMTF5VXBkYXRlUm93TGV2ZWwodCxlKXt0LnNldEF0dHJpYnV0ZSgiYXJpYS1sZXZlbCIsZSsxKX1fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQodCxlKXtBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKHQ9PnsiYm9vbGVhbiI9PXR5cGVvZiBlP3Quc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixlKTp0Lmhhc0F0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpJiZ0LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpfSkpfV9hMTF5U2V0Um93RGV0YWlsc0NlbGwodCxlKXtBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKHQ9Pnt0IT09ZSYmdC5zZXRBdHRyaWJ1dGUoImFyaWEtY29udHJvbHMiLGUuaWQpfSkpfV9hMTF5VXBkYXRlQ2VsbENvbHNwYW4odCxlKXt0LnNldEF0dHJpYnV0ZSgiYXJpYS1jb2xzcGFuIixOdW1iZXIoZSkpfV9hMTF5VXBkYXRlU29ydGVycygpe0FycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCJ2YWFkaW4tZ3JpZC1zb3J0ZXIiKSkuZm9yRWFjaCgodD0+e2xldCBlPXQucGFyZW50Tm9kZTtmb3IoO2UmJiJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiIT09ZS5sb2NhbE5hbWU7KWU9ZS5wYXJlbnROb2RlO2UmJmUuYXNzaWduZWRTbG90JiZlLmFzc2lnbmVkU2xvdC5wYXJlbnROb2RlLnNldEF0dHJpYnV0ZSgiYXJpYS1zb3J0Iix7YXNjOiJhc2NlbmRpbmciLGRlc2M6ImRlc2NlbmRpbmcifVtTdHJpbmcodC5kaXJlY3Rpb24pXXx8Im5vbmUiKX0pKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBWYWFkaW4gTHRkLgogICAgICogVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgICovLE4kdD10PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2FjdGl2ZUl0ZW06e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTpudWxsfX19cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuJC5zY3JvbGxlci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fb25DbGljay5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNlbGwtYWN0aXZhdGUiLHRoaXMuX2FjdGl2YXRlSXRlbS5iaW5kKHRoaXMpKX1fYWN0aXZhdGVJdGVtKHQpe2NvbnN0IGU9dC5kZXRhaWwubW9kZWwsbj1lP2UuaXRlbTpudWxsO24mJih0aGlzLmFjdGl2ZUl0ZW09dGhpcy5faXRlbXNFcXVhbCh0aGlzLmFjdGl2ZUl0ZW0sbik/bnVsbDpuKX1fb25DbGljayh0KXtpZih0LmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2NvbnN0IGU9dC5jb21wb3NlZFBhdGgoKSxuPWVbZS5pbmRleE9mKHRoaXMuJC50YWJsZSktM107aWYoIW58fG4uZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZigiZGV0YWlscy1jZWxsIik+LTEpcmV0dXJuO2NvbnN0IGk9bi5fY29udGVudCxyPXRoaXMuZ2V0Um9vdE5vZGUoKS5hY3RpdmVFbGVtZW50O2kuY29udGFpbnMocil8fHRoaXMuX2lzRm9jdXNhYmxlKHQudGFyZ2V0KXx8dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1hY3RpdmF0ZSIse2RldGFpbDp7bW9kZWw6dGhpcy5fX2dldFJvd01vZGVsKG4ucGFyZW50RWxlbWVudCl9fSkpfV9pc0ZvY3VzYWJsZSh0KXtyZXR1cm4gSSR0KHQpfX0sSSR0PXQ9PntpZighdC5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGU9LTEhPT1BcnJheS5mcm9tKHQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCJbdGFiaW5kZXhdLCBidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBvYmplY3QsIGlmcmFtZSwgbGFiZWwsIGFbaHJlZl0sIGFyZWFbaHJlZl0iKSkuZmlsdGVyKCh0PT4iY2VsbCBib2R5LWNlbGwiIT09dC5nZXRBdHRyaWJ1dGUoInBhcnQiKSkpLmluZGV4T2YodCk7cmV0dXJuIXQuZGlzYWJsZWQmJmV9LFIkdD10PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOkFycmF5fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2l0ZW1zQ2hhbmdlZChpdGVtcywgaXRlbXMuKiwgaXNBdHRhY2hlZCkiXX1faXRlbXNDaGFuZ2VkKHQsZSxuKXtpZihuKXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gbnVsbD09dCYmKHRoaXMuc2l6ZT0wKSx2b2lkKHRoaXMuZGF0YVByb3ZpZGVyPT09dGhpcy5fYXJyYXlEYXRhUHJvdmlkZXImJih0aGlzLmRhdGFQcm92aWRlcj12b2lkIDApKTt0aGlzLnNpemU9dC5sZW5ndGgsdGhpcy5kYXRhUHJvdmlkZXI9dGhpcy5kYXRhUHJvdmlkZXJ8fHRoaXMuX2FycmF5RGF0YVByb3ZpZGVyLHRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfX1fYXJyYXlEYXRhUHJvdmlkZXIodCxlKXtsZXQgbj0oQXJyYXkuaXNBcnJheSh0aGlzLml0ZW1zKT90aGlzLml0ZW1zOltdKS5zbGljZSgwKTt0aGlzLl9maWx0ZXJzJiZ0aGlzLl9jaGVja1BhdGhzKHRoaXMuX2ZpbHRlcnMsImZpbHRlcmluZyIsbikmJihuPXRoaXMuX2ZpbHRlcihuKSksdGhpcy5zaXplPW4ubGVuZ3RoLHQuc29ydE9yZGVycy5sZW5ndGgmJnRoaXMuX2NoZWNrUGF0aHModGhpcy5fc29ydGVycywic29ydGluZyIsbikmJihuPW4uc29ydCh0aGlzLl9tdWx0aVNvcnQuYmluZCh0aGlzKSkpO2NvbnN0IGk9dC5wYWdlKnQucGFnZVNpemU7ZShuLnNsaWNlKGksaSt0LnBhZ2VTaXplKSxuLmxlbmd0aCl9X2NoZWNrUGF0aHModCxlLG4pe2lmKCFuLmxlbmd0aClyZXR1cm4hMTtsZXQgaT0hMDtmb3IobGV0IHIgaW4gdCl7Y29uc3Qgbz10W3JdLnBhdGg7aWYoIW98fC0xPT09by5pbmRleE9mKCIuIikpY29udGludWU7Y29uc3QgYT1vLnJlcGxhY2UoL1wuW14uXSokLywiIik7dm9pZCAwPT09Zm8uZ2V0KGEsblswXSkmJihjb25zb2xlLndhcm4oYFBhdGggIiR7b30iIHVzZWQgZm9yICR7ZX0gZG9lcyBub3QgZXhpc3QgaW4gYWxsIG9mIHRoZSBpdGVtcywgJHtlfSBpcyBkaXNhYmxlZC5gKSxpPSExKX1yZXR1cm4gaX1fbXVsdGlTb3J0KHQsZSl7cmV0dXJuIHRoaXMuX3NvcnRlcnMubWFwKChuPT4iYXNjIj09PW4uZGlyZWN0aW9uP3RoaXMuX2NvbXBhcmUoZm8uZ2V0KG4ucGF0aCx0KSxmby5nZXQobi5wYXRoLGUpKToiZGVzYyI9PT1uLmRpcmVjdGlvbj90aGlzLl9jb21wYXJlKGZvLmdldChuLnBhdGgsZSksZm8uZ2V0KG4ucGF0aCx0KSk6MCkpLnJlZHVjZSgoKHQsZSk9PnR8fGUpLDApfV9ub3JtYWxpemVFbXB0eVZhbHVlKHQpe3JldHVyblt2b2lkIDAsbnVsbF0uaW5kZXhPZih0KT49MD8iIjppc05hTih0KT90LnRvU3RyaW5nKCk6dH1fY29tcGFyZSh0LGUpe3JldHVybih0PXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUodCkpPChlPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUoZSkpPy0xOnQ+ZT8xOjB9X2ZpbHRlcih0KXtyZXR1cm4gdC5maWx0ZXIoKHQ9PjA9PT10aGlzLl9maWx0ZXJzLmZpbHRlcigoZT0+e2NvbnN0IG49dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShmby5nZXQoZS5wYXRoLHQpKSxpPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUoZS52YWx1ZSkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO3JldHVybi0xPT09bi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihpKX0pKS5sZW5ndGgpKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBWYWFkaW4gTHRkLgogICAgICogVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgICovLE8kdD10PT5jbGFzcyBleHRlbmRzKHBpKHQpKXtyZWFkeSgpe3N1cGVyLnJlYWR5KCk7Y29uc3QgdD10aGlzLiQuc2Nyb2xsZXI7aWkodCwidHJhY2siLHRoaXMuX29uSGVhZGVyVHJhY2suYmluZCh0aGlzKSksdC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLChlPT50Lmhhc0F0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIikmJmUucHJldmVudERlZmF1bHQoKSkpLHQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCh0PT4icmVzaXplLWhhbmRsZSI9PXQudGFyZ2V0LmdldEF0dHJpYnV0ZSgicGFydCIpJiZ0LnByZXZlbnREZWZhdWx0KCkpKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKHQ9PiJyZXNpemUtaGFuZGxlIj09PXQudGFyZ2V0LmdldEF0dHJpYnV0ZSgicGFydCIpJiZ0LnByZXZlbnREZWZhdWx0KCkpKX1fb25IZWFkZXJUcmFjayh0KXtjb25zdCBlPXQudGFyZ2V0O2lmKCJyZXNpemUtaGFuZGxlIj09PWUuZ2V0QXR0cmlidXRlKCJwYXJ0Iikpe2xldCBuPWUucGFyZW50RWxlbWVudC5fY29sdW1uO2Zvcih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImNvbHVtbi1yZXNpemluZyIsITAsdGhpcy4kLnNjcm9sbGVyKTsidmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj09PW4ubG9jYWxOYW1lOyluPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4uX2NoaWxkQ29sdW1ucywwKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9vcmRlci1lLl9vcmRlcn0pKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiF0LmhpZGRlbn0pKS5wb3AoKTtjb25zdCBpPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yQWxsKCdbcGFydH49InJvdyJdOmxhc3QtY2hpbGQgW3BhcnR+PSJjZWxsIl0nKSkscj1pLmZpbHRlcigodD0+dC5fY29sdW1uPT09bikpWzBdO2lmKHIub2Zmc2V0V2lkdGgpe2NvbnN0IGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUociksaT0xMCtwYXJzZUludChlLnBhZGRpbmdMZWZ0KStwYXJzZUludChlLnBhZGRpbmdSaWdodCkrcGFyc2VJbnQoZS5ib3JkZXJMZWZ0V2lkdGgpK3BhcnNlSW50KGUuYm9yZGVyUmlnaHRXaWR0aCkrcGFyc2VJbnQoZS5tYXJnaW5MZWZ0KStwYXJzZUludChlLm1hcmdpblJpZ2h0KSxvPXIub2Zmc2V0V2lkdGgrKHRoaXMuX19pc1JUTD9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdC5kZXRhaWwueDp0LmRldGFpbC54LXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQpO24ud2lkdGg9TWF0aC5tYXgoaSxvKSsicHgiLG4uZmxleEdyb3c9MH1pLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX2NvbHVtbi5fb3JkZXItZS5fY29sdW1uLl9vcmRlcn0pKS5mb3JFYWNoKChmdW5jdGlvbih0LGUsbil7ZTxuLmluZGV4T2YocikmJih0Ll9jb2x1bW4ud2lkdGg9dC5vZmZzZXRXaWR0aCsicHgiLHQuX2NvbHVtbi5mbGV4R3Jvdz0wKX0pKSwiZW5kIj09PXQuZGV0YWlsLnN0YXRlJiYodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciLCExLHRoaXMuJC5zY3JvbGxlciksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29sdW1uLXJlc2l6ZSIse2RldGFpbDp7cmVzaXplZENvbHVtbjpufX0pKSksdGhpcy5fcmVzaXplSGFuZGxlcigpfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBWYWFkaW4gTHRkLgogICAgICogVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgICovLHokdD1jbGFzcyB0e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmdyaWQ9dCx0aGlzLnBhcmVudENhY2hlPWUsdGhpcy5wYXJlbnRJdGVtPW4sdGhpcy5pdGVtQ2FjaGVzPXt9LHRoaXMuaXRlbXM9e30sdGhpcy5lZmZlY3RpdmVTaXplPTAsdGhpcy5zaXplPTAsdGhpcy5wZW5kaW5nUmVxdWVzdHM9e319aXNMb2FkaW5nKCl7cmV0dXJuIEJvb2xlYW4oT2JqZWN0LmtleXModGhpcy5wZW5kaW5nUmVxdWVzdHMpLmxlbmd0aHx8T2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKS5maWx0ZXIoKHQ9PnRoaXMuaXRlbUNhY2hlc1t0XS5pc0xvYWRpbmcoKSkpWzBdKX1nZXRJdGVtRm9ySW5kZXgodCl7Y29uc3R7Y2FjaGU6ZSxzY2FsZWRJbmRleDpufT10aGlzLmdldENhY2hlQW5kSW5kZXgodCk7cmV0dXJuIGUuaXRlbXNbbl19dXBkYXRlU2l6ZSgpe3RoaXMuZWZmZWN0aXZlU2l6ZT0hdGhpcy5wYXJlbnRJdGVtfHx0aGlzLmdyaWQuX2lzRXhwYW5kZWQodGhpcy5wYXJlbnRJdGVtKT90aGlzLnNpemUrT2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKS5yZWR1Y2UoKCh0LGUpPT57Y29uc3Qgbj10aGlzLml0ZW1DYWNoZXNbZV07cmV0dXJuIG4udXBkYXRlU2l6ZSgpLHQrbi5lZmZlY3RpdmVTaXplfSksMCk6MH1lbnN1cmVTdWJDYWNoZUZvclNjYWxlZEluZGV4KGUpe2lmKCF0aGlzLml0ZW1DYWNoZXNbZV0pe2NvbnN0IG49bmV3IHQodGhpcy5ncmlkLHRoaXMsdGhpcy5pdGVtc1tlXSk7dGhpcy5pdGVtQ2FjaGVzW2VdPW4sdGhpcy5ncmlkLl9sb2FkUGFnZSgwLG4pfX1nZXRDYWNoZUFuZEluZGV4KHQpe2xldCBlPXQ7Y29uc3Qgbj1PYmplY3Qua2V5cyh0aGlzLml0ZW1DYWNoZXMpO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtjb25zdCBpPU51bWJlcihuW3RdKSxyPXRoaXMuaXRlbUNhY2hlc1tpXTtpZihlPD1pKXJldHVybntjYWNoZTp0aGlzLHNjYWxlZEluZGV4OmV9O2lmKGU8PWkrci5lZmZlY3RpdmVTaXplKXJldHVybiByLmdldENhY2hlQW5kSW5kZXgoZS1pLTEpO2UtPXIuZWZmZWN0aXZlU2l6ZX1yZXR1cm57Y2FjaGU6dGhpcyxzY2FsZWRJbmRleDplfX19LEQkdD10PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3BhZ2VTaXplOnt0eXBlOk51bWJlcix2YWx1ZTo1MCxvYnNlcnZlcjoiX3BhZ2VTaXplQ2hhbmdlZCJ9LGRhdGFQcm92aWRlcjp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLG9ic2VydmVyOiJfZGF0YVByb3ZpZGVyQ2hhbmdlZCJ9LGxvYWRpbmc6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfY2FjaGU6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB6JHQodGhpcyl9fSxpdGVtSWRQYXRoOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxleHBhbmRlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6KCk9PltdfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zaXplQ2hhbmdlZChzaXplKSIsIl9pdGVtSWRQYXRoQ2hhbmdlZChpdGVtSWRQYXRoKSIsIl9leHBhbmRlZEl0ZW1zQ2hhbmdlZChleHBhbmRlZEl0ZW1zLiopIl19X3NpemVDaGFuZ2VkKHQpe2NvbnN0IGU9dC10aGlzLl9jYWNoZS5zaXplO3RoaXMuX2NhY2hlLnNpemUrPWUsdGhpcy5fY2FjaGUuZWZmZWN0aXZlU2l6ZSs9ZSx0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCl9X2dldEl0ZW0odCxlKXtpZih0Pj10aGlzLl9lZmZlY3RpdmVTaXplKXJldHVybjtlLmluZGV4PXQ7Y29uc3R7Y2FjaGU6bixzY2FsZWRJbmRleDppfT10aGlzLl9jYWNoZS5nZXRDYWNoZUFuZEluZGV4KHQpLHI9bi5pdGVtc1tpXTtyPyh0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImxvYWRpbmciLCExLGUpLHRoaXMuX3VwZGF0ZUl0ZW0oZSxyKSx0aGlzLl9pc0V4cGFuZGVkKHIpJiZuLmVuc3VyZVN1YkNhY2hlRm9yU2NhbGVkSW5kZXgoaSkpOih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImxvYWRpbmciLCEwLGUpLHRoaXMuX2xvYWRQYWdlKHRoaXMuX2dldFBhZ2VGb3JJbmRleChpKSxuKSl9X2V4cGFuZGVkSW5zdGFuY2VDaGFuZ2VkQ2FsbGJhY2sodCxlKXt2b2lkIDAhPT10Lml0ZW0mJihlP3RoaXMuZXhwYW5kSXRlbSh0Lml0ZW0pOnRoaXMuY29sbGFwc2VJdGVtKHQuaXRlbSkpfWdldEl0ZW1JZCh0KXtyZXR1cm4gdGhpcy5pdGVtSWRQYXRoP3RoaXMuZ2V0KHRoaXMuaXRlbUlkUGF0aCx0KTp0fV9pc0V4cGFuZGVkKHQpe3JldHVybiB0aGlzLl9fZXhwYW5kZWRLZXlzLmhhcyh0aGlzLmdldEl0ZW1JZCh0KSl9X2V4cGFuZGVkSXRlbXNDaGFuZ2VkKCl7dGhpcy5fX2NhY2hlRXhwYW5kZWRLZXlzKCksdGhpcy5fY2FjaGUudXBkYXRlU2l6ZSgpLHRoaXMuX2VmZmVjdGl2ZVNpemU9dGhpcy5fY2FjaGUuZWZmZWN0aXZlU2l6ZSx0aGlzLl9hc3NpZ25Nb2RlbHMoKX1faXRlbUlkUGF0aENoYW5nZWQoKXt0aGlzLl9fY2FjaGVFeHBhbmRlZEtleXMoKX1fX2NhY2hlRXhwYW5kZWRLZXlzKCl7dGhpcy5leHBhbmRlZEl0ZW1zJiYodGhpcy5fX2V4cGFuZGVkS2V5cz1uZXcgU2V0LHRoaXMuZXhwYW5kZWRJdGVtcy5mb3JFYWNoKCh0PT57dGhpcy5fX2V4cGFuZGVkS2V5cy5hZGQodGhpcy5nZXRJdGVtSWQodCkpfSkpKX1leHBhbmRJdGVtKHQpe3RoaXMuX2lzRXhwYW5kZWQodCl8fCh0aGlzLmV4cGFuZGVkSXRlbXM9Wy4uLnRoaXMuZXhwYW5kZWRJdGVtcyx0XSl9Y29sbGFwc2VJdGVtKHQpe3RoaXMuX2lzRXhwYW5kZWQodCkmJih0aGlzLmV4cGFuZGVkSXRlbXM9dGhpcy5leHBhbmRlZEl0ZW1zLmZpbHRlcigoZT0+IXRoaXMuX2l0ZW1zRXF1YWwoZSx0KSkpKX1fZ2V0SW5kZXhMZXZlbCh0KXtsZXR7Y2FjaGU6ZX09dGhpcy5fY2FjaGUuZ2V0Q2FjaGVBbmRJbmRleCh0KSxuPTA7Zm9yKDtlLnBhcmVudENhY2hlOyllPWUucGFyZW50Q2FjaGUsbisrO3JldHVybiBufV9jYW5Qb3B1bGF0ZSgpe3JldHVybiBCb29sZWFuKHRoaXMuX2hhc0RhdGEmJnRoaXMuX2NvbHVtblRyZWUpfV9sb2FkUGFnZSh0LGUpe2lmKCFlLnBlbmRpbmdSZXF1ZXN0c1t0XSYmdGhpcy5kYXRhUHJvdmlkZXIpe3RoaXMuX3NldExvYWRpbmcoITApLGUucGVuZGluZ1JlcXVlc3RzW3RdPSEwO2NvbnN0IG49e3BhZ2U6dCxwYWdlU2l6ZTp0aGlzLnBhZ2VTaXplLHNvcnRPcmRlcnM6dGhpcy5fbWFwU29ydGVycygpLGZpbHRlcnM6dGhpcy5fbWFwRmlsdGVycygpLHBhcmVudEl0ZW06ZS5wYXJlbnRJdGVtfTt0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbCYmdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wuZmx1c2goKSx0aGlzLmRhdGFQcm92aWRlcihuLCgoaSxyKT0+e3ZvaWQgMCE9PXI/ZS5zaXplPXI6bi5wYXJlbnRJdGVtJiYoZS5zaXplPWkubGVuZ3RoKTtjb25zdCBvPUFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5tYXAoKHQ9PnQuX2l0ZW0pKTtpLmZvckVhY2goKChuLGkpPT57Y29uc3Qgcj10KnRoaXMucGFnZVNpemUraTtlLml0ZW1zW3JdPW4sdGhpcy5faXNFeHBhbmRlZChuKSYmby5pbmRleE9mKG4pPi0xJiZlLmVuc3VyZVN1YkNhY2hlRm9yU2NhbGVkSW5kZXgocil9KSksdGhpcy5faGFzRGF0YT0hMCxkZWxldGUgZS5wZW5kaW5nUmVxdWVzdHNbdF0sdGhpcy5fZGVib3VuY2VyQXBwbHlDYWNoZWREYXRhPVRuLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlckFwcGx5Q2FjaGVkRGF0YSxndC5hZnRlcigwKSwoKCk9Pnt0aGlzLl9zZXRMb2FkaW5nKCExKSx0aGlzLl9jYWNoZS51cGRhdGVTaXplKCksdGhpcy5fZWZmZWN0aXZlU2l6ZT10aGlzLl9jYWNoZS5lZmZlY3RpdmVTaXplLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIoKHQ9PiF0LmhpZGRlbikpLmZvckVhY2goKHQ9Pnt0aGlzLl9jYWNoZS5nZXRJdGVtRm9ySW5kZXgodC5pbmRleCkmJnRoaXMuX2dldEl0ZW0odC5pbmRleCx0KX0pKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKSx0aGlzLl9fc2Nyb2xsVG9QZW5kaW5nSW5kZXgoKX0pKSx0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKXx8dGhpcy5fZGVib3VuY2VyQXBwbHlDYWNoZWREYXRhLmZsdXNoKCksdGhpcy5fX2l0ZW1zUmVjZWl2ZWQoKX0pKX19X2dldFBhZ2VGb3JJbmRleCh0KXtyZXR1cm4gTWF0aC5mbG9vcih0L3RoaXMucGFnZVNpemUpfWNsZWFyQ2FjaGUoKXt0aGlzLl9jYWNoZT1uZXcgeiR0KHRoaXMpLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKCh0PT57QXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5mb3JFYWNoKCh0PT57dC5faW5zdGFuY2UmJnQuX2luc3RhbmNlLl9zZXRQZW5kaW5nUHJvcGVydHkoIml0ZW0iLHt9LCExKX0pKX0pKSx0aGlzLl9jYWNoZS5zaXplPXRoaXMuc2l6ZXx8MCx0aGlzLl9jYWNoZS51cGRhdGVTaXplKCksdGhpcy5faGFzRGF0YT0hMSx0aGlzLl9hc3NpZ25Nb2RlbHMoKSx0aGlzLl9lZmZlY3RpdmVTaXplJiZ0aGlzLl9pbml0aWFsUG9vbENyZWF0ZWR8fHRoaXMuX2xvYWRQYWdlKDAsdGhpcy5fY2FjaGUpfV9wYWdlU2l6ZUNoYW5nZWQodCxlKXt2b2lkIDAhPT1lJiZ0IT09ZSYmdGhpcy5jbGVhckNhY2hlKCl9X2NoZWNrU2l6ZSgpe3ZvaWQgMD09PXRoaXMuc2l6ZSYmMD09PXRoaXMuX2VmZmVjdGl2ZVNpemUmJmNvbnNvbGUud2FybigiVGhlIDx2YWFkaW4tZ3JpZD4gbmVlZHMgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiBvcmRlciB0byBkaXNwbGF5IHJvd3MuIFNldCB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIHRvIHRoZSBgc2l6ZWAgcHJvcGVydHksIG9yIHByb3ZpZGUgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBgZGF0YVByb3ZpZGVyYOKAmXMgYGNhbGxiYWNrYCBjYWxsLiIpfV9kYXRhUHJvdmlkZXJDaGFuZ2VkKHQsZSl7dm9pZCAwIT09ZSYmdGhpcy5jbGVhckNhY2hlKCksdCYmdGhpcy5pdGVtcyYmdGhpcy5pdGVtcy5sZW5ndGgmJnRoaXMuX3Njcm9sbFRvSW5kZXgodGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpLHRoaXMuX2RlYm91bmNlckNoZWNrU2l6ZT1Ubi5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJDaGVja1NpemUsZ3QuYWZ0ZXIoMmUzKSx0aGlzLl9jaGVja1NpemUuYmluZCh0aGlzKSksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfV9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKXt0aGlzLl9oYXNEYXRhfHx0aGlzLl9sb2FkUGFnZSgwLHRoaXMuX2NhY2hlKX1faXRlbXNFcXVhbCh0LGUpe3JldHVybiB0aGlzLmdldEl0ZW1JZCh0KT09PXRoaXMuZ2V0SXRlbUlkKGUpfV9nZXRJdGVtSW5kZXhJbkFycmF5KHQsZSl7bGV0IG49LTE7cmV0dXJuIGUuZm9yRWFjaCgoKGUsaSk9Pnt0aGlzLl9pdGVtc0VxdWFsKGUsdCkmJihuPWkpfSkpLG59c2Nyb2xsVG9JbmRleCh0KXtzdXBlci5zY3JvbGxUb0luZGV4KHQpLGlzTmFOKHQpfHwhdGhpcy5fY2FjaGUuaXNMb2FkaW5nKCkmJnRoaXMuY2xpZW50SGVpZ2h0fHwodGhpcy5fX3BlbmRpbmdTY3JvbGxUb0luZGV4PXQpfV9fc2Nyb2xsVG9QZW5kaW5nSW5kZXgoKXtpZih0aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXgmJnRoaXMuJC5pdGVtcy5jaGlsZHJlbi5sZW5ndGgpe2NvbnN0IHQ9dGhpcy5fX3BlbmRpbmdTY3JvbGxUb0luZGV4O2RlbGV0ZSB0aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXgsdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCksdGhpcy5zY3JvbGxUb0luZGV4KHQpfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBWYWFkaW4gTHRkLgogICAgICogVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgICovLEIkdD10PT5jbGFzcyBleHRlbmRzIHR7cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX2FkZE5vZGVPYnNlcnZlcigpfV9oYXNDb2x1bW5Hcm91cHModCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI9PT10W2VdLmxvY2FsTmFtZSlyZXR1cm4hMDtyZXR1cm4hMX1fZ2V0Q2hpbGRDb2x1bW5zKHQpe3JldHVybiB6aS5nZXRGbGF0dGVuZWROb2Rlcyh0KS5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KX1fZmxhdHRlbkNvbHVtbkdyb3Vwcyh0KXtyZXR1cm4gdC5tYXAoKHQ9PiJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiPT09dC5sb2NhbE5hbWU/dGhpcy5fZ2V0Q2hpbGRDb2x1bW5zKHQpOlt0XSkpLnJlZHVjZSgoKHQsZSk9PnQuY29uY2F0KGUpKSxbXSl9X2dldENvbHVtblRyZWUoKXtjb25zdCB0PVtdO2ZvcihsZXQgZT16aS5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzKS5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KTt0LnB1c2goZSksdGhpcy5faGFzQ29sdW1uR3JvdXBzKGUpOyllPXRoaXMuX2ZsYXR0ZW5Db2x1bW5Hcm91cHMoZSk7cmV0dXJuIHR9X3VwZGF0ZUNvbHVtblRyZWUoKXtjb25zdCB0PXRoaXMuX2dldENvbHVtblRyZWUoKTt0aGlzLl9hcnJheUVxdWFscyh0LHRoaXMuX2NvbHVtblRyZWUpfHwodGhpcy5fY29sdW1uVHJlZT10KX1fYWRkTm9kZU9ic2VydmVyKCl7dGhpcy5fb2JzZXJ2ZXI9bmV3IHppKHRoaXMsKHQ9Pntjb25zdCBlPXQuYWRkZWROb2Rlcy5maWx0ZXIoKHQ9PiJ0ZW1wbGF0ZSI9PT10LmxvY2FsTmFtZSYmdC5jbGFzc0xpc3QuY29udGFpbnMoInJvdy1kZXRhaWxzIikpKVswXTtlJiZ0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGUhPT1lJiYodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlPWUpO2NvbnN0IG49dD0+dC5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KS5sZW5ndGg+MDtpZihuKHQuYWRkZWROb2Rlcyl8fG4odC5yZW1vdmVkTm9kZXMpKXtjb25zdCBlPXQucmVtb3ZlZE5vZGVzLmZsYXRNYXAoKHQ9PnQuX2FsbENlbGxzKSksbj10PT5lLmZpbHRlcigoZT0+ZS5fY29udGVudC5jb250YWlucyh0KSkpLmxlbmd0aDt0aGlzLl9fcmVtb3ZlU29ydGVycyh0aGlzLl9zb3J0ZXJzLmZpbHRlcihuKSksdGhpcy5fX3JlbW92ZUZpbHRlcnModGhpcy5fZmlsdGVycy5maWx0ZXIobikpLHRoaXMuX3VwZGF0ZUNvbHVtblRyZWUoKX10aGlzLl9kZWJvdW5jZXJDaGVja0ltcG9ydHM9VG4uZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQ2hlY2tJbXBvcnRzLGd0LmFmdGVyKDJlMyksdGhpcy5fY2hlY2tJbXBvcnRzLmJpbmQodGhpcykpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfSkpfV9hcnJheUVxdWFscyh0LGUpe2lmKCF0fHwhZXx8dC5sZW5ndGghPWUubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKylpZih0W25daW5zdGFuY2VvZiBBcnJheSYmZVtuXWluc3RhbmNlb2YgQXJyYXkpe2lmKCF0aGlzLl9hcnJheUVxdWFscyh0W25dLGVbbl0pKXJldHVybiExfWVsc2UgaWYodFtuXSE9ZVtuXSlyZXR1cm4hMTtyZXR1cm4hMH1fY2hlY2tJbXBvcnRzKCl7WyJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiLCJ2YWFkaW4tZ3JpZC1maWx0ZXIiLCJ2YWFkaW4tZ3JpZC1maWx0ZXItY29sdW1uIiwidmFhZGluLWdyaWQtdHJlZS10b2dnbGUiLCJ2YWFkaW4tZ3JpZC1zZWxlY3Rpb24tY29sdW1uIiwidmFhZGluLWdyaWQtc29ydC1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC1zb3J0ZXIiXS5mb3JFYWNoKCh0PT57Y29uc3QgZT10aGlzLnF1ZXJ5U2VsZWN0b3IodCk7IWV8fGUgaW5zdGFuY2VvZiB5ZXx8Y29uc29sZS53YXJuKGBNYWtlIHN1cmUgeW91IGhhdmUgaW1wb3J0ZWQgdGhlIHJlcXVpcmVkIG1vZHVsZSBmb3IgPCR7dH0+IGVsZW1lbnQuYCl9KSl9X3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpe0FycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRyIikpLmZvckVhY2goKHQ9PnRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbkZvclJvdyh0KSkpfV91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW5Gb3JSb3codCl7QXJyYXkuZnJvbSh0LnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0iY2VsbCJdOm5vdChbcGFydH49ImRldGFpbHMtY2VsbCJdKScpKS5zb3J0KCgodCxlKT0+dC5fY29sdW1uLl9vcmRlci1lLl9jb2x1bW4uX29yZGVyKSkuZm9yRWFjaCgoKHQsZSxuKT0+e3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZmlyc3QtY29sdW1uIiwwPT09ZSx0KSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImxhc3QtY29sdW1uIixlPT09bi5sZW5ndGgtMSx0KX0pKX1faXNDb2x1bW5FbGVtZW50KHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJi9cYmNvbHVtblxiLy50ZXN0KHQubG9jYWxOYW1lKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBWYWFkaW4gTHRkLgogICAgICogVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgICovLEgkdD10PT5jbGFzcyBleHRlbmRzIHR7Z2V0RXZlbnRDb250ZXh0KHQpe2NvbnN0IGU9e30sbj10LmNvbXBvc2VkUGF0aCgpLGk9bltuLmluZGV4T2YodGhpcy4kLnRhYmxlKS0zXTtyZXR1cm4gaT8oZS5zZWN0aW9uPVsiYm9keSIsImhlYWRlciIsImZvb3RlciIsImRldGFpbHMiXS5maWx0ZXIoKHQ9PmkuZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZih0KT4tMSkpWzBdLGkuX2NvbHVtbiYmKGUuY29sdW1uPWkuX2NvbHVtbiksImJvZHkiIT09ZS5zZWN0aW9uJiYiZGV0YWlscyIhPT1lLnNlY3Rpb258fE9iamVjdC5hc3NpZ24oZSx0aGlzLl9fZ2V0Um93TW9kZWwoaS5wYXJlbnRFbGVtZW50KSksZSk6ZX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBWYWFkaW4gTHRkLgogICAgICogVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgICovLEYkdD10PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue19maWx0ZXJzOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fX19cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZmlsdGVyLWNoYW5nZWQiLHRoaXMuX2ZpbHRlckNoYW5nZWQuYmluZCh0aGlzKSl9X2ZpbHRlckNoYW5nZWQodCl7dC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9fYWRkRmlsdGVyKHQudGFyZ2V0KSx0aGlzLl9fYXBwbHlGaWx0ZXJzKCl9X19yZW1vdmVGaWx0ZXJzKHQpezAhPXQubGVuZ3RoJiYodGhpcy5fZmlsdGVycz10aGlzLl9maWx0ZXJzLmZpbHRlcigoZT0+dC5pbmRleE9mKGUpPDApKSx0aGlzLl9fYXBwbHlGaWx0ZXJzKCkpfV9fYWRkRmlsdGVyKHQpey0xPT09dGhpcy5fZmlsdGVycy5pbmRleE9mKHQpJiZ0aGlzLl9maWx0ZXJzLnB1c2godCl9X19hcHBseUZpbHRlcnMoKXt0aGlzLmRhdGFQcm92aWRlciYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLmNsZWFyQ2FjaGUoKX1fbWFwRmlsdGVycygpe3JldHVybiB0aGlzLl9maWx0ZXJzLm1hcCgodD0+KHtwYXRoOnQucGF0aCx2YWx1ZTp0LnZhbHVlfSkpKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBWYWFkaW4gTHRkLgogICAgICogVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgICovO2NsYXNzIFYkdCBleHRlbmRzIHlle3N0YXRpYyBnZXQgaXMoKXtyZXR1cm4idmFhZGluLWdyaWQtdGVtcGxhdGl6ZXIifXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntkYXRhSG9zdDpPYmplY3QsdGVtcGxhdGU6T2JqZWN0LF90ZW1wbGF0ZUluc3RhbmNlczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX3BhcmVudFBhdGhWYWx1ZXM6e3ZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue319fSxfZ3JpZDpPYmplY3R9fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfdGVtcGxhdGVJbnN0YW5jZXNDaGFuZ2VkKF90ZW1wbGF0ZUluc3RhbmNlcy4qLCBfcGFyZW50UGF0aFZhbHVlcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9pbnN0YW5jZVByb3BzPXtkZXRhaWxzT3BlbmVkOiEwLGluZGV4OiEwLGl0ZW06ITAsc2VsZWN0ZWQ6ITAsZXhwYW5kZWQ6ITAsbGV2ZWw6ITB9fWNyZWF0ZUluc3RhbmNlKCl7dGhpcy5fZW5zdXJlVGVtcGxhdGl6ZWQoKTtjb25zdCB0PW5ldyB0aGlzLl9UZW1wbGF0ZUNsYXNzKHt9KTtyZXR1cm4gdGhpcy5hZGRJbnN0YW5jZSh0KSx0fWFkZEluc3RhbmNlKHQpey0xPT09dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuaW5kZXhPZih0KSYmKHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLnB1c2godCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+dGhpcy5ub3RpZnlQYXRoKCJfdGVtcGxhdGVJbnN0YW5jZXMuKiIsdGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMpKSkpfXJlbW92ZUluc3RhbmNlKHQpe2NvbnN0IGU9dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuaW5kZXhPZih0KTt0aGlzLnNwbGljZSgiX3RlbXBsYXRlSW5zdGFuY2VzIixlLDEpfV9lbnN1cmVUZW1wbGF0aXplZCgpe3RoaXMuX1RlbXBsYXRlQ2xhc3N8fCh0aGlzLl9UZW1wbGF0ZUNsYXNzPSRyKHRoaXMudGVtcGxhdGUsdGhpcyx7aW5zdGFuY2VQcm9wczp0aGlzLl9pbnN0YW5jZVByb3BzLHBhcmVudE1vZGVsOiEwLGZvcndhcmRIb3N0UHJvcDpmdW5jdGlvbih0LGUpe3RoaXMuX2ZvcndhcmRQYXJlbnRQcm9wKHQsZSksdGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMmJnRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmZvckVhY2goKG49Pm4ubm90aWZ5UGF0aCh0LGUpKSl9LG5vdGlmeUluc3RhbmNlUHJvcDpmdW5jdGlvbih0LGUsbil7aWYoImluZGV4Ij09PWV8fCJpdGVtIj09PWUpcmV0dXJuO2NvbnN0IGk9YF9fJHtlfV9fYDtpZih0W2ldPT09bilyZXR1cm47dFtpXT1uO2NvbnN0IHI9QXJyYXkuZnJvbSh0aGlzLl9ncmlkLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcigoZT0+dGhpcy5fZ3JpZC5faXRlbXNFcXVhbChlLl9pdGVtLHQuaXRlbSkpKVswXTtyJiZBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2goKHQ9Pnt0Ll9pbnN0YW5jZSYmKHQuX2luc3RhbmNlW2ldPW4sdC5faW5zdGFuY2Uubm90aWZ5UGF0aChlLG4pKX0pKTtjb25zdCBvPSJpdGVtLiI7aWYoQXJyYXkuaXNBcnJheSh0aGlzLl9ncmlkLml0ZW1zKSYmMD09PWUuaW5kZXhPZihvKSl7Y29uc3QgaT10aGlzLl9ncmlkLml0ZW1zLmluZGV4T2YodC5pdGVtKSxyPWUuc2xpY2Uoby5sZW5ndGgpO3RoaXMuX2dyaWQubm90aWZ5UGF0aChgaXRlbXMuJHtpfS4ke3J9YCxuKX1jb25zdCBhPWBfJHtlfUluc3RhbmNlQ2hhbmdlZENhbGxiYWNrYDt0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkW2FdJiZ0aGlzLl9ncmlkW2FdKHQsbil9fSkpfV9mb3J3YXJkUGFyZW50UHJvcCh0LGUpe3RoaXMuX3BhcmVudFBhdGhWYWx1ZXNbdF09ZSx0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKChuPT5uLm5vdGlmeVBhdGgodCxlKSkpfV90ZW1wbGF0ZUluc3RhbmNlc0NoYW5nZWQodCl7bGV0IGUsbjtpZigiX3RlbXBsYXRlSW5zdGFuY2VzIj09PXQucGF0aCllPTAsbj10aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5sZW5ndGg7ZWxzZXtpZigiX3RlbXBsYXRlSW5zdGFuY2VzLnNwbGljZXMiIT09dC5wYXRoKXJldHVybjtlPXQudmFsdWUuaW5kZXgsbj10LnZhbHVlLmFkZGVkQ291bnR9T2JqZWN0LmtleXModGhpcy5fcGFyZW50UGF0aFZhbHVlc3x8e30pLmZvckVhY2goKHQ9Pntmb3IobGV0IGk9ZTtpPGUrbjtpKyspdGhpcy5fdGVtcGxhdGVJbnN0YW5jZXNbaV0uc2V0KHQsdGhpcy5fcGFyZW50UGF0aFZhbHVlc1t0XSl9KSl9fWN1c3RvbUVsZW1lbnRzLmRlZmluZShWJHQuaXMsViR0KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IChjKSAyMDIxIFZhYWRpbiBMdGQuCiAgICAgKiBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAgKi8KY29uc3QgVSR0PXQ9PmNsYXNzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGV0YWlsc09wZW5lZEl0ZW1zOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfcm93RGV0YWlsc1RlbXBsYXRlOk9iamVjdCxyb3dEZXRhaWxzUmVuZGVyZXI6RnVuY3Rpb24sX2RldGFpbHNDZWxsczp7dHlwZTpBcnJheX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZChkZXRhaWxzT3BlbmVkSXRlbXMuKiwgX3Jvd0RldGFpbHNUZW1wbGF0ZSwgcm93RGV0YWlsc1JlbmRlcmVyKSIsIl9yb3dEZXRhaWxzVGVtcGxhdGVPclJlbmRlcmVyQ2hhbmdlZChfcm93RGV0YWlsc1RlbXBsYXRlLCByb3dEZXRhaWxzUmVuZGVyZXIpIl19X3Jvd0RldGFpbHNUZW1wbGF0ZU9yUmVuZGVyZXJDaGFuZ2VkKHQsZSl7aWYodCYmZSl0aHJvdyBuZXcgRXJyb3IoIllvdSBzaG91bGQgb25seSB1c2UgZWl0aGVyIGEgcmVuZGVyZXIgb3IgYSB0ZW1wbGF0ZSBmb3Igcm93IGRldGFpbHMiKTtpZih0fHxlKXtpZih0JiYhdC50ZW1wbGF0aXplcil7Y29uc3QgZT1uZXcgViR0O2UuX2dyaWQ9dGhpcyxlLmRhdGFIb3N0PXRoaXMuZGF0YUhvc3QsZS50ZW1wbGF0ZT10LHQudGVtcGxhdGl6ZXI9ZX10aGlzLl9jb2x1bW5UcmVlJiZBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaCgodD0+e3QucXVlcnlTZWxlY3RvcigiW3BhcnR+PWRldGFpbHMtY2VsbF0iKXx8KHRoaXMuX3VwZGF0ZVJvdyh0LHRoaXMuX2NvbHVtblRyZWVbdGhpcy5fY29sdW1uVHJlZS5sZW5ndGgtMV0pLHRoaXMuX2ExMXlVcGRhdGVSb3dEZXRhaWxzT3BlbmVkKHQsITEpKSxkZWxldGUgdC5xdWVyeVNlbGVjdG9yKCJbcGFydH49ZGV0YWlscy1jZWxsXSIpLl9pbnN0YW5jZX0pKSx0aGlzLmRldGFpbHNPcGVuZWRJdGVtcy5sZW5ndGgmJihBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaCh0aGlzLl90b2dnbGVEZXRhaWxzQ2VsbCx0aGlzKSx0aGlzLl91cGRhdGUoKSl9fV9kZXRhaWxzT3BlbmVkSXRlbXNDaGFuZ2VkKHQpeyJkZXRhaWxzT3BlbmVkSXRlbXMubGVuZ3RoIiE9PXQucGF0aCYmdC52YWx1ZSYmQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2goKHQ9Pnt0aGlzLl90b2dnbGVEZXRhaWxzQ2VsbCh0LHQuX2l0ZW0pLHRoaXMuX2ExMXlVcGRhdGVSb3dEZXRhaWxzT3BlbmVkKHQsdGhpcy5faXNEZXRhaWxzT3BlbmVkKHQuX2l0ZW0pKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRldGFpbHMtb3BlbmVkIix0aGlzLl9pc0RldGFpbHNPcGVuZWQodC5faXRlbSksdCl9KSl9X2NvbmZpZ3VyZURldGFpbHNDZWxsKHQpe3Quc2V0QXR0cmlidXRlKCJwYXJ0IiwiY2VsbCBkZXRhaWxzLWNlbGwiKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIsITAsdCl9X3RvZ2dsZURldGFpbHNDZWxsKHQsZSl7Y29uc3Qgbj10LnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKTtpZighbilyZXR1cm47Y29uc3QgaT0hdGhpcy5faXNEZXRhaWxzT3BlbmVkKGUpLHI9ISFuLmhpZGRlbiE9PWk7KG4uX2luc3RhbmNlfHxuLl9yZW5kZXJlcikmJm4uaGlkZGVuPT09aXx8KG4uaGlkZGVuPWksaT90LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJwYWRkaW5nLWJvdHRvbSIpOih0aGlzLnJvd0RldGFpbHNSZW5kZXJlcj8obi5fcmVuZGVyZXI9dGhpcy5yb3dEZXRhaWxzUmVuZGVyZXIsbi5fcmVuZGVyZXIuY2FsbCh0aGlzLG4uX2NvbnRlbnQsdGhpcyx7aW5kZXg6dC5pbmRleCxpdGVtOmV9KSk6dGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlJiYhbi5faW5zdGFuY2UmJihuLl9pbnN0YW5jZT10aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGUudGVtcGxhdGl6ZXIuY3JlYXRlSW5zdGFuY2UoKSxuLl9jb250ZW50LmlubmVySFRNTD0iIixuLl9jb250ZW50LmFwcGVuZENoaWxkKG4uX2luc3RhbmNlLnJvb3QpLHRoaXMuX3VwZGF0ZUl0ZW0odCxlKSksRGkoKSx0LnN0eWxlLnNldFByb3BlcnR5KCJwYWRkaW5nLWJvdHRvbSIsYCR7bi5vZmZzZXRIZWlnaHR9cHhgKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT50aGlzLm5vdGlmeVJlc2l6ZSgpKSkpKSxyJiYodGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSl9X3VwZGF0ZURldGFpbHNDZWxsSGVpZ2h0cygpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl06bm90KFtoaWRkZW5dKScpKS5mb3JFYWNoKCh0PT57dC5wYXJlbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCJwYWRkaW5nLWJvdHRvbSIsYCR7dC5vZmZzZXRIZWlnaHR9cHhgKX0pKX1faXNEZXRhaWxzT3BlbmVkKHQpe3JldHVybiB0aGlzLmRldGFpbHNPcGVuZWRJdGVtcyYmLTEhPT10aGlzLl9nZXRJdGVtSW5kZXhJbkFycmF5KHQsdGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMpfW9wZW5JdGVtRGV0YWlscyh0KXt0aGlzLl9pc0RldGFpbHNPcGVuZWQodCl8fCh0aGlzLmRldGFpbHNPcGVuZWRJdGVtcz1bLi4udGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMsdF0pfWNsb3NlSXRlbURldGFpbHModCl7dGhpcy5faXNEZXRhaWxzT3BlbmVkKHQpJiYodGhpcy5kZXRhaWxzT3BlbmVkSXRlbXM9dGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMuZmlsdGVyKChlPT4hdGhpcy5faXRlbXNFcXVhbChlLHQpKSkpfV9kZXRhaWxzT3BlbmVkSW5zdGFuY2VDaGFuZ2VkQ2FsbGJhY2sodCxlKXtlP3RoaXMub3Blbkl0ZW1EZXRhaWxzKHQuaXRlbSk6dGhpcy5jbG9zZUl0ZW1EZXRhaWxzKHQuaXRlbSl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMjEgVmFhZGluIEx0ZC4KICAgICAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICAqLyxqJHQ9dD0+Y2xhc3MgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntfZnJvemVuQ2VsbHM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxfcm93V2l0aEZvY3VzZWRFbGVtZW50OkVsZW1lbnQsX2RlbHRhWUFjYzp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3VzZVN0aWNreTp7dHlwZTpCb29sZWFuLHZhbHVlOndpbmRvdy5DU1MmJndpbmRvdy5DU1Muc3VwcG9ydHMmJih3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsInN0aWNreSIpfHx3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsIi13ZWJraXQtc3RpY2t5IikpfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zY3JvbGxWaWV3cG9ydEhlaWdodFVwZGF0ZWQoX3ZpZXdwb3J0SGVpZ2h0KSJdfXNldCBfc2Nyb2xsVG9wKHQpe3RoaXMuJC50YWJsZS5zY3JvbGxUb3A9dH1nZXQgX3Njcm9sbFRvcCgpe3JldHVybiB0aGlzLiQudGFibGUuc2Nyb2xsVG9wfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zY3JvbGxMaW5lSGVpZ2h0PXRoaXMuX2dldFNjcm9sbExpbmVIZWlnaHQoKX1fZ2V0U2Nyb2xsTGluZUhlaWdodCgpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5zdHlsZS5mb250U2l6ZT0iaW5pdGlhbCIsdC5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpO2NvbnN0IGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCkuZm9udFNpemU7cmV0dXJuIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCksZT93aW5kb3cucGFyc2VJbnQoZSk6dm9pZCAwfV9zY3JvbGxWaWV3cG9ydEhlaWdodFVwZGF0ZWQodCl7dGhpcy5fc2Nyb2xsUGFnZUhlaWdodD10LXRoaXMuJC5oZWFkZXIuY2xpZW50SGVpZ2h0LXRoaXMuJC5mb290ZXIuY2xpZW50SGVpZ2h0LXRoaXMuX3Njcm9sbExpbmVIZWlnaHR9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuJC5vdXRlcnNjcm9sbGVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc2Nyb2xsVGFyZ2V0PXRoaXMuJC50YWJsZSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIix0aGlzLl9vbldoZWVsKSx0aGlzLiQuaXRlbXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsKHQ9Pntjb25zdCBlPXQuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLiQuaXRlbXMpO3RoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudD10LmNvbXBvc2VkUGF0aCgpW2UtMV19KSksdGhpcy4kLml0ZW1zLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0IiwoKCk9PnRoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudD12b2lkIDApKSx0aGlzLnNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCgoKT0+dGhpcy5fX21vdXNlRG93bj0hMCkpLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCgoKT0+e3RoaXMuX19tb3VzZURvd249ITEsdGhpcy5fX3BlbmRpbmdSZW9yZGVyJiYodGhpcy5fX3BlbmRpbmdSZW9yZGVyPSExLHNldFRpbWVvdXQoKCgpPT50aGlzLl9yZW9yZGVyUm93cygpKSw1MDApKX0pKX1zY3JvbGxUb0luZGV4KHQpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgoKT0+c3VwZXIuc2Nyb2xsVG9JbmRleCh0KSkpfV9vbldoZWVsKHQpe2lmKHQuY3RybEtleXx8dGhpcy5faGFzU2Nyb2xsZWRBbmNlc3Rvcih0LnRhcmdldCx0LmRlbHRhWCx0LmRlbHRhWSkpcmV0dXJuO2NvbnN0IGU9dGhpcy4kLnRhYmxlO2xldCBuPXQuZGVsdGFZO2lmKHQuZGVsdGFNb2RlPT09V2hlZWxFdmVudC5ET01fREVMVEFfTElORT9uKj10aGlzLl9zY3JvbGxMaW5lSGVpZ2h0OnQuZGVsdGFNb2RlPT09V2hlZWxFdmVudC5ET01fREVMVEFfUEFHRSYmKG4qPXRoaXMuX3Njcm9sbFBhZ2VIZWlnaHQpLHRoaXMuX3doZWVsQW5pbWF0aW9uRnJhbWUpcmV0dXJuIHRoaXMuX2RlbHRhWUFjYys9bix2b2lkIHQucHJldmVudERlZmF1bHQoKTtuKz10aGlzLl9kZWx0YVlBY2MsdGhpcy5fZGVsdGFZQWNjPTAsdGhpcy5fd2hlZWxBbmltYXRpb25GcmFtZT0hMCx0aGlzLl9kZWJvdW5jZXJXaGVlbEFuaW1hdGlvbkZyYW1lPVRuLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcldoZWVsQW5pbWF0aW9uRnJhbWUsX3QsKCgpPT50aGlzLl93aGVlbEFuaW1hdGlvbkZyYW1lPSExKSk7Y29uc3QgaT1NYXRoLmFicyh0LmRlbHRhWCkrTWF0aC5hYnMobik7dGhpcy5fY2FuU2Nyb2xsKGUsdC5kZWx0YVgsbik/KHQucHJldmVudERlZmF1bHQoKSxlLnNjcm9sbFRvcCs9bixlLnNjcm9sbExlZnQrPXQuZGVsdGFYLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSx0aGlzLl9oYXNSZXNpZHVhbE1vbWVudHVtPSEwLHRoaXMuX2lnbm9yZU5ld1doZWVsPSEwLHRoaXMuX2RlYm91bmNlcklnbm9yZU5ld1doZWVsPVRuLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcklnbm9yZU5ld1doZWVsLGd0LmFmdGVyKDUwMCksKCgpPT50aGlzLl9pZ25vcmVOZXdXaGVlbD0hMSkpKTp0aGlzLl9oYXNSZXNpZHVhbE1vbWVudHVtJiZpPD10aGlzLl9wcmV2aW91c01vbWVudHVtfHx0aGlzLl9pZ25vcmVOZXdXaGVlbD90LnByZXZlbnREZWZhdWx0KCk6aT50aGlzLl9wcmV2aW91c01vbWVudHVtJiYodGhpcy5faGFzUmVzaWR1YWxNb21lbnR1bT0hMSksdGhpcy5fcHJldmlvdXNNb21lbnR1bT1pfV9oYXNTY3JvbGxlZEFuY2VzdG9yKHQsZSxuKXtyZXR1cm4idmFhZGluLWdyaWQtY2VsbC1jb250ZW50IiE9PXQubG9jYWxOYW1lJiYoISghdGhpcy5fY2FuU2Nyb2xsKHQsZSxuKXx8LTE9PT1bImF1dG8iLCJzY3JvbGwiXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUodCkub3ZlcmZsb3cpKXx8KHQhPT10aGlzJiZ0LnBhcmVudEVsZW1lbnQ/dGhpcy5faGFzU2Nyb2xsZWRBbmNlc3Rvcih0LnBhcmVudEVsZW1lbnQsZSxuKTp2b2lkIDApKX1fY2FuU2Nyb2xsKHQsZSxuKXtyZXR1cm4gbj4wJiZ0LnNjcm9sbFRvcDx0LnNjcm9sbEhlaWdodC10Lm9mZnNldEhlaWdodHx8bjwwJiZ0LnNjcm9sbFRvcD4wfHxlPjAmJnQuc2Nyb2xsTGVmdDx0LnNjcm9sbFdpZHRoLXQub2Zmc2V0V2lkdGh8fGU8MCYmdC5zY3JvbGxMZWZ0PjB9X3NjaGVkdWxlU2Nyb2xsaW5nKCl7dGhpcy5fc2Nyb2xsaW5nRnJhbWV8fCh0aGlzLl9zY3JvbGxpbmdGcmFtZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoInNjcm9sbGluZyIsITAsdGhpcy4kLnNjcm9sbGVyKSkpKSx0aGlzLl9kZWJvdW5jZVNjcm9sbGluZz1Ubi5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZVNjcm9sbGluZyxndC5hZnRlcig1MDApLCgoKT0+e2NhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Njcm9sbGluZ0ZyYW1lKSxkZWxldGUgdGhpcy5fc2Nyb2xsaW5nRnJhbWUsdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJzY3JvbGxpbmciLCExLHRoaXMuJC5zY3JvbGxlciksdGhpcy5fcmVvcmRlclJvd3MoKX0pKX1fYWZ0ZXJTY3JvbGwoKXt0aGlzLl90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHMoKSx0aGlzLmhhc0F0dHJpYnV0ZSgicmVvcmRlcmluZyIpfHx0aGlzLl9zY2hlZHVsZVNjcm9sbGluZygpLHRoaXMuX3VwZGF0ZU92ZXJmbG93KCl9X3VwZGF0ZU92ZXJmbG93KCl7bGV0IHQ9IiI7Y29uc3QgZT10aGlzLiQudGFibGU7ZS5zY3JvbGxUb3A8ZS5zY3JvbGxIZWlnaHQtZS5jbGllbnRIZWlnaHQmJih0Kz0iIGJvdHRvbSIpLGUuc2Nyb2xsVG9wPjAmJih0Kz0iIHRvcCIpLGUuc2Nyb2xsTGVmdDxlLnNjcm9sbFdpZHRoLWUuY2xpZW50V2lkdGgmJih0Kz0iIHJpZ2h0IiksZS5zY3JvbGxMZWZ0PjAmJih0Kz0iIGxlZnQiKSx0aGlzLl9kZWJvdW5jZU92ZXJmbG93PVRuLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlT3ZlcmZsb3csX3QsKCgpPT57Y29uc3QgZT10LnRyaW0oKTtlLmxlbmd0aD4wJiZ0aGlzLmdldEF0dHJpYnV0ZSgib3ZlcmZsb3ciKSE9PWU/dGhpcy5zZXRBdHRyaWJ1dGUoIm92ZXJmbG93IixlKTowPT1lLmxlbmd0aCYmdGhpcy5oYXNBdHRyaWJ1dGUoIm92ZXJmbG93IikmJnRoaXMucmVtb3ZlQXR0cmlidXRlKCJvdmVyZmxvdyIpfSkpfV9yZW9yZGVyUm93cygpe2lmKHRoaXMuX19tb3VzZURvd24pcmV0dXJuIHZvaWQodGhpcy5fX3BlbmRpbmdSZW9yZGVyPSEwKTtjb25zdCB0PXRoaXMuJC5pdGVtcyxlPXQucXVlcnlTZWxlY3RvckFsbCgidHIiKTtpZighZS5sZW5ndGgpcmV0dXJuO2NvbnN0IG49dGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3ZpZHhPZmZzZXQsaT10aGlzLl9yb3dXaXRoRm9jdXNlZEVsZW1lbnR8fEFycmF5LmZyb20oZSkuZmlsdGVyKCh0PT4hdC5oaWRkZW4pKVswXTtpZighaSlyZXR1cm47Y29uc3Qgcj1pLmluZGV4LW4sbz1BcnJheS5mcm9tKGUpLmluZGV4T2YoaSktcjtpZihvPjApZm9yKGxldCBuPTA7bjxvO24rKyl0LmFwcGVuZENoaWxkKGVbbl0pO2Vsc2UgaWYobzwwKWZvcihsZXQgbj1lLmxlbmd0aCtvO248ZS5sZW5ndGg7bisrKXQuaW5zZXJ0QmVmb3JlKGVbbl0sZVswXSk7aWYodGhpcy5fc2FmYXJpKXtjb25zdHt0cmFuc2Zvcm06dH09dGhpcy4kLmhlYWRlci5zdHlsZTt0aGlzLiQuaGVhZGVyLnN0eWxlLnRyYW5zZm9ybT0iIixzZXRUaW1lb3V0KCgoKT0+dGhpcy4kLmhlYWRlci5zdHlsZS50cmFuc2Zvcm09dCkpfX1fZnJvemVuQ2VsbHNDaGFuZ2VkKCl7dGhpcy5fZGVib3VuY2VyQ2FjaGVFbGVtZW50cz1Ubi5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJDYWNoZUVsZW1lbnRzLHZ0LCgoKT0+e0FycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0iY2VsbCJdJykpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Quc3R5bGUudHJhbnNmb3JtPSIifSkpLHRoaXMuX2Zyb3plbkNlbGxzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuJC50YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCJbZnJvemVuXSIpKSx0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpLHRoaXMuX3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpfSkpLHRoaXMuX3VwZGF0ZUxhc3RGcm96ZW4oKX1fdXBkYXRlU2Nyb2xsZXJNZWFzdXJlbWVudHMoKXt0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg+MCYmdGhpcy5fX2lzUlRMJiYodGhpcy5fX3Njcm9sbGVyTWV0cmljcz17c2Nyb2xsV2lkdGg6dGhpcy4kLnRhYmxlLnNjcm9sbFdpZHRoLGNsaWVudFdpZHRoOnRoaXMuJC50YWJsZS5jbGllbnRXaWR0aH0pfV91cGRhdGVMYXN0RnJvemVuKCl7aWYoIXRoaXMuX2NvbHVtblRyZWUpcmV0dXJuO2NvbnN0IHQ9dGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXS5zbGljZSgwKTt0LnNvcnQoKCh0LGUpPT50Ll9vcmRlci1lLl9vcmRlcikpO2NvbnN0IGU9dC5yZWR1Y2UoKCh0LGUsbik9PihlLl9sYXN0RnJvemVuPSExLGUuZnJvemVuJiYhZS5oaWRkZW4/bjp0KSksdm9pZCAwKTt2b2lkIDAhPT1lJiYodFtlXS5fbGFzdEZyb3plbj0hMCl9X3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpe2NvbnN0IHQ9TWF0aC5tYXgoMCx0aGlzLl9zY3JvbGxMZWZ0KSxlPU1hdGgubWF4KDAsdGhpcy5fc2Nyb2xsVG9wKTtsZXQgbj0wLGk9MCxyPTA7aWYodGhpcy5fdXNlU3RpY2t5fHwobj10LGk9ZSxyPXRoaXMuJC50YWJsZS5jbGllbnRIZWlnaHQtdGhpcy4kLmZvb3Rlci5vZmZzZXRIZWlnaHQtdGhpcy4kLmZvb3Rlci5vZmZzZXRUb3ApLHRoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtdCtuLGkpLHRoaXMuJC5mb290ZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtdCtuLGkrciksdGhpcy4kLml0ZW1zLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoLXQrbiwwKSx0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg+MCl7Y29uc3QgdD10aGlzLl9faXNSVEw/dGhpcy5fX2dldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHRoaXMuJC50YWJsZSkrdGhpcy5fX3Njcm9sbGVyTWV0cmljcy5jbGllbnRXaWR0aC10aGlzLl9fc2Nyb2xsZXJNZXRyaWNzLnNjcm9sbFdpZHRoOnRoaXMuX3Njcm9sbExlZnQsZT10aGlzLl9nZXRUcmFuc2xhdGUodCwwKTtmb3IobGV0IHQ9MDt0PHRoaXMuX2Zyb3plbkNlbGxzLmxlbmd0aDt0KyspdGhpcy5fZnJvemVuQ2VsbHNbdF0uc3R5bGUudHJhbnNmb3JtPWV9fV9nZXRUcmFuc2xhdGUodCxlKXtyZXR1cm5gdHJhbnNsYXRlKCR7dH1weCwgJHtlfXB4KWB9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMjEgVmFhZGluIEx0ZC4KICAgICAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICAqLyxHJHQ9dD0+Y2xhc3MgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntzZWxlY3RlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6KCk9PltdfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zZWxlY3RlZEl0ZW1zQ2hhbmdlZChzZWxlY3RlZEl0ZW1zLiopIl19X2lzU2VsZWN0ZWQodCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcyYmdGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheSh0LHRoaXMuc2VsZWN0ZWRJdGVtcyk+LTF9c2VsZWN0SXRlbSh0KXt0aGlzLl9pc1NlbGVjdGVkKHQpfHwodGhpcy5zZWxlY3RlZEl0ZW1zPVsuLi50aGlzLnNlbGVjdGVkSXRlbXMsdF0pfWRlc2VsZWN0SXRlbSh0KXt0aGlzLl9pc1NlbGVjdGVkKHQpJiYodGhpcy5zZWxlY3RlZEl0ZW1zPXRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGU9PiF0aGlzLl9pdGVtc0VxdWFsKGUsdCkpKSl9X3RvZ2dsZUl0ZW0odCl7LTE9PT10aGlzLl9nZXRJdGVtSW5kZXhJbkFycmF5KHQsdGhpcy5zZWxlY3RlZEl0ZW1zKT90aGlzLnNlbGVjdEl0ZW0odCk6dGhpcy5kZXNlbGVjdEl0ZW0odCl9X3NlbGVjdGVkSXRlbXNDaGFuZ2VkKHQpeyF0aGlzLiQuaXRlbXMuY2hpbGRyZW4ubGVuZ3RofHwic2VsZWN0ZWRJdGVtcyIhPT10LnBhdGgmJiJzZWxlY3RlZEl0ZW1zLnNwbGljZXMiIT09dC5wYXRofHxBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaCgodD0+e3RoaXMuX3VwZGF0ZUl0ZW0odCx0Ll9pdGVtKX0pKX1fc2VsZWN0ZWRJbnN0YW5jZUNoYW5nZWRDYWxsYmFjayh0LGUpe2U/dGhpcy5zZWxlY3RJdGVtKHQuaXRlbSk6dGhpcy5kZXNlbGVjdEl0ZW0odC5pdGVtKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBWYWFkaW4gTHRkLgogICAgICogVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgICovLFckdD10PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue211bHRpU29ydDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfc29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX3ByZXZpb3VzU29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInNvcnRlci1jaGFuZ2VkIix0aGlzLl9vblNvcnRlckNoYW5nZWQpfV9vblNvcnRlckNoYW5nZWQodCl7Y29uc3QgZT10LnRhcmdldDt0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX191cGRhdGVTb3J0ZXIoZSksdGhpcy5fX2FwcGx5U29ydGVycygpfV9fcmVtb3ZlU29ydGVycyh0KXswIT10Lmxlbmd0aCYmKHRoaXMuX3NvcnRlcnM9dGhpcy5fc29ydGVycy5maWx0ZXIoKGU9PnQuaW5kZXhPZihlKTwwKSksdGhpcy5tdWx0aVNvcnQmJnRoaXMuX191cGRhdGVTb3J0T3JkZXJzKCksdGhpcy5fX2FwcGx5U29ydGVycygpKX1fX3VwZGF0ZVNvcnRPcmRlcnMoKXt0aGlzLl9zb3J0ZXJzLmZvckVhY2goKCh0LGUpPT50Ll9vcmRlcj10aGlzLl9zb3J0ZXJzLmxlbmd0aD4xP2U6bnVsbCksdGhpcyl9X191cGRhdGVTb3J0ZXIodCl7aWYodC5kaXJlY3Rpb258fC0xIT09dGhpcy5fc29ydGVycy5pbmRleE9mKHQpKWlmKHQuX29yZGVyPW51bGwsdGhpcy5tdWx0aVNvcnQpdGhpcy5fcmVtb3ZlQXJyYXlJdGVtKHRoaXMuX3NvcnRlcnMsdCksdC5kaXJlY3Rpb24mJnRoaXMuX3NvcnRlcnMudW5zaGlmdCh0KSx0aGlzLl9fdXBkYXRlU29ydE9yZGVycygpO2Vsc2UgaWYodC5kaXJlY3Rpb24pe2NvbnN0IGU9dGhpcy5fc29ydGVycy5maWx0ZXIoKGU9PmUhPXQpKTt0aGlzLl9zb3J0ZXJzPVt0XSxlLmZvckVhY2goKHQ9Pnt0Ll9vcmRlcj1udWxsLHQuZGlyZWN0aW9uPW51bGx9KSl9fV9fYXBwbHlTb3J0ZXJzKCl7dGhpcy5kYXRhUHJvdmlkZXImJnRoaXMuaXNBdHRhY2hlZCYmSlNPTi5zdHJpbmdpZnkodGhpcy5fcHJldmlvdXNTb3J0ZXJzKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMuX21hcFNvcnRlcnMoKSkmJnRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2ExMXlVcGRhdGVTb3J0ZXJzKCksdGhpcy5fcHJldmlvdXNTb3J0ZXJzPXRoaXMuX21hcFNvcnRlcnMoKX1fbWFwU29ydGVycygpe3JldHVybiB0aGlzLl9zb3J0ZXJzLm1hcCgodD0+KHtwYXRoOnQucGF0aCxkaXJlY3Rpb246dC5kaXJlY3Rpb259KSkpfV9yZW1vdmVBcnJheUl0ZW0odCxlKXtjb25zdCBuPXQuaW5kZXhPZihlKTtuPi0xJiZ0LnNwbGljZShuLDEpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IChjKSAyMDIxIFZhYWRpbiBMdGQuCiAgICAgKiBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAgKi8scSR0PXQ9PmNsYXNzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57Y2VsbENsYXNzTmFtZUdlbmVyYXRvcjpGdW5jdGlvbn19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9fY2VsbENsYXNzTmFtZUdlbmVyYXRvckNoYW5nZWQoY2VsbENsYXNzTmFtZUdlbmVyYXRvcikiXX1fX2NlbGxDbGFzc05hbWVHZW5lcmF0b3JDaGFuZ2VkKCl7dGhpcy5nZW5lcmF0ZUNlbGxDbGFzc05hbWVzKCl9Z2VuZXJhdGVDZWxsQ2xhc3NOYW1lcygpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIoKHQ9PiF0LmhpZGRlbikpLmZvckVhY2goKHQ9PnRoaXMuX2dlbmVyYXRlQ2VsbENsYXNzTmFtZXModCx0aGlzLl9fZ2V0Um93TW9kZWwodCkpKSl9X2dlbmVyYXRlQ2VsbENsYXNzTmFtZXModCxlKXtBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKHQ9PntpZih0Ll9fZ2VuZXJhdGVkQ2xhc3NlcyYmdC5fX2dlbmVyYXRlZENsYXNzZXMuZm9yRWFjaCgoZT0+dC5jbGFzc0xpc3QucmVtb3ZlKGUpKSksdGhpcy5jZWxsQ2xhc3NOYW1lR2VuZXJhdG9yKXtjb25zdCBuPXRoaXMuY2VsbENsYXNzTmFtZUdlbmVyYXRvcih0Ll9jb2x1bW4sZSk7dC5fX2dlbmVyYXRlZENsYXNzZXM9biYmbi5zcGxpdCgiICIpLmZpbHRlcigodD0+dC5sZW5ndGg+MCkpLHQuX19nZW5lcmF0ZWRDbGFzc2VzJiZ0Ll9fZ2VuZXJhdGVkQ2xhc3Nlcy5mb3JFYWNoKChlPT50LmNsYXNzTGlzdC5hZGQoZSkpKX19KSl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMjEgVmFhZGluIEx0ZC4KICAgICAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICAqLyxZJHQ9ImJldHdlZW4iLFgkdD0ib24tdG9wLW9yLWJldHdlZW4iLCQkdD0iYWJvdmUiLEskdD0iYmVsb3ciLFokdD0iZW1wdHkiLEokdD10PT5jbGFzcyBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2Ryb3BNb2RlOlN0cmluZyxyb3dzRHJhZ2dhYmxlOkJvb2xlYW4sZHJhZ0ZpbHRlcjpGdW5jdGlvbixkcm9wRmlsdGVyOkZ1bmN0aW9uLF9fZG5kQXV0b1Njcm9sbFRocmVzaG9sZDp7dmFsdWU6NTB9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RyYWdEcm9wQWNjZXNzQ2hhbmdlZChyb3dzRHJhZ2dhYmxlLCBkcm9wTW9kZSwgZHJhZ0ZpbHRlciwgZHJvcEZpbHRlcikiXX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsdGhpcy5fb25EcmFnU3RhcnQuYmluZCh0aGlzKSksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdlbmQiLHRoaXMuX29uRHJhZ0VuZC5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLHRoaXMuX29uRHJhZ092ZXIuYmluZCh0aGlzKSksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdsZWF2ZSIsdGhpcy5fb25EcmFnTGVhdmUuYmluZCh0aGlzKSksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLHRoaXMuX29uRHJvcC5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VudGVyIiwodD0+e3RoaXMuZHJvcE1vZGUmJih0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSl9KSl9X29uRHJhZ1N0YXJ0KHQpe2lmKHRoaXMucm93c0RyYWdnYWJsZSl7bGV0IGU9dC50YXJnZXQ7aWYoInZhYWRpbi1ncmlkLWNlbGwtY29udGVudCI9PT1lLmxvY2FsTmFtZSYmKGU9ZS5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZS5wYXJlbnROb2RlKSxlLnBhcmVudE5vZGUhPT10aGlzLiQuaXRlbXMpcmV0dXJuO2lmKHQuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnZ2luZy1yb3dzIiwhMCx0aGlzKSx0aGlzLl9zYWZhcmkpe2NvbnN0IHQ9ZS5zdHlsZS50cmFuc2Zvcm07ZS5zdHlsZS50b3A9L3RyYW5zbGF0ZVlcKCguKilcKS8uZXhlYyh0KVsxXSxlLnN0eWxlLnRyYW5zZm9ybT0ibm9uZSIscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e2Uuc3R5bGUudG9wPSIiLGUuc3R5bGUudHJhbnNmb3JtPXR9KSl9Y29uc3Qgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX2lvcz90LmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoZSk6dC5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGUsdC5jbGllbnRYLW4ubGVmdCx0LmNsaWVudFktbi50b3ApO2xldCBpPVtlXTt0aGlzLl9pc1NlbGVjdGVkKGUuX2l0ZW0pJiYoaT10aGlzLl9fZ2V0Vmlld3BvcnRSb3dzKCkuZmlsdGVyKCh0PT50aGlzLl9pc1NlbGVjdGVkKHQuX2l0ZW0pKSkuZmlsdGVyKCh0PT4hdGhpcy5kcmFnRmlsdGVyfHx0aGlzLmRyYWdGaWx0ZXIodGhpcy5fX2dldFJvd01vZGVsKHQpKSkpKSx0LmRhdGFUcmFuc2Zlci5zZXREYXRhKCJ0ZXh0Iix0aGlzLl9fZm9ybWF0RGVmYXVsdFRyYW5zZmVyRGF0YShpKSksZS5zZXRBdHRyaWJ1dGUoImRyYWdzdGFydCIsaS5sZW5ndGg+MT9pLmxlbmd0aDoiIiksdGhpcy51cGRhdGVTdHlsZXMoeyItLV9ncmlkLWRyYWctc3RhcnQteCI6dC5jbGllbnRYLW4ubGVmdCsyMCsicHgiLCItLV9ncmlkLWRyYWctc3RhcnQteSI6dC5jbGllbnRZLW4udG9wKzEwKyJweCJ9KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57ZS5yZW1vdmVBdHRyaWJ1dGUoImRyYWdzdGFydCIpLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1fZ3JpZC1kcmFnLXN0YXJ0LXgiOiIiLCItLV9ncmlkLWRyYWctc3RhcnQteSI6IiJ9KX0pKTtjb25zdCByPW5ldyBDdXN0b21FdmVudCgiZ3JpZC1kcmFnc3RhcnQiLHtkZXRhaWw6e2RyYWdnZWRJdGVtczppLm1hcCgodD0+dC5faXRlbSkpLHNldERyYWdEYXRhOihlLG4pPT50LmRhdGFUcmFuc2Zlci5zZXREYXRhKGUsbiksc2V0RHJhZ2dlZEl0ZW1zQ291bnQ6dD0+ZS5zZXRBdHRyaWJ1dGUoImRyYWdzdGFydCIsdCl9fSk7ci5vcmlnaW5hbEV2ZW50PXQsdGhpcy5kaXNwYXRjaEV2ZW50KHIpfX1fb25EcmFnRW5kKHQpe3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJhZ2dpbmctcm93cyIsITEsdGhpcyksdC5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBlPW5ldyBDdXN0b21FdmVudCgiZ3JpZC1kcmFnZW5kIik7ZS5vcmlnaW5hbEV2ZW50PXQsdGhpcy5kaXNwYXRjaEV2ZW50KGUpfV9vbkRyYWdMZWF2ZSh0KXt0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX2NsZWFyRHJhZ1N0eWxlcygpfV9vbkRyYWdPdmVyKHQpe2lmKHRoaXMuZHJvcE1vZGUpe2lmKHRoaXMuX2Ryb3BMb2NhdGlvbj12b2lkIDAsdGhpcy5fZHJhZ092ZXJJdGVtPXZvaWQgMCx0aGlzLl9fZG5kQXV0b1Njcm9sbCh0LmNsaWVudFkpKXJldHVybiB2b2lkIHRoaXMuX2NsZWFyRHJhZ1N0eWxlcygpO2xldCBlPXQuY29tcG9zZWRQYXRoKCkuZmlsdGVyKCh0PT4idHIiPT09dC5sb2NhbE5hbWUpKVswXTtpZih0aGlzLl9lZmZlY3RpdmVTaXplJiYib24tZ3JpZCIhPT10aGlzLmRyb3BNb2RlKWlmKGUmJmUucGFyZW50Tm9kZT09PXRoaXMuJC5pdGVtcyl7Y29uc3Qgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX2Ryb3BMb2NhdGlvbj0ib24tdG9wIix0aGlzLmRyb3BNb2RlPT09WSR0P3RoaXMuX2Ryb3BMb2NhdGlvbj10LmNsaWVudFktbi50b3A8bi5ib3R0b20tdC5jbGllbnRZPyQkdDpLJHQ6dGhpcy5kcm9wTW9kZT09PVgkdCYmKHQuY2xpZW50WS1uLnRvcDxuLmhlaWdodC8zP3RoaXMuX2Ryb3BMb2NhdGlvbj0kJHQ6dC5jbGllbnRZLW4udG9wPm4uaGVpZ2h0LzMqMiYmKHRoaXMuX2Ryb3BMb2NhdGlvbj1LJHQpKX1lbHNle2lmKGUpcmV0dXJuO2lmKHRoaXMuZHJvcE1vZGUhPT1ZJHQmJnRoaXMuZHJvcE1vZGUhPT1YJHQpcmV0dXJuO2U9QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcigodD0+IXQuaGlkZGVuKSkucG9wKCksdGhpcy5fZHJvcExvY2F0aW9uPUskdH1lbHNlIHRoaXMuX2Ryb3BMb2NhdGlvbj1aJHQ7aWYoZSYmZS5oYXNBdHRyaWJ1dGUoImRyb3AtZGlzYWJsZWQiKSlyZXR1cm4gdm9pZCh0aGlzLl9kcm9wTG9jYXRpb249dm9pZCAwKTt0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcm9wTG9jYXRpb249PT1aJHQ/dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnb3ZlciIsITAsdGhpcyk6ZT8odGhpcy5fZHJhZ092ZXJJdGVtPWUuX2l0ZW0sZS5nZXRBdHRyaWJ1dGUoImRyYWdvdmVyIikhPT10aGlzLl9kcm9wTG9jYXRpb24mJmUuc2V0QXR0cmlidXRlKCJkcmFnb3ZlciIsdGhpcy5fZHJvcExvY2F0aW9uKSk6dGhpcy5fY2xlYXJEcmFnU3R5bGVzKCl9fV9fZG5kQXV0b1Njcm9sbCh0KXtpZih0aGlzLl9fZG5kQXV0b1Njcm9sbGluZylyZXR1cm4hMDtjb25zdCBlPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tLG49dGhpcy4kLmZvb3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AsaT1lLXQrdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQscj10LW4rdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQ7bGV0IG89MDtpZihyPjA/bz0yKnI6aT4wJiYobz0yKi1pKSxvKXtjb25zdCB0PXRoaXMuJC50YWJsZS5zY3JvbGxUb3A7aWYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9byx0IT09dGhpcy4kLnRhYmxlLnNjcm9sbFRvcClyZXR1cm4gdGhpcy5fX2RuZEF1dG9TY3JvbGxpbmc9ITAsc2V0VGltZW91dCgoKCk9PnRoaXMuX19kbmRBdXRvU2Nyb2xsaW5nPSExKSwyMCksdGhpcy5fc2Nyb2xsSGFuZGxlcigpLCEwfX1fX2dldFZpZXdwb3J0Um93cygpe2NvbnN0IHQ9dGhpcy4kLmhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20sZT10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcigobj0+e2NvbnN0IGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gaS5ib3R0b20+dCYmaS50b3A8ZX0pKX1fY2xlYXJEcmFnU3R5bGVzKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImRyYWdvdmVyIiksQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2goKHQ9PnQucmVtb3ZlQXR0cmlidXRlKCJkcmFnb3ZlciIpKSl9X29uRHJvcCh0KXtpZih0aGlzLmRyb3BNb2RlKXt0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQoKTtjb25zdCBlPXQuZGF0YVRyYW5zZmVyLnR5cGVzJiZBcnJheS5mcm9tKHQuZGF0YVRyYW5zZmVyLnR5cGVzKS5tYXAoKGU9Pih7dHlwZTplLGRhdGE6dC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShlKX0pKSk7dGhpcy5fY2xlYXJEcmFnU3R5bGVzKCk7Y29uc3Qgbj1uZXcgQ3VzdG9tRXZlbnQoImdyaWQtZHJvcCIse2J1YmJsZXM6dC5idWJibGVzLGNhbmNlbGFibGU6dC5jYW5jZWxhYmxlLGRldGFpbDp7ZHJvcFRhcmdldEl0ZW06dGhpcy5fZHJhZ092ZXJJdGVtLGRyb3BMb2NhdGlvbjp0aGlzLl9kcm9wTG9jYXRpb24sZHJhZ0RhdGE6ZX19KTtuLm9yaWdpbmFsRXZlbnQ9dCx0aGlzLmRpc3BhdGNoRXZlbnQobil9fV9fZm9ybWF0RGVmYXVsdFRyYW5zZmVyRGF0YSh0KXtyZXR1cm4gdC5tYXAoKHQ9PkFycmF5LmZyb20odC5jaGlsZHJlbikuZmlsdGVyKCh0PT4hdC5oaWRkZW4mJi0xPT09dC5nZXRBdHRyaWJ1dGUoInBhcnQiKS5pbmRleE9mKCJkZXRhaWxzLWNlbGwiKSkpLnNvcnQoKCh0LGUpPT50Ll9jb2x1bW4uX29yZGVyPmUuX2NvbHVtbi5fb3JkZXI/MTotMSkpLm1hcCgodD0+dC5fY29udGVudC50ZXh0Q29udGVudC50cmltKCkpKS5maWx0ZXIoKHQ9PnQpKS5qb2luKCJcdCIpKSkuam9pbigiXG4iKX1fZHJhZ0Ryb3BBY2Nlc3NDaGFuZ2VkKCl7dGhpcy5maWx0ZXJEcmFnQW5kRHJvcCgpfWZpbHRlckRyYWdBbmREcm9wKCl7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcigodD0+IXQuaGlkZGVuKSkuZm9yRWFjaCgodD0+e3RoaXMuX2ZpbHRlckRyYWdBbmREcm9wKHQsdGhpcy5fX2dldFJvd01vZGVsKHQpKX0pKX1fZmlsdGVyRHJhZ0FuZERyb3AodCxlKXtjb25zdCBuPSF0aGlzLnJvd3NEcmFnZ2FibGV8fHRoaXMuZHJhZ0ZpbHRlciYmIXRoaXMuZHJhZ0ZpbHRlcihlKSxpPSF0aGlzLmRyb3BNb2RlfHx0aGlzLmRyb3BGaWx0ZXImJiF0aGlzLmRyb3BGaWx0ZXIoZSk7QXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5tYXAoKHQ9PnQuX2NvbnRlbnQpKS5mb3JFYWNoKCh0PT57bj90LnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ2dhYmxlIik6dC5zZXRBdHRyaWJ1dGUoImRyYWdnYWJsZSIsITApfSkpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJhZy1kaXNhYmxlZCIsbix0KSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyb3AtZGlzYWJsZWQiLGksdCl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMjEgVmFhZGluIEx0ZC4KICAgICAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICAqLyxRJHQ9dD0+Y2xhc3MgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntfaGVhZGVyRm9jdXNhYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX2ZvY3VzYWJsZUNoYW5nZWQifSxfaXRlbXNGb2N1c2FibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZm9jdXNhYmxlQ2hhbmdlZCJ9LF9mb290ZXJGb2N1c2FibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZm9jdXNhYmxlQ2hhbmdlZCJ9LF9uYXZpZ2F0aW5nSXNIaWRkZW46Qm9vbGVhbixfZm9jdXNlZEl0ZW1JbmRleDp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX2ZvY3VzZWRDb2x1bW5PcmRlcjpOdW1iZXIsaW50ZXJhY3Rpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAscmVhZE9ubHk6ITAsb2JzZXJ2ZXI6Il9pbnRlcmFjdGluZ0NoYW5nZWQifX19cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX2lvc3x8dGhpcy5fYW5kcm9pZHx8KHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlEb3duKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLl9vbktleVVwKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLHRoaXMuX29uRm9jdXNJbiksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsdGhpcy5fb25Gb2N1c091dCksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLHRoaXMuX29uQ2VsbEZvY3VzSW4uYmluZCh0aGlzKSksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0Iix0aGlzLl9vbkNlbGxGb2N1c091dC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCgpPT57dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMSx0aGlzKSx0aGlzLl9pc01vdXNlZG93bj0hMH0pKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCgoKT0+dGhpcy5faXNNb3VzZWRvd249ITEpKSl9X2ZvY3VzYWJsZUNoYW5nZWQodCxlKXtlJiZlLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHQmJnRoaXMuX3VwZGF0ZUdyaWRTZWN0aW9uRm9jdXNUYXJnZXQodCl9X2ludGVyYWN0aW5nQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZUdyaWRTZWN0aW9uRm9jdXNUYXJnZXQodGhpcy5faGVhZGVyRm9jdXNhYmxlKSx0aGlzLl91cGRhdGVHcmlkU2VjdGlvbkZvY3VzVGFyZ2V0KHRoaXMuX2l0ZW1zRm9jdXNhYmxlKSx0aGlzLl91cGRhdGVHcmlkU2VjdGlvbkZvY3VzVGFyZ2V0KHRoaXMuX2Zvb3RlckZvY3VzYWJsZSl9X29uS2V5RG93bih0KXtjb25zdCBlPXQua2V5O2xldCBuO3N3aXRjaChlKXtjYXNlIkFycm93VXAiOmNhc2UiQXJyb3dEb3duIjpjYXNlIkFycm93TGVmdCI6Y2FzZSJBcnJvd1JpZ2h0IjpjYXNlIlBhZ2VVcCI6Y2FzZSJQYWdlRG93biI6Y2FzZSJIb21lIjpjYXNlIkVuZCI6bj0iTmF2aWdhdGlvbiI7YnJlYWs7Y2FzZSJFbnRlciI6Y2FzZSJFc2NhcGUiOmNhc2UiRjIiOm49IkludGVyYWN0aW9uIjticmVhaztjYXNlIlRhYiI6bj0iVGFiIjticmVhaztjYXNlIiAiOm49IlNwYWNlIn10aGlzLl9kZXRlY3RJbnRlcmFjdGluZyh0KSx0aGlzLmludGVyYWN0aW5nJiYiSW50ZXJhY3Rpb24iIT09biYmKG49dm9pZCAwKSxuJiZ0aGlzW2Bfb24ke259S2V5RG93bmBdKHQsZSl9X2Vuc3VyZVNjcm9sbGVkVG9JbmRleCh0KXtBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKChlPT5lLmluZGV4PT09dCkpWzBdfHx0aGlzLl9zY3JvbGxUb0luZGV4KHQpfV9vbk5hdmlnYXRpb25LZXlEb3duKHQsZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0LnBhcmVudE5vZGUuY2hpbGRyZW4sdCl9dGhpcy5fc2Nyb2xsSGFuZGxlcigpLHQucHJldmVudERlZmF1bHQoKTtjb25zdCBpPXRoaXMuX2xhc3RWaXNpYmxlSW5kZXgtdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgtMTtsZXQgcj0wLG89MDtzd2l0Y2goZSl7Y2FzZSJBcnJvd1JpZ2h0IjpyPXRoaXMuX19pc1JUTD8tMToxO2JyZWFrO2Nhc2UiQXJyb3dMZWZ0IjpyPXRoaXMuX19pc1JUTD8xOi0xO2JyZWFrO2Nhc2UiSG9tZSI6cj0tMS8wLHQuY3RybEtleSYmKG89LTEvMCk7YnJlYWs7Y2FzZSJFbmQiOnI9MS8wLHQuY3RybEtleSYmKG89MS8wKTticmVhaztjYXNlIkFycm93RG93biI6bz0xO2JyZWFrO2Nhc2UiQXJyb3dVcCI6bz0tMTticmVhaztjYXNlIlBhZ2VEb3duIjpvPWk7YnJlYWs7Y2FzZSJQYWdlVXAiOm89LWl9Y29uc3QgYT10LmNvbXBvc2VkUGF0aCgpWzBdLHM9bihhKSxsPXRoaXMuX2VsZW1lbnRNYXRjaGVzKGEsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSxjPWEucGFyZW50Tm9kZSx1PWMucGFyZW50Tm9kZSxoPSh1PT09dGhpcy4kLml0ZW1zP3RoaXMuX2VmZmVjdGl2ZVNpemU6dS5jaGlsZHJlbi5sZW5ndGgpLTEsZD11PT09dGhpcy4kLml0ZW1zP3ZvaWQgMCE9PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXg/dGhpcy5fZm9jdXNlZEl0ZW1JbmRleDpjLmluZGV4Om4oYyk7bGV0IHA9TWF0aC5tYXgoMCxNYXRoLm1pbihkK28saCkpLGY9ITE7aWYodT09PXRoaXMuJC5pdGVtcyl7Y29uc3QgdD1jLl9pdGVtLGU9dGhpcy5fY2FjaGUuZ2V0SXRlbUZvckluZGV4KHApO2Y9bD8wPT09bzoxPT09byYmdGhpcy5faXNEZXRhaWxzT3BlbmVkKHQpfHwtMT09PW8mJnAhPT1kJiZ0aGlzLl9pc0RldGFpbHNPcGVuZWQoZSksZiE9PWwmJigxPT09byYmZnx8LTE9PT1vJiYhZikmJihwPWQpfWlmKHUhPT10aGlzLiQuaXRlbXMpaWYocD5kKWZvcig7cDxoJiZ1LmNoaWxkcmVuW3BdLmhpZGRlbjspcCsrO2Vsc2UgaWYocDxkKWZvcig7cD4wJiZ1LmNoaWxkcmVuW3BdLmhpZGRlbjspcC0tO3ZvaWQgMD09PXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlciYmKHRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj1sPzA6dGhpcy5fZ2V0Q29sdW1ucyh1LGQpLmZpbHRlcigodD0+IXQuaGlkZGVuKSlbc10uX29yZGVyKTtjb25zdCBtPXRoaXMuX2dldENvbHVtbnModSxwKS5maWx0ZXIoKHQ9PiF0LmhpZGRlbikpLGc9bS5tYXAoKHQ9PnQuX29yZGVyKSkuc29ydCgoKHQsZSk9PnQtZSkpLF89Zy5sZW5ndGgtMSx5PWcuaW5kZXhPZihnLnNsaWNlKDApLnNvcnQoKCh0LGUpPT5NYXRoLmFicyh0LXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlciktTWF0aC5hYnMoZS10aGlzLl9mb2N1c2VkQ29sdW1uT3JkZXIpKSlbMF0pLHY9MD09PW8mJmw/eTpNYXRoLm1heCgwLE1hdGgubWluKHkrcixfKSk7diE9PXkmJih0aGlzLl9mb2N1c2VkQ29sdW1uT3JkZXI9dm9pZCAwKSx1PT09dGhpcy4kLml0ZW1zJiZ0aGlzLl9lbnN1cmVTY3JvbGxlZFRvSW5kZXgocCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKTtjb25zdCBiPW0ucmVkdWNlKCgodCxlLG4pPT4odFtlLl9vcmRlcl09bix0KSkse30pW2dbdl1dLHg9dT09PXRoaXMuJC5pdGVtcz9BcnJheS5mcm9tKHUuY2hpbGRyZW4pLmZpbHRlcigodD0+dC5pbmRleD09PXApKVswXTp1LmNoaWxkcmVuW3BdO2lmKCF4KXJldHVybjtjb25zdCB3PWY/QXJyYXkuZnJvbSh4LmNoaWxkcmVuKS5maWx0ZXIoKHQ9PnRoaXMuX2VsZW1lbnRNYXRjaGVzKHQsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSkpWzBdOnguY2hpbGRyZW5bYl07aWYodGhpcy5fc2Nyb2xsSG9yaXpvbnRhbGx5VG9DZWxsKHcpLHU9PT10aGlzLiQuaXRlbXMmJih0aGlzLl9mb2N1c2VkSXRlbUluZGV4PXApLHU9PT10aGlzLiQuaXRlbXMpe2NvbnN0IHQ9dy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlPXRoaXMuJC5mb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLG49dGhpcy4kLmhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207dC5ib3R0b20+ZT8odGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9dC5ib3R0b20tZSx0aGlzLl9zY3JvbGxIYW5kbGVyKCkpOnQudG9wPG4mJih0aGlzLiQudGFibGUuc2Nyb2xsVG9wLT1uLXQudG9wLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSl9dy5mb2N1cygpfV9vbkludGVyYWN0aW9uS2V5RG93bih0LGUpe2NvbnN0IG49dC5jb21wb3NlZFBhdGgoKVswXSxpPSJpbnB1dCI9PT1uLmxvY2FsTmFtZSYmIS9eKGJ1dHRvbnxjaGVja2JveHxjb2xvcnxmaWxlfGltYWdlfHJhZGlvfHJhbmdlfHJlc2V0fHN1Ym1pdCkkL2kudGVzdChuLnR5cGUpO2xldCByO3N3aXRjaChlKXtjYXNlIkVudGVyIjpyPSF0aGlzLmludGVyYWN0aW5nfHwhaTticmVhaztjYXNlIkVzY2FwZSI6cj0hMTticmVhaztjYXNlIkYyIjpyPSF0aGlzLmludGVyYWN0aW5nfWNvbnN0e2NlbGw6b309dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24odCk7aWYodGhpcy5pbnRlcmFjdGluZyE9PXImJm51bGwhPT1vKWlmKHIpe2NvbnN0IGU9by5fY29udGVudC5xdWVyeVNlbGVjdG9yKCJbZm9jdXMtdGFyZ2V0XSIpfHxvLl9jb250ZW50LmZpcnN0RWxlbWVudENoaWxkO2UmJih0LnByZXZlbnREZWZhdWx0KCksZS5mb2N1cygpLHRoaXMuX3NldEludGVyYWN0aW5nKCEwKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCExLHRoaXMpKX1lbHNlIHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkQ29sdW1uT3JkZXI9dm9pZCAwLG8uZm9jdXMoKSx0aGlzLl9zZXRJbnRlcmFjdGluZyghMSksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKX1fcHJlZGljdEZvY3VzU3RlcFRhcmdldCh0LGUpe2NvbnN0IG49W3RoaXMuJC50YWJsZSx0aGlzLl9oZWFkZXJGb2N1c2FibGUsdGhpcy5faXRlbXNGb2N1c2FibGUsdGhpcy5fZm9vdGVyRm9jdXNhYmxlLHRoaXMuJC5mb2N1c2V4aXRdO2xldCBpPW4uaW5kZXhPZih0KTtmb3IoaSs9ZTtpPj0wJiZpPD1uLmxlbmd0aC0xJiYoIW5baV18fG5baV0ucGFyZW50Tm9kZS5oaWRkZW4pOylpKz1lO3JldHVybiBuW2ldfV9vblRhYktleURvd24odCl7Y29uc3QgZT10aGlzLl9wcmVkaWN0Rm9jdXNTdGVwVGFyZ2V0KHQuY29tcG9zZWRQYXRoKClbMF0sdC5zaGlmdEtleT8tMToxKTtpZihlPT09dGhpcy4kLnRhYmxlKXRoaXMuJC50YWJsZS5mb2N1cygpO2Vsc2UgaWYoZT09PXRoaXMuJC5mb2N1c2V4aXQpdGhpcy4kLmZvY3VzZXhpdC5mb2N1cygpO2Vsc2UgaWYoZT09PXRoaXMuX2l0ZW1zRm9jdXNhYmxlKXtsZXQgbj1lO2NvbnN0IGk9dGhpcy5faXRlbXNGb2N1c2FibGUucGFyZW50Tm9kZTtpZih0aGlzLl9lbnN1cmVTY3JvbGxlZFRvSW5kZXgodGhpcy5fZm9jdXNlZEl0ZW1JbmRleCksaS5pbmRleCE9PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgpe2NvbnN0IHQ9QXJyYXkuZnJvbShpLmNoaWxkcmVuKS5pbmRleE9mKHRoaXMuX2l0ZW1zRm9jdXNhYmxlKSxlPUFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIoKHQ9PnQuaW5kZXg9PT10aGlzLl9mb2N1c2VkSXRlbUluZGV4KSlbMF07ZSYmKG49ZS5jaGlsZHJlblt0XSl9dC5wcmV2ZW50RGVmYXVsdCgpLG4uZm9jdXMoKX1lbHNlIHQucHJldmVudERlZmF1bHQoKSxlLmZvY3VzKCk7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKX1fb25TcGFjZUtleURvd24odCl7dC5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IGU9dC5jb21wb3NlZFBhdGgoKVswXTtlLl9jb250ZW50JiZlLl9jb250ZW50LmZpcnN0RWxlbWVudENoaWxkfHx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjZWxsLWFjdGl2YXRlIix7ZGV0YWlsOnttb2RlbDp0aGlzLl9fZ2V0Um93TW9kZWwoZS5wYXJlbnRFbGVtZW50KX19KSl9X29uS2V5VXAodCl7aWYoIS9eKCB8U3BhY2VCYXIpJC8udGVzdCh0LmtleSkpcmV0dXJuO3QucHJldmVudERlZmF1bHQoKTtjb25zdCBlPXQuY29tcG9zZWRQYXRoKClbMF07aWYoZS5fY29udGVudCYmZS5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZCl7Y29uc3QgdD10aGlzLmhhc0F0dHJpYnV0ZSgibmF2aWdhdGluZyIpO2UuX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQuY2xpY2soKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLHQsdGhpcyl9fV9vbkZvY3VzSW4odCl7dGhpcy5faXNNb3VzZWRvd258fHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyk7Y29uc3QgZT10LmNvbXBvc2VkUGF0aCgpWzBdO2U9PT10aGlzLiQudGFibGV8fGU9PT10aGlzLiQuZm9jdXNleGl0Pyh0aGlzLl9wcmVkaWN0Rm9jdXNTdGVwVGFyZ2V0KGUsZT09PXRoaXMuJC50YWJsZT8xOi0xKS5mb2N1cygpLHRoaXMuX3NldEludGVyYWN0aW5nKCExKSk6dGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcodCl9X29uRm9jdXNPdXQodCl7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMSx0aGlzKSx0aGlzLl9kZXRlY3RJbnRlcmFjdGluZyh0KX1fb25DZWxsRm9jdXNJbih0KXtjb25zdHtzZWN0aW9uOmUsY2VsbDpufT10aGlzLl9nZXRHcmlkRXZlbnRMb2NhdGlvbih0KTt0aGlzLl9kZXRlY3RJbnRlcmFjdGluZyh0KSxlJiZuJiYodGhpcy5fYWN0aXZlUm93R3JvdXA9ZSx0aGlzLiQuaGVhZGVyPT09ZT90aGlzLl9oZWFkZXJGb2N1c2FibGU9bjp0aGlzLiQuaXRlbXM9PT1lP3RoaXMuX2l0ZW1zRm9jdXNhYmxlPW46dGhpcy4kLmZvb3Rlcj09PWUmJih0aGlzLl9mb290ZXJGb2N1c2FibGU9biksbi5fY29udGVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1mb2N1c2luIix7YnViYmxlczohMX0pKSxuLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjZWxsLWZvY3VzIix7YnViYmxlczohMCxjb21wb3NlZDohMH0pKSksdGhpcy5fZGV0ZWN0Rm9jdXNlZEl0ZW1JbmRleCh0KX1fb25DZWxsRm9jdXNPdXQodCl7Mz09PXQuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLiQudGFibGUpJiZ0LmNvbXBvc2VkUGF0aCgpWzBdLl9jb250ZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjZWxsLWZvY3Vzb3V0Iix7YnViYmxlczohMX0pKX1fZGV0ZWN0SW50ZXJhY3RpbmcodCl7Y29uc3QgZT10LmNvbXBvc2VkUGF0aCgpLnNvbWUoKHQ9PiJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiPT09dC5sb2NhbE5hbWUpKTt0aGlzLl9zZXRJbnRlcmFjdGluZyhlKX1fZGV0ZWN0Rm9jdXNlZEl0ZW1JbmRleCh0KXtjb25zdHtzZWN0aW9uOmUscm93Om59PXRoaXMuX2dldEdyaWRFdmVudExvY2F0aW9uKHQpO2U9PT10aGlzLiQuaXRlbXMmJih0aGlzLl9mb2N1c2VkSXRlbUluZGV4PW4uaW5kZXgpfV91cGRhdGVHcmlkU2VjdGlvbkZvY3VzVGFyZ2V0KHQpe2lmKCF0KXJldHVybjtjb25zdCBlPXRoaXMuX2dldEdyaWRTZWN0aW9uRnJvbUZvY3VzVGFyZ2V0KHQpO3QudGFiSW5kZXg9dGhpcy5pbnRlcmFjdGluZyYmZT09PXRoaXMuX2FjdGl2ZVJvd0dyb3VwPy0xOjB9X3ByZXZlbnRTY3JvbGxlclJvdGF0aW5nQ2VsbEZvY3VzKHQsZSl7dC5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgmJnRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIikmJnRoaXMuX2FjdGl2ZVJvd0dyb3VwPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fbmF2aWdhdGluZ0lzSGlkZGVuPSEwLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcykpLGU9PT10aGlzLl9mb2N1c2VkSXRlbUluZGV4JiZ0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW4mJih0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW49ITEsdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKSl9X2dldENvbHVtbnModCxlKXtsZXQgbj10aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xO3JldHVybiB0PT09dGhpcy4kLmhlYWRlcj9uPWU6dD09PXRoaXMuJC5mb290ZXImJihuPXRoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTEtZSksdGhpcy5fY29sdW1uVHJlZVtuXX1fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKXtpZih0aGlzLiQuaGVhZGVyLmZpcnN0RWxlbWVudENoaWxkJiYodGhpcy5faGVhZGVyRm9jdXNhYmxlPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbikuZmlsdGVyKCh0PT4hdC5oaWRkZW4pKVswXSksdGhpcy4kLml0ZW1zLmZpcnN0RWxlbWVudENoaWxkKXtjb25zdCB0PXRoaXMuX2l0ZXJhdGVJdGVtcygoKHQsZSk9PntpZih0aGlzLl9maXJzdFZpc2libGVJbmRleD09PWUpcmV0dXJuIHRoaXMuJC5pdGVtcy5jaGlsZHJlblt0XX0pKTt0JiYodGhpcy5faXRlbXNGb2N1c2FibGU9QXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5maWx0ZXIoKHQ9PiF0LmhpZGRlbikpWzBdKX10aGlzLiQuZm9vdGVyLmZpcnN0RWxlbWVudENoaWxkJiYodGhpcy5fZm9vdGVyRm9jdXNhYmxlPUFycmF5LmZyb20odGhpcy4kLmZvb3Rlci5maXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbikuZmlsdGVyKCh0PT4hdC5oaWRkZW4pKVswXSl9X3Njcm9sbEhvcml6b250YWxseVRvQ2VsbCh0KXtpZih0Lmhhc0F0dHJpYnV0ZSgiZnJvemVuIil8fHRoaXMuX2VsZW1lbnRNYXRjaGVzKHQsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSlyZXR1cm47Y29uc3QgZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dC5wYXJlbnROb2RlLGk9QXJyYXkuZnJvbShuLmNoaWxkcmVuKS5pbmRleE9mKHQpLHI9dGhpcy4kLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBvPXIubGVmdCxhPXIucmlnaHQ7Zm9yKGxldCB0PWktMTt0Pj0wO3QtLSl7Y29uc3QgZT1uLmNoaWxkcmVuW3RdO2lmKCFlLmhhc0F0dHJpYnV0ZSgiaGlkZGVuIikmJiF0aGlzLl9lbGVtZW50TWF0Y2hlcyhlLCdbcGFydH49ImRldGFpbHMtY2VsbCJdJykmJmUuaGFzQXR0cmlidXRlKCJmcm96ZW4iKSl7bz1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0O2JyZWFrfX1mb3IobGV0IHQ9aSsxO3Q8bi5jaGlsZHJlbi5sZW5ndGg7dCsrKXtjb25zdCBlPW4uY2hpbGRyZW5bdF07aWYoIWUuaGFzQXR0cmlidXRlKCJoaWRkZW4iKSYmIXRoaXMuX2VsZW1lbnRNYXRjaGVzKGUsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSYmZS5oYXNBdHRyaWJ1dGUoImZyb3plbiIpKXthPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDticmVha319ZS5sZWZ0PG8mJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9TWF0aC5yb3VuZChlLmxlZnQtbykpLGUucmlnaHQ+YSYmKHRoaXMuJC50YWJsZS5zY3JvbGxMZWZ0Kz1NYXRoLnJvdW5kKGUucmlnaHQtYSkpfV9lbGVtZW50TWF0Y2hlcyh0LGUpe3JldHVybiB0Lm1hdGNoZXM/dC5tYXRjaGVzKGUpOi0xIT09QXJyYXkuZnJvbSh0LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbChlKSkuaW5kZXhPZih0KX1fZ2V0R3JpZEV2ZW50TG9jYXRpb24odCl7Y29uc3QgZT10LmNvbXBvc2VkUGF0aCgpLG49ZS5pbmRleE9mKHRoaXMuJC50YWJsZSk7cmV0dXJue3NlY3Rpb246bj49MT9lW24tMV06bnVsbCxyb3c6bj49Mj9lW24tMl06bnVsbCxjZWxsOm4+PTM/ZVtuLTNdOm51bGx9fV9nZXRHcmlkU2VjdGlvbkZyb21Gb2N1c1RhcmdldCh0KXtyZXR1cm4gdD09PXRoaXMuX2hlYWRlckZvY3VzYWJsZT90aGlzLiQuaGVhZGVyOnQ9PT10aGlzLl9pdGVtc0ZvY3VzYWJsZT90aGlzLiQuaXRlbXM6dD09PXRoaXMuX2Zvb3RlckZvY3VzYWJsZT90aGlzLiQuZm9vdGVyOm51bGx9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMjEgVmFhZGluIEx0ZC4KICAgICAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICAqLyx0S3Q9dD0+Y2xhc3MgZXh0ZW5kcyhwaSh0KSl7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2NvbHVtblJlb3JkZXJpbmdBbGxvd2VkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9vcmRlckJhc2VTY29wZTp7dHlwZTpOdW1iZXIsdmFsdWU6MWU3fX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl91cGRhdGVPcmRlcnMoX2NvbHVtblRyZWUsIF9jb2x1bW5UcmVlLiopIl19cmVhZHkoKXtzdXBlci5yZWFkeSgpLGlpKHRoaXMsInRyYWNrIix0aGlzLl9vblRyYWNrRXZlbnQpLHRoaXMuX3Jlb3JkZXJHaG9zdD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW3BhcnQ9InJlb3JkZXItZ2hvc3QiXScpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9vblRvdWNoTW92ZS5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9vblRvdWNoRW5kLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX29uQ29udGV4dE1lbnUuYmluZCh0aGlzKSl9X29uQ29udGV4dE1lbnUodCl7dGhpcy5oYXNBdHRyaWJ1dGUoInJlb3JkZXJpbmciKSYmdC5wcmV2ZW50RGVmYXVsdCgpfV9vblRvdWNoU3RhcnQodCl7dGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0PXNldFRpbWVvdXQoKCgpPT57dGhpcy5fb25UcmFja1N0YXJ0KHtkZXRhaWw6e3g6dC50b3VjaGVzWzBdLmNsaWVudFgseTp0LnRvdWNoZXNbMF0uY2xpZW50WX19KX0pLDEwMCl9X29uVG91Y2hNb3ZlKHQpe3RoaXMuX2RyYWdnZWRDb2x1bW4mJnQucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0KX1fb25Ub3VjaEVuZCgpe2NsZWFyVGltZW91dCh0aGlzLl9zdGFydFRvdWNoUmVvcmRlclRpbWVvdXQpLHRoaXMuX29uVHJhY2tFbmQoKX1fb25UcmFja0V2ZW50KHQpe2lmKCJzdGFydCI9PT10LmRldGFpbC5zdGF0ZSl7Y29uc3QgZT10LmNvbXBvc2VkUGF0aCgpLG49ZVtlLmluZGV4T2YodGhpcy4kLmhlYWRlciktMl07aWYoIW58fCFuLl9jb250ZW50KXJldHVybjtpZihuLl9jb250ZW50LmNvbnRhaW5zKHRoaXMuZ2V0Um9vdE5vZGUoKS5hY3RpdmVFbGVtZW50KSlyZXR1cm47aWYodGhpcy4kLnNjcm9sbGVyLmhhc0F0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIikpcmV0dXJuO3RoaXMuX3RvdWNoRGV2aWNlfHx0aGlzLl9vblRyYWNrU3RhcnQodCl9ZWxzZSJ0cmFjayI9PT10LmRldGFpbC5zdGF0ZT90aGlzLl9vblRyYWNrKHQpOiJlbmQiPT09dC5kZXRhaWwuc3RhdGUmJnRoaXMuX29uVHJhY2tFbmQodCl9X29uVHJhY2tTdGFydCh0KXtpZighdGhpcy5jb2x1bW5SZW9yZGVyaW5nQWxsb3dlZClyZXR1cm47Y29uc3QgZT10LmNvbXBvc2VkUGF0aCYmdC5jb21wb3NlZFBhdGgoKTtpZihlJiZlLmZpbHRlcigodD0+dC5oYXNBdHRyaWJ1dGUmJnQuaGFzQXR0cmlidXRlKCJkcmFnZ2FibGUiKSkpWzBdKXJldHVybjtjb25zdCBuPXRoaXMuX2NlbGxGcm9tUG9pbnQodC5kZXRhaWwueCx0LmRldGFpbC55KTtpZihuJiYtMSE9PW4uZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZigiaGVhZGVyLWNlbGwiKSl7Zm9yKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgicmVvcmRlcmluZyIsITAsdGhpcyksdGhpcy5fZHJhZ2dlZENvbHVtbj1uLl9jb2x1bW47MT09PXRoaXMuX2RyYWdnZWRDb2x1bW4ucGFyZW50RWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudDspdGhpcy5fZHJhZ2dlZENvbHVtbj10aGlzLl9kcmFnZ2VkQ29sdW1uLnBhcmVudEVsZW1lbnQ7dGhpcy5fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHRoaXMuX2RyYWdnZWRDb2x1bW4sImFsbG93ZWQiKSx0aGlzLl9kcmFnZ2VkQ29sdW1uLl9yZW9yZGVyU3RhdHVzPSJkcmFnZ2luZyIsdGhpcy5fdXBkYXRlR2hvc3QobiksdGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUiLHRoaXMuX3VwZGF0ZUdob3N0UG9zaXRpb24odC5kZXRhaWwueCx0aGlzLl90b3VjaERldmljZT90LmRldGFpbC55LTUwOnQuZGV0YWlsLnkpLHRoaXMuX2F1dG9TY3JvbGxlcigpfX1fb25UcmFjayh0KXtpZighdGhpcy5fZHJhZ2dlZENvbHVtbilyZXR1cm47Y29uc3QgZT10aGlzLl9jZWxsRnJvbVBvaW50KHQuZGV0YWlsLngsdC5kZXRhaWwueSk7aWYoIWUpcmV0dXJuO2NvbnN0IG49dGhpcy5fZ2V0VGFyZ2V0Q29sdW1uKGUsdGhpcy5fZHJhZ2dlZENvbHVtbik7dGhpcy5faXNTd2FwQWxsb3dlZCh0aGlzLl9kcmFnZ2VkQ29sdW1uLG4pJiZ0aGlzLl9pc1N3YXBwYWJsZUJ5UG9zaXRpb24obix0LmRldGFpbC54KSYmdGhpcy5fc3dhcENvbHVtbk9yZGVycyh0aGlzLl9kcmFnZ2VkQ29sdW1uLG4pLHRoaXMuX3VwZGF0ZUdob3N0UG9zaXRpb24odC5kZXRhaWwueCx0aGlzLl90b3VjaERldmljZT90LmRldGFpbC55LTUwOnQuZGV0YWlsLnkpLHRoaXMuX2xhc3REcmFnQ2xpZW50WD10LmRldGFpbC54fV9vblRyYWNrRW5kKCl7dGhpcy5fZHJhZ2dlZENvbHVtbiYmKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgicmVvcmRlcmluZyIsITEsdGhpcyksdGhpcy5fZHJhZ2dlZENvbHVtbi5fcmVvcmRlclN0YXR1cz0iIix0aGlzLl9zZXRTaWJsaW5nc1Jlb3JkZXJTdGF0dXModGhpcy5fZHJhZ2dlZENvbHVtbiwiIiksdGhpcy5fZHJhZ2dlZENvbHVtbj1udWxsLHRoaXMuX2xhc3REcmFnQ2xpZW50WD1udWxsLHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbHVtbi1yZW9yZGVyIix7ZGV0YWlsOntjb2x1bW5zOnRoaXMuX2dldENvbHVtbnNJbk9yZGVyKCl9fSkpKX1fZ2V0Q29sdW1uc0luT3JkZXIoKXtyZXR1cm4gdGhpcy5fY29sdW1uVHJlZS5zbGljZSgwKS5wb3AoKS5maWx0ZXIoKHQ9PiF0LmhpZGRlbikpLnNvcnQoKCh0LGUpPT50Ll9vcmRlci1lLl9vcmRlcikpfV9jZWxsRnJvbVBvaW50KHQsZSl7dD10fHwwLGU9ZXx8MCx0aGlzLl9kcmFnZ2VkQ29sdW1ufHx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5vLWNvbnRlbnQtcG9pbnRlci1ldmVudHMiLCEwLHRoaXMuJC5zY3JvbGxlcik7Y29uc3Qgbj10aGlzLnNoYWRvd1Jvb3QuZWxlbWVudEZyb21Qb2ludCh0LGUpO2lmKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibm8tY29udGVudC1wb2ludGVyLWV2ZW50cyIsITEsdGhpcy4kLnNjcm9sbGVyKSxuJiZuLl9jb2x1bW4pcmV0dXJuIG59X3VwZGF0ZUdob3N0UG9zaXRpb24odCxlKXtjb25zdCBuPXRoaXMuX3Jlb3JkZXJHaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXQtbi53aWR0aC8yLHI9ZS1uLmhlaWdodC8yLG89cGFyc2VJbnQodGhpcy5fcmVvcmRlckdob3N0Ll9sZWZ0fHwwKSxhPXBhcnNlSW50KHRoaXMuX3Jlb3JkZXJHaG9zdC5fdG9wfHwwKTt0aGlzLl9yZW9yZGVyR2hvc3QuX2xlZnQ9by0obi5sZWZ0LWkpLHRoaXMuX3Jlb3JkZXJHaG9zdC5fdG9wPWEtKG4udG9wLXIpLHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke3RoaXMuX3Jlb3JkZXJHaG9zdC5fbGVmdH1weCwgJHt0aGlzLl9yZW9yZGVyR2hvc3QuX3RvcH1weClgfV91cGRhdGVHaG9zdCh0KXtjb25zdCBlPXRoaXMuX3Jlb3JkZXJHaG9zdDtlLnRleHRDb250ZW50PXQuX2NvbnRlbnQuaW5uZXJUZXh0O2NvbnN0IG49d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuWyJib3hTaXppbmciLCJkaXNwbGF5Iiwid2lkdGgiLCJoZWlnaHQiLCJiYWNrZ3JvdW5kIiwiYWxpZ25JdGVtcyIsInBhZGRpbmciLCJib3JkZXIiLCJmbGV4LWRpcmVjdGlvbiIsIm92ZXJmbG93Il0uZm9yRWFjaCgodD0+ZS5zdHlsZVt0XT1uW3RdKSksZX1fdXBkYXRlT3JkZXJzKHQsZSl7dm9pZCAwIT09dCYmdm9pZCAwIT09ZSYmKHRbMF0uZm9yRWFjaCgodD0+dC5fb3JkZXI9MCkpLChmdW5jdGlvbiBuKHQsZSxpKXtsZXQgcj0xO3QuZm9yRWFjaCgodD0+e3IlMTA9PTAmJnIrKyx0Ll9vcmRlcj1pK3IqZSxyKyt9KSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBWYWFkaW4gTHRkLgogICAgICogVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgICovKSh0WzBdLHRoaXMuX29yZGVyQmFzZVNjb3BlLDApKX1fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHQsZSl7QXJyYXkuZnJvbSh0LnBhcmVudE5vZGUuY2hpbGRyZW4pLmZpbHRlcigoZT0+L2NvbHVtbi8udGVzdChlLmxvY2FsTmFtZSkmJnRoaXMuX2lzU3dhcEFsbG93ZWQoZSx0KSkpLmZvckVhY2goKHQ9PnQuX3Jlb3JkZXJTdGF0dXM9ZSkpfV9hdXRvU2Nyb2xsZXIoKXtpZih0aGlzLl9sYXN0RHJhZ0NsaWVudFgpe2NvbnN0IHQ9dGhpcy5fbGFzdERyYWdDbGllbnRYLXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQrNTAsZT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdGhpcy5fbGFzdERyYWdDbGllbnRYKzUwO3Q+MD90aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9dC8xMDplPjAmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdC09ZS8xMCksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfXRoaXMuX2RyYWdnZWRDb2x1bW4mJnRoaXMuYXN5bmModGhpcy5fYXV0b1Njcm9sbGVyLDEwKX1faXNTd2FwQWxsb3dlZCh0LGUpe2lmKHQmJmUpe2NvbnN0IG49dC5wYXJlbnRFbGVtZW50PT09ZS5wYXJlbnRFbGVtZW50LGk9dC5mcm96ZW49PT1lLmZyb3plbjtyZXR1cm4gdCE9PWUmJm4mJml9fV9pc1N3YXBwYWJsZUJ5UG9zaXRpb24odCxlKXtjb25zdCBuPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yQWxsKCd0cjpub3QoW2hpZGRlbl0pIFtwYXJ0fj0iY2VsbCJdJykpLmZpbHRlcigoZT0+dC5jb250YWlucyhlLl9jb2x1bW4pKSlbMF0saT10aGlzLiQuaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoInRyOm5vdChbaGlkZGVuXSkgW3Jlb3JkZXItc3RhdHVzPWRyYWdnaW5nXSIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gci5sZWZ0PmkubGVmdD9lPnIucmlnaHQtaS53aWR0aDplPHIubGVmdCtpLndpZHRofV9zd2FwQ29sdW1uT3JkZXJzKHQsZSl7Y29uc3Qgbj10Ll9vcmRlcjt0Ll9vcmRlcj1lLl9vcmRlcixlLl9vcmRlcj1uLHRoaXMuX3VwZGF0ZUxhc3RGcm96ZW4oKSx0aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW4oKX1fZ2V0VGFyZ2V0Q29sdW1uKHQsZSl7aWYodCYmZSl7bGV0IG49dC5fY29sdW1uO2Zvcig7bi5wYXJlbnRFbGVtZW50IT09ZS5wYXJlbnRFbGVtZW50JiZuIT09dGhpczspbj1uLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG4ucGFyZW50RWxlbWVudD09PWUucGFyZW50RWxlbWVudD9uOnQuX2NvbHVtbn19fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMjEgVmFhZGluIEx0ZC4KICAgICAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICAgICAqLyxlS3Q9dD0+Y2xhc3MgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntyZXNpemFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTpmdW5jdGlvbigpe2lmKCJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiPT09dGhpcy5sb2NhbE5hbWUpcmV0dXJuO2NvbnN0IHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0JiYidmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj09PXQubG9jYWxOYW1lJiZ0LnJlc2l6YWJsZXx8ITF9fSxfaGVhZGVyVGVtcGxhdGU6e3R5cGU6T2JqZWN0fSxfZm9vdGVyVGVtcGxhdGU6e3R5cGU6T2JqZWN0fSxmcm96ZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saGlkZGVuOnt0eXBlOkJvb2xlYW59LGhlYWRlcjp7dHlwZTpTdHJpbmd9LHRleHRBbGlnbjp7dHlwZTpTdHJpbmd9LF9sYXN0RnJvemVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9vcmRlcjpOdW1iZXIsX3Jlb3JkZXJTdGF0dXM6Qm9vbGVhbixfZW1wdHlDZWxsczpBcnJheSxfaGVhZGVyQ2VsbDpPYmplY3QsX2Zvb3RlckNlbGw6T2JqZWN0LF9ncmlkOk9iamVjdCxoZWFkZXJSZW5kZXJlcjpGdW5jdGlvbixmb290ZXJSZW5kZXJlcjpGdW5jdGlvbn19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl93aWR0aENoYW5nZWQod2lkdGgsIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiopIiwiX2Zyb3plbkNoYW5nZWQoZnJvemVuLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9mbGV4R3Jvd0NoYW5nZWQoZmxleEdyb3csIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiopIiwiX3BhdGhPckhlYWRlckNoYW5nZWQocGF0aCwgaGVhZGVyLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qLCByZW5kZXJlciwgaGVhZGVyUmVuZGVyZXIsIF9ib2R5VGVtcGxhdGUsIF9oZWFkZXJUZW1wbGF0ZSkiLCJfdGV4dEFsaWduQ2hhbmdlZCh0ZXh0QWxpZ24sIF9jZWxscy4qLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwpIiwiX29yZGVyQ2hhbmdlZChfb3JkZXIsIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiopIiwiX2xhc3RGcm96ZW5DaGFuZ2VkKF9sYXN0RnJvemVuKSIsIl9zZXRCb2R5VGVtcGxhdGVPclJlbmRlcmVyKF9ib2R5VGVtcGxhdGUsIHJlbmRlcmVyLCBfY2VsbHMsIF9jZWxscy4qKSIsIl9zZXRIZWFkZXJUZW1wbGF0ZU9yUmVuZGVyZXIoX2hlYWRlclRlbXBsYXRlLCBoZWFkZXJSZW5kZXJlciwgX2hlYWRlckNlbGwpIiwiX3NldEZvb3RlclRlbXBsYXRlT3JSZW5kZXJlcihfZm9vdGVyVGVtcGxhdGUsIGZvb3RlclJlbmRlcmVyLCBfZm9vdGVyQ2VsbCkiLCJfcmVzaXphYmxlQ2hhbmdlZChyZXNpemFibGUsIF9oZWFkZXJDZWxsKSIsIl9yZW9yZGVyU3RhdHVzQ2hhbmdlZChfcmVvcmRlclN0YXR1cywgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfaGlkZGVuQ2hhbmdlZChoaWRkZW4sIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiopIl19Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX2JvZHlUZW1wbGF0ZSYmKHRoaXMuX2JvZHlUZW1wbGF0ZS50ZW1wbGF0aXplci5fZ3JpZD10aGlzLl9ncmlkKSx0aGlzLl9oZWFkZXJUZW1wbGF0ZSYmKHRoaXMuX2hlYWRlclRlbXBsYXRlLnRlbXBsYXRpemVyLl9ncmlkPXRoaXMuX2dyaWQpLHRoaXMuX2Zvb3RlclRlbXBsYXRlJiYodGhpcy5fZm9vdGVyVGVtcGxhdGUudGVtcGxhdGl6ZXIuX2dyaWQ9dGhpcy5fZ3JpZCksdGhpcy5fdGVtcGxhdGVPYnNlcnZlci5mbHVzaCgpLHRoaXMuX2JvZHlUZW1wbGF0ZXx8dGhpcy5fdGVtcGxhdGVPYnNlcnZlci5jYWxsYmFjaygpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9Pnt0aGlzLl9hbGxDZWxscy5mb3JFYWNoKCh0PT57dC5fY29udGVudC5wYXJlbnROb2RlfHx0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkLmFwcGVuZENoaWxkKHQuX2NvbnRlbnQpfSkpfSkpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57dGhpcy5fZmluZEhvc3RHcmlkKCl8fHRoaXMuX2FsbENlbGxzLmZvckVhY2goKHQ9Pnt0Ll9jb250ZW50LnBhcmVudE5vZGUmJnQuX2NvbnRlbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0Ll9jb250ZW50KX0pKX0pKSx0aGlzLl9ncmlkVmFsdWU9dm9pZCAwfV9maW5kSG9zdEdyaWQoKXtsZXQgdD10aGlzO2Zvcig7dCYmIS9edmFhZGluLipncmlkKC1wcm8pPyQvLnRlc3QodC5sb2NhbE5hbWUpOyl0PXQuYXNzaWduZWRTbG90P3QuYXNzaWduZWRTbG90LnBhcmVudE5vZGU6dC5wYXJlbnROb2RlO3JldHVybiB0fHx2b2lkIDB9Z2V0IF9ncmlkKCl7cmV0dXJuIHRoaXMuX2dyaWRWYWx1ZXx8KHRoaXMuX2dyaWRWYWx1ZT10aGlzLl9maW5kSG9zdEdyaWQoKSksdGhpcy5fZ3JpZFZhbHVlfWdldCBfYWxsQ2VsbHMoKXtyZXR1cm5bXS5jb25jYXQodGhpcy5fY2VsbHN8fFtdKS5jb25jYXQodGhpcy5fZW1wdHlDZWxsc3x8W10pLmNvbmNhdCh0aGlzLl9oZWFkZXJDZWxsKS5jb25jYXQodGhpcy5fZm9vdGVyQ2VsbCkuZmlsdGVyKCh0PT50KSl9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXI9bmV3IHppKHRoaXMsKCgpPT57dGhpcy5faGVhZGVyVGVtcGxhdGU9dGhpcy5fcHJlcGFyZUhlYWRlclRlbXBsYXRlKCksdGhpcy5fZm9vdGVyVGVtcGxhdGU9dGhpcy5fcHJlcGFyZUZvb3RlclRlbXBsYXRlKCksdGhpcy5fYm9keVRlbXBsYXRlPXRoaXMuX3ByZXBhcmVCb2R5VGVtcGxhdGUoKX0pKX1fcHJlcGFyZUhlYWRlclRlbXBsYXRlKCl7cmV0dXJuIHRoaXMuX3ByZXBhcmVUZW1wbGF0aXplcih0aGlzLl9maW5kVGVtcGxhdGUoITApfHxudWxsLHt9KX1fcHJlcGFyZUZvb3RlclRlbXBsYXRlKCl7cmV0dXJuIHRoaXMuX3ByZXBhcmVUZW1wbGF0aXplcih0aGlzLl9maW5kVGVtcGxhdGUoITEsITApfHxudWxsLHt9KX1fcHJlcGFyZUJvZHlUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCl8fG51bGwpfV9wcmVwYXJlVGVtcGxhdGl6ZXIodCxlKXtpZih0JiYhdC50ZW1wbGF0aXplcil7Y29uc3Qgbj1uZXcgViR0O24uX2dyaWQ9dGhpcy5fZ3JpZCxuLmRhdGFIb3N0PXRoaXMuZGF0YUhvc3Qsbi5faW5zdGFuY2VQcm9wcz1lfHxuLl9pbnN0YW5jZVByb3BzLG4udGVtcGxhdGU9dCx0LnRlbXBsYXRpemVyPW59cmV0dXJuIHR9X3JlbmRlckhlYWRlckFuZEZvb3Rlcigpe3RoaXMuaGVhZGVyUmVuZGVyZXImJnRoaXMuX2hlYWRlckNlbGwmJnRoaXMuX19ydW5SZW5kZXJlcih0aGlzLmhlYWRlclJlbmRlcmVyLHRoaXMuX2hlYWRlckNlbGwpLHRoaXMuZm9vdGVyUmVuZGVyZXImJnRoaXMuX2Zvb3RlckNlbGwmJnRoaXMuX19ydW5SZW5kZXJlcih0aGlzLmZvb3RlclJlbmRlcmVyLHRoaXMuX2Zvb3RlckNlbGwpfV9fcnVuUmVuZGVyZXIodCxlLG4pe2NvbnN0IGk9W2UuX2NvbnRlbnQsdGhpc107biYmbi5pdGVtJiZpLnB1c2gobiksdC5hcHBseSh0aGlzLGkpfV9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHQsZSxuKXtpZighdGhpcy5oaWRkZW4pe2lmKHQmJmUpdGhyb3cgbmV3IEVycm9yKCJZb3Ugc2hvdWxkIG9ubHkgdXNlIGVpdGhlciBhIHJlbmRlcmVyIG9yIGEgdGVtcGxhdGUiKTtuLmZvckVhY2goKG49Pntjb25zdCBpPXRoaXMuX2dyaWQuX19nZXRSb3dNb2RlbChuLnBhcmVudEVsZW1lbnQpO2lmKGUpbi5fcmVuZGVyZXI9ZSwoaS5pdGVtfHxlPT09dGhpcy5oZWFkZXJSZW5kZXJlcnx8ZT09PXRoaXMuZm9vdGVyUmVuZGVyZXIpJiZ0aGlzLl9fcnVuUmVuZGVyZXIoZSxuLGkpO2Vsc2UgaWYobi5fdGVtcGxhdGUhPT10KXtuLl90ZW1wbGF0ZT10LG4uX2NvbnRlbnQuaW5uZXJIVE1MPSIiLHQudGVtcGxhdGl6ZXIuX2dyaWQ9dC50ZW1wbGF0aXplci5fZ3JpZHx8dGhpcy5fZ3JpZDtjb25zdCBlPXQudGVtcGxhdGl6ZXIuY3JlYXRlSW5zdGFuY2UoKTtuLl9jb250ZW50LmFwcGVuZENoaWxkKGUucm9vdCksbi5faW5zdGFuY2U9ZSxpLml0ZW0mJm4uX2luc3RhbmNlLnNldFByb3BlcnRpZXMoaSl9fSkpfX1fc2V0Qm9keVRlbXBsYXRlT3JSZW5kZXJlcih0LGUsbil7KHR8fGUpJiZuJiZ0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHQsZSxuKX1fc2V0SGVhZGVyVGVtcGxhdGVPclJlbmRlcmVyKHQsZSxuKXsodHx8ZSkmJm4mJnRoaXMuX19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIodCxlLFtuXSl9X3NldEZvb3RlclRlbXBsYXRlT3JSZW5kZXJlcih0LGUsbil7KHR8fGUpJiZuJiYodGhpcy5fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcih0LGUsW25dKSx0aGlzLl9ncmlkLl9fdXBkYXRlSGVhZGVyRm9vdGVyUm93VmlzaWJpbGl0eShuLnBhcmVudEVsZW1lbnQpKX1fc2VsZWN0Rmlyc3RUZW1wbGF0ZSh0PSExLGU9ITEpe3JldHVybiB6aS5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzKS5maWx0ZXIoKG49PiJ0ZW1wbGF0ZSI9PT1uLmxvY2FsTmFtZSYmbi5jbGFzc0xpc3QuY29udGFpbnMoImhlYWRlciIpPT09dCYmbi5jbGFzc0xpc3QuY29udGFpbnMoImZvb3RlciIpPT09ZSkpWzBdfV9maW5kVGVtcGxhdGUodCxlKXtjb25zdCBuPXRoaXMuX3NlbGVjdEZpcnN0VGVtcGxhdGUodCxlKTtyZXR1cm4gbiYmdGhpcy5kYXRhSG9zdCYmKG4uX3Jvb3REYXRhSG9zdD10aGlzLmRhdGFIb3N0Ll9yb290RGF0YUhvc3R8fHRoaXMuZGF0YUhvc3QpLG59X2ZsZXhHcm93Q2hhbmdlZCh0KXt0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQoImZsZXhHcm93IiksdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaCgoZT0+ZS5zdHlsZS5mbGV4R3Jvdz10KSl9X29yZGVyQ2hhbmdlZCh0KXt0aGlzLl9hbGxDZWxscy5mb3JFYWNoKChlPT5lLnN0eWxlLm9yZGVyPXQpKX1fd2lkdGhDaGFuZ2VkKHQpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgid2lkdGgiKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKChlPT5lLnN0eWxlLndpZHRoPXQpKSx0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkLl9fZm9yY2VSZWZsb3cmJnRoaXMuX2dyaWQuX19mb3JjZVJlZmxvdygpfV9mcm96ZW5DaGFuZ2VkKHQpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgiZnJvemVuIix0KSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKChlPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIsdCxlKSkpLHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuX2Zyb3plbkNlbGxzQ2hhbmdlZCYmdGhpcy5fZ3JpZC5fZnJvemVuQ2VsbHNDaGFuZ2VkKCl9X2xhc3RGcm96ZW5DaGFuZ2VkKHQpe3RoaXMuX2FsbENlbGxzLmZvckVhY2goKGU9PnRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibGFzdC1mcm96ZW4iLHQsZSkpKSx0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJih0aGlzLnBhcmVudEVsZW1lbnQuX2xhc3RGcm96ZW49dCl9X3BhdGhPckhlYWRlckNoYW5nZWQodCxlLG4saSxyLG8sYSxzLGwpe2NvbnN0IGM9dm9pZCAwIT09ZTshYSYmIWwmJmMmJm4mJnRoaXMuX19zZXRUZXh0Q29udGVudChuLl9jb250ZW50LGUpLHQmJnIudmFsdWUmJihvfHxzfHx0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHZvaWQgMCwoKGUsbix7aXRlbTppfSk9PnRoaXMuX19zZXRUZXh0Q29udGVudChlLHRoaXMuZ2V0KHQsaSkpKSxyLnZhbHVlKSxhfHxsfHxjfHwhbnx8bnVsbD09PWV8fHRoaXMuX19zZXRUZXh0Q29udGVudChuLl9jb250ZW50LHRoaXMuX2dlbmVyYXRlSGVhZGVyKHQpKSksbiYmdGhpcy5fZ3JpZC5fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkobi5wYXJlbnRFbGVtZW50KX1fX3NldFRleHRDb250ZW50KHQsZSl7dC50ZXh0Q29udGVudCE9PWUmJih0LnRleHRDb250ZW50PWUpfV9nZW5lcmF0ZUhlYWRlcih0KXtyZXR1cm4gdC5zdWJzdHIodC5sYXN0SW5kZXhPZigiLiIpKzEpLnJlcGxhY2UoLyhbQS1aXSkvZywiLSQxIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8tL2csIiAiKS5yZXBsYWNlKC9eLi8sKHQ9PnQudG9VcHBlckNhc2UoKSkpfV90b2dnbGVBdHRyaWJ1dGUodCxlLG4pe24uaGFzQXR0cmlidXRlKHQpPT09IWUmJihlP24uc2V0QXR0cmlidXRlKHQsIiIpOm4ucmVtb3ZlQXR0cmlidXRlKHQpKX1fcmVvcmRlclN0YXR1c0NoYW5nZWQodCl7dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaCgoZT0+ZS5zZXRBdHRyaWJ1dGUoInJlb3JkZXItc3RhdHVzIix0KSkpfV9yZXNpemFibGVDaGFuZ2VkKHQsZSl7dm9pZCAwIT09dCYmdm9pZCAwIT09ZSYmZSYmW2VdLmNvbmNhdCh0aGlzLl9lbXB0eUNlbGxzKS5mb3JFYWNoKChlPT57aWYoZSl7Y29uc3Qgbj1lLnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0fj0icmVzaXplLWhhbmRsZSJdJyk7aWYobiYmZS5yZW1vdmVDaGlsZChuKSx0KXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Quc2V0QXR0cmlidXRlKCJwYXJ0IiwicmVzaXplLWhhbmRsZSIpLGUuYXBwZW5kQ2hpbGQodCl9fX0pKX1fdGV4dEFsaWduQ2hhbmdlZCh0KXtpZih2b2lkIDA9PT10KXJldHVybjtpZigtMT09PVsic3RhcnQiLCJlbmQiLCJjZW50ZXIiXS5pbmRleE9mKHQpKXJldHVybiB2b2lkIGNvbnNvbGUud2FybigndGV4dEFsaWduIGNhbiBvbmx5IGJlIHNldCBhcyAic3RhcnQiLCAiZW5kIiBvciAiY2VudGVyIicpO2xldCBlOyJsdHIiPT09Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9ncmlkKS5kaXJlY3Rpb24/InN0YXJ0Ij09PXQ/ZT0ibGVmdCI6ImVuZCI9PT10JiYoZT0icmlnaHQiKToic3RhcnQiPT09dD9lPSJyaWdodCI6ImVuZCI9PT10JiYoZT0ibGVmdCIpLHRoaXMuX2FsbENlbGxzLmZvckVhY2goKG49PntuLl9jb250ZW50LnN0eWxlLnRleHRBbGlnbj10LGdldENvbXB1dGVkU3R5bGUobi5fY29udGVudCkudGV4dEFsaWduIT09dCYmKG4uX2NvbnRlbnQuc3R5bGUudGV4dEFsaWduPWUpfSkpfV9oaWRkZW5DaGFuZ2VkKHQpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgiaGlkZGVuIix0KSwhIXQhPSEhdGhpcy5fcHJldmlvdXNIaWRkZW4mJnRoaXMuX2dyaWQmJighMD09PXQmJnRoaXMuX2FsbENlbGxzLmZvckVhY2goKHQ9Pnt0Ll9jb250ZW50LnBhcmVudE5vZGUmJnQuX2NvbnRlbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0Ll9jb250ZW50KX0pKSx0aGlzLl9ncmlkLl9kZWJvdW5jZXJIaWRkZW5DaGFuZ2VkPVRuLmRlYm91bmNlKHRoaXMuX2dyaWQuX2RlYm91bmNlckhpZGRlbkNoYW5nZWQsX3QsKCgpPT57dGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fcmVuZGVyQ29sdW1uVHJlZSYmdGhpcy5fZ3JpZC5fcmVuZGVyQ29sdW1uVHJlZSh0aGlzLl9ncmlkLl9jb2x1bW5UcmVlKX0pKSx0aGlzLl9ncmlkLl91cGRhdGVMYXN0RnJvemVuJiZ0aGlzLl9ncmlkLl91cGRhdGVMYXN0RnJvemVuKCksdGhpcy5fZ3JpZC5ub3RpZnlSZXNpemUmJnRoaXMuX2dyaWQubm90aWZ5UmVzaXplKCksdGhpcy5fZ3JpZC5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24mJnRoaXMuX2dyaWQuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uKCkpLHRoaXMuX3ByZXZpb3VzSGlkZGVuPXR9fTtjbGFzcyBuS3QgZXh0ZW5kcyhlS3QodyR0KHllKSkpe3N0YXRpYyBnZXQgaXMoKXtyZXR1cm4idmFhZGluLWdyaWQtY29sdW1uIn1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57d2lkdGg6e3R5cGU6U3RyaW5nLHZhbHVlOiIxMDBweCJ9LGZsZXhHcm93Ont0eXBlOk51bWJlcix2YWx1ZToxfSxyZW5kZXJlcjpGdW5jdGlvbixwYXRoOnt0eXBlOlN0cmluZ30sYXV0b1dpZHRoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9ib2R5VGVtcGxhdGU6e3R5cGU6T2JqZWN0fSxfY2VsbHM6QXJyYXl9fX1jdXN0b21FbGVtZW50cy5kZWZpbmUobkt0LmlzLG5LdCksCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBWYWFkaW4gTHRkLgogICAgICogVGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYXZhaWxhYmxlIGF0IGh0dHBzOi8vdmFhZGluLmNvbS9saWNlbnNlLwogICAgICovCiRYdCgidmFhZGluLWdyaWQiLEdYdGAKICAgIEBrZXlmcmFtZXMgdmFhZGluLWdyaWQtYXBwZWFyIHsKICAgICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgIH0KCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBhbmltYXRpb246IDFtcyB2YWFkaW4tZ3JpZC1hcHBlYXI7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzY3JvbGxlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgIHdpZHRoOiBhdXRvOwogICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQoKICAgIDpob3N0KFtoZWlnaHQtYnktcm93c10pIHsKICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICBmbGV4LWdyb3c6IDA7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIDpob3N0KFtoZWlnaHQtYnktcm93c10pICNzY3JvbGxlciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAjdGFibGUgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBvdXRsaW5lOiBub25lOwogICAgICAvKiBXb3JrYXJvdW5kIGZvciBhIERlc2t0b3AgU2FmYXJpIGJ1ZzogbmV3IHN0YWNraW5nIGNvbnRleHQgaGVyZSBwcmV2ZW50cyB0aGUgc2Nyb2xsYmFyIGZyb20gZ2V0dGluZyBoaWRkZW4gKi8KICAgICAgei1pbmRleDogMDsKICAgIH0KCiAgICAjaGVhZGVyLAogICAgI2Zvb3RlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7CiAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgIGxlZnQ6IDA7CiAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICAjaGVhZGVyIHsKICAgICAgdG9wOiAwOwogICAgfQoKICAgIHRoIHsKICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgIH0KCiAgICAvKiBTYWZhcmkgZG9lc24ndCB3b3JrIHdpdGggImluaGVyaXQiICovCiAgICBbc2FmYXJpXSB0aCB7CiAgICAgIHRleHQtYWxpZ246IGluaXRpYWw7CiAgICB9CgogICAgI2Zvb3RlciB7CiAgICAgIGJvdHRvbTogMDsKICAgIH0KCiAgICAjaXRlbXMgewogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5OwogICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbGVmdDogMDsKICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXSB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtYXJnaW46IDA7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtsb2FkaW5nXSBbcGFydH49J2JvZHktY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICAjaXRlbXMgW3BhcnR+PSdyb3cnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIH0KCiAgICAjaXRlbXMgW3BhcnR+PSdyb3cnXTplbXB0eSB7CiAgICAgIGhlaWdodDogMWVtOwogICAgfQoKICAgIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CgogICAgW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgYm90dG9tOiAwOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgcGFkZGluZzogMDsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB9CgogICAgW2hpZGRlbl0gewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW2Zyb3plbl0gewogICAgICB6LWluZGV4OiAyOwogICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgfQoKICAgIFtuby1zY3JvbGxiYXJzXVtzYWZhcmldICN0YWJsZSwKICAgIFtuby1zY3JvbGxiYXJzXVtmaXJlZm94XSAjdGFibGUgewogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC8qIFJlb3JkZXJpbmcgc3R5bGVzICovCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXSwKICAgICNzY3JvbGxlcltuby1jb250ZW50LXBvaW50ZXItZXZlbnRzXSBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQoKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBvcGFjaXR5OiAwLjU7CgogICAgICAvKiBQcmV2ZW50IG92ZXJmbG93aW5nIHRoZSBncmlkIGluIEZpcmVmb3ggKi8KICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgewogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiBSZXNpemluZyBzdHlsZXMgKi8KICAgIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBjb250ZW50OiAnJzsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB3aWR0aDogMzVweDsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgfQoKICAgIFtsYXN0LWNvbHVtbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSwKICAgIFtsYXN0LWZyb3plbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHdpZHRoOiAxOHB4OwogICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgIHJpZ2h0OiAwOwogICAgfQoKICAgICNzY3JvbGxlcltjb2x1bW4tcmVzaXppbmddIHsKICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiBTaXplciBzdHlsZXMgKi8KICAgICNzaXplciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgICNzaXplciBbcGFydH49J2RldGFpbHMtY2VsbCddIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49J2NlbGwnXVtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49J2NlbGwnXSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBmbGV4LXNocmluazogMDsKICAgICAgbGluZS1oZWlnaHQ6IDA7CiAgICAgIGhlaWdodDogMCAhaW1wb3J0YW50OwogICAgICBtaW4taGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgIG1heC1oZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ106OmJlZm9yZSB7CiAgICAgIGNvbnRlbnQ6ICctJzsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwoKICAgIDpob3N0KFtkaXI9J3J0bCddKSAjaXRlbXMsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgI2hlYWRlciwKICAgIDpob3N0KFtkaXI9J3J0bCddKSAjZm9vdGVyIHsKICAgICAgbGVmdDogYXV0bzsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZW9yZGVyLWdob3N0J10gewogICAgICBsZWZ0OiBhdXRvOwogICAgICByaWdodDogMDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ10gewogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogYXV0bzsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1MCUpOwogICAgfQoKICAgIDpob3N0KFtkaXI9J3J0bCddKSBbbGFzdC1jb2x1bW5dIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddOjpiZWZvcmUsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtZnJvemVuXSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlIHsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IGF1dG87CiAgICB9CiAgYCx7bW9kdWxlSWQ6InZhYWRpbi1ncmlkLXN0eWxlcyJ9KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IChjKSAyMDIxIFZhYWRpbiBMdGQuCiAgICAgKiBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAgICAgKi8KY29uc3QgaUt0PSgoKT0+e3RyeXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIlRvdWNoRXZlbnQiKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KSgpO2NsYXNzIHJLdCBleHRlbmRzKEUkdChjJHQoRCR0KFIkdChCJHQoTiR0KGokdChHJHQoVyR0KFUkdChRJHQoUCR0KEYkdCh0S3QoTyR0KEgkdChKJHQocSR0KEwkdCkpKSkpKSkpKSkpKSkpKSkpKSl7c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBfZWAKICAgICAgPGRpdgogICAgICAgIGlkPSJzY3JvbGxlciIKICAgICAgICBzYWZhcmkkPSJbW19zYWZhcmldXSIKICAgICAgICBpb3MkPSJbW19pb3NdXSIKICAgICAgICBsb2FkaW5nJD0iW1tsb2FkaW5nXV0iCiAgICAgICAgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZCQ9IltbY29sdW1uUmVvcmRlcmluZ0FsbG93ZWRdXSIKICAgICAgPgogICAgICAgIDx0YWJsZSBpZD0idGFibGUiIHJvbGU9ImdyaWQiIGFyaWEtbXVsdGlzZWxlY3RhYmxlPSJ0cnVlIiB0YWJpbmRleD0iMCI+CiAgICAgICAgICA8Y2FwdGlvbiBpZD0ic2l6ZXIiIHBhcnQ9InJvdyI+PC9jYXB0aW9uPgogICAgICAgICAgPHRoZWFkIGlkPSJoZWFkZXIiIHJvbGU9InJvd2dyb3VwIj48L3RoZWFkPgogICAgICAgICAgPHRib2R5IGlkPSJpdGVtcyIgcm9sZT0icm93Z3JvdXAiPjwvdGJvZHk+CiAgICAgICAgICA8dGZvb3QgaWQ9ImZvb3RlciIgcm9sZT0icm93Z3JvdXAiPjwvdGZvb3Q+CiAgICAgICAgPC90YWJsZT4KCiAgICAgICAgPGRpdiBwYXJ0PSJyZW9yZGVyLWdob3N0Ij48L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGlkPSJmb2N1c2V4aXQiIHRhYmluZGV4PSIwIj48L2Rpdj4KICAgIGB9c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZCJ9c3RhdGljIGdldCB2ZXJzaW9uKCl7cmV0dXJuIjIwLjAuMiJ9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9jb2x1bW5UcmVlQ2hhbmdlZChfY29sdW1uVHJlZSwgX2NvbHVtblRyZWUuKikiXX1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X3NhZmFyaTp7dHlwZTpCb29sZWFuLHZhbHVlOi9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF9pb3M6e3R5cGU6Qm9vbGVhbix2YWx1ZTovaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5NU1N0cmVhbXx8Ik1hY0ludGVsIj09PW5hdmlnYXRvci5wbGF0Zm9ybSYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjF9LF9maXJlZm94Ont0eXBlOkJvb2xlYW4sdmFsdWU6bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImZpcmVmb3giKT4tMX0sX2FuZHJvaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTovYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF90b3VjaERldmljZTp7dHlwZTpCb29sZWFuLHZhbHVlOmlLdH0saGVpZ2h0QnlSb3dzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfaGVpZ2h0QnlSb3dzQ2hhbmdlZCJ9LF9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfX19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uZW5kIix0aGlzLl9vbkFuaW1hdGlvbkVuZCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMucmVjYWxjdWxhdGVDb2x1bW5XaWR0aHMoKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4pe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LGUsbiksImRpciI9PT10JiYodGhpcy5fX2lzUlRMPSJydGwiPT09bix0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpKX1fX2hhc1Jvd3NXaXRoQ2xpZW50SGVpZ2h0KCl7cmV0dXJuISFBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKCh0PT50LmNsaWVudEhlaWdodCkpLmxlbmd0aH1fX2l0ZW1zUmVjZWl2ZWQoKXt0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZCYmIXRoaXMuX2NhY2hlLmlzTG9hZGluZygpJiZ0aGlzLl9faGFzUm93c1dpdGhDbGllbnRIZWlnaHQoKSYmKHRoaXMuX3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhPbmNlTG9hZGluZ0ZpbmlzaGVkPSExLHRoaXMucmVjYWxjdWxhdGVDb2x1bW5XaWR0aHMoKSl9X3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKHQpe3QuZm9yRWFjaCgodD0+e3Qud2lkdGg9ImF1dG8iLHQuX29yaWdGbGV4R3Jvdz10LmZsZXhHcm93LHQuZmxleEdyb3c9MH0pKSx0LmZvckVhY2goKHQ9Pnt0Ll9jdXJyZW50V2lkdGg9MCx0Ll9hbGxDZWxscy5mb3JFYWNoKChlPT57dC5fY3VycmVudFdpZHRoPU1hdGgubWF4KHQuX2N1cnJlbnRXaWR0aCxlLm9mZnNldFdpZHRoKzEpfSkpfSkpLHQuZm9yRWFjaCgodD0+e3Qud2lkdGg9YCR7dC5fY3VycmVudFdpZHRofXB4YCx0LmZsZXhHcm93PXQuX29yaWdGbGV4R3Jvdyx0Ll9jdXJyZW50V2lkdGg9dm9pZCAwLHQuX29yaWdGbGV4R3Jvdz12b2lkIDB9KSl9cmVjYWxjdWxhdGVDb2x1bW5XaWR0aHMoKXtpZih0aGlzLl9jb2x1bW5UcmVlKWlmKHRoaXMuX2NhY2hlLmlzTG9hZGluZygpKXRoaXMuX3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhPbmNlTG9hZGluZ0ZpbmlzaGVkPSEwO2Vsc2V7Y29uc3QgdD10aGlzLl9nZXRDb2x1bW5zKCkuZmlsdGVyKCh0PT4hdC5oaWRkZW4mJnQuYXV0b1dpZHRoKSk7dGhpcy5fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aHModCl9fV9jcmVhdGVTY3JvbGxlclJvd3ModCl7Y29uc3QgZT1bXTtmb3IobGV0IG49MDtuPHQ7bisrKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7dC5zZXRBdHRyaWJ1dGUoInBhcnQiLCJyb3ciKSx0LnNldEF0dHJpYnV0ZSgicm9sZSIsInJvdyIpLHRoaXMuX2NvbHVtblRyZWUmJnRoaXMuX3VwZGF0ZVJvdyh0LHRoaXMuX2NvbHVtblRyZWVbdGhpcy5fY29sdW1uVHJlZS5sZW5ndGgtMV0sImJvZHkiLCExLCEwKSxlLnB1c2godCl9cmV0dXJuIHRoaXMuX2NvbHVtblRyZWUmJnRoaXMuX2NvbHVtblRyZWVbdGhpcy5fY29sdW1uVHJlZS5sZW5ndGgtMV0uZm9yRWFjaCgodD0+dC5pc0Nvbm5lY3RlZCYmdC5ub3RpZnlQYXRoJiZ0Lm5vdGlmeVBhdGgoIl9jZWxscy4qIix0Ll9jZWxscykpKSwoZnVuY3Rpb24gbih0LGUsaSl7RWl8fEFpKCksVGkucHVzaChbdCxlLGldKX0pKHRoaXMsKCgpPT57dGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uKCksdGhpcy5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKX0pKSxlfV9nZXRSb3dUYXJnZXQoKXtyZXR1cm4gdGhpcy4kLml0ZW1zfV9jcmVhdGVDZWxsKHQpe2NvbnN0IGU9InZhYWRpbi1ncmlkLWNlbGwtY29udGVudC0iKyh0aGlzLl9jb250ZW50SW5kZXg9dGhpcy5fY29udGVudEluZGV4KzF8fDApLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmFhZGluLWdyaWQtY2VsbC1jb250ZW50Iik7bi5zZXRBdHRyaWJ1dGUoInNsb3QiLGUpO2NvbnN0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtpLmlkPWUucmVwbGFjZSgiLWNvbnRlbnQtIiwiLSIpLGkuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksaS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJ0ZCI9PT10PyJncmlkY2VsbCI6ImNvbHVtbmhlYWRlciIpO2NvbnN0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2xvdCIpO3JldHVybiByLnNldEF0dHJpYnV0ZSgibmFtZSIsZSksaS5hcHBlbmRDaGlsZChyKSxpLl9jb250ZW50PW4sbi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCgoKT0+e2lmKHdpbmRvdy5jaHJvbWUpe2NvbnN0IHQ9KCk9PntuLmNvbnRhaW5zKHRoaXMuZ2V0Um9vdE5vZGUoKS5hY3RpdmVFbGVtZW50KXx8aS5mb2N1cygpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHQsITApfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0LCEwKX1lbHNlIHNldFRpbWVvdXQoKCgpPT57bi5jb250YWlucyh0aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudCl8fGkuZm9jdXMoKX0pKX0pKSxpfV91cGRhdGVSb3codCxlLG4saSxyKXtuPW58fCJib2R5Ijtjb25zdCBvPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKHQ9PnQuX3ZhY2FudD0hMCkpLHQuaW5uZXJIVE1MPSIiLCJzaXplciIhPT10LmlkJiYodC5oaWRkZW49ITApLGUuZmlsdGVyKCh0PT4hdC5oaWRkZW4pKS5mb3JFYWNoKCgoZSxhLHMpPT57bGV0IGw7aWYoImJvZHkiPT09bil7aWYoZS5fY2VsbHM9ZS5fY2VsbHN8fFtdLGw9ZS5fY2VsbHMuZmlsdGVyKCh0PT50Ll92YWNhbnQpKVswXSxsfHwobD10aGlzLl9jcmVhdGVDZWxsKCJ0ZCIpLGUuX2NlbGxzLnB1c2gobCkpLGwuc2V0QXR0cmlidXRlKCJwYXJ0IiwiY2VsbCBib2R5LWNlbGwiKSx0LmFwcGVuZENoaWxkKGwpLGE9PT1zLmxlbmd0aC0xJiYodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikpe3RoaXMuX2RldGFpbHNDZWxscz10aGlzLl9kZXRhaWxzQ2VsbHN8fFtdO2NvbnN0IGU9dGhpcy5fZGV0YWlsc0NlbGxzLmZpbHRlcigodD0+dC5fdmFjYW50KSlbMF18fHRoaXMuX2NyZWF0ZUNlbGwoInRkIik7LTE9PT10aGlzLl9kZXRhaWxzQ2VsbHMuaW5kZXhPZihlKSYmdGhpcy5fZGV0YWlsc0NlbGxzLnB1c2goZSksZS5fY29udGVudC5wYXJlbnRFbGVtZW50fHxvLmFwcGVuZENoaWxkKGUuX2NvbnRlbnQpLHRoaXMuX2NvbmZpZ3VyZURldGFpbHNDZWxsKGUpLHQuYXBwZW5kQ2hpbGQoZSksdGhpcy5fYTExeVNldFJvd0RldGFpbHNDZWxsKHQsZSksZS5fdmFjYW50PSExfWUubm90aWZ5UGF0aCYmIXImJmUubm90aWZ5UGF0aCgiX2NlbGxzLioiLGUuX2NlbGxzKX1lbHNle2NvbnN0IHI9ImhlYWRlciI9PT1uPyJ0aCI6InRkIjtpfHwidmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj09PWUubG9jYWxOYW1lPyhsPWVbYF8ke259Q2VsbGBdfHx0aGlzLl9jcmVhdGVDZWxsKHIpLGwuX2NvbHVtbj1lLHQuYXBwZW5kQ2hpbGQobCksZVtgXyR7bn1DZWxsYF09bCk6KGUuX2VtcHR5Q2VsbHM9ZS5fZW1wdHlDZWxsc3x8W10sbD1lLl9lbXB0eUNlbGxzLmZpbHRlcigodD0+dC5fdmFjYW50KSlbMF18fHRoaXMuX2NyZWF0ZUNlbGwociksbC5fY29sdW1uPWUsdC5hcHBlbmRDaGlsZChsKSwtMT09PWUuX2VtcHR5Q2VsbHMuaW5kZXhPZihsKSYmZS5fZW1wdHlDZWxscy5wdXNoKGwpKSxsLnNldEF0dHJpYnV0ZSgicGFydCIsYGNlbGwgJHtufS1jZWxsYCksdGhpcy5fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkodCl9bC5fY29udGVudC5wYXJlbnRFbGVtZW50fHxvLmFwcGVuZENoaWxkKGwuX2NvbnRlbnQpLGwuX3ZhY2FudD0hMSxsLl9jb2x1bW49ZX0pKSx0aGlzLmFwcGVuZENoaWxkKG8pLHRoaXMuX2Zyb3plbkNlbGxzQ2hhbmdlZCgpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbkZvclJvdyh0KX1fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkodCl7aWYoIXQpcmV0dXJuO2NvbnN0IGU9QXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5maWx0ZXIoKGU9Pntjb25zdCBuPWUuX2NvbHVtbjtpZihuLl9lbXB0eUNlbGxzJiZuLl9lbXB0eUNlbGxzLmluZGV4T2YoZSk+LTEpcmV0dXJuITE7aWYodC5wYXJlbnRFbGVtZW50PT09dGhpcy4kLmhlYWRlcil7aWYobi5oZWFkZXJSZW5kZXJlcnx8bi5faGVhZGVyVGVtcGxhdGUpcmV0dXJuITA7aWYobnVsbD09PW4uaGVhZGVyKXJldHVybiExO2lmKG4ucGF0aHx8dm9pZCAwIT09bi5oZWFkZXIpcmV0dXJuITB9ZWxzZSBpZihuLmZvb3RlclJlbmRlcmVyfHxuLl9mb290ZXJUZW1wbGF0ZSlyZXR1cm4hMH0pKTt0LmhpZGRlbiE9PSFlLmxlbmd0aCYmKHQuaGlkZGVuPSFlLmxlbmd0aCx0aGlzLm5vdGlmeVJlc2l6ZSgpKX1fdXBkYXRlU2Nyb2xsZXJJdGVtKHQsZSl7dGhpcy5fcHJldmVudFNjcm9sbGVyUm90YXRpbmdDZWxsRm9jdXModCxlKSx0aGlzLl9jb2x1bW5UcmVlJiYodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJmaXJzdCIsMD09PWUsdCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJvZGQiLGUlMix0KSx0aGlzLl9hMTF5VXBkYXRlUm93Um93aW5kZXgodCxlKSx0aGlzLl9nZXRJdGVtKGUsdCkpfV9jb2x1bW5UcmVlQ2hhbmdlZCh0KXt0aGlzLl9yZW5kZXJDb2x1bW5UcmVlKHQpLHRoaXMucmVjYWxjdWxhdGVDb2x1bW5XaWR0aHMoKX1fcmVuZGVyQ29sdW1uVHJlZSh0KXtmb3IoQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2goKGU9PnRoaXMuX3VwZGF0ZVJvdyhlLHRbdC5sZW5ndGgtMV0sbnVsbCwhMSwhMCkpKTt0aGlzLiQuaGVhZGVyLmNoaWxkcmVuLmxlbmd0aDx0Lmxlbmd0aDspe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTt0LnNldEF0dHJpYnV0ZSgicGFydCIsInJvdyIpLHQuc2V0QXR0cmlidXRlKCJyb2xlIiwicm93IiksdGhpcy4kLmhlYWRlci5hcHBlbmRDaGlsZCh0KTtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7ZS5zZXRBdHRyaWJ1dGUoInBhcnQiLCJyb3ciKSxlLnNldEF0dHJpYnV0ZSgicm9sZSIsInJvdyIpLHRoaXMuJC5mb290ZXIuYXBwZW5kQ2hpbGQoZSl9Zm9yKDt0aGlzLiQuaGVhZGVyLmNoaWxkcmVuLmxlbmd0aD50Lmxlbmd0aDspdGhpcy4kLmhlYWRlci5yZW1vdmVDaGlsZCh0aGlzLiQuaGVhZGVyLmZpcnN0RWxlbWVudENoaWxkKSx0aGlzLiQuZm9vdGVyLnJlbW92ZUNoaWxkKHRoaXMuJC5mb290ZXIuZmlyc3RFbGVtZW50Q2hpbGQpO0FycmF5LmZyb20odGhpcy4kLmhlYWRlci5jaGlsZHJlbikuZm9yRWFjaCgoKGUsbik9PnRoaXMuX3VwZGF0ZVJvdyhlLHRbbl0sImhlYWRlciIsbj09PXQubGVuZ3RoLTEpKSksQXJyYXkuZnJvbSh0aGlzLiQuZm9vdGVyLmNoaWxkcmVuKS5mb3JFYWNoKCgoZSxuKT0+dGhpcy5fdXBkYXRlUm93KGUsdFt0Lmxlbmd0aC0xLW5dLCJmb290ZXIiLDA9PT1uKSkpLHRoaXMuX3VwZGF0ZVJvdyh0aGlzLiQuc2l6ZXIsdFt0Lmxlbmd0aC0xXSksdGhpcy5fcmVzaXplSGFuZGxlcigpLHRoaXMuX2Zyb3plbkNlbGxzQ2hhbmdlZCgpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpLHRoaXMuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uKCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKXt0aGlzLl9maXJlZm94JiYodGhpcy4kLml0ZW1zLnN0eWxlLnBhZGRpbmdCb3R0b209MCx0aGlzLmhlaWdodEJ5Um93c3x8KHRoaXMuJC5pdGVtcy5zdHlsZS5wYWRkaW5nQm90dG9tPWAke3RoaXMuJC5mb290ZXIub2Zmc2V0SGVpZ2h0fXB4YCkpLHRoaXMuX2lvcyYmIXdpbmRvdy5DU1Muc3VwcG9ydHMoInBvc2l0aW9uIiwic3RpY2t5IikmJih0aGlzLiQudGFibGUuc3R5bGUuaGVpZ2h0PSIiLHRoaXMuJC50YWJsZS5zdHlsZS5taW5IZWlnaHQ9IjEwMCUiLHRoaXMuJC50YWJsZS5zdHlsZS5tYXhIZWlnaHQ9IjEwMCUiLHNldFRpbWVvdXQoKCgpPT50aGlzLiQudGFibGUuc3R5bGUuaGVpZ2h0PWAke3RoaXMuJC5zY3JvbGxlci5vZmZzZXRIZWlnaHR9cHhgKSkpfV91cGRhdGVJdGVtKHQsZSl7dC5faXRlbT1lO2NvbnN0IG49dGhpcy5fX2dldFJvd01vZGVsKHQpO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2VsZWN0ZWQiLG4uc2VsZWN0ZWQsdCksdGhpcy5fYTExeVVwZGF0ZVJvd1NlbGVjdGVkKHQsbi5zZWxlY3RlZCksdGhpcy5fYTExeVVwZGF0ZVJvd0xldmVsKHQsbi5sZXZlbCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJleHBhbmRlZCIsbi5leHBhbmRlZCx0KSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRldGFpbHMtb3BlbmVkIix0aGlzLl9pc0RldGFpbHNPcGVuZWQoZSksdCksKHRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZXx8dGhpcy5yb3dEZXRhaWxzUmVuZGVyZXIpJiZ0aGlzLl90b2dnbGVEZXRhaWxzQ2VsbCh0LGUpLHRoaXMuX2dlbmVyYXRlQ2VsbENsYXNzTmFtZXModCxuKSx0aGlzLl9maWx0ZXJEcmFnQW5kRHJvcCh0LG4pLEFycmF5LmZyb20odC5jaGlsZHJlbikuZm9yRWFjaCgodD0+e2lmKHQuX3JlbmRlcmVyKXtjb25zdCBlPXQuX2NvbHVtbnx8dGhpczt0Ll9yZW5kZXJlci5jYWxsKGUsdC5fY29udGVudCxlLG4pfWVsc2UgdC5faW5zdGFuY2UmJih0Ll9pbnN0YW5jZS5fX2RldGFpbHNPcGVuZWRfXz1uLmRldGFpbHNPcGVuZWQsdC5faW5zdGFuY2UuX19zZWxlY3RlZF9fPW4uc2VsZWN0ZWQsdC5faW5zdGFuY2UuX19sZXZlbF9fPW4ubGV2ZWwsdC5faW5zdGFuY2UuX19leHBhbmRlZF9fPW4uZXhwYW5kZWQsdC5faW5zdGFuY2Uuc2V0UHJvcGVydGllcyhuKSl9KSksdGhpcy5fZGVib3VuY2VyVXBkYXRlSGVpZ2h0cz1Ubi5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJVcGRhdGVIZWlnaHRzLGd0LmFmdGVyKDEpLCgoKT0+e3RoaXMuX3VwZGF0ZU1ldHJpY3MoKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCl9KSl9X3Jlc2l6ZUhhbmRsZXIoKXt0aGlzLl91cGRhdGVEZXRhaWxzQ2VsbEhlaWdodHMoKSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSShzdXBlci5fcmVzaXplSGFuZGxlciwhMCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJNZWFzdXJlbWVudHMoKSx0aGlzLl9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKX1fb25BbmltYXRpb25FbmQodCl7MD09PXQuYW5pbWF0aW9uTmFtZS5pbmRleE9mKCJ2YWFkaW4tZ3JpZC1hcHBlYXIiKSYmKHRoaXMuX3JlbmRlcigpLHQuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9faXRlbXNSZWNlaXZlZCgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9Pnt0aGlzLl9fc2Nyb2xsVG9QZW5kaW5nSW5kZXgoKSx0aGlzLiQudGFibGUuc3R5bGUud2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc9InRvdWNoIn0pKSl9X3RvZ2dsZUF0dHJpYnV0ZSh0LGUsbil7bi5oYXNBdHRyaWJ1dGUodCk9PT0hZSYmKGU/bi5zZXRBdHRyaWJ1dGUodCwiIik6bi5yZW1vdmVBdHRyaWJ1dGUodCkpfV9fZ2V0Um93TW9kZWwodCl7cmV0dXJue2luZGV4OnQuaW5kZXgsaXRlbTp0Ll9pdGVtLGxldmVsOnRoaXMuX2dldEluZGV4TGV2ZWwodC5pbmRleCksZXhwYW5kZWQ6dGhpcy5faXNFeHBhbmRlZCh0Ll9pdGVtKSxzZWxlY3RlZDp0aGlzLl9pc1NlbGVjdGVkKHQuX2l0ZW0pLGRldGFpbHNPcGVuZWQ6ISghdGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlJiYhdGhpcy5yb3dEZXRhaWxzUmVuZGVyZXIpJiZ0aGlzLl9pc0RldGFpbHNPcGVuZWQodC5faXRlbSl9fXJlbmRlcigpe3RoaXMuX2NvbHVtblRyZWUmJih0aGlzLl9jb2x1bW5UcmVlLmZvckVhY2goKHQ9Pnt0LmZvckVhY2goKHQ9PnQuX3JlbmRlckhlYWRlckFuZEZvb3RlcigpKSl9KSksdGhpcy5fdXBkYXRlKCkpfW5vdGlmeVJlc2l6ZSgpe3N1cGVyLm5vdGlmeVJlc2l6ZSgpfV9oZWlnaHRCeVJvd3NDaGFuZ2VkKHQsZSl7KHR8fGUpJiZ0aGlzLm5vdGlmeVJlc2l6ZSgpfV9fZm9yY2VSZWZsb3coKXt0aGlzLl9kZWJvdW5jZXJGb3JjZVJlZmxvdz1Ubi5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJGb3JjZVJlZmxvdyxfdCwoKCk9Pnt0aGlzLiQuc2Nyb2xsZXIuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsc2V0VGltZW91dCgoKCk9PnRoaXMuJC5zY3JvbGxlci5zdHlsZS5vdmVyZmxvdz0iIikpfSkpfX1jdXN0b21FbGVtZW50cy5kZWZpbmUockt0LmlzLHJLdCk7bGV0IG9LdD1jbGFzcyBleHRlbmRzIHlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9ydW49IiJ9X2NzdlVybCh0LGUsbil7cmV0dXJuIGU/aU8obih0LGUpLHtmb3JtYXQ6ImNzdiJ9KToiIn1fanNvblVybCh0LGUsbil7cmV0dXJuIGU/bih0LGUpOiIifV9jc3ZOYW1lKHQsZSl7cmV0dXJuIGU/YHJ1bi0ke2V9LXRhZy0ke3R9LmNzdmA6IiJ9X2pzb25OYW1lKHQsZSl7cmV0dXJuIGU/YHJ1bi0ke2V9LXRhZy0ke3R9Lmpzb25gOiIifX07b0t0LnRlbXBsYXRlPV9lYAogICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgIGxhYmVsPSJydW4gdG8gZG93bmxvYWQiCiAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X3J1bn19IgogICAgPgogICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW3J1bnNdXSI+CiAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+W1tpdGVtXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19ydW5dXSI+CiAgICAgIDxhIGRvd25sb2FkPSJbW19jc3ZOYW1lKHRhZywgX3J1bildXSIgaHJlZj0iW1tfY3N2VXJsKHRhZywgX3J1biwgdXJsRm4pXV0iCiAgICAgICAgPkNTVjwvYQogICAgICA+PCEtLQogICAgICAtLT48YQogICAgICAgIGRvd25sb2FkPSJbW19qc29uTmFtZSh0YWcsIF9ydW4pXV0iCiAgICAgICAgaHJlZj0iW1tfanNvblVybCh0YWcsIF9ydW4sIHVybEZuKV1dIgogICAgICAgID5KU09OPC9hCiAgICAgID4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICB9CiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgfQogICAgICBhIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAuMmVtOwogICAgICB9CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxvS3QucHJvdG90eXBlLCJfcnVuIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxvS3QucHJvdG90eXBlLCJydW5zIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLG9LdC5wcm90b3R5cGUsInRhZyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxvS3QucHJvdG90eXBlLCJ1cmxGbiIsdm9pZCAwKSxvS3Q9dChbaSgidGYtZG93bmxvYWRlciIpXSxvS3QpLG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7bGV0IGFLdD1jbGFzcyBleHRlbmRzIHlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bnVsbCx0aGlzLl9sb2FkRGF0YUNhbGxiYWNrPSh0LGUsbik9PntpZihudWxsPT1uKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIGRhdGEgZm9yOiIsZSk7Y29uc3QgaT1uLm1hcCgodD0+KHt3YWxsX3RpbWU6bmV3IERhdGUoMWUzKnRbMF0pLHN0ZXA6dFsxXSxzY2FsYXI6dFsyXX0pKSkscj10aGlzLl9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKGUpO3Quc2V0U2VyaWVzTWV0YWRhdGEocixlKSx0LnNldFNlcmllc0RhdGEocixpKX0sdGhpcy5nZXREYXRhTG9hZFVybD0oe3RhZzp0LHJ1bjplfSk9Pl9yKCkucGx1Z2luUm91dGUoInNjYWxhcnMiLCIvc2NhbGFycyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnQscnVuOmV9KSksdGhpcy5fZG93bmxvYWRVcmxGbj0odCxlKT0+dGhpcy5nZXREYXRhTG9hZFVybCh7dGFnOnQscnVuOmV9KSx0aGlzLnJlcXVlc3REYXRhPSh0LGUsbik9PnRoaXMuaW5Db2xhYj90aGlzLl9yZXF1ZXN0RGF0YUdldCh0LGUsbik6dGhpcy5fcmVxdWVzdERhdGFQb3N0KHQsZSxuKSx0aGlzLl9yZXF1ZXN0RGF0YUdldD0odCxlLG4pPT57Y29uc3QgaT1fcigpLnBsdWdpblJvdXRlKCJzY2FsYXJzIiwiL3NjYWxhcnMiKTtQcm9taXNlLmFsbCh0Lm1hcCgodD0+e2NvbnN0IG49aU8oaSx7dGFnOnQudGFnLHJ1bjp0LnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QobikudGhlbigobj0+e2Uoe2l0ZW06dCxkYXRhOm59KX0pKX0pKSkuZmluYWxseSgoKCk9PntuKCl9KSl9LHRoaXMuX3JlcXVlc3REYXRhUG9zdD0odCxlLG4pPT57dmFyIGk7Y29uc3Qgcj1fcigpLnBsdWdpblJvdXRlKCJzY2FsYXJzIiwiL3NjYWxhcnNfbXVsdGlydW4iKSxvPW5ldyBNYXA7Zm9yKGNvbnN0e3RhZzplLHJ1bjpufW9mIHQpe2xldCB0PW8uZ2V0KGUpO251bGw9PXQmJm8uc2V0KGUsdD1bXSksdC5wdXNoKG4pfWNvbnN0IGE9bnVsbCE9PShpPXRoaXMuYmF0Y2hTaXplKSYmdm9pZCAwIT09aT9pOjY0LHM9W107Zm9yKGNvbnN0W3QsZV1vZiBvKWZvcihsZXQgbj0wO248ZS5sZW5ndGg7bis9YSlzLnB1c2goe3RhZzp0LHJ1bnM6ZS5zbGljZShuLG4rYSl9KTtQcm9taXNlLmFsbChzLm1hcCgoKHt0YWc6dCxydW5zOm59KT0+dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIse3RhZzp0LHJ1bnM6bn0pLnRoZW4oKGk9Pntmb3IoY29uc3QgciBvZiBuKXtjb25zdCBuPXt0YWc6dCxydW46cn07T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGkscik/ZSh7aXRlbTpuLGRhdGE6aVtyXX0pOmUoe2l0ZW06bixkYXRhOm51bGx9KX19KSkpKSkuZmluYWxseSgoKCk9PntuKCl9KSl9LHRoaXMuX2dldERhdGFMb2FkTmFtZT10PT50aGlzLl9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHQpLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2NvbnN0IHQ9cEN0LnNsaWNlKCksZT10LmZpbmRJbmRleCgodD0+Ik5hbWUiPT10LnRpdGxlKSk7cmV0dXJuIHQuc3BsaWNlKGUsMSx7dGl0bGU6Ik5hbWUiLGV2YWx1YXRlOnQ9Pntjb25zdCBlPXQuZGF0YXNldC5tZXRhZGF0YSgpLm1ldGE7cmV0dXJuIHRoaXMuX2dldFNlcmllc0Rpc3BsYXlOYW1lRnJvbURhdHVtKGUpfX0pLHR9KSgpfV9nZXRDaGFydERhdGFMb2FkZXIoKXtyZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKX1yZWxvYWQoKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZWxvYWQoKX1yZWRyYXcoKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfV90b2dnbGVMb2dTY2FsZSgpe3RoaXMuc2V0KCJfbG9nU2NhbGVBY3RpdmUiLCF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9X3Jlc2V0RG9tYWluKCl7Y29uc3QgdD10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKTt0JiZ0LnJlc2V0RG9tYWluKCl9X3VwZGF0ZURvd25sb2FkTGluaygpe2NvbnN0IHQ9dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCkuZXhwb3J0QXNTdmdTdHJpbmcoKTt0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiI3N2Z0xpbmsiKS5ocmVmPWBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7YnRvYSh0KX1gfV9ydW5zRnJvbURhdGEodCl7cmV0dXJuIHQubWFwKCh0PT50LnJ1bikpfV9nZXREYXRhU2VyaWVzKCl7cmV0dXJuIHRoaXMuZGF0YVRvTG9hZC5tYXAoKHQ9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0odCkpKX1fZ2V0U2VyaWVzTmFtZUZyb21EYXR1bSh7cnVuOnQsZXhwZXJpbWVudDplPXtuYW1lOiJfZGVmYXVsdCJ9fSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KFtlLm5hbWUsdF0pfV9nZXRTZXJpZXNEaXNwbGF5TmFtZUZyb21EYXR1bSh0KXtyZXR1cm4gdC5ydW59X2dldENvbG9yU2NhbGUoKXtyZXR1cm4gbnVsbCE9PXRoaXMuY29sb3JTY2FsZT90aGlzLmNvbG9yU2NhbGU6e3NjYWxlOnQ9Pntjb25zdFssZV09SlNPTi5wYXJzZSh0KTtyZXR1cm4gR1IoZSl9fX19O2FLdC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIKICAgICAgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KICAgIDxkaXYgaWQ9InRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIj4KICAgICAgPHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIKICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgY29sb3Itc2NhbGU9IltbX2dldENvbG9yU2NhbGUoY29sb3JTY2FsZSldXSIKICAgICAgICBkYXRhLXNlcmllcz0iW1tfZ2V0RGF0YVNlcmllcyhkYXRhVG9Mb2FkLiopXV0iCiAgICAgICAgZGF0YS10by1sb2FkPSJbW2RhdGFUb0xvYWRdXSIKICAgICAgICBnZXQtZGF0YS1sb2FkLW5hbWU9IltbX2dldERhdGFMb2FkTmFtZV1dIgogICAgICAgIGdldC1kYXRhLWxvYWQtdXJsPSJbW2dldERhdGFMb2FkVXJsXV0iCiAgICAgICAgcmVxdWVzdC1kYXRhPSJbW3JlcXVlc3REYXRhXV0iCiAgICAgICAgaWdub3JlLXktb3V0bGllcnM9IltbaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgbG9hZC1kYXRhLWNhbGxiYWNrPSJbW19sb2FkRGF0YUNhbGxiYWNrXV0iCiAgICAgICAgbG9hZC1rZXk9IltbdGFnXV0iCiAgICAgICAgbG9nLXNjYWxlLWFjdGl2ZT0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICBzbW9vdGhpbmctZW5hYmxlZD0iW1tzbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgICAgc21vb3RoaW5nLXdlaWdodD0iW1tzbW9vdGhpbmdXZWlnaHRdXSIKICAgICAgICB0YWctbWV0YWRhdGE9IltbdGFnTWV0YWRhdGFdXSIKICAgICAgICB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj0iYXV0byIKICAgICAgICB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iCiAgICAgICAgeC10eXBlPSJbW3hUeXBlXV0iCiAgICAgID4KICAgICAgPC90Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJidXR0b25zIj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2xvZ1NjYWxlQWN0aXZlXV0iCiAgICAgICAgaWNvbj0ibGluZS13ZWlnaHQiCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlTG9nU2NhbGUiCiAgICAgICAgdGl0bGU9IlRvZ2dsZSB5LWF4aXMgbG9nIHNjYWxlIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgaWNvbj0ic2V0dGluZ3Mtb3ZlcnNjYW4iCiAgICAgICAgb24tdGFwPSJfcmVzZXREb21haW4iCiAgICAgICAgdGl0bGU9IkZpdCBkb21haW4gdG8gZGF0YSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8cGFwZXItbWVudS1idXR0b24gb24tcGFwZXItZHJvcGRvd24tb3Blbj0iX3VwZGF0ZURvd25sb2FkTGluayI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLXRyaWdnZXIiCiAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLXRyaWdnZXIiCiAgICAgICAgICAgIGljb249ImZpbGUtZG93bmxvYWQiCiAgICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgPGEgaWQ9InN2Z0xpbmsiIGRvd25sb2FkPSJbW3RhZ11dLnN2ZyI+CiAgICAgICAgICAgICAgICBEb3dubG9hZCBDdXJyZW50IENoYXJ0IGFzIFNWRwogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9wYXBlci1pdGVtPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItbWVudS1idXR0b24+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxzcGFuIHN0eWxlPSJmbGV4LWdyb3c6IDEiPjwvc3Bhbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dEb3dubG9hZExpbmtzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImRvd25sb2FkLWxpbmtzIj4KICAgICAgICAgIDx0Zi1kb3dubG9hZGVyCiAgICAgICAgICAgIHJ1bnM9IltbX3J1bnNGcm9tRGF0YShkYXRhVG9Mb2FkKV1dIgogICAgICAgICAgICB0YWc9IltbdGFnXV0iCiAgICAgICAgICAgIHVybC1mbj0iW1tfZG93bmxvYWRVcmxGbl1dIgogICAgICAgICAgPjwvdGYtZG93bmxvYWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgbWFyZ2luOiA1cHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDMzMHB4OwogICAgICB9CgogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICB9CgogICAgICAjdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIgewogICAgICAgIGhlaWdodDogMjAwcHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgfQoKICAgICAgI2J1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGNvbG9yOiAjMjE5NmYzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICAuZG93bmxvYWQtbGlua3MgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICB9CgogICAgICAuZG93bmxvYWQtbGlua3MgYSB7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBtYXJnaW46IDJweDsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgfQoKICAgICAgcGFwZXItbWVudS1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgICAgcGFwZXItaXRlbSBhIHsKICAgICAgICBjb2xvcjogaW5oZXJpdDsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGFLdC5wcm90b3R5cGUsInRhZyIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sYUt0LnByb3RvdHlwZSwiZGF0YVRvTG9hZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhS3QucHJvdG90eXBlLCJ4VHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGFLdC5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGFLdC5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixkcildLGFLdC5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sYUt0LnByb3RvdHlwZSwic2hvd0Rvd25MaW5rcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGFLdC5wcm90b3R5cGUsInNtb290aGluZ0VuYWJsZWQiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sYUt0LnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGFLdC5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGFLdC5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sYUt0LnByb3RvdHlwZSwidG9vbHRpcFNvcnRpbmdNZXRob2QiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sYUt0LnByb3RvdHlwZSwiYmF0Y2hTaXplIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxhS3QucHJvdG90eXBlLCJpbkNvbGFiIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGFLdC5wcm90b3R5cGUsIl9sb2FkRGF0YUNhbGxiYWNrIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sYUt0LnByb3RvdHlwZSwiZ2V0RGF0YUxvYWRVcmwiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sYUt0LnByb3RvdHlwZSwiX2Rvd25sb2FkVXJsRm4iLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxhS3QucHJvdG90eXBlLCJyZXF1ZXN0RGF0YSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxhS3QucHJvdG90eXBlLCJfZ2V0RGF0YUxvYWROYW1lIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGFLdC5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGFLdC5wcm90b3R5cGUsIl9sb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sYUt0LnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApLGFLdD10KFtpKCJ0Zi1zY2FsYXItY2FyZCIpXSxhS3QpO2xldCBzS3Q9Y2xhc3MgZXh0ZW5kcygoZnVuY3Rpb24gdChlLG4pe3JldHVybihmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIE5yKHt9LGVyKGUpLHQpfSkoZSxuKX0pKFtfb10seWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZXNzaW9uR3JvdXA9bnVsbCx0aGlzLl94VHlwZT14VHQuU1RFUCx0aGlzLl9ub011bHRpRXhwZXJpbWVudHM9ITEsdGhpcy5fcmVxdWVzdERhdGE9KHQsZSxuKT0+e1Byb21pc2UuYWxsKHQubWFwKCh0PT50aGlzLmJhY2tlbmQubGlzdE1ldHJpY0V2YWxzKHtleHBlcmltZW50TmFtZTp0aGlzLmV4cGVyaW1lbnROYW1lLHNlc3Npb25OYW1lOnQucnVuLG1ldHJpY05hbWU6dC50YWd9KS50aGVuKChuPT57ZSh7aXRlbTp0LGRhdGE6bn0pfSkpKSkpLmZpbmFsbHkoKCgpPT57bigpfSkpfSx0aGlzLl9jb2xvclNjYWxlPXtzY2FsZTp0PT57Y29uc3QgZT1KU09OLnBhcnNlKHQpWzFdLG49dGhpcy5faW5kZXhPZlNlc3Npb24uZ2V0KGUpO3JldHVybiBIUlsodGhpcy5fc2Vzc2lvbkdyb3VwTmFtZUhhc2grbiklSFIubGVuZ3RoXX19fWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImlyb24tcmVzaXplIix0aGlzLnJlZHJhdy5iaW5kKHRoaXMpKX1yZWRyYXcoKXt0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKCh0PT50LnJlZHJhdygpKSl9X3Nlc3Npb25Hcm91cENoYW5nZWQoKXt0aGlzLnNlc3Npb25Hcm91cCYmMCE9T2JqZWN0LmtleXModGhpcy5zZXNzaW9uR3JvdXApLmxlbmd0aD8odGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCh0aGlzLnNlc3Npb25Hcm91cC5zZXNzaW9ucy5tYXAoKCh0LGUpPT5bdC5uYW1lLGVdKSkpLHRoaXMuX3Nlc3Npb25Hcm91cE5hbWVIYXNoPVlZdCh0aGlzLnNlc3Npb25Hcm91cC5uYW1lKSk6KHRoaXMuX2luZGV4T2ZTZXNzaW9uPW5ldyBNYXAsdGhpcy5fc2Vzc2lvbkdyb3VwTmFtZUhhc2g9MCksdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLXNjYWxhci1jYXJkIikuZm9yRWFjaCgodD0+e2NvbnN0IGU9dCxuPWUuZ2V0KCJ0YWciKTtlLnNldCgidGFnIiwiIiksZS5zZXQoInRhZyIsbil9KSl9X2hhdmVNZXRyaWNzKCl7cmV0dXJuIHRoaXMudmlzaWJsZVNjaGVtYSYmQXJyYXkuaXNBcnJheSh0aGlzLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3MpJiZ0aGlzLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3MubGVuZ3RoPjB9X2hhdmVNZXRyaWNzQW5kU2Vzc2lvbkdyb3VwKCl7cmV0dXJuIHRoaXMuc2Vzc2lvbkdyb3VwJiZ0aGlzLl9oYXZlTWV0cmljcygpfV9jb21wdXRlU2VyaWVzRm9yU2Vzc2lvbkdyb3VwTWV0cmljKHQsZSl7cmV0dXJuIG51bGw9PT10fHwwPT1PYmplY3Qua2V5cyh0KS5sZW5ndGh8fG51bGw9PT1lP1tdOnQuc2Vzc2lvbnMuZmlsdGVyKCh0PT52b2lkIDAhPT1BWXQodC5tZXRyaWNWYWx1ZXMsZS5uYW1lKSkpLm1hcCgodD0+KHt0YWc6ZS5uYW1lLHJ1bjp0Lm5hbWV9KSkpfV9jb21wdXRlVGFnTWV0YWRhdGEodCl7cmV0dXJue2Rpc3BsYXlOYW1lOndZdCh0KSxkZXNjcmlwdGlvbjp0LmRlc2NyaXB0aW9ufHwiIn19fTtzS3QudGVtcGxhdGU9X2VgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIXNlc3Npb25Hcm91cF1dIj4KICAgICAgPGRpdj4KICAgICAgICA8aDM+Tm8gc2Vzc2lvbiBncm91cCBzZWxlY3RlZDwvaDM+CiAgICAgICAgPHA+UGxlYXNlIHNlbGVjdCBhIHNlc3Npb24gZ3JvdXAgdG8gc2VlIGl0cyBtZXRyaWMtZ3JhcGhzIGhlcmUuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9oYXZlTWV0cmljcyh2aXNpYmxlU2NoZW1hLiopXV0iPgogICAgICA8ZGl2PgogICAgICAgIDxoMz5ObyBtZXRyaWNzIGFyZSBlbmFibGVkPC9oMz4KICAgICAgICA8cD5QbGVhc2UgZW5hYmxlIHNvbWUgbWV0cmljcyB0byBzZWUgY29udGVudCBoZXJlLjwvcD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBjbGFzcz0ibGF5b3V0IGhvcml6b250YWwgd3JhcCBzZXNzaW9uLWdyb3VwLWRldGFpbHMiPgogICAgICA8dGVtcGxhdGUKICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgIGlmPSJbW19oYXZlTWV0cmljc0FuZFNlc3Npb25Hcm91cCh2aXNpYmxlU2NoZW1hLiosIHNlc3Npb25Hcm91cCldXSIKICAgICAgPgogICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICBpdGVtcz0iW1t2aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zXV0iCiAgICAgICAgICBhcz0ibWV0cmljSW5mbyIKICAgICAgICA+CiAgICAgICAgICA8IS0tIE5vdGUgdGhhdCB3ZSBkbyBub3QgcHJvdmlkZSBhIHJlcXVlc3QtbWFuYWdlciBhdHRyaWJ1dGUgc2luY2UKICAgICAgICAgICAgICAgd2UgcHJvdmlkZSBhIGZ1bmN0aW9uIGluIHJlcXVlc3QtZGF0YSBmb3IgY2FsbGluZyB0aGUgYmFja2VuZAogICAgICAgICAgICAgICB0byBnZXQgdGhlIG1ldHJpY3MgZGF0YS4KICAgICAgICAgICAgLS0+CiAgICAgICAgICA8dGYtc2NhbGFyLWNhcmQKICAgICAgICAgICAgY2xhc3M9InNjYWxhci1jYXJkIgogICAgICAgICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZV1dIgogICAgICAgICAgICBkYXRhLXRvLWxvYWQ9IltbX2NvbXB1dGVTZXJpZXNGb3JTZXNzaW9uR3JvdXBNZXRyaWMoc2Vzc2lvbkdyb3VwLCBtZXRyaWNJbmZvKV1dIgogICAgICAgICAgICB0YWc9IltbbWV0cmljSW5mby5uYW1lLnRhZ11dIgogICAgICAgICAgICB0YWctbWV0YWRhdGE9IltbX2NvbXB1dGVUYWdNZXRhZGF0YShtZXRyaWNJbmZvKV1dIgogICAgICAgICAgICB4LXR5cGU9IltbX3hUeXBlXV0iCiAgICAgICAgICAgIG11bHRpLWV4cGVyaW1lbnRzPSJbW19ub011bHRpRXhwZXJpbWVudHNdXSIKICAgICAgICAgICAgcmVxdWVzdC1kYXRhPSJbW19yZXF1ZXN0RGF0YV1dIgogICAgICAgICAgICBhY3RpdmUKICAgICAgICAgID4KICAgICAgICAgIDwvdGYtc2NhbGFyLWNhcmQ+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPCEtLSAiaXJvbi1mbGV4IiBpcyBuZWVkZWQgdG8gdXNlIHRoZSBsYXlvdXQgY2xhc3NlcyBpbiB0aGUgZGl2IGFib3ZlIC0tPgogICAgPHN0eWxlIGluY2x1ZGU9Imlyb24tZmxleCI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHNLdC5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sc0t0LnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sc0t0LnByb3RvdHlwZSwidmlzaWJsZVNjaGVtYSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxzS3QucHJvdG90eXBlLCJzZXNzaW9uR3JvdXAiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sc0t0LnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sc0t0LnByb3RvdHlwZSwiX25vTXVsdGlFeHBlcmltZW50cyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxzS3QucHJvdG90eXBlLCJfaW5kZXhPZlNlc3Npb24iLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sc0t0LnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cE5hbWVIYXNoIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sc0t0LnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHNLdC5wcm90b3R5cGUsIl9jb2xvclNjYWxlIix2b2lkIDApLHQoW2EoInNlc3Npb25Hcm91cC4qIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxzS3QucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3VwQ2hhbmdlZCIsbnVsbCksc0t0PXQoW2koInRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzIildLHNLdCk7bGV0IGxLdD1jbGFzcyBleHRlbmRzKGVyKGlsKHllKSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9ocGFyYW1OYW1lPXhZdCx0aGlzLl9tZXRyaWNOYW1lPXdZdH1fdmlzaWJsZVNjaGVtYU9yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQoKXtjb25zdCB0PXRoaXMuJC5zZXNzaW9uR3JvdXBzVGFibGUuZ2V0KCJkZXRhaWxzT3BlbmVkSXRlbXMiKTt0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZGV0YWlsc09wZW5lZEl0ZW1zIixbXSksRGkoKTtjb25zdCBlPW5ldyBNYXA7dGhpcy5zZXNzaW9uR3JvdXBzLmZvckVhY2goKHQ9PntlLnNldCh0Lm5hbWUsdCl9KSksdGhpcy4kLnNlc3Npb25Hcm91cHNUYWJsZS5zZXQoImRldGFpbHNPcGVuZWRJdGVtcyIsdC5tYXAoKHQ9PmUuZ2V0KHQubmFtZSkpKS5maWx0ZXIoQm9vbGVhbikpfV9zZXNzaW9uR3JvdXBIUGFyYW0odCxlKXtyZXR1cm4gbnVsbCE9dCYmMCE9T2JqZWN0LmtleXModCkubGVuZ3RoJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodC5ocGFyYW1zLGUpP1ZZdCh0LmhwYXJhbXNbZV0pOiIifV9zZXNzaW9uR3JvdXBNZXRyaWModCxlKXtpZihudWxsPT10fHwwPT1PYmplY3Qua2V5cyh0KS5sZW5ndGgpcmV0dXJuIiI7Zm9yKGxldCBuPTA7bjx0Lm1ldHJpY1ZhbHVlcy5sZW5ndGg7KytuKXtsZXQgaT10Lm1ldHJpY1ZhbHVlc1tuXTtpZihpLm5hbWUuZ3JvdXA9PT1lLmdyb3VwJiZpLm5hbWUudGFnPT1lLnRhZylyZXR1cm4gVll0KGkudmFsdWUpfXJldHVybiIifV9yb3dOdW1iZXIodCl7cmV0dXJuIHQrMX19O2xLdC50ZW1wbGF0ZT1fZWAKICAgIDx2YWFkaW4tZ3JpZAogICAgICBjbGFzcz0ic2Vzc2lvbi1ncm91cC10YWJsZSIKICAgICAgaWQ9InNlc3Npb25Hcm91cHNUYWJsZSIKICAgICAgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZD0iIgogICAgICBpdGVtcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICA+CiAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIwIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj5UcmlhbCBJRDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+W1tpdGVtLm5hbWVdXTwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZW5hYmxlU2hvd01ldHJpY3NdXSI+CiAgICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjAiIGF1dG9XaWR0aD0iIiByZXNpemFibGU9IiI+CiAgICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj5TaG93IE1ldHJpY3M8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjbGFzcz0idGFibGUtY2VsbCIgY2hlY2tlZD0ie3tkZXRhaWxzT3BlbmVkfX0iPgogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9IltbdmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvc11dIgogICAgICAgIGFzPSJocGFyYW1JbmZvIgogICAgICAgIGluZGV4LWFzPSJocGFyYW1JbmRleCIKICAgICAgPgogICAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIyIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfaHBhcmFtTmFtZShocGFyYW1JbmZvKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfc2Vzc2lvbkdyb3VwSFBhcmFtKGl0ZW0sIGhwYXJhbUluZm8ubmFtZSldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgIGl0ZW1zPSJ7e3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3N9fSIKICAgICAgICBhcz0ibWV0cmljSW5mbyIKICAgICAgICBpbmRleC1hcz0ibWV0cmljSW5kZXgiCiAgICAgID4KICAgICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMiIgd2lkdGg9IjEwZW0iIHJlc2l6YWJsZT0iIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX21ldHJpY05hbWUobWV0cmljSW5mbyldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX3Nlc3Npb25Hcm91cE1ldHJpYyhpdGVtLCBtZXRyaWNJbmZvLm5hbWUpXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgY2xhc3M9InJvdy1kZXRhaWxzIj4KICAgICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW2l0ZW1dXSIKICAgICAgICAgIHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIKICAgICAgICAgIGNsYXNzPSJzZXNzaW9uLWdyb3VwLWRldGFpbHMiCiAgICAgICAgPgogICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3ZhYWRpbi1ncmlkPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tbHVtby1iYXNlLWNvbG9yOiAjMzAzMDMwOwogICAgICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHZhYWRpbi1ncmlkIHsKICAgICAgICAtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcjogIzUwNTA1MDsKICAgICAgfQoKICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAudGFibGUtaGVhZGVyIHsKICAgICAgICAvKiBsaW5lLWJyZWFrIG92ZXJmbG93aW5nIGNvbHVtbiBoZWFkZXJzICovCiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5zZXNzaW9uLWdyb3VwLXRhYmxlIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnNlc3Npb24tZ3JvdXAtZGV0YWlscyB7CiAgICAgICAgaGVpZ2h0OiAzNjBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbEt0LnByb3RvdHlwZSwidmlzaWJsZVNjaGVtYSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sbEt0LnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGxLdC5wcm90b3R5cGUsImVuYWJsZVNob3dNZXRyaWNzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGxLdC5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbEt0LnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCksdChbYSgidmlzaWJsZVNjaGVtYS4qIiwic2Vzc2lvbkdyb3Vwcy4qIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxsS3QucHJvdG90eXBlLCJfdmlzaWJsZVNjaGVtYU9yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQiLG51bGwpLGxLdD10KFtpKCJ0Zi1ocGFyYW1zLXRhYmxlLXZpZXciKV0sbEt0KTtsZXQgY0t0PWNsYXNzIGV4dGVuZHMgeWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc2Vzc2lvbkdyb3VwPW51bGwsdGhpcy52aXNpYmxlU2NoZW1hPW51bGx9X3Byb3BlcnRpZXNBcmVQb3B1bGF0ZWQodCxlKXtyZXR1cm4gbnVsbCE9dCYmbnVsbCE9ZX1fc2luZ2xldG9uU2Vzc2lvbkdyb3Vwcyh0KXtyZXR1cm4gbnVsbD09dD9bXTpbdF19fTtmdW5jdGlvbiB1S3QodCxlLG4pe2Z1bmN0aW9uIGkoKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuWzEsMl07Y29uc3RbZSxuXT1MbCh0KTtyZXR1cm4gZSE9PW4/W2Usbl06ZT4wP1suNSplLDEuNSplXTplPDA/WzEuNSplLC41KmVdOlstMSwxXX1pZigiTElORUFSIj09PW4pcmV0dXJuIFZNKCkuZG9tYWluKGkoKSkucmFuZ2UoW2UsMF0pO2lmKCJMT0ciPT09bil7Y29uc3Qgbj1pKCk7cmV0dXJuIG5bMF08PTAmJm5bMV0+PTA/dUt0KHQsZSwiTElORUFSIik6S00oKS5kb21haW4obikucmFuZ2UoW2UsMF0pfWlmKCJRVUFOVElMRSI9PT1uKXtjb25zdCBuPTIwLGk9emwobikubWFwKCh0PT5lLXQqZS8obi0xKSkpO3JldHVybiAwPT09dC5sZW5ndGgmJih0PVsxXSksb0UoKS5kb21haW4oU2UuZXhwb3J0cy51bmlxKHQpKS5yYW5nZShpKX1pZigiTk9OX05VTUVSSUMiPT09bilyZXR1cm4gQU0oKS5kb21haW4oU2UuZXhwb3J0cy51bmlxKHQuc29ydCgpKSkucmFuZ2UoW2UsMF0pLnBhZGRpbmcoLjEpO3Rocm93IFJhbmdlRXJyb3IoIlVua25vd24gc2NhbGU6ICIrbil9dmFyIGhLdCxkS3Q7Y0t0LnRlbXBsYXRlPV9lYAogICAgPCEtLSBJZiBzZXNzaW9uR3JvdXAgb3IgdmlzaWJsZVNjaGVtYSBhcmUgbm90IHBvcHVsYXRlZCwgZG8gbm90IGRpc3BsYXkKICAgICAgICAgYW55dGhpbmcuCiAgICAgIC0tPgogICAgPHRlbXBsYXRlCiAgICAgIGlzPSJkb20taWYiCiAgICAgIGlmPSJbW19wcm9wZXJ0aWVzQXJlUG9wdWxhdGVkKHZpc2libGVTY2hlbWEsIHNlc3Npb25Hcm91cCldXSIKICAgID4KICAgICAgPCEtLSBEaXNwbGF5IG9uZSByb3cgd2l0aG91dCBhICJzaG93LW1ldHJpY3MiIGNvbHVtbiAtLT4KICAgICAgPHRmLWhwYXJhbXMtdGFibGUtdmlldwogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tfc2luZ2xldG9uU2Vzc2lvbkdyb3VwcyhzZXNzaW9uR3JvdXApXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlCiAgICAgIGlzPSJkb20taWYiCiAgICAgIGlmPSJbWyFfcHJvcGVydGllc0FyZVBvcHVsYXRlZCh2aXNpYmxlU2NoZW1hLCBzZXNzaW9uR3JvdXApXV0iCiAgICA+CiAgICAgIDxkaXY+Q2xpY2sgb3IgaG92ZXIgb3ZlciBhIHNlc3Npb24gZ3JvdXAgdG8gZGlzcGxheSBpdHMgdmFsdWVzIGhlcmUuPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY0t0LnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGNLdC5wcm90b3R5cGUsInZpc2libGVTY2hlbWEiLHZvaWQgMCksY0t0PXQoW2koInRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXMiKV0sY0t0KSwoZnVuY3Rpb24odCl7dC5MSU5FQVI9IkxJTkVBUiIsdC5MT0c9IkxPRyIsdC5RVUFOVElMRT0iUVVBTlRJTEUiLHQuTk9OX05VTUVSSUM9Ik5PTl9OVU1FUklDIn0pKGhLdHx8KGhLdD17fSkpO2NsYXNzIHBLdHtpc1Bhc3NpbmcodCl7cmV0dXJuITB9fWNsYXNzIGZLdHtjb25zdHJ1Y3Rvcih0LGUsbixpKXt0aGlzLl9sb3dlcj10LHRoaXMuX3VwcGVyPWUsdGhpcy5fbG93ZXJPcGVuPW4sdGhpcy5fdXBwZXJPcGVuPWl9aXNQYXNzaW5nKHQpe2NvbnN0IGU9dDtyZXR1cm4gdGhpcy5fYmVmb3JlKHRoaXMuX2xvd2VyLGUsIXRoaXMuX2xvd2VyT3BlbikmJnRoaXMuX2JlZm9yZShlLHRoaXMuX3VwcGVyLCF0aGlzLl91cHBlck9wZW4pfV9iZWZvcmUodCxlLG4pe3JldHVybiBuP3Q8PWU6dDxlfX1jbGFzcyBtS3R7Y29uc3RydWN0b3IodCl7dGhpcy5fZG9tYWluU2V0PXR9aXNQYXNzaW5nKHQpe3JldHVybi0xIT09dGhpcy5fZG9tYWluU2V0LmZpbmRJbmRleCgoZT0+ZT09PXQpKX19Y2xhc3MgZ0t0e2NvbnN0cnVjdG9yKHQsZSxuLGkpe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPWUsdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyPW4sdGhpcy5fY29sSW5kZXg9aSx0aGlzLl9pc0Rpc3BsYXllZD0hMSx0aGlzLl95U2NhbGU9bnVsbCx0aGlzLl9zY2FsZVR5cGU9bnVsbCx0aGlzLnNldEJydXNoU2VsZWN0aW9uKG51bGwpfWNvbEluZGV4KCl7cmV0dXJuIHRoaXMuX2NvbEluZGV4fXlTY2FsZSgpe3JldHVybiB0aGlzLl95U2NhbGV9c2NhbGVUeXBlKCl7cmV0dXJuIHRoaXMuX3NjYWxlVHlwZX1icnVzaFNlbGVjdGlvbigpe3JldHVybiB0aGlzLl9icnVzaFNlbGVjdGlvbn1pc0Rpc3BsYXllZCgpe3JldHVybiB0aGlzLl9pc0Rpc3BsYXllZH1zZXRCcnVzaFNlbGVjdGlvbih0KXt0aGlzLl9icnVzaFNlbGVjdGlvbj10LHRoaXMuX2JydXNoRmlsdGVyPXRoaXMuX2J1aWxkQnJ1c2hGaWx0ZXIodGhpcy5icnVzaFNlbGVjdGlvbigpLHRoaXMuc2NhbGVUeXBlKCksdGhpcy55U2NhbGUoKSl9c2V0RG9tYWluQW5kU2NhbGUodCxlKXt0aGlzLl9zY2FsZVR5cGU9ZSx0aGlzLl95U2NhbGU9dUt0KHQuc2xpY2UoKSx0aGlzLl9zdmdQcm9wcy5oZWlnaHQsdGhpcy5zY2FsZVR5cGUoKSksdGhpcy5fYnJ1c2hGaWx0ZXI9dGhpcy5fYnVpbGRCcnVzaEZpbHRlcih0aGlzLmJydXNoU2VsZWN0aW9uKCksdGhpcy5zY2FsZVR5cGUoKSx0aGlzLnlTY2FsZSgpKX1icnVzaEZpbHRlcigpe3JldHVybiB0aGlzLl9icnVzaEZpbHRlcn11cGRhdGVET00odCl7bGV0IGU9YWModGhpcy55U2NhbGUoKSk7dGhpcy5zY2FsZVR5cGUoKT09PWhLdC5RVUFOVElMRSYmKGU9ZS50aWNrVmFsdWVzKHRoaXMueVNjYWxlKCkucXVhbnRpbGVzKCkpLnRpY2tGb3JtYXQobXkoIi0uNmciKSkpO2NvbnN0IG49U3UodCk7bi5zZWxlY3RBbGwoImciKS5yZW1vdmUoKSxuLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXMiLCEwKS5jYWxsKGUpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImF4aXMtdGl0bGUiLCEwKS5zdHlsZSgiY3Vyc29yIiwibW92ZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoInkiLC05KS50ZXh0KCh0PT5TWXQodGhpcy5fc2NoZW1hLHQpKSksbi5jYWxsKHZoKCkub24oInN0YXJ0IiwoKCk9Pnt0LnNldEF0dHJpYnV0ZSgiaXMtZHJhZ2dpbmciLCIiKSx0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnU3RhcnQodGhpcy5jb2xJbmRleCgpKX0pKS5vbigiZHJhZyIsKCgpPT50aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnKHV1LngpKSkub24oImVuZCIsKCgpPT57dGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uRHJhZ0VuZCgpLHQucmVtb3ZlQXR0cmlidXRlKCJpcy1kcmFnZ2luZyIpfSkpKTtjb25zdCBpPVptKCkuZXh0ZW50KFtbLTgsMF0sWzgsdGhpcy5fc3ZnUHJvcHMuaGVpZ2h0KzFdXSkub24oInN0YXJ0IiwoKCk9Pnt5S3QodXUpJiYodC5zZXRBdHRyaWJ1dGUoImlzLWJydXNoaW5nIiwiIiksdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uQnJ1c2hDaGFuZ2VkKHRoaXMuY29sSW5kZXgoKSx1dS5zZWxlY3Rpb24pKX0pKS5vbigiYnJ1c2giLCgoKT0+e3lLdCh1dSkmJnRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCksdXUuc2VsZWN0aW9uKX0pKS5vbigiZW5kIiwoKCk9Pnt5S3QodXUpJiYodGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uQnJ1c2hDaGFuZ2VkKHRoaXMuY29sSW5kZXgoKSx1dS5zZWxlY3Rpb24pLHQucmVtb3ZlQXR0cmlidXRlKCJpcy1icnVzaGluZyIpKX0pKSxyPVN1KHQpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJydXNoIiwhMCk7ci5jYWxsKGkpLGkubW92ZShyLHRoaXMuYnJ1c2hTZWxlY3Rpb24oKSl9c2V0RGlzcGxheWVkKHQpe3RoaXMuX2lzRGlzcGxheWVkPXR9X2J1aWxkQnJ1c2hGaWx0ZXIodCxlLG4pe2lmKG51bGw9PT10KXJldHVybiBuZXcgcEt0O2lmKG51bGw9PT1lKXJldHVybiBjb25zb2xlLmVycm9yKCJTY2FsZSB0eXBlIGlzIG51bGwsIGJ1dCBicnVzaFNlbGVjdGlvbiBpc24ndDogIix0KSxuZXcgcEt0O3N3aXRjaChlKXtjYXNlIGhLdC5MSU5FQVI6Y2FzZSBoS3QuTE9HOntjb25zdFtlLGldPShmdW5jdGlvbiByKHQsZSxuKXtyZXR1cm5bdC5pbnZlcnQoZSksdC5pbnZlcnQobildLnNvcnQoKCh0LGUpPT50LWUpKX0pKG4sdFswXSx0WzFdKTtyZXR1cm4gbmV3IGZLdChlLGksITEsITEpfWNhc2UgaEt0LlFVQU5USUxFOntjb25zdFtlLGldPShmdW5jdGlvbiByKHQsZSxuKXtjb25zdCBpPXQucmFuZ2UoKSxyPWkuZmlsdGVyKCh0PT5lPD10JiZ0PD1uKSkubWFwKChlPT57Y29uc3Qgbj10LmludmVydEV4dGVudChlKTtyZXR1cm4gZT09PWlbaS5sZW5ndGgtMV0/W25bMF0sblsxXSsxXTpufSkpO3JldHVybiAwPT1yLmxlbmd0aD9bMCwwXTpMbChxbChyKSl9KShuLHRbMF0sdFsxXSk7cmV0dXJuIG5ldyBmS3QoZSxpLCExLCEwKX1jYXNlIGhLdC5OT05fTlVNRVJJQzpyZXR1cm4gbmV3IG1LdCgoZnVuY3Rpb24gZSh0LG4saSl7cmV0dXJuIHQuZG9tYWluKCkuZmlsdGVyKChlPT57Y29uc3Qgcj10KGUpO3JldHVybiBuPD1yJiZyPD1pfSkpfSkobix0WzBdLHRbMV0pKX1yZXR1cm4gY29uc29sZS5lcnJvcigiVW5rbm93biBzY2FsZSB0eXBlOiAiLGUpLG5ldyBwS3R9fWNsYXNzIF9LdHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5fc3ZnUHJvcHM9dCx0aGlzLl9zY2hlbWE9ZSx0aGlzLl9heGVzPXRoaXMuX2NyZWF0ZUF4ZXMobiksdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnM9QU0oKS5yYW5nZShbMSx0aGlzLl9zdmdQcm9wcy53aWR0aC0xXSkucGFkZGluZyguNSksdGhpcy5fZHJhZ2dlZEF4aXM9bnVsbCx0aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiZy5heGlzLXBhcmVudCIpLnJlbW92ZSgpLHRoaXMuX3BhcmVudHNTZWw9dGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoIi5heGlzLXBhcmVudCIpfXVwZGF0ZUF4ZXModCxlKXtjb25zb2xlLmFzc2VydCghdGhpcy5pc0F4aXNEcmFnZ2luZygpKTtjb25zdCBuPW5ldyBTZXQ7dC5jb2x1bW5zLmZvckVhY2goKHQ9Pntjb25zdCBpPXQuYWJzb2x1dGVJbmRleDtsZXQgcj10aGlzLl9heGVzW2ldO3Iuc2V0RGlzcGxheWVkKCEwKTtjb25zdCBvPWUubWFwKCh0PT5QWXQodGhpcy5fc2NoZW1hLHQsaSkpKTtyLnNldERvbWFpbkFuZFNjYWxlKG8sdC5zY2FsZSksbi5hZGQoaSl9KSksdGhpcy5fYXhlcy5mb3JFYWNoKCh0PT57bi5oYXModC5jb2xJbmRleCgpKXx8dC5zZXREaXNwbGF5ZWQoITEpfSkpLHRoaXMuX3VwZGF0ZVN0YXRpb25hcnlBeGVzUG9zaXRpb25zKG4pLHRoaXMuX3BhcmVudHNTZWw9dGhpcy5fcGFyZW50c1NlbC5kYXRhKEFycmF5LmZyb20obiksKHQ9PnQpKSx0aGlzLl9wYXJlbnRzU2VsLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3BhcmVudHNTZWwuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzLXBhcmVudCIsITApLm1lcmdlKHRoaXMuX3BhcmVudHNTZWwpO2NvbnN0IGk9dGhpczt0aGlzLl9wYXJlbnRzU2VsLmNhbGwoKHQ9PnRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0KSkpLmVhY2goKGZ1bmN0aW9uKHQpe2kuX2F4ZXNbdF0udXBkYXRlRE9NKHRoaXMpfSkpfW1hcFZpc2libGVBeGVzKHQpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5tYXAoKGU9PnQodGhpcy5nZXRBeGlzUG9zaXRpb24oZSksdGhpcy5fYXhlc1tlXSkpKX1hbGxWaXNpYmxlQXhlc1NhdGlzZnkodCl7cmV0dXJuIHRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpLmV2ZXJ5KChlPT50KHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKGUpLHRoaXMuX2F4ZXNbZV0pKSl9Z2V0QXhpc0ZvckNvbEluZGV4KHQpe3JldHVybiB0aGlzLl9heGVzW3RdfWRyYWdTdGFydCh0KXtjb25zb2xlLmFzc2VydCghdGhpcy5pc0F4aXNEcmFnZ2luZygpKSxjb25zb2xlLmFzc2VydCh0aGlzLl9heGVzW3RdLmlzRGlzcGxheWVkKCkpLHRoaXMuX2RyYWdnZWRBeGlzPXRoaXMuX2F4ZXNbdF0sdGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbj10aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucyh0KX1kcmFnKHQpe3Q9TWF0aC5taW4oTWF0aC5tYXgodCwwKSx0aGlzLl9zdmdQcm9wcy53aWR0aCksdGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbj10O2xldCBlPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpO2Uuc29ydCgoKHQsZSk9PnRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHQpLXRoaXMuZ2V0QXhpc1Bvc2l0aW9uKGUpKSksdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKGUpLHRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0aGlzLl9wYXJlbnRzU2VsKX1kcmFnRW5kKHQpe2NvbnNvbGUuYXNzZXJ0KHRoaXMuaXNBeGlzRHJhZ2dpbmcoKSksdGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbj1udWxsLHRoaXMuX2RyYWdnZWRBeGlzPW51bGwsdGhpcy5fdXBkYXRlQXhlc1Bvc2l0aW9uc0luRE9NKHRoaXMuX3BhcmVudHNTZWwudHJhbnNpdGlvbigpLmR1cmF0aW9uKHQpKX1pc0F4aXNEcmFnZ2luZygpe3JldHVybiBudWxsIT09dGhpcy5fZHJhZ2dlZEF4aXN9Z2V0QXhpc1Bvc2l0aW9uKHQpe3JldHVybiBudWxsIT09dGhpcy5fZHJhZ2dlZEF4aXMmJnRoaXMuX2RyYWdnZWRBeGlzLmNvbEluZGV4KCk9PT10P3RoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb246dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnModCl9X3VwZGF0ZVN0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpe2NvbnN0IGU9dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCkuZmlsdGVyKChlPT50LmhhcyhlKSkpLG49QXJyYXkuZnJvbShuZXcgU2V0KFsuLi5lLC4uLkFycmF5LmZyb20odCldKSk7dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKG4pfV91cGRhdGVBeGVzUG9zaXRpb25zSW5ET00odCl7dC5hdHRyKCJ0cmFuc2Zvcm0iLCh0PT5XWXQodGhpcy5nZXRBeGlzUG9zaXRpb24odCkpKSl9X2NyZWF0ZUF4ZXModCl7cmV0dXJuIHpsKFRZdCh0aGlzLl9zY2hlbWEpKS5tYXAoKGU9Pm5ldyBnS3QodGhpcy5fc3ZnUHJvcHMsdGhpcy5fc2NoZW1hLHQsZSkpKX19ZnVuY3Rpb24geUt0KHQpe3JldHVybiBudWxsIT09dC5zb3VyY2VFdmVudH0hKGZ1bmN0aW9uKHQpe3RbdC5GT1JFR1JPVU5EPTBdPSJGT1JFR1JPVU5EIix0W3QuQkFDS0dST1VORD0xXT0iQkFDS0dST1VORCJ9KShkS3R8fChkS3Q9e30pKTtjbGFzcyB2S3R7Y29uc3RydWN0b3IodCl7dm9pZCAwPT09dCYmKHQ9c2gobnVsbCkpLGNvbnNvbGUuYXNzZXJ0KHQuc2l6ZSgpPD0xKSx0aGlzLl9zZXNzaW9uR3JvdXBTZWw9dH1zZXNzaW9uR3JvdXAoKXtyZXR1cm4gMT09PXRoaXMuX3Nlc3Npb25Hcm91cFNlbC5zaXplKCk/dGhpcy5fc2Vzc2lvbkdyb3VwU2VsLmRhdHVtKCk6bnVsbH1pc051bGwoKXtyZXR1cm4gbnVsbD09PXRoaXMuc2Vzc2lvbkdyb3VwKCl9c2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX3Nlc3Npb25Hcm91cFNlbH1lcXVhbHNUbyh0KXtyZXR1cm4gdGhpcy5pc051bGwoKT90LmlzTnVsbCgpOiF0LmlzTnVsbCgpJiZ0LnNlc3Npb25Hcm91cCgpLm5hbWU9PXRoaXMuc2Vzc2lvbkdyb3VwKCkubmFtZX19Y2xhc3MgYkt0e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1lLHRoaXMuX2F4ZXNDb2xsZWN0aW9uPW4sdGhpcy5fc2Vzc2lvbkdyb3Vwcz1bXSx0aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiZy5iYWNrZ3JvdW5kIikucmVtb3ZlKCksdGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuZm9yZWdyb3VuZCIpLnJlbW92ZSgpLHRoaXMuX2JnUGF0aHNTZWw9dGhpcy5fc3ZnUHJvcHMuc3ZnRy5hcHBlbmQoImciKS5jbGFzc2VkKCJiYWNrZ3JvdW5kIiwhMCkuc2VsZWN0QWxsKCJwYXRoIiksdGhpcy5fZmdQYXRoc1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLmFwcGVuZCgiZyIpLmNsYXNzZWQoImZvcmVncm91bmQiLCEwKS5zZWxlY3RBbGwoInBhdGgiKSx0aGlzLl91cGRhdGVWaXNpYmxlRmdQYXRoc1NlbCgpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZT1uZXcgdkt0LHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPW5ldyB2S3QsdGhpcy5fZDNsaW5lPXVMKCkuY3VydmUoc0wpfWdldFNlc3Npb25Hcm91cEhhbmRsZSh0KXtyZXR1cm4gbnVsbD09dD9uZXcgdkt0Om5ldyB2S3QodGhpcy5fZmdQYXRoc1NlbC5maWx0ZXIoKGU9PmUubmFtZT09PXQubmFtZSkpKX1oaWRlQmFja2dyb3VuZExpbmVzKCl7dGhpcy5fYmdQYXRoc1NlbC5hdHRyKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9c2hvd0JhY2tncm91bmRMaW5lcygpe3RoaXMuX2JnUGF0aHNTZWwuYXR0cigidmlzaWJpbGl0eSIsbnVsbCl9cGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCl7cmV0dXJuIHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZX1zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpe3JldHVybiB0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZX1yZWNvbXB1dGVDb250cm9sUG9pbnRzKHQsZT0wKXsodD09PWRLdC5GT1JFR1JPVU5EP3RoaXMuX2ZnUGF0aHNTZWw6dGhpcy5fYmdQYXRoc1NlbCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUpLmF0dHIoImQiLCh0PT50aGlzLl9wYXRoREF0dHJpYnV0ZSh0KSkpLHQ9PT1kS3QuRk9SRUdST1VORCYmd2luZG93LnNldFRpbWVvdXQoKCgpPT57Y29uc3QgdD10aGlzO3RoaXMuX2ZnUGF0aHNTZWwuZWFjaCgoZnVuY3Rpb24oZSl7dC5fc2V0Q29udHJvbFBvaW50c1Byb3BlcnR5KHRoaXMsZSl9KSl9KSl9cmVjb21wdXRlRm9yZWdyb3VuZExpbmVzVmlzaWJpbGl0eSgpe3RoaXMuX2ZnUGF0aHNTZWwuY2xhc3NlZCgiaW52aXNpYmxlLXBhdGgiLCh0PT4hdGhpcy5fYXhlc0NvbGxlY3Rpb24uYWxsVmlzaWJsZUF4ZXNTYXRpc2Z5KCgoZSxuKT0+bi5icnVzaEZpbHRlcigpLmlzUGFzc2luZyhQWXQodGhpcy5fc2NoZW1hLHQsbi5jb2xJbmRleCgpKSkpKSkpLHRoaXMuX3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCl9c2V0Rm9yZWdyb3VuZExpbmVzQ29sb3IodCxlLG4pe2NvbnN0IGk9dGhpcy5fY3JlYXRlTGluZUNvbG9yRnVuY3Rpb24odCxlLG4pO3RoaXMuX2ZnUGF0aHNTZWwuYXR0cigic3Ryb2tlIixpKX1yZWRyYXcodCxlLG4saSl7Y29uc3Qgcj10aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2Vzc2lvbkdyb3VwKCksbz10aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZXNzaW9uR3JvdXAoKTt0aGlzLl9zZXNzaW9uR3JvdXBzPXQsdGhpcy5fZmdQYXRoc1NlbD10aGlzLl9yZWNvbXB1dGVQYXRoU2VsZWN0aW9uKHRoaXMuX2ZnUGF0aHNTZWwpLHRoaXMuX2JnUGF0aHNTZWw9dGhpcy5fcmVjb21wdXRlUGF0aFNlbGVjdGlvbih0aGlzLl9iZ1BhdGhzU2VsKSx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGU9dGhpcy5nZXRTZXNzaW9uR3JvdXBIYW5kbGUociksdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGU9dGhpcy5nZXRTZXNzaW9uR3JvdXBIYW5kbGUobyksdGhpcy5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGRLdC5GT1JFR1JPVU5EKSx0aGlzLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoZEt0LkJBQ0tHUk9VTkQpLHRoaXMucmVjb21wdXRlRm9yZWdyb3VuZExpbmVzVmlzaWJpbGl0eSgpLHRoaXMuc2V0Rm9yZWdyb3VuZExpbmVzQ29sb3IoZSxuLGkpfXVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cCh0KXt0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2VsZWN0aW9uKCkuY2xhc3NlZCgicGVha2VkLXBhdGgiLCExKSx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGU9dCx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2VsZWN0aW9uKCkuY2xhc3NlZCgicGVha2VkLXBhdGgiLCEwKX1jbGVhclBlYWtlZFNlc3Npb25Hcm91cCgpe3RoaXMudXBkYXRlUGVha2VkU2Vzc2lvbkdyb3VwKG5ldyB2S3QpfXVwZGF0ZVNlbGVjdGVkU2Vzc2lvbkdyb3VwKHQpe3RoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlbGVjdGlvbigpLmNsYXNzZWQoInNlbGVjdGVkLXBhdGgiLCExKSx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZT10LHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlbGVjdGlvbigpLmNsYXNzZWQoInNlbGVjdGVkLXBhdGgiLCEwKX1maW5kQ2xvc2VzdFNlc3Npb25Hcm91cCh0LGUpe2NvbnN0IG49dGhpcy5fYXhlc0NvbGxlY3Rpb24ubWFwVmlzaWJsZUF4ZXMoKCh0LGUpPT50KSksaT0oZnVuY3Rpb24gcih0LGUsbixpKXtpZihlLmxlbmd0aDwyKXJldHVybiBjb25zb2xlLmVycm9yKCJMZXNzIHRoYW4gdHdvIGF4ZXMgaW4gcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdC4iKSxudWxsO2NvbnN0IHI9blswXSxvPW5bMV07aWYocjw9ZVswXXx8cj49ZVtlLmxlbmd0aC0xXSlyZXR1cm4gbnVsbDtjb25zdCBhPVNlLmV4cG9ydHMuc29ydGVkSW5kZXgoZSxyKTtjb25zb2xlLmFzc2VydChhPjApLGNvbnNvbGUuYXNzZXJ0KGE8ZS5sZW5ndGgpO2NvbnN0IHM9YS0xO2xldCBsPW51bGwsYz1udWxsO3JldHVybiB0LmZvckVhY2goKHQ9Pntjb25zdCBlPShmdW5jdGlvbiBuKHQsZSxpLGEpe2NvbnN0IHM9dC1pLGw9ZS1hLGM9ci1pLHU9by1hLGg9KHMqYytsKnUpLyhzKnMrbCpsKTtyZXR1cm4gaDw9MD9VWXQoYyx1KTpoPj0xP1VZdCh0LXIsZS1vKTpVWXQoYy1oKnMsdS1oKmwpfSkodC5jb250cm9sUG9pbnRzW3NdWzBdLHQuY29udHJvbFBvaW50c1tzXVsxXSx0LmNvbnRyb2xQb2ludHNbYV1bMF0sdC5jb250cm9sUG9pbnRzW2FdWzFdKTtlPml8fChudWxsPT09bHx8ZTxsKSYmKGw9ZSxjPXQpfSkpLGN9KSh0aGlzLl92aXNpYmxlRmdQYXRoc1NlbC5ub2RlcygpLG4sW3QsZV0sMTAwKTtyZXR1cm4gbnVsbD09PWk/bmV3IHZLdDpuZXcgdkt0KFN1KGkpKX1fY3JlYXRlTGluZUNvbG9yRnVuY3Rpb24odCxlLG4pe2lmKG51bGw9PT10KXJldHVybigpPT4icmVkIjtjb25zdCBpPVZNKCkuZG9tYWluKE5ZdCh0aGlzLl9zY2hlbWEsdGhpcy5fc2Vzc2lvbkdyb3Vwcyx0KSkucmFuZ2UoW2Usbl0pLmludGVycG9sYXRlKGNwKTtyZXR1cm4gZT0+aShQWXQodGhpcy5fc2NoZW1hLGUsdCkpfV9yZWNvbXB1dGVQYXRoU2VsZWN0aW9uKHQpe3JldHVybih0PXQuZGF0YSh0aGlzLl9zZXNzaW9uR3JvdXBzLCh0PT50Lm5hbWUpKSkuZXhpdCgpLnJlbW92ZSgpLHQuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5tZXJnZSh0KX1fc2V0Q29udHJvbFBvaW50c1Byb3BlcnR5KHQsZSl7dC5jb250cm9sUG9pbnRzPXRoaXMuX2NvbXB1dGVDb250cm9sUG9pbnRzKGUpfV9jb21wdXRlQ29udHJvbFBvaW50cyh0KXtyZXR1cm4gdGhpcy5fYXhlc0NvbGxlY3Rpb24ubWFwVmlzaWJsZUF4ZXMoKChlLG4pPT5bZSxuLnlTY2FsZSgpKFBZdCh0aGlzLl9zY2hlbWEsdCxuLmNvbEluZGV4KCkpKV0pKX1fcGF0aERBdHRyaWJ1dGUodCl7cmV0dXJuIHRoaXMuX2QzbGluZSh0aGlzLl9jb21wdXRlQ29udHJvbFBvaW50cyh0KSl9X3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCl7dGhpcy5fdmlzaWJsZUZnUGF0aHNTZWw9dGhpcy5fZmdQYXRoc1NlbC5maWx0ZXIoIjpub3QoLmludmlzaWJsZS1wYXRoKSIpfX1jbGFzcyB4S3R7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN2Zz1TdSh0KTtjb25zdCBuPTEwMCplKzEwKzEwO3RoaXMuc3ZnLmF0dHIoInZpZXdCb3giLGAwIDAgJHtufSAyNDBgKSx0aGlzLnN2Zy5hdHRyKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQiKSx0aGlzLnN2Zy5zdHlsZSgibWluLXdpZHRoIixuKyJweCIpLHRoaXMuc3ZnLnN0eWxlKCJtaW4taGVpZ2h0IiwiMjQwcHgiKSx0aGlzLndpZHRoPW4tMTAtMTAsdGhpcy5oZWlnaHQ9MjAwLHRoaXMuc3ZnRz10aGlzLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLFdZdCgxMCwzMCkpfX1jbGFzcyB3S3R7Y29uc3RydWN0b3IodCxlLG4saSl7dGhpcy5fc3ZnUHJvcHM9dCx0aGlzLl9zY2hlbWE9ZSx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0I9bix0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWRDQj1pLHRoaXMuX2F4ZXNDb2xsZWN0aW9uPW5ldyBfS3QodCxlLHRoaXMpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbj1uZXcgYkt0KHQsZSx0aGlzLl9heGVzQ29sbGVjdGlvbiksdGhpcy5fc3ZnUHJvcHMuc3ZnLm9uKCJjbGljayIsKCgpPT50aGlzLm9uQ2xpY2soKSkpLm9uKCJtb3VzZW1vdmUgbW91c2VlbnRlciIsKCgpPT57Y29uc3RbdCxlXT1haCh0aGlzLl9zdmdQcm9wcy5zdmdHLm5vZGUoKSk7dGhpcy5vbk1vdXNlTW92ZWQodCxlKX0pKS5vbigibW91c2VsZWF2ZSIsKCgpPT50aGlzLm9uTW91c2VMZWF2ZSgpKSl9b25EcmFnU3RhcnQodCl7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZHJhZ1N0YXJ0KHQpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5oaWRlQmFja2dyb3VuZExpbmVzKCl9b25EcmFnKHQpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWcodCksdGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoZEt0LkZPUkVHUk9VTkQpfW9uRHJhZ0VuZCgpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWdFbmQoNTAwKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhkS3QuRk9SRUdST1VORCw1MDApLHdpbmRvdy5zZXRUaW1lb3V0KCgoKT0+e3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGRLdC5CQUNLR1JPVU5EKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2hvd0JhY2tncm91bmRMaW5lcygpfSksNTAwKX1vbkJydXNoQ2hhbmdlZCh0LGUpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmdldEF4aXNGb3JDb2xJbmRleCh0KS5zZXRCcnVzaFNlbGVjdGlvbihlKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlRm9yZWdyb3VuZExpbmVzVmlzaWJpbGl0eSgpfW9uTW91c2VNb3ZlZCh0LGUpe3RoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVQZWFrZWRTZXNzaW9uR3JvdXAodGhpcy5fbGluZXNDb2xsZWN0aW9uLmZpbmRDbG9zZXN0U2Vzc2lvbkdyb3VwKHQsZSkpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQih0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfW9uTW91c2VMZWF2ZSgpe3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5pc051bGwoKXx8KHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5jbGVhclBlYWtlZFNlc3Npb25Hcm91cCgpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQihudWxsKSl9b25DbGljaygpe3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKT09PXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpP3RoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cChuZXcgdkt0KTp0aGlzLl9saW5lc0NvbGxlY3Rpb24udXBkYXRlU2VsZWN0ZWRTZXNzaW9uR3JvdXAodGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpKSx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWRDQih0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSl9b25PcHRpb25zT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCh0LGUpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLnVwZGF0ZUF4ZXModCxlKTtjb25zdCBuPXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSxpPXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpO3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWRyYXcoZSx2b2lkIDAhPT10LmNvbG9yQnlDb2x1bW5JbmRleD90LmNvbHVtbnNbdC5jb2xvckJ5Q29sdW1uSW5kZXhdLmFic29sdXRlSW5kZXg6bnVsbCx0Lm1pbkNvbG9yLHQubWF4Q29sb3IpLG4uZXF1YWxzVG8odGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpKXx8dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSksaS5lcXVhbHNUbyh0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSl8fHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKX1zY2hlbWEoKXtyZXR1cm4gdGhpcy5fc2NoZW1hfX1sZXQgU0t0PWNsYXNzIGV4dGVuZHMoZXIoaWwoeWUpKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXA9bnVsbCx0aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXA9bnVsbCx0aGlzLnJlZHJhd0NvdW50PTB9X29wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkKCl7dmFyIHQ7aWYoIXRoaXMub3B0aW9ucylyZXR1cm47Y29uc3R7Y29uZmlndXJhdGlvbjplfT1udWxsIT09KHQ9dGhpcy5fcHJldk9wdGlvbnMpJiZ2b2lkIDAhPT10P3Q6e30se2NvbmZpZ3VyYXRpb246bn09dGhpcy5vcHRpb25zO2lmKHZvaWQgMD09PXRoaXMuX2ludGVyYWN0aW9uTWFuYWdlcnx8IVNlLmV4cG9ydHMuaXNFcXVhbChlLnNjaGVtYSxuLnNjaGVtYSl8fCFTZS5leHBvcnRzLmlzRXF1YWwoZS5jb2x1bW5zVmlzaWJpbGl0eSxuLmNvbHVtbnNWaXNpYmlsaXR5KSl7U3UodGhpcy4kLnN2Zykuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7Y29uc3QgdD1uZXcgeEt0KHRoaXMuJC5zdmcsbi5jb2x1bW5zVmlzaWJpbGl0eS5maWx0ZXIoQm9vbGVhbikubGVuZ3RoKTt0aGlzLnNjb3BlU3VidHJlZSh0aGlzLiQuc3ZnLCEwKSx0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9bmV3IHdLdCh0LG4uc2NoZW1hLCh0PT50aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXBDaGFuZ2VkKHQpKSwodD0+dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWQodCkpKX10aGlzLl9jb21wdXRlVmFsaWRTZXNzaW9uR3JvdXBzKCksdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uT3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQodGhpcy5vcHRpb25zLHRoaXMuX3ZhbGlkU2Vzc2lvbkdyb3VwcyksdGhpcy5yZWRyYXdDb3VudCsrLHRoaXMuX3ByZXZPcHRpb25zPXRoaXMub3B0aW9uc31jbG9zZXN0U2Vzc2lvbkdyb3VwQ2hhbmdlZCh0KXt0aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXA9dH1zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWQodCl7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD10fV9jb21wdXRlVmFsaWRTZXNzaW9uR3JvdXBzKCl7Y29uc3QgdD1YWXQ7aWYodm9pZCAwPT09dGhpcy5zZXNzaW9uR3JvdXBzKXJldHVybiB2b2lkKHRoaXMuX3ZhbGlkU2Vzc2lvbkdyb3Vwcz12b2lkIDApO2NvbnN0IGU9dGhpcy5vcHRpb25zLmNvbmZpZ3VyYXRpb24uc2NoZW1hO3RoaXMuX3ZhbGlkU2Vzc2lvbkdyb3Vwcz10aGlzLnNlc3Npb25Hcm91cHMuZmlsdGVyKChuPT57Zm9yKGxldCBpPTA7aTx0Lm51bUNvbHVtbnMoZSk7KytpKWlmKHRoaXMub3B0aW9ucy5jb25maWd1cmF0aW9uLmNvbHVtbnNWaXNpYmlsaXR5W2ldJiZ2b2lkIDA9PT10LmNvbHVtblZhbHVlQnlJbmRleChlLG4saSkpcmV0dXJuITE7cmV0dXJuITB9KSl9fTtTS3QudGVtcGxhdGU9X2VgCiAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICA8c3ZnIGlkPSJzdmciPjwvc3ZnPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAtLXRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QtYXhpcy1zaGFkb3c6IDAgMXB4IDAgI2ZmZiwKICAgICAgICAgIDFweCAwIDAgI2ZmZiwgMCAtMXB4IDAgI2ZmZiwgLTFweCAwIDAgI2ZmZjsKICAgICAgfQogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgLS10Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90LWF4aXMtc2hhZG93OiAwIDFweCAwICMwMDAsCiAgICAgICAgICAxcHggMCAwICMwMDAsIDAgLTFweCAwICMwMDAsIC0xcHggMCAwICMwMDA7CiAgICAgIH0KICAgICAgc3ZnIHsKICAgICAgICBmb250OiAxMHB4IHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5iYWNrZ3JvdW5kIHBhdGggewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjZGRkOwogICAgICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICAgICAgfQoKICAgICAgLmZvcmVncm91bmQgcGF0aCB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC43OwogICAgICAgIHN0cm9rZS13aWR0aDogMTsKICAgICAgfQoKICAgICAgLyogV2lsbCBiZSBzZXQgb24gZm9yZWdyb3VuZCBwYXRocyB0aGF0IGFyZSBub3QgImNvbnRhaW5lZCIgaW4gdGhlIGN1cnJlbnQKICAgICAgICAgYXhlcyBicnVzaGVzLiBJZiBubyBicnVzaGVzIGFyZSBzZXQsIG5vIHBhdGggd2lsbCBoYXZlIHRoaXMgY2xhc3MuICovCiAgICAgIC5mb3JlZ3JvdW5kIC5pbnZpc2libGUtcGF0aCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogU3R5bGUgZm9yIHRoZSBwYXRoIGNsb3Nlc3QgdG8gdGhlIG1vdXNlIHBvaW50ZXIgKHR5cGljYWxseSB3aWxsIGJlY29tZQogICAgICB0aGUgc2VsZWN0ZWQgcGF0aCB3aGVuIHRoZSB1c2VyIGNsaWNrcykuICovCiAgICAgIC5mb3JlZ3JvdW5kIC5wZWFrZWQtcGF0aCB7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgICB9CgogICAgICAvKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIHBhdGggY2xhc3MuIFdlIHVzZSAhaW1wb3J0YW50IHRvIG92ZXJyaWRlIHRoZQogICAgICAgICBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIGNvbG9yIG9mIGEgcGF0aC4gKi8KICAgICAgLmZvcmVncm91bmQgLnNlbGVjdGVkLXBhdGggewogICAgICAgIHN0cm9rZS13aWR0aDogMyAhaW1wb3J0YW50OwogICAgICAgIHN0cm9rZTogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAjY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuYXhpcyB0ZXh0IHsKICAgICAgICB0ZXh0LXNoYWRvdzogdmFyKC0tdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC1heGlzLXNoYWRvdyk7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICAgIGN1cnNvcjogbW92ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxTS3QucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFNLdC5wcm90b3R5cGUsIm9wdGlvbnMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFNLdC5wcm90b3R5cGUsInNlbGVjdGVkU2Vzc2lvbkdyb3VwIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxTS3QucHJvdG90eXBlLCJjbG9zZXN0U2Vzc2lvbkdyb3VwIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLFNLdC5wcm90b3R5cGUsInJlZHJhd0NvdW50Iix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxTS3QucHJvdG90eXBlLCJfdmFsaWRTZXNzaW9uR3JvdXBzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFNLdC5wcm90b3R5cGUsIl9pbnRlcmFjdGlvbk1hbmFnZXIiLHZvaWQgMCksdChbYSgib3B0aW9ucy4qIiwic2Vzc2lvbkdyb3Vwcy4qIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxTS3QucHJvdG90eXBlLCJfb3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQiLG51bGwpLFNLdD10KFtpKCJ0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90IildLFNLdCk7bGV0IE1LdD1jbGFzcyBleHRlbmRzIHlle19jbG9zZXN0T3JTZWxlY3RlZCh0LGUpe3JldHVybiBudWxsIT09dD90OmV9fTtNS3QudGVtcGxhdGU9X2VgCiAgICA8IS0tIENvbnRyb2xzIGJlaGF2aW9yIG9mIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHBsb3QKICAgICAgICAgb3V0cHV0cyBzZXQgb3B0aW9ucyB0byB0aGUgX29wdGlvbnMgcHJvcGVydHkuCiAgICAgIC0tPgogICAgPGhwYXJhbXMtc3BsaXQtbGF5b3V0IG9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgIDwhLS0gVGhlIHNjYWxlIGFuZCBjb2xvciBjb250cm9scy4gLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scwogICAgICAgIGlkPSJjb250cm9scyIKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICBvcHRpb25zPSJ7e19vcHRpb25zfX0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scz4KICAgICAgPCEtLSBUaGUgYWN0dWFsIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHBsb3QgLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90CiAgICAgICAgaWQ9InBsb3QiCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IgogICAgICAgIGNsb3Nlc3Qtc2Vzc2lvbi1ncm91cD0ie3tfY2xvc2VzdEdyb3VwfX0iCiAgICAgICAgb3B0aW9ucz0iW1tfb3B0aW9uc11dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdD4KICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXMKICAgICAgICBpZD0idmFsdWVzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cD0iW1tfY2xvc2VzdE9yU2VsZWN0ZWQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Nsb3Nlc3RHcm91cCwgX3NlbGVjdGVkR3JvdXApXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzPgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICBpZD0iZGV0YWlscyIKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX3NlbGVjdGVkR3JvdXBdXSIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzPgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KCiAgICA8c3R5bGU+CiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICB9CiAgICAgICN2YWx1ZXMgewogICAgICAgIGhlaWdodDogMTE1cHg7CiAgICAgIH0KICAgICAgI2RldGFpbHMgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLE1LdC5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTUt0LnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTUt0LnByb3RvdHlwZSwiY29uZmlndXJhdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sTUt0LnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKSxNS3Q9dChbaSgidGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtdmlldyIpXSxNS3QpO2xldCBFS3Q9Y2xhc3MgZXh0ZW5kcyhlcih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwPW51bGwsdGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwsdGhpcy5fY29udGFpbmVyPW51bGwsdGhpcy5fc3ZnPW51bGwsdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsdGhpcy5fYnJ1c2hlZENlbGxJbmRleD1udWxsLHRoaXMuX2JydXNoU2VsZWN0aW9uPW51bGx9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX2NvbnRhaW5lcj10aGlzLiQuY29udGFpbmVyLHRoaXMuX3N2Zz1TdSh0aGlzLiQuc3ZnKSx0aGlzLl9yZWRyYXcoKX1fc2Vzc2lvbkdyb3Vwc0NoYW5nZWQoKXtudWxsIT09dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cCYmKHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXA9RFl0KHRoaXMuc2Vzc2lvbkdyb3Vwcyx0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwLm5hbWUpfHxudWxsKSx0aGlzLl9yZWRyYXcoKX1fdmlzaWJsZVNjaGVtYUNoYW5nZWQoKXt0aGlzLl9icnVzaGVkQ2VsbEluZGV4PW51bGwsdGhpcy5fYnJ1c2hTZWxlY3Rpb249bnVsbCx0aGlzLl9yZWRyYXcoKX1fcmVkcmF3KCl7dGhpcy5kZWJvdW5jZSgiX3JlZHJhdyIsKCgpPT57Y29uc3QgdD1YWXQ7dGhpcy53aWR0aD1NYXRoLm1heCgxNTAqdC5udW1WaXNpYmxlQ29sdW1ucyh0aGlzLnZpc2libGVTY2hlbWEpLDEyMDApLHRoaXMuaGVpZ2h0PU1hdGgubWF4KDExMi41KnQubnVtVmlzaWJsZU1ldHJpY3ModGhpcy52aXNpYmxlU2NoZW1hKSw0ODApLHRoaXMuX2NvbnRhaW5lci5zdHlsZS53aWR0aD10aGlzLndpZHRoKyJweCIsdGhpcy5fY29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLmhlaWdodCsicHgiLHRoaXMuX3N2Zy5hdHRyKCJ3aWR0aCIsdGhpcy53aWR0aCkuYXR0cigiaGVpZ2h0Iix0aGlzLmhlaWdodCksdGhpcy5fc3ZnLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpLHRoaXMuX2RyYXcoKX0pLDEwMCl9X2RyYXcoKXtjb25zdCB0PVhZdCxlPXRoaXM7aWYoIXRoaXMuc2Vzc2lvbkdyb3Vwc3x8MD09dGhpcy5zZXNzaW9uR3JvdXBzLmxlbmd0aHx8IXRoaXMudmlzaWJsZVNjaGVtYXx8MD09dGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zLmxlbmd0aClyZXR1cm47Y29uc3Qgbj16bCh0Lm51bVZpc2libGVDb2x1bW5zKGUudmlzaWJsZVNjaGVtYSkpLGk9emwodC5udW1WaXNpYmxlTWV0cmljcyhlLnZpc2libGVTY2hlbWEpKSxyPVRNKCkuZG9tYWluKG4pLnJhbmdlKFs4NSx0aGlzLndpZHRoLTEtNV0pLnBhZGRpbmdJbm5lciguMSksbz1UTSgpLmRvbWFpbihpKS5yYW5nZShbdGhpcy5oZWlnaHQtMS01LTUwLDVdKS5wYWRkaW5nSW5uZXIoLjEpLGE9ci5iYW5kd2lkdGgoKSxzPW8uYmFuZHdpZHRoKCksbD1uLm1hcCgodD0+ZS5fY2VsbFNjYWxlKHQsWzAsYS0xXSkpKSxjPWkubWFwKChuPT5lLl9jZWxsU2NhbGUobit0Lm51bVZpc2libGVIUGFyYW1zKGUudmlzaWJsZVNjaGVtYSksW3MtMSwwXSkpKSx1PXRoaXMuX3N2Zy5zZWxlY3RBbGwoIi54LWF4aXMiKS5kYXRhKG4pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgieC1heGlzIiwhMCkuYXR0cigidHJhbnNmb3JtIiwoZT0+dC50cmFuc2xhdGVTdHIocihlKSwwKSkpO2Z1bmN0aW9uIGgodCl7cmV0dXJuIngtYXhpcy1jbGlwLXBhdGgtIit0fWZ1bmN0aW9uIGQodCl7cmV0dXJuIngtbGFiZWwtY2xpcC1wYXRoLSIrdH11LmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsaCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLTUpLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixhKzEwKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0LTI1KSx1LmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsZCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsZS5oZWlnaHQtMjUpLmF0dHIoIndpZHRoIixhKS5hdHRyKCJoZWlnaHQiLDI1KSx1LmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsKHQ9PiJ1cmwoIyIraCh0KSsiKSIpKS5lYWNoKChmdW5jdGlvbih0KXtTdSh0aGlzKS5jYWxsKGcsb2MobFt0XSkudGlja1NpemUoZS5oZWlnaHQtNTApLGEsNDAsZS5vcHRpb25zLmNvbHVtbnNbdF0uc2NhbGUpfSkpLHUuYXBwZW5kKCJnIikuY2xhc3NlZCgieC1heGlzLWxhYmVsIiwhMCkuYXR0cigiY2xpcC1wYXRoIiwodD0+InVybCgjIitkKHQpKyIpIikpLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsYS8yKS5hdHRyKCJ5IixlLmhlaWdodC0xLTEyLjUpLnRleHQoKG49PnQuc2NoZW1hVmlzaWJsZUNvbHVtbk5hbWUoZS52aXNpYmxlU2NoZW1hLG4pKSkuYXBwZW5kKCJ0aXRsZSIpLnRleHQoKG49PnQuc2NoZW1hVmlzaWJsZUNvbHVtbk5hbWUoZS52aXNpYmxlU2NoZW1hLG4pKSk7Y29uc3QgcD10aGlzLl9zdmcuc2VsZWN0QWxsKCIueS1heGlzIikuZGF0YShpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsKG49PnQudHJhbnNsYXRlU3RyKGUud2lkdGgtMSxvKG4pKSkpO2Z1bmN0aW9uIGYodCl7cmV0dXJuInktYXhpcy1jbGlwLXBhdGgtIit0fWZ1bmN0aW9uIG0odCl7cmV0dXJuInktbGFiZWwtY2xpcC1wYXRoLSIrdH1mdW5jdGlvbiBnKHQsZSxuLGkscil7Y29uc3Qgbz1NYXRoLmZsb29yKG4vaSksYT1lLnNjYWxlKCk7aWYoIlFVQU5USUxFIj09PXIpe2xldCB0PWEucXVhbnRpbGVzKCk7Y29uc3Qgbj1NYXRoLmNlaWwodC5sZW5ndGgvbyk7dD16bCgwLHQubGVuZ3RoLG4pLm1hcCgoZT0+dFtlXSkpLGUudGlja1ZhbHVlcyh0KS50aWNrRm9ybWF0KG15KCItLjJnIikpfSJMSU5FQVIiIT09ciYmIkxPRyIhPT1yfHxlLnRpY2tzKG8pLHQuY2FsbChlKSx0LnNlbGVjdEFsbCgiLmRvbWFpbiIpLnJlbW92ZSgpLHQuc2VsZWN0QWxsKCIudGljayBsaW5lIikuYXR0cigic3Ryb2tlIiwiI2RkZCIpfXAuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixmKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtKGUud2lkdGgtNDAtMSkpLmF0dHIoInkiLC01KS5hdHRyKCJ3aWR0aCIsZS53aWR0aC00MCkuYXR0cigiaGVpZ2h0IixzKzEwKSxwLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsbSkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLShlLndpZHRoLTEpKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsNDApLmF0dHIoImhlaWdodCIscykscC5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLCh0PT4idXJsKCMiK2YodCkrIikiKSkuZWFjaCgoZnVuY3Rpb24obil7U3UodGhpcykuY2FsbChnLGFjKGNbbl0pLnRpY2tTaXplKGUud2lkdGgtODApLHMsMjAsZS5vcHRpb25zLmNvbHVtbnNbbit0Lm51bVZpc2libGVIUGFyYW1zKGUudmlzaWJsZVNjaGVtYSldLnNjYWxlKX0pKSxwLmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcy1sYWJlbCIsITApLmF0dHIoImNsaXAtcGF0aCIsKHQ9PiJ1cmwoIyIrbSh0KSsiKSIpKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLC0oZS53aWR0aC0yMC0xKSkuYXR0cigieSIscy8yKS5hdHRyKCJ0cmFuc2Zvcm0iLHQucm90YXRlU3RyKDkwLC0oZS53aWR0aC0yMC0xKSxzLzIpKS50ZXh0KChuPT50Lm1ldHJpY05hbWUoZS52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zW25dKSkpLmFwcGVuZCgidGl0bGUiKS50ZXh0KChuPT50Lm1ldHJpY05hbWUoZS52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zW25dKSkpO2NvbnN0IF89dGhpcy5fc3ZnLnNlbGVjdEFsbCgiLmNlbGwiKS5kYXRhKFRsKG4saSkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2VsbCIsITApLmF0dHIoInRyYW5zZm9ybSIsKChbZSxuXSk9PnQudHJhbnNsYXRlU3RyKHIoZSksbyhuKSkpKTtfLmFwcGVuZCgiZyIpLmNsYXNzZWQoImZyYW1lIiwhMCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLTUpLmF0dHIoInkiLC01KS5hdHRyKCJ3aWR0aCIsYSsxMCkuYXR0cigiaGVpZ2h0IixzKzEwKS5hdHRyKCJzdHJva2UiLCIjMDAwIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7bGV0IHk9bnVsbDt2b2lkIDAhPT1lLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4JiYoeT1WTSgpLmRvbWFpbih0aGlzLl9jb2xFeHRlbnQodGhpcy5vcHRpb25zLmNvbG9yQnlDb2x1bW5JbmRleCkpLnJhbmdlKFt0aGlzLm9wdGlvbnMubWluQ29sb3IsdGhpcy5vcHRpb25zLm1heENvbG9yXSkuaW50ZXJwb2xhdGUoY3ApKTtjb25zdCB2PXZvaWQgMD09PWUub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXg/KCk9PiJyZWQiOih7c2Vzc2lvbkdyb3VwOnR9KT0+eSh0aGlzLl9jb2xWYWx1ZSh0LGUub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgpKTtmdW5jdGlvbiBiKHQsbil7cmV0dXJuIGxbbl0oZS5fY29sVmFsdWUodCxuKSl9ZnVuY3Rpb24geCh0LG4pe3JldHVybiBjW25dKGUuX21ldHJpY1ZhbHVlKHQsbikpfWNvbnN0W3csUyxNXT0oZnVuY3Rpb24gRSh0LHIpe2NvbnN0IG89dC5zZWxlY3RBbGwoIi5kYXRhLW1hcmtlciIpLmRhdGEoKChbdCxuXSk9PmUuc2Vzc2lvbkdyb3Vwcy5maWx0ZXIoKGk9PnZvaWQgMCE9PWUuX2NvbFZhbHVlKGksdCkmJnZvaWQgMCE9PWUuX21ldHJpY1ZhbHVlKGksbikpKS5tYXAoKGU9Pih7Y29sOnQsbWV0cmljOm4sc2Vzc2lvbkdyb3VwOmUseDpiKGUsdCkseTp4KGUsbiksc2Vzc2lvbkdyb3VwTWFya2VyczpudWxsfSkpKSkpLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5jbGFzc2VkKCJkYXRhLW1hcmtlciIsITApLmF0dHIoImN4IiwoKHt4OnR9KT0+dCkpLmF0dHIoImN5IiwoKHt5OnR9KT0+dCkpLmF0dHIoInIiLDIpLmF0dHIoImZpbGwiLHIpLGE9bmV3IE1hcDtlLnNlc3Npb25Hcm91cHMuZm9yRWFjaCgodD0+e2Euc2V0KHQsW10pfSkpLG8uZWFjaCgoZnVuY3Rpb24odCl7YS5nZXQodC5zZXNzaW9uR3JvdXApLnB1c2godGhpcyl9KSksby5lYWNoKCh0PT57Y29uc3QgZT1hLmdldCh0LnNlc3Npb25Hcm91cCk7dC5zZXNzaW9uR3JvdXBNYXJrZXJzPW5ldyBTZXQoZSl9KSk7Y29uc3Qgcz1uLm1hcCgodD0+aS5tYXAoKGU9Pm8uZmlsdGVyKChuPT5uLmNvbD09dCYmbi5tZXRyaWM9PWUpKSkpKSk7cmV0dXJuW28scyxhXX0pKF8uYXBwZW5kKCJnIiksdiksVD1uLm1hcCgodD0+aS5tYXAoKGU9PihmdW5jdGlvbiBuKHQsZSl7Y29uc3Qgbj1bXTtyZXR1cm4gU1t0XVtlXS5lYWNoKChmdW5jdGlvbigpe24ucHVzaCh0aGlzKX0pKSxOXygpLngoKHQ9PlN1KHQpLmRhdHVtKCkueCkpLnkoKHQ9PlN1KHQpLmRhdHVtKCkueSkpLmFkZEFsbChuKX0pKHQsZSkpKSkpO2xldCBDPW51bGw7TigpJiYoQz1fLmZpbHRlcigodD0+U2UuZXhwb3J0cy5pc0VxdWFsKHQsZS5fYnJ1c2hlZENlbGxJbmRleCkpKSxjb25zb2xlLmFzc2VydCgxPT1DLnNpemUoKSxDKSk7bGV0IEE9bmV3IFNldCh3Lm5vZGVzKCkpO2Z1bmN0aW9uIGsoKXtsZXQgbj1uZXcgU2V0KHcubm9kZXMoKSk7KGZ1bmN0aW9uIGkoKXtyZXR1cm4hTigpfHxlLl9icnVzaFNlbGVjdGlvblswXVswXT09PWUuX2JydXNoU2VsZWN0aW9uWzFdWzBdfHxlLl9icnVzaFNlbGVjdGlvblswXVsxXT09PWUuX2JydXNoU2VsZWN0aW9uWzFdWzFdfSkoKXx8KG49KGZ1bmN0aW9uIHIoZSxuKXtjb25zb2xlLmFzc2VydChudWxsIT09ZSksY29uc29sZS5hc3NlcnQobnVsbCE9PW4pO2NvbnN0W2kscl09ZSxvPW5ldyBTZXQ7cmV0dXJuIHQucXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdChUW2ldW3JdLG5bMF1bMF0sblswXVsxXSxuWzFdWzBdLG5bMV1bMV0sKHQ9PntTdSh0KS5kYXR1bSgpLnNlc3Npb25Hcm91cE1hcmtlcnMuZm9yRWFjaCgodD0+e28uYWRkKHQpfSkpfSkpLG99KShlLl9icnVzaGVkQ2VsbEluZGV4LGUuX2JydXNoU2VsZWN0aW9uKSksc2goQXJyYXkuZnJvbSh0LmZpbHRlclNldChuLCh0PT4hQS5oYXModCkpKSkpLmF0dHIoImZpbGwiLHYpLHNoKEFycmF5LmZyb20odC5maWx0ZXJTZXQoQSwodD0+IW4uaGFzKHQpKSkpKS5hdHRyKCJmaWxsIiwiI2RkZCIpLEE9bn1rKCk7Y29uc3QgTD1KbSgpLmV4dGVudChbWy00LC00XSxbYS0xKzUtMSxzLTErNS0xXV0pLm9uKCJzdGFydCIsKGZ1bmN0aW9uKCl7TigpJiZDLm5vZGUoKSE9dGhpcyYmTC5tb3ZlKEMsbnVsbCksUCh0aGlzKX0pKS5vbigiYnJ1c2giLChmdW5jdGlvbigpe1AodGhpcyl9KSkub24oImVuZCIsKGZ1bmN0aW9uKCl7UCh0aGlzKX0pKTtmdW5jdGlvbiBQKHQpe2NvbnN0IG49S20odCk7IU4oKSYmbnVsbD09PW58fE4oKSYmdD09PUMubm9kZSgpJiZTZS5leHBvcnRzLmlzRXF1YWwobixlLl9icnVzaFNlbGVjdGlvbil8fChlLl9icnVzaFNlbGVjdGlvbj1uLG51bGwhPT1uPyhDPVN1KHQpLGUuX2JydXNoZWRDZWxsSW5kZXg9Qy5kYXR1bSgpKTooQz1udWxsLGUuX2JydXNoZWRDZWxsSW5kZXg9bnVsbCksaygpKX1mdW5jdGlvbiBOKCl7cmV0dXJuIG51bGwhPT1lLl9icnVzaGVkQ2VsbEluZGV4JiZudWxsIT09ZS5fYnJ1c2hTZWxlY3Rpb259Xy5jYWxsKEwpLE4oKSYmTC5tb3ZlKEMsZS5fYnJ1c2hTZWxlY3Rpb24pO2xldCBJPW51bGwsUj1udWxsO251bGwhPT10aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwJiYoUj1zaChNLmdldCh0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwKSkuY2xhc3NlZCgic2VsZWN0ZWQtbWFya2VyIiwhMCkpLF8ub24oImNsaWNrIiwoZnVuY3Rpb24oKXtjb25zdCB0PUk9PT1SP251bGw6STtpZih0PT09UilyZXR1cm47bnVsbCE9PVImJlIuY2xhc3NlZCgic2VsZWN0ZWQtbWFya2VyIiwhMSksUj10LG51bGwhPT1SJiZSLmNsYXNzZWQoInNlbGVjdGVkLW1hcmtlciIsITApO2NvbnN0IG49bnVsbD09PVI/bnVsbDpSLmRhdHVtKCkuc2Vzc2lvbkdyb3VwO2Uuc2VsZWN0ZWRTZXNzaW9uR3JvdXA9bn0pKS5vbigibW91c2Vtb3ZlIG1vdXNlZW50ZXIiLChmdW5jdGlvbihbbixpXSl7Y29uc3RbcixvXT1haCh0aGlzKSxhPShmdW5jdGlvbiBzKGUsbixpLHIsbyl7bGV0IGE9MS8wLHM9bnVsbDtyZXR1cm4gdC5xdWFkVHJlZVZpc2l0UG9pbnRzSW5EaXNrKFRbZV1bbl0saSxyLG8sKCh0LGUpPT57aWYoQS5oYXModCkmJmU8YSl7Y29uc3Qgbj1TdSh0KS5kYXR1bSgpO2E9ZSxzPW4uc2Vzc2lvbkdyb3VwfX0pKSxudWxsPT09cz9udWxsOnNoKE0uZ2V0KHMpKX0pKG4saSxyLG8sMjApO0khPT1hJiYobnVsbCE9PUkmJkkuY2xhc3NlZCgiY2xvc2VzdC1tYXJrZXIiLCExKSxJPWEsbnVsbCE9PUk/KEkuY2xhc3NlZCgiY2xvc2VzdC1tYXJrZXIiLCEwKSxlLmNsb3Nlc3RTZXNzaW9uR3JvdXA9SS5kYXR1bSgpLnNlc3Npb25Hcm91cCk6ZS5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwpfSkpLm9uKCJtb3VzZWxlYXZlIiwoZnVuY3Rpb24oW3Qsbl0pe251bGwhPT1JJiYoSS5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITEpLEk9bnVsbCxlLmNsb3Nlc3RTZXNzaW9uR3JvdXA9bnVsbCl9KSksdGhpcy5fc3ZnLnNlbGVjdEFsbCgiKiIpLmNsYXNzZWQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IiwhMCl9X2NlbGxTY2FsZSh0LGUpe2NvbnN0IG49dGhpcy5fY29sRXh0ZW50KHQpLGk9Vk0oKS5kb21haW4obikucmFuZ2UoZSk7aWYoIkxJTkVBUiI9PT10aGlzLm9wdGlvbnMuY29sdW1uc1t0XS5zY2FsZSlyZXR1cm4gaTtpZigiTE9HIj09PXRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlKXJldHVybiBuWzBdPD0wJiZuWzFdPj0wP2k6S00oKS5kb21haW4obikucmFuZ2UoZSk7aWYoIlFVQU5USUxFIj09PXRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlKXtjb25zdCBuPShlWzFdLWVbMF0pLzE5LGk9emwoMjApLm1hcCgodD0+ZVswXStuKnQpKTtyZXR1cm4gb0UoKS5kb21haW4oU2UuZXhwb3J0cy51bmlxKHRoaXMuc2Vzc2lvbkdyb3Vwcy5tYXAoKGU9PnRoaXMuX2NvbFZhbHVlKGUsdCkpKSkpLnJhbmdlKGkpfWlmKCJOT05fTlVNRVJJQyI9PT10aGlzLm9wdGlvbnMuY29sdW1uc1t0XS5zY2FsZSlyZXR1cm4gQU0oKS5kb21haW4oU2UuZXhwb3J0cy51bmlxKHRoaXMuc2Vzc2lvbkdyb3Vwcy5tYXAoKGU9PnRoaXMuX2NvbFZhbHVlKGUsdCkpKS5zb3J0KCkpKS5yYW5nZShlKS5wYWRkaW5nKC4xKTt0aHJvdyJVbmtub3duIHNjYWxlIGZvciBjb2x1bW46ICIrdCsiLiBvcHRpb25zOiAiK3RoaXMub3B0aW9uc31fY29sVmFsdWUodCxlKXtyZXR1cm4gRll0KHRoaXMudmlzaWJsZVNjaGVtYSx0LGUpfV9tZXRyaWNWYWx1ZSh0LGUpe3JldHVybiBIWXQodGhpcy52aXNpYmxlU2NoZW1hLHQsZSl9X2NvbEV4dGVudCh0KXtyZXR1cm4gell0KHRoaXMudmlzaWJsZVNjaGVtYSx0aGlzLnNlc3Npb25Hcm91cHMsdCl9fTtFS3QudGVtcGxhdGU9X2VgCiAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICA8c3ZnIGlkPSJzdmciPjwvc3ZnPgogICAgPC9kaXY+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgc3ZnIHsKICAgICAgICBmb250OiAxMHB4IHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgLmZyYW1lIHJlY3QgewogICAgICAgIHN0cm9rZTogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAvKiBUaGUgY2xvc2VzdCBkYXRhIHBvaW50IG1hcmtlciB0byB0aGUgbW91c2UgcG9pbnRlci4gV2UgdXNlICFpbXBvcnRhbnQKICAgICAgICAgdG8gb3ZlcnJpZGUgdGhlIGlubGluZSBzdHlsZSB0aGF0IHNldHMgdGhlIHJlZ3VsYXIgc3R5bGUgb2YgYSBtYXJrZXIuCiAgICAgICovCiAgICAgIC5jbG9zZXN0LW1hcmtlciB7CiAgICAgICAgcjogNiAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAvKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGEgcG9pbnQgbWFya2VyLiBXZSB1c2UgIWltcG9ydGFudCB0bwogICAgICAgICBvdmVycmlkZSB0aGUgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBzdHlsZSBvZiBhIG1hcmtlci4gKi8KICAgICAgLnNlbGVjdGVkLW1hcmtlciB7CiAgICAgICAgcjogNiAhaW1wb3J0YW50OwogICAgICAgIGZpbGw6ICMwZjAgIWltcG9ydGFudDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEVLdC5wcm90b3R5cGUsInZpc2libGVTY2hlbWEiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLEVLdC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRUt0LnByb3RvdHlwZSwib3B0aW9ucyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRUt0LnByb3RvdHlwZSwic2VsZWN0ZWRTZXNzaW9uR3JvdXAiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEVLdC5wcm90b3R5cGUsImNsb3Nlc3RTZXNzaW9uR3JvdXAiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsSFRNTEVsZW1lbnQpXSxFS3QucHJvdG90eXBlLCJfY29udGFpbmVyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEVLdC5wcm90b3R5cGUsIl9zdmciLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRUt0LnByb3RvdHlwZSwid2lkdGgiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRUt0LnByb3RvdHlwZSwiaGVpZ2h0Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEVLdC5wcm90b3R5cGUsIl9icnVzaGVkQ2VsbEluZGV4Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEVLdC5wcm90b3R5cGUsIl9icnVzaFNlbGVjdGlvbiIsdm9pZCAwKSx0KFthKCJzZXNzaW9uR3JvdXBzLioiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVLdC5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBzQ2hhbmdlZCIsbnVsbCksdChbYSgidmlzaWJsZVNjaGVtYS4qIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxFS3QucHJvdG90eXBlLCJfdmlzaWJsZVNjaGVtYUNoYW5nZWQiLG51bGwpLHQoW2EoIm9wdGlvbnMuKiIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRUt0LnByb3RvdHlwZSwiX3JlZHJhdyIsbnVsbCksRUt0PXQoW2koInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IildLEVLdCk7bGV0IFRLdD1jbGFzcyBleHRlbmRzIHlle19jbG9zZXN0T3JTZWxlY3RlZCh0LGUpe3JldHVybiBudWxsIT09dD90OmV9fTtUS3QudGVtcGxhdGU9X2VgCiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQgb3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgPCEtLSBDb250cm9scyBiZWhhdmlvciBvZiB0aGUgc2NhdHRlciBwbG90IG1hdHJpeAogICAgICAgICAgICAgb3V0cHV0cyB0aGUgY29uZmlndXJlZCBvcHRpb25zIHRvIHRoZSBfb3B0aW9ucyBwcm9wZXJ0eS4gLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scwogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgaWQ9ImNvbnRyb2xzIgogICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICBvcHRpb25zPSJ7e19vcHRpb25zfX0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scz4KICAgICAgPCEtLSBUaGUgYWN0dWFsIHNjYXR0ZXIgcGxvdCBtYXRyaXggLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtcGxvdAogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgaWQ9InBsb3QiCiAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIHNlbGVjdGVkLXNlc3Npb24tZ3JvdXA9Int7X3NlbGVjdGVkR3JvdXB9fSIKICAgICAgICBjbG9zZXN0LXNlc3Npb24tZ3JvdXA9Int7X2Nsb3Nlc3RHcm91cH19IgogICAgICAgIG9wdGlvbnM9IltbX29wdGlvbnNdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90PgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcwogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgaWQ9InZhbHVlcyIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW19jbG9zZXN0T3JTZWxlY3RlZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Nsb3Nlc3RHcm91cCwgX3NlbGVjdGVkR3JvdXApXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzPgogICAgICA8IS0tIFNob3dzIHNlc3Npb24gZ3JvdXAgZGV0YWlscyBmb3IgdGhlIGNsaWNrZWQgbWFya2VyLiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0iZGV0YWlscyIKICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW19zZWxlY3RlZEdyb3VwXV0iCiAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscz4KICAgIDwvaHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICA8c3R5bGU+CiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICB9CiAgICAgICNjb250cm9scyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgI3Bsb3QgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgICN2YWx1ZXMgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGhlaWdodDogMTE1cHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjZGV0YWlscyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgdmFhZGluLXNwbGl0LWxheW91dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVEt0LnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxUS3QucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxUS3QucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxUS3QucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApLFRLdD10KFtpKCJ0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldyIpXSxUS3QpO2xldCBDS3Q9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fc2VsZWN0ZWRUYWI9MH19O0NLdC50ZW1wbGF0ZT1fZWAKICAgIDxwYXBlci1oZWFkZXItcGFuZWw+CiAgICAgIDxwYXBlci10b29sYmFyIHNsb3Q9ImhlYWRlciIgY2xhc3M9InRhYi1iYXIiPgogICAgICAgIDxwYXBlci10YWJzIHNlbGVjdGVkPSJ7e19zZWxlY3RlZFRhYn19IiBzbG90PSJ0b3AiPgogICAgICAgICAgPCEtLSB2aWV3LWlkIGNhbiBiZSB1c2VkIGJ5IGludGVncmF0aW9uIHRlc3RzIHRvIGxvY2F0ZSBhIHRhYi4KICAgICAgICAgICAgICAgSXQgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSByb290IGVsZW1lbnQgaW1wbGVtZW50aW5nIHRoZSB2aWV3CiAgICAgICAgICAgICAgIHdpdGhvdXQgdGhlICd0Zi1ocGFyYW1zLScgcHJlZml4LiAtLT4KICAgICAgICAgIDxwYXBlci10YWIgdmlldy1pZD0idGFibGUtdmlldyI+IFRBQkxFIFZJRVcgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiIHZpZXctaWQ9InBhcmFsbGVsLWNvb3Jkcy12aWV3Ij4KICAgICAgICAgICAgUEFSQUxMRUwgQ09PUkRJTkFURVMgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiIHZpZXctaWQ9InNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldyI+CiAgICAgICAgICAgIFNDQVRURVIgUExPVCBNQVRSSVggVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLWFuZC1mZWVkYmFjayI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tidWdSZXBvcnRVcmxdXSI+CiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWYkPSJbW2J1Z1JlcG9ydFVybF1dIgogICAgICAgICAgICAgICAgdGFyZ2V0PSJfYmxhbmsiCiAgICAgICAgICAgICAgICByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgICBpZD0iYnVnLXJlcG9ydCIKICAgICAgICAgICAgICAgICAgcmFpc2VkCiAgICAgICAgICAgICAgICAgIHRpdGxlPSJTZW5kIGEgYnVnIHJlcG9ydCBvciBmZWF0dXJlIHJlcXVlc3QiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIEJ1ZyBSZXBvcnQgLyBGZWF0dXJlIFJlcXVlc3QKICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlbHBVcmxdXSI+CiAgICAgICAgICAgICAgPGEgaHJlZiQ9IltbaGVscFVybF1dIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj4KICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICAgICAgICBpY29uPSJoZWxwLW91dGxpbmUiCiAgICAgICAgICAgICAgICAgIHRpdGxlPSJWaWV3IGRvY3VtZW50YXRpb24iCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvcGFwZXItdGFicz4KICAgICAgPC9wYXBlci10b29sYmFyPgogICAgICA8aXJvbi1wYWdlcyBzZWxlY3RlZD0iW1tfc2VsZWN0ZWRUYWJdXSIgY2xhc3M9ImZpdCB0YWItdmlldyI+CiAgICAgICAgPGRpdiBpZD0iMCIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy10YWJsZS12aWV3CiAgICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICAgICAgZW5hYmxlLXNob3ctbWV0cmljcwogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMSIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtdmlldwogICAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMiIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXcKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW2NvbmZpZ3VyYXRpb25dXSIKICAgICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLXBhZ2VzPgogICAgPC9wYXBlci1oZWFkZXItcGFuZWw+CgogICAgPHN0eWxlPgogICAgICAudGFiLXZpZXcgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAudGFiLWJhciB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKAogICAgICAgICAgLS10Yi10b29sYmFyLWJhY2tncm91bmQtY29sb3IsCiAgICAgICAgICB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKQogICAgICAgICk7CiAgICAgIH0KICAgICAgLnRhYiB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIHBhcGVyLXRhYnMgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXItY29sb3I6IHdoaXRlOwogICAgICAgIC0tcGFwZXItdGFicy1jb250ZW50OiB7CiAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGYtaHBhcmFtcy10YWJsZS12aWV3IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLmhlbHAtYW5kLWZlZWRiYWNrIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsgLyogRW5zdXJlIHRoYXQgaWNvbnMgc3RheSBhbGlnbmVkICovCiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQogICAgICAjYnVnLXJlcG9ydCB7CiAgICAgICAgYm9yZGVyOiBzb2xpZCBibGFjazsKICAgICAgICBiYWNrZ3JvdW5kOiByZWQ7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkczsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWF4LXdpZHRoOiAxNTBweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICAgIC5oZWxwLWFuZC1mZWVkYmFjayBhIHsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQ0t0LnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxDS3QucHJvdG90eXBlLCJoZWxwVXJsIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLENLdC5wcm90b3R5cGUsImJ1Z1JlcG9ydFVybCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxDS3QucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxDS3QucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxDS3QucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLENLdC5wcm90b3R5cGUsIl9zZWxlY3RlZFRhYiIsdm9pZCAwKSxDS3Q9dChbaSgidGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lIildLENLdCk7Y2xhc3MgQUt0e2NvbnN0cnVjdG9yKHQsZSxuPSEwKXt0aGlzLl9hcGlVcmw9dCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1lLHRoaXMuX3VzZUh0dHBHZXQ9bn1nZXRFeHBlcmltZW50KHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiZXhwZXJpbWVudCIsdCl9Z2V0RG93bmxvYWRVcmwodCxlLG4pe3JldHVybiB0aGlzLl9hcGlVcmwrIi9kb3dubG9hZF9kYXRhPyIrbmV3IFVSTFNlYXJjaFBhcmFtcyh7Zm9ybWF0OnQsY29sdW1uc1Zpc2liaWxpdHk6SlNPTi5zdHJpbmdpZnkobikscmVxdWVzdDpKU09OLnN0cmluZ2lmeShlKX0pfWxpc3RTZXNzaW9uR3JvdXBzKHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgic2Vzc2lvbl9ncm91cHMiLHQpfWxpc3RNZXRyaWNFdmFscyh0KXtyZXR1cm4gdGhpcy5fc2VuZFJlcXVlc3QoIm1ldHJpY19ldmFscyIsdCl9X3NlbmRSZXF1ZXN0KHQsZSl7aWYodGhpcy5fdXNlSHR0cEdldCl7Y29uc3Qgbj1lbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoZSkpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHRoaXMuX2FwaVVybCsiLyIrdCsiP3JlcXVlc3Q9IituKX1jb25zdCBuPW5ldyBocjtyZXR1cm4gbi53aXRoQ3JlZGVudGlhbHM9ITAsbi5tZXRob2RUeXBlPXVyLlBPU1Qsbi5jb250ZW50VHlwZT0idGV4dC9wbGFpbiIsbi5ib2R5PUpTT04uc3RyaW5naWZ5KGUpLHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3RXaXRoT3B0aW9ucyh0aGlzLl9hcGlVcmwrIi8iK3Qsbil9fWxldCBrS3Q9Y2xhc3MgZXh0ZW5kcyhlcih5ZSkpe3JlbG9hZCgpe3RoaXMuJFsicXVlcnktcGFuZSJdLnJlbG9hZCgpfX07a0t0LnRlbXBsYXRlPV9lYAogICAgPGhwYXJhbXMtc3BsaXQtbGF5b3V0PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzaWRlYmFyIj4KICAgICAgICA8dGYtaHBhcmFtcy1xdWVyeS1wYW5lCiAgICAgICAgICBpZD0icXVlcnktcGFuZSIKICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICBjb25maWd1cmF0aW9uPSJ7e19jb25maWd1cmF0aW9ufX0iCiAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0ie3tfc2Vzc2lvbkdyb3Vwc319IgogICAgICAgICAgZGF0YS1sb2FkZWQtd2l0aC1ub24tZW1wdHktaHBhcmFtcz0ie3tfZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXN9fSIKICAgICAgICAgIGRhdGEtbG9hZGVkLXdpdGgtZW1wdHktaHBhcmFtcz0ie3tfZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXN9fSIKICAgICAgICA+CiAgICAgICAgPC90Zi1ocGFyYW1zLXF1ZXJ5LXBhbmU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXNdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaHBhcmFtcyBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaHBhcmFtcyBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBFdmVudCBmaWxlcyBhcmUgc3RpbGwgYmVpbmcgbG9hZGVkICh0cnkgcmVsb2FkaW5nIHRoaXMgcGFnZSkuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXNdXSI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lCiAgICAgICAgICAgIGlkPSJzZXNzaW9ucy1wYW5lIgogICAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgICAgaGVscC11cmw9IltbaGVscFVybF1dIgogICAgICAgICAgICBidWctcmVwb3J0LXVybD0iW1tidWdSZXBvcnRVcmxdXSIKICAgICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249IltbX2NvbmZpZ3VyYXRpb25dXSIKICAgICAgICAgICAgc2Vzc2lvbi1ncm91cHM9IltbX3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICAgID4KICAgICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgaHBhcmFtcy1zcGxpdC1sYXlvdXQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuc2lkZWJhciB7CiAgICAgICAgd2lkdGg6IDIwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIG1pbi13aWR0aDogMTAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgd2lkdGg6IDgwJTsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItbGluayk7CiAgICAgIH0KCiAgICAgIGE6dmlzaXRlZCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmstdmlzaXRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixBS3QpXSxrS3QucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGtLdC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLGtLdC5wcm90b3R5cGUsImhlbHBVcmwiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sa0t0LnByb3RvdHlwZSwiYnVnUmVwb3J0VXJsIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLGtLdC5wcm90b3R5cGUsIl9jb25maWd1cmF0aW9uIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxrS3QucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3VwcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtLdC5wcm90b3R5cGUsIl9kYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtcyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtLdC5wcm90b3R5cGUsIl9kYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsdm9pZCAwKSxrS3Q9dChbaSgidGYtaHBhcmFtcy1tYWluIildLGtLdCk7Y29uc3QgTEt0PSJ0cnVlIj09PW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJ0ZW5zb3Jib2FyZENvbGFiIik7bGV0IFBLdD1jbGFzcyBleHRlbmRzKGVyKHllKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2JhY2tlbmQ9bmV3IEFLdChfcigpLnBsdWdpblJvdXRlKCJocGFyYW1zIiwiIiksbmV3IGRyLExLdCl9cmVsb2FkKCl7dGhpcy4kWyJocGFyYW1zLW1haW4iXS5yZWxvYWQoKX19O1BLdC50ZW1wbGF0ZT1fZWAKICAgIDwhLS0gVGVuc29yQm9hcmQgZG9lcyBub3Qgc3BlY2lmeSBhbiBleHBlcmltZW50TmFtZS4gQ3VycmVudGx5IGl0IG9ubHkKICAgICAgICAgc3VwcG9ydHMgb25lIGV4cGVyaW1lbnQgcGVyIGludm9jYXRpb24uIC0tPgogICAgPHRmLWhwYXJhbXMtbWFpbgogICAgICBpZD0iaHBhcmFtcy1tYWluIgogICAgICBiYWNrZW5kPSJbW19iYWNrZW5kXV0iCiAgICAgIGV4cGVyaW1lbnQtbmFtZT0iIgogICAgPgogICAgPC90Zi1ocGFyYW1zLW1haW4+CiAgYCx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQS3QucHJvdG90eXBlLCJfYmFja2VuZCIsdm9pZCAwKSxQS3Q9dChbaSgidGYtaHBhcmFtcy1kYXNoYm9hcmQiKV0sUEt0KTtsZXQgTkt0PWNsYXNzIGV4dGVuZHMoZXIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hY3R1YWxTaXplPSExLHRoaXMuYnJpZ2h0bmVzc0FkanVzdG1lbnQ9LjUsdGhpcy5jb250cmFzdFBlcmNlbnRhZ2U9MCx0aGlzLl9tZXRhZGF0YUNhbmNlbGxlcj1uZXcgWFIsdGhpcy5faW1hZ2VDYW5jZWxsZXI9bmV3IFhSLHRoaXMuX3N0ZXBzPVtdLHRoaXMuX2lzSW1hZ2VMb2FkaW5nPSExfWdldCBfcnVuQ29sb3IoKXtyZXR1cm4gR1IodGhpcy5ydW4pfWdldCBfaGFzQXRMZWFzdE9uZVN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjB9Z2V0IF9oYXNNdWx0aXBsZVN0ZXBzKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfY3VycmVudFN0ZXAoKXtyZXR1cm4gdGhpcy5fc3RlcHNbdGhpcy5fc3RlcEluZGV4XXx8bnVsbH1nZXQgX3N0ZXBWYWx1ZSgpe3ZhciB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3Quc3RlcDowfWdldCBfY3VycmVudFdhbGxUaW1lKCl7dmFyIHQ9dGhpcy5fY3VycmVudFN0ZXA7cmV0dXJuIHQ/S1IodC53YWxsX3RpbWUpOiIifWdldCBfbWF4U3RlcEluZGV4KCl7cmV0dXJuIHRoaXMuX3N0ZXBzLmxlbmd0aC0xfWdldCBfc2FtcGxlVGV4dCgpe3JldHVybmAke3RoaXMuc2FtcGxlKzF9YH1nZXQgX2hhc011bHRpcGxlU2FtcGxlcygpe3JldHVybiB0aGlzLm9mU2FtcGxlcz4xfV9nZXRBcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5hY3R1YWxTaXplPyJ0cnVlIjoiZmFsc2UifWF0dGFjaGVkKCl7dGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtpZighdGhpcy5pc0F0dGFjaGVkKXJldHVybjt0aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxBbGwoKTtjb25zdCB0PWlPKF9yKCkucGx1Z2luUm91dGUoImltYWdlcyIsIi9pbWFnZXMiKSx7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6dGhpcy5zYW1wbGV9KSxlPXRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKCh0PT57aWYodC5jYW5jZWxsZWQpcmV0dXJuO2NvbnN0IGU9dC52YWx1ZS5tYXAodGhpcy5fY3JlYXRlU3RlcERhdHVtLmJpbmQodGhpcykpO3RoaXMuc2V0KCJfc3RlcHMiLGUpLHRoaXMuc2V0KCJfc3RlcEluZGV4IixlLmxlbmd0aC0xKX0pKTt0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihlKX1fY3JlYXRlU3RlcERhdHVtKHQpe2xldCBlPV9yKCkucGx1Z2luUm91dGUoImltYWdlcyIsIi9pbmRpdmlkdWFsSW1hZ2UiKTtyZXR1cm4gZT1pTyhlLHt0czp0LndhbGxfdGltZX0pLGUrPSImIit0LnF1ZXJ5LHt3YWxsX3RpbWU6bmV3IERhdGUoMWUzKnQud2FsbF90aW1lKSxzdGVwOnQuc3RlcCx1cmw6ZX19X3VwZGF0ZUltYWdlVXJsKCl7dmFyIHQ9dGhpcy5fY3VycmVudFN0ZXAsZT10aGlzLmJyaWdodG5lc3NBZGp1c3RtZW50LG49dGhpcy5jb250cmFzdFBlcmNlbnRhZ2U7aWYoIXQpcmV0dXJuO2NvbnN0IGk9bmV3IEltYWdlO3RoaXMuX2ltYWdlQ2FuY2VsbGVyLmNhbmNlbEFsbCgpLGkub25sb2FkPWkub25lcnJvcj10aGlzLl9pbWFnZUNhbmNlbGxlci5jYW5jZWxsYWJsZSgodD0+e2lmKHQuY2FuY2VsbGVkKXJldHVybjtjb25zdCBlPXRoaXMuJCQoIiNtYWluLWltYWdlLWNvbnRhaW5lciIpO2UudGV4dENvbnRlbnQ9IiIsWWkoZSkuYXBwZW5kQ2hpbGQoaSksdGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITEpfSkpLmJpbmQodGhpcyksaS5zdHlsZS5maWx0ZXI9YGNvbnRyYXN0KCR7bn0lKSBgLGkuc3R5bGUuZmlsdGVyKz1gYnJpZ2h0bmVzcygke2V9KWAsdGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITApLGkuc3JjPXQudXJsfV9oYW5kbGVUYXAodCl7dGhpcy5zZXQoImFjdHVhbFNpemUiLCF0aGlzLmFjdHVhbFNpemUpfV90b0xvY2FsZVN0cmluZyh0KXtyZXR1cm4gdC50b0xvY2FsZVN0cmluZygpfX07Tkt0LnRlbXBsYXRlPV9lYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlc11dIj4KICAgICAgICA8ZGl2PnNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbb2ZTYW1wbGVzXV08L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbX3RvTG9jYWxlU3RyaW5nKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQgZGF0ZXRpbWUiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc0ltYWdlTG9hZGluZ11dIj4KICAgICAgICAgICAgPC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgIGlkPSJzdGVwcyIKICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgICAgbWF4PSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KCiAgICA8IS0tIFNlbWFudGljYWxseSBhIGJ1dHRvbiBidXQgPGltZz4gaW5zaWRlIGEgPGJ1dHRvbj4gZGlzYWxsb3dzIHVzZXIgdG8gZG8KICAgIGFuIGludGVyZXN0aW5nIG9wZXJhdGlvbiBsaWtlICJDb3B5IEltYWdlIiBpbiBub24tQ2hyb21pdW0gYnJvd3NlcnMuIC0tPgogICAgPGEKICAgICAgaWQ9Im1haW4taW1hZ2UtY29udGFpbmVyIgogICAgICByb2xlPSJidXR0b24iCiAgICAgIGFyaWEtbGFiZWw9IlRvZ2dsZSBhY3R1YWwgc2l6ZSIKICAgICAgYXJpYS1leHBhbmRlZCQ9IltbX2dldEFyaWFFeHBhbmRlZChhY3R1YWxTaXplKV1dIgogICAgICBvbi10YXA9Il9oYW5kbGVUYXAiCiAgICA+PC9hPgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiPgogICAgICAvKiogTWFrZSBidXR0b24gYSBkaXYuICovCiAgICAgIGJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IEdldCByaWQgb2YgZG90dGVkIGxpbmUgaW5zaWRlIGJ1dHRvbi4gKi8KICAgICAgYnV0dG9uOjotbW96LWZvY3VzLWlubmVyIHsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IFNpbXVsYXRlIENocm9tZSdzIG91dGVyIGdsb3cgb24gYnV0dG9uIHdoZW4gZm9jdXNlZC4gKi8KICAgICAgYnV0dG9uOi1tb3otZm9jdXNyaW5nIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMXB4IDJweCBIaWdobGlnaHQ7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDAgMTVweCA0MHB4IDA7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLyoqIFdoZW4gYWN0dWFsIHNpemUgc2hvd24gaXMgb24sIHVzZSB0aGUgYWN0dWFsIGltYWdlIHdpZHRoLiAqLwogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFthY3R1YWwtc2l6ZV0pICNtYWluLWltYWdlLWNvbnRhaW5lciBpbWcgewogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1zcGlubmVyLWxpdGUgewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207CiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQoKICAgICAgI3N0ZXBzIHsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKgogICAgICAgICAqIDMxIGNvbWVzIGZyb20gYWRkaW5nIGEgcGFkZGluZyBvZiAxNXB4IGZyb20gYm90aCBzaWRlcyBvZiB0aGUKICAgICAgICAgKiBwYXBlci1zbGlkZXIsIHN1YnRyYWN0aW5nIDFweCBzbyB0aGF0IHRoZSBzbGlkZXIgd2lkdGggYWxpZ25zCiAgICAgICAgICogd2l0aCB0aGUgaW1hZ2UgKHRoZSBsYXN0IHNsaWRlciBtYXJrZXIgdGFrZXMgdXAgMXB4KSwgYW5kCiAgICAgICAgICogYWRkaW5nIDJweCB0byBhY2NvdW50IGZvciBhIGJvcmRlciBvZiAxcHggb24gYm90aCBzaWRlcyBvZgogICAgICAgICAqIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgICAgICAgKi8KICAgICAgICB3aWR0aDogY2FsYygxMDAlICsgMzFweCk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CgogICAgICAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDEwMjRweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgI21haW4taW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGltYWdlLXJlbmRlcmluZzogLW1vei1jcmlzcC1lZGdlczsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTkt0LnByb3RvdHlwZSwicnVuIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLE5LdC5wcm90b3R5cGUsInRhZyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxOS3QucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTkt0LnByb3RvdHlwZSwib2ZTYW1wbGVzIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLE5LdC5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE5LdC5wcm90b3R5cGUsImFjdHVhbFNpemUiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTkt0LnByb3RvdHlwZSwiYnJpZ2h0bmVzc0FkanVzdG1lbnQiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTkt0LnByb3RvdHlwZSwiY29udHJhc3RQZXJjZW50YWdlIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGRyKV0sTkt0LnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTkt0LnByb3RvdHlwZSwiX21ldGFkYXRhQ2FuY2VsbGVyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLE5LdC5wcm90b3R5cGUsIl9pbWFnZUNhbmNlbGxlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLE5LdC5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTkt0LnByb3RvdHlwZSwiX3N0ZXBJbmRleCIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE5LdC5wcm90b3R5cGUsIl9pc0ltYWdlTG9hZGluZyIsdm9pZCAwKSx0KFtzKCJydW4iKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxOS3QucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpLHQoW3MoIl9zdGVwcyIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxOS3QucHJvdG90eXBlLCJfaGFzQXRMZWFzdE9uZVN0ZXAiLG51bGwpLHQoW3MoIl9zdGVwcyIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxOS3QucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTdGVwcyIsbnVsbCksdChbcygiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLGUoImRlc2lnbjp0eXBlIixPYmplY3QpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLE5LdC5wcm90b3R5cGUsIl9jdXJyZW50U3RlcCIsbnVsbCksdChbcygiX2N1cnJlbnRTdGVwIiksZSgiZGVzaWduOnR5cGUiLE51bWJlciksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sTkt0LnByb3RvdHlwZSwiX3N0ZXBWYWx1ZSIsbnVsbCksdChbcygiX2N1cnJlbnRTdGVwIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sTkt0LnByb3RvdHlwZSwiX2N1cnJlbnRXYWxsVGltZSIsbnVsbCksdChbcygiX3N0ZXBzIiksZSgiZGVzaWduOnR5cGUiLE51bWJlciksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sTkt0LnByb3RvdHlwZSwiX21heFN0ZXBJbmRleCIsbnVsbCksdChbcygic2FtcGxlIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sTkt0LnByb3RvdHlwZSwiX3NhbXBsZVRleHQiLG51bGwpLHQoW3MoIm9mU2FtcGxlcyIpLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxOS3QucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTYW1wbGVzIixudWxsKSx0KFthKCJydW4iLCJ0YWciKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLE5LdC5wcm90b3R5cGUsInJlbG9hZCIsbnVsbCksdChbYSgiX2N1cnJlbnRTdGVwIiwiYnJpZ2h0bmVzc0FkanVzdG1lbnQiLCJjb250cmFzdFBlcmNlbnRhZ2UiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLE5LdC5wcm90b3R5cGUsIl91cGRhdGVJbWFnZVVybCIsbnVsbCksTkt0PXQoW2koInRmLWltYWdlLWxvYWRlciIpXSxOS3QpO2xldCBJS3Q9Y2xhc3MgZXh0ZW5kcyhlcih5ZSkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50PTEsdGhpcy5fZGVmYXVsdENvbnRyYXN0UGVyY2VudGFnZT0xMDAsdGhpcy5fYnJpZ2h0bmVzc0FkanVzdG1lbnQ9MSx0aGlzLl9jb250cmFzdFBlcmNlbnRhZ2U9MTAwLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBkcn1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCgpPT57dGhpcy5fcmVsb2FkSW1hZ2VzKCl9KSl9X2ZldGNoVGFncygpe2NvbnN0IHQ9X3IoKS5wbHVnaW5Sb3V0ZSgiaW1hZ2VzIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57aWYoU2UuZXhwb3J0cy5pc0VxdWFsKHQsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47Y29uc3QgZT1hcihTZS5leHBvcnRzLm1hcFZhbHVlcyh0LCh0PT5PYmplY3Qua2V5cyh0KSkpKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PWUubGVuZ3RoKSx0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsdCksdGhpcy5hc3luYygoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSkpfSkpfV9yZWxvYWRJbWFnZXMoKXt0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgidGYtaW1hZ2UtbG9hZGVyIikuZm9yRWFjaCgodD0+e3QucmVsb2FkKCl9KSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9X3Jlc2V0QnJpZ2h0bmVzcygpe3RoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50PXRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudH1fcmVzZXRDb250cmFzdCgpe3RoaXMuX2NvbnRyYXN0UGVyY2VudGFnZT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfWdldCBfYnJpZ2h0bmVzc0lzRGVmYXVsdCgpe3JldHVybiB0aGlzLl9icmlnaHRuZXNzQWRqdXN0bWVudD09PXRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudH1nZXQgX2NvbnRyYXN0SXNEZWZhdWx0KCl7cmV0dXJuIHRoaXMuX2NvbnRyYXN0UGVyY2VudGFnZT09PXRoaXMuX2RlZmF1bHRDb250cmFzdFBlcmNlbnRhZ2V9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLGU9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2Z1bmN0aW9uIGkoZSl7Y29uc3Qgbj10W2UucnVuXVtlLnRhZ10uc2FtcGxlcztyZXR1cm4gU2UuZXhwb3J0cy5yYW5nZShuKS5tYXAoKHQ9Pk9iamVjdC5hc3NpZ24oe30sZSx7c2FtcGxlOnQsb2ZTYW1wbGVzOm59KSkpfXJldHVybiBNcihTZS5leHBvcnRzLm1hcFZhbHVlcyh0LCh0PT5PYmplY3Qua2V5cyh0KSkpLGUsbikubWFwKCh0PT5PYmplY3QuYXNzaWduKHt9LHQse2l0ZW1zOltdLmNvbmNhdC5hcHBseShbXSx0Lml0ZW1zLm1hcChpKSl9KSkpfV90YWdNZXRhZGF0YSh0LGUsbil7cmV0dXJuIHRbZV1bbl19fTt2YXIgUkt0LE9LdCx6S3Q7SUt0LnRlbXBsYXRlPV9lYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X2FjdHVhbFNpemV9fSIKICAgICAgICAgICAgICAgID5TaG93IGFjdHVhbCBpbWFnZSBzaXplPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxoMyBjbGFzcz0idG9vbHRpcC1jb250YWluZXIiPkJyaWdodG5lc3MgYWRqdXN0bWVudDwvaDM+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICAgICAgbWF4PSIyIgogICAgICAgICAgICAgICAgc25hcHMKICAgICAgICAgICAgICAgIHBpbgogICAgICAgICAgICAgICAgc3RlcD0iMC4wMSIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e19icmlnaHRuZXNzQWRqdXN0bWVudH19IgogICAgICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19icmlnaHRuZXNzQWRqdXN0bWVudH19IgogICAgICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0ieC1idXR0b24iCiAgICAgICAgICAgICAgICBvbi10YXA9Il9yZXNldEJyaWdodG5lc3MiCiAgICAgICAgICAgICAgICBkaXNhYmxlZD0iW1tfYnJpZ2h0bmVzc0lzRGVmYXVsdF1dIgogICAgICAgICAgICAgICAgPlJlc2V0PC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8aDMgY2xhc3M9InRvb2x0aXAtY29udGFpbmVyIj5Db250cmFzdCBhZGp1c3RtZW50PC9oMz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIj4KICAgICAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgICBtYXg9IjUwMCIKICAgICAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgICAgICBwaW4KICAgICAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tfY29udHJhc3RQZXJjZW50YWdlfX0iCiAgICAgICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X2NvbnRyYXN0UGVyY2VudGFnZX19IgogICAgICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0ieC1idXR0b24iCiAgICAgICAgICAgICAgICBvbi10YXA9Il9yZXNldENvbnRyYXN0IgogICAgICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2NvbnRyYXN0SXNEZWZhdWx0XV0iCiAgICAgICAgICAgICAgICA+UmVzZXQ8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvcgogICAgICAgICAgICBpZD0icnVucy1zZWxlY3RvciIKICAgICAgICAgICAgc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iCiAgICAgICAgICA+PC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIGltYWdlIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBpbWFnZSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtaW1hZ2UtbG9hZGVyCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgcnVuPSJbW2l0ZW0ucnVuXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICBzYW1wbGU9IltbaXRlbS5zYW1wbGVdXSIKICAgICAgICAgICAgICAgICAgb2Ytc2FtcGxlcz0iW1tpdGVtLm9mU2FtcGxlc11dIgogICAgICAgICAgICAgICAgICB0YWctbWV0YWRhdGE9IltbX3RhZ01ldGFkYXRhKF9ydW5Ub1RhZ0luZm8sIGl0ZW0ucnVuLCBpdGVtLnRhZyldXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBhY3R1YWwtc2l6ZT0iW1tfYWN0dWFsU2l6ZV1dIgogICAgICAgICAgICAgICAgICBicmlnaHRuZXNzLWFkanVzdG1lbnQ9IltbX2JyaWdodG5lc3NBZGp1c3RtZW50XV0iCiAgICAgICAgICAgICAgICAgIGNvbnRyYXN0LXBlcmNlbnRhZ2U9IltbX2NvbnRyYXN0UGVyY2VudGFnZV1dIgogICAgICAgICAgICAgICAgPjwvdGYtaW1hZ2UtbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHBhcGVyLXNsaWRlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgcGFwZXItYnV0dG9uIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgIH0KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciBwYXBlci1idXR0b25bZGlzYWJsZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB1bnNldDsKICAgICAgfQogICAgICAueC1idXR0b24gewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgIH0KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLElLdC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLElLdC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSUt0LnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLElLdC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJS3QucHJvdG90eXBlLCJfYWN0dWFsU2l6ZSIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJS3QucHJvdG90eXBlLCJfZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50Iix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLElLdC5wcm90b3R5cGUsIl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLElLdC5wcm90b3R5cGUsIl9icmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKSx0KFtvKHt0eXBlOk51bWJlcn0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJS3QucHJvdG90eXBlLCJfY29udHJhc3RQZXJjZW50YWdlIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLElLdC5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJS3QucHJvdG90eXBlLCJfY2F0ZWdvcmllc0RvbVJlYWR5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLElLdC5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtzKCJfYnJpZ2h0bmVzc0FkanVzdG1lbnQiKSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSUt0LnByb3RvdHlwZSwiX2JyaWdodG5lc3NJc0RlZmF1bHQiLG51bGwpLHQoW3MoIl9jb250cmFzdFBlcmNlbnRhZ2UiKSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSUt0LnByb3RvdHlwZSwiX2NvbnRyYXN0SXNEZWZhdWx0IixudWxsKSx0KFtzKCJfcnVuVG9UYWdJbmZvIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiLCJfY2F0ZWdvcmllc0RvbVJlYWR5IiksZSgiZGVzaWduOnR5cGUiLEFycmF5KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJS3QucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCksSUt0PXQoW2koInRmLWltYWdlLWRhc2hib2FyZCIpXSxJS3QpLChmdW5jdGlvbih0KXt0W3QuQ0FOQ0VMTEVEPTFdPSJDQU5DRUxMRUQifSkoUkt0fHwoUkt0PXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5WRVJURVg9MV09IlZFUlRFWCIsdFt0LkZBQ0U9Ml09IkZBQ0UiLHRbdC5DT0xPUj0zXT0iQ09MT1IifSkoT0t0fHwoT0t0PXt9KSksKGZ1bmN0aW9uKHQpe3QuVkVSVEVYPSJmbG9hdDMyIix0LkZBQ0U9ImludDMyIix0LkNPTE9SPSJ1aW50OCJ9KSh6S3R8fCh6S3Q9e30pKTtjbGFzcyBES3R7Y29uc3RydWN0b3IodCl7dGhpcy5fY2FuY2VsbGVyPW5ldyBYUix0aGlzLl9yZXF1ZXN0TWFuYWdlcj10fXJlbG9hZCh0LGUsbil7cmV0dXJuIHRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9mZXRjaE1ldGFkYXRhKHQsZSxuKX1fZmV0Y2hEYXRhQnlTdGVwKHQsZSxuLGkscixvKXtjb25zdCBhPV9yKCkucGx1Z2luUm91dGUoIm1lc2giLCIvZGF0YSIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOmUscnVuOnQsY29udGVudF90eXBlOm4sc2FtcGxlOlN0cmluZyhpKSxzdGVwOlN0cmluZyhyKX0pKSxzPWZ1bmN0aW9uKHQpe2xldCBlPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGgvMztuKyspe2xldCBpPVtdO2ZvcihsZXQgZT0wO2U8MztlKyspaS5wdXNoKHRbMypuK2VdKTtlLnB1c2goaSl9cmV0dXJuIGV9LGw9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKCh0PT57aWYodC5jYW5jZWxsZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KHtjb2RlOlJLdC5DQU5DRUxMRUQsbWVzc2FnZToiUmVzcG9uc2Ugd2FzIGludmFsaWRhdGVkLiJ9KTtsZXQgZT10LnZhbHVlO3N3aXRjaChuKXtjYXNlIlZFUlRFWCI6by52ZXJ0aWNlcz1zKG5ldyBGbG9hdDMyQXJyYXkoZSkpO2JyZWFrO2Nhc2UiRkFDRSI6by5mYWNlcz1zKG5ldyBJbnQzMkFycmF5KGUpKTticmVhaztjYXNlIkNPTE9SIjpvLmNvbG9ycz1zKG5ldyBVaW50OEFycmF5KGUpKX1yZXR1cm4gb30pKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIuZmV0Y2goYSx7bWV0aG9kOiJHRVQiLGhlYWRlcnM6e3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLGNvbnRlbnRUeXBlOnpLdFtuXX19KS50aGVuKCh0PT50LmFycmF5QnVmZmVyKCkpKS50aGVuKGwpfWZldGNoRGF0YSh0LGUsbixpKXtsZXQgcj1bXSxvPW5ldyBNYXA7cmV0dXJuIE9iamVjdC5rZXlzKE9LdCkuZm9yRWFjaCgoYT0+e3QuY29tcG9uZW50cyYxPDxPS3RbYV0mJnIucHVzaCh0aGlzLl9mZXRjaERhdGFCeVN0ZXAoZSxuLGEsaSx0LnN0ZXAsbykpfSkpLFByb21pc2UuYWxsKHIpfV9mZXRjaE1ldGFkYXRhKHQsZSxuKXt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7Y29uc3QgaT1fcigpLnBsdWdpblJvdXRlKCJtZXNoIiwiL21lc2hlcyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOmUscnVuOnQsc2FtcGxlOm59KSkscj10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoKHQ9PnQuY2FuY2VsbGVkP1Byb21pc2UucmVqZWN0KHtjb2RlOlJLdC5DQU5DRUxMRUQsbWVzc2FnZToiUmVzcG9uc2Ugd2FzIGludmFsaWRhdGVkLiJ9KTp0LnZhbHVlKSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLmZldGNoKGkpLnRoZW4oKHQ9PnQuanNvbigpKSkudGhlbihyKS50aGVuKHRoaXMuX3Byb2Nlc3NNZXRhZGF0YS5iaW5kKHRoaXMpKX1fcHJvY2Vzc01ldGFkYXRhKHQpe2lmKCF0KXJldHVybjtjb25zdCBlPW5ldyBNYXA7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2xldCBpPXRbbl07ZS5oYXMoaS5zdGVwKXx8ZS5zZXQoaS5zdGVwLFtdKSxlLmdldChpLnN0ZXApLnB1c2goaSl9bGV0IG49W107cmV0dXJuIGUuZm9yRWFjaCgodD0+e2xldCBlPXRoaXMuX2NyZWF0ZVN0ZXBEYXR1bSh0WzBdKTtuLnB1c2goZSl9KSksbn1fY3JlYXRlU3RlcERhdHVtKHQpe3JldHVybnt3YWxsX3RpbWU6bmV3IERhdGUoMWUzKnQud2FsbF90aW1lKSxzdGVwOnQuc3RlcCxjb25maWc6dC5jb25maWcsY29udGVudF90eXBlOnQuY29udGVudF90eXBlLGNvbXBvbmVudHM6dC5jb21wb25lbnRzfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCAyMDEwLTIwMjEgVGhyZWUuanMgQXV0aG9ycwogICAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAogICAgICovY29uc3QgQkt0PSIxMzEiLEhLdD17TEVGVDowLE1JRERMRToxLFJJR0hUOjIsUk9UQVRFOjAsRE9MTFk6MSxQQU46Mn0sRkt0PXtST1RBVEU6MCxQQU46MSxET0xMWV9QQU46MixET0xMWV9ST1RBVEU6M30sVkt0PTEwMCxVS3Q9MzAwLGpLdD0zMDEsR0t0PTMwMixXS3Q9MzAzLHFLdD0zMDQsWUt0PTMwNixYS3Q9MzA3LCRLdD0xZTMsS0t0PTEwMDEsWkt0PTEwMDIsSkt0PTEwMDMsUUt0PTEwMDQsdFp0PTEwMDUsZVp0PTEwMDYsblp0PTEwMDcsaVp0PTEwMDgsclp0PTEwMDksb1p0PTEwMTIsYVp0PTEwMTQsc1p0PTEwMTUsbFp0PTEwMTYsY1p0PTEwMjAsdVp0PTEwMjIsaFp0PTEwMjMsZFp0PTEwMjYscFp0PTEwMjcsZlp0PTMzNzc2LG1adD0zMzc3NyxnWnQ9MzM3NzgsX1p0PTMzNzc5LHladD0zNTg0MCx2WnQ9MzU4NDEsYlp0PTM1ODQyLHhadD0zNTg0Myx3WnQ9Mzc0OTIsU1p0PTM3NDk2LE1adD0yMzAwLEVadD0yMzAxLFRadD0yMzAyLENadD0yNDAwLEFadD0yNDAxLGtadD0yNDAyLExadD0yNTAwLFBadD0yNTAxLE5adD0zZTMsSVp0PTMwMDEsUlp0PTMwMDcsT1p0PTMwMDIselp0PTMwMDQsRFp0PTMwMDUsQlp0PTMwMDYsSFp0PTc2ODAsRlp0PTM1MDQ0LFZadD0zNTA0OCxVWnQ9IjMwMCBlcyI7Y2xhc3Mgalp0e2FkZEV2ZW50TGlzdGVuZXIodCxlKXt2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMmJih0aGlzLl9saXN0ZW5lcnM9e30pO2NvbnN0IG49dGhpcy5fbGlzdGVuZXJzO3ZvaWQgMD09PW5bdF0mJihuW3RdPVtdKSwtMT09PW5bdF0uaW5kZXhPZihlKSYmblt0XS5wdXNoKGUpfWhhc0V2ZW50TGlzdGVuZXIodCxlKXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuITE7Y29uc3Qgbj10aGlzLl9saXN0ZW5lcnM7cmV0dXJuIHZvaWQgMCE9PW5bdF0mJi0xIT09blt0XS5pbmRleE9mKGUpfXJlbW92ZUV2ZW50TGlzdGVuZXIodCxlKXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2NvbnN0IG49dGhpcy5fbGlzdGVuZXJzW3RdO2lmKHZvaWQgMCE9PW4pe2NvbnN0IHQ9bi5pbmRleE9mKGUpOy0xIT09dCYmbi5zcGxpY2UodCwxKX19ZGlzcGF0Y2hFdmVudCh0KXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2NvbnN0IGU9dGhpcy5fbGlzdGVuZXJzW3QudHlwZV07aWYodm9pZCAwIT09ZSl7dC50YXJnZXQ9dGhpcztjb25zdCBuPWUuc2xpY2UoMCk7Zm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKW5bZV0uY2FsbCh0aGlzLHQpO3QudGFyZ2V0PW51bGx9fX1jb25zdCBHWnQ9W107Zm9yKGxldCB0PTA7dDwyNTY7dCsrKUdadFt0XT0odDwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpO2xldCBXWnQ9MTIzNDU2Nztjb25zdCBxWnQ9TWF0aC5QSS8xODAsWVp0PTE4MC9NYXRoLlBJO2Z1bmN0aW9uIFhadCgpe2NvbnN0IHQ9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsZT00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCxuPTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLGk9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDA7cmV0dXJuKEdadFsyNTUmdF0rR1p0W3Q+PjgmMjU1XStHWnRbdD4+MTYmMjU1XStHWnRbdD4+MjQmMjU1XSsiLSIrR1p0WzI1NSZlXStHWnRbZT4+OCYyNTVdKyItIitHWnRbZT4+MTYmMTV8NjRdK0dadFtlPj4yNCYyNTVdKyItIitHWnRbNjMmbnwxMjhdK0dadFtuPj44JjI1NV0rIi0iK0dadFtuPj4xNiYyNTVdK0dadFtuPj4yNCYyNTVdK0dadFsyNTUmaV0rR1p0W2k+PjgmMjU1XStHWnRbaT4+MTYmMjU1XStHWnRbaT4+MjQmMjU1XSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiAkWnQodCxlLG4pe3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKG4sdCkpfWZ1bmN0aW9uIEtadCh0LGUpe3JldHVybih0JWUrZSklZX1mdW5jdGlvbiBaWnQodCxlLG4pe3JldHVybigxLW4pKnQrbiplfWZ1bmN0aW9uIEpadCh0KXtyZXR1cm4gMD09KHQmdC0xKSYmMCE9PXR9ZnVuY3Rpb24gUVp0KHQpe3JldHVybiBNYXRoLnBvdygyLE1hdGguY2VpbChNYXRoLmxvZyh0KS9NYXRoLkxOMikpfWZ1bmN0aW9uIHRKdCh0KXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSl9dmFyIGVKdD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxERUcyUkFEOnFadCxSQUQyREVHOlladCxnZW5lcmF0ZVVVSUQ6WFp0LGNsYW1wOiRadCxldWNsaWRlYW5Nb2R1bG86S1p0LG1hcExpbmVhcjpmdW5jdGlvbiBuSnQodCxlLG4saSxyKXtyZXR1cm4gaSsodC1lKSooci1pKS8obi1lKX0saW52ZXJzZUxlcnA6ZnVuY3Rpb24gaUp0KHQsZSxuKXtyZXR1cm4gdCE9PWU/KG4tdCkvKGUtdCk6MH0sbGVycDpaWnQsZGFtcDpmdW5jdGlvbiBySnQodCxlLG4saSl7cmV0dXJuIFpadCh0LGUsMS1NYXRoLmV4cCgtbippKSl9LHBpbmdwb25nOmZ1bmN0aW9uIG9KdCh0LGU9MSl7cmV0dXJuIGUtTWF0aC5hYnMoS1p0KHQsMiplKS1lKX0sc21vb3Roc3RlcDpmdW5jdGlvbiBhSnQodCxlLG4pe3JldHVybiB0PD1lPzA6dD49bj8xOih0PSh0LWUpLyhuLWUpKSp0KigzLTIqdCl9LHNtb290aGVyc3RlcDpmdW5jdGlvbiBzSnQodCxlLG4pe3JldHVybiB0PD1lPzA6dD49bj8xOih0PSh0LWUpLyhuLWUpKSp0KnQqKHQqKDYqdC0xNSkrMTApfSxyYW5kSW50OmZ1bmN0aW9uIGxKdCh0LGUpe3JldHVybiB0K01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSooZS10KzEpKX0scmFuZEZsb2F0OmZ1bmN0aW9uIGNKdCh0LGUpe3JldHVybiB0K01hdGgucmFuZG9tKCkqKGUtdCl9LHJhbmRGbG9hdFNwcmVhZDpmdW5jdGlvbiB1SnQodCl7cmV0dXJuIHQqKC41LU1hdGgucmFuZG9tKCkpfSxzZWVkZWRSYW5kb206ZnVuY3Rpb24gaEp0KHQpe3JldHVybiB2b2lkIDAhPT10JiYoV1p0PXQlMjE0NzQ4MzY0NyksV1p0PTE2ODA3KldadCUyMTQ3NDgzNjQ3LChXWnQtMSkvMjE0NzQ4MzY0Nn0sZGVnVG9SYWQ6ZnVuY3Rpb24gZEp0KHQpe3JldHVybiB0KnFadH0scmFkVG9EZWc6ZnVuY3Rpb24gcEp0KHQpe3JldHVybiB0KlladH0saXNQb3dlck9mVHdvOkpadCxjZWlsUG93ZXJPZlR3bzpRWnQsZmxvb3JQb3dlck9mVHdvOnRKdCxzZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyOmZ1bmN0aW9uIGZKdCh0LGUsbixpLHIpe2NvbnN0IG89TWF0aC5jb3MsYT1NYXRoLnNpbixzPW8obi8yKSxsPWEobi8yKSxjPW8oKGUraSkvMiksdT1hKChlK2kpLzIpLGg9bygoZS1pKS8yKSxkPWEoKGUtaSkvMikscD1vKChpLWUpLzIpLGY9YSgoaS1lKS8yKTtzd2l0Y2gocil7Y2FzZSJYWVgiOnQuc2V0KHMqdSxsKmgsbCpkLHMqYyk7YnJlYWs7Y2FzZSJZWlkiOnQuc2V0KGwqZCxzKnUsbCpoLHMqYyk7YnJlYWs7Y2FzZSJaWFoiOnQuc2V0KGwqaCxsKmQscyp1LHMqYyk7YnJlYWs7Y2FzZSJYWlgiOnQuc2V0KHMqdSxsKmYsbCpwLHMqYyk7YnJlYWs7Y2FzZSJZWFkiOnQuc2V0KGwqcCxzKnUsbCpmLHMqYyk7YnJlYWs7Y2FzZSJaWVoiOnQuc2V0KGwqZixsKnAscyp1LHMqYyk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLk1hdGhVdGlsczogLnNldFF1YXRlcm5pb25Gcm9tUHJvcGVyRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK3IpfX19KTtjbGFzcyBtSnR7Y29uc3RydWN0b3IodD0wLGU9MCl7dGhpcy54PXQsdGhpcy55PWV9Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMueH1zZXQgd2lkdGgodCl7dGhpcy54PXR9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnl9c2V0IGhlaWdodCh0KXt0aGlzLnk9dH1zZXQodCxlKXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PWUsdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpc31hZGQodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQsZSkpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzfXN1Yih0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxlKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzfWRpdmlkZSh0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1hcHBseU1hdHJpeDModCl7Y29uc3QgZT10aGlzLngsbj10aGlzLnksaT10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9aVswXSplK2lbM10qbitpWzZdLHRoaXMueT1pWzFdKmUraVs0XSpuK2lbN10sdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7Y29uc3Qgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2NvbnN0IGU9dGhpcy54LXQueCxuPXRoaXMueS10Lnk7cmV0dXJuIGUqZStuKm59bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXN9bGVycFZlY3RvcnModCxlLG4pe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSpuLHRoaXMueT10LnkrKGUueS10LnkpKm4sdGhpc31lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLG4pe3JldHVybiB2b2lkIDAhPT1uJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpc31yb3RhdGVBcm91bmQodCxlKXtjb25zdCBuPU1hdGguY29zKGUpLGk9TWF0aC5zaW4oZSkscj10aGlzLngtdC54LG89dGhpcy55LXQueTtyZXR1cm4gdGhpcy54PXIqbi1vKmkrdC54LHRoaXMueT1yKmkrbypuK3QueSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzfX1tSnQucHJvdG90eXBlLmlzVmVjdG9yMj0hMDtjbGFzcyBnSnR7Y29uc3RydWN0b3IoKXt0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDEsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsbixpLHIsbyxhLHMsbCl7Y29uc3QgYz10aGlzLmVsZW1lbnRzO3JldHVybiBjWzBdPXQsY1sxXT1pLGNbMl09YSxjWzNdPWUsY1s0XT1yLGNbNV09cyxjWzZdPW4sY1s3XT1vLGNbOF09bCx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMSwwLDAsMCwxKSx0aGlzfWNvcHkodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gZVswXT1uWzBdLGVbMV09blsxXSxlWzJdPW5bMl0sZVszXT1uWzNdLGVbNF09bls0XSxlWzVdPW5bNV0sZVs2XT1uWzZdLGVbN109bls3XSxlWzhdPW5bOF0sdGhpc31leHRyYWN0QmFzaXModCxlLG4pe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLG4uc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2NvbnN0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy5zZXQoZVswXSxlWzRdLGVbOF0sZVsxXSxlWzVdLGVbOV0sZVsyXSxlWzZdLGVbMTBdKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsdGhpcyl9bXVsdGlwbHlNYXRyaWNlcyh0LGUpe2NvbnN0IG49dC5lbGVtZW50cyxpPWUuZWxlbWVudHMscj10aGlzLmVsZW1lbnRzLG89blswXSxhPW5bM10scz1uWzZdLGw9blsxXSxjPW5bNF0sdT1uWzddLGg9blsyXSxkPW5bNV0scD1uWzhdLGY9aVswXSxtPWlbM10sZz1pWzZdLF89aVsxXSx5PWlbNF0sdj1pWzddLGI9aVsyXSx4PWlbNV0sdz1pWzhdO3JldHVybiByWzBdPW8qZithKl8rcypiLHJbM109byptK2EqeStzKngscls2XT1vKmcrYSp2K3MqdyxyWzFdPWwqZitjKl8rdSpiLHJbNF09bCptK2MqeSt1Kngscls3XT1sKmcrYyp2K3UqdyxyWzJdPWgqZitkKl8rcCpiLHJbNV09aCptK2QqeStwKngscls4XT1oKmcrZCp2K3Aqdyx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzNdKj10LGVbNl0qPXQsZVsxXSo9dCxlWzRdKj10LGVbN10qPXQsZVsyXSo9dCxlWzVdKj10LGVbOF0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2NvbnN0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0sbj10WzFdLGk9dFsyXSxyPXRbM10sbz10WzRdLGE9dFs1XSxzPXRbNl0sbD10WzddLGM9dFs4XTtyZXR1cm4gZSpvKmMtZSphKmwtbipyKmMrbiphKnMraSpyKmwtaSpvKnN9aW52ZXJ0KCl7Y29uc3QgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxuPXRbMV0saT10WzJdLHI9dFszXSxvPXRbNF0sYT10WzVdLHM9dFs2XSxsPXRbN10sYz10WzhdLHU9YypvLWEqbCxoPWEqcy1jKnIsZD1sKnItbypzLHA9ZSp1K24qaCtpKmQ7aWYoMD09PXApcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwKTtjb25zdCBmPTEvcDtyZXR1cm4gdFswXT11KmYsdFsxXT0oaSpsLWMqbikqZix0WzJdPShhKm4taSpvKSpmLHRbM109aCpmLHRbNF09KGMqZS1pKnMpKmYsdFs1XT0oaSpyLWEqZSkqZix0WzZdPWQqZix0WzddPShuKnMtbCplKSpmLHRbOF09KG8qZS1uKnIpKmYsdGhpc310cmFuc3Bvc2UoKXtsZXQgdDtjb25zdCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQ9ZVsxXSxlWzFdPWVbM10sZVszXT10LHQ9ZVsyXSxlWzJdPWVbNl0sZVs2XT10LHQ9ZVs1XSxlWzVdPWVbN10sZVs3XT10LHRoaXN9Z2V0Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KHQpLmludmVydCgpLnRyYW5zcG9zZSgpfXRyYW5zcG9zZUludG9BcnJheSh0KXtjb25zdCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbM10sdFsyXT1lWzZdLHRbM109ZVsxXSx0WzRdPWVbNF0sdFs1XT1lWzddLHRbNl09ZVsyXSx0WzddPWVbNV0sdFs4XT1lWzhdLHRoaXN9c2V0VXZUcmFuc2Zvcm0odCxlLG4saSxyLG8sYSl7Y29uc3Qgcz1NYXRoLmNvcyhyKSxsPU1hdGguc2luKHIpO3JldHVybiB0aGlzLnNldChuKnMsbipsLC1uKihzKm8rbCphKStvK3QsLWkqbCxpKnMsLWkqKC1sKm8rcyphKSthK2UsMCwwLDEpLHRoaXN9c2NhbGUodCxlKXtjb25zdCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0qPXQsblszXSo9dCxuWzZdKj10LG5bMV0qPWUsbls0XSo9ZSxuWzddKj1lLHRoaXN9cm90YXRlKHQpe2NvbnN0IGU9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KSxpPXRoaXMuZWxlbWVudHMscj1pWzBdLG89aVszXSxhPWlbNl0scz1pWzFdLGw9aVs0XSxjPWlbN107cmV0dXJuIGlbMF09ZSpyK24qcyxpWzNdPWUqbytuKmwsaVs2XT1lKmErbipjLGlbMV09LW4qcitlKnMsaVs0XT0tbipvK2UqbCxpWzddPS1uKmErZSpjLHRoaXN9dHJhbnNsYXRlKHQsZSl7Y29uc3Qgbj10aGlzLmVsZW1lbnRzO3JldHVybiBuWzBdKz10Km5bMl0sblszXSs9dCpuWzVdLG5bNl0rPXQqbls4XSxuWzFdKz1lKm5bMl0sbls0XSs9ZSpuWzVdLG5bN10rPWUqbls4XSx0aGlzfWVxdWFscyh0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgdD0wO3Q8OTt0KyspaWYoZVt0XSE9PW5bdF0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQsZT0wKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuZWxlbWVudHNbbl09dFtuK2VdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2NvbnN0IG49dGhpcy5lbGVtZW50cztyZXR1cm4gdFtlXT1uWzBdLHRbZSsxXT1uWzFdLHRbZSsyXT1uWzJdLHRbZSszXT1uWzNdLHRbZSs0XT1uWzRdLHRbZSs1XT1uWzVdLHRbZSs2XT1uWzZdLHRbZSs3XT1uWzddLHRbZSs4XT1uWzhdLHR9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX19bGV0IF9KdDtnSnQucHJvdG90eXBlLmlzTWF0cml4Mz0hMDtjbGFzcyB5SnR7c3RhdGljIGdldERhdGFVUkwodCl7aWYoL15kYXRhOi9pLnRlc3QodC5zcmMpKXJldHVybiB0LnNyYztpZigidW5kZWZpbmVkIj09dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50KXJldHVybiB0LnNyYztsZXQgZTtpZih0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpZT10O2Vsc2V7dm9pZCAwPT09X0p0JiYoX0p0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImNhbnZhcyIpKSxfSnQud2lkdGg9dC53aWR0aCxfSnQuaGVpZ2h0PXQuaGVpZ2h0O2NvbnN0IG49X0p0LmdldENvbnRleHQoIjJkIik7dCBpbnN0YW5jZW9mIEltYWdlRGF0YT9uLnB1dEltYWdlRGF0YSh0LDAsMCk6bi5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCksZT1fSnR9cmV0dXJuIGUud2lkdGg+MjA0OHx8ZS5oZWlnaHQ+MjA0OD8oY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmdldERhdGFVUkw6IEltYWdlIGNvbnZlcnRlZCB0byBqcGcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMiLHQpLGUudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwuNikpOmUudG9EYXRhVVJMKCJpbWFnZS9wbmciKX19bGV0IHZKdD0wO2NsYXNzIGJKdCBleHRlbmRzIGpadHtjb25zdHJ1Y3Rvcih0PWJKdC5ERUZBVUxUX0lNQUdFLGU9Ykp0LkRFRkFVTFRfTUFQUElORyxuPTEwMDEsaT0xMDAxLHI9MTAwNixvPTEwMDgsYT0xMDIzLHM9MTAwOSxsPTEsYz0zZTMpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6dkp0Kyt9KSx0aGlzLnV1aWQ9WFp0KCksdGhpcy5uYW1lPSIiLHRoaXMuaW1hZ2U9dCx0aGlzLm1pcG1hcHM9W10sdGhpcy5tYXBwaW5nPWUsdGhpcy53cmFwUz1uLHRoaXMud3JhcFQ9aSx0aGlzLm1hZ0ZpbHRlcj1yLHRoaXMubWluRmlsdGVyPW8sdGhpcy5hbmlzb3Ryb3B5PWwsdGhpcy5mb3JtYXQ9YSx0aGlzLmludGVybmFsRm9ybWF0PW51bGwsdGhpcy50eXBlPXMsdGhpcy5vZmZzZXQ9bmV3IG1KdCgwLDApLHRoaXMucmVwZWF0PW5ldyBtSnQoMSwxKSx0aGlzLmNlbnRlcj1uZXcgbUp0KDAsMCksdGhpcy5yb3RhdGlvbj0wLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMCx0aGlzLm1hdHJpeD1uZXcgZ0p0LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5lbmNvZGluZz1jLHRoaXMudmVyc2lvbj0wLHRoaXMub25VcGRhdGU9bnVsbCx0aGlzLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaW1hZ2U9dC5pbWFnZSx0aGlzLm1pcG1hcHM9dC5taXBtYXBzLnNsaWNlKDApLHRoaXMubWFwcGluZz10Lm1hcHBpbmcsdGhpcy53cmFwUz10LndyYXBTLHRoaXMud3JhcFQ9dC53cmFwVCx0aGlzLm1hZ0ZpbHRlcj10Lm1hZ0ZpbHRlcix0aGlzLm1pbkZpbHRlcj10Lm1pbkZpbHRlcix0aGlzLmFuaXNvdHJvcHk9dC5hbmlzb3Ryb3B5LHRoaXMuZm9ybWF0PXQuZm9ybWF0LHRoaXMuaW50ZXJuYWxGb3JtYXQ9dC5pbnRlcm5hbEZvcm1hdCx0aGlzLnR5cGU9dC50eXBlLHRoaXMub2Zmc2V0LmNvcHkodC5vZmZzZXQpLHRoaXMucmVwZWF0LmNvcHkodC5yZXBlYXQpLHRoaXMuY2VudGVyLmNvcHkodC5jZW50ZXIpLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4LmNvcHkodC5tYXRyaXgpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPXQuZ2VuZXJhdGVNaXBtYXBzLHRoaXMucHJlbXVsdGlwbHlBbHBoYT10LnByZW11bHRpcGx5QWxwaGEsdGhpcy5mbGlwWT10LmZsaXBZLHRoaXMudW5wYWNrQWxpZ25tZW50PXQudW5wYWNrQWxpZ25tZW50LHRoaXMuZW5jb2Rpbmc9dC5lbmNvZGluZyx0aGlzfXRvSlNPTih0KXtjb25zdCBlPXZvaWQgMD09PXR8fCJzdHJpbmciPT10eXBlb2YgdDtpZighZSYmdm9pZCAwIT09dC50ZXh0dXJlc1t0aGlzLnV1aWRdKXJldHVybiB0LnRleHR1cmVzW3RoaXMudXVpZF07Y29uc3Qgbj17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IlRleHR1cmUiLGdlbmVyYXRvcjoiVGV4dHVyZS50b0pTT04ifSx1dWlkOnRoaXMudXVpZCxuYW1lOnRoaXMubmFtZSxtYXBwaW5nOnRoaXMubWFwcGluZyxyZXBlYXQ6W3RoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueV0sb2Zmc2V0Olt0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnldLGNlbnRlcjpbdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55XSxyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHdyYXA6W3RoaXMud3JhcFMsdGhpcy53cmFwVF0sZm9ybWF0OnRoaXMuZm9ybWF0LHR5cGU6dGhpcy50eXBlLGVuY29kaW5nOnRoaXMuZW5jb2RpbmcsbWluRmlsdGVyOnRoaXMubWluRmlsdGVyLG1hZ0ZpbHRlcjp0aGlzLm1hZ0ZpbHRlcixhbmlzb3Ryb3B5OnRoaXMuYW5pc290cm9weSxmbGlwWTp0aGlzLmZsaXBZLHByZW11bHRpcGx5QWxwaGE6dGhpcy5wcmVtdWx0aXBseUFscGhhLHVucGFja0FsaWdubWVudDp0aGlzLnVucGFja0FsaWdubWVudH07aWYodm9pZCAwIT09dGhpcy5pbWFnZSl7Y29uc3QgaT10aGlzLmltYWdlO2lmKHZvaWQgMD09PWkudXVpZCYmKGkudXVpZD1YWnQoKSksIWUmJnZvaWQgMD09PXQuaW1hZ2VzW2kudXVpZF0pe2xldCBlO2lmKEFycmF5LmlzQXJyYXkoaSkpe2U9W107Zm9yKGxldCB0PTAsbj1pLmxlbmd0aDt0PG47dCsrKWUucHVzaCh4SnQoaVt0XS5pc0RhdGFUZXh0dXJlP2lbdF0uaW1hZ2U6aVt0XSkpfWVsc2UgZT14SnQoaSk7dC5pbWFnZXNbaS51dWlkXT17dXVpZDppLnV1aWQsdXJsOmV9fW4uaW1hZ2U9aS51dWlkfXJldHVybiBlfHwodC50ZXh0dXJlc1t0aGlzLnV1aWRdPW4pLG59ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX10cmFuc2Zvcm1Vdih0KXtpZih0aGlzLm1hcHBpbmchPT1VS3QpcmV0dXJuIHQ7aWYodC5hcHBseU1hdHJpeDModGhpcy5tYXRyaXgpLHQueDwwfHx0Lng+MSlzd2l0Y2godGhpcy53cmFwUyl7Y2FzZSAkS3Q6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWs7Y2FzZSBLS3Q6dC54PXQueDwwPzA6MTticmVhaztjYXNlIFpLdDp0Lng9MT09PU1hdGguYWJzKE1hdGguZmxvb3IodC54KSUyKT9NYXRoLmNlaWwodC54KS10Lng6dC54LU1hdGguZmxvb3IodC54KX1pZih0Lnk8MHx8dC55PjEpc3dpdGNoKHRoaXMud3JhcFQpe2Nhc2UgJEt0OnQueT10LnktTWF0aC5mbG9vcih0LnkpO2JyZWFrO2Nhc2UgS0t0OnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSBaS3Q6dC55PTE9PT1NYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik/TWF0aC5jZWlsKHQueSktdC55OnQueS1NYXRoLmZsb29yKHQueSl9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9c2V0IG5lZWRzVXBkYXRlKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9fWZ1bmN0aW9uIHhKdCh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHwidW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSW1hZ2VCaXRtYXAmJnQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcD95SnQuZ2V0RGF0YVVSTCh0KTp0LmRhdGE/e2RhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5kYXRhKSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodCx0eXBlOnQuZGF0YS5jb25zdHJ1Y3Rvci5uYW1lfTooY29uc29sZS53YXJuKCJUSFJFRS5UZXh0dXJlOiBVbmFibGUgdG8gc2VyaWFsaXplIFRleHR1cmUuIikse30pfWJKdC5ERUZBVUxUX0lNQUdFPXZvaWQgMCxiSnQuREVGQVVMVF9NQVBQSU5HPVVLdCxiSnQucHJvdG90eXBlLmlzVGV4dHVyZT0hMDtjbGFzcyB3SnR7Y29uc3RydWN0b3IodD0wLGU9MCxuPTAsaT0xKXt0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9bix0aGlzLnc9aX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy56fXNldCB3aWR0aCh0KXt0aGlzLno9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMud31zZXQgaGVpZ2h0KHQpe3RoaXMudz10fXNldCh0LGUsbixpKXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PWUsdGhpcy56PW4sdGhpcy53PWksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXMudz10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Vyh0KXtyZXR1cm4gdGhpcy53PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztjYXNlIDI6dGhpcy56PWU7YnJlYWs7Y2FzZSAzOnRoaXMudz1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtjYXNlIDM6cmV0dXJuIHRoaXMudztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueix0aGlzLncpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXMudz12b2lkIDAhPT10Lnc/dC53OjEsdGhpc31hZGQodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQsZSkpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzLncrPXQudyx0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXMudys9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpcy56PXQueitlLnosdGhpcy53PXQudytlLncsdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXMueis9dC56KmUsdGhpcy53Kz10LncqZSx0aGlzfXN1Yih0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxlKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMudy09dC53LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpcy53LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzLno9dC56LWUueix0aGlzLnc9dC53LWUudyx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzLncqPXQudyx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzLncqPXQsdGhpc31hcHBseU1hdHJpeDQodCl7Y29uc3QgZT10aGlzLngsbj10aGlzLnksaT10aGlzLnoscj10aGlzLncsbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSplK29bNF0qbitvWzhdKmkrb1sxMl0qcix0aGlzLnk9b1sxXSplK29bNV0qbitvWzldKmkrb1sxM10qcix0aGlzLno9b1syXSplK29bNl0qbitvWzEwXSppK29bMTRdKnIsdGhpcy53PW9bM10qZStvWzddKm4rb1sxMV0qaStvWzE1XSpyLHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9c2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb24odCl7dGhpcy53PTIqTWF0aC5hY29zKHQudyk7Y29uc3QgZT1NYXRoLnNxcnQoMS10LncqdC53KTtyZXR1cm4gZTwxZS00Pyh0aGlzLng9MSx0aGlzLnk9MCx0aGlzLno9MCk6KHRoaXMueD10LngvZSx0aGlzLnk9dC55L2UsdGhpcy56PXQuei9lKSx0aGlzfXNldEF4aXNBbmdsZUZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgZSxuLGkscjtjb25zdCBvPS4wMSxhPS4xLHM9dC5lbGVtZW50cyxsPXNbMF0sYz1zWzRdLHU9c1s4XSxoPXNbMV0sZD1zWzVdLHA9c1s5XSxmPXNbMl0sbT1zWzZdLGc9c1sxMF07aWYoTWF0aC5hYnMoYy1oKTxvJiZNYXRoLmFicyh1LWYpPG8mJk1hdGguYWJzKHAtbSk8byl7aWYoTWF0aC5hYnMoYytoKTxhJiZNYXRoLmFicyh1K2YpPGEmJk1hdGguYWJzKHArbSk8YSYmTWF0aC5hYnMobCtkK2ctMyk8YSlyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCksdGhpcztlPU1hdGguUEk7Y29uc3QgdD0obCsxKS8yLHM9KGQrMSkvMixfPShnKzEpLzIseT0oYytoKS80LHY9KHUrZikvNCxiPShwK20pLzQ7cmV0dXJuIHQ+cyYmdD5fP3Q8bz8obj0wLGk9LjcwNzEwNjc4MSxyPS43MDcxMDY3ODEpOihuPU1hdGguc3FydCh0KSxpPXkvbixyPXYvbik6cz5fP3M8bz8obj0uNzA3MTA2NzgxLGk9MCxyPS43MDcxMDY3ODEpOihpPU1hdGguc3FydChzKSxuPXkvaSxyPWIvaSk6XzxvPyhuPS43MDcxMDY3ODEsaT0uNzA3MTA2NzgxLHI9MCk6KHI9TWF0aC5zcXJ0KF8pLG49di9yLGk9Yi9yKSx0aGlzLnNldChuLGkscixlKSx0aGlzfWxldCBfPU1hdGguc3FydCgobS1wKSoobS1wKSsodS1mKSoodS1mKSsoaC1jKSooaC1jKSk7cmV0dXJuIE1hdGguYWJzKF8pPC4wMDEmJihfPTEpLHRoaXMueD0obS1wKS9fLHRoaXMueT0odS1mKS9fLHRoaXMuej0oaC1jKS9fLHRoaXMudz1NYXRoLmFjb3MoKGwrZCtnLTEpLzIpLHRoaXN9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5taW4odGhpcy53LHQudyksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpcy56PU1hdGgubWF4KHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1heCh0aGlzLncsdC53KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LncsTWF0aC5taW4oZS53LHRoaXMudykpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLncpKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7Y29uc3Qgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzLnc9TWF0aC5jZWlsKHRoaXMudyksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzLnc9TWF0aC5yb3VuZCh0aGlzLncpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpcy53PXRoaXMudzwwP01hdGguY2VpbCh0aGlzLncpOk1hdGguZmxvb3IodGhpcy53KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzLno9LXRoaXMueix0aGlzLnc9LXRoaXMudyx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55K3RoaXMueip0LnordGhpcy53KnQud31sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMudyl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopK01hdGguYWJzKHRoaXMudyl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzLnorPSh0LnotdGhpcy56KSplLHRoaXMudys9KHQudy10aGlzLncpKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsbil7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKm4sdGhpcy55PXQueSsoZS55LXQueSkqbix0aGlzLno9dC56KyhlLnotdC56KSpuLHRoaXMudz10LncrKGUudy10LncpKm4sdGhpc31lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnomJnQudz09PXRoaXMud31mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXMuej10W2UrMl0sdGhpcy53PXRbZSszXSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMueCx0W2UrMV09dGhpcy55LHRbZSsyXT10aGlzLnosdFtlKzNdPXRoaXMudyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLG4pe3JldHVybiB2b2lkIDAhPT1uJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpcy56PXQuZ2V0WihlKSx0aGlzLnc9dC5nZXRXKGUpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXMudz1NYXRoLnJhbmRvbSgpLHRoaXN9fXdKdC5wcm90b3R5cGUuaXNWZWN0b3I0PSEwO2NsYXNzIFNKdCBleHRlbmRzIGpadHtjb25zdHJ1Y3Rvcih0LGUsbj17fSl7c3VwZXIoKSx0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLmRlcHRoPTEsdGhpcy5zY2lzc29yPW5ldyB3SnQoMCwwLHQsZSksdGhpcy5zY2lzc29yVGVzdD0hMSx0aGlzLnZpZXdwb3J0PW5ldyB3SnQoMCwwLHQsZSksdGhpcy50ZXh0dXJlPW5ldyBiSnQodm9pZCAwLG4ubWFwcGluZyxuLndyYXBTLG4ud3JhcFQsbi5tYWdGaWx0ZXIsbi5taW5GaWx0ZXIsbi5mb3JtYXQsbi50eXBlLG4uYW5pc290cm9weSxuLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6ZSxkZXB0aDoxfSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPXZvaWQgMCE9PW4uZ2VuZXJhdGVNaXBtYXBzJiZuLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPXZvaWQgMCE9PW4ubWluRmlsdGVyP24ubWluRmlsdGVyOmVadCx0aGlzLmRlcHRoQnVmZmVyPXZvaWQgMD09PW4uZGVwdGhCdWZmZXJ8fG4uZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXZvaWQgMCE9PW4uc3RlbmNpbEJ1ZmZlciYmbi5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXZvaWQgMCE9PW4uZGVwdGhUZXh0dXJlP24uZGVwdGhUZXh0dXJlOm51bGx9c2V0VGV4dHVyZSh0KXt0LmltYWdlPXt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodCxkZXB0aDp0aGlzLmRlcHRofSx0aGlzLnRleHR1cmU9dH1zZXRTaXplKHQsZSxuPTEpe3RoaXMud2lkdGg9PT10JiZ0aGlzLmhlaWdodD09PWUmJnRoaXMuZGVwdGg9PT1ufHwodGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5kZXB0aD1uLHRoaXMudGV4dHVyZS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZS5pbWFnZS5oZWlnaHQ9ZSx0aGlzLnRleHR1cmUuaW1hZ2UuZGVwdGg9bix0aGlzLmRpc3Bvc2UoKSksdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsZSksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxlKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuY29weSh0LnZpZXdwb3J0KSx0aGlzLnRleHR1cmU9dC50ZXh0dXJlLmNsb25lKCksdGhpcy50ZXh0dXJlLmltYWdlPXsuLi50aGlzLnRleHR1cmUuaW1hZ2V9LHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19U0p0LnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyVGFyZ2V0PSEwO2NsYXNzIE1KdCBleHRlbmRzIFNKdHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCxlKTtjb25zdCBpPXRoaXMudGV4dHVyZTt0aGlzLnRleHR1cmU9W107Zm9yKGxldCB0PTA7dDxuO3QrKyl0aGlzLnRleHR1cmVbdF09aS5jbG9uZSgpfXNldFNpemUodCxlLG49MSl7aWYodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09ZXx8dGhpcy5kZXB0aCE9PW4pe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9bjtmb3IobGV0IGk9MCxyPXRoaXMudGV4dHVyZS5sZW5ndGg7aTxyO2krKyl0aGlzLnRleHR1cmVbaV0uaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmVbaV0uaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlW2ldLmltYWdlLmRlcHRoPW47dGhpcy5kaXNwb3NlKCl9cmV0dXJuIHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSksdGhpc31jb3B5KHQpe3RoaXMuZGlzcG9zZSgpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXMudGV4dHVyZS5sZW5ndGg9MDtmb3IobGV0IGU9MCxuPXQudGV4dHVyZS5sZW5ndGg7ZTxuO2UrKyl0aGlzLnRleHR1cmVbZV09dC50ZXh0dXJlW2VdLmNsb25lKCk7cmV0dXJuIHRoaXN9fU1KdC5wcm90b3R5cGUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz0hMDtjbGFzcyBFSnQgZXh0ZW5kcyBTSnR7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHQsZSxuKSx0aGlzLnNhbXBsZXM9NH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnNhbXBsZXM9dC5zYW1wbGVzLHRoaXN9fUVKdC5wcm90b3R5cGUuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PSEwO2NsYXNzIFRKdHtjb25zdHJ1Y3Rvcih0PTAsZT0wLG49MCxpPTEpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1uLHRoaXMuX3c9aX1zdGF0aWMgc2xlcnAodCxlLG4saSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogU3RhdGljIC5zbGVycCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBxbS5zbGVycFF1YXRlcm5pb25zKCBxYSwgcWIsIHQgKSBpbnN0ZWFkLiIpLG4uc2xlcnBRdWF0ZXJuaW9ucyh0LGUsaSl9c3RhdGljIHNsZXJwRmxhdCh0LGUsbixpLHIsbyxhKXtsZXQgcz1uW2krMF0sbD1uW2krMV0sYz1uW2krMl0sdT1uW2krM107Y29uc3QgaD1yW28rMF0sZD1yW28rMV0scD1yW28rMl0sZj1yW28rM107aWYoMD09PWEpcmV0dXJuIHRbZSswXT1zLHRbZSsxXT1sLHRbZSsyXT1jLHZvaWQodFtlKzNdPXUpO2lmKDE9PT1hKXJldHVybiB0W2UrMF09aCx0W2UrMV09ZCx0W2UrMl09cCx2b2lkKHRbZSszXT1mKTtpZih1IT09Znx8cyE9PWh8fGwhPT1kfHxjIT09cCl7bGV0IHQ9MS1hO2NvbnN0IGU9cypoK2wqZCtjKnArdSpmLG49ZT49MD8xOi0xLGk9MS1lKmU7aWYoaT5OdW1iZXIuRVBTSUxPTil7Y29uc3Qgcj1NYXRoLnNxcnQoaSksbz1NYXRoLmF0YW4yKHIsZSpuKTt0PU1hdGguc2luKHQqbykvcixhPU1hdGguc2luKGEqbykvcn1jb25zdCByPWEqbjtpZihzPXMqdCtoKnIsbD1sKnQrZCpyLGM9Yyp0K3Aqcix1PXUqdCtmKnIsdD09PTEtYSl7Y29uc3QgdD0xL01hdGguc3FydChzKnMrbCpsK2MqYyt1KnUpO3MqPXQsbCo9dCxjKj10LHUqPXR9fXRbZV09cyx0W2UrMV09bCx0W2UrMl09Yyx0W2UrM109dX1zdGF0aWMgbXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxlLG4saSxyLG8pe2NvbnN0IGE9bltpXSxzPW5baSsxXSxsPW5baSsyXSxjPW5baSszXSx1PXJbb10saD1yW28rMV0sZD1yW28rMl0scD1yW28rM107cmV0dXJuIHRbZV09YSpwK2MqdStzKmQtbCpoLHRbZSsxXT1zKnArYypoK2wqdS1hKmQsdFtlKzJdPWwqcCtjKmQrYSpoLXMqdSx0W2UrM109YypwLWEqdS1zKmgtbCpkLHR9Z2V0IHgoKXtyZXR1cm4gdGhpcy5feH1zZXQgeCh0KXt0aGlzLl94PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3l9c2V0IHkodCl7dGhpcy5feT10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeigpe3JldHVybiB0aGlzLl96fXNldCB6KHQpe3RoaXMuX3o9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHcoKXtyZXR1cm4gdGhpcy5fd31zZXQgdyh0KXt0aGlzLl93PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsbixpKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PW4sdGhpcy5fdz1pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96LHRoaXMuX3cpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC54LHRoaXMuX3k9dC55LHRoaXMuX3o9dC56LHRoaXMuX3c9dC53LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21FdWxlcih0LGUpe2lmKCF0fHwhdC5pc0V1bGVyKXRocm93IG5ldyBFcnJvcigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7Y29uc3Qgbj10Ll94LGk9dC5feSxyPXQuX3osbz10Ll9vcmRlcixhPU1hdGguY29zLHM9TWF0aC5zaW4sbD1hKG4vMiksYz1hKGkvMiksdT1hKHIvMiksaD1zKG4vMiksZD1zKGkvMikscD1zKHIvMik7c3dpdGNoKG8pe2Nhc2UiWFlaIjp0aGlzLl94PWgqYyp1K2wqZCpwLHRoaXMuX3k9bCpkKnUtaCpjKnAsdGhpcy5fej1sKmMqcCtoKmQqdSx0aGlzLl93PWwqYyp1LWgqZCpwO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PWgqYyp1K2wqZCpwLHRoaXMuX3k9bCpkKnUtaCpjKnAsdGhpcy5fej1sKmMqcC1oKmQqdSx0aGlzLl93PWwqYyp1K2gqZCpwO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PWgqYyp1LWwqZCpwLHRoaXMuX3k9bCpkKnUraCpjKnAsdGhpcy5fej1sKmMqcCtoKmQqdSx0aGlzLl93PWwqYyp1LWgqZCpwO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl94PWgqYyp1LWwqZCpwLHRoaXMuX3k9bCpkKnUraCpjKnAsdGhpcy5fej1sKmMqcC1oKmQqdSx0aGlzLl93PWwqYyp1K2gqZCpwO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl94PWgqYyp1K2wqZCpwLHRoaXMuX3k9bCpkKnUraCpjKnAsdGhpcy5fej1sKmMqcC1oKmQqdSx0aGlzLl93PWwqYyp1LWgqZCpwO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl94PWgqYyp1LWwqZCpwLHRoaXMuX3k9bCpkKnUtaCpjKnAsdGhpcy5fej1sKmMqcCtoKmQqdSx0aGlzLl93PWwqYyp1K2gqZCpwO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitvKX1yZXR1cm4hMSE9PWUmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21BeGlzQW5nbGUodCxlKXtjb25zdCBuPWUvMixpPU1hdGguc2luKG4pO3JldHVybiB0aGlzLl94PXQueCppLHRoaXMuX3k9dC55KmksdGhpcy5fej10LnoqaSx0aGlzLl93PU1hdGguY29zKG4pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KXtjb25zdCBlPXQuZWxlbWVudHMsbj1lWzBdLGk9ZVs0XSxyPWVbOF0sbz1lWzFdLGE9ZVs1XSxzPWVbOV0sbD1lWzJdLGM9ZVs2XSx1PWVbMTBdLGg9bithK3U7aWYoaD4wKXtjb25zdCB0PS41L01hdGguc3FydChoKzEpO3RoaXMuX3c9LjI1L3QsdGhpcy5feD0oYy1zKSp0LHRoaXMuX3k9KHItbCkqdCx0aGlzLl96PShvLWkpKnR9ZWxzZSBpZihuPmEmJm4+dSl7Y29uc3QgdD0yKk1hdGguc3FydCgxK24tYS11KTt0aGlzLl93PShjLXMpL3QsdGhpcy5feD0uMjUqdCx0aGlzLl95PShpK28pL3QsdGhpcy5fej0ocitsKS90fWVsc2UgaWYoYT51KXtjb25zdCB0PTIqTWF0aC5zcXJ0KDErYS1uLXUpO3RoaXMuX3c9KHItbCkvdCx0aGlzLl94PShpK28pL3QsdGhpcy5feT0uMjUqdCx0aGlzLl96PShzK2MpL3R9ZWxzZXtjb25zdCB0PTIqTWF0aC5zcXJ0KDErdS1uLWEpO3RoaXMuX3c9KG8taSkvdCx0aGlzLl94PShyK2wpL3QsdGhpcy5feT0ocytjKS90LHRoaXMuX3o9LjI1KnR9cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Vbml0VmVjdG9ycyh0LGUpe2xldCBuPXQuZG90KGUpKzE7cmV0dXJuIG48TnVtYmVyLkVQU0lMT04/KG49MCxNYXRoLmFicyh0LngpPk1hdGguYWJzKHQueik/KHRoaXMuX3g9LXQueSx0aGlzLl95PXQueCx0aGlzLl96PTAsdGhpcy5fdz1uKToodGhpcy5feD0wLHRoaXMuX3k9LXQueix0aGlzLl96PXQueSx0aGlzLl93PW4pKToodGhpcy5feD10LnkqZS56LXQueiplLnksdGhpcy5feT10LnoqZS54LXQueCplLnosdGhpcy5fej10LngqZS55LXQueSplLngsdGhpcy5fdz1uKSx0aGlzLm5vcm1hbGl6ZSgpfWFuZ2xlVG8odCl7cmV0dXJuIDIqTWF0aC5hY29zKE1hdGguYWJzKCRadCh0aGlzLmRvdCh0KSwtMSwxKSkpfXJvdGF0ZVRvd2FyZHModCxlKXtjb25zdCBuPXRoaXMuYW5nbGVUbyh0KTtpZigwPT09bilyZXR1cm4gdGhpcztjb25zdCBpPU1hdGgubWluKDEsZS9uKTtyZXR1cm4gdGhpcy5zbGVycCh0LGkpLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMSl9aW52ZXJ0KCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCl9Y29uanVnYXRlKCl7cmV0dXJuIHRoaXMuX3gqPS0xLHRoaXMuX3kqPS0xLHRoaXMuX3oqPS0xLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy5feCp0Ll94K3RoaXMuX3kqdC5feSt0aGlzLl96KnQuX3ordGhpcy5fdyp0Ll93fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fd31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fdyl9bm9ybWFsaXplKCl7bGV0IHQ9dGhpcy5sZW5ndGgoKTtyZXR1cm4gMD09PXQ/KHRoaXMuX3g9MCx0aGlzLl95PTAsdGhpcy5fej0wLHRoaXMuX3c9MSk6KHQ9MS90LHRoaXMuX3g9dGhpcy5feCp0LHRoaXMuX3k9dGhpcy5feSp0LHRoaXMuX3o9dGhpcy5feip0LHRoaXMuX3c9dGhpcy5fdyp0KSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5UXVhdGVybmlvbnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LGUpKTp0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsdGhpcyl9bXVsdGlwbHlRdWF0ZXJuaW9ucyh0LGUpe2NvbnN0IG49dC5feCxpPXQuX3kscj10Ll96LG89dC5fdyxhPWUuX3gscz1lLl95LGw9ZS5feixjPWUuX3c7cmV0dXJuIHRoaXMuX3g9bipjK28qYStpKmwtcipzLHRoaXMuX3k9aSpjK28qcytyKmEtbipsLHRoaXMuX3o9cipjK28qbCtuKnMtaSphLHRoaXMuX3c9bypjLW4qYS1pKnMtcipsLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNsZXJwKHQsZSl7aWYoMD09PWUpcmV0dXJuIHRoaXM7aWYoMT09PWUpcmV0dXJuIHRoaXMuY29weSh0KTtjb25zdCBuPXRoaXMuX3gsaT10aGlzLl95LHI9dGhpcy5feixvPXRoaXMuX3c7bGV0IGE9byp0Ll93K24qdC5feCtpKnQuX3krcip0Ll96O2lmKGE8MD8odGhpcy5fdz0tdC5fdyx0aGlzLl94PS10Ll94LHRoaXMuX3k9LXQuX3ksdGhpcy5fej0tdC5feixhPS1hKTp0aGlzLmNvcHkodCksYT49MSlyZXR1cm4gdGhpcy5fdz1vLHRoaXMuX3g9bix0aGlzLl95PWksdGhpcy5fej1yLHRoaXM7Y29uc3Qgcz0xLWEqYTtpZihzPD1OdW1iZXIuRVBTSUxPTil7Y29uc3QgdD0xLWU7cmV0dXJuIHRoaXMuX3c9dCpvK2UqdGhpcy5fdyx0aGlzLl94PXQqbitlKnRoaXMuX3gsdGhpcy5feT10KmkrZSp0aGlzLl95LHRoaXMuX3o9dCpyK2UqdGhpcy5feix0aGlzLm5vcm1hbGl6ZSgpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNvbnN0IGw9TWF0aC5zcXJ0KHMpLGM9TWF0aC5hdGFuMihsLGEpLHU9TWF0aC5zaW4oKDEtZSkqYykvbCxoPU1hdGguc2luKGUqYykvbDtyZXR1cm4gdGhpcy5fdz1vKnUrdGhpcy5fdypoLHRoaXMuX3g9bip1K3RoaXMuX3gqaCx0aGlzLl95PWkqdSt0aGlzLl95KmgsdGhpcy5fej1yKnUrdGhpcy5feipoLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNsZXJwUXVhdGVybmlvbnModCxlLG4pe3RoaXMuY29weSh0KS5zbGVycChlLG4pfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fdz09PXRoaXMuX3d9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy5feD10W2VdLHRoaXMuX3k9dFtlKzFdLHRoaXMuX3o9dFtlKzJdLHRoaXMuX3c9dFtlKzNdLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMuX3gsdFtlKzFdPXRoaXMuX3ksdFtlKzJdPXRoaXMuX3osdFtlKzNdPXRoaXMuX3csdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMuX3g9dC5nZXRYKGUpLHRoaXMuX3k9dC5nZXRZKGUpLHRoaXMuX3o9dC5nZXRaKGUpLHRoaXMuX3c9dC5nZXRXKGUpLHRoaXN9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319VEp0LnByb3RvdHlwZS5pc1F1YXRlcm5pb249ITA7Y2xhc3MgQ0p0e2NvbnN0cnVjdG9yKHQ9MCxlPTAsbj0wKXt0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9bn1zZXQodCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj10aGlzLnopLHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1uLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpcy56PXQueitlLnosdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXMueis9dC56KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzLno9dC56LWUueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5VmVjdG9ycyh0LGUpKToodGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcyl9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXN9bXVsdGlwbHlWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngqZS54LHRoaXMueT10LnkqZS55LHRoaXMuej10LnoqZS56LHRoaXN9YXBwbHlFdWxlcih0KXtyZXR1cm4gdCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlFdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIiksdGhpcy5hcHBseVF1YXRlcm5pb24oa0p0LnNldEZyb21FdWxlcih0KSl9YXBwbHlBeGlzQW5nbGUodCxlKXtyZXR1cm4gdGhpcy5hcHBseVF1YXRlcm5pb24oa0p0LnNldEZyb21BeGlzQW5nbGUodCxlKSl9YXBwbHlNYXRyaXgzKHQpe2NvbnN0IGU9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LHI9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PXJbMF0qZStyWzNdKm4rcls2XSppLHRoaXMueT1yWzFdKmUrcls0XSpuK3JbN10qaSx0aGlzLno9clsyXSplK3JbNV0qbityWzhdKmksdGhpc31hcHBseU5vcm1hbE1hdHJpeCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDModCkubm9ybWFsaXplKCl9YXBwbHlNYXRyaXg0KHQpe2NvbnN0IGU9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LHI9dC5lbGVtZW50cyxvPTEvKHJbM10qZStyWzddKm4rclsxMV0qaStyWzE1XSk7cmV0dXJuIHRoaXMueD0oclswXSplK3JbNF0qbityWzhdKmkrclsxMl0pKm8sdGhpcy55PShyWzFdKmUrcls1XSpuK3JbOV0qaStyWzEzXSkqbyx0aGlzLno9KHJbMl0qZStyWzZdKm4rclsxMF0qaStyWzE0XSkqbyx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtjb25zdCBlPXRoaXMueCxuPXRoaXMueSxpPXRoaXMueixyPXQueCxvPXQueSxhPXQueixzPXQudyxsPXMqZStvKmktYSpuLGM9cypuK2EqZS1yKmksdT1zKmkrcipuLW8qZSxoPS1yKmUtbypuLWEqaTtyZXR1cm4gdGhpcy54PWwqcytoKi1yK2MqLWEtdSotbyx0aGlzLnk9YypzK2gqLW8rdSotci1sKi1hLHRoaXMuej11KnMraCotYStsKi1vLWMqLXIsdGhpc31wcm9qZWN0KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkSW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQucHJvamVjdGlvbk1hdHJpeCl9dW5wcm9qZWN0KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCl9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2NvbnN0IGU9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LHI9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PXJbMF0qZStyWzRdKm4rcls4XSppLHRoaXMueT1yWzFdKmUrcls1XSpuK3JbOV0qaSx0aGlzLno9clsyXSplK3JbNl0qbityWzEwXSppLHRoaXMubm9ybWFsaXplKCl9ZGl2aWRlKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzLnovPXQueix0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpcy56PU1hdGgubWF4KHRoaXMueix0LnopLHRoaXN9Y2xhbXAodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihlLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihlLnksdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQueixNYXRoLm1pbihlLnosdGhpcy56KSksdGhpc31jbGFtcFNjYWxhcih0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnopKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7Y29uc3Qgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzLnorPSh0LnotdGhpcy56KSplLHRoaXN9bGVycFZlY3RvcnModCxlLG4pe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSpuLHRoaXMueT10LnkrKGUueS10LnkpKm4sdGhpcy56PXQueisoZS56LXQueikqbix0aGlzfWNyb3NzKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LGUpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LGUpe2NvbnN0IG49dC54LGk9dC55LHI9dC56LG89ZS54LGE9ZS55LHM9ZS56O3JldHVybiB0aGlzLng9aSpzLXIqYSx0aGlzLnk9cipvLW4qcyx0aGlzLno9biphLWkqbyx0aGlzfXByb2plY3RPblZlY3Rvcih0KXtjb25zdCBlPXQubGVuZ3RoU3EoKTtpZigwPT09ZSlyZXR1cm4gdGhpcy5zZXQoMCwwLDApO2NvbnN0IG49dC5kb3QodGhpcykvZTtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKG4pfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBBSnQuY29weSh0aGlzKS5wcm9qZWN0T25WZWN0b3IodCksdGhpcy5zdWIoQUp0KX1yZWZsZWN0KHQpe3JldHVybiB0aGlzLnN1YihBSnQuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtjb25zdCBlPU1hdGguc3FydCh0aGlzLmxlbmd0aFNxKCkqdC5sZW5ndGhTcSgpKTtpZigwPT09ZSlyZXR1cm4gTWF0aC5QSS8yO2NvbnN0IG49dGhpcy5kb3QodCkvZTtyZXR1cm4gTWF0aC5hY29zKCRadChuLC0xLDEpKX1kaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VUb1NxdWFyZWQodCl7Y29uc3QgZT10aGlzLngtdC54LG49dGhpcy55LXQueSxpPXRoaXMuei10Lno7cmV0dXJuIGUqZStuKm4raSppfW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpK01hdGguYWJzKHRoaXMuei10LnopfXNldEZyb21TcGhlcmljYWwodCl7cmV0dXJuIHRoaXMuc2V0RnJvbVNwaGVyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnBoaSx0LnRoZXRhKX1zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQsZSxuKXtjb25zdCBpPU1hdGguc2luKGUpKnQ7cmV0dXJuIHRoaXMueD1pKk1hdGguc2luKG4pLHRoaXMueT1NYXRoLmNvcyhlKSp0LHRoaXMuej1pKk1hdGguY29zKG4pLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQsZSxuKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4oZSksdGhpcy55PW4sdGhpcy56PXQqTWF0aC5jb3MoZSksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7Y29uc3QgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9ZVsxMl0sdGhpcy55PWVbMTNdLHRoaXMuej1lWzE0XSx0aGlzfXNldEZyb21NYXRyaXhTY2FsZSh0KXtjb25zdCBlPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLG49dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMSkubGVuZ3RoKCksaT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gdGhpcy54PWUsdGhpcy55PW4sdGhpcy56PWksdGhpc31zZXRGcm9tTWF0cml4Q29sdW1uKHQsZSl7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsNCplKX1zZXRGcm9tTWF0cml4M0NvbHVtbih0LGUpe3JldHVybiB0aGlzLmZyb21BcnJheSh0LmVsZW1lbnRzLDMqZSl9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueSYmdC56PT09dGhpcy56fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpcy56PXRbZSsyXSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMueCx0W2UrMV09dGhpcy55LHRbZSsyXT10aGlzLnosdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxuKXtyZXR1cm4gdm9pZCAwIT09biYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXMuej10LmdldFooZSksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpc319Q0p0LnByb3RvdHlwZS5pc1ZlY3RvcjM9ITA7Y29uc3QgQUp0PW5ldyBDSnQsa0p0PW5ldyBUSnQ7Y2xhc3MgTEp0e2NvbnN0cnVjdG9yKHQ9bmV3IENKdCgxLzAsMS8wLDEvMCksZT1uZXcgQ0p0KC0xLzAsLTEvMCwtMS8wKSl7dGhpcy5taW49dCx0aGlzLm1heD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tQXJyYXkodCl7bGV0IGU9MS8wLG49MS8wLGk9MS8wLHI9LTEvMCxvPS0xLzAsYT0tMS8wO2ZvcihsZXQgcz0wLGw9dC5sZW5ndGg7czxsO3MrPTMpe2NvbnN0IGw9dFtzXSxjPXRbcysxXSx1PXRbcysyXTtsPGUmJihlPWwpLGM8biYmKG49YyksdTxpJiYoaT11KSxsPnImJihyPWwpLGM+byYmKG89YyksdT5hJiYoYT11KX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsbixpKSx0aGlzLm1heC5zZXQocixvLGEpLHRoaXN9c2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KXtsZXQgZT0xLzAsbj0xLzAsaT0xLzAscj0tMS8wLG89LTEvMCxhPS0xLzA7Zm9yKGxldCBzPTAsbD10LmNvdW50O3M8bDtzKyspe2NvbnN0IGw9dC5nZXRYKHMpLGM9dC5nZXRZKHMpLHU9dC5nZXRaKHMpO2w8ZSYmKGU9bCksYzxuJiYobj1jKSx1PGkmJihpPXUpLGw+ciYmKHI9bCksYz5vJiYobz1jKSx1PmEmJihhPXUpfXJldHVybiB0aGlzLm1pbi5zZXQoZSxuLGkpLHRoaXMubWF4LnNldChyLG8sYSksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2NvbnN0IG49Tkp0LmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihuKSx0aGlzLm1heC5jb3B5KHQpLmFkZChuKSx0aGlzfXNldEZyb21PYmplY3QodCl7cmV0dXJuIHRoaXMubWFrZUVtcHR5KCksdGhpcy5leHBhbmRCeU9iamVjdCh0KX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0KXt0LnVwZGF0ZVdvcmxkTWF0cml4KCExLCExKTtjb25zdCBlPXQuZ2VvbWV0cnk7dm9pZCAwIT09ZSYmKG51bGw9PT1lLmJvdW5kaW5nQm94JiZlLmNvbXB1dGVCb3VuZGluZ0JveCgpLElKdC5jb3B5KGUuYm91bmRpbmdCb3gpLElKdC5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy51bmlvbihJSnQpKTtjb25zdCBuPXQuY2hpbGRyZW47Zm9yKGxldCB0PTAsZT1uLmxlbmd0aDt0PGU7dCsrKXRoaXMuZXhwYW5kQnlPYmplY3Qoblt0XSk7cmV0dXJuIHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55fHx0Lno8dGhpcy5taW4uenx8dC56PnRoaXMubWF4LnopfWNvbnRhaW5zQm94KHQpe3JldHVybiB0aGlzLm1pbi54PD10Lm1pbi54JiZ0Lm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD10Lm1pbi55JiZ0Lm1heC55PD10aGlzLm1heC55JiZ0aGlzLm1pbi56PD10Lm1pbi56JiZ0Lm1heC56PD10aGlzLm1heC56fWdldFBhcmFtZXRlcih0LGUpe3JldHVybiBlLnNldCgodC54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLCh0LnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSksKHQuei10aGlzLm1pbi56KS8odGhpcy5tYXguei10aGlzLm1pbi56KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueXx8dC5tYXguejx0aGlzLm1pbi56fHx0Lm1pbi56PnRoaXMubWF4LnopfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuY2xhbXBQb2ludCh0LmNlbnRlcixOSnQpLE5KdC5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZSxuO3JldHVybiB0Lm5vcm1hbC54PjA/KGU9dC5ub3JtYWwueCp0aGlzLm1pbi54LG49dC5ub3JtYWwueCp0aGlzLm1heC54KTooZT10Lm5vcm1hbC54KnRoaXMubWF4Lngsbj10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8oZSs9dC5ub3JtYWwueSp0aGlzLm1pbi55LG4rPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KGUrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxuKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8oZSs9dC5ub3JtYWwueip0aGlzLm1pbi56LG4rPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KGUrPXQubm9ybWFsLnoqdGhpcy5tYXgueixuKz10Lm5vcm1hbC56KnRoaXMubWluLnopLGU8PS10LmNvbnN0YW50JiZuPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoRkp0KSxWSnQuc3ViVmVjdG9ycyh0aGlzLm1heCxGSnQpLFJKdC5zdWJWZWN0b3JzKHQuYSxGSnQpLE9KdC5zdWJWZWN0b3JzKHQuYixGSnQpLHpKdC5zdWJWZWN0b3JzKHQuYyxGSnQpLERKdC5zdWJWZWN0b3JzKE9KdCxSSnQpLEJKdC5zdWJWZWN0b3JzKHpKdCxPSnQpLEhKdC5zdWJWZWN0b3JzKFJKdCx6SnQpO2xldCBlPVswLC1ESnQueixESnQueSwwLC1CSnQueixCSnQueSwwLC1ISnQueixISnQueSxESnQueiwwLC1ESnQueCxCSnQueiwwLC1CSnQueCxISnQueiwwLC1ISnQueCwtREp0LnksREp0LngsMCwtQkp0LnksQkp0LngsMCwtSEp0LnksSEp0LngsMF07cmV0dXJuISFHSnQoZSxSSnQsT0p0LHpKdCxWSnQpJiYoZT1bMSwwLDAsMCwxLDAsMCwwLDFdLCEhR0p0KGUsUkp0LE9KdCx6SnQsVkp0KSYmKFVKdC5jcm9zc1ZlY3RvcnMoREp0LEJKdCksZT1bVUp0LngsVUp0LnksVUp0LnpdLEdKdChlLFJKdCxPSnQsekp0LFZKdCkpKX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBOSnQuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWdldEJvdW5kaW5nU3BoZXJlKHQpe3JldHVybiB0aGlzLmdldENlbnRlcih0LmNlbnRlciksdC5yYWRpdXM9LjUqdGhpcy5nZXRTaXplKE5KdCkubGVuZ3RoKCksdH1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzLmlzRW1wdHkoKSYmdGhpcy5tYWtlRW1wdHkoKSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc31hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpfHwoUEp0WzBdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFBKdFsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxQSnRbMl0uc2V0KHRoaXMubWluLngsdGhpcy5tYXgueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksUEp0WzNdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFBKdFs0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxQSnRbNV0uc2V0KHRoaXMubWF4LngsdGhpcy5taW4ueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksUEp0WzZdLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFBKdFs3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoUEp0KSksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMubWluLmFkZCh0KSx0aGlzLm1heC5hZGQodCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubWluLmVxdWFscyh0aGlzLm1pbikmJnQubWF4LmVxdWFscyh0aGlzLm1heCl9fUxKdC5wcm90b3R5cGUuaXNCb3gzPSEwO2NvbnN0IFBKdD1bbmV3IENKdCxuZXcgQ0p0LG5ldyBDSnQsbmV3IENKdCxuZXcgQ0p0LG5ldyBDSnQsbmV3IENKdCxuZXcgQ0p0XSxOSnQ9bmV3IENKdCxJSnQ9bmV3IExKdCxSSnQ9bmV3IENKdCxPSnQ9bmV3IENKdCx6SnQ9bmV3IENKdCxESnQ9bmV3IENKdCxCSnQ9bmV3IENKdCxISnQ9bmV3IENKdCxGSnQ9bmV3IENKdCxWSnQ9bmV3IENKdCxVSnQ9bmV3IENKdCxqSnQ9bmV3IENKdDtmdW5jdGlvbiBHSnQodCxlLG4saSxyKXtmb3IobGV0IG89MCxhPXQubGVuZ3RoLTM7bzw9YTtvKz0zKXtqSnQuZnJvbUFycmF5KHQsbyk7Y29uc3QgYT1yLngqTWF0aC5hYnMoakp0LngpK3IueSpNYXRoLmFicyhqSnQueSkrci56Kk1hdGguYWJzKGpKdC56KSxzPWUuZG90KGpKdCksbD1uLmRvdChqSnQpLGM9aS5kb3Qoakp0KTtpZihNYXRoLm1heCgtTWF0aC5tYXgocyxsLGMpLE1hdGgubWluKHMsbCxjKSk+YSlyZXR1cm4hMX1yZXR1cm4hMH1jb25zdCBXSnQ9bmV3IExKdCxxSnQ9bmV3IENKdCxZSnQ9bmV3IENKdCxYSnQ9bmV3IENKdDtjbGFzcyAkSnR7Y29uc3RydWN0b3IodD1uZXcgQ0p0LGU9LTEpe3RoaXMuY2VudGVyPXQsdGhpcy5yYWRpdXM9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0KSx0aGlzLnJhZGl1cz1lLHRoaXN9c2V0RnJvbVBvaW50cyh0LGUpe2NvbnN0IG49dGhpcy5jZW50ZXI7dm9pZCAwIT09ZT9uLmNvcHkoZSk6V0p0LnNldEZyb21Qb2ludHModCkuZ2V0Q2VudGVyKG4pO2xldCBpPTA7Zm9yKGxldCBlPTAscj10Lmxlbmd0aDtlPHI7ZSsrKWk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKHRbZV0pKTtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KGkpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMucmFkaXVzPDB9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMuY2VudGVyLnNldCgwLDAsMCksdGhpcy5yYWRpdXM9LTEsdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfWludGVyc2VjdHNTcGhlcmUodCl7Y29uc3QgZT10aGlzLnJhZGl1cyt0LnJhZGl1cztyZXR1cm4gdC5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD1lKmV9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzU3BoZXJlKHRoaXMpfWludGVyc2VjdHNQbGFuZSh0KXtyZXR1cm4gTWF0aC5hYnModC5kaXN0YW5jZVRvUG9pbnQodGhpcy5jZW50ZXIpKTw9dGhpcy5yYWRpdXN9Y2xhbXBQb2ludCh0LGUpe2NvbnN0IG49dGhpcy5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodCk7cmV0dXJuIGUuY29weSh0KSxuPnRoaXMucmFkaXVzKnRoaXMucmFkaXVzJiYoZS5zdWIodGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLGUubXVsdGlwbHlTY2FsYXIodGhpcy5yYWRpdXMpLmFkZCh0aGlzLmNlbnRlcikpLGV9Z2V0Qm91bmRpbmdCb3godCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpPyh0Lm1ha2VFbXB0eSgpLHQpOih0LnNldCh0aGlzLmNlbnRlcix0aGlzLmNlbnRlciksdC5leHBhbmRCeVNjYWxhcih0aGlzLnJhZGl1cyksdCl9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLmNlbnRlci5hcHBseU1hdHJpeDQodCksdGhpcy5yYWRpdXM9dGhpcy5yYWRpdXMqdC5nZXRNYXhTY2FsZU9uQXhpcygpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLmNlbnRlci5hZGQodCksdGhpc31leHBhbmRCeVBvaW50KHQpe1hKdC5zdWJWZWN0b3JzKHQsdGhpcy5jZW50ZXIpO2NvbnN0IGU9WEp0Lmxlbmd0aFNxKCk7aWYoZT50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyl7Y29uc3QgdD1NYXRoLnNxcnQoZSksbj0uNSoodC10aGlzLnJhZGl1cyk7dGhpcy5jZW50ZXIuYWRkKFhKdC5tdWx0aXBseVNjYWxhcihuL3QpKSx0aGlzLnJhZGl1cys9bn1yZXR1cm4gdGhpc311bmlvbih0KXtyZXR1cm4gWUp0LnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKSx0aGlzLmV4cGFuZEJ5UG9pbnQocUp0LmNvcHkodC5jZW50ZXIpLmFkZChZSnQpKSx0aGlzLmV4cGFuZEJ5UG9pbnQocUp0LmNvcHkodC5jZW50ZXIpLnN1YihZSnQpKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5jZW50ZXIuZXF1YWxzKHRoaXMuY2VudGVyKSYmdC5yYWRpdXM9PT10aGlzLnJhZGl1c31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19Y29uc3QgS0p0PW5ldyBDSnQsWkp0PW5ldyBDSnQsSkp0PW5ldyBDSnQsUUp0PW5ldyBDSnQsdFF0PW5ldyBDSnQsZVF0PW5ldyBDSnQsblF0PW5ldyBDSnQ7Y2xhc3MgaVF0e2NvbnN0cnVjdG9yKHQ9bmV3IENKdCxlPW5ldyBDSnQoMCwwLC0xKSl7dGhpcy5vcmlnaW49dCx0aGlzLmRpcmVjdGlvbj1lfXNldCh0LGUpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQpLHRoaXMuZGlyZWN0aW9uLmNvcHkoZSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQub3JpZ2luKSx0aGlzLmRpcmVjdGlvbi5jb3B5KHQuZGlyZWN0aW9uKSx0aGlzfWF0KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMub3JpZ2luKX1sb29rQXQodCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9uLmNvcHkodCkuc3ViKHRoaXMub3JpZ2luKS5ub3JtYWxpemUoKSx0aGlzfXJlY2FzdCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KHQsS0p0KSksdGhpc31jbG9zZXN0UG9pbnRUb1BvaW50KHQsZSl7ZS5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pO2NvbnN0IG49ZS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBuPDA/ZS5jb3B5KHRoaXMub3JpZ2luKTplLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKG4pLmFkZCh0aGlzLm9yaWdpbil9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0KSl9ZGlzdGFuY2VTcVRvUG9pbnQodCl7Y29uc3QgZT1LSnQuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBlPDA/dGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQodCk6KEtKdC5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihlKS5hZGQodGhpcy5vcmlnaW4pLEtKdC5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VTcVRvU2VnbWVudCh0LGUsbixpKXtaSnQuY29weSh0KS5hZGQoZSkubXVsdGlwbHlTY2FsYXIoLjUpLEpKdC5jb3B5KGUpLnN1Yih0KS5ub3JtYWxpemUoKSxRSnQuY29weSh0aGlzLm9yaWdpbikuc3ViKFpKdCk7Y29uc3Qgcj0uNSp0LmRpc3RhbmNlVG8oZSksbz0tdGhpcy5kaXJlY3Rpb24uZG90KEpKdCksYT1RSnQuZG90KHRoaXMuZGlyZWN0aW9uKSxzPS1RSnQuZG90KEpKdCksbD1RSnQubGVuZ3RoU3EoKSxjPU1hdGguYWJzKDEtbypvKTtsZXQgdSxoLGQscDtpZihjPjApaWYodT1vKnMtYSxoPW8qYS1zLHA9cipjLHU+PTApaWYoaD49LXApaWYoaDw9cCl7Y29uc3QgdD0xL2M7dSo9dCxoKj10LGQ9dSoodStvKmgrMiphKStoKihvKnUraCsyKnMpK2x9ZWxzZSBoPXIsdT1NYXRoLm1heCgwLC0obypoK2EpKSxkPS11KnUraCooaCsyKnMpK2w7ZWxzZSBoPS1yLHU9TWF0aC5tYXgoMCwtKG8qaCthKSksZD0tdSp1K2gqKGgrMipzKStsO2Vsc2UgaDw9LXA/KHU9TWF0aC5tYXgoMCwtKC1vKnIrYSkpLGg9dT4wPy1yOk1hdGgubWluKE1hdGgubWF4KC1yLC1zKSxyKSxkPS11KnUraCooaCsyKnMpK2wpOmg8PXA/KHU9MCxoPU1hdGgubWluKE1hdGgubWF4KC1yLC1zKSxyKSxkPWgqKGgrMipzKStsKToodT1NYXRoLm1heCgwLC0obypyK2EpKSxoPXU+MD9yOk1hdGgubWluKE1hdGgubWF4KC1yLC1zKSxyKSxkPS11KnUraCooaCsyKnMpK2wpO2Vsc2UgaD1vPjA/LXI6cix1PU1hdGgubWF4KDAsLShvKmgrYSkpLGQ9LXUqdStoKihoKzIqcykrbDtyZXR1cm4gbiYmbi5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcih1KS5hZGQodGhpcy5vcmlnaW4pLGkmJmkuY29weShKSnQpLm11bHRpcGx5U2NhbGFyKGgpLmFkZChaSnQpLGR9aW50ZXJzZWN0U3BoZXJlKHQsZSl7S0p0LnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5vcmlnaW4pO2NvbnN0IG49S0p0LmRvdCh0aGlzLmRpcmVjdGlvbiksaT1LSnQuZG90KEtKdCktbipuLHI9dC5yYWRpdXMqdC5yYWRpdXM7aWYoaT5yKXJldHVybiBudWxsO2NvbnN0IG89TWF0aC5zcXJ0KHItaSksYT1uLW8scz1uK287cmV0dXJuIGE8MCYmczwwP251bGw6dGhpcy5hdChhPDA/czphLGUpfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31kaXN0YW5jZVRvUGxhbmUodCl7Y29uc3QgZT10Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKDA9PT1lKXJldHVybiAwPT09dC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pPzA6bnVsbDtjb25zdCBuPS0odGhpcy5vcmlnaW4uZG90KHQubm9ybWFsKSt0LmNvbnN0YW50KS9lO3JldHVybiBuPj0wP246bnVsbH1pbnRlcnNlY3RQbGFuZSh0LGUpe2NvbnN0IG49dGhpcy5kaXN0YW5jZVRvUGxhbmUodCk7cmV0dXJuIG51bGw9PT1uP251bGw6dGhpcy5hdChuLGUpfWludGVyc2VjdHNQbGFuZSh0KXtjb25zdCBlPXQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTtyZXR1cm4gMD09PWV8fHQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbikqZTwwfWludGVyc2VjdEJveCh0LGUpe2xldCBuLGkscixvLGEscztjb25zdCBsPTEvdGhpcy5kaXJlY3Rpb24ueCxjPTEvdGhpcy5kaXJlY3Rpb24ueSx1PTEvdGhpcy5kaXJlY3Rpb24ueixoPXRoaXMub3JpZ2luO3JldHVybiBsPj0wPyhuPSh0Lm1pbi54LWgueCkqbCxpPSh0Lm1heC54LWgueCkqbCk6KG49KHQubWF4LngtaC54KSpsLGk9KHQubWluLngtaC54KSpsKSxjPj0wPyhyPSh0Lm1pbi55LWgueSkqYyxvPSh0Lm1heC55LWgueSkqYyk6KHI9KHQubWF4LnktaC55KSpjLG89KHQubWluLnktaC55KSpjKSxuPm98fHI+aT9udWxsOigocj5ufHxuIT1uKSYmKG49ciksKG88aXx8aSE9aSkmJihpPW8pLHU+PTA/KGE9KHQubWluLnotaC56KSp1LHM9KHQubWF4LnotaC56KSp1KTooYT0odC5tYXguei1oLnopKnUscz0odC5taW4uei1oLnopKnUpLG4+c3x8YT5pP251bGw6KChhPm58fG4hPW4pJiYobj1hKSwoczxpfHxpIT1pKSYmKGk9cyksaTwwP251bGw6dGhpcy5hdChuPj0wP246aSxlKSkpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIG51bGwhPT10aGlzLmludGVyc2VjdEJveCh0LEtKdCl9aW50ZXJzZWN0VHJpYW5nbGUodCxlLG4saSxyKXt0UXQuc3ViVmVjdG9ycyhlLHQpLGVRdC5zdWJWZWN0b3JzKG4sdCksblF0LmNyb3NzVmVjdG9ycyh0UXQsZVF0KTtsZXQgbyxhPXRoaXMuZGlyZWN0aW9uLmRvdChuUXQpO2lmKGE+MCl7aWYoaSlyZXR1cm4gbnVsbDtvPTF9ZWxzZXtpZighKGE8MCkpcmV0dXJuIG51bGw7bz0tMSxhPS1hfVFKdC5zdWJWZWN0b3JzKHRoaXMub3JpZ2luLHQpO2NvbnN0IHM9byp0aGlzLmRpcmVjdGlvbi5kb3QoZVF0LmNyb3NzVmVjdG9ycyhRSnQsZVF0KSk7aWYoczwwKXJldHVybiBudWxsO2NvbnN0IGw9byp0aGlzLmRpcmVjdGlvbi5kb3QodFF0LmNyb3NzKFFKdCkpO2lmKGw8MClyZXR1cm4gbnVsbDtpZihzK2w+YSlyZXR1cm4gbnVsbDtjb25zdCBjPS1vKlFKdC5kb3QoblF0KTtyZXR1cm4gYzwwP251bGw6dGhpcy5hdChjL2Escil9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5hcHBseU1hdHJpeDQodCksdGhpcy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm9yaWdpbi5lcXVhbHModGhpcy5vcmlnaW4pJiZ0LmRpcmVjdGlvbi5lcXVhbHModGhpcy5kaXJlY3Rpb24pfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX1jbGFzcyByUXR7Y29uc3RydWN0b3IoKXt0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxhcmd1bWVudHMubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9c2V0KHQsZSxuLGkscixvLGEscyxsLGMsdSxoLGQscCxmLG0pe2NvbnN0IGc9dGhpcy5lbGVtZW50cztyZXR1cm4gZ1swXT10LGdbNF09ZSxnWzhdPW4sZ1sxMl09aSxnWzFdPXIsZ1s1XT1vLGdbOV09YSxnWzEzXT1zLGdbMl09bCxnWzZdPWMsZ1sxMF09dSxnWzE0XT1oLGdbM109ZCxnWzddPXAsZ1sxMV09ZixnWzE1XT1tLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31jbG9uZSgpe3JldHVybihuZXcgclF0KS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9Y29weSh0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO3JldHVybiBlWzBdPW5bMF0sZVsxXT1uWzFdLGVbMl09blsyXSxlWzNdPW5bM10sZVs0XT1uWzRdLGVbNV09bls1XSxlWzZdPW5bNl0sZVs3XT1uWzddLGVbOF09bls4XSxlWzldPW5bOV0sZVsxMF09blsxMF0sZVsxMV09blsxMV0sZVsxMl09blsxMl0sZVsxM109blsxM10sZVsxNF09blsxNF0sZVsxNV09blsxNV0sdGhpc31jb3B5UG9zaXRpb24odCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gZVsxMl09blsxMl0sZVsxM109blsxM10sZVsxNF09blsxNF0sdGhpc31zZXRGcm9tTWF0cml4Myh0KXtjb25zdCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVszXSxlWzZdLDAsZVsxXSxlWzRdLGVbN10sMCxlWzJdLGVbNV0sZVs4XSwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdEJhc2lzKHQsZSxuKXtyZXR1cm4gdC5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMSksbi5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMiksdGhpc31tYWtlQmFzaXModCxlLG4pe3JldHVybiB0aGlzLnNldCh0LngsZS54LG4ueCwwLHQueSxlLnksbi55LDAsdC56LGUueixuLnosMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RSb3RhdGlvbih0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzLGk9MS9vUXQuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLHI9MS9vUXQuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLG89MS9vUXQuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiBlWzBdPW5bMF0qaSxlWzFdPW5bMV0qaSxlWzJdPW5bMl0qaSxlWzNdPTAsZVs0XT1uWzRdKnIsZVs1XT1uWzVdKnIsZVs2XT1uWzZdKnIsZVs3XT0wLGVbOF09bls4XSpvLGVbOV09bls5XSpvLGVbMTBdPW5bMTBdKm8sZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbUV1bGVyKHQpe3QmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm1ha2VSb3RhdGlvbkZyb21FdWxlcigpIG5vdyBleHBlY3RzIGEgRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10LngsaT10Lnkscj10Lnosbz1NYXRoLmNvcyhuKSxhPU1hdGguc2luKG4pLHM9TWF0aC5jb3MoaSksbD1NYXRoLnNpbihpKSxjPU1hdGguY29zKHIpLHU9TWF0aC5zaW4ocik7aWYoIlhZWiI9PT10Lm9yZGVyKXtjb25zdCB0PW8qYyxuPW8qdSxpPWEqYyxyPWEqdTtlWzBdPXMqYyxlWzRdPS1zKnUsZVs4XT1sLGVbMV09bitpKmwsZVs1XT10LXIqbCxlWzldPS1hKnMsZVsyXT1yLXQqbCxlWzZdPWkrbipsLGVbMTBdPW8qc31lbHNlIGlmKCJZWFoiPT09dC5vcmRlcil7Y29uc3QgdD1zKmMsbj1zKnUsaT1sKmMscj1sKnU7ZVswXT10K3IqYSxlWzRdPWkqYS1uLGVbOF09bypsLGVbMV09byp1LGVbNV09bypjLGVbOV09LWEsZVsyXT1uKmEtaSxlWzZdPXIrdCphLGVbMTBdPW8qc31lbHNlIGlmKCJaWFkiPT09dC5vcmRlcil7Y29uc3QgdD1zKmMsbj1zKnUsaT1sKmMscj1sKnU7ZVswXT10LXIqYSxlWzRdPS1vKnUsZVs4XT1pK24qYSxlWzFdPW4raSphLGVbNV09bypjLGVbOV09ci10KmEsZVsyXT0tbypsLGVbNl09YSxlWzEwXT1vKnN9ZWxzZSBpZigiWllYIj09PXQub3JkZXIpe2NvbnN0IHQ9bypjLG49byp1LGk9YSpjLHI9YSp1O2VbMF09cypjLGVbNF09aSpsLW4sZVs4XT10KmwrcixlWzFdPXMqdSxlWzVdPXIqbCt0LGVbOV09bipsLWksZVsyXT0tbCxlWzZdPWEqcyxlWzEwXT1vKnN9ZWxzZSBpZigiWVpYIj09PXQub3JkZXIpe2NvbnN0IHQ9bypzLG49bypsLGk9YSpzLHI9YSpsO2VbMF09cypjLGVbNF09ci10KnUsZVs4XT1pKnUrbixlWzFdPXUsZVs1XT1vKmMsZVs5XT0tYSpjLGVbMl09LWwqYyxlWzZdPW4qdStpLGVbMTBdPXQtcip1fWVsc2UgaWYoIlhaWSI9PT10Lm9yZGVyKXtjb25zdCB0PW8qcyxuPW8qbCxpPWEqcyxyPWEqbDtlWzBdPXMqYyxlWzRdPS11LGVbOF09bCpjLGVbMV09dCp1K3IsZVs1XT1vKmMsZVs5XT1uKnUtaSxlWzJdPWkqdS1uLGVbNl09YSpjLGVbMTBdPXIqdSt0fXJldHVybiBlWzNdPTAsZVs3XT0wLGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLmNvbXBvc2Uoc1F0LHQsbFF0KX1sb29rQXQodCxlLG4pe2NvbnN0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gaFF0LnN1YlZlY3RvcnModCxlKSwwPT09aFF0Lmxlbmd0aFNxKCkmJihoUXQuej0xKSxoUXQubm9ybWFsaXplKCksY1F0LmNyb3NzVmVjdG9ycyhuLGhRdCksMD09PWNRdC5sZW5ndGhTcSgpJiYoMT09PU1hdGguYWJzKG4ueik/aFF0LngrPTFlLTQ6aFF0LnorPTFlLTQsaFF0Lm5vcm1hbGl6ZSgpLGNRdC5jcm9zc1ZlY3RvcnMobixoUXQpKSxjUXQubm9ybWFsaXplKCksdVF0LmNyb3NzVmVjdG9ycyhoUXQsY1F0KSxpWzBdPWNRdC54LGlbNF09dVF0LngsaVs4XT1oUXQueCxpWzFdPWNRdC55LGlbNV09dVF0LnksaVs5XT1oUXQueSxpWzJdPWNRdC56LGlbNl09dVF0LnosaVsxMF09aFF0LnosdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5TWF0cmljZXMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LGUpKTp0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsdGhpcyl9bXVsdGlwbHlNYXRyaWNlcyh0LGUpe2NvbnN0IG49dC5lbGVtZW50cyxpPWUuZWxlbWVudHMscj10aGlzLmVsZW1lbnRzLG89blswXSxhPW5bNF0scz1uWzhdLGw9blsxMl0sYz1uWzFdLHU9bls1XSxoPW5bOV0sZD1uWzEzXSxwPW5bMl0sZj1uWzZdLG09blsxMF0sZz1uWzE0XSxfPW5bM10seT1uWzddLHY9blsxMV0sYj1uWzE1XSx4PWlbMF0sdz1pWzRdLFM9aVs4XSxNPWlbMTJdLEU9aVsxXSxUPWlbNV0sQz1pWzldLEE9aVsxM10saz1pWzJdLEw9aVs2XSxQPWlbMTBdLE49aVsxNF0sST1pWzNdLFI9aVs3XSxPPWlbMTFdLHo9aVsxNV07cmV0dXJuIHJbMF09byp4K2EqRStzKmsrbCpJLHJbNF09byp3K2EqVCtzKkwrbCpSLHJbOF09bypTK2EqQytzKlArbCpPLHJbMTJdPW8qTSthKkErcypOK2wqeixyWzFdPWMqeCt1KkUraCprK2QqSSxyWzVdPWMqdyt1KlQraCpMK2QqUixyWzldPWMqUyt1KkMraCpQK2QqTyxyWzEzXT1jKk0rdSpBK2gqTitkKnosclsyXT1wKngrZipFK20qaytnKkkscls2XT1wKncrZipUK20qTCtnKlIsclsxMF09cCpTK2YqQyttKlArZypPLHJbMTRdPXAqTStmKkErbSpOK2cqeixyWzNdPV8qeCt5KkUrdiprK2IqSSxyWzddPV8qdyt5KlQrdipMK2IqUixyWzExXT1fKlMreSpDK3YqUCtiKk8sclsxNV09XypNK3kqQSt2Kk4rYip6LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzO3JldHVybiBlWzBdKj10LGVbNF0qPXQsZVs4XSo9dCxlWzEyXSo9dCxlWzFdKj10LGVbNV0qPXQsZVs5XSo9dCxlWzEzXSo9dCxlWzJdKj10LGVbNl0qPXQsZVsxMF0qPXQsZVsxNF0qPXQsZVszXSo9dCxlWzddKj10LGVbMTFdKj10LGVbMTVdKj10LHRoaXN9ZGV0ZXJtaW5hbnQoKXtjb25zdCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLG49dFs0XSxpPXRbOF0scj10WzEyXSxvPXRbMV0sYT10WzVdLHM9dFs5XSxsPXRbMTNdLGM9dFsyXSx1PXRbNl0saD10WzEwXSxkPXRbMTRdO3JldHVybiB0WzNdKigrcipzKnUtaSpsKnUtciphKmgrbipsKmgraSphKmQtbipzKmQpK3RbN10qKCtlKnMqZC1lKmwqaCtyKm8qaC1pKm8qZCtpKmwqYy1yKnMqYykrdFsxMV0qKCtlKmwqdS1lKmEqZC1yKm8qdStuKm8qZCtyKmEqYy1uKmwqYykrdFsxNV0qKC1pKmEqYy1lKnMqdStlKmEqaCtpKm8qdS1uKm8qaCtuKnMqYyl9dHJhbnNwb3NlKCl7Y29uc3QgdD10aGlzLmVsZW1lbnRzO2xldCBlO3JldHVybiBlPXRbMV0sdFsxXT10WzRdLHRbNF09ZSxlPXRbMl0sdFsyXT10WzhdLHRbOF09ZSxlPXRbNl0sdFs2XT10WzldLHRbOV09ZSxlPXRbM10sdFszXT10WzEyXSx0WzEyXT1lLGU9dFs3XSx0WzddPXRbMTNdLHRbMTNdPWUsZT10WzExXSx0WzExXT10WzE0XSx0WzE0XT1lLHRoaXN9c2V0UG9zaXRpb24odCxlLG4pe2NvbnN0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gdC5pc1ZlY3RvcjM/KGlbMTJdPXQueCxpWzEzXT10LnksaVsxNF09dC56KTooaVsxMl09dCxpWzEzXT1lLGlbMTRdPW4pLHRoaXN9aW52ZXJ0KCl7Y29uc3QgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxuPXRbMV0saT10WzJdLHI9dFszXSxvPXRbNF0sYT10WzVdLHM9dFs2XSxsPXRbN10sYz10WzhdLHU9dFs5XSxoPXRbMTBdLGQ9dFsxMV0scD10WzEyXSxmPXRbMTNdLG09dFsxNF0sZz10WzE1XSxfPXUqbSpsLWYqaCpsK2YqcypkLWEqbSpkLXUqcypnK2EqaCpnLHk9cCpoKmwtYyptKmwtcCpzKmQrbyptKmQrYypzKmctbypoKmcsdj1jKmYqbC1wKnUqbCtwKmEqZC1vKmYqZC1jKmEqZytvKnUqZyxiPXAqdSpzLWMqZipzLXAqYSpoK28qZipoK2MqYSptLW8qdSptLHg9ZSpfK24qeStpKnYrcipiO2lmKDA9PT14KXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtjb25zdCB3PTEveDtyZXR1cm4gdFswXT1fKncsdFsxXT0oZipoKnItdSptKnItZippKmQrbiptKmQrdSppKmctbipoKmcpKncsdFsyXT0oYSptKnItZipzKnIrZippKmwtbiptKmwtYSppKmcrbipzKmcpKncsdFszXT0odSpzKnItYSpoKnItdSppKmwrbipoKmwrYSppKmQtbipzKmQpKncsdFs0XT15KncsdFs1XT0oYyptKnItcCpoKnIrcCppKmQtZSptKmQtYyppKmcrZSpoKmcpKncsdFs2XT0ocCpzKnItbyptKnItcCppKmwrZSptKmwrbyppKmctZSpzKmcpKncsdFs3XT0obypoKnItYypzKnIrYyppKmwtZSpoKmwtbyppKmQrZSpzKmQpKncsdFs4XT12KncsdFs5XT0ocCp1KnItYypmKnItcCpuKmQrZSpmKmQrYypuKmctZSp1KmcpKncsdFsxMF09KG8qZipyLXAqYSpyK3AqbipsLWUqZipsLW8qbipnK2UqYSpnKSp3LHRbMTFdPShjKmEqci1vKnUqci1jKm4qbCtlKnUqbCtvKm4qZC1lKmEqZCkqdyx0WzEyXT1iKncsdFsxM109KGMqZippLXAqdSppK3AqbipoLWUqZipoLWMqbiptK2UqdSptKSp3LHRbMTRdPShwKmEqaS1vKmYqaS1wKm4qcytlKmYqcytvKm4qbS1lKmEqbSkqdyx0WzE1XT0obyp1KmktYyphKmkrYypuKnMtZSp1KnMtbypuKmgrZSphKmgpKncsdGhpc31zY2FsZSh0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10LngsaT10Lnkscj10Lno7cmV0dXJuIGVbMF0qPW4sZVs0XSo9aSxlWzhdKj1yLGVbMV0qPW4sZVs1XSo9aSxlWzldKj1yLGVbMl0qPW4sZVs2XSo9aSxlWzEwXSo9cixlWzNdKj1uLGVbN10qPWksZVsxMV0qPXIsdGhpc31nZXRNYXhTY2FsZU9uQXhpcygpe2NvbnN0IHQ9dGhpcy5lbGVtZW50cztyZXR1cm4gTWF0aC5zcXJ0KE1hdGgubWF4KHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdLHRbNF0qdFs0XSt0WzVdKnRbNV0rdFs2XSp0WzZdLHRbOF0qdFs4XSt0WzldKnRbOV0rdFsxMF0qdFsxMF0pKX1tYWtlVHJhbnNsYXRpb24odCxlLG4pe3JldHVybiB0aGlzLnNldCgxLDAsMCx0LDAsMSwwLGUsMCwwLDEsbiwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblgodCl7Y29uc3QgZT1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsZSwtbiwwLDAsbixlLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25ZKHQpe2NvbnN0IGU9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoZSwwLG4sMCwwLDEsMCwwLC1uLDAsZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWih0KXtjb25zdCBlPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsLW4sMCwwLG4sZSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbkF4aXModCxlKXtjb25zdCBuPU1hdGguY29zKGUpLGk9TWF0aC5zaW4oZSkscj0xLW4sbz10LngsYT10Lnkscz10LnosbD1yKm8sYz1yKmE7cmV0dXJuIHRoaXMuc2V0KGwqbytuLGwqYS1pKnMsbCpzK2kqYSwwLGwqYStpKnMsYyphK24sYypzLWkqbywwLGwqcy1pKmEsYypzK2kqbyxyKnMqcytuLDAsMCwwLDAsMSksdGhpc31tYWtlU2NhbGUodCxlLG4pe3JldHVybiB0aGlzLnNldCh0LDAsMCwwLDAsZSwwLDAsMCwwLG4sMCwwLDAsMCwxKSx0aGlzfW1ha2VTaGVhcih0LGUsbixpLHIsbyl7cmV0dXJuIHRoaXMuc2V0KDEsbixyLDAsdCwxLG8sMCxlLGksMSwwLDAsMCwwLDEpLHRoaXN9Y29tcG9zZSh0LGUsbil7Y29uc3QgaT10aGlzLmVsZW1lbnRzLHI9ZS5feCxvPWUuX3ksYT1lLl96LHM9ZS5fdyxsPXIrcixjPW8rbyx1PWErYSxoPXIqbCxkPXIqYyxwPXIqdSxmPW8qYyxtPW8qdSxnPWEqdSxfPXMqbCx5PXMqYyx2PXMqdSxiPW4ueCx4PW4ueSx3PW4uejtyZXR1cm4gaVswXT0oMS0oZitnKSkqYixpWzFdPShkK3YpKmIsaVsyXT0ocC15KSpiLGlbM109MCxpWzRdPShkLXYpKngsaVs1XT0oMS0oaCtnKSkqeCxpWzZdPShtK18pKngsaVs3XT0wLGlbOF09KHAreSkqdyxpWzldPShtLV8pKncsaVsxMF09KDEtKGgrZikpKncsaVsxMV09MCxpWzEyXT10LngsaVsxM109dC55LGlbMTRdPXQueixpWzE1XT0xLHRoaXN9ZGVjb21wb3NlKHQsZSxuKXtjb25zdCBpPXRoaXMuZWxlbWVudHM7bGV0IHI9b1F0LnNldChpWzBdLGlbMV0saVsyXSkubGVuZ3RoKCk7Y29uc3Qgbz1vUXQuc2V0KGlbNF0saVs1XSxpWzZdKS5sZW5ndGgoKSxhPW9RdC5zZXQoaVs4XSxpWzldLGlbMTBdKS5sZW5ndGgoKTt0aGlzLmRldGVybWluYW50KCk8MCYmKHI9LXIpLHQueD1pWzEyXSx0Lnk9aVsxM10sdC56PWlbMTRdLGFRdC5jb3B5KHRoaXMpO2NvbnN0IHM9MS9yLGw9MS9vLGM9MS9hO3JldHVybiBhUXQuZWxlbWVudHNbMF0qPXMsYVF0LmVsZW1lbnRzWzFdKj1zLGFRdC5lbGVtZW50c1syXSo9cyxhUXQuZWxlbWVudHNbNF0qPWwsYVF0LmVsZW1lbnRzWzVdKj1sLGFRdC5lbGVtZW50c1s2XSo9bCxhUXQuZWxlbWVudHNbOF0qPWMsYVF0LmVsZW1lbnRzWzldKj1jLGFRdC5lbGVtZW50c1sxMF0qPWMsZS5zZXRGcm9tUm90YXRpb25NYXRyaXgoYVF0KSxuLng9cixuLnk9byxuLno9YSx0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LGUsbixpLHIsbyl7dm9pZCAwPT09byYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7Y29uc3QgYT10aGlzLmVsZW1lbnRzLHM9MipyLyhuLWkpLGw9KGUrdCkvKGUtdCksYz0obitpKS8obi1pKSx1PS0obytyKS8oby1yKSxoPS0yKm8qci8oby1yKTtyZXR1cm4gYVswXT0yKnIvKGUtdCksYVs0XT0wLGFbOF09bCxhWzEyXT0wLGFbMV09MCxhWzVdPXMsYVs5XT1jLGFbMTNdPTAsYVsyXT0wLGFbNl09MCxhWzEwXT11LGFbMTRdPWgsYVszXT0wLGFbN109MCxhWzExXT0tMSxhWzE1XT0wLHRoaXN9bWFrZU9ydGhvZ3JhcGhpYyh0LGUsbixpLHIsbyl7Y29uc3QgYT10aGlzLmVsZW1lbnRzLHM9MS8oZS10KSxsPTEvKG4taSksYz0xLyhvLXIpLHU9KGUrdCkqcyxoPShuK2kpKmwsZD0obytyKSpjO3JldHVybiBhWzBdPTIqcyxhWzRdPTAsYVs4XT0wLGFbMTJdPS11LGFbMV09MCxhWzVdPTIqbCxhWzldPTAsYVsxM109LWgsYVsyXT0wLGFbNl09MCxhWzEwXT0tMipjLGFbMTRdPS1kLGFbM109MCxhWzddPTAsYVsxMV09MCxhWzE1XT0xLHRoaXN9ZXF1YWxzKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHM7Zm9yKGxldCB0PTA7dDwxNjt0KyspaWYoZVt0XSE9PW5bdF0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQsZT0wKXtmb3IobGV0IG49MDtuPDE2O24rKyl0aGlzLmVsZW1lbnRzW25dPXRbbitlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtjb25zdCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09blswXSx0W2UrMV09blsxXSx0W2UrMl09blsyXSx0W2UrM109blszXSx0W2UrNF09bls0XSx0W2UrNV09bls1XSx0W2UrNl09bls2XSx0W2UrN109bls3XSx0W2UrOF09bls4XSx0W2UrOV09bls5XSx0W2UrMTBdPW5bMTBdLHRbZSsxMV09blsxMV0sdFtlKzEyXT1uWzEyXSx0W2UrMTNdPW5bMTNdLHRbZSsxNF09blsxNF0sdFtlKzE1XT1uWzE1XSx0fX1yUXQucHJvdG90eXBlLmlzTWF0cml4ND0hMDtjb25zdCBvUXQ9bmV3IENKdCxhUXQ9bmV3IHJRdCxzUXQ9bmV3IENKdCgwLDAsMCksbFF0PW5ldyBDSnQoMSwxLDEpLGNRdD1uZXcgQ0p0LHVRdD1uZXcgQ0p0LGhRdD1uZXcgQ0p0LGRRdD1uZXcgclF0LHBRdD1uZXcgVEp0O2NsYXNzIGZRdHtjb25zdHJ1Y3Rvcih0PTAsZT0wLG49MCxpPWZRdC5EZWZhdWx0T3JkZXIpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1uLHRoaXMuX29yZGVyPWl9Z2V0IHgoKXtyZXR1cm4gdGhpcy5feH1zZXQgeCh0KXt0aGlzLl94PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3l9c2V0IHkodCl7dGhpcy5feT10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeigpe3JldHVybiB0aGlzLl96fXNldCB6KHQpe3RoaXMuX3o9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IG9yZGVyKCl7cmV0dXJuIHRoaXMuX29yZGVyfXNldCBvcmRlcih0KXt0aGlzLl9vcmRlcj10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxlLG4saT10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1uLHRoaXMuX29yZGVyPWksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fb3JkZXIpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC5feCx0aGlzLl95PXQuX3ksdGhpcy5fej10Ll96LHRoaXMuX29yZGVyPXQuX29yZGVyLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0LGU9dGhpcy5fb3JkZXIsbj0hMCl7Y29uc3QgaT10LmVsZW1lbnRzLHI9aVswXSxvPWlbNF0sYT1pWzhdLHM9aVsxXSxsPWlbNV0sYz1pWzldLHU9aVsyXSxoPWlbNl0sZD1pWzEwXTtzd2l0Y2goZSl7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKCRadChhLC0xLDEpKSxNYXRoLmFicyhhKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKC1jLGQpLHRoaXMuX3o9TWF0aC5hdGFuMigtbyxyKSk6KHRoaXMuX3g9TWF0aC5hdGFuMihoLGwpLHRoaXMuX3o9MCk7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9TWF0aC5hc2luKC0kWnQoYywtMSwxKSksTWF0aC5hYnMoYyk8Ljk5OTk5OTk/KHRoaXMuX3k9TWF0aC5hdGFuMihhLGQpLHRoaXMuX3o9TWF0aC5hdGFuMihzLGwpKToodGhpcy5feT1NYXRoLmF0YW4yKC11LHIpLHRoaXMuX3o9MCk7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9TWF0aC5hc2luKCRadChoLC0xLDEpKSxNYXRoLmFicyhoKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC11LGQpLHRoaXMuX3o9TWF0aC5hdGFuMigtbyxsKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIocyxyKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC0kWnQodSwtMSwxKSksTWF0aC5hYnModSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihoLGQpLHRoaXMuX3o9TWF0aC5hdGFuMihzLHIpKToodGhpcy5feD0wLHRoaXMuX3o9TWF0aC5hdGFuMigtbyxsKSk7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3o9TWF0aC5hc2luKCRadChzLC0xLDEpKSxNYXRoLmFicyhzKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKC1jLGwpLHRoaXMuX3k9TWF0aC5hdGFuMigtdSxyKSk6KHRoaXMuX3g9MCx0aGlzLl95PU1hdGguYXRhbjIoYSxkKSk7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3o9TWF0aC5hc2luKC0kWnQobywtMSwxKSksTWF0aC5hYnMobyk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihoLGwpLHRoaXMuX3k9TWF0aC5hdGFuMihhLHIpKToodGhpcy5feD1NYXRoLmF0YW4yKC1jLGQpLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitlKX1yZXR1cm4gdGhpcy5fb3JkZXI9ZSwhMD09PW4mJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQsZSxuKXtyZXR1cm4gZFF0Lm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGRRdCxlLG4pfXNldEZyb21WZWN0b3IzKHQsZT10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuc2V0KHQueCx0LnksdC56LGUpfXJlb3JkZXIodCl7cmV0dXJuIHBRdC5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihwUXQsdCl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll9vcmRlcj09PXRoaXMuX29yZGVyfWZyb21BcnJheSh0KXtyZXR1cm4gdGhpcy5feD10WzBdLHRoaXMuX3k9dFsxXSx0aGlzLl96PXRbMl0sdm9pZCAwIT09dFszXSYmKHRoaXMuX29yZGVyPXRbM10pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMuX3gsdFtlKzFdPXRoaXMuX3ksdFtlKzJdPXRoaXMuX3osdFtlKzNdPXRoaXMuX29yZGVyLHR9dG9WZWN0b3IzKHQpe3JldHVybiB0P3Quc2V0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KTpuZXcgQ0p0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX1mUXQucHJvdG90eXBlLmlzRXVsZXI9ITAsZlF0LkRlZmF1bHRPcmRlcj0iWFlaIixmUXQuUm90YXRpb25PcmRlcnM9WyJYWVoiLCJZWlgiLCJaWFkiLCJYWlkiLCJZWFoiLCJaWVgiXTtjbGFzcyBtUXR7Y29uc3RydWN0b3IoKXt0aGlzLm1hc2s9MX1zZXQodCl7dGhpcy5tYXNrPTE8PHR8MH1lbmFibGUodCl7dGhpcy5tYXNrfD0xPDx0fDB9ZW5hYmxlQWxsKCl7dGhpcy5tYXNrPS0xfXRvZ2dsZSh0KXt0aGlzLm1hc2tePTE8PHR8MH1kaXNhYmxlKHQpe3RoaXMubWFzayY9figxPDx0fDApfWRpc2FibGVBbGwoKXt0aGlzLm1hc2s9MH10ZXN0KHQpe3JldHVybiAwIT0odGhpcy5tYXNrJnQubWFzayl9fWxldCBnUXQ9MDtjb25zdCBfUXQ9bmV3IENKdCx5UXQ9bmV3IFRKdCx2UXQ9bmV3IHJRdCxiUXQ9bmV3IENKdCx4UXQ9bmV3IENKdCx3UXQ9bmV3IENKdCxTUXQ9bmV3IFRKdCxNUXQ9bmV3IENKdCgxLDAsMCksRVF0PW5ldyBDSnQoMCwxLDApLFRRdD1uZXcgQ0p0KDAsMCwxKSxDUXQ9e3R5cGU6ImFkZGVkIn0sQVF0PXt0eXBlOiJyZW1vdmVkIn07Y2xhc3Mga1F0IGV4dGVuZHMgalp0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpnUXQrK30pLHRoaXMudXVpZD1YWnQoKSx0aGlzLm5hbWU9IiIsdGhpcy50eXBlPSJPYmplY3QzRCIsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPVtdLHRoaXMudXA9a1F0LkRlZmF1bHRVcC5jbG9uZSgpO2NvbnN0IHQ9bmV3IENKdCxlPW5ldyBmUXQsbj1uZXcgVEp0LGk9bmV3IENKdCgxLDEsMSk7ZS5fb25DaGFuZ2UoKGZ1bmN0aW9uIHIoKXtuLnNldEZyb21FdWxlcihlLCExKX0pKSxuLl9vbkNoYW5nZSgoZnVuY3Rpb24gbygpe2Uuc2V0RnJvbVF1YXRlcm5pb24obix2b2lkIDAsITEpfSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3Bvc2l0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTp0fSxyb3RhdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZX0scXVhdGVybmlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6bn0sc2NhbGU6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOml9LG1vZGVsVmlld01hdHJpeDp7dmFsdWU6bmV3IHJRdH0sbm9ybWFsTWF0cml4Ont2YWx1ZTpuZXcgZ0p0fX0pLHRoaXMubWF0cml4PW5ldyByUXQsdGhpcy5tYXRyaXhXb3JsZD1uZXcgclF0LHRoaXMubWF0cml4QXV0b1VwZGF0ZT1rUXQuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHRoaXMubGF5ZXJzPW5ldyBtUXQsdGhpcy52aXNpYmxlPSEwLHRoaXMuY2FzdFNoYWRvdz0hMSx0aGlzLnJlY2VpdmVTaGFkb3c9ITEsdGhpcy5mcnVzdHVtQ3VsbGVkPSEwLHRoaXMucmVuZGVyT3JkZXI9MCx0aGlzLmFuaW1hdGlvbnM9W10sdGhpcy51c2VyRGF0YT17fX1vbkJlZm9yZVJlbmRlcigpe31vbkFmdGVyUmVuZGVyKCl7fWFwcGx5TWF0cml4NCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5tYXRyaXgucHJlbXVsdGlwbHkodCksdGhpcy5tYXRyaXguZGVjb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHQpLHRoaXN9c2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlKHQsZSl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodCxlKX1zZXRSb3RhdGlvbkZyb21FdWxlcih0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKHQsITApfXNldFJvdGF0aW9uRnJvbU1hdHJpeCh0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpfXNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7dGhpcy5xdWF0ZXJuaW9uLmNvcHkodCl9cm90YXRlT25BeGlzKHQsZSl7cmV0dXJuIHlRdC5zZXRGcm9tQXhpc0FuZ2xlKHQsZSksdGhpcy5xdWF0ZXJuaW9uLm11bHRpcGx5KHlRdCksdGhpc31yb3RhdGVPbldvcmxkQXhpcyh0LGUpe3JldHVybiB5UXQuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh5UXQpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoTVF0LHQpfXJvdGF0ZVkodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKEVRdCx0KX1yb3RhdGVaKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhUUXQsdCl9dHJhbnNsYXRlT25BeGlzKHQsZSl7cmV0dXJuIF9RdC5jb3B5KHQpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pLHRoaXMucG9zaXRpb24uYWRkKF9RdC5tdWx0aXBseVNjYWxhcihlKSksdGhpc310cmFuc2xhdGVYKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhNUXQsdCl9dHJhbnNsYXRlWSh0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoRVF0LHQpfXRyYW5zbGF0ZVoodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKFRRdCx0KX1sb2NhbFRvV29ybGQodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfXdvcmxkVG9Mb2NhbCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQodlF0LmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCkpfWxvb2tBdCh0LGUsbil7dC5pc1ZlY3RvcjM/YlF0LmNvcHkodCk6YlF0LnNldCh0LGUsbik7Y29uc3QgaT10aGlzLnBhcmVudDt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx4UXQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpLHRoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD92UXQubG9va0F0KHhRdCxiUXQsdGhpcy51cCk6dlF0Lmxvb2tBdChiUXQseFF0LHRoaXMudXApLHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodlF0KSxpJiYodlF0LmV4dHJhY3RSb3RhdGlvbihpLm1hdHJpeFdvcmxkKSx5UXQuc2V0RnJvbVJvdGF0aW9uTWF0cml4KHZRdCksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHlRdC5pbnZlcnQoKSkpfWFkZCh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspdGhpcy5hZGQoYXJndW1lbnRzW3RdKTtyZXR1cm4gdGhpc31yZXR1cm4gdD09PXRoaXM/KGNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IGNhbid0IGJlIGFkZGVkIGFzIGEgY2hpbGQgb2YgaXRzZWxmLiIsdCksdGhpcyk6KHQmJnQuaXNPYmplY3QzRD8obnVsbCE9PXQucGFyZW50JiZ0LnBhcmVudC5yZW1vdmUodCksdC5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkcmVuLnB1c2godCksdC5kaXNwYXRjaEV2ZW50KENRdCkpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4iLHQpLHRoaXMpfXJlbW92ZSh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW3RdKTtyZXR1cm4gdGhpc31jb25zdCBlPXRoaXMuY2hpbGRyZW4uaW5kZXhPZih0KTtyZXR1cm4tMSE9PWUmJih0LnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW4uc3BsaWNlKGUsMSksdC5kaXNwYXRjaEV2ZW50KEFRdCkpLHRoaXN9cmVtb3ZlRnJvbVBhcmVudCgpe2NvbnN0IHQ9dGhpcy5wYXJlbnQ7cmV0dXJuIG51bGwhPT10JiZ0LnJlbW92ZSh0aGlzKSx0aGlzfWNsZWFyKCl7Zm9yKGxldCB0PTA7dDx0aGlzLmNoaWxkcmVuLmxlbmd0aDt0Kyspe2NvbnN0IGU9dGhpcy5jaGlsZHJlblt0XTtlLnBhcmVudD1udWxsLGUuZGlzcGF0Y2hFdmVudChBUXQpfXJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD0wLHRoaXN9YXR0YWNoKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx2UXQuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSxudWxsIT09dC5wYXJlbnQmJih0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdlF0Lm11bHRpcGx5KHQucGFyZW50Lm1hdHJpeFdvcmxkKSksdC5hcHBseU1hdHJpeDQodlF0KSx0aGlzLmFkZCh0KSx0LnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKSx0aGlzfWdldE9iamVjdEJ5SWQodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgiaWQiLHQpfWdldE9iamVjdEJ5TmFtZSh0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJuYW1lIix0KX1nZXRPYmplY3RCeVByb3BlcnR5KHQsZSl7aWYodGhpc1t0XT09PWUpcmV0dXJuIHRoaXM7Zm9yKGxldCBuPTAsaT10aGlzLmNoaWxkcmVuLmxlbmd0aDtuPGk7bisrKXtjb25zdCBpPXRoaXMuY2hpbGRyZW5bbl0uZ2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpO2lmKHZvaWQgMCE9PWkpcmV0dXJuIGl9fWdldFdvcmxkUG9zaXRpb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpfWdldFdvcmxkUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoeFF0LHQsd1F0KSx0fWdldFdvcmxkU2NhbGUodCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKHhRdCxTUXQsdCksdH1nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtjb25zdCBlPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KGVbOF0sZVs5XSxlWzEwXSkubm9ybWFsaXplKCl9cmF5Y2FzdCgpe310cmF2ZXJzZSh0KXt0KHRoaXMpO2NvbnN0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG49MCxpPWUubGVuZ3RoO248aTtuKyspZVtuXS50cmF2ZXJzZSh0KX10cmF2ZXJzZVZpc2libGUodCl7aWYoITE9PT10aGlzLnZpc2libGUpcmV0dXJuO3QodGhpcyk7Y29uc3QgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLGk9ZS5sZW5ndGg7bjxpO24rKyllW25dLnRyYXZlcnNlVmlzaWJsZSh0KX10cmF2ZXJzZUFuY2VzdG9ycyh0KXtjb25zdCBlPXRoaXMucGFyZW50O251bGwhPT1lJiYodChlKSxlLnRyYXZlcnNlQW5jZXN0b3JzKHQpKX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH11cGRhdGVNYXRyaXhXb3JsZCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksKHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZXx8dCkmJihudWxsPT09dGhpcy5wYXJlbnQ/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0PSEwKTtjb25zdCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKWVbbl0udXBkYXRlTWF0cml4V29ybGQodCl9dXBkYXRlV29ybGRNYXRyaXgodCxlKXtjb25zdCBuPXRoaXMucGFyZW50O2lmKCEwPT09dCYmbnVsbCE9PW4mJm4udXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSxudWxsPT09dGhpcy5wYXJlbnQ/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLCEwPT09ZSl7Y29uc3QgdD10aGlzLmNoaWxkcmVuO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl0W2VdLnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKX19dG9KU09OKHQpe2NvbnN0IGU9dm9pZCAwPT09dHx8InN0cmluZyI9PXR5cGVvZiB0LG49e307ZSYmKHQ9e2dlb21ldHJpZXM6e30sbWF0ZXJpYWxzOnt9LHRleHR1cmVzOnt9LGltYWdlczp7fSxzaGFwZXM6e30sc2tlbGV0b25zOnt9LGFuaW1hdGlvbnM6e319LG4ubWV0YWRhdGE9e3ZlcnNpb246NC41LHR5cGU6Ik9iamVjdCIsZ2VuZXJhdG9yOiJPYmplY3QzRC50b0pTT04ifSk7Y29uc3QgaT17fTtmdW5jdGlvbiByKGUsbil7cmV0dXJuIHZvaWQgMD09PWVbbi51dWlkXSYmKGVbbi51dWlkXT1uLnRvSlNPTih0KSksbi51dWlkfWlmKGkudXVpZD10aGlzLnV1aWQsaS50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKGkubmFtZT10aGlzLm5hbWUpLCEwPT09dGhpcy5jYXN0U2hhZG93JiYoaS5jYXN0U2hhZG93PSEwKSwhMD09PXRoaXMucmVjZWl2ZVNoYWRvdyYmKGkucmVjZWl2ZVNoYWRvdz0hMCksITE9PT10aGlzLnZpc2libGUmJihpLnZpc2libGU9ITEpLCExPT09dGhpcy5mcnVzdHVtQ3VsbGVkJiYoaS5mcnVzdHVtQ3VsbGVkPSExKSwwIT09dGhpcy5yZW5kZXJPcmRlciYmKGkucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksInt9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoaS51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxpLmxheWVycz10aGlzLmxheWVycy5tYXNrLGkubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSwhMT09PXRoaXMubWF0cml4QXV0b1VwZGF0ZSYmKGkubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihpLnR5cGU9Ikluc3RhbmNlZE1lc2giLGkuY291bnQ9dGhpcy5jb3VudCxpLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksbnVsbCE9PXRoaXMuaW5zdGFuY2VDb2xvciYmKGkuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKSx0aGlzLmlzU2NlbmUpdGhpcy5iYWNrZ3JvdW5kJiYodGhpcy5iYWNrZ3JvdW5kLmlzQ29sb3I/aS5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04oKTp0aGlzLmJhY2tncm91bmQuaXNUZXh0dXJlJiYoaS5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04odCkudXVpZCkpLHRoaXMuZW52aXJvbm1lbnQmJnRoaXMuZW52aXJvbm1lbnQuaXNUZXh0dXJlJiYoaS5lbnZpcm9ubWVudD10aGlzLmVudmlyb25tZW50LnRvSlNPTih0KS51dWlkKTtlbHNlIGlmKHRoaXMuaXNNZXNofHx0aGlzLmlzTGluZXx8dGhpcy5pc1BvaW50cyl7aS5nZW9tZXRyeT1yKHQuZ2VvbWV0cmllcyx0aGlzLmdlb21ldHJ5KTtjb25zdCBlPXRoaXMuZ2VvbWV0cnkucGFyYW1ldGVycztpZih2b2lkIDAhPT1lJiZ2b2lkIDAhPT1lLnNoYXBlcyl7Y29uc3Qgbj1lLnNoYXBlcztpZihBcnJheS5pc0FycmF5KG4pKWZvcihsZXQgZT0wLGk9bi5sZW5ndGg7ZTxpO2UrKylyKHQuc2hhcGVzLG5bZV0pO2Vsc2Ugcih0LnNoYXBlcyxuKX19aWYodGhpcy5pc1NraW5uZWRNZXNoJiYoaS5iaW5kTW9kZT10aGlzLmJpbmRNb2RlLGkuYmluZE1hdHJpeD10aGlzLmJpbmRNYXRyaXgudG9BcnJheSgpLHZvaWQgMCE9PXRoaXMuc2tlbGV0b24mJihyKHQuc2tlbGV0b25zLHRoaXMuc2tlbGV0b24pLGkuc2tlbGV0b249dGhpcy5za2VsZXRvbi51dWlkKSksdm9pZCAwIT09dGhpcy5tYXRlcmlhbClpZihBcnJheS5pc0FycmF5KHRoaXMubWF0ZXJpYWwpKXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wLGk9dGhpcy5tYXRlcmlhbC5sZW5ndGg7bjxpO24rKyllLnB1c2gocih0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsW25dKSk7aS5tYXRlcmlhbD1lfWVsc2UgaS5tYXRlcmlhbD1yKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWwpO2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjApe2kuY2hpbGRyZW49W107Zm9yKGxldCBlPTA7ZTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtlKyspaS5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5bZV0udG9KU09OKHQpLm9iamVjdCl9aWYodGhpcy5hbmltYXRpb25zLmxlbmd0aD4wKXtpLmFuaW1hdGlvbnM9W107Zm9yKGxldCBlPTA7ZTx0aGlzLmFuaW1hdGlvbnMubGVuZ3RoO2UrKylpLmFuaW1hdGlvbnMucHVzaChyKHQuYW5pbWF0aW9ucyx0aGlzLmFuaW1hdGlvbnNbZV0pKX1pZihlKXtjb25zdCBlPW8odC5nZW9tZXRyaWVzKSxpPW8odC5tYXRlcmlhbHMpLHI9byh0LnRleHR1cmVzKSxhPW8odC5pbWFnZXMpLHM9byh0LnNoYXBlcyksbD1vKHQuc2tlbGV0b25zKSxjPW8odC5hbmltYXRpb25zKTtlLmxlbmd0aD4wJiYobi5nZW9tZXRyaWVzPWUpLGkubGVuZ3RoPjAmJihuLm1hdGVyaWFscz1pKSxyLmxlbmd0aD4wJiYobi50ZXh0dXJlcz1yKSxhLmxlbmd0aD4wJiYobi5pbWFnZXM9YSkscy5sZW5ndGg+MCYmKG4uc2hhcGVzPXMpLGwubGVuZ3RoPjAmJihuLnNrZWxldG9ucz1sKSxjLmxlbmd0aD4wJiYobi5hbmltYXRpb25zPWMpfXJldHVybiBuLm9iamVjdD1pLG47ZnVuY3Rpb24gbyh0KXtjb25zdCBlPVtdO2Zvcihjb25zdCBuIGluIHQpe2NvbnN0IGk9dFtuXTtkZWxldGUgaS5tZXRhZGF0YSxlLnB1c2goaSl9cmV0dXJuIGV9fWNsb25lKHQpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzLHQpfWNvcHkodCxlPSEwKXtpZih0aGlzLm5hbWU9dC5uYW1lLHRoaXMudXAuY29weSh0LnVwKSx0aGlzLnBvc2l0aW9uLmNvcHkodC5wb3NpdGlvbiksdGhpcy5yb3RhdGlvbi5vcmRlcj10LnJvdGF0aW9uLm9yZGVyLHRoaXMucXVhdGVybmlvbi5jb3B5KHQucXVhdGVybmlvbiksdGhpcy5zY2FsZS5jb3B5KHQuc2NhbGUpLHRoaXMubWF0cml4LmNvcHkodC5tYXRyaXgpLHRoaXMubWF0cml4V29ybGQuY29weSh0Lm1hdHJpeFdvcmxkKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT10Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUsdGhpcy5sYXllcnMubWFzaz10LmxheWVycy5tYXNrLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy5jYXN0U2hhZG93PXQuY2FzdFNoYWRvdyx0aGlzLnJlY2VpdmVTaGFkb3c9dC5yZWNlaXZlU2hhZG93LHRoaXMuZnJ1c3R1bUN1bGxlZD10LmZydXN0dW1DdWxsZWQsdGhpcy5yZW5kZXJPcmRlcj10LnJlbmRlck9yZGVyLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksITA9PT1lKWZvcihsZXQgZT0wO2U8dC5jaGlsZHJlbi5sZW5ndGg7ZSsrKXRoaXMuYWRkKHQuY2hpbGRyZW5bZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXN9fWtRdC5EZWZhdWx0VXA9bmV3IENKdCgwLDEsMCksa1F0LkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlPSEwLGtRdC5wcm90b3R5cGUuaXNPYmplY3QzRD0hMDtjb25zdCBMUXQ9bmV3IENKdCxQUXQ9bmV3IENKdCxOUXQ9bmV3IENKdCxJUXQ9bmV3IENKdCxSUXQ9bmV3IENKdCxPUXQ9bmV3IENKdCx6UXQ9bmV3IENKdCxEUXQ9bmV3IENKdCxCUXQ9bmV3IENKdCxIUXQ9bmV3IENKdDtjbGFzcyBGUXR7Y29uc3RydWN0b3IodD1uZXcgQ0p0LGU9bmV3IENKdCxuPW5ldyBDSnQpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufXN0YXRpYyBnZXROb3JtYWwodCxlLG4saSl7aS5zdWJWZWN0b3JzKG4sZSksTFF0LnN1YlZlY3RvcnModCxlKSxpLmNyb3NzKExRdCk7Y29uc3Qgcj1pLmxlbmd0aFNxKCk7cmV0dXJuIHI+MD9pLm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KHIpKTppLnNldCgwLDAsMCl9c3RhdGljIGdldEJhcnljb29yZCh0LGUsbixpLHIpe0xRdC5zdWJWZWN0b3JzKGksZSksUFF0LnN1YlZlY3RvcnMobixlKSxOUXQuc3ViVmVjdG9ycyh0LGUpO2NvbnN0IG89TFF0LmRvdChMUXQpLGE9TFF0LmRvdChQUXQpLHM9TFF0LmRvdChOUXQpLGw9UFF0LmRvdChQUXQpLGM9UFF0LmRvdChOUXQpLHU9bypsLWEqYTtpZigwPT09dSlyZXR1cm4gci5zZXQoLTIsLTEsLTEpO2NvbnN0IGg9MS91LGQ9KGwqcy1hKmMpKmgscD0obypjLWEqcykqaDtyZXR1cm4gci5zZXQoMS1kLXAscCxkKX1zdGF0aWMgY29udGFpbnNQb2ludCh0LGUsbixpKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLG4saSxJUXQpLElRdC54Pj0wJiZJUXQueT49MCYmSVF0LngrSVF0Lnk8PTF9c3RhdGljIGdldFVWKHQsZSxuLGkscixvLGEscyl7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQsZSxuLGksSVF0KSxzLnNldCgwLDApLHMuYWRkU2NhbGVkVmVjdG9yKHIsSVF0LngpLHMuYWRkU2NhbGVkVmVjdG9yKG8sSVF0LnkpLHMuYWRkU2NhbGVkVmVjdG9yKGEsSVF0LnopLHN9c3RhdGljIGlzRnJvbnRGYWNpbmcodCxlLG4saSl7cmV0dXJuIExRdC5zdWJWZWN0b3JzKG4sZSksUFF0LnN1YlZlY3RvcnModCxlKSxMUXQuY3Jvc3MoUFF0KS5kb3QoaSk8MH1zZXQodCxlLG4pe3JldHVybiB0aGlzLmEuY29weSh0KSx0aGlzLmIuY29weShlKSx0aGlzLmMuY29weShuKSx0aGlzfXNldEZyb21Qb2ludHNBbmRJbmRpY2VzKHQsZSxuLGkpe3JldHVybiB0aGlzLmEuY29weSh0W2VdKSx0aGlzLmIuY29weSh0W25dKSx0aGlzLmMuY29weSh0W2ldKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYS5jb3B5KHQuYSksdGhpcy5iLmNvcHkodC5iKSx0aGlzLmMuY29weSh0LmMpLHRoaXN9Z2V0QXJlYSgpe3JldHVybiBMUXQuc3ViVmVjdG9ycyh0aGlzLmMsdGhpcy5iKSxQUXQuc3ViVmVjdG9ycyh0aGlzLmEsdGhpcy5iKSwuNSpMUXQuY3Jvc3MoUFF0KS5sZW5ndGgoKX1nZXRNaWRwb2ludCh0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLmFkZCh0aGlzLmMpLm11bHRpcGx5U2NhbGFyKDEvMyl9Z2V0Tm9ybWFsKHQpe3JldHVybiBGUXQuZ2V0Tm9ybWFsKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHQpfWdldFBsYW5lKHQpe3JldHVybiB0LnNldEZyb21Db3BsYW5hclBvaW50cyh0aGlzLmEsdGhpcy5iLHRoaXMuYyl9Z2V0QmFyeWNvb3JkKHQsZSl7cmV0dXJuIEZRdC5nZXRCYXJ5Y29vcmQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxlKX1nZXRVVih0LGUsbixpLHIpe3JldHVybiBGUXQuZ2V0VVYodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxlLG4saSxyKX1jb250YWluc1BvaW50KHQpe3JldHVybiBGUXQuY29udGFpbnNQb2ludCh0LHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1pc0Zyb250RmFjaW5nKHQpe3JldHVybiBGUXQuaXNGcm9udEZhY2luZyh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNUcmlhbmdsZSh0aGlzKX1jbG9zZXN0UG9pbnRUb1BvaW50KHQsZSl7Y29uc3Qgbj10aGlzLmEsaT10aGlzLmIscj10aGlzLmM7bGV0IG8sYTtSUXQuc3ViVmVjdG9ycyhpLG4pLE9RdC5zdWJWZWN0b3JzKHIsbiksRFF0LnN1YlZlY3RvcnModCxuKTtjb25zdCBzPVJRdC5kb3QoRFF0KSxsPU9RdC5kb3QoRFF0KTtpZihzPD0wJiZsPD0wKXJldHVybiBlLmNvcHkobik7QlF0LnN1YlZlY3RvcnModCxpKTtjb25zdCBjPVJRdC5kb3QoQlF0KSx1PU9RdC5kb3QoQlF0KTtpZihjPj0wJiZ1PD1jKXJldHVybiBlLmNvcHkoaSk7Y29uc3QgaD1zKnUtYypsO2lmKGg8PTAmJnM+PTAmJmM8PTApcmV0dXJuIG89cy8ocy1jKSxlLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKFJRdCxvKTtIUXQuc3ViVmVjdG9ycyh0LHIpO2NvbnN0IGQ9UlF0LmRvdChIUXQpLHA9T1F0LmRvdChIUXQpO2lmKHA+PTAmJmQ8PXApcmV0dXJuIGUuY29weShyKTtjb25zdCBmPWQqbC1zKnA7aWYoZjw9MCYmbD49MCYmcDw9MClyZXR1cm4gYT1sLyhsLXApLGUuY29weShuKS5hZGRTY2FsZWRWZWN0b3IoT1F0LGEpO2NvbnN0IG09YypwLWQqdTtpZihtPD0wJiZ1LWM+PTAmJmQtcD49MClyZXR1cm4gelF0LnN1YlZlY3RvcnMocixpKSxhPSh1LWMpLyh1LWMrKGQtcCkpLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3IoelF0LGEpO2NvbnN0IGc9MS8obStmK2gpO3JldHVybiBvPWYqZyxhPWgqZyxlLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKFJRdCxvKS5hZGRTY2FsZWRWZWN0b3IoT1F0LGEpfWVxdWFscyh0KXtyZXR1cm4gdC5hLmVxdWFscyh0aGlzLmEpJiZ0LmIuZXF1YWxzKHRoaXMuYikmJnQuYy5lcXVhbHModGhpcy5jKX19bGV0IFZRdD0wO2NsYXNzIFVRdCBleHRlbmRzIGpadHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6VlF0Kyt9KSx0aGlzLnV1aWQ9WFp0KCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iTWF0ZXJpYWwiLHRoaXMuZm9nPSEwLHRoaXMuYmxlbmRpbmc9MSx0aGlzLnNpZGU9MCx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9MjA0LHRoaXMuYmxlbmREc3Q9MjA1LHRoaXMuYmxlbmRFcXVhdGlvbj1WS3QsdGhpcy5ibGVuZFNyY0FscGhhPW51bGwsdGhpcy5ibGVuZERzdEFscGhhPW51bGwsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9bnVsbCx0aGlzLmRlcHRoRnVuYz0zLHRoaXMuZGVwdGhUZXN0PSEwLHRoaXMuZGVwdGhXcml0ZT0hMCx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9MjU1LHRoaXMuc3RlbmNpbEZ1bmM9NTE5LHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPUhadCx0aGlzLnN0ZW5jaWxaRmFpbD1IWnQsdGhpcy5zdGVuY2lsWlBhc3M9SFp0LHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5wcmVjaXNpb249bnVsbCx0aGlzLnBvbHlnb25PZmZzZXQ9ITEsdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yPTAsdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9MCx0aGlzLmRpdGhlcmluZz0hMSx0aGlzLmFscGhhVGVzdD0wLHRoaXMuYWxwaGFUb0NvdmVyYWdlPSExLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPSExLHRoaXMudmlzaWJsZT0hMCx0aGlzLnRvbmVNYXBwZWQ9ITAsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MH1vbkJ1aWxkKCl7fW9uQmVmb3JlQ29tcGlsZSgpe31jdXN0b21Qcm9ncmFtQ2FjaGVLZXkoKXtyZXR1cm4gdGhpcy5vbkJlZm9yZUNvbXBpbGUudG9TdHJpbmcoKX1zZXRWYWx1ZXModCl7aWYodm9pZCAwIT09dClmb3IoY29uc3QgZSBpbiB0KXtjb25zdCBuPXRbZV07aWYodm9pZCAwPT09bil7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrZSsiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKCJzaGFkaW5nIj09PWUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PW47Y29udGludWV9Y29uc3QgaT10aGlzW2VdO3ZvaWQgMCE9PWk/aSYmaS5pc0NvbG9yP2kuc2V0KG4pOmkmJmkuaXNWZWN0b3IzJiZuJiZuLmlzVmVjdG9yMz9pLmNvcHkobik6dGhpc1tlXT1uOmNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogJyIrZSsiJyBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGlzIG1hdGVyaWFsLiIpfX10b0pTT04odCl7Y29uc3QgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQ7ZSYmKHQ9e3RleHR1cmVzOnt9LGltYWdlczp7fX0pO2NvbnN0IG49e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJNYXRlcmlhbCIsZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07ZnVuY3Rpb24gaSh0KXtjb25zdCBlPVtdO2Zvcihjb25zdCBuIGluIHQpe2NvbnN0IGk9dFtuXTtkZWxldGUgaS5tZXRhZGF0YSxlLnB1c2goaSl9cmV0dXJuIGV9aWYobi51dWlkPXRoaXMudXVpZCxuLnR5cGU9dGhpcy50eXBlLCIiIT09dGhpcy5uYW1lJiYobi5uYW1lPXRoaXMubmFtZSksdGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYobi5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKSx2b2lkIDAhPT10aGlzLnJvdWdobmVzcyYmKG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKSx2b2lkIDAhPT10aGlzLm1ldGFsbmVzcyYmKG4ubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKSx0aGlzLnNoZWVuJiZ0aGlzLnNoZWVuLmlzQ29sb3ImJihuLnNoZWVuPXRoaXMuc2hlZW4uZ2V0SGV4KCkpLHRoaXMuZW1pc3NpdmUmJnRoaXMuZW1pc3NpdmUuaXNDb2xvciYmKG4uZW1pc3NpdmU9dGhpcy5lbWlzc2l2ZS5nZXRIZXgoKSksdGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmMSE9PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJihuLmVtaXNzaXZlSW50ZW5zaXR5PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKG4uc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zcGVjdWxhckludGVuc2l0eSYmKG4uc3BlY3VsYXJJbnRlbnNpdHk9dGhpcy5zcGVjdWxhckludGVuc2l0eSksdGhpcy5zcGVjdWxhclRpbnQmJnRoaXMuc3BlY3VsYXJUaW50LmlzQ29sb3ImJihuLnNwZWN1bGFyVGludD10aGlzLnNwZWN1bGFyVGludC5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zaGluaW5lc3MmJihuLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyksdm9pZCAwIT09dGhpcy5jbGVhcmNvYXQmJihuLmNsZWFyY29hdD10aGlzLmNsZWFyY29hdCksdm9pZCAwIT09dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MmJihuLmNsZWFyY29hdFJvdWdobmVzcz10aGlzLmNsZWFyY29hdFJvdWdobmVzcyksdGhpcy5jbGVhcmNvYXRNYXAmJnRoaXMuY2xlYXJjb2F0TWFwLmlzVGV4dHVyZSYmKG4uY2xlYXJjb2F0TWFwPXRoaXMuY2xlYXJjb2F0TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCYmdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYobi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwJiZ0aGlzLmNsZWFyY29hdE5vcm1hbE1hcC5pc1RleHR1cmUmJihuLmNsZWFyY29hdE5vcm1hbE1hcD10aGlzLmNsZWFyY29hdE5vcm1hbE1hcC50b0pTT04odCkudXVpZCxuLmNsZWFyY29hdE5vcm1hbFNjYWxlPXRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLm1hcCYmdGhpcy5tYXAuaXNUZXh0dXJlJiYobi5tYXA9dGhpcy5tYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWF0Y2FwJiZ0aGlzLm1hdGNhcC5pc1RleHR1cmUmJihuLm1hdGNhcD10aGlzLm1hdGNhcC50b0pTT04odCkudXVpZCksdGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihuLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYobi5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTih0KS51dWlkLG4ubGlnaHRNYXBJbnRlbnNpdHk9dGhpcy5saWdodE1hcEludGVuc2l0eSksdGhpcy5hb01hcCYmdGhpcy5hb01hcC5pc1RleHR1cmUmJihuLmFvTWFwPXRoaXMuYW9NYXAudG9KU09OKHQpLnV1aWQsbi5hb01hcEludGVuc2l0eT10aGlzLmFvTWFwSW50ZW5zaXR5KSx0aGlzLmJ1bXBNYXAmJnRoaXMuYnVtcE1hcC5pc1RleHR1cmUmJihuLmJ1bXBNYXA9dGhpcy5idW1wTWFwLnRvSlNPTih0KS51dWlkLG4uYnVtcFNjYWxlPXRoaXMuYnVtcFNjYWxlKSx0aGlzLm5vcm1hbE1hcCYmdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlJiYobi5ub3JtYWxNYXA9dGhpcy5ub3JtYWxNYXAudG9KU09OKHQpLnV1aWQsbi5ub3JtYWxNYXBUeXBlPXRoaXMubm9ybWFsTWFwVHlwZSxuLm5vcm1hbFNjYWxlPXRoaXMubm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLmRpc3BsYWNlbWVudE1hcCYmdGhpcy5kaXNwbGFjZW1lbnRNYXAuaXNUZXh0dXJlJiYobi5kaXNwbGFjZW1lbnRNYXA9dGhpcy5kaXNwbGFjZW1lbnRNYXAudG9KU09OKHQpLnV1aWQsbi5kaXNwbGFjZW1lbnRTY2FsZT10aGlzLmRpc3BsYWNlbWVudFNjYWxlLG4uZGlzcGxhY2VtZW50Qmlhcz10aGlzLmRpc3BsYWNlbWVudEJpYXMpLHRoaXMucm91Z2huZXNzTWFwJiZ0aGlzLnJvdWdobmVzc01hcC5pc1RleHR1cmUmJihuLnJvdWdobmVzc01hcD10aGlzLnJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5tZXRhbG5lc3NNYXAmJnRoaXMubWV0YWxuZXNzTWFwLmlzVGV4dHVyZSYmKG4ubWV0YWxuZXNzTWFwPXRoaXMubWV0YWxuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVtaXNzaXZlTWFwJiZ0aGlzLmVtaXNzaXZlTWFwLmlzVGV4dHVyZSYmKG4uZW1pc3NpdmVNYXA9dGhpcy5lbWlzc2l2ZU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihuLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhckludGVuc2l0eU1hcD10aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyVGludE1hcCYmdGhpcy5zcGVjdWxhclRpbnRNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhclRpbnRNYXA9dGhpcy5zcGVjdWxhclRpbnRNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuZW52TWFwJiZ0aGlzLmVudk1hcC5pc1RleHR1cmUmJihuLmVudk1hcD10aGlzLmVudk1hcC50b0pTT04odCkudXVpZCx2b2lkIDAhPT10aGlzLmNvbWJpbmUmJihuLmNvbWJpbmU9dGhpcy5jb21iaW5lKSksdm9pZCAwIT09dGhpcy5lbnZNYXBJbnRlbnNpdHkmJihuLmVudk1hcEludGVuc2l0eT10aGlzLmVudk1hcEludGVuc2l0eSksdm9pZCAwIT09dGhpcy5yZWZsZWN0aXZpdHkmJihuLnJlZmxlY3Rpdml0eT10aGlzLnJlZmxlY3Rpdml0eSksdm9pZCAwIT09dGhpcy5yZWZyYWN0aW9uUmF0aW8mJihuLnJlZnJhY3Rpb25SYXRpbz10aGlzLnJlZnJhY3Rpb25SYXRpbyksdGhpcy5ncmFkaWVudE1hcCYmdGhpcy5ncmFkaWVudE1hcC5pc1RleHR1cmUmJihuLmdyYWRpZW50TWFwPXRoaXMuZ3JhZGllbnRNYXAudG9KU09OKHQpLnV1aWQpLHZvaWQgMCE9PXRoaXMudHJhbnNtaXNzaW9uJiYobi50cmFuc21pc3Npb249dGhpcy50cmFuc21pc3Npb24pLHRoaXMudHJhbnNtaXNzaW9uTWFwJiZ0aGlzLnRyYW5zbWlzc2lvbk1hcC5pc1RleHR1cmUmJihuLnRyYW5zbWlzc2lvbk1hcD10aGlzLnRyYW5zbWlzc2lvbk1hcC50b0pTT04odCkudXVpZCksdm9pZCAwIT09dGhpcy50aGlja25lc3MmJihuLnRoaWNrbmVzcz10aGlzLnRoaWNrbmVzcyksdGhpcy50aGlja25lc3NNYXAmJnRoaXMudGhpY2tuZXNzTWFwLmlzVGV4dHVyZSYmKG4udGhpY2tuZXNzTWFwPXRoaXMudGhpY2tuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx2b2lkIDAhPT10aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UmJihuLmF0dGVudWF0aW9uRGlzdGFuY2U9dGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlKSx2b2lkIDAhPT10aGlzLmF0dGVudWF0aW9uVGludCYmKG4uYXR0ZW51YXRpb25UaW50PXRoaXMuYXR0ZW51YXRpb25UaW50LmdldEhleCgpKSx2b2lkIDAhPT10aGlzLnNpemUmJihuLnNpemU9dGhpcy5zaXplKSxudWxsIT09dGhpcy5zaGFkb3dTaWRlJiYobi5zaGFkb3dTaWRlPXRoaXMuc2hhZG93U2lkZSksdm9pZCAwIT09dGhpcy5zaXplQXR0ZW51YXRpb24mJihuLnNpemVBdHRlbnVhdGlvbj10aGlzLnNpemVBdHRlbnVhdGlvbiksMSE9PXRoaXMuYmxlbmRpbmcmJihuLmJsZW5kaW5nPXRoaXMuYmxlbmRpbmcpLDAhPT10aGlzLnNpZGUmJihuLnNpZGU9dGhpcy5zaWRlKSx0aGlzLnZlcnRleENvbG9ycyYmKG4udmVydGV4Q29sb3JzPSEwKSx0aGlzLm9wYWNpdHk8MSYmKG4ub3BhY2l0eT10aGlzLm9wYWNpdHkpLCEwPT09dGhpcy50cmFuc3BhcmVudCYmKG4udHJhbnNwYXJlbnQ9dGhpcy50cmFuc3BhcmVudCksbi5kZXB0aEZ1bmM9dGhpcy5kZXB0aEZ1bmMsbi5kZXB0aFRlc3Q9dGhpcy5kZXB0aFRlc3Qsbi5kZXB0aFdyaXRlPXRoaXMuZGVwdGhXcml0ZSxuLmNvbG9yV3JpdGU9dGhpcy5jb2xvcldyaXRlLG4uc3RlbmNpbFdyaXRlPXRoaXMuc3RlbmNpbFdyaXRlLG4uc3RlbmNpbFdyaXRlTWFzaz10aGlzLnN0ZW5jaWxXcml0ZU1hc2ssbi5zdGVuY2lsRnVuYz10aGlzLnN0ZW5jaWxGdW5jLG4uc3RlbmNpbFJlZj10aGlzLnN0ZW5jaWxSZWYsbi5zdGVuY2lsRnVuY01hc2s9dGhpcy5zdGVuY2lsRnVuY01hc2ssbi5zdGVuY2lsRmFpbD10aGlzLnN0ZW5jaWxGYWlsLG4uc3RlbmNpbFpGYWlsPXRoaXMuc3RlbmNpbFpGYWlsLG4uc3RlbmNpbFpQYXNzPXRoaXMuc3RlbmNpbFpQYXNzLHRoaXMucm90YXRpb24mJjAhPT10aGlzLnJvdGF0aW9uJiYobi5yb3RhdGlvbj10aGlzLnJvdGF0aW9uKSwhMD09PXRoaXMucG9seWdvbk9mZnNldCYmKG4ucG9seWdvbk9mZnNldD0hMCksMCE9PXRoaXMucG9seWdvbk9mZnNldEZhY3RvciYmKG4ucG9seWdvbk9mZnNldEZhY3Rvcj10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IpLDAhPT10aGlzLnBvbHlnb25PZmZzZXRVbml0cyYmKG4ucG9seWdvbk9mZnNldFVuaXRzPXRoaXMucG9seWdvbk9mZnNldFVuaXRzKSx0aGlzLmxpbmV3aWR0aCYmMSE9PXRoaXMubGluZXdpZHRoJiYobi5saW5ld2lkdGg9dGhpcy5saW5ld2lkdGgpLHZvaWQgMCE9PXRoaXMuZGFzaFNpemUmJihuLmRhc2hTaXplPXRoaXMuZGFzaFNpemUpLHZvaWQgMCE9PXRoaXMuZ2FwU2l6ZSYmKG4uZ2FwU2l6ZT10aGlzLmdhcFNpemUpLHZvaWQgMCE9PXRoaXMuc2NhbGUmJihuLnNjYWxlPXRoaXMuc2NhbGUpLCEwPT09dGhpcy5kaXRoZXJpbmcmJihuLmRpdGhlcmluZz0hMCksdGhpcy5hbHBoYVRlc3Q+MCYmKG4uYWxwaGFUZXN0PXRoaXMuYWxwaGFUZXN0KSwhMD09PXRoaXMuYWxwaGFUb0NvdmVyYWdlJiYobi5hbHBoYVRvQ292ZXJhZ2U9dGhpcy5hbHBoYVRvQ292ZXJhZ2UpLCEwPT09dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEmJihuLnByZW11bHRpcGxpZWRBbHBoYT10aGlzLnByZW11bHRpcGxpZWRBbHBoYSksITA9PT10aGlzLndpcmVmcmFtZSYmKG4ud2lyZWZyYW1lPXRoaXMud2lyZWZyYW1lKSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD4xJiYobi53aXJlZnJhbWVMaW5ld2lkdGg9dGhpcy53aXJlZnJhbWVMaW5ld2lkdGgpLCJyb3VuZCIhPT10aGlzLndpcmVmcmFtZUxpbmVjYXAmJihuLndpcmVmcmFtZUxpbmVjYXA9dGhpcy53aXJlZnJhbWVMaW5lY2FwKSwicm91bmQiIT09dGhpcy53aXJlZnJhbWVMaW5lam9pbiYmKG4ud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lam9pbiksITA9PT10aGlzLmZsYXRTaGFkaW5nJiYobi5mbGF0U2hhZGluZz10aGlzLmZsYXRTaGFkaW5nKSwhMT09PXRoaXMudmlzaWJsZSYmKG4udmlzaWJsZT0hMSksITE9PT10aGlzLnRvbmVNYXBwZWQmJihuLnRvbmVNYXBwZWQ9ITEpLCJ7fSIhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSYmKG4udXNlckRhdGE9dGhpcy51c2VyRGF0YSksZSl7Y29uc3QgZT1pKHQudGV4dHVyZXMpLHI9aSh0LmltYWdlcyk7ZS5sZW5ndGg+MCYmKG4udGV4dHVyZXM9ZSksci5sZW5ndGg+MCYmKG4uaW1hZ2VzPXIpfXJldHVybiBufWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7dGhpcy5uYW1lPXQubmFtZSx0aGlzLmZvZz10LmZvZyx0aGlzLmJsZW5kaW5nPXQuYmxlbmRpbmcsdGhpcy5zaWRlPXQuc2lkZSx0aGlzLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycyx0aGlzLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCx0aGlzLmJsZW5kU3JjPXQuYmxlbmRTcmMsdGhpcy5ibGVuZERzdD10LmJsZW5kRHN0LHRoaXMuYmxlbmRFcXVhdGlvbj10LmJsZW5kRXF1YXRpb24sdGhpcy5ibGVuZFNyY0FscGhhPXQuYmxlbmRTcmNBbHBoYSx0aGlzLmJsZW5kRHN0QWxwaGE9dC5ibGVuZERzdEFscGhhLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPXQuYmxlbmRFcXVhdGlvbkFscGhhLHRoaXMuZGVwdGhGdW5jPXQuZGVwdGhGdW5jLHRoaXMuZGVwdGhUZXN0PXQuZGVwdGhUZXN0LHRoaXMuZGVwdGhXcml0ZT10LmRlcHRoV3JpdGUsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayx0aGlzLnN0ZW5jaWxGdW5jPXQuc3RlbmNpbEZ1bmMsdGhpcy5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZix0aGlzLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayx0aGlzLnN0ZW5jaWxGYWlsPXQuc3RlbmNpbEZhaWwsdGhpcy5zdGVuY2lsWkZhaWw9dC5zdGVuY2lsWkZhaWwsdGhpcy5zdGVuY2lsWlBhc3M9dC5zdGVuY2lsWlBhc3MsdGhpcy5zdGVuY2lsV3JpdGU9dC5zdGVuY2lsV3JpdGU7Y29uc3QgZT10LmNsaXBwaW5nUGxhbmVzO2xldCBuPW51bGw7aWYobnVsbCE9PWUpe2NvbnN0IHQ9ZS5sZW5ndGg7bj1uZXcgQXJyYXkodCk7Zm9yKGxldCBpPTA7aSE9PXQ7KytpKW5baV09ZVtpXS5jbG9uZSgpfXJldHVybiB0aGlzLmNsaXBwaW5nUGxhbmVzPW4sdGhpcy5jbGlwSW50ZXJzZWN0aW9uPXQuY2xpcEludGVyc2VjdGlvbix0aGlzLmNsaXBTaGFkb3dzPXQuY2xpcFNoYWRvd3MsdGhpcy5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSx0aGlzLmNvbG9yV3JpdGU9dC5jb2xvcldyaXRlLHRoaXMucHJlY2lzaW9uPXQucHJlY2lzaW9uLHRoaXMucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQsdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yPXQucG9seWdvbk9mZnNldEZhY3Rvcix0aGlzLnBvbHlnb25PZmZzZXRVbml0cz10LnBvbHlnb25PZmZzZXRVbml0cyx0aGlzLmRpdGhlcmluZz10LmRpdGhlcmluZyx0aGlzLmFscGhhVGVzdD10LmFscGhhVGVzdCx0aGlzLmFscGhhVG9Db3ZlcmFnZT10LmFscGhhVG9Db3ZlcmFnZSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT10LnByZW11bHRpcGxpZWRBbHBoYSx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9c2V0IG5lZWRzVXBkYXRlKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9fVVRdC5wcm90b3R5cGUuaXNNYXRlcmlhbD0hMDtjb25zdCBqUXQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH0sR1F0PXtoOjAsczowLGw6MH0sV1F0PXtoOjAsczowLGw6MH07ZnVuY3Rpb24gcVF0KHQsZSxuKXtyZXR1cm4gbjwwJiYobis9MSksbj4xJiYobi09MSksbjwxLzY/dCs2KihlLXQpKm46bjwuNT9lOm48Mi8zP3QrNiooZS10KSooMi8zLW4pOnR9ZnVuY3Rpb24gWVF0KHQpe3JldHVybiB0PC4wNDA0NT8uMDc3Mzk5MzgwOCp0Ok1hdGgucG93KC45NDc4NjcyOTg2KnQrLjA1MjEzMjcwMTQsMi40KX1mdW5jdGlvbiBYUXQodCl7cmV0dXJuIHQ8LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LC40MTY2NiktLjA1NX1jbGFzcyAkUXR7Y29uc3RydWN0b3IodCxlLG4pe3JldHVybiB2b2lkIDA9PT1lJiZ2b2lkIDA9PT1uP3RoaXMuc2V0KHQpOnRoaXMuc2V0UkdCKHQsZSxuKX1zZXQodCl7cmV0dXJuIHQmJnQuaXNDb2xvcj90aGlzLmNvcHkodCk6Im51bWJlciI9PXR5cGVvZiB0P3RoaXMuc2V0SGV4KHQpOiJzdHJpbmciPT10eXBlb2YgdCYmdGhpcy5zZXRTdHlsZSh0KSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy5yPXQsdGhpcy5nPXQsdGhpcy5iPXQsdGhpc31zZXRIZXgodCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSx0aGlzLnI9KHQ+PjE2JjI1NSkvMjU1LHRoaXMuZz0odD4+OCYyNTUpLzI1NSx0aGlzLmI9KDI1NSZ0KS8yNTUsdGhpc31zZXRSR0IodCxlLG4pe3JldHVybiB0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9bix0aGlzfXNldEhTTCh0LGUsbil7aWYodD1LWnQodCwxKSxlPSRadChlLDAsMSksbj0kWnQobiwwLDEpLDA9PT1lKXRoaXMucj10aGlzLmc9dGhpcy5iPW47ZWxzZXtjb25zdCBpPW48PS41P24qKDErZSk6bitlLW4qZSxyPTIqbi1pO3RoaXMucj1xUXQocixpLHQrMS8zKSx0aGlzLmc9cVF0KHIsaSx0KSx0aGlzLmI9cVF0KHIsaSx0LTEvMyl9cmV0dXJuIHRoaXN9c2V0U3R5bGUodCl7ZnVuY3Rpb24gZShlKXt2b2lkIDAhPT1lJiZwYXJzZUZsb2F0KGUpPDEmJmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IEFscGhhIGNvbXBvbmVudCBvZiAiK3QrIiB3aWxsIGJlIGlnbm9yZWQuIil9bGV0IG47aWYobj0vXigoPzpyZ2J8aHNsKWE/KVwoKFteXCldKilcKS8uZXhlYyh0KSl7bGV0IHQ7Y29uc3QgaT1uWzJdO3N3aXRjaChuWzFdKXtjYXNlInJnYiI6Y2FzZSJyZ2JhIjppZih0PS9eXHMqKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoaSkpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigyNTUscGFyc2VJbnQodFsxXSwxMCkpLzI1NSx0aGlzLmc9TWF0aC5taW4oMjU1LHBhcnNlSW50KHRbMl0sMTApKS8yNTUsdGhpcy5iPU1hdGgubWluKDI1NSxwYXJzZUludCh0WzNdLDEwKSkvMjU1LGUodFs0XSksdGhpcztpZih0PS9eXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoaSkpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigxMDAscGFyc2VJbnQodFsxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KHRbMl0sMTApKS8xMDAsdGhpcy5iPU1hdGgubWluKDEwMCxwYXJzZUludCh0WzNdLDEwKSkvMTAwLGUodFs0XSksdGhpczticmVhaztjYXNlImhzbCI6Y2FzZSJoc2xhIjppZih0PS9eXHMqKFxkKlwuP1xkKylccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKGkpKXtjb25zdCBuPXBhcnNlRmxvYXQodFsxXSkvMzYwLGk9cGFyc2VJbnQodFsyXSwxMCkvMTAwLHI9cGFyc2VJbnQodFszXSwxMCkvMTAwO3JldHVybiBlKHRbNF0pLHRoaXMuc2V0SFNMKG4saSxyKX19fWVsc2UgaWYobj0vXlwjKFtBLUZhLWZcZF0rKSQvLmV4ZWModCkpe2NvbnN0IHQ9blsxXSxlPXQubGVuZ3RoO2lmKDM9PT1lKXJldHVybiB0aGlzLnI9cGFyc2VJbnQodC5jaGFyQXQoMCkrdC5jaGFyQXQoMCksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQodC5jaGFyQXQoMSkrdC5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQodC5jaGFyQXQoMikrdC5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKDY9PT1lKXJldHVybiB0aGlzLnI9cGFyc2VJbnQodC5jaGFyQXQoMCkrdC5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQodC5jaGFyQXQoMikrdC5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQodC5jaGFyQXQoNCkrdC5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfXJldHVybiB0JiZ0Lmxlbmd0aD4wP3RoaXMuc2V0Q29sb3JOYW1lKHQpOnRoaXN9c2V0Q29sb3JOYW1lKHQpe2NvbnN0IGU9alF0W3QudG9Mb3dlckNhc2UoKV07cmV0dXJuIHZvaWQgMCE9PWU/dGhpcy5zZXRIZXgoZSk6Y29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogVW5rbm93biBjb2xvciAiK3QpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5yLHRoaXMuZyx0aGlzLmIpfWNvcHkodCl7cmV0dXJuIHRoaXMucj10LnIsdGhpcy5nPXQuZyx0aGlzLmI9dC5iLHRoaXN9Y29weUdhbW1hVG9MaW5lYXIodCxlPTIpe3JldHVybiB0aGlzLnI9TWF0aC5wb3codC5yLGUpLHRoaXMuZz1NYXRoLnBvdyh0LmcsZSksdGhpcy5iPU1hdGgucG93KHQuYixlKSx0aGlzfWNvcHlMaW5lYXJUb0dhbW1hKHQsZT0yKXtjb25zdCBuPWU+MD8xL2U6MTtyZXR1cm4gdGhpcy5yPU1hdGgucG93KHQucixuKSx0aGlzLmc9TWF0aC5wb3codC5nLG4pLHRoaXMuYj1NYXRoLnBvdyh0LmIsbiksdGhpc31jb252ZXJ0R2FtbWFUb0xpbmVhcih0KXtyZXR1cm4gdGhpcy5jb3B5R2FtbWFUb0xpbmVhcih0aGlzLHQpLHRoaXN9Y29udmVydExpbmVhclRvR2FtbWEodCl7cmV0dXJuIHRoaXMuY29weUxpbmVhclRvR2FtbWEodGhpcyx0KSx0aGlzfWNvcHlTUkdCVG9MaW5lYXIodCl7cmV0dXJuIHRoaXMucj1ZUXQodC5yKSx0aGlzLmc9WVF0KHQuZyksdGhpcy5iPVlRdCh0LmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQih0KXtyZXR1cm4gdGhpcy5yPVhRdCh0LnIpLHRoaXMuZz1YUXQodC5nKSx0aGlzLmI9WFF0KHQuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIDI1NSp0aGlzLnI8PDE2XjI1NSp0aGlzLmc8PDheMjU1KnRoaXMuYjw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0wodCl7Y29uc3QgZT10aGlzLnIsbj10aGlzLmcsaT10aGlzLmIscj1NYXRoLm1heChlLG4saSksbz1NYXRoLm1pbihlLG4saSk7bGV0IGEscztjb25zdCBsPShvK3IpLzI7aWYobz09PXIpYT0wLHM9MDtlbHNle2NvbnN0IHQ9ci1vO3N3aXRjaChzPWw8PS41P3QvKHIrbyk6dC8oMi1yLW8pLHIpe2Nhc2UgZTphPShuLWkpL3QrKG48aT82OjApO2JyZWFrO2Nhc2UgbjphPShpLWUpL3QrMjticmVhaztjYXNlIGk6YT0oZS1uKS90KzR9YS89Nn1yZXR1cm4gdC5oPWEsdC5zPXMsdC5sPWwsdH1nZXRTdHlsZSgpe3JldHVybiJyZ2IoIisoMjU1KnRoaXMucnwwKSsiLCIrKDI1NSp0aGlzLmd8MCkrIiwiKygyNTUqdGhpcy5ifDApKyIpIn1vZmZzZXRIU0wodCxlLG4pe3JldHVybiB0aGlzLmdldEhTTChHUXQpLEdRdC5oKz10LEdRdC5zKz1lLEdRdC5sKz1uLHRoaXMuc2V0SFNMKEdRdC5oLEdRdC5zLEdRdC5sKSx0aGlzfWFkZCh0KXtyZXR1cm4gdGhpcy5yKz10LnIsdGhpcy5nKz10LmcsdGhpcy5iKz10LmIsdGhpc31hZGRDb2xvcnModCxlKXtyZXR1cm4gdGhpcy5yPXQucitlLnIsdGhpcy5nPXQuZytlLmcsdGhpcy5iPXQuYitlLmIsdGhpc31hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMucis9dCx0aGlzLmcrPXQsdGhpcy5iKz10LHRoaXN9c3ViKHQpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItdC5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctdC5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItdC5iKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLnIqPXQucix0aGlzLmcqPXQuZyx0aGlzLmIqPXQuYix0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLnIqPXQsdGhpcy5nKj10LHRoaXMuYio9dCx0aGlzfWxlcnAodCxlKXtyZXR1cm4gdGhpcy5yKz0odC5yLXRoaXMucikqZSx0aGlzLmcrPSh0LmctdGhpcy5nKSplLHRoaXMuYis9KHQuYi10aGlzLmIpKmUsdGhpc31sZXJwQ29sb3JzKHQsZSxuKXtyZXR1cm4gdGhpcy5yPXQucisoZS5yLXQucikqbix0aGlzLmc9dC5nKyhlLmctdC5nKSpuLHRoaXMuYj10LmIrKGUuYi10LmIpKm4sdGhpc31sZXJwSFNMKHQsZSl7dGhpcy5nZXRIU0woR1F0KSx0LmdldEhTTChXUXQpO2NvbnN0IG49Wlp0KEdRdC5oLFdRdC5oLGUpLGk9Wlp0KEdRdC5zLFdRdC5zLGUpLHI9Wlp0KEdRdC5sLFdRdC5sLGUpO3JldHVybiB0aGlzLnNldEhTTChuLGksciksdGhpc31lcXVhbHModCl7cmV0dXJuIHQucj09PXRoaXMuciYmdC5nPT09dGhpcy5nJiZ0LmI9PT10aGlzLmJ9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy5yPXRbZV0sdGhpcy5nPXRbZSsxXSx0aGlzLmI9dFtlKzJdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5yLHRbZSsxXT10aGlzLmcsdFtlKzJdPXRoaXMuYix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKXtyZXR1cm4gdGhpcy5yPXQuZ2V0WChlKSx0aGlzLmc9dC5nZXRZKGUpLHRoaXMuYj10LmdldFooZSksITA9PT10Lm5vcm1hbGl6ZWQmJih0aGlzLnIvPTI1NSx0aGlzLmcvPTI1NSx0aGlzLmIvPTI1NSksdGhpc310b0pTT04oKXtyZXR1cm4gdGhpcy5nZXRIZXgoKX19JFF0Lk5BTUVTPWpRdCwkUXQucHJvdG90eXBlLmlzQ29sb3I9ITAsJFF0LnByb3RvdHlwZS5yPTEsJFF0LnByb3RvdHlwZS5nPTEsJFF0LnByb3RvdHlwZS5iPTE7Y2xhc3MgS1F0IGV4dGVuZHMgVVF0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgJFF0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPTAsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX1LUXQucHJvdG90eXBlLmlzTWVzaEJhc2ljTWF0ZXJpYWw9ITA7Y29uc3QgWlF0PW5ldyBDSnQsSlF0PW5ldyBtSnQ7Y2xhc3MgUVF0e2NvbnN0cnVjdG9yKHQsZSxuKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5jb3VudD12b2lkIDAhPT10P3QubGVuZ3RoL2U6MCx0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1uLHRoaXMudXNhZ2U9Rlp0LHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MH1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5pdGVtU2l6ZT10Lml0ZW1TaXplLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLm5vcm1hbGl6ZWQ9dC5ub3JtYWxpemVkLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzfWNvcHlBdCh0LGUsbil7dCo9dGhpcy5pdGVtU2l6ZSxuKj1lLml0ZW1TaXplO2ZvcihsZXQgaT0wLHI9dGhpcy5pdGVtU2l6ZTtpPHI7aSsrKXRoaXMuYXJyYXlbdCtpXT1lLmFycmF5W24raV07cmV0dXJuIHRoaXN9Y29weUFycmF5KHQpe3JldHVybiB0aGlzLmFycmF5LnNldCh0KSx0aGlzfWNvcHlDb2xvcnNBcnJheSh0KXtjb25zdCBlPXRoaXMuYXJyYXk7bGV0IG49MDtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspe2xldCByPXRbaV07dm9pZCAwPT09ciYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlDb2xvcnNBcnJheSgpOiBjb2xvciBpcyB1bmRlZmluZWQiLGkpLHI9bmV3ICRRdCksZVtuKytdPXIucixlW24rK109ci5nLGVbbisrXT1yLmJ9cmV0dXJuIHRoaXN9Y29weVZlY3RvcjJzQXJyYXkodCl7Y29uc3QgZT10aGlzLmFycmF5O2xldCBuPTA7Zm9yKGxldCBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKXtsZXQgcj10W2ldO3ZvaWQgMD09PXImJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yMnNBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkIixpKSxyPW5ldyBtSnQpLGVbbisrXT1yLngsZVtuKytdPXIueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtjb25zdCBlPXRoaXMuYXJyYXk7bGV0IG49MDtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspe2xldCByPXRbaV07dm9pZCAwPT09ciYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLHI9bmV3IENKdCksZVtuKytdPXIueCxlW24rK109ci55LGVbbisrXT1yLnp9cmV0dXJuIHRoaXN9Y29weVZlY3RvcjRzQXJyYXkodCl7Y29uc3QgZT10aGlzLmFycmF5O2xldCBuPTA7Zm9yKGxldCBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKXtsZXQgcj10W2ldO3ZvaWQgMD09PXImJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yNHNBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkIixpKSxyPW5ldyB3SnQpLGVbbisrXT1yLngsZVtuKytdPXIueSxlW24rK109ci56LGVbbisrXT1yLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKDI9PT10aGlzLml0ZW1TaXplKWZvcihsZXQgZT0wLG49dGhpcy5jb3VudDtlPG47ZSsrKUpRdC5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksSlF0LmFwcGx5TWF0cml4Myh0KSx0aGlzLnNldFhZKGUsSlF0LngsSlF0LnkpO2Vsc2UgaWYoMz09PXRoaXMuaXRlbVNpemUpZm9yKGxldCBlPTAsbj10aGlzLmNvdW50O2U8bjtlKyspWlF0LmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxaUXQuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKGUsWlF0LngsWlF0LnksWlF0LnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IGU9MCxuPXRoaXMuY291bnQ7ZTxuO2UrKylaUXQueD10aGlzLmdldFgoZSksWlF0Lnk9dGhpcy5nZXRZKGUpLFpRdC56PXRoaXMuZ2V0WihlKSxaUXQuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsWlF0LngsWlF0LnksWlF0LnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgZT0wLG49dGhpcy5jb3VudDtlPG47ZSsrKVpRdC54PXRoaXMuZ2V0WChlKSxaUXQueT10aGlzLmdldFkoZSksWlF0Lno9dGhpcy5nZXRaKGUpLFpRdC5hcHBseU5vcm1hbE1hdHJpeCh0KSx0aGlzLnNldFhZWihlLFpRdC54LFpRdC55LFpRdC56KTtyZXR1cm4gdGhpc310cmFuc2Zvcm1EaXJlY3Rpb24odCl7Zm9yKGxldCBlPTAsbj10aGlzLmNvdW50O2U8bjtlKyspWlF0Lng9dGhpcy5nZXRYKGUpLFpRdC55PXRoaXMuZ2V0WShlKSxaUXQuej10aGlzLmdldFooZSksWlF0LnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLFpRdC54LFpRdC55LFpRdC56KTtyZXR1cm4gdGhpc31zZXQodCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPWUsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPWUsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPWUsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPWUsdGhpc31zZXRYWSh0LGUsbil7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPW4sdGhpc31zZXRYWVoodCxlLG4saSl7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPWksdGhpc31zZXRYWVpXKHQsZSxuLGkscil7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPWksdGhpcy5hcnJheVt0KzNdPXIsdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7Y29uc3QgdD17aXRlbVNpemU6dGhpcy5pdGVtU2l6ZSx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KSxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH07cmV0dXJuIiIhPT10aGlzLm5hbWUmJih0Lm5hbWU9dGhpcy5uYW1lKSx0aGlzLnVzYWdlIT09Rlp0JiYodC51c2FnZT10aGlzLnVzYWdlKSwwPT09dGhpcy51cGRhdGVSYW5nZS5vZmZzZXQmJi0xPT09dGhpcy51cGRhdGVSYW5nZS5jb3VudHx8KHQudXBkYXRlUmFuZ2U9dGhpcy51cGRhdGVSYW5nZSksdH19UVF0LnByb3RvdHlwZS5pc0J1ZmZlckF0dHJpYnV0ZT0hMDtjbGFzcyB0MXQgZXh0ZW5kcyBRUXR7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKG5ldyBJbnQ4QXJyYXkodCksZSxuKX19Y2xhc3MgZTF0IGV4dGVuZHMgUVF0e2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcihuZXcgVWludDhBcnJheSh0KSxlLG4pfX1jbGFzcyBuMXQgZXh0ZW5kcyBRUXR7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKG5ldyBVaW50OENsYW1wZWRBcnJheSh0KSxlLG4pfX1jbGFzcyBpMXQgZXh0ZW5kcyBRUXR7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKG5ldyBJbnQxNkFycmF5KHQpLGUsbil9fWNsYXNzIHIxdCBleHRlbmRzIFFRdHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLGUsbil9fWNsYXNzIG8xdCBleHRlbmRzIFFRdHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIobmV3IEludDMyQXJyYXkodCksZSxuKX19Y2xhc3MgYTF0IGV4dGVuZHMgUVF0e2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcihuZXcgVWludDMyQXJyYXkodCksZSxuKX19Y2xhc3MgczF0IGV4dGVuZHMgUVF0e2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxuKX19czF0LnByb3RvdHlwZS5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU9ITA7Y2xhc3MgbDF0IGV4dGVuZHMgUVF0e2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcihuZXcgRmxvYXQzMkFycmF5KHQpLGUsbil9fWNsYXNzIGMxdCBleHRlbmRzIFFRdHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIobmV3IEZsb2F0NjRBcnJheSh0KSxlLG4pfX1mdW5jdGlvbiB1MXQodCl7aWYoMD09PXQubGVuZ3RoKXJldHVybi0xLzA7bGV0IGU9dFswXTtmb3IobGV0IG49MSxpPXQubGVuZ3RoO248aTsrK24pdFtuXT5lJiYoZT10W25dKTtyZXR1cm4gZX1jb25zdCBoMXQ9e0ludDhBcnJheTpJbnQ4QXJyYXksVWludDhBcnJheTpVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5OlVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXk6SW50MTZBcnJheSxVaW50MTZBcnJheTpVaW50MTZBcnJheSxJbnQzMkFycmF5OkludDMyQXJyYXksVWludDMyQXJyYXk6VWludDMyQXJyYXksRmxvYXQzMkFycmF5OkZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXk6RmxvYXQ2NEFycmF5fTtmdW5jdGlvbiBkMXQodCxlKXtyZXR1cm4gbmV3IGgxdFt0XShlKX1sZXQgcDF0PTA7Y29uc3QgZjF0PW5ldyByUXQsbTF0PW5ldyBrUXQsZzF0PW5ldyBDSnQsXzF0PW5ldyBMSnQseTF0PW5ldyBMSnQsdjF0PW5ldyBDSnQ7Y2xhc3MgYjF0IGV4dGVuZHMgalp0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpwMXQrK30pLHRoaXMudXVpZD1YWnQoKSx0aGlzLm5hbWU9IiIsdGhpcy50eXBlPSJCdWZmZXJHZW9tZXRyeSIsdGhpcy5pbmRleD1udWxsLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLm1vcnBoQXR0cmlidXRlcz17fSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPSExLHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGwsdGhpcy5kcmF3UmFuZ2U9e3N0YXJ0OjAsY291bnQ6MS8wfSx0aGlzLnVzZXJEYXRhPXt9fWdldEluZGV4KCl7cmV0dXJuIHRoaXMuaW5kZXh9c2V0SW5kZXgodCl7cmV0dXJuIHRoaXMuaW5kZXg9QXJyYXkuaXNBcnJheSh0KT9uZXcodTF0KHQpPjY1NTM1P2ExdDpyMXQpKHQsMSk6dCx0aGlzfWdldEF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdfXNldEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF09ZSx0aGlzfWRlbGV0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t0XSx0aGlzfWhhc0F0dHJpYnV0ZSh0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5hdHRyaWJ1dGVzW3RdfWFkZEdyb3VwKHQsZSxuPTApe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OnQsY291bnQ6ZSxtYXRlcmlhbEluZGV4Om59KX1jbGVhckdyb3Vwcygpe3RoaXMuZ3JvdXBzPVtdfXNldERyYXdSYW5nZSh0LGUpe3RoaXMuZHJhd1JhbmdlLnN0YXJ0PXQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9ZX1hcHBseU1hdHJpeDQodCl7Y29uc3QgZT10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247dm9pZCAwIT09ZSYmKGUuYXBwbHlNYXRyaXg0KHQpLGUubmVlZHNVcGRhdGU9ITApO2NvbnN0IG49dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtpZih2b2lkIDAhPT1uKXtjb25zdCBlPShuZXcgZ0p0KS5nZXROb3JtYWxNYXRyaXgodCk7bi5hcHBseU5vcm1hbE1hdHJpeChlKSxuLm5lZWRzVXBkYXRlPSEwfWNvbnN0IGk9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7cmV0dXJuIHZvaWQgMCE9PWkmJihpLnRyYW5zZm9ybURpcmVjdGlvbih0KSxpLm5lZWRzVXBkYXRlPSEwKSxudWxsIT09dGhpcy5ib3VuZGluZ0JveCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSxudWxsIT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gZjF0Lm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuYXBwbHlNYXRyaXg0KGYxdCksdGhpc31yb3RhdGVYKHQpe3JldHVybiBmMXQubWFrZVJvdGF0aW9uWCh0KSx0aGlzLmFwcGx5TWF0cml4NChmMXQpLHRoaXN9cm90YXRlWSh0KXtyZXR1cm4gZjF0Lm1ha2VSb3RhdGlvblkodCksdGhpcy5hcHBseU1hdHJpeDQoZjF0KSx0aGlzfXJvdGF0ZVoodCl7cmV0dXJuIGYxdC5tYWtlUm90YXRpb25aKHQpLHRoaXMuYXBwbHlNYXRyaXg0KGYxdCksdGhpc310cmFuc2xhdGUodCxlLG4pe3JldHVybiBmMXQubWFrZVRyYW5zbGF0aW9uKHQsZSxuKSx0aGlzLmFwcGx5TWF0cml4NChmMXQpLHRoaXN9c2NhbGUodCxlLG4pe3JldHVybiBmMXQubWFrZVNjYWxlKHQsZSxuKSx0aGlzLmFwcGx5TWF0cml4NChmMXQpLHRoaXN9bG9va0F0KHQpe3JldHVybiBtMXQubG9va0F0KHQpLG0xdC51cGRhdGVNYXRyaXgoKSx0aGlzLmFwcGx5TWF0cml4NChtMXQubWF0cml4KSx0aGlzfWNlbnRlcigpe3JldHVybiB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKGcxdCkubmVnYXRlKCksdGhpcy50cmFuc2xhdGUoZzF0LngsZzF0LnksZzF0LnopLHRoaXN9c2V0RnJvbVBvaW50cyh0KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKyl7Y29uc3QgaT10W25dO2UucHVzaChpLngsaS55LGkuenx8MCl9cmV0dXJuIHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGwxdChlLDMpKSx0aGlzfWNvbXB1dGVCb3VuZGluZ0JveCgpe251bGw9PT10aGlzLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1uZXcgTEp0KTtjb25zdCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSlyZXR1cm4gY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIGJveC4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHZvaWQgdGhpcy5ib3VuZGluZ0JveC5zZXQobmV3IENKdCgtMS8wLC0xLzAsLTEvMCksbmV3IENKdCgxLzAsMS8wLDEvMCkpO2lmKHZvaWQgMCE9PXQpe2lmKHRoaXMuYm91bmRpbmdCb3guc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KSxlKWZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKylfMXQuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShlW3RdKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyh2MXQuYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1pbixfMXQubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQodjF0KSx2MXQuYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1heCxfMXQubWF4KSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQodjF0KSk6KHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChfMXQubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoXzF0Lm1heCkpfWVsc2UgdGhpcy5ib3VuZGluZ0JveC5tYWtlRW1wdHkoKTsoaXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueCl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnkpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi56KSkmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBDb21wdXRlZCBtaW4vbWF4IGhhdmUgTmFOIHZhbHVlcy4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX1jb21wdXRlQm91bmRpbmdTcGhlcmUoKXtudWxsPT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bmV3ICRKdCk7Y29uc3QgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24sZT10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBzcGhlcmUuIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx2b2lkIHRoaXMuYm91bmRpbmdTcGhlcmUuc2V0KG5ldyBDSnQsMS8wKTtpZih0KXtjb25zdCBuPXRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyO2lmKF8xdC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXkxdC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKGVbdF0pLHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU/KHYxdC5hZGRWZWN0b3JzKF8xdC5taW4seTF0Lm1pbiksXzF0LmV4cGFuZEJ5UG9pbnQodjF0KSx2MXQuYWRkVmVjdG9ycyhfMXQubWF4LHkxdC5tYXgpLF8xdC5leHBhbmRCeVBvaW50KHYxdCkpOihfMXQuZXhwYW5kQnlQb2ludCh5MXQubWluKSxfMXQuZXhwYW5kQnlQb2ludCh5MXQubWF4KSk7XzF0LmdldENlbnRlcihuKTtsZXQgaT0wO2ZvcihsZXQgZT0wLHI9dC5jb3VudDtlPHI7ZSsrKXYxdC5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSksaT1NYXRoLm1heChpLG4uZGlzdGFuY2VUb1NxdWFyZWQodjF0KSk7aWYoZSlmb3IobGV0IHI9MCxvPWUubGVuZ3RoO3I8bztyKyspe2NvbnN0IG89ZVtyXSxhPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7Zm9yKGxldCBlPTAscj1vLmNvdW50O2U8cjtlKyspdjF0LmZyb21CdWZmZXJBdHRyaWJ1dGUobyxlKSxhJiYoZzF0LmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKSx2MXQuYWRkKGcxdCkpLGk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKHYxdCkpfXRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzPU1hdGguc3FydChpKSxpc05hTih0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cykmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBDb21wdXRlZCByYWRpdXMgaXMgTmFOLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfX1jb21wdXRlRmFjZU5vcm1hbHMoKXt9Y29tcHV0ZVRhbmdlbnRzKCl7Y29uc3QgdD10aGlzLmluZGV4LGU9dGhpcy5hdHRyaWJ1dGVzO2lmKG51bGw9PT10fHx2b2lkIDA9PT1lLnBvc2l0aW9ufHx2b2lkIDA9PT1lLm5vcm1hbHx8dm9pZCAwPT09ZS51dilyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVUYW5nZW50cygpIGZhaWxlZC4gTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGVzIChpbmRleCwgcG9zaXRpb24sIG5vcm1hbCBvciB1dikiKTtjb25zdCBuPXQuYXJyYXksaT1lLnBvc2l0aW9uLmFycmF5LHI9ZS5ub3JtYWwuYXJyYXksbz1lLnV2LmFycmF5LGE9aS5sZW5ndGgvMzt2b2lkIDA9PT1lLnRhbmdlbnQmJnRoaXMuc2V0QXR0cmlidXRlKCJ0YW5nZW50IixuZXcgUVF0KG5ldyBGbG9hdDMyQXJyYXkoNCphKSw0KSk7Y29uc3Qgcz1lLnRhbmdlbnQuYXJyYXksbD1bXSxjPVtdO2ZvcihsZXQgdD0wO3Q8YTt0KyspbFt0XT1uZXcgQ0p0LGNbdF09bmV3IENKdDtjb25zdCB1PW5ldyBDSnQsaD1uZXcgQ0p0LGQ9bmV3IENKdCxwPW5ldyBtSnQsZj1uZXcgbUp0LG09bmV3IG1KdCxnPW5ldyBDSnQsXz1uZXcgQ0p0O2Z1bmN0aW9uIHkodCxlLG4pe3UuZnJvbUFycmF5KGksMyp0KSxoLmZyb21BcnJheShpLDMqZSksZC5mcm9tQXJyYXkoaSwzKm4pLHAuZnJvbUFycmF5KG8sMip0KSxmLmZyb21BcnJheShvLDIqZSksbS5mcm9tQXJyYXkobywyKm4pLGguc3ViKHUpLGQuc3ViKHUpLGYuc3ViKHApLG0uc3ViKHApO2NvbnN0IHI9MS8oZi54Km0ueS1tLngqZi55KTtpc0Zpbml0ZShyKSYmKGcuY29weShoKS5tdWx0aXBseVNjYWxhcihtLnkpLmFkZFNjYWxlZFZlY3RvcihkLC1mLnkpLm11bHRpcGx5U2NhbGFyKHIpLF8uY29weShkKS5tdWx0aXBseVNjYWxhcihmLngpLmFkZFNjYWxlZFZlY3RvcihoLC1tLngpLm11bHRpcGx5U2NhbGFyKHIpLGxbdF0uYWRkKGcpLGxbZV0uYWRkKGcpLGxbbl0uYWRkKGcpLGNbdF0uYWRkKF8pLGNbZV0uYWRkKF8pLGNbbl0uYWRkKF8pKX1sZXQgdj10aGlzLmdyb3VwczswPT09di5sZW5ndGgmJih2PVt7c3RhcnQ6MCxjb3VudDpuLmxlbmd0aH1dKTtmb3IobGV0IHQ9MCxlPXYubGVuZ3RoO3Q8ZTsrK3Qpe2NvbnN0IGU9dlt0XSxpPWUuc3RhcnQ7Zm9yKGxldCB0PWkscj1pK2UuY291bnQ7dDxyO3QrPTMpeShuW3QrMF0sblt0KzFdLG5bdCsyXSl9Y29uc3QgYj1uZXcgQ0p0LHg9bmV3IENKdCx3PW5ldyBDSnQsUz1uZXcgQ0p0O2Z1bmN0aW9uIE0odCl7dy5mcm9tQXJyYXkociwzKnQpLFMuY29weSh3KTtjb25zdCBlPWxbdF07Yi5jb3B5KGUpLGIuc3ViKHcubXVsdGlwbHlTY2FsYXIody5kb3QoZSkpKS5ub3JtYWxpemUoKSx4LmNyb3NzVmVjdG9ycyhTLGUpO2NvbnN0IG49eC5kb3QoY1t0XSk8MD8tMToxO3NbNCp0XT1iLngsc1s0KnQrMV09Yi55LHNbNCp0KzJdPWIueixzWzQqdCszXT1ufWZvcihsZXQgdD0wLGU9di5sZW5ndGg7dDxlOysrdCl7Y29uc3QgZT12W3RdLGk9ZS5zdGFydDtmb3IobGV0IHQ9aSxyPWkrZS5jb3VudDt0PHI7dCs9MylNKG5bdCswXSksTShuW3QrMV0pLE0oblt0KzJdKX19Y29tcHV0ZVZlcnRleE5vcm1hbHMoKXtjb25zdCB0PXRoaXMuaW5kZXgsZT10aGlzLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtpZih2b2lkIDAhPT1lKXtsZXQgbj10aGlzLmdldEF0dHJpYnV0ZSgibm9ybWFsIik7aWYodm9pZCAwPT09biluPW5ldyBRUXQobmV3IEZsb2F0MzJBcnJheSgzKmUuY291bnQpLDMpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG4pO2Vsc2UgZm9yKGxldCB0PTAsZT1uLmNvdW50O3Q8ZTt0Kyspbi5zZXRYWVoodCwwLDAsMCk7Y29uc3QgaT1uZXcgQ0p0LHI9bmV3IENKdCxvPW5ldyBDSnQsYT1uZXcgQ0p0LHM9bmV3IENKdCxsPW5ldyBDSnQsYz1uZXcgQ0p0LHU9bmV3IENKdDtpZih0KWZvcihsZXQgaD0wLGQ9dC5jb3VudDtoPGQ7aCs9Myl7Y29uc3QgZD10LmdldFgoaCswKSxwPXQuZ2V0WChoKzEpLGY9dC5nZXRYKGgrMik7aS5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZCksci5mcm9tQnVmZmVyQXR0cmlidXRlKGUscCksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZiksYy5zdWJWZWN0b3JzKG8sciksdS5zdWJWZWN0b3JzKGksciksYy5jcm9zcyh1KSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUobixkKSxzLmZyb21CdWZmZXJBdHRyaWJ1dGUobixwKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUobixmKSxhLmFkZChjKSxzLmFkZChjKSxsLmFkZChjKSxuLnNldFhZWihkLGEueCxhLnksYS56KSxuLnNldFhZWihwLHMueCxzLnkscy56KSxuLnNldFhZWihmLGwueCxsLnksbC56KX1lbHNlIGZvcihsZXQgdD0wLGE9ZS5jb3VudDt0PGE7dCs9MylpLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0KzApLHIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQrMSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCsyKSxjLnN1YlZlY3RvcnMobyxyKSx1LnN1YlZlY3RvcnMoaSxyKSxjLmNyb3NzKHUpLG4uc2V0WFlaKHQrMCxjLngsYy55LGMueiksbi5zZXRYWVoodCsxLGMueCxjLnksYy56KSxuLnNldFhZWih0KzIsYy54LGMueSxjLnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLG4ubmVlZHNVcGRhdGU9ITB9fW1lcmdlKHQsZSl7aWYoIXR8fCF0LmlzQnVmZmVyR2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5LiIsdCk7dm9pZCAwPT09ZSYmKGU9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtjb25zdCBuPXRoaXMuYXR0cmlidXRlcztmb3IoY29uc3QgaSBpbiBuKXtpZih2b2lkIDA9PT10LmF0dHJpYnV0ZXNbaV0pY29udGludWU7Y29uc3Qgcj1uW2ldLmFycmF5LG89dC5hdHRyaWJ1dGVzW2ldLGE9by5hcnJheSxzPW8uaXRlbVNpemUqZSxsPU1hdGgubWluKGEubGVuZ3RoLHIubGVuZ3RoLXMpO2ZvcihsZXQgdD0wLGU9czt0PGw7dCsrLGUrKylyW2VdPWFbdF19cmV0dXJuIHRoaXN9bm9ybWFsaXplTm9ybWFscygpe2NvbnN0IHQ9dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtmb3IobGV0IGU9MCxuPXQuY291bnQ7ZTxuO2UrKyl2MXQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLHYxdC5ub3JtYWxpemUoKSx0LnNldFhZWihlLHYxdC54LHYxdC55LHYxdC56KX10b05vbkluZGV4ZWQoKXtmdW5jdGlvbiB0KHQsZSl7Y29uc3Qgbj10LmFycmF5LGk9dC5pdGVtU2l6ZSxyPXQubm9ybWFsaXplZCxvPW5ldyBuLmNvbnN0cnVjdG9yKGUubGVuZ3RoKmkpO2xldCBhPTAscz0wO2ZvcihsZXQgcj0wLGw9ZS5sZW5ndGg7cjxsO3IrKyl7YT10LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/ZVtyXSp0LmRhdGEuc3RyaWRlK3Qub2Zmc2V0OmVbcl0qaTtmb3IobGV0IHQ9MDt0PGk7dCsrKW9bcysrXT1uW2ErK119cmV0dXJuIG5ldyBRUXQobyxpLHIpfWlmKG51bGw9PT10aGlzLmluZGV4KXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLiIpLHRoaXM7Y29uc3QgZT1uZXcgYjF0LG49dGhpcy5pbmRleC5hcnJheSxpPXRoaXMuYXR0cmlidXRlcztmb3IoY29uc3QgciBpbiBpKXtjb25zdCBvPXQoaVtyXSxuKTtlLnNldEF0dHJpYnV0ZShyLG8pfWNvbnN0IHI9dGhpcy5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGNvbnN0IGkgaW4gcil7Y29uc3Qgbz1bXSxhPXJbaV07Zm9yKGxldCBlPTAsaT1hLmxlbmd0aDtlPGk7ZSsrKXtjb25zdCBpPXQoYVtlXSxuKTtvLnB1c2goaSl9ZS5tb3JwaEF0dHJpYnV0ZXNbaV09b31lLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7Y29uc3Qgbz10aGlzLmdyb3Vwcztmb3IobGV0IHQ9MCxuPW8ubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49b1t0XTtlLmFkZEdyb3VwKG4uc3RhcnQsbi5jb3VudCxuLm1hdGVyaWFsSW5kZXgpfXJldHVybiBlfXRvSlNPTigpe2NvbnN0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJCdWZmZXJHZW9tZXRyeSIsZ2VuZXJhdG9yOiJCdWZmZXJHZW9tZXRyeS50b0pTT04ifX07aWYodC51dWlkPXRoaXMudXVpZCx0LnR5cGU9dGhpcy50eXBlLCIiIT09dGhpcy5uYW1lJiYodC5uYW1lPXRoaXMubmFtZSksT2JqZWN0LmtleXModGhpcy51c2VyRGF0YSkubGVuZ3RoPjAmJih0LnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLHZvaWQgMCE9PXRoaXMucGFyYW1ldGVycyl7Y29uc3QgZT10aGlzLnBhcmFtZXRlcnM7Zm9yKGNvbnN0IG4gaW4gZSl2b2lkIDAhPT1lW25dJiYodFtuXT1lW25dKTtyZXR1cm4gdH10LmRhdGE9e2F0dHJpYnV0ZXM6e319O2NvbnN0IGU9dGhpcy5pbmRleDtudWxsIT09ZSYmKHQuZGF0YS5pbmRleD17dHlwZTplLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5hcnJheSl9KTtjb25zdCBuPXRoaXMuYXR0cmlidXRlcztmb3IoY29uc3QgZSBpbiBuKXQuZGF0YS5hdHRyaWJ1dGVzW2VdPW5bZV0udG9KU09OKHQuZGF0YSk7Y29uc3QgaT17fTtsZXQgcj0hMTtmb3IoY29uc3QgZSBpbiB0aGlzLm1vcnBoQXR0cmlidXRlcyl7Y29uc3Qgbj10aGlzLm1vcnBoQXR0cmlidXRlc1tlXSxvPVtdO2ZvcihsZXQgZT0wLGk9bi5sZW5ndGg7ZTxpO2UrKylvLnB1c2gobltlXS50b0pTT04odC5kYXRhKSk7by5sZW5ndGg+MCYmKGlbZV09byxyPSEwKX1yJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1pLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtjb25zdCBvPXRoaXMuZ3JvdXBzO28ubGVuZ3RoPjAmJih0LmRhdGEuZ3JvdXBzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobykpKTtjb25zdCBhPXRoaXMuYm91bmRpbmdTcGhlcmU7cmV0dXJuIG51bGwhPT1hJiYodC5kYXRhLmJvdW5kaW5nU3BoZXJlPXtjZW50ZXI6YS5jZW50ZXIudG9BcnJheSgpLHJhZGl1czphLnJhZGl1c30pLHR9Y2xvbmUoKXtyZXR1cm4obmV3IGIxdCkuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbDtjb25zdCBlPXt9O3RoaXMubmFtZT10Lm5hbWU7Y29uc3Qgbj10LmluZGV4O251bGwhPT1uJiZ0aGlzLnNldEluZGV4KG4uY2xvbmUoZSkpO2NvbnN0IGk9dC5hdHRyaWJ1dGVzO2Zvcihjb25zdCB0IGluIGkpdGhpcy5zZXRBdHRyaWJ1dGUodCxpW3RdLmNsb25lKGUpKTtjb25zdCByPXQubW9ycGhBdHRyaWJ1dGVzO2Zvcihjb25zdCB0IGluIHIpe2NvbnN0IG49W10saT1yW3RdO2ZvcihsZXQgdD0wLHI9aS5sZW5ndGg7dDxyO3QrKyluLnB1c2goaVt0XS5jbG9uZShlKSk7dGhpcy5tb3JwaEF0dHJpYnV0ZXNbdF09bn10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXQubW9ycGhUYXJnZXRzUmVsYXRpdmU7Y29uc3Qgbz10Lmdyb3Vwcztmb3IobGV0IHQ9MCxlPW8ubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9b1t0XTt0aGlzLmFkZEdyb3VwKGUuc3RhcnQsZS5jb3VudCxlLm1hdGVyaWFsSW5kZXgpfWNvbnN0IGE9dC5ib3VuZGluZ0JveDtudWxsIT09YSYmKHRoaXMuYm91bmRpbmdCb3g9YS5jbG9uZSgpKTtjb25zdCBzPXQuYm91bmRpbmdTcGhlcmU7cmV0dXJuIG51bGwhPT1zJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1zLmNsb25lKCkpLHRoaXMuZHJhd1JhbmdlLnN0YXJ0PXQuZHJhd1JhbmdlLnN0YXJ0LHRoaXMuZHJhd1JhbmdlLmNvdW50PXQuZHJhd1JhbmdlLmNvdW50LHRoaXMudXNlckRhdGE9dC51c2VyRGF0YSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fWIxdC5wcm90b3R5cGUuaXNCdWZmZXJHZW9tZXRyeT0hMDtjb25zdCB4MXQ9bmV3IHJRdCx3MXQ9bmV3IGlRdCxTMXQ9bmV3ICRKdCxNMXQ9bmV3IENKdCxFMXQ9bmV3IENKdCxUMXQ9bmV3IENKdCxDMXQ9bmV3IENKdCxBMXQ9bmV3IENKdCxrMXQ9bmV3IENKdCxMMXQ9bmV3IENKdCxQMXQ9bmV3IENKdCxOMXQ9bmV3IENKdCxJMXQ9bmV3IG1KdCxSMXQ9bmV3IG1KdCxPMXQ9bmV3IG1KdCx6MXQ9bmV3IENKdCxEMXQ9bmV3IENKdDtjbGFzcyBCMXQgZXh0ZW5kcyBrUXR7Y29uc3RydWN0b3IodD1uZXcgYjF0LGU9bmV3IEtRdCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHZvaWQgMCE9PXQubW9ycGhUYXJnZXRJbmZsdWVuY2VzJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdm9pZCAwIT09dC5tb3JwaFRhcmdldERpY3Rpb25hcnkmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2NvbnN0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2NvbnN0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhlKTtpZihuLmxlbmd0aD4wKXtjb25zdCB0PWVbblswXV07aWYodm9pZCAwIT09dCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXRbZV0ubmFtZXx8U3RyaW5nKGUpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbbl09ZX19fX1lbHNle2NvbnN0IGU9dC5tb3JwaFRhcmdldHM7dm9pZCAwIT09ZSYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC51cGRhdGVNb3JwaFRhcmdldHMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX1yYXljYXN0KHQsZSl7Y29uc3Qgbj10aGlzLmdlb21ldHJ5LGk9dGhpcy5tYXRlcmlhbCxyPXRoaXMubWF0cml4V29ybGQ7aWYodm9pZCAwPT09aSlyZXR1cm47aWYobnVsbD09PW4uYm91bmRpbmdTcGhlcmUmJm4uY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksUzF0LmNvcHkobi5ib3VuZGluZ1NwaGVyZSksUzF0LmFwcGx5TWF0cml4NChyKSwhMT09PXQucmF5LmludGVyc2VjdHNTcGhlcmUoUzF0KSlyZXR1cm47aWYoeDF0LmNvcHkocikuaW52ZXJ0KCksdzF0LmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NCh4MXQpLG51bGwhPT1uLmJvdW5kaW5nQm94JiYhMT09PXcxdC5pbnRlcnNlY3RzQm94KG4uYm91bmRpbmdCb3gpKXJldHVybjtsZXQgbztpZihuLmlzQnVmZmVyR2VvbWV0cnkpe2NvbnN0IHI9bi5pbmRleCxhPW4uYXR0cmlidXRlcy5wb3NpdGlvbixzPW4ubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLGw9bi5tb3JwaFRhcmdldHNSZWxhdGl2ZSxjPW4uYXR0cmlidXRlcy51dix1PW4uYXR0cmlidXRlcy51djIsaD1uLmdyb3VwcyxkPW4uZHJhd1JhbmdlO2lmKG51bGwhPT1yKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBuPTAscD1oLmxlbmd0aDtuPHA7bisrKXtjb25zdCBwPWhbbl0sZj1pW3AubWF0ZXJpYWxJbmRleF07Zm9yKGxldCBuPU1hdGgubWF4KHAuc3RhcnQsZC5zdGFydCksaT1NYXRoLm1pbihwLnN0YXJ0K3AuY291bnQsZC5zdGFydCtkLmNvdW50KTtuPGk7bis9Myl7Y29uc3QgaT1yLmdldFgobiksaD1yLmdldFgobisxKSxkPXIuZ2V0WChuKzIpO289SDF0KHRoaXMsZix0LHcxdCxhLHMsbCxjLHUsaSxoLGQpLG8mJihvLmZhY2VJbmRleD1NYXRoLmZsb29yKG4vMyksby5mYWNlLm1hdGVyaWFsSW5kZXg9cC5tYXRlcmlhbEluZGV4LGUucHVzaChvKSl9fWVsc2UgZm9yKGxldCBuPU1hdGgubWF4KDAsZC5zdGFydCksaD1NYXRoLm1pbihyLmNvdW50LGQuc3RhcnQrZC5jb3VudCk7bjxoO24rPTMpe2NvbnN0IGg9ci5nZXRYKG4pLGQ9ci5nZXRYKG4rMSkscD1yLmdldFgobisyKTtvPUgxdCh0aGlzLGksdCx3MXQsYSxzLGwsYyx1LGgsZCxwKSxvJiYoby5mYWNlSW5kZXg9TWF0aC5mbG9vcihuLzMpLGUucHVzaChvKSl9ZWxzZSBpZih2b2lkIDAhPT1hKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBuPTAscj1oLmxlbmd0aDtuPHI7bisrKXtjb25zdCByPWhbbl0scD1pW3IubWF0ZXJpYWxJbmRleF07Zm9yKGxldCBuPU1hdGgubWF4KHIuc3RhcnQsZC5zdGFydCksaT1NYXRoLm1pbihyLnN0YXJ0K3IuY291bnQsZC5zdGFydCtkLmNvdW50KTtuPGk7bis9MylvPUgxdCh0aGlzLHAsdCx3MXQsYSxzLGwsYyx1LG4sbisxLG4rMiksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3Iobi8zKSxvLmZhY2UubWF0ZXJpYWxJbmRleD1yLm1hdGVyaWFsSW5kZXgsZS5wdXNoKG8pKX1lbHNlIGZvcihsZXQgbj1NYXRoLm1heCgwLGQuc3RhcnQpLHI9TWF0aC5taW4oYS5jb3VudCxkLnN0YXJ0K2QuY291bnQpO248cjtuKz0zKW89SDF0KHRoaXMsaSx0LHcxdCxhLHMsbCxjLHUsbixuKzEsbisyKSxvJiYoby5mYWNlSW5kZXg9TWF0aC5mbG9vcihuLzMpLGUucHVzaChvKSl9ZWxzZSBuLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2gucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fWZ1bmN0aW9uIEgxdCh0LGUsbixpLHIsbyxhLHMsbCxjLHUsaCl7TTF0LmZyb21CdWZmZXJBdHRyaWJ1dGUocixjKSxFMXQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLHUpLFQxdC5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaCk7Y29uc3QgZD10Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihvJiZkKXtMMXQuc2V0KDAsMCwwKSxQMXQuc2V0KDAsMCwwKSxOMXQuc2V0KDAsMCwwKTtmb3IobGV0IHQ9MCxlPW8ubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9ZFt0XSxuPW9bdF07MCE9PWUmJihDMXQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLGMpLEExdC5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdSksazF0LmZyb21CdWZmZXJBdHRyaWJ1dGUobixoKSxhPyhMMXQuYWRkU2NhbGVkVmVjdG9yKEMxdCxlKSxQMXQuYWRkU2NhbGVkVmVjdG9yKEExdCxlKSxOMXQuYWRkU2NhbGVkVmVjdG9yKGsxdCxlKSk6KEwxdC5hZGRTY2FsZWRWZWN0b3IoQzF0LnN1YihNMXQpLGUpLFAxdC5hZGRTY2FsZWRWZWN0b3IoQTF0LnN1YihFMXQpLGUpLE4xdC5hZGRTY2FsZWRWZWN0b3IoazF0LnN1YihUMXQpLGUpKSl9TTF0LmFkZChMMXQpLEUxdC5hZGQoUDF0KSxUMXQuYWRkKE4xdCl9dC5pc1NraW5uZWRNZXNoJiYodC5ib25lVHJhbnNmb3JtKGMsTTF0KSx0LmJvbmVUcmFuc2Zvcm0odSxFMXQpLHQuYm9uZVRyYW5zZm9ybShoLFQxdCkpO2NvbnN0IHA9KGZ1bmN0aW9uIGYodCxlLG4saSxyLG8sYSxzKXtsZXQgbDtpZihsPTE9PT1lLnNpZGU/aS5pbnRlcnNlY3RUcmlhbmdsZShhLG8sciwhMCxzKTppLmludGVyc2VjdFRyaWFuZ2xlKHIsbyxhLDIhPT1lLnNpZGUscyksbnVsbD09PWwpcmV0dXJuIG51bGw7RDF0LmNvcHkocyksRDF0LmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKTtjb25zdCBjPW4ucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKEQxdCk7cmV0dXJuIGM8bi5uZWFyfHxjPm4uZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6RDF0LmNsb25lKCksb2JqZWN0OnR9fSkodCxlLG4saSxNMXQsRTF0LFQxdCx6MXQpO2lmKHApe3MmJihJMXQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLGMpLFIxdC5mcm9tQnVmZmVyQXR0cmlidXRlKHMsdSksTzF0LmZyb21CdWZmZXJBdHRyaWJ1dGUocyxoKSxwLnV2PUZRdC5nZXRVVih6MXQsTTF0LEUxdCxUMXQsSTF0LFIxdCxPMXQsbmV3IG1KdCkpLGwmJihJMXQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLGMpLFIxdC5mcm9tQnVmZmVyQXR0cmlidXRlKGwsdSksTzF0LmZyb21CdWZmZXJBdHRyaWJ1dGUobCxoKSxwLnV2Mj1GUXQuZ2V0VVYoejF0LE0xdCxFMXQsVDF0LEkxdCxSMXQsTzF0LG5ldyBtSnQpKTtjb25zdCB0PXthOmMsYjp1LGM6aCxub3JtYWw6bmV3IENKdCxtYXRlcmlhbEluZGV4OjB9O0ZRdC5nZXROb3JtYWwoTTF0LEUxdCxUMXQsdC5ub3JtYWwpLHAuZmFjZT10fXJldHVybiBwfUIxdC5wcm90b3R5cGUuaXNNZXNoPSEwO2NsYXNzIEYxdCBleHRlbmRzIGIxdHtjb25zdHJ1Y3Rvcih0PTEsZT0xLG49MSxpPTEscj0xLG89MSl7c3VwZXIoKSx0aGlzLnR5cGU9IkJveEdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3dpZHRoOnQsaGVpZ2h0OmUsZGVwdGg6bix3aWR0aFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6cixkZXB0aFNlZ21lbnRzOm99O2NvbnN0IGE9dGhpcztpPU1hdGguZmxvb3IoaSkscj1NYXRoLmZsb29yKHIpLG89TWF0aC5mbG9vcihvKTtjb25zdCBzPVtdLGw9W10sYz1bXSx1PVtdO2xldCBoPTAsZD0wO2Z1bmN0aW9uIHAodCxlLG4saSxyLG8scCxmLG0sZyxfKXtjb25zdCB5PW8vbSx2PXAvZyxiPW8vMix4PXAvMix3PWYvMixTPW0rMSxNPWcrMTtsZXQgRT0wLFQ9MDtjb25zdCBDPW5ldyBDSnQ7Zm9yKGxldCBvPTA7bzxNO28rKyl7Y29uc3QgYT1vKnYteDtmb3IobGV0IHM9MDtzPFM7cysrKUNbdF09KHMqeS1iKSppLENbZV09YSpyLENbbl09dyxsLnB1c2goQy54LEMueSxDLnopLENbdF09MCxDW2VdPTAsQ1tuXT1mPjA/MTotMSxjLnB1c2goQy54LEMueSxDLnopLHUucHVzaChzL20pLHUucHVzaCgxLW8vZyksRSs9MX1mb3IobGV0IHQ9MDt0PGc7dCsrKWZvcihsZXQgZT0wO2U8bTtlKyspe2NvbnN0IG49aCtlK1MqKHQrMSksaT1oKyhlKzEpK1MqKHQrMSkscj1oKyhlKzEpK1MqdDtzLnB1c2goaCtlK1MqdCxuLHIpLHMucHVzaChuLGksciksVCs9Nn1hLmFkZEdyb3VwKGQsVCxfKSxkKz1ULGgrPUV9cCgieiIsInkiLCJ4IiwtMSwtMSxuLGUsdCxvLHIsMCkscCgieiIsInkiLCJ4IiwxLC0xLG4sZSwtdCxvLHIsMSkscCgieCIsInoiLCJ5IiwxLDEsdCxuLGUsaSxvLDIpLHAoIngiLCJ6IiwieSIsMSwtMSx0LG4sLWUsaSxvLDMpLHAoIngiLCJ5IiwieiIsMSwtMSx0LGUsbixpLHIsNCkscCgieCIsInkiLCJ6IiwtMSwtMSx0LGUsLW4saSxyLDUpLHRoaXMuc2V0SW5kZXgocyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgbDF0KGwsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBsMXQoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgbDF0KHUsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEYxdCh0LndpZHRoLHQuaGVpZ2h0LHQuZGVwdGgsdC53aWR0aFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5kZXB0aFNlZ21lbnRzKX19ZnVuY3Rpb24gVjF0KHQpe2NvbnN0IGU9e307Zm9yKGNvbnN0IG4gaW4gdCl7ZVtuXT17fTtmb3IoY29uc3QgaSBpbiB0W25dKXtjb25zdCByPXRbbl1baV07ZVtuXVtpXT1yJiYoci5pc0NvbG9yfHxyLmlzTWF0cml4M3x8ci5pc01hdHJpeDR8fHIuaXNWZWN0b3IyfHxyLmlzVmVjdG9yM3x8ci5pc1ZlY3RvcjR8fHIuaXNUZXh0dXJlfHxyLmlzUXVhdGVybmlvbik/ci5jbG9uZSgpOkFycmF5LmlzQXJyYXkocik/ci5zbGljZSgpOnJ9fXJldHVybiBlfWZ1bmN0aW9uIFUxdCh0KXtjb25zdCBlPXt9O2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtjb25zdCBpPVYxdCh0W25dKTtmb3IoY29uc3QgdCBpbiBpKWVbdF09aVt0XX1yZXR1cm4gZX1jb25zdCBqMXQ9e2Nsb25lOlYxdCxtZXJnZTpVMXR9O2NsYXNzIEcxdCBleHRlbmRzIFVRdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPSJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbn0iLHRoaXMuZnJhZ21lbnRTaGFkZXI9InZvaWQgbWFpbigpIHtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMS4wLCAwLjAsIDAuMCwgMS4wICk7XG59Iix0aGlzLmxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5saWdodHM9ITEsdGhpcy5jbGlwcGluZz0hMSx0aGlzLmV4dGVuc2lvbnM9e2Rlcml2YXRpdmVzOiExLGZyYWdEZXB0aDohMSxkcmF3QnVmZmVyczohMSxzaGFkZXJUZXh0dXJlTE9EOiExfSx0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM9e2NvbG9yOlsxLDEsMV0sdXY6WzAsMF0sdXYyOlswLDBdfSx0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWU9dm9pZCAwLHRoaXMudW5pZm9ybXNOZWVkVXBkYXRlPSExLHRoaXMuZ2xzbFZlcnNpb249bnVsbCx2b2lkIDAhPT10JiYodm9pZCAwIT09dC5hdHRyaWJ1dGVzJiZjb25zb2xlLmVycm9yKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogYXR0cmlidXRlcyBzaG91bGQgbm93IGJlIGRlZmluZWQgaW4gVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKSx0aGlzLnNldFZhbHVlcyh0KSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIsdGhpcy52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIsdGhpcy51bmlmb3Jtcz1WMXQodC51bmlmb3JtcyksdGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZpbmVzKSx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmxpZ2h0cz10LmxpZ2h0cyx0aGlzLmNsaXBwaW5nPXQuY2xpcHBpbmcsdGhpcy5leHRlbnNpb25zPU9iamVjdC5hc3NpZ24oe30sdC5leHRlbnNpb25zKSx0aGlzLmdsc2xWZXJzaW9uPXQuZ2xzbFZlcnNpb24sdGhpc310b0pTT04odCl7Y29uc3QgZT1zdXBlci50b0pTT04odCk7ZS5nbHNsVmVyc2lvbj10aGlzLmdsc2xWZXJzaW9uLGUudW5pZm9ybXM9e307Zm9yKGNvbnN0IG4gaW4gdGhpcy51bmlmb3Jtcyl7Y29uc3QgaT10aGlzLnVuaWZvcm1zW25dLnZhbHVlO2UudW5pZm9ybXNbbl09aSYmaS5pc1RleHR1cmU/e3R5cGU6InQiLHZhbHVlOmkudG9KU09OKHQpLnV1aWR9OmkmJmkuaXNDb2xvcj97dHlwZToiYyIsdmFsdWU6aS5nZXRIZXgoKX06aSYmaS5pc1ZlY3RvcjI/e3R5cGU6InYyIix2YWx1ZTppLnRvQXJyYXkoKX06aSYmaS5pc1ZlY3RvcjM/e3R5cGU6InYzIix2YWx1ZTppLnRvQXJyYXkoKX06aSYmaS5pc1ZlY3RvcjQ/e3R5cGU6InY0Iix2YWx1ZTppLnRvQXJyYXkoKX06aSYmaS5pc01hdHJpeDM/e3R5cGU6Im0zIix2YWx1ZTppLnRvQXJyYXkoKX06aSYmaS5pc01hdHJpeDQ/e3R5cGU6Im00Iix2YWx1ZTppLnRvQXJyYXkoKX06e3ZhbHVlOml9fU9iamVjdC5rZXlzKHRoaXMuZGVmaW5lcykubGVuZ3RoPjAmJihlLmRlZmluZXM9dGhpcy5kZWZpbmVzKSxlLnZlcnRleFNoYWRlcj10aGlzLnZlcnRleFNoYWRlcixlLmZyYWdtZW50U2hhZGVyPXRoaXMuZnJhZ21lbnRTaGFkZXI7Y29uc3Qgbj17fTtmb3IoY29uc3QgdCBpbiB0aGlzLmV4dGVuc2lvbnMpITA9PT10aGlzLmV4dGVuc2lvbnNbdF0mJihuW3RdPSEwKTtyZXR1cm4gT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJihlLmV4dGVuc2lvbnM9biksZX19RzF0LnByb3RvdHlwZS5pc1NoYWRlck1hdGVyaWFsPSEwO2NsYXNzIFcxdCBleHRlbmRzIGtRdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDYW1lcmEiLHRoaXMubWF0cml4V29ybGRJbnZlcnNlPW5ldyByUXQsdGhpcy5wcm9qZWN0aW9uTWF0cml4PW5ldyByUXQsdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZT1uZXcgclF0fWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KHQucHJvamVjdGlvbk1hdHJpeCksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLHRoaXN9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7Y29uc3QgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldCgtZVs4XSwtZVs5XSwtZVsxMF0pLm5vcm1hbGl6ZSgpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dXBkYXRlV29ybGRNYXRyaXgodCxlKXtzdXBlci51cGRhdGVXb3JsZE1hdHJpeCh0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fVcxdC5wcm90b3R5cGUuaXNDYW1lcmE9ITA7Y2xhc3MgcTF0IGV4dGVuZHMgVzF0e2NvbnN0cnVjdG9yKHQ9NTAsZT0xLG49LjEsaT0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJQZXJzcGVjdGl2ZUNhbWVyYSIsdGhpcy5mb3Y9dCx0aGlzLnpvb209MSx0aGlzLm5lYXI9bix0aGlzLmZhcj1pLHRoaXMuZm9jdXM9MTAsdGhpcy5hc3BlY3Q9ZSx0aGlzLnZpZXc9bnVsbCx0aGlzLmZpbG1HYXVnZT0zNSx0aGlzLmZpbG1PZmZzZXQ9MCx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0aGlzLmZvdj10LmZvdix0aGlzLnpvb209dC56b29tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy5mb2N1cz10LmZvY3VzLHRoaXMuYXNwZWN0PXQuYXNwZWN0LHRoaXMudmlldz1udWxsPT09dC52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXMuZmlsbUdhdWdlPXQuZmlsbUdhdWdlLHRoaXMuZmlsbU9mZnNldD10LmZpbG1PZmZzZXQsdGhpc31zZXRGb2NhbExlbmd0aCh0KXtjb25zdCBlPS41KnRoaXMuZ2V0RmlsbUhlaWdodCgpL3Q7dGhpcy5mb3Y9MipZWnQqTWF0aC5hdGFuKGUpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldEZvY2FsTGVuZ3RoKCl7Y29uc3QgdD1NYXRoLnRhbiguNSpxWnQqdGhpcy5mb3YpO3JldHVybi41KnRoaXMuZ2V0RmlsbUhlaWdodCgpL3R9Z2V0RWZmZWN0aXZlRk9WKCl7cmV0dXJuIDIqWVp0Kk1hdGguYXRhbihNYXRoLnRhbiguNSpxWnQqdGhpcy5mb3YpL3RoaXMuem9vbSl9Z2V0RmlsbVdpZHRoKCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlKk1hdGgubWluKHRoaXMuYXNwZWN0LDEpfWdldEZpbG1IZWlnaHQoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UvTWF0aC5tYXgodGhpcy5hc3BlY3QsMSl9c2V0Vmlld09mZnNldCh0LGUsbixpLHIsbyl7dGhpcy5hc3BlY3Q9dC9lLG51bGw9PT10aGlzLnZpZXcmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1lLHRoaXMudmlldy5vZmZzZXRYPW4sdGhpcy52aWV3Lm9mZnNldFk9aSx0aGlzLnZpZXcud2lkdGg9cix0aGlzLnZpZXcuaGVpZ2h0PW8sdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7bnVsbCE9PXRoaXMudmlldyYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7Y29uc3QgdD10aGlzLm5lYXI7bGV0IGU9dCpNYXRoLnRhbiguNSpxWnQqdGhpcy5mb3YpL3RoaXMuem9vbSxuPTIqZSxpPXRoaXMuYXNwZWN0Km4scj0tLjUqaTtjb25zdCBvPXRoaXMudmlldztpZihudWxsIT09dGhpcy52aWV3JiZ0aGlzLnZpZXcuZW5hYmxlZCl7Y29uc3QgdD1vLmZ1bGxXaWR0aCxhPW8uZnVsbEhlaWdodDtyKz1vLm9mZnNldFgqaS90LGUtPW8ub2Zmc2V0WSpuL2EsaSo9by53aWR0aC90LG4qPW8uaGVpZ2h0L2F9Y29uc3QgYT10aGlzLmZpbG1PZmZzZXQ7MCE9PWEmJihyKz10KmEvdGhpcy5nZXRGaWxtV2lkdGgoKSksdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShyLHIraSxlLGUtbix0LHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7Y29uc3QgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LmZvdj10aGlzLmZvdixlLm9iamVjdC56b29tPXRoaXMuem9vbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsZS5vYmplY3QuZm9jdXM9dGhpcy5mb2N1cyxlLm9iamVjdC5hc3BlY3Q9dGhpcy5hc3BlY3QsbnVsbCE9PXRoaXMudmlldyYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlLm9iamVjdC5maWxtR2F1Z2U9dGhpcy5maWxtR2F1Z2UsZS5vYmplY3QuZmlsbU9mZnNldD10aGlzLmZpbG1PZmZzZXQsZX19cTF0LnByb3RvdHlwZS5pc1BlcnNwZWN0aXZlQ2FtZXJhPSEwO2NvbnN0IFkxdD05MDtjbGFzcyBYMXQgZXh0ZW5kcyBrUXR7Y29uc3RydWN0b3IodCxlLG4pe2lmKHN1cGVyKCksdGhpcy50eXBlPSJDdWJlQ2FtZXJhIiwhMCE9PW4uaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuQ3ViZUNhbWVyYTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIGFuIGluc3RhbmNlIG9mIFdlYkdMQ3ViZVJlbmRlclRhcmdldCBhcyB0aGlyZCBwYXJhbWV0ZXIuIik7dGhpcy5yZW5kZXJUYXJnZXQ9bjtjb25zdCBpPW5ldyBxMXQoWTF0LDEsdCxlKTtpLmxheWVycz10aGlzLmxheWVycyxpLnVwLnNldCgwLC0xLDApLGkubG9va0F0KG5ldyBDSnQoMSwwLDApKSx0aGlzLmFkZChpKTtjb25zdCByPW5ldyBxMXQoWTF0LDEsdCxlKTtyLmxheWVycz10aGlzLmxheWVycyxyLnVwLnNldCgwLC0xLDApLHIubG9va0F0KG5ldyBDSnQoLTEsMCwwKSksdGhpcy5hZGQocik7Y29uc3Qgbz1uZXcgcTF0KFkxdCwxLHQsZSk7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwwLDEpLG8ubG9va0F0KG5ldyBDSnQoMCwxLDApKSx0aGlzLmFkZChvKTtjb25zdCBhPW5ldyBxMXQoWTF0LDEsdCxlKTthLmxheWVycz10aGlzLmxheWVycyxhLnVwLnNldCgwLDAsLTEpLGEubG9va0F0KG5ldyBDSnQoMCwtMSwwKSksdGhpcy5hZGQoYSk7Y29uc3Qgcz1uZXcgcTF0KFkxdCwxLHQsZSk7cy5sYXllcnM9dGhpcy5sYXllcnMscy51cC5zZXQoMCwtMSwwKSxzLmxvb2tBdChuZXcgQ0p0KDAsMCwxKSksdGhpcy5hZGQocyk7Y29uc3QgbD1uZXcgcTF0KFkxdCwxLHQsZSk7bC5sYXllcnM9dGhpcy5sYXllcnMsbC51cC5zZXQoMCwtMSwwKSxsLmxvb2tBdChuZXcgQ0p0KDAsMCwtMSkpLHRoaXMuYWRkKGwpfXVwZGF0ZSh0LGUpe251bGw9PT10aGlzLnBhcmVudCYmdGhpcy51cGRhdGVNYXRyaXhXb3JsZCgpO2NvbnN0IG49dGhpcy5yZW5kZXJUYXJnZXQsW2kscixvLGEscyxsXT10aGlzLmNoaWxkcmVuLGM9dC54ci5lbmFibGVkLHU9dC5nZXRSZW5kZXJUYXJnZXQoKTt0LnhyLmVuYWJsZWQ9ITE7Y29uc3QgaD1uLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO24udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITEsdC5zZXRSZW5kZXJUYXJnZXQobiwwKSx0LnJlbmRlcihlLGkpLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMSksdC5yZW5kZXIoZSxyKSx0LnNldFJlbmRlclRhcmdldChuLDIpLHQucmVuZGVyKGUsbyksdC5zZXRSZW5kZXJUYXJnZXQobiwzKSx0LnJlbmRlcihlLGEpLHQuc2V0UmVuZGVyVGFyZ2V0KG4sNCksdC5yZW5kZXIoZSxzKSxuLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWgsdC5zZXRSZW5kZXJUYXJnZXQobiw1KSx0LnJlbmRlcihlLGwpLHQuc2V0UmVuZGVyVGFyZ2V0KHUpLHQueHIuZW5hYmxlZD1jfX1jbGFzcyAkMXQgZXh0ZW5kcyBiSnR7Y29uc3RydWN0b3IodCxlLG4saSxyLG8sYSxzLGwsYyl7c3VwZXIodD12b2lkIDAhPT10P3Q6W10sZT12b2lkIDAhPT1lP2U6akt0LG4saSxyLG8sYT12b2lkIDAhPT1hP2E6dVp0LHMsbCxjKSx0aGlzLmZsaXBZPSExfWdldCBpbWFnZXMoKXtyZXR1cm4gdGhpcy5pbWFnZX1zZXQgaW1hZ2VzKHQpe3RoaXMuaW1hZ2U9dH19JDF0LnByb3RvdHlwZS5pc0N1YmVUZXh0dXJlPSEwO2NsYXNzIEsxdCBleHRlbmRzIFNKdHtjb25zdHJ1Y3Rvcih0LGUsbil7TnVtYmVyLmlzSW50ZWdlcihlKSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xDdWJlUmVuZGVyVGFyZ2V0OiBjb25zdHJ1Y3RvciBzaWduYXR1cmUgaXMgbm93IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggc2l6ZSwgb3B0aW9ucyApIiksZT1uKSxzdXBlcih0LHQsZSksdGhpcy50ZXh0dXJlPW5ldyAkMXQodm9pZCAwLChlPWV8fHt9KS5tYXBwaW5nLGUud3JhcFMsZS53cmFwVCxlLm1hZ0ZpbHRlcixlLm1pbkZpbHRlcixlLmZvcm1hdCxlLnR5cGUsZS5hbmlzb3Ryb3B5LGUuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz12b2lkIDAhPT1lLmdlbmVyYXRlTWlwbWFwcyYmZS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj12b2lkIDAhPT1lLm1pbkZpbHRlcj9lLm1pbkZpbHRlcjplWnQsdGhpcy50ZXh0dXJlLl9uZWVkc0ZsaXBFbnZNYXA9ITF9ZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmUodCxlKXt0aGlzLnRleHR1cmUudHlwZT1lLnR5cGUsdGhpcy50ZXh0dXJlLmZvcm1hdD1oWnQsdGhpcy50ZXh0dXJlLmVuY29kaW5nPWUuZW5jb2RpbmcsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUubWluRmlsdGVyLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5tYWdGaWx0ZXI7Y29uc3Qgbj1uZXcgRjF0KDUsNSw1KSxpPW5ldyBHMXQoe25hbWU6IkN1YmVtYXBGcm9tRXF1aXJlY3QiLHVuaWZvcm1zOlYxdCh7dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0pLHZlcnRleFNoYWRlcjoiXG5cblx0XHRcdFx0dmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcblxuXHRcdFx0XHR2ZWMzIHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXG5cdFx0XHRcdFx0cmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRcdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cblx0XHRcdFx0XHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHRcdFx0XHRcdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblxuXHRcdFx0XHR9XG5cdFx0XHQiLGZyYWdtZW50U2hhZGVyOiJcblxuXHRcdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7XG5cblx0XHRcdFx0dmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcblxuXHRcdFx0XHQjaW5jbHVkZSA8Y29tbW9uPlxuXG5cdFx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRcdHZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTtcblxuXHRcdFx0XHRcdHZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTtcblxuXHRcdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApO1xuXG5cdFx0XHRcdH1cblx0XHRcdCIsc2lkZToxLGJsZW5kaW5nOjB9KTtpLnVuaWZvcm1zLnRFcXVpcmVjdC52YWx1ZT1lO2NvbnN0IHI9bmV3IEIxdChuLGkpLG89ZS5taW5GaWx0ZXI7cmV0dXJuIGUubWluRmlsdGVyPT09aVp0JiYoZS5taW5GaWx0ZXI9ZVp0KSxuZXcgWDF0KDEsMTAsdGhpcykudXBkYXRlKHQsciksZS5taW5GaWx0ZXI9byxyLmdlb21ldHJ5LmRpc3Bvc2UoKSxyLm1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzfWNsZWFyKHQsZSxuLGkpe2NvbnN0IHI9dC5nZXRSZW5kZXJUYXJnZXQoKTtmb3IobGV0IHI9MDtyPDY7cisrKXQuc2V0UmVuZGVyVGFyZ2V0KHRoaXMsciksdC5jbGVhcihlLG4saSk7dC5zZXRSZW5kZXJUYXJnZXQocil9fUsxdC5wcm90b3R5cGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9ITA7Y29uc3QgWjF0PW5ldyBDSnQsSjF0PW5ldyBDSnQsUTF0PW5ldyBnSnQ7Y2xhc3MgdDB0e2NvbnN0cnVjdG9yKHQ9bmV3IENKdCgxLDAsMCksZT0wKXt0aGlzLm5vcm1hbD10LHRoaXMuY29uc3RhbnQ9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0KSx0aGlzLmNvbnN0YW50PWUsdGhpc31zZXRDb21wb25lbnRzKHQsZSxuLGkpe3JldHVybiB0aGlzLm5vcm1hbC5zZXQodCxlLG4pLHRoaXMuY29uc3RhbnQ9aSx0aGlzfXNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHQsZSl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD0tZS5kb3QodGhpcy5ub3JtYWwpLHRoaXN9c2V0RnJvbUNvcGxhbmFyUG9pbnRzKHQsZSxuKXtjb25zdCBpPVoxdC5zdWJWZWN0b3JzKG4sZSkuY3Jvc3MoSjF0LnN1YlZlY3RvcnModCxlKSkubm9ybWFsaXplKCk7cmV0dXJuIHRoaXMuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQoaSx0KSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodC5ub3JtYWwpLHRoaXMuY29uc3RhbnQ9dC5jb25zdGFudCx0aGlzfW5vcm1hbGl6ZSgpe2NvbnN0IHQ9MS90aGlzLm5vcm1hbC5sZW5ndGgoKTtyZXR1cm4gdGhpcy5ub3JtYWwubXVsdGlwbHlTY2FsYXIodCksdGhpcy5jb25zdGFudCo9dCx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLmNvbnN0YW50Kj0tMSx0aGlzLm5vcm1hbC5uZWdhdGUoKSx0aGlzfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuZG90KHQpK3RoaXMuY29uc3RhbnR9ZGlzdGFuY2VUb1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQodC5jZW50ZXIpLXQucmFkaXVzfXByb2plY3RQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmRpc3RhbmNlVG9Qb2ludCh0KSkuYWRkKHQpfWludGVyc2VjdExpbmUodCxlKXtjb25zdCBuPXQuZGVsdGEoWjF0KSxpPXRoaXMubm9ybWFsLmRvdChuKTtpZigwPT09aSlyZXR1cm4gMD09PXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpP2UuY29weSh0LnN0YXJ0KTpudWxsO2NvbnN0IHI9LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvaTtyZXR1cm4gcjwwfHxyPjE/bnVsbDplLmNvcHkobikubXVsdGlwbHlTY2FsYXIocikuYWRkKHQuc3RhcnQpfWludGVyc2VjdHNMaW5lKHQpe2NvbnN0IGU9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCksbj10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmVuZCk7cmV0dXJuIGU8MCYmbj4wfHxuPDAmJmU+MH1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1jb3BsYW5hclBvaW50KHQpe3JldHVybiB0LmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX1hcHBseU1hdHJpeDQodCxlKXtjb25zdCBuPWV8fFExdC5nZXROb3JtYWxNYXRyaXgodCksaT10aGlzLmNvcGxhbmFyUG9pbnQoWjF0KS5hcHBseU1hdHJpeDQodCkscj10aGlzLm5vcm1hbC5hcHBseU1hdHJpeDMobikubm9ybWFsaXplKCk7cmV0dXJuIHRoaXMuY29uc3RhbnQ9LWkuZG90KHIpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLmNvbnN0YW50LT10LmRvdCh0aGlzLm5vcm1hbCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubm9ybWFsLmVxdWFscyh0aGlzLm5vcm1hbCkmJnQuY29uc3RhbnQ9PT10aGlzLmNvbnN0YW50fWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX10MHQucHJvdG90eXBlLmlzUGxhbmU9ITA7Y29uc3QgZTB0PW5ldyAkSnQsbjB0PW5ldyBDSnQ7Y2xhc3MgaTB0e2NvbnN0cnVjdG9yKHQ9bmV3IHQwdCxlPW5ldyB0MHQsbj1uZXcgdDB0LGk9bmV3IHQwdCxyPW5ldyB0MHQsbz1uZXcgdDB0KXt0aGlzLnBsYW5lcz1bdCxlLG4saSxyLG9dfXNldCh0LGUsbixpLHIsbyl7Y29uc3QgYT10aGlzLnBsYW5lcztyZXR1cm4gYVswXS5jb3B5KHQpLGFbMV0uY29weShlKSxhWzJdLmNvcHkobiksYVszXS5jb3B5KGkpLGFbNF0uY29weShyKSxhWzVdLmNvcHkobyksdGhpc31jb3B5KHQpe2NvbnN0IGU9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKyllW25dLmNvcHkodC5wbGFuZXNbbl0pO3JldHVybiB0aGlzfXNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHQpe2NvbnN0IGU9dGhpcy5wbGFuZXMsbj10LmVsZW1lbnRzLGk9blswXSxyPW5bMV0sbz1uWzJdLGE9blszXSxzPW5bNF0sbD1uWzVdLGM9bls2XSx1PW5bN10saD1uWzhdLGQ9bls5XSxwPW5bMTBdLGY9blsxMV0sbT1uWzEyXSxnPW5bMTNdLF89blsxNF0seT1uWzE1XTtyZXR1cm4gZVswXS5zZXRDb21wb25lbnRzKGEtaSx1LXMsZi1oLHktbSkubm9ybWFsaXplKCksZVsxXS5zZXRDb21wb25lbnRzKGEraSx1K3MsZitoLHkrbSkubm9ybWFsaXplKCksZVsyXS5zZXRDb21wb25lbnRzKGErcix1K2wsZitkLHkrZykubm9ybWFsaXplKCksZVszXS5zZXRDb21wb25lbnRzKGEtcix1LWwsZi1kLHktZykubm9ybWFsaXplKCksZVs0XS5zZXRDb21wb25lbnRzKGEtbyx1LWMsZi1wLHktXykubm9ybWFsaXplKCksZVs1XS5zZXRDb21wb25lbnRzKGErbyx1K2MsZitwLHkrXykubm9ybWFsaXplKCksdGhpc31pbnRlcnNlY3RzT2JqZWN0KHQpe2NvbnN0IGU9dC5nZW9tZXRyeTtyZXR1cm4gbnVsbD09PWUuYm91bmRpbmdTcGhlcmUmJmUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksZTB0LmNvcHkoZS5ib3VuZGluZ1NwaGVyZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShlMHQpfWludGVyc2VjdHNTcHJpdGUodCl7cmV0dXJuIGUwdC5jZW50ZXIuc2V0KDAsMCwwKSxlMHQucmFkaXVzPS43MDcxMDY3ODExODY1NDc2LGUwdC5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKGUwdCl9aW50ZXJzZWN0c1NwaGVyZSh0KXtjb25zdCBlPXRoaXMucGxhbmVzLG49dC5jZW50ZXIsaT0tdC5yYWRpdXM7Zm9yKGxldCB0PTA7dDw2O3QrKylpZihlW3RdLmRpc3RhbmNlVG9Qb2ludChuKTxpKXJldHVybiExO3JldHVybiEwfWludGVyc2VjdHNCb3godCl7Y29uc3QgZT10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKXtjb25zdCBpPWVbbl07aWYobjB0Lng9aS5ub3JtYWwueD4wP3QubWF4Lng6dC5taW4ueCxuMHQueT1pLm5vcm1hbC55PjA/dC5tYXgueTp0Lm1pbi55LG4wdC56PWkubm9ybWFsLno+MD90Lm1heC56OnQubWluLnosaS5kaXN0YW5jZVRvUG9pbnQobjB0KTwwKXJldHVybiExfXJldHVybiEwfWNvbnRhaW5zUG9pbnQodCl7Y29uc3QgZT10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKWlmKGVbbl0uZGlzdGFuY2VUb1BvaW50KHQpPDApcmV0dXJuITE7cmV0dXJuITB9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fWZ1bmN0aW9uIHIwdCgpe2xldCB0PW51bGwsZT0hMSxuPW51bGwsaT1udWxsO2Z1bmN0aW9uIHIoZSxvKXtuKGUsbyksaT10LnJlcXVlc3RBbmltYXRpb25GcmFtZShyKX1yZXR1cm57c3RhcnQ6ZnVuY3Rpb24oKXshMCE9PWUmJm51bGwhPT1uJiYoaT10LnJlcXVlc3RBbmltYXRpb25GcmFtZShyKSxlPSEwKX0sc3RvcDpmdW5jdGlvbigpe3QuY2FuY2VsQW5pbWF0aW9uRnJhbWUoaSksZT0hMX0sc2V0QW5pbWF0aW9uTG9vcDpmdW5jdGlvbih0KXtuPXR9LHNldENvbnRleHQ6ZnVuY3Rpb24oZSl7dD1lfX19ZnVuY3Rpb24gbzB0KHQsZSl7Y29uc3Qgbj1lLmlzV2ViR0wyLGk9bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbiByKHQpe3JldHVybiB0LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJih0PXQuZGF0YSksaS5nZXQodCl9LHJlbW92ZTpmdW5jdGlvbiBvKGUpe2UuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGU9ZS5kYXRhKTtjb25zdCBuPWkuZ2V0KGUpO24mJih0LmRlbGV0ZUJ1ZmZlcihuLmJ1ZmZlciksaS5kZWxldGUoZSkpfSx1cGRhdGU6ZnVuY3Rpb24gYShlLHIpe2lmKGUuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7Y29uc3QgdD1pLmdldChlKTtyZXR1cm4gdm9pZCgoIXR8fHQudmVyc2lvbjxlLnZlcnNpb24pJiZpLnNldChlLHtidWZmZXI6ZS5idWZmZXIsdHlwZTplLnR5cGUsYnl0ZXNQZXJFbGVtZW50OmUuZWxlbWVudFNpemUsdmVyc2lvbjplLnZlcnNpb259KSl9ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYoZT1lLmRhdGEpO2NvbnN0IG89aS5nZXQoZSk7dm9pZCAwPT09bz9pLnNldChlLChmdW5jdGlvbiBhKGUsaSl7Y29uc3Qgcj1lLmFycmF5LG89ZS51c2FnZSxhPXQuY3JlYXRlQnVmZmVyKCk7dC5iaW5kQnVmZmVyKGksYSksdC5idWZmZXJEYXRhKGkscixvKSxlLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgcz01MTI2O3JldHVybiByIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P3M9NTEyNjpyIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpyIGluc3RhbmNlb2YgVWludDE2QXJyYXk/ZS5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/bj9zPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOnM9NTEyMzpyIGluc3RhbmNlb2YgSW50MTZBcnJheT9zPTUxMjI6ciBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P3M9NTEyNTpyIGluc3RhbmNlb2YgSW50MzJBcnJheT9zPTUxMjQ6ciBpbnN0YW5jZW9mIEludDhBcnJheT9zPTUxMjA6KHIgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxyIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYocz01MTIxKSx7YnVmZmVyOmEsdHlwZTpzLGJ5dGVzUGVyRWxlbWVudDpyLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246ZS52ZXJzaW9ufX0pKGUscikpOm8udmVyc2lvbjxlLnZlcnNpb24mJigoZnVuY3Rpb24gcyhlLGkscil7Y29uc3Qgbz1pLmFycmF5LGE9aS51cGRhdGVSYW5nZTt0LmJpbmRCdWZmZXIocixlKSwtMT09PWEuY291bnQ/dC5idWZmZXJTdWJEYXRhKHIsMCxvKToobj90LmJ1ZmZlclN1YkRhdGEocixhLm9mZnNldCpvLkJZVEVTX1BFUl9FTEVNRU5ULG8sYS5vZmZzZXQsYS5jb3VudCk6dC5idWZmZXJTdWJEYXRhKHIsYS5vZmZzZXQqby5CWVRFU19QRVJfRUxFTUVOVCxvLnN1YmFycmF5KGEub2Zmc2V0LGEub2Zmc2V0K2EuY291bnQpKSxhLmNvdW50PS0xKX0pKG8uYnVmZmVyLGUsciksby52ZXJzaW9uPWUudmVyc2lvbil9fX1jbGFzcyBhMHQgZXh0ZW5kcyBiMXR7Y29uc3RydWN0b3IodD0xLGU9MSxuPTEsaT0xKXtzdXBlcigpLHRoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDplLHdpZHRoU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czppfTtjb25zdCByPXQvMixvPWUvMixhPU1hdGguZmxvb3Iobikscz1NYXRoLmZsb29yKGkpLGw9YSsxLGM9cysxLHU9dC9hLGg9ZS9zLGQ9W10scD1bXSxmPVtdLG09W107Zm9yKGxldCB0PTA7dDxjO3QrKyl7Y29uc3QgZT10Kmgtbztmb3IobGV0IG49MDtuPGw7bisrKXAucHVzaChuKnUtciwtZSwwKSxmLnB1c2goMCwwLDEpLG0ucHVzaChuL2EpLG0ucHVzaCgxLXQvcyl9Zm9yKGxldCB0PTA7dDxzO3QrKylmb3IobGV0IGU9MDtlPGE7ZSsrKXtjb25zdCBuPWUrbCoodCsxKSxpPWUrMStsKih0KzEpLHI9ZSsxK2wqdDtkLnB1c2goZStsKnQsbixyKSxkLnB1c2gobixpLHIpfXRoaXMuc2V0SW5kZXgoZCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgbDF0KHAsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBsMXQoZiwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgbDF0KG0sMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IGEwdCh0LndpZHRoLHQuaGVpZ2h0LHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzKX19Y29uc3QgczB0PXthbHBoYW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xuI2VuZGlmIixhbHBoYW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixhbHBoYXRlc3RfZnJhZ21lbnQ6IiNpZmRlZiBBTFBIQVRFU1Rcblx0aWYgKCBkaWZmdXNlQ29sb3IuYSA8IEFMUEhBVEVTVCApIGRpc2NhcmQ7XG4jZW5kaWYiLGFvbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKVxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuI2VuZGlmIixhb21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwO1xuXHR1bmlmb3JtIGZsb2F0IGFvTWFwSW50ZW5zaXR5O1xuI2VuZGlmIixiZWdpbl92ZXJ0ZXg6InZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKCBwb3NpdGlvbiApOyIsYmVnaW5ub3JtYWxfdmVydGV4OiJ2ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApO1xuI2lmZGVmIFVTRV9UQU5HRU5UXG5cdHZlYzMgb2JqZWN0VGFuZ2VudCA9IHZlYzMoIHRhbmdlbnQueHl6ICk7XG4jZW5kaWYiLGJzZGZzOiJ2ZWMyIGludGVncmF0ZVNwZWN1bGFyQlJERiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0Y29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7XG5cdGNvbnN0IHZlYzQgYzEgPSB2ZWM0KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApO1xuXHR2ZWM0IHIgPSByb3VnaG5lc3MgKiBjMCArIGMxO1xuXHRmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcblx0cmV0dXJuIHZlYzIoIC0xLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dztcbn1cbmZsb2F0IHB1bmN0dWFsTGlnaHRJbnRlbnNpdHlUb0lycmFkaWFuY2VGYWN0b3IoIGNvbnN0IGluIGZsb2F0IGxpZ2h0RGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGN1dG9mZkRpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBkZWNheUV4cG9uZW50ICkge1xuI2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0ZmxvYXQgZGlzdGFuY2VGYWxsb2ZmID0gMS4wIC8gbWF4KCBwb3coIGxpZ2h0RGlzdGFuY2UsIGRlY2F5RXhwb25lbnQgKSwgMC4wMSApO1xuXHRpZiggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgKSB7XG5cdFx0ZGlzdGFuY2VGYWxsb2ZmICo9IHBvdzIoIHNhdHVyYXRlKCAxLjAgLSBwb3c0KCBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKSApICk7XG5cdH1cblx0cmV0dXJuIGRpc3RhbmNlRmFsbG9mZjtcbiNlbHNlXG5cdGlmKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCAmJiBkZWNheUV4cG9uZW50ID4gMC4wICkge1xuXHRcdHJldHVybiBwb3coIHNhdHVyYXRlKCAtbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICsgMS4wICksIGRlY2F5RXhwb25lbnQgKTtcblx0fVxuXHRyZXR1cm4gMS4wO1xuI2VuZGlmXG59XG52ZWMzIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBkaWZmdXNlQ29sb3I7XG59XG52ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gdmVjMyBmOTAsIGNvbnN0IGluIGZsb2F0IGRvdFZIICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtNS41NTQ3MyAqIGRvdFZIIC0gNi45ODMxNiApICogZG90VkggKTtcblx0cmV0dXJuICggZjkwIC0gZjAgKSAqIGZyZXNuZWwgKyBmMDtcbn1cbnZlYzMgRl9TY2hsaWNrX1JvdWdobmVzc0RlcGVuZGVudCggY29uc3QgaW4gdmVjMyBGMCwgY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgZnJlc25lbCA9IGV4cDIoICggLTUuNTU0NzMgKiBkb3ROViAtIDYuOTgzMTYgKSAqIGRvdE5WICk7XG5cdHZlYzMgRnIgPSBtYXgoIHZlYzMoIDEuMCAtIHJvdWdobmVzcyApLCBGMCApIC0gRjA7XG5cdHJldHVybiBGciAqIGZyZXNuZWwgKyBGMDtcbn1cbmZsb2F0IEdfR0dYX1NtaXRoKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGdsID0gZG90TkwgKyBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5MICkgKTtcblx0ZmxvYXQgZ3YgPSBkb3ROViArIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApO1xuXHRyZXR1cm4gMS4wIC8gKCBnbCAqIGd2ICk7XG59XG5mbG9hdCBHX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROTCwgY29uc3QgaW4gZmxvYXQgZG90TlYgKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApO1xuXHRmbG9hdCBnbCA9IGRvdE5WICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdHJldHVybiAwLjUgLyBtYXgoIGd2ICsgZ2wsIEVQU0lMT04gKTtcbn1cbmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZGVub20gPSBwb3cyKCBkb3ROSCApICogKCBhMiAtIDEuMCApICsgMS4wO1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTtcbn1cbnZlYzMgQlJERl9TcGVjdWxhcl9HR1goIGNvbnN0IGluIEluY2lkZW50TGlnaHQgaW5jaWRlbnRMaWdodCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gdmVjMyBmOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgYWxwaGEgPSBwb3cyKCByb3VnaG5lc3MgKTtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiArIHZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xuXHRmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XG5cdGZsb2F0IGRvdExIID0gc2F0dXJhdGUoIGRvdCggaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24sIGhhbGZEaXIgKSApO1xuXHR2ZWMzIEYgPSBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdExIICk7XG5cdGZsb2F0IEcgPSBHX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGFscGhhLCBkb3ROTCwgZG90TlYgKTtcblx0ZmxvYXQgRCA9IERfR0dYKCBhbHBoYSwgZG90TkggKTtcblx0cmV0dXJuIEYgKiAoIEcgKiBEICk7XG59XG52ZWMyIExUQ19VdiggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0Y29uc3QgZmxvYXQgTFVUX1NJWkUgPSA2NC4wO1xuXHRjb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTtcblx0Y29uc3QgZmxvYXQgTFVUX0JJQVMgPSAwLjUgLyBMVVRfU0laRTtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBOLCBWICkgKTtcblx0dmVjMiB1diA9IHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApO1xuXHR1diA9IHV2ICogTFVUX1NDQUxFICsgTFVUX0JJQVM7XG5cdHJldHVybiB1djtcbn1cbmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkge1xuXHRmbG9hdCBsID0gbGVuZ3RoKCBmICk7XG5cdHJldHVybiBtYXgoICggbCAqIGwgKyBmLnogKSAvICggbCArIDEuMCApLCAwLjAgKTtcbn1cbnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkge1xuXHRmbG9hdCB4ID0gZG90KCB2MSwgdjIgKTtcblx0ZmxvYXQgeSA9IGFicyggeCApO1xuXHRmbG9hdCBhID0gMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5O1xuXHRmbG9hdCBiID0gMy40MTc1OTQwICsgKCA0LjE2MTY3MjQgKyB5ICkgKiB5O1xuXHRmbG9hdCB2ID0gYSAvIGI7XG5cdGZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKCB4ID4gMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjtcblx0cmV0dXJuIGNyb3NzKCB2MSwgdjIgKSAqIHRoZXRhX3NpbnRoZXRhO1xufVxudmVjMyBMVENfRXZhbHVhdGUoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiB2ZWMzIFAsIGNvbnN0IGluIG1hdDMgbUludiwgY29uc3QgaW4gdmVjMyByZWN0Q29vcmRzWyA0IF0gKSB7XG5cdHZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgdjIgPSByZWN0Q29vcmRzWyAzIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgbGlnaHROb3JtYWwgPSBjcm9zcyggdjEsIHYyICk7XG5cdGlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7XG5cdHZlYzMgVDEsIFQyO1xuXHRUMSA9IG5vcm1hbGl6ZSggViAtIE4gKiBkb3QoIFYsIE4gKSApO1xuXHRUMiA9IC0gY3Jvc3MoIE4sIFQxICk7XG5cdG1hdDMgbWF0ID0gbUludiAqIHRyYW5zcG9zZU1hdDMoIG1hdDMoIFQxLCBUMiwgTiApICk7XG5cdHZlYzMgY29vcmRzWyA0IF07XG5cdGNvb3Jkc1sgMCBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7XG5cdGNvb3Jkc1sgMSBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAxIF0gLSBQICk7XG5cdGNvb3Jkc1sgMiBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAyIF0gLSBQICk7XG5cdGNvb3Jkc1sgMyBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7XG5cdGNvb3Jkc1sgMCBdID0gbm9ybWFsaXplKCBjb29yZHNbIDAgXSApO1xuXHRjb29yZHNbIDEgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAxIF0gKTtcblx0Y29vcmRzWyAyIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7XG5cdGNvb3Jkc1sgMyBdID0gbm9ybWFsaXplKCBjb29yZHNbIDMgXSApO1xuXHR2ZWMzIHZlY3RvckZvcm1GYWN0b3IgPSB2ZWMzKCAwLjAgKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAxIF0sIGNvb3Jkc1sgMiBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDIgXSwgY29vcmRzWyAzIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApO1xuXHRmbG9hdCByZXN1bHQgPSBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIHZlY3RvckZvcm1GYWN0b3IgKTtcblx0cmV0dXJuIHZlYzMoIHJlc3VsdCApO1xufVxudmVjMyBCUkRGX1NwZWN1bGFyX0dHWF9FbnZpcm9ubWVudCggY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcblx0dmVjMiBicmRmID0gaW50ZWdyYXRlU3BlY3VsYXJCUkRGKCBkb3ROViwgcm91Z2huZXNzICk7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogYnJkZi54ICsgYnJkZi55O1xufVxudm9pZCBCUkRGX1NwZWN1bGFyX011bHRpc2NhdHRlcmluZ19FbnZpcm9ubWVudCggY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrX1JvdWdobmVzc0RlcGVuZGVudCggc3BlY3VsYXJDb2xvciwgZG90TlYsIHJvdWdobmVzcyApO1xuXHR2ZWMyIGJyZGYgPSBpbnRlZ3JhdGVTcGVjdWxhckJSREYoIGRvdE5WLCByb3VnaG5lc3MgKTtcblx0dmVjMyBGc3NFc3MgPSBGICogYnJkZi54ICsgYnJkZi55O1xuXHRmbG9hdCBFc3MgPSBicmRmLnggKyBicmRmLnk7XG5cdGZsb2F0IEVtcyA9IDEuMCAtIEVzcztcblx0dmVjMyBGYXZnID0gc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7XHR2ZWMzIEZtcyA9IEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTtcblx0c2luZ2xlU2NhdHRlciArPSBGc3NFc3M7XG5cdG11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7XG59XG5mbG9hdCBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICkge1xuXHRyZXR1cm4gMC4yNTtcbn1cbmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KCBkb3ROSCwgc2hpbmluZXNzICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBpbmNpZGVudExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiArIGdlb21ldHJ5LnZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RMSCA9IHNhdHVyYXRlKCBkb3QoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCB2ZWMzKCAxLjAgKSwgZG90TEggKTtcblx0ZmxvYXQgRyA9IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKTtcblx0ZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbmZsb2F0IEdHWFJvdWdobmVzc1RvQmxpbm5FeHBvbmVudCggY29uc3QgaW4gZmxvYXQgZ2d4Um91Z2huZXNzICkge1xuXHRyZXR1cm4gKCAyLjAgLyBwb3cyKCBnZ3hSb3VnaG5lc3MgKyAwLjAwMDEgKSAtIDIuMCApO1xufVxuZmxvYXQgQmxpbm5FeHBvbmVudFRvR0dYUm91Z2huZXNzKCBjb25zdCBpbiBmbG9hdCBibGlubkV4cG9uZW50ICkge1xuXHRyZXR1cm4gc3FydCggMi4wIC8gKCBibGlubkV4cG9uZW50ICsgMi4wICkgKTtcbn1cbiNpZiBkZWZpbmVkKCBVU0VfU0hFRU4gKVxuZmxvYXQgRF9DaGFybGllKGZsb2F0IHJvdWdobmVzcywgZmxvYXQgTm9IKSB7XG5cdGZsb2F0IGludkFscGhhID0gMS4wIC8gcm91Z2huZXNzO1xuXHRmbG9hdCBjb3MyaCA9IE5vSCAqIE5vSDtcblx0ZmxvYXQgc2luMmggPSBtYXgoMS4wIC0gY29zMmgsIDAuMDA3ODEyNSk7XHRyZXR1cm4gKDIuMCArIGludkFscGhhKSAqIHBvdyhzaW4yaCwgaW52QWxwaGEgKiAwLjUpIC8gKDIuMCAqIFBJKTtcbn1cbmZsb2F0IFZfTmV1YmVsdChmbG9hdCBOb1YsIGZsb2F0IE5vTCkge1xuXHRyZXR1cm4gc2F0dXJhdGUoMS4wIC8gKDQuMCAqIChOb0wgKyBOb1YgLSBOb0wgKiBOb1YpKSk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfU2hlZW4oIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gdmVjMyBMLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCB2ZWMzIHNwZWN1bGFyQ29sb3IgKSB7XG5cdHZlYzMgTiA9IGdlb21ldHJ5Lm5vcm1hbDtcblx0dmVjMyBWID0gZ2VvbWV0cnkudmlld0Rpcjtcblx0dmVjMyBIID0gbm9ybWFsaXplKCBWICsgTCApO1xuXHRmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIE4sIEggKSApO1xuXHRyZXR1cm4gc3BlY3VsYXJDb2xvciAqIERfQ2hhcmxpZSggcm91Z2huZXNzLCBkb3ROSCApICogVl9OZXViZWx0KCBkb3QoTiwgViksIGRvdChOLCBMKSApO1xufVxuI2VuZGlmIixidW1wbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQlVNUE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBidW1wTWFwO1xuXHR1bmlmb3JtIGZsb2F0IGJ1bXBTY2FsZTtcblx0dmVjMiBkSGR4eV9md2QoKSB7XG5cdFx0dmVjMiBkU1RkeCA9IGRGZHgoIHZVdiApO1xuXHRcdHZlYzIgZFNUZHkgPSBkRmR5KCB2VXYgKTtcblx0XHRmbG9hdCBIbGwgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiApLng7XG5cdFx0ZmxvYXQgZEJ4ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeCApLnggLSBIbGw7XG5cdFx0ZmxvYXQgZEJ5ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeSApLnggLSBIbGw7XG5cdFx0cmV0dXJuIHZlYzIoIGRCeCwgZEJ5ICk7XG5cdH1cblx0dmVjMyBwZXJ0dXJiTm9ybWFsQXJiKCB2ZWMzIHN1cmZfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMiBkSGR4eSwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHtcblx0XHR2ZWMzIHZTaWdtYVggPSB2ZWMzKCBkRmR4KCBzdXJmX3Bvcy54ICksIGRGZHgoIHN1cmZfcG9zLnkgKSwgZEZkeCggc3VyZl9wb3MueiApICk7XG5cdFx0dmVjMyB2U2lnbWFZID0gdmVjMyggZEZkeSggc3VyZl9wb3MueCApLCBkRmR5KCBzdXJmX3Bvcy55ICksIGRGZHkoIHN1cmZfcG9zLnogKSApO1xuXHRcdHZlYzMgdk4gPSBzdXJmX25vcm07XG5cdFx0dmVjMyBSMSA9IGNyb3NzKCB2U2lnbWFZLCB2TiApO1xuXHRcdHZlYzMgUjIgPSBjcm9zcyggdk4sIHZTaWdtYVggKTtcblx0XHRmbG9hdCBmRGV0ID0gZG90KCB2U2lnbWFYLCBSMSApICogZmFjZURpcmVjdGlvbjtcblx0XHR2ZWMzIHZHcmFkID0gc2lnbiggZkRldCApICogKCBkSGR4eS54ICogUjEgKyBkSGR4eS55ICogUjIgKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCBhYnMoIGZEZXQgKSAqIHN1cmZfbm9ybSAtIHZHcmFkICk7XG5cdH1cbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dmVjNCBwbGFuZTtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7IGkgKysgKSB7XG5cdFx0cGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdO1xuXHRcdGlmICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSBkaXNjYXJkO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNpZiBVTklPTl9DTElQUElOR19QTEFORVMgPCBOVU1fQ0xJUFBJTkdfUExBTkVTXG5cdFx0Ym9vbCBjbGlwcGVkID0gdHJ1ZTtcblx0XHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdFx0Zm9yICggaW50IGkgPSBVTklPTl9DTElQUElOR19QTEFORVM7IGkgPCBOVU1fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xuXHRcdFx0cGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdO1xuXHRcdFx0Y2xpcHBlZCA9ICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkO1xuXHRcdH1cblx0XHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHRcdGlmICggY2xpcHBlZCApIGRpc2NhcmQ7XG5cdCNlbmRpZlxuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uO1xuXHR1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTtcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2Q2xpcFBvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbiNlbmRpZiIsY29sb3JfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKVxuXHRkaWZmdXNlQ29sb3IgKj0gdkNvbG9yO1xuI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SIClcblx0ZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKVxuXHR2YXJ5aW5nIHZlYzQgdkNvbG9yO1xuI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SIClcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfcGFyc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKVxuXHR2YXJ5aW5nIHZlYzQgdkNvbG9yO1xuI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKVxuXHR2YXJ5aW5nIHZlYzMgdkNvbG9yO1xuI2VuZGlmIixjb2xvcl92ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKVxuXHR2Q29sb3IgPSB2ZWM0KCAxLjAgKTtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SIClcblx0dkNvbG9yID0gdmVjMyggMS4wICk7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQ09MT1Jcblx0dkNvbG9yICo9IGNvbG9yO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1Jcblx0dkNvbG9yLnh5eiAqPSBpbnN0YW5jZUNvbG9yLnh5ejtcbiNlbmRpZiIsY29tbW9uOiIjZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzXG4jZGVmaW5lIFBJMiA2LjI4MzE4NTMwNzE3OTU4NlxuI2RlZmluZSBQSV9IQUxGIDEuNTcwNzk2MzI2Nzk0ODk2NlxuI2RlZmluZSBSRUNJUFJPQ0FMX1BJIDAuMzE4MzA5ODg2MTgzNzkwN1xuI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0MzA5MTg5NTM1XG4jZGVmaW5lIEVQU0lMT04gMWUtNlxuI2lmbmRlZiBzYXR1cmF0ZVxuI2RlZmluZSBzYXR1cmF0ZShhKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxuI2VuZGlmXG4jZGVmaW5lIHdoaXRlQ29tcGxlbWVudChhKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKVxuZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfVxuZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9XG5mbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9XG5mbG9hdCBhdmVyYWdlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMzICkgKTsgfVxuaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHtcblx0Y29uc3QgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTgsIGIgPSA3OC4yMzMsIGMgPSA0Mzc1OC41NDUzO1xuXHRoaWdocCBmbG9hdCBkdCA9IGRvdCggdXYueHksIHZlYzIoIGEsYiApICksIHNuID0gbW9kKCBkdCwgUEkgKTtcblx0cmV0dXJuIGZyYWN0KHNpbihzbikgKiBjKTtcbn1cbiNpZmRlZiBISUdIX1BSRUNJU0lPTlxuXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7IHJldHVybiBsZW5ndGgoIHYgKTsgfVxuI2Vsc2Vcblx0ZmxvYXQgbWF4MyggdmVjMyB2ICkgeyByZXR1cm4gbWF4KCBtYXgoIHYueCwgdi55ICksIHYueiApOyB9XG5cdGZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHtcblx0XHRmbG9hdCBtYXhDb21wb25lbnQgPSBtYXgzKCBhYnMoIHYgKSApO1xuXHRcdHJldHVybiBsZW5ndGgoIHYgLyBtYXhDb21wb25lbnQgKSAqIG1heENvbXBvbmVudDtcblx0fVxuI2VuZGlmXG5zdHJ1Y3QgSW5jaWRlbnRMaWdodCB7XG5cdHZlYzMgY29sb3I7XG5cdHZlYzMgZGlyZWN0aW9uO1xuXHRib29sIHZpc2libGU7XG59O1xuc3RydWN0IFJlZmxlY3RlZExpZ2h0IHtcblx0dmVjMyBkaXJlY3REaWZmdXNlO1xuXHR2ZWMzIGRpcmVjdFNwZWN1bGFyO1xuXHR2ZWMzIGluZGlyZWN0RGlmZnVzZTtcblx0dmVjMyBpbmRpcmVjdFNwZWN1bGFyO1xufTtcbnN0cnVjdCBHZW9tZXRyaWNDb250ZXh0IHtcblx0dmVjMyBwb3NpdGlvbjtcblx0dmVjMyBub3JtYWw7XG5cdHZlYzMgdmlld0RpcjtcbiNpZmRlZiBDTEVBUkNPQVRcblx0dmVjMyBjbGVhcmNvYXROb3JtYWw7XG4jZW5kaWZcbn07XG52ZWMzIHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcbn1cbnZlYzMgaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQoIGRpciwgMC4wICkgKiBtYXRyaXggKS54eXogKTtcbn1cbnZlYzMgcHJvamVjdE9uUGxhbmUoaW4gdmVjMyBwb2ludCwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdGZsb2F0IGRpc3RhbmNlID0gZG90KCBwbGFuZU5vcm1hbCwgcG9pbnQgLSBwb2ludE9uUGxhbmUgKTtcblx0cmV0dXJuIC0gZGlzdGFuY2UgKiBwbGFuZU5vcm1hbCArIHBvaW50O1xufVxuZmxvYXQgc2lkZU9mUGxhbmUoIGluIHZlYzMgcG9pbnQsIGluIHZlYzMgcG9pbnRPblBsYW5lLCBpbiB2ZWMzIHBsYW5lTm9ybWFsICkge1xuXHRyZXR1cm4gc2lnbiggZG90KCBwb2ludCAtIHBvaW50T25QbGFuZSwgcGxhbmVOb3JtYWwgKSApO1xufVxudmVjMyBsaW5lUGxhbmVJbnRlcnNlY3QoIGluIHZlYzMgcG9pbnRPbkxpbmUsIGluIHZlYzMgbGluZURpcmVjdGlvbiwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdHJldHVybiBsaW5lRGlyZWN0aW9uICogKCBkb3QoIHBsYW5lTm9ybWFsLCBwb2ludE9uUGxhbmUgLSBwb2ludE9uTGluZSApIC8gZG90KCBwbGFuZU5vcm1hbCwgbGluZURpcmVjdGlvbiApICkgKyBwb2ludE9uTGluZTtcbn1cbm1hdDMgdHJhbnNwb3NlTWF0MyggY29uc3QgaW4gbWF0MyBtICkge1xuXHRtYXQzIHRtcDtcblx0dG1wWyAwIF0gPSB2ZWMzKCBtWyAwIF0ueCwgbVsgMSBdLngsIG1bIDIgXS54ICk7XG5cdHRtcFsgMSBdID0gdmVjMyggbVsgMCBdLnksIG1bIDEgXS55LCBtWyAyIF0ueSApO1xuXHR0bXBbIDIgXSA9IHZlYzMoIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBdLnogKTtcblx0cmV0dXJuIHRtcDtcbn1cbmZsb2F0IGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7XG5cdHZlYzMgd2VpZ2h0cyA9IHZlYzMoIDAuMjEyNiwgMC43MTUyLCAwLjA3MjIgKTtcblx0cmV0dXJuIGRvdCggd2VpZ2h0cywgY29sb3IucmdiICk7XG59XG5ib29sIGlzUGVyc3BlY3RpdmVNYXRyaXgoIG1hdDQgbSApIHtcblx0cmV0dXJuIG1bIDIgXVsgMyBdID09IC0gMS4wO1xufVxudmVjMiBlcXVpcmVjdFV2KCBpbiB2ZWMzIGRpciApIHtcblx0ZmxvYXQgdSA9IGF0YW4oIGRpci56LCBkaXIueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XG5cdGZsb2F0IHYgPSBhc2luKCBjbGFtcCggZGlyLnksIC0gMS4wLCAxLjAgKSApICogUkVDSVBST0NBTF9QSSArIDAuNTtcblx0cmV0dXJuIHZlYzIoIHUsIHYgKTtcbn0iLGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudDoiI2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVfVVZcblx0I2RlZmluZSBjdWJlVVZfbWF4TWlwTGV2ZWwgOC4wXG5cdCNkZWZpbmUgY3ViZVVWX21pbk1pcExldmVsIDQuMFxuXHQjZGVmaW5lIGN1YmVVVl9tYXhUaWxlU2l6ZSAyNTYuMFxuXHQjZGVmaW5lIGN1YmVVVl9taW5UaWxlU2l6ZSAxNi4wXG5cdGZsb2F0IGdldEZhY2UoIHZlYzMgZGlyZWN0aW9uICkge1xuXHRcdHZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKCBkaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBmYWNlID0gLSAxLjA7XG5cdFx0aWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkge1xuXHRcdFx0aWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi55IClcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMC4wIDogMy4wO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApXG5cdFx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueiA+IDAuMCA/IDIuMCA6IDUuMDtcblx0XHRcdGVsc2Vcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFjZTtcblx0fVxuXHR2ZWMyIGdldFVWKCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgZmFjZSApIHtcblx0XHR2ZWMyIHV2O1xuXHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApO1xuXHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXHRcdFx0dXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHV2ID0gdmVjMiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XG5cdFx0fVxuXHRcdHJldHVybiAwLjUgKiAoIHV2ICsgMS4wICk7XG5cdH1cblx0dmVjMyBiaWxpbmVhckN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBkaXJlY3Rpb24sIGZsb2F0IG1pcEludCApIHtcblx0XHRmbG9hdCBmYWNlID0gZ2V0RmFjZSggZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgZmlsdGVySW50ID0gbWF4KCBjdWJlVVZfbWluTWlwTGV2ZWwgLSBtaXBJbnQsIDAuMCApO1xuXHRcdG1pcEludCA9IG1heCggbWlwSW50LCBjdWJlVVZfbWluTWlwTGV2ZWwgKTtcblx0XHRmbG9hdCBmYWNlU2l6ZSA9IGV4cDIoIG1pcEludCApO1xuXHRcdGZsb2F0IHRleGVsU2l6ZSA9IDEuMCAvICggMy4wICogY3ViZVVWX21heFRpbGVTaXplICk7XG5cdFx0dmVjMiB1diA9IGdldFVWKCBkaXJlY3Rpb24sIGZhY2UgKSAqICggZmFjZVNpemUgLSAxLjAgKTtcblx0XHR2ZWMyIGYgPSBmcmFjdCggdXYgKTtcblx0XHR1diArPSAwLjUgLSBmO1xuXHRcdGlmICggZmFjZSA+IDIuMCApIHtcblx0XHRcdHV2LnkgKz0gZmFjZVNpemU7XG5cdFx0XHRmYWNlIC09IDMuMDtcblx0XHR9XG5cdFx0dXYueCArPSBmYWNlICogZmFjZVNpemU7XG5cdFx0aWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7XG5cdFx0XHR1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTtcblx0XHR9XG5cdFx0dXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7XG5cdFx0dXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTtcblx0XHR1diAqPSB0ZXhlbFNpemU7XG5cdFx0dmVjMyB0bCA9IGVudk1hcFRleGVsVG9MaW5lYXIoIHRleHR1cmUyRCggZW52TWFwLCB1diApICkucmdiO1xuXHRcdHV2LnggKz0gdGV4ZWxTaXplO1xuXHRcdHZlYzMgdHIgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCB0ZXh0dXJlMkQoIGVudk1hcCwgdXYgKSApLnJnYjtcblx0XHR1di55ICs9IHRleGVsU2l6ZTtcblx0XHR2ZWMzIGJyID0gZW52TWFwVGV4ZWxUb0xpbmVhciggdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkgKS5yZ2I7XG5cdFx0dXYueCAtPSB0ZXhlbFNpemU7XG5cdFx0dmVjMyBibCA9IGVudk1hcFRleGVsVG9MaW5lYXIoIHRleHR1cmUyRCggZW52TWFwLCB1diApICkucmdiO1xuXHRcdHZlYzMgdG0gPSBtaXgoIHRsLCB0ciwgZi54ICk7XG5cdFx0dmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTtcblx0XHRyZXR1cm4gbWl4KCB0bSwgYm0sIGYueSApO1xuXHR9XG5cdCNkZWZpbmUgcjAgMS4wXG5cdCNkZWZpbmUgdjAgMC4zMzlcblx0I2RlZmluZSBtMCAtIDIuMFxuXHQjZGVmaW5lIHIxIDAuOFxuXHQjZGVmaW5lIHYxIDAuMjc2XG5cdCNkZWZpbmUgbTEgLSAxLjBcblx0I2RlZmluZSByNCAwLjRcblx0I2RlZmluZSB2NCAwLjA0NlxuXHQjZGVmaW5lIG00IDIuMFxuXHQjZGVmaW5lIHI1IDAuMzA1XG5cdCNkZWZpbmUgdjUgMC4wMTZcblx0I2RlZmluZSBtNSAzLjBcblx0I2RlZmluZSByNiAwLjIxXG5cdCNkZWZpbmUgdjYgMC4wMDM4XG5cdCNkZWZpbmUgbTYgNC4wXG5cdGZsb2F0IHJvdWdobmVzc1RvTWlwKCBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdFx0ZmxvYXQgbWlwID0gMC4wO1xuXHRcdGlmICggcm91Z2huZXNzID49IHIxICkge1xuXHRcdFx0bWlwID0gKCByMCAtIHJvdWdobmVzcyApICogKCBtMSAtIG0wICkgLyAoIHIwIC0gcjEgKSArIG0wO1xuXHRcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNCApIHtcblx0XHRcdG1pcCA9ICggcjEgLSByb3VnaG5lc3MgKSAqICggbTQgLSBtMSApIC8gKCByMSAtIHI0ICkgKyBtMTtcblx0XHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjUgKSB7XG5cdFx0XHRtaXAgPSAoIHI0IC0gcm91Z2huZXNzICkgKiAoIG01IC0gbTQgKSAvICggcjQgLSByNSApICsgbTQ7XG5cdFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI2ICkge1xuXHRcdFx0bWlwID0gKCByNSAtIHJvdWdobmVzcyApICogKCBtNiAtIG01ICkgLyAoIHI1IC0gcjYgKSArIG01O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtaXAgPSAtIDIuMCAqIGxvZzIoIDEuMTYgKiByb3VnaG5lc3MgKTtcdFx0fVxuXHRcdHJldHVybiBtaXA7XG5cdH1cblx0dmVjNCB0ZXh0dXJlQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIHNhbXBsZURpciwgZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdGZsb2F0IG1pcCA9IGNsYW1wKCByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzICksIG0wLCBjdWJlVVZfbWF4TWlwTGV2ZWwgKTtcblx0XHRmbG9hdCBtaXBGID0gZnJhY3QoIG1pcCApO1xuXHRcdGZsb2F0IG1pcEludCA9IGZsb29yKCBtaXAgKTtcblx0XHR2ZWMzIGNvbG9yMCA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICk7XG5cdFx0aWYgKCBtaXBGID09IDAuMCApIHtcblx0XHRcdHJldHVybiB2ZWM0KCBjb2xvcjAsIDEuMCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2ZWMzIGNvbG9yMSA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICsgMS4wICk7XG5cdFx0XHRyZXR1cm4gdmVjNCggbWl4KCBjb2xvcjAsIGNvbG9yMSwgbWlwRiApLCAxLjAgKTtcblx0XHR9XG5cdH1cbiNlbmRpZiIsZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6InZlYzMgdHJhbnNmb3JtZWROb3JtYWwgPSBvYmplY3ROb3JtYWw7XG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0bWF0MyBtID0gbWF0MyggaW5zdGFuY2VNYXRyaXggKTtcblx0dHJhbnNmb3JtZWROb3JtYWwgLz0gdmVjMyggZG90KCBtWyAwIF0sIG1bIDAgXSApLCBkb3QoIG1bIDEgXSwgbVsgMSBdICksIGRvdCggbVsgMiBdLCBtWyAyIF0gKSApO1xuXHR0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDtcbiNlbmRpZlxudHJhbnNmb3JtZWROb3JtYWwgPSBub3JtYWxNYXRyaXggKiB0cmFuc2Zvcm1lZE5vcm1hbDtcbiNpZmRlZiBGTElQX1NJREVEXG5cdHRyYW5zZm9ybWVkTm9ybWFsID0gLSB0cmFuc2Zvcm1lZE5vcm1hbDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9UQU5HRU5UXG5cdHZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcblx0I2lmZGVmIEZMSVBfU0lERURcblx0XHR0cmFuc2Zvcm1lZFRhbmdlbnQgPSAtIHRyYW5zZm9ybWVkVGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWYiLGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZGlzcGxhY2VtZW50TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7XG4jZW5kaWYiLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdHRyYW5zZm9ybWVkICs9IG5vcm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAoIHRleHR1cmUyRCggZGlzcGxhY2VtZW50TWFwLCB2VXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7XG4jZW5kaWYiLGVtaXNzaXZlbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHZlYzQgZW1pc3NpdmVDb2xvciA9IHRleHR1cmUyRCggZW1pc3NpdmVNYXAsIHZVdiApO1xuXHRlbWlzc2l2ZUNvbG9yLnJnYiA9IGVtaXNzaXZlTWFwVGV4ZWxUb0xpbmVhciggZW1pc3NpdmVDb2xvciApLnJnYjtcblx0dG90YWxFbWlzc2l2ZVJhZGlhbmNlICo9IGVtaXNzaXZlQ29sb3IucmdiO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xuI2VuZGlmIixlbmNvZGluZ3NfZnJhZ21lbnQ6ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6IlxudmVjNCBMaW5lYXJUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZhbHVlO1xufVxudmVjNCBHYW1tYVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBnYW1tYUZhY3RvciApIHtcblx0cmV0dXJuIHZlYzQoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCBnYW1tYUZhY3RvciApICksIHZhbHVlLmEgKTtcbn1cbnZlYzQgTGluZWFyVG9HYW1tYSggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgZ2FtbWFGYWN0b3IgKSB7XG5cdHJldHVybiB2ZWM0KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMS4wIC8gZ2FtbWFGYWN0b3IgKSApLCB2YWx1ZS5hICk7XG59XG52ZWM0IHNSR0JUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgdmFsdWUucmdiICogMC4wNzczOTkzODA4LCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDQwNDUgKSApICkgKSwgdmFsdWUuYSApO1xufVxudmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2ZWM0KCBtaXgoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCAwLjQxNjY2ICkgKSAqIDEuMDU1IC0gdmVjMyggMC4wNTUgKSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMyggMC4wMDMxMzA4ICkgKSApICksIHZhbHVlLmEgKTtcbn1cbnZlYzQgUkdCRVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogZXhwMiggdmFsdWUuYSAqIDI1NS4wIC0gMTI4LjAgKSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCRSggaW4gdmVjNCB2YWx1ZSApIHtcblx0ZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4KCBtYXgoIHZhbHVlLnIsIHZhbHVlLmcgKSwgdmFsdWUuYiApO1xuXHRmbG9hdCBmRXhwID0gY2xhbXAoIGNlaWwoIGxvZzIoIG1heENvbXBvbmVudCApICksIC0xMjguMCwgMTI3LjAgKTtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAvIGV4cDIoIGZFeHAgKSwgKCBmRXhwICsgMTI4LjAgKSAvIDI1NS4wICk7XG59XG52ZWM0IFJHQk1Ub0xpbmVhciggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgKiB2YWx1ZS5hICogbWF4UmFuZ2UsIDEuMCApO1xufVxudmVjNCBMaW5lYXJUb1JHQk0oIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRmbG9hdCBtYXhSR0IgPSBtYXgoIHZhbHVlLnIsIG1heCggdmFsdWUuZywgdmFsdWUuYiApICk7XG5cdGZsb2F0IE0gPSBjbGFtcCggbWF4UkdCIC8gbWF4UmFuZ2UsIDAuMCwgMS4wICk7XG5cdE0gPSBjZWlsKCBNICogMjU1LjAgKSAvIDI1NS4wO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiIC8gKCBNICogbWF4UmFuZ2UgKSwgTSApO1xufVxudmVjNCBSR0JEVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogKCAoIG1heFJhbmdlIC8gMjU1LjAgKSAvIHZhbHVlLmEgKSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCRCggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiA9IG1heCggdmFsdWUuciwgbWF4KCB2YWx1ZS5nLCB2YWx1ZS5iICkgKTtcblx0ZmxvYXQgRCA9IG1heCggbWF4UmFuZ2UgLyBtYXhSR0IsIDEuMCApO1xuXHREID0gY2xhbXAoIGZsb29yKCBEICkgLyAyNTUuMCwgMC4wLCAxLjAgKTtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAqICggRCAqICggMjU1LjAgLyBtYXhSYW5nZSApICksIEQgKTtcbn1cbmNvbnN0IG1hdDMgY0xvZ0x1dk0gPSBtYXQzKCAwLjIyMDksIDAuMzM5MCwgMC40MTg0LCAwLjExMzgsIDAuNjc4MCwgMC43MzE5LCAwLjAxMDIsIDAuMTEzMCwgMC4yOTY5ICk7XG52ZWM0IExpbmVhclRvTG9nTHV2KCBpbiB2ZWM0IHZhbHVlICkge1xuXHR2ZWMzIFhwX1lfWFlacCA9IGNMb2dMdXZNICogdmFsdWUucmdiO1xuXHRYcF9ZX1hZWnAgPSBtYXgoIFhwX1lfWFlacCwgdmVjMyggMWUtNiwgMWUtNiwgMWUtNiApICk7XG5cdHZlYzQgdlJlc3VsdDtcblx0dlJlc3VsdC54eSA9IFhwX1lfWFlacC54eSAvIFhwX1lfWFlacC56O1xuXHRmbG9hdCBMZSA9IDIuMCAqIGxvZzIoWHBfWV9YWVpwLnkpICsgMTI3LjA7XG5cdHZSZXN1bHQudyA9IGZyYWN0KCBMZSApO1xuXHR2UmVzdWx0LnogPSAoIExlIC0gKCBmbG9vciggdlJlc3VsdC53ICogMjU1LjAgKSApIC8gMjU1LjAgKSAvIDI1NS4wO1xuXHRyZXR1cm4gdlJlc3VsdDtcbn1cbmNvbnN0IG1hdDMgY0xvZ0x1dkludmVyc2VNID0gbWF0MyggNi4wMDE0LCAtMi43MDA4LCAtMS43OTk2LCAtMS4zMzIwLCAzLjEwMjksIC01Ljc3MjEsIDAuMzAwOCwgLTEuMDg4MiwgNS42MjY4ICk7XG52ZWM0IExvZ0x1dlRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRmbG9hdCBMZSA9IHZhbHVlLnogKiAyNTUuMCArIHZhbHVlLnc7XG5cdHZlYzMgWHBfWV9YWVpwO1xuXHRYcF9ZX1hZWnAueSA9IGV4cDIoICggTGUgLSAxMjcuMCApIC8gMi4wICk7XG5cdFhwX1lfWFlacC56ID0gWHBfWV9YWVpwLnkgLyB2YWx1ZS55O1xuXHRYcF9ZX1hZWnAueCA9IHZhbHVlLnggKiBYcF9ZX1hZWnAuejtcblx0dmVjMyB2UkdCID0gY0xvZ0x1dkludmVyc2VNICogWHBfWV9YWVpwLnJnYjtcblx0cmV0dXJuIHZlYzQoIG1heCggdlJHQiwgMC4wICksIDEuMCApO1xufSIsZW52bWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0dmVjMyBjYW1lcmFUb0ZyYWc7XG5cdFx0aWYgKCBpc09ydGhvZ3JhcGhpYyApIHtcblx0XHRcdGNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdldvcmxkUG9zaXRpb24gLSBjYW1lcmFQb3NpdGlvbiApO1xuXHRcdH1cblx0XHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZlYzMgcmVmbGVjdFZlYyA9IHJlZmxlY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdCNlbHNlXG5cdFx0dmVjMyByZWZsZWN0VmVjID0gdlJlZmxlY3Q7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdHZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgMC4wICk7XG5cdCNlbHNlXG5cdFx0dmVjNCBlbnZDb2xvciA9IHZlYzQoIDAuMCApO1xuXHQjZW5kaWZcblx0I2lmbmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWXG5cdFx0ZW52Q29sb3IgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCBlbnZDb2xvciApO1xuXHQjZW5kaWZcblx0I2lmZGVmIEVOVk1BUF9CTEVORElOR19NVUxUSVBMWVxuXHRcdG91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIG91dGdvaW5nTGlnaHQgKiBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX01JWCApXG5cdFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19BREQgKVxuXHRcdG91dGdvaW5nTGlnaHQgKz0gZW52Q29sb3IueHl6ICogc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eTtcblx0I2VuZGlmXG4jZW5kaWYiLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0dW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7XG5cdHVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDtcblx0dW5pZm9ybSBpbnQgbWF4TWlwTGV2ZWw7XG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHQjZW5kaWZcblx0XG4jZW5kaWYiLGVudm1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHR1bmlmb3JtIGZsb2F0IHJlZmxlY3Rpdml0eTtcblx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HIClcblx0XHQjZGVmaW5lIEVOVl9XT1JMRFBPU1xuXHQjZW5kaWZcblx0I2lmZGVmIEVOVl9XT1JMRFBPU1xuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5cdCNlbmRpZlxuI2VuZGlmIixlbnZtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fGRlZmluZWQoIFBIT05HIClcblx0XHQjZGVmaW5lIEVOVl9XT1JMRFBPU1xuXHQjZW5kaWZcblx0I2lmZGVmIEVOVl9XT1JMRFBPU1xuXHRcdFxuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbmRpZlxuI2VuZGlmIixlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKVxuXHQjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTlxuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZW5kaWZcblx0dmVjMyBnZXRMaWdodFByb2JlSW5kaXJlY3RJcnJhZGlhbmNlKCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBpbnQgbWF4TUlQTGV2ZWwgKSB7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGdlb21ldHJ5Lm5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0XHR2ZWMzIHF1ZXJ5VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHdvcmxkTm9ybWFsLngsIHdvcmxkTm9ybWFsLnl6ICk7XG5cdFx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZUxvZEVYVCggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1heE1JUExldmVsICkgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1heE1JUExldmVsICkgKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiID0gZW52TWFwVGV4ZWxUb0xpbmVhciggZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB2ZWM0KCAwLjAgKTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gUEkgKiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7XG5cdH1cblx0ZmxvYXQgZ2V0U3BlY3VsYXJNSVBMZXZlbCggY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBpbnQgbWF4TUlQTGV2ZWwgKSB7XG5cdFx0ZmxvYXQgbWF4TUlQTGV2ZWxTY2FsYXIgPSBmbG9hdCggbWF4TUlQTGV2ZWwgKTtcblx0XHRmbG9hdCBzaWdtYSA9IFBJICogcm91Z2huZXNzICogcm91Z2huZXNzIC8gKCAxLjAgKyByb3VnaG5lc3MgKTtcblx0XHRmbG9hdCBkZXNpcmVkTUlQTGV2ZWwgPSBtYXhNSVBMZXZlbFNjYWxhciArIGxvZzIoIHNpZ21hICk7XG5cdFx0cmV0dXJuIGNsYW1wKCBkZXNpcmVkTUlQTGV2ZWwsIDAuMCwgbWF4TUlQTGV2ZWxTY2FsYXIgKTtcblx0fVxuXHR2ZWMzIGdldExpZ2h0UHJvYmVJbmRpcmVjdFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggLXZpZXdEaXIsIG5vcm1hbCApO1xuXHRcdFx0cmVmbGVjdFZlYyA9IG5vcm1hbGl6ZSggbWl4KCByZWZsZWN0VmVjLCBub3JtYWwsIHJvdWdobmVzcyAqIHJvdWdobmVzcykgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggLXZpZXdEaXIsIG5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdFx0cmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTtcblx0XHRmbG9hdCBzcGVjdWxhck1JUExldmVsID0gZ2V0U3BlY3VsYXJNSVBMZXZlbCggcm91Z2huZXNzLCBtYXhNSVBMZXZlbCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0XHR2ZWMzIHF1ZXJ5UmVmbGVjdFZlYyA9IHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKTtcblx0XHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlTG9kRVhUKCBlbnZNYXAsIHF1ZXJ5UmVmbGVjdFZlYywgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHF1ZXJ5UmVmbGVjdFZlYywgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2VuZGlmXG5cdFx0XHRlbnZNYXBDb2xvci5yZ2IgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCBlbnZNYXBDb2xvciApLnJnYjtcblx0XHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApO1xuXHRcdCNlbmRpZlxuXHRcdHJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7XG5cdH1cbiNlbmRpZiIsZW52bWFwX3ZlcnRleDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmZGVmIEVOVl9XT1JMRFBPU1xuXHRcdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG5cdCNlbHNlXG5cdFx0dmVjMyBjYW1lcmFUb1ZlcnRleDtcblx0XHRpZiAoIGlzT3J0aG9ncmFwaGljICkge1xuXHRcdFx0Y2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggd29ybGRQb3NpdGlvbi54eXogLSBjYW1lcmFQb3NpdGlvbiApO1xuXHRcdH1cblx0XHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dlJlZmxlY3QgPSByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTtcblx0XHQjZWxzZVxuXHRcdFx0dlJlZmxlY3QgPSByZWZyYWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbmRpZiIsZm9nX3ZlcnRleDoiI2lmZGVmIFVTRV9GT0dcblx0Zm9nRGVwdGggPSAtIG12UG9zaXRpb24uejtcbiNlbmRpZiIsZm9nX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0ZPR1xuXHR2YXJ5aW5nIGZsb2F0IGZvZ0RlcHRoO1xuI2VuZGlmIixmb2dfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRk9HXG5cdCNpZmRlZiBGT0dfRVhQMlxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IDEuMCAtIGV4cCggLSBmb2dEZW5zaXR5ICogZm9nRGVuc2l0eSAqIGZvZ0RlcHRoICogZm9nRGVwdGggKTtcblx0I2Vsc2Vcblx0XHRmbG9hdCBmb2dGYWN0b3IgPSBzbW9vdGhzdGVwKCBmb2dOZWFyLCBmb2dGYXIsIGZvZ0RlcHRoICk7XG5cdCNlbmRpZlxuXHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBmb2dDb2xvciwgZm9nRmFjdG9yICk7XG4jZW5kaWYiLGZvZ19wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0ZPR1xuXHR1bmlmb3JtIHZlYzMgZm9nQ29sb3I7XG5cdHZhcnlpbmcgZmxvYXQgZm9nRGVwdGg7XG5cdCNpZmRlZiBGT0dfRVhQMlxuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRGVuc2l0eTtcblx0I2Vsc2Vcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ05lYXI7XG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dGYXI7XG5cdCNlbmRpZlxuI2VuZGlmIixncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0dSQURJRU5UTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGdyYWRpZW50TWFwO1xuI2VuZGlmXG52ZWMzIGdldEdyYWRpZW50SXJyYWRpYW5jZSggdmVjMyBub3JtYWwsIHZlYzMgbGlnaHREaXJlY3Rpb24gKSB7XG5cdGZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7XG5cdHZlYzIgY29vcmQgPSB2ZWMyKCBkb3ROTCAqIDAuNSArIDAuNSwgMC4wICk7XG5cdCNpZmRlZiBVU0VfR1JBRElFTlRNQVBcblx0XHRyZXR1cm4gdGV4dHVyZTJEKCBncmFkaWVudE1hcCwgY29vcmQgKS5yZ2I7XG5cdCNlbHNlXG5cdFx0cmV0dXJuICggY29vcmQueCA8IDAuNyApID8gdmVjMyggMC43ICkgOiB2ZWMzKCAxLjAgKTtcblx0I2VuZGlmXG59IixsaWdodG1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9MSUdIVE1BUFxuXHR2ZWM0IGxpZ2h0TWFwVGV4ZWw9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IFBJICogbGlnaHRNYXBUZXhlbFRvTGluZWFyKCBsaWdodE1hcFRleGVsICkucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgbGlnaHRNYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDoidmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7XG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejtcbmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApO1xuR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7XG5iYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcbmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsO1xuYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xudkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTtcbnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcblx0dkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuZmxvYXQgZG90Tkw7XG52ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcbnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG52SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkgKTtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dkluZGlyZWN0QmFjayArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHR2SW5kaXJlY3RCYWNrICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBiYWNrR2VvbWV0cnkgKTtcbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRQb2ludERpcmVjdExpZ2h0SXJyYWRpYW5jZSggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gUEkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjZW5kaWZcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBzcG90TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IFBJICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLWRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBQSSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdHZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC1kb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xuXHRcdHZJbmRpcmVjdEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5ICk7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZiIsbGlnaHRzX3BhcnNfYmVnaW46InVuaWZvcm0gYm9vbCByZWNlaXZlU2hhZG93O1xudW5pZm9ybSB2ZWMzIGFtYmllbnRMaWdodENvbG9yO1xudW5pZm9ybSB2ZWMzIGxpZ2h0UHJvYmVbIDkgXTtcbnZlYzMgc2hHZXRJcnJhZGlhbmNlQXQoIGluIHZlYzMgbm9ybWFsLCBpbiB2ZWMzIHNoQ29lZmZpY2llbnRzWyA5IF0gKSB7XG5cdGZsb2F0IHggPSBub3JtYWwueCwgeSA9IG5vcm1hbC55LCB6ID0gbm9ybWFsLno7XG5cdHZlYzMgcmVzdWx0ID0gc2hDb2VmZmljaWVudHNbIDAgXSAqIDAuODg2MjI3O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDEgXSAqIDIuMCAqIDAuNTExNjY0ICogeTtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAyIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHo7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMyBdICogMi4wICogMC41MTE2NjQgKiB4O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDQgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHk7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNSBdICogMi4wICogMC40MjkwNDMgKiB5ICogejtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApO1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDcgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHo7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgOCBdICogMC40MjkwNDMgKiAoIHggKiB4IC0geSAqIHkgKTtcblx0cmV0dXJuIHJlc3VsdDtcbn1cbnZlYzMgZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbGlnaHRQcm9iZVsgOSBdLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5ICkge1xuXHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggZ2VvbWV0cnkubm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IHNoR2V0SXJyYWRpYW5jZUF0KCB3b3JsZE5vcm1hbCwgbGlnaHRQcm9iZSApO1xuXHRyZXR1cm4gaXJyYWRpYW5jZTtcbn1cbnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHtcblx0dmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHRyZXR1cm4gaXJyYWRpYW5jZTtcbn1cbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdH07XG5cdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0c1sgTlVNX0RJUl9MSUdIVFMgXTtcblx0dm9pZCBnZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCApIHtcblx0XHRkaXJlY3RMaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7XG5cdFx0ZGlyZWN0TGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XG5cdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBQb2ludExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdH07XG5cdHVuaWZvcm0gUG9pbnRMaWdodCBwb2ludExpZ2h0c1sgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFBvaW50RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IHB1bmN0dWFsTGlnaHRJbnRlbnNpdHlUb0lycmFkaWFuY2VGYWN0b3IoIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTtcblx0XHRkaXJlY3RMaWdodC52aXNpYmxlID0gKCBkaXJlY3RMaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBTcG90TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRmbG9hdCBjb25lQ29zO1xuXHRcdGZsb2F0IHBlbnVtYnJhQ29zO1xuXHR9O1xuXHR1bmlmb3JtIFNwb3RMaWdodCBzcG90TGlnaHRzWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgYW5nbGVDb3MgPSBkb3QoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgc3BvdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGlmICggYW5nbGVDb3MgPiBzcG90TGlnaHQuY29uZUNvcyApIHtcblx0XHRcdGZsb2F0IHNwb3RFZmZlY3QgPSBzbW9vdGhzdGVwKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xuXHRcdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3I7XG5cdFx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBzcG90RWZmZWN0ICogcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggbGlnaHREaXN0YW5jZSwgc3BvdExpZ2h0LmRpc3RhbmNlLCBzcG90TGlnaHQuZGVjYXkgKTtcblx0XHRcdGRpcmVjdExpZ2h0LnZpc2libGUgPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaXJlY3RMaWdodC5jb2xvciA9IHZlYzMoIDAuMCApO1xuXHRcdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuI2VuZGlmXG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHN0cnVjdCBSZWN0QXJlYUxpZ2h0IHtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBoYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0O1xuXHR9O1xuXHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTtcdHVuaWZvcm0gc2FtcGxlcjJEIGx0Y18yO1xuXHR1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07XG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwXG5cdHN0cnVjdCBIZW1pc3BoZXJlTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgc2t5Q29sb3I7XG5cdFx0dmVjMyBncm91bmRDb2xvcjtcblx0fTtcblx0dW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07XG5cdHZlYzMgZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gSGVtaXNwaGVyZUxpZ2h0IGhlbWlMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSApIHtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTtcblx0XHR2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApO1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gaXJyYWRpYW5jZTtcblx0fVxuI2VuZGlmIixsaWdodHNfdG9vbl9mcmFnbWVudDoiVG9vbk1hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjsiLGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQ6InZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuc3RydWN0IFRvb25NYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xufTtcbnZvaWQgUkVfRGlyZWN0X1Rvb24oIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGdldEdyYWRpZW50SXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRpcnJhZGlhbmNlICo9IFBJO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbiggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfVG9vblxuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcdFx0UkVfSW5kaXJlY3REaWZmdXNlX1Rvb25cbiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKVx0KDApIixsaWdodHNfcGhvbmdfZnJhZ21lbnQ6IkJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5tYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7XG5tYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyA9IHNoaW5pbmVzcztcbm1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGggPSBzcGVjdWxhclN0cmVuZ3RoOyIsbGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ6InZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuc3RydWN0IEJsaW5uUGhvbmdNYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xuXHR2ZWMzIHNwZWN1bGFyQ29sb3I7XG5cdGZsb2F0IHNwZWN1bGFyU2hpbmluZXNzO1xuXHRmbG9hdCBzcGVjdWxhclN0cmVuZ3RoO1xufTtcbnZvaWQgUkVfRGlyZWN0X0JsaW5uUGhvbmcoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRpcnJhZGlhbmNlICo9IFBJO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TcGVjdWxhcl9CbGlublBob25nKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzICkgKiBtYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoO1xufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfQmxpbm5QaG9uZ1xuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcdFx0UkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmdcbiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKVx0KDApIixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6IlBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiICogKCAxLjAgLSBtZXRhbG5lc3NGYWN0b3IgKTtcbnZlYzMgZHh5ID0gbWF4KCBhYnMoIGRGZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkRmR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTtcbmZsb2F0IGdlb21ldHJ5Um91Z2huZXNzID0gbWF4KCBtYXgoIGR4eS54LCBkeHkueSApLCBkeHkueiApO1xubWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgPSBtYXgoIHJvdWdobmVzc0ZhY3RvciwgMC4wNTI1ICk7bWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7XG5tYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MsIDEuMCApO1xuI2lmZGVmIFJFRkxFQ1RJVklUWVxuXHQjaWZkZWYgU1BFQ1VMQVJcblx0XHR2ZWMzIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gdmVjMyggc3BlY3VsYXJJbnRlbnNpdHkgKTtcblx0XHR2ZWMzIHNwZWN1bGFyVGludEZhY3RvciA9IHNwZWN1bGFyVGludDtcblx0XHQjaWZkZWYgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQXG5cdFx0XHRzcGVjdWxhckludGVuc2l0eUZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFySW50ZW5zaXR5TWFwLCB2VXYgKS5hO1xuXHRcdCNlbmRpZlxuXHRcdCNpZmRlZiBVU0VfU1BFQ1VMQVJUSU5UTUFQXG5cdFx0XHRzcGVjdWxhclRpbnRGYWN0b3IgKj0gc3BlY3VsYXJUaW50TWFwVGV4ZWxUb0xpbmVhciggdGV4dHVyZTJEKCBzcGVjdWxhclRpbnRNYXAsIHZVdiApICkucmdiO1xuXHRcdCNlbmRpZlxuXHRcdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3JGOTAgPSBtaXgoIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCB2ZWMzKCAxLjAgKSwgbWV0YWxuZXNzRmFjdG9yICk7XG5cdCNlbHNlXG5cdFx0dmVjMyBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHZlYzMoIDEuMCApO1xuXHRcdHZlYzMgc3BlY3VsYXJUaW50RmFjdG9yID0gdmVjMyggMS4wICk7XG5cdFx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvckY5MCA9IHZlYzMoIDEuMCApO1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggbWluKCB2ZWMzKCBNQVhJTVVNX1NQRUNVTEFSX0NPRUZGSUNJRU5UICogcG93MiggcmVmbGVjdGl2aXR5ICkgKSAqIHNwZWN1bGFyVGludEZhY3RvciwgdmVjMyggMS4wICkgKSAqIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcbiNlbHNlXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3JGOTAgPSB2ZWMzKCAxLjAgKTtcbiNlbmRpZlxuI2lmZGVmIENMRUFSQ09BVFxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBjbGVhcmNvYXQ7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzcztcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRSb3VnaG5lc3NNYXAsIHZVdiApLnk7XG5cdCNlbmRpZlxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzcztcblx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1NIRUVOXG5cdG1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbjtcbiNlbmRpZiIsbGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6InN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHtcblx0dmVjMyBkaWZmdXNlQ29sb3I7XG5cdGZsb2F0IHNwZWN1bGFyUm91Z2huZXNzO1xuXHR2ZWMzIHNwZWN1bGFyQ29sb3I7XG5cdHZlYzMgc3BlY3VsYXJDb2xvckY5MDtcbiNpZmRlZiBDTEVBUkNPQVRcblx0ZmxvYXQgY2xlYXJjb2F0O1xuXHRmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbiNpZmRlZiBVU0VfU0hFRU5cblx0dmVjMyBzaGVlbkNvbG9yO1xuI2VuZGlmXG59O1xuI2RlZmluZSBNQVhJTVVNX1NQRUNVTEFSX0NPRUZGSUNJRU5UIDAuMTZcbiNkZWZpbmUgREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCAwLjA0XG5mbG9hdCBjbGVhcmNvYXRESFJBcHByb3goIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgZG90TkwgKSB7XG5cdHJldHVybiBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICsgKCAxLjAgLSBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICkgKiAoIHBvdyggMS4wIC0gZG90TkwsIDUuMCApICogcG93KCAxLjAgLSByb3VnaG5lc3MsIDIuMCApICk7XG59XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRcdHZlYzMgbm9ybWFsID0gZ2VvbWV0cnkubm9ybWFsO1xuXHRcdHZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XG5cdFx0dmVjMyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdHZlYzMgbGlnaHRQb3MgPSByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0O1xuXHRcdHZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7XG5cdFx0ZmxvYXQgcm91Z2huZXNzID0gbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3M7XG5cdFx0dmVjMyByZWN0Q29vcmRzWyA0IF07XG5cdFx0cmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1x0XHRyZWN0Q29vcmRzWyAxIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XG5cdFx0cmVjdENvb3Jkc1sgMiBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDMgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHR2ZWMyIHV2ID0gTFRDX1V2KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xuXHRcdHZlYzQgdDEgPSB0ZXh0dXJlMkQoIGx0Y18xLCB1diApO1xuXHRcdHZlYzQgdDIgPSB0ZXh0dXJlMkQoIGx0Y18yLCB1diApO1xuXHRcdG1hdDMgbUludiA9IG1hdDMoXG5cdFx0XHR2ZWMzKCB0MS54LCAwLCB0MS55ICksXG5cdFx0XHR2ZWMzKCAgICAwLCAxLCAgICAwICksXG5cdFx0XHR2ZWMzKCB0MS56LCAwLCB0MS53IClcblx0XHQpO1xuXHRcdHZlYzMgZnJlc25lbCA9ICggbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAqIHQyLnggKyAoIHZlYzMoIDEuMCApIC0gbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciApICogdDIueSApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGxpZ2h0Q29sb3IgKiBmcmVzbmVsICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtSW52LCByZWN0Q29vcmRzICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBsaWdodENvbG9yICogbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtYXQzKCAxLjAgKSwgcmVjdENvb3JkcyApO1xuXHR9XG4jZW5kaWZcbnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgQ0xFQVJDT0FUXG5cdFx0ZmxvYXQgY2NEb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0XHR2ZWMzIGNjSXJyYWRpYW5jZSA9IGNjRG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRcdGNjSXJyYWRpYW5jZSAqPSBQSTtcblx0XHQjZW5kaWZcblx0XHRmbG9hdCBjbGVhcmNvYXRESFIgPSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBjbGVhcmNvYXRESFJBcHByb3goIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgY2NEb3ROTCApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGNjSXJyYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyY29hdCAqIEJSREZfU3BlY3VsYXJfR0dYKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCB2ZWMzKCBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICksIHZlYzMoIDEuMCApLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2Vsc2Vcblx0XHRmbG9hdCBjbGVhcmNvYXRESFIgPSAwLjA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1NIRUVOXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gKCAxLjAgLSBjbGVhcmNvYXRESFIgKSAqIGlycmFkaWFuY2UgKiBCUkRGX1NwZWN1bGFyX1NoZWVuKFxuXHRcdFx0bWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MsXG5cdFx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24sXG5cdFx0XHRnZW9tZXRyeSxcblx0XHRcdG1hdGVyaWFsLnNoZWVuQ29sb3Jcblx0XHQpO1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9ICggMS4wIC0gY2xlYXJjb2F0REhSICkgKiBpcnJhZGlhbmNlICogQlJERl9TcGVjdWxhcl9HR1goIGRpcmVjdExpZ2h0LCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3JGOTAsIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzKTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gKCAxLjAgLSBjbGVhcmNvYXRESFIgKSAqIGlycmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2VfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbCggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2VfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgcmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBjbGVhcmNvYXRSYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQpIHtcblx0I2lmZGVmIENMRUFSQ09BVFxuXHRcdGZsb2F0IGNjRG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gY2xlYXJjb2F0UmFkaWFuY2UgKiBtYXRlcmlhbC5jbGVhcmNvYXQgKiBCUkRGX1NwZWN1bGFyX0dHWF9FbnZpcm9ubWVudCggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCB2ZWMzKCBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICksIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xuXHRcdGZsb2F0IGNjRG90TkwgPSBjY0RvdE5WO1xuXHRcdGZsb2F0IGNsZWFyY29hdERIUiA9IG1hdGVyaWFsLmNsZWFyY29hdCAqIGNsZWFyY29hdERIUkFwcHJveCggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCBjY0RvdE5MICk7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgY2xlYXJjb2F0REhSID0gMC4wO1xuXHQjZW5kaWZcblx0ZmxvYXQgY2xlYXJjb2F0SW52ID0gMS4wIC0gY2xlYXJjb2F0REhSO1xuXHR2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBtdWx0aVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2UgPSBpcnJhZGlhbmNlICogUkVDSVBST0NBTF9QSTtcblx0QlJERl9TcGVjdWxhcl9NdWx0aXNjYXR0ZXJpbmdfRW52aXJvbm1lbnQoIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcywgc2luZ2xlU2NhdHRlcmluZywgbXVsdGlTY2F0dGVyaW5nICk7XG5cdHZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBjbGVhcmNvYXRJbnYgKiByYWRpYW5jZSAqIHNpbmdsZVNjYXR0ZXJpbmc7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gbXVsdGlTY2F0dGVyaW5nICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTtcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfUGh5c2ljYWxcbiNkZWZpbmUgUkVfRGlyZWN0X1JlY3RBcmVhXHRcdFJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbFxuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcdFx0UkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsXG4jZGVmaW5lIFJFX0luZGlyZWN0U3BlY3VsYXJcdFx0UkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbFxuZmxvYXQgY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBjb25zdCBpbiBmbG9hdCBkb3ROViwgY29uc3QgaW4gZmxvYXQgYW1iaWVudE9jY2x1c2lvbiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApO1xufSIsbGlnaHRzX2ZyYWdtZW50X2JlZ2luOiJcbkdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7XG5nZW9tZXRyeS5wb3NpdGlvbiA9IC0gdlZpZXdQb3NpdGlvbjtcbmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbDtcbmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTtcbiNpZmRlZiBDTEVBUkNPQVRcblx0Z2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsID0gY2xlYXJjb2F0Tm9ybWFsO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvdztcblx0I2VuZGlmXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTtcblx0XHRnZXRQb2ludERpcmVjdExpZ2h0SXJyYWRpYW5jZSggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyApXG5cdFx0cG9pbnRMaWdodFNoYWRvdyA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiAoIE5VTV9TUE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRTcG90TGlnaHQgc3BvdExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07XG5cdFx0Z2V0U3BvdERpcmVjdExpZ2h0SXJyYWRpYW5jZSggc3BvdExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgKVxuXHRcdHNwb3RMaWdodFNoYWRvdyA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHREaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdO1xuXHRcdGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUyApXG5cdFx0ZGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKVxuXHRSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07XG5cdFx0UkVfRGlyZWN0X1JlY3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdHZlYzMgaWJsSXJyYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHRpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeSApO1xuXHQjaWYgKCBOVU1fSEVNSV9MSUdIVFMgPiAwIClcblx0XHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xuXHRcdFx0aXJyYWRpYW5jZSArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5ICk7XG5cdFx0fVxuXHRcdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHZlYzMgcmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBjbGVhcmNvYXRSYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuI2VuZGlmIixsaWdodHNfZnJhZ21lbnRfbWFwczoiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcblx0XHR2ZWM0IGxpZ2h0TWFwVGV4ZWw9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWxUb0xpbmVhciggbGlnaHRNYXBUZXhlbCApLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0bGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJO1xuXHRcdCNlbmRpZlxuXHRcdGlycmFkaWFuY2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlO1xuXHQjZW5kaWZcblx0I2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBTVEFOREFSRCApICYmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdGlibElycmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUluZGlyZWN0SXJyYWRpYW5jZSggZ2VvbWV0cnksIG1heE1pcExldmVsICk7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxuXHRyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcywgbWF4TWlwTGV2ZWwgKTtcblx0I2lmZGVmIENMRUFSQ09BVFxuXHRcdGNsZWFyY29hdFJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJbmRpcmVjdFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgbWF4TWlwTGV2ZWwgKTtcblx0I2VuZGlmXG4jZW5kaWYiLGxpZ2h0c19mcmFnbWVudF9lbmQ6IiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHRSRV9JbmRpcmVjdERpZmZ1c2UoIGlycmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxuXHRSRV9JbmRpcmVjdFNwZWN1bGFyKCByYWRpYW5jZSwgaWJsSXJyYWRpYW5jZSwgY2xlYXJjb2F0UmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcbiNlbmRpZiIsbG9nZGVwdGhidWZfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcblx0Z2xfRnJhZ0RlcHRoRVhUID0gdklzUGVyc3BlY3RpdmUgPT0gMC4wID8gZ2xfRnJhZ0Nvb3JkLnogOiBsb2cyKCB2RnJhZ0RlcHRoICkgKiBsb2dEZXB0aEJ1ZkZDICogMC41O1xuI2VuZGlmIixsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApXG5cdHVuaWZvcm0gZmxvYXQgbG9nRGVwdGhCdWZGQztcblx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xuXHR2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlO1xuI2VuZGlmIixsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9MT0dERVBUSEJVRlxuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcblx0XHR2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gZmxvYXQgbG9nRGVwdGhCdWZGQztcblx0I2VuZGlmXG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3ZlcnRleDoiI2lmZGVmIFVTRV9MT0dERVBUSEJVRlxuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZGcmFnRGVwdGggPSAxLjAgKyBnbF9Qb3NpdGlvbi53O1xuXHRcdHZJc1BlcnNwZWN0aXZlID0gZmxvYXQoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApO1xuXHQjZWxzZVxuXHRcdGlmICggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICkge1xuXHRcdFx0Z2xfUG9zaXRpb24ueiA9IGxvZzIoIG1heCggRVBTSUxPTiwgZ2xfUG9zaXRpb24udyArIDEuMCApICkgKiBsb2dEZXB0aEJ1ZkZDIC0gMS4wO1xuXHRcdFx0Z2xfUG9zaXRpb24ueiAqPSBnbF9Qb3NpdGlvbi53O1xuXHRcdH1cblx0I2VuZGlmXG4jZW5kaWYiLG1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9NQVBcblx0dmVjNCB0ZXhlbENvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVdiApO1xuXHR0ZXhlbENvbG9yID0gbWFwVGV4ZWxUb0xpbmVhciggdGV4ZWxDb2xvciApO1xuXHRkaWZmdXNlQ29sb3IgKj0gdGV4ZWxDb2xvcjtcbiNlbmRpZiIsbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG1hcDtcbiNlbmRpZiIsbWFwX3BhcnRpY2xlX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApXG5cdHZlYzIgdXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggZ2xfUG9pbnRDb29yZC54LCAxLjAgLSBnbF9Qb2ludENvb3JkLnksIDEgKSApLnh5O1xuI2VuZGlmXG4jaWZkZWYgVVNFX01BUFxuXHR2ZWM0IG1hcFRleGVsID0gdGV4dHVyZTJEKCBtYXAsIHV2ICk7XG5cdGRpZmZ1c2VDb2xvciAqPSBtYXBUZXhlbFRvTGluZWFyKCBtYXBUZXhlbCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0FMUEhBTUFQXG5cdGRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHV2ICkuZztcbiNlbmRpZiIsbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQIClcblx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xuI2VuZGlmXG4jaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9mcmFnbWVudDoiZmxvYXQgbWV0YWxuZXNzRmFjdG9yID0gbWV0YWxuZXNzO1xuI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dmVjNCB0ZXhlbE1ldGFsbmVzcyA9IHRleHR1cmUyRCggbWV0YWxuZXNzTWFwLCB2VXYgKTtcblx0bWV0YWxuZXNzRmFjdG9yICo9IHRleGVsTWV0YWxuZXNzLmI7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01FVEFMTkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7XG4jZW5kaWYiLG1vcnBobm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0b2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xuXHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XG5cdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xuI2VuZGlmIixtb3JwaHRhcmdldF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFNcblx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7XG5cdCNpZm5kZWYgVVNFX01PUlBITk9STUFMU1xuXHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA4IF07XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcblx0I2VuZGlmXG4jZW5kaWYiLG1vcnBodGFyZ2V0X3ZlcnRleDoiI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFNcblx0dHJhbnNmb3JtZWQgKj0gbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xuXHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcblx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XG5cdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdO1xuXHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcblx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ0ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XG5cdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ1ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07XG5cdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ2ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA2IF07XG5cdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ3ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA3IF07XG5cdCNlbmRpZlxuI2VuZGlmIixub3JtYWxfZnJhZ21lbnRfYmVnaW46ImZsb2F0IGZhY2VEaXJlY3Rpb24gPSBnbF9Gcm9udEZhY2luZyA/IDEuMCA6IC0gMS4wO1xuI2lmZGVmIEZMQVRfU0hBREVEXG5cdHZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xuXHR2ZWMzIGZkeSA9IHZlYzMoIGRGZHkoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeSggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSApICk7XG4jZWxzZVxuXHR2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApO1xuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0bm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZlYzMgdGFuZ2VudCA9IG5vcm1hbGl6ZSggdlRhbmdlbnQgKTtcblx0XHR2ZWMzIGJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggdkJpdGFuZ2VudCApO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHRhbmdlbnQgPSB0YW5nZW50ICogZmFjZURpcmVjdGlvbjtcblx0XHRcdGJpdGFuZ2VudCA9IGJpdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247XG5cdFx0I2VuZGlmXG5cdFx0I2lmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApXG5cdFx0XHRtYXQzIHZUQk4gPSBtYXQzKCB0YW5nZW50LCBiaXRhbmdlbnQsIG5vcm1hbCApO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbmRpZlxudmVjMyBnZW9tZXRyeU5vcm1hbCA9IG5vcm1hbDsiLG5vcm1hbF9mcmFnbWVudF9tYXBzOiIjaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXG5cdG5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdCNpZmRlZiBGTElQX1NJREVEXG5cdFx0bm9ybWFsID0gLSBub3JtYWw7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0bm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjtcblx0I2VuZGlmXG5cdG5vcm1hbCA9IG5vcm1hbGl6ZSggbm9ybWFsTWF0cml4ICogbm9ybWFsICk7XG4jZWxpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmVjMyBtYXBOID0gdGV4dHVyZTJEKCBub3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0bWFwTi54eSAqPSBub3JtYWxTY2FsZTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0bm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogbWFwTiApO1xuXHQjZWxzZVxuXHRcdG5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7XG5cdCNlbmRpZlxuI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKVxuXHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFsQXJiKCAtdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBkSGR4eV9md2QoKSwgZmFjZURpcmVjdGlvbiApO1xuI2VuZGlmIixub3JtYWxtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9OT1JNQUxNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsTWFwO1xuXHR1bmlmb3JtIHZlYzIgbm9ybWFsU2NhbGU7XG4jZW5kaWZcbiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVBcblx0dW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDtcbiNlbmRpZlxuI2lmICEgZGVmaW5lZCAoIFVTRV9UQU5HRU5UICkgJiYgKCBkZWZpbmVkICggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQgKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApIClcblx0dmVjMyBwZXJ0dXJiTm9ybWFsMkFyYiggdmVjMyBleWVfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMyBtYXBOLCBmbG9hdCBmYWNlRGlyZWN0aW9uICkge1xuXHRcdHZlYzMgcTAgPSB2ZWMzKCBkRmR4KCBleWVfcG9zLnggKSwgZEZkeCggZXllX3Bvcy55ICksIGRGZHgoIGV5ZV9wb3MueiApICk7XG5cdFx0dmVjMyBxMSA9IHZlYzMoIGRGZHkoIGV5ZV9wb3MueCApLCBkRmR5KCBleWVfcG9zLnkgKSwgZEZkeSggZXllX3Bvcy56ICkgKTtcblx0XHR2ZWMyIHN0MCA9IGRGZHgoIHZVdi5zdCApO1xuXHRcdHZlYzIgc3QxID0gZEZkeSggdlV2LnN0ICk7XG5cdFx0dmVjMyBOID0gc3VyZl9ub3JtO1xuXHRcdHZlYzMgcTFwZXJwID0gY3Jvc3MoIHExLCBOICk7XG5cdFx0dmVjMyBxMHBlcnAgPSBjcm9zcyggTiwgcTAgKTtcblx0XHR2ZWMzIFQgPSBxMXBlcnAgKiBzdDAueCArIHEwcGVycCAqIHN0MS54O1xuXHRcdHZlYzMgQiA9IHExcGVycCAqIHN0MC55ICsgcTBwZXJwICogc3QxLnk7XG5cdFx0ZmxvYXQgZGV0ID0gbWF4KCBkb3QoIFQsIFQgKSwgZG90KCBCLCBCICkgKTtcblx0XHRmbG9hdCBzY2FsZSA9ICggZGV0ID09IDAuMCApID8gMC4wIDogZmFjZURpcmVjdGlvbiAqIGludmVyc2VzcXJ0KCBkZXQgKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCBUICogKCBtYXBOLnggKiBzY2FsZSApICsgQiAqICggbWFwTi55ICogc2NhbGUgKSArIE4gKiBtYXBOLnogKTtcblx0fVxuI2VuZGlmIixjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiIjaWZkZWYgQ0xFQVJDT0FUXG5cdHZlYzMgY2xlYXJjb2F0Tm9ybWFsID0gZ2VvbWV0cnlOb3JtYWw7XG4jZW5kaWYiLGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwczoiI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQXG5cdHZlYzMgY2xlYXJjb2F0TWFwTiA9IHRleHR1cmUyRCggY2xlYXJjb2F0Tm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdGNsZWFyY29hdE1hcE4ueHkgKj0gY2xlYXJjb2F0Tm9ybWFsU2NhbGU7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdGNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTtcblx0I2Vsc2Vcblx0XHRjbGVhcmNvYXROb3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBjbGVhcmNvYXROb3JtYWwsIGNsZWFyY29hdE1hcE4sIGZhY2VEaXJlY3Rpb24gKTtcblx0I2VuZGlmXG4jZW5kaWYiLGNsZWFyY29hdF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRNYXA7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRSb3VnaG5lc3NNYXA7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXROb3JtYWxNYXA7XG5cdHVuaWZvcm0gdmVjMiBjbGVhcmNvYXROb3JtYWxTY2FsZTtcbiNlbmRpZiIscGFja2luZzoidmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCBub3JtYWwgKSAqIDAuNSArIDAuNTtcbn1cbnZlYzMgdW5wYWNrUkdCVG9Ob3JtYWwoIGNvbnN0IGluIHZlYzMgcmdiICkge1xuXHRyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDtcbn1cbmNvbnN0IGZsb2F0IFBhY2tVcHNjYWxlID0gMjU2LiAvIDI1NS47Y29uc3QgZmxvYXQgVW5wYWNrRG93bnNjYWxlID0gMjU1LiAvIDI1Ni47XG5jb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApO1xuY29uc3QgdmVjNCBVbnBhY2tGYWN0b3JzID0gVW5wYWNrRG93bnNjYWxlIC8gdmVjNCggUGFja0ZhY3RvcnMsIDEuICk7XG5jb25zdCBmbG9hdCBTaGlmdFJpZ2h0OCA9IDEuIC8gMjU2LjtcbnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkge1xuXHR2ZWM0IHIgPSB2ZWM0KCBmcmFjdCggdiAqIFBhY2tGYWN0b3JzICksIHYgKTtcblx0ci55encgLT0gci54eXogKiBTaGlmdFJpZ2h0ODtcdHJldHVybiByICogUGFja1Vwc2NhbGU7XG59XG5mbG9hdCB1bnBhY2tSR0JBVG9EZXB0aCggY29uc3QgaW4gdmVjNCB2ICkge1xuXHRyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7XG59XG52ZWM0IHBhY2sySGFsZlRvUkdCQSggdmVjMiB2ICkge1xuXHR2ZWM0IHIgPSB2ZWM0KCB2LngsIGZyYWN0KCB2LnggKiAyNTUuMCApLCB2LnksIGZyYWN0KCB2LnkgKiAyNTUuMCApKTtcblx0cmV0dXJuIHZlYzQoIHIueCAtIHIueSAvIDI1NS4wLCByLnksIHIueiAtIHIudyAvIDI1NS4wLCByLncpO1xufVxudmVjMiB1bnBhY2tSR0JBVG8ySGFsZiggdmVjNCB2ICkge1xuXHRyZXR1cm4gdmVjMiggdi54ICsgKCB2LnkgLyAyNTUuMCApLCB2LnogKyAoIHYudyAvIDI1NS4wICkgKTtcbn1cbmZsb2F0IHZpZXdaVG9PcnRob2dyYXBoaWNEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTtcbn1cbmZsb2F0IG9ydGhvZ3JhcGhpY0RlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgbGluZWFyQ2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuIGxpbmVhckNsaXBaICogKCBuZWFyIC0gZmFyICkgLSBuZWFyO1xufVxuZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoKCBuZWFyICsgdmlld1ogKSAqIGZhciApIC8gKCggZmFyIC0gbmVhciApICogdmlld1ogKTtcbn1cbmZsb2F0IHBlcnNwZWN0aXZlRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBpbnZDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52Q2xpcFogLSBmYXIgKTtcbn0iLHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ6IiNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBXG5cdGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XG4jZW5kaWYiLHByb2plY3RfdmVydGV4OiJ2ZWM0IG12UG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0bXZQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogbXZQb3NpdGlvbjtcbiNlbmRpZlxubXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247XG5nbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uOyIsZGl0aGVyaW5nX2ZyYWdtZW50OiIjaWZkZWYgRElUSEVSSU5HXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSBkaXRoZXJpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZiIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBESVRIRVJJTkdcblx0dmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7XG5cdFx0ZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApO1xuXHRcdHZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7XG5cdFx0ZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTtcblx0XHRyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCO1xuXHR9XG4jZW5kaWYiLHJvdWdobmVzc21hcF9mcmFnbWVudDoiZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzO1xuI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTtcblx0cm91Z2huZXNzRmFjdG9yICo9IHRleGVsUm91Z2huZXNzLmc7XG4jZW5kaWYiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5lc3NNYXA7XG4jZW5kaWYiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBTcG90TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdGZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XG5cdFx0cmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7XG5cdH1cblx0dmVjMiB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYgKSB7XG5cdFx0cmV0dXJuIHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvdywgdXYgKSApO1xuXHR9XG5cdGZsb2F0IFZTTVNoYWRvdyAoc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApe1xuXHRcdGZsb2F0IG9jY2x1c2lvbiA9IDEuMDtcblx0XHR2ZWMyIGRpc3RyaWJ1dGlvbiA9IHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2hhZG93LCB1diApO1xuXHRcdGZsb2F0IGhhcmRfc2hhZG93ID0gc3RlcCggY29tcGFyZSAsIGRpc3RyaWJ1dGlvbi54ICk7XG5cdFx0aWYgKGhhcmRfc2hhZG93ICE9IDEuMCApIHtcblx0XHRcdGZsb2F0IGRpc3RhbmNlID0gY29tcGFyZSAtIGRpc3RyaWJ1dGlvbi54IDtcblx0XHRcdGZsb2F0IHZhcmlhbmNlID0gbWF4KCAwLjAwMDAwLCBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICk7XG5cdFx0XHRmbG9hdCBzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgZGlzdGFuY2UgKiBkaXN0YW5jZSApO1x0XHRcdHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gY2xhbXAoICggc29mdG5lc3NfcHJvYmFiaWxpdHkgLSAwLjMgKSAvICggMC45NSAtIDAuMyApLCAwLjAsIDEuMCApO1x0XHRcdG9jY2x1c2lvbiA9IGNsYW1wKCBtYXgoIGhhcmRfc2hhZG93LCBzb2Z0bmVzc19wcm9iYWJpbGl0eSApLCAwLjAsIDEuMCApO1xuXHRcdH1cblx0XHRyZXR1cm4gb2NjbHVzaW9uO1xuXHR9XG5cdGZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7XG5cdFx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHRcdHNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53O1xuXHRcdHNoYWRvd0Nvb3JkLnogKz0gc2hhZG93Qmlhcztcblx0XHRidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7XG5cdFx0Ym9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApO1xuXHRcdGJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTtcblx0XHRib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApO1xuXHRcdGlmICggZnJ1c3R1bVRlc3QgKSB7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeDIgPSBkeDAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTIgPSBkeTAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeDMgPSBkeDEgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTMgPSBkeTEgLyAyLjA7XG5cdFx0XHRzaGFkb3cgPSAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcblx0XHRcdCkgKiAoIDEuMCAvIDE3LjAgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4ID0gdGV4ZWxTaXplLng7XG5cdFx0XHRmbG9hdCBkeSA9IHRleGVsU2l6ZS55O1xuXHRcdFx0dmVjMiB1diA9IHNoYWRvd0Nvb3JkLnh5O1xuXHRcdFx0dmVjMiBmID0gZnJhY3QoIHV2ICogc2hhZG93TWFwU2l6ZSArIDAuNSApO1xuXHRcdFx0dXYgLT0gZiAqIHRleGVsU2l6ZTtcblx0XHRcdHNoYWRvdyA9IChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgZHkgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHRleGVsU2l6ZSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnggKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueCApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnkgKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueSApICtcblx0XHRcdFx0bWl4KCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdFx0ICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0XHQgIGYueCApLFxuXHRcdFx0XHRcdCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0XHQgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdFx0ICBmLnggKSxcblx0XHRcdFx0XHQgZi55IClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApXG5cdFx0XHRzaGFkb3cgPSBWU01TaGFkb3coIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTtcblx0XHQjZWxzZVxuXHRcdFx0c2hhZG93ID0gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbmRpZlxuXHRcdH1cblx0XHRyZXR1cm4gc2hhZG93O1xuXHR9XG5cdHZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHtcblx0XHR2ZWMzIGFic1YgPSBhYnMoIHYgKTtcblx0XHRmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTtcblx0XHRhYnNWICo9IHNjYWxlVG9DdWJlO1xuXHRcdHYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTtcblx0XHR2ZWMyIHBsYW5hciA9IHYueHk7XG5cdFx0ZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTtcblx0XHRmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7XG5cdFx0aWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkge1xuXHRcdFx0aWYgKCB2LnogPiAwLjAgKVxuXHRcdFx0XHRwbGFuYXIueCA9IDQuMCAtIHYueDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTtcblx0XHRcdHBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTtcblx0XHRcdHBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7XG5cdFx0XHRwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wO1xuXHRcdH1cblx0XHRyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XG5cdH1cblx0ZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7XG5cdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTtcblx0XHR2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNoYWRvd0Nvb3JkLnh5ejtcblx0XHRmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApO1x0XHRkcCArPSBzaGFkb3dCaWFzO1xuXHRcdHZlYzMgYmQzRCA9IG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNIClcblx0XHRcdHZlYzIgb2Zmc2V0ID0gdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZiIsc2hhZG93bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IFNwb3RMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgcG9pbnRTaGFkb3dNYXRyaXhbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHZlYzMgc2hhZG93V29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdHZlYzQgc2hhZG93V29ybGRQb3NpdGlvbjtcblx0I2VuZGlmXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdID0gZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHNwb3RMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dlNwb3RTaGFkb3dDb29yZFsgaSBdID0gc3BvdFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBwb2ludExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2UG9pbnRTaGFkb3dDb29yZFsgaSBdID0gcG9pbnRTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDoiZmxvYXQgZ2V0U2hhZG93TWFzaygpIHtcblx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHQjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNlbmRpZlxuXHRyZXR1cm4gc2hhZG93O1xufSIsc2tpbmJhc2VfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApO1xuXHRtYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTtcblx0bWF0NCBib25lTWF0WiA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC56ICk7XG5cdG1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApO1xuI2VuZGlmIixza2lubmluZ19wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDtcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXhJbnZlcnNlO1xuXHQjaWZkZWYgQk9ORV9URVhUVVJFXG5cdFx0dW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgYm9uZVRleHR1cmU7XG5cdFx0dW5pZm9ybSBpbnQgYm9uZVRleHR1cmVTaXplO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdGZsb2F0IGogPSBpICogNC4wO1xuXHRcdFx0ZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCB5ID0gZmxvb3IoIGogLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcblx0XHRcdGZsb2F0IGR4ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0ZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7XG5cdFx0XHR5ID0gZHkgKiAoIHkgKyAwLjUgKTtcblx0XHRcdHZlYzQgdjEgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDAuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjMgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDIuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjQgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDMuNSApLCB5ICkgKTtcblx0XHRcdG1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07XG5cdFx0bWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkge1xuXHRcdFx0bWF0NCBib25lID0gYm9uZU1hdHJpY2VzWyBpbnQoaSkgXTtcblx0XHRcdHJldHVybiBib25lO1xuXHRcdH1cblx0I2VuZGlmXG4jZW5kaWYiLHNraW5uaW5nX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR2ZWM0IHNraW5WZXJ0ZXggPSBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHR2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTtcblx0c2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lng7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55O1xuXHRza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejtcblx0c2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnc7XG5cdHRyYW5zZm9ybWVkID0gKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7XG4jZW5kaWYiLHNraW5ub3JtYWxfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueCAqIGJvbmVNYXRYO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQudyAqIGJvbmVNYXRXO1xuXHRza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDtcblx0b2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG9iamVjdFRhbmdlbnQgPSB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNlbmRpZlxuI2VuZGlmIixzcGVjdWxhcm1hcF9mcmFnbWVudDoiZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDtcbiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcblx0dmVjNCB0ZXhlbFNwZWN1bGFyID0gdGV4dHVyZTJEKCBzcGVjdWxhck1hcCwgdlV2ICk7XG5cdHNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7XG4jZWxzZVxuXHRzcGVjdWxhclN0cmVuZ3RoID0gMS4wO1xuI2VuZGlmIixzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xuI2VuZGlmIix0b25lbWFwcGluZ19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApO1xuI2VuZGlmIix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIjaWZuZGVmIHNhdHVyYXRlXG4jZGVmaW5lIHNhdHVyYXRlKGEpIGNsYW1wKCBhLCAwLjAsIDEuMCApXG4jZW5kaWZcbnVuaWZvcm0gZmxvYXQgdG9uZU1hcHBpbmdFeHBvc3VyZTtcbnZlYzMgTGluZWFyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdHJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7XG59XG52ZWMzIFJlaW5oYXJkVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApO1xufVxudmVjMyBPcHRpbWl6ZWRDaW5lb25Ub25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTtcblx0Y29sb3IgPSBtYXgoIHZlYzMoIDAuMCApLCBjb2xvciAtIDAuMDA0ICk7XG5cdHJldHVybiBwb3coICggY29sb3IgKiAoIDYuMiAqIGNvbG9yICsgMC41ICkgKSAvICggY29sb3IgKiAoIDYuMiAqIGNvbG9yICsgMS43ICkgKyAwLjA2ICksIHZlYzMoIDIuMiApICk7XG59XG52ZWMzIFJSVEFuZE9EVEZpdCggdmVjMyB2ICkge1xuXHR2ZWMzIGEgPSB2ICogKCB2ICsgMC4wMjQ1Nzg2ICkgLSAwLjAwMDA5MDUzNztcblx0dmVjMyBiID0gdiAqICggMC45ODM3MjkgKiB2ICsgMC40MzI5NTEwICkgKyAwLjIzODA4MTtcblx0cmV0dXJuIGEgLyBiO1xufVxudmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbnN0IG1hdDMgQUNFU0lucHV0TWF0ID0gbWF0Myhcblx0XHR2ZWMzKCAwLjU5NzE5LCAwLjA3NjAwLCAwLjAyODQwICksXHRcdHZlYzMoIDAuMzU0NTgsIDAuOTA4MzQsIDAuMTMzODMgKSxcblx0XHR2ZWMzKCAwLjA0ODIzLCAwLjAxNTY2LCAwLjgzNzc3IClcblx0KTtcblx0Y29uc3QgbWF0MyBBQ0VTT3V0cHV0TWF0ID0gbWF0Myhcblx0XHR2ZWMzKCAgMS42MDQ3NSwgLTAuMTAyMDgsIC0wLjAwMzI3ICksXHRcdHZlYzMoIC0wLjUzMTA4LCAgMS4xMDgxMywgLTAuMDcyNzYgKSxcblx0XHR2ZWMzKCAtMC4wNzM2NywgLTAuMDA2MDUsICAxLjA3NjAyIClcblx0KTtcblx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZSAvIDAuNjtcblx0Y29sb3IgPSBBQ0VTSW5wdXRNYXQgKiBjb2xvcjtcblx0Y29sb3IgPSBSUlRBbmRPRFRGaXQoIGNvbG9yICk7XG5cdGNvbG9yID0gQUNFU091dHB1dE1hdCAqIGNvbG9yO1xuXHRyZXR1cm4gc2F0dXJhdGUoIGNvbG9yICk7XG59XG52ZWMzIEN1c3RvbVRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gY29sb3I7IH0iLHRyYW5zbWlzc2lvbl9mcmFnbWVudDoiI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cblx0ZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uO1xuXHRmbG9hdCB0aGlja25lc3NGYWN0b3IgPSB0aGlja25lc3M7XG5cdCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG5cdFx0dHJhbnNtaXNzaW9uRmFjdG9yICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9USElDS05FU1NNQVBcblx0XHR0aGlja25lc3NGYWN0b3IgKj0gdGV4dHVyZTJEKCB0aGlja25lc3NNYXAsIHZVdiApLmc7XG5cdCNlbmRpZlxuXHR2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uLnh5eiAvIHZXb3JsZFBvc2l0aW9uLnc7XG5cdHZlYzMgdiA9IG5vcm1hbGl6ZSggY2FtZXJhUG9zaXRpb24gLSBwb3MgKTtcblx0dmVjMyBuID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdGZsb2F0IGlvciA9ICggMS4wICsgMC40ICogcmVmbGVjdGl2aXR5ICkgLyAoIDEuMCAtIDAuNCAqIHJlZmxlY3Rpdml0eSApO1xuXHR2ZWMzIHRyYW5zbWlzc2lvbiA9IHRyYW5zbWlzc2lvbkZhY3RvciAqIGdldElCTFZvbHVtZVJlZnJhY3Rpb24oXG5cdFx0biwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsXG5cdFx0cG9zLCBtb2RlbE1hdHJpeCwgdmlld01hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCwgaW9yLCB0aGlja25lc3NGYWN0b3IsXG5cdFx0YXR0ZW51YXRpb25UaW50LCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7XG5cdHRvdGFsRGlmZnVzZSA9IG1peCggdG90YWxEaWZmdXNlLCB0cmFuc21pc3Npb24sIHRyYW5zbWlzc2lvbkZhY3RvciApO1xuI2VuZGlmIix0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cblx0I2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCB0cmFuc21pc3Npb25NYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RISUNLTkVTU01BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDtcblx0I2VuZGlmXG5cdHVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDtcblx0dW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4O1xuXHR1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDtcblx0dmFyeWluZyB2ZWM0IHZXb3JsZFBvc2l0aW9uO1xuXHR2ZWMzIGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSh2ZWMzIG4sIHZlYzMgdiwgZmxvYXQgdGhpY2tuZXNzLCBmbG9hdCBpb3IsIG1hdDQgbW9kZWxNYXRyaXgpIHtcblx0XHR2ZWMzIHJlZnJhY3Rpb25WZWN0b3IgPSByZWZyYWN0KC12LCBub3JtYWxpemUobiksIDEuMCAvIGlvcik7XG5cdFx0dmVjMyBtb2RlbFNjYWxlO1xuXHRcdG1vZGVsU2NhbGUueCA9IGxlbmd0aCh2ZWMzKG1vZGVsTWF0cml4WzBdLnh5eikpO1xuXHRcdG1vZGVsU2NhbGUueSA9IGxlbmd0aCh2ZWMzKG1vZGVsTWF0cml4WzFdLnh5eikpO1xuXHRcdG1vZGVsU2NhbGUueiA9IGxlbmd0aCh2ZWMzKG1vZGVsTWF0cml4WzJdLnh5eikpO1xuXHRcdHJldHVybiBub3JtYWxpemUocmVmcmFjdGlvblZlY3RvcikgKiB0aGlja25lc3MgKiBtb2RlbFNjYWxlO1xuXHR9XG5cdGZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBpb3IpIHtcblx0XHRyZXR1cm4gcm91Z2huZXNzICogY2xhbXAoaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCk7XG5cdH1cblx0dmVjMyBnZXRUcmFuc21pc3Npb25TYW1wbGUodmVjMiBmcmFnQ29vcmQsIGZsb2F0IHJvdWdobmVzcywgZmxvYXQgaW9yKSB7XG5cdFx0ZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKHRyYW5zbWlzc2lvblNhbXBsZXJTaXplLngpICogYXBwbHlJb3JUb1JvdWdobmVzcyhyb3VnaG5lc3MsIGlvcik7XG5cdFx0cmV0dXJuIHRleHR1cmUyRExvZEVYVCh0cmFuc21pc3Npb25TYW1wbGVyTWFwLCBmcmFnQ29vcmQueHksIGZyYW1lYnVmZmVyTG9kKS5yZ2I7XG5cdH1cblx0dmVjMyBhcHBseVZvbHVtZUF0dGVudWF0aW9uKHZlYzMgcmFkaWFuY2UsIGZsb2F0IHRyYW5zbWlzc2lvbkRpc3RhbmNlLCB2ZWMzIGF0dGVudWF0aW9uQ29sb3IsIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2UpIHtcblx0XHRpZiAoYXR0ZW51YXRpb25EaXN0YW5jZSA9PSAwLjApIHtcblx0XHRcdHJldHVybiByYWRpYW5jZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmVjMyBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ID0gLWxvZyhhdHRlbnVhdGlvbkNvbG9yKSAvIGF0dGVudWF0aW9uRGlzdGFuY2U7XG5cdFx0XHR2ZWMzIHRyYW5zbWl0dGFuY2UgPSBleHAoLWF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSk7XHRcdFx0cmV0dXJuIHRyYW5zbWl0dGFuY2UgKiByYWRpYW5jZTtcblx0XHR9XG5cdH1cblx0dmVjMyBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKHZlYzMgbiwgdmVjMyB2LCBmbG9hdCBwZXJjZXB0dWFsUm91Z2huZXNzLCB2ZWMzIGJhc2VDb2xvciwgdmVjMyBzcGVjdWxhckNvbG9yLFxuXHRcdHZlYzMgcG9zaXRpb24sIG1hdDQgbW9kZWxNYXRyaXgsIG1hdDQgdmlld01hdHJpeCwgbWF0NCBwcm9qTWF0cml4LCBmbG9hdCBpb3IsIGZsb2F0IHRoaWNrbmVzcyxcblx0XHR2ZWMzIGF0dGVudWF0aW9uQ29sb3IsIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2UpIHtcblx0XHR2ZWMzIHRyYW5zbWlzc2lvblJheSA9IGdldFZvbHVtZVRyYW5zbWlzc2lvblJheShuLCB2LCB0aGlja25lc3MsIGlvciwgbW9kZWxNYXRyaXgpO1xuXHRcdHZlYzMgcmVmcmFjdGVkUmF5RXhpdCA9IHBvc2l0aW9uICsgdHJhbnNtaXNzaW9uUmF5O1xuXHRcdHZlYzQgbmRjUG9zID0gcHJvak1hdHJpeCAqIHZpZXdNYXRyaXggKiB2ZWM0KHJlZnJhY3RlZFJheUV4aXQsIDEuMCk7XG5cdFx0dmVjMiByZWZyYWN0aW9uQ29vcmRzID0gbmRjUG9zLnh5IC8gbmRjUG9zLnc7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyArPSAxLjA7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyAvPSAyLjA7XG5cdFx0dmVjMyB0cmFuc21pdHRlZExpZ2h0ID0gZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKHJlZnJhY3Rpb25Db29yZHMsIHBlcmNlcHR1YWxSb3VnaG5lc3MsIGlvcik7XG5cdFx0dmVjMyBhdHRlbnVhdGVkQ29sb3IgPSBhcHBseVZvbHVtZUF0dGVudWF0aW9uKHRyYW5zbWl0dGVkTGlnaHQsIGxlbmd0aCh0cmFuc21pc3Npb25SYXkpLCBhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlKTtcblx0XHRyZXR1cm4gKDEuMCAtIHNwZWN1bGFyQ29sb3IpICogYXR0ZW51YXRlZENvbG9yICogYmFzZUNvbG9yO1xuXHR9XG4jZW5kaWYiLHV2X3BhcnNfZnJhZ21lbnQ6IiNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKVxuXHR2YXJ5aW5nIHZlYzIgdlV2O1xuI2VuZGlmIix1dl9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9VVlxuXHQjaWZkZWYgVVZTX1ZFUlRFWF9PTkxZXG5cdFx0dmVjMiB2VXY7XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMyIHZVdjtcblx0I2VuZGlmXG5cdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbiNlbmRpZiIsdXZfdmVydGV4OiIjaWZkZWYgVVNFX1VWXG5cdHZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XG4jZW5kaWYiLHV2Ml9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLHV2Ml9wYXJzX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdGF0dHJpYnV0ZSB2ZWMyIHV2Mjtcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG5cdHVuaWZvcm0gbWF0MyB1djJUcmFuc2Zvcm07XG4jZW5kaWYiLHV2Ml92ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHR2VXYyID0gKCB1djJUcmFuc2Zvcm0gKiB2ZWMzKCB1djIsIDEgKSApLnh5O1xuI2VuZGlmIix3b3JsZHBvc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OIClcblx0dmVjNCB3b3JsZFBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHQjaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0XHR3b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xuXHQjZW5kaWZcblx0d29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogd29ybGRQb3NpdGlvbjtcbiNlbmRpZiIsYmFja2dyb3VuZF9mcmFnOiJ1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7XG52YXJ5aW5nIHZlYzIgdlV2O1xudm9pZCBtYWluKCkge1xuXHR2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKCB0MkQsIHZVdiApO1xuXHRnbF9GcmFnQ29sb3IgPSBtYXBUZXhlbFRvTGluZWFyKCB0ZXhDb2xvciApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG59IixiYWNrZ3JvdW5kX3ZlcnQ6InZhcnlpbmcgdmVjMiB2VXY7XG51bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XG52b2lkIG1haW4oKSB7XG5cdHZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XG5cdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24ueHksIDEuMCwgMS4wICk7XG59IixjdWJlX2ZyYWc6IiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0dmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gZW52Q29sb3I7XG5cdGdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9zaXRpb24ueiA9IGdsX1Bvc2l0aW9uLnc7XG59IixkZXB0aF9mcmFnOiIjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXG5cdHVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxudmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7XG5cdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0XHRkaWZmdXNlQ29sb3IuYSA9IG9wYWNpdHk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0ZmxvYXQgZnJhZ0Nvb3JkWiA9IDAuNSAqIHZIaWdoUHJlY2lzaW9uWldbMF0gLyB2SGlnaFByZWNpc2lvblpXWzFdICsgMC41O1xuXHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXG5cdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZnJhZ0Nvb3JkWiApLCBvcGFjaXR5ICk7XG5cdCNlbGlmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMVxuXHRcdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZnJhZ0Nvb3JkWiApO1xuXHQjZW5kaWZcbn0iLGRlcHRoX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dkhpZ2hQcmVjaXNpb25aVyA9IGdsX1Bvc2l0aW9uLnp3O1xufSIsZGlzdGFuY2VSR0JBX2ZyYWc6IiNkZWZpbmUgRElTVEFOQ0VcbnVuaWZvcm0gdmVjMyByZWZlcmVuY2VQb3NpdGlvbjtcbnVuaWZvcm0gZmxvYXQgbmVhckRpc3RhbmNlO1xudW5pZm9ybSBmbG9hdCBmYXJEaXN0YW5jZTtcbnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4gKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdGZsb2F0IGRpc3QgPSBsZW5ndGgoIHZXb3JsZFBvc2l0aW9uIC0gcmVmZXJlbmNlUG9zaXRpb24gKTtcblx0ZGlzdCA9ICggZGlzdCAtIG5lYXJEaXN0YW5jZSApIC8gKCBmYXJEaXN0YW5jZSAtIG5lYXJEaXN0YW5jZSApO1xuXHRkaXN0ID0gc2F0dXJhdGUoIGRpc3QgKTtcblx0Z2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBkaXN0ICk7XG59IixkaXN0YW5jZVJHQkFfdmVydDoiI2RlZmluZSBESVNUQU5DRVxudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcbn0iLGVxdWlyZWN0X2ZyYWc6InVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDtcbnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cdHZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTtcblx0dmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApO1xuXHRnbF9GcmFnQ29sb3IgPSBtYXBUZXhlbFRvTGluZWFyKCB0ZXhDb2xvciApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG59IixlcXVpcmVjdF92ZXJ0OiJ2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxufSIsbGluZWRhc2hlZF9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgZGFzaFNpemU7XG51bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTtcbnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHRpZiAoIG1vZCggdkxpbmVEaXN0YW5jZSwgdG90YWxTaXplICkgPiBkYXNoU2l6ZSApIHtcblx0XHRkaXNjYXJkO1xuXHR9XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxufSIsbGluZWRhc2hlZF92ZXJ0OiJ1bmlmb3JtIGZsb2F0IHNjYWxlO1xuYXR0cmlidXRlIGZsb2F0IGxpbmVEaXN0YW5jZTtcbnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0dkxpbmVEaXN0YW5jZSA9IHNjYWxlICogbGluZURpc3RhbmNlO1xuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hiYXNpY19mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFxuXHRcdHZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcFRleGVsVG9MaW5lYXIoIGxpZ2h0TWFwVGV4ZWwgKS5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNoYmFzaWNfdmVydDoiI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HIClcblx0XHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaGxhbWJlcnRfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG52YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuXHR2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjaztcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZJbmRpcmVjdEZyb250IDogdkluZGlyZWN0QmFjaztcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdkluZGlyZWN0RnJvbnQ7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8bGlnaHRtYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0RpZmZ1c2VfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApO1xuXHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjaztcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2hsYW1iZXJ0X3ZlcnQ6IiNkZWZpbmUgTEFNQkVSVFxudmFyeWluZyB2ZWMzIHZMaWdodEZyb250O1xudmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250O1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjaztcblx0dmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGxpZ2h0c19sYW1iZXJ0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaG1hdGNhcF9mcmFnOiIjZGVmaW5lIE1BVENBUFxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG51bmlmb3JtIHNhbXBsZXIyRCBtYXRjYXA7XG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcblx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdHZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xuXHR2ZWMzIHggPSBub3JtYWxpemUoIHZlYzMoIHZpZXdEaXIueiwgMC4wLCAtIHZpZXdEaXIueCApICk7XG5cdHZlYzMgeSA9IGNyb3NzKCB2aWV3RGlyLCB4ICk7XG5cdHZlYzIgdXYgPSB2ZWMyKCBkb3QoIHgsIG5vcm1hbCApLCBkb3QoIHksIG5vcm1hbCApICkgKiAwLjQ5NSArIDAuNTtcblx0I2lmZGVmIFVTRV9NQVRDQVBcblx0XHR2ZWM0IG1hdGNhcENvbG9yID0gdGV4dHVyZTJEKCBtYXRjYXAsIHV2ICk7XG5cdFx0bWF0Y2FwQ29sb3IgPSBtYXRjYXBUZXhlbFRvTGluZWFyKCBtYXRjYXBDb2xvciApO1xuXHQjZWxzZVxuXHRcdHZlYzQgbWF0Y2FwQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2VuZGlmXG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2IgKiBtYXRjYXBDb2xvci5yZ2I7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNobWF0Y2FwX3ZlcnQ6IiNkZWZpbmUgTUFUQ0FQXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcblx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaWZuZGVmIEZMQVRfU0hBREVEXG5cdFx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcblx0XHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHRcdHZUYW5nZW50ID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZFRhbmdlbnQgKTtcblx0XHRcdHZCaXRhbmdlbnQgPSBub3JtYWxpemUoIGNyb3NzKCB2Tm9ybWFsLCB2VGFuZ2VudCApICogdGFuZ2VudC53ICk7XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xufSIsbWVzaHRvb25fZnJhZzoiI2RlZmluZSBUT09OXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c190b29uX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNodG9vbl92ZXJ0OiIjZGVmaW5lIFRPT05cbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixtZXNocGhvbmdfZnJhZzoiI2RlZmluZSBQSE9OR1xudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIHZlYzMgc3BlY3VsYXI7XG51bmlmb3JtIGZsb2F0IHNoaW5pbmVzcztcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3Bob25nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNocGhvbmdfdmVydDoiI2RlZmluZSBQSE9OR1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaHBoeXNpY2FsX2ZyYWc6IiNkZWZpbmUgU1RBTkRBUkRcbiNpZmRlZiBQSFlTSUNBTFxuXHQjZGVmaW5lIFJFRkxFQ1RJVklUWVxuXHQjZGVmaW5lIENMRUFSQ09BVFxuXHQjZGVmaW5lIFNQRUNVTEFSXG4jZW5kaWZcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3M7XG51bmlmb3JtIGZsb2F0IG1ldGFsbmVzcztcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uO1xuXHR1bmlmb3JtIGZsb2F0IHRoaWNrbmVzcztcblx0dW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHR1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25UaW50O1xuI2VuZGlmXG4jaWZkZWYgUkVGTEVDVElWSVRZXG5cdHVuaWZvcm0gZmxvYXQgcmVmbGVjdGl2aXR5O1xuI2VuZGlmXG4jaWZkZWYgU1BFQ1VMQVJcblx0dW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTtcblx0dW5pZm9ybSB2ZWMzIHNwZWN1bGFyVGludDtcblx0I2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFySW50ZW5zaXR5TWFwO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9TUEVDVUxBUlRJTlRNQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhclRpbnRNYXA7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaWZkZWYgQ0xFQVJDT0FUXG5cdHVuaWZvcm0gZmxvYXQgY2xlYXJjb2F0O1xuXHR1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzcztcbiNlbmRpZlxuI2lmZGVmIFVTRV9TSEVFTlxuXHR1bmlmb3JtIHZlYzMgc2hlZW47XG4jZW5kaWZcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsZWFyY29hdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cm91Z2huZXNzbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWV0YWxuZXNzbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyB0b3RhbERpZmZ1c2UgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlO1xuXHR2ZWMzIHRvdGFsU3BlY3VsYXIgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXI7XG5cdCNpbmNsdWRlIDx0cmFuc21pc3Npb25fZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHRvdGFsRGlmZnVzZSArIHRvdGFsU3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNocGh5c2ljYWxfdmVydDoiI2RlZmluZSBTVEFOREFSRFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuXHR2YXJ5aW5nIHZlYzQgdldvcmxkUG9zaXRpb247XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7XG5cdFx0dkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTtcblx0I2VuZGlmXG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuXHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb247XG4jZW5kaWZcbn0iLG5vcm1hbF9mcmFnOiIjZGVmaW5lIE5PUk1BTFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcblx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7XG59Iixub3JtYWxfdmVydDoiI2RlZmluZSBOT1JNQUxcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7XG5cdFx0dkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTtcblx0I2VuZGlmXG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbiNlbmRpZlxufSIscG9pbnRzX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxufSIscG9pbnRzX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9pbnRTaXplID0gc2l6ZTtcblx0I2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsc2hhZG93X2ZyYWc6InVuaWZvcm0gdmVjMyBjb2xvcjtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59IixzaGFkb3dfdmVydDoiI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixzcHJpdGVfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxufSIsc3ByaXRlX3ZlcnQ6InVuaWZvcm0gZmxvYXQgcm90YXRpb247XG51bmlmb3JtIHZlYzIgY2VudGVyO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHR2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblx0dmVjMiBzY2FsZTtcblx0c2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54LCBtb2RlbE1hdHJpeFsgMCBdLnksIG1vZGVsTWF0cml4WyAwIF0ueiApICk7XG5cdHNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueCwgbW9kZWxNYXRyaXhbIDEgXS55LCBtb2RlbE1hdHJpeFsgMSBdLnogKSApO1xuXHQjaWZuZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgc2NhbGUgKj0gLSBtdlBvc2l0aW9uLno7XG5cdCNlbmRpZlxuXHR2ZWMyIGFsaWduZWRQb3NpdGlvbiA9ICggcG9zaXRpb24ueHkgLSAoIGNlbnRlciAtIHZlYzIoIDAuNSApICkgKSAqIHNjYWxlO1xuXHR2ZWMyIHJvdGF0ZWRQb3NpdGlvbjtcblx0cm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xuXHRyb3RhdGVkUG9zaXRpb24ueSA9IHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54ICsgY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XG5cdG12UG9zaXRpb24ueHkgKz0gcm90YXRlZFBvc2l0aW9uO1xuXHRnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59In0sbDB0PXtjb21tb246e2RpZmZ1c2U6e3ZhbHVlOm5ldyAkUXQoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgZ0p0fSx1djJUcmFuc2Zvcm06e3ZhbHVlOm5ldyBnSnR9LGFscGhhTWFwOnt2YWx1ZTpudWxsfX0sc3BlY3VsYXJtYXA6e3NwZWN1bGFyTWFwOnt2YWx1ZTpudWxsfX0sZW52bWFwOntlbnZNYXA6e3ZhbHVlOm51bGx9LGZsaXBFbnZNYXA6e3ZhbHVlOi0xfSxyZWZsZWN0aXZpdHk6e3ZhbHVlOjF9LHJlZnJhY3Rpb25SYXRpbzp7dmFsdWU6Ljk4fSxtYXhNaXBMZXZlbDp7dmFsdWU6MH19LGFvbWFwOnthb01hcDp7dmFsdWU6bnVsbH0sYW9NYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxsaWdodG1hcDp7bGlnaHRNYXA6e3ZhbHVlOm51bGx9LGxpZ2h0TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sZW1pc3NpdmVtYXA6e2VtaXNzaXZlTWFwOnt2YWx1ZTpudWxsfX0sYnVtcG1hcDp7YnVtcE1hcDp7dmFsdWU6bnVsbH0sYnVtcFNjYWxlOnt2YWx1ZToxfX0sbm9ybWFsbWFwOntub3JtYWxNYXA6e3ZhbHVlOm51bGx9LG5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgbUp0KDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgJFF0KDE2Nzc3MjE1KX19LGxpZ2h0czp7YW1iaWVudExpZ2h0Q29sb3I6e3ZhbHVlOltdfSxsaWdodFByb2JlOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxjb2xvcjp7fX19LGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntzaGFkb3dCaWFzOnt9LHNoYWRvd05vcm1hbEJpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxkaXJlY3Rpb25hbFNoYWRvd01hcDp7dmFsdWU6W119LGRpcmVjdGlvbmFsU2hhZG93TWF0cml4Ont2YWx1ZTpbXX0sc3BvdExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGlyZWN0aW9uOnt9LGRpc3RhbmNlOnt9LGNvbmVDb3M6e30scGVudW1icmFDb3M6e30sZGVjYXk6e319fSxzcG90TGlnaHRTaGFkb3dzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntzaGFkb3dCaWFzOnt9LHNoYWRvd05vcm1hbEJpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxzcG90U2hhZG93TWFwOnt2YWx1ZTpbXX0sc3BvdFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHBvaW50TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkZWNheTp7fSxkaXN0YW5jZTp7fX19LHBvaW50TGlnaHRTaGFkb3dzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntzaGFkb3dCaWFzOnt9LHNoYWRvd05vcm1hbEJpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e30sc2hhZG93Q2FtZXJhTmVhcjp7fSxzaGFkb3dDYW1lcmFGYXI6e319fSxwb2ludFNoYWRvd01hcDp7dmFsdWU6W119LHBvaW50U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0saGVtaXNwaGVyZUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LHNreUNvbG9yOnt9LGdyb3VuZENvbG9yOnt9fX0scmVjdEFyZWFMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LHdpZHRoOnt9LGhlaWdodDp7fX19LGx0Y18xOnt2YWx1ZTpudWxsfSxsdGNfMjp7dmFsdWU6bnVsbH19LHBvaW50czp7ZGlmZnVzZTp7dmFsdWU6bmV3ICRRdCgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LHNpemU6e3ZhbHVlOjF9LHNjYWxlOnt2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGdKdH19LHNwcml0ZTp7ZGlmZnVzZTp7dmFsdWU6bmV3ICRRdCgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LGNlbnRlcjp7dmFsdWU6bmV3IG1KdCguNSwuNSl9LHJvdGF0aW9uOnt2YWx1ZTowfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGdKdH19fSxjMHQ9e2Jhc2ljOnt1bmlmb3JtczpVMXQoW2wwdC5jb21tb24sbDB0LnNwZWN1bGFybWFwLGwwdC5lbnZtYXAsbDB0LmFvbWFwLGwwdC5saWdodG1hcCxsMHQuZm9nXSksdmVydGV4U2hhZGVyOnMwdC5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpzMHQubWVzaGJhc2ljX2ZyYWd9LGxhbWJlcnQ6e3VuaWZvcm1zOlUxdChbbDB0LmNvbW1vbixsMHQuc3BlY3VsYXJtYXAsbDB0LmVudm1hcCxsMHQuYW9tYXAsbDB0LmxpZ2h0bWFwLGwwdC5lbWlzc2l2ZW1hcCxsMHQuZm9nLGwwdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgJFF0KDApfX1dKSx2ZXJ0ZXhTaGFkZXI6czB0Lm1lc2hsYW1iZXJ0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6czB0Lm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3JtczpVMXQoW2wwdC5jb21tb24sbDB0LnNwZWN1bGFybWFwLGwwdC5lbnZtYXAsbDB0LmFvbWFwLGwwdC5saWdodG1hcCxsMHQuZW1pc3NpdmVtYXAsbDB0LmJ1bXBtYXAsbDB0Lm5vcm1hbG1hcCxsMHQuZGlzcGxhY2VtZW50bWFwLGwwdC5mb2csbDB0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyAkUXQoMCl9LHNwZWN1bGFyOnt2YWx1ZTpuZXcgJFF0KDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6czB0Lm1lc2hwaG9uZ192ZXJ0LGZyYWdtZW50U2hhZGVyOnMwdC5tZXNocGhvbmdfZnJhZ30sc3RhbmRhcmQ6e3VuaWZvcm1zOlUxdChbbDB0LmNvbW1vbixsMHQuZW52bWFwLGwwdC5hb21hcCxsMHQubGlnaHRtYXAsbDB0LmVtaXNzaXZlbWFwLGwwdC5idW1wbWFwLGwwdC5ub3JtYWxtYXAsbDB0LmRpc3BsYWNlbWVudG1hcCxsMHQucm91Z2huZXNzbWFwLGwwdC5tZXRhbG5lc3NtYXAsbDB0LmZvZyxsMHQubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3ICRRdCgwKX0scm91Z2huZXNzOnt2YWx1ZToxfSxtZXRhbG5lc3M6e3ZhbHVlOjB9LGVudk1hcEludGVuc2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOnMwdC5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpzMHQubWVzaHBoeXNpY2FsX2ZyYWd9LHRvb246e3VuaWZvcm1zOlUxdChbbDB0LmNvbW1vbixsMHQuYW9tYXAsbDB0LmxpZ2h0bWFwLGwwdC5lbWlzc2l2ZW1hcCxsMHQuYnVtcG1hcCxsMHQubm9ybWFsbWFwLGwwdC5kaXNwbGFjZW1lbnRtYXAsbDB0LmdyYWRpZW50bWFwLGwwdC5mb2csbDB0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyAkUXQoMCl9fV0pLHZlcnRleFNoYWRlcjpzMHQubWVzaHRvb25fdmVydCxmcmFnbWVudFNoYWRlcjpzMHQubWVzaHRvb25fZnJhZ30sbWF0Y2FwOnt1bmlmb3JtczpVMXQoW2wwdC5jb21tb24sbDB0LmJ1bXBtYXAsbDB0Lm5vcm1hbG1hcCxsMHQuZGlzcGxhY2VtZW50bWFwLGwwdC5mb2cse21hdGNhcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOnMwdC5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6czB0Lm1lc2htYXRjYXBfZnJhZ30scG9pbnRzOnt1bmlmb3JtczpVMXQoW2wwdC5wb2ludHMsbDB0LmZvZ10pLHZlcnRleFNoYWRlcjpzMHQucG9pbnRzX3ZlcnQsZnJhZ21lbnRTaGFkZXI6czB0LnBvaW50c19mcmFnfSxkYXNoZWQ6e3VuaWZvcm1zOlUxdChbbDB0LmNvbW1vbixsMHQuZm9nLHtzY2FsZTp7dmFsdWU6MX0sZGFzaFNpemU6e3ZhbHVlOjF9LHRvdGFsU2l6ZTp7dmFsdWU6Mn19XSksdmVydGV4U2hhZGVyOnMwdC5saW5lZGFzaGVkX3ZlcnQsZnJhZ21lbnRTaGFkZXI6czB0LmxpbmVkYXNoZWRfZnJhZ30sZGVwdGg6e3VuaWZvcm1zOlUxdChbbDB0LmNvbW1vbixsMHQuZGlzcGxhY2VtZW50bWFwXSksdmVydGV4U2hhZGVyOnMwdC5kZXB0aF92ZXJ0LGZyYWdtZW50U2hhZGVyOnMwdC5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOlUxdChbbDB0LmNvbW1vbixsMHQuYnVtcG1hcCxsMHQubm9ybWFsbWFwLGwwdC5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpzMHQubm9ybWFsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6czB0Lm5vcm1hbF9mcmFnfSxzcHJpdGU6e3VuaWZvcm1zOlUxdChbbDB0LnNwcml0ZSxsMHQuZm9nXSksdmVydGV4U2hhZGVyOnMwdC5zcHJpdGVfdmVydCxmcmFnbWVudFNoYWRlcjpzMHQuc3ByaXRlX2ZyYWd9LGJhY2tncm91bmQ6e3VuaWZvcm1zOnt1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGdKdH0sdDJEOnt2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOnMwdC5iYWNrZ3JvdW5kX3ZlcnQsZnJhZ21lbnRTaGFkZXI6czB0LmJhY2tncm91bmRfZnJhZ30sY3ViZTp7dW5pZm9ybXM6VTF0KFtsMHQuZW52bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6czB0LmN1YmVfdmVydCxmcmFnbWVudFNoYWRlcjpzMHQuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpzMHQuZXF1aXJlY3RfdmVydCxmcmFnbWVudFNoYWRlcjpzMHQuZXF1aXJlY3RfZnJhZ30sZGlzdGFuY2VSR0JBOnt1bmlmb3JtczpVMXQoW2wwdC5jb21tb24sbDB0LmRpc3BsYWNlbWVudG1hcCx7cmVmZXJlbmNlUG9zaXRpb246e3ZhbHVlOm5ldyBDSnR9LG5lYXJEaXN0YW5jZTp7dmFsdWU6MX0sZmFyRGlzdGFuY2U6e3ZhbHVlOjFlM319XSksdmVydGV4U2hhZGVyOnMwdC5kaXN0YW5jZVJHQkFfdmVydCxmcmFnbWVudFNoYWRlcjpzMHQuZGlzdGFuY2VSR0JBX2ZyYWd9LHNoYWRvdzp7dW5pZm9ybXM6VTF0KFtsMHQubGlnaHRzLGwwdC5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgJFF0KDApfSxvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6czB0LnNoYWRvd192ZXJ0LGZyYWdtZW50U2hhZGVyOnMwdC5zaGFkb3dfZnJhZ319O2Z1bmN0aW9uIHUwdCh0LGUsbixpLHIpe2NvbnN0IG89bmV3ICRRdCgwKTtsZXQgYSxzLGw9MCxjPW51bGwsdT0wLGg9bnVsbDtmdW5jdGlvbiBkKHQsZSl7bi5idWZmZXJzLmNvbG9yLnNldENsZWFyKHQucix0LmcsdC5iLGUscil9cmV0dXJue2dldENsZWFyQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gb30sc2V0Q2xlYXJDb2xvcjpmdW5jdGlvbih0LGU9MSl7by5zZXQodCksbD1lLGQobyxsKX0sZ2V0Q2xlYXJBbHBoYTpmdW5jdGlvbigpe3JldHVybiBsfSxzZXRDbGVhckFscGhhOmZ1bmN0aW9uKHQpe2w9dCxkKG8sbCl9LHJlbmRlcjpmdW5jdGlvbiBwKG4scil7bGV0IHA9ITEsZj0hMD09PXIuaXNTY2VuZT9yLmJhY2tncm91bmQ6bnVsbDtmJiZmLmlzVGV4dHVyZSYmKGY9ZS5nZXQoZikpO2NvbnN0IG09dC54cixnPW0uZ2V0U2Vzc2lvbiYmbS5nZXRTZXNzaW9uKCk7ZyYmImFkZGl0aXZlIj09PWcuZW52aXJvbm1lbnRCbGVuZE1vZGUmJihmPW51bGwpLG51bGw9PT1mP2QobyxsKTpmJiZmLmlzQ29sb3ImJihkKGYsMSkscD0hMCksKHQuYXV0b0NsZWFyfHxwKSYmdC5jbGVhcih0LmF1dG9DbGVhckNvbG9yLHQuYXV0b0NsZWFyRGVwdGgsdC5hdXRvQ2xlYXJTdGVuY2lsKSxmJiYoZi5pc0N1YmVUZXh0dXJlfHxmLm1hcHBpbmc9PT1ZS3QpPyh2b2lkIDA9PT1zJiYocz1uZXcgQjF0KG5ldyBGMXQoMSwxLDEpLG5ldyBHMXQoe25hbWU6IkJhY2tncm91bmRDdWJlTWF0ZXJpYWwiLHVuaWZvcm1zOlYxdChjMHQuY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmMwdC5jdWJlLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpjMHQuY3ViZS5mcmFnbWVudFNoYWRlcixzaWRlOjEsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLHMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxzLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgidXYiKSxzLm9uQmVmb3JlUmVuZGVyPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLm1hdHJpeFdvcmxkLmNvcHlQb3NpdGlvbihuLm1hdHJpeFdvcmxkKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHMubWF0ZXJpYWwsImVudk1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLmVudk1hcC52YWx1ZX19KSxpLnVwZGF0ZShzKSkscy5tYXRlcmlhbC51bmlmb3Jtcy5lbnZNYXAudmFsdWU9ZixzLm1hdGVyaWFsLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWU9Zi5pc0N1YmVUZXh0dXJlJiYhMT09PWYuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPy0xOjEsYz09PWYmJnU9PT1mLnZlcnNpb24mJmg9PT10LnRvbmVNYXBwaW5nfHwocy5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCxjPWYsdT1mLnZlcnNpb24saD10LnRvbmVNYXBwaW5nKSxuLnVuc2hpZnQocyxzLmdlb21ldHJ5LHMubWF0ZXJpYWwsMCwwLG51bGwpKTpmJiZmLmlzVGV4dHVyZSYmKHZvaWQgMD09PWEmJihhPW5ldyBCMXQobmV3IGEwdCgyLDIpLG5ldyBHMXQoe25hbWU6IkJhY2tncm91bmRNYXRlcmlhbCIsdW5pZm9ybXM6VjF0KGMwdC5iYWNrZ3JvdW5kLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6YzB0LmJhY2tncm91bmQudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmMwdC5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6MCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksYS5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLm1hdGVyaWFsLCJtYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy50MkQudmFsdWV9fSksaS51cGRhdGUoYSkpLGEubWF0ZXJpYWwudW5pZm9ybXMudDJELnZhbHVlPWYsITA9PT1mLm1hdHJpeEF1dG9VcGRhdGUmJmYudXBkYXRlTWF0cml4KCksYS5tYXRlcmlhbC51bmlmb3Jtcy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KGYubWF0cml4KSxjPT09ZiYmdT09PWYudmVyc2lvbiYmaD09PXQudG9uZU1hcHBpbmd8fChhLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLGM9Zix1PWYudmVyc2lvbixoPXQudG9uZU1hcHBpbmcpLG4udW5zaGlmdChhLGEuZ2VvbWV0cnksYS5tYXRlcmlhbCwwLDAsbnVsbCkpfX19ZnVuY3Rpb24gaDB0KHQsZSxuLGkpe2NvbnN0IHI9dC5nZXRQYXJhbWV0ZXIoMzQ5MjEpLG89aS5pc1dlYkdMMj9udWxsOmUuZ2V0KCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLGE9aS5pc1dlYkdMMnx8bnVsbCE9PW8scz17fSxsPWQobnVsbCk7bGV0IGM9bDtmdW5jdGlvbiB1KGUpe3JldHVybiBpLmlzV2ViR0wyP3QuYmluZFZlcnRleEFycmF5KGUpOm8uYmluZFZlcnRleEFycmF5T0VTKGUpfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGkuaXNXZWJHTDI/dC5kZWxldGVWZXJ0ZXhBcnJheShlKTpvLmRlbGV0ZVZlcnRleEFycmF5T0VTKGUpfWZ1bmN0aW9uIGQodCl7Y29uc3QgZT1bXSxuPVtdLGk9W107Zm9yKGxldCB0PTA7dDxyO3QrKyllW3RdPTAsblt0XT0wLGlbdF09MDtyZXR1cm57Z2VvbWV0cnk6bnVsbCxwcm9ncmFtOm51bGwsd2lyZWZyYW1lOiExLG5ld0F0dHJpYnV0ZXM6ZSxlbmFibGVkQXR0cmlidXRlczpuLGF0dHJpYnV0ZURpdmlzb3JzOmksb2JqZWN0OnQsYXR0cmlidXRlczp7fSxpbmRleDpudWxsfX1mdW5jdGlvbiBwKCl7Y29uc3QgdD1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXRbZV09MH1mdW5jdGlvbiBmKHQpe20odCwwKX1mdW5jdGlvbiBtKG4scil7Y29uc3Qgbz1jLmVuYWJsZWRBdHRyaWJ1dGVzLGE9Yy5hdHRyaWJ1dGVEaXZpc29ycztjLm5ld0F0dHJpYnV0ZXNbbl09MSwwPT09b1tuXSYmKHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobiksb1tuXT0xKSxhW25dIT09ciYmKChpLmlzV2ViR0wyP3Q6ZS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlbaS5pc1dlYkdMMj8idmVydGV4QXR0cmliRGl2aXNvciI6InZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSJdKG4sciksYVtuXT1yKX1mdW5jdGlvbiBnKCl7Y29uc3QgZT1jLm5ld0F0dHJpYnV0ZXMsbj1jLmVuYWJsZWRBdHRyaWJ1dGVzO2ZvcihsZXQgaT0wLHI9bi5sZW5ndGg7aTxyO2krKyluW2ldIT09ZVtpXSYmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpLG5baV09MCl9ZnVuY3Rpb24gXyhlLG4scixvLGEscyl7ITAhPT1pLmlzV2ViR0wyfHw1MTI0IT09ciYmNTEyNSE9PXI/dC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUsbixyLG8sYSxzKTp0LnZlcnRleEF0dHJpYklQb2ludGVyKGUsbixyLGEscyl9ZnVuY3Rpb24geSgpe3YoKSxjIT09bCYmKGM9bCx1KGMub2JqZWN0KSl9ZnVuY3Rpb24gdigpe2wuZ2VvbWV0cnk9bnVsbCxsLnByb2dyYW09bnVsbCxsLndpcmVmcmFtZT0hMX1yZXR1cm57c2V0dXA6ZnVuY3Rpb24gYihyLGwsaCx5LHYpe2xldCBiPSExO2lmKGEpe2NvbnN0IGU9KGZ1bmN0aW9uIHgoZSxuLHIpe2NvbnN0IGE9ITA9PT1yLndpcmVmcmFtZTtsZXQgbD1zW2UuaWRdO3ZvaWQgMD09PWwmJihsPXt9LHNbZS5pZF09bCk7bGV0IGM9bFtuLmlkXTt2b2lkIDA9PT1jJiYoYz17fSxsW24uaWRdPWMpO2xldCB1PWNbYV07cmV0dXJuIHZvaWQgMD09PXUmJih1PWQoKGZ1bmN0aW9uIGgoKXtyZXR1cm4gaS5pc1dlYkdMMj90LmNyZWF0ZVZlcnRleEFycmF5KCk6by5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpfSkoKSksY1thXT11KSx1fSkoeSxoLGwpO2MhPT1lJiYoYz1lLHUoYy5vYmplY3QpKSxiPShmdW5jdGlvbiB3KHQsZSl7Y29uc3Qgbj1jLmF0dHJpYnV0ZXMsaT10LmF0dHJpYnV0ZXM7bGV0IHI9MDtmb3IoY29uc3QgdCBpbiBpKXtjb25zdCBlPW5bdF0sbz1pW3RdO2lmKHZvaWQgMD09PWUpcmV0dXJuITA7aWYoZS5hdHRyaWJ1dGUhPT1vKXJldHVybiEwO2lmKGUuZGF0YSE9PW8uZGF0YSlyZXR1cm4hMDtyKyt9cmV0dXJuIGMuYXR0cmlidXRlc051bSE9PXJ8fGMuaW5kZXghPT1lfSkoeSx2KSxiJiYoZnVuY3Rpb24gUyh0LGUpe2NvbnN0IG49e30saT10LmF0dHJpYnV0ZXM7bGV0IHI9MDtmb3IoY29uc3QgdCBpbiBpKXtjb25zdCBlPWlbdF0sbz17fTtvLmF0dHJpYnV0ZT1lLGUuZGF0YSYmKG8uZGF0YT1lLmRhdGEpLG5bdF09byxyKyt9Yy5hdHRyaWJ1dGVzPW4sYy5hdHRyaWJ1dGVzTnVtPXIsYy5pbmRleD1lfSkoeSx2KX1lbHNle2NvbnN0IHQ9ITA9PT1sLndpcmVmcmFtZTtjLmdlb21ldHJ5PT09eS5pZCYmYy5wcm9ncmFtPT09aC5pZCYmYy53aXJlZnJhbWU9PT10fHwoYy5nZW9tZXRyeT15LmlkLGMucHJvZ3JhbT1oLmlkLGMud2lyZWZyYW1lPXQsYj0hMCl9ITA9PT1yLmlzSW5zdGFuY2VkTWVzaCYmKGI9ITApLG51bGwhPT12JiZuLnVwZGF0ZSh2LDM0OTYzKSxiJiYoKGZ1bmN0aW9uIE0ocixvLGEscyl7aWYoITE9PT1pLmlzV2ViR0wyJiYoci5pc0luc3RhbmNlZE1lc2h8fHMuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSkmJm51bGw9PT1lLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKXJldHVybjtwKCk7Y29uc3QgbD1zLmF0dHJpYnV0ZXMsYz1hLmdldEF0dHJpYnV0ZXMoKSx1PW8uZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztmb3IoY29uc3QgZSBpbiBjKXtjb25zdCBpPWNbZV07aWYoaT49MCl7Y29uc3Qgbz1sW2VdO2lmKHZvaWQgMCE9PW8pe2NvbnN0IGU9by5ub3JtYWxpemVkLHI9by5pdGVtU2l6ZSxhPW4uZ2V0KG8pO2lmKHZvaWQgMD09PWEpY29udGludWU7Y29uc3QgbD1hLmJ1ZmZlcixjPWEudHlwZSx1PWEuYnl0ZXNQZXJFbGVtZW50O2lmKG8uaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7Y29uc3Qgbj1vLmRhdGEsYT1uLnN0cmlkZSxoPW8ub2Zmc2V0O24mJm4uaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj8obShpLG4ubWVzaFBlckF0dHJpYnV0ZSksdm9pZCAwPT09cy5fbWF4SW5zdGFuY2VDb3VudCYmKHMuX21heEluc3RhbmNlQ291bnQ9bi5tZXNoUGVyQXR0cmlidXRlKm4uY291bnQpKTpmKGkpLHQuYmluZEJ1ZmZlcigzNDk2MixsKSxfKGkscixjLGUsYSp1LGgqdSl9ZWxzZSBvLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPyhtKGksby5tZXNoUGVyQXR0cmlidXRlKSx2b2lkIDA9PT1zLl9tYXhJbnN0YW5jZUNvdW50JiYocy5fbWF4SW5zdGFuY2VDb3VudD1vLm1lc2hQZXJBdHRyaWJ1dGUqby5jb3VudCkpOmYoaSksdC5iaW5kQnVmZmVyKDM0OTYyLGwpLF8oaSxyLGMsZSwwLDApfWVsc2UgaWYoImluc3RhbmNlTWF0cml4Ij09PWUpe2NvbnN0IGU9bi5nZXQoci5pbnN0YW5jZU1hdHJpeCk7aWYodm9pZCAwPT09ZSljb250aW51ZTtjb25zdCBvPWUuYnVmZmVyLGE9ZS50eXBlO20oaSswLDEpLG0oaSsxLDEpLG0oaSsyLDEpLG0oaSszLDEpLHQuYmluZEJ1ZmZlcigzNDk2MixvKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIoaSswLDQsYSwhMSw2NCwwKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIoaSsxLDQsYSwhMSw2NCwxNiksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkrMiw0LGEsITEsNjQsMzIpLHQudmVydGV4QXR0cmliUG9pbnRlcihpKzMsNCxhLCExLDY0LDQ4KX1lbHNlIGlmKCJpbnN0YW5jZUNvbG9yIj09PWUpe2NvbnN0IGU9bi5nZXQoci5pbnN0YW5jZUNvbG9yKTtpZih2b2lkIDA9PT1lKWNvbnRpbnVlO2NvbnN0IG89ZS5idWZmZXIsYT1lLnR5cGU7bShpLDEpLHQuYmluZEJ1ZmZlcigzNDk2MixvKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIoaSwzLGEsITEsMTIsMCl9ZWxzZSBpZih2b2lkIDAhPT11KXtjb25zdCBuPXVbZV07aWYodm9pZCAwIT09bilzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMjp0LnZlcnRleEF0dHJpYjJmdihpLG4pO2JyZWFrO2Nhc2UgMzp0LnZlcnRleEF0dHJpYjNmdihpLG4pO2JyZWFrO2Nhc2UgNDp0LnZlcnRleEF0dHJpYjRmdihpLG4pO2JyZWFrO2RlZmF1bHQ6dC52ZXJ0ZXhBdHRyaWIxZnYoaSxuKX19fX1nKCl9KShyLGwsaCx5KSxudWxsIT09diYmdC5iaW5kQnVmZmVyKDM0OTYzLG4uZ2V0KHYpLmJ1ZmZlcikpfSxyZXNldDp5LHJlc2V0RGVmYXVsdFN0YXRlOnYsZGlzcG9zZTpmdW5jdGlvbiB4KCl7eSgpO2Zvcihjb25zdCB0IGluIHMpe2NvbnN0IGU9c1t0XTtmb3IoY29uc3QgdCBpbiBlKXtjb25zdCBuPWVbdF07Zm9yKGNvbnN0IHQgaW4gbiloKG5bdF0ub2JqZWN0KSxkZWxldGUgblt0XTtkZWxldGUgZVt0XX1kZWxldGUgc1t0XX19LHJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5OmZ1bmN0aW9uIHcodCl7aWYodm9pZCAwPT09c1t0LmlkXSlyZXR1cm47Y29uc3QgZT1zW3QuaWRdO2Zvcihjb25zdCB0IGluIGUpe2NvbnN0IG49ZVt0XTtmb3IoY29uc3QgdCBpbiBuKWgoblt0XS5vYmplY3QpLGRlbGV0ZSBuW3RdO2RlbGV0ZSBlW3RdfWRlbGV0ZSBzW3QuaWRdfSxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOmZ1bmN0aW9uIFModCl7Zm9yKGNvbnN0IGUgaW4gcyl7Y29uc3Qgbj1zW2VdO2lmKHZvaWQgMD09PW5bdC5pZF0pY29udGludWU7Y29uc3QgaT1uW3QuaWRdO2Zvcihjb25zdCB0IGluIGkpaChpW3RdLm9iamVjdCksZGVsZXRlIGlbdF07ZGVsZXRlIG5bdC5pZF19fSxpbml0QXR0cmlidXRlczpwLGVuYWJsZUF0dHJpYnV0ZTpmLGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzOmd9fWZ1bmN0aW9uIGQwdCh0LGUsbixpKXtjb25zdCByPWkuaXNXZWJHTDI7bGV0IG87dGhpcy5zZXRNb2RlPWZ1bmN0aW9uIGEodCl7bz10fSx0aGlzLnJlbmRlcj1mdW5jdGlvbiBzKGUsaSl7dC5kcmF3QXJyYXlzKG8sZSxpKSxuLnVwZGF0ZShpLG8sMSl9LHRoaXMucmVuZGVySW5zdGFuY2VzPWZ1bmN0aW9uIGwoaSxhLHMpe2lmKDA9PT1zKXJldHVybjtsZXQgbCxjO2lmKHIpbD10LGM9ImRyYXdBcnJheXNJbnN0YW5jZWQiO2Vsc2UgaWYobD1lLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLGM9ImRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsbnVsbD09PWwpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7bFtjXShvLGksYSxzKSxuLnVwZGF0ZShhLG8scyl9fWZ1bmN0aW9uIHAwdCh0LGUsbil7bGV0IGk7ZnVuY3Rpb24gcihlKXtpZigiaGlnaHAiPT09ZSl7aWYodC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZ0LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjtlPSJtZWRpdW1wIn1yZXR1cm4ibWVkaXVtcCI9PT1lJiZ0LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJnQuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWNvbnN0IG89InVuZGVmaW5lZCIhPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0JiZ0IGluc3RhbmNlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dHx8InVuZGVmaW5lZCIhPXR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCYmdCBpbnN0YW5jZW9mIFdlYkdMMkNvbXB1dGVSZW5kZXJpbmdDb250ZXh0O2xldCBhPXZvaWQgMCE9PW4ucHJlY2lzaW9uP24ucHJlY2lzaW9uOiJoaWdocCI7Y29uc3Qgcz1yKGEpO3MhPT1hJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIsYSwibm90IHN1cHBvcnRlZCwgdXNpbmciLHMsImluc3RlYWQuIiksYT1zKTtjb25zdCBsPW98fGUuaGFzKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKSxjPSEwPT09bi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLHU9dC5nZXRQYXJhbWV0ZXIoMzQ5MzApLGg9dC5nZXRQYXJhbWV0ZXIoMzU2NjApLGQ9dC5nZXRQYXJhbWV0ZXIoMzM3OSkscD10LmdldFBhcmFtZXRlcigzNDA3NiksZj10LmdldFBhcmFtZXRlcigzNDkyMSksbT10LmdldFBhcmFtZXRlcigzNjM0NyksZz10LmdldFBhcmFtZXRlcigzNjM0OCksXz10LmdldFBhcmFtZXRlcigzNjM0OSkseT1oPjAsdj1vfHxlLmhhcygiT0VTX3RleHR1cmVfZmxvYXQiKTtyZXR1cm57aXNXZWJHTDI6byxkcmF3QnVmZmVyczpsLGdldE1heEFuaXNvdHJvcHk6ZnVuY3Rpb24gYigpe2lmKHZvaWQgMCE9PWkpcmV0dXJuIGk7aWYoITA9PT1lLmhhcygiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikpe2NvbnN0IG49ZS5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2k9dC5nZXRQYXJhbWV0ZXIobi5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpfWVsc2UgaT0wO3JldHVybiBpfSxnZXRNYXhQcmVjaXNpb246cixwcmVjaXNpb246YSxsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmMsbWF4VGV4dHVyZXM6dSxtYXhWZXJ0ZXhUZXh0dXJlczpoLG1heFRleHR1cmVTaXplOmQsbWF4Q3ViZW1hcFNpemU6cCxtYXhBdHRyaWJ1dGVzOmYsbWF4VmVydGV4VW5pZm9ybXM6bSxtYXhWYXJ5aW5nczpnLG1heEZyYWdtZW50VW5pZm9ybXM6Xyx2ZXJ0ZXhUZXh0dXJlczp5LGZsb2F0RnJhZ21lbnRUZXh0dXJlczp2LGZsb2F0VmVydGV4VGV4dHVyZXM6eSYmdixtYXhTYW1wbGVzOm8/dC5nZXRQYXJhbWV0ZXIoMzYxODMpOjB9fWZ1bmN0aW9uIGYwdCh0KXtjb25zdCBlPXRoaXM7bGV0IG49bnVsbCxpPTAscj0hMSxvPSExO2NvbnN0IGE9bmV3IHQwdCxzPW5ldyBnSnQsbD17dmFsdWU6bnVsbCxuZWVkc1VwZGF0ZTohMX07ZnVuY3Rpb24gYygpe2wudmFsdWUhPT1uJiYobC52YWx1ZT1uLGwubmVlZHNVcGRhdGU9aT4wKSxlLm51bVBsYW5lcz1pLGUubnVtSW50ZXJzZWN0aW9uPTB9ZnVuY3Rpb24gdSh0LG4saSxyKXtjb25zdCBvPW51bGwhPT10P3QubGVuZ3RoOjA7bGV0IGM9bnVsbDtpZigwIT09byl7aWYoYz1sLnZhbHVlLCEwIT09cnx8bnVsbD09PWMpe2NvbnN0IGU9aSs0Km8scj1uLm1hdHJpeFdvcmxkSW52ZXJzZTtzLmdldE5vcm1hbE1hdHJpeChyKSwobnVsbD09PWN8fGMubGVuZ3RoPGUpJiYoYz1uZXcgRmxvYXQzMkFycmF5KGUpKTtmb3IobGV0IGU9MCxuPWk7ZSE9PW87KytlLG4rPTQpYS5jb3B5KHRbZV0pLmFwcGx5TWF0cml4NChyLHMpLGEubm9ybWFsLnRvQXJyYXkoYyxuKSxjW24rM109YS5jb25zdGFudH1sLnZhbHVlPWMsbC5uZWVkc1VwZGF0ZT0hMH1yZXR1cm4gZS5udW1QbGFuZXM9byxlLm51bUludGVyc2VjdGlvbj0wLGN9dGhpcy51bmlmb3JtPWwsdGhpcy5udW1QbGFuZXM9MCx0aGlzLm51bUludGVyc2VjdGlvbj0wLHRoaXMuaW5pdD1mdW5jdGlvbih0LGUsbyl7Y29uc3QgYT0wIT09dC5sZW5ndGh8fGV8fDAhPT1pfHxyO3JldHVybiByPWUsbj11KHQsbywwKSxpPXQubGVuZ3RoLGF9LHRoaXMuYmVnaW5TaGFkb3dzPWZ1bmN0aW9uKCl7bz0hMCx1KG51bGwpfSx0aGlzLmVuZFNoYWRvd3M9ZnVuY3Rpb24oKXtvPSExLGMoKX0sdGhpcy5zZXRTdGF0ZT1mdW5jdGlvbihlLGEscyl7Y29uc3QgaD1lLmNsaXBwaW5nUGxhbmVzLGQ9ZS5jbGlwSW50ZXJzZWN0aW9uLHA9ZS5jbGlwU2hhZG93cyxmPXQuZ2V0KGUpO2lmKCFyfHxudWxsPT09aHx8MD09PWgubGVuZ3RofHxvJiYhcClvP3UobnVsbCk6YygpO2Vsc2V7Y29uc3QgdD1vPzA6aSxlPTQqdDtsZXQgcj1mLmNsaXBwaW5nU3RhdGV8fG51bGw7bC52YWx1ZT1yLHI9dShoLGEsZSxzKTtmb3IobGV0IHQ9MDt0IT09ZTsrK3Qpclt0XT1uW3RdO2YuY2xpcHBpbmdTdGF0ZT1yLHRoaXMubnVtSW50ZXJzZWN0aW9uPWQ/dGhpcy5udW1QbGFuZXM6MCx0aGlzLm51bVBsYW5lcys9dH19fWZ1bmN0aW9uIG0wdCh0KXtsZXQgZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGU9PT1XS3Q/dC5tYXBwaW5nPWpLdDplPT09cUt0JiYodC5tYXBwaW5nPUdLdCksdH1mdW5jdGlvbiBpKHQpe2NvbnN0IG49dC50YXJnZXQ7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixpKTtjb25zdCByPWUuZ2V0KG4pO3ZvaWQgMCE9PXImJihlLmRlbGV0ZShuKSxyLmRpc3Bvc2UoKSl9cmV0dXJue2dldDpmdW5jdGlvbiByKG8pe2lmKG8mJm8uaXNUZXh0dXJlJiYhMT09PW8uaXNSZW5kZXJUYXJnZXRUZXh0dXJlKXtjb25zdCByPW8ubWFwcGluZztpZihyPT09V0t0fHxyPT09cUt0KXtpZihlLmhhcyhvKSlyZXR1cm4gbihlLmdldChvKS50ZXh0dXJlLG8ubWFwcGluZyk7e2NvbnN0IHI9by5pbWFnZTtpZihyJiZyLmhlaWdodD4wKXtjb25zdCBhPXQuZ2V0UmVuZGVyVGFyZ2V0KCkscz1uZXcgSzF0KHIuaGVpZ2h0LzIpO3JldHVybiBzLmZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQsbyksZS5zZXQobyxzKSx0LnNldFJlbmRlclRhcmdldChhKSxvLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGkpLG4ocy50ZXh0dXJlLG8ubWFwcGluZyl9cmV0dXJuIG51bGx9fX1yZXR1cm4gb30sZGlzcG9zZTpmdW5jdGlvbiBvKCl7ZT1uZXcgV2Vha01hcH19fWMwdC5waHlzaWNhbD17dW5pZm9ybXM6VTF0KFtjMHQuc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBtSnQoMSwxKX0sY2xlYXJjb2F0Tm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxzaGVlbjp7dmFsdWU6bmV3ICRRdCgwKX0sdHJhbnNtaXNzaW9uOnt2YWx1ZTowfSx0cmFuc21pc3Npb25NYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOnt2YWx1ZTpuZXcgbUp0fSx0cmFuc21pc3Npb25TYW1wbGVyTWFwOnt2YWx1ZTpudWxsfSx0aGlja25lc3M6e3ZhbHVlOjB9LHRoaWNrbmVzc01hcDp7dmFsdWU6bnVsbH0sYXR0ZW51YXRpb25EaXN0YW5jZTp7dmFsdWU6MH0sYXR0ZW51YXRpb25UaW50Ont2YWx1ZTpuZXcgJFF0KDApfSxzcGVjdWxhckludGVuc2l0eTp7dmFsdWU6MH0sc3BlY3VsYXJJbnRlbnNpdHlNYXA6e3ZhbHVlOm51bGx9LHNwZWN1bGFyVGludDp7dmFsdWU6bmV3ICRRdCgxLDEsMSl9LHNwZWN1bGFyVGludE1hcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOnMwdC5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpzMHQubWVzaHBoeXNpY2FsX2ZyYWd9O2NsYXNzIGcwdCBleHRlbmRzIFcxdHtjb25zdHJ1Y3Rvcih0PS0xLGU9MSxuPTEsaT0tMSxyPS4xLG89MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iT3J0aG9ncmFwaGljQ2FtZXJhIix0aGlzLnpvb209MSx0aGlzLnZpZXc9bnVsbCx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PWUsdGhpcy50b3A9bix0aGlzLmJvdHRvbT1pLHRoaXMubmVhcj1yLHRoaXMuZmFyPW8sdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5sZWZ0PXQubGVmdCx0aGlzLnJpZ2h0PXQucmlnaHQsdGhpcy50b3A9dC50b3AsdGhpcy5ib3R0b209dC5ib3R0b20sdGhpcy5uZWFyPXQubmVhcix0aGlzLmZhcj10LmZhcix0aGlzLnpvb209dC56b29tLHRoaXMudmlldz1udWxsPT09dC52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXN9c2V0Vmlld09mZnNldCh0LGUsbixpLHIsbyl7bnVsbD09PXRoaXMudmlldyYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9bix0aGlzLnZpZXcub2Zmc2V0WT1pLHRoaXMudmlldy53aWR0aD1yLHRoaXMudmlldy5oZWlnaHQ9byx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtjb25zdCB0PSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvKDIqdGhpcy56b29tKSxlPSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvKDIqdGhpcy56b29tKSxuPSh0aGlzLnJpZ2h0K3RoaXMubGVmdCkvMixpPSh0aGlzLnRvcCt0aGlzLmJvdHRvbSkvMjtsZXQgcj1uLXQsbz1uK3QsYT1pK2Uscz1pLWU7aWYobnVsbCE9PXRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe2NvbnN0IHQ9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS90aGlzLnZpZXcuZnVsbFdpZHRoL3RoaXMuem9vbSxlPSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvdGhpcy52aWV3LmZ1bGxIZWlnaHQvdGhpcy56b29tO3IrPXQqdGhpcy52aWV3Lm9mZnNldFgsbz1yK3QqdGhpcy52aWV3LndpZHRoLGEtPWUqdGhpcy52aWV3Lm9mZnNldFkscz1hLWUqdGhpcy52aWV3LmhlaWdodH10aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZU9ydGhvZ3JhcGhpYyhyLG8sYSxzLHRoaXMubmVhcix0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2NvbnN0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC56b29tPXRoaXMuem9vbSxlLm9iamVjdC5sZWZ0PXRoaXMubGVmdCxlLm9iamVjdC5yaWdodD10aGlzLnJpZ2h0LGUub2JqZWN0LnRvcD10aGlzLnRvcCxlLm9iamVjdC5ib3R0b209dGhpcy5ib3R0b20sZS5vYmplY3QubmVhcj10aGlzLm5lYXIsZS5vYmplY3QuZmFyPXRoaXMuZmFyLG51bGwhPT10aGlzLnZpZXcmJihlLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksZX19ZzB0LnByb3RvdHlwZS5pc09ydGhvZ3JhcGhpY0NhbWVyYT0hMDtjbGFzcyBfMHQgZXh0ZW5kcyBHMXR7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy50eXBlPSJSYXdTaGFkZXJNYXRlcmlhbCJ9fV8wdC5wcm90b3R5cGUuaXNSYXdTaGFkZXJNYXRlcmlhbD0hMDtjb25zdCB5MHQ9TWF0aC5wb3coMiw4KSx2MHQ9Wy4xMjUsLjIxNSwuMzUsLjQ0NiwuNTI2LC41ODJdLGIwdD01K3YwdC5sZW5ndGgseDB0PXtbTlp0XTowLFtJWnRdOjEsW09adF06Mixbelp0XTozLFtEWnRdOjQsW0JadF06NSxbUlp0XTo2fSx3MHQ9bmV3IEtRdCh7c2lkZToxLGRlcHRoV3JpdGU6ITEsZGVwdGhUZXN0OiExfSksUzB0PW5ldyBCMXQobmV3IEYxdCx3MHQpLE0wdD1uZXcgZzB0LHtfbG9kUGxhbmVzOkUwdCxfc2l6ZUxvZHM6VDB0LF9zaWdtYXM6QzB0fT16MHQoKSxBMHQ9bmV3ICRRdDtsZXQgazB0PW51bGw7Y29uc3QgTDB0PSgxK01hdGguc3FydCg1KSkvMixQMHQ9MS9MMHQsTjB0PVtuZXcgQ0p0KDEsMSwxKSxuZXcgQ0p0KC0xLDEsMSksbmV3IENKdCgxLDEsLTEpLG5ldyBDSnQoLTEsMSwtMSksbmV3IENKdCgwLEwwdCxQMHQpLG5ldyBDSnQoMCxMMHQsLVAwdCksbmV3IENKdChQMHQsMCxMMHQpLG5ldyBDSnQoLVAwdCwwLEwwdCksbmV3IENKdChMMHQsUDB0LDApLG5ldyBDSnQoLUwwdCxQMHQsMCldO2Z1bmN0aW9uIEkwdCh0KXtjb25zdCBlPU1hdGgubWF4KHQucix0LmcsdC5iKSxuPU1hdGgubWluKE1hdGgubWF4KE1hdGguY2VpbChNYXRoLmxvZzIoZSkpLC0xMjgpLDEyNyk7cmV0dXJuIHQubXVsdGlwbHlTY2FsYXIoTWF0aC5wb3coMiwtbikpLChuKzEyOCkvMjU1fWNsYXNzIFIwdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0PW51bGwsdGhpcy5fYmx1ck1hdGVyaWFsPShmdW5jdGlvbiBlKHQpe2NvbnN0IGU9bmV3IEZsb2F0MzJBcnJheSh0KSxuPW5ldyBDSnQoMCwxLDApO3JldHVybiBuZXcgXzB0KHtuYW1lOiJTcGhlcmljYWxHYXVzc2lhbkJsdXIiLGRlZmluZXM6e246dH0sdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sc2FtcGxlczp7dmFsdWU6MX0sd2VpZ2h0czp7dmFsdWU6ZX0sbGF0aXR1ZGluYWw6e3ZhbHVlOiExfSxkVGhldGE6e3ZhbHVlOjB9LG1pcEludDp7dmFsdWU6MH0scG9sZUF4aXM6e3ZhbHVlOm59LGlucHV0RW5jb2Rpbmc6e3ZhbHVlOngwdFszZTNdfSxvdXRwdXRFbmNvZGluZzp7dmFsdWU6eDB0WzNlM119fSx2ZXJ0ZXhTaGFkZXI6IlxuXG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0YXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cdFx0YXR0cmlidXRlIHZlYzIgdXY7XG5cdFx0YXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDtcblxuXHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0Ly8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvblxuXHRcdHZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkge1xuXG5cdFx0XHR1diA9IDIuMCAqIHV2IC0gMS4wO1xuXG5cdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTtcblxuXHRcdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHpcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh5ICo9IC0xLjA7IC8vICggLXUsIC0xLCB2ICkgbmVnIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRpcmVjdGlvbjtcblxuXHRcdH1cblxuXHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0dk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApO1xuXHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG5cblx0XHR9XG5cdCIsZnJhZ21lbnRTaGFkZXI6IlxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0XHRcdHVuaWZvcm0gaW50IHNhbXBsZXM7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IHdlaWdodHNbIG4gXTtcblx0XHRcdHVuaWZvcm0gYm9vbCBsYXRpdHVkaW5hbDtcblx0XHRcdHVuaWZvcm0gZmxvYXQgZFRoZXRhO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBtaXBJbnQ7XG5cdFx0XHR1bmlmb3JtIHZlYzMgcG9sZUF4aXM7XG5cblx0XHRcdFxuXG5cdFx0dW5pZm9ybSBpbnQgaW5wdXRFbmNvZGluZztcblx0XHR1bmlmb3JtIGludCBvdXRwdXRFbmNvZGluZztcblxuXHRcdCNpbmNsdWRlIDxlbmNvZGluZ3NfcGFyc19mcmFnbWVudD5cblxuXHRcdHZlYzQgaW5wdXRUZXhlbFRvTGluZWFyKCB2ZWM0IHZhbHVlICkge1xuXG5cdFx0XHRpZiAoIGlucHV0RW5jb2RpbmcgPT0gMCApIHtcblxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gMSApIHtcblxuXHRcdFx0XHRyZXR1cm4gc1JHQlRvTGluZWFyKCB2YWx1ZSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDIgKSB7XG5cblx0XHRcdFx0cmV0dXJuIFJHQkVUb0xpbmVhciggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSAzICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JNVG9MaW5lYXIoIHZhbHVlLCA3LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSA0ICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JNVG9MaW5lYXIoIHZhbHVlLCAxNi4wICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gNSApIHtcblxuXHRcdFx0XHRyZXR1cm4gUkdCRFRvTGluZWFyKCB2YWx1ZSwgMjU2LjAgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRyZXR1cm4gR2FtbWFUb0xpbmVhciggdmFsdWUsIDIuMiApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHR2ZWM0IGxpbmVhclRvT3V0cHV0VGV4ZWwoIHZlYzQgdmFsdWUgKSB7XG5cblx0XHRcdGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMCApIHtcblxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDEgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvc1JHQiggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMiApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JFKCB2YWx1ZSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSAzICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb1JHQk0oIHZhbHVlLCA3LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gNCApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JNKCB2YWx1ZSwgMTYuMCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSA1ICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb1JHQkQoIHZhbHVlLCAyNTYuMCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb0dhbW1hKCB2YWx1ZSwgMi4yICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHZlYzQgZW52TWFwVGV4ZWxUb0xpbmVhciggdmVjNCBjb2xvciApIHtcblxuXHRcdFx0cmV0dXJuIGlucHV0VGV4ZWxUb0xpbmVhciggY29sb3IgKTtcblxuXHRcdH1cblx0XG5cblx0XHRcdCNkZWZpbmUgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHRcdFx0I2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cblxuXHRcdFx0dmVjMyBnZXRTYW1wbGUoIGZsb2F0IHRoZXRhLCB2ZWMzIGF4aXMgKSB7XG5cblx0XHRcdFx0ZmxvYXQgY29zVGhldGEgPSBjb3MoIHRoZXRhICk7XG5cdFx0XHRcdC8vIFJvZHJpZ3VlcycgYXhpcy1hbmdsZSByb3RhdGlvblxuXHRcdFx0XHR2ZWMzIHNhbXBsZURpcmVjdGlvbiA9IHZPdXRwdXREaXJlY3Rpb24gKiBjb3NUaGV0YVxuXHRcdFx0XHRcdCsgY3Jvc3MoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqIHNpbiggdGhldGEgKVxuXHRcdFx0XHRcdCsgYXhpcyAqIGRvdCggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogKCAxLjAgLSBjb3NUaGV0YSApO1xuXG5cdFx0XHRcdHJldHVybiBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXJlY3Rpb24sIG1pcEludCApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHR2ZWMzIGF4aXMgPSBsYXRpdHVkaW5hbCA/IHBvbGVBeGlzIDogY3Jvc3MoIHBvbGVBeGlzLCB2T3V0cHV0RGlyZWN0aW9uICk7XG5cblx0XHRcdFx0aWYgKCBhbGwoIGVxdWFsKCBheGlzLCB2ZWMzKCAwLjAgKSApICkgKSB7XG5cblx0XHRcdFx0XHRheGlzID0gdmVjMyggdk91dHB1dERpcmVjdGlvbi56LCAwLjAsIC0gdk91dHB1dERpcmVjdGlvbi54ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGF4aXMgPSBub3JtYWxpemUoIGF4aXMgKTtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyAwIF0gKiBnZXRTYW1wbGUoIDAuMCwgYXhpcyApO1xuXG5cdFx0XHRcdGZvciAoIGludCBpID0gMTsgaSA8IG47IGkrKyApIHtcblxuXHRcdFx0XHRcdGlmICggaSA+PSBzYW1wbGVzICkge1xuXG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZsb2F0IHRoZXRhID0gZFRoZXRhICogZmxvYXQoIGkgKTtcblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggLTEuMCAqIHRoZXRhLCBheGlzICk7XG5cdFx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIHRoZXRhLCBheGlzICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApO1xuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9KSgyMCksdGhpcy5fZXF1aXJlY3RTaGFkZXI9bnVsbCx0aGlzLl9jdWJlbWFwU2hhZGVyPW51bGwsdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2JsdXJNYXRlcmlhbCl9ZnJvbVNjZW5lKHQsZT0wLG49LjEsaT0xMDApe2swdD10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtjb25zdCByPXRoaXMuX2FsbG9jYXRlVGFyZ2V0cygpO3JldHVybiB0aGlzLl9zY2VuZVRvQ3ViZVVWKHQsbixpLHIpLGU+MCYmdGhpcy5fYmx1cihyLDAsMCxlKSx0aGlzLl9hcHBseVBNUkVNKHIpLHRoaXMuX2NsZWFudXAocikscn1mcm9tRXF1aXJlY3Rhbmd1bGFyKHQpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0KX1mcm9tQ3ViZW1hcCh0KXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCl9Y29tcGlsZUN1YmVtYXBTaGFkZXIoKXtudWxsPT09dGhpcy5fY3ViZW1hcFNoYWRlciYmKHRoaXMuX2N1YmVtYXBTaGFkZXI9RjB0KCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2N1YmVtYXBTaGFkZXIpKX1jb21waWxlRXF1aXJlY3Rhbmd1bGFyU2hhZGVyKCl7bnVsbD09PXRoaXMuX2VxdWlyZWN0U2hhZGVyJiYodGhpcy5fZXF1aXJlY3RTaGFkZXI9SDB0KCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2VxdWlyZWN0U2hhZGVyKSl9ZGlzcG9zZSgpe3RoaXMuX2JsdXJNYXRlcmlhbC5kaXNwb3NlKCksbnVsbCE9PXRoaXMuX2N1YmVtYXBTaGFkZXImJnRoaXMuX2N1YmVtYXBTaGFkZXIuZGlzcG9zZSgpLG51bGwhPT10aGlzLl9lcXVpcmVjdFNoYWRlciYmdGhpcy5fZXF1aXJlY3RTaGFkZXIuZGlzcG9zZSgpO2ZvcihsZXQgdD0wO3Q8RTB0Lmxlbmd0aDt0KyspRTB0W3RdLmRpc3Bvc2UoKX1fY2xlYW51cCh0KXt0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldC5kaXNwb3NlKCksdGhpcy5fcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGswdCksdC5zY2lzc29yVGVzdD0hMSxCMHQodCwwLDAsdC53aWR0aCx0LmhlaWdodCl9X2Zyb21UZXh0dXJlKHQpe2swdD10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtjb25zdCBlPXRoaXMuX2FsbG9jYXRlVGFyZ2V0cyh0KTtyZXR1cm4gdGhpcy5fdGV4dHVyZVRvQ3ViZVVWKHQsZSksdGhpcy5fYXBwbHlQTVJFTShlKSx0aGlzLl9jbGVhbnVwKGUpLGV9X2FsbG9jYXRlVGFyZ2V0cyh0KXtjb25zdCBlPXttYWdGaWx0ZXI6Skt0LG1pbkZpbHRlcjpKS3QsZ2VuZXJhdGVNaXBtYXBzOiExLHR5cGU6clp0LGZvcm1hdDoxMDIzLGVuY29kaW5nOk8wdCh0KT90LmVuY29kaW5nOk9adCxkZXB0aEJ1ZmZlcjohMX0sbj1EMHQoZSk7cmV0dXJuIG4uZGVwdGhCdWZmZXI9IXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9RDB0KGUpLG59X2NvbXBpbGVNYXRlcmlhbCh0KXtjb25zdCBlPW5ldyBCMXQoRTB0WzBdLHQpO3RoaXMuX3JlbmRlcmVyLmNvbXBpbGUoZSxNMHQpfV9zY2VuZVRvQ3ViZVVWKHQsZSxuLGkpe2NvbnN0IHI9bmV3IHExdCg5MCwxLGUsbiksbz1bMSwtMSwxLDEsMSwxXSxhPVsxLDEsMSwtMSwtMSwtMV0scz10aGlzLl9yZW5kZXJlcixsPXMuYXV0b0NsZWFyLGM9cy5vdXRwdXRFbmNvZGluZyx1PXMudG9uZU1hcHBpbmc7cy5nZXRDbGVhckNvbG9yKEEwdCkscy50b25lTWFwcGluZz0wLHMub3V0cHV0RW5jb2Rpbmc9Tlp0LHMuYXV0b0NsZWFyPSExO2xldCBoPSExO2NvbnN0IGQ9dC5iYWNrZ3JvdW5kO2lmKGQpe2lmKGQuaXNDb2xvcil7dzB0LmNvbG9yLmNvcHkoZCkuY29udmVydFNSR0JUb0xpbmVhcigpLHQuYmFja2dyb3VuZD1udWxsO2NvbnN0IGU9STB0KHcwdC5jb2xvcik7dzB0Lm9wYWNpdHk9ZSxoPSEwfX1lbHNle3cwdC5jb2xvci5jb3B5KEEwdCkuY29udmVydFNSR0JUb0xpbmVhcigpO2NvbnN0IHQ9STB0KHcwdC5jb2xvcik7dzB0Lm9wYWNpdHk9dCxoPSEwfWZvcihsZXQgZT0wO2U8NjtlKyspe2NvbnN0IG49ZSUzOzA9PW4/KHIudXAuc2V0KDAsb1tlXSwwKSxyLmxvb2tBdChhW2VdLDAsMCkpOjE9PW4/KHIudXAuc2V0KDAsMCxvW2VdKSxyLmxvb2tBdCgwLGFbZV0sMCkpOihyLnVwLnNldCgwLG9bZV0sMCksci5sb29rQXQoMCwwLGFbZV0pKSxCMHQoaSxuKnkwdCxlPjI/eTB0OjAseTB0LHkwdCkscy5zZXRSZW5kZXJUYXJnZXQoaSksaCYmcy5yZW5kZXIoUzB0LHIpLHMucmVuZGVyKHQscil9cy50b25lTWFwcGluZz11LHMub3V0cHV0RW5jb2Rpbmc9YyxzLmF1dG9DbGVhcj1sfV90ZXh0dXJlVG9DdWJlVVYodCxlKXtjb25zdCBuPXRoaXMuX3JlbmRlcmVyO3QuaXNDdWJlVGV4dHVyZT9udWxsPT10aGlzLl9jdWJlbWFwU2hhZGVyJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1GMHQoKSk6bnVsbD09dGhpcy5fZXF1aXJlY3RTaGFkZXImJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1IMHQoKSk7Y29uc3QgaT10LmlzQ3ViZVRleHR1cmU/dGhpcy5fY3ViZW1hcFNoYWRlcjp0aGlzLl9lcXVpcmVjdFNoYWRlcixyPW5ldyBCMXQoRTB0WzBdLGkpLG89aS51bmlmb3JtcztvLmVudk1hcC52YWx1ZT10LHQuaXNDdWJlVGV4dHVyZXx8by50ZXhlbFNpemUudmFsdWUuc2V0KDEvdC5pbWFnZS53aWR0aCwxL3QuaW1hZ2UuaGVpZ2h0KSxvLmlucHV0RW5jb2RpbmcudmFsdWU9eDB0W3QuZW5jb2RpbmddLG8ub3V0cHV0RW5jb2RpbmcudmFsdWU9eDB0W2UudGV4dHVyZS5lbmNvZGluZ10sQjB0KGUsMCwwLDMqeTB0LDIqeTB0KSxuLnNldFJlbmRlclRhcmdldChlKSxuLnJlbmRlcihyLE0wdCl9X2FwcGx5UE1SRU0odCl7Y29uc3QgZT10aGlzLl9yZW5kZXJlcixuPWUuYXV0b0NsZWFyO2UuYXV0b0NsZWFyPSExO2ZvcihsZXQgZT0xO2U8YjB0O2UrKyl7Y29uc3Qgbj1NYXRoLnNxcnQoQzB0W2VdKkMwdFtlXS1DMHRbZS0xXSpDMHRbZS0xXSk7dGhpcy5fYmx1cih0LGUtMSxlLG4sTjB0WyhlLTEpJU4wdC5sZW5ndGhdKX1lLmF1dG9DbGVhcj1ufV9ibHVyKHQsZSxuLGkscil7Y29uc3Qgbz10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LG8sZSxuLGksImxhdGl0dWRpbmFsIixyKSx0aGlzLl9oYWxmQmx1cihvLHQsbixuLGksImxvbmdpdHVkaW5hbCIscil9X2hhbGZCbHVyKHQsZSxuLGkscixvLGEpe2NvbnN0IHM9dGhpcy5fcmVuZGVyZXIsbD10aGlzLl9ibHVyTWF0ZXJpYWw7ImxhdGl0dWRpbmFsIiE9PW8mJiJsb25naXR1ZGluYWwiIT09byYmY29uc29sZS5lcnJvcigiYmx1ciBkaXJlY3Rpb24gbXVzdCBiZSBlaXRoZXIgbGF0aXR1ZGluYWwgb3IgbG9uZ2l0dWRpbmFsISIpO2NvbnN0IGM9bmV3IEIxdChFMHRbaV0sbCksdT1sLnVuaWZvcm1zLGg9VDB0W25dLTEsZD1pc0Zpbml0ZShyKT9NYXRoLlBJLygyKmgpOjIqTWF0aC5QSS8zOSxwPXIvZCxmPWlzRmluaXRlKHIpPzErTWF0aC5mbG9vcigzKnApOjIwO2Y+MjAmJmNvbnNvbGUud2Fybihgc2lnbWFSYWRpYW5zLCAke3J9LCBpcyB0b28gbGFyZ2UgYW5kIHdpbGwgY2xpcCwgYXMgaXQgcmVxdWVzdGVkICR7Zn0gc2FtcGxlcyB3aGVuIHRoZSBtYXhpbXVtIGlzIHNldCB0byAyMGApO2NvbnN0IG09W107bGV0IGc9MDtmb3IobGV0IHQ9MDt0PDIwOysrdCl7Y29uc3QgZT10L3Asbj1NYXRoLmV4cCgtZSplLzIpO20ucHVzaChuKSwwPT10P2crPW46dDxmJiYoZys9MipuKX1mb3IobGV0IHQ9MDt0PG0ubGVuZ3RoO3QrKyltW3RdPW1bdF0vZzt1LmVudk1hcC52YWx1ZT10LnRleHR1cmUsdS5zYW1wbGVzLnZhbHVlPWYsdS53ZWlnaHRzLnZhbHVlPW0sdS5sYXRpdHVkaW5hbC52YWx1ZT0ibGF0aXR1ZGluYWwiPT09byxhJiYodS5wb2xlQXhpcy52YWx1ZT1hKSx1LmRUaGV0YS52YWx1ZT1kLHUubWlwSW50LnZhbHVlPTgtbix1LmlucHV0RW5jb2RpbmcudmFsdWU9eDB0W3QudGV4dHVyZS5lbmNvZGluZ10sdS5vdXRwdXRFbmNvZGluZy52YWx1ZT14MHRbdC50ZXh0dXJlLmVuY29kaW5nXTtjb25zdCBfPVQwdFtpXTtCMHQoZSwzKk1hdGgubWF4KDAseTB0LTIqXyksKDA9PT1pPzA6Mip5MHQpKzIqXyooaT40P2ktOCs0OjApLDMqXywyKl8pLHMuc2V0UmVuZGVyVGFyZ2V0KGUpLHMucmVuZGVyKGMsTTB0KX19ZnVuY3Rpb24gTzB0KHQpe3JldHVybiB2b2lkIDAhPT10JiZ0LnR5cGU9PT1yWnQmJih0LmVuY29kaW5nPT09Tlp0fHx0LmVuY29kaW5nPT09SVp0fHx0LmVuY29kaW5nPT09Ulp0KX1mdW5jdGlvbiB6MHQoKXtjb25zdCB0PVtdLGU9W10sbj1bXTtsZXQgaT04O2ZvcihsZXQgcj0wO3I8YjB0O3IrKyl7Y29uc3Qgbz1NYXRoLnBvdygyLGkpO2UucHVzaChvKTtsZXQgYT0xL287cj40P2E9djB0W3ItOCs0LTFdOjA9PXImJihhPTApLG4ucHVzaChhKTtjb25zdCBzPTEvKG8tMSksbD0tcy8yLGM9MStzLzIsdT1bbCxsLGMsbCxjLGMsbCxsLGMsYyxsLGNdLGg9NixkPTYscD0zLGY9MixtPTEsZz1uZXcgRmxvYXQzMkFycmF5KHAqZCpoKSxfPW5ldyBGbG9hdDMyQXJyYXkoZipkKmgpLHk9bmV3IEZsb2F0MzJBcnJheShtKmQqaCk7Zm9yKGxldCB0PTA7dDxoO3QrKyl7Y29uc3QgZT10JTMqMi8zLTEsbj10PjI/MDotMTtnLnNldChbZSxuLDAsZSsyLzMsbiwwLGUrMi8zLG4rMSwwLGUsbiwwLGUrMi8zLG4rMSwwLGUsbisxLDBdLHAqZCp0KSxfLnNldCh1LGYqZCp0KSx5LnNldChbdCx0LHQsdCx0LHRdLG0qZCp0KX1jb25zdCB2PW5ldyBiMXQ7di5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgUVF0KGcscCkpLHYuc2V0QXR0cmlidXRlKCJ1diIsbmV3IFFRdChfLGYpKSx2LnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgUVF0KHksbSkpLHQucHVzaCh2KSxpPjQmJmktLX1yZXR1cm57X2xvZFBsYW5lczp0LF9zaXplTG9kczplLF9zaWdtYXM6bn19ZnVuY3Rpb24gRDB0KHQpe2NvbnN0IGU9bmV3IFNKdCgzKnkwdCwzKnkwdCx0KTtyZXR1cm4gZS50ZXh0dXJlLm1hcHBpbmc9WUt0LGUudGV4dHVyZS5uYW1lPSJQTVJFTS5jdWJlVXYiLGUuc2Npc3NvclRlc3Q9ITAsZX1mdW5jdGlvbiBCMHQodCxlLG4saSxyKXt0LnZpZXdwb3J0LnNldChlLG4saSxyKSx0LnNjaXNzb3Iuc2V0KGUsbixpLHIpfWZ1bmN0aW9uIEgwdCgpe2NvbnN0IHQ9bmV3IG1KdCgxLDEpO3JldHVybiBuZXcgXzB0KHtuYW1lOiJFcXVpcmVjdGFuZ3VsYXJUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sdGV4ZWxTaXplOnt2YWx1ZTp0fSxpbnB1dEVuY29kaW5nOnt2YWx1ZTp4MHRbM2UzXX0sb3V0cHV0RW5jb2Rpbmc6e3ZhbHVlOngwdFszZTNdfX0sdmVydGV4U2hhZGVyOiJcblxuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXHRcdGF0dHJpYnV0ZSB2ZWMyIHV2O1xuXHRcdGF0dHJpYnV0ZSBmbG9hdCBmYWNlSW5kZXg7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdC8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb25cblx0XHR2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcblxuXHRcdFx0dXYgPSAyLjAgKiB1diAtIDEuMDtcblxuXHRcdFx0dmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XG5cblx0XHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLXUsIDEsIC12ICkgcG9zIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC0xLCB2LCAtdSApIG5lZyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXJlY3Rpb247XG5cblx0XHR9XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXG5cdFx0fVxuXHQiLGZyYWdtZW50U2hhZGVyOiJcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdFx0XHR1bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xuXG5cdFx0XHRcblxuXHRcdHVuaWZvcm0gaW50IGlucHV0RW5jb2Rpbmc7XG5cdFx0dW5pZm9ybSBpbnQgb3V0cHV0RW5jb2Rpbmc7XG5cblx0XHQjaW5jbHVkZSA8ZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ+XG5cblx0XHR2ZWM0IGlucHV0VGV4ZWxUb0xpbmVhciggdmVjNCB2YWx1ZSApIHtcblxuXHRcdFx0aWYgKCBpbnB1dEVuY29kaW5nID09IDAgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDEgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHNSR0JUb0xpbmVhciggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSAyICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JFVG9MaW5lYXIoIHZhbHVlICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gMyApIHtcblxuXHRcdFx0XHRyZXR1cm4gUkdCTVRvTGluZWFyKCB2YWx1ZSwgNy4wICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gNCApIHtcblxuXHRcdFx0XHRyZXR1cm4gUkdCTVRvTGluZWFyKCB2YWx1ZSwgMTYuMCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDUgKSB7XG5cblx0XHRcdFx0cmV0dXJuIFJHQkRUb0xpbmVhciggdmFsdWUsIDI1Ni4wICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0cmV0dXJuIEdhbW1hVG9MaW5lYXIoIHZhbHVlLCAyLjIgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0dmVjNCBsaW5lYXJUb091dHB1dFRleGVsKCB2ZWM0IHZhbHVlICkge1xuXG5cdFx0XHRpZiAoIG91dHB1dEVuY29kaW5nID09IDAgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSAxICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb3NSR0IoIHZhbHVlICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDIgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvUkdCRSggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMyApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JNKCB2YWx1ZSwgNy4wICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvUkdCTSggdmFsdWUsIDE2LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gNSApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JEKCB2YWx1ZSwgMjU2LjAgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9HYW1tYSggdmFsdWUsIDIuMiApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHR2ZWM0IGVudk1hcFRleGVsVG9MaW5lYXIoIHZlYzQgY29sb3IgKSB7XG5cblx0XHRcdHJldHVybiBpbnB1dFRleGVsVG9MaW5lYXIoIGNvbG9yICk7XG5cblx0XHR9XG5cdFxuXG5cdFx0XHQjaW5jbHVkZSA8Y29tbW9uPlxuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cblx0XHRcdFx0dmVjMyBvdXRwdXREaXJlY3Rpb24gPSBub3JtYWxpemUoIHZPdXRwdXREaXJlY3Rpb24gKTtcblx0XHRcdFx0dmVjMiB1diA9IGVxdWlyZWN0VXYoIG91dHB1dERpcmVjdGlvbiApO1xuXG5cdFx0XHRcdHZlYzIgZiA9IGZyYWN0KCB1diAvIHRleGVsU2l6ZSAtIDAuNSApO1xuXHRcdFx0XHR1diAtPSBmICogdGV4ZWxTaXplO1xuXHRcdFx0XHR2ZWMzIHRsID0gZW52TWFwVGV4ZWxUb0xpbmVhciggdGV4dHVyZTJEICggZW52TWFwLCB1diApICkucmdiO1xuXHRcdFx0XHR1di54ICs9IHRleGVsU2l6ZS54O1xuXHRcdFx0XHR2ZWMzIHRyID0gZW52TWFwVGV4ZWxUb0xpbmVhciggdGV4dHVyZTJEICggZW52TWFwLCB1diApICkucmdiO1xuXHRcdFx0XHR1di55ICs9IHRleGVsU2l6ZS55O1xuXHRcdFx0XHR2ZWMzIGJyID0gZW52TWFwVGV4ZWxUb0xpbmVhciggdGV4dHVyZTJEICggZW52TWFwLCB1diApICkucmdiO1xuXHRcdFx0XHR1di54IC09IHRleGVsU2l6ZS54O1xuXHRcdFx0XHR2ZWMzIGJsID0gZW52TWFwVGV4ZWxUb0xpbmVhciggdGV4dHVyZTJEICggZW52TWFwLCB1diApICkucmdiO1xuXG5cdFx0XHRcdHZlYzMgdG0gPSBtaXgoIHRsLCB0ciwgZi54ICk7XG5cdFx0XHRcdHZlYzMgYm0gPSBtaXgoIGJsLCBiciwgZi54ICk7XG5cdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIHRtLCBibSwgZi55ICk7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gbGluZWFyVG9PdXRwdXRUZXhlbCggZ2xfRnJhZ0NvbG9yICk7XG5cblx0XHRcdH1cblx0XHQiLGJsZW5kaW5nOjAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBGMHQoKXtyZXR1cm4gbmV3IF8wdCh7bmFtZToiQ3ViZW1hcFRvQ3ViZVVWIix1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxpbnB1dEVuY29kaW5nOnt2YWx1ZTp4MHRbM2UzXX0sb3V0cHV0RW5jb2Rpbmc6e3ZhbHVlOngwdFszZTNdfX0sdmVydGV4U2hhZGVyOiJcblxuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXHRcdGF0dHJpYnV0ZSB2ZWMyIHV2O1xuXHRcdGF0dHJpYnV0ZSBmbG9hdCBmYWNlSW5kZXg7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdC8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb25cblx0XHR2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcblxuXHRcdFx0dXYgPSAyLjAgKiB1diAtIDEuMDtcblxuXHRcdFx0dmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XG5cblx0XHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLXUsIDEsIC12ICkgcG9zIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC0xLCB2LCAtdSApIG5lZyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXJlY3Rpb247XG5cblx0XHR9XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXG5cdFx0fVxuXHQiLGZyYWdtZW50U2hhZGVyOiJcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDtcblxuXHRcdFx0XG5cblx0XHR1bmlmb3JtIGludCBpbnB1dEVuY29kaW5nO1xuXHRcdHVuaWZvcm0gaW50IG91dHB1dEVuY29kaW5nO1xuXG5cdFx0I2luY2x1ZGUgPGVuY29kaW5nc19wYXJzX2ZyYWdtZW50PlxuXG5cdFx0dmVjNCBpbnB1dFRleGVsVG9MaW5lYXIoIHZlYzQgdmFsdWUgKSB7XG5cblx0XHRcdGlmICggaW5wdXRFbmNvZGluZyA9PSAwICkge1xuXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSAxICkge1xuXG5cdFx0XHRcdHJldHVybiBzUkdCVG9MaW5lYXIoIHZhbHVlICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gMiApIHtcblxuXHRcdFx0XHRyZXR1cm4gUkdCRVRvTGluZWFyKCB2YWx1ZSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDMgKSB7XG5cblx0XHRcdFx0cmV0dXJuIFJHQk1Ub0xpbmVhciggdmFsdWUsIDcuMCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIFJHQk1Ub0xpbmVhciggdmFsdWUsIDE2LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSA1ICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JEVG9MaW5lYXIoIHZhbHVlLCAyNTYuMCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHJldHVybiBHYW1tYVRvTGluZWFyKCB2YWx1ZSwgMi4yICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHZlYzQgbGluZWFyVG9PdXRwdXRUZXhlbCggdmVjNCB2YWx1ZSApIHtcblxuXHRcdFx0aWYgKCBvdXRwdXRFbmNvZGluZyA9PSAwICkge1xuXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMSApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9zUkdCKCB2YWx1ZSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSAyICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb1JHQkUoIHZhbHVlICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDMgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvUkdCTSggdmFsdWUsIDcuMCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSA0ICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb1JHQk0oIHZhbHVlLCAxNi4wICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDUgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvUkdCRCggdmFsdWUsIDI1Ni4wICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvR2FtbWEoIHZhbHVlLCAyLjIgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0dmVjNCBlbnZNYXBUZXhlbFRvTGluZWFyKCB2ZWM0IGNvbG9yICkge1xuXG5cdFx0XHRyZXR1cm4gaW5wdXRUZXhlbFRvTGluZWFyKCBjb2xvciApO1xuXG5cdFx0fVxuXHRcblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiID0gZW52TWFwVGV4ZWxUb0xpbmVhciggdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggLSB2T3V0cHV0RGlyZWN0aW9uLngsIHZPdXRwdXREaXJlY3Rpb24ueXogKSApICkucmdiO1xuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSBsaW5lYXJUb091dHB1dFRleGVsKCBnbF9GcmFnQ29sb3IgKTtcblxuXHRcdFx0fVxuXHRcdCIsYmxlbmRpbmc6MCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIFYwdCh0KXtsZXQgZT1uZXcgV2Vha01hcCxuPW51bGw7ZnVuY3Rpb24gaSh0KXtjb25zdCBuPXQudGFyZ2V0O24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsaSk7Y29uc3Qgcj1lLmdldChuKTt2b2lkIDAhPT1yJiYoci5kZWxldGUobiksci5kaXNwb3NlKCkpfXJldHVybntnZXQ6ZnVuY3Rpb24gcihvKXtpZihvJiZvLmlzVGV4dHVyZSYmITE9PT1vLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSl7Y29uc3Qgcj1vLm1hcHBpbmcsYT1yPT09V0t0fHxyPT09cUt0LHM9cj09PWpLdHx8cj09PUdLdDtpZihhfHxzKXtpZihlLmhhcyhvKSlyZXR1cm4gZS5nZXQobykudGV4dHVyZTt7Y29uc3Qgcj1vLmltYWdlO2lmKGEmJnImJnIuaGVpZ2h0PjB8fHMmJnImJihmdW5jdGlvbiBhKHQpe2xldCBlPTA7Zm9yKGxldCBuPTA7bjw2O24rKyl2b2lkIDAhPT10W25dJiZlKys7cmV0dXJuIDY9PT1lfSkocikpe2NvbnN0IHI9dC5nZXRSZW5kZXJUYXJnZXQoKTtudWxsPT09biYmKG49bmV3IFIwdCh0KSk7Y29uc3Qgcz1hP24uZnJvbUVxdWlyZWN0YW5ndWxhcihvKTpuLmZyb21DdWJlbWFwKG8pO3JldHVybiBlLnNldChvLHMpLHQuc2V0UmVuZGVyVGFyZ2V0KHIpLG8uYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsaSkscy50ZXh0dXJlfXJldHVybiBudWxsfX19cmV0dXJuIG99LGRpc3Bvc2U6ZnVuY3Rpb24gbygpe2U9bmV3IFdlYWtNYXAsbnVsbCE9PW4mJihuLmRpc3Bvc2UoKSxuPW51bGwpfX19ZnVuY3Rpb24gVTB0KHQpe2NvbnN0IGU9e307ZnVuY3Rpb24gbihuKXtpZih2b2lkIDAhPT1lW25dKXJldHVybiBlW25dO2xldCBpO3N3aXRjaChuKXtjYXNlIldFQkdMX2RlcHRoX3RleHR1cmUiOmk9dC5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKXx8dC5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9kZXB0aF90ZXh0dXJlIil8fHQuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfZGVwdGhfdGV4dHVyZSIpO2JyZWFrO2Nhc2UiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjppPXQuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8dC5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8dC5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIjppPXQuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHx0LmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fHQuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6aT10LmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fHQuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7ZGVmYXVsdDppPXQuZ2V0RXh0ZW5zaW9uKG4pfXJldHVybiBlW25dPWksaX1yZXR1cm57aGFzOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09bih0KX0saW5pdDpmdW5jdGlvbih0KXt0LmlzV2ViR0wyP24oIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKToobigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLG4oIk9FU190ZXh0dXJlX2Zsb2F0IiksbigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLG4oIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIiksbigiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIiksbigiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpLG4oIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiksbigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKSxuKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSxuKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKX0sZ2V0OmZ1bmN0aW9uKHQpe2NvbnN0IGU9bih0KTtyZXR1cm4gbnVsbD09PWUmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIit0KyIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQuIiksZX19fWZ1bmN0aW9uIGowdCh0LGUsbixpKXtjb25zdCByPXt9LG89bmV3IFdlYWtNYXA7ZnVuY3Rpb24gYSh0KXtjb25zdCBzPXQudGFyZ2V0O251bGwhPT1zLmluZGV4JiZlLnJlbW92ZShzLmluZGV4KTtmb3IoY29uc3QgdCBpbiBzLmF0dHJpYnV0ZXMpZS5yZW1vdmUocy5hdHRyaWJ1dGVzW3RdKTtzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGRlbGV0ZSByW3MuaWRdO2NvbnN0IGw9by5nZXQocyk7bCYmKGUucmVtb3ZlKGwpLG8uZGVsZXRlKHMpKSxpLnJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KHMpLCEwPT09cy5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5JiZkZWxldGUgcy5fbWF4SW5zdGFuY2VDb3VudCxuLm1lbW9yeS5nZW9tZXRyaWVzLS19ZnVuY3Rpb24gcyh0KXtjb25zdCBuPVtdLGk9dC5pbmRleCxyPXQuYXR0cmlidXRlcy5wb3NpdGlvbjtsZXQgYT0wO2lmKG51bGwhPT1pKXtjb25zdCB0PWkuYXJyYXk7YT1pLnZlcnNpb247Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSs9Myl7Y29uc3QgaT10W2UrMF0scj10W2UrMV0sbz10W2UrMl07bi5wdXNoKGkscixyLG8sbyxpKX19ZWxzZXthPXIudmVyc2lvbjtmb3IobGV0IHQ9MCxlPXIuYXJyYXkubGVuZ3RoLzMtMTt0PGU7dCs9Myl7Y29uc3QgZT10KzAsaT10KzEscj10KzI7bi5wdXNoKGUsaSxpLHIscixlKX19Y29uc3Qgcz1uZXcodTF0KG4pPjY1NTM1P2ExdDpyMXQpKG4sMSk7cy52ZXJzaW9uPWE7Y29uc3QgbD1vLmdldCh0KTtsJiZlLnJlbW92ZShsKSxvLnNldCh0LHMpfXJldHVybntnZXQ6ZnVuY3Rpb24gbCh0LGUpe3JldHVybiEwPT09cltlLmlkXXx8KGUuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSkscltlLmlkXT0hMCxuLm1lbW9yeS5nZW9tZXRyaWVzKyspLGV9LHVwZGF0ZTpmdW5jdGlvbiBjKHQpe2NvbnN0IG49dC5hdHRyaWJ1dGVzO2Zvcihjb25zdCB0IGluIG4pZS51cGRhdGUoblt0XSwzNDk2Mik7Y29uc3QgaT10Lm1vcnBoQXR0cmlidXRlcztmb3IoY29uc3QgdCBpbiBpKXtjb25zdCBuPWlbdF07Zm9yKGxldCB0PTAsaT1uLmxlbmd0aDt0PGk7dCsrKWUudXBkYXRlKG5bdF0sMzQ5NjIpfX0sZ2V0V2lyZWZyYW1lQXR0cmlidXRlOmZ1bmN0aW9uIHUodCl7Y29uc3QgZT1vLmdldCh0KTtpZihlKXtjb25zdCBuPXQuaW5kZXg7bnVsbCE9PW4mJmUudmVyc2lvbjxuLnZlcnNpb24mJnModCl9ZWxzZSBzKHQpO3JldHVybiBvLmdldCh0KX19fWZ1bmN0aW9uIEcwdCh0LGUsbixpKXtjb25zdCByPWkuaXNXZWJHTDI7bGV0IG8sYSxzO3RoaXMuc2V0TW9kZT1mdW5jdGlvbiBsKHQpe289dH0sdGhpcy5zZXRJbmRleD1mdW5jdGlvbiBjKHQpe2E9dC50eXBlLHM9dC5ieXRlc1BlckVsZW1lbnR9LHRoaXMucmVuZGVyPWZ1bmN0aW9uIHUoZSxpKXt0LmRyYXdFbGVtZW50cyhvLGksYSxlKnMpLG4udXBkYXRlKGksbywxKX0sdGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24gaChpLGwsYyl7aWYoMD09PWMpcmV0dXJuO2xldCB1LGg7aWYocil1PXQsaD0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkIjtlbHNlIGlmKHU9ZS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxoPSJkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIsbnVsbD09PXUpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3VbaF0obyxsLGEsaSpzLGMpLG4udXBkYXRlKGwsbyxjKX19ZnVuY3Rpb24gVzB0KHQpe2NvbnN0IGU9e2ZyYW1lOjAsY2FsbHM6MCx0cmlhbmdsZXM6MCxwb2ludHM6MCxsaW5lczowfTtyZXR1cm57bWVtb3J5OntnZW9tZXRyaWVzOjAsdGV4dHVyZXM6MH0scmVuZGVyOmUscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6ZnVuY3Rpb24gbigpe2UuZnJhbWUrKyxlLmNhbGxzPTAsZS50cmlhbmdsZXM9MCxlLnBvaW50cz0wLGUubGluZXM9MH0sdXBkYXRlOmZ1bmN0aW9uIGkodCxuLHIpe3N3aXRjaChlLmNhbGxzKyssbil7Y2FzZSA0OmUudHJpYW5nbGVzKz1yKih0LzMpO2JyZWFrO2Nhc2UgMTplLmxpbmVzKz1yKih0LzIpO2JyZWFrO2Nhc2UgMzplLmxpbmVzKz1yKih0LTEpO2JyZWFrO2Nhc2UgMjplLmxpbmVzKz1yKnQ7YnJlYWs7Y2FzZSAwOmUucG9pbnRzKz1yKnQ7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZm86IFVua25vd24gZHJhdyBtb2RlOiIsbil9fX19ZnVuY3Rpb24gcTB0KHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBZMHQodCxlKXtyZXR1cm4gTWF0aC5hYnMoZVsxXSktTWF0aC5hYnModFsxXSl9ZnVuY3Rpb24gWDB0KHQpe2NvbnN0IGU9e30sbj1uZXcgRmxvYXQzMkFycmF5KDgpLGk9W107Zm9yKGxldCB0PTA7dDw4O3QrKylpW3RdPVt0LDBdO3JldHVybnt1cGRhdGU6ZnVuY3Rpb24gcihvLGEscyxsKXtjb25zdCBjPW8ubW9ycGhUYXJnZXRJbmZsdWVuY2VzLHU9dm9pZCAwPT09Yz8wOmMubGVuZ3RoO2xldCBoPWVbYS5pZF07aWYodm9pZCAwPT09aHx8aC5sZW5ndGghPT11KXtoPVtdO2ZvcihsZXQgdD0wO3Q8dTt0KyspaFt0XT1bdCwwXTtlW2EuaWRdPWh9Zm9yKGxldCB0PTA7dDx1O3QrKyl7Y29uc3QgZT1oW3RdO2VbMF09dCxlWzFdPWNbdF19aC5zb3J0KFkwdCk7Zm9yKGxldCB0PTA7dDw4O3QrKyl0PHUmJmhbdF1bMV0/KGlbdF1bMF09aFt0XVswXSxpW3RdWzFdPWhbdF1bMV0pOihpW3RdWzBdPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLGlbdF1bMV09MCk7aS5zb3J0KHEwdCk7Y29uc3QgZD1hLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixwPWEubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbDtsZXQgZj0wO2ZvcihsZXQgdD0wO3Q8ODt0Kyspe2NvbnN0IGU9aVt0XSxyPWVbMF0sbz1lWzFdO3IhPT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUiYmbz8oZCYmYS5nZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0Iit0KSE9PWRbcl0mJmEuc2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrdCxkW3JdKSxwJiZhLmdldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK3QpIT09cFtyXSYmYS5zZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIit0LHBbcl0pLG5bdF09byxmKz1vKTooZCYmITA9PT1hLmhhc0F0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK3QpJiZhLmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK3QpLHAmJiEwPT09YS5oYXNBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIit0KSYmYS5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIit0KSxuW3RdPTApfWNvbnN0IG09YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT8xOjEtZjtsLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUodCwibW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIixtKSxsLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUodCwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixuKX19fWZ1bmN0aW9uICQwdCh0LGUsbixpKXtsZXQgcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBvKHQpe2NvbnN0IGU9dC50YXJnZXQ7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxuLnJlbW92ZShlLmluc3RhbmNlTWF0cml4KSxudWxsIT09ZS5pbnN0YW5jZUNvbG9yJiZuLnJlbW92ZShlLmluc3RhbmNlQ29sb3IpfXJldHVybnt1cGRhdGU6ZnVuY3Rpb24gYSh0KXtjb25zdCBhPWkucmVuZGVyLmZyYW1lLHM9ZS5nZXQodCx0Lmdlb21ldHJ5KTtyZXR1cm4gci5nZXQocykhPT1hJiYoZS51cGRhdGUocyksci5zZXQocyxhKSksdC5pc0luc3RhbmNlZE1lc2gmJighMT09PXQuaGFzRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbykmJnQuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyksbi51cGRhdGUodC5pbnN0YW5jZU1hdHJpeCwzNDk2MiksbnVsbCE9PXQuaW5zdGFuY2VDb2xvciYmbi51cGRhdGUodC5pbnN0YW5jZUNvbG9yLDM0OTYyKSksc30sZGlzcG9zZTpmdW5jdGlvbiBzKCl7cj1uZXcgV2Vha01hcH19fWNsYXNzIEswdCBleHRlbmRzIGJKdHtjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLG49MSxpPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDpuLGRlcHRoOml9LHRoaXMubWFnRmlsdGVyPUpLdCx0aGlzLm1pbkZpbHRlcj1KS3QsdGhpcy53cmFwUj1LS3QsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xLHRoaXMubmVlZHNVcGRhdGU9ITB9fUswdC5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZTJEQXJyYXk9ITA7Y2xhc3MgWjB0IGV4dGVuZHMgYkp0e2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsbj0xLGk9MSl7c3VwZXIobnVsbCksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0Om4sZGVwdGg6aX0sdGhpcy5tYWdGaWx0ZXI9Skt0LHRoaXMubWluRmlsdGVyPUpLdCx0aGlzLndyYXBSPUtLdCx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTEsdGhpcy5uZWVkc1VwZGF0ZT0hMH19WjB0LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0Q9ITA7Y29uc3QgSjB0PW5ldyBiSnQsUTB0PW5ldyBLMHQsdDJ0PW5ldyBaMHQsZTJ0PW5ldyAkMXQsbjJ0PVtdLGkydD1bXSxyMnQ9bmV3IEZsb2F0MzJBcnJheSgxNiksbzJ0PW5ldyBGbG9hdDMyQXJyYXkoOSksYTJ0PW5ldyBGbG9hdDMyQXJyYXkoNCk7ZnVuY3Rpb24gczJ0KHQsZSxuKXtjb25zdCBpPXRbMF07aWYoaTw9MHx8aT4wKXJldHVybiB0O2NvbnN0IHI9ZSpuO2xldCBvPW4ydFtyXTtpZih2b2lkIDA9PT1vJiYobz1uZXcgRmxvYXQzMkFycmF5KHIpLG4ydFtyXT1vKSwwIT09ZSl7aS50b0FycmF5KG8sMCk7Zm9yKGxldCBpPTEscj0wO2khPT1lOysraSlyKz1uLHRbaV0udG9BcnJheShvLHIpfXJldHVybiBvfWZ1bmN0aW9uIGwydCh0LGUpe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuPGk7bisrKWlmKHRbbl0hPT1lW25dKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGMydCh0LGUpe2ZvcihsZXQgbj0wLGk9ZS5sZW5ndGg7bjxpO24rKyl0W25dPWVbbl19ZnVuY3Rpb24gdTJ0KHQsZSl7bGV0IG49aTJ0W2VdO3ZvaWQgMD09PW4mJihuPW5ldyBJbnQzMkFycmF5KGUpLGkydFtlXT1uKTtmb3IobGV0IGk9MDtpIT09ZTsrK2kpbltpXT10LmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtyZXR1cm4gbn1mdW5jdGlvbiBoMnQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7blswXSE9PWUmJih0LnVuaWZvcm0xZih0aGlzLmFkZHIsZSksblswXT1lKX1mdW5jdGlvbiBkMnQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09ZS54KW5bMF09PT1lLngmJm5bMV09PT1lLnl8fCh0LnVuaWZvcm0yZih0aGlzLmFkZHIsZS54LGUueSksblswXT1lLngsblsxXT1lLnkpO2Vsc2V7aWYobDJ0KG4sZSkpcmV0dXJuO3QudW5pZm9ybTJmdih0aGlzLmFkZHIsZSksYzJ0KG4sZSl9fWZ1bmN0aW9uIHAydCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZTtpZih2b2lkIDAhPT1lLngpblswXT09PWUueCYmblsxXT09PWUueSYmblsyXT09PWUuenx8KHQudW5pZm9ybTNmKHRoaXMuYWRkcixlLngsZS55LGUueiksblswXT1lLngsblsxXT1lLnksblsyXT1lLnopO2Vsc2UgaWYodm9pZCAwIT09ZS5yKW5bMF09PT1lLnImJm5bMV09PT1lLmcmJm5bMl09PT1lLmJ8fCh0LnVuaWZvcm0zZih0aGlzLmFkZHIsZS5yLGUuZyxlLmIpLG5bMF09ZS5yLG5bMV09ZS5nLG5bMl09ZS5iKTtlbHNle2lmKGwydChuLGUpKXJldHVybjt0LnVuaWZvcm0zZnYodGhpcy5hZGRyLGUpLGMydChuLGUpfX1mdW5jdGlvbiBmMnQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09ZS54KW5bMF09PT1lLngmJm5bMV09PT1lLnkmJm5bMl09PT1lLnomJm5bM109PT1lLnd8fCh0LnVuaWZvcm00Zih0aGlzLmFkZHIsZS54LGUueSxlLnosZS53KSxuWzBdPWUueCxuWzFdPWUueSxuWzJdPWUueixuWzNdPWUudyk7ZWxzZXtpZihsMnQobixlKSlyZXR1cm47dC51bmlmb3JtNGZ2KHRoaXMuYWRkcixlKSxjMnQobixlKX19ZnVuY3Rpb24gbTJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlLGk9ZS5lbGVtZW50cztpZih2b2lkIDA9PT1pKXtpZihsMnQobixlKSlyZXR1cm47dC51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxlKSxjMnQobixlKX1lbHNle2lmKGwydChuLGkpKXJldHVybjthMnQuc2V0KGkpLHQudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsYTJ0KSxjMnQobixpKX19ZnVuY3Rpb24gZzJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlLGk9ZS5lbGVtZW50cztpZih2b2lkIDA9PT1pKXtpZihsMnQobixlKSlyZXR1cm47dC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxlKSxjMnQobixlKX1lbHNle2lmKGwydChuLGkpKXJldHVybjtvMnQuc2V0KGkpLHQudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsbzJ0KSxjMnQobixpKX19ZnVuY3Rpb24gXzJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlLGk9ZS5lbGVtZW50cztpZih2b2lkIDA9PT1pKXtpZihsMnQobixlKSlyZXR1cm47dC51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxlKSxjMnQobixlKX1lbHNle2lmKGwydChuLGkpKXJldHVybjtyMnQuc2V0KGkpLHQudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEscjJ0KSxjMnQobixpKX19ZnVuY3Rpb24geTJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO25bMF0hPT1lJiYodC51bmlmb3JtMWkodGhpcy5hZGRyLGUpLG5bMF09ZSl9ZnVuY3Rpb24gdjJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO2wydChuLGUpfHwodC51bmlmb3JtMml2KHRoaXMuYWRkcixlKSxjMnQobixlKSl9ZnVuY3Rpb24gYjJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO2wydChuLGUpfHwodC51bmlmb3JtM2l2KHRoaXMuYWRkcixlKSxjMnQobixlKSl9ZnVuY3Rpb24geDJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO2wydChuLGUpfHwodC51bmlmb3JtNGl2KHRoaXMuYWRkcixlKSxjMnQobixlKSl9ZnVuY3Rpb24gdzJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO25bMF0hPT1lJiYodC51bmlmb3JtMXVpKHRoaXMuYWRkcixlKSxuWzBdPWUpfWZ1bmN0aW9uIFMydCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZTtsMnQobixlKXx8KHQudW5pZm9ybTJ1aXYodGhpcy5hZGRyLGUpLGMydChuLGUpKX1mdW5jdGlvbiBNMnQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7bDJ0KG4sZSl8fCh0LnVuaWZvcm0zdWl2KHRoaXMuYWRkcixlKSxjMnQobixlKSl9ZnVuY3Rpb24gRTJ0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO2wydChuLGUpfHwodC51bmlmb3JtNHVpdih0aGlzLmFkZHIsZSksYzJ0KG4sZSkpfWZ1bmN0aW9uIFQydCh0LGUsbil7Y29uc3QgaT10aGlzLmNhY2hlLHI9bi5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJih0LnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxuLnNhZmVTZXRUZXh0dXJlMkQoZXx8SjB0LHIpfWZ1bmN0aW9uIEMydCh0LGUsbil7Y29uc3QgaT10aGlzLmNhY2hlLHI9bi5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJih0LnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxuLnNldFRleHR1cmUzRChlfHx0MnQscil9ZnVuY3Rpb24gQTJ0KHQsZSxuKXtjb25zdCBpPXRoaXMuY2FjaGUscj1uLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKHQudW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLG4uc2FmZVNldFRleHR1cmVDdWJlKGV8fGUydCxyKX1mdW5jdGlvbiBrMnQodCxlLG4pe2NvbnN0IGk9dGhpcy5jYWNoZSxyPW4uYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYodC51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksbi5zZXRUZXh0dXJlMkRBcnJheShlfHxRMHQscil9ZnVuY3Rpb24gTDJ0KHQsZSl7dC51bmlmb3JtMWZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBQMnQodCxlKXtjb25zdCBuPXMydChlLHRoaXMuc2l6ZSwyKTt0LnVuaWZvcm0yZnYodGhpcy5hZGRyLG4pfWZ1bmN0aW9uIE4ydCh0LGUpe2NvbnN0IG49czJ0KGUsdGhpcy5zaXplLDMpO3QudW5pZm9ybTNmdih0aGlzLmFkZHIsbil9ZnVuY3Rpb24gSTJ0KHQsZSl7Y29uc3Qgbj1zMnQoZSx0aGlzLnNpemUsNCk7dC51bmlmb3JtNGZ2KHRoaXMuYWRkcixuKX1mdW5jdGlvbiBSMnQodCxlKXtjb25zdCBuPXMydChlLHRoaXMuc2l6ZSw0KTt0LnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLG4pfWZ1bmN0aW9uIE8ydCh0LGUpe2NvbnN0IG49czJ0KGUsdGhpcy5zaXplLDkpO3QudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsbil9ZnVuY3Rpb24gejJ0KHQsZSl7Y29uc3Qgbj1zMnQoZSx0aGlzLnNpemUsMTYpO3QudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsbil9ZnVuY3Rpb24gRDJ0KHQsZSl7dC51bmlmb3JtMWl2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBCMnQodCxlKXt0LnVuaWZvcm0yaXYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIEgydCh0LGUpe3QudW5pZm9ybTNpdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gRjJ0KHQsZSl7dC51bmlmb3JtNGl2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBWMnQodCxlKXt0LnVuaWZvcm0xdWl2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBVMnQodCxlKXt0LnVuaWZvcm0ydWl2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBqMnQodCxlKXt0LnVuaWZvcm0zdWl2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBHMnQodCxlKXt0LnVuaWZvcm00dWl2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBXMnQodCxlLG4pe2NvbnN0IGk9ZS5sZW5ndGgscj11MnQobixpKTt0LnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgdD0wO3QhPT1pOysrdCluLnNhZmVTZXRUZXh0dXJlMkQoZVt0XXx8SjB0LHJbdF0pfWZ1bmN0aW9uIHEydCh0LGUsbil7Y29uc3QgaT1lLmxlbmd0aCxyPXUydChuLGkpO3QudW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCB0PTA7dCE9PWk7Kyt0KW4uc2FmZVNldFRleHR1cmVDdWJlKGVbdF18fGUydCxyW3RdKX1mdW5jdGlvbiBZMnQodCxlLG4pe3RoaXMuaWQ9dCx0aGlzLmFkZHI9bix0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9KGZ1bmN0aW9uIGkodCl7c3dpdGNoKHQpe2Nhc2UgNTEyNjpyZXR1cm4gaDJ0O2Nhc2UgMzU2NjQ6cmV0dXJuIGQydDtjYXNlIDM1NjY1OnJldHVybiBwMnQ7Y2FzZSAzNTY2NjpyZXR1cm4gZjJ0O2Nhc2UgMzU2NzQ6cmV0dXJuIG0ydDtjYXNlIDM1Njc1OnJldHVybiBnMnQ7Y2FzZSAzNTY3NjpyZXR1cm4gXzJ0O2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiB5MnQ7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiB2MnQ7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBiMnQ7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiB4MnQ7Y2FzZSA1MTI1OnJldHVybiB3MnQ7Y2FzZSAzNjI5NDpyZXR1cm4gUzJ0O2Nhc2UgMzYyOTU6cmV0dXJuIE0ydDtjYXNlIDM2Mjk2OnJldHVybiBFMnQ7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBUMnQ7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIEMydDtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBBMnQ7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gazJ0fX0pKGUudHlwZSl9ZnVuY3Rpb24gWDJ0KHQsZSxuKXt0aGlzLmlkPXQsdGhpcy5hZGRyPW4sdGhpcy5jYWNoZT1bXSx0aGlzLnNpemU9ZS5zaXplLHRoaXMuc2V0VmFsdWU9KGZ1bmN0aW9uIGkodCl7c3dpdGNoKHQpe2Nhc2UgNTEyNjpyZXR1cm4gTDJ0O2Nhc2UgMzU2NjQ6cmV0dXJuIFAydDtjYXNlIDM1NjY1OnJldHVybiBOMnQ7Y2FzZSAzNTY2NjpyZXR1cm4gSTJ0O2Nhc2UgMzU2NzQ6cmV0dXJuIFIydDtjYXNlIDM1Njc1OnJldHVybiBPMnQ7Y2FzZSAzNTY3NjpyZXR1cm4gejJ0O2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBEMnQ7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBCMnQ7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBIMnQ7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBGMnQ7Y2FzZSA1MTI1OnJldHVybiBWMnQ7Y2FzZSAzNjI5NDpyZXR1cm4gVTJ0O2Nhc2UgMzYyOTU6cmV0dXJuIGoydDtjYXNlIDM2Mjk2OnJldHVybiBHMnQ7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBXMnQ7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gcTJ0fX0pKGUudHlwZSl9ZnVuY3Rpb24gJDJ0KHQpe3RoaXMuaWQ9dCx0aGlzLnNlcT1bXSx0aGlzLm1hcD17fX1YMnQucHJvdG90eXBlLnVwZGF0ZUNhY2hlPWZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5jYWNoZTt0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiZlLmxlbmd0aCE9PXQubGVuZ3RoJiYodGhpcy5jYWNoZT1uZXcgRmxvYXQzMkFycmF5KHQubGVuZ3RoKSksYzJ0KGUsdCl9LCQydC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlLG4pe2NvbnN0IGk9dGhpcy5zZXE7Zm9yKGxldCByPTAsbz1pLmxlbmd0aDtyIT09bzsrK3Ipe2NvbnN0IG89aVtyXTtvLnNldFZhbHVlKHQsZVtvLmlkXSxuKX19O2NvbnN0IEsydD0vKFx3KykoXF0pPyhcW3xcLik/L2c7ZnVuY3Rpb24gWjJ0KHQsZSl7dC5zZXEucHVzaChlKSx0Lm1hcFtlLmlkXT1lfWZ1bmN0aW9uIEoydCh0LGUsbil7Y29uc3QgaT10Lm5hbWUscj1pLmxlbmd0aDtmb3IoSzJ0Lmxhc3RJbmRleD0wOzspe2NvbnN0IG89SzJ0LmV4ZWMoaSksYT1LMnQubGFzdEluZGV4O2xldCBzPW9bMV07Y29uc3QgbD1vWzNdO2lmKCJdIj09PW9bMl0mJihzfD0wKSx2b2lkIDA9PT1sfHwiWyI9PT1sJiZhKzI9PT1yKXtaMnQobix2b2lkIDA9PT1sP25ldyBZMnQocyx0LGUpOm5ldyBYMnQocyx0LGUpKTticmVha317bGV0IHQ9bi5tYXBbc107dm9pZCAwPT09dCYmKHQ9bmV3ICQydChzKSxaMnQobix0KSksbj10fX19ZnVuY3Rpb24gUTJ0KHQsZSl7dGhpcy5zZXE9W10sdGhpcy5tYXA9e307Y29uc3Qgbj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSwzNTcxOCk7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbj10LmdldEFjdGl2ZVVuaWZvcm0oZSxpKTtKMnQobix0LmdldFVuaWZvcm1Mb2NhdGlvbihlLG4ubmFtZSksdGhpcyl9fWZ1bmN0aW9uIHQ1dCh0LGUsbil7Y29uc3QgaT10LmNyZWF0ZVNoYWRlcihlKTtyZXR1cm4gdC5zaGFkZXJTb3VyY2UoaSxuKSx0LmNvbXBpbGVTaGFkZXIoaSksaX1RMnQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSxuLGkpe2NvbnN0IHI9dGhpcy5tYXBbZV07dm9pZCAwIT09ciYmci5zZXRWYWx1ZSh0LG4saSl9LFEydC5wcm90b3R5cGUuc2V0T3B0aW9uYWw9ZnVuY3Rpb24odCxlLG4pe2NvbnN0IGk9ZVtuXTt2b2lkIDAhPT1pJiZ0aGlzLnNldFZhbHVlKHQsbixpKX0sUTJ0LnVwbG9hZD1mdW5jdGlvbih0LGUsbixpKXtmb3IobGV0IHI9MCxvPWUubGVuZ3RoO3IhPT1vOysrcil7Y29uc3Qgbz1lW3JdLGE9bltvLmlkXTshMSE9PWEubmVlZHNVcGRhdGUmJm8uc2V0VmFsdWUodCxhLnZhbHVlLGkpfX0sUTJ0LnNlcVdpdGhWYWx1ZT1mdW5jdGlvbih0LGUpe2NvbnN0IG49W107Zm9yKGxldCBpPTAscj10Lmxlbmd0aDtpIT09cjsrK2kpe2NvbnN0IHI9dFtpXTtyLmlkIGluIGUmJm4ucHVzaChyKX1yZXR1cm4gbn07bGV0IGU1dD0wO2Z1bmN0aW9uIG41dCh0KXtzd2l0Y2godCl7Y2FzZSBOWnQ6cmV0dXJuWyJMaW5lYXIiLCIoIHZhbHVlICkiXTtjYXNlIEladDpyZXR1cm5bInNSR0IiLCIoIHZhbHVlICkiXTtjYXNlIE9adDpyZXR1cm5bIlJHQkUiLCIoIHZhbHVlICkiXTtjYXNlIHpadDpyZXR1cm5bIlJHQk0iLCIoIHZhbHVlLCA3LjAgKSJdO2Nhc2UgRFp0OnJldHVyblsiUkdCTSIsIiggdmFsdWUsIDE2LjAgKSJdO2Nhc2UgQlp0OnJldHVyblsiUkdCRCIsIiggdmFsdWUsIDI1Ni4wICkiXTtjYXNlIFJadDpyZXR1cm5bIkdhbW1hIiwiKCB2YWx1ZSwgZmxvYXQoIEdBTU1BX0ZBQ1RPUiApICkiXTtjYXNlIDMwMDM6cmV0dXJuWyJMb2dMdXYiLCIoIHZhbHVlICkiXTtkZWZhdWx0OnJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6Iix0KSxbIkxpbmVhciIsIiggdmFsdWUgKSJdfX1mdW5jdGlvbiBpNXQodCxlLG4pe2NvbnN0IGk9dC5nZXRTaGFkZXJQYXJhbWV0ZXIoZSwzNTcxMykscj10LmdldFNoYWRlckluZm9Mb2coZSkudHJpbSgpO3JldHVybiBpJiYiIj09PXI/IiI6IlRIUkVFLldlYkdMU2hhZGVyOiBnbC5nZXRTaGFkZXJJbmZvTG9nKCkgIituKyJcbiIrcisoZnVuY3Rpb24gbyh0KXtjb25zdCBlPXQuc3BsaXQoIlxuIik7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XT10KzErIjogIitlW3RdO3JldHVybiBlLmpvaW4oIlxuIil9KSh0LmdldFNoYWRlclNvdXJjZShlKSl9ZnVuY3Rpb24gcjV0KHQsZSl7Y29uc3Qgbj1uNXQoZSk7cmV0dXJuInZlYzQgIit0KyIoIHZlYzQgdmFsdWUgKSB7IHJldHVybiAiK25bMF0rIlRvTGluZWFyIituWzFdKyI7IH0ifWZ1bmN0aW9uIG81dCh0LGUpe2NvbnN0IG49bjV0KGUpO3JldHVybiJ2ZWM0ICIrdCsiKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gTGluZWFyVG8iK25bMF0rblsxXSsiOyB9In1mdW5jdGlvbiBhNXQodCxlKXtsZXQgbjtzd2l0Y2goZSl7Y2FzZSAxOm49IkxpbmVhciI7YnJlYWs7Y2FzZSAyOm49IlJlaW5oYXJkIjticmVhaztjYXNlIDM6bj0iT3B0aW1pemVkQ2luZW9uIjticmVhaztjYXNlIDQ6bj0iQUNFU0ZpbG1pYyI7YnJlYWs7Y2FzZSA1Om49IkN1c3RvbSI7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6IixlKSxuPSJMaW5lYXIifXJldHVybiJ2ZWMzICIrdCsiKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gIituKyJUb25lTWFwcGluZyggY29sb3IgKTsgfSJ9ZnVuY3Rpb24gczV0KHQpe3JldHVybiIiIT09dH1mdW5jdGlvbiBsNXQodCxlKXtyZXR1cm4gdC5yZXBsYWNlKC9OVU1fRElSX0xJR0hUUy9nLGUubnVtRGlyTGlnaHRzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVFMvZyxlLm51bVNwb3RMaWdodHMpLnJlcGxhY2UoL05VTV9SRUNUX0FSRUFfTElHSFRTL2csZS5udW1SZWN0QXJlYUxpZ2h0cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUUy9nLGUubnVtUG9pbnRMaWdodHMpLnJlcGxhY2UoL05VTV9IRU1JX0xJR0hUUy9nLGUubnVtSGVtaUxpZ2h0cykucmVwbGFjZSgvTlVNX0RJUl9MSUdIVF9TSEFET1dTL2csZS5udW1EaXJMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUX1NIQURPV1MvZyxlLm51bVNwb3RMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVF9TSEFET1dTL2csZS5udW1Qb2ludExpZ2h0U2hhZG93cyl9ZnVuY3Rpb24gYzV0KHQsZSl7cmV0dXJuIHQucmVwbGFjZSgvTlVNX0NMSVBQSU5HX1BMQU5FUy9nLGUubnVtQ2xpcHBpbmdQbGFuZXMpLnJlcGxhY2UoL1VOSU9OX0NMSVBQSU5HX1BMQU5FUy9nLGUubnVtQ2xpcHBpbmdQbGFuZXMtZS5udW1DbGlwSW50ZXJzZWN0aW9uKX1jb25zdCB1NXQ9L15bIFx0XSojaW5jbHVkZSArPChbXHdcZC4vXSspPi9nbTtmdW5jdGlvbiBoNXQodCl7cmV0dXJuIHQucmVwbGFjZSh1NXQsZDV0KX1mdW5jdGlvbiBkNXQodCxlKXtjb25zdCBuPXMwdFtlXTtpZih2b2lkIDA9PT1uKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK2UrIj4iKTtyZXR1cm4gaDV0KG4pfWNvbnN0IHA1dD0vI3ByYWdtYSB1bnJvbGxfbG9vcFtcc10rP2ZvciBcKCBpbnQgaSBcPSAoXGQrKVw7IGkgPCAoXGQrKVw7IGkgXCtcKyBcKSBceyhbXHNcU10rPykoPz1cfSlcfS9nLGY1dD0vI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxzK2ZvclxzKlwoXHMqaW50XHMraVxzKj1ccyooXGQrKVxzKjtccyppXHMqPFxzKihcZCspXHMqO1xzKmlccypcK1wrXHMqXClccyp7KFtcc1xTXSs/KX1ccysjcHJhZ21hIHVucm9sbF9sb29wX2VuZC9nO2Z1bmN0aW9uIG01dCh0KXtyZXR1cm4gdC5yZXBsYWNlKGY1dCxfNXQpLnJlcGxhY2UocDV0LGc1dCl9ZnVuY3Rpb24gZzV0KHQsZSxuLGkpe3JldHVybiBjb25zb2xlLndhcm4oIldlYkdMUHJvZ3JhbTogI3ByYWdtYSB1bnJvbGxfbG9vcCBzaGFkZXIgc3ludGF4IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydCBzeW50YXggaW5zdGVhZC4iKSxfNXQoMCxlLG4saSl9ZnVuY3Rpb24gXzV0KHQsZSxuLGkpe2xldCByPSIiO2ZvcihsZXQgdD1wYXJzZUludChlKTt0PHBhcnNlSW50KG4pO3QrKylyKz1pLnJlcGxhY2UoL1xbXHMqaVxzKlxdL2csIlsgIit0KyIgXSIpLnJlcGxhY2UoL1VOUk9MTEVEX0xPT1BfSU5ERVgvZyx0KTtyZXR1cm4gcn1mdW5jdGlvbiB5NXQodCl7bGV0IGU9InByZWNpc2lvbiAiK3QucHJlY2lzaW9uKyIgZmxvYXQ7XG5wcmVjaXNpb24gIit0LnByZWNpc2lvbisiIGludDsiO3JldHVybiJoaWdocCI9PT10LnByZWNpc2lvbj9lKz0iXG4jZGVmaW5lIEhJR0hfUFJFQ0lTSU9OIjoibWVkaXVtcCI9PT10LnByZWNpc2lvbj9lKz0iXG4jZGVmaW5lIE1FRElVTV9QUkVDSVNJT04iOiJsb3dwIj09PXQucHJlY2lzaW9uJiYoZSs9IlxuI2RlZmluZSBMT1dfUFJFQ0lTSU9OIiksZX1mdW5jdGlvbiB2NXQodCxlLG4saSl7Y29uc3Qgcj10LmdldENvbnRleHQoKSxvPW4uZGVmaW5lcztsZXQgYT1uLnZlcnRleFNoYWRlcixzPW4uZnJhZ21lbnRTaGFkZXI7Y29uc3QgbD0oZnVuY3Rpb24gYyh0KXtsZXQgZT0iU0hBRE9XTUFQX1RZUEVfQkFTSUMiO3JldHVybiAxPT09dC5zaGFkb3dNYXBUeXBlP2U9IlNIQURPV01BUF9UWVBFX1BDRiI6Mj09PXQuc2hhZG93TWFwVHlwZT9lPSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6Mz09PXQuc2hhZG93TWFwVHlwZSYmKGU9IlNIQURPV01BUF9UWVBFX1ZTTSIpLGV9KShuKSx1PShmdW5jdGlvbiBoKHQpe2xldCBlPSJFTlZNQVBfVFlQRV9DVUJFIjtpZih0LmVudk1hcClzd2l0Y2godC5lbnZNYXBNb2RlKXtjYXNlIGpLdDpjYXNlIEdLdDplPSJFTlZNQVBfVFlQRV9DVUJFIjticmVhaztjYXNlIFlLdDpjYXNlIFhLdDplPSJFTlZNQVBfVFlQRV9DVUJFX1VWIn1yZXR1cm4gZX0pKG4pLGQ9KGZ1bmN0aW9uIHAodCl7bGV0IGU9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iO2lmKHQuZW52TWFwKXN3aXRjaCh0LmVudk1hcE1vZGUpe2Nhc2UgR0t0OmNhc2UgWEt0OmU9IkVOVk1BUF9NT0RFX1JFRlJBQ1RJT04ifXJldHVybiBlfSkobiksZj0oZnVuY3Rpb24gbSh0KXtsZXQgZT0iRU5WTUFQX0JMRU5ESU5HX05PTkUiO2lmKHQuZW52TWFwKXN3aXRjaCh0LmNvbWJpbmUpe2Nhc2UgMDplPSJFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFkiO2JyZWFrO2Nhc2UgMTplPSJFTlZNQVBfQkxFTkRJTkdfTUlYIjticmVhaztjYXNlIDI6ZT0iRU5WTUFQX0JMRU5ESU5HX0FERCJ9cmV0dXJuIGV9KShuKSxnPXQuZ2FtbWFGYWN0b3I+MD90LmdhbW1hRmFjdG9yOjEsXz1uLmlzV2ViR0wyPyIiOihmdW5jdGlvbiB5KHQpe3JldHVyblt0LmV4dGVuc2lvbkRlcml2YXRpdmVzfHx0LmVudk1hcEN1YmVVVnx8dC5idW1wTWFwfHx0LnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8dC5jbGVhcmNvYXROb3JtYWxNYXB8fHQuZmxhdFNoYWRpbmd8fCJwaHlzaWNhbCI9PT10LnNoYWRlcklEPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKHQuZXh0ZW5zaW9uRnJhZ0RlcHRofHx0LmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZ0LnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIix0LmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZ0LnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLCh0LmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fHQuZW52TWFwfHx0LnRyYW5zbWlzc2lvbj4wKSYmdC5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q/IiNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVuYWJsZSI6IiJdLmZpbHRlcihzNXQpLmpvaW4oIlxuIil9KShuKSx2PShmdW5jdGlvbiBiKHQpe2NvbnN0IGU9W107Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3QgaT10W25dOyExIT09aSYmZS5wdXNoKCIjZGVmaW5lICIrbisiICIraSl9cmV0dXJuIGUuam9pbigiXG4iKX0pKG8pLHg9ci5jcmVhdGVQcm9ncmFtKCk7bGV0IHcsUyxNPW4uZ2xzbFZlcnNpb24/IiN2ZXJzaW9uICIrbi5nbHNsVmVyc2lvbisiXG4iOiIiO24uaXNSYXdTaGFkZXJNYXRlcmlhbD8odz1bdl0uZmlsdGVyKHM1dCkuam9pbigiXG4iKSx3Lmxlbmd0aD4wJiYodys9IlxuIiksUz1bXyx2XS5maWx0ZXIoczV0KS5qb2luKCJcbiIpLFMubGVuZ3RoPjAmJihTKz0iXG4iKSk6KHc9W3k1dChuKSwiI2RlZmluZSBTSEFERVJfTkFNRSAiK24uc2hhZGVyTmFtZSx2LG4uaW5zdGFuY2luZz8iI2RlZmluZSBVU0VfSU5TVEFOQ0lORyI6IiIsbi5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkdfQ09MT1IiOiIiLG4uc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBWRVJURVhfVEVYVFVSRVMiOiIiLCIjZGVmaW5lIEdBTU1BX0ZBQ1RPUiAiK2csIiNkZWZpbmUgTUFYX0JPTkVTICIrbi5tYXhCb25lcyxuLnVzZUZvZyYmbi5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsbi51c2VGb2cmJm4uZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsbi5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsbi5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsbi5lbnZNYXA/IiNkZWZpbmUgIitkOiIiLG4ubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixuLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsbi5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLG4uYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsbi5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsbi5ub3JtYWxNYXAmJm4ub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixuLm5vcm1hbE1hcCYmbi50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsbi5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsbi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLG4uY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixuLmRpc3BsYWNlbWVudE1hcCYmbi5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFVTRV9ESVNQTEFDRU1FTlRNQVAiOiIiLG4uc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixuLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsbi5zcGVjdWxhclRpbnRNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSVElOVE1BUCI6IiIsbi5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsbi5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsbi5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLG4udHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLG4udHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLG4udGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLG4udmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLG4udmVydGV4Q29sb3JzPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsbi52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixuLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLG4udXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLG4uZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLG4uc2tpbm5pbmc/IiNkZWZpbmUgVVNFX1NLSU5OSU5HIjoiIixuLnVzZVZlcnRleFRleHR1cmU/IiNkZWZpbmUgQk9ORV9URVhUVVJFIjoiIixuLm1vcnBoVGFyZ2V0cz8iI2RlZmluZSBVU0VfTU9SUEhUQVJHRVRTIjoiIixuLm1vcnBoTm9ybWFscyYmITE9PT1uLmZsYXRTaGFkaW5nPyIjZGVmaW5lIFVTRV9NT1JQSE5PUk1BTFMiOiIiLG4uZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixuLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixuLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsbi5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixuLnNpemVBdHRlbnVhdGlvbj8iI2RlZmluZSBVU0VfU0laRUFUVEVOVUFUSU9OIjoiIixuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJm4ucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsInVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgbW9kZWxWaWV3TWF0cml4OyIsInVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OyIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsInVuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkciLCJcdGF0dHJpYnV0ZSBtYXQ0IGluc3RhbmNlTWF0cml4OyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUiIsIlx0YXR0cmlidXRlIHZlYzMgaW5zdGFuY2VDb2xvcjsiLCIjZW5kaWYiLCJhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsiLCJhdHRyaWJ1dGUgdmVjMyBub3JtYWw7IiwiYXR0cmlidXRlIHZlYzIgdXY7IiwiI2lmZGVmIFVTRV9UQU5HRU5UIiwiXHRhdHRyaWJ1dGUgdmVjNCB0YW5nZW50OyIsIiNlbmRpZiIsIiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKSIsIlx0YXR0cmlidXRlIHZlYzQgY29sb3I7IiwiI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkiLCJcdGF0dHJpYnV0ZSB2ZWMzIGNvbG9yOyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTIiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDI7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDM7IiwiXHQjaWZkZWYgVVNFX01PUlBITk9STUFMUyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDA7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7IiwiXHQjZWxzZSIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDQ7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDc7IiwiXHQjZW5kaWYiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX1NLSU5OSU5HIiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luSW5kZXg7IiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luV2VpZ2h0OyIsIiNlbmRpZiIsIlxuIl0uZmlsdGVyKHM1dCkuam9pbigiXG4iKSxTPVtfLHk1dChuKSwiI2RlZmluZSBTSEFERVJfTkFNRSAiK24uc2hhZGVyTmFtZSx2LG4uYWxwaGFUZXN0PyIjZGVmaW5lIEFMUEhBVEVTVCAiK24uYWxwaGFUZXN0KyhuLmFscGhhVGVzdCUxPyIiOiIuMCIpOiIiLCIjZGVmaW5lIEdBTU1BX0ZBQ1RPUiAiK2csbi51c2VGb2cmJm4uZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLG4udXNlRm9nJiZuLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLG4ubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLG4ubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLG4uZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLG4uZW52TWFwPyIjZGVmaW5lICIrdToiIixuLmVudk1hcD8iI2RlZmluZSAiK2Q6IiIsbi5lbnZNYXA/IiNkZWZpbmUgIitmOiIiLG4ubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixuLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsbi5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLG4uYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsbi5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsbi5ub3JtYWxNYXAmJm4ub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixuLm5vcm1hbE1hcCYmbi50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsbi5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsbi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLG4uY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixuLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsbi5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLG4uc3BlY3VsYXJUaW50TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUlRJTlRNQVAiOiIiLG4ucm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAiOiIiLG4ubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLG4uYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIixuLnNoZWVuPyIjZGVmaW5lIFVTRV9TSEVFTiI6IiIsbi50cmFuc21pc3Npb24/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTiI6IiIsbi50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsbi50aGlja25lc3NNYXA/IiNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCI6IiIsbi52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsbi52ZXJ0ZXhDb2xvcnN8fG4uaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsbi52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixuLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLG4udXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLG4uZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixuLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixuLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsbi5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsbi5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLG4uc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsbi5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsbi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJm4ucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKG4uZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8bi5lbnZNYXApJiZuLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsMCE9PW4udG9uZU1hcHBpbmc/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIiwwIT09bi50b25lTWFwcGluZz9zMHQudG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiIiwwIT09bi50b25lTWFwcGluZz9hNXQoInRvbmVNYXBwaW5nIixuLnRvbmVNYXBwaW5nKToiIixuLmRpdGhlcmluZz8iI2RlZmluZSBESVRIRVJJTkciOiIiLHMwdC5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCxuLm1hcD9yNXQoIm1hcFRleGVsVG9MaW5lYXIiLG4ubWFwRW5jb2RpbmcpOiIiLG4ubWF0Y2FwP3I1dCgibWF0Y2FwVGV4ZWxUb0xpbmVhciIsbi5tYXRjYXBFbmNvZGluZyk6IiIsbi5lbnZNYXA/cjV0KCJlbnZNYXBUZXhlbFRvTGluZWFyIixuLmVudk1hcEVuY29kaW5nKToiIixuLmVtaXNzaXZlTWFwP3I1dCgiZW1pc3NpdmVNYXBUZXhlbFRvTGluZWFyIixuLmVtaXNzaXZlTWFwRW5jb2RpbmcpOiIiLG4uc3BlY3VsYXJUaW50TWFwP3I1dCgic3BlY3VsYXJUaW50TWFwVGV4ZWxUb0xpbmVhciIsbi5zcGVjdWxhclRpbnRNYXBFbmNvZGluZyk6IiIsbi5saWdodE1hcD9yNXQoImxpZ2h0TWFwVGV4ZWxUb0xpbmVhciIsbi5saWdodE1hcEVuY29kaW5nKToiIixvNXQoImxpbmVhclRvT3V0cHV0VGV4ZWwiLG4ub3V0cHV0RW5jb2RpbmcpLG4uZGVwdGhQYWNraW5nPyIjZGVmaW5lIERFUFRIX1BBQ0tJTkcgIituLmRlcHRoUGFja2luZzoiIiwiXG4iXS5maWx0ZXIoczV0KS5qb2luKCJcbiIpKSxhPWg1dChhKSxhPWw1dChhLG4pLGE9YzV0KGEsbikscz1oNXQocykscz1sNXQocyxuKSxzPWM1dChzLG4pLGE9bTV0KGEpLHM9bTV0KHMpLG4uaXNXZWJHTDImJiEwIT09bi5pc1Jhd1NoYWRlck1hdGVyaWFsJiYoTT0iI3ZlcnNpb24gMzAwIGVzXG4iLHc9WyIjZGVmaW5lIGF0dHJpYnV0ZSBpbiIsIiNkZWZpbmUgdmFyeWluZyBvdXQiLCIjZGVmaW5lIHRleHR1cmUyRCB0ZXh0dXJlIl0uam9pbigiXG4iKSsiXG4iK3csUz1bIiNkZWZpbmUgdmFyeWluZyBpbiIsbi5nbHNsVmVyc2lvbj09PVVadD8iIjoib3V0IGhpZ2hwIHZlYzQgcGNfZnJhZ0NvbG9yOyIsbi5nbHNsVmVyc2lvbj09PVVadD8iIjoiI2RlZmluZSBnbF9GcmFnQ29sb3IgcGNfZnJhZ0NvbG9yIiwiI2RlZmluZSBnbF9GcmFnRGVwdGhFWFQgZ2xfRnJhZ0RlcHRoIiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZUN1YmUgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvaiB0ZXh0dXJlUHJvaiIsIiNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pMb2RFWFQgdGV4dHVyZVByb2pMb2QiLCIjZGVmaW5lIHRleHR1cmVDdWJlTG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWQiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pHcmFkRVhUIHRleHR1cmVQcm9qR3JhZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVHcmFkRVhUIHRleHR1cmVHcmFkIl0uam9pbigiXG4iKSsiXG4iK1MpO2NvbnN0IEU9TStTK3MsVD10NXQociwzNTYzMyxNK3crYSksQz10NXQociwzNTYzMixFKTtpZihyLmF0dGFjaFNoYWRlcih4LFQpLHIuYXR0YWNoU2hhZGVyKHgsQyksdm9pZCAwIT09bi5pbmRleDBBdHRyaWJ1dGVOYW1lP3IuYmluZEF0dHJpYkxvY2F0aW9uKHgsMCxuLmluZGV4MEF0dHJpYnV0ZU5hbWUpOiEwPT09bi5tb3JwaFRhcmdldHMmJnIuYmluZEF0dHJpYkxvY2F0aW9uKHgsMCwicG9zaXRpb24iKSxyLmxpbmtQcm9ncmFtKHgpLHQuZGVidWcuY2hlY2tTaGFkZXJFcnJvcnMpe2NvbnN0IHQ9ci5nZXRQcm9ncmFtSW5mb0xvZyh4KS50cmltKCksZT1yLmdldFNoYWRlckluZm9Mb2coVCkudHJpbSgpLG49ci5nZXRTaGFkZXJJbmZvTG9nKEMpLnRyaW0oKTtsZXQgaT0hMCxvPSEwO2lmKCExPT09ci5nZXRQcm9ncmFtUGFyYW1ldGVyKHgsMzU3MTQpKXtpPSExO2NvbnN0IGU9aTV0KHIsVCwidmVydGV4Iiksbj1pNXQocixDLCJmcmFnbWVudCIpO2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUHJvZ3JhbTogc2hhZGVyIGVycm9yOiAiLHIuZ2V0RXJyb3IoKSwiMzU3MTUiLHIuZ2V0UHJvZ3JhbVBhcmFtZXRlcih4LDM1NzE1KSwiZ2wuZ2V0UHJvZ3JhbUluZm9Mb2ciLHQsZSxuKX1lbHNlIiIhPT10P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpIix0KToiIiE9PWUmJiIiIT09bnx8KG89ITEpO28mJih0aGlzLmRpYWdub3N0aWNzPXtydW5uYWJsZTppLHByb2dyYW1Mb2c6dCx2ZXJ0ZXhTaGFkZXI6e2xvZzplLHByZWZpeDp3fSxmcmFnbWVudFNoYWRlcjp7bG9nOm4scHJlZml4OlN9fSl9bGV0IEEsaztyZXR1cm4gci5kZWxldGVTaGFkZXIoVCksci5kZWxldGVTaGFkZXIoQyksdGhpcy5nZXRVbmlmb3Jtcz1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1BJiYoQT1uZXcgUTJ0KHIseCkpLEF9LHRoaXMuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1rJiYoaz0oZnVuY3Rpb24gdChlLG4pe2NvbnN0IGk9e30scj1lLmdldFByb2dyYW1QYXJhbWV0ZXIobiwzNTcyMSk7Zm9yKGxldCB0PTA7dDxyO3QrKyl7Y29uc3Qgcj1lLmdldEFjdGl2ZUF0dHJpYihuLHQpLm5hbWU7aVtyXT1lLmdldEF0dHJpYkxvY2F0aW9uKG4scil9cmV0dXJuIGl9KShyLHgpKSxrfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpLnJlbGVhc2VTdGF0ZXNPZlByb2dyYW0odGhpcyksci5kZWxldGVQcm9ncmFtKHgpLHRoaXMucHJvZ3JhbT12b2lkIDB9LHRoaXMubmFtZT1uLnNoYWRlck5hbWUsdGhpcy5pZD1lNXQrKyx0aGlzLmNhY2hlS2V5PWUsdGhpcy51c2VkVGltZXM9MSx0aGlzLnByb2dyYW09eCx0aGlzLnZlcnRleFNoYWRlcj1ULHRoaXMuZnJhZ21lbnRTaGFkZXI9Qyx0aGlzfWZ1bmN0aW9uIGI1dCh0LGUsbixpLHIsbyxhKXtjb25zdCBzPVtdLGw9ci5pc1dlYkdMMixjPXIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcix1PXIuZmxvYXRWZXJ0ZXhUZXh0dXJlcyxoPXIubWF4VmVydGV4VW5pZm9ybXMsZD1yLnZlcnRleFRleHR1cmVzO2xldCBwPXIucHJlY2lzaW9uO2NvbnN0IGY9e01lc2hEZXB0aE1hdGVyaWFsOiJkZXB0aCIsTWVzaERpc3RhbmNlTWF0ZXJpYWw6ImRpc3RhbmNlUkdCQSIsTWVzaE5vcm1hbE1hdGVyaWFsOiJub3JtYWwiLE1lc2hCYXNpY01hdGVyaWFsOiJiYXNpYyIsTWVzaExhbWJlcnRNYXRlcmlhbDoibGFtYmVydCIsTWVzaFBob25nTWF0ZXJpYWw6InBob25nIixNZXNoVG9vbk1hdGVyaWFsOiJ0b29uIixNZXNoU3RhbmRhcmRNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hQaHlzaWNhbE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaE1hdGNhcE1hdGVyaWFsOiJtYXRjYXAiLExpbmVCYXNpY01hdGVyaWFsOiJiYXNpYyIsTGluZURhc2hlZE1hdGVyaWFsOiJkYXNoZWQiLFBvaW50c01hdGVyaWFsOiJwb2ludHMiLFNoYWRvd01hdGVyaWFsOiJzaGFkb3ciLFNwcml0ZU1hdGVyaWFsOiJzcHJpdGUifSxtPVsicHJlY2lzaW9uIiwiaXNXZWJHTDIiLCJzdXBwb3J0c1ZlcnRleFRleHR1cmVzIiwib3V0cHV0RW5jb2RpbmciLCJpbnN0YW5jaW5nIiwiaW5zdGFuY2luZ0NvbG9yIiwibWFwIiwibWFwRW5jb2RpbmciLCJtYXRjYXAiLCJtYXRjYXBFbmNvZGluZyIsImVudk1hcCIsImVudk1hcE1vZGUiLCJlbnZNYXBFbmNvZGluZyIsImVudk1hcEN1YmVVViIsImxpZ2h0TWFwIiwibGlnaHRNYXBFbmNvZGluZyIsImFvTWFwIiwiZW1pc3NpdmVNYXAiLCJlbWlzc2l2ZU1hcEVuY29kaW5nIiwiYnVtcE1hcCIsIm5vcm1hbE1hcCIsIm9iamVjdFNwYWNlTm9ybWFsTWFwIiwidGFuZ2VudFNwYWNlTm9ybWFsTWFwIiwiY2xlYXJjb2F0TWFwIiwiY2xlYXJjb2F0Um91Z2huZXNzTWFwIiwiY2xlYXJjb2F0Tm9ybWFsTWFwIiwiZGlzcGxhY2VtZW50TWFwIiwic3BlY3VsYXJNYXAiLCJzcGVjdWxhckludGVuc2l0eU1hcCIsInNwZWN1bGFyVGludE1hcCIsInNwZWN1bGFyVGludE1hcEVuY29kaW5nIiwicm91Z2huZXNzTWFwIiwibWV0YWxuZXNzTWFwIiwiZ3JhZGllbnRNYXAiLCJhbHBoYU1hcCIsImNvbWJpbmUiLCJ2ZXJ0ZXhDb2xvcnMiLCJ2ZXJ0ZXhBbHBoYXMiLCJ2ZXJ0ZXhUYW5nZW50cyIsInZlcnRleFV2cyIsInV2c1ZlcnRleE9ubHkiLCJmb2ciLCJ1c2VGb2ciLCJmb2dFeHAyIiwiZmxhdFNoYWRpbmciLCJzaXplQXR0ZW51YXRpb24iLCJsb2dhcml0aG1pY0RlcHRoQnVmZmVyIiwic2tpbm5pbmciLCJtYXhCb25lcyIsInVzZVZlcnRleFRleHR1cmUiLCJtb3JwaFRhcmdldHMiLCJtb3JwaE5vcm1hbHMiLCJwcmVtdWx0aXBsaWVkQWxwaGEiLCJudW1EaXJMaWdodHMiLCJudW1Qb2ludExpZ2h0cyIsIm51bVNwb3RMaWdodHMiLCJudW1IZW1pTGlnaHRzIiwibnVtUmVjdEFyZWFMaWdodHMiLCJudW1EaXJMaWdodFNoYWRvd3MiLCJudW1Qb2ludExpZ2h0U2hhZG93cyIsIm51bVNwb3RMaWdodFNoYWRvd3MiLCJzaGFkb3dNYXBFbmFibGVkIiwic2hhZG93TWFwVHlwZSIsInRvbmVNYXBwaW5nIiwicGh5c2ljYWxseUNvcnJlY3RMaWdodHMiLCJhbHBoYVRlc3QiLCJkb3VibGVTaWRlZCIsImZsaXBTaWRlZCIsIm51bUNsaXBwaW5nUGxhbmVzIiwibnVtQ2xpcEludGVyc2VjdGlvbiIsImRlcHRoUGFja2luZyIsImRpdGhlcmluZyIsInNoZWVuIiwidHJhbnNtaXNzaW9uIiwidHJhbnNtaXNzaW9uTWFwIiwidGhpY2tuZXNzTWFwIl07ZnVuY3Rpb24gZyh0KXtsZXQgZTtyZXR1cm4gdCYmdC5pc1RleHR1cmU/ZT10LmVuY29kaW5nOnQmJnQuaXNXZWJHTFJlbmRlclRhcmdldD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW1zLmdldFRleHR1cmVFbmNvZGluZ0Zyb21NYXA6IGRvbid0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksZT10LnRleHR1cmUuZW5jb2RpbmcpOmU9Tlp0LGV9cmV0dXJue2dldFBhcmFtZXRlcnM6ZnVuY3Rpb24gXyhvLHMsbSx5LHYpe2NvbnN0IGI9eS5mb2cseD0oby5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP246ZSkuZ2V0KG8uZW52TWFwfHwoby5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP3kuZW52aXJvbm1lbnQ6bnVsbCkpLHc9ZltvLnR5cGVdLFM9di5pc1NraW5uZWRNZXNoPyhmdW5jdGlvbiBNKHQpe2NvbnN0IGU9dC5za2VsZXRvbi5ib25lcztpZih1KXJldHVybiAxMDI0O3tjb25zdCB0PU1hdGguZmxvb3IoKGgtMjApLzQpLG49TWF0aC5taW4odCxlLmxlbmd0aCk7cmV0dXJuIG48ZS5sZW5ndGg/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogU2tlbGV0b24gaGFzICIrZS5sZW5ndGgrIiBib25lcy4gVGhpcyBHUFUgc3VwcG9ydHMgIituKyIuIiksMCk6bn19KSh2KTowO2xldCBFLFQ7aWYobnVsbCE9PW8ucHJlY2lzaW9uJiYocD1yLmdldE1heFByZWNpc2lvbihvLnByZWNpc2lvbikscCE9PW8ucHJlY2lzaW9uJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbS5nZXRQYXJhbWV0ZXJzOiIsby5wcmVjaXNpb24sIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixwLCJpbnN0ZWFkLiIpKSx3KXtjb25zdCB0PWMwdFt3XTtFPXQudmVydGV4U2hhZGVyLFQ9dC5mcmFnbWVudFNoYWRlcn1lbHNlIEU9by52ZXJ0ZXhTaGFkZXIsVD1vLmZyYWdtZW50U2hhZGVyO2NvbnN0IEM9dC5nZXRSZW5kZXJUYXJnZXQoKTtyZXR1cm57aXNXZWJHTDI6bCxzaGFkZXJJRDp3LHNoYWRlck5hbWU6by50eXBlLHZlcnRleFNoYWRlcjpFLGZyYWdtZW50U2hhZGVyOlQsZGVmaW5lczpvLmRlZmluZXMsaXNSYXdTaGFkZXJNYXRlcmlhbDohMD09PW8uaXNSYXdTaGFkZXJNYXRlcmlhbCxnbHNsVmVyc2lvbjpvLmdsc2xWZXJzaW9uLHByZWNpc2lvbjpwLGluc3RhbmNpbmc6ITA9PT12LmlzSW5zdGFuY2VkTWVzaCxpbnN0YW5jaW5nQ29sb3I6ITA9PT12LmlzSW5zdGFuY2VkTWVzaCYmbnVsbCE9PXYuaW5zdGFuY2VDb2xvcixzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmQsb3V0cHV0RW5jb2Rpbmc6bnVsbCE9PUM/ZyhDLnRleHR1cmUpOnQub3V0cHV0RW5jb2RpbmcsbWFwOiEhby5tYXAsbWFwRW5jb2Rpbmc6ZyhvLm1hcCksbWF0Y2FwOiEhby5tYXRjYXAsbWF0Y2FwRW5jb2Rpbmc6ZyhvLm1hdGNhcCksZW52TWFwOiEheCxlbnZNYXBNb2RlOngmJngubWFwcGluZyxlbnZNYXBFbmNvZGluZzpnKHgpLGVudk1hcEN1YmVVVjohIXgmJih4Lm1hcHBpbmc9PT1ZS3R8fHgubWFwcGluZz09PVhLdCksbGlnaHRNYXA6ISFvLmxpZ2h0TWFwLGxpZ2h0TWFwRW5jb2Rpbmc6ZyhvLmxpZ2h0TWFwKSxhb01hcDohIW8uYW9NYXAsZW1pc3NpdmVNYXA6ISFvLmVtaXNzaXZlTWFwLGVtaXNzaXZlTWFwRW5jb2Rpbmc6ZyhvLmVtaXNzaXZlTWFwKSxidW1wTWFwOiEhby5idW1wTWFwLG5vcm1hbE1hcDohIW8ubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOjE9PT1vLm5vcm1hbE1hcFR5cGUsdGFuZ2VudFNwYWNlTm9ybWFsTWFwOjA9PT1vLm5vcm1hbE1hcFR5cGUsY2xlYXJjb2F0TWFwOiEhby5jbGVhcmNvYXRNYXAsY2xlYXJjb2F0Um91Z2huZXNzTWFwOiEhby5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsY2xlYXJjb2F0Tm9ybWFsTWFwOiEhby5jbGVhcmNvYXROb3JtYWxNYXAsZGlzcGxhY2VtZW50TWFwOiEhby5kaXNwbGFjZW1lbnRNYXAscm91Z2huZXNzTWFwOiEhby5yb3VnaG5lc3NNYXAsbWV0YWxuZXNzTWFwOiEhby5tZXRhbG5lc3NNYXAsc3BlY3VsYXJNYXA6ISFvLnNwZWN1bGFyTWFwLHNwZWN1bGFySW50ZW5zaXR5TWFwOiEhby5zcGVjdWxhckludGVuc2l0eU1hcCxzcGVjdWxhclRpbnRNYXA6ISFvLnNwZWN1bGFyVGludE1hcCxzcGVjdWxhclRpbnRNYXBFbmNvZGluZzpnKG8uc3BlY3VsYXJUaW50TWFwKSxhbHBoYU1hcDohIW8uYWxwaGFNYXAsZ3JhZGllbnRNYXA6ISFvLmdyYWRpZW50TWFwLHNoZWVuOiEhby5zaGVlbix0cmFuc21pc3Npb246ISFvLnRyYW5zbWlzc2lvbix0cmFuc21pc3Npb25NYXA6ISFvLnRyYW5zbWlzc2lvbk1hcCx0aGlja25lc3NNYXA6ISFvLnRoaWNrbmVzc01hcCxjb21iaW5lOm8uY29tYmluZSx2ZXJ0ZXhUYW5nZW50czohIW8ubm9ybWFsTWFwJiYhIXYuZ2VvbWV0cnkmJiEhdi5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRhbmdlbnQsdmVydGV4Q29sb3JzOm8udmVydGV4Q29sb3JzLHZlcnRleEFscGhhczohMD09PW8udmVydGV4Q29sb3JzJiYhIXYuZ2VvbWV0cnkmJiEhdi5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yJiY0PT09di5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplLHZlcnRleFV2czohIShvLm1hcHx8by5idW1wTWFwfHxvLm5vcm1hbE1hcHx8by5zcGVjdWxhck1hcHx8by5hbHBoYU1hcHx8by5lbWlzc2l2ZU1hcHx8by5yb3VnaG5lc3NNYXB8fG8ubWV0YWxuZXNzTWFwfHxvLmNsZWFyY29hdE1hcHx8by5jbGVhcmNvYXRSb3VnaG5lc3NNYXB8fG8uY2xlYXJjb2F0Tm9ybWFsTWFwfHxvLmRpc3BsYWNlbWVudE1hcHx8by50cmFuc21pc3Npb25NYXB8fG8udGhpY2tuZXNzTWFwfHxvLnNwZWN1bGFySW50ZW5zaXR5TWFwfHxvLnNwZWN1bGFyVGludE1hcCksdXZzVmVydGV4T25seTohKG8ubWFwfHxvLmJ1bXBNYXB8fG8ubm9ybWFsTWFwfHxvLnNwZWN1bGFyTWFwfHxvLmFscGhhTWFwfHxvLmVtaXNzaXZlTWFwfHxvLnJvdWdobmVzc01hcHx8by5tZXRhbG5lc3NNYXB8fG8uY2xlYXJjb2F0Tm9ybWFsTWFwfHxvLnRyYW5zbWlzc2lvbnx8by50cmFuc21pc3Npb25NYXB8fG8udGhpY2tuZXNzTWFwfHxvLnNwZWN1bGFySW50ZW5zaXR5TWFwfHxvLnNwZWN1bGFyVGludE1hcHx8IW8uZGlzcGxhY2VtZW50TWFwKSxmb2c6ISFiLHVzZUZvZzpvLmZvZyxmb2dFeHAyOmImJmIuaXNGb2dFeHAyLGZsYXRTaGFkaW5nOiEhby5mbGF0U2hhZGluZyxzaXplQXR0ZW51YXRpb246by5zaXplQXR0ZW51YXRpb24sbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpjLHNraW5uaW5nOiEwPT09di5pc1NraW5uZWRNZXNoJiZTPjAsbWF4Qm9uZXM6Uyx1c2VWZXJ0ZXhUZXh0dXJlOnUsbW9ycGhUYXJnZXRzOiEhdi5nZW9tZXRyeSYmISF2Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixtb3JwaE5vcm1hbHM6ISF2Lmdlb21ldHJ5JiYhIXYuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxudW1EaXJMaWdodHM6cy5kaXJlY3Rpb25hbC5sZW5ndGgsbnVtUG9pbnRMaWdodHM6cy5wb2ludC5sZW5ndGgsbnVtU3BvdExpZ2h0czpzLnNwb3QubGVuZ3RoLG51bVJlY3RBcmVhTGlnaHRzOnMucmVjdEFyZWEubGVuZ3RoLG51bUhlbWlMaWdodHM6cy5oZW1pLmxlbmd0aCxudW1EaXJMaWdodFNoYWRvd3M6cy5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGgsbnVtUG9pbnRMaWdodFNoYWRvd3M6cy5wb2ludFNoYWRvd01hcC5sZW5ndGgsbnVtU3BvdExpZ2h0U2hhZG93czpzLnNwb3RTaGFkb3dNYXAubGVuZ3RoLG51bUNsaXBwaW5nUGxhbmVzOmEubnVtUGxhbmVzLG51bUNsaXBJbnRlcnNlY3Rpb246YS5udW1JbnRlcnNlY3Rpb24sZGl0aGVyaW5nOm8uZGl0aGVyaW5nLHNoYWRvd01hcEVuYWJsZWQ6dC5zaGFkb3dNYXAuZW5hYmxlZCYmbS5sZW5ndGg+MCxzaGFkb3dNYXBUeXBlOnQuc2hhZG93TWFwLnR5cGUsdG9uZU1hcHBpbmc6by50b25lTWFwcGVkP3QudG9uZU1hcHBpbmc6MCxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czp0LnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTpvLnByZW11bHRpcGxpZWRBbHBoYSxhbHBoYVRlc3Q6by5hbHBoYVRlc3QsZG91YmxlU2lkZWQ6Mj09PW8uc2lkZSxmbGlwU2lkZWQ6MT09PW8uc2lkZSxkZXB0aFBhY2tpbmc6dm9pZCAwIT09by5kZXB0aFBhY2tpbmcmJm8uZGVwdGhQYWNraW5nLGluZGV4MEF0dHJpYnV0ZU5hbWU6by5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOm8uZXh0ZW5zaW9ucyYmby5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDpvLmV4dGVuc2lvbnMmJm8uZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6by5leHRlbnNpb25zJiZvLmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDpvLmV4dGVuc2lvbnMmJm8uZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOmx8fGkuaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6bHx8aS5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDpsfHxpLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTpvLmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX0sZ2V0UHJvZ3JhbUNhY2hlS2V5OmZ1bmN0aW9uIHkoZSl7Y29uc3Qgbj1bXTtpZihlLnNoYWRlcklEP24ucHVzaChlLnNoYWRlcklEKToobi5wdXNoKGUuZnJhZ21lbnRTaGFkZXIpLG4ucHVzaChlLnZlcnRleFNoYWRlcikpLHZvaWQgMCE9PWUuZGVmaW5lcylmb3IoY29uc3QgdCBpbiBlLmRlZmluZXMpbi5wdXNoKHQpLG4ucHVzaChlLmRlZmluZXNbdF0pO2lmKCExPT09ZS5pc1Jhd1NoYWRlck1hdGVyaWFsKXtmb3IobGV0IHQ9MDt0PG0ubGVuZ3RoO3QrKyluLnB1c2goZVttW3RdXSk7bi5wdXNoKHQub3V0cHV0RW5jb2RpbmcpLG4ucHVzaCh0LmdhbW1hRmFjdG9yKX1yZXR1cm4gbi5wdXNoKGUuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KSxuLmpvaW4oKX0sZ2V0VW5pZm9ybXM6ZnVuY3Rpb24gdih0KXtjb25zdCBlPWZbdC50eXBlXTtsZXQgbjtyZXR1cm4gbj1lP2oxdC5jbG9uZShjMHRbZV0udW5pZm9ybXMpOnQudW5pZm9ybXMsbn0sYWNxdWlyZVByb2dyYW06ZnVuY3Rpb24gYihlLG4pe2xldCBpO2ZvcihsZXQgdD0wLGU9cy5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1zW3RdO2lmKGUuY2FjaGVLZXk9PT1uKXtpPWUsKytpLnVzZWRUaW1lczticmVha319cmV0dXJuIHZvaWQgMD09PWkmJihpPW5ldyB2NXQodCxuLGUsbykscy5wdXNoKGkpKSxpfSxyZWxlYXNlUHJvZ3JhbTpmdW5jdGlvbiB4KHQpe2lmKDA9PS0tdC51c2VkVGltZXMpe2NvbnN0IGU9cy5pbmRleE9mKHQpO3NbZV09c1tzLmxlbmd0aC0xXSxzLnBvcCgpLHQuZGVzdHJveSgpfX0scHJvZ3JhbXM6c319ZnVuY3Rpb24geDV0KCl7bGV0IHQ9bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbiBlKG4pe2xldCBpPXQuZ2V0KG4pO3JldHVybiB2b2lkIDA9PT1pJiYoaT17fSx0LnNldChuLGkpKSxpfSxyZW1vdmU6ZnVuY3Rpb24gbihlKXt0LmRlbGV0ZShlKX0sdXBkYXRlOmZ1bmN0aW9uIGkoZSxuLHIpe3QuZ2V0KGUpW25dPXJ9LGRpc3Bvc2U6ZnVuY3Rpb24gcigpe3Q9bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiB3NXQodCxlKXtyZXR1cm4gdC5ncm91cE9yZGVyIT09ZS5ncm91cE9yZGVyP3QuZ3JvdXBPcmRlci1lLmdyb3VwT3JkZXI6dC5yZW5kZXJPcmRlciE9PWUucmVuZGVyT3JkZXI/dC5yZW5kZXJPcmRlci1lLnJlbmRlck9yZGVyOnQucHJvZ3JhbSE9PWUucHJvZ3JhbT90LnByb2dyYW0uaWQtZS5wcm9ncmFtLmlkOnQubWF0ZXJpYWwuaWQhPT1lLm1hdGVyaWFsLmlkP3QubWF0ZXJpYWwuaWQtZS5tYXRlcmlhbC5pZDp0LnohPT1lLno/dC56LWUuejp0LmlkLWUuaWR9ZnVuY3Rpb24gUzV0KHQsZSl7cmV0dXJuIHQuZ3JvdXBPcmRlciE9PWUuZ3JvdXBPcmRlcj90Lmdyb3VwT3JkZXItZS5ncm91cE9yZGVyOnQucmVuZGVyT3JkZXIhPT1lLnJlbmRlck9yZGVyP3QucmVuZGVyT3JkZXItZS5yZW5kZXJPcmRlcjp0LnohPT1lLno/ZS56LXQuejp0LmlkLWUuaWR9ZnVuY3Rpb24gTTV0KHQpe2NvbnN0IGU9W107bGV0IG49MDtjb25zdCBpPVtdLHI9W10sbz1bXSxhPXtpZDotMX07ZnVuY3Rpb24gcyhpLHIsbyxzLGwsYyl7bGV0IHU9ZVtuXTtjb25zdCBoPXQuZ2V0KG8pO3JldHVybiB2b2lkIDA9PT11Pyh1PXtpZDppLmlkLG9iamVjdDppLGdlb21ldHJ5OnIsbWF0ZXJpYWw6byxwcm9ncmFtOmgucHJvZ3JhbXx8YSxncm91cE9yZGVyOnMscmVuZGVyT3JkZXI6aS5yZW5kZXJPcmRlcix6OmwsZ3JvdXA6Y30sZVtuXT11KToodS5pZD1pLmlkLHUub2JqZWN0PWksdS5nZW9tZXRyeT1yLHUubWF0ZXJpYWw9byx1LnByb2dyYW09aC5wcm9ncmFtfHxhLHUuZ3JvdXBPcmRlcj1zLHUucmVuZGVyT3JkZXI9aS5yZW5kZXJPcmRlcix1Lno9bCx1Lmdyb3VwPWMpLG4rKyx1fXJldHVybntvcGFxdWU6aSx0cmFuc21pc3NpdmU6cix0cmFuc3BhcmVudDpvLGluaXQ6ZnVuY3Rpb24gbCgpe249MCxpLmxlbmd0aD0wLHIubGVuZ3RoPTAsby5sZW5ndGg9MH0scHVzaDpmdW5jdGlvbiBjKHQsZSxuLGEsbCx1KXtjb25zdCBoPXModCxlLG4sYSxsLHUpO24udHJhbnNtaXNzaW9uPjA/ci5wdXNoKGgpOiEwPT09bi50cmFuc3BhcmVudD9vLnB1c2goaCk6aS5wdXNoKGgpfSx1bnNoaWZ0OmZ1bmN0aW9uIHUodCxlLG4sYSxsLGMpe2NvbnN0IHU9cyh0LGUsbixhLGwsYyk7bi50cmFuc21pc3Npb24+MD9yLnVuc2hpZnQodSk6ITA9PT1uLnRyYW5zcGFyZW50P28udW5zaGlmdCh1KTppLnVuc2hpZnQodSl9LGZpbmlzaDpmdW5jdGlvbiBoKCl7Zm9yKGxldCB0PW4saT1lLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBuPWVbdF07aWYobnVsbD09PW4uaWQpYnJlYWs7bi5pZD1udWxsLG4ub2JqZWN0PW51bGwsbi5nZW9tZXRyeT1udWxsLG4ubWF0ZXJpYWw9bnVsbCxuLnByb2dyYW09bnVsbCxuLmdyb3VwPW51bGx9fSxzb3J0OmZ1bmN0aW9uIGQodCxlKXtpLmxlbmd0aD4xJiZpLnNvcnQodHx8dzV0KSxyLmxlbmd0aD4xJiZyLnNvcnQoZXx8UzV0KSxvLmxlbmd0aD4xJiZvLnNvcnQoZXx8UzV0KX19fWZ1bmN0aW9uIEU1dCh0KXtsZXQgZT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uIG4oaSxyKXtsZXQgbztyZXR1cm4hMT09PWUuaGFzKGkpPyhvPW5ldyBNNXQodCksZS5zZXQoaSxbb10pKTpyPj1lLmdldChpKS5sZW5ndGg/KG89bmV3IE01dCh0KSxlLmdldChpKS5wdXNoKG8pKTpvPWUuZ2V0KGkpW3JdLG99LGRpc3Bvc2U6ZnVuY3Rpb24gaSgpe2U9bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBUNXQoKXtjb25zdCB0PXt9O3JldHVybntnZXQ6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09dFtlLmlkXSlyZXR1cm4gdFtlLmlkXTtsZXQgbjtzd2l0Y2goZS50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOm49e2RpcmVjdGlvbjpuZXcgQ0p0LGNvbG9yOm5ldyAkUXR9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjpuPXtwb3NpdGlvbjpuZXcgQ0p0LGRpcmVjdGlvbjpuZXcgQ0p0LGNvbG9yOm5ldyAkUXQsZGlzdGFuY2U6MCxjb25lQ29zOjAscGVudW1icmFDb3M6MCxkZWNheTowfTticmVhaztjYXNlIlBvaW50TGlnaHQiOm49e3Bvc2l0aW9uOm5ldyBDSnQsY29sb3I6bmV3ICRRdCxkaXN0YW5jZTowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiSGVtaXNwaGVyZUxpZ2h0IjpuPXtkaXJlY3Rpb246bmV3IENKdCxza3lDb2xvcjpuZXcgJFF0LGdyb3VuZENvbG9yOm5ldyAkUXR9O2JyZWFrO2Nhc2UiUmVjdEFyZWFMaWdodCI6bj17Y29sb3I6bmV3ICRRdCxwb3NpdGlvbjpuZXcgQ0p0LGhhbGZXaWR0aDpuZXcgQ0p0LGhhbGZIZWlnaHQ6bmV3IENKdH19cmV0dXJuIHRbZS5pZF09bixufX19bGV0IEM1dD0wO2Z1bmN0aW9uIEE1dCh0LGUpe3JldHVybihlLmNhc3RTaGFkb3c/MTowKS0odC5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gazV0KHQsZSl7Y29uc3Qgbj1uZXcgVDV0LGk9KGZ1bmN0aW9uIHIoKXtjb25zdCB0PXt9O3JldHVybntnZXQ6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09dFtlLmlkXSlyZXR1cm4gdFtlLmlkXTtsZXQgbjtzd2l0Y2goZS50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOmNhc2UiU3BvdExpZ2h0IjpuPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IG1KdH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpuPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IG1KdCxzaGFkb3dDYW1lcmFOZWFyOjEsc2hhZG93Q2FtZXJhRmFyOjFlM319cmV0dXJuIHRbZS5pZF09bixufX19KSgpLG89e3ZlcnNpb246MCxoYXNoOntkaXJlY3Rpb25hbExlbmd0aDotMSxwb2ludExlbmd0aDotMSxzcG90TGVuZ3RoOi0xLHJlY3RBcmVhTGVuZ3RoOi0xLGhlbWlMZW5ndGg6LTEsbnVtRGlyZWN0aW9uYWxTaGFkb3dzOi0xLG51bVBvaW50U2hhZG93czotMSxudW1TcG90U2hhZG93czotMX0sYW1iaWVudDpbMCwwLDBdLHByb2JlOltdLGRpcmVjdGlvbmFsOltdLGRpcmVjdGlvbmFsU2hhZG93OltdLGRpcmVjdGlvbmFsU2hhZG93TWFwOltdLGRpcmVjdGlvbmFsU2hhZG93TWF0cml4OltdLHNwb3Q6W10sc3BvdFNoYWRvdzpbXSxzcG90U2hhZG93TWFwOltdLHNwb3RTaGFkb3dNYXRyaXg6W10scmVjdEFyZWE6W10scmVjdEFyZWFMVEMxOm51bGwscmVjdEFyZWFMVEMyOm51bGwscG9pbnQ6W10scG9pbnRTaGFkb3c6W10scG9pbnRTaGFkb3dNYXA6W10scG9pbnRTaGFkb3dNYXRyaXg6W10saGVtaTpbXX07Zm9yKGxldCB0PTA7dDw5O3QrKylvLnByb2JlLnB1c2gobmV3IENKdCk7Y29uc3QgYT1uZXcgQ0p0LHM9bmV3IHJRdCxsPW5ldyByUXQ7cmV0dXJue3NldHVwOmZ1bmN0aW9uIGMocil7bGV0IGE9MCxzPTAsbD0wO2ZvcihsZXQgdD0wO3Q8OTt0Kyspby5wcm9iZVt0XS5zZXQoMCwwLDApO2xldCBjPTAsdT0wLGg9MCxkPTAscD0wLGY9MCxtPTAsZz0wO3Iuc29ydChBNXQpO2ZvcihsZXQgdD0wLGU9ci5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1yW3RdLF89ZS5jb2xvcix5PWUuaW50ZW5zaXR5LHY9ZS5kaXN0YW5jZSxiPWUuc2hhZG93JiZlLnNoYWRvdy5tYXA/ZS5zaGFkb3cubWFwLnRleHR1cmU6bnVsbDtpZihlLmlzQW1iaWVudExpZ2h0KWErPV8ucip5LHMrPV8uZyp5LGwrPV8uYip5O2Vsc2UgaWYoZS5pc0xpZ2h0UHJvYmUpZm9yKGxldCB0PTA7dDw5O3QrKylvLnByb2JlW3RdLmFkZFNjYWxlZFZlY3RvcihlLnNoLmNvZWZmaWNpZW50c1t0XSx5KTtlbHNlIGlmKGUuaXNEaXJlY3Rpb25hbExpZ2h0KXtjb25zdCB0PW4uZ2V0KGUpO2lmKHQuY29sb3IuY29weShlLmNvbG9yKS5tdWx0aXBseVNjYWxhcihlLmludGVuc2l0eSksZS5jYXN0U2hhZG93KXtjb25zdCB0PWUuc2hhZG93LG49aS5nZXQoZSk7bi5zaGFkb3dCaWFzPXQuYmlhcyxuLnNoYWRvd05vcm1hbEJpYXM9dC5ub3JtYWxCaWFzLG4uc2hhZG93UmFkaXVzPXQucmFkaXVzLG4uc2hhZG93TWFwU2l6ZT10Lm1hcFNpemUsby5kaXJlY3Rpb25hbFNoYWRvd1tjXT1uLG8uZGlyZWN0aW9uYWxTaGFkb3dNYXBbY109YixvLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4W2NdPWUuc2hhZG93Lm1hdHJpeCxmKyt9by5kaXJlY3Rpb25hbFtjXT10LGMrK31lbHNlIGlmKGUuaXNTcG90TGlnaHQpe2NvbnN0IHQ9bi5nZXQoZSk7aWYodC5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCksdC5jb2xvci5jb3B5KF8pLm11bHRpcGx5U2NhbGFyKHkpLHQuZGlzdGFuY2U9dix0LmNvbmVDb3M9TWF0aC5jb3MoZS5hbmdsZSksdC5wZW51bWJyYUNvcz1NYXRoLmNvcyhlLmFuZ2xlKigxLWUucGVudW1icmEpKSx0LmRlY2F5PWUuZGVjYXksZS5jYXN0U2hhZG93KXtjb25zdCB0PWUuc2hhZG93LG49aS5nZXQoZSk7bi5zaGFkb3dCaWFzPXQuYmlhcyxuLnNoYWRvd05vcm1hbEJpYXM9dC5ub3JtYWxCaWFzLG4uc2hhZG93UmFkaXVzPXQucmFkaXVzLG4uc2hhZG93TWFwU2l6ZT10Lm1hcFNpemUsby5zcG90U2hhZG93W2hdPW4sby5zcG90U2hhZG93TWFwW2hdPWIsby5zcG90U2hhZG93TWF0cml4W2hdPWUuc2hhZG93Lm1hdHJpeCxnKyt9by5zcG90W2hdPXQsaCsrfWVsc2UgaWYoZS5pc1JlY3RBcmVhTGlnaHQpe2NvbnN0IHQ9bi5nZXQoZSk7dC5jb2xvci5jb3B5KF8pLm11bHRpcGx5U2NhbGFyKHkpLHQuaGFsZldpZHRoLnNldCguNSplLndpZHRoLDAsMCksdC5oYWxmSGVpZ2h0LnNldCgwLC41KmUuaGVpZ2h0LDApLG8ucmVjdEFyZWFbZF09dCxkKyt9ZWxzZSBpZihlLmlzUG9pbnRMaWdodCl7Y29uc3QgdD1uLmdldChlKTtpZih0LmNvbG9yLmNvcHkoZS5jb2xvcikubXVsdGlwbHlTY2FsYXIoZS5pbnRlbnNpdHkpLHQuZGlzdGFuY2U9ZS5kaXN0YW5jZSx0LmRlY2F5PWUuZGVjYXksZS5jYXN0U2hhZG93KXtjb25zdCB0PWUuc2hhZG93LG49aS5nZXQoZSk7bi5zaGFkb3dCaWFzPXQuYmlhcyxuLnNoYWRvd05vcm1hbEJpYXM9dC5ub3JtYWxCaWFzLG4uc2hhZG93UmFkaXVzPXQucmFkaXVzLG4uc2hhZG93TWFwU2l6ZT10Lm1hcFNpemUsbi5zaGFkb3dDYW1lcmFOZWFyPXQuY2FtZXJhLm5lYXIsbi5zaGFkb3dDYW1lcmFGYXI9dC5jYW1lcmEuZmFyLG8ucG9pbnRTaGFkb3dbdV09bixvLnBvaW50U2hhZG93TWFwW3VdPWIsby5wb2ludFNoYWRvd01hdHJpeFt1XT1lLnNoYWRvdy5tYXRyaXgsbSsrfW8ucG9pbnRbdV09dCx1Kyt9ZWxzZSBpZihlLmlzSGVtaXNwaGVyZUxpZ2h0KXtjb25zdCB0PW4uZ2V0KGUpO3Quc2t5Q29sb3IuY29weShlLmNvbG9yKS5tdWx0aXBseVNjYWxhcih5KSx0Lmdyb3VuZENvbG9yLmNvcHkoZS5ncm91bmRDb2xvcikubXVsdGlwbHlTY2FsYXIoeSksby5oZW1pW3BdPXQscCsrfX1kPjAmJihlLmlzV2ViR0wyfHwhMD09PXQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT8oby5yZWN0QXJlYUxUQzE9bDB0LkxUQ19GTE9BVF8xLG8ucmVjdEFyZWFMVEMyPWwwdC5MVENfRkxPQVRfMik6ITA9PT10LmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT8oby5yZWN0QXJlYUxUQzE9bDB0LkxUQ19IQUxGXzEsby5yZWN0QXJlYUxUQzI9bDB0LkxUQ19IQUxGXzIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVuYWJsZSB0byB1c2UgUmVjdEFyZWFMaWdodC4gTWlzc2luZyBXZWJHTCBleHRlbnNpb25zLiIpKSxvLmFtYmllbnRbMF09YSxvLmFtYmllbnRbMV09cyxvLmFtYmllbnRbMl09bDtjb25zdCBfPW8uaGFzaDtfLmRpcmVjdGlvbmFsTGVuZ3RoPT09YyYmXy5wb2ludExlbmd0aD09PXUmJl8uc3BvdExlbmd0aD09PWgmJl8ucmVjdEFyZWFMZW5ndGg9PT1kJiZfLmhlbWlMZW5ndGg9PT1wJiZfLm51bURpcmVjdGlvbmFsU2hhZG93cz09PWYmJl8ubnVtUG9pbnRTaGFkb3dzPT09bSYmXy5udW1TcG90U2hhZG93cz09PWd8fChvLmRpcmVjdGlvbmFsLmxlbmd0aD1jLG8uc3BvdC5sZW5ndGg9aCxvLnJlY3RBcmVhLmxlbmd0aD1kLG8ucG9pbnQubGVuZ3RoPXUsby5oZW1pLmxlbmd0aD1wLG8uZGlyZWN0aW9uYWxTaGFkb3cubGVuZ3RoPWYsby5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGg9ZixvLnBvaW50U2hhZG93Lmxlbmd0aD1tLG8ucG9pbnRTaGFkb3dNYXAubGVuZ3RoPW0sby5zcG90U2hhZG93Lmxlbmd0aD1nLG8uc3BvdFNoYWRvd01hcC5sZW5ndGg9ZyxvLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4Lmxlbmd0aD1mLG8ucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoPW0sby5zcG90U2hhZG93TWF0cml4Lmxlbmd0aD1nLF8uZGlyZWN0aW9uYWxMZW5ndGg9YyxfLnBvaW50TGVuZ3RoPXUsXy5zcG90TGVuZ3RoPWgsXy5yZWN0QXJlYUxlbmd0aD1kLF8uaGVtaUxlbmd0aD1wLF8ubnVtRGlyZWN0aW9uYWxTaGFkb3dzPWYsXy5udW1Qb2ludFNoYWRvd3M9bSxfLm51bVNwb3RTaGFkb3dzPWcsby52ZXJzaW9uPUM1dCsrKX0sc2V0dXBWaWV3OmZ1bmN0aW9uIHUodCxlKXtsZXQgbj0wLGk9MCxyPTAsYz0wLHU9MDtjb25zdCBoPWUubWF0cml4V29ybGRJbnZlcnNlO2ZvcihsZXQgZT0wLGQ9dC5sZW5ndGg7ZTxkO2UrKyl7Y29uc3QgZD10W2VdO2lmKGQuaXNEaXJlY3Rpb25hbExpZ2h0KXtjb25zdCB0PW8uZGlyZWN0aW9uYWxbbl07dC5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQubWF0cml4V29ybGQpLGEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQudGFyZ2V0Lm1hdHJpeFdvcmxkKSx0LmRpcmVjdGlvbi5zdWIoYSksdC5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKGgpLG4rK31lbHNlIGlmKGQuaXNTcG90TGlnaHQpe2NvbnN0IHQ9by5zcG90W3JdO3QucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQubWF0cml4V29ybGQpLHQucG9zaXRpb24uYXBwbHlNYXRyaXg0KGgpLHQuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihkLm1hdHJpeFdvcmxkKSxhLnNldEZyb21NYXRyaXhQb3NpdGlvbihkLnRhcmdldC5tYXRyaXhXb3JsZCksdC5kaXJlY3Rpb24uc3ViKGEpLHQuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihoKSxyKyt9ZWxzZSBpZihkLmlzUmVjdEFyZWFMaWdodCl7Y29uc3QgdD1vLnJlY3RBcmVhW2NdO3QucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQubWF0cml4V29ybGQpLHQucG9zaXRpb24uYXBwbHlNYXRyaXg0KGgpLGwuaWRlbnRpdHkoKSxzLmNvcHkoZC5tYXRyaXhXb3JsZCkscy5wcmVtdWx0aXBseShoKSxsLmV4dHJhY3RSb3RhdGlvbihzKSx0LmhhbGZXaWR0aC5zZXQoLjUqZC53aWR0aCwwLDApLHQuaGFsZkhlaWdodC5zZXQoMCwuNSpkLmhlaWdodCwwKSx0LmhhbGZXaWR0aC5hcHBseU1hdHJpeDQobCksdC5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChsKSxjKyt9ZWxzZSBpZihkLmlzUG9pbnRMaWdodCl7Y29uc3QgdD1vLnBvaW50W2ldO3QucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQubWF0cml4V29ybGQpLHQucG9zaXRpb24uYXBwbHlNYXRyaXg0KGgpLGkrK31lbHNlIGlmKGQuaXNIZW1pc3BoZXJlTGlnaHQpe2NvbnN0IHQ9by5oZW1pW3VdO3QuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihkLm1hdHJpeFdvcmxkKSx0LmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oaCksdC5kaXJlY3Rpb24ubm9ybWFsaXplKCksdSsrfX19LHN0YXRlOm99fWZ1bmN0aW9uIEw1dCh0LGUpe2NvbnN0IG49bmV3IGs1dCh0LGUpLGk9W10scj1bXTtyZXR1cm57aW5pdDpmdW5jdGlvbiBvKCl7aS5sZW5ndGg9MCxyLmxlbmd0aD0wfSxzdGF0ZTp7bGlnaHRzQXJyYXk6aSxzaGFkb3dzQXJyYXk6cixsaWdodHM6bn0sc2V0dXBMaWdodHM6ZnVuY3Rpb24gYSgpe24uc2V0dXAoaSl9LHNldHVwTGlnaHRzVmlldzpmdW5jdGlvbiBzKHQpe24uc2V0dXBWaWV3KGksdCl9LHB1c2hMaWdodDpmdW5jdGlvbiBsKHQpe2kucHVzaCh0KX0scHVzaFNoYWRvdzpmdW5jdGlvbiBjKHQpe3IucHVzaCh0KX19fWZ1bmN0aW9uIFA1dCh0LGUpe2xldCBuPW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24gaShyLG89MCl7bGV0IGE7cmV0dXJuITE9PT1uLmhhcyhyKT8oYT1uZXcgTDV0KHQsZSksbi5zZXQocixbYV0pKTpvPj1uLmdldChyKS5sZW5ndGg/KGE9bmV3IEw1dCh0LGUpLG4uZ2V0KHIpLnB1c2goYSkpOmE9bi5nZXQocilbb10sYX0sZGlzcG9zZTpmdW5jdGlvbiByKCl7bj1uZXcgV2Vha01hcH19fWNsYXNzIE41dCBleHRlbmRzIFVRdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERlcHRoTWF0ZXJpYWwiLHRoaXMuZGVwdGhQYWNraW5nPTMyMDAsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVwdGhQYWNraW5nPXQuZGVwdGhQYWNraW5nLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzfX1ONXQucHJvdG90eXBlLmlzTWVzaERlcHRoTWF0ZXJpYWw9ITA7Y2xhc3MgSTV0IGV4dGVuZHMgVVF0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGlzdGFuY2VNYXRlcmlhbCIsdGhpcy5yZWZlcmVuY2VQb3NpdGlvbj1uZXcgQ0p0LHRoaXMubmVhckRpc3RhbmNlPTEsdGhpcy5mYXJEaXN0YW5jZT0xZTMsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnJlZmVyZW5jZVBvc2l0aW9uLmNvcHkodC5yZWZlcmVuY2VQb3NpdGlvbiksdGhpcy5uZWFyRGlzdGFuY2U9dC5uZWFyRGlzdGFuY2UsdGhpcy5mYXJEaXN0YW5jZT10LmZhckRpc3RhbmNlLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzfX1mdW5jdGlvbiBSNXQodCxlLG4pe2xldCBpPW5ldyBpMHQ7Y29uc3Qgcj1uZXcgbUp0LG89bmV3IG1KdCxhPW5ldyB3SnQscz1uZXcgTjV0KHtkZXB0aFBhY2tpbmc6MzIwMX0pLGw9bmV3IEk1dCxjPXt9LHU9bi5tYXhUZXh0dXJlU2l6ZSxoPXswOjEsMTowLDI6Mn0sZD1uZXcgRzF0KHtkZWZpbmVzOntTQU1QTEVfUkFURToyLzgsSEFMRl9TQU1QTEVfUkFURToxLzh9LHVuaWZvcm1zOntzaGFkb3dfcGFzczp7dmFsdWU6bnVsbH0scmVzb2x1dGlvbjp7dmFsdWU6bmV3IG1KdH0scmFkaXVzOnt2YWx1ZTo0fX0sdmVydGV4U2hhZGVyOiJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSIsZnJhZ21lbnRTaGFkZXI6InVuaWZvcm0gc2FtcGxlcjJEIHNoYWRvd19wYXNzO1xudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XG51bmlmb3JtIGZsb2F0IHJhZGl1cztcbiNpbmNsdWRlIDxwYWNraW5nPlxudm9pZCBtYWluKCkge1xuXHRmbG9hdCBtZWFuID0gMC4wO1xuXHRmbG9hdCBzcXVhcmVkX21lYW4gPSAwLjA7XG5cdGZsb2F0IGRlcHRoID0gdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICkgLyByZXNvbHV0aW9uICkgKTtcblx0Zm9yICggZmxvYXQgaSA9IC0xLjA7IGkgPCAxLjAgOyBpICs9IFNBTVBMRV9SQVRFKSB7XG5cdFx0I2lmZGVmIEhPUklaT05UQUxfUEFTU1xuXHRcdFx0dmVjMiBkaXN0cmlidXRpb24gPSB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCBpLCAwLjAgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7XG5cdFx0XHRtZWFuICs9IGRpc3RyaWJ1dGlvbi54O1xuXHRcdFx0c3F1YXJlZF9tZWFuICs9IGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKyBkaXN0cmlidXRpb24ueCAqIGRpc3RyaWJ1dGlvbi54O1xuXHRcdCNlbHNlXG5cdFx0XHRmbG9hdCBkZXB0aCA9IHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDAuMCwgaSApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTtcblx0XHRcdG1lYW4gKz0gZGVwdGg7XG5cdFx0XHRzcXVhcmVkX21lYW4gKz0gZGVwdGggKiBkZXB0aDtcblx0XHQjZW5kaWZcblx0fVxuXHRtZWFuID0gbWVhbiAqIEhBTEZfU0FNUExFX1JBVEU7XG5cdHNxdWFyZWRfbWVhbiA9IHNxdWFyZWRfbWVhbiAqIEhBTEZfU0FNUExFX1JBVEU7XG5cdGZsb2F0IHN0ZF9kZXYgPSBzcXJ0KCBzcXVhcmVkX21lYW4gLSBtZWFuICogbWVhbiApO1xuXHRnbF9GcmFnQ29sb3IgPSBwYWNrMkhhbGZUb1JHQkEoIHZlYzIoIG1lYW4sIHN0ZF9kZXYgKSApO1xufSJ9KSxwPWQuY2xvbmUoKTtwLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7Y29uc3QgZj1uZXcgYjF0O2Yuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFFRdChuZXcgRmxvYXQzMkFycmF5KFstMSwtMSwuNSwzLC0xLC41LC0xLDMsLjVdKSwzKSk7Y29uc3QgbT1uZXcgQjF0KGYsZCksZz10aGlzO2Z1bmN0aW9uIF8obixpKXtjb25zdCByPWUudXBkYXRlKG0pO2QudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9bi5tYXAudGV4dHVyZSxkLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9bi5tYXBTaXplLGQudW5pZm9ybXMucmFkaXVzLnZhbHVlPW4ucmFkaXVzLHQuc2V0UmVuZGVyVGFyZ2V0KG4ubWFwUGFzcyksdC5jbGVhcigpLHQucmVuZGVyQnVmZmVyRGlyZWN0KGksbnVsbCxyLGQsbSxudWxsKSxwLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPW4ubWFwUGFzcy50ZXh0dXJlLHAudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1uLm1hcFNpemUscC51bmlmb3Jtcy5yYWRpdXMudmFsdWU9bi5yYWRpdXMsdC5zZXRSZW5kZXJUYXJnZXQobi5tYXApLHQuY2xlYXIoKSx0LnJlbmRlckJ1ZmZlckRpcmVjdChpLG51bGwscixwLG0sbnVsbCl9ZnVuY3Rpb24geShlLG4saSxyLG8sYSx1KXtsZXQgZD1udWxsO2NvbnN0IHA9ITA9PT1yLmlzUG9pbnRMaWdodD9lLmN1c3RvbURpc3RhbmNlTWF0ZXJpYWw6ZS5jdXN0b21EZXB0aE1hdGVyaWFsO2lmKGQ9dm9pZCAwIT09cD9wOiEwPT09ci5pc1BvaW50TGlnaHQ/bDpzLHQubG9jYWxDbGlwcGluZ0VuYWJsZWQmJiEwPT09aS5jbGlwU2hhZG93cyYmMCE9PWkuY2xpcHBpbmdQbGFuZXMubGVuZ3RoKXtjb25zdCB0PWQudXVpZCxlPWkudXVpZDtsZXQgbj1jW3RdO3ZvaWQgMD09PW4mJihuPXt9LGNbdF09bik7bGV0IHI9bltlXTt2b2lkIDA9PT1yJiYocj1kLmNsb25lKCksbltlXT1yKSxkPXJ9cmV0dXJuIGQudmlzaWJsZT1pLnZpc2libGUsZC53aXJlZnJhbWU9aS53aXJlZnJhbWUsZC5zaWRlPTM9PT11P251bGwhPT1pLnNoYWRvd1NpZGU/aS5zaGFkb3dTaWRlOmkuc2lkZTpudWxsIT09aS5zaGFkb3dTaWRlP2kuc2hhZG93U2lkZTpoW2kuc2lkZV0sZC5jbGlwU2hhZG93cz1pLmNsaXBTaGFkb3dzLGQuY2xpcHBpbmdQbGFuZXM9aS5jbGlwcGluZ1BsYW5lcyxkLmNsaXBJbnRlcnNlY3Rpb249aS5jbGlwSW50ZXJzZWN0aW9uLGQud2lyZWZyYW1lTGluZXdpZHRoPWkud2lyZWZyYW1lTGluZXdpZHRoLGQubGluZXdpZHRoPWkubGluZXdpZHRoLCEwPT09ci5pc1BvaW50TGlnaHQmJiEwPT09ZC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsJiYoZC5yZWZlcmVuY2VQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oci5tYXRyaXhXb3JsZCksZC5uZWFyRGlzdGFuY2U9byxkLmZhckRpc3RhbmNlPWEpLGR9ZnVuY3Rpb24gdihuLHIsbyxhLHMpe2lmKCExPT09bi52aXNpYmxlKXJldHVybjtpZihuLmxheWVycy50ZXN0KHIubGF5ZXJzKSYmKG4uaXNNZXNofHxuLmlzTGluZXx8bi5pc1BvaW50cykmJihuLmNhc3RTaGFkb3d8fG4ucmVjZWl2ZVNoYWRvdyYmMz09PXMpJiYoIW4uZnJ1c3R1bUN1bGxlZHx8aS5pbnRlcnNlY3RzT2JqZWN0KG4pKSl7bi5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhvLm1hdHJpeFdvcmxkSW52ZXJzZSxuLm1hdHJpeFdvcmxkKTtjb25zdCBpPWUudXBkYXRlKG4pLHI9bi5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KHIpKXtjb25zdCBlPWkuZ3JvdXBzO2ZvcihsZXQgbD0wLGM9ZS5sZW5ndGg7bDxjO2wrKyl7Y29uc3QgYz1lW2xdLHU9cltjLm1hdGVyaWFsSW5kZXhdO2lmKHUmJnUudmlzaWJsZSl7Y29uc3QgZT15KG4sMCx1LGEsby5uZWFyLG8uZmFyLHMpO3QucmVuZGVyQnVmZmVyRGlyZWN0KG8sbnVsbCxpLGUsbixjKX19fWVsc2UgaWYoci52aXNpYmxlKXtjb25zdCBlPXkobiwwLHIsYSxvLm5lYXIsby5mYXIscyk7dC5yZW5kZXJCdWZmZXJEaXJlY3QobyxudWxsLGksZSxuLG51bGwpfX1jb25zdCBsPW4uY2hpbGRyZW47Zm9yKGxldCB0PTAsZT1sLmxlbmd0aDt0PGU7dCsrKXYobFt0XSxyLG8sYSxzKX10aGlzLmVuYWJsZWQ9ITEsdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy50eXBlPTEsdGhpcy5yZW5kZXI9ZnVuY3Rpb24oZSxuLHMpe2lmKCExPT09Zy5lbmFibGVkKXJldHVybjtpZighMT09PWcuYXV0b1VwZGF0ZSYmITE9PT1nLm5lZWRzVXBkYXRlKXJldHVybjtpZigwPT09ZS5sZW5ndGgpcmV0dXJuO2NvbnN0IGw9dC5nZXRSZW5kZXJUYXJnZXQoKSxjPXQuZ2V0QWN0aXZlQ3ViZUZhY2UoKSxoPXQuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKSxkPXQuc3RhdGU7ZC5zZXRCbGVuZGluZygwKSxkLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoMSwxLDEsMSksZC5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLGQuc2V0U2Npc3NvclRlc3QoITEpO2ZvcihsZXQgbD0wLGM9ZS5sZW5ndGg7bDxjO2wrKyl7Y29uc3QgYz1lW2xdLGg9Yy5zaGFkb3c7aWYodm9pZCAwPT09aCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLGMsImhhcyBubyBzaGFkb3cuIik7Y29udGludWV9aWYoITE9PT1oLmF1dG9VcGRhdGUmJiExPT09aC5uZWVkc1VwZGF0ZSljb250aW51ZTtyLmNvcHkoaC5tYXBTaXplKTtjb25zdCBwPWguZ2V0RnJhbWVFeHRlbnRzKCk7aWYoci5tdWx0aXBseShwKSxvLmNvcHkoaC5tYXBTaXplKSwoci54PnV8fHIueT51KSYmKHIueD51JiYoby54PU1hdGguZmxvb3IodS9wLngpLHIueD1vLngqcC54LGgubWFwU2l6ZS54PW8ueCksci55PnUmJihvLnk9TWF0aC5mbG9vcih1L3AueSksci55PW8ueSpwLnksaC5tYXBTaXplLnk9by55KSksbnVsbD09PWgubWFwJiYhaC5pc1BvaW50TGlnaHRTaGFkb3cmJjM9PT10aGlzLnR5cGUpe2NvbnN0IHQ9e21pbkZpbHRlcjplWnQsbWFnRmlsdGVyOmVadCxmb3JtYXQ6aFp0fTtoLm1hcD1uZXcgU0p0KHIueCxyLnksdCksaC5tYXAudGV4dHVyZS5uYW1lPWMubmFtZSsiLnNoYWRvd01hcCIsaC5tYXBQYXNzPW5ldyBTSnQoci54LHIueSx0KSxoLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9bnVsbD09PWgubWFwJiYoaC5tYXA9bmV3IFNKdChyLngsci55LHttaW5GaWx0ZXI6Skt0LG1hZ0ZpbHRlcjpKS3QsZm9ybWF0OmhadH0pLGgubWFwLnRleHR1cmUubmFtZT1jLm5hbWUrIi5zaGFkb3dNYXAiLGguY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksdC5zZXRSZW5kZXJUYXJnZXQoaC5tYXApLHQuY2xlYXIoKTtjb25zdCBmPWguZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgdD0wO3Q8Zjt0Kyspe2NvbnN0IGU9aC5nZXRWaWV3cG9ydCh0KTthLnNldChvLngqZS54LG8ueSplLnksby54KmUueixvLnkqZS53KSxkLnZpZXdwb3J0KGEpLGgudXBkYXRlTWF0cmljZXMoYyx0KSxpPWguZ2V0RnJ1c3R1bSgpLHYobixzLGguY2FtZXJhLGMsdGhpcy50eXBlKX1oLmlzUG9pbnRMaWdodFNoYWRvd3x8MyE9PXRoaXMudHlwZXx8XyhoLHMpLGgubmVlZHNVcGRhdGU9ITF9Zy5uZWVkc1VwZGF0ZT0hMSx0LnNldFJlbmRlclRhcmdldChsLGMsaCl9fWZ1bmN0aW9uIE81dCh0LGUsbil7Y29uc3QgaT1uLmlzV2ViR0wyLHI9bmV3KGZ1bmN0aW9uIG8oKXtsZXQgZT0hMTtjb25zdCBuPW5ldyB3SnQ7bGV0IGk9bnVsbDtjb25zdCByPW5ldyB3SnQoMCwwLDAsMCk7cmV0dXJue3NldE1hc2s6ZnVuY3Rpb24obil7aT09PW58fGV8fCh0LmNvbG9yTWFzayhuLG4sbixuKSxpPW4pfSxzZXRMb2NrZWQ6ZnVuY3Rpb24odCl7ZT10fSxzZXRDbGVhcjpmdW5jdGlvbihlLGksbyxhLHMpeyEwPT09cyYmKGUqPWEsaSo9YSxvKj1hKSxuLnNldChlLGksbyxhKSwhMT09PXIuZXF1YWxzKG4pJiYodC5jbGVhckNvbG9yKGUsaSxvLGEpLHIuY29weShuKSl9LHJlc2V0OmZ1bmN0aW9uKCl7ZT0hMSxpPW51bGwsci5zZXQoLTEsMCwwLDApfX19KSxhPW5ldyhmdW5jdGlvbiBzKCl7bGV0IGU9ITEsbj1udWxsLGk9bnVsbCxyPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24odCl7dD9GKDI5MjkpOlYoMjkyOSl9LHNldE1hc2s6ZnVuY3Rpb24oaSl7bj09PWl8fGV8fCh0LmRlcHRoTWFzayhpKSxuPWkpfSxzZXRGdW5jOmZ1bmN0aW9uKGUpe2lmKGkhPT1lKXtpZihlKXN3aXRjaChlKXtjYXNlIDA6dC5kZXB0aEZ1bmMoNTEyKTticmVhaztjYXNlIDE6dC5kZXB0aEZ1bmMoNTE5KTticmVhaztjYXNlIDI6dC5kZXB0aEZ1bmMoNTEzKTticmVhaztjYXNlIDM6dC5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIDQ6dC5kZXB0aEZ1bmMoNTE0KTticmVhaztjYXNlIDU6dC5kZXB0aEZ1bmMoNTE4KTticmVhaztjYXNlIDY6dC5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIDc6dC5kZXB0aEZ1bmMoNTE3KTticmVhaztkZWZhdWx0OnQuZGVwdGhGdW5jKDUxNSl9ZWxzZSB0LmRlcHRoRnVuYyg1MTUpO2k9ZX19LHNldExvY2tlZDpmdW5jdGlvbih0KXtlPXR9LHNldENsZWFyOmZ1bmN0aW9uKGUpe3IhPT1lJiYodC5jbGVhckRlcHRoKGUpLHI9ZSl9LHJlc2V0OmZ1bmN0aW9uKCl7ZT0hMSxuPW51bGwsaT1udWxsLHI9bnVsbH19fSksbD1uZXcoZnVuY3Rpb24gYygpe2xldCBlPSExLG49bnVsbCxpPW51bGwscj1udWxsLG89bnVsbCxhPW51bGwscz1udWxsLGw9bnVsbCxjPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24odCl7ZXx8KHQ/RigyOTYwKTpWKDI5NjApKX0sc2V0TWFzazpmdW5jdGlvbihpKXtuPT09aXx8ZXx8KHQuc3RlbmNpbE1hc2soaSksbj1pKX0sc2V0RnVuYzpmdW5jdGlvbihlLG4sYSl7aT09PWUmJnI9PT1uJiZvPT09YXx8KHQuc3RlbmNpbEZ1bmMoZSxuLGEpLGk9ZSxyPW4sbz1hKX0sc2V0T3A6ZnVuY3Rpb24oZSxuLGkpe2E9PT1lJiZzPT09biYmbD09PWl8fCh0LnN0ZW5jaWxPcChlLG4saSksYT1lLHM9bixsPWkpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24odCl7ZT10fSxzZXRDbGVhcjpmdW5jdGlvbihlKXtjIT09ZSYmKHQuY2xlYXJTdGVuY2lsKGUpLGM9ZSl9LHJlc2V0OmZ1bmN0aW9uKCl7ZT0hMSxuPW51bGwsaT1udWxsLHI9bnVsbCxvPW51bGwsYT1udWxsLHM9bnVsbCxsPW51bGwsYz1udWxsfX19KTtsZXQgdT17fSxoPW51bGwsZD17fSxwPW51bGwsZj0hMSxtPW51bGwsZz1udWxsLF89bnVsbCx5PW51bGwsdj1udWxsLGI9bnVsbCx4PW51bGwsdz0hMSxTPW51bGwsTT1udWxsLEU9bnVsbCxUPW51bGwsQz1udWxsO2NvbnN0IEE9dC5nZXRQYXJhbWV0ZXIoMzU2NjEpO2xldCBrPSExLEw9MDtjb25zdCBQPXQuZ2V0UGFyYW1ldGVyKDc5MzgpOy0xIT09UC5pbmRleE9mKCJXZWJHTCIpPyhMPXBhcnNlRmxvYXQoL15XZWJHTCAoXGQpLy5leGVjKFApWzFdKSxrPUw+PTEpOi0xIT09UC5pbmRleE9mKCJPcGVuR0wgRVMiKSYmKEw9cGFyc2VGbG9hdCgvXk9wZW5HTCBFUyAoXGQpLy5leGVjKFApWzFdKSxrPUw+PTIpO2xldCBOPW51bGwsST17fTtjb25zdCBSPXQuZ2V0UGFyYW1ldGVyKDMwODgpLE89dC5nZXRQYXJhbWV0ZXIoMjk3OCksej0obmV3IHdKdCkuZnJvbUFycmF5KFIpLEQ9KG5ldyB3SnQpLmZyb21BcnJheShPKTtmdW5jdGlvbiBCKGUsbixpKXtjb25zdCByPW5ldyBVaW50OEFycmF5KDQpLG89dC5jcmVhdGVUZXh0dXJlKCk7dC5iaW5kVGV4dHVyZShlLG8pLHQudGV4UGFyYW1ldGVyaShlLDEwMjQxLDk3MjgpLHQudGV4UGFyYW1ldGVyaShlLDEwMjQwLDk3MjgpO2ZvcihsZXQgZT0wO2U8aTtlKyspdC50ZXhJbWFnZTJEKG4rZSwwLDY0MDgsMSwxLDAsNjQwOCw1MTIxLHIpO3JldHVybiBvfWNvbnN0IEg9e307ZnVuY3Rpb24gRihlKXshMCE9PXVbZV0mJih0LmVuYWJsZShlKSx1W2VdPSEwKX1mdW5jdGlvbiBWKGUpeyExIT09dVtlXSYmKHQuZGlzYWJsZShlKSx1W2VdPSExKX1IWzM1NTNdPUIoMzU1MywzNTUzLDEpLEhbMzQwNjddPUIoMzQwNjcsMzQwNjksNiksci5zZXRDbGVhcigwLDAsMCwxKSxhLnNldENsZWFyKDEpLGwuc2V0Q2xlYXIoMCksRigyOTI5KSxhLnNldEZ1bmMoMyksVyghMSkscSgxKSxGKDI4ODQpLEcoMCk7Y29uc3QgVT17W1ZLdF06MzI3NzQsMTAxOjMyNzc4LDEwMjozMjc3OX07aWYoaSlVWzEwM109MzI3NzUsVVsxMDRdPTMyNzc2O2Vsc2V7Y29uc3QgdD1lLmdldCgiRVhUX2JsZW5kX21pbm1heCIpO251bGwhPT10JiYoVVsxMDNdPXQuTUlOX0VYVCxVWzEwNF09dC5NQVhfRVhUKX1jb25zdCBqPXsyMDA6MCwyMDE6MSwyMDI6NzY4LDIwNDo3NzAsMjEwOjc3NiwyMDg6Nzc0LDIwNjo3NzIsMjAzOjc2OSwyMDU6NzcxLDIwOTo3NzUsMjA3Ojc3M307ZnVuY3Rpb24gRyhlLG4saSxyLG8sYSxzLGwpe2lmKDAhPT1lKXtpZighMT09PWYmJihGKDMwNDIpLGY9ITApLDU9PT1lKW89b3x8bixhPWF8fGkscz1zfHxyLG49PT1nJiZvPT09dnx8KHQuYmxlbmRFcXVhdGlvblNlcGFyYXRlKFVbbl0sVVtvXSksZz1uLHY9byksaT09PV8mJnI9PT15JiZhPT09YiYmcz09PXh8fCh0LmJsZW5kRnVuY1NlcGFyYXRlKGpbaV0saltyXSxqW2FdLGpbc10pLF89aSx5PXIsYj1hLHg9cyksbT1lLHc9bnVsbDtlbHNlIGlmKGUhPT1tfHxsIT09dyl7aWYoZz09PVZLdCYmdj09PVZLdHx8KHQuYmxlbmRFcXVhdGlvbigzMjc3NCksZz1WS3Qsdj1WS3QpLGwpc3dpdGNoKGUpe2Nhc2UgMTp0LmJsZW5kRnVuY1NlcGFyYXRlKDEsNzcxLDEsNzcxKTticmVhaztjYXNlIDI6dC5ibGVuZEZ1bmMoMSwxKTticmVhaztjYXNlIDM6dC5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDAsNzY5LDc3MSk7YnJlYWs7Y2FzZSA0OnQuYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjgsMCw3NzApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixlKX1lbHNlIHN3aXRjaChlKXtjYXNlIDE6dC5ibGVuZEZ1bmNTZXBhcmF0ZSg3NzAsNzcxLDEsNzcxKTticmVhaztjYXNlIDI6dC5ibGVuZEZ1bmMoNzcwLDEpO2JyZWFrO2Nhc2UgMzp0LmJsZW5kRnVuYygwLDc2OSk7YnJlYWs7Y2FzZSA0OnQuYmxlbmRGdW5jKDAsNzY4KTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsZSl9Xz1udWxsLHk9bnVsbCxiPW51bGwseD1udWxsLG09ZSx3PWx9fWVsc2UhMD09PWYmJihWKDMwNDIpLGY9ITEpfWZ1bmN0aW9uIFcoZSl7UyE9PWUmJih0LmZyb250RmFjZShlPzIzMDQ6MjMwNSksUz1lKX1mdW5jdGlvbiBxKGUpezAhPT1lPyhGKDI4ODQpLGUhPT1NJiZ0LmN1bGxGYWNlKDE9PT1lPzEwMjk6Mj09PWU/MTAyODoxMDMyKSk6VigyODg0KSxNPWV9ZnVuY3Rpb24gWShlLG4saSl7ZT8oRigzMjgyMyksVD09PW4mJkM9PT1pfHwodC5wb2x5Z29uT2Zmc2V0KG4saSksVD1uLEM9aSkpOlYoMzI4MjMpfWZ1bmN0aW9uIFgoZSl7dm9pZCAwPT09ZSYmKGU9MzM5ODQrQS0xKSxOIT09ZSYmKHQuYWN0aXZlVGV4dHVyZShlKSxOPWUpfXJldHVybntidWZmZXJzOntjb2xvcjpyLGRlcHRoOmEsc3RlbmNpbDpsfSxlbmFibGU6RixkaXNhYmxlOlYsYmluZEZyYW1lYnVmZmVyOmZ1bmN0aW9uICQoZSxuKXtyZXR1cm4gbnVsbD09PW4mJm51bGwhPT1oJiYobj1oKSxkW2VdIT09biYmKHQuYmluZEZyYW1lYnVmZmVyKGUsbiksZFtlXT1uLGkmJigzNjAwOT09PWUmJihkWzM2MTYwXT1uKSwzNjE2MD09PWUmJihkWzM2MDA5XT1uKSksITApfSxiaW5kWFJGcmFtZWJ1ZmZlcjpmdW5jdGlvbiBLKGUpe2UhPT1oJiYodC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsZSksaD1lKX0sdXNlUHJvZ3JhbTpmdW5jdGlvbiBaKGUpe3JldHVybiBwIT09ZSYmKHQudXNlUHJvZ3JhbShlKSxwPWUsITApfSxzZXRCbGVuZGluZzpHLHNldE1hdGVyaWFsOmZ1bmN0aW9uIEoodCxlKXsyPT09dC5zaWRlP1YoMjg4NCk6RigyODg0KTtsZXQgbj0xPT09dC5zaWRlO2UmJihuPSFuKSxXKG4pLDE9PT10LmJsZW5kaW5nJiYhMT09PXQudHJhbnNwYXJlbnQ/RygwKTpHKHQuYmxlbmRpbmcsdC5ibGVuZEVxdWF0aW9uLHQuYmxlbmRTcmMsdC5ibGVuZERzdCx0LmJsZW5kRXF1YXRpb25BbHBoYSx0LmJsZW5kU3JjQWxwaGEsdC5ibGVuZERzdEFscGhhLHQucHJlbXVsdGlwbGllZEFscGhhKSxhLnNldEZ1bmModC5kZXB0aEZ1bmMpLGEuc2V0VGVzdCh0LmRlcHRoVGVzdCksYS5zZXRNYXNrKHQuZGVwdGhXcml0ZSksci5zZXRNYXNrKHQuY29sb3JXcml0ZSk7Y29uc3QgaT10LnN0ZW5jaWxXcml0ZTtsLnNldFRlc3QoaSksaSYmKGwuc2V0TWFzayh0LnN0ZW5jaWxXcml0ZU1hc2spLGwuc2V0RnVuYyh0LnN0ZW5jaWxGdW5jLHQuc3RlbmNpbFJlZix0LnN0ZW5jaWxGdW5jTWFzayksbC5zZXRPcCh0LnN0ZW5jaWxGYWlsLHQuc3RlbmNpbFpGYWlsLHQuc3RlbmNpbFpQYXNzKSksWSh0LnBvbHlnb25PZmZzZXQsdC5wb2x5Z29uT2Zmc2V0RmFjdG9yLHQucG9seWdvbk9mZnNldFVuaXRzKSwhMD09PXQuYWxwaGFUb0NvdmVyYWdlP0YoMzI5MjYpOlYoMzI5MjYpfSxzZXRGbGlwU2lkZWQ6VyxzZXRDdWxsRmFjZTpxLHNldExpbmVXaWR0aDpmdW5jdGlvbiBRKGUpe2UhPT1FJiYoayYmdC5saW5lV2lkdGgoZSksRT1lKX0sc2V0UG9seWdvbk9mZnNldDpZLHNldFNjaXNzb3JUZXN0OmZ1bmN0aW9uIHR0KHQpe3Q/RigzMDg5KTpWKDMwODkpfSxhY3RpdmVUZXh0dXJlOlgsYmluZFRleHR1cmU6ZnVuY3Rpb24gZXQoZSxuKXtudWxsPT09TiYmWCgpO2xldCBpPUlbTl07dm9pZCAwPT09aSYmKGk9e3R5cGU6dm9pZCAwLHRleHR1cmU6dm9pZCAwfSxJW05dPWkpLGkudHlwZT09PWUmJmkudGV4dHVyZT09PW58fCh0LmJpbmRUZXh0dXJlKGUsbnx8SFtlXSksaS50eXBlPWUsaS50ZXh0dXJlPW4pfSx1bmJpbmRUZXh0dXJlOmZ1bmN0aW9uIG50KCl7Y29uc3QgZT1JW05dO3ZvaWQgMCE9PWUmJnZvaWQgMCE9PWUudHlwZSYmKHQuYmluZFRleHR1cmUoZS50eXBlLG51bGwpLGUudHlwZT12b2lkIDAsZS50ZXh0dXJlPXZvaWQgMCl9LGNvbXByZXNzZWRUZXhJbWFnZTJEOmZ1bmN0aW9uIGl0KCl7dHJ5e3QuY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkodCxhcmd1bWVudHMpfWNhdGNoKHQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix0KX19LHRleEltYWdlMkQ6ZnVuY3Rpb24gcnQoKXt0cnl7dC50ZXhJbWFnZTJELmFwcGx5KHQsYXJndW1lbnRzKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdCl9fSx0ZXhJbWFnZTNEOmZ1bmN0aW9uIG90KCl7dHJ5e3QudGV4SW1hZ2UzRC5hcHBseSh0LGFyZ3VtZW50cyl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLHQpfX0sc2Npc3NvcjpmdW5jdGlvbiBhdChlKXshMT09PXouZXF1YWxzKGUpJiYodC5zY2lzc29yKGUueCxlLnksZS56LGUudyksei5jb3B5KGUpKX0sdmlld3BvcnQ6ZnVuY3Rpb24gc3QoZSl7ITE9PT1ELmVxdWFscyhlKSYmKHQudmlld3BvcnQoZS54LGUueSxlLnosZS53KSxELmNvcHkoZSkpfSxyZXNldDpmdW5jdGlvbiBsdCgpe3QuZGlzYWJsZSgzMDQyKSx0LmRpc2FibGUoMjg4NCksdC5kaXNhYmxlKDI5MjkpLHQuZGlzYWJsZSgzMjgyMyksdC5kaXNhYmxlKDMwODkpLHQuZGlzYWJsZSgyOTYwKSx0LmRpc2FibGUoMzI5MjYpLHQuYmxlbmRFcXVhdGlvbigzMjc3NCksdC5ibGVuZEZ1bmMoMSwwKSx0LmJsZW5kRnVuY1NlcGFyYXRlKDEsMCwxLDApLHQuY29sb3JNYXNrKCEwLCEwLCEwLCEwKSx0LmNsZWFyQ29sb3IoMCwwLDAsMCksdC5kZXB0aE1hc2soITApLHQuZGVwdGhGdW5jKDUxMyksdC5jbGVhckRlcHRoKDEpLHQuc3RlbmNpbE1hc2soNDI5NDk2NzI5NSksdC5zdGVuY2lsRnVuYyg1MTksMCw0Mjk0OTY3Mjk1KSx0LnN0ZW5jaWxPcCg3NjgwLDc2ODAsNzY4MCksdC5jbGVhclN0ZW5jaWwoMCksdC5jdWxsRmFjZSgxMDI5KSx0LmZyb250RmFjZSgyMzA1KSx0LnBvbHlnb25PZmZzZXQoMCwwKSx0LmFjdGl2ZVRleHR1cmUoMzM5ODQpLHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpLCEwPT09aSYmKHQuYmluZEZyYW1lYnVmZmVyKDM2MDA5LG51bGwpLHQuYmluZEZyYW1lYnVmZmVyKDM2MDA4LG51bGwpKSx0LnVzZVByb2dyYW0obnVsbCksdC5saW5lV2lkdGgoMSksdC5zY2lzc29yKDAsMCx0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHQpLHQudmlld3BvcnQoMCwwLHQuY2FudmFzLndpZHRoLHQuY2FudmFzLmhlaWdodCksdT17fSxOPW51bGwsST17fSxoPW51bGwsZD17fSxwPW51bGwsZj0hMSxtPW51bGwsZz1udWxsLF89bnVsbCx5PW51bGwsdj1udWxsLGI9bnVsbCx4PW51bGwsdz0hMSxTPW51bGwsTT1udWxsLEU9bnVsbCxUPW51bGwsQz1udWxsLHouc2V0KDAsMCx0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHQpLEQuc2V0KDAsMCx0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHQpLHIucmVzZXQoKSxhLnJlc2V0KCksbC5yZXNldCgpfX19ZnVuY3Rpb24gejV0KHQsZSxuLGkscixvLGEpe2NvbnN0IHM9ci5pc1dlYkdMMixsPXIubWF4VGV4dHVyZXMsYz1yLm1heEN1YmVtYXBTaXplLHU9ci5tYXhUZXh0dXJlU2l6ZSxoPXIubWF4U2FtcGxlcyxkPW5ldyBXZWFrTWFwO2xldCBwLGY9ITE7dHJ5e2Y9InVuZGVmaW5lZCIhPXR5cGVvZiBPZmZzY3JlZW5DYW52YXMmJm51bGwhPT1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKX1jYXRjaCh0KXt9ZnVuY3Rpb24gbSh0LGUpe3JldHVybiBmP25ldyBPZmZzY3JlZW5DYW52YXModCxlKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJjYW52YXMiKX1mdW5jdGlvbiBnKHQsZSxuLGkpe2xldCByPTE7aWYoKHQud2lkdGg+aXx8dC5oZWlnaHQ+aSkmJihyPWkvTWF0aC5tYXgodC53aWR0aCx0LmhlaWdodCkpLHI8MXx8ITA9PT1lKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHwidW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSW1hZ2VCaXRtYXAmJnQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7Y29uc3QgaT1lP3RKdDpNYXRoLmZsb29yLG89aShyKnQud2lkdGgpLGE9aShyKnQuaGVpZ2h0KTt2b2lkIDA9PT1wJiYocD1tKG8sYSkpO2NvbnN0IHM9bj9tKG8sYSk6cDtyZXR1cm4gcy53aWR0aD1vLHMuaGVpZ2h0PWEscy5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZSh0LDAsMCxvLGEpLGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBoYXMgYmVlbiByZXNpemVkIGZyb20gKCIrdC53aWR0aCsieCIrdC5oZWlnaHQrIikgdG8gKCIrbysieCIrYSsiKS4iKSxzfXJldHVybiJkYXRhImluIHQmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoIit0LndpZHRoKyJ4Iit0LmhlaWdodCsiKS4iKSx0fXJldHVybiB0fWZ1bmN0aW9uIF8odCl7cmV0dXJuIEpadCh0LndpZHRoKSYmSlp0KHQuaGVpZ2h0KX1mdW5jdGlvbiB5KHQsZSl7cmV0dXJuIHQuZ2VuZXJhdGVNaXBtYXBzJiZlJiZ0Lm1pbkZpbHRlciE9PUpLdCYmdC5taW5GaWx0ZXIhPT1lWnR9ZnVuY3Rpb24gdihlLG4scixvLGE9MSl7dC5nZW5lcmF0ZU1pcG1hcChlKSxpLmdldChuKS5fX21heE1pcExldmVsPU1hdGgubG9nMihNYXRoLm1heChyLG8sYSkpfWZ1bmN0aW9uIGIobixpLHIpe2lmKCExPT09cylyZXR1cm4gaTtpZihudWxsIT09bil7aWYodm9pZCAwIT09dFtuXSlyZXR1cm4gdFtuXTtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gdXNlIG5vbi1leGlzdGluZyBXZWJHTCBpbnRlcm5hbCBmb3JtYXQgJyIrbisiJyIpfWxldCBvPWk7cmV0dXJuIDY0MDM9PT1pJiYoNTEyNj09PXImJihvPTMzMzI2KSw1MTMxPT09ciYmKG89MzMzMjUpLDUxMjE9PT1yJiYobz0zMzMyMSkpLDY0MDc9PT1pJiYoNTEyNj09PXImJihvPTM0ODM3KSw1MTMxPT09ciYmKG89MzQ4NDMpLDUxMjE9PT1yJiYobz0zMjg0OSkpLDY0MDg9PT1pJiYoNTEyNj09PXImJihvPTM0ODM2KSw1MTMxPT09ciYmKG89MzQ4NDIpLDUxMjE9PT1yJiYobz0zMjg1NikpLDMzMzI1IT09byYmMzMzMjYhPT1vJiYzNDg0MiE9PW8mJjM0ODM2IT09b3x8ZS5nZXQoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSxvfWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQ9PT1KS3R8fHQ9PT1RS3R8fHQ9PT10WnQ/OTcyODo5NzI5fWZ1bmN0aW9uIHcoZSl7Y29uc3Qgbj1lLnRhcmdldDtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHcpLChmdW5jdGlvbiByKGUpe2NvbnN0IG49aS5nZXQoZSk7dm9pZCAwIT09bi5fX3dlYmdsSW5pdCYmKHQuZGVsZXRlVGV4dHVyZShuLl9fd2ViZ2xUZXh0dXJlKSxpLnJlbW92ZShlKSl9KShuKSxuLmlzVmlkZW9UZXh0dXJlJiZkLmRlbGV0ZShuKSxhLm1lbW9yeS50ZXh0dXJlcy0tfWZ1bmN0aW9uIFMoZSl7Y29uc3Qgbj1lLnRhcmdldDtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFMpLChmdW5jdGlvbiByKGUpe2NvbnN0IG49ZS50ZXh0dXJlLHI9aS5nZXQoZSksbz1pLmdldChuKTtpZihlKXtpZih2b2lkIDAhPT1vLl9fd2ViZ2xUZXh0dXJlJiYodC5kZWxldGVUZXh0dXJlKG8uX193ZWJnbFRleHR1cmUpLGEubWVtb3J5LnRleHR1cmVzLS0pLGUuZGVwdGhUZXh0dXJlJiZlLmRlcHRoVGV4dHVyZS5kaXNwb3NlKCksZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldClmb3IobGV0IGU9MDtlPDY7ZSsrKXQuZGVsZXRlRnJhbWVidWZmZXIoci5fX3dlYmdsRnJhbWVidWZmZXJbZV0pLHIuX193ZWJnbERlcHRoYnVmZmVyJiZ0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihyLl9fd2ViZ2xEZXB0aGJ1ZmZlcltlXSk7ZWxzZSB0LmRlbGV0ZUZyYW1lYnVmZmVyKHIuX193ZWJnbEZyYW1lYnVmZmVyKSxyLl9fd2ViZ2xEZXB0aGJ1ZmZlciYmdC5kZWxldGVSZW5kZXJidWZmZXIoci5fX3dlYmdsRGVwdGhidWZmZXIpLHIuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyJiZ0LmRlbGV0ZUZyYW1lYnVmZmVyKHIuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxyLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciYmdC5kZWxldGVSZW5kZXJidWZmZXIoci5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpLHIuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyJiZ0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihyLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcik7aWYoZS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKWZvcihsZXQgZT0wLHI9bi5sZW5ndGg7ZTxyO2UrKyl7Y29uc3Qgcj1pLmdldChuW2VdKTtyLl9fd2ViZ2xUZXh0dXJlJiYodC5kZWxldGVUZXh0dXJlKHIuX193ZWJnbFRleHR1cmUpLGEubWVtb3J5LnRleHR1cmVzLS0pLGkucmVtb3ZlKG5bZV0pfWkucmVtb3ZlKG4pLGkucmVtb3ZlKGUpfX0pKG4pfWxldCBNPTA7ZnVuY3Rpb24gRSh0LGUpe2NvbnN0IHI9aS5nZXQodCk7aWYodC5pc1ZpZGVvVGV4dHVyZSYmKGZ1bmN0aW9uIG8odCl7Y29uc3QgZT1hLnJlbmRlci5mcmFtZTtkLmdldCh0KSE9PWUmJihkLnNldCh0LGUpLHQudXBkYXRlKCkpfSkodCksdC52ZXJzaW9uPjAmJnIuX192ZXJzaW9uIT09dC52ZXJzaW9uKXtjb25zdCBuPXQuaW1hZ2U7aWYodm9pZCAwPT09biljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCIpO2Vsc2V7aWYoITEhPT1uLmNvbXBsZXRlKXJldHVybiB2b2lkIFAocix0LGUpO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgaW5jb21wbGV0ZSIpfX1uLmFjdGl2ZVRleHR1cmUoMzM5ODQrZSksbi5iaW5kVGV4dHVyZSgzNTUzLHIuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIFQoZSxyKXtjb25zdCBhPWkuZ2V0KGUpO2UudmVyc2lvbj4wJiZhLl9fdmVyc2lvbiE9PWUudmVyc2lvbj8oZnVuY3Rpb24gbChlLGkscil7aWYoNiE9PWkuaW1hZ2UubGVuZ3RoKXJldHVybjtMKGUsaSksbi5hY3RpdmVUZXh0dXJlKDMzOTg0K3IpLG4uYmluZFRleHR1cmUoMzQwNjcsZS5fX3dlYmdsVGV4dHVyZSksdC5waXhlbFN0b3JlaSgzNzQ0MCxpLmZsaXBZKSx0LnBpeGVsU3RvcmVpKDM3NDQxLGkucHJlbXVsdGlwbHlBbHBoYSksdC5waXhlbFN0b3JlaSgzMzE3LGkudW5wYWNrQWxpZ25tZW50KSx0LnBpeGVsU3RvcmVpKDM3NDQzLDApO2NvbnN0IGE9aSYmKGkuaXNDb21wcmVzc2VkVGV4dHVyZXx8aS5pbWFnZVswXS5pc0NvbXByZXNzZWRUZXh0dXJlKSxsPWkuaW1hZ2VbMF0mJmkuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSx1PVtdO2ZvcihsZXQgdD0wO3Q8Njt0KyspdVt0XT1hfHxsP2w/aS5pbWFnZVt0XS5pbWFnZTppLmltYWdlW3RdOmcoaS5pbWFnZVt0XSwhMSwhMCxjKTtjb25zdCBoPXVbMF0sZD1fKGgpfHxzLHA9by5jb252ZXJ0KGkuZm9ybWF0KSxmPW8uY29udmVydChpLnR5cGUpLG09YihpLmludGVybmFsRm9ybWF0LHAsZik7bGV0IHg7aWYoaygzNDA2NyxpLGQpLGEpe2ZvcihsZXQgdD0wO3Q8Njt0Kyspe3g9dVt0XS5taXBtYXBzO2ZvcihsZXQgZT0wO2U8eC5sZW5ndGg7ZSsrKXtjb25zdCByPXhbZV07aS5mb3JtYXQhPT1oWnQmJmkuZm9ybWF0IT09dVp0P251bGwhPT1wP24uY29tcHJlc3NlZFRleEltYWdlMkQoMzQwNjkrdCxlLG0sci53aWR0aCxyLmhlaWdodCwwLHIuZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAuc2V0VGV4dHVyZUN1YmUoKSIpOm4udGV4SW1hZ2UyRCgzNDA2OSt0LGUsbSxyLndpZHRoLHIuaGVpZ2h0LDAscCxmLHIuZGF0YSl9fWUuX19tYXhNaXBMZXZlbD14Lmxlbmd0aC0xfWVsc2V7eD1pLm1pcG1hcHM7Zm9yKGxldCB0PTA7dDw2O3QrKylpZihsKXtuLnRleEltYWdlMkQoMzQwNjkrdCwwLG0sdVt0XS53aWR0aCx1W3RdLmhlaWdodCwwLHAsZix1W3RdLmRhdGEpO2ZvcihsZXQgZT0wO2U8eC5sZW5ndGg7ZSsrKXtjb25zdCBpPXhbZV0uaW1hZ2VbdF0uaW1hZ2U7bi50ZXhJbWFnZTJEKDM0MDY5K3QsZSsxLG0saS53aWR0aCxpLmhlaWdodCwwLHAsZixpLmRhdGEpfX1lbHNle24udGV4SW1hZ2UyRCgzNDA2OSt0LDAsbSxwLGYsdVt0XSk7Zm9yKGxldCBlPTA7ZTx4Lmxlbmd0aDtlKyspbi50ZXhJbWFnZTJEKDM0MDY5K3QsZSsxLG0scCxmLHhbZV0uaW1hZ2VbdF0pfWUuX19tYXhNaXBMZXZlbD14Lmxlbmd0aH15KGksZCkmJnYoMzQwNjcsaSxoLndpZHRoLGguaGVpZ2h0KSxlLl9fdmVyc2lvbj1pLnZlcnNpb24saS5vblVwZGF0ZSYmaS5vblVwZGF0ZShpKX0pKGEsZSxyKToobi5hY3RpdmVUZXh0dXJlKDMzOTg0K3IpLG4uYmluZFRleHR1cmUoMzQwNjcsYS5fX3dlYmdsVGV4dHVyZSkpfWNvbnN0IEM9e1skS3RdOjEwNDk3LFtLS3RdOjMzMDcxLFtaS3RdOjMzNjQ4fSxBPXtbSkt0XTo5NzI4LFtRS3RdOjk5ODQsW3RadF06OTk4NixbZVp0XTo5NzI5LFtuWnRdOjk5ODUsW2ladF06OTk4N307ZnVuY3Rpb24gayhuLG8sYSl7aWYoYT8odC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDIsQ1tvLndyYXBTXSksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDMsQ1tvLndyYXBUXSksMzI4NzkhPT1uJiYzNTg2NiE9PW58fHQudGV4UGFyYW1ldGVyaShuLDMyODgyLENbby53cmFwUl0pLHQudGV4UGFyYW1ldGVyaShuLDEwMjQwLEFbby5tYWdGaWx0ZXJdKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MSxBW28ubWluRmlsdGVyXSkpOih0LnRleFBhcmFtZXRlcmkobiwxMDI0MiwzMzA3MSksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDMsMzMwNzEpLDMyODc5IT09biYmMzU4NjYhPT1ufHx0LnRleFBhcmFtZXRlcmkobiwzMjg4MiwzMzA3MSksby53cmFwUz09PUtLdCYmby53cmFwVD09PUtLdHx8Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQwLHgoby5tYWdGaWx0ZXIpKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MSx4KG8ubWluRmlsdGVyKSksby5taW5GaWx0ZXIhPT1KS3QmJm8ubWluRmlsdGVyIT09ZVp0JiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4iKSksITA9PT1lLmhhcygiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikpe2NvbnN0IGE9ZS5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2lmKG8udHlwZT09PXNadCYmITE9PT1lLmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpcmV0dXJuO2lmKCExPT09cyYmby50eXBlPT09bFp0JiYhMT09PWUuaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKXJldHVybjsoby5hbmlzb3Ryb3B5PjF8fGkuZ2V0KG8pLl9fY3VycmVudEFuaXNvdHJvcHkpJiYodC50ZXhQYXJhbWV0ZXJmKG4sYS5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbihvLmFuaXNvdHJvcHksci5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxpLmdldChvKS5fX2N1cnJlbnRBbmlzb3Ryb3B5PW8uYW5pc290cm9weSl9fWZ1bmN0aW9uIEwoZSxuKXt2b2lkIDA9PT1lLl9fd2ViZ2xJbml0JiYoZS5fX3dlYmdsSW5pdD0hMCxuLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHcpLGUuX193ZWJnbFRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksYS5tZW1vcnkudGV4dHVyZXMrKyl9ZnVuY3Rpb24gUChlLGkscil7bGV0IGE9MzU1MztpLmlzRGF0YVRleHR1cmUyREFycmF5JiYoYT0zNTg2NiksaS5pc0RhdGFUZXh0dXJlM0QmJihhPTMyODc5KSxMKGUsaSksbi5hY3RpdmVUZXh0dXJlKDMzOTg0K3IpLG4uYmluZFRleHR1cmUoYSxlLl9fd2ViZ2xUZXh0dXJlKSx0LnBpeGVsU3RvcmVpKDM3NDQwLGkuZmxpcFkpLHQucGl4ZWxTdG9yZWkoMzc0NDEsaS5wcmVtdWx0aXBseUFscGhhKSx0LnBpeGVsU3RvcmVpKDMzMTcsaS51bnBhY2tBbGlnbm1lbnQpLHQucGl4ZWxTdG9yZWkoMzc0NDMsMCk7Y29uc3QgbD0oZnVuY3Rpb24gYyh0KXtyZXR1cm4hcyYmKHQud3JhcFMhPT1LS3R8fHQud3JhcFQhPT1LS3R8fHQubWluRmlsdGVyIT09Skt0JiZ0Lm1pbkZpbHRlciE9PWVadCl9KShpKSYmITE9PT1fKGkuaW1hZ2UpLGg9ZyhpLmltYWdlLGwsITEsdSksZD1fKGgpfHxzLHA9by5jb252ZXJ0KGkuZm9ybWF0KTtsZXQgZixtPW8uY29udmVydChpLnR5cGUpLHg9YihpLmludGVybmFsRm9ybWF0LHAsbSk7ayhhLGksZCk7Y29uc3Qgdz1pLm1pcG1hcHM7aWYoaS5pc0RlcHRoVGV4dHVyZSl4PTY0MDIscz94PWkudHlwZT09PXNadD8zNjAxMjppLnR5cGU9PT1hWnQ/MzMxOTA6aS50eXBlPT09Y1p0PzM1MDU2OjMzMTg5OmkudHlwZT09PXNadCYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksaS5mb3JtYXQ9PT1kWnQmJjY0MDI9PT14JiZpLnR5cGUhPT1vWnQmJmkudHlwZSE9PWFadCYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLGkudHlwZT1vWnQsbT1vLmNvbnZlcnQoaS50eXBlKSksaS5mb3JtYXQ9PT1wWnQmJjY0MDI9PT14JiYoeD0zNDA0MSxpLnR5cGUhPT1jWnQmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksaS50eXBlPWNadCxtPW8uY29udmVydChpLnR5cGUpKSksbi50ZXhJbWFnZTJEKDM1NTMsMCx4LGgud2lkdGgsaC5oZWlnaHQsMCxwLG0sbnVsbCk7ZWxzZSBpZihpLmlzRGF0YVRleHR1cmUpaWYody5sZW5ndGg+MCYmZCl7Zm9yKGxldCB0PTAsZT13Lmxlbmd0aDt0PGU7dCsrKWY9d1t0XSxuLnRleEltYWdlMkQoMzU1Myx0LHgsZi53aWR0aCxmLmhlaWdodCwwLHAsbSxmLmRhdGEpO2kuZ2VuZXJhdGVNaXBtYXBzPSExLGUuX19tYXhNaXBMZXZlbD13Lmxlbmd0aC0xfWVsc2Ugbi50ZXhJbWFnZTJEKDM1NTMsMCx4LGgud2lkdGgsaC5oZWlnaHQsMCxwLG0saC5kYXRhKSxlLl9fbWF4TWlwTGV2ZWw9MDtlbHNlIGlmKGkuaXNDb21wcmVzc2VkVGV4dHVyZSl7Zm9yKGxldCB0PTAsZT13Lmxlbmd0aDt0PGU7dCsrKWY9d1t0XSxpLmZvcm1hdCE9PWhadCYmaS5mb3JtYXQhPT11WnQ/bnVsbCE9PXA/bi5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNTUzLHQseCxmLndpZHRoLGYuaGVpZ2h0LDAsZi5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC51cGxvYWRUZXh0dXJlKCkiKTpuLnRleEltYWdlMkQoMzU1Myx0LHgsZi53aWR0aCxmLmhlaWdodCwwLHAsbSxmLmRhdGEpO2UuX19tYXhNaXBMZXZlbD13Lmxlbmd0aC0xfWVsc2UgaWYoaS5pc0RhdGFUZXh0dXJlMkRBcnJheSluLnRleEltYWdlM0QoMzU4NjYsMCx4LGgud2lkdGgsaC5oZWlnaHQsaC5kZXB0aCwwLHAsbSxoLmRhdGEpLGUuX19tYXhNaXBMZXZlbD0wO2Vsc2UgaWYoaS5pc0RhdGFUZXh0dXJlM0Qpbi50ZXhJbWFnZTNEKDMyODc5LDAseCxoLndpZHRoLGguaGVpZ2h0LGguZGVwdGgsMCxwLG0saC5kYXRhKSxlLl9fbWF4TWlwTGV2ZWw9MDtlbHNlIGlmKHcubGVuZ3RoPjAmJmQpe2ZvcihsZXQgdD0wLGU9dy5sZW5ndGg7dDxlO3QrKylmPXdbdF0sbi50ZXhJbWFnZTJEKDM1NTMsdCx4LHAsbSxmKTtpLmdlbmVyYXRlTWlwbWFwcz0hMSxlLl9fbWF4TWlwTGV2ZWw9dy5sZW5ndGgtMX1lbHNlIG4udGV4SW1hZ2UyRCgzNTUzLDAseCxwLG0saCksZS5fX21heE1pcExldmVsPTA7eShpLGQpJiZ2KGEsaSxoLndpZHRoLGguaGVpZ2h0KSxlLl9fdmVyc2lvbj1pLnZlcnNpb24saS5vblVwZGF0ZSYmaS5vblVwZGF0ZShpKX1mdW5jdGlvbiBOKGUscixhLHMsbCl7Y29uc3QgYz1vLmNvbnZlcnQoYS5mb3JtYXQpLHU9by5jb252ZXJ0KGEudHlwZSksaD1iKGEuaW50ZXJuYWxGb3JtYXQsYyx1KTszMjg3OT09PWx8fDM1ODY2PT09bD9uLnRleEltYWdlM0QobCwwLGgsci53aWR0aCxyLmhlaWdodCxyLmRlcHRoLDAsYyx1LG51bGwpOm4udGV4SW1hZ2UyRChsLDAsaCxyLndpZHRoLHIuaGVpZ2h0LDAsYyx1LG51bGwpLG4uYmluZEZyYW1lYnVmZmVyKDM2MTYwLGUpLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAscyxsLGkuZ2V0KGEpLl9fd2ViZ2xUZXh0dXJlLDApLG4uYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWZ1bmN0aW9uIEkoZSxuLGkpe2lmKHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxlKSxuLmRlcHRoQnVmZmVyJiYhbi5zdGVuY2lsQnVmZmVyKXtsZXQgcj0zMzE4OTtpZihpKXtjb25zdCBlPW4uZGVwdGhUZXh0dXJlO2UmJmUuaXNEZXB0aFRleHR1cmUmJihlLnR5cGU9PT1zWnQ/cj0zNjAxMjplLnR5cGU9PT1hWnQmJihyPTMzMTkwKSk7Y29uc3QgaT1SKG4pO3QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLGkscixuLndpZHRoLG4uaGVpZ2h0KX1lbHNlIHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxyLG4ud2lkdGgsbi5oZWlnaHQpO3QuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwOTYsMzYxNjEsZSl9ZWxzZSBpZihuLmRlcHRoQnVmZmVyJiZuLnN0ZW5jaWxCdWZmZXIpe2lmKGkpe2NvbnN0IGU9UihuKTt0LnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxlLDM1MDU2LG4ud2lkdGgsbi5oZWlnaHQpfWVsc2UgdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLDM0MDQxLG4ud2lkdGgsbi5oZWlnaHQpO3QuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzMzMDYsMzYxNjEsZSl9ZWxzZXtjb25zdCBlPSEwPT09bi5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzP24udGV4dHVyZVswXTpuLnRleHR1cmUscj1vLmNvbnZlcnQoZS5mb3JtYXQpLGE9by5jb252ZXJ0KGUudHlwZSkscz1iKGUuaW50ZXJuYWxGb3JtYXQscixhKTtpZihpKXtjb25zdCBlPVIobik7dC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsZSxzLG4ud2lkdGgsbi5oZWlnaHQpfWVsc2UgdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLHMsbi53aWR0aCxuLmhlaWdodCl9dC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIFIodCl7cmV0dXJuIHMmJnQuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0P01hdGgubWluKGgsdC5zYW1wbGVzKTowfWxldCBPPSExLHo9ITE7dGhpcy5hbGxvY2F0ZVRleHR1cmVVbml0PWZ1bmN0aW9uIEQoKXtjb25zdCB0PU07cmV0dXJuIHQ+PWwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAiK3QrIiB0ZXh0dXJlIHVuaXRzIHdoaWxlIHRoaXMgR1BVIHN1cHBvcnRzIG9ubHkgIitsKSxNKz0xLHR9LHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9ZnVuY3Rpb24gQigpe009MH0sdGhpcy5zZXRUZXh0dXJlMkQ9RSx0aGlzLnNldFRleHR1cmUyREFycmF5PWZ1bmN0aW9uIEgodCxlKXtjb25zdCByPWkuZ2V0KHQpO3QudmVyc2lvbj4wJiZyLl9fdmVyc2lvbiE9PXQudmVyc2lvbj9QKHIsdCxlKToobi5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLG4uYmluZFRleHR1cmUoMzU4NjYsci5fX3dlYmdsVGV4dHVyZSkpfSx0aGlzLnNldFRleHR1cmUzRD1mdW5jdGlvbiBGKHQsZSl7Y29uc3Qgcj1pLmdldCh0KTt0LnZlcnNpb24+MCYmci5fX3ZlcnNpb24hPT10LnZlcnNpb24/UChyLHQsZSk6KG4uYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSxuLmJpbmRUZXh0dXJlKDMyODc5LHIuX193ZWJnbFRleHR1cmUpKX0sdGhpcy5zZXRUZXh0dXJlQ3ViZT1ULHRoaXMuc2V0dXBSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24gVihlKXtjb25zdCBsPWUudGV4dHVyZSxjPWkuZ2V0KGUpLHU9aS5nZXQobCk7ZS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixTKSwhMCE9PWUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyYmKHUuX193ZWJnbFRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdS5fX3ZlcnNpb249bC52ZXJzaW9uLGEubWVtb3J5LnRleHR1cmVzKyspO2NvbnN0IGg9ITA9PT1lLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0LGQ9ITA9PT1lLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMscD0hMD09PWUuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0LGY9bC5pc0RhdGFUZXh0dXJlM0R8fGwuaXNEYXRhVGV4dHVyZTJEQXJyYXksbT1fKGUpfHxzO2lmKCFzfHxsLmZvcm1hdCE9PXVadHx8bC50eXBlIT09c1p0JiZsLnR5cGUhPT1sWnR8fChsLmZvcm1hdD1oWnQsY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBSZW5kZXJpbmcgdG8gdGV4dHVyZXMgd2l0aCBSR0IgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuIFVzaW5nIFJHQkEgZm9ybWF0IGluc3RlYWQuIikpLGgpe2MuX193ZWJnbEZyYW1lYnVmZmVyPVtdO2ZvcihsZXQgZT0wO2U8NjtlKyspYy5fX3dlYmdsRnJhbWVidWZmZXJbZV09dC5jcmVhdGVGcmFtZWJ1ZmZlcigpfWVsc2UgaWYoYy5fX3dlYmdsRnJhbWVidWZmZXI9dC5jcmVhdGVGcmFtZWJ1ZmZlcigpLGQpaWYoci5kcmF3QnVmZmVycyl7Y29uc3Qgbj1lLnRleHR1cmU7Zm9yKGxldCBlPTAscj1uLmxlbmd0aDtlPHI7ZSsrKXtjb25zdCByPWkuZ2V0KG5bZV0pO3ZvaWQgMD09PXIuX193ZWJnbFRleHR1cmUmJihyLl9fd2ViZ2xUZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLGEubWVtb3J5LnRleHR1cmVzKyspfX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMiBvciBXRUJHTF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uLiIpO2Vsc2UgaWYocClpZihzKXtjLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksYy5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXI9dC5jcmVhdGVSZW5kZXJidWZmZXIoKSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsYy5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2NvbnN0IGk9by5jb252ZXJ0KGwuZm9ybWF0KSxyPW8uY29udmVydChsLnR5cGUpLGE9YihsLmludGVybmFsRm9ybWF0LGkscikscz1SKGUpO3QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHMsYSxlLndpZHRoLGUuaGVpZ2h0KSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxjLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksdC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxjLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLGUuZGVwdGhCdWZmZXImJihjLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcj10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLEkoYy5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIsZSwhMCkpLG4uYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7aWYoaCl7bi5iaW5kVGV4dHVyZSgzNDA2Nyx1Ll9fd2ViZ2xUZXh0dXJlKSxrKDM0MDY3LGwsbSk7Zm9yKGxldCB0PTA7dDw2O3QrKylOKGMuX193ZWJnbEZyYW1lYnVmZmVyW3RdLGUsbCwzNjA2NCwzNDA2OSt0KTt5KGwsbSkmJnYoMzQwNjcsbCxlLndpZHRoLGUuaGVpZ2h0KSxuLmJpbmRUZXh0dXJlKDM0MDY3LG51bGwpfWVsc2UgaWYoZCl7Y29uc3QgdD1lLnRleHR1cmU7Zm9yKGxldCByPTAsbz10Lmxlbmd0aDtyPG87cisrKXtjb25zdCBvPXRbcl0sYT1pLmdldChvKTtuLmJpbmRUZXh0dXJlKDM1NTMsYS5fX3dlYmdsVGV4dHVyZSksaygzNTUzLG8sbSksTihjLl9fd2ViZ2xGcmFtZWJ1ZmZlcixlLG8sMzYwNjQrciwzNTUzKSx5KG8sbSkmJnYoMzU1MyxvLGUud2lkdGgsZS5oZWlnaHQpfW4uYmluZFRleHR1cmUoMzU1MyxudWxsKX1lbHNle2xldCB0PTM1NTM7ZiYmKHM/dD1sLmlzRGF0YVRleHR1cmUzRD8zMjg3OTozNTg2Njpjb25zb2xlLndhcm4oIlRIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheSBvbmx5IHN1cHBvcnRlZCB3aXRoIFdlYkdMMi4iKSksbi5iaW5kVGV4dHVyZSh0LHUuX193ZWJnbFRleHR1cmUpLGsodCxsLG0pLE4oYy5fX3dlYmdsRnJhbWVidWZmZXIsZSxsLDM2MDY0LHQpLHkobCxtKSYmdih0LGwsZS53aWR0aCxlLmhlaWdodCxlLmRlcHRoKSxuLmJpbmRUZXh0dXJlKHQsbnVsbCl9ZS5kZXB0aEJ1ZmZlciYmKGZ1bmN0aW9uIGcoZSl7Y29uc3Qgcj1pLmdldChlKSxvPSEwPT09ZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldDtpZihlLmRlcHRoVGV4dHVyZSl7aWYobyl0aHJvdyBuZXcgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7IShmdW5jdGlvbiBhKGUscil7aWYociYmci5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihuLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxlKSwhci5kZXB0aFRleHR1cmV8fCFyLmRlcHRoVGV4dHVyZS5pc0RlcHRoVGV4dHVyZSl0aHJvdyBuZXcgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTtpLmdldChyLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUmJnIuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPT09ci53aWR0aCYmci5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PT09ci5oZWlnaHR8fChyLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD1yLndpZHRoLHIuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD1yLmhlaWdodCxyLmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0hMCksRShyLmRlcHRoVGV4dHVyZSwwKTtjb25zdCBvPWkuZ2V0KHIuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZTtpZihyLmRlcHRoVGV4dHVyZS5mb3JtYXQ9PT1kWnQpdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLG8sMCk7ZWxzZXtpZihyLmRlcHRoVGV4dHVyZS5mb3JtYXQhPT1wWnQpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKTt0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsbywwKX19KShyLl9fd2ViZ2xGcmFtZWJ1ZmZlcixlKX1lbHNlIGlmKG8pe3IuX193ZWJnbERlcHRoYnVmZmVyPVtdO2ZvcihsZXQgaT0wO2k8NjtpKyspbi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsci5fX3dlYmdsRnJhbWVidWZmZXJbaV0pLHIuX193ZWJnbERlcHRoYnVmZmVyW2ldPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCksSShyLl9fd2ViZ2xEZXB0aGJ1ZmZlcltpXSxlLCExKX1lbHNlIG4uYmluZEZyYW1lYnVmZmVyKDM2MTYwLHIuX193ZWJnbEZyYW1lYnVmZmVyKSxyLl9fd2ViZ2xEZXB0aGJ1ZmZlcj10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLEkoci5fX3dlYmdsRGVwdGhidWZmZXIsZSwhMSk7bi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9KShlKX0sdGhpcy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXA9ZnVuY3Rpb24gVSh0KXtjb25zdCBlPV8odCl8fHMscj0hMD09PXQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz90LnRleHR1cmU6W3QudGV4dHVyZV07Zm9yKGxldCBvPTAsYT1yLmxlbmd0aDtvPGE7bysrKXtjb25zdCBhPXJbb107aWYoeShhLGUpKXtjb25zdCBlPXQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/MzQwNjc6MzU1MyxyPWkuZ2V0KGEpLl9fd2ViZ2xUZXh0dXJlO24uYmluZFRleHR1cmUoZSxyKSx2KGUsYSx0LndpZHRoLHQuaGVpZ2h0KSxuLmJpbmRUZXh0dXJlKGUsbnVsbCl9fX0sdGhpcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldD1mdW5jdGlvbiBqKGUpe2lmKGUuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KWlmKHMpe2NvbnN0IHI9ZS53aWR0aCxvPWUuaGVpZ2h0O2xldCBhPTE2Mzg0O2UuZGVwdGhCdWZmZXImJihhfD0yNTYpLGUuc3RlbmNpbEJ1ZmZlciYmKGF8PTEwMjQpO2NvbnN0IHM9aS5nZXQoZSk7bi5iaW5kRnJhbWVidWZmZXIoMzYwMDgscy5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLG4uYmluZEZyYW1lYnVmZmVyKDM2MDA5LHMuX193ZWJnbEZyYW1lYnVmZmVyKSx0LmJsaXRGcmFtZWJ1ZmZlcigwLDAscixvLDAsMCxyLG8sYSw5NzI4KSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxzLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcil9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKX0sdGhpcy5zYWZlU2V0VGV4dHVyZTJEPWZ1bmN0aW9uIEcodCxlKXt0JiZ0LmlzV2ViR0xSZW5kZXJUYXJnZXQmJighMT09PU8mJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxPPSEwKSx0PXQudGV4dHVyZSksRSh0LGUpfSx0aGlzLnNhZmVTZXRUZXh0dXJlQ3ViZT1mdW5jdGlvbiBXKHQsZSl7dCYmdC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmKCExPT09eiYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmU6IGRvbid0IHVzZSBjdWJlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSx6PSEwKSx0PXQudGV4dHVyZSksVCh0LGUpfX1mdW5jdGlvbiBENXQodCxlLG4pe2NvbnN0IGk9bi5pc1dlYkdMMjtyZXR1cm57Y29udmVydDpmdW5jdGlvbiByKHQpe2xldCBuO2lmKHQ9PT1yWnQpcmV0dXJuIDUxMjE7aWYoMTAxNz09PXQpcmV0dXJuIDMyODE5O2lmKDEwMTg9PT10KXJldHVybiAzMjgyMDtpZigxMDE5PT09dClyZXR1cm4gMzM2MzU7aWYoMTAxMD09PXQpcmV0dXJuIDUxMjA7aWYoMTAxMT09PXQpcmV0dXJuIDUxMjI7aWYodD09PW9adClyZXR1cm4gNTEyMztpZigxMDEzPT09dClyZXR1cm4gNTEyNDtpZih0PT09YVp0KXJldHVybiA1MTI1O2lmKHQ9PT1zWnQpcmV0dXJuIDUxMjY7aWYodD09PWxadClyZXR1cm4gaT81MTMxOihuPWUuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksbnVsbCE9PW4/bi5IQUxGX0ZMT0FUX09FUzpudWxsKTtpZigxMDIxPT09dClyZXR1cm4gNjQwNjtpZih0PT09dVp0KXJldHVybiA2NDA3O2lmKHQ9PT1oWnQpcmV0dXJuIDY0MDg7aWYoMTAyND09PXQpcmV0dXJuIDY0MDk7aWYoMTAyNT09PXQpcmV0dXJuIDY0MTA7aWYodD09PWRadClyZXR1cm4gNjQwMjtpZih0PT09cFp0KXJldHVybiAzNDA0MTtpZigxMDI4PT09dClyZXR1cm4gNjQwMztpZigxMDI5PT09dClyZXR1cm4gMzYyNDQ7aWYoMTAzMD09PXQpcmV0dXJuIDMzMzE5O2lmKDEwMzE9PT10KXJldHVybiAzMzMyMDtpZigxMDMyPT09dClyZXR1cm4gMzYyNDg7aWYoMTAzMz09PXQpcmV0dXJuIDM2MjQ5O2lmKHQ9PT1mWnR8fHQ9PT1tWnR8fHQ9PT1nWnR8fHQ9PT1fWnQpe2lmKG49ZS5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIiksbnVsbD09PW4pcmV0dXJuIG51bGw7aWYodD09PWZadClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO2lmKHQ9PT1tWnQpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7aWYodD09PWdadClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtpZih0PT09X1p0KXJldHVybiBuLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUfWlmKHQ9PT15WnR8fHQ9PT12WnR8fHQ9PT1iWnR8fHQ9PT14WnQpe2lmKG49ZS5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLG51bGw9PT1uKXJldHVybiBudWxsO2lmKHQ9PT15WnQpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRztpZih0PT09dlp0KXJldHVybiBuLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc7aWYodD09PWJadClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRztpZih0PT09eFp0KXJldHVybiBuLkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HfWlmKDM2MTk2PT09dClyZXR1cm4gbj1lLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxudWxsIT09bj9uLkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w6bnVsbDtpZigodD09PXdadHx8dD09PVNadCkmJihuPWUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIiksbnVsbCE9PW4pKXtpZih0PT09d1p0KXJldHVybiBuLkNPTVBSRVNTRURfUkdCOF9FVEMyO2lmKHQ9PT1TWnQpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQ31yZXR1cm4gMzc4MDg9PT10fHwzNzgwOT09PXR8fDM3ODEwPT09dHx8Mzc4MTE9PT10fHwzNzgxMj09PXR8fDM3ODEzPT09dHx8Mzc4MTQ9PT10fHwzNzgxNT09PXR8fDM3ODE2PT09dHx8Mzc4MTc9PT10fHwzNzgxOD09PXR8fDM3ODE5PT09dHx8Mzc4MjA9PT10fHwzNzgyMT09PXR8fDM3ODQwPT09dHx8Mzc4NDE9PT10fHwzNzg0Mj09PXR8fDM3ODQzPT09dHx8Mzc4NDQ9PT10fHwzNzg0NT09PXR8fDM3ODQ2PT09dHx8Mzc4NDc9PT10fHwzNzg0OD09PXR8fDM3ODQ5PT09dHx8Mzc4NTA9PT10fHwzNzg1MT09PXR8fDM3ODUyPT09dHx8Mzc4NTM9PT10PyhuPWUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXN0YyIpLG51bGwhPT1uP3Q6bnVsbCk6MzY0OTI9PT10PyhuPWUuZ2V0KCJFWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9icHRjIiksbnVsbCE9PW4/dDpudWxsKTp0PT09Y1p0P2k/MzQwNDI6KG49ZS5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxudWxsIT09bj9uLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMOm51bGwpOnZvaWQgMH19fUk1dC5wcm90b3R5cGUuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD0hMDtjbGFzcyBCNXQgZXh0ZW5kcyBxMXR7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLmNhbWVyYXM9dH19QjV0LnByb3RvdHlwZS5pc0FycmF5Q2FtZXJhPSEwO2NsYXNzIEg1dCBleHRlbmRzIGtRdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJHcm91cCJ9fUg1dC5wcm90b3R5cGUuaXNHcm91cD0hMDtjb25zdCBGNXQ9e3R5cGU6Im1vdmUifTtjbGFzcyBWNXR7Y29uc3RydWN0b3IoKXt0aGlzLl90YXJnZXRSYXk9bnVsbCx0aGlzLl9ncmlwPW51bGwsdGhpcy5faGFuZD1udWxsfWdldEhhbmRTcGFjZSgpe3JldHVybiBudWxsPT09dGhpcy5faGFuZCYmKHRoaXMuX2hhbmQ9bmV3IEg1dCx0aGlzLl9oYW5kLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5faGFuZC52aXNpYmxlPSExLHRoaXMuX2hhbmQuam9pbnRzPXt9LHRoaXMuX2hhbmQuaW5wdXRTdGF0ZT17cGluY2hpbmc6ITF9KSx0aGlzLl9oYW5kfWdldFRhcmdldFJheVNwYWNlKCl7cmV0dXJuIG51bGw9PT10aGlzLl90YXJnZXRSYXkmJih0aGlzLl90YXJnZXRSYXk9bmV3IEg1dCx0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSx0aGlzLl90YXJnZXRSYXkuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmxpbmVhclZlbG9jaXR5PW5ldyBDSnQsdGhpcy5fdGFyZ2V0UmF5Lmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLl90YXJnZXRSYXkuYW5ndWxhclZlbG9jaXR5PW5ldyBDSnQpLHRoaXMuX3RhcmdldFJheX1nZXRHcmlwU3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2dyaXAmJih0aGlzLl9ncmlwPW5ldyBINXQsdGhpcy5fZ3JpcC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2dyaXAudmlzaWJsZT0hMSx0aGlzLl9ncmlwLmhhc0xpbmVhclZlbG9jaXR5PSExLHRoaXMuX2dyaXAubGluZWFyVmVsb2NpdHk9bmV3IENKdCx0aGlzLl9ncmlwLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmFuZ3VsYXJWZWxvY2l0eT1uZXcgQ0p0KSx0aGlzLl9ncmlwfWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuIG51bGwhPT10aGlzLl90YXJnZXRSYXkmJnRoaXMuX3RhcmdldFJheS5kaXNwYXRjaEV2ZW50KHQpLG51bGwhPT10aGlzLl9ncmlwJiZ0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQodCksbnVsbCE9PXRoaXMuX2hhbmQmJnRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudCh0KSx0aGlzfWRpc2Nvbm5lY3QodCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSxudWxsIT09dGhpcy5fdGFyZ2V0UmF5JiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLG51bGwhPT10aGlzLl9ncmlwJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSxudWxsIT09dGhpcy5faGFuZCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc311cGRhdGUodCxlLG4pe2xldCBpPW51bGwscj1udWxsLG89bnVsbDtjb25zdCBhPXRoaXMuX3RhcmdldFJheSxzPXRoaXMuX2dyaXAsbD10aGlzLl9oYW5kO2lmKHQmJiJ2aXNpYmxlLWJsdXJyZWQiIT09ZS5zZXNzaW9uLnZpc2liaWxpdHlTdGF0ZSlpZihudWxsIT09YSYmKGk9ZS5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsbiksbnVsbCE9PWkmJihhLm1hdHJpeC5mcm9tQXJyYXkoaS50cmFuc2Zvcm0ubWF0cml4KSxhLm1hdHJpeC5kZWNvbXBvc2UoYS5wb3NpdGlvbixhLnJvdGF0aW9uLGEuc2NhbGUpLGkubGluZWFyVmVsb2NpdHk/KGEuaGFzTGluZWFyVmVsb2NpdHk9ITAsYS5saW5lYXJWZWxvY2l0eS5jb3B5KGkubGluZWFyVmVsb2NpdHkpKTphLmhhc0xpbmVhclZlbG9jaXR5PSExLGkuYW5ndWxhclZlbG9jaXR5PyhhLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxhLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KGkuYW5ndWxhclZlbG9jaXR5KSk6YS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KEY1dCkpKSxsJiZ0LmhhbmQpe289ITA7Zm9yKGNvbnN0IGkgb2YgdC5oYW5kLnZhbHVlcygpKXtjb25zdCB0PWUuZ2V0Sm9pbnRQb3NlKGksbik7aWYodm9pZCAwPT09bC5qb2ludHNbaS5qb2ludE5hbWVdKXtjb25zdCB0PW5ldyBINXQ7dC5tYXRyaXhBdXRvVXBkYXRlPSExLHQudmlzaWJsZT0hMSxsLmpvaW50c1tpLmpvaW50TmFtZV09dCxsLmFkZCh0KX1jb25zdCByPWwuam9pbnRzW2kuam9pbnROYW1lXTtudWxsIT09dCYmKHIubWF0cml4LmZyb21BcnJheSh0LnRyYW5zZm9ybS5tYXRyaXgpLHIubWF0cml4LmRlY29tcG9zZShyLnBvc2l0aW9uLHIucm90YXRpb24sci5zY2FsZSksci5qb2ludFJhZGl1cz10LnJhZGl1cyksci52aXNpYmxlPW51bGwhPT10fWNvbnN0IGk9bC5qb2ludHNbImluZGV4LWZpbmdlci10aXAiXS5wb3NpdGlvbi5kaXN0YW5jZVRvKGwuam9pbnRzWyJ0aHVtYi10aXAiXS5wb3NpdGlvbikscj0uMDIsYT0uMDA1O2wuaW5wdXRTdGF0ZS5waW5jaGluZyYmaT5yK2E/KGwuaW5wdXRTdGF0ZS5waW5jaGluZz0hMSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoZW5kIixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKTohbC5pbnB1dFN0YXRlLnBpbmNoaW5nJiZpPD1yLWEmJihsLmlucHV0U3RhdGUucGluY2hpbmc9ITAsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaHN0YXJ0IixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKX1lbHNlIG51bGwhPT1zJiZ0LmdyaXBTcGFjZSYmKHI9ZS5nZXRQb3NlKHQuZ3JpcFNwYWNlLG4pLG51bGwhPT1yJiYocy5tYXRyaXguZnJvbUFycmF5KHIudHJhbnNmb3JtLm1hdHJpeCkscy5tYXRyaXguZGVjb21wb3NlKHMucG9zaXRpb24scy5yb3RhdGlvbixzLnNjYWxlKSxyLmxpbmVhclZlbG9jaXR5PyhzLmhhc0xpbmVhclZlbG9jaXR5PSEwLHMubGluZWFyVmVsb2NpdHkuY29weShyLmxpbmVhclZlbG9jaXR5KSk6cy5oYXNMaW5lYXJWZWxvY2l0eT0hMSxyLmFuZ3VsYXJWZWxvY2l0eT8ocy5oYXNBbmd1bGFyVmVsb2NpdHk9ITAscy5hbmd1bGFyVmVsb2NpdHkuY29weShyLmFuZ3VsYXJWZWxvY2l0eSkpOnMuaGFzQW5ndWxhclZlbG9jaXR5PSExKSk7cmV0dXJuIG51bGwhPT1hJiYoYS52aXNpYmxlPW51bGwhPT1pKSxudWxsIT09cyYmKHMudmlzaWJsZT1udWxsIT09ciksbnVsbCE9PWwmJihsLnZpc2libGU9bnVsbCE9PW8pLHRoaXN9fWNsYXNzIFU1dCBleHRlbmRzIGpadHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCk7Y29uc3Qgbj10aGlzLGk9dC5zdGF0ZTtsZXQgcj1udWxsLG89MSxhPW51bGwscz0ibG9jYWwtZmxvb3IiLGw9bnVsbCxjPW51bGwsdT1udWxsLGg9bnVsbCxkPW51bGw7Y29uc3QgcD1bXSxmPW5ldyBNYXAsbT1uZXcgcTF0O20ubGF5ZXJzLmVuYWJsZSgxKSxtLnZpZXdwb3J0PW5ldyB3SnQ7Y29uc3QgZz1uZXcgcTF0O2cubGF5ZXJzLmVuYWJsZSgyKSxnLnZpZXdwb3J0PW5ldyB3SnQ7Y29uc3QgXz1bbSxnXSx5PW5ldyBCNXQ7eS5sYXllcnMuZW5hYmxlKDEpLHkubGF5ZXJzLmVuYWJsZSgyKTtsZXQgdj1udWxsLGI9bnVsbDtmdW5jdGlvbiB4KHQpe2NvbnN0IGU9Zi5nZXQodC5pbnB1dFNvdXJjZSk7ZSYmZS5kaXNwYXRjaEV2ZW50KHt0eXBlOnQudHlwZSxkYXRhOnQuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiB3KCl7Zi5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3QuZGlzY29ubmVjdChlKX0pKSxmLmNsZWFyKCksdj1udWxsLGI9bnVsbCxpLmJpbmRYUkZyYW1lYnVmZmVyKG51bGwpLHQuc2V0UmVuZGVyVGFyZ2V0KHQuZ2V0UmVuZGVyVGFyZ2V0KCkpLEEuc3RvcCgpLG4uaXNQcmVzZW50aW5nPSExLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbmVuZCJ9KX1mdW5jdGlvbiBTKHQpe2NvbnN0IGU9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCB0PTA7dDxwLmxlbmd0aDt0KyspZi5zZXQoZVt0XSxwW3RdKTtmb3IobGV0IGU9MDtlPHQucmVtb3ZlZC5sZW5ndGg7ZSsrKXtjb25zdCBuPXQucmVtb3ZlZFtlXSxpPWYuZ2V0KG4pO2kmJihpLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpufSksZi5kZWxldGUobikpfWZvcihsZXQgZT0wO2U8dC5hZGRlZC5sZW5ndGg7ZSsrKXtjb25zdCBuPXQuYWRkZWRbZV0saT1mLmdldChuKTtpJiZpLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImNvbm5lY3RlZCIsZGF0YTpufSl9fXRoaXMuY2FtZXJhQXV0b1VwZGF0ZT0hMCx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pc1ByZXNlbnRpbmc9ITEsdGhpcy5nZXRDb250cm9sbGVyPWZ1bmN0aW9uKHQpe2xldCBlPXBbdF07cmV0dXJuIHZvaWQgMD09PWUmJihlPW5ldyBWNXQscFt0XT1lKSxlLmdldFRhcmdldFJheVNwYWNlKCl9LHRoaXMuZ2V0Q29udHJvbGxlckdyaXA9ZnVuY3Rpb24odCl7bGV0IGU9cFt0XTtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bmV3IFY1dCxwW3RdPWUpLGUuZ2V0R3JpcFNwYWNlKCl9LHRoaXMuZ2V0SGFuZD1mdW5jdGlvbih0KXtsZXQgZT1wW3RdO3JldHVybiB2b2lkIDA9PT1lJiYoZT1uZXcgVjV0LHBbdF09ZSksZS5nZXRIYW5kU3BhY2UoKX0sdGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKHQpe289dCwhMD09PW4uaXNQcmVzZW50aW5nJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSBmcmFtZWJ1ZmZlciBzY2FsZSB3aGlsZSBwcmVzZW50aW5nLiIpfSx0aGlzLnNldFJlZmVyZW5jZVNwYWNlVHlwZT1mdW5jdGlvbih0KXtzPXQsITA9PT1uLmlzUHJlc2VudGluZyYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgcmVmZXJlbmNlIHNwYWNlIHR5cGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5nZXRSZWZlcmVuY2VTcGFjZT1mdW5jdGlvbigpe3JldHVybiBhfSx0aGlzLmdldFNlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm4gcn0sdGhpcy5zZXRTZXNzaW9uPWFzeW5jIGZ1bmN0aW9uKHQpe2lmKHI9dCxudWxsIT09cil7ci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3QiLHgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0c3RhcnQiLHgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZW5kIix4KSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemUiLHgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZXN0YXJ0Iix4KSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVlbmQiLHgpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZW5kIix3KSxyLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0c291cmNlc2NoYW5nZSIsUyk7Y29uc3QgdD1lLmdldENvbnRleHRBdHRyaWJ1dGVzKCk7aWYoITAhPT10LnhyQ29tcGF0aWJsZSYmYXdhaXQgZS5tYWtlWFJDb21wYXRpYmxlKCksdm9pZCAwPT09ci5yZW5kZXJTdGF0ZS5sYXllcnMpZD1uZXcgWFJXZWJHTExheWVyKHIsZSx7YW50aWFsaWFzOnQuYW50aWFsaWFzLGFscGhhOnQuYWxwaGEsZGVwdGg6dC5kZXB0aCxzdGVuY2lsOnQuc3RlbmNpbCxmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yOm99KSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtiYXNlTGF5ZXI6ZH0pO2Vsc2V7bGV0IG49MDtpZih0LmFudGlhbGlhcylkPW5ldyBYUldlYkdMTGF5ZXIocixlLHthbnRpYWxpYXM6ITAsYWxwaGE6dC5hbHBoYSxkZXB0aDp0LmRlcHRoLHN0ZW5jaWw6dC5zdGVuY2lsLGZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6b30pLHIudXBkYXRlUmVuZGVyU3RhdGUoe2xheWVyczpbZF19KTtlbHNle3QuZGVwdGgmJihuPXQuc3RlbmNpbD8zNDA0MTo2NDAyKTtjb25zdCBpPXtjb2xvckZvcm1hdDp0LmFscGhhPzY0MDg6NjQwNyxkZXB0aEZvcm1hdDpuLHNjYWxlRmFjdG9yOm99O2M9bmV3IFhSV2ViR0xCaW5kaW5nKHIsZSksaD1jLmNyZWF0ZVByb2plY3Rpb25MYXllcihpKSx1PWUuY3JlYXRlRnJhbWVidWZmZXIoKSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2hdfSl9fWE9YXdhaXQgci5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UocyksQS5zZXRDb250ZXh0KHIpLEEuc3RhcnQoKSxuLmlzUHJlc2VudGluZz0hMCxuLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlc3Npb25zdGFydCJ9KX19O2NvbnN0IE09bmV3IENKdCxFPW5ldyBDSnQ7ZnVuY3Rpb24gVCh0LGUpe251bGw9PT1lP3QubWF0cml4V29ybGQuY29weSh0Lm1hdHJpeCk6dC5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKGUubWF0cml4V29ybGQsdC5tYXRyaXgpLHQubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dGhpcy51cGRhdGVDYW1lcmE9ZnVuY3Rpb24odCl7aWYobnVsbD09PXIpcmV0dXJuO3kubmVhcj1nLm5lYXI9bS5uZWFyPXQubmVhcix5LmZhcj1nLmZhcj1tLmZhcj10LmZhcix2PT09eS5uZWFyJiZiPT09eS5mYXJ8fChyLnVwZGF0ZVJlbmRlclN0YXRlKHtkZXB0aE5lYXI6eS5uZWFyLGRlcHRoRmFyOnkuZmFyfSksdj15Lm5lYXIsYj15LmZhcik7Y29uc3QgZT10LnBhcmVudCxuPXkuY2FtZXJhcztUKHksZSk7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0KyspVChuW3RdLGUpO3kubWF0cml4V29ybGQuZGVjb21wb3NlKHkucG9zaXRpb24seS5xdWF0ZXJuaW9uLHkuc2NhbGUpLHQucG9zaXRpb24uY29weSh5LnBvc2l0aW9uKSx0LnF1YXRlcm5pb24uY29weSh5LnF1YXRlcm5pb24pLHQuc2NhbGUuY29weSh5LnNjYWxlKSx0Lm1hdHJpeC5jb3B5KHkubWF0cml4KSx0Lm1hdHJpeFdvcmxkLmNvcHkoeS5tYXRyaXhXb3JsZCk7Y29uc3QgaT10LmNoaWxkcmVuO2ZvcihsZXQgdD0wLGU9aS5sZW5ndGg7dDxlO3QrKylpW3RdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTsyPT09bi5sZW5ndGg/KGZ1bmN0aW9uIG8odCxlLG4pe00uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUubWF0cml4V29ybGQpLEUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKG4ubWF0cml4V29ybGQpO2NvbnN0IGk9TS5kaXN0YW5jZVRvKEUpLHI9ZS5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLG89bi5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLGE9clsxNF0vKHJbMTBdLTEpLHM9clsxNF0vKHJbMTBdKzEpLGw9KHJbOV0rMSkvcls1XSxjPShyWzldLTEpL3JbNV0sdT0ocls4XS0xKS9yWzBdLGg9KG9bOF0rMSkvb1swXSxkPWEqdSxwPWEqaCxmPWkvKC11K2gpLG09ZiotdTtlLm1hdHJpeFdvcmxkLmRlY29tcG9zZSh0LnBvc2l0aW9uLHQucXVhdGVybmlvbix0LnNjYWxlKSx0LnRyYW5zbGF0ZVgobSksdC50cmFuc2xhdGVaKGYpLHQubWF0cml4V29ybGQuY29tcG9zZSh0LnBvc2l0aW9uLHQucXVhdGVybmlvbix0LnNjYWxlKSx0Lm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHQubWF0cml4V29ybGQpLmludmVydCgpO2NvbnN0IGc9YStmLF89cytmO3QucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoZC1tLHArKGktbSksbCpzL18qZyxjKnMvXypnLGcsXyl9KSh5LG0sZyk6eS5wcm9qZWN0aW9uTWF0cml4LmNvcHkobS5wcm9qZWN0aW9uTWF0cml4KX0sdGhpcy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4geX0sdGhpcy5nZXRGb3ZlYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PWg/aC5maXhlZEZvdmVhdGlvbjpudWxsIT09ZD9kLmZpeGVkRm92ZWF0aW9uOnZvaWQgMH0sdGhpcy5zZXRGb3ZlYXRpb249ZnVuY3Rpb24odCl7bnVsbCE9PWgmJihoLmZpeGVkRm92ZWF0aW9uPXQpLG51bGwhPT1kJiZ2b2lkIDAhPT1kLmZpeGVkRm92ZWF0aW9uJiYoZC5maXhlZEZvdmVhdGlvbj10KX07bGV0IEM9bnVsbDtjb25zdCBBPW5ldyByMHQ7QS5zZXRBbmltYXRpb25Mb29wKChmdW5jdGlvbiBrKHQsbil7aWYobD1uLmdldFZpZXdlclBvc2UoYSksbnVsbCE9PWwpe2NvbnN0IHQ9bC52aWV3cztudWxsIT09ZCYmaS5iaW5kWFJGcmFtZWJ1ZmZlcihkLmZyYW1lYnVmZmVyKTtsZXQgbj0hMTt0Lmxlbmd0aCE9PXkuY2FtZXJhcy5sZW5ndGgmJih5LmNhbWVyYXMubGVuZ3RoPTAsbj0hMCk7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2NvbnN0IG89dFtyXTtsZXQgYT1udWxsO2lmKG51bGwhPT1kKWE9ZC5nZXRWaWV3cG9ydChvKTtlbHNle2NvbnN0IHQ9Yy5nZXRWaWV3U3ViSW1hZ2UoaCxvKTtpLmJpbmRYUkZyYW1lYnVmZmVyKHUpLHZvaWQgMCE9PXQuZGVwdGhTdGVuY2lsVGV4dHVyZSYmZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLHQuZGVwdGhTdGVuY2lsVGV4dHVyZSwwKSxlLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDY0LDM1NTMsdC5jb2xvclRleHR1cmUsMCksYT10LnZpZXdwb3J0fWNvbnN0IHM9X1tyXTtzLm1hdHJpeC5mcm9tQXJyYXkoby50cmFuc2Zvcm0ubWF0cml4KSxzLnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KG8ucHJvamVjdGlvbk1hdHJpeCkscy52aWV3cG9ydC5zZXQoYS54LGEueSxhLndpZHRoLGEuaGVpZ2h0KSwwPT09ciYmeS5tYXRyaXguY29weShzLm1hdHJpeCksITA9PT1uJiZ5LmNhbWVyYXMucHVzaChzKX19Y29uc3Qgbz1yLmlucHV0U291cmNlcztmb3IobGV0IHQ9MDt0PHAubGVuZ3RoO3QrKylwW3RdLnVwZGF0ZShvW3RdLG4sYSk7QyYmQyh0LG4pfSkpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbih0KXtDPXR9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe319fWZ1bmN0aW9uIGo1dCh0KXtmdW5jdGlvbiBlKGUsbil7ZS5vcGFjaXR5LnZhbHVlPW4ub3BhY2l0eSxuLmNvbG9yJiZlLmRpZmZ1c2UudmFsdWUuY29weShuLmNvbG9yKSxuLmVtaXNzaXZlJiZlLmVtaXNzaXZlLnZhbHVlLmNvcHkobi5lbWlzc2l2ZSkubXVsdGlwbHlTY2FsYXIobi5lbWlzc2l2ZUludGVuc2l0eSksbi5tYXAmJihlLm1hcC52YWx1ZT1uLm1hcCksbi5hbHBoYU1hcCYmKGUuYWxwaGFNYXAudmFsdWU9bi5hbHBoYU1hcCksbi5zcGVjdWxhck1hcCYmKGUuc3BlY3VsYXJNYXAudmFsdWU9bi5zcGVjdWxhck1hcCk7Y29uc3QgaT10LmdldChuKS5lbnZNYXA7aWYoaSl7ZS5lbnZNYXAudmFsdWU9aSxlLmZsaXBFbnZNYXAudmFsdWU9aS5pc0N1YmVUZXh0dXJlJiYhMT09PWkuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPy0xOjEsZS5yZWZsZWN0aXZpdHkudmFsdWU9bi5yZWZsZWN0aXZpdHksZS5yZWZyYWN0aW9uUmF0aW8udmFsdWU9bi5yZWZyYWN0aW9uUmF0aW87Y29uc3Qgcj10LmdldChpKS5fX21heE1pcExldmVsO3ZvaWQgMCE9PXImJihlLm1heE1pcExldmVsLnZhbHVlPXIpfWxldCByLG87bi5saWdodE1hcCYmKGUubGlnaHRNYXAudmFsdWU9bi5saWdodE1hcCxlLmxpZ2h0TWFwSW50ZW5zaXR5LnZhbHVlPW4ubGlnaHRNYXBJbnRlbnNpdHkpLG4uYW9NYXAmJihlLmFvTWFwLnZhbHVlPW4uYW9NYXAsZS5hb01hcEludGVuc2l0eS52YWx1ZT1uLmFvTWFwSW50ZW5zaXR5KSxuLm1hcD9yPW4ubWFwOm4uc3BlY3VsYXJNYXA/cj1uLnNwZWN1bGFyTWFwOm4uZGlzcGxhY2VtZW50TWFwP3I9bi5kaXNwbGFjZW1lbnRNYXA6bi5ub3JtYWxNYXA/cj1uLm5vcm1hbE1hcDpuLmJ1bXBNYXA/cj1uLmJ1bXBNYXA6bi5yb3VnaG5lc3NNYXA/cj1uLnJvdWdobmVzc01hcDpuLm1ldGFsbmVzc01hcD9yPW4ubWV0YWxuZXNzTWFwOm4uYWxwaGFNYXA/cj1uLmFscGhhTWFwOm4uZW1pc3NpdmVNYXA/cj1uLmVtaXNzaXZlTWFwOm4uY2xlYXJjb2F0TWFwP3I9bi5jbGVhcmNvYXRNYXA6bi5jbGVhcmNvYXROb3JtYWxNYXA/cj1uLmNsZWFyY29hdE5vcm1hbE1hcDpuLmNsZWFyY29hdFJvdWdobmVzc01hcD9yPW4uY2xlYXJjb2F0Um91Z2huZXNzTWFwOm4uc3BlY3VsYXJJbnRlbnNpdHlNYXA/cj1uLnNwZWN1bGFySW50ZW5zaXR5TWFwOm4uc3BlY3VsYXJUaW50TWFwJiYocj1uLnNwZWN1bGFyVGludE1hcCksdm9pZCAwIT09ciYmKHIuaXNXZWJHTFJlbmRlclRhcmdldCYmKHI9ci50ZXh0dXJlKSwhMD09PXIubWF0cml4QXV0b1VwZGF0ZSYmci51cGRhdGVNYXRyaXgoKSxlLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoci5tYXRyaXgpKSxuLmFvTWFwP289bi5hb01hcDpuLmxpZ2h0TWFwJiYobz1uLmxpZ2h0TWFwKSx2b2lkIDAhPT1vJiYoby5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYobz1vLnRleHR1cmUpLCEwPT09by5tYXRyaXhBdXRvVXBkYXRlJiZvLnVwZGF0ZU1hdHJpeCgpLGUudXYyVHJhbnNmb3JtLnZhbHVlLmNvcHkoby5tYXRyaXgpKX1mdW5jdGlvbiBuKGUsbil7ZS5yb3VnaG5lc3MudmFsdWU9bi5yb3VnaG5lc3MsZS5tZXRhbG5lc3MudmFsdWU9bi5tZXRhbG5lc3Msbi5yb3VnaG5lc3NNYXAmJihlLnJvdWdobmVzc01hcC52YWx1ZT1uLnJvdWdobmVzc01hcCksbi5tZXRhbG5lc3NNYXAmJihlLm1ldGFsbmVzc01hcC52YWx1ZT1uLm1ldGFsbmVzc01hcCksbi5lbWlzc2l2ZU1hcCYmKGUuZW1pc3NpdmVNYXAudmFsdWU9bi5lbWlzc2l2ZU1hcCksbi5idW1wTWFwJiYoZS5idW1wTWFwLnZhbHVlPW4uYnVtcE1hcCxlLmJ1bXBTY2FsZS52YWx1ZT1uLmJ1bXBTY2FsZSwxPT09bi5zaWRlJiYoZS5idW1wU2NhbGUudmFsdWUqPS0xKSksbi5ub3JtYWxNYXAmJihlLm5vcm1hbE1hcC52YWx1ZT1uLm5vcm1hbE1hcCxlLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkobi5ub3JtYWxTY2FsZSksMT09PW4uc2lkZSYmZS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSksbi5kaXNwbGFjZW1lbnRNYXAmJihlLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1uLmRpc3BsYWNlbWVudE1hcCxlLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPW4uZGlzcGxhY2VtZW50U2NhbGUsZS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPW4uZGlzcGxhY2VtZW50QmlhcyksdC5nZXQobikuZW52TWFwJiYoZS5lbnZNYXBJbnRlbnNpdHkudmFsdWU9bi5lbnZNYXBJbnRlbnNpdHkpfXJldHVybntyZWZyZXNoRm9nVW5pZm9ybXM6ZnVuY3Rpb24gaSh0LGUpe3QuZm9nQ29sb3IudmFsdWUuY29weShlLmNvbG9yKSxlLmlzRm9nPyh0LmZvZ05lYXIudmFsdWU9ZS5uZWFyLHQuZm9nRmFyLnZhbHVlPWUuZmFyKTplLmlzRm9nRXhwMiYmKHQuZm9nRGVuc2l0eS52YWx1ZT1lLmRlbnNpdHkpfSxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpmdW5jdGlvbiByKHQsaSxvLGEscyl7aS5pc01lc2hCYXNpY01hdGVyaWFsP2UodCxpKTppLmlzTWVzaExhbWJlcnRNYXRlcmlhbD8oZSh0LGkpLChmdW5jdGlvbiBsKHQsZSl7ZS5lbWlzc2l2ZU1hcCYmKHQuZW1pc3NpdmVNYXAudmFsdWU9ZS5lbWlzc2l2ZU1hcCl9KSh0LGkpKTppLmlzTWVzaFRvb25NYXRlcmlhbD8oZSh0LGkpLChmdW5jdGlvbiBjKHQsZSl7ZS5ncmFkaWVudE1hcCYmKHQuZ3JhZGllbnRNYXAudmFsdWU9ZS5ncmFkaWVudE1hcCksZS5lbWlzc2l2ZU1hcCYmKHQuZW1pc3NpdmVNYXAudmFsdWU9ZS5lbWlzc2l2ZU1hcCksZS5idW1wTWFwJiYodC5idW1wTWFwLnZhbHVlPWUuYnVtcE1hcCx0LmJ1bXBTY2FsZS52YWx1ZT1lLmJ1bXBTY2FsZSwxPT09ZS5zaWRlJiYodC5idW1wU2NhbGUudmFsdWUqPS0xKSksZS5ub3JtYWxNYXAmJih0Lm5vcm1hbE1hcC52YWx1ZT1lLm5vcm1hbE1hcCx0Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoZS5ub3JtYWxTY2FsZSksMT09PWUuc2lkZSYmdC5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSksZS5kaXNwbGFjZW1lbnRNYXAmJih0LmRpc3BsYWNlbWVudE1hcC52YWx1ZT1lLmRpc3BsYWNlbWVudE1hcCx0LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWUuZGlzcGxhY2VtZW50U2NhbGUsdC5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWUuZGlzcGxhY2VtZW50Qmlhcyl9KSh0LGkpKTppLmlzTWVzaFBob25nTWF0ZXJpYWw/KGUodCxpKSwoZnVuY3Rpb24gdSh0LGUpe3Quc3BlY3VsYXIudmFsdWUuY29weShlLnNwZWN1bGFyKSx0LnNoaW5pbmVzcy52YWx1ZT1NYXRoLm1heChlLnNoaW5pbmVzcywxZS00KSxlLmVtaXNzaXZlTWFwJiYodC5lbWlzc2l2ZU1hcC52YWx1ZT1lLmVtaXNzaXZlTWFwKSxlLmJ1bXBNYXAmJih0LmJ1bXBNYXAudmFsdWU9ZS5idW1wTWFwLHQuYnVtcFNjYWxlLnZhbHVlPWUuYnVtcFNjYWxlLDE9PT1lLnNpZGUmJih0LmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxlLm5vcm1hbE1hcCYmKHQubm9ybWFsTWFwLnZhbHVlPWUubm9ybWFsTWFwLHQubm9ybWFsU2NhbGUudmFsdWUuY29weShlLm5vcm1hbFNjYWxlKSwxPT09ZS5zaWRlJiZ0Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxlLmRpc3BsYWNlbWVudE1hcCYmKHQuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWUuZGlzcGxhY2VtZW50TWFwLHQuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9ZS5kaXNwbGFjZW1lbnRTY2FsZSx0LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9ZS5kaXNwbGFjZW1lbnRCaWFzKX0pKHQsaSkpOmkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD8oZSh0LGkpLGkuaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD8oZnVuY3Rpb24gaCh0LGUsaSl7bih0LGUpLHQucmVmbGVjdGl2aXR5LnZhbHVlPWUucmVmbGVjdGl2aXR5LHQuY2xlYXJjb2F0LnZhbHVlPWUuY2xlYXJjb2F0LHQuY2xlYXJjb2F0Um91Z2huZXNzLnZhbHVlPWUuY2xlYXJjb2F0Um91Z2huZXNzLGUuc2hlZW4mJnQuc2hlZW4udmFsdWUuY29weShlLnNoZWVuKSxlLmNsZWFyY29hdE1hcCYmKHQuY2xlYXJjb2F0TWFwLnZhbHVlPWUuY2xlYXJjb2F0TWFwKSxlLmNsZWFyY29hdFJvdWdobmVzc01hcCYmKHQuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnZhbHVlPWUuY2xlYXJjb2F0Um91Z2huZXNzTWFwKSxlLmNsZWFyY29hdE5vcm1hbE1hcCYmKHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUuY29weShlLmNsZWFyY29hdE5vcm1hbFNjYWxlKSx0LmNsZWFyY29hdE5vcm1hbE1hcC52YWx1ZT1lLmNsZWFyY29hdE5vcm1hbE1hcCwxPT09ZS5zaWRlJiZ0LmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx0LnRyYW5zbWlzc2lvbi52YWx1ZT1lLnRyYW5zbWlzc2lvbixlLnRyYW5zbWlzc2lvbk1hcCYmKHQudHJhbnNtaXNzaW9uTWFwLnZhbHVlPWUudHJhbnNtaXNzaW9uTWFwKSxlLnRyYW5zbWlzc2lvbj4wJiYodC50cmFuc21pc3Npb25TYW1wbGVyTWFwLnZhbHVlPWkudGV4dHVyZSx0LnRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnZhbHVlLnNldChpLndpZHRoLGkuaGVpZ2h0KSksdC50aGlja25lc3MudmFsdWU9ZS50aGlja25lc3MsZS50aGlja25lc3NNYXAmJih0LnRoaWNrbmVzc01hcC52YWx1ZT1lLnRoaWNrbmVzc01hcCksdC5hdHRlbnVhdGlvbkRpc3RhbmNlLnZhbHVlPWUuYXR0ZW51YXRpb25EaXN0YW5jZSx0LmF0dGVudWF0aW9uVGludC52YWx1ZS5jb3B5KGUuYXR0ZW51YXRpb25UaW50KSx0LnNwZWN1bGFySW50ZW5zaXR5LnZhbHVlPWUuc3BlY3VsYXJJbnRlbnNpdHksdC5zcGVjdWxhclRpbnQudmFsdWUuY29weShlLnNwZWN1bGFyVGludCksZS5zcGVjdWxhckludGVuc2l0eU1hcCYmKHQuc3BlY3VsYXJJbnRlbnNpdHlNYXAudmFsdWU9ZS5zcGVjdWxhckludGVuc2l0eU1hcCksZS5zcGVjdWxhclRpbnRNYXAmJih0LnNwZWN1bGFyVGludE1hcC52YWx1ZT1lLnNwZWN1bGFyVGludE1hcCl9KSh0LGkscyk6bih0LGkpKTppLmlzTWVzaE1hdGNhcE1hdGVyaWFsPyhlKHQsaSksKGZ1bmN0aW9uIGQodCxlKXtlLm1hdGNhcCYmKHQubWF0Y2FwLnZhbHVlPWUubWF0Y2FwKSxlLmJ1bXBNYXAmJih0LmJ1bXBNYXAudmFsdWU9ZS5idW1wTWFwLHQuYnVtcFNjYWxlLnZhbHVlPWUuYnVtcFNjYWxlLDE9PT1lLnNpZGUmJih0LmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxlLm5vcm1hbE1hcCYmKHQubm9ybWFsTWFwLnZhbHVlPWUubm9ybWFsTWFwLHQubm9ybWFsU2NhbGUudmFsdWUuY29weShlLm5vcm1hbFNjYWxlKSwxPT09ZS5zaWRlJiZ0Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxlLmRpc3BsYWNlbWVudE1hcCYmKHQuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWUuZGlzcGxhY2VtZW50TWFwLHQuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9ZS5kaXNwbGFjZW1lbnRTY2FsZSx0LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9ZS5kaXNwbGFjZW1lbnRCaWFzKX0pKHQsaSkpOmkuaXNNZXNoRGVwdGhNYXRlcmlhbD8oZSh0LGkpLChmdW5jdGlvbiBwKHQsZSl7ZS5kaXNwbGFjZW1lbnRNYXAmJih0LmRpc3BsYWNlbWVudE1hcC52YWx1ZT1lLmRpc3BsYWNlbWVudE1hcCx0LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWUuZGlzcGxhY2VtZW50U2NhbGUsdC5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWUuZGlzcGxhY2VtZW50Qmlhcyl9KSh0LGkpKTppLmlzTWVzaERpc3RhbmNlTWF0ZXJpYWw/KGUodCxpKSwoZnVuY3Rpb24gZih0LGUpe2UuZGlzcGxhY2VtZW50TWFwJiYodC5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZS5kaXNwbGFjZW1lbnRNYXAsdC5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1lLmRpc3BsYWNlbWVudFNjYWxlLHQuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lLmRpc3BsYWNlbWVudEJpYXMpLHQucmVmZXJlbmNlUG9zaXRpb24udmFsdWUuY29weShlLnJlZmVyZW5jZVBvc2l0aW9uKSx0Lm5lYXJEaXN0YW5jZS52YWx1ZT1lLm5lYXJEaXN0YW5jZSx0LmZhckRpc3RhbmNlLnZhbHVlPWUuZmFyRGlzdGFuY2V9KSh0LGkpKTppLmlzTWVzaE5vcm1hbE1hdGVyaWFsPyhlKHQsaSksKGZ1bmN0aW9uIG0odCxlKXtlLmJ1bXBNYXAmJih0LmJ1bXBNYXAudmFsdWU9ZS5idW1wTWFwLHQuYnVtcFNjYWxlLnZhbHVlPWUuYnVtcFNjYWxlLDE9PT1lLnNpZGUmJih0LmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxlLm5vcm1hbE1hcCYmKHQubm9ybWFsTWFwLnZhbHVlPWUubm9ybWFsTWFwLHQubm9ybWFsU2NhbGUudmFsdWUuY29weShlLm5vcm1hbFNjYWxlKSwxPT09ZS5zaWRlJiZ0Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxlLmRpc3BsYWNlbWVudE1hcCYmKHQuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWUuZGlzcGxhY2VtZW50TWFwLHQuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9ZS5kaXNwbGFjZW1lbnRTY2FsZSx0LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9ZS5kaXNwbGFjZW1lbnRCaWFzKX0pKHQsaSkpOmkuaXNMaW5lQmFzaWNNYXRlcmlhbD8oKGZ1bmN0aW9uIGcodCxlKXt0LmRpZmZ1c2UudmFsdWUuY29weShlLmNvbG9yKSx0Lm9wYWNpdHkudmFsdWU9ZS5vcGFjaXR5fSkodCxpKSxpLmlzTGluZURhc2hlZE1hdGVyaWFsJiYoZnVuY3Rpb24gXyh0LGUpe3QuZGFzaFNpemUudmFsdWU9ZS5kYXNoU2l6ZSx0LnRvdGFsU2l6ZS52YWx1ZT1lLmRhc2hTaXplK2UuZ2FwU2l6ZSx0LnNjYWxlLnZhbHVlPWUuc2NhbGV9KSh0LGkpKTppLmlzUG9pbnRzTWF0ZXJpYWw/KGZ1bmN0aW9uIHkodCxlLG4saSl7bGV0IHI7dC5kaWZmdXNlLnZhbHVlLmNvcHkoZS5jb2xvciksdC5vcGFjaXR5LnZhbHVlPWUub3BhY2l0eSx0LnNpemUudmFsdWU9ZS5zaXplKm4sdC5zY2FsZS52YWx1ZT0uNSppLGUubWFwJiYodC5tYXAudmFsdWU9ZS5tYXApLGUuYWxwaGFNYXAmJih0LmFscGhhTWFwLnZhbHVlPWUuYWxwaGFNYXApLGUubWFwP3I9ZS5tYXA6ZS5hbHBoYU1hcCYmKHI9ZS5hbHBoYU1hcCksdm9pZCAwIT09ciYmKCEwPT09ci5tYXRyaXhBdXRvVXBkYXRlJiZyLnVwZGF0ZU1hdHJpeCgpLHQudXZUcmFuc2Zvcm0udmFsdWUuY29weShyLm1hdHJpeCkpfSkodCxpLG8sYSk6aS5pc1Nwcml0ZU1hdGVyaWFsPyhmdW5jdGlvbiB2KHQsZSl7bGV0IG47dC5kaWZmdXNlLnZhbHVlLmNvcHkoZS5jb2xvciksdC5vcGFjaXR5LnZhbHVlPWUub3BhY2l0eSx0LnJvdGF0aW9uLnZhbHVlPWUucm90YXRpb24sZS5tYXAmJih0Lm1hcC52YWx1ZT1lLm1hcCksZS5hbHBoYU1hcCYmKHQuYWxwaGFNYXAudmFsdWU9ZS5hbHBoYU1hcCksZS5tYXA/bj1lLm1hcDplLmFscGhhTWFwJiYobj1lLmFscGhhTWFwKSx2b2lkIDAhPT1uJiYoITA9PT1uLm1hdHJpeEF1dG9VcGRhdGUmJm4udXBkYXRlTWF0cml4KCksdC51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KG4ubWF0cml4KSl9KSh0LGkpOmkuaXNTaGFkb3dNYXRlcmlhbD8odC5jb2xvci52YWx1ZS5jb3B5KGkuY29sb3IpLHQub3BhY2l0eS52YWx1ZT1pLm9wYWNpdHkpOmkuaXNTaGFkZXJNYXRlcmlhbCYmKGkudW5pZm9ybXNOZWVkVXBkYXRlPSExKX19fWZ1bmN0aW9uIEc1dCh0PXt9KXtjb25zdCBlPXZvaWQgMCE9PXQuY2FudmFzP3QuY2FudmFzOihmdW5jdGlvbiBuKCl7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJjYW52YXMiKTtyZXR1cm4gdC5zdHlsZS5kaXNwbGF5PSJibG9jayIsdH0pKCksaT12b2lkIDAhPT10LmNvbnRleHQ/dC5jb250ZXh0Om51bGwscj12b2lkIDAhPT10LmFscGhhJiZ0LmFscGhhLG89dm9pZCAwPT09dC5kZXB0aHx8dC5kZXB0aCxhPXZvaWQgMD09PXQuc3RlbmNpbHx8dC5zdGVuY2lsLHM9dm9pZCAwIT09dC5hbnRpYWxpYXMmJnQuYW50aWFsaWFzLGw9dm9pZCAwPT09dC5wcmVtdWx0aXBsaWVkQWxwaGF8fHQucHJlbXVsdGlwbGllZEFscGhhLGM9dm9pZCAwIT09dC5wcmVzZXJ2ZURyYXdpbmdCdWZmZXImJnQucHJlc2VydmVEcmF3aW5nQnVmZmVyLHU9dm9pZCAwIT09dC5wb3dlclByZWZlcmVuY2U/dC5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLGg9dm9pZCAwIT09dC5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0JiZ0LmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ7bGV0IGQ9bnVsbCxwPW51bGw7Y29uc3QgZj1bXSxtPVtdO3RoaXMuZG9tRWxlbWVudD1lLHRoaXMuZGVidWc9e2NoZWNrU2hhZGVyRXJyb3JzOiEwfSx0aGlzLmF1dG9DbGVhcj0hMCx0aGlzLmF1dG9DbGVhckNvbG9yPSEwLHRoaXMuYXV0b0NsZWFyRGVwdGg9ITAsdGhpcy5hdXRvQ2xlYXJTdGVuY2lsPSEwLHRoaXMuc29ydE9iamVjdHM9ITAsdGhpcy5jbGlwcGluZ1BsYW5lcz1bXSx0aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkPSExLHRoaXMuZ2FtbWFGYWN0b3I9Mix0aGlzLm91dHB1dEVuY29kaW5nPU5adCx0aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPSExLHRoaXMudG9uZU1hcHBpbmc9MCx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtjb25zdCBnPXRoaXM7bGV0IF89ITEseT0wLHY9MCxiPW51bGwseD0tMSx3PW51bGw7Y29uc3QgUz1uZXcgd0p0LE09bmV3IHdKdDtsZXQgRT1udWxsLFQ9ZS53aWR0aCxDPWUuaGVpZ2h0LEE9MSxrPW51bGwsTD1udWxsO2NvbnN0IFA9bmV3IHdKdCgwLDAsVCxDKSxOPW5ldyB3SnQoMCwwLFQsQyk7bGV0IEk9ITE7Y29uc3QgUj1bXSxPPW5ldyBpMHQ7bGV0IHo9ITEsRD0hMSxCPW51bGw7Y29uc3QgSD1uZXcgclF0LEY9bmV3IENKdCxWPXtiYWNrZ3JvdW5kOm51bGwsZm9nOm51bGwsZW52aXJvbm1lbnQ6bnVsbCxvdmVycmlkZU1hdGVyaWFsOm51bGwsaXNTY2VuZTohMH07ZnVuY3Rpb24gVSgpe3JldHVybiBudWxsPT09Yj9BOjF9bGV0IGosRyxXLHEsWSxYLCQsSyxaLEosUSx0dCxldCxudCxpdCxydCxvdCxhdCxzdCxsdCxjdCx1dCxodCxkdD1pO2Z1bmN0aW9uIHB0KHQsbil7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2NvbnN0IHI9ZS5nZXRDb250ZXh0KHRbaV0sbik7aWYobnVsbCE9PXIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9dHJ5e2NvbnN0IHQ9e2FscGhhOnIsZGVwdGg6byxzdGVuY2lsOmEsYW50aWFsaWFzOnMscHJlbXVsdGlwbGllZEFscGhhOmwscHJlc2VydmVEcmF3aW5nQnVmZmVyOmMscG93ZXJQcmVmZXJlbmNlOnUsZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDpofTtpZihlLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGd0LCExKSxlLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixfdCwhMSksbnVsbD09PWR0KXtjb25zdCBlPVsid2ViZ2wyIiwid2ViZ2wiLCJleHBlcmltZW50YWwtd2ViZ2wiXTtpZighMD09PWcuaXNXZWJHTDFSZW5kZXJlciYmZS5zaGlmdCgpLGR0PXB0KGUsdCksbnVsbD09PWR0KXRocm93IHB0KGUpP25ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dCB3aXRoIHlvdXIgc2VsZWN0ZWQgYXR0cmlidXRlcy4iKTpuZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQuIil9dm9pZCAwPT09ZHQuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0JiYoZHQuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJue3JhbmdlTWluOjEscmFuZ2VNYXg6MSxwcmVjaXNpb246MX19KX1jYXRjaCh0KXt0aHJvdyBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK3QubWVzc2FnZSksdH1mdW5jdGlvbiBmdCgpe2o9bmV3IFUwdChkdCksRz1uZXcgcDB0KGR0LGosdCksai5pbml0KEcpLHV0PW5ldyBENXQoZHQsaixHKSxXPW5ldyBPNXQoZHQsaixHKSxSWzBdPTEwMjkscT1uZXcgVzB0KGR0KSxZPW5ldyB4NXQsWD1uZXcgejV0KGR0LGosVyxZLEcsdXQscSksJD1uZXcgbTB0KGcpLEs9bmV3IFYwdChnKSxaPW5ldyBvMHQoZHQsRyksaHQ9bmV3IGgwdChkdCxqLFosRyksSj1uZXcgajB0KGR0LFoscSxodCksUT1uZXcgJDB0KGR0LEosWixxKSxzdD1uZXcgWDB0KGR0KSxydD1uZXcgZjB0KFkpLHR0PW5ldyBiNXQoZywkLEssaixHLGh0LHJ0KSxldD1uZXcgajV0KFkpLG50PW5ldyBFNXQoWSksaXQ9bmV3IFA1dChqLEcpLGF0PW5ldyB1MHQoZywkLFcsUSxsKSxvdD1uZXcgUjV0KGcsUSxHKSxsdD1uZXcgZDB0KGR0LGoscSxHKSxjdD1uZXcgRzB0KGR0LGoscSxHKSxxLnByb2dyYW1zPXR0LnByb2dyYW1zLGcuY2FwYWJpbGl0aWVzPUcsZy5leHRlbnNpb25zPWosZy5wcm9wZXJ0aWVzPVksZy5yZW5kZXJMaXN0cz1udCxnLnNoYWRvd01hcD1vdCxnLnN0YXRlPVcsZy5pbmZvPXF9ZnQoKTtjb25zdCBtdD1uZXcgVTV0KGcsZHQpO2Z1bmN0aW9uIGd0KHQpe3QucHJldmVudERlZmF1bHQoKSxjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBMb3N0LiIpLF89ITB9ZnVuY3Rpb24gX3QoKXtjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBSZXN0b3JlZC4iKSxfPSExO2NvbnN0IHQ9cS5hdXRvUmVzZXQsZT1vdC5lbmFibGVkLG49b3QuYXV0b1VwZGF0ZSxpPW90Lm5lZWRzVXBkYXRlLHI9b3QudHlwZTtmdCgpLHEuYXV0b1Jlc2V0PXQsb3QuZW5hYmxlZD1lLG90LmF1dG9VcGRhdGU9bixvdC5uZWVkc1VwZGF0ZT1pLG90LnR5cGU9cn1mdW5jdGlvbiB5dCh0KXtjb25zdCBlPXQudGFyZ2V0O2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIseXQpLChmdW5jdGlvbiBuKHQpeyhmdW5jdGlvbiBlKHQpe2NvbnN0IGU9WS5nZXQodCkucHJvZ3JhbXM7dm9pZCAwIT09ZSYmZS5mb3JFYWNoKChmdW5jdGlvbih0KXt0dC5yZWxlYXNlUHJvZ3JhbSh0KX0pKX0pKHQpLFkucmVtb3ZlKHQpfSkoZSl9dGhpcy54cj1tdCx0aGlzLmdldENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gZHR9LHRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gZHQuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKX0sdGhpcy5mb3JjZUNvbnRleHRMb3NzPWZ1bmN0aW9uKCl7Y29uc3QgdD1qLmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7dCYmdC5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtjb25zdCB0PWouZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTt0JiZ0LnJlc3RvcmVDb250ZXh0KCl9LHRoaXMuZ2V0UGl4ZWxSYXRpbz1mdW5jdGlvbigpe3JldHVybiBBfSx0aGlzLnNldFBpeGVsUmF0aW89ZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmKEE9dCx0aGlzLnNldFNpemUoVCxDLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5zZXQoVCxDKX0sdGhpcy5zZXRTaXplPWZ1bmN0aW9uKHQsbixpKXttdC5pc1ByZXNlbnRpbmc/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDYW4ndCBjaGFuZ2Ugc2l6ZSB3aGlsZSBWUiBkZXZpY2UgaXMgcHJlc2VudGluZy4iKTooVD10LEM9bixlLndpZHRoPU1hdGguZmxvb3IodCpBKSxlLmhlaWdodD1NYXRoLmZsb29yKG4qQSksITEhPT1pJiYoZS5zdHlsZS53aWR0aD10KyJweCIsZS5zdHlsZS5oZWlnaHQ9bisicHgiKSx0aGlzLnNldFZpZXdwb3J0KDAsMCx0LG4pKX0sdGhpcy5nZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5zZXQoVCpBLEMqQSkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbih0LG4saSl7VD10LEM9bixBPWksZS53aWR0aD1NYXRoLmZsb29yKHQqaSksZS5oZWlnaHQ9TWF0aC5mbG9vcihuKmkpLHRoaXMuc2V0Vmlld3BvcnQoMCwwLHQsbil9LHRoaXMuZ2V0Q3VycmVudFZpZXdwb3J0PWZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoUyl9LHRoaXMuZ2V0Vmlld3BvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weShQKX0sdGhpcy5zZXRWaWV3cG9ydD1mdW5jdGlvbih0LGUsbixpKXt0LmlzVmVjdG9yND9QLnNldCh0LngsdC55LHQueix0LncpOlAuc2V0KHQsZSxuLGkpLFcudmlld3BvcnQoUy5jb3B5KFApLm11bHRpcGx5U2NhbGFyKEEpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weShOKX0sdGhpcy5zZXRTY2lzc29yPWZ1bmN0aW9uKHQsZSxuLGkpe3QuaXNWZWN0b3I0P04uc2V0KHQueCx0LnksdC56LHQudyk6Ti5zZXQodCxlLG4saSksVy5zY2lzc29yKE0uY29weShOKS5tdWx0aXBseVNjYWxhcihBKS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yVGVzdD1mdW5jdGlvbigpe3JldHVybiBJfSx0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKHQpe1cuc2V0U2Npc3NvclRlc3QoST10KX0sdGhpcy5zZXRPcGFxdWVTb3J0PWZ1bmN0aW9uKHQpe2s9dH0sdGhpcy5zZXRUcmFuc3BhcmVudFNvcnQ9ZnVuY3Rpb24odCl7TD10fSx0aGlzLmdldENsZWFyQ29sb3I9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weShhdC5nZXRDbGVhckNvbG9yKCkpfSx0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXthdC5zZXRDbGVhckNvbG9yLmFwcGx5KGF0LGFyZ3VtZW50cyl9LHRoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBhdC5nZXRDbGVhckFscGhhKCl9LHRoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe2F0LnNldENsZWFyQWxwaGEuYXBwbHkoYXQsYXJndW1lbnRzKX0sdGhpcy5jbGVhcj1mdW5jdGlvbih0LGUsbil7bGV0IGk9MDsodm9pZCAwPT09dHx8dCkmJihpfD0xNjM4NCksKHZvaWQgMD09PWV8fGUpJiYoaXw9MjU2KSwodm9pZCAwPT09bnx8bikmJihpfD0xMDI0KSxkdC5jbGVhcihpKX0sdGhpcy5jbGVhckNvbG9yPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMCwhMSwhMSl9LHRoaXMuY2xlYXJEZXB0aD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITAsITEpfSx0aGlzLmNsZWFyU3RlbmNpbD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITEsITApfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGd0LCExKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixfdCwhMSksbnQuZGlzcG9zZSgpLGl0LmRpc3Bvc2UoKSxZLmRpc3Bvc2UoKSwkLmRpc3Bvc2UoKSxLLmRpc3Bvc2UoKSxRLmRpc3Bvc2UoKSxodC5kaXNwb3NlKCksbXQuZGlzcG9zZSgpLG10LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsYnQpLG10LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLHh0KSxCJiYoQi5kaXNwb3NlKCksQj1udWxsKSx3dC5zdG9wKCl9LHRoaXMucmVuZGVyQnVmZmVySW1tZWRpYXRlPWZ1bmN0aW9uKHQsZSl7aHQuaW5pdEF0dHJpYnV0ZXMoKTtjb25zdCBuPVkuZ2V0KHQpO3QuaGFzUG9zaXRpb25zJiYhbi5wb3NpdGlvbiYmKG4ucG9zaXRpb249ZHQuY3JlYXRlQnVmZmVyKCkpLHQuaGFzTm9ybWFscyYmIW4ubm9ybWFsJiYobi5ub3JtYWw9ZHQuY3JlYXRlQnVmZmVyKCkpLHQuaGFzVXZzJiYhbi51diYmKG4udXY9ZHQuY3JlYXRlQnVmZmVyKCkpLHQuaGFzQ29sb3JzJiYhbi5jb2xvciYmKG4uY29sb3I9ZHQuY3JlYXRlQnVmZmVyKCkpO2NvbnN0IGk9ZS5nZXRBdHRyaWJ1dGVzKCk7dC5oYXNQb3NpdGlvbnMmJihkdC5iaW5kQnVmZmVyKDM0OTYyLG4ucG9zaXRpb24pLGR0LmJ1ZmZlckRhdGEoMzQ5NjIsdC5wb3NpdGlvbkFycmF5LDM1MDQ4KSxodC5lbmFibGVBdHRyaWJ1dGUoaS5wb3NpdGlvbiksZHQudmVydGV4QXR0cmliUG9pbnRlcihpLnBvc2l0aW9uLDMsNTEyNiwhMSwwLDApKSx0Lmhhc05vcm1hbHMmJihkdC5iaW5kQnVmZmVyKDM0OTYyLG4ubm9ybWFsKSxkdC5idWZmZXJEYXRhKDM0OTYyLHQubm9ybWFsQXJyYXksMzUwNDgpLGh0LmVuYWJsZUF0dHJpYnV0ZShpLm5vcm1hbCksZHQudmVydGV4QXR0cmliUG9pbnRlcihpLm5vcm1hbCwzLDUxMjYsITEsMCwwKSksdC5oYXNVdnMmJihkdC5iaW5kQnVmZmVyKDM0OTYyLG4udXYpLGR0LmJ1ZmZlckRhdGEoMzQ5NjIsdC51dkFycmF5LDM1MDQ4KSxodC5lbmFibGVBdHRyaWJ1dGUoaS51diksZHQudmVydGV4QXR0cmliUG9pbnRlcihpLnV2LDIsNTEyNiwhMSwwLDApKSx0Lmhhc0NvbG9ycyYmKGR0LmJpbmRCdWZmZXIoMzQ5NjIsbi5jb2xvciksZHQuYnVmZmVyRGF0YSgzNDk2Mix0LmNvbG9yQXJyYXksMzUwNDgpLGh0LmVuYWJsZUF0dHJpYnV0ZShpLmNvbG9yKSxkdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkuY29sb3IsMyw1MTI2LCExLDAsMCkpLGh0LmRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCksZHQuZHJhd0FycmF5cyg0LDAsdC5jb3VudCksdC5jb3VudD0wfSx0aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbih0LGUsbixpLHIsbyl7bnVsbD09PWUmJihlPVYpO2NvbnN0IGE9ci5pc01lc2gmJnIubWF0cml4V29ybGQuZGV0ZXJtaW5hbnQoKTwwLHM9QXQodCxlLGkscik7Vy5zZXRNYXRlcmlhbChpLGEpO2xldCBsPW4uaW5kZXg7Y29uc3QgYz1uLmF0dHJpYnV0ZXMucG9zaXRpb247aWYobnVsbD09PWwpe2lmKHZvaWQgMD09PWN8fDA9PT1jLmNvdW50KXJldHVybn1lbHNlIGlmKDA9PT1sLmNvdW50KXJldHVybjtsZXQgdSxoPTE7ITA9PT1pLndpcmVmcmFtZSYmKGw9Si5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUobiksaD0yKSx2b2lkIDA9PT1uLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiYmdm9pZCAwPT09bi5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsfHxzdC51cGRhdGUocixuLGkscyksaHQuc2V0dXAocixpLHMsbixsKTtsZXQgZD1sdDtudWxsIT09bCYmKHU9Wi5nZXQobCksZD1jdCxkLnNldEluZGV4KHUpKTtjb25zdCBwPW51bGwhPT1sP2wuY291bnQ6Yy5jb3VudCxmPW4uZHJhd1JhbmdlLnN0YXJ0KmgsbT1uLmRyYXdSYW5nZS5jb3VudCpoLGc9bnVsbCE9PW8/by5zdGFydCpoOjAsXz1udWxsIT09bz9vLmNvdW50Kmg6MS8wLHk9TWF0aC5tYXgoZixnKSx2PU1hdGgubWluKHAsZittLGcrXyktMSxiPU1hdGgubWF4KDAsdi15KzEpO2lmKDAhPT1iKXtpZihyLmlzTWVzaCkhMD09PWkud2lyZWZyYW1lPyhXLnNldExpbmVXaWR0aChpLndpcmVmcmFtZUxpbmV3aWR0aCpVKCkpLGQuc2V0TW9kZSgxKSk6ZC5zZXRNb2RlKDQpO2Vsc2UgaWYoci5pc0xpbmUpe2xldCB0PWkubGluZXdpZHRoO3ZvaWQgMD09PXQmJih0PTEpLFcuc2V0TGluZVdpZHRoKHQqVSgpKSxkLnNldE1vZGUoci5pc0xpbmVTZWdtZW50cz8xOnIuaXNMaW5lTG9vcD8yOjMpfWVsc2Ugci5pc1BvaW50cz9kLnNldE1vZGUoMCk6ci5pc1Nwcml0ZSYmZC5zZXRNb2RlKDQpO2lmKHIuaXNJbnN0YW5jZWRNZXNoKWQucmVuZGVySW5zdGFuY2VzKHksYixyLmNvdW50KTtlbHNlIGlmKG4uaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSl7Y29uc3QgdD1NYXRoLm1pbihuLmluc3RhbmNlQ291bnQsbi5fbWF4SW5zdGFuY2VDb3VudCk7ZC5yZW5kZXJJbnN0YW5jZXMoeSxiLHQpfWVsc2UgZC5yZW5kZXIoeSxiKX19LHRoaXMuY29tcGlsZT1mdW5jdGlvbih0LGUpe3A9aXQuZ2V0KHQpLHAuaW5pdCgpLG0ucHVzaChwKSx0LnRyYXZlcnNlVmlzaWJsZSgoZnVuY3Rpb24odCl7dC5pc0xpZ2h0JiZ0LmxheWVycy50ZXN0KGUubGF5ZXJzKSYmKHAucHVzaExpZ2h0KHQpLHQuY2FzdFNoYWRvdyYmcC5wdXNoU2hhZG93KHQpKX0pKSxwLnNldHVwTGlnaHRzKCksdC50cmF2ZXJzZSgoZnVuY3Rpb24oZSl7Y29uc3Qgbj1lLm1hdGVyaWFsO2lmKG4paWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKylUdChuW2ldLHQsZSk7ZWxzZSBUdChuLHQsZSl9KSksbS5wb3AoKSxwPW51bGx9O2xldCB2dD1udWxsO2Z1bmN0aW9uIGJ0KCl7d3Quc3RvcCgpfWZ1bmN0aW9uIHh0KCl7d3Quc3RhcnQoKX1jb25zdCB3dD1uZXcgcjB0O2Z1bmN0aW9uIFN0KHQsZSxuLGkpe2lmKCExPT09dC52aXNpYmxlKXJldHVybjtpZih0LmxheWVycy50ZXN0KGUubGF5ZXJzKSlpZih0LmlzR3JvdXApbj10LnJlbmRlck9yZGVyO2Vsc2UgaWYodC5pc0xPRCkhMD09PXQuYXV0b1VwZGF0ZSYmdC51cGRhdGUoZSk7ZWxzZSBpZih0LmlzTGlnaHQpcC5wdXNoTGlnaHQodCksdC5jYXN0U2hhZG93JiZwLnB1c2hTaGFkb3codCk7ZWxzZSBpZih0LmlzU3ByaXRlKXtpZighdC5mcnVzdHVtQ3VsbGVkfHxPLmludGVyc2VjdHNTcHJpdGUodCkpe2kmJkYuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChIKTtjb25zdCBlPVEudXBkYXRlKHQpLHI9dC5tYXRlcmlhbDtyLnZpc2libGUmJmQucHVzaCh0LGUscixuLEYueixudWxsKX19ZWxzZSBpZih0LmlzSW1tZWRpYXRlUmVuZGVyT2JqZWN0KWkmJkYuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChIKSxkLnB1c2godCxudWxsLHQubWF0ZXJpYWwsbixGLnosbnVsbCk7ZWxzZSBpZigodC5pc01lc2h8fHQuaXNMaW5lfHx0LmlzUG9pbnRzKSYmKHQuaXNTa2lubmVkTWVzaCYmdC5za2VsZXRvbi5mcmFtZSE9PXEucmVuZGVyLmZyYW1lJiYodC5za2VsZXRvbi51cGRhdGUoKSx0LnNrZWxldG9uLmZyYW1lPXEucmVuZGVyLmZyYW1lKSwhdC5mcnVzdHVtQ3VsbGVkfHxPLmludGVyc2VjdHNPYmplY3QodCkpKXtpJiZGLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoSCk7Y29uc3QgZT1RLnVwZGF0ZSh0KSxyPXQubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheShyKSl7Y29uc3QgaT1lLmdyb3Vwcztmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspe2NvbnN0IGE9aVtvXSxzPXJbYS5tYXRlcmlhbEluZGV4XTtzJiZzLnZpc2libGUmJmQucHVzaCh0LGUscyxuLEYueixhKX19ZWxzZSByLnZpc2libGUmJmQucHVzaCh0LGUscixuLEYueixudWxsKX1jb25zdCByPXQuY2hpbGRyZW47Zm9yKGxldCB0PTAsbz1yLmxlbmd0aDt0PG87dCsrKVN0KHJbdF0sZSxuLGkpfWZ1bmN0aW9uIE10KHQsZSxuKXtjb25zdCBpPSEwPT09ZS5pc1NjZW5lP2Uub3ZlcnJpZGVNYXRlcmlhbDpudWxsO2lmKG4uaXNBcnJheUNhbWVyYSl7Y29uc3Qgcj1uLmNhbWVyYXM7Zm9yKGxldCBuPTAsbz1yLmxlbmd0aDtuPG87bisrKXtjb25zdCBvPXJbbl07Vy52aWV3cG9ydChTLmNvcHkoby52aWV3cG9ydCkpLHAuc2V0dXBMaWdodHNWaWV3KG8pO2ZvcihsZXQgbj0wLHI9dC5sZW5ndGg7bjxyO24rKyl7Y29uc3Qgcj10W25dLGE9ci5vYmplY3Qscz1yLmdlb21ldHJ5LGw9bnVsbD09PWk/ci5tYXRlcmlhbDppLGM9ci5ncm91cDthLmxheWVycy50ZXN0KG8ubGF5ZXJzKSYmRXQoYSxlLG8scyxsLGMpfX19ZWxzZSBmb3IobGV0IHI9MCxvPXQubGVuZ3RoO3I8bztyKyspe2NvbnN0IG89dFtyXTtFdChvLm9iamVjdCxlLG4sby5nZW9tZXRyeSxudWxsPT09aT9vLm1hdGVyaWFsOmksby5ncm91cCl9fWZ1bmN0aW9uIEV0KHQsZSxuLGkscixvKXtpZih0Lm9uQmVmb3JlUmVuZGVyKGcsZSxuLGkscixvKSx0Lm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKG4ubWF0cml4V29ybGRJbnZlcnNlLHQubWF0cml4V29ybGQpLHQubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeCh0Lm1vZGVsVmlld01hdHJpeCksdC5pc0ltbWVkaWF0ZVJlbmRlck9iamVjdCl7Y29uc3QgaT1BdChuLGUscix0KTtXLnNldE1hdGVyaWFsKHIpLGh0LnJlc2V0KCksKGZ1bmN0aW9uIGEodCxlKXt0LnJlbmRlcigoZnVuY3Rpb24odCl7Zy5yZW5kZXJCdWZmZXJJbW1lZGlhdGUodCxlKX0pKX0pKHQsaSl9ZWxzZSEwPT09ci50cmFuc3BhcmVudCYmMj09PXIuc2lkZT8oci5zaWRlPTEsci5uZWVkc1VwZGF0ZT0hMCxnLnJlbmRlckJ1ZmZlckRpcmVjdChuLGUsaSxyLHQsbyksci5zaWRlPTAsci5uZWVkc1VwZGF0ZT0hMCxnLnJlbmRlckJ1ZmZlckRpcmVjdChuLGUsaSxyLHQsbyksci5zaWRlPTIpOmcucmVuZGVyQnVmZmVyRGlyZWN0KG4sZSxpLHIsdCxvKTt0Lm9uQWZ0ZXJSZW5kZXIoZyxlLG4saSxyLG8pfWZ1bmN0aW9uIFR0KHQsZSxuKXshMCE9PWUuaXNTY2VuZSYmKGU9Vik7Y29uc3QgaT1ZLmdldCh0KSxyPXAuc3RhdGUubGlnaHRzLG89ci5zdGF0ZS52ZXJzaW9uLGE9dHQuZ2V0UGFyYW1ldGVycyh0LHIuc3RhdGUscC5zdGF0ZS5zaGFkb3dzQXJyYXksZSxuKSxzPXR0LmdldFByb2dyYW1DYWNoZUtleShhKTtsZXQgbD1pLnByb2dyYW1zO2kuZW52aXJvbm1lbnQ9dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2UuZW52aXJvbm1lbnQ6bnVsbCxpLmZvZz1lLmZvZyxpLmVudk1hcD0odC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0s6JCkuZ2V0KHQuZW52TWFwfHxpLmVudmlyb25tZW50KSx2b2lkIDA9PT1sJiYodC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIix5dCksbD1uZXcgTWFwLGkucHJvZ3JhbXM9bCk7bGV0IGM9bC5nZXQocyk7aWYodm9pZCAwIT09Yyl7aWYoaS5jdXJyZW50UHJvZ3JhbT09PWMmJmkubGlnaHRzU3RhdGVWZXJzaW9uPT09bylyZXR1cm4gQ3QodCxhKSxjfWVsc2UgYS51bmlmb3Jtcz10dC5nZXRVbmlmb3Jtcyh0KSx0Lm9uQnVpbGQoYSxnKSx0Lm9uQmVmb3JlQ29tcGlsZShhLGcpLGM9dHQuYWNxdWlyZVByb2dyYW0oYSxzKSxsLnNldChzLGMpLGkudW5pZm9ybXM9YS51bmlmb3Jtcztjb25zdCB1PWkudW5pZm9ybXM7KHQuaXNTaGFkZXJNYXRlcmlhbHx8dC5pc1Jhd1NoYWRlck1hdGVyaWFsKSYmITAhPT10LmNsaXBwaW5nfHwodS5jbGlwcGluZ1BsYW5lcz1ydC51bmlmb3JtKSxDdCh0LGEpLGkubmVlZHNMaWdodHM9KGZ1bmN0aW9uIGgodCl7cmV0dXJuIHQuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHx0LmlzTWVzaFRvb25NYXRlcmlhbHx8dC5pc01lc2hQaG9uZ01hdGVyaWFsfHx0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fHQuaXNTaGFkb3dNYXRlcmlhbHx8dC5pc1NoYWRlck1hdGVyaWFsJiYhMD09PXQubGlnaHRzfSkodCksaS5saWdodHNTdGF0ZVZlcnNpb249byxpLm5lZWRzTGlnaHRzJiYodS5hbWJpZW50TGlnaHRDb2xvci52YWx1ZT1yLnN0YXRlLmFtYmllbnQsdS5saWdodFByb2JlLnZhbHVlPXIuc3RhdGUucHJvYmUsdS5kaXJlY3Rpb25hbExpZ2h0cy52YWx1ZT1yLnN0YXRlLmRpcmVjdGlvbmFsLHUuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MudmFsdWU9ci5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvdyx1LnNwb3RMaWdodHMudmFsdWU9ci5zdGF0ZS5zcG90LHUuc3BvdExpZ2h0U2hhZG93cy52YWx1ZT1yLnN0YXRlLnNwb3RTaGFkb3csdS5yZWN0QXJlYUxpZ2h0cy52YWx1ZT1yLnN0YXRlLnJlY3RBcmVhLHUubHRjXzEudmFsdWU9ci5zdGF0ZS5yZWN0QXJlYUxUQzEsdS5sdGNfMi52YWx1ZT1yLnN0YXRlLnJlY3RBcmVhTFRDMix1LnBvaW50TGlnaHRzLnZhbHVlPXIuc3RhdGUucG9pbnQsdS5wb2ludExpZ2h0U2hhZG93cy52YWx1ZT1yLnN0YXRlLnBvaW50U2hhZG93LHUuaGVtaXNwaGVyZUxpZ2h0cy52YWx1ZT1yLnN0YXRlLmhlbWksdS5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZT1yLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWFwLHUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWU9ci5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeCx1LnNwb3RTaGFkb3dNYXAudmFsdWU9ci5zdGF0ZS5zcG90U2hhZG93TWFwLHUuc3BvdFNoYWRvd01hdHJpeC52YWx1ZT1yLnN0YXRlLnNwb3RTaGFkb3dNYXRyaXgsdS5wb2ludFNoYWRvd01hcC52YWx1ZT1yLnN0YXRlLnBvaW50U2hhZG93TWFwLHUucG9pbnRTaGFkb3dNYXRyaXgudmFsdWU9ci5zdGF0ZS5wb2ludFNoYWRvd01hdHJpeCk7Y29uc3QgZD1jLmdldFVuaWZvcm1zKCksZj1RMnQuc2VxV2l0aFZhbHVlKGQuc2VxLHUpO3JldHVybiBpLmN1cnJlbnRQcm9ncmFtPWMsaS51bmlmb3Jtc0xpc3Q9ZixjfWZ1bmN0aW9uIEN0KHQsZSl7Y29uc3Qgbj1ZLmdldCh0KTtuLm91dHB1dEVuY29kaW5nPWUub3V0cHV0RW5jb2Rpbmcsbi5pbnN0YW5jaW5nPWUuaW5zdGFuY2luZyxuLnNraW5uaW5nPWUuc2tpbm5pbmcsbi5tb3JwaFRhcmdldHM9ZS5tb3JwaFRhcmdldHMsbi5tb3JwaE5vcm1hbHM9ZS5tb3JwaE5vcm1hbHMsbi5udW1DbGlwcGluZ1BsYW5lcz1lLm51bUNsaXBwaW5nUGxhbmVzLG4ubnVtSW50ZXJzZWN0aW9uPWUubnVtQ2xpcEludGVyc2VjdGlvbixuLnZlcnRleEFscGhhcz1lLnZlcnRleEFscGhhcyxuLnZlcnRleFRhbmdlbnRzPWUudmVydGV4VGFuZ2VudHN9ZnVuY3Rpb24gQXQodCxlLG4saSl7ITAhPT1lLmlzU2NlbmUmJihlPVYpLFgucmVzZXRUZXh0dXJlVW5pdHMoKTtjb25zdCByPWUuZm9nLG89bnVsbD09PWI/Zy5vdXRwdXRFbmNvZGluZzpiLnRleHR1cmUuZW5jb2RpbmcsYT0obi5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0s6JCkuZ2V0KG4uZW52TWFwfHwobi5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2UuZW52aXJvbm1lbnQ6bnVsbCkpLHM9ITA9PT1uLnZlcnRleENvbG9ycyYmISFpLmdlb21ldHJ5JiYhIWkuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvciYmND09PWkuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZSxsPSEhaS5nZW9tZXRyeSYmISFpLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudCxjPSEhaS5nZW9tZXRyeSYmISFpLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix1PSEhaS5nZW9tZXRyeSYmISFpLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsaD1ZLmdldChuKSxkPXAuc3RhdGUubGlnaHRzOyEwIT09enx8ITAhPT1EJiZ0PT09d3x8cnQuc2V0U3RhdGUobix0LHQ9PT13JiZuLmlkPT09eCk7bGV0IGY9ITE7bi52ZXJzaW9uPT09aC5fX3ZlcnNpb24/aC5uZWVkc0xpZ2h0cyYmaC5saWdodHNTdGF0ZVZlcnNpb24hPT1kLnN0YXRlLnZlcnNpb258fGgub3V0cHV0RW5jb2RpbmchPT1vfHxpLmlzSW5zdGFuY2VkTWVzaCYmITE9PT1oLmluc3RhbmNpbmc/Zj0hMDppLmlzSW5zdGFuY2VkTWVzaHx8ITAhPT1oLmluc3RhbmNpbmc/aS5pc1NraW5uZWRNZXNoJiYhMT09PWguc2tpbm5pbmc/Zj0hMDppLmlzU2tpbm5lZE1lc2h8fCEwIT09aC5za2lubmluZz9oLmVudk1hcCE9PWF8fG4uZm9nJiZoLmZvZyE9PXI/Zj0hMDp2b2lkIDA9PT1oLm51bUNsaXBwaW5nUGxhbmVzfHxoLm51bUNsaXBwaW5nUGxhbmVzPT09cnQubnVtUGxhbmVzJiZoLm51bUludGVyc2VjdGlvbj09PXJ0Lm51bUludGVyc2VjdGlvbj8oaC52ZXJ0ZXhBbHBoYXMhPT1zfHxoLnZlcnRleFRhbmdlbnRzIT09bHx8aC5tb3JwaFRhcmdldHMhPT1jfHxoLm1vcnBoTm9ybWFscyE9PXUpJiYoZj0hMCk6Zj0hMDpmPSEwOmY9ITA6KGY9ITAsaC5fX3ZlcnNpb249bi52ZXJzaW9uKTtsZXQgbT1oLmN1cnJlbnRQcm9ncmFtOyEwPT09ZiYmKG09VHQobixlLGkpKTtsZXQgXz0hMSx5PSExLHY9ITE7Y29uc3QgUz1tLmdldFVuaWZvcm1zKCksTT1oLnVuaWZvcm1zO2lmKFcudXNlUHJvZ3JhbShtLnByb2dyYW0pJiYoXz0hMCx5PSEwLHY9ITApLG4uaWQhPT14JiYoeD1uLmlkLHk9ITApLF98fHchPT10KXtpZihTLnNldFZhbHVlKGR0LCJwcm9qZWN0aW9uTWF0cml4Iix0LnByb2plY3Rpb25NYXRyaXgpLEcubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmUy5zZXRWYWx1ZShkdCwibG9nRGVwdGhCdWZGQyIsMi8oTWF0aC5sb2codC5mYXIrMSkvTWF0aC5MTjIpKSx3IT09dCYmKHc9dCx5PSEwLHY9ITApLG4uaXNTaGFkZXJNYXRlcmlhbHx8bi5pc01lc2hQaG9uZ01hdGVyaWFsfHxuLmlzTWVzaFRvb25NYXRlcmlhbHx8bi5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxuLmVudk1hcCl7Y29uc3QgZT1TLm1hcC5jYW1lcmFQb3NpdGlvbjt2b2lkIDAhPT1lJiZlLnNldFZhbHVlKGR0LEYuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpKX0obi5pc01lc2hQaG9uZ01hdGVyaWFsfHxuLmlzTWVzaFRvb25NYXRlcmlhbHx8bi5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fG4uaXNNZXNoQmFzaWNNYXRlcmlhbHx8bi5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxuLmlzU2hhZGVyTWF0ZXJpYWwpJiZTLnNldFZhbHVlKGR0LCJpc09ydGhvZ3JhcGhpYyIsITA9PT10LmlzT3J0aG9ncmFwaGljQ2FtZXJhKSwobi5pc01lc2hQaG9uZ01hdGVyaWFsfHxuLmlzTWVzaFRvb25NYXRlcmlhbHx8bi5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fG4uaXNNZXNoQmFzaWNNYXRlcmlhbHx8bi5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxuLmlzU2hhZGVyTWF0ZXJpYWx8fG4uaXNTaGFkb3dNYXRlcmlhbHx8aS5pc1NraW5uZWRNZXNoKSYmUy5zZXRWYWx1ZShkdCwidmlld01hdHJpeCIsdC5tYXRyaXhXb3JsZEludmVyc2UpfWlmKGkuaXNTa2lubmVkTWVzaCl7Uy5zZXRPcHRpb25hbChkdCxpLCJiaW5kTWF0cml4IiksUy5zZXRPcHRpb25hbChkdCxpLCJiaW5kTWF0cml4SW52ZXJzZSIpO2NvbnN0IHQ9aS5za2VsZXRvbjt0JiYoRy5mbG9hdFZlcnRleFRleHR1cmVzPyhudWxsPT09dC5ib25lVGV4dHVyZSYmdC5jb21wdXRlQm9uZVRleHR1cmUoKSxTLnNldFZhbHVlKGR0LCJib25lVGV4dHVyZSIsdC5ib25lVGV4dHVyZSxYKSxTLnNldFZhbHVlKGR0LCJib25lVGV4dHVyZVNpemUiLHQuYm9uZVRleHR1cmVTaXplKSk6Uy5zZXRPcHRpb25hbChkdCx0LCJib25lTWF0cmljZXMiKSl9cmV0dXJuKHl8fGgucmVjZWl2ZVNoYWRvdyE9PWkucmVjZWl2ZVNoYWRvdykmJihoLnJlY2VpdmVTaGFkb3c9aS5yZWNlaXZlU2hhZG93LFMuc2V0VmFsdWUoZHQsInJlY2VpdmVTaGFkb3ciLGkucmVjZWl2ZVNoYWRvdykpLHkmJihTLnNldFZhbHVlKGR0LCJ0b25lTWFwcGluZ0V4cG9zdXJlIixnLnRvbmVNYXBwaW5nRXhwb3N1cmUpLGgubmVlZHNMaWdodHMmJihmdW5jdGlvbiBFKHQsZSl7dC5hbWJpZW50TGlnaHRDb2xvci5uZWVkc1VwZGF0ZT1lLHQubGlnaHRQcm9iZS5uZWVkc1VwZGF0ZT1lLHQuZGlyZWN0aW9uYWxMaWdodHMubmVlZHNVcGRhdGU9ZSx0LmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPWUsdC5wb2ludExpZ2h0cy5uZWVkc1VwZGF0ZT1lLHQucG9pbnRMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9ZSx0LnNwb3RMaWdodHMubmVlZHNVcGRhdGU9ZSx0LnNwb3RMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9ZSx0LnJlY3RBcmVhTGlnaHRzLm5lZWRzVXBkYXRlPWUsdC5oZW1pc3BoZXJlTGlnaHRzLm5lZWRzVXBkYXRlPWV9KShNLHYpLHImJm4uZm9nJiZldC5yZWZyZXNoRm9nVW5pZm9ybXMoTSxyKSxldC5yZWZyZXNoTWF0ZXJpYWxVbmlmb3JtcyhNLG4sQSxDLEIpLFEydC51cGxvYWQoZHQsaC51bmlmb3Jtc0xpc3QsTSxYKSksbi5pc1NoYWRlck1hdGVyaWFsJiYhMD09PW4udW5pZm9ybXNOZWVkVXBkYXRlJiYoUTJ0LnVwbG9hZChkdCxoLnVuaWZvcm1zTGlzdCxNLFgpLG4udW5pZm9ybXNOZWVkVXBkYXRlPSExKSxuLmlzU3ByaXRlTWF0ZXJpYWwmJlMuc2V0VmFsdWUoZHQsImNlbnRlciIsaS5jZW50ZXIpLFMuc2V0VmFsdWUoZHQsIm1vZGVsVmlld01hdHJpeCIsaS5tb2RlbFZpZXdNYXRyaXgpLFMuc2V0VmFsdWUoZHQsIm5vcm1hbE1hdHJpeCIsaS5ub3JtYWxNYXRyaXgpLFMuc2V0VmFsdWUoZHQsIm1vZGVsTWF0cml4IixpLm1hdHJpeFdvcmxkKSxtfXd0LnNldEFuaW1hdGlvbkxvb3AoKGZ1bmN0aW9uIGt0KHQpe3Z0JiZ2dCh0KX0pKSwidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd3Quc2V0Q29udGV4dCh3aW5kb3cpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbih0KXt2dD10LG10LnNldEFuaW1hdGlvbkxvb3AodCksbnVsbD09PXQ/d3Quc3RvcCgpOnd0LnN0YXJ0KCl9LG10LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsYnQpLG10LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLHh0KSx0aGlzLnJlbmRlcj1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWUmJiEwIT09ZS5pc0NhbWVyYSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIik7aWYoITA9PT1fKXJldHVybjshMD09PXQuYXV0b1VwZGF0ZSYmdC51cGRhdGVNYXRyaXhXb3JsZCgpLG51bGw9PT1lLnBhcmVudCYmZS51cGRhdGVNYXRyaXhXb3JsZCgpLCEwPT09bXQuZW5hYmxlZCYmITA9PT1tdC5pc1ByZXNlbnRpbmcmJighMD09PW10LmNhbWVyYUF1dG9VcGRhdGUmJm10LnVwZGF0ZUNhbWVyYShlKSxlPW10LmdldENhbWVyYSgpKSwhMD09PXQuaXNTY2VuZSYmdC5vbkJlZm9yZVJlbmRlcihnLHQsZSxiKSxwPWl0LmdldCh0LG0ubGVuZ3RoKSxwLmluaXQoKSxtLnB1c2gocCksSC5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksTy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChIKSxEPXRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQsej1ydC5pbml0KHRoaXMuY2xpcHBpbmdQbGFuZXMsRCxlKSxkPW50LmdldCh0LGYubGVuZ3RoKSxkLmluaXQoKSxmLnB1c2goZCksU3QodCxlLDAsZy5zb3J0T2JqZWN0cyksZC5maW5pc2goKSwhMD09PWcuc29ydE9iamVjdHMmJmQuc29ydChrLEwpLCEwPT09eiYmcnQuYmVnaW5TaGFkb3dzKCksb3QucmVuZGVyKHAuc3RhdGUuc2hhZG93c0FycmF5LHQsZSkscC5zZXR1cExpZ2h0cygpLHAuc2V0dXBMaWdodHNWaWV3KGUpLCEwPT09eiYmcnQuZW5kU2hhZG93cygpLCEwPT09dGhpcy5pbmZvLmF1dG9SZXNldCYmdGhpcy5pbmZvLnJlc2V0KCksYXQucmVuZGVyKGQsdCk7Y29uc3Qgbj1kLm9wYXF1ZSxpPWQudHJhbnNtaXNzaXZlLHI9ZC50cmFuc3BhcmVudDtuLmxlbmd0aD4wJiZNdChuLHQsZSksaS5sZW5ndGg+MCYmKGZ1bmN0aW9uIG8odCxlLG4saSl7bnVsbD09PUImJihCPW5ldyghMD09PXMmJiEwPT09Ry5pc1dlYkdMMj9FSnQ6U0p0KSgxMDI0LDEwMjQse2dlbmVyYXRlTWlwbWFwczohMCx0eXBlOm51bGwhPT11dC5jb252ZXJ0KGxadCk/bFp0OnJadCxtaW5GaWx0ZXI6aVp0LG1hZ0ZpbHRlcjpKS3Qsd3JhcFM6S0t0LHdyYXBUOktLdH0pKTtjb25zdCByPWcuZ2V0UmVuZGVyVGFyZ2V0KCk7Zy5zZXRSZW5kZXJUYXJnZXQoQiksZy5jbGVhcigpO2NvbnN0IG89Zy50b25lTWFwcGluZztnLnRvbmVNYXBwaW5nPTAsTXQodCxuLGkpLGcudG9uZU1hcHBpbmc9byxYLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KEIpLFgudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKEIpLGcuc2V0UmVuZGVyVGFyZ2V0KHIpLE10KGUsbixpKX0pKG4saSx0LGUpLHIubGVuZ3RoPjAmJk10KHIsdCxlKSxudWxsIT09YiYmKFgudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQoYiksWC51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAoYikpLCEwPT09dC5pc1NjZW5lJiZ0Lm9uQWZ0ZXJSZW5kZXIoZyx0LGUpLFcuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxXLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayghMCksVy5idWZmZXJzLmNvbG9yLnNldE1hc2soITApLFcuc2V0UG9seWdvbk9mZnNldCghMSksaHQucmVzZXREZWZhdWx0U3RhdGUoKSx4PS0xLHc9bnVsbCxtLnBvcCgpLHA9bS5sZW5ndGg+MD9tW20ubGVuZ3RoLTFdOm51bGwsZi5wb3AoKSxkPWYubGVuZ3RoPjA/ZltmLmxlbmd0aC0xXTpudWxsfSx0aGlzLmdldEFjdGl2ZUN1YmVGYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHl9LHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdn0sdGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sdGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24odCxlPTAsbj0wKXtiPXQseT1lLHY9bix0JiZ2b2lkIDA9PT1ZLmdldCh0KS5fX3dlYmdsRnJhbWVidWZmZXImJlguc2V0dXBSZW5kZXJUYXJnZXQodCk7bGV0IGk9bnVsbCxyPSExLG89ITE7aWYodCl7Y29uc3Qgbj10LnRleHR1cmU7KG4uaXNEYXRhVGV4dHVyZTNEfHxuLmlzRGF0YVRleHR1cmUyREFycmF5KSYmKG89ITApO2NvbnN0IGE9WS5nZXQodCkuX193ZWJnbEZyYW1lYnVmZmVyO3QuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KGk9YVtlXSxyPSEwKTppPXQuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0P1kuZ2V0KHQpLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjphLFMuY29weSh0LnZpZXdwb3J0KSxNLmNvcHkodC5zY2lzc29yKSxFPXQuc2Npc3NvclRlc3R9ZWxzZSBTLmNvcHkoUCkubXVsdGlwbHlTY2FsYXIoQSkuZmxvb3IoKSxNLmNvcHkoTikubXVsdGlwbHlTY2FsYXIoQSkuZmxvb3IoKSxFPUk7aWYoVy5iaW5kRnJhbWVidWZmZXIoMzYxNjAsaSkmJkcuZHJhd0J1ZmZlcnMpe2xldCBlPSExO2lmKHQpaWYodC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKXtjb25zdCBuPXQudGV4dHVyZTtpZihSLmxlbmd0aCE9PW4ubGVuZ3RofHwzNjA2NCE9PVJbMF0pe2ZvcihsZXQgdD0wLGU9bi5sZW5ndGg7dDxlO3QrKylSW3RdPTM2MDY0K3Q7Ui5sZW5ndGg9bi5sZW5ndGgsZT0hMH19ZWxzZSAxPT09Ui5sZW5ndGgmJjM2MDY0PT09UlswXXx8KFJbMF09MzYwNjQsUi5sZW5ndGg9MSxlPSEwKTtlbHNlIDE9PT1SLmxlbmd0aCYmMTAyOT09PVJbMF18fChSWzBdPTEwMjksUi5sZW5ndGg9MSxlPSEwKTtlJiYoRy5pc1dlYkdMMj9kdC5kcmF3QnVmZmVycyhSKTpqLmdldCgiV0VCR0xfZHJhd19idWZmZXJzIikuZHJhd0J1ZmZlcnNXRUJHTChSKSl9aWYoVy52aWV3cG9ydChTKSxXLnNjaXNzb3IoTSksVy5zZXRTY2lzc29yVGVzdChFKSxyKXtjb25zdCBpPVkuZ2V0KHQudGV4dHVyZSk7ZHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzQwNjkrZSxpLl9fd2ViZ2xUZXh0dXJlLG4pfWVsc2UgaWYobyl7Y29uc3QgaT1ZLmdldCh0LnRleHR1cmUpO2R0LmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LGkuX193ZWJnbFRleHR1cmUsbnx8MCxlfHwwKX19LHRoaXMucmVhZFJlbmRlclRhcmdldFBpeGVscz1mdW5jdGlvbih0LGUsbixpLHIsbyxhKXtpZighdHx8IXQuaXNXZWJHTFJlbmRlclRhcmdldClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQuIik7bGV0IHM9WS5nZXQodCkuX193ZWJnbEZyYW1lYnVmZmVyO2lmKHQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJnZvaWQgMCE9PWEmJihzPXNbYV0pLHMpe1cuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHMpO3RyeXtjb25zdCBhPXQudGV4dHVyZSxzPWEuZm9ybWF0LGw9YS50eXBlO2lmKHMhPT1oWnQmJnV0LmNvbnZlcnQocykhPT1kdC5nZXRQYXJhbWV0ZXIoMzU3MzkpKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0LiIpO2NvbnN0IGM9bD09PWxadCYmKGouaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8Ry5pc1dlYkdMMiYmai5oYXMoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSk7aWYoIShsPT09clp0fHx1dC5jb252ZXJ0KGwpPT09ZHQuZ2V0UGFyYW1ldGVyKDM1NzM4KXx8bD09PXNadCYmKEcuaXNXZWJHTDJ8fGouaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpfHxqLmhhcygiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IikpfHxjKSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gVW5zaWduZWRCeXRlVHlwZSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHR5cGUuIik7MzYwNTM9PT1kdC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKT9lPj0wJiZlPD10LndpZHRoLWkmJm4+PTAmJm48PXQuaGVpZ2h0LXImJmR0LnJlYWRQaXhlbHMoZSxuLGkscix1dC5jb252ZXJ0KHMpLHV0LmNvbnZlcnQobCksbyk6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZWFkUGl4ZWxzIGZyb20gcmVuZGVyVGFyZ2V0IGZhaWxlZC4gRnJhbWVidWZmZXIgbm90IGNvbXBsZXRlLiIpfWZpbmFsbHl7Y29uc3QgdD1udWxsIT09Yj9ZLmdldChiKS5fX3dlYmdsRnJhbWVidWZmZXI6bnVsbDtXLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0KX19fSx0aGlzLmNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZT1mdW5jdGlvbih0LGUsbj0wKXtjb25zdCBpPU1hdGgucG93KDIsLW4pLHI9TWF0aC5mbG9vcihlLmltYWdlLndpZHRoKmkpLG89TWF0aC5mbG9vcihlLmltYWdlLmhlaWdodCppKTtsZXQgYT11dC5jb252ZXJ0KGUuZm9ybWF0KTtHLmlzV2ViR0wyJiYoNjQwNz09PWEmJihhPTMyODQ5KSw2NDA4PT09YSYmKGE9MzI4NTYpKSxYLnNldFRleHR1cmUyRChlLDApLGR0LmNvcHlUZXhJbWFnZTJEKDM1NTMsbixhLHQueCx0LnkscixvLDApLFcudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKHQsZSxuLGk9MCl7Y29uc3Qgcj1lLmltYWdlLndpZHRoLG89ZS5pbWFnZS5oZWlnaHQsYT11dC5jb252ZXJ0KG4uZm9ybWF0KSxzPXV0LmNvbnZlcnQobi50eXBlKTtYLnNldFRleHR1cmUyRChuLDApLGR0LnBpeGVsU3RvcmVpKDM3NDQwLG4uZmxpcFkpLGR0LnBpeGVsU3RvcmVpKDM3NDQxLG4ucHJlbXVsdGlwbHlBbHBoYSksZHQucGl4ZWxTdG9yZWkoMzMxNyxuLnVucGFja0FsaWdubWVudCksZS5pc0RhdGFUZXh0dXJlP2R0LnRleFN1YkltYWdlMkQoMzU1MyxpLHQueCx0LnkscixvLGEscyxlLmltYWdlLmRhdGEpOmUuaXNDb21wcmVzc2VkVGV4dHVyZT9kdC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLGksdC54LHQueSxlLm1pcG1hcHNbMF0ud2lkdGgsZS5taXBtYXBzWzBdLmhlaWdodCxhLGUubWlwbWFwc1swXS5kYXRhKTpkdC50ZXhTdWJJbWFnZTJEKDM1NTMsaSx0LngsdC55LGEscyxlLmltYWdlKSwwPT09aSYmbi5nZW5lcmF0ZU1pcG1hcHMmJmR0LmdlbmVyYXRlTWlwbWFwKDM1NTMpLFcudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q9ZnVuY3Rpb24odCxlLG4saSxyPTApe2lmKGcuaXNXZWJHTDFSZW5kZXJlcilyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtjb25zdCBvPXQubWF4LngtdC5taW4ueCsxLGE9dC5tYXgueS10Lm1pbi55KzEscz10Lm1heC56LXQubWluLnorMSxsPXV0LmNvbnZlcnQoaS5mb3JtYXQpLGM9dXQuY29udmVydChpLnR5cGUpO2xldCB1O2lmKGkuaXNEYXRhVGV4dHVyZTNEKVguc2V0VGV4dHVyZTNEKGksMCksdT0zMjg3OTtlbHNle2lmKCFpLmlzRGF0YVRleHR1cmUyREFycmF5KXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiBvbmx5IHN1cHBvcnRzIFRIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheS4iKTtYLnNldFRleHR1cmUyREFycmF5KGksMCksdT0zNTg2Nn1kdC5waXhlbFN0b3JlaSgzNzQ0MCxpLmZsaXBZKSxkdC5waXhlbFN0b3JlaSgzNzQ0MSxpLnByZW11bHRpcGx5QWxwaGEpLGR0LnBpeGVsU3RvcmVpKDMzMTcsaS51bnBhY2tBbGlnbm1lbnQpO2NvbnN0IGg9ZHQuZ2V0UGFyYW1ldGVyKDMzMTQpLGQ9ZHQuZ2V0UGFyYW1ldGVyKDMyODc4KSxwPWR0LmdldFBhcmFtZXRlcigzMzE2KSxmPWR0LmdldFBhcmFtZXRlcigzMzE1KSxtPWR0LmdldFBhcmFtZXRlcigzMjg3NyksXz1uLmlzQ29tcHJlc3NlZFRleHR1cmU/bi5taXBtYXBzWzBdOm4uaW1hZ2U7ZHQucGl4ZWxTdG9yZWkoMzMxNCxfLndpZHRoKSxkdC5waXhlbFN0b3JlaSgzMjg3OCxfLmhlaWdodCksZHQucGl4ZWxTdG9yZWkoMzMxNix0Lm1pbi54KSxkdC5waXhlbFN0b3JlaSgzMzE1LHQubWluLnkpLGR0LnBpeGVsU3RvcmVpKDMyODc3LHQubWluLnopLG4uaXNEYXRhVGV4dHVyZXx8bi5pc0RhdGFUZXh0dXJlM0Q/ZHQudGV4U3ViSW1hZ2UzRCh1LHIsZS54LGUueSxlLnosbyxhLHMsbCxjLF8uZGF0YSk6bi5pc0NvbXByZXNzZWRUZXh0dXJlPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogdW50ZXN0ZWQgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBzcmNUZXh0dXJlLiIpLGR0LmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKHUscixlLngsZS55LGUueixvLGEscyxsLF8uZGF0YSkpOmR0LnRleFN1YkltYWdlM0QodSxyLGUueCxlLnksZS56LG8sYSxzLGwsYyxfKSxkdC5waXhlbFN0b3JlaSgzMzE0LGgpLGR0LnBpeGVsU3RvcmVpKDMyODc4LGQpLGR0LnBpeGVsU3RvcmVpKDMzMTYscCksZHQucGl4ZWxTdG9yZWkoMzMxNSxmKSxkdC5waXhlbFN0b3JlaSgzMjg3NyxtKSwwPT09ciYmaS5nZW5lcmF0ZU1pcG1hcHMmJmR0LmdlbmVyYXRlTWlwbWFwKHUpLFcudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmluaXRUZXh0dXJlPWZ1bmN0aW9uKHQpe1guc2V0VGV4dHVyZTJEKHQsMCksVy51bmJpbmRUZXh0dXJlKCl9LHRoaXMucmVzZXRTdGF0ZT1mdW5jdGlvbigpe3k9MCx2PTAsYj1udWxsLFcucmVzZXQoKSxodC5yZXNldCgpfSwidW5kZWZpbmVkIiE9dHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y2xhc3MgVzV0IGV4dGVuZHMgRzV0e31XNXQucHJvdG90eXBlLmlzV2ViR0wxUmVuZGVyZXI9ITA7Y2xhc3MgcTV0e2NvbnN0cnVjdG9yKHQsZT0yNWUtNSl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3ICRRdCh0KSx0aGlzLmRlbnNpdHk9ZX1jbG9uZSgpe3JldHVybiBuZXcgcTV0KHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fXE1dC5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO2NsYXNzIFk1dHtjb25zdHJ1Y3Rvcih0LGU9MSxuPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3ICRRdCh0KSx0aGlzLm5lYXI9ZSx0aGlzLmZhcj1ufWNsb25lKCl7cmV0dXJuIG5ldyBZNXQodGhpcy5jb2xvcix0aGlzLm5lYXIsdGhpcy5mYXIpfXRvSlNPTigpe3JldHVybnt0eXBlOiJGb2ciLGNvbG9yOnRoaXMuY29sb3IuZ2V0SGV4KCksbmVhcjp0aGlzLm5lYXIsZmFyOnRoaXMuZmFyfX19WTV0LnByb3RvdHlwZS5pc0ZvZz0hMDtjbGFzcyBYNXQgZXh0ZW5kcyBrUXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCwidW5kZWZpbmVkIiE9dHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksbnVsbCE9PXQuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksbnVsbCE9PXQuZW52aXJvbm1lbnQmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksbnVsbCE9PXQuZm9nJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksbnVsbCE9PXQub3ZlcnJpZGVNYXRlcmlhbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2NvbnN0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBudWxsIT09dGhpcy5mb2cmJihlLm9iamVjdC5mb2c9dGhpcy5mb2cudG9KU09OKCkpLGV9fVg1dC5wcm90b3R5cGUuaXNTY2VuZT0hMDtjbGFzcyAkNXR7Y29uc3RydWN0b3IodCxlKXt0aGlzLmFycmF5PXQsdGhpcy5zdHJpZGU9ZSx0aGlzLmNvdW50PXZvaWQgMCE9PXQ/dC5sZW5ndGgvZTowLHRoaXMudXNhZ2U9Rlp0LHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9WFp0KCl9b25VcGxvYWRDYWxsYmFjaygpe31zZXQgbmVlZHNVcGRhdGUodCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK31zZXRVc2FnZSh0KXtyZXR1cm4gdGhpcy51c2FnZT10LHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLmNvdW50PXQuY291bnQsdGhpcy5zdHJpZGU9dC5zdHJpZGUsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQsZSxuKXt0Kj10aGlzLnN0cmlkZSxuKj1lLnN0cmlkZTtmb3IobGV0IGk9MCxyPXRoaXMuc3RyaWRlO2k8cjtpKyspdGhpcy5hcnJheVt0K2ldPWUuYXJyYXlbbitpXTtyZXR1cm4gdGhpc31zZXQodCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9Y2xvbmUodCl7dm9pZCAwPT09dC5hcnJheUJ1ZmZlcnMmJih0LmFycmF5QnVmZmVycz17fSksdm9pZCAwPT09dGhpcy5hcnJheS5idWZmZXIuX3V1aWQmJih0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD1YWnQoKSksdm9pZCAwPT09dC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdJiYodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdPXRoaXMuYXJyYXkuc2xpY2UoMCkuYnVmZmVyKTtjb25zdCBlPW5ldyB0aGlzLmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSksbj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihlLHRoaXMuc3RyaWRlKTtyZXR1cm4gbi5zZXRVc2FnZSh0aGlzLnVzYWdlKSxufW9uVXBsb2FkKHQpe3JldHVybiB0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9dCx0aGlzfXRvSlNPTih0KXtyZXR1cm4gdm9pZCAwPT09dC5hcnJheUJ1ZmZlcnMmJih0LmFycmF5QnVmZmVycz17fSksdm9pZCAwPT09dGhpcy5hcnJheS5idWZmZXIuX3V1aWQmJih0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD1YWnQoKSksdm9pZCAwPT09dC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdJiYodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5LmJ1ZmZlcikpKSx7dXVpZDp0aGlzLnV1aWQsYnVmZmVyOnRoaXMuYXJyYXkuYnVmZmVyLl91dWlkLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLHN0cmlkZTp0aGlzLnN0cmlkZX19fSQ1dC5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlcj0hMDtjb25zdCBLNXQ9bmV3IENKdDtjbGFzcyBaNXR7Y29uc3RydWN0b3IodCxlLG4saT0hMSl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT10LHRoaXMuaXRlbVNpemU9ZSx0aGlzLm9mZnNldD1uLHRoaXMubm9ybWFsaXplZD0hMD09PWl9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuZGF0YS5jb3VudH1nZXQgYXJyYXkoKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5fXNldCBuZWVkc1VwZGF0ZSh0KXt0aGlzLmRhdGEubmVlZHNVcGRhdGU9dH1hcHBseU1hdHJpeDQodCl7Zm9yKGxldCBlPTAsbj10aGlzLmRhdGEuY291bnQ7ZTxuO2UrKylLNXQueD10aGlzLmdldFgoZSksSzV0Lnk9dGhpcy5nZXRZKGUpLEs1dC56PXRoaXMuZ2V0WihlKSxLNXQuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsSzV0LngsSzV0LnksSzV0LnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgZT0wLG49dGhpcy5jb3VudDtlPG47ZSsrKUs1dC54PXRoaXMuZ2V0WChlKSxLNXQueT10aGlzLmdldFkoZSksSzV0Lno9dGhpcy5nZXRaKGUpLEs1dC5hcHBseU5vcm1hbE1hdHJpeCh0KSx0aGlzLnNldFhZWihlLEs1dC54LEs1dC55LEs1dC56KTtyZXR1cm4gdGhpc310cmFuc2Zvcm1EaXJlY3Rpb24odCl7Zm9yKGxldCBlPTAsbj10aGlzLmNvdW50O2U8bjtlKyspSzV0Lng9dGhpcy5nZXRYKGUpLEs1dC55PXRoaXMuZ2V0WShlKSxLNXQuej10aGlzLmdldFooZSksSzV0LnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLEs1dC54LEs1dC55LEs1dC56KTtyZXR1cm4gdGhpc31zZXRYKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXRdPWUsdGhpc31zZXRZKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV09ZSx0aGlzfXNldFoodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsyXT1lLHRoaXN9c2V0Vyh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzNdPWUsdGhpc31nZXRYKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XX1nZXRZKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdfWdldFoodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl19Z2V0Vyh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXX1zZXRYWSh0LGUsbil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVsodD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQpKzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09bix0aGlzfXNldFhZWih0LGUsbixpKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5Wyh0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCkrMF09ZSx0aGlzLmRhdGEuYXJyYXlbdCsxXT1uLHRoaXMuZGF0YS5hcnJheVt0KzJdPWksdGhpc31zZXRYWVpXKHQsZSxuLGkscil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVsodD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQpKzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09bix0aGlzLmRhdGEuYXJyYXlbdCsyXT1pLHRoaXMuZGF0YS5hcnJheVt0KzNdPXIsdGhpc31jbG9uZSh0KXtpZih2b2lkIDA9PT10KXtjb25zb2xlLmxvZygiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUuY2xvbmUoKTogQ2xvbmluZyBhbiBpbnRlcmxhdmVkIGJ1ZmZlciBhdHRyaWJ1dGUgd2lsbCBkZWludGVybGVhdmUgYnVmZmVyIGRhdGEuIik7Y29uc3QgdD1bXTtmb3IobGV0IGU9MDtlPHRoaXMuY291bnQ7ZSsrKXtjb25zdCBuPWUqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IGU9MDtlPHRoaXMuaXRlbVNpemU7ZSsrKXQucHVzaCh0aGlzLmRhdGEuYXJyYXlbbitlXSl9cmV0dXJuIG5ldyBRUXQobmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodCksdGhpcy5pdGVtU2l6ZSx0aGlzLm5vcm1hbGl6ZWQpfXJldHVybiB2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVycyYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0mJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLmNsb25lKHQpKSxuZXcgWjV0KHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSx0aGlzLml0ZW1TaXplLHRoaXMub2Zmc2V0LHRoaXMubm9ybWFsaXplZCl9dG9KU09OKHQpe2lmKHZvaWQgMD09PXQpe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2NvbnN0IHQ9W107Zm9yKGxldCBlPTA7ZTx0aGlzLmNvdW50O2UrKyl7Y29uc3Qgbj1lKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBlPTA7ZTx0aGlzLml0ZW1TaXplO2UrKyl0LnB1c2godGhpcy5kYXRhLmFycmF5W24rZV0pfXJldHVybntpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OnQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fXJldHVybiB2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVycyYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0mJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLnRvSlNPTih0KSkse2lzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6ITAsaXRlbVNpemU6dGhpcy5pdGVtU2l6ZSxkYXRhOnRoaXMuZGF0YS51dWlkLG9mZnNldDp0aGlzLm9mZnNldCxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19fVo1dC5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT0hMDtjbGFzcyBKNXQgZXh0ZW5kcyBVUXR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyAkUXQoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMucm90YXRpb249MCx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLnRyYW5zcGFyZW50PSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24sdGhpc319bGV0IFE1dDtKNXQucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7Y29uc3QgdDN0PW5ldyBDSnQsZTN0PW5ldyBDSnQsbjN0PW5ldyBDSnQsaTN0PW5ldyBtSnQscjN0PW5ldyBtSnQsbzN0PW5ldyByUXQsYTN0PW5ldyBDSnQsczN0PW5ldyBDSnQsbDN0PW5ldyBDSnQsYzN0PW5ldyBtSnQsdTN0PW5ldyBtSnQsaDN0PW5ldyBtSnQ7Y2xhc3MgZDN0IGV4dGVuZHMga1F0e2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLHZvaWQgMD09PVE1dCl7UTV0PW5ldyBiMXQ7Y29uc3QgdD1uZXcgRmxvYXQzMkFycmF5KFstLjUsLS41LDAsMCwwLC41LC0uNSwwLDEsMCwuNSwuNSwwLDEsMSwtLjUsLjUsMCwwLDFdKSxlPW5ldyAkNXQodCw1KTtRNXQuc2V0SW5kZXgoWzAsMSwyLDAsMiwzXSksUTV0LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBaNXQoZSwzLDAsITEpKSxRNXQuc2V0QXR0cmlidXRlKCJ1diIsbmV3IFo1dChlLDIsMywhMSkpfXRoaXMuZ2VvbWV0cnk9UTV0LHRoaXMubWF0ZXJpYWw9dm9pZCAwIT09dD90Om5ldyBKNXQsdGhpcy5jZW50ZXI9bmV3IG1KdCguNSwuNSl9cmF5Y2FzdCh0LGUpe251bGw9PT10LmNhbWVyYSYmY29uc29sZS5lcnJvcignVEhSRUUuU3ByaXRlOiAiUmF5Y2FzdGVyLmNhbWVyYSIgbmVlZHMgdG8gYmUgc2V0IGluIG9yZGVyIHRvIHJheWNhc3QgYWdhaW5zdCBzcHJpdGVzLicpLGUzdC5zZXRGcm9tTWF0cml4U2NhbGUodGhpcy5tYXRyaXhXb3JsZCksbzN0LmNvcHkodC5jYW1lcmEubWF0cml4V29ybGQpLHRoaXMubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXModC5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLHRoaXMubWF0cml4V29ybGQpLG4zdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tb2RlbFZpZXdNYXRyaXgpLHQuY2FtZXJhLmlzUGVyc3BlY3RpdmVDYW1lcmEmJiExPT09dGhpcy5tYXRlcmlhbC5zaXplQXR0ZW51YXRpb24mJmUzdC5tdWx0aXBseVNjYWxhcigtbjN0LnopO2NvbnN0IG49dGhpcy5tYXRlcmlhbC5yb3RhdGlvbjtsZXQgaSxyOzAhPT1uJiYocj1NYXRoLmNvcyhuKSxpPU1hdGguc2luKG4pKTtjb25zdCBvPXRoaXMuY2VudGVyO3AzdChhM3Quc2V0KC0uNSwtLjUsMCksbjN0LG8sZTN0LGkscikscDN0KHMzdC5zZXQoLjUsLS41LDApLG4zdCxvLGUzdCxpLHIpLHAzdChsM3Quc2V0KC41LC41LDApLG4zdCxvLGUzdCxpLHIpLGMzdC5zZXQoMCwwKSx1M3Quc2V0KDEsMCksaDN0LnNldCgxLDEpO2xldCBhPXQucmF5LmludGVyc2VjdFRyaWFuZ2xlKGEzdCxzM3QsbDN0LCExLHQzdCk7aWYobnVsbD09PWEmJihwM3QoczN0LnNldCgtLjUsLjUsMCksbjN0LG8sZTN0LGksciksdTN0LnNldCgwLDEpLGE9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoYTN0LGwzdCxzM3QsITEsdDN0KSxudWxsPT09YSkpcmV0dXJuO2NvbnN0IHM9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8odDN0KTtzPHQubmVhcnx8cz50LmZhcnx8ZS5wdXNoKHtkaXN0YW5jZTpzLHBvaW50OnQzdC5jbG9uZSgpLHV2OkZRdC5nZXRVVih0M3QsYTN0LHMzdCxsM3QsYzN0LHUzdCxoM3QsbmV3IG1KdCksZmFjZTpudWxsLG9iamVjdDp0aGlzfSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx2b2lkIDAhPT10LmNlbnRlciYmdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXN9fWZ1bmN0aW9uIHAzdCh0LGUsbixpLHIsbyl7aTN0LnN1YlZlY3RvcnModCxuKS5hZGRTY2FsYXIoLjUpLm11bHRpcGx5KGkpLHZvaWQgMCE9PXI/KHIzdC54PW8qaTN0LngtcippM3QueSxyM3QueT1yKmkzdC54K28qaTN0LnkpOnIzdC5jb3B5KGkzdCksdC5jb3B5KGUpLHQueCs9cjN0LngsdC55Kz1yM3QueSx0LmFwcGx5TWF0cml4NChvM3QpfWQzdC5wcm90b3R5cGUuaXNTcHJpdGU9ITA7Y29uc3QgZjN0PW5ldyBDSnQsbTN0PW5ldyBDSnQ7Y2xhc3MgZzN0IGV4dGVuZHMga1F0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9jdXJyZW50TGV2ZWw9MCx0aGlzLnR5cGU9IkxPRCIsT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7bGV2ZWxzOntlbnVtZXJhYmxlOiEwLHZhbHVlOltdfSxpc0xPRDp7dmFsdWU6ITB9fSksdGhpcy5hdXRvVXBkYXRlPSEwfWNvcHkodCl7c3VwZXIuY29weSh0LCExKTtjb25zdCBlPXQubGV2ZWxzO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj1lW3RdO3RoaXMuYWRkTGV2ZWwobi5vYmplY3QuY2xvbmUoKSxuLmRpc3RhbmNlKX1yZXR1cm4gdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzfWFkZExldmVsKHQsZT0wKXtlPU1hdGguYWJzKGUpO2NvbnN0IG49dGhpcy5sZXZlbHM7bGV0IGk7Zm9yKGk9MDtpPG4ubGVuZ3RoJiYhKGU8bltpXS5kaXN0YW5jZSk7aSsrKTtyZXR1cm4gbi5zcGxpY2UoaSwwLHtkaXN0YW5jZTplLG9iamVjdDp0fSksdGhpcy5hZGQodCksdGhpc31nZXRDdXJyZW50TGV2ZWwoKXtyZXR1cm4gdGhpcy5fY3VycmVudExldmVsfWdldE9iamVjdEZvckRpc3RhbmNlKHQpe2NvbnN0IGU9dGhpcy5sZXZlbHM7aWYoZS5sZW5ndGg+MCl7bGV0IG4saTtmb3Iobj0xLGk9ZS5sZW5ndGg7bjxpJiYhKHQ8ZVtuXS5kaXN0YW5jZSk7bisrKTtyZXR1cm4gZVtuLTFdLm9iamVjdH1yZXR1cm4gbnVsbH1yYXljYXN0KHQsZSl7aWYodGhpcy5sZXZlbHMubGVuZ3RoPjApe2YzdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7Y29uc3Qgbj10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhmM3QpO3RoaXMuZ2V0T2JqZWN0Rm9yRGlzdGFuY2UobikucmF5Y2FzdCh0LGUpfX11cGRhdGUodCl7Y29uc3QgZT10aGlzLmxldmVscztpZihlLmxlbmd0aD4xKXtmM3Quc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLG0zdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7Y29uc3Qgbj1mM3QuZGlzdGFuY2VUbyhtM3QpL3Quem9vbTtsZXQgaSxyO2ZvcihlWzBdLm9iamVjdC52aXNpYmxlPSEwLGk9MSxyPWUubGVuZ3RoO2k8ciYmbj49ZVtpXS5kaXN0YW5jZTtpKyspZVtpLTFdLm9iamVjdC52aXNpYmxlPSExLGVbaV0ub2JqZWN0LnZpc2libGU9ITA7Zm9yKHRoaXMuX2N1cnJlbnRMZXZlbD1pLTE7aTxyO2krKyllW2ldLm9iamVjdC52aXNpYmxlPSExfX10b0pTT04odCl7Y29uc3QgZT1zdXBlci50b0pTT04odCk7ITE9PT10aGlzLmF1dG9VcGRhdGUmJihlLm9iamVjdC5hdXRvVXBkYXRlPSExKSxlLm9iamVjdC5sZXZlbHM9W107Y29uc3Qgbj10aGlzLmxldmVscztmb3IobGV0IHQ9MCxpPW4ubGVuZ3RoO3Q8aTt0Kyspe2NvbnN0IGk9blt0XTtlLm9iamVjdC5sZXZlbHMucHVzaCh7b2JqZWN0Omkub2JqZWN0LnV1aWQsZGlzdGFuY2U6aS5kaXN0YW5jZX0pfXJldHVybiBlfX1jb25zdCBfM3Q9bmV3IENKdCx5M3Q9bmV3IHdKdCx2M3Q9bmV3IHdKdCxiM3Q9bmV3IENKdCx4M3Q9bmV3IHJRdDtjbGFzcyB3M3QgZXh0ZW5kcyBCMXR7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iU2tpbm5lZE1lc2giLHRoaXMuYmluZE1vZGU9ImF0dGFjaGVkIix0aGlzLmJpbmRNYXRyaXg9bmV3IHJRdCx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyByUXR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJpbmRNb2RlPXQuYmluZE1vZGUsdGhpcy5iaW5kTWF0cml4LmNvcHkodC5iaW5kTWF0cml4KSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodC5iaW5kTWF0cml4SW52ZXJzZSksdGhpcy5za2VsZXRvbj10LnNrZWxldG9uLHRoaXN9YmluZCh0LGUpe3RoaXMuc2tlbGV0b249dCx2b2lkIDA9PT1lJiYodGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCksdGhpcy5za2VsZXRvbi5jYWxjdWxhdGVJbnZlcnNlcygpLGU9dGhpcy5tYXRyaXhXb3JsZCksdGhpcy5iaW5kTWF0cml4LmNvcHkoZSksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KGUpLmludmVydCgpfXBvc2UoKXt0aGlzLnNrZWxldG9uLnBvc2UoKX1ub3JtYWxpemVTa2luV2VpZ2h0cygpe2NvbnN0IHQ9bmV3IHdKdCxlPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5za2luV2VpZ2h0O2ZvcihsZXQgbj0wLGk9ZS5jb3VudDtuPGk7bisrKXt0Lng9ZS5nZXRYKG4pLHQueT1lLmdldFkobiksdC56PWUuZ2V0WihuKSx0Lnc9ZS5nZXRXKG4pO2NvbnN0IGk9MS90Lm1hbmhhdHRhbkxlbmd0aCgpO2khPT0xLzA/dC5tdWx0aXBseVNjYWxhcihpKTp0LnNldCgxLDAsMCwwKSxlLnNldFhZWlcobix0LngsdC55LHQueix0LncpfX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSwiYXR0YWNoZWQiPT09dGhpcy5iaW5kTW9kZT90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk6ImRldGFjaGVkIj09PXRoaXMuYmluZE1vZGU/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuYmluZE1hdHJpeCkuaW52ZXJ0KCk6Y29uc29sZS53YXJuKCJUSFJFRS5Ta2lubmVkTWVzaDogVW5yZWNvZ25pemVkIGJpbmRNb2RlOiAiK3RoaXMuYmluZE1vZGUpfWJvbmVUcmFuc2Zvcm0odCxlKXtjb25zdCBuPXRoaXMuc2tlbGV0b24saT10aGlzLmdlb21ldHJ5O3kzdC5mcm9tQnVmZmVyQXR0cmlidXRlKGkuYXR0cmlidXRlcy5za2luSW5kZXgsdCksdjN0LmZyb21CdWZmZXJBdHRyaWJ1dGUoaS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQsdCksXzN0LmZyb21CdWZmZXJBdHRyaWJ1dGUoaS5hdHRyaWJ1dGVzLnBvc2l0aW9uLHQpLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXgpLGUuc2V0KDAsMCwwKTtmb3IobGV0IHQ9MDt0PDQ7dCsrKXtjb25zdCBpPXYzdC5nZXRDb21wb25lbnQodCk7aWYoMCE9PWkpe2NvbnN0IHI9eTN0LmdldENvbXBvbmVudCh0KTt4M3QubXVsdGlwbHlNYXRyaWNlcyhuLmJvbmVzW3JdLm1hdHJpeFdvcmxkLG4uYm9uZUludmVyc2VzW3JdKSxlLmFkZFNjYWxlZFZlY3RvcihiM3QuY29weShfM3QpLmFwcGx5TWF0cml4NCh4M3QpLGkpfX1yZXR1cm4gZS5hcHBseU1hdHJpeDQodGhpcy5iaW5kTWF0cml4SW52ZXJzZSl9fXczdC5wcm90b3R5cGUuaXNTa2lubmVkTWVzaD0hMDtjbGFzcyBTM3QgZXh0ZW5kcyBrUXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQm9uZSJ9fVMzdC5wcm90b3R5cGUuaXNCb25lPSEwO2NsYXNzIE0zdCBleHRlbmRzIGJKdHtjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLG49MSxpLHIsbyxhLHMsbD0xMDAzLGM9MTAwMyx1LGgpe3N1cGVyKG51bGwsbyxhLHMsbCxjLGkscix1LGgpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDpufSx0aGlzLm1hZ0ZpbHRlcj1sLHRoaXMubWluRmlsdGVyPWMsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xLHRoaXMubmVlZHNVcGRhdGU9ITB9fU0zdC5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZT0hMDtjb25zdCBFM3Q9bmV3IHJRdCxUM3Q9bmV3IHJRdDtjbGFzcyBDM3R7Y29uc3RydWN0b3IodD1bXSxlPVtdKXt0aGlzLnV1aWQ9WFp0KCksdGhpcy5ib25lcz10LnNsaWNlKDApLHRoaXMuYm9uZUludmVyc2VzPWUsdGhpcy5ib25lTWF0cmljZXM9bnVsbCx0aGlzLmJvbmVUZXh0dXJlPW51bGwsdGhpcy5ib25lVGV4dHVyZVNpemU9MCx0aGlzLmZyYW1lPS0xLHRoaXMuaW5pdCgpfWluaXQoKXtjb25zdCB0PXRoaXMuYm9uZXMsZT10aGlzLmJvbmVJbnZlcnNlcztpZih0aGlzLmJvbmVNYXRyaWNlcz1uZXcgRmxvYXQzMkFycmF5KDE2KnQubGVuZ3RoKSwwPT09ZS5sZW5ndGgpdGhpcy5jYWxjdWxhdGVJbnZlcnNlcygpO2Vsc2UgaWYodC5sZW5ndGghPT1lLmxlbmd0aCl7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTnVtYmVyIG9mIGludmVyc2UgYm9uZSBtYXRyaWNlcyBkb2VzIG5vdCBtYXRjaCBhbW91bnQgb2YgYm9uZXMuIiksdGhpcy5ib25lSW52ZXJzZXM9W107Zm9yKGxldCB0PTAsZT10aGlzLmJvbmVzLmxlbmd0aDt0PGU7dCsrKXRoaXMuYm9uZUludmVyc2VzLnB1c2gobmV3IHJRdCl9fWNhbGN1bGF0ZUludmVyc2VzKCl7dGhpcy5ib25lSW52ZXJzZXMubGVuZ3RoPTA7Zm9yKGxldCB0PTAsZT10aGlzLmJvbmVzLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPW5ldyByUXQ7dGhpcy5ib25lc1t0XSYmZS5jb3B5KHRoaXMuYm9uZXNbdF0ubWF0cml4V29ybGQpLmludmVydCgpLHRoaXMuYm9uZUludmVyc2VzLnB1c2goZSl9fXBvc2UoKXtmb3IobGV0IHQ9MCxlPXRoaXMuYm9uZXMubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9dGhpcy5ib25lc1t0XTtlJiZlLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5ib25lSW52ZXJzZXNbdF0pLmludmVydCgpfWZvcihsZXQgdD0wLGU9dGhpcy5ib25lcy5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT10aGlzLmJvbmVzW3RdO2UmJihlLnBhcmVudCYmZS5wYXJlbnQuaXNCb25lPyhlLm1hdHJpeC5jb3B5KGUucGFyZW50Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKSxlLm1hdHJpeC5tdWx0aXBseShlLm1hdHJpeFdvcmxkKSk6ZS5tYXRyaXguY29weShlLm1hdHJpeFdvcmxkKSxlLm1hdHJpeC5kZWNvbXBvc2UoZS5wb3NpdGlvbixlLnF1YXRlcm5pb24sZS5zY2FsZSkpfX11cGRhdGUoKXtjb25zdCB0PXRoaXMuYm9uZXMsZT10aGlzLmJvbmVJbnZlcnNlcyxuPXRoaXMuYm9uZU1hdHJpY2VzLGk9dGhpcy5ib25lVGV4dHVyZTtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspRTN0Lm11bHRpcGx5TWF0cmljZXModFtpXT90W2ldLm1hdHJpeFdvcmxkOlQzdCxlW2ldKSxFM3QudG9BcnJheShuLDE2KmkpO251bGwhPT1pJiYoaS5uZWVkc1VwZGF0ZT0hMCl9Y2xvbmUoKXtyZXR1cm4gbmV3IEMzdCh0aGlzLmJvbmVzLHRoaXMuYm9uZUludmVyc2VzKX1jb21wdXRlQm9uZVRleHR1cmUoKXtsZXQgdD1NYXRoLnNxcnQoNCp0aGlzLmJvbmVzLmxlbmd0aCk7dD1RWnQodCksdD1NYXRoLm1heCh0LDQpO2NvbnN0IGU9bmV3IEZsb2F0MzJBcnJheSh0KnQqNCk7ZS5zZXQodGhpcy5ib25lTWF0cmljZXMpO2NvbnN0IG49bmV3IE0zdChlLHQsdCxoWnQsc1p0KTtyZXR1cm4gdGhpcy5ib25lTWF0cmljZXM9ZSx0aGlzLmJvbmVUZXh0dXJlPW4sdGhpcy5ib25lVGV4dHVyZVNpemU9dCx0aGlzfWdldEJvbmVCeU5hbWUodCl7Zm9yKGxldCBlPTAsbj10aGlzLmJvbmVzLmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXRoaXMuYm9uZXNbZV07aWYobi5uYW1lPT09dClyZXR1cm4gbn19ZGlzcG9zZSgpe251bGwhPT10aGlzLmJvbmVUZXh0dXJlJiYodGhpcy5ib25lVGV4dHVyZS5kaXNwb3NlKCksdGhpcy5ib25lVGV4dHVyZT1udWxsKX1mcm9tSlNPTih0LGUpe3RoaXMudXVpZD10LnV1aWQ7Zm9yKGxldCBuPTAsaT10LmJvbmVzLmxlbmd0aDtuPGk7bisrKXtjb25zdCBpPXQuYm9uZXNbbl07bGV0IHI9ZVtpXTt2b2lkIDA9PT1yJiYoY29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTm8gYm9uZSBmb3VuZCB3aXRoIFVVSUQ6IixpKSxyPW5ldyBTM3QpLHRoaXMuYm9uZXMucHVzaChyKSx0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKChuZXcgclF0KS5mcm9tQXJyYXkodC5ib25lSW52ZXJzZXNbbl0pKX1yZXR1cm4gdGhpcy5pbml0KCksdGhpc310b0pTT04oKXtjb25zdCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiU2tlbGV0b24iLGdlbmVyYXRvcjoiU2tlbGV0b24udG9KU09OIn0sYm9uZXM6W10sYm9uZUludmVyc2VzOltdfTt0LnV1aWQ9dGhpcy51dWlkO2NvbnN0IGU9dGhpcy5ib25lcyxuPXRoaXMuYm9uZUludmVyc2VzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyl0LmJvbmVzLnB1c2goZVtpXS51dWlkKSx0LmJvbmVJbnZlcnNlcy5wdXNoKG5baV0udG9BcnJheSgpKTtyZXR1cm4gdH19Y29uc3QgQTN0PW5ldyByUXQsazN0PW5ldyByUXQsTDN0PVtdLFAzdD1uZXcgQjF0O2NsYXNzIE4zdCBleHRlbmRzIEIxdHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCxlKSx0aGlzLmluc3RhbmNlTWF0cml4PW5ldyBRUXQobmV3IEZsb2F0MzJBcnJheSgxNipuKSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1uLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSxudWxsIT09dC5pbnN0YW5jZUNvbG9yJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc31nZXRDb2xvckF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9Z2V0TWF0cml4QXQodCxlKXtlLmZyb21BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LDE2KnQpfXJheWNhc3QodCxlKXtjb25zdCBuPXRoaXMubWF0cml4V29ybGQsaT10aGlzLmNvdW50O2lmKFAzdC5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LFAzdC5tYXRlcmlhbD10aGlzLm1hdGVyaWFsLHZvaWQgMCE9PVAzdC5tYXRlcmlhbClmb3IobGV0IHI9MDtyPGk7cisrKXt0aGlzLmdldE1hdHJpeEF0KHIsQTN0KSxrM3QubXVsdGlwbHlNYXRyaWNlcyhuLEEzdCksUDN0Lm1hdHJpeFdvcmxkPWszdCxQM3QucmF5Y2FzdCh0LEwzdCk7Zm9yKGxldCB0PTAsbj1MM3QubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49TDN0W3RdO24uaW5zdGFuY2VJZD1yLG4ub2JqZWN0PXRoaXMsZS5wdXNoKG4pfUwzdC5sZW5ndGg9MH19c2V0Q29sb3JBdCh0LGUpe251bGw9PT10aGlzLmluc3RhbmNlQ29sb3ImJih0aGlzLmluc3RhbmNlQ29sb3I9bmV3IFFRdChuZXcgRmxvYXQzMkFycmF5KDMqdGhpcy5pbnN0YW5jZU1hdHJpeC5jb3VudCksMykpLGUudG9BcnJheSh0aGlzLmluc3RhbmNlQ29sb3IuYXJyYXksMyp0KX1zZXRNYXRyaXhBdCh0LGUpe2UudG9BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LDE2KnQpfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX1OM3QucHJvdG90eXBlLmlzSW5zdGFuY2VkTWVzaD0hMDtjbGFzcyBJM3QgZXh0ZW5kcyBVUXR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyAkUXQoMTY3NzcyMTUpLHRoaXMubGluZXdpZHRoPTEsdGhpcy5saW5lY2FwPSJyb3VuZCIsdGhpcy5saW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubGluZXdpZHRoPXQubGluZXdpZHRoLHRoaXMubGluZWNhcD10LmxpbmVjYXAsdGhpcy5saW5lam9pbj10LmxpbmVqb2luLHRoaXN9fUkzdC5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbD0hMDtjb25zdCBSM3Q9bmV3IENKdCxPM3Q9bmV3IENKdCx6M3Q9bmV3IHJRdCxEM3Q9bmV3IGlRdCxCM3Q9bmV3ICRKdDtjbGFzcyBIM3QgZXh0ZW5kcyBrUXR7Y29uc3RydWN0b3IodD1uZXcgYjF0LGU9bmV3IEkzdCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmUiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31jb21wdXRlTGluZURpc3RhbmNlcygpe2NvbnN0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYobnVsbD09PXQuaW5kZXgpe2NvbnN0IGU9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLG49WzBdO2ZvcihsZXQgdD0xLGk9ZS5jb3VudDt0PGk7dCsrKVIzdC5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdC0xKSxPM3QuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQpLG5bdF09blt0LTFdLG5bdF0rPVIzdC5kaXN0YW5jZVRvKE8zdCk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IGwxdChuLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSB0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfXJheWNhc3QodCxlKXtjb25zdCBuPXRoaXMuZ2VvbWV0cnksaT10aGlzLm1hdHJpeFdvcmxkLHI9dC5wYXJhbXMuTGluZS50aHJlc2hvbGQsbz1uLmRyYXdSYW5nZTtpZihudWxsPT09bi5ib3VuZGluZ1NwaGVyZSYmbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxCM3QuY29weShuLmJvdW5kaW5nU3BoZXJlKSxCM3QuYXBwbHlNYXRyaXg0KGkpLEIzdC5yYWRpdXMrPXIsITE9PT10LnJheS5pbnRlcnNlY3RzU3BoZXJlKEIzdCkpcmV0dXJuO3ozdC5jb3B5KGkpLmludmVydCgpLEQzdC5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoejN0KTtjb25zdCBhPXIvKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMykscz1hKmEsbD1uZXcgQ0p0LGM9bmV3IENKdCx1PW5ldyBDSnQsaD1uZXcgQ0p0LGQ9dGhpcy5pc0xpbmVTZWdtZW50cz8yOjE7aWYobi5pc0J1ZmZlckdlb21ldHJ5KXtjb25zdCBpPW4uaW5kZXgscj1uLmF0dHJpYnV0ZXMucG9zaXRpb247aWYobnVsbCE9PWkpZm9yKGxldCBuPU1hdGgubWF4KDAsby5zdGFydCksYT1NYXRoLm1pbihpLmNvdW50LG8uc3RhcnQrby5jb3VudCktMTtuPGE7bis9ZCl7Y29uc3Qgbz1pLmdldFgobiksYT1pLmdldFgobisxKTtpZihsLmZyb21CdWZmZXJBdHRyaWJ1dGUocixvKSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUocixhKSxEM3QuZGlzdGFuY2VTcVRvU2VnbWVudChsLGMsaCx1KT5zKWNvbnRpbnVlO2guYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2NvbnN0IGQ9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oaCk7ZDx0Lm5lYXJ8fGQ+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6ZCxwb2ludDp1LmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4Om4sZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSl9ZWxzZSBmb3IobGV0IG49TWF0aC5tYXgoMCxvLnN0YXJ0KSxpPU1hdGgubWluKHIuY291bnQsby5zdGFydCtvLmNvdW50KS0xO248aTtuKz1kKXtpZihsLmZyb21CdWZmZXJBdHRyaWJ1dGUocixuKSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUocixuKzEpLEQzdC5kaXN0YW5jZVNxVG9TZWdtZW50KGwsYyxoLHUpPnMpY29udGludWU7aC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7Y29uc3QgaT10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhoKTtpPHQubmVhcnx8aT50LmZhcnx8ZS5wdXNoKHtkaXN0YW5jZTppLHBvaW50OnUuY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6bixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX19ZWxzZSBuLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7Y29uc3QgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7Y29uc3QgZT10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKGUpO2lmKG4ubGVuZ3RoPjApe2NvbnN0IHQ9ZVtuWzBdXTtpZih2b2lkIDAhPT10KXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dFtlXS5uYW1lfHxTdHJpbmcoZSk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtuXT1lfX19fWVsc2V7Y29uc3QgZT10Lm1vcnBoVGFyZ2V0czt2b2lkIDAhPT1lJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19SDN0LnByb3RvdHlwZS5pc0xpbmU9ITA7Y29uc3QgRjN0PW5ldyBDSnQsVjN0PW5ldyBDSnQ7Y2xhc3MgVTN0IGV4dGVuZHMgSDN0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkxpbmVTZWdtZW50cyJ9Y29tcHV0ZUxpbmVEaXN0YW5jZXMoKXtjb25zdCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKG51bGw9PT10LmluZGV4KXtjb25zdCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixuPVtdO2ZvcihsZXQgdD0wLGk9ZS5jb3VudDt0PGk7dCs9MilGM3QuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQpLFYzdC5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCsxKSxuW3RdPTA9PT10PzA6blt0LTFdLG5bdCsxXT1uW3RdK0YzdC5kaXN0YW5jZVRvKFYzdCk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IGwxdChuLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc319VTN0LnByb3RvdHlwZS5pc0xpbmVTZWdtZW50cz0hMDtjbGFzcyBqM3QgZXh0ZW5kcyBIM3R7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iTGluZUxvb3AifX1qM3QucHJvdG90eXBlLmlzTGluZUxvb3A9ITA7Y2xhc3MgRzN0IGV4dGVuZHMgVVF0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgJFF0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLnNpemU9MSx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX1HM3QucHJvdG90eXBlLmlzUG9pbnRzTWF0ZXJpYWw9ITA7Y29uc3QgVzN0PW5ldyByUXQscTN0PW5ldyBpUXQsWTN0PW5ldyAkSnQsWDN0PW5ldyBDSnQ7Y2xhc3MgJDN0IGV4dGVuZHMga1F0e2NvbnN0cnVjdG9yKHQ9bmV3IGIxdCxlPW5ldyBHM3Qpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHMiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31yYXljYXN0KHQsZSl7Y29uc3Qgbj10aGlzLmdlb21ldHJ5LGk9dGhpcy5tYXRyaXhXb3JsZCxyPXQucGFyYW1zLlBvaW50cy50aHJlc2hvbGQsbz1uLmRyYXdSYW5nZTtpZihudWxsPT09bi5ib3VuZGluZ1NwaGVyZSYmbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxZM3QuY29weShuLmJvdW5kaW5nU3BoZXJlKSxZM3QuYXBwbHlNYXRyaXg0KGkpLFkzdC5yYWRpdXMrPXIsITE9PT10LnJheS5pbnRlcnNlY3RzU3BoZXJlKFkzdCkpcmV0dXJuO1czdC5jb3B5KGkpLmludmVydCgpLHEzdC5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoVzN0KTtjb25zdCBhPXIvKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMykscz1hKmE7aWYobi5pc0J1ZmZlckdlb21ldHJ5KXtjb25zdCByPW4uaW5kZXgsYT1uLmF0dHJpYnV0ZXMucG9zaXRpb247aWYobnVsbCE9PXIpZm9yKGxldCBuPU1hdGgubWF4KDAsby5zdGFydCksbD1NYXRoLm1pbihyLmNvdW50LG8uc3RhcnQrby5jb3VudCk7bjxsO24rKyl7Y29uc3Qgbz1yLmdldFgobik7WDN0LmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxvKSxLM3QoWDN0LG8scyxpLHQsZSx0aGlzKX1lbHNlIGZvcihsZXQgbj1NYXRoLm1heCgwLG8uc3RhcnQpLHI9TWF0aC5taW4oYS5jb3VudCxvLnN0YXJ0K28uY291bnQpO248cjtuKyspWDN0LmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxuKSxLM3QoWDN0LG4scyxpLHQsZSx0aGlzKX1lbHNlIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtjb25zdCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtjb25zdCBlPXQubW9ycGhBdHRyaWJ1dGVzLG49T2JqZWN0LmtleXMoZSk7aWYobi5sZW5ndGg+MCl7Y29uc3QgdD1lW25bMF1dO2lmKHZvaWQgMCE9PXQpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10W2VdLm5hbWV8fFN0cmluZyhlKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W25dPWV9fX19ZWxzZXtjb25zdCBlPXQubW9ycGhUYXJnZXRzO3ZvaWQgMCE9PWUmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fWZ1bmN0aW9uIEszdCh0LGUsbixpLHIsbyxhKXtjb25zdCBzPXEzdC5kaXN0YW5jZVNxVG9Qb2ludCh0KTtpZihzPG4pe2NvbnN0IG49bmV3IENKdDtxM3QuY2xvc2VzdFBvaW50VG9Qb2ludCh0LG4pLG4uYXBwbHlNYXRyaXg0KGkpO2NvbnN0IGw9ci5yYXkub3JpZ2luLmRpc3RhbmNlVG8obik7aWYobDxyLm5lYXJ8fGw+ci5mYXIpcmV0dXJuO28ucHVzaCh7ZGlzdGFuY2U6bCxkaXN0YW5jZVRvUmF5Ok1hdGguc3FydChzKSxwb2ludDpuLGluZGV4OmUsZmFjZTpudWxsLG9iamVjdDphfSl9fSQzdC5wcm90b3R5cGUuaXNQb2ludHM9ITA7Y2xhc3MgWjN0IGV4dGVuZHMgYkp0e2NvbnN0cnVjdG9yKHQsZSxuLGkscixvLGEscyxsKXtzdXBlcih0LGUsbixpLHIsbyxhLHMsbCksdGhpcy5mb3JtYXQ9dm9pZCAwIT09YT9hOnVadCx0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT1vP286ZVp0LHRoaXMubWFnRmlsdGVyPXZvaWQgMCE9PXI/cjplWnQsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITE7Y29uc3QgYz10aGlzOyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjaygoZnVuY3Rpb24gZSgpe2MubmVlZHNVcGRhdGU9ITAsdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGUpfSkpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuaW1hZ2UpLmNvcHkodGhpcyl9dXBkYXRlKCl7Y29uc3QgdD10aGlzLmltYWdlOzA9PSJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVhZHlTdGF0ZT49dC5IQVZFX0NVUlJFTlRfREFUQSYmKHRoaXMubmVlZHNVcGRhdGU9ITApfX1aM3QucHJvdG90eXBlLmlzVmlkZW9UZXh0dXJlPSEwO2NsYXNzIEozdCBleHRlbmRzIGJKdHtjb25zdHJ1Y3Rvcih0LGUsbixpLHIsbyxhLHMsbCxjLHUsaCl7c3VwZXIobnVsbCxvLGEscyxsLGMsaSxyLHUsaCksdGhpcy5pbWFnZT17d2lkdGg6ZSxoZWlnaHQ6bn0sdGhpcy5taXBtYXBzPXQsdGhpcy5mbGlwWT0hMSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX19SjN0LnByb3RvdHlwZS5pc0NvbXByZXNzZWRUZXh0dXJlPSEwO2NsYXNzIFEzdCBleHRlbmRzIGJKdHtjb25zdHJ1Y3Rvcih0LGUsbixpLHIsbyxhLHMsbCl7c3VwZXIodCxlLG4saSxyLG8sYSxzLGwpLHRoaXMubmVlZHNVcGRhdGU9ITB9fVEzdC5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwO2NsYXNzIHQ0dCBleHRlbmRzIGJKdHtjb25zdHJ1Y3Rvcih0LGUsbixpLHIsbyxhLHMsbCxjKXtpZigoYz12b2lkIDAhPT1jP2M6ZFp0KSE9PWRadCYmYyE9PXBadCl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoVGV4dHVyZSBmb3JtYXQgbXVzdCBiZSBlaXRoZXIgVEhSRUUuRGVwdGhGb3JtYXQgb3IgVEhSRUUuRGVwdGhTdGVuY2lsRm9ybWF0Iik7dm9pZCAwPT09biYmYz09PWRadCYmKG49b1p0KSx2b2lkIDA9PT1uJiZjPT09cFp0JiYobj1jWnQpLHN1cGVyKG51bGwsaSxyLG8sYSxzLGMsbixsKSx0aGlzLmltYWdlPXt3aWR0aDp0LGhlaWdodDplfSx0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1hP2E6Skt0LHRoaXMubWluRmlsdGVyPXZvaWQgMCE9PXM/czpKS3QsdGhpcy5mbGlwWT0hMSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX19dDR0LnByb3RvdHlwZS5pc0RlcHRoVGV4dHVyZT0hMDtjbGFzcyBlNHQgZXh0ZW5kcyBiMXR7Y29uc3RydWN0b3IodD0xLGU9OCxuPTAsaT0yKk1hdGguUEkpe3N1cGVyKCksdGhpcy50eXBlPSJDaXJjbGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxzZWdtZW50czplLHRoZXRhU3RhcnQ6bix0aGV0YUxlbmd0aDppfSxlPU1hdGgubWF4KDMsZSk7Y29uc3Qgcj1bXSxvPVtdLGE9W10scz1bXSxsPW5ldyBDSnQsYz1uZXcgbUp0O28ucHVzaCgwLDAsMCksYS5wdXNoKDAsMCwxKSxzLnB1c2goLjUsLjUpO2ZvcihsZXQgcj0wLHU9MztyPD1lO3IrKyx1Kz0zKXtjb25zdCBoPW4rci9lKmk7bC54PXQqTWF0aC5jb3MoaCksbC55PXQqTWF0aC5zaW4oaCksby5wdXNoKGwueCxsLnksbC56KSxhLnB1c2goMCwwLDEpLGMueD0ob1t1XS90KzEpLzIsYy55PShvW3UrMV0vdCsxKS8yLHMucHVzaChjLngsYy55KX1mb3IobGV0IHQ9MTt0PD1lO3QrKylyLnB1c2godCx0KzEsMCk7dGhpcy5zZXRJbmRleChyKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBsMXQobywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGwxdChhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBsMXQocywyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgZTR0KHQucmFkaXVzLHQuc2VnbWVudHMsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX1jbGFzcyBuNHQgZXh0ZW5kcyBiMXR7Y29uc3RydWN0b3IodD0xLGU9MSxuPTEsaT04LHI9MSxvPSExLGE9MCxzPTIqTWF0aC5QSSl7c3VwZXIoKSx0aGlzLnR5cGU9IkN5bGluZGVyR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzVG9wOnQscmFkaXVzQm90dG9tOmUsaGVpZ2h0Om4scmFkaWFsU2VnbWVudHM6aSxoZWlnaHRTZWdtZW50czpyLG9wZW5FbmRlZDpvLHRoZXRhU3RhcnQ6YSx0aGV0YUxlbmd0aDpzfTtjb25zdCBsPXRoaXM7aT1NYXRoLmZsb29yKGkpLHI9TWF0aC5mbG9vcihyKTtjb25zdCBjPVtdLHU9W10saD1bXSxkPVtdO2xldCBwPTA7Y29uc3QgZj1bXSxtPW4vMjtsZXQgZz0wO2Z1bmN0aW9uIF8obil7Y29uc3Qgcj1wLG89bmV3IG1KdCxmPW5ldyBDSnQ7bGV0IF89MDtjb25zdCB5PSEwPT09bj90OmUsdj0hMD09PW4/MTotMTtmb3IobGV0IHQ9MTt0PD1pO3QrKyl1LnB1c2goMCxtKnYsMCksaC5wdXNoKDAsdiwwKSxkLnB1c2goLjUsLjUpLHArKztjb25zdCBiPXA7Zm9yKGxldCB0PTA7dDw9aTt0Kyspe2NvbnN0IGU9dC9pKnMrYSxuPU1hdGguY29zKGUpLHI9TWF0aC5zaW4oZSk7Zi54PXkqcixmLnk9bSp2LGYuej15Km4sdS5wdXNoKGYueCxmLnksZi56KSxoLnB1c2goMCx2LDApLG8ueD0uNSpuKy41LG8ueT0uNSpyKnYrLjUsZC5wdXNoKG8ueCxvLnkpLHArK31mb3IobGV0IHQ9MDt0PGk7dCsrKXtjb25zdCBlPXIrdCxpPWIrdDshMD09PW4/Yy5wdXNoKGksaSsxLGUpOmMucHVzaChpKzEsaSxlKSxfKz0zfWwuYWRkR3JvdXAoZyxfLCEwPT09bj8xOjIpLGcrPV99IShmdW5jdGlvbiB5KCl7Y29uc3Qgbz1uZXcgQ0p0LF89bmV3IENKdDtsZXQgeT0wO2NvbnN0IHY9KGUtdCkvbjtmb3IobGV0IGw9MDtsPD1yO2wrKyl7Y29uc3QgYz1bXSxnPWwvcix5PWcqKGUtdCkrdDtmb3IobGV0IHQ9MDt0PD1pO3QrKyl7Y29uc3QgZT10L2kscj1lKnMrYSxsPU1hdGguc2luKHIpLGY9TWF0aC5jb3Mocik7Xy54PXkqbCxfLnk9LWcqbittLF8uej15KmYsdS5wdXNoKF8ueCxfLnksXy56KSxvLnNldChsLHYsZikubm9ybWFsaXplKCksaC5wdXNoKG8ueCxvLnksby56KSxkLnB1c2goZSwxLWcpLGMucHVzaChwKyspfWYucHVzaChjKX1mb3IobGV0IHQ9MDt0PGk7dCsrKWZvcihsZXQgZT0wO2U8cjtlKyspe2NvbnN0IG49ZltlKzFdW3RdLGk9ZltlKzFdW3QrMV0scj1mW2VdW3QrMV07Yy5wdXNoKGZbZV1bdF0sbixyKSxjLnB1c2gobixpLHIpLHkrPTZ9bC5hZGRHcm91cChnLHksMCksZys9eX0pKCksITE9PT1vJiYodD4wJiZfKCEwKSxlPjAmJl8oITEpKSx0aGlzLnNldEluZGV4KGMpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGwxdCh1LDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgbDF0KGgsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGwxdChkLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBuNHQodC5yYWRpdXNUb3AsdC5yYWRpdXNCb3R0b20sdC5oZWlnaHQsdC5yYWRpYWxTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzLHQub3BlbkVuZGVkLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19Y2xhc3MgaTR0IGV4dGVuZHMgbjR0e2NvbnN0cnVjdG9yKHQ9MSxlPTEsbj04LGk9MSxyPSExLG89MCxhPTIqTWF0aC5QSSl7c3VwZXIoMCx0LGUsbixpLHIsbyxhKSx0aGlzLnR5cGU9IkNvbmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxoZWlnaHQ6ZSxyYWRpYWxTZWdtZW50czpuLGhlaWdodFNlZ21lbnRzOmksb3BlbkVuZGVkOnIsdGhldGFTdGFydDpvLHRoZXRhTGVuZ3RoOmF9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IGk0dCh0LnJhZGl1cyx0LmhlaWdodCx0LnJhZGlhbFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5vcGVuRW5kZWQsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX1jbGFzcyByNHQgZXh0ZW5kcyBiMXR7Y29uc3RydWN0b3IodCxlLG49MSxpPTApe3N1cGVyKCksdGhpcy50eXBlPSJQb2x5aGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17dmVydGljZXM6dCxpbmRpY2VzOmUscmFkaXVzOm4sZGV0YWlsOml9O2NvbnN0IHI9W10sbz1bXTtmdW5jdGlvbiBhKHQsZSxuLGkpe2NvbnN0IHI9aSsxLG89W107Zm9yKGxldCBpPTA7aTw9cjtpKyspe29baV09W107Y29uc3QgYT10LmNsb25lKCkubGVycChuLGkvcikscz1lLmNsb25lKCkubGVycChuLGkvciksbD1yLWk7Zm9yKGxldCB0PTA7dDw9bDt0Kyspb1tpXVt0XT0wPT09dCYmaT09PXI/YTphLmNsb25lKCkubGVycChzLHQvbCl9Zm9yKGxldCB0PTA7dDxyO3QrKylmb3IobGV0IGU9MDtlPDIqKHItdCktMTtlKyspe2NvbnN0IG49TWF0aC5mbG9vcihlLzIpO2UlMj09MD8ocyhvW3RdW24rMV0pLHMob1t0KzFdW25dKSxzKG9bdF1bbl0pKToocyhvW3RdW24rMV0pLHMob1t0KzFdW24rMV0pLHMob1t0KzFdW25dKSl9fWZ1bmN0aW9uIHModCl7ci5wdXNoKHQueCx0LnksdC56KX1mdW5jdGlvbiBsKGUsbil7Y29uc3QgaT0zKmU7bi54PXRbaSswXSxuLnk9dFtpKzFdLG4uej10W2krMl19ZnVuY3Rpb24gYyh0LGUsbixpKXtpPDAmJjE9PT10LngmJihvW2VdPXQueC0xKSwwPT09bi54JiYwPT09bi56JiYob1tlXT1pLzIvTWF0aC5QSSsuNSl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gTWF0aC5hdGFuMih0LnosLXQueCl9IShmdW5jdGlvbiBoKHQpe2NvbnN0IG49bmV3IENKdCxpPW5ldyBDSnQscj1uZXcgQ0p0O2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bys9MylsKGVbbyswXSxuKSxsKGVbbysxXSxpKSxsKGVbbysyXSxyKSxhKG4saSxyLHQpfSkoaSksKGZ1bmN0aW9uIGQodCl7Y29uc3QgZT1uZXcgQ0p0O2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bis9MyllLng9cltuKzBdLGUueT1yW24rMV0sZS56PXJbbisyXSxlLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpLHJbbiswXT1lLngscltuKzFdPWUueSxyW24rMl09ZS56fSkobiksKGZ1bmN0aW9uIHAoKXtjb25zdCB0PW5ldyBDSnQ7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKz0zKXt0Lng9cltuKzBdLHQueT1yW24rMV0sdC56PXJbbisyXTtjb25zdCBpPXUodCkvMi9NYXRoLlBJKy41LGE9KGU9dCxNYXRoLmF0YW4yKC1lLnksTWF0aC5zcXJ0KGUueCplLngrZS56KmUueikpL01hdGguUEkrLjUpO28ucHVzaChpLDEtYSl9dmFyIGU7KGZ1bmN0aW9uIG4oKXtjb25zdCB0PW5ldyBDSnQsZT1uZXcgQ0p0LG49bmV3IENKdCxpPW5ldyBDSnQsYT1uZXcgbUp0LHM9bmV3IG1KdCxsPW5ldyBtSnQ7Zm9yKGxldCBoPTAsZD0wO2g8ci5sZW5ndGg7aCs9OSxkKz02KXt0LnNldChyW2grMF0scltoKzFdLHJbaCsyXSksZS5zZXQocltoKzNdLHJbaCs0XSxyW2grNV0pLG4uc2V0KHJbaCs2XSxyW2grN10scltoKzhdKSxhLnNldChvW2QrMF0sb1tkKzFdKSxzLnNldChvW2QrMl0sb1tkKzNdKSxsLnNldChvW2QrNF0sb1tkKzVdKSxpLmNvcHkodCkuYWRkKGUpLmFkZChuKS5kaXZpZGVTY2FsYXIoMyk7Y29uc3QgcD11KGkpO2MoYSxkKzAsdCxwKSxjKHMsZCsyLGUscCksYyhsLGQrNCxuLHApfX0pKCksKGZ1bmN0aW9uIGkoKXtmb3IobGV0IHQ9MDt0PG8ubGVuZ3RoO3QrPTYpe2NvbnN0IGU9b1t0KzBdLG49b1t0KzJdLGk9b1t0KzRdLHI9TWF0aC5tYXgoZSxuLGkpLGE9TWF0aC5taW4oZSxuLGkpO3I+LjkmJmE8LjEmJihlPC4yJiYob1t0KzBdKz0xKSxuPC4yJiYob1t0KzJdKz0xKSxpPC4yJiYob1t0KzRdKz0xKSl9fSkoKX0pKCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgbDF0KHIsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBsMXQoci5zbGljZSgpLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBsMXQobywyKSksMD09PWk/dGhpcy5jb21wdXRlVmVydGV4Tm9ybWFscygpOnRoaXMubm9ybWFsaXplTm9ybWFscygpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IHI0dCh0LnZlcnRpY2VzLHQuaW5kaWNlcyx0LnJhZGl1cyx0LmRldGFpbHMpfX1jbGFzcyBvNHQgZXh0ZW5kcyByNHR7Y29uc3RydWN0b3IodD0xLGU9MCl7Y29uc3Qgbj0oMStNYXRoLnNxcnQoNSkpLzIsaT0xL247c3VwZXIoWy0xLC0xLC0xLC0xLC0xLDEsLTEsMSwtMSwtMSwxLDEsMSwtMSwtMSwxLC0xLDEsMSwxLC0xLDEsMSwxLDAsLWksLW4sMCwtaSxuLDAsaSwtbiwwLGksbiwtaSwtbiwwLC1pLG4sMCxpLC1uLDAsaSxuLDAsLW4sMCwtaSxuLDAsLWksLW4sMCxpLG4sMCxpXSxbMywxMSw3LDMsNywxNSwzLDE1LDEzLDcsMTksMTcsNywxNyw2LDcsNiwxNSwxNyw0LDgsMTcsOCwxMCwxNywxMCw2LDgsMCwxNiw4LDE2LDIsOCwyLDEwLDAsMTIsMSwwLDEsMTgsMCwxOCwxNiw2LDEwLDIsNiwyLDEzLDYsMTMsMTUsMiwxNiwxOCwyLDE4LDMsMiwzLDEzLDE4LDEsOSwxOCw5LDExLDE4LDExLDMsNCwxNCwxMiw0LDEyLDAsNCwwLDgsMTEsOSw1LDExLDUsMTksMTEsMTksNywxOSw1LDE0LDE5LDE0LDQsMTksNCwxNywxLDEyLDE0LDEsMTQsNSwxLDUsOV0sdCxlKSx0aGlzLnR5cGU9IkRvZGVjYWhlZHJvbkdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LGRldGFpbDplfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBvNHQodC5yYWRpdXMsdC5kZXRhaWwpfX1jb25zdCBhNHQ9bmV3IENKdCxzNHQ9bmV3IENKdCxsNHQ9bmV3IENKdCxjNHQ9bmV3IEZRdDtjbGFzcyB1NHQgZXh0ZW5kcyBiMXR7Y29uc3RydWN0b3IodCxlKXtpZihzdXBlcigpLHRoaXMudHlwZT0iRWRnZXNHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt0aHJlc2hvbGRBbmdsZTplfSxlPXZvaWQgMCE9PWU/ZToxLCEwPT09dC5pc0dlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkVkZ2VzR2VvbWV0cnkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtjb25zdCBuPU1hdGguY29zKHFadCplKSxpPXQuZ2V0SW5kZXgoKSxyPXQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLG89aT9pLmNvdW50OnIuY291bnQsYT1bMCwwLDBdLHM9WyJhIiwiYiIsImMiXSxsPW5ldyBBcnJheSgzKSxjPXt9LHU9W107Zm9yKGxldCB0PTA7dDxvO3QrPTMpe2k/KGFbMF09aS5nZXRYKHQpLGFbMV09aS5nZXRYKHQrMSksYVsyXT1pLmdldFgodCsyKSk6KGFbMF09dCxhWzFdPXQrMSxhWzJdPXQrMik7Y29uc3R7YTplLGI6byxjOmh9PWM0dDtpZihlLmZyb21CdWZmZXJBdHRyaWJ1dGUocixhWzBdKSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUocixhWzFdKSxoLmZyb21CdWZmZXJBdHRyaWJ1dGUocixhWzJdKSxjNHQuZ2V0Tm9ybWFsKGw0dCksbFswXT1gJHtlLnh9LCR7ZS55fSwke2Uuen1gLGxbMV09YCR7by54fSwke28ueX0sJHtvLnp9YCxsWzJdPWAke2gueH0sJHtoLnl9LCR7aC56fWAsbFswXSE9PWxbMV0mJmxbMV0hPT1sWzJdJiZsWzJdIT09bFswXSlmb3IobGV0IHQ9MDt0PDM7dCsrKXtjb25zdCBlPSh0KzEpJTMsaT1sW3RdLHI9bFtlXSxvPWM0dFtzW3RdXSxoPWM0dFtzW2VdXSxkPWAke2l9XyR7cn1gLHA9YCR7cn1fJHtpfWA7cCBpbiBjJiZjW3BdPyhsNHQuZG90KGNbcF0ubm9ybWFsKTw9biYmKHUucHVzaChvLngsby55LG8ueiksdS5wdXNoKGgueCxoLnksaC56KSksY1twXT1udWxsKTpkIGluIGN8fChjW2RdPXtpbmRleDA6YVt0XSxpbmRleDE6YVtlXSxub3JtYWw6bDR0LmNsb25lKCl9KX19Zm9yKGNvbnN0IHQgaW4gYylpZihjW3RdKXtjb25zdHtpbmRleDA6ZSxpbmRleDE6bn09Y1t0XTthNHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGUpLHM0dC5mcm9tQnVmZmVyQXR0cmlidXRlKHIsbiksdS5wdXNoKGE0dC54LGE0dC55LGE0dC56KSx1LnB1c2goczR0LngsczR0LnksczR0LnopfXRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGwxdCh1LDMpKX19Y2xhc3MgaDR0e2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPSJDdXJ2ZSIsdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwfWdldFBvaW50KCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3VydmU6IC5nZXRQb2ludCgpIG5vdCBpbXBsZW1lbnRlZC4iKSxudWxsfWdldFBvaW50QXQodCxlKXtjb25zdCBuPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0UG9pbnQobixlKX1nZXRQb2ludHModD01KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKWUucHVzaCh0aGlzLmdldFBvaW50KG4vdCkpO3JldHVybiBlfWdldFNwYWNlZFBvaW50cyh0PTUpe2NvbnN0IGU9W107Zm9yKGxldCBuPTA7bjw9dDtuKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnRBdChuL3QpKTtyZXR1cm4gZX1nZXRMZW5ndGgoKXtjb25zdCB0PXRoaXMuZ2V0TGVuZ3RocygpO3JldHVybiB0W3QubGVuZ3RoLTFdfWdldExlbmd0aHModD10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyl7aWYodGhpcy5jYWNoZUFyY0xlbmd0aHMmJnRoaXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aD09PXQrMSYmIXRoaXMubmVlZHNVcGRhdGUpcmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzO3RoaXMubmVlZHNVcGRhdGU9ITE7Y29uc3QgZT1bXTtsZXQgbixpPXRoaXMuZ2V0UG9pbnQoMCkscj0wO2UucHVzaCgwKTtmb3IobGV0IG89MTtvPD10O28rKyluPXRoaXMuZ2V0UG9pbnQoby90KSxyKz1uLmRpc3RhbmNlVG8oaSksZS5wdXNoKHIpLGk9bjtyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM9ZSxlfXVwZGF0ZUFyY0xlbmd0aHMoKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuZ2V0TGVuZ3RocygpfWdldFV0b1RtYXBwaW5nKHQsZSl7Y29uc3Qgbj10aGlzLmdldExlbmd0aHMoKTtsZXQgaT0wO2NvbnN0IHI9bi5sZW5ndGg7bGV0IG87bz1lfHx0Km5bci0xXTtsZXQgYSxzPTAsbD1yLTE7Zm9yKDtzPD1sOylpZihpPU1hdGguZmxvb3IocysobC1zKS8yKSxhPW5baV0tbyxhPDApcz1pKzE7ZWxzZXtpZighKGE+MCkpe2w9aTticmVha31sPWktMX1pZihpPWwsbltpXT09PW8pcmV0dXJuIGkvKHItMSk7Y29uc3QgYz1uW2ldO3JldHVybihpKyhvLWMpLyhuW2krMV0tYykpLyhyLTEpfWdldFRhbmdlbnQodCxlKXtjb25zdCBuPTFlLTQ7bGV0IGk9dC1uLHI9dCtuO2k8MCYmKGk9MCkscj4xJiYocj0xKTtjb25zdCBvPXRoaXMuZ2V0UG9pbnQoaSksYT10aGlzLmdldFBvaW50KHIpLHM9ZXx8KG8uaXNWZWN0b3IyP25ldyBtSnQ6bmV3IENKdCk7cmV0dXJuIHMuY29weShhKS5zdWIobykubm9ybWFsaXplKCksc31nZXRUYW5nZW50QXQodCxlKXtjb25zdCBuPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0VGFuZ2VudChuLGUpfWNvbXB1dGVGcmVuZXRGcmFtZXModCxlKXtjb25zdCBuPW5ldyBDSnQsaT1bXSxyPVtdLG89W10sYT1uZXcgQ0p0LHM9bmV3IHJRdDtmb3IobGV0IGU9MDtlPD10O2UrKylpW2VdPXRoaXMuZ2V0VGFuZ2VudEF0KGUvdCxuZXcgQ0p0KSxpW2VdLm5vcm1hbGl6ZSgpO3JbMF09bmV3IENKdCxvWzBdPW5ldyBDSnQ7bGV0IGw9TnVtYmVyLk1BWF9WQUxVRTtjb25zdCBjPU1hdGguYWJzKGlbMF0ueCksdT1NYXRoLmFicyhpWzBdLnkpLGg9TWF0aC5hYnMoaVswXS56KTtjPD1sJiYobD1jLG4uc2V0KDEsMCwwKSksdTw9bCYmKGw9dSxuLnNldCgwLDEsMCkpLGg8PWwmJm4uc2V0KDAsMCwxKSxhLmNyb3NzVmVjdG9ycyhpWzBdLG4pLm5vcm1hbGl6ZSgpLHJbMF0uY3Jvc3NWZWN0b3JzKGlbMF0sYSksb1swXS5jcm9zc1ZlY3RvcnMoaVswXSxyWzBdKTtmb3IobGV0IGU9MTtlPD10O2UrKyl7aWYocltlXT1yW2UtMV0uY2xvbmUoKSxvW2VdPW9bZS0xXS5jbG9uZSgpLGEuY3Jvc3NWZWN0b3JzKGlbZS0xXSxpW2VdKSxhLmxlbmd0aCgpPk51bWJlci5FUFNJTE9OKXthLm5vcm1hbGl6ZSgpO2NvbnN0IHQ9TWF0aC5hY29zKCRadChpW2UtMV0uZG90KGlbZV0pLC0xLDEpKTtyW2VdLmFwcGx5TWF0cml4NChzLm1ha2VSb3RhdGlvbkF4aXMoYSx0KSl9b1tlXS5jcm9zc1ZlY3RvcnMoaVtlXSxyW2VdKX1pZighMD09PWUpe2xldCBlPU1hdGguYWNvcygkWnQoclswXS5kb3Qoclt0XSksLTEsMSkpO2UvPXQsaVswXS5kb3QoYS5jcm9zc1ZlY3RvcnMoclswXSxyW3RdKSk+MCYmKGU9LWUpO2ZvcihsZXQgbj0xO248PXQ7bisrKXJbbl0uYXBwbHlNYXRyaXg0KHMubWFrZVJvdGF0aW9uQXhpcyhpW25dLGUqbikpLG9bbl0uY3Jvc3NWZWN0b3JzKGlbbl0scltuXSl9cmV0dXJue3RhbmdlbnRzOmksbm9ybWFsczpyLGJpbm9ybWFsczpvfX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfXRvSlNPTigpe2NvbnN0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJDdXJ2ZSIsZ2VuZXJhdG9yOiJDdXJ2ZS50b0pTT04ifX07cmV0dXJuIHQuYXJjTGVuZ3RoRGl2aXNpb25zPXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zLHQudHlwZT10aGlzLnR5cGUsdH1mcm9tSlNPTih0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc319Y2xhc3MgZDR0IGV4dGVuZHMgaDR0e2NvbnN0cnVjdG9yKHQ9MCxlPTAsbj0xLGk9MSxyPTAsbz0yKk1hdGguUEksYT0hMSxzPTApe3N1cGVyKCksdGhpcy50eXBlPSJFbGxpcHNlQ3VydmUiLHRoaXMuYVg9dCx0aGlzLmFZPWUsdGhpcy54UmFkaXVzPW4sdGhpcy55UmFkaXVzPWksdGhpcy5hU3RhcnRBbmdsZT1yLHRoaXMuYUVuZEFuZ2xlPW8sdGhpcy5hQ2xvY2t3aXNlPWEsdGhpcy5hUm90YXRpb249c31nZXRQb2ludCh0LGUpe2NvbnN0IG49ZXx8bmV3IG1KdCxpPTIqTWF0aC5QSTtsZXQgcj10aGlzLmFFbmRBbmdsZS10aGlzLmFTdGFydEFuZ2xlO2NvbnN0IG89TWF0aC5hYnMocik8TnVtYmVyLkVQU0lMT047Zm9yKDtyPDA7KXIrPWk7Zm9yKDtyPmk7KXItPWk7cjxOdW1iZXIuRVBTSUxPTiYmKHI9bz8wOmkpLCEwIT09dGhpcy5hQ2xvY2t3aXNlfHxvfHwocj09PWk/cj0taTpyLT1pKTtjb25zdCBhPXRoaXMuYVN0YXJ0QW5nbGUrdCpyO2xldCBzPXRoaXMuYVgrdGhpcy54UmFkaXVzKk1hdGguY29zKGEpLGw9dGhpcy5hWSt0aGlzLnlSYWRpdXMqTWF0aC5zaW4oYSk7aWYoMCE9PXRoaXMuYVJvdGF0aW9uKXtjb25zdCB0PU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxlPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxuPXMtdGhpcy5hWCxpPWwtdGhpcy5hWTtzPW4qdC1pKmUrdGhpcy5hWCxsPW4qZStpKnQrdGhpcy5hWX1yZXR1cm4gbi5zZXQocyxsKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9dG9KU09OKCl7Y29uc3QgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5hWD10aGlzLmFYLHQuYVk9dGhpcy5hWSx0LnhSYWRpdXM9dGhpcy54UmFkaXVzLHQueVJhZGl1cz10aGlzLnlSYWRpdXMsdC5hU3RhcnRBbmdsZT10aGlzLmFTdGFydEFuZ2xlLHQuYUVuZEFuZ2xlPXRoaXMuYUVuZEFuZ2xlLHQuYUNsb2Nrd2lzZT10aGlzLmFDbG9ja3dpc2UsdC5hUm90YXRpb249dGhpcy5hUm90YXRpb24sdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc319ZDR0LnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDtjbGFzcyBwNHQgZXh0ZW5kcyBkNHR7Y29uc3RydWN0b3IodCxlLG4saSxyLG8pe3N1cGVyKHQsZSxuLG4saSxyLG8pLHRoaXMudHlwZT0iQXJjQ3VydmUifX1mdW5jdGlvbiBmNHQoKXtsZXQgdD0wLGU9MCxuPTAsaT0wO2Z1bmN0aW9uIHIocixvLGEscyl7dD1yLGU9YSxuPS0zKnIrMypvLTIqYS1zLGk9MipyLTIqbythK3N9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKHQsZSxuLGksbyl7cihlLG4sbyoobi10KSxvKihpLWUpKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKHQsZSxuLGksbyxhLHMpe2xldCBsPShlLXQpL28tKG4tdCkvKG8rYSkrKG4tZSkvYSxjPShuLWUpL2EtKGktZSkvKGErcykrKGktbikvcztsKj1hLGMqPWEscihlLG4sbCxjKX0sY2FsYzpmdW5jdGlvbihyKXtjb25zdCBvPXIqcjtyZXR1cm4gdCtlKnIrbipvK2kqKG8qcil9fX1wNHQucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7Y29uc3QgbTR0PW5ldyBDSnQsZzR0PW5ldyBmNHQsXzR0PW5ldyBmNHQseTR0PW5ldyBmNHQ7Y2xhc3MgdjR0IGV4dGVuZHMgaDR0e2NvbnN0cnVjdG9yKHQ9W10sZT0hMSxuPSJjZW50cmlwZXRhbCIsaT0uNSl7c3VwZXIoKSx0aGlzLnR5cGU9IkNhdG11bGxSb21DdXJ2ZTMiLHRoaXMucG9pbnRzPXQsdGhpcy5jbG9zZWQ9ZSx0aGlzLmN1cnZlVHlwZT1uLHRoaXMudGVuc2lvbj1pfWdldFBvaW50KHQsZT1uZXcgQ0p0KXtjb25zdCBuPWUsaT10aGlzLnBvaW50cyxyPWkubGVuZ3RoLG89KHItKHRoaXMuY2xvc2VkPzA6MSkpKnQ7bGV0IGEscyxsPU1hdGguZmxvb3IobyksYz1vLWw7dGhpcy5jbG9zZWQ/bCs9bD4wPzA6KE1hdGguZmxvb3IoTWF0aC5hYnMobCkvcikrMSkqcjowPT09YyYmbD09PXItMSYmKGw9ci0yLGM9MSksdGhpcy5jbG9zZWR8fGw+MD9hPWlbKGwtMSklcl06KG00dC5zdWJWZWN0b3JzKGlbMF0saVsxXSkuYWRkKGlbMF0pLGE9bTR0KTtjb25zdCB1PWlbbCVyXSxoPWlbKGwrMSklcl07aWYodGhpcy5jbG9zZWR8fGwrMjxyP3M9aVsobCsyKSVyXToobTR0LnN1YlZlY3RvcnMoaVtyLTFdLGlbci0yXSkuYWRkKGlbci0xXSkscz1tNHQpLCJjZW50cmlwZXRhbCI9PT10aGlzLmN1cnZlVHlwZXx8ImNob3JkYWwiPT09dGhpcy5jdXJ2ZVR5cGUpe2NvbnN0IHQ9ImNob3JkYWwiPT09dGhpcy5jdXJ2ZVR5cGU/LjU6LjI1O2xldCBlPU1hdGgucG93KGEuZGlzdGFuY2VUb1NxdWFyZWQodSksdCksbj1NYXRoLnBvdyh1LmRpc3RhbmNlVG9TcXVhcmVkKGgpLHQpLGk9TWF0aC5wb3coaC5kaXN0YW5jZVRvU3F1YXJlZChzKSx0KTtuPDFlLTQmJihuPTEpLGU8MWUtNCYmKGU9biksaTwxZS00JiYoaT1uKSxnNHQuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGEueCx1LngsaC54LHMueCxlLG4saSksXzR0LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShhLnksdS55LGgueSxzLnksZSxuLGkpLHk0dC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYS56LHUueixoLnoscy56LGUsbixpKX1lbHNlImNhdG11bGxyb20iPT09dGhpcy5jdXJ2ZVR5cGUmJihnNHQuaW5pdENhdG11bGxSb20oYS54LHUueCxoLngscy54LHRoaXMudGVuc2lvbiksXzR0LmluaXRDYXRtdWxsUm9tKGEueSx1LnksaC55LHMueSx0aGlzLnRlbnNpb24pLHk0dC5pbml0Q2F0bXVsbFJvbShhLnosdS56LGgueixzLnosdGhpcy50ZW5zaW9uKSk7cmV0dXJuIG4uc2V0KGc0dC5jYWxjKGMpLF80dC5jYWxjKGMpLHk0dC5jYWxjKGMpKSxufWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxuPXQucG9pbnRzLmxlbmd0aDtlPG47ZSsrKXRoaXMucG9pbnRzLnB1c2godC5wb2ludHNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc310b0pTT04oKXtjb25zdCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgZT0wLG49dGhpcy5wb2ludHMubGVuZ3RoO2U8bjtlKyspdC5wb2ludHMucHVzaCh0aGlzLnBvaW50c1tlXS50b0FycmF5KCkpO3JldHVybiB0LmNsb3NlZD10aGlzLmNsb3NlZCx0LmN1cnZlVHlwZT10aGlzLmN1cnZlVHlwZSx0LnRlbnNpb249dGhpcy50ZW5zaW9uLHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsbj10LnBvaW50cy5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKChuZXcgQ0p0KS5mcm9tQXJyYXkobikpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9fWZ1bmN0aW9uIGI0dCh0LGUsbixpLHIpe2NvbnN0IG89LjUqKGktZSksYT0uNSooci1uKSxzPXQqdDtyZXR1cm4oMipuLTIqaStvK2EpKih0KnMpKygtMypuKzMqaS0yKm8tYSkqcytvKnQrbn1mdW5jdGlvbiB4NHQodCxlLG4saSl7cmV0dXJuKGZ1bmN0aW9uIHIodCxlKXtjb25zdCBuPTEtdDtyZXR1cm4gbipuKmV9KSh0LGUpKyhmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIDIqKDEtdCkqdCplfSkodCxuKSsoZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0KnQqZX0pKHQsaSl9ZnVuY3Rpb24gdzR0KHQsZSxuLGkscil7cmV0dXJuKGZ1bmN0aW9uIG8odCxlKXtjb25zdCBuPTEtdDtyZXR1cm4gbipuKm4qZX0pKHQsZSkrKGZ1bmN0aW9uIGEodCxlKXtjb25zdCBuPTEtdDtyZXR1cm4gMypuKm4qdCplfSkodCxuKSsoZnVuY3Rpb24gcyh0LGUpe3JldHVybiAzKigxLXQpKnQqdCplfSkodCxpKSsoZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0KnQqdCplfSkodCxyKX12NHQucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDtjbGFzcyBTNHQgZXh0ZW5kcyBoNHR7Y29uc3RydWN0b3IodD1uZXcgbUp0LGU9bmV3IG1KdCxuPW5ldyBtSnQsaT1uZXcgbUp0KXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPW4sdGhpcy52Mz1pfWdldFBvaW50KHQsZT1uZXcgbUp0KXtjb25zdCBuPWUsaT10aGlzLnYwLHI9dGhpcy52MSxvPXRoaXMudjIsYT10aGlzLnYzO3JldHVybiBuLnNldCh3NHQodCxpLngsci54LG8ueCxhLngpLHc0dCh0LGkueSxyLnksby55LGEueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtjb25zdCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fVM0dC5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlPSEwO2NsYXNzIE00dCBleHRlbmRzIGg0dHtjb25zdHJ1Y3Rvcih0PW5ldyBDSnQsZT1uZXcgQ0p0LG49bmV3IENKdCxpPW5ldyBDSnQpe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPW4sdGhpcy52Mz1pfWdldFBvaW50KHQsZT1uZXcgQ0p0KXtjb25zdCBuPWUsaT10aGlzLnYwLHI9dGhpcy52MSxvPXRoaXMudjIsYT10aGlzLnYzO3JldHVybiBuLnNldCh3NHQodCxpLngsci54LG8ueCxhLngpLHc0dCh0LGkueSxyLnksby55LGEueSksdzR0KHQsaS56LHIueixvLnosYS56KSksbn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2NvbnN0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319TTR0LnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmUzPSEwO2NsYXNzIEU0dCBleHRlbmRzIGg0dHtjb25zdHJ1Y3Rvcih0PW5ldyBtSnQsZT1uZXcgbUp0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlIix0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgbUp0KXtjb25zdCBuPWU7cmV0dXJuIDE9PT10P24uY29weSh0aGlzLnYyKToobi5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSxuLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnYxKSksbn1nZXRQb2ludEF0KHQsZSl7cmV0dXJuIHRoaXMuZ2V0UG9pbnQodCxlKX1nZXRUYW5nZW50KHQsZSl7Y29uc3Qgbj1lfHxuZXcgbUp0O3JldHVybiBuLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLm5vcm1hbGl6ZSgpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7Y29uc3QgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fUU0dC5wcm90b3R5cGUuaXNMaW5lQ3VydmU9ITA7Y2xhc3MgVDR0IGV4dGVuZHMgaDR0e2NvbnN0cnVjdG9yKHQ9bmV3IENKdCxlPW5ldyBDSnQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgQ0p0KXtjb25zdCBuPWU7cmV0dXJuIDE9PT10P24uY29weSh0aGlzLnYyKToobi5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSxuLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnYxKSksbn1nZXRQb2ludEF0KHQsZSl7cmV0dXJuIHRoaXMuZ2V0UG9pbnQodCxlKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtjb25zdCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319Y2xhc3MgQzR0IGV4dGVuZHMgaDR0e2NvbnN0cnVjdG9yKHQ9bmV3IG1KdCxlPW5ldyBtSnQsbj1uZXcgbUp0KXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1ufWdldFBvaW50KHQsZT1uZXcgbUp0KXtjb25zdCBuPWUsaT10aGlzLnYwLHI9dGhpcy52MSxvPXRoaXMudjI7cmV0dXJuIG4uc2V0KHg0dCh0LGkueCxyLngsby54KSx4NHQodCxpLnksci55LG8ueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2NvbnN0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fUM0dC5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZT0hMDtjbGFzcyBBNHQgZXh0ZW5kcyBoNHR7Y29uc3RydWN0b3IodD1uZXcgQ0p0LGU9bmV3IENKdCxuPW5ldyBDSnQpe3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1ufWdldFBvaW50KHQsZT1uZXcgQ0p0KXtjb25zdCBuPWUsaT10aGlzLnYwLHI9dGhpcy52MSxvPXRoaXMudjI7cmV0dXJuIG4uc2V0KHg0dCh0LGkueCxyLngsby54KSx4NHQodCxpLnksci55LG8ueSkseDR0KHQsaS56LHIueixvLnopKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtjb25zdCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX1BNHQucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzPSEwO2NsYXNzIGs0dCBleHRlbmRzIGg0dHtjb25zdHJ1Y3Rvcih0PVtdKXtzdXBlcigpLHRoaXMudHlwZT0iU3BsaW5lQ3VydmUiLHRoaXMucG9pbnRzPXR9Z2V0UG9pbnQodCxlPW5ldyBtSnQpe2NvbnN0IG49ZSxpPXRoaXMucG9pbnRzLHI9KGkubGVuZ3RoLTEpKnQsbz1NYXRoLmZsb29yKHIpLGE9ci1vLHM9aVswPT09bz9vOm8tMV0sbD1pW29dLGM9aVtvPmkubGVuZ3RoLTI/aS5sZW5ndGgtMTpvKzFdLHU9aVtvPmkubGVuZ3RoLTM/aS5sZW5ndGgtMTpvKzJdO3JldHVybiBuLnNldChiNHQoYSxzLngsbC54LGMueCx1LngpLGI0dChhLHMueSxsLnksYy55LHUueSkpLG59Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLG49dC5wb2ludHMubGVuZ3RoO2U8bjtlKyspdGhpcy5wb2ludHMucHVzaCh0LnBvaW50c1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc310b0pTT04oKXtjb25zdCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgZT0wLG49dGhpcy5wb2ludHMubGVuZ3RoO2U8bjtlKyspdC5wb2ludHMucHVzaCh0aGlzLnBvaW50c1tlXS50b0FycmF5KCkpO3JldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLG49dC5wb2ludHMubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaCgobmV3IG1KdCkuZnJvbUFycmF5KG4pKX1yZXR1cm4gdGhpc319azR0LnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3ZhciBMNHQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6cDR0LENhdG11bGxSb21DdXJ2ZTM6djR0LEN1YmljQmV6aWVyQ3VydmU6UzR0LEN1YmljQmV6aWVyQ3VydmUzOk00dCxFbGxpcHNlQ3VydmU6ZDR0LExpbmVDdXJ2ZTpFNHQsTGluZUN1cnZlMzpUNHQsUXVhZHJhdGljQmV6aWVyQ3VydmU6QzR0LFF1YWRyYXRpY0JlemllckN1cnZlMzpBNHQsU3BsaW5lQ3VydmU6azR0fSk7ZnVuY3Rpb24gUDR0KHQsZSxuLGkscil7bGV0IG8sYTtpZihyPT09KGZ1bmN0aW9uIHModCxlLG4saSl7bGV0IHI9MDtmb3IobGV0IG89ZSxhPW4taTtvPG47bys9aSlyKz0odFthXS10W29dKSoodFtvKzFdK3RbYSsxXSksYT1vO3JldHVybiByfSkodCxlLG4saSk+MClmb3Iobz1lO288bjtvKz1pKWE9SjR0KG8sdFtvXSx0W28rMV0sYSk7ZWxzZSBmb3Iobz1uLWk7bz49ZTtvLT1pKWE9SjR0KG8sdFtvXSx0W28rMV0sYSk7cmV0dXJuIGEmJnE0dChhLGEubmV4dCkmJihRNHQoYSksYT1hLm5leHQpLGF9ZnVuY3Rpb24gTjR0KHQsZSl7aWYoIXQpcmV0dXJuIHQ7ZXx8KGU9dCk7bGV0IG4saT10O2Rve2lmKG49ITEsaS5zdGVpbmVyfHwhcTR0KGksaS5uZXh0KSYmMCE9PVc0dChpLnByZXYsaSxpLm5leHQpKWk9aS5uZXh0O2Vsc2V7aWYoUTR0KGkpLGk9ZT1pLnByZXYsaT09PWkubmV4dClicmVhaztuPSEwfX13aGlsZShufHxpIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gSTR0KHQsZSxuLGkscixvLGEpe2lmKCF0KXJldHVybjshYSYmbyYmKGZ1bmN0aW9uIHModCxlLG4saSl7bGV0IHI9dDtkb3tudWxsPT09ci56JiYoci56PVY0dChyLngsci55LGUsbixpKSksci5wcmV2Wj1yLnByZXYsci5uZXh0Wj1yLm5leHQscj1yLm5leHR9d2hpbGUociE9PXQpO3IucHJldloubmV4dFo9bnVsbCxyLnByZXZaPW51bGwsKGZ1bmN0aW9uIG8odCl7bGV0IGUsbixpLHIsbyxhLHMsbCxjPTE7ZG97Zm9yKG49dCx0PW51bGwsbz1udWxsLGE9MDtuOyl7Zm9yKGErKyxpPW4scz0wLGU9MDtlPGMmJihzKyssaT1pLm5leHRaLGkpO2UrKyk7Zm9yKGw9YztzPjB8fGw+MCYmaTspMCE9PXMmJigwPT09bHx8IWl8fG4uejw9aS56KT8ocj1uLG49bi5uZXh0WixzLS0pOihyPWksaT1pLm5leHRaLGwtLSksbz9vLm5leHRaPXI6dD1yLHIucHJldlo9byxvPXI7bj1pfW8ubmV4dFo9bnVsbCxjKj0yfXdoaWxlKGE+MSl9KShyKX0pKHQsaSxyLG8pO2xldCBsLGMsdT10O2Zvcig7dC5wcmV2IT09dC5uZXh0OylpZihsPXQucHJldixjPXQubmV4dCxvP080dCh0LGkscixvKTpSNHQodCkpZS5wdXNoKGwuaS9uKSxlLnB1c2godC5pL24pLGUucHVzaChjLmkvbiksUTR0KHQpLHQ9Yy5uZXh0LHU9Yy5uZXh0O2Vsc2UgaWYoKHQ9Yyk9PT11KXthPzE9PT1hP0k0dCh0PXo0dChONHQodCksZSxuKSxlLG4saSxyLG8sMik6Mj09PWEmJkQ0dCh0LGUsbixpLHIsbyk6STR0KE40dCh0KSxlLG4saSxyLG8sMSk7YnJlYWt9fWZ1bmN0aW9uIFI0dCh0KXtjb25zdCBlPXQucHJldixuPXQsaT10Lm5leHQ7aWYoVzR0KGUsbixpKT49MClyZXR1cm4hMTtsZXQgcj10Lm5leHQubmV4dDtmb3IoO3IhPT10LnByZXY7KXtpZihqNHQoZS54LGUueSxuLngsbi55LGkueCxpLnksci54LHIueSkmJlc0dChyLnByZXYscixyLm5leHQpPj0wKXJldHVybiExO3I9ci5uZXh0fXJldHVybiEwfWZ1bmN0aW9uIE80dCh0LGUsbixpKXtjb25zdCByPXQucHJldixvPXQsYT10Lm5leHQ7aWYoVzR0KHIsbyxhKT49MClyZXR1cm4hMTtjb25zdCBzPXIueD5vLng/ci54PmEueD9yLng6YS54Om8ueD5hLng/by54OmEueCxsPXIueT5vLnk/ci55PmEueT9yLnk6YS55Om8ueT5hLnk/by55OmEueSxjPVY0dChyLng8by54P3IueDxhLng/ci54OmEueDpvLng8YS54P28ueDphLngsci55PG8ueT9yLnk8YS55P3IueTphLnk6by55PGEueT9vLnk6YS55LGUsbixpKSx1PVY0dChzLGwsZSxuLGkpO2xldCBoPXQucHJldlosZD10Lm5leHRaO2Zvcig7aCYmaC56Pj1jJiZkJiZkLno8PXU7KXtpZihoIT09dC5wcmV2JiZoIT09dC5uZXh0JiZqNHQoci54LHIueSxvLngsby55LGEueCxhLnksaC54LGgueSkmJlc0dChoLnByZXYsaCxoLm5leHQpPj0wKXJldHVybiExO2lmKGg9aC5wcmV2WixkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZqNHQoci54LHIueSxvLngsby55LGEueCxhLnksZC54LGQueSkmJlc0dChkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5uZXh0Wn1mb3IoO2gmJmguej49Yzspe2lmKGghPT10LnByZXYmJmghPT10Lm5leHQmJmo0dChyLngsci55LG8ueCxvLnksYS54LGEueSxoLngsaC55KSYmVzR0KGgucHJldixoLGgubmV4dCk+PTApcmV0dXJuITE7aD1oLnByZXZafWZvcig7ZCYmZC56PD11Oyl7aWYoZCE9PXQucHJldiYmZCE9PXQubmV4dCYmajR0KHIueCxyLnksby54LG8ueSxhLngsYS55LGQueCxkLnkpJiZXNHQoZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gejR0KHQsZSxuKXtsZXQgaT10O2Rve2NvbnN0IHI9aS5wcmV2LG89aS5uZXh0Lm5leHQ7IXE0dChyLG8pJiZZNHQocixpLGkubmV4dCxvKSYmSzR0KHIsbykmJks0dChvLHIpJiYoZS5wdXNoKHIuaS9uKSxlLnB1c2goaS5pL24pLGUucHVzaChvLmkvbiksUTR0KGkpLFE0dChpLm5leHQpLGk9dD1vKSxpPWkubmV4dH13aGlsZShpIT09dCk7cmV0dXJuIE40dChpKX1mdW5jdGlvbiBENHQodCxlLG4saSxyLG8pe2xldCBhPXQ7ZG97bGV0IHQ9YS5uZXh0Lm5leHQ7Zm9yKDt0IT09YS5wcmV2Oyl7aWYoYS5pIT09dC5pJiZHNHQoYSx0KSl7bGV0IHM9WjR0KGEsdCk7cmV0dXJuIGE9TjR0KGEsYS5uZXh0KSxzPU40dChzLHMubmV4dCksSTR0KGEsZSxuLGkscixvKSx2b2lkIEk0dChzLGUsbixpLHIsbyl9dD10Lm5leHR9YT1hLm5leHR9d2hpbGUoYSE9PXQpfWZ1bmN0aW9uIEI0dCh0LGUpe3JldHVybiB0LngtZS54fWZ1bmN0aW9uIEg0dCh0LGUpe2lmKGU9KGZ1bmN0aW9uIG4odCxlKXtsZXQgbj1lO2NvbnN0IGk9dC54LHI9dC55O2xldCBvLGE9LTEvMDtkb3tpZihyPD1uLnkmJnI+PW4ubmV4dC55JiZuLm5leHQueSE9PW4ueSl7Y29uc3QgdD1uLngrKHItbi55KSoobi5uZXh0Lngtbi54KS8obi5uZXh0Lnktbi55KTtpZih0PD1pJiZ0PmEpe2lmKGE9dCx0PT09aSl7aWYocj09PW4ueSlyZXR1cm4gbjtpZihyPT09bi5uZXh0LnkpcmV0dXJuIG4ubmV4dH1vPW4ueDxuLm5leHQueD9uOm4ubmV4dH19bj1uLm5leHR9d2hpbGUobiE9PWUpO2lmKCFvKXJldHVybiBudWxsO2lmKGk9PT1hKXJldHVybiBvO2NvbnN0IHM9byxsPW8ueCxjPW8ueTtsZXQgdSxoPTEvMDtuPW87ZG97aT49bi54JiZuLng+PWwmJmkhPT1uLngmJmo0dChyPGM/aTphLHIsbCxjLHI8Yz9hOmkscixuLngsbi55KSYmKHU9TWF0aC5hYnMoci1uLnkpLyhpLW4ueCksSzR0KG4sdCkmJih1PGh8fHU9PT1oJiYobi54Pm8ueHx8bi54PT09by54JiZGNHQobyxuKSkpJiYobz1uLGg9dSkpLG49bi5uZXh0fXdoaWxlKG4hPT1zKTtyZXR1cm4gb30pKHQsZSkpe2NvbnN0IG49WjR0KGUsdCk7TjR0KGUsZS5uZXh0KSxONHQobixuLm5leHQpfX1mdW5jdGlvbiBGNHQodCxlKXtyZXR1cm4gVzR0KHQucHJldix0LGUucHJldik8MCYmVzR0KGUubmV4dCx0LHQubmV4dCk8MH1mdW5jdGlvbiBWNHQodCxlLG4saSxyKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0PTMyNzY3Kih0LW4pKnIpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKXwoZT0xNDMxNjU1NzY1JigoZT04NTg5OTM0NTkmKChlPTI1MjY0NTEzNSYoKGU9MTY3MTE5MzUmKChlPTMyNzY3KihlLWkpKnIpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX1mdW5jdGlvbiBVNHQodCl7bGV0IGU9dCxuPXQ7ZG97KGUueDxuLnh8fGUueD09PW4ueCYmZS55PG4ueSkmJihuPWUpLGU9ZS5uZXh0fXdoaWxlKGUhPT10KTtyZXR1cm4gbn1mdW5jdGlvbiBqNHQodCxlLG4saSxyLG8sYSxzKXtyZXR1cm4oci1hKSooZS1zKS0odC1hKSooby1zKT49MCYmKHQtYSkqKGktcyktKG4tYSkqKGUtcyk+PTAmJihuLWEpKihvLXMpLShyLWEpKihpLXMpPj0wfWZ1bmN0aW9uIEc0dCh0LGUpe3JldHVybiB0Lm5leHQuaSE9PWUuaSYmdC5wcmV2LmkhPT1lLmkmJiEoZnVuY3Rpb24gbih0LGUpe2xldCBuPXQ7ZG97aWYobi5pIT09dC5pJiZuLm5leHQuaSE9PXQuaSYmbi5pIT09ZS5pJiZuLm5leHQuaSE9PWUuaSYmWTR0KG4sbi5uZXh0LHQsZSkpcmV0dXJuITA7bj1uLm5leHR9d2hpbGUobiE9PXQpO3JldHVybiExfSkodCxlKSYmKEs0dCh0LGUpJiZLNHQoZSx0KSYmKGZ1bmN0aW9uIGkodCxlKXtsZXQgbj10LGk9ITE7Y29uc3Qgcj0odC54K2UueCkvMixvPSh0LnkrZS55KS8yO2Rve24ueT5vIT1uLm5leHQueT5vJiZuLm5leHQueSE9PW4ueSYmcjwobi5uZXh0Lngtbi54KSooby1uLnkpLyhuLm5leHQueS1uLnkpK24ueCYmKGk9IWkpLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gaX0pKHQsZSkmJihXNHQodC5wcmV2LHQsZS5wcmV2KXx8VzR0KHQsZS5wcmV2LGUpKXx8cTR0KHQsZSkmJlc0dCh0LnByZXYsdCx0Lm5leHQpPjAmJlc0dChlLnByZXYsZSxlLm5leHQpPjApfWZ1bmN0aW9uIFc0dCh0LGUsbil7cmV0dXJuKGUueS10LnkpKihuLngtZS54KS0oZS54LXQueCkqKG4ueS1lLnkpfWZ1bmN0aW9uIHE0dCh0LGUpe3JldHVybiB0Lng9PT1lLngmJnQueT09PWUueX1mdW5jdGlvbiBZNHQodCxlLG4saSl7Y29uc3Qgcj0kNHQoVzR0KHQsZSxuKSksbz0kNHQoVzR0KHQsZSxpKSksYT0kNHQoVzR0KG4saSx0KSkscz0kNHQoVzR0KG4saSxlKSk7cmV0dXJuIHIhPT1vJiZhIT09c3x8ISgwIT09cnx8IVg0dCh0LG4sZSkpfHwhKDAhPT1vfHwhWDR0KHQsaSxlKSl8fCEoMCE9PWF8fCFYNHQobix0LGkpKXx8ISgwIT09c3x8IVg0dChuLGUsaSkpfWZ1bmN0aW9uIFg0dCh0LGUsbil7cmV0dXJuIGUueDw9TWF0aC5tYXgodC54LG4ueCkmJmUueD49TWF0aC5taW4odC54LG4ueCkmJmUueTw9TWF0aC5tYXgodC55LG4ueSkmJmUueT49TWF0aC5taW4odC55LG4ueSl9ZnVuY3Rpb24gJDR0KHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH1mdW5jdGlvbiBLNHQodCxlKXtyZXR1cm4gVzR0KHQucHJldix0LHQubmV4dCk8MD9XNHQodCxlLHQubmV4dCk+PTAmJlc0dCh0LHQucHJldixlKT49MDpXNHQodCxlLHQucHJldik8MHx8VzR0KHQsdC5uZXh0LGUpPDB9ZnVuY3Rpb24gWjR0KHQsZSl7Y29uc3Qgbj1uZXcgdDZ0KHQuaSx0LngsdC55KSxpPW5ldyB0NnQoZS5pLGUueCxlLnkpLHI9dC5uZXh0LG89ZS5wcmV2O3JldHVybiB0Lm5leHQ9ZSxlLnByZXY9dCxuLm5leHQ9cixyLnByZXY9bixpLm5leHQ9bixuLnByZXY9aSxvLm5leHQ9aSxpLnByZXY9byxpfWZ1bmN0aW9uIEo0dCh0LGUsbixpKXtjb25zdCByPW5ldyB0NnQodCxlLG4pO3JldHVybiBpPyhyLm5leHQ9aS5uZXh0LHIucHJldj1pLGkubmV4dC5wcmV2PXIsaS5uZXh0PXIpOihyLnByZXY9cixyLm5leHQ9cikscn1mdW5jdGlvbiBRNHQodCl7dC5uZXh0LnByZXY9dC5wcmV2LHQucHJldi5uZXh0PXQubmV4dCx0LnByZXZaJiYodC5wcmV2Wi5uZXh0Wj10Lm5leHRaKSx0Lm5leHRaJiYodC5uZXh0Wi5wcmV2Wj10LnByZXZaKX1mdW5jdGlvbiB0NnQodCxlLG4pe3RoaXMuaT10LHRoaXMueD1lLHRoaXMueT1uLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfWNsYXNzIGU2dHtzdGF0aWMgYXJlYSh0KXtjb25zdCBlPXQubGVuZ3RoO2xldCBuPTA7Zm9yKGxldCBpPWUtMSxyPTA7cjxlO2k9cisrKW4rPXRbaV0ueCp0W3JdLnktdFtyXS54KnRbaV0ueTtyZXR1cm4uNSpufXN0YXRpYyBpc0Nsb2NrV2lzZSh0KXtyZXR1cm4gZTZ0LmFyZWEodCk8MH1zdGF0aWMgdHJpYW5ndWxhdGVTaGFwZSh0LGUpe2NvbnN0IG49W10saT1bXSxyPVtdO242dCh0KSxpNnQobix0KTtsZXQgbz10Lmxlbmd0aDtlLmZvckVhY2gobjZ0KTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKylpLnB1c2gobyksbys9ZVt0XS5sZW5ndGgsaTZ0KG4sZVt0XSk7Y29uc3QgYT0oZnVuY3Rpb24odCxlLG49Mil7Y29uc3QgaT1lJiZlLmxlbmd0aCxyPWk/ZVswXSpuOnQubGVuZ3RoO2xldCBvPVA0dCh0LDAscixuLCEwKTtjb25zdCBhPVtdO2lmKCFvfHxvLm5leHQ9PT1vLnByZXYpcmV0dXJuIGE7bGV0IHMsbCxjLHUsaCxkLHA7aWYoaSYmKG89KGZ1bmN0aW9uIGYodCxlLG4saSl7Y29uc3Qgcj1bXTtsZXQgbyxhLHMsbCxjO2ZvcihvPTAsYT1lLmxlbmd0aDtvPGE7bysrKXM9ZVtvXSppLGw9bzxhLTE/ZVtvKzFdKmk6dC5sZW5ndGgsYz1QNHQodCxzLGwsaSwhMSksYz09PWMubmV4dCYmKGMuc3RlaW5lcj0hMCksci5wdXNoKFU0dChjKSk7Zm9yKHIuc29ydChCNHQpLG89MDtvPHIubGVuZ3RoO28rKylINHQocltvXSxuKSxuPU40dChuLG4ubmV4dCk7cmV0dXJuIG59KSh0LGUsbyxuKSksdC5sZW5ndGg+ODAqbil7cz1jPXRbMF0sbD11PXRbMV07Zm9yKGxldCBlPW47ZTxyO2UrPW4paD10W2VdLGQ9dFtlKzFdLGg8cyYmKHM9aCksZDxsJiYobD1kKSxoPmMmJihjPWgpLGQ+dSYmKHU9ZCk7cD1NYXRoLm1heChjLXMsdS1sKSxwPTAhPT1wPzEvcDowfXJldHVybiBJNHQobyxhLG4scyxsLHApLGF9KShuLGkpO2ZvcihsZXQgdD0wO3Q8YS5sZW5ndGg7dCs9MylyLnB1c2goYS5zbGljZSh0LHQrMykpO3JldHVybiByfX1mdW5jdGlvbiBuNnQodCl7Y29uc3QgZT10Lmxlbmd0aDtlPjImJnRbZS0xXS5lcXVhbHModFswXSkmJnQucG9wKCl9ZnVuY3Rpb24gaTZ0KHQsZSl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspdC5wdXNoKGVbbl0ueCksdC5wdXNoKGVbbl0ueSl9Y2xhc3MgcjZ0IGV4dGVuZHMgYjF0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOmV9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtjb25zdCBuPXRoaXMsaT1bXSxyPVtdO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKylvKHRbZV0pO2Z1bmN0aW9uIG8odCl7Y29uc3Qgbz1bXSxhPXZvaWQgMCE9PWUuY3VydmVTZWdtZW50cz9lLmN1cnZlU2VnbWVudHM6MTIscz12b2lkIDAhPT1lLnN0ZXBzP2Uuc3RlcHM6MTtsZXQgbD12b2lkIDAhPT1lLmRlcHRoP2UuZGVwdGg6MTAwLGM9dm9pZCAwPT09ZS5iZXZlbEVuYWJsZWR8fGUuYmV2ZWxFbmFibGVkLHU9dm9pZCAwIT09ZS5iZXZlbFRoaWNrbmVzcz9lLmJldmVsVGhpY2tuZXNzOjYsaD12b2lkIDAhPT1lLmJldmVsU2l6ZT9lLmJldmVsU2l6ZTp1LTIsZD12b2lkIDAhPT1lLmJldmVsT2Zmc2V0P2UuYmV2ZWxPZmZzZXQ6MCxwPXZvaWQgMCE9PWUuYmV2ZWxTZWdtZW50cz9lLmJldmVsU2VnbWVudHM6Mztjb25zdCBmPWUuZXh0cnVkZVBhdGgsbT12b2lkIDAhPT1lLlVWR2VuZXJhdG9yP2UuVVZHZW5lcmF0b3I6bzZ0O3ZvaWQgMCE9PWUuYW1vdW50JiYoY29uc29sZS53YXJuKCJUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IGFtb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlcHRoLiIpLGw9ZS5hbW91bnQpO2xldCBnLF8seSx2LGIseD0hMTtmJiYoZz1mLmdldFNwYWNlZFBvaW50cyhzKSx4PSEwLGM9ITEsXz1mLmNvbXB1dGVGcmVuZXRGcmFtZXMocywhMSkseT1uZXcgQ0p0LHY9bmV3IENKdCxiPW5ldyBDSnQpLGN8fChwPTAsdT0wLGg9MCxkPTApO2NvbnN0IHc9dC5leHRyYWN0UG9pbnRzKGEpO2xldCBTPXcuc2hhcGU7Y29uc3QgTT13LmhvbGVzO2lmKCFlNnQuaXNDbG9ja1dpc2UoUykpe1M9Uy5yZXZlcnNlKCk7Zm9yKGxldCB0PTAsZT1NLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPU1bdF07ZTZ0LmlzQ2xvY2tXaXNlKGUpJiYoTVt0XT1lLnJldmVyc2UoKSl9fWNvbnN0IEU9ZTZ0LnRyaWFuZ3VsYXRlU2hhcGUoUyxNKSxUPVM7Zm9yKGxldCB0PTAsZT1NLmxlbmd0aDt0PGU7dCsrKVM9Uy5jb25jYXQoTVt0XSk7ZnVuY3Rpb24gQyh0LGUsbil7cmV0dXJuIGV8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogdmVjIGRvZXMgbm90IGV4aXN0IiksZS5jbG9uZSgpLm11bHRpcGx5U2NhbGFyKG4pLmFkZCh0KX1jb25zdCBBPVMubGVuZ3RoLGs9RS5sZW5ndGg7ZnVuY3Rpb24gTCh0LGUsbil7bGV0IGkscixvO2NvbnN0IGE9dC54LWUueCxzPXQueS1lLnksbD1uLngtdC54LGM9bi55LXQueSx1PWEqYStzKnM7aWYoTWF0aC5hYnMoYSpjLXMqbCk+TnVtYmVyLkVQU0lMT04pe2NvbnN0IGg9TWF0aC5zcXJ0KHUpLGQ9TWF0aC5zcXJ0KGwqbCtjKmMpLHA9ZS54LXMvaCxmPWUueSthL2gsbT0oKG4ueC1jL2QtcCkqYy0obi55K2wvZC1mKSpsKS8oYSpjLXMqbCk7aT1wK2EqbS10Lngscj1mK3MqbS10Lnk7Y29uc3QgZz1pKmkrcipyO2lmKGc8PTIpcmV0dXJuIG5ldyBtSnQoaSxyKTtvPU1hdGguc3FydChnLzIpfWVsc2V7bGV0IHQ9ITE7YT5OdW1iZXIuRVBTSUxPTj9sPk51bWJlci5FUFNJTE9OJiYodD0hMCk6YTwtTnVtYmVyLkVQU0lMT04/bDwtTnVtYmVyLkVQU0lMT04mJih0PSEwKTpNYXRoLnNpZ24ocyk9PT1NYXRoLnNpZ24oYykmJih0PSEwKSx0PyhpPS1zLHI9YSxvPU1hdGguc3FydCh1KSk6KGk9YSxyPXMsbz1NYXRoLnNxcnQodS8yKSl9cmV0dXJuIG5ldyBtSnQoaS9vLHIvbyl9Y29uc3QgUD1bXTtmb3IobGV0IHQ9MCxlPVQubGVuZ3RoLG49ZS0xLGk9dCsxO3Q8ZTt0KyssbisrLGkrKyluPT09ZSYmKG49MCksaT09PWUmJihpPTApLFBbdF09TChUW3RdLFRbbl0sVFtpXSk7Y29uc3QgTj1bXTtsZXQgSSxSPVAuY29uY2F0KCk7Zm9yKGxldCB0PTAsZT1NLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPU1bdF07ST1bXTtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoLGk9bi0xLHI9dCsxO3Q8bjt0KyssaSsrLHIrKylpPT09biYmKGk9MCkscj09PW4mJihyPTApLElbdF09TChlW3RdLGVbaV0sZVtyXSk7Ti5wdXNoKEkpLFI9Ui5jb25jYXQoSSl9Zm9yKGxldCB0PTA7dDxwO3QrKyl7Y29uc3QgZT10L3Asbj11Kk1hdGguY29zKGUqTWF0aC5QSS8yKSxpPWgqTWF0aC5zaW4oZSpNYXRoLlBJLzIpK2Q7Zm9yKGxldCB0PTAsZT1ULmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPUMoVFt0XSxQW3RdLGkpO0QoZS54LGUueSwtbil9Zm9yKGxldCB0PTAsZT1NLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPU1bdF07ST1OW3RdO2ZvcihsZXQgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyl7Y29uc3Qgcj1DKGVbdF0sSVt0XSxpKTtEKHIueCxyLnksLW4pfX19Y29uc3QgTz1oK2Q7Zm9yKGxldCB0PTA7dDxBO3QrKyl7Y29uc3QgZT1jP0MoU1t0XSxSW3RdLE8pOlNbdF07eD8odi5jb3B5KF8ubm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIoZS54KSx5LmNvcHkoXy5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGUueSksYi5jb3B5KGdbMF0pLmFkZCh2KS5hZGQoeSksRChiLngsYi55LGIueikpOkQoZS54LGUueSwwKX1mb3IobGV0IHQ9MTt0PD1zO3QrKylmb3IobGV0IGU9MDtlPEE7ZSsrKXtjb25zdCBuPWM/QyhTW2VdLFJbZV0sTyk6U1tlXTt4Pyh2LmNvcHkoXy5ub3JtYWxzW3RdKS5tdWx0aXBseVNjYWxhcihuLngpLHkuY29weShfLmJpbm9ybWFsc1t0XSkubXVsdGlwbHlTY2FsYXIobi55KSxiLmNvcHkoZ1t0XSkuYWRkKHYpLmFkZCh5KSxEKGIueCxiLnksYi56KSk6RChuLngsbi55LGwvcyp0KX1mb3IobGV0IHQ9cC0xO3Q+PTA7dC0tKXtjb25zdCBlPXQvcCxuPXUqTWF0aC5jb3MoZSpNYXRoLlBJLzIpLGk9aCpNYXRoLnNpbihlKk1hdGguUEkvMikrZDtmb3IobGV0IHQ9MCxlPVQubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9QyhUW3RdLFBbdF0saSk7RChlLngsZS55LGwrbil9Zm9yKGxldCB0PTAsZT1NLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPU1bdF07ST1OW3RdO2ZvcihsZXQgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyl7Y29uc3Qgcj1DKGVbdF0sSVt0XSxpKTt4P0Qoci54LHIueStnW3MtMV0ueSxnW3MtMV0ueCtuKTpEKHIueCxyLnksbCtuKX19fWZ1bmN0aW9uIHoodCxlKXtsZXQgbj10Lmxlbmd0aDtmb3IoOy0tbj49MDspe2NvbnN0IGk9bjtsZXQgcj1uLTE7cjwwJiYocj10Lmxlbmd0aC0xKTtmb3IobGV0IHQ9MCxuPXMrMipwO3Q8bjt0Kyspe2NvbnN0IG49QSp0LG89QSoodCsxKTtIKGUraStuLGUrcituLGUrcitvLGUraStvKX19fWZ1bmN0aW9uIEQodCxlLG4pe28ucHVzaCh0KSxvLnB1c2goZSksby5wdXNoKG4pfWZ1bmN0aW9uIEIodCxlLHIpe0YodCksRihlKSxGKHIpO2NvbnN0IG89aS5sZW5ndGgvMyxhPW0uZ2VuZXJhdGVUb3BVVihuLGksby0zLG8tMixvLTEpO1YoYVswXSksVihhWzFdKSxWKGFbMl0pfWZ1bmN0aW9uIEgodCxlLHIsbyl7Rih0KSxGKGUpLEYobyksRihlKSxGKHIpLEYobyk7Y29uc3QgYT1pLmxlbmd0aC8zLHM9bS5nZW5lcmF0ZVNpZGVXYWxsVVYobixpLGEtNixhLTMsYS0yLGEtMSk7VihzWzBdKSxWKHNbMV0pLFYoc1szXSksVihzWzFdKSxWKHNbMl0pLFYoc1szXSl9ZnVuY3Rpb24gRih0KXtpLnB1c2gob1szKnQrMF0pLGkucHVzaChvWzMqdCsxXSksaS5wdXNoKG9bMyp0KzJdKX1mdW5jdGlvbiBWKHQpe3IucHVzaCh0LngpLHIucHVzaCh0LnkpfSEoZnVuY3Rpb24gVSgpe2NvbnN0IHQ9aS5sZW5ndGgvMztpZihjKXtsZXQgdD0wLGU9QSp0O2ZvcihsZXQgdD0wO3Q8azt0Kyspe2NvbnN0IG49RVt0XTtCKG5bMl0rZSxuWzFdK2UsblswXStlKX10PXMrMipwLGU9QSp0O2ZvcihsZXQgdD0wO3Q8azt0Kyspe2NvbnN0IG49RVt0XTtCKG5bMF0rZSxuWzFdK2UsblsyXStlKX19ZWxzZXtmb3IobGV0IHQ9MDt0PGs7dCsrKXtjb25zdCBlPUVbdF07QihlWzJdLGVbMV0sZVswXSl9Zm9yKGxldCB0PTA7dDxrO3QrKyl7Y29uc3QgZT1FW3RdO0IoZVswXStBKnMsZVsxXStBKnMsZVsyXStBKnMpfX1uLmFkZEdyb3VwKHQsaS5sZW5ndGgvMy10LDApfSkoKSwoZnVuY3Rpb24gaigpe2NvbnN0IHQ9aS5sZW5ndGgvMztsZXQgZT0wO3ooVCxlKSxlKz1ULmxlbmd0aDtmb3IobGV0IHQ9MCxuPU0ubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49TVt0XTt6KG4sZSksZSs9bi5sZW5ndGh9bi5hZGRHcm91cCh0LGkubGVuZ3RoLzMtdCwxKX0pKCl9dGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgbDF0KGksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGwxdChyLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCl9dG9KU09OKCl7Y29uc3QgdD1zdXBlci50b0pTT04oKTtyZXR1cm4oZnVuY3Rpb24gZSh0LG4saSl7aWYoaS5zaGFwZXM9W10sQXJyYXkuaXNBcnJheSh0KSlmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspaS5zaGFwZXMucHVzaCh0W2VdLnV1aWQpO2Vsc2UgaS5zaGFwZXMucHVzaCh0LnV1aWQpO3JldHVybiB2b2lkIDAhPT1uLmV4dHJ1ZGVQYXRoJiYoaS5vcHRpb25zLmV4dHJ1ZGVQYXRoPW4uZXh0cnVkZVBhdGgudG9KU09OKCkpLGl9KSh0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHRoaXMucGFyYW1ldGVycy5vcHRpb25zLHQpfXN0YXRpYyBmcm9tSlNPTih0LGUpe2NvbnN0IG49W107Zm9yKGxldCBpPTAscj10LnNoYXBlcy5sZW5ndGg7aTxyO2krKyluLnB1c2goZVt0LnNoYXBlc1tpXV0pO2NvbnN0IGk9dC5vcHRpb25zLmV4dHJ1ZGVQYXRoO3JldHVybiB2b2lkIDAhPT1pJiYodC5vcHRpb25zLmV4dHJ1ZGVQYXRoPShuZXcgTDR0W2kudHlwZV0pLmZyb21KU09OKGkpKSxuZXcgcjZ0KG4sdC5vcHRpb25zKX19Y29uc3QgbzZ0PXtnZW5lcmF0ZVRvcFVWOmZ1bmN0aW9uKHQsZSxuLGkscil7Y29uc3Qgbz1lWzMqaV0sYT1lWzMqaSsxXSxzPWVbMypyXSxsPWVbMypyKzFdO3JldHVybltuZXcgbUp0KGVbMypuXSxlWzMqbisxXSksbmV3IG1KdChvLGEpLG5ldyBtSnQocyxsKV19LGdlbmVyYXRlU2lkZVdhbGxVVjpmdW5jdGlvbih0LGUsbixpLHIsbyl7Y29uc3QgYT1lWzMqbl0scz1lWzMqbisxXSxsPWVbMypuKzJdLGM9ZVszKmldLHU9ZVszKmkrMV0saD1lWzMqaSsyXSxkPWVbMypyXSxwPWVbMypyKzFdLGY9ZVszKnIrMl0sbT1lWzMqb10sZz1lWzMqbysxXSxfPWVbMypvKzJdO3JldHVybiBNYXRoLmFicyhzLXUpPE1hdGguYWJzKGEtYyk/W25ldyBtSnQoYSwxLWwpLG5ldyBtSnQoYywxLWgpLG5ldyBtSnQoZCwxLWYpLG5ldyBtSnQobSwxLV8pXTpbbmV3IG1KdChzLDEtbCksbmV3IG1KdCh1LDEtaCksbmV3IG1KdChwLDEtZiksbmV3IG1KdChnLDEtXyldfX07Y2xhc3MgYTZ0IGV4dGVuZHMgcjR0e2NvbnN0cnVjdG9yKHQ9MSxlPTApe2NvbnN0IG49KDErTWF0aC5zcXJ0KDUpKS8yO3N1cGVyKFstMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLDAsMCwtMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLG4sMCwtMSxuLDAsMSwtbiwwLC0xLC1uLDAsMV0sWzAsMTEsNSwwLDUsMSwwLDEsNywwLDcsMTAsMCwxMCwxMSwxLDUsOSw1LDExLDQsMTEsMTAsMiwxMCw3LDYsNywxLDgsMyw5LDQsMyw0LDIsMywyLDYsMyw2LDgsMyw4LDksNCw5LDUsMiw0LDExLDYsMiwxMCw4LDYsNyw5LDgsMV0sdCxlKSx0aGlzLnR5cGU9Ikljb3NhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOmV9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IGE2dCh0LnJhZGl1cyx0LmRldGFpbCl9fWNsYXNzIHM2dCBleHRlbmRzIGIxdHtjb25zdHJ1Y3Rvcih0LGU9MTIsbj0wLGk9MipNYXRoLlBJKXtzdXBlcigpLHRoaXMudHlwZT0iTGF0aGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtwb2ludHM6dCxzZWdtZW50czplLHBoaVN0YXJ0Om4scGhpTGVuZ3RoOml9LGU9TWF0aC5mbG9vcihlKSxpPSRadChpLDAsMipNYXRoLlBJKTtjb25zdCByPVtdLG89W10sYT1bXSxzPTEvZSxsPW5ldyBDSnQsYz1uZXcgbUp0O2ZvcihsZXQgcj0wO3I8PWU7cisrKXtjb25zdCB1PW4rcipzKmksaD1NYXRoLnNpbih1KSxkPU1hdGguY29zKHUpO2ZvcihsZXQgbj0wO248PXQubGVuZ3RoLTE7bisrKWwueD10W25dLngqaCxsLnk9dFtuXS55LGwuej10W25dLngqZCxvLnB1c2gobC54LGwueSxsLnopLGMueD1yL2UsYy55PW4vKHQubGVuZ3RoLTEpLGEucHVzaChjLngsYy55KX1mb3IobGV0IG49MDtuPGU7bisrKWZvcihsZXQgZT0wO2U8dC5sZW5ndGgtMTtlKyspe2NvbnN0IGk9ZStuKnQubGVuZ3RoLG89aSt0Lmxlbmd0aCxhPWkrdC5sZW5ndGgrMSxzPWkrMTtyLnB1c2goaSxvLHMpLHIucHVzaChvLGEscyl9aWYodGhpcy5zZXRJbmRleChyKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBsMXQobywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgbDF0KGEsMikpLHRoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKSxpPT09MipNYXRoLlBJKXtjb25zdCBuPXRoaXMuYXR0cmlidXRlcy5ub3JtYWwuYXJyYXksaT1uZXcgQ0p0LHI9bmV3IENKdCxvPW5ldyBDSnQsYT1lKnQubGVuZ3RoKjM7Zm9yKGxldCBlPTAscz0wO2U8dC5sZW5ndGg7ZSsrLHMrPTMpaS54PW5bcyswXSxpLnk9bltzKzFdLGkuej1uW3MrMl0sci54PW5bYStzKzBdLHIueT1uW2ErcysxXSxyLno9blthK3MrMl0sby5hZGRWZWN0b3JzKGkscikubm9ybWFsaXplKCksbltzKzBdPW5bYStzKzBdPW8ueCxuW3MrMV09blthK3MrMV09by55LG5bcysyXT1uW2ErcysyXT1vLnp9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IHM2dCh0LnBvaW50cyx0LnNlZ21lbnRzLHQucGhpU3RhcnQsdC5waGlMZW5ndGgpfX1jbGFzcyBsNnQgZXh0ZW5kcyByNHR7Y29uc3RydWN0b3IodD0xLGU9MCl7c3VwZXIoWzEsMCwwLC0xLDAsMCwwLDEsMCwwLC0xLDAsMCwwLDEsMCwwLC0xXSxbMCwyLDQsMCw0LDMsMCwzLDUsMCw1LDIsMSwyLDUsMSw1LDMsMSwzLDQsMSw0LDJdLHQsZSksdGhpcy50eXBlPSJPY3RhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOmV9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IGw2dCh0LnJhZGl1cyx0LmRldGFpbCl9fWNsYXNzIGM2dCBleHRlbmRzIGIxdHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIoKSx0aGlzLnR5cGU9IlBhcmFtZXRyaWNHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtmdW5jOnQsc2xpY2VzOmUsc3RhY2tzOm59O2NvbnN0IGk9W10scj1bXSxvPVtdLGE9W10scz0xZS01LGw9bmV3IENKdCxjPW5ldyBDSnQsdT1uZXcgQ0p0LGg9bmV3IENKdCxkPW5ldyBDSnQ7dC5sZW5ndGg8MyYmY29uc29sZS5lcnJvcigiVEhSRUUuUGFyYW1ldHJpY0dlb21ldHJ5OiBGdW5jdGlvbiBtdXN0IG5vdyBtb2RpZnkgYSBWZWN0b3IzIGFzIHRoaXJkIHBhcmFtZXRlci4iKTtjb25zdCBwPWUrMTtmb3IobGV0IGk9MDtpPD1uO2krKyl7Y29uc3QgcD1pL247Zm9yKGxldCBuPTA7bjw9ZTtuKyspe2NvbnN0IGk9bi9lO3QoaSxwLGMpLHIucHVzaChjLngsYy55LGMueiksaS1zPj0wPyh0KGktcyxwLHUpLGguc3ViVmVjdG9ycyhjLHUpKToodChpK3MscCx1KSxoLnN1YlZlY3RvcnModSxjKSkscC1zPj0wPyh0KGkscC1zLHUpLGQuc3ViVmVjdG9ycyhjLHUpKToodChpLHArcyx1KSxkLnN1YlZlY3RvcnModSxjKSksbC5jcm9zc1ZlY3RvcnMoaCxkKS5ub3JtYWxpemUoKSxvLnB1c2gobC54LGwueSxsLnopLGEucHVzaChpLHApfX1mb3IobGV0IHQ9MDt0PG47dCsrKWZvcihsZXQgbj0wO248ZTtuKyspe2NvbnN0IGU9dCpwK24rMSxyPSh0KzEpKnArbisxLG89KHQrMSkqcCtuO2kucHVzaCh0KnArbixlLG8pLGkucHVzaChlLHIsbyl9dGhpcy5zZXRJbmRleChpKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBsMXQociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGwxdChvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBsMXQoYSwyKSl9fWNsYXNzIHU2dCBleHRlbmRzIGIxdHtjb25zdHJ1Y3Rvcih0PS41LGU9MSxuPTgsaT0xLHI9MCxvPTIqTWF0aC5QSSl7c3VwZXIoKSx0aGlzLnR5cGU9IlJpbmdHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtpbm5lclJhZGl1czp0LG91dGVyUmFkaXVzOmUsdGhldGFTZWdtZW50czpuLHBoaVNlZ21lbnRzOmksdGhldGFTdGFydDpyLHRoZXRhTGVuZ3RoOm99LG49TWF0aC5tYXgoMyxuKTtjb25zdCBhPVtdLHM9W10sbD1bXSxjPVtdO2xldCB1PXQ7Y29uc3QgaD0oZS10KS8oaT1NYXRoLm1heCgxLGkpKSxkPW5ldyBDSnQscD1uZXcgbUp0O2ZvcihsZXQgdD0wO3Q8PWk7dCsrKXtmb3IobGV0IHQ9MDt0PD1uO3QrKyl7Y29uc3QgaT1yK3QvbipvO2QueD11Kk1hdGguY29zKGkpLGQueT11Kk1hdGguc2luKGkpLHMucHVzaChkLngsZC55LGQueiksbC5wdXNoKDAsMCwxKSxwLng9KGQueC9lKzEpLzIscC55PShkLnkvZSsxKS8yLGMucHVzaChwLngscC55KX11Kz1ofWZvcihsZXQgdD0wO3Q8aTt0Kyspe2NvbnN0IGU9dCoobisxKTtmb3IobGV0IHQ9MDt0PG47dCsrKXtjb25zdCBpPXQrZSxyPWkrbisxLG89aStuKzIscz1pKzE7YS5wdXNoKGkscixzKSxhLnB1c2gocixvLHMpfX10aGlzLnNldEluZGV4KGEpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGwxdChzLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgbDF0KGwsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGwxdChjLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyB1NnQodC5pbm5lclJhZGl1cyx0Lm91dGVyUmFkaXVzLHQudGhldGFTZWdtZW50cyx0LnBoaVNlZ21lbnRzLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19Y2xhc3MgaDZ0IGV4dGVuZHMgYjF0e2NvbnN0cnVjdG9yKHQsZT0xMil7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYXBlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsY3VydmVTZWdtZW50czplfTtjb25zdCBuPVtdLGk9W10scj1bXSxvPVtdO2xldCBhPTAscz0wO2lmKCExPT09QXJyYXkuaXNBcnJheSh0KSlsKHQpO2Vsc2UgZm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbCh0W2VdKSx0aGlzLmFkZEdyb3VwKGEscyxlKSxhKz1zLHM9MDtmdW5jdGlvbiBsKHQpe2NvbnN0IGE9aS5sZW5ndGgvMyxsPXQuZXh0cmFjdFBvaW50cyhlKTtsZXQgYz1sLnNoYXBlO2NvbnN0IHU9bC5ob2xlczshMT09PWU2dC5pc0Nsb2NrV2lzZShjKSYmKGM9Yy5yZXZlcnNlKCkpO2ZvcihsZXQgdD0wLGU9dS5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT11W3RdOyEwPT09ZTZ0LmlzQ2xvY2tXaXNlKGUpJiYodVt0XT1lLnJldmVyc2UoKSl9Y29uc3QgaD1lNnQudHJpYW5ndWxhdGVTaGFwZShjLHUpO2ZvcihsZXQgdD0wLGU9dS5sZW5ndGg7dDxlO3QrKyljPWMuY29uY2F0KHVbdF0pO2ZvcihsZXQgdD0wLGU9Yy5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1jW3RdO2kucHVzaChlLngsZS55LDApLHIucHVzaCgwLDAsMSksby5wdXNoKGUueCxlLnkpfWZvcihsZXQgdD0wLGU9aC5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1oW3RdO24ucHVzaChlWzBdK2EsZVsxXSthLGVbMl0rYSkscys9M319dGhpcy5zZXRJbmRleChuKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBsMXQoaSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGwxdChyLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBsMXQobywyKSl9dG9KU09OKCl7Y29uc3QgdD1zdXBlci50b0pTT04oKTtyZXR1cm4oZnVuY3Rpb24gZSh0LG4pe2lmKG4uc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkodCkpZm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKW4uc2hhcGVzLnB1c2godFtlXS51dWlkKTtlbHNlIG4uc2hhcGVzLnB1c2godC51dWlkKTtyZXR1cm4gbn0pKHRoaXMucGFyYW1ldGVycy5zaGFwZXMsdCl9c3RhdGljIGZyb21KU09OKHQsZSl7Y29uc3Qgbj1bXTtmb3IobGV0IGk9MCxyPXQuc2hhcGVzLmxlbmd0aDtpPHI7aSsrKW4ucHVzaChlW3Quc2hhcGVzW2ldXSk7cmV0dXJuIG5ldyBoNnQobix0LmN1cnZlU2VnbWVudHMpfX1jbGFzcyBkNnQgZXh0ZW5kcyBiMXR7Y29uc3RydWN0b3IodD0xLGU9MzIsbj0xNixpPTAscj0yKk1hdGguUEksbz0wLGE9TWF0aC5QSSl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwaGVyZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHdpZHRoU2VnbWVudHM6ZSxoZWlnaHRTZWdtZW50czpuLHBoaVN0YXJ0OmkscGhpTGVuZ3RoOnIsdGhldGFTdGFydDpvLHRoZXRhTGVuZ3RoOmF9LGU9TWF0aC5tYXgoMyxNYXRoLmZsb29yKGUpKSxuPU1hdGgubWF4KDIsTWF0aC5mbG9vcihuKSk7Y29uc3Qgcz1NYXRoLm1pbihvK2EsTWF0aC5QSSk7bGV0IGw9MDtjb25zdCBjPVtdLHU9bmV3IENKdCxoPW5ldyBDSnQsZD1bXSxwPVtdLGY9W10sbT1bXTtmb3IobGV0IGQ9MDtkPD1uO2QrKyl7Y29uc3QgZz1bXSxfPWQvbjtsZXQgeT0wOzA9PWQmJjA9PW8/eT0uNS9lOmQ9PW4mJnM9PU1hdGguUEkmJih5PS0uNS9lKTtmb3IobGV0IG49MDtuPD1lO24rKyl7Y29uc3Qgcz1uL2U7dS54PS10Kk1hdGguY29zKGkrcypyKSpNYXRoLnNpbihvK18qYSksdS55PXQqTWF0aC5jb3MobytfKmEpLHUuej10Kk1hdGguc2luKGkrcypyKSpNYXRoLnNpbihvK18qYSkscC5wdXNoKHUueCx1LnksdS56KSxoLmNvcHkodSkubm9ybWFsaXplKCksZi5wdXNoKGgueCxoLnksaC56KSxtLnB1c2gocyt5LDEtXyksZy5wdXNoKGwrKyl9Yy5wdXNoKGcpfWZvcihsZXQgdD0wO3Q8bjt0KyspZm9yKGxldCBpPTA7aTxlO2krKyl7Y29uc3QgZT1jW3RdW2krMV0scj1jW3RdW2ldLGE9Y1t0KzFdW2ldLGw9Y1t0KzFdW2krMV07KDAhPT10fHxvPjApJiZkLnB1c2goZSxyLGwpLCh0IT09bi0xfHxzPE1hdGguUEkpJiZkLnB1c2gocixhLGwpfXRoaXMuc2V0SW5kZXgoZCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgbDF0KHAsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBsMXQoZiwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgbDF0KG0sMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IGQ2dCh0LnJhZGl1cyx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LnBoaVN0YXJ0LHQucGhpTGVuZ3RoLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19Y2xhc3MgcDZ0IGV4dGVuZHMgcjR0e2NvbnN0cnVjdG9yKHQ9MSxlPTApe3N1cGVyKFsxLDEsMSwtMSwtMSwxLC0xLDEsLTEsMSwtMSwtMV0sWzIsMSwwLDAsMywyLDEsMywwLDIsMywxXSx0LGUpLHRoaXMudHlwZT0iVGV0cmFoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6ZX19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgcDZ0KHQucmFkaXVzLHQuZGV0YWlsKX19Y2xhc3MgZjZ0IGV4dGVuZHMgcjZ0e2NvbnN0cnVjdG9yKHQsZT17fSl7Y29uc3Qgbj1lLmZvbnQ7aWYoIW58fCFuLmlzRm9udClyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuVGV4dEdlb21ldHJ5OiBmb250IHBhcmFtZXRlciBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuRm9udC4iKSxuZXcgYjF0O2NvbnN0IGk9bi5nZW5lcmF0ZVNoYXBlcyh0LGUuc2l6ZSk7ZS5kZXB0aD12b2lkIDAhPT1lLmhlaWdodD9lLmhlaWdodDo1MCx2b2lkIDA9PT1lLmJldmVsVGhpY2tuZXNzJiYoZS5iZXZlbFRoaWNrbmVzcz0xMCksdm9pZCAwPT09ZS5iZXZlbFNpemUmJihlLmJldmVsU2l6ZT04KSx2b2lkIDA9PT1lLmJldmVsRW5hYmxlZCYmKGUuYmV2ZWxFbmFibGVkPSExKSxzdXBlcihpLGUpLHRoaXMudHlwZT0iVGV4dEdlb21ldHJ5In19Y2xhc3MgbTZ0IGV4dGVuZHMgYjF0e2NvbnN0cnVjdG9yKHQ9MSxlPS40LG49OCxpPTYscj0yKk1hdGguUEkpe3N1cGVyKCksdGhpcy50eXBlPSJUb3J1c0dlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHR1YmU6ZSxyYWRpYWxTZWdtZW50czpuLHR1YnVsYXJTZWdtZW50czppLGFyYzpyfSxuPU1hdGguZmxvb3IobiksaT1NYXRoLmZsb29yKGkpO2NvbnN0IG89W10sYT1bXSxzPVtdLGw9W10sYz1uZXcgQ0p0LHU9bmV3IENKdCxoPW5ldyBDSnQ7Zm9yKGxldCBvPTA7bzw9bjtvKyspZm9yKGxldCBkPTA7ZDw9aTtkKyspe2NvbnN0IHA9ZC9pKnIsZj1vL24qTWF0aC5QSSoyO3UueD0odCtlKk1hdGguY29zKGYpKSpNYXRoLmNvcyhwKSx1Lnk9KHQrZSpNYXRoLmNvcyhmKSkqTWF0aC5zaW4ocCksdS56PWUqTWF0aC5zaW4oZiksYS5wdXNoKHUueCx1LnksdS56KSxjLng9dCpNYXRoLmNvcyhwKSxjLnk9dCpNYXRoLnNpbihwKSxoLnN1YlZlY3RvcnModSxjKS5ub3JtYWxpemUoKSxzLnB1c2goaC54LGgueSxoLnopLGwucHVzaChkL2kpLGwucHVzaChvL24pfWZvcihsZXQgdD0xO3Q8PW47dCsrKWZvcihsZXQgZT0xO2U8PWk7ZSsrKXtjb25zdCBuPShpKzEpKih0LTEpK2UtMSxyPShpKzEpKih0LTEpK2UsYT0oaSsxKSp0K2U7by5wdXNoKChpKzEpKnQrZS0xLG4sYSksby5wdXNoKG4scixhKX10aGlzLnNldEluZGV4KG8pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGwxdChhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgbDF0KHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGwxdChsLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBtNnQodC5yYWRpdXMsdC50dWJlLHQucmFkaWFsU2VnbWVudHMsdC50dWJ1bGFyU2VnbWVudHMsdC5hcmMpfX1jbGFzcyBnNnQgZXh0ZW5kcyBiMXR7Y29uc3RydWN0b3IodD0xLGU9LjQsbj02NCxpPTgscj0yLG89Myl7c3VwZXIoKSx0aGlzLnR5cGU9IlRvcnVzS25vdEdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHR1YmU6ZSx0dWJ1bGFyU2VnbWVudHM6bixyYWRpYWxTZWdtZW50czppLHA6cixxOm99LG49TWF0aC5mbG9vcihuKSxpPU1hdGguZmxvb3IoaSk7Y29uc3QgYT1bXSxzPVtdLGw9W10sYz1bXSx1PW5ldyBDSnQsaD1uZXcgQ0p0LGQ9bmV3IENKdCxwPW5ldyBDSnQsZj1uZXcgQ0p0LG09bmV3IENKdCxnPW5ldyBDSnQ7Zm9yKGxldCBhPTA7YTw9bjsrK2Epe2NvbnN0IHk9YS9uKnIqTWF0aC5QSSoyO18oeSxyLG8sdCxkKSxfKHkrLjAxLHIsbyx0LHApLG0uc3ViVmVjdG9ycyhwLGQpLGcuYWRkVmVjdG9ycyhwLGQpLGYuY3Jvc3NWZWN0b3JzKG0sZyksZy5jcm9zc1ZlY3RvcnMoZixtKSxmLm5vcm1hbGl6ZSgpLGcubm9ybWFsaXplKCk7Zm9yKGxldCB0PTA7dDw9aTsrK3Qpe2NvbnN0IHI9dC9pKk1hdGguUEkqMixvPS1lKk1hdGguY29zKHIpLHA9ZSpNYXRoLnNpbihyKTt1Lng9ZC54KyhvKmcueCtwKmYueCksdS55PWQueSsobypnLnkrcCpmLnkpLHUuej1kLnorKG8qZy56K3AqZi56KSxzLnB1c2godS54LHUueSx1LnopLGguc3ViVmVjdG9ycyh1LGQpLm5vcm1hbGl6ZSgpLGwucHVzaChoLngsaC55LGgueiksYy5wdXNoKGEvbiksYy5wdXNoKHQvaSl9fWZvcihsZXQgdD0xO3Q8PW47dCsrKWZvcihsZXQgZT0xO2U8PWk7ZSsrKXtjb25zdCBuPShpKzEpKnQrKGUtMSkscj0oaSsxKSp0K2Usbz0oaSsxKSoodC0xKStlO2EucHVzaCgoaSsxKSoodC0xKSsoZS0xKSxuLG8pLGEucHVzaChuLHIsbyl9ZnVuY3Rpb24gXyh0LGUsbixpLHIpe2NvbnN0IG89TWF0aC5jb3ModCksYT1NYXRoLnNpbih0KSxzPW4vZSp0LGw9TWF0aC5jb3Mocyk7ci54PWkqKDIrbCkqLjUqbyxyLnk9aSooMitsKSphKi41LHIuej1pKk1hdGguc2luKHMpKi41fXRoaXMuc2V0SW5kZXgoYSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgbDF0KHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBsMXQobCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgbDF0KGMsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IGc2dCh0LnJhZGl1cyx0LnR1YmUsdC50dWJ1bGFyU2VnbWVudHMsdC5yYWRpYWxTZWdtZW50cyx0LnAsdC5xKX19Y2xhc3MgXzZ0IGV4dGVuZHMgYjF0e2NvbnN0cnVjdG9yKHQsZT02NCxuPTEsaT04LHI9ITEpe3N1cGVyKCksdGhpcy50eXBlPSJUdWJlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cGF0aDp0LHR1YnVsYXJTZWdtZW50czplLHJhZGl1czpuLHJhZGlhbFNlZ21lbnRzOmksY2xvc2VkOnJ9O2NvbnN0IG89dC5jb21wdXRlRnJlbmV0RnJhbWVzKGUscik7dGhpcy50YW5nZW50cz1vLnRhbmdlbnRzLHRoaXMubm9ybWFscz1vLm5vcm1hbHMsdGhpcy5iaW5vcm1hbHM9by5iaW5vcm1hbHM7Y29uc3QgYT1uZXcgQ0p0LHM9bmV3IENKdCxsPW5ldyBtSnQ7bGV0IGM9bmV3IENKdDtjb25zdCB1PVtdLGg9W10sZD1bXSxwPVtdO2Z1bmN0aW9uIGYocil7Yz10LmdldFBvaW50QXQoci9lLGMpO2NvbnN0IGw9by5ub3JtYWxzW3JdLGQ9by5iaW5vcm1hbHNbcl07Zm9yKGxldCB0PTA7dDw9aTt0Kyspe2NvbnN0IGU9dC9pKk1hdGguUEkqMixyPU1hdGguc2luKGUpLG89LU1hdGguY29zKGUpO3MueD1vKmwueCtyKmQueCxzLnk9bypsLnkrcipkLnkscy56PW8qbC56K3IqZC56LHMubm9ybWFsaXplKCksaC5wdXNoKHMueCxzLnkscy56KSxhLng9Yy54K24qcy54LGEueT1jLnkrbipzLnksYS56PWMueituKnMueix1LnB1c2goYS54LGEueSxhLnopfX0hKGZ1bmN0aW9uIG0oKXtmb3IobGV0IHQ9MDt0PGU7dCsrKWYodCk7ZighMT09PXI/ZTowKSwoZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8PWU7dCsrKWZvcihsZXQgbj0wO248PWk7bisrKWwueD10L2UsbC55PW4vaSxkLnB1c2gobC54LGwueSl9KSgpLChmdW5jdGlvbiBuKCl7Zm9yKGxldCB0PTE7dDw9ZTt0KyspZm9yKGxldCBlPTE7ZTw9aTtlKyspe2NvbnN0IG49KGkrMSkqdCsoZS0xKSxyPShpKzEpKnQrZSxvPShpKzEpKih0LTEpK2U7cC5wdXNoKChpKzEpKih0LTEpKyhlLTEpLG4sbykscC5wdXNoKG4scixvKX19KSgpfSkoKSx0aGlzLnNldEluZGV4KHApLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGwxdCh1LDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgbDF0KGgsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGwxdChkLDIpKX10b0pTT04oKXtjb25zdCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnBhdGg9dGhpcy5wYXJhbWV0ZXJzLnBhdGgudG9KU09OKCksdH1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBfNnQoKG5ldyBMNHRbdC5wYXRoLnR5cGVdKS5mcm9tSlNPTih0LnBhdGgpLHQudHVidWxhclNlZ21lbnRzLHQucmFkaXVzLHQucmFkaWFsU2VnbWVudHMsdC5jbG9zZWQpfX1jbGFzcyB5NnQgZXh0ZW5kcyBiMXR7Y29uc3RydWN0b3IodCl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IldpcmVmcmFtZUdlb21ldHJ5IiwhMD09PXQuaXNHZW9tZXRyeSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XaXJlZnJhbWVHZW9tZXRyeSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO2NvbnN0IGU9W10sbj1uZXcgU2V0LGk9bmV3IENKdCxyPW5ldyBDSnQ7aWYobnVsbCE9PXQuaW5kZXgpe2NvbnN0IG89dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLGE9dC5pbmRleDtsZXQgcz10Lmdyb3VwczswPT09cy5sZW5ndGgmJihzPVt7c3RhcnQ6MCxjb3VudDphLmNvdW50LG1hdGVyaWFsSW5kZXg6MH1dKTtmb3IobGV0IHQ9MCxsPXMubGVuZ3RoO3Q8bDsrK3Qpe2NvbnN0IGw9c1t0XSxjPWwuc3RhcnQ7Zm9yKGxldCB0PWMscz1jK2wuY291bnQ7dDxzO3QrPTMpZm9yKGxldCBzPTA7czwzO3MrKyl7Y29uc3QgbD1hLmdldFgodCtzKSxjPWEuZ2V0WCh0KyhzKzEpJTMpO2kuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLGwpLHIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLGMpLCEwPT09djZ0KGkscixuKSYmKGUucHVzaChpLngsaS55LGkueiksZS5wdXNoKHIueCxyLnksci56KSl9fX1lbHNle2NvbnN0IG89dC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgdD0wLGE9by5jb3VudC8zO3Q8YTt0KyspZm9yKGxldCBhPTA7YTwzO2ErKyl7Y29uc3Qgcz0zKnQrKGErMSklMztpLmZyb21CdWZmZXJBdHRyaWJ1dGUobywzKnQrYSksci5mcm9tQnVmZmVyQXR0cmlidXRlKG8scyksITA9PT12NnQoaSxyLG4pJiYoZS5wdXNoKGkueCxpLnksaS56KSxlLnB1c2goci54LHIueSxyLnopKX19dGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgbDF0KGUsMykpfX1mdW5jdGlvbiB2NnQodCxlLG4pe2NvbnN0IGk9YCR7dC54fSwke3QueX0sJHt0Lnp9LSR7ZS54fSwke2UueX0sJHtlLnp9YCxyPWAke2UueH0sJHtlLnl9LCR7ZS56fS0ke3QueH0sJHt0Lnl9LCR7dC56fWA7cmV0dXJuITAhPT1uLmhhcyhpKSYmITAhPT1uLmhhcyhyKSYmKG4uYWRkKGksciksITApfXZhciBiNnQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQm94R2VvbWV0cnk6RjF0LEJveEJ1ZmZlckdlb21ldHJ5OkYxdCxDaXJjbGVHZW9tZXRyeTplNHQsQ2lyY2xlQnVmZmVyR2VvbWV0cnk6ZTR0LENvbmVHZW9tZXRyeTppNHQsQ29uZUJ1ZmZlckdlb21ldHJ5Omk0dCxDeWxpbmRlckdlb21ldHJ5Om40dCxDeWxpbmRlckJ1ZmZlckdlb21ldHJ5Om40dCxEb2RlY2FoZWRyb25HZW9tZXRyeTpvNHQsRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnk6bzR0LEVkZ2VzR2VvbWV0cnk6dTR0LEV4dHJ1ZGVHZW9tZXRyeTpyNnQsRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OnI2dCxJY29zYWhlZHJvbkdlb21ldHJ5OmE2dCxJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OmE2dCxMYXRoZUdlb21ldHJ5OnM2dCxMYXRoZUJ1ZmZlckdlb21ldHJ5OnM2dCxPY3RhaGVkcm9uR2VvbWV0cnk6bDZ0LE9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeTpsNnQsUGFyYW1ldHJpY0dlb21ldHJ5OmM2dCxQYXJhbWV0cmljQnVmZmVyR2VvbWV0cnk6YzZ0LFBsYW5lR2VvbWV0cnk6YTB0LFBsYW5lQnVmZmVyR2VvbWV0cnk6YTB0LFBvbHloZWRyb25HZW9tZXRyeTpyNHQsUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5OnI0dCxSaW5nR2VvbWV0cnk6dTZ0LFJpbmdCdWZmZXJHZW9tZXRyeTp1NnQsU2hhcGVHZW9tZXRyeTpoNnQsU2hhcGVCdWZmZXJHZW9tZXRyeTpoNnQsU3BoZXJlR2VvbWV0cnk6ZDZ0LFNwaGVyZUJ1ZmZlckdlb21ldHJ5OmQ2dCxUZXRyYWhlZHJvbkdlb21ldHJ5OnA2dCxUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OnA2dCxUZXh0R2VvbWV0cnk6ZjZ0LFRleHRCdWZmZXJHZW9tZXRyeTpmNnQsVG9ydXNHZW9tZXRyeTptNnQsVG9ydXNCdWZmZXJHZW9tZXRyeTptNnQsVG9ydXNLbm90R2VvbWV0cnk6ZzZ0LFRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5Omc2dCxUdWJlR2VvbWV0cnk6XzZ0LFR1YmVCdWZmZXJHZW9tZXRyeTpfNnQsV2lyZWZyYW1lR2VvbWV0cnk6eTZ0fSk7Y2xhc3MgeDZ0IGV4dGVuZHMgVVF0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJTaGFkb3dNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgJFF0KDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319eDZ0LnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO2NsYXNzIHc2dCBleHRlbmRzIFVRdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3ICRRdCgxNjc3NzIxNSksdGhpcy5yb3VnaG5lc3M9MSx0aGlzLm1ldGFsbmVzcz0wLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3ICRRdCgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBtSnQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnJvdWdobmVzc01hcD1udWxsLHRoaXMubWV0YWxuZXNzTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5lbnZNYXBJbnRlbnNpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyx0aGlzLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnJvdWdobmVzc01hcD10LnJvdWdobmVzc01hcCx0aGlzLm1ldGFsbmVzc01hcD10Lm1ldGFsbmVzc01hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fXc2dC5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD0hMDtjbGFzcyBTNnQgZXh0ZW5kcyB3NnR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLnR5cGU9Ik1lc2hQaHlzaWNhbE1hdGVyaWFsIix0aGlzLmNsZWFyY29hdD0wLHRoaXMuY2xlYXJjb2F0TWFwPW51bGwsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9MCx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD1udWxsLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IG1KdCgxLDEpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPW51bGwsdGhpcy5yZWZsZWN0aXZpdHk9LjUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlvciIse2dldDpmdW5jdGlvbigpe3JldHVybigxKy40KnRoaXMucmVmbGVjdGl2aXR5KS8oMS0uNCp0aGlzLnJlZmxlY3Rpdml0eSl9LHNldDpmdW5jdGlvbih0KXt0aGlzLnJlZmxlY3Rpdml0eT0kWnQoMi41Kih0LTEpLyh0KzEpLDAsMSl9fSksdGhpcy5zaGVlbj1udWxsLHRoaXMudHJhbnNtaXNzaW9uPTAsdGhpcy50cmFuc21pc3Npb25NYXA9bnVsbCx0aGlzLnRoaWNrbmVzcz0uMDEsdGhpcy50aGlja25lc3NNYXA9bnVsbCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9MCx0aGlzLmF0dGVudWF0aW9uVGludD1uZXcgJFF0KDEsMSwxKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD1udWxsLHRoaXMuc3BlY3VsYXJUaW50PW5ldyAkUXQoMSwxLDEpLHRoaXMuc3BlY3VsYXJUaW50TWFwPW51bGwsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLmNsZWFyY29hdD10LmNsZWFyY29hdCx0aGlzLmNsZWFyY29hdE1hcD10LmNsZWFyY29hdE1hcCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD10LmNsZWFyY29hdFJvdWdobmVzc01hcCx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD10LmNsZWFyY29hdE5vcm1hbE1hcCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLmNvcHkodC5jbGVhcmNvYXROb3JtYWxTY2FsZSksdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5zaGVlbj10LnNoZWVuPyh0aGlzLnNoZWVufHxuZXcgJFF0KS5jb3B5KHQuc2hlZW4pOm51bGwsdGhpcy50cmFuc21pc3Npb249dC50cmFuc21pc3Npb24sdGhpcy50cmFuc21pc3Npb25NYXA9dC50cmFuc21pc3Npb25NYXAsdGhpcy50aGlja25lc3M9dC50aGlja25lc3MsdGhpcy50aGlja25lc3NNYXA9dC50aGlja25lc3NNYXAsdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlPXQuYXR0ZW51YXRpb25EaXN0YW5jZSx0aGlzLmF0dGVudWF0aW9uVGludC5jb3B5KHQuYXR0ZW51YXRpb25UaW50KSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PXQuc3BlY3VsYXJJbnRlbnNpdHksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD10LnNwZWN1bGFySW50ZW5zaXR5TWFwLHRoaXMuc3BlY3VsYXJUaW50LmNvcHkodC5zcGVjdWxhclRpbnQpLHRoaXMuc3BlY3VsYXJUaW50TWFwPXQuc3BlY3VsYXJUaW50TWFwLHRoaXN9fVM2dC5wcm90b3R5cGUuaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD0hMDtjbGFzcyBNNnQgZXh0ZW5kcyBVUXR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hQaG9uZ01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyAkUXQoMTY3NzcyMTUpLHRoaXMuc3BlY3VsYXI9bmV3ICRRdCgxMTE4NDgxKSx0aGlzLnNoaW5pbmVzcz0zMCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyAkUXQoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPTAsdGhpcy5ub3JtYWxTY2FsZT1uZXcgbUp0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT0wLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5zcGVjdWxhci5jb3B5KHQuc3BlY3VsYXIpLHRoaXMuc2hpbmluZXNzPXQuc2hpbmluZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319TTZ0LnByb3RvdHlwZS5pc01lc2hQaG9uZ01hdGVyaWFsPSEwO2NsYXNzIEU2dCBleHRlbmRzIFVRdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17VE9PTjoiIn0sdGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyAkUXQoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5ncmFkaWVudE1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyAkUXQoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPTAsdGhpcy5ub3JtYWxTY2FsZT1uZXcgbUp0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuZ3JhZGllbnRNYXA9dC5ncmFkaWVudE1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319RTZ0LnByb3RvdHlwZS5pc01lc2hUb29uTWF0ZXJpYWw9ITA7Y2xhc3MgVDZ0IGV4dGVuZHMgVVF0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTm9ybWFsTWF0ZXJpYWwiLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBtSnQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX1UNnQucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsPSEwO2NsYXNzIEM2dCBleHRlbmRzIFVRdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaExhbWJlcnRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgJFF0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyAkUXQoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPTAsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX1DNnQucHJvdG90eXBlLmlzTWVzaExhbWJlcnRNYXRlcmlhbD0hMDtjbGFzcyBBNnQgZXh0ZW5kcyBVUXR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy50eXBlPSJNZXNoTWF0Y2FwTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3ICRRdCgxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBtSnQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17TUFUQ0FQOiIifSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXRjYXA9dC5tYXRjYXAsdGhpcy5tYXA9dC5tYXAsdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fUE2dC5wcm90b3R5cGUuaXNNZXNoTWF0Y2FwTWF0ZXJpYWw9ITA7Y2xhc3MgazZ0IGV4dGVuZHMgSTN0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lRGFzaGVkTWF0ZXJpYWwiLHRoaXMuc2NhbGU9MSx0aGlzLmRhc2hTaXplPTMsdGhpcy5nYXBTaXplPTEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnNjYWxlPXQuc2NhbGUsdGhpcy5kYXNoU2l6ZT10LmRhc2hTaXplLHRoaXMuZ2FwU2l6ZT10LmdhcFNpemUsdGhpc319azZ0LnByb3RvdHlwZS5pc0xpbmVEYXNoZWRNYXRlcmlhbD0hMDt2YXIgTDZ0PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLFNoYWRvd01hdGVyaWFsOng2dCxTcHJpdGVNYXRlcmlhbDpKNXQsUmF3U2hhZGVyTWF0ZXJpYWw6XzB0LFNoYWRlck1hdGVyaWFsOkcxdCxQb2ludHNNYXRlcmlhbDpHM3QsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6UzZ0LE1lc2hTdGFuZGFyZE1hdGVyaWFsOnc2dCxNZXNoUGhvbmdNYXRlcmlhbDpNNnQsTWVzaFRvb25NYXRlcmlhbDpFNnQsTWVzaE5vcm1hbE1hdGVyaWFsOlQ2dCxNZXNoTGFtYmVydE1hdGVyaWFsOkM2dCxNZXNoRGVwdGhNYXRlcmlhbDpONXQsTWVzaERpc3RhbmNlTWF0ZXJpYWw6STV0LE1lc2hCYXNpY01hdGVyaWFsOktRdCxNZXNoTWF0Y2FwTWF0ZXJpYWw6QTZ0LExpbmVEYXNoZWRNYXRlcmlhbDprNnQsTGluZUJhc2ljTWF0ZXJpYWw6STN0LE1hdGVyaWFsOlVRdH0pO2NvbnN0IFA2dD17YXJyYXlTbGljZTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIFA2dC5pc1R5cGVkQXJyYXkodCk/bmV3IHQuY29uc3RydWN0b3IodC5zdWJhcnJheShlLHZvaWQgMCE9PW4/bjp0Lmxlbmd0aCkpOnQuc2xpY2UoZSxuKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4hdHx8IW4mJnQuY29uc3RydWN0b3I9PT1lP3Q6Im51bWJlciI9PXR5cGVvZiBlLkJZVEVTX1BFUl9FTEVNRU5UP25ldyBlKHQpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpfSxpc1R5cGVkQXJyYXk6ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfSxnZXRLZXlmcmFtZU9yZGVyOmZ1bmN0aW9uKHQpe2NvbnN0IGU9dC5sZW5ndGgsbj1uZXcgQXJyYXkoZSk7Zm9yKGxldCB0PTA7dCE9PWU7Kyt0KW5bdF09dDtyZXR1cm4gbi5zb3J0KChmdW5jdGlvbiBpKGUsbil7cmV0dXJuIHRbZV0tdFtuXX0pKSxufSxzb3J0ZWRBcnJheTpmdW5jdGlvbih0LGUsbil7Y29uc3QgaT10Lmxlbmd0aCxyPW5ldyB0LmNvbnN0cnVjdG9yKGkpO2ZvcihsZXQgbz0wLGE9MDthIT09aTsrK28pe2NvbnN0IGk9bltvXSplO2ZvcihsZXQgbj0wO24hPT1lOysrbilyW2ErK109dFtpK25dfXJldHVybiByfSxmbGF0dGVuSlNPTjpmdW5jdGlvbih0LGUsbixpKXtsZXQgcj0xLG89dFswXTtmb3IoO3ZvaWQgMCE9PW8mJnZvaWQgMD09PW9baV07KW89dFtyKytdO2lmKHZvaWQgMD09PW8pcmV0dXJuO2xldCBhPW9baV07aWYodm9pZCAwIT09YSlpZihBcnJheS5pc0FycmF5KGEpKWRve2E9b1tpXSx2b2lkIDAhPT1hJiYoZS5wdXNoKG8udGltZSksbi5wdXNoLmFwcGx5KG4sYSkpLG89dFtyKytdfXdoaWxlKHZvaWQgMCE9PW8pO2Vsc2UgaWYodm9pZCAwIT09YS50b0FycmF5KWRve2E9b1tpXSx2b2lkIDAhPT1hJiYoZS5wdXNoKG8udGltZSksYS50b0FycmF5KG4sbi5sZW5ndGgpKSxvPXRbcisrXX13aGlsZSh2b2lkIDAhPT1vKTtlbHNlIGRve2E9b1tpXSx2b2lkIDAhPT1hJiYoZS5wdXNoKG8udGltZSksbi5wdXNoKGEpKSxvPXRbcisrXX13aGlsZSh2b2lkIDAhPT1vKX0sc3ViY2xpcDpmdW5jdGlvbih0LGUsbixpLHI9MzApe2NvbnN0IG89dC5jbG9uZSgpO28ubmFtZT1lO2NvbnN0IGE9W107Zm9yKGxldCB0PTA7dDxvLnRyYWNrcy5sZW5ndGg7Kyt0KXtjb25zdCBlPW8udHJhY2tzW3RdLHM9ZS5nZXRWYWx1ZVNpemUoKSxsPVtdLGM9W107Zm9yKGxldCB0PTA7dDxlLnRpbWVzLmxlbmd0aDsrK3Qpe2NvbnN0IG89ZS50aW1lc1t0XSpyO2lmKCEobzxufHxvPj1pKSl7bC5wdXNoKGUudGltZXNbdF0pO2ZvcihsZXQgbj0wO248czsrK24pYy5wdXNoKGUudmFsdWVzW3QqcytuXSl9fTAhPT1sLmxlbmd0aCYmKGUudGltZXM9UDZ0LmNvbnZlcnRBcnJheShsLGUudGltZXMuY29uc3RydWN0b3IpLGUudmFsdWVzPVA2dC5jb252ZXJ0QXJyYXkoYyxlLnZhbHVlcy5jb25zdHJ1Y3RvciksYS5wdXNoKGUpKX1vLnRyYWNrcz1hO2xldCBzPTEvMDtmb3IobGV0IHQ9MDt0PG8udHJhY2tzLmxlbmd0aDsrK3Qpcz5vLnRyYWNrc1t0XS50aW1lc1swXSYmKHM9by50cmFja3NbdF0udGltZXNbMF0pO2ZvcihsZXQgdD0wO3Q8by50cmFja3MubGVuZ3RoOysrdClvLnRyYWNrc1t0XS5zaGlmdCgtMSpzKTtyZXR1cm4gby5yZXNldER1cmF0aW9uKCksb30sbWFrZUNsaXBBZGRpdGl2ZTpmdW5jdGlvbih0LGU9MCxuPXQsaT0zMCl7aTw9MCYmKGk9MzApO2NvbnN0IHI9bi50cmFja3MubGVuZ3RoLG89ZS9pO2ZvcihsZXQgZT0wO2U8cjsrK2Upe2NvbnN0IGk9bi50cmFja3NbZV0scj1pLlZhbHVlVHlwZU5hbWU7aWYoImJvb2wiPT09cnx8InN0cmluZyI9PT1yKWNvbnRpbnVlO2NvbnN0IGE9dC50cmFja3MuZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubmFtZT09PWkubmFtZSYmdC5WYWx1ZVR5cGVOYW1lPT09cn0pKTtpZih2b2lkIDA9PT1hKWNvbnRpbnVlO2xldCBzPTA7Y29uc3QgbD1pLmdldFZhbHVlU2l6ZSgpO2kuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJihzPWwvMyk7bGV0IGM9MDtjb25zdCB1PWEuZ2V0VmFsdWVTaXplKCk7YS5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKGM9dS8zKTtjb25zdCBoPWkudGltZXMubGVuZ3RoLTE7bGV0IGQ7aWYobzw9aS50aW1lc1swXSlkPVA2dC5hcnJheVNsaWNlKGkudmFsdWVzLHMsbC1zKTtlbHNlIGlmKG8+PWkudGltZXNbaF0pe2NvbnN0IHQ9aCpsK3M7ZD1QNnQuYXJyYXlTbGljZShpLnZhbHVlcyx0LHQrbC1zKX1lbHNle2NvbnN0IHQ9aS5jcmVhdGVJbnRlcnBvbGFudCgpLGU9cyxuPWwtczt0LmV2YWx1YXRlKG8pLGQ9UDZ0LmFycmF5U2xpY2UodC5yZXN1bHRCdWZmZXIsZSxuKX0icXVhdGVybmlvbiI9PT1yJiYobmV3IFRKdCkuZnJvbUFycmF5KGQpLm5vcm1hbGl6ZSgpLmNvbmp1Z2F0ZSgpLnRvQXJyYXkoZCk7Y29uc3QgcD1hLnRpbWVzLmxlbmd0aDtmb3IobGV0IHQ9MDt0PHA7Kyt0KXtjb25zdCBlPXQqdStjO2lmKCJxdWF0ZXJuaW9uIj09PXIpVEp0Lm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KGEudmFsdWVzLGUsZCwwLGEudmFsdWVzLGUpO2Vsc2V7Y29uc3QgdD11LTIqYztmb3IobGV0IG49MDtuPHQ7KytuKWEudmFsdWVzW2Urbl0tPWRbbl19fX1yZXR1cm4gdC5ibGVuZE1vZGU9UFp0LHR9fTtjbGFzcyBONnR7Y29uc3RydWN0b3IodCxlLG4saSl7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPXZvaWQgMCE9PWk/aTpuZXcgZS5jb25zdHJ1Y3RvcihuKSx0aGlzLnNhbXBsZVZhbHVlcz1lLHRoaXMudmFsdWVTaXplPW4sdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17fX1ldmFsdWF0ZSh0KXtjb25zdCBlPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zO2xldCBuPXRoaXMuX2NhY2hlZEluZGV4LGk9ZVtuXSxyPWVbbi0xXTt0OntlOntsZXQgbztuOntpOmlmKCEodDxpKSl7Zm9yKGxldCBvPW4rMjs7KXtpZih2b2lkIDA9PT1pKXtpZih0PHIpYnJlYWsgaTtyZXR1cm4gbj1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1uLHRoaXMuYWZ0ZXJFbmRfKG4tMSx0LHIpfWlmKG49PT1vKWJyZWFrO2lmKHI9aSxpPWVbKytuXSx0PGkpYnJlYWsgZX1vPWUubGVuZ3RoO2JyZWFrIG59aWYodD49cilicmVhayB0O3tjb25zdCBhPWVbMV07dDxhJiYobj0yLHI9YSk7Zm9yKGxldCBvPW4tMjs7KXtpZih2b2lkIDA9PT1yKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxpKTtpZihuPT09bylicmVhaztpZihpPXIscj1lWy0tbi0xXSx0Pj1yKWJyZWFrIGV9bz1uLG49MH19Zm9yKDtuPG87KXtjb25zdCBpPW4rbz4+PjE7dDxlW2ldP289aTpuPWkrMX1pZihpPWVbbl0scj1lW24tMV0sdm9pZCAwPT09cilyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQsaSk7aWYodm9pZCAwPT09aSlyZXR1cm4gbj1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1uLHRoaXMuYWZ0ZXJFbmRfKG4tMSxyLHQpfXRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5pbnRlcnZhbENoYW5nZWRfKG4scixpKX1yZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZV8obixyLHQsaSl9Z2V0U2V0dGluZ3NfKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N8fHRoaXMuRGVmYXVsdFNldHRpbmdzX31jb3B5U2FtcGxlVmFsdWVfKHQpe2NvbnN0IGU9dGhpcy5yZXN1bHRCdWZmZXIsbj10aGlzLnNhbXBsZVZhbHVlcyxpPXRoaXMudmFsdWVTaXplLHI9dCppO2ZvcihsZXQgdD0wO3QhPT1pOysrdCllW3RdPW5bcit0XTtyZXR1cm4gZX1pbnRlcnBvbGF0ZV8oKXt0aHJvdyBuZXcgRXJyb3IoImNhbGwgdG8gYWJzdHJhY3QgbWV0aG9kIil9aW50ZXJ2YWxDaGFuZ2VkXygpe319TjZ0LnByb3RvdHlwZS5iZWZvcmVTdGFydF89TjZ0LnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfLE42dC5wcm90b3R5cGUuYWZ0ZXJFbmRfPU42dC5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXztjbGFzcyBJNnQgZXh0ZW5kcyBONnR7Y29uc3RydWN0b3IodCxlLG4saSl7c3VwZXIodCxlLG4saSksdGhpcy5fd2VpZ2h0UHJldj0tMCx0aGlzLl9vZmZzZXRQcmV2PS0wLHRoaXMuX3dlaWdodE5leHQ9LTAsdGhpcy5fb2Zmc2V0TmV4dD0tMCx0aGlzLkRlZmF1bHRTZXR0aW5nc189e2VuZGluZ1N0YXJ0OkNadCxlbmRpbmdFbmQ6Q1p0fX1pbnRlcnZhbENoYW5nZWRfKHQsZSxuKXtjb25zdCBpPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zO2xldCByPXQtMixvPXQrMSxhPWlbcl0scz1pW29dO2lmKHZvaWQgMD09PWEpc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nU3RhcnQpe2Nhc2UgQVp0OnI9dCxhPTIqZS1uO2JyZWFrO2Nhc2Uga1p0OnI9aS5sZW5ndGgtMixhPWUraVtyXS1pW3IrMV07YnJlYWs7ZGVmYXVsdDpyPXQsYT1ufWlmKHZvaWQgMD09PXMpc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nRW5kKXtjYXNlIEFadDpvPXQscz0yKm4tZTticmVhaztjYXNlIGtadDpvPTEscz1uK2lbMV0taVswXTticmVhaztkZWZhdWx0Om89dC0xLHM9ZX1jb25zdCBsPS41KihuLWUpLGM9dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1sLyhlLWEpLHRoaXMuX3dlaWdodE5leHQ9bC8ocy1uKSx0aGlzLl9vZmZzZXRQcmV2PXIqYyx0aGlzLl9vZmZzZXROZXh0PW8qY31pbnRlcnBvbGF0ZV8odCxlLG4saSl7Y29uc3Qgcj10aGlzLnJlc3VsdEJ1ZmZlcixvPXRoaXMuc2FtcGxlVmFsdWVzLGE9dGhpcy52YWx1ZVNpemUscz10KmEsbD1zLWEsYz10aGlzLl9vZmZzZXRQcmV2LHU9dGhpcy5fb2Zmc2V0TmV4dCxoPXRoaXMuX3dlaWdodFByZXYsZD10aGlzLl93ZWlnaHROZXh0LHA9KG4tZSkvKGktZSksZj1wKnAsbT1mKnAsZz0taCptKzIqaCpmLWgqcCxfPSgxK2gpKm0rKC0xLjUtMipoKSpmKygtLjUraCkqcCsxLHk9KC0xLWQpKm0rKDEuNStkKSpmKy41KnAsdj1kKm0tZCpmO2ZvcihsZXQgdD0wO3QhPT1hOysrdClyW3RdPWcqb1tjK3RdK18qb1tsK3RdK3kqb1tzK3RdK3Yqb1t1K3RdO3JldHVybiByfX1jbGFzcyBSNnQgZXh0ZW5kcyBONnR7Y29uc3RydWN0b3IodCxlLG4saSl7c3VwZXIodCxlLG4saSl9aW50ZXJwb2xhdGVfKHQsZSxuLGkpe2NvbnN0IHI9dGhpcy5yZXN1bHRCdWZmZXIsbz10aGlzLnNhbXBsZVZhbHVlcyxhPXRoaXMudmFsdWVTaXplLHM9dCphLGw9cy1hLGM9KG4tZSkvKGktZSksdT0xLWM7Zm9yKGxldCB0PTA7dCE9PWE7Kyt0KXJbdF09b1tsK3RdKnUrb1tzK3RdKmM7cmV0dXJuIHJ9fWNsYXNzIE82dCBleHRlbmRzIE42dHtjb25zdHJ1Y3Rvcih0LGUsbixpKXtzdXBlcih0LGUsbixpKX1pbnRlcnBvbGF0ZV8odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX1jbGFzcyB6NnR7Y29uc3RydWN0b3IodCxlLG4saSl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYodm9pZCAwPT09ZXx8MD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1QNnQuY29udmVydEFycmF5KGUsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9UDZ0LmNvbnZlcnRBcnJheShuLHRoaXMuVmFsdWVCdWZmZXJUeXBlKSx0aGlzLnNldEludGVycG9sYXRpb24oaXx8dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil9c3RhdGljIHRvSlNPTih0KXtjb25zdCBlPXQuY29uc3RydWN0b3I7bGV0IG47aWYoZS50b0pTT04hPT10aGlzLnRvSlNPTiluPWUudG9KU09OKHQpO2Vsc2V7bj17bmFtZTp0Lm5hbWUsdGltZXM6UDZ0LmNvbnZlcnRBcnJheSh0LnRpbWVzLEFycmF5KSx2YWx1ZXM6UDZ0LmNvbnZlcnRBcnJheSh0LnZhbHVlcyxBcnJheSl9O2NvbnN0IGU9dC5nZXRJbnRlcnBvbGF0aW9uKCk7ZSE9PXQuRGVmYXVsdEludGVycG9sYXRpb24mJihuLmludGVycG9sYXRpb249ZSl9cmV0dXJuIG4udHlwZT10LlZhbHVlVHlwZU5hbWUsbn1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSh0KXtyZXR1cm4gbmV3IE82dCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgUjZ0KHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGgodCl7cmV0dXJuIG5ldyBJNnQodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfXNldEludGVycG9sYXRpb24odCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgTVp0OmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTticmVhaztjYXNlIEVadDplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyO2JyZWFrO2Nhc2UgVFp0OmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09ZSl7Y29uc3QgZT0idW5zdXBwb3J0ZWQgaW50ZXJwb2xhdGlvbiBmb3IgIit0aGlzLlZhbHVlVHlwZU5hbWUrIiBrZXlmcmFtZSB0cmFjayBuYW1lZCAiK3RoaXMubmFtZTtpZih2b2lkIDA9PT10aGlzLmNyZWF0ZUludGVycG9sYW50KXtpZih0PT09dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil0aHJvdyBuZXcgRXJyb3IoZSk7dGhpcy5zZXRJbnRlcnBvbGF0aW9uKHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLktleWZyYW1lVHJhY2s6IixlKSx0aGlzfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYW50PWUsdGhpc31nZXRJbnRlcnBvbGF0aW9uKCl7c3dpdGNoKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQpe2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTpyZXR1cm4gTVp0O2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6cmV0dXJuIEVadDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnJldHVybiBUWnR9fWdldFZhbHVlU2l6ZSgpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvdGhpcy50aW1lcy5sZW5ndGh9c2hpZnQodCl7aWYoMCE9PXQpe2NvbnN0IGU9dGhpcy50aW1lcztmb3IobGV0IG49MCxpPWUubGVuZ3RoO24hPT1pOysrbillW25dKz10fXJldHVybiB0aGlzfXNjYWxlKHQpe2lmKDEhPT10KXtjb25zdCBlPXRoaXMudGltZXM7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuIT09aTsrK24pZVtuXSo9dH1yZXR1cm4gdGhpc310cmltKHQsZSl7Y29uc3Qgbj10aGlzLnRpbWVzLGk9bi5sZW5ndGg7bGV0IHI9MCxvPWktMTtmb3IoO3IhPT1pJiZuW3JdPHQ7KSsrcjtmb3IoOy0xIT09byYmbltvXT5lOyktLW87aWYoKytvLDAhPT1yfHxvIT09aSl7cj49byYmKG89TWF0aC5tYXgobywxKSxyPW8tMSk7Y29uc3QgdD10aGlzLmdldFZhbHVlU2l6ZSgpO3RoaXMudGltZXM9UDZ0LmFycmF5U2xpY2UobixyLG8pLHRoaXMudmFsdWVzPVA2dC5hcnJheVNsaWNlKHRoaXMudmFsdWVzLHIqdCxvKnQpfXJldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITA7Y29uc3QgZT10aGlzLmdldFZhbHVlU2l6ZSgpO2UtTWF0aC5mbG9vcihlKSE9MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IEludmFsaWQgdmFsdWUgc2l6ZSBpbiB0cmFjay4iLHRoaXMpLHQ9ITEpO2NvbnN0IG49dGhpcy50aW1lcyxpPXRoaXMudmFsdWVzLHI9bi5sZW5ndGg7MD09PXImJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBvPW51bGw7Zm9yKGxldCBlPTA7ZSE9PXI7ZSsrKXtjb25zdCBpPW5bZV07aWYoIm51bWJlciI9PXR5cGVvZiBpJiZpc05hTihpKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLGUsaSksdD0hMTticmVha31pZihudWxsIT09byYmbz5pKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4iLHRoaXMsZSxpLG8pLHQ9ITE7YnJlYWt9bz1pfWlmKHZvaWQgMCE9PWkmJlA2dC5pc1R5cGVkQXJyYXkoaSkpZm9yKGxldCBlPTAsbj1pLmxlbmd0aDtlIT09bjsrK2Upe2NvbnN0IG49aVtlXTtpZihpc05hTihuKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxlLG4pLHQ9ITE7YnJlYWt9fXJldHVybiB0fW9wdGltaXplKCl7Y29uc3QgdD1QNnQuYXJyYXlTbGljZSh0aGlzLnRpbWVzKSxlPVA2dC5hcnJheVNsaWNlKHRoaXMudmFsdWVzKSxuPXRoaXMuZ2V0VmFsdWVTaXplKCksaT10aGlzLmdldEludGVycG9sYXRpb24oKT09PVRadCxyPXQubGVuZ3RoLTE7bGV0IG89MTtmb3IobGV0IGE9MTthPHI7KythKXtsZXQgcj0hMTtjb25zdCBzPXRbYV07aWYocyE9PXRbYSsxXSYmKDEhPT1hfHxzIT09dFswXSkpaWYoaSlyPSEwO2Vsc2V7Y29uc3QgdD1hKm4saT10LW4sbz10K247Zm9yKGxldCBhPTA7YSE9PW47KythKXtjb25zdCBuPWVbdCthXTtpZihuIT09ZVtpK2FdfHxuIT09ZVtvK2FdKXtyPSEwO2JyZWFrfX19aWYocil7aWYoYSE9PW8pe3Rbb109dFthXTtjb25zdCBpPWEqbixyPW8qbjtmb3IobGV0IHQ9MDt0IT09bjsrK3QpZVtyK3RdPWVbaSt0XX0rK299fWlmKHI+MCl7dFtvXT10W3JdO2ZvcihsZXQgdD1yKm4saT1vKm4sYT0wO2EhPT1uOysrYSllW2krYV09ZVt0K2FdOysrb31yZXR1cm4gbyE9PXQubGVuZ3RoPyh0aGlzLnRpbWVzPVA2dC5hcnJheVNsaWNlKHQsMCxvKSx0aGlzLnZhbHVlcz1QNnQuYXJyYXlTbGljZShlLDAsbypuKSk6KHRoaXMudGltZXM9dCx0aGlzLnZhbHVlcz1lKSx0aGlzfWNsb25lKCl7Y29uc3QgdD1QNnQuYXJyYXlTbGljZSh0aGlzLnRpbWVzLDApLGU9UDZ0LmFycmF5U2xpY2UodGhpcy52YWx1ZXMsMCksbj1uZXcoMCx0aGlzLmNvbnN0cnVjdG9yKSh0aGlzLm5hbWUsdCxlKTtyZXR1cm4gbi5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50LG59fXo2dC5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5LHo2dC5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUZsb2F0MzJBcnJheSx6NnQucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPUVadDtjbGFzcyBENnQgZXh0ZW5kcyB6NnR7fUQ2dC5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0iYm9vbCIsRDZ0LnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXksRDZ0LnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1NWnQsRDZ0LnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI9dm9pZCAwLEQ2dC5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDtjbGFzcyBCNnQgZXh0ZW5kcyB6NnR7fUI2dC5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0iY29sb3IiO2NsYXNzIEg2dCBleHRlbmRzIHo2dHt9SDZ0LnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJudW1iZXIiO2NsYXNzIEY2dCBleHRlbmRzIE42dHtjb25zdHJ1Y3Rvcih0LGUsbixpKXtzdXBlcih0LGUsbixpKX1pbnRlcnBvbGF0ZV8odCxlLG4saSl7Y29uc3Qgcj10aGlzLnJlc3VsdEJ1ZmZlcixvPXRoaXMuc2FtcGxlVmFsdWVzLGE9dGhpcy52YWx1ZVNpemUscz0obi1lKS8oaS1lKTtsZXQgbD10KmE7Zm9yKGxldCB0PWwrYTtsIT09dDtsKz00KVRKdC5zbGVycEZsYXQociwwLG8sbC1hLG8sbCxzKTtyZXR1cm4gcn19Y2xhc3MgVjZ0IGV4dGVuZHMgejZ0e0ludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcih0KXtyZXR1cm4gbmV3IEY2dCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9fVY2dC5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0icXVhdGVybmlvbiIsVjZ0LnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1FWnQsVjZ0LnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO2NsYXNzIFU2dCBleHRlbmRzIHo2dHt9VTZ0LnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJzdHJpbmciLFU2dC5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5LFU2dC5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249TVp0LFU2dC5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMCxVNnQucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7Y2xhc3MgajZ0IGV4dGVuZHMgejZ0e31qNnQucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InZlY3RvciI7Y2xhc3MgRzZ0e2NvbnN0cnVjdG9yKHQsZT0tMSxuLGk9MjUwMCl7dGhpcy5uYW1lPXQsdGhpcy50cmFja3M9bix0aGlzLmR1cmF0aW9uPWUsdGhpcy5ibGVuZE1vZGU9aSx0aGlzLnV1aWQ9WFp0KCksdGhpcy5kdXJhdGlvbjwwJiZ0aGlzLnJlc2V0RHVyYXRpb24oKX1zdGF0aWMgcGFyc2UodCl7Y29uc3QgZT1bXSxuPXQudHJhY2tzLGk9MS8odC5mcHN8fDEpO2ZvcihsZXQgdD0wLHI9bi5sZW5ndGg7dCE9PXI7Kyt0KWUucHVzaChXNnQoblt0XSkuc2NhbGUoaSkpO2NvbnN0IHI9bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24sZSx0LmJsZW5kTW9kZSk7cmV0dXJuIHIudXVpZD10LnV1aWQscn1zdGF0aWMgdG9KU09OKHQpe2NvbnN0IGU9W10sbj10LnRyYWNrcyxpPXtuYW1lOnQubmFtZSxkdXJhdGlvbjp0LmR1cmF0aW9uLHRyYWNrczplLHV1aWQ6dC51dWlkLGJsZW5kTW9kZTp0LmJsZW5kTW9kZX07Zm9yKGxldCB0PTAsaT1uLmxlbmd0aDt0IT09aTsrK3QpZS5wdXNoKHo2dC50b0pTT04oblt0XSkpO3JldHVybiBpfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LGUsbixpKXtjb25zdCByPWUubGVuZ3RoLG89W107Zm9yKGxldCB0PTA7dDxyO3QrKyl7bGV0IGE9W10scz1bXTthLnB1c2goKHQrci0xKSVyLHQsKHQrMSklcikscy5wdXNoKDAsMSwwKTtjb25zdCBsPVA2dC5nZXRLZXlmcmFtZU9yZGVyKGEpO2E9UDZ0LnNvcnRlZEFycmF5KGEsMSxsKSxzPVA2dC5zb3J0ZWRBcnJheShzLDEsbCksaXx8MCE9PWFbMF18fChhLnB1c2gocikscy5wdXNoKHNbMF0pKSxvLnB1c2gobmV3IEg2dCgiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1siK2VbdF0ubmFtZSsiXSIsYSxzKS5zY2FsZSgxL24pKX1yZXR1cm4gbmV3IHRoaXModCwtMSxvKX1zdGF0aWMgZmluZEJ5TmFtZSh0LGUpe2xldCBuPXQ7aWYoIUFycmF5LmlzQXJyYXkodCkpe2NvbnN0IGU9dDtuPWUuZ2VvbWV0cnkmJmUuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8ZS5hbmltYXRpb25zfWZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKWlmKG5bdF0ubmFtZT09PWUpcmV0dXJuIG5bdF07cmV0dXJuIG51bGx9c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKHQsZSxuKXtjb25zdCBpPXt9LHI9L14oW1x3LV0qPykoW1xkXSspJC87Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXRbZV0sbz1uLm5hbWUubWF0Y2gocik7aWYobyYmby5sZW5ndGg+MSl7Y29uc3QgdD1vWzFdO2xldCBlPWlbdF07ZXx8KGlbdF09ZT1bXSksZS5wdXNoKG4pfX1jb25zdCBvPVtdO2Zvcihjb25zdCB0IGluIGkpby5wdXNoKHRoaXMuQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UodCxpW3RdLGUsbikpO3JldHVybiBvfXN0YXRpYyBwYXJzZUFuaW1hdGlvbih0LGUpe2lmKCF0KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25DbGlwOiBObyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhLiIpLG51bGw7Y29uc3Qgbj1mdW5jdGlvbih0LGUsbixpLHIpe2lmKDAhPT1uLmxlbmd0aCl7Y29uc3Qgbz1bXSxhPVtdO1A2dC5mbGF0dGVuSlNPTihuLG8sYSxpKSwwIT09by5sZW5ndGgmJnIucHVzaChuZXcgdChlLG8sYSkpfX0saT1bXSxyPXQubmFtZXx8ImRlZmF1bHQiLG89dC5mcHN8fDMwLGE9dC5ibGVuZE1vZGU7bGV0IHM9dC5sZW5ndGh8fC0xO2NvbnN0IGw9dC5oaWVyYXJjaHl8fFtdO2ZvcihsZXQgdD0wO3Q8bC5sZW5ndGg7dCsrKXtjb25zdCByPWxbdF0ua2V5cztpZihyJiYwIT09ci5sZW5ndGgpaWYoclswXS5tb3JwaFRhcmdldHMpe2NvbnN0IHQ9e307bGV0IGU7Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKylpZihyW2VdLm1vcnBoVGFyZ2V0cylmb3IobGV0IG49MDtuPHJbZV0ubW9ycGhUYXJnZXRzLmxlbmd0aDtuKyspdFtyW2VdLm1vcnBoVGFyZ2V0c1tuXV09LTE7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3QgdD1bXSxvPVtdO2ZvcihsZXQgaT0wO2khPT1yW2VdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7KytpKXtjb25zdCBpPXJbZV07dC5wdXNoKGkudGltZSksby5wdXNoKGkubW9ycGhUYXJnZXQ9PT1uPzE6MCl9aS5wdXNoKG5ldyBINnQoIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK24rIl0iLHQsbykpfXM9dC5sZW5ndGgqKG98fDEpfWVsc2V7Y29uc3Qgbz0iLmJvbmVzWyIrZVt0XS5uYW1lKyJdIjtuKGo2dCxvKyIucG9zaXRpb24iLHIsInBvcyIsaSksbihWNnQsbysiLnF1YXRlcm5pb24iLHIsInJvdCIsaSksbihqNnQsbysiLnNjYWxlIixyLCJzY2wiLGkpfX1yZXR1cm4gMD09PWkubGVuZ3RoP251bGw6bmV3IHRoaXMocixzLGksYSl9cmVzZXREdXJhdGlvbigpe2xldCB0PTA7Zm9yKGxldCBlPTAsbj10aGlzLnRyYWNrcy5sZW5ndGg7ZSE9PW47KytlKXtjb25zdCBuPXRoaXMudHJhY2tzW2VdO3Q9TWF0aC5tYXgodCxuLnRpbWVzW24udGltZXMubGVuZ3RoLTFdKX1yZXR1cm4gdGhpcy5kdXJhdGlvbj10LHRoaXN9dHJpbSgpe2ZvcihsZXQgdD0wO3Q8dGhpcy50cmFja3MubGVuZ3RoO3QrKyl0aGlzLnRyYWNrc1t0XS50cmltKDAsdGhpcy5kdXJhdGlvbik7cmV0dXJuIHRoaXN9dmFsaWRhdGUoKXtsZXQgdD0hMDtmb3IobGV0IGU9MDtlPHRoaXMudHJhY2tzLmxlbmd0aDtlKyspdD10JiZ0aGlzLnRyYWNrc1tlXS52YWxpZGF0ZSgpO3JldHVybiB0fW9wdGltaXplKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLm9wdGltaXplKCk7cmV0dXJuIHRoaXN9Y2xvbmUoKXtjb25zdCB0PVtdO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0LnB1c2godGhpcy50cmFja3NbZV0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19ZnVuY3Rpb24gVzZ0KHQpe2lmKHZvaWQgMD09PXQudHlwZSl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIHR5cGUgdW5kZWZpbmVkLCBjYW4gbm90IHBhcnNlIik7Y29uc3QgZT0oZnVuY3Rpb24gbih0KXtzd2l0Y2godC50b0xvd2VyQ2FzZSgpKXtjYXNlInNjYWxhciI6Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQiOmNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOnJldHVybiBINnQ7Y2FzZSJ2ZWN0b3IiOmNhc2UidmVjdG9yMiI6Y2FzZSJ2ZWN0b3IzIjpjYXNlInZlY3RvcjQiOnJldHVybiBqNnQ7Y2FzZSJjb2xvciI6cmV0dXJuIEI2dDtjYXNlInF1YXRlcm5pb24iOnJldHVybiBWNnQ7Y2FzZSJib29sIjpjYXNlImJvb2xlYW4iOnJldHVybiBENnQ7Y2FzZSJzdHJpbmciOnJldHVybiBVNnR9dGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBVbnN1cHBvcnRlZCB0eXBlTmFtZTogIit0KX0pKHQudHlwZSk7aWYodm9pZCAwPT09dC50aW1lcyl7Y29uc3QgZT1bXSxuPVtdO1A2dC5mbGF0dGVuSlNPTih0LmtleXMsZSxuLCJ2YWx1ZSIpLHQudGltZXM9ZSx0LnZhbHVlcz1ufXJldHVybiB2b2lkIDAhPT1lLnBhcnNlP2UucGFyc2UodCk6bmV3IGUodC5uYW1lLHQudGltZXMsdC52YWx1ZXMsdC5pbnRlcnBvbGF0aW9uKX1jb25zdCBxNnQ9e2VuYWJsZWQ6ITEsZmlsZXM6e30sYWRkOmZ1bmN0aW9uKHQsZSl7ITEhPT10aGlzLmVuYWJsZWQmJih0aGlzLmZpbGVzW3RdPWUpfSxnZXQ6ZnVuY3Rpb24odCl7aWYoITEhPT10aGlzLmVuYWJsZWQpcmV0dXJuIHRoaXMuZmlsZXNbdF19LHJlbW92ZTpmdW5jdGlvbih0KXtkZWxldGUgdGhpcy5maWxlc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmZpbGVzPXt9fX07Y2xhc3MgWTZ0e2NvbnN0cnVjdG9yKHQsZSxuKXtjb25zdCBpPXRoaXM7bGV0IHIsbz0hMSxhPTAscz0wO2NvbnN0IGw9W107dGhpcy5vblN0YXJ0PXZvaWQgMCx0aGlzLm9uTG9hZD10LHRoaXMub25Qcm9ncmVzcz1lLHRoaXMub25FcnJvcj1uLHRoaXMuaXRlbVN0YXJ0PWZ1bmN0aW9uKHQpe3MrKywhMT09PW8mJnZvaWQgMCE9PWkub25TdGFydCYmaS5vblN0YXJ0KHQsYSxzKSxvPSEwfSx0aGlzLml0ZW1FbmQ9ZnVuY3Rpb24odCl7YSsrLHZvaWQgMCE9PWkub25Qcm9ncmVzcyYmaS5vblByb2dyZXNzKHQsYSxzKSxhPT09cyYmKG89ITEsdm9pZCAwIT09aS5vbkxvYWQmJmkub25Mb2FkKCkpfSx0aGlzLml0ZW1FcnJvcj1mdW5jdGlvbih0KXt2b2lkIDAhPT1pLm9uRXJyb3ImJmkub25FcnJvcih0KX0sdGhpcy5yZXNvbHZlVVJMPWZ1bmN0aW9uKHQpe3JldHVybiByP3IodCk6dH0sdGhpcy5zZXRVUkxNb2RpZmllcj1mdW5jdGlvbih0KXtyZXR1cm4gcj10LHRoaXN9LHRoaXMuYWRkSGFuZGxlcj1mdW5jdGlvbih0LGUpe3JldHVybiBsLnB1c2godCxlKSx0aGlzfSx0aGlzLnJlbW92ZUhhbmRsZXI9ZnVuY3Rpb24odCl7Y29uc3QgZT1sLmluZGV4T2YodCk7cmV0dXJuLTEhPT1lJiZsLnNwbGljZShlLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih0KXtmb3IobGV0IGU9MCxuPWwubGVuZ3RoO2U8bjtlKz0yKXtjb25zdCBuPWxbZV0saT1sW2UrMV07aWYobi5nbG9iYWwmJihuLmxhc3RJbmRleD0wKSxuLnRlc3QodCkpcmV0dXJuIGl9cmV0dXJuIG51bGx9fX1jb25zdCBYNnQ9bmV3IFk2dDtjbGFzcyAkNnR7Y29uc3RydWN0b3IodCl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PXQ/dDpYNnQsdGhpcy5jcm9zc09yaWdpbj0iYW5vbnltb3VzIix0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnBhdGg9IiIsdGhpcy5yZXNvdXJjZVBhdGg9IiIsdGhpcy5yZXF1ZXN0SGVhZGVyPXt9fWxvYWQoKXt9bG9hZEFzeW5jKHQsZSl7Y29uc3Qgbj10aGlzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oaSxyKXtuLmxvYWQodCxpLGUscil9KSl9cGFyc2UoKXt9c2V0Q3Jvc3NPcmlnaW4odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfXNldFdpdGhDcmVkZW50aWFscyh0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfXNldFBhdGgodCl7cmV0dXJuIHRoaXMucGF0aD10LHRoaXN9c2V0UmVzb3VyY2VQYXRoKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9c2V0UmVxdWVzdEhlYWRlcih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319Y29uc3QgSzZ0PXt9O2NsYXNzIFo2dCBleHRlbmRzICQ2dHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxuLGkpe3ZvaWQgMD09PXQmJih0PSIiKSx2b2lkIDAhPT10aGlzLnBhdGgmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2NvbnN0IHI9dGhpcyxvPXE2dC5nZXQodCk7aWYodm9pZCAwIT09bylyZXR1cm4gci5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2UmJmUobyksci5tYW5hZ2VyLml0ZW1FbmQodCl9KSwwKSxvO2lmKHZvaWQgMCE9PUs2dFt0XSlyZXR1cm4gdm9pZCBLNnRbdF0ucHVzaCh7b25Mb2FkOmUsb25Qcm9ncmVzczpuLG9uRXJyb3I6aX0pO2NvbnN0IGE9dC5tYXRjaCgvXmRhdGE6KC4qPykoO2Jhc2U2NCk/LCguKikkLyk7bGV0IHM7aWYoYSl7Y29uc3Qgbj1hWzFdLG89ISFhWzJdO2xldCBzPWFbM107cz1kZWNvZGVVUklDb21wb25lbnQocyksbyYmKHM9YXRvYihzKSk7dHJ5e2xldCBpO2NvbnN0IG89KHRoaXMucmVzcG9uc2VUeXBlfHwiIikudG9Mb3dlckNhc2UoKTtzd2l0Y2gobyl7Y2FzZSJhcnJheWJ1ZmZlciI6Y2FzZSJibG9iIjpjb25zdCB0PW5ldyBVaW50OEFycmF5KHMubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHMubGVuZ3RoO2UrKyl0W2VdPXMuY2hhckNvZGVBdChlKTtpPSJibG9iIj09PW8/bmV3IEJsb2IoW3QuYnVmZmVyXSx7dHlwZTpufSk6dC5idWZmZXI7YnJlYWs7Y2FzZSJkb2N1bWVudCI6Y29uc3QgZT1uZXcgRE9NUGFyc2VyO2k9ZS5wYXJzZUZyb21TdHJpbmcocyxuKTticmVhaztjYXNlImpzb24iOmk9SlNPTi5wYXJzZShzKTticmVhaztkZWZhdWx0Omk9c31zZXRUaW1lb3V0KChmdW5jdGlvbigpe2UmJmUoaSksci5tYW5hZ2VyLml0ZW1FbmQodCl9KSwwKX1jYXRjaChlKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe2kmJmkoZSksci5tYW5hZ2VyLml0ZW1FcnJvcih0KSxyLm1hbmFnZXIuaXRlbUVuZCh0KX0pLDApfX1lbHNle0s2dFt0XT1bXSxLNnRbdF0ucHVzaCh7b25Mb2FkOmUsb25Qcm9ncmVzczpuLG9uRXJyb3I6aX0pLHM9bmV3IFhNTEh0dHBSZXF1ZXN0LHMub3BlbigiR0VUIix0LCEwKSxzLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLChmdW5jdGlvbihlKXtjb25zdCBuPXRoaXMucmVzcG9uc2UsaT1LNnRbdF07aWYoZGVsZXRlIEs2dFt0XSwyMDA9PT10aGlzLnN0YXR1c3x8MD09PXRoaXMuc3RhdHVzKXswPT09dGhpcy5zdGF0dXMmJmNvbnNvbGUud2FybigiVEhSRUUuRmlsZUxvYWRlcjogSFRUUCBTdGF0dXMgMCByZWNlaXZlZC4iKSxxNnQuYWRkKHQsbik7Zm9yKGxldCB0PTAsZT1pLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPWlbdF07ZS5vbkxvYWQmJmUub25Mb2FkKG4pfXIubWFuYWdlci5pdGVtRW5kKHQpfWVsc2V7Zm9yKGxldCB0PTAsbj1pLmxlbmd0aDt0PG47dCsrKXtjb25zdCBuPWlbdF07bi5vbkVycm9yJiZuLm9uRXJyb3IoZSl9ci5tYW5hZ2VyLml0ZW1FcnJvcih0KSxyLm1hbmFnZXIuaXRlbUVuZCh0KX19KSwhMSkscy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsKGZ1bmN0aW9uKGUpe2NvbnN0IG49SzZ0W3RdO2ZvcihsZXQgdD0wLGk9bi5sZW5ndGg7dDxpO3QrKyl7Y29uc3QgaT1uW3RdO2kub25Qcm9ncmVzcyYmaS5vblByb2dyZXNzKGUpfX0pLCExKSxzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwoZnVuY3Rpb24oZSl7Y29uc3Qgbj1LNnRbdF07ZGVsZXRlIEs2dFt0XTtmb3IobGV0IHQ9MCxpPW4ubGVuZ3RoO3Q8aTt0Kyspe2NvbnN0IGk9blt0XTtpLm9uRXJyb3ImJmkub25FcnJvcihlKX1yLm1hbmFnZXIuaXRlbUVycm9yKHQpLHIubWFuYWdlci5pdGVtRW5kKHQpfSksITEpLHMuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLChmdW5jdGlvbihlKXtjb25zdCBuPUs2dFt0XTtkZWxldGUgSzZ0W3RdO2ZvcihsZXQgdD0wLGk9bi5sZW5ndGg7dDxpO3QrKyl7Y29uc3QgaT1uW3RdO2kub25FcnJvciYmaS5vbkVycm9yKGUpfXIubWFuYWdlci5pdGVtRXJyb3IodCksci5tYW5hZ2VyLml0ZW1FbmQodCl9KSwhMSksdm9pZCAwIT09dGhpcy5yZXNwb25zZVR5cGUmJihzLnJlc3BvbnNlVHlwZT10aGlzLnJlc3BvbnNlVHlwZSksdm9pZCAwIT09dGhpcy53aXRoQ3JlZGVudGlhbHMmJihzLndpdGhDcmVkZW50aWFscz10aGlzLndpdGhDcmVkZW50aWFscykscy5vdmVycmlkZU1pbWVUeXBlJiZzLm92ZXJyaWRlTWltZVR5cGUodm9pZCAwIT09dGhpcy5taW1lVHlwZT90aGlzLm1pbWVUeXBlOiJ0ZXh0L3BsYWluIik7Zm9yKGNvbnN0IHQgaW4gdGhpcy5yZXF1ZXN0SGVhZGVyKXMuc2V0UmVxdWVzdEhlYWRlcih0LHRoaXMucmVxdWVzdEhlYWRlclt0XSk7cy5zZW5kKG51bGwpfXJldHVybiByLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHN9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX1jbGFzcyBKNnQgZXh0ZW5kcyAkNnR7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsbixpKXt2b2lkIDAhPT10aGlzLnBhdGgmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2NvbnN0IHI9dGhpcyxvPXE2dC5nZXQodCk7aWYodm9pZCAwIT09bylyZXR1cm4gci5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2UmJmUobyksci5tYW5hZ2VyLml0ZW1FbmQodCl9KSwwKSxvO2NvbnN0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiaW1nIik7ZnVuY3Rpb24gcygpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIscywhMSksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsbCwhMSkscTZ0LmFkZCh0LHRoaXMpLGUmJmUodGhpcyksci5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gbChlKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHMsITEpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGwsITEpLGkmJmkoZSksci5tYW5hZ2VyLml0ZW1FcnJvcih0KSxyLm1hbmFnZXIuaXRlbUVuZCh0KX1yZXR1cm4gYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixzLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixsLCExKSwiZGF0YToiIT09dC5zdWJzdHIoMCw1KSYmdm9pZCAwIT09dGhpcy5jcm9zc09yaWdpbiYmKGEuY3Jvc3NPcmlnaW49dGhpcy5jcm9zc09yaWdpbiksci5tYW5hZ2VyLml0ZW1TdGFydCh0KSxhLnNyYz10LGF9fWNsYXNzIFE2dCBleHRlbmRzICQ2dHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxuLGkpe2NvbnN0IHI9bmV3ICQxdCxvPW5ldyBKNnQodGhpcy5tYW5hZ2VyKTtvLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLG8uc2V0UGF0aCh0aGlzLnBhdGgpO2xldCBhPTA7ZnVuY3Rpb24gcyhuKXtvLmxvYWQodFtuXSwoZnVuY3Rpb24odCl7ci5pbWFnZXNbbl09dCxhKyssNj09PWEmJihyLm5lZWRzVXBkYXRlPSEwLGUmJmUocikpfSksdm9pZCAwLGkpfWZvcihsZXQgZT0wO2U8dC5sZW5ndGg7KytlKXMoZSk7cmV0dXJuIHJ9fWNsYXNzIHQ5dCBleHRlbmRzICQ2dHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxuLGkpe2NvbnN0IHI9dGhpcyxvPW5ldyBNM3QsYT1uZXcgWjZ0KHRoaXMubWFuYWdlcik7cmV0dXJuIGEuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLGEuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGEuc2V0UGF0aCh0aGlzLnBhdGgpLGEuc2V0V2l0aENyZWRlbnRpYWxzKHIud2l0aENyZWRlbnRpYWxzKSxhLmxvYWQodCwoZnVuY3Rpb24odCl7Y29uc3Qgbj1yLnBhcnNlKHQpO24mJih2b2lkIDAhPT1uLmltYWdlP28uaW1hZ2U9bi5pbWFnZTp2b2lkIDAhPT1uLmRhdGEmJihvLmltYWdlLndpZHRoPW4ud2lkdGgsby5pbWFnZS5oZWlnaHQ9bi5oZWlnaHQsby5pbWFnZS5kYXRhPW4uZGF0YSksby53cmFwUz12b2lkIDAhPT1uLndyYXBTP24ud3JhcFM6S0t0LG8ud3JhcFQ9dm9pZCAwIT09bi53cmFwVD9uLndyYXBUOktLdCxvLm1hZ0ZpbHRlcj12b2lkIDAhPT1uLm1hZ0ZpbHRlcj9uLm1hZ0ZpbHRlcjplWnQsby5taW5GaWx0ZXI9dm9pZCAwIT09bi5taW5GaWx0ZXI/bi5taW5GaWx0ZXI6ZVp0LG8uYW5pc290cm9weT12b2lkIDAhPT1uLmFuaXNvdHJvcHk/bi5hbmlzb3Ryb3B5OjEsdm9pZCAwIT09bi5lbmNvZGluZyYmKG8uZW5jb2Rpbmc9bi5lbmNvZGluZyksdm9pZCAwIT09bi5mbGlwWSYmKG8uZmxpcFk9bi5mbGlwWSksdm9pZCAwIT09bi5mb3JtYXQmJihvLmZvcm1hdD1uLmZvcm1hdCksdm9pZCAwIT09bi50eXBlJiYoby50eXBlPW4udHlwZSksdm9pZCAwIT09bi5taXBtYXBzJiYoby5taXBtYXBzPW4ubWlwbWFwcyxvLm1pbkZpbHRlcj1pWnQpLDE9PT1uLm1pcG1hcENvdW50JiYoby5taW5GaWx0ZXI9ZVp0KSx2b2lkIDAhPT1uLmdlbmVyYXRlTWlwbWFwcyYmKG8uZ2VuZXJhdGVNaXBtYXBzPW4uZ2VuZXJhdGVNaXBtYXBzKSxvLm5lZWRzVXBkYXRlPSEwLGUmJmUobyxuKSl9KSxuLGkpLG99fWNsYXNzIGU5dCBleHRlbmRzICQ2dHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxuLGkpe2NvbnN0IHI9bmV3IGJKdCxvPW5ldyBKNnQodGhpcy5tYW5hZ2VyKTtyZXR1cm4gby5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKSxvLnNldFBhdGgodGhpcy5wYXRoKSxvLmxvYWQodCwoZnVuY3Rpb24obil7ci5pbWFnZT1uO2NvbnN0IGk9dC5zZWFyY2goL1wuanBlP2coJHxcPykvaSk+MHx8MD09PXQuc2VhcmNoKC9eZGF0YVw6aW1hZ2VcL2pwZWcvKTtyLmZvcm1hdD1pP3VadDpoWnQsci5uZWVkc1VwZGF0ZT0hMCx2b2lkIDAhPT1lJiZlKHIpfSksbixpKSxyfX1jbGFzcyBuOXQgZXh0ZW5kcyBoNHR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQ3VydmVQYXRoIix0aGlzLmN1cnZlcz1bXSx0aGlzLmF1dG9DbG9zZT0hMX1hZGQodCl7dGhpcy5jdXJ2ZXMucHVzaCh0KX1jbG9zZVBhdGgoKXtjb25zdCB0PXRoaXMuY3VydmVzWzBdLmdldFBvaW50KDApLGU9dGhpcy5jdXJ2ZXNbdGhpcy5jdXJ2ZXMubGVuZ3RoLTFdLmdldFBvaW50KDEpO3QuZXF1YWxzKGUpfHx0aGlzLmN1cnZlcy5wdXNoKG5ldyBFNHQoZSx0KSl9Z2V0UG9pbnQodCl7Y29uc3QgZT10KnRoaXMuZ2V0TGVuZ3RoKCksbj10aGlzLmdldEN1cnZlTGVuZ3RocygpO2xldCBpPTA7Zm9yKDtpPG4ubGVuZ3RoOyl7aWYobltpXT49ZSl7Y29uc3QgdD1uW2ldLWUscj10aGlzLmN1cnZlc1tpXSxvPXIuZ2V0TGVuZ3RoKCk7cmV0dXJuIHIuZ2V0UG9pbnRBdCgwPT09bz8wOjEtdC9vKX1pKyt9cmV0dXJuIG51bGx9Z2V0TGVuZ3RoKCl7Y29uc3QgdD10aGlzLmdldEN1cnZlTGVuZ3RocygpO3JldHVybiB0W3QubGVuZ3RoLTFdfXVwZGF0ZUFyY0xlbmd0aHMoKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuY2FjaGVMZW5ndGhzPW51bGwsdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKX1nZXRDdXJ2ZUxlbmd0aHMoKXtpZih0aGlzLmNhY2hlTGVuZ3RocyYmdGhpcy5jYWNoZUxlbmd0aHMubGVuZ3RoPT09dGhpcy5jdXJ2ZXMubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlTGVuZ3Rocztjb25zdCB0PVtdO2xldCBlPTA7Zm9yKGxldCBuPTAsaT10aGlzLmN1cnZlcy5sZW5ndGg7bjxpO24rKyllKz10aGlzLmN1cnZlc1tuXS5nZXRMZW5ndGgoKSx0LnB1c2goZSk7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPXQsdH1nZXRTcGFjZWRQb2ludHModD00MCl7Y29uc3QgZT1bXTtmb3IobGV0IG49MDtuPD10O24rKyllLnB1c2godGhpcy5nZXRQb2ludChuL3QpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUucHVzaChlWzBdKSxlfWdldFBvaW50cyh0PTEyKXtjb25zdCBlPVtdO2xldCBuO2ZvcihsZXQgaT0wLHI9dGhpcy5jdXJ2ZXM7aTxyLmxlbmd0aDtpKyspe2NvbnN0IG89cltpXSxhPW8uZ2V0UG9pbnRzKG8mJm8uaXNFbGxpcHNlQ3VydmU/Mip0Om8mJihvLmlzTGluZUN1cnZlfHxvLmlzTGluZUN1cnZlMyk/MTpvJiZvLmlzU3BsaW5lQ3VydmU/dCpvLnBvaW50cy5sZW5ndGg6dCk7Zm9yKGxldCB0PTA7dDxhLmxlbmd0aDt0Kyspe2NvbnN0IGk9YVt0XTtuJiZuLmVxdWFscyhpKXx8KGUucHVzaChpKSxuPWkpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUubGVuZ3RoPjEmJiFlW2UubGVuZ3RoLTFdLmVxdWFscyhlWzBdKSYmZS5wdXNoKGVbMF0pLGV9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLG49dC5jdXJ2ZXMubGVuZ3RoO2U8bjtlKyspdGhpcy5jdXJ2ZXMucHVzaCh0LmN1cnZlc1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtjb25zdCB0PXN1cGVyLnRvSlNPTigpO3QuYXV0b0Nsb3NlPXRoaXMuYXV0b0Nsb3NlLHQuY3VydmVzPVtdO2ZvcihsZXQgZT0wLG49dGhpcy5jdXJ2ZXMubGVuZ3RoO2U8bjtlKyspdC5jdXJ2ZXMucHVzaCh0aGlzLmN1cnZlc1tlXS50b0pTT04oKSk7cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpcy5jdXJ2ZXM9W107Zm9yKGxldCBlPTAsbj10LmN1cnZlcy5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10LmN1cnZlc1tlXTt0aGlzLmN1cnZlcy5wdXNoKChuZXcgTDR0W24udHlwZV0pLmZyb21KU09OKG4pKX1yZXR1cm4gdGhpc319Y2xhc3MgaTl0IGV4dGVuZHMgbjl0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQYXRoIix0aGlzLmN1cnJlbnRQb2ludD1uZXcgbUp0LHQmJnRoaXMuc2V0RnJvbVBvaW50cyh0KX1zZXRGcm9tUG9pbnRzKHQpe3RoaXMubW92ZVRvKHRbMF0ueCx0WzBdLnkpO2ZvcihsZXQgZT0xLG49dC5sZW5ndGg7ZTxuO2UrKyl0aGlzLmxpbmVUbyh0W2VdLngsdFtlXS55KTtyZXR1cm4gdGhpc31tb3ZlVG8odCxlKXtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31saW5lVG8odCxlKXtjb25zdCBuPW5ldyBFNHQodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgbUp0KHQsZSkpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKG4pLHRoaXMuY3VycmVudFBvaW50LnNldCh0LGUpLHRoaXN9cXVhZHJhdGljQ3VydmVUbyh0LGUsbixpKXtjb25zdCByPW5ldyBDNHQodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgbUp0KHQsZSksbmV3IG1KdChuLGkpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChyKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobixpKSx0aGlzfWJlemllckN1cnZlVG8odCxlLG4saSxyLG8pe2NvbnN0IGE9bmV3IFM0dCh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBtSnQodCxlKSxuZXcgbUp0KG4saSksbmV3IG1KdChyLG8pKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChhKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQocixvKSx0aGlzfXNwbGluZVRocnUodCl7Y29uc3QgZT1bdGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKV0uY29uY2F0KHQpLG49bmV3IGs0dChlKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChuKSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHRbdC5sZW5ndGgtMV0pLHRoaXN9YXJjKHQsZSxuLGkscixvKXtyZXR1cm4gdGhpcy5hYnNhcmModCt0aGlzLmN1cnJlbnRQb2ludC54LGUrdGhpcy5jdXJyZW50UG9pbnQueSxuLGkscixvKSx0aGlzfWFic2FyYyh0LGUsbixpLHIsbyl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0LGUsbixuLGkscixvKSx0aGlzfWVsbGlwc2UodCxlLG4saSxyLG8sYSxzKXtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQrdGhpcy5jdXJyZW50UG9pbnQueCxlK3RoaXMuY3VycmVudFBvaW50LnksbixpLHIsbyxhLHMpLHRoaXN9YWJzZWxsaXBzZSh0LGUsbixpLHIsbyxhLHMpe2NvbnN0IGw9bmV3IGQ0dCh0LGUsbixpLHIsbyxhLHMpO2lmKHRoaXMuY3VydmVzLmxlbmd0aD4wKXtjb25zdCB0PWwuZ2V0UG9pbnQoMCk7dC5lcXVhbHModGhpcy5jdXJyZW50UG9pbnQpfHx0aGlzLmxpbmVUbyh0LngsdC55KX10aGlzLmN1cnZlcy5wdXNoKGwpO2NvbnN0IGM9bC5nZXRQb2ludCgxKTtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuY29weShjKSx0aGlzfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0LmN1cnJlbnRQb2ludCksdGhpc310b0pTT04oKXtjb25zdCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KHQuY3VycmVudFBvaW50KSx0aGlzfX1jbGFzcyByOXQgZXh0ZW5kcyBpOXR7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy51dWlkPVhadCgpLHRoaXMudHlwZT0iU2hhcGUiLHRoaXMuaG9sZXM9W119Z2V0UG9pbnRzSG9sZXModCl7Y29uc3QgZT1bXTtmb3IobGV0IG49MCxpPXRoaXMuaG9sZXMubGVuZ3RoO248aTtuKyspZVtuXT10aGlzLmhvbGVzW25dLmdldFBvaW50cyh0KTtyZXR1cm4gZX1leHRyYWN0UG9pbnRzKHQpe3JldHVybntzaGFwZTp0aGlzLmdldFBvaW50cyh0KSxob2xlczp0aGlzLmdldFBvaW50c0hvbGVzKHQpfX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5ob2xlcz1bXTtmb3IobGV0IGU9MCxuPXQuaG9sZXMubGVuZ3RoO2U8bjtlKyspdGhpcy5ob2xlcy5wdXNoKHQuaG9sZXNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXN9dG9KU09OKCl7Y29uc3QgdD1zdXBlci50b0pTT04oKTt0LnV1aWQ9dGhpcy51dWlkLHQuaG9sZXM9W107Zm9yKGxldCBlPTAsbj10aGlzLmhvbGVzLmxlbmd0aDtlPG47ZSsrKXQuaG9sZXMucHVzaCh0aGlzLmhvbGVzW2VdLnRvSlNPTigpKTtyZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnV1aWQ9dC51dWlkLHRoaXMuaG9sZXM9W107Zm9yKGxldCBlPTAsbj10LmhvbGVzLmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXQuaG9sZXNbZV07dGhpcy5ob2xlcy5wdXNoKChuZXcgaTl0KS5mcm9tSlNPTihuKSl9cmV0dXJuIHRoaXN9fWNsYXNzIG85dCBleHRlbmRzIGtRdHtjb25zdHJ1Y3Rvcih0LGU9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpZ2h0Iix0aGlzLmNvbG9yPW5ldyAkUXQodCksdGhpcy5pbnRlbnNpdHk9ZX1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2NvbnN0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpLGUub2JqZWN0LmludGVuc2l0eT10aGlzLmludGVuc2l0eSx2b2lkIDAhPT10aGlzLmdyb3VuZENvbG9yJiYoZS5vYmplY3QuZ3JvdW5kQ29sb3I9dGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5kaXN0YW5jZSYmKGUub2JqZWN0LmRpc3RhbmNlPXRoaXMuZGlzdGFuY2UpLHZvaWQgMCE9PXRoaXMuYW5nbGUmJihlLm9iamVjdC5hbmdsZT10aGlzLmFuZ2xlKSx2b2lkIDAhPT10aGlzLmRlY2F5JiYoZS5vYmplY3QuZGVjYXk9dGhpcy5kZWNheSksdm9pZCAwIT09dGhpcy5wZW51bWJyYSYmKGUub2JqZWN0LnBlbnVtYnJhPXRoaXMucGVudW1icmEpLHZvaWQgMCE9PXRoaXMuc2hhZG93JiYoZS5vYmplY3Quc2hhZG93PXRoaXMuc2hhZG93LnRvSlNPTigpKSxlfX1vOXQucHJvdG90eXBlLmlzTGlnaHQ9ITA7Y2xhc3MgYTl0IGV4dGVuZHMgbzl0e2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcih0LG4pLHRoaXMudHlwZT0iSGVtaXNwaGVyZUxpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoa1F0LkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLmdyb3VuZENvbG9yPW5ldyAkUXQoZSl9Y29weSh0KXtyZXR1cm4gbzl0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmdyb3VuZENvbG9yLmNvcHkodC5ncm91bmRDb2xvciksdGhpc319YTl0LnByb3RvdHlwZS5pc0hlbWlzcGhlcmVMaWdodD0hMDtjb25zdCBzOXQ9bmV3IHJRdCxsOXQ9bmV3IENKdCxjOXQ9bmV3IENKdDtjbGFzcyB1OXR7Y29uc3RydWN0b3IodCl7dGhpcy5jYW1lcmE9dCx0aGlzLmJpYXM9MCx0aGlzLm5vcm1hbEJpYXM9MCx0aGlzLnJhZGl1cz0xLHRoaXMubWFwU2l6ZT1uZXcgbUp0KDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IHJRdCx0aGlzLmF1dG9VcGRhdGU9ITAsdGhpcy5uZWVkc1VwZGF0ZT0hMSx0aGlzLl9mcnVzdHVtPW5ldyBpMHQsdGhpcy5fZnJhbWVFeHRlbnRzPW5ldyBtSnQoMSwxKSx0aGlzLl92aWV3cG9ydENvdW50PTEsdGhpcy5fdmlld3BvcnRzPVtuZXcgd0p0KDAsMCwxLDEpXX1nZXRWaWV3cG9ydENvdW50KCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0Q291bnR9Z2V0RnJ1c3R1bSgpe3JldHVybiB0aGlzLl9mcnVzdHVtfXVwZGF0ZU1hdHJpY2VzKHQpe2NvbnN0IGU9dGhpcy5jYW1lcmEsbj10aGlzLm1hdHJpeDtsOXQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGUucG9zaXRpb24uY29weShsOXQpLGM5dC5zZXRGcm9tTWF0cml4UG9zaXRpb24odC50YXJnZXQubWF0cml4V29ybGQpLGUubG9va0F0KGM5dCksZS51cGRhdGVNYXRyaXhXb3JsZCgpLHM5dC5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChzOXQpLG4uc2V0KC41LDAsMCwuNSwwLC41LDAsLjUsMCwwLC41LC41LDAsMCwwLDEpLG4ubXVsdGlwbHkoZS5wcm9qZWN0aW9uTWF0cml4KSxuLm11bHRpcGx5KGUubWF0cml4V29ybGRJbnZlcnNlKX1nZXRWaWV3cG9ydCh0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRzW3RdfWdldEZyYW1lRXh0ZW50cygpe3JldHVybiB0aGlzLl9mcmFtZUV4dGVudHN9ZGlzcG9zZSgpe3RoaXMubWFwJiZ0aGlzLm1hcC5kaXNwb3NlKCksdGhpcy5tYXBQYXNzJiZ0aGlzLm1hcFBhc3MuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHRoaXMuY2FtZXJhPXQuY2FtZXJhLmNsb25lKCksdGhpcy5iaWFzPXQuYmlhcyx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLm1hcFNpemUuY29weSh0Lm1hcFNpemUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9dG9KU09OKCl7Y29uc3QgdD17fTtyZXR1cm4gMCE9PXRoaXMuYmlhcyYmKHQuYmlhcz10aGlzLmJpYXMpLDAhPT10aGlzLm5vcm1hbEJpYXMmJih0Lm5vcm1hbEJpYXM9dGhpcy5ub3JtYWxCaWFzKSwxIT09dGhpcy5yYWRpdXMmJih0LnJhZGl1cz10aGlzLnJhZGl1cyksNTEyPT09dGhpcy5tYXBTaXplLngmJjUxMj09PXRoaXMubWFwU2l6ZS55fHwodC5tYXBTaXplPXRoaXMubWFwU2l6ZS50b0FycmF5KCkpLHQuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0LGRlbGV0ZSB0LmNhbWVyYS5tYXRyaXgsdH19Y2xhc3MgaDl0IGV4dGVuZHMgdTl0e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IHExdCg1MCwxLC41LDUwMCkpLHRoaXMuZm9jdXM9MX11cGRhdGVNYXRyaWNlcyh0KXtjb25zdCBlPXRoaXMuY2FtZXJhLG49MipZWnQqdC5hbmdsZSp0aGlzLmZvY3VzLGk9dGhpcy5tYXBTaXplLndpZHRoL3RoaXMubWFwU2l6ZS5oZWlnaHQscj10LmRpc3RhbmNlfHxlLmZhcjtuPT09ZS5mb3YmJmk9PT1lLmFzcGVjdCYmcj09PWUuZmFyfHwoZS5mb3Y9bixlLmFzcGVjdD1pLGUuZmFyPXIsZS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHN1cGVyLnVwZGF0ZU1hdHJpY2VzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mb2N1cz10LmZvY3VzLHRoaXN9fWg5dC5wcm90b3R5cGUuaXNTcG90TGlnaHRTaGFkb3c9ITA7Y2xhc3MgZDl0IGV4dGVuZHMgbzl0e2NvbnN0cnVjdG9yKHQsZSxuPTAsaT1NYXRoLlBJLzMscj0wLG89MSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlNwb3RMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KGtRdC5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IGtRdCx0aGlzLmRpc3RhbmNlPW4sdGhpcy5hbmdsZT1pLHRoaXMucGVudW1icmE9cix0aGlzLmRlY2F5PW8sdGhpcy5zaGFkb3c9bmV3IGg5dH1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC9NYXRoLlBJfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5hbmdsZT10LmFuZ2xlLHRoaXMucGVudW1icmE9dC5wZW51bWJyYSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fWQ5dC5wcm90b3R5cGUuaXNTcG90TGlnaHQ9ITA7Y29uc3QgcDl0PW5ldyByUXQsZjl0PW5ldyBDSnQsbTl0PW5ldyBDSnQ7Y2xhc3MgZzl0IGV4dGVuZHMgdTl0e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IHExdCg5MCwxLC41LDUwMCkpLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgbUp0KDQsMiksdGhpcy5fdmlld3BvcnRDb3VudD02LHRoaXMuX3ZpZXdwb3J0cz1bbmV3IHdKdCgyLDEsMSwxKSxuZXcgd0p0KDAsMSwxLDEpLG5ldyB3SnQoMywxLDEsMSksbmV3IHdKdCgxLDEsMSwxKSxuZXcgd0p0KDMsMCwxLDEpLG5ldyB3SnQoMSwwLDEsMSldLHRoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgQ0p0KDEsMCwwKSxuZXcgQ0p0KC0xLDAsMCksbmV3IENKdCgwLDAsMSksbmV3IENKdCgwLDAsLTEpLG5ldyBDSnQoMCwxLDApLG5ldyBDSnQoMCwtMSwwKV0sdGhpcy5fY3ViZVVwcz1bbmV3IENKdCgwLDEsMCksbmV3IENKdCgwLDEsMCksbmV3IENKdCgwLDEsMCksbmV3IENKdCgwLDEsMCksbmV3IENKdCgwLDAsMSksbmV3IENKdCgwLDAsLTEpXX11cGRhdGVNYXRyaWNlcyh0LGU9MCl7Y29uc3Qgbj10aGlzLmNhbWVyYSxpPXRoaXMubWF0cml4LHI9dC5kaXN0YW5jZXx8bi5mYXI7ciE9PW4uZmFyJiYobi5mYXI9cixuLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksZjl0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxuLnBvc2l0aW9uLmNvcHkoZjl0KSxtOXQuY29weShuLnBvc2l0aW9uKSxtOXQuYWRkKHRoaXMuX2N1YmVEaXJlY3Rpb25zW2VdKSxuLnVwLmNvcHkodGhpcy5fY3ViZVVwc1tlXSksbi5sb29rQXQobTl0KSxuLnVwZGF0ZU1hdHJpeFdvcmxkKCksaS5tYWtlVHJhbnNsYXRpb24oLWY5dC54LC1mOXQueSwtZjl0LnopLHA5dC5tdWx0aXBseU1hdHJpY2VzKG4ucHJvamVjdGlvbk1hdHJpeCxuLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChwOXQpfX1nOXQucHJvdG90eXBlLmlzUG9pbnRMaWdodFNoYWRvdz0hMDtjbGFzcyBfOXQgZXh0ZW5kcyBvOXR7Y29uc3RydWN0b3IodCxlLG49MCxpPTEpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJQb2ludExpZ2h0Iix0aGlzLmRpc3RhbmNlPW4sdGhpcy5kZWNheT1pLHRoaXMuc2hhZG93PW5ldyBnOXR9Z2V0IHBvd2VyKCl7cmV0dXJuIDQqdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8oNCpNYXRoLlBJKX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fV85dC5wcm90b3R5cGUuaXNQb2ludExpZ2h0PSEwO2NsYXNzIHk5dCBleHRlbmRzIHU5dHtjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBnMHQoLTUsNSw1LC01LC41LDUwMCkpfX15OXQucHJvdG90eXBlLmlzRGlyZWN0aW9uYWxMaWdodFNoYWRvdz0hMDtjbGFzcyB2OXQgZXh0ZW5kcyBvOXR7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KGtRdC5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IGtRdCx0aGlzLnNoYWRvdz1uZXcgeTl0fWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319djl0LnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQ9ITA7Y2xhc3MgYjl0IGV4dGVuZHMgbzl0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkFtYmllbnRMaWdodCJ9fWI5dC5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHQ9ITA7Y2xhc3MgeDl0IGV4dGVuZHMgbzl0e2NvbnN0cnVjdG9yKHQsZSxuPTEwLGk9MTApe3N1cGVyKHQsZSksdGhpcy50eXBlPSJSZWN0QXJlYUxpZ2h0Iix0aGlzLndpZHRoPW4sdGhpcy5oZWlnaHQ9aX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfXRvSlNPTih0KXtjb25zdCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Qud2lkdGg9dGhpcy53aWR0aCxlLm9iamVjdC5oZWlnaHQ9dGhpcy5oZWlnaHQsZX19eDl0LnByb3RvdHlwZS5pc1JlY3RBcmVhTGlnaHQ9ITA7Y2xhc3Mgdzl0e2NvbnN0cnVjdG9yKCl7dGhpcy5jb2VmZmljaWVudHM9W107Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50cy5wdXNoKG5ldyBDSnQpfXNldCh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLmNvcHkodFtlXSk7cmV0dXJuIHRoaXN9emVybygpe2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHNbdF0uc2V0KDAsMCwwKTtyZXR1cm4gdGhpc31nZXRBdCh0LGUpe2NvbnN0IG49dC54LGk9dC55LHI9dC56LG89dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShvWzBdKS5tdWx0aXBseVNjYWxhciguMjgyMDk1KSxlLmFkZFNjYWxlZFZlY3RvcihvWzFdLC40ODg2MDMqaSksZS5hZGRTY2FsZWRWZWN0b3Iob1syXSwuNDg4NjAzKnIpLGUuYWRkU2NhbGVkVmVjdG9yKG9bM10sLjQ4ODYwMypuKSxlLmFkZFNjYWxlZFZlY3RvcihvWzRdLG4qaSoxLjA5MjU0OCksZS5hZGRTY2FsZWRWZWN0b3Iob1s1XSxpKnIqMS4wOTI1NDgpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNl0sLjMxNTM5MiooMypyKnItMSkpLGUuYWRkU2NhbGVkVmVjdG9yKG9bN10sbipyKjEuMDkyNTQ4KSxlLmFkZFNjYWxlZFZlY3RvcihvWzhdLC41NDYyNzQqKG4qbi1pKmkpKSxlfWdldElycmFkaWFuY2VBdCh0LGUpe2NvbnN0IG49dC54LGk9dC55LHI9dC56LG89dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShvWzBdKS5tdWx0aXBseVNjYWxhciguODg2MjI3KSxlLmFkZFNjYWxlZFZlY3RvcihvWzFdLDEuMDIzMzI4KmkpLGUuYWRkU2NhbGVkVmVjdG9yKG9bMl0sMS4wMjMzMjgqciksZS5hZGRTY2FsZWRWZWN0b3Iob1szXSwxLjAyMzMyOCpuKSxlLmFkZFNjYWxlZFZlY3RvcihvWzRdLC44NTgwODYqbippKSxlLmFkZFNjYWxlZFZlY3RvcihvWzVdLC44NTgwODYqaSpyKSxlLmFkZFNjYWxlZFZlY3RvcihvWzZdLC43NDMxMjUqcipyLS4yNDc3MDgpLGUuYWRkU2NhbGVkVmVjdG9yKG9bN10sLjg1ODA4NipuKnIpLGUuYWRkU2NhbGVkVmVjdG9yKG9bOF0sLjQyOTA0MyoobipuLWkqaSkpLGV9YWRkKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uYWRkKHQuY29lZmZpY2llbnRzW2VdKTtyZXR1cm4gdGhpc31hZGRTY2FsZWRTSCh0LGUpe2ZvcihsZXQgbj0wO248OTtuKyspdGhpcy5jb2VmZmljaWVudHNbbl0uYWRkU2NhbGVkVmVjdG9yKHQuY29lZmZpY2llbnRzW25dLGUpO3JldHVybiB0aGlzfXNjYWxlKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0ubXVsdGlwbHlTY2FsYXIodCk7cmV0dXJuIHRoaXN9bGVycCh0LGUpe2ZvcihsZXQgbj0wO248OTtuKyspdGhpcy5jb2VmZmljaWVudHNbbl0ubGVycCh0LmNvZWZmaWNpZW50c1tuXSxlKTtyZXR1cm4gdGhpc31lcXVhbHModCl7Zm9yKGxldCBlPTA7ZTw5O2UrKylpZighdGhpcy5jb2VmZmljaWVudHNbZV0uZXF1YWxzKHQuY29lZmZpY2llbnRzW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH1jb3B5KHQpe3JldHVybiB0aGlzLnNldCh0LmNvZWZmaWNpZW50cyl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9ZnJvbUFycmF5KHQsZT0wKXtjb25zdCBuPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspbltpXS5mcm9tQXJyYXkodCxlKzMqaSk7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7Y29uc3Qgbj10aGlzLmNvZWZmaWNpZW50cztmb3IobGV0IGk9MDtpPDk7aSsrKW5baV0udG9BcnJheSh0LGUrMyppKTtyZXR1cm4gdH1zdGF0aWMgZ2V0QmFzaXNBdCh0LGUpe2NvbnN0IG49dC54LGk9dC55LHI9dC56O2VbMF09LjI4MjA5NSxlWzFdPS40ODg2MDMqaSxlWzJdPS40ODg2MDMqcixlWzNdPS40ODg2MDMqbixlWzRdPTEuMDkyNTQ4Km4qaSxlWzVdPTEuMDkyNTQ4KmkqcixlWzZdPS4zMTUzOTIqKDMqcipyLTEpLGVbN109MS4wOTI1NDgqbipyLGVbOF09LjU0NjI3NCoobipuLWkqaSl9fXc5dC5wcm90b3R5cGUuaXNTcGhlcmljYWxIYXJtb25pY3MzPSEwO2NsYXNzIFM5dCBleHRlbmRzIG85dHtjb25zdHJ1Y3Rvcih0PW5ldyB3OXQsZT0xKXtzdXBlcih2b2lkIDAsZSksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2NvbnN0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC5zaD10aGlzLnNoLnRvQXJyYXkoKSxlfX1TOXQucHJvdG90eXBlLmlzTGlnaHRQcm9iZT0hMDtjbGFzcyBNOXQgZXh0ZW5kcyAkNnR7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy50ZXh0dXJlcz17fX1sb2FkKHQsZSxuLGkpe2NvbnN0IHI9dGhpcyxvPW5ldyBaNnQoci5tYW5hZ2VyKTtvLnNldFBhdGgoci5wYXRoKSxvLnNldFJlcXVlc3RIZWFkZXIoci5yZXF1ZXN0SGVhZGVyKSxvLnNldFdpdGhDcmVkZW50aWFscyhyLndpdGhDcmVkZW50aWFscyksby5sb2FkKHQsKGZ1bmN0aW9uKG4pe3RyeXtlKHIucGFyc2UoSlNPTi5wYXJzZShuKSkpfWNhdGNoKGUpe2k/aShlKTpjb25zb2xlLmVycm9yKGUpLHIubWFuYWdlci5pdGVtRXJyb3IodCl9fSksbixpKX1wYXJzZSh0KXtjb25zdCBlPXRoaXMudGV4dHVyZXM7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdm9pZCAwPT09ZVt0XSYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbExvYWRlcjogVW5kZWZpbmVkIHRleHR1cmUiLHQpLGVbdF19Y29uc3QgaT1uZXcgTDZ0W3QudHlwZV07aWYodm9pZCAwIT09dC51dWlkJiYoaS51dWlkPXQudXVpZCksdm9pZCAwIT09dC5uYW1lJiYoaS5uYW1lPXQubmFtZSksdm9pZCAwIT09dC5jb2xvciYmdm9pZCAwIT09aS5jb2xvciYmaS5jb2xvci5zZXRIZXgodC5jb2xvciksdm9pZCAwIT09dC5yb3VnaG5lc3MmJihpLnJvdWdobmVzcz10LnJvdWdobmVzcyksdm9pZCAwIT09dC5tZXRhbG5lc3MmJihpLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyksdm9pZCAwIT09dC5zaGVlbiYmKGkuc2hlZW49KG5ldyAkUXQpLnNldEhleCh0LnNoZWVuKSksdm9pZCAwIT09dC5lbWlzc2l2ZSYmdm9pZCAwIT09aS5lbWlzc2l2ZSYmaS5lbWlzc2l2ZS5zZXRIZXgodC5lbWlzc2l2ZSksdm9pZCAwIT09dC5zcGVjdWxhciYmdm9pZCAwIT09aS5zcGVjdWxhciYmaS5zcGVjdWxhci5zZXRIZXgodC5zcGVjdWxhciksdm9pZCAwIT09dC5zcGVjdWxhckludGVuc2l0eSYmKGkuc3BlY3VsYXJJbnRlbnNpdHk9dC5zcGVjdWxhckludGVuc2l0eSksdm9pZCAwIT09dC5zcGVjdWxhclRpbnQmJnZvaWQgMCE9PWkuc3BlY3VsYXJUaW50JiZpLnNwZWN1bGFyVGludC5zZXRIZXgodC5zcGVjdWxhclRpbnQpLHZvaWQgMCE9PXQuc2hpbmluZXNzJiYoaS5zaGluaW5lc3M9dC5zaGluaW5lc3MpLHZvaWQgMCE9PXQuY2xlYXJjb2F0JiYoaS5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQpLHZvaWQgMCE9PXQuY2xlYXJjb2F0Um91Z2huZXNzJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MpLHZvaWQgMCE9PXQudHJhbnNtaXNzaW9uJiYoaS50cmFuc21pc3Npb249dC50cmFuc21pc3Npb24pLHZvaWQgMCE9PXQudGhpY2tuZXNzJiYoaS50aGlja25lc3M9dC50aGlja25lc3MpLHZvaWQgMCE9PXQuYXR0ZW51YXRpb25EaXN0YW5jZSYmKGkuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UpLHZvaWQgMCE9PXQuYXR0ZW51YXRpb25UaW50JiZ2b2lkIDAhPT1pLmF0dGVudWF0aW9uVGludCYmaS5hdHRlbnVhdGlvblRpbnQuc2V0SGV4KHQuYXR0ZW51YXRpb25UaW50KSx2b2lkIDAhPT10LmZvZyYmKGkuZm9nPXQuZm9nKSx2b2lkIDAhPT10LmZsYXRTaGFkaW5nJiYoaS5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nKSx2b2lkIDAhPT10LmJsZW5kaW5nJiYoaS5ibGVuZGluZz10LmJsZW5kaW5nKSx2b2lkIDAhPT10LmNvbWJpbmUmJihpLmNvbWJpbmU9dC5jb21iaW5lKSx2b2lkIDAhPT10LnNpZGUmJihpLnNpZGU9dC5zaWRlKSx2b2lkIDAhPT10LnNoYWRvd1NpZGUmJihpLnNoYWRvd1NpZGU9dC5zaGFkb3dTaWRlKSx2b2lkIDAhPT10Lm9wYWNpdHkmJihpLm9wYWNpdHk9dC5vcGFjaXR5KSx2b2lkIDAhPT10LnRyYW5zcGFyZW50JiYoaS50cmFuc3BhcmVudD10LnRyYW5zcGFyZW50KSx2b2lkIDAhPT10LmFscGhhVGVzdCYmKGkuYWxwaGFUZXN0PXQuYWxwaGFUZXN0KSx2b2lkIDAhPT10LmRlcHRoVGVzdCYmKGkuZGVwdGhUZXN0PXQuZGVwdGhUZXN0KSx2b2lkIDAhPT10LmRlcHRoV3JpdGUmJihpLmRlcHRoV3JpdGU9dC5kZXB0aFdyaXRlKSx2b2lkIDAhPT10LmNvbG9yV3JpdGUmJihpLmNvbG9yV3JpdGU9dC5jb2xvcldyaXRlKSx2b2lkIDAhPT10LnN0ZW5jaWxXcml0ZSYmKGkuc3RlbmNpbFdyaXRlPXQuc3RlbmNpbFdyaXRlKSx2b2lkIDAhPT10LnN0ZW5jaWxXcml0ZU1hc2smJihpLnN0ZW5jaWxXcml0ZU1hc2s9dC5zdGVuY2lsV3JpdGVNYXNrKSx2b2lkIDAhPT10LnN0ZW5jaWxGdW5jJiYoaS5zdGVuY2lsRnVuYz10LnN0ZW5jaWxGdW5jKSx2b2lkIDAhPT10LnN0ZW5jaWxSZWYmJihpLnN0ZW5jaWxSZWY9dC5zdGVuY2lsUmVmKSx2b2lkIDAhPT10LnN0ZW5jaWxGdW5jTWFzayYmKGkuc3RlbmNpbEZ1bmNNYXNrPXQuc3RlbmNpbEZ1bmNNYXNrKSx2b2lkIDAhPT10LnN0ZW5jaWxGYWlsJiYoaS5zdGVuY2lsRmFpbD10LnN0ZW5jaWxGYWlsKSx2b2lkIDAhPT10LnN0ZW5jaWxaRmFpbCYmKGkuc3RlbmNpbFpGYWlsPXQuc3RlbmNpbFpGYWlsKSx2b2lkIDAhPT10LnN0ZW5jaWxaUGFzcyYmKGkuc3RlbmNpbFpQYXNzPXQuc3RlbmNpbFpQYXNzKSx2b2lkIDAhPT10LndpcmVmcmFtZSYmKGkud2lyZWZyYW1lPXQud2lyZWZyYW1lKSx2b2lkIDAhPT10LndpcmVmcmFtZUxpbmV3aWR0aCYmKGkud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoKSx2b2lkIDAhPT10LndpcmVmcmFtZUxpbmVjYXAmJihpLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwKSx2b2lkIDAhPT10LndpcmVmcmFtZUxpbmVqb2luJiYoaS53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luKSx2b2lkIDAhPT10LnJvdGF0aW9uJiYoaS5yb3RhdGlvbj10LnJvdGF0aW9uKSwxIT09dC5saW5ld2lkdGgmJihpLmxpbmV3aWR0aD10LmxpbmV3aWR0aCksdm9pZCAwIT09dC5kYXNoU2l6ZSYmKGkuZGFzaFNpemU9dC5kYXNoU2l6ZSksdm9pZCAwIT09dC5nYXBTaXplJiYoaS5nYXBTaXplPXQuZ2FwU2l6ZSksdm9pZCAwIT09dC5zY2FsZSYmKGkuc2NhbGU9dC5zY2FsZSksdm9pZCAwIT09dC5wb2x5Z29uT2Zmc2V0JiYoaS5wb2x5Z29uT2Zmc2V0PXQucG9seWdvbk9mZnNldCksdm9pZCAwIT09dC5wb2x5Z29uT2Zmc2V0RmFjdG9yJiYoaS5wb2x5Z29uT2Zmc2V0RmFjdG9yPXQucG9seWdvbk9mZnNldEZhY3Rvciksdm9pZCAwIT09dC5wb2x5Z29uT2Zmc2V0VW5pdHMmJihpLnBvbHlnb25PZmZzZXRVbml0cz10LnBvbHlnb25PZmZzZXRVbml0cyksdm9pZCAwIT09dC5kaXRoZXJpbmcmJihpLmRpdGhlcmluZz10LmRpdGhlcmluZyksdm9pZCAwIT09dC5hbHBoYVRvQ292ZXJhZ2UmJihpLmFscGhhVG9Db3ZlcmFnZT10LmFscGhhVG9Db3ZlcmFnZSksdm9pZCAwIT09dC5wcmVtdWx0aXBsaWVkQWxwaGEmJihpLnByZW11bHRpcGxpZWRBbHBoYT10LnByZW11bHRpcGxpZWRBbHBoYSksdm9pZCAwIT09dC52aXNpYmxlJiYoaS52aXNpYmxlPXQudmlzaWJsZSksdm9pZCAwIT09dC50b25lTWFwcGVkJiYoaS50b25lTWFwcGVkPXQudG9uZU1hcHBlZCksdm9pZCAwIT09dC51c2VyRGF0YSYmKGkudXNlckRhdGE9dC51c2VyRGF0YSksdm9pZCAwIT09dC52ZXJ0ZXhDb2xvcnMmJihpLnZlcnRleENvbG9ycz0ibnVtYmVyIj09dHlwZW9mIHQudmVydGV4Q29sb3JzP3QudmVydGV4Q29sb3JzPjA6dC52ZXJ0ZXhDb2xvcnMpLHZvaWQgMCE9PXQudW5pZm9ybXMpZm9yKGNvbnN0IGUgaW4gdC51bmlmb3Jtcyl7Y29uc3Qgcj10LnVuaWZvcm1zW2VdO3N3aXRjaChpLnVuaWZvcm1zW2VdPXt9LHIudHlwZSl7Y2FzZSJ0IjppLnVuaWZvcm1zW2VdLnZhbHVlPW4oci52YWx1ZSk7YnJlYWs7Y2FzZSJjIjppLnVuaWZvcm1zW2VdLnZhbHVlPShuZXcgJFF0KS5zZXRIZXgoci52YWx1ZSk7YnJlYWs7Y2FzZSJ2MiI6aS51bmlmb3Jtc1tlXS52YWx1ZT0obmV3IG1KdCkuZnJvbUFycmF5KHIudmFsdWUpO2JyZWFrO2Nhc2UidjMiOmkudW5pZm9ybXNbZV0udmFsdWU9KG5ldyBDSnQpLmZyb21BcnJheShyLnZhbHVlKTticmVhaztjYXNlInY0IjppLnVuaWZvcm1zW2VdLnZhbHVlPShuZXcgd0p0KS5mcm9tQXJyYXkoci52YWx1ZSk7YnJlYWs7Y2FzZSJtMyI6aS51bmlmb3Jtc1tlXS52YWx1ZT0obmV3IGdKdCkuZnJvbUFycmF5KHIudmFsdWUpO2JyZWFrO2Nhc2UibTQiOmkudW5pZm9ybXNbZV0udmFsdWU9KG5ldyByUXQpLmZyb21BcnJheShyLnZhbHVlKTticmVhaztkZWZhdWx0OmkudW5pZm9ybXNbZV0udmFsdWU9ci52YWx1ZX19aWYodm9pZCAwIT09dC5kZWZpbmVzJiYoaS5kZWZpbmVzPXQuZGVmaW5lcyksdm9pZCAwIT09dC52ZXJ0ZXhTaGFkZXImJihpLnZlcnRleFNoYWRlcj10LnZlcnRleFNoYWRlciksdm9pZCAwIT09dC5mcmFnbWVudFNoYWRlciYmKGkuZnJhZ21lbnRTaGFkZXI9dC5mcmFnbWVudFNoYWRlciksdm9pZCAwIT09dC5leHRlbnNpb25zKWZvcihjb25zdCBlIGluIHQuZXh0ZW5zaW9ucylpLmV4dGVuc2lvbnNbZV09dC5leHRlbnNpb25zW2VdO2lmKHZvaWQgMCE9PXQuc2hhZGluZyYmKGkuZmxhdFNoYWRpbmc9MT09PXQuc2hhZGluZyksdm9pZCAwIT09dC5zaXplJiYoaS5zaXplPXQuc2l6ZSksdm9pZCAwIT09dC5zaXplQXR0ZW51YXRpb24mJihpLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbiksdm9pZCAwIT09dC5tYXAmJihpLm1hcD1uKHQubWFwKSksdm9pZCAwIT09dC5tYXRjYXAmJihpLm1hdGNhcD1uKHQubWF0Y2FwKSksdm9pZCAwIT09dC5hbHBoYU1hcCYmKGkuYWxwaGFNYXA9bih0LmFscGhhTWFwKSksdm9pZCAwIT09dC5idW1wTWFwJiYoaS5idW1wTWFwPW4odC5idW1wTWFwKSksdm9pZCAwIT09dC5idW1wU2NhbGUmJihpLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSksdm9pZCAwIT09dC5ub3JtYWxNYXAmJihpLm5vcm1hbE1hcD1uKHQubm9ybWFsTWFwKSksdm9pZCAwIT09dC5ub3JtYWxNYXBUeXBlJiYoaS5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSksdm9pZCAwIT09dC5ub3JtYWxTY2FsZSl7bGV0IGU9dC5ub3JtYWxTY2FsZTshMT09PUFycmF5LmlzQXJyYXkoZSkmJihlPVtlLGVdKSxpLm5vcm1hbFNjYWxlPShuZXcgbUp0KS5mcm9tQXJyYXkoZSl9cmV0dXJuIHZvaWQgMCE9PXQuZGlzcGxhY2VtZW50TWFwJiYoaS5kaXNwbGFjZW1lbnRNYXA9bih0LmRpc3BsYWNlbWVudE1hcCkpLHZvaWQgMCE9PXQuZGlzcGxhY2VtZW50U2NhbGUmJihpLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUpLHZvaWQgMCE9PXQuZGlzcGxhY2VtZW50QmlhcyYmKGkuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMpLHZvaWQgMCE9PXQucm91Z2huZXNzTWFwJiYoaS5yb3VnaG5lc3NNYXA9bih0LnJvdWdobmVzc01hcCkpLHZvaWQgMCE9PXQubWV0YWxuZXNzTWFwJiYoaS5tZXRhbG5lc3NNYXA9bih0Lm1ldGFsbmVzc01hcCkpLHZvaWQgMCE9PXQuZW1pc3NpdmVNYXAmJihpLmVtaXNzaXZlTWFwPW4odC5lbWlzc2l2ZU1hcCkpLHZvaWQgMCE9PXQuZW1pc3NpdmVJbnRlbnNpdHkmJihpLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHkpLHZvaWQgMCE9PXQuc3BlY3VsYXJNYXAmJihpLnNwZWN1bGFyTWFwPW4odC5zcGVjdWxhck1hcCkpLHZvaWQgMCE9PXQuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJihpLnNwZWN1bGFySW50ZW5zaXR5TWFwPW4odC5zcGVjdWxhckludGVuc2l0eU1hcCkpLHZvaWQgMCE9PXQuc3BlY3VsYXJUaW50TWFwJiYoaS5zcGVjdWxhclRpbnRNYXA9bih0LnNwZWN1bGFyVGludE1hcCkpLHZvaWQgMCE9PXQuZW52TWFwJiYoaS5lbnZNYXA9bih0LmVudk1hcCkpLHZvaWQgMCE9PXQuZW52TWFwSW50ZW5zaXR5JiYoaS5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHkpLHZvaWQgMCE9PXQucmVmbGVjdGl2aXR5JiYoaS5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHkpLHZvaWQgMCE9PXQucmVmcmFjdGlvblJhdGlvJiYoaS5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8pLHZvaWQgMCE9PXQubGlnaHRNYXAmJihpLmxpZ2h0TWFwPW4odC5saWdodE1hcCkpLHZvaWQgMCE9PXQubGlnaHRNYXBJbnRlbnNpdHkmJihpLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHkpLHZvaWQgMCE9PXQuYW9NYXAmJihpLmFvTWFwPW4odC5hb01hcCkpLHZvaWQgMCE9PXQuYW9NYXBJbnRlbnNpdHkmJihpLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHkpLHZvaWQgMCE9PXQuZ3JhZGllbnRNYXAmJihpLmdyYWRpZW50TWFwPW4odC5ncmFkaWVudE1hcCkpLHZvaWQgMCE9PXQuY2xlYXJjb2F0TWFwJiYoaS5jbGVhcmNvYXRNYXA9bih0LmNsZWFyY29hdE1hcCkpLHZvaWQgMCE9PXQuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9bih0LmNsZWFyY29hdFJvdWdobmVzc01hcCkpLHZvaWQgMCE9PXQuY2xlYXJjb2F0Tm9ybWFsTWFwJiYoaS5jbGVhcmNvYXROb3JtYWxNYXA9bih0LmNsZWFyY29hdE5vcm1hbE1hcCkpLHZvaWQgMCE9PXQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUmJihpLmNsZWFyY29hdE5vcm1hbFNjYWxlPShuZXcgbUp0KS5mcm9tQXJyYXkodC5jbGVhcmNvYXROb3JtYWxTY2FsZSkpLHZvaWQgMCE9PXQudHJhbnNtaXNzaW9uTWFwJiYoaS50cmFuc21pc3Npb25NYXA9bih0LnRyYW5zbWlzc2lvbk1hcCkpLHZvaWQgMCE9PXQudGhpY2tuZXNzTWFwJiYoaS50aGlja25lc3NNYXA9bih0LnRoaWNrbmVzc01hcCkpLGl9c2V0VGV4dHVyZXModCl7cmV0dXJuIHRoaXMudGV4dHVyZXM9dCx0aGlzfX1jbGFzcyBFOXR7c3RhdGljIGRlY29kZVRleHQodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBUZXh0RGVjb2RlcilyZXR1cm4obmV3IFRleHREZWNvZGVyKS5kZWNvZGUodCk7bGV0IGU9IiI7Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuPGk7bisrKWUrPVN0cmluZy5mcm9tQ2hhckNvZGUodFtuXSk7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGUpKX1jYXRjaCh0KXtyZXR1cm4gZX19c3RhdGljIGV4dHJhY3RVcmxCYXNlKHQpe2NvbnN0IGU9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09ZT8iLi8iOnQuc3Vic3RyKDAsZSsxKX19Y2xhc3MgVDl0IGV4dGVuZHMgYjF0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluc3RhbmNlQ291bnQ9MS8wfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfXRvSlNPTigpe2NvbnN0IHQ9c3VwZXIudG9KU09OKHRoaXMpO3JldHVybiB0Lmluc3RhbmNlQ291bnQ9dGhpcy5pbnN0YW5jZUNvdW50LHQuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMCx0fX1UOXQucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk9ITA7Y2xhc3MgQzl0IGV4dGVuZHMgUVF0e2NvbnN0cnVjdG9yKHQsZSxuLGk9MSl7Im51bWJlciI9PXR5cGVvZiBuJiYoaT1uLG49ITEsY29uc29sZS5lcnJvcigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgbm9ybWFsaXplZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQuIikpLHN1cGVyKHQsZSxuKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9aX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc310b0pTT04oKXtjb25zdCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0Lm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLHQuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU9ITAsdH19Qzl0LnByb3RvdHlwZS5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMDtjbGFzcyBBOXQgZXh0ZW5kcyAkNnR7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsbixpKXtjb25zdCByPXRoaXMsbz1uZXcgWjZ0KHIubWFuYWdlcik7by5zZXRQYXRoKHIucGF0aCksby5zZXRSZXF1ZXN0SGVhZGVyKHIucmVxdWVzdEhlYWRlciksby5zZXRXaXRoQ3JlZGVudGlhbHMoci53aXRoQ3JlZGVudGlhbHMpLG8ubG9hZCh0LChmdW5jdGlvbihuKXt0cnl7ZShyLnBhcnNlKEpTT04ucGFyc2UobikpKX1jYXRjaChlKXtpP2koZSk6Y29uc29sZS5lcnJvcihlKSxyLm1hbmFnZXIuaXRlbUVycm9yKHQpfX0pLG4saSl9cGFyc2UodCl7Y29uc3QgZT17fSxuPXt9O2Z1bmN0aW9uIGkodCxpKXtpZih2b2lkIDAhPT1lW2ldKXJldHVybiBlW2ldO2NvbnN0IHI9dC5pbnRlcmxlYXZlZEJ1ZmZlcnNbaV0sbz0oZnVuY3Rpb24gYSh0LGUpe2lmKHZvaWQgMCE9PW5bZV0pcmV0dXJuIG5bZV07Y29uc3QgaT1uZXcgVWludDMyQXJyYXkodC5hcnJheUJ1ZmZlcnNbZV0pLmJ1ZmZlcjtyZXR1cm4gbltlXT1pLGl9KSh0LHIuYnVmZmVyKSxzPWQxdChyLnR5cGUsbyksbD1uZXcgJDV0KHMsci5zdHJpZGUpO3JldHVybiBsLnV1aWQ9ci51dWlkLGVbaV09bCxsfWNvbnN0IHI9dC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5P25ldyBUOXQ6bmV3IGIxdCxvPXQuZGF0YS5pbmRleDtpZih2b2lkIDAhPT1vKXtjb25zdCB0PWQxdChvLnR5cGUsby5hcnJheSk7ci5zZXRJbmRleChuZXcgUVF0KHQsMSkpfWNvbnN0IGE9dC5kYXRhLmF0dHJpYnV0ZXM7Zm9yKGNvbnN0IGUgaW4gYSl7Y29uc3Qgbj1hW2VdO2xldCBvO2lmKG4uaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7Y29uc3QgZT1pKHQuZGF0YSxuLmRhdGEpO289bmV3IFo1dChlLG4uaXRlbVNpemUsbi5vZmZzZXQsbi5ub3JtYWxpemVkKX1lbHNle2NvbnN0IHQ9ZDF0KG4udHlwZSxuLmFycmF5KTtvPW5ldyhuLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlP0M5dDpRUXQpKHQsbi5pdGVtU2l6ZSxuLm5vcm1hbGl6ZWQpfXZvaWQgMCE9PW4ubmFtZSYmKG8ubmFtZT1uLm5hbWUpLHZvaWQgMCE9PW4udXNhZ2UmJm8uc2V0VXNhZ2Uobi51c2FnZSksdm9pZCAwIT09bi51cGRhdGVSYW5nZSYmKG8udXBkYXRlUmFuZ2Uub2Zmc2V0PW4udXBkYXRlUmFuZ2Uub2Zmc2V0LG8udXBkYXRlUmFuZ2UuY291bnQ9bi51cGRhdGVSYW5nZS5jb3VudCksci5zZXRBdHRyaWJ1dGUoZSxvKX1jb25zdCBzPXQuZGF0YS5tb3JwaEF0dHJpYnV0ZXM7aWYocylmb3IoY29uc3QgZSBpbiBzKXtjb25zdCBuPXNbZV0sbz1bXTtmb3IobGV0IGU9MCxyPW4ubGVuZ3RoO2U8cjtlKyspe2NvbnN0IHI9bltlXTtsZXQgYTtpZihyLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe2NvbnN0IGU9aSh0LmRhdGEsci5kYXRhKTthPW5ldyBaNXQoZSxyLml0ZW1TaXplLHIub2Zmc2V0LHIubm9ybWFsaXplZCl9ZWxzZXtjb25zdCB0PWQxdChyLnR5cGUsci5hcnJheSk7YT1uZXcgUVF0KHQsci5pdGVtU2l6ZSxyLm5vcm1hbGl6ZWQpfXZvaWQgMCE9PXIubmFtZSYmKGEubmFtZT1yLm5hbWUpLG8ucHVzaChhKX1yLm1vcnBoQXR0cmlidXRlc1tlXT1vfXQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZSYmKHIubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITApO2NvbnN0IGw9dC5kYXRhLmdyb3Vwc3x8dC5kYXRhLmRyYXdjYWxsc3x8dC5kYXRhLm9mZnNldHM7aWYodm9pZCAwIT09bClmb3IobGV0IHQ9MCxlPWwubGVuZ3RoO3QhPT1lOysrdCl7Y29uc3QgZT1sW3RdO3IuYWRkR3JvdXAoZS5zdGFydCxlLmNvdW50LGUubWF0ZXJpYWxJbmRleCl9Y29uc3QgYz10LmRhdGEuYm91bmRpbmdTcGhlcmU7aWYodm9pZCAwIT09Yyl7Y29uc3QgdD1uZXcgQ0p0O3ZvaWQgMCE9PWMuY2VudGVyJiZ0LmZyb21BcnJheShjLmNlbnRlciksci5ib3VuZGluZ1NwaGVyZT1uZXcgJEp0KHQsYy5yYWRpdXMpfXJldHVybiB0Lm5hbWUmJihyLm5hbWU9dC5uYW1lKSx0LnVzZXJEYXRhJiYoci51c2VyRGF0YT10LnVzZXJEYXRhKSxyfX1jb25zdCBrOXQ9e1VWTWFwcGluZzpVS3QsQ3ViZVJlZmxlY3Rpb25NYXBwaW5nOmpLdCxDdWJlUmVmcmFjdGlvbk1hcHBpbmc6R0t0LEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOldLdCxFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzpxS3QsQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmc6WUt0LEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nOlhLdH0sTDl0PXtSZXBlYXRXcmFwcGluZzokS3QsQ2xhbXBUb0VkZ2VXcmFwcGluZzpLS3QsTWlycm9yZWRSZXBlYXRXcmFwcGluZzpaS3R9LFA5dD17TmVhcmVzdEZpbHRlcjpKS3QsTmVhcmVzdE1pcG1hcE5lYXJlc3RGaWx0ZXI6UUt0LE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6dFp0LExpbmVhckZpbHRlcjplWnQsTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlcjpuWnQsTGluZWFyTWlwbWFwTGluZWFyRmlsdGVyOmladH07Y2xhc3MgTjl0IGV4dGVuZHMgJDZ0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLCJ1bmRlZmluZWQiPT10eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXAmJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGNyZWF0ZUltYWdlQml0bWFwKCkgbm90IHN1cHBvcnRlZC4iKSwidW5kZWZpbmVkIj09dHlwZW9mIGZldGNoJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBmZXRjaCgpIG5vdCBzdXBwb3J0ZWQuIiksdGhpcy5vcHRpb25zPXtwcmVtdWx0aXBseUFscGhhOiJub25lIn19c2V0T3B0aW9ucyh0KXtyZXR1cm4gdGhpcy5vcHRpb25zPXQsdGhpc31sb2FkKHQsZSxuLGkpe3ZvaWQgMD09PXQmJih0PSIiKSx2b2lkIDAhPT10aGlzLnBhdGgmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2NvbnN0IHI9dGhpcyxvPXE2dC5nZXQodCk7aWYodm9pZCAwIT09bylyZXR1cm4gci5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2UmJmUobyksci5tYW5hZ2VyLml0ZW1FbmQodCl9KSwwKSxvO2NvbnN0IGE9e307YS5jcmVkZW50aWFscz0iYW5vbnltb3VzIj09PXRoaXMuY3Jvc3NPcmlnaW4/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIsYS5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LGEpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJsb2IoKX0pKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodCxPYmplY3QuYXNzaWduKHIub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkpLnRoZW4oKGZ1bmN0aW9uKG4pe3E2dC5hZGQodCxuKSxlJiZlKG4pLHIubWFuYWdlci5pdGVtRW5kKHQpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpJiZpKGUpLHIubWFuYWdlci5pdGVtRXJyb3IodCksci5tYW5hZ2VyLml0ZW1FbmQodCl9KSksci5tYW5hZ2VyLml0ZW1TdGFydCh0KX19Tjl0LnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO2NsYXNzIEk5dHtjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iU2hhcGVQYXRoIix0aGlzLmNvbG9yPW5ldyAkUXQsdGhpcy5zdWJQYXRocz1bXSx0aGlzLmN1cnJlbnRQYXRoPW51bGx9bW92ZVRvKHQsZSl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGg9bmV3IGk5dCx0aGlzLnN1YlBhdGhzLnB1c2godGhpcy5jdXJyZW50UGF0aCksdGhpcy5jdXJyZW50UGF0aC5tb3ZlVG8odCxlKSx0aGlzfWxpbmVUbyh0LGUpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoLmxpbmVUbyh0LGUpLHRoaXN9cXVhZHJhdGljQ3VydmVUbyh0LGUsbixpKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5xdWFkcmF0aWNDdXJ2ZVRvKHQsZSxuLGkpLHRoaXN9YmV6aWVyQ3VydmVUbyh0LGUsbixpLHIsbyl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGguYmV6aWVyQ3VydmVUbyh0LGUsbixpLHIsbyksdGhpc31zcGxpbmVUaHJ1KHQpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoLnNwbGluZVRocnUodCksdGhpc310b1NoYXBlcyh0LGUpe2Z1bmN0aW9uIG4odCl7Y29uc3QgZT1bXTtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspe2NvbnN0IGk9dFtuXSxyPW5ldyByOXQ7ci5jdXJ2ZXM9aS5jdXJ2ZXMsZS5wdXNoKHIpfXJldHVybiBlfWZ1bmN0aW9uIGkodCxlKXtjb25zdCBuPWUubGVuZ3RoO2xldCBpPSExO2ZvcihsZXQgcj1uLTEsbz0wO288bjtyPW8rKyl7bGV0IG49ZVtyXSxhPWVbb10scz1hLngtbi54LGw9YS55LW4ueTtpZihNYXRoLmFicyhsKT5OdW1iZXIuRVBTSUxPTil7aWYobDwwJiYobj1lW29dLHM9LXMsYT1lW3JdLGw9LWwpLHQueTxuLnl8fHQueT5hLnkpY29udGludWU7aWYodC55PT09bi55KXtpZih0Lng9PT1uLngpcmV0dXJuITB9ZWxzZXtjb25zdCBlPWwqKHQueC1uLngpLXMqKHQueS1uLnkpO2lmKDA9PT1lKXJldHVybiEwO2lmKGU8MCljb250aW51ZTtpPSFpfX1lbHNle2lmKHQueSE9PW4ueSljb250aW51ZTtpZihhLng8PXQueCYmdC54PD1uLnh8fG4ueDw9dC54JiZ0Lng8PWEueClyZXR1cm4hMH19cmV0dXJuIGl9Y29uc3Qgcj1lNnQuaXNDbG9ja1dpc2Usbz10aGlzLnN1YlBhdGhzO2lmKDA9PT1vLmxlbmd0aClyZXR1cm5bXTtpZighMD09PWUpcmV0dXJuIG4obyk7bGV0IGEscyxsO2NvbnN0IGM9W107aWYoMT09PW8ubGVuZ3RoKXJldHVybiBzPW9bMF0sbD1uZXcgcjl0LGwuY3VydmVzPXMuY3VydmVzLGMucHVzaChsKSxjO2xldCB1PSFyKG9bMF0uZ2V0UG9pbnRzKCkpO3U9dD8hdTp1O2NvbnN0IGg9W10sZD1bXTtsZXQgcCxmLG09W10sZz0wO2RbZ109dm9pZCAwLG1bZ109W107Zm9yKGxldCBlPTAsbj1vLmxlbmd0aDtlPG47ZSsrKXM9b1tlXSxwPXMuZ2V0UG9pbnRzKCksYT1yKHApLGE9dD8hYTphLGE/KCF1JiZkW2ddJiZnKyssZFtnXT17czpuZXcgcjl0LHA6cH0sZFtnXS5zLmN1cnZlcz1zLmN1cnZlcyx1JiZnKyssbVtnXT1bXSk6bVtnXS5wdXNoKHtoOnMscDpwWzBdfSk7aWYoIWRbMF0pcmV0dXJuIG4obyk7aWYoZC5sZW5ndGg+MSl7bGV0IHQ9ITE7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MCxlPWQubGVuZ3RoO3Q8ZTt0KyspaFt0XT1bXTtmb3IobGV0IG49MCxyPWQubGVuZ3RoO248cjtuKyspe2NvbnN0IHI9bVtuXTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7Y29uc3QgYT1yW29dO2xldCBzPSEwO2ZvcihsZXQgcj0wO3I8ZC5sZW5ndGg7cisrKWkoYS5wLGRbcl0ucCkmJihuIT09ciYmZS5wdXNoKHtmcm9tczpuLHRvczpyLGhvbGU6b30pLHM/KHM9ITEsaFtyXS5wdXNoKGEpKTp0PSEwKTtzJiZoW25dLnB1c2goYSl9fWUubGVuZ3RoPjAmJih0fHwobT1oKSl9Zm9yKGxldCB0PTAsZT1kLmxlbmd0aDt0PGU7dCsrKXtsPWRbdF0ucyxjLnB1c2gobCksZj1tW3RdO2ZvcihsZXQgdD0wLGU9Zi5sZW5ndGg7dDxlO3QrKylsLmhvbGVzLnB1c2goZlt0XS5oKX1yZXR1cm4gY319Y2xhc3MgUjl0e2NvbnN0cnVjdG9yKHQpe3RoaXMudHlwZT0iRm9udCIsdGhpcy5kYXRhPXR9Z2VuZXJhdGVTaGFwZXModCxlPTEwMCl7Y29uc3Qgbj1bXSxpPShmdW5jdGlvbiByKHQsZSxuKXtjb25zdCBpPUFycmF5LmZyb20odCkscj1lL24ucmVzb2x1dGlvbixvPShuLmJvdW5kaW5nQm94LnlNYXgtbi5ib3VuZGluZ0JveC55TWluK24udW5kZXJsaW5lVGhpY2tuZXNzKSpyLGE9W107bGV0IHM9MCxsPTA7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0Kyspe2NvbnN0IGU9aVt0XTtpZigiXG4iPT09ZSlzPTAsbC09bztlbHNle2NvbnN0IHQ9Tzl0KGUscixzLGwsbik7cys9dC5vZmZzZXRYLGEucHVzaCh0LnBhdGgpfX1yZXR1cm4gYX0pKHQsZSx0aGlzLmRhdGEpO2ZvcihsZXQgdD0wLGU9aS5sZW5ndGg7dDxlO3QrKylBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuLGlbdF0udG9TaGFwZXMoKSk7cmV0dXJuIG59fWZ1bmN0aW9uIE85dCh0LGUsbixpLHIpe2NvbnN0IG89ci5nbHlwaHNbdF18fHIuZ2x5cGhzWyI/Il07aWYoIW8pcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcignVEhSRUUuRm9udDogY2hhcmFjdGVyICInK3QrJyIgZG9lcyBub3QgZXhpc3RzIGluIGZvbnQgZmFtaWx5ICcrci5mYW1pbHlOYW1lKyIuIik7Y29uc3QgYT1uZXcgSTl0O2xldCBzLGwsYyx1LGgsZCxwLGY7aWYoby5vKXtjb25zdCB0PW8uX2NhY2hlZE91dGxpbmV8fChvLl9jYWNoZWRPdXRsaW5lPW8uby5zcGxpdCgiICIpKTtmb3IobGV0IHI9MCxvPXQubGVuZ3RoO3I8bzspc3dpdGNoKHRbcisrXSl7Y2FzZSJtIjpzPXRbcisrXSplK24sbD10W3IrK10qZStpLGEubW92ZVRvKHMsbCk7YnJlYWs7Y2FzZSJsIjpzPXRbcisrXSplK24sbD10W3IrK10qZStpLGEubGluZVRvKHMsbCk7YnJlYWs7Y2FzZSJxIjpjPXRbcisrXSplK24sdT10W3IrK10qZStpLGg9dFtyKytdKmUrbixkPXRbcisrXSplK2ksYS5xdWFkcmF0aWNDdXJ2ZVRvKGgsZCxjLHUpO2JyZWFrO2Nhc2UiYiI6Yz10W3IrK10qZStuLHU9dFtyKytdKmUraSxoPXRbcisrXSplK24sZD10W3IrK10qZStpLHA9dFtyKytdKmUrbixmPXRbcisrXSplK2ksYS5iZXppZXJDdXJ2ZVRvKGgsZCxwLGYsYyx1KX19cmV0dXJue29mZnNldFg6by5oYSplLHBhdGg6YX19bGV0IHo5dDtSOXQucHJvdG90eXBlLmlzRm9udD0hMDtjb25zdCBEOXQ9e2dldENvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09ejl0JiYoejl0PW5ldyh3aW5kb3cuQXVkaW9Db250ZXh0fHx3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSksejl0fSxzZXRDb250ZXh0OmZ1bmN0aW9uKHQpe3o5dD10fX07Y2xhc3MgQjl0IGV4dGVuZHMgJDZ0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLG4saSl7Y29uc3Qgcj10aGlzLG89bmV3IFo2dCh0aGlzLm1hbmFnZXIpO28uc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLG8uc2V0UGF0aCh0aGlzLnBhdGgpLG8uc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLG8uc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxvLmxvYWQodCwoZnVuY3Rpb24obil7dHJ5e2NvbnN0IHQ9bi5zbGljZSgwKTtEOXQuZ2V0Q29udGV4dCgpLmRlY29kZUF1ZGlvRGF0YSh0LChmdW5jdGlvbih0KXtlKHQpfSkpfWNhdGNoKGUpe2k/aShlKTpjb25zb2xlLmVycm9yKGUpLHIubWFuYWdlci5pdGVtRXJyb3IodCl9fSksbixpKX19Y2xhc3MgSDl0IGV4dGVuZHMgUzl0e2NvbnN0cnVjdG9yKHQsZSxuPTEpe3N1cGVyKHZvaWQgMCxuKTtjb25zdCBpPShuZXcgJFF0KS5zZXQodCkscj0obmV3ICRRdCkuc2V0KGUpLG89bmV3IENKdChpLnIsaS5nLGkuYiksYT1uZXcgQ0p0KHIucixyLmcsci5iKSxzPU1hdGguc3FydChNYXRoLlBJKSxsPXMqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShvKS5hZGQoYSkubXVsdGlwbHlTY2FsYXIocyksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShvKS5zdWIoYSkubXVsdGlwbHlTY2FsYXIobCl9fUg5dC5wcm90b3R5cGUuaXNIZW1pc3BoZXJlTGlnaHRQcm9iZT0hMDtjbGFzcyBGOXQgZXh0ZW5kcyBTOXR7Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKHZvaWQgMCxlKTtjb25zdCBuPShuZXcgJFF0KS5zZXQodCk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uc2V0KG4ucixuLmcsbi5iKS5tdWx0aXBseVNjYWxhcigyKk1hdGguc3FydChNYXRoLlBJKSl9fUY5dC5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHRQcm9iZT0hMDtjb25zdCBWOXQ9bmV3IHJRdCxVOXQ9bmV3IHJRdDtjbGFzcyBqOXR7Y29uc3RydWN0b3IodD0hMCl7dGhpcy5hdXRvU3RhcnQ9dCx0aGlzLnN0YXJ0VGltZT0wLHRoaXMub2xkVGltZT0wLHRoaXMuZWxhcHNlZFRpbWU9MCx0aGlzLnJ1bm5pbmc9ITF9c3RhcnQoKXt0aGlzLnN0YXJ0VGltZT1HOXQoKSx0aGlzLm9sZFRpbWU9dGhpcy5zdGFydFRpbWUsdGhpcy5lbGFwc2VkVGltZT0wLHRoaXMucnVubmluZz0hMH1zdG9wKCl7dGhpcy5nZXRFbGFwc2VkVGltZSgpLHRoaXMucnVubmluZz0hMSx0aGlzLmF1dG9TdGFydD0hMX1nZXRFbGFwc2VkVGltZSgpe3JldHVybiB0aGlzLmdldERlbHRhKCksdGhpcy5lbGFwc2VkVGltZX1nZXREZWx0YSgpe2xldCB0PTA7aWYodGhpcy5hdXRvU3RhcnQmJiF0aGlzLnJ1bm5pbmcpcmV0dXJuIHRoaXMuc3RhcnQoKSwwO2lmKHRoaXMucnVubmluZyl7Y29uc3QgZT1HOXQoKTt0PShlLXRoaXMub2xkVGltZSkvMWUzLHRoaXMub2xkVGltZT1lLHRoaXMuZWxhcHNlZFRpbWUrPXR9cmV0dXJuIHR9fWZ1bmN0aW9uIEc5dCgpe3JldHVybigidW5kZWZpbmVkIj09dHlwZW9mIHBlcmZvcm1hbmNlP0RhdGU6cGVyZm9ybWFuY2UpLm5vdygpfWNvbnN0IFc5dD1uZXcgQ0p0LHE5dD1uZXcgVEp0LFk5dD1uZXcgQ0p0LFg5dD1uZXcgQ0p0O2NsYXNzICQ5dCBleHRlbmRzIGtRdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKCEwPT09dGhpcy5pc1BsYXlpbmcpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO2lmKCExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTt0aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7Y29uc3QgZT10aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7cmV0dXJuIGUuYnVmZmVyPXRoaXMuYnVmZmVyLGUubG9vcD10aGlzLmxvb3AsZS5sb29wU3RhcnQ9dGhpcy5sb29wU3RhcnQsZS5sb29wRW5kPXRoaXMubG9vcEVuZCxlLm9uZW5kZWQ9dGhpcy5vbkVuZGVkLmJpbmQodGhpcyksZS5zdGFydCh0aGlzLl9zdGFydGVkQXQsdGhpcy5fcHJvZ3Jlc3MrdGhpcy5vZmZzZXQsdGhpcy5kdXJhdGlvbiksdGhpcy5pc1BsYXlpbmc9ITAsdGhpcy5zb3VyY2U9ZSx0aGlzLnNldERldHVuZSh0aGlzLmRldHVuZSksdGhpcy5zZXRQbGF5YmFja1JhdGUodGhpcy5wbGF5YmFja1JhdGUpLHRoaXMuY29ubmVjdCgpfXBhdXNlKCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiYodGhpcy5fcHJvZ3Jlc3MrPU1hdGgubWF4KHRoaXMuY29udGV4dC5jdXJyZW50VGltZS10aGlzLl9zdGFydGVkQXQsMCkqdGhpcy5wbGF5YmFja1JhdGUsITA9PT10aGlzLmxvb3AmJih0aGlzLl9wcm9ncmVzcz10aGlzLl9wcm9ncmVzcyUodGhpcy5kdXJhdGlvbnx8dGhpcy5idWZmZXIuZHVyYXRpb24pKSx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9c3RvcCgpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHRoaXMuX3Byb2dyZXNzPTAsdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9Y29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PGU7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmNvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5jb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSEwLHRoaXN9ZGlzY29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PGU7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSExLHRoaXN9Z2V0RmlsdGVycygpe3JldHVybiB0aGlzLmZpbHRlcnN9c2V0RmlsdGVycyh0KXtyZXR1cm4gdHx8KHQ9W10pLCEwPT09dGhpcy5fY29ubmVjdGVkPyh0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXMuY29ubmVjdCgpKTp0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXN9c2V0RGV0dW5lKHQpe2lmKHRoaXMuZGV0dW5lPXQsdm9pZCAwIT09dGhpcy5zb3VyY2UuZGV0dW5lKXJldHVybiEwPT09dGhpcy5pc1BsYXlpbmcmJnRoaXMuc291cmNlLmRldHVuZS5zZXRUYXJnZXRBdFRpbWUodGhpcy5kZXR1bmUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc31nZXREZXR1bmUoKXtyZXR1cm4gdGhpcy5kZXR1bmV9Z2V0RmlsdGVyKCl7cmV0dXJuIHRoaXMuZ2V0RmlsdGVycygpWzBdfXNldEZpbHRlcih0KXtyZXR1cm4gdGhpcy5zZXRGaWx0ZXJzKHQ/W3RdOltdKX1zZXRQbGF5YmFja1JhdGUodCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9dCwhMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMucGxheWJhY2tSYXRlLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXM7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKX1nZXRQbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9b25FbmRlZCgpe3RoaXMuaXNQbGF5aW5nPSExfWdldExvb3AoKXtyZXR1cm4hMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sPyhjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpLCExKTp0aGlzLmxvb3B9c2V0TG9vcCh0KXtpZighMSE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB0aGlzLmxvb3A9dCwhMD09PXRoaXMuaXNQbGF5aW5nJiYodGhpcy5zb3VyY2UubG9vcD10aGlzLmxvb3ApLHRoaXM7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKX1zZXRMb29wU3RhcnQodCl7cmV0dXJuIHRoaXMubG9vcFN0YXJ0PXQsdGhpc31zZXRMb29wRW5kKHQpe3JldHVybiB0aGlzLmxvb3BFbmQ9dCx0aGlzfWdldFZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9fWNvbnN0IEs5dD1uZXcgQ0p0LFo5dD1uZXcgVEp0LEo5dD1uZXcgQ0p0LFE5dD1uZXcgQ0p0O2NsYXNzIHQ4dHtjb25zdHJ1Y3Rvcih0LGU9MjA0OCl7dGhpcy5hbmFseXNlcj10LmNvbnRleHQuY3JlYXRlQW5hbHlzZXIoKSx0aGlzLmFuYWx5c2VyLmZmdFNpemU9ZSx0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkodGhpcy5hbmFseXNlci5mcmVxdWVuY3lCaW5Db3VudCksdC5nZXRPdXRwdXQoKS5jb25uZWN0KHRoaXMuYW5hbHlzZXIpfWdldEZyZXF1ZW5jeURhdGEoKXtyZXR1cm4gdGhpcy5hbmFseXNlci5nZXRCeXRlRnJlcXVlbmN5RGF0YSh0aGlzLmRhdGEpLHRoaXMuZGF0YX1nZXRBdmVyYWdlRnJlcXVlbmN5KCl7bGV0IHQ9MDtjb25zdCBlPXRoaXMuZ2V0RnJlcXVlbmN5RGF0YSgpO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPWVbbl07cmV0dXJuIHQvZS5sZW5ndGh9fWNsYXNzIGU4dHtjb25zdHJ1Y3Rvcih0LGUsbil7bGV0IGkscixvO3N3aXRjaCh0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1uLGUpe2Nhc2UicXVhdGVybmlvbiI6aT10aGlzLl9zbGVycCxyPXRoaXMuX3NsZXJwQWRkaXRpdmUsbz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbix0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDYqbiksdGhpcy5fd29ya0luZGV4PTU7YnJlYWs7Y2FzZSJzdHJpbmciOmNhc2UiYm9vbCI6aT10aGlzLl9zZWxlY3Qscj10aGlzLl9zZWxlY3Qsbz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIsdGhpcy5idWZmZXI9bmV3IEFycmF5KDUqbik7YnJlYWs7ZGVmYXVsdDppPXRoaXMuX2xlcnAscj10aGlzLl9sZXJwQWRkaXRpdmUsbz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYyx0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDUqbil9dGhpcy5fbWl4QnVmZmVyUmVnaW9uPWksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmU9cix0aGlzLl9zZXRJZGVudGl0eT1vLHRoaXMuX29yaWdJbmRleD0zLHRoaXMuX2FkZEluZGV4PTQsdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCx0aGlzLnVzZUNvdW50PTAsdGhpcy5yZWZlcmVuY2VDb3VudD0wfWFjY3VtdWxhdGUodCxlKXtjb25zdCBuPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUscj10KmkraTtsZXQgbz10aGlzLmN1bXVsYXRpdmVXZWlnaHQ7aWYoMD09PW8pe2ZvcihsZXQgdD0wO3QhPT1pOysrdCluW3IrdF09blt0XTtvPWV9ZWxzZSBvKz1lLHRoaXMuX21peEJ1ZmZlclJlZ2lvbihuLHIsMCxlL28saSk7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PW99YWNjdW11bGF0ZUFkZGl0aXZlKHQpe2NvbnN0IGU9dGhpcy5idWZmZXIsbj10aGlzLnZhbHVlU2l6ZSxpPW4qdGhpcy5fYWRkSW5kZXg7MD09PXRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlJiZ0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGUsaSwwLHQsbiksdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUrPXR9YXBwbHkodCl7Y29uc3QgZT10aGlzLnZhbHVlU2l6ZSxuPXRoaXMuYnVmZmVyLGk9dCplK2Uscj10aGlzLmN1bXVsYXRpdmVXZWlnaHQsbz10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxhPXRoaXMuYmluZGluZzt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHI8MSYmdGhpcy5fbWl4QnVmZmVyUmVnaW9uKG4saSxlKnRoaXMuX29yaWdJbmRleCwxLXIsZSksbz4wJiZ0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShuLGksdGhpcy5fYWRkSW5kZXgqZSwxLGUpO2ZvcihsZXQgdD1lLHI9ZStlO3QhPT1yOysrdClpZihuW3RdIT09blt0K2VdKXthLnNldFZhbHVlKG4saSk7YnJlYWt9fXNhdmVPcmlnaW5hbFN0YXRlKCl7Y29uc3QgdD10aGlzLmJ1ZmZlcixlPXRoaXMudmFsdWVTaXplLG49ZSp0aGlzLl9vcmlnSW5kZXg7dGhpcy5iaW5kaW5nLmdldFZhbHVlKHQsbik7Zm9yKGxldCBpPWUscj1uO2khPT1yOysraSl0W2ldPXRbbitpJWVdO3RoaXMuX3NldElkZW50aXR5KCksdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MH1yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpe3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlciwzKnRoaXMudmFsdWVTaXplKX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtjb25zdCB0PXRoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplLGU9dCt0aGlzLnZhbHVlU2l6ZTtmb3IobGV0IG49dDtuPGU7bisrKXRoaXMuYnVmZmVyW25dPTB9X3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uKCl7dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKSx0aGlzLmJ1ZmZlclt0aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSszXT0xfV9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIoKXtjb25zdCB0PXRoaXMuX29yaWdJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXRoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplO2ZvcihsZXQgbj0wO248dGhpcy52YWx1ZVNpemU7bisrKXRoaXMuYnVmZmVyW2Urbl09dGhpcy5idWZmZXJbdCtuXX1fc2VsZWN0KHQsZSxuLGkscil7aWYoaT49LjUpZm9yKGxldCBpPTA7aSE9PXI7KytpKXRbZStpXT10W24raV19X3NsZXJwKHQsZSxuLGkpe1RKdC5zbGVycEZsYXQodCxlLHQsZSx0LG4saSl9X3NsZXJwQWRkaXRpdmUodCxlLG4saSxyKXtjb25zdCBvPXRoaXMuX3dvcmtJbmRleCpyO1RKdC5tdWx0aXBseVF1YXRlcm5pb25zRmxhdCh0LG8sdCxlLHQsbiksVEp0LnNsZXJwRmxhdCh0LGUsdCxlLHQsbyxpKX1fbGVycCh0LGUsbixpLHIpe2NvbnN0IG89MS1pO2ZvcihsZXQgYT0wO2EhPT1yOysrYSl7Y29uc3Qgcj1lK2E7dFtyXT10W3JdKm8rdFtuK2FdKml9fV9sZXJwQWRkaXRpdmUodCxlLG4saSxyKXtmb3IobGV0IG89MDtvIT09cjsrK28pe2NvbnN0IHI9ZStvO3Rbcl09dFtyXSt0W24rb10qaX19fWNvbnN0IG44dD1uZXcgUmVnRXhwKCJbXFxbXFxdXFwuOlxcL10iLCJnIiksaTh0PSJbXlxcW1xcXVxcLjpcXC9dIixyOHQ9IlteIisiXFxbXFxdXFwuOlxcLyIucmVwbGFjZSgiXFwuIiwiIikrIl0iLG84dD0vKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVwbGFjZSgiV0MiLGk4dCksYTh0PS8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoIldDT0QiLHI4dCksczh0PS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLGk4dCksbDh0PS9cLihXQyspKD86XFsoLispXF0pPy8uc291cmNlLnJlcGxhY2UoIldDIixpOHQpLGM4dD1uZXcgUmVnRXhwKCJeIitvOHQrYTh0K3M4dCtsOHQrIiQiKSx1OHQ9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl07Y2xhc3MgaDh0e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLnBhdGg9ZSx0aGlzLnBhcnNlZFBhdGg9bnx8aDh0LnBhcnNlVHJhY2tOYW1lKGUpLHRoaXMubm9kZT1oOHQuZmluZE5vZGUodCx0aGlzLnBhcnNlZFBhdGgubm9kZU5hbWUpfHx0LHRoaXMucm9vdE5vZGU9dCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfXN0YXRpYyBjcmVhdGUodCxlLG4pe3JldHVybiB0JiZ0LmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IGg4dC5Db21wb3NpdGUodCxlLG4pOm5ldyBoOHQodCxlLG4pfXN0YXRpYyBzYW5pdGl6ZU5vZGVOYW1lKHQpe3JldHVybiB0LnJlcGxhY2UoL1xzL2csIl8iKS5yZXBsYWNlKG44dCwiIil9c3RhdGljIHBhcnNlVHJhY2tOYW1lKHQpe2NvbnN0IGU9Yzh0LmV4ZWModCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IENhbm5vdCBwYXJzZSB0cmFja05hbWU6ICIrdCk7Y29uc3Qgbj17bm9kZU5hbWU6ZVsyXSxvYmplY3ROYW1lOmVbM10sb2JqZWN0SW5kZXg6ZVs0XSxwcm9wZXJ0eU5hbWU6ZVs1XSxwcm9wZXJ0eUluZGV4OmVbNl19LGk9bi5ub2RlTmFtZSYmbi5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHZvaWQgMCE9PWkmJi0xIT09aSl7Y29uc3QgdD1uLm5vZGVOYW1lLnN1YnN0cmluZyhpKzEpOy0xIT09dTh0LmluZGV4T2YodCkmJihuLm5vZGVOYW1lPW4ubm9kZU5hbWUuc3Vic3RyaW5nKDAsaSksbi5vYmplY3ROYW1lPXQpfWlmKG51bGw9PT1uLnByb3BlcnR5TmFtZXx8MD09PW4ucHJvcGVydHlOYW1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogY2FuIG5vdCBwYXJzZSBwcm9wZXJ0eU5hbWUgZnJvbSB0cmFja05hbWU6ICIrdCk7cmV0dXJuIG59c3RhdGljIGZpbmROb2RlKHQsZSl7aWYoIWV8fCIiPT09ZXx8Ii4iPT09ZXx8LTE9PT1lfHxlPT09dC5uYW1lfHxlPT09dC51dWlkKXJldHVybiB0O2lmKHQuc2tlbGV0b24pe2NvbnN0IG49dC5za2VsZXRvbi5nZXRCb25lQnlOYW1lKGUpO2lmKHZvaWQgMCE9PW4pcmV0dXJuIG59aWYodC5jaGlsZHJlbil7Y29uc3Qgbj1mdW5jdGlvbih0KXtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyl7Y29uc3Qgcj10W2ldO2lmKHIubmFtZT09PWV8fHIudXVpZD09PWUpcmV0dXJuIHI7Y29uc3Qgbz1uKHIuY2hpbGRyZW4pO2lmKG8pcmV0dXJuIG99cmV0dXJuIG51bGx9LGk9bih0LmNoaWxkcmVuKTtpZihpKXJldHVybiBpfXJldHVybiBudWxsfV9nZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fc2V0VmFsdWVfdW5hdmFpbGFibGUoKXt9X2dldFZhbHVlX2RpcmVjdCh0LGUpe3RbZV09dGhpcy5ub2RlW3RoaXMucHJvcGVydHlOYW1lXX1fZ2V0VmFsdWVfYXJyYXkodCxlKXtjb25zdCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2khPT1yOysraSl0W2UrK109bltpXX1fZ2V0VmFsdWVfYXJyYXlFbGVtZW50KHQsZSl7dFtlXT10aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XX1fZ2V0VmFsdWVfdG9BcnJheSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS50b0FycmF5KHQsZSl9X3NldFZhbHVlX2RpcmVjdCh0LGUpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W2VdfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TmVlZHNVcGRhdGUodCxlKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtlXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxlKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtlXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheSh0LGUpe2NvbnN0IG49dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgaT0wLHI9bi5sZW5ndGg7aSE9PXI7KytpKW5baV09dFtlKytdfV9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZSh0LGUpe2NvbnN0IG49dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgaT0wLHI9bi5sZW5ndGg7aSE9PXI7KytpKW5baV09dFtlKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7Y29uc3Qgbj10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCBpPTAscj1uLmxlbmd0aDtpIT09cjsrK2kpbltpXT10W2UrK107dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlFbGVtZW50KHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtlXX1fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlKHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtlXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W2VdLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxlKX1fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlKHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LGUpLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxlKSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9nZXRWYWx1ZV91bmJvdW5kKHQsZSl7dGhpcy5iaW5kKCksdGhpcy5nZXRWYWx1ZSh0LGUpfV9zZXRWYWx1ZV91bmJvdW5kKHQsZSl7dGhpcy5iaW5kKCksdGhpcy5zZXRWYWx1ZSh0LGUpfWJpbmQoKXtsZXQgdD10aGlzLm5vZGU7Y29uc3QgZT10aGlzLnBhcnNlZFBhdGgsbj1lLm9iamVjdE5hbWUsaT1lLnByb3BlcnR5TmFtZTtsZXQgcj1lLnByb3BlcnR5SW5kZXg7aWYodHx8KHQ9aDh0LmZpbmROb2RlKHRoaXMucm9vdE5vZGUsZS5ub2RlTmFtZSl8fHRoaXMucm9vdE5vZGUsdGhpcy5ub2RlPXQpLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5hdmFpbGFibGUsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZSwhdClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgbm9kZSBmb3IgdHJhY2s6ICIrdGhpcy5wYXRoKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iKTtpZihuKXtsZXQgaT1lLm9iamVjdEluZGV4O3N3aXRjaChuKXtjYXNlIm1hdGVyaWFscyI6aWYoIXQubWF0ZXJpYWwpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWwuIix0aGlzKTtpZighdC5tYXRlcmlhbC5tYXRlcmlhbHMpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwubWF0ZXJpYWxzIGFzIG5vZGUubWF0ZXJpYWwgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFscyBhcnJheS4iLHRoaXMpO3Q9dC5tYXRlcmlhbC5tYXRlcmlhbHM7YnJlYWs7Y2FzZSJib25lcyI6aWYoIXQuc2tlbGV0b24pcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gYm9uZXMgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgc2tlbGV0b24uIix0aGlzKTt0PXQuc2tlbGV0b24uYm9uZXM7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXS5uYW1lPT09aSl7aT1lO2JyZWFrfWJyZWFrO2RlZmF1bHQ6aWYodm9pZCAwPT09dFtuXSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUgdW5kZWZpbmVkLiIsdGhpcyk7dD10W25dfWlmKHZvaWQgMCE9PWkpe2lmKHZvaWQgMD09PXRbaV0pcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gYmluZCB0byBvYmplY3RJbmRleCBvZiBvYmplY3ROYW1lLCBidXQgaXMgdW5kZWZpbmVkLiIsdGhpcyx0KTt0PXRbaV19fWNvbnN0IG89dFtpXTtpZih2b2lkIDA9PT1vKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIrZS5ub2RlTmFtZSsiLiIraSsiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIix0KTtsZXQgYT10aGlzLlZlcnNpb25pbmcuTm9uZTt0aGlzLnRhcmdldE9iamVjdD10LHZvaWQgMCE9PXQubmVlZHNVcGRhdGU/YT10aGlzLlZlcnNpb25pbmcuTmVlZHNVcGRhdGU6dm9pZCAwIT09dC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlJiYoYT10aGlzLlZlcnNpb25pbmcuTWF0cml4V29ybGROZWVkc1VwZGF0ZSk7bGV0IHM9dGhpcy5CaW5kaW5nVHlwZS5EaXJlY3Q7aWYodm9pZCAwIT09cil7aWYoIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyI9PT1pKXtpZighdC5nZW9tZXRyeSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4iLHRoaXMpO2lmKCF0Lmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIG9uIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iLHRoaXMpO2lmKCF0Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMuIix0aGlzKTt2b2lkIDAhPT10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtyXSYmKHI9dC5tb3JwaFRhcmdldERpY3Rpb25hcnlbcl0pfXM9dGhpcy5CaW5kaW5nVHlwZS5BcnJheUVsZW1lbnQsdGhpcy5yZXNvbHZlZFByb3BlcnR5PW8sdGhpcy5wcm9wZXJ0eUluZGV4PXJ9ZWxzZSB2b2lkIDAhPT1vLmZyb21BcnJheSYmdm9pZCAwIT09by50b0FycmF5PyhzPXRoaXMuQmluZGluZ1R5cGUuSGFzRnJvbVRvQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PW8pOkFycmF5LmlzQXJyYXkobyk/KHM9dGhpcy5CaW5kaW5nVHlwZS5FbnRpcmVBcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9byk6dGhpcy5wcm9wZXJ0eU5hbWU9aTt0aGlzLmdldFZhbHVlPXRoaXMuR2V0dGVyQnlCaW5kaW5nVHlwZVtzXSx0aGlzLnNldFZhbHVlPXRoaXMuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmdbc11bYV19dW5iaW5kKCl7dGhpcy5ub2RlPW51bGwsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19aDh0LkNvbXBvc2l0ZT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsbil7Y29uc3QgaT1ufHxoOHQucGFyc2VUcmFja05hbWUoZSk7dGhpcy5fdGFyZ2V0R3JvdXA9dCx0aGlzLl9iaW5kaW5ncz10LnN1YnNjcmliZV8oZSxpKX1nZXRWYWx1ZSh0LGUpe3RoaXMuYmluZCgpO2NvbnN0IG49dGhpcy5fYmluZGluZ3NbdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfXTt2b2lkIDAhPT1uJiZuLmdldFZhbHVlKHQsZSl9c2V0VmFsdWUodCxlKXtjb25zdCBuPXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgaT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18scj1uLmxlbmd0aDtpIT09cjsrK2kpbltpXS5zZXRWYWx1ZSh0LGUpfWJpbmQoKXtjb25zdCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgZT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbj10Lmxlbmd0aDtlIT09bjsrK2UpdFtlXS5iaW5kKCl9dW5iaW5kKCl7Y29uc3QgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLG49dC5sZW5ndGg7ZSE9PW47KytlKXRbZV0udW5iaW5kKCl9fSxoOHQucHJvdG90eXBlLkJpbmRpbmdUeXBlPXtEaXJlY3Q6MCxFbnRpcmVBcnJheToxLEFycmF5RWxlbWVudDoyLEhhc0Zyb21Ub0FycmF5OjN9LGg4dC5wcm90b3R5cGUuVmVyc2lvbmluZz17Tm9uZTowLE5lZWRzVXBkYXRlOjEsTWF0cml4V29ybGROZWVkc1VwZGF0ZToyfSxoOHQucHJvdG90eXBlLkdldHRlckJ5QmluZGluZ1R5cGU9W2g4dC5wcm90b3R5cGUuX2dldFZhbHVlX2RpcmVjdCxoOHQucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSxoOHQucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheUVsZW1lbnQsaDh0LnByb3RvdHlwZS5fZ2V0VmFsdWVfdG9BcnJheV0saDh0LnByb3RvdHlwZS5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZz1bW2g4dC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdCxoOHQucHJvdG90eXBlLl9zZXRWYWx1ZV9kaXJlY3Rfc2V0TmVlZHNVcGRhdGUsaDh0LnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtoOHQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheSxoOHQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZSxoOHQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbaDh0LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50LGg4dC5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXROZWVkc1VwZGF0ZSxoOHQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW2g4dC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheSxoOHQucHJvdG90eXBlLl9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUsaDh0LnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdXTtjbGFzcyBkOHR7Y29uc3RydWN0b3IoKXt0aGlzLnV1aWQ9WFp0KCksdGhpcy5fb2JqZWN0cz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLHRoaXMubkNhY2hlZE9iamVjdHNfPTA7Y29uc3QgdD17fTt0aGlzLl9pbmRpY2VzQnlVVUlEPXQ7Zm9yKGxldCBlPTAsbj1hcmd1bWVudHMubGVuZ3RoO2UhPT1uOysrZSl0W2FyZ3VtZW50c1tlXS51dWlkXT1lO3RoaXMuX3BhdGhzPVtdLHRoaXMuX3BhcnNlZFBhdGhzPVtdLHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aD17fTtjb25zdCBlPXRoaXM7dGhpcy5zdGF0cz17b2JqZWN0czp7Z2V0IHRvdGFsKCl7cmV0dXJuIGUuX29iamVjdHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdGhpcy50b3RhbC1lLm5DYWNoZWRPYmplY3RzX319LGdldCBiaW5kaW5nc1Blck9iamVjdCgpe3JldHVybiBlLl9iaW5kaW5ncy5sZW5ndGh9fX1hZGQoKXtjb25zdCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELG49dGhpcy5fcGF0aHMsaT10aGlzLl9wYXJzZWRQYXRocyxyPXRoaXMuX2JpbmRpbmdzLG89ci5sZW5ndGg7bGV0IGEscz10Lmxlbmd0aCxsPXRoaXMubkNhY2hlZE9iamVjdHNfO2ZvcihsZXQgYz0wLHU9YXJndW1lbnRzLmxlbmd0aDtjIT09dTsrK2Mpe2NvbnN0IHU9YXJndW1lbnRzW2NdLGg9dS51dWlkO2xldCBkPWVbaF07aWYodm9pZCAwPT09ZCl7ZD1zKyssZVtoXT1kLHQucHVzaCh1KTtmb3IobGV0IHQ9MCxlPW87dCE9PWU7Kyt0KXJbdF0ucHVzaChuZXcgaDh0KHUsblt0XSxpW3RdKSl9ZWxzZSBpZihkPGwpe2E9dFtkXTtjb25zdCBzPS0tbCxjPXRbc107ZVtjLnV1aWRdPWQsdFtkXT1jLGVbaF09cyx0W3NdPXU7Zm9yKGxldCB0PTAsZT1vO3QhPT1lOysrdCl7Y29uc3QgZT1yW3RdO2xldCBvPWVbZF07ZVtkXT1lW3NdLHZvaWQgMD09PW8mJihvPW5ldyBoOHQodSxuW3RdLGlbdF0pKSxlW3NdPW99fWVsc2UgdFtkXSE9PWEmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkFuaW1hdGlvbk9iamVjdEdyb3VwOiBEaWZmZXJlbnQgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIFVVSUQgZGV0ZWN0ZWQuIENsZWFuIHRoZSBjYWNoZXMgb3IgcmVjcmVhdGUgeW91ciBpbmZyYXN0cnVjdHVyZSB3aGVuIHJlbG9hZGluZyBzY2VuZXMuIil9dGhpcy5uQ2FjaGVkT2JqZWN0c189bH1yZW1vdmUoKXtjb25zdCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELG49dGhpcy5fYmluZGluZ3MsaT1uLmxlbmd0aDtsZXQgcj10aGlzLm5DYWNoZWRPYmplY3RzXztmb3IobGV0IG89MCxhPWFyZ3VtZW50cy5sZW5ndGg7byE9PWE7KytvKXtjb25zdCBhPWFyZ3VtZW50c1tvXSxzPWEudXVpZCxsPWVbc107aWYodm9pZCAwIT09bCYmbD49cil7Y29uc3Qgbz1yKyssYz10W29dO2VbYy51dWlkXT1sLHRbbF09YyxlW3NdPW8sdFtvXT1hO2ZvcihsZXQgdD0wLGU9aTt0IT09ZTsrK3Qpe2NvbnN0IGU9blt0XSxpPWVbbF07ZVtsXT1lW29dLGVbb109aX19fXRoaXMubkNhY2hlZE9iamVjdHNfPXJ9dW5jYWNoZSgpe2NvbnN0IHQ9dGhpcy5fb2JqZWN0cyxlPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxpPW4ubGVuZ3RoO2xldCByPXRoaXMubkNhY2hlZE9iamVjdHNfLG89dC5sZW5ndGg7Zm9yKGxldCBhPTAscz1hcmd1bWVudHMubGVuZ3RoO2EhPT1zOysrYSl7Y29uc3Qgcz1hcmd1bWVudHNbYV0udXVpZCxsPWVbc107aWYodm9pZCAwIT09bClpZihkZWxldGUgZVtzXSxsPHIpe2NvbnN0IGE9LS1yLHM9dFthXSxjPS0tbyx1PXRbY107ZVtzLnV1aWRdPWwsdFtsXT1zLGVbdS51dWlkXT1hLHRbYV09dSx0LnBvcCgpO2ZvcihsZXQgdD0wLGU9aTt0IT09ZTsrK3Qpe2NvbnN0IGU9blt0XSxpPWVbY107ZVtsXT1lW2FdLGVbYV09aSxlLnBvcCgpfX1lbHNle2NvbnN0IHI9LS1vLGE9dFtyXTtyPjAmJihlW2EudXVpZF09bCksdFtsXT1hLHQucG9wKCk7Zm9yKGxldCB0PTAsZT1pO3QhPT1lOysrdCl7Y29uc3QgZT1uW3RdO2VbbF09ZVtyXSxlLnBvcCgpfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189cn1zdWJzY3JpYmVfKHQsZSl7Y29uc3Qgbj10aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGg7bGV0IGk9blt0XTtjb25zdCByPXRoaXMuX2JpbmRpbmdzO2lmKHZvaWQgMCE9PWkpcmV0dXJuIHJbaV07Y29uc3Qgbz10aGlzLl9wYXRocyxhPXRoaXMuX3BhcnNlZFBhdGhzLHM9dGhpcy5fb2JqZWN0cyxsPXRoaXMubkNhY2hlZE9iamVjdHNfLGM9bmV3IEFycmF5KHMubGVuZ3RoKTtpPXIubGVuZ3RoLG5bdF09aSxvLnB1c2godCksYS5wdXNoKGUpLHIucHVzaChjKTtmb3IobGV0IG49bCxpPXMubGVuZ3RoO24hPT1pOysrbiljW25dPW5ldyBoOHQoc1tuXSx0LGUpO3JldHVybiBjfXVuc3Vic2NyaWJlXyh0KXtjb25zdCBlPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxuPWVbdF07aWYodm9pZCAwIT09bil7Y29uc3QgaT10aGlzLl9wYXRocyxyPXRoaXMuX3BhcnNlZFBhdGhzLG89dGhpcy5fYmluZGluZ3MsYT1vLmxlbmd0aC0xLHM9b1thXTtlW3RbYV1dPW4sb1tuXT1zLG8ucG9wKCkscltuXT1yW2FdLHIucG9wKCksaVtuXT1pW2FdLGkucG9wKCl9fX1kOHQucHJvdG90eXBlLmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA9ITA7Y2xhc3MgcDh0e2NvbnN0cnVjdG9yKHQsZSxuPW51bGwsaT1lLmJsZW5kTW9kZSl7dGhpcy5fbWl4ZXI9dCx0aGlzLl9jbGlwPWUsdGhpcy5fbG9jYWxSb290PW4sdGhpcy5ibGVuZE1vZGU9aTtjb25zdCByPWUudHJhY2tzLG89ci5sZW5ndGgsYT1uZXcgQXJyYXkobykscz17ZW5kaW5nU3RhcnQ6Q1p0LGVuZGluZ0VuZDpDWnR9O2ZvcihsZXQgdD0wO3QhPT1vOysrdCl7Y29uc3QgZT1yW3RdLmNyZWF0ZUludGVycG9sYW50KG51bGwpO2FbdF09ZSxlLnNldHRpbmdzPXN9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncz1zLHRoaXMuX2ludGVycG9sYW50cz1hLHRoaXMuX3Byb3BlcnR5QmluZGluZ3M9bmV3IEFycmF5KG8pLHRoaXMuX2NhY2hlSW5kZXg9bnVsbCx0aGlzLl9ieUNsaXBDYWNoZUluZGV4PW51bGwsdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1udWxsLHRoaXMubG9vcD0yMjAxLHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xLHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT0xLHRoaXMud2VpZ2h0PTEsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PTEsdGhpcy5yZXBldGl0aW9ucz0xLzAsdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMuY2xhbXBXaGVuRmluaXNoZWQ9ITEsdGhpcy56ZXJvU2xvcGVBdFN0YXJ0PSEwLHRoaXMuemVyb1Nsb3BlQXRFbmQ9ITB9cGxheSgpe3JldHVybiB0aGlzLl9taXhlci5fYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpc31zdG9wKCl7cmV0dXJuIHRoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXMucmVzZXQoKX1yZXNldCgpe3JldHVybiB0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy50aW1lPTAsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuc3RvcEZhZGluZygpLnN0b3BXYXJwaW5nKCl9aXNSdW5uaW5nKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMucGF1c2VkJiYwIT09dGhpcy50aW1lU2NhbGUmJm51bGw9PT10aGlzLl9zdGFydFRpbWUmJnRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1pc1NjaGVkdWxlZCgpe3JldHVybiB0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9c3RhcnRBdCh0KXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lPXQsdGhpc31zZXRMb29wKHQsZSl7cmV0dXJuIHRoaXMubG9vcD10LHRoaXMucmVwZXRpdGlvbnM9ZSx0aGlzfXNldEVmZmVjdGl2ZVdlaWdodCh0KXtyZXR1cm4gdGhpcy53ZWlnaHQ9dCx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9dGhpcy5lbmFibGVkP3Q6MCx0aGlzLnN0b3BGYWRpbmcoKX1nZXRFZmZlY3RpdmVXZWlnaHQoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0fWZhZGVJbih0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwwLDEpfWZhZGVPdXQodCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMSwwKX1jcm9zc0ZhZGVGcm9tKHQsZSxuKXtpZih0LmZhZGVPdXQoZSksdGhpcy5mYWRlSW4oZSksbil7Y29uc3Qgbj10aGlzLl9jbGlwLmR1cmF0aW9uLGk9dC5fY2xpcC5kdXJhdGlvbixyPW4vaTt0LndhcnAoMSxpL24sZSksdGhpcy53YXJwKHIsMSxlKX1yZXR1cm4gdGhpc31jcm9zc0ZhZGVUbyh0LGUsbil7cmV0dXJuIHQuY3Jvc3NGYWRlRnJvbSh0aGlzLGUsbil9c3RvcEZhZGluZygpe2NvbnN0IHQ9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7cmV0dXJuIG51bGwhPT10JiYodGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9c2V0RWZmZWN0aXZlVGltZVNjYWxlKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10LHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT10aGlzLnBhdXNlZD8wOnQsdGhpcy5zdG9wV2FycGluZygpfWdldEVmZmVjdGl2ZVRpbWVTY2FsZSgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGV9c2V0RHVyYXRpb24odCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXRoaXMuX2NsaXAuZHVyYXRpb24vdCx0aGlzLnN0b3BXYXJwaW5nKCl9c3luY1dpdGgodCl7cmV0dXJuIHRoaXMudGltZT10LnRpbWUsdGhpcy50aW1lU2NhbGU9dC50aW1lU2NhbGUsdGhpcy5zdG9wV2FycGluZygpfWhhbHQodCl7cmV0dXJuIHRoaXMud2FycCh0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGUsMCx0KX13YXJwKHQsZSxuKXtjb25zdCBpPXRoaXMuX21peGVyLHI9aS50aW1lLG89dGhpcy50aW1lU2NhbGU7bGV0IGE9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7bnVsbD09PWEmJihhPWkuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1hKTtjb25zdCBzPWEucGFyYW1ldGVyUG9zaXRpb25zLGw9YS5zYW1wbGVWYWx1ZXM7cmV0dXJuIHNbMF09cixzWzFdPXIrbixsWzBdPXQvbyxsWzFdPWUvbyx0aGlzfXN0b3BXYXJwaW5nKCl7Y29uc3QgdD10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtyZXR1cm4gbnVsbCE9PXQmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31nZXRNaXhlcigpe3JldHVybiB0aGlzLl9taXhlcn1nZXRDbGlwKCl7cmV0dXJuIHRoaXMuX2NsaXB9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9sb2NhbFJvb3R8fHRoaXMuX21peGVyLl9yb290fV91cGRhdGUodCxlLG4saSl7aWYoIXRoaXMuZW5hYmxlZClyZXR1cm4gdm9pZCB0aGlzLl91cGRhdGVXZWlnaHQodCk7Y29uc3Qgcj10aGlzLl9zdGFydFRpbWU7aWYobnVsbCE9PXIpe2NvbnN0IGk9KHQtcikqbjtpZihpPDB8fDA9PT1uKXJldHVybjt0aGlzLl9zdGFydFRpbWU9bnVsbCxlPW4qaX1lKj10aGlzLl91cGRhdGVUaW1lU2NhbGUodCk7Y29uc3Qgbz10aGlzLl91cGRhdGVUaW1lKGUpLGE9dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2lmKGE+MCl7Y29uc3QgdD10aGlzLl9pbnRlcnBvbGFudHMsZT10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzO3N3aXRjaCh0aGlzLmJsZW5kTW9kZSl7Y2FzZSBQWnQ6Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuIT09aTsrK24pdFtuXS5ldmFsdWF0ZShvKSxlW25dLmFjY3VtdWxhdGVBZGRpdGl2ZShhKTticmVhaztjYXNlIExadDpkZWZhdWx0OmZvcihsZXQgbj0wLHI9dC5sZW5ndGg7biE9PXI7KytuKXRbbl0uZXZhbHVhdGUobyksZVtuXS5hY2N1bXVsYXRlKGksYSl9fX1fdXBkYXRlV2VpZ2h0KHQpe2xldCBlPTA7aWYodGhpcy5lbmFibGVkKXtlPXRoaXMud2VpZ2h0O2NvbnN0IG49dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobnVsbCE9PW4pe2NvbnN0IGk9bi5ldmFsdWF0ZSh0KVswXTtlKj1pLHQ+bi5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BGYWRpbmcoKSwwPT09aSYmKHRoaXMuZW5hYmxlZD0hMSkpfX1yZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PWUsZX1fdXBkYXRlVGltZVNjYWxlKHQpe2xldCBlPTA7aWYoIXRoaXMucGF1c2VkKXtlPXRoaXMudGltZVNjYWxlO2NvbnN0IG49dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7bnVsbCE9PW4mJihlKj1uLmV2YWx1YXRlKHQpWzBdLHQ+bi5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BXYXJwaW5nKCksMD09PWU/dGhpcy5wYXVzZWQ9ITA6dGhpcy50aW1lU2NhbGU9ZSkpfXJldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9ZSxlfV91cGRhdGVUaW1lKHQpe2NvbnN0IGU9dGhpcy5fY2xpcC5kdXJhdGlvbixuPXRoaXMubG9vcDtsZXQgaT10aGlzLnRpbWUrdCxyPXRoaXMuX2xvb3BDb3VudDtjb25zdCBvPTIyMDI9PT1uO2lmKDA9PT10KXJldHVybi0xPT09cj9pOm8mJjE9PSgxJnIpP2UtaTppO2lmKDIyMDA9PT1uKXstMT09PXImJih0aGlzLl9sb29wQ291bnQ9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLCEwLCExKSk7dDp7aWYoaT49ZSlpPWU7ZWxzZXtpZighKGk8MCkpe3RoaXMudGltZT1pO2JyZWFrIHR9aT0wfXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLHRoaXMudGltZT1pLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dDwwPy0xOjF9KX19ZWxzZXtpZigtMT09PXImJih0Pj0wPyhyPTAsdGhpcy5fc2V0RW5kaW5ncyghMCwwPT09dGhpcy5yZXBldGl0aW9ucyxvKSk6dGhpcy5fc2V0RW5kaW5ncygwPT09dGhpcy5yZXBldGl0aW9ucywhMCxvKSksaT49ZXx8aTwwKXtjb25zdCBuPU1hdGguZmxvb3IoaS9lKTtpLT1lKm4scis9TWF0aC5hYnMobik7Y29uc3QgYT10aGlzLnJlcGV0aXRpb25zLXI7aWYoYTw9MCl0aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSxpPXQ+MD9lOjAsdGhpcy50aW1lPWksdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PjA/MTotMX0pO2Vsc2V7aWYoMT09PWEpe2NvbnN0IGU9dDwwO3RoaXMuX3NldEVuZGluZ3MoZSwhZSxvKX1lbHNlIHRoaXMuX3NldEVuZGluZ3MoITEsITEsbyk7dGhpcy5fbG9vcENvdW50PXIsdGhpcy50aW1lPWksdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToibG9vcCIsYWN0aW9uOnRoaXMsbG9vcERlbHRhOm59KX19ZWxzZSB0aGlzLnRpbWU9aTtpZihvJiYxPT0oMSZyKSlyZXR1cm4gZS1pfXJldHVybiBpfV9zZXRFbmRpbmdzKHQsZSxuKXtjb25zdCBpPXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M7bj8oaS5lbmRpbmdTdGFydD1BWnQsaS5lbmRpbmdFbmQ9QVp0KTooaS5lbmRpbmdTdGFydD10P3RoaXMuemVyb1Nsb3BlQXRTdGFydD9BWnQ6Q1p0OmtadCxpLmVuZGluZ0VuZD1lP3RoaXMuemVyb1Nsb3BlQXRFbmQ/QVp0OkNadDprWnQpfV9zY2hlZHVsZUZhZGluZyh0LGUsbil7Y29uc3QgaT10aGlzLl9taXhlcixyPWkudGltZTtsZXQgbz10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtudWxsPT09byYmKG89aS5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpLHRoaXMuX3dlaWdodEludGVycG9sYW50PW8pO2NvbnN0IGE9by5wYXJhbWV0ZXJQb3NpdGlvbnMscz1vLnNhbXBsZVZhbHVlcztyZXR1cm4gYVswXT1yLHNbMF09ZSxhWzFdPXIrdCxzWzFdPW4sdGhpc319Y2xhc3MgZjh0IGV4dGVuZHMgalp0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fcm9vdD10LHRoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCksdGhpcy5fYWNjdUluZGV4PTAsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MX1fYmluZEFjdGlvbih0LGUpe2NvbnN0IG49dC5fbG9jYWxSb290fHx0aGlzLl9yb290LGk9dC5fY2xpcC50cmFja3Mscj1pLmxlbmd0aCxvPXQuX3Byb3BlcnR5QmluZGluZ3MsYT10Ll9pbnRlcnBvbGFudHMscz1uLnV1aWQsbD10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWU7bGV0IGM9bFtzXTt2b2lkIDA9PT1jJiYoYz17fSxsW3NdPWMpO2ZvcihsZXQgdD0wO3QhPT1yOysrdCl7Y29uc3Qgcj1pW3RdLGw9ci5uYW1lO2xldCB1PWNbbF07aWYodm9pZCAwIT09dSlvW3RdPXU7ZWxzZXtpZih1PW9bdF0sdm9pZCAwIT09dSl7bnVsbD09PXUuX2NhY2hlSW5kZXgmJigrK3UucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKHUscyxsKSk7Y29udGludWV9dT1uZXcgZTh0KGg4dC5jcmVhdGUobixsLGUmJmUuX3Byb3BlcnR5QmluZGluZ3NbdF0uYmluZGluZy5wYXJzZWRQYXRoKSxyLlZhbHVlVHlwZU5hbWUsci5nZXRWYWx1ZVNpemUoKSksKyt1LnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyh1LHMsbCksb1t0XT11fWFbdF0ucmVzdWx0QnVmZmVyPXUuYnVmZmVyfX1fYWN0aXZhdGVBY3Rpb24odCl7aWYoIXRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtpZihudWxsPT09dC5fY2FjaGVJbmRleCl7Y29uc3QgZT0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLG49dC5fY2xpcC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcFtuXTt0aGlzLl9iaW5kQWN0aW9uKHQsaSYmaS5rbm93bkFjdGlvbnNbMF0pLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHQsbixlKX1jb25zdCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0IT09bjsrK3Qpe2NvbnN0IG49ZVt0XTswPT1uLnVzZUNvdW50KysmJih0aGlzLl9sZW5kQmluZGluZyhuKSxuLnNhdmVPcmlnaW5hbFN0YXRlKCkpfXRoaXMuX2xlbmRBY3Rpb24odCl9fV9kZWFjdGl2YXRlQWN0aW9uKHQpe2lmKHRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtjb25zdCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0IT09bjsrK3Qpe2NvbnN0IG49ZVt0XTswPT0tLW4udXNlQ291bnQmJihuLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fdGFrZUJhY2tCaW5kaW5nKG4pKX10aGlzLl90YWtlQmFja0FjdGlvbih0KX19X2luaXRNZW1vcnlNYW5hZ2VyKCl7dGhpcy5fYWN0aW9ucz1bXSx0aGlzLl9uQWN0aXZlQWN0aW9ucz0wLHRoaXMuX2FjdGlvbnNCeUNsaXA9e30sdGhpcy5fYmluZGluZ3M9W10sdGhpcy5fbkFjdGl2ZUJpbmRpbmdzPTAsdGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lPXt9LHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHM9W10sdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHM9MDtjb25zdCB0PXRoaXM7dGhpcy5zdGF0cz17YWN0aW9uczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2FjdGlvbnMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUFjdGlvbnN9fSxiaW5kaW5nczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2JpbmRpbmdzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVCaW5kaW5nc319LGNvbnRyb2xJbnRlcnBvbGFudHM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9jb250cm9sSW50ZXJwb2xhbnRzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzfX19fV9pc0FjdGl2ZUFjdGlvbih0KXtjb25zdCBlPXQuX2NhY2hlSW5kZXg7cmV0dXJuIG51bGwhPT1lJiZlPHRoaXMuX25BY3RpdmVBY3Rpb25zfV9hZGRJbmFjdGl2ZUFjdGlvbih0LGUsbil7Y29uc3QgaT10aGlzLl9hY3Rpb25zLHI9dGhpcy5fYWN0aW9uc0J5Q2xpcDtsZXQgbz1yW2VdO2lmKHZvaWQgMD09PW8pbz17a25vd25BY3Rpb25zOlt0XSxhY3Rpb25CeVJvb3Q6e319LHQuX2J5Q2xpcENhY2hlSW5kZXg9MCxyW2VdPW87ZWxzZXtjb25zdCBlPW8ua25vd25BY3Rpb25zO3QuX2J5Q2xpcENhY2hlSW5kZXg9ZS5sZW5ndGgsZS5wdXNoKHQpfXQuX2NhY2hlSW5kZXg9aS5sZW5ndGgsaS5wdXNoKHQpLG8uYWN0aW9uQnlSb290W25dPXR9X3JlbW92ZUluYWN0aXZlQWN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fYWN0aW9ucyxuPWVbZS5sZW5ndGgtMV0saT10Ll9jYWNoZUluZGV4O24uX2NhY2hlSW5kZXg9aSxlW2ldPW4sZS5wb3AoKSx0Ll9jYWNoZUluZGV4PW51bGw7Y29uc3Qgcj10Ll9jbGlwLnV1aWQsbz10aGlzLl9hY3Rpb25zQnlDbGlwLGE9b1tyXSxzPWEua25vd25BY3Rpb25zLGw9c1tzLmxlbmd0aC0xXSxjPXQuX2J5Q2xpcENhY2hlSW5kZXg7bC5fYnlDbGlwQ2FjaGVJbmRleD1jLHNbY109bCxzLnBvcCgpLHQuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxkZWxldGUgYS5hY3Rpb25CeVJvb3RbKHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZF0sMD09PXMubGVuZ3RoJiZkZWxldGUgb1tyXSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpe2NvbnN0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3QhPT1uOysrdCl7Y29uc3Qgbj1lW3RdOzA9PS0tbi5yZWZlcmVuY2VDb3VudCYmdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKG4pfX1fbGVuZEFjdGlvbih0KXtjb25zdCBlPXRoaXMuX2FjdGlvbnMsbj10Ll9jYWNoZUluZGV4LGk9dGhpcy5fbkFjdGl2ZUFjdGlvbnMrKyxyPWVbaV07dC5fY2FjaGVJbmRleD1pLGVbaV09dCxyLl9jYWNoZUluZGV4PW4sZVtuXT1yfV90YWtlQmFja0FjdGlvbih0KXtjb25zdCBlPXRoaXMuX2FjdGlvbnMsbj10Ll9jYWNoZUluZGV4LGk9LS10aGlzLl9uQWN0aXZlQWN0aW9ucyxyPWVbaV07dC5fY2FjaGVJbmRleD1pLGVbaV09dCxyLl9jYWNoZUluZGV4PW4sZVtuXT1yfV9hZGRJbmFjdGl2ZUJpbmRpbmcodCxlLG4pe2NvbnN0IGk9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLHI9dGhpcy5fYmluZGluZ3M7bGV0IG89aVtlXTt2b2lkIDA9PT1vJiYobz17fSxpW2VdPW8pLG9bbl09dCx0Ll9jYWNoZUluZGV4PXIubGVuZ3RoLHIucHVzaCh0KX1fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKHQpe2NvbnN0IGU9dGhpcy5fYmluZGluZ3Msbj10LmJpbmRpbmcsaT1uLnJvb3ROb2RlLnV1aWQscj1uLnBhdGgsbz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsYT1vW2ldLHM9ZVtlLmxlbmd0aC0xXSxsPXQuX2NhY2hlSW5kZXg7cy5fY2FjaGVJbmRleD1sLGVbbF09cyxlLnBvcCgpLGRlbGV0ZSBhW3JdLDA9PT1PYmplY3Qua2V5cyhhKS5sZW5ndGgmJmRlbGV0ZSBvW2ldfV9sZW5kQmluZGluZyh0KXtjb25zdCBlPXRoaXMuX2JpbmRpbmdzLG49dC5fY2FjaGVJbmRleCxpPXRoaXMuX25BY3RpdmVCaW5kaW5ncysrLHI9ZVtpXTt0Ll9jYWNoZUluZGV4PWksZVtpXT10LHIuX2NhY2hlSW5kZXg9bixlW25dPXJ9X3Rha2VCYWNrQmluZGluZyh0KXtjb25zdCBlPXRoaXMuX2JpbmRpbmdzLG49dC5fY2FjaGVJbmRleCxpPS0tdGhpcy5fbkFjdGl2ZUJpbmRpbmdzLHI9ZVtpXTt0Ll9jYWNoZUluZGV4PWksZVtpXT10LHIuX2NhY2hlSW5kZXg9bixlW25dPXJ9X2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKXtjb25zdCB0PXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsZT10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cysrO2xldCBuPXRbZV07cmV0dXJuIHZvaWQgMD09PW4mJihuPW5ldyBSNnQobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksbi5fX2NhY2hlSW5kZXg9ZSx0W2VdPW4pLG59X3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpe2NvbnN0IGU9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxuPXQuX19jYWNoZUluZGV4LGk9LS10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyxyPWVbaV07dC5fX2NhY2hlSW5kZXg9aSxlW2ldPXQsci5fX2NhY2hlSW5kZXg9bixlW25dPXJ9Y2xpcEFjdGlvbih0LGUsbil7Y29uc3QgaT1lfHx0aGlzLl9yb290LHI9aS51dWlkO2xldCBvPSJzdHJpbmciPT10eXBlb2YgdD9HNnQuZmluZEJ5TmFtZShpLHQpOnQ7Y29uc3QgYT1udWxsIT09bz9vLnV1aWQ6dCxzPXRoaXMuX2FjdGlvbnNCeUNsaXBbYV07bGV0IGw9bnVsbDtpZih2b2lkIDA9PT1uJiYobj1udWxsIT09bz9vLmJsZW5kTW9kZTpMWnQpLHZvaWQgMCE9PXMpe2NvbnN0IHQ9cy5hY3Rpb25CeVJvb3Rbcl07aWYodm9pZCAwIT09dCYmdC5ibGVuZE1vZGU9PT1uKXJldHVybiB0O2w9cy5rbm93bkFjdGlvbnNbMF0sbnVsbD09PW8mJihvPWwuX2NsaXApfWlmKG51bGw9PT1vKXJldHVybiBudWxsO2NvbnN0IGM9bmV3IHA4dCh0aGlzLG8sZSxuKTtyZXR1cm4gdGhpcy5fYmluZEFjdGlvbihjLGwpLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKGMsYSxyKSxjfWV4aXN0aW5nQWN0aW9uKHQsZSl7Y29uc3Qgbj1lfHx0aGlzLl9yb290LGk9bi51dWlkLHI9InN0cmluZyI9PXR5cGVvZiB0P0c2dC5maW5kQnlOYW1lKG4sdCk6dCxvPXRoaXMuX2FjdGlvbnNCeUNsaXBbcj9yLnV1aWQ6dF07cmV0dXJuIHZvaWQgMCE9PW8mJm8uYWN0aW9uQnlSb290W2ldfHxudWxsfXN0b3BBbGxBY3Rpb24oKXtjb25zdCB0PXRoaXMuX2FjdGlvbnM7Zm9yKGxldCBlPXRoaXMuX25BY3RpdmVBY3Rpb25zLTE7ZT49MDstLWUpdFtlXS5zdG9wKCk7cmV0dXJuIHRoaXN9dXBkYXRlKHQpe2NvbnN0IGU9dGhpcy5fYWN0aW9ucyxuPXRoaXMuX25BY3RpdmVBY3Rpb25zLGk9dGhpcy50aW1lKz10Kj10aGlzLnRpbWVTY2FsZSxyPU1hdGguc2lnbih0KSxvPXRoaXMuX2FjY3VJbmRleF49MTtmb3IobGV0IGE9MDthIT09bjsrK2EpZVthXS5fdXBkYXRlKGksdCxyLG8pO2NvbnN0IGE9dGhpcy5fYmluZGluZ3Mscz10aGlzLl9uQWN0aXZlQmluZGluZ3M7Zm9yKGxldCB0PTA7dCE9PXM7Kyt0KWFbdF0uYXBwbHkobyk7cmV0dXJuIHRoaXN9c2V0VGltZSh0KXt0aGlzLnRpbWU9MDtmb3IobGV0IHQ9MDt0PHRoaXMuX2FjdGlvbnMubGVuZ3RoO3QrKyl0aGlzLl9hY3Rpb25zW3RdLnRpbWU9MDtyZXR1cm4gdGhpcy51cGRhdGUodCl9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9yb290fXVuY2FjaGVDbGlwKHQpe2NvbnN0IGU9dGhpcy5fYWN0aW9ucyxuPXQudXVpZCxpPXRoaXMuX2FjdGlvbnNCeUNsaXAscj1pW25dO2lmKHZvaWQgMCE9PXIpe2NvbnN0IHQ9ci5rbm93bkFjdGlvbnM7Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuIT09aTsrK24pe2NvbnN0IGk9dFtuXTt0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGkpO2NvbnN0IHI9aS5fY2FjaGVJbmRleCxvPWVbZS5sZW5ndGgtMV07aS5fY2FjaGVJbmRleD1udWxsLGkuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxvLl9jYWNoZUluZGV4PXIsZVtyXT1vLGUucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihpKX1kZWxldGUgaVtuXX19dW5jYWNoZVJvb3QodCl7Y29uc3QgZT10LnV1aWQsbj10aGlzLl9hY3Rpb25zQnlDbGlwO2Zvcihjb25zdCB0IGluIG4pe2NvbnN0IGk9blt0XS5hY3Rpb25CeVJvb3RbZV07dm9pZCAwIT09aSYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oaSksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oaSkpfWNvbnN0IGk9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lW2VdO2lmKHZvaWQgMCE9PWkpZm9yKGNvbnN0IHQgaW4gaSl7Y29uc3QgZT1pW3RdO2UucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcoZSl9fXVuY2FjaGVBY3Rpb24odCxlKXtjb25zdCBuPXRoaXMuZXhpc3RpbmdBY3Rpb24odCxlKTtudWxsIT09biYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obiksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obikpfX1mOHQucHJvdG90eXBlLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyPW5ldyBGbG9hdDMyQXJyYXkoMSk7Y2xhc3MgbTh0e2NvbnN0cnVjdG9yKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogVHlwZSBwYXJhbWV0ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4iKSx0PWFyZ3VtZW50c1sxXSksdGhpcy52YWx1ZT10fWNsb25lKCl7cmV0dXJuIG5ldyBtOHQodm9pZCAwPT09dGhpcy52YWx1ZS5jbG9uZT90aGlzLnZhbHVlOnRoaXMudmFsdWUuY2xvbmUoKSl9fWNsYXNzIGc4dCBleHRlbmRzICQ1dHtjb25zdHJ1Y3Rvcih0LGUsbj0xKXtzdXBlcih0LGUpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1ufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfWNsb25lKHQpe2NvbnN0IGU9c3VwZXIuY2xvbmUodCk7cmV0dXJuIGUubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsZX10b0pTT04odCl7Y29uc3QgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMCxlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9fWc4dC5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMDtjbGFzcyBfOHR7Y29uc3RydWN0b3IodCxlLG4saSxyKXt0aGlzLmJ1ZmZlcj10LHRoaXMudHlwZT1lLHRoaXMuaXRlbVNpemU9bix0aGlzLmVsZW1lbnRTaXplPWksdGhpcy5jb3VudD1yLHRoaXMudmVyc2lvbj0wfXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzfXNldFR5cGUodCxlKXtyZXR1cm4gdGhpcy50eXBlPXQsdGhpcy5lbGVtZW50U2l6ZT1lLHRoaXN9c2V0SXRlbVNpemUodCl7cmV0dXJuIHRoaXMuaXRlbVNpemU9dCx0aGlzfXNldENvdW50KHQpe3JldHVybiB0aGlzLmNvdW50PXQsdGhpc319ZnVuY3Rpb24geTh0KHQsZSl7cmV0dXJuIHQuZGlzdGFuY2UtZS5kaXN0YW5jZX1mdW5jdGlvbiB2OHQodCxlLG4saSl7aWYodC5sYXllcnMudGVzdChlLmxheWVycykmJnQucmF5Y2FzdChlLG4pLCEwPT09aSl7Y29uc3QgaT10LmNoaWxkcmVuO2ZvcihsZXQgdD0wLHI9aS5sZW5ndGg7dDxyO3QrKyl2OHQoaVt0XSxlLG4sITApfX1fOHQucHJvdG90eXBlLmlzR0xCdWZmZXJBdHRyaWJ1dGU9ITA7Y2xhc3MgYjh0e2NvbnN0cnVjdG9yKHQ9MSxlPTAsbj0wKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnBoaT1lLHRoaXMudGhldGE9bix0aGlzfXNldCh0LGUsbil7cmV0dXJuIHRoaXMucmFkaXVzPXQsdGhpcy5waGk9ZSx0aGlzLnRoZXRhPW4sdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLnBoaT10LnBoaSx0aGlzLnRoZXRhPXQudGhldGEsdGhpc31tYWtlU2FmZSgpe2NvbnN0IHQ9MWUtNjtyZXR1cm4gdGhpcy5waGk9TWF0aC5tYXgodCxNYXRoLm1pbihNYXRoLlBJLXQsdGhpcy5waGkpKSx0aGlzfXNldEZyb21WZWN0b3IzKHQpe3JldHVybiB0aGlzLnNldEZyb21DYXJ0ZXNpYW5Db29yZHModC54LHQueSx0LnopfXNldEZyb21DYXJ0ZXNpYW5Db29yZHModCxlLG4pe3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQodCp0K2UqZStuKm4pLDA9PT10aGlzLnJhZGl1cz8odGhpcy50aGV0YT0wLHRoaXMucGhpPTApOih0aGlzLnRoZXRhPU1hdGguYXRhbjIodCxuKSx0aGlzLnBoaT1NYXRoLmFjb3MoJFp0KGUvdGhpcy5yYWRpdXMsLTEsMSkpKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX1jb25zdCB4OHQ9bmV3IG1KdDtjbGFzcyB3OHR7Y29uc3RydWN0b3IodD1uZXcgbUp0KDEvMCwxLzApLGU9bmV3IG1KdCgtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspdGhpcy5leHBhbmRCeVBvaW50KHRbZV0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQsZSl7Y29uc3Qgbj14OHQuY29weShlKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKG4pLHRoaXMubWF4LmNvcHkodCkuYWRkKG4pLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5taW4uY29weSh0Lm1pbiksdGhpcy5tYXguY29weSh0Lm1heCksdGhpc31tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5taW4ueD10aGlzLm1pbi55PTEvMCx0aGlzLm1heC54PXRoaXMubWF4Lnk9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl9Z2V0Q2VudGVyKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfWdldFNpemUodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4LnkpfWNvbnRhaW5zQm94KHQpe3JldHVybiB0aGlzLm1pbi54PD10Lm1pbi54JiZ0Lm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD10Lm1pbi55JiZ0Lm1heC55PD10aGlzLm1heC55fWdldFBhcmFtZXRlcih0LGUpe3JldHVybiBlLnNldCgodC54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLCh0LnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSkpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4LnkpfWNsYW1wUG9pbnQodCxlKXtyZXR1cm4gZS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHg4dC5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIodCkubGVuZ3RoKCl9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX13OHQucHJvdG90eXBlLmlzQm94Mj0hMDtjb25zdCBTOHQ9bmV3IENKdCxNOHQ9bmV3IENKdDtjbGFzcyBFOHR7Y29uc3RydWN0b3IodD1uZXcgQ0p0LGU9bmV3IENKdCl7dGhpcy5zdGFydD10LHRoaXMuZW5kPWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMuc3RhcnQuY29weSh0KSx0aGlzLmVuZC5jb3B5KGUpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5zdGFydC5jb3B5KHQuc3RhcnQpLHRoaXMuZW5kLmNvcHkodC5lbmQpLHRoaXN9Z2V0Q2VudGVyKHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5zdGFydCx0aGlzLmVuZCkubXVsdGlwbHlTY2FsYXIoLjUpfWRlbHRhKHQpe3JldHVybiB0LnN1YlZlY3RvcnModGhpcy5lbmQsdGhpcy5zdGFydCl9ZGlzdGFuY2VTcSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuZW5kKX1kaXN0YW5jZSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG8odGhpcy5lbmQpfWF0KHQsZSl7cmV0dXJuIHRoaXMuZGVsdGEoZSkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMuc3RhcnQpfWNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXIodCxlKXtTOHQuc3ViVmVjdG9ycyh0LHRoaXMuc3RhcnQpLE04dC5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpO2NvbnN0IG49TTh0LmRvdChNOHQpO2xldCBpPU04dC5kb3QoUzh0KS9uO3JldHVybiBlJiYoaT0kWnQoaSwwLDEpKSxpfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlLG4pe2NvbnN0IGk9dGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQsZSk7cmV0dXJuIHRoaXMuZGVsdGEobikubXVsdGlwbHlTY2FsYXIoaSkuYWRkKHRoaXMuc3RhcnQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5zdGFydC5hcHBseU1hdHJpeDQodCksdGhpcy5lbmQuYXBwbHlNYXRyaXg0KHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmdC5lbmQuZXF1YWxzKHRoaXMuZW5kKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19Y2xhc3MgVDh0IGV4dGVuZHMga1F0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5tYXRlcmlhbD10LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7fSx0aGlzLmhhc1Bvc2l0aW9ucz0hMSx0aGlzLmhhc05vcm1hbHM9ITEsdGhpcy5oYXNDb2xvcnM9ITEsdGhpcy5oYXNVdnM9ITEsdGhpcy5wb3NpdGlvbkFycmF5PW51bGwsdGhpcy5ub3JtYWxBcnJheT1udWxsLHRoaXMuY29sb3JBcnJheT1udWxsLHRoaXMudXZBcnJheT1udWxsLHRoaXMuY291bnQ9MH19VDh0LnByb3RvdHlwZS5pc0ltbWVkaWF0ZVJlbmRlck9iamVjdD0hMDtjb25zdCBDOHQ9bmV3IENKdCxBOHQ9bmV3IENKdCxrOHQ9bmV3IHJRdCxMOHQ9bmV3IHJRdDtjbGFzcyBQOHQgZXh0ZW5kcyBVM3R7Y29uc3RydWN0b3IodCl7Y29uc3QgZT1OOHQodCksbj1uZXcgYjF0LGk9W10scj1bXSxvPW5ldyAkUXQoMCwwLDEpLGE9bmV3ICRRdCgwLDEsMCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IG49ZVt0XTtuLnBhcmVudCYmbi5wYXJlbnQuaXNCb25lJiYoaS5wdXNoKDAsMCwwKSxpLnB1c2goMCwwLDApLHIucHVzaChvLnIsby5nLG8uYiksci5wdXNoKGEucixhLmcsYS5iKSl9bi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgbDF0KGksMykpLG4uc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IGwxdChyLDMpKSxzdXBlcihuLG5ldyBJM3Qoe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSkpLHRoaXMudHlwZT0iU2tlbGV0b25IZWxwZXIiLHRoaXMuaXNTa2VsZXRvbkhlbHBlcj0hMCx0aGlzLnJvb3Q9dCx0aGlzLmJvbmVzPWUsdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITF9dXBkYXRlTWF0cml4V29ybGQodCl7Y29uc3QgZT10aGlzLmJvbmVzLG49dGhpcy5nZW9tZXRyeSxpPW4uZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO0w4dC5jb3B5KHRoaXMucm9vdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7Zm9yKGxldCB0PTAsbj0wO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCByPWVbdF07ci5wYXJlbnQmJnIucGFyZW50LmlzQm9uZSYmKGs4dC5tdWx0aXBseU1hdHJpY2VzKEw4dCxyLm1hdHJpeFdvcmxkKSxBOHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGs4dCksaS5zZXRYWVoobixBOHQueCxBOHQueSxBOHQueiksazh0Lm11bHRpcGx5TWF0cmljZXMoTDh0LHIucGFyZW50Lm1hdHJpeFdvcmxkKSxBOHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGs4dCksaS5zZXRYWVoobisxLEE4dC54LEE4dC55LEE4dC56KSxuKz0yKX1uLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMCxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KX19ZnVuY3Rpb24gTjh0KHQpe2NvbnN0IGU9W107dCYmdC5pc0JvbmUmJmUucHVzaCh0KTtmb3IobGV0IG49MDtuPHQuY2hpbGRyZW4ubGVuZ3RoO24rKyllLnB1c2guYXBwbHkoZSxOOHQodC5jaGlsZHJlbltuXSkpO3JldHVybiBlfWNvbnN0IEk4dD1uZXcgQ0p0LFI4dD1uZXcgJFF0LE84dD1uZXcgJFF0O2NsYXNzIHo4dCBleHRlbmRzIFUzdHtjb25zdHJ1Y3Rvcih0PTEwLGU9MTAsbj00NDczOTI0LGk9ODk0Nzg0OCl7bj1uZXcgJFF0KG4pLGk9bmV3ICRRdChpKTtjb25zdCByPWUvMixvPXQvZSxhPXQvMixzPVtdLGw9W107Zm9yKGxldCB0PTAsYz0wLHU9LWE7dDw9ZTt0KyssdSs9byl7cy5wdXNoKC1hLDAsdSxhLDAsdSkscy5wdXNoKHUsMCwtYSx1LDAsYSk7Y29uc3QgZT10PT09cj9uOmk7ZS50b0FycmF5KGwsYyksYys9MyxlLnRvQXJyYXkobCxjKSxjKz0zLGUudG9BcnJheShsLGMpLGMrPTMsZS50b0FycmF5KGwsYyksYys9M31jb25zdCBjPW5ldyBiMXQ7Yy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgbDF0KHMsMykpLGMuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IGwxdChsLDMpKSxzdXBlcihjLG5ldyBJM3Qoe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSkpLHRoaXMudHlwZT0iR3JpZEhlbHBlciJ9fWNvbnN0IEQ4dD1uZXcgQ0p0LEI4dD1uZXcgQ0p0LEg4dD1uZXcgQ0p0LEY4dD1uZXcgQ0p0LFY4dD1uZXcgVzF0O2Z1bmN0aW9uIFU4dCh0LGUsbixpLHIsbyxhKXtGOHQuc2V0KHIsbyxhKS51bnByb2plY3QoaSk7Y29uc3Qgcz1lW3RdO2lmKHZvaWQgMCE9PXMpe2NvbnN0IHQ9bi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7Zm9yKGxldCBlPTAsbj1zLmxlbmd0aDtlPG47ZSsrKXQuc2V0WFlaKHNbZV0sRjh0LngsRjh0LnksRjh0LnopfX1jb25zdCBqOHQ9bmV3IExKdDtjbGFzcyBHOHQgZXh0ZW5kcyBVM3R7Y29uc3RydWN0b3IodCxlPTE2Nzc2OTYwKXtjb25zdCBuPW5ldyBVaW50MTZBcnJheShbMCwxLDEsMiwyLDMsMywwLDQsNSw1LDYsNiw3LDcsNCwwLDQsMSw1LDIsNiwzLDddKSxpPW5ldyBGbG9hdDMyQXJyYXkoMjQpLHI9bmV3IGIxdDtyLnNldEluZGV4KG5ldyBRUXQobiwxKSksci5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgUVF0KGksMykpLHN1cGVyKHIsbmV3IEkzdCh7Y29sb3I6ZSx0b25lTWFwcGVkOiExfSkpLHRoaXMub2JqZWN0PXQsdGhpcy50eXBlPSJCb3hIZWxwZXIiLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSh0KXtpZih2b2lkIDAhPT10JiZjb25zb2xlLndhcm4oIlRIUkVFLkJveEhlbHBlcjogLnVwZGF0ZSgpIGhhcyBubyBsb25nZXIgYXJndW1lbnRzLiIpLHZvaWQgMCE9PXRoaXMub2JqZWN0JiZqOHQuc2V0RnJvbU9iamVjdCh0aGlzLm9iamVjdCksajh0LmlzRW1wdHkoKSlyZXR1cm47Y29uc3QgZT1qOHQubWluLG49ajh0Lm1heCxpPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbixyPWkuYXJyYXk7clswXT1uLngsclsxXT1uLnksclsyXT1uLnosclszXT1lLngscls0XT1uLnkscls1XT1uLnoscls2XT1lLngscls3XT1lLnkscls4XT1uLnoscls5XT1uLngsclsxMF09ZS55LHJbMTFdPW4ueixyWzEyXT1uLngsclsxM109bi55LHJbMTRdPWUueixyWzE1XT1lLngsclsxNl09bi55LHJbMTddPWUueixyWzE4XT1lLngsclsxOV09ZS55LHJbMjBdPWUueixyWzIxXT1uLngsclsyMl09ZS55LHJbMjNdPWUueixpLm5lZWRzVXBkYXRlPSEwLHRoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9c2V0RnJvbU9iamVjdCh0KXtyZXR1cm4gdGhpcy5vYmplY3Q9dCx0aGlzLnVwZGF0ZSgpLHRoaXN9Y29weSh0KXtyZXR1cm4gVTN0LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLm9iamVjdD10Lm9iamVjdCx0aGlzfX1jb25zdCBXOHQ9bmV3IENKdDtsZXQgcTh0LFk4dDtjbGFzcyBYOHQgZXh0ZW5kcyBVM3R7Y29uc3RydWN0b3IodD0xKXtjb25zdCBlPVswLDAsMCx0LDAsMCwwLDAsMCwwLHQsMCwwLDAsMCwwLDAsdF0sbj1uZXcgYjF0O24uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGwxdChlLDMpKSxuLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBsMXQoWzEsMCwwLDEsLjYsMCwwLDEsMCwuNiwxLDAsMCwwLDEsMCwuNiwxXSwzKSksc3VwZXIobixuZXcgSTN0KHt2ZXJ0ZXhDb2xvcnM6ITAsdG9uZU1hcHBlZDohMX0pKSx0aGlzLnR5cGU9IkF4ZXNIZWxwZXIifXNldENvbG9ycyh0LGUsbil7Y29uc3QgaT1uZXcgJFF0LHI9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLmFycmF5O3JldHVybiBpLnNldCh0KSxpLnRvQXJyYXkociwwKSxpLnRvQXJyYXkociwzKSxpLnNldChlKSxpLnRvQXJyYXkociw2KSxpLnRvQXJyYXkociw5KSxpLnNldChuKSxpLnRvQXJyYXkociwxMiksaS50b0FycmF5KHIsMTUpLHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5uZWVkc1VwZGF0ZT0hMCx0aGlzfWRpc3Bvc2UoKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX19Y29uc3QgJDh0PW5ldyBGbG9hdDMyQXJyYXkoMSksSzh0PW5ldyBJbnQzMkFycmF5KCQ4dC5idWZmZXIpO2g0dC5jcmVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gY29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGg0dC5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZSx0fSxpOXQucHJvdG90eXBlLmZyb21Qb2ludHM9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuIiksdGhpcy5zZXRGcm9tUG9pbnRzKHQpfSx6OHQucHJvdG90eXBlLnNldENvbG9ycz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdyaWRIZWxwZXI6IHNldENvbG9ycygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBhc3MgdGhlbSBpbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZC4iKX0sUDh0LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Ta2VsZXRvbkhlbHBlcjogdXBkYXRlKCkgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIGNhbGxlZC4iKX0sJDZ0LnByb3RvdHlwZS5leHRyYWN0VXJsQmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Mb2FkZXI6IC5leHRyYWN0VXJsQmFzZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5Mb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSgpIGluc3RlYWQuIiksRTl0LmV4dHJhY3RVcmxCYXNlKHQpfSwkNnQuSGFuZGxlcnM9e2FkZDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuYWRkKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmFkZEhhbmRsZXIoKSBpbnN0ZWFkLiIpfSxnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmdldCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5nZXRIYW5kbGVyKCkgaW5zdGVhZC4iKX19LHc4dC5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcih0KX0sdzh0LnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX0sdzh0LnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkJveD1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuIiksdGhpcy5pbnRlcnNlY3RzQm94KHQpfSx3OHQucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKHQpfSxMSnQucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIodCl9LExKdC5wcm90b3R5cGUuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9LExKdC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveCh0KX0sTEp0LnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKHQpfSxMSnQucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKHQpfSwkSnQucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9LGkwdC5wcm90b3R5cGUuc2V0RnJvbU1hdHJpeD1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GcnVzdHVtOiAuc2V0RnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCkuIiksdGhpcy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KX0sRTh0LnByb3RvdHlwZS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTGluZTM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcih0KX0sZ0p0LnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KHQsZSl9LGdKdC5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSx0LmFwcGx5TWF0cml4Myh0aGlzKX0sZ0p0LnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGdKdC5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLHQuYXBwbHlNYXRyaXgzKHRoaXMpfSxnSnQucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGdKdC5wcm90b3R5cGUuZ2V0SW52ZXJzZT1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KHQpLmludmVydCgpfSxyUXQucHJvdG90eXBlLmV4dHJhY3RQb3NpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZXh0cmFjdFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuY29weVBvc2l0aW9uKCkuIiksdGhpcy5jb3B5UG9zaXRpb24odCl9LHJRdC5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheSh0LGUpfSxyUXQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLChuZXcgQ0p0KS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMyl9LHJRdC5wcm90b3R5cGUuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbj1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkuIiksdGhpcy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KX0sclF0LnByb3RvdHlwZS5tdWx0aXBseVRvQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVRvQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyUXQucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDQodGhpcyl9LHJRdC5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3I0PWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSx0LmFwcGx5TWF0cml4NCh0aGlzKX0sclF0LnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJRdC5wcm90b3R5cGUucm90YXRlQXhpcz1mdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLHQudHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfSxyUXQucHJvdG90eXBlLmNyb3NzVmVjdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5jcm9zc1ZlY3RvcigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLHQuYXBwbHlNYXRyaXg0KHRoaXMpfSxyUXQucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyUXQucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJRdC5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVZKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sclF0LnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVooKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyUXQucHJvdG90eXBlLnJvdGF0ZUJ5QXhpcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVCeUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyUXQucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSx0LmFwcGx5TWF0cml4NCh0aGlzKX0sclF0LnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyUXQucHJvdG90eXBlLm1ha2VGcnVzdHVtPWZ1bmN0aW9uKHQsZSxuLGkscixvKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpLHRoaXMubWFrZVBlcnNwZWN0aXZlKHQsZSxpLG4scixvKX0sclF0LnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkodCkuaW52ZXJ0KCl9LHQwdC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25MaW5lPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAuaXNJbnRlcnNlY3Rpb25MaW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0xpbmUoKS4iKSx0aGlzLmludGVyc2VjdHNMaW5lKHQpfSxUSnQucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKSx0LmFwcGx5UXVhdGVybmlvbih0aGlzKX0sVEp0LnByb3RvdHlwZS5pbnZlcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLmludmVyc2UoKSBoYXMgYmVlbiByZW5hbWVkIHRvIGludmVydCgpLiIpLHRoaXMuaW52ZXJ0KCl9LGlRdC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuIiksdGhpcy5pbnRlcnNlY3RzQm94KHQpfSxpUXQucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uUGxhbmU9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1BsYW5lKHQpfSxpUXQucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uU3BoZXJlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1NwaGVyZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZSh0KX0sRlF0LnByb3RvdHlwZS5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5hcmVhKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QXJlYSgpLiIpLHRoaXMuZ2V0QXJlYSgpfSxGUXQucHJvdG90eXBlLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksdGhpcy5nZXRCYXJ5Y29vcmQodCxlKX0sRlF0LnByb3RvdHlwZS5taWRwb2ludD1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm1pZHBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0TWlkcG9pbnQoKS4iKSx0aGlzLmdldE1pZHBvaW50KHQpfSxGUXQucHJvdG90eXBlbm9ybWFsPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIiksdGhpcy5nZXROb3JtYWwodCl9LEZRdC5wcm90b3R5cGUucGxhbmU9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIiksdGhpcy5nZXRQbGFuZSh0KX0sRlF0LmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbih0LGUsbixpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksRlF0LmdldEJhcnljb29yZCh0LGUsbixpLHIpfSxGUXQubm9ybWFsPWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIiksRlF0LmdldE5vcm1hbCh0LGUsbixpKX0scjl0LnByb3RvdHlwZS5leHRyYWN0QWxsUG9pbnRzPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cmFjdEFsbFBvaW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZXh0cmFjdFBvaW50cygpIGluc3RlYWQuIiksdGhpcy5leHRyYWN0UG9pbnRzKHQpfSxyOXQucHJvdG90eXBlLmV4dHJ1ZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRydWRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV4dHJ1ZGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IHI2dCh0aGlzLHQpfSxyOXQucHJvdG90eXBlLm1ha2VHZW9tZXRyeT1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLm1ha2VHZW9tZXRyeSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBTaGFwZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgaDZ0KHRoaXMsdCl9LG1KdC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxuKX0sbUp0LnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyh0KX0sbUp0LnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sQ0p0LnByb3RvdHlwZS5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLiIpfSxDSnQucHJvdG90eXBlLnNldEV1bGVyRnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUXVhdGVybmlvbigpIGluc3RlYWQuIil9LENKdC5wcm90b3R5cGUuZ2V0UG9zaXRpb25Gcm9tTWF0cml4PWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRQb3NpdGlvbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4UG9zaXRpb24oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhQb3NpdGlvbih0KX0sQ0p0LnByb3RvdHlwZS5nZXRTY2FsZUZyb21NYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFNjYWxlRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhTY2FsZSgpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFNjYWxlKHQpfSxDSnQucHJvdG90eXBlLmdldENvbHVtbkZyb21NYXRyaXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0Q29sdW1uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhDb2x1bW4oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oZSx0KX0sQ0p0LnByb3RvdHlwZS5hcHBseVByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFwcGx5UHJvamVjdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuYXBwbHlNYXRyaXg0KCBtICkgaW5zdGVhZC4iKSx0aGlzLmFwcGx5TWF0cml4NCh0KX0sQ0p0LnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLG4pfSxDSnQucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKHQpfSxDSnQucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfSx3SnQucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil9LHdKdC5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9LGtRdC5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWU9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLiIpLHRoaXMuZ2V0T2JqZWN0QnlOYW1lKHQpfSxrUXQucHJvdG90eXBlLnJlbmRlckRlcHRoPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnJlbmRlckRlcHRoIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAucmVuZGVyT3JkZXIsIGluc3RlYWQuIil9LGtRdC5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnRyYW5zbGF0ZU9uQXhpcyggYXhpcywgZGlzdGFuY2UgKSBpbnN0ZWFkLiIpLHRoaXMudHJhbnNsYXRlT25BeGlzKGUsdCl9LGtRdC5wcm90b3R5cGUuZ2V0V29ybGRSb3RhdGlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRSb3RhdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5PYmplY3QzRC5nZXRXb3JsZFF1YXRlcm5pb24oIHRhcmdldCApIGluc3RlYWQuIil9LGtRdC5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5hcHBseU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmFwcGx5TWF0cml4NCgpLiIpLHRoaXMuYXBwbHlNYXRyaXg0KHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhrUXQucHJvdG90eXBlLHtldWxlck9yZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXR9fSx1c2VRdWF0ZXJuaW9uOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KSxCMXQucHJvdG90eXBlLnNldERyYXdNb2RlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQjF0LnByb3RvdHlwZSx7ZHJhd01vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4iKSwwfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSksdzN0LnByb3RvdHlwZS5pbml0Qm9uZXM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Ta2lubmVkTWVzaDogaW5pdEJvbmVzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scTF0LnByb3RvdHlwZS5zZXRMZW5zPWZ1bmN0aW9uKHQsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYS5zZXRMZW5zIGlzIGRlcHJlY2F0ZWQuIFVzZSAuc2V0Rm9jYWxMZW5ndGggYW5kIC5maWxtR2F1Z2UgZm9yIGEgcGhvdG9ncmFwaGljIHNldHVwLiIpLHZvaWQgMCE9PWUmJih0aGlzLmZpbG1HYXVnZT1lKSx0aGlzLnNldEZvY2FsTGVuZ3RoKHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvOXQucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9dH19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD10fX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD10fX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9dH19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPXR9fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9dH19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPXR9fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPXR9fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9dH19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9dH19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUVF0LnByb3RvdHlwZSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5jb3VudCBpbnN0ZWFkLiIpLHRoaXMuYXJyYXkubGVuZ3RofX0sZHluYW1pYzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy51c2FnZT09PVZadH0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKFZadCl9fX0pLFFRdC5wcm90b3R5cGUuc2V0RHluYW1pYz1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZSghMD09PXQ/Vlp0OkZadCksdGhpc30sUVF0LnByb3RvdHlwZS5jb3B5SW5kaWNlc0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuY29weUluZGljZXNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFFRdC5wcm90b3R5cGUuc2V0QXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5zZXRBcnJheSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgQnVmZmVyR2VvbWV0cnkgLnNldEF0dHJpYnV0ZSB0byByZXBsYWNlL3Jlc2l6ZSBhdHRyaWJ1dGUgYnVmZmVycyIpfSxiMXQucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleCh0KX0sYjF0LnByb3RvdHlwZS5hZGRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEF0dHJpYnV0ZSgpLiIpLGUmJmUuaXNCdWZmZXJBdHRyaWJ1dGV8fGUmJmUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT8iaW5kZXgiPT09dD8oY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5hZGRBdHRyaWJ1dGU6IFVzZSAuc2V0SW5kZXgoKSBmb3IgaW5kZXggYXR0cmlidXRlLiIpLHRoaXMuc2V0SW5kZXgoZSksdGhpcyk6dGhpcy5zZXRBdHRyaWJ1dGUodCxlKTooY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIG5vdyBleHBlY3RzICggbmFtZSwgYXR0cmlidXRlICkuIiksdGhpcy5zZXRBdHRyaWJ1dGUodCxuZXcgUVF0KGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pKSl9LGIxdC5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMCE9PW4mJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cCh0LGUpfSxiMXQucHJvdG90eXBlLmNsZWFyRHJhd0NhbGxzPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNsZWFyRHJhd0NhbGxzKCkgaXMgbm93IC5jbGVhckdyb3VwcygpLiIpLHRoaXMuY2xlYXJHcm91cHMoKX0sYjF0LnByb3RvdHlwZS5jb21wdXRlT2Zmc2V0cz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlT2Zmc2V0cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGIxdC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUodCl9LGIxdC5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hcHBseU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmFwcGx5TWF0cml4NCgpLiIpLHRoaXMuYXBwbHlNYXRyaXg0KHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhiMXQucHJvdG90eXBlLHtkcmF3Y2FsbHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmRyYXdjYWxscyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIiksdGhpcy5ncm91cHN9fSxvZmZzZXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLm9mZnNldHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX19KSwkNXQucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZSghMD09PXQ/Vlp0OkZadCksdGhpc30sJDV0LnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0scjZ0LnByb3RvdHlwZS5nZXRBcnJheXM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5nZXRBcnJheXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyNnQucHJvdG90eXBlLmFkZFNoYXBlTGlzdD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmFkZFNoYXBlTGlzdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHI2dC5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFg1dC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lOiAuZGlzcG9zZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LG04dC5wcm90b3R5cGUub25VcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiAub25VcGRhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2Ugb2JqZWN0Lm9uQmVmb3JlUmVuZGVyKCkgaW5zdGVhZC4iKSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhVUXQucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyAkUXR9fSxzaGFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPTE9PT10fX0sc3RlbmNpbE1hc2s6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4iKSx0aGlzLnN0ZW5jaWxGdW5jTWFzaz10fX0sdmVydGV4VGFuZ2VudHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEcxdC5wcm90b3R5cGUse2Rlcml2YXRpdmVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlc30sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuIFNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIiksdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzPXR9fX0pLEc1dC5wcm90b3R5cGUuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24odCxlLG4saSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY2xlYXJUYXJnZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGFuZCAuY2xlYXIoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0UmVuZGVyVGFyZ2V0KHQpLHRoaXMuY2xlYXIoZSxuLGkpfSxHNXQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYW5pbWF0ZSgpIGlzIG5vdyAuc2V0QW5pbWF0aW9uTG9vcCgpLiIpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcCh0KX0sRzV0LnByb3RvdHlwZS5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgpLiIpLHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCl9LEc1dC5wcm90b3R5cGUuZ2V0TWF4QW5pc290cm9weT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLiIpLHRoaXMuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKX0sRzV0LnByb3RvdHlwZS5nZXRQcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0UHJlY2lzaW9uKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMucHJlY2lzaW9uLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnByZWNpc2lvbn0sRzV0LnByb3RvdHlwZS5yZXNldEdMU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLiIpLHRoaXMuc3RhdGUucmVzZXQoKX0sRzV0LnByb3RvdHlwZS5zdXBwb3J0c0Zsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iil9LEc1dC5wcm90b3R5cGUuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXQnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpfSxHNXQucHJvdG90eXBlLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfSxHNXQucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9LEc1dC5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil9LEc1dC5wcm90b3R5cGUuc3VwcG9ydHNCbGVuZE1pbk1heD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0JsZW5kTWluTWF4KCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0VYVF9ibGVuZF9taW5tYXgnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfSxHNXQucHJvdG90eXBlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzfSxHNXQucHJvdG90eXBlLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpfSxHNXQucHJvdG90eXBlLmVuYWJsZVNjaXNzb3JUZXN0PWZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLiIpLHRoaXMuc2V0U2Npc3NvclRlc3QodCl9LEc1dC5wcm90b3R5cGUuaW5pdE1hdGVyaWFsPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuaW5pdE1hdGVyaWFsKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sRzV0LnByb3RvdHlwZS5hZGRQcmVQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQcmVQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxHNXQucHJvdG90eXBlLmFkZFBvc3RQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQb3N0UGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sRzV0LnByb3RvdHlwZS51cGRhdGVTaGFkb3dNYXA9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC51cGRhdGVTaGFkb3dNYXAoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxHNXQucHJvdG90eXBlLnNldEZhY2VDdWxsaW5nPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0RmFjZUN1bGxpbmcoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxHNXQucHJvdG90eXBlLmFsbG9jVGV4dHVyZVVuaXQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sRzV0LnByb3RvdHlwZS5zZXRUZXh0dXJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LEc1dC5wcm90b3R5cGUuc2V0VGV4dHVyZTJEPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZTJEKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sRzV0LnByb3RvdHlwZS5zZXRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sRzV0LnByb3RvdHlwZS5nZXRBY3RpdmVNaXBNYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRBY3RpdmVNaXBNYXBMZXZlbCgpIGlzIG5vdyAuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKS4iKSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEc1dC5wcm90b3R5cGUse3NoYWRvd01hcEVuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5lbmFibGVkfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwRW5hYmxlZCBpcyBub3cgLnNoYWRvd01hcC5lbmFibGVkLiIpLHRoaXMuc2hhZG93TWFwLmVuYWJsZWQ9dH19LHNoYWRvd01hcFR5cGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC50eXBlfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwVHlwZSBpcyBub3cgLnNoYWRvd01hcC50eXBlLiIpLHRoaXMuc2hhZG93TWFwLnR5cGU9dH19LHNoYWRvd01hcEN1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0sY29udGV4dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNvbnRleHQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5nZXRDb250ZXh0KCkgaW5zdGVhZC4iKSx0aGlzLmdldENvbnRleHQoKX19LHZyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudnIgaGFzIGJlZW4gcmVuYW1lZCB0byAueHIiKSx0aGlzLnhyfX0sZ2FtbWFJbnB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpfX0sZ2FtbWFPdXRwdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSx0aGlzLm91dHB1dEVuY29kaW5nPSEwPT09dD9JWnQ6Tlp0fX0sdG9uZU1hcHBpbmdXaGl0ZVBvaW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIiksMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFI1dC5wcm90b3R5cGUse2N1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJSZXZlcnNlU2lkZWQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyU2luZ2xlU2lkZWQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU0p0LnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIiksdGhpcy50ZXh0dXJlLndyYXBTPXR9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBUIGlzIG5vdyAudGV4dHVyZS53cmFwVC4iKSx0aGlzLnRleHR1cmUud3JhcFQ9dH19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9dH19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9dH19LGFuaXNvdHJvcHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weX0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LiIpLHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5PXR9fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKSx0aGlzLnRleHR1cmUub2Zmc2V0PXR9fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKSx0aGlzLnRleHR1cmUucmVwZWF0PXR9fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKSx0aGlzLnRleHR1cmUuZm9ybWF0PXR9fSx0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGV9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4iKSx0aGlzLnRleHR1cmUudHlwZT10fX0sZ2VuZXJhdGVNaXBtYXBzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIiksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz10fX19KSwkOXQucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7Y29uc3QgZT10aGlzO3JldHVybihuZXcgQjl0KS5sb2FkKHQsKGZ1bmN0aW9uKHQpe2Uuc2V0QnVmZmVyKHQpfSkpLHRoaXN9LHQ4dC5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvQW5hbHlzZXI6IC5nZXREYXRhKCkgaXMgbm93IC5nZXRGcmVxdWVuY3lEYXRhKCkuIiksdGhpcy5nZXRGcmVxdWVuY3lEYXRhKCl9LFgxdC5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZSh0LGUpfSxYMXQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC5jbGVhcigpIGlzIG5vdyAucmVuZGVyVGFyZ2V0LmNsZWFyKCkuIiksdGhpcy5yZW5kZXJUYXJnZXQuY2xlYXIodCxlLG4saSl9LHlKdC5jcm9zc09yaWdpbj12b2lkIDAseUp0LmxvYWRUZXh0dXJlPWZ1bmN0aW9uKHQsZSxuLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7Y29uc3Qgcj1uZXcgZTl0O3Iuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Y29uc3Qgbz1yLmxvYWQodCxuLHZvaWQgMCxpKTtyZXR1cm4gZSYmKG8ubWFwcGluZz1lKSxvfSx5SnQubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKHQsZSxuLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtjb25zdCByPW5ldyBRNnQ7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtjb25zdCBvPXIubG9hZCh0LG4sdm9pZCAwLGkpO3JldHVybiBlJiYoby5tYXBwaW5nPWUpLG99LHlKdC5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LHlKdC5sb2FkQ29tcHJlc3NlZFRleHR1cmVDdWJlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkQ29tcHJlc3NlZFRleHR1cmVDdWJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX07Y29uc3QgWjh0PXtjcmVhdGVNdWx0aU1hdGVyaWFsT2JqZWN0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL3V0aWxzL1NjZW5lVXRpbHMuanMiKX0sZGV0YWNoOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL3V0aWxzL1NjZW5lVXRpbHMuanMiKX0sYXR0YWNoOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL3V0aWxzL1NjZW5lVXRpbHMuanMiKX19OyJ1bmRlZmluZWQiIT10eXBlb2YgX19USFJFRV9ERVZUT09MU19fJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInJlZ2lzdGVyIix7ZGV0YWlsOntyZXZpc2lvbjpCS3R9fSkpLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPUJLdCk7dmFyIEo4dD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxBQ0VTRmlsbWljVG9uZU1hcHBpbmc6NCxBZGRFcXVhdGlvbjpWS3QsQWRkT3BlcmF0aW9uOjIsQWRkaXRpdmVBbmltYXRpb25CbGVuZE1vZGU6UFp0LEFkZGl0aXZlQmxlbmRpbmc6MixBbHBoYUZvcm1hdDoxMDIxLEFsd2F5c0RlcHRoOjEsQWx3YXlzU3RlbmNpbEZ1bmM6NTE5LEFtYmllbnRMaWdodDpiOXQsQW1iaWVudExpZ2h0UHJvYmU6Rjl0LEFuaW1hdGlvbkNsaXA6RzZ0LEFuaW1hdGlvbkxvYWRlcjpjbGFzcyBleHRlbmRzICQ2dHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxuLGkpe2NvbnN0IHI9dGhpcyxvPW5ldyBaNnQodGhpcy5tYW5hZ2VyKTtvLnNldFBhdGgodGhpcy5wYXRoKSxvLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxvLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscyksby5sb2FkKHQsKGZ1bmN0aW9uKG4pe3RyeXtlKHIucGFyc2UoSlNPTi5wYXJzZShuKSkpfWNhdGNoKGUpe2k/aShlKTpjb25zb2xlLmVycm9yKGUpLHIubWFuYWdlci5pdGVtRXJyb3IodCl9fSksbixpKX1wYXJzZSh0KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtjb25zdCBpPUc2dC5wYXJzZSh0W25dKTtlLnB1c2goaSl9cmV0dXJuIGV9fSxBbmltYXRpb25NaXhlcjpmOHQsQW5pbWF0aW9uT2JqZWN0R3JvdXA6ZDh0LEFuaW1hdGlvblV0aWxzOlA2dCxBcmNDdXJ2ZTpwNHQsQXJyYXlDYW1lcmE6QjV0LEFycm93SGVscGVyOmNsYXNzIGV4dGVuZHMga1F0e2NvbnN0cnVjdG9yKHQ9bmV3IENKdCgwLDAsMSksZT1uZXcgQ0p0KDAsMCwwKSxuPTEsaT0xNjc3Njk2MCxyPS4yKm4sbz0uMipyKXtzdXBlcigpLHRoaXMudHlwZT0iQXJyb3dIZWxwZXIiLHZvaWQgMD09PXE4dCYmKHE4dD1uZXcgYjF0LHE4dC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgbDF0KFswLDAsMCwwLDEsMF0sMykpLFk4dD1uZXcgbjR0KDAsLjUsMSw1LDEpLFk4dC50cmFuc2xhdGUoMCwtLjUsMCkpLHRoaXMucG9zaXRpb24uY29weShlKSx0aGlzLmxpbmU9bmV3IEgzdChxOHQsbmV3IEkzdCh7Y29sb3I6aSx0b25lTWFwcGVkOiExfSkpLHRoaXMubGluZS5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuYWRkKHRoaXMubGluZSksdGhpcy5jb25lPW5ldyBCMXQoWTh0LG5ldyBLUXQoe2NvbG9yOmksdG9uZU1hcHBlZDohMX0pKSx0aGlzLmNvbmUubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmFkZCh0aGlzLmNvbmUpLHRoaXMuc2V0RGlyZWN0aW9uKHQpLHRoaXMuc2V0TGVuZ3RoKG4scixvKX1zZXREaXJlY3Rpb24odCl7aWYodC55Pi45OTk5OSl0aGlzLnF1YXRlcm5pb24uc2V0KDAsMCwwLDEpO2Vsc2UgaWYodC55PC0uOTk5OTkpdGhpcy5xdWF0ZXJuaW9uLnNldCgxLDAsMCwwKTtlbHNle1c4dC5zZXQodC56LDAsLXQueCkubm9ybWFsaXplKCk7Y29uc3QgZT1NYXRoLmFjb3ModC55KTt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZShXOHQsZSl9fXNldExlbmd0aCh0LGU9LjIqdCxuPS4yKmUpe3RoaXMubGluZS5zY2FsZS5zZXQoMSxNYXRoLm1heCgxZS00LHQtZSksMSksdGhpcy5saW5lLnVwZGF0ZU1hdHJpeCgpLHRoaXMuY29uZS5zY2FsZS5zZXQobixlLG4pLHRoaXMuY29uZS5wb3NpdGlvbi55PXQsdGhpcy5jb25lLnVwZGF0ZU1hdHJpeCgpfXNldENvbG9yKHQpe3RoaXMubGluZS5tYXRlcmlhbC5jb2xvci5zZXQodCksdGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLnNldCh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQsITEpLHRoaXMubGluZS5jb3B5KHQubGluZSksdGhpcy5jb25lLmNvcHkodC5jb25lKSx0aGlzfX0sQXVkaW86JDl0LEF1ZGlvQW5hbHlzZXI6dDh0LEF1ZGlvQ29udGV4dDpEOXQsQXVkaW9MaXN0ZW5lcjpjbGFzcyBleHRlbmRzIGtRdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJBdWRpb0xpc3RlbmVyIix0aGlzLmNvbnRleHQ9RDl0LmdldENvbnRleHQoKSx0aGlzLmdhaW49dGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKSx0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZmlsdGVyPW51bGwsdGhpcy50aW1lRGVsdGE9MCx0aGlzLl9jbG9jaz1uZXcgajl0fWdldElucHV0KCl7cmV0dXJuIHRoaXMuZ2Fpbn1yZW1vdmVGaWx0ZXIoKXtyZXR1cm4gbnVsbCE9PXRoaXMuZmlsdGVyJiYodGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXIpLHRoaXMuZmlsdGVyLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZmlsdGVyPW51bGwpLHRoaXN9Z2V0RmlsdGVyKCl7cmV0dXJuIHRoaXMuZmlsdGVyfXNldEZpbHRlcih0KXtyZXR1cm4gbnVsbCE9PXRoaXMuZmlsdGVyPyh0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmZpbHRlciksdGhpcy5maWx0ZXIuZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pKTp0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZmlsdGVyPXQsdGhpcy5nYWluLmNvbm5lY3QodGhpcy5maWx0ZXIpLHRoaXMuZmlsdGVyLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzfWdldE1hc3RlclZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRNYXN0ZXJWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9dXBkYXRlTWF0cml4V29ybGQodCl7c3VwZXIudXBkYXRlTWF0cml4V29ybGQodCk7Y29uc3QgZT10aGlzLmNvbnRleHQubGlzdGVuZXIsbj10aGlzLnVwO2lmKHRoaXMudGltZURlbHRhPXRoaXMuX2Nsb2NrLmdldERlbHRhKCksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoVzl0LHE5dCxZOXQpLFg5dC5zZXQoMCwwLC0xKS5hcHBseVF1YXRlcm5pb24ocTl0KSxlLnBvc2l0aW9uWCl7Y29uc3QgdD10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy50aW1lRGVsdGE7ZS5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoVzl0LngsdCksZS5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoVzl0LnksdCksZS5wb3NpdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoVzl0LnosdCksZS5mb3J3YXJkWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShYOXQueCx0KSxlLmZvcndhcmRZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKFg5dC55LHQpLGUuZm9yd2FyZFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoWDl0LnosdCksZS51cFgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobi54LHQpLGUudXBZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKG4ueSx0KSxlLnVwWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLnosdCl9ZWxzZSBlLnNldFBvc2l0aW9uKFc5dC54LFc5dC55LFc5dC56KSxlLnNldE9yaWVudGF0aW9uKFg5dC54LFg5dC55LFg5dC56LG4ueCxuLnksbi56KX19LEF1ZGlvTG9hZGVyOkI5dCxBeGVzSGVscGVyOlg4dCxBeGlzSGVscGVyOmZ1bmN0aW9uIFE4dCh0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5BeGlzSGVscGVyIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuQXhlc0hlbHBlci4iKSxuZXcgWDh0KHQpfSxCYWNrU2lkZToxLEJhc2ljRGVwdGhQYWNraW5nOjMyMDAsQmFzaWNTaGFkb3dNYXA6MCxCaW5hcnlUZXh0dXJlTG9hZGVyOmZ1bmN0aW9uIHQ3dCh0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CaW5hcnlUZXh0dXJlTG9hZGVyIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuRGF0YVRleHR1cmVMb2FkZXIuIiksbmV3IHQ5dCh0KX0sQm9uZTpTM3QsQm9vbGVhbktleWZyYW1lVHJhY2s6RDZ0LEJvdW5kaW5nQm94SGVscGVyOmZ1bmN0aW9uIGU3dCh0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJvdW5kaW5nQm94SGVscGVyIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIENyZWF0aW5nIGEgVEhSRUUuQm94SGVscGVyIGluc3RlYWQuIiksbmV3IEc4dCh0LGUpfSxCb3gyOnc4dCxCb3gzOkxKdCxCb3gzSGVscGVyOmNsYXNzIGV4dGVuZHMgVTN0e2NvbnN0cnVjdG9yKHQsZT0xNjc3Njk2MCl7Y29uc3Qgbj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LDQsMCw0LDEsNSwyLDYsMyw3XSksaT1uZXcgYjF0O2kuc2V0SW5kZXgobmV3IFFRdChuLDEpKSxpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBsMXQoWzEsMSwxLC0xLDEsMSwtMSwtMSwxLDEsLTEsMSwxLDEsLTEsLTEsMSwtMSwtMSwtMSwtMSwxLC0xLC0xXSwzKSksc3VwZXIoaSxuZXcgSTN0KHtjb2xvcjplLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5ib3g9dCx0aGlzLnR5cGU9IkJveDNIZWxwZXIiLHRoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9dXBkYXRlTWF0cml4V29ybGQodCl7Y29uc3QgZT10aGlzLmJveDtlLmlzRW1wdHkoKXx8KGUuZ2V0Q2VudGVyKHRoaXMucG9zaXRpb24pLGUuZ2V0U2l6ZSh0aGlzLnNjYWxlKSx0aGlzLnNjYWxlLm11bHRpcGx5U2NhbGFyKC41KSxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSl9fSxCb3hCdWZmZXJHZW9tZXRyeTpGMXQsQm94R2VvbWV0cnk6RjF0LEJveEhlbHBlcjpHOHQsQnVmZmVyQXR0cmlidXRlOlFRdCxCdWZmZXJHZW9tZXRyeTpiMXQsQnVmZmVyR2VvbWV0cnlMb2FkZXI6QTl0LEJ5dGVUeXBlOjEwMTAsQ2FjaGU6cTZ0LENhbWVyYTpXMXQsQ2FtZXJhSGVscGVyOmNsYXNzIGV4dGVuZHMgVTN0e2NvbnN0cnVjdG9yKHQpe2NvbnN0IGU9bmV3IGIxdCxuPW5ldyBJM3Qoe2NvbG9yOjE2Nzc3MjE1LHZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSksaT1bXSxyPVtdLG89e30sYT1uZXcgJFF0KDE2NzU1MjAwKSxzPW5ldyAkUXQoMTY3MTE2ODApLGw9bmV3ICRRdCg0Mzc3NSksYz1uZXcgJFF0KDE2Nzc3MjE1KSx1PW5ldyAkUXQoMzM1NTQ0Myk7ZnVuY3Rpb24gaCh0LGUsbil7ZCh0LG4pLGQoZSxuKX1mdW5jdGlvbiBkKHQsZSl7aS5wdXNoKDAsMCwwKSxyLnB1c2goZS5yLGUuZyxlLmIpLHZvaWQgMD09PW9bdF0mJihvW3RdPVtdKSxvW3RdLnB1c2goaS5sZW5ndGgvMy0xKX1oKCJuMSIsIm4yIixhKSxoKCJuMiIsIm40IixhKSxoKCJuNCIsIm4zIixhKSxoKCJuMyIsIm4xIixhKSxoKCJmMSIsImYyIixhKSxoKCJmMiIsImY0IixhKSxoKCJmNCIsImYzIixhKSxoKCJmMyIsImYxIixhKSxoKCJuMSIsImYxIixhKSxoKCJuMiIsImYyIixhKSxoKCJuMyIsImYzIixhKSxoKCJuNCIsImY0IixhKSxoKCJwIiwibjEiLHMpLGgoInAiLCJuMiIscyksaCgicCIsIm4zIixzKSxoKCJwIiwibjQiLHMpLGgoInUxIiwidTIiLGwpLGgoInUyIiwidTMiLGwpLGgoInUzIiwidTEiLGwpLGgoImMiLCJ0IixjKSxoKCJwIiwiYyIsdSksaCgiY24xIiwiY24yIix1KSxoKCJjbjMiLCJjbjQiLHUpLGgoImNmMSIsImNmMiIsdSksaCgiY2YzIiwiY2Y0Iix1KSxlLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBsMXQoaSwzKSksZS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgbDF0KHIsMykpLHN1cGVyKGUsbiksdGhpcy50eXBlPSJDYW1lcmFIZWxwZXIiLHRoaXMuY2FtZXJhPXQsdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCYmdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMucG9pbnRNYXA9byx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2NvbnN0IHQ9dGhpcy5nZW9tZXRyeSxlPXRoaXMucG9pbnRNYXA7Vjh0LnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5jYW1lcmEucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLFU4dCgiYyIsZSx0LFY4dCwwLDAsLTEpLFU4dCgidCIsZSx0LFY4dCwwLDAsMSksVTh0KCJuMSIsZSx0LFY4dCwtMSwtMSwtMSksVTh0KCJuMiIsZSx0LFY4dCwxLC0xLC0xKSxVOHQoIm4zIixlLHQsVjh0LC0xLDEsLTEpLFU4dCgibjQiLGUsdCxWOHQsMSwxLC0xKSxVOHQoImYxIixlLHQsVjh0LC0xLC0xLDEpLFU4dCgiZjIiLGUsdCxWOHQsMSwtMSwxKSxVOHQoImYzIixlLHQsVjh0LC0xLDEsMSksVTh0KCJmNCIsZSx0LFY4dCwxLDEsMSksVTh0KCJ1MSIsZSx0LFY4dCwuNywxLjEsLTEpLFU4dCgidTIiLGUsdCxWOHQsLS43LDEuMSwtMSksVTh0KCJ1MyIsZSx0LFY4dCwwLDIsLTEpLFU4dCgiY2YxIixlLHQsVjh0LC0xLDAsMSksVTh0KCJjZjIiLGUsdCxWOHQsMSwwLDEpLFU4dCgiY2YzIixlLHQsVjh0LDAsLTEsMSksVTh0KCJjZjQiLGUsdCxWOHQsMCwxLDEpLFU4dCgiY24xIixlLHQsVjh0LC0xLDAsLTEpLFU4dCgiY24yIixlLHQsVjh0LDEsMCwtMSksVTh0KCJjbjMiLGUsdCxWOHQsMCwtMSwtMSksVTh0KCJjbjQiLGUsdCxWOHQsMCwxLC0xKSx0LmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMH1kaXNwb3NlKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCl9fSxDYW52YXNSZW5kZXJlcjpmdW5jdGlvbiBuN3QoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5DYW52YXNSZW5kZXJlciBoYXMgYmVlbiByZW1vdmVkIil9LENhbnZhc1RleHR1cmU6UTN0LENhdG11bGxSb21DdXJ2ZTM6djR0LENpbmVvblRvbmVNYXBwaW5nOjMsQ2lyY2xlQnVmZmVyR2VvbWV0cnk6ZTR0LENpcmNsZUdlb21ldHJ5OmU0dCxDbGFtcFRvRWRnZVdyYXBwaW5nOktLdCxDbG9jazpqOXQsQ29sb3I6JFF0LENvbG9yS2V5ZnJhbWVUcmFjazpCNnQsQ29tcHJlc3NlZFRleHR1cmU6SjN0LENvbXByZXNzZWRUZXh0dXJlTG9hZGVyOmNsYXNzIGV4dGVuZHMgJDZ0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLG4saSl7Y29uc3Qgcj10aGlzLG89W10sYT1uZXcgSjN0LHM9bmV3IFo2dCh0aGlzLm1hbmFnZXIpO3Muc2V0UGF0aCh0aGlzLnBhdGgpLHMuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLHMuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLHMuc2V0V2l0aENyZWRlbnRpYWxzKHIud2l0aENyZWRlbnRpYWxzKTtsZXQgbD0wO2Z1bmN0aW9uIGMoYyl7cy5sb2FkKHRbY10sKGZ1bmN0aW9uKHQpe2NvbnN0IG49ci5wYXJzZSh0LCEwKTtvW2NdPXt3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxmb3JtYXQ6bi5mb3JtYXQsbWlwbWFwczpuLm1pcG1hcHN9LGwrPTEsNj09PWwmJigxPT09bi5taXBtYXBDb3VudCYmKGEubWluRmlsdGVyPWVadCksYS5pbWFnZT1vLGEuZm9ybWF0PW4uZm9ybWF0LGEubmVlZHNVcGRhdGU9ITAsZSYmZShhKSl9KSxuLGkpfWlmKEFycmF5LmlzQXJyYXkodCkpZm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47KytlKWMoZSk7ZWxzZSBzLmxvYWQodCwoZnVuY3Rpb24odCl7Y29uc3Qgbj1yLnBhcnNlKHQsITApO2lmKG4uaXNDdWJlbWFwKXtjb25zdCB0PW4ubWlwbWFwcy5sZW5ndGgvbi5taXBtYXBDb3VudDtmb3IobGV0IGU9MDtlPHQ7ZSsrKXtvW2VdPXttaXBtYXBzOltdfTtmb3IobGV0IHQ9MDt0PG4ubWlwbWFwQ291bnQ7dCsrKW9bZV0ubWlwbWFwcy5wdXNoKG4ubWlwbWFwc1tlKm4ubWlwbWFwQ291bnQrdF0pLG9bZV0uZm9ybWF0PW4uZm9ybWF0LG9bZV0ud2lkdGg9bi53aWR0aCxvW2VdLmhlaWdodD1uLmhlaWdodH1hLmltYWdlPW99ZWxzZSBhLmltYWdlLndpZHRoPW4ud2lkdGgsYS5pbWFnZS5oZWlnaHQ9bi5oZWlnaHQsYS5taXBtYXBzPW4ubWlwbWFwczsxPT09bi5taXBtYXBDb3VudCYmKGEubWluRmlsdGVyPWVadCksYS5mb3JtYXQ9bi5mb3JtYXQsYS5uZWVkc1VwZGF0ZT0hMCxlJiZlKGEpfSksbixpKTtyZXR1cm4gYX19LENvbmVCdWZmZXJHZW9tZXRyeTppNHQsQ29uZUdlb21ldHJ5Omk0dCxDdWJlQ2FtZXJhOlgxdCxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6akt0LEN1YmVSZWZyYWN0aW9uTWFwcGluZzpHS3QsQ3ViZVRleHR1cmU6JDF0LEN1YmVUZXh0dXJlTG9hZGVyOlE2dCxDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzpZS3QsQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6WEt0LEN1YmljQmV6aWVyQ3VydmU6UzR0LEN1YmljQmV6aWVyQ3VydmUzOk00dCxDdWJpY0ludGVycG9sYW50Okk2dCxDdWxsRmFjZUJhY2s6MSxDdWxsRmFjZUZyb250OjIsQ3VsbEZhY2VGcm9udEJhY2s6MyxDdWxsRmFjZU5vbmU6MCxDdXJ2ZTpoNHQsQ3VydmVQYXRoOm45dCxDdXN0b21CbGVuZGluZzo1LEN1c3RvbVRvbmVNYXBwaW5nOjUsQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTpuNHQsQ3lsaW5kZXJHZW9tZXRyeTpuNHQsQ3lsaW5kcmljYWw6Y2xhc3N7Y29uc3RydWN0b3IodD0xLGU9MCxuPTApe3JldHVybiB0aGlzLnJhZGl1cz10LHRoaXMudGhldGE9ZSx0aGlzLnk9bix0aGlzfXNldCh0LGUsbil7cmV0dXJuIHRoaXMucmFkaXVzPXQsdGhpcy50aGV0YT1lLHRoaXMueT1uLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpcy50aGV0YT10LnRoZXRhLHRoaXMueT10LnksdGhpc31zZXRGcm9tVmVjdG9yMyh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQueCx0LnksdC56KX1zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQsZSxuKXtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHQqdCtuKm4pLHRoaXMudGhldGE9TWF0aC5hdGFuMih0LG4pLHRoaXMueT1lLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSxEYXRhVGV4dHVyZTpNM3QsRGF0YVRleHR1cmUyREFycmF5OkswdCxEYXRhVGV4dHVyZTNEOlowdCxEYXRhVGV4dHVyZUxvYWRlcjp0OXQsRGF0YVV0aWxzOmNsYXNze3N0YXRpYyB0b0hhbGZGbG9hdCh0KXskOHRbMF09dDtjb25zdCBlPUs4dFswXTtsZXQgbj1lPj4xNiYzMjc2OCxpPWU+PjEyJjIwNDc7Y29uc3Qgcj1lPj4yMyYyNTU7cmV0dXJuIHI8MTAzP246cj4xNDI/KG58PTMxNzQ0LG58PSgyNTU9PXI/MDoxKSYmODM4ODYwNyZlLG4pOnI8MTEzPyhpfD0yMDQ4LG58PShpPj4xMTQtcikrKGk+PjExMy1yJjEpLG4pOihufD1yLTExMjw8MTB8aT4+MSxuKz0xJmksbil9fSxEZWNyZW1lbnRTdGVuY2lsT3A6NzY4MyxEZWNyZW1lbnRXcmFwU3RlbmNpbE9wOjM0MDU2LERlZmF1bHRMb2FkaW5nTWFuYWdlcjpYNnQsRGVwdGhGb3JtYXQ6ZFp0LERlcHRoU3RlbmNpbEZvcm1hdDpwWnQsRGVwdGhUZXh0dXJlOnQ0dCxEaXJlY3Rpb25hbExpZ2h0OnY5dCxEaXJlY3Rpb25hbExpZ2h0SGVscGVyOmNsYXNzIGV4dGVuZHMga1F0e2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1uLHZvaWQgMD09PWUmJihlPTEpO2xldCBpPW5ldyBiMXQ7aS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgbDF0KFstZSxlLDAsZSxlLDAsZSwtZSwwLC1lLC1lLDAsLWUsZSwwXSwzKSk7Y29uc3Qgcj1uZXcgSTN0KHtmb2c6ITEsdG9uZU1hcHBlZDohMX0pO3RoaXMubGlnaHRQbGFuZT1uZXcgSDN0KGksciksdGhpcy5hZGQodGhpcy5saWdodFBsYW5lKSxpPW5ldyBiMXQsaS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgbDF0KFswLDAsMCwwLDAsMV0sMykpLHRoaXMudGFyZ2V0TGluZT1uZXcgSDN0KGksciksdGhpcy5hZGQodGhpcy50YXJnZXRMaW5lKSx0aGlzLnVwZGF0ZSgpfWRpc3Bvc2UoKXt0aGlzLmxpZ2h0UGxhbmUuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMubGlnaHRQbGFuZS5tYXRlcmlhbC5kaXNwb3NlKCksdGhpcy50YXJnZXRMaW5lLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLnRhcmdldExpbmUubWF0ZXJpYWwuZGlzcG9zZSgpfXVwZGF0ZSgpe0Q4dC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC5tYXRyaXhXb3JsZCksQjh0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCksSDh0LnN1YlZlY3RvcnMoQjh0LEQ4dCksdGhpcy5saWdodFBsYW5lLmxvb2tBdChCOHQpLHZvaWQgMCE9PXRoaXMuY29sb3I/KHRoaXMubGlnaHRQbGFuZS5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvciksdGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKSk6KHRoaXMubGlnaHRQbGFuZS5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpLHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpKSx0aGlzLnRhcmdldExpbmUubG9va0F0KEI4dCksdGhpcy50YXJnZXRMaW5lLnNjYWxlLno9SDh0Lmxlbmd0aCgpfX0sRGlzY3JldGVJbnRlcnBvbGFudDpPNnQsRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnk6bzR0LERvZGVjYWhlZHJvbkdlb21ldHJ5Om80dCxEb3VibGVTaWRlOjIsRHN0QWxwaGFGYWN0b3I6MjA2LERzdENvbG9yRmFjdG9yOjIwOCxEeW5hbWljQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uIGk3dCh0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUoKS5zZXRVc2FnZSggVEhSRUUuRHluYW1pY0RyYXdVc2FnZSApIGluc3RlYWQuIiksbmV3IFFRdCh0LGUpLnNldFVzYWdlKFZadCl9LER5bmFtaWNDb3B5VXNhZ2U6MzUwNTAsRHluYW1pY0RyYXdVc2FnZTpWWnQsRHluYW1pY1JlYWRVc2FnZTozNTA0OSxFZGdlc0dlb21ldHJ5OnU0dCxFZGdlc0hlbHBlcjpmdW5jdGlvbiByN3QodCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5FZGdlc0hlbHBlciBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRWRnZXNHZW9tZXRyeSBpbnN0ZWFkLiIpLG5ldyBVM3QobmV3IHU0dCh0Lmdlb21ldHJ5KSxuZXcgSTN0KHtjb2xvcjp2b2lkIDAhPT1lP2U6MTY3NzcyMTV9KSl9LEVsbGlwc2VDdXJ2ZTpkNHQsRXF1YWxEZXB0aDo0LEVxdWFsU3RlbmNpbEZ1bmM6NTE0LEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOldLdCxFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzpxS3QsRXVsZXI6ZlF0LEV2ZW50RGlzcGF0Y2hlcjpqWnQsRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OnI2dCxFeHRydWRlR2VvbWV0cnk6cjZ0LEZhY2VDb2xvcnM6MSxGaWxlTG9hZGVyOlo2dCxGbGF0U2hhZGluZzoxLEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGU6czF0LEZsb2F0MzJBdHRyaWJ1dGU6ZnVuY3Rpb24gbzd0KHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRmxvYXQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBsMXQodCxlKX0sRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZTpsMXQsRmxvYXQ2NEF0dHJpYnV0ZTpmdW5jdGlvbiBhN3QodCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GbG9hdDY0QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IGMxdCh0LGUpfSxGbG9hdDY0QnVmZmVyQXR0cmlidXRlOmMxdCxGbG9hdFR5cGU6c1p0LEZvZzpZNXQsRm9nRXhwMjpxNXQsRm9udDpSOXQsRm9udExvYWRlcjpjbGFzcyBleHRlbmRzICQ2dHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxuLGkpe2NvbnN0IHI9dGhpcyxvPW5ldyBaNnQodGhpcy5tYW5hZ2VyKTtvLnNldFBhdGgodGhpcy5wYXRoKSxvLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxvLnNldFdpdGhDcmVkZW50aWFscyhyLndpdGhDcmVkZW50aWFscyksby5sb2FkKHQsKGZ1bmN0aW9uKHQpe2xldCBuO3RyeXtuPUpTT04ucGFyc2UodCl9Y2F0Y2goZSl7Y29uc29sZS53YXJuKCJUSFJFRS5Gb250TG9hZGVyOiB0eXBlZmFjZS5qcyBzdXBwb3J0IGlzIGJlaW5nIGRlcHJlY2F0ZWQuIFVzZSB0eXBlZmFjZS5qc29uIGluc3RlYWQuIiksbj1KU09OLnBhcnNlKHQuc3Vic3RyaW5nKDY1LHQubGVuZ3RoLTIpKX1jb25zdCBpPXIucGFyc2Uobik7ZSYmZShpKX0pLG4saSl9cGFyc2UodCl7cmV0dXJuIG5ldyBSOXQodCl9fSxGcm9udFNpZGU6MCxGcnVzdHVtOmkwdCxHTEJ1ZmZlckF0dHJpYnV0ZTpfOHQsR0xTTDE6IjEwMCIsR0xTTDM6VVp0LEdhbW1hRW5jb2Rpbmc6Ulp0LEdyZWF0ZXJEZXB0aDo2LEdyZWF0ZXJFcXVhbERlcHRoOjUsR3JlYXRlckVxdWFsU3RlbmNpbEZ1bmM6NTE4LEdyZWF0ZXJTdGVuY2lsRnVuYzo1MTYsR3JpZEhlbHBlcjp6OHQsR3JvdXA6SDV0LEhhbGZGbG9hdFR5cGU6bFp0LEhlbWlzcGhlcmVMaWdodDphOXQsSGVtaXNwaGVyZUxpZ2h0SGVscGVyOmNsYXNzIGV4dGVuZHMga1F0e2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1uO2NvbnN0IGk9bmV3IGw2dChlKTtpLnJvdGF0ZVkoLjUqTWF0aC5QSSksdGhpcy5tYXRlcmlhbD1uZXcgS1F0KHt3aXJlZnJhbWU6ITAsZm9nOiExLHRvbmVNYXBwZWQ6ITF9KSx2b2lkIDA9PT10aGlzLmNvbG9yJiYodGhpcy5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9ITApO2NvbnN0IHI9aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIiksbz1uZXcgRmxvYXQzMkFycmF5KDMqci5jb3VudCk7aS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgUVF0KG8sMykpLHRoaXMuYWRkKG5ldyBCMXQoaSx0aGlzLm1hdGVyaWFsKSksdGhpcy51cGRhdGUoKX1kaXNwb3NlKCl7dGhpcy5jaGlsZHJlblswXS5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5jaGlsZHJlblswXS5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7Y29uc3QgdD10aGlzLmNoaWxkcmVuWzBdO2lmKHZvaWQgMCE9PXRoaXMuY29sb3IpdGhpcy5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik7ZWxzZXtjb25zdCBlPXQuZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCJjb2xvciIpO1I4dC5jb3B5KHRoaXMubGlnaHQuY29sb3IpLE84dC5jb3B5KHRoaXMubGlnaHQuZ3JvdW5kQ29sb3IpO2ZvcihsZXQgdD0wLG49ZS5jb3VudDt0PG47dCsrKXtjb25zdCBpPXQ8bi8yP1I4dDpPOHQ7ZS5zZXRYWVoodCxpLnIsaS5nLGkuYil9ZS5uZWVkc1VwZGF0ZT0hMH10Lmxvb2tBdChJOHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQubWF0cml4V29ybGQpLm5lZ2F0ZSgpKX19LEhlbWlzcGhlcmVMaWdodFByb2JlOkg5dCxJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OmE2dCxJY29zYWhlZHJvbkdlb21ldHJ5OmE2dCxJbWFnZUJpdG1hcExvYWRlcjpOOXQsSW1hZ2VMb2FkZXI6SjZ0LEltYWdlVXRpbHM6eUp0LEltbWVkaWF0ZVJlbmRlck9iamVjdDpUOHQsSW5jcmVtZW50U3RlbmNpbE9wOjc2ODIsSW5jcmVtZW50V3JhcFN0ZW5jaWxPcDozNDA1NSxJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6Qzl0LEluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5OlQ5dCxJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcjpnOHQsSW5zdGFuY2VkTWVzaDpOM3QsSW50MTZBdHRyaWJ1dGU6ZnVuY3Rpb24gczd0KHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50MTZBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQxNkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IGkxdCh0LGUpfSxJbnQxNkJ1ZmZlckF0dHJpYnV0ZTppMXQsSW50MzJBdHRyaWJ1dGU6ZnVuY3Rpb24gbDd0KHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IG8xdCh0LGUpfSxJbnQzMkJ1ZmZlckF0dHJpYnV0ZTpvMXQsSW50OEF0dHJpYnV0ZTpmdW5jdGlvbiBjN3QodCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnQ4QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50OEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHQxdCh0LGUpfSxJbnQ4QnVmZmVyQXR0cmlidXRlOnQxdCxJbnRUeXBlOjEwMTMsSW50ZXJsZWF2ZWRCdWZmZXI6JDV0LEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOlo1dCxJbnRlcnBvbGFudDpONnQsSW50ZXJwb2xhdGVEaXNjcmV0ZTpNWnQsSW50ZXJwb2xhdGVMaW5lYXI6RVp0LEludGVycG9sYXRlU21vb3RoOlRadCxJbnZlcnRTdGVuY2lsT3A6NTM4NixKU09OTG9hZGVyOmZ1bmN0aW9uIHU3dCgpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkpTT05Mb2FkZXIgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sS2VlcFN0ZW5jaWxPcDpIWnQsS2V5ZnJhbWVUcmFjazp6NnQsTE9EOmczdCxMYXRoZUJ1ZmZlckdlb21ldHJ5OnM2dCxMYXRoZUdlb21ldHJ5OnM2dCxMYXllcnM6bVF0LExlbnNGbGFyZTpmdW5jdGlvbiBoN3QoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5MZW5zRmxhcmUgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9vYmplY3RzL0xlbnNmbGFyZS5qcyIpfSxMZXNzRGVwdGg6MixMZXNzRXF1YWxEZXB0aDozLExlc3NFcXVhbFN0ZW5jaWxGdW5jOjUxNSxMZXNzU3RlbmNpbEZ1bmM6NTEzLExpZ2h0Om85dCxMaWdodFByb2JlOlM5dCxMaW5lOkgzdCxMaW5lMzpFOHQsTGluZUJhc2ljTWF0ZXJpYWw6STN0LExpbmVDdXJ2ZTpFNHQsTGluZUN1cnZlMzpUNHQsTGluZURhc2hlZE1hdGVyaWFsOms2dCxMaW5lTG9vcDpqM3QsTGluZVBpZWNlczoxLExpbmVTZWdtZW50czpVM3QsTGluZVN0cmlwOjAsTGluZWFyRW5jb2Rpbmc6Tlp0LExpbmVhckZpbHRlcjplWnQsTGluZWFySW50ZXJwb2xhbnQ6UjZ0LExpbmVhck1pcE1hcExpbmVhckZpbHRlcjoxMDA4LExpbmVhck1pcE1hcE5lYXJlc3RGaWx0ZXI6MTAwNyxMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXI6aVp0LExpbmVhck1pcG1hcE5lYXJlc3RGaWx0ZXI6blp0LExpbmVhclRvbmVNYXBwaW5nOjEsTG9hZGVyOiQ2dCxMb2FkZXJVdGlsczpFOXQsTG9hZGluZ01hbmFnZXI6WTZ0LExvZ0x1dkVuY29kaW5nOjMwMDMsTG9vcE9uY2U6MjIwMCxMb29wUGluZ1Bvbmc6MjIwMixMb29wUmVwZWF0OjIyMDEsTHVtaW5hbmNlQWxwaGFGb3JtYXQ6MTAyNSxMdW1pbmFuY2VGb3JtYXQ6MTAyNCxNT1VTRTpIS3QsTWF0ZXJpYWw6VVF0LE1hdGVyaWFsTG9hZGVyOk05dCxNYXRoOmVKdCxNYXRoVXRpbHM6ZUp0LE1hdHJpeDM6Z0p0LE1hdHJpeDQ6clF0LE1heEVxdWF0aW9uOjEwNCxNZXNoOkIxdCxNZXNoQmFzaWNNYXRlcmlhbDpLUXQsTWVzaERlcHRoTWF0ZXJpYWw6TjV0LE1lc2hEaXN0YW5jZU1hdGVyaWFsOkk1dCxNZXNoRmFjZU1hdGVyaWFsOmZ1bmN0aW9uIGQ3dCh0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NZXNoRmFjZU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLiIpLHR9LE1lc2hMYW1iZXJ0TWF0ZXJpYWw6QzZ0LE1lc2hNYXRjYXBNYXRlcmlhbDpBNnQsTWVzaE5vcm1hbE1hdGVyaWFsOlQ2dCxNZXNoUGhvbmdNYXRlcmlhbDpNNnQsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6UzZ0LE1lc2hTdGFuZGFyZE1hdGVyaWFsOnc2dCxNZXNoVG9vbk1hdGVyaWFsOkU2dCxNaW5FcXVhdGlvbjoxMDMsTWlycm9yZWRSZXBlYXRXcmFwcGluZzpaS3QsTWl4T3BlcmF0aW9uOjEsTXVsdGlNYXRlcmlhbDpmdW5jdGlvbiBwN3QodD1bXSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTXVsdGlNYXRlcmlhbCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYW4gQXJyYXkgaW5zdGVhZC4iKSx0LmlzTXVsdGlNYXRlcmlhbD0hMCx0Lm1hdGVyaWFscz10LHQuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zbGljZSgpfSx0fSxNdWx0aXBseUJsZW5kaW5nOjQsTXVsdGlwbHlPcGVyYXRpb246MCxOZWFyZXN0RmlsdGVyOkpLdCxOZWFyZXN0TWlwTWFwTGluZWFyRmlsdGVyOjEwMDUsTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXI6MTAwNCxOZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyOnRadCxOZWFyZXN0TWlwbWFwTmVhcmVzdEZpbHRlcjpRS3QsTmV2ZXJEZXB0aDowLE5ldmVyU3RlbmNpbEZ1bmM6NTEyLE5vQmxlbmRpbmc6MCxOb0NvbG9yczowLE5vVG9uZU1hcHBpbmc6MCxOb3JtYWxBbmltYXRpb25CbGVuZE1vZGU6TFp0LE5vcm1hbEJsZW5kaW5nOjEsTm90RXF1YWxEZXB0aDo3LE5vdEVxdWFsU3RlbmNpbEZ1bmM6NTE3LE51bWJlcktleWZyYW1lVHJhY2s6SDZ0LE9iamVjdDNEOmtRdCxPYmplY3RMb2FkZXI6Y2xhc3MgZXh0ZW5kcyAkNnR7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsbixpKXtjb25zdCByPXRoaXMsbz0iIj09PXRoaXMucGF0aD9FOXQuZXh0cmFjdFVybEJhc2UodCk6dGhpcy5wYXRoO3RoaXMucmVzb3VyY2VQYXRoPXRoaXMucmVzb3VyY2VQYXRofHxvO2NvbnN0IGE9bmV3IFo2dCh0aGlzLm1hbmFnZXIpO2Euc2V0UGF0aCh0aGlzLnBhdGgpLGEuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGEuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxhLmxvYWQodCwoZnVuY3Rpb24obil7bGV0IG89bnVsbDt0cnl7bz1KU09OLnBhcnNlKG4pfWNhdGNoKGUpe3JldHVybiB2b2lkIDAhPT1pJiZpKGUpLHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUU6T2JqZWN0TG9hZGVyOiBDYW4ndCBwYXJzZSAiK3QrIi4iLGUubWVzc2FnZSl9Y29uc3QgYT1vLm1ldGFkYXRhO3ZvaWQgMCE9PWEmJnZvaWQgMCE9PWEudHlwZSYmImdlb21ldHJ5IiE9PWEudHlwZS50b0xvd2VyQ2FzZSgpP3IucGFyc2UobyxlKTpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3RMb2FkZXI6IENhbid0IGxvYWQgIit0KX0pLG4saSl9YXN5bmMgbG9hZEFzeW5jKHQsZSl7Y29uc3Qgbj0iIj09PXRoaXMucGF0aD9FOXQuZXh0cmFjdFVybEJhc2UodCk6dGhpcy5wYXRoO3RoaXMucmVzb3VyY2VQYXRoPXRoaXMucmVzb3VyY2VQYXRofHxuO2NvbnN0IGk9bmV3IFo2dCh0aGlzLm1hbmFnZXIpO2kuc2V0UGF0aCh0aGlzLnBhdGgpLGkuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGkuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKTtjb25zdCByPWF3YWl0IGkubG9hZEFzeW5jKHQsZSksbz1KU09OLnBhcnNlKHIpLGE9by5tZXRhZGF0YTtpZih2b2lkIDA9PT1hfHx2b2lkIDA9PT1hLnR5cGV8fCJnZW9tZXRyeSI9PT1hLnR5cGUudG9Mb3dlckNhc2UoKSl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLk9iamVjdExvYWRlcjogQ2FuJ3QgbG9hZCAiK3QpO3JldHVybiBhd2FpdCB0aGlzLnBhcnNlQXN5bmMobyl9cGFyc2UodCxlKXtjb25zdCBuPXRoaXMucGFyc2VBbmltYXRpb25zKHQuYW5pbWF0aW9ucyksaT10aGlzLnBhcnNlU2hhcGVzKHQuc2hhcGVzKSxyPXRoaXMucGFyc2VHZW9tZXRyaWVzKHQuZ2VvbWV0cmllcyxpKSxvPXRoaXMucGFyc2VJbWFnZXModC5pbWFnZXMsKGZ1bmN0aW9uKCl7dm9pZCAwIT09ZSYmZShsKX0pKSxhPXRoaXMucGFyc2VUZXh0dXJlcyh0LnRleHR1cmVzLG8pLHM9dGhpcy5wYXJzZU1hdGVyaWFscyh0Lm1hdGVyaWFscyxhKSxsPXRoaXMucGFyc2VPYmplY3QodC5vYmplY3QscixzLGEsbiksYz10aGlzLnBhcnNlU2tlbGV0b25zKHQuc2tlbGV0b25zLGwpO2lmKHRoaXMuYmluZFNrZWxldG9ucyhsLGMpLHZvaWQgMCE9PWUpe2xldCB0PSExO2Zvcihjb25zdCBlIGluIG8paWYob1tlXWluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCl7dD0hMDticmVha30hMT09PXQmJmUobCl9cmV0dXJuIGx9YXN5bmMgcGFyc2VBc3luYyh0KXtjb25zdCBlPXRoaXMucGFyc2VBbmltYXRpb25zKHQuYW5pbWF0aW9ucyksbj10aGlzLnBhcnNlU2hhcGVzKHQuc2hhcGVzKSxpPXRoaXMucGFyc2VHZW9tZXRyaWVzKHQuZ2VvbWV0cmllcyxuKSxyPWF3YWl0IHRoaXMucGFyc2VJbWFnZXNBc3luYyh0LmltYWdlcyksbz10aGlzLnBhcnNlVGV4dHVyZXModC50ZXh0dXJlcyxyKSxhPXRoaXMucGFyc2VNYXRlcmlhbHModC5tYXRlcmlhbHMsbykscz10aGlzLnBhcnNlT2JqZWN0KHQub2JqZWN0LGksYSxvLGUpLGw9dGhpcy5wYXJzZVNrZWxldG9ucyh0LnNrZWxldG9ucyxzKTtyZXR1cm4gdGhpcy5iaW5kU2tlbGV0b25zKHMsbCksc31wYXJzZVNoYXBlcyh0KXtjb25zdCBlPXt9O2lmKHZvaWQgMCE9PXQpZm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuPGk7bisrKXtjb25zdCBpPShuZXcgcjl0KS5mcm9tSlNPTih0W25dKTtlW2kudXVpZF09aX1yZXR1cm4gZX1wYXJzZVNrZWxldG9ucyh0LGUpe2NvbnN0IG49e30saT17fTtpZihlLnRyYXZlcnNlKChmdW5jdGlvbih0KXt0LmlzQm9uZSYmKGlbdC51dWlkXT10KX0pKSx2b2lkIDAhPT10KWZvcihsZXQgZT0wLHI9dC5sZW5ndGg7ZTxyO2UrKyl7Y29uc3Qgcj0obmV3IEMzdCkuZnJvbUpTT04odFtlXSxpKTtuW3IudXVpZF09cn1yZXR1cm4gbn1wYXJzZUdlb21ldHJpZXModCxlKXtjb25zdCBuPXt9O2lmKHZvaWQgMCE9PXQpe2NvbnN0IGk9bmV3IEE5dDtmb3IobGV0IHI9MCxvPXQubGVuZ3RoO3I8bztyKyspe2xldCBvO2NvbnN0IGE9dFtyXTtzd2l0Y2goYS50eXBlKXtjYXNlIkJ1ZmZlckdlb21ldHJ5IjpjYXNlIkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IjpvPWkucGFyc2UoYSk7YnJlYWs7Y2FzZSJHZW9tZXRyeSI6Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0TG9hZGVyOiBUaGUgbGVnYWN5IEdlb21ldHJ5IHR5cGUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4iKTticmVhaztkZWZhdWx0OmEudHlwZSBpbiBiNnQ/bz1iNnRbYS50eXBlXS5mcm9tSlNPTihhLGUpOmNvbnNvbGUud2FybihgVEhSRUUuT2JqZWN0TG9hZGVyOiBVbnN1cHBvcnRlZCBnZW9tZXRyeSB0eXBlICIke2EudHlwZX0iYCl9by51dWlkPWEudXVpZCx2b2lkIDAhPT1hLm5hbWUmJihvLm5hbWU9YS5uYW1lKSwhMD09PW8uaXNCdWZmZXJHZW9tZXRyeSYmdm9pZCAwIT09YS51c2VyRGF0YSYmKG8udXNlckRhdGE9YS51c2VyRGF0YSksblthLnV1aWRdPW99fXJldHVybiBufXBhcnNlTWF0ZXJpYWxzKHQsZSl7Y29uc3Qgbj17fSxpPXt9O2lmKHZvaWQgMCE9PXQpe2NvbnN0IHI9bmV3IE05dDtyLnNldFRleHR1cmVzKGUpO2ZvcihsZXQgZT0wLG89dC5sZW5ndGg7ZTxvO2UrKyl7Y29uc3Qgbz10W2VdO2lmKCJNdWx0aU1hdGVyaWFsIj09PW8udHlwZSl7Y29uc3QgdD1bXTtmb3IobGV0IGU9MDtlPG8ubWF0ZXJpYWxzLmxlbmd0aDtlKyspe2NvbnN0IGk9by5tYXRlcmlhbHNbZV07dm9pZCAwPT09bltpLnV1aWRdJiYobltpLnV1aWRdPXIucGFyc2UoaSkpLHQucHVzaChuW2kudXVpZF0pfWlbby51dWlkXT10fWVsc2Ugdm9pZCAwPT09bltvLnV1aWRdJiYobltvLnV1aWRdPXIucGFyc2UobykpLGlbby51dWlkXT1uW28udXVpZF19fXJldHVybiBpfXBhcnNlQW5pbWF0aW9ucyh0KXtjb25zdCBlPXt9O2lmKHZvaWQgMCE9PXQpZm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IGk9RzZ0LnBhcnNlKHRbbl0pO2VbaS51dWlkXT1pfXJldHVybiBlfXBhcnNlSW1hZ2VzKHQsZSl7Y29uc3Qgbj10aGlzLGk9e307bGV0IHI7ZnVuY3Rpb24gbyh0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe2NvbnN0IGU9dDtyZXR1cm4oZnVuY3Rpb24gaSh0KXtyZXR1cm4gbi5tYW5hZ2VyLml0ZW1TdGFydCh0KSxyLmxvYWQodCwoZnVuY3Rpb24oKXtuLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHZvaWQgMCwoZnVuY3Rpb24oKXtuLm1hbmFnZXIuaXRlbUVycm9yKHQpLG4ubWFuYWdlci5pdGVtRW5kKHQpfSkpfSkoL14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3QoZSk/ZTpuLnJlc291cmNlUGF0aCtlKX1yZXR1cm4gdC5kYXRhP3tkYXRhOmQxdCh0LnR5cGUsdC5kYXRhKSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH06bnVsbH1pZih2b2lkIDAhPT10JiZ0Lmxlbmd0aD4wKXtjb25zdCBuPW5ldyBZNnQoZSk7cj1uZXcgSjZ0KG4pLHIuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXRbZV0scj1uLnVybDtpZihBcnJheS5pc0FycmF5KHIpKXtpW24udXVpZF09W107Zm9yKGxldCB0PTAsZT1yLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPW8oclt0XSk7bnVsbCE9PWUmJihlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudD9pW24udXVpZF0ucHVzaChlKTppW24udXVpZF0ucHVzaChuZXcgTTN0KGUuZGF0YSxlLndpZHRoLGUuaGVpZ2h0KSkpfX1lbHNle2NvbnN0IHQ9byhuLnVybCk7bnVsbCE9PXQmJihpW24udXVpZF09dCl9fX1yZXR1cm4gaX1hc3luYyBwYXJzZUltYWdlc0FzeW5jKHQpe2NvbnN0IGU9dGhpcyxuPXt9O2xldCBpO2FzeW5jIGZ1bmN0aW9uIHIodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtjb25zdCBuPXQscj0vXihcL1wvKXwoW2Etel0rOihcL1wvKT8pL2kudGVzdChuKT9uOmUucmVzb3VyY2VQYXRoK247cmV0dXJuIGF3YWl0IGkubG9hZEFzeW5jKHIpfXJldHVybiB0LmRhdGE/e2RhdGE6ZDF0KHQudHlwZSx0LmRhdGEpLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fTpudWxsfWlmKHZvaWQgMCE9PXQmJnQubGVuZ3RoPjApe2k9bmV3IEo2dCh0aGlzLm1hbmFnZXIpLGkuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKXtjb25zdCBpPXRbZV0sbz1pLnVybDtpZihBcnJheS5pc0FycmF5KG8pKXtuW2kudXVpZF09W107Zm9yKGxldCB0PTAsZT1vLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPW9bdF0sYT1hd2FpdCByKGUpO251bGwhPT1hJiYoYSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQ/bltpLnV1aWRdLnB1c2goYSk6bltpLnV1aWRdLnB1c2gobmV3IE0zdChhLmRhdGEsYS53aWR0aCxhLmhlaWdodCkpKX19ZWxzZXtjb25zdCB0PWF3YWl0IHIoaS51cmwpO251bGwhPT10JiYobltpLnV1aWRdPXQpfX19cmV0dXJuIG59cGFyc2VUZXh0dXJlcyh0LGUpe2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/dDooY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXIucGFyc2VUZXh0dXJlOiBDb25zdGFudCBzaG91bGQgYmUgaW4gbnVtZXJpYyBmb3JtLiIsdCksZVt0XSl9Y29uc3QgaT17fTtpZih2b2lkIDAhPT10KWZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7Y29uc3Qgbz10W3JdO2xldCBhO3ZvaWQgMD09PW8uaW1hZ2UmJmNvbnNvbGUud2FybignVEhSRUUuT2JqZWN0TG9hZGVyOiBObyAiaW1hZ2UiIHNwZWNpZmllZCBmb3InLG8udXVpZCksdm9pZCAwPT09ZVtvLmltYWdlXSYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBpbWFnZSIsby5pbWFnZSk7Y29uc3Qgcz1lW28uaW1hZ2VdO0FycmF5LmlzQXJyYXkocyk/KGE9bmV3ICQxdChzKSw2PT09cy5sZW5ndGgmJihhLm5lZWRzVXBkYXRlPSEwKSk6KGE9cyYmcy5kYXRhP25ldyBNM3Qocy5kYXRhLHMud2lkdGgscy5oZWlnaHQpOm5ldyBiSnQocykscyYmKGEubmVlZHNVcGRhdGU9ITApKSxhLnV1aWQ9by51dWlkLHZvaWQgMCE9PW8ubmFtZSYmKGEubmFtZT1vLm5hbWUpLHZvaWQgMCE9PW8ubWFwcGluZyYmKGEubWFwcGluZz1uKG8ubWFwcGluZyxrOXQpKSx2b2lkIDAhPT1vLm9mZnNldCYmYS5vZmZzZXQuZnJvbUFycmF5KG8ub2Zmc2V0KSx2b2lkIDAhPT1vLnJlcGVhdCYmYS5yZXBlYXQuZnJvbUFycmF5KG8ucmVwZWF0KSx2b2lkIDAhPT1vLmNlbnRlciYmYS5jZW50ZXIuZnJvbUFycmF5KG8uY2VudGVyKSx2b2lkIDAhPT1vLnJvdGF0aW9uJiYoYS5yb3RhdGlvbj1vLnJvdGF0aW9uKSx2b2lkIDAhPT1vLndyYXAmJihhLndyYXBTPW4oby53cmFwWzBdLEw5dCksYS53cmFwVD1uKG8ud3JhcFsxXSxMOXQpKSx2b2lkIDAhPT1vLmZvcm1hdCYmKGEuZm9ybWF0PW8uZm9ybWF0KSx2b2lkIDAhPT1vLnR5cGUmJihhLnR5cGU9by50eXBlKSx2b2lkIDAhPT1vLmVuY29kaW5nJiYoYS5lbmNvZGluZz1vLmVuY29kaW5nKSx2b2lkIDAhPT1vLm1pbkZpbHRlciYmKGEubWluRmlsdGVyPW4oby5taW5GaWx0ZXIsUDl0KSksdm9pZCAwIT09by5tYWdGaWx0ZXImJihhLm1hZ0ZpbHRlcj1uKG8ubWFnRmlsdGVyLFA5dCkpLHZvaWQgMCE9PW8uYW5pc290cm9weSYmKGEuYW5pc290cm9weT1vLmFuaXNvdHJvcHkpLHZvaWQgMCE9PW8uZmxpcFkmJihhLmZsaXBZPW8uZmxpcFkpLHZvaWQgMCE9PW8ucHJlbXVsdGlwbHlBbHBoYSYmKGEucHJlbXVsdGlwbHlBbHBoYT1vLnByZW11bHRpcGx5QWxwaGEpLHZvaWQgMCE9PW8udW5wYWNrQWxpZ25tZW50JiYoYS51bnBhY2tBbGlnbm1lbnQ9by51bnBhY2tBbGlnbm1lbnQpLGlbby51dWlkXT1hfXJldHVybiBpfXBhcnNlT2JqZWN0KHQsZSxuLGkscil7bGV0IG8sYSxzO2Z1bmN0aW9uIGwodCl7cmV0dXJuIHZvaWQgMD09PWVbdF0mJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgZ2VvbWV0cnkiLHQpLGVbdF19ZnVuY3Rpb24gYyh0KXtpZih2b2lkIDAhPT10KXtpZihBcnJheS5pc0FycmF5KHQpKXtjb25zdCBlPVtdO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl7Y29uc3Qgcj10W2ldO3ZvaWQgMD09PW5bcl0mJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwiLHIpLGUucHVzaChuW3JdKX1yZXR1cm4gZX1yZXR1cm4gdm9pZCAwPT09blt0XSYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBtYXRlcmlhbCIsdCksblt0XX19ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdm9pZCAwPT09aVt0XSYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCB0ZXh0dXJlIix0KSxpW3RdfXN3aXRjaCh0LnR5cGUpe2Nhc2UiU2NlbmUiOm89bmV3IFg1dCx2b2lkIDAhPT10LmJhY2tncm91bmQmJihvLmJhY2tncm91bmQ9TnVtYmVyLmlzSW50ZWdlcih0LmJhY2tncm91bmQpP25ldyAkUXQodC5iYWNrZ3JvdW5kKTp1KHQuYmFja2dyb3VuZCkpLHZvaWQgMCE9PXQuZW52aXJvbm1lbnQmJihvLmVudmlyb25tZW50PXUodC5lbnZpcm9ubWVudCkpLHZvaWQgMCE9PXQuZm9nJiYoIkZvZyI9PT10LmZvZy50eXBlP28uZm9nPW5ldyBZNXQodC5mb2cuY29sb3IsdC5mb2cubmVhcix0LmZvZy5mYXIpOiJGb2dFeHAyIj09PXQuZm9nLnR5cGUmJihvLmZvZz1uZXcgcTV0KHQuZm9nLmNvbG9yLHQuZm9nLmRlbnNpdHkpKSk7YnJlYWs7Y2FzZSJQZXJzcGVjdGl2ZUNhbWVyYSI6bz1uZXcgcTF0KHQuZm92LHQuYXNwZWN0LHQubmVhcix0LmZhciksdm9pZCAwIT09dC5mb2N1cyYmKG8uZm9jdXM9dC5mb2N1cyksdm9pZCAwIT09dC56b29tJiYoby56b29tPXQuem9vbSksdm9pZCAwIT09dC5maWxtR2F1Z2UmJihvLmZpbG1HYXVnZT10LmZpbG1HYXVnZSksdm9pZCAwIT09dC5maWxtT2Zmc2V0JiYoby5maWxtT2Zmc2V0PXQuZmlsbU9mZnNldCksdm9pZCAwIT09dC52aWV3JiYoby52aWV3PU9iamVjdC5hc3NpZ24oe30sdC52aWV3KSk7YnJlYWs7Y2FzZSJPcnRob2dyYXBoaWNDYW1lcmEiOm89bmV3IGcwdCh0LmxlZnQsdC5yaWdodCx0LnRvcCx0LmJvdHRvbSx0Lm5lYXIsdC5mYXIpLHZvaWQgMCE9PXQuem9vbSYmKG8uem9vbT10Lnpvb20pLHZvaWQgMCE9PXQudmlldyYmKG8udmlldz1PYmplY3QuYXNzaWduKHt9LHQudmlldykpO2JyZWFrO2Nhc2UiQW1iaWVudExpZ2h0IjpvPW5ldyBiOXQodC5jb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjpvPW5ldyB2OXQodC5jb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpvPW5ldyBfOXQodC5jb2xvcix0LmludGVuc2l0eSx0LmRpc3RhbmNlLHQuZGVjYXkpO2JyZWFrO2Nhc2UiUmVjdEFyZWFMaWdodCI6bz1uZXcgeDl0KHQuY29sb3IsdC5pbnRlbnNpdHksdC53aWR0aCx0LmhlaWdodCk7YnJlYWs7Y2FzZSJTcG90TGlnaHQiOm89bmV3IGQ5dCh0LmNvbG9yLHQuaW50ZW5zaXR5LHQuZGlzdGFuY2UsdC5hbmdsZSx0LnBlbnVtYnJhLHQuZGVjYXkpO2JyZWFrO2Nhc2UiSGVtaXNwaGVyZUxpZ2h0IjpvPW5ldyBhOXQodC5jb2xvcix0Lmdyb3VuZENvbG9yLHQuaW50ZW5zaXR5KTticmVhaztjYXNlIkxpZ2h0UHJvYmUiOm89KG5ldyBTOXQpLmZyb21KU09OKHQpO2JyZWFrO2Nhc2UiU2tpbm5lZE1lc2giOmE9bCh0Lmdlb21ldHJ5KSxzPWModC5tYXRlcmlhbCksbz1uZXcgdzN0KGEscyksdm9pZCAwIT09dC5iaW5kTW9kZSYmKG8uYmluZE1vZGU9dC5iaW5kTW9kZSksdm9pZCAwIT09dC5iaW5kTWF0cml4JiZvLmJpbmRNYXRyaXguZnJvbUFycmF5KHQuYmluZE1hdHJpeCksdm9pZCAwIT09dC5za2VsZXRvbiYmKG8uc2tlbGV0b249dC5za2VsZXRvbik7YnJlYWs7Y2FzZSJNZXNoIjphPWwodC5nZW9tZXRyeSkscz1jKHQubWF0ZXJpYWwpLG89bmV3IEIxdChhLHMpO2JyZWFrO2Nhc2UiSW5zdGFuY2VkTWVzaCI6YT1sKHQuZ2VvbWV0cnkpLHM9Yyh0Lm1hdGVyaWFsKTtjb25zdCBlPXQuaW5zdGFuY2VNYXRyaXgsbj10Lmluc3RhbmNlQ29sb3I7bz1uZXcgTjN0KGEscyx0LmNvdW50KSxvLmluc3RhbmNlTWF0cml4PW5ldyBRUXQobmV3IEZsb2F0MzJBcnJheShlLmFycmF5KSwxNiksdm9pZCAwIT09biYmKG8uaW5zdGFuY2VDb2xvcj1uZXcgUVF0KG5ldyBGbG9hdDMyQXJyYXkobi5hcnJheSksbi5pdGVtU2l6ZSkpO2JyZWFrO2Nhc2UiTE9EIjpvPW5ldyBnM3Q7YnJlYWs7Y2FzZSJMaW5lIjpvPW5ldyBIM3QobCh0Lmdlb21ldHJ5KSxjKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkxpbmVMb29wIjpvPW5ldyBqM3QobCh0Lmdlb21ldHJ5KSxjKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkxpbmVTZWdtZW50cyI6bz1uZXcgVTN0KGwodC5nZW9tZXRyeSksYyh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJQb2ludENsb3VkIjpjYXNlIlBvaW50cyI6bz1uZXcgJDN0KGwodC5nZW9tZXRyeSksYyh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJTcHJpdGUiOm89bmV3IGQzdChjKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkdyb3VwIjpvPW5ldyBINXQ7YnJlYWs7Y2FzZSJCb25lIjpvPW5ldyBTM3Q7YnJlYWs7ZGVmYXVsdDpvPW5ldyBrUXR9aWYoby51dWlkPXQudXVpZCx2b2lkIDAhPT10Lm5hbWUmJihvLm5hbWU9dC5uYW1lKSx2b2lkIDAhPT10Lm1hdHJpeD8oby5tYXRyaXguZnJvbUFycmF5KHQubWF0cml4KSx2b2lkIDAhPT10Lm1hdHJpeEF1dG9VcGRhdGUmJihvLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlKSxvLm1hdHJpeEF1dG9VcGRhdGUmJm8ubWF0cml4LmRlY29tcG9zZShvLnBvc2l0aW9uLG8ucXVhdGVybmlvbixvLnNjYWxlKSk6KHZvaWQgMCE9PXQucG9zaXRpb24mJm8ucG9zaXRpb24uZnJvbUFycmF5KHQucG9zaXRpb24pLHZvaWQgMCE9PXQucm90YXRpb24mJm8ucm90YXRpb24uZnJvbUFycmF5KHQucm90YXRpb24pLHZvaWQgMCE9PXQucXVhdGVybmlvbiYmby5xdWF0ZXJuaW9uLmZyb21BcnJheSh0LnF1YXRlcm5pb24pLHZvaWQgMCE9PXQuc2NhbGUmJm8uc2NhbGUuZnJvbUFycmF5KHQuc2NhbGUpKSx2b2lkIDAhPT10LmNhc3RTaGFkb3cmJihvLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93KSx2b2lkIDAhPT10LnJlY2VpdmVTaGFkb3cmJihvLnJlY2VpdmVTaGFkb3c9dC5yZWNlaXZlU2hhZG93KSx0LnNoYWRvdyYmKHZvaWQgMCE9PXQuc2hhZG93LmJpYXMmJihvLnNoYWRvdy5iaWFzPXQuc2hhZG93LmJpYXMpLHZvaWQgMCE9PXQuc2hhZG93Lm5vcm1hbEJpYXMmJihvLnNoYWRvdy5ub3JtYWxCaWFzPXQuc2hhZG93Lm5vcm1hbEJpYXMpLHZvaWQgMCE9PXQuc2hhZG93LnJhZGl1cyYmKG8uc2hhZG93LnJhZGl1cz10LnNoYWRvdy5yYWRpdXMpLHZvaWQgMCE9PXQuc2hhZG93Lm1hcFNpemUmJm8uc2hhZG93Lm1hcFNpemUuZnJvbUFycmF5KHQuc2hhZG93Lm1hcFNpemUpLHZvaWQgMCE9PXQuc2hhZG93LmNhbWVyYSYmKG8uc2hhZG93LmNhbWVyYT10aGlzLnBhcnNlT2JqZWN0KHQuc2hhZG93LmNhbWVyYSkpKSx2b2lkIDAhPT10LnZpc2libGUmJihvLnZpc2libGU9dC52aXNpYmxlKSx2b2lkIDAhPT10LmZydXN0dW1DdWxsZWQmJihvLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkKSx2b2lkIDAhPT10LnJlbmRlck9yZGVyJiYoby5yZW5kZXJPcmRlcj10LnJlbmRlck9yZGVyKSx2b2lkIDAhPT10LnVzZXJEYXRhJiYoby51c2VyRGF0YT10LnVzZXJEYXRhKSx2b2lkIDAhPT10LmxheWVycyYmKG8ubGF5ZXJzLm1hc2s9dC5sYXllcnMpLHZvaWQgMCE9PXQuY2hpbGRyZW4pe2NvbnN0IGE9dC5jaGlsZHJlbjtmb3IobGV0IHQ9MDt0PGEubGVuZ3RoO3QrKylvLmFkZCh0aGlzLnBhcnNlT2JqZWN0KGFbdF0sZSxuLGkscikpfWlmKHZvaWQgMCE9PXQuYW5pbWF0aW9ucyl7Y29uc3QgZT10LmFuaW1hdGlvbnM7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspby5hbmltYXRpb25zLnB1c2gocltlW3RdXSl9aWYoIkxPRCI9PT10LnR5cGUpe3ZvaWQgMCE9PXQuYXV0b1VwZGF0ZSYmKG8uYXV0b1VwZGF0ZT10LmF1dG9VcGRhdGUpO2NvbnN0IGU9dC5sZXZlbHM7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IG49ZVt0XSxpPW8uZ2V0T2JqZWN0QnlQcm9wZXJ0eSgidXVpZCIsbi5vYmplY3QpO3ZvaWQgMCE9PWkmJm8uYWRkTGV2ZWwoaSxuLmRpc3RhbmNlKX19cmV0dXJuIG99YmluZFNrZWxldG9ucyh0LGUpezAhPT1PYmplY3Qua2V5cyhlKS5sZW5ndGgmJnQudHJhdmVyc2UoKGZ1bmN0aW9uKHQpe2lmKCEwPT09dC5pc1NraW5uZWRNZXNoJiZ2b2lkIDAhPT10LnNrZWxldG9uKXtjb25zdCBuPWVbdC5za2VsZXRvbl07dm9pZCAwPT09bj9jb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogTm8gc2tlbGV0b24gZm91bmQgd2l0aCBVVUlEOiIsdC5za2VsZXRvbik6dC5iaW5kKG4sdC5iaW5kTWF0cml4KX19KSl9c2V0VGV4dHVyZVBhdGgodCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiAuc2V0VGV4dHVyZVBhdGgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRSZXNvdXJjZVBhdGgoKS4iKSx0aGlzLnNldFJlc291cmNlUGF0aCh0KX19LE9iamVjdFNwYWNlTm9ybWFsTWFwOjEsT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5Omw2dCxPY3RhaGVkcm9uR2VvbWV0cnk6bDZ0LE9uZUZhY3RvcjoyMDEsT25lTWludXNEc3RBbHBoYUZhY3RvcjoyMDcsT25lTWludXNEc3RDb2xvckZhY3RvcjoyMDksT25lTWludXNTcmNBbHBoYUZhY3RvcjoyMDUsT25lTWludXNTcmNDb2xvckZhY3RvcjoyMDMsT3J0aG9ncmFwaGljQ2FtZXJhOmcwdCxQQ0ZTaGFkb3dNYXA6MSxQQ0ZTb2Z0U2hhZG93TWFwOjIsUE1SRU1HZW5lcmF0b3I6UjB0LFBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeTpjNnQsUGFyYW1ldHJpY0dlb21ldHJ5OmM2dCxQYXJ0aWNsZTpmdW5jdGlvbiBmN3QodCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGUgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5TcHJpdGUuIiksbmV3IGQzdCh0KX0sUGFydGljbGVCYXNpY01hdGVyaWFsOmZ1bmN0aW9uIG03dCh0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZUJhc2ljTWF0ZXJpYWwgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHNNYXRlcmlhbC4iKSxuZXcgRzN0KHQpfSxQYXJ0aWNsZVN5c3RlbTpmdW5jdGlvbiBnN3QodCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZVN5c3RlbSBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4iKSxuZXcgJDN0KHQsZSl9LFBhcnRpY2xlU3lzdGVtTWF0ZXJpYWw6ZnVuY3Rpb24gXzd0KHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhcnRpY2xlU3lzdGVtTWF0ZXJpYWwgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHNNYXRlcmlhbC4iKSxuZXcgRzN0KHQpfSxQYXRoOmk5dCxQZXJzcGVjdGl2ZUNhbWVyYTpxMXQsUGxhbmU6dDB0LFBsYW5lQnVmZmVyR2VvbWV0cnk6YTB0LFBsYW5lR2VvbWV0cnk6YTB0LFBsYW5lSGVscGVyOmNsYXNzIGV4dGVuZHMgSDN0e2NvbnN0cnVjdG9yKHQsZT0xLG49MTY3NzY5NjApe2NvbnN0IGk9bixyPW5ldyBiMXQ7ci5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgbDF0KFsxLC0xLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwxLDAsMCwxLDAsMCwwXSwzKSksci5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxzdXBlcihyLG5ldyBJM3Qoe2NvbG9yOmksdG9uZU1hcHBlZDohMX0pKSx0aGlzLnR5cGU9IlBsYW5lSGVscGVyIix0aGlzLnBsYW5lPXQsdGhpcy5zaXplPWU7Y29uc3Qgbz1uZXcgYjF0O28uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGwxdChbMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsLTEsMSwxLC0xLDFdLDMpKSxvLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHRoaXMuYWRkKG5ldyBCMXQobyxuZXcgS1F0KHtjb2xvcjppLG9wYWNpdHk6LjIsdHJhbnNwYXJlbnQ6ITAsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExfSkpKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtsZXQgZT0tdGhpcy5wbGFuZS5jb25zdGFudDtNYXRoLmFicyhlKTwxZS04JiYoZT0xZS04KSx0aGlzLnNjYWxlLnNldCguNSp0aGlzLnNpemUsLjUqdGhpcy5zaXplLGUpLHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuc2lkZT1lPDA/MTowLHRoaXMubG9va0F0KHRoaXMucGxhbmUubm9ybWFsKSxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KX19LFBvaW50Q2xvdWQ6ZnVuY3Rpb24geTd0KHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUG9pbnRDbG91ZCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4iKSxuZXcgJDN0KHQsZSl9LFBvaW50Q2xvdWRNYXRlcmlhbDpmdW5jdGlvbiB2N3QodCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUG9pbnRDbG91ZE1hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIiksbmV3IEczdCh0KX0sUG9pbnRMaWdodDpfOXQsUG9pbnRMaWdodEhlbHBlcjpjbGFzcyBleHRlbmRzIEIxdHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIobmV3IGQ2dChlLDQsMiksbmV3IEtRdCh7d2lyZWZyYW1lOiEwLGZvZzohMSx0b25lTWFwcGVkOiExfSkpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5jb2xvcj1uLHRoaXMudHlwZT0iUG9pbnRMaWdodEhlbHBlciIsdGhpcy5tYXRyaXg9dGhpcy5saWdodC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy51cGRhdGUoKX1kaXNwb3NlKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7dm9pZCAwIT09dGhpcy5jb2xvcj90aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTp0aGlzLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcil9fSxQb2ludHM6JDN0LFBvaW50c01hdGVyaWFsOkczdCxQb2xhckdyaWRIZWxwZXI6Y2xhc3MgZXh0ZW5kcyBVM3R7Y29uc3RydWN0b3IodD0xMCxlPTE2LG49OCxpPTY0LHI9NDQ3MzkyNCxvPTg5NDc4NDgpe3I9bmV3ICRRdChyKSxvPW5ldyAkUXQobyk7Y29uc3QgYT1bXSxzPVtdO2ZvcihsZXQgbj0wO248PWU7bisrKXtjb25zdCBpPW4vZSooMipNYXRoLlBJKSxsPU1hdGguc2luKGkpKnQsYz1NYXRoLmNvcyhpKSp0O2EucHVzaCgwLDAsMCksYS5wdXNoKGwsMCxjKTtjb25zdCB1PTEmbj9yOm87cy5wdXNoKHUucix1LmcsdS5iKSxzLnB1c2godS5yLHUuZyx1LmIpfWZvcihsZXQgZT0wO2U8PW47ZSsrKXtjb25zdCBsPTEmZT9yOm8sYz10LXQvbiplO2ZvcihsZXQgdD0wO3Q8aTt0Kyspe2xldCBlPXQvaSooMipNYXRoLlBJKSxuPU1hdGguc2luKGUpKmMscj1NYXRoLmNvcyhlKSpjO2EucHVzaChuLDAscikscy5wdXNoKGwucixsLmcsbC5iKSxlPSh0KzEpL2kqKDIqTWF0aC5QSSksbj1NYXRoLnNpbihlKSpjLHI9TWF0aC5jb3MoZSkqYyxhLnB1c2gobiwwLHIpLHMucHVzaChsLnIsbC5nLGwuYil9fWNvbnN0IGw9bmV3IGIxdDtsLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBsMXQoYSwzKSksbC5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgbDF0KHMsMykpLHN1cGVyKGwsbmV3IEkzdCh7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy50eXBlPSJQb2xhckdyaWRIZWxwZXIifX0sUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5OnI0dCxQb2x5aGVkcm9uR2VvbWV0cnk6cjR0LFBvc2l0aW9uYWxBdWRpbzpjbGFzcyBleHRlbmRzICQ5dHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnBhbm5lcj10aGlzLmNvbnRleHQuY3JlYXRlUGFubmVyKCksdGhpcy5wYW5uZXIucGFubmluZ01vZGVsPSJIUlRGIix0aGlzLnBhbm5lci5jb25uZWN0KHRoaXMuZ2Fpbil9Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMucGFubmVyfWdldFJlZkRpc3RhbmNlKCl7cmV0dXJuIHRoaXMucGFubmVyLnJlZkRpc3RhbmNlfXNldFJlZkRpc3RhbmNlKHQpe3JldHVybiB0aGlzLnBhbm5lci5yZWZEaXN0YW5jZT10LHRoaXN9Z2V0Um9sbG9mZkZhY3Rvcigpe3JldHVybiB0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yfXNldFJvbGxvZmZGYWN0b3IodCl7cmV0dXJuIHRoaXMucGFubmVyLnJvbGxvZmZGYWN0b3I9dCx0aGlzfWdldERpc3RhbmNlTW9kZWwoKXtyZXR1cm4gdGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbH1zZXREaXN0YW5jZU1vZGVsKHQpe3JldHVybiB0aGlzLnBhbm5lci5kaXN0YW5jZU1vZGVsPXQsdGhpc31nZXRNYXhEaXN0YW5jZSgpe3JldHVybiB0aGlzLnBhbm5lci5tYXhEaXN0YW5jZX1zZXRNYXhEaXN0YW5jZSh0KXtyZXR1cm4gdGhpcy5wYW5uZXIubWF4RGlzdGFuY2U9dCx0aGlzfXNldERpcmVjdGlvbmFsQ29uZSh0LGUsbil7cmV0dXJuIHRoaXMucGFubmVyLmNvbmVJbm5lckFuZ2xlPXQsdGhpcy5wYW5uZXIuY29uZU91dGVyQW5nbGU9ZSx0aGlzLnBhbm5lci5jb25lT3V0ZXJHYWluPW4sdGhpc311cGRhdGVNYXRyaXhXb3JsZCh0KXtpZihzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSwhMD09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sJiYhMT09PXRoaXMuaXNQbGF5aW5nKXJldHVybjt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShLOXQsWjl0LEo5dCksUTl0LnNldCgwLDAsMSkuYXBwbHlRdWF0ZXJuaW9uKFo5dCk7Y29uc3QgZT10aGlzLnBhbm5lcjtpZihlLnBvc2l0aW9uWCl7Y29uc3QgdD10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy5saXN0ZW5lci50aW1lRGVsdGE7ZS5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoSzl0LngsdCksZS5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoSzl0LnksdCksZS5wb3NpdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoSzl0LnosdCksZS5vcmllbnRhdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoUTl0LngsdCksZS5vcmllbnRhdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoUTl0LnksdCksZS5vcmllbnRhdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoUTl0LnosdCl9ZWxzZSBlLnNldFBvc2l0aW9uKEs5dC54LEs5dC55LEs5dC56KSxlLnNldE9yaWVudGF0aW9uKFE5dC54LFE5dC55LFE5dC56KX19LFByb3BlcnR5QmluZGluZzpoOHQsUHJvcGVydHlNaXhlcjplOHQsUXVhZHJhdGljQmV6aWVyQ3VydmU6QzR0LFF1YWRyYXRpY0JlemllckN1cnZlMzpBNHQsUXVhdGVybmlvbjpUSnQsUXVhdGVybmlvbktleWZyYW1lVHJhY2s6VjZ0LFF1YXRlcm5pb25MaW5lYXJJbnRlcnBvbGFudDpGNnQsUkVWSVNJT046Qkt0LFJHQkFEZXB0aFBhY2tpbmc6MzIwMSxSR0JBRm9ybWF0OmhadCxSR0JBSW50ZWdlckZvcm1hdDoxMDMzLFJHQkFfQVNUQ18xMHgxMF9Gb3JtYXQ6Mzc4MTksUkdCQV9BU1RDXzEweDVfRm9ybWF0OjM3ODE2LFJHQkFfQVNUQ18xMHg2X0Zvcm1hdDozNzgxNyxSR0JBX0FTVENfMTB4OF9Gb3JtYXQ6Mzc4MTgsUkdCQV9BU1RDXzEyeDEwX0Zvcm1hdDozNzgyMCxSR0JBX0FTVENfMTJ4MTJfRm9ybWF0OjM3ODIxLFJHQkFfQVNUQ180eDRfRm9ybWF0OjM3ODA4LFJHQkFfQVNUQ181eDRfRm9ybWF0OjM3ODA5LFJHQkFfQVNUQ181eDVfRm9ybWF0OjM3ODEwLFJHQkFfQVNUQ182eDVfRm9ybWF0OjM3ODExLFJHQkFfQVNUQ182eDZfRm9ybWF0OjM3ODEyLFJHQkFfQVNUQ184eDVfRm9ybWF0OjM3ODEzLFJHQkFfQVNUQ184eDZfRm9ybWF0OjM3ODE0LFJHQkFfQVNUQ184eDhfRm9ybWF0OjM3ODE1LFJHQkFfQlBUQ19Gb3JtYXQ6MzY0OTIsUkdCQV9FVEMyX0VBQ19Gb3JtYXQ6U1p0LFJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdDp4WnQsUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0OmJadCxSR0JBX1MzVENfRFhUMV9Gb3JtYXQ6bVp0LFJHQkFfUzNUQ19EWFQzX0Zvcm1hdDpnWnQsUkdCQV9TM1RDX0RYVDVfRm9ybWF0Ol9adCxSR0JERW5jb2Rpbmc6Qlp0LFJHQkVFbmNvZGluZzpPWnQsUkdCRUZvcm1hdDoxMDIzLFJHQkZvcm1hdDp1WnQsUkdCSW50ZWdlckZvcm1hdDoxMDMyLFJHQk0xNkVuY29kaW5nOkRadCxSR0JNN0VuY29kaW5nOnpadCxSR0JfRVRDMV9Gb3JtYXQ6MzYxOTYsUkdCX0VUQzJfRm9ybWF0OndadCxSR0JfUFZSVENfMkJQUFYxX0Zvcm1hdDp2WnQsUkdCX1BWUlRDXzRCUFBWMV9Gb3JtYXQ6eVp0LFJHQl9TM1RDX0RYVDFfRm9ybWF0OmZadCxSR0Zvcm1hdDoxMDMwLFJHSW50ZWdlckZvcm1hdDoxMDMxLFJhd1NoYWRlck1hdGVyaWFsOl8wdCxSYXk6aVF0LFJheWNhc3RlcjpjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsbj0wLGk9MS8wKXt0aGlzLnJheT1uZXcgaVF0KHQsZSksdGhpcy5uZWFyPW4sdGhpcy5mYXI9aSx0aGlzLmNhbWVyYT1udWxsLHRoaXMubGF5ZXJzPW5ldyBtUXQsdGhpcy5wYXJhbXM9e01lc2g6e30sTGluZTp7dGhyZXNob2xkOjF9LExPRDp7fSxQb2ludHM6e3RocmVzaG9sZDoxfSxTcHJpdGU6e319fXNldCh0LGUpe3RoaXMucmF5LnNldCh0LGUpfXNldEZyb21DYW1lcmEodCxlKXtlJiZlLmlzUGVyc3BlY3RpdmVDYW1lcmE/KHRoaXMucmF5Lm9yaWdpbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCksdGhpcy5yYXkuZGlyZWN0aW9uLnNldCh0LngsdC55LC41KS51bnByb2plY3QoZSkuc3ViKHRoaXMucmF5Lm9yaWdpbikubm9ybWFsaXplKCksdGhpcy5jYW1lcmE9ZSk6ZSYmZS5pc09ydGhvZ3JhcGhpY0NhbWVyYT8odGhpcy5yYXkub3JpZ2luLnNldCh0LngsdC55LChlLm5lYXIrZS5mYXIpLyhlLm5lYXItZS5mYXIpKS51bnByb2plY3QoZSksdGhpcy5yYXkuZGlyZWN0aW9uLnNldCgwLDAsLTEpLnRyYW5zZm9ybURpcmVjdGlvbihlLm1hdHJpeFdvcmxkKSx0aGlzLmNhbWVyYT1lKTpjb25zb2xlLmVycm9yKCJUSFJFRS5SYXljYXN0ZXI6IFVuc3VwcG9ydGVkIGNhbWVyYSB0eXBlOiAiK2UudHlwZSl9aW50ZXJzZWN0T2JqZWN0KHQsZT0hMSxuPVtdKXtyZXR1cm4gdjh0KHQsdGhpcyxuLGUpLG4uc29ydCh5OHQpLG59aW50ZXJzZWN0T2JqZWN0cyh0LGU9ITEsbj1bXSl7Zm9yKGxldCBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKXY4dCh0W2ldLHRoaXMsbixlKTtyZXR1cm4gbi5zb3J0KHk4dCksbn19LFJlY3RBcmVhTGlnaHQ6eDl0LFJlZEZvcm1hdDoxMDI4LFJlZEludGVnZXJGb3JtYXQ6MTAyOSxSZWluaGFyZFRvbmVNYXBwaW5nOjIsUmVwZWF0V3JhcHBpbmc6JEt0LFJlcGxhY2VTdGVuY2lsT3A6NzY4MSxSZXZlcnNlU3VidHJhY3RFcXVhdGlvbjoxMDIsUmluZ0J1ZmZlckdlb21ldHJ5OnU2dCxSaW5nR2VvbWV0cnk6dTZ0LFNSR0I4X0FMUEhBOF9BU1RDXzEweDEwX0Zvcm1hdDozNzg1MSxTUkdCOF9BTFBIQThfQVNUQ18xMHg1X0Zvcm1hdDozNzg0OCxTUkdCOF9BTFBIQThfQVNUQ18xMHg2X0Zvcm1hdDozNzg0OSxTUkdCOF9BTFBIQThfQVNUQ18xMHg4X0Zvcm1hdDozNzg1MCxTUkdCOF9BTFBIQThfQVNUQ18xMngxMF9Gb3JtYXQ6Mzc4NTIsU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfRm9ybWF0OjM3ODUzLFNSR0I4X0FMUEhBOF9BU1RDXzR4NF9Gb3JtYXQ6Mzc4NDAsU1JHQjhfQUxQSEE4X0FTVENfNXg0X0Zvcm1hdDozNzg0MSxTUkdCOF9BTFBIQThfQVNUQ181eDVfRm9ybWF0OjM3ODQyLFNSR0I4X0FMUEhBOF9BU1RDXzZ4NV9Gb3JtYXQ6Mzc4NDMsU1JHQjhfQUxQSEE4X0FTVENfNng2X0Zvcm1hdDozNzg0NCxTUkdCOF9BTFBIQThfQVNUQ184eDVfRm9ybWF0OjM3ODQ1LFNSR0I4X0FMUEhBOF9BU1RDXzh4Nl9Gb3JtYXQ6Mzc4NDYsU1JHQjhfQUxQSEE4X0FTVENfOHg4X0Zvcm1hdDozNzg0NyxTY2VuZTpYNXQsU2NlbmVVdGlsczpaOHQsU2hhZGVyQ2h1bms6czB0LFNoYWRlckxpYjpjMHQsU2hhZGVyTWF0ZXJpYWw6RzF0LFNoYWRvd01hdGVyaWFsOng2dCxTaGFwZTpyOXQsU2hhcGVCdWZmZXJHZW9tZXRyeTpoNnQsU2hhcGVHZW9tZXRyeTpoNnQsU2hhcGVQYXRoOkk5dCxTaGFwZVV0aWxzOmU2dCxTaG9ydFR5cGU6MTAxMSxTa2VsZXRvbjpDM3QsU2tlbGV0b25IZWxwZXI6UDh0LFNraW5uZWRNZXNoOnczdCxTbW9vdGhTaGFkaW5nOjIsU3BoZXJlOiRKdCxTcGhlcmVCdWZmZXJHZW9tZXRyeTpkNnQsU3BoZXJlR2VvbWV0cnk6ZDZ0LFNwaGVyaWNhbDpiOHQsU3BoZXJpY2FsSGFybW9uaWNzMzp3OXQsU3BsaW5lQ3VydmU6azR0LFNwb3RMaWdodDpkOXQsU3BvdExpZ2h0SGVscGVyOmNsYXNzIGV4dGVuZHMga1F0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLmxpZ2h0PXQsdGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuY29sb3I9ZTtjb25zdCBuPW5ldyBiMXQsaT1bMCwwLDAsMCwwLDEsMCwwLDAsMSwwLDEsMCwwLDAsLTEsMCwxLDAsMCwwLDAsMSwxLDAsMCwwLDAsLTEsMV07Zm9yKGxldCB0PTAsZT0xLG49MzI7dDxuO3QrKyxlKyspe2NvbnN0IHI9dC9uKk1hdGguUEkqMixvPWUvbipNYXRoLlBJKjI7aS5wdXNoKE1hdGguY29zKHIpLE1hdGguc2luKHIpLDEsTWF0aC5jb3MobyksTWF0aC5zaW4obyksMSl9bi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgbDF0KGksMykpO2NvbnN0IHI9bmV3IEkzdCh7Zm9nOiExLHRvbmVNYXBwZWQ6ITF9KTt0aGlzLmNvbmU9bmV3IFUzdChuLHIpLHRoaXMuYWRkKHRoaXMuY29uZSksdGhpcy51cGRhdGUoKX1kaXNwb3NlKCl7dGhpcy5jb25lLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLmNvbmUubWF0ZXJpYWwuZGlzcG9zZSgpfXVwZGF0ZSgpe3RoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTtjb25zdCB0PXRoaXMubGlnaHQuZGlzdGFuY2U/dGhpcy5saWdodC5kaXN0YW5jZToxZTMsZT10Kk1hdGgudGFuKHRoaXMubGlnaHQuYW5nbGUpO3RoaXMuY29uZS5zY2FsZS5zZXQoZSxlLHQpLEM4dC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQpLHRoaXMuY29uZS5sb29rQXQoQzh0KSx2b2lkIDAhPT10aGlzLmNvbG9yP3RoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik6dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcil9fSxTcHJpdGU6ZDN0LFNwcml0ZU1hdGVyaWFsOko1dCxTcmNBbHBoYUZhY3RvcjoyMDQsU3JjQWxwaGFTYXR1cmF0ZUZhY3RvcjoyMTAsU3JjQ29sb3JGYWN0b3I6MjAyLFN0YXRpY0NvcHlVc2FnZTozNTA0NixTdGF0aWNEcmF3VXNhZ2U6Rlp0LFN0YXRpY1JlYWRVc2FnZTozNTA0NSxTdGVyZW9DYW1lcmE6Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnR5cGU9IlN0ZXJlb0NhbWVyYSIsdGhpcy5hc3BlY3Q9MSx0aGlzLmV5ZVNlcD0uMDY0LHRoaXMuY2FtZXJhTD1uZXcgcTF0LHRoaXMuY2FtZXJhTC5sYXllcnMuZW5hYmxlKDEpLHRoaXMuY2FtZXJhTC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuY2FtZXJhUj1uZXcgcTF0LHRoaXMuY2FtZXJhUi5sYXllcnMuZW5hYmxlKDIpLHRoaXMuY2FtZXJhUi5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2NhY2hlPXtmb2N1czpudWxsLGZvdjpudWxsLGFzcGVjdDpudWxsLG5lYXI6bnVsbCxmYXI6bnVsbCx6b29tOm51bGwsZXllU2VwOm51bGx9fXVwZGF0ZSh0KXtjb25zdCBlPXRoaXMuX2NhY2hlO2lmKGUuZm9jdXMhPT10LmZvY3VzfHxlLmZvdiE9PXQuZm92fHxlLmFzcGVjdCE9PXQuYXNwZWN0KnRoaXMuYXNwZWN0fHxlLm5lYXIhPT10Lm5lYXJ8fGUuZmFyIT09dC5mYXJ8fGUuem9vbSE9PXQuem9vbXx8ZS5leWVTZXAhPT10aGlzLmV5ZVNlcCl7ZS5mb2N1cz10LmZvY3VzLGUuZm92PXQuZm92LGUuYXNwZWN0PXQuYXNwZWN0KnRoaXMuYXNwZWN0LGUubmVhcj10Lm5lYXIsZS5mYXI9dC5mYXIsZS56b29tPXQuem9vbSxlLmV5ZVNlcD10aGlzLmV5ZVNlcDtjb25zdCBuPXQucHJvamVjdGlvbk1hdHJpeC5jbG9uZSgpLGk9ZS5leWVTZXAvMixyPWkqZS5uZWFyL2UuZm9jdXMsbz1lLm5lYXIqTWF0aC50YW4ocVp0KmUuZm92Ki41KS9lLnpvb207bGV0IGEscztVOXQuZWxlbWVudHNbMTJdPS1pLFY5dC5lbGVtZW50c1sxMl09aSxhPS1vKmUuYXNwZWN0K3Iscz1vKmUuYXNwZWN0K3Isbi5lbGVtZW50c1swXT0yKmUubmVhci8ocy1hKSxuLmVsZW1lbnRzWzhdPShzK2EpLyhzLWEpLHRoaXMuY2FtZXJhTC5wcm9qZWN0aW9uTWF0cml4LmNvcHkobiksYT0tbyplLmFzcGVjdC1yLHM9byplLmFzcGVjdC1yLG4uZWxlbWVudHNbMF09MiplLm5lYXIvKHMtYSksbi5lbGVtZW50c1s4XT0ocythKS8ocy1hKSx0aGlzLmNhbWVyYVIucHJvamVjdGlvbk1hdHJpeC5jb3B5KG4pfXRoaXMuY2FtZXJhTC5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLm11bHRpcGx5KFU5dCksdGhpcy5jYW1lcmFSLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCkubXVsdGlwbHkoVjl0KX19LFN0cmVhbUNvcHlVc2FnZTozNTA0MixTdHJlYW1EcmF3VXNhZ2U6MzUwNDAsU3RyZWFtUmVhZFVzYWdlOjM1MDQxLFN0cmluZ0tleWZyYW1lVHJhY2s6VTZ0LFN1YnRyYWN0RXF1YXRpb246MTAxLFN1YnRyYWN0aXZlQmxlbmRpbmc6MyxUT1VDSDpGS3QsVGFuZ2VudFNwYWNlTm9ybWFsTWFwOjAsVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeTpwNnQsVGV0cmFoZWRyb25HZW9tZXRyeTpwNnQsVGV4dEJ1ZmZlckdlb21ldHJ5OmY2dCxUZXh0R2VvbWV0cnk6ZjZ0LFRleHR1cmU6Ykp0LFRleHR1cmVMb2FkZXI6ZTl0LFRvcnVzQnVmZmVyR2VvbWV0cnk6bTZ0LFRvcnVzR2VvbWV0cnk6bTZ0LFRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5Omc2dCxUb3J1c0tub3RHZW9tZXRyeTpnNnQsVHJpYW5nbGU6RlF0LFRyaWFuZ2xlRmFuRHJhd01vZGU6MixUcmlhbmdsZVN0cmlwRHJhd01vZGU6MSxUcmlhbmdsZXNEcmF3TW9kZTowLFR1YmVCdWZmZXJHZW9tZXRyeTpfNnQsVHViZUdlb21ldHJ5Ol82dCxVVk1hcHBpbmc6VUt0LFVpbnQxNkF0dHJpYnV0ZTpmdW5jdGlvbiBiN3QodCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50MTZBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyByMXQodCxlKX0sVWludDE2QnVmZmVyQXR0cmlidXRlOnIxdCxVaW50MzJBdHRyaWJ1dGU6ZnVuY3Rpb24geDd0KHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgYTF0KHQsZSl9LFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZTphMXQsVWludDhBdHRyaWJ1dGU6ZnVuY3Rpb24gdzd0KHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDhBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50OEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IGUxdCh0LGUpfSxVaW50OEJ1ZmZlckF0dHJpYnV0ZTplMXQsVWludDhDbGFtcGVkQXR0cmlidXRlOmZ1bmN0aW9uIFM3dCh0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IG4xdCh0LGUpfSxVaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1dGU6bjF0LFVuaWZvcm06bTh0LFVuaWZvcm1zTGliOmwwdCxVbmlmb3Jtc1V0aWxzOmoxdCxVbnNpZ25lZEJ5dGVUeXBlOnJadCxVbnNpZ25lZEludDI0OFR5cGU6Y1p0LFVuc2lnbmVkSW50VHlwZTphWnQsVW5zaWduZWRTaG9ydDQ0NDRUeXBlOjEwMTcsVW5zaWduZWRTaG9ydDU1NTFUeXBlOjEwMTgsVW5zaWduZWRTaG9ydDU2NVR5cGU6MTAxOSxVbnNpZ25lZFNob3J0VHlwZTpvWnQsVlNNU2hhZG93TWFwOjMsVmVjdG9yMjptSnQsVmVjdG9yMzpDSnQsVmVjdG9yNDp3SnQsVmVjdG9yS2V5ZnJhbWVUcmFjazpqNnQsVmVydGV4OmZ1bmN0aW9uIE03dCh0LGUsbil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVydGV4IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5WZWN0b3IzIGluc3RlYWQuIiksbmV3IENKdCh0LGUsbil9LFZlcnRleENvbG9yczoyLFZpZGVvVGV4dHVyZTpaM3QsV2ViR0wxUmVuZGVyZXI6VzV0LFdlYkdMQ3ViZVJlbmRlclRhcmdldDpLMXQsV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM6TUp0LFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ6RUp0LFdlYkdMUmVuZGVyVGFyZ2V0OlNKdCxXZWJHTFJlbmRlclRhcmdldEN1YmU6ZnVuY3Rpb24gRTd0KHQsZSxuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldEN1YmUoIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMgKSBpcyBub3cgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCBzaXplLCBvcHRpb25zICkuIiksbmV3IEsxdCh0LG4pfSxXZWJHTFJlbmRlcmVyOkc1dCxXZWJHTFV0aWxzOkQ1dCxXaXJlZnJhbWVHZW9tZXRyeTp5NnQsV2lyZWZyYW1lSGVscGVyOmZ1bmN0aW9uIFQ3dCh0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldpcmVmcmFtZUhlbHBlciBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuV2lyZWZyYW1lR2VvbWV0cnkgaW5zdGVhZC4iKSxuZXcgVTN0KG5ldyB5NnQodC5nZW9tZXRyeSksbmV3IEkzdCh7Y29sb3I6dm9pZCAwIT09ZT9lOjE2Nzc3MjE1fSkpfSxXcmFwQXJvdW5kRW5kaW5nOmtadCxYSFJMb2FkZXI6ZnVuY3Rpb24gQzd0KHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlhIUkxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkZpbGVMb2FkZXIuIiksbmV3IFo2dCh0KX0sWmVyb0N1cnZhdHVyZUVuZGluZzpDWnQsWmVyb0ZhY3RvcjoyMDAsWmVyb1Nsb3BlRW5kaW5nOkFadCxaZXJvU3RlbmNpbE9wOjAsc1JHQkVuY29kaW5nOkladH0pO2NvbnN0IEE3dD17dHlwZToiY2hhbmdlIn0sazd0PXt0eXBlOiJzdGFydCJ9LEw3dD17dHlwZToiZW5kIn07Y2xhc3MgUDd0IGV4dGVuZHMgalp0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx2b2lkIDA9PT1lJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9yYml0Q29udHJvbHM6IFRoZSBzZWNvbmQgcGFyYW1ldGVyICJkb21FbGVtZW50IiBpcyBub3cgbWFuZGF0b3J5LicpLGU9PT1kb2N1bWVudCYmY29uc29sZS5lcnJvcignVEhSRUUuT3JiaXRDb250cm9sczogImRvY3VtZW50IiBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIHRhcmdldCAiZG9tRWxlbWVudCIuIFBsZWFzZSB1c2UgInJlbmRlcmVyLmRvbUVsZW1lbnQiIGluc3RlYWQuJyksdGhpcy5vYmplY3Q9dCx0aGlzLmRvbUVsZW1lbnQ9ZSx0aGlzLmRvbUVsZW1lbnQuc3R5bGUudG91Y2hBY3Rpb249Im5vbmUiLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRhcmdldD1uZXcgQ0p0LHRoaXMubWluRGlzdGFuY2U9MCx0aGlzLm1heERpc3RhbmNlPTEvMCx0aGlzLm1pblpvb209MCx0aGlzLm1heFpvb209MS8wLHRoaXMubWluUG9sYXJBbmdsZT0wLHRoaXMubWF4UG9sYXJBbmdsZT1NYXRoLlBJLHRoaXMubWluQXppbXV0aEFuZ2xlPS0xLzAsdGhpcy5tYXhBemltdXRoQW5nbGU9MS8wLHRoaXMuZW5hYmxlRGFtcGluZz0hMSx0aGlzLmRhbXBpbmdGYWN0b3I9LjA1LHRoaXMuZW5hYmxlWm9vbT0hMCx0aGlzLnpvb21TcGVlZD0xLHRoaXMuZW5hYmxlUm90YXRlPSEwLHRoaXMucm90YXRlU3BlZWQ9MSx0aGlzLmVuYWJsZVBhbj0hMCx0aGlzLnBhblNwZWVkPTEsdGhpcy5zY3JlZW5TcGFjZVBhbm5pbmc9ITAsdGhpcy5rZXlQYW5TcGVlZD03LHRoaXMuYXV0b1JvdGF0ZT0hMSx0aGlzLmF1dG9Sb3RhdGVTcGVlZD0yLHRoaXMua2V5cz17TEVGVDoiQXJyb3dMZWZ0IixVUDoiQXJyb3dVcCIsUklHSFQ6IkFycm93UmlnaHQiLEJPVFRPTToiQXJyb3dEb3duIn0sdGhpcy5tb3VzZUJ1dHRvbnM9e0xFRlQ6SEt0LlJPVEFURSxNSURETEU6SEt0LkRPTExZLFJJR0hUOkhLdC5QQU59LHRoaXMudG91Y2hlcz17T05FOkZLdC5ST1RBVEUsVFdPOkZLdC5ET0xMWV9QQU59LHRoaXMudGFyZ2V0MD10aGlzLnRhcmdldC5jbG9uZSgpLHRoaXMucG9zaXRpb24wPXRoaXMub2JqZWN0LnBvc2l0aW9uLmNsb25lKCksdGhpcy56b29tMD10aGlzLm9iamVjdC56b29tLHRoaXMuX2RvbUVsZW1lbnRLZXlFdmVudHM9bnVsbCx0aGlzLmdldFBvbGFyQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5waGl9LHRoaXMuZ2V0QXppbXV0aGFsQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS50aGV0YX0sdGhpcy5nZXREaXN0YW5jZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9iamVjdC5wb3NpdGlvbi5kaXN0YW5jZVRvKHRoaXMudGFyZ2V0KX0sdGhpcy5saXN0ZW5Ub0tleUV2ZW50cz1mdW5jdGlvbih0KXt0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGopLHRoaXMuX2RvbUVsZW1lbnRLZXlFdmVudHM9dH0sdGhpcy5zYXZlU3RhdGU9ZnVuY3Rpb24oKXtuLnRhcmdldDAuY29weShuLnRhcmdldCksbi5wb3NpdGlvbjAuY29weShuLm9iamVjdC5wb3NpdGlvbiksbi56b29tMD1uLm9iamVjdC56b29tfSx0aGlzLnJlc2V0PWZ1bmN0aW9uKCl7bi50YXJnZXQuY29weShuLnRhcmdldDApLG4ub2JqZWN0LnBvc2l0aW9uLmNvcHkobi5wb3NpdGlvbjApLG4ub2JqZWN0Lnpvb209bi56b29tMCxuLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksbi5kaXNwYXRjaEV2ZW50KEE3dCksbi51cGRhdGUoKSxyPWkuTk9ORX0sdGhpcy51cGRhdGU9KGZ1bmN0aW9uKCl7Y29uc3QgZT1uZXcgQ0p0LGg9KG5ldyBUSnQpLnNldEZyb21Vbml0VmVjdG9ycyh0LnVwLG5ldyBDSnQoMCwxLDApKSxkPWguY2xvbmUoKS5pbnZlcnQoKSxwPW5ldyBDSnQsZj1uZXcgVEp0LG09MipNYXRoLlBJO3JldHVybiBmdW5jdGlvbiB0KCl7Y29uc3QgZz1uLm9iamVjdC5wb3NpdGlvbjtlLmNvcHkoZykuc3ViKG4udGFyZ2V0KSxlLmFwcGx5UXVhdGVybmlvbihoKSxhLnNldEZyb21WZWN0b3IzKGUpLG4uYXV0b1JvdGF0ZSYmcj09PWkuTk9ORSYmUygoZnVuY3Rpb24gXygpe3JldHVybiAyKk1hdGguUEkvNjAvNjAqbi5hdXRvUm90YXRlU3BlZWR9KSgpKSxuLmVuYWJsZURhbXBpbmc/KGEudGhldGErPXMudGhldGEqbi5kYW1waW5nRmFjdG9yLGEucGhpKz1zLnBoaSpuLmRhbXBpbmdGYWN0b3IpOihhLnRoZXRhKz1zLnRoZXRhLGEucGhpKz1zLnBoaSk7bGV0IHk9bi5taW5BemltdXRoQW5nbGUsdj1uLm1heEF6aW11dGhBbmdsZTtyZXR1cm4gaXNGaW5pdGUoeSkmJmlzRmluaXRlKHYpJiYoeTwtTWF0aC5QST95Kz1tOnk+TWF0aC5QSSYmKHktPW0pLHY8LU1hdGguUEk/dis9bTp2Pk1hdGguUEkmJih2LT1tKSxhLnRoZXRhPXk8PXY/TWF0aC5tYXgoeSxNYXRoLm1pbih2LGEudGhldGEpKTphLnRoZXRhPih5K3YpLzI/TWF0aC5tYXgoeSxhLnRoZXRhKTpNYXRoLm1pbih2LGEudGhldGEpKSxhLnBoaT1NYXRoLm1heChuLm1pblBvbGFyQW5nbGUsTWF0aC5taW4obi5tYXhQb2xhckFuZ2xlLGEucGhpKSksYS5tYWtlU2FmZSgpLGEucmFkaXVzKj1sLGEucmFkaXVzPU1hdGgubWF4KG4ubWluRGlzdGFuY2UsTWF0aC5taW4obi5tYXhEaXN0YW5jZSxhLnJhZGl1cykpLCEwPT09bi5lbmFibGVEYW1waW5nP24udGFyZ2V0LmFkZFNjYWxlZFZlY3RvcihjLG4uZGFtcGluZ0ZhY3Rvcik6bi50YXJnZXQuYWRkKGMpLGUuc2V0RnJvbVNwaGVyaWNhbChhKSxlLmFwcGx5UXVhdGVybmlvbihkKSxnLmNvcHkobi50YXJnZXQpLmFkZChlKSxuLm9iamVjdC5sb29rQXQobi50YXJnZXQpLCEwPT09bi5lbmFibGVEYW1waW5nPyhzLnRoZXRhKj0xLW4uZGFtcGluZ0ZhY3RvcixzLnBoaSo9MS1uLmRhbXBpbmdGYWN0b3IsYy5tdWx0aXBseVNjYWxhcigxLW4uZGFtcGluZ0ZhY3RvcikpOihzLnNldCgwLDAsMCksYy5zZXQoMCwwLDApKSxsPTEsISEodXx8cC5kaXN0YW5jZVRvU3F1YXJlZChuLm9iamVjdC5wb3NpdGlvbik+b3x8OCooMS1mLmRvdChuLm9iamVjdC5xdWF0ZXJuaW9uKSk+bykmJihuLmRpc3BhdGNoRXZlbnQoQTd0KSxwLmNvcHkobi5vYmplY3QucG9zaXRpb24pLGYuY29weShuLm9iamVjdC5xdWF0ZXJuaW9uKSx1PSExLCEwKX19KSgpLHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe24uZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsRyksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixCKSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsViksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIixVKSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLEgpLG4uZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLEYpLG51bGwhPT1uLl9kb21FbGVtZW50S2V5RXZlbnRzJiZuLl9kb21FbGVtZW50S2V5RXZlbnRzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGopfTtjb25zdCBuPXRoaXMsaT17Tk9ORTotMSxST1RBVEU6MCxET0xMWToxLFBBTjoyLFRPVUNIX1JPVEFURTozLFRPVUNIX1BBTjo0LFRPVUNIX0RPTExZX1BBTjo1LFRPVUNIX0RPTExZX1JPVEFURTo2fTtsZXQgcj1pLk5PTkU7Y29uc3Qgbz0xZS02LGE9bmV3IGI4dCxzPW5ldyBiOHQ7bGV0IGw9MTtjb25zdCBjPW5ldyBDSnQ7bGV0IHU9ITE7Y29uc3QgaD1uZXcgbUp0LGQ9bmV3IG1KdCxwPW5ldyBtSnQsZj1uZXcgbUp0LG09bmV3IG1KdCxnPW5ldyBtSnQsXz1uZXcgbUp0LHk9bmV3IG1KdCx2PW5ldyBtSnQsYj1bXSx4PXt9O2Z1bmN0aW9uIHcoKXtyZXR1cm4gTWF0aC5wb3coLjk1LG4uem9vbVNwZWVkKX1mdW5jdGlvbiBTKHQpe3MudGhldGEtPXR9ZnVuY3Rpb24gTSh0KXtzLnBoaS09dH1jb25zdCBFPShmdW5jdGlvbigpe2NvbnN0IHQ9bmV3IENKdDtyZXR1cm4gZnVuY3Rpb24gZShuLGkpe3Quc2V0RnJvbU1hdHJpeENvbHVtbihpLDApLHQubXVsdGlwbHlTY2FsYXIoLW4pLGMuYWRkKHQpfX0pKCksVD0oZnVuY3Rpb24oKXtjb25zdCB0PW5ldyBDSnQ7cmV0dXJuIGZ1bmN0aW9uIGUoaSxyKXshMD09PW4uc2NyZWVuU3BhY2VQYW5uaW5nP3Quc2V0RnJvbU1hdHJpeENvbHVtbihyLDEpOih0LnNldEZyb21NYXRyaXhDb2x1bW4ociwwKSx0LmNyb3NzVmVjdG9ycyhuLm9iamVjdC51cCx0KSksdC5tdWx0aXBseVNjYWxhcihpKSxjLmFkZCh0KX19KSgpLEM9KGZ1bmN0aW9uKCl7Y29uc3QgdD1uZXcgQ0p0O3JldHVybiBmdW5jdGlvbiBlKGkscil7Y29uc3Qgbz1uLmRvbUVsZW1lbnQ7aWYobi5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYSl7dC5jb3B5KG4ub2JqZWN0LnBvc2l0aW9uKS5zdWIobi50YXJnZXQpO2xldCBlPXQubGVuZ3RoKCk7ZSo9TWF0aC50YW4obi5vYmplY3QuZm92LzIqTWF0aC5QSS8xODApLEUoMippKmUvby5jbGllbnRIZWlnaHQsbi5vYmplY3QubWF0cml4KSxUKDIqciplL28uY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCl9ZWxzZSBuLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYT8oRShpKihuLm9iamVjdC5yaWdodC1uLm9iamVjdC5sZWZ0KS9uLm9iamVjdC56b29tL28uY2xpZW50V2lkdGgsbi5vYmplY3QubWF0cml4KSxUKHIqKG4ub2JqZWN0LnRvcC1uLm9iamVjdC5ib3R0b20pL24ub2JqZWN0Lnpvb20vby5jbGllbnRIZWlnaHQsbi5vYmplY3QubWF0cml4KSk6KGNvbnNvbGUud2FybigiV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlIC0gcGFuIGRpc2FibGVkLiIpLG4uZW5hYmxlUGFuPSExKX19KSgpO2Z1bmN0aW9uIEEodCl7bi5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYT9sLz10Om4ub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhPyhuLm9iamVjdC56b29tPU1hdGgubWF4KG4ubWluWm9vbSxNYXRoLm1pbihuLm1heFpvb20sbi5vYmplY3Quem9vbSp0KSksbi5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLHU9ITApOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIGRvbGx5L3pvb20gZGlzYWJsZWQuIiksbi5lbmFibGVab29tPSExKX1mdW5jdGlvbiBrKHQpe24ub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmE/bCo9dDpuLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYT8obi5vYmplY3Quem9vbT1NYXRoLm1heChuLm1pblpvb20sTWF0aC5taW4obi5tYXhab29tLG4ub2JqZWN0Lnpvb20vdCkpLG4ub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSx1PSEwKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBkb2xseS96b29tIGRpc2FibGVkLiIpLG4uZW5hYmxlWm9vbT0hMSl9ZnVuY3Rpb24gTCh0KXtoLnNldCh0LmNsaWVudFgsdC5jbGllbnRZKX1mdW5jdGlvbiBQKHQpe2Yuc2V0KHQuY2xpZW50WCx0LmNsaWVudFkpfWZ1bmN0aW9uIE4oKXsxPT09Yi5sZW5ndGg/aC5zZXQoYlswXS5wYWdlWCxiWzBdLnBhZ2VZKTpoLnNldCguNSooYlswXS5wYWdlWCtiWzFdLnBhZ2VYKSwuNSooYlswXS5wYWdlWStiWzFdLnBhZ2VZKSl9ZnVuY3Rpb24gSSgpezE9PT1iLmxlbmd0aD9mLnNldChiWzBdLnBhZ2VYLGJbMF0ucGFnZVkpOmYuc2V0KC41KihiWzBdLnBhZ2VYK2JbMV0ucGFnZVgpLC41KihiWzBdLnBhZ2VZK2JbMV0ucGFnZVkpKX1mdW5jdGlvbiBSKCl7Y29uc3QgdD1iWzBdLnBhZ2VYLWJbMV0ucGFnZVgsZT1iWzBdLnBhZ2VZLWJbMV0ucGFnZVksbj1NYXRoLnNxcnQodCp0K2UqZSk7Xy5zZXQoMCxuKX1mdW5jdGlvbiBPKHQpe2lmKDE9PWIubGVuZ3RoKWQuc2V0KHQucGFnZVgsdC5wYWdlWSk7ZWxzZXtjb25zdCBlPVkodCk7ZC5zZXQoLjUqKHQucGFnZVgrZS54KSwuNSoodC5wYWdlWStlLnkpKX1wLnN1YlZlY3RvcnMoZCxoKS5tdWx0aXBseVNjYWxhcihuLnJvdGF0ZVNwZWVkKTtjb25zdCBlPW4uZG9tRWxlbWVudDtTKDIqTWF0aC5QSSpwLngvZS5jbGllbnRIZWlnaHQpLE0oMipNYXRoLlBJKnAueS9lLmNsaWVudEhlaWdodCksaC5jb3B5KGQpfWZ1bmN0aW9uIHoodCl7aWYoMT09PWIubGVuZ3RoKW0uc2V0KHQucGFnZVgsdC5wYWdlWSk7ZWxzZXtjb25zdCBlPVkodCk7bS5zZXQoLjUqKHQucGFnZVgrZS54KSwuNSoodC5wYWdlWStlLnkpKX1nLnN1YlZlY3RvcnMobSxmKS5tdWx0aXBseVNjYWxhcihuLnBhblNwZWVkKSxDKGcueCxnLnkpLGYuY29weShtKX1mdW5jdGlvbiBEKHQpe2NvbnN0IGU9WSh0KSxpPXQucGFnZVgtZS54LHI9dC5wYWdlWS1lLnksbz1NYXRoLnNxcnQoaSppK3Iqcik7eS5zZXQoMCxvKSx2LnNldCgwLE1hdGgucG93KHkueS9fLnksbi56b29tU3BlZWQpKSxBKHYueSksXy5jb3B5KHkpfWZ1bmN0aW9uIEIodCl7ITEhPT1uLmVuYWJsZWQmJigwPT09Yi5sZW5ndGgmJihuLmRvbUVsZW1lbnQuc2V0UG9pbnRlckNhcHR1cmUodC5wb2ludGVySWQpLG4uZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsSCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsRikpLChmdW5jdGlvbiBlKHQpe2IucHVzaCh0KX0pKHQpLCJ0b3VjaCI9PT10LnBvaW50ZXJUeXBlPyhmdW5jdGlvbiBvKHQpe3N3aXRjaChxKHQpLGIubGVuZ3RoKXtjYXNlIDE6c3dpdGNoKG4udG91Y2hlcy5PTkUpe2Nhc2UgRkt0LlJPVEFURTppZighMT09PW4uZW5hYmxlUm90YXRlKXJldHVybjtOKCkscj1pLlRPVUNIX1JPVEFURTticmVhaztjYXNlIEZLdC5QQU46aWYoITE9PT1uLmVuYWJsZVBhbilyZXR1cm47SSgpLHI9aS5UT1VDSF9QQU47YnJlYWs7ZGVmYXVsdDpyPWkuTk9ORX1icmVhaztjYXNlIDI6c3dpdGNoKG4udG91Y2hlcy5UV08pe2Nhc2UgRkt0LkRPTExZX1BBTjppZighMT09PW4uZW5hYmxlWm9vbSYmITE9PT1uLmVuYWJsZVBhbilyZXR1cm47IShmdW5jdGlvbiB0KCl7bi5lbmFibGVab29tJiZSKCksbi5lbmFibGVQYW4mJkkoKX0pKCkscj1pLlRPVUNIX0RPTExZX1BBTjticmVhaztjYXNlIEZLdC5ET0xMWV9ST1RBVEU6aWYoITE9PT1uLmVuYWJsZVpvb20mJiExPT09bi5lbmFibGVSb3RhdGUpcmV0dXJuOyEoZnVuY3Rpb24gZSgpe24uZW5hYmxlWm9vbSYmUigpLG4uZW5hYmxlUm90YXRlJiZOKCl9KSgpLHI9aS5UT1VDSF9ET0xMWV9ST1RBVEU7YnJlYWs7ZGVmYXVsdDpyPWkuTk9ORX1icmVhaztkZWZhdWx0OnI9aS5OT05FfXIhPT1pLk5PTkUmJm4uZGlzcGF0Y2hFdmVudChrN3QpfSkodCk6KGZ1bmN0aW9uIGEodCl7bGV0IGU7c3dpdGNoKHQuYnV0dG9uKXtjYXNlIDA6ZT1uLm1vdXNlQnV0dG9ucy5MRUZUO2JyZWFrO2Nhc2UgMTplPW4ubW91c2VCdXR0b25zLk1JRERMRTticmVhaztjYXNlIDI6ZT1uLm1vdXNlQnV0dG9ucy5SSUdIVDticmVhaztkZWZhdWx0OmU9LTF9c3dpdGNoKGUpe2Nhc2UgSEt0LkRPTExZOmlmKCExPT09bi5lbmFibGVab29tKXJldHVybjshKGZ1bmN0aW9uIGUodCl7Xy5zZXQodC5jbGllbnRYLHQuY2xpZW50WSl9KSh0KSxyPWkuRE9MTFk7YnJlYWs7Y2FzZSBIS3QuUk9UQVRFOmlmKHQuY3RybEtleXx8dC5tZXRhS2V5fHx0LnNoaWZ0S2V5KXtpZighMT09PW4uZW5hYmxlUGFuKXJldHVybjtQKHQpLHI9aS5QQU59ZWxzZXtpZighMT09PW4uZW5hYmxlUm90YXRlKXJldHVybjtMKHQpLHI9aS5ST1RBVEV9YnJlYWs7Y2FzZSBIS3QuUEFOOmlmKHQuY3RybEtleXx8dC5tZXRhS2V5fHx0LnNoaWZ0S2V5KXtpZighMT09PW4uZW5hYmxlUm90YXRlKXJldHVybjtMKHQpLHI9aS5ST1RBVEV9ZWxzZXtpZighMT09PW4uZW5hYmxlUGFuKXJldHVybjtQKHQpLHI9aS5QQU59YnJlYWs7ZGVmYXVsdDpyPWkuTk9ORX1yIT09aS5OT05FJiZuLmRpc3BhdGNoRXZlbnQoazd0KX0pKHQpKX1mdW5jdGlvbiBIKHQpeyExIT09bi5lbmFibGVkJiYoInRvdWNoIj09PXQucG9pbnRlclR5cGU/KGZ1bmN0aW9uIGUodCl7c3dpdGNoKHEodCkscil7Y2FzZSBpLlRPVUNIX1JPVEFURTppZighMT09PW4uZW5hYmxlUm90YXRlKXJldHVybjtPKHQpLG4udXBkYXRlKCk7YnJlYWs7Y2FzZSBpLlRPVUNIX1BBTjppZighMT09PW4uZW5hYmxlUGFuKXJldHVybjt6KHQpLG4udXBkYXRlKCk7YnJlYWs7Y2FzZSBpLlRPVUNIX0RPTExZX1BBTjppZighMT09PW4uZW5hYmxlWm9vbSYmITE9PT1uLmVuYWJsZVBhbilyZXR1cm47IShmdW5jdGlvbiBlKHQpe24uZW5hYmxlWm9vbSYmRCh0KSxuLmVuYWJsZVBhbiYmeih0KX0pKHQpLG4udXBkYXRlKCk7YnJlYWs7Y2FzZSBpLlRPVUNIX0RPTExZX1JPVEFURTppZighMT09PW4uZW5hYmxlWm9vbSYmITE9PT1uLmVuYWJsZVJvdGF0ZSlyZXR1cm47IShmdW5jdGlvbiBvKHQpe24uZW5hYmxlWm9vbSYmRCh0KSxuLmVuYWJsZVJvdGF0ZSYmTyh0KX0pKHQpLG4udXBkYXRlKCk7YnJlYWs7ZGVmYXVsdDpyPWkuTk9ORX19KSh0KTooZnVuY3Rpb24gbyh0KXtpZighMSE9PW4uZW5hYmxlZClzd2l0Y2gocil7Y2FzZSBpLlJPVEFURTppZighMT09PW4uZW5hYmxlUm90YXRlKXJldHVybjshKGZ1bmN0aW9uIGUodCl7ZC5zZXQodC5jbGllbnRYLHQuY2xpZW50WSkscC5zdWJWZWN0b3JzKGQsaCkubXVsdGlwbHlTY2FsYXIobi5yb3RhdGVTcGVlZCk7Y29uc3QgZT1uLmRvbUVsZW1lbnQ7UygyKk1hdGguUEkqcC54L2UuY2xpZW50SGVpZ2h0KSxNKDIqTWF0aC5QSSpwLnkvZS5jbGllbnRIZWlnaHQpLGguY29weShkKSxuLnVwZGF0ZSgpfSkodCk7YnJlYWs7Y2FzZSBpLkRPTExZOmlmKCExPT09bi5lbmFibGVab29tKXJldHVybjshKGZ1bmN0aW9uIHIodCl7eS5zZXQodC5jbGllbnRYLHQuY2xpZW50WSksdi5zdWJWZWN0b3JzKHksXyksdi55PjA/QSh3KCkpOnYueTwwJiZrKHcoKSksXy5jb3B5KHkpLG4udXBkYXRlKCl9KSh0KTticmVhaztjYXNlIGkuUEFOOmlmKCExPT09bi5lbmFibGVQYW4pcmV0dXJuOyEoZnVuY3Rpb24gbyh0KXttLnNldCh0LmNsaWVudFgsdC5jbGllbnRZKSxnLnN1YlZlY3RvcnMobSxmKS5tdWx0aXBseVNjYWxhcihuLnBhblNwZWVkKSxDKGcueCxnLnkpLGYuY29weShtKSxuLnVwZGF0ZSgpfSkodCl9fSkodCkpfWZ1bmN0aW9uIEYodCl7ITEhPT1uLmVuYWJsZWQmJigidG91Y2giPT09dC5wb2ludGVyVHlwZT8oZnVuY3Rpb24gZSh0KXtuLmRpc3BhdGNoRXZlbnQoTDd0KSxyPWkuTk9ORX0pKCk6KGZ1bmN0aW9uIG8odCl7bi5kaXNwYXRjaEV2ZW50KEw3dCkscj1pLk5PTkV9KSgpLFcodCksMD09PWIubGVuZ3RoJiYobi5kb21FbGVtZW50LnJlbGVhc2VQb2ludGVyQ2FwdHVyZSh0LnBvaW50ZXJJZCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixIKSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixGKSkpfWZ1bmN0aW9uIFYodCl7Vyh0KX1mdW5jdGlvbiBVKHQpeyExPT09bi5lbmFibGVkfHwhMT09PW4uZW5hYmxlWm9vbXx8ciE9PWkuTk9ORSYmciE9PWkuUk9UQVRFfHwodC5wcmV2ZW50RGVmYXVsdCgpLG4uZGlzcGF0Y2hFdmVudChrN3QpLChmdW5jdGlvbiBlKHQpe3QuZGVsdGFZPDA/ayh3KCkpOnQuZGVsdGFZPjAmJkEodygpKSxuLnVwZGF0ZSgpfSkodCksbi5kaXNwYXRjaEV2ZW50KEw3dCkpfWZ1bmN0aW9uIGoodCl7ITEhPT1uLmVuYWJsZWQmJiExIT09bi5lbmFibGVQYW4mJihmdW5jdGlvbiBlKHQpe2xldCBlPSExO3N3aXRjaCh0LmNvZGUpe2Nhc2Ugbi5rZXlzLlVQOkMoMCxuLmtleVBhblNwZWVkKSxlPSEwO2JyZWFrO2Nhc2Ugbi5rZXlzLkJPVFRPTTpDKDAsLW4ua2V5UGFuU3BlZWQpLGU9ITA7YnJlYWs7Y2FzZSBuLmtleXMuTEVGVDpDKG4ua2V5UGFuU3BlZWQsMCksZT0hMDticmVhaztjYXNlIG4ua2V5cy5SSUdIVDpDKC1uLmtleVBhblNwZWVkLDApLGU9ITB9ZSYmKHQucHJldmVudERlZmF1bHQoKSxuLnVwZGF0ZSgpKX0pKHQpfWZ1bmN0aW9uIEcodCl7ITEhPT1uLmVuYWJsZWQmJnQucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiBXKHQpe2RlbGV0ZSB4W3QucG9pbnRlcklkXTtmb3IobGV0IGU9MDtlPGIubGVuZ3RoO2UrKylpZihiW2VdLnBvaW50ZXJJZD09dC5wb2ludGVySWQpcmV0dXJuIHZvaWQgYi5zcGxpY2UoZSwxKX1mdW5jdGlvbiBxKHQpe2xldCBlPXhbdC5wb2ludGVySWRdO3ZvaWQgMD09PWUmJihlPW5ldyBtSnQseFt0LnBvaW50ZXJJZF09ZSksZS5zZXQodC5wYWdlWCx0LnBhZ2VZKX1mdW5jdGlvbiBZKHQpe3JldHVybiB4Wyh0LnBvaW50ZXJJZD09PWJbMF0ucG9pbnRlcklkP2JbMV06YlswXSkucG9pbnRlcklkXX1uLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLEcpLG4uZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsQiksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLFYpLG4uZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsVSx7cGFzc2l2ZTohMX0pLHRoaXMudXBkYXRlKCl9fWNsYXNzIE43dCBleHRlbmRzIGpadHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2xhc3RNZXNoPW51bGwsdGhpcy5fY2xvY2s9bmV3IGo5dCx0aGlzLl9jYW52YXNTaXplPW51bGwsdGhpcy5fbGF5ZXJzQ29uZmlnPW51bGwsdGhpcy5fcnVuQ29sb3I9dH1faXNPYmplY3QodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiYhQXJyYXkuaXNBcnJheSh0KX1fYXBwbHlEZWZhdWx0cyh0LGUpe2xldCBuPXt9O2NvbnN0IGk9W3QsZV07Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0Kyspe2NvbnN0IGU9aVt0XTtmb3IobGV0IHQgaW4gZSl7Y29uc3QgaT10IGluIG47dGhpcy5faXNPYmplY3QoZVt0XSk/blt0XT10aGlzLl9hcHBseURlZmF1bHRzKG5bdF18fHt9LGVbdF0pOml8fChuW3RdPWVbdF0pfX1yZXR1cm4gbn1fY3JlYXRlTGF5ZXJzKCl7aWYodGhpcy5fbGF5ZXJzQ29uZmlnJiZ0aGlzLl9zY2VuZSYmdGhpcy5fbGFzdE1lc2gpe2lmKHRoaXMuX2xheWVyc0NvbmZpZy5zaG93Qm91bmRpbmdCb3gpe3ZhciB0PW5ldyBHOHQodGhpcy5fbGFzdE1lc2gsbmV3ICRRdCgicmdiKDAsIDAsIDI1NSkiKSk7dGhpcy5fc2NlbmUuYWRkKHQpfWlmKHRoaXMuX2xheWVyc0NvbmZpZy5zaG93QXhlcyl7dmFyIGU9bmV3IFg4dCg1KTt0aGlzLl9zY2VuZS5hZGQoZSl9fX1zZXRMYXllcnNDb25maWcodCl7dGhpcy5fbGF5ZXJzQ29uZmlnPXRoaXMuX2FwcGx5RGVmYXVsdHModCx0aGlzLl9sYXllcnNDb25maWd8fHt9KX1fY3JlYXRlV29ybGQodCxlKXtpZih0aGlzLmlzUmVhZHkoKSlyZXR1cm47dGhpcy5fc2NlbmU9bmV3IFg1dDt2YXIgbj1uZXcgSjh0W3QuY2FtZXJhLmNsc10odC5jYW1lcmEuZm92LHRoaXMuX2NhbnZhc1NpemUud2lkdGgvdGhpcy5fY2FudmFzU2l6ZS5oZWlnaHQsdC5jYW1lcmEubmVhcix0LmNhbWVyYS5mYXIpO3RoaXMuX2NhbWVyYT1uO3ZhciBpPW5ldyBQN3QobixlKTtjb25zdCByPWk7ci5sb29rU3BlZWQ9LjQsci5tb3ZlbWVudFNwZWVkPTIwLHIubm9GbHk9ITAsci5sb29rVmVydGljYWw9ITAsci5jb25zdHJhaW5WZXJ0aWNhbD0hMCxyLnZlcnRpY2FsTWluPTEsci52ZXJ0aWNhbE1heD0yLHIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLl9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlLmJpbmQodGhpcykpLHRoaXMuX2NhbWVyYUNvbnRyb2xzPWksdGhpcy5fcmVuZGVyZXI9bmV3IEc1dCh7YW50aWFsaWFzOiEwfSksdGhpcy5fcmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyksdGhpcy5fcmVuZGVyZXIuc2V0U2l6ZSh0aGlzLl9jYW52YXNTaXplLndpZHRoLHRoaXMuX2NhbnZhc1NpemUuaGVpZ2h0KSx0aGlzLl9yZW5kZXJlci5zZXRDbGVhckNvbG9yKDE2Nzc3MjE1LDEpfV9jbGVhclNjZW5lKCl7Zm9yKDt0aGlzLl9zY2VuZS5jaGlsZHJlbi5sZW5ndGg+MDspdGhpcy5fc2NlbmUucmVtb3ZlKHRoaXMuX3NjZW5lLmNoaWxkcmVuWzBdKX1nZXRSZW5kZXJlcigpe3JldHVybiB0aGlzLl9yZW5kZXJlcn1nZXRDYW1lcmFDb250cm9scygpe3JldHVybiB0aGlzLl9jYW1lcmFDb250cm9sc31pc1JlYWR5KCl7cmV0dXJuISF0aGlzLl9jYW1lcmEmJiEhdGhpcy5fY2FtZXJhQ29udHJvbHN9Z2V0Q2FtZXJhUG9zaXRpb24oKXtyZXR1cm57ZmFyOnRoaXMuX2NhbWVyYS5mYXIscG9zaXRpb246dGhpcy5fY2FtZXJhLnBvc2l0aW9uLmNsb25lKCksdGFyZ2V0OnRoaXMuX2NhbWVyYUNvbnRyb2xzLnRhcmdldC5jbG9uZSgpfX1zZXRDYW52YXNTaXplKHQpe3RoaXMuX2NhbnZhc1NpemU9dH1kcmF3KCl7dGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleCksdGhpcy5fY2FtZXJhLmFzcGVjdD10aGlzLl9jYW52YXNTaXplLndpZHRoL3RoaXMuX2NhbnZhc1NpemUuaGVpZ2h0LHRoaXMuX2NhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksdGhpcy5fcmVuZGVyZXIuc2V0U2l6ZSh0aGlzLl9jYW52YXNTaXplLndpZHRoLHRoaXMuX2NhbnZhc1NpemUuaGVpZ2h0KTtjb25zdCB0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2xvY2suZ2V0RGVsdGEoKTt0aGlzLl9jYW1lcmFDb250cm9scy51cGRhdGUoZSksdGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCksdGhpcy5fcmVuZGVyZXIucmVuZGVyKHRoaXMuX3NjZW5lLHRoaXMuX2NhbWVyYSl9LmJpbmQodGhpcyk7dCgpfXVwZGF0ZVNjZW5lKHQsZSl7bGV0IG49e307ImNvbmZpZyJpbiB0JiZ0LmNvbmZpZyYmKG49SlNPTi5wYXJzZSh0LmNvbmZpZykpLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiYmVmb3JlVXBkYXRlU2NlbmUifSksbj10aGlzLl9hcHBseURlZmF1bHRzKG4se2NhbWVyYTp7Y2xzOiJQZXJzcGVjdGl2ZUNhbWVyYSIsZm92Ojc1LG5lYXI6LjEsZmFyOjFlM30sbGlnaHRzOlt7Y2xzOiJBbWJpZW50TGlnaHQiLGNvbG9yOiIjZmZmZmZmIixpbnRlbnNpdHk6Ljc1fSx7Y2xzOiJEaXJlY3Rpb25hbExpZ2h0Iixjb2xvcjoiI2ZmZmZmZiIsaW50ZW5zaXR5Oi43NSxwb3NpdGlvbjpbMCwtMSwyXX1dfSksdGhpcy5fY3JlYXRlV29ybGQobixlKSx0aGlzLl9jbGVhclNjZW5lKCksdGhpcy5fY3JlYXRlTGlnaHRzKHRoaXMuX3NjZW5lLG4pLHRoaXMuX2NyZWF0ZUdlb21ldHJ5KHQsbiksdGhpcy5fY3JlYXRlTGF5ZXJzKCksdGhpcy5kcmF3KCl9cmVzZXRWaWV3KHQpe2lmKCF0aGlzLmlzUmVhZHkoKSlyZXR1cm47bGV0IGU7dGhpcy5fY2FtZXJhQ29udHJvbHMucmVzZXQoKSwhdCYmdGhpcy5fbGFzdE1lc2gmJihlPXRoaXMuX2xhc3RNZXNoKSxlJiYodGhpcy5fZml0T2JqZWN0VG9WaWV3cG9ydChlKSx0aGlzLl9sYXN0TWVzaD1lKSx0aGlzLl9jYW1lcmFDb250cm9scy51cGRhdGUoKX1fY3JlYXRlR2VvbWV0cnkodCxlKXtjb25zdCBuPXQubWVzaDtuLnZlcnRpY2VzJiZuLmZhY2VzJiZuLmZhY2VzLmxlbmd0aD90aGlzLl9jcmVhdGVNZXNoKG4sZSk6dGhpcy5fY3JlYXRlUG9pbnRDbG91ZChuLGUpfV9jcmVhdGVQb2ludENsb3VkKHQsZSl7Y29uc3Qgbj10LnZlcnRpY2VzLGk9dC5jb2xvcnM7bGV0IHI9e21hdGVyaWFsOntjbHM6IlBvaW50c01hdGVyaWFsIixzaXplOi4wMDV9fTtpJiZpLmxlbmd0aD09bi5sZW5ndGg/ci5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9ITA6ci5tYXRlcmlhbC5jb2xvcj10aGlzLl9ydW5Db2xvcjtjb25zdCBvPXRoaXMuX2FwcGx5RGVmYXVsdHMoZSxyKSxhPW5ldyBiMXQscz1uZXcgRmxvYXQzMkFycmF5KG4uZmxhdCgpKTtpZihhLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBRUXQocywzKSksaSYmaS5sZW5ndGg9PW4ubGVuZ3RoKXtjb25zdCB0PW5ldyBGbG9hdDMyQXJyYXkoaS5mbGF0KCkpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV09dFtlXS8yNTU7YS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgUVF0KHQsMykpfXZhciBsPW5ldyBKOHRbby5tYXRlcmlhbC5jbHNdKG8ubWF0ZXJpYWwpLGM9bmV3ICQzdChhLGwpO3RoaXMuX3NjZW5lLmFkZChjKSx0aGlzLl9sYXN0TWVzaD1jfXNldENhbWVyYVZpZXdwb2ludCh0LGUsbil7dGhpcy5fc2lsZW50PSEwLHRoaXMuX2NhbWVyYS5mYXI9ZSx0aGlzLl9jYW1lcmEucG9zaXRpb24uc2V0KHQueCx0LnksdC56KSx0aGlzLl9jYW1lcmEubG9va0F0KG4uY2xvbmUoKSksdGhpcy5fY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSx0aGlzLl9jYW1lcmFDb250cm9scy50YXJnZXQ9bi5jbG9uZSgpLHRoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZSgpLHRoaXMuX3NpbGVudD0hMX1fb25DYW1lcmFQb3NpdGlvbkNoYW5nZSh0KXt0aGlzLl9zaWxlbnR8fHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiY2FtZXJhUG9zaXRpb25DaGFuZ2UiLGV2ZW50OnR9KX1fZml0T2JqZWN0VG9WaWV3cG9ydCh0KXtjb25zdCBlPW5ldyBMSnQsbj1uZXcgQ0p0LGk9bmV3IENKdDtlLnNldEZyb21PYmplY3QodCksZS5nZXRDZW50ZXIobiksZS5nZXRTaXplKGkpO2NvbnN0IHI9TWF0aC5tYXgoaS54LGkueSxpLnopLG89dGhpcy5fY2FtZXJhLmZvdiooTWF0aC5QSS8xODApO2xldCBhPTEuMjUqTWF0aC5hYnMoci8oMipNYXRoLnRhbihvLzIpKSk7Y29uc3Qgcz1lLm1pbi56O3RoaXMuc2V0Q2FtZXJhVmlld3BvaW50KHt4Om4ueCx5Om4ueSx6OmF9LDMqKHM8MD8tcythOmEtcyksbil9X2NyZWF0ZU1lc2godCxlKXtjb25zdCBuPXQudmVydGljZXMsaT10LmZhY2VzLHI9dC5jb2xvcnMsbz10aGlzLl9hcHBseURlZmF1bHRzKGUse21hdGVyaWFsOntjbHM6Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIixjb2xvcjoiI2EwYTBhMCIscm91Z2huZXNzOjEsbWV0YWxuZXNzOjB9fSksYT1uZXcgYjF0LHM9bmV3IEZsb2F0MzJBcnJheShuLmZsYXQoKSk7YS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgUVF0KHMsMykpO2NvbnN0IGw9bmV3IFVpbnQxNkFycmF5KGkuZmxhdCgpKTtpZihyJiZyLmxlbmd0aCl7Y29uc3QgdD1yLmZsYXQoKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdPXRbZV0vMjU1O2Euc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IFFRdChuZXcgRmxvYXQzMkFycmF5KHQpLDMpKSxvLm1hdGVyaWFsPW8ubWF0ZXJpYWx8fHt9LG8ubWF0ZXJpYWwudmVydGV4Q29sb3JzPSEwfWEuY2VudGVyKCksYS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxhLnNldEluZGV4KG5ldyBRUXQobCwxKSksYS5jb21wdXRlVmVydGV4Tm9ybWFscygpO2xldCBjPW5ldyBKOHRbby5tYXRlcmlhbC5jbHNdKG8ubWF0ZXJpYWwpLHU9bmV3IEIxdChhLGMpO3UuY2FzdFNoYWRvdz0hMCx1LnJlY2VpdmVTaGFkb3c9ITAsdGhpcy5fc2NlbmUuYWRkKHUpLHRoaXMuX2xhc3RNZXNoPXV9X2NyZWF0ZUxpZ2h0cyh0LGUpe2ZvcihsZXQgbj0wO248ZS5saWdodHMubGVuZ3RoO24rKyl7Y29uc3QgaT1lLmxpZ2h0c1tuXTtsZXQgcj1uZXcgSjh0W2kuY2xzXShpLmNvbG9yLGkuaW50ZW5zaXR5KTtpLnBvc2l0aW9uJiZyLnBvc2l0aW9uLnNldChpLnBvc2l0aW9uWzBdLGkucG9zaXRpb25bMV0saS5wb3NpdGlvblsyXSksdC5hZGQocil9fX1sZXQgSTd0PWNsYXNzIGV4dGVuZHMoZXIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZWxlY3RlZFZpZXc9ImFsbCIsdGhpcy5hY3RpdmU9ITEsdGhpcy5fY29sb3JTY2FsZUZ1bmN0aW9uPUdSLHRoaXMuX3N0ZXBzPVtdLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZD0hMSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluaXRpYWxpemVkPSExLHRoaXMuX2lzTWVzaExvYWRpbmc9ITF9Z2V0IF9ydW5Db2xvcigpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb24odGhpcy5ydW4pfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9kYXRhUHJvdmlkZXI9bmV3IERLdCh0aGlzLnJlcXVlc3RNYW5hZ2VyKTtjb25zdCB0PW5ldyBON3QodGhpcy5fcnVuQ29sb3IpO3QuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlVXBkYXRlU2NlbmUiLHRoaXMuX3VwZGF0ZUNhbnZhc1NpemUuYmluZCh0aGlzKSksdC5hZGRFdmVudExpc3RlbmVyKCJjYW1lcmFQb3NpdGlvbkNoYW5nZSIsdGhpcy5fb25DYW1lcmFQb3NpdGlvbkNoYW5nZS5iaW5kKHRoaXMpKSx0aGlzLl9tZXNoVmlld2VyPXR9cmVsb2FkKCl7dGhpcy5hY3RpdmUmJnRoaXMuX2RhdGFQcm92aWRlciYmKHRoaXMuX2lzTWVzaExvYWRpbmc9ITAsdGhpcy5fZGF0YVByb3ZpZGVyLnJlbG9hZCh0aGlzLnJ1bix0aGlzLnRhZyx0aGlzLnNhbXBsZSkudGhlbigodD0+e3QmJih0aGlzLl9zdGVwcz10LHRoaXMuX3N0ZXBJbmRleD10Lmxlbmd0aC0xKX0pKS5jYXRjaCgodD0+e2lmKCF0fHwhdC5jb2RlfHx0LmNvZGUhPVJLdC5DQU5DRUxMRUQpdGhyb3cgdD10fHwiUmVzcG9uc2UgcHJvY2Vzc2luZyBmYWlsZWQuIixuZXcgRXJyb3IodCl9KSkpfV91cGRhdGVTY2VuZSgpe2NvbnN0IHQ9dGhpcy5fY3VycmVudFN0ZXA7dCYmdC5tZXNoJiYodGhpcy5fbWVzaFZpZXdlci51cGRhdGVTY2VuZSh0LHRoaXMpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWR8fCh0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQ9ITApLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZHx8KHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0aGlzLl9tZXNoVmlld2VyLmdldFJlbmRlcmVyKCkuZG9tRWxlbWVudCksdGhpcy5fbWVzaFZpZXdlckF0dGFjaGVkPSEwKSl9X2RlYm91bmNlZEZldGNoTWVzaCgpe3RoaXMuZGVib3VuY2UoImZldGNoTWVzaCIsKCgpPT50aGlzLl9tYXliZUZldGNoTWVzaCgpKSwxMDApfV9tYXliZUZldGNoTWVzaCgpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD10aGlzLl9jdXJyZW50U3RlcDtpZih0JiYhdC5tZXNoJiYhdC5tZXNoRmV0Y2hpbmcpe3QubWVzaEZldGNoaW5nPSEwLHRoaXMuX2lzTWVzaExvYWRpbmc9ITA7dHJ5e2NvbnN0IGU9eWllbGQgdGhpcy5fZGF0YVByb3ZpZGVyLmZldGNoRGF0YSh0LHRoaXMucnVuLHRoaXMudGFnLHRoaXMuc2FtcGxlKTt0Lm1lc2g9ZVswXSx0aGlzLm5vdGlmeVBhdGgoIl9jdXJyZW50U3RlcC5tZXNoIil9Y2F0Y2godCl7aWYoIXR8fCF0LmNvZGV8fHQuY29kZSE9Ukt0LkNBTkNFTExFRCl0aHJvdyB0PXR8fCJSZXNwb25zZSBwcm9jZXNzaW5nIGZhaWxlZC4iLG5ldyBFcnJvcih0KX1maW5hbGx5e3RoaXMuX2lzTWVzaExvYWRpbmc9ITEsdC5tZXNoRmV0Y2hpbmc9ITF9fX0pKX1fb25DYW1lcmFQb3NpdGlvbkNoYW5nZSgpe2lmKCF0aGlzLl9tZXNoVmlld2VyLmlzUmVhZHkoKSlyZXR1cm47Y29uc3QgdD1uZXcgQ3VzdG9tRXZlbnQoImNhbWVyYS1wb3NpdGlvbi1jaGFuZ2UiLHtkZXRhaWw6dGhpcy5fbWVzaFZpZXdlci5nZXRDYW1lcmFQb3NpdGlvbigpfSk7dGhpcy5kaXNwYXRjaEV2ZW50KHQpfXNldENhbWVyYVZpZXdwb2ludCh0LGUsbil7dGhpcy5fbWVzaFZpZXdlci5zZXRDYW1lcmFWaWV3cG9pbnQodCxlLG4pfV91cGRhdGVDYW52YXNTaXplKCl7Y29uc3QgdD10aGlzLm9mZnNldFdpZHRoLGU9dCxuPXRoaXMuJCQoIi50Zi1tZXNoLWxvYWRlci1oZWFkZXIiKS5vZmZzZXRIZWlnaHQ7dGhpcy5fbWVzaFZpZXdlci5zZXRDYW52YXNTaXplKHt3aWR0aDp0LGhlaWdodDplLW59KX1yZWRyYXcoKXt0aGlzLl91cGRhdGVDYW52YXNTaXplKCksdGhpcy5pc0Nvbm5lY3RlZCYmdGhpcy5fbWVzaFZpZXdlci5kcmF3KCl9X2hhc0F0TGVhc3RPbmVTdGVwKHQpe3JldHVybiEhdCYmdC5sZW5ndGg+MH1faGFzTXVsdGlwbGVTdGVwcyh0KXtyZXR1cm4hIXQmJnQubGVuZ3RoPjF9Z2V0IF9jdXJyZW50U3RlcCgpe3JldHVybiB0aGlzLl9zdGVwc1t0aGlzLl9zdGVwSW5kZXhdfHxudWxsfWdldCBfc3RlcFZhbHVlKCl7Y29uc3QgdD10aGlzLl9jdXJyZW50U3RlcDtyZXR1cm4gdD90LnN0ZXA6MH1nZXQgX2N1cnJlbnRXYWxsVGltZSgpe2NvbnN0IHQ9dGhpcy5fY3VycmVudFN0ZXA7cmV0dXJuIHQ/S1IodC53YWxsX3RpbWUpOiIifV9nZXRNYXhTdGVwSW5kZXgodCl7cmV0dXJuIHQubGVuZ3RoLTF9X2dldFNhbXBsZVRleHQodCl7cmV0dXJuIFN0cmluZyh0KzEpfV9oYXNNdWx0aXBsZVNhbXBsZXModCl7cmV0dXJuIHQ+MX1fdXBkYXRlVmlldygpe3RoaXMuX21lc2hWaWV3ZXImJiJhbGwiPT10aGlzLnNlbGVjdGVkVmlldyYmdGhpcy5fbWVzaFZpZXdlci5yZXNldFZpZXcoKX10b0xvY2FsZVN0cmluZ18odCl7cmV0dXJuIHQudG9Mb2NhbGVTdHJpbmcoKX19O0k3dC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgY29sb3I9IltbX3J1bkNvbG9yXV0iIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1oZWFkZXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlcyhvZlNhbXBsZXMpXV0iPgogICAgICAgIDxkaXY+c2FtcGxlOiBbW19nZXRTYW1wbGVUZXh0KHNhbXBsZSldXSBvZiBbW29mU2FtcGxlc11dPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXAoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbdG9Mb2NhbGVTdHJpbmdfKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc01lc2hMb2FkaW5nXV0iPgogICAgICAgICAgICA8L3BhcGVyLXNwaW5uZXItbGl0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU3RlcHMoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0ic3RlcHMiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfZ2V0TWF4U3RlcEluZGV4KF9zdGVwcyldXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX2dldE1heFN0ZXBJbmRleChfc3RlcHMpXV0iCiAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHN0eWxlPgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxcHg7CiAgICAgIH0KICAgICAgLnRmLW1lc2gtbG9hZGVyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDVweDsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLEk3dC5wcm90b3R5cGUsInJ1biIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJN3QucHJvdG90eXBlLCJ0YWciLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXJ9KSxlKCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSTd0LnByb3RvdHlwZSwic2FtcGxlIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEk3dC5wcm90b3R5cGUsIm9mU2FtcGxlcyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJN3QucHJvdG90eXBlLCJzZWxlY3RlZFZpZXciLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJN3QucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsZHIpXSxJN3QucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixON3QpXSxJN3QucHJvdG90eXBlLCJfbWVzaFZpZXdlciIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixES3QpXSxJN3QucHJvdG90eXBlLCJfZGF0YVByb3ZpZGVyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEk3dC5wcm90b3R5cGUsIl9jb2xvclNjYWxlRnVuY3Rpb24iLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxJN3QucHJvdG90eXBlLCJfc3RlcHMiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEk3dC5wcm90b3R5cGUsIl9zdGVwSW5kZXgiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJN3QucHJvdG90eXBlLCJfbWVzaFZpZXdlckF0dGFjaGVkIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSTd0LnByb3RvdHlwZSwiX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJN3QucHJvdG90eXBlLCJfaXNNZXNoTG9hZGluZyIsdm9pZCAwKSx0KFtzKCJydW4iKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJN3QucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpLHQoW2EoInJ1biIsInRhZyIsImFjdGl2ZSIsIl9kYXRhUHJvdmlkZXIiLCJfbWVzaFZpZXdlciIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sSTd0LnByb3RvdHlwZSwicmVsb2FkIixudWxsKSx0KFthKCJfY3VycmVudFN0ZXAuKiIsIl9tZXNoVmlld2VyIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxJN3QucHJvdG90eXBlLCJfdXBkYXRlU2NlbmUiLG51bGwpLHQoW2EoIl9jdXJyZW50U3RlcCIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sSTd0LnByb3RvdHlwZSwiX2RlYm91bmNlZEZldGNoTWVzaCIsbnVsbCksdChbcygiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLGUoImRlc2lnbjp0eXBlIixPYmplY3QpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEk3dC5wcm90b3R5cGUsIl9jdXJyZW50U3RlcCIsbnVsbCksdChbcygiX2N1cnJlbnRTdGVwIiksZSgiZGVzaWduOnR5cGUiLE51bWJlciksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSTd0LnByb3RvdHlwZSwiX3N0ZXBWYWx1ZSIsbnVsbCksdChbcygiX2N1cnJlbnRTdGVwIiksZSgiZGVzaWduOnR5cGUiLFN0cmluZyksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSTd0LnByb3RvdHlwZSwiX2N1cnJlbnRXYWxsVGltZSIsbnVsbCksdChbYSgic2VsZWN0ZWRWaWV3IiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxJN3QucHJvdG90eXBlLCJfdXBkYXRlVmlldyIsbnVsbCksSTd0PXQoW2koInRmLW1lc2gtbG9hZGVyIildLEk3dCk7bGV0IFI3dD1jbGFzcyBleHRlbmRzIHlle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fdGFnRmlsdGVyPSIuKiIsdGhpcy5fc2VsZWN0ZWRWaWV3PSJhbGwiLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBkcix3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwoKCk9Pnt0aGlzLl9oYW5kbGVXaW5kb3dSZXNpemUoKX0pLCExKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9X2dldEFsbENoaWxkcmVuKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLW1lc2gtbG9hZGVyIikpfV9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlZCh0KXsic2hhcmUiPT10aGlzLl9zZWxlY3RlZFZpZXcmJnRoaXMuX2dldEFsbENoaWxkcmVuKCkuZm9yRWFjaCgoZT0+e3QudGFyZ2V0IT1lJiZlLnNldENhbWVyYVZpZXdwb2ludCh0LmRldGFpbC5wb3NpdGlvbix0LmRldGFpbC5mYXIsdC5kZXRhaWwudGFyZ2V0KX0pKX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKHRoaXMuX3JlbG9hZE1lc2hlcy5iaW5kKHRoaXMpKX1faGFuZGxlV2luZG93UmVzaXplKCl7dGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKCh0PT57dC5yZWRyYXcoKX0pKX1fZmV0Y2hUYWdzKCl7Y29uc3QgdD1fcigpLnBsdWdpblJvdXRlKCJtZXNoIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57aWYoU2UuZXhwb3J0cy5pc0VxdWFsKHQsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47Y29uc3QgZT1hcihTZS5leHBvcnRzLm1hcFZhbHVlcyh0LCh0PT5PYmplY3Qua2V5cyh0KSkpKTt0aGlzLl9kYXRhTm90Rm91bmQ9MD09PWUubGVuZ3RoLHRoaXMuX3J1blRvVGFnSW5mbz10fSkpfV9yZWxvYWRNZXNoZXMoKXt0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2goKHQ9Pnt0LnJlbG9hZCgpfSkpfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnSW5mbyxlPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcjtmdW5jdGlvbiBpKGUpe2NvbnN0IG49dFtlLnJ1bl1bZS50YWddLnNhbXBsZXM7cmV0dXJuIFNlLmV4cG9ydHMucmFuZ2UobikubWFwKCh0PT5PYmplY3QuYXNzaWduKHt9LGUse3NhbXBsZTp0LG9mU2FtcGxlczpufSkpKX1yZXR1cm4gTXIoU2UuZXhwb3J0cy5tYXBWYWx1ZXModCwodD0+T2JqZWN0LmtleXModCkpKSxlLG4pLm1hcCgodD0+T2JqZWN0LmFzc2lnbih7fSx0LHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sdC5pdGVtcy5tYXAoaSkpfSkpKX19O1I3dC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IHNsb3Q9InNpZGViYXIiIGNsYXNzPSJhbGwtY29udHJvbHMiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiB2aWV3LWNvbnRyb2wiPgogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5Qb2ludCBvZiB2aWV3PC9oMz4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgICAgICAgIGlkPSJ2aWV3LXJhZGlvLWdyb3VwIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkVmlld319IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9ImFsbC1yYWRpby1idXR0b24iIG5hbWU9ImFsbCI+CiAgICAgICAgICAgICAgICAgIERpc3BsYXkgYWxsIHBvaW50cwogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0iYWxsLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFpvb20gYW5kIGNlbnRlciBjYW1lcmEgdG8gZGlzcGxheSBhbGwgcG9pbnRzIGF0IG9uY2UuIE5vdGUsCiAgICAgICAgICAgICAgICAgIHRoYXQgc29tZSBwb2ludHMgY291bGQgYmUgdG9vIGZhciAoaS5lLiB0b28gc21hbGwpIHRvIGJlCiAgICAgICAgICAgICAgICAgIHZpc2libGUuCiAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJ1c2VyLXJhZGlvLWJ1dHRvbiIgbmFtZT0idXNlciI+CiAgICAgICAgICAgICAgICAgIEN1cnJlbnQgdmlldwogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0idXNlci1yYWRpby1idXR0b24iCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBLZWVwIGN1cnJlbnQgY2FtZXJhIHBvc2l0aW9uIGFuZCB6b29tIGxldmVsLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0ic2hhcmUtcmFkaW8tYnV0dG9uIiBuYW1lPSJzaGFyZSI+CiAgICAgICAgICAgICAgICAgIFNoYXJlIHZpZXdwb2ludAogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0ic2hhcmUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgU2hhcmUgdmlld3BvaW50IGFtb25nIGFsbCBjYW1lcmFzLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIHBvaW50IGNsb3VkIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHBvaW50IGNsb3VkIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1tZXNoLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkLXZpZXc9IltbX3NlbGVjdGVkVmlld11dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICBvZi1zYW1wbGVzPSJbW2l0ZW0ub2ZTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgY2xhc3M9InRmLW1lc2gtbG9hZGVyLWNvbnRhaW5lciIKICAgICAgICAgICAgICAgICAgb24tY2FtZXJhLXBvc2l0aW9uLWNoYW5nZT0iX29uQ2FtZXJhUG9zaXRpb25DaGFuZ2VkIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1tZXNoLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgfQogICAgICAuc2lkZWJhci1zZWN0aW9uIGgzIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAucnVucy1zZWxlY3RvciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIHsKICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIGgzLnRpdGxlIHsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC52aWV3LWNvbnRyb2wgcGFwZXItcmFkaW8tZ3JvdXAgewogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQogICAgICAvKiBMYXlvdXQgbXVzdCBiZSBob3Jpem9udGFsLCBpLmUuIGl0ZW1zIGFycmFuZ2VkIGluIGEgcm93LiBJZiBpdGVtcyBjYW5ub3QgZml0IGluIGEgcm93LAogICAgICAgKiB0aGV5IHNob3VsZCBiZSBtb3ZlZCB0byBuZXh0IGxpbmUuIEFsbCBpdGVtcyBtdXN0IGJlIHNxdWFyZSBhdCBhbGwgdGltZXMuIE1pbmltdW0gc2l6ZSBvZgogICAgICAgKiB0aGUgaXRlbSBpcyA0ODBweC4gVGhpcyBtZWFucyB0aGF0IG1heGltdW0gc2l6ZSBvZiB0aGUgaXRlbSBtdXN0IGJlIDQ4MHB4ICsgNDc5cHggPSA5NTlweC4KICAgICAgICogKi8KICAgICAgLmhvcml6b250YWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgdGYtbWVzaC1sb2FkZXIgewogICAgICAgIHdpZHRoOiA0ODBweDsKICAgICAgICBmbGV4LWJhc2lzOiA0ODBweDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFI3dC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLFI3dC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUjd0LnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFI3dC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUjd0LnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUjd0LnByb3RvdHlwZSwiX3NlbGVjdGVkVmlldyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxSN3QucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbcygiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiksZSgiZGVzaWduOnR5cGUiLEFycmF5KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxSN3QucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCksUjd0PXQoW2koIm1lc2gtZGFzaGJvYXJkIiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sUjd0KTtsZXQgTzd0PWNsYXNzIGV4dGVuZHMgeWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3J1blRvUHJDdXJ2ZUVudHJ5PXt9LHRoaXMuX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnk9e30sdGhpcy5fY29sb3JTY2FsZUZ1bmN0aW9uPXtzY2FsZTpHUn0sdGhpcy5fY2FuY2VsbGVyPW5ldyBYUix0aGlzLl94Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kPSgpPT57Y29uc3QgdD1uZXcgck8uU2NhbGVzLkxpbmVhcjtyZXR1cm57c2NhbGU6dCxheGlzOm5ldyByTy5BeGVzLk51bWVyaWModCwiYm90dG9tIiksYWNjZXNzb3I6dD0+dC5yZWNhbGx9fSx0aGlzLl95VmFsdWVBY2Nlc3Nvcj10PT50LnByZWNpc2lvbix0aGlzLl90b29sdGlwQ29sdW1ucz0oKCk9Pntjb25zdCB0PXdUdCg0KSxlPWU9PmlzTmFOKGUpPyJOYU4iOnQoZSk7cmV0dXJuW3t0aXRsZToiUnVuIixldmFsdWF0ZTp0PT50LmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlRocmVzaG9sZCIsZXZhbHVhdGU6dD0+ZSh0LmRhdHVtLnRocmVzaG9sZHMpfSx7dGl0bGU6IlByZWNpc2lvbiIsZXZhbHVhdGU6dD0+ZSh0LmRhdHVtLnByZWNpc2lvbil9LHt0aXRsZToiUmVjYWxsIixldmFsdWF0ZTp0PT5lKHQuZGF0dW0ucmVjYWxsKX0se3RpdGxlOiJUUCIsZXZhbHVhdGU6dD0+dC5kYXR1bS50cnVlX3Bvc2l0aXZlc30se3RpdGxlOiJGUCIsZXZhbHVhdGU6dD0+dC5kYXR1bS5mYWxzZV9wb3NpdGl2ZXN9LHt0aXRsZToiVE4iLGV2YWx1YXRlOnQ9PnQuZGF0dW0udHJ1ZV9uZWdhdGl2ZXN9LHt0aXRsZToiRk4iLGV2YWx1YXRlOnQ9PnQuZGF0dW0uZmFsc2VfbmVnYXRpdmVzfV19KSgpLHRoaXMuX3Nlcmllc0RhdGFGaWVsZHM9WyJ0aHJlc2hvbGRzIiwicHJlY2lzaW9uIiwicmVjYWxsIiwidHJ1ZV9wb3NpdGl2ZXMiLCJmYWxzZV9wb3NpdGl2ZXMiLCJ0cnVlX25lZ2F0aXZlcyIsImZhbHNlX25lZ2F0aXZlcyJdLHRoaXMuX2RlZmF1bHRYUmFuZ2U9Wy0uMDUsMS4wNV0sdGhpcy5fZGVmYXVsdFlSYW5nZT1bLS4wNSwxLjA1XSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxlLG4pPT57Y29uc3QgaT1fcigpLnBsdWdpblJvdXRlKCJwcl9jdXJ2ZXMiLCIvcHJfY3VydmVzIik7UHJvbWlzZS5hbGwodC5tYXAoKHQ9Pntjb25zdCBuPWlPKGkse3RhZzp0aGlzLnRhZyxydW46dH0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QobikudGhlbigobj0+e2Uoe2l0ZW06dCxkYXRhOm59KX0pKX0pKSkuZmluYWxseSgoKCk9PntuKCl9KSl9LHRoaXMuX3Ntb290aGluZ0VuYWJsZWQ9ITF9X2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKXtyZXR1cm4odCxlLG4pPT57dGhpcy5zZXQoIl9ydW5Ub0RhdGFPdmVyVGltZSIsT2JqZWN0LmFzc2lnbih7fSx0aGlzLl9ydW5Ub0RhdGFPdmVyVGltZSxuKSl9fV9jb21wdXRlUnVuQ29sb3IodCl7cmV0dXJuIEdSKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9hdHRhY2hlZD0hMCx0aGlzLnJlbG9hZCgpfV9nZXRDaGFydERhdGFMb2FkZXIoKXtyZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKX1yZWxvYWQoKXt0aGlzLl9hdHRhY2hlZCYmKDAhPT10aGlzLnJ1bnMubGVuZ3RoP3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlbG9hZCgpOnRoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLHt9KSl9X3NldENoYXJ0RGF0YSgpe3ZhciB0PXRoaXMuX3J1blRvUHJDdXJ2ZUVudHJ5LGU9dGhpcy5fcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeSxuPXRoaXMuX3NldE9mUmVsZXZhbnRSdW5zO1NlLmV4cG9ydHMuZm9yT3duKHQsKChpLHIpPT57Y29uc3Qgbz1lW3JdO28mJnRbcl0uc3RlcD09PW8uc3RlcHx8KG5bcl0/dGhpcy5fdXBkYXRlU2VyaWVzRGF0YUZvclJ1bihyLGkpOnRoaXMuX2NsZWFyU2VyaWVzRGF0YShyKSl9KSl9X3VwZGF0ZVNlcmllc0RhdGFGb3JSdW4odCxlKXtjb25zdCBuPVNlLmV4cG9ydHMucmVkdWNlKHRoaXMuX3Nlcmllc0RhdGFGaWVsZHMsKCh0LG4pPT4odFtuXT1lW25dLnNsaWNlKCkucmV2ZXJzZSgpLHQpKSx7fSksaT1uZXcgQXJyYXkoblt0aGlzLl9zZXJpZXNEYXRhRmllbGRzWzBdXS5sZW5ndGgpO2ZvcihsZXQgdD0wO3Q8aS5sZW5ndGg7dCsrKWlbdF09U2UuZXhwb3J0cy5tYXBWYWx1ZXMobiwoZT0+ZVt0XSkpO2NvbnN0IHI9dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCk7ci5zZXRTZXJpZXNEYXRhKHQsaSksci5jb21taXRDaGFuZ2VzKCl9X2NsZWFyU2VyaWVzRGF0YSh0KXtjb25zdCBlPXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpO2Uuc2V0U2VyaWVzRGF0YSh0LFtdKSxlLmNvbW1pdENoYW5nZXMoKX1fdXBkYXRlUnVuVG9QckN1cnZlRW50cnkoKXt2YXIgdD10aGlzLnJ1blRvU3RlcENhcDtjb25zdCBlPXt9O1NlLmV4cG9ydHMuZm9yT3duKHRoaXMuX3J1blRvRGF0YU92ZXJUaW1lLCgobixpKT0+e24mJm4ubGVuZ3RoJiYoZVtpXT10aGlzLl9jb21wdXRlRW50cnlDbG9zZXN0T3JFcXVhbFRvU3RlcENhcCh0W2ldLG4pKX0pKSx0aGlzLnNldCgiX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnkiLHRoaXMuX3J1blRvUHJDdXJ2ZUVudHJ5KSx0aGlzLnNldCgiX3J1blRvUHJDdXJ2ZUVudHJ5IixlKX1fbm90aWZ5RGF0YUNoYW5nZSgpe3RoaXMub25EYXRhQ2hhbmdlJiZ0aGlzLm9uRGF0YUNoYW5nZSh0aGlzLl9ydW5Ub0RhdGFPdmVyVGltZSl9X2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKHQsZSl7Y29uc3Qgbj1NYXRoLm1pbihTZS5leHBvcnRzLnNvcnRlZEluZGV4KGUubWFwKCh0PT50LnN0ZXApKSx0KSxlLmxlbmd0aC0xKTtyZXR1cm4gZVtuXX1nZXQgX3J1bnNXaXRoU3RlcEF2YWlsYWJsZSgpe3ZhciB0PXRoaXMuX3J1blRvUHJDdXJ2ZUVudHJ5O3JldHVybiBTZS5leHBvcnRzLmZpbHRlcih0aGlzLnJ1bnMsKGU9PnRbZV0pKS5zb3J0KCl9Z2V0IF9zZXRPZlJlbGV2YW50UnVucygpe2NvbnN0IHQ9e307cmV0dXJuIFNlLmV4cG9ydHMuZm9yRWFjaCh0aGlzLl9ydW5zV2l0aFN0ZXBBdmFpbGFibGUsKGU9Pnt0W2VdPSEwfSkpLHR9X2NvbXB1dGVDdXJyZW50U3RlcEZvclJ1bih0LGUpe2NvbnN0IG49dFtlXTtyZXR1cm4gbj9uLnN0ZXA6bnVsbH1fY29tcHV0ZUN1cnJlbnRXYWxsVGltZUZvclJ1bih0LGUpe2NvbnN0IG49dFtlXTtyZXR1cm4gbj9uZXcgRGF0ZSgxZTMqbi53YWxsX3RpbWUpLnRvU3RyaW5nKCk6bnVsbH1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfV9yZXNldERvbWFpbigpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlc2V0RG9tYWluKCl9cmVkcmF3KCl7dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCkucmVkcmF3KCl9fTtPN3QudGVtcGxhdGU9X2VgCiAgICA8dGYtY2FyZC1oZWFkaW5nCiAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICA+PC90Zi1jYXJkLWhlYWRpbmc+CgogICAgPHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIKICAgICAgeC1jb21wb25lbnRzLWNyZWF0aW9uLW1ldGhvZD0iW1tfeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIgogICAgICB5LXZhbHVlLWFjY2Vzc29yPSJbW195VmFsdWVBY2Nlc3Nvcl1dIgogICAgICB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlRnVuY3Rpb25dXSIKICAgICAgZGVmYXVsdC14LXJhbmdlPSJbW19kZWZhdWx0WFJhbmdlXV0iCiAgICAgIGRlZmF1bHQteS1yYW5nZT0iW1tfZGVmYXVsdFlSYW5nZV1dIgogICAgICBzbW9vdGhpbmctZW5hYmxlZD0iW1tfc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgZGF0YS10by1sb2FkPSJbW3J1bnNdXSIKICAgICAgZGF0YS1zZXJpZXM9IltbcnVuc11dIgogICAgICBsb2FkLWtleT0iW1t0YWddXSIKICAgICAgcmVxdWVzdC1kYXRhPSJbW19yZXF1ZXN0RGF0YV1dIgogICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKV1dIgogICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICA+PC90Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyPgoKICAgIDxkaXYgaWQ9ImJ1dHRvbnMtcm93Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iUmVzZXQgYXhlcyB0byBbMCwgMV0uIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9InN0ZXAtbGVnZW5kIj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfcnVuc1dpdGhTdGVwQXZhaWxhYmxlXV0iIGFzPSJydW4iPgogICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1yb3ciPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iY29sb3ItYm94IgogICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDogW1tfY29tcHV0ZVJ1bkNvbG9yKHJ1bildXTsiCiAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICBbW3J1bl1dIGlzIGF0CiAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcC1sYWJlbC10ZXh0Ij4KICAgICAgICAgICAgc3RlcCBbW19jb21wdXRlQ3VycmVudFN0ZXBGb3JSdW4oX3J1blRvUHJDdXJ2ZUVudHJ5LCBydW4pXV0gPC9zcGFuCiAgICAgICAgICA+PGJyIC8+CiAgICAgICAgICA8c3BhbiBjbGFzcz0id2FsbC10aW1lLWxhYmVsLXRleHQiPgogICAgICAgICAgICAoW1tfY29tcHV0ZUN1cnJlbnRXYWxsVGltZUZvclJ1bihfcnVuVG9QckN1cnZlRW50cnksIHJ1bildXSkKICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICB3aWR0aDogNTAwcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICB0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIHsKICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciB7CiAgICAgICAgaGVpZ2h0OiA2MDBweDsKICAgICAgfQogICAgICAjYnV0dG9ucy1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQogICAgICAjYnV0dG9ucy1yb3cgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGNvbG9yOiAjMjE5NmYzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQogICAgICAjYnV0dG9ucy1yb3cgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CiAgICAgICNzdGVwLWxlZ2VuZCB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBmb250LXNpemU6IDAuOGVtOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcGFkZGluZzogMCAwIDAgMTBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAubGVnZW5kLXJvdyB7CiAgICAgICAgbWFyZ2luOiA1cHggMCA1cHggMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAuY29sb3ItYm94IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMXB4OwogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGhlaWdodDogMTBweDsKICAgICAgfQogICAgICAuc3RlcC1sYWJlbC10ZXh0IHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQogICAgICAud2FsbC10aW1lLWxhYmVsLXRleHQgewogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIGZvbnQtc2l6ZTogMC44ZW07CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sTzd0LnByb3RvdHlwZSwicnVucyIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxPN3QucHJvdG90eXBlLCJ0YWciLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTzd0LnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTzd0LnByb3RvdHlwZSwicnVuVG9TdGVwQ2FwIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGRyKV0sTzd0LnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPN3QucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTzd0LnByb3RvdHlwZSwiX2V4cGFuZGVkIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLE83dC5wcm90b3R5cGUsIl9ydW5Ub1ByQ3VydmVFbnRyeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPN3QucHJvdG90eXBlLCJfcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPN3QucHJvdG90eXBlLCJfcnVuVG9EYXRhT3ZlclRpbWUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxPN3QucHJvdG90eXBlLCJvbkRhdGFDaGFuZ2UiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTzd0LnByb3RvdHlwZSwiX2NvbG9yU2NhbGVGdW5jdGlvbiIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixYUildLE83dC5wcm90b3R5cGUsIl9jYW5jZWxsZXIiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPN3QucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTzd0LnByb3RvdHlwZSwiX3hDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTzd0LnByb3RvdHlwZSwiX3lWYWx1ZUFjY2Vzc29yIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxPN3QucHJvdG90eXBlLCJfdG9vbHRpcENvbHVtbnMiLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLE83dC5wcm90b3R5cGUsIl9zZXJpZXNEYXRhRmllbGRzIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxPN3QucHJvdG90eXBlLCJfZGVmYXVsdFhSYW5nZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sTzd0LnByb3RvdHlwZSwiX2RlZmF1bHRZUmFuZ2UiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxPN3QucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPN3QucHJvdG90eXBlLCJfc21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKSx0KFthKCJydW5zIiwidGFnIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPN3QucHJvdG90eXBlLCJyZWxvYWQiLG51bGwpLHQoW2EoIl9ydW5Ub1ByQ3VydmVFbnRyeSIsIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5IiwiX3NldE9mUmVsZXZhbnRSdW5zIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPN3QucHJvdG90eXBlLCJfc2V0Q2hhcnREYXRhIixudWxsKSx0KFthKCJfcnVuVG9EYXRhT3ZlclRpbWUiLCJydW5Ub1N0ZXBDYXAiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLE83dC5wcm90b3R5cGUsIl91cGRhdGVSdW5Ub1ByQ3VydmVFbnRyeSIsbnVsbCksdChbYSgiX3J1blRvRGF0YU92ZXJUaW1lIiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPN3QucHJvdG90eXBlLCJfbm90aWZ5RGF0YUNoYW5nZSIsbnVsbCksdChbcygicnVucyIsIl9ydW5Ub1ByQ3VydmVFbnRyeSIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sTzd0LnByb3RvdHlwZSwiX3J1bnNXaXRoU3RlcEF2YWlsYWJsZSIsbnVsbCksdChbcygiX3J1bnNXaXRoU3RlcEF2YWlsYWJsZSIpLGUoImRlc2lnbjp0eXBlIixPYmplY3QpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLE83dC5wcm90b3R5cGUsIl9zZXRPZlJlbGV2YW50UnVucyIsbnVsbCksTzd0PXQoW2koInRmLXByLWN1cnZlLWNhcmQiKV0sTzd0KTtsZXQgejd0PWNsYXNzIGV4dGVuZHMgeWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1blRvU3RlcEluZGV4PXt9fV9jb21wdXRlQ29sb3JGb3JSdW4odCl7cmV0dXJuIEdSKHQpfV9jb21wdXRlVGltZVRleHRGb3JSdW4odCxlLG4saSl7Y29uc3Qgcj1lW25dO2lmKCFTZS5leHBvcnRzLmlzTnVtYmVyKHIpKXJldHVybiIiO2NvbnN0IG89dFtuXTtpZighbylyZXR1cm4iIjtjb25zdCBhPW9bcl1baV07aWYoInN0ZXAiPT09aSlyZXR1cm5gc3RlcCAke2F9YDtpZigicmVsYXRpdmUiPT09aSlyZXR1cm4gYTwxP2AkeygxZTMqYSkudG9GaXhlZCgyKX0gbXNgOmAke2EudG9GaXhlZCgyKX0gc2A7aWYoIndhbGxfdGltZSI9PT1pKXJldHVybiBuZXcgRGF0ZSgxZTMqYSkudG9TdHJpbmcoKTt0aHJvdyBuZXcgRXJyb3IoYFRoZSBkaXNwbGF5IHR5cGUgb2YgJHtpfSBpcyBub3QgcmVjb2duaXplZC5gKX1fc2xpZGVyVmFsdWVDaGFuZ2VkKHQpe2NvbnN0IGU9dC50YXJnZXQuZGF0YXNldC5ydW4sbj10LnRhcmdldC5pbW1lZGlhdGVWYWx1ZSxpPU9iamVjdC5hc3NpZ24oe30sdGhpcy5fcnVuVG9TdGVwSW5kZXgpO2lzTmFOKG4pP2RlbGV0ZSBpW2VdOmlbZV09dC50YXJnZXQuaW1tZWRpYXRlVmFsdWUsdGhpcy5fcnVuVG9TdGVwSW5kZXg9aX1fY29tcHV0ZU1heFN0ZXBJbmRleEZvclJ1bih0LGUpe2NvbnN0IG49dFtlXTtyZXR1cm4gbiYmbi5sZW5ndGg/bi5sZW5ndGgtMTowfV91cGRhdGVTdGVwc0Zvck5ld1J1bnMoKXt2YXIgdD10aGlzLnJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXM7Y29uc3QgZT1PYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvU3RlcEluZGV4KTtTZS5leHBvcnRzLmZvck93bih0LCgodCxuKT0+e1NlLmV4cG9ydHMuaXNOdW1iZXIoZVtuXSl8fChlW25dPXQubGVuZ3RoLTEpfSkpLHRoaXMuX3J1blRvU3RlcEluZGV4PWV9X2dldFN0ZXAodCxlKXtyZXR1cm4gdGhpcy5fcnVuVG9TdGVwSW5kZXg/dGhpcy5fcnVuVG9TdGVwSW5kZXhbZV06MH1fY29tcHV0ZVJ1blRvU3RlcCh0LGUpe2NvbnN0IG49e307cmV0dXJuIFNlLmV4cG9ydHMuZm9yT3duKGUsKChlLGkpPT57Y29uc3Qgcj10W2ldO3ImJihuW2ldPXJbZV0uc3RlcCl9KSksbn1nZXQgX3J1bnNXaXRoU2xpZGVycygpe3ZhciB0PXRoaXMucnVuVG9BdmFpbGFibGVUaW1lRW50cmllcztyZXR1cm4gdGhpcy5ydW5zLmZpbHRlcigoZT0+dFtlXSkpfX07ejd0LnRlbXBsYXRlPV9lYAogICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfcnVuc1dpdGhTbGlkZXJzXV0iIGFzPSJydW4iPgogICAgICA8ZGl2IGNsYXNzPSJydW4td2lkZ2V0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJydW4tZGlzcGxheS1jb250YWluZXIiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0icnVuLWNvbG9yLWJveCIKICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6W1tfY29tcHV0ZUNvbG9yRm9yUnVuKHJ1bildXTsiCiAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJydW4tdGV4dCI+W1tydW5dXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtZGlzcGxheS1jb250YWluZXIiPgogICAgICAgICAgW1tfY29tcHV0ZVRpbWVUZXh0Rm9yUnVuKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIF9ydW5Ub1N0ZXBJbmRleCwKICAgICAgICAgIHJ1biwgdGltZURpc3BsYXlUeXBlKV1dCiAgICAgICAgPC9kaXY+CiAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgZGF0YS1ydW4kPSJbW3J1bl1dIgogICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgIG1heD0iW1tfY29tcHV0ZU1heFN0ZXBJbmRleEZvclJ1bihydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzLCBydW4pXV0iCiAgICAgICAgICB2YWx1ZT0iW1tfZ2V0U3RlcChfcnVuVG9TdGVwSW5kZXgsIHJ1bildXSIKICAgICAgICAgIG9uLWltbWVkaWF0ZS12YWx1ZS1jaGFuZ2VkPSJfc2xpZGVyVmFsdWVDaGFuZ2VkIgogICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAucnVuLXdpZGdldCB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICB9CiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgbWFyZ2luOiAtOHB4IDAgMCAtMTVweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAuc3RlcC1kaXNwbGF5LWNvbnRhaW5lciB7CiAgICAgICAgZm9udC1zaXplOiAwLjllbTsKICAgICAgICBtYXJnaW46IDAgMTVweCAwIDA7CiAgICAgIH0KICAgICAgLnJ1bi10ZXh0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgICAgLnJ1bi1jb2xvci1ib3ggewogICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgIGhlaWdodDogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLHo3dC5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sejd0LnByb3RvdHlwZSwicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdCxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlUnVuVG9TdGVwKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIF9ydW5Ub1N0ZXBJbmRleCkifSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLHo3dC5wcm90b3R5cGUsInJ1blRvU3RlcCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx6N3QucHJvdG90eXBlLCJ0aW1lRGlzcGxheVR5cGUiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sejd0LnByb3RvdHlwZSwiX3J1blRvU3RlcEluZGV4Iix2b2lkIDApLHQoW2EoInJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiKSxlKCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksZSgiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHo3dC5wcm90b3R5cGUsIl91cGRhdGVTdGVwc0Zvck5ld1J1bnMiLG51bGwpLHQoW3MoInJ1bnMiLCJydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzIiksZSgiZGVzaWduOnR5cGUiLEFycmF5KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx6N3QucHJvdG90eXBlLCJfcnVuc1dpdGhTbGlkZXJzIixudWxsKSx6N3Q9dChbaSgidGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IiKV0sejd0KTtsZXQgRDd0PWNsYXNzIGV4dGVuZHMoZXIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3RpbWVEaXNwbGF5VHlwZT0ic3RlcCIsdGhpcy5fc2VsZWN0ZWRSdW5zPVtdLHRoaXMuX3J1blRvVGFnSW5mbz17fSx0aGlzLl90YWdUb1J1blRvRGF0YT17fSx0aGlzLl9nZXRDYXRlZ29yeUl0ZW1LZXk9dD0+dC50YWcsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IGRyLHRoaXMuX3N0ZXA9MH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe1Byb21pc2UuYWxsKFt0aGlzLl9mZXRjaFRhZ3MoKV0pLnRoZW4oKCgpPT57dGhpcy5fcmVsb2FkQ2FyZHMoKX0pKX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1fZmV0Y2hUYWdzKCl7Y29uc3QgdD1fcigpLnBsdWdpblJvdXRlKCJwcl9jdXJ2ZXMiLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4oKHQ9PntpZihTZS5leHBvcnRzLmlzRXF1YWwodCx0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtjb25zdCBlPWFyKFNlLmV4cG9ydHMubWFwVmFsdWVzKHQsKHQ9PlNlLmV4cG9ydHMua2V5cyh0KSkpKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PWUubGVuZ3RoKSx0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsdCksdGhpcy5hc3luYygoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSkpfSkpfV9yZWxvYWRDYXJkcygpe1NlLmV4cG9ydHMuZm9yRWFjaCh0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgidGYtcHItY3VydmUtY2FyZCIpLCh0PT57dC5yZWxvYWQoKX0pKX1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9zZWxlY3RlZFJ1bnMsZT10aGlzLl90YWdGaWx0ZXI7cmV0dXJuIHdyKFNlLmV4cG9ydHMubWFwVmFsdWVzKHRoaXMuX3J1blRvVGFnSW5mbywodD0+T2JqZWN0LmtleXModCkpKSx0LGUpfWdldCBfcmVsZXZhbnRTZWxlY3RlZFJ1bnMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZ0luZm87cmV0dXJuIHRoaXMuX3NlbGVjdGVkUnVucy5maWx0ZXIoKGU9PnRbZV0pKX1fdGFnTWV0YWRhdGEodCxlLG4pe2NvbnN0IGk9e307ZS5mb3JFYWNoKChlPT57aVtlXT10W2VdW25dfSkpO2NvbnN0IHI9bi5yZXBsYWNlKC9cL3ByX2N1cnZlcyQvLCIiKTtyZXR1cm4gZU8oaSxyKX1fY3JlYXRlRGF0YUNoYW5nZUNhbGxiYWNrKHQpe3JldHVybiBlPT57dGhpcy5zZXQoIl90YWdUb1J1blRvRGF0YSIsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuX3RhZ1RvUnVuVG9EYXRhKSx7W3RdOmV9KSl9fWdldCBfcnVuVG9BdmFpbGFibGVUaW1lRW50cmllcygpe3ZhciB0PXRoaXMuX3RhZ1RvUnVuVG9EYXRhO2NvbnN0IGU9e307Zm9yKGNvbnN0W24saV1vZiBPYmplY3QuZW50cmllcyh0KSlmb3IoY29uc3RbdF1vZiBPYmplY3QuZW50cmllcyhpKSkobnVsbD09ZVt0XXx8bjxlW3RdKSYmKGVbdF09bik7Y29uc3Qgbj17fTtmb3IoY29uc3RbaSxyXW9mIE9iamVjdC5lbnRyaWVzKGUpKXtjb25zdCBlPXRbcl1baV07bltpXT1lLm1hcCgodD0+KHtzdGVwOnQuc3RlcCx3YWxsX3RpbWU6dC53YWxsX3RpbWUscmVsYXRpdmU6dC53YWxsX3RpbWUtZVswXS53YWxsX3RpbWV9KSkpfXJldHVybiBufX07RDd0LnRlbXBsYXRlPV9lYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0idGltZS10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9IlRpbWUgRGlzcGxheSBUeXBlIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lRGlzcGxheVR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8IS0tCiAgICAgICAgICAgIC0tPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwhLS0KICAgICAgICAgICAgLS0+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiIgaWQ9InN0ZXBzLXNlbGVjdG9yLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHRmLXByLWN1cnZlLXN0ZXBzLXNlbGVjdG9yCiAgICAgICAgICAgICAgICBydW5zPSJbW19yZWxldmFudFNlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgcnVuLXRvLXN0ZXA9Int7X3J1blRvU3RlcH19IgogICAgICAgICAgICAgICAgcnVuLXRvLWF2YWlsYWJsZS10aW1lLWVudHJpZXM9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSIKICAgICAgICAgICAgICAgIHRpbWUtZGlzcGxheS10eXBlPSJbW190aW1lRGlzcGxheVR5cGVdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90Zi1wci1jdXJ2ZS1zdGVwcy1zZWxlY3Rvcj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBwcmVjaXNpb27igJNyZWNhbGwgY3VydmUgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgcHJlY2lzaW9u4oCTcmVjYWxsIGRhdGEgdG8geW91ciBldmVudAogICAgICAgICAgICAgICAgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgICBnZXQtY2F0ZWdvcnktaXRlbS1rZXk9IltbX2dldENhdGVnb3J5SXRlbUtleV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXByLWN1cnZlLWNhcmQKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW5zPSJbW2l0ZW0ucnVuc11dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1bnMsIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIHJ1bi10by1zdGVwLWNhcD0iW1tfcnVuVG9TdGVwXV0iCiAgICAgICAgICAgICAgICAgIG9uLWRhdGEtY2hhbmdlPSJbW19jcmVhdGVEYXRhQ2hhbmdlQ2FsbGJhY2soaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1wci1jdXJ2ZS1jYXJkPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAvKiogRG8gbm90IGxldCB0aGUgc3RlcHMgc2VsZWN0b3Igb2NjbHVkZSB0aGUgcnVuIHNlbGVjdG9yLiAqLwogICAgICAjc3RlcHMtc2VsZWN0b3ItY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA2MCU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRDd0LnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxEN3QucHJvdG90eXBlLCJfdGltZURpc3BsYXlUeXBlIix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxEN3QucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLEQ3dC5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRDd0LnByb3RvdHlwZSwiX3RhZ1RvUnVuVG9EYXRhIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEN3QucHJvdG90eXBlLCJfcnVuVG9TdGVwIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRDd0LnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxEN3QucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRDd0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEN3QucHJvdG90eXBlLCJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Iix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLGRyKV0sRDd0LnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW28oe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLGUoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxEN3QucHJvdG90eXBlLCJfc3RlcCIsdm9pZCAwKSx0KFtzKCJfcnVuVG9UYWdJbmZvIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiLCJfY2F0ZWdvcmllc0RvbVJlYWR5IiksZSgiZGVzaWduOnR5cGUiLEFycmF5KSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxEN3QucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCksdChbcygiX3NlbGVjdGVkUnVucyIsIl9ydW5Ub1RhZ0luZm8iKSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEQ3dC5wcm90b3R5cGUsIl9yZWxldmFudFNlbGVjdGVkUnVucyIsbnVsbCksdChbcygiX3RhZ1RvUnVuVG9EYXRhIiksZSgiZGVzaWduOnR5cGUiLE9iamVjdCksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRDd0LnByb3RvdHlwZSwiX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiLG51bGwpLEQ3dD10KFtpKCJ0Zi1wci1jdXJ2ZS1kYXNoYm9hcmQiKV0sRDd0KTtsZXQgQjd0PWNsYXNzIGV4dGVuZHMoZXIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faW5zdGFsbENvbW1hbmQ9InBpcCBpbnN0YWxsIC1VIHRlbnNvcmJvYXJkLXBsdWdpbi1wcm9maWxlIn1fY29weUluc3RhbGxDb21tYW5kKCl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSgpPT5uKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy4kLmNvbW1hbmRUZXh0YXJlYS5zZWxlY3QoKTt0cnl7eWllbGQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5faW5zdGFsbENvbW1hbmQpfWNhdGNoKHQpe2lmKCFkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpKXJldHVybiBQcm9taXNlLnJlamVjdCgpfX0pKSxlPXRoaXMuJC5jb3BpZWRNZXNzYWdlO3RyeXt5aWVsZCB0KCksZS5pbm5lclRleHQ9IkNvcGllZC4ifWNhdGNoKHQpe2UuaW5uZXJUZXh0PSJGYWlsZWQgdG8gY29weSB0byBjbGlwYm9hcmQuIn19KSl9X3JlbW92ZUNvcGllZE1lc3NhZ2UoKXt0aGlzLiQuY29waWVkTWVzc2FnZS5pbm5lclRleHQ9IiJ9fTtCN3QudGVtcGxhdGU9X2VgCiAgICA8ZGl2IGNsYXNzPSJtZXNzYWdlIj4KICAgICAgPGgzPlRoZSBwcm9maWxlIHBsdWdpbiBoYXMgbW92ZWQuPC9oMz4KICAgICAgPHA+CiAgICAgICAgUGxlYXNlIGluc3RhbGwgdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZSBwcm9maWxlIHBsdWdpbiBmcm9tIFB5UEkgYnkKICAgICAgICBydW5uaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBmcm9tIHRoZSBtYWNoaW5lIHJ1bm5pbmcgVGVuc29yQm9hcmQ6CiAgICAgIDwvcD4KICAgICAgPHRleHRhcmVhCiAgICAgICAgaWQ9ImNvbW1hbmRUZXh0YXJlYSIKICAgICAgICByZWFkb25seT0iIgogICAgICAgIHJvd3M9IjEiCiAgICAgICAgb24tYmx1cj0iX3JlbW92ZUNvcGllZE1lc3NhZ2UiCiAgICAgID4KW1tfaW5zdGFsbENvbW1hbmRdXTwvdGV4dGFyZWEKICAgICAgPgogICAgICA8ZGl2IGlkPSJjb3B5Q29udGFpbmVyIj4KICAgICAgICA8c3BhbiBpZD0iY29waWVkTWVzc2FnZSI+PC9zcGFuPgogICAgICAgIDxwYXBlci1idXR0b24gcmFpc2VkPSIiIG9uLXRhcD0iX2NvcHlJbnN0YWxsQ29tbWFuZCIKICAgICAgICAgID5Db3B5IHRvIGNsaXBib2FyZDwvcGFwZXItYnV0dG9uCiAgICAgICAgPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlIHsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgfQogICAgICAjY29tbWFuZFRleHRhcmVhIHsKICAgICAgICBtYXJnaW4tdG9wOiAxZXg7CiAgICAgICAgcGFkZGluZzogMWV4IDFlbTsKICAgICAgICByZXNpemU6IHZlcnRpY2FsOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgICNjb3B5Q29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CiAgICAgICNjb3BpZWRNZXNzYWdlIHsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxZW07CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYCx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxCN3QucHJvdG90eXBlLCJfaW5zdGFsbENvbW1hbmQiLHZvaWQgMCksQjd0PXQoW2koInRmLXByb2ZpbGUtcmVkaXJlY3QtZGFzaGJvYXJkIildLEI3dCk7bGV0IEg3dD1jbGFzcyBleHRlbmRzKGVyKGhsKSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl9zaG93RG93bmxvYWRMaW5rcz1IcygiX3Nob3dEb3dubG9hZExpbmtzIix7ZGVmYXVsdFZhbHVlOiExLHVzZUxvY2FsU3RvcmFnZTohMH0pLmNhbGwodGhpcyksdGhpcy5fc21vb3RoaW5nV2VpZ2h0PUdzKCJfc21vb3RoaW5nV2VpZ2h0Iix7ZGVmYXVsdFZhbHVlOi42fSkuY2FsbCh0aGlzKSx0aGlzLl9pZ25vcmVZT3V0bGllcnM9SHMoIl9pZ25vcmVZT3V0bGllcnMiLHtkZWZhdWx0VmFsdWU6ITAsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl94VHlwZT14VHQuU1RFUCx0aGlzLl9zZWxlY3RlZFJ1bnM9W10sdGhpcy5fdGFnRmlsdGVyPSIiLHRoaXMuX2NhdGVnb3JpZXM9W10sdGhpcy5fZ2V0Q2F0ZWdvcnlJdGVtS2V5PXQ9PnQudGFnLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBkcig1MCksdGhpcy5fc2hvd0Rvd25sb2FkTGlua3NPYnNlcnZlcj1GcygiX3Nob3dEb3dubG9hZExpbmtzIix7ZGVmYXVsdFZhbHVlOiExLHVzZUxvY2FsU3RvcmFnZTohMH0pLHRoaXMuX3Ntb290aGluZ1dlaWdodE9ic2VydmVyPVdzKCJfc21vb3RoaW5nV2VpZ2h0Iix7ZGVmYXVsdFZhbHVlOi42fSksdGhpcy5faWdub3JlWU91dGxpZXJzT2JzZXJ2ZXI9RnMoIl9pZ25vcmVZT3V0bGllcnMiLHtkZWZhdWx0VmFsdWU6ITAsdXNlTG9jYWxTdG9yYWdlOiEwfSl9Z2V0IF9zbW9vdGhpbmdFbmFibGVkKCl7cmV0dXJuIHRoaXMuX3Ntb290aGluZ1dlaWdodD4wfV9nZXRDYXRlZ29yeUtleSh0KXtyZXR1cm4gdC5tZXRhZGF0YS50eXBlPT1ici5TRUFSQ0hfUkVTVUxUUz8iIjp0Lm5hbWV9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgoKT0+e3RoaXMuX3JlbG9hZENoYXJ0cygpfSkpfV9mZXRjaFRhZ3MoKXtjb25zdCB0PV9yKCkucGx1Z2luUm91dGUoInNjYWxhcnMiLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4oKHQ9PntpZihTZS5leHBvcnRzLmlzRXF1YWwodCx0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtjb25zdCBlPWFyKFNlLmV4cG9ydHMubWFwVmFsdWVzKHQsKHQ9Pk9iamVjdC5rZXlzKHQpKSkpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwwPT09ZS5sZW5ndGgpLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIix0KSx0aGlzLmFzeW5jKCgoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KSl9KSl9X3JlbG9hZENoYXJ0cygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1zY2FsYXItY2FyZCIpLmZvckVhY2goKHQ9Pnt0LnJlbG9hZCgpfSkpfV91cGRhdGVDYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fc2VsZWN0ZWRSdW5zO2xldCBlLG49dGhpcy5fdGFnRmlsdGVyO2U9d3IoU2UuZXhwb3J0cy5tYXBWYWx1ZXModGhpcy5fcnVuVG9UYWdJbmZvLCh0PT5PYmplY3Qua2V5cyh0KSkpLHQsbiksZS5mb3JFYWNoKCh0PT57dC5pdGVtcz10Lml0ZW1zLm1hcCgodD0+KHt0YWc6dC50YWcsc2VyaWVzOnQucnVucy5tYXAoKGU9Pih7cnVuOmUsdGFnOnQudGFnfSkpKX0pKSl9KSksdGhpcy51cGRhdGVBcnJheVByb3AoIl9jYXRlZ29yaWVzIixlLHRoaXMuX2dldENhdGVnb3J5S2V5KX1fdGFnTWV0YWRhdGEodCxlLG4pe2NvbnN0IGk9dC5uYW1lLHI9bi50YWcsbz17fTtuLnNlcmllcy5mb3JFYWNoKCgoe3J1bjp0fSk9PntvW3RdPWVbdF1bcl19KSk7Y29uc3QgYT1yLnJlcGxhY2UoL1wvc2NhbGFyX3N1bW1hcnkkLywiIik7bGV0e2Rlc2NyaXB0aW9uOnMsZGlzcGxheU5hbWU6bH09ZU8obyxhKTtyZXR1cm4gdC5tZXRhZGF0YS50eXBlPT1ici5QUkVGSVhfR1JPVVAmJmwuc3RhcnRzV2l0aChpKyIvIikmJihsPWwuc2xpY2UoaS5sZW5ndGgrMSkpLHtkZXNjcmlwdGlvbjpzLGRpc3BsYXlOYW1lOmx9fX07SDd0LnRlbXBsYXRlPV9lYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgICBpZD0ic2hvdy1kb3dubG9hZC1saW5rcyIKICAgICAgICAgICAgICAgIGNoZWNrZWQ9Int7X3Nob3dEb3dubG9hZExpbmtzfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBkYXRhIGRvd25sb2FkIGxpbmtzPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgICBpZD0iaWdub3JlLXktb3V0bGllciIKICAgICAgICAgICAgICAgIGNoZWNrZWQ9Int7X2lnbm9yZVlPdXRsaWVyc319IgogICAgICAgICAgICAgICAgPklnbm9yZSBvdXRsaWVycyBpbiBjaGFydCBzY2FsaW5nPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZyI+CiAgICAgICAgICAgICAgPGRpdj5Ub29sdGlwIHNvcnRpbmcgbWV0aG9kOjwvZGl2PgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdAogICAgICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfdG9vbHRpcFNvcnRpbmdNZXRob2R9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9IjAiCiAgICAgICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlZmF1bHQ8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+bmVhcmVzdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtc21vb3RoaW5nLWlucHV0CiAgICAgICAgICAgICAgd2VpZ2h0PSJ7e19zbW9vdGhpbmdXZWlnaHR9fSIKICAgICAgICAgICAgICBzdGVwPSIwLjAwMSIKICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgbWF4PSIwLjk5OSIKICAgICAgICAgICAgPjwvdGYtc21vb3RoaW5nLWlucHV0PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9IngtdHlwZS1zZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIb3Jpem9udGFsIEF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+PCEtLQogICAgICAgICAgICAtLT48cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBzY2FsYXIgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHNjYWxhciBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgICAgZ2V0LWNhdGVnb3J5LWl0ZW0ta2V5PSJbW19nZXRDYXRlZ29yeUl0ZW1LZXldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1zY2FsYXItY2FyZAogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIGRhdGEtdG8tbG9hZD0iW1tpdGVtLnNlcmllc11dIgogICAgICAgICAgICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgICAgICAgICAgIG11bHRpLWV4cGVyaW1lbnRzPSJbW19nZXRNdWx0aUV4cGVyaW1lbnRzKGRhdGFTZWxlY3Rpb24pXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIKICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLWVuYWJsZWQ9IltbX3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLXdlaWdodD0iW1tfc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoY2F0ZWdvcnksIF9ydW5Ub1RhZ0luZm8sIGl0ZW0pXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW190b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgICAgICAgICAgICB4LXR5cGU9IltbX3hUeXBlXV0iCiAgICAgICAgICAgICAgICAgIGJhdGNoLXNpemU9IltbZmVhdHVyZUZsYWdzLnNjYWxhcnNCYXRjaFNpemVdXSIKICAgICAgICAgICAgICAgICAgaW4tY29sYWI9IltbZmVhdHVyZUZsYWdzLmluQ29sYWJdXSIKICAgICAgICAgICAgICAgID48L3RmLXNjYWxhci1jYXJkPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICN0b29sdGlwLXNvcnRpbmcgewogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAtc29ydGluZyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgd2lkdGg6IDEwNXB4OwogICAgICB9CgogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIC5jZW50ZXIgewogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSDd0LnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIN3QucHJvdG90eXBlLCJmZWF0dXJlRmxhZ3MiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxvYnNlcnZlcjoiX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXIifSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxIN3QucHJvdG90eXBlLCJfc2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCksdChbbyh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLG9ic2VydmVyOiJfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXIifSksZSgiZGVzaWduOnR5cGUiLE51bWJlcildLEg3dC5wcm90b3R5cGUsIl9zbW9vdGhpbmdXZWlnaHQiLHZvaWQgMCksdChbbyh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfaWdub3JlWU91dGxpZXJzT2JzZXJ2ZXIifSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxIN3QucHJvdG90eXBlLCJfaWdub3JlWU91dGxpZXJzIix2b2lkIDApLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLEg3dC5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sSDd0LnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIN3QucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSDd0LnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxIN3QucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApLHQoW28oe3R5cGU6Qm9vbGVhbn0pLGUoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSDd0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKSx0KFtvKHt0eXBlOkFycmF5fSksZSgiZGVzaWduOnR5cGUiLEFycmF5KV0sSDd0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSDd0LnByb3RvdHlwZSwiX2dldENhdGVnb3J5SXRlbUtleSIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixkcildLEg3dC5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKSx0KFtzKCJfc21vb3RoaW5nV2VpZ2h0IiksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pLGUoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEg3dC5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKSx0KFthKCJfcnVuVG9UYWdJbmZvIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiLCJfY2F0ZWdvcmllc0RvbVJlYWR5IiksZSgiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pLGUoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIN3QucHJvdG90eXBlLCJfdXBkYXRlQ2F0ZWdvcmllcyIsbnVsbCksSDd0PXQoW2koInRmLXNjYWxhci1kYXNoYm9hcmQiKV0sSDd0KTtsZXQgRjd0PWNsYXNzIGV4dGVuZHMoZXIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGV4dHM9W10sdGhpcy5fY2FuY2VsbGVyPW5ldyBYUn1nZXQgX3J1bkNvbG9yKCl7cmV0dXJuIEdSKHRoaXMucnVuKX1fY2hhbmdlUnVuQ29sb3IoKXt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGItdGV4dC1sb2FkZXItb3V0bGluZSI6dGhpcy5fcnVuQ29sb3J9KX1hdHRhY2hlZCgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuaXNBdHRhY2hlZClyZXR1cm47dGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO2NvbnN0IHQ9aU8oX3IoKS5wbHVnaW5Sb3V0ZSgidGV4dCIsIi90ZXh0Iikse3RhZzp0aGlzLnRhZyxydW46dGhpcy5ydW59KSxlPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSgodD0+e2lmKHQuY2FuY2VsbGVkKXJldHVybjtjb25zdCBlPXQudmFsdWUubWFwKCh0PT4oe3dhbGxfdGltZTpuZXcgRGF0ZSgxZTMqdC53YWxsX3RpbWUpLHN0ZXA6dC5zdGVwLHRleHQ6dC50ZXh0fSkpKTt0aGlzLnNldCgiX3RleHRzIixlLnNsaWNlKCkucmV2ZXJzZSgpKX0pKTt0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihlKX1fZm9ybWF0U3RlcCh0KXtyZXR1cm4gbXkoIiwiKSh0KX19O0Y3dC50ZW1wbGF0ZT1fZWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgcnVuPSJbW3J1bl1dIiB0YWc9IltbdGFnXV0iIGNvbG9yPSJbW19ydW5Db2xvcl1dIj4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHBhcGVyLW1hdGVyaWFsCiAgICAgIGVsZXZhdGlvbj0iMSIKICAgICAgaWQ9InN0ZXBzLWNvbnRhaW5lciIKICAgICAgY2xhc3M9ImNvbnRhaW5lciBzY3JvbGxiYXIiCiAgICA+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3RleHRzXV0iPgogICAgICAgIDxwYXBlci1tYXRlcmlhbCBlbGV2YXRpb249IjEiIGNsYXNzPSJzdGVwLWNvbnRhaW5lciI+CiAgICAgICAgICBzdGVwIDxzcGFuIGNsYXNzPSJzdGVwLXZhbHVlIj5bW19mb3JtYXRTdGVwKGl0ZW0uc3RlcCldXTwvc3Bhbj4KICAgICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgICAgIDxwYXBlci1tYXRlcmlhbCBlbGV2YXRpb249IjEiIGNsYXNzPSJ0ZXh0Ij4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbaXRlbS50ZXh0XV0iPjwvdGYtbWFya2Rvd24tdmlldz4KICAgICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9wYXBlci1tYXRlcmlhbD4KICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIC5zY3JvbGxiYXIgewogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KICAgICAgI3N0ZXBzLWNvbnRhaW5lciB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIC8qIGNvbG9yIGNvbXB1dGVkIGFuZCBzZXQgYXMgaW5saW5lIHN0eWxlICovOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1heC1oZWlnaHQ6IDUwMHB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi10ZXh0LWxvYWRlci1vdXRsaW5lKTsKICAgICAgfQogICAgICAudGV4dCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgICBib3JkZXItcmFkaXVzOiAwIDNweCAzcHggM3B4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5zdGVwLWNvbnRhaW5lciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweCAzcHggMCAwOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXRiLXVpLWJvcmRlcik7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7IC8qIHRvIGNvcnJlY3QgZm9yIGJvcmRlciAqLwogICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgfQogICAgICAuc3RlcC1jb250YWluZXI6bm90KDpmaXJzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi10b3A6IDE1cHg7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgLHQoW28oe3R5cGU6U3RyaW5nfSksZSgiZGVzaWduOnR5cGUiLFN0cmluZyldLEY3dC5wcm90b3R5cGUsInJ1biIsdm9pZCAwKSx0KFtvKHt0eXBlOlN0cmluZ30pLGUoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxGN3QucHJvdG90eXBlLCJ0YWciLHZvaWQgMCksdChbbyh7dHlwZTpBcnJheX0pLGUoImRlc2lnbjp0eXBlIixBcnJheSldLEY3dC5wcm90b3R5cGUsIl90ZXh0cyIsdm9pZCAwKSx0KFtvKHt0eXBlOk9iamVjdH0pLGUoImRlc2lnbjp0eXBlIixkcildLEY3dC5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLFhSKV0sRjd0LnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKSx0KFtzKCJydW4iKSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKSxlKCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGN3QucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpLHQoW2EoIl9ydW5Db2xvciIpLGUoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSxlKCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRjd0LnByb3RvdHlwZSwiX2NoYW5nZVJ1bkNvbG9yIixudWxsKSxGN3Q9dChbaSgidGYtdGV4dC1sb2FkZXIiKV0sRjd0KTtsZXQgVjd0PWNsYXNzIGV4dGVuZHMoZXIoeWUpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBkcn1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCgpPT57dGhpcy5fcmVsb2FkVGV4dHMoKX0pKX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1fZmV0Y2hUYWdzKCl7Y29uc3QgdD1fcigpLnBsdWdpblJvdXRlKCJ0ZXh0IiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKCh0PT57aWYoU2UuZXhwb3J0cy5pc0VxdWFsKHQsdGhpcy5fcnVuVG9UYWcpKXJldHVybjtjb25zdCBlPWFyKHQpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwwPT09ZS5sZW5ndGgpLHRoaXMuc2V0KCJfcnVuVG9UYWciLHQpLHRoaXMuYXN5bmMoKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pKX0pKX1fcmVsb2FkVGV4dHMoKXt0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgidGYtdGV4dC1sb2FkZXIiKS5mb3JFYWNoKCh0PT57dC5yZWxvYWQoKX0pKX1nZXQgX2NhdGVnb3JpZXMoKXtyZXR1cm4gTXIodGhpcy5fcnVuVG9UYWcsdGhpcy5fc2VsZWN0ZWRSdW5zLHRoaXMuX3RhZ0ZpbHRlcil9fTtWN3QudGVtcGxhdGU9X2VgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIHRleHQgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHRleHQgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXRleHQtbG9hZGVyCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi10ZXh0LWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGAsdChbbyh7dHlwZTpCb29sZWFufSksZSgiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxWN3QucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApLHQoW28oe3R5cGU6QXJyYXl9KSxlKCJkZXNpZ246dHlwZSIsQXJyYXkpXSxWN3QucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApLHQoW28oe3R5cGU6T2JqZWN0fSksZSgiZGVzaWduOnR5cGUiLE9iamVjdCldLFY3dC5wcm90b3R5cGUsIl9ydW5Ub1RhZyIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFY3dC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCksdChbbyh7dHlwZTpTdHJpbmd9KSxlKCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sVjd0LnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKSx0KFtvKHt0eXBlOkJvb2xlYW59KSxlKCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFY3dC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCksdChbbyh7dHlwZTpPYmplY3R9KSxlKCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVjd0LnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApLHQoW3MoIl9ydW5Ub1RhZyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLGUoImRlc2lnbjp0eXBlIixBcnJheSksZSgiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sVjd0LnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpLFY3dD10KFtpKCJ0Zi10ZXh0LWRhc2hib2FyZCIpXSxWN3QpO2xldCBVN3Q9Y2xhc3MgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX2JhY2tlbmQ9U0N0fX07VTd0PXQoW2koInRmLWJhY2tlbmQiKV0sVTd0KTtsZXQgajd0PWNsYXNzIGV4dGVuZHMgeWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9nbG9iYWxzPUVzfX07ajd0PXQoW2koInRmLWdsb2JhbHMiKV0sajd0KTtsZXQgRzd0PWNsYXNzIGV4dGVuZHMgeWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9zdG9yYWdlPUlDdH19O0c3dD10KFtpKCJ0Zi1zdG9yYWdlIildLEc3dCk7dmFyIFc3dD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxhZGRMaW1pdExpc3RlbmVyOmxsLHJlbW92ZUxpbWl0TGlzdGVuZXI6Y2wsZ2V0TGltaXQ6dWwsc2V0TGltaXQ6ZnVuY3Rpb24gcTd0KHQpe2lmKHQhPT1NYXRoLmZsb29yKHQpKXRocm93IG5ldyBFcnJvcihgbGltaXQgbXVzdCBiZSBhbiBpbnRlZ2VyLCBidXQgZ290OiAke3R9YCk7aWYodDw9MCl0aHJvdyBuZXcgRXJyb3IoYGxpbWl0IG11c3QgYmUgcG9zaXRpdmUsIGJ1dCBnb3Q6ICR7dH1gKTt0IT09YWwmJihhbD10LGpzKG9sLGFsLHt1c2VMb2NhbFN0b3JhZ2U6ITB9KSxzbC5mb3JFYWNoKCh0PT57dCgpfSkpKX0sVGZEb21SZXBlYXQ6ZGx9KTtsZXQgWTd0PWNsYXNzIGV4dGVuZHMgeWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9wYWdpbmF0ZWRfdmlldz1XN3R9fTtZN3Q9dChbaSgidGYtcGFnaW5hdGVkLXZpZXctc3RvcmUiKV0sWTd0KTtsZXQgWDd0PWNsYXNzIGV4dGVuZHMgeWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy5ydW5zQ29sb3JTY2FsZT1HUn19O1g3dD10KFtpKCJ0Zi1jb2xvci1zY2FsZSIpXSxYN3QpfSkoKTsKCiEoZnVuY3Rpb24oKXsKLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KCiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogICAgUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCiAgICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICAgIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCiAgICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KdmFyIHQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4odD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxlKXt0Ll9fcHJvdG9fXz1lfXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSl9KShlLG4pfTtmdW5jdGlvbiBlKGUsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4mJm51bGwhPT1uKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcobikrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gbygpe3RoaXMuY29uc3RydWN0b3I9ZX10KGUsbiksZS5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooby5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IG8pfWZ1bmN0aW9uIG4odCxlKXt2YXIgbixvLGksYSxyPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmlbMF0pdGhyb3cgaVsxXTtyZXR1cm4gaVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBhPXtuZXh0OnMoMCksdGhyb3c6cygxKSxyZXR1cm46cygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGFbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksYTtmdW5jdGlvbiBzKGEpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4oZnVuY3Rpb24gbChhKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3I7KXRyeXtpZihuPTEsbyYmKGk9MiZhWzBdP28ucmV0dXJuOmFbMF0/by50aHJvd3x8KChpPW8ucmV0dXJuKSYmaS5jYWxsKG8pLDApOm8ubmV4dCkmJiEoaT1pLmNhbGwobyxhWzFdKSkuZG9uZSlyZXR1cm4gaTtzd2l0Y2gobz0wLGkmJihhPVsyJmFbMF0saS52YWx1ZV0pLGFbMF0pe2Nhc2UgMDpjYXNlIDE6aT1hO2JyZWFrO2Nhc2UgNDpyZXR1cm4gci5sYWJlbCsrLHt2YWx1ZTphWzFdLGRvbmU6ITF9O2Nhc2UgNTpyLmxhYmVsKyssbz1hWzFdLGE9WzBdO2NvbnRpbnVlO2Nhc2UgNzphPXIub3BzLnBvcCgpLHIudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGk9KGk9ci50cnlzKS5sZW5ndGg+MCYmaVtpLmxlbmd0aC0xXSl8fDYhPT1hWzBdJiYyIT09YVswXSkpe3I9MDtjb250aW51ZX1pZigzPT09YVswXSYmKCFpfHxhWzFdPmlbMF0mJmFbMV08aVszXSkpe3IubGFiZWw9YVsxXTticmVha31pZig2PT09YVswXSYmci5sYWJlbDxpWzFdKXtyLmxhYmVsPWlbMV0saT1hO2JyZWFrfWlmKGkmJnIubGFiZWw8aVsyXSl7ci5sYWJlbD1pWzJdLHIub3BzLnB1c2goYSk7YnJlYWt9aVsyXSYmci5vcHMucG9wKCksci50cnlzLnBvcCgpO2NvbnRpbnVlfWE9ZS5jYWxsKHQscil9Y2F0Y2godCl7YT1bNix0XSxvPTB9ZmluYWxseXtuPWk9MH1pZig1JmFbMF0pdGhyb3cgYVsxXTtyZXR1cm57dmFsdWU6YVswXT9hWzFdOnZvaWQgMCxkb25lOiEwfX0pKFthLHNdKX19fWZ1bmN0aW9uIG8odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLG49ZSYmdFtlXSxvPTA7aWYobilyZXR1cm4gbi5jYWxsKHQpO2lmKHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCYmbz49dC5sZW5ndGgmJih0PXZvaWQgMCkse3ZhbHVlOnQmJnRbbysrXSxkb25lOiF0fX19O3Rocm93IG5ldyBUeXBlRXJyb3IoZT8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9ZnVuY3Rpb24gaSh0LGUpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXTtpZighbilyZXR1cm4gdDt2YXIgbyxpLGE9bi5jYWxsKHQpLHI9W107dHJ5e2Zvcig7KHZvaWQgMD09PWV8fGUtLSA+MCkmJiEobz1hLm5leHQoKSkuZG9uZTspci5wdXNoKG8udmFsdWUpfWNhdGNoKHQpe2k9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e28mJiFvLmRvbmUmJihuPWEucmV0dXJuKSYmbi5jYWxsKGEpfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gcn1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciBuPTAsbz1lLmxlbmd0aCxpPXQubGVuZ3RoO248bztuKyssaSsrKXRbaV09ZVtuXTtyZXR1cm4gdH1mdW5jdGlvbiByKHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygcj8odGhpcy52PXQsdGhpcyk6bmV3IHIodCl9ZnVuY3Rpb24gcyh0LGUsbil7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBvLGk9bi5hcHBseSh0LGV8fFtdKSxhPVtdO3JldHVybiBvPXt9LHMoIm5leHQiKSxzKCJ0aHJvdyIpLHMoInJldHVybiIpLG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LG87ZnVuY3Rpb24gcyh0KXtpW3RdJiYob1t0XT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sbyl7YS5wdXNoKFt0LGUsbixvXSk+MXx8bCh0LGUpfSkpfSl9ZnVuY3Rpb24gbCh0LGUpe3RyeXshKGZ1bmN0aW9uIG4odCl7dC52YWx1ZSBpbnN0YW5jZW9mIHI/UHJvbWlzZS5yZXNvbHZlKHQudmFsdWUudikudGhlbihjLGQpOnAoYVswXVsyXSx0KX0pKGlbdF0oZSkpfWNhdGNoKHQpe3AoYVswXVszXSx0KX19ZnVuY3Rpb24gYyh0KXtsKCJuZXh0Iix0KX1mdW5jdGlvbiBkKHQpe2woInRocm93Iix0KX1mdW5jdGlvbiBwKHQsZSl7dChlKSxhLnNoaWZ0KCksYS5sZW5ndGgmJmwoYVswXVswXSxhWzBdWzFdKX19ZnVuY3Rpb24gbCh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH1mdW5jdGlvbiBjKHQpe3ZhciBlPXQoKGZ1bmN0aW9uKHQpe0Vycm9yLmNhbGwodCksdC5zdGFjaz0obmV3IEVycm9yKS5zdGFja30pKTtyZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX12YXIgZD1jKChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gZShuKXt0KHRoaXMpLHRoaXMubWVzc2FnZT1uP24ubGVuZ3RoKyIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbiIrbi5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUrMSsiKSAiK3QudG9TdHJpbmcoKX0pKS5qb2luKCJcbiAgIik6IiIsdGhpcy5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIix0aGlzLmVycm9ycz1ufX0pKTtmdW5jdGlvbiBwKHQsZSl7aWYodCl7dmFyIG49dC5pbmRleE9mKGUpOzA8PW4mJnQuc3BsaWNlKG4sMSl9fXZhciBtPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5pbml0aWFsVGVhcmRvd249dCx0aGlzLmNsb3NlZD0hMSx0aGlzLl9wYXJlbnRhZ2U9bnVsbCx0aGlzLl90ZWFyZG93bnM9bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scixzO2lmKCF0aGlzLmNsb3NlZCl7dGhpcy5jbG9zZWQ9ITA7dmFyIGM9dGhpcy5fcGFyZW50YWdlO2lmKGMpaWYodGhpcy5fcGFyZW50YWdlPW51bGwsQXJyYXkuaXNBcnJheShjKSl0cnl7Zm9yKHZhciBwPW8oYyksbT1wLm5leHQoKTshbS5kb25lO209cC5uZXh0KCkpbS52YWx1ZS5yZW1vdmUodGhpcyl9Y2F0Y2goZSl7dD17ZXJyb3I6ZX19ZmluYWxseXt0cnl7bSYmIW0uZG9uZSYmKGU9cC5yZXR1cm4pJiZlLmNhbGwocCl9ZmluYWxseXtpZih0KXRocm93IHQuZXJyb3J9fWVsc2UgYy5yZW1vdmUodGhpcyk7dmFyIHU9dGhpcy5pbml0aWFsVGVhcmRvd247aWYobCh1KSl0cnl7dSgpfWNhdGNoKHQpe3M9dCBpbnN0YW5jZW9mIGQ/dC5lcnJvcnM6W3RdfXZhciBmPXRoaXMuX3RlYXJkb3ducztpZihmKXt0aGlzLl90ZWFyZG93bnM9bnVsbDt0cnl7Zm9yKHZhciBoPW8oZiksYj1oLm5leHQoKTshYi5kb25lO2I9aC5uZXh0KCkpe3ZhciB5PWIudmFsdWU7dHJ5e2coeSl9Y2F0Y2godCl7cz1udWxsIT1zP3M6W10sdCBpbnN0YW5jZW9mIGQ/cz1hKGEoW10saShzKSksaSh0LmVycm9ycykpOnMucHVzaCh0KX19fWNhdGNoKHQpe249e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2ImJiFiLmRvbmUmJihyPWgucmV0dXJuKSYmci5jYWxsKGgpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX19aWYocyl0aHJvdyBuZXcgZChzKX19LHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt2YXIgbjtpZihlJiZlIT09dGhpcylpZih0aGlzLmNsb3NlZClnKGUpO2Vsc2V7aWYoZSBpbnN0YW5jZW9mIHQpe2lmKGUuY2xvc2VkfHxlLl9oYXNQYXJlbnQodGhpcykpcmV0dXJuO2UuX2FkZFBhcmVudCh0aGlzKX0odGhpcy5fdGVhcmRvd25zPW51bGwhPT0obj10aGlzLl90ZWFyZG93bnMpJiZ2b2lkIDAhPT1uP246W10pLnB1c2goZSl9fSx0LnByb3RvdHlwZS5faGFzUGFyZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3BhcmVudGFnZTtyZXR1cm4gZT09PXR8fEFycmF5LmlzQXJyYXkoZSkmJmUuaW5jbHVkZXModCl9LHQucHJvdG90eXBlLl9hZGRQYXJlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGFyZW50YWdlO3RoaXMuX3BhcmVudGFnZT1BcnJheS5pc0FycmF5KGUpPyhlLnB1c2godCksZSk6ZT9bZSx0XTp0fSx0LnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3BhcmVudGFnZTtlPT09dD90aGlzLl9wYXJlbnRhZ2U9bnVsbDpBcnJheS5pc0FycmF5KGUpJiZwKGUsdCl9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXt2YXIgbj10aGlzLl90ZWFyZG93bnM7biYmcChuLGUpLGUgaW5zdGFuY2VvZiB0JiZlLl9yZW1vdmVQYXJlbnQodGhpcyl9LHQuRU1QVFk9KGZ1bmN0aW9uKCl7dmFyIGU9bmV3IHQ7cmV0dXJuIGUuY2xvc2VkPSEwLGV9KSgpLHR9KSgpLHU9bS5FTVBUWTtmdW5jdGlvbiBmKHQpe3JldHVybiB0IGluc3RhbmNlb2YgbXx8dCYmImNsb3NlZCJpbiB0JiZsKHQucmVtb3ZlKSYmbCh0LmFkZCkmJmwodC51bnN1YnNjcmliZSl9ZnVuY3Rpb24gZyh0KXtsKHQpP3QoKTp0LnVuc3Vic2NyaWJlKCl9dmFyIGg9e3NldFRpbWVvdXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49aC5kZWxlZ2F0ZTtyZXR1cm4oKG51bGw9PW4/dm9pZCAwOm4uc2V0VGltZW91dCl8fHNldFRpbWVvdXQpLmFwcGx5KHZvaWQgMCxhKFtdLGkodCkpKX0sY2xlYXJUaW1lb3V0OmZ1bmN0aW9uKHQpe3ZhciBlPWguZGVsZWdhdGU7cmV0dXJuKChudWxsPT1lP3ZvaWQgMDplLmNsZWFyVGltZW91dCl8fGNsZWFyVGltZW91dCkodCl9LGRlbGVnYXRlOnZvaWQgMH07ZnVuY3Rpb24gYih0KXtoLnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dGhyb3cgdH0pKX1mdW5jdGlvbiB5KCl7fWZ1bmN0aW9uIF8odCl7dCgpfXZhciBDPShmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5pc1N0b3BwZWQ9ITEsZT8obi5kZXN0aW5hdGlvbj1lLGYoZSkmJmUuYWRkKG4pKTpuLmRlc3RpbmF0aW9uPU8sbn1yZXR1cm4gZShuLHQpLG4uY3JlYXRlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbmV3IE0odCxlLG4pfSxuLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuaXNTdG9wcGVkfHx0aGlzLl9uZXh0KHQpfSxuLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXt0aGlzLmlzU3RvcHBlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2Vycm9yKHQpKX0sbi5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmlzU3RvcHBlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2NvbXBsZXRlKCkpfSxuLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMuY2xvc2VkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSx0aGlzLmRlc3RpbmF0aW9uPW51bGwpfSxuLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LG4ucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbih0KXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19LG4ucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RyeXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fSxufSkobSksTT0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLG4sbyl7dmFyIGksYT10LmNhbGwodGhpcyl8fHRoaXM7aWYobChlKSlpPWU7ZWxzZSBpZihlKXt2YXIgcjtuPWUuZXJyb3Isbz1lLmNvbXBsZXRlLHI9ZSxpPW51bGw9PShpPWUubmV4dCk/dm9pZCAwOmkuYmluZChyKSxuPW51bGw9PW4/dm9pZCAwOm4uYmluZChyKSxvPW51bGw9PW8/dm9pZCAwOm8uYmluZChyKX1yZXR1cm4gYS5kZXN0aW5hdGlvbj17bmV4dDppP3YoaSk6eSxlcnJvcjp2KG51bGwhPW4/bjp4KSxjb21wbGV0ZTpvP3Yobyk6eX0sYX1yZXR1cm4gZShuLHQpLG59KShDKTtmdW5jdGlvbiB2KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3RyeXt0LmFwcGx5KHZvaWQgMCxhKFtdLGkoZSkpKX1jYXRjaCh0KXtiKHQpfX19ZnVuY3Rpb24geCh0KXt0aHJvdyB0fXZhciBPPXtjbG9zZWQ6ITAsbmV4dDp5LGVycm9yOngsY29tcGxldGU6eX0sUD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8IkBAb2JzZXJ2YWJsZSI7ZnVuY3Rpb24gdyh0KXtyZXR1cm4gdH1mdW5jdGlvbiBrKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiBTKHQpfWZ1bmN0aW9uIFModCl7cmV0dXJuIDA9PT10Lmxlbmd0aD93OjE9PT10Lmxlbmd0aD90WzBdOmZ1bmN0aW9uIGUobil7cmV0dXJuIHQucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBlKHQpfSksbil9fXZhciBEPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dCYmKHRoaXMuX3N1YnNjcmliZT10KX1yZXR1cm4gdC5wcm90b3R5cGUubGlmdD1mdW5jdGlvbihlKXt2YXIgbj1uZXcgdDtyZXR1cm4gbi5zb3VyY2U9dGhpcyxuLm9wZXJhdG9yPWUsbn0sdC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgbz10aGlzLGk9KGZ1bmN0aW9uIGEodCl7cmV0dXJuIHQmJnQgaW5zdGFuY2VvZiBDfHwoZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCYmbCh0Lm5leHQpJiZsKHQuZXJyb3IpJiZsKHQuY29tcGxldGUpfSkodCkmJmYodCl9KSh0KT90Om5ldyBNKHQsZSxuKTtyZXR1cm4gXygoZnVuY3Rpb24oKXt2YXIgdD1vLm9wZXJhdG9yLGU9by5zb3VyY2U7aS5hZGQodD90LmNhbGwoaSxlKTplP28uX3N1YnNjcmliZShpKTpvLl90cnlTdWJzY3JpYmUoaSkpfSkpLGl9LHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUodCl9Y2F0Y2goZSl7dC5lcnJvcihlKX19LHQucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBuZXcoZT1FKGUpKSgoZnVuY3Rpb24oZSxvKXt2YXIgaTtpPW4uc3Vic2NyaWJlKChmdW5jdGlvbihlKXt0cnl7dChlKX1jYXRjaCh0KXtvKHQpLG51bGw9PWl8fGkudW5zdWJzY3JpYmUoKX19KSxvLGUpfSkpfSx0LnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBudWxsPT09KGU9dGhpcy5zb3VyY2UpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN1YnNjcmliZSh0KX0sdC5wcm90b3R5cGVbUF09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gUyh0KSh0aGlzKX0sdC5wcm90b3R5cGUudG9Qcm9taXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIG5ldyh0PUUodCkpKChmdW5jdGlvbih0LG4pe3ZhciBvO2Uuc3Vic2NyaWJlKChmdW5jdGlvbih0KXtyZXR1cm4gbz10fSksKGZ1bmN0aW9uKHQpe3JldHVybiBuKHQpfSksKGZ1bmN0aW9uKCl7cmV0dXJuIHQobyl9KSl9KSl9LHQuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdChlKX0sdH0pKCk7ZnVuY3Rpb24gRSh0KXt2YXIgZTtyZXR1cm4gbnVsbCE9PShlPW51bGwhPXQ/dDp1bmRlZmluZWQpJiZ2b2lkIDAhPT1lP2U6UHJvbWlzZX1mdW5jdGlvbiBSKHQpe3JldHVybiBmdW5jdGlvbihlKXtpZigoZnVuY3Rpb24gbih0KXtyZXR1cm4gbChudWxsPT10P3ZvaWQgMDp0LmxpZnQpfSkoZSkpcmV0dXJuIGUubGlmdCgoZnVuY3Rpb24oZSl7dHJ5e3JldHVybiB0KGUsdGhpcyl9Y2F0Y2godCl7dGhpcy5lcnJvcih0KX19KSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKX19dmFyIEEsVD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLG4sbyxpLGEpe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLm9uRmluYWxpemU9YSxyLl9uZXh0PW4/ZnVuY3Rpb24odCl7dHJ5e24odCl9Y2F0Y2godCl7ZS5lcnJvcih0KX19OnQucHJvdG90eXBlLl9uZXh0LHIuX2Vycm9yPWk/ZnVuY3Rpb24odCl7dHJ5e2kodCl9Y2F0Y2godCl7ZS5lcnJvcih0KX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19OnQucHJvdG90eXBlLl9lcnJvcixyLl9jb21wbGV0ZT1vP2Z1bmN0aW9uKCl7dHJ5e28oKX1jYXRjaCh0KXtlLmVycm9yKHQpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06dC5wcm90b3R5cGUuX2NvbXBsZXRlLHJ9cmV0dXJuIGUobix0KSxuLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciBlLG49dGhpcy5jbG9zZWQ7dC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwhbiYmKG51bGw9PT0oZT10aGlzLm9uRmluYWxpemUpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcykpfSxufSkoQyksTj17c2NoZWR1bGU6ZnVuY3Rpb24odCl7dmFyIGU9cmVxdWVzdEFuaW1hdGlvbkZyYW1lLG49Y2FuY2VsQW5pbWF0aW9uRnJhbWUsbz1OLmRlbGVnYXRlO28mJihlPW8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lLG49by5jYW5jZWxBbmltYXRpb25GcmFtZSk7dmFyIGk9ZSgoZnVuY3Rpb24oZSl7bj12b2lkIDAsdChlKX0pKTtyZXR1cm4gbmV3IG0oKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PW4/dm9pZCAwOm4oaSl9KSl9LHJlcXVlc3RBbmltYXRpb25GcmFtZTpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1OLmRlbGVnYXRlO3JldHVybigobnVsbD09bj92b2lkIDA6bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpfHxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpLmFwcGx5KHZvaWQgMCxhKFtdLGkodCkpKX0sY2FuY2VsQW5pbWF0aW9uRnJhbWU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49Ti5kZWxlZ2F0ZTtyZXR1cm4oKG51bGw9PW4/dm9pZCAwOm4uY2FuY2VsQW5pbWF0aW9uRnJhbWUpfHxjYW5jZWxBbmltYXRpb25GcmFtZSkuYXBwbHkodm9pZCAwLGEoW10saSh0KSkpfSxkZWxlZ2F0ZTp2b2lkIDB9LHo9YygoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIGUoKXt0KHRoaXMpLHRoaXMubmFtZT0iT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLHRoaXMubWVzc2FnZT0ib2JqZWN0IHVuc3Vic2NyaWJlZCJ9fSkpLEk9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGUuY2xvc2VkPSExLGUub2JzZXJ2ZXJzPVtdLGUuaXNTdG9wcGVkPSExLGUuaGFzRXJyb3I9ITEsZS50aHJvd25FcnJvcj1udWxsLGV9cmV0dXJuIGUobix0KSxuLnByb3RvdHlwZS5saWZ0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBIKHRoaXMsdGhpcyk7cmV0dXJuIGUub3BlcmF0b3I9dCxlfSxuLnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZD1mdW5jdGlvbigpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyB6fSxuLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7XygoZnVuY3Rpb24oKXt2YXIgbixpO2lmKGUuX3Rocm93SWZDbG9zZWQoKSwhZS5pc1N0b3BwZWQpe3ZhciBhPWUub2JzZXJ2ZXJzLnNsaWNlKCk7dHJ5e2Zvcih2YXIgcj1vKGEpLHM9ci5uZXh0KCk7IXMuZG9uZTtzPXIubmV4dCgpKXMudmFsdWUubmV4dCh0KX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYoaT1yLnJldHVybikmJmkuY2FsbChyKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19fX0pKX0sbi5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztfKChmdW5jdGlvbigpe2lmKGUuX3Rocm93SWZDbG9zZWQoKSwhZS5pc1N0b3BwZWQpe2UuaGFzRXJyb3I9ZS5pc1N0b3BwZWQ9ITAsZS50aHJvd25FcnJvcj10O2Zvcih2YXIgbj1lLm9ic2VydmVycztuLmxlbmd0aDspbi5zaGlmdCgpLmVycm9yKHQpfX0pKX0sbi5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO18oKGZ1bmN0aW9uKCl7aWYodC5fdGhyb3dJZkNsb3NlZCgpLCF0LmlzU3RvcHBlZCl7dC5pc1N0b3BwZWQ9ITA7Zm9yKHZhciBlPXQub2JzZXJ2ZXJzO2UubGVuZ3RoOyllLnNoaWZ0KCkuY29tcGxldGUoKX19KSl9LG4ucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dGhpcy5pc1N0b3BwZWQ9dGhpcy5jbG9zZWQ9ITAsdGhpcy5vYnNlcnZlcnM9bnVsbH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLCJvYnNlcnZlZCIse2dldDpmdW5jdGlvbigpe3ZhciB0O3JldHVybihudWxsPT09KHQ9dGhpcy5vYnNlcnZlcnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmxlbmd0aCk+MH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxuLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsZSl9LG4ucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHQpLHRoaXMuX2lubmVyU3Vic2NyaWJlKHQpfSxuLnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWUub2JzZXJ2ZXJzO3JldHVybiBlLmhhc0Vycm9yfHxlLmlzU3RvcHBlZD91OihuLnB1c2godCksbmV3IG0oKGZ1bmN0aW9uKCl7cmV0dXJuIHAobix0KX0pKSl9LG4ucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1lLmlzU3RvcHBlZDtlLmhhc0Vycm9yP3QuZXJyb3IoZS50aHJvd25FcnJvcik6biYmdC5jb21wbGV0ZSgpfSxuLnByb3RvdHlwZS5hc09ic2VydmFibGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRDtyZXR1cm4gdC5zb3VyY2U9dGhpcyx0fSxuLmNyZWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgSCh0LGUpfSxufSkoRCksSD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLG4pe3ZhciBvPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gby5kZXN0aW5hdGlvbj1lLG8uc291cmNlPW4sb31yZXR1cm4gZShuLHQpLG4ucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24odCl7dmFyIGUsbjtudWxsPT09KG49bnVsbD09PShlPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm5leHQpfHx2b2lkIDA9PT1ufHxuLmNhbGwoZSx0KX0sbi5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7dmFyIGUsbjtudWxsPT09KG49bnVsbD09PShlPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmVycm9yKXx8dm9pZCAwPT09bnx8bi5jYWxsKGUsdCl9LG4ucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIHQsZTtudWxsPT09KGU9bnVsbD09PSh0PXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNvbXBsZXRlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHQpfSxuLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3ZhciBlLG47cmV0dXJuIG51bGwhPT0obj1udWxsPT09KGU9dGhpcy5zb3VyY2UpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN1YnNjcmliZSh0KSkmJnZvaWQgMCE9PW4/bjp1fSxufSkoSSksRj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX3ZhbHVlPWUsbn1yZXR1cm4gZShuLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSwidmFsdWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLG4ucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7dmFyIG49dC5wcm90b3R5cGUuX3N1YnNjcmliZS5jYWxsKHRoaXMsZSk7cmV0dXJuIW4uY2xvc2VkJiZlLm5leHQodGhpcy5fdmFsdWUpLG59LG4ucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuX3ZhbHVlO2lmKHQuaGFzRXJyb3IpdGhyb3cgdC50aHJvd25FcnJvcjtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLGV9LG4ucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsdGhpcy5fdmFsdWU9ZSl9LG59KShJKSxMPXtub3c6ZnVuY3Rpb24oKXtyZXR1cm4oTC5kZWxlZ2F0ZXx8RGF0ZSkubm93KCl9LGRlbGVnYXRlOnZvaWQgMH0sQj0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLG4sbyl7dm9pZCAwPT09ZSYmKGU9MS8wKSx2b2lkIDA9PT1uJiYobj0xLzApLHZvaWQgMD09PW8mJihvPUwpO3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fYnVmZmVyU2l6ZT1lLGkuX3dpbmRvd1RpbWU9bixpLl90aW1lc3RhbXBQcm92aWRlcj1vLGkuX2J1ZmZlcj1bXSxpLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITAsaS5faW5maW5pdGVUaW1lV2luZG93PW49PT0xLzAsaS5fYnVmZmVyU2l6ZT1NYXRoLm1heCgxLGUpLGkuX3dpbmRvd1RpbWU9TWF0aC5tYXgoMSxuKSxpfXJldHVybiBlKG4sdCksbi5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihlKXt2YXIgbj10aGlzLG89bi5fYnVmZmVyLGk9bi5faW5maW5pdGVUaW1lV2luZG93LGE9bi5fdGltZXN0YW1wUHJvdmlkZXIscj1uLl93aW5kb3dUaW1lO24uaXNTdG9wcGVkfHwoby5wdXNoKGUpLCFpJiZvLnB1c2goYS5ub3coKStyKSksdGhpcy5fdHJpbUJ1ZmZlcigpLHQucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLGUpfSxuLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3RoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl90cmltQnVmZmVyKCk7Zm9yKHZhciBlPXRoaXMuX2lubmVyU3Vic2NyaWJlKHQpLG49dGhpcy5faW5maW5pdGVUaW1lV2luZG93LG89dGhpcy5fYnVmZmVyLnNsaWNlKCksaT0wO2k8by5sZW5ndGgmJiF0LmNsb3NlZDtpKz1uPzE6Mil0Lm5leHQob1tpXSk7cmV0dXJuIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXModCksZX0sbi5wcm90b3R5cGUuX3RyaW1CdWZmZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5fYnVmZmVyU2l6ZSxuPXQuX3RpbWVzdGFtcFByb3ZpZGVyLG89dC5fYnVmZmVyLGk9dC5faW5maW5pdGVUaW1lV2luZG93LGE9KGk/MToyKSplO2lmKGU8MS8wJiZhPG8ubGVuZ3RoJiZvLnNwbGljZSgwLG8ubGVuZ3RoLWEpLCFpKXtmb3IodmFyIHI9bi5ub3coKSxzPTAsbD0xO2w8by5sZW5ndGgmJm9bbF08PXI7bCs9MilzPWw7cyYmby5zcGxpY2UoMCxzKzEpfX0sbn0pKEkpLFY9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMpfHx0aGlzfXJldHVybiBlKG4sdCksbi5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc30sbn0pKG0pLGo9e3NldEludGVydmFsOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciBuPWouZGVsZWdhdGU7cmV0dXJuKChudWxsPT1uP3ZvaWQgMDpuLnNldEludGVydmFsKXx8c2V0SW50ZXJ2YWwpLmFwcGx5KHZvaWQgMCxhKFtdLGkodCkpKX0sY2xlYXJJbnRlcnZhbDpmdW5jdGlvbih0KXt2YXIgZT1qLmRlbGVnYXRlO3JldHVybigobnVsbD09ZT92b2lkIDA6ZS5jbGVhckludGVydmFsKXx8Y2xlYXJJbnRlcnZhbCkodCl9LGRlbGVnYXRlOnZvaWQgMH0sVT0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLG4pe3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8uc2NoZWR1bGVyPWUsby53b3JrPW4sby5wZW5kaW5nPSExLG99cmV0dXJuIGUobix0KSxuLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PWUmJihlPTApLHRoaXMuY2xvc2VkKXJldHVybiB0aGlzO3RoaXMuc3RhdGU9dDt2YXIgbj10aGlzLmlkLG89dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPW4mJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQobyxuLGUpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1lLHRoaXMuaWQ9dGhpcy5pZHx8dGhpcy5yZXF1ZXN0QXN5bmNJZChvLHRoaXMuaWQsZSksdGhpc30sbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0wKSxqLnNldEludGVydmFsKHQuZmx1c2guYmluZCh0LHRoaXMpLG4pfSxuLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZD1mdW5jdGlvbih0LGUsbil7aWYodm9pZCAwPT09biYmKG49MCksbnVsbCE9biYmdGhpcy5kZWxheT09PW4mJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBlO2ouY2xlYXJJbnRlcnZhbChlKX0sbi5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbih0LGUpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7dmFyIG49dGhpcy5fZXhlY3V0ZSh0LGUpO2lmKG4pcmV0dXJuIG47ITE9PT10aGlzLnBlbmRpbmcmJm51bGwhPXRoaXMuaWQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsdGhpcy5pZCxudWxsKSl9LG4ucHJvdG90eXBlLl9leGVjdXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG4sbz0hMTt0cnl7dGhpcy53b3JrKHQpfWNhdGNoKHQpe289ITAsbj0hIXQmJnR8fG5ldyBFcnJvcih0KX1pZihvKXJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksbn0sbi5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXtpZighdGhpcy5jbG9zZWQpe3ZhciBlPXRoaXMuaWQsbj10aGlzLnNjaGVkdWxlcixvPW4uYWN0aW9uczt0aGlzLndvcms9dGhpcy5zdGF0ZT10aGlzLnNjaGVkdWxlcj1udWxsLHRoaXMucGVuZGluZz0hMSxwKG8sdGhpcyksbnVsbCE9ZSYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChuLGUsbnVsbCkpLHRoaXMuZGVsYXk9bnVsbCx0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpfX0sbn0pKFYpLEc9MSxXPXt9O2Z1bmN0aW9uIFkodCl7cmV0dXJuIHQgaW4gVyYmKGRlbGV0ZSBXW3RdLCEwKX12YXIgcT1mdW5jdGlvbih0KXt2YXIgZT1HKys7cmV0dXJuIFdbZV09ITAsQXx8KEE9UHJvbWlzZS5yZXNvbHZlKCkpLEEudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gWShlKSYmdCgpfSkpLGV9LFo9ZnVuY3Rpb24odCl7WSh0KX0sWD17c2V0SW1tZWRpYXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciBuPVguZGVsZWdhdGU7cmV0dXJuKChudWxsPT1uP3ZvaWQgMDpuLnNldEltbWVkaWF0ZSl8fHEpLmFwcGx5KHZvaWQgMCxhKFtdLGkodCkpKX0sY2xlYXJJbW1lZGlhdGU6ZnVuY3Rpb24odCl7dmFyIGU9WC5kZWxlZ2F0ZTtyZXR1cm4oKG51bGw9PWU/dm9pZCAwOmUuY2xlYXJJbW1lZGlhdGUpfHxaKSh0KX0sZGVsZWdhdGU6dm9pZCAwfSxLPShmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUsbil7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby5zY2hlZHVsZXI9ZSxvLndvcms9bixvfXJldHVybiBlKG4sdCksbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQ9ZnVuY3Rpb24oZSxuLG8pe3JldHVybiB2b2lkIDA9PT1vJiYobz0wKSxudWxsIT09byYmbz4wP3QucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcyxlLG4sbyk6KGUuYWN0aW9ucy5wdXNoKHRoaXMpLGUuX3NjaGVkdWxlZHx8KGUuX3NjaGVkdWxlZD1YLnNldEltbWVkaWF0ZShlLmZsdXNoLmJpbmQoZSx2b2lkIDApKSkpfSxuLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZD1mdW5jdGlvbihlLG4sbyl7aWYodm9pZCAwPT09byYmKG89MCksbnVsbCE9byYmbz4wfHxudWxsPT1vJiZ0aGlzLmRlbGF5PjApcmV0dXJuIHQucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkLmNhbGwodGhpcyxlLG4sbyk7MD09PWUuYWN0aW9ucy5sZW5ndGgmJihYLmNsZWFySW1tZWRpYXRlKG4pLGUuX3NjaGVkdWxlZD12b2lkIDApfSxufSkoVSksSj0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsbil7dm9pZCAwPT09biYmKG49dC5ub3cpLHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcj1lLHRoaXMubm93PW59cmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLHQpLnNjaGVkdWxlKG4sZSl9LHQubm93PUwubm93LHR9KSgpLFE9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxuKXt2b2lkIDA9PT1uJiYobj1KLm5vdyk7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby5hY3Rpb25zPVtdLG8uX2FjdGl2ZT0hMSxvLl9zY2hlZHVsZWQ9dm9pZCAwLG99cmV0dXJuIGUobix0KSxuLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmFjdGlvbnM7aWYodGhpcy5fYWN0aXZlKWUucHVzaCh0KTtlbHNle3ZhciBuO3RoaXMuX2FjdGl2ZT0hMDtkb3tpZihuPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKHQ9ZS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsbil7Zm9yKDt0PWUuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IG59fX0sbn0pKEopLCQ9bmV3KChmdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gZShuLHQpLG4ucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuX2FjdGl2ZT0hMCx0aGlzLl9zY2hlZHVsZWQ9dm9pZCAwO3ZhciBlLG49dGhpcy5hY3Rpb25zLG89LTE7dD10fHxuLnNoaWZ0KCk7dmFyIGk9bi5sZW5ndGg7ZG97aWYoZT10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSgrK288aSYmKHQ9bi5zaGlmdCgpKSk7aWYodGhpcy5fYWN0aXZlPSExLGUpe2Zvcig7KytvPGkmJih0PW4uc2hpZnQoKSk7KXQudW5zdWJzY3JpYmUoKTt0aHJvdyBlfX0sbn0pKFEpKShLKSx0dD1uZXcgUShVKSxldD10dCxudD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLG4pe3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8uc2NoZWR1bGVyPWUsby53b3JrPW4sb31yZXR1cm4gZShuLHQpLG4ucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTApLG4+MD90LnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsZSxuKToodGhpcy5kZWxheT1uLHRoaXMuc3RhdGU9ZSx0aGlzLnNjaGVkdWxlci5mbHVzaCh0aGlzKSx0aGlzKX0sbi5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihlLG4pe3JldHVybiBuPjB8fHRoaXMuY2xvc2VkP3QucHJvdG90eXBlLmV4ZWN1dGUuY2FsbCh0aGlzLGUsbik6dGhpcy5fZXhlY3V0ZShlLG4pfSxuLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZD1mdW5jdGlvbihlLG4sbyl7cmV0dXJuIHZvaWQgMD09PW8mJihvPTApLG51bGwhPW8mJm8+MHx8bnVsbD09byYmdGhpcy5kZWxheT4wP3QucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcyxlLG4sbyk6ZS5mbHVzaCh0aGlzKX0sbn0pKFUpLG90PW5ldygoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbigpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGUobix0KSxufSkoUSkpKG50KSxpdD0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLG4pe3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8uc2NoZWR1bGVyPWUsby53b3JrPW4sb31yZXR1cm4gZShuLHQpLG4ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkPWZ1bmN0aW9uKGUsbixvKXtyZXR1cm4gdm9pZCAwPT09byYmKG89MCksbnVsbCE9PW8mJm8+MD90LnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsZSxuLG8pOihlLmFjdGlvbnMucHVzaCh0aGlzKSxlLl9zY2hlZHVsZWR8fChlLl9zY2hlZHVsZWQ9Ti5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZmx1c2godm9pZCAwKX0pKSkpfSxuLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZD1mdW5jdGlvbihlLG4sbyl7aWYodm9pZCAwPT09byYmKG89MCksbnVsbCE9byYmbz4wfHxudWxsPT1vJiZ0aGlzLmRlbGF5PjApcmV0dXJuIHQucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkLmNhbGwodGhpcyxlLG4sbyk7MD09PWUuYWN0aW9ucy5sZW5ndGgmJihOLmNhbmNlbEFuaW1hdGlvbkZyYW1lKG4pLGUuX3NjaGVkdWxlZD12b2lkIDApfSxufSkoVSksYXQ9bmV3KChmdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gZShuLHQpLG4ucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuX2FjdGl2ZT0hMCx0aGlzLl9zY2hlZHVsZWQ9dm9pZCAwO3ZhciBlLG49dGhpcy5hY3Rpb25zLG89LTE7dD10fHxuLnNoaWZ0KCk7dmFyIGk9bi5sZW5ndGg7ZG97aWYoZT10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSgrK288aSYmKHQ9bi5zaGlmdCgpKSk7aWYodGhpcy5fYWN0aXZlPSExLGUpe2Zvcig7KytvPGkmJih0PW4uc2hpZnQoKSk7KXQudW5zdWJzY3JpYmUoKTt0aHJvdyBlfX0sbn0pKFEpKShpdCkscnQ9bmV3IEQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbXBsZXRlKCl9KSk7ZnVuY3Rpb24gc3QodCxlKXtyZXR1cm4gbmV3IEQoKGZ1bmN0aW9uKG4pe3ZhciBvPTA7cmV0dXJuIGUuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7bz09PXQubGVuZ3RoP24uY29tcGxldGUoKToobi5uZXh0KHRbbysrXSksbi5jbG9zZWR8fHRoaXMuc2NoZWR1bGUoKSl9KSl9KSl9dmFyIGx0PWZ1bmN0aW9uKHQpe3JldHVybiB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoJiYiZnVuY3Rpb24iIT10eXBlb2YgdH07ZnVuY3Rpb24gY3QodCl7cmV0dXJuIGwobnVsbD09dD92b2lkIDA6dC50aGVuKX12YXIgZHQscHQ9KGZ1bmN0aW9uIG10KCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciJ9KSgpO2Z1bmN0aW9uIHV0KHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJJdGVyYWJsZSBjYW5ub3QgYmUgbnVsbCIpO3JldHVybiBuZXcgRCgoZnVuY3Rpb24obil7dmFyIG89bmV3IG07cmV0dXJuIG8uYWRkKGUuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7dmFyIGk9dFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtvLmFkZChlLnNjaGVkdWxlKChmdW5jdGlvbigpe3ZhciB0PXRoaXM7aS5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7ZS5kb25lP24uY29tcGxldGUoKToobi5uZXh0KGUudmFsdWUpLHQuc2NoZWR1bGUoKSl9KSl9KSkpfSkpKSxvfSkpfWZ1bmN0aW9uIGZ0KHQpe3JldHVybiBsKHRbUF0pfWZ1bmN0aW9uIGd0KHQpe3JldHVybiBsKG51bGw9PXQ/dm9pZCAwOnRbcHRdKX1mdW5jdGlvbiBodCh0KXtyZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3ImJmwobnVsbD09dD92b2lkIDA6dFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pfWZ1bmN0aW9uIGJ0KHQpe3JldHVybiBuZXcgVHlwZUVycm9yKCJZb3UgcHJvdmlkZWQgIisobnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdD8iYW4gaW52YWxpZCBvYmplY3QiOiInIit0KyInIikrIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLiIpfWZ1bmN0aW9uIHl0KHQpe3JldHVybiBzKHRoaXMsYXJndW1lbnRzLChmdW5jdGlvbiBlKCl7dmFyIG8saSxhO3JldHVybiBuKHRoaXMsKGZ1bmN0aW9uKGUpe3N3aXRjaChlLmxhYmVsKXtjYXNlIDA6bz10LmdldFJlYWRlcigpLGUubGFiZWw9MTtjYXNlIDE6ZS50cnlzLnB1c2goWzEsLDksMTBdKSxlLmxhYmVsPTI7Y2FzZSAyOnJldHVybls0LHIoby5yZWFkKCkpXTtjYXNlIDM6cmV0dXJuIGk9ZS5zZW50KCksYT1pLnZhbHVlLGkuZG9uZT9bNCxyKHZvaWQgMCldOlszLDVdO2Nhc2UgNDpyZXR1cm5bMixlLnNlbnQoKV07Y2FzZSA1OnJldHVybls0LHIoYSldO2Nhc2UgNjpyZXR1cm5bNCxlLnNlbnQoKV07Y2FzZSA3OnJldHVybiBlLnNlbnQoKSxbMywyXTtjYXNlIDg6cmV0dXJuWzMsMTBdO2Nhc2UgOTpyZXR1cm4gby5yZWxlYXNlTG9jaygpLFs3XTtjYXNlIDEwOnJldHVyblsyXX19KSl9KSl9ZnVuY3Rpb24gX3QodCl7cmV0dXJuIGwobnVsbD09dD92b2lkIDA6dC5nZXRSZWFkZXIpfWZ1bmN0aW9uIEN0KHQsZSl7cmV0dXJuIGU/KGZ1bmN0aW9uIG4odCxlKXtpZihudWxsIT10KXtpZihmdCh0KSlyZXR1cm4oZnVuY3Rpb24gbih0LGUpe3JldHVybiBuZXcgRCgoZnVuY3Rpb24obil7dmFyIG89bmV3IG07cmV0dXJuIG8uYWRkKGUuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7dmFyIGk9dFtQXSgpO28uYWRkKGkuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKHQpe28uYWRkKGUuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7cmV0dXJuIG4ubmV4dCh0KX0pKSl9LGVycm9yOmZ1bmN0aW9uKHQpe28uYWRkKGUuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZXJyb3IodCl9KSkpfSxjb21wbGV0ZTpmdW5jdGlvbigpe28uYWRkKGUuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7cmV0dXJuIG4uY29tcGxldGUoKX0pKSl9fSkpfSkpKSxvfSkpfSkodCxlKTtpZihsdCh0KSlyZXR1cm4gc3QodCxlKTtpZihjdCh0KSlyZXR1cm4oZnVuY3Rpb24gbyh0LGUpe3JldHVybiBuZXcgRCgoZnVuY3Rpb24obil7cmV0dXJuIGUuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHQudGhlbigoZnVuY3Rpb24odCl7bi5hZGQoZS5zY2hlZHVsZSgoZnVuY3Rpb24oKXtuLm5leHQodCksbi5hZGQoZS5zY2hlZHVsZSgoZnVuY3Rpb24oKXtyZXR1cm4gbi5jb21wbGV0ZSgpfSkpKX0pKSl9KSwoZnVuY3Rpb24odCl7bi5hZGQoZS5zY2hlZHVsZSgoZnVuY3Rpb24oKXtyZXR1cm4gbi5lcnJvcih0KX0pKSl9KSl9KSl9KSl9KSh0LGUpO2lmKGh0KHQpKXJldHVybiB1dCh0LGUpO2lmKGd0KHQpKXJldHVybihmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIG5ldyBEKChmdW5jdGlvbihuKXt2YXIgbztyZXR1cm4gbi5hZGQoZS5zY2hlZHVsZSgoZnVuY3Rpb24oKXtvPXRbcHRdKCksKGZ1bmN0aW9uIGkodCxlLG4sbyl7dm9pZCAwPT09byYmKG89MCk7dmFyIGk9ZS5zY2hlZHVsZSgoZnVuY3Rpb24oKXt0cnl7bi5jYWxsKHRoaXMpfWNhdGNoKGUpe3QuZXJyb3IoZSl9fSksbyk7dC5hZGQoaSl9KShuLGUsKGZ1bmN0aW9uKCl7dmFyIHQ9by5uZXh0KCksZT10LnZhbHVlO3QuZG9uZT9uLmNvbXBsZXRlKCk6KG4ubmV4dChlKSx0aGlzLnNjaGVkdWxlKCkpfSkpfSkpKSxmdW5jdGlvbigpe3JldHVybiBsKG51bGw9PW8/dm9pZCAwOm8ucmV0dXJuKSYmby5yZXR1cm4oKX19KSl9KSh0LGUpO2lmKF90KHQpKXJldHVybihmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHV0KHl0KHQpLGUpfSkodCxlKX10aHJvdyBidCh0KX0pKHQsZSk6TXQodCl9ZnVuY3Rpb24gTXQodCl7aWYodCBpbnN0YW5jZW9mIEQpcmV0dXJuIHQ7aWYobnVsbCE9dCl7aWYoZnQodCkpcmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBEKChmdW5jdGlvbihlKXt2YXIgbj10W1BdKCk7aWYobChuLnN1YnNjcmliZSkpcmV0dXJuIG4uc3Vic2NyaWJlKGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIil9KSl9KSh0KTtpZihsdCh0KSlyZXR1cm4gdnQodCk7aWYoY3QodCkpcmV0dXJuKGZ1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBEKChmdW5jdGlvbihlKXt0LnRoZW4oKGZ1bmN0aW9uKHQpe2UuY2xvc2VkfHwoZS5uZXh0KHQpLGUuY29tcGxldGUoKSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGUuZXJyb3IodCl9KSkudGhlbihudWxsLGIpfSkpfSkodCk7aWYoaHQodCkpcmV0dXJuIHh0KHQpO2lmKGd0KHQpKXJldHVybihmdW5jdGlvbiBpKHQpe3JldHVybiBuZXcgRCgoZnVuY3Rpb24oZSl7dmFyIG4saTt0cnl7Zm9yKHZhciBhPW8odCkscj1hLm5leHQoKTshci5kb25lO3I9YS5uZXh0KCkpaWYoZS5uZXh0KHIudmFsdWUpLGUuY2xvc2VkKXJldHVybn1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYoaT1hLnJldHVybikmJmkuY2FsbChhKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19ZS5jb21wbGV0ZSgpfSkpfSkodCk7aWYoX3QodCkpcmV0dXJuKGZ1bmN0aW9uIGEodCl7cmV0dXJuIHh0KHl0KHQpKX0pKHQpfXRocm93IGJ0KHQpfWZ1bmN0aW9uIHZ0KHQpe3JldHVybiBuZXcgRCgoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aCYmIWUuY2xvc2VkO24rKyllLm5leHQodFtuXSk7ZS5jb21wbGV0ZSgpfSkpfWZ1bmN0aW9uIHh0KHQpe3JldHVybiBuZXcgRCgoZnVuY3Rpb24oZSl7KGZ1bmN0aW9uIGkodCxlKXt2YXIgaSxhLHIscztyZXR1cm4oZnVuY3Rpb24gbCh0LGUsbixvKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxhKXtmdW5jdGlvbiByKHQpe3RyeXtsKG8ubmV4dCh0KSl9Y2F0Y2godCl7YSh0KX19ZnVuY3Rpb24gcyh0KXt0cnl7bChvLnRocm93KHQpKX1jYXRjaCh0KXthKHQpfX1mdW5jdGlvbiBsKHQpe3QuZG9uZT9pKHQudmFsdWUpOihmdW5jdGlvbiBlKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpfSkodC52YWx1ZSkudGhlbihyLHMpfWwoKG89by5hcHBseSh0LGV8fFtdKSkubmV4dCgpKX0pKX0pKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgbDtyZXR1cm4gbih0aGlzLChmdW5jdGlvbihuKXtzd2l0Y2gobi5sYWJlbCl7Y2FzZSAwOm4udHJ5cy5wdXNoKFswLDUsNiwxMV0pLGk9KGZ1bmN0aW9uIGModCl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBlLG49dFtTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIG4/bi5jYWxsKHQpOih0PW8odCksZT17fSxpKCJuZXh0IiksaSgidGhyb3ciKSxpKCJyZXR1cm4iKSxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlKTtmdW5jdGlvbiBpKG4pe2Vbbl09dFtuXSYmZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihvLGkpeyEoZnVuY3Rpb24gYSh0LGUsbixvKXtQcm9taXNlLnJlc29sdmUobykudGhlbigoZnVuY3Rpb24oZSl7dCh7dmFsdWU6ZSxkb25lOm59KX0pLGUpfSkobyxpLChlPXRbbl0oZSkpLmRvbmUsZS52YWx1ZSl9KSl9fX0pKHQpLG4ubGFiZWw9MTtjYXNlIDE6cmV0dXJuWzQsaS5uZXh0KCldO2Nhc2UgMjppZigoYT1uLnNlbnQoKSkuZG9uZSlyZXR1cm5bMyw0XTtpZihlLm5leHQoYS52YWx1ZSksZS5jbG9zZWQpcmV0dXJuWzJdO24ubGFiZWw9MztjYXNlIDM6cmV0dXJuWzMsMV07Y2FzZSA0OnJldHVyblszLDExXTtjYXNlIDU6cmV0dXJuIGw9bi5zZW50KCkscj17ZXJyb3I6bH0sWzMsMTFdO2Nhc2UgNjpyZXR1cm4gbi50cnlzLnB1c2goWzYsLDksMTBdKSxhJiYhYS5kb25lJiYocz1pLnJldHVybik/WzQscy5jYWxsKGkpXTpbMyw4XTtjYXNlIDc6bi5zZW50KCksbi5sYWJlbD04O2Nhc2UgODpyZXR1cm5bMywxMF07Y2FzZSA5OmlmKHIpdGhyb3cgci5lcnJvcjtyZXR1cm5bN107Y2FzZSAxMDpyZXR1cm5bN107Y2FzZSAxMTpyZXR1cm4gZS5jb21wbGV0ZSgpLFsyXX19KSl9KSl9KSh0LGUpLmNhdGNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5lcnJvcih0KX0pKX0pKX1mdW5jdGlvbiBPdCh0LGUpe3JldHVybiBlP3N0KHQsZSk6dnQodCl9ZnVuY3Rpb24gUHQodCl7cmV0dXJuIHQmJmwodC5zY2hlZHVsZSl9ZnVuY3Rpb24gd3QodCl7cmV0dXJuIHRbdC5sZW5ndGgtMV19ZnVuY3Rpb24ga3QodCl7cmV0dXJuIGwod3QodCkpP3QucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIFN0KHQpe3JldHVybiBQdCh3dCh0KSk/dC5wb3AoKTp2b2lkIDB9ZnVuY3Rpb24gRHQodCxlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHd0KHQpP3QucG9wKCk6ZX1mdW5jdGlvbiBFdCgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1TdCh0KTtyZXR1cm4gbj9zdCh0LG4pOk90KHQpfWZ1bmN0aW9uIFJ0KHQsZSl7dmFyIG49bCh0KT90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9LG89ZnVuY3Rpb24odCl7cmV0dXJuIHQuZXJyb3IobigpKX07cmV0dXJuIG5ldyBEKGU/ZnVuY3Rpb24odCl7cmV0dXJuIGUuc2NoZWR1bGUobywwLHQpfTpvKX0hKGZ1bmN0aW9uKHQpe3QuTkVYVD0iTiIsdC5FUlJPUj0iRSIsdC5DT01QTEVURT0iQyJ9KShkdHx8KGR0PXt9KSk7dmFyIEF0PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMua2luZD10LHRoaXMudmFsdWU9ZSx0aGlzLmVycm9yPW4sdGhpcy5oYXNWYWx1ZT0iTiI9PT10fXJldHVybiB0LnByb3RvdHlwZS5vYnNlcnZlPWZ1bmN0aW9uKHQpe3JldHVybiBUdCh0aGlzLHQpfSx0LnByb3RvdHlwZS5kbz1mdW5jdGlvbih0LGUsbil7dmFyIG89dGhpcyxpPW8ua2luZCxhPW8uZXJyb3I7cmV0dXJuIk4iPT09aT9udWxsPT10P3ZvaWQgMDp0KG8udmFsdWUpOiJFIj09PWk/bnVsbD09ZT92b2lkIDA6ZShhKTpudWxsPT1uP3ZvaWQgMDpuKCl9LHQucHJvdG90eXBlLmFjY2VwdD1mdW5jdGlvbih0LGUsbil7dmFyIG87cmV0dXJuIGwobnVsbD09PShvPXQpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLm5leHQpP3RoaXMub2JzZXJ2ZSh0KTp0aGlzLmRvKHQsZSxuKX0sdC5wcm90b3R5cGUudG9PYnNlcnZhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQua2luZCxuPXQuZXJyb3Isbz0iTiI9PT1lP0V0KHQudmFsdWUpOiJFIj09PWU/UnQoKGZ1bmN0aW9uKCl7cmV0dXJuIG59KSk6IkMiPT09ZT9ydDowO2lmKCFvKXRocm93IG5ldyBUeXBlRXJyb3IoIlVuZXhwZWN0ZWQgbm90aWZpY2F0aW9uIGtpbmQgIitlKTtyZXR1cm4gb30sdC5jcmVhdGVOZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdCgiTiIsZSl9LHQuY3JlYXRlRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KCJFIix2b2lkIDAsZSl9LHQuY3JlYXRlQ29tcGxldGU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5jb21wbGV0ZU5vdGlmaWNhdGlvbn0sdC5jb21wbGV0ZU5vdGlmaWNhdGlvbj1uZXcgdCgiQyIpLHR9KSgpO2Z1bmN0aW9uIFR0KHQsZSl7dmFyIG4sbyxpLGE9dC5raW5kLHI9dC52YWx1ZSxzPXQuZXJyb3I7aWYoInN0cmluZyIhPXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm90aWZpY2F0aW9uLCBtaXNzaW5nICJraW5kIicpOyJOIj09PWE/bnVsbD09PShuPWUubmV4dCl8fHZvaWQgMD09PW58fG4uY2FsbChlLHIpOiJFIj09PWE/bnVsbD09PShvPWUuZXJyb3IpfHx2b2lkIDA9PT1vfHxvLmNhbGwoZSxzKTpudWxsPT09KGk9ZS5jb21wbGV0ZSl8fHZvaWQgMD09PWl8fGkuY2FsbChlKX1mdW5jdGlvbiBOdCh0KXtyZXR1cm4hIXQmJih0IGluc3RhbmNlb2YgRHx8bCh0LmxpZnQpJiZsKHQuc3Vic2NyaWJlKSl9dmFyIHp0PWMoKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiBlKCl7dCh0aGlzKSx0aGlzLm5hbWU9IkVtcHR5RXJyb3IiLHRoaXMubWVzc2FnZT0ibm8gZWxlbWVudHMgaW4gc2VxdWVuY2UifX0pKTtmdW5jdGlvbiBJdCh0LGUpe3JldHVybiBSKChmdW5jdGlvbihuLG8pe3ZhciBpPTA7bi5zdWJzY3JpYmUobmV3IFQobywoZnVuY3Rpb24obil7by5uZXh0KHQuY2FsbChlLG4saSsrKSl9KSkpfSkpfXZhciBIdD1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIEZ0KHQpe3JldHVybiBJdCgoZnVuY3Rpb24oZSl7cmV0dXJuKGZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gSHQoZSk/dC5hcHBseSh2b2lkIDAsYShbXSxpKGUpKSk6dChlKX0pKHQsZSl9KSl9dmFyIEx0PUFycmF5LmlzQXJyYXksQnQ9T2JqZWN0LmdldFByb3RvdHlwZU9mLFZ0PU9iamVjdC5wcm90b3R5cGUsanQ9T2JqZWN0LmtleXM7ZnVuY3Rpb24gVXQodCl7aWYoMT09PXQubGVuZ3RoKXt2YXIgZT10WzBdO2lmKEx0KGUpKXJldHVybnthcmdzOmUsa2V5czpudWxsfTtpZigoZnVuY3Rpb24gbih0KXtyZXR1cm4gdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZCdCh0KT09PVZ0fSkoZSkpe3ZhciBvPWp0KGUpO3JldHVybnthcmdzOm8ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKSxrZXlzOm99fX1yZXR1cm57YXJnczp0LGtleXM6bnVsbH19ZnVuY3Rpb24gR3QodCxlKXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsbixvKXtyZXR1cm4gdFtuXT1lW29dLHR9KSx7fSl9ZnVuY3Rpb24gV3QoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49U3QodCksbz1rdCh0KSxpPVV0KHQpLGE9aS5hcmdzLHI9aS5rZXlzO2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gQ3QoW10sbik7dmFyIHM9bmV3IEQoWXQoYSxuLHI/ZnVuY3Rpb24odCl7cmV0dXJuIEd0KHIsdCl9OncpKTtyZXR1cm4gbz9zLnBpcGUoRnQobykpOnN9ZnVuY3Rpb24gWXQodCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj13KSxmdW5jdGlvbihvKXtxdChlLChmdW5jdGlvbigpe2Zvcih2YXIgaT10Lmxlbmd0aCxhPW5ldyBBcnJheShpKSxyPWkscz1pLGw9ZnVuY3Rpb24oaSl7cXQoZSwoZnVuY3Rpb24oKXt2YXIgbD1DdCh0W2ldLGUpLGM9ITE7bC5zdWJzY3JpYmUobmV3IFQobywoZnVuY3Rpb24odCl7YVtpXT10LGN8fChjPSEwLHMtLSksc3x8by5uZXh0KG4oYS5zbGljZSgpKSl9KSwoZnVuY3Rpb24oKXstLXJ8fG8uY29tcGxldGUoKX0pKSl9KSxvKX0sYz0wO2M8aTtjKyspbChjKX0pLG8pfX1mdW5jdGlvbiBxdCh0LGUsbil7dD9uLmFkZCh0LnNjaGVkdWxlKGUpKTplKCl9ZnVuY3Rpb24gWnQodCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0xLzApLGwoZSk/WnQoKGZ1bmN0aW9uKG4sbyl7cmV0dXJuIEl0KChmdW5jdGlvbih0LGkpe3JldHVybiBlKG4sdCxvLGkpfSkpKE10KHQobixvKSkpfSksbik6KCJudW1iZXIiPT10eXBlb2YgZSYmKG49ZSksUigoZnVuY3Rpb24oZSxvKXtyZXR1cm4oZnVuY3Rpb24gaSh0LGUsbixvLGEscixzLGwpe3ZhciBjPVtdLGQ9MCxwPTAsbT0hMSx1PWZ1bmN0aW9uKCl7IW18fGMubGVuZ3RofHxkfHxlLmNvbXBsZXRlKCl9LGY9ZnVuY3Rpb24odCl7cmV0dXJuIGQ8bz9nKHQpOmMucHVzaCh0KX0sZz1mdW5jdGlvbih0KXtyJiZlLm5leHQodCksZCsrO3ZhciBpPSExO010KG4odCxwKyspKS5zdWJzY3JpYmUobmV3IFQoZSwoZnVuY3Rpb24odCl7bnVsbD09YXx8YSh0KSxyP2YodCk6ZS5uZXh0KHQpfSksKGZ1bmN0aW9uKCl7aT0hMH0pLHZvaWQgMCwoZnVuY3Rpb24oKXtpZihpKXRyeXtkLS07Zm9yKHZhciB0PWZ1bmN0aW9uKCl7dmFyIHQ9Yy5zaGlmdCgpO3M/ZS5hZGQocy5zY2hlZHVsZSgoZnVuY3Rpb24oKXtyZXR1cm4gZyh0KX0pKSk6Zyh0KX07Yy5sZW5ndGgmJmQ8bzspdCgpO3UoKX1jYXRjaCh0KXtlLmVycm9yKHQpfX0pKSl9O3JldHVybiB0LnN1YnNjcmliZShuZXcgVChlLGYsKGZ1bmN0aW9uKCl7bT0hMCx1KCl9KSkpLGZ1bmN0aW9uKCl7bnVsbD09bHx8bCgpfX0pKGUsbyx0LG4pfSkpKX1mdW5jdGlvbiBYdCh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MS8wKSxadCh3LHQpfWZ1bmN0aW9uIEt0KCl7cmV0dXJuIFh0KDEpfWZ1bmN0aW9uIEp0KCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiBLdCgpKE90KHQsU3QodCkpKX1mdW5jdGlvbiBRdCh0KXtyZXR1cm4gbmV3IEQoKGZ1bmN0aW9uKGUpe010KHQoKSkuc3Vic2NyaWJlKGUpfSkpfWZ1bmN0aW9uICR0KCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciBuPWt0KHQpLG89VXQodCksaT1vLmFyZ3MsYT1vLmtleXMscj1uZXcgRCgoZnVuY3Rpb24odCl7dmFyIGU9aS5sZW5ndGg7aWYoZSlmb3IodmFyIG49bmV3IEFycmF5KGUpLG89ZSxyPWUscz1mdW5jdGlvbihlKXt2YXIgcz0hMTtNdChpW2VdKS5zdWJzY3JpYmUobmV3IFQodCwoZnVuY3Rpb24odCl7c3x8KHM9ITAsci0tKSxuW2VdPXR9KSwoZnVuY3Rpb24oKXstLW8mJnN8fChyfHx0Lm5leHQoYT9HdChhLG4pOm4pLHQuY29tcGxldGUoKSl9KSkpfSxsPTA7bDxlO2wrKylzKGwpO2Vsc2UgdC5jb21wbGV0ZSgpfSkpO3JldHVybiBuP3IucGlwZShGdChuKSk6cn12YXIgdGU9WyJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVyIl0sZWU9WyJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLG5lPVsib24iLCJvZmYiXTtmdW5jdGlvbiBvZSh0LGUsbixvKXtpZihsKG4pJiYobz1uLG49dm9pZCAwKSxvKXJldHVybiBvZSh0LGUsbikucGlwZShGdChvKSk7dmFyIGE9aSgoZnVuY3Rpb24gcih0KXtyZXR1cm4gbCh0LmFkZEV2ZW50TGlzdGVuZXIpJiZsKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcil9KSh0KT9lZS5tYXAoKGZ1bmN0aW9uKG8pe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gdFtvXShlLGksbil9fSkpOihmdW5jdGlvbiBzKHQpe3JldHVybiBsKHQuYWRkTGlzdGVuZXIpJiZsKHQucmVtb3ZlTGlzdGVuZXIpfSkodCk/dGUubWFwKGllKHQsZSkpOihmdW5jdGlvbiBjKHQpe3JldHVybiBsKHQub24pJiZsKHQub2ZmKX0pKHQpP25lLm1hcChpZSh0LGUpKTpbXSwyKSxkPWFbMF0scD1hWzFdO2lmKCFkJiZsdCh0KSlyZXR1cm4gWnQoKGZ1bmN0aW9uKHQpe3JldHVybiBvZSh0LGUsbil9KSkoT3QodCkpO2lmKCFkKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7cmV0dXJuIG5ldyBEKChmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gdC5uZXh0KDE8ZS5sZW5ndGg/ZTplWzBdKX07cmV0dXJuIGQoZSksZnVuY3Rpb24oKXtyZXR1cm4gcChlKX19KSl9ZnVuY3Rpb24gaWUodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiB0W25dKGUsbyl9fX1mdW5jdGlvbiBhZSh0LGUsbil7dm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49ZXQpO3ZhciBvPS0xO3JldHVybiBudWxsIT1lJiYoUHQoZSk/bj1lOm89ZSksbmV3IEQoKGZ1bmN0aW9uKGUpe3ZhciBpPShmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZSYmIWlzTmFOKHQpfSkodCk/K3Qtbi5ub3coKTp0O2k8MCYmKGk9MCk7dmFyIHI9MDtyZXR1cm4gbi5zY2hlZHVsZSgoZnVuY3Rpb24oKXtlLmNsb3NlZHx8KGUubmV4dChyKyspLDA8PW8/dGhpcy5zY2hlZHVsZSh2b2lkIDAsbyk6ZS5jb21wbGV0ZSgpKX0pLGkpfSkpfWZ1bmN0aW9uIHJlKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciBuPVN0KHQpLG89RHQodCwxLzApLGk9dDtyZXR1cm4gaS5sZW5ndGg/MT09PWkubGVuZ3RoP010KGlbMF0pOlh0KG8pKE90KGksbikpOnJ0fXZhciBzZT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIGxlKHQpe3JldHVybiAxPT09dC5sZW5ndGgmJnNlKHRbMF0pP3RbMF06dH1mdW5jdGlvbiBjZSh0LGUpe3JldHVybiBSKChmdW5jdGlvbihuLG8pe3ZhciBpPTA7bi5zdWJzY3JpYmUobmV3IFQobywoZnVuY3Rpb24obil7cmV0dXJuIHQuY2FsbChlLG4saSsrKSYmby5uZXh0KG4pfSkpKX0pKX1mdW5jdGlvbiBkZSh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1ldCksKGZ1bmN0aW9uIG4odCl7cmV0dXJuIFIoKGZ1bmN0aW9uKGUsbil7dmFyIG89ITEsaT1udWxsLGE9bnVsbCxyPSExLHM9ZnVuY3Rpb24oKXtpZihudWxsPT1hfHxhLnVuc3Vic2NyaWJlKCksYT1udWxsLG8pe289ITE7dmFyIHQ9aTtpPW51bGwsbi5uZXh0KHQpfXImJm4uY29tcGxldGUoKX0sbD1mdW5jdGlvbigpe2E9bnVsbCxyJiZuLmNvbXBsZXRlKCl9O2Uuc3Vic2NyaWJlKG5ldyBUKG4sKGZ1bmN0aW9uKGUpe289ITAsaT1lLGF8fE10KHQoZSkpLnN1YnNjcmliZShhPW5ldyBUKG4scyxsKSl9KSwoZnVuY3Rpb24oKXtyPSEwLCghb3x8IWF8fGEuY2xvc2VkKSYmbi5jb21wbGV0ZSgpfSkpKX0pKX0pKChmdW5jdGlvbigpe3JldHVybiBhZSh0LGUpfSkpfWZ1bmN0aW9uIHBlKHQpe3JldHVybiBSKChmdW5jdGlvbihlLG4pe3ZhciBvLGk9bnVsbCxhPSExO2k9ZS5zdWJzY3JpYmUobmV3IFQobix2b2lkIDAsdm9pZCAwLChmdW5jdGlvbihyKXtvPU10KHQocixwZSh0KShlKSkpLGk/KGkudW5zdWJzY3JpYmUoKSxpPW51bGwsby5zdWJzY3JpYmUobikpOmE9ITB9KSkpLGEmJihpLnVuc3Vic2NyaWJlKCksaT1udWxsLG8uc3Vic2NyaWJlKG4pKX0pKX1mdW5jdGlvbiBtZSh0LGUsbixvLGkpe3JldHVybiBmdW5jdGlvbihhLHIpe3ZhciBzPW4sbD1lLGM9MDthLnN1YnNjcmliZShuZXcgVChyLChmdW5jdGlvbihlKXt2YXIgbj1jKys7bD1zP3QobCxlLG4pOihzPSEwLGUpLG8mJnIubmV4dChsKX0pLGkmJmZ1bmN0aW9uKCl7cyYmci5uZXh0KGwpLHIuY29tcGxldGUoKX0pKX19ZnVuY3Rpb24gdWUoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49a3QodCk7cmV0dXJuIG4/ayh1ZS5hcHBseSh2b2lkIDAsYShbXSxpKHQpKSksRnQobikpOlIoKGZ1bmN0aW9uKGUsbil7WXQoYShbZV0saShsZSh0KSkpKShuKX0pKX1mdW5jdGlvbiBmZSgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gdWUuYXBwbHkodm9pZCAwLGEoW10saSh0KSkpfWZ1bmN0aW9uIGdlKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXR0KSxSKChmdW5jdGlvbihuLG8pe3ZhciBpPW51bGwsYT1udWxsLHI9bnVsbCxzPWZ1bmN0aW9uKCl7aWYoaSl7aS51bnN1YnNjcmliZSgpLGk9bnVsbDt2YXIgdD1hO2E9bnVsbCxvLm5leHQodCl9fTtmdW5jdGlvbiBsKCl7dmFyIG49cit0LGE9ZS5ub3coKTtpZihhPG4pcmV0dXJuIGk9dGhpcy5zY2hlZHVsZSh2b2lkIDAsbi1hKSx2b2lkIG8uYWRkKGkpO3MoKX1uLnN1YnNjcmliZShuZXcgVChvLChmdW5jdGlvbihuKXthPW4scj1lLm5vdygpLGl8fChpPWUuc2NoZWR1bGUobCx0KSxvLmFkZChpKSl9KSwoZnVuY3Rpb24oKXtzKCksby5jb21wbGV0ZSgpfSksdm9pZCAwLChmdW5jdGlvbigpe2E9aT1udWxsfSkpKX0pKX1mdW5jdGlvbiBoZSh0KXtyZXR1cm4gUigoZnVuY3Rpb24oZSxuKXt2YXIgbz0hMTtlLnN1YnNjcmliZShuZXcgVChuLChmdW5jdGlvbih0KXtvPSEwLG4ubmV4dCh0KX0pLChmdW5jdGlvbigpe298fG4ubmV4dCh0KSxuLmNvbXBsZXRlKCl9KSkpfSkpfWZ1bmN0aW9uIGJlKHQpe3JldHVybiB0PD0wP2Z1bmN0aW9uKCl7cmV0dXJuIHJ0fTpSKChmdW5jdGlvbihlLG4pe3ZhciBvPTA7ZS5zdWJzY3JpYmUobmV3IFQobiwoZnVuY3Rpb24oZSl7KytvPD10JiYobi5uZXh0KGUpLHQ8PW8mJm4uY29tcGxldGUoKSl9KSkpfSkpfWZ1bmN0aW9uIHllKCl7cmV0dXJuIFIoKGZ1bmN0aW9uKHQsZSl7dC5zdWJzY3JpYmUobmV3IFQoZSx5KSl9KSl9ZnVuY3Rpb24gX2UodCxlKXtyZXR1cm4gZT9mdW5jdGlvbihuKXtyZXR1cm4gSnQoZS5waXBlKGJlKDEpLHllKCkpLG4ucGlwZShfZSh0KSkpfTpadCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG4pLnBpcGUoYmUoMSksKGZ1bmN0aW9uIG8odCl7cmV0dXJuIEl0KChmdW5jdGlvbigpe3JldHVybiB0fSkpfSkoZSkpfSkpfWZ1bmN0aW9uIENlKHQsZSl7dm9pZCAwPT09ZSYmKGU9dHQpO3ZhciBuPWFlKHQsZSk7cmV0dXJuIF9lKChmdW5jdGlvbigpe3JldHVybiBufSkpfWZ1bmN0aW9uIE1lKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXcpLHQ9bnVsbCE9dD90OnZlLFIoKGZ1bmN0aW9uKG4sbyl7dmFyIGksYT0hMDtuLnN1YnNjcmliZShuZXcgVChvLChmdW5jdGlvbihuKXt2YXIgcj1lKG4pOyFhJiZ0KGkscil8fChhPSExLGk9cixvLm5leHQobikpfSkpKX0pKX1mdW5jdGlvbiB2ZSh0LGUpe3JldHVybiB0PT09ZX1mdW5jdGlvbiB4ZSh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9T2UpLFIoKGZ1bmN0aW9uKGUsbil7dmFyIG89ITE7ZS5zdWJzY3JpYmUobmV3IFQobiwoZnVuY3Rpb24odCl7bz0hMCxuLm5leHQodCl9KSwoZnVuY3Rpb24oKXtyZXR1cm4gbz9uLmNvbXBsZXRlKCk6bi5lcnJvcih0KCkpfSkpKX0pKX1mdW5jdGlvbiBPZSgpe3JldHVybiBuZXcgenR9ZnVuY3Rpb24gUGUodCxlKXtyZXR1cm4gZT9mdW5jdGlvbihuKXtyZXR1cm4gbi5waXBlKFBlKChmdW5jdGlvbihuLG8pe3JldHVybiBNdCh0KG4sbykpLnBpcGUoSXQoKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIGUobix0LG8saSl9KSkpfSkpKX06UigoZnVuY3Rpb24oZSxuKXt2YXIgbz0wLGk9bnVsbCxhPSExO2Uuc3Vic2NyaWJlKG5ldyBUKG4sKGZ1bmN0aW9uKGUpe2l8fChpPW5ldyBUKG4sdm9pZCAwLChmdW5jdGlvbigpe2k9bnVsbCxhJiZuLmNvbXBsZXRlKCl9KSksTXQodChlLG8rKykpLnN1YnNjcmliZShpKSl9KSwoZnVuY3Rpb24oKXthPSEwLCFpJiZuLmNvbXBsZXRlKCl9KSkpfSkpfWZ1bmN0aW9uIHdlKHQsZSxuLG8pe3JldHVybiBSKChmdW5jdGlvbihpLGEpe3ZhciByO2UmJiJmdW5jdGlvbiIhPXR5cGVvZiBlPyhuPWUuZHVyYXRpb24scj1lLmVsZW1lbnQsbz1lLmNvbm5lY3Rvcik6cj1lO3ZhciBzPW5ldyBNYXAsbD1mdW5jdGlvbih0KXtzLmZvckVhY2godCksdChhKX0sYz1mdW5jdGlvbih0KXtyZXR1cm4gbCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IodCl9KSl9LGQ9bmV3IGtlKGEsKGZ1bmN0aW9uKGUpe3RyeXt2YXIgaT10KGUpLGw9cy5nZXQoaSk7aWYoIWwpe3Muc2V0KGksbD1vP28oKTpuZXcgSSk7dmFyIHA9KGZ1bmN0aW9uIG0odCxlKXt2YXIgbj1uZXcgRCgoZnVuY3Rpb24odCl7ZC5hY3RpdmVHcm91cHMrKzt2YXIgbj1lLnN1YnNjcmliZSh0KTtyZXR1cm4gZnVuY3Rpb24oKXtuLnVuc3Vic2NyaWJlKCksMD09LS1kLmFjdGl2ZUdyb3VwcyYmZC50ZWFyZG93bkF0dGVtcHRlZCYmZC51bnN1YnNjcmliZSgpfX0pKTtyZXR1cm4gbi5rZXk9dCxufSkoaSxsKTtpZihhLm5leHQocCksbil7dmFyIHU9bmV3IFQobCwoZnVuY3Rpb24oKXtsLmNvbXBsZXRlKCksbnVsbD09dXx8dS51bnN1YnNjcmliZSgpfSksdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXtyZXR1cm4gcy5kZWxldGUoaSl9KSk7ZC5hZGQoTXQobihwKSkuc3Vic2NyaWJlKHUpKX19bC5uZXh0KHI/cihlKTplKX1jYXRjaCh0KXtjKHQpfX0pLChmdW5jdGlvbigpe3JldHVybiBsKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21wbGV0ZSgpfSkpfSksYywoZnVuY3Rpb24oKXtyZXR1cm4gcy5jbGVhcigpfSkpO2kuc3Vic2NyaWJlKGQpfSkpfXZhciBrZT0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gbigpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5hY3RpdmVHcm91cHM9MCxlLnRlYXJkb3duQXR0ZW1wdGVkPSExLGV9cmV0dXJuIGUobix0KSxuLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMudGVhcmRvd25BdHRlbXB0ZWQ9ITAsMD09PXRoaXMuYWN0aXZlR3JvdXBzJiZ0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpfSxufSkoVCk7ZnVuY3Rpb24gU2UodCl7cmV0dXJuIHQ8PTA/ZnVuY3Rpb24oKXtyZXR1cm4gcnR9OlIoKGZ1bmN0aW9uKGUsbil7dmFyIGk9W107ZS5zdWJzY3JpYmUobmV3IFQobiwoZnVuY3Rpb24oZSl7aS5wdXNoKGUpLHQ8aS5sZW5ndGgmJmkuc2hpZnQoKX0pLChmdW5jdGlvbigpe3ZhciB0LGU7dHJ5e2Zvcih2YXIgYT1vKGkpLHI9YS5uZXh0KCk7IXIuZG9uZTtyPWEubmV4dCgpKW4ubmV4dChyLnZhbHVlKX1jYXRjaChlKXt0PXtlcnJvcjplfX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYoZT1hLnJldHVybikmJmUuY2FsbChhKX1maW5hbGx5e2lmKHQpdGhyb3cgdC5lcnJvcn19bi5jb21wbGV0ZSgpfSksdm9pZCAwLChmdW5jdGlvbigpe2k9bnVsbH0pKSl9KSl9ZnVuY3Rpb24gRGUoKXtyZXR1cm4gUigoZnVuY3Rpb24odCxlKXt2YXIgbixvPSExO3Quc3Vic2NyaWJlKG5ldyBUKGUsKGZ1bmN0aW9uKHQpe3ZhciBpPW47bj10LG8mJmUubmV4dChbaSx0XSksbz0hMH0pKSl9KSl9ZnVuY3Rpb24gRWUodCl7dm9pZCAwPT09dCYmKHQ9e30pO3ZhciBlPXQuY29ubmVjdG9yLG49dm9pZCAwPT09ZT9mdW5jdGlvbigpe3JldHVybiBuZXcgSX06ZSxvPXQucmVzZXRPbkVycm9yLGk9dm9pZCAwPT09b3x8byxhPXQucmVzZXRPbkNvbXBsZXRlLHI9dm9pZCAwPT09YXx8YSxzPXQucmVzZXRPblJlZkNvdW50WmVybyxsPXZvaWQgMD09PXN8fHM7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPW51bGwsbz1udWxsLGE9bnVsbCxzPTAsYz0hMSxkPSExLHA9ZnVuY3Rpb24oKXtudWxsPT1vfHxvLnVuc3Vic2NyaWJlKCksbz1udWxsfSxtPWZ1bmN0aW9uKCl7cCgpLGU9YT1udWxsLGM9ZD0hMX0sdT1mdW5jdGlvbigpe3ZhciB0PWU7bSgpLG51bGw9PXR8fHQudW5zdWJzY3JpYmUoKX07cmV0dXJuIFIoKGZ1bmN0aW9uKHQsZil7cysrLGR8fGN8fHAoKTt2YXIgZz1hPW51bGwhPWE/YTpuKCk7Zi5hZGQoKGZ1bmN0aW9uKCl7MCE9LS1zfHxkfHxjfHwobz1SZSh1LGwpKX0pKSxnLnN1YnNjcmliZShmKSxlfHwoZT1uZXcgTSh7bmV4dDpmdW5jdGlvbih0KXtyZXR1cm4gZy5uZXh0KHQpfSxlcnJvcjpmdW5jdGlvbih0KXtkPSEwLHAoKSxvPVJlKG0saSx0KSxnLmVycm9yKHQpfSxjb21wbGV0ZTpmdW5jdGlvbigpe2M9ITAscCgpLG89UmUobSxyKSxnLmNvbXBsZXRlKCl9fSksQ3QodCkuc3Vic2NyaWJlKGUpKX0pKSh0KX19ZnVuY3Rpb24gUmUodCxlKXtmb3IodmFyIG49W10sbz0yO288YXJndW1lbnRzLmxlbmd0aDtvKyspbltvLTJdPWFyZ3VtZW50c1tvXTtyZXR1cm4hMD09PWU/KHQoKSxudWxsKTohMT09PWU/bnVsbDplLmFwcGx5KHZvaWQgMCxhKFtdLGkobikpKS5waXBlKGJlKDEpKS5zdWJzY3JpYmUoKGZ1bmN0aW9uKCl7cmV0dXJuIHQoKX0pKX1mdW5jdGlvbiBBZSh0LGUsbil7dmFyIG8saSxhLHI9ITE7cmV0dXJuIHQmJiJvYmplY3QiPT10eXBlb2YgdD8oYT1udWxsIT09KG89dC5idWZmZXJTaXplKSYmdm9pZCAwIT09bz9vOjEvMCxlPW51bGwhPT0oaT10LndpbmRvd1RpbWUpJiZ2b2lkIDAhPT1pP2k6MS8wLHI9ISF0LnJlZkNvdW50LG49dC5zY2hlZHVsZXIpOmE9bnVsbCE9dD90OjEvMCxFZSh7Y29ubmVjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCKGEsZSxuKX0scmVzZXRPbkVycm9yOiEwLHJlc2V0T25Db21wbGV0ZTohMSxyZXNldE9uUmVmQ291bnRaZXJvOnJ9KX1mdW5jdGlvbiBUZSh0KXtyZXR1cm4gY2UoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQ8PW59KSl9ZnVuY3Rpb24gTmUoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49U3QodCk7cmV0dXJuIFIoKGZ1bmN0aW9uKGUsbyl7KG4/SnQodCxlLG4pOkp0KHQsZSkpLnN1YnNjcmliZShvKX0pKX1mdW5jdGlvbiB6ZSh0LGUpe3JldHVybiBSKChmdW5jdGlvbihuLG8pe3ZhciBpPW51bGwsYT0wLHI9ITEscz1mdW5jdGlvbigpe3JldHVybiByJiYhaSYmby5jb21wbGV0ZSgpfTtuLnN1YnNjcmliZShuZXcgVChvLChmdW5jdGlvbihuKXtudWxsPT1pfHxpLnVuc3Vic2NyaWJlKCk7dmFyIHI9MCxsPWErKztNdCh0KG4sbCkpLnN1YnNjcmliZShpPW5ldyBUKG8sKGZ1bmN0aW9uKHQpe3JldHVybiBvLm5leHQoZT9lKG4sdCxsLHIrKyk6dCl9KSwoZnVuY3Rpb24oKXtpPW51bGwscygpfSkpKX0pLChmdW5jdGlvbigpe3I9ITAscygpfSkpKX0pKX1mdW5jdGlvbiBJZSh0KXtyZXR1cm4gUigoZnVuY3Rpb24oZSxuKXtNdCh0KS5zdWJzY3JpYmUobmV3IFQobiwoZnVuY3Rpb24oKXtyZXR1cm4gbi5jb21wbGV0ZSgpfSkseSkpLCFuLmNsb3NlZCYmZS5zdWJzY3JpYmUobil9KSl9ZnVuY3Rpb24gSGUodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLFIoKGZ1bmN0aW9uKG4sbyl7dmFyIGk9MDtuLnN1YnNjcmliZShuZXcgVChvLChmdW5jdGlvbihuKXt2YXIgYT10KG4saSsrKTsoYXx8ZSkmJm8ubmV4dChuKSwhYSYmby5jb21wbGV0ZSgpfSkpKX0pKX1mdW5jdGlvbiBGZSh0LGUsbil7dmFyIG89bCh0KXx8ZXx8bj97bmV4dDp0LGVycm9yOmUsY29tcGxldGU6bn06dDtyZXR1cm4gbz9SKChmdW5jdGlvbih0LGUpe3ZhciBuO251bGw9PT0obj1vLnN1YnNjcmliZSl8fHZvaWQgMD09PW58fG4uY2FsbChvKTt2YXIgaT0hMDt0LnN1YnNjcmliZShuZXcgVChlLChmdW5jdGlvbih0KXt2YXIgbjtudWxsPT09KG49by5uZXh0KXx8dm9pZCAwPT09bnx8bi5jYWxsKG8sdCksZS5uZXh0KHQpfSksKGZ1bmN0aW9uKCl7dmFyIHQ7aT0hMSxudWxsPT09KHQ9by5jb21wbGV0ZSl8fHZvaWQgMD09PXR8fHQuY2FsbChvKSxlLmNvbXBsZXRlKCl9KSwoZnVuY3Rpb24odCl7dmFyIG47aT0hMSxudWxsPT09KG49by5lcnJvcil8fHZvaWQgMD09PW58fG4uY2FsbChvLHQpLGUuZXJyb3IodCl9KSwoZnVuY3Rpb24oKXt2YXIgdCxlO2kmJihudWxsPT09KHQ9by51bnN1YnNjcmliZSl8fHZvaWQgMD09PXR8fHQuY2FsbChvKSksbnVsbD09PShlPW8uZmluYWxpemUpfHx2b2lkIDA9PT1lfHxlLmNhbGwobyl9KSkpfSkpOnd9dmFyIExlPXtsZWFkaW5nOiEwLHRyYWlsaW5nOiExfTtmdW5jdGlvbiBCZSh0LGUsbil7dm9pZCAwPT09ZSYmKGU9dHQpLHZvaWQgMD09PW4mJihuPUxlKTt2YXIgbz1hZSh0LGUpO3JldHVybihmdW5jdGlvbiBpKHQsZSl7dmFyIG49dm9pZCAwPT09ZT9MZTplLG89bi5sZWFkaW5nLGk9bi50cmFpbGluZztyZXR1cm4gUigoZnVuY3Rpb24oZSxuKXt2YXIgYT0hMSxyPW51bGwscz1udWxsLGw9ITEsYz1mdW5jdGlvbigpe251bGw9PXN8fHMudW5zdWJzY3JpYmUoKSxzPW51bGwsaSYmKG0oKSxsJiZuLmNvbXBsZXRlKCkpfSxkPWZ1bmN0aW9uKCl7cz1udWxsLGwmJm4uY29tcGxldGUoKX0scD1mdW5jdGlvbihlKXtyZXR1cm4gcz1NdCh0KGUpKS5zdWJzY3JpYmUobmV3IFQobixjLGQpKX0sbT1mdW5jdGlvbigpe2lmKGEpe2E9ITE7dmFyIHQ9cjtyPW51bGwsbi5uZXh0KHQpLCFsJiZwKHQpfX07ZS5zdWJzY3JpYmUobmV3IFQobiwoZnVuY3Rpb24odCl7YT0hMCxyPXQsKCFzfHxzLmNsb3NlZCkmJihvP20oKTpwKHQpKX0pLChmdW5jdGlvbigpe2w9ITAsKCEoaSYmYSYmcyl8fHMuY2xvc2VkKSYmbi5jb21wbGV0ZSgpfSkpKX0pKX0pKChmdW5jdGlvbigpe3JldHVybiBvfSksbil9ZnVuY3Rpb24gVmUoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49a3QodCk7cmV0dXJuIFIoKGZ1bmN0aW9uKGUsbyl7Zm9yKHZhciByPXQubGVuZ3RoLHM9bmV3IEFycmF5KHIpLGw9dC5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KSksYz0hMSxkPWZ1bmN0aW9uKGUpe010KHRbZV0pLnN1YnNjcmliZShuZXcgVChvLChmdW5jdGlvbih0KXtzW2VdPXQsY3x8bFtlXXx8KGxbZV09ITAsKGM9bC5ldmVyeSh3KSkmJihsPW51bGwpKX0pLHkpKX0scD0wO3A8cjtwKyspZChwKTtlLnN1YnNjcmliZShuZXcgVChvLChmdW5jdGlvbih0KXtpZihjKXt2YXIgZT1hKFt0XSxpKHMpKTtvLm5leHQobj9uLmFwcGx5KHZvaWQgMCxhKFtdLGkoZSkpKTplKX19KSkpfSkpfQovKioKICAgICAqIEBsaWNlbnNlIEFuZ3VsYXIgdjEyLjIuMQogICAgICogKGMpIDIwMTAtMjAyMSBHb29nbGUgTExDLiBodHRwczovL2FuZ3VsYXIuaW8vCiAgICAgKiBMaWNlbnNlOiBNSVQKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBqZSh0KXtmb3IobGV0IGUgaW4gdClpZih0W2VdPT09amUpcmV0dXJuIGU7dGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHJlbmFtZWQgcHJvcGVydHkgb24gdGFyZ2V0IG9iamVjdC4iKX1mdW5jdGlvbiBVZSh0LGUpe2Zvcihjb25zdCBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmIXQuaGFzT3duUHJvcGVydHkobikmJih0W25dPWVbbl0pfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBHZSh0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4iWyIrdC5tYXAoR2UpLmpvaW4oIiwgIikrIl0iO2lmKG51bGw9PXQpcmV0dXJuIiIrdDtpZih0Lm92ZXJyaWRkZW5OYW1lKXJldHVybmAke3Qub3ZlcnJpZGRlbk5hbWV9YDtpZih0Lm5hbWUpcmV0dXJuYCR7dC5uYW1lfWA7Y29uc3QgZT10LnRvU3RyaW5nKCk7aWYobnVsbD09ZSlyZXR1cm4iIitlO2NvbnN0IG49ZS5pbmRleE9mKCJcbiIpO3JldHVybi0xPT09bj9lOmUuc3Vic3RyaW5nKDAsbil9ZnVuY3Rpb24gV2UodCxlKXtyZXR1cm4gbnVsbD09dHx8IiI9PT10P251bGw9PT1lPyIiOmU6bnVsbD09ZXx8IiI9PT1lP3Q6dCsiICIrZX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgWWU9amUoe19fZm9yd2FyZF9yZWZfXzpqZX0pO2Z1bmN0aW9uIHFlKHQpe3JldHVybiB0Ll9fZm9yd2FyZF9yZWZfXz1xZSx0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEdlKHRoaXMoKSl9LHR9ZnVuY3Rpb24gWmUodCl7cmV0dXJuIFhlKHQpP3QoKTp0fWZ1bmN0aW9uIFhlKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Lmhhc093blByb3BlcnR5KFllKSYmdC5fX2ZvcndhcmRfcmVmX189PT1xZX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgS2UgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKFFlKHQsZSkpLHRoaXMuY29kZT10fX1jb25zdCBKZT1uZXcgU2V0KFsiMTAwIiwiMjAwIiwiMjAxIiwiMzAwIiwiMzAxIiwiMzAyIl0pO2Z1bmN0aW9uIFFlKHQsZSl7bGV0IG49YCR7dD9gTkcwJHt0fTogYDoiIn0ke2V9YDtyZXR1cm4gbmdEZXZNb2RlJiZKZS5oYXModCkmJihuPWAke259LiBGaW5kIG1vcmUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2Vycm9ycy9ORzAke3R9YCksbn0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gJGUodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3Q6bnVsbD09dD8iIjpTdHJpbmcodCl9ZnVuY3Rpb24gdG4odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dC5uYW1lfHx0LnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiYiZnVuY3Rpb24iPT10eXBlb2YgdC50eXBlP3QudHlwZS5uYW1lfHx0LnR5cGUudG9TdHJpbmcoKTokZSh0KX1mdW5jdGlvbiBlbih0LGUpe2NvbnN0IG49ZT9gLiBEZXBlbmRlbmN5IHBhdGg6ICR7ZS5qb2luKCIgPiAiKX0gPiAke3R9YDoiIjt0aHJvdyBuZXcgS2UoIjIwMCIsYENpcmN1bGFyIGRlcGVuZGVuY3kgaW4gREkgZGV0ZWN0ZWQgZm9yICR7dH0ke259YCl9ZnVuY3Rpb24gbm4oKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtaXggbXVsdGkgcHJvdmlkZXJzIGFuZCByZWd1bGFyIHByb3ZpZGVycyIpfWZ1bmN0aW9uIG9uKHQsZSl7Y29uc3Qgbj1lP2AgaW4gJHtlfWA6IiI7dGhyb3cgbmV3IEtlKCIyMDEiLGBObyBwcm92aWRlciBmb3IgJHt0bih0KX0gZm91bmQke259YCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGFuKHQsZSl7Im51bWJlciIhPXR5cGVvZiB0JiZibihlLHR5cGVvZiB0LCJudW1iZXIiLCI9PT0iKX1mdW5jdGlvbiBybih0LGUsbil7YW4odCwiRXhwZWN0ZWQgYSBudW1iZXIiKSx1bih0LG4sIkV4cGVjdGVkIG51bWJlciB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8iKSxnbih0LGUsIkV4cGVjdGVkIG51bWJlciB0byBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8iKX1mdW5jdGlvbiBzbih0LGUpeyJzdHJpbmciIT10eXBlb2YgdCYmYm4oZSxudWxsPT09dD8ibnVsbCI6dHlwZW9mIHQsInN0cmluZyIsIj09PSIpfWZ1bmN0aW9uIGxuKHQsZSxuKXt0IT1lJiZibihuLHQsZSwiPT0iKX1mdW5jdGlvbiBjbih0LGUsbil7dD09ZSYmYm4obix0LGUsIiE9Iil9ZnVuY3Rpb24gZG4odCxlLG4pe3QhPT1lJiZibihuLHQsZSwiPT09Iil9ZnVuY3Rpb24gcG4odCxlLG4pe3Q9PT1lJiZibihuLHQsZSwiIT09Iil9ZnVuY3Rpb24gbW4odCxlLG4pe3Q8ZXx8Ym4obix0LGUsIjwiKX1mdW5jdGlvbiB1bih0LGUsbil7dDw9ZXx8Ym4obix0LGUsIjw9Iil9ZnVuY3Rpb24gZm4odCxlLG4pe3Q+ZXx8Ym4obix0LGUsIj4iKX1mdW5jdGlvbiBnbih0LGUsbil7dD49ZXx8Ym4obix0LGUsIj49Iil9ZnVuY3Rpb24gaG4odCxlKXtudWxsPT10JiZibihlLHQsbnVsbCwiIT0iKX1mdW5jdGlvbiBibih0LGUsbixvKXt0aHJvdyBuZXcgRXJyb3IoYEFTU0VSVElPTiBFUlJPUjogJHt0fWArKG51bGw9PW8/IiI6YCBbRXhwZWN0ZWQ9PiAke259ICR7b30gJHtlfSA8PUFjdHVhbF1gKSl9ZnVuY3Rpb24geW4odCl7InVuZGVmaW5lZCIhPXR5cGVvZiBOb2RlJiZ0IGluc3RhbmNlb2YgTm9kZXx8Im9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiYiV2ViV29ya2VyUmVuZGVyTm9kZSI9PT10LmNvbnN0cnVjdG9yLm5hbWV8fGJuKGBUaGUgcHJvdmlkZWQgdmFsdWUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBhIERPTSBOb2RlIGJ1dCBnb3QgJHtHZSh0KX1gKX1mdW5jdGlvbiBfbih0LGUpe2huKHQsIkFycmF5IG11c3QgYmUgZGVmaW5lZC4iKTtjb25zdCBuPXQubGVuZ3RoOyhlPDB8fGU+PW4pJiZibihgSW5kZXggZXhwZWN0ZWQgdG8gYmUgbGVzcyB0aGFuICR7bn0gYnV0IGdvdCAke2V9YCl9ZnVuY3Rpb24gQ24odCwuLi5lKXtpZigtMSE9PWUuaW5kZXhPZih0KSlyZXR1cm4hMDtibihgRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb25lIG9mICR7SlNPTi5zdHJpbmdpZnkoZSl9IGJ1dCB3YXMgJHtKU09OLnN0cmluZ2lmeSh0KX0uYCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIE1uKHQpe3JldHVybnt0b2tlbjp0LnRva2VuLHByb3ZpZGVkSW46dC5wcm92aWRlZElufHxudWxsLGZhY3Rvcnk6dC5mYWN0b3J5LHZhbHVlOnZvaWQgMH19ZnVuY3Rpb24gdm4odCl7cmV0dXJue3Byb3ZpZGVyczp0LnByb3ZpZGVyc3x8W10saW1wb3J0czp0LmltcG9ydHN8fFtdfX1mdW5jdGlvbiB4bih0KXtyZXR1cm4gT24odCx3bil8fE9uKHQsU24pfWZ1bmN0aW9uIE9uKHQsZSl7cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoZSk/dFtlXTpudWxsfWZ1bmN0aW9uIFBuKHQpe3JldHVybiB0JiYodC5oYXNPd25Qcm9wZXJ0eShrbil8fHQuaGFzT3duUHJvcGVydHkoRG4pKT90W2tuXTpudWxsfWNvbnN0IHduPWplKHsiybVwcm92IjpqZX0pLGtuPWplKHsiybVpbmoiOmplfSksU249amUoe25nSW5qZWN0YWJsZURlZjpqZX0pLERuPWplKHtuZ0luamVjdG9yRGVmOmplfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwp2YXIgRW47Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpsZXQgUm47ZnVuY3Rpb24gQW4odCl7Y29uc3QgZT1SbjtyZXR1cm4gUm49dCxlfWZ1bmN0aW9uIFRuKHQsZSxuKXtjb25zdCBvPXhuKHQpO3JldHVybiBvJiYicm9vdCI9PW8ucHJvdmlkZWRJbj92b2lkIDA9PT1vLnZhbHVlP28udmFsdWU9by5mYWN0b3J5KCk6by52YWx1ZTpuJkVuLk9wdGlvbmFsP251bGw6dm9pZCAwIT09ZT9lOnZvaWQgb24oR2UodCksIkluamVjdG9yIil9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBObih0KXtyZXR1cm57dG9TdHJpbmc6dH0udG9TdHJpbmcoKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovdmFyIHpuLEluLEhuOyEoZnVuY3Rpb24odCl7dFt0LkRlZmF1bHQ9MF09IkRlZmF1bHQiLHRbdC5Ib3N0PTFdPSJIb3N0Iix0W3QuU2VsZj0yXT0iU2VsZiIsdFt0LlNraXBTZWxmPTRdPSJTa2lwU2VsZiIsdFt0Lk9wdGlvbmFsPThdPSJPcHRpb25hbCJ9KShFbnx8KEVuPXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5PblB1c2g9MF09Ik9uUHVzaCIsdFt0LkRlZmF1bHQ9MV09IkRlZmF1bHQifSkoem58fCh6bj17fSkpLChmdW5jdGlvbih0KXt0W3QuQ2hlY2tPbmNlPTBdPSJDaGVja09uY2UiLHRbdC5DaGVja2VkPTFdPSJDaGVja2VkIix0W3QuQ2hlY2tBbHdheXM9Ml09IkNoZWNrQWx3YXlzIix0W3QuRGV0YWNoZWQ9M109IkRldGFjaGVkIix0W3QuRXJyb3JlZD00XT0iRXJyb3JlZCIsdFt0LkRlc3Ryb3llZD01XT0iRGVzdHJveWVkIn0pKElufHwoSW49e30pKSwoZnVuY3Rpb24odCl7dFt0LkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsdFt0Lk5vbmU9Ml09Ik5vbmUiLHRbdC5TaGFkb3dEb209M109IlNoYWRvd0RvbSJ9KShIbnx8KEhuPXt9KSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBGbj0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMsTG49InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdyxCbj0idW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZixWbj0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmZ2xvYmFsLGpuPUZufHxWbnx8TG58fEJuO2Z1bmN0aW9uIFVuKCl7cmV0dXJuISgidW5kZWZpbmVkIiE9dHlwZW9mIG5nRGV2TW9kZSYmIW5nRGV2TW9kZXx8KCJvYmplY3QiIT10eXBlb2YgbmdEZXZNb2RlJiYoCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiB0KCl7Y29uc3QgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGxvY2F0aW9uP2xvY2F0aW9uLnRvU3RyaW5nKCk6IiIsZT17bmFtZWRDb25zdHJ1Y3RvcnM6LTEhPXQuaW5kZXhPZigibmdEZXZNb2RlPW5hbWVkQ29uc3RydWN0b3JzIiksZmlyc3RDcmVhdGVQYXNzOjAsdE5vZGU6MCx0VmlldzowLHJlbmRlcmVyQ3JlYXRlVGV4dE5vZGU6MCxyZW5kZXJlclNldFRleHQ6MCxyZW5kZXJlckNyZWF0ZUVsZW1lbnQ6MCxyZW5kZXJlckFkZEV2ZW50TGlzdGVuZXI6MCxyZW5kZXJlclNldEF0dHJpYnV0ZTowLHJlbmRlcmVyUmVtb3ZlQXR0cmlidXRlOjAscmVuZGVyZXJTZXRQcm9wZXJ0eTowLHJlbmRlcmVyU2V0Q2xhc3NOYW1lOjAscmVuZGVyZXJBZGRDbGFzczowLHJlbmRlcmVyUmVtb3ZlQ2xhc3M6MCxyZW5kZXJlclNldFN0eWxlOjAscmVuZGVyZXJSZW1vdmVTdHlsZTowLHJlbmRlcmVyRGVzdHJveTowLHJlbmRlcmVyRGVzdHJveU5vZGU6MCxyZW5kZXJlck1vdmVOb2RlOjAscmVuZGVyZXJSZW1vdmVOb2RlOjAscmVuZGVyZXJBcHBlbmRDaGlsZDowLHJlbmRlcmVySW5zZXJ0QmVmb3JlOjAscmVuZGVyZXJDcmVhdGVDb21tZW50OjB9LG49LTE9PT10LmluZGV4T2YoIm5nRGV2TW9kZT1mYWxzZSIpO2puLm5nRGV2TW9kZT1uJiZlfSkoKSwidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8IW5nRGV2TW9kZSkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBHbj17fSxXbj1bXTsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJlVuKCkmJihPYmplY3QuZnJlZXplKEduKSxPYmplY3QuZnJlZXplKFduKSkKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovO2NvbnN0IFluPWplKHsiybVjbXAiOmplfSkscW49amUoeyLJtWRpciI6amV9KSxabj1qZSh7Ism1cGlwZSI6amV9KSxYbj1qZSh7Ism1bW9kIjpqZX0pLEtuPWplKHsiybVsb2MiOmplfSksSm49amUoeyLJtWZhYyI6amV9KSxRbj1qZSh7X19OR19FTEVNRU5UX0lEX186amV9KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCAkbj0wO2Z1bmN0aW9uIHRvKHQpe3JldHVybiBObigoKCk9PnsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJlVuKCk7Y29uc3QgZT17fSxuPXt0eXBlOnQudHlwZSxwcm92aWRlcnNSZXNvbHZlcjpudWxsLGRlY2xzOnQuZGVjbHMsdmFyczp0LnZhcnMsZmFjdG9yeTpudWxsLHRlbXBsYXRlOnQudGVtcGxhdGV8fG51bGwsY29uc3RzOnQuY29uc3RzfHxudWxsLG5nQ29udGVudFNlbGVjdG9yczp0Lm5nQ29udGVudFNlbGVjdG9ycyxob3N0QmluZGluZ3M6dC5ob3N0QmluZGluZ3N8fG51bGwsaG9zdFZhcnM6dC5ob3N0VmFyc3x8MCxob3N0QXR0cnM6dC5ob3N0QXR0cnN8fG51bGwsY29udGVudFF1ZXJpZXM6dC5jb250ZW50UXVlcmllc3x8bnVsbCxkZWNsYXJlZElucHV0czplLGlucHV0czpudWxsLG91dHB1dHM6bnVsbCxleHBvcnRBczp0LmV4cG9ydEFzfHxudWxsLG9uUHVzaDp0LmNoYW5nZURldGVjdGlvbj09PXpuLk9uUHVzaCxkaXJlY3RpdmVEZWZzOm51bGwscGlwZURlZnM6bnVsbCxzZWxlY3RvcnM6dC5zZWxlY3RvcnN8fFduLHZpZXdRdWVyeTp0LnZpZXdRdWVyeXx8bnVsbCxmZWF0dXJlczp0LmZlYXR1cmVzfHxudWxsLGRhdGE6dC5kYXRhfHx7fSxlbmNhcHN1bGF0aW9uOnQuZW5jYXBzdWxhdGlvbnx8SG4uRW11bGF0ZWQsaWQ6ImMiLHN0eWxlczp0LnN0eWxlc3x8V24sXzpudWxsLHNldElucHV0Om51bGwsc2NoZW1hczp0LnNjaGVtYXN8fG51bGwsdFZpZXc6bnVsbH0sbz10LmRpcmVjdGl2ZXMsaT10LmZlYXR1cmVzLGE9dC5waXBlcztyZXR1cm4gbi5pZCs9JG4rKyxuLmlucHV0cz1zbyh0LmlucHV0cyxlKSxuLm91dHB1dHM9c28odC5vdXRwdXRzKSxpJiZpLmZvckVhY2goKHQ9PnQobikpKSxuLmRpcmVjdGl2ZURlZnM9bz8oKT0+KCJmdW5jdGlvbiI9PXR5cGVvZiBvP28oKTpvKS5tYXAobm8pOm51bGwsbi5waXBlRGVmcz1hPygpPT4oImZ1bmN0aW9uIj09dHlwZW9mIGE/YSgpOmEpLm1hcChvbyk6bnVsbCxufSkpfWZ1bmN0aW9uIGVvKHQsZSxuKXtjb25zdCBvPXQuybVjbXA7by5kaXJlY3RpdmVEZWZzPSgpPT5lLm1hcChubyksby5waXBlRGVmcz0oKT0+bi5tYXAob28pfWZ1bmN0aW9uIG5vKHQpe2NvbnN0IGU9cG8odCl8fG1vKHQpO2lmKG5nRGV2TW9kZSYmIWUpdGhyb3cgbmV3IEVycm9yKGAnJHt0Lm5hbWV9JyBpcyBuZWl0aGVyICdDb21wb25lbnRUeXBlJyBvciAnRGlyZWN0aXZlVHlwZScuYCk7cmV0dXJuIGV9ZnVuY3Rpb24gb28odCl7Y29uc3QgZT11byh0KTtpZihuZ0Rldk1vZGUmJiFlKXRocm93IG5ldyBFcnJvcihgJyR7dC5uYW1lfScgaXMgbm90IGEgJ1BpcGVUeXBlJy5gKTtyZXR1cm4gZX1jb25zdCBpbz17fTtmdW5jdGlvbiBhbyh0KXtyZXR1cm4gTm4oKCgpPT57Y29uc3QgZT17dHlwZTp0LnR5cGUsYm9vdHN0cmFwOnQuYm9vdHN0cmFwfHxXbixkZWNsYXJhdGlvbnM6dC5kZWNsYXJhdGlvbnN8fFduLGltcG9ydHM6dC5pbXBvcnRzfHxXbixleHBvcnRzOnQuZXhwb3J0c3x8V24sdHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM6bnVsbCxzY2hlbWFzOnQuc2NoZW1hc3x8bnVsbCxpZDp0LmlkfHxudWxsfTtyZXR1cm4gbnVsbCE9dC5pZCYmKGlvW3QuaWRdPXQudHlwZSksZX0pKX1mdW5jdGlvbiBybyh0LGUpe3JldHVybiBObigoKCk9Pntjb25zdCBuPWZvKHQsITApO24uZGVjbGFyYXRpb25zPWUuZGVjbGFyYXRpb25zfHxXbixuLmltcG9ydHM9ZS5pbXBvcnRzfHxXbixuLmV4cG9ydHM9ZS5leHBvcnRzfHxXbn0pKX1mdW5jdGlvbiBzbyh0LGUpe2lmKG51bGw9PXQpcmV0dXJuIEduO2NvbnN0IG49e307Zm9yKGNvbnN0IG8gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG8pKXtsZXQgaT10W29dLGE9aTtBcnJheS5pc0FycmF5KGkpJiYoYT1pWzFdLGk9aVswXSksbltpXT1vLGUmJihlW2ldPWEpfXJldHVybiBufWNvbnN0IGxvPXRvO2Z1bmN0aW9uIGNvKHQpe3JldHVybnt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSxmYWN0b3J5Om51bGwscHVyZTohMSE9PXQucHVyZSxvbkRlc3Ryb3k6dC50eXBlLnByb3RvdHlwZS5uZ09uRGVzdHJveXx8bnVsbH19ZnVuY3Rpb24gcG8odCl7cmV0dXJuIHRbWW5dfHxudWxsfWZ1bmN0aW9uIG1vKHQpe3JldHVybiB0W3FuXXx8bnVsbH1mdW5jdGlvbiB1byh0KXtyZXR1cm4gdFtabl18fG51bGx9ZnVuY3Rpb24gZm8odCxlKXtjb25zdCBuPXRbWG5dfHxudWxsO2lmKCFuJiYhMD09PWUpdGhyb3cgbmV3IEVycm9yKGBUeXBlICR7R2UodCl9IGRvZXMgbm90IGhhdmUgJ8m1bW9kJyBwcm9wZXJ0eS5gKTtyZXR1cm4gbn0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IGdvPTIwLGhvPVsiUm9vdCIsIkNvbXBvbmVudCIsIkVtYmVkZGVkIl0sYm89MTA7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiB5byh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmIm9iamVjdCI9PXR5cGVvZiB0WzFdfWZ1bmN0aW9uIF9vKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYhMD09PXRbMV19ZnVuY3Rpb24gQ28odCl7cmV0dXJuIDAhPSg4JnQuZmxhZ3MpfWZ1bmN0aW9uIE1vKHQpe3JldHVybiAyPT0oMiZ0LmZsYWdzKX1mdW5jdGlvbiB2byh0KXtyZXR1cm4gMT09KDEmdC5mbGFncyl9ZnVuY3Rpb24geG8odCl7cmV0dXJuIG51bGwhPT10LnRlbXBsYXRlfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gT28odCxlKXtQbyh0LGVbMV0pfWZ1bmN0aW9uIFBvKHQsZSl7d28odCksdC5oYXNPd25Qcm9wZXJ0eSgidFZpZXdfIikmJmxuKHQudFZpZXdfLGUsIlRoaXMgVE5vZGUgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgVFZpZXcuIil9ZnVuY3Rpb24gd28odCl7aG4odCwiVE5vZGUgbXVzdCBiZSBkZWZpbmVkIiksdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0Lmhhc093blByb3BlcnR5KCJkaXJlY3RpdmVTdHlsaW5nTGFzdCIpfHxibigiTm90IG9mIHR5cGUgVE5vZGUsIGdvdDogIit0KX1mdW5jdGlvbiBrbyh0KXtobih0LCJFeHBlY3RlZCBUSWN1IHRvIGJlIGRlZmluZWQiKSwibnVtYmVyIiE9dHlwZW9mIHQuY3VycmVudENhc2VMVmlld0luZGV4JiZibigiT2JqZWN0IGlzIG5vdCBvZiBUSWN1IHR5cGUuIil9ZnVuY3Rpb24gU28odCl7aG4odCwiY3VycmVudFROb2RlIHNob3VsZCBleGlzdCEiKSxobih0LnBhcmVudCwiY3VycmVudFROb2RlIHNob3VsZCBoYXZlIGEgcGFyZW50Iil9ZnVuY3Rpb24gRG8odCl7aG4odCwiTENvbnRhaW5lciBtdXN0IGJlIGRlZmluZWQiKSxsbihfbyh0KSwhMCwiRXhwZWN0aW5nIExDb250YWluZXIiKX1mdW5jdGlvbiBFbyh0KXt0JiZsbih5byh0KSwhMCwiRXhwZWN0aW5nIExWaWV3IG9yIHVuZGVmaW5lZCBvciBudWxsIil9ZnVuY3Rpb24gUm8odCl7aG4odCwiTFZpZXcgbXVzdCBiZSBkZWZpbmVkIiksbG4oeW8odCksITAsIkV4cGVjdGluZyBMVmlldyIpfWZ1bmN0aW9uIEFvKHQsZSl7bG4odC5maXJzdENyZWF0ZVBhc3MsITAsZXx8IlNob3VsZCBvbmx5IGJlIGNhbGxlZCBpbiBmaXJzdCBjcmVhdGUgcGFzcy4iKX1mdW5jdGlvbiBUbyh0LGUpe2xuKHQuZmlyc3RVcGRhdGVQYXNzLCEwLGV8fCJTaG91bGQgb25seSBiZSBjYWxsZWQgaW4gZmlyc3QgdXBkYXRlIHBhc3MuIil9ZnVuY3Rpb24gTm8odCxlKXt6byh0WzFdLmV4cGFuZG9TdGFydEluZGV4LHQubGVuZ3RoLGUpfWZ1bmN0aW9uIHpvKHQsZSxuKXt0PD1uJiZuPGV8fGJuKGBJbmRleCBvdXQgb2YgcmFuZ2UgKGV4cGVjdGluZyAke3R9IDw9ICR7bn0gPCAke2V9KWApfWZ1bmN0aW9uIElvKHQsZSl7aG4odCxlfHwiQ29tcG9uZW50IHZpZXdzIHNob3VsZCBhbHdheXMgaGF2ZSBhIHBhcmVudCB2aWV3IChjb21wb25lbnQncyBob3N0IHZpZXcpIil9ZnVuY3Rpb24gSG8odCxlKXtObyh0LGUpLE5vKHQsZSs4KSxhbih0W2UrMF0sImluamVjdG9ySW5kZXggc2hvdWxkIHBvaW50IHRvIGEgYmxvb20gZmlsdGVyIiksYW4odFtlKzFdLCJpbmplY3RvckluZGV4IHNob3VsZCBwb2ludCB0byBhIGJsb29tIGZpbHRlciIpLGFuKHRbZSsyXSwiaW5qZWN0b3JJbmRleCBzaG91bGQgcG9pbnQgdG8gYSBibG9vbSBmaWx0ZXIiKSxhbih0W2UrM10sImluamVjdG9ySW5kZXggc2hvdWxkIHBvaW50IHRvIGEgYmxvb20gZmlsdGVyIiksYW4odFtlKzRdLCJpbmplY3RvckluZGV4IHNob3VsZCBwb2ludCB0byBhIGJsb29tIGZpbHRlciIpLGFuKHRbZSs1XSwiaW5qZWN0b3JJbmRleCBzaG91bGQgcG9pbnQgdG8gYSBibG9vbSBmaWx0ZXIiKSxhbih0W2UrNl0sImluamVjdG9ySW5kZXggc2hvdWxkIHBvaW50IHRvIGEgYmxvb20gZmlsdGVyIiksYW4odFtlKzddLCJpbmplY3RvckluZGV4IHNob3VsZCBwb2ludCB0byBhIGJsb29tIGZpbHRlciIpLGFuKHRbZSs4XSwiaW5qZWN0b3JJbmRleCBzaG91bGQgcG9pbnQgdG8gcGFyZW50IGluamVjdG9yIil9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEZvKHQsZSl7Y29uc3Qgbj10Lmhhc093blByb3BlcnR5KEpuKTtpZighbiYmITA9PT1lJiZuZ0Rldk1vZGUpdGhyb3cgbmV3IEVycm9yKGBUeXBlICR7R2UodCl9IGRvZXMgbm90IGhhdmUgJ8m1ZmFjJyBwcm9wZXJ0eS5gKTtyZXR1cm4gbj90W0puXTpudWxsfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBMb3tjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5wcmV2aW91c1ZhbHVlPXQsdGhpcy5jdXJyZW50VmFsdWU9ZSx0aGlzLmZpcnN0Q2hhbmdlPW59aXNGaXJzdENoYW5nZSgpe3JldHVybiB0aGlzLmZpcnN0Q2hhbmdlfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gQm8oKXtyZXR1cm4gVm99ZnVuY3Rpb24gVm8odCl7cmV0dXJuIHQudHlwZS5wcm90b3R5cGUubmdPbkNoYW5nZXMmJih0LnNldElucHV0PVVvKSxqb31mdW5jdGlvbiBqbygpe2NvbnN0IHQ9R28odGhpcyksZT1udWxsPT10P3ZvaWQgMDp0LmN1cnJlbnQ7aWYoZSl7Y29uc3Qgbj10LnByZXZpb3VzO2lmKG49PT1Hbil0LnByZXZpb3VzPWU7ZWxzZSBmb3IobGV0IHQgaW4gZSluW3RdPWVbdF07dC5jdXJyZW50PW51bGwsdGhpcy5uZ09uQ2hhbmdlcyhlKX19ZnVuY3Rpb24gVW8odCxlLG4sbyl7Y29uc3QgaT1Hbyh0KXx8KGZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdC5fX25nU2ltcGxlQ2hhbmdlc19fPWV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykodCx7cHJldmlvdXM6R24sY3VycmVudDpudWxsfSkscj1pLmN1cnJlbnR8fChpLmN1cnJlbnQ9e30pLHM9aS5wcmV2aW91cyxsPXRoaXMuZGVjbGFyZWRJbnB1dHNbbl0sYz1zW2xdO3JbbF09bmV3IExvKGMmJmMuY3VycmVudFZhbHVlLGUscz09PUduKSx0W29dPWV9ZnVuY3Rpb24gR28odCl7cmV0dXJuIHQuX19uZ1NpbXBsZUNoYW5nZXNfX3x8bnVsbH1Cby5uZ0luaGVyaXQ9ITA7bGV0IFdvPW51bGw7Y29uc3QgWW89dD0+e1dvPXR9LHFvPWZ1bmN0aW9uKHQsZSxuKXtudWxsIT1XbyYmV28odCxlLG4pfSxabz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLFhvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGhNTC8iOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KbGV0IEtvO2Z1bmN0aW9uIEpvKCl7cmV0dXJuIHZvaWQgMCE9PUtvP0tvOiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6dm9pZCAwfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi92YXIgUW87ZnVuY3Rpb24gJG8odCl7cmV0dXJuISF0Lmxpc3Rlbn0hKGZ1bmN0aW9uKHQpe3RbdC5JbXBvcnRhbnQ9MV09IkltcG9ydGFudCIsdFt0LkRhc2hDYXNlPTJdPSJEYXNoQ2FzZSJ9KShRb3x8KFFvPXt9KSk7Y29uc3QgdGk9e2NyZWF0ZVJlbmRlcmVyOih0LGUpPT5KbygpfTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIGVpKHQpe2Zvcig7QXJyYXkuaXNBcnJheSh0KTspdD10WzBdO3JldHVybiB0fWZ1bmN0aW9uIG5pKHQsZSl7cmV0dXJuIG5nRGV2TW9kZSYmX24oZSx0KSxuZ0Rldk1vZGUmJmduKHQsZ28sIkV4cGVjdGVkIHRvIGJlIHBhc3QgSEVBREVSX09GRlNFVCIpLGVpKGVbdF0pfWZ1bmN0aW9uIG9pKHQsZSl7bmdEZXZNb2RlJiZPbyh0LGUpLG5nRGV2TW9kZSYmX24oZSx0LmluZGV4KTtjb25zdCBuPWVpKGVbdC5pbmRleF0pO3JldHVybiBuZ0Rldk1vZGUmJiEkbyhlWzExXSkmJnluKG4pLG59ZnVuY3Rpb24gaWkodCxlKXtuZ0Rldk1vZGUmJmZuKGUsLTEsIndyb25nIGluZGV4IGZvciBUTm9kZSIpLG5nRGV2TW9kZSYmbW4oZSx0LmRhdGEubGVuZ3RoLCJ3cm9uZyBpbmRleCBmb3IgVE5vZGUiKTtjb25zdCBuPXQuZGF0YVtlXTtyZXR1cm4gbmdEZXZNb2RlJiZudWxsIT09biYmd28obiksbn1mdW5jdGlvbiBhaSh0LGUpe3JldHVybiBuZ0Rldk1vZGUmJl9uKHQsZSksdFtlXX1mdW5jdGlvbiByaSh0LGUpe25nRGV2TW9kZSYmX24oZSx0KTtjb25zdCBuPWVbdF07cmV0dXJuIHlvKG4pP246blswXX1mdW5jdGlvbiBzaSh0KXtyZXR1cm4gND09KDQmdFsyXSl9ZnVuY3Rpb24gbGkodCl7cmV0dXJuIDEyOD09KDEyOCZ0WzJdKX1mdW5jdGlvbiBjaSh0LGUpe3JldHVybiBudWxsPT1lP251bGw6KG5nRGV2TW9kZSYmX24odCxlKSx0W2VdKX1mdW5jdGlvbiBkaSh0KXt0WzE4XT0wfWZ1bmN0aW9uIHBpKHQsZSl7dFs1XSs9ZTtsZXQgbj10LG89dFszXTtmb3IoO251bGwhPT1vJiYoMT09PWUmJjE9PT1uWzVdfHwtMT09PWUmJjA9PT1uWzVdKTspb1s1XSs9ZSxuPW8sbz1vWzNdfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBtaT17bEZyYW1lOkJpKG51bGwpLGJpbmRpbmdzRW5hYmxlZDohMCxpc0luQ2hlY2tOb0NoYW5nZXNNb2RlOiExfTtmdW5jdGlvbiB1aSgpe3JldHVybiBtaS5iaW5kaW5nc0VuYWJsZWR9ZnVuY3Rpb24gZmkoKXtyZXR1cm4gbWkubEZyYW1lLmxWaWV3fWZ1bmN0aW9uIGdpKCl7cmV0dXJuIG1pLmxGcmFtZS50Vmlld31mdW5jdGlvbiBoaSh0KXtyZXR1cm4gbWkubEZyYW1lLmNvbnRleHRMVmlldz10LHRbOF19ZnVuY3Rpb24gYmkoKXtsZXQgdD15aSgpO2Zvcig7bnVsbCE9PXQmJjY0PT09dC50eXBlOyl0PXQucGFyZW50O3JldHVybiB0fWZ1bmN0aW9uIHlpKCl7cmV0dXJuIG1pLmxGcmFtZS5jdXJyZW50VE5vZGV9ZnVuY3Rpb24gX2koKXtjb25zdCB0PW1pLmxGcmFtZSxlPXQuY3VycmVudFROb2RlO3JldHVybiB0LmlzUGFyZW50P2U6ZS5wYXJlbnR9ZnVuY3Rpb24gQ2kodCxlKXtuZ0Rldk1vZGUmJnQmJlBvKHQsbWkubEZyYW1lLnRWaWV3KTtjb25zdCBuPW1pLmxGcmFtZTtuLmN1cnJlbnRUTm9kZT10LG4uaXNQYXJlbnQ9ZX1mdW5jdGlvbiBNaSgpe3JldHVybiBtaS5sRnJhbWUuaXNQYXJlbnR9ZnVuY3Rpb24gdmkoKXttaS5sRnJhbWUuaXNQYXJlbnQ9ITF9ZnVuY3Rpb24geGkoKXtyZXR1cm4gbWkuaXNJbkNoZWNrTm9DaGFuZ2VzTW9kZX1mdW5jdGlvbiBPaSh0KXttaS5pc0luQ2hlY2tOb0NoYW5nZXNNb2RlPXR9ZnVuY3Rpb24gUGkoKXtjb25zdCB0PW1pLmxGcmFtZTtsZXQgZT10LmJpbmRpbmdSb290SW5kZXg7cmV0dXJuLTE9PT1lJiYoZT10LmJpbmRpbmdSb290SW5kZXg9dC50Vmlldy5iaW5kaW5nU3RhcnRJbmRleCksZX1mdW5jdGlvbiB3aSgpe3JldHVybiBtaS5sRnJhbWUuYmluZGluZ0luZGV4fWZ1bmN0aW9uIGtpKHQpe3JldHVybiBtaS5sRnJhbWUuYmluZGluZ0luZGV4PXR9ZnVuY3Rpb24gU2koKXtyZXR1cm4gbWkubEZyYW1lLmJpbmRpbmdJbmRleCsrfWZ1bmN0aW9uIERpKHQpe2NvbnN0IGU9bWkubEZyYW1lLG49ZS5iaW5kaW5nSW5kZXg7cmV0dXJuIGUuYmluZGluZ0luZGV4PWUuYmluZGluZ0luZGV4K3Qsbn1mdW5jdGlvbiBFaSh0KXttaS5sRnJhbWUuaW5JMThuPXR9ZnVuY3Rpb24gUmkodCxlKXtjb25zdCBuPW1pLmxGcmFtZTtuLmJpbmRpbmdJbmRleD1uLmJpbmRpbmdSb290SW5kZXg9dCxBaShlKX1mdW5jdGlvbiBBaSh0KXttaS5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4PXR9ZnVuY3Rpb24gVGkodCl7Y29uc3QgZT1taS5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4O3JldHVybi0xPT09ZT9udWxsOnRbZV19ZnVuY3Rpb24gTmkoKXtyZXR1cm4gbWkubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4fWZ1bmN0aW9uIHppKHQpe21pLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleD10fWZ1bmN0aW9uIElpKHQpe2NvbnN0IGU9dFsxXTtyZXR1cm4gMj09PWUudHlwZT8obmdEZXZNb2RlJiZobihlLmRlY2xUTm9kZSwiRW1iZWRkZWQgVE5vZGVzIHNob3VsZCBoYXZlIGRlY2xhcmF0aW9uIHBhcmVudHMuIiksZS5kZWNsVE5vZGUpOjE9PT1lLnR5cGU/dFs2XTpudWxsfWZ1bmN0aW9uIEhpKHQsZSxuKXtpZihuZ0Rldk1vZGUmJkVvKHQpLG4mRW4uU2tpcFNlbGYpe25nRGV2TW9kZSYmUG8oZSx0WzFdKTtsZXQgbz1lLGk9dDtmb3IoO25nRGV2TW9kZSYmaG4obywiUGFyZW50IFROb2RlIHNob3VsZCBiZSBkZWZpbmVkIiksbz1vLnBhcmVudCwhKG51bGwhPT1vfHxuJkVuLkhvc3R8fChvPUlpKGkpLG51bGw9PT1vKXx8KG5nRGV2TW9kZSYmaG4oaSwiUGFyZW50IExWaWV3IHNob3VsZCBiZSBkZWZpbmVkIiksaT1pWzE1XSwxMCZvLnR5cGUpKTspO2lmKG51bGw9PT1vKXJldHVybiExO2U9byx0PWl9bmdEZXZNb2RlJiZPbyhlLHQpO2NvbnN0IG89bWkubEZyYW1lPUxpKCk7cmV0dXJuIG8uY3VycmVudFROb2RlPWUsby5sVmlldz10LCEwfWZ1bmN0aW9uIEZpKHQpe25nRGV2TW9kZSYmY24odFswXSx0WzFdLCI/Pz8/IiksbmdEZXZNb2RlJiZFbyh0KTtjb25zdCBlPUxpKCk7bmdEZXZNb2RlJiYobG4oZS5pc1BhcmVudCwhMCwiRXhwZWN0ZWQgY2xlYW4gTEZyYW1lIiksbG4oZS5sVmlldyxudWxsLCJFeHBlY3RlZCBjbGVhbiBMRnJhbWUiKSxsbihlLnRWaWV3LG51bGwsIkV4cGVjdGVkIGNsZWFuIExGcmFtZSIpLGxuKGUuc2VsZWN0ZWRJbmRleCwtMSwiRXhwZWN0ZWQgY2xlYW4gTEZyYW1lIiksbG4oZS5lbGVtZW50RGVwdGhDb3VudCwwLCJFeHBlY3RlZCBjbGVhbiBMRnJhbWUiKSxsbihlLmN1cnJlbnREaXJlY3RpdmVJbmRleCwtMSwiRXhwZWN0ZWQgY2xlYW4gTEZyYW1lIiksbG4oZS5jdXJyZW50TmFtZXNwYWNlLG51bGwsIkV4cGVjdGVkIGNsZWFuIExGcmFtZSIpLGxuKGUuYmluZGluZ1Jvb3RJbmRleCwtMSwiRXhwZWN0ZWQgY2xlYW4gTEZyYW1lIiksbG4oZS5jdXJyZW50UXVlcnlJbmRleCwwLCJFeHBlY3RlZCBjbGVhbiBMRnJhbWUiKSk7Y29uc3Qgbj10WzFdO21pLmxGcmFtZT1lLG5nRGV2TW9kZSYmbi5maXJzdENoaWxkJiZQbyhuLmZpcnN0Q2hpbGQsbiksZS5jdXJyZW50VE5vZGU9bi5maXJzdENoaWxkLGUubFZpZXc9dCxlLnRWaWV3PW4sZS5jb250ZXh0TFZpZXc9dCxlLmJpbmRpbmdJbmRleD1uLmJpbmRpbmdTdGFydEluZGV4LGUuaW5JMThuPSExfWZ1bmN0aW9uIExpKCl7Y29uc3QgdD1taS5sRnJhbWUsZT1udWxsPT09dD9udWxsOnQuY2hpbGQ7cmV0dXJuIG51bGw9PT1lP0JpKHQpOmV9ZnVuY3Rpb24gQmkodCl7Y29uc3QgZT17Y3VycmVudFROb2RlOm51bGwsaXNQYXJlbnQ6ITAsbFZpZXc6bnVsbCx0VmlldzpudWxsLHNlbGVjdGVkSW5kZXg6LTEsY29udGV4dExWaWV3Om51bGwsZWxlbWVudERlcHRoQ291bnQ6MCxjdXJyZW50TmFtZXNwYWNlOm51bGwsY3VycmVudERpcmVjdGl2ZUluZGV4Oi0xLGJpbmRpbmdSb290SW5kZXg6LTEsYmluZGluZ0luZGV4Oi0xLGN1cnJlbnRRdWVyeUluZGV4OjAscGFyZW50OnQsY2hpbGQ6bnVsbCxpbkkxOG46ITF9O3JldHVybiBudWxsIT09dCYmKHQuY2hpbGQ9ZSksZX1mdW5jdGlvbiBWaSgpe2NvbnN0IHQ9bWkubEZyYW1lO3JldHVybiBtaS5sRnJhbWU9dC5wYXJlbnQsdC5jdXJyZW50VE5vZGU9bnVsbCx0LmxWaWV3PW51bGwsdH1jb25zdCBqaT1WaTtmdW5jdGlvbiBVaSgpe2NvbnN0IHQ9VmkoKTt0LmlzUGFyZW50PSEwLHQudFZpZXc9bnVsbCx0LnNlbGVjdGVkSW5kZXg9LTEsdC5jb250ZXh0TFZpZXc9bnVsbCx0LmVsZW1lbnREZXB0aENvdW50PTAsdC5jdXJyZW50RGlyZWN0aXZlSW5kZXg9LTEsdC5jdXJyZW50TmFtZXNwYWNlPW51bGwsdC5iaW5kaW5nUm9vdEluZGV4PS0xLHQuYmluZGluZ0luZGV4PS0xLHQuY3VycmVudFF1ZXJ5SW5kZXg9MH1mdW5jdGlvbiBHaSgpe3JldHVybiBtaS5sRnJhbWUuc2VsZWN0ZWRJbmRleH1mdW5jdGlvbiBXaSh0KXtuZ0Rldk1vZGUmJi0xIT09dCYmZ24odCxnbywiSW5kZXggbXVzdCBiZSBwYXN0IEhFQURFUl9PRkZTRVQgKG9yIC0xKS4iKSxuZ0Rldk1vZGUmJm1uKHQsbWkubEZyYW1lLmxWaWV3Lmxlbmd0aCwiQ2FuJ3Qgc2V0IGluZGV4IHBhc3NlZCBlbmQgb2YgTFZpZXciKSxtaS5sRnJhbWUuc2VsZWN0ZWRJbmRleD10fWZ1bmN0aW9uIFlpKCl7Y29uc3QgdD1taS5sRnJhbWU7cmV0dXJuIGlpKHQudFZpZXcsdC5zZWxlY3RlZEluZGV4KX1mdW5jdGlvbiBxaSgpe21pLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlPVpvfWZ1bmN0aW9uIFppKCl7IShmdW5jdGlvbiB0KCl7bWkubEZyYW1lLmN1cnJlbnROYW1lc3BhY2U9bnVsbH0pKCl9ZnVuY3Rpb24gWGkodCxlKXtuZ0Rldk1vZGUmJkFvKHQpO2ZvcihsZXQgbj1lLmRpcmVjdGl2ZVN0YXJ0LG89ZS5kaXJlY3RpdmVFbmQ7bjxvO24rKyl7Y29uc3QgZT10LmRhdGFbbl07bmdEZXZNb2RlJiZobihlLCJFeHBlY3RpbmcgRGlyZWN0aXZlRGVmIik7Y29uc3Qgbz1lLnR5cGUucHJvdG90eXBlLHtuZ0FmdGVyQ29udGVudEluaXQ6aSxuZ0FmdGVyQ29udGVudENoZWNrZWQ6YSxuZ0FmdGVyVmlld0luaXQ6cixuZ0FmdGVyVmlld0NoZWNrZWQ6cyxuZ09uRGVzdHJveTpsfT1vO2kmJih0LmNvbnRlbnRIb29rc3x8KHQuY29udGVudEhvb2tzPVtdKSkucHVzaCgtbixpKSxhJiYoKHQuY29udGVudEhvb2tzfHwodC5jb250ZW50SG9va3M9W10pKS5wdXNoKG4sYSksKHQuY29udGVudENoZWNrSG9va3N8fCh0LmNvbnRlbnRDaGVja0hvb2tzPVtdKSkucHVzaChuLGEpKSxyJiYodC52aWV3SG9va3N8fCh0LnZpZXdIb29rcz1bXSkpLnB1c2goLW4scikscyYmKCh0LnZpZXdIb29rc3x8KHQudmlld0hvb2tzPVtdKSkucHVzaChuLHMpLCh0LnZpZXdDaGVja0hvb2tzfHwodC52aWV3Q2hlY2tIb29rcz1bXSkpLnB1c2gobixzKSksbnVsbCE9bCYmKHQuZGVzdHJveUhvb2tzfHwodC5kZXN0cm95SG9va3M9W10pKS5wdXNoKG4sbCl9fWZ1bmN0aW9uIEtpKHQsZSxuKXskaSh0LGUsMyxuKX1mdW5jdGlvbiBKaSh0LGUsbixvKXtuZ0Rldk1vZGUmJmNuKG4sMywiSW5pdCBwcmUtb3JkZXIgaG9va3Mgc2hvdWxkIG5vdCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UiKSwoMyZ0WzJdKT09PW4mJiRpKHQsZSxuLG8pfWZ1bmN0aW9uIFFpKHQsZSl7bmdEZXZNb2RlJiZjbihlLDMsIkluaXQgaG9va3MgcGhhc2Ugc2hvdWxkIG5vdCBiZSBpbmNyZW1lbnRlZCBhZnRlciBhbGwgaW5pdCBob29rcyBoYXZlIGJlZW4gcnVuLiIpO2xldCBuPXRbMl07KDMmbik9PT1lJiYobiY9MjA0NyxuKz0xLHRbMl09bil9ZnVuY3Rpb24gJGkodCxlLG4sbyl7bmdEZXZNb2RlJiZsbih4aSgpLCExLCJIb29rcyBzaG91bGQgbmV2ZXIgYmUgcnVuIHdoZW4gaW4gY2hlY2sgbm8gY2hhbmdlcyBtb2RlLiIpO2NvbnN0IGk9bnVsbCE9bz9vOi0xLGE9ZS5sZW5ndGgtMTtsZXQgcj0wO2ZvcihsZXQgcz12b2lkIDAhPT1vPzY1NTM1JnRbMThdOjA7czxhO3MrKylpZigibnVtYmVyIj09dHlwZW9mIGVbcysxXSl7aWYocj1lW3NdLG51bGwhPW8mJnI+PW8pYnJlYWt9ZWxzZSBlW3NdPDAmJih0WzE4XSs9NjU1MzYpLChyPGl8fC0xPT1pKSYmKHRhKHQsbixlLHMpLHRbMThdPSg0Mjk0OTAxNzYwJnRbMThdKStzKzIpLHMrK31mdW5jdGlvbiB0YSh0LGUsbixvKXtjb25zdCBpPW5bb108MCxhPW5bbysxXSxyPXRbaT8tbltvXTpuW29dXTtpZihpKXtpZih0WzJdPj4xMTx0WzE4XT4+MTYmJigzJnRbMl0pPT09ZSl7dFsyXSs9MjA0OCxxbyg0LHIsYSk7dHJ5e2EuY2FsbChyKX1maW5hbGx5e3FvKDUscixhKX19fWVsc2V7cW8oNCxyLGEpO3RyeXthLmNhbGwocil9ZmluYWxseXtxbyg1LHIsYSl9fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgZWE9LTE7Y2xhc3MgbmF7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuZmFjdG9yeT10LHRoaXMucmVzb2x2aW5nPSExLG5nRGV2TW9kZSYmaG4odCwiRmFjdG9yeSBub3Qgc3BlY2lmaWVkIiksbmdEZXZNb2RlJiZsbih0eXBlb2YgdCwiZnVuY3Rpb24iLCJFeHBlY3RlZCBmYWN0b3J5IGZ1bmN0aW9uLiIpLHRoaXMuY2FuU2VlVmlld1Byb3ZpZGVycz1lLHRoaXMuaW5qZWN0SW1wbD1ufX1mdW5jdGlvbiBvYSh0KXtsZXQgZT0iIjtyZXR1cm4gMSZ0JiYoZSs9InxUZXh0IiksMiZ0JiYoZSs9InxFbGVtZW50IiksNCZ0JiYoZSs9InxDb250YWluZXIiKSw4JnQmJihlKz0ifEVsZW1lbnRDb250YWluZXIiKSwxNiZ0JiYoZSs9InxQcm9qZWN0aW9uIiksMzImdCYmKGUrPSJ8SWN1Q29udGFpbmVyIiksNjQmdCYmKGUrPSJ8UGxhY2Vob2xkZXIiKSxlLmxlbmd0aD4wP2Uuc3Vic3RyaW5nKDEpOmV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBpYSh0LGUsbil7aG4odCwic2hvdWxkIGJlIGNhbGxlZCB3aXRoIGEgVE5vZGUiKSwwPT0odC50eXBlJmUpJiZibihufHxgRXhwZWN0ZWQgWyR7b2EoZSl9XSBidXQgZ290ICR7b2EodC50eXBlKX0uYCl9ZnVuY3Rpb24gYWEodCxlLG4pe2NvbnN0IG89JG8odCk7bGV0IGk9MDtmb3IoO2k8bi5sZW5ndGg7KXtjb25zdCBhPW5baV07aWYoIm51bWJlciI9PXR5cGVvZiBhKXtpZigwIT09YSlicmVhaztpKys7Y29uc3Qgcj1uW2krK10scz1uW2krK10sbD1uW2krK107bmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJTZXRBdHRyaWJ1dGUrKyxvP3Quc2V0QXR0cmlidXRlKGUscyxsLHIpOmUuc2V0QXR0cmlidXRlTlMocixzLGwpfWVsc2V7Y29uc3Qgcj1hLHM9blsrK2ldO25nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyU2V0QXR0cmlidXRlKyssc2Eocik/byYmdC5zZXRQcm9wZXJ0eShlLHIscyk6bz90LnNldEF0dHJpYnV0ZShlLHIscyk6ZS5zZXRBdHRyaWJ1dGUocixzKSxpKyt9fXJldHVybiBpfWZ1bmN0aW9uIHJhKHQpe3JldHVybiAzPT09dHx8ND09PXR8fDY9PT10fWZ1bmN0aW9uIHNhKHQpe3JldHVybiA2ND09PXQuY2hhckNvZGVBdCgwKX1mdW5jdGlvbiBsYSh0LGUpe2lmKG51bGw9PT1lfHwwPT09ZS5sZW5ndGgpO2Vsc2UgaWYobnVsbD09PXR8fDA9PT10Lmxlbmd0aCl0PWUuc2xpY2UoKTtlbHNle2xldCBuPS0xO2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtjb25zdCBpPWVbb107Im51bWJlciI9PXR5cGVvZiBpP249aTowPT09bnx8Y2EodCxuLGksbnVsbCwtMT09PW58fDI9PT1uP2VbKytvXTpudWxsKX19cmV0dXJuIHR9ZnVuY3Rpb24gY2EodCxlLG4sbyxpKXtsZXQgYT0wLHI9dC5sZW5ndGg7aWYoLTE9PT1lKXI9LTE7ZWxzZSBmb3IoO2E8dC5sZW5ndGg7KXtjb25zdCBuPXRbYSsrXTtpZigibnVtYmVyIj09dHlwZW9mIG4pe2lmKG49PT1lKXtyPS0xO2JyZWFrfWlmKG4+ZSl7cj1hLTE7YnJlYWt9fX1mb3IoO2E8dC5sZW5ndGg7KXtjb25zdCBlPXRbYV07aWYoIm51bWJlciI9PXR5cGVvZiBlKWJyZWFrO2lmKGU9PT1uKXtpZihudWxsPT09bylyZXR1cm4gdm9pZChudWxsIT09aSYmKHRbYSsxXT1pKSk7aWYobz09PXRbYSsxXSlyZXR1cm4gdm9pZCh0W2ErMl09aSl9YSsrLG51bGwhPT1vJiZhKyssbnVsbCE9PWkmJmErK30tMSE9PXImJih0LnNwbGljZShyLDAsZSksYT1yKzEpLHQuc3BsaWNlKGErKywwLG4pLG51bGwhPT1vJiZ0LnNwbGljZShhKyssMCxvKSxudWxsIT09aSYmdC5zcGxpY2UoYSsrLDAsaSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGRhKHQpe3JldHVybiB0IT09ZWF9ZnVuY3Rpb24gcGEodCl7cmV0dXJuIG5nRGV2TW9kZSYmYW4odCwiTnVtYmVyIGV4cGVjdGVkIiksbmdEZXZNb2RlJiZjbih0LC0xLCJOb3QgYSB2YWxpZCBzdGF0ZS4iKSxuZ0Rldk1vZGUmJmZuKDMyNzY3JnQsZ28sIlBhcmVudCBpbmplY3RvciBtdXN0IGJlIHBvaW50aW5nIHBhc3QgSEVBREVSX09GRlNFVC4iKSwzMjc2NyZ0fWZ1bmN0aW9uIG1hKHQsZSl7bGV0IG49KGZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ+PjE2fSkodCksaT1lO2Zvcig7bj4wOylpPWlbMTVdLG4tLTtyZXR1cm4gaX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovbGV0IHVhPSEwO2Z1bmN0aW9uIGZhKHQpe2NvbnN0IGU9dWE7cmV0dXJuIHVhPXQsZX1sZXQgZ2E9MDtmdW5jdGlvbiBoYSh0LGUpe2NvbnN0IG49eWEodCxlKTtpZigtMSE9PW4pcmV0dXJuIG47Y29uc3Qgbz1lWzFdO28uZmlyc3RDcmVhdGVQYXNzJiYodC5pbmplY3RvckluZGV4PWUubGVuZ3RoLGJhKG8uZGF0YSx0KSxiYShlLG51bGwpLGJhKG8uYmx1ZXByaW50LG51bGwpKTtjb25zdCBpPV9hKHQsZSksYT10LmluamVjdG9ySW5kZXg7aWYoZGEoaSkpe2NvbnN0IHQ9cGEoaSksbj1tYShpLGUpLG89blsxXS5kYXRhO2ZvcihsZXQgaT0wO2k8ODtpKyspZVthK2ldPW5bdCtpXXxvW3QraV19cmV0dXJuIGVbYSs4XT1pLGF9ZnVuY3Rpb24gYmEodCxlKXt0LnB1c2goMCwwLDAsMCwwLDAsMCwwLGUpfWZ1bmN0aW9uIHlhKHQsZSl7cmV0dXJuLTE9PT10LmluamVjdG9ySW5kZXh8fHQucGFyZW50JiZ0LnBhcmVudC5pbmplY3RvckluZGV4PT09dC5pbmplY3RvckluZGV4fHxudWxsPT09ZVt0LmluamVjdG9ySW5kZXgrOF0/LTE6KG5nRGV2TW9kZSYmX24oZSx0LmluamVjdG9ySW5kZXgpLHQuaW5qZWN0b3JJbmRleCl9ZnVuY3Rpb24gX2EodCxlKXtpZih0LnBhcmVudCYmLTEhPT10LnBhcmVudC5pbmplY3RvckluZGV4KXJldHVybiB0LnBhcmVudC5pbmplY3RvckluZGV4O2xldCBuPTAsbz1udWxsLGk9ZTtmb3IoO251bGwhPT1pOyl7Y29uc3QgdD1pWzFdLGU9dC50eXBlO2lmKDI9PT1lPyhuZ0Rldk1vZGUmJmhuKHQuZGVjbFROb2RlLCJFbWJlZGRlZCBUTm9kZXMgc2hvdWxkIGhhdmUgZGVjbGFyYXRpb24gcGFyZW50cy4iKSxvPXQuZGVjbFROb2RlKToxPT09ZT9vPWlbNl06KG5nRGV2TW9kZSYmbG4odC50eXBlLDAsIlJvb3QgdHlwZSBleHBlY3RlZCIpLG89bnVsbCksbnVsbD09PW8pcmV0dXJuIGVhO2lmKG5nRGV2TW9kZSYmbyYmT28obyxpWzE1XSksbisrLGk9aVsxNV0sLTEhPT1vLmluamVjdG9ySW5kZXgpcmV0dXJuIG8uaW5qZWN0b3JJbmRleHxuPDwxNn1yZXR1cm4gZWF9ZnVuY3Rpb24gQ2EodCxlLG4peyEoZnVuY3Rpb24gbyh0LGUsbil7bGV0IG87bmdEZXZNb2RlJiZsbihlLmZpcnN0Q3JlYXRlUGFzcywhMCwiZXhwZWN0ZWQgZmlyc3RDcmVhdGVQYXNzIHRvIGJlIHRydWUiKSwic3RyaW5nIj09dHlwZW9mIG4/bz1uLmNoYXJDb2RlQXQoMCl8fDA6bi5oYXNPd25Qcm9wZXJ0eShRbikmJihvPW5bUW5dKSxudWxsPT1vJiYobz1uW1FuXT1nYSsrKTtjb25zdCBpPTI1NSZvO2UuZGF0YVt0KyhpPj41KV18PTE8PGl9KSh0LGUsbil9ZnVuY3Rpb24gTWEodCxlLG4pe2lmKG4mRW4uT3B0aW9uYWwpcmV0dXJuIHQ7b24oZSwiTm9kZUluamVjdG9yIil9ZnVuY3Rpb24gdmEodCxlLG4sbyl7aWYobiZFbi5PcHRpb25hbCYmdm9pZCAwPT09byYmKG89bnVsbCksMD09KG4mKEVuLlNlbGZ8RW4uSG9zdCkpKXtjb25zdCBpPXRbOV0sYT1Bbih2b2lkIDApO3RyeXtyZXR1cm4gaT9pLmdldChlLG8sbiZFbi5PcHRpb25hbCk6VG4oZSxvLG4mRW4uT3B0aW9uYWwpfWZpbmFsbHl7QW4oYSl9fXJldHVybiBNYShvLGUsbil9ZnVuY3Rpb24geGEodCxlLG4sbz1Fbi5EZWZhdWx0LGkpe2lmKG51bGwhPT10KXtjb25zdCBhPShmdW5jdGlvbiBhKHQpe2lmKG5nRGV2TW9kZSYmaG4odCwidG9rZW4gbXVzdCBiZSBkZWZpbmVkIiksInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0LmNoYXJDb2RlQXQoMCl8fDA7Y29uc3QgZT10Lmhhc093blByb3BlcnR5KFFuKT90W1FuXTp2b2lkIDA7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlP2U+PTA/MjU1JmU6KG5nRGV2TW9kZSYmbG4oZSwtMSwiRXhwZWN0aW5nIHRvIGdldCBTcGVjaWFsIEluamVjdG9yIElkIiksUGEpOmV9KShuKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSl7aWYoIUhpKGUsdCxvKSlyZXR1cm4gbyZFbi5Ib3N0P01hKGksbixvKTp2YShlLG4sbyxpKTt0cnl7Y29uc3QgdD1hKG8pO2lmKG51bGwhPXR8fG8mRW4uT3B0aW9uYWwpcmV0dXJuIHQ7b24obil9ZmluYWxseXtqaSgpfX1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgYSl7bGV0IGk9bnVsbCxyPXlhKHQsZSkscz1lYSxsPW8mRW4uSG9zdD9lWzE2XVs2XTpudWxsO2ZvcigoLTE9PT1yfHxvJkVuLlNraXBTZWxmKSYmKHM9LTE9PT1yP19hKHQsZSk6ZVtyKzhdLHMhPT1lYSYmRWEobywhMSk/KGk9ZVsxXSxyPXBhKHMpLGU9bWEocyxlKSk6cj0tMSk7LTEhPT1yOyl7bmdEZXZNb2RlJiZIbyhlLHIpO2NvbnN0IHQ9ZVsxXTtpZihuZ0Rldk1vZGUmJk9vKHQuZGF0YVtyKzhdLGUpLERhKGEscix0LmRhdGEpKXtjb25zdCB0PXdhKHIsZSxuLGksbyxsKTtpZih0IT09T2EpcmV0dXJuIHR9cz1lW3IrOF0scyE9PWVhJiZFYShvLGVbMV0uZGF0YVtyKzhdPT09bCkmJkRhKGEscixlKT8oaT10LHI9cGEocyksZT1tYShzLGUpKTpyPS0xfX19cmV0dXJuIHZhKGUsbixvLGkpfWNvbnN0IE9hPXt9O2Z1bmN0aW9uIFBhKCl7cmV0dXJuIG5ldyBSYShiaSgpLGZpKCkpfWZ1bmN0aW9uIHdhKHQsZSxuLG8saSxhKXtjb25zdCByPWVbMV0scz1yLmRhdGFbdCs4XSxsPWthKHMscixuLG51bGw9PW8/TW8ocykmJnVhOm8hPXImJjAhPSgzJnMudHlwZSksaSZFbi5Ib3N0JiZhPT09cyk7cmV0dXJuIG51bGwhPT1sP1NhKGUscixsLHMpOk9hfWZ1bmN0aW9uIGthKHQsZSxuLG8saSl7Y29uc3QgYT10LnByb3ZpZGVySW5kZXhlcyxyPWUuZGF0YSxzPTEwNDg1NzUmYSxsPXQuZGlyZWN0aXZlU3RhcnQsYz1hPj4yMCxkPWk/cytjOnQuZGlyZWN0aXZlRW5kO2ZvcihsZXQgdD1vP3M6cytjO3Q8ZDt0Kyspe2NvbnN0IGU9clt0XTtpZih0PGwmJm49PT1lfHx0Pj1sJiZlLnR5cGU9PT1uKXJldHVybiB0fWlmKGkpe2NvbnN0IHQ9cltsXTtpZih0JiZ4byh0KSYmdC50eXBlPT09bilyZXR1cm4gbH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBTYSh0LGUsbixvKXtsZXQgaT10W25dO2NvbnN0IGE9ZS5kYXRhO2lmKChmdW5jdGlvbiByKHQpe3JldHVybiB0IGluc3RhbmNlb2YgbmF9KShpKSl7Y29uc3Qgcj1pO3IucmVzb2x2aW5nJiZlbih0bihhW25dKSk7Y29uc3Qgcz1mYShyLmNhblNlZVZpZXdQcm92aWRlcnMpO3IucmVzb2x2aW5nPSEwO2NvbnN0IGw9ci5pbmplY3RJbXBsP0FuKHIuaW5qZWN0SW1wbCk6bnVsbCxjPUhpKHQsbyxFbi5EZWZhdWx0KTtuZ0Rldk1vZGUmJmxuKGMsITAsIkJlY2F1c2UgZmxhZ3MgZG8gbm90IGNvbnRhaW4gYFNraXBTZWxmJyB3ZSBleHBlY3QgdGhpcyB0byBhbHdheXMgc3VjY2VlZC4iKTt0cnl7aT10W25dPXIuZmFjdG9yeSh2b2lkIDAsYSx0LG8pLGUuZmlyc3RDcmVhdGVQYXNzJiZuPj1vLmRpcmVjdGl2ZVN0YXJ0JiYobmdEZXZNb2RlJiYoZnVuY3Rpb24gcyh0KXt2b2lkIDAhPT10LnR5cGUmJm51bGwhPXQuc2VsZWN0b3JzJiZ2b2lkIDAhPT10LmlucHV0c3x8Ym4oIkV4cGVjdGVkIGEgRGlyZWN0aXZlRGVmL0NvbXBvbmVudERlZiBhbmQgdGhpcyBvYmplY3QgZG9lcyBub3Qgc2VlbSB0byBoYXZlIHRoZSBleHBlY3RlZCBzaGFwZS4iKX0pKGFbbl0pLCgKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIGwodCxlLG4pe25nRGV2TW9kZSYmQW8obik7Y29uc3R7bmdPbkNoYW5nZXM6byxuZ09uSW5pdDppLG5nRG9DaGVjazphfT1lLnR5cGUucHJvdG90eXBlO2lmKG8pe2NvbnN0IG89Vm8oZSk7KG4ucHJlT3JkZXJIb29rc3x8KG4ucHJlT3JkZXJIb29rcz1bXSkpLnB1c2godCxvKSwobi5wcmVPcmRlckNoZWNrSG9va3N8fChuLnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2godCxvKX1pJiYobi5wcmVPcmRlckhvb2tzfHwobi5wcmVPcmRlckhvb2tzPVtdKSkucHVzaCgwLXQsaSksYSYmKChuLnByZU9yZGVySG9va3N8fChuLnByZU9yZGVySG9va3M9W10pKS5wdXNoKHQsYSksKG4ucHJlT3JkZXJDaGVja0hvb2tzfHwobi5wcmVPcmRlckNoZWNrSG9va3M9W10pKS5wdXNoKHQsYSkpfSkobixhW25dLGUpKX1maW5hbGx5e251bGwhPT1sJiZBbihsKSxmYShzKSxyLnJlc29sdmluZz0hMSxqaSgpfX1yZXR1cm4gaX1mdW5jdGlvbiBEYSh0LGUsbil7cmV0dXJuISEobltlKyh0Pj41KV0mMTw8dCl9ZnVuY3Rpb24gRWEodCxlKXtyZXR1cm4hKHQmRW4uU2VsZnx8dCZFbi5Ib3N0JiZlKX1jbGFzcyBSYXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3ROb2RlPXQsdGhpcy5fbFZpZXc9ZX1nZXQodCxlKXtyZXR1cm4geGEodGhpcy5fdE5vZGUsdGhpcy5fbFZpZXcsdCx2b2lkIDAsZSl9fWZ1bmN0aW9uIEFhKHQpe3JldHVybiBObigoKCk9Pntjb25zdCBlPXQucHJvdG90eXBlLmNvbnN0cnVjdG9yLG49ZVtKbl18fFRhKGUpLG89T2JqZWN0LnByb3RvdHlwZTtsZXQgaT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodC5wcm90b3R5cGUpLmNvbnN0cnVjdG9yO2Zvcig7aSYmaSE9PW87KXtjb25zdCB0PWlbSm5dfHxUYShpKTtpZih0JiZ0IT09bilyZXR1cm4gdDtpPU9iamVjdC5nZXRQcm90b3R5cGVPZihpKX1yZXR1cm4gdD0+bmV3IHR9KSl9ZnVuY3Rpb24gVGEodCl7cmV0dXJuIFhlKHQpPygpPT57Y29uc3QgZT1UYShaZSh0KSk7cmV0dXJuIGUmJmUoKX06Rm8odCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIE5hKHQpe3JldHVybihmdW5jdGlvbiBlKHQsbil7aWYobmdEZXZNb2RlJiZpYSh0LDE1KSxuZ0Rldk1vZGUmJmhuKHQsImV4cGVjdGluZyB0Tm9kZSIpLCJjbGFzcyI9PT1uKXJldHVybiB0LmNsYXNzZXM7aWYoInN0eWxlIj09PW4pcmV0dXJuIHQuc3R5bGVzO2NvbnN0IG89dC5hdHRycztpZihvKXtjb25zdCB0PW8ubGVuZ3RoO2xldCBlPTA7Zm9yKDtlPHQ7KXtjb25zdCBpPW9bZV07aWYocmEoaSkpYnJlYWs7aWYoMD09PWkpZSs9MjtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgaSlmb3IoZSsrO2U8dCYmInN0cmluZyI9PXR5cGVvZiBvW2VdOyllKys7ZWxzZXtpZihpPT09bilyZXR1cm4gb1tlKzFdO2UrPTJ9fX1yZXR1cm4gbnVsbH0pKGJpKCksdCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IHphPSJfX2Fubm90YXRpb25zX18iLElhPSJfX3BhcmFtZXRlcnNfXyIsSGE9Il9fcHJvcF9fbWV0YWRhdGFfXyI7ZnVuY3Rpb24gRmEodCxlLG4sbyxpKXtyZXR1cm4gTm4oKCgpPT57Y29uc3QgYT1MYShlKTtmdW5jdGlvbiByKC4uLnQpe2lmKHRoaXMgaW5zdGFuY2VvZiByKXJldHVybiBhLmNhbGwodGhpcywuLi50KSx0aGlzO2NvbnN0IGU9bmV3IHIoLi4udCk7cmV0dXJuIGZ1bmN0aW9uIG4oYSl7cmV0dXJuIGkmJmkoYSwuLi50KSwoYS5oYXNPd25Qcm9wZXJ0eSh6YSk/YVt6YV06T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsemEse3ZhbHVlOltdfSlbemFdKS5wdXNoKGUpLG8mJm8oYSksYX19cmV0dXJuIG4mJihyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSksci5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9dCxyLmFubm90YXRpb25DbHM9cixyfSkpfWZ1bmN0aW9uIExhKHQpe3JldHVybiBmdW5jdGlvbiBlKC4uLm4pe2lmKHQpe2NvbnN0IGU9dCguLi5uKTtmb3IoY29uc3QgdCBpbiBlKXRoaXNbdF09ZVt0XX19fWZ1bmN0aW9uIEJhKHQsZSxuKXtyZXR1cm4gTm4oKCgpPT57Y29uc3Qgbz1MYShlKTtmdW5jdGlvbiBpKC4uLnQpe2lmKHRoaXMgaW5zdGFuY2VvZiBpKXJldHVybiBvLmFwcGx5KHRoaXMsdCksdGhpcztjb25zdCBlPW5ldyBpKC4uLnQpO3JldHVybiBuLmFubm90YXRpb249ZSxuO2Z1bmN0aW9uIG4odCxuLG8pe2NvbnN0IGk9dC5oYXNPd25Qcm9wZXJ0eShJYSk/dFtJYV06T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsSWEse3ZhbHVlOltdfSlbSWFdO2Zvcig7aS5sZW5ndGg8PW87KWkucHVzaChudWxsKTtyZXR1cm4oaVtvXT1pW29dfHxbXSkucHVzaChlKSx0fX1yZXR1cm4gbiYmKGkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpKSxpLnByb3RvdHlwZS5uZ01ldGFkYXRhTmFtZT10LGkuYW5ub3RhdGlvbkNscz1pLGl9KSl9ZnVuY3Rpb24gVmEodCxlLG4sbyl7cmV0dXJuIE5uKCgoKT0+e2NvbnN0IGk9TGEoZSk7ZnVuY3Rpb24gYSguLi50KXtpZih0aGlzIGluc3RhbmNlb2YgYSlyZXR1cm4gaS5hcHBseSh0aGlzLHQpLHRoaXM7Y29uc3QgZT1uZXcgYSguLi50KTtyZXR1cm4gZnVuY3Rpb24gbihpLGEpe2NvbnN0IHI9aS5jb25zdHJ1Y3RvcixzPXIuaGFzT3duUHJvcGVydHkoSGEpP3JbSGFdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLEhhLHt2YWx1ZTp7fX0pW0hhXTtzW2FdPXMuaGFzT3duUHJvcGVydHkoYSkmJnNbYV18fFtdLHNbYV0udW5zaGlmdChlKSxvJiZvKGksYSwuLi50KX19cmV0dXJuIG4mJihhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSksYS5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9dCxhLmFubm90YXRpb25DbHM9YSxhfSkpfWNvbnN0IGphPShmdW5jdGlvbiBVYSgpe3JldHVybiBCYSgiQXR0cmlidXRlIiwodD0+KHthdHRyaWJ1dGVOYW1lOnQsX19OR19FTEVNRU5UX0lEX186KCk9Pk5hKHQpfSkpKX0pKCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBHYXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2Rlc2M9dCx0aGlzLm5nTWV0YWRhdGFOYW1lPSJJbmplY3Rpb25Ub2tlbiIsdGhpcy7JtXByb3Y9dm9pZCAwLCJudW1iZXIiPT10eXBlb2YgZT8oKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZtbihlLDAsIk9ubHkgbmVnYXRpdmUgbnVtYmVycyBhcmUgc3VwcG9ydGVkIGhlcmUiKSx0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPWUpOnZvaWQgMCE9PWUmJih0aGlzLsm1cHJvdj1Nbih7dG9rZW46dGhpcyxwcm92aWRlZEluOmUucHJvdmlkZWRJbnx8InJvb3QiLGZhY3Rvcnk6ZS5mYWN0b3J5fSkpfXRvU3RyaW5nKCl7cmV0dXJuYEluamVjdGlvblRva2VuICR7dGhpcy5fZGVzY31gfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovbmV3IEdhKCJBbmFseXplRm9yRW50cnlDb21wb25lbnRzIik7Y2xhc3MgV2F7fWNvbnN0IFlhPVZhKCJDb250ZW50Q2hpbGRyZW4iLCgodCxlPXt9KT0+T2JqZWN0LmFzc2lnbih7c2VsZWN0b3I6dCxmaXJzdDohMSxpc1ZpZXdRdWVyeTohMSxkZXNjZW5kYW50czohMSxlbWl0RGlzdGluY3RDaGFuZ2VzT25seTohMH0sZSkpLFdhKSxxYT1WYSgiQ29udGVudENoaWxkIiwoKHQsZT17fSk9Pk9iamVjdC5hc3NpZ24oe3NlbGVjdG9yOnQsZmlyc3Q6ITAsaXNWaWV3UXVlcnk6ITEsZGVzY2VuZGFudHM6ITB9LGUpKSxXYSk7VmEoIlZpZXdDaGlsZHJlbiIsKCh0LGU9e30pPT5PYmplY3QuYXNzaWduKHtzZWxlY3Rvcjp0LGZpcnN0OiExLGlzVmlld1F1ZXJ5OiEwLGRlc2NlbmRhbnRzOiEwLGVtaXREaXN0aW5jdENoYW5nZXNPbmx5OiEwfSxlKSksV2EpO2NvbnN0IFphPVZhKCJWaWV3Q2hpbGQiLCgodCxlKT0+T2JqZWN0LmFzc2lnbih7c2VsZWN0b3I6dCxmaXJzdDohMCxpc1ZpZXdRdWVyeTohMCxkZXNjZW5kYW50czohMH0sZSkpLFdhKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCnZhciBYYSxLYTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIEphKHQpe2NvbnN0IGU9am4ubmc7aWYoZSYmZS7JtWNvbXBpbGVyRmFjYWRlKXJldHVybiBlLsm1Y29tcGlsZXJGYWNhZGU7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSl7Y29uc29sZS5lcnJvcihgSklUIGNvbXBpbGF0aW9uIGZhaWxlZCBmb3IgJHt0LmtpbmR9YCx0LnR5cGUpO2xldCBlPWBUaGUgJHt0LmtpbmR9ICcke3QudHlwZS5uYW1lfScgbmVlZHMgdG8gYmUgY29tcGlsZWQgdXNpbmcgdGhlIEpJVCBjb21waWxlciwgYnV0ICdAYW5ndWxhci9jb21waWxlcicgaXMgbm90IGF2YWlsYWJsZS5cblxuYDt0aHJvdyAxPT09dC51c2FnZT8oZSs9YFRoZSAke3Qua2luZH0gaXMgcGFydCBvZiBhIGxpYnJhcnkgdGhhdCBoYXMgYmVlbiBwYXJ0aWFsbHkgY29tcGlsZWQuXG5gLGUrPSJIb3dldmVyLCB0aGUgQW5ndWxhciBMaW5rZXIgaGFzIG5vdCBwcm9jZXNzZWQgdGhlIGxpYnJhcnkgc3VjaCB0aGF0IEpJVCBjb21waWxhdGlvbiBpcyB1c2VkIGFzIGZhbGxiYWNrLlxuIixlKz0iXG4iLGUrPSJJZGVhbGx5LCB0aGUgbGlicmFyeSBpcyBwcm9jZXNzZWQgdXNpbmcgdGhlIEFuZ3VsYXIgTGlua2VyIHRvIGJlY29tZSBmdWxseSBBT1QgY29tcGlsZWQuXG4iKTplKz0iSklUIGNvbXBpbGF0aW9uIGlzIGRpc2NvdXJhZ2VkIGZvciBwcm9kdWN0aW9uIHVzZS1jYXNlcyEgQ29uc2lkZXIgdXNpbmcgQU9UIG1vZGUgaW5zdGVhZC5cbiIsZSs9IkFsdGVybmF0aXZlbHksIHRoZSBKSVQgY29tcGlsZXIgc2hvdWxkIGJlIGxvYWRlZCBieSBib290c3RyYXBwaW5nIHVzaW5nICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnIG9yICdAYW5ndWxhci9wbGF0Zm9ybS1zZXJ2ZXInLFxuIixlKz0ib3IgbWFudWFsbHkgcHJvdmlkZSB0aGUgY29tcGlsZXIgd2l0aCAnaW1wb3J0IFwiQGFuZ3VsYXIvY29tcGlsZXJcIjsnIGJlZm9yZSBib290c3RyYXBwaW5nLiIsbmV3IEVycm9yKGUpfXRocm93IG5ldyBFcnJvcigiSklUIGNvbXBpbGVyIHVuYXZhaWxhYmxlIil9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLyEoZnVuY3Rpb24odCl7dFt0LkRpcmVjdGl2ZT0wXT0iRGlyZWN0aXZlIix0W3QuQ29tcG9uZW50PTFdPSJDb21wb25lbnQiLHRbdC5JbmplY3RhYmxlPTJdPSJJbmplY3RhYmxlIix0W3QuUGlwZT0zXT0iUGlwZSIsdFt0Lk5nTW9kdWxlPTRdPSJOZ01vZHVsZSJ9KShYYXx8KFhhPXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5FbXVsYXRlZD0wXT0iRW11bGF0ZWQiLHRbdC5Ob25lPTJdPSJOb25lIix0W3QuU2hhZG93RG9tPTNdPSJTaGFkb3dEb20ifSkoS2F8fChLYT17fSkpO2NvbnN0IFFhPUZ1bmN0aW9uO2Z1bmN0aW9uICRhKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIHRyKHQsZSl7dm9pZCAwPT09ZSYmKGU9dCk7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2xldCBvPXRbbl07QXJyYXkuaXNBcnJheShvKT8oZT09PXQmJihlPXQuc2xpY2UoMCxuKSksdHIobyxlKSk6ZSE9PXQmJmUucHVzaChvKX1yZXR1cm4gZX1mdW5jdGlvbiBlcih0LGUpe3QuZm9yRWFjaCgodD0+QXJyYXkuaXNBcnJheSh0KT9lcih0LGUpOmUodCkpKX1mdW5jdGlvbiBucih0LGUsbil7ZT49dC5sZW5ndGg/dC5wdXNoKG4pOnQuc3BsaWNlKGUsMCxuKX1mdW5jdGlvbiBvcih0LGUpe3JldHVybiBlPj10Lmxlbmd0aC0xP3QucG9wKCk6dC5zcGxpY2UoZSwxKVswXX1mdW5jdGlvbiBpcih0LGUpe2NvbnN0IG49W107Zm9yKGxldCBvPTA7bzx0O28rKyluLnB1c2goZSk7cmV0dXJuIG59ZnVuY3Rpb24gYXIodCxlLG4pe2xldCBvPXNyKHQsZSk7cmV0dXJuIG8+PTA/dFsxfG9dPW46KG89fm8sKGZ1bmN0aW9uIGkodCxlLG4sbyl7bmdEZXZNb2RlJiZ1bihlLHQubGVuZ3RoLCJDYW4ndCBpbnNlcnQgcGFzdCBhcnJheSBlbmQuIik7bGV0IGk9dC5sZW5ndGg7aWYoaT09ZSl0LnB1c2gobixvKTtlbHNlIGlmKDE9PT1pKXQucHVzaChvLHRbMF0pLHRbMF09bjtlbHNle2ZvcihpLS0sdC5wdXNoKHRbaS0xXSx0W2ldKTtpPmU7KXRbaV09dFtpLTJdLGktLTt0W2VdPW4sdFtlKzFdPW99fSkodCxvLGUsbikpLG99ZnVuY3Rpb24gcnIodCxlKXtjb25zdCBuPXNyKHQsZSk7aWYobj49MClyZXR1cm4gdFsxfG5dfWZ1bmN0aW9uIHNyKHQsZSl7cmV0dXJuKGZ1bmN0aW9uIG4odCxlLG8pe25nRGV2TW9kZSYmbG4oQXJyYXkuaXNBcnJheSh0KSwhMCwiRXhwZWN0aW5nIGFuIGFycmF5Iik7bGV0IGk9MCxhPXQubGVuZ3RoPj5vO2Zvcig7YSE9PWk7KXtjb25zdCBuPWkrKGEtaT4+MSkscj10W248PG9dO2lmKGU9PT1yKXJldHVybiBuPDxvO3I+ZT9hPW46aT1uKzF9cmV0dXJufihhPDxvKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKSh0LGUsMSl9Y29uc3QgbHI9L15mdW5jdGlvblxzK1xTK1woXClccyp7W1xzXFNdK1wuYXBwbHlcKHRoaXMsXHMqKGFyZ3VtZW50c3woPzpbXigpXStcKFxbXF0sKT9bXigpXStcKGFyZ3VtZW50c1wpKVwpLyxjcj0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3svLGRyPS9eY2xhc3NccytbQS1aYS16XGQkX10qXHMqZXh0ZW5kc1xzK1tee10re1tcc1xTXSpjb25zdHJ1Y3RvclxzKlwoLyxwcj0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3tbXHNcU10qY29uc3RydWN0b3JccypcKFwpXHMqe1xzKnN1cGVyXChcLlwuXC5hcmd1bWVudHNcKS87Y2xhc3MgbXJ7Y29uc3RydWN0b3IodCl7dGhpcy5fcmVmbGVjdD10fHxqbi5SZWZsZWN0fWlzUmVmbGVjdGlvbkVuYWJsZWQoKXtyZXR1cm4hMH1mYWN0b3J5KHQpe3JldHVybiguLi5lKT0+bmV3IHQoLi4uZSl9X3ppcFR5cGVzQW5kQW5ub3RhdGlvbnModCxlKXtsZXQgbjtuPWlyKHZvaWQgMD09PXQ/ZS5sZW5ndGg6dC5sZW5ndGgpO2ZvcihsZXQgbz0wO288bi5sZW5ndGg7bysrKW5bb109dm9pZCAwPT09dD9bXTp0W29dJiZ0W29dIT1PYmplY3Q/W3Rbb11dOltdLGUmJm51bGwhPWVbb10mJihuW29dPW5bb10uY29uY2F0KGVbb10pKTtyZXR1cm4gbn1fb3duUGFyYW1ldGVycyh0LGUpe2lmKChmdW5jdGlvbiBuKHQpe3JldHVybiBsci50ZXN0KHQpfHxwci50ZXN0KHQpfHxjci50ZXN0KHQpJiYhZHIudGVzdCh0KX0pKHQudG9TdHJpbmcoKSkpcmV0dXJuIG51bGw7aWYodC5wYXJhbWV0ZXJzJiZ0LnBhcmFtZXRlcnMhPT1lLnBhcmFtZXRlcnMpcmV0dXJuIHQucGFyYW1ldGVycztjb25zdCBvPXQuY3RvclBhcmFtZXRlcnM7aWYobyYmbyE9PWUuY3RvclBhcmFtZXRlcnMpe2NvbnN0IHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG8/bygpOm8sZT10Lm1hcCgodD0+dCYmdC50eXBlKSksbj10Lm1hcCgodD0+dCYmdXIodC5kZWNvcmF0b3JzKSkpO3JldHVybiB0aGlzLl96aXBUeXBlc0FuZEFubm90YXRpb25zKGUsbil9Y29uc3QgaT10Lmhhc093blByb3BlcnR5KElhKSYmdFtJYV0sYT10aGlzLl9yZWZsZWN0JiZ0aGlzLl9yZWZsZWN0LmdldE93bk1ldGFkYXRhJiZ0aGlzLl9yZWZsZWN0LmdldE93bk1ldGFkYXRhKCJkZXNpZ246cGFyYW10eXBlcyIsdCk7cmV0dXJuIGF8fGk/dGhpcy5femlwVHlwZXNBbmRBbm5vdGF0aW9ucyhhLGkpOmlyKHQubGVuZ3RoKX1wYXJhbWV0ZXJzKHQpe2lmKCEkYSh0KSlyZXR1cm5bXTtjb25zdCBlPWZyKHQpO2xldCBuPXRoaXMuX293blBhcmFtZXRlcnModCxlKTtyZXR1cm4gbnx8ZT09PU9iamVjdHx8KG49dGhpcy5wYXJhbWV0ZXJzKGUpKSxufHxbXX1fb3duQW5ub3RhdGlvbnModCxlKXtpZih0LmFubm90YXRpb25zJiZ0LmFubm90YXRpb25zIT09ZS5hbm5vdGF0aW9ucyl7bGV0IGU9dC5hbm5vdGF0aW9ucztyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5hbm5vdGF0aW9ucyYmKGU9ZS5hbm5vdGF0aW9ucyksZX1yZXR1cm4gdC5kZWNvcmF0b3JzJiZ0LmRlY29yYXRvcnMhPT1lLmRlY29yYXRvcnM/dXIodC5kZWNvcmF0b3JzKTp0Lmhhc093blByb3BlcnR5KHphKT90W3phXTpudWxsfWFubm90YXRpb25zKHQpe2lmKCEkYSh0KSlyZXR1cm5bXTtjb25zdCBlPWZyKHQpLG49dGhpcy5fb3duQW5ub3RhdGlvbnModCxlKXx8W107cmV0dXJuKGUhPT1PYmplY3Q/dGhpcy5hbm5vdGF0aW9ucyhlKTpbXSkuY29uY2F0KG4pfV9vd25Qcm9wTWV0YWRhdGEodCxlKXtpZih0LnByb3BNZXRhZGF0YSYmdC5wcm9wTWV0YWRhdGEhPT1lLnByb3BNZXRhZGF0YSl7bGV0IGU9dC5wcm9wTWV0YWRhdGE7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUucHJvcE1ldGFkYXRhJiYoZT1lLnByb3BNZXRhZGF0YSksZX1pZih0LnByb3BEZWNvcmF0b3JzJiZ0LnByb3BEZWNvcmF0b3JzIT09ZS5wcm9wRGVjb3JhdG9ycyl7Y29uc3QgZT10LnByb3BEZWNvcmF0b3JzLG49e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PntuW3RdPXVyKGVbdF0pfSkpLG59cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoSGEpP3RbSGFdOm51bGx9cHJvcE1ldGFkYXRhKHQpe2lmKCEkYSh0KSlyZXR1cm57fTtjb25zdCBlPWZyKHQpLG49e307aWYoZSE9PU9iamVjdCl7Y29uc3QgdD10aGlzLnByb3BNZXRhZGF0YShlKTtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChlPT57bltlXT10W2VdfSkpfWNvbnN0IG89dGhpcy5fb3duUHJvcE1ldGFkYXRhKHQsZSk7cmV0dXJuIG8mJk9iamVjdC5rZXlzKG8pLmZvckVhY2goKHQ9Pntjb25zdCBlPVtdO24uaGFzT3duUHJvcGVydHkodCkmJmUucHVzaCguLi5uW3RdKSxlLnB1c2goLi4ub1t0XSksblt0XT1lfSkpLG59b3duUHJvcE1ldGFkYXRhKHQpe3JldHVybiAkYSh0KSYmdGhpcy5fb3duUHJvcE1ldGFkYXRhKHQsZnIodCkpfHx7fX1oYXNMaWZlY3ljbGVIb29rKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBRYSYmZSBpbiB0LnByb3RvdHlwZX1ndWFyZHModCl7cmV0dXJue319Z2V0dGVyKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oIm8iLCJyZXR1cm4gby4iK3QrIjsiKX1zZXR0ZXIodCl7cmV0dXJuIG5ldyBGdW5jdGlvbigibyIsInYiLCJyZXR1cm4gby4iK3QrIiA9IHY7Iil9bWV0aG9kKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oIm8iLCJhcmdzIixgaWYgKCFvLiR7dH0pIHRocm93IG5ldyBFcnJvcignIiR7dH0iIGlzIHVuZGVmaW5lZCcpO1xuICAgICAgICByZXR1cm4gby4ke3R9LmFwcGx5KG8sIGFyZ3MpO2ApfWltcG9ydFVyaSh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJnQuZmlsZVBhdGg/dC5maWxlUGF0aDpgLi8ke0dlKHQpfWB9cmVzb3VyY2VVcmkodCl7cmV0dXJuYC4vJHtHZSh0KX1gfXJlc29sdmVJZGVudGlmaWVyKHQsZSxuLG8pe3JldHVybiBvfXJlc29sdmVFbnVtKHQsZSl7cmV0dXJuIHRbZV19fWZ1bmN0aW9uIHVyKHQpe3JldHVybiB0P3QubWFwKCh0PT5uZXcoMCx0LnR5cGUuYW5ub3RhdGlvbkNscykoLi4udC5hcmdzP3QuYXJnczpbXSkpKTpbXX1mdW5jdGlvbiBmcih0KXtjb25zdCBlPXQucHJvdG90eXBlP09iamVjdC5nZXRQcm90b3R5cGVPZih0LnByb3RvdHlwZSk6bnVsbDtyZXR1cm4oZT9lLmNvbnN0cnVjdG9yOm51bGwpfHxPYmplY3R9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IGdyPXt9LGhyPS9cbi9nbSxicj0iX19zb3VyY2UiLHlyPWplKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpqZX0pO2xldCBfcjtmdW5jdGlvbiBDcih0KXtjb25zdCBlPV9yO3JldHVybiBfcj10LGV9ZnVuY3Rpb24gTXIodCxlPUVuLkRlZmF1bHQpe2lmKHZvaWQgMD09PV9yKXRocm93IG5ldyBFcnJvcigiaW5qZWN0KCkgbXVzdCBiZSBjYWxsZWQgZnJvbSBhbiBpbmplY3Rpb24gY29udGV4dCIpO3JldHVybiBudWxsPT09X3I/VG4odCx2b2lkIDAsZSk6X3IuZ2V0KHQsZSZFbi5PcHRpb25hbD9udWxsOnZvaWQgMCxlKX1mdW5jdGlvbiB2cih0LGU9RW4uRGVmYXVsdCl7cmV0dXJuKChmdW5jdGlvbiBuKCl7cmV0dXJuIFJufSkoKXx8TXIpKFplKHQpLGUpfWZ1bmN0aW9uIHhyKHQpe2NvbnN0IGU9bmdEZXZNb2RlP2BUaGlzIGNvbnN0cnVjdG9yIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggQW5ndWxhciBEZXBlbmRlbmN5IEluamVjdGlvbiBiZWNhdXNlIGl0cyBkZXBlbmRlbmN5IGF0IGluZGV4ICR7dH0gb2YgdGhlIHBhcmFtZXRlciBsaXN0IGlzIGludmFsaWQuXG5UaGlzIGNhbiBoYXBwZW4gaWYgdGhlIGRlcGVuZGVuY3kgdHlwZSBpcyBhIHByaW1pdGl2ZSBsaWtlIGEgc3RyaW5nIG9yIGlmIGFuIGFuY2VzdG9yIG9mIHRoaXMgY2xhc3MgaXMgbWlzc2luZyBhbiBBbmd1bGFyIGRlY29yYXRvci5cblxuUGxlYXNlIGNoZWNrIHRoYXQgMSkgdGhlIHR5cGUgZm9yIHRoZSBwYXJhbWV0ZXIgYXQgaW5kZXggJHt0fSBpcyBjb3JyZWN0IGFuZCAyKSB0aGUgY29ycmVjdCBBbmd1bGFyIGRlY29yYXRvcnMgYXJlIGRlZmluZWQgZm9yIHRoaXMgY2xhc3MgYW5kIGl0cyBhbmNlc3RvcnMuYDoiaW52YWxpZCI7dGhyb3cgbmV3IEVycm9yKGUpfWNvbnN0IE9yPXZyO2Z1bmN0aW9uIFByKHQpe2NvbnN0IGU9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IG89WmUodFtuXSk7aWYoQXJyYXkuaXNBcnJheShvKSl7aWYoMD09PW8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQXJndW1lbnRzIGFycmF5IG11c3QgaGF2ZSBhcmd1bWVudHMuIik7bGV0IHQsbj1Fbi5EZWZhdWx0O2ZvcihsZXQgZT0wO2U8by5sZW5ndGg7ZSsrKXtjb25zdCBpPW9bZV0sYT1pLl9fTkdfRElfRkxBR19fOyJudW1iZXIiPT10eXBlb2YgYT8tMT09PWE/dD1pLnRva2VuOm58PWE6dD1pfWUucHVzaCh2cih0LG4pKX1lbHNlIGUucHVzaCh2cihvKSl9cmV0dXJuIGV9ZnVuY3Rpb24gd3IodCxlKXtyZXR1cm4gdC5fX05HX0RJX0ZMQUdfXz1lLHQucHJvdG90eXBlLl9fTkdfRElfRkxBR19fPWUsdH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IGtyPXdyKEJhKCJJbmplY3QiLCh0PT4oe3Rva2VuOnR9KSkpLC0xKSxTcj13cihCYSgiT3B0aW9uYWwiKSw4KSxEcj13cihCYSgiU2VsZiIpLDIpLEVyPXdyKEJhKCJTa2lwU2VsZiIpLDQpLFJyPXdyKEJhKCJIb3N0IiksMSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpsZXQgQXI9bnVsbDtmdW5jdGlvbiBUcigpe3JldHVybiBBcj1Bcnx8bmV3IG1yfWZ1bmN0aW9uIE5yKHQpe3JldHVybiB6cihUcigpLnBhcmFtZXRlcnModCkpfWZ1bmN0aW9uIHpyKHQpe3JldHVybiB0Lm1hcCgodD0+KGZ1bmN0aW9uIGUodCl7Y29uc3QgZT17dG9rZW46bnVsbCxhdHRyaWJ1dGU6bnVsbCxob3N0OiExLG9wdGlvbmFsOiExLHNlbGY6ITEsc2tpcFNlbGY6ITF9O2lmKEFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPjApZm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IG89dFtuXTtpZih2b2lkIDA9PT1vKWNvbnRpbnVlO2NvbnN0IGk9T2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO2lmKG8gaW5zdGFuY2VvZiBTcnx8Ik9wdGlvbmFsIj09PWkubmdNZXRhZGF0YU5hbWUpZS5vcHRpb25hbD0hMDtlbHNlIGlmKG8gaW5zdGFuY2VvZiBFcnx8IlNraXBTZWxmIj09PWkubmdNZXRhZGF0YU5hbWUpZS5za2lwU2VsZj0hMDtlbHNlIGlmKG8gaW5zdGFuY2VvZiBEcnx8IlNlbGYiPT09aS5uZ01ldGFkYXRhTmFtZSllLnNlbGY9ITA7ZWxzZSBpZihvIGluc3RhbmNlb2YgUnJ8fCJIb3N0Ij09PWkubmdNZXRhZGF0YU5hbWUpZS5ob3N0PSEwO2Vsc2UgaWYobyBpbnN0YW5jZW9mIGtyKWUudG9rZW49by50b2tlbjtlbHNlIGlmKG8gaW5zdGFuY2VvZiBqYSl7aWYodm9pZCAwPT09by5hdHRyaWJ1dGVOYW1lKXRocm93IG5ldyBFcnJvcigiQXR0cmlidXRlIG5hbWUgbXVzdCBiZSBkZWZpbmVkLiIpO2UuYXR0cmlidXRlPW8uYXR0cmlidXRlTmFtZX1lbHNlIGUudG9rZW49b31lbHNlIGUudG9rZW49dm9pZCAwPT09dHx8QXJyYXkuaXNBcnJheSh0KSYmMD09PXQubGVuZ3RoP251bGw6dDtyZXR1cm4gZX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKSh0KSkpfWxldCBJcj1uZXcgTWFwO2NvbnN0IEhyPW5ldyBTZXQ7ZnVuY3Rpb24gRnIodCl7cmV0dXJuISEodC50ZW1wbGF0ZVVybCYmIXQuaGFzT3duUHJvcGVydHkoInRlbXBsYXRlIil8fHQuc3R5bGVVcmxzJiZ0LnN0eWxlVXJscy5sZW5ndGgpfWZ1bmN0aW9uIExyKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90OnQudGV4dCgpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KbGV0IEJyLFZyO2Z1bmN0aW9uIGpyKCl7aWYodm9pZCAwPT09QnImJihCcj1udWxsLGpuLnRydXN0ZWRUeXBlcykpdHJ5e0JyPWpuLnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3VsYXIiLHtjcmVhdGVIVE1MOnQ9PnQsY3JlYXRlU2NyaXB0OnQ9PnQsY3JlYXRlU2NyaXB0VVJMOnQ9PnR9KX1jYXRjaCh0KXt9cmV0dXJuIEJyfWZ1bmN0aW9uIFVyKHQpe3ZhciBlO3JldHVybihudWxsPT09KGU9anIoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY3JlYXRlSFRNTCh0KSl8fHR9ZnVuY3Rpb24gR3IoKXtpZih2b2lkIDA9PT1WciYmKFZyPW51bGwsam4udHJ1c3RlZFR5cGVzKSl0cnl7VnI9am4udHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciN1bnNhZmUtYnlwYXNzIix7Y3JlYXRlSFRNTDp0PT50LGNyZWF0ZVNjcmlwdDp0PT50LGNyZWF0ZVNjcmlwdFVSTDp0PT50fSl9Y2F0Y2godCl7fXJldHVybiBWcn1mdW5jdGlvbiBXcih0KXt2YXIgZTtyZXR1cm4obnVsbD09PShlPUdyKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNyZWF0ZUhUTUwodCkpfHx0fWZ1bmN0aW9uIFlyKHQpe3ZhciBlO3JldHVybihudWxsPT09KGU9R3IoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY3JlYXRlU2NyaXB0KHQpKXx8dH1mdW5jdGlvbiBxcih0KXt2YXIgZTtyZXR1cm4obnVsbD09PShlPUdyKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNyZWF0ZVNjcmlwdFVSTCh0KSl8fHR9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFpye2NvbnN0cnVjdG9yKHQpe3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eT10fXRvU3RyaW5nKCl7cmV0dXJuYFNhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6ICR7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5fSAoc2VlIGh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpYH19Y2xhc3MgWHIgZXh0ZW5kcyBacntnZXRUeXBlTmFtZSgpe3JldHVybiJIVE1MIn19Y2xhc3MgS3IgZXh0ZW5kcyBacntnZXRUeXBlTmFtZSgpe3JldHVybiJTdHlsZSJ9fWNsYXNzIEpyIGV4dGVuZHMgWnJ7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iU2NyaXB0In19Y2xhc3MgUXIgZXh0ZW5kcyBacntnZXRUeXBlTmFtZSgpe3JldHVybiJVUkwifX1jbGFzcyAkciBleHRlbmRzIFpye2dldFR5cGVOYW1lKCl7cmV0dXJuIlJlc291cmNlVVJMIn19ZnVuY3Rpb24gdHModCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBacj90LmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk6dH1mdW5jdGlvbiBlcyh0LGUpe2NvbnN0IG49bnModCk7aWYobnVsbCE9biYmbiE9PWUpe2lmKCJSZXNvdXJjZVVSTCI9PT1uJiYiVVJMIj09PWUpcmV0dXJuITA7dGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhIHNhZmUgJHtlfSwgZ290IGEgJHtufSAoc2VlIGh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpYCl9cmV0dXJuIG49PT1lfWZ1bmN0aW9uIG5zKHQpe3JldHVybiB0IGluc3RhbmNlb2YgWnImJnQuZ2V0VHlwZU5hbWUoKXx8bnVsbH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIG9zKHQpe2NvbnN0IGU9bmV3IGFzKHQpO3JldHVybihmdW5jdGlvbiBuKCl7dHJ5e3JldHVybiEhKG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoVXIoIiIpLCJ0ZXh0L2h0bWwiKX1jYXRjaCh0KXtyZXR1cm4hMX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykoKT9uZXcgaXMoZSk6ZX1jbGFzcyBpc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXI9dH1nZXRJbmVydEJvZHlFbGVtZW50KHQpe3Q9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+Iit0O3RyeXtjb25zdCBlPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKFVyKHQpLCJ0ZXh0L2h0bWwiKS5ib2R5O3JldHVybiBudWxsPT09ZT90aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXIuZ2V0SW5lcnRCb2R5RWxlbWVudCh0KTooZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpLGUpfWNhdGNoKHQpe3JldHVybiBudWxsfX19Y2xhc3MgYXN7Y29uc3RydWN0b3IodCl7aWYodGhpcy5kZWZhdWx0RG9jPXQsdGhpcy5pbmVydERvY3VtZW50PXRoaXMuZGVmYXVsdERvYy5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoInNhbml0aXphdGlvbi1pbmVydCIpLG51bGw9PXRoaXMuaW5lcnREb2N1bWVudC5ib2R5KXtjb25zdCB0PXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJodG1sIik7dGhpcy5pbmVydERvY3VtZW50LmFwcGVuZENoaWxkKHQpO2NvbnN0IGU9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvZHkiKTt0LmFwcGVuZENoaWxkKGUpfX1nZXRJbmVydEJvZHlFbGVtZW50KHQpe2NvbnN0IGU9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7aWYoImNvbnRlbnQiaW4gZSlyZXR1cm4gZS5pbm5lckhUTUw9VXIodCksZTtjb25zdCBuPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7cmV0dXJuIG4uaW5uZXJIVE1MPVVyKHQpLHRoaXMuZGVmYXVsdERvYy5kb2N1bWVudE1vZGUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKG4pLG59c3RyaXBDdXN0b21Oc0F0dHJzKHQpe2NvbnN0IGU9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgbj1lLmxlbmd0aC0xOzA8bjtuLS0pe2NvbnN0IG89ZS5pdGVtKG4pLm5hbWU7InhtbG5zOm5zMSIhPT1vJiYwIT09by5pbmRleE9mKCJuczE6Iil8fHQucmVtb3ZlQXR0cmlidXRlKG8pfWxldCBuPXQuZmlyc3RDaGlsZDtmb3IoO247KW4ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdGhpcy5zdHJpcEN1c3RvbU5zQXR0cnMobiksbj1uLm5leHRTaWJsaW5nfX1jb25zdCBycz0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwfHRlbHxmaWxlfHNtcyk6fFteJjovPyNdKig/OlsvPyNdfCQpKS9naSxzcz0vXmRhdGE6KD86aW1hZ2VcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5nfHRpZmZ8d2VicCl8dmlkZW9cLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtKXxhdWRpb1wvKD86bXAzfG9nYXxvZ2d8b3B1cykpO2Jhc2U2NCxbYS16MC05K1wvXSs9KiQvaTtmdW5jdGlvbiBscyh0KXtyZXR1cm4odD1TdHJpbmcodCkpLm1hdGNoKHJzKXx8dC5tYXRjaChzcyk/dDooKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZjb25zb2xlLndhcm4oYFdBUk5JTkc6IHNhbml0aXppbmcgdW5zYWZlIFVSTCB2YWx1ZSAke3R9IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcylgKSwidW5zYWZlOiIrdCl9ZnVuY3Rpb24gY3ModCl7cmV0dXJuKHQ9U3RyaW5nKHQpKS5zcGxpdCgiLCIpLm1hcCgodD0+bHModC50cmltKCkpKSkuam9pbigiLCAiKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gZHModCl7Y29uc3QgZT17fTtmb3IoY29uc3QgbiBvZiB0LnNwbGl0KCIsIikpZVtuXT0hMDtyZXR1cm4gZX1mdW5jdGlvbiBwcyguLi50KXtjb25zdCBlPXt9O2Zvcihjb25zdCBuIG9mIHQpZm9yKGNvbnN0IHQgaW4gbiluLmhhc093blByb3BlcnR5KHQpJiYoZVt0XT0hMCk7cmV0dXJuIGV9Y29uc3QgbXM9ZHMoImFyZWEsYnIsY29sLGhyLGltZyx3YnIiKSx1cz1kcygiY29sZ3JvdXAsZGQsZHQsbGkscCx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0ciIpLGZzPWRzKCJycCxydCIpLGdzPXBzKGZzLHVzKSxocz1wcyh1cyxkcygiYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJsb2NrcXVvdGUsY2FwdGlvbixjZW50ZXIsZGVsLGRldGFpbHMsZGlhbG9nLGRpcixkaXYsZGwsZmlndXJlLGZpZ2NhcHRpb24sZm9vdGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhlYWRlcixoZ3JvdXAsaHIsaW5zLG1haW4sbWFwLG1lbnUsbmF2LG9sLHByZSxzZWN0aW9uLHN1bW1hcnksdGFibGUsdWwiKSksYnM9cHMoZnMsZHMoImEsYWJicixhY3JvbnltLGF1ZGlvLGIsYmRpLGJkbyxiaWcsYnIsY2l0ZSxjb2RlLGRlbCxkZm4sZW0sZm9udCxpLGltZyxpbnMsa2JkLGxhYmVsLG1hcCxtYXJrLHBpY3R1cmUscSxydWJ5LHJwLHJ0LHMsc2FtcCxzbWFsbCxzb3VyY2Usc3BhbixzdHJpa2Usc3Ryb25nLHN1YixzdXAsdGltZSx0cmFjayx0dCx1LHZhcix2aWRlbyIpKSx5cz1wcyhtcyxocyxicyxncyksX3M9ZHMoImJhY2tncm91bmQsY2l0ZSxocmVmLGl0ZW10eXBlLGxvbmdkZXNjLHBvc3RlcixzcmMseGxpbms6aHJlZiIpLENzPWRzKCJzcmNzZXQiKSxNcz1kcygiYWJicixhY2Nlc3NrZXksYWxpZ24sYWx0LGF1dG9wbGF5LGF4aXMsYmdjb2xvcixib3JkZXIsY2VsbHBhZGRpbmcsY2VsbHNwYWNpbmcsY2xhc3MsY2xlYXIsY29sb3IsY29scyxjb2xzcGFuLGNvbXBhY3QsY29udHJvbHMsY29vcmRzLGRhdGV0aW1lLGRlZmF1bHQsZGlyLGRvd25sb2FkLGZhY2UsaGVhZGVycyxoZWlnaHQsaGlkZGVuLGhyZWZsYW5nLGhzcGFjZSxpc21hcCxpdGVtc2NvcGUsaXRlbXByb3Asa2luZCxsYWJlbCxsYW5nLGxhbmd1YWdlLGxvb3AsbWVkaWEsbXV0ZWQsbm9ocmVmLG5vd3JhcCxvcGVuLHByZWxvYWQscmVsLHJldixyb2xlLHJvd3Mscm93c3BhbixydWxlcyxzY29wZSxzY3JvbGxpbmcsc2hhcGUsc2l6ZSxzaXplcyxzcGFuLHNyY2xhbmcsc3RhcnQsc3VtbWFyeSx0YWJpbmRleCx0YXJnZXQsdGl0bGUsdHJhbnNsYXRlLHR5cGUsdXNlbWFwLHZhbGlnbix2YWx1ZSx2c3BhY2Usd2lkdGgiKSx2cz1kcygiYXJpYS1hY3RpdmVkZXNjZW5kYW50LGFyaWEtYXRvbWljLGFyaWEtYXV0b2NvbXBsZXRlLGFyaWEtYnVzeSxhcmlhLWNoZWNrZWQsYXJpYS1jb2xjb3VudCxhcmlhLWNvbGluZGV4LGFyaWEtY29sc3BhbixhcmlhLWNvbnRyb2xzLGFyaWEtY3VycmVudCxhcmlhLWRlc2NyaWJlZGJ5LGFyaWEtZGV0YWlscyxhcmlhLWRpc2FibGVkLGFyaWEtZHJvcGVmZmVjdCxhcmlhLWVycm9ybWVzc2FnZSxhcmlhLWV4cGFuZGVkLGFyaWEtZmxvd3RvLGFyaWEtZ3JhYmJlZCxhcmlhLWhhc3BvcHVwLGFyaWEtaGlkZGVuLGFyaWEtaW52YWxpZCxhcmlhLWtleXNob3J0Y3V0cyxhcmlhLWxhYmVsLGFyaWEtbGFiZWxsZWRieSxhcmlhLWxldmVsLGFyaWEtbGl2ZSxhcmlhLW1vZGFsLGFyaWEtbXVsdGlsaW5lLGFyaWEtbXVsdGlzZWxlY3RhYmxlLGFyaWEtb3JpZW50YXRpb24sYXJpYS1vd25zLGFyaWEtcGxhY2Vob2xkZXIsYXJpYS1wb3NpbnNldCxhcmlhLXByZXNzZWQsYXJpYS1yZWFkb25seSxhcmlhLXJlbGV2YW50LGFyaWEtcmVxdWlyZWQsYXJpYS1yb2xlZGVzY3JpcHRpb24sYXJpYS1yb3djb3VudCxhcmlhLXJvd2luZGV4LGFyaWEtcm93c3BhbixhcmlhLXNlbGVjdGVkLGFyaWEtc2V0c2l6ZSxhcmlhLXNvcnQsYXJpYS12YWx1ZW1heCxhcmlhLXZhbHVlbWluLGFyaWEtdmFsdWVub3csYXJpYS12YWx1ZXRleHQiKSx4cz1wcyhfcyxDcyxNcyx2cyksT3M9ZHMoInNjcmlwdCxzdHlsZSx0ZW1wbGF0ZSIpO2NsYXNzIFBze2NvbnN0cnVjdG9yKCl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITEsdGhpcy5idWY9W119c2FuaXRpemVDaGlsZHJlbih0KXtsZXQgZT10LmZpcnN0Q2hpbGQsbj0hMDtmb3IoO2U7KWlmKGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERT9uPXRoaXMuc3RhcnRFbGVtZW50KGUpOmUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT90aGlzLmNoYXJzKGUubm9kZVZhbHVlKTp0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCxuJiZlLmZpcnN0Q2hpbGQpZT1lLmZpcnN0Q2hpbGQ7ZWxzZSBmb3IoO2U7KXtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuZW5kRWxlbWVudChlKTtsZXQgdD10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUubmV4dFNpYmxpbmcpO2lmKHQpe2U9dDticmVha31lPXRoaXMuY2hlY2tDbG9iYmVyZWRFbGVtZW50KGUsZS5wYXJlbnROb2RlKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9c3RhcnRFbGVtZW50KHQpe2NvbnN0IGU9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKCF5cy5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gdGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITAsIU9zLmhhc093blByb3BlcnR5KGUpO3RoaXMuYnVmLnB1c2goIjwiKSx0aGlzLmJ1Zi5wdXNoKGUpO2NvbnN0IG49dC5hdHRyaWJ1dGVzO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtjb25zdCBlPW4uaXRlbSh0KSxvPWUubmFtZSxpPW8udG9Mb3dlckNhc2UoKTtpZigheHMuaGFzT3duUHJvcGVydHkoaSkpe3RoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwO2NvbnRpbnVlfWxldCBhPWUudmFsdWU7X3NbaV0mJihhPWxzKGEpKSxDc1tpXSYmKGE9Y3MoYSkpLHRoaXMuYnVmLnB1c2goIiAiLG8sJz0iJyxTcyhhKSwnIicpfXJldHVybiB0aGlzLmJ1Zi5wdXNoKCI+IiksITB9ZW5kRWxlbWVudCh0KXtjb25zdCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTt5cy5oYXNPd25Qcm9wZXJ0eShlKSYmIW1zLmhhc093blByb3BlcnR5KGUpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5wdXNoKGUpLHRoaXMuYnVmLnB1c2goIj4iKSl9Y2hhcnModCl7dGhpcy5idWYucHVzaChTcyh0KSl9Y2hlY2tDbG9iYmVyZWRFbGVtZW50KHQsZSl7aWYoZSYmKHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogJHt0Lm91dGVySFRNTH1gKTtyZXR1cm4gZX19Y29uc3Qgd3M9L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXS9nLGtzPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiBTcyh0KXtyZXR1cm4gdC5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSh3cywoZnVuY3Rpb24odCl7cmV0dXJuIiYjIisoMTAyNCoodC5jaGFyQ29kZUF0KDApLTU1Mjk2KSsodC5jaGFyQ29kZUF0KDEpLTU2MzIwKSs2NTUzNikrIjsifSkpLnJlcGxhY2Uoa3MsKGZ1bmN0aW9uKHQpe3JldHVybiImIyIrdC5jaGFyQ29kZUF0KDApKyI7In0pKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKX1sZXQgRHM7ZnVuY3Rpb24gRXModCxlKXtsZXQgbj1udWxsO3RyeXtEcz1Ec3x8b3ModCk7bGV0IG89ZT9TdHJpbmcoZSk6IiI7bj1Ecy5nZXRJbmVydEJvZHlFbGVtZW50KG8pO2xldCBpPTUsYT1vO2Rve2lmKDA9PT1pKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUiKTtpLS0sbz1hLGE9bi5pbm5lckhUTUwsbj1Ecy5nZXRJbmVydEJvZHlFbGVtZW50KG8pfXdoaWxlKG8hPT1hKTtjb25zdCByPW5ldyBQcyxzPXIuc2FuaXRpemVDaGlsZHJlbihScyhuKXx8bik7cmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZyLnNhbml0aXplZFNvbWV0aGluZyYmY29uc29sZS53YXJuKCJXQVJOSU5HOiBzYW5pdGl6aW5nIEhUTUwgc3RyaXBwZWQgc29tZSBjb250ZW50LCBzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcyIpLFVyKHMpfWZpbmFsbHl7aWYobil7Y29uc3QgdD1ScyhuKXx8bjtmb3IoO3QuZmlyc3RDaGlsZDspdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpfX19ZnVuY3Rpb24gUnModCl7cmV0dXJuImNvbnRlbnQiaW4gdCYmKGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PXQubm9kZU5hbWV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykodCk/dC5jb250ZW50Om51bGx9dmFyIEFzO2Z1bmN0aW9uIFRzKHQpe2NvbnN0IGU9enMoKTtyZXR1cm4gZT9lLnNhbml0aXplKEFzLlVSTCx0KXx8IiI6ZXModCwiVVJMIik/dHModCk6bHMoJGUodCkpfWZ1bmN0aW9uIE5zKHQpe2NvbnN0IGU9enMoKTtpZihlKXJldHVybiBxcihlLnNhbml0aXplKEFzLlJFU09VUkNFX1VSTCx0KXx8IiIpO2lmKGVzKHQsIlJlc291cmNlVVJMIikpcmV0dXJuIHFyKHRzKHQpKTt0aHJvdyBuZXcgRXJyb3IoInVuc2FmZSB2YWx1ZSB1c2VkIGluIGEgcmVzb3VyY2UgVVJMIGNvbnRleHQgKHNlZSBodHRwczovL2cuY28vbmcvc2VjdXJpdHkjeHNzKSIpfWZ1bmN0aW9uIHpzKCl7Y29uc3QgdD1maSgpO3JldHVybiB0JiZ0WzEyXX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gSXModCl7bGV0IGU9QnModCk7aWYoZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3Qgbj1lO2xldCBvLGksYTtpZigoZnVuY3Rpb24gbih0KXtyZXR1cm4gdCYmdC5jb25zdHJ1Y3RvciYmdC5jb25zdHJ1Y3Rvci7JtWNtcH0pKHQpKXtpZihvPUdzKG4sdCksLTE9PW8pdGhyb3cgbmV3IEVycm9yKCJUaGUgcHJvdmlkZWQgY29tcG9uZW50IHdhcyBub3QgZm91bmQgaW4gdGhlIGFwcGxpY2F0aW9uIik7aT10fWVsc2UgaWYoKGZ1bmN0aW9uIG8odCl7cmV0dXJuIHQmJnQuY29uc3RydWN0b3ImJnQuY29uc3RydWN0b3IuybVkaXJ9KSh0KSl7aWYobz0oZnVuY3Rpb24gaSh0LGUpe2xldCBuPXRbMV0uZmlyc3RDaGlsZDtmb3IoO247KXtjb25zdCBvPW4uZGlyZWN0aXZlRW5kO2ZvcihsZXQgaT1uLmRpcmVjdGl2ZVN0YXJ0O2k8bztpKyspaWYodFtpXT09PWUpcmV0dXJuIG4uaW5kZXg7bj1VcyhuKX1yZXR1cm4tMX0pKG4sdCksLTE9PW8pdGhyb3cgbmV3IEVycm9yKCJUaGUgcHJvdmlkZWQgZGlyZWN0aXZlIHdhcyBub3QgZm91bmQgaW4gdGhlIGFwcGxpY2F0aW9uIik7YT1XcyhvLG4sITEpfWVsc2UgaWYobz1qcyhuLHQpLC0xPT1vKXJldHVybiBudWxsO2NvbnN0IHI9ZWkobltvXSkscz1CcyhyKSxsPXMmJiFBcnJheS5pc0FycmF5KHMpP3M6SHMobixvLHIpO2lmKGkmJnZvaWQgMD09PWwuY29tcG9uZW50JiYobC5jb21wb25lbnQ9aSxMcyhsLmNvbXBvbmVudCxsKSksYSYmdm9pZCAwPT09bC5kaXJlY3RpdmVzKXtsLmRpcmVjdGl2ZXM9YTtmb3IobGV0IHQ9MDt0PGEubGVuZ3RoO3QrKylMcyhhW3RdLGwpfUxzKGwubmF0aXZlLGwpLGU9bH19ZWxzZXtjb25zdCBuPXQ7bmdEZXZNb2RlJiZ5bihuKTtsZXQgbz1uO2Zvcig7bz1vLnBhcmVudE5vZGU7KXtjb25zdCB0PUJzKG8pO2lmKHQpe2xldCBvO2lmKG89QXJyYXkuaXNBcnJheSh0KT90OnQubFZpZXcsIW8pcmV0dXJuIG51bGw7Y29uc3QgaT1qcyhvLG4pO2lmKGk+PTApe2NvbnN0IHQ9ZWkob1tpXSksbj1IcyhvLGksdCk7THModCxuKSxlPW47YnJlYWt9fX19cmV0dXJuIGV8fG51bGx9ZnVuY3Rpb24gSHModCxlLG4pe3JldHVybntsVmlldzp0LG5vZGVJbmRleDplLG5hdGl2ZTpuLGNvbXBvbmVudDp2b2lkIDAsZGlyZWN0aXZlczp2b2lkIDAsbG9jYWxSZWZzOnZvaWQgMH19ZnVuY3Rpb24gRnModCl7bGV0IGUsbj1Ccyh0KTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdCBvPUdzKG4sdCk7ZT1yaShvLG4pO2NvbnN0IGk9SHMobixvLGVbMF0pO2kuY29tcG9uZW50PXQsTHModCxpKSxMcyhpLm5hdGl2ZSxpKX1lbHNlIGU9cmkobi5ub2RlSW5kZXgsbi5sVmlldyk7cmV0dXJuIGV9ZnVuY3Rpb24gTHModCxlKXtuZ0Rldk1vZGUmJmhuKHQsIlRhcmdldCBleHBlY3RlZCIpLHQuX19uZ0NvbnRleHRfXz1lfWZ1bmN0aW9uIEJzKHQpe3JldHVybiBuZ0Rldk1vZGUmJmhuKHQsIlRhcmdldCBleHBlY3RlZCIpLHQuX19uZ0NvbnRleHRfX3x8bnVsbH1mdW5jdGlvbiBWcyh0KXtjb25zdCBlPUJzKHQpO3JldHVybiBlP0FycmF5LmlzQXJyYXkoZSk/ZTplLmxWaWV3Om51bGx9ZnVuY3Rpb24ganModCxlKXtjb25zdCBuPXRbMV07Zm9yKGxldCBvPWdvO288bi5iaW5kaW5nU3RhcnRJbmRleDtvKyspaWYoZWkodFtvXSk9PT1lKXJldHVybiBvO3JldHVybi0xfWZ1bmN0aW9uIFVzKHQpe2lmKHQuY2hpbGQpcmV0dXJuIHQuY2hpbGQ7aWYodC5uZXh0KXJldHVybiB0Lm5leHQ7Zm9yKDt0LnBhcmVudCYmIXQucGFyZW50Lm5leHQ7KXQ9dC5wYXJlbnQ7cmV0dXJuIHQucGFyZW50JiZ0LnBhcmVudC5uZXh0fWZ1bmN0aW9uIEdzKHQsZSl7Y29uc3Qgbj10WzFdLmNvbXBvbmVudHM7aWYobilmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKyl7Y29uc3QgaT1uW29dO2lmKHJpKGksdClbOF09PT1lKXJldHVybiBpfWVsc2UgaWYocmkoZ28sdClbOF09PT1lKXJldHVybiBnbztyZXR1cm4tMX1mdW5jdGlvbiBXcyh0LGUsbil7Y29uc3Qgbz1lWzFdLmRhdGFbdF07bGV0IGk9by5kaXJlY3RpdmVTdGFydDtyZXR1cm4gMD09aT9XbjooIW4mJjImby5mbGFncyYmaSsrLGUuc2xpY2UoaSxvLmRpcmVjdGl2ZUVuZCkpfWZ1bmN0aW9uIFlzKHQpe3JldHVybiB0Lm5nT3JpZ2luYWxFcnJvcn1mdW5jdGlvbiBxcyh0LC4uLmUpe3QuZXJyb3IoLi4uZSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLyEoZnVuY3Rpb24odCl7dFt0Lk5PTkU9MF09Ik5PTkUiLHRbdC5IVE1MPTFdPSJIVE1MIix0W3QuU1RZTEU9Ml09IlNUWUxFIix0W3QuU0NSSVBUPTNdPSJTQ1JJUFQiLHRbdC5VUkw9NF09IlVSTCIsdFt0LlJFU09VUkNFX1VSTD01XT0iUkVTT1VSQ0VfVVJMIn0pKEFzfHwoQXM9e30pKTtjbGFzcyBac3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NvbnNvbGU9Y29uc29sZX1oYW5kbGVFcnJvcih0KXtjb25zdCBlPXRoaXMuX2ZpbmRPcmlnaW5hbEVycm9yKHQpLG49dGhpcy5fZmluZENvbnRleHQodCksbz0oZnVuY3Rpb24gaSh0KXtyZXR1cm4gdCYmdC5uZ0Vycm9yTG9nZ2VyfHxxc30pKHQpO28odGhpcy5fY29uc29sZSwiRVJST1IiLHQpLGUmJm8odGhpcy5fY29uc29sZSwiT1JJR0lOQUwgRVJST1IiLGUpLG4mJm8odGhpcy5fY29uc29sZSwiRVJST1IgQ09OVEVYVCIsbil9X2ZpbmRDb250ZXh0KHQpe3JldHVybiB0PyhmdW5jdGlvbiBlKHQpe3JldHVybiB0Lm5nRGVidWdDb250ZXh0fSkodCl8fHRoaXMuX2ZpbmRDb250ZXh0KFlzKHQpKTpudWxsfV9maW5kT3JpZ2luYWxFcnJvcih0KXtsZXQgZT10JiZZcyh0KTtmb3IoO2UmJllzKGUpOyllPVlzKGUpO3JldHVybiBlfHxudWxsfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgWHM9e25hbWU6ImN1c3RvbS1lbGVtZW50cyJ9LEtzPXtuYW1lOiJuby1lcnJvcnMtc2NoZW1hIn0sSnM9L14+fF4tPnw8IS0tfC0tPnwtLSE+fDwhLSQvZyxRcz0vKDx8PikvO2Z1bmN0aW9uICRzKHQpe3JldHVybiB0LnJlcGxhY2UoSnMsKHQ9PnQucmVwbGFjZShRcywi4oCLJDHigIsiKSkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiB0bCh0KXtpZighbmdEZXZNb2RlKXRocm93IG5ldyBFcnJvcigiTG9va3MgbGlrZSB3ZSBhcmUgaW4gJ3Byb2QgbW9kZScsIGJ1dCB3ZSBhcmUgY3JlYXRpbmcgYSBuYW1lZCBBcnJheSB0eXBlLCB3aGljaCBpcyB3cm9uZyEgQ2hlY2sgeW91ciBjb2RlIik7dHJ5e3JldHVybihmdW5jdGlvbiBlKC4uLnQpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlKXRocm93IG5ldyBFcnJvcigibmV3VHJ1c3RlZEZ1bmN0aW9uRm9yRGV2IHNob3VsZCBuZXZlciBiZSBjYWxsZWQgaW4gcHJvZHVjdGlvbiIpO2lmKCFqbi50cnVzdGVkVHlwZXMpcmV0dXJuIG5ldyBGdW5jdGlvbiguLi50KTtjb25zdCBlPWAoZnVuY3Rpb24gYW5vbnltb3VzKCR7dC5zbGljZSgwLC0xKS5qb2luKCIsIil9XG4pIHsgJHt0W3QubGVuZ3RoLTFdfVxufSlgLG49am4uZXZhbCgoZnVuY3Rpb24gbyh0KXt2YXIgZTtyZXR1cm4obnVsbD09PShlPWpyKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNyZWF0ZVNjcmlwdCh0KSl8fHR9KShlKSk7cmV0dXJuIHZvaWQgMD09PW4uYmluZD9uZXcgRnVuY3Rpb24oLi4udCk6KG4udG9TdHJpbmc9KCk9PmUsbi5iaW5kKGpuKSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykoIkFycmF5IixgcmV0dXJuIGNsYXNzICR7dH0gZXh0ZW5kcyBBcnJheXt9YCkoQXJyYXkpfWNhdGNoKHQpe3JldHVybiBBcnJheX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IGVsPS8oW0EtWl0pL2csbmw9KCJ1bmRlZmluZWQiIT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lJiZyZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHNldFRpbWVvdXQpLmJpbmQoam4pO2Z1bmN0aW9uIG9sKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gaWwodCl7cmV0dXJuIHQub3duZXJEb2N1bWVudH1jb25zdCBhbD0i77+9IjtmdW5jdGlvbiBybCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEZ1bmN0aW9uP3QoKTp0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBzbCh0KXt0aHJvdyBuZXcgS2UoIjMwMCIsYE11bHRpcGxlIGNvbXBvbmVudHMgbWF0Y2ggbm9kZSB3aXRoIHRhZ25hbWUgJHt0LnZhbHVlfWApfWZ1bmN0aW9uIGxsKHQsZSxuLG8saSl7Y29uc3RbYSxyLC4uLnNdPW8uc3BsaXQoYWwpO2xldCBsPXIsYz1yO2ZvcihsZXQgbz0wO288cy5sZW5ndGg7bysrKXtjb25zdCBhPWUrbztsKz1gJHt0W2FdfSR7c1tvXX1gLGMrPWAke2E9PT1uP2k6dFthXX0ke3Nbb119YH1yZXR1cm57cHJvcE5hbWU6YSxvbGRWYWx1ZTpsLG5ld1ZhbHVlOmN9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KdmFyIGNsOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KbGV0IGRsO2Z1bmN0aW9uIHBsKHQsZSl7cmV0dXJuIGRsKHQsZSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBtbCh0KXtuZ0Rldk1vZGUmJlJvKHQpO2NvbnN0IGU9dFszXTtyZXR1cm4gX28oZSk/ZVszXTplfWZ1bmN0aW9uIHVsKHQpe2NvbnN0IGU9KGZ1bmN0aW9uIG4odCl7bmdEZXZNb2RlJiZobih0LCJjb21wb25lbnQiKTtsZXQgZT15byh0KT90OlZzKHQpO2Zvcig7ZSYmISg1MTImZVsyXSk7KWU9bWwoZSk7cmV0dXJuIG5nRGV2TW9kZSYmUm8oZSksZX0pKHQpO3JldHVybiBuZ0Rldk1vZGUmJmhuKGVbOF0sIlJvb3RWaWV3IGhhcyBubyBjb250ZXh0LiBQZXJoYXBzIGl0IGlzIGRpc2Nvbm5lY3RlZD8iKSxlWzhdfWZ1bmN0aW9uIGZsKHQpe3JldHVybiBobCh0WzEzXSl9ZnVuY3Rpb24gZ2wodCl7cmV0dXJuIGhsKHRbNF0pfWZ1bmN0aW9uIGhsKHQpe2Zvcig7bnVsbCE9PXQmJiFfbyh0KTspdD10WzRdO3JldHVybiB0fWZ1bmN0aW9uIGJsKHQsZSxuLG8saSl7aWYobnVsbCE9byl7bGV0IGEscj0hMTtfbyhvKT9hPW86eW8obykmJihyPSEwLG5nRGV2TW9kZSYmaG4ob1swXSwiSE9TVCBtdXN0IGJlIGRlZmluZWQgZm9yIGEgY29tcG9uZW50IExWaWV3Iiksbz1vWzBdKTtjb25zdCBzPWVpKG8pO25nRGV2TW9kZSYmISRvKGUpJiZ5bihzKSwwPT09dCYmbnVsbCE9PW4/bnVsbD09aT9EbChlLG4scyk6U2woZSxuLHMsaXx8bnVsbCwhMCk6MT09PXQmJm51bGwhPT1uP1NsKGUsbixzLGl8fG51bGwsITApOjI9PT10P1ZsKGUscyxyKTozPT09dCYmKG5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyRGVzdHJveU5vZGUrKyxlLmRlc3Ryb3lOb2RlKHMpKSxudWxsIT1hJiYoZnVuY3Rpb24gYSh0LGUsbixvLGkpe25nRGV2TW9kZSYmRG8obik7Y29uc3QgYT1uWzddO2EhPT1laShuKSYmYmwoZSx0LG8sYSxpKTtmb3IobGV0IGk9Ym87aTxuLmxlbmd0aDtpKyspe2NvbnN0IHI9bltpXTtVbChyWzFdLHIsdCxlLG8sYSl9fSkoZSx0LGEsbixpKX19ZnVuY3Rpb24geWwodCxlKXtyZXR1cm4gbmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJDcmVhdGVUZXh0Tm9kZSsrLG5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyU2V0VGV4dCsrLCRvKHQpP3QuY3JlYXRlVGV4dChlKTp0LmNyZWF0ZVRleHROb2RlKGUpfWZ1bmN0aW9uIF9sKHQsZSxuKXtuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlclNldFRleHQrKywkbyh0KT90LnNldFZhbHVlKGUsbik6ZS50ZXh0Q29udGVudD1ufWZ1bmN0aW9uIENsKHQsZSl7cmV0dXJuIG5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyQ3JlYXRlQ29tbWVudCsrLHQuY3JlYXRlQ29tbWVudCgkcyhlKSl9ZnVuY3Rpb24gTWwodCxlLG4pe3JldHVybiBuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlckNyZWF0ZUVsZW1lbnQrKywkbyh0KT90LmNyZWF0ZUVsZW1lbnQoZSxuKTpudWxsPT09bj90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMobixlKX1mdW5jdGlvbiB2bCh0LGUpe25nRGV2TW9kZSYmRG8odCksbmdEZXZNb2RlJiZobih0WzldLCJBIHByb2plY3RlZCB2aWV3IHNob3VsZCBiZWxvbmcgdG8gYSBub24tZW1wdHkgcHJvamVjdGVkIHZpZXdzIGNvbGxlY3Rpb24iKTtjb25zdCBuPXRbOV0sbz1uLmluZGV4T2YoZSksaT1lWzNdO25nRGV2TW9kZSYmRG8oaSksMTAyNCZlWzJdJiYoZVsyXSY9LTEwMjUscGkoaSwtMSkpLG4uc3BsaWNlKG8sMSl9ZnVuY3Rpb24geGwodCxlKXtpZih0Lmxlbmd0aDw9Ym8pcmV0dXJuO2NvbnN0IG49Ym8rZSxvPXRbbl07aWYobyl7Y29uc3QgaT1vWzE3XTtudWxsIT09aSYmaSE9PXQmJnZsKGksbyksZT4wJiYodFtuLTFdWzRdPW9bNF0pO2NvbnN0IGE9b3IodCxibytlKTshKGZ1bmN0aW9uIGkodCxlKXtVbCh0LGUsZVsxMV0sMixudWxsLG51bGwpLGVbMF09bnVsbCxlWzZdPW51bGx9KShvWzFdLG8pO2NvbnN0IHI9YVsxOV07bnVsbCE9PXImJnIuZGV0YWNoVmlldyhhWzFdKSxvWzNdPW51bGwsb1s0XT1udWxsLG9bMl0mPS0xMjl9cmV0dXJuIG99ZnVuY3Rpb24gT2wodCxlKXtpZighKDI1NiZlWzJdKSl7Y29uc3Qgbj1lWzExXTskbyhuKSYmbi5kZXN0cm95Tm9kZSYmVWwodCxlLG4sMyxudWxsLG51bGwpLChmdW5jdGlvbiBuKHQpe2xldCBlPXRbMTNdO2lmKCFlKXJldHVybiBQbCh0WzFdLHQpO2Zvcig7ZTspe2xldCBuPW51bGw7aWYoeW8oZSkpbj1lWzEzXTtlbHNle25nRGV2TW9kZSYmRG8oZSk7Y29uc3QgdD1lWzEwXTt0JiYobj10KX1pZighbil7Zm9yKDtlJiYhZVs0XSYmZSE9PXQ7KXlvKGUpJiZQbChlWzFdLGUpLGU9ZVszXTtudWxsPT09ZSYmKGU9dCkseW8oZSkmJlBsKGVbMV0sZSksbj1lJiZlWzRdfWU9bn19KShlKX19ZnVuY3Rpb24gUGwodCxlKXtpZighKDI1NiZlWzJdKSl7ZVsyXSY9LTEyOSxlWzJdfD0yNTYsKGZ1bmN0aW9uIG4odCxlKXtsZXQgbjtpZihudWxsIT10JiZudWxsIT0obj10LmRlc3Ryb3lIb29rcykpZm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kz0yKXtjb25zdCBvPWVbblt0XV07aWYoIShvIGluc3RhbmNlb2YgbmEpKXtjb25zdCBlPW5bdCsxXTtpZihBcnJheS5pc0FycmF5KGUpKWZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCs9Mil7Y29uc3Qgbj1vW2VbdF1dLGk9ZVt0KzFdO3FvKDQsbixpKTt0cnl7aS5jYWxsKG4pfWZpbmFsbHl7cW8oNSxuLGkpfX1lbHNle3FvKDQsbyxlKTt0cnl7ZS5jYWxsKG8pfWZpbmFsbHl7cW8oNSxvLGUpfX19fX0pKHQsZSksKGZ1bmN0aW9uIG8odCxlKXtjb25zdCBuPXQuY2xlYW51cCxvPWVbN107bGV0IGk9LTE7aWYobnVsbCE9PW4pZm9yKGxldCB0PTA7dDxuLmxlbmd0aC0xO3QrPTIpaWYoInN0cmluZyI9PXR5cGVvZiBuW3RdKXtjb25zdCBhPW5bdCsxXSxyPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2EoZSk6ZWkoZVthXSkscz1vW2k9blt0KzJdXSxsPW5bdCszXTsiYm9vbGVhbiI9PXR5cGVvZiBsP3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihuW3RdLHMsbCk6bD49MD9vW2k9bF0oKTpvW2k9LWxdLnVuc3Vic2NyaWJlKCksdCs9Mn1lbHNle2NvbnN0IGU9b1tpPW5bdCsxXV07blt0XS5jYWxsKGUpfWlmKG51bGwhPT1vKXtmb3IobGV0IHQ9aSsxO3Q8by5sZW5ndGg7dCsrKXtjb25zdCBlPW9bdF07bmdEZXZNb2RlJiYoIkV4cGVjdGluZyBpbnN0YW5jZSBjbGVhbnVwIGZ1bmN0aW9uLiIsImZ1bmN0aW9uIiE9dHlwZW9mKGE9ZSkmJmJuKCJFeHBlY3RpbmcgaW5zdGFuY2UgY2xlYW51cCBmdW5jdGlvbi4iLG51bGw9PT1hPyJudWxsIjp0eXBlb2YgYSwiZnVuY3Rpb24iLCI9PT0iKSksZSgpfWVbN109bnVsbH12YXIgYX0pKHQsZSksMT09PWVbMV0udHlwZSYmJG8oZVsxMV0pJiYobmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJEZXN0cm95KyssZVsxMV0uZGVzdHJveSgpKTtjb25zdCBuPWVbMTddO2lmKG51bGwhPT1uJiZfbyhlWzNdKSl7biE9PWVbM10mJnZsKG4sZSk7Y29uc3Qgbz1lWzE5XTtudWxsIT09byYmby5kZXRhY2hWaWV3KHQpfX19ZnVuY3Rpb24gd2wodCxlLG4pe3JldHVybiBrbCh0LGUucGFyZW50LG4pfWZ1bmN0aW9uIGtsKHQsZSxuKXtsZXQgbz1lO2Zvcig7bnVsbCE9PW8mJjQwJm8udHlwZTspbz0oZT1vKS5wYXJlbnQ7aWYobnVsbD09PW8pcmV0dXJuIG5bMF07aWYobmdEZXZNb2RlJiZpYShvLDcpLDImby5mbGFncyl7bmdEZXZNb2RlJiZPbyhvLG4pO2NvbnN0IGU9dC5kYXRhW28uZGlyZWN0aXZlU3RhcnRdLmVuY2Fwc3VsYXRpb247aWYoZT09PUhuLk5vbmV8fGU9PT1Ibi5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gb2kobyxuKX1mdW5jdGlvbiBTbCh0LGUsbixvLGkpe25nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVySW5zZXJ0QmVmb3JlKyssJG8odCk/dC5pbnNlcnRCZWZvcmUoZSxuLG8saSk6ZS5pbnNlcnRCZWZvcmUobixvLGkpfWZ1bmN0aW9uIERsKHQsZSxuKXtuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlckFwcGVuZENoaWxkKyssbmdEZXZNb2RlJiZobihlLCJwYXJlbnQgbm9kZSBtdXN0IGJlIGRlZmluZWQiKSwkbyh0KT90LmFwcGVuZENoaWxkKGUsbik6ZS5hcHBlbmRDaGlsZChuKX1mdW5jdGlvbiBFbCh0LGUsbixvLGkpe251bGwhPT1vP1NsKHQsZSxuLG8saSk6RGwodCxlLG4pfWZ1bmN0aW9uIFJsKHQsZSl7cmV0dXJuICRvKHQpP3QucGFyZW50Tm9kZShlKTplLnBhcmVudE5vZGV9ZnVuY3Rpb24gQWwodCxlLG4pe3JldHVybiB6bCh0LGUsbil9ZnVuY3Rpb24gVGwodCxlLG4pe3JldHVybiA0MCZ0LnR5cGU/b2kodCxuKTpudWxsfSEoZnVuY3Rpb24odCl7dFt0LkltcG9ydGFudD0xXT0iSW1wb3J0YW50Iix0W3QuRGFzaENhc2U9Ml09IkRhc2hDYXNlIn0pKGNsfHwoY2w9e30pKTtsZXQgTmwsemw9VGw7ZnVuY3Rpb24gSWwodCxlKXt6bD10LE5sPWV9ZnVuY3Rpb24gSGwodCxlLG4sbyl7Y29uc3QgaT13bCh0LG8sZSksYT1lWzExXSxyPUFsKG8ucGFyZW50fHxlWzZdLG8sZSk7aWYobnVsbCE9aSlpZihBcnJheS5pc0FycmF5KG4pKWZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKUVsKGEsaSxuW3RdLHIsITEpO2Vsc2UgRWwoYSxpLG4sciwhMSk7dm9pZCAwIT09TmwmJk5sKGEsbyxlLG4saSl9ZnVuY3Rpb24gRmwodCxlKXtpZihudWxsIT09ZSl7bmdEZXZNb2RlJiZpYShlLDYzKTtjb25zdCBuPWUudHlwZTtpZigzJm4pcmV0dXJuIG9pKGUsdCk7aWYoNCZuKXJldHVybiBCbCgtMSx0W2UuaW5kZXhdKTtpZig4Jm4pe2NvbnN0IG49ZS5jaGlsZDtpZihudWxsIT09bilyZXR1cm4gRmwodCxuKTt7Y29uc3Qgbj10W2UuaW5kZXhdO3JldHVybiBfbyhuKT9CbCgtMSxuKTplaShuKX19aWYoMzImbilyZXR1cm4gcGwoZSx0KSgpfHxlaSh0W2UuaW5kZXhdKTt7Y29uc3Qgbj1MbCh0LGUpO2lmKG51bGwhPT1uKXtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiBuWzBdO2NvbnN0IGU9bWwodFsxNl0pO3JldHVybiBuZ0Rldk1vZGUmJklvKGUpLEZsKGUsbil9cmV0dXJuIEZsKHQsZS5uZXh0KX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gTGwodCxlKXtpZihudWxsIT09ZSl7Y29uc3Qgbj10WzE2XVs2XSxvPWUucHJvamVjdGlvbjtyZXR1cm4gbmdEZXZNb2RlJiYoZnVuY3Rpb24gbih0LGUpe2huKHRbMTZdLCJDb21wb25lbnQgdmlld3Mgc2hvdWxkIGV4aXN0LiIpLGhuKHRbMTZdWzZdLnByb2plY3Rpb24sZXx8IkNvbXBvbmVudHMgd2l0aCBwcm9qZWN0aW9uIG5vZGVzICg8bmctY29udGVudD4pIG11c3QgaGF2ZSBwcm9qZWN0aW9uIHNsb3RzIGRlZmluZWQuIil9KSh0KSxuLnByb2plY3Rpb25bb119cmV0dXJuIG51bGx9ZnVuY3Rpb24gQmwodCxlKXtjb25zdCBuPWJvK3QrMTtpZihuPGUubGVuZ3RoKXtjb25zdCB0PWVbbl0sbz10WzFdLmZpcnN0Q2hpbGQ7aWYobnVsbCE9PW8pcmV0dXJuIEZsKHQsbyl9cmV0dXJuIGVbN119ZnVuY3Rpb24gVmwodCxlLG4pe25nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyUmVtb3ZlTm9kZSsrO2NvbnN0IG89UmwodCxlKTtvJiYoZnVuY3Rpb24gaSh0LGUsbixvKXskbyh0KT90LnJlbW92ZUNoaWxkKGUsbixvKTplLnJlbW92ZUNoaWxkKG4pfSkodCxvLGUsbil9ZnVuY3Rpb24gamwodCxlLG4sbyxpLGEscil7Zm9yKDtudWxsIT1uOyl7bmdEZXZNb2RlJiZPbyhuLG8pLG5nRGV2TW9kZSYmaWEobiw2Myk7Y29uc3Qgcz1vW24uaW5kZXhdLGw9bi50eXBlO2lmKHImJjA9PT1lJiYocyYmTHMoZWkocyksbyksbi5mbGFnc3w9NCksNjQhPSg2NCZuLmZsYWdzKSlpZig4JmwpamwodCxlLG4uY2hpbGQsbyxpLGEsITEpLGJsKGUsdCxpLHMsYSk7ZWxzZSBpZigzMiZsKXtjb25zdCByPXBsKG4sbyk7bGV0IGw7Zm9yKDtsPXIoKTspYmwoZSx0LGksbCxhKTtibChlLHQsaSxzLGEpfWVsc2UgMTYmbD9HbCh0LGUsbyxuLGksYSk6KG5nRGV2TW9kZSYmaWEobiw3KSxibChlLHQsaSxzLGEpKTtuPXI/bi5wcm9qZWN0aW9uTmV4dDpuLm5leHR9fWZ1bmN0aW9uIFVsKHQsZSxuLG8saSxhKXtqbChuLG8sdC5maXJzdENoaWxkLGUsaSxhLCExKX1mdW5jdGlvbiBHbCh0LGUsbixvLGksYSl7Y29uc3Qgcj1uWzE2XSxzPXJbNl07bmdEZXZNb2RlJiZsbih0eXBlb2Ygby5wcm9qZWN0aW9uLCJudW1iZXIiLCJleHBlY3RpbmcgcHJvamVjdGlvbiBpbmRleCIpO2NvbnN0IGw9cy5wcm9qZWN0aW9uW28ucHJvamVjdGlvbl07aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IG49MDtuPGwubGVuZ3RoO24rKylibChlLHQsaSxsW25dLGEpO2Vsc2UgamwodCxlLGwsclszXSxpLGEsITApfWZ1bmN0aW9uIFdsKHQsZSxuKXtuZ0Rldk1vZGUmJnNuKG4sIiduZXdWYWx1ZScgc2hvdWxkIGJlIGEgc3RyaW5nIiksJG8odCk/dC5zZXRBdHRyaWJ1dGUoZSwic3R5bGUiLG4pOmUuc3R5bGUuY3NzVGV4dD1uLG5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyU2V0U3R5bGUrK31mdW5jdGlvbiBZbCh0LGUsbil7bmdEZXZNb2RlJiZzbihuLCInbmV3VmFsdWUnIHNob3VsZCBiZSBhIHN0cmluZyIpLCRvKHQpPyIiPT09bj90LnJlbW92ZUF0dHJpYnV0ZShlLCJjbGFzcyIpOnQuc2V0QXR0cmlidXRlKGUsImNsYXNzIixuKTplLmNsYXNzTmFtZT1uLG5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyU2V0Q2xhc3NOYW1lKyt9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHFsKHQsZSxuKXtuZ0Rldk1vZGUmJmNuKGUsIiIsJ2NhbiBub3QgbG9vayBmb3IgIiIgc3RyaW5nLicpO2xldCBvPXQubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgaT10LmluZGV4T2YoZSxuKTtpZigtMT09PWkpcmV0dXJuIGk7aWYoMD09PWl8fHQuY2hhckNvZGVBdChpLTEpPD0zMil7Y29uc3Qgbj1lLmxlbmd0aDtpZihpK249PT1vfHx0LmNoYXJDb2RlQXQoaStuKTw9MzIpcmV0dXJuIGl9bj1pKzF9fWNvbnN0IFpsPSJuZy10ZW1wbGF0ZSI7ZnVuY3Rpb24gWGwodCxlLG4pe25nRGV2TW9kZSYmbG4oZSxlLnRvTG93ZXJDYXNlKCksIkNsYXNzIG5hbWUgZXhwZWN0ZWQgdG8gYmUgbG93ZXJjYXNlLiIpO2xldCBvPTA7Zm9yKDtvPHQubGVuZ3RoOyl7bGV0IGk9dFtvKytdO2lmKG4mJiJjbGFzcyI9PT1pKXtpZihpPXRbb10sLTEhPT1xbChpLnRvTG93ZXJDYXNlKCksZSwwKSlyZXR1cm4hMH1lbHNlIGlmKDE9PT1pKXtmb3IoO288dC5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YoaT10W28rK10pOylpZihpLnRvTG93ZXJDYXNlKCk9PT1lKXJldHVybiEwO3JldHVybiExfX1yZXR1cm4hMX1mdW5jdGlvbiBLbCh0KXtyZXR1cm4gND09PXQudHlwZSYmdC52YWx1ZSE9PVpsfWZ1bmN0aW9uIEpsKHQsZSxuKXtyZXR1cm4gZT09PSg0IT09dC50eXBlfHxuP3QudmFsdWU6WmwpfWZ1bmN0aW9uIFFsKHQsZSxuKXtuZ0Rldk1vZGUmJmhuKGVbMF0sIlNlbGVjdG9yIHNob3VsZCBoYXZlIGEgdGFnIG5hbWUiKTtsZXQgbz00O2NvbnN0IGk9dC5hdHRyc3x8W10sYT0oZnVuY3Rpb24gcih0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZihyYSh0W2VdKSlyZXR1cm4gZTtyZXR1cm4gdC5sZW5ndGh9KShpKTtsZXQgcz0hMTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7Y29uc3QgbD1lW3JdO2lmKCJudW1iZXIiIT10eXBlb2YgbCl7aWYoIXMpaWYoNCZvKXtpZihvPTJ8MSZvLCIiIT09bCYmIUpsKHQsbCxuKXx8IiI9PT1sJiYxPT09ZS5sZW5ndGgpe2lmKCRsKG8pKXJldHVybiExO3M9ITB9fWVsc2V7Y29uc3QgYz04Jm8/bDplWysrcl07aWYoOCZvJiZudWxsIT09dC5hdHRycyl7aWYoIVhsKHQuYXR0cnMsYyxuKSl7aWYoJGwobykpcmV0dXJuITE7cz0hMH1jb250aW51ZX1jb25zdCBkPXRjKDgmbz8iY2xhc3MiOmwsaSxLbCh0KSxuKTtpZigtMT09PWQpe2lmKCRsKG8pKXJldHVybiExO3M9ITA7Y29udGludWV9aWYoIiIhPT1jKXtsZXQgdDtkPmE/dD0iIjoobmdEZXZNb2RlJiZjbihpW2RdLDAsIldlIGRvIG5vdCBtYXRjaCBkaXJlY3RpdmVzIG9uIG5hbWVzcGFjZWQgYXR0cmlidXRlcyIpLHQ9aVtkKzFdLnRvTG93ZXJDYXNlKCkpO2NvbnN0IGU9OCZvP3Q6bnVsbDtpZihlJiYtMSE9PXFsKGUsYywwKXx8MiZvJiZjIT09dCl7aWYoJGwobykpcmV0dXJuITE7cz0hMH19fX1lbHNle2lmKCFzJiYhJGwobykmJiEkbChsKSlyZXR1cm4hMTtpZihzJiYkbChsKSljb250aW51ZTtzPSExLG89bHwxJm99fXJldHVybiAkbChvKXx8c31mdW5jdGlvbiAkbCh0KXtyZXR1cm4gMD09KDEmdCl9ZnVuY3Rpb24gdGModCxlLG4sbyl7aWYobnVsbD09PWUpcmV0dXJuLTE7bGV0IGk9MDtpZihvfHwhbil7bGV0IG49ITE7Zm9yKDtpPGUubGVuZ3RoOyl7Y29uc3Qgbz1lW2ldO2lmKG89PT10KXJldHVybiBpO2lmKDM9PT1vfHw2PT09byluPSEwO2Vsc2V7aWYoMT09PW98fDI9PT1vKXtsZXQgdD1lWysraV07Zm9yKDsic3RyaW5nIj09dHlwZW9mIHQ7KXQ9ZVsrK2ldO2NvbnRpbnVlfWlmKDQ9PT1vKWJyZWFrO2lmKDA9PT1vKXtpKz00O2NvbnRpbnVlfX1pKz1uPzE6Mn1yZXR1cm4tMX1yZXR1cm4oZnVuY3Rpb24gYSh0LGUpe2xldCBuPXQuaW5kZXhPZig0KTtpZihuPi0xKWZvcihuKys7bjx0Lmxlbmd0aDspe2NvbnN0IG89dFtuXTtpZigibnVtYmVyIj09dHlwZW9mIG8pcmV0dXJuLTE7aWYobz09PWUpcmV0dXJuIG47bisrfXJldHVybi0xfSkoZSx0KX1mdW5jdGlvbiBlYyh0LGUsbj0hMSl7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspaWYoUWwodCxlW29dLG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIG5jKHQsZSl7dDpmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7Y29uc3Qgbz1lW25dO2lmKHQubGVuZ3RoPT09by5sZW5ndGgpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKHRbZV0hPT1vW2VdKWNvbnRpbnVlIHQ7cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIG9jKHQsZSl7cmV0dXJuIHQ/Ijpub3QoIitlLnRyaW0oKSsiKSI6ZX1mdW5jdGlvbiBpYyh0KXtsZXQgZT10WzBdLG49MSxvPTIsaT0iIixhPSExO2Zvcig7bjx0Lmxlbmd0aDspe2xldCByPXRbbl07aWYoInN0cmluZyI9PXR5cGVvZiByKWlmKDImbyl7Y29uc3QgZT10Wysrbl07aSs9IlsiK3IrKGUubGVuZ3RoPjA/Jz0iJytlKyciJzoiIikrIl0ifWVsc2UgOCZvP2krPSIuIityOjQmbyYmKGkrPSIgIityKTtlbHNlIiI9PT1pfHwkbChyKXx8KGUrPW9jKGEsaSksaT0iIiksbz1yLGE9YXx8ISRsKG8pO24rK31yZXR1cm4iIiE9PWkmJihlKz1vYyhhLGkpKSxlfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgYWM9InVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZT97X19icmFuZF9fOiJOT19DSEFOR0UifTp7fTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gcmModCl7bmdEZXZNb2RlJiZmbih0LDAsIkNhbiBvbmx5IGFkdmFuY2UgZm9yd2FyZCIpLHNjKGdpKCksZmkoKSxHaSgpK3QseGkoKSl9ZnVuY3Rpb24gc2ModCxlLG4sbyl7aWYobmdEZXZNb2RlJiYoZnVuY3Rpb24gaSh0LGUpe3pvKGdvLHRbMV0uYmluZGluZ1N0YXJ0SW5kZXgsZSl9KShlLG4pLCFvKWlmKDM9PSgzJmVbMl0pKXtjb25zdCBvPXQucHJlT3JkZXJDaGVja0hvb2tzO251bGwhPT1vJiZLaShlLG8sbil9ZWxzZXtjb25zdCBvPXQucHJlT3JkZXJIb29rcztudWxsIT09byYmSmkoZSxvLDAsbil9V2kobil9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGxjKHQsZSl7cmV0dXJuIG5nRGV2TW9kZSYmcm4odCwwLDMyNzY3KSxuZ0Rldk1vZGUmJnJuKGUsMCwzMjc2NyksdDw8MTd8ZTw8Mn1mdW5jdGlvbiBjYyh0KXtyZXR1cm4gbmdEZXZNb2RlJiZhbih0LCJleHBlY3RlZCBudW1iZXIiKSx0Pj4xNyYzMjc2N31mdW5jdGlvbiBkYyh0KXtyZXR1cm4gbmdEZXZNb2RlJiZhbih0LCJleHBlY3RlZCBudW1iZXIiKSwyPT0oMiZ0KX1mdW5jdGlvbiBwYyh0KXtyZXR1cm4gbmdEZXZNb2RlJiZhbih0LCJleHBlY3RlZCBudW1iZXIiKSwyfHR9ZnVuY3Rpb24gbWModCl7cmV0dXJuIG5nRGV2TW9kZSYmYW4odCwiZXhwZWN0ZWQgbnVtYmVyIiksKDEzMTA2OCZ0KT4+Mn1mdW5jdGlvbiB1Yyh0LGUpe3JldHVybiBuZ0Rldk1vZGUmJmFuKHQsImV4cGVjdGVkIG51bWJlciIpLG5nRGV2TW9kZSYmcm4oZSwwLDMyNzY3KSwtMTMxMDY5JnR8ZTw8Mn1mdW5jdGlvbiBmYyh0KXtyZXR1cm4gbmdEZXZNb2RlJiZhbih0LCJleHBlY3RlZCBudW1iZXIiKSwxPT0oMSZ0KX1mdW5jdGlvbiBnYyh0KXtyZXR1cm4gbmdEZXZNb2RlJiZhbih0LCJleHBlY3RlZCBudW1iZXIiKSwxfHR9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGhjKHQsZSl7aWYoIW5nRGV2TW9kZSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgbWV0aG9kIHNob3VsZCBiZSBndWFyZGVkIHdpdGggYG5nRGV2TW9kZWAgc28gdGhhdCBpdCBjYW4gYmUgdHJlZSBzaGFrZW4gaW4gcHJvZHVjdGlvbiEiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZGVidWciLHt2YWx1ZTplLGVudW1lcmFibGU6ITF9KX1mdW5jdGlvbiBiYyh0LGUpe2lmKCFuZ0Rldk1vZGUpdGhyb3cgbmV3IEVycm9yKCJUaGlzIG1ldGhvZCBzaG91bGQgYmUgZ3VhcmRlZCB3aXRoIGBuZ0Rldk1vZGVgIHNvIHRoYXQgaXQgY2FuIGJlIHRyZWUgc2hha2VuIGluIHByb2R1Y3Rpb24hIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImRlYnVnIix7Z2V0OmUsZW51bWVyYWJsZTohMX0pfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCB5Yz0oInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fCEhbmdEZXZNb2RlKSYmVW4oKTtsZXQgX2MsQ2MsTWM7ZnVuY3Rpb24gdmModCl7aWYobnVsbD09dClyZXR1cm4iIjtjb25zdCBlPXQubGFzdEluZGV4T2YoIl9UZW1wbGF0ZSIpO3JldHVybiJfIisoLTE9PT1lP3Q6dC5zdWJzdHIoMCxlKSl9ZnVuY3Rpb24geGModCxlKXtjb25zdCBuPXQudFZpZXdfLmRhdGEsbz1bXSxpPWU/dC5jbGFzc0JpbmRpbmdzOnQuc3R5bGVCaW5kaW5ncyxhPWNjKGkpLHI9bWMoaSk7bGV0IHM9MCE9PXIsbD1zP3I6YTtmb3IoOzAhPT1sOyl7Y29uc3QgdD1uW2wrMV07by51bnNoaWZ0KHtrZXk6bltsXSxpbmRleDpsLGlzVGVtcGxhdGU6cyxwcmV2RHVwbGljYXRlOmRjKHQpLG5leHREdXBsaWNhdGU6ZmModCksbmV4dEluZGV4Om1jKHQpLHByZXZJbmRleDpjYyh0KX0pLGw9PT1hJiYocz0hMSksbD1jYyh0KX1yZXR1cm4gby5wdXNoKChlP3QucmVzaWR1YWxDbGFzc2VzOnQucmVzaWR1YWxTdHlsZXMpfHxudWxsKSxvfWZ1bmN0aW9uIE9jKHQsZSl7Zm9yKDt0OyllLnB1c2godC50ZW1wbGF0ZV8pLHQ9dC5uZXh0fWNvbnN0IFBjPXljJiZ0bCgiVFZpZXdEYXRhIil8fG51bGw7bGV0IHdjO2NvbnN0IGtjPXljJiZ0bCgiTFZpZXdCbHVlcHJpbnQiKXx8bnVsbCxTYz15YyYmdGwoIk1hdGNoZXNBcnJheSIpfHxudWxsLERjPXljJiZ0bCgiVFZpZXdDb21wb25lbnRzIil8fG51bGwsRWM9eWMmJnRsKCJUTm9kZUxvY2FsTmFtZXMiKXx8bnVsbCxSYz15YyYmdGwoIlROb2RlSW5pdGlhbElucHV0cyIpfHxudWxsO3ljJiZ0bCgiVE5vZGVJbml0aWFsRGF0YSIpO2NvbnN0IEFjPXljJiZ0bCgiTENsZWFudXAiKXx8bnVsbCxUYz15YyYmdGwoIlRDbGVhbnVwIil8fG51bGw7ZnVuY3Rpb24gTmModCl7aWYodCl7Y29uc3QgZT10LmRlYnVnO3JldHVybiBobihlLCJPYmplY3QgZG9lcyBub3QgaGF2ZSBhIGRlYnVnIHJlcHJlc2VudGF0aW9uLiIpLGV9cmV0dXJuIHR9ZnVuY3Rpb24gemModCxlPSExKXtjb25zdCBuPWVpKHQpO2lmKG4pc3dpdGNoKG4ubm9kZVR5cGUpe2Nhc2UgTm9kZS5URVhUX05PREU6cmV0dXJuIG4udGV4dENvbnRlbnQ7Y2FzZSBOb2RlLkNPTU1FTlRfTk9ERTpyZXR1cm5gXHgzYyEtLSR7bi50ZXh0Q29udGVudH0tLVx4M2VgO2Nhc2UgTm9kZS5FTEVNRU5UX05PREU6Y29uc3QgdD1uLm91dGVySFRNTDtyZXR1cm4gZT90OnQuc3BsaXQoIj4iK24uaW5uZXJIVE1MKyI8IilbMF0rIj4ifXJldHVybiBudWxsfWNsYXNzIElje2NvbnN0cnVjdG9yKHQpe3RoaXMuX3Jhd19sVmlldz10fWdldCBmbGFncygpe2NvbnN0IHQ9dGhpcy5fcmF3X2xWaWV3WzJdO3JldHVybntfX3Jhd19fZmxhZ3NfXzp0LGluaXRQaGFzZVN0YXRlOjMmdCxjcmVhdGlvbk1vZGU6ISEoNCZ0KSxmaXJzdFZpZXdQYXNzOiEhKDgmdCksY2hlY2tBbHdheXM6ISEoMTYmdCksZGlydHk6ISEoNjQmdCksYXR0YWNoZWQ6ISEoMTI4JnQpLGRlc3Ryb3llZDohISgyNTYmdCksaXNSb290OiEhKDUxMiZ0KSxpbmRleFdpdGhpbkluaXRQaGFzZTp0Pj4xMX19Z2V0IHBhcmVudCgpe3JldHVybiBOYyh0aGlzLl9yYXdfbFZpZXdbM10pfWdldCBob3N0SFRNTCgpe3JldHVybiB6Yyh0aGlzLl9yYXdfbFZpZXdbMF0sITApfWdldCBodG1sKCl7cmV0dXJuKHRoaXMubm9kZXN8fFtdKS5tYXAoSGMpLmpvaW4oIiIpfWdldCBjb250ZXh0KCl7cmV0dXJuIHRoaXMuX3Jhd19sVmlld1s4XX1nZXQgbm9kZXMoKXtjb25zdCB0PXRoaXMuX3Jhd19sVmlldztyZXR1cm4gTGModFsxXS5maXJzdENoaWxkLHQpfWdldCB0ZW1wbGF0ZSgpe3JldHVybiB0aGlzLnRWaWV3LnRlbXBsYXRlX31nZXQgdFZpZXcoKXtyZXR1cm4gdGhpcy5fcmF3X2xWaWV3WzFdfWdldCBjbGVhbnVwKCl7cmV0dXJuIHRoaXMuX3Jhd19sVmlld1s3XX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5fcmF3X2xWaWV3WzldfWdldCByZW5kZXJlckZhY3RvcnkoKXtyZXR1cm4gdGhpcy5fcmF3X2xWaWV3WzEwXX1nZXQgcmVuZGVyZXIoKXtyZXR1cm4gdGhpcy5fcmF3X2xWaWV3WzExXX1nZXQgc2FuaXRpemVyKCl7cmV0dXJuIHRoaXMuX3Jhd19sVmlld1sxMl19Z2V0IGNoaWxkSGVhZCgpe3JldHVybiBOYyh0aGlzLl9yYXdfbFZpZXdbMTNdKX1nZXQgbmV4dCgpe3JldHVybiBOYyh0aGlzLl9yYXdfbFZpZXdbNF0pfWdldCBjaGlsZFRhaWwoKXtyZXR1cm4gTmModGhpcy5fcmF3X2xWaWV3WzE0XSl9Z2V0IGRlY2xhcmF0aW9uVmlldygpe3JldHVybiBOYyh0aGlzLl9yYXdfbFZpZXdbMTVdKX1nZXQgcXVlcmllcygpe3JldHVybiB0aGlzLl9yYXdfbFZpZXdbMTldfWdldCB0SG9zdCgpe3JldHVybiB0aGlzLl9yYXdfbFZpZXdbNl19Z2V0IGRlY2xzKCl7cmV0dXJuIEZjKHRoaXMudFZpZXcsdGhpcy5fcmF3X2xWaWV3LGdvLHRoaXMudFZpZXcuYmluZGluZ1N0YXJ0SW5kZXgpfWdldCB2YXJzKCl7cmV0dXJuIEZjKHRoaXMudFZpZXcsdGhpcy5fcmF3X2xWaWV3LHRoaXMudFZpZXcuYmluZGluZ1N0YXJ0SW5kZXgsdGhpcy50Vmlldy5leHBhbmRvU3RhcnRJbmRleCl9Z2V0IGV4cGFuZG8oKXtyZXR1cm4gRmModGhpcy50Vmlldyx0aGlzLl9yYXdfbFZpZXcsdGhpcy50Vmlldy5leHBhbmRvU3RhcnRJbmRleCx0aGlzLl9yYXdfbFZpZXcubGVuZ3RoKX1nZXQgY2hpbGRWaWV3cygpe2NvbnN0IHQ9W107bGV0IGU9dGhpcy5jaGlsZEhlYWQ7Zm9yKDtlOyl0LnB1c2goZSksZT1lLm5leHQ7cmV0dXJuIHR9fWZ1bmN0aW9uIEhjKHQpe2lmKCJFbGVtZW50Q29udGFpbmVyIj09PXQudHlwZSlyZXR1cm4odC5jaGlsZHJlbnx8W10pLm1hcChIYykuam9pbigiIik7aWYoIkljdUNvbnRhaW5lciI9PT10LnR5cGUpdGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKTtyZXR1cm4gemModC5uYXRpdmUsITApfHwiIn1mdW5jdGlvbiBGYyh0LGUsbixvKXtsZXQgaT1bXTtmb3IobGV0IGE9bjthPG87YSsrKWkucHVzaCh7aW5kZXg6YSx0OnQuZGF0YVthXSxsOmVbYV19KTtyZXR1cm57c3RhcnQ6bixlbmQ6byxsZW5ndGg6by1uLGNvbnRlbnQ6aX19ZnVuY3Rpb24gTGModCxlKXtpZih0KXtjb25zdCBuPVtdO2xldCBvPXQ7Zm9yKDtvOyluLnB1c2goQmMobyxlKSksbz1vLm5leHQ7cmV0dXJuIG59cmV0dXJuW119ZnVuY3Rpb24gQmModCxlKXtjb25zdCBuPWVpKGVbdC5pbmRleF0pLG89W10saT1bXSxhPWVbMV07Zm9yKGxldCBuPXQuZGlyZWN0aXZlU3RhcnQ7bjx0LmRpcmVjdGl2ZUVuZDtuKyspby5wdXNoKGEuZGF0YVtuXS50eXBlKSxpLnB1c2goZVtuXSk7cmV0dXJue2h0bWw6emMobiksdHlwZTpvYSh0LnR5cGUpLHROb2RlOnQsbmF0aXZlOm4sY2hpbGRyZW46TGModC5jaGlsZCxlKSxmYWN0b3JpZXM6byxpbnN0YW5jZXM6aSxpbmplY3RvcjpWYyh0LGEsZSksZ2V0IGluamVjdG9yUmVzb2x1dGlvblBhdGgoKXtyZXR1cm4gdC5kZWJ1Z05vZGVJbmplY3RvclBhdGgoZSl9fX1mdW5jdGlvbiBWYyh0LGUsbil7Y29uc3Qgbz1bXTtmb3IobGV0IG49dC5wcm92aWRlckluZGV4U3RhcnRfO248dC5wcm92aWRlckluZGV4RW5kXztuKyspby5wdXNoKGUuZGF0YVtuXSk7Y29uc3QgaT1bXTtmb3IobGV0IG49dC5wcm92aWRlckluZGV4RW5kXztuPHQuZGlyZWN0aXZlRW5kO24rKylpLnB1c2goZS5kYXRhW25dKTtyZXR1cm57Ymxvb206VWMobix0LmluamVjdG9ySW5kZXgpLGN1bXVsYXRpdmVCbG9vbTpVYyhlLmRhdGEsdC5pbmplY3RvckluZGV4KSxwcm92aWRlcnM6aSx2aWV3UHJvdmlkZXJzOm8scGFyZW50SW5qZWN0b3JJbmRleDpuW3QucHJvdmlkZXJJbmRleFN0YXJ0Xy0xXX19ZnVuY3Rpb24gamModCxlKXtjb25zdCBuPXRbZV07aWYoIm51bWJlciIhPXR5cGVvZiBuKXJldHVybiI/Pz8/Pz8/PyI7Y29uc3Qgbz0iMDAwMDAwMDAiK24udG9TdHJpbmcoMik7cmV0dXJuIG8uc3Vic3RyaW5nKG8ubGVuZ3RoLTgpfWZ1bmN0aW9uIFVjKHQsZSl7cmV0dXJuIGU8MD8iTk9fTk9ERV9JTkpFQ1RPUiI6YCR7amModCxlKzcpfV8ke2pjKHQsZSs2KX1fJHtqYyh0LGUrNSl9XyR7amModCxlKzQpfV8ke2pjKHQsZSszKX1fJHtqYyh0LGUrMil9XyR7amModCxlKzEpfV8ke2pjKHQsZSswKX1gfWNsYXNzIEdje2NvbnN0cnVjdG9yKHQpe3RoaXMuX3Jhd19sQ29udGFpbmVyPXR9Z2V0IGhhc1RyYW5zcGxhbnRlZFZpZXdzKCl7cmV0dXJuIHRoaXMuX3Jhd19sQ29udGFpbmVyWzJdfWdldCB2aWV3cygpe3JldHVybiB0aGlzLl9yYXdfbENvbnRhaW5lci5zbGljZShibykubWFwKE5jKX1nZXQgcGFyZW50KCl7cmV0dXJuIE5jKHRoaXMuX3Jhd19sQ29udGFpbmVyWzNdKX1nZXQgbW92ZWRWaWV3cygpe3JldHVybiB0aGlzLl9yYXdfbENvbnRhaW5lcls5XX1nZXQgaG9zdCgpe3JldHVybiB0aGlzLl9yYXdfbENvbnRhaW5lclswXX1nZXQgbmF0aXZlKCl7cmV0dXJuIHRoaXMuX3Jhd19sQ29udGFpbmVyWzddfWdldCBuZXh0KCl7cmV0dXJuIE5jKHRoaXMuX3Jhd19sQ29udGFpbmVyWzRdKX19Y29uc3QgV2M9UHJvbWlzZS5yZXNvbHZlKG51bGwpO2Z1bmN0aW9uIFljKHQsZSl7Y29uc3Qgbj10LmNvbnRlbnRRdWVyaWVzO2lmKG51bGwhPT1uKWZvcihsZXQgbz0wO288bi5sZW5ndGg7bys9Mil7Y29uc3QgaT1uW29dLGE9bltvKzFdO2lmKC0xIT09YSl7Y29uc3Qgbj10LmRhdGFbYV07bmdEZXZNb2RlJiZobihuLCJEaXJlY3RpdmVEZWYgbm90IGZvdW5kLiIpLG5nRGV2TW9kZSYmaG4obi5jb250ZW50UXVlcmllcywiY29udGVudFF1ZXJpZXMgZnVuY3Rpb24gc2hvdWxkIGJlIGRlZmluZWQiKSx6aShpKSxuLmNvbnRlbnRRdWVyaWVzKDIsZVthXSxhKX19fWZ1bmN0aW9uIHFjKHQsZSxuLG8saSxhLHIscyxsLGMpe2NvbnN0IGQ9bmdEZXZNb2RlPyhmdW5jdGlvbiBwKHQpe3JldHVybihmdW5jdGlvbiBlKHQsbil7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdm9pZCAwPT09TWMmJihNYz1uZXcodGwoIkxSb290VmlldyIpKSksTWM7Y2FzZSAxOnZvaWQgMD09PV9jJiYoX2M9bmV3IE1hcCk7bGV0IHQ9X2MuZ2V0KG4pO3JldHVybiB2b2lkIDA9PT10JiYodD1uZXcodGwoIkxDb21wb25lbnRWaWV3Iit2YyhuKSkpLF9jLnNldChuLHQpKSx0O2Nhc2UgMjp2b2lkIDA9PT1DYyYmKENjPW5ldyBNYXApO2xldCBlPUNjLmdldChuKTtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bmV3KHRsKCJMRW1iZWRkZWRWaWV3Iit2YyhuKSkpLENjLnNldChuLGUpKSxlfX0pKHQudHlwZSx0LnRlbXBsYXRlJiZ0LnRlbXBsYXRlLm5hbWUpLmNvbmNhdCh0LmJsdWVwcmludCl9KShlKTplLmJsdWVwcmludC5zbGljZSgpO3JldHVybiBkWzBdPWksZFsyXT0xNDB8byxkaShkKSxuZ0Rldk1vZGUmJmUuZGVjbFROb2RlJiZ0JiZPbyhlLmRlY2xUTm9kZSx0KSxkWzNdPWRbMTVdPXQsZFs4XT1uLGRbMTBdPXJ8fHQmJnRbMTBdLG5nRGV2TW9kZSYmaG4oZFsxMF0sIlJlbmRlcmVyRmFjdG9yeSBpcyByZXF1aXJlZCIpLGRbMTFdPXN8fHQmJnRbMTFdLG5nRGV2TW9kZSYmaG4oZFsxMV0sIlJlbmRlcmVyIGlzIHJlcXVpcmVkIiksZFsxMl09bHx8dCYmdFsxMl18fG51bGwsZFs5XT1jfHx0JiZ0WzldfHxudWxsLGRbNl09YSxuZ0Rldk1vZGUmJmxuKDIhPWUudHlwZXx8bnVsbCE9PXQsITAsIkVtYmVkZGVkIHZpZXdzIG11c3QgaGF2ZSBwYXJlbnRMVmlldyIpLGRbMTZdPTI9PWUudHlwZT90WzE2XTpkLG5nRGV2TW9kZSYmKGZ1bmN0aW9uIG0odCl7aGModCxuZXcgSWModCkpfSkoZCksZH1mdW5jdGlvbiBaYyh0LGUsbixvLGkpe25nRGV2TW9kZSYmMCE9PWUmJmduKGUsZ28sIlROb2RlcyBjYW4ndCBiZSBpbiB0aGUgTFZpZXcgaGVhZGVyLiIpLG5nRGV2TW9kZSYmKGZ1bmN0aW9uIGEodCl7MiE9PXQmJjEhPT10JiY0IT09dCYmOCE9PXQmJjMyIT09dCYmMTYhPT10JiY2NCE9PXQmJmJuKGBFeHBlY3RlZCBUTm9kZVR5cGUgdG8gaGF2ZSBvbmx5IGEgc2luZ2xlIHR5cGUgc2VsZWN0ZWQsIGJ1dCBnb3QgJHtvYSh0KX0uYCl9KShuKTtsZXQgcj10LmRhdGFbZV07aWYobnVsbD09PXIpcj1YYyh0LGUsbixvLGkpLChmdW5jdGlvbiBzKCl7cmV0dXJuIG1pLmxGcmFtZS5pbkkxOG59KSgpJiYoci5mbGFnc3w9NjQpO2Vsc2UgaWYoNjQmci50eXBlKXtyLnR5cGU9bixyLnZhbHVlPW8sci5hdHRycz1pO2NvbnN0IGE9X2koKTtyLmluamVjdG9ySW5kZXg9bnVsbD09PWE/LTE6YS5pbmplY3RvckluZGV4LG5nRGV2TW9kZSYmUG8ocix0KSxuZ0Rldk1vZGUmJmxuKGUsci5pbmRleCwiRXhwZWN0aW5nIHNhbWUgaW5kZXgiKX1yZXR1cm4gQ2kociwhMCkscn1mdW5jdGlvbiBYYyh0LGUsbixvLGkpe2NvbnN0IGE9eWkoKSxyPU1pKCkscz10LmRhdGFbZV09KGZ1bmN0aW9uIGwodCxlLG4sbyxpLGEpe25nRGV2TW9kZSYmMCE9PW8mJmduKG8sZ28sIlROb2RlcyBjYW4ndCBiZSBpbiB0aGUgTFZpZXcgaGVhZGVyLiIpLG5nRGV2TW9kZSYmcG4oYSx2b2lkIDAsIid1bmRlZmluZWQnIGlzIG5vdCB2YWxpZCB2YWx1ZSBmb3IgJ2F0dHJzJyIpLG5nRGV2TW9kZSYmbmdEZXZNb2RlLnROb2RlKyssbmdEZXZNb2RlJiZlJiZQbyhlLHQpO2xldCByPWU/ZS5pbmplY3RvckluZGV4Oi0xO2NvbnN0IHM9bmdEZXZNb2RlP25ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgsYix5LF8sQyxNLHYseCxPLFAsdyxrLFMsRCxFLFIpe3RoaXMudFZpZXdfPXQsdGhpcy50eXBlPWUsdGhpcy5pbmRleD1uLHRoaXMuaW5zZXJ0QmVmb3JlSW5kZXg9byx0aGlzLmluamVjdG9ySW5kZXg9aSx0aGlzLmRpcmVjdGl2ZVN0YXJ0PWEsdGhpcy5kaXJlY3RpdmVFbmQ9cix0aGlzLmRpcmVjdGl2ZVN0eWxpbmdMYXN0PXMsdGhpcy5wcm9wZXJ0eUJpbmRpbmdzPWwsdGhpcy5mbGFncz1jLHRoaXMucHJvdmlkZXJJbmRleGVzPWQsdGhpcy52YWx1ZT1wLHRoaXMuYXR0cnM9bSx0aGlzLm1lcmdlZEF0dHJzPXUsdGhpcy5sb2NhbE5hbWVzPWYsdGhpcy5pbml0aWFsSW5wdXRzPWcsdGhpcy5pbnB1dHM9aCx0aGlzLm91dHB1dHM9Yix0aGlzLnRWaWV3cz15LHRoaXMubmV4dD1fLHRoaXMucHJvamVjdGlvbk5leHQ9Qyx0aGlzLmNoaWxkPU0sdGhpcy5wYXJlbnQ9dix0aGlzLnByb2plY3Rpb249eCx0aGlzLnN0eWxlcz1PLHRoaXMuc3R5bGVzV2l0aG91dEhvc3Q9UCx0aGlzLnJlc2lkdWFsU3R5bGVzPXcsdGhpcy5jbGFzc2VzPWssdGhpcy5jbGFzc2VzV2l0aG91dEhvc3Q9Uyx0aGlzLnJlc2lkdWFsQ2xhc3Nlcz1ELHRoaXMuY2xhc3NCaW5kaW5ncz1FLHRoaXMuc3R5bGVCaW5kaW5ncz1SfWRlYnVnTm9kZUluamVjdG9yUGF0aCh0KXtjb25zdCBlPVtdO2xldCBuPXlhKHRoaXMsdCk7aWYoLTE9PT1uKXtjb25zdCBlPV9hKHRoaXMsdCk7ZSE9PWVhJiYobj1wYShlKSx0PW1hKGUsdCkpfWZvcig7LTEhPT1uOyl7bmdEZXZNb2RlJiZIbyh0LG4pLGUucHVzaChCYyh0WzFdLmRhdGFbbis4XSx0KSk7Y29uc3Qgbz10W24rOF07bz09PWVhP249LTE6KG49cGEobyksdD1tYShvLHQpKX1yZXR1cm4gZX1nZXQgdHlwZV8oKXtyZXR1cm4gb2EodGhpcy50eXBlKXx8YFROb2RlVHlwZS4/JHt0aGlzLnR5cGV9P2B9Z2V0IGZsYWdzXygpe2NvbnN0IHQ9W107cmV0dXJuIDE2JnRoaXMuZmxhZ3MmJnQucHVzaCgiVE5vZGVGbGFncy5oYXNDbGFzc0lucHV0IiksOCZ0aGlzLmZsYWdzJiZ0LnB1c2goIlROb2RlRmxhZ3MuaGFzQ29udGVudFF1ZXJ5IiksMzImdGhpcy5mbGFncyYmdC5wdXNoKCJUTm9kZUZsYWdzLmhhc1N0eWxlSW5wdXQiKSwxMjgmdGhpcy5mbGFncyYmdC5wdXNoKCJUTm9kZUZsYWdzLmhhc0hvc3RCaW5kaW5ncyIpLDImdGhpcy5mbGFncyYmdC5wdXNoKCJUTm9kZUZsYWdzLmlzQ29tcG9uZW50SG9zdCIpLDEmdGhpcy5mbGFncyYmdC5wdXNoKCJUTm9kZUZsYWdzLmlzRGlyZWN0aXZlSG9zdCIpLDY0JnRoaXMuZmxhZ3MmJnQucHVzaCgiVE5vZGVGbGFncy5pc0RldGFjaGVkIiksNCZ0aGlzLmZsYWdzJiZ0LnB1c2goIlROb2RlRmxhZ3MuaXNQcm9qZWN0ZWQiKSx0LmpvaW4oInwiKX1nZXQgdGVtcGxhdGVfKCl7aWYoMSZ0aGlzLnR5cGUpcmV0dXJuIHRoaXMudmFsdWU7Y29uc3QgdD1bXSxlPSJzdHJpbmciPT10eXBlb2YgdGhpcy52YWx1ZSYmdGhpcy52YWx1ZXx8dGhpcy50eXBlXztpZih0LnB1c2goIjwiLGUpLHRoaXMuZmxhZ3MmJnQucHVzaCgiICIsdGhpcy5mbGFnc18pLHRoaXMuYXR0cnMpZm9yKGxldCBlPTA7ZTx0aGlzLmF0dHJzLmxlbmd0aDspe2NvbnN0IG49dGhpcy5hdHRyc1tlKytdO2lmKCJudW1iZXIiPT10eXBlb2YgbilicmVhaztjb25zdCBvPXRoaXMuYXR0cnNbZSsrXTt0LnB1c2goIiAiLG4sJz0iJyxvLCciJyl9cmV0dXJuIHQucHVzaCgiPiIpLE9jKHRoaXMuY2hpbGQsdCksdC5wdXNoKCI8LyIsZSwiPiIpLHQuam9pbigiIil9Z2V0IHN0eWxlQmluZGluZ3NfKCl7cmV0dXJuIHhjKHRoaXMsITEpfWdldCBjbGFzc0JpbmRpbmdzXygpe3JldHVybiB4Yyh0aGlzLCEwKX1nZXQgcHJvdmlkZXJJbmRleFN0YXJ0Xygpe3JldHVybiAxMDQ4NTc1JnRoaXMucHJvdmlkZXJJbmRleGVzfWdldCBwcm92aWRlckluZGV4RW5kXygpe3JldHVybiB0aGlzLnByb3ZpZGVySW5kZXhTdGFydF8rKHRoaXMucHJvdmlkZXJJbmRleGVzPj4+MjApfX0odCxuLG8sbnVsbCxyLC0xLC0xLC0xLG51bGwsMCwwLGksYSxudWxsLG51bGwsdm9pZCAwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLGUsbnVsbCxudWxsLG51bGwsdm9pZCAwLG51bGwsbnVsbCx2b2lkIDAsMCwwKTp7dHlwZTpuLGluZGV4Om8saW5zZXJ0QmVmb3JlSW5kZXg6bnVsbCxpbmplY3RvckluZGV4OnIsZGlyZWN0aXZlU3RhcnQ6LTEsZGlyZWN0aXZlRW5kOi0xLGRpcmVjdGl2ZVN0eWxpbmdMYXN0Oi0xLHByb3BlcnR5QmluZGluZ3M6bnVsbCxmbGFnczowLHByb3ZpZGVySW5kZXhlczowLHZhbHVlOmksYXR0cnM6YSxtZXJnZWRBdHRyczpudWxsLGxvY2FsTmFtZXM6bnVsbCxpbml0aWFsSW5wdXRzOnZvaWQgMCxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsdFZpZXdzOm51bGwsbmV4dDpudWxsLHByb2plY3Rpb25OZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJlbnQ6ZSxwcm9qZWN0aW9uOm51bGwsc3R5bGVzOm51bGwsc3R5bGVzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbFN0eWxlczp2b2lkIDAsY2xhc3NlczpudWxsLGNsYXNzZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsQ2xhc3Nlczp2b2lkIDAsY2xhc3NCaW5kaW5nczowLHN0eWxlQmluZGluZ3M6MH07cmV0dXJuIG5nRGV2TW9kZSYmT2JqZWN0LnNlYWwocyksc30pKHQscj9hOmEmJmEucGFyZW50LG4sZSxvLGkpO3JldHVybiBudWxsPT09dC5maXJzdENoaWxkJiYodC5maXJzdENoaWxkPXMpLG51bGwhPT1hJiYocj9udWxsPT1hLmNoaWxkJiZudWxsIT09cy5wYXJlbnQmJihhLmNoaWxkPXMpOm51bGw9PT1hLm5leHQmJihhLm5leHQ9cykpLHN9ZnVuY3Rpb24gS2ModCxlLG4sbyl7aWYoMD09PW4pcmV0dXJuLTE7bmdEZXZNb2RlJiYoQW8odCksZG4odCxlWzFdLCJgTFZpZXdgIG11c3QgYmUgYXNzb2NpYXRlZCB3aXRoIGBUVmlld2AhIiksbG4odC5kYXRhLmxlbmd0aCxlLmxlbmd0aCwiRXhwZWN0aW5nIExWaWV3IHRvIGJlIHNhbWUgc2l6ZSBhcyBUVmlldyIpLGxuKHQuZGF0YS5sZW5ndGgsdC5ibHVlcHJpbnQubGVuZ3RoLCJFeHBlY3RpbmcgQmx1ZXByaW50IHRvIGJlIHNhbWUgc2l6ZSBhcyBUVmlldyIpLFRvKHQpKTtjb25zdCBpPWUubGVuZ3RoO2ZvcihsZXQgaT0wO2k8bjtpKyspZS5wdXNoKG8pLHQuYmx1ZXByaW50LnB1c2gobyksdC5kYXRhLnB1c2gobnVsbCk7cmV0dXJuIGl9ZnVuY3Rpb24gSmModCxlLG4pe25nRGV2TW9kZSYmbG4oc2koZSksITAsIlNob3VsZCBiZSBydW4gaW4gY3JlYXRpb24gbW9kZSIpLEZpKGUpO3RyeXtjb25zdCBvPXQudmlld1F1ZXJ5O251bGwhPT1vJiZOZCgxLG8sbik7Y29uc3QgaT10LnRlbXBsYXRlO251bGwhPT1pJiZ0ZCh0LGUsaSwxLG4pLHQuZmlyc3RDcmVhdGVQYXNzJiYodC5maXJzdENyZWF0ZVBhc3M9ITEpLHQuc3RhdGljQ29udGVudFF1ZXJpZXMmJlljKHQsZSksdC5zdGF0aWNWaWV3UXVlcmllcyYmTmQoMix0LnZpZXdRdWVyeSxuKTtjb25zdCBhPXQuY29tcG9uZW50cztudWxsIT09YSYmKGZ1bmN0aW9uIG8odCxlKXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKylTZCh0LGVbbl0pfSkoZSxhKX1jYXRjaChlKXt0aHJvdyB0LmZpcnN0Q3JlYXRlUGFzcyYmKHQuaW5jb21wbGV0ZUZpcnN0UGFzcz0hMCx0LmZpcnN0Q3JlYXRlUGFzcz0hMSksZX1maW5hbGx5e2VbMl0mPS01LFVpKCl9fWZ1bmN0aW9uIFFjKHQsZSxuLG8pe25nRGV2TW9kZSYmbG4oc2koZSksITEsIlNob3VsZCBiZSBydW4gaW4gdXBkYXRlIG1vZGUiKTtjb25zdCBpPWVbMl07aWYoMjU2PT0oMjU2JmkpKXJldHVybjtGaShlKTtjb25zdCBhPXhpKCk7dHJ5e2RpKGUpLGtpKHQuYmluZGluZ1N0YXJ0SW5kZXgpLG51bGwhPT1uJiZ0ZCh0LGUsbiwyLG8pO2NvbnN0IHI9Mz09KDMmaSk7aWYoIWEpaWYocil7Y29uc3Qgbj10LnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09biYmS2koZSxuLG51bGwpfWVsc2V7Y29uc3Qgbj10LnByZU9yZGVySG9va3M7bnVsbCE9PW4mJkppKGUsbiwwLG51bGwpLFFpKGUsMCl9aWYoKGZ1bmN0aW9uIHIodCl7Zm9yKGxldCBlPWZsKHQpO251bGwhPT1lO2U9Z2woZSkpe2lmKCFlWzJdKWNvbnRpbnVlO2NvbnN0IHQ9ZVs5XTtuZ0Rldk1vZGUmJmhuKHQsIlRyYW5zcGxhbnRlZCBWaWV3IGZsYWdzIHNldCBidXQgbWlzc2luZyBNT1ZFRF9WSUVXUyIpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtjb25zdCBuPXRbZV0sbz1uWzNdO25nRGV2TW9kZSYmRG8obyksMD09KDEwMjQmblsyXSkmJnBpKG8sMSksblsyXXw9MTAyNH19fSkoZSksKGZ1bmN0aW9uIHModCl7Zm9yKGxldCBlPWZsKHQpO251bGwhPT1lO2U9Z2woZSkpZm9yKGxldCB0PWJvO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCBuPWVbdF0sbz1uWzFdO25nRGV2TW9kZSYmaG4obywiVFZpZXcgbXVzdCBiZSBhbGxvY2F0ZWQiKSxsaShuKSYmUWMobyxuLG8udGVtcGxhdGUsbls4XSl9fSkoZSksbnVsbCE9PXQuY29udGVudFF1ZXJpZXMmJlljKHQsZSksIWEpaWYocil7Y29uc3Qgbj10LmNvbnRlbnRDaGVja0hvb2tzO251bGwhPT1uJiZLaShlLG4pfWVsc2V7Y29uc3Qgbj10LmNvbnRlbnRIb29rcztudWxsIT09biYmSmkoZSxuLDEpLFFpKGUsMSl9IShmdW5jdGlvbiBsKHQsZSl7Y29uc3Qgbj10Lmhvc3RCaW5kaW5nT3BDb2RlcztpZihudWxsIT09bil0cnl7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kyspe2NvbnN0IG89blt0XTtpZihvPDApV2kofm8pO2Vsc2V7Y29uc3QgaT1vLGE9blsrK3RdLHI9blsrK3RdO1JpKGEsaSkscigyLGVbaV0pfX19ZmluYWxseXtXaSgtMSl9fSkodCxlKTtjb25zdCBzPXQuY29tcG9uZW50cztudWxsIT09cyYmKGZ1bmN0aW9uIGModCxlKXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl3ZCh0LGVbbl0pfSkoZSxzKTtjb25zdCBsPXQudmlld1F1ZXJ5O2lmKG51bGwhPT1sJiZOZCgyLGwsbyksIWEpaWYocil7Y29uc3Qgbj10LnZpZXdDaGVja0hvb2tzO251bGwhPT1uJiZLaShlLG4pfWVsc2V7Y29uc3Qgbj10LnZpZXdIb29rcztudWxsIT09biYmSmkoZSxuLDIpLFFpKGUsMil9ITA9PT10LmZpcnN0VXBkYXRlUGFzcyYmKHQuZmlyc3RVcGRhdGVQYXNzPSExKSxhfHwoZVsyXSY9LTczKSwxMDI0JmVbMl0mJihlWzJdJj0tMTAyNSxwaShlWzNdLC0xKSl9ZmluYWxseXtVaSgpfX1mdW5jdGlvbiAkYyh0LGUsbixvKXtjb25zdCBpPWVbMTBdLGE9IXhpKCkscj1zaShlKTt0cnl7YSYmIXImJmkuYmVnaW4mJmkuYmVnaW4oKSxyJiZKYyh0LGUsbyksUWModCxlLG4sbyl9ZmluYWxseXthJiYhciYmaS5lbmQmJmkuZW5kKCl9fWZ1bmN0aW9uIHRkKHQsZSxuLG8saSl7Y29uc3QgYT1HaSgpLHI9MiZvO3RyeXtXaSgtMSksciYmZS5sZW5ndGg+Z28mJnNjKHQsZSxnbyx4aSgpKSxxbyhyPzI6MCxpKSxuKG8saSl9ZmluYWxseXtXaShhKSxxbyhyPzM6MSxpKX19ZnVuY3Rpb24gZWQodCxlLG4pe2lmKENvKGUpKXtjb25zdCBvPWUuZGlyZWN0aXZlRW5kO2ZvcihsZXQgaT1lLmRpcmVjdGl2ZVN0YXJ0O2k8bztpKyspe2NvbnN0IGU9dC5kYXRhW2ldO2UuY29udGVudFF1ZXJpZXMmJmUuY29udGVudFF1ZXJpZXMoMSxuW2ldLGkpfX19ZnVuY3Rpb24gbmQodCxlLG4pe3VpKCkmJigoZnVuY3Rpb24gbyh0LGUsbixpKXtjb25zdCBhPW4uZGlyZWN0aXZlU3RhcnQscj1uLmRpcmVjdGl2ZUVuZDt0LmZpcnN0Q3JlYXRlUGFzc3x8aGEobixlKSxMcyhpLGUpO2NvbnN0IHM9bi5pbml0aWFsSW5wdXRzO2ZvcihsZXQgbz1hO288cjtvKyspe2NvbnN0IGk9dC5kYXRhW29dLHI9eG8oaSk7ciYmKG5nRGV2TW9kZSYmaWEobiwzKSxfZChlLG4saSkpO2NvbnN0IGw9U2EoZSx0LG8sbik7THMobCxlKSxudWxsIT09cyYmdmQoZSxvLWEsbCxpLG4scyksciYmKHJpKG4uaW5kZXgsZSlbOF09bCl9fSkodCxlLG4sb2kobixlKSksMTI4PT0oMTI4Jm4uZmxhZ3MpJiYoZnVuY3Rpb24gaSh0LGUsbil7Y29uc3Qgbz1uLmRpcmVjdGl2ZVN0YXJ0LGk9bi5kaXJlY3RpdmVFbmQsYT1uLmluZGV4LHI9KGZ1bmN0aW9uIHMoKXtyZXR1cm4gbWkubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleH0pKCk7dHJ5e1dpKGEpO2ZvcihsZXQgbj1vO248aTtuKyspe2NvbnN0IG89dC5kYXRhW25dLGk9ZVtuXTtBaShuKSxudWxsPT09by5ob3N0QmluZGluZ3MmJjA9PT1vLmhvc3RWYXJzJiZudWxsPT09by5ob3N0QXR0cnN8fGZkKG8saSl9fWZpbmFsbHl7V2koLTEpLEFpKHIpfX0pKHQsZSxuKSl9ZnVuY3Rpb24gb2QodCxlLG49b2kpe2NvbnN0IG89ZS5sb2NhbE5hbWVzO2lmKG51bGwhPT1vKXtsZXQgaT1lLmluZGV4KzE7Zm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKz0yKXtjb25zdCByPW9bYSsxXSxzPS0xPT09cj9uKGUsdCk6dFtyXTt0W2krK109c319fWZ1bmN0aW9uIGlkKHQpe2NvbnN0IGU9dC50VmlldztyZXR1cm4gbnVsbD09PWV8fGUuaW5jb21wbGV0ZUZpcnN0UGFzcz90LnRWaWV3PWFkKDEsbnVsbCx0LnRlbXBsYXRlLHQuZGVjbHMsdC52YXJzLHQuZGlyZWN0aXZlRGVmcyx0LnBpcGVEZWZzLHQudmlld1F1ZXJ5LHQuc2NoZW1hcyx0LmNvbnN0cyk6ZX1mdW5jdGlvbiBhZCh0LGUsbixvLGksYSxyLHMsbCxjKXtuZ0Rldk1vZGUmJm5nRGV2TW9kZS50VmlldysrO2NvbnN0IGQ9Z28rbyxwPWQraSxtPShmdW5jdGlvbiB1KHQsZSl7Y29uc3Qgbj1uZ0Rldk1vZGU/bmV3IGtjOltdO2ZvcihsZXQgbz0wO288ZTtvKyspbi5wdXNoKG88dD9udWxsOmFjKTtyZXR1cm4gbn0pKGQscCksZj0iZnVuY3Rpb24iPT10eXBlb2YgYz9jKCk6YyxnPW1bMV09bmdEZXZNb2RlP25ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgsYix5LF8sQyxNLHYseCxPLFAsdyxrLFMsRCxFLFIpe3RoaXMudHlwZT10LHRoaXMuYmx1ZXByaW50PWUsdGhpcy50ZW1wbGF0ZT1uLHRoaXMucXVlcmllcz1vLHRoaXMudmlld1F1ZXJ5PWksdGhpcy5kZWNsVE5vZGU9YSx0aGlzLmRhdGE9cix0aGlzLmJpbmRpbmdTdGFydEluZGV4PXMsdGhpcy5leHBhbmRvU3RhcnRJbmRleD1sLHRoaXMuaG9zdEJpbmRpbmdPcENvZGVzPWMsdGhpcy5maXJzdENyZWF0ZVBhc3M9ZCx0aGlzLmZpcnN0VXBkYXRlUGFzcz1wLHRoaXMuc3RhdGljVmlld1F1ZXJpZXM9bSx0aGlzLnN0YXRpY0NvbnRlbnRRdWVyaWVzPXUsdGhpcy5wcmVPcmRlckhvb2tzPWYsdGhpcy5wcmVPcmRlckNoZWNrSG9va3M9Zyx0aGlzLmNvbnRlbnRIb29rcz1oLHRoaXMuY29udGVudENoZWNrSG9va3M9Yix0aGlzLnZpZXdIb29rcz15LHRoaXMudmlld0NoZWNrSG9va3M9Xyx0aGlzLmRlc3Ryb3lIb29rcz1DLHRoaXMuY2xlYW51cD1NLHRoaXMuY29udGVudFF1ZXJpZXM9dix0aGlzLmNvbXBvbmVudHM9eCx0aGlzLmRpcmVjdGl2ZVJlZ2lzdHJ5PU8sdGhpcy5waXBlUmVnaXN0cnk9UCx0aGlzLmZpcnN0Q2hpbGQ9dyx0aGlzLnNjaGVtYXM9ayx0aGlzLmNvbnN0cz1TLHRoaXMuaW5jb21wbGV0ZUZpcnN0UGFzcz1ELHRoaXMuX2RlY2xzPUUsdGhpcy5fdmFycz1SfWdldCB0ZW1wbGF0ZV8oKXtjb25zdCB0PVtdO3JldHVybiBPYyh0aGlzLmZpcnN0Q2hpbGQsdCksdC5qb2luKCIiKX1nZXQgdHlwZV8oKXtyZXR1cm4gaG9bdGhpcy50eXBlXXx8YFRWaWV3VHlwZS4/JHt0aGlzLnR5cGV9P2B9fSh0LG0sbixudWxsLHMsZSwoZnVuY3Rpb24gaCh0KXtyZXR1cm4gdm9pZCAwPT09d2MmJih3Yz1uZXcgUGMpLHdjLmNvbmNhdCh0KX0pKG0pLmZpbGwobnVsbCxkKSxkLHAsbnVsbCwhMCwhMCwhMSwhMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiBhP2EoKTphLCJmdW5jdGlvbiI9PXR5cGVvZiByP3IoKTpyLG51bGwsbCxmLCExLG8saSk6e3R5cGU6dCxibHVlcHJpbnQ6bSx0ZW1wbGF0ZTpuLHF1ZXJpZXM6bnVsbCx2aWV3UXVlcnk6cyxkZWNsVE5vZGU6ZSxkYXRhOm0uc2xpY2UoKS5maWxsKG51bGwsZCksYmluZGluZ1N0YXJ0SW5kZXg6ZCxleHBhbmRvU3RhcnRJbmRleDpwLGhvc3RCaW5kaW5nT3BDb2RlczpudWxsLGZpcnN0Q3JlYXRlUGFzczohMCxmaXJzdFVwZGF0ZVBhc3M6ITAsc3RhdGljVmlld1F1ZXJpZXM6ITEsc3RhdGljQ29udGVudFF1ZXJpZXM6ITEscHJlT3JkZXJIb29rczpudWxsLHByZU9yZGVyQ2hlY2tIb29rczpudWxsLGNvbnRlbnRIb29rczpudWxsLGNvbnRlbnRDaGVja0hvb2tzOm51bGwsdmlld0hvb2tzOm51bGwsdmlld0NoZWNrSG9va3M6bnVsbCxkZXN0cm95SG9va3M6bnVsbCxjbGVhbnVwOm51bGwsY29udGVudFF1ZXJpZXM6bnVsbCxjb21wb25lbnRzOm51bGwsZGlyZWN0aXZlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIGE/YSgpOmEscGlwZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiByP3IoKTpyLGZpcnN0Q2hpbGQ6bnVsbCxzY2hlbWFzOmwsY29uc3RzOmYsaW5jb21wbGV0ZUZpcnN0UGFzczohMX07cmV0dXJuIG5nRGV2TW9kZSYmT2JqZWN0LnNlYWwoZyksZ31mdW5jdGlvbiByZCh0LGUsbixvKXtjb25zdCBpPUhkKGUpO251bGw9PT1uPyhuZ0Rldk1vZGUmJk9iamVjdC5mcmVlemUoRmQodCkpLGkucHVzaChvKSk6KGkucHVzaChuKSx0LmZpcnN0Q3JlYXRlUGFzcyYmRmQodCkucHVzaChvLGkubGVuZ3RoLTEpKX1mdW5jdGlvbiBzZCh0LGUsbil7Zm9yKGxldCBvIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShvKSl7Y29uc3QgaT10W29dOyhuPW51bGw9PT1uP3t9Om4pLmhhc093blByb3BlcnR5KG8pP25bb10ucHVzaChlLGkpOm5bb109W2UsaV19cmV0dXJuIG59ZnVuY3Rpb24gbGQodCxlLG4sbyxpLGEscixzKXtuZ0Rldk1vZGUmJnBuKGksYWMsIkluY29taW5nIHZhbHVlIHNob3VsZCBuZXZlciBiZSBOT19DSEFOR0UuIik7Y29uc3QgbD1vaShlLG4pO2xldCBjLGQ9ZS5pbnB1dHM7aWYoIXMmJm51bGwhPWQmJihjPWRbb10pKVZkKHQsbixjLG8saSksTW8oZSkmJihmdW5jdGlvbiBwKHQsZSl7bmdEZXZNb2RlJiZSbyh0KTtjb25zdCBuPXJpKGUsdCk7MTYmblsyXXx8KG5bMl18PTY0KX0pKG4sZS5pbmRleCksbmdEZXZNb2RlJiYoZnVuY3Rpb24gbSh0LGUsbixvLGkpe2lmKDcmbilmb3IobGV0IGE9MDthPG8ubGVuZ3RoO2ErPTIpY2QodCxlLG4sb1thKzFdLGkpfSkobixsLGUudHlwZSxjLGkpO2Vsc2UgaWYoMyZlLnR5cGUpe2lmKG89KGZ1bmN0aW9uIHUodCl7cmV0dXJuImNsYXNzIj09PXQ/ImNsYXNzTmFtZSI6ImZvciI9PT10PyJodG1sRm9yIjoiZm9ybWFjdGlvbiI9PT10PyJmb3JtQWN0aW9uIjoiaW5uZXJIdG1sIj09PXQ/ImlubmVySFRNTCI6InJlYWRvbmx5Ij09PXQ/InJlYWRPbmx5IjoidGFiaW5kZXgiPT09dD8idGFiSW5kZXgiOnR9KShvKSxuZ0Rldk1vZGUpe2lmKChmdW5jdGlvbiBmKHQpe2lmKHQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJvbiIpKXtjb25zdCBlPWBCaW5kaW5nIHRvIGV2ZW50IHByb3BlcnR5ICcke3R9JyBpcyBkaXNhbGxvd2VkIGZvciBzZWN1cml0eSByZWFzb25zLCBwbGVhc2UgdXNlICgke3Quc2xpY2UoMil9KT0uLi5cbklmICcke3R9JyBpcyBhIGRpcmVjdGl2ZSBpbnB1dCwgbWFrZSBzdXJlIHRoZSBkaXJlY3RpdmUgaXMgaW1wb3J0ZWQgYnkgdGhlIGN1cnJlbnQgbW9kdWxlLmA7dGhyb3cgbmV3IEVycm9yKGUpfX0pKG8pLCEoZnVuY3Rpb24gZyh0LGUsbixvKXtyZXR1cm4hKG51bGwhPT10LnNjaGVtYXMmJiEoZGQodCxvLnZhbHVlKXx8biBpbiBlfHxzYShuKSkmJiJ1bmRlZmluZWQiIT10eXBlb2YgTm9kZSYmbnVsbCE9PU5vZGUmJmUgaW5zdGFuY2VvZiBOb2RlKX0pKHQsbCxvLGUpKXJldHVybiB2b2lkIHBkKG8sZSk7bmdEZXZNb2RlLnJlbmRlcmVyU2V0UHJvcGVydHkrK31pPW51bGwhPXI/cihpLGUudmFsdWV8fCIiLG8pOmksJG8oYSk/YS5zZXRQcm9wZXJ0eShsLG8saSk6c2Eobyl8fChsLnNldFByb3BlcnR5P2wuc2V0UHJvcGVydHkobyxpKTpsW29dPWkpfWVsc2UgMTImZS50eXBlJiZuZ0Rldk1vZGUmJiFkZCh0LGUudmFsdWUpJiZwZChvLGUpfWZ1bmN0aW9uIGNkKHQsZSxuLG8saSl7Y29uc3QgYT10WzExXTtvPShmdW5jdGlvbiByKHQpe3JldHVybmBuZy1yZWZsZWN0LSR7dD0oZnVuY3Rpb24gZSh0KXtyZXR1cm4gdC5yZXBsYWNlKGVsLCgoLi4udCk9PiItIit0WzFdLnRvTG93ZXJDYXNlKCkpKX0pKHQucmVwbGFjZSgvWyRAXS9nLCJfIikpfWB9KShvKTtjb25zdCBzPShmdW5jdGlvbiBsKHQpe3RyeXtyZXR1cm4gbnVsbCE9dD90LnRvU3RyaW5nKCkuc2xpY2UoMCwzMCk6dH1jYXRjaCh0KXtyZXR1cm4iW0VSUk9SXSBFeGNlcHRpb24gd2hpbGUgdHJ5aW5nIHRvIHNlcmlhbGl6ZSB0aGUgdmFsdWUifX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKShpKTtpZigzJm4pbnVsbD09aT8kbyhhKT9hLnJlbW92ZUF0dHJpYnV0ZShlLG8pOmUucmVtb3ZlQXR0cmlidXRlKG8pOiRvKGEpP2Euc2V0QXR0cmlidXRlKGUsbyxzKTplLnNldEF0dHJpYnV0ZShvLHMpO2Vsc2V7Y29uc3QgdD0kcyhgYmluZGluZ3M9JHtKU09OLnN0cmluZ2lmeSh7W29dOnN9LG51bGwsMil9YCk7JG8oYSk/YS5zZXRWYWx1ZShlLHQpOmUudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gZGQodCxlKXtjb25zdCBuPXQuc2NoZW1hcztpZihudWxsIT09bilmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyl7Y29uc3Qgbz1uW3RdO2lmKG89PT1Lc3x8bz09PVhzJiZlJiZlLmluZGV4T2YoIi0iKT4tMSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBwZCh0LGUpe2NvbnNvbGUuZXJyb3IoUWUoIjMwMyIsYENhbid0IGJpbmQgdG8gJyR7dH0nIHNpbmNlIGl0IGlzbid0IGEga25vd24gcHJvcGVydHkgb2YgJyR7ZS52YWx1ZX0nLmApKX1mdW5jdGlvbiBtZCh0LGUsbixvKXtuZ0Rldk1vZGUmJkFvKHQpO2xldCBpPSExO2lmKHVpKCkpe2NvbnN0IGE9KGZ1bmN0aW9uIGEodCxlLG4pe25nRGV2TW9kZSYmQW8odCksbmdEZXZNb2RlJiZpYShuLDE1KTtjb25zdCBvPXQuZGlyZWN0aXZlUmVnaXN0cnk7bGV0IGk9bnVsbDtpZihvKWZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKXtjb25zdCByPW9bYV07ZWMobixyLnNlbGVjdG9ycywhMSkmJihpfHwoaT1uZ0Rldk1vZGU/bmV3IFNjOltdKSxDYShoYShuLGUpLHQsci50eXBlKSx4byhyKT8obmdEZXZNb2RlJiYoaWEobiwyLGAiJHtuLnZhbHVlfSIgdGFncyBjYW5ub3QgYmUgdXNlZCBhcyBjb21wb25lbnQgaG9zdHMuIFBsZWFzZSB1c2UgYSBkaWZmZXJlbnQgdGFnIHRvIGFjdGl2YXRlIHRoZSAke0dlKHIudHlwZSl9IGNvbXBvbmVudC5gKSwyJm4uZmxhZ3MmJnNsKG4pKSxnZCh0LG4pLGkudW5zaGlmdChyKSk6aS5wdXNoKHIpKX1yZXR1cm4gaX0pKHQsZSxuKSxyPW51bGw9PT1vP251bGw6eyIiOi0xfTtpZihudWxsIT09YSl7aT0hMCxiZChuLHQuZGF0YS5sZW5ndGgsYS5sZW5ndGgpO2ZvcihsZXQgdD0wO3Q8YS5sZW5ndGg7dCsrKXtjb25zdCBlPWFbdF07ZS5wcm92aWRlcnNSZXNvbHZlciYmZS5wcm92aWRlcnNSZXNvbHZlcihlKX1sZXQgbz0hMSxzPSExLGw9S2ModCxlLGEubGVuZ3RoLG51bGwpO25nRGV2TW9kZSYmZG4obCxuLmRpcmVjdGl2ZVN0YXJ0LCJUTm9kZS5kaXJlY3RpdmVTdGFydCBzaG91bGQgcG9pbnQgdG8ganVzdCBhbGxvY2F0ZWQgc3BhY2UiKTtmb3IobGV0IGk9MDtpPGEubGVuZ3RoO2krKyl7Y29uc3QgYz1hW2ldO24ubWVyZ2VkQXR0cnM9bGEobi5tZXJnZWRBdHRycyxjLmhvc3RBdHRycykseWQodCxuLGUsbCxjKSxoZChsLGMsciksbnVsbCE9PWMuY29udGVudFF1ZXJpZXMmJihuLmZsYWdzfD04KSxudWxsPT09Yy5ob3N0QmluZGluZ3MmJm51bGw9PT1jLmhvc3RBdHRycyYmMD09PWMuaG9zdFZhcnN8fChuLmZsYWdzfD0xMjgpO2NvbnN0IGQ9Yy50eXBlLnByb3RvdHlwZTshbyYmKGQubmdPbkNoYW5nZXN8fGQubmdPbkluaXR8fGQubmdEb0NoZWNrKSYmKCh0LnByZU9yZGVySG9va3N8fCh0LnByZU9yZGVySG9va3M9W10pKS5wdXNoKG4uaW5kZXgpLG89ITApLHN8fCFkLm5nT25DaGFuZ2VzJiYhZC5uZ0RvQ2hlY2t8fCgodC5wcmVPcmRlckNoZWNrSG9va3N8fCh0LnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2gobi5pbmRleCkscz0hMCksbCsrfSEoZnVuY3Rpb24gcih0LGUpe25nRGV2TW9kZSYmQW8odCk7Y29uc3Qgbj1lLmRpcmVjdGl2ZVN0YXJ0LG89ZS5kaXJlY3RpdmVFbmQsaT10LmRhdGEsYT1lLmF0dHJzLHI9bmdEZXZNb2RlP25ldyBSYzpbXTtsZXQgcz1udWxsLGw9bnVsbDtmb3IobGV0IHQ9bjt0PG87dCsrKXtjb25zdCBuPWlbdF0sbz1uLmlucHV0cyxjPW51bGw9PT1hfHxLbChlKT9udWxsOnhkKG8sYSk7ci5wdXNoKGMpLHM9c2Qobyx0LHMpLGw9c2Qobi5vdXRwdXRzLHQsbCl9bnVsbCE9PXMmJihzLmhhc093blByb3BlcnR5KCJjbGFzcyIpJiYoZS5mbGFnc3w9MTYpLHMuaGFzT3duUHJvcGVydHkoInN0eWxlIikmJihlLmZsYWdzfD0zMikpLGUuaW5pdGlhbElucHV0cz1yLGUuaW5wdXRzPXMsZS5vdXRwdXRzPWx9KSh0LG4pfXImJihmdW5jdGlvbiBzKHQsZSxuKXtpZihlKXtjb25zdCBvPXQubG9jYWxOYW1lcz1uZ0Rldk1vZGU/bmV3IEVjOltdO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCs9Mil7Y29uc3QgaT1uW2VbdCsxXV07aWYobnVsbD09aSl0aHJvdyBuZXcgS2UoIjMwMSIsYEV4cG9ydCBvZiBuYW1lICcke2VbdCsxXX0nIG5vdCBmb3VuZCFgKTtvLnB1c2goZVt0XSxpKX19fSkobixvLHIpfXJldHVybiBuLm1lcmdlZEF0dHJzPWxhKG4ubWVyZ2VkQXR0cnMsbi5hdHRycyksaX1mdW5jdGlvbiB1ZCh0LGUsbixvLGksYSl7bmdEZXZNb2RlJiZBbyh0KTtjb25zdCByPWEuaG9zdEJpbmRpbmdzO2lmKHIpe2xldCBuPXQuaG9zdEJpbmRpbmdPcENvZGVzO251bGw9PT1uJiYobj10Lmhvc3RCaW5kaW5nT3BDb2Rlcz1bXSk7Y29uc3QgYT1+ZS5pbmRleDsoZnVuY3Rpb24gcyh0KXtsZXQgZT10Lmxlbmd0aDtmb3IoO2U+MDspe2NvbnN0IG49dFstLWVdO2lmKCJudW1iZXIiPT10eXBlb2YgbiYmbjwwKXJldHVybiBufXJldHVybiAwfSkobikhPWEmJm4ucHVzaChhKSxuLnB1c2gobyxpLHIpfX1mdW5jdGlvbiBmZCh0LGUpe251bGwhPT10Lmhvc3RCaW5kaW5ncyYmdC5ob3N0QmluZGluZ3MoMSxlKX1mdW5jdGlvbiBnZCh0LGUpe25nRGV2TW9kZSYmQW8odCksZS5mbGFnc3w9MiwodC5jb21wb25lbnRzfHwodC5jb21wb25lbnRzPW5nRGV2TW9kZT9uZXcgRGM6W10pKS5wdXNoKGUuaW5kZXgpfWZ1bmN0aW9uIGhkKHQsZSxuKXtpZihuKXtpZihlLmV4cG9ydEFzKWZvcihsZXQgbz0wO288ZS5leHBvcnRBcy5sZW5ndGg7bysrKW5bZS5leHBvcnRBc1tvXV09dDt4byhlKSYmKG5bIiJdPXQpfX1mdW5jdGlvbiBiZCh0LGUsbil7bmdEZXZNb2RlJiZjbihuLHQuZGlyZWN0aXZlRW5kLXQuZGlyZWN0aXZlU3RhcnQsIlJlYWNoZWQgdGhlIG1heCBudW1iZXIgb2YgZGlyZWN0aXZlcyIpLHQuZmxhZ3N8PTEsdC5kaXJlY3RpdmVTdGFydD1lLHQuZGlyZWN0aXZlRW5kPWUrbix0LnByb3ZpZGVySW5kZXhlcz1lfWZ1bmN0aW9uIHlkKHQsZSxuLG8saSl7bmdEZXZNb2RlJiZnbihvLGdvLCJNdXN0IGJlIGluIEV4cGFuZG8gc2VjdGlvbiIpLHQuZGF0YVtvXT1pO2NvbnN0IGE9aS5mYWN0b3J5fHwoaS5mYWN0b3J5PUZvKGkudHlwZSwhMCkpLHI9bmV3IG5hKGEseG8oaSksbnVsbCk7dC5ibHVlcHJpbnRbb109cixuW29dPXIsdWQodCxlLDAsbyxLYyh0LG4saS5ob3N0VmFycyxhYyksaSl9ZnVuY3Rpb24gX2QodCxlLG4pe2NvbnN0IG89b2koZSx0KSxpPWlkKG4pLGE9dFsxMF0scj1EZCh0LHFjKHQsaSxudWxsLG4ub25QdXNoPzY0OjE2LG8sZSxhLGEuY3JlYXRlUmVuZGVyZXIobyxuKSxudWxsLG51bGwpKTt0W2UuaW5kZXhdPXJ9ZnVuY3Rpb24gQ2QodCxlLG4sbyxpLGEpe25nRGV2TW9kZSYmKHBuKG8sYWMsIkluY29taW5nIHZhbHVlIHNob3VsZCBuZXZlciBiZSBOT19DSEFOR0UuIiksKGZ1bmN0aW9uIHIodCl7aWYodC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoIm9uIikpe2NvbnN0IGU9YEJpbmRpbmcgdG8gZXZlbnQgYXR0cmlidXRlICcke3R9JyBpcyBkaXNhbGxvd2VkIGZvciBzZWN1cml0eSByZWFzb25zLCBwbGVhc2UgdXNlICgke3Quc2xpY2UoMil9KT0uLi5gO3Rocm93IG5ldyBFcnJvcihlKX19KShuKSxpYSh0LDIsYEF0dGVtcHRlZCB0byBzZXQgYXR0cmlidXRlIFxgJHtufVxgIG9uIGEgY29udGFpbmVyIG5vZGUuIEhvc3QgYmluZGluZ3MgYXJlIG5vdCB2YWxpZCBvbiBuZy1jb250YWluZXIgb3IgbmctdGVtcGxhdGUuYCkpO2NvbnN0IHM9b2kodCxlKTtNZChlWzExXSxzLGEsdC52YWx1ZSxuLG8saSl9ZnVuY3Rpb24gTWQodCxlLG4sbyxpLGEscil7aWYobnVsbD09YSluZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlclJlbW92ZUF0dHJpYnV0ZSsrLCRvKHQpP3QucmVtb3ZlQXR0cmlidXRlKGUsaSxuKTplLnJlbW92ZUF0dHJpYnV0ZShpKTtlbHNle25nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyU2V0QXR0cmlidXRlKys7Y29uc3Qgcz1udWxsPT1yPyRlKGEpOnIoYSxvfHwiIixpKTskbyh0KT90LnNldEF0dHJpYnV0ZShlLGkscyxuKTpuP2Uuc2V0QXR0cmlidXRlTlMobixpLHMpOmUuc2V0QXR0cmlidXRlKGkscyl9fWZ1bmN0aW9uIHZkKHQsZSxuLG8saSxhKXtjb25zdCByPWFbZV07aWYobnVsbCE9PXIpe2NvbnN0IGU9by5zZXRJbnB1dDtmb3IobGV0IGE9MDthPHIubGVuZ3RoOyl7Y29uc3Qgcz1yW2ErK10sbD1yW2ErK10sYz1yW2ErK107bnVsbCE9PWU/by5zZXRJbnB1dChuLGMscyxsKTpuW2xdPWMsbmdEZXZNb2RlJiZjZCh0LG9pKGksdCksaS50eXBlLGwsYyl9fX1mdW5jdGlvbiB4ZCh0LGUpe2xldCBuPW51bGwsbz0wO2Zvcig7bzxlLmxlbmd0aDspe2NvbnN0IGk9ZVtvXTtpZigwIT09aSlpZig1IT09aSl7aWYoIm51bWJlciI9PXR5cGVvZiBpKWJyZWFrO3QuaGFzT3duUHJvcGVydHkoaSkmJihudWxsPT09biYmKG49W10pLG4ucHVzaChpLHRbaV0sZVtvKzFdKSksbys9Mn1lbHNlIG8rPTI7ZWxzZSBvKz00fXJldHVybiBufWNvbnN0IE9kPSgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmVW4oKSYmdGwoIkxDb250YWluZXIiKTtmdW5jdGlvbiBQZCh0LGUsbixvKXtuZ0Rldk1vZGUmJlJvKGUpLG5nRGV2TW9kZSYmISRvKGVbMTFdKSYmeW4obik7Y29uc3QgaT1uZXcobmdEZXZNb2RlP09kOkFycmF5KSh0LCEwLCExLGUsbnVsbCwwLG8sbixudWxsLG51bGwpO3JldHVybiBuZ0Rldk1vZGUmJmxuKGkubGVuZ3RoLGJvLCJTaG91bGQgYWxsb2NhdGUgY29ycmVjdCBudW1iZXIgb2Ygc2xvdHMgZm9yIExDb250YWluZXIgaGVhZGVyLiIpLG5nRGV2TW9kZSYmKGZ1bmN0aW9uIGEodCl7aGModCxuZXcgR2ModCkpfSkoaSksaX1mdW5jdGlvbiB3ZCh0LGUpe25nRGV2TW9kZSYmbG4oc2kodCksITEsIlNob3VsZCBiZSBydW4gaW4gdXBkYXRlIG1vZGUiKTtjb25zdCBuPXJpKGUsdCk7aWYobGkobikpe2NvbnN0IHQ9blsxXTs4MCZuWzJdP1FjKHQsbix0LnRlbXBsYXRlLG5bOF0pOm5bNV0+MCYma2Qobil9fWZ1bmN0aW9uIGtkKHQpe2ZvcihsZXQgZT1mbCh0KTtudWxsIT09ZTtlPWdsKGUpKWZvcihsZXQgdD1ibzt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdO2lmKDEwMjQmblsyXSl7Y29uc3QgdD1uWzFdO25nRGV2TW9kZSYmaG4odCwiVFZpZXcgbXVzdCBiZSBhbGxvY2F0ZWQiKSxRYyh0LG4sdC50ZW1wbGF0ZSxuWzhdKX1lbHNlIG5bNV0+MCYma2Qobil9Y29uc3QgZT10WzFdLmNvbXBvbmVudHM7aWYobnVsbCE9PWUpZm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2NvbnN0IG89cmkoZVtuXSx0KTtsaShvKSYmb1s1XT4wJiZrZChvKX19ZnVuY3Rpb24gU2QodCxlKXtuZ0Rldk1vZGUmJmxuKHNpKHQpLCEwLCJTaG91bGQgYmUgcnVuIGluIGNyZWF0aW9uIG1vZGUiKTtjb25zdCBuPXJpKGUsdCksbz1uWzFdOyEoZnVuY3Rpb24gaSh0LGUpe2ZvcihsZXQgbj1lLmxlbmd0aDtuPHQuYmx1ZXByaW50Lmxlbmd0aDtuKyspZS5wdXNoKHQuYmx1ZXByaW50W25dKX0pKG8sbiksSmMobyxuLG5bOF0pfWZ1bmN0aW9uIERkKHQsZSl7cmV0dXJuIHRbMTNdP3RbMTRdWzRdPWU6dFsxM109ZSx0WzE0XT1lLGV9ZnVuY3Rpb24gRWQodCl7Zm9yKDt0Oyl7dFsyXXw9NjQ7Y29uc3QgZT1tbCh0KTtpZigwIT0oNTEyJnRbMl0pJiYhZSlyZXR1cm4gdDt0PWV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gUmQodCl7Zm9yKGxldCBlPTA7ZTx0LmNvbXBvbmVudHMubGVuZ3RoO2UrKyl7Y29uc3Qgbj10LmNvbXBvbmVudHNbZV0sbz1WcyhuKSxpPW9bMV07JGMoaSxvLGkudGVtcGxhdGUsbil9fWZ1bmN0aW9uIEFkKHQsZSxuKXtjb25zdCBvPWVbMTBdO28uYmVnaW4mJm8uYmVnaW4oKTt0cnl7UWModCxlLHQudGVtcGxhdGUsbil9Y2F0Y2godCl7dGhyb3cgQmQoZSx0KSx0fWZpbmFsbHl7by5lbmQmJm8uZW5kKCl9fWZ1bmN0aW9uIFRkKHQpe1JkKHRbOF0pfWZ1bmN0aW9uIE5kKHQsZSxuKXtuZ0Rldk1vZGUmJmhuKGUsIlZpZXcgcXVlcmllcyBmdW5jdGlvbiB0byBleGVjdXRlIG11c3QgYmUgZGVmaW5lZC4iKSx6aSgwKSxlKHQsbil9ZnVuY3Rpb24gemQodCxlLG4sbywuLi5pKXtpZihudWxsPT09dFtvXSYmKG51bGw9PWUuaW5wdXRzfHwhZS5pbnB1dHNbbl0pKXsoZS5wcm9wZXJ0eUJpbmRpbmdzfHwoZS5wcm9wZXJ0eUJpbmRpbmdzPVtdKSkucHVzaChvKTtsZXQgYT1uO2kubGVuZ3RoPjAmJihhKz1hbCtpLmpvaW4oYWwpKSx0W29dPWF9fWNvbnN0IElkPVdjO2Z1bmN0aW9uIEhkKHQpe3JldHVybiB0WzddfHwodFs3XT1uZ0Rldk1vZGU/bmV3IEFjOltdKX1mdW5jdGlvbiBGZCh0KXtyZXR1cm4gdC5jbGVhbnVwfHwodC5jbGVhbnVwPW5nRGV2TW9kZT9uZXcgVGM6W10pfWZ1bmN0aW9uIExkKHQsZSxuKXtyZXR1cm4obnVsbD09PXR8fHhvKHQpKSYmKG49KGZ1bmN0aW9uIG8odCl7Zm9yKDtBcnJheS5pc0FycmF5KHQpOyl7aWYoIm9iamVjdCI9PXR5cGVvZiB0WzFdKXJldHVybiB0O3Q9dFswXX1yZXR1cm4gbnVsbH0pKG5bZS5pbmRleF0pKSxuWzExXX1mdW5jdGlvbiBCZCh0LGUpe2NvbnN0IG49dFs5XSxvPW4/bi5nZXQoWnMsbnVsbCk6bnVsbDtvJiZvLmhhbmRsZUVycm9yKGUpfWZ1bmN0aW9uIFZkKHQsZSxuLG8saSl7Zm9yKGxldCBhPTA7YTxuLmxlbmd0aDspe2NvbnN0IHI9blthKytdLHM9blthKytdLGw9ZVtyXTtuZ0Rldk1vZGUmJl9uKGUscik7Y29uc3QgYz10LmRhdGFbcl07bnVsbCE9PWMuc2V0SW5wdXQ/Yy5zZXRJbnB1dChsLGksbyxzKTpsW3NdPWl9fWZ1bmN0aW9uIGpkKHQsZSxuKXtuZ0Rldk1vZGUmJnNuKG4sIlZhbHVlIHNob3VsZCBiZSBhIHN0cmluZyIpLG5nRGV2TW9kZSYmcG4obixhYywidmFsdWUgc2hvdWxkIG5vdCBiZSBOT19DSEFOR0UiKSxuZ0Rldk1vZGUmJl9uKHQsZSk7Y29uc3Qgbz1uaShlLHQpO25nRGV2TW9kZSYmaG4obywibmF0aXZlIGVsZW1lbnQgc2hvdWxkIGV4aXN0IiksX2wodFsxMV0sbyxuKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gVWQodCxlLG4pe25nRGV2TW9kZSYmQW8oZ2koKSwiRXhwZWN0aW5nIHRvIGJlIGNhbGxlZCBpbiBmaXJzdCB0ZW1wbGF0ZSBwYXNzIG9ubHkiKTtsZXQgbz1uP3Quc3R5bGVzOm51bGwsaT1uP3QuY2xhc3NlczpudWxsLGE9MDtpZihudWxsIT09ZSlmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdOyJudW1iZXIiPT10eXBlb2Ygbj9hPW46MT09YT9pPVdlKGksbik6Mj09YSYmKG89V2UobyxuKyI6ICIrZVsrK3RdKyI7IikpfW4/dC5zdHlsZXM9bzp0LnN0eWxlc1dpdGhvdXRIb3N0PW8sbj90LmNsYXNzZXM9aTp0LmNsYXNzZXNXaXRob3V0SG9zdD1pfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IEdkPW5ldyBHYSgiSU5KRUNUT1IiLC0xKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgV2R7Z2V0KHQsZT1ncil7aWYoZT09PWdyKXtjb25zdCBlPW5ldyBFcnJvcihgTnVsbEluamVjdG9yRXJyb3I6IE5vIHByb3ZpZGVyIGZvciAke0dlKHQpfSFgKTt0aHJvdyBlLm5hbWU9Ik51bGxJbmplY3RvckVycm9yIixlfXJldHVybiBlfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgWWQ9bmV3IEdhKCJTZXQgSW5qZWN0b3Igc2NvcGUuIikscWQ9e30sWmQ9e307Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2xldCBYZDtmdW5jdGlvbiBLZCgpe3JldHVybiB2b2lkIDA9PT1YZCYmKFhkPW5ldyBXZCksWGR9ZnVuY3Rpb24gSmQodCxlPW51bGwsbj1udWxsLG8pe3JldHVybiBuZXcgUWQodCxuLGV8fEtkKCksbyl9Y2xhc3MgUWR7Y29uc3RydWN0b3IodCxlLG4sbz1udWxsKXt0aGlzLnBhcmVudD1uLHRoaXMucmVjb3Jkcz1uZXcgTWFwLHRoaXMuaW5qZWN0b3JEZWZUeXBlcz1uZXcgU2V0LHRoaXMub25EZXN0cm95PW5ldyBTZXQsdGhpcy5fZGVzdHJveWVkPSExO2NvbnN0IGk9W107ZSYmZXIoZSwobj0+dGhpcy5wcm9jZXNzUHJvdmlkZXIobix0LGUpKSksZXIoW3RdLCh0PT50aGlzLnByb2Nlc3NJbmplY3RvclR5cGUodCxbXSxpKSkpLHRoaXMucmVjb3Jkcy5zZXQoR2QsZXAodm9pZCAwLHRoaXMpKTtjb25zdCBhPXRoaXMucmVjb3Jkcy5nZXQoWWQpO3RoaXMuc2NvcGU9bnVsbCE9YT9hLnZhbHVlOm51bGwsdGhpcy5zb3VyY2U9b3x8KCJvYmplY3QiPT10eXBlb2YgdD9udWxsOkdlKHQpKX1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1kZXN0cm95KCl7dGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSx0aGlzLl9kZXN0cm95ZWQ9ITA7dHJ5e3RoaXMub25EZXN0cm95LmZvckVhY2goKHQ9PnQubmdPbkRlc3Ryb3koKSkpfWZpbmFsbHl7dGhpcy5yZWNvcmRzLmNsZWFyKCksdGhpcy5vbkRlc3Ryb3kuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKX19Z2V0KHQsZT1ncixuPUVuLkRlZmF1bHQpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7Y29uc3Qgbz1Dcih0aGlzKSxpPUFuKHZvaWQgMCk7dHJ5e2lmKCEobiZFbi5Ta2lwU2VsZikpe2xldCBlPXRoaXMucmVjb3Jkcy5nZXQodCk7aWYodm9pZCAwPT09ZSl7Y29uc3Qgbj0oZnVuY3Rpb24gbyh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdHx8Im9iamVjdCI9PXR5cGVvZiB0JiZ0IGluc3RhbmNlb2YgR2F9KSh0KSYmeG4odCk7ZT1uJiZ0aGlzLmluamVjdGFibGVEZWZJblNjb3BlKG4pP2VwKCRkKHQpLHFkKTpudWxsLHRoaXMucmVjb3Jkcy5zZXQodCxlKX1pZihudWxsIT1lKXJldHVybiB0aGlzLmh5ZHJhdGUodCxlKX1yZXR1cm4obiZFbi5TZWxmP0tkKCk6dGhpcy5wYXJlbnQpLmdldCh0LGU9biZFbi5PcHRpb25hbCYmZT09PWdyP251bGw6ZSl9Y2F0Y2goZSl7aWYoIk51bGxJbmplY3RvckVycm9yIj09PWUubmFtZSl7aWYoKGUubmdUZW1wVG9rZW5QYXRoPWUubmdUZW1wVG9rZW5QYXRofHxbXSkudW5zaGlmdChHZSh0KSksbyl0aHJvdyBlO3JldHVybihmdW5jdGlvbiBuKHQsZSxvLGkpe2NvbnN0IGE9dC5uZ1RlbXBUb2tlblBhdGg7dGhyb3cgZVticl0mJmEudW5zaGlmdChlW2JyXSksdC5tZXNzYWdlPShmdW5jdGlvbiByKHQsZSxuLG89bnVsbCl7dD10JiYiXG4iPT09dC5jaGFyQXQoMCkmJiLJtSI9PXQuY2hhckF0KDEpP3Quc3Vic3RyKDIpOnQ7bGV0IGk9R2UoZSk7aWYoQXJyYXkuaXNBcnJheShlKSlpPWUubWFwKEdlKS5qb2luKCIgLT4gIik7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGUpe2xldCB0PVtdO2ZvcihsZXQgbiBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobikpe2xldCBvPWVbbl07dC5wdXNoKG4rIjoiKygic3RyaW5nIj09dHlwZW9mIG8/SlNPTi5zdHJpbmdpZnkobyk6R2UobykpKX1pPWB7JHt0LmpvaW4oIiwgIil9fWB9cmV0dXJuYCR7bn0ke28/IigiK28rIikiOiIifVske2l9XTogJHt0LnJlcGxhY2UoaHIsIlxuICAiKX1gfSkoIlxuIit0Lm1lc3NhZ2UsYSxvLGkpLHQubmdUb2tlblBhdGg9YSx0Lm5nVGVtcFRva2VuUGF0aD1udWxsLHR9KShlLHQsIlIzSW5qZWN0b3JFcnJvciIsdGhpcy5zb3VyY2UpfXRocm93IGV9ZmluYWxseXtBbihpKSxDcihvKX19X3Jlc29sdmVJbmplY3RvckRlZlR5cGVzKCl7dGhpcy5pbmplY3RvckRlZlR5cGVzLmZvckVhY2goKHQ9PnRoaXMuZ2V0KHQpKSl9dG9TdHJpbmcoKXtjb25zdCB0PVtdO3JldHVybiB0aGlzLnJlY29yZHMuZm9yRWFjaCgoKGUsbik9PnQucHVzaChHZShuKSkpKSxgUjNJbmplY3Rvclske3Quam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJJbmplY3RvciBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4iKX1wcm9jZXNzSW5qZWN0b3JUeXBlKHQsZSxuKXtpZighKHQ9WmUodCkpKXJldHVybiExO2xldCBvPVBuKHQpO2NvbnN0IGk9bnVsbD09byYmdC5uZ01vZHVsZXx8dm9pZCAwLGE9dm9pZCAwPT09aT90Omk7bmdEZXZNb2RlJiYtMSE9PWUuaW5kZXhPZihhKSYmZW4oR2UoYSksZS5tYXAoR2UpKTtjb25zdCByPS0xIT09bi5pbmRleE9mKGEpO2lmKHZvaWQgMCE9PWkmJihvPVBuKGkpKSxudWxsPT1vKXJldHVybiExO2lmKG51bGwhPW8uaW1wb3J0cyYmIXIpe2xldCB0O25nRGV2TW9kZSYmZS5wdXNoKGEpLG4ucHVzaChhKTt0cnl7ZXIoby5pbXBvcnRzLChvPT57dGhpcy5wcm9jZXNzSW5qZWN0b3JUeXBlKG8sZSxuKSYmKHZvaWQgMD09PXQmJih0PVtdKSx0LnB1c2gobykpfSkpfWZpbmFsbHl7bmdEZXZNb2RlJiZlLnBvcCgpfWlmKHZvaWQgMCE9PXQpZm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2NvbnN0e25nTW9kdWxlOm4scHJvdmlkZXJzOm99PXRbZV07ZXIobywodD0+dGhpcy5wcm9jZXNzUHJvdmlkZXIodCxuLG98fFduKSkpfX10aGlzLmluamVjdG9yRGVmVHlwZXMuYWRkKGEpO2NvbnN0IHM9Rm8oYSl8fCgoKT0+bmV3IGEpO3RoaXMucmVjb3Jkcy5zZXQoYSxlcChzLHFkKSk7Y29uc3QgbD1vLnByb3ZpZGVycztpZihudWxsIT1sJiYhcil7Y29uc3QgZT10O2VyKGwsKHQ9PnRoaXMucHJvY2Vzc1Byb3ZpZGVyKHQsZSxsKSkpfXJldHVybiB2b2lkIDAhPT1pJiZ2b2lkIDAhPT10LnByb3ZpZGVyc31wcm9jZXNzUHJvdmlkZXIodCxlLG4pe2xldCBvPW9wKHQ9WmUodCkpP3Q6WmUodCYmdC5wcm92aWRlKTtjb25zdCBpPShmdW5jdGlvbiBhKHQsZSxuKXtyZXR1cm4gbnAodCk/ZXAodm9pZCAwLHQudXNlVmFsdWUpOmVwKHRwKHQsZSxuKSxxZCl9KSh0LGUsbik7aWYob3AodCl8fCEwIT09dC5tdWx0aSl7Y29uc3QgdD10aGlzLnJlY29yZHMuZ2V0KG8pO25nRGV2TW9kZSYmdCYmdm9pZCAwIT09dC5tdWx0aSYmbm4oKX1lbHNle2xldCBlPXRoaXMucmVjb3Jkcy5nZXQobyk7ZT9uZ0Rldk1vZGUmJnZvaWQgMD09PWUubXVsdGkmJm5uKCk6KGU9ZXAodm9pZCAwLHFkLCEwKSxlLmZhY3Rvcnk9KCk9PlByKGUubXVsdGkpLHRoaXMucmVjb3Jkcy5zZXQobyxlKSksbz10LGUubXVsdGkucHVzaCh0KX10aGlzLnJlY29yZHMuc2V0KG8saSl9aHlkcmF0ZSh0LGUpe3JldHVybiBuZ0Rldk1vZGUmJmUudmFsdWU9PT1aZD9lbihHZSh0KSk6ZS52YWx1ZT09PXFkJiYoZS52YWx1ZT1aZCxlLnZhbHVlPWUuZmFjdG9yeSgpKSwib2JqZWN0Ij09dHlwZW9mIGUudmFsdWUmJmUudmFsdWUmJihmdW5jdGlvbiBuKHQpe3JldHVybiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5uZ09uRGVzdHJveX0pKGUudmFsdWUpJiZ0aGlzLm9uRGVzdHJveS5hZGQoZS52YWx1ZSksZS52YWx1ZX1pbmplY3RhYmxlRGVmSW5TY29wZSh0KXtpZighdC5wcm92aWRlZEluKXJldHVybiExO2NvbnN0IGU9WmUodC5wcm92aWRlZEluKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/ImFueSI9PT1lfHxlPT09dGhpcy5zY29wZTp0aGlzLmluamVjdG9yRGVmVHlwZXMuaGFzKGUpfX1mdW5jdGlvbiAkZCh0KXtjb25zdCBlPXhuKHQpLG49bnVsbCE9PWU/ZS5mYWN0b3J5OkZvKHQpO2lmKG51bGwhPT1uKXJldHVybiBuO2lmKHQgaW5zdGFuY2VvZiBHYSl0aHJvdyBuZXcgRXJyb3IoYFRva2VuICR7R2UodCl9IGlzIG1pc3NpbmcgYSDJtXByb3YgZGVmaW5pdGlvbi5gKTtpZih0IGluc3RhbmNlb2YgRnVuY3Rpb24pcmV0dXJuKGZ1bmN0aW9uIG8odCl7Y29uc3QgZT10Lmxlbmd0aDtpZihlPjApe2NvbnN0IG49aXIoZSwiPyIpO3Rocm93IG5ldyBFcnJvcihgQ2FuJ3QgcmVzb2x2ZSBhbGwgcGFyYW1ldGVycyBmb3IgJHtHZSh0KX06ICgke24uam9pbigiLCAiKX0pLmApfWNvbnN0IG49KGZ1bmN0aW9uIG8odCl7Y29uc3QgZT10JiYodFt3bl18fHRbU25dKTtpZihlKXtjb25zdCBuPShmdW5jdGlvbiBuKHQpe2lmKHQuaGFzT3duUHJvcGVydHkoIm5hbWUiKSlyZXR1cm4gdC5uYW1lO2NvbnN0IGU9KCIiK3QpLm1hdGNoKC9eZnVuY3Rpb25ccyooW15ccyhdKykvKTtyZXR1cm4gbnVsbD09PWU/IiI6ZVsxXX0pKHQpO3JldHVybiBjb25zb2xlLndhcm4oYERFUFJFQ0FURUQ6IERJIGlzIGluc3RhbnRpYXRpbmcgYSB0b2tlbiAiJHtufSIgdGhhdCBpbmhlcml0cyBpdHMgQEluamVjdGFibGUgZGVjb3JhdG9yIGJ1dCBkb2VzIG5vdCBwcm92aWRlIG9uZSBpdHNlbGYuXG5UaGlzIHdpbGwgYmVjb21lIGFuIGVycm9yIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgQW5ndWxhci4gUGxlYXNlIGFkZCBASW5qZWN0YWJsZSgpIHRvIHRoZSAiJHtufSIgY2xhc3MuYCksZX1yZXR1cm4gbnVsbH0pKHQpO3JldHVybiBudWxsIT09bj8oKT0+bi5mYWN0b3J5KHQpOigpPT5uZXcgdH0pKHQpO3Rocm93IG5ldyBFcnJvcigidW5yZWFjaGFibGUiKX1mdW5jdGlvbiB0cCh0LGUsbil7bGV0IG87aWYob3AodCkpe2NvbnN0IGU9WmUodCk7cmV0dXJuIEZvKGUpfHwkZChlKX1pZihucCh0KSlvPSgpPT5aZSh0LnVzZVZhbHVlKTtlbHNlIGlmKChmdW5jdGlvbiBpKHQpe3JldHVybiEoIXR8fCF0LnVzZUZhY3RvcnkpfSkodCkpbz0oKT0+dC51c2VGYWN0b3J5KC4uLlByKHQuZGVwc3x8W10pKTtlbHNlIGlmKChmdW5jdGlvbiBhKHQpe3JldHVybiEoIXR8fCF0LnVzZUV4aXN0aW5nKX0pKHQpKW89KCk9PnZyKFplKHQudXNlRXhpc3RpbmcpKTtlbHNle2NvbnN0IGk9WmUodCYmKHQudXNlQ2xhc3N8fHQucHJvdmlkZSkpO2lmKG5nRGV2TW9kZSYmIWkmJihmdW5jdGlvbiByKHQsZSxuKXtsZXQgbz0iIjt0aHJvdyB0JiZlJiYobz1gIC0gb25seSBpbnN0YW5jZXMgb2YgUHJvdmlkZXIgYW5kIFR5cGUgYXJlIGFsbG93ZWQsIGdvdDogWyR7ZS5tYXAoKHQ9PnQ9PW4/Ij8iK24rIj8iOiIuLi4iKSkuam9pbigiLCAiKX1dYCksbmV3IEVycm9yKGBJbnZhbGlkIHByb3ZpZGVyIGZvciB0aGUgTmdNb2R1bGUgJyR7R2UodCl9J2Arbyl9KShlLG4sdCksIShmdW5jdGlvbiBzKHQpe3JldHVybiEhdC5kZXBzfSkodCkpcmV0dXJuIEZvKGkpfHwkZChpKTtvPSgpPT5uZXcgaSguLi5Qcih0LmRlcHMpKX1yZXR1cm4gb31mdW5jdGlvbiBlcCh0LGUsbj0hMSl7cmV0dXJue2ZhY3Rvcnk6dCx2YWx1ZTplLG11bHRpOm4/W106dm9pZCAwfX1mdW5jdGlvbiBucCh0KXtyZXR1cm4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdCYmeXIgaW4gdH1mdW5jdGlvbiBvcCh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH1jb25zdCBpcD1mdW5jdGlvbiBhcCh0LGUsbil7cmV0dXJuKGZ1bmN0aW9uIG8odCxlPW51bGwsbj1udWxsLGkpe2NvbnN0IGE9SmQodCxlLG4saSk7cmV0dXJuIGEuX3Jlc29sdmVJbmplY3RvckRlZlR5cGVzKCksYX0pKHtuYW1lOm59LGUsdCxuKX07Y2xhc3MgcnB7c3RhdGljIGNyZWF0ZSh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP2lwKHQsZSwiIik6aXAodC5wcm92aWRlcnMsdC5wYXJlbnQsdC5uYW1lfHwiIil9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gc3AodCl7YnAodCk7Y29uc3QgZT1Jcyh0KTtyZXR1cm4gbnVsbD09PWU/bnVsbDoodm9pZCAwPT09ZS5jb21wb25lbnQmJihlLmNvbXBvbmVudD0oZnVuY3Rpb24gbih0LGUpe2NvbnN0IG49ZVsxXS5kYXRhW3RdO3JldHVybiAyJm4uZmxhZ3M/ZVtuLmRpcmVjdGl2ZVN0YXJ0XTpudWxsfSkoZS5ub2RlSW5kZXgsZS5sVmlldykpLGUuY29tcG9uZW50KX1mdW5jdGlvbiBscCh0KXticCh0KTtjb25zdCBlPUlzKHQpO3JldHVybiBudWxsPT09ZT9udWxsOmUubFZpZXdbOF19ZnVuY3Rpb24gY3AodCl7Y29uc3QgZT1Jcyh0KTtpZihudWxsPT09ZSlyZXR1cm4gbnVsbDtsZXQgbixvPWUubFZpZXc7Zm9yKG5nRGV2TW9kZSYmUm8obyk7Mj09PW9bMV0udHlwZSYmKG49bWwobykpOylvPW47cmV0dXJuIDUxMiZvWzJdP251bGw6b1s4XX1mdW5jdGlvbiBkcCh0KXtyZXR1cm5bLi4udWwodCkuY29tcG9uZW50c119ZnVuY3Rpb24gcHAodCl7Y29uc3QgZT1Jcyh0KTtyZXR1cm4gbnVsbD09PWU/cnAuTlVMTDpuZXcgUmEoZS5sVmlld1sxXS5kYXRhW2Uubm9kZUluZGV4XSxlLmxWaWV3KX1mdW5jdGlvbiBtcCh0KXtpZih0IGluc3RhbmNlb2YgVGV4dClyZXR1cm5bXTtjb25zdCBlPUlzKHQpO2lmKG51bGw9PT1lKXJldHVybltdO2NvbnN0IG49ZS5sVmlldyxvPW5bMV0saT1lLm5vZGVJbmRleDtyZXR1cm4obnVsbD09bz92b2lkIDA6by5kYXRhW2ldKT8odm9pZCAwPT09ZS5kaXJlY3RpdmVzJiYoZS5kaXJlY3RpdmVzPVdzKGksbiwhMSkpLG51bGw9PT1lLmRpcmVjdGl2ZXM/W106Wy4uLmUuZGlyZWN0aXZlc10pOltdfWZ1bmN0aW9uIHVwKHQpe2NvbnN0e2NvbnN0cnVjdG9yOmV9PXQ7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB0aGUgaW5zdGFuY2UgY29uc3RydWN0b3IiKTtjb25zdCBuPXBvKGUpO2lmKG4pcmV0dXJue2lucHV0czpuLmlucHV0cyxvdXRwdXRzOm4ub3V0cHV0cyxlbmNhcHN1bGF0aW9uOm4uZW5jYXBzdWxhdGlvbixjaGFuZ2VEZXRlY3Rpb246bi5vblB1c2g/em4uT25QdXNoOnpuLkRlZmF1bHR9O2NvbnN0IG89bW8oZSk7cmV0dXJuIG8/e2lucHV0czpvLmlucHV0cyxvdXRwdXRzOm8ub3V0cHV0c306bnVsbH1mdW5jdGlvbiBmcCh0KXtyZXR1cm4gSXModCkubmF0aXZlfWZ1bmN0aW9uIGdwKHQpe2JwKHQpO2NvbnN0IGU9SXModCk7aWYobnVsbD09PWUpcmV0dXJuW107Y29uc3Qgbj1lLmxWaWV3LG89bls3XSxpPW5bMV0uY2xlYW51cCxhPVtdO2lmKGkmJm8pZm9yKGxldCBlPTA7ZTxpLmxlbmd0aDspe2NvbnN0IHI9aVtlKytdLHM9aVtlKytdO2lmKCJzdHJpbmciPT10eXBlb2Ygcil7Y29uc3QgbD1yLGM9ZWkobltzXSksZD1vW2lbZSsrXV0scD1pW2UrK10sbT0iYm9vbGVhbiI9PXR5cGVvZiBwfHxwPj0wPyJkb20iOiJvdXRwdXQiLHU9ImJvb2xlYW4iPT10eXBlb2YgcCYmcDt0PT1jJiZhLnB1c2goe2VsZW1lbnQ6dCxuYW1lOmwsY2FsbGJhY2s6ZCx1c2VDYXB0dXJlOnUsdHlwZTptfSl9fXJldHVybiBhLnNvcnQoaHApLGF9ZnVuY3Rpb24gaHAodCxlKXtyZXR1cm4gdC5uYW1lPT1lLm5hbWU/MDp0Lm5hbWU8ZS5uYW1lPy0xOjF9ZnVuY3Rpb24gYnAodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBFbGVtZW50JiYhKHQgaW5zdGFuY2VvZiBFbGVtZW50KSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGluZyBpbnN0YW5jZSBvZiBET00gRWxlbWVudCIpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiB5cCh0KXsoZnVuY3Rpb24gZSh0KXtuZ0Rldk1vZGUmJmhuKHQsImNvbXBvbmVudCIpO2NvbnN0IGU9RWQoRnModCkpO25nRGV2TW9kZSYmaG4oZVs4XSwicm9vdENvbnRleHQgc2hvdWxkIGJlIGRlZmluZWQiKSwoZnVuY3Rpb24gbih0LGUpe2lmKDA9PT10LmZsYWdzJiZ0LmNsZWFuPT1XYyl7bGV0IG47dC5mbGFnc3w9ZSx0LmNsZWFuPW5ldyBQcm9taXNlKCh0PT5uPXQpKSx0LnNjaGVkdWxlcigoKCk9PntpZigxJnQuZmxhZ3MmJih0LmZsYWdzJj0tMixSZCh0KSksMiZ0LmZsYWdzKXt0LmZsYWdzJj0tMztjb25zdCBlPXQucGxheWVySGFuZGxlcjtlJiZlLmZsdXNoUGxheWVycygpfXQuY2xlYW49V2MsbihudWxsKX0pKX19KShlWzhdLDEpfSkodCksZHAodCkuZm9yRWFjaCgodD0+KGZ1bmN0aW9uIGUodCl7Y29uc3QgZT1Gcyh0KTtBZChlWzFdLGUsdCl9KSh0KSkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9ycC5USFJPV19JRl9OT1RfRk9VTkQ9Z3IscnAuTlVMTD1uZXcgV2QscnAuybVwcm92PU1uKHt0b2tlbjpycCxwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6KCk9PnZyKEdkKX0pLHJwLl9fTkdfRUxFTUVOVF9JRF9fPS0xO2xldCBfcD0hMTtmdW5jdGlvbiBDcCh0LGUpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgQ09NUElMRUR8fCFDT01QSUxFRCl7Y29uc3Qgbj1qbjtpZihuZ0Rldk1vZGUmJmhuKGUsImZ1bmN0aW9uIG5vdCBkZWZpbmVkIiksbil7bGV0IG89bi5uZztvfHwobz1uLm5nPXt9KSxvW3RdPWV9fX1mdW5jdGlvbiBNcCh0LGUpe2NvbnN0IG49VnModCk7bmdEZXZNb2RlJiZobihuLCJMVmlldyBpcyByZXF1aXJlZCIpO2NvbnN0IG89blsxXSxpPWJpKCk7bmdEZXZNb2RlJiZobihpLCJUTm9kZSBpcyByZXF1aXJlZCIpLFhpKG8saSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHZwKHQpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodC5wcm90b3R5cGUpLmNvbnN0cnVjdG9yfWZ1bmN0aW9uIHhwKHQpe2xldCBlPXZwKHQudHlwZSksbj0hMDtjb25zdCBvPVt0XTtmb3IoO2U7KXtsZXQgaTtpZih4byh0KSlpPWUuybVjbXB8fGUuybVkaXI7ZWxzZXtpZihlLsm1Y21wKXRocm93IG5ldyBFcnJvcigiRGlyZWN0aXZlcyBjYW5ub3QgaW5oZXJpdCBDb21wb25lbnRzIik7aT1lLsm1ZGlyfWlmKGkpe2lmKG4pe28ucHVzaChpKTtjb25zdCBlPXQ7ZS5pbnB1dHM9T3AodC5pbnB1dHMpLGUuZGVjbGFyZWRJbnB1dHM9T3AodC5kZWNsYXJlZElucHV0cyksZS5vdXRwdXRzPU9wKHQub3V0cHV0cyk7Y29uc3Qgbj1pLmhvc3RCaW5kaW5ncztuJiZrcCh0LG4pO2NvbnN0IGE9aS52aWV3UXVlcnkscj1pLmNvbnRlbnRRdWVyaWVzO2lmKGEmJlBwKHQsYSksciYmd3AodCxyKSxVZSh0LmlucHV0cyxpLmlucHV0cyksVWUodC5kZWNsYXJlZElucHV0cyxpLmRlY2xhcmVkSW5wdXRzKSxVZSh0Lm91dHB1dHMsaS5vdXRwdXRzKSx4byhpKSYmaS5kYXRhLmFuaW1hdGlvbil7Y29uc3QgZT10LmRhdGE7ZS5hbmltYXRpb249KGUuYW5pbWF0aW9ufHxbXSkuY29uY2F0KGkuZGF0YS5hbmltYXRpb24pfX1jb25zdCBlPWkuZmVhdHVyZXM7aWYoZSlmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3QgaT1lW29dO2kmJmkubmdJbmhlcml0JiZpKHQpLGk9PT14cCYmKG49ITEpfX1lPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0hKGZ1bmN0aW9uIGkodCl7bGV0IGU9MCxuPW51bGw7Zm9yKGxldCBvPXQubGVuZ3RoLTE7bz49MDtvLS0pe2NvbnN0IGk9dFtvXTtpLmhvc3RWYXJzPWUrPWkuaG9zdFZhcnMsaS5ob3N0QXR0cnM9bGEoaS5ob3N0QXR0cnMsbj1sYShuLGkuaG9zdEF0dHJzKSl9fSkobyl9ZnVuY3Rpb24gT3AodCl7cmV0dXJuIHQ9PT1Hbj97fTp0PT09V24/W106dH1mdW5jdGlvbiBQcCh0LGUpe2NvbnN0IG49dC52aWV3UXVlcnk7dC52aWV3UXVlcnk9bj8odCxvKT0+e2UodCxvKSxuKHQsbyl9OmV9ZnVuY3Rpb24gd3AodCxlKXtjb25zdCBuPXQuY29udGVudFF1ZXJpZXM7dC5jb250ZW50UXVlcmllcz1uPyh0LG8saSk9PntlKHQsbyxpKSxuKHQsbyxpKX06ZX1mdW5jdGlvbiBrcCh0LGUpe2NvbnN0IG49dC5ob3N0QmluZGluZ3M7dC5ob3N0QmluZGluZ3M9bj8odCxvKT0+e2UodCxvKSxuKHQsbyl9OmV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IFNwPVsicHJvdmlkZXJzUmVzb2x2ZXIiXSxEcD1bInRlbXBsYXRlIiwiZGVjbHMiLCJjb25zdHMiLCJ2YXJzIiwib25QdXNoIiwibmdDb250ZW50U2VsZWN0b3JzIiwic3R5bGVzIiwiZW5jYXBzdWxhdGlvbiIsInNjaGVtYXMiXTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBFcD1udWxsO2Z1bmN0aW9uIFJwKCl7aWYoIUVwKXtjb25zdCB0PWpuLlN5bWJvbDtpZih0JiZ0Lml0ZXJhdG9yKUVwPXQuaXRlcmF0b3I7ZWxzZXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE1hcC5wcm90b3R5cGUpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7KytlKXtjb25zdCBuPXRbZV07ImVudHJpZXMiIT09biYmInNpemUiIT09biYmTWFwLnByb3RvdHlwZVtuXT09PU1hcC5wcm90b3R5cGUuZW50cmllcyYmKEVwPW4pfX19cmV0dXJuIEVwfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBBcCh0LGUpe2NvbnN0IG49TnAodCksbz1OcChlKTtpZihuJiZvKXJldHVybihmdW5jdGlvbiBpKHQsZSxuKXtjb25zdCBvPXRbUnAoKV0oKSxpPWVbUnAoKV0oKTtmb3IoOzspe2NvbnN0IHQ9by5uZXh0KCksZT1pLm5leHQoKTtpZih0LmRvbmUmJmUuZG9uZSlyZXR1cm4hMDtpZih0LmRvbmV8fGUuZG9uZSlyZXR1cm4hMTtpZighbih0LnZhbHVlLGUudmFsdWUpKXJldHVybiExfX0pKHQsZSxBcCk7e2NvbnN0IGk9dCYmKCJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpLGE9ZSYmKCJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpO3JldHVybiEobnx8IWl8fG98fCFhKXx8T2JqZWN0LmlzKHQsZSl9fWNsYXNzIFRwe2NvbnN0cnVjdG9yKHQpe3RoaXMud3JhcHBlZD10fXN0YXRpYyB3cmFwKHQpe3JldHVybiBuZXcgVHAodCl9c3RhdGljIHVud3JhcCh0KXtyZXR1cm4gVHAuaXNXcmFwcGVkKHQpP3Qud3JhcHBlZDp0fXN0YXRpYyBpc1dyYXBwZWQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBUcH19ZnVuY3Rpb24gTnAodCl7cmV0dXJuISF6cCh0KSYmKEFycmF5LmlzQXJyYXkodCl8fCEodCBpbnN0YW5jZW9mIE1hcCkmJlJwKClpbiB0KX1mdW5jdGlvbiB6cCh0KXtyZXR1cm4gbnVsbCE9PXQmJigiZnVuY3Rpb24iPT10eXBlb2YgdHx8Im9iamVjdCI9PXR5cGVvZiB0KX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gSXAodCxlLG4pe3JldHVybiB0W2VdPW59ZnVuY3Rpb24gSHAodCxlKXtyZXR1cm4gbmdEZXZNb2RlJiZfbih0LGUpLG5nRGV2TW9kZSYmcG4odFtlXSxhYywiU3RvcmVkIHZhbHVlIHNob3VsZCBuZXZlciBiZSBOT19DSEFOR0UuIiksdFtlXX1mdW5jdGlvbiBGcCh0LGUsbil7bmdEZXZNb2RlJiZwbihuLGFjLCJJbmNvbWluZyB2YWx1ZSBzaG91bGQgbmV2ZXIgYmUgTk9fQ0hBTkdFLiIpLG5nRGV2TW9kZSYmbW4oZSx0Lmxlbmd0aCwiU2xvdCBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIHRvIE5PX0NIQU5HRSIpO2NvbnN0IG89dFtlXTtpZihPYmplY3QuaXMobyxuKSlyZXR1cm4hMTtpZihuZ0Rldk1vZGUmJnhpKCkpe2NvbnN0IGk9byE9PWFjP286dm9pZCAwO2lmKCFBcChpLG4pKXtjb25zdCBhPShmdW5jdGlvbiBpKHQsZSxuLG8pe2NvbnN0IGk9dFsxXS5kYXRhLGE9aVtlXTtpZigic3RyaW5nIj09dHlwZW9mIGEpcmV0dXJuIGEuaW5kZXhPZihhbCk+LTE/bGwodCxlLGUsYSxvKTp7cHJvcE5hbWU6YSxvbGRWYWx1ZTpuLG5ld1ZhbHVlOm99O2lmKG51bGw9PT1hKXtsZXQgbj1lLTE7Zm9yKDsic3RyaW5nIiE9dHlwZW9mIGlbbl0mJm51bGw9PT1pW24rMV07KW4tLTtjb25zdCBhPWlbbl07aWYoInN0cmluZyI9PXR5cGVvZiBhKXtjb25zdCBpPWEubWF0Y2gobmV3IFJlZ0V4cChhbCwiZyIpKTtpZihpJiZpLmxlbmd0aC0xPmUtbilyZXR1cm4gbGwodCxuLGUsYSxvKX19cmV0dXJue3Byb3BOYW1lOnZvaWQgMCxvbGRWYWx1ZTpuLG5ld1ZhbHVlOm99fSkodCxlLGksbik7IShmdW5jdGlvbiBhKHQsZSxuLG8pe2xldCBpPWBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yOiBFeHByZXNzaW9uIGhhcyBjaGFuZ2VkIGFmdGVyIGl0IHdhcyBjaGVja2VkLiBQcmV2aW91cyB2YWx1ZSR7bz9gIGZvciAnJHtvfSdgOiIifTogJyR7ZX0nLiBDdXJyZW50IHZhbHVlOiAnJHtufScuYDt0aHJvdyB0JiYoaSs9IiBJdCBzZWVtcyBsaWtlIHRoZSB2aWV3IGhhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgaXRzIHBhcmVudCBhbmQgaXRzIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXJ0eSBjaGVja2VkLiBIYXMgaXQgYmVlbiBjcmVhdGVkIGluIGEgY2hhbmdlIGRldGVjdGlvbiBob29rPyIpLG5ldyBLZSgiMTAwIixpKX0pKG89PT1hYyxhLm9sZFZhbHVlLGEubmV3VmFsdWUsYS5wcm9wTmFtZSl9cmV0dXJuITF9cmV0dXJuIHRbZV09biwhMH1mdW5jdGlvbiBMcCh0LGUsbixvKXtjb25zdCBpPUZwKHQsZSxuKTtyZXR1cm4gRnAodCxlKzEsbyl8fGl9ZnVuY3Rpb24gQnAodCxlLG4sbyxpKXtjb25zdCBhPUxwKHQsZSxuLG8pO3JldHVybiBGcCh0LGUrMixpKXx8YX1mdW5jdGlvbiBWcCh0LGUsbixvLGksYSl7Y29uc3Qgcj1McCh0LGUsbixvKTtyZXR1cm4gTHAodCxlKzIsaSxhKXx8cn0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24ganAodCxlLG4sbyl7Y29uc3QgaT1maSgpLGE9U2koKTtpZihGcChpLGEsZSkpe2NvbnN0IHI9Z2koKSxzPVlpKCk7Q2QocyxpLHQsZSxuLG8pLG5nRGV2TW9kZSYmemQoci5kYXRhLHMsImF0dHIuIit0LGEpfXJldHVybiBqcH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gVXAodCxlKXtuZ0Rldk1vZGUmJm1uKDIsZS5sZW5ndGgsInNob3VsZCBoYXZlIGF0IGxlYXN0IDMgdmFsdWVzIiksbmdEZXZNb2RlJiZsbihlLmxlbmd0aCUyLDEsInNob3VsZCBoYXZlIGFuIG9kZCBudW1iZXIgb2YgdmFsdWVzIik7bGV0IG49ITEsbz13aSgpO2ZvcihsZXQgaT0xO2k8ZS5sZW5ndGg7aSs9MiluPUZwKHQsbysrLGVbaV0pfHxuO2lmKGtpKG8pLCFuKXJldHVybiBhYztsZXQgaT1lWzBdO2ZvcihsZXQgdD0xO3Q8ZS5sZW5ndGg7dCs9MilpKz0kZShlW3RdKStlW3QrMV07cmV0dXJuIGl9ZnVuY3Rpb24gR3AodCxlLG4sbyl7cmV0dXJuIEZwKHQsU2koKSxuKT9lKyRlKG4pK286YWN9ZnVuY3Rpb24gV3AodCxlLG4sbyxpLGEpe2NvbnN0IHI9THAodCx3aSgpLG4saSk7cmV0dXJuIERpKDIpLHI/ZSskZShuKStvKyRlKGkpK2E6YWN9ZnVuY3Rpb24gWXAodCxlLG4sbyxpLGEscixzKXtjb25zdCBsPUJwKHQsd2koKSxuLGkscik7cmV0dXJuIERpKDMpLGw/ZSskZShuKStvKyRlKGkpK2ErJGUocikrczphY31mdW5jdGlvbiBxcCh0LGUsbixvLGksYSxyLHMsbCxjKXtjb25zdCBkPVZwKHQsd2koKSxuLGkscixsKTtyZXR1cm4gRGkoNCksZD9lKyRlKG4pK28rJGUoaSkrYSskZShyKStzKyRlKGwpK2M6YWN9ZnVuY3Rpb24gWnAodCxlLG4sbyxpLGEscixzLGwsYyxkLHApe2NvbnN0IG09d2koKTtsZXQgdT1WcCh0LG0sbixpLHIsbCk7cmV0dXJuIHU9RnAodCxtKzQsZCl8fHUsRGkoNSksdT9lKyRlKG4pK28rJGUoaSkrYSskZShyKStzKyRlKGwpK2MrJGUoZCkrcDphY31mdW5jdGlvbiBYcCh0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUpe2NvbnN0IGY9d2koKTtsZXQgZz1WcCh0LGYsbixpLHIsbCk7cmV0dXJuIGc9THAodCxmKzQsZCxtKXx8ZyxEaSg2KSxnP2UrJGUobikrbyskZShpKSthKyRlKHIpK3MrJGUobCkrYyskZShkKStwKyRlKG0pK3U6YWN9ZnVuY3Rpb24gS3AodCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyl7Y29uc3QgaD13aSgpO2xldCBiPVZwKHQsaCxuLGkscixsKTtyZXR1cm4gYj1CcCh0LGgrNCxkLG0sZil8fGIsRGkoNyksYj9lKyRlKG4pK28rJGUoaSkrYSskZShyKStzKyRlKGwpK2MrJGUoZCkrcCskZShtKSt1KyRlKGYpK2c6YWN9ZnVuY3Rpb24gSnAodCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIpe2NvbnN0IHk9d2koKTtsZXQgXz1WcCh0LHksbixpLHIsbCk7cmV0dXJuIF89VnAodCx5KzQsZCxtLGYsaCl8fF8sRGkoOCksXz9lKyRlKG4pK28rJGUoaSkrYSskZShyKStzKyRlKGwpK2MrJGUoZCkrcCskZShtKSt1KyRlKGYpK2crJGUoaCkrYjphY31mdW5jdGlvbiBRcCh0LGUsbixvLGksYSxyLHMpe2NvbnN0IGw9ZmkoKSxjPWdpKCksZD10K2dvLHA9Yy5maXJzdENyZWF0ZVBhc3M/KAovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gbSh0LGUsbixvLGksYSxyLHMsbCl7bmdEZXZNb2RlJiZBbyhlKSxuZ0Rldk1vZGUmJm5nRGV2TW9kZS5maXJzdENyZWF0ZVBhc3MrKztjb25zdCBjPWUuY29uc3RzLGQ9WmMoZSx0LDQscnx8bnVsbCxjaShjLHMpKTttZChlLG4sZCxjaShjLGwpKSxYaShlLGQpO2NvbnN0IHA9ZC50Vmlld3M9YWQoMixkLG8saSxhLGUuZGlyZWN0aXZlUmVnaXN0cnksZS5waXBlUmVnaXN0cnksbnVsbCxlLnNjaGVtYXMsYyk7cmV0dXJuIG51bGwhPT1lLnF1ZXJpZXMmJihlLnF1ZXJpZXMudGVtcGxhdGUoZSxkKSxwLnF1ZXJpZXM9ZS5xdWVyaWVzLmVtYmVkZGVkVFZpZXcoZCkpLGR9KShkLGMsbCxlLG4sbyxpLGEscik6Yy5kYXRhW2RdO0NpKHAsITEpO2NvbnN0IHU9bFsxMV0uY3JlYXRlQ29tbWVudChuZ0Rldk1vZGU/ImNvbnRhaW5lciI6IiIpO0hsKGMsbCx1LHApLExzKHUsbCksRGQobCxsW2RdPVBkKHUsbCx1LHApKSx2byhwKSYmbmQoYyxsLHApLG51bGwhPXImJm9kKGwscCxzKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gJHAodCl7cmV0dXJuIGFpKChmdW5jdGlvbiBlKCl7cmV0dXJuIG1pLmxGcmFtZS5jb250ZXh0TFZpZXd9KSgpLGdvK3QpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCB0bT17Ism1ybVkZWZpbmVJbmplY3RhYmxlIjpNbiwiybXJtWRlZmluZUluamVjdG9yIjp2biwiybXJtWluamVjdCI6dnIsIsm1ybVpbnZhbGlkRmFjdG9yeURlcCI6eHIscmVzb2x2ZUZvcndhcmRSZWY6WmV9LGVtPWplKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpqZX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBubSh0KXtyZXR1cm4gdm9pZCAwIT09dC51c2VDbGFzc31mdW5jdGlvbiBvbSh0KXtyZXR1cm4gdm9pZCAwIT09dC51c2VGYWN0b3J5fWplKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpqZX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgaW09RmEoIkluamVjdGFibGUiLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCgodCxlKT0+YW0odCxlKSkpLGFtPWZ1bmN0aW9uIHJtKHQsZSl7bGV0IG49bnVsbCxvPW51bGw7dC5oYXNPd25Qcm9wZXJ0eSh3bil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHduLHtnZXQ6KCk9PntpZihudWxsPT09bil7Y29uc3Qgbz1KYSh7dXNhZ2U6MCxraW5kOiJpbmplY3RhYmxlIix0eXBlOnR9KTtuPW8uY29tcGlsZUluamVjdGFibGUodG0sYG5nOi8vLyR7dC5uYW1lfS/JtXByb3YuanNgLChmdW5jdGlvbiBvKHQsZSl7Y29uc3Qgbj1lfHx7cHJvdmlkZWRJbjpudWxsfSxvPXtuYW1lOnQubmFtZSx0eXBlOnQsdHlwZUFyZ3VtZW50Q291bnQ6MCxwcm92aWRlZEluOm4ucHJvdmlkZWRJbn07cmV0dXJuKG5tKG4pfHxvbShuKSkmJnZvaWQgMCE9PW4uZGVwcyYmKG8uZGVwcz16cihuLmRlcHMpKSxubShuKT9vLnVzZUNsYXNzPW4udXNlQ2xhc3M6KGZ1bmN0aW9uIGkodCl7cmV0dXJuIGVtIGluIHR9KShuKT9vLnVzZVZhbHVlPW4udXNlVmFsdWU6b20obik/by51c2VGYWN0b3J5PW4udXNlRmFjdG9yeTooZnVuY3Rpb24gYSh0KXtyZXR1cm4gdm9pZCAwIT09dC51c2VFeGlzdGluZ30pKG4pJiYoby51c2VFeGlzdGluZz1uLnVzZUV4aXN0aW5nKSxvfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQsZSkpfXJldHVybiBufX0pLHQuaGFzT3duUHJvcGVydHkoSm4pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxKbix7Z2V0OigpPT57aWYobnVsbD09PW8pe2NvbnN0IGU9SmEoe3VzYWdlOjAsa2luZDoiaW5qZWN0YWJsZSIsdHlwZTp0fSk7bz1lLmNvbXBpbGVGYWN0b3J5KHRtLGBuZzovLy8ke3QubmFtZX0vybVmYWMuanNgLHtuYW1lOnQubmFtZSx0eXBlOnQsdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOk5yKHQpLHRhcmdldDplLkZhY3RvcnlUYXJnZXQuSW5qZWN0YWJsZX0pfXJldHVybiBvfSxjb25maWd1cmFibGU6ITB9KX07ZnVuY3Rpb24gc20odCl7cmV0dXJuIHQubGVuZ3RoPjE/IiAoIisoCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBlKHQpe2NvbnN0IGU9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDsrK24pe2lmKGUuaW5kZXhPZih0W25dKT4tMSlyZXR1cm4gZS5wdXNoKHRbbl0pLGU7ZS5wdXNoKHRbbl0pfXJldHVybiBlfSkodC5zbGljZSgpLnJldmVyc2UoKSkubWFwKCh0PT5HZSh0LnRva2VuKSkpLmpvaW4oIiAtPiAiKSsiKSI6IiJ9ZnVuY3Rpb24gbG0odCxlLG4sbyl7Y29uc3QgaT1bZV0sYT1uKGkpLHI9bz8oZnVuY3Rpb24gcyh0LGUpe2NvbnN0IG49YCR7dH0gY2F1c2VkIGJ5OiAke2UgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2U6ZX1gLG89RXJyb3Iobik7cmV0dXJuIG8ubmdPcmlnaW5hbEVycm9yPWUsb30pKGEsbyk6RXJyb3IoYSk7cmV0dXJuIHIuYWRkS2V5PWNtLHIua2V5cz1pLHIuaW5qZWN0b3JzPVt0XSxyLmNvbnN0cnVjdFJlc29sdmluZ01lc3NhZ2U9bixyLm5nT3JpZ2luYWxFcnJvcj1vLHJ9ZnVuY3Rpb24gY20odCxlKXt0aGlzLmluamVjdG9ycy5wdXNoKHQpLHRoaXMua2V5cy5wdXNoKGUpLHRoaXMubWVzc2FnZT10aGlzLmNvbnN0cnVjdFJlc29sdmluZ01lc3NhZ2UodGhpcy5rZXlzKX1mdW5jdGlvbiBkbSh0LGUpe2NvbnN0IG49W107Zm9yKGxldCB0PTAsbz1lLmxlbmd0aDt0PG87dCsrKXtjb25zdCBvPWVbdF07bi5wdXNoKG8mJjAhPW8ubGVuZ3RoP28ubWFwKEdlKS5qb2luKCIgIik6Ij8iKX1yZXR1cm4gRXJyb3IoIkNhbm5vdCByZXNvbHZlIGFsbCBwYXJhbWV0ZXJzIGZvciAnIitHZSh0KSsiJygiK24uam9pbigiLCAiKSsiKS4gTWFrZSBzdXJlIHRoYXQgYWxsIHRoZSBwYXJhbWV0ZXJzIGFyZSBkZWNvcmF0ZWQgd2l0aCBJbmplY3Qgb3IgaGF2ZSB2YWxpZCB0eXBlIGFubm90YXRpb25zIGFuZCB0aGF0ICciK0dlKHQpKyInIGlzIGRlY29yYXRlZCB3aXRoIEluamVjdGFibGUuIil9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBwbXtjb25zdHJ1Y3Rvcih0LGUpe2lmKHRoaXMudG9rZW49dCx0aGlzLmlkPWUsIXQpdGhyb3cgbmV3IEVycm9yKCJUb2tlbiBtdXN0IGJlIGRlZmluZWQhIik7dGhpcy5kaXNwbGF5TmFtZT1HZSh0aGlzLnRva2VuKX1zdGF0aWMgZ2V0KHQpe3JldHVybiBtbS5nZXQoWmUodCkpfXN0YXRpYyBnZXQgbnVtYmVyT2ZLZXlzKCl7cmV0dXJuIG1tLm51bWJlck9mS2V5c319Y29uc3QgbW09bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fYWxsS2V5cz1uZXcgTWFwfWdldCh0KXtpZih0IGluc3RhbmNlb2YgcG0pcmV0dXJuIHQ7aWYodGhpcy5fYWxsS2V5cy5oYXModCkpcmV0dXJuIHRoaXMuX2FsbEtleXMuZ2V0KHQpO2NvbnN0IGU9bmV3IHBtKHQscG0ubnVtYmVyT2ZLZXlzKTtyZXR1cm4gdGhpcy5fYWxsS2V5cy5zZXQodCxlKSxlfWdldCBudW1iZXJPZktleXMoKXtyZXR1cm4gdGhpcy5fYWxsS2V5cy5zaXplfX0sdW09bmV3Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnJlZmxlY3Rpb25DYXBhYmlsaXRpZXM9dH11cGRhdGVDYXBhYmlsaXRpZXModCl7dGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzPXR9ZmFjdG9yeSh0KXtyZXR1cm4gdGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzLmZhY3RvcnkodCl9cGFyYW1ldGVycyh0KXtyZXR1cm4gdGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzLnBhcmFtZXRlcnModCl9YW5ub3RhdGlvbnModCl7cmV0dXJuIHRoaXMucmVmbGVjdGlvbkNhcGFiaWxpdGllcy5hbm5vdGF0aW9ucyh0KX1wcm9wTWV0YWRhdGEodCl7cmV0dXJuIHRoaXMucmVmbGVjdGlvbkNhcGFiaWxpdGllcy5wcm9wTWV0YWRhdGEodCl9aGFzTGlmZWN5Y2xlSG9vayh0LGUpe3JldHVybiB0aGlzLnJlZmxlY3Rpb25DYXBhYmlsaXRpZXMuaGFzTGlmZWN5Y2xlSG9vayh0LGUpfWdldHRlcih0KXtyZXR1cm4gdGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzLmdldHRlcih0KX1zZXR0ZXIodCl7cmV0dXJuIHRoaXMucmVmbGVjdGlvbkNhcGFiaWxpdGllcy5zZXR0ZXIodCl9bWV0aG9kKHQpe3JldHVybiB0aGlzLnJlZmxlY3Rpb25DYXBhYmlsaXRpZXMubWV0aG9kKHQpfWltcG9ydFVyaSh0KXtyZXR1cm4gdGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzLmltcG9ydFVyaSh0KX1yZXNvdXJjZVVyaSh0KXtyZXR1cm4gdGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzLnJlc291cmNlVXJpKHQpfXJlc29sdmVJZGVudGlmaWVyKHQsZSxuLG8pe3JldHVybiB0aGlzLnJlZmxlY3Rpb25DYXBhYmlsaXRpZXMucmVzb2x2ZUlkZW50aWZpZXIodCxlLG4sbyl9cmVzb2x2ZUVudW0odCxlKXtyZXR1cm4gdGhpcy5yZWZsZWN0aW9uQ2FwYWJpbGl0aWVzLnJlc29sdmVFbnVtKHQsZSl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8obmV3IG1yKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGZte2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmtleT10LHRoaXMub3B0aW9uYWw9ZSx0aGlzLnZpc2liaWxpdHk9bn1zdGF0aWMgZnJvbUtleSh0KXtyZXR1cm4gbmV3IGZtKHQsITEsbnVsbCl9fWNvbnN0IGdtPVtdO2NsYXNzIGhte2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmtleT10LHRoaXMucmVzb2x2ZWRGYWN0b3JpZXM9ZSx0aGlzLm11bHRpUHJvdmlkZXI9bix0aGlzLnJlc29sdmVkRmFjdG9yeT10aGlzLnJlc29sdmVkRmFjdG9yaWVzWzBdfX1jbGFzcyBibXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuZmFjdG9yeT10LHRoaXMuZGVwZW5kZW5jaWVzPWV9fWZ1bmN0aW9uIHltKHQpe2xldCBlLG47aWYodC51c2VDbGFzcyl7Y29uc3Qgbz1aZSh0LnVzZUNsYXNzKTtlPXVtLmZhY3Rvcnkobyksbj12bShvKX1lbHNlIHQudXNlRXhpc3Rpbmc/KGU9dD0+dCxuPVtmbS5mcm9tS2V5KHBtLmdldCh0LnVzZUV4aXN0aW5nKSldKTp0LnVzZUZhY3Rvcnk/KGU9dC51c2VGYWN0b3J5LG49KGZ1bmN0aW9uIG8odCxlKXtpZihlKXtjb25zdCBuPWUubWFwKCh0PT5bdF0pKTtyZXR1cm4gZS5tYXAoKGU9PnhtKHQsZSxuKSkpfXJldHVybiB2bSh0KX0pKHQudXNlRmFjdG9yeSx0LmRlcHMpKTooZT0oKT0+dC51c2VWYWx1ZSxuPWdtKTtyZXR1cm4gbmV3IGJtKGUsbil9ZnVuY3Rpb24gX20odCl7cmV0dXJuIG5ldyBobShwbS5nZXQodC5wcm92aWRlKSxbeW0odCldLHQubXVsdGl8fCExKX1mdW5jdGlvbiBDbSh0KXtjb25zdCBlPShmdW5jdGlvbiBuKHQsZSl7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IG89dFtuXSxpPWUuZ2V0KG8ua2V5LmlkKTtpZihpKXtpZihvLm11bHRpUHJvdmlkZXIhPT1pLm11bHRpUHJvdmlkZXIpdGhyb3cgRXJyb3IoYENhbm5vdCBtaXggbXVsdGkgcHJvdmlkZXJzIGFuZCByZWd1bGFyIHByb3ZpZGVycywgZ290OiAke2l9ICR7b31gKTtpZihvLm11bHRpUHJvdmlkZXIpZm9yKGxldCB0PTA7dDxvLnJlc29sdmVkRmFjdG9yaWVzLmxlbmd0aDt0KyspaS5yZXNvbHZlZEZhY3Rvcmllcy5wdXNoKG8ucmVzb2x2ZWRGYWN0b3JpZXNbdF0pO2Vsc2UgZS5zZXQoby5rZXkuaWQsbyl9ZWxzZXtsZXQgdDt0PW8ubXVsdGlQcm92aWRlcj9uZXcgaG0oby5rZXksby5yZXNvbHZlZEZhY3Rvcmllcy5zbGljZSgpLG8ubXVsdGlQcm92aWRlcik6byxlLnNldChvLmtleS5pZCx0KX19cmV0dXJuIGV9KShNbSh0LFtdKS5tYXAoX20pLG5ldyBNYXApO3JldHVybiBBcnJheS5mcm9tKGUudmFsdWVzKCkpfWZ1bmN0aW9uIE1tKHQsZSl7cmV0dXJuIHQuZm9yRWFjaCgodD0+e2lmKHQgaW5zdGFuY2VvZiBRYSllLnB1c2goe3Byb3ZpZGU6dCx1c2VDbGFzczp0fSk7ZWxzZSBpZih0JiYib2JqZWN0Ij09dHlwZW9mIHQmJnZvaWQgMCE9PXQucHJvdmlkZSllLnB1c2godCk7ZWxzZXtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyhmdW5jdGlvbiBuKHQpe3JldHVybiBFcnJvcihgSW52YWxpZCBwcm92aWRlciAtIG9ubHkgaW5zdGFuY2VzIG9mIFByb3ZpZGVyIGFuZCBUeXBlIGFyZSBhbGxvd2VkLCBnb3Q6ICR7dH1gKX0pKHQpO01tKHQsZSl9fSkpLGV9ZnVuY3Rpb24gdm0odCl7Y29uc3QgZT11bS5wYXJhbWV0ZXJzKHQpO2lmKCFlKXJldHVybltdO2lmKGUuc29tZSgodD0+bnVsbD09dCkpKXRocm93IGRtKHQsZSk7cmV0dXJuIGUubWFwKChuPT54bSh0LG4sZSkpKX1mdW5jdGlvbiB4bSh0LGUsbil7bGV0IG89bnVsbCxpPSExO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiBPbShlIGluc3RhbmNlb2Yga3I/ZS50b2tlbjplLGksbnVsbCk7bGV0IGE9bnVsbDtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoOysrdCl7Y29uc3Qgbj1lW3RdO24gaW5zdGFuY2VvZiBRYT9vPW46biBpbnN0YW5jZW9mIGtyP289bi50b2tlbjpuIGluc3RhbmNlb2YgU3I/aT0hMDpuIGluc3RhbmNlb2YgRHJ8fG4gaW5zdGFuY2VvZiBFcj9hPW46biBpbnN0YW5jZW9mIEdhJiYobz1uKX1pZihvPVplKG8pLG51bGwhPW8pcmV0dXJuIE9tKG8saSxhKTt0aHJvdyBkbSh0LG4pfWZ1bmN0aW9uIE9tKHQsZSxuKXtyZXR1cm4gbmV3IGZtKHBtLmdldCh0KSxlLG4pfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBQbT17fTtjbGFzcyB3bXtzdGF0aWMgcmVzb2x2ZSh0KXtyZXR1cm4gQ20odCl9c3RhdGljIHJlc29sdmVBbmRDcmVhdGUodCxlKXtjb25zdCBuPXdtLnJlc29sdmUodCk7cmV0dXJuIHdtLmZyb21SZXNvbHZlZFByb3ZpZGVycyhuLGUpfXN0YXRpYyBmcm9tUmVzb2x2ZWRQcm92aWRlcnModCxlKXtyZXR1cm4gbmV3IGttKHQsZSl9fWNsYXNzIGtte2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fY29uc3RydWN0aW9uQ291bnRlcj0wLHRoaXMuX3Byb3ZpZGVycz10LHRoaXMucGFyZW50PWV8fG51bGw7Y29uc3Qgbj10Lmxlbmd0aDt0aGlzLmtleUlkcz1bXSx0aGlzLm9ianM9W107Zm9yKGxldCBlPTA7ZTxuO2UrKyl0aGlzLmtleUlkc1tlXT10W2VdLmtleS5pZCx0aGlzLm9ianNbZV09UG19Z2V0KHQsZT1ncil7cmV0dXJuIHRoaXMuX2dldEJ5S2V5KHBtLmdldCh0KSxudWxsLGUpfXJlc29sdmVBbmRDcmVhdGVDaGlsZCh0KXtjb25zdCBlPXdtLnJlc29sdmUodCk7cmV0dXJuIHRoaXMuY3JlYXRlQ2hpbGRGcm9tUmVzb2x2ZWQoZSl9Y3JlYXRlQ2hpbGRGcm9tUmVzb2x2ZWQodCl7Y29uc3QgZT1uZXcga20odCk7cmV0dXJuIGUucGFyZW50PXRoaXMsZX1yZXNvbHZlQW5kSW5zdGFudGlhdGUodCl7cmV0dXJuIHRoaXMuaW5zdGFudGlhdGVSZXNvbHZlZCh3bS5yZXNvbHZlKFt0XSlbMF0pfWluc3RhbnRpYXRlUmVzb2x2ZWQodCl7cmV0dXJuIHRoaXMuX2luc3RhbnRpYXRlUHJvdmlkZXIodCl9Z2V0UHJvdmlkZXJBdEluZGV4KHQpe2lmKHQ8MHx8dD49dGhpcy5fcHJvdmlkZXJzLmxlbmd0aCl0aHJvdyhmdW5jdGlvbiBlKHQpe3JldHVybiBFcnJvcihgSW5kZXggJHt0fSBpcyBvdXQtb2YtYm91bmRzLmApfSkodCk7cmV0dXJuIHRoaXMuX3Byb3ZpZGVyc1t0XX1fbmV3KHQpe2lmKHRoaXMuX2NvbnN0cnVjdGlvbkNvdW50ZXIrKz50aGlzLl9nZXRNYXhOdW1iZXJPZk9iamVjdHMoKSl0aHJvdyhmdW5jdGlvbiBlKHQsbil7cmV0dXJuIGxtKHQsbiwoZnVuY3Rpb24odCl7cmV0dXJuYENhbm5vdCBpbnN0YW50aWF0ZSBjeWNsaWMgZGVwZW5kZW5jeSEke3NtKHQpfWB9KSl9KSh0aGlzLHQua2V5KTtyZXR1cm4gdGhpcy5faW5zdGFudGlhdGVQcm92aWRlcih0KX1fZ2V0TWF4TnVtYmVyT2ZPYmplY3RzKCl7cmV0dXJuIHRoaXMub2Jqcy5sZW5ndGh9X2luc3RhbnRpYXRlUHJvdmlkZXIodCl7aWYodC5tdWx0aVByb3ZpZGVyKXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248dC5yZXNvbHZlZEZhY3Rvcmllcy5sZW5ndGg7KytuKWVbbl09dGhpcy5faW5zdGFudGlhdGUodCx0LnJlc29sdmVkRmFjdG9yaWVzW25dKTtyZXR1cm4gZX1yZXR1cm4gdGhpcy5faW5zdGFudGlhdGUodCx0LnJlc29sdmVkRmFjdG9yaWVzWzBdKX1faW5zdGFudGlhdGUodCxlKXtjb25zdCBuPWUuZmFjdG9yeTtsZXQgbyxpO3RyeXtvPWUuZGVwZW5kZW5jaWVzLm1hcCgodD0+dGhpcy5fZ2V0QnlSZWZsZWN0aXZlRGVwZW5kZW5jeSh0KSkpfWNhdGNoKGUpe3Rocm93IGUuYWRkS2V5JiZlLmFkZEtleSh0aGlzLHQua2V5KSxlfXRyeXtpPW4oLi4ubyl9Y2F0Y2goZSl7dGhyb3coZnVuY3Rpb24gbih0LGUsbyxpKXtyZXR1cm4gbG0odCxpLChmdW5jdGlvbih0KXtjb25zdCBuPUdlKHRbMF0udG9rZW4pO3JldHVybmAke2UubWVzc2FnZX06IEVycm9yIGR1cmluZyBpbnN0YW50aWF0aW9uIG9mICR7bn0hJHtzbSh0KX0uYH0pLGUpfSkodGhpcyxlLDAsdC5rZXkpfXJldHVybiBpfV9nZXRCeVJlZmxlY3RpdmVEZXBlbmRlbmN5KHQpe3JldHVybiB0aGlzLl9nZXRCeUtleSh0LmtleSx0LnZpc2liaWxpdHksdC5vcHRpb25hbD9udWxsOmdyKX1fZ2V0QnlLZXkodCxlLG4pe3JldHVybiB0PT09a20uSU5KRUNUT1JfS0VZP3RoaXM6ZSBpbnN0YW5jZW9mIERyP3RoaXMuX2dldEJ5S2V5U2VsZih0LG4pOnRoaXMuX2dldEJ5S2V5RGVmYXVsdCh0LG4sZSl9X2dldE9iakJ5S2V5SWQodCl7Zm9yKGxldCBlPTA7ZTx0aGlzLmtleUlkcy5sZW5ndGg7ZSsrKWlmKHRoaXMua2V5SWRzW2VdPT09dClyZXR1cm4gdGhpcy5vYmpzW2VdPT09UG0mJih0aGlzLm9ianNbZV09dGhpcy5fbmV3KHRoaXMuX3Byb3ZpZGVyc1tlXSkpLHRoaXMub2Jqc1tlXTtyZXR1cm4gUG19X3Rocm93T3JOdWxsKHQsZSl7aWYoZSE9PWdyKXJldHVybiBlO3Rocm93KGZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gbG0odCxlLChmdW5jdGlvbih0KXtyZXR1cm5gTm8gcHJvdmlkZXIgZm9yICR7R2UodFswXS50b2tlbil9ISR7c20odCl9YH0pKX0pKHRoaXMsdCl9X2dldEJ5S2V5U2VsZih0LGUpe2NvbnN0IG49dGhpcy5fZ2V0T2JqQnlLZXlJZCh0LmlkKTtyZXR1cm4gbiE9PVBtP246dGhpcy5fdGhyb3dPck51bGwodCxlKX1fZ2V0QnlLZXlEZWZhdWx0KHQsZSxuKXtsZXQgbztmb3Iobz1uIGluc3RhbmNlb2YgRXI/dGhpcy5wYXJlbnQ6dGhpcztvIGluc3RhbmNlb2Yga207KXtjb25zdCBlPW8sbj1lLl9nZXRPYmpCeUtleUlkKHQuaWQpO2lmKG4hPT1QbSlyZXR1cm4gbjtvPWUucGFyZW50fXJldHVybiBudWxsIT09bz9vLmdldCh0LnRva2VuLGUpOnRoaXMuX3Rocm93T3JOdWxsKHQsZSl9Z2V0IGRpc3BsYXlOYW1lKCl7cmV0dXJuYFJlZmxlY3RpdmVJbmplY3Rvcihwcm92aWRlcnM6IFskeyhmdW5jdGlvbiB0KGUsbil7Y29uc3Qgbz1bXTtmb3IobGV0IHQ9MDt0PGUuX3Byb3ZpZGVycy5sZW5ndGg7Kyt0KW9bdF09bihlLmdldFByb3ZpZGVyQXRJbmRleCh0KSk7cmV0dXJuIG99Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKSh0aGlzLCh0PT4nICInK3Qua2V5LmRpc3BsYXlOYW1lKyciICcpKS5qb2luKCIsICIpfV0pYH10b1N0cmluZygpe3JldHVybiB0aGlzLmRpc3BsYXlOYW1lfX1mdW5jdGlvbiBTbSh0LGU9RW4uRGVmYXVsdCl7Y29uc3Qgbj1maSgpO3JldHVybiBudWxsPT09bj8obmdEZXZNb2RlJiYoZnVuY3Rpb24gbyh0KXtuZ0Rldk1vZGUmJmNuKFJuLHQsIkNhbGxpbmcgybXJtWluamVjdCB3b3VsZCBjYXVzZSBpbmZpbml0ZSByZWN1cnNpb24iKX0pKFNtKSx2cih0LGUpKTp4YShiaSgpLG4sWmUodCksZSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBEbSh0LGUsbil7Y29uc3Qgbz1maSgpLGk9U2koKTtpZihGcChvLGksZSkpe2NvbnN0IGE9Z2koKSxyPVlpKCk7bGQoYSxyLG8sdCxlLG9bMTFdLG4sITEpLG5nRGV2TW9kZSYmemQoYS5kYXRhLHIsdCxpKX1yZXR1cm4gRG19ZnVuY3Rpb24gRW0odCxlLG4sbyxpKXtjb25zdCBhPWk/ImNsYXNzIjoic3R5bGUiO1ZkKHQsbixlLmlucHV0c1thXSxhLG8pfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBSbSh0LGUsbixvKXtjb25zdCBpPWZpKCksYT1naSgpLHI9Z28rdDtuZ0Rldk1vZGUmJmxuKHdpKCksYS5iaW5kaW5nU3RhcnRJbmRleCwiZWxlbWVudHMgc2hvdWxkIGJlIGNyZWF0ZWQgYmVmb3JlIGFueSBiaW5kaW5ncyIpLG5nRGV2TW9kZSYmX24oaSxyKTtjb25zdCBzPWlbMTFdLGw9aVtyXT1NbChzLGUsKGZ1bmN0aW9uIGMoKXtyZXR1cm4gbWkubEZyYW1lLmN1cnJlbnROYW1lc3BhY2V9KSgpKSxkPWEuZmlyc3RDcmVhdGVQYXNzPyhmdW5jdGlvbiBwKHQsZSxuLG8saSxhLHIpe25nRGV2TW9kZSYmQW8oZSksbmdEZXZNb2RlJiZuZ0Rldk1vZGUuZmlyc3RDcmVhdGVQYXNzKys7Y29uc3Qgcz1lLmNvbnN0cyxsPVpjKGUsdCwyLGksY2kocyxhKSksYz1tZChlLG4sbCxjaShzLHIpKTtyZXR1cm4gbmdEZXZNb2RlJiYoZnVuY3Rpb24gZCh0LGUsbixvKXtpZihudWxsPT09dC5zY2hlbWFzKXJldHVybjtjb25zdCBpPW4udmFsdWU7aWYoIW8mJm51bGwhPT1pJiYoInVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MVW5rbm93bkVsZW1lbnQmJkhUTUxVbmtub3duRWxlbWVudCYmZSBpbnN0YW5jZW9mIEhUTUxVbmtub3duRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBjdXN0b21FbGVtZW50cyYmaS5pbmRleE9mKCItIik+LTEmJiFjdXN0b21FbGVtZW50cy5nZXQoaSkpJiYhZGQodCxpKSl7bGV0IHQ9YCcke2l9JyBpcyBub3QgYSBrbm93biBlbGVtZW50OlxuYDt0Kz1gMS4gSWYgJyR7aX0nIGlzIGFuIEFuZ3VsYXIgY29tcG9uZW50LCB0aGVuIHZlcmlmeSB0aGF0IGl0IGlzIHBhcnQgb2YgdGhpcyBtb2R1bGUuXG5gLGkmJmkuaW5kZXhPZigiLSIpPi0xP3QrPWAyLiBJZiAnJHtpfScgaXMgYSBXZWIgQ29tcG9uZW50IHRoZW4gYWRkICdDVVNUT01fRUxFTUVOVFNfU0NIRU1BJyB0byB0aGUgJ0BOZ01vZHVsZS5zY2hlbWFzJyBvZiB0aGlzIGNvbXBvbmVudCB0byBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UuYDp0Kz0iMi4gVG8gYWxsb3cgYW55IGVsZW1lbnQgYWRkICdOT19FUlJPUlNfU0NIRU1BJyB0byB0aGUgJ0BOZ01vZHVsZS5zY2hlbWFzJyBvZiB0aGlzIGNvbXBvbmVudC4iLGNvbnNvbGUuZXJyb3IoUWUoIjMwNCIsdCkpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKShlLG8sbCxjKSxudWxsIT09bC5hdHRycyYmVWQobCxsLmF0dHJzLCExKSxudWxsIT09bC5tZXJnZWRBdHRycyYmVWQobCxsLm1lcmdlZEF0dHJzLCEwKSxudWxsIT09ZS5xdWVyaWVzJiZlLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGUsbCksbH0pKHIsYSxpLGwsZSxuLG8pOmEuZGF0YVtyXTtDaShkLCEwKTtjb25zdCBtPWQubWVyZ2VkQXR0cnM7bnVsbCE9PW0mJmFhKHMsbCxtKTtjb25zdCB1PWQuY2xhc3NlcztudWxsIT09dSYmWWwocyxsLHUpO2NvbnN0IGY9ZC5zdHlsZXM7bnVsbCE9PWYmJldsKHMsbCxmKSw2NCE9KDY0JmQuZmxhZ3MpJiZIbChhLGksbCxkKSwwPT09KGZ1bmN0aW9uIGcoKXtyZXR1cm4gbWkubEZyYW1lLmVsZW1lbnREZXB0aENvdW50fSkoKSYmTHMobCxpKSwoZnVuY3Rpb24gaCgpe21pLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCsrfSkoKSx2byhkKSYmKG5kKGEsaSxkKSxlZChhLGQsaSkpLG51bGwhPT1vJiZvZChpLGQpfWZ1bmN0aW9uIEFtKCl7bGV0IHQ9YmkoKTtuZ0Rldk1vZGUmJmhuKHQsIk5vIHBhcmVudCBub2RlIHRvIGNsb3NlLiIpLE1pKCk/dmkoKToobmdEZXZNb2RlJiZTbyhiaSgpKSx0PXQucGFyZW50LENpKHQsITEpKTtjb25zdCBlPXQ7bmdEZXZNb2RlJiZpYShlLDMpLChmdW5jdGlvbiBuKCl7bWkubEZyYW1lLmVsZW1lbnREZXB0aENvdW50LS19KSgpO2NvbnN0IG89Z2koKTtvLmZpcnN0Q3JlYXRlUGFzcyYmKFhpKG8sdCksQ28odCkmJm8ucXVlcmllcy5lbGVtZW50RW5kKHQpKSxudWxsIT1lLmNsYXNzZXNXaXRob3V0SG9zdCYmKGZ1bmN0aW9uIGkodCl7cmV0dXJuIDAhPSgxNiZ0LmZsYWdzKX0pKGUpJiZFbShvLGUsZmkoKSxlLmNsYXNzZXNXaXRob3V0SG9zdCwhMCksbnVsbCE9ZS5zdHlsZXNXaXRob3V0SG9zdCYmKGZ1bmN0aW9uIGEodCl7cmV0dXJuIDAhPSgzMiZ0LmZsYWdzKX0pKGUpJiZFbShvLGUsZmkoKSxlLnN0eWxlc1dpdGhvdXRIb3N0LCExKX1mdW5jdGlvbiBUbSh0LGUsbixvKXtSbSh0LGUsbixvKSxBbSgpfWZ1bmN0aW9uIE5tKHQsZSxuKXtjb25zdCBvPWZpKCksaT1naSgpLGE9dCtnbztuZ0Rldk1vZGUmJl9uKG8sYSksbmdEZXZNb2RlJiZsbih3aSgpLGkuYmluZGluZ1N0YXJ0SW5kZXgsImVsZW1lbnQgY29udGFpbmVycyBzaG91bGQgYmUgY3JlYXRlZCBiZWZvcmUgYW55IGJpbmRpbmdzIik7Y29uc3Qgcj1pLmZpcnN0Q3JlYXRlUGFzcz8oZnVuY3Rpb24gcyh0LGUsbixvLGkpe25nRGV2TW9kZSYmbmdEZXZNb2RlLmZpcnN0Q3JlYXRlUGFzcysrO2NvbnN0IGE9ZS5jb25zdHMscj1jaShhLG8pLHM9WmMoZSx0LDgsIm5nLWNvbnRhaW5lciIscik7cmV0dXJuIG51bGwhPT1yJiZVZChzLHIsITApLG1kKGUsbixzLGNpKGEsaSkpLG51bGwhPT1lLnF1ZXJpZXMmJmUucXVlcmllcy5lbGVtZW50U3RhcnQoZSxzKSxzfSkoYSxpLG8sZSxuKTppLmRhdGFbYV07Q2kociwhMCksbmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJDcmVhdGVDb21tZW50Kys7Y29uc3QgbD1vW2FdPW9bMTFdLmNyZWF0ZUNvbW1lbnQobmdEZXZNb2RlPyJuZy1jb250YWluZXIiOiIiKTtIbChpLG8sbCxyKSxMcyhsLG8pLHZvKHIpJiYobmQoaSxvLHIpLGVkKGkscixvKSksbnVsbCE9biYmb2QobyxyKX1mdW5jdGlvbiB6bSgpe2xldCB0PWJpKCk7Y29uc3QgZT1naSgpO01pKCk/dmkoKToobmdEZXZNb2RlJiZTbyh0KSx0PXQucGFyZW50LENpKHQsITEpKSxuZ0Rldk1vZGUmJmlhKHQsOCksZS5maXJzdENyZWF0ZVBhc3MmJihYaShlLHQpLENvKHQpJiZlLnF1ZXJpZXMuZWxlbWVudEVuZCh0KSl9ZnVuY3Rpb24gSW0odCxlLG4pe05tKHQsZSxuKSx6bSgpfWZ1bmN0aW9uIEhtKCl7cmV0dXJuIGZpKCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEZtKHQpe3JldHVybiEhdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQudGhlbn1mdW5jdGlvbiBMbSh0KXtyZXR1cm4hIXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnN1YnNjcmliZX1rbS5JTkpFQ1RPUl9LRVk9cG0uZ2V0KHJwKTtjb25zdCBCbT1MbTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gVm0odCxlLG4sbyl7Y29uc3QgaT1maSgpLGE9Z2koKSxyPWJpKCk7cmV0dXJuIFVtKGEsaSxpWzExXSxyLHQsZSwhIW4sbyksVm19ZnVuY3Rpb24gam0odCxlKXtjb25zdCBuPWJpKCksbz1maSgpLGk9Z2koKTtyZXR1cm4gVW0oaSxvLExkKFRpKGkuZGF0YSksbixvKSxuLHQsZSwhMSksam19ZnVuY3Rpb24gVW0odCxlLG4sbyxpLGEscixzKXtjb25zdCBsPXZvKG8pLGM9dC5maXJzdENyZWF0ZVBhc3MmJkZkKHQpLGQ9ZVs4XSxwPUhkKGUpO25nRGV2TW9kZSYmaWEobywxNSk7bGV0IG09ITA7aWYoMyZvLnR5cGV8fHMpe2NvbnN0IHU9b2kobyxlKSxmPXM/cyh1KTp1LGc9cC5sZW5ndGgsaD1zP3Q9PnMoZWkodFtvLmluZGV4XSkpOm8uaW5kZXg7aWYoJG8obikpe2xldCByPW51bGw7aWYoIXMmJmwmJihyPShmdW5jdGlvbiB1KHQsZSxuLG8pe2NvbnN0IGk9dC5jbGVhbnVwO2lmKG51bGwhPWkpZm9yKGxldCB0PTA7dDxpLmxlbmd0aC0xO3QrPTIpe2NvbnN0IGE9aVt0XTtpZihhPT09biYmaVt0KzFdPT09byl7Y29uc3Qgbj1lWzddLG89aVt0KzJdO3JldHVybiBuLmxlbmd0aD5vP25bb106bnVsbH0ic3RyaW5nIj09dHlwZW9mIGEmJih0Kz0yKX1yZXR1cm4gbnVsbH0pKHQsZSxpLG8uaW5kZXgpKSxudWxsIT09cikoci5fX25nTGFzdExpc3RlbmVyRm5fX3x8cikuX19uZ05leHRMaXN0ZW5lckZuX189YSxyLl9fbmdMYXN0TGlzdGVuZXJGbl9fPWEsbT0hMTtlbHNle2E9V20obyxlLGQsYSwhMSk7Y29uc3QgdD1uLmxpc3RlbihmLGksYSk7bmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJBZGRFdmVudExpc3RlbmVyKysscC5wdXNoKGEsdCksYyYmYy5wdXNoKGksaCxnLGcrMSl9fWVsc2UgYT1XbShvLGUsZCxhLCEwKSxmLmFkZEV2ZW50TGlzdGVuZXIoaSxhLHIpLG5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyQWRkRXZlbnRMaXN0ZW5lcisrLHAucHVzaChhKSxjJiZjLnB1c2goaSxoLGcscil9ZWxzZSBhPVdtKG8sZSxkLGEsITEpO2NvbnN0IGY9by5vdXRwdXRzO2xldCBnO2lmKG0mJm51bGwhPT1mJiYoZz1mW2ldKSl7Y29uc3QgdD1nLmxlbmd0aDtpZih0KWZvcihsZXQgbj0wO248dDtuKz0yKXtjb25zdCB0PWdbbl07bmdEZXZNb2RlJiZfbihlLHQpO2NvbnN0IHI9Z1tuKzFdLHM9ZVt0XSxsPXNbcl07aWYobmdEZXZNb2RlJiYhQm0obCkpdGhyb3cgbmV3IEVycm9yKGBAT3V0cHV0ICR7cn0gbm90IGluaXRpYWxpemVkIGluICcke3MuY29uc3RydWN0b3IubmFtZX0nLmApO2NvbnN0IGQ9bC5zdWJzY3JpYmUoYSksbT1wLmxlbmd0aDtwLnB1c2goYSxkKSxjJiZjLnB1c2goaSxvLmluZGV4LG0sLShtKzEpKX19fWZ1bmN0aW9uIEdtKHQsZSxuLG8pe3RyeXtyZXR1cm4gcW8oNixlLG4pLCExIT09bihvKX1jYXRjaChlKXtyZXR1cm4gQmQodCxlKSwhMX1maW5hbGx5e3FvKDcsZSxuKX19ZnVuY3Rpb24gV20odCxlLG4sbyxpKXtyZXR1cm4gZnVuY3Rpb24gYShyKXtpZihyPT09RnVuY3Rpb24pcmV0dXJuIG87Y29uc3Qgcz0yJnQuZmxhZ3M/cmkodC5pbmRleCxlKTplOzA9PSgzMiZlWzJdKSYmRWQocyk7bGV0IGw9R20oZSxuLG8sciksYz1hLl9fbmdOZXh0TGlzdGVuZXJGbl9fO2Zvcig7YzspbD1HbShlLG4sYyxyKSYmbCxjPWMuX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIGkmJiExPT09bCYmKHIucHJldmVudERlZmF1bHQoKSxyLnJldHVyblZhbHVlPSExKSxsfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIFltKHQ9MSl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuKG1pLmxGcmFtZS5jb250ZXh0TFZpZXc9KGZ1bmN0aW9uIGUodCxuKXtmb3IoO3Q+MDspbmdEZXZNb2RlJiZobihuWzE1XSwiRGVjbGFyYXRpb24gdmlldyBzaG91bGQgYmUgZGVmaW5lZCBpZiBuZXN0aW5nIGxldmVsIGlzIGdyZWF0ZXIgdGhhbiAwLiIpLG49blsxNV0sdC0tO3JldHVybiBufSkodCxtaS5sRnJhbWUuY29udGV4dExWaWV3KSlbOF19KSh0KX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gcW0odCxlKXtsZXQgbj1udWxsO2NvbnN0IG89KGZ1bmN0aW9uIGkodCl7Y29uc3QgZT10LmF0dHJzO2lmKG51bGwhPWUpe2NvbnN0IHQ9ZS5pbmRleE9mKDUpO2lmKDA9PSgxJnQpKXJldHVybiBlW3QrMV19cmV0dXJuIG51bGx9KSh0KTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7Y29uc3QgYT1lW2ldO2lmKCIqIiE9PWEpe2lmKG51bGw9PT1vP2VjKHQsYSwhMCk6bmMobyxhKSlyZXR1cm4gaX1lbHNlIG49aX1yZXR1cm4gbn1mdW5jdGlvbiBabSh0KXtjb25zdCBlPWZpKClbMTZdWzZdO2lmKCFlLnByb2plY3Rpb24pe2NvbnN0IG49ZS5wcm9qZWN0aW9uPWlyKHQ/dC5sZW5ndGg6MSxudWxsKSxvPW4uc2xpY2UoKTtsZXQgaT1lLmNoaWxkO2Zvcig7bnVsbCE9PWk7KXtjb25zdCBlPXQ/cW0oaSx0KTowO251bGwhPT1lJiYob1tlXT9vW2VdLnByb2plY3Rpb25OZXh0PWk6bltlXT1pLG9bZV09aSksaT1pLm5leHR9fX1mdW5jdGlvbiBYbSh0LGU9MCxuKXtjb25zdCBvPWZpKCksaT1naSgpLGE9WmMoaSxnbyt0LDE2LG51bGwsbnx8bnVsbCk7bnVsbD09PWEucHJvamVjdGlvbiYmKGEucHJvamVjdGlvbj1lKSx2aSgpLDY0IT0oNjQmYS5mbGFncykmJihmdW5jdGlvbiByKHQsZSxuKXtHbChlWzExXSwwLGUsbix3bCh0LG4sZSksQWwobi5wYXJlbnR8fGVbNl0sbixlKSl9KShpLG8sYSl9ZnVuY3Rpb24gS20odCxlLG4pe3JldHVybiBKbSh0LCIiLGUsIiIsbiksS219ZnVuY3Rpb24gSm0odCxlLG4sbyxpKXtjb25zdCBhPWZpKCkscj1HcChhLGUsbixvKTtpZihyIT09YWMpe2NvbnN0IG49Z2koKSxzPVlpKCk7bGQobixzLGEsdCxyLGFbMTFdLGksITEpLG5nRGV2TW9kZSYmemQobi5kYXRhLHMsdCx3aSgpLTEsZSxvKX1yZXR1cm4gSm19ZnVuY3Rpb24gUW0odCxlLG4sbyxpKXtjb25zdCBhPXRbbisxXSxyPW51bGw9PT1lO2xldCBzPW8/Y2MoYSk6bWMoYSksbD0hMTtmb3IoOzAhPT1zJiYoITE9PT1sfHxyKTspe25nRGV2TW9kZSYmX24odCxzKTtjb25zdCBuPXRbcysxXTskbSh0W3NdLGUpJiYobD0hMCx0W3MrMV09bz9nYyhuKTpwYyhuKSkscz1vP2NjKG4pOm1jKG4pfWwmJih0W24rMV09bz9wYyhhKTpnYyhhKSl9ZnVuY3Rpb24gJG0odCxlKXtyZXR1cm4gbmdEZXZNb2RlJiZjbihBcnJheS5pc0FycmF5KGUpLCEwLCJFeHBlY3RlZCB0aGF0ICd0U3R5bGluZ0tleScgaGFzIGJlZW4gdW53cmFwcGVkIiksbnVsbD09PXR8fG51bGw9PWV8fChBcnJheS5pc0FycmF5KHQpP3RbMV06dCk9PT1lfHwhKCFBcnJheS5pc0FycmF5KHQpfHwic3RyaW5nIiE9dHlwZW9mIGUpJiZzcih0LGUpPj0wfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCB0dT17dGV4dEVuZDowLGtleTowLGtleUVuZDowLHZhbHVlOjAsdmFsdWVFbmQ6MH07ZnVuY3Rpb24gZXUodCl7cmV0dXJuIHQuc3Vic3RyaW5nKHR1LmtleSx0dS5rZXlFbmQpfWZ1bmN0aW9uIG51KHQpe3JldHVybiB0LnN1YnN0cmluZyh0dS52YWx1ZSx0dS52YWx1ZUVuZCl9ZnVuY3Rpb24gb3UodCxlKXtjb25zdCBuPXR1LnRleHRFbmQ7cmV0dXJuIG49PT1lPy0xOihlPXR1LmtleUVuZD0oZnVuY3Rpb24gbyh0LGUsbil7Zm9yKDtlPG4mJnQuY2hhckNvZGVBdChlKT4zMjspZSsrO3JldHVybiBlfSkodCx0dS5rZXk9ZSxuKSxydSh0LGUsbikpfWZ1bmN0aW9uIGl1KHQsZSl7Y29uc3Qgbj10dS50ZXh0RW5kO2xldCBvPXR1LmtleT1ydSh0LGUsbik7cmV0dXJuIG49PT1vPy0xOihvPXR1LmtleUVuZD0oZnVuY3Rpb24gaSh0LGUsbil7bGV0IG87Zm9yKDtlPG4mJig0NT09PShvPXQuY2hhckNvZGVBdChlKSl8fDk1PT09b3x8KC0zMyZvKT49NjUmJigtMzMmbyk8PTkwfHxvPj00OCYmbzw9NTcpOyllKys7cmV0dXJuIGV9KSh0LG8sbiksbz1zdSh0LG8sbiw1OCksbz10dS52YWx1ZT1ydSh0LG8sbiksbz10dS52YWx1ZUVuZD0oZnVuY3Rpb24gYSh0LGUsbil7bGV0IG89LTEsaT0tMSxhPS0xLHI9ZSxzPXI7Zm9yKDtyPG47KXtjb25zdCBsPXQuY2hhckNvZGVBdChyKyspO2lmKDU5PT09bClyZXR1cm4gczszND09PWx8fDM5PT09bD9zPXI9bHUodCxsLHIsbik6ZT09PXItNCYmODU9PT1hJiY4Mj09PWkmJjc2PT09byYmNDA9PT1sP3M9cj1sdSh0LDQxLHIsbik6bD4zMiYmKHM9ciksYT1pLGk9byxvPS0zMyZsfXJldHVybiBzfSkodCxvLG4pLHN1KHQsbyxuLDU5KSl9ZnVuY3Rpb24gYXUodCl7dHUua2V5PTAsdHUua2V5RW5kPTAsdHUudmFsdWU9MCx0dS52YWx1ZUVuZD0wLHR1LnRleHRFbmQ9dC5sZW5ndGh9ZnVuY3Rpb24gcnUodCxlLG4pe2Zvcig7ZTxuJiZ0LmNoYXJDb2RlQXQoZSk8PTMyOyllKys7cmV0dXJuIGV9ZnVuY3Rpb24gc3UodCxlLG4sbyl7cmV0dXJuKGU9cnUodCxlLG4pKTxuJiYobmdEZXZNb2RlJiZ0LmNoYXJDb2RlQXQoZSkhPT1vJiZjdSh0LFN0cmluZy5mcm9tQ2hhckNvZGUobyksZSksZSsrKSxlfWZ1bmN0aW9uIGx1KHQsZSxuLG8pe2xldCBpPS0xLGE9bjtmb3IoO2E8bzspe2NvbnN0IG49dC5jaGFyQ29kZUF0KGErKyk7aWYobj09ZSYmOTIhPT1pKXJldHVybiBhO2k9OTI9PW4mJjkyPT09aT8wOm59dGhyb3cgbmdEZXZNb2RlP2N1KHQsU3RyaW5nLmZyb21DaGFyQ29kZShlKSxvKTpuZXcgRXJyb3J9ZnVuY3Rpb24gY3UodCxlLG4pe3Rocm93IG5nRGV2TW9kZSYmbG4oInN0cmluZyI9PXR5cGVvZiB0LCEwLCJTdHJpbmcgZXhwZWN0ZWQgaGVyZSIpLGJuKGBNYWxmb3JtZWQgc3R5bGUgYXQgbG9jYXRpb24gJHtufSBpbiBzdHJpbmcgJ2ArdC5zdWJzdHJpbmcoMCxuKSsiWz4+Iit0LnN1YnN0cmluZyhuLG4rMSkrIjw8XSIrdC5zdWJzdHIobisxKStgJy4gRXhwZWN0aW5nICcke2V9Jy5gKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gZHUodCxlLG4pe3JldHVybiBodSh0LGUsbiwhMSksZHV9ZnVuY3Rpb24gcHUodCxlKXtyZXR1cm4gaHUodCxlLG51bGwsITApLHB1fWZ1bmN0aW9uIG11KHQpe2J1KHZ1LHV1LHQsITEpfWZ1bmN0aW9uIHV1KHQsZSl7Zm9yKGxldCBuPShmdW5jdGlvbiBuKHQpe3JldHVybiBhdSh0KSxpdSh0LHJ1KHQsMCx0dS50ZXh0RW5kKSl9KShlKTtuPj0wO249aXUoZSxuKSl2dSh0LGV1KGUpLG51KGUpKX1mdW5jdGlvbiBmdSh0KXtidShhcixndSx0LCEwKX1mdW5jdGlvbiBndSh0LGUpe2ZvcihsZXQgbj0oZnVuY3Rpb24gbih0KXtyZXR1cm4gYXUodCksb3UodCxydSh0LDAsdHUudGV4dEVuZCkpfSkoZSk7bj49MDtuPW91KGUsbikpYXIodCxldShlKSwhMCl9ZnVuY3Rpb24gaHUodCxlLG4sbyl7Y29uc3QgaT1maSgpLGE9Z2koKSxyPURpKDIpO2EuZmlyc3RVcGRhdGVQYXNzJiZfdShhLHQscixvKSxlIT09YWMmJkZwKGkscixlKSYmeHUoYSxhLmRhdGFbR2koKV0saSxpWzExXSx0LGlbcisxXT0oZnVuY3Rpb24gcyh0LGUpe3JldHVybiBudWxsPT10fHwoInN0cmluZyI9PXR5cGVvZiBlP3QrPWU6Im9iamVjdCI9PXR5cGVvZiB0JiYodD1HZSh0cyh0KSkpKSx0fSkoZSxuKSxvLHIpfWZ1bmN0aW9uIGJ1KHQsZSxuLG8pe2NvbnN0IGk9Z2koKSxhPURpKDIpO2kuZmlyc3RVcGRhdGVQYXNzJiZfdShpLG51bGwsYSxvKTtjb25zdCByPWZpKCk7aWYobiE9PWFjJiZGcChyLGEsbikpe2NvbnN0IHM9aS5kYXRhW0dpKCldO2lmKHd1KHMsbykmJiF5dShpLGEpKXtpZihuZ0Rldk1vZGUpe2NvbnN0IHQ9aS5kYXRhW2FdO2xuKEFycmF5LmlzQXJyYXkodCk/dFsxXTp0LCExLCJTdHlsaW5nIGxpbmtlZCBsaXN0IHNoYWRvdyBpbnB1dCBzaG91bGQgYmUgbWFya2VkIGFzICdmYWxzZSciKX1sZXQgdD1vP3MuY2xhc3Nlc1dpdGhvdXRIb3N0OnMuc3R5bGVzV2l0aG91dEhvc3Q7bmdEZXZNb2RlJiYhMT09PW8mJm51bGwhPT10JiZsbih0LmVuZHNXaXRoKCI7IiksITAsIkV4cGVjdGluZyBzdGF0aWMgcG9ydGlvbiB0byBlbmQgd2l0aCAnOyciKSxudWxsIT09dCYmKG49V2UodCxufHwiIikpLEVtKGkscyxyLG4sbyl9ZWxzZSEoZnVuY3Rpb24gbCh0LGUsbixvLGksYSxyLHMpe2k9PT1hYyYmKGk9V24pO2xldCBsPTAsYz0wLGQ9MDxpLmxlbmd0aD9pWzBdOm51bGwscD0wPGEubGVuZ3RoP2FbMF06bnVsbDtmb3IoO251bGwhPT1kfHxudWxsIT09cDspe25nRGV2TW9kZSYmbW4obCw5OTksIkFyZSB3ZSBzdHVjayBpbiBpbmZpbml0ZSBsb29wPyIpLG5nRGV2TW9kZSYmbW4oYyw5OTksIkFyZSB3ZSBzdHVjayBpbiBpbmZpbml0ZSBsb29wPyIpO2NvbnN0IG09bDxpLmxlbmd0aD9pW2wrMV06dm9pZCAwLHU9YzxhLmxlbmd0aD9hW2MrMV06dm9pZCAwO2xldCBmLGc9bnVsbDtkPT09cD8obCs9MixjKz0yLG0hPT11JiYoZz1wLGY9dSkpOm51bGw9PT1wfHxudWxsIT09ZCYmZDxwPyhsKz0yLGc9ZCk6KG5nRGV2TW9kZSYmaG4ocCwiRXhwZWN0aW5nIHRvIGhhdmUgYSB2YWxpZCBrZXkiKSxjKz0yLGc9cCxmPXUpLG51bGwhPT1nJiZ4dSh0LGUsbixvLGcsZixyLHMpLGQ9bDxpLmxlbmd0aD9pW2xdOm51bGwscD1jPGEubGVuZ3RoP2FbY106bnVsbH19KShpLHMscixyWzExXSxyW2ErMV0sclthKzFdPShmdW5jdGlvbiBzKHQsZSxuKXtpZihudWxsPT1ufHwiIj09PW4pcmV0dXJuIFduO2NvbnN0IG89W10saT10cyhuKTtpZihBcnJheS5pc0FycmF5KGkpKWZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKXQobyxpW2VdLCEwKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgaSlmb3IoY29uc3QgZSBpbiBpKWkuaGFzT3duUHJvcGVydHkoZSkmJnQobyxlLGlbZV0pO2Vsc2Uic3RyaW5nIj09dHlwZW9mIGk/ZShvLGkpOm5nRGV2TW9kZSYmYm4oIlVuc3VwcG9ydGVkIHN0eWxpbmcgdHlwZSAiK3R5cGVvZiBpKyI6ICIraSk7cmV0dXJuIG99KSh0LGUsbiksbyxhKX19ZnVuY3Rpb24geXUodCxlKXtyZXR1cm4gZT49dC5leHBhbmRvU3RhcnRJbmRleH1mdW5jdGlvbiBfdSh0LGUsbixvKXtuZ0Rldk1vZGUmJlRvKHQpO2NvbnN0IGk9dC5kYXRhO2lmKG51bGw9PT1pW24rMV0pe2NvbnN0IGE9aVtHaSgpXTtuZ0Rldk1vZGUmJmhuKGEsIlROb2RlIGV4cGVjdGVkIik7Y29uc3Qgcj15dSh0LG4pO3d1KGEsbykmJm51bGw9PT1lJiYhciYmKGU9ITEpLGU9KGZ1bmN0aW9uIGEodCxlLG4sbyl7Y29uc3QgaT1UaSh0KTtsZXQgYT1vP2UucmVzaWR1YWxDbGFzc2VzOmUucmVzaWR1YWxTdHlsZXM7aWYobnVsbD09PWkpMD09PShvP2UuY2xhc3NCaW5kaW5nczplLnN0eWxlQmluZGluZ3MpJiYobj1NdShuPUN1KG51bGwsdCxlLG4sbyksZS5hdHRycyxvKSxhPW51bGwpO2Vsc2V7Y29uc3Qgcj1lLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2lmKC0xPT09cnx8dFtyXSE9PWkpaWYobj1DdShpLHQsZSxuLG8pLG51bGw9PT1hKXtsZXQgbj0oZnVuY3Rpb24gcih0LGUsbil7Y29uc3Qgbz1uP2UuY2xhc3NCaW5kaW5nczplLnN0eWxlQmluZGluZ3M7aWYoMCE9PW1jKG8pKXJldHVybiB0W2NjKG8pXX0pKHQsZSxvKTt2b2lkIDAhPT1uJiZBcnJheS5pc0FycmF5KG4pJiYobj1DdShudWxsLHQsZSxuWzFdLG8pLG49TXUobixlLmF0dHJzLG8pLChmdW5jdGlvbiBzKHQsZSxuLG8pe2NvbnN0IGk9bj9lLmNsYXNzQmluZGluZ3M6ZS5zdHlsZUJpbmRpbmdzO25nRGV2TW9kZSYmY24obWMoaSksMCwiRXhwZWN0aW5nIHRvIGhhdmUgYXQgbGVhc3Qgb25lIHRlbXBsYXRlIHN0eWxpbmcgYmluZGluZy4iKSx0W2NjKGkpXT1vfSkodCxlLG8sbikpfWVsc2UgYT0oZnVuY3Rpb24gbCh0LGUsbil7bGV0IG87Y29uc3QgaT1lLmRpcmVjdGl2ZUVuZDtuZ0Rldk1vZGUmJmNuKGUuZGlyZWN0aXZlU3R5bGluZ0xhc3QsLTEsIkJ5IHRoZSB0aW1lIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYXQgbGVhc3Qgb25lIGhvc3RCaW5kaW5ncy1ub2RlIHN0eWxpbmcgaW5zdHJ1Y3Rpb24gbXVzdCBoYXZlIGV4ZWN1dGVkLiIpO2ZvcihsZXQgYT0xK2UuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7YTxpO2ErKylvPU11KG8sdFthXS5ob3N0QXR0cnMsbik7cmV0dXJuIE11KG8sZS5hdHRycyxuKX0pKHQsZSxvKX1yZXR1cm4gdm9pZCAwIT09YSYmKG8/ZS5yZXNpZHVhbENsYXNzZXM9YTplLnJlc2lkdWFsU3R5bGVzPWEpLG59KShpLGEsZSxvKSwoZnVuY3Rpb24gcih0LGUsbixvLGksYSl7bmdEZXZNb2RlJiZUbyhnaSgpKTtsZXQgcj1hP2UuY2xhc3NCaW5kaW5nczplLnN0eWxlQmluZGluZ3Mscz1jYyhyKSxsPW1jKHIpO3Rbb109bjtsZXQgYyxkPSExO2lmKEFycmF5LmlzQXJyYXkobikpe2NvbnN0IHQ9bjtjPXRbMV0sKG51bGw9PT1jfHxzcih0LGMpPjApJiYoZD0hMCl9ZWxzZSBjPW47aWYoaSlpZigwIT09bCl7Y29uc3QgZT1jYyh0W3MrMV0pO3RbbysxXT1sYyhlLHMpLDAhPT1lJiYodFtlKzFdPXVjKHRbZSsxXSxvKSksdFtzKzFdPShmdW5jdGlvbiBwKHQsZSl7cmV0dXJuIG5nRGV2TW9kZSYmYW4odCwiZXhwZWN0ZWQgbnVtYmVyIiksbmdEZXZNb2RlJiZybihlLDAsMzI3NjcpLDEzMTA3MSZ0fGU8PDE3fSkodFtzKzFdLG8pfWVsc2UgdFtvKzFdPWxjKHMsMCksMCE9PXMmJih0W3MrMV09dWModFtzKzFdLG8pKSxzPW87ZWxzZSB0W28rMV09bGMobCwwKSxuZ0Rldk1vZGUmJmxuKDAhPT1zJiYwPT09bCwhMSwiQWRkaW5nIHRlbXBsYXRlIGJpbmRpbmdzIGFmdGVyIGhvc3RCaW5kaW5ncyBpcyBub3QgYWxsb3dlZC4iKSwwPT09cz9zPW86dFtsKzFdPXVjKHRbbCsxXSxvKSxsPW87ZCYmKHRbbysxXT1wYyh0W28rMV0pKSxRbSh0LGMsbywhMCksUW0odCxjLG8sITEpLChmdW5jdGlvbiBtKHQsZSxuLG8saSl7Y29uc3QgYT1pP3QucmVzaWR1YWxDbGFzc2VzOnQucmVzaWR1YWxTdHlsZXM7bnVsbCE9YSYmInN0cmluZyI9PXR5cGVvZiBlJiZzcihhLGUpPj0wJiYobltvKzFdPWdjKG5bbysxXSkpfSkoZSxjLHQsbyxhKSxyPWxjKHMsbCksYT9lLmNsYXNzQmluZGluZ3M9cjplLnN0eWxlQmluZGluZ3M9cn0pKGksYSxlLG4scixvKX19ZnVuY3Rpb24gQ3UodCxlLG4sbyxpKXtsZXQgYT1udWxsO2NvbnN0IHI9bi5kaXJlY3RpdmVFbmQ7bGV0IHM9bi5kaXJlY3RpdmVTdHlsaW5nTGFzdDtmb3IoLTE9PT1zP3M9bi5kaXJlY3RpdmVTdGFydDpzKys7czxyJiYoYT1lW3NdLG5nRGV2TW9kZSYmaG4oYSwiZXhwZWN0ZWQgdG8gYmUgZGVmaW5lZCIpLG89TXUobyxhLmhvc3RBdHRycyxpKSxhIT09dCk7KXMrKztyZXR1cm4gbnVsbCE9PXQmJihuLmRpcmVjdGl2ZVN0eWxpbmdMYXN0PXMpLG99ZnVuY3Rpb24gTXUodCxlLG4pe2NvbnN0IG89bj8xOjI7bGV0IGk9LTE7aWYobnVsbCE9PWUpZm9yKGxldCBhPTA7YTxlLmxlbmd0aDthKyspe2NvbnN0IHI9ZVthXTsibnVtYmVyIj09dHlwZW9mIHI/aT1yOmk9PT1vJiYoQXJyYXkuaXNBcnJheSh0KXx8KHQ9dm9pZCAwPT09dD9bXTpbIiIsdF0pLGFyKHQsciwhIW58fGVbKythXSkpfXJldHVybiB2b2lkIDA9PT10P251bGw6dH1mdW5jdGlvbiB2dSh0LGUsbil7YXIodCxlLHRzKG4pKX1mdW5jdGlvbiB4dSh0LGUsbixvLGksYSxyLHMpe2lmKCEoMyZlLnR5cGUpKXJldHVybjtjb25zdCBsPXQuZGF0YSxjPWxbcysxXTtQdShmYyhjKT9PdShsLGUsbixpLG1jKGMpLHIpOnZvaWQgMCl8fChQdShhKXx8ZGMoYykmJihhPU91KGwsbnVsbCxuLGkscyxyKSksKGZ1bmN0aW9uIGQodCxlLG4sbyxpKXtjb25zdCBhPSRvKHQpO2lmKGUpaT8obmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJBZGRDbGFzcysrLGE/dC5hZGRDbGFzcyhuLG8pOihuZ0Rldk1vZGUmJmhuKG4uY2xhc3NMaXN0LCJIVE1MRWxlbWVudCBleHBlY3RlZCIpLG4uY2xhc3NMaXN0LmFkZChvKSkpOihuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlclJlbW92ZUNsYXNzKyssYT90LnJlbW92ZUNsYXNzKG4sbyk6bi5jbGFzc0xpc3QucmVtb3ZlKG8pKTtlbHNle2xldCBlPS0xPT09by5pbmRleE9mKCItIik/dm9pZCAwOmNsLkRhc2hDYXNlO2lmKG51bGw9PWkpbmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJSZW1vdmVTdHlsZSsrLGE/dC5yZW1vdmVTdHlsZShuLG8sZSk6bi5zdHlsZS5yZW1vdmVQcm9wZXJ0eShvKTtlbHNle2NvbnN0IHI9InN0cmluZyI9PXR5cGVvZiBpJiZpLmVuZHNXaXRoKCIhaW1wb3J0YW50Iik7ciYmKGk9aS5zbGljZSgwLC0xMCksZXw9Y2wuSW1wb3J0YW50KSxuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlclNldFN0eWxlKyssYT90LnNldFN0eWxlKG4sbyxpLGUpOihuZ0Rldk1vZGUmJmhuKG4uc3R5bGUsIkhUTUxFbGVtZW50IGV4cGVjdGVkIiksbi5zdHlsZS5zZXRQcm9wZXJ0eShvLGkscj8iaW1wb3J0YW50IjoiIikpfX19KShvLHIsbmkoR2koKSxuKSxpLGEpKX1mdW5jdGlvbiBPdSh0LGUsbixvLGksYSl7Y29uc3Qgcj1udWxsPT09ZTtsZXQgcztmb3IoO2k+MDspe2NvbnN0IGU9dFtpXSxhPUFycmF5LmlzQXJyYXkoZSksbD1hP2VbMV06ZSxjPW51bGw9PT1sO2xldCBkPW5baSsxXTtkPT09YWMmJihkPWM/V246dm9pZCAwKTtsZXQgcD1jP3JyKGQsbyk6bD09PW8/ZDp2b2lkIDA7aWYoYSYmIVB1KHApJiYocD1ycihlLG8pKSxQdShwKSYmKHM9cCxyKSlyZXR1cm4gcztjb25zdCBtPXRbaSsxXTtpPXI/Y2MobSk6bWMobSl9aWYobnVsbCE9PWUpe2xldCB0PWE/ZS5yZXNpZHVhbENsYXNzZXM6ZS5yZXNpZHVhbFN0eWxlcztudWxsIT10JiYocz1ycih0LG8pKX1yZXR1cm4gc31mdW5jdGlvbiBQdSh0KXtyZXR1cm4gdm9pZCAwIT09dH1mdW5jdGlvbiB3dSh0LGUpe3JldHVybiAwIT0odC5mbGFncyYoZT8xNjozMikpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBrdSh0LGU9IiIpe2NvbnN0IG49ZmkoKSxvPWdpKCksaT10K2dvO25nRGV2TW9kZSYmbG4od2koKSxvLmJpbmRpbmdTdGFydEluZGV4LCJ0ZXh0IG5vZGVzIHNob3VsZCBiZSBjcmVhdGVkIGJlZm9yZSBhbnkgYmluZGluZ3MiKSxuZ0Rldk1vZGUmJl9uKG4saSk7Y29uc3QgYT1vLmZpcnN0Q3JlYXRlUGFzcz9aYyhvLGksMSxlLG51bGwpOm8uZGF0YVtpXSxyPW5baV09eWwoblsxMV0sZSk7SGwobyxuLHIsYSksQ2koYSwhMSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIFN1KHQpe3JldHVybiBEdSgiIix0LCIiKSxTdX1mdW5jdGlvbiBEdSh0LGUsbil7Y29uc3Qgbz1maSgpLGk9R3Aobyx0LGUsbik7cmV0dXJuIGkhPT1hYyYmamQobyxHaSgpLGkpLER1fWZ1bmN0aW9uIEV1KHQsZSxuLG8saSl7Y29uc3QgYT1maSgpLHI9V3AoYSx0LGUsbixvLGkpO3JldHVybiByIT09YWMmJmpkKGEsR2koKSxyKSxFdX1mdW5jdGlvbiBSdSh0LGUsbixvLGksYSxyKXtjb25zdCBzPWZpKCksbD1ZcChzLHQsZSxuLG8saSxhLHIpO3JldHVybiBsIT09YWMmJmpkKHMsR2koKSxsKSxSdX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIEF1KHQsZSxuKXtidShhcixndSxHcChmaSgpLHQsZSxuKSwhMCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBUdSh0LGUsbil7Y29uc3Qgbz1maSgpLGk9U2koKTtpZihGcChvLGksZSkpe2NvbnN0IGE9Z2koKSxyPVlpKCk7bGQoYSxyLG8sdCxlLG9bMTFdLG4sITApLG5nRGV2TW9kZSYmemQoYS5kYXRhLHIsdCxpKX1yZXR1cm4gVHV9ZnVuY3Rpb24gTnUodCxlLG4pe2NvbnN0IG89ZmkoKSxpPVNpKCk7aWYoRnAobyxpLGUpKXtjb25zdCBhPWdpKCkscj1ZaSgpO2xkKGEscixvLHQsZSxMZChUaShhLmRhdGEpLHIsbyksbiwhMCksbmdEZXZNb2RlJiZ6ZChhLmRhdGEscix0LGkpfXJldHVybiBOdX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmKGpuLm5nSTE4bkNsb3N1cmVNb2RlPSJ1bmRlZmluZWQiIT10eXBlb2YgZ29vZyYmImZ1bmN0aW9uIj09dHlwZW9mIGdvb2cuZ2V0TXNnKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgenU9dm9pZCAwO3ZhciBJdT1bImVuIixbWyJhIiwicCJdLFsiQU0iLCJQTSJdLHp1XSxbWyJBTSIsIlBNIl0senUsenVdLFtbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl1dLHp1LFtbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sWyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdXSx6dSxbWyJCIiwiQSJdLFsiQkMiLCJBRCJdLFsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl1dLDAsWzYsMF0sWyJNL2QveXkiLCJNTU0gZCwgeSIsIk1NTU0gZCwgeSIsIkVFRUUsIE1NTU0gZCwgeSJdLFsiaDptbSBhIiwiaDptbTpzcyBhIiwiaDptbTpzcyBhIHoiLCJoOm1tOnNzIGEgenp6eiJdLFsiezF9LCB7MH0iLHp1LCJ7MX0gJ2F0JyB7MH0iLHp1XSxbIi4iLCIsIiwiOyIsIiUiLCIrIiwiLSIsIkUiLCLDlyIsIuKAsCIsIuKIniIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMsIyMwJSIsIsKkIywjIzAuMDAiLCIjRTAiXSwiVVNEIiwiJCIsIlVTIERvbGxhciIse30sImx0ciIsZnVuY3Rpb24gSHUodCl7Y29uc3QgZT1NYXRoLmZsb29yKE1hdGguYWJzKHQpKSxuPXQudG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1lJiYwPT09bj8xOjV9XTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovbGV0IEZ1PXt9O2Z1bmN0aW9uIEx1KHQpe2NvbnN0IGU9KGZ1bmN0aW9uIG4odCl7cmV0dXJuIHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKSh0KTtsZXQgbz1WdShlKTtpZihvKXJldHVybiBvO2NvbnN0IGk9ZS5zcGxpdCgiLSIpWzBdO2lmKG89VnUoaSksbylyZXR1cm4gbztpZigiZW4iPT09aSlyZXR1cm4gSXU7dGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGxvY2FsZSBkYXRhIGZvciB0aGUgbG9jYWxlICIke3R9Ii5gKX1mdW5jdGlvbiBCdSh0KXtyZXR1cm4gTHUodClbanUuUGx1cmFsQ2FzZV19ZnVuY3Rpb24gVnUodCl7cmV0dXJuIHQgaW4gRnV8fChGdVt0XT1qbi5uZyYmam4ubmcuY29tbW9uJiZqbi5uZy5jb21tb24ubG9jYWxlcyYmam4ubmcuY29tbW9uLmxvY2FsZXNbdF0pLEZ1W3RdfXZhciBqdTshKGZ1bmN0aW9uKHQpe3RbdC5Mb2NhbGVJZD0wXT0iTG9jYWxlSWQiLHRbdC5EYXlQZXJpb2RzRm9ybWF0PTFdPSJEYXlQZXJpb2RzRm9ybWF0Iix0W3QuRGF5UGVyaW9kc1N0YW5kYWxvbmU9Ml09IkRheVBlcmlvZHNTdGFuZGFsb25lIix0W3QuRGF5c0Zvcm1hdD0zXT0iRGF5c0Zvcm1hdCIsdFt0LkRheXNTdGFuZGFsb25lPTRdPSJEYXlzU3RhbmRhbG9uZSIsdFt0Lk1vbnRoc0Zvcm1hdD01XT0iTW9udGhzRm9ybWF0Iix0W3QuTW9udGhzU3RhbmRhbG9uZT02XT0iTW9udGhzU3RhbmRhbG9uZSIsdFt0LkVyYXM9N109IkVyYXMiLHRbdC5GaXJzdERheU9mV2Vlaz04XT0iRmlyc3REYXlPZldlZWsiLHRbdC5XZWVrZW5kUmFuZ2U9OV09IldlZWtlbmRSYW5nZSIsdFt0LkRhdGVGb3JtYXQ9MTBdPSJEYXRlRm9ybWF0Iix0W3QuVGltZUZvcm1hdD0xMV09IlRpbWVGb3JtYXQiLHRbdC5EYXRlVGltZUZvcm1hdD0xMl09IkRhdGVUaW1lRm9ybWF0Iix0W3QuTnVtYmVyU3ltYm9scz0xM109Ik51bWJlclN5bWJvbHMiLHRbdC5OdW1iZXJGb3JtYXRzPTE0XT0iTnVtYmVyRm9ybWF0cyIsdFt0LkN1cnJlbmN5Q29kZT0xNV09IkN1cnJlbmN5Q29kZSIsdFt0LkN1cnJlbmN5U3ltYm9sPTE2XT0iQ3VycmVuY3lTeW1ib2wiLHRbdC5DdXJyZW5jeU5hbWU9MTddPSJDdXJyZW5jeU5hbWUiLHRbdC5DdXJyZW5jaWVzPTE4XT0iQ3VycmVuY2llcyIsdFt0LkRpcmVjdGlvbmFsaXR5PTE5XT0iRGlyZWN0aW9uYWxpdHkiLHRbdC5QbHVyYWxDYXNlPTIwXT0iUGx1cmFsQ2FzZSIsdFt0LkV4dHJhRGF0YT0yMV09IkV4dHJhRGF0YSJ9KShqdXx8KGp1PXt9KSk7Y29uc3QgVXU9WyJ6ZXJvIiwib25lIiwidHdvIiwiZmV3IiwibWFueSJdLEd1PSJlbi1VUyIsV3U9e21hcmtlcjoiZWxlbWVudCJ9LFl1PXttYXJrZXI6IklDVSJ9O3ZhciBxdTshKGZ1bmN0aW9uKHQpe3RbdC5TSElGVD0yXT0iU0hJRlQiLHRbdC5BUFBFTkRfRUFHRVJMWT0xXT0iQVBQRU5EX0VBR0VSTFkiLHRbdC5DT01NRU5UPTJdPSJDT01NRU5UIn0pKHF1fHwocXU9e30pKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBadT1HdTtmdW5jdGlvbiBYdSh0KXtobih0LCJFeHBlY3RlZCBsb2NhbGVJZCB0byBiZSBkZWZpbmVkIiksInN0cmluZyI9PXR5cGVvZiB0JiYoWnU9dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIEt1KHQsZSxuKXtjb25zdCBvPWUuaW5zZXJ0QmVmb3JlSW5kZXgsaT1BcnJheS5pc0FycmF5KG8pP29bMF06bztyZXR1cm4gbnVsbD09PWk/VGwodCwwLG4pOihuZ0Rldk1vZGUmJl9uKG4saSksZWkobltpXSkpfWZ1bmN0aW9uIEp1KHQsZSxuLG8saSl7Y29uc3QgYT1lLmluc2VydEJlZm9yZUluZGV4O2lmKEFycmF5LmlzQXJyYXkoYSkpe25nRGV2TW9kZSYmeW4obyk7bGV0IHI9byxzPW51bGw7aWYoMyZlLnR5cGV8fChzPXIscj1pKSxudWxsIT09ciYmMD09KDImZS5mbGFncykpZm9yKGxldCBlPTE7ZTxhLmxlbmd0aDtlKyspU2wodCxyLG5bYVtlXV0scywhMSl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBRdSh0LGUpe2lmKG5nRGV2TW9kZSYmbG4oZS5pbnNlcnRCZWZvcmVJbmRleCxudWxsLCJXZSBleHBlY3QgdGhhdCBpbnNlcnRCZWZvcmVJbmRleCBpcyBub3Qgc2V0IiksdC5wdXNoKGUpLHQubGVuZ3RoPjEpZm9yKGxldCBuPXQubGVuZ3RoLTI7bj49MDtuLS0pe2NvbnN0IG89dFtuXTskdShvKXx8dGYobyxlKSYmbnVsbD09PWVmKG8pJiZuZihvLGUuaW5kZXgpfX1mdW5jdGlvbiAkdSh0KXtyZXR1cm4hKDY0JnQudHlwZSl9ZnVuY3Rpb24gdGYodCxlKXtyZXR1cm4gJHUoZSl8fHQuaW5kZXg+ZS5pbmRleH1mdW5jdGlvbiBlZih0KXtjb25zdCBlPXQuaW5zZXJ0QmVmb3JlSW5kZXg7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZVswXTplfWZ1bmN0aW9uIG5mKHQsZSl7Y29uc3Qgbj10Lmluc2VydEJlZm9yZUluZGV4O0FycmF5LmlzQXJyYXkobik/blswXT1lOihJbChLdSxKdSksdC5pbnNlcnRCZWZvcmVJbmRleD1lKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gb2YodCxlKXtjb25zdCBuPXQuZGF0YVtlXTtpZihudWxsPT09bnx8InN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBudWxsOyFuZ0Rldk1vZGV8fG4uaGFzT3duUHJvcGVydHkoInRWaWV3cyIpfHxuLmhhc093blByb3BlcnR5KCJjdXJyZW50Q2FzZUxWaWV3SW5kZXgiKXx8Ym4oIldlIGV4cGVjdCB0byBnZXQgJ251bGwnfCdUSWN1J3wnVEljdUNvbnRhaW5lcicsIGJ1dCBnb3Q6ICIrbik7Y29uc3Qgbz1uLmhhc093blByb3BlcnR5KCJjdXJyZW50Q2FzZUxWaWV3SW5kZXgiKT9uOm4udmFsdWU7cmV0dXJuIG5nRGV2TW9kZSYma28obyksb31mdW5jdGlvbiBhZih0LGUsbil7Y29uc3Qgbz1YYyh0LG4sNjQsbnVsbCxudWxsKTtyZXR1cm4gUXUoZSxvKSxvfWZ1bmN0aW9uIHJmKHQsZSl7Y29uc3Qgbj1lW3QuY3VycmVudENhc2VMVmlld0luZGV4XTtyZXR1cm4gbnVsbD09PW4/bjpuPDA/fm46bn1mdW5jdGlvbiBzZih0KXtyZXR1cm4gdD4+PjE3fWZ1bmN0aW9uIGxmKHQpe3JldHVybigxMzEwNzAmdCk+Pj4xfWZ1bmN0aW9uIGNmKHQpe3JldHVybiAxJnR9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpsZXQgZGY9MCxwZj0wO2Z1bmN0aW9uIG1mKHQsZSxuLG8pe25nRGV2TW9kZSYmeW4obyk7Y29uc3QgaT1uWzExXTtsZXQgYSxyPW51bGw7Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspe2NvbnN0IGw9ZVtzXTtpZigic3RyaW5nIj09dHlwZW9mIGwpe2NvbnN0IHQ9ZVsrK3NdO251bGw9PT1uW3RdJiYobmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJDcmVhdGVUZXh0Tm9kZSsrLG5nRGV2TW9kZSYmX24obix0KSxuW3RdPXlsKGksbCkpfWVsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBsKXN3aXRjaCgxJmwpe2Nhc2UgMDpjb25zdCBjPXNmKGwpO2xldCBkLHA7aWYobnVsbD09PXImJihyPWMsYT1SbChpLG8pKSxjPT09cj8oZD1vLHA9YSk6KGQ9bnVsbCxwPWVpKG5bY10pKSxudWxsIT09cCl7bmdEZXZNb2RlJiZ5bihwKTtjb25zdCBlPWxmKGwpO25nRGV2TW9kZSYmZm4oZSxnbywiTWlzc2luZyByZWYiKTtjb25zdCBvPW5bZV07bmdEZXZNb2RlJiZ5bihvKSxTbChpLHAsbyxkLCExKTtjb25zdCBhPW9mKHQsZSk7aWYobnVsbCE9PWEmJiJvYmplY3QiPT10eXBlb2YgYSl7bmdEZXZNb2RlJiZrbyhhKTtjb25zdCBlPXJmKGEsbik7bnVsbCE9PWUmJm1mKHQsYS5jcmVhdGVbZV0sbixuW2EuYW5jaG9ySWR4XSl9fWJyZWFrO2Nhc2UgMTpjb25zdCBtPWVbKytzXSx1PWVbKytzXTtNZChpLG5pKGw+Pj4xLG4pLG51bGwsbnVsbCxtLHUsbnVsbCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgbXV0YXRlIG9wZXJhdGlvbiBmb3IgIiR7bH0iYCl9ZWxzZSBzd2l0Y2gobCl7Y2FzZSBZdTpjb25zdCB0PWVbKytzXSxvPWVbKytzXTtudWxsPT09bltvXSYmKG5nRGV2TW9kZSYmbG4odHlwZW9mIHQsInN0cmluZyIsYEV4cGVjdGVkICIke3R9IiB0byBiZSBhIGNvbW1lbnQgbm9kZSB2YWx1ZWApLG5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyQ3JlYXRlQ29tbWVudCsrLG5nRGV2TW9kZSYmTm8obixvKSxMcyhuW29dPUNsKGksdCksbikpO2JyZWFrO2Nhc2UgV3U6Y29uc3QgYT1lWysrc10scj1lWysrc107bnVsbD09PW5bcl0mJihuZ0Rldk1vZGUmJmxuKHR5cGVvZiBhLCJzdHJpbmciLGBFeHBlY3RlZCAiJHthfSIgdG8gYmUgYW4gZWxlbWVudCBub2RlIHRhZyBuYW1lYCksbmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJDcmVhdGVFbGVtZW50KyssbmdEZXZNb2RlJiZObyhuLHIpLExzKG5bcl09TWwoaSxhLG51bGwpLG4pKTticmVhaztkZWZhdWx0Om5nRGV2TW9kZSYmYm4oYFVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgbXV0YXRlIG9wZXJhdGlvbiBmb3IgIiR7bH0iYCl9fX1mdW5jdGlvbiB1Zih0LGUsbixvLGkpe2ZvcihsZXQgYT0wO2E8bi5sZW5ndGg7YSsrKXtjb25zdCByPW5bYV0scz1uWysrYV07aWYociZpKXtsZXQgaT0iIjtmb3IobGV0IHI9YSsxO3I8PWErcztyKyspe2NvbnN0IGE9bltyXTtpZigic3RyaW5nIj09dHlwZW9mIGEpaSs9YTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgYSlpZihhPDApaSs9JGUoZVtvLWFdKTtlbHNle2NvbnN0IHM9YT4+PjI7c3dpdGNoKDMmYSl7Y2FzZSAxOmNvbnN0IGE9blsrK3JdLGw9blsrK3JdLGM9dC5kYXRhW3NdO25nRGV2TW9kZSYmaG4oYywiRXhwZXJ0aW5nIFROb2RlIG9yIHN0cmluZyIpLCJzdHJpbmciPT10eXBlb2YgYz9NZChlWzExXSxlW3NdLG51bGwsYyxhLGksbCk6bGQodCxjLGUsYSxpLGVbMTFdLGwsITEpO2JyZWFrO2Nhc2UgMDpjb25zdCBkPWVbc107bnVsbCE9PWQmJl9sKGVbMTFdLGQsaSk7YnJlYWs7Y2FzZSAyOmdmKHQsb2YodCxzKSxlLGkpO2JyZWFrO2Nhc2UgMzpmZih0LG9mKHQscyksbyxlKX19fX1lbHNle2NvbnN0IGk9blthKzFdO2lmKGk+MCYmMz09KDMmaSkpe2NvbnN0IG49b2YodCxpPj4+Mik7ZVtuLmN1cnJlbnRDYXNlTFZpZXdJbmRleF08MCYmZmYodCxuLG8sZSl9fWErPXN9fWZ1bmN0aW9uIGZmKHQsZSxuLG8pe25nRGV2TW9kZSYmX24obyxlLmN1cnJlbnRDYXNlTFZpZXdJbmRleCk7bGV0IGk9b1tlLmN1cnJlbnRDYXNlTFZpZXdJbmRleF07aWYobnVsbCE9PWkpe2xldCBhPWRmO2k8MCYmKGk9b1tlLmN1cnJlbnRDYXNlTFZpZXdJbmRleF09fmksYT0tMSksdWYodCxvLGUudXBkYXRlW2ldLG4sYSl9fWZ1bmN0aW9uIGdmKHQsZSxuLG8pe2NvbnN0IGk9KGZ1bmN0aW9uIGEodCxlKXtsZXQgbj10LmNhc2VzLmluZGV4T2YoZSk7aWYoLTE9PT1uKXN3aXRjaCh0LnR5cGUpe2Nhc2UgMTp7Y29uc3Qgbz0oZnVuY3Rpb24gaSh0LGUpe2NvbnN0IG49QnUoZSkocGFyc2VJbnQodCwxMCkpLG89VXVbbl07cmV0dXJuIHZvaWQgMCE9PW8/bzoib3RoZXIifSkoZSwoZnVuY3Rpb24gbygpe3JldHVybiBadX0pKCkpO249dC5jYXNlcy5pbmRleE9mKG8pLC0xPT09biYmIm90aGVyIiE9PW8mJihuPXQuY2FzZXMuaW5kZXhPZigib3RoZXIiKSk7YnJlYWt9Y2FzZSAwOm49dC5jYXNlcy5pbmRleE9mKCJvdGhlciIpfXJldHVybi0xPT09bj9udWxsOm59Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykoZSxvKTtpZihyZihlLG4pIT09aSYmKGhmKHQsZSxuKSxuW2UuY3VycmVudENhc2VMVmlld0luZGV4XT1udWxsPT09aT9udWxsOn5pLG51bGwhPT1pKSl7Y29uc3Qgbz1uW2UuYW5jaG9ySWR4XTtvJiYobmdEZXZNb2RlJiZ5bihvKSxtZih0LGUuY3JlYXRlW2ldLG4sbykpfX1mdW5jdGlvbiBoZih0LGUsbil7bGV0IG89cmYoZSxuKTtpZihudWxsIT09byl7Y29uc3QgaT1lLnJlbW92ZVtvXTtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl7Y29uc3Qgbz1pW2VdO2lmKG8+MCl7Y29uc3QgdD1uaShvLG4pO251bGwhPT10JiZWbChuWzExXSx0KX1lbHNlIGhmKHQsb2YodCx+byksbil9fX1mdW5jdGlvbiBiZigpe2NvbnN0IHQ9W107bGV0IGUsbixvPS0xO2Z1bmN0aW9uIGkodCxlKXtvPTA7Y29uc3QgaT1yZih0LGUpO251bGwhPT1pPyhuZ0Rldk1vZGUmJnJuKGksMCx0LmNhc2VzLmxlbmd0aC0xKSxuPXQucmVtb3ZlW2ldKTpuPVdufWZ1bmN0aW9uIGEoKXtpZihvPG4ubGVuZ3RoKXtjb25zdCByPW5bbysrXTtpZihuZ0Rldk1vZGUmJmFuKHIsIkV4cGVjdGluZyBPcENvZGUgbnVtYmVyIikscj4wKXtjb25zdCB0PWVbcl07cmV0dXJuIG5nRGV2TW9kZSYmeW4odCksdH17dC5wdXNoKG8sbik7Y29uc3Qgcz1lWzFdLmRhdGFbfnJdO3JldHVybiBuZ0Rldk1vZGUmJmtvKHMpLGkocyxlKSxhKCl9fXJldHVybiAwPT09dC5sZW5ndGg/bnVsbDoobj10LnBvcCgpLG89dC5wb3AoKSxhKCkpfXJldHVybiBmdW5jdGlvbiByKG4sbyl7Zm9yKGU9bzt0Lmxlbmd0aDspdC5wb3AoKTtyZXR1cm4gbmdEZXZNb2RlJiZPbyhuLG8pLGkobi52YWx1ZSxvKSxhfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24geWYodCl7Y29uc3QgZT10fHwoQXJyYXkuaXNBcnJheSh0aGlzKT90aGlzOltdKTtsZXQgbj1bXTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbz1lW3QrK10saT0obyZxdS5BUFBFTkRfRUFHRVJMWSk9PT1xdS5BUFBFTkRfRUFHRVJMWSxhPW8+Pj5xdS5TSElGVDtuLnB1c2goYGxWaWV3WyR7YX1dID0gZG9jdW1lbnQuJHsobyZxdS5DT01NRU5UKT09PXF1LkNPTU1FTlQ/ImNyZWF0ZUNvbW1lbnQiOiJjcmVhdGVUZXh0In0oJHtKU09OLnN0cmluZ2lmeShlW3RdKX0pO2ApLGkmJm4ucHVzaChgcGFyZW50LmFwcGVuZENoaWxkKGxWaWV3WyR7YX1dKTtgKX1yZXR1cm4gbn1mdW5jdGlvbiBfZih0KXtjb25zdCBlPW5ldyB2Zih0fHwoQXJyYXkuaXNBcnJheSh0aGlzKT90aGlzOltdKSk7bGV0IG49W107ZnVuY3Rpb24gbyh0KXtjb25zdCBuPXQ+Pj4yO3N3aXRjaCgzJnQpe2Nhc2UgMDpyZXR1cm5gKGxWaWV3WyR7bn1dIGFzIFRleHQpLnRleHRDb250ZW50ID0gJCQkYDtjYXNlIDE6Y29uc3QgdD1lLmNvbnN1bWVTdHJpbmcoKSxvPWUuY29uc3VtZUZ1bmN0aW9uKCk7cmV0dXJuYChsVmlld1ske259XSBhcyBFbGVtZW50KS5zZXRBdHRyaWJ1dGUoJyR7dH0nLCAke28/YCgke299KSgkJCQpYDoiJCQkIn0pYDtjYXNlIDI6cmV0dXJuYGljdVN3aXRjaENhc2UoJHtufSwgJCQkKWA7Y2FzZSAzOnJldHVybmBpY3VVcGRhdGVDYXNlKCR7bn0pYH10aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgT3BDb2RlIil9Zm9yKDtlLmhhc01vcmUoKTspe2xldCB0PWUuY29uc3VtZU51bWJlcigpLGk9ZS5jb25zdW1lTnVtYmVyKCk7Y29uc3QgYT1lLmkraSxyPVtdO2xldCBzPSIiO2Zvcig7ZS5pPGE7KXtsZXQgdD1lLmNvbnN1bWVOdW1iZXJPclN0cmluZygpO2lmKCJzdHJpbmciPT10eXBlb2YgdClzKz10O2Vsc2UgaWYodDwwKXMrPSIke2xWaWV3W2kiK3QrIl19IjtlbHNle2NvbnN0IGU9byh0KTtyLnB1c2goZS5yZXBsYWNlKCIkJCQiLCJgIitzKyJgIikrIjsiKSxzPSIifX1uLnB1c2goYGlmIChtYXNrICYgMGIke3QudG9TdHJpbmcoMil9KSB7ICR7ci5qb2luKCIgIil9IH1gKX1yZXR1cm4gbn1mdW5jdGlvbiBDZih0KXtjb25zdCBlPW5ldyB2Zih0fHwoQXJyYXkuaXNBcnJheSh0aGlzKT90aGlzOltdKSk7bGV0IG49W107ZnVuY3Rpb24gbyh0KXtjb25zdCBuPXNmKHQpLG89bGYodCk7c3dpdGNoKGNmKHQpKXtjYXNlIDA6cmV0dXJuYChsVmlld1ske259XSBhcyBFbGVtZW50KS5hcHBlbmRDaGlsZChsVmlld1ske2l9XSlgO2Nhc2UgMTpyZXR1cm5gKGxWaWV3WyR7b31dIGFzIEVsZW1lbnQpLnNldEF0dHJpYnV0ZSgiJHtlLmNvbnN1bWVTdHJpbmcoKX0iLCAiJHtlLmNvbnN1bWVTdHJpbmcoKX0iKWB9dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIE9wQ29kZTogIitjZih0KSl9bGV0IGk9LTE7Zm9yKDtlLmhhc01vcmUoKTspe2xldCB0PWUuY29uc3VtZU51bWJlclN0cmluZ09yTWFya2VyKCk7aWYodD09PVl1KXtjb25zdCB0PWUuY29uc3VtZVN0cmluZygpO2k9ZS5jb25zdW1lTnVtYmVyKCksbi5wdXNoKGBsVmlld1ske2l9XSA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiR7dH0iKWApfWVsc2UgaWYodD09PVd1KXtjb25zdCB0PWUuY29uc3VtZVN0cmluZygpO2k9ZS5jb25zdW1lTnVtYmVyKCksbi5wdXNoKGBsVmlld1ske2l9XSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIiR7dH0iKWApfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB0KWk9ZS5jb25zdW1lTnVtYmVyKCksbi5wdXNoKGBsVmlld1ske2l9XSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIke3R9IilgKTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUiKTt7Y29uc3QgZT1vKHQpO2UmJm4ucHVzaChlKX19fXJldHVybiBufWZ1bmN0aW9uIE1mKHQpe2NvbnN0IGU9dHx8KEFycmF5LmlzQXJyYXkodGhpcyk/dGhpczpbXSk7bGV0IG49W107Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IG89ZVt0XTtuLnB1c2gobz4wP2ByZW1vdmUobFZpZXdbJHtvfV0pYDpgcmVtb3ZlTmVzdGVkSUNVKCR7fm99KWApfXJldHVybiBufWNsYXNzIHZme2NvbnN0cnVjdG9yKHQpe3RoaXMuaT0wLHRoaXMuY29kZXM9dH1oYXNNb3JlKCl7cmV0dXJuIHRoaXMuaTx0aGlzLmNvZGVzLmxlbmd0aH1jb25zdW1lTnVtYmVyKCl7bGV0IHQ9dGhpcy5jb2Rlc1t0aGlzLmkrK107cmV0dXJuIGFuKHQsImV4cGVjdGluZyBudW1iZXIgaW4gT3BDb2RlIiksdH1jb25zdW1lU3RyaW5nKCl7bGV0IHQ9dGhpcy5jb2Rlc1t0aGlzLmkrK107cmV0dXJuIHNuKHQsImV4cGVjdGluZyBzdHJpbmcgaW4gT3BDb2RlIiksdH1jb25zdW1lRnVuY3Rpb24oKXtsZXQgdD10aGlzLmNvZGVzW3RoaXMuaSsrXTtpZihudWxsPT09dHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHQ7dGhyb3cgbmV3IEVycm9yKCJleHBlY3RpbmcgZnVuY3Rpb24gaW4gT3BDb2RlIil9Y29uc3VtZU51bWJlck9yU3RyaW5nKCl7bGV0IHQ9dGhpcy5jb2Rlc1t0aGlzLmkrK107cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHxhbih0LCJleHBlY3RpbmcgbnVtYmVyIG9yIHN0cmluZyBpbiBPcENvZGUiKSx0fWNvbnN1bWVOdW1iZXJTdHJpbmdPck1hcmtlcigpe2xldCB0PXRoaXMuY29kZXNbdGhpcy5pKytdO3JldHVybiJzdHJpbmciPT10eXBlb2YgdHx8Im51bWJlciI9PXR5cGVvZiB0fHx0PT1ZdXx8dD09V3V8fGFuKHQsImV4cGVjdGluZyBudW1iZXIsIHN0cmluZywgSUNVX01BUktFUiBvciBFTEVNRU5UX01BUktFUiBpbiBPcENvZGUiKSx0fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgeGY9L++/vShcZCspOj9cZCrvv70vZ2ksT2Y9Lyh7XHMq77+9XGQrOj9cZCrvv71ccyosXHMqXFN7Nn1ccyosW1xzXFNdKn0pL2dpLFBmPS/vv70oXGQrKe+/vS8sd2Y9L15ccyoo77+9XGQrOj9cZCrvv70pXHMqLFxzKihzZWxlY3R8cGx1cmFsKVxzKiwvLGtmPS/vv71cLz9cKihcZCs6XGQrKe+/vS9naSxTZj0v77+9KFwvP1sjKl1cZCspOj9cZCrvv70vZ2ksRGY9L1x1RTUwMC9nO2Z1bmN0aW9uIEVmKHQsZSxuLG8saSxhLHIpe2NvbnN0IHM9S2ModCxvLDEsbnVsbCk7bGV0IGw9czw8cXUuU0hJRlQsYz1faSgpO2U9PT1jJiYoYz1udWxsKSxudWxsPT09YyYmKGx8PXF1LkFQUEVORF9FQUdFUkxZKSxyJiYobHw9cXUuQ09NTUVOVCwoZnVuY3Rpb24gZCh0KXt2b2lkIDA9PT1kbCYmKGRsPXQoKSl9KShiZikpLGkucHVzaChsLG51bGw9PT1hPyIiOmEpO2NvbnN0IHA9WGModCxzLHI/MzI6MSxudWxsPT09YT9uZ0Rldk1vZGU/Int7P319IjoiIjphLG51bGwpO1F1KG4scCk7Y29uc3QgbT1wLmluZGV4O3JldHVybiBDaShwLCExKSxudWxsIT09YyYmZSE9PWMmJihmdW5jdGlvbiB1KHQsZSl7bmdEZXZNb2RlJiZ3byh0KTtsZXQgbj10Lmluc2VydEJlZm9yZUluZGV4O251bGw9PT1uPyhJbChLdSxKdSksbj10Lmluc2VydEJlZm9yZUluZGV4PVtudWxsLGVdKToobG4oQXJyYXkuaXNBcnJheShuKSwhMCwiRXhwZWN0aW5nIGFycmF5IGhlcmUiKSxuLnB1c2goZSkpfSkoYyxtKSxwfWZ1bmN0aW9uIFJmKHQsZSxuLG8saSxhLHIpe2NvbnN0IHM9ci5tYXRjaCh4ZiksbD1FZih0LGUsbixhLG8scz9udWxsOnIsITEpO3MmJkFmKGkscixsLmluZGV4LG51bGwsMCxudWxsKX1mdW5jdGlvbiBBZih0LGUsbixvLGksYSl7bmdEZXZNb2RlJiZnbihuLGdvLCJJbmRleCBtdXN0IGJlIGluIGFic29sdXRlIExWaWV3IG9mZnNldCIpO2NvbnN0IHI9dC5sZW5ndGgscz1yKzE7dC5wdXNoKG51bGwsbnVsbCk7Y29uc3QgbD1yKzI7bmdEZXZNb2RlJiZiYyh0LF9mKTtjb25zdCBjPWUuc3BsaXQoeGYpO2xldCBkPTA7Zm9yKGxldCBlPTA7ZTxjLmxlbmd0aDtlKyspe2NvbnN0IG49Y1tlXTtpZigxJmUpe2NvbnN0IGU9aStwYXJzZUludChuLDEwKTt0LnB1c2goLTEtZSksZHw9TmYoZSl9ZWxzZSIiIT09biYmdC5wdXNoKG4pfXJldHVybiB0LnB1c2gobjw8Mnwobz8xOjApKSxvJiZ0LnB1c2gobyxhKSx0W3JdPWQsdFtzXT10Lmxlbmd0aC1sLGR9ZnVuY3Rpb24gVGYodCl7bGV0IGU9MDtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7Y29uc3Qgbz10W25dOyJudW1iZXIiPT10eXBlb2YgbyYmbzwwJiZlKyt9cmV0dXJuIGV9ZnVuY3Rpb24gTmYodCl7cmV0dXJuIDE8PE1hdGgubWluKHQsMzEpfWZ1bmN0aW9uIHpmKHQpe2xldCBlLG4sbz0iIixpPTAsYT0hMTtmb3IoO251bGwhPT0oZT1rZi5leGVjKHQpKTspYT9lWzBdPT09YO+/vS8qJHtufe+/vWAmJihpPWUuaW5kZXgsYT0hMSk6KG8rPXQuc3Vic3RyaW5nKGksZS5pbmRleCtlWzBdLmxlbmd0aCksbj1lWzFdLGE9ITApO3JldHVybiBuZ0Rldk1vZGUmJmxuKGEsITEsYFRhZyBtaXNtYXRjaDogdW5hYmxlIHRvIGZpbmQgdGhlIGVuZCBvZiB0aGUgc3ViLXRlbXBsYXRlIGluIHRoZSB0cmFuc2xhdGlvbiAiJHt0fSJgKSxvKz10LnN1YnN0cihpKSxvfWZ1bmN0aW9uIElmKHQsZSxuLG8saSxhKXtuZ0Rldk1vZGUmJmhuKGksIklDVSBleHByZXNzaW9uIG11c3QgYmUgZGVmaW5lZCIpO2xldCByPTA7Y29uc3Qgcz17dHlwZTppLnR5cGUsY3VycmVudENhc2VMVmlld0luZGV4OktjKHQsZSwxLG51bGwpLGFuY2hvcklkeDphLGNhc2VzOltdLGNyZWF0ZTpbXSxyZW1vdmU6W10sdXBkYXRlOltdfTshKGZ1bmN0aW9uIGwodCxlLG4pe3QucHVzaChOZihlLm1haW5CaW5kaW5nKSwyLC0xLWUubWFpbkJpbmRpbmcsbjw8MnwyKX0pKG4saSxhKSwoZnVuY3Rpb24gYyh0LGUsbil7Y29uc3Qgbz10LmRhdGFbZV07bmdEZXZNb2RlJiZsbihudWxsPT09b3x8by5oYXNPd25Qcm9wZXJ0eSgidFZpZXdzIiksITAsIldlIGV4cGVjdCB0byBnZXQgJ251bGwnfCdUSWN1Q29udGFpbmVyJyIpLG51bGw9PT1vP3QuZGF0YVtlXT1uOihuZ0Rldk1vZGUmJmlhKG8sMzIpLG8udmFsdWU9bil9KSh0LGEscyk7Y29uc3QgZD1pLnZhbHVlcztmb3IobGV0IGE9MDthPGQubGVuZ3RoO2ErKyl7Y29uc3QgbD1kW2FdLGM9W107Zm9yKGxldCB0PTA7dDxsLmxlbmd0aDt0Kyspe2NvbnN0IGU9bFt0XTtpZigic3RyaW5nIiE9dHlwZW9mIGUpe2NvbnN0IG49Yy5wdXNoKGUpLTE7bFt0XT1gXHgzYyEtLe+/vSR7bn3vv70tLVx4M2VgfX1yPUxmKHQscyxlLG4sbyxpLmNhc2VzW2FdLGwuam9pbigiIiksYyl8cn1yJiYoZnVuY3Rpb24gcCh0LGUsbil7dC5wdXNoKGUsMSxuPDwyfDMpfSkobixyLGEpfWZ1bmN0aW9uIEhmKHQpe2NvbnN0IGU9W10sbj1bXTtsZXQgbz0xLGk9MDtjb25zdCBhPUZmKHQ9dC5yZXBsYWNlKHdmLChmdW5jdGlvbih0LGUsbil7cmV0dXJuIG89InNlbGVjdCI9PT1uPzA6MSxpPXBhcnNlSW50KGUuc3Vic3RyKDEpLDEwKSwiIn0pKSk7Zm9yKGxldCB0PTA7dDxhLmxlbmd0aDspe2xldCBpPWFbdCsrXS50cmltKCk7MT09PW8mJihpPWkucmVwbGFjZSgvXHMqKD86PSk/KFx3KylccyovLCIkMSIpKSxpLmxlbmd0aCYmZS5wdXNoKGkpO2NvbnN0IHI9RmYoYVt0KytdKTtlLmxlbmd0aD5uLmxlbmd0aCYmbi5wdXNoKHIpfXJldHVybnt0eXBlOm8sbWFpbkJpbmRpbmc6aSxjYXNlczplLHZhbHVlczpufX1mdW5jdGlvbiBGZih0KXtpZighdClyZXR1cm5bXTtsZXQgZT0wO2NvbnN0IG49W10sbz1bXSxpPS9be31dL2c7bGV0IGE7Zm9yKGkubGFzdEluZGV4PTA7YT1pLmV4ZWModCk7KXtjb25zdCBpPWEuaW5kZXg7aWYoIn0iPT1hWzBdKXtpZihuLnBvcCgpLDA9PW4ubGVuZ3RoKXtjb25zdCBuPXQuc3Vic3RyaW5nKGUsaSk7d2YudGVzdChuKT9vLnB1c2goSGYobikpOm8ucHVzaChuKSxlPWkrMX19ZWxzZXtpZigwPT1uLmxlbmd0aCl7Y29uc3Qgbj10LnN1YnN0cmluZyhlLGkpO28ucHVzaChuKSxlPWkrMX1uLnB1c2goInsiKX19Y29uc3Qgcj10LnN1YnN0cmluZyhlKTtyZXR1cm4gby5wdXNoKHIpLG99ZnVuY3Rpb24gTGYodCxlLG4sbyxpLGEscixzKXtjb25zdCBsPVtdLGM9W10sZD1bXTtuZ0Rldk1vZGUmJihiYyhsLENmKSxiYyhjLE1mKSxiYyhkLF9mKSksZS5jYXNlcy5wdXNoKGEpLGUuY3JlYXRlLnB1c2gobCksZS5yZW1vdmUucHVzaChjKSxlLnVwZGF0ZS5wdXNoKGQpO2NvbnN0IHA9b3MoSm8oKSkuZ2V0SW5lcnRCb2R5RWxlbWVudChyKTtuZ0Rldk1vZGUmJmhuKHAsIlVuYWJsZSB0byBnZW5lcmF0ZSBpbmVydCBib2R5IGVsZW1lbnQiKTtjb25zdCBtPVJzKHApfHxwO3JldHVybiBtP0JmKHQsZSxuLG8sbCxjLGQsbSxpLHMsMCk6MH1mdW5jdGlvbiBCZih0LGUsbixvLGksYSxyLHMsbCxjLGQpe2xldCBwPTAsbT1zLmZpcnN0Q2hpbGQ7Zm9yKDttOyl7Y29uc3Qgcz1LYyh0LG4sMSxudWxsKTtzd2l0Y2gobS5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpjb25zdCB1PW0sZj11LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZih5cy5oYXNPd25Qcm9wZXJ0eShmKSl7VWYoaSxXdSxmLGwscyksdC5kYXRhW3NdPWY7Y29uc3QgZz11LmF0dHJpYnV0ZXM7Zm9yKGxldCB0PTA7dDxnLmxlbmd0aDt0Kyspe2NvbnN0IGU9Zy5pdGVtKHQpLG49ZS5uYW1lLnRvTG93ZXJDYXNlKCk7ZS52YWx1ZS5tYXRjaCh4Zik/eHMuaGFzT3duUHJvcGVydHkobik/QWYocixlLnZhbHVlLHMsZS5uYW1lLDAsX3Nbbl0/bHM6Q3Nbbl0/Y3M6bnVsbCk6bmdEZXZNb2RlJiZjb25zb2xlLndhcm4oYFdBUk5JTkc6IGlnbm9yaW5nIHVuc2FmZSBhdHRyaWJ1dGUgdmFsdWUgJHtufSBvbiBlbGVtZW50ICR7Zn0gKHNlZSBodHRwczovL2cuY28vbmcvc2VjdXJpdHkjeHNzKWApOkdmKGkscyxlKX1wPUJmKHQsZSxuLG8saSxhLHIsbSxzLGMsZCsxKXxwLFZmKGEscyxkKX1icmVhaztjYXNlIE5vZGUuVEVYVF9OT0RFOmNvbnN0IGc9bS50ZXh0Q29udGVudHx8IiIsaD1nLm1hdGNoKHhmKTtVZihpLG51bGwsaD8iIjpnLGwscyksVmYoYSxzLGQpLGgmJihwPUFmKHIsZyxzLG51bGwsMCxudWxsKXxwKTticmVhaztjYXNlIE5vZGUuQ09NTUVOVF9OT0RFOmNvbnN0IGI9UGYuZXhlYyhtLnRleHRDb250ZW50fHwiIik7aWYoYil7Y29uc3QgZT1wYXJzZUludChiWzFdLDEwKSxyPWNbZV07VWYoaSxZdSxuZ0Rldk1vZGU/YG5lc3RlZCBJQ1UgJHtlfWA6IiIsbCxzKSxJZih0LG4sbyxsLHIscyksamYoYSxzLGQpfX1tPW0ubmV4dFNpYmxpbmd9cmV0dXJuIHB9ZnVuY3Rpb24gVmYodCxlLG4pezA9PT1uJiZ0LnB1c2goZSl9ZnVuY3Rpb24gamYodCxlLG4pezA9PT1uJiYodC5wdXNoKH5lKSx0LnB1c2goZSkpfWZ1bmN0aW9uIFVmKHQsZSxuLG8saSl7bnVsbCE9PWUmJnQucHVzaChlKSx0LnB1c2gobixpLChmdW5jdGlvbiBhKHQsZSxuKXtyZXR1cm4gbmdEZXZNb2RlJiZnbihlLDAsIk1pc3NpbmcgcGFyZW50IGluZGV4IiksbmdEZXZNb2RlJiZmbihuLDAsIk1pc3NpbmcgcmVmIGluZGV4IiksdHxlPDwxN3xuPDwxfSkoMCxvLGkpKX1mdW5jdGlvbiBHZih0LGUsbil7dC5wdXNoKGU8PDF8MSxuLm5hbWUsbi52YWx1ZSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IFdmPS9cWyjvv70uKz/vv70/KVxdLyxZZj0vXFso77+9Lis/77+9PylcXXwo77+9XC8/XCpcZCs6XGQr77+9KS9nLHFmPS8oe1xzKikoVkFSXyhQTFVSQUx8U0VMRUNUKShfXGQrKT8pKFxzKiwpL2csWmY9L3soW0EtWjAtOV9dKyl9L2csWGY9L++/vUkxOE5fRVhQXyhJQ1UoX1xkKyk/Ke+/vS9nLEtmPS9cL1wqLyxKZj0vXGQrXDooXGQrKS87Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBRZih0LGUsbj0tMSl7Y29uc3Qgbz1naSgpLGk9ZmkoKSxhPWdvK3Q7bmdEZXZNb2RlJiZobihvLCJ0VmlldyBzaG91bGQgYmUgZGVmaW5lZCIpO2NvbnN0IHI9Y2koby5jb25zdHMsZSkscz1faSgpO28uZmlyc3RDcmVhdGVQYXNzJiYoZnVuY3Rpb24gbCh0LGUsbixvLGksYSl7Y29uc3Qgcj1faSgpLHM9W10sbD1bXSxjPVtbXV07bmdEZXZNb2RlJiYoYmMocyx5ZiksYmMobCxfZikpO2NvbnN0IGQ9KGZ1bmN0aW9uIG0odCl7cmV0dXJuIHQucmVwbGFjZShEZiwiICIpfSkoaT0oZnVuY3Rpb24gcCh0LGUpe2lmKChmdW5jdGlvbiBuKHQpe3JldHVybi0xPT09dH0pKGUpKXJldHVybiB6Zih0KTt7Y29uc3Qgbj10LmluZGV4T2YoYDoke2V977+9YCkrMitlLnRvU3RyaW5nKCkubGVuZ3RoLG89dC5zZWFyY2gobmV3IFJlZ0V4cChg77+9XFwvXFwqXFxkKzoke2V977+9YCkpO3JldHVybiB6Zih0LnN1YnN0cmluZyhuLG8pKX19KShpLGEpKS5zcGxpdChTZik7Zm9yKGxldCBhPTA7YTxkLmxlbmd0aDthKyspe2xldCBwPWRbYV07aWYoMD09KDEmYSkpe2NvbnN0IGE9RmYocCk7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2xldCBwPWFbZF07aWYoMD09KDEmZCkpe2NvbnN0IGU9cDtuZ0Rldk1vZGUmJnNuKGUsIlBhcnNlZCBJQ1UgcGFydCBzaG91bGQgYmUgc3RyaW5nIiksIiIhPT1lJiZSZih0LHIsY1swXSxzLGwsbixlKX1lbHNle2NvbnN0IGE9cDtpZigib2JqZWN0IiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgSUNVIGV4cHJlc3Npb24gaW4gIiR7aX0iIG1lc3NhZ2UuYCk7Y29uc3QgZD1FZih0LHIsY1swXSxuLHMsbmdEZXZNb2RlP2BJQ1UgJHtvfToke2EubWFpbkJpbmRpbmd9YDoiIiwhMCkuaW5kZXg7bmdEZXZNb2RlJiZnbihkLGdvLCJJbmRleCBtdXN0IGJlIGluIGFic29sdXRlIExWaWV3IG9mZnNldCIpLElmKHQsbixsLGUsYSxkKX19fWVsc2V7Y29uc3QgZT00Nz09PXAuY2hhckNvZGVBdCgwKSxuPXAuY2hhckNvZGVBdChlPzE6MCk7bmdEZXZNb2RlJiZDbihuLDQyLDM1KTtjb25zdCBvPWdvK051bWJlci5wYXJzZUludChwLnN1YnN0cmluZyhlPzI6MSkpO2lmKGUpYy5zaGlmdCgpLENpKF9pKCksITEpO2Vsc2V7Y29uc3QgZT1hZih0LGNbMF0sbyk7Yy51bnNoaWZ0KFtdKSxDaShlLCEwKX19fXQuZGF0YVtvXT17Y3JlYXRlOnMsdXBkYXRlOmx9fSkobyxudWxsPT09cz8wOnMuaW5kZXgsaSxhLHIsbik7Y29uc3QgYz1vLmRhdGFbYV0sZD1rbChvLHM9PT1pWzZdP251bGw6cyxpKTshKGZ1bmN0aW9uIHAodCxlLG4sbyl7Y29uc3QgaT10WzExXTtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl7Y29uc3Qgcj1lW2ErK10scz1lW2FdLGw9KHImcXUuQ09NTUVOVCk9PT1xdS5DT01NRU5ULGM9KHImcXUuQVBQRU5EX0VBR0VSTFkpPT09cXUuQVBQRU5EX0VBR0VSTFksZD1yPj4+cXUuU0hJRlQ7bGV0IHA9dFtkXTtudWxsPT09cCYmKHA9dFtkXT1sP2kuY3JlYXRlQ29tbWVudChzKTp5bChpLHMpKSxjJiZudWxsIT09biYmU2woaSxuLHAsbywhMSl9fSkoaSxjLmNyZWF0ZSxkLHMmJjgmcy50eXBlP2lbcy5pbmRleF06bnVsbCksRWkoITApfWZ1bmN0aW9uICRmKCl7RWkoITEpfWZ1bmN0aW9uIHRnKHQsZSxuKXtRZih0LGUsbiksJGYoKX1mdW5jdGlvbiBlZyh0KXtyZXR1cm4oZnVuY3Rpb24gZSh0KXt0JiYoZGZ8PTE8PE1hdGgubWluKHBmLDMxKSkscGYrK30pKEZwKGZpKCksU2koKSx0KSksZWd9ZnVuY3Rpb24gbmcodCl7IShmdW5jdGlvbiBlKHQsbixvKXtpZihwZj4wKXtuZ0Rldk1vZGUmJmhuKHQsInRWaWV3IHNob3VsZCBiZSBkZWZpbmVkIik7Y29uc3QgZT10LmRhdGFbb107dWYodCxuLEFycmF5LmlzQXJyYXkoZSk/ZTplLnVwZGF0ZSx3aSgpLXBmLTEsZGYpfWRmPTAscGY9MH0pKGdpKCksZmkoKSx0K2dvKX1mdW5jdGlvbiBvZyh0LGU9e30pe3JldHVybihmdW5jdGlvbiBuKHQsZT17fSl7bGV0IG49dDtpZihXZi50ZXN0KHQpKXtjb25zdCB0PXt9LGU9WzBdO249bi5yZXBsYWNlKFlmLCgobixvLGkpPT57Y29uc3QgYT1vfHxpLHI9dFthXXx8W107aWYoci5sZW5ndGh8fChhLnNwbGl0KCJ8IikuZm9yRWFjaCgodD0+e2NvbnN0IGU9dC5tYXRjaChKZiksbj1lP3BhcnNlSW50KGVbMV0sMTApOjAsbz1LZi50ZXN0KHQpO3IucHVzaChbbixvLHRdKX0pKSx0W2FdPXIpLCFyLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYGkxOG4gcG9zdHByb2Nlc3M6IHVubWF0Y2hlZCBwbGFjZWhvbGRlciAtICR7YX1gKTtjb25zdCBzPWVbZS5sZW5ndGgtMV07bGV0IGw9MDtmb3IobGV0IHQ9MDt0PHIubGVuZ3RoO3QrKylpZihyW3RdWzBdPT09cyl7bD10O2JyZWFrfWNvbnN0W2MsZCxwXT1yW2xdO3JldHVybiBkP2UucG9wKCk6cyE9PWMmJmUucHVzaChjKSxyLnNwbGljZShsLDEpLHB9KSl9cmV0dXJuIE9iamVjdC5rZXlzKGUpLmxlbmd0aD8obj1uLnJlcGxhY2UocWYsKCh0LG4sbyxpLGEscik9PmUuaGFzT3duUHJvcGVydHkobyk/YCR7bn0ke2Vbb119JHtyfWA6dCkpLG49bi5yZXBsYWNlKFpmLCgodCxuKT0+ZS5oYXNPd25Qcm9wZXJ0eShuKT9lW25dOnQpKSxuPW4ucmVwbGFjZShYZiwoKHQsbik9PntpZihlLmhhc093blByb3BlcnR5KG4pKXtjb25zdCBvPWVbbl07aWYoIW8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgaTE4biBwb3N0cHJvY2VzczogdW5tYXRjaGVkIElDVSAtICR7dH0gd2l0aCBrZXk6ICR7bn1gKTtyZXR1cm4gby5zaGlmdCgpfXJldHVybiB0fSkpLG4pOm59KSh0LGUpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gaWcodCxlLG4sbyxpKXtpZih0PVplKHQpLEFycmF5LmlzQXJyYXkodCkpZm9yKGxldCBhPTA7YTx0Lmxlbmd0aDthKyspaWcodFthXSxlLG4sbyxpKTtlbHNle2NvbnN0IGE9Z2koKSxyPWZpKCk7bGV0IHM9b3AodCk/dDpaZSh0LnByb3ZpZGUpLGw9dHAodCk7Y29uc3QgYz1iaSgpLGQ9MTA0ODU3NSZjLnByb3ZpZGVySW5kZXhlcyxwPWMuZGlyZWN0aXZlU3RhcnQsbT1jLnByb3ZpZGVySW5kZXhlcz4+MjA7aWYob3AodCl8fCF0Lm11bHRpKXtjb25zdCBvPW5ldyBuYShsLGksU20pLHU9c2cocyxlLGk/ZDpkK20scCk7LTE9PT11PyhDYShoYShjLHIpLGEscyksYWcoYSx0LGUubGVuZ3RoKSxlLnB1c2gocyksYy5kaXJlY3RpdmVTdGFydCsrLGMuZGlyZWN0aXZlRW5kKyssaSYmKGMucHJvdmlkZXJJbmRleGVzKz0xMDQ4NTc2KSxuLnB1c2gobyksci5wdXNoKG8pKTooblt1XT1vLHJbdV09byl9ZWxzZXtjb25zdCB1PXNnKHMsZSxkK20scCksZj1zZyhzLGUsZCxkK20pLGc9dT49MCYmblt1XSxoPWY+PTAmJm5bZl07aWYoaSYmIWh8fCFpJiYhZyl7Q2EoaGEoYyxyKSxhLHMpO2NvbnN0IGQ9KGZ1bmN0aW9uIGEodCxlLG4sbyxpKXtjb25zdCBhPW5ldyBuYSh0LG4sU20pO3JldHVybiBhLm11bHRpPVtdLGEuaW5kZXg9ZSxhLmNvbXBvbmVudFByb3ZpZGVycz0wLHJnKGEsaSxvJiYhbiksYX0pKGk/Y2c6bGcsbi5sZW5ndGgsaSxvLGwpOyFpJiZoJiYobltmXS5wcm92aWRlckZhY3Rvcnk9ZCksYWcoYSx0LGUubGVuZ3RoLDApLGUucHVzaChzKSxjLmRpcmVjdGl2ZVN0YXJ0KyssYy5kaXJlY3RpdmVFbmQrKyxpJiYoYy5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLG4ucHVzaChkKSxyLnB1c2goZCl9ZWxzZSBhZyhhLHQsdT4tMT91OmYscmcobltpP2Y6dV0sbCwhaSYmbykpOyFpJiZvJiZoJiZuW2ZdLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gYWcodCxlLG4sbyl7Y29uc3QgaT1vcChlKTtpZihpfHwoZnVuY3Rpb24gYSh0KXtyZXR1cm4hIXQudXNlQ2xhc3N9KShlKSl7Y29uc3QgYT0oZS51c2VDbGFzc3x8ZSkucHJvdG90eXBlLm5nT25EZXN0cm95O2lmKGEpe2NvbnN0IHI9dC5kZXN0cm95SG9va3N8fCh0LmRlc3Ryb3lIb29rcz1bXSk7aWYoIWkmJmUubXVsdGkpe25nRGV2TW9kZSYmaG4obywiaW5kZXhJbkZhY3Rvcnkgd2hlbiByZWdpc3RlcmluZyBtdWx0aSBmYWN0b3J5IGRlc3Ryb3kgaG9vayIpO2NvbnN0IHQ9ci5pbmRleE9mKG4pOy0xPT09dD9yLnB1c2gobixbbyxhXSk6clt0KzFdLnB1c2gobyxhKX1lbHNlIHIucHVzaChuLGEpfX19ZnVuY3Rpb24gcmcodCxlLG4pe3JldHVybiBuJiZ0LmNvbXBvbmVudFByb3ZpZGVycysrLHQubXVsdGkucHVzaChlKS0xfWZ1bmN0aW9uIHNnKHQsZSxuLG8pe2ZvcihsZXQgaT1uO2k8bztpKyspaWYoZVtpXT09PXQpcmV0dXJuIGk7cmV0dXJuLTF9ZnVuY3Rpb24gbGcodCxlLG4sbyl7cmV0dXJuIGRnKHRoaXMubXVsdGksW10pfWZ1bmN0aW9uIGNnKHQsZSxuLG8pe2NvbnN0IGk9dGhpcy5tdWx0aTtsZXQgYTtpZih0aGlzLnByb3ZpZGVyRmFjdG9yeSl7Y29uc3QgdD10aGlzLnByb3ZpZGVyRmFjdG9yeS5jb21wb25lbnRQcm92aWRlcnMsZT1TYShuLG5bMV0sdGhpcy5wcm92aWRlckZhY3RvcnkuaW5kZXgsbyk7YT1lLnNsaWNlKDAsdCksZGcoaSxhKTtmb3IobGV0IG49dDtuPGUubGVuZ3RoO24rKylhLnB1c2goZVtuXSl9ZWxzZSBhPVtdLGRnKGksYSk7cmV0dXJuIGF9ZnVuY3Rpb24gZGcodCxlKXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyllLnB1c2goKDAsdFtuXSkoKSk7cmV0dXJuIGV9ZnVuY3Rpb24gcGcodCxlPVtdKXtyZXR1cm4gbj0+e24ucHJvdmlkZXJzUmVzb2x2ZXI9KG4sbyk9PihmdW5jdGlvbiBpKHQsZSxuKXtjb25zdCBvPWdpKCk7aWYoby5maXJzdENyZWF0ZVBhc3Mpe2NvbnN0IGk9eG8odCk7aWcobixvLmRhdGEsby5ibHVlcHJpbnQsaSwhMCksaWcoZSxvLmRhdGEsby5ibHVlcHJpbnQsaSwhMSl9fSkobixvP28odCk6dCxlKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIG1ne30KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgdWd7fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gZmcoLi4udCl7fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBnZyh0LGUpe3JldHVybiBuZXcgaGcob2kodCxlKSl9dWcuTlVMTD1uZXcgY2xhc3N7cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCl7dGhyb3coZnVuY3Rpb24gZSh0KXtjb25zdCBlPUVycm9yKGBObyBjb21wb25lbnQgZmFjdG9yeSBmb3VuZCBmb3IgJHtHZSh0KX0uIERpZCB5b3UgYWRkIGl0IHRvIEBOZ01vZHVsZS5lbnRyeUNvbXBvbmVudHM/YCk7cmV0dXJuIGUubmdDb21wb25lbnQ9dCxlfSkodCl9fTtjbGFzcyBoZ3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm5hdGl2ZUVsZW1lbnQ9dH19ZnVuY3Rpb24gYmcodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBoZz90Lm5hdGl2ZUVsZW1lbnQ6dH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovaGcuX19OR19FTEVNRU5UX0lEX189ZnVuY3Rpb24geWcoKXtyZXR1cm4gZ2coYmkoKSxmaSgpKX0sbmV3IEdhKCJSZW5kZXJlcjJJbnRlcmNlcHRvciIpO2NsYXNzIF9ne31jbGFzcyBDZ3t9Q2cuX19OR19FTEVNRU5UX0lEX189KCk9Pk1nKCk7Y29uc3QgTWc9ZnVuY3Rpb24gdmcoKXtjb25zdCB0PWZpKCksZT1yaShiaSgpLmluZGV4LHQpO3JldHVybihmdW5jdGlvbiBuKHQpe2NvbnN0IGU9dFsxMV07aWYobmdEZXZNb2RlJiYhJG8oZSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaW5qZWN0IFJlbmRlcmVyMiB3aGVuIHRoZSBhcHBsaWNhdGlvbiB1c2VzIFJlbmRlcmVyMyEiKTtyZXR1cm4gZX0pKHlvKGUpP2U6dCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLztjbGFzcyB4Z3t9eGcuybVwcm92PU1uKHt0b2tlbjp4Zyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5udWxsfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBPZ3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmZ1bGw9dCx0aGlzLm1ham9yPXQuc3BsaXQoIi4iKVswXSx0aGlzLm1pbm9yPXQuc3BsaXQoIi4iKVsxXSx0aGlzLnBhdGNoPXQuc3BsaXQoIi4iKS5zbGljZSgyKS5qb2luKCIuIil9fWNvbnN0IFBnPW5ldyBPZygiMTIuMi4xIik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIHdne2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKHQpe3JldHVybiBOcCh0KX1jcmVhdGUodCl7cmV0dXJuIG5ldyBTZyh0KX19Y29uc3Qga2c9KHQsZSk9PmU7Y2xhc3MgU2d7Y29uc3RydWN0b3IodCl7dGhpcy5sZW5ndGg9MCx0aGlzLl9saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fdW5saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fcHJldmlvdXNJdEhlYWQ9bnVsbCx0aGlzLl9pdEhlYWQ9bnVsbCx0aGlzLl9pdFRhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX21vdmVzSGVhZD1udWxsLHRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGwsdGhpcy5fdHJhY2tCeUZuPXR8fGtnfWZvckVhY2hJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2l0SGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX1mb3JFYWNoT3BlcmF0aW9uKHQpe2xldCBlPXRoaXMuX2l0SGVhZCxuPXRoaXMuX3JlbW92YWxzSGVhZCxvPTAsaT1udWxsO2Zvcig7ZXx8bjspe2NvbnN0IGE9IW58fGUmJmUuY3VycmVudEluZGV4PEFnKG4sbyxpKT9lOm4scj1BZyhhLG8saSkscz1hLmN1cnJlbnRJbmRleDtpZihhPT09bilvLS0sbj1uLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGU9ZS5fbmV4dCxudWxsPT1hLnByZXZpb3VzSW5kZXgpbysrO2Vsc2V7aXx8KGk9W10pO2NvbnN0IHQ9ci1vLGU9cy1vO2lmKHQhPWUpe2ZvcihsZXQgbj0wO248dDtuKyspe2NvbnN0IG89bjxpLmxlbmd0aD9pW25dOmlbbl09MCxhPW8rbjtlPD1hJiZhPHQmJihpW25dPW8rMSl9aVthLnByZXZpb3VzSW5kZXhdPWUtdH19ciE9PXMmJnQoYSxyLHMpfX1mb3JFYWNoUHJldmlvdXNJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzSXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFByZXZpb3VzKXQoZSl9Zm9yRWFjaEFkZGVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9Zm9yRWFjaE1vdmVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0TW92ZWQpdChlKX1mb3JFYWNoUmVtb3ZlZEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFJlbW92ZWQpdChlKX1mb3JFYWNoSWRlbnRpdHlDaGFuZ2UodCl7bGV0IGU7Zm9yKGU9dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRJZGVudGl0eUNoYW5nZSl0KGUpfWRpZmYodCl7aWYobnVsbD09dCYmKHQ9W10pLCFOcCh0KSl0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHRyeWluZyB0byBkaWZmICcke0dlKHQpfScuIE9ubHkgYXJyYXlzIGFuZCBpdGVyYWJsZXMgYXJlIGFsbG93ZWRgKTtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKHQpe3RoaXMuX3Jlc2V0KCk7bGV0IGUsbixvLGk9dGhpcy5faXRIZWFkLGE9ITE7aWYoQXJyYXkuaXNBcnJheSh0KSl7dGhpcy5sZW5ndGg9dC5sZW5ndGg7Zm9yKGxldCBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspbj10W2VdLG89dGhpcy5fdHJhY2tCeUZuKGUsbiksbnVsbCE9PWkmJk9iamVjdC5pcyhpLnRyYWNrQnlJZCxvKT8oYSYmKGk9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oaSxuLG8sZSkpLE9iamVjdC5pcyhpLml0ZW0sbil8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGksbikpOihpPXRoaXMuX21pc21hdGNoKGksbixvLGUpLGE9ITApLGk9aS5fbmV4dH1lbHNlIGU9MCwoZnVuY3Rpb24gcih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspZSh0W25dKTtlbHNle2NvbnN0IG49dFtScCgpXSgpO2xldCBvO2Zvcig7IShvPW4ubmV4dCgpKS5kb25lOyllKG8udmFsdWUpfX0pKHQsKHQ9PntvPXRoaXMuX3RyYWNrQnlGbihlLHQpLG51bGwhPT1pJiZPYmplY3QuaXMoaS50cmFja0J5SWQsbyk/KGEmJihpPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGksdCxvLGUpKSxPYmplY3QuaXMoaS5pdGVtLHQpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShpLHQpKTooaT10aGlzLl9taXNtYXRjaChpLHQsbyxlKSxhPSEwKSxpPWkuX25leHQsZSsrfSkpLHRoaXMubGVuZ3RoPWU7cmV0dXJuIHRoaXMuX3RydW5jYXRlKGkpLHRoaXMuY29sbGVjdGlvbj10LHRoaXMuaXNEaXJ0eX1nZXQgaXNEaXJ0eSgpe3JldHVybiBudWxsIT09dGhpcy5fYWRkaXRpb25zSGVhZHx8bnVsbCE9PXRoaXMuX21vdmVzSGVhZHx8bnVsbCE9PXRoaXMuX3JlbW92YWxzSGVhZHx8bnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWR9X3Jlc2V0KCl7aWYodGhpcy5pc0RpcnR5KXtsZXQgdDtmb3IodD10aGlzLl9wcmV2aW91c0l0SGVhZD10aGlzLl9pdEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4O2Zvcih0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0PXRoaXMuX21vdmVzSGVhZDtudWxsIT09dDt0PXQuX25leHRNb3ZlZCl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXg7dGhpcy5fbW92ZXNIZWFkPXRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD10aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbH19X21pc21hdGNoKHQsZSxuLG8pe2xldCBpO3JldHVybiBudWxsPT09dD9pPXRoaXMuX2l0VGFpbDooaT10Ll9wcmV2LHRoaXMuX3JlbW92ZSh0KSksbnVsbCE9PSh0PW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KG4sbnVsbCkpPyhPYmplY3QuaXModC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX3JlaW5zZXJ0QWZ0ZXIodCxpLG8pKTpudWxsIT09KHQ9bnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl9saW5rZWRSZWNvcmRzLmdldChuLG8pKT8oT2JqZWN0LmlzKHQuaXRlbSxlKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKSx0aGlzLl9tb3ZlQWZ0ZXIodCxpLG8pKTp0PXRoaXMuX2FkZEFmdGVyKG5ldyBEZyhlLG4pLGksbyksdH1fdmVyaWZ5UmVpbnNlcnRpb24odCxlLG4sbyl7bGV0IGk9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQobixudWxsKTtyZXR1cm4gbnVsbCE9PWk/dD10aGlzLl9yZWluc2VydEFmdGVyKGksdC5fcHJldixvKTp0LmN1cnJlbnRJbmRleCE9byYmKHQuY3VycmVudEluZGV4PW8sdGhpcy5fYWRkVG9Nb3Zlcyh0LG8pKSx0fV90cnVuY2F0ZSh0KXtmb3IoO251bGwhPT10Oyl7Y29uc3QgZT10Ll9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKSx0PWV9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9X3JlaW5zZXJ0QWZ0ZXIodCxlLG4pe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7Y29uc3Qgbz10Ll9wcmV2UmVtb3ZlZCxpPXQuX25leHRSZW1vdmVkO3JldHVybiBudWxsPT09bz90aGlzLl9yZW1vdmFsc0hlYWQ9aTpvLl9uZXh0UmVtb3ZlZD1pLG51bGw9PT1pP3RoaXMuX3JlbW92YWxzVGFpbD1vOmkuX3ByZXZSZW1vdmVkPW8sdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZFRvTW92ZXModCxuKSx0fV9tb3ZlQWZ0ZXIodCxlLG4pe3JldHVybiB0aGlzLl91bmxpbmsodCksdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZFRvTW92ZXModCxuKSx0fV9hZGRBZnRlcih0LGUsbil7cmV0dXJuIHRoaXMuX2luc2VydEFmdGVyKHQsZSxuKSx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGw9PT10aGlzLl9hZGRpdGlvbnNUYWlsP3RoaXMuX2FkZGl0aW9uc0hlYWQ9dDp0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9dCx0fV9pbnNlcnRBZnRlcih0LGUsbil7Y29uc3Qgbz1udWxsPT09ZT90aGlzLl9pdEhlYWQ6ZS5fbmV4dDtyZXR1cm4gdC5fbmV4dD1vLHQuX3ByZXY9ZSxudWxsPT09bz90aGlzLl9pdFRhaWw9dDpvLl9wcmV2PXQsbnVsbD09PWU/dGhpcy5faXRIZWFkPXQ6ZS5fbmV4dD10LG51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzJiYodGhpcy5fbGlua2VkUmVjb3Jkcz1uZXcgUmcpLHRoaXMuX2xpbmtlZFJlY29yZHMucHV0KHQpLHQuY3VycmVudEluZGV4PW4sdH1fcmVtb3ZlKHQpe3JldHVybiB0aGlzLl9hZGRUb1JlbW92YWxzKHRoaXMuX3VubGluayh0KSl9X3VubGluayh0KXtudWxsIT09dGhpcy5fbGlua2VkUmVjb3JkcyYmdGhpcy5fbGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7Y29uc3QgZT10Ll9wcmV2LG49dC5fbmV4dDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faXRIZWFkPW46ZS5fbmV4dD1uLG51bGw9PT1uP3RoaXMuX2l0VGFpbD1lOm4uX3ByZXY9ZSx0fV9hZGRUb01vdmVzKHQsZSl7cmV0dXJuIHQucHJldmlvdXNJbmRleD09PWV8fCh0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hlYWQ9dDp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD10KSx0fV9hZGRUb1JlbW92YWxzKHQpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRSZWNvcmRzPW5ldyBSZyksdGhpcy5fdW5saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1udWxsLHQuX25leHRSZW1vdmVkPW51bGwsbnVsbD09PXRoaXMuX3JlbW92YWxzVGFpbD8odGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzSGVhZD10LHQuX3ByZXZSZW1vdmVkPW51bGwpOih0Ll9wcmV2UmVtb3ZlZD10aGlzLl9yZW1vdmFsc1RhaWwsdGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9dCksdH1fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKXtyZXR1cm4gdC5pdGVtPWUsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsPT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD90aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXQ6dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPXQsdH19Y2xhc3MgRGd7Y29uc3RydWN0b3IodCxlKXt0aGlzLml0ZW09dCx0aGlzLnRyYWNrQnlJZD1lLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19Y2xhc3MgRWd7Y29uc3RydWN0b3IoKXt0aGlzLl9oZWFkPW51bGwsdGhpcy5fdGFpbD1udWxsfWFkZCh0KXtudWxsPT09dGhpcy5faGVhZD8odGhpcy5faGVhZD10aGlzLl90YWlsPXQsdC5fbmV4dER1cD1udWxsLHQuX3ByZXZEdXA9bnVsbCk6KHRoaXMuX3RhaWwuX25leHREdXA9dCx0Ll9wcmV2RHVwPXRoaXMuX3RhaWwsdC5fbmV4dER1cD1udWxsLHRoaXMuX3RhaWw9dCl9Z2V0KHQsZSl7bGV0IG47Zm9yKG49dGhpcy5faGVhZDtudWxsIT09bjtuPW4uX25leHREdXApaWYoKG51bGw9PT1lfHxlPD1uLmN1cnJlbnRJbmRleCkmJk9iamVjdC5pcyhuLnRyYWNrQnlJZCx0KSlyZXR1cm4gbjtyZXR1cm4gbnVsbH1yZW1vdmUodCl7Y29uc3QgZT10Ll9wcmV2RHVwLG49dC5fbmV4dER1cDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faGVhZD1uOmUuX25leHREdXA9bixudWxsPT09bj90aGlzLl90YWlsPWU6bi5fcHJldkR1cD1lLG51bGw9PT10aGlzLl9oZWFkfX1jbGFzcyBSZ3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9cHV0KHQpe2NvbnN0IGU9dC50cmFja0J5SWQ7bGV0IG49dGhpcy5tYXAuZ2V0KGUpO258fChuPW5ldyBFZyx0aGlzLm1hcC5zZXQoZSxuKSksbi5hZGQodCl9Z2V0KHQsZSl7Y29uc3Qgbj10aGlzLm1hcC5nZXQodCk7cmV0dXJuIG4/bi5nZXQodCxlKTpudWxsfXJlbW92ZSh0KXtjb25zdCBlPXQudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoZSkucmVtb3ZlKHQpJiZ0aGlzLm1hcC5kZWxldGUoZSksdH1nZXQgaXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5tYXAuc2l6ZX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9fWZ1bmN0aW9uIEFnKHQsZSxuKXtjb25zdCBvPXQucHJldmlvdXNJbmRleDtpZihudWxsPT09bylyZXR1cm4gbztsZXQgaT0wO3JldHVybiBuJiZvPG4ubGVuZ3RoJiYoaT1uW29dKSxvK2UraX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgVGd7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHModCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBNYXB8fHpwKHQpfWNyZWF0ZSgpe3JldHVybiBuZXcgTmd9fWNsYXNzIE5ne2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fbWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX1mb3JFYWNoUHJldmlvdXNJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHRQcmV2aW91cyl0KGUpfWZvckVhY2hDaGFuZ2VkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRDaGFuZ2VkKXQoZSl9Zm9yRWFjaEFkZGVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9Zm9yRWFjaFJlbW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09ZTtlPWUuX25leHRSZW1vdmVkKXQoZSl9ZGlmZih0KXtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBNYXB8fHpwKHQpKSl0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHRyeWluZyB0byBkaWZmICcke0dlKHQpfScuIE9ubHkgbWFwcyBhbmQgb2JqZWN0cyBhcmUgYWxsb3dlZGApfWVsc2UgdD1uZXcgTWFwO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sodCl7dGhpcy5fcmVzZXQoKTtsZXQgZT10aGlzLl9tYXBIZWFkO2lmKHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fZm9yRWFjaCh0LCgodCxuKT0+e2lmKGUmJmUua2V5PT09bil0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhlLHQpLHRoaXMuX2FwcGVuZEFmdGVyPWUsZT1lLl9uZXh0O2Vsc2V7Y29uc3Qgbz10aGlzLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShuLHQpO2U9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBlbmQoZSxvKX19KSksZSl7ZS5fcHJldiYmKGUuX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPWU7Zm9yKGxldCB0PWU7bnVsbCE9PXQ7dD10Ll9uZXh0UmVtb3ZlZCl0PT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUodC5rZXkpLHQuX25leHRSZW1vdmVkPXQuX25leHQsdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlLHQuY3VycmVudFZhbHVlPW51bGwsdC5fcHJldj1udWxsLHQuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9X2luc2VydEJlZm9yZU9yQXBwZW5kKHQsZSl7aWYodCl7Y29uc3Qgbj10Ll9wcmV2O3JldHVybiBlLl9uZXh0PXQsZS5fcHJldj1uLHQuX3ByZXY9ZSxuJiYobi5fbmV4dD1lKSx0PT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9ZSksdGhpcy5fYXBwZW5kQWZ0ZXI9dCx0fXJldHVybiB0aGlzLl9hcHBlbmRBZnRlcj8odGhpcy5fYXBwZW5kQWZ0ZXIuX25leHQ9ZSxlLl9wcmV2PXRoaXMuX2FwcGVuZEFmdGVyKTp0aGlzLl9tYXBIZWFkPWUsdGhpcy5fYXBwZW5kQWZ0ZXI9ZSxudWxsfV9nZXRPckNyZWF0ZVJlY29yZEZvcktleSh0LGUpe2lmKHRoaXMuX3JlY29yZHMuaGFzKHQpKXtjb25zdCBuPXRoaXMuX3JlY29yZHMuZ2V0KHQpO3RoaXMuX21heWJlQWRkVG9DaGFuZ2VzKG4sZSk7Y29uc3Qgbz1uLl9wcmV2LGk9bi5fbmV4dDtyZXR1cm4gbyYmKG8uX25leHQ9aSksaSYmKGkuX3ByZXY9byksbi5fbmV4dD1udWxsLG4uX3ByZXY9bnVsbCxufWNvbnN0IG49bmV3IHpnKHQpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldCh0LG4pLG4uY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9BZGRpdGlvbnMobiksbn1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCB0O2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCx0PXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0Q2hhbmdlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT10O3Q9dC5fbmV4dEFkZGVkKXQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0NoYW5nZXModCxlKXtPYmplY3QuaXMoZSx0LmN1cnJlbnRWYWx1ZSl8fCh0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWUsdC5jdXJyZW50VmFsdWU9ZSx0aGlzLl9hZGRUb0NoYW5nZXModCkpfV9hZGRUb0FkZGl0aW9ucyh0KXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9dDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdGhpcy5fYWRkaXRpb25zVGFpbD10KX1fYWRkVG9DaGFuZ2VzKHQpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD10Oih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9dCx0aGlzLl9jaGFuZ2VzVGFpbD10KX1fZm9yRWFjaCh0LGUpe3QgaW5zdGFuY2VvZiBNYXA/dC5mb3JFYWNoKGUpOk9iamVjdC5rZXlzKHQpLmZvckVhY2goKG49PmUodFtuXSxuKSkpfX1jbGFzcyB6Z3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBJZygpe3JldHVybiBuZXcgSGcoW25ldyB3Z10pfWNsYXNzIEhne2NvbnN0cnVjdG9yKHQpe3RoaXMuZmFjdG9yaWVzPXR9c3RhdGljIGNyZWF0ZSh0LGUpe2lmKG51bGwhPWUpe2NvbnN0IG49ZS5mYWN0b3JpZXMuc2xpY2UoKTt0PXQuY29uY2F0KG4pfXJldHVybiBuZXcgSGcodCl9c3RhdGljIGV4dGVuZCh0KXtyZXR1cm57cHJvdmlkZTpIZyx1c2VGYWN0b3J5OmU9PkhnLmNyZWF0ZSh0LGV8fElnKCkpLGRlcHM6W1tIZyxuZXcgRXIsbmV3IFNyXV19fWZpbmQodCl7Y29uc3QgZT10aGlzLmZhY3Rvcmllcy5maW5kKChlPT5lLnN1cHBvcnRzKHQpKSk7aWYobnVsbCE9ZSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICcke3R9JyBvZiB0eXBlICckeyhmdW5jdGlvbiBuKHQpe3JldHVybiB0Lm5hbWV8fHR5cGVvZiB0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQpfSdgKX19ZnVuY3Rpb24gRmcoKXtyZXR1cm4gbmV3IExnKFtuZXcgVGddKX1IZy7JtXByb3Y9TW4oe3Rva2VuOkhnLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6SWd9KTtjbGFzcyBMZ3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmZhY3Rvcmllcz10fXN0YXRpYyBjcmVhdGUodCxlKXtpZihlKXtjb25zdCBuPWUuZmFjdG9yaWVzLnNsaWNlKCk7dD10LmNvbmNhdChuKX1yZXR1cm4gbmV3IExnKHQpfXN0YXRpYyBleHRlbmQodCl7cmV0dXJue3Byb3ZpZGU6TGcsdXNlRmFjdG9yeTplPT5MZy5jcmVhdGUodCxlfHxGZygpKSxkZXBzOltbTGcsbmV3IEVyLG5ldyBTcl1dfX1maW5kKHQpe2NvbnN0IGU9dGhpcy5mYWN0b3JpZXMuZmluZCgoZT0+ZS5zdXBwb3J0cyh0KSkpO2lmKGUpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBhIGRpZmZlciBzdXBwb3J0aW5nIG9iamVjdCAnJHt0fSdgKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBCZyh0LGUsbixvLGk9ITEpe2Zvcig7bnVsbCE9PW47KXtuZ0Rldk1vZGUmJmlhKG4sNjMpO2NvbnN0IGE9ZVtuLmluZGV4XTtpZihudWxsIT09YSYmby5wdXNoKGVpKGEpKSxfbyhhKSlmb3IobGV0IHQ9Ym87dDxhLmxlbmd0aDt0Kyspe2NvbnN0IGU9YVt0XSxuPWVbMV0uZmlyc3RDaGlsZDtudWxsIT09biYmQmcoZVsxXSxlLG4sbyl9Y29uc3Qgcj1uLnR5cGU7aWYoOCZyKUJnKHQsZSxuLmNoaWxkLG8pO2Vsc2UgaWYoMzImcil7Y29uc3QgdD1wbChuLGUpO2xldCBpO2Zvcig7aT10KCk7KW8ucHVzaChpKX1lbHNlIGlmKDE2JnIpe2NvbnN0IHQ9TGwoZSxuKTtpZihBcnJheS5pc0FycmF5KHQpKW8ucHVzaCguLi50KTtlbHNle2NvbnN0IG49bWwoZVsxNl0pO25nRGV2TW9kZSYmSW8obiksQmcoblsxXSxuLHQsbywhMCl9fW49aT9uLnByb2plY3Rpb25OZXh0Om4ubmV4dH1yZXR1cm4gb30KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovTGcuybVwcm92PU1uKHt0b2tlbjpMZyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OkZnfSk7Y2xhc3MgVmd7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9sVmlldz10LHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlldz1lLHRoaXMuX2FwcFJlZj1udWxsLHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfWdldCByb290Tm9kZXMoKXtjb25zdCB0PXRoaXMuX2xWaWV3LGU9dFsxXTtyZXR1cm4gQmcoZSx0LGUuZmlyc3RDaGlsZCxbXSl9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5fbFZpZXdbOF19c2V0IGNvbnRleHQodCl7dGhpcy5fbFZpZXdbOF09dH1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIDI1Nj09KDI1NiZ0aGlzLl9sVmlld1syXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtjb25zdCB0PXRoaXMuX2xWaWV3WzNdO2lmKF9vKHQpKXtjb25zdCBlPXRbOF0sbj1lP2UuaW5kZXhPZih0aGlzKTotMTtuPi0xJiYobmdEZXZNb2RlJiZsbihuLHQuaW5kZXhPZih0aGlzLl9sVmlldyktYm8sIkFuIGF0dGFjaGVkIHZpZXcgc2hvdWxkIGJlIGluIHRoZSBzYW1lIHBvc2l0aW9uIHdpdGhpbiBpdHMgY29udGFpbmVyIGFzIGl0cyBWaWV3UmVmIGluIHRoZSBWSUVXX1JFRlMgYXJyYXkuIikseGwodCxuKSxvcihlLG4pKX10aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMX1PbCh0aGlzLl9sVmlld1sxXSx0aGlzLl9sVmlldyl9b25EZXN0cm95KHQpe3JkKHRoaXMuX2xWaWV3WzFdLHRoaXMuX2xWaWV3LG51bGwsdCl9bWFya0ZvckNoZWNrKCl7RWQodGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3fHx0aGlzLl9sVmlldyl9ZGV0YWNoKCl7dGhpcy5fbFZpZXdbMl0mPS0xMjl9cmVhdHRhY2goKXt0aGlzLl9sVmlld1syXXw9MTI4fWRldGVjdENoYW5nZXMoKXtBZCh0aGlzLl9sVmlld1sxXSx0aGlzLl9sVmlldyx0aGlzLmNvbnRleHQpfWNoZWNrTm9DaGFuZ2VzKCl7IShmdW5jdGlvbiB0KGUsbixvKXtPaSghMCk7dHJ5e0FkKGUsbixvKX1maW5hbGx5e09pKCExKX19KSh0aGlzLl9sVmlld1sxXSx0aGlzLl9sVmlldyx0aGlzLmNvbnRleHQpfWF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpe2lmKHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgRXJyb3IoIlRoaXMgdmlldyBpcyBhbHJlYWR5IGF0dGFjaGVkIGRpcmVjdGx5IHRvIHRoZSBBcHBsaWNhdGlvblJlZiEiKTt0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMH1kZXRhY2hGcm9tQXBwUmVmKCl7dGhpcy5fYXBwUmVmPW51bGwsKGZ1bmN0aW9uIHQoZSxuKXtVbChlLG4sblsxMV0sMixudWxsLG51bGwpfSkodGhpcy5fbFZpZXdbMV0sdGhpcy5fbFZpZXcpfWF0dGFjaFRvQXBwUmVmKHQpe2lmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXRocm93IG5ldyBFcnJvcigiVGhpcyB2aWV3IGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gYSBWaWV3Q29udGFpbmVyISIpO3RoaXMuX2FwcFJlZj10fX1jbGFzcyBqZyBleHRlbmRzIFZne2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuX3ZpZXc9dH1kZXRlY3RDaGFuZ2VzKCl7VGQodGhpcy5fdmlldyl9Y2hlY2tOb0NoYW5nZXMoKXshKGZ1bmN0aW9uIHQoZSl7T2koITApO3RyeXtUZChlKX1maW5hbGx5e09pKCExKX19KSh0aGlzLl92aWV3KX1nZXQgY29udGV4dCgpe3JldHVybiBudWxsfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgVWd7fVVnLl9fTkdfRUxFTUVOVF9JRF9fPWZ1bmN0aW9uIEdnKHQpe3JldHVybihmdW5jdGlvbiBlKHQsbixvKXtpZihNbyh0KSYmIW8pe2NvbnN0IGU9cmkodC5pbmRleCxuKTtyZXR1cm4gbmV3IFZnKGUsZSl9cmV0dXJuIDQ3JnQudHlwZT9uZXcgVmcoblsxNl0sbik6bnVsbH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKShiaSgpLGZpKCksMTY9PSgxNiZ0KSl9O2NvbnN0IFdnPVtuZXcgVGddLFlnPVtuZXcgd2ddLHFnPW5ldyBIZyhZZyksWmc9bmV3IExnKFdnKTtjbGFzcyBYZ3t9WGcuX19OR19FTEVNRU5UX0lEX189ZnVuY3Rpb24gS2coKXtyZXR1cm4gJGcoYmkoKSxmaSgpKX07Y29uc3QgSmc9WGcsUWc9Y2xhc3MgZXh0ZW5kcyBKZ3tjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIoKSx0aGlzLl9kZWNsYXJhdGlvbkxWaWV3PXQsdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyPWUsdGhpcy5lbGVtZW50UmVmPW59Y3JlYXRlRW1iZWRkZWRWaWV3KHQpe2NvbnN0IGU9dGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyLnRWaWV3cyxuPXFjKHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcsZSx0LDE2LG51bGwsZS5kZWNsVE5vZGUsbnVsbCxudWxsLG51bGwsbnVsbCksbz10aGlzLl9kZWNsYXJhdGlvbkxWaWV3W3RoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci5pbmRleF07bmdEZXZNb2RlJiZEbyhvKSxuWzE3XT1vO2NvbnN0IGk9dGhpcy5fZGVjbGFyYXRpb25MVmlld1sxOV07cmV0dXJuIG51bGwhPT1pJiYoblsxOV09aS5jcmVhdGVFbWJlZGRlZFZpZXcoZSkpLEpjKGUsbix0KSxuZXcgVmcobil9fTtmdW5jdGlvbiAkZyh0LGUpe3JldHVybiA0JnQudHlwZT8obmdEZXZNb2RlJiZobih0LnRWaWV3cywiVFZpZXcgbXVzdCBiZSBhbGxvY2F0ZWQiKSxuZXcgUWcoZSx0LGdnKHQsZSkpKTpudWxsfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyB0aHt9Y2xhc3MgZWh7fWVoLl9fTkdfRUxFTUVOVF9JRF9fPWZ1bmN0aW9uIG5oKCl7cmV0dXJuIHNoKGJpKCksZmkoKSl9O2NvbnN0IG9oPWVoLGloPWNsYXNzIGV4dGVuZHMgb2h7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5fbENvbnRhaW5lcj10LHRoaXMuX2hvc3RUTm9kZT1lLHRoaXMuX2hvc3RMVmlldz1ufWdldCBlbGVtZW50KCl7cmV0dXJuIGdnKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgUmEodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9Z2V0IHBhcmVudEluamVjdG9yKCl7Y29uc3QgdD1fYSh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KTtpZihkYSh0KSl7Y29uc3QgZT1tYSh0LHRoaXMuX2hvc3RMVmlldyksbj1wYSh0KTtyZXR1cm4gbmdEZXZNb2RlJiZIbyhlLG4pLG5ldyBSYShlWzFdLmRhdGFbbis4XSxlKX1yZXR1cm4gbmV3IFJhKG51bGwsdGhpcy5faG9zdExWaWV3KX1jbGVhcigpe2Zvcig7dGhpcy5sZW5ndGg+MDspdGhpcy5yZW1vdmUodGhpcy5sZW5ndGgtMSl9Z2V0KHQpe2NvbnN0IGU9YWgodGhpcy5fbENvbnRhaW5lcik7cmV0dXJuIG51bGwhPT1lJiZlW3RdfHxudWxsfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbENvbnRhaW5lci5sZW5ndGgtYm99Y3JlYXRlRW1iZWRkZWRWaWV3KHQsZSxuKXtjb25zdCBvPXQuY3JlYXRlRW1iZWRkZWRWaWV3KGV8fHt9KTtyZXR1cm4gdGhpcy5pbnNlcnQobyxuKSxvfWNyZWF0ZUNvbXBvbmVudCh0LGUsbixvLGkpe2NvbnN0IGE9bnx8dGhpcy5wYXJlbnRJbmplY3RvcjtpZighaSYmbnVsbD09dC5uZ01vZHVsZSYmYSl7Y29uc3QgdD1hLmdldCh0aCxudWxsKTt0JiYoaT10KX1jb25zdCByPXQuY3JlYXRlKGEsbyx2b2lkIDAsaSk7cmV0dXJuIHRoaXMuaW5zZXJ0KHIuaG9zdFZpZXcsZSkscn1pbnNlcnQodCxlKXtjb25zdCBuPXQuX2xWaWV3LG89blsxXTtpZihuZ0Rldk1vZGUmJnQuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGluc2VydCBhIGRlc3Ryb3llZCBWaWV3IGluIGEgVmlld0NvbnRhaW5lciEiKTtpZigoZnVuY3Rpb24gaSh0KXtyZXR1cm4gX28odFszXSl9KShuKSl7Y29uc3QgZT10aGlzLmluZGV4T2YodCk7aWYoLTEhPT1lKXRoaXMuZGV0YWNoKGUpO2Vsc2V7Y29uc3QgZT1uWzNdO25nRGV2TW9kZSYmbG4oX28oZSksITAsIkFuIGF0dGFjaGVkIHZpZXcgc2hvdWxkIGhhdmUgaXRzIFBBUkVOVCBwb2ludCB0byBhIGNvbnRhaW5lci4iKTtjb25zdCBvPW5ldyBpaChlLGVbNl0sZVszXSk7by5kZXRhY2goby5pbmRleE9mKHQpKX19Y29uc3QgYT10aGlzLl9hZGp1c3RJbmRleChlKSxyPXRoaXMuX2xDb250YWluZXI7IShmdW5jdGlvbiBzKHQsZSxuLG8pe25nRGV2TW9kZSYmUm8oZSksbmdEZXZNb2RlJiZEbyhuKTtjb25zdCBpPWJvK28sYT1uLmxlbmd0aDtvPjAmJihuW2ktMV1bNF09ZSksbzxhLWJvPyhlWzRdPW5baV0sbnIobixibytvLGUpKToobi5wdXNoKGUpLGVbNF09bnVsbCksZVszXT1uO2NvbnN0IHI9ZVsxN107bnVsbCE9PXImJm4hPT1yJiYoZnVuY3Rpb24gcyh0LGUpe25nRGV2TW9kZSYmaG4oZSwiTFZpZXcgcmVxdWlyZWQiKSxuZ0Rldk1vZGUmJkRvKHQpO2NvbnN0IG49dFs5XSxvPWVbM107bmdEZXZNb2RlJiZEbyhvKTtjb25zdCBpPW9bM11bMTZdO25nRGV2TW9kZSYmaG4oaSwiTWlzc2luZyBpbnNlcnRlZENvbXBvbmVudExWaWV3Iik7Y29uc3QgYT1lWzE2XTtuZ0Rldk1vZGUmJmhuKGEsIk1pc3NpbmcgZGVjbGFyZWRDb21wb25lbnRMVmlldyIpLGEhPT1pJiYodFsyXT0hMCksbnVsbD09PW4/dFs5XT1bZV06bi5wdXNoKGUpfSkocixlKTtjb25zdCBsPWVbMTldO251bGwhPT1sJiZsLmluc2VydFZpZXcodCksZVsyXXw9MTI4fSkobyxuLHIsYSk7Y29uc3QgbD1CbChhLHIpLGM9blsxMV0sZD1SbChjLHJbN10pO3JldHVybiBudWxsIT09ZCYmKGZ1bmN0aW9uIHAodCxlLG4sbyxpLGEpe29bMF09aSxvWzZdPWUsVWwodCxvLG4sMSxpLGEpfSkobyxyWzZdLGMsbixkLGwpLHQuYXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmKCksbnIocmgociksYSx0KSx0fW1vdmUodCxlKXtpZihuZ0Rldk1vZGUmJnQuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG1vdmUgYSBkZXN0cm95ZWQgVmlldyBpbiBhIFZpZXdDb250YWluZXIhIik7cmV0dXJuIHRoaXMuaW5zZXJ0KHQsZSl9aW5kZXhPZih0KXtjb25zdCBlPWFoKHRoaXMuX2xDb250YWluZXIpO3JldHVybiBudWxsIT09ZT9lLmluZGV4T2YodCk6LTF9cmVtb3ZlKHQpe2NvbnN0IGU9dGhpcy5fYWRqdXN0SW5kZXgodCwtMSksbj14bCh0aGlzLl9sQ29udGFpbmVyLGUpO24mJihvcihyaCh0aGlzLl9sQ29udGFpbmVyKSxlKSxPbChuWzFdLG4pKX1kZXRhY2godCl7Y29uc3QgZT10aGlzLl9hZGp1c3RJbmRleCh0LC0xKSxuPXhsKHRoaXMuX2xDb250YWluZXIsZSk7cmV0dXJuIG4mJm51bGwhPW9yKHJoKHRoaXMuX2xDb250YWluZXIpLGUpP25ldyBWZyhuKTpudWxsfV9hZGp1c3RJbmRleCh0LGU9MCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5sZW5ndGgrZToobmdEZXZNb2RlJiYoZm4odCwtMSxgVmlld1JlZiBpbmRleCBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgJHt0fWApLG1uKHQsdGhpcy5sZW5ndGgrMStlLCJpbmRleCIpKSx0KX19O2Z1bmN0aW9uIGFoKHQpe3JldHVybiB0WzhdfWZ1bmN0aW9uIHJoKHQpe3JldHVybiB0WzhdfHwodFs4XT1bXSl9ZnVuY3Rpb24gc2godCxlKXtsZXQgbjtuZ0Rldk1vZGUmJmlhKHQsMTUpO2NvbnN0IG89ZVt0LmluZGV4XTtpZihfbyhvKSluPW87ZWxzZXtsZXQgaTtpZig4JnQudHlwZSlpPWVpKG8pO2Vsc2V7Y29uc3Qgbj1lWzExXTtuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlckNyZWF0ZUNvbW1lbnQrKyxpPW4uY3JlYXRlQ29tbWVudChuZ0Rldk1vZGU/ImNvbnRhaW5lciI6IiIpO2NvbnN0IG89b2kodCxlKTtTbChuLFJsKG4sbyksaSwoZnVuY3Rpb24gaSh0LGUpe3JldHVybiAkbyh0KT90Lm5leHRTaWJsaW5nKGUpOmUubmV4dFNpYmxpbmd9KShuLG8pLCExKX1lW3QuaW5kZXhdPW49UGQobyxlLGksdCksRGQoZSxuKX1yZXR1cm4gbmV3IGloKG4sdCxlKX1jb25zdCBsaD1uZXcgTWFwO2Z1bmN0aW9uIGNoKHQpe2xldCBlPWxoLmdldCh0KTtyZXR1cm4gZXx8KGU9R2UodCkrIl8iK2xoLnNpemUsbGguc2V0KHQsZSkpLGV9Y2gocnApLGNoKEdkKSxjaCh0aCksCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjaChDZyksY2goaGcpLGNoKGVoKSxjaChYZyksY2goVWcpLGNoKHJwKSxjaChHZCk7Y29uc3QgZGg9e307Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIHBoIGV4dGVuZHMgdWd7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLm5nTW9kdWxlPXR9cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCl7bmdEZXZNb2RlJiYoZnVuY3Rpb24gZSh0LG49IlR5cGUgcGFzc2VkIGluIGlzIG5vdCBDb21wb25lbnRUeXBlLCBpdCBkb2VzIG5vdCBoYXZlICfJtWNtcCcgcHJvcGVydHkuIil7cG8odCl8fGJuKG4pfSkodCk7Y29uc3Qgbj1wbyh0KTtyZXR1cm4gbmV3IGZoKG4sdGhpcy5uZ01vZHVsZSl9fWZ1bmN0aW9uIG1oKHQpe2NvbnN0IGU9W107Zm9yKGxldCBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmZS5wdXNoKHtwcm9wTmFtZTp0W25dLHRlbXBsYXRlTmFtZTpufSk7cmV0dXJuIGV9Y29uc3QgdWg9bmV3IEdhKCJTQ0hFRFVMRVJfVE9LRU4iLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5ubH0pO2NsYXNzIGZoIGV4dGVuZHMgbWd7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPXQsdGhpcy5uZ01vZHVsZT1lLHRoaXMuY29tcG9uZW50VHlwZT10LnR5cGUsdGhpcy5zZWxlY3Rvcj0oZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5tYXAoaWMpLmpvaW4oIiwiKX0pKHQuc2VsZWN0b3JzKSx0aGlzLm5nQ29udGVudFNlbGVjdG9ycz10Lm5nQ29udGVudFNlbGVjdG9ycz90Lm5nQ29udGVudFNlbGVjdG9yczpbXSx0aGlzLmlzQm91bmRUb01vZHVsZT0hIWV9Z2V0IGlucHV0cygpe3JldHVybiBtaCh0aGlzLmNvbXBvbmVudERlZi5pbnB1dHMpfWdldCBvdXRwdXRzKCl7cmV0dXJuIG1oKHRoaXMuY29tcG9uZW50RGVmLm91dHB1dHMpfWNyZWF0ZSh0LGUsbixvKXtjb25zdCBpPShvPW98fHRoaXMubmdNb2R1bGUpPyhmdW5jdGlvbiBhKHQsZSl7cmV0dXJue2dldDoobixvLGkpPT57Y29uc3QgYT10LmdldChuLGRoLGkpO3JldHVybiBhIT09ZGh8fG89PT1kaD9hOmUuZ2V0KG4sbyxpKX19fSkodCxvLmluamVjdG9yKTp0LHI9aS5nZXQoX2csdGkpLHM9aS5nZXQoeGcsbnVsbCksbD1yLmNyZWF0ZVJlbmRlcmVyKG51bGwsdGhpcy5jb21wb25lbnREZWYpLGM9dGhpcy5jb21wb25lbnREZWYuc2VsZWN0b3JzWzBdWzBdfHwiZGl2IixkPW4/KGZ1bmN0aW9uIHAodCxlLG4pe2lmKCRvKHQpKXJldHVybiB0LnNlbGVjdFJvb3RFbGVtZW50KGUsbj09PUhuLlNoYWRvd0RvbSk7bGV0IG89InN0cmluZyI9PXR5cGVvZiBlP3QucXVlcnlTZWxlY3RvcihlKTplO3JldHVybiBuZ0Rldk1vZGUmJihmdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3coZnVuY3Rpb24gbih0LGUpe3JldHVybiBuZXcgRXJyb3IoYFJlbmRlcmVyOiAke3R9IFske3RuKGUpfV1gKX0pKCJzdHJpbmciPT10eXBlb2YgZT8iSG9zdCBub2RlIHdpdGggc2VsZWN0b3Igbm90IGZvdW5kOiI6Ikhvc3Qgbm9kZSBpcyByZXF1aXJlZDoiLGUpfSkobyxlKSxvLnRleHRDb250ZW50PSIiLG99KShsLG4sdGhpcy5jb21wb25lbnREZWYuZW5jYXBzdWxhdGlvbik6TWwoci5jcmVhdGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmKSxjLChmdW5jdGlvbiBtKHQpe2NvbnN0IGU9dC50b0xvd2VyQ2FzZSgpO3JldHVybiJzdmciPT09ZT9abzoibWF0aCI9PT1lP1hvOm51bGx9KShjKSksdT10aGlzLmNvbXBvbmVudERlZi5vblB1c2g/NTc2OjUyOCxmPShmdW5jdGlvbiBnKHQsZSl7cmV0dXJue2NvbXBvbmVudHM6W10sc2NoZWR1bGVyOnR8fG5sLGNsZWFuOklkLHBsYXllckhhbmRsZXI6ZXx8bnVsbCxmbGFnczowfX0pKCksaD1hZCgwLG51bGwsbnVsbCwxLDAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSxiPXFjKG51bGwsaCxmLHUsbnVsbCxudWxsLHIsbCxzLGkpO2xldCB5LF87RmkoYik7dHJ5e2NvbnN0IHQ9KGZ1bmN0aW9uIG8odCxlLG4saSxhLHIpe2NvbnN0IHM9blsxXTtuZ0Rldk1vZGUmJl9uKG4sMjApLG5bMjBdPXQ7Y29uc3QgbD1aYyhzLDIwLDIsIiNob3N0IixudWxsKSxjPWwubWVyZ2VkQXR0cnM9ZS5ob3N0QXR0cnM7bnVsbCE9PWMmJihVZChsLGMsITApLG51bGwhPT10JiYoYWEoYSx0LGMpLG51bGwhPT1sLmNsYXNzZXMmJllsKGEsdCxsLmNsYXNzZXMpLG51bGwhPT1sLnN0eWxlcyYmV2woYSx0LGwuc3R5bGVzKSkpO2NvbnN0IGQ9aS5jcmVhdGVSZW5kZXJlcih0LGUpLHA9cWMobixpZChlKSxudWxsLGUub25QdXNoPzY0OjE2LG5bMjBdLGwsaSxkLHJ8fG51bGwsbnVsbCk7cmV0dXJuIHMuZmlyc3RDcmVhdGVQYXNzJiYoQ2EoaGEobCxuKSxzLGUudHlwZSksZ2QocyxsKSxiZChsLG4ubGVuZ3RoLDEpKSxEZChuLHApLG5bMjBdPXB9KShkLHRoaXMuY29tcG9uZW50RGVmLGIscixsKTtpZihkKWlmKG4pYWEobCxkLFsibmctdmVyc2lvbiIsUGcuZnVsbF0pO2Vsc2V7Y29uc3R7YXR0cnM6dCxjbGFzc2VzOmV9PShmdW5jdGlvbiBuKHQpe2NvbnN0IGU9W10sbj1bXTtsZXQgbz0xLGk9Mjtmb3IoO288dC5sZW5ndGg7KXtsZXQgYT10W29dO2lmKCJzdHJpbmciPT10eXBlb2YgYSkyPT09aT8iIiE9PWEmJmUucHVzaChhLHRbKytvXSk6OD09PWkmJm4ucHVzaChhKTtlbHNle2lmKCEkbChpKSlicmVhaztpPWF9bysrfXJldHVybnthdHRyczplLGNsYXNzZXM6bn19KSh0aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF0pO3QmJmFhKGwsZCx0KSxlJiZlLmxlbmd0aD4wJiZZbChsLGQsZS5qb2luKCIgIikpfWlmKF89aWkoaCxnbyksdm9pZCAwIT09ZSl7Y29uc3QgdD1fLnByb2plY3Rpb249W107Zm9yKGxldCBuPTA7bjx0aGlzLm5nQ29udGVudFNlbGVjdG9ycy5sZW5ndGg7bisrKXtjb25zdCBvPWVbbl07dC5wdXNoKG51bGwhPW8/QXJyYXkuZnJvbShvKTpudWxsKX19eT0oZnVuY3Rpb24gaSh0LGUsbixvLGEpe2NvbnN0IHI9blsxXSxzPShmdW5jdGlvbiBsKHQsZSxuKXtjb25zdCBvPWJpKCk7aWYodC5maXJzdENyZWF0ZVBhc3Mpe24ucHJvdmlkZXJzUmVzb2x2ZXImJm4ucHJvdmlkZXJzUmVzb2x2ZXIobik7Y29uc3QgaT1LYyh0LGUsMSxudWxsKTtuZ0Rldk1vZGUmJmxuKGksby5kaXJlY3RpdmVTdGFydCwiQmVjYXVzZSB0aGlzIGlzIGEgcm9vdCBjb21wb25lbnQgdGhlIGFsbG9jYXRlZCBleHBhbmRvIHNob3VsZCBtYXRjaCB0aGUgVE5vZGUgY29tcG9uZW50LiIpLHlkKHQsbyxlLGksbil9Y29uc3QgaT1TYShlLHQsby5kaXJlY3RpdmVTdGFydCxvKTtMcyhpLGUpO2NvbnN0IGE9b2kobyxlKTtyZXR1cm4gYSYmTHMoYSxlKSxpfSkocixuLGUpO2lmKG8uY29tcG9uZW50cy5wdXNoKHMpLHRbOF09cyxhJiZhLmZvckVhY2goKHQ9PnQocyxlKSkpLGUuY29udGVudFF1ZXJpZXMpe2NvbnN0IHQ9YmkoKTtuZ0Rldk1vZGUmJmhuKHQsIlROb2RlIGV4cGVjdGVkIiksZS5jb250ZW50UXVlcmllcygxLHMsdC5kaXJlY3RpdmVTdGFydCl9Y29uc3QgYz1iaSgpO3JldHVybiBuZ0Rldk1vZGUmJmhuKGMsInROb2RlIHNob3VsZCBoYXZlIGJlZW4gYWxyZWFkeSBjcmVhdGVkIiksIXIuZmlyc3RDcmVhdGVQYXNzfHxudWxsPT09ZS5ob3N0QmluZGluZ3MmJm51bGw9PT1lLmhvc3RBdHRyc3x8KFdpKGMuaW5kZXgpLHVkKG5bMV0sYywwLGMuZGlyZWN0aXZlU3RhcnQsYy5kaXJlY3RpdmVFbmQsZSksZmQoZSxzKSksc30pKHQsdGhpcy5jb21wb25lbnREZWYsYixmLFtNcF0pLEpjKGgsYixudWxsKX1maW5hbGx5e1VpKCl9cmV0dXJuIG5ldyBnaCh0aGlzLmNvbXBvbmVudFR5cGUseSxnZyhfLGIpLGIsXyl9fW5ldyBwaDtjbGFzcyBnaCBleHRlbmRzIGNsYXNze317Y29uc3RydWN0b3IodCxlLG4sbyxpKXtzdXBlcigpLHRoaXMubG9jYXRpb249bix0aGlzLl9yb290TFZpZXc9byx0aGlzLl90Tm9kZT1pLHRoaXMuaW5zdGFuY2U9ZSx0aGlzLmhvc3RWaWV3PXRoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9bmV3IGpnKG8pLHRoaXMuY29tcG9uZW50VHlwZT10fWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgUmEodGhpcy5fdE5vZGUsdGhpcy5fcm9vdExWaWV3KX1kZXN0cm95KCl7dGhpcy5ob3N0Vmlldy5kZXN0cm95KCl9b25EZXN0cm95KHQpe3RoaXMuaG9zdFZpZXcub25EZXN0cm95KHQpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gaGgodCxlLG4sbyl7cmV0dXJuIE5uKCgoKT0+e2NvbnN0IGk9dDtudWxsIT09ZSYmKGkuaGFzT3duUHJvcGVydHkoImRlY29yYXRvcnMiKSYmdm9pZCAwIT09aS5kZWNvcmF0b3JzP2kuZGVjb3JhdG9ycy5wdXNoKC4uLmUpOmkuZGVjb3JhdG9ycz1lKSxudWxsIT09biYmKGkuY3RvclBhcmFtZXRlcnM9biksbnVsbCE9PW8mJihpLnByb3BEZWNvcmF0b3JzPWkuaGFzT3duUHJvcGVydHkoInByb3BEZWNvcmF0b3JzIikmJnZvaWQgMCE9PWkucHJvcERlY29yYXRvcnM/T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkucHJvcERlY29yYXRvcnMpLG8pOm8pfSkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBiaD1uZXcgTWFwOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgeWggZXh0ZW5kcyB0aHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz1bXSx0aGlzLmluamVjdG9yPXRoaXMsdGhpcy5kZXN0cm95Q2JzPVtdLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBwaCh0aGlzKTtjb25zdCBuPWZvKHQpO25nRGV2TW9kZSYmaG4obixgTmdNb2R1bGUgJyR7R2UodCl9JyBpcyBub3QgYSBzdWJ0eXBlIG9mICdOZ01vZHVsZVR5cGUnLmApO2NvbnN0IG89KGZ1bmN0aW9uIGkodCl7cmV0dXJuIHRbS25dfHxudWxsfSkodCk7byYmWHUobyksdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz1ybChuLmJvb3RzdHJhcCksdGhpcy5fcjNJbmplY3Rvcj1KZCh0LGUsW3twcm92aWRlOnRoLHVzZVZhbHVlOnRoaXN9LHtwcm92aWRlOnVnLHVzZVZhbHVlOnRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfV0sR2UodCkpLHRoaXMuX3IzSW5qZWN0b3IuX3Jlc29sdmVJbmplY3RvckRlZlR5cGVzKCksdGhpcy5pbnN0YW5jZT10aGlzLmdldCh0KX1nZXQodCxlPXJwLlRIUk9XX0lGX05PVF9GT1VORCxuPUVuLkRlZmF1bHQpe3JldHVybiB0PT09cnB8fHQ9PT10aHx8dD09PUdkP3RoaXM6dGhpcy5fcjNJbmplY3Rvci5nZXQodCxlLG4pfWRlc3Ryb3koKXtuZ0Rldk1vZGUmJmhuKHRoaXMuZGVzdHJveUNicywiTmdNb2R1bGUgYWxyZWFkeSBkZXN0cm95ZWQiKTtjb25zdCB0PXRoaXMuX3IzSW5qZWN0b3I7IXQuZGVzdHJveWVkJiZ0LmRlc3Ryb3koKSx0aGlzLmRlc3Ryb3lDYnMuZm9yRWFjaCgodD0+dCgpKSksdGhpcy5kZXN0cm95Q2JzPW51bGx9b25EZXN0cm95KHQpe25nRGV2TW9kZSYmaG4odGhpcy5kZXN0cm95Q2JzLCJOZ01vZHVsZSBhbHJlYWR5IGRlc3Ryb3llZCIpLHRoaXMuZGVzdHJveUNicy5wdXNoKHQpfX1jbGFzcyBfaCBleHRlbmRzIGNsYXNze30KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICove2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5tb2R1bGVUeXBlPXQsbnVsbCE9PWZvKHQpJiYoZnVuY3Rpb24gZSh0KXtjb25zdCBlPW5ldyBTZXQ7IShmdW5jdGlvbiB0KG4pe2NvbnN0IG89Zm8obiwhMCksaT1vLmlkO251bGwhPT1pJiYoKGZ1bmN0aW9uIGEodCxlLG4pe2lmKGUmJmUhPT1uKXRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIG1vZHVsZSByZWdpc3RlcmVkIGZvciAke3R9IC0gJHtHZShlKX0gdnMgJHtHZShlLm5hbWUpfWApfSkoaSxiaC5nZXQoaSksbiksYmguc2V0KGksbikpO2NvbnN0IHI9cmwoby5pbXBvcnRzKTtmb3IoY29uc3QgbiBvZiByKWUuaGFzKG4pfHwoZS5hZGQobiksdChuKSl9KSh0KX0pKHQpfWNyZWF0ZSh0KXtyZXR1cm4gbmV3IHloKHRoaXMubW9kdWxlVHlwZSx0KX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIENoKHQsZSxuKXtjb25zdCBvPVBpKCkrdCxpPWZpKCk7cmV0dXJuIGlbb109PT1hYz9JcChpLG8sbj9lLmNhbGwobik6ZSgpKTpIcChpLG8pfWZ1bmN0aW9uIE1oKHQsZSxuLG8pe3JldHVybiBraChmaSgpLFBpKCksdCxlLG4sbyl9ZnVuY3Rpb24gdmgodCxlLG4sbyxpKXtyZXR1cm4gU2goZmkoKSxQaSgpLHQsZSxuLG8saSl9ZnVuY3Rpb24geGgodCxlLG4sbyxpLGEpe3JldHVybiBEaChmaSgpLFBpKCksdCxlLG4sbyxpLGEpfWZ1bmN0aW9uIE9oKHQsZSxuLG8saSxhLHIpe3JldHVybiBFaChmaSgpLFBpKCksdCxlLG4sbyxpLGEscil9ZnVuY3Rpb24gUGgodCxlLG4sbyxpLGEscixzKXtjb25zdCBsPVBpKCkrdCxjPWZpKCksZD1WcChjLGwsbixvLGksYSk7cmV0dXJuIEZwKGMsbCs0LHIpfHxkP0lwKGMsbCs1LHM/ZS5jYWxsKHMsbixvLGksYSxyKTplKG4sbyxpLGEscikpOkhwKGMsbCs1KX1mdW5jdGlvbiB3aCh0LGUpe25nRGV2TW9kZSYmX24odCxlKTtjb25zdCBuPXRbZV07cmV0dXJuIG49PT1hYz92b2lkIDA6bn1mdW5jdGlvbiBraCh0LGUsbixvLGksYSl7Y29uc3Qgcj1lK247cmV0dXJuIEZwKHQscixpKT9JcCh0LHIrMSxhP28uY2FsbChhLGkpOm8oaSkpOndoKHQscisxKX1mdW5jdGlvbiBTaCh0LGUsbixvLGksYSxyKXtjb25zdCBzPWUrbjtyZXR1cm4gTHAodCxzLGksYSk/SXAodCxzKzIscj9vLmNhbGwocixpLGEpOm8oaSxhKSk6d2godCxzKzIpfWZ1bmN0aW9uIERoKHQsZSxuLG8saSxhLHIscyl7Y29uc3QgbD1lK247cmV0dXJuIEJwKHQsbCxpLGEscik/SXAodCxsKzMscz9vLmNhbGwocyxpLGEscik6byhpLGEscikpOndoKHQsbCszKX1mdW5jdGlvbiBFaCh0LGUsbixvLGksYSxyLHMsbCl7Y29uc3QgYz1lK247cmV0dXJuIFZwKHQsYyxpLGEscixzKT9JcCh0LGMrNCxsP28uY2FsbChsLGksYSxyLHMpOm8oaSxhLHIscykpOndoKHQsYys0KX1mdW5jdGlvbiBSaCh0LGUsbixvLGksYSl7bGV0IHI9ZStuLHM9ITE7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspRnAodCxyKyssaVtlXSkmJihzPSEwKTtyZXR1cm4gcz9JcCh0LHIsby5hcHBseShhLGkpKTp3aCh0LHIpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBBaCh0LGUpe2NvbnN0IG49Z2koKTtsZXQgbztjb25zdCBpPXQrZ287bi5maXJzdENyZWF0ZVBhc3M/KG89KGZ1bmN0aW9uIGEodCxlKXtpZihlKWZvcihsZXQgbj1lLmxlbmd0aC0xO24+PTA7bi0tKXtjb25zdCBvPWVbbl07aWYodD09PW8ubmFtZSlyZXR1cm4gb310aHJvdyBuZXcgS2UoIjMwMiIsYFRoZSBwaXBlICcke3R9JyBjb3VsZCBub3QgYmUgZm91bmQhYCl9KShlLG4ucGlwZVJlZ2lzdHJ5KSxuLmRhdGFbaV09byxvLm9uRGVzdHJveSYmKG4uZGVzdHJveUhvb2tzfHwobi5kZXN0cm95SG9va3M9W10pKS5wdXNoKGksby5vbkRlc3Ryb3kpKTpvPW4uZGF0YVtpXTtjb25zdCByPW8uZmFjdG9yeXx8KG8uZmFjdG9yeT1GbyhvLnR5cGUsITApKSxzPUFuKFNtKTt0cnl7Y29uc3QgdD1mYSghMSksZT1yKCk7cmV0dXJuIGZhKHQpLChmdW5jdGlvbiBsKHQsZSxuLG8pe24+PXQuZGF0YS5sZW5ndGgmJih0LmRhdGFbbl09bnVsbCx0LmJsdWVwcmludFtuXT1udWxsKSxlW25dPW99KShuLGZpKCksaSxlKSxlfWZpbmFsbHl7QW4ocyl9fWZ1bmN0aW9uIFRoKHQsZSxuKXtjb25zdCBvPXQrZ28saT1maSgpLGE9YWkoaSxvKTtyZXR1cm4gSGgoaSxJaChpLG8pP2toKGksUGkoKSxlLGEudHJhbnNmb3JtLG4sYSk6YS50cmFuc2Zvcm0obikpfWZ1bmN0aW9uIE5oKHQsZSxuLG8pe2NvbnN0IGk9dCtnbyxhPWZpKCkscj1haShhLGkpO3JldHVybiBIaChhLEloKGEsaSk/U2goYSxQaSgpLGUsci50cmFuc2Zvcm0sbixvLHIpOnIudHJhbnNmb3JtKG4sbykpfWZ1bmN0aW9uIHpoKHQsZSxuLG8saSl7Y29uc3QgYT10K2dvLHI9ZmkoKSxzPWFpKHIsYSk7cmV0dXJuIEhoKHIsSWgocixhKT9EaChyLFBpKCksZSxzLnRyYW5zZm9ybSxuLG8saSxzKTpzLnRyYW5zZm9ybShuLG8saSkpfWZ1bmN0aW9uIEloKHQsZSl7cmV0dXJuIHRbMV0uZGF0YVtlXS5wdXJlfWZ1bmN0aW9uIEhoKHQsZSl7cmV0dXJuIFRwLmlzV3JhcHBlZChlKSYmKGU9VHAudW53cmFwKGUpLHRbd2koKV09YWMpLGV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEZoKHQpe3JldHVybiBlPT57c2V0VGltZW91dCh0LHZvaWQgMCxlKX19Y29uc3QgTGg9Y2xhc3MgZXh0ZW5kcyBJe2NvbnN0cnVjdG9yKHQ9ITEpe3N1cGVyKCksdGhpcy5fX2lzQXN5bmM9dH1lbWl0KHQpe3N1cGVyLm5leHQodCl9c3Vic2NyaWJlKHQsZSxuKXt2YXIgbyxpLGE7bGV0IHI9dCxzPWV8fCgoKT0+bnVsbCksbD1uO2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdCl7Y29uc3QgZT10O3I9bnVsbD09PShvPWUubmV4dCl8fHZvaWQgMD09PW8/dm9pZCAwOm8uYmluZChlKSxzPW51bGw9PT0oaT1lLmVycm9yKXx8dm9pZCAwPT09aT92b2lkIDA6aS5iaW5kKGUpLGw9bnVsbD09PShhPWUuY29tcGxldGUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmJpbmQoZSl9dGhpcy5fX2lzQXN5bmMmJihzPUZoKHMpLHImJihyPUZoKHIpKSxsJiYobD1GaChsKSkpO2NvbnN0IGM9c3VwZXIuc3Vic2NyaWJlKHtuZXh0OnIsZXJyb3I6cyxjb21wbGV0ZTpsfSk7cmV0dXJuIHQgaW5zdGFuY2VvZiBtJiZ0LmFkZChjKSxjfX07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEJoKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbUnAoKV0oKX1jbGFzcyBWaHtjb25zdHJ1Y3Rvcih0PSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT10LHRoaXMuZGlydHk9ITAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5sYXN0PXZvaWQgMDtjb25zdCBlPVJwKCksbj1WaC5wcm90b3R5cGU7bltlXXx8KG5bZV09QmgpfWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXN8fCh0aGlzLl9jaGFuZ2VzPW5ldyBMaCl9Z2V0KHQpe3JldHVybiB0aGlzLl9yZXN1bHRzW3RdfW1hcCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5tYXAodCl9ZmlsdGVyKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbHRlcih0KX1maW5kKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbmQodCl9cmVkdWNlKHQsZSl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMucmVkdWNlKHQsZSl9Zm9yRWFjaCh0KXt0aGlzLl9yZXN1bHRzLmZvckVhY2godCl9c29tZSh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zb21lKHQpfXRvQXJyYXkoKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zbGljZSgpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMudG9TdHJpbmcoKX1yZXNldCh0LGUpe2NvbnN0IG49dGhpcztuLmRpcnR5PSExO2NvbnN0IG89dHIodCk7KHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hKGZ1bmN0aW9uIGkodCxlLG4pe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBvPTA7bzx0Lmxlbmd0aDtvKyspe2xldCBpPXRbb10sYT1lW29dO2lmKG4mJihpPW4oaSksYT1uKGEpKSxhIT09aSlyZXR1cm4hMX1yZXR1cm4hMH0pKG4uX3Jlc3VsdHMsbyxlKSkmJihuLl9yZXN1bHRzPW8sbi5sZW5ndGg9by5sZW5ndGgsbi5sYXN0PW9bdGhpcy5sZW5ndGgtMV0sbi5maXJzdD1vWzBdKX1ub3RpZnlPbkNoYW5nZXMoKXshdGhpcy5fY2hhbmdlc3x8IXRoaXMuX2NoYW5nZXNEZXRlY3RlZCYmdGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHl8fHRoaXMuX2NoYW5nZXMuZW1pdCh0aGlzKX1zZXREaXJ0eSgpe3RoaXMuZGlydHk9ITB9ZGVzdHJveSgpe3RoaXMuY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlcy51bnN1YnNjcmliZSgpfX1jbGFzcyBqaHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnF1ZXJ5TGlzdD10LHRoaXMubWF0Y2hlcz1udWxsfWNsb25lKCl7cmV0dXJuIG5ldyBqaCh0aGlzLnF1ZXJ5TGlzdCl9c2V0RGlydHkoKXt0aGlzLnF1ZXJ5TGlzdC5zZXREaXJ0eSgpfX1jbGFzcyBVaHtjb25zdHJ1Y3Rvcih0PVtdKXt0aGlzLnF1ZXJpZXM9dH1jcmVhdGVFbWJlZGRlZFZpZXcodCl7Y29uc3QgZT10LnF1ZXJpZXM7aWYobnVsbCE9PWUpe2NvbnN0IG49bnVsbCE9PXQuY29udGVudFF1ZXJpZXM/dC5jb250ZW50UXVlcmllc1swXTplLmxlbmd0aCxvPVtdO2ZvcihsZXQgdD0wO3Q8bjt0Kyspe2NvbnN0IG49ZS5nZXRCeUluZGV4KHQpO28ucHVzaCh0aGlzLnF1ZXJpZXNbbi5pbmRleEluRGVjbGFyYXRpb25WaWV3XS5jbG9uZSgpKX1yZXR1cm4gbmV3IFVoKG8pfXJldHVybiBudWxsfWluc2VydFZpZXcodCl7dGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KX1kZXRhY2hWaWV3KHQpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXModCl9ZGlydHlRdWVyaWVzV2l0aE1hdGNoZXModCl7Zm9yKGxldCBlPTA7ZTx0aGlzLnF1ZXJpZXMubGVuZ3RoO2UrKyludWxsIT09b2IodCxlKS5tYXRjaGVzJiZ0aGlzLnF1ZXJpZXNbZV0uc2V0RGlydHkoKX19Y2xhc3MgR2h7Y29uc3RydWN0b3IodCxlLG49bnVsbCl7dGhpcy5wcmVkaWNhdGU9dCx0aGlzLmZsYWdzPWUsdGhpcy5yZWFkPW59fWNsYXNzIFdoe2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMucXVlcmllcz10fWVsZW1lbnRTdGFydCh0LGUpe25nRGV2TW9kZSYmQW8odCwiUXVlcmllcyBzaG91bGQgY29sbGVjdCByZXN1bHRzIG9uIHRoZSBmaXJzdCB0ZW1wbGF0ZSBwYXNzIG9ubHkiKTtmb3IobGV0IG49MDtuPHRoaXMucXVlcmllcy5sZW5ndGg7bisrKXRoaXMucXVlcmllc1tuXS5lbGVtZW50U3RhcnQodCxlKX1lbGVtZW50RW5kKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5xdWVyaWVzLmxlbmd0aDtlKyspdGhpcy5xdWVyaWVzW2VdLmVsZW1lbnRFbmQodCl9ZW1iZWRkZWRUVmlldyh0KXtsZXQgZT1udWxsO2ZvcihsZXQgbj0wO248dGhpcy5sZW5ndGg7bisrKXtjb25zdCBvPW51bGwhPT1lP2UubGVuZ3RoOjAsaT10aGlzLmdldEJ5SW5kZXgobikuZW1iZWRkZWRUVmlldyh0LG8pO2kmJihpLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9bixudWxsIT09ZT9lLnB1c2goaSk6ZT1baV0pfXJldHVybiBudWxsIT09ZT9uZXcgV2goZSk6bnVsbH10ZW1wbGF0ZSh0LGUpe25nRGV2TW9kZSYmQW8odCwiUXVlcmllcyBzaG91bGQgY29sbGVjdCByZXN1bHRzIG9uIHRoZSBmaXJzdCB0ZW1wbGF0ZSBwYXNzIG9ubHkiKTtmb3IobGV0IG49MDtuPHRoaXMucXVlcmllcy5sZW5ndGg7bisrKXRoaXMucXVlcmllc1tuXS50ZW1wbGF0ZSh0LGUpfWdldEJ5SW5kZXgodCl7cmV0dXJuIG5nRGV2TW9kZSYmX24odGhpcy5xdWVyaWVzLHQpLHRoaXMucXVlcmllc1t0XX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMucXVlcmllcy5sZW5ndGh9dHJhY2sodCl7dGhpcy5xdWVyaWVzLnB1c2godCl9fWNsYXNzIFloe2NvbnN0cnVjdG9yKHQsZT0tMSl7dGhpcy5tZXRhZGF0YT10LHRoaXMubWF0Y2hlcz1udWxsLHRoaXMuaW5kZXhJbkRlY2xhcmF0aW9uVmlldz0tMSx0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSExLHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSEwLHRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PWV9ZWxlbWVudFN0YXJ0KHQsZSl7dGhpcy5pc0FwcGx5aW5nVG9Ob2RlKGUpJiZ0aGlzLm1hdGNoVE5vZGUodCxlKX1lbGVtZW50RW5kKHQpe3RoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PT09dC5pbmRleCYmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSExKX10ZW1wbGF0ZSh0LGUpe3RoaXMuZWxlbWVudFN0YXJ0KHQsZSl9ZW1iZWRkZWRUVmlldyh0LGUpe3JldHVybiB0aGlzLmlzQXBwbHlpbmdUb05vZGUodCk/KHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITAsdGhpcy5hZGRNYXRjaCgtdC5pbmRleCxlKSxuZXcgWWgodGhpcy5tZXRhZGF0YSkpOm51bGx9aXNBcHBseWluZ1RvTm9kZSh0KXtpZih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZSYmMSE9KDEmdGhpcy5tZXRhZGF0YS5mbGFncykpe2NvbnN0IGU9dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg7bGV0IG49dC5wYXJlbnQ7Zm9yKDtudWxsIT09biYmOCZuLnR5cGUmJm4uaW5kZXghPT1lOyluPW4ucGFyZW50O3JldHVybiBlPT09KG51bGwhPT1uP24uaW5kZXg6LTEpfXJldHVybiB0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZX1tYXRjaFROb2RlKHQsZSl7Y29uc3Qgbj10aGlzLm1ldGFkYXRhLnByZWRpY2F0ZTtpZihBcnJheS5pc0FycmF5KG4pKWZvcihsZXQgbz0wO288bi5sZW5ndGg7bysrKXtjb25zdCBpPW5bb107dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLHFoKGUsaSkpLHRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHQsZSxrYShlLHQsaSwhMSwhMSkpfWVsc2Ugbj09PVhnPzQmZS50eXBlJiZ0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsLTEpOnRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHQsZSxrYShlLHQsbiwhMSwhMSkpfW1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsbil7aWYobnVsbCE9PW4pe2NvbnN0IG89dGhpcy5tZXRhZGF0YS5yZWFkO2lmKG51bGwhPT1vKWlmKG89PT1oZ3x8bz09PWVofHxvPT09WGcmJjQmZS50eXBlKXRoaXMuYWRkTWF0Y2goZS5pbmRleCwtMik7ZWxzZXtjb25zdCBuPWthKGUsdCxvLCExLCExKTtudWxsIT09biYmdGhpcy5hZGRNYXRjaChlLmluZGV4LG4pfWVsc2UgdGhpcy5hZGRNYXRjaChlLmluZGV4LG4pfX1hZGRNYXRjaCh0LGUpe251bGw9PT10aGlzLm1hdGNoZXM/dGhpcy5tYXRjaGVzPVt0LGVdOnRoaXMubWF0Y2hlcy5wdXNoKHQsZSl9fWZ1bmN0aW9uIHFoKHQsZSl7Y29uc3Qgbj10LmxvY2FsTmFtZXM7aWYobnVsbCE9PW4pZm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kz0yKWlmKG5bdF09PT1lKXJldHVybiBuW3QrMV07cmV0dXJuIG51bGx9ZnVuY3Rpb24gWmgodCxlLG4sbyl7cmV0dXJuLTE9PT1uPyhmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIDExJnQudHlwZT9nZyh0LGUpOjQmdC50eXBlPyRnKHQsZSk6bnVsbH0pKGUsdCk6LTI9PT1uPyhmdW5jdGlvbiBhKHQsZSxuKXtyZXR1cm4gbj09PWhnP2dnKGUsdCk6bj09PVhnPyRnKGUsdCk6bj09PWVoPyhuZ0Rldk1vZGUmJmlhKGUsMTUpLHNoKGUsdCkpOnZvaWQobmdEZXZNb2RlJiZibihgU3BlY2lhbCB0b2tlbiB0byByZWFkIHNob3VsZCBiZSBvbmUgb2YgRWxlbWVudFJlZiwgVGVtcGxhdGVSZWYgb3IgVmlld0NvbnRhaW5lclJlZiBidXQgZ290ICR7R2Uobil9LmApKX0pKHQsZSxvKTpTYSh0LHRbMV0sbixlKX1mdW5jdGlvbiBYaCh0LGUsbixvKXtjb25zdCBpPWVbMTldLnF1ZXJpZXNbb107aWYobnVsbD09PWkubWF0Y2hlcyl7Y29uc3Qgbz10LmRhdGEsYT1uLm1hdGNoZXMscj1bXTtmb3IobGV0IHQ9MDt0PGEubGVuZ3RoO3QrPTIpe2NvbnN0IGk9YVt0XTtpPDA/ci5wdXNoKG51bGwpOihuZ0Rldk1vZGUmJl9uKG8saSksci5wdXNoKFpoKGUsb1tpXSxhW3QrMV0sbi5tZXRhZGF0YS5yZWFkKSkpfWkubWF0Y2hlcz1yfXJldHVybiBpLm1hdGNoZXN9ZnVuY3Rpb24gS2godCxlLG4sbyl7Y29uc3QgaT10LnF1ZXJpZXMuZ2V0QnlJbmRleChuKSxhPWkubWF0Y2hlcztpZihudWxsIT09YSl7Y29uc3Qgcj1YaCh0LGUsaSxuKTtmb3IobGV0IHQ9MDt0PGEubGVuZ3RoO3QrPTIpe2NvbnN0IG49YVt0XTtpZihuPjApby5wdXNoKHJbdC8yXSk7ZWxzZXtjb25zdCBpPWFbdCsxXSxyPWVbLW5dO25nRGV2TW9kZSYmRG8ocik7Zm9yKGxldCB0PWJvO3Q8ci5sZW5ndGg7dCsrKXtjb25zdCBlPXJbdF07ZVsxN109PT1lWzNdJiZLaChlWzFdLGUsaSxvKX1pZihudWxsIT09cls5XSl7Y29uc3QgdD1yWzldO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtjb25zdCBuPXRbZV07S2goblsxXSxuLGksbyl9fX19fXJldHVybiBvfWZ1bmN0aW9uIEpoKHQpe2NvbnN0IGU9ZmkoKSxuPWdpKCksbz1OaSgpO3ppKG8rMSk7Y29uc3QgaT1vYihuLG8pO2lmKHQuZGlydHkmJnNpKGUpPT09KDI9PSgyJmkubWV0YWRhdGEuZmxhZ3MpKSl7aWYobnVsbD09PWkubWF0Y2hlcyl0LnJlc2V0KFtdKTtlbHNle2NvbnN0IGE9aS5jcm9zc2VzTmdUZW1wbGF0ZT9LaChuLGUsbyxbXSk6WGgobixlLGksbyk7dC5yZXNldChhLGJnKSx0Lm5vdGlmeU9uQ2hhbmdlcygpfXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFFoKHQsZSxuKXtuZ0Rldk1vZGUmJmFuKGUsIkV4cGVjdGluZyBmbGFncyIpO2NvbnN0IG89Z2koKTtvLmZpcnN0Q3JlYXRlUGFzcyYmKG5iKG8sbmV3IEdoKHQsZSxuKSwtMSksMj09KDImZSkmJihvLnN0YXRpY1ZpZXdRdWVyaWVzPSEwKSksZWIobyxmaSgpLGUpfWZ1bmN0aW9uICRoKHQsZSxuLG8pe25nRGV2TW9kZSYmYW4obiwiRXhwZWN0aW5nIGZsYWdzIik7Y29uc3QgaT1naSgpO2lmKGkuZmlyc3RDcmVhdGVQYXNzKXtjb25zdCBhPWJpKCk7bmIoaSxuZXcgR2goZSxuLG8pLGEuaW5kZXgpLChmdW5jdGlvbiBhKHQsZSl7Y29uc3Qgbj10LmNvbnRlbnRRdWVyaWVzfHwodC5jb250ZW50UXVlcmllcz1bXSk7ZSE9PShuLmxlbmd0aD9uW24ubGVuZ3RoLTFdOi0xKSYmbi5wdXNoKHQucXVlcmllcy5sZW5ndGgtMSxlKX0pKGksdCksMj09KDImbikmJihpLnN0YXRpY0NvbnRlbnRRdWVyaWVzPSEwKX1lYihpLGZpKCksbil9ZnVuY3Rpb24gdGIoKXtyZXR1cm4oZnVuY3Rpb24gdChlLG4pe3JldHVybiBuZ0Rldk1vZGUmJmhuKGVbMTldLCJMUXVlcmllcyBzaG91bGQgYmUgZGVmaW5lZCB3aGVuIHRyeWluZyB0byBsb2FkIGEgcXVlcnkiKSxuZ0Rldk1vZGUmJl9uKGVbMTldLnF1ZXJpZXMsbiksZVsxOV0ucXVlcmllc1tuXS5xdWVyeUxpc3R9KShmaSgpLE5pKCkpfWZ1bmN0aW9uIGViKHQsZSxuKXtjb25zdCBvPW5ldyBWaCg0PT0oNCZuKSk7cmQodCxlLG8sby5kZXN0cm95KSxudWxsPT09ZVsxOV0mJihlWzE5XT1uZXcgVWgpLGVbMTldLnF1ZXJpZXMucHVzaChuZXcgamgobykpfWZ1bmN0aW9uIG5iKHQsZSxuKXtudWxsPT09dC5xdWVyaWVzJiYodC5xdWVyaWVzPW5ldyBXaCksdC5xdWVyaWVzLnRyYWNrKG5ldyBZaChlLG4pKX1mdW5jdGlvbiBvYih0LGUpe3JldHVybiBuZ0Rldk1vZGUmJmhuKHQucXVlcmllcywiVFF1ZXJpZXMgbXVzdCBiZSBkZWZpbmVkIHRvIHJldHJpZXZlIGEgVFF1ZXJ5IiksdC5xdWVyaWVzLmdldEJ5SW5kZXgoZSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGliKHQsZSl7cmV0dXJuICRnKHQsZSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBhYj17Ism1ybVhdHRyaWJ1dGUiOmpwLCLJtcm1YXR0cmlidXRlSW50ZXJwb2xhdGUxIjpmdW5jdGlvbiB0KGUsbixvLGksYSxyKXtjb25zdCBzPWZpKCksbD1HcChzLG4sbyxpKTtpZihsIT09YWMpe2NvbnN0IHQ9WWkoKTtDZCh0LHMsZSxsLGEsciksbmdEZXZNb2RlJiZ6ZChnaSgpLmRhdGEsdCwiYXR0ci4iK2Usd2koKS0xLG4saSl9cmV0dXJuIHR9LCLJtcm1YXR0cmlidXRlSW50ZXJwb2xhdGUyIjpmdW5jdGlvbiB0KGUsbixvLGksYSxyLHMsbCl7Y29uc3QgYz1maSgpLGQ9V3AoYyxuLG8saSxhLHIpO2lmKGQhPT1hYyl7Y29uc3QgdD1ZaSgpO0NkKHQsYyxlLGQscyxsKSxuZ0Rldk1vZGUmJnpkKGdpKCkuZGF0YSx0LCJhdHRyLiIrZSx3aSgpLTIsbixpLHIpfXJldHVybiB0fSwiybXJtWF0dHJpYnV0ZUludGVycG9sYXRlMyI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkKXtjb25zdCBwPWZpKCksbT1ZcChwLG4sbyxpLGEscixzLGwpO2lmKG0hPT1hYyl7Y29uc3QgdD1ZaSgpO0NkKHQscCxlLG0sYyxkKSxuZ0Rldk1vZGUmJnpkKGdpKCkuZGF0YSx0LCJhdHRyLiIrZSx3aSgpLTMsbixpLHIsbCl9cmV0dXJuIHR9LCLJtcm1YXR0cmlidXRlSW50ZXJwb2xhdGU0IjpmdW5jdGlvbiB0KGUsbixvLGksYSxyLHMsbCxjLGQscCxtKXtjb25zdCB1PWZpKCksZj1xcCh1LG4sbyxpLGEscixzLGwsYyxkKTtpZihmIT09YWMpe2NvbnN0IHQ9WWkoKTtDZCh0LHUsZSxmLHAsbSksbmdEZXZNb2RlJiZ6ZChnaSgpLmRhdGEsdCwiYXR0ci4iK2Usd2koKS00LG4saSxyLGwsZCl9cmV0dXJuIHR9LCLJtcm1YXR0cmlidXRlSW50ZXJwb2xhdGU1IjpmdW5jdGlvbiB0KGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZil7Y29uc3QgZz1maSgpLGg9WnAoZyxuLG8saSxhLHIscyxsLGMsZCxwLG0pO2lmKGghPT1hYyl7Y29uc3QgdD1ZaSgpO0NkKHQsZyxlLGgsdSxmKSxuZ0Rldk1vZGUmJnpkKGdpKCkuZGF0YSx0LCJhdHRyLiIrZSx3aSgpLTUsbixpLHIsbCxkLG0pfXJldHVybiB0fSwiybXJtWF0dHJpYnV0ZUludGVycG9sYXRlNiI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoKXtjb25zdCBiPWZpKCkseT1YcChiLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYpO2lmKHkhPT1hYyl7Y29uc3QgdD1ZaSgpO0NkKHQsYixlLHksZyxoKSxuZ0Rldk1vZGUmJnpkKGdpKCkuZGF0YSx0LCJhdHRyLiIrZSx3aSgpLTYsbixpLHIsbCxkLG0sZil9cmV0dXJuIHR9LCLJtcm1YXR0cmlidXRlSW50ZXJwb2xhdGU3IjpmdW5jdGlvbiB0KGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgsYix5KXtjb25zdCBfPWZpKCksQz1LcChfLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoKTtpZihDIT09YWMpe2NvbnN0IHQ9WWkoKTtDZCh0LF8sZSxDLGIseSksbmdEZXZNb2RlJiZ6ZChnaSgpLmRhdGEsdCwiYXR0ci4iK2Usd2koKS03LG4saSxyLGwsZCxtLGYsaCl9cmV0dXJuIHR9LCLJtcm1YXR0cmlidXRlSW50ZXJwb2xhdGU4IjpmdW5jdGlvbiB0KGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgsYix5LF8sQyl7Y29uc3QgTT1maSgpLHY9SnAoTSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCxiLHkpO2lmKHYhPT1hYyl7Y29uc3QgdD1ZaSgpO0NkKHQsTSxlLHYsXyxDKSxuZ0Rldk1vZGUmJnpkKGdpKCkuZGF0YSx0LCJhdHRyLiIrZSx3aSgpLTgsbixpLHIsbCxkLG0sZixoLHkpfXJldHVybiB0fSwiybXJtWF0dHJpYnV0ZUludGVycG9sYXRlViI6ZnVuY3Rpb24gdChlLG4sbyxpKXtjb25zdCBhPWZpKCkscj1VcChhLG4pO2lmKHIhPT1hYyl7Y29uc3QgdD1ZaSgpO2lmKENkKHQsYSxlLHIsbyxpKSxuZ0Rldk1vZGUpe2NvbnN0IG89W25bMF1dO2ZvcihsZXQgdD0yO3Q8bi5sZW5ndGg7dCs9MilvLnB1c2goblt0XSk7emQoZ2koKS5kYXRhLHQsImF0dHIuIitlLHdpKCktby5sZW5ndGgrMSwuLi5vKX19cmV0dXJuIHR9LCLJtcm1ZGVmaW5lQ29tcG9uZW50Ijp0bywiybXJtWRlZmluZURpcmVjdGl2ZSI6bG8sIsm1ybVkZWZpbmVJbmplY3RhYmxlIjpNbiwiybXJtWRlZmluZUluamVjdG9yIjp2biwiybXJtWRlZmluZU5nTW9kdWxlIjphbywiybXJtWRlZmluZVBpcGUiOmNvLCLJtcm1ZGlyZWN0aXZlSW5qZWN0IjpTbSwiybXJtWdldEluaGVyaXRlZEZhY3RvcnkiOkFhLCLJtcm1aW5qZWN0Ijp2ciwiybXJtWluamVjdEF0dHJpYnV0ZSI6TmEsIsm1ybVpbnZhbGlkRmFjdG9yeSI6ZnVuY3Rpb24gcmIoKXtjb25zdCB0PW5nRGV2TW9kZT8iVGhpcyBjb25zdHJ1Y3RvciB3YXMgbm90IGNvbXBhdGlibGUgd2l0aCBEZXBlbmRlbmN5IEluamVjdGlvbi4iOiJpbnZhbGlkIjt0aHJvdyBuZXcgRXJyb3IodCl9LCLJtcm1aW52YWxpZEZhY3RvcnlEZXAiOnhyLCLJtcm1dGVtcGxhdGVSZWZFeHRyYWN0b3IiOmliLCLJtcm1TmdPbkNoYW5nZXNGZWF0dXJlIjpCbywiybXJtVByb3ZpZGVyc0ZlYXR1cmUiOnBnLCLJtcm1Q29weURlZmluaXRpb25GZWF0dXJlIjpmdW5jdGlvbiBzYih0KXtsZXQgZSxuPXZwKHQudHlwZSk7ZT14byh0KT9uLsm1Y21wOm4uybVkaXI7Y29uc3Qgbz10O2Zvcihjb25zdCB0IG9mIFNwKW9bdF09ZVt0XTtpZih4byhlKSlmb3IoY29uc3QgdCBvZiBEcClvW3RdPWVbdF19LCLJtcm1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlIjp4cCwiybXJtW5leHRDb250ZXh0IjpZbSwiybXJtW5hbWVzcGFjZUhUTUwiOlppLCLJtcm1bmFtZXNwYWNlTWF0aE1MIjpmdW5jdGlvbiBsYigpe21pLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlPVhvfSwiybXJtW5hbWVzcGFjZVNWRyI6cWksIsm1ybVlbmFibGVCaW5kaW5ncyI6ZnVuY3Rpb24gY2IoKXttaS5iaW5kaW5nc0VuYWJsZWQ9ITB9LCLJtcm1ZGlzYWJsZUJpbmRpbmdzIjpmdW5jdGlvbiBkYigpe21pLmJpbmRpbmdzRW5hYmxlZD0hMX0sIsm1ybVlbGVtZW50U3RhcnQiOlJtLCLJtcm1ZWxlbWVudEVuZCI6QW0sIsm1ybVlbGVtZW50IjpUbSwiybXJtWVsZW1lbnRDb250YWluZXJTdGFydCI6Tm0sIsm1ybVlbGVtZW50Q29udGFpbmVyRW5kIjp6bSwiybXJtWVsZW1lbnRDb250YWluZXIiOkltLCLJtcm1cHVyZUZ1bmN0aW9uMCI6Q2gsIsm1ybVwdXJlRnVuY3Rpb24xIjpNaCwiybXJtXB1cmVGdW5jdGlvbjIiOnZoLCLJtcm1cHVyZUZ1bmN0aW9uMyI6eGgsIsm1ybVwdXJlRnVuY3Rpb240IjpPaCwiybXJtXB1cmVGdW5jdGlvbjUiOlBoLCLJtcm1cHVyZUZ1bmN0aW9uNiI6ZnVuY3Rpb24gcGIodCxlLG4sbyxpLGEscixzLGwpe2NvbnN0IGM9UGkoKSt0LGQ9ZmkoKSxwPVZwKGQsYyxuLG8saSxhKTtyZXR1cm4gTHAoZCxjKzQscixzKXx8cD9JcChkLGMrNixsP2UuY2FsbChsLG4sbyxpLGEscixzKTplKG4sbyxpLGEscixzKSk6SHAoZCxjKzYpfSwiybXJtXB1cmVGdW5jdGlvbjciOmZ1bmN0aW9uIG1iKHQsZSxuLG8saSxhLHIscyxsLGMpe2NvbnN0IGQ9UGkoKSt0LHA9ZmkoKTtsZXQgbT1WcChwLGQsbixvLGksYSk7cmV0dXJuIEJwKHAsZCs0LHIscyxsKXx8bT9JcChwLGQrNyxjP2UuY2FsbChjLG4sbyxpLGEscixzLGwpOmUobixvLGksYSxyLHMsbCkpOkhwKHAsZCs3KX0sIsm1ybVwdXJlRnVuY3Rpb244IjpmdW5jdGlvbiB1Yih0LGUsbixvLGksYSxyLHMsbCxjLGQpe2NvbnN0IHA9UGkoKSt0LG09ZmkoKSx1PVZwKG0scCxuLG8saSxhKTtyZXR1cm4gVnAobSxwKzQscixzLGwsYyl8fHU/SXAobSxwKzgsZD9lLmNhbGwoZCxuLG8saSxhLHIscyxsLGMpOmUobixvLGksYSxyLHMsbCxjKSk6SHAobSxwKzgpfSwiybXJtXB1cmVGdW5jdGlvblYiOmZ1bmN0aW9uIGZiKHQsZSxuLG8pe3JldHVybiBSaChmaSgpLFBpKCksdCxlLG4sbyl9LCLJtcm1Z2V0Q3VycmVudFZpZXciOkhtLCLJtcm1cmVzdG9yZVZpZXciOmhpLCLJtcm1bGlzdGVuZXIiOlZtLCLJtcm1cHJvamVjdGlvbiI6WG0sIsm1ybVzeW50aGV0aWNIb3N0UHJvcGVydHkiOk51LCLJtcm1c3ludGhldGljSG9zdExpc3RlbmVyIjpqbSwiybXJtXBpcGVCaW5kMSI6VGgsIsm1ybVwaXBlQmluZDIiOk5oLCLJtcm1cGlwZUJpbmQzIjp6aCwiybXJtXBpcGVCaW5kNCI6ZnVuY3Rpb24gZ2IodCxlLG4sbyxpLGEpe2NvbnN0IHI9dCtnbyxzPWZpKCksbD1haShzLHIpO3JldHVybiBIaChzLEloKHMscik/RWgocyxQaSgpLGUsbC50cmFuc2Zvcm0sbixvLGksYSxsKTpsLnRyYW5zZm9ybShuLG8saSxhKSl9LCLJtcm1cGlwZUJpbmRWIjpmdW5jdGlvbiBoYih0LGUsbil7Y29uc3Qgbz10K2dvLGk9ZmkoKSxhPWFpKGksbyk7cmV0dXJuIEhoKGksSWgoaSxvKT9SaChpLFBpKCksZSxhLnRyYW5zZm9ybSxuLGEpOmEudHJhbnNmb3JtLmFwcGx5KGEsbikpfSwiybXJtXByb2plY3Rpb25EZWYiOlptLCLJtcm1aG9zdFByb3BlcnR5IjpUdSwiybXJtXByb3BlcnR5IjpEbSwiybXJtXByb3BlcnR5SW50ZXJwb2xhdGUiOkttLCLJtcm1cHJvcGVydHlJbnRlcnBvbGF0ZTEiOkptLCLJtcm1cHJvcGVydHlJbnRlcnBvbGF0ZTIiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyl7Y29uc3QgbD1maSgpLGM9V3AobCxuLG8saSxhLHIpO2lmKGMhPT1hYyl7Y29uc3QgdD1naSgpLG89WWkoKTtsZCh0LG8sbCxlLGMsbFsxMV0scywhMSksbmdEZXZNb2RlJiZ6ZCh0LmRhdGEsbyxlLHdpKCktMixuLGkscil9cmV0dXJuIHR9LCLJtcm1cHJvcGVydHlJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMpe2NvbnN0IGQ9ZmkoKSxwPVlwKGQsbixvLGksYSxyLHMsbCk7aWYocCE9PWFjKXtjb25zdCB0PWdpKCksbz1ZaSgpO2xkKHQsbyxkLGUscCxkWzExXSxjLCExKSxuZ0Rldk1vZGUmJnpkKHQuZGF0YSxvLGUsd2koKS0zLG4saSxyLGwpfXJldHVybiB0fSwiybXJtXByb3BlcnR5SW50ZXJwb2xhdGU0IjpmdW5jdGlvbiB0KGUsbixvLGksYSxyLHMsbCxjLGQscCl7Y29uc3QgbT1maSgpLHU9cXAobSxuLG8saSxhLHIscyxsLGMsZCk7aWYodSE9PWFjKXtjb25zdCB0PWdpKCksbz1ZaSgpO2xkKHQsbyxtLGUsdSxtWzExXSxwLCExKSxuZ0Rldk1vZGUmJnpkKHQuZGF0YSxvLGUsd2koKS00LG4saSxyLGwsZCl9cmV0dXJuIHR9LCLJtcm1cHJvcGVydHlJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSl7Y29uc3QgZj1maSgpLGc9WnAoZixuLG8saSxhLHIscyxsLGMsZCxwLG0pO2lmKGchPT1hYyl7Y29uc3QgdD1naSgpLG89WWkoKTtsZCh0LG8sZixlLGcsZlsxMV0sdSwhMSksbmdEZXZNb2RlJiZ6ZCh0LmRhdGEsbyxlLHdpKCktNSxuLGkscixsLGQsbSl9cmV0dXJuIHR9LCLJtcm1cHJvcGVydHlJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcpe2NvbnN0IGg9ZmkoKSxiPVhwKGgsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZik7aWYoYiE9PWFjKXtjb25zdCB0PWdpKCksbz1ZaSgpO2xkKHQsbyxoLGUsYixoWzExXSxnLCExKSxuZ0Rldk1vZGUmJnpkKHQuZGF0YSxvLGUsd2koKS02LG4saSxyLGwsZCxtLGYpfXJldHVybiB0fSwiybXJtXByb3BlcnR5SW50ZXJwb2xhdGU3IjpmdW5jdGlvbiB0KGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgsYil7Y29uc3QgeT1maSgpLF89S3AoeSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCk7aWYoXyE9PWFjKXtjb25zdCB0PWdpKCksbz1ZaSgpO2xkKHQsbyx5LGUsXyx5WzExXSxiLCExKSxuZ0Rldk1vZGUmJnpkKHQuZGF0YSxvLGUsd2koKS03LG4saSxyLGwsZCxtLGYsaCl9cmV0dXJuIHR9LCLJtcm1cHJvcGVydHlJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCxiLHksXyl7Y29uc3QgQz1maSgpLE09SnAoQyxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCxiLHkpO2lmKE0hPT1hYyl7Y29uc3QgdD1naSgpLG89WWkoKTtsZCh0LG8sQyxlLE0sQ1sxMV0sXywhMSksbmdEZXZNb2RlJiZ6ZCh0LmRhdGEsbyxlLHdpKCktOCxuLGkscixsLGQsbSxmLGgseSl9cmV0dXJuIHR9LCLJtcm1cHJvcGVydHlJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uIHQoZSxuLG8pe2NvbnN0IGk9ZmkoKSxhPVVwKGksbik7aWYoYSE9PWFjKXtjb25zdCB0PWdpKCkscj1ZaSgpO2lmKGxkKHQscixpLGUsYSxpWzExXSxvLCExKSxuZ0Rldk1vZGUpe2NvbnN0IG89W25bMF1dO2ZvcihsZXQgdD0yO3Q8bi5sZW5ndGg7dCs9MilvLnB1c2goblt0XSk7emQodC5kYXRhLHIsZSx3aSgpLW8ubGVuZ3RoKzEsLi4ubyl9fXJldHVybiB0fSwiybXJtXBpcGUiOkFoLCLJtcm1cXVlcnlSZWZyZXNoIjpKaCwiybXJtXZpZXdRdWVyeSI6UWgsIsm1ybVsb2FkUXVlcnkiOnRiLCLJtcm1Y29udGVudFF1ZXJ5IjokaCwiybXJtXJlZmVyZW5jZSI6JHAsIsm1ybVjbGFzc01hcCI6ZnUsIsm1ybVjbGFzc01hcEludGVycG9sYXRlMSI6QXUsIsm1ybVjbGFzc01hcEludGVycG9sYXRlMiI6ZnVuY3Rpb24gYmIodCxlLG4sbyxpKXtidShhcixndSxXcChmaSgpLHQsZSxuLG8saSksITApfSwiybXJtWNsYXNzTWFwSW50ZXJwb2xhdGUzIjpmdW5jdGlvbiB5Yih0LGUsbixvLGksYSxyKXtidShhcixndSxZcChmaSgpLHQsZSxuLG8saSxhLHIpLCEwKX0sIsm1ybVjbGFzc01hcEludGVycG9sYXRlNCI6ZnVuY3Rpb24gX2IodCxlLG4sbyxpLGEscixzLGwpe2J1KGFyLGd1LHFwKGZpKCksdCxlLG4sbyxpLGEscixzLGwpLCEwKX0sIsm1ybVjbGFzc01hcEludGVycG9sYXRlNSI6ZnVuY3Rpb24gQ2IodCxlLG4sbyxpLGEscixzLGwsYyxkKXtidShhcixndSxacChmaSgpLHQsZSxuLG8saSxhLHIscyxsLGMsZCksITApfSwiybXJtWNsYXNzTWFwSW50ZXJwb2xhdGU2IjpmdW5jdGlvbiBNYih0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtKXtidShhcixndSxYcChmaSgpLHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0pLCEwKX0sIsm1ybVjbGFzc01hcEludGVycG9sYXRlNyI6ZnVuY3Rpb24gdmIodCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYpe2J1KGFyLGd1LEtwKGZpKCksdCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYpLCEwKX0sIsm1ybVjbGFzc01hcEludGVycG9sYXRlOCI6ZnVuY3Rpb24geGIodCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoKXtidShhcixndSxKcChmaSgpLHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCksITApfSwiybXJtWNsYXNzTWFwSW50ZXJwb2xhdGVWIjpmdW5jdGlvbiBPYih0KXtidShhcixndSxVcChmaSgpLHQpLCEwKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovLCLJtcm1c3R5bGVNYXAiOm11LCLJtcm1c3R5bGVNYXBJbnRlcnBvbGF0ZTEiOmZ1bmN0aW9uIFBiKHQsZSxuKXttdShHcChmaSgpLHQsZSxuKSl9LCLJtcm1c3R5bGVNYXBJbnRlcnBvbGF0ZTIiOmZ1bmN0aW9uIHdiKHQsZSxuLG8saSl7bXUoV3AoZmkoKSx0LGUsbixvLGkpKX0sIsm1ybVzdHlsZU1hcEludGVycG9sYXRlMyI6ZnVuY3Rpb24ga2IodCxlLG4sbyxpLGEscil7bXUoWXAoZmkoKSx0LGUsbixvLGksYSxyKSl9LCLJtcm1c3R5bGVNYXBJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uIFNiKHQsZSxuLG8saSxhLHIscyxsKXttdShxcChmaSgpLHQsZSxuLG8saSxhLHIscyxsKSl9LCLJtcm1c3R5bGVNYXBJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uIERiKHQsZSxuLG8saSxhLHIscyxsLGMsZCl7bXUoWnAoZmkoKSx0LGUsbixvLGksYSxyLHMsbCxjLGQpKX0sIsm1ybVzdHlsZU1hcEludGVycG9sYXRlNiI6ZnVuY3Rpb24gRWIodCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSl7bXUoWHAoZmkoKSx0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtKSl9LCLJtcm1c3R5bGVNYXBJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uIFJiKHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmKXttdShLcChmaSgpLHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmKSl9LCLJtcm1c3R5bGVNYXBJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uIEFiKHQsZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCl7bXUoSnAoZmkoKSx0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgpKX0sIsm1ybVzdHlsZU1hcEludGVycG9sYXRlViI6ZnVuY3Rpb24gVGIodCl7bXUoVXAoZmkoKSx0KSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLywiybXJtXN0eWxlUHJvcCI6ZHUsIsm1ybVzdHlsZVByb3BJbnRlcnBvbGF0ZTEiOmZ1bmN0aW9uIHQoZSxuLG8saSxhKXtyZXR1cm4gaHUoZSxHcChmaSgpLG4sbyxpKSxhLCExKSx0fSwiybXJtXN0eWxlUHJvcEludGVycG9sYXRlMiI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzKXtyZXR1cm4gaHUoZSxXcChmaSgpLG4sbyxpLGEscikscywhMSksdH0sIsm1ybVzdHlsZVByb3BJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMpe3JldHVybiBodShlLFlwKGZpKCksbixvLGksYSxyLHMsbCksYywhMSksdH0sIsm1ybVzdHlsZVByb3BJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwKXtyZXR1cm4gaHUoZSxxcChmaSgpLG4sbyxpLGEscixzLGwsYyxkKSxwLCExKSx0fSwiybXJtXN0eWxlUHJvcEludGVycG9sYXRlNSI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1KXtyZXR1cm4gaHUoZSxacChmaSgpLG4sbyxpLGEscixzLGwsYyxkLHAsbSksdSwhMSksdH0sIsm1ybVzdHlsZVByb3BJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcpe3JldHVybiBodShlLFhwKGZpKCksbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZiksZywhMSksdH0sIsm1ybVzdHlsZVByb3BJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSxmLGcsaCxiKXtyZXR1cm4gaHUoZSxLcChmaSgpLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoKSxiLCExKSx0fSwiybXJtXN0eWxlUHJvcEludGVycG9sYXRlOCI6ZnVuY3Rpb24gdChlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIseSxfKXtyZXR1cm4gaHUoZSxKcChmaSgpLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIseSksXywhMSksdH0sIsm1ybVzdHlsZVByb3BJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uIHQoZSxuLG8pe3JldHVybiBodShlLFVwKGZpKCksbiksbywhMSksdH0sIsm1ybVjbGFzc1Byb3AiOnB1LCLJtcm1YWR2YW5jZSI6cmMsIsm1ybV0ZW1wbGF0ZSI6UXAsIsm1ybV0ZXh0IjprdSwiybXJtXRleHRJbnRlcnBvbGF0ZSI6U3UsIsm1ybV0ZXh0SW50ZXJwb2xhdGUxIjpEdSwiybXJtXRleHRJbnRlcnBvbGF0ZTIiOkV1LCLJtcm1dGV4dEludGVycG9sYXRlMyI6UnUsIsm1ybV0ZXh0SW50ZXJwb2xhdGU0IjpmdW5jdGlvbiB0KGUsbixvLGksYSxyLHMsbCxjKXtjb25zdCBkPWZpKCkscD1xcChkLGUsbixvLGksYSxyLHMsbCxjKTtyZXR1cm4gcCE9PWFjJiZqZChkLEdpKCkscCksdH0sIsm1ybV0ZXh0SW50ZXJwb2xhdGU1IjpmdW5jdGlvbiB0KGUsbixvLGksYSxyLHMsbCxjLGQscCl7Y29uc3QgbT1maSgpLHU9WnAobSxlLG4sbyxpLGEscixzLGwsYyxkLHApO3JldHVybiB1IT09YWMmJmpkKG0sR2koKSx1KSx0fSwiybXJtXRleHRJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uIHQoZSxuLG8saSxhLHIscyxsLGMsZCxwLG0sdSl7Y29uc3QgZj1maSgpLGc9WHAoZixlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1KTtyZXR1cm4gZyE9PWFjJiZqZChmLEdpKCksZyksdH0sIsm1ybV0ZXh0SW50ZXJwb2xhdGU3IjpmdW5jdGlvbiB0KGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnKXtjb25zdCBoPWZpKCksYj1LcChoLGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnKTtyZXR1cm4gYiE9PWFjJiZqZChoLEdpKCksYiksdH0sIsm1ybV0ZXh0SW50ZXJwb2xhdGU4IjpmdW5jdGlvbiB0KGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnLGgsYil7Y29uc3QgeT1maSgpLF89SnAoeSxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIpO3JldHVybiBfIT09YWMmJmpkKHksR2koKSxfKSx0fSwiybXJtXRleHRJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uIHQoZSl7Y29uc3Qgbj1maSgpLG89VXAobixlKTtyZXR1cm4gbyE9PWFjJiZqZChuLEdpKCksbyksdH0sIsm1ybVpMThuIjp0ZywiybXJtWkxOG5BdHRyaWJ1dGVzIjpmdW5jdGlvbiBOYih0LGUpe2NvbnN0IG49Z2koKTtuZ0Rldk1vZGUmJmhuKG4sInRWaWV3IHNob3VsZCBiZSBkZWZpbmVkIik7Y29uc3Qgbz1jaShuLmNvbnN0cyxlKTshKGZ1bmN0aW9uIGkodCxlLG4pe2NvbnN0IG89YmkoKS5pbmRleCxpPVtdO2lmKG5nRGV2TW9kZSYmYmMoaSxfZiksdC5maXJzdENyZWF0ZVBhc3MmJm51bGw9PT10LmRhdGFbZV0pe2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCs9Mil7Y29uc3QgZT1uW3RdLGE9blt0KzFdO2lmKCIiIT09YSl7aWYoT2YudGVzdChhKSl0aHJvdyBuZXcgRXJyb3IoYElDVSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCBpbiBhdHRyaWJ1dGVzLiBNZXNzYWdlOiAiJHthfSIuYCk7QWYoaSxhLG8sZSxUZihpKSxudWxsKX19dC5kYXRhW2VdPWl9fSkobix0K2dvLG8pfSwiybXJtWkxOG5FeHAiOmVnLCLJtcm1aTE4blN0YXJ0IjpRZiwiybXJtWkxOG5FbmQiOiRmLCLJtcm1aTE4bkFwcGx5IjpuZywiybXJtWkxOG5Qb3N0cHJvY2VzcyI6b2csIsm1ybVyZXNvbHZlV2luZG93IjpvbCwiybXJtXJlc29sdmVEb2N1bWVudCI6aWwsIsm1ybVyZXNvbHZlQm9keSI6ZnVuY3Rpb24gemIodCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5ib2R5fSwiybXJtXNldENvbXBvbmVudFNjb3BlIjplbywiybXJtXNldE5nTW9kdWxlU2NvcGUiOnJvLCLJtcm1c2FuaXRpemVIdG1sIjoKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIEliKHQpe2NvbnN0IGU9enMoKTtyZXR1cm4gZT9XcihlLnNhbml0aXplKEFzLkhUTUwsdCl8fCIiKTplcyh0LCJIVE1MIik/V3IodHModCkpOkVzKEpvKCksJGUodCkpfSwiybXJtXNhbml0aXplU3R5bGUiOmZ1bmN0aW9uIEhiKHQpe2NvbnN0IGU9enMoKTtyZXR1cm4gZT9lLnNhbml0aXplKEFzLlNUWUxFLHQpfHwiIjplcyh0LCJTdHlsZSIpP3RzKHQpOiRlKHQpfSwiybXJtXNhbml0aXplUmVzb3VyY2VVcmwiOk5zLCLJtcm1c2FuaXRpemVTY3JpcHQiOmZ1bmN0aW9uIEZiKHQpe2NvbnN0IGU9enMoKTtpZihlKXJldHVybiBZcihlLnNhbml0aXplKEFzLlNDUklQVCx0KXx8IiIpO2lmKGVzKHQsIlNjcmlwdCIpKXJldHVybiBZcih0cyh0KSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHNjcmlwdCBjb250ZXh0Iil9LCLJtcm1c2FuaXRpemVVcmwiOlRzLCLJtcm1c2FuaXRpemVVcmxPclJlc291cmNlVXJsIjpmdW5jdGlvbiBMYih0LGUsbil7cmV0dXJuKGZ1bmN0aW9uIG8odCxlKXtyZXR1cm4ic3JjIj09PWUmJigiZW1iZWQiPT09dHx8ImZyYW1lIj09PXR8fCJpZnJhbWUiPT09dHx8Im1lZGlhIj09PXR8fCJzY3JpcHQiPT09dCl8fCJocmVmIj09PWUmJigiYmFzZSI9PT10fHwibGluayI9PT10KT9OczpUc30pKGUsbikodCl9LCLJtcm1dHJ1c3RDb25zdGFudEh0bWwiOmZ1bmN0aW9uIEJiKHQpe2lmKG5nRGV2TW9kZSYmKCFBcnJheS5pc0FycmF5KHQpfHwhQXJyYXkuaXNBcnJheSh0LnJhdyl8fDEhPT10Lmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGludGVycG9sYXRpb24gaW4gdHJ1c3RlZCBIVE1MIGNvbnN0YW50OiAke3Quam9pbigiPyIpfWApO3JldHVybiBVcih0WzBdKX0sIsm1ybV0cnVzdENvbnN0YW50UmVzb3VyY2VVcmwiOmZ1bmN0aW9uIFZiKHQpe2lmKG5nRGV2TW9kZSYmKCFBcnJheS5pc0FycmF5KHQpfHwhQXJyYXkuaXNBcnJheSh0LnJhdyl8fDEhPT10Lmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGludGVycG9sYXRpb24gaW4gdHJ1c3RlZCBVUkwgY29uc3RhbnQ6ICR7dC5qb2luKCI/Iil9YCk7cmV0dXJuKGZ1bmN0aW9uIGUodCl7dmFyIGU7cmV0dXJuKG51bGw9PT0oZT1qcigpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jcmVhdGVTY3JpcHRVUkwodCkpfHx0fSkodFswXSl9LGZvcndhcmRSZWY6cWUscmVzb2x2ZUZvcndhcmRSZWY6WmV9O2xldCBqYj1udWxsOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgVWI9W107bGV0IEdiPSExO2Z1bmN0aW9uIFdiKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QuZXZlcnkoV2IpOiEhWmUodCl9ZnVuY3Rpb24gWWIodCxlLG4pe2lmKEtiLmdldCh0KSlyZXR1cm47bGV0IG87aWYoS2Iuc2V0KHQsITApLHQ9WmUodCksbil7aWYobz1mbyh0KSwhbyl0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgJyR7dC5uYW1lfScgaW1wb3J0ZWQgYnkgdGhlIG1vZHVsZSAnJHtuLm5hbWV9Jy4gUGxlYXNlIGFkZCBhbiBATmdNb2R1bGUgYW5ub3RhdGlvbi5gKX1lbHNlIG89Zm8odCwhMCk7Y29uc3QgaT1bXSxhPXJsKG8uZGVjbGFyYXRpb25zKSxyPXJsKG8uaW1wb3J0cyk7dHIocikubWFwKHFiKS5mb3JFYWNoKChlPT57aChlLHQpLFliKGUsITEsdCl9KSk7Y29uc3Qgcz1ybChvLmV4cG9ydHMpO2EuZm9yRWFjaCgoZnVuY3Rpb24gbChlKXtwbyhlPVplKGUpKXx8bW8oZSl8fHVvKGUpfHxpLnB1c2goYFVuZXhwZWN0ZWQgdmFsdWUgJyR7dG4oZSl9JyBkZWNsYXJlZCBieSB0aGUgbW9kdWxlICcke3RuKHQpfScuIFBsZWFzZSBhZGQgYSBAUGlwZS9ARGlyZWN0aXZlL0BDb21wb25lbnQgYW5ub3RhdGlvbi5gKX0pKSxhLmZvckVhY2goKGZ1bmN0aW9uIGModCl7Y29uc3QgZT1tbyh0PVplKHQpKTshcG8odCkmJmUmJjA9PWUuc2VsZWN0b3JzLmxlbmd0aCYmaS5wdXNoKGBEaXJlY3RpdmUgJHt0bih0KX0gaGFzIG5vIHNlbGVjdG9yLCBwbGVhc2UgYWRkIGl0IWApfSkpO2NvbnN0IGQ9Wy4uLmEubWFwKFplKSwuLi50cihyLm1hcChKYikpLm1hcChaZSldO3MuZm9yRWFjaCgoZnVuY3Rpb24gcChlKXtjb25zdCBuPShwbyhlPVplKGUpKT8iY29tcG9uZW50IjptbyhlKSYmImRpcmVjdGl2ZSIpfHx1byhlKSYmInBpcGUiO24mJi0xPT09ZC5sYXN0SW5kZXhPZihlKSYmaS5wdXNoKGBDYW4ndCBleHBvcnQgJHtufSAke3RuKGUpfSBmcm9tICR7dG4odCl9IGFzIGl0IHdhcyBuZWl0aGVyIGRlY2xhcmVkIG5vciBpbXBvcnRlZCFgKX0pKSxhLmZvckVhY2goKG49PihmdW5jdGlvbiBvKGUsbil7ZT1aZShlKTtjb25zdCBvPVhiLmdldChlKTtpZihvJiZvIT09dCl7aWYoIW4pe2NvbnN0IG49W28sdF0ubWFwKHRuKS5zb3J0KCk7aS5wdXNoKGBUeXBlICR7dG4oZSl9IGlzIHBhcnQgb2YgdGhlIGRlY2xhcmF0aW9ucyBvZiAyIG1vZHVsZXM6ICR7blswXX0gYW5kICR7blsxXX0hIFBsZWFzZSBjb25zaWRlciBtb3ZpbmcgJHt0bihlKX0gdG8gYSBoaWdoZXIgbW9kdWxlIHRoYXQgaW1wb3J0cyAke25bMF19IGFuZCAke25bMV19LiBZb3UgY2FuIGFsc28gY3JlYXRlIGEgbmV3IE5nTW9kdWxlIHRoYXQgZXhwb3J0cyBhbmQgaW5jbHVkZXMgJHt0bihlKX0gdGhlbiBpbXBvcnQgdGhhdCBOZ01vZHVsZSBpbiAke25bMF19IGFuZCAke25bMV19LmApfX1lbHNlIFhiLnNldChlLHQpfSkobixlKSkpLGEuZm9yRWFjaCgoZnVuY3Rpb24gbSh0KXtpZihwbyh0PVplKHQpKSl7Y29uc3QgZT1aYih0LCJDb21wb25lbnQiKTtlJiZlLmVudHJ5Q29tcG9uZW50cyYmZXIoZS5lbnRyeUNvbXBvbmVudHMsZyl9fSkpO2NvbnN0IHU9WmIodCwiTmdNb2R1bGUiKTtpZih1JiYodS5pbXBvcnRzJiZ0cih1LmltcG9ydHMpLm1hcChxYikuZm9yRWFjaCgoZT0+e2goZSx0KSxZYihlLCExLHQpfSkpLHUuYm9vdHN0cmFwJiZlcih1LmJvb3RzdHJhcCwoZnVuY3Rpb24gZih0KXtwbyh0PVplKHQpKXx8aS5wdXNoKGAke3RuKHQpfSBjYW5ub3QgYmUgdXNlZCBhcyBhbiBlbnRyeSBjb21wb25lbnQuYCl9KSksdS5ib290c3RyYXAmJmVyKHUuYm9vdHN0cmFwLGcpLHUuZW50cnlDb21wb25lbnRzJiZlcih1LmVudHJ5Q29tcG9uZW50cyxnKSksaS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGkuam9pbigiXG4iKSk7ZnVuY3Rpb24gZyh0KXt0PVplKHQpLFhiLmdldCh0KXx8aS5wdXNoKGBDb21wb25lbnQgJHt0bih0KX0gaXMgbm90IHBhcnQgb2YgYW55IE5nTW9kdWxlIG9yIHRoZSBtb2R1bGUgaGFzIG5vdCBiZWVuIGltcG9ydGVkIGludG8geW91ciBtb2R1bGUuYCl9ZnVuY3Rpb24gaCh0LGUpe2lmKHBvKHQ9WmUodCkpfHxtbyh0KSl0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZGlyZWN0aXZlICcke3QubmFtZX0nIGltcG9ydGVkIGJ5IHRoZSBtb2R1bGUgJyR7ZS5uYW1lfScuIFBsZWFzZSBhZGQgYW4gQE5nTW9kdWxlIGFubm90YXRpb24uYCk7aWYodW8odCkpdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHBpcGUgJyR7dC5uYW1lfScgaW1wb3J0ZWQgYnkgdGhlIG1vZHVsZSAnJHtlLm5hbWV9Jy4gUGxlYXNlIGFkZCBhbiBATmdNb2R1bGUgYW5ub3RhdGlvbi5gKX19ZnVuY3Rpb24gcWIodCl7cmV0dXJuKHQ9WmUodCkpLm5nTW9kdWxlfHx0fWZ1bmN0aW9uIFpiKHQsZSl7bGV0IG49bnVsbDtyZXR1cm4gbyh0Ll9fYW5ub3RhdGlvbnNfXyksbyh0LmRlY29yYXRvcnMpLG47ZnVuY3Rpb24gbyh0KXt0JiZ0LmZvckVhY2goaSl9ZnVuY3Rpb24gaSh0KXtufHwoT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpLm5nTWV0YWRhdGFOYW1lPT1lP249dDp0LnR5cGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZih0LnR5cGUpLm5nTWV0YWRhdGFOYW1lPT1lJiYobj10LmFyZ3NbMF0pKX19bGV0IFhiPW5ldyBXZWFrTWFwLEtiPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIEpiKHQpe3JldHVyblsuLi50cihybChmbyh0PVplKHQpLCEwKS5leHBvcnRzKS5tYXAoKHQ9PmZvKHQpPyhZYih0LCExKSxKYih0KSk6dCkpKV19ZnVuY3Rpb24gUWIodCxlKXtjb25zdCBuPXRyKGUuZGVjbGFyYXRpb25zfHxXbiksbz10eSh0KTtuLmZvckVhY2goKGU9PntlLmhhc093blByb3BlcnR5KFluKT8kYihwbyhlKSxvKTplLmhhc093blByb3BlcnR5KHFuKXx8ZS5oYXNPd25Qcm9wZXJ0eShabil8fChlLm5nU2VsZWN0b3JTY29wZT10KX0pKX1mdW5jdGlvbiAkYih0LGUpe3QuZGlyZWN0aXZlRGVmcz0oKT0+QXJyYXkuZnJvbShlLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMpLm1hcCgodD0+dC5oYXNPd25Qcm9wZXJ0eShZbik/cG8odCk6bW8odCkpKS5maWx0ZXIoKHQ9PiEhdCkpLHQucGlwZURlZnM9KCk9PkFycmF5LmZyb20oZS5jb21waWxhdGlvbi5waXBlcykubWFwKCh0PT51byh0KSkpLHQuc2NoZW1hcz1lLnNjaGVtYXMsdC50Vmlldz1udWxsfWZ1bmN0aW9uIHR5KHQpe2lmKCFueSh0KSl0aHJvdyBuZXcgRXJyb3IoYCR7dC5uYW1lfSBkb2VzIG5vdCBoYXZlIGEgbW9kdWxlIGRlZiAoybVtb2QgcHJvcGVydHkpYCk7Y29uc3QgZT1mbyh0KTtpZihudWxsIT09ZS50cmFuc2l0aXZlQ29tcGlsZVNjb3BlcylyZXR1cm4gZS50cmFuc2l0aXZlQ29tcGlsZVNjb3Blcztjb25zdCBuPXtzY2hlbWFzOmUuc2NoZW1hc3x8bnVsbCxjb21waWxhdGlvbjp7ZGlyZWN0aXZlczpuZXcgU2V0LHBpcGVzOm5ldyBTZXR9LGV4cG9ydGVkOntkaXJlY3RpdmVzOm5ldyBTZXQscGlwZXM6bmV3IFNldH19O3JldHVybiBybChlLmltcG9ydHMpLmZvckVhY2goKHQ9Pntjb25zdCBlPXQ7aWYoIW55KGUpKXRocm93IG5ldyBFcnJvcihgSW1wb3J0aW5nICR7ZS5uYW1lfSB3aGljaCBkb2VzIG5vdCBoYXZlIGEgybVtb2QgcHJvcGVydHlgKTtjb25zdCBvPXR5KGUpO28uZXhwb3J0ZWQuZGlyZWN0aXZlcy5mb3JFYWNoKCh0PT5uLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKHQpKSksby5leHBvcnRlZC5waXBlcy5mb3JFYWNoKCh0PT5uLmNvbXBpbGF0aW9uLnBpcGVzLmFkZCh0KSkpfSkpLHJsKGUuZGVjbGFyYXRpb25zKS5mb3JFYWNoKCh0PT57dW8odCk/bi5jb21waWxhdGlvbi5waXBlcy5hZGQodCk6bi5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZCh0KX0pKSxybChlLmV4cG9ydHMpLmZvckVhY2goKHQ9Pntjb25zdCBlPXQ7aWYobnkoZSkpe2NvbnN0IHQ9dHkoZSk7dC5leHBvcnRlZC5kaXJlY3RpdmVzLmZvckVhY2goKHQ9PntuLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKHQpLG4uZXhwb3J0ZWQuZGlyZWN0aXZlcy5hZGQodCl9KSksdC5leHBvcnRlZC5waXBlcy5mb3JFYWNoKCh0PT57bi5jb21waWxhdGlvbi5waXBlcy5hZGQodCksbi5leHBvcnRlZC5waXBlcy5hZGQodCl9KSl9ZWxzZSB1byhlKT9uLmV4cG9ydGVkLnBpcGVzLmFkZChlKTpuLmV4cG9ydGVkLmRpcmVjdGl2ZXMuYWRkKGUpfSkpLGUudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM9bixufWZ1bmN0aW9uIGV5KHQpe3JldHVybihmdW5jdGlvbiBlKHQpe3JldHVybiB2b2lkIDAhPT10Lm5nTW9kdWxlfSkodCk/dC5uZ01vZHVsZTp0fWZ1bmN0aW9uIG55KHQpe3JldHVybiEhZm8odCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2xldCBveT0wO2Z1bmN0aW9uIGl5KHQsZSl7bGV0IG49bnVsbDtyeSh0LGV8fHt9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxxbix7Z2V0OigpPT57aWYobnVsbD09PW4pe2NvbnN0IG89YXkodCxlfHx7fSksaT1KYSh7dXNhZ2U6MCxraW5kOiJkaXJlY3RpdmUiLHR5cGU6dH0pO249aS5jb21waWxlRGlyZWN0aXZlKGFiLG8uc291cmNlTWFwVXJsLG8ubWV0YWRhdGEpfXJldHVybiBufSxjb25maWd1cmFibGU6ISFuZ0Rldk1vZGV9KX1mdW5jdGlvbiBheSh0LGUpe2NvbnN0IG49dCYmdC5uYW1lLG89YG5nOi8vLyR7bn0vybVkaXIuanNgLGk9SmEoe3VzYWdlOjAsa2luZDoiZGlyZWN0aXZlIix0eXBlOnR9KSxhPWx5KHQsZSk7cmV0dXJuIGEudHlwZVNvdXJjZVNwYW49aS5jcmVhdGVQYXJzZVNvdXJjZVNwYW4oIkRpcmVjdGl2ZSIsbixvKSxhLnVzZXNJbmhlcml0YW5jZSYmY3kodCkse21ldGFkYXRhOmEsc291cmNlTWFwVXJsOm99fWZ1bmN0aW9uIHJ5KHQsZSl7bGV0IG49bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxKbix7Z2V0OigpPT57aWYobnVsbD09PW4pe2NvbnN0IG89YXkodCxlKSxpPUphKHt1c2FnZTowLGtpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp0fSk7bj1pLmNvbXBpbGVGYWN0b3J5KGFiLGBuZzovLy8ke3QubmFtZX0vybVmYWMuanNgLHtuYW1lOm8ubWV0YWRhdGEubmFtZSx0eXBlOm8ubWV0YWRhdGEudHlwZSx0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6TnIodCksdGFyZ2V0OmkuRmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1yZXR1cm4gbn0sY29uZmlndXJhYmxlOiEhbmdEZXZNb2RlfSl9ZnVuY3Rpb24gc3kodCl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZih0LnByb3RvdHlwZSk9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIGx5KHQsZSl7Y29uc3Qgbj1UcigpLG89bi5vd25Qcm9wTWV0YWRhdGEodCk7cmV0dXJue25hbWU6dC5uYW1lLHR5cGU6dCxzZWxlY3Rvcjp2b2lkIDAhPT1lLnNlbGVjdG9yP2Uuc2VsZWN0b3I6bnVsbCxob3N0OmUuaG9zdHx8R24scHJvcE1ldGFkYXRhOm8saW5wdXRzOmUuaW5wdXRzfHxXbixvdXRwdXRzOmUub3V0cHV0c3x8V24scXVlcmllczpteSh0LG8sdXkpLGxpZmVjeWNsZTp7dXNlc09uQ2hhbmdlczpuLmhhc0xpZmVjeWNsZUhvb2sodCwibmdPbkNoYW5nZXMiKX0sdHlwZVNvdXJjZVNwYW46bnVsbCx1c2VzSW5oZXJpdGFuY2U6IXN5KHQpLGV4cG9ydEFzOihpPWUuZXhwb3J0QXMsdm9pZCAwPT09aT9udWxsOmh5KGkpKSxwcm92aWRlcnM6ZS5wcm92aWRlcnN8fG51bGwsdmlld1F1ZXJpZXM6bXkodCxvLGZ5KX07dmFyIGl9ZnVuY3Rpb24gY3kodCl7Y29uc3QgZT1PYmplY3QucHJvdG90eXBlO2xldCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZih0LnByb3RvdHlwZSkuY29uc3RydWN0b3I7Zm9yKDtuJiZuIT09ZTspbW8obil8fHBvKG4pfHwheXkobil8fGl5KG4sbnVsbCksbj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobil9ZnVuY3Rpb24gZHkodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P2h5KHQpOlplKHQpfWZ1bmN0aW9uIHB5KHQsZSl7cmV0dXJue3Byb3BlcnR5TmFtZTp0LHByZWRpY2F0ZTpkeShlLnNlbGVjdG9yKSxkZXNjZW5kYW50czplLmRlc2NlbmRhbnRzLGZpcnN0OmUuZmlyc3QscmVhZDplLnJlYWQ/ZS5yZWFkOm51bGwsc3RhdGljOiEhZS5zdGF0aWMsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ISFlLmVtaXREaXN0aW5jdENoYW5nZXNPbmx5fX1mdW5jdGlvbiBteSh0LGUsbil7Y29uc3Qgbz1bXTtmb3IoY29uc3QgaSBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkoaSkpe2NvbnN0IGE9ZVtpXTthLmZvckVhY2goKGU9PntpZihuKGUpKXtpZighZS5zZWxlY3Rvcil0aHJvdyBuZXcgRXJyb3IoYENhbid0IGNvbnN0cnVjdCBhIHF1ZXJ5IGZvciB0aGUgcHJvcGVydHkgIiR7aX0iIG9mICIke3RuKHQpfSIgc2luY2UgdGhlIHF1ZXJ5IHNlbGVjdG9yIHdhc24ndCBkZWZpbmVkLmApO2lmKGEuc29tZShneSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29tYmluZSBASW5wdXQgZGVjb3JhdG9ycyB3aXRoIHF1ZXJ5IGRlY29yYXRvcnMiKTtvLnB1c2gocHkoaSxlKSl9fSkpfXJldHVybiBvfWZ1bmN0aW9uIHV5KHQpe2NvbnN0IGU9dC5uZ01ldGFkYXRhTmFtZTtyZXR1cm4iQ29udGVudENoaWxkIj09PWV8fCJDb250ZW50Q2hpbGRyZW4iPT09ZX1mdW5jdGlvbiBmeSh0KXtjb25zdCBlPXQubmdNZXRhZGF0YU5hbWU7cmV0dXJuIlZpZXdDaGlsZCI9PT1lfHwiVmlld0NoaWxkcmVuIj09PWV9ZnVuY3Rpb24gZ3kodCl7cmV0dXJuIklucHV0Ij09PXQubmdNZXRhZGF0YU5hbWV9ZnVuY3Rpb24gaHkodCl7cmV0dXJuIHQuc3BsaXQoIiwiKS5tYXAoKHQ9PnQudHJpbSgpKSl9Y29uc3QgYnk9WyJuZ09uQ2hhbmdlcyIsIm5nT25Jbml0IiwibmdPbkRlc3Ryb3kiLCJuZ0RvQ2hlY2siLCJuZ0FmdGVyVmlld0luaXQiLCJuZ0FmdGVyVmlld0NoZWNrZWQiLCJuZ0FmdGVyQ29udGVudEluaXQiLCJuZ0FmdGVyQ29udGVudENoZWNrZWQiXTtmdW5jdGlvbiB5eSh0KXtjb25zdCBlPVRyKCk7aWYoYnkuc29tZSgobj0+ZS5oYXNMaWZlY3ljbGVIb29rKHQsbikpKSlyZXR1cm4hMDtjb25zdCBuPWUucHJvcE1ldGFkYXRhKHQpO2Zvcihjb25zdCB0IGluIG4pe2NvbnN0IGU9blt0XTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdLG89bi5uZ01ldGFkYXRhTmFtZTtpZihneShuKXx8dXkobil8fGZ5KG4pfHwiT3V0cHV0Ij09PW98fCJIb3N0QmluZGluZyI9PT1vfHwiSG9zdExpc3RlbmVyIj09PW8pcmV0dXJuITB9fXJldHVybiExfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBfeSh0LGUpe3JldHVybnt0eXBlOnQsbmFtZTp0Lm5hbWUscGlwZU5hbWU6ZS5uYW1lLHB1cmU6dm9pZCAwPT09ZS5wdXJlfHxlLnB1cmV9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBDeT1GYSgiRGlyZWN0aXZlIiwoKHQ9e30pPT50KSx2b2lkIDAsdm9pZCAwLCgodCxlKT0+RHkodCxlKSkpLE15PUZhKCJDb21wb25lbnQiLCgodD17fSk9Pk9iamVjdC5hc3NpZ24oe2NoYW5nZURldGVjdGlvbjp6bi5EZWZhdWx0fSx0KSksQ3ksdm9pZCAwLCgodCxlKT0+a3kodCxlKSkpLHZ5PUZhKCJQaXBlIiwodD0+T2JqZWN0LmFzc2lnbih7cHVyZTohMH0sdCkpLHZvaWQgMCx2b2lkIDAsKCh0LGUpPT5FeSh0LGUpKSkseHk9VmEoIklucHV0IiwodD0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOnR9KSkpLE95PVZhKCJPdXRwdXQiLCh0PT4oe2JpbmRpbmdQcm9wZXJ0eU5hbWU6dH0pKSksUHk9VmEoIkhvc3RCaW5kaW5nIiwodD0+KHtob3N0UHJvcGVydHlOYW1lOnR9KSkpLHd5PVZhKCJIb3N0TGlzdGVuZXIiLCgodCxlKT0+KHtldmVudE5hbWU6dCxhcmdzOmV9KSkpLGt5PWZ1bmN0aW9uIFN5KHQsZSl7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZVbigpO2xldCBuPW51bGw7IShmdW5jdGlvbiBvKHQsZSl7RnIoZSkmJihJci5zZXQodCxlKSxIci5hZGQodCkpfSkodCxlKSxyeSh0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFluLHtnZXQ6KCk9PntpZihudWxsPT09bil7Y29uc3Qgbz1KYSh7dXNhZ2U6MCxraW5kOiJjb21wb25lbnQiLHR5cGU6dH0pO2lmKEZyKGUpKXtjb25zdCBuPVtgQ29tcG9uZW50ICcke3QubmFtZX0nIGlzIG5vdCByZXNvbHZlZDpgXTt0aHJvdyBlLnRlbXBsYXRlVXJsJiZuLnB1c2goYCAtIHRlbXBsYXRlVXJsOiAke2UudGVtcGxhdGVVcmx9YCksZS5zdHlsZVVybHMmJmUuc3R5bGVVcmxzLmxlbmd0aCYmbi5wdXNoKGAgLSBzdHlsZVVybHM6ICR7SlNPTi5zdHJpbmdpZnkoZS5zdHlsZVVybHMpfWApLG4ucHVzaCgiRGlkIHlvdSBydW4gYW5kIHdhaXQgZm9yICdyZXNvbHZlQ29tcG9uZW50UmVzb3VyY2VzKCknPyIpLG5ldyBFcnJvcihuLmpvaW4oIlxuIikpfWNvbnN0IGk9KGZ1bmN0aW9uIG8oKXtyZXR1cm4gamJ9KSgpO2xldCBhPWUucHJlc2VydmVXaGl0ZXNwYWNlczt2b2lkIDA9PT1hJiYoYT1udWxsIT09aSYmdm9pZCAwIT09aS5wcmVzZXJ2ZVdoaXRlc3BhY2VzJiZpLnByZXNlcnZlV2hpdGVzcGFjZXMpO2xldCByPWUuZW5jYXBzdWxhdGlvbjt2b2lkIDA9PT1yJiYocj1udWxsIT09aSYmdm9pZCAwIT09aS5kZWZhdWx0RW5jYXBzdWxhdGlvbj9pLmRlZmF1bHRFbmNhcHN1bGF0aW9uOkhuLkVtdWxhdGVkKTtjb25zdCBzPWUudGVtcGxhdGVVcmx8fGBuZzovLy8ke3QubmFtZX0vdGVtcGxhdGUuaHRtbGAsbD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbHkodCxlKSkse3R5cGVTb3VyY2VTcGFuOm8uY3JlYXRlUGFyc2VTb3VyY2VTcGFuKCJDb21wb25lbnQiLHQubmFtZSxzKSx0ZW1wbGF0ZTplLnRlbXBsYXRlfHwiIixwcmVzZXJ2ZVdoaXRlc3BhY2VzOmEsc3R5bGVzOmUuc3R5bGVzfHxXbixhbmltYXRpb25zOmUuYW5pbWF0aW9ucyxkaXJlY3RpdmVzOltdLGNoYW5nZURldGVjdGlvbjplLmNoYW5nZURldGVjdGlvbixwaXBlczpuZXcgTWFwLGVuY2Fwc3VsYXRpb246cixpbnRlcnBvbGF0aW9uOmUuaW50ZXJwb2xhdGlvbix2aWV3UHJvdmlkZXJzOmUudmlld1Byb3ZpZGVyc3x8bnVsbH0pO295Kys7dHJ5e2wudXNlc0luaGVyaXRhbmNlJiZjeSh0KSxuPW8uY29tcGlsZUNvbXBvbmVudChhYixzLGwpfWZpbmFsbHl7b3ktLX1pZigwPT09b3kmJihmdW5jdGlvbiBpKCl7aWYoIUdiKXtHYj0hMDt0cnl7Zm9yKGxldCB0PVViLmxlbmd0aC0xO3Q+PTA7dC0tKXtjb25zdHttb2R1bGVUeXBlOmUsbmdNb2R1bGU6bn09VWJbdF07bi5kZWNsYXJhdGlvbnMmJm4uZGVjbGFyYXRpb25zLmV2ZXJ5KFdiKSYmKFViLnNwbGljZSh0LDEpLFFiKGUsbikpfX1maW5hbGx5e0diPSExfX19KSgpLChmdW5jdGlvbiBhKHQpe3JldHVybiB2b2lkIDAhPT10Lm5nU2VsZWN0b3JTY29wZX0pKHQpKXtjb25zdCBlPXR5KHQubmdTZWxlY3RvclNjb3BlKTskYihuLGUpfX1yZXR1cm4gbn0sY29uZmlndXJhYmxlOiEhbmdEZXZNb2RlfSl9LER5PWl5LEV5PWZ1bmN0aW9uIFJ5KHQsZSl7bGV0IG49bnVsbCxvPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsSm4se2dldDooKT0+e2lmKG51bGw9PT1vKXtjb25zdCBuPV95KHQsZSksaT1KYSh7dXNhZ2U6MCxraW5kOiJwaXBlIix0eXBlOm4udHlwZX0pO289aS5jb21waWxlRmFjdG9yeShhYixgbmc6Ly8vJHtuLm5hbWV9L8m1ZmFjLmpzYCx7bmFtZTpuLm5hbWUsdHlwZTpuLnR5cGUsdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOk5yKHQpLHRhcmdldDppLkZhY3RvcnlUYXJnZXQuUGlwZX0pfXJldHVybiBvfSxjb25maWd1cmFibGU6ISFuZ0Rldk1vZGV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxabix7Z2V0OigpPT57aWYobnVsbD09PW4pe2NvbnN0IG89X3kodCxlKSxpPUphKHt1c2FnZTowLGtpbmQ6InBpcGUiLHR5cGU6by50eXBlfSk7bj1pLmNvbXBpbGVQaXBlKGFiLGBuZzovLy8ke28ubmFtZX0vybVwaXBlLmpzYCxvKX1yZXR1cm4gbn0sY29uZmlndXJhYmxlOiEhbmdEZXZNb2RlfSl9LEF5PUZhKCJOZ01vZHVsZSIsKHQ9PnQpLHZvaWQgMCx2b2lkIDAsKCh0LGUpPT5UeSh0LGUpKSksVHk9ZnVuY3Rpb24gTnkodCxlPXt9KXshKGZ1bmN0aW9uIG4odCxlLG89ITEpe25nRGV2TW9kZSYmaG4odCwiUmVxdWlyZWQgdmFsdWUgbW9kdWxlVHlwZSIpLG5nRGV2TW9kZSYmaG4oZSwiUmVxdWlyZWQgdmFsdWUgbmdNb2R1bGUiKTtjb25zdCBpPXRyKGUuZGVjbGFyYXRpb25zfHxXbik7bGV0IGE9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxYbix7Y29uZmlndXJhYmxlOiEwLGdldDooKT0+e2lmKG51bGw9PT1hKXtpZihuZ0Rldk1vZGUmJmUuaW1wb3J0cyYmZS5pbXBvcnRzLmluZGV4T2YodCk+LTEpdGhyb3cgbmV3IEVycm9yKGAnJHt0bih0KX0nIG1vZHVsZSBjYW4ndCBpbXBvcnQgaXRzZWxmYCk7Y29uc3Qgbj1KYSh7dXNhZ2U6MCxraW5kOiJOZ01vZHVsZSIsdHlwZTp0fSk7YT1uLmNvbXBpbGVOZ01vZHVsZShhYixgbmc6Ly8vJHt0Lm5hbWV9L8m1bW9kLmpzYCx7dHlwZTp0LGJvb3RzdHJhcDp0cihlLmJvb3RzdHJhcHx8V24pLm1hcChaZSksZGVjbGFyYXRpb25zOmkubWFwKFplKSxpbXBvcnRzOnRyKGUuaW1wb3J0c3x8V24pLm1hcChaZSkubWFwKGV5KSxleHBvcnRzOnRyKGUuZXhwb3J0c3x8V24pLm1hcChaZSkubWFwKGV5KSxzY2hlbWFzOmUuc2NoZW1hcz90cihlLnNjaGVtYXMpOm51bGwsaWQ6ZS5pZHx8bnVsbH0pLGEuc2NoZW1hc3x8KGEuc2NoZW1hcz1bXSl9cmV0dXJuIGF9fSk7bGV0IHI9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxKbix7Z2V0OigpPT57aWYobnVsbD09PXIpe2NvbnN0IGU9SmEoe3VzYWdlOjAsa2luZDoiTmdNb2R1bGUiLHR5cGU6dH0pO3I9ZS5jb21waWxlRmFjdG9yeShhYixgbmc6Ly8vJHt0Lm5hbWV9L8m1ZmFjLmpzYCx7bmFtZTp0Lm5hbWUsdHlwZTp0LGRlcHM6TnIodCksdGFyZ2V0OmUuRmFjdG9yeVRhcmdldC5OZ01vZHVsZSx0eXBlQXJndW1lbnRDb3VudDowfSl9cmV0dXJuIHJ9LGNvbmZpZ3VyYWJsZTohIW5nRGV2TW9kZX0pO2xldCBzPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsa24se2dldDooKT0+e2lmKG51bGw9PT1zKXtuZ0Rldk1vZGUmJlliKHQsbyk7Y29uc3Qgbj17bmFtZTp0Lm5hbWUsdHlwZTp0LHByb3ZpZGVyczplLnByb3ZpZGVyc3x8V24saW1wb3J0czpbKGUuaW1wb3J0c3x8V24pLm1hcChaZSksKGUuZXhwb3J0c3x8V24pLm1hcChaZSldfSxpPUphKHt1c2FnZTowLGtpbmQ6Ik5nTW9kdWxlIix0eXBlOnR9KTtzPWkuY29tcGlsZUluamVjdG9yKGFiLGBuZzovLy8ke3QubmFtZX0vybVpbmouanNgLG4pfXJldHVybiBzfSxjb25maWd1cmFibGU6ISFuZ0Rldk1vZGV9KX0pKHQsZSksKGZ1bmN0aW9uIG8odCxlKXtVYi5wdXNoKHttb2R1bGVUeXBlOnQsbmdNb2R1bGU6ZX0pfSkodCxlKX0senk9bmV3IEdhKCJBcHBsaWNhdGlvbiBJbml0aWFsaXplciIpO2NsYXNzIEl5e2NvbnN0cnVjdG9yKHQpe3RoaXMuYXBwSW5pdHM9dCx0aGlzLnJlc29sdmU9ZmcsdGhpcy5yZWplY3Q9ZmcsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZSgoKHQsZSk9Pnt0aGlzLnJlc29sdmU9dCx0aGlzLnJlamVjdD1lfSkpfXJ1bkluaXRpYWxpemVycygpe2lmKHRoaXMuaW5pdGlhbGl6ZWQpcmV0dXJuO2NvbnN0IHQ9W10sZT0oKT0+e3RoaXMuZG9uZT0hMCx0aGlzLnJlc29sdmUoKX07aWYodGhpcy5hcHBJbml0cylmb3IobGV0IGU9MDtlPHRoaXMuYXBwSW5pdHMubGVuZ3RoO2UrKyl7Y29uc3Qgbj10aGlzLmFwcEluaXRzW2VdKCk7aWYoRm0obikpdC5wdXNoKG4pO2Vsc2UgaWYoQm0obikpe2NvbnN0IGU9bmV3IFByb21pc2UoKCh0LGUpPT57bi5zdWJzY3JpYmUoe2NvbXBsZXRlOnQsZXJyb3I6ZX0pfSkpO3QucHVzaChlKX19UHJvbWlzZS5hbGwodCkudGhlbigoKCk9PntlKCl9KSkuY2F0Y2goKHQ9Pnt0aGlzLnJlamVjdCh0KX0pKSwwPT09dC5sZW5ndGgmJmUoKSx0aGlzLmluaXRpYWxpemVkPSEwfX1JeS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SXkpKHZyKHp5LDgpKX0sSXkuybVwcm92PU1uKHt0b2tlbjpJeSxmYWN0b3J5Okl5Lsm1ZmFjfSksSXkuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbenldfSx7dHlwZTpTcn1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChJeSxbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W3p5XX0se3R5cGU6U3J9XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBIeT1uZXcgR2EoIkFwcElkIiksRnk9e3Byb3ZpZGU6SHksdXNlRmFjdG9yeTpmdW5jdGlvbiBMeSgpe3JldHVybmAke0J5KCl9JHtCeSgpfSR7QnkoKX1gfSxkZXBzOltdfTtmdW5jdGlvbiBCeSgpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3K01hdGguZmxvb3IoMjUqTWF0aC5yYW5kb20oKSkpfWNvbnN0IFZ5PW5ldyBHYSgiUGxhdGZvcm0gSW5pdGlhbGl6ZXIiKSxqeT1uZXcgR2EoIlBsYXRmb3JtIElEIiksVXk9bmV3IEdhKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpO25ldyBHYSgiQXBwbGljYXRpb24gUGFja2FnZXMgUm9vdCBVUkwiKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIEd5e2xvZyh0KXtjb25zb2xlLmxvZyh0KX13YXJuKHQpe2NvbnNvbGUud2Fybih0KX19R3kuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEd5KX0sR3kuybVwcm92PU1uKHt0b2tlbjpHeSxmYWN0b3J5Okd5Lsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChHeSxbe3R5cGU6aW19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgV3k9bmV3IEdhKCJMb2NhbGVJZCIpLFl5PW5ldyBHYSgiRGVmYXVsdEN1cnJlbmN5Q29kZSIpO3ZhciBxeTtuZXcgR2EoIlRyYW5zbGF0aW9ucyIpLG5ldyBHYSgiVHJhbnNsYXRpb25zRm9ybWF0IiksKGZ1bmN0aW9uKHQpe3RbdC5FcnJvcj0wXT0iRXJyb3IiLHRbdC5XYXJuaW5nPTFdPSJXYXJuaW5nIix0W3QuSWdub3JlPTJdPSJJZ25vcmUifSkocXl8fChxeT17fSkpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgWnl7Y29uc3RydWN0b3IodCxlKXt0aGlzLm5nTW9kdWxlRmFjdG9yeT10LHRoaXMuY29tcG9uZW50RmFjdG9yaWVzPWV9fWNvbnN0IFh5PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgX2godCl9LEt5PVh5LEp5PWZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLnJlc29sdmUoWHkodCkpfSxReT1mdW5jdGlvbih0KXtjb25zdCBlPVh5KHQpLG49cmwoZm8odCkuZGVjbGFyYXRpb25zKS5yZWR1Y2UoKCh0LGUpPT57Y29uc3Qgbj1wbyhlKTtyZXR1cm4gbiYmdC5wdXNoKG5ldyBmaChuKSksdH0pLFtdKTtyZXR1cm4gbmV3IFp5KGUsbil9LCR5PVF5LHRfPWZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLnJlc29sdmUoUXkodCkpfTtjbGFzcyBlX3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29tcGlsZU1vZHVsZVN5bmM9S3ksdGhpcy5jb21waWxlTW9kdWxlQXN5bmM9SnksdGhpcy5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmM9JHksdGhpcy5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jPXRffWNsZWFyQ2FjaGUoKXt9Y2xlYXJDYWNoZUZvcih0KXt9Z2V0TW9kdWxlSWQodCl7fX1lXy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZV8pfSxlXy7JtXByb3Y9TW4oe3Rva2VuOmVfLGZhY3Rvcnk6ZV8uybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGVfLFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVybltdfSksbnVsbCk7Y29uc3Qgbl89bmV3IEdhKCJjb21waWxlck9wdGlvbnMiKSxvXz1Qcm9taXNlLnJlc29sdmUoMCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGlfKHQpeyJ1bmRlZmluZWQiPT10eXBlb2YgWm9uZT9vXy50aGVuKCgoKT0+e3QmJnQuYXBwbHkobnVsbCxudWxsKX0pKTpab25lLmN1cnJlbnQuc2NoZWR1bGVNaWNyb1Rhc2soInNjaGVkdWxlTWljcm90YXNrIix0KX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBhX3tjb25zdHJ1Y3Rvcih7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6dD0hMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOmU9ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246bj0hMX0pe2lmKHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgTGgoITEpLHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgTGgoITEpLHRoaXMub25TdGFibGU9bmV3IExoKCExKSx0aGlzLm9uRXJyb3I9bmV3IExoKCExKSwidW5kZWZpbmVkIj09dHlwZW9mIFpvbmUpdGhyb3cgbmV3IEVycm9yKCJJbiB0aGlzIGNvbmZpZ3VyYXRpb24gQW5ndWxhciByZXF1aXJlcyBab25lLmpzIik7Wm9uZS5hc3NlcnRab25lUGF0Y2hlZCgpO2NvbnN0IG89dGhpcztvLl9uZXN0aW5nPTAsby5fb3V0ZXI9by5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMmJihvLl9pbm5lcj1vLl9pbm5lci5mb3JrKG5ldyBab25lLlRhc2tUcmFja2luZ1pvbmVTcGVjKSksdCYmWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjJiYoby5faW5uZXI9by5faW5uZXIuZm9yayhab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMpKSxvLnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb249IW4mJmUsby5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbj1uLG8ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPS0xLG8ubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lPShmdW5jdGlvbiBpKCl7bGV0IHQ9am4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lLGU9am4uY2FuY2VsQW5pbWF0aW9uRnJhbWU7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBab25lJiZ0JiZlKXtjb25zdCBuPXRbWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO24mJih0PW4pO2NvbnN0IG89ZVtab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07byYmKGU9byl9cmV0dXJue25hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZTp0LG5hdGl2ZUNhbmNlbEFuaW1hdGlvbkZyYW1lOmV9fSkoKS5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsKGZ1bmN0aW9uIGEodCl7Y29uc3QgZT0oKT0+eyEoZnVuY3Rpb24gZSh0KXt0LmlzQ2hlY2tTdGFibGVSdW5uaW5nfHwtMSE9PXQubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkfHwodC5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9dC5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUuY2FsbChqbiwoKCk9Pnt0LmZha2VUb3BFdmVudFRhc2t8fCh0LmZha2VUb3BFdmVudFRhc2s9Wm9uZS5yb290LnNjaGVkdWxlRXZlbnRUYXNrKCJmYWtlVG9wRXZlbnRUYXNrIiwoKCk9Pnt0Lmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZD0tMSxsXyh0KSx0LmlzQ2hlY2tTdGFibGVSdW5uaW5nPSEwLHNfKHQpLHQuaXNDaGVja1N0YWJsZVJ1bm5pbmc9ITF9KSx2b2lkIDAsKCgpPT57fSksKCgpPT57fSkpKSx0LmZha2VUb3BFdmVudFRhc2suaW52b2tlKCl9KSksbF8odCkpfSkodCl9O3QuX2lubmVyPXQuX2lubmVyLmZvcmsoe25hbWU6ImFuZ3VsYXIiLHByb3BlcnRpZXM6e2lzQW5ndWxhclpvbmU6ITB9LG9uSW52b2tlVGFzazoobixvLGksYSxyLHMpPT57dHJ5e3JldHVybiBjXyh0KSxuLmludm9rZVRhc2soaSxhLHIscyl9ZmluYWxseXsodC5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uJiYiZXZlbnRUYXNrIj09PWEudHlwZXx8dC5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbikmJmUoKSxkXyh0KX19LG9uSW52b2tlOihuLG8saSxhLHIscyxsKT0+e3RyeXtyZXR1cm4gY18odCksbi5pbnZva2UoaSxhLHIscyxsKX1maW5hbGx5e3Quc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24mJmUoKSxkXyh0KX19LG9uSGFzVGFzazooZSxuLG8saSk9PntlLmhhc1Rhc2sobyxpKSxuPT09byYmKCJtaWNyb1Rhc2siPT1pLmNoYW5nZT8odC5faGFzUGVuZGluZ01pY3JvdGFza3M9aS5taWNyb1Rhc2ssbF8odCksc18odCkpOiJtYWNyb1Rhc2siPT1pLmNoYW5nZSYmKHQuaGFzUGVuZGluZ01hY3JvdGFza3M9aS5tYWNyb1Rhc2spKX0sb25IYW5kbGVFcnJvcjooZSxuLG8saSk9PihlLmhhbmRsZUVycm9yKG8saSksdC5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PnQub25FcnJvci5lbWl0KGkpKSksITEpfSl9KShvKX1zdGF0aWMgaXNJbkFuZ3VsYXJab25lKCl7cmV0dXJuITA9PT1ab25lLmN1cnJlbnQuZ2V0KCJpc0FuZ3VsYXJab25lIil9c3RhdGljIGFzc2VydEluQW5ndWxhclpvbmUoKXtpZighYV8uaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0byBiZSBpbiBBbmd1bGFyIFpvbmUsIGJ1dCBpdCBpcyBub3QhIil9c3RhdGljIGFzc2VydE5vdEluQW5ndWxhclpvbmUoKXtpZihhXy5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRvIG5vdCBiZSBpbiBBbmd1bGFyIFpvbmUsIGJ1dCBpdCBpcyEiKX1ydW4odCxlLG4pe3JldHVybiB0aGlzLl9pbm5lci5ydW4odCxlLG4pfXJ1blRhc2sodCxlLG4sbyl7Y29uc3QgaT10aGlzLl9pbm5lcixhPWkuc2NoZWR1bGVFdmVudFRhc2soIk5nWm9uZUV2ZW50OiAiK28sdCxyXyxmZyxmZyk7dHJ5e3JldHVybiBpLnJ1blRhc2soYSxlLG4pfWZpbmFsbHl7aS5jYW5jZWxUYXNrKGEpfX1ydW5HdWFyZGVkKHQsZSxuKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuR3VhcmRlZCh0LGUsbil9cnVuT3V0c2lkZUFuZ3VsYXIodCl7cmV0dXJuIHRoaXMuX291dGVyLnJ1bih0KX19Y29uc3Qgcl89e307ZnVuY3Rpb24gc18odCl7aWYoMD09dC5fbmVzdGluZyYmIXQuaGFzUGVuZGluZ01pY3JvdGFza3MmJiF0LmlzU3RhYmxlKXRyeXt0Ll9uZXN0aW5nKyssdC5vbk1pY3JvdGFza0VtcHR5LmVtaXQobnVsbCl9ZmluYWxseXtpZih0Ll9uZXN0aW5nLS0sIXQuaGFzUGVuZGluZ01pY3JvdGFza3MpdHJ5e3QucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT50Lm9uU3RhYmxlLmVtaXQobnVsbCkpKX1maW5hbGx5e3QuaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBsXyh0KXt0Lmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSEhKHQuX2hhc1BlbmRpbmdNaWNyb3Rhc2tzfHwodC5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9ufHx0LnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uKSYmLTEhPT10Lmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCl9ZnVuY3Rpb24gY18odCl7dC5fbmVzdGluZysrLHQuaXNTdGFibGUmJih0LmlzU3RhYmxlPSExLHQub25VbnN0YWJsZS5lbWl0KG51bGwpKX1mdW5jdGlvbiBkXyh0KXt0Ll9uZXN0aW5nLS0sc18odCl9Y2xhc3MgcF97Y29uc3RydWN0b3IoKXt0aGlzLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IExoLHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgTGgsdGhpcy5vblN0YWJsZT1uZXcgTGgsdGhpcy5vbkVycm9yPW5ldyBMaH1ydW4odCxlLG4pe3JldHVybiB0LmFwcGx5KGUsbil9cnVuR3VhcmRlZCh0LGUsbil7cmV0dXJuIHQuYXBwbHkoZSxuKX1ydW5PdXRzaWRlQW5ndWxhcih0KXtyZXR1cm4gdCgpfXJ1blRhc2sodCxlLG4sbyl7cmV0dXJuIHQuYXBwbHkoZSxuKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIG1fe2NvbnN0cnVjdG9yKHQpe3RoaXMuX25nWm9uZT10LHRoaXMuX3BlbmRpbmdDb3VudD0wLHRoaXMuX2lzWm9uZVN0YWJsZT0hMCx0aGlzLl9kaWRXb3JrPSExLHRoaXMuX2NhbGxiYWNrcz1bXSx0aGlzLnRhc2tUcmFja2luZ1pvbmU9bnVsbCx0aGlzLl93YXRjaEFuZ3VsYXJFdmVudHMoKSx0LnJ1bigoKCk9Pnt0aGlzLnRhc2tUcmFja2luZ1pvbmU9InVuZGVmaW5lZCI9PXR5cGVvZiBab25lP251bGw6Wm9uZS5jdXJyZW50LmdldCgiVGFza1RyYWNraW5nWm9uZSIpfSkpfV93YXRjaEFuZ3VsYXJFdmVudHMoKXt0aGlzLl9uZ1pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9Pnt0aGlzLl9kaWRXb3JrPSEwLHRoaXMuX2lzWm9uZVN0YWJsZT0hMX19KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57dGhpcy5fbmdab25lLm9uU3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e2FfLmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSxpXygoKCk9Pnt0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSkpfX0pfSkpfWluY3JlYXNlUGVuZGluZ1JlcXVlc3RDb3VudCgpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnQrPTEsdGhpcy5fZGlkV29yaz0hMCx0aGlzLl9wZW5kaW5nQ291bnR9ZGVjcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7aWYodGhpcy5fcGVuZGluZ0NvdW50LT0xLHRoaXMuX3BlbmRpbmdDb3VudDwwKXRocm93IG5ldyBFcnJvcigicGVuZGluZyBhc3luYyByZXF1ZXN0cyBiZWxvdyB6ZXJvIik7cmV0dXJuIHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKSx0aGlzLl9wZW5kaW5nQ291bnR9aXNTdGFibGUoKXtyZXR1cm4gdGhpcy5faXNab25lU3RhYmxlJiYwPT09dGhpcy5fcGVuZGluZ0NvdW50JiYhdGhpcy5fbmdab25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfV9ydW5DYWxsYmFja3NJZlJlYWR5KCl7aWYodGhpcy5pc1N0YWJsZSgpKWlfKCgoKT0+e2Zvcig7MCE9PXRoaXMuX2NhbGxiYWNrcy5sZW5ndGg7KXtsZXQgdD10aGlzLl9jYWxsYmFja3MucG9wKCk7Y2xlYXJUaW1lb3V0KHQudGltZW91dElkKSx0LmRvbmVDYih0aGlzLl9kaWRXb3JrKX10aGlzLl9kaWRXb3JrPSExfSkpO2Vsc2V7bGV0IHQ9dGhpcy5nZXRQZW5kaW5nVGFza3MoKTt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcigoZT0+IWUudXBkYXRlQ2J8fCFlLnVwZGF0ZUNiKHQpfHwoY2xlYXJUaW1lb3V0KGUudGltZW91dElkKSwhMSkpKSx0aGlzLl9kaWRXb3JrPSEwfX1nZXRQZW5kaW5nVGFza3MoKXtyZXR1cm4gdGhpcy50YXNrVHJhY2tpbmdab25lP3RoaXMudGFza1RyYWNraW5nWm9uZS5tYWNyb1Rhc2tzLm1hcCgodD0+KHtzb3VyY2U6dC5zb3VyY2UsY3JlYXRpb25Mb2NhdGlvbjp0LmNyZWF0aW9uTG9jYXRpb24sZGF0YTp0LmRhdGF9KSkpOltdfWFkZENhbGxiYWNrKHQsZSxuKXtsZXQgbz0tMTtlJiZlPjAmJihvPXNldFRpbWVvdXQoKCgpPT57dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIoKHQ9PnQudGltZW91dElkIT09bykpLHQodGhpcy5fZGlkV29yayx0aGlzLmdldFBlbmRpbmdUYXNrcygpKX0pLGUpKSx0aGlzLl9jYWxsYmFja3MucHVzaCh7ZG9uZUNiOnQsdGltZW91dElkOm8sdXBkYXRlQ2I6bn0pfXdoZW5TdGFibGUodCxlLG4pe2lmKG4mJiF0aGlzLnRhc2tUcmFja2luZ1pvbmUpdGhyb3cgbmV3IEVycm9yKCdUYXNrIHRyYWNraW5nIHpvbmUgaXMgcmVxdWlyZWQgd2hlbiBwYXNzaW5nIGFuIHVwZGF0ZSBjYWxsYmFjayB0byB3aGVuU3RhYmxlKCkuIElzICJ6b25lLmpzL3BsdWdpbnMvdGFzay10cmFja2luZyIgbG9hZGVkPycpO3RoaXMuYWRkQ2FsbGJhY2sodCxlLG4pLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX1nZXRQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudH1maW5kUHJvdmlkZXJzKHQsZSxuKXtyZXR1cm5bXX19bV8uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG1fKSh2cihhXykpfSxtXy7JtXByb3Y9TW4oe3Rva2VuOm1fLGZhY3Rvcnk6bV8uybVmYWN9KSxtXy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmFffV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChtXyxbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6YV99XX0pLG51bGwpO2NsYXNzIHVfe2NvbnN0cnVjdG9yKCl7dGhpcy5fYXBwbGljYXRpb25zPW5ldyBNYXAsZ18uYWRkVG9XaW5kb3codGhpcyl9cmVnaXN0ZXJBcHBsaWNhdGlvbih0LGUpe3RoaXMuX2FwcGxpY2F0aW9ucy5zZXQodCxlKX11bnJlZ2lzdGVyQXBwbGljYXRpb24odCl7dGhpcy5fYXBwbGljYXRpb25zLmRlbGV0ZSh0KX11bnJlZ2lzdGVyQWxsQXBwbGljYXRpb25zKCl7dGhpcy5fYXBwbGljYXRpb25zLmNsZWFyKCl9Z2V0VGVzdGFiaWxpdHkodCl7cmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9ucy5nZXQodCl8fG51bGx9Z2V0QWxsVGVzdGFiaWxpdGllcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2FwcGxpY2F0aW9ucy52YWx1ZXMoKSl9Z2V0QWxsUm9vdEVsZW1lbnRzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLmtleXMoKSl9ZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQsZT0hMCl7cmV0dXJuIGdfLmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0aGlzLHQsZSl9fXVfLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx1Xyl9LHVfLsm1cHJvdj1Nbih7dG9rZW46dV8sZmFjdG9yeTp1Xy7JtWZhY30pLHVfLmN0b3JQYXJhbWV0ZXJzPSgpPT5bXSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHVfLFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVybltdfSksbnVsbCk7bGV0IGZfLGdfPW5ldyBjbGFzc3thZGRUb1dpbmRvdyh0KXt9ZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQsZSxuKXtyZXR1cm4gbnVsbH19LGhfPSEwLGJfPSExOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiB5Xygpe3JldHVybiBiXz0hMCxoX31jb25zdCBfXz1uZXcgR2EoIkFsbG93TXVsdGlwbGVUb2tlbiIpO2Z1bmN0aW9uIENfKHQsZSxuPVtdKXtjb25zdCBvPWBQbGF0Zm9ybTogJHtlfWAsaT1uZXcgR2Eobyk7cmV0dXJuKGU9W10pPT57bGV0IGE9TV8oKTtpZighYXx8YS5pbmplY3Rvci5nZXQoX18sITEpKWlmKHQpdChuLmNvbmNhdChlKS5jb25jYXQoe3Byb3ZpZGU6aSx1c2VWYWx1ZTohMH0pKTtlbHNle2NvbnN0IHQ9bi5jb25jYXQoZSkuY29uY2F0KHtwcm92aWRlOmksdXNlVmFsdWU6ITB9LHtwcm92aWRlOllkLHVzZVZhbHVlOiJwbGF0Zm9ybSJ9KTshKGZ1bmN0aW9uIHIodCl7aWYoZl8mJiFmXy5kZXN0cm95ZWQmJiFmXy5pbmplY3Rvci5nZXQoX18sITEpKXRocm93IG5ldyBFcnJvcigiVGhlcmUgY2FuIGJlIG9ubHkgb25lIHBsYXRmb3JtLiBEZXN0cm95IHRoZSBwcmV2aW91cyBvbmUgdG8gY3JlYXRlIGEgbmV3IG9uZS4iKTsoZnVuY3Rpb24gZSgpe25nRGV2TW9kZSYmKGZ1bmN0aW9uIHQoKXtfcHx8KF9wPSEwLENwKCLJtXNldFByb2ZpbGVyIixZbyksQ3AoImdldERpcmVjdGl2ZU1ldGFkYXRhIix1cCksQ3AoImdldENvbXBvbmVudCIsc3ApLENwKCJnZXRDb250ZXh0IixscCksQ3AoImdldExpc3RlbmVycyIsZ3ApLENwKCJnZXRPd25pbmdDb21wb25lbnQiLGNwKSxDcCgiZ2V0SG9zdEVsZW1lbnQiLGZwKSxDcCgiZ2V0SW5qZWN0b3IiLHBwKSxDcCgiZ2V0Um9vdENvbXBvbmVudHMiLGRwKSxDcCgiZ2V0RGlyZWN0aXZlcyIsbXApLENwKCJhcHBseUNoYW5nZXMiLHlwKSl9KSgpfSkoKSxmXz10LmdldCh2Xyk7Y29uc3Qgbj10LmdldChWeSxudWxsKTtuJiZuLmZvckVhY2goKHQ9PnQoKSkpfSkocnAuY3JlYXRlKHtwcm92aWRlcnM6dCxuYW1lOm99KSl9cmV0dXJuKGZ1bmN0aW9uIHModCl7Y29uc3QgZT1NXygpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiTm8gcGxhdGZvcm0gZXhpc3RzISIpO2lmKCFlLmluamVjdG9yLmdldCh0LG51bGwpKXRocm93IG5ldyBFcnJvcigiQSBwbGF0Zm9ybSB3aXRoIGEgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gY3JlYXRlZC4gUGxlYXNlIGRlc3Ryb3kgaXQgZmlyc3QuIik7cmV0dXJuIGV9KShpKX19ZnVuY3Rpb24gTV8oKXtyZXR1cm4gZl8mJiFmXy5kZXN0cm95ZWQ/Zl86bnVsbH1jbGFzcyB2X3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9pbmplY3Rvcj10LHRoaXMuX21vZHVsZXM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITF9Ym9vdHN0cmFwTW9kdWxlRmFjdG9yeSh0LGUpe2NvbnN0IG49KGZ1bmN0aW9uIG8odCxlKXtsZXQgbjtyZXR1cm4gbj0ibm9vcCI9PT10P25ldyBwXzooInpvbmUuanMiPT09dD92b2lkIDA6dCl8fG5ldyBhXyh7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6eV8oKSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOiEhKG51bGw9PWU/dm9pZCAwOmUubmdab25lRXZlbnRDb2FsZXNjaW5nKSxzaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbjohIShudWxsPT1lP3ZvaWQgMDplLm5nWm9uZVJ1bkNvYWxlc2NpbmcpfSksbn0pKGU/ZS5uZ1pvbmU6dm9pZCAwLHtuZ1pvbmVFdmVudENvYWxlc2Npbmc6ZSYmZS5uZ1pvbmVFdmVudENvYWxlc2Npbmd8fCExLG5nWm9uZVJ1bkNvYWxlc2Npbmc6ZSYmZS5uZ1pvbmVSdW5Db2FsZXNjaW5nfHwhMX0pLGk9W3twcm92aWRlOmFfLHVzZVZhbHVlOm59XTtyZXR1cm4gbi5ydW4oKCgpPT57Y29uc3QgZT1ycC5jcmVhdGUoe3Byb3ZpZGVyczppLHBhcmVudDp0aGlzLmluamVjdG9yLG5hbWU6dC5tb2R1bGVUeXBlLm5hbWV9KSxvPXQuY3JlYXRlKGUpLGE9by5pbmplY3Rvci5nZXQoWnMsbnVsbCk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJObyBFcnJvckhhbmRsZXIuIElzIHBsYXRmb3JtIG1vZHVsZSAoQnJvd3Nlck1vZHVsZSkgaW5jbHVkZWQ/Iik7cmV0dXJuIG4ucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57Y29uc3QgdD1uLm9uRXJyb3Iuc3Vic2NyaWJlKHtuZXh0OnQ9PnthLmhhbmRsZUVycm9yKHQpfX0pO28ub25EZXN0cm95KCgoKT0+e1BfKHRoaXMuX21vZHVsZXMsbyksdC51bnN1YnNjcmliZSgpfSkpfSkpLChmdW5jdGlvbiByKHQsZSxuKXt0cnl7Y29uc3Qgbz1uKCk7cmV0dXJuIEZtKG8pP28uY2F0Y2goKG49Pnt0aHJvdyBlLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+dC5oYW5kbGVFcnJvcihuKSkpLG59KSk6b31jYXRjaChuKXt0aHJvdyBlLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+dC5oYW5kbGVFcnJvcihuKSkpLG59fSkoYSxuLCgoKT0+e2NvbnN0IHQ9by5pbmplY3Rvci5nZXQoSXkpO3JldHVybiB0LnJ1bkluaXRpYWxpemVycygpLHQuZG9uZVByb21pc2UudGhlbigoKCk9PihYdShvLmluamVjdG9yLmdldChXeSxHdSl8fEd1KSx0aGlzLl9tb2R1bGVEb0Jvb3RzdHJhcChvKSxvKSkpfSkpfSkpfWJvb3RzdHJhcE1vZHVsZSh0LGU9W10pe2NvbnN0IG49eF8oe30sZSk7cmV0dXJuKGZ1bmN0aW9uIG8odCxlLG4pe25nRGV2TW9kZSYmKGZ1bmN0aW9uIG8odCxlPSJUeXBlIHBhc3NlZCBpbiBpcyBub3QgTmdNb2R1bGVUeXBlLCBpdCBkb2VzIG5vdCBoYXZlICfJtW1vZCcgcHJvcGVydHkuIil7Zm8odCl8fGJuKGUpfSkobik7Y29uc3QgaT1uZXcgX2gobik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBuZ0ppdE1vZGUmJiFuZ0ppdE1vZGUpcmV0dXJuIFByb21pc2UucmVzb2x2ZShpKTtjb25zdCBhPXQuZ2V0KG5fLFtdKS5jb25jYXQoZSk7aWYoKGZ1bmN0aW9uIHIodCl7aWYobnVsbCE9PWpiKXtpZih0LmRlZmF1bHRFbmNhcHN1bGF0aW9uIT09amIuZGVmYXVsdEVuY2Fwc3VsYXRpb24pcmV0dXJuIHZvaWQobmdEZXZNb2RlJiZjb25zb2xlLmVycm9yKCJQcm92aWRlZCB2YWx1ZSBmb3IgYGRlZmF1bHRFbmNhcHN1bGF0aW9uYCBjYW4gbm90IGJlIGNoYW5nZWQgb25jZSBpdCBoYXMgYmVlbiBzZXQuIikpO2lmKHQucHJlc2VydmVXaGl0ZXNwYWNlcyE9PWpiLnByZXNlcnZlV2hpdGVzcGFjZXMpcmV0dXJuIHZvaWQobmdEZXZNb2RlJiZjb25zb2xlLmVycm9yKCJQcm92aWRlZCB2YWx1ZSBmb3IgYHByZXNlcnZlV2hpdGVzcGFjZXNgIGNhbiBub3QgYmUgY2hhbmdlZCBvbmNlIGl0IGhhcyBiZWVuIHNldC4iKSl9amI9dH0pKHtkZWZhdWx0RW5jYXBzdWxhdGlvbjp3XyhhLm1hcCgodD0+dC5kZWZhdWx0RW5jYXBzdWxhdGlvbikpKSxwcmVzZXJ2ZVdoaXRlc3BhY2VzOndfKGEubWFwKCh0PT50LnByZXNlcnZlV2hpdGVzcGFjZXMpKSl9KSwoZnVuY3Rpb24gcygpe3JldHVybiAwPT09SXIuc2l6ZX0pKCkpcmV0dXJuIFByb21pc2UucmVzb2x2ZShpKTtjb25zdCBsPShmdW5jdGlvbiBjKHQpe2NvbnN0IGU9W107cmV0dXJuIHQuZm9yRWFjaCgodD0+dCYmZS5wdXNoKC4uLnQpKSksZX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKShhLm1hcCgodD0+dC5wcm92aWRlcnMpKSk7aWYoMD09PWwubGVuZ3RoKXJldHVybiBQcm9taXNlLnJlc29sdmUoaSk7Y29uc3QgZD1KYSh7dXNhZ2U6MCxraW5kOiJOZ01vZHVsZSIsdHlwZTpufSkscD1ycC5jcmVhdGUoe3Byb3ZpZGVyczpsfSkuZ2V0KGQuUmVzb3VyY2VMb2FkZXIpO3JldHVybihmdW5jdGlvbiBtKHQpe2NvbnN0IGU9W10sbj1uZXcgTWFwO2Z1bmN0aW9uIG8oZSl7bGV0IG89bi5nZXQoZSk7aWYoIW8pe2NvbnN0IGk9dChlKTtuLnNldChlLG89aS50aGVuKExyKSl9cmV0dXJuIG99cmV0dXJuIElyLmZvckVhY2goKCh0LG4pPT57Y29uc3QgaT1bXTt0LnRlbXBsYXRlVXJsJiZpLnB1c2gobyh0LnRlbXBsYXRlVXJsKS50aGVuKChlPT57dC50ZW1wbGF0ZT1lfSkpKTtjb25zdCBhPXQuc3R5bGVVcmxzLHI9dC5zdHlsZXN8fCh0LnN0eWxlcz1bXSkscz10LnN0eWxlcy5sZW5ndGg7YSYmYS5mb3JFYWNoKCgoZSxuKT0+e3IucHVzaCgiIiksaS5wdXNoKG8oZSkudGhlbigobz0+e3JbcytuXT1vLGEuc3BsaWNlKGEuaW5kZXhPZihlKSwxKSwwPT1hLmxlbmd0aCYmKHQuc3R5bGVVcmxzPXZvaWQgMCl9KSkpfSkpO2NvbnN0IGw9UHJvbWlzZS5hbGwoaSkudGhlbigoKCk9PihmdW5jdGlvbiB0KGUpe0hyLmRlbGV0ZShlKX0pKG4pKSk7ZS5wdXNoKGwpfSkpLChmdW5jdGlvbiBpKCl7SXI9bmV3IE1hcH0pKCksUHJvbWlzZS5hbGwoZSkudGhlbigoKCk9Pnt9KSl9KSgodD0+UHJvbWlzZS5yZXNvbHZlKHAuZ2V0KHQpKSkpLnRoZW4oKCgpPT5pKSl9KSh0aGlzLmluamVjdG9yLG4sdCkudGhlbigodD0+dGhpcy5ib290c3RyYXBNb2R1bGVGYWN0b3J5KHQsbikpKX1fbW9kdWxlRG9Cb290c3RyYXAodCl7Y29uc3QgZT10LmluamVjdG9yLmdldChPXyk7aWYodC5fYm9vdHN0cmFwQ29tcG9uZW50cy5sZW5ndGg+MCl0Ll9ib290c3RyYXBDb21wb25lbnRzLmZvckVhY2goKHQ9PmUuYm9vdHN0cmFwKHQpKSk7ZWxzZXtpZighdC5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyBFcnJvcihgVGhlIG1vZHVsZSAke0dlKHQuaW5zdGFuY2UuY29uc3RydWN0b3IpfSB3YXMgYm9vdHN0cmFwcGVkLCBidXQgaXQgZG9lcyBub3QgZGVjbGFyZSAiQE5nTW9kdWxlLmJvb3RzdHJhcCIgY29tcG9uZW50cyBub3IgYSAibmdEb0Jvb3RzdHJhcCIgbWV0aG9kLiBQbGVhc2UgZGVmaW5lIG9uZSBvZiB0aGVzZS5gKTt0Lmluc3RhbmNlLm5nRG9Cb290c3RyYXAoZSl9dGhpcy5fbW9kdWxlcy5wdXNoKHQpfW9uRGVzdHJveSh0KXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2godCl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGxhdGZvcm0gaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQhIik7dGhpcy5fbW9kdWxlcy5zbGljZSgpLmZvckVhY2goKHQ9PnQuZGVzdHJveSgpKSksdGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9kZXN0cm95ZWQ9ITB9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9fWZ1bmN0aW9uIHhfKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5yZWR1Y2UoeF8sdCk6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLGUpfXZfLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx2XykodnIocnApKX0sdl8uybVwcm92PU1uKHt0b2tlbjp2XyxmYWN0b3J5OnZfLsm1ZmFjfSksdl8uY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpycH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgodl8sW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnJwfV19KSxudWxsKTtjbGFzcyBPX3tjb25zdHJ1Y3Rvcih0LGUsbixvLGkpe3RoaXMuX3pvbmU9dCx0aGlzLl9pbmplY3Rvcj1lLHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXI9bix0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9byx0aGlzLl9pbml0U3RhdHVzPWksdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX3ZpZXdzPVtdLHRoaXMuX3J1bm5pbmdUaWNrPSExLHRoaXMuX3N0YWJsZT0hMCx0aGlzLmNvbXBvbmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLl9vbk1pY3JvdGFza0VtcHR5U3Vic2NyaXB0aW9uPXRoaXMuX3pvbmUub25NaWNyb3Rhc2tFbXB0eS5zdWJzY3JpYmUoe25leHQ6KCk9Pnt0aGlzLl96b25lLnJ1bigoKCk9Pnt0aGlzLnRpY2soKX0pKX19KTtjb25zdCBhPW5ldyBEKCh0PT57dGhpcy5fc3RhYmxlPXRoaXMuX3pvbmUuaXNTdGFibGUmJiF0aGlzLl96b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhdGhpcy5fem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcyx0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e3QubmV4dCh0aGlzLl9zdGFibGUpLHQuY29tcGxldGUoKX0pKX0pKSxyPW5ldyBEKCh0PT57bGV0IGU7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PntlPXRoaXMuX3pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgoKT0+e2FfLmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSxpXygoKCk9Pnt0aGlzLl9zdGFibGV8fHRoaXMuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N8fHRoaXMuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3N8fCh0aGlzLl9zdGFibGU9ITAsdC5uZXh0KCEwKSl9KSl9KSl9KSk7Y29uc3Qgbj10aGlzLl96b25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKCgoKT0+e2FfLmFzc2VydEluQW5ndWxhclpvbmUoKSx0aGlzLl9zdGFibGUmJih0aGlzLl9zdGFibGU9ITEsdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pnt0Lm5leHQoITEpfSkpKX0pKTtyZXR1cm4oKT0+e2UudW5zdWJzY3JpYmUoKSxuLnVuc3Vic2NyaWJlKCl9fSkpO3RoaXMuaXNTdGFibGU9cmUoYSxyLnBpcGUoRWUoKSkpfWJvb3RzdHJhcCh0LGUpe2lmKCF0aGlzLl9pbml0U3RhdHVzLmRvbmUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgYm9vdHN0cmFwIGFzIHRoZXJlIGFyZSBzdGlsbCBhc3luY2hyb25vdXMgaW5pdGlhbGl6ZXJzIHJ1bm5pbmcuIEJvb3RzdHJhcCBjb21wb25lbnRzIGluIHRoZSBgbmdEb0Jvb3RzdHJhcGAgbWV0aG9kIG9mIHRoZSByb290IG1vZHVsZS4iKTtsZXQgbjtuPXQgaW5zdGFuY2VvZiBtZz90OnRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KSx0aGlzLmNvbXBvbmVudFR5cGVzLnB1c2gobi5jb21wb25lbnRUeXBlKTtjb25zdCBvPShmdW5jdGlvbiBpKHQpe3JldHVybiB0LmlzQm91bmRUb01vZHVsZX0pKG4pP3ZvaWQgMDp0aGlzLl9pbmplY3Rvci5nZXQodGgpLGE9bi5jcmVhdGUocnAuTlVMTCxbXSxlfHxuLnNlbGVjdG9yLG8pLHI9YS5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LHM9YS5pbmplY3Rvci5nZXQobV8sbnVsbCksbD1zJiZhLmluamVjdG9yLmdldCh1Xyk7cmV0dXJuIHMmJmwmJmwucmVnaXN0ZXJBcHBsaWNhdGlvbihyLHMpLGEub25EZXN0cm95KCgoKT0+e3RoaXMuZGV0YWNoVmlldyhhLmhvc3RWaWV3KSxQXyh0aGlzLmNvbXBvbmVudHMsYSksbCYmbC51bnJlZ2lzdGVyQXBwbGljYXRpb24ocil9KSksdGhpcy5fbG9hZENvbXBvbmVudChhKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJnlfKCkmJnRoaXMuX2luamVjdG9yLmdldChHeSkubG9nKCJBbmd1bGFyIGlzIHJ1bm5pbmcgaW4gZGV2ZWxvcG1lbnQgbW9kZS4gQ2FsbCBlbmFibGVQcm9kTW9kZSgpIHRvIGVuYWJsZSBwcm9kdWN0aW9uIG1vZGUuIiksYX10aWNrKCl7aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IEVycm9yKCJBcHBsaWNhdGlvblJlZi50aWNrIGlzIGNhbGxlZCByZWN1cnNpdmVseSIpO3RyeXt0aGlzLl9ydW5uaW5nVGljaz0hMDtmb3IobGV0IHQgb2YgdGhpcy5fdmlld3MpdC5kZXRlY3RDaGFuZ2VzKCk7aWYoKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZ5XygpKWZvcihsZXQgdCBvZiB0aGlzLl92aWV3cyl0LmNoZWNrTm9DaGFuZ2VzKCl9Y2F0Y2godCl7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PnRoaXMuX2V4Y2VwdGlvbkhhbmRsZXIuaGFuZGxlRXJyb3IodCkpKX1maW5hbGx5e3RoaXMuX3J1bm5pbmdUaWNrPSExfX1hdHRhY2hWaWV3KHQpe2NvbnN0IGU9dDt0aGlzLl92aWV3cy5wdXNoKGUpLGUuYXR0YWNoVG9BcHBSZWYodGhpcyl9ZGV0YWNoVmlldyh0KXtjb25zdCBlPXQ7UF8odGhpcy5fdmlld3MsZSksZS5kZXRhY2hGcm9tQXBwUmVmKCl9X2xvYWRDb21wb25lbnQodCl7dGhpcy5hdHRhY2hWaWV3KHQuaG9zdFZpZXcpLHRoaXMudGljaygpLHRoaXMuY29tcG9uZW50cy5wdXNoKHQpLHRoaXMuX2luamVjdG9yLmdldChVeSxbXSkuY29uY2F0KHRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycykuZm9yRWFjaCgoZT0+ZSh0KSkpfW5nT25EZXN0cm95KCl7dGhpcy5fdmlld3Muc2xpY2UoKS5mb3JFYWNoKCh0PT50LmRlc3Ryb3koKSkpLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1nZXQgdmlld0NvdW50KCl7cmV0dXJuIHRoaXMuX3ZpZXdzLmxlbmd0aH19ZnVuY3Rpb24gUF8odCxlKXtjb25zdCBuPXQuaW5kZXhPZihlKTtuPi0xJiZ0LnNwbGljZShuLDEpfWZ1bmN0aW9uIHdfKHQpe2ZvcihsZXQgZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKWlmKHZvaWQgMCE9PXRbZV0pcmV0dXJuIHRbZV19T18uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE9fKSh2cihhXyksdnIocnApLHZyKFpzKSx2cih1ZyksdnIoSXkpKX0sT18uybVwcm92PU1uKHt0b2tlbjpPXyxmYWN0b3J5Ok9fLsm1ZmFjfSksT18uY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTphX30se3R5cGU6cnB9LHt0eXBlOlpzfSx7dHlwZTp1Z30se3R5cGU6SXl9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKE9fLFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTphX30se3R5cGU6cnB9LHt0eXBlOlpzfSx7dHlwZTp1Z30se3R5cGU6SXl9XX0pLG51bGwpO2NsYXNzIGtfe31jb25zdCBTXz17ZmFjdG9yeVBhdGhQcmVmaXg6IiIsZmFjdG9yeVBhdGhTdWZmaXg6Ii5uZ2ZhY3RvcnkifTtjbGFzcyBEX3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2NvbXBpbGVyPXQsdGhpcy5fY29uZmlnPWV8fFNffWxvYWQodCl7cmV0dXJuIHRoaXMubG9hZEFuZENvbXBpbGUodCl9bG9hZEFuZENvbXBpbGUodCl7bGV0W2Usbl09dC5zcGxpdCgiIyIpO3JldHVybiB2b2lkIDA9PT1uJiYobj0iZGVmYXVsdCIpLFN5c3RlbS5pbXBvcnQoZSkudGhlbigodD0+dFtuXSkpLnRoZW4oKHQ9PkVfKHQsZSxuKSkpLnRoZW4oKHQ9PnRoaXMuX2NvbXBpbGVyLmNvbXBpbGVNb2R1bGVBc3luYyh0KSkpfWxvYWRGYWN0b3J5KHQpe2xldFtlLG5dPXQuc3BsaXQoIiMiKSxvPSJOZ0ZhY3RvcnkiO3JldHVybiB2b2lkIDA9PT1uJiYobj0iZGVmYXVsdCIsbz0iIiksU3lzdGVtLmltcG9ydCh0aGlzLl9jb25maWcuZmFjdG9yeVBhdGhQcmVmaXgrZSt0aGlzLl9jb25maWcuZmFjdG9yeVBhdGhTdWZmaXgpLnRoZW4oKHQ9PnRbbitvXSkpLnRoZW4oKHQ9PkVfKHQsZSxuKSkpfX1mdW5jdGlvbiBFXyh0LGUsbil7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCAnJHtufScgaW4gJyR7ZX0nYCk7cmV0dXJuIHR9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL0RfLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxEXykodnIoZV8pLHZyKGtfLDgpKX0sRF8uybVwcm92PU1uKHt0b2tlbjpEXyxmYWN0b3J5OkRfLsm1ZmFjfSksRF8uY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTplX30se3R5cGU6a18sZGVjb3JhdG9yczpbe3R5cGU6U3J9XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoRF8sW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmVffSx7dHlwZTprXyxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfV19KSxudWxsKTtjb25zdCBSXz1DXyhudWxsLCJjb3JlIixbe3Byb3ZpZGU6anksdXNlVmFsdWU6InVua25vd24ifSx7cHJvdmlkZTp2XyxkZXBzOltycF19LHtwcm92aWRlOnVfLGRlcHM6W119LHtwcm92aWRlOkd5LGRlcHM6W119XSksQV89W3twcm92aWRlOk9fLHVzZUNsYXNzOk9fLGRlcHM6W2FfLHJwLFpzLHVnLEl5XX0se3Byb3ZpZGU6dWgsZGVwczpbYV9dLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gVF8odCl7bGV0IGU9W107cmV0dXJuIHQub25TdGFibGUuc3Vic2NyaWJlKCgoKT0+e2Zvcig7ZS5sZW5ndGg7KWUucG9wKCkoKX0pKSxmdW5jdGlvbih0KXtlLnB1c2godCl9fX0se3Byb3ZpZGU6SXksdXNlQ2xhc3M6SXksZGVwczpbW25ldyBTcix6eV1dfSx7cHJvdmlkZTplXyx1c2VDbGFzczplXyxkZXBzOltdfSxGeSx7cHJvdmlkZTpIZyx1c2VGYWN0b3J5OgovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gTl8oKXtyZXR1cm4gcWd9LGRlcHM6W119LHtwcm92aWRlOkxnLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gel8oKXtyZXR1cm4gWmd9LGRlcHM6W119LHtwcm92aWRlOld5LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gSV8odCl7cmV0dXJuIFh1KHQ9dHx8KGZ1bmN0aW9uIGUoKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBnb29nJiYiZW4iIT09Z29vZy5nZXRMb2NhbGUoKT9nb29nLmdldExvY2FsZSgpOiJ1bmRlZmluZWQiIT10eXBlb2YgJGxvY2FsaXplJiYkbG9jYWxpemUubG9jYWxlfHxHdX0pKCkpLHR9LGRlcHM6W1tuZXcga3IoV3kpLG5ldyBTcixuZXcgRXJdXX0se3Byb3ZpZGU6WXksdXNlVmFsdWU6IlVTRCJ9XTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIEhfe2NvbnN0cnVjdG9yKHQpe319dmFyIEZfLExfO0hfLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxIXykodnIoT18pKX0sSF8uybVtb2Q9YW8oe3R5cGU6SF99KSxIXy7JtWluaj12bih7cHJvdmlkZXJzOkFffSksSF8uY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpPX31dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoSF8sW3t0eXBlOkF5LGFyZ3M6W3twcm92aWRlcnM6QV99XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpPX31dfSksbnVsbCksKGZ1bmN0aW9uKHQpe3RbdC5DcmVhdGVWaWV3Tm9kZXM9MF09IkNyZWF0ZVZpZXdOb2RlcyIsdFt0LkNoZWNrTm9DaGFuZ2VzPTFdPSJDaGVja05vQ2hhbmdlcyIsdFt0LkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3M9Ml09IkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3MiLHRbdC5DaGVja0FuZFVwZGF0ZT0zXT0iQ2hlY2tBbmRVcGRhdGUiLHRbdC5DaGVja0FuZFVwZGF0ZVByb2plY3RlZFZpZXdzPTRdPSJDaGVja0FuZFVwZGF0ZVByb2plY3RlZFZpZXdzIix0W3QuRGVzdHJveT01XT0iRGVzdHJveSJ9KShGX3x8KEZfPXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5jcmVhdGU9MF09ImNyZWF0ZSIsdFt0LmRldGVjdENoYW5nZXM9MV09ImRldGVjdENoYW5nZXMiLHRbdC5jaGVja05vQ2hhbmdlcz0yXT0iY2hlY2tOb0NoYW5nZXMiLHRbdC5kZXN0cm95PTNdPSJkZXN0cm95Iix0W3QuaGFuZGxlRXZlbnQ9NF09ImhhbmRsZUV2ZW50In0pKExffHwoTF89e30pKSwKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KInVuZGVmaW5lZCIhPXR5cGVvZiBuZ0Rldk1vZGUmJm5nRGV2TW9kZSYmKGpuLiRsb2NhbGl6ZT1qbi4kbG9jYWxpemV8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJJdCBsb29rcyBsaWtlIHlvdXIgYXBwbGljYXRpb24gb3Igb25lIG9mIGl0cyBkZXBlbmRlbmNpZXMgaXMgdXNpbmcgaTE4bi5cbkFuZ3VsYXIgOSBpbnRyb2R1Y2VkIGEgZ2xvYmFsIGAkbG9jYWxpemUoKWAgZnVuY3Rpb24gdGhhdCBuZWVkcyB0byBiZSBsb2FkZWQuXG5QbGVhc2UgcnVuIGBuZyBhZGQgQGFuZ3VsYXIvbG9jYWxpemVgIGZyb20gdGhlIEFuZ3VsYXIgQ0xJLlxuKEZvciBub24tQ0xJIHByb2plY3RzLCBhZGQgYGltcG9ydCAnQGFuZ3VsYXIvbG9jYWxpemUvaW5pdCc7YCB0byB5b3VyIGBwb2x5ZmlsbHMudHNgIGZpbGUuXG5Gb3Igc2VydmVyLXNpZGUgcmVuZGVyaW5nIGFwcGxpY2F0aW9ucyBhZGQgdGhlIGltcG9ydCB0byB5b3VyIGBtYWluLnNlcnZlci50c2AgZmlsZS4pIil9KQovKioKICAgICAqIEBsaWNlbnNlIEFuZ3VsYXIgdjEyLjIuMQogICAgICogKGMpIDIwMTAtMjAyMSBHb29nbGUgTExDLiBodHRwczovL2FuZ3VsYXIuaW8vCiAgICAgKiBMaWNlbnNlOiBNSVQKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi87Y29uc3QgQl89InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzLFZfPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3csal89InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiYidW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYsVV89InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWwmJmdsb2JhbCxHXz1mdW5jdGlvbih0LC4uLmUpe2lmKEdfLnRyYW5zbGF0ZSl7Y29uc3Qgbj1HXy50cmFuc2xhdGUodCxlKTt0PW5bMF0sZT1uWzFdfWxldCBuPVdfKHRbMF0sdC5yYXdbMF0pO2ZvcihsZXQgbz0xO288dC5sZW5ndGg7bysrKW4rPWVbby0xXStXXyh0W29dLHQucmF3W29dKTtyZXR1cm4gbn07ZnVuY3Rpb24gV18odCxlKXtyZXR1cm4iOiI9PT1lLmNoYXJBdCgwKT90LnN1YnN0cmluZygoZnVuY3Rpb24gbih0LGUpe2ZvcihsZXQgbj0xLG89MTtuPHQubGVuZ3RoO24rKyxvKyspaWYoIlxcIj09PWVbb10pbysrO2Vsc2UgaWYoIjoiPT09dFtuXSlyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoYFVudGVybWluYXRlZCAkbG9jYWxpemUgbWV0YWRhdGEgYmxvY2sgaW4gIiR7ZX0iLmApfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKSh0LGUpKzEpOnR9KEJffHxVX3x8Vl98fGpfKS4kbG9jYWxpemU9R187Ci8qKgogICAgICogQGxpY2Vuc2UgQW5ndWxhciB2MTIuMi4xCiAgICAgKiAoYykgMjAxMC0yMDIxIEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5pby8KICAgICAqIExpY2Vuc2U6IE1JVAogICAgICovCmxldCBZXz1udWxsO2Z1bmN0aW9uIHFfKCl7cmV0dXJuIFlffQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgWl89bmV3IEdhKCJEb2N1bWVudFRva2VuIik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFhfe2hpc3RvcnlHbyh0KXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfX1mdW5jdGlvbiBLXygpe3JldHVybiB2cihKXyl9WF8uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFhfKX0sWF8uybVwcm92PU1uKHtmYWN0b3J5OktfLHRva2VuOlhfLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoWF8sW3t0eXBlOmltLGFyZ3M6W3twcm92aWRlZEluOiJwbGF0Zm9ybSIsdXNlRmFjdG9yeTpLX31dfV0sbnVsbCxudWxsKSxuZXcgR2EoIkxvY2F0aW9uIEluaXRpYWxpemVkIik7Y2xhc3MgSl8gZXh0ZW5kcyBYX3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2RvYz10LHRoaXMuX2luaXQoKX1faW5pdCgpe3RoaXMubG9jYXRpb249d2luZG93LmxvY2F0aW9uLHRoaXMuX2hpc3Rvcnk9d2luZG93Lmhpc3Rvcnl9Z2V0QmFzZUhyZWZGcm9tRE9NKCl7cmV0dXJuIHFfKCkuZ2V0QmFzZUhyZWYodGhpcy5fZG9jKX1vblBvcFN0YXRlKHQpe2NvbnN0IGU9cV8oKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpO3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIix0LCExKSwoKT0+ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsdCl9b25IYXNoQ2hhbmdlKHQpe2NvbnN0IGU9cV8oKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpO3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHQsITEpLCgpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHQpfWdldCBocmVmKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uaHJlZn1nZXQgcHJvdG9jb2woKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5wcm90b2NvbH1nZXQgaG9zdG5hbWUoKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5ob3N0bmFtZX1nZXQgcG9ydCgpe3JldHVybiB0aGlzLmxvY2F0aW9uLnBvcnR9Z2V0IHBhdGhuYW1lKCl7cmV0dXJuIHRoaXMubG9jYXRpb24ucGF0aG5hbWV9Z2V0IHNlYXJjaCgpe3JldHVybiB0aGlzLmxvY2F0aW9uLnNlYXJjaH1nZXQgaGFzaCgpe3JldHVybiB0aGlzLmxvY2F0aW9uLmhhc2h9c2V0IHBhdGhuYW1lKHQpe3RoaXMubG9jYXRpb24ucGF0aG5hbWU9dH1wdXNoU3RhdGUodCxlLG4pe1FfKCk/dGhpcy5faGlzdG9yeS5wdXNoU3RhdGUodCxlLG4pOnRoaXMubG9jYXRpb24uaGFzaD1ufXJlcGxhY2VTdGF0ZSh0LGUsbil7UV8oKT90aGlzLl9oaXN0b3J5LnJlcGxhY2VTdGF0ZSh0LGUsbik6dGhpcy5sb2NhdGlvbi5oYXNoPW59Zm9yd2FyZCgpe3RoaXMuX2hpc3RvcnkuZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9oaXN0b3J5LmJhY2soKX1oaXN0b3J5R28odD0wKXt0aGlzLl9oaXN0b3J5LmdvKHQpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX2hpc3Rvcnkuc3RhdGV9fWZ1bmN0aW9uIFFfKCl7cmV0dXJuISF3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGV9ZnVuY3Rpb24gJF8oKXtyZXR1cm4gbmV3IEpfKHZyKFpfKSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiB0Qyh0LGUpe2lmKDA9PXQubGVuZ3RoKXJldHVybiBlO2lmKDA9PWUubGVuZ3RoKXJldHVybiB0O2xldCBuPTA7cmV0dXJuIHQuZW5kc1dpdGgoIi8iKSYmbisrLGUuc3RhcnRzV2l0aCgiLyIpJiZuKyssMj09bj90K2Uuc3Vic3RyaW5nKDEpOjE9PW4/dCtlOnQrIi8iK2V9ZnVuY3Rpb24gZUModCl7Y29uc3QgZT10Lm1hdGNoKC8jfFw/fCQvKSxuPWUmJmUuaW5kZXh8fHQubGVuZ3RoO3JldHVybiB0LnNsaWNlKDAsbi0oIi8iPT09dFtuLTFdPzE6MCkpK3Quc2xpY2Uobil9ZnVuY3Rpb24gbkModCl7cmV0dXJuIHQmJiI/IiE9PXRbMF0/Ij8iK3Q6dH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovSl8uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEpfKSh2cihaXykpfSxKXy7JtXByb3Y9TW4oe2ZhY3Rvcnk6JF8sdG9rZW46Sl8scHJvdmlkZWRJbjoicGxhdGZvcm0ifSksSl8uY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEpfLFt7dHlwZTppbSxhcmdzOlt7cHJvdmlkZWRJbjoicGxhdGZvcm0iLHVzZUZhY3Rvcnk6JF99XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19XX0pLG51bGwpO2NsYXNzIG9De2hpc3RvcnlHbyh0KXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfX1mdW5jdGlvbiBpQyh0KXtjb25zdCBlPXZyKFpfKS5sb2NhdGlvbjtyZXR1cm4gbmV3IHJDKHZyKFhfKSxlJiZlLm9yaWdpbnx8IiIpfW9DLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxvQyl9LG9DLsm1cHJvdj1Nbih7ZmFjdG9yeTppQyx0b2tlbjpvQyxwcm92aWRlZEluOiJyb290In0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgob0MsW3t0eXBlOmltLGFyZ3M6W3twcm92aWRlZEluOiJyb290Iix1c2VGYWN0b3J5OmlDfV19XSxudWxsLG51bGwpO2NvbnN0IGFDPW5ldyBHYSgiYXBwQmFzZUhyZWYiKTtjbGFzcyByQyBleHRlbmRzIG9De2NvbnN0cnVjdG9yKHQsZSl7aWYoc3VwZXIoKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPXQsdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnM9W10sbnVsbD09ZSYmKGU9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKSksbnVsbD09ZSl0aHJvdyBuZXcgRXJyb3IoIk5vIGJhc2UgaHJlZiBzZXQuIFBsZWFzZSBwcm92aWRlIGEgdmFsdWUgZm9yIHRoZSBBUFBfQkFTRV9IUkVGIHRva2VuIG9yIGFkZCBhIGJhc2UgZWxlbWVudCB0byB0aGUgZG9jdW1lbnQuIik7dGhpcy5fYmFzZUhyZWY9ZX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUodCl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUodCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UodCkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXByZXBhcmVFeHRlcm5hbFVybCh0KXtyZXR1cm4gdEModGhpcy5fYmFzZUhyZWYsdCl9cGF0aCh0PSExKXtjb25zdCBlPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrbkModGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLG49dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBuJiZ0P2Ake2V9JHtufWA6ZX1wdXNoU3RhdGUodCxlLG4sbyl7Y29uc3QgaT10aGlzLnByZXBhcmVFeHRlcm5hbFVybChuK25DKG8pKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZSh0LGUsaSl9cmVwbGFjZVN0YXRlKHQsZSxuLG8pe2NvbnN0IGk9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobituQyhvKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUodCxlLGkpfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9aGlzdG9yeUdvKHQ9MCl7dmFyIGUsbjtudWxsPT09KG49KGU9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbikuaGlzdG9yeUdvKXx8dm9pZCAwPT09bnx8bi5jYWxsKGUsdCl9fXJDLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxyQykodnIoWF8pLHZyKGFDLDgpKX0sckMuybVwcm92PU1uKHt0b2tlbjpyQyxmYWN0b3J5OnJDLsm1ZmFjfSksckMuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpYX30se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOlthQ119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgockMsW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlhffSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W2FDXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHNDIGV4dGVuZHMgb0N7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb249dCx0aGlzLl9iYXNlSHJlZj0iIix0aGlzLl9yZW1vdmVMaXN0ZW5lckZucz1bXSxudWxsIT1lJiYodGhpcy5fYmFzZUhyZWY9ZSl9bmdPbkRlc3Ryb3koKXtmb3IoO3RoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLmxlbmd0aDspdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucG9wKCkoKX1vblBvcFN0YXRlKHQpe3RoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnB1c2godGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKHQpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKHQpKX1nZXRCYXNlSHJlZigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn1wYXRoKHQ9ITEpe2xldCBlPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaDtyZXR1cm4gbnVsbD09ZSYmKGU9IiMiKSxlLmxlbmd0aD4wP2Uuc3Vic3RyaW5nKDEpOmV9cHJlcGFyZUV4dGVybmFsVXJsKHQpe2NvbnN0IGU9dEModGhpcy5fYmFzZUhyZWYsdCk7cmV0dXJuIGUubGVuZ3RoPjA/IiMiK2U6ZX1wdXNoU3RhdGUodCxlLG4sbyl7bGV0IGk9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobituQyhvKSk7MD09aS5sZW5ndGgmJihpPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKHQsZSxpKX1yZXBsYWNlU3RhdGUodCxlLG4sbyl7bGV0IGk9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobituQyhvKSk7MD09aS5sZW5ndGgmJihpPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVwbGFjZVN0YXRlKHQsZSxpKX1mb3J3YXJkKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpfWhpc3RvcnlHbyh0PTApe3ZhciBlLG47bnVsbD09PShuPShlPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24pLmhpc3RvcnlHbyl8fHZvaWQgMD09PW58fG4uY2FsbChlLHQpfX1zQy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8c0MpKHZyKFhfKSx2cihhQyw4KSl9LHNDLsm1cHJvdj1Nbih7dG9rZW46c0MsZmFjdG9yeTpzQy7JtWZhY30pLHNDLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WF99LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbYUNdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHNDLFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYX30se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOlthQ119XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBsQ3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3N1YmplY3Q9bmV3IExoLHRoaXMuX3VybENoYW5nZUxpc3RlbmVycz1bXSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5PXQ7Y29uc3Qgbj10aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LmdldEJhc2VIcmVmKCk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1lLHRoaXMuX2Jhc2VIcmVmPWVDKGRDKG4pKSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5Lm9uUG9wU3RhdGUoKHQ9Pnt0aGlzLl9zdWJqZWN0LmVtaXQoe3VybDp0aGlzLnBhdGgoITApLHBvcDohMCxzdGF0ZTp0LnN0YXRlLHR5cGU6dC50eXBlfSl9KSl9cGF0aCh0PSExKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUodGhpcy5fcGxhdGZvcm1TdHJhdGVneS5wYXRoKHQpKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aXNDdXJyZW50UGF0aEVxdWFsVG8odCxlPSIiKXtyZXR1cm4gdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKHQrbkMoZSkpfW5vcm1hbGl6ZSh0KXtyZXR1cm4gbEMuc3RyaXBUcmFpbGluZ1NsYXNoKChmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHQmJm4uc3RhcnRzV2l0aCh0KT9uLnN1YnN0cmluZyh0Lmxlbmd0aCk6bn0pKHRoaXMuX2Jhc2VIcmVmLGRDKHQpKSl9cHJlcGFyZUV4dGVybmFsVXJsKHQpe3JldHVybiB0JiYiLyIhPT10WzBdJiYodD0iLyIrdCksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwodCl9Z28odCxlPSIiLG49bnVsbCl7dGhpcy5fcGxhdGZvcm1TdHJhdGVneS5wdXNoU3RhdGUobiwiIix0LGUpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybCh0K25DKGUpKSxuKX1yZXBsYWNlU3RhdGUodCxlPSIiLG49bnVsbCl7dGhpcy5fcGxhdGZvcm1TdHJhdGVneS5yZXBsYWNlU3RhdGUobiwiIix0LGUpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybCh0K25DKGUpKSxuKX1mb3J3YXJkKCl7dGhpcy5fcGxhdGZvcm1TdHJhdGVneS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuYmFjaygpfWhpc3RvcnlHbyh0PTApe3ZhciBlLG47bnVsbD09PShuPShlPXRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kpLmhpc3RvcnlHbyl8fHZvaWQgMD09PW58fG4uY2FsbChlLHQpfW9uVXJsQ2hhbmdlKHQpe3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5wdXNoKHQpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbnx8KHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj10aGlzLnN1YnNjcmliZSgodD0+e3RoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0LnVybCx0LnN0YXRlKX0pKSl9X25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0PSIiLGUpe3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5mb3JFYWNoKChuPT5uKHQsZSkpKX1zdWJzY3JpYmUodCxlLG4pe3JldHVybiB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7bmV4dDp0LGVycm9yOmUsY29tcGxldGU6bn0pfX1mdW5jdGlvbiBjQygpe3JldHVybiBuZXcgbEModnIob0MpLHZyKFhfKSl9ZnVuY3Rpb24gZEModCl7cmV0dXJuIHQucmVwbGFjZSgvXC9pbmRleC5odG1sJC8sIiIpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovbEMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGxDKSh2cihvQyksdnIoWF8pKX0sbEMubm9ybWFsaXplUXVlcnlQYXJhbXM9bkMsbEMuam9pbldpdGhTbGFzaD10QyxsQy5zdHJpcFRyYWlsaW5nU2xhc2g9ZUMsbEMuybVwcm92PU1uKHtmYWN0b3J5OmNDLHRva2VuOmxDLHByb3ZpZGVkSW46InJvb3QifSksbEMuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpvQ30se3R5cGU6WF99XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGxDLFt7dHlwZTppbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCIsdXNlRmFjdG9yeTpjQ31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOm9DfSx7dHlwZTpYX31dfSksbnVsbCk7Y29uc3QgcEM9e0FEUDpbdm9pZCAwLHZvaWQgMCwwXSxBRk46W3ZvaWQgMCx2b2lkIDAsMF0sQUxMOlt2b2lkIDAsdm9pZCAwLDBdLEFNRDpbdm9pZCAwLHZvaWQgMCwyXSxBT0E6W3ZvaWQgMCwiS3oiXSxBUlM6W3ZvaWQgMCwiJCJdLEFVRDpbIkEkIiwiJCJdLEJBTTpbdm9pZCAwLCJLTSJdLEJCRDpbdm9pZCAwLCIkIl0sQkRUOlt2b2lkIDAsIuCnsyJdLEJIRDpbdm9pZCAwLHZvaWQgMCwzXSxCSUY6W3ZvaWQgMCx2b2lkIDAsMF0sQk1EOlt2b2lkIDAsIiQiXSxCTkQ6W3ZvaWQgMCwiJCJdLEJPQjpbdm9pZCAwLCJCcyJdLEJSTDpbIlIkIl0sQlNEOlt2b2lkIDAsIiQiXSxCV1A6W3ZvaWQgMCwiUCJdLEJZTjpbdm9pZCAwLCLRgC4iLDJdLEJZUjpbdm9pZCAwLHZvaWQgMCwwXSxCWkQ6W3ZvaWQgMCwiJCJdLENBRDpbIkNBJCIsIiQiLDJdLENIRjpbdm9pZCAwLHZvaWQgMCwyXSxDTEY6W3ZvaWQgMCx2b2lkIDAsNF0sQ0xQOlt2b2lkIDAsIiQiLDBdLENOWTpbIkNOwqUiLCLCpSJdLENPUDpbdm9pZCAwLCIkIiwyXSxDUkM6W3ZvaWQgMCwi4oKhIiwyXSxDVUM6W3ZvaWQgMCwiJCJdLENVUDpbdm9pZCAwLCIkIl0sQ1pLOlt2b2lkIDAsIkvEjSIsMl0sREpGOlt2b2lkIDAsdm9pZCAwLDBdLERLSzpbdm9pZCAwLCJrciIsMl0sRE9QOlt2b2lkIDAsIiQiXSxFR1A6W3ZvaWQgMCwiRcKjIl0sRVNQOlt2b2lkIDAsIuKCpyIsMF0sRVVSOlsi4oKsIl0sRkpEOlt2b2lkIDAsIiQiXSxGS1A6W3ZvaWQgMCwiwqMiXSxHQlA6WyLCoyJdLEdFTDpbdm9pZCAwLCLigr4iXSxHSVA6W3ZvaWQgMCwiwqMiXSxHTkY6W3ZvaWQgMCwiRkciLDBdLEdUUTpbdm9pZCAwLCJRIl0sR1lEOlt2b2lkIDAsIiQiLDJdLEhLRDpbIkhLJCIsIiQiXSxITkw6W3ZvaWQgMCwiTCJdLEhSSzpbdm9pZCAwLCJrbiJdLEhVRjpbdm9pZCAwLCJGdCIsMl0sSURSOlt2b2lkIDAsIlJwIiwyXSxJTFM6WyLigqoiXSxJTlI6WyLigrkiXSxJUUQ6W3ZvaWQgMCx2b2lkIDAsMF0sSVJSOlt2b2lkIDAsdm9pZCAwLDBdLElTSzpbdm9pZCAwLCJrciIsMF0sSVRMOlt2b2lkIDAsdm9pZCAwLDBdLEpNRDpbdm9pZCAwLCIkIl0sSk9EOlt2b2lkIDAsdm9pZCAwLDNdLEpQWTpbIsKlIix2b2lkIDAsMF0sS0hSOlt2b2lkIDAsIuGfmyJdLEtNRjpbdm9pZCAwLCJDRiIsMF0sS1BXOlt2b2lkIDAsIuKCqSIsMF0sS1JXOlsi4oKpIix2b2lkIDAsMF0sS1dEOlt2b2lkIDAsdm9pZCAwLDNdLEtZRDpbdm9pZCAwLCIkIl0sS1pUOlt2b2lkIDAsIuKCuCJdLExBSzpbdm9pZCAwLCLigq0iLDBdLExCUDpbdm9pZCAwLCJMwqMiLDBdLExLUjpbdm9pZCAwLCJScyJdLExSRDpbdm9pZCAwLCIkIl0sTFRMOlt2b2lkIDAsIkx0Il0sTFVGOlt2b2lkIDAsdm9pZCAwLDBdLExWTDpbdm9pZCAwLCJMcyJdLExZRDpbdm9pZCAwLHZvaWQgMCwzXSxNR0E6W3ZvaWQgMCwiQXIiLDBdLE1HRjpbdm9pZCAwLHZvaWQgMCwwXSxNTUs6W3ZvaWQgMCwiSyIsMF0sTU5UOlt2b2lkIDAsIuKCriIsMl0sTVJPOlt2b2lkIDAsdm9pZCAwLDBdLE1VUjpbdm9pZCAwLCJScyIsMl0sTVhOOlsiTVgkIiwiJCJdLE1ZUjpbdm9pZCAwLCJSTSJdLE5BRDpbdm9pZCAwLCIkIl0sTkdOOlt2b2lkIDAsIuKCpiJdLE5JTzpbdm9pZCAwLCJDJCJdLE5PSzpbdm9pZCAwLCJrciIsMl0sTlBSOlt2b2lkIDAsIlJzIl0sTlpEOlsiTlokIiwiJCJdLE9NUjpbdm9pZCAwLHZvaWQgMCwzXSxQSFA6W3ZvaWQgMCwi4oKxIl0sUEtSOlt2b2lkIDAsIlJzIiwyXSxQTE46W3ZvaWQgMCwiesWCIl0sUFlHOlt2b2lkIDAsIuKCsiIsMF0sUk9OOlt2b2lkIDAsImxlaSJdLFJTRDpbdm9pZCAwLHZvaWQgMCwwXSxSVUI6W3ZvaWQgMCwi4oK9Il0sUlVSOlt2b2lkIDAsItGALiJdLFJXRjpbdm9pZCAwLCJSRiIsMF0sU0JEOlt2b2lkIDAsIiQiXSxTRUs6W3ZvaWQgMCwia3IiLDJdLFNHRDpbdm9pZCAwLCIkIl0sU0hQOlt2b2lkIDAsIsKjIl0sU0xMOlt2b2lkIDAsdm9pZCAwLDBdLFNPUzpbdm9pZCAwLHZvaWQgMCwwXSxTUkQ6W3ZvaWQgMCwiJCJdLFNTUDpbdm9pZCAwLCLCoyJdLFNURDpbdm9pZCAwLHZvaWQgMCwwXSxTVE46W3ZvaWQgMCwiRGIiXSxTWVA6W3ZvaWQgMCwiwqMiLDBdLFRIQjpbdm9pZCAwLCLguL8iXSxUTU06W3ZvaWQgMCx2b2lkIDAsMF0sVE5EOlt2b2lkIDAsdm9pZCAwLDNdLFRPUDpbdm9pZCAwLCJUJCJdLFRSTDpbdm9pZCAwLHZvaWQgMCwwXSxUUlk6W3ZvaWQgMCwi4oK6Il0sVFREOlt2b2lkIDAsIiQiXSxUV0Q6WyJOVCQiLCIkIiwyXSxUWlM6W3ZvaWQgMCx2b2lkIDAsMl0sVUFIOlt2b2lkIDAsIuKCtCJdLFVHWDpbdm9pZCAwLHZvaWQgMCwwXSxVU0Q6WyIkIl0sVVlJOlt2b2lkIDAsdm9pZCAwLDBdLFVZVTpbdm9pZCAwLCIkIl0sVVlXOlt2b2lkIDAsdm9pZCAwLDRdLFVaUzpbdm9pZCAwLHZvaWQgMCwyXSxWRUY6W3ZvaWQgMCwiQnMiLDJdLFZORDpbIuKCqyIsdm9pZCAwLDBdLFZVVjpbdm9pZCAwLHZvaWQgMCwwXSxYQUY6WyJGQ0ZBIix2b2lkIDAsMF0sWENEOlsiRUMkIiwiJCJdLFhPRjpbIkNGQSIsdm9pZCAwLDBdLFhQRjpbIkNGUEYiLHZvaWQgMCwwXSxYWFg6WyLCpCJdLFlFUjpbdm9pZCAwLHZvaWQgMCwwXSxaQVI6W3ZvaWQgMCwiUiJdLFpNSzpbdm9pZCAwLHZvaWQgMCwwXSxaTVc6W3ZvaWQgMCwiWksiXSxaV0Q6W3ZvaWQgMCx2b2lkIDAsMF19OwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi92YXIgbUMsdUMsZkMsZ0MsaEMsYkMseUM7ZnVuY3Rpb24gX0ModCxlKXtyZXR1cm4gd0MoTHUodClbanUuRGF0ZUZvcm1hdF0sZSl9ZnVuY3Rpb24gQ0ModCxlKXtyZXR1cm4gd0MoTHUodClbanUuVGltZUZvcm1hdF0sZSl9ZnVuY3Rpb24gTUModCxlKXtyZXR1cm4gd0MoTHUodClbanUuRGF0ZVRpbWVGb3JtYXRdLGUpfWZ1bmN0aW9uIHZDKHQsZSl7Y29uc3Qgbj1MdSh0KSxvPW5banUuTnVtYmVyU3ltYm9sc11bZV07aWYodm9pZCAwPT09byl7aWYoZT09PWJDLkN1cnJlbmN5RGVjaW1hbClyZXR1cm4gbltqdS5OdW1iZXJTeW1ib2xzXVtiQy5EZWNpbWFsXTtpZihlPT09YkMuQ3VycmVuY3lHcm91cClyZXR1cm4gbltqdS5OdW1iZXJTeW1ib2xzXVtiQy5Hcm91cF19cmV0dXJuIG99ZnVuY3Rpb24geEModCxlKXtyZXR1cm4gTHUodClbanUuTnVtYmVyRm9ybWF0c11bZV19IShmdW5jdGlvbih0KXt0W3QuRGVjaW1hbD0wXT0iRGVjaW1hbCIsdFt0LlBlcmNlbnQ9MV09IlBlcmNlbnQiLHRbdC5DdXJyZW5jeT0yXT0iQ3VycmVuY3kiLHRbdC5TY2llbnRpZmljPTNdPSJTY2llbnRpZmljIn0pKG1DfHwobUM9e30pKSwoZnVuY3Rpb24odCl7dFt0Llplcm89MF09Ilplcm8iLHRbdC5PbmU9MV09Ik9uZSIsdFt0LlR3bz0yXT0iVHdvIix0W3QuRmV3PTNdPSJGZXciLHRbdC5NYW55PTRdPSJNYW55Iix0W3QuT3RoZXI9NV09Ik90aGVyIn0pKHVDfHwodUM9e30pKSwoZnVuY3Rpb24odCl7dFt0LkZvcm1hdD0wXT0iRm9ybWF0Iix0W3QuU3RhbmRhbG9uZT0xXT0iU3RhbmRhbG9uZSJ9KShmQ3x8KGZDPXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5OYXJyb3c9MF09Ik5hcnJvdyIsdFt0LkFiYnJldmlhdGVkPTFdPSJBYmJyZXZpYXRlZCIsdFt0LldpZGU9Ml09IldpZGUiLHRbdC5TaG9ydD0zXT0iU2hvcnQifSkoZ0N8fChnQz17fSkpLChmdW5jdGlvbih0KXt0W3QuU2hvcnQ9MF09IlNob3J0Iix0W3QuTWVkaXVtPTFdPSJNZWRpdW0iLHRbdC5Mb25nPTJdPSJMb25nIix0W3QuRnVsbD0zXT0iRnVsbCJ9KShoQ3x8KGhDPXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5EZWNpbWFsPTBdPSJEZWNpbWFsIix0W3QuR3JvdXA9MV09Ikdyb3VwIix0W3QuTGlzdD0yXT0iTGlzdCIsdFt0LlBlcmNlbnRTaWduPTNdPSJQZXJjZW50U2lnbiIsdFt0LlBsdXNTaWduPTRdPSJQbHVzU2lnbiIsdFt0Lk1pbnVzU2lnbj01XT0iTWludXNTaWduIix0W3QuRXhwb25lbnRpYWw9Nl09IkV4cG9uZW50aWFsIix0W3QuU3VwZXJzY3JpcHRpbmdFeHBvbmVudD03XT0iU3VwZXJzY3JpcHRpbmdFeHBvbmVudCIsdFt0LlBlck1pbGxlPThdPSJQZXJNaWxsZSIsdFt0WzEvMF09OV09IkluZmluaXR5Iix0W3QuTmFOPTEwXT0iTmFOIix0W3QuVGltZVNlcGFyYXRvcj0xMV09IlRpbWVTZXBhcmF0b3IiLHRbdC5DdXJyZW5jeURlY2ltYWw9MTJdPSJDdXJyZW5jeURlY2ltYWwiLHRbdC5DdXJyZW5jeUdyb3VwPTEzXT0iQ3VycmVuY3lHcm91cCJ9KShiQ3x8KGJDPXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5TdW5kYXk9MF09IlN1bmRheSIsdFt0Lk1vbmRheT0xXT0iTW9uZGF5Iix0W3QuVHVlc2RheT0yXT0iVHVlc2RheSIsdFt0LldlZG5lc2RheT0zXT0iV2VkbmVzZGF5Iix0W3QuVGh1cnNkYXk9NF09IlRodXJzZGF5Iix0W3QuRnJpZGF5PTVdPSJGcmlkYXkiLHRbdC5TYXR1cmRheT02XT0iU2F0dXJkYXkifSkoeUN8fCh5Qz17fSkpO2NvbnN0IE9DPUJ1O2Z1bmN0aW9uIFBDKHQpe2lmKCF0W2p1LkV4dHJhRGF0YV0pdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV4dHJhIGxvY2FsZSBkYXRhIGZvciB0aGUgbG9jYWxlICIke3RbanUuTG9jYWxlSWRdfSIuIFVzZSAicmVnaXN0ZXJMb2NhbGVEYXRhIiB0byBsb2FkIG5ldyBkYXRhLiBTZWUgdGhlICJJMThuIGd1aWRlIiBvbiBhbmd1bGFyLmlvIHRvIGtub3cgbW9yZS5gKX1mdW5jdGlvbiB3Qyh0LGUpe2ZvcihsZXQgbj1lO24+LTE7bi0tKWlmKHZvaWQgMCE9PXRbbl0pcmV0dXJuIHRbbl07dGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBBUEk6IGxvY2FsZSBkYXRhIHVuZGVmaW5lZCIpfWZ1bmN0aW9uIGtDKHQpe2NvbnN0W2Usbl09dC5zcGxpdCgiOiIpO3JldHVybntob3VyczorZSxtaW51dGVzOitufX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IFNDPS9eKFxkezR9KS0/KFxkXGQpLT8oXGRcZCkoPzpUKFxkXGQpKD86Oj8oXGRcZCkoPzo6PyhcZFxkKSg/OlwuKFxkKykpPyk/KT8oWnwoWystXSkoXGRcZCk6PyhcZFxkKSk/KT8kLyxEQz17fSxFQz0vKCg/OlteQkVHSExNT1NXWVphYmNkaG1zd3l6J10rKXwoPzonKD86W14nXXwnJykqJyl8KD86R3sxLDV9fHl7MSw0fXxZezEsNH18TXsxLDV9fEx7MSw1fXx3ezEsMn18V3sxfXxkezEsMn18RXsxLDZ9fGN7MSw2fXxhezEsNX18YnsxLDV9fEJ7MSw1fXxoezEsMn18SHsxLDJ9fG17MSwyfXxzezEsMn18U3sxLDN9fHp7MSw0fXxaezEsNX18T3sxLDR9KSkoW1xzXFNdKikvO3ZhciBSQyxBQyxUQztmdW5jdGlvbiBOQyh0LGUsbixvKXtsZXQgaT0oZnVuY3Rpb24gYSh0KXtpZihxQyh0KSlyZXR1cm4gdDtpZigibnVtYmVyIj09dHlwZW9mIHQmJiFpc05hTih0KSlyZXR1cm4gbmV3IERhdGUodCk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZih0PXQudHJpbSgpLC9eKFxkezR9KC1cZHsxLDJ9KC1cZHsxLDJ9KT8pPykkLy50ZXN0KHQpKXtjb25zdFtlLG49MSxvPTFdPXQuc3BsaXQoIi0iKS5tYXAoKHQ9Pit0KSk7cmV0dXJuIHpDKGUsbi0xLG8pfWNvbnN0IGU9cGFyc2VGbG9hdCh0KTtpZighaXNOYU4odC1lKSlyZXR1cm4gbmV3IERhdGUoZSk7bGV0IG47aWYobj10Lm1hdGNoKFNDKSlyZXR1cm4oZnVuY3Rpb24gZSh0KXtjb25zdCBlPW5ldyBEYXRlKDApO2xldCBuPTAsbz0wO2NvbnN0IGk9dFs4XT9lLnNldFVUQ0Z1bGxZZWFyOmUuc2V0RnVsbFllYXIsYT10WzhdP2Uuc2V0VVRDSG91cnM6ZS5zZXRIb3Vyczt0WzldJiYobj1OdW1iZXIodFs5XSt0WzEwXSksbz1OdW1iZXIodFs5XSt0WzExXSkpLGkuY2FsbChlLE51bWJlcih0WzFdKSxOdW1iZXIodFsyXSktMSxOdW1iZXIodFszXSkpO2NvbnN0IHI9TnVtYmVyKHRbNF18fDApLW4scz1OdW1iZXIodFs1XXx8MCktbyxsPU51bWJlcih0WzZdfHwwKSxjPU1hdGguZmxvb3IoMWUzKnBhcnNlRmxvYXQoIjAuIisodFs3XXx8MCkpKTtyZXR1cm4gYS5jYWxsKGUscixzLGwsYyksZX0pKG4pfWNvbnN0IG49bmV3IERhdGUodCk7aWYoIXFDKG4pKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGNvbnZlcnQgIiR7dH0iIGludG8gYSBkYXRlYCk7cmV0dXJuIG59KSh0KTtlPUlDKG4sZSl8fGU7bGV0IHIscz1bXTtmb3IoO2U7KXtpZihyPUVDLmV4ZWMoZSksIXIpe3MucHVzaChlKTticmVha317cz1zLmNvbmNhdChyLnNsaWNlKDEpKTtjb25zdCB0PXMucG9wKCk7aWYoIXQpYnJlYWs7ZT10fX1sZXQgbD1pLmdldFRpbWV6b25lT2Zmc2V0KCk7byYmKGw9WUMobyxsKSxpPShmdW5jdGlvbiBjKHQsZSxuKXtjb25zdCBvPW4/LTE6MSxpPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZnVuY3Rpb24gYSh0LGUpe3JldHVybih0PW5ldyBEYXRlKHQuZ2V0VGltZSgpKSkuc2V0TWludXRlcyh0LmdldE1pbnV0ZXMoKStlKSx0fSkodCxvKihZQyhlLGkpLWkpKX0pKGksbywhMCkpO2xldCBkPSIiO3JldHVybiBzLmZvckVhY2goKHQ9Pntjb25zdCBlPShmdW5jdGlvbiBvKHQpe2lmKFdDW3RdKXJldHVybiBXQ1t0XTtsZXQgZTtzd2l0Y2godCl7Y2FzZSJHIjpjYXNlIkdHIjpjYXNlIkdHRyI6ZT1CQyhUQy5FcmFzLGdDLkFiYnJldmlhdGVkKTticmVhaztjYXNlIkdHR0ciOmU9QkMoVEMuRXJhcyxnQy5XaWRlKTticmVhaztjYXNlIkdHR0dHIjplPUJDKFRDLkVyYXMsZ0MuTmFycm93KTticmVhaztjYXNlInkiOmU9TEMoQUMuRnVsbFllYXIsMSwwLCExLCEwKTticmVhaztjYXNlInl5IjplPUxDKEFDLkZ1bGxZZWFyLDIsMCwhMCwhMCk7YnJlYWs7Y2FzZSJ5eXkiOmU9TEMoQUMuRnVsbFllYXIsMywwLCExLCEwKTticmVhaztjYXNlInl5eXkiOmU9TEMoQUMuRnVsbFllYXIsNCwwLCExLCEwKTticmVhaztjYXNlIlkiOmU9R0MoMSk7YnJlYWs7Y2FzZSJZWSI6ZT1HQygyLCEwKTticmVhaztjYXNlIllZWSI6ZT1HQygzKTticmVhaztjYXNlIllZWVkiOmU9R0MoNCk7YnJlYWs7Y2FzZSJNIjpjYXNlIkwiOmU9TEMoQUMuTW9udGgsMSwxKTticmVhaztjYXNlIk1NIjpjYXNlIkxMIjplPUxDKEFDLk1vbnRoLDIsMSk7YnJlYWs7Y2FzZSJNTU0iOmU9QkMoVEMuTW9udGhzLGdDLkFiYnJldmlhdGVkKTticmVhaztjYXNlIk1NTU0iOmU9QkMoVEMuTW9udGhzLGdDLldpZGUpO2JyZWFrO2Nhc2UiTU1NTU0iOmU9QkMoVEMuTW9udGhzLGdDLk5hcnJvdyk7YnJlYWs7Y2FzZSJMTEwiOmU9QkMoVEMuTW9udGhzLGdDLkFiYnJldmlhdGVkLGZDLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiTExMTCI6ZT1CQyhUQy5Nb250aHMsZ0MuV2lkZSxmQy5TdGFuZGFsb25lKTticmVhaztjYXNlIkxMTExMIjplPUJDKFRDLk1vbnRocyxnQy5OYXJyb3csZkMuU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJ3IjplPVVDKDEpO2JyZWFrO2Nhc2Uid3ciOmU9VUMoMik7YnJlYWs7Y2FzZSJXIjplPVVDKDEsITApO2JyZWFrO2Nhc2UiZCI6ZT1MQyhBQy5EYXRlLDEpO2JyZWFrO2Nhc2UiZGQiOmU9TEMoQUMuRGF0ZSwyKTticmVhaztjYXNlImMiOmNhc2UiY2MiOmU9TEMoQUMuRGF5LDEpO2JyZWFrO2Nhc2UiY2NjIjplPUJDKFRDLkRheXMsZ0MuQWJicmV2aWF0ZWQsZkMuU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJjY2NjIjplPUJDKFRDLkRheXMsZ0MuV2lkZSxmQy5TdGFuZGFsb25lKTticmVhaztjYXNlImNjY2NjIjplPUJDKFRDLkRheXMsZ0MuTmFycm93LGZDLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiY2NjY2NjIjplPUJDKFRDLkRheXMsZ0MuU2hvcnQsZkMuU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJFIjpjYXNlIkVFIjpjYXNlIkVFRSI6ZT1CQyhUQy5EYXlzLGdDLkFiYnJldmlhdGVkKTticmVhaztjYXNlIkVFRUUiOmU9QkMoVEMuRGF5cyxnQy5XaWRlKTticmVhaztjYXNlIkVFRUVFIjplPUJDKFRDLkRheXMsZ0MuTmFycm93KTticmVhaztjYXNlIkVFRUVFRSI6ZT1CQyhUQy5EYXlzLGdDLlNob3J0KTticmVhaztjYXNlImEiOmNhc2UiYWEiOmNhc2UiYWFhIjplPUJDKFRDLkRheVBlcmlvZHMsZ0MuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiYWFhYSI6ZT1CQyhUQy5EYXlQZXJpb2RzLGdDLldpZGUpO2JyZWFrO2Nhc2UiYWFhYWEiOmU9QkMoVEMuRGF5UGVyaW9kcyxnQy5OYXJyb3cpO2JyZWFrO2Nhc2UiYiI6Y2FzZSJiYiI6Y2FzZSJiYmIiOmU9QkMoVEMuRGF5UGVyaW9kcyxnQy5BYmJyZXZpYXRlZCxmQy5TdGFuZGFsb25lLCEwKTticmVhaztjYXNlImJiYmIiOmU9QkMoVEMuRGF5UGVyaW9kcyxnQy5XaWRlLGZDLlN0YW5kYWxvbmUsITApO2JyZWFrO2Nhc2UiYmJiYmIiOmU9QkMoVEMuRGF5UGVyaW9kcyxnQy5OYXJyb3csZkMuU3RhbmRhbG9uZSwhMCk7YnJlYWs7Y2FzZSJCIjpjYXNlIkJCIjpjYXNlIkJCQiI6ZT1CQyhUQy5EYXlQZXJpb2RzLGdDLkFiYnJldmlhdGVkLGZDLkZvcm1hdCwhMCk7YnJlYWs7Y2FzZSJCQkJCIjplPUJDKFRDLkRheVBlcmlvZHMsZ0MuV2lkZSxmQy5Gb3JtYXQsITApO2JyZWFrO2Nhc2UiQkJCQkIiOmU9QkMoVEMuRGF5UGVyaW9kcyxnQy5OYXJyb3csZkMuRm9ybWF0LCEwKTticmVhaztjYXNlImgiOmU9TEMoQUMuSG91cnMsMSwtMTIpO2JyZWFrO2Nhc2UiaGgiOmU9TEMoQUMuSG91cnMsMiwtMTIpO2JyZWFrO2Nhc2UiSCI6ZT1MQyhBQy5Ib3VycywxKTticmVhaztjYXNlIkhIIjplPUxDKEFDLkhvdXJzLDIpO2JyZWFrO2Nhc2UibSI6ZT1MQyhBQy5NaW51dGVzLDEpO2JyZWFrO2Nhc2UibW0iOmU9TEMoQUMuTWludXRlcywyKTticmVhaztjYXNlInMiOmU9TEMoQUMuU2Vjb25kcywxKTticmVhaztjYXNlInNzIjplPUxDKEFDLlNlY29uZHMsMik7YnJlYWs7Y2FzZSJTIjplPUxDKEFDLkZyYWN0aW9uYWxTZWNvbmRzLDEpO2JyZWFrO2Nhc2UiU1MiOmU9TEMoQUMuRnJhY3Rpb25hbFNlY29uZHMsMik7YnJlYWs7Y2FzZSJTU1MiOmU9TEMoQUMuRnJhY3Rpb25hbFNlY29uZHMsMyk7YnJlYWs7Y2FzZSJaIjpjYXNlIlpaIjpjYXNlIlpaWiI6ZT1WQyhSQy5TaG9ydCk7YnJlYWs7Y2FzZSJaWlpaWiI6ZT1WQyhSQy5FeHRlbmRlZCk7YnJlYWs7Y2FzZSJPIjpjYXNlIk9PIjpjYXNlIk9PTyI6Y2FzZSJ6IjpjYXNlInp6IjpjYXNlInp6eiI6ZT1WQyhSQy5TaG9ydEdNVCk7YnJlYWs7Y2FzZSJPT09PIjpjYXNlIlpaWloiOmNhc2Uienp6eiI6ZT1WQyhSQy5Mb25nKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBXQ1t0XT1lLGV9KSh0KTtkKz1lP2UoaSxuLGwpOiInJyI9PT10PyInIjp0LnJlcGxhY2UoLyheJ3wnJCkvZywiIikucmVwbGFjZSgvJycvZywiJyIpfSkpLGR9ZnVuY3Rpb24gekModCxlLG4pe2NvbnN0IG89bmV3IERhdGUoMCk7cmV0dXJuIG8uc2V0RnVsbFllYXIodCxlLG4pLG8uc2V0SG91cnMoMCwwLDApLG99ZnVuY3Rpb24gSUModCxlKXtjb25zdCBuPShmdW5jdGlvbiBvKHQpe3JldHVybiBMdSh0KVtqdS5Mb2NhbGVJZF19KSh0KTtpZihEQ1tuXT1EQ1tuXXx8e30sRENbbl1bZV0pcmV0dXJuIERDW25dW2VdO2xldCBpPSIiO3N3aXRjaChlKXtjYXNlInNob3J0RGF0ZSI6aT1fQyh0LGhDLlNob3J0KTticmVhaztjYXNlIm1lZGl1bURhdGUiOmk9X0ModCxoQy5NZWRpdW0pO2JyZWFrO2Nhc2UibG9uZ0RhdGUiOmk9X0ModCxoQy5Mb25nKTticmVhaztjYXNlImZ1bGxEYXRlIjppPV9DKHQsaEMuRnVsbCk7YnJlYWs7Y2FzZSJzaG9ydFRpbWUiOmk9Q0ModCxoQy5TaG9ydCk7YnJlYWs7Y2FzZSJtZWRpdW1UaW1lIjppPUNDKHQsaEMuTWVkaXVtKTticmVhaztjYXNlImxvbmdUaW1lIjppPUNDKHQsaEMuTG9uZyk7YnJlYWs7Y2FzZSJmdWxsVGltZSI6aT1DQyh0LGhDLkZ1bGwpO2JyZWFrO2Nhc2Uic2hvcnQiOmNvbnN0IGU9SUModCwic2hvcnRUaW1lIiksbj1JQyh0LCJzaG9ydERhdGUiKTtpPUhDKE1DKHQsaEMuU2hvcnQpLFtlLG5dKTticmVhaztjYXNlIm1lZGl1bSI6Y29uc3Qgbz1JQyh0LCJtZWRpdW1UaW1lIiksYT1JQyh0LCJtZWRpdW1EYXRlIik7aT1IQyhNQyh0LGhDLk1lZGl1bSksW28sYV0pO2JyZWFrO2Nhc2UibG9uZyI6Y29uc3Qgcj1JQyh0LCJsb25nVGltZSIpLHM9SUModCwibG9uZ0RhdGUiKTtpPUhDKE1DKHQsaEMuTG9uZyksW3Isc10pO2JyZWFrO2Nhc2UiZnVsbCI6Y29uc3QgbD1JQyh0LCJmdWxsVGltZSIpLGM9SUModCwiZnVsbERhdGUiKTtpPUhDKE1DKHQsaEMuRnVsbCksW2wsY10pfXJldHVybiBpJiYoRENbbl1bZV09aSksaX1mdW5jdGlvbiBIQyh0LGUpe3JldHVybiBlJiYodD10LnJlcGxhY2UoL1x7KFtefV0rKX0vZywoZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbCE9ZSYmbiBpbiBlP2Vbbl06dH0pKSksdH1mdW5jdGlvbiBGQyh0LGUsbj0iLSIsbyxpKXtsZXQgYT0iIjsodDwwfHxpJiZ0PD0wKSYmKGk/dD0xLXQ6KHQ9LXQsYT1uKSk7bGV0IHI9U3RyaW5nKHQpO2Zvcig7ci5sZW5ndGg8ZTspcj0iMCIrcjtyZXR1cm4gbyYmKHI9ci5zdWJzdHIoci5sZW5ndGgtZSkpLGErcn1mdW5jdGlvbiBMQyh0LGUsbj0wLG89ITEsaT0hMSl7cmV0dXJuIGZ1bmN0aW9uKGEscil7bGV0IHM9KGZ1bmN0aW9uIGwodCxlKXtzd2l0Y2godCl7Y2FzZSBBQy5GdWxsWWVhcjpyZXR1cm4gZS5nZXRGdWxsWWVhcigpO2Nhc2UgQUMuTW9udGg6cmV0dXJuIGUuZ2V0TW9udGgoKTtjYXNlIEFDLkRhdGU6cmV0dXJuIGUuZ2V0RGF0ZSgpO2Nhc2UgQUMuSG91cnM6cmV0dXJuIGUuZ2V0SG91cnMoKTtjYXNlIEFDLk1pbnV0ZXM6cmV0dXJuIGUuZ2V0TWludXRlcygpO2Nhc2UgQUMuU2Vjb25kczpyZXR1cm4gZS5nZXRTZWNvbmRzKCk7Y2FzZSBBQy5GcmFjdGlvbmFsU2Vjb25kczpyZXR1cm4gZS5nZXRNaWxsaXNlY29uZHMoKTtjYXNlIEFDLkRheTpyZXR1cm4gZS5nZXREYXkoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBEYXRlVHlwZSB2YWx1ZSAiJHt0fSIuYCl9fSkodCxhKTtpZigobj4wfHxzPi1uKSYmKHMrPW4pLHQ9PT1BQy5Ib3VycykwPT09cyYmLTEyPT09biYmKHM9MTIpO2Vsc2UgaWYodD09PUFDLkZyYWN0aW9uYWxTZWNvbmRzKXJldHVybihmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIEZDKHQsMykuc3Vic3RyKDAsZSl9KShzLGUpO2NvbnN0IGQ9dkMocixiQy5NaW51c1NpZ24pO3JldHVybiBGQyhzLGUsZCxvLGkpfX1mdW5jdGlvbiBCQyh0LGUsbj1mQy5Gb3JtYXQsbz0hMSl7cmV0dXJuIGZ1bmN0aW9uKGksYSl7cmV0dXJuKGZ1bmN0aW9uIHIodCxlLG4sbyxpLGEpe3N3aXRjaChuKXtjYXNlIFRDLk1vbnRoczpyZXR1cm4oZnVuY3Rpb24gcih0LGUsbil7Y29uc3Qgbz1MdSh0KSxpPXdDKFtvW2p1Lk1vbnRoc0Zvcm1hdF0sb1tqdS5Nb250aHNTdGFuZGFsb25lXV0sZSk7cmV0dXJuIHdDKGksbil9KShlLGksbylbdC5nZXRNb250aCgpXTtjYXNlIFRDLkRheXM6cmV0dXJuKGZ1bmN0aW9uIHModCxlLG4pe2NvbnN0IG89THUodCksaT13Qyhbb1tqdS5EYXlzRm9ybWF0XSxvW2p1LkRheXNTdGFuZGFsb25lXV0sZSk7cmV0dXJuIHdDKGksbil9KShlLGksbylbdC5nZXREYXkoKV07Y2FzZSBUQy5EYXlQZXJpb2RzOmNvbnN0IHI9dC5nZXRIb3VycygpLHM9dC5nZXRNaW51dGVzKCk7aWYoYSl7Y29uc3QgdD0oZnVuY3Rpb24gbCh0KXtjb25zdCBlPUx1KHQpO3JldHVybiBQQyhlKSwoZVtqdS5FeHRyYURhdGFdWzJdfHxbXSkubWFwKCh0PT4ic3RyaW5nIj09dHlwZW9mIHQ/a0ModCk6W2tDKHRbMF0pLGtDKHRbMV0pXSkpfSkoZSksbj0oZnVuY3Rpb24gYyh0LGUsbil7Y29uc3Qgbz1MdSh0KTtQQyhvKTtjb25zdCBpPXdDKFtvW2p1LkV4dHJhRGF0YV1bMF0sb1tqdS5FeHRyYURhdGFdWzFdXSxlKXx8W107cmV0dXJuIHdDKGksbil8fFtdfSkoZSxpLG8pLGE9dC5maW5kSW5kZXgoKHQ9PntpZihBcnJheS5pc0FycmF5KHQpKXtjb25zdFtlLG5dPXQsbz1yPj1lLmhvdXJzJiZzPj1lLm1pbnV0ZXMsaT1yPG4uaG91cnN8fHI9PT1uLmhvdXJzJiZzPG4ubWludXRlcztpZihlLmhvdXJzPG4uaG91cnMpe2lmKG8mJmkpcmV0dXJuITB9ZWxzZSBpZihvfHxpKXJldHVybiEwfWVsc2UgaWYodC5ob3Vycz09PXImJnQubWludXRlcz09PXMpcmV0dXJuITA7cmV0dXJuITF9KSk7aWYoLTEhPT1hKXJldHVybiBuW2FdfXJldHVybihmdW5jdGlvbiBkKHQsZSxuKXtjb25zdCBvPUx1KHQpLGk9d0MoW29banUuRGF5UGVyaW9kc0Zvcm1hdF0sb1tqdS5EYXlQZXJpb2RzU3RhbmRhbG9uZV1dLGUpO3JldHVybiB3QyhpLG4pfSkoZSxpLG8pW3I8MTI/MDoxXTtjYXNlIFRDLkVyYXM6cmV0dXJuKGZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gd0MoTHUodClbanUuRXJhc10sZSl9KShlLG8pW3QuZ2V0RnVsbFllYXIoKTw9MD8wOjFdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHRyYW5zbGF0aW9uIHR5cGUgJHtufWApfX0pKGksYSx0LGUsbixvKX19ZnVuY3Rpb24gVkModCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixvKXtjb25zdCBpPS0xKm8sYT12QyhuLGJDLk1pbnVzU2lnbikscj1pPjA/TWF0aC5mbG9vcihpLzYwKTpNYXRoLmNlaWwoaS82MCk7c3dpdGNoKHQpe2Nhc2UgUkMuU2hvcnQ6cmV0dXJuKGk+PTA/IisiOiIiKStGQyhyLDIsYSkrRkMoTWF0aC5hYnMoaSU2MCksMixhKTtjYXNlIFJDLlNob3J0R01UOnJldHVybiJHTVQiKyhpPj0wPyIrIjoiIikrRkMociwxLGEpO2Nhc2UgUkMuTG9uZzpyZXR1cm4iR01UIisoaT49MD8iKyI6IiIpK0ZDKHIsMixhKSsiOiIrRkMoTWF0aC5hYnMoaSU2MCksMixhKTtjYXNlIFJDLkV4dGVuZGVkOnJldHVybiAwPT09bz8iWiI6KGk+PTA/IisiOiIiKStGQyhyLDIsYSkrIjoiK0ZDKE1hdGguYWJzKGklNjApLDIsYSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gem9uZSB3aWR0aCAiJHt0fSJgKX19fWZ1bmN0aW9uIGpDKHQpe3JldHVybiB6Qyh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpKyg0LXQuZ2V0RGF5KCkpKX1mdW5jdGlvbiBVQyh0LGU9ITEpe3JldHVybiBmdW5jdGlvbihuLG8pe2xldCBpO2lmKGUpe2NvbnN0IHQ9bmV3IERhdGUobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSwxKS5nZXREYXkoKS0xLGU9bi5nZXREYXRlKCk7aT0xK01hdGguZmxvb3IoKGUrdCkvNyl9ZWxzZXtjb25zdCB0PWpDKG4pLGU9KGZ1bmN0aW9uIGEodCl7Y29uc3QgZT16Qyh0LDAsMSkuZ2V0RGF5KCk7cmV0dXJuIHpDKHQsMCwxKyhlPD00PzQ6MTEpLWUpfSkodC5nZXRGdWxsWWVhcigpKSxvPXQuZ2V0VGltZSgpLWUuZ2V0VGltZSgpO2k9MStNYXRoLnJvdW5kKG8vNjA0OGU1KX1yZXR1cm4gRkMoaSx0LHZDKG8sYkMuTWludXNTaWduKSl9fWZ1bmN0aW9uIEdDKHQsZT0hMSl7cmV0dXJuIGZ1bmN0aW9uKG4sbyl7cmV0dXJuIEZDKGpDKG4pLmdldEZ1bGxZZWFyKCksdCx2QyhvLGJDLk1pbnVzU2lnbiksZSl9fSEoZnVuY3Rpb24odCl7dFt0LlNob3J0PTBdPSJTaG9ydCIsdFt0LlNob3J0R01UPTFdPSJTaG9ydEdNVCIsdFt0Lkxvbmc9Ml09IkxvbmciLHRbdC5FeHRlbmRlZD0zXT0iRXh0ZW5kZWQifSkoUkN8fChSQz17fSkpLChmdW5jdGlvbih0KXt0W3QuRnVsbFllYXI9MF09IkZ1bGxZZWFyIix0W3QuTW9udGg9MV09Ik1vbnRoIix0W3QuRGF0ZT0yXT0iRGF0ZSIsdFt0LkhvdXJzPTNdPSJIb3VycyIsdFt0Lk1pbnV0ZXM9NF09Ik1pbnV0ZXMiLHRbdC5TZWNvbmRzPTVdPSJTZWNvbmRzIix0W3QuRnJhY3Rpb25hbFNlY29uZHM9Nl09IkZyYWN0aW9uYWxTZWNvbmRzIix0W3QuRGF5PTddPSJEYXkifSkoQUN8fChBQz17fSkpLChmdW5jdGlvbih0KXt0W3QuRGF5UGVyaW9kcz0wXT0iRGF5UGVyaW9kcyIsdFt0LkRheXM9MV09IkRheXMiLHRbdC5Nb250aHM9Ml09Ik1vbnRocyIsdFt0LkVyYXM9M109IkVyYXMifSkoVEN8fChUQz17fSkpO2NvbnN0IFdDPXt9O2Z1bmN0aW9uIFlDKHQsZSl7dD10LnJlcGxhY2UoLzovZywiIik7Y29uc3Qgbj1EYXRlLnBhcnNlKCJKYW4gMDEsIDE5NzAgMDA6MDA6MDAgIit0KS82ZTQ7cmV0dXJuIGlzTmFOKG4pP2U6bn1mdW5jdGlvbiBxQyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUmJiFpc05hTih0LnZhbHVlT2YoKSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IFpDPS9eKFxkKyk/XC4oKFxkKykoLShcZCspKT8pPyQvLFhDPSIuIixLQz0iMCI7ZnVuY3Rpb24gSkModCxlLG4sbyxpLGEscj0hMSl7bGV0IHM9IiIsbD0hMTtpZihpc0Zpbml0ZSh0KSl7bGV0IGM9KGZ1bmN0aW9uIGModCl7bGV0IGUsbixvLGksYSxyPU1hdGguYWJzKHQpKyIiLHM9MDtmb3IoKG49ci5pbmRleE9mKFhDKSk+LTEmJihyPXIucmVwbGFjZShYQywiIikpLChvPXIuc2VhcmNoKC9lL2kpKT4wPyhuPDAmJihuPW8pLG4rPStyLnNsaWNlKG8rMSkscj1yLnN1YnN0cmluZygwLG8pKTpuPDAmJihuPXIubGVuZ3RoKSxvPTA7ci5jaGFyQXQobyk9PT1LQztvKyspO2lmKG89PT0oYT1yLmxlbmd0aCkpZT1bMF0sbj0xO2Vsc2V7Zm9yKGEtLTtyLmNoYXJBdChhKT09PUtDOylhLS07Zm9yKG4tPW8sZT1bXSxpPTA7bzw9YTtvKyssaSsrKWVbaV09TnVtYmVyKHIuY2hhckF0KG8pKX1yZXR1cm4gbj4yMiYmKGU9ZS5zcGxpY2UoMCwyMSkscz1uLTEsbj0xKSx7ZGlnaXRzOmUsZXhwb25lbnQ6cyxpbnRlZ2VyTGVuOm59fSkodCk7ciYmKGM9KGZ1bmN0aW9uIGQodCl7aWYoMD09PXQuZGlnaXRzWzBdKXJldHVybiB0O2NvbnN0IGU9dC5kaWdpdHMubGVuZ3RoLXQuaW50ZWdlckxlbjtyZXR1cm4gdC5leHBvbmVudD90LmV4cG9uZW50Kz0yOigwPT09ZT90LmRpZ2l0cy5wdXNoKDAsMCk6MT09PWUmJnQuZGlnaXRzLnB1c2goMCksdC5pbnRlZ2VyTGVuKz0yKSx0fSkoYykpO2xldCBkPWUubWluSW50LHA9ZS5taW5GcmFjLG09ZS5tYXhGcmFjO2lmKGEpe2NvbnN0IHQ9YS5tYXRjaChaQyk7aWYobnVsbD09PXQpdGhyb3cgbmV3IEVycm9yKGAke2F9IGlzIG5vdCBhIHZhbGlkIGRpZ2l0IGluZm9gKTtjb25zdCBlPXRbMV0sbj10WzNdLG89dFs1XTtudWxsIT1lJiYoZD10TShlKSksbnVsbCE9biYmKHA9dE0obikpLG51bGwhPW8/bT10TShvKTpudWxsIT1uJiZwPm0mJihtPXApfSEoZnVuY3Rpb24gcCh0LGUsbil7aWYoZT5uKXRocm93IG5ldyBFcnJvcihgVGhlIG1pbmltdW0gbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciBmcmFjdGlvbiAoJHtlfSkgaXMgaGlnaGVyIHRoYW4gdGhlIG1heGltdW0gKCR7bn0pLmApO2xldCBvPXQuZGlnaXRzLGk9by5sZW5ndGgtdC5pbnRlZ2VyTGVuO2NvbnN0IGE9TWF0aC5taW4oTWF0aC5tYXgoZSxpKSxuKTtsZXQgcj1hK3QuaW50ZWdlckxlbixzPW9bcl07aWYocj4wKXtvLnNwbGljZShNYXRoLm1heCh0LmludGVnZXJMZW4scikpO2ZvcihsZXQgdD1yO3Q8by5sZW5ndGg7dCsrKW9bdF09MH1lbHNle2k9TWF0aC5tYXgoMCxpKSx0LmludGVnZXJMZW49MSxvLmxlbmd0aD1NYXRoLm1heCgxLHI9YSsxKSxvWzBdPTA7Zm9yKGxldCB0PTE7dDxyO3QrKylvW3RdPTB9aWYocz49NSlpZihyLTE8MCl7Zm9yKGxldCBlPTA7ZT5yO2UtLSlvLnVuc2hpZnQoMCksdC5pbnRlZ2VyTGVuKys7by51bnNoaWZ0KDEpLHQuaW50ZWdlckxlbisrfWVsc2Ugb1tyLTFdKys7Zm9yKDtpPE1hdGgubWF4KDAsYSk7aSsrKW8ucHVzaCgwKTtsZXQgbD0wIT09YTtjb25zdCBjPWUrdC5pbnRlZ2VyTGVuLGQ9by5yZWR1Y2VSaWdodCgoZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIG9bbl09KGUrPXQpPDEwP2U6ZS0xMCxsJiYoMD09PW9bbl0mJm4+PWM/by5wb3AoKTpsPSExKSxlPj0xMD8xOjB9KSwwKTtkJiYoby51bnNoaWZ0KGQpLHQuaW50ZWdlckxlbisrKX0pKGMscCxtKTtsZXQgdT1jLmRpZ2l0cyxmPWMuaW50ZWdlckxlbjtjb25zdCBnPWMuZXhwb25lbnQ7bGV0IGg9W107Zm9yKGw9dS5ldmVyeSgodD0+IXQpKTtmPGQ7ZisrKXUudW5zaGlmdCgwKTtmb3IoO2Y8MDtmKyspdS51bnNoaWZ0KDApO2Y+MD9oPXUuc3BsaWNlKGYsdS5sZW5ndGgpOihoPXUsdT1bMF0pO2NvbnN0IGI9W107Zm9yKHUubGVuZ3RoPj1lLmxnU2l6ZSYmYi51bnNoaWZ0KHUuc3BsaWNlKC1lLmxnU2l6ZSx1Lmxlbmd0aCkuam9pbigiIikpO3UubGVuZ3RoPmUuZ1NpemU7KWIudW5zaGlmdCh1LnNwbGljZSgtZS5nU2l6ZSx1Lmxlbmd0aCkuam9pbigiIikpO3UubGVuZ3RoJiZiLnVuc2hpZnQodS5qb2luKCIiKSkscz1iLmpvaW4odkMobixvKSksaC5sZW5ndGgmJihzKz12QyhuLGkpK2guam9pbigiIikpLGcmJihzKz12QyhuLGJDLkV4cG9uZW50aWFsKSsiKyIrZyl9ZWxzZSBzPXZDKG4sYkMuSW5maW5pdHkpO3JldHVybiBzPXQ8MCYmIWw/ZS5uZWdQcmUrcytlLm5lZ1N1ZjplLnBvc1ByZStzK2UucG9zU3VmLHN9ZnVuY3Rpb24gUUModCxlLG4pe3JldHVybiBKQyh0LCRDKHhDKGUsbUMuRGVjaW1hbCksdkMoZSxiQy5NaW51c1NpZ24pKSxlLGJDLkdyb3VwLGJDLkRlY2ltYWwsbil9ZnVuY3Rpb24gJEModCxlPSItIil7Y29uc3Qgbj17bWluSW50OjEsbWluRnJhYzowLG1heEZyYWM6MCxwb3NQcmU6IiIscG9zU3VmOiIiLG5lZ1ByZToiIixuZWdTdWY6IiIsZ1NpemU6MCxsZ1NpemU6MH0sbz10LnNwbGl0KCI7IiksaT1vWzBdLGE9b1sxXSxyPS0xIT09aS5pbmRleE9mKFhDKT9pLnNwbGl0KFhDKTpbaS5zdWJzdHJpbmcoMCxpLmxhc3RJbmRleE9mKEtDKSsxKSxpLnN1YnN0cmluZyhpLmxhc3RJbmRleE9mKEtDKSsxKV0scz1yWzBdLGw9clsxXXx8IiI7bi5wb3NQcmU9cy5zdWJzdHIoMCxzLmluZGV4T2YoIiMiKSk7Zm9yKGxldCB0PTA7dDxsLmxlbmd0aDt0Kyspe2NvbnN0IGU9bC5jaGFyQXQodCk7ZT09PUtDP24ubWluRnJhYz1uLm1heEZyYWM9dCsxOiIjIj09PWU/bi5tYXhGcmFjPXQrMTpuLnBvc1N1Zis9ZX1jb25zdCBjPXMuc3BsaXQoIiwiKTtpZihuLmdTaXplPWNbMV0/Y1sxXS5sZW5ndGg6MCxuLmxnU2l6ZT1jWzJdfHxjWzFdPyhjWzJdfHxjWzFdKS5sZW5ndGg6MCxhKXtjb25zdCB0PWkubGVuZ3RoLW4ucG9zUHJlLmxlbmd0aC1uLnBvc1N1Zi5sZW5ndGgsZT1hLmluZGV4T2YoIiMiKTtuLm5lZ1ByZT1hLnN1YnN0cigwLGUpLnJlcGxhY2UoLycvZywiIiksbi5uZWdTdWY9YS5zdWJzdHIoZSt0KS5yZXBsYWNlKC8nL2csIiIpfWVsc2Ugbi5uZWdQcmU9ZStuLnBvc1ByZSxuLm5lZ1N1Zj1uLnBvc1N1ZjtyZXR1cm4gbn1mdW5jdGlvbiB0TSh0KXtjb25zdCBlPXBhcnNlSW50KHQpO2lmKGlzTmFOKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnRlZ2VyIGxpdGVyYWwgd2hlbiBwYXJzaW5nICIrdCk7cmV0dXJuIGV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIGVNe31mdW5jdGlvbiBuTSh0LGUsbixvKXtsZXQgaT1gPSR7dH1gO2lmKGUuaW5kZXhPZihpKT4tMSlyZXR1cm4gaTtpZihpPW4uZ2V0UGx1cmFsQ2F0ZWdvcnkodCxvKSxlLmluZGV4T2YoaSk+LTEpcmV0dXJuIGk7aWYoZS5pbmRleE9mKCJvdGhlciIpPi0xKXJldHVybiJvdGhlciI7dGhyb3cgbmV3IEVycm9yKGBObyBwbHVyYWwgbWVzc2FnZSBmb3VuZCBmb3IgdmFsdWUgIiR7dH0iYCl9Y2xhc3Mgb00gZXh0ZW5kcyBlTXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMubG9jYWxlPXR9Z2V0UGx1cmFsQ2F0ZWdvcnkodCxlKXtzd2l0Y2goT0MoZXx8dGhpcy5sb2NhbGUpKHQpKXtjYXNlIHVDLlplcm86cmV0dXJuInplcm8iO2Nhc2UgdUMuT25lOnJldHVybiJvbmUiO2Nhc2UgdUMuVHdvOnJldHVybiJ0d28iO2Nhc2UgdUMuRmV3OnJldHVybiJmZXciO2Nhc2UgdUMuTWFueTpyZXR1cm4ibWFueSI7ZGVmYXVsdDpyZXR1cm4ib3RoZXIifX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBpTSh0LGUpe2U9ZW5jb2RlVVJJQ29tcG9uZW50KGUpO2Zvcihjb25zdCBuIG9mIHQuc3BsaXQoIjsiKSl7Y29uc3QgdD1uLmluZGV4T2YoIj0iKSxbbyxpXT0tMT09dD9bbiwiIl06W24uc2xpY2UoMCx0KSxuLnNsaWNlKHQrMSldO2lmKG8udHJpbSgpPT09ZSlyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGkpfXJldHVybiBudWxsfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9vTS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8b00pKHZyKFd5KSl9LG9NLsm1cHJvdj1Nbih7dG9rZW46b00sZmFjdG9yeTpvTS7JtWZhY30pLG9NLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1d5XX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChvTSxbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1d5XX1dfV19KSxudWxsKTtjbGFzcyBhTXtjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLl9pdGVyYWJsZURpZmZlcnM9dCx0aGlzLl9rZXlWYWx1ZURpZmZlcnM9ZSx0aGlzLl9uZ0VsPW4sdGhpcy5fcmVuZGVyZXI9byx0aGlzLl9pdGVyYWJsZURpZmZlcj1udWxsLHRoaXMuX2tleVZhbHVlRGlmZmVyPW51bGwsdGhpcy5faW5pdGlhbENsYXNzZXM9W10sdGhpcy5fcmF3Q2xhc3M9bnVsbH1zZXQga2xhc3ModCl7dGhpcy5fcmVtb3ZlQ2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5faW5pdGlhbENsYXNzZXM9InN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoL1xzKy8pOltdLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX3Jhd0NsYXNzKX1zZXQgbmdDbGFzcyh0KXt0aGlzLl9yZW1vdmVDbGFzc2VzKHRoaXMuX3Jhd0NsYXNzKSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2l0ZXJhYmxlRGlmZmVyPW51bGwsdGhpcy5fa2V5VmFsdWVEaWZmZXI9bnVsbCx0aGlzLl9yYXdDbGFzcz0ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgvXHMrLyk6dCx0aGlzLl9yYXdDbGFzcyYmKE5wKHRoaXMuX3Jhd0NsYXNzKT90aGlzLl9pdGVyYWJsZURpZmZlcj10aGlzLl9pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLl9yYXdDbGFzcykuY3JlYXRlKCk6dGhpcy5fa2V5VmFsdWVEaWZmZXI9dGhpcy5fa2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5fcmF3Q2xhc3MpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9pdGVyYWJsZURpZmZlcil7Y29uc3QgdD10aGlzLl9pdGVyYWJsZURpZmZlci5kaWZmKHRoaXMuX3Jhd0NsYXNzKTt0JiZ0aGlzLl9hcHBseUl0ZXJhYmxlQ2hhbmdlcyh0KX1lbHNlIGlmKHRoaXMuX2tleVZhbHVlRGlmZmVyKXtjb25zdCB0PXRoaXMuX2tleVZhbHVlRGlmZmVyLmRpZmYodGhpcy5fcmF3Q2xhc3MpO3QmJnRoaXMuX2FwcGx5S2V5VmFsdWVDaGFuZ2VzKHQpfX1fYXBwbHlLZXlWYWx1ZUNoYW5nZXModCl7dC5mb3JFYWNoQWRkZWRJdGVtKCh0PT50aGlzLl90b2dnbGVDbGFzcyh0LmtleSx0LmN1cnJlbnRWYWx1ZSkpKSx0LmZvckVhY2hDaGFuZ2VkSXRlbSgodD0+dGhpcy5fdG9nZ2xlQ2xhc3ModC5rZXksdC5jdXJyZW50VmFsdWUpKSksdC5mb3JFYWNoUmVtb3ZlZEl0ZW0oKHQ9Pnt0LnByZXZpb3VzVmFsdWUmJnRoaXMuX3RvZ2dsZUNsYXNzKHQua2V5LCExKX0pKX1fYXBwbHlJdGVyYWJsZUNoYW5nZXModCl7dC5mb3JFYWNoQWRkZWRJdGVtKCh0PT57aWYoInN0cmluZyIhPXR5cGVvZiB0Lml0ZW0pdGhyb3cgbmV3IEVycm9yKGBOZ0NsYXNzIGNhbiBvbmx5IHRvZ2dsZSBDU1MgY2xhc3NlcyBleHByZXNzZWQgYXMgc3RyaW5ncywgZ290ICR7R2UodC5pdGVtKX1gKTt0aGlzLl90b2dnbGVDbGFzcyh0Lml0ZW0sITApfSkpLHQuZm9yRWFjaFJlbW92ZWRJdGVtKCh0PT50aGlzLl90b2dnbGVDbGFzcyh0Lml0ZW0sITEpKSl9X2FwcGx5Q2xhc3Nlcyh0KXt0JiYoQXJyYXkuaXNBcnJheSh0KXx8dCBpbnN0YW5jZW9mIFNldD90LmZvckVhY2goKHQ9PnRoaXMuX3RvZ2dsZUNsYXNzKHQsITApKSk6T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZT0+dGhpcy5fdG9nZ2xlQ2xhc3MoZSwhIXRbZV0pKSkpfV9yZW1vdmVDbGFzc2VzKHQpe3QmJihBcnJheS5pc0FycmF5KHQpfHx0IGluc3RhbmNlb2YgU2V0P3QuZm9yRWFjaCgodD0+dGhpcy5fdG9nZ2xlQ2xhc3ModCwhMSkpKTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKCh0PT50aGlzLl90b2dnbGVDbGFzcyh0LCExKSkpKX1fdG9nZ2xlQ2xhc3ModCxlKXsodD10LnRyaW0oKSkmJnQuc3BsaXQoL1xzKy9nKS5mb3JFYWNoKCh0PT57ZT90aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsdCk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHQpfSkpfX1hTS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8YU0pKFNtKEhnKSxTbShMZyksU20oaGcpLFNtKENnKSl9LGFNLsm1ZGlyPWxvKHt0eXBlOmFNLHNlbGVjdG9yczpbWyIiLCJuZ0NsYXNzIiwiIl1dLGlucHV0czp7a2xhc3M6WyJjbGFzcyIsImtsYXNzIl0sbmdDbGFzczoibmdDbGFzcyJ9fSksYU0uY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpIZ30se3R5cGU6TGd9LHt0eXBlOmhnfSx7dHlwZTpDZ31dLGFNLnByb3BEZWNvcmF0b3JzPXtrbGFzczpbe3R5cGU6eHksYXJnczpbImNsYXNzIl19XSxuZ0NsYXNzOlt7dHlwZTp4eSxhcmdzOlsibmdDbGFzcyJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoYU0sW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW25nQ2xhc3NdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkhnfSx7dHlwZTpMZ30se3R5cGU6aGd9LHt0eXBlOkNnfV19KSx7a2xhc3M6W3t0eXBlOnh5LGFyZ3M6WyJjbGFzcyJdfV0sbmdDbGFzczpbe3R5cGU6eHksYXJnczpbIm5nQ2xhc3MiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyByTXtjb25zdHJ1Y3Rvcih0KXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPXQsdGhpcy5fY29tcG9uZW50UmVmPW51bGwsdGhpcy5fbW9kdWxlUmVmPW51bGx9bmdPbkNoYW5nZXModCl7aWYodGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpLHRoaXMuX2NvbXBvbmVudFJlZj1udWxsLHRoaXMubmdDb21wb25lbnRPdXRsZXQpe2NvbnN0IGU9dGhpcy5uZ0NvbXBvbmVudE91dGxldEluamVjdG9yfHx0aGlzLl92aWV3Q29udGFpbmVyUmVmLnBhcmVudEluamVjdG9yO2lmKHQubmdDb21wb25lbnRPdXRsZXROZ01vZHVsZUZhY3RvcnkpaWYodGhpcy5fbW9kdWxlUmVmJiZ0aGlzLl9tb2R1bGVSZWYuZGVzdHJveSgpLHRoaXMubmdDb21wb25lbnRPdXRsZXROZ01vZHVsZUZhY3Rvcnkpe2NvbnN0IHQ9ZS5nZXQodGgpO3RoaXMuX21vZHVsZVJlZj10aGlzLm5nQ29tcG9uZW50T3V0bGV0TmdNb2R1bGVGYWN0b3J5LmNyZWF0ZSh0LmluamVjdG9yKX1lbHNlIHRoaXMuX21vZHVsZVJlZj1udWxsO2NvbnN0IG49KHRoaXMuX21vZHVsZVJlZj90aGlzLl9tb2R1bGVSZWYuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOmUuZ2V0KHVnKSkucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy5uZ0NvbXBvbmVudE91dGxldCk7dGhpcy5fY29tcG9uZW50UmVmPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KG4sdGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGgsZSx0aGlzLm5nQ29tcG9uZW50T3V0bGV0Q29udGVudCl9fW5nT25EZXN0cm95KCl7dGhpcy5fbW9kdWxlUmVmJiZ0aGlzLl9tb2R1bGVSZWYuZGVzdHJveSgpfX1yTS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ck0pKFNtKGVoKSl9LHJNLsm1ZGlyPWxvKHt0eXBlOnJNLHNlbGVjdG9yczpbWyIiLCJuZ0NvbXBvbmVudE91dGxldCIsIiJdXSxpbnB1dHM6e25nQ29tcG9uZW50T3V0bGV0OiJuZ0NvbXBvbmVudE91dGxldCIsbmdDb21wb25lbnRPdXRsZXRJbmplY3RvcjoibmdDb21wb25lbnRPdXRsZXRJbmplY3RvciIsbmdDb21wb25lbnRPdXRsZXRDb250ZW50OiJuZ0NvbXBvbmVudE91dGxldENvbnRlbnQiLG5nQ29tcG9uZW50T3V0bGV0TmdNb2R1bGVGYWN0b3J5OiJuZ0NvbXBvbmVudE91dGxldE5nTW9kdWxlRmFjdG9yeSJ9LGZlYXR1cmVzOltCb119KSxyTS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmVofV0sck0ucHJvcERlY29yYXRvcnM9e25nQ29tcG9uZW50T3V0bGV0Olt7dHlwZTp4eX1dLG5nQ29tcG9uZW50T3V0bGV0SW5qZWN0b3I6W3t0eXBlOnh5fV0sbmdDb21wb25lbnRPdXRsZXRDb250ZW50Olt7dHlwZTp4eX1dLG5nQ29tcG9uZW50T3V0bGV0TmdNb2R1bGVGYWN0b3J5Olt7dHlwZTp4eX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHJNLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6IltuZ0NvbXBvbmVudE91dGxldF0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6ZWh9XX0pLHtuZ0NvbXBvbmVudE91dGxldDpbe3R5cGU6eHl9XSxuZ0NvbXBvbmVudE91dGxldEluamVjdG9yOlt7dHlwZTp4eX1dLG5nQ29tcG9uZW50T3V0bGV0Q29udGVudDpbe3R5cGU6eHl9XSxuZ0NvbXBvbmVudE91dGxldE5nTW9kdWxlRmFjdG9yeTpbe3R5cGU6eHl9XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3Mgc017Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy4kaW1wbGljaXQ9dCx0aGlzLm5nRm9yT2Y9ZSx0aGlzLmluZGV4PW4sdGhpcy5jb3VudD1vfWdldCBmaXJzdCgpe3JldHVybiAwPT09dGhpcy5pbmRleH1nZXQgbGFzdCgpe3JldHVybiB0aGlzLmluZGV4PT09dGhpcy5jb3VudC0xfWdldCBldmVuKCl7cmV0dXJuIHRoaXMuaW5kZXglMj09MH1nZXQgb2RkKCl7cmV0dXJuIXRoaXMuZXZlbn19Y2xhc3MgbE17Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX3ZpZXdDb250YWluZXI9dCx0aGlzLl90ZW1wbGF0ZT1lLHRoaXMuX2RpZmZlcnM9bix0aGlzLl9uZ0Zvck9mPW51bGwsdGhpcy5fbmdGb3JPZkRpcnR5PSEwLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ0Zvck9mKHQpe3RoaXMuX25nRm9yT2Y9dCx0aGlzLl9uZ0Zvck9mRGlydHk9ITB9c2V0IG5nRm9yVHJhY2tCeSh0KXsidW5kZWZpbmVkIiE9dHlwZW9mIG5nRGV2TW9kZSYmIW5nRGV2TW9kZXx8bnVsbD09dHx8ImZ1bmN0aW9uIj09dHlwZW9mIHR8fGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKGB0cmFja0J5IG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkodCl9LiBTZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9jb21tb24vTmdGb3JPZiNjaGFuZ2UtcHJvcGFnYXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uYCksdGhpcy5fdHJhY2tCeUZuPXR9Z2V0IG5nRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLl90cmFja0J5Rm59c2V0IG5nRm9yVGVtcGxhdGUodCl7dCYmKHRoaXMuX3RlbXBsYXRlPXQpfW5nRG9DaGVjaygpe2lmKHRoaXMuX25nRm9yT2ZEaXJ0eSl7dGhpcy5fbmdGb3JPZkRpcnR5PSExO2NvbnN0IHQ9dGhpcy5fbmdGb3JPZjtpZighdGhpcy5fZGlmZmVyJiZ0KXRyeXt0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKHQpLmNyZWF0ZSh0aGlzLm5nRm9yVHJhY2tCeSl9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBhIGRpZmZlciBzdXBwb3J0aW5nIG9iamVjdCAnJHt0fScgb2YgdHlwZSAnJHsoZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5uYW1lfHx0eXBlb2YgdH0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKSh0KX0nLiBOZ0ZvciBvbmx5IHN1cHBvcnRzIGJpbmRpbmcgdG8gSXRlcmFibGVzIHN1Y2ggYXMgQXJyYXlzLmApfX1pZih0aGlzLl9kaWZmZXIpe2NvbnN0IHQ9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fbmdGb3JPZik7dCYmdGhpcy5fYXBwbHlDaGFuZ2VzKHQpfX1fYXBwbHlDaGFuZ2VzKHQpe2NvbnN0IGU9W107dC5mb3JFYWNoT3BlcmF0aW9uKCgodCxuLG8pPT57aWYobnVsbD09dC5wcmV2aW91c0luZGV4KXtjb25zdCBuPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlLG5ldyBzTShudWxsLHRoaXMuX25nRm9yT2YsLTEsLTEpLG51bGw9PT1vP3ZvaWQgMDpvKSxpPW5ldyBjTSh0LG4pO2UucHVzaChpKX1lbHNlIGlmKG51bGw9PW8pdGhpcy5fdmlld0NvbnRhaW5lci5yZW1vdmUobnVsbD09PW4/dm9pZCAwOm4pO2Vsc2UgaWYobnVsbCE9PW4pe2NvbnN0IGk9dGhpcy5fdmlld0NvbnRhaW5lci5nZXQobik7dGhpcy5fdmlld0NvbnRhaW5lci5tb3ZlKGksbyk7Y29uc3QgYT1uZXcgY00odCxpKTtlLnB1c2goYSl9fSkpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXRoaXMuX3BlclZpZXdDaGFuZ2UoZVt0XS52aWV3LGVbdF0ucmVjb3JkKTtmb3IobGV0IHQ9MCxlPXRoaXMuX3ZpZXdDb250YWluZXIubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IG49dGhpcy5fdmlld0NvbnRhaW5lci5nZXQodCk7bi5jb250ZXh0LmluZGV4PXQsbi5jb250ZXh0LmNvdW50PWUsbi5jb250ZXh0Lm5nRm9yT2Y9dGhpcy5fbmdGb3JPZn10LmZvckVhY2hJZGVudGl0eUNoYW5nZSgodD0+e3RoaXMuX3ZpZXdDb250YWluZXIuZ2V0KHQuY3VycmVudEluZGV4KS5jb250ZXh0LiRpbXBsaWNpdD10Lml0ZW19KSl9X3BlclZpZXdDaGFuZ2UodCxlKXt0LmNvbnRleHQuJGltcGxpY2l0PWUuaXRlbX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZCh0LGUpe3JldHVybiEwfX1sTS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bE0pKFNtKGVoKSxTbShYZyksU20oSGcpKX0sbE0uybVkaXI9bG8oe3R5cGU6bE0sc2VsZWN0b3JzOltbIiIsIm5nRm9yIiwiIiwibmdGb3JPZiIsIiJdXSxpbnB1dHM6e25nRm9yT2Y6Im5nRm9yT2YiLG5nRm9yVHJhY2tCeToibmdGb3JUcmFja0J5IixuZ0ZvclRlbXBsYXRlOiJuZ0ZvclRlbXBsYXRlIn19KSxsTS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmVofSx7dHlwZTpYZ30se3R5cGU6SGd9XSxsTS5wcm9wRGVjb3JhdG9ycz17bmdGb3JPZjpbe3R5cGU6eHl9XSxuZ0ZvclRyYWNrQnk6W3t0eXBlOnh5fV0sbmdGb3JUZW1wbGF0ZTpbe3R5cGU6eHl9XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChsTSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmVofSx7dHlwZTpYZ30se3R5cGU6SGd9XX0pLHtuZ0Zvck9mOlt7dHlwZTp4eX1dLG5nRm9yVHJhY2tCeTpbe3R5cGU6eHl9XSxuZ0ZvclRlbXBsYXRlOlt7dHlwZTp4eX1dfSk7Y2xhc3MgY017Y29uc3RydWN0b3IodCxlKXt0aGlzLnJlY29yZD10LHRoaXMudmlldz1lfX1jbGFzcyBkTXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3ZpZXdDb250YWluZXI9dCx0aGlzLl9jb250ZXh0PW5ldyBwTSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmPWV9c2V0IG5nSWYodCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPXQsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmVGhlbih0KXttTSgibmdJZlRoZW4iLHQpLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj10LHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmRWxzZSh0KXttTSgibmdJZkVsc2UiLHQpLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj10LHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfV91cGRhdGVWaWV3KCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ/dGhpcy5fdGhlblZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWYmJih0aGlzLl90aGVuVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90aGVuVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKTp0aGlzLl9lbHNlVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZiYmKHRoaXMuX2Vsc2VWaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKHQsZSl7cmV0dXJuITB9fWRNLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkTSkoU20oZWgpLFNtKFhnKSl9LGRNLsm1ZGlyPWxvKHt0eXBlOmRNLHNlbGVjdG9yczpbWyIiLCJuZ0lmIiwiIl1dLGlucHV0czp7bmdJZjoibmdJZiIsbmdJZlRoZW46Im5nSWZUaGVuIixuZ0lmRWxzZToibmdJZkVsc2UifX0pLGRNLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6ZWh9LHt0eXBlOlhnfV0sZE0ucHJvcERlY29yYXRvcnM9e25nSWY6W3t0eXBlOnh5fV0sbmdJZlRoZW46W3t0eXBlOnh5fV0sbmdJZkVsc2U6W3t0eXBlOnh5fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoZE0sW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW25nSWZdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmVofSx7dHlwZTpYZ31dfSkse25nSWY6W3t0eXBlOnh5fV0sbmdJZlRoZW46W3t0eXBlOnh5fV0sbmdJZkVsc2U6W3t0eXBlOnh5fV19KTtjbGFzcyBwTXtjb25zdHJ1Y3Rvcigpe3RoaXMuJGltcGxpY2l0PW51bGwsdGhpcy5uZ0lmPW51bGx9fWZ1bmN0aW9uIG1NKHQsZSl7aWYoZSYmIWUuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBFcnJvcihgJHt0fSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnJHtHZShlKX0nLmApfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyB1TXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9dCx0aGlzLl90ZW1wbGF0ZVJlZj1lLHRoaXMuX2NyZWF0ZWQ9ITF9Y3JlYXRlKCl7dGhpcy5fY3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9ZGVzdHJveSgpe3RoaXMuX2NyZWF0ZWQ9ITEsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpfWVuZm9yY2VTdGF0ZSh0KXt0JiYhdGhpcy5fY3JlYXRlZD90aGlzLmNyZWF0ZSgpOiF0JiZ0aGlzLl9jcmVhdGVkJiZ0aGlzLmRlc3Ryb3koKX19Y2xhc3MgZk17Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0VXNlZD0hMSx0aGlzLl9jYXNlQ291bnQ9MCx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExfXNldCBuZ1N3aXRjaCh0KXt0aGlzLl9uZ1N3aXRjaD10LDA9PT10aGlzLl9jYXNlQ291bnQmJnRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghMCl9X2FkZENhc2UoKXtyZXR1cm4gdGhpcy5fY2FzZUNvdW50Kyt9X2FkZERlZmF1bHQodCl7dGhpcy5fZGVmYXVsdFZpZXdzfHwodGhpcy5fZGVmYXVsdFZpZXdzPVtdKSx0aGlzLl9kZWZhdWx0Vmlld3MucHVzaCh0KX1fbWF0Y2hDYXNlKHQpe2NvbnN0IGU9dD09dGhpcy5fbmdTd2l0Y2g7cmV0dXJuIHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9dGhpcy5fbGFzdENhc2VzTWF0Y2hlZHx8ZSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXgrKyx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9PT10aGlzLl9jYXNlQ291bnQmJih0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoIXRoaXMuX2xhc3RDYXNlc01hdGNoZWQpLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD0wLHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9ITEpLGV9X3VwZGF0ZURlZmF1bHRDYXNlcyh0KXtpZih0aGlzLl9kZWZhdWx0Vmlld3MmJnQhPT10aGlzLl9kZWZhdWx0VXNlZCl7dGhpcy5fZGVmYXVsdFVzZWQ9dDtmb3IobGV0IGU9MDtlPHRoaXMuX2RlZmF1bHRWaWV3cy5sZW5ndGg7ZSsrKXRoaXMuX2RlZmF1bHRWaWV3c1tlXS5lbmZvcmNlU3RhdGUodCl9fX1mTS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Zk0pfSxmTS7JtWRpcj1sbyh7dHlwZTpmTSxzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2giLCIiXV0saW5wdXRzOntuZ1N3aXRjaDoibmdTd2l0Y2gifX0pLGZNLnByb3BEZWNvcmF0b3JzPXtuZ1N3aXRjaDpbe3R5cGU6eHl9XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChmTSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbbmdTd2l0Y2hdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSx7bmdTd2l0Y2g6W3t0eXBlOnh5fV19KTtjbGFzcyBnTXtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5uZ1N3aXRjaD1uLCJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiYhbmdEZXZNb2RlfHxufHxiTSgibmdTd2l0Y2hDYXNlIiwiTmdTd2l0Y2hDYXNlIiksbi5fYWRkQ2FzZSgpLHRoaXMuX3ZpZXc9bmV3IHVNKHQsZSl9bmdEb0NoZWNrKCl7dGhpcy5fdmlldy5lbmZvcmNlU3RhdGUodGhpcy5uZ1N3aXRjaC5fbWF0Y2hDYXNlKHRoaXMubmdTd2l0Y2hDYXNlKSl9fWdNLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxnTSkoU20oZWgpLFNtKFhnKSxTbShmTSw5KSl9LGdNLsm1ZGlyPWxvKHt0eXBlOmdNLHNlbGVjdG9yczpbWyIiLCJuZ1N3aXRjaENhc2UiLCIiXV0saW5wdXRzOntuZ1N3aXRjaENhc2U6Im5nU3dpdGNoQ2FzZSJ9fSksZ00uY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTplaH0se3R5cGU6WGd9LHt0eXBlOmZNLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpScn1dfV0sZ00ucHJvcERlY29yYXRvcnM9e25nU3dpdGNoQ2FzZTpbe3R5cGU6eHl9XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChnTSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbbmdTd2l0Y2hDYXNlXSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTplaH0se3R5cGU6WGd9LHt0eXBlOmZNLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpScn1dfV19KSx7bmdTd2l0Y2hDYXNlOlt7dHlwZTp4eX1dfSk7Y2xhc3MgaE17Y29uc3RydWN0b3IodCxlLG4peyJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiYhbmdEZXZNb2RlfHxufHxiTSgibmdTd2l0Y2hEZWZhdWx0IiwiTmdTd2l0Y2hEZWZhdWx0Iiksbi5fYWRkRGVmYXVsdChuZXcgdU0odCxlKSl9fWZ1bmN0aW9uIGJNKHQsZSl7dGhyb3cgbmV3IEtlKCIzMDUiLGBBbiBlbGVtZW50IHdpdGggdGhlICIke3R9IiBhdHRyaWJ1dGUgKG1hdGNoaW5nIHRoZSAiJHtlfSIgZGlyZWN0aXZlKSBtdXN0IGJlIGxvY2F0ZWQgaW5zaWRlIGFuIGVsZW1lbnQgd2l0aCB0aGUgIm5nU3dpdGNoIiBhdHRyaWJ1dGUgKG1hdGNoaW5nICJOZ1N3aXRjaCIgZGlyZWN0aXZlKWApfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9oTS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aE0pKFNtKGVoKSxTbShYZyksU20oZk0sOSkpfSxoTS7JtWRpcj1sbyh7dHlwZTpoTSxzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2hEZWZhdWx0IiwiIl1dfSksaE0uY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTplaH0se3R5cGU6WGd9LHt0eXBlOmZNLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpScn1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChoTSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbbmdTd2l0Y2hEZWZhdWx0XSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTplaH0se3R5cGU6WGd9LHt0eXBlOmZNLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpScn1dfV19KSxudWxsKTtjbGFzcyB5TXtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9sb2NhbGl6YXRpb249dCx0aGlzLl9jYXNlVmlld3M9e319c2V0IG5nUGx1cmFsKHQpe3RoaXMuX3N3aXRjaFZhbHVlPXQsdGhpcy5fdXBkYXRlVmlldygpfWFkZENhc2UodCxlKXt0aGlzLl9jYXNlVmlld3NbdF09ZX1fdXBkYXRlVmlldygpe3RoaXMuX2NsZWFyVmlld3MoKTtjb25zdCB0PU9iamVjdC5rZXlzKHRoaXMuX2Nhc2VWaWV3cyksZT1uTSh0aGlzLl9zd2l0Y2hWYWx1ZSx0LHRoaXMuX2xvY2FsaXphdGlvbik7dGhpcy5fYWN0aXZhdGVWaWV3KHRoaXMuX2Nhc2VWaWV3c1tlXSl9X2NsZWFyVmlld3MoKXt0aGlzLl9hY3RpdmVWaWV3JiZ0aGlzLl9hY3RpdmVWaWV3LmRlc3Ryb3koKX1fYWN0aXZhdGVWaWV3KHQpe3QmJih0aGlzLl9hY3RpdmVWaWV3PXQsdGhpcy5fYWN0aXZlVmlldy5jcmVhdGUoKSl9fXlNLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx5TSkoU20oZU0pKX0seU0uybVkaXI9bG8oe3R5cGU6eU0sc2VsZWN0b3JzOltbIiIsIm5nUGx1cmFsIiwiIl1dLGlucHV0czp7bmdQbHVyYWw6Im5nUGx1cmFsIn19KSx5TS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmVNfV0seU0ucHJvcERlY29yYXRvcnM9e25nUGx1cmFsOlt7dHlwZTp4eX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHlNLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6IltuZ1BsdXJhbF0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6ZU19XX0pLHtuZ1BsdXJhbDpbe3R5cGU6eHl9XX0pO2NsYXNzIF9Ne2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMudmFsdWU9dDtjb25zdCBpPSFpc05hTihOdW1iZXIodCkpO28uYWRkQ2FzZShpP2A9JHt0fWA6dCxuZXcgdU0obixlKSl9fV9NLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxfTSkoTmEoIm5nUGx1cmFsQ2FzZSIpLFNtKFhnKSxTbShlaCksU20oeU0sMSkpfSxfTS7JtWRpcj1sbyh7dHlwZTpfTSxzZWxlY3RvcnM6W1siIiwibmdQbHVyYWxDYXNlIiwiIl1dfSksX00uY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6amEsYXJnczpbIm5nUGx1cmFsQ2FzZSJdfV19LHt0eXBlOlhnfSx7dHlwZTplaH0se3R5cGU6eU0sZGVjb3JhdG9yczpbe3R5cGU6UnJ9XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoX00sW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW25nUGx1cmFsQ2FzZV0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmphLGFyZ3M6WyJuZ1BsdXJhbENhc2UiXX1dfSx7dHlwZTpYZ30se3R5cGU6ZWh9LHt0eXBlOnlNLGRlY29yYXRvcnM6W3t0eXBlOlJyfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgQ017Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX25nRWw9dCx0aGlzLl9kaWZmZXJzPWUsdGhpcy5fcmVuZGVyZXI9bix0aGlzLl9uZ1N0eWxlPW51bGwsdGhpcy5fZGlmZmVyPW51bGx9c2V0IG5nU3R5bGUodCl7dGhpcy5fbmdTdHlsZT10LCF0aGlzLl9kaWZmZXImJnQmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKHQpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXIpe2NvbnN0IHQ9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fbmdTdHlsZSk7dCYmdGhpcy5fYXBwbHlDaGFuZ2VzKHQpfX1fc2V0U3R5bGUodCxlKXtjb25zdFtuLG9dPXQuc3BsaXQoIi4iKTtudWxsIT0oZT1udWxsIT1lJiZvP2Ake2V9JHtvfWA6ZSk/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LG4sZSk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LG4pfV9hcHBseUNoYW5nZXModCl7dC5mb3JFYWNoUmVtb3ZlZEl0ZW0oKHQ9PnRoaXMuX3NldFN0eWxlKHQua2V5LG51bGwpKSksdC5mb3JFYWNoQWRkZWRJdGVtKCh0PT50aGlzLl9zZXRTdHlsZSh0LmtleSx0LmN1cnJlbnRWYWx1ZSkpKSx0LmZvckVhY2hDaGFuZ2VkSXRlbSgodD0+dGhpcy5fc2V0U3R5bGUodC5rZXksdC5jdXJyZW50VmFsdWUpKSl9fUNNLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxDTSkoU20oaGcpLFNtKExnKSxTbShDZykpfSxDTS7JtWRpcj1sbyh7dHlwZTpDTSxzZWxlY3RvcnM6W1siIiwibmdTdHlsZSIsIiJdXSxpbnB1dHM6e25nU3R5bGU6Im5nU3R5bGUifX0pLENNLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6aGd9LHt0eXBlOkxnfSx7dHlwZTpDZ31dLENNLnByb3BEZWNvcmF0b3JzPXtuZ1N0eWxlOlt7dHlwZTp4eSxhcmdzOlsibmdTdHlsZSJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoQ00sW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW25nU3R5bGVdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfSx7dHlwZTpMZ30se3R5cGU6Q2d9XX0pLHtuZ1N0eWxlOlt7dHlwZTp4eSxhcmdzOlsibmdTdHlsZSJdfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIE1Ne2NvbnN0cnVjdG9yKHQpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9dCx0aGlzLl92aWV3UmVmPW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldD1udWxsfW5nT25DaGFuZ2VzKHQpe2lmKHQubmdUZW1wbGF0ZU91dGxldCl7Y29uc3QgdD10aGlzLl92aWV3Q29udGFpbmVyUmVmO3RoaXMuX3ZpZXdSZWYmJnQucmVtb3ZlKHQuaW5kZXhPZih0aGlzLl92aWV3UmVmKSksdGhpcy5fdmlld1JlZj10aGlzLm5nVGVtcGxhdGVPdXRsZXQ/dC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5uZ1RlbXBsYXRlT3V0bGV0LHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpOm51bGx9ZWxzZSB0aGlzLl92aWV3UmVmJiZ0Lm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiZ0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiYodGhpcy5fdmlld1JlZi5jb250ZXh0PXRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpfX1NTS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TU0pKFNtKGVoKSl9LE1NLsm1ZGlyPWxvKHt0eXBlOk1NLHNlbGVjdG9yczpbWyIiLCJuZ1RlbXBsYXRlT3V0bGV0IiwiIl1dLGlucHV0czp7bmdUZW1wbGF0ZU91dGxldENvbnRleHQ6Im5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixuZ1RlbXBsYXRlT3V0bGV0OiJuZ1RlbXBsYXRlT3V0bGV0In0sZmVhdHVyZXM6W0JvXX0pLE1NLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6ZWh9XSxNTS5wcm9wRGVjb3JhdG9ycz17bmdUZW1wbGF0ZU91dGxldENvbnRleHQ6W3t0eXBlOnh5fV0sbmdUZW1wbGF0ZU91dGxldDpbe3R5cGU6eHl9XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChNTSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6ZWh9XX0pLHtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDpbe3R5cGU6eHl9XSxuZ1RlbXBsYXRlT3V0bGV0Olt7dHlwZTp4eX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCB2TT1bYU0sck0sbE0sZE0sTU0sQ00sZk0sZ00saE0seU0sX01dOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiB4TSh0LGUpe3JldHVybiBFcnJvcihgSW52YWxpZFBpcGVBcmd1bWVudDogJyR7ZX0nIGZvciBwaXBlICcke0dlKHQpfSdgKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgT009bmV3IGNsYXNze2NyZWF0ZVN1YnNjcmlwdGlvbih0LGUpe3JldHVybiB0LnRoZW4oZSwodD0+e3Rocm93IHR9KSl9ZGlzcG9zZSh0KXt9b25EZXN0cm95KHQpe319LFBNPW5ldyBjbGFzc3tjcmVhdGVTdWJzY3JpcHRpb24odCxlKXtyZXR1cm4gdC5zdWJzY3JpYmUoe25leHQ6ZSxlcnJvcjp0PT57dGhyb3cgdH19KX1kaXNwb3NlKHQpe3QudW5zdWJzY3JpYmUoKX1vbkRlc3Ryb3kodCl7dC51bnN1YnNjcmliZSgpfX07Y2xhc3Mgd017Y29uc3RydWN0b3IodCl7dGhpcy5fcmVmPXQsdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbCx0aGlzLl9zdHJhdGVneT1udWxsfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9uJiZ0aGlzLl9kaXNwb3NlKCl9dHJhbnNmb3JtKHQpe3JldHVybiB0aGlzLl9vYmo/dCE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKHQpKTp0aGlzLl9sYXRlc3RWYWx1ZToodCYmdGhpcy5fc3Vic2NyaWJlKHQpLHRoaXMuX2xhdGVzdFZhbHVlKX1fc3Vic2NyaWJlKHQpe3RoaXMuX29iaj10LHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KHQpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24odCwoZT0+dGhpcy5fdXBkYXRlTGF0ZXN0VmFsdWUodCxlKSkpfV9zZWxlY3RTdHJhdGVneSh0KXtpZihGbSh0KSlyZXR1cm4gT007aWYoTG0odCkpcmV0dXJuIFBNO3Rocm93IHhNKHdNLHQpfV9kaXNwb3NlKCl7dGhpcy5fc3RyYXRlZ3kuZGlzcG9zZSh0aGlzLl9zdWJzY3JpcHRpb24pLHRoaXMuX2xhdGVzdFZhbHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGx9X3VwZGF0ZUxhdGVzdFZhbHVlKHQsZSl7dD09PXRoaXMuX29iaiYmKHRoaXMuX2xhdGVzdFZhbHVlPWUsdGhpcy5fcmVmLm1hcmtGb3JDaGVjaygpKX19d00uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHdNKShTbShVZywxNikpfSx3TS7JtXBpcGU9Y28oe25hbWU6ImFzeW5jIix0eXBlOndNLHB1cmU6ITF9KSx3TS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlVnfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh3TSxbe3R5cGU6dnksYXJnczpbe25hbWU6ImFzeW5jIixwdXJlOiExfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6VWd9XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3Mga017dHJhbnNmb3JtKHQpe2lmKG51bGw9PXQpcmV0dXJuIG51bGw7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IHhNKGtNLHQpO3JldHVybiB0LnRvTG93ZXJDYXNlKCl9fWtNLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxrTSl9LGtNLsm1cGlwZT1jbyh7bmFtZToibG93ZXJjYXNlIix0eXBlOmtNLHB1cmU6ITB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGtNLFt7dHlwZTp2eSxhcmdzOlt7bmFtZToibG93ZXJjYXNlIn1dfV0sbnVsbCxudWxsKTtjb25zdCBTTT0vKD86W0EtWmEtelx4QUFceEI1XHhCQVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3RFx1MDM3Rlx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUwNUVBXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQVx1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwODYwLVx1MDg2QVx1MDhBMC1cdTA4QjRcdTA4QjYtXHUwOEJEXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTgwXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTA5RkNcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzlcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQUY5XHUwQjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMFx1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzlcdTBDM0RcdTBDNTgtXHUwQzVBXHUwQzYwXHUwQzYxXHUwQzgwXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMFx1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENTQtXHUwRDU2XHUwRDVGLVx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNVx1MTNGOC1cdTEzRkRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNkYxLVx1MTZGOFx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDdcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MTg4NFx1MTg4Ny1cdTE4QThcdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxRVx1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlCMC1cdTE5QzlcdTFBMDAtXHUxQTE2XHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRlx1MUJCQS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDODAtXHUxQzg4XHUxQ0U5LVx1MUNFQ1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NFx1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRVx1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkVBXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQlx1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjlEXHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XHVBNzhCLVx1QTdBRVx1QTdCMC1cdUE3QjdcdUE3RjctXHVBODAxXHVBODAzLVx1QTgwNVx1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXHVBOEZEXHVBOTBBLVx1QTkyNVx1QTkzMC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QTlFMC1cdUE5RTRcdUE5RTYtXHVBOUVGXHVBOUZBLVx1QTlGRVx1QUEwMC1cdUFBMjhcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBN0UtXHVBQUFGXHVBQUIxXHVBQUI1XHVBQUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVBQUYyLVx1QUFGNFx1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXHVBQjMwLVx1QUI1QVx1QUI1Qy1cdUFCNjVcdUFCNzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXXxcdUQ4MDBbXHVEQzAwLVx1REMwQlx1REMwRC1cdURDMjZcdURDMjgtXHVEQzNBXHVEQzNDXHVEQzNEXHVEQzNGLVx1REM0RFx1REM1MC1cdURDNURcdURDODAtXHVEQ0ZBXHVERTgwLVx1REU5Q1x1REVBMC1cdURFRDBcdURGMDAtXHVERjFGXHVERjJELVx1REY0MFx1REY0Mi1cdURGNDlcdURGNTAtXHVERjc1XHVERjgwLVx1REY5RFx1REZBMC1cdURGQzNcdURGQzgtXHVERkNGXXxcdUQ4MDFbXHVEQzAwLVx1REM5RFx1RENCMC1cdURDRDNcdURDRDgtXHVEQ0ZCXHVERDAwLVx1REQyN1x1REQzMC1cdURENjNcdURFMDAtXHVERjM2XHVERjQwLVx1REY1NVx1REY2MC1cdURGNjddfFx1RDgwMltcdURDMDAtXHVEQzA1XHVEQzA4XHVEQzBBLVx1REMzNVx1REMzN1x1REMzOFx1REMzQ1x1REMzRi1cdURDNTVcdURDNjAtXHVEQzc2XHVEQzgwLVx1REM5RVx1RENFMC1cdURDRjJcdURDRjRcdURDRjVcdUREMDAtXHVERDE1XHVERDIwLVx1REQzOVx1REQ4MC1cdUREQjdcdUREQkVcdUREQkZcdURFMDBcdURFMTAtXHVERTEzXHVERTE1LVx1REUxN1x1REUxOS1cdURFMzNcdURFNjAtXHVERTdDXHVERTgwLVx1REU5Q1x1REVDMC1cdURFQzdcdURFQzktXHVERUU0XHVERjAwLVx1REYzNVx1REY0MC1cdURGNTVcdURGNjAtXHVERjcyXHVERjgwLVx1REY5MV18XHVEODAzW1x1REMwMC1cdURDNDhcdURDODAtXHVEQ0IyXHVEQ0MwLVx1RENGMl18XHVEODA0W1x1REMwMy1cdURDMzdcdURDODMtXHVEQ0FGXHVEQ0QwLVx1RENFOFx1REQwMy1cdUREMjZcdURENTAtXHVERDcyXHVERDc2XHVERDgzLVx1RERCMlx1RERDMS1cdUREQzRcdUREREFcdURERENcdURFMDAtXHVERTExXHVERTEzLVx1REUyQlx1REU4MC1cdURFODZcdURFODhcdURFOEEtXHVERThEXHVERThGLVx1REU5RFx1REU5Ri1cdURFQThcdURFQjAtXHVERURFXHVERjA1LVx1REYwQ1x1REYwRlx1REYxMFx1REYxMy1cdURGMjhcdURGMkEtXHVERjMwXHVERjMyXHVERjMzXHVERjM1LVx1REYzOVx1REYzRFx1REY1MFx1REY1RC1cdURGNjFdfFx1RDgwNVtcdURDMDAtXHVEQzM0XHVEQzQ3LVx1REM0QVx1REM4MC1cdURDQUZcdURDQzRcdURDQzVcdURDQzdcdUREODAtXHVEREFFXHVEREQ4LVx1REREQlx1REUwMC1cdURFMkZcdURFNDRcdURFODAtXHVERUFBXHVERjAwLVx1REYxOV18XHVEODA2W1x1RENBMC1cdURDREZcdURDRkZcdURFMDBcdURFMEItXHVERTMyXHVERTNBXHVERTUwXHVERTVDLVx1REU4M1x1REU4Ni1cdURFODlcdURFQzAtXHVERUY4XXxcdUQ4MDdbXHVEQzAwLVx1REMwOFx1REMwQS1cdURDMkVcdURDNDBcdURDNzItXHVEQzhGXHVERDAwLVx1REQwNlx1REQwOFx1REQwOVx1REQwQi1cdUREMzBcdURENDZdfFx1RDgwOFtcdURDMDAtXHVERjk5XXxcdUQ4MDlbXHVEQzgwLVx1REQ0M118W1x1RDgwQ1x1RDgxQy1cdUQ4MjBcdUQ4NDAtXHVEODY4XHVEODZBLVx1RDg2Q1x1RDg2Ri1cdUQ4NzJcdUQ4NzQtXHVEODc5XVtcdURDMDAtXHVERkZGXXxcdUQ4MERbXHVEQzAwLVx1REMyRV18XHVEODExW1x1REMwMC1cdURFNDZdfFx1RDgxQVtcdURDMDAtXHVERTM4XHVERTQwLVx1REU1RVx1REVEMC1cdURFRURcdURGMDAtXHVERjJGXHVERjQwLVx1REY0M1x1REY2My1cdURGNzdcdURGN0QtXHVERjhGXXxcdUQ4MUJbXHVERjAwLVx1REY0NFx1REY1MFx1REY5My1cdURGOUZcdURGRTBcdURGRTFdfFx1RDgyMVtcdURDMDAtXHVERkVDXXxcdUQ4MjJbXHVEQzAwLVx1REVGMl18XHVEODJDW1x1REMwMC1cdUREMUVcdURENzAtXHVERUZCXXxcdUQ4MkZbXHVEQzAwLVx1REM2QVx1REM3MC1cdURDN0NcdURDODAtXHVEQzg4XHVEQzkwLVx1REM5OV18XHVEODM1W1x1REMwMC1cdURDNTRcdURDNTYtXHVEQzlDXHVEQzlFXHVEQzlGXHVEQ0EyXHVEQ0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVEQ0MzXHVEQ0M1LVx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1REQxRS1cdUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1cdURENTBcdURENTItXHVERUE1XHVERUE4LVx1REVDMFx1REVDMi1cdURFREFcdURFREMtXHVERUZBXHVERUZDLVx1REYxNFx1REYxNi1cdURGMzRcdURGMzYtXHVERjRFXHVERjUwLVx1REY2RVx1REY3MC1cdURGODhcdURGOEEtXHVERkE4XHVERkFBLVx1REZDMlx1REZDNC1cdURGQ0JdfFx1RDgzQVtcdURDMDAtXHVEQ0M0XHVERDAwLVx1REQ0M118XHVEODNCW1x1REUwMC1cdURFMDNcdURFMDUtXHVERTFGXHVERTIxXHVERTIyXHVERTI0XHVERTI3XHVERTI5LVx1REUzMlx1REUzNC1cdURFMzdcdURFMzlcdURFM0JcdURFNDJcdURFNDdcdURFNDlcdURFNEJcdURFNEQtXHVERTRGXHVERTUxXHVERTUyXHVERTU0XHVERTU3XHVERTU5XHVERTVCXHVERTVEXHVERTVGXHVERTYxXHVERTYyXHVERTY0XHVERTY3LVx1REU2QVx1REU2Qy1cdURFNzJcdURFNzQtXHVERTc3XHVERTc5LVx1REU3Q1x1REU3RVx1REU4MC1cdURFODlcdURFOEItXHVERTlCXHVERUExLVx1REVBM1x1REVBNS1cdURFQTlcdURFQUItXHVERUJCXXxcdUQ4NjlbXHVEQzAwLVx1REVENlx1REYwMC1cdURGRkZdfFx1RDg2RFtcdURDMDAtXHVERjM0XHVERjQwLVx1REZGRl18XHVEODZFW1x1REMwMC1cdURDMURcdURDMjAtXHVERkZGXXxcdUQ4NzNbXHVEQzAwLVx1REVBMVx1REVCMC1cdURGRkZdfFx1RDg3QVtcdURDMDAtXHVERkUwXXxcdUQ4N0VbXHVEQzAwLVx1REUxRF0pXFMqL2c7Y2xhc3MgRE17dHJhbnNmb3JtKHQpe2lmKG51bGw9PXQpcmV0dXJuIG51bGw7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IHhNKERNLHQpO3JldHVybiB0LnJlcGxhY2UoU00sKHQ9PnRbMF0udG9VcHBlckNhc2UoKSt0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpKSl9fURNLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxETSl9LERNLsm1cGlwZT1jbyh7bmFtZToidGl0bGVjYXNlIix0eXBlOkRNLHB1cmU6ITB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKERNLFt7dHlwZTp2eSxhcmdzOlt7bmFtZToidGl0bGVjYXNlIn1dfV0sbnVsbCxudWxsKTtjbGFzcyBFTXt0cmFuc2Zvcm0odCl7aWYobnVsbD09dClyZXR1cm4gbnVsbDtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgeE0oRU0sdCk7cmV0dXJuIHQudG9VcHBlckNhc2UoKX19RU0uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEVNKX0sRU0uybVwaXBlPWNvKHtuYW1lOiJ1cHBlcmNhc2UiLHR5cGU6RU0scHVyZTohMH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoRU0sW3t0eXBlOnZ5LGFyZ3M6W3tuYW1lOiJ1cHBlcmNhc2UifV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgUk17Y29uc3RydWN0b3IodCl7dGhpcy5sb2NhbGU9dH10cmFuc2Zvcm0odCxlPSJtZWRpdW1EYXRlIixuLG8pe2lmKG51bGw9PXR8fCIiPT09dHx8dCE9dClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIE5DKHQsZSxvfHx0aGlzLmxvY2FsZSxuKX1jYXRjaCh0KXt0aHJvdyB4TShSTSx0Lm1lc3NhZ2UpfX19Uk0uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFJNKShTbShXeSwxNikpfSxSTS7JtXBpcGU9Y28oe25hbWU6ImRhdGUiLHR5cGU6Uk0scHVyZTohMH0pLFJNLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1d5XX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChSTSxbe3R5cGU6dnksYXJnczpbe25hbWU6ImRhdGUiLHB1cmU6ITB9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbV3ldfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgQU09LyMvZztjbGFzcyBUTXtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9sb2NhbGl6YXRpb249dH10cmFuc2Zvcm0odCxlLG4pe2lmKG51bGw9PXQpcmV0dXJuIiI7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHxudWxsPT09ZSl0aHJvdyB4TShUTSxlKTtyZXR1cm4gZVtuTSh0LE9iamVjdC5rZXlzKGUpLHRoaXMuX2xvY2FsaXphdGlvbixuKV0ucmVwbGFjZShBTSx0LnRvU3RyaW5nKCkpfX1UTS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VE0pKFNtKGVNLDE2KSl9LFRNLsm1cGlwZT1jbyh7bmFtZToiaTE4blBsdXJhbCIsdHlwZTpUTSxwdXJlOiEwfSksVE0uY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTplTX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoVE0sW3t0eXBlOnZ5LGFyZ3M6W3tuYW1lOiJpMThuUGx1cmFsIixwdXJlOiEwfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6ZU19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgTk17dHJhbnNmb3JtKHQsZSl7aWYobnVsbD09dClyZXR1cm4iIjtpZigib2JqZWN0IiE9dHlwZW9mIGV8fCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyB4TShOTSxlKTtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSh0KT9lW3RdOmUuaGFzT3duUHJvcGVydHkoIm90aGVyIik/ZS5vdGhlcjoiIn19Tk0uybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE5NKX0sTk0uybVwaXBlPWNvKHtuYW1lOiJpMThuU2VsZWN0Iix0eXBlOk5NLHB1cmU6ITB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKE5NLFt7dHlwZTp2eSxhcmdzOlt7bmFtZToiaTE4blNlbGVjdCIscHVyZTohMH1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHpNe3RyYW5zZm9ybSh0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCxudWxsLDIpfX16TS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ek0pfSx6TS7JtXBpcGU9Y28oe25hbWU6Impzb24iLHR5cGU6ek0scHVyZTohMX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoek0sW3t0eXBlOnZ5LGFyZ3M6W3tuYW1lOiJqc29uIixwdXJlOiExfV19XSxudWxsLG51bGwpO2NsYXNzIElNe2NvbnN0cnVjdG9yKHQpe3RoaXMuZGlmZmVycz10LHRoaXMua2V5VmFsdWVzPVtdLHRoaXMuY29tcGFyZUZuPUhNfXRyYW5zZm9ybSh0LGU9SE0pe2lmKCF0fHwhKHQgaW5zdGFuY2VvZiBNYXApJiYib2JqZWN0IiE9dHlwZW9mIHQpcmV0dXJuIG51bGw7dGhpcy5kaWZmZXJ8fCh0aGlzLmRpZmZlcj10aGlzLmRpZmZlcnMuZmluZCh0KS5jcmVhdGUoKSk7Y29uc3Qgbj10aGlzLmRpZmZlci5kaWZmKHQpLG89ZSE9PXRoaXMuY29tcGFyZUZuO3JldHVybiBuJiYodGhpcy5rZXlWYWx1ZXM9W10sbi5mb3JFYWNoSXRlbSgodD0+e3RoaXMua2V5VmFsdWVzLnB1c2goKAovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gZSh0LG4pe3JldHVybntrZXk6dCx2YWx1ZTpufX0pKHQua2V5LHQuY3VycmVudFZhbHVlKSl9KSkpLChufHxvKSYmKHRoaXMua2V5VmFsdWVzLnNvcnQoZSksdGhpcy5jb21wYXJlRm49ZSksdGhpcy5rZXlWYWx1ZXN9fWZ1bmN0aW9uIEhNKHQsZSl7Y29uc3Qgbj10LmtleSxvPWUua2V5O2lmKG49PT1vKXJldHVybiAwO2lmKHZvaWQgMD09PW4pcmV0dXJuIDE7aWYodm9pZCAwPT09bylyZXR1cm4tMTtpZihudWxsPT09bilyZXR1cm4gMTtpZihudWxsPT09bylyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIG4mJiJzdHJpbmciPT10eXBlb2YgbylyZXR1cm4gbjxvPy0xOjE7aWYoIm51bWJlciI9PXR5cGVvZiBuJiYibnVtYmVyIj09dHlwZW9mIG8pcmV0dXJuIG4tbztpZigiYm9vbGVhbiI9PXR5cGVvZiBuJiYiYm9vbGVhbiI9PXR5cGVvZiBvKXJldHVybiBuPG8/LTE6MTtjb25zdCBpPVN0cmluZyhuKSxhPVN0cmluZyhvKTtyZXR1cm4gaT09YT8wOmk8YT8tMToxfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9JTS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SU0pKFNtKExnLDE2KSl9LElNLsm1cGlwZT1jbyh7bmFtZToia2V5dmFsdWUiLHR5cGU6SU0scHVyZTohMX0pLElNLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6TGd9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKElNLFt7dHlwZTp2eSxhcmdzOlt7bmFtZToia2V5dmFsdWUiLHB1cmU6ITF9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpMZ31dfSksbnVsbCk7Y2xhc3MgRk17Y29uc3RydWN0b3IodCl7dGhpcy5fbG9jYWxlPXR9dHJhbnNmb3JtKHQsZSxuKXtpZighVk0odCkpcmV0dXJuIG51bGw7bj1ufHx0aGlzLl9sb2NhbGU7dHJ5e3JldHVybiBRQyhqTSh0KSxuLGUpfWNhdGNoKHQpe3Rocm93IHhNKEZNLHQubWVzc2FnZSl9fX1GTS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Rk0pKFNtKFd5LDE2KSl9LEZNLsm1cGlwZT1jbyh7bmFtZToibnVtYmVyIix0eXBlOkZNLHB1cmU6ITB9KSxGTS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltXeV19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoRk0sW3t0eXBlOnZ5LGFyZ3M6W3tuYW1lOiJudW1iZXIifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1d5XX1dfV19KSxudWxsKTtjbGFzcyBMTXtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9sb2NhbGU9dH10cmFuc2Zvcm0odCxlLG4pe2lmKCFWTSh0KSlyZXR1cm4gbnVsbDtuPW58fHRoaXMuX2xvY2FsZTt0cnl7cmV0dXJuKGZ1bmN0aW9uIG8odCxlLG4pe3JldHVybiBKQyh0LCRDKHhDKGUsbUMuUGVyY2VudCksdkMoZSxiQy5NaW51c1NpZ24pKSxlLGJDLkdyb3VwLGJDLkRlY2ltYWwsbiwhMCkucmVwbGFjZShuZXcgUmVnRXhwKCIlIiwiZyIpLHZDKGUsYkMuUGVyY2VudFNpZ24pKX0pKGpNKHQpLG4sZSl9Y2F0Y2godCl7dGhyb3cgeE0oTE0sdC5tZXNzYWdlKX19fUxNLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxMTSkoU20oV3ksMTYpKX0sTE0uybVwaXBlPWNvKHtuYW1lOiJwZXJjZW50Iix0eXBlOkxNLHB1cmU6ITB9KSxMTS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltXeV19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoTE0sW3t0eXBlOnZ5LGFyZ3M6W3tuYW1lOiJwZXJjZW50In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltXeV19XX1dfSksbnVsbCk7Y2xhc3MgQk17Y29uc3RydWN0b3IodCxlPSJVU0QiKXt0aGlzLl9sb2NhbGU9dCx0aGlzLl9kZWZhdWx0Q3VycmVuY3lDb2RlPWV9dHJhbnNmb3JtKHQsZT10aGlzLl9kZWZhdWx0Q3VycmVuY3lDb2RlLG49InN5bWJvbCIsbyxpKXtpZighVk0odCkpcmV0dXJuIG51bGw7aT1pfHx0aGlzLl9sb2NhbGUsImJvb2xlYW4iPT10eXBlb2YgbiYmKCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oJ1dhcm5pbmc6IHRoZSBjdXJyZW5jeSBwaXBlIGhhcyBiZWVuIGNoYW5nZWQgaW4gQW5ndWxhciB2NS4gVGhlIHN5bWJvbERpc3BsYXkgb3B0aW9uICh0aGlyZCBwYXJhbWV0ZXIpIGlzIG5vdyBhIHN0cmluZyBpbnN0ZWFkIG9mIGEgYm9vbGVhbi4gVGhlIGFjY2VwdGVkIHZhbHVlcyBhcmUgImNvZGUiLCAic3ltYm9sIiBvciAic3ltYm9sLW5hcnJvdyIuJyksbj1uPyJzeW1ib2wiOiJjb2RlIik7bGV0IGE9ZXx8dGhpcy5fZGVmYXVsdEN1cnJlbmN5Q29kZTsiY29kZSIhPT1uJiYoYT0ic3ltYm9sIj09PW58fCJzeW1ib2wtbmFycm93Ij09PW4/KGZ1bmN0aW9uIHIodCxlLG49ImVuIil7Y29uc3Qgbz0oZnVuY3Rpb24gaSh0KXtyZXR1cm4gTHUodClbanUuQ3VycmVuY2llc119KShuKVt0XXx8cENbdF18fFtdLGE9b1sxXTtyZXR1cm4ibmFycm93Ij09PWUmJiJzdHJpbmciPT10eXBlb2YgYT9hOm9bMF18fHR9KShhLCJzeW1ib2wiPT09bj8id2lkZSI6Im5hcnJvdyIsaSk6bik7dHJ5e3JldHVybihmdW5jdGlvbiBuKHQsZSxvLGksYSl7Y29uc3Qgcj0kQyh4QyhlLG1DLkN1cnJlbmN5KSx2QyhlLGJDLk1pbnVzU2lnbikpO3JldHVybiByLm1pbkZyYWM9KGZ1bmN0aW9uIHModCl7bGV0IGU7Y29uc3Qgbj1wQ1t0XTtyZXR1cm4gbiYmKGU9blsyXSksIm51bWJlciI9PXR5cGVvZiBlP2U6Mn0pKGkpLHIubWF4RnJhYz1yLm1pbkZyYWMsSkModCxyLGUsYkMuQ3VycmVuY3lHcm91cCxiQy5DdXJyZW5jeURlY2ltYWwsYSkucmVwbGFjZSgiwqQiLG8pLnJlcGxhY2UoIsKkIiwiIikudHJpbSgpfSkoak0odCksaSxhLGUsbyl9Y2F0Y2godCl7dGhyb3cgeE0oQk0sdC5tZXNzYWdlKX19fWZ1bmN0aW9uIFZNKHQpe3JldHVybiEobnVsbD09dHx8IiI9PT10fHx0IT10KX1mdW5jdGlvbiBqTSh0KXtpZigic3RyaW5nIj09dHlwZW9mIHQmJiFpc05hTihOdW1iZXIodCktcGFyc2VGbG9hdCh0KSkpcmV0dXJuIE51bWJlcih0KTtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKGAke3R9IGlzIG5vdCBhIG51bWJlcmApO3JldHVybiB0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9CTS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Qk0pKFNtKFd5LDE2KSxTbShZeSwxNikpfSxCTS7JtXBpcGU9Y28oe25hbWU6ImN1cnJlbmN5Iix0eXBlOkJNLHB1cmU6ITB9KSxCTS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltXeV19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1l5XX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChCTSxbe3R5cGU6dnksYXJnczpbe25hbWU6ImN1cnJlbmN5In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltXeV19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1l5XX1dfV19KSxudWxsKTtjbGFzcyBVTXt0cmFuc2Zvcm0odCxlLG4pe2lmKG51bGw9PXQpcmV0dXJuIG51bGw7aWYoIXRoaXMuc3VwcG9ydHModCkpdGhyb3cgeE0oVU0sdCk7cmV0dXJuIHQuc2xpY2UoZSxuKX1zdXBwb3J0cyh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHR8fEFycmF5LmlzQXJyYXkodCl9fVVNLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxVTSl9LFVNLsm1cGlwZT1jbyh7bmFtZToic2xpY2UiLHR5cGU6VU0scHVyZTohMX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoVU0sW3t0eXBlOnZ5LGFyZ3M6W3tuYW1lOiJzbGljZSIscHVyZTohMX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IEdNPVt3TSxFTSxrTSx6TSxVTSxGTSxMTSxETSxCTSxSTSxUTSxOTSxJTV07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFdNe31XTS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V00pfSxXTS7JtW1vZD1hbyh7dHlwZTpXTX0pLFdNLsm1aW5qPXZuKHtwcm92aWRlcnM6W3twcm92aWRlOmVNLHVzZUNsYXNzOm9NfV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFdNLFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOlt2TSxHTV0sZXhwb3J0czpbdk0sR01dLHByb3ZpZGVyczpbe3Byb3ZpZGU6ZU0sdXNlQ2xhc3M6b019XX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKFdNLHtkZWNsYXJhdGlvbnM6W2FNLHJNLGxNLGRNLE1NLENNLGZNLGdNLGhNLHlNLF9NLHdNLEVNLGtNLHpNLFVNLEZNLExNLERNLEJNLFJNLFRNLE5NLElNXSxleHBvcnRzOlthTSxyTSxsTSxkTSxNTSxDTSxmTSxnTSxoTSx5TSxfTSx3TSxFTSxrTSx6TSxVTSxGTSxMTSxETSxCTSxSTSxUTSxOTSxJTV19KSwKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCm5ldyBPZygiMTIuMi4xIik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBZTXt9WU0uybVwcm92PU1uKHt0b2tlbjpZTSxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5uZXcgcU0odnIoWl8pLHdpbmRvdyl9KTtjbGFzcyBxTXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuZG9jdW1lbnQ9dCx0aGlzLndpbmRvdz1lLHRoaXMub2Zmc2V0PSgpPT5bMCwwXX1zZXRPZmZzZXQodCl7dGhpcy5vZmZzZXQ9QXJyYXkuaXNBcnJheSh0KT8oKT0+dDp0fWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuc3VwcG9ydHNTY3JvbGxpbmcoKT9bdGhpcy53aW5kb3cucGFnZVhPZmZzZXQsdGhpcy53aW5kb3cucGFnZVlPZmZzZXRdOlswLDBdfXNjcm9sbFRvUG9zaXRpb24odCl7dGhpcy5zdXBwb3J0c1Njcm9sbGluZygpJiZ0aGlzLndpbmRvdy5zY3JvbGxUbyh0WzBdLHRbMV0pfXNjcm9sbFRvQW5jaG9yKHQpe2lmKCF0aGlzLnN1cHBvcnRzU2Nyb2xsaW5nKCkpcmV0dXJuO2NvbnN0IGU9KGZ1bmN0aW9uIG4odCxlKXtjb25zdCBuPXQuZ2V0RWxlbWVudEJ5SWQoZSl8fHQuZ2V0RWxlbWVudHNCeU5hbWUoZSlbMF07aWYobilyZXR1cm4gbjtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5jcmVhdGVUcmVlV2Fsa2VyJiZ0LmJvZHkmJih0LmJvZHkuY3JlYXRlU2hhZG93Um9vdHx8dC5ib2R5LmF0dGFjaFNoYWRvdykpe2NvbnN0IG49dC5jcmVhdGVUcmVlV2Fsa2VyKHQuYm9keSxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCk7bGV0IG89bi5jdXJyZW50Tm9kZTtmb3IoO287KXtjb25zdCB0PW8uc2hhZG93Um9vdDtpZih0KXtjb25zdCBuPXQuZ2V0RWxlbWVudEJ5SWQoZSl8fHQucXVlcnlTZWxlY3RvcihgW25hbWU9IiR7ZX0iXWApO2lmKG4pcmV0dXJuIG59bz1uLm5leHROb2RlKCl9fXJldHVybiBudWxsfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHRoaXMuZG9jdW1lbnQsdCk7ZSYmKHRoaXMuc2Nyb2xsVG9FbGVtZW50KGUpLHRoaXMuYXR0ZW1wdEZvY3VzKGUpKX1zZXRIaXN0b3J5U2Nyb2xsUmVzdG9yYXRpb24odCl7aWYodGhpcy5zdXBwb3J0U2Nyb2xsUmVzdG9yYXRpb24oKSl7Y29uc3QgZT10aGlzLndpbmRvdy5oaXN0b3J5O2UmJmUuc2Nyb2xsUmVzdG9yYXRpb24mJihlLnNjcm9sbFJlc3RvcmF0aW9uPXQpfX1zY3JvbGxUb0VsZW1lbnQodCl7Y29uc3QgZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ZS5sZWZ0K3RoaXMud2luZG93LnBhZ2VYT2Zmc2V0LG89ZS50b3ArdGhpcy53aW5kb3cucGFnZVlPZmZzZXQsaT10aGlzLm9mZnNldCgpO3RoaXMud2luZG93LnNjcm9sbFRvKG4taVswXSxvLWlbMV0pfWF0dGVtcHRGb2N1cyh0KXtyZXR1cm4gdC5mb2N1cygpLHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXR9c3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCl7dHJ5e2lmKCF0aGlzLnN1cHBvcnRzU2Nyb2xsaW5nKCkpcmV0dXJuITE7Y29uc3QgdD1aTSh0aGlzLndpbmRvdy5oaXN0b3J5KXx8Wk0oT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMud2luZG93Lmhpc3RvcnkpKTtyZXR1cm4hKCF0fHwhdC53cml0YWJsZSYmIXQuc2V0KX1jYXRjaCh0KXtyZXR1cm4hMX19c3VwcG9ydHNTY3JvbGxpbmcoKXt0cnl7cmV0dXJuISF0aGlzLndpbmRvdyYmISF0aGlzLndpbmRvdy5zY3JvbGxUbyYmInBhZ2VYT2Zmc2V0ImluIHRoaXMud2luZG93fWNhdGNoKHQpe3JldHVybiExfX19ZnVuY3Rpb24gWk0odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwic2Nyb2xsUmVzdG9yYXRpb24iKX1jbGFzcyBYTXt9Ci8qKgogICAgICogQGxpY2Vuc2UgQW5ndWxhciB2MTIuMi4xCiAgICAgKiAoYykgMjAxMC0yMDIxIEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5pby8KICAgICAqIExpY2Vuc2U6IE1JVAogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgS00gZXh0ZW5kcyBjbGFzcyBleHRlbmRzIGNsYXNze317Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3VwcG9ydHNET01FdmVudHM9ITB9fXtzdGF0aWMgbWFrZUN1cnJlbnQoKXshKGZ1bmN0aW9uIHQoZSl7WV98fChZXz1lKX0pKG5ldyBLTSl9b25BbmRDYW5jZWwodCxlLG4pe3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoZSxuLCExKSwoKT0+e3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4sITEpfX1kaXNwYXRjaEV2ZW50KHQsZSl7dC5kaXNwYXRjaEV2ZW50KGUpfXJlbW92ZSh0KXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX1jcmVhdGVFbGVtZW50KHQsZSl7cmV0dXJuKGU9ZXx8dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKSkuY3JlYXRlRWxlbWVudCh0KX1jcmVhdGVIdG1sRG9jdW1lbnQoKXtyZXR1cm4gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJmYWtlVGl0bGUiKX1nZXREZWZhdWx0RG9jdW1lbnQoKXtyZXR1cm4gZG9jdW1lbnR9aXNFbGVtZW50Tm9kZSh0KXtyZXR1cm4gdC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfWlzU2hhZG93Um9vdCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnR9Z2V0R2xvYmFsRXZlbnRUYXJnZXQodCxlKXtyZXR1cm4id2luZG93Ij09PWU/d2luZG93OiJkb2N1bWVudCI9PT1lP3Q6ImJvZHkiPT09ZT90LmJvZHk6bnVsbH1nZXRCYXNlSHJlZih0KXtjb25zdCBlPShmdW5jdGlvbiBuKCl7cmV0dXJuIFFNPVFNfHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIiksUU0/UU0uZ2V0QXR0cmlidXRlKCJocmVmIik6bnVsbH0pKCk7cmV0dXJuIG51bGw9PWU/bnVsbDooZnVuY3Rpb24gbyh0KXtKTT1KTXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLEpNLnNldEF0dHJpYnV0ZSgiaHJlZiIsdCk7Y29uc3QgZT1KTS5wYXRobmFtZTtyZXR1cm4iLyI9PT1lLmNoYXJBdCgwKT9lOmAvJHtlfWB9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLykoZSl9cmVzZXRCYXNlRWxlbWVudCgpe1FNPW51bGx9Z2V0VXNlckFnZW50KCl7cmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50fWdldENvb2tpZSh0KXtyZXR1cm4gaU0oZG9jdW1lbnQuY29va2llLHQpfX1sZXQgSk0sUU09bnVsbDtjb25zdCAkTT1uZXcgR2EoIlRSQU5TSVRJT05fSUQiKSx0dj1be3Byb3ZpZGU6enksdXNlRmFjdG9yeTpmdW5jdGlvbiBldih0LGUsbil7cmV0dXJuKCk9PntuLmdldChJeSkuZG9uZVByb21pc2UudGhlbigoKCk9Pntjb25zdCBuPXFfKCk7QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGUucXVlcnlTZWxlY3RvckFsbCgic3R5bGVbbmctdHJhbnNpdGlvbl0iKSkuZmlsdGVyKChlPT5lLmdldEF0dHJpYnV0ZSgibmctdHJhbnNpdGlvbiIpPT09dCkpLmZvckVhY2goKHQ9Pm4ucmVtb3ZlKHQpKSl9KSl9fSxkZXBzOlskTSxaXyxycF0sbXVsdGk6ITB9XTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIG52e3N0YXRpYyBpbml0KCl7IShmdW5jdGlvbiB0KGUpe2dfPWV9KShuZXcgbnYpfWFkZFRvV2luZG93KHQpe2puLmdldEFuZ3VsYXJUZXN0YWJpbGl0eT0oZSxuPSEwKT0+e2NvbnN0IG89dC5maW5kVGVzdGFiaWxpdHlJblRyZWUoZSxuKTtpZihudWxsPT1vKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgdGVzdGFiaWxpdHkgZm9yIGVsZW1lbnQuIik7cmV0dXJuIG99LGpuLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPSgpPT50LmdldEFsbFRlc3RhYmlsaXRpZXMoKSxqbi5nZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzPSgpPT50LmdldEFsbFJvb3RFbGVtZW50cygpLGpuLmZyYW1ld29ya1N0YWJpbGl6ZXJzfHwoam4uZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLGpuLmZyYW1ld29ya1N0YWJpbGl6ZXJzLnB1c2goKHQ9Pntjb25zdCBlPWpuLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzKCk7bGV0IG49ZS5sZW5ndGgsbz0hMTtjb25zdCBpPWZ1bmN0aW9uKGUpe289b3x8ZSxuLS0sMD09biYmdChvKX07ZS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LndoZW5TdGFibGUoaSl9KSl9KSl9ZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQsZSxuKXtpZihudWxsPT1lKXJldHVybiBudWxsO2NvbnN0IG89dC5nZXRUZXN0YWJpbGl0eShlKTtyZXR1cm4gbnVsbCE9bz9vOm4/cV8oKS5pc1NoYWRvd1Jvb3QoZSk/dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLmhvc3QsITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQsZS5wYXJlbnRFbGVtZW50LCEwKTpudWxsfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3Mgb3Z7YnVpbGQoKXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fX1vdi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8b3YpfSxvdi7JtXByb3Y9TW4oe3Rva2VuOm92LGZhY3Rvcnk6b3YuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKG92LFt7dHlwZTppbX1dLG51bGwsbnVsbCksbmV3IFNyO2NvbnN0IGl2PW5ldyBHYSgiRXZlbnRNYW5hZ2VyUGx1Z2lucyIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBhdntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3pvbmU9ZSx0aGlzLl9ldmVudE5hbWVUb1BsdWdpbj1uZXcgTWFwLHQuZm9yRWFjaCgodD0+dC5tYW5hZ2VyPXRoaXMpKSx0aGlzLl9wbHVnaW5zPXQuc2xpY2UoKS5yZXZlcnNlKCl9YWRkRXZlbnRMaXN0ZW5lcih0LGUsbil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZSkuYWRkRXZlbnRMaXN0ZW5lcih0LGUsbil9YWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsbil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZSkuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsbil9Z2V0Wm9uZSgpe3JldHVybiB0aGlzLl96b25lfV9maW5kUGx1Z2luRm9yKHQpe2NvbnN0IGU9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uZ2V0KHQpO2lmKGUpcmV0dXJuIGU7Y29uc3Qgbj10aGlzLl9wbHVnaW5zO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtjb25zdCBvPW5bZV07aWYoby5zdXBwb3J0cyh0KSlyZXR1cm4gdGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uc2V0KHQsbyksb310aHJvdyBuZXcgRXJyb3IoYE5vIGV2ZW50IG1hbmFnZXIgcGx1Z2luIGZvdW5kIGZvciBldmVudCAke3R9YCl9fWF2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxhdikodnIoaXYpLHZyKGFfKSl9LGF2Lsm1cHJvdj1Nbih7dG9rZW46YXYsZmFjdG9yeTphdi7JtWZhY30pLGF2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbaXZdfV19LHt0eXBlOmFffV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChhdixbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbaXZdfV19LHt0eXBlOmFffV19KSxudWxsKTtjbGFzcyBydntjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kb2M9dH1hZGRHbG9iYWxFdmVudExpc3RlbmVyKHQsZSxuKXtjb25zdCBvPXFfKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLHQpO2lmKCFvKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXZlbnQgdGFyZ2V0ICR7b30gZm9yIGV2ZW50ICR7ZX1gKTtyZXR1cm4gdGhpcy5hZGRFdmVudExpc3RlbmVyKG8sZSxuKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIHN2e2NvbnN0cnVjdG9yKCl7dGhpcy5fc3R5bGVzU2V0PW5ldyBTZXR9YWRkU3R5bGVzKHQpe2NvbnN0IGU9bmV3IFNldDt0LmZvckVhY2goKHQ9Pnt0aGlzLl9zdHlsZXNTZXQuaGFzKHQpfHwodGhpcy5fc3R5bGVzU2V0LmFkZCh0KSxlLmFkZCh0KSl9KSksdGhpcy5vblN0eWxlc0FkZGVkKGUpfW9uU3R5bGVzQWRkZWQodCl7fWdldEFsbFN0eWxlcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX3N0eWxlc1NldCl9fXN2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxzdil9LHN2Lsm1cHJvdj1Nbih7dG9rZW46c3YsZmFjdG9yeTpzdi7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoc3YsW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxudWxsKTtjbGFzcyBsdiBleHRlbmRzIHN2e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fZG9jPXQsdGhpcy5faG9zdE5vZGVzPW5ldyBNYXAsdGhpcy5faG9zdE5vZGVzLnNldCh0LmhlYWQsW10pfV9hZGRTdHlsZXNUb0hvc3QodCxlLG4pe3QuZm9yRWFjaCgodD0+e2NvbnN0IG89dGhpcy5fZG9jLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7by50ZXh0Q29udGVudD10LG4ucHVzaChlLmFwcGVuZENoaWxkKG8pKX0pKX1hZGRIb3N0KHQpe2NvbnN0IGU9W107dGhpcy5fYWRkU3R5bGVzVG9Ib3N0KHRoaXMuX3N0eWxlc1NldCx0LGUpLHRoaXMuX2hvc3ROb2Rlcy5zZXQodCxlKX1yZW1vdmVIb3N0KHQpe2NvbnN0IGU9dGhpcy5faG9zdE5vZGVzLmdldCh0KTtlJiZlLmZvckVhY2goY3YpLHRoaXMuX2hvc3ROb2Rlcy5kZWxldGUodCl9b25TdHlsZXNBZGRlZCh0KXt0aGlzLl9ob3N0Tm9kZXMuZm9yRWFjaCgoKGUsbik9Pnt0aGlzLl9hZGRTdHlsZXNUb0hvc3QodCxuLGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5faG9zdE5vZGVzLmZvckVhY2goKHQ9PnQuZm9yRWFjaChjdikpKX19ZnVuY3Rpb24gY3YodCl7cV8oKS5yZW1vdmUodCl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2x2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxsdikodnIoWl8pKX0sbHYuybVwcm92PU1uKHt0b2tlbjpsdixmYWN0b3J5Omx2Lsm1ZmFjfSksbHYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGx2LFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19XX0pLG51bGwpO2NvbnN0IGR2PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSxwdj0vJUNPTVAlL2csbXY9InVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fCEhbmdEZXZNb2RlO2Z1bmN0aW9uIHV2KHQsZSxuKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IGk9ZVtvXTtBcnJheS5pc0FycmF5KGkpP3V2KHQsaSxuKTooaT1pLnJlcGxhY2UocHYsdCksbi5wdXNoKGkpKX1yZXR1cm4gbn1mdW5jdGlvbiBmdih0KXtyZXR1cm4gZT0+e2lmKCJfX25nVW53cmFwX18iPT09ZSlyZXR1cm4gdDshMT09PXQoZSkmJihlLnByZXZlbnREZWZhdWx0KCksZS5yZXR1cm5WYWx1ZT0hMSl9fWxldCBndj0hMTtjbGFzcyBodntjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5ldmVudE1hbmFnZXI9dCx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9ZSx0aGlzLmFwcElkPW4sdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IGJ2KHQpfWNyZWF0ZVJlbmRlcmVyKHQsZSl7aWYoIXR8fCFlKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjtzd2l0Y2goZS5lbmNhcHN1bGF0aW9uKXtjYXNlIEhuLkVtdWxhdGVkOntsZXQgbj10aGlzLnJlbmRlcmVyQnlDb21wSWQuZ2V0KGUuaWQpO3JldHVybiBufHwobj1uZXcgQ3YodGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LGUsdGhpcy5hcHBJZCksdGhpcy5yZW5kZXJlckJ5Q29tcElkLnNldChlLmlkLG4pKSxuLmFwcGx5VG9Ib3N0KHQpLG59Y2FzZSAxOmNhc2UgSG4uU2hhZG93RG9tOnJldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiYhbmdEZXZNb2RlfHxndnx8MSE9PWUuZW5jYXBzdWxhdGlvbnx8KGd2PSEwLGNvbnNvbGUud2FybigiVmlld0VuY2Fwc3VsYXRpb24uTmF0aXZlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIEZhbGxpbmcgYmFjayB0byBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20uIFRoZSBmYWxsYmFjayB3aWxsIGJlIHJlbW92ZWQgaW4gdjEyLiIpKSxuZXcgTXYodGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LHQsZSk7ZGVmYXVsdDppZighdGhpcy5yZW5kZXJlckJ5Q29tcElkLmhhcyhlLmlkKSl7Y29uc3QgdD11dihlLmlkLGUuc3R5bGVzLFtdKTt0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkU3R5bGVzKHQpLHRoaXMucmVuZGVyZXJCeUNvbXBJZC5zZXQoZS5pZCx0aGlzLmRlZmF1bHRSZW5kZXJlcil9cmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyfX1iZWdpbigpe31lbmQoKXt9fWh2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxodikodnIoYXYpLHZyKGx2KSx2cihIeSkpfSxodi7JtXByb3Y9TW4oe3Rva2VuOmh2LGZhY3Rvcnk6aHYuybVmYWN9KSxodi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmF2fSx7dHlwZTpsdn0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W0h5XX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChodixbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6YXZ9LHt0eXBlOmx2fSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbSHldfV19XX0pLG51bGwpO2NsYXNzIGJ2e2NvbnN0cnVjdG9yKHQpe3RoaXMuZXZlbnRNYW5hZ2VyPXQsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCl9ZGVzdHJveSgpe31jcmVhdGVFbGVtZW50KHQsZSl7cmV0dXJuIGU/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGR2W2VdfHxlLHQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCl9Y3JlYXRlQ29tbWVudCh0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0KX1jcmVhdGVUZXh0KHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KX1hcHBlbmRDaGlsZCh0LGUpe3QuYXBwZW5kQ2hpbGQoZSl9aW5zZXJ0QmVmb3JlKHQsZSxuKXt0JiZ0Lmluc2VydEJlZm9yZShlLG4pfXJlbW92ZUNoaWxkKHQsZSl7dCYmdC5yZW1vdmVDaGlsZChlKX1zZWxlY3RSb290RWxlbWVudCh0LGUpe2xldCBuPSJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOnQ7aWYoIW4pdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VsZWN0b3IgIiR7dH0iIGRpZCBub3QgbWF0Y2ggYW55IGVsZW1lbnRzYCk7cmV0dXJuIGV8fChuLnRleHRDb250ZW50PSIiKSxufXBhcmVudE5vZGUodCl7cmV0dXJuIHQucGFyZW50Tm9kZX1uZXh0U2libGluZyh0KXtyZXR1cm4gdC5uZXh0U2libGluZ31zZXRBdHRyaWJ1dGUodCxlLG4sbyl7aWYobyl7ZT1vKyI6IitlO2NvbnN0IGk9ZHZbb107aT90LnNldEF0dHJpYnV0ZU5TKGksZSxuKTp0LnNldEF0dHJpYnV0ZShlLG4pfWVsc2UgdC5zZXRBdHRyaWJ1dGUoZSxuKX1yZW1vdmVBdHRyaWJ1dGUodCxlLG4pe2lmKG4pe2NvbnN0IG89ZHZbbl07bz90LnJlbW92ZUF0dHJpYnV0ZU5TKG8sZSk6dC5yZW1vdmVBdHRyaWJ1dGUoYCR7bn06JHtlfWApfWVsc2UgdC5yZW1vdmVBdHRyaWJ1dGUoZSl9YWRkQ2xhc3ModCxlKXt0LmNsYXNzTGlzdC5hZGQoZSl9cmVtb3ZlQ2xhc3ModCxlKXt0LmNsYXNzTGlzdC5yZW1vdmUoZSl9c2V0U3R5bGUodCxlLG4sbyl7byYoY2wuRGFzaENhc2V8Y2wuSW1wb3J0YW50KT90LnN0eWxlLnNldFByb3BlcnR5KGUsbixvJmNsLkltcG9ydGFudD8iaW1wb3J0YW50IjoiIik6dC5zdHlsZVtlXT1ufXJlbW92ZVN0eWxlKHQsZSxuKXtuJmNsLkRhc2hDYXNlP3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dC5zdHlsZVtlXT0iIn1zZXRQcm9wZXJ0eSh0LGUsbil7bXYmJl92KGUsInByb3BlcnR5IiksdFtlXT1ufXNldFZhbHVlKHQsZSl7dC5ub2RlVmFsdWU9ZX1saXN0ZW4odCxlLG4pe3JldHVybiBtdiYmX3YoZSwibGlzdGVuZXIiKSwic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5ldmVudE1hbmFnZXIuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsZnYobikpOnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCxlLGZ2KG4pKX19Y29uc3QgeXY9IkAiLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gX3YodCxlKXtpZih0LmNoYXJDb2RlQXQoMCk9PT15dil0aHJvdyBuZXcgRXJyb3IoYEZvdW5kIHRoZSBzeW50aGV0aWMgJHtlfSAke3R9LiBQbGVhc2UgaW5jbHVkZSBlaXRoZXIgIkJyb3dzZXJBbmltYXRpb25zTW9kdWxlIiBvciAiTm9vcEFuaW1hdGlvbnNNb2R1bGUiIGluIHlvdXIgYXBwbGljYXRpb24uYCl9Y2xhc3MgQ3YgZXh0ZW5kcyBidntjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcih0KSx0aGlzLmNvbXBvbmVudD1uO2NvbnN0IGk9dXYobysiLSIrbi5pZCxuLnN0eWxlcyxbXSk7ZS5hZGRTdHlsZXMoaSksdGhpcy5jb250ZW50QXR0cj0oZnVuY3Rpb24gYSh0KXtyZXR1cm4iX25nY29udGVudC0lQ09NUCUiLnJlcGxhY2UocHYsdCl9KShvKyItIituLmlkKSx0aGlzLmhvc3RBdHRyPShmdW5jdGlvbiByKHQpe3JldHVybiJfbmdob3N0LSVDT01QJSIucmVwbGFjZShwdix0KX0pKG8rIi0iK24uaWQpfWFwcGx5VG9Ib3N0KHQpe3N1cGVyLnNldEF0dHJpYnV0ZSh0LHRoaXMuaG9zdEF0dHIsIiIpfWNyZWF0ZUVsZW1lbnQodCxlKXtjb25zdCBuPXN1cGVyLmNyZWF0ZUVsZW1lbnQodCxlKTtyZXR1cm4gc3VwZXIuc2V0QXR0cmlidXRlKG4sdGhpcy5jb250ZW50QXR0ciwiIiksbn19Y2xhc3MgTXYgZXh0ZW5kcyBidntjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcih0KSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9ZSx0aGlzLmhvc3RFbD1uLHRoaXMuc2hhZG93Um9vdD1uLmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiJ9KSx0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkSG9zdCh0aGlzLnNoYWRvd1Jvb3QpO2NvbnN0IGk9dXYoby5pZCxvLnN0eWxlcyxbXSk7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0Kyspe2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtlLnRleHRDb250ZW50PWlbdF0sdGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKGUpfX1ub2RlT3JTaGFkb3dSb290KHQpe3JldHVybiB0PT09dGhpcy5ob3N0RWw/dGhpcy5zaGFkb3dSb290OnR9ZGVzdHJveSgpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVIb3N0KHRoaXMuc2hhZG93Um9vdCl9YXBwZW5kQ2hpbGQodCxlKXtyZXR1cm4gc3VwZXIuYXBwZW5kQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUpfWluc2VydEJlZm9yZSh0LGUsbil7cmV0dXJuIHN1cGVyLmluc2VydEJlZm9yZSh0aGlzLm5vZGVPclNoYWRvd1Jvb3QodCksZSxuKX1yZW1vdmVDaGlsZCh0LGUpe3JldHVybiBzdXBlci5yZW1vdmVDaGlsZCh0aGlzLm5vZGVPclNoYWRvd1Jvb3QodCksZSl9cGFyZW50Tm9kZSh0KXtyZXR1cm4gdGhpcy5ub2RlT3JTaGFkb3dSb290KHN1cGVyLnBhcmVudE5vZGUodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpKSl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyB2diBleHRlbmRzIHJ2e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfXN1cHBvcnRzKHQpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIodCxlLG4pe3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoZSxuLCExKSwoKT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHQsZSxuKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsZSxuKXtyZXR1cm4gdC5yZW1vdmVFdmVudExpc3RlbmVyKGUsbil9fXZ2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx2dikodnIoWl8pKX0sdnYuybVwcm92PU1uKHt0b2tlbjp2dixmYWN0b3J5OnZ2Lsm1ZmFjfSksdnYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHZ2LFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgeHY9e3BhbjohMCxwYW5zdGFydDohMCxwYW5tb3ZlOiEwLHBhbmVuZDohMCxwYW5jYW5jZWw6ITAscGFubGVmdDohMCxwYW5yaWdodDohMCxwYW51cDohMCxwYW5kb3duOiEwLHBpbmNoOiEwLHBpbmNoc3RhcnQ6ITAscGluY2htb3ZlOiEwLHBpbmNoZW5kOiEwLHBpbmNoY2FuY2VsOiEwLHBpbmNoaW46ITAscGluY2hvdXQ6ITAscHJlc3M6ITAscHJlc3N1cDohMCxyb3RhdGU6ITAscm90YXRlc3RhcnQ6ITAscm90YXRlbW92ZTohMCxyb3RhdGVlbmQ6ITAscm90YXRlY2FuY2VsOiEwLHN3aXBlOiEwLHN3aXBlbGVmdDohMCxzd2lwZXJpZ2h0OiEwLHN3aXBldXA6ITAsc3dpcGVkb3duOiEwLHRhcDohMCxkb3VibGV0YXA6ITB9LE92PW5ldyBHYSgiSGFtbWVyR2VzdHVyZUNvbmZpZyIpLFB2PW5ldyBHYSgiSGFtbWVyTG9hZGVyIik7Y2xhc3Mgd3Z7Y29uc3RydWN0b3IoKXt0aGlzLmV2ZW50cz1bXSx0aGlzLm92ZXJyaWRlcz17fX1idWlsZEhhbW1lcih0KXtjb25zdCBlPW5ldyBIYW1tZXIodCx0aGlzLm9wdGlvbnMpO2UuZ2V0KCJwaW5jaCIpLnNldCh7ZW5hYmxlOiEwfSksZS5nZXQoInJvdGF0ZSIpLnNldCh7ZW5hYmxlOiEwfSk7Zm9yKGNvbnN0IHQgaW4gdGhpcy5vdmVycmlkZXMpZS5nZXQodCkuc2V0KHRoaXMub3ZlcnJpZGVzW3RdKTtyZXR1cm4gZX19d3YuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHd2KX0sd3YuybVwcm92PU1uKHt0b2tlbjp3dixmYWN0b3J5Ond2Lsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh3dixbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLG51bGwpO2NsYXNzIGt2IGV4dGVuZHMgcnZ7Y29uc3RydWN0b3IodCxlLG4sbyl7c3VwZXIodCksdGhpcy5fY29uZmlnPWUsdGhpcy5jb25zb2xlPW4sdGhpcy5sb2FkZXI9byx0aGlzLl9sb2FkZXJQcm9taXNlPW51bGx9c3VwcG9ydHModCl7cmV0dXJuISgheHYuaGFzT3duUHJvcGVydHkodC50b0xvd2VyQ2FzZSgpKSYmIXRoaXMuaXNDdXN0b21FdmVudCh0KXx8IXdpbmRvdy5IYW1tZXImJiF0aGlzLmxvYWRlciYmKCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmdGhpcy5jb25zb2xlLndhcm4oYFRoZSAiJHt0fSIgZXZlbnQgY2Fubm90IGJlIGJvdW5kIGJlY2F1c2UgSGFtbWVyLkpTIGlzIG5vdCBsb2FkZWQgYW5kIG5vIGN1c3RvbSBsb2FkZXIgaGFzIGJlZW4gc3BlY2lmaWVkLmApLDEpKX1hZGRFdmVudExpc3RlbmVyKHQsZSxuKXtjb25zdCBvPXRoaXMubWFuYWdlci5nZXRab25lKCk7aWYoZT1lLnRvTG93ZXJDYXNlKCksIXdpbmRvdy5IYW1tZXImJnRoaXMubG9hZGVyKXt0aGlzLl9sb2FkZXJQcm9taXNlPXRoaXMuX2xvYWRlclByb21pc2V8fHRoaXMubG9hZGVyKCk7bGV0IG89ITEsaT0oKT0+e289ITB9O3JldHVybiB0aGlzLl9sb2FkZXJQcm9taXNlLnRoZW4oKCgpPT57aWYoIXdpbmRvdy5IYW1tZXIpcmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZ0aGlzLmNvbnNvbGUud2FybigiVGhlIGN1c3RvbSBIQU1NRVJfTE9BREVSIGNvbXBsZXRlZCwgYnV0IEhhbW1lci5KUyBpcyBub3QgcHJlc2VudC4iKSx2b2lkKGk9KCk9Pnt9KTtvfHwoaT10aGlzLmFkZEV2ZW50TGlzdGVuZXIodCxlLG4pKX0pKS5jYXRjaCgoKCk9PnsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJnRoaXMuY29uc29sZS53YXJuKGBUaGUgIiR7ZX0iIGV2ZW50IGNhbm5vdCBiZSBib3VuZCBiZWNhdXNlIHRoZSBjdXN0b20gSGFtbWVyLkpTIGxvYWRlciBmYWlsZWQuYCksaT0oKT0+e319KSksKCk9PntpKCl9fXJldHVybiBvLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e2NvbnN0IGk9dGhpcy5fY29uZmlnLmJ1aWxkSGFtbWVyKHQpLGE9ZnVuY3Rpb24odCl7by5ydW5HdWFyZGVkKChmdW5jdGlvbigpe24odCl9KSl9O3JldHVybiBpLm9uKGUsYSksKCk9PntpLm9mZihlLGEpLCJmdW5jdGlvbiI9PXR5cGVvZiBpLmRlc3Ryb3kmJmkuZGVzdHJveSgpfX0pKX1pc0N1c3RvbUV2ZW50KHQpe3JldHVybiB0aGlzLl9jb25maWcuZXZlbnRzLmluZGV4T2YodCk+LTF9fWt2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxrdikodnIoWl8pLHZyKE92KSx2cihHeSksdnIoUHYsOCkpfSxrdi7JtXByb3Y9TW4oe3Rva2VuOmt2LGZhY3Rvcnk6a3YuybVmYWN9KSxrdi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX0se3R5cGU6d3YsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbT3ZdfV19LHt0eXBlOkd5fSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1B2XX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChrdixbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfSx7dHlwZTp3dixkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltPdl19XX0se3R5cGU6R3l9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbUHZdfV19XX0pLG51bGwpO2NvbnN0IFN2PVt7cHJvdmlkZTppdix1c2VDbGFzczprdixtdWx0aTohMCxkZXBzOltaXyxPdixHeSxbbmV3IFNyLFB2XV19LHtwcm92aWRlOk92LHVzZUNsYXNzOnd2LGRlcHM6W119XTtjbGFzcyBEdnt9RHYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fER2KX0sRHYuybVtb2Q9YW8oe3R5cGU6RHZ9KSxEdi7JtWluaj12bih7cHJvdmlkZXJzOlN2fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChEdixbe3R5cGU6QXksYXJnczpbe3Byb3ZpZGVyczpTdn1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IEV2PVsiYWx0IiwiY29udHJvbCIsIm1ldGEiLCJzaGlmdCJdLFJ2PXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIn8iOiJEZWxldGUiLCIbIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNjOiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1VwIixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSxBdj17QToiMSIsQjoiMiIsQzoiMyIsRDoiNCIsRToiNSIsRjoiNiIsRzoiNyIsSDoiOCIsSToiOSIsSjoiKiIsSzoiKyIsTToiLSIsTjoiLiIsTzoiLyIsImAiOiIwIiwiwpAiOiJOdW1Mb2NrIn0sVHY9e2FsdDp0PT50LmFsdEtleSxjb250cm9sOnQ9PnQuY3RybEtleSxtZXRhOnQ9PnQubWV0YUtleSxzaGlmdDp0PT50LnNoaWZ0S2V5fTtjbGFzcyBOdiBleHRlbmRzIHJ2e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfXN1cHBvcnRzKHQpe3JldHVybiBudWxsIT1Odi5wYXJzZUV2ZW50TmFtZSh0KX1hZGRFdmVudExpc3RlbmVyKHQsZSxuKXtjb25zdCBvPU52LnBhcnNlRXZlbnROYW1lKGUpLGk9TnYuZXZlbnRDYWxsYmFjayhvLmZ1bGxLZXksbix0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpKTtyZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PnFfKCkub25BbmRDYW5jZWwodCxvLmRvbUV2ZW50TmFtZSxpKSkpfXN0YXRpYyBwYXJzZUV2ZW50TmFtZSh0KXtjb25zdCBlPXQudG9Mb3dlckNhc2UoKS5zcGxpdCgiLiIpLG49ZS5zaGlmdCgpO2lmKDA9PT1lLmxlbmd0aHx8ImtleWRvd24iIT09biYmImtleXVwIiE9PW4pcmV0dXJuIG51bGw7Y29uc3Qgbz1Odi5fbm9ybWFsaXplS2V5KGUucG9wKCkpO2xldCBpPSIiO2lmKEV2LmZvckVhY2goKHQ9Pntjb25zdCBuPWUuaW5kZXhPZih0KTtuPi0xJiYoZS5zcGxpY2UobiwxKSxpKz10KyIuIil9KSksaSs9bywwIT1lLmxlbmd0aHx8MD09PW8ubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0IGE9e307cmV0dXJuIGEuZG9tRXZlbnROYW1lPW4sYS5mdWxsS2V5PWksYX1zdGF0aWMgZ2V0RXZlbnRGdWxsS2V5KHQpe2xldCBlPSIiLG49KGZ1bmN0aW9uIG8odCl7bGV0IGU9dC5rZXk7aWYobnVsbD09ZSl7aWYoZT10LmtleUlkZW50aWZpZXIsbnVsbD09ZSlyZXR1cm4iVW5pZGVudGlmaWVkIjtlLnN0YXJ0c1dpdGgoIlUrIikmJihlPVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZS5zdWJzdHJpbmcoMiksMTYpKSwzPT09dC5sb2NhdGlvbiYmQXYuaGFzT3duUHJvcGVydHkoZSkmJihlPUF2W2VdKSl9cmV0dXJuIFJ2W2VdfHxlfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQpO3JldHVybiBuPW4udG9Mb3dlckNhc2UoKSwiICI9PT1uP249InNwYWNlIjoiLiI9PT1uJiYobj0iZG90IiksRXYuZm9yRWFjaCgobz0+e28hPW4mJigwLFR2W29dKSh0KSYmKGUrPW8rIi4iKX0pKSxlKz1uLGV9c3RhdGljIGV2ZW50Q2FsbGJhY2sodCxlLG4pe3JldHVybiBvPT57TnYuZ2V0RXZlbnRGdWxsS2V5KG8pPT09dCYmbi5ydW5HdWFyZGVkKCgoKT0+ZShvKSkpfX1zdGF0aWMgX25vcm1hbGl6ZUtleSh0KXtzd2l0Y2godCl7Y2FzZSJlc2MiOnJldHVybiJlc2NhcGUiO2RlZmF1bHQ6cmV0dXJuIHR9fX1Odi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TnYpKHZyKFpfKSl9LE52Lsm1cHJvdj1Nbih7dG9rZW46TnYsZmFjdG9yeTpOdi7JtWZhY30pLE52LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChOdixbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfV19KSxudWxsKTtjbGFzcyB6dnt9ZnVuY3Rpb24gSXYodCl7cmV0dXJuIG5ldyBIdih0LmdldChaXykpfXp2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx6dil9LHp2Lsm1cHJvdj1Nbih7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIHZyKEh2KX0sdG9rZW46enYscHJvdmlkZWRJbjoicm9vdCJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHp2LFt7dHlwZTppbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCIsdXNlRXhpc3Rpbmc6cWUoKCgpPT5IdikpfV19XSxudWxsLG51bGwpO2NsYXNzIEh2IGV4dGVuZHMgenZ7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9kb2M9dH1zYW5pdGl6ZSh0LGUpe2lmKG51bGw9PWUpcmV0dXJuIG51bGw7c3dpdGNoKHQpe2Nhc2UgQXMuTk9ORTpyZXR1cm4gZTtjYXNlIEFzLkhUTUw6cmV0dXJuIGVzKGUsIkhUTUwiKT90cyhlKTpFcyh0aGlzLl9kb2MsU3RyaW5nKGUpKS50b1N0cmluZygpO2Nhc2UgQXMuU1RZTEU6cmV0dXJuIGVzKGUsIlN0eWxlIik/dHMoZSk6ZTtjYXNlIEFzLlNDUklQVDppZihlcyhlLCJTY3JpcHQiKSlyZXR1cm4gdHMoZSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHNjcmlwdCBjb250ZXh0Iik7Y2FzZSBBcy5VUkw6cmV0dXJuIG5zKGUpLGVzKGUsIlVSTCIpP3RzKGUpOmxzKFN0cmluZyhlKSk7Y2FzZSBBcy5SRVNPVVJDRV9VUkw6aWYoZXMoZSwiUmVzb3VyY2VVUkwiKSlyZXR1cm4gdHMoZSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHJlc291cmNlIFVSTCBjb250ZXh0IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBTZWN1cml0eUNvbnRleHQgJHt0fSAoc2VlIGh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpYCl9fWJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHQpe3JldHVybihmdW5jdGlvbiBlKHQpe3JldHVybiBuZXcgWHIodCl9KSh0KX1ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBLcih0KX0pKHQpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RTY3JpcHQodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBKcih0KX0pKHQpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBRcih0KX0pKHQpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh0KXtyZXR1cm4oZnVuY3Rpb24gZSh0KXtyZXR1cm4gbmV3ICRyKHQpfSkodCl9fUh2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxIdikodnIoWl8pKX0sSHYuybVwcm92PU1uKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gSXYodnIoR2QpKX0sdG9rZW46SHYscHJvdmlkZWRJbjoicm9vdCJ9KSxIdi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoSHYsW3t0eXBlOmltLGFyZ3M6W3twcm92aWRlZEluOiJyb290Iix1c2VGYWN0b3J5Okl2LGRlcHM6W3JwXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dfSksbnVsbCk7Y29uc3QgRnY9Q18oUl8sImJyb3dzZXIiLFt7cHJvdmlkZTpqeSx1c2VWYWx1ZToiYnJvd3NlciJ9LHtwcm92aWRlOlZ5LHVzZVZhbHVlOgovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gTHYoKXtLTS5tYWtlQ3VycmVudCgpLG52LmluaXQoKX0sbXVsdGk6ITB9LHtwcm92aWRlOlpfLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gQnYoKXtyZXR1cm4oZnVuY3Rpb24gdChlKXtLbz1lfSkoZG9jdW1lbnQpLGRvY3VtZW50fSxkZXBzOltdfV0pLFZ2PVtbXSx7cHJvdmlkZTpZZCx1c2VWYWx1ZToicm9vdCJ9LHtwcm92aWRlOlpzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24ganYoKXtyZXR1cm4gbmV3IFpzfSxkZXBzOltdfSx7cHJvdmlkZTppdix1c2VDbGFzczp2dixtdWx0aTohMCxkZXBzOltaXyxhXyxqeV19LHtwcm92aWRlOml2LHVzZUNsYXNzOk52LG11bHRpOiEwLGRlcHM6W1pfXX0sW10se3Byb3ZpZGU6aHYsdXNlQ2xhc3M6aHYsZGVwczpbYXYsbHYsSHldfSx7cHJvdmlkZTpfZyx1c2VFeGlzdGluZzpodn0se3Byb3ZpZGU6c3YsdXNlRXhpc3Rpbmc6bHZ9LHtwcm92aWRlOmx2LHVzZUNsYXNzOmx2LGRlcHM6W1pfXX0se3Byb3ZpZGU6bV8sdXNlQ2xhc3M6bV8sZGVwczpbYV9dfSx7cHJvdmlkZTphdix1c2VDbGFzczphdixkZXBzOltpdixhX119LHtwcm92aWRlOlhNLHVzZUNsYXNzOm92LGRlcHM6W119LFtdXTtjbGFzcyBVdntjb25zdHJ1Y3Rvcih0KXtpZih0KXRocm93IG5ldyBFcnJvcigiQnJvd3Nlck1vZHVsZSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4gSWYgeW91IG5lZWQgYWNjZXNzIHRvIGNvbW1vbiBkaXJlY3RpdmVzIHN1Y2ggYXMgTmdJZiBhbmQgTmdGb3IgZnJvbSBhIGxhenkgbG9hZGVkIG1vZHVsZSwgaW1wb3J0IENvbW1vbk1vZHVsZSBpbnN0ZWFkLiIpfXN0YXRpYyB3aXRoU2VydmVyVHJhbnNpdGlvbih0KXtyZXR1cm57bmdNb2R1bGU6VXYscHJvdmlkZXJzOlt7cHJvdmlkZTpIeSx1c2VWYWx1ZTp0LmFwcElkfSx7cHJvdmlkZTokTSx1c2VFeGlzdGluZzpIeX0sdHZdfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBHdigpe3JldHVybiBuZXcgV3YodnIoWl8pKX1Vdi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VXYpKHZyKFV2LDEyKSl9LFV2Lsm1bW9kPWFvKHt0eXBlOlV2fSksVXYuybVpbmo9dm4oe3Byb3ZpZGVyczpWdixpbXBvcnRzOltXTSxIX119KSxVdi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlV2LGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpFcn0se3R5cGU6a3IsYXJnczpbVXZdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFV2LFt7dHlwZTpBeSxhcmdzOlt7cHJvdmlkZXJzOlZ2LGV4cG9ydHM6W1dNLEhfXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlV2LGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpFcn0se3R5cGU6a3IsYXJnczpbVXZdfV19XX0pLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oVXYse2V4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bV00sSF9dfX0pO2NsYXNzIFd2e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RvYz10LHRoaXMuX2RvbT1xXygpfWFkZFRhZyh0LGU9ITEpe3JldHVybiB0P3RoaXMuX2dldE9yQ3JlYXRlRWxlbWVudCh0LGUpOm51bGx9YWRkVGFncyh0LGU9ITEpe3JldHVybiB0P3QucmVkdWNlKCgodCxuKT0+KG4mJnQucHVzaCh0aGlzLl9nZXRPckNyZWF0ZUVsZW1lbnQobixlKSksdCkpLFtdKTpbXX1nZXRUYWcodCl7cmV0dXJuIHQmJnRoaXMuX2RvYy5xdWVyeVNlbGVjdG9yKGBtZXRhWyR7dH1dYCl8fG51bGx9Z2V0VGFncyh0KXtpZighdClyZXR1cm5bXTtjb25zdCBlPXRoaXMuX2RvYy5xdWVyeVNlbGVjdG9yQWxsKGBtZXRhWyR7dH1dYCk7cmV0dXJuIGU/W10uc2xpY2UuY2FsbChlKTpbXX11cGRhdGVUYWcodCxlKXtpZighdClyZXR1cm4gbnVsbDtlPWV8fHRoaXMuX3BhcnNlU2VsZWN0b3IodCk7Y29uc3Qgbj10aGlzLmdldFRhZyhlKTtyZXR1cm4gbj90aGlzLl9zZXRNZXRhRWxlbWVudEF0dHJpYnV0ZXModCxuKTp0aGlzLl9nZXRPckNyZWF0ZUVsZW1lbnQodCwhMCl9cmVtb3ZlVGFnKHQpe3RoaXMucmVtb3ZlVGFnRWxlbWVudCh0aGlzLmdldFRhZyh0KSl9cmVtb3ZlVGFnRWxlbWVudCh0KXt0JiZ0aGlzLl9kb20ucmVtb3ZlKHQpfV9nZXRPckNyZWF0ZUVsZW1lbnQodCxlPSExKXtpZighZSl7Y29uc3QgZT10aGlzLl9wYXJzZVNlbGVjdG9yKHQpLG49dGhpcy5nZXRUYWdzKGUpLmZpbHRlcigoZT0+dGhpcy5fY29udGFpbnNBdHRyaWJ1dGVzKHQsZSkpKVswXTtpZih2b2lkIDAhPT1uKXJldHVybiBufWNvbnN0IG49dGhpcy5fZG9tLmNyZWF0ZUVsZW1lbnQoIm1ldGEiKTtyZXR1cm4gdGhpcy5fc2V0TWV0YUVsZW1lbnRBdHRyaWJ1dGVzKHQsbiksdGhpcy5fZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQobiksbn1fc2V0TWV0YUVsZW1lbnRBdHRyaWJ1dGVzKHQsZSl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKG49PmUuc2V0QXR0cmlidXRlKHRoaXMuX2dldE1ldGFLZXlNYXAobiksdFtuXSkpKSxlfV9wYXJzZVNlbGVjdG9yKHQpe2NvbnN0IGU9dC5uYW1lPyJuYW1lIjoicHJvcGVydHkiO3JldHVybmAke2V9PSIke3RbZV19ImB9X2NvbnRhaW5zQXR0cmlidXRlcyh0LGUpe3JldHVybiBPYmplY3Qua2V5cyh0KS5ldmVyeSgobj0+ZS5nZXRBdHRyaWJ1dGUodGhpcy5fZ2V0TWV0YUtleU1hcChuKSk9PT10W25dKSl9X2dldE1ldGFLZXlNYXAodCl7cmV0dXJuIFl2W3RdfHx0fX1Xdi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V3YpKHZyKFpfKSl9LFd2Lsm1cHJvdj1Nbih7ZmFjdG9yeTpHdix0b2tlbjpXdixwcm92aWRlZEluOiJyb290In0pLFd2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChXdixbe3R5cGU6aW0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QiLHVzZUZhY3Rvcnk6R3YsZGVwczpbXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dfSksbnVsbCk7Y29uc3QgWXY9e2h0dHBFcXVpdjoiaHR0cC1lcXVpdiJ9OwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBxdigpe3JldHVybiBuZXcgWnYodnIoWl8pKX1jbGFzcyBadntjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kb2M9dH1nZXRUaXRsZSgpe3JldHVybiB0aGlzLl9kb2MudGl0bGV9c2V0VGl0bGUodCl7dGhpcy5fZG9jLnRpdGxlPXR8fCIifX1adi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WnYpKHZyKFpfKSl9LFp2Lsm1cHJvdj1Nbih7ZmFjdG9yeTpxdix0b2tlbjpadixwcm92aWRlZEluOiJyb290In0pLFp2LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChadixbe3R5cGU6aW0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QiLHVzZUZhY3Rvcnk6cXYsZGVwczpbXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dfSksbnVsbCk7Y2xhc3MgWHZ7Y29uc3RydWN0b3IoKXt0aGlzLnN0b3JlPXt9LHRoaXMub25TZXJpYWxpemVDYWxsYmFja3M9e319c3RhdGljIGluaXQodCl7Y29uc3QgZT1uZXcgWHY7cmV0dXJuIGUuc3RvcmU9dCxlfWdldCh0LGUpe3JldHVybiB2b2lkIDAhPT10aGlzLnN0b3JlW3RdP3RoaXMuc3RvcmVbdF06ZX1zZXQodCxlKXt0aGlzLnN0b3JlW3RdPWV9cmVtb3ZlKHQpe2RlbGV0ZSB0aGlzLnN0b3JlW3RdfWhhc0tleSh0KXtyZXR1cm4gdGhpcy5zdG9yZS5oYXNPd25Qcm9wZXJ0eSh0KX1vblNlcmlhbGl6ZSh0LGUpe3RoaXMub25TZXJpYWxpemVDYWxsYmFja3NbdF09ZX10b0pzb24oKXtmb3IoY29uc3QgdCBpbiB0aGlzLm9uU2VyaWFsaXplQ2FsbGJhY2tzKWlmKHRoaXMub25TZXJpYWxpemVDYWxsYmFja3MuaGFzT3duUHJvcGVydHkodCkpdHJ5e3RoaXMuc3RvcmVbdF09dGhpcy5vblNlcmlhbGl6ZUNhbGxiYWNrc1t0XSgpfWNhdGNoKHQpe2NvbnNvbGUud2FybigiRXhjZXB0aW9uIGluIG9uU2VyaWFsaXplIGNhbGxiYWNrOiAiLHQpfXJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnN0b3JlKX19ZnVuY3Rpb24gS3YodCxlKXtjb25zdCBuPXQuZ2V0RWxlbWVudEJ5SWQoZSsiLXN0YXRlIik7bGV0IG89e307aWYobiYmbi50ZXh0Q29udGVudCl0cnl7bz1KU09OLnBhcnNlKChmdW5jdGlvbiBpKHQpe2NvbnN0IGU9eyImYTsiOiImIiwiJnE7IjonIicsIiZzOyI6IiciLCImbDsiOiI8IiwiJmc7IjoiPiJ9O3JldHVybiB0LnJlcGxhY2UoLyZbXjtdKzsvZywodD0+ZVt0XSkpfSkobi50ZXh0Q29udGVudCkpfWNhdGNoKHQpe2NvbnNvbGUud2FybigiRXhjZXB0aW9uIHdoaWxlIHJlc3RvcmluZyBUcmFuc2ZlclN0YXRlIGZvciBhcHAgIitlLHQpfXJldHVybiBYdi5pbml0KG8pfVh2Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxYdil9LFh2Lsm1cHJvdj1Nbih7dG9rZW46WHYsZmFjdG9yeTpYdi7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoWHYsW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxudWxsKTtjbGFzcyBKdnt9SnYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEp2KX0sSnYuybVtb2Q9YW8oe3R5cGU6SnZ9KSxKdi7JtWluaj12bih7cHJvdmlkZXJzOlt7cHJvdmlkZTpYdix1c2VGYWN0b3J5Okt2LGRlcHM6W1pfLEh5XX1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChKdixbe3R5cGU6QXksYXJnczpbe3Byb3ZpZGVyczpbe3Byb3ZpZGU6WHYsdXNlRmFjdG9yeTpLdixkZXBzOltaXyxIeV19XX1dfV0sbnVsbCxudWxsKSwKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpuZXcgT2coIjEyLjIuMSIpO3ZhciBRdj0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uICR2KHQpe2lmKHQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgZT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixvLmdldD9vOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pfSkpLGV9Ci8qKgogICAgICogQGxpY2Vuc2UgQW5ndWxhciB2MTIuMC4wLW5leHQuMAogICAgICogKGMpIDIwMTAtMjAyMCBHb29nbGUgTExDLiBodHRwczovL2FuZ3VsYXIuaW8vCiAgICAgKiBMaWNlbnNlOiBNSVQKICAgICAqLyEoZnVuY3Rpb24oKXsKLyoqCiAgICAgICAgICogQGxpY2Vuc2UKICAgICAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovCiEoZnVuY3Rpb24odCl7dmFyIGU9dC5wZXJmb3JtYW5jZTtmdW5jdGlvbiBuKHQpe2UmJmUubWFyayYmZS5tYXJrKHQpfWZ1bmN0aW9uIG8odCxuKXtlJiZlLm1lYXN1cmUmJmUubWVhc3VyZSh0LG4pfW4oIlpvbmUiKTt2YXIgaT10Ll9fWm9uZV9zeW1ib2xfcHJlZml4fHwiX196b25lX3N5bWJvbF9fIjtmdW5jdGlvbiBhKHQpe3JldHVybiBpK3R9dmFyIHI9ITA9PT10W2EoImZvcmNlRHVwbGljYXRlWm9uZUNoZWNrIildO2lmKHQuWm9uZSl7aWYocnx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQuWm9uZS5fX3N5bWJvbF9fKXRocm93IG5ldyBFcnJvcigiWm9uZSBhbHJlYWR5IGxvYWRlZC4iKTtyZXR1cm4gdC5ab25lfXZhciBzPShmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxlKXt0aGlzLl9wYXJlbnQ9dCx0aGlzLl9uYW1lPWU/ZS5uYW1lfHwidW5uYW1lZCI6Ijxyb290PiIsdGhpcy5fcHJvcGVydGllcz1lJiZlLnByb3BlcnRpZXN8fHt9LHRoaXMuX3pvbmVEZWxlZ2F0ZT1uZXcgZCh0aGlzLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll96b25lRGVsZWdhdGUsZSl9cmV0dXJuIGUuYXNzZXJ0Wm9uZVBhdGNoZWQ9ZnVuY3Rpb24oKXtpZih0LlByb21pc2UhPT1ELlpvbmVBd2FyZVByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJab25lLmpzIGhhcyBkZXRlY3RlZCB0aGF0IFpvbmVBd2FyZVByb21pc2UgYCh3aW5kb3d8Z2xvYmFsKS5Qcm9taXNlYCBoYXMgYmVlbiBvdmVyd3JpdHRlbi5cbk1vc3QgbGlrZWx5IGNhdXNlIGlzIHRoYXQgYSBQcm9taXNlIHBvbHlmaWxsIGhhcyBiZWVuIGxvYWRlZCBhZnRlciBab25lLmpzIChQb2x5ZmlsbGluZyBQcm9taXNlIGFwaSBpcyBub3QgbmVjZXNzYXJ5IHdoZW4gem9uZS5qcyBpcyBsb2FkZWQuIElmIHlvdSBtdXN0IGxvYWQgb25lLCBkbyBzbyBiZWZvcmUgbG9hZGluZyB6b25lLmpzLikiKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9ZS5jdXJyZW50O3QucGFyZW50Oyl0PXQucGFyZW50O3JldHVybiB0fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJjdXJyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIuem9uZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiY3VycmVudFRhc2siLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLl9fbG9hZF9wYXRjaD1mdW5jdGlvbihpLGEscyl7aWYodm9pZCAwPT09cyYmKHM9ITEpLEQuaGFzT3duUHJvcGVydHkoaSkpe2lmKCFzJiZyKXRocm93IEVycm9yKCJBbHJlYWR5IGxvYWRlZCBwYXRjaDogIitpKX1lbHNlIGlmKCF0WyJfX1pvbmVfZGlzYWJsZV8iK2ldKXt2YXIgbD0iWm9uZToiK2k7bihsKSxEW2ldPWEodCxlLEUpLG8obCxsKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmFtZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRab25lV2l0aCh0KTtpZihlKXJldHVybiBlLl9wcm9wZXJ0aWVzW3RdfSxlLnByb3RvdHlwZS5nZXRab25lV2l0aD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcztlOyl7aWYoZS5fcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZTtlPWUuX3BhcmVudH1yZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbih0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlpvbmVTcGVjIHJlcXVpcmVkISIpO3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuZm9yayh0aGlzLHQpfSxlLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RpbmcgZnVuY3Rpb24gZ290OiAiK3QpO3ZhciBuPXRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcyx0LGUpLG89dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gby5ydW5HdWFyZGVkKG4sdGhpcyxhcmd1bWVudHMsZSl9fSxlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24odCxlLG4sbyl7Uj17cGFyZW50OlIsem9uZTp0aGlzfTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyx0LGUsbixvKX1maW5hbGx5e1I9Ui5wYXJlbnR9fSxlLnByb3RvdHlwZS5ydW5HdWFyZGVkPWZ1bmN0aW9uKHQsZSxuLG8pe3ZvaWQgMD09PWUmJihlPW51bGwpLFI9e3BhcmVudDpSLHpvbmU6dGhpc307dHJ5e3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLHQsZSxuLG8pfWNhdGNoKHQpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHQpKXRocm93IHR9fWZpbmFsbHl7Uj1SLnBhcmVudH19LGUucHJvdG90eXBlLnJ1blRhc2s9ZnVuY3Rpb24odCxlLG4pe2lmKHQuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBydW4gaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisodC56b25lfHxfKS5uYW1lKyI7IEV4ZWN1dGlvbjogIit0aGlzLm5hbWUrIikiKTtpZih0LnN0YXRlIT09Q3x8dC50eXBlIT09UyYmdC50eXBlIT09ayl7dmFyIG89dC5zdGF0ZSE9eDtvJiZ0Ll90cmFuc2l0aW9uVG8oeCx2KSx0LnJ1bkNvdW50Kys7dmFyIGk9QTtBPXQsUj17cGFyZW50OlIsem9uZTp0aGlzfTt0cnl7dC50eXBlPT1rJiZ0LmRhdGEmJiF0LmRhdGEuaXNQZXJpb2RpYyYmKHQuY2FuY2VsRm49dm9pZCAwKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsdCxlLG4pfWNhdGNoKHQpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHQpKXRocm93IHR9fWZpbmFsbHl7dC5zdGF0ZSE9PUMmJnQuc3RhdGUhPT1QJiYodC50eXBlPT1TfHx0LmRhdGEmJnQuZGF0YS5pc1BlcmlvZGljP28mJnQuX3RyYW5zaXRpb25Ubyh2LHgpOih0LnJ1bkNvdW50PTAsdGhpcy5fdXBkYXRlVGFza0NvdW50KHQsLTEpLG8mJnQuX3RyYW5zaXRpb25UbyhDLHgsQykpKSxSPVIucGFyZW50LEE9aX19fSxlLnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24odCl7aWYodC56b25lJiZ0LnpvbmUhPT10aGlzKWZvcih2YXIgZT10aGlzO2U7KXtpZihlPT09dC56b25lKXRocm93IEVycm9yKCJjYW4gbm90IHJlc2NoZWR1bGUgdGFzayB0byAiK3RoaXMubmFtZSsiIHdoaWNoIGlzIGRlc2NlbmRhbnRzIG9mIHRoZSBvcmlnaW5hbCB6b25lICIrdC56b25lLm5hbWUpO2U9ZS5wYXJlbnR9dC5fdHJhbnNpdGlvblRvKE0sQyk7dmFyIG49W107dC5fem9uZURlbGVnYXRlcz1uLHQuX3pvbmU9dGhpczt0cnl7dD10aGlzLl96b25lRGVsZWdhdGUuc2NoZWR1bGVUYXNrKHRoaXMsdCl9Y2F0Y2goZSl7dGhyb3cgdC5fdHJhbnNpdGlvblRvKFAsTSxDKSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxlKSxlfXJldHVybiB0Ll96b25lRGVsZWdhdGVzPT09biYmdGhpcy5fdXBkYXRlVGFza0NvdW50KHQsMSksdC5zdGF0ZT09TSYmdC5fdHJhbnNpdGlvblRvKHYsTSksdH0sZS5wcm90b3R5cGUuc2NoZWR1bGVNaWNyb1Rhc2s9ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBwKHcsdCxlLG4sbyx2b2lkIDApKX0sZS5wcm90b3R5cGUuc2NoZWR1bGVNYWNyb1Rhc2s9ZnVuY3Rpb24odCxlLG4sbyxpKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHAoayx0LGUsbixvLGkpKX0sZS5wcm90b3R5cGUuc2NoZWR1bGVFdmVudFRhc2s9ZnVuY3Rpb24odCxlLG4sbyxpKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHAoUyx0LGUsbixvLGkpKX0sZS5wcm90b3R5cGUuY2FuY2VsVGFzaz1mdW5jdGlvbih0KXtpZih0LnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgY2FuY2VsbGVkIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKHQuem9uZXx8XykubmFtZSsiOyBFeGVjdXRpb246ICIrdGhpcy5uYW1lKyIpIik7dC5fdHJhbnNpdGlvblRvKE8sdix4KTt0cnl7dGhpcy5fem9uZURlbGVnYXRlLmNhbmNlbFRhc2sodGhpcyx0KX1jYXRjaChlKXt0aHJvdyB0Ll90cmFuc2l0aW9uVG8oUCxPKSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxlKSxlfXJldHVybiB0aGlzLl91cGRhdGVUYXNrQ291bnQodCwtMSksdC5fdHJhbnNpdGlvblRvKEMsTyksdC5ydW5Db3VudD0wLHR9LGUucHJvdG90eXBlLl91cGRhdGVUYXNrQ291bnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10Ll96b25lRGVsZWdhdGVzOy0xPT1lJiYodC5fem9uZURlbGVnYXRlcz1udWxsKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyluW29dLl91cGRhdGVUYXNrQ291bnQodC50eXBlLGUpfSxlfSkoKTtzLl9fc3ltYm9sX189YTt2YXIgbCxjPXtuYW1lOiIiLG9uSGFzVGFzazpmdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gdC5oYXNUYXNrKG4sbyl9LG9uU2NoZWR1bGVUYXNrOmZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB0LnNjaGVkdWxlVGFzayhuLG8pfSxvbkludm9rZVRhc2s6ZnVuY3Rpb24odCxlLG4sbyxpLGEpe3JldHVybiB0Lmludm9rZVRhc2sobixvLGksYSl9LG9uQ2FuY2VsVGFzazpmdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gdC5jYW5jZWxUYXNrKG4sbyl9fSxkPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3Rhc2tDb3VudHM9e21pY3JvVGFzazowLG1hY3JvVGFzazowLGV2ZW50VGFzazowfSx0aGlzLnpvbmU9dCx0aGlzLl9wYXJlbnREZWxlZ2F0ZT1lLHRoaXMuX2ZvcmtaUz1uJiYobiYmbi5vbkZvcms/bjplLl9mb3JrWlMpLHRoaXMuX2ZvcmtEbGd0PW4mJihuLm9uRm9yaz9lOmUuX2ZvcmtEbGd0KSx0aGlzLl9mb3JrQ3VyclpvbmU9biYmKG4ub25Gb3JrP3RoaXMuem9uZTplLl9mb3JrQ3VyclpvbmUpLHRoaXMuX2ludGVyY2VwdFpTPW4mJihuLm9uSW50ZXJjZXB0P246ZS5faW50ZXJjZXB0WlMpLHRoaXMuX2ludGVyY2VwdERsZ3Q9biYmKG4ub25JbnRlcmNlcHQ/ZTplLl9pbnRlcmNlcHREbGd0KSx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZT1uJiYobi5vbkludGVyY2VwdD90aGlzLnpvbmU6ZS5faW50ZXJjZXB0Q3VyclpvbmUpLHRoaXMuX2ludm9rZVpTPW4mJihuLm9uSW52b2tlP246ZS5faW52b2tlWlMpLHRoaXMuX2ludm9rZURsZ3Q9biYmKG4ub25JbnZva2U/ZTplLl9pbnZva2VEbGd0KSx0aGlzLl9pbnZva2VDdXJyWm9uZT1uJiYobi5vbkludm9rZT90aGlzLnpvbmU6ZS5faW52b2tlQ3VyclpvbmUpLHRoaXMuX2hhbmRsZUVycm9yWlM9biYmKG4ub25IYW5kbGVFcnJvcj9uOmUuX2hhbmRsZUVycm9yWlMpLHRoaXMuX2hhbmRsZUVycm9yRGxndD1uJiYobi5vbkhhbmRsZUVycm9yP2U6ZS5faGFuZGxlRXJyb3JEbGd0KSx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lPW4mJihuLm9uSGFuZGxlRXJyb3I/dGhpcy56b25lOmUuX2hhbmRsZUVycm9yQ3VyclpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPW4mJihuLm9uU2NoZWR1bGVUYXNrP246ZS5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9biYmKG4ub25TY2hlZHVsZVRhc2s/ZTplLl9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT1uJiYobi5vblNjaGVkdWxlVGFzaz90aGlzLnpvbmU6ZS5fc2NoZWR1bGVUYXNrQ3VyclpvbmUpLHRoaXMuX2ludm9rZVRhc2taUz1uJiYobi5vbkludm9rZVRhc2s/bjplLl9pbnZva2VUYXNrWlMpLHRoaXMuX2ludm9rZVRhc2tEbGd0PW4mJihuLm9uSW52b2tlVGFzaz9lOmUuX2ludm9rZVRhc2tEbGd0KSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9biYmKG4ub25JbnZva2VUYXNrP3RoaXMuem9uZTplLl9pbnZva2VUYXNrQ3VyclpvbmUpLHRoaXMuX2NhbmNlbFRhc2taUz1uJiYobi5vbkNhbmNlbFRhc2s/bjplLl9jYW5jZWxUYXNrWlMpLHRoaXMuX2NhbmNlbFRhc2tEbGd0PW4mJihuLm9uQ2FuY2VsVGFzaz9lOmUuX2NhbmNlbFRhc2tEbGd0KSx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9biYmKG4ub25DYW5jZWxUYXNrP3RoaXMuem9uZTplLl9jYW5jZWxUYXNrQ3VyclpvbmUpLHRoaXMuX2hhc1Rhc2taUz1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0PW51bGwsdGhpcy5faGFzVGFza0RsZ3RPd25lcj1udWxsLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1udWxsO3ZhciBvPW4mJm4ub25IYXNUYXNrOyhvfHxlJiZlLl9oYXNUYXNrWlMpJiYodGhpcy5faGFzVGFza1pTPW8/bjpjLHRoaXMuX2hhc1Rhc2tEbGd0PWUsdGhpcy5faGFzVGFza0RsZ3RPd25lcj10aGlzLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT10LG4ub25TY2hlZHVsZVRhc2t8fCh0aGlzLl9zY2hlZHVsZVRhc2taUz1jLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9ZSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT10aGlzLnpvbmUpLG4ub25JbnZva2VUYXNrfHwodGhpcy5faW52b2tlVGFza1pTPWMsdGhpcy5faW52b2tlVGFza0RsZ3Q9ZSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxuLm9uQ2FuY2VsVGFza3x8KHRoaXMuX2NhbmNlbFRhc2taUz1jLHRoaXMuX2NhbmNlbFRhc2tEbGd0PWUsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lPXRoaXMuem9uZSkpfXJldHVybiB0LnByb3RvdHlwZS5mb3JrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2ZvcmtaUz90aGlzLl9mb3JrWlMub25Gb3JrKHRoaXMuX2ZvcmtEbGd0LHRoaXMuem9uZSx0LGUpOm5ldyBzKHQsZSl9LHQucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2ludGVyY2VwdFpTP3RoaXMuX2ludGVyY2VwdFpTLm9uSW50ZXJjZXB0KHRoaXMuX2ludGVyY2VwdERsZ3QsdGhpcy5faW50ZXJjZXB0Q3VyclpvbmUsdCxlLG4pOmV9LHQucHJvdG90eXBlLmludm9rZT1mdW5jdGlvbih0LGUsbixvLGkpe3JldHVybiB0aGlzLl9pbnZva2VaUz90aGlzLl9pbnZva2VaUy5vbkludm9rZSh0aGlzLl9pbnZva2VEbGd0LHRoaXMuX2ludm9rZUN1cnJab25lLHQsZSxuLG8saSk6ZS5hcHBseShuLG8pfSx0LnByb3RvdHlwZS5oYW5kbGVFcnJvcj1mdW5jdGlvbih0LGUpe3JldHVybiF0aGlzLl9oYW5kbGVFcnJvclpTfHx0aGlzLl9oYW5kbGVFcnJvclpTLm9uSGFuZGxlRXJyb3IodGhpcy5faGFuZGxlRXJyb3JEbGd0LHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmUsdCxlKX0sdC5wcm90b3R5cGUuc2NoZWR1bGVUYXNrPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZTtpZih0aGlzLl9zY2hlZHVsZVRhc2taUyl0aGlzLl9oYXNUYXNrWlMmJm4uX3pvbmVEZWxlZ2F0ZXMucHVzaCh0aGlzLl9oYXNUYXNrRGxndE93bmVyKSwobj10aGlzLl9zY2hlZHVsZVRhc2taUy5vblNjaGVkdWxlVGFzayh0aGlzLl9zY2hlZHVsZVRhc2tEbGd0LHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lLHQsZSkpfHwobj1lKTtlbHNlIGlmKGUuc2NoZWR1bGVGbillLnNjaGVkdWxlRm4oZSk7ZWxzZXtpZihlLnR5cGUhPXcpdGhyb3cgbmV3IEVycm9yKCJUYXNrIGlzIG1pc3Npbmcgc2NoZWR1bGVGbi4iKTtiKGUpfXJldHVybiBufSx0LnByb3RvdHlwZS5pbnZva2VUYXNrPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB0aGlzLl9pbnZva2VUYXNrWlM/dGhpcy5faW52b2tlVGFza1pTLm9uSW52b2tlVGFzayh0aGlzLl9pbnZva2VUYXNrRGxndCx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmUsdCxlLG4sbyk6ZS5jYWxsYmFjay5hcHBseShuLG8pfSx0LnByb3RvdHlwZS5jYW5jZWxUYXNrPWZ1bmN0aW9uKHQsZSl7dmFyIG47aWYodGhpcy5fY2FuY2VsVGFza1pTKW49dGhpcy5fY2FuY2VsVGFza1pTLm9uQ2FuY2VsVGFzayh0aGlzLl9jYW5jZWxUYXNrRGxndCx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmUsdCxlKTtlbHNle2lmKCFlLmNhbmNlbEZuKXRocm93IEVycm9yKCJUYXNrIGlzIG5vdCBjYW5jZWxhYmxlIik7bj1lLmNhbmNlbEZuKGUpfXJldHVybiBufSx0LnByb3RvdHlwZS5oYXNUYXNrPWZ1bmN0aW9uKHQsZSl7dHJ5e3RoaXMuX2hhc1Rhc2taUyYmdGhpcy5faGFzVGFza1pTLm9uSGFzVGFzayh0aGlzLl9oYXNUYXNrRGxndCx0aGlzLl9oYXNUYXNrQ3VyclpvbmUsdCxlKX1jYXRjaChlKXt0aGlzLmhhbmRsZUVycm9yKHQsZSl9fSx0LnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fdGFza0NvdW50cyxvPW5bdF0saT1uW3RdPW8rZTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJNb3JlIHRhc2tzIGV4ZWN1dGVkIHRoZW4gd2VyZSBzY2hlZHVsZWQuIik7MCE9byYmMCE9aXx8dGhpcy5oYXNUYXNrKHRoaXMuem9uZSx7bWljcm9UYXNrOm4ubWljcm9UYXNrPjAsbWFjcm9UYXNrOm4ubWFjcm9UYXNrPjAsZXZlbnRUYXNrOm4uZXZlbnRUYXNrPjAsY2hhbmdlOnR9KX0sdH0pKCkscD0oZnVuY3Rpb24oKXtmdW5jdGlvbiBlKG4sbyxpLGEscixzKXtpZih0aGlzLl96b25lPW51bGwsdGhpcy5ydW5Db3VudD0wLHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCx0aGlzLl9zdGF0ZT0ibm90U2NoZWR1bGVkIix0aGlzLnR5cGU9bix0aGlzLnNvdXJjZT1vLHRoaXMuZGF0YT1hLHRoaXMuc2NoZWR1bGVGbj1yLHRoaXMuY2FuY2VsRm49cywhaSl0aHJvdyBuZXcgRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBkZWZpbmVkIik7dGhpcy5jYWxsYmFjaz1pO3ZhciBsPXRoaXM7dGhpcy5pbnZva2U9bj09PVMmJmEmJmEudXNlRz9lLmludm9rZVRhc2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5pbnZva2VUYXNrLmNhbGwodCxsLHRoaXMsYXJndW1lbnRzKX19cmV0dXJuIGUuaW52b2tlVGFzaz1mdW5jdGlvbih0LGUsbil7dHx8KHQ9dGhpcyksVCsrO3RyeXtyZXR1cm4gdC5ydW5Db3VudCsrLHQuem9uZS5ydW5UYXNrKHQsZSxuKX1maW5hbGx5ezE9PVQmJnkoKSxULS19fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInpvbmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9uZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInN0YXRlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlUmVxdWVzdD1mdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb25UbyhDLE0pfSxlLnByb3RvdHlwZS5fdHJhbnNpdGlvblRvPWZ1bmN0aW9uKHQsZSxuKXtpZih0aGlzLl9zdGF0ZSE9PWUmJnRoaXMuX3N0YXRlIT09bil0aHJvdyBuZXcgRXJyb3IodGhpcy50eXBlKyIgJyIrdGhpcy5zb3VyY2UrIic6IGNhbiBub3QgdHJhbnNpdGlvbiB0byAnIit0KyInLCBleHBlY3Rpbmcgc3RhdGUgJyIrZSsiJyIrKG4/IiBvciAnIituKyInIjoiIikrIiwgd2FzICciK3RoaXMuX3N0YXRlKyInLiIpO3RoaXMuX3N0YXRlPXQsdD09QyYmKHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCl9LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YSYmdm9pZCAwIT09dGhpcy5kYXRhLmhhbmRsZUlkP3RoaXMuZGF0YS5oYW5kbGVJZC50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKX0sZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6dGhpcy50eXBlLHN0YXRlOnRoaXMuc3RhdGUsc291cmNlOnRoaXMuc291cmNlLHpvbmU6dGhpcy56b25lLm5hbWUscnVuQ291bnQ6dGhpcy5ydW5Db3VudH19LGV9KSgpLG09YSgic2V0VGltZW91dCIpLHU9YSgiUHJvbWlzZSIpLGY9YSgidGhlbiIpLGc9W10saD0hMTtmdW5jdGlvbiBiKGUpe2lmKDA9PT1UJiYwPT09Zy5sZW5ndGgpaWYobHx8dFt1XSYmKGw9dFt1XS5yZXNvbHZlKDApKSxsKXt2YXIgbj1sW2ZdO258fChuPWwudGhlbiksbi5jYWxsKGwseSl9ZWxzZSB0W21dKHksMCk7ZSYmZy5wdXNoKGUpfWZ1bmN0aW9uIHkoKXtpZighaCl7Zm9yKGg9ITA7Zy5sZW5ndGg7KXt2YXIgdD1nO2c9W107Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBuPXRbZV07dHJ5e24uem9uZS5ydW5UYXNrKG4sbnVsbCxudWxsKX1jYXRjaCh0KXtFLm9uVW5oYW5kbGVkRXJyb3IodCl9fX1FLm1pY3JvdGFza0RyYWluRG9uZSgpLGg9ITF9fXZhciBfPXtuYW1lOiJOTyBaT05FIn0sQz0ibm90U2NoZWR1bGVkIixNPSJzY2hlZHVsaW5nIix2PSJzY2hlZHVsZWQiLHg9InJ1bm5pbmciLE89ImNhbmNlbGluZyIsUD0idW5rbm93biIsdz0ibWljcm9UYXNrIixrPSJtYWNyb1Rhc2siLFM9ImV2ZW50VGFzayIsRD17fSxFPXtzeW1ib2w6YSxjdXJyZW50Wm9uZUZyYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIFJ9LG9uVW5oYW5kbGVkRXJyb3I6TixtaWNyb3Rhc2tEcmFpbkRvbmU6TixzY2hlZHVsZU1pY3JvVGFzazpiLHNob3dVbmNhdWdodEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIXNbYSgiaWdub3JlQ29uc29sZUVycm9yVW5jYXVnaHRFcnJvciIpXX0scGF0Y2hFdmVudFRhcmdldDpmdW5jdGlvbigpe3JldHVybltdfSxwYXRjaE9uUHJvcGVydGllczpOLHBhdGNoTWV0aG9kOmZ1bmN0aW9uKCl7cmV0dXJuIE59LGJpbmRBcmd1bWVudHM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hUaGVuOmZ1bmN0aW9uKCl7cmV0dXJuIE59LHBhdGNoTWFjcm9UYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIE59LHBhdGNoRXZlbnRQcm90b3R5cGU6ZnVuY3Rpb24oKXtyZXR1cm4gTn0saXNJRU9yRWRnZTpmdW5jdGlvbigpe3JldHVybiExfSxnZXRHbG9iYWxPYmplY3RzOmZ1bmN0aW9uKCl7fSxPYmplY3REZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbigpe3JldHVybiBOfSxPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZnVuY3Rpb24oKXt9LE9iamVjdENyZWF0ZTpmdW5jdGlvbigpe30sQXJyYXlTbGljZTpmdW5jdGlvbigpe3JldHVybltdfSxwYXRjaENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuIE59LHdyYXBXaXRoQ3VycmVudFpvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gTn0sZmlsdGVyUHJvcGVydGllczpmdW5jdGlvbigpe3JldHVybltdfSxhdHRhY2hPcmlnaW5Ub1BhdGNoZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gTn0sX3JlZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oKXtyZXR1cm4gTn0scGF0Y2hDYWxsYmFja3M6ZnVuY3Rpb24oKXtyZXR1cm4gTn19LFI9e3BhcmVudDpudWxsLHpvbmU6bmV3IHMobnVsbCxudWxsKX0sQT1udWxsLFQ9MDtmdW5jdGlvbiBOKCl7fW8oIlpvbmUiLCJab25lIiksdC5ab25lPXN9KSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93fHwidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGZ8fFF2KTsKLyoqCiAgICAgICAgICogQGxpY2Vuc2UKICAgICAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovCnZhciB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsZT1PYmplY3QuZGVmaW5lUHJvcGVydHksbj1PYmplY3QuZ2V0UHJvdG90eXBlT2Ysbz1PYmplY3QuY3JlYXRlLGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLGE9ImFkZEV2ZW50TGlzdGVuZXIiLHI9InJlbW92ZUV2ZW50TGlzdGVuZXIiLHM9Wm9uZS5fX3N5bWJvbF9fKGEpLGw9Wm9uZS5fX3N5bWJvbF9fKHIpLGM9InRydWUiLGQ9ImZhbHNlIixwPVpvbmUuX19zeW1ib2xfXygiIik7ZnVuY3Rpb24gbSh0LGUpe3JldHVybiBab25lLmN1cnJlbnQud3JhcCh0LGUpfWZ1bmN0aW9uIHUodCxlLG4sbyxpKXtyZXR1cm4gWm9uZS5jdXJyZW50LnNjaGVkdWxlTWFjcm9UYXNrKHQsZSxuLG8saSl9dmFyIGY9Wm9uZS5fX3N5bWJvbF9fLGc9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3csaD1nP3dpbmRvdzp2b2lkIDAsYj1nJiZofHwib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGZ8fFF2LHk9W251bGxdO2Z1bmN0aW9uIF8odCxlKXtmb3IodmFyIG49dC5sZW5ndGgtMTtuPj0wO24tLSkiZnVuY3Rpb24iPT10eXBlb2YgdFtuXSYmKHRbbl09bSh0W25dLGUrIl8iK24pKTtyZXR1cm4gdH1mdW5jdGlvbiBDKHQpe3JldHVybiF0fHwhMSE9PXQud3JpdGFibGUmJiEoImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0JiZ2b2lkIDA9PT10LnNldCl9dmFyIE09InVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLHY9ISgibnciaW4gYikmJnZvaWQgMCE9PWIucHJvY2VzcyYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbChiLnByb2Nlc3MpLHg9IXYmJiFNJiYhKCFnfHwhaC5IVE1MRWxlbWVudCksTz12b2lkIDAhPT1iLnByb2Nlc3MmJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoYi5wcm9jZXNzKSYmIU0mJiEoIWd8fCFoLkhUTUxFbGVtZW50KSxQPXt9LHc9ZnVuY3Rpb24odCl7aWYodD10fHxiLmV2ZW50KXt2YXIgZT1QW3QudHlwZV07ZXx8KGU9UFt0LnR5cGVdPWYoIk9OX1BST1BFUlRZIit0LnR5cGUpKTt2YXIgbixvPXRoaXN8fHQudGFyZ2V0fHxiLGk9b1tlXTtyZXR1cm4geCYmbz09PWgmJiJlcnJvciI9PT10LnR5cGU/ITA9PT0obj1pJiZpLmNhbGwodGhpcyx0Lm1lc3NhZ2UsdC5maWxlbmFtZSx0LmxpbmVubyx0LmNvbG5vLHQuZXJyb3IpKSYmdC5wcmV2ZW50RGVmYXVsdCgpOm51bGw9PShuPWkmJmkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXx8bnx8dC5wcmV2ZW50RGVmYXVsdCgpLG59fTtmdW5jdGlvbiBrKG4sbyxpKXt2YXIgYT10KG4sbyk7aWYoIWEmJmkmJnQoaSxvKSYmKGE9e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksYSYmYS5jb25maWd1cmFibGUpe3ZhciByPWYoIm9uIitvKyJwYXRjaGVkIik7aWYoIW4uaGFzT3duUHJvcGVydHkocil8fCFuW3JdKXtkZWxldGUgYS53cml0YWJsZSxkZWxldGUgYS52YWx1ZTt2YXIgcz1hLmdldCxsPWEuc2V0LGM9by5zdWJzdHIoMiksZD1QW2NdO2R8fChkPVBbY109ZigiT05fUFJPUEVSVFkiK2MpKSxhLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2V8fG4hPT1ifHwoZT1iKSxlJiYoZVtkXSYmZS5yZW1vdmVFdmVudExpc3RlbmVyKGMsdyksbCYmbC5hcHBseShlLHkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlW2RdPXQsZS5hZGRFdmVudExpc3RlbmVyKGMsdywhMSkpOmVbZF09bnVsbCl9LGEuZ2V0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0fHxuIT09Ynx8KHQ9YiksIXQpcmV0dXJuIG51bGw7dmFyIGU9dFtkXTtpZihlKXJldHVybiBlO2lmKHMpe3ZhciBpPXMmJnMuY2FsbCh0aGlzKTtpZihpKXJldHVybiBhLnNldC5jYWxsKHRoaXMsaSksImZ1bmN0aW9uIj09dHlwZW9mIHQucmVtb3ZlQXR0cmlidXRlJiZ0LnJlbW92ZUF0dHJpYnV0ZShvKSxpfXJldHVybiBudWxsfSxlKG4sbyxhKSxuW3JdPSEwfX19ZnVuY3Rpb24gUyh0LGUsbil7aWYoZSlmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rKylrKHQsIm9uIitlW29dLG4pO2Vsc2V7dmFyIGk9W107Zm9yKHZhciBhIGluIHQpIm9uIj09YS5zdWJzdHIoMCwyKSYmaS5wdXNoKGEpO2Zvcih2YXIgcj0wO3I8aS5sZW5ndGg7cisrKWsodCxpW3JdLG4pfX12YXIgRD1mKCJvcmlnaW5hbEluc3RhbmNlIik7ZnVuY3Rpb24gRSh0KXt2YXIgbj1iW3RdO2lmKG4pe2JbZih0KV09bixiW3RdPWZ1bmN0aW9uKCl7dmFyIGU9Xyhhcmd1bWVudHMsdCk7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6dGhpc1tEXT1uZXcgbjticmVhaztjYXNlIDE6dGhpc1tEXT1uZXcgbihlWzBdKTticmVhaztjYXNlIDI6dGhpc1tEXT1uZXcgbihlWzBdLGVbMV0pO2JyZWFrO2Nhc2UgMzp0aGlzW0RdPW5ldyBuKGVbMF0sZVsxXSxlWzJdKTticmVhaztjYXNlIDQ6dGhpc1tEXT1uZXcgbihlWzBdLGVbMV0sZVsyXSxlWzNdKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQXJnIGxpc3QgdG9vIGxvbmcuIil9fSxUKGJbdF0sbik7dmFyIG8saT1uZXcgbigoZnVuY3Rpb24oKXt9KSk7Zm9yKG8gaW4gaSkiWE1MSHR0cFJlcXVlc3QiPT09dCYmInJlc3BvbnNlQmxvYiI9PT1vfHwoZnVuY3Rpb24obil7ImZ1bmN0aW9uIj09dHlwZW9mIGlbbl0/Ylt0XS5wcm90b3R5cGVbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tEXVtuXS5hcHBseSh0aGlzW0RdLGFyZ3VtZW50cyl9OmUoYlt0XS5wcm90b3R5cGUsbix7c2V0OmZ1bmN0aW9uKGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBlPyh0aGlzW0RdW25dPW0oZSx0KyIuIituKSxUKHRoaXNbRF1bbl0sZSkpOnRoaXNbRF1bbl09ZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbRF1bbl19fSl9KShvKTtmb3IobyBpbiBuKSJwcm90b3R5cGUiIT09byYmbi5oYXNPd25Qcm9wZXJ0eShvKSYmKGJbdF1bb109bltvXSl9fWZ1bmN0aW9uIFIoZSxvLGkpe2Zvcih2YXIgYT1lO2EmJiFhLmhhc093blByb3BlcnR5KG8pOylhPW4oYSk7IWEmJmVbb10mJihhPWUpO3ZhciByPWYobykscz1udWxsO2lmKGEmJighKHM9YVtyXSl8fCFhLmhhc093blByb3BlcnR5KHIpKSYmKHM9YVtyXT1hW29dLEMoYSYmdChhLG8pKSkpe3ZhciBsPWkocyxyLG8pO2Fbb109ZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLGFyZ3VtZW50cyl9LFQoYVtvXSxzKX1yZXR1cm4gc31mdW5jdGlvbiBBKHQsZSxuKXt2YXIgbz1udWxsO2Z1bmN0aW9uIGkodCl7dmFyIGU9dC5kYXRhO3JldHVybiBlLmFyZ3NbZS5jYklkeF09ZnVuY3Rpb24oKXt0Lmludm9rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG8uYXBwbHkoZS50YXJnZXQsZS5hcmdzKSx0fW89Uih0LGUsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG8pe3ZhciBhPW4oZSxvKTtyZXR1cm4gYS5jYklkeD49MCYmImZ1bmN0aW9uIj09dHlwZW9mIG9bYS5jYklkeF0/dShhLm5hbWUsb1thLmNiSWR4XSxhLGkpOnQuYXBwbHkoZSxvKX19KSl9ZnVuY3Rpb24gVCh0LGUpe3RbZigiT3JpZ2luYWxEZWxlZ2F0ZSIpXT1lfXZhciBOPSExLHo9ITE7ZnVuY3Rpb24gSSgpe2lmKE4pcmV0dXJuIHo7Tj0hMDt0cnl7dmFyIHQ9aC5uYXZpZ2F0b3IudXNlckFnZW50Oy0xPT09dC5pbmRleE9mKCJNU0lFICIpJiYtMT09PXQuaW5kZXhPZigiVHJpZGVudC8iKSYmLTE9PT10LmluZGV4T2YoIkVkZ2UvIil8fCh6PSEwKX1jYXRjaCh0KXt9cmV0dXJuIHp9Ci8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAgICAgKgogICAgICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICAgICAqL1pvbmUuX19sb2FkX3BhdGNoKCJab25lQXdhcmVQcm9taXNlIiwoZnVuY3Rpb24odCxlLG4pe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsaT1PYmplY3QuZGVmaW5lUHJvcGVydHksYT1uLnN5bWJvbCxyPVtdLHM9ITA9PT10W2EoIkRJU0FCTEVfV1JBUFBJTkdfVU5DQVVHSFRfUFJPTUlTRV9SRUpFQ1RJT04iKV0sbD1hKCJQcm9taXNlIiksYz1hKCJ0aGVuIik7bi5vblVuaGFuZGxlZEVycm9yPWZ1bmN0aW9uKHQpe2lmKG4uc2hvd1VuY2F1Z2h0RXJyb3IoKSl7dmFyIGU9dCYmdC5yZWplY3Rpb247ZT9jb25zb2xlLmVycm9yKCJVbmhhbmRsZWQgUHJvbWlzZSByZWplY3Rpb246IixlIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOmUsIjsgWm9uZToiLHQuem9uZS5uYW1lLCI7IFRhc2s6Iix0LnRhc2smJnQudGFzay5zb3VyY2UsIjsgVmFsdWU6IixlLGUgaW5zdGFuY2VvZiBFcnJvcj9lLnN0YWNrOnZvaWQgMCk6Y29uc29sZS5lcnJvcih0KX19LG4ubWljcm90YXNrRHJhaW5Eb25lPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWZ1bmN0aW9uKCl7dmFyIHQ9ci5zaGlmdCgpO3RyeXt0LnpvbmUucnVuR3VhcmRlZCgoZnVuY3Rpb24oKXtpZih0LnRocm93T3JpZ2luYWwpdGhyb3cgdC5yZWplY3Rpb247dGhyb3cgdH0pKX1jYXRjaCh0KXshKGZ1bmN0aW9uIG8odCl7bi5vblVuaGFuZGxlZEVycm9yKHQpO3RyeXt2YXIgbz1lW2RdOyJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvLmNhbGwodGhpcyx0KX1jYXRjaCh0KXt9fSkodCl9fTtyLmxlbmd0aDspdCgpfTt2YXIgZD1hKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpO2Z1bmN0aW9uIHAodCl7cmV0dXJuIHQmJnQudGhlbn1mdW5jdGlvbiBtKHQpe3JldHVybiB0fWZ1bmN0aW9uIHUodCl7cmV0dXJuIEQucmVqZWN0KHQpfXZhciBmPWEoInN0YXRlIiksZz1hKCJ2YWx1ZSIpLGg9YSgiZmluYWxseSIpLGI9YSgicGFyZW50UHJvbWlzZVZhbHVlIikseT1hKCJwYXJlbnRQcm9taXNlU3RhdGUiKSxfPW51bGwsQz0hMCxNPSExO2Z1bmN0aW9uIHYodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dHJ5e08odCxlLG4pfWNhdGNoKGUpe08odCwhMSxlKX19fXZhciB4PWEoImN1cnJlbnRUYXNrVHJhY2UiKTtmdW5jdGlvbiBPKHQsbyxhKXt2YXIgbCxjPShsPSExLGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7bHx8KGw9ITAsZS5hcHBseShudWxsLGFyZ3VtZW50cykpfX0pO2lmKHQ9PT1hKXRocm93IG5ldyBUeXBlRXJyb3IoIlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYiKTtpZih0W2ZdPT09Xyl7dmFyIGQ9bnVsbDt0cnl7Im9iamVjdCIhPXR5cGVvZiBhJiYiZnVuY3Rpb24iIT10eXBlb2YgYXx8KGQ9YSYmYS50aGVuKX1jYXRjaChlKXtyZXR1cm4gYygoZnVuY3Rpb24oKXtPKHQsITEsZSl9KSkoKSx0fWlmKG8hPT1NJiZhIGluc3RhbmNlb2YgRCYmYS5oYXNPd25Qcm9wZXJ0eShmKSYmYS5oYXNPd25Qcm9wZXJ0eShnKSYmYVtmXSE9PV8pdyhhKSxPKHQsYVtmXSxhW2ddKTtlbHNlIGlmKG8hPT1NJiYiZnVuY3Rpb24iPT10eXBlb2YgZCl0cnl7ZC5jYWxsKGEsYyh2KHQsbykpLGModih0LCExKSkpfWNhdGNoKGUpe2MoKGZ1bmN0aW9uKCl7Tyh0LCExLGUpfSkpKCl9ZWxzZXt0W2ZdPW87dmFyIHA9dFtnXTtpZih0W2ddPWEsdFtoXT09PWgmJm89PT1DJiYodFtmXT10W3ldLHRbZ109dFtiXSksbz09PU0mJmEgaW5zdGFuY2VvZiBFcnJvcil7dmFyIG09ZS5jdXJyZW50VGFzayYmZS5jdXJyZW50VGFzay5kYXRhJiZlLmN1cnJlbnRUYXNrLmRhdGEuX19jcmVhdGlvblRyYWNlX187bSYmaShhLHgse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOm19KX1mb3IodmFyIHU9MDt1PHAubGVuZ3RoOylrKHQscFt1KytdLHBbdSsrXSxwW3UrK10scFt1KytdKTtpZigwPT1wLmxlbmd0aCYmbz09TSl7dFtmXT0wO3ZhciBQPWE7dHJ5e3Rocm93IG5ldyBFcnJvcigiVW5jYXVnaHQgKGluIHByb21pc2UpOiAiKyhmdW5jdGlvbiBTKHQpe3JldHVybiB0JiZ0LnRvU3RyaW5nPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz8odC5jb25zdHJ1Y3RvciYmdC5jb25zdHJ1Y3Rvci5uYW1lfHwiIikrIjogIitKU09OLnN0cmluZ2lmeSh0KTp0P3QudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KShhKSsoYSYmYS5zdGFjaz8iXG4iK2Euc3RhY2s6IiIpKX1jYXRjaCh0KXtQPXR9cyYmKFAudGhyb3dPcmlnaW5hbD0hMCksUC5yZWplY3Rpb249YSxQLnByb21pc2U9dCxQLnpvbmU9ZS5jdXJyZW50LFAudGFzaz1lLmN1cnJlbnRUYXNrLHIucHVzaChQKSxuLnNjaGVkdWxlTWljcm9UYXNrKCl9fX1yZXR1cm4gdH12YXIgUD1hKCJyZWplY3Rpb25IYW5kbGVkSGFuZGxlciIpO2Z1bmN0aW9uIHcodCl7aWYoMD09PXRbZl0pe3RyeXt2YXIgbj1lW1BdO24mJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuLmNhbGwodGhpcyx7cmVqZWN0aW9uOnRbZ10scHJvbWlzZTp0fSl9Y2F0Y2godCl7fXRbZl09TTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl0PT09cltvXS5wcm9taXNlJiZyLnNwbGljZShvLDEpfX1mdW5jdGlvbiBrKHQsZSxuLG8saSl7dyh0KTt2YXIgYT10W2ZdLHI9YT8iZnVuY3Rpb24iPT10eXBlb2Ygbz9vOm06ImZ1bmN0aW9uIj09dHlwZW9mIGk/aTp1O2Uuc2NoZWR1bGVNaWNyb1Rhc2soIlByb21pc2UudGhlbiIsKGZ1bmN0aW9uKCl7dHJ5e3ZhciBvPXRbZ10saT0hIW4mJmg9PT1uW2hdO2kmJihuW2JdPW8sblt5XT1hKTt2YXIgcz1lLnJ1bihyLHZvaWQgMCxpJiZyIT09dSYmciE9PW0/W106W29dKTtPKG4sITAscyl9Y2F0Y2godCl7TyhuLCExLHQpfX0pLG4pfXZhciBTPWZ1bmN0aW9uKCl7fSxEPShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIG49dGhpcztpZighKG4gaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgRXJyb3IoIk11c3QgYmUgYW4gaW5zdGFuY2VvZiBQcm9taXNlLiIpO25bZl09XyxuW2ddPVtdO3RyeXtlJiZlKHYobixDKSx2KG4sTSkpfWNhdGNoKHQpe08obiwhMSx0KX19cmV0dXJuIHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24gWm9uZUF3YXJlUHJvbWlzZSgpIHsgW25hdGl2ZSBjb2RlXSB9In0sdC5yZXNvbHZlPWZ1bmN0aW9uKHQpe3JldHVybiBPKG5ldyB0aGlzKG51bGwpLEMsdCl9LHQucmVqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBPKG5ldyB0aGlzKG51bGwpLE0sdCl9LHQucmFjZT1mdW5jdGlvbih0KXt2YXIgZSxuLG89bmV3IHRoaXMoKGZ1bmN0aW9uKHQsbyl7ZT10LG49b30pKTtmdW5jdGlvbiBpKHQpe2UodCl9ZnVuY3Rpb24gYSh0KXtuKHQpfWZvcih2YXIgcj0wLHM9dDtyPHMubGVuZ3RoO3IrKyl7dmFyIGw9c1tyXTtwKGwpfHwobD10aGlzLnJlc29sdmUobCkpLGwudGhlbihpLGEpfXJldHVybiBvfSx0LmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gdC5hbGxXaXRoQ2FsbGJhY2soZSl9LHQuYWxsU2V0dGxlZD1mdW5jdGlvbihlKXtyZXR1cm4odGhpcyYmdGhpcy5wcm90b3R5cGUgaW5zdGFuY2VvZiB0P3RoaXM6dCkuYWxsV2l0aENhbGxiYWNrKGUse3RoZW5DYWxsYmFjazpmdW5jdGlvbih0KXtyZXR1cm57c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOnR9fSxlcnJvckNhbGxiYWNrOmZ1bmN0aW9uKHQpe3JldHVybntzdGF0dXM6InJlamVjdGVkIixyZWFzb246dH19fSl9LHQuYWxsV2l0aENhbGxiYWNrPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuLG8saT1uZXcgdGhpcygoZnVuY3Rpb24odCxlKXtuPXQsbz1lfSkpLGE9MixyPTAscz1bXSxsPWZ1bmN0aW9uKHQpe3AodCl8fCh0PWMucmVzb2x2ZSh0KSk7dmFyIGk9cjt0cnl7dC50aGVuKChmdW5jdGlvbih0KXtzW2ldPWU/ZS50aGVuQ2FsbGJhY2sodCk6dCwwPT0tLWEmJm4ocyl9KSwoZnVuY3Rpb24odCl7ZT8oc1tpXT1lLmVycm9yQ2FsbGJhY2sodCksMD09LS1hJiZuKHMpKTpvKHQpfSkpfWNhdGNoKHQpe28odCl9YSsrLHIrK30sYz10aGlzLGQ9MCxtPXQ7ZDxtLmxlbmd0aDtkKyspbChtW2RdKTtyZXR1cm4gMD09KGEtPTIpJiZuKHMpLGl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxTeW1ib2wudG9TdHJpbmdUYWcse2dldDpmdW5jdGlvbigpe3JldHVybiJQcm9taXNlIn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsU3ltYm9sLnNwZWNpZXMse2dldDpmdW5jdGlvbigpe3JldHVybiB0fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24obixvKXt2YXIgaT10aGlzLmNvbnN0cnVjdG9yW1N5bWJvbC5zcGVjaWVzXTtpJiYiZnVuY3Rpb24iPT10eXBlb2YgaXx8KGk9dGhpcy5jb25zdHJ1Y3Rvcnx8dCk7dmFyIGE9bmV3IGkoUykscj1lLmN1cnJlbnQ7cmV0dXJuIHRoaXNbZl09PV8/dGhpc1tnXS5wdXNoKHIsYSxuLG8pOmsodGhpcyxyLGEsbixvKSxhfSx0LnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50aGVuKG51bGwsdCl9LHQucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24obil7dmFyIG89dGhpcy5jb25zdHJ1Y3RvcltTeW1ib2wuc3BlY2llc107byYmImZ1bmN0aW9uIj09dHlwZW9mIG98fChvPXQpO3ZhciBpPW5ldyBvKFMpO2lbaF09aDt2YXIgYT1lLmN1cnJlbnQ7cmV0dXJuIHRoaXNbZl09PV8/dGhpc1tnXS5wdXNoKGEsaSxuLG4pOmsodGhpcyxhLGksbixuKSxpfSx0fSkoKTtELnJlc29sdmU9RC5yZXNvbHZlLEQucmVqZWN0PUQucmVqZWN0LEQucmFjZT1ELnJhY2UsRC5hbGw9RC5hbGw7dmFyIEU9dFtsXT10LlByb21pc2U7dC5Qcm9taXNlPUQ7dmFyIEE9YSgidGhlblBhdGNoZWQiKTtmdW5jdGlvbiBUKHQpe3ZhciBlPXQucHJvdG90eXBlLG49byhlLCJ0aGVuIik7aWYoIW58fCExIT09bi53cml0YWJsZSYmbi5jb25maWd1cmFibGUpe3ZhciBpPWUudGhlbjtlW2NdPWksdC5wcm90b3R5cGUudGhlbj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBEKChmdW5jdGlvbih0LGUpe2kuY2FsbChuLHQsZSl9KSkudGhlbih0LGUpfSx0W0FdPSEwfX1yZXR1cm4gbi5wYXRjaFRoZW49VCxFJiYoVChFKSxSKHQsImZldGNoIiwoZnVuY3Rpb24odCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIG89dC5hcHBseShlLG4pO2lmKG8gaW5zdGFuY2VvZiBEKXJldHVybiBvO3ZhciBpPW8uY29uc3RydWN0b3I7cmV0dXJuIGlbQV18fFQoaSksb319KSh0KX0pKSksUHJvbWlzZVtlLl9fc3ltYm9sX18oInVuY2F1Z2h0UHJvbWlzZUVycm9ycyIpXT1yLER9KSksCi8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAgICAgKgogICAgICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICAgICAqLwpab25lLl9fbG9hZF9wYXRjaCgidG9TdHJpbmciLChmdW5jdGlvbih0KXt2YXIgZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsbj1mKCJPcmlnaW5hbERlbGVnYXRlIiksbz1mKCJQcm9taXNlIiksaT1mKCJFcnJvciIpLGE9ZnVuY3Rpb24gYSgpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzKXt2YXIgcj10aGlzW25dO2lmKHIpcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHI/ZS5jYWxsKHIpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKTtpZih0aGlzPT09UHJvbWlzZSl7dmFyIHM9dFtvXTtpZihzKXJldHVybiBlLmNhbGwocyl9aWYodGhpcz09PUVycm9yKXt2YXIgbD10W2ldO2lmKGwpcmV0dXJuIGUuY2FsbChsKX19cmV0dXJuIGUuY2FsbCh0aGlzKX07YVtuXT1lLEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1hO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBQcm9taXNlJiZ0aGlzIGluc3RhbmNlb2YgUHJvbWlzZT8iW29iamVjdCBQcm9taXNlXSI6ci5jYWxsKHRoaXMpfX0pKTsKLyoqCiAgICAgICAgICogQGxpY2Vuc2UKICAgICAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovCnZhciBIPSExO2lmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93KXRyeXt2YXIgRj1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtIPSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixGLEYpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixGLEYpfWNhdGNoKHQpe0g9ITF9dmFyIEw9e3VzZUc6ITB9LEI9e30sVj17fSxqPW5ldyBSZWdFeHAoIl4iK3ArIihcXHcrKSh0cnVlfGZhbHNlKSQiKSxVPWYoInByb3BhZ2F0aW9uU3RvcHBlZCIpO2Z1bmN0aW9uIEcodCxlKXt2YXIgbj0oZT9lKHQpOnQpK2Qsbz0oZT9lKHQpOnQpK2MsaT1wK24sYT1wK287Qlt0XT17fSxCW3RdLmZhbHNlPWksQlt0XS50cnVlPWF9ZnVuY3Rpb24gVyh0LGUsbyl7dmFyIGk9byYmby5hZGR8fGEscz1vJiZvLnJtfHxyLGw9byYmby5saXN0ZW5lcnN8fCJldmVudExpc3RlbmVycyIsbT1vJiZvLnJtQWxsfHwicmVtb3ZlQWxsTGlzdGVuZXJzIix1PWYoaSksZz0iLiIraSsiOiIsaD1mdW5jdGlvbih0LGUsbil7aWYoIXQuaXNSZW1vdmVkKXt2YXIgbz10LmNhbGxiYWNrOyJvYmplY3QiPT10eXBlb2YgbyYmby5oYW5kbGVFdmVudCYmKHQuY2FsbGJhY2s9ZnVuY3Rpb24odCl7cmV0dXJuIG8uaGFuZGxlRXZlbnQodCl9LHQub3JpZ2luYWxEZWxlZ2F0ZT1vKSx0Lmludm9rZSh0LGUsW25dKTt2YXIgaT10Lm9wdGlvbnM7aSYmIm9iamVjdCI9PXR5cGVvZiBpJiZpLm9uY2UmJmVbc10uY2FsbChlLG4udHlwZSx0Lm9yaWdpbmFsRGVsZWdhdGU/dC5vcmlnaW5hbERlbGVnYXRlOnQuY2FsbGJhY2ssaSl9fSxiPWZ1bmN0aW9uKGUpe2lmKGU9ZXx8dC5ldmVudCl7dmFyIG49dGhpc3x8ZS50YXJnZXR8fHQsbz1uW0JbZS50eXBlXS5mYWxzZV07aWYobylpZigxPT09by5sZW5ndGgpaChvWzBdLG4sZSk7ZWxzZSBmb3IodmFyIGk9by5zbGljZSgpLGE9MDthPGkubGVuZ3RoJiYoIWV8fCEwIT09ZVtVXSk7YSsrKWgoaVthXSxuLGUpfX0seT1mdW5jdGlvbihlKXtpZihlPWV8fHQuZXZlbnQpe3ZhciBuPXRoaXN8fGUudGFyZ2V0fHx0LG89bltCW2UudHlwZV0udHJ1ZV07aWYobylpZigxPT09by5sZW5ndGgpaChvWzBdLG4sZSk7ZWxzZSBmb3IodmFyIGk9by5zbGljZSgpLGE9MDthPGkubGVuZ3RoJiYoIWV8fCEwIT09ZVtVXSk7YSsrKWgoaVthXSxuLGUpfX07ZnVuY3Rpb24gXyhlLG8pe2lmKCFlKXJldHVybiExO3ZhciBhPSEwO28mJnZvaWQgMCE9PW8udXNlRyYmKGE9by51c2VHKTt2YXIgcj1vJiZvLnZoLGg9ITA7byYmdm9pZCAwIT09by5jaGtEdXAmJihoPW8uY2hrRHVwKTt2YXIgXz0hMTtvJiZ2b2lkIDAhPT1vLnJ0JiYoXz1vLnJ0KTtmb3IodmFyIEM9ZTtDJiYhQy5oYXNPd25Qcm9wZXJ0eShpKTspQz1uKEMpO2lmKCFDJiZlW2ldJiYoQz1lKSwhQylyZXR1cm4hMTtpZihDW3VdKXJldHVybiExO3ZhciBNLHg9byYmby5ldmVudE5hbWVUb1N0cmluZyxPPXt9LFA9Q1t1XT1DW2ldLHc9Q1tmKHMpXT1DW3NdLGs9Q1tmKGwpXT1DW2xdLFM9Q1tmKG0pXT1DW21dO2Z1bmN0aW9uIEQodCxlKXtyZXR1cm4hSCYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0PyEhdC5jYXB0dXJlOkgmJmU/ImJvb2xlYW4iPT10eXBlb2YgdD97Y2FwdHVyZTp0LHBhc3NpdmU6ITB9OnQ/Im9iamVjdCI9PXR5cGVvZiB0JiYhMSE9PXQucGFzc2l2ZT9PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3Bhc3NpdmU6ITB9KTp0OntwYXNzaXZlOiEwfTp0fW8mJm8ucHJlcGVuZCYmKE09Q1tmKG8ucHJlcGVuZCldPUNbby5wcmVwZW5kXSk7dmFyIEU9YT9mdW5jdGlvbih0KXtpZighTy5pc0V4aXN0aW5nKXJldHVybiBQLmNhbGwoTy50YXJnZXQsTy5ldmVudE5hbWUsTy5jYXB0dXJlP3k6YixPLm9wdGlvbnMpfTpmdW5jdGlvbih0KXtyZXR1cm4gUC5jYWxsKE8udGFyZ2V0LE8uZXZlbnROYW1lLHQuaW52b2tlLE8ub3B0aW9ucyl9LFI9YT9mdW5jdGlvbih0KXtpZighdC5pc1JlbW92ZWQpe3ZhciBlPUJbdC5ldmVudE5hbWVdLG49dm9pZCAwO2UmJihuPWVbdC5jYXB0dXJlP2M6ZF0pO3ZhciBvPW4mJnQudGFyZ2V0W25dO2lmKG8pZm9yKHZhciBpPTA7aTxvLmxlbmd0aDtpKyspaWYob1tpXT09PXQpe28uc3BsaWNlKGksMSksdC5pc1JlbW92ZWQ9ITAsMD09PW8ubGVuZ3RoJiYodC5hbGxSZW1vdmVkPSEwLHQudGFyZ2V0W25dPW51bGwpO2JyZWFrfX1pZih0LmFsbFJlbW92ZWQpcmV0dXJuIHcuY2FsbCh0LnRhcmdldCx0LmV2ZW50TmFtZSx0LmNhcHR1cmU/eTpiLHQub3B0aW9ucyl9OmZ1bmN0aW9uKHQpe3JldHVybiB3LmNhbGwodC50YXJnZXQsdC5ldmVudE5hbWUsdC5pbnZva2UsdC5vcHRpb25zKX0sQT1vJiZvLmRpZmY/by5kaWZmOmZ1bmN0aW9uKHQsZSl7dmFyIG49dHlwZW9mIGU7cmV0dXJuImZ1bmN0aW9uIj09PW4mJnQuY2FsbGJhY2s9PT1lfHwib2JqZWN0Ij09PW4mJnQub3JpZ2luYWxEZWxlZ2F0ZT09PWV9LE49Wm9uZVtmKCJVTlBBVENIRURfRVZFTlRTIildLHo9dFtmKCJQQVNTSVZFX0VWRU5UUyIpXSxJPWZ1bmN0aW9uKGUsbixpLHMsbCxwKXtyZXR1cm4gdm9pZCAwPT09bCYmKGw9ITEpLHZvaWQgMD09PXAmJihwPSExKSxmdW5jdGlvbigpe3ZhciBtPXRoaXN8fHQsdT1hcmd1bWVudHNbMF07byYmby50cmFuc2ZlckV2ZW50TmFtZSYmKHU9by50cmFuc2ZlckV2ZW50TmFtZSh1KSk7dmFyIGY9YXJndW1lbnRzWzFdO2lmKCFmKXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZih2JiYidW5jYXVnaHRFeGNlcHRpb24iPT09dSlyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGc9ITE7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGYpe2lmKCFmLmhhbmRsZUV2ZW50KXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtnPSEwfWlmKCFyfHxyKGUsZixtLGFyZ3VtZW50cykpe3ZhciBiPUgmJiEheiYmLTEhPT16LmluZGV4T2YodSkseT1EKGFyZ3VtZW50c1syXSxiKTtpZihOKWZvcih2YXIgXz0wO188Ti5sZW5ndGg7XysrKWlmKHU9PT1OW19dKXJldHVybiBiP2UuY2FsbChtLHUsZix5KTplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgQz0hIXkmJigiYm9vbGVhbiI9PXR5cGVvZiB5fHx5LmNhcHR1cmUpLE09ISgheXx8Im9iamVjdCIhPXR5cGVvZiB5KSYmeS5vbmNlLFA9Wm9uZS5jdXJyZW50LHc9Qlt1XTt3fHwoRyh1LHgpLHc9Qlt1XSk7dmFyIGssUz13W0M/YzpkXSxFPW1bU10sUj0hMTtpZihFKXtpZihSPSEwLGgpZm9yKF89MDtfPEUubGVuZ3RoO18rKylpZihBKEVbX10sZikpcmV0dXJufWVsc2UgRT1tW1NdPVtdO3ZhciBUPW0uY29uc3RydWN0b3IubmFtZSxJPVZbVF07SSYmKGs9SVt1XSksa3x8KGs9VCtuKyh4P3godSk6dSkpLE8ub3B0aW9ucz15LE0mJihPLm9wdGlvbnMub25jZT0hMSksTy50YXJnZXQ9bSxPLmNhcHR1cmU9QyxPLmV2ZW50TmFtZT11LE8uaXNFeGlzdGluZz1SO3ZhciBGPWE/TDp2b2lkIDA7RiYmKEYudGFza0RhdGE9Tyk7dmFyIGo9UC5zY2hlZHVsZUV2ZW50VGFzayhrLGYsRixpLHMpO3JldHVybiBPLnRhcmdldD1udWxsLEYmJihGLnRhc2tEYXRhPW51bGwpLE0mJih5Lm9uY2U9ITApLChIfHwiYm9vbGVhbiIhPXR5cGVvZiBqLm9wdGlvbnMpJiYoai5vcHRpb25zPXkpLGoudGFyZ2V0PW0sai5jYXB0dXJlPUMsai5ldmVudE5hbWU9dSxnJiYoai5vcmlnaW5hbERlbGVnYXRlPWYpLHA/RS51bnNoaWZ0KGopOkUucHVzaChqKSxsP206dm9pZCAwfX19O3JldHVybiBDW2ldPUkoUCxnLEUsUixfKSxNJiYoQy5wcmVwZW5kTGlzdGVuZXI9SShNLCIucHJlcGVuZExpc3RlbmVyOiIsKGZ1bmN0aW9uKHQpe3JldHVybiBNLmNhbGwoTy50YXJnZXQsTy5ldmVudE5hbWUsdC5pbnZva2UsTy5vcHRpb25zKX0pLFIsXywhMCkpLENbc109ZnVuY3Rpb24oKXt2YXIgZT10aGlzfHx0LG49YXJndW1lbnRzWzBdO28mJm8udHJhbnNmZXJFdmVudE5hbWUmJihuPW8udHJhbnNmZXJFdmVudE5hbWUobikpO3ZhciBpPWFyZ3VtZW50c1syXSxhPSEhaSYmKCJib29sZWFuIj09dHlwZW9mIGl8fGkuY2FwdHVyZSkscz1hcmd1bWVudHNbMV07aWYoIXMpcmV0dXJuIHcuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCFyfHxyKHcscyxlLGFyZ3VtZW50cykpe3ZhciBsLG09QltuXTttJiYobD1tW2E/YzpkXSk7dmFyIHU9bCYmZVtsXTtpZih1KWZvcih2YXIgZj0wO2Y8dS5sZW5ndGg7ZisrKXt2YXIgZz11W2ZdO2lmKEEoZyxzKSlyZXR1cm4gdS5zcGxpY2UoZiwxKSxnLmlzUmVtb3ZlZD0hMCwwPT09dS5sZW5ndGgmJihnLmFsbFJlbW92ZWQ9ITAsZVtsXT1udWxsLCJzdHJpbmciPT10eXBlb2YgbiYmKGVbcCsiT05fUFJPUEVSVFkiK25dPW51bGwpKSxnLnpvbmUuY2FuY2VsVGFzayhnKSxfP2U6dm9pZCAwfXJldHVybiB3LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LENbbF09ZnVuY3Rpb24oKXt2YXIgZT10aGlzfHx0LG49YXJndW1lbnRzWzBdO28mJm8udHJhbnNmZXJFdmVudE5hbWUmJihuPW8udHJhbnNmZXJFdmVudE5hbWUobikpO2Zvcih2YXIgaT1bXSxhPVkoZSx4P3gobik6bikscj0wO3I8YS5sZW5ndGg7cisrKXt2YXIgcz1hW3JdO2kucHVzaChzLm9yaWdpbmFsRGVsZWdhdGU/cy5vcmlnaW5hbERlbGVnYXRlOnMuY2FsbGJhY2spfXJldHVybiBpfSxDW21dPWZ1bmN0aW9uKCl7dmFyIGU9dGhpc3x8dCxuPWFyZ3VtZW50c1swXTtpZihuKXtvJiZvLnRyYW5zZmVyRXZlbnROYW1lJiYobj1vLnRyYW5zZmVyRXZlbnROYW1lKG4pKTt2YXIgaT1CW25dO2lmKGkpe3ZhciBhPWVbaS5mYWxzZV0scj1lW2kudHJ1ZV07aWYoYSl7dmFyIGw9YS5zbGljZSgpO2ZvcihwPTA7cDxsLmxlbmd0aDtwKyspdGhpc1tzXS5jYWxsKHRoaXMsbiwoYz1sW3BdKS5vcmlnaW5hbERlbGVnYXRlP2Mub3JpZ2luYWxEZWxlZ2F0ZTpjLmNhbGxiYWNrLGMub3B0aW9ucyl9aWYocilmb3IobD1yLnNsaWNlKCkscD0wO3A8bC5sZW5ndGg7cCsrKXt2YXIgYzt0aGlzW3NdLmNhbGwodGhpcyxuLChjPWxbcF0pLm9yaWdpbmFsRGVsZWdhdGU/Yy5vcmlnaW5hbERlbGVnYXRlOmMuY2FsbGJhY2ssYy5vcHRpb25zKX19fWVsc2V7Zm9yKHZhciBkPU9iamVjdC5rZXlzKGUpLHA9MDtwPGQubGVuZ3RoO3ArKyl7dmFyIHU9ai5leGVjKGRbcF0pLGY9dSYmdVsxXTtmJiYicmVtb3ZlTGlzdGVuZXIiIT09ZiYmdGhpc1ttXS5jYWxsKHRoaXMsZil9dGhpc1ttXS5jYWxsKHRoaXMsInJlbW92ZUxpc3RlbmVyIil9aWYoXylyZXR1cm4gdGhpc30sVChDW2ldLFApLFQoQ1tzXSx3KSxTJiZUKENbbV0sUyksayYmVChDW2xdLGspLCEwfWZvcih2YXIgQz1bXSxNPTA7TTxlLmxlbmd0aDtNKyspQ1tNXT1fKGVbTV0sbyk7cmV0dXJuIEN9ZnVuY3Rpb24gWSh0LGUpe2lmKCFlKXt2YXIgbj1bXTtmb3IodmFyIG8gaW4gdCl7dmFyIGk9ai5leGVjKG8pLGE9aSYmaVsxXTtpZihhJiYoIWV8fGE9PT1lKSl7dmFyIHI9dFtvXTtpZihyKWZvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKW4ucHVzaChyW3NdKX19cmV0dXJuIG59dmFyIGw9QltlXTtsfHwoRyhlKSxsPUJbZV0pO3ZhciBjPXRbbC5mYWxzZV0sZD10W2wudHJ1ZV07cmV0dXJuIGM/ZD9jLmNvbmNhdChkKTpjLnNsaWNlKCk6ZD9kLnNsaWNlKCk6W119ZnVuY3Rpb24gcSh0LGUpe3ZhciBuPXQuRXZlbnQ7biYmbi5wcm90b3R5cGUmJmUucGF0Y2hNZXRob2Qobi5wcm90b3R5cGUsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe2VbVV09ITAsdCYmdC5hcHBseShlLG4pfX0pKX0KLyoqCiAgICAgICAgICogQGxpY2Vuc2UKICAgICAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovZnVuY3Rpb24gWih0LGUsbixvLGkpe3ZhciBhPVpvbmUuX19zeW1ib2xfXyhvKTtpZighZVthXSl7dmFyIHI9ZVthXT1lW29dO2Vbb109ZnVuY3Rpb24oYSxzLGwpe3JldHVybiBzJiZzLnByb3RvdHlwZSYmaS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgaT1uKyIuIitvKyI6OiIrZSxhPXMucHJvdG90eXBlO2lmKGEuaGFzT3duUHJvcGVydHkoZSkpe3ZhciByPXQuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsZSk7ciYmci52YWx1ZT8oci52YWx1ZT10LndyYXBXaXRoQ3VycmVudFpvbmUoci52YWx1ZSxpKSx0Ll9yZWRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLGUscikpOmFbZV0mJihhW2VdPXQud3JhcFdpdGhDdXJyZW50Wm9uZShhW2VdLGkpKX1lbHNlIGFbZV0mJihhW2VdPXQud3JhcFdpdGhDdXJyZW50Wm9uZShhW2VdLGkpKX0pKSxyLmNhbGwoZSxhLHMsbCl9LHQuYXR0YWNoT3JpZ2luVG9QYXRjaGVkKGVbb10scil9fQovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgICAgICoKICAgICAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAgICAgKi92YXIgWCxLLEosUSwkLHR0PVsiYWJzb2x1dGVkZXZpY2VvcmllbnRhdGlvbiIsImFmdGVyaW5wdXQiLCJhZnRlcnByaW50IiwiYXBwaW5zdGFsbGVkIiwiYmVmb3JlaW5zdGFsbHByb21wdCIsImJlZm9yZXByaW50IiwiYmVmb3JldW5sb2FkIiwiZGV2aWNlbGlnaHQiLCJkZXZpY2Vtb3Rpb24iLCJkZXZpY2VvcmllbnRhdGlvbiIsImRldmljZW9yaWVudGF0aW9uYWJzb2x1dGUiLCJkZXZpY2Vwcm94aW1pdHkiLCJoYXNoY2hhbmdlIiwibGFuZ3VhZ2VjaGFuZ2UiLCJtZXNzYWdlIiwibW96YmVmb3JlcGFpbnQiLCJvZmZsaW5lIiwib25saW5lIiwicGFpbnQiLCJwYWdlc2hvdyIsInBhZ2VoaWRlIiwicG9wc3RhdGUiLCJyZWplY3Rpb25oYW5kbGVkIiwic3RvcmFnZSIsInVuaGFuZGxlZHJlamVjdGlvbiIsInVubG9hZCIsInVzZXJwcm94aW1pdHkiLCJ2cmRpc3BsYXljb25uZWN0ZWQiLCJ2cmRpc3BsYXlkaXNjb25uZWN0ZWQiLCJ2cmRpc3BsYXlwcmVzZW50Y2hhbmdlIl0sZXQ9WyJlbmNyeXB0ZWQiLCJ3YWl0aW5nZm9ya2V5IiwibXNuZWVka2V5IiwibW96aW50ZXJydXB0YmVnaW4iLCJtb3ppbnRlcnJ1cHRlbmQiXSxudD1bImxvYWQiXSxvdD1bImJsdXIiLCJlcnJvciIsImZvY3VzIiwibG9hZCIsInJlc2l6ZSIsInNjcm9sbCIsIm1lc3NhZ2VlcnJvciJdLGl0PVsiYm91bmNlIiwiZmluaXNoIiwic3RhcnQiXSxhdD1bImxvYWRzdGFydCIsInByb2dyZXNzIiwiYWJvcnQiLCJlcnJvciIsImxvYWQiLCJwcm9ncmVzcyIsInRpbWVvdXQiLCJsb2FkZW5kIiwicmVhZHlzdGF0ZWNoYW5nZSJdLHJ0PVsidXBncmFkZW5lZWRlZCIsImNvbXBsZXRlIiwiYWJvcnQiLCJzdWNjZXNzIiwiZXJyb3IiLCJibG9ja2VkIiwidmVyc2lvbmNoYW5nZSIsImNsb3NlIl0sc3Q9WyJjbG9zZSIsImVycm9yIiwib3BlbiIsIm1lc3NhZ2UiXSxsdD1bImVycm9yIiwibWVzc2FnZSJdLGN0PVsiYWJvcnQiLCJhbmltYXRpb25jYW5jZWwiLCJhbmltYXRpb25lbmQiLCJhbmltYXRpb25pdGVyYXRpb24iLCJhdXhjbGljayIsImJlZm9yZWlucHV0IiwiYmx1ciIsImNhbmNlbCIsImNhbnBsYXkiLCJjYW5wbGF5dGhyb3VnaCIsImNoYW5nZSIsImNvbXBvc2l0aW9uc3RhcnQiLCJjb21wb3NpdGlvbnVwZGF0ZSIsImNvbXBvc2l0aW9uZW5kIiwiY3VlY2hhbmdlIiwiY2xpY2siLCJjbG9zZSIsImNvbnRleHRtZW51IiwiY3VyZWNoYW5nZSIsImRibGNsaWNrIiwiZHJhZyIsImRyYWdlbmQiLCJkcmFnZW50ZXIiLCJkcmFnZXhpdCIsImRyYWdsZWF2ZSIsImRyYWdvdmVyIiwiZHJvcCIsImR1cmF0aW9uY2hhbmdlIiwiZW1wdGllZCIsImVuZGVkIiwiZXJyb3IiLCJmb2N1cyIsImZvY3VzaW4iLCJmb2N1c291dCIsImdvdHBvaW50ZXJjYXB0dXJlIiwiaW5wdXQiLCJpbnZhbGlkIiwia2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJsb2FkIiwibG9hZHN0YXJ0IiwibG9hZGVkZGF0YSIsImxvYWRlZG1ldGFkYXRhIiwibG9zdHBvaW50ZXJjYXB0dXJlIiwibW91c2Vkb3duIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJtb3VzZW1vdmUiLCJtb3VzZW91dCIsIm1vdXNlb3ZlciIsIm1vdXNldXAiLCJtb3VzZXdoZWVsIiwib3JpZW50YXRpb25jaGFuZ2UiLCJwYXVzZSIsInBsYXkiLCJwbGF5aW5nIiwicG9pbnRlcmNhbmNlbCIsInBvaW50ZXJkb3duIiwicG9pbnRlcmVudGVyIiwicG9pbnRlcmxlYXZlIiwicG9pbnRlcmxvY2tjaGFuZ2UiLCJtb3pwb2ludGVybG9ja2NoYW5nZSIsIndlYmtpdHBvaW50ZXJsb2NrZXJjaGFuZ2UiLCJwb2ludGVybG9ja2Vycm9yIiwibW96cG9pbnRlcmxvY2tlcnJvciIsIndlYmtpdHBvaW50ZXJsb2NrZXJyb3IiLCJwb2ludGVybW92ZSIsInBvaW50b3V0IiwicG9pbnRlcm92ZXIiLCJwb2ludGVydXAiLCJwcm9ncmVzcyIsInJhdGVjaGFuZ2UiLCJyZXNldCIsInJlc2l6ZSIsInNjcm9sbCIsInNlZWtlZCIsInNlZWtpbmciLCJzZWxlY3QiLCJzZWxlY3Rpb25jaGFuZ2UiLCJzZWxlY3RzdGFydCIsInNob3ciLCJzb3J0Iiwic3RhbGxlZCIsInN1Ym1pdCIsInN1c3BlbmQiLCJ0aW1ldXBkYXRlIiwidm9sdW1lY2hhbmdlIiwidG91Y2hjYW5jZWwiLCJ0b3VjaG1vdmUiLCJ0b3VjaHN0YXJ0IiwidG91Y2hlbmQiLCJ0cmFuc2l0aW9uY2FuY2VsIiwidHJhbnNpdGlvbmVuZCIsIndhaXRpbmciLCJ3aGVlbCJdLmNvbmNhdChbIndlYmdsY29udGV4dHJlc3RvcmVkIiwid2ViZ2xjb250ZXh0bG9zdCIsIndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IiXSxbImF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZWVycm9yIl0sWyJ0b2dnbGUiXSxbImFmdGVyc2NyaXB0ZXhlY3V0ZSIsImJlZm9yZXNjcmlwdGV4ZWN1dGUiLCJET01Db250ZW50TG9hZGVkIiwiZnJlZXplIiwiZnVsbHNjcmVlbmNoYW5nZSIsIm1vemZ1bGxzY3JlZW5jaGFuZ2UiLCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIiwibXNmdWxsc2NyZWVuY2hhbmdlIiwiZnVsbHNjcmVlbmVycm9yIiwibW96ZnVsbHNjcmVlbmVycm9yIiwid2Via2l0ZnVsbHNjcmVlbmVycm9yIiwibXNmdWxsc2NyZWVuZXJyb3IiLCJyZWFkeXN0YXRlY2hhbmdlIiwidmlzaWJpbGl0eWNoYW5nZSIsInJlc3VtZSJdLHR0LFsiYmVmb3JlY29weSIsImJlZm9yZWN1dCIsImJlZm9yZXBhc3RlIiwiY29weSIsImN1dCIsInBhc3RlIiwiZHJhZ3N0YXJ0IiwibG9hZGVuZCIsImFuaW1hdGlvbnN0YXJ0Iiwic2VhcmNoIiwidHJhbnNpdGlvbnJ1biIsInRyYW5zaXRpb25zdGFydCIsIndlYmtpdGFuaW1hdGlvbmVuZCIsIndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbiIsIndlYmtpdGFuaW1hdGlvbnN0YXJ0Iiwid2Via2l0dHJhbnNpdGlvbmVuZCJdLFsiYWN0aXZhdGUiLCJhZnRlcnVwZGF0ZSIsImFyaWFyZXF1ZXN0IiwiYmVmb3JlYWN0aXZhdGUiLCJiZWZvcmVkZWFjdGl2YXRlIiwiYmVmb3JlZWRpdGZvY3VzIiwiYmVmb3JldXBkYXRlIiwiY2VsbGNoYW5nZSIsImNvbnRyb2xzZWxlY3QiLCJkYXRhYXZhaWxhYmxlIiwiZGF0YXNldGNoYW5nZWQiLCJkYXRhc2V0Y29tcGxldGUiLCJlcnJvcnVwZGF0ZSIsImZpbHRlcmNoYW5nZSIsImxheW91dGNvbXBsZXRlIiwibG9zZWNhcHR1cmUiLCJtb3ZlIiwibW92ZWVuZCIsIm1vdmVzdGFydCIsInByb3BlcnR5Y2hhbmdlIiwicmVzaXplZW5kIiwicmVzaXplc3RhcnQiLCJyb3dlbnRlciIsInJvd2V4aXQiLCJyb3dzZGVsZXRlIiwicm93c2luc2VydGVkIiwiY29tbWFuZCIsImNvbXBhc3NuZWVkc2NhbGlicmF0aW9uIiwiZGVhY3RpdmF0ZSIsImhlbHAiLCJtc2NvbnRlbnR6b29tIiwibXNtYW5pcHVsYXRpb25zdGF0ZWNoYW5nZWQiLCJtc2dlc3R1cmVjaGFuZ2UiLCJtc2dlc3R1cmVkb3VibGV0YXAiLCJtc2dlc3R1cmVlbmQiLCJtc2dlc3R1cmVob2xkIiwibXNnZXN0dXJlc3RhcnQiLCJtc2dlc3R1cmV0YXAiLCJtc2dvdHBvaW50ZXJjYXB0dXJlIiwibXNpbmVydGlhc3RhcnQiLCJtc2xvc3Rwb2ludGVyY2FwdHVyZSIsIm1zcG9pbnRlcmNhbmNlbCIsIm1zcG9pbnRlcmRvd24iLCJtc3BvaW50ZXJlbnRlciIsIm1zcG9pbnRlcmhvdmVyIiwibXNwb2ludGVybGVhdmUiLCJtc3BvaW50ZXJtb3ZlIiwibXNwb2ludGVyb3V0IiwibXNwb2ludGVyb3ZlciIsIm1zcG9pbnRlcnVwIiwicG9pbnRlcm91dCIsIm1zc2l0ZW1vZGVqdW1wbGlzdGl0ZW1yZW1vdmVkIiwibXN0aHVtYm5haWxjbGljayIsInN0b3AiLCJzdG9yYWdlY29tbWl0Il0pO2Z1bmN0aW9uIGR0KHQsZSxuKXtpZighbnx8MD09PW4ubGVuZ3RoKXJldHVybiBlO3ZhciBvPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS50YXJnZXQ9PT10fSkpO2lmKCFvfHwwPT09by5sZW5ndGgpcmV0dXJuIGU7dmFyIGk9b1swXS5pZ25vcmVQcm9wZXJ0aWVzO3JldHVybiBlLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuLTE9PT1pLmluZGV4T2YodCl9KSl9ZnVuY3Rpb24gcHQodCxlLG4sbyl7dCYmUyh0LGR0KHQsZSxuKSxvKX1mdW5jdGlvbiBtdCh0LGUpe2lmKCghdnx8TykmJiFab25lW3Quc3ltYm9sKCJwYXRjaEV2ZW50cyIpXSl7dmFyIG89InVuZGVmaW5lZCIhPXR5cGVvZiBXZWJTb2NrZXQsaT1lLl9fWm9uZV9pZ25vcmVfb25fcHJvcGVydGllcztpZih4KXt2YXIgYT13aW5kb3cscj0oZnVuY3Rpb24gcygpe3RyeXt2YXIgdD1oLm5hdmlnYXRvci51c2VyQWdlbnQ7aWYoLTEhPT10LmluZGV4T2YoIk1TSUUgIil8fC0xIT09dC5pbmRleE9mKCJUcmlkZW50LyIpKXJldHVybiEwfWNhdGNoKHQpe31yZXR1cm4hMX0pKCk/W3t0YXJnZXQ6YSxpZ25vcmVQcm9wZXJ0aWVzOlsiZXJyb3IiXX1dOltdO3B0KGEsY3QuY29uY2F0KFsibWVzc2FnZWVycm9yIl0pLGk/aS5jb25jYXQocik6aSxuKGEpKSxwdChEb2N1bWVudC5wcm90b3R5cGUsY3QsaSksdm9pZCAwIT09YS5TVkdFbGVtZW50JiZwdChhLlNWR0VsZW1lbnQucHJvdG90eXBlLGN0LGkpLHB0KEVsZW1lbnQucHJvdG90eXBlLGN0LGkpLHB0KEhUTUxFbGVtZW50LnByb3RvdHlwZSxjdCxpKSxwdChIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSxldCxpKSxwdChIVE1MRnJhbWVTZXRFbGVtZW50LnByb3RvdHlwZSx0dC5jb25jYXQob3QpLGkpLHB0KEhUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUsdHQuY29uY2F0KG90KSxpKSxwdChIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZSxudCxpKSxwdChIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsbnQsaSk7dmFyIGw9YS5IVE1MTWFycXVlZUVsZW1lbnQ7bCYmcHQobC5wcm90b3R5cGUsaXQsaSk7dmFyIGM9YS5Xb3JrZXI7YyYmcHQoYy5wcm90b3R5cGUsbHQsaSl9dmFyIGQ9ZS5YTUxIdHRwUmVxdWVzdDtkJiZwdChkLnByb3RvdHlwZSxhdCxpKTt2YXIgcD1lLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7cCYmcHQocCYmcC5wcm90b3R5cGUsYXQsaSksInVuZGVmaW5lZCIhPXR5cGVvZiBJREJJbmRleCYmKHB0KElEQkluZGV4LnByb3RvdHlwZSxydCxpKSxwdChJREJSZXF1ZXN0LnByb3RvdHlwZSxydCxpKSxwdChJREJPcGVuREJSZXF1ZXN0LnByb3RvdHlwZSxydCxpKSxwdChJREJEYXRhYmFzZS5wcm90b3R5cGUscnQsaSkscHQoSURCVHJhbnNhY3Rpb24ucHJvdG90eXBlLHJ0LGkpLHB0KElEQkN1cnNvci5wcm90b3R5cGUscnQsaSkpLG8mJnB0KFdlYlNvY2tldC5wcm90b3R5cGUsc3QsaSl9fQovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgICAgICoKICAgICAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAgICAgKi9mdW5jdGlvbiB1dCgpe1g9Wm9uZS5fX3N5bWJvbF9fLEs9T2JqZWN0W1goImRlZmluZVByb3BlcnR5IildPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxKPU9iamVjdFtYKCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiKV09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixRPU9iamVjdC5jcmVhdGUsJD1YKCJ1bmNvbmZpZ3VyYWJsZXMiKSxPYmplY3QuZGVmaW5lUHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe2lmKGd0KHQsZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFzc2lnbiB0byByZWFkIG9ubHkgcHJvcGVydHkgJyIrZSsiJyBvZiAiK3QpO3ZhciBvPW4uY29uZmlndXJhYmxlO3JldHVybiJwcm90b3R5cGUiIT09ZSYmKG49aHQodCxlLG4pKSxidCh0LGUsbixvKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixlW25dKX0pKSx0fSxPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIm9iamVjdCIhPXR5cGVvZiBlfHxPYmplY3QuaXNGcm96ZW4oZSl8fE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09aHQodCxuLGVbbl0pfSkpLFEodCxlKX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcj1mdW5jdGlvbih0LGUpe3ZhciBuPUoodCxlKTtyZXR1cm4gbiYmZ3QodCxlKSYmKG4uY29uZmlndXJhYmxlPSExKSxufX1mdW5jdGlvbiBmdCh0LGUsbil7dmFyIG89bi5jb25maWd1cmFibGU7cmV0dXJuIGJ0KHQsZSxuPWh0KHQsZSxuKSxvKX1mdW5jdGlvbiBndCh0LGUpe3JldHVybiB0JiZ0WyRdJiZ0WyRdW2VdfWZ1bmN0aW9uIGh0KHQsZSxuKXtyZXR1cm4gT2JqZWN0LmlzRnJvemVuKG4pfHwobi5jb25maWd1cmFibGU9ITApLG4uY29uZmlndXJhYmxlfHwodFskXXx8T2JqZWN0LmlzRnJvemVuKHQpfHxLKHQsJCx7d3JpdGFibGU6ITAsdmFsdWU6e319KSx0WyRdJiYodFskXVtlXT0hMCkpLG59ZnVuY3Rpb24gYnQodCxlLG4sbyl7dHJ5e3JldHVybiBLKHQsZSxuKX1jYXRjaChyKXtpZighbi5jb25maWd1cmFibGUpdGhyb3cgcjt2b2lkIDA9PT1vP2RlbGV0ZSBuLmNvbmZpZ3VyYWJsZTpuLmNvbmZpZ3VyYWJsZT1vO3RyeXtyZXR1cm4gSyh0LGUsbil9Y2F0Y2gobyl7dmFyIGk9ITE7aWYoImNyZWF0ZWRDYWxsYmFjayIhPT1lJiYiYXR0YWNoZWRDYWxsYmFjayIhPT1lJiYiZGV0YWNoZWRDYWxsYmFjayIhPT1lJiYiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIiE9PWV8fChpPSEwKSwhaSl0aHJvdyBvO3ZhciBhPW51bGw7dHJ5e2E9SlNPTi5zdHJpbmdpZnkobil9Y2F0Y2godCl7YT1uLnRvU3RyaW5nKCl9Y29uc29sZS5sb2coIkF0dGVtcHRpbmcgdG8gY29uZmlndXJlICciK2UrIicgd2l0aCBkZXNjcmlwdG9yICciK2ErIicgb24gb2JqZWN0ICciK3QrIicgYW5kIGdvdCBlcnJvciwgZ2l2aW5nIHVwOiAiK28pfX19Ci8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAgICAgKgogICAgICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICAgICAqL2Z1bmN0aW9uIHl0KHQsZSl7dmFyIG49ZS5nZXRHbG9iYWxPYmplY3RzKCksbz1uLmV2ZW50TmFtZXMsaT1uLmdsb2JhbFNvdXJjZXMsYT1uLnpvbmVTeW1ib2xFdmVudE5hbWVzLHI9bi5UUlVFX1NUUixzPW4uRkFMU0VfU1RSLGw9bi5aT05FX1NZTUJPTF9QUkVGSVgsYz0iQXBwbGljYXRpb25DYWNoZSxFdmVudFNvdXJjZSxGaWxlUmVhZGVyLElucHV0TWV0aG9kQ29udGV4dCxNZWRpYUNvbnRyb2xsZXIsTWVzc2FnZVBvcnQsTm9kZSxQZXJmb3JtYW5jZSxTVkdFbGVtZW50SW5zdGFuY2UsU2hhcmVkV29ya2VyLFRleHRUcmFjayxUZXh0VHJhY2tDdWUsVGV4dFRyYWNrTGlzdCxXZWJLaXROYW1lZEZsb3csV2luZG93LFdvcmtlcixXb3JrZXJHbG9iYWxTY29wZSxYTUxIdHRwUmVxdWVzdCxYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0LFhNTEh0dHBSZXF1ZXN0VXBsb2FkLElEQlJlcXVlc3QsSURCT3BlbkRCUmVxdWVzdCxJREJEYXRhYmFzZSxJREJUcmFuc2FjdGlvbixJREJDdXJzb3IsREJJbmRleCxXZWJTb2NrZXQiLnNwbGl0KCIsIiksZD1bXSxwPXQud3RmLG09IkFuY2hvcixBcmVhLEF1ZGlvLEJSLEJhc2UsQmFzZUZvbnQsQm9keSxCdXR0b24sQ2FudmFzLENvbnRlbnQsRExpc3QsRGlyZWN0b3J5LERpdixFbWJlZCxGaWVsZFNldCxGb250LEZvcm0sRnJhbWUsRnJhbWVTZXQsSFIsSGVhZCxIZWFkaW5nLEh0bWwsSUZyYW1lLEltYWdlLElucHV0LEtleWdlbixMSSxMYWJlbCxMZWdlbmQsTGluayxNYXAsTWFycXVlZSxNZWRpYSxNZW51LE1ldGEsTWV0ZXIsTW9kLE9MaXN0LE9iamVjdCxPcHRHcm91cCxPcHRpb24sT3V0cHV0LFBhcmFncmFwaCxQcmUsUHJvZ3Jlc3MsUXVvdGUsU2NyaXB0LFNlbGVjdCxTb3VyY2UsU3BhbixTdHlsZSxUYWJsZUNhcHRpb24sVGFibGVDZWxsLFRhYmxlQ29sLFRhYmxlLFRhYmxlUm93LFRhYmxlU2VjdGlvbixUZXh0QXJlYSxUaXRsZSxUcmFjayxVTGlzdCxVbmtub3duLFZpZGVvIi5zcGxpdCgiLCIpO3A/ZD1tLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIkhUTUwiK3QrIkVsZW1lbnQifSkpLmNvbmNhdChjKTp0LkV2ZW50VGFyZ2V0P2QucHVzaCgiRXZlbnRUYXJnZXQiKTpkPWM7Zm9yKHZhciB1PXQuX19ab25lX2Rpc2FibGVfSUVfY2hlY2t8fCExLGY9dC5fX1pvbmVfZW5hYmxlX2Nyb3NzX2NvbnRleHRfY2hlY2t8fCExLGc9ZS5pc0lFT3JFZGdlKCksaD0iW29iamVjdCBGdW5jdGlvbldyYXBwZXJdIixiPSJmdW5jdGlvbiBfX0JST1dTRVJUT09MU19DT05TT0xFX1NBRkVGVU5DKCkgeyBbbmF0aXZlIGNvZGVdIH0iLHk9e01TUG9pbnRlckNhbmNlbDoicG9pbnRlcmNhbmNlbCIsTVNQb2ludGVyRG93bjoicG9pbnRlcmRvd24iLE1TUG9pbnRlckVudGVyOiJwb2ludGVyZW50ZXIiLE1TUG9pbnRlckhvdmVyOiJwb2ludGVyaG92ZXIiLE1TUG9pbnRlckxlYXZlOiJwb2ludGVybGVhdmUiLE1TUG9pbnRlck1vdmU6InBvaW50ZXJtb3ZlIixNU1BvaW50ZXJPdXQ6InBvaW50ZXJvdXQiLE1TUG9pbnRlck92ZXI6InBvaW50ZXJvdmVyIixNU1BvaW50ZXJVcDoicG9pbnRlcnVwIn0sXz0wO188by5sZW5ndGg7XysrKXt2YXIgQz1sKygoUD1vW19dKStzKSxNPWwrKFArcik7YVtQXT17fSxhW1BdW3NdPUMsYVtQXVtyXT1NfWZvcihfPTA7XzxtLmxlbmd0aDtfKyspZm9yKHZhciB2PW1bX10seD1pW3ZdPXt9LE89MDtPPG8ubGVuZ3RoO08rKyl7dmFyIFA7eFtQPW9bT11dPXYrIi5hZGRFdmVudExpc3RlbmVyOiIrUH12YXIgdz1bXTtmb3IoXz0wO188ZC5sZW5ndGg7XysrKXt2YXIgaz10W2RbX11dO3cucHVzaChrJiZrLnByb3RvdHlwZSl9cmV0dXJuIGUucGF0Y2hFdmVudFRhcmdldCh0LHcse3ZoOmZ1bmN0aW9uKHQsZSxuLG8pe2lmKCF1JiZnKXtpZihmKXRyeXt2YXIgaTtpZigoaT1lLnRvU3RyaW5nKCkpPT09aHx8aT09YilyZXR1cm4gdC5hcHBseShuLG8pLCExfWNhdGNoKGUpe3JldHVybiB0LmFwcGx5KG4sbyksITF9ZWxzZSBpZigoaT1lLnRvU3RyaW5nKCkpPT09aHx8aT09YilyZXR1cm4gdC5hcHBseShuLG8pLCExfWVsc2UgaWYoZil0cnl7ZS50b1N0cmluZygpfWNhdGNoKGUpe3JldHVybiB0LmFwcGx5KG4sbyksITF9cmV0dXJuITB9LHRyYW5zZmVyRXZlbnROYW1lOmZ1bmN0aW9uKHQpe3JldHVybiB5W3RdfHx0fX0pLFpvbmVbZS5zeW1ib2woInBhdGNoRXZlbnRUYXJnZXQiKV09ISF0LkV2ZW50VGFyZ2V0LCEwfQovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgICAgICoKICAgICAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAgICAgKi8KLyoqCiAgICAgICAgICogQGxpY2Vuc2UKICAgICAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovCmZ1bmN0aW9uIF90KHQsZSl7dmFyIG49dC5nZXRHbG9iYWxPYmplY3RzKCk7aWYoKCFuLmlzTm9kZXx8bi5pc01peCkmJiEoZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXQuZ2V0R2xvYmFsT2JqZWN0cygpO2lmKChuLmlzQnJvd3Nlcnx8bi5pc01peCkmJiF0Lk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBFbGVtZW50KXt2YXIgbz10Lk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIpO2lmKG8mJiFvLmNvbmZpZ3VyYWJsZSlyZXR1cm4hMTtpZihvKXt0Lk9iamVjdERlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSk7dmFyIGk9ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5vbmNsaWNrO3JldHVybiB0Lk9iamVjdERlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIixvKSxpfX12YXIgYT1lLlhNTEh0dHBSZXF1ZXN0O2lmKCFhKXJldHVybiExO3ZhciByPSJvbnJlYWR5c3RhdGVjaGFuZ2UiLHM9YS5wcm90b3R5cGUsbD10Lk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihzLHIpO2lmKGwpcmV0dXJuIHQuT2JqZWN0RGVmaW5lUHJvcGVydHkocyxyLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxpPSEhKGQ9bmV3IGEpLm9ucmVhZHlzdGF0ZWNoYW5nZSx0Lk9iamVjdERlZmluZVByb3BlcnR5KHMscixsfHx7fSksaTt2YXIgYz10LnN5bWJvbCgiZmFrZSIpO3QuT2JqZWN0RGVmaW5lUHJvcGVydHkocyxyLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tjXX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXNbY109dH19KTt2YXIgZCxwPWZ1bmN0aW9uKCl7fTtyZXR1cm4oZD1uZXcgYSkub25yZWFkeXN0YXRlY2hhbmdlPXAsaT1kW2NdPT09cCxkLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGl9KSh0LGUpKXt2YXIgaT0idW5kZWZpbmVkIiE9dHlwZW9mIFdlYlNvY2tldDsoZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9dC5nZXRHbG9iYWxPYmplY3RzKCkuZXZlbnROYW1lcyxuPXQuc3ltYm9sKCJ1bmJvdW5kIiksbz1mdW5jdGlvbihvKXt2YXIgaT1lW29dLGE9Im9uIitpO3NlbGYuYWRkRXZlbnRMaXN0ZW5lcihpLChmdW5jdGlvbihlKXt2YXIgbyxpLHI9ZS50YXJnZXQ7Zm9yKGk9cj9yLmNvbnN0cnVjdG9yLm5hbWUrIi4iK2E6InVua25vd24uIithO3I7KXJbYV0mJiFyW2FdW25dJiYoKG89dC53cmFwV2l0aEN1cnJlbnRab25lKHJbYV0saSkpW25dPXJbYV0sclthXT1vKSxyPXIucGFyZW50RWxlbWVudH0pLCEwKX0saT0wO2k8ZS5sZW5ndGg7aSsrKW8oaSl9Ci8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAgICAgKgogICAgICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICAgICAqLykodCksdC5wYXRjaENsYXNzKCJYTUxIdHRwUmVxdWVzdCIpLGkmJihmdW5jdGlvbiByKHQsZSl7dmFyIG49dC5nZXRHbG9iYWxPYmplY3RzKCksbz1uLkFERF9FVkVOVF9MSVNURU5FUl9TVFIsaT1uLlJFTU9WRV9FVkVOVF9MSVNURU5FUl9TVFIsYT1lLldlYlNvY2tldDtlLkV2ZW50VGFyZ2V0fHx0LnBhdGNoRXZlbnRUYXJnZXQoZSxbYS5wcm90b3R5cGVdKSxlLldlYlNvY2tldD1mdW5jdGlvbihlLG4pe3ZhciByLHMsbD1hcmd1bWVudHMubGVuZ3RoPjE/bmV3IGEoZSxuKTpuZXcgYShlKSxjPXQuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGwsIm9ubWVzc2FnZSIpO3JldHVybiBjJiYhMT09PWMuY29uZmlndXJhYmxlPyhyPXQuT2JqZWN0Q3JlYXRlKGwpLHM9bCxbbyxpLCJzZW5kIiwiY2xvc2UiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtyW2VdPWZ1bmN0aW9uKCl7dmFyIG49dC5BcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzKTtpZihlPT09b3x8ZT09PWkpe3ZhciBhPW4ubGVuZ3RoPjA/blswXTp2b2lkIDA7aWYoYSl7dmFyIHM9Wm9uZS5fX3N5bWJvbF9fKCJPTl9QUk9QRVJUWSIrYSk7bFtzXT1yW3NdfX1yZXR1cm4gbFtlXS5hcHBseShsLG4pfX0pKSk6cj1sLHQucGF0Y2hPblByb3BlcnRpZXMocixbImNsb3NlIiwiZXJyb3IiLCJtZXNzYWdlIiwib3BlbiJdLHMpLHJ9O3ZhciByPWUuV2ViU29ja2V0O2Zvcih2YXIgcyBpbiBhKXJbc109YVtzXX0pKHQsZSksWm9uZVt0LnN5bWJvbCgicGF0Y2hFdmVudHMiKV09ITB9fVpvbmUuX19sb2FkX3BhdGNoKCJ1dGlsIiwoZnVuY3Rpb24obixzLGwpe2wucGF0Y2hPblByb3BlcnRpZXM9UyxsLnBhdGNoTWV0aG9kPVIsbC5iaW5kQXJndW1lbnRzPV8sbC5wYXRjaE1hY3JvVGFzaz1BO3ZhciB1PXMuX19zeW1ib2xfXygiQkxBQ0tfTElTVEVEX0VWRU5UUyIpLGY9cy5fX3N5bWJvbF9fKCJVTlBBVENIRURfRVZFTlRTIik7bltmXSYmKG5bdV09bltmXSksblt1XSYmKHNbdV09c1tmXT1uW3VdKSxsLnBhdGNoRXZlbnRQcm90b3R5cGU9cSxsLnBhdGNoRXZlbnRUYXJnZXQ9VyxsLmlzSUVPckVkZ2U9SSxsLk9iamVjdERlZmluZVByb3BlcnR5PWUsbC5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I9dCxsLk9iamVjdENyZWF0ZT1vLGwuQXJyYXlTbGljZT1pLGwucGF0Y2hDbGFzcz1FLGwud3JhcFdpdGhDdXJyZW50Wm9uZT1tLGwuZmlsdGVyUHJvcGVydGllcz1kdCxsLmF0dGFjaE9yaWdpblRvUGF0Y2hlZD1ULGwuX3JlZGVmaW5lUHJvcGVydHk9T2JqZWN0LmRlZmluZVByb3BlcnR5LGwucGF0Y2hDYWxsYmFja3M9WixsLmdldEdsb2JhbE9iamVjdHM9ZnVuY3Rpb24oKXtyZXR1cm57Z2xvYmFsU291cmNlczpWLHpvbmVTeW1ib2xFdmVudE5hbWVzOkIsZXZlbnROYW1lczpjdCxpc0Jyb3dzZXI6eCxpc01peDpPLGlzTm9kZTp2LFRSVUVfU1RSOmMsRkFMU0VfU1RSOmQsWk9ORV9TWU1CT0xfUFJFRklYOnAsQUREX0VWRU5UX0xJU1RFTkVSX1NUUjphLFJFTU9WRV9FVkVOVF9MSVNURU5FUl9TVFI6cn19fSkpLAovKioKICAgICAgICAgKiBAbGljZW5zZQogICAgICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgICAgICoKICAgICAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAgICAgKi8KKGZ1bmN0aW9uKHQpe3ZhciBlPXQuX19ab25lX3N5bWJvbF9wcmVmaXh8fCJfX3pvbmVfc3ltYm9sX18iO3RbKGZ1bmN0aW9uIG4odCl7cmV0dXJuIGUrdH0pKCJsZWdhY3lQYXRjaCIpXT1mdW5jdGlvbigpe3ZhciBlPXQuWm9uZTtlLl9fbG9hZF9wYXRjaCgiZGVmaW5lUHJvcGVydHkiLChmdW5jdGlvbih0LGUsbil7bi5fcmVkZWZpbmVQcm9wZXJ0eT1mdCx1dCgpfSkpLGUuX19sb2FkX3BhdGNoKCJyZWdpc3RlckVsZW1lbnQiLChmdW5jdGlvbih0LGUsbil7IShmdW5jdGlvbiBvKHQsZSl7dmFyIG49ZS5nZXRHbG9iYWxPYmplY3RzKCk7KG4uaXNCcm93c2VyfHxuLmlzTWl4KSYmInJlZ2lzdGVyRWxlbWVudCJpbiB0LmRvY3VtZW50JiZlLnBhdGNoQ2FsbGJhY2tzKGUsZG9jdW1lbnQsIkRvY3VtZW50IiwicmVnaXN0ZXJFbGVtZW50IixbImNyZWF0ZWRDYWxsYmFjayIsImF0dGFjaGVkQ2FsbGJhY2siLCJkZXRhY2hlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl0pfSkodCxuKX0pKSxlLl9fbG9hZF9wYXRjaCgiRXZlbnRUYXJnZXRMZWdhY3kiLChmdW5jdGlvbih0LGUsbil7eXQodCxuKSxfdChuLHQpfSkpfX0pKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAhPT1Rdj9RdjoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fSk7Ci8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAgICAgKgogICAgICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICAgICAqLwp2YXIgQ3Q9Zigiem9uZVRhc2siKTtmdW5jdGlvbiBNdCh0LGUsbixvKXt2YXIgaT1udWxsLGE9bnVsbDtuKz1vO3ZhciByPXt9O2Z1bmN0aW9uIHMoZSl7dmFyIG49ZS5kYXRhO3JldHVybiBuLmFyZ3NbMF09ZnVuY3Rpb24oKXtyZXR1cm4gZS5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxuLmhhbmRsZUlkPWkuYXBwbHkodCxuLmFyZ3MpLGV9ZnVuY3Rpb24gbChlKXtyZXR1cm4gYS5jYWxsKHQsZS5kYXRhLmhhbmRsZUlkKX1pPVIodCxlKz1vLChmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYVswXSl7dmFyIGM9e2lzUGVyaW9kaWM6IkludGVydmFsIj09PW8sZGVsYXk6IlRpbWVvdXQiPT09b3x8IkludGVydmFsIj09PW8/YVsxXXx8MDp2b2lkIDAsYXJnczphfSxkPWFbMF07YVswXT1mdW5jdGlvbiB0KCl7dHJ5e3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e2MuaXNQZXJpb2RpY3x8KCJudW1iZXIiPT10eXBlb2YgYy5oYW5kbGVJZD9kZWxldGUgcltjLmhhbmRsZUlkXTpjLmhhbmRsZUlkJiYoYy5oYW5kbGVJZFtDdF09bnVsbCkpfX07dmFyIHA9dShlLGFbMF0sYyxzLGwpO2lmKCFwKXJldHVybiBwO3ZhciBtPXAuZGF0YS5oYW5kbGVJZDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIG0/clttXT1wOm0mJihtW0N0XT1wKSxtJiZtLnJlZiYmbS51bnJlZiYmImZ1bmN0aW9uIj09dHlwZW9mIG0ucmVmJiYiZnVuY3Rpb24iPT10eXBlb2YgbS51bnJlZiYmKHAucmVmPW0ucmVmLmJpbmQobSkscC51bnJlZj1tLnVucmVmLmJpbmQobSkpLCJudW1iZXIiPT10eXBlb2YgbXx8bT9tOnB9cmV0dXJuIG4uYXBwbHkodCxhKX19KSksYT1SKHQsbiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG4sbyl7dmFyIGksYT1vWzBdOyJudW1iZXIiPT10eXBlb2YgYT9pPXJbYV06KGk9YSYmYVtDdF0pfHwoaT1hKSxpJiYic3RyaW5nIj09dHlwZW9mIGkudHlwZT8ibm90U2NoZWR1bGVkIiE9PWkuc3RhdGUmJihpLmNhbmNlbEZuJiZpLmRhdGEuaXNQZXJpb2RpY3x8MD09PWkucnVuQ291bnQpJiYoIm51bWJlciI9PXR5cGVvZiBhP2RlbGV0ZSByW2FdOmEmJihhW0N0XT1udWxsKSxpLnpvbmUuY2FuY2VsVGFzayhpKSk6ZS5hcHBseSh0LG8pfX0pKX0KLyoqCiAgICAgICAgICogQGxpY2Vuc2UKICAgICAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovCi8qKgogICAgICAgICAqIEBsaWNlbnNlCiAgICAgICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAgICAgKgogICAgICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICAgICAqLwpmdW5jdGlvbiB2dCh0LGUpe2lmKCFab25lW2Uuc3ltYm9sKCJwYXRjaEV2ZW50VGFyZ2V0IildKXtmb3IodmFyIG49ZS5nZXRHbG9iYWxPYmplY3RzKCksbz1uLmV2ZW50TmFtZXMsaT1uLnpvbmVTeW1ib2xFdmVudE5hbWVzLGE9bi5UUlVFX1NUUixyPW4uRkFMU0VfU1RSLHM9bi5aT05FX1NZTUJPTF9QUkVGSVgsbD0wO2w8by5sZW5ndGg7bCsrKXt2YXIgYz1vW2xdLGQ9cysoYytyKSxwPXMrKGMrYSk7aVtjXT17fSxpW2NdW3JdPWQsaVtjXVthXT1wfXZhciBtPXQuRXZlbnRUYXJnZXQ7aWYobSYmbS5wcm90b3R5cGUpcmV0dXJuIGUucGF0Y2hFdmVudFRhcmdldCh0LFttJiZtLnByb3RvdHlwZV0pLCEwfX0KLyoqCiAgICAgICAgICogQGxpY2Vuc2UKICAgICAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICAgICAqCiAgICAgICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgICAgICovClpvbmUuX19sb2FkX3BhdGNoKCJsZWdhY3kiLChmdW5jdGlvbih0KXt2YXIgZT10W1pvbmUuX19zeW1ib2xfXygibGVnYWN5UGF0Y2giKV07ZSYmZSgpfSkpLFpvbmUuX19sb2FkX3BhdGNoKCJxdWV1ZU1pY3JvdGFzayIsKGZ1bmN0aW9uKHQsZSxuKXtuLnBhdGNoTWV0aG9kKHQsInF1ZXVlTWljcm90YXNrIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZS5jdXJyZW50LnNjaGVkdWxlTWljcm9UYXNrKCJxdWV1ZU1pY3JvdGFzayIsblswXSl9fSkpfSkpLFpvbmUuX19sb2FkX3BhdGNoKCJ0aW1lcnMiLChmdW5jdGlvbih0KXt2YXIgZT0ic2V0IixuPSJjbGVhciI7TXQodCxlLG4sIlRpbWVvdXQiKSxNdCh0LGUsbiwiSW50ZXJ2YWwiKSxNdCh0LGUsbiwiSW1tZWRpYXRlIil9KSksWm9uZS5fX2xvYWRfcGF0Y2goInJlcXVlc3RBbmltYXRpb25GcmFtZSIsKGZ1bmN0aW9uKHQpe010KHQsInJlcXVlc3QiLCJjYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLE10KHQsIm1velJlcXVlc3QiLCJtb3pDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLE10KHQsIndlYmtpdFJlcXVlc3QiLCJ3ZWJraXRDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpfSkpLFpvbmUuX19sb2FkX3BhdGNoKCJibG9ja2luZyIsKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPVsiYWxlcnQiLCJwcm9tcHQiLCJjb25maXJtIl0sbz0wO288bi5sZW5ndGg7bysrKVIodCxuW29dLChmdW5jdGlvbihuLG8saSl7cmV0dXJuIGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGUuY3VycmVudC5ydW4obix0LGEsaSl9fSkpfSkpLFpvbmUuX19sb2FkX3BhdGNoKCJFdmVudFRhcmdldCIsKGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24gbyh0LGUpe2UucGF0Y2hFdmVudFByb3RvdHlwZSh0LGUpfSkodCxuKSx2dCh0LG4pO3ZhciBpPXQuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtpJiZpLnByb3RvdHlwZSYmbi5wYXRjaEV2ZW50VGFyZ2V0KHQsW2kucHJvdG90eXBlXSl9KSksWm9uZS5fX2xvYWRfcGF0Y2goIk11dGF0aW9uT2JzZXJ2ZXIiLChmdW5jdGlvbih0LGUsbil7RSgiTXV0YXRpb25PYnNlcnZlciIpLEUoIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiKX0pKSxab25lLl9fbG9hZF9wYXRjaCgiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLChmdW5jdGlvbih0LGUsbil7RSgiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiKX0pKSxab25lLl9fbG9hZF9wYXRjaCgiRmlsZVJlYWRlciIsKGZ1bmN0aW9uKHQsZSxuKXtFKCJGaWxlUmVhZGVyIil9KSksWm9uZS5fX2xvYWRfcGF0Y2goIm9uX3Byb3BlcnR5IiwoZnVuY3Rpb24odCxlLG4pe210KG4sdCl9KSksWm9uZS5fX2xvYWRfcGF0Y2goImN1c3RvbUVsZW1lbnRzIiwoZnVuY3Rpb24odCxlLG4peyEoZnVuY3Rpb24gbyh0LGUpe3ZhciBuPWUuZ2V0R2xvYmFsT2JqZWN0cygpOyhuLmlzQnJvd3Nlcnx8bi5pc01peCkmJnQuY3VzdG9tRWxlbWVudHMmJiJjdXN0b21FbGVtZW50cyJpbiB0JiZlLnBhdGNoQ2FsbGJhY2tzKGUsdC5jdXN0b21FbGVtZW50cywiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiLFsiY29ubmVjdGVkQ2FsbGJhY2siLCJkaXNjb25uZWN0ZWRDYWxsYmFjayIsImFkb3B0ZWRDYWxsYmFjayIsImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayJdKX0pKHQsbil9KSksWm9uZS5fX2xvYWRfcGF0Y2goIlhIUiIsKGZ1bmN0aW9uKHQsZSl7IShmdW5jdGlvbiBuKHQpe3ZhciBuPXQuWE1MSHR0cFJlcXVlc3Q7aWYobil7dmFyIHA9bi5wcm90b3R5cGUsbT1wW3NdLGc9cFtsXTtpZighbSl7dmFyIGg9dC5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O2lmKGgpe3ZhciBiPWgucHJvdG90eXBlO209YltzXSxnPWJbbF19fXZhciB5PSJyZWFkeXN0YXRlY2hhbmdlIixfPSJzY2hlZHVsZWQiLEM9UihwLCJvcGVuIiwoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtpXT0wPT1lWzJdLHRbY109ZVsxXSxDLmFwcGx5KHQsZSl9fSkpLE09ZigiZmV0Y2hUYXNrQWJvcnRpbmciKSx2PWYoImZldGNoVGFza1NjaGVkdWxpbmciKSx4PVIocCwic2VuZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7aWYoITA9PT1lLmN1cnJlbnRbdl0pcmV0dXJuIHguYXBwbHkodCxuKTtpZih0W2ldKXJldHVybiB4LmFwcGx5KHQsbik7dmFyIG89e3RhcmdldDp0LHVybDp0W2NdLGlzUGVyaW9kaWM6ITEsYXJnczpuLGFib3J0ZWQ6ITF9LGE9dSgiWE1MSHR0cFJlcXVlc3Quc2VuZCIsdyxvLFAsayk7dCYmITA9PT10W2RdJiYhby5hYm9ydGVkJiZhLnN0YXRlPT09XyYmYS5pbnZva2UoKX19KSksTz1SKHAsImFib3J0IiwoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgaT0oZnVuY3Rpb24gYSh0KXtyZXR1cm4gdFtvXX0pKHQpO2lmKGkmJiJzdHJpbmciPT10eXBlb2YgaS50eXBlKXtpZihudWxsPT1pLmNhbmNlbEZufHxpLmRhdGEmJmkuZGF0YS5hYm9ydGVkKXJldHVybjtpLnpvbmUuY2FuY2VsVGFzayhpKX1lbHNlIGlmKCEwPT09ZS5jdXJyZW50W01dKXJldHVybiBPLmFwcGx5KHQsbil9fSkpfWZ1bmN0aW9uIFAodCl7dmFyIG49dC5kYXRhLGk9bi50YXJnZXQ7aVtyXT0hMSxpW2RdPSExO3ZhciBjPWlbYV07bXx8KG09aVtzXSxnPWlbbF0pLGMmJmcuY2FsbChpLHksYyk7dmFyIHA9aVthXT1mdW5jdGlvbigpe2lmKGkucmVhZHlTdGF0ZT09PWkuRE9ORSlpZighbi5hYm9ydGVkJiZpW3JdJiZ0LnN0YXRlPT09Xyl7dmFyIG89aVtlLl9fc3ltYm9sX18oImxvYWRmYWxzZSIpXTtpZigwIT09aS5zdGF0dXMmJm8mJm8ubGVuZ3RoPjApe3ZhciBhPXQuaW52b2tlO3QuaW52b2tlPWZ1bmN0aW9uKCl7Zm9yKHZhciBvPWlbZS5fX3N5bWJvbF9fKCJsb2FkZmFsc2UiKV0scj0wO3I8by5sZW5ndGg7cisrKW9bcl09PT10JiZvLnNwbGljZShyLDEpO24uYWJvcnRlZHx8dC5zdGF0ZSE9PV98fGEuY2FsbCh0KX0sby5wdXNoKHQpfWVsc2UgdC5pbnZva2UoKX1lbHNlIG4uYWJvcnRlZHx8ITEhPT1pW3JdfHwoaVtkXT0hMCl9O3JldHVybiBtLmNhbGwoaSx5LHApLGlbb118fChpW29dPXQpLHguYXBwbHkoaSxuLmFyZ3MpLGlbcl09ITAsdH1mdW5jdGlvbiB3KCl7fWZ1bmN0aW9uIGsodCl7dmFyIGU9dC5kYXRhO3JldHVybiBlLmFib3J0ZWQ9ITAsTy5hcHBseShlLnRhcmdldCxlLmFyZ3MpfX0pKHQpO3ZhciBvPWYoInhoclRhc2siKSxpPWYoInhoclN5bmMiKSxhPWYoInhockxpc3RlbmVyIikscj1mKCJ4aHJTY2hlZHVsZWQiKSxjPWYoInhoclVSTCIpLGQ9ZigieGhyRXJyb3JCZWZvcmVTY2hlZHVsZWQiKX0pKSxab25lLl9fbG9hZF9wYXRjaCgiZ2VvbG9jYXRpb24iLChmdW5jdGlvbihlKXtlLm5hdmlnYXRvciYmZS5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24mJihmdW5jdGlvbiBuKGUsbyl7Zm9yKHZhciBpPWUuY29uc3RydWN0b3IubmFtZSxhPWZ1bmN0aW9uKG4pe3ZhciBhPW9bbl0scj1lW2FdO2lmKHIpe2lmKCFDKHQoZSxhKSkpcmV0dXJuImNvbnRpbnVlIjtlW2FdPShmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsXyhhcmd1bWVudHMsaSsiLiIrYSkpfTtyZXR1cm4gVChlLHQpLGV9KShyKX19LHI9MDtyPG8ubGVuZ3RoO3IrKylhKHIpfSkoZS5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24sWyJnZXRDdXJyZW50UG9zaXRpb24iLCJ3YXRjaFBvc2l0aW9uIl0pfSkpLFpvbmUuX19sb2FkX3BhdGNoKCJQcm9taXNlUmVqZWN0aW9uRXZlbnQiLChmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe1kodCxlKS5mb3JFYWNoKChmdW5jdGlvbihvKXt2YXIgaT10LlByb21pc2VSZWplY3Rpb25FdmVudDtpZihpKXt2YXIgYT1uZXcgaShlLHtwcm9taXNlOm4ucHJvbWlzZSxyZWFzb246bi5yZWplY3Rpb259KTtvLmludm9rZShhKX19KSl9fXQuUHJvbWlzZVJlamVjdGlvbkV2ZW50JiYoZVtmKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpXT1uKCJ1bmhhbmRsZWRyZWplY3Rpb24iKSxlW2YoInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIildPW4oInJlamVjdGlvbmhhbmRsZWQiKSl9KSl9KSgpOwovKioKICAgICAqIEBsaWNlbnNlIEFuZ3VsYXIgdjEyLjIuMQogICAgICogKGMpIDIwMTAtMjAyMSBHb29nbGUgTExDLiBodHRwczovL2FuZ3VsYXIuaW8vCiAgICAgKiBMaWNlbnNlOiBNSVQKICAgICAqLwpjbGFzcyB0eHt9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBleD0iKiI7ZnVuY3Rpb24gbngodCxlKXtyZXR1cm57dHlwZTo3LG5hbWU6dCxkZWZpbml0aW9uczplLG9wdGlvbnM6e319fWZ1bmN0aW9uIG94KHQsZT1udWxsKXtyZXR1cm57dHlwZTo0LHN0eWxlczplLHRpbWluZ3M6dH19ZnVuY3Rpb24gaXgodCxlPW51bGwpe3JldHVybnt0eXBlOjIsc3RlcHM6dCxvcHRpb25zOmV9fWZ1bmN0aW9uIGF4KHQpe3JldHVybnt0eXBlOjYsc3R5bGVzOnQsb2Zmc2V0Om51bGx9fWZ1bmN0aW9uIHJ4KHQsZSxuKXtyZXR1cm57dHlwZTowLG5hbWU6dCxzdHlsZXM6ZSxvcHRpb25zOm59fWZ1bmN0aW9uIHN4KHQpe3JldHVybnt0eXBlOjUsc3RlcHM6dH19ZnVuY3Rpb24gbHgodCxlLG49bnVsbCl7cmV0dXJue3R5cGU6MSxleHByOnQsYW5pbWF0aW9uOmUsb3B0aW9uczpufX1mdW5jdGlvbiBjeCh0PW51bGwpe3JldHVybnt0eXBlOjksb3B0aW9uczp0fX1mdW5jdGlvbiBkeCh0LGUsbj1udWxsKXtyZXR1cm57dHlwZToxMSxzZWxlY3Rvcjp0LGFuaW1hdGlvbjplLG9wdGlvbnM6bn19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHB4KHQpe1Byb21pc2UucmVzb2x2ZShudWxsKS50aGVuKHQpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBteHtjb25zdHJ1Y3Rvcih0PTAsZT0wKXt0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fcG9zaXRpb249MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPXQrZX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vbkRvbmVGbnM9W10pfW9uU3RhcnQodCl7dGhpcy5fb25TdGFydEZucy5wdXNoKHQpfW9uRG9uZSh0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWluaXQoKXt9cGxheSgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFzaygpKSx0aGlzLl9zdGFydGVkPSEwfXRyaWdnZXJNaWNyb3Rhc2soKXtweCgoKCk9PnRoaXMuX29uRmluaXNoKCkpKX1fb25TdGFydCgpe3RoaXMuX29uU3RhcnRGbnMuZm9yRWFjaCgodD0+dCgpKSksdGhpcy5fb25TdGFydEZucz1bXX1wYXVzZSgpe31yZXN0YXJ0KCl7fWZpbmlzaCgpe3RoaXMuX29uRmluaXNoKCl9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLmhhc1N0YXJ0ZWQoKXx8dGhpcy5fb25TdGFydCgpLHRoaXMuZmluaXNoKCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2goKHQ9PnQoKSkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKHQpe3RoaXMuX3Bvc2l0aW9uPXRoaXMudG90YWxUaW1lP3QqdGhpcy50b3RhbFRpbWU6MX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnRvdGFsVGltZT90aGlzLl9wb3NpdGlvbi90aGlzLnRvdGFsVGltZToxfXRyaWdnZXJDYWxsYmFjayh0KXtjb25zdCBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKCh0PT50KCkpKSxlLmxlbmd0aD0wfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgdXh7Y29uc3RydWN0b3IodCl7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9MCx0aGlzLnBsYXllcnM9dDtsZXQgZT0wLG49MCxvPTA7Y29uc3QgaT10aGlzLnBsYXllcnMubGVuZ3RoOzA9PWk/cHgoKCgpPT50aGlzLl9vbkZpbmlzaCgpKSk6dGhpcy5wbGF5ZXJzLmZvckVhY2goKHQ9Pnt0Lm9uRG9uZSgoKCk9PnsrK2U9PWkmJnRoaXMuX29uRmluaXNoKCl9KSksdC5vbkRlc3Ryb3koKCgpPT57KytuPT1pJiZ0aGlzLl9vbkRlc3Ryb3koKX0pKSx0Lm9uU3RhcnQoKCgpPT57KytvPT1pJiZ0aGlzLl9vblN0YXJ0KCl9KSl9KSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZSgoKHQsZSk9Pk1hdGgubWF4KHQsZS50b3RhbFRpbWUpKSwwKX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCgodD0+dC5pbml0KCkpKX1vblN0YXJ0KHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goKHQ9PnQoKSkpLHRoaXMuX29uU3RhcnRGbnM9W10pfW9uRG9uZSh0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfXBsYXkoKXt0aGlzLnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKCh0PT50LnBsYXkoKSkpfXBhdXNlKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goKHQ9PnQucGF1c2UoKSkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCgodD0+dC5yZXN0YXJ0KCkpKX1maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKCh0PT50LmZpbmlzaCgpKSl9ZGVzdHJveSgpe3RoaXMuX29uRGVzdHJveSgpfV9vbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaCgodD0+dC5kZXN0cm95KCkpKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaCgodD0+dCgpKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1yZXNldCgpe3RoaXMucGxheWVycy5mb3JFYWNoKCh0PT50LnJlc2V0KCkpKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX1zZXRQb3NpdGlvbih0KXtjb25zdCBlPXQqdGhpcy50b3RhbFRpbWU7dGhpcy5wbGF5ZXJzLmZvckVhY2goKHQ9Pntjb25zdCBuPXQudG90YWxUaW1lP01hdGgubWluKDEsZS90LnRvdGFsVGltZSk6MTt0LnNldFBvc2l0aW9uKG4pfSkpfWdldFBvc2l0aW9uKCl7Y29uc3QgdD10aGlzLnBsYXllcnMucmVkdWNlKCgodCxlKT0+bnVsbD09PXR8fGUudG90YWxUaW1lPnQudG90YWxUaW1lP2U6dCksbnVsbCk7cmV0dXJuIG51bGwhPXQ/dC5nZXRQb3NpdGlvbigpOjB9YmVmb3JlRGVzdHJveSgpe3RoaXMucGxheWVycy5mb3JFYWNoKCh0PT57dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pKX10cmlnZ2VyQ2FsbGJhY2sodCl7Y29uc3QgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaCgodD0+dCgpKSksZS5sZW5ndGg9MH19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlIEFuZ3VsYXIgdjEyLjIuMQogICAgICogKGMpIDIwMTAtMjAyMSBHb29nbGUgTExDLiBodHRwczovL2FuZ3VsYXIuaW8vCiAgICAgKiBMaWNlbnNlOiBNSVQKICAgICAqLwpmdW5jdGlvbiBmeCgpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuZG9jdW1lbnR9ZnVuY3Rpb24gZ3goKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3MmJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwocHJvY2Vzcyl9ZnVuY3Rpb24gaHgodCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBteDtjYXNlIDE6cmV0dXJuIHRbMF07ZGVmYXVsdDpyZXR1cm4gbmV3IHV4KHQpfX1mdW5jdGlvbiBieCh0LGUsbixvLGk9e30sYT17fSl7Y29uc3Qgcj1bXSxzPVtdO2xldCBsPS0xLGM9bnVsbDtpZihvLmZvckVhY2goKHQ9Pntjb25zdCBuPXQub2Zmc2V0LG89bj09bCxkPW8mJmN8fHt9O09iamVjdC5rZXlzKHQpLmZvckVhY2goKG49PntsZXQgbz1uLHM9dFtuXTtpZigib2Zmc2V0IiE9PW4pc3dpdGNoKG89ZS5ub3JtYWxpemVQcm9wZXJ0eU5hbWUobyxyKSxzKXtjYXNlIiEiOnM9aVtuXTticmVhaztjYXNlIGV4OnM9YVtuXTticmVhaztkZWZhdWx0OnM9ZS5ub3JtYWxpemVTdHlsZVZhbHVlKG4sbyxzLHIpfWRbb109c30pKSxvfHxzLnB1c2goZCksYz1kLGw9bn0pKSxyLmxlbmd0aCl7Y29uc3QgdD0iXG4gLSAiO3Rocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGFuaW1hdGUgZHVlIHRvIHRoZSBmb2xsb3dpbmcgZXJyb3JzOiR7dH0ke3Iuam9pbih0KX1gKX1yZXR1cm4gc31mdW5jdGlvbiB5eCh0LGUsbixvKXtzd2l0Y2goZSl7Y2FzZSJzdGFydCI6dC5vblN0YXJ0KCgoKT0+byhuJiZfeChuLCJzdGFydCIsdCkpKSk7YnJlYWs7Y2FzZSJkb25lIjp0Lm9uRG9uZSgoKCk9Pm8obiYmX3gobiwiZG9uZSIsdCkpKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0Lm9uRGVzdHJveSgoKCk9Pm8obiYmX3gobiwiZGVzdHJveSIsdCkpKSl9fWZ1bmN0aW9uIF94KHQsZSxuKXtjb25zdCBvPW4udG90YWxUaW1lLGk9Q3godC5lbGVtZW50LHQudHJpZ2dlck5hbWUsdC5mcm9tU3RhdGUsdC50b1N0YXRlLGV8fHQucGhhc2VOYW1lLG51bGw9PW8/dC50b3RhbFRpbWU6bywhIW4uZGlzYWJsZWQpLGE9dC5fZGF0YTtyZXR1cm4gbnVsbCE9YSYmKGkuX2RhdGE9YSksaX1mdW5jdGlvbiBDeCh0LGUsbixvLGk9IiIsYT0wLHIpe3JldHVybntlbGVtZW50OnQsdHJpZ2dlck5hbWU6ZSxmcm9tU3RhdGU6bix0b1N0YXRlOm8scGhhc2VOYW1lOmksdG90YWxUaW1lOmEsZGlzYWJsZWQ6ISFyfX1mdW5jdGlvbiBNeCh0LGUsbil7bGV0IG87cmV0dXJuIHQgaW5zdGFuY2VvZiBNYXA/KG89dC5nZXQoZSksb3x8dC5zZXQoZSxvPW4pKToobz10W2VdLG98fChvPXRbZV09bikpLG99ZnVuY3Rpb24gdngodCl7Y29uc3QgZT10LmluZGV4T2YoIjoiKTtyZXR1cm5bdC5zdWJzdHJpbmcoMSxlKSx0LnN1YnN0cihlKzEpXX1sZXQgeHg9KHQsZSk9PiExLE94PSh0LGUpPT4hMSxQeD0odCxlLG4pPT5bXTtjb25zdCB3eD1neCgpOyh3eHx8InVuZGVmaW5lZCIhPXR5cGVvZiBFbGVtZW50KSYmKHh4PWZ4KCk/KHQsZSk9Pntmb3IoO2UmJmUhPT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7KXtpZihlPT09dClyZXR1cm4hMDtlPWUucGFyZW50Tm9kZXx8ZS5ob3N0fXJldHVybiExfToodCxlKT0+dC5jb250YWlucyhlKSxPeD0oKCk9PntpZih3eHx8RWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcylyZXR1cm4odCxlKT0+dC5tYXRjaGVzKGUpO3tjb25zdCB0PUVsZW1lbnQucHJvdG90eXBlLGU9dC5tYXRjaGVzU2VsZWN0b3J8fHQubW96TWF0Y2hlc1NlbGVjdG9yfHx0Lm1zTWF0Y2hlc1NlbGVjdG9yfHx0Lm9NYXRjaGVzU2VsZWN0b3J8fHQud2Via2l0TWF0Y2hlc1NlbGVjdG9yO3JldHVybiBlPyh0LG4pPT5lLmFwcGx5KHQsW25dKTpPeH19KSgpLFB4PSh0LGUsbik9PntsZXQgbz1bXTtpZihuKXtjb25zdCBuPXQucXVlcnlTZWxlY3RvckFsbChlKTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKylvLnB1c2goblt0XSl9ZWxzZXtjb25zdCBuPXQucXVlcnlTZWxlY3RvcihlKTtuJiZvLnB1c2gobil9cmV0dXJuIG99KTtsZXQga3g9bnVsbCxTeD0hMTtmdW5jdGlvbiBEeCh0KXtreHx8KGt4PShmdW5jdGlvbiBlKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5ib2R5Om51bGx9KSgpfHx7fSxTeD0hIWt4LnN0eWxlJiYiV2Via2l0QXBwZWFyYW5jZSJpbiBreC5zdHlsZSk7bGV0IG49ITA7cmV0dXJuIGt4LnN0eWxlJiYhKGZ1bmN0aW9uIG8odCl7cmV0dXJuImVia2l0Ij09dC5zdWJzdHJpbmcoMSw2KX0pKHQpJiYobj10IGluIGt4LnN0eWxlLCFuJiZTeCkmJihuPSJXZWJraXQiK3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHIoMSlpbiBreC5zdHlsZSksbn1jb25zdCBFeD1PeCxSeD14eCxBeD1QeDtmdW5jdGlvbiBUeCh0KXtjb25zdCBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChuPT57Y29uc3Qgbz1uLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIiQxLSQyIik7ZVtvXT10W25dfSkpLGV9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIE54e3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eSh0KXtyZXR1cm4gRHgodCl9bWF0Y2hlc0VsZW1lbnQodCxlKXtyZXR1cm4gRXgodCxlKX1jb250YWluc0VsZW1lbnQodCxlKXtyZXR1cm4gUngodCxlKX1xdWVyeSh0LGUsbil7cmV0dXJuIEF4KHQsZSxuKX1jb21wdXRlU3R5bGUodCxlLG4pe3JldHVybiBufHwiIn1hbmltYXRlKHQsZSxuLG8saSxhPVtdLHIpe3JldHVybiBuZXcgbXgobixvKX19TnguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE54KX0sTnguybVwcm92PU1uKHt0b2tlbjpOeCxmYWN0b3J5Ok54Lsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChOeCxbe3R5cGU6aW19XSxudWxsLG51bGwpO2NsYXNzIHp4e316eC5OT09QPW5ldyBOeDsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IEl4PSJuZy1lbnRlciIsSHg9Im5nLWxlYXZlIixGeD0ibmctdHJpZ2dlciIsTHg9Ii5uZy10cmlnZ2VyIixCeD0ibmctYW5pbWF0aW5nIixWeD0iLm5nLWFuaW1hdGluZyI7ZnVuY3Rpb24gangodCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0O2NvbnN0IGU9dC5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykvKTtyZXR1cm4hZXx8ZS5sZW5ndGg8Mj8wOlV4KHBhcnNlRmxvYXQoZVsxXSksZVsyXSl9ZnVuY3Rpb24gVXgodCxlKXtzd2l0Y2goZSl7Y2FzZSJzIjpyZXR1cm4gMWUzKnQ7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gR3godCxlLG4pe3JldHVybiB0Lmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP3Q6KGZ1bmN0aW9uIG8odCxlLG4pe2xldCBvLGk9MCxhPSIiO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Y29uc3Qgbj10Lm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKSg/OlxzKygtP1tcLlxkXSspKG0/cykpPyg/OlxzKyhbLWEtel0rKD86XCguKz9cKSk/KSk/JC9pKTtpZihudWxsPT09bilyZXR1cm4gZS5wdXNoKGBUaGUgcHJvdmlkZWQgdGltaW5nIHZhbHVlICIke3R9IiBpcyBpbnZhbGlkLmApLHtkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiIifTtvPVV4KHBhcnNlRmxvYXQoblsxXSksblsyXSk7Y29uc3Qgcj1uWzNdO251bGwhPXImJihpPVV4KHBhcnNlRmxvYXQociksbls0XSkpO2NvbnN0IHM9bls1XTtzJiYoYT1zKX1lbHNlIG89dDtpZighbil7bGV0IG49ITEsYT1lLmxlbmd0aDtvPDAmJihlLnB1c2goIkR1cmF0aW9uIHZhbHVlcyBiZWxvdyAwIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhpcyBhbmltYXRpb24gc3RlcC4iKSxuPSEwKSxpPDAmJihlLnB1c2goIkRlbGF5IHZhbHVlcyBiZWxvdyAwIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhpcyBhbmltYXRpb24gc3RlcC4iKSxuPSEwKSxuJiZlLnNwbGljZShhLDAsYFRoZSBwcm92aWRlZCB0aW1pbmcgdmFsdWUgIiR7dH0iIGlzIGludmFsaWQuYCl9cmV0dXJue2R1cmF0aW9uOm8sZGVsYXk6aSxlYXNpbmc6YX19KSh0LGUsbil9ZnVuY3Rpb24gV3godCxlPXt9KXtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgobj0+e2Vbbl09dFtuXX0pKSxlfWZ1bmN0aW9uIFl4KHQsZSxuPXt9KXtpZihlKWZvcihsZXQgZSBpbiB0KW5bZV09dFtlXTtlbHNlIFd4KHQsbik7cmV0dXJuIG59ZnVuY3Rpb24gcXgodCxlLG4pe3JldHVybiBuP2UrIjoiK24rIjsiOiIifWZ1bmN0aW9uIFp4KHQpe2xldCBlPSIiO2ZvcihsZXQgbj0wO248dC5zdHlsZS5sZW5ndGg7bisrKXtjb25zdCBvPXQuc3R5bGUuaXRlbShuKTtlKz1xeCgwLG8sdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG8pKX1mb3IoY29uc3QgbiBpbiB0LnN0eWxlKXQuc3R5bGUuaGFzT3duUHJvcGVydHkobikmJiFuLnN0YXJ0c1dpdGgoIl8iKSYmKGUrPXF4KDAsbi5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCksdC5zdHlsZVtuXSkpO3Quc2V0QXR0cmlidXRlKCJzdHlsZSIsZSl9ZnVuY3Rpb24gWHgodCxlLG4pe3Quc3R5bGUmJihPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChvPT57Y29uc3QgaT1vTyhvKTtuJiYhbi5oYXNPd25Qcm9wZXJ0eShvKSYmKG5bb109dC5zdHlsZVtpXSksdC5zdHlsZVtpXT1lW29dfSkpLGd4KCkmJlp4KHQpKX1mdW5jdGlvbiBLeCh0LGUpe3Quc3R5bGUmJihPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChlPT57Y29uc3Qgbj1vTyhlKTt0LnN0eWxlW25dPSIifSkpLGd4KCkmJlp4KHQpKX1mdW5jdGlvbiBKeCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8xPT10Lmxlbmd0aD90WzBdOml4KHQpOnR9Y29uc3QgUXg9bmV3IFJlZ0V4cCgie3tcXHMqKC4rPylcXHMqfX0iLCJnIik7ZnVuY3Rpb24gJHgodCl7bGV0IGU9W107aWYoInN0cmluZyI9PXR5cGVvZiB0KXtsZXQgbjtmb3IoO249UXguZXhlYyh0KTspZS5wdXNoKG5bMV0pO1F4Lmxhc3RJbmRleD0wfXJldHVybiBlfWZ1bmN0aW9uIHRPKHQsZSxuKXtjb25zdCBvPXQudG9TdHJpbmcoKSxpPW8ucmVwbGFjZShReCwoKHQsbyk9PntsZXQgaT1lW29dO3JldHVybiBlLmhhc093blByb3BlcnR5KG8pfHwobi5wdXNoKGBQbGVhc2UgcHJvdmlkZSBhIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIHBhcmFtICR7b31gKSxpPSIiKSxpLnRvU3RyaW5nKCl9KSk7cmV0dXJuIGk9PW8/dDppfWZ1bmN0aW9uIGVPKHQpe2NvbnN0IGU9W107bGV0IG49dC5uZXh0KCk7Zm9yKDshbi5kb25lOyllLnB1c2gobi52YWx1ZSksbj10Lm5leHQoKTtyZXR1cm4gZX1jb25zdCBuTz0vLSsoW2EtejAtOV0pL2c7ZnVuY3Rpb24gb08odCl7cmV0dXJuIHQucmVwbGFjZShuTywoKC4uLnQpPT50WzFdLnRvVXBwZXJDYXNlKCkpKX1mdW5jdGlvbiBpTyh0LGUpe3JldHVybiAwPT09dHx8MD09PWV9ZnVuY3Rpb24gYU8odCxlLG4pe2NvbnN0IG89T2JqZWN0LmtleXMobik7aWYoby5sZW5ndGgmJmUubGVuZ3RoKXtsZXQgYT1lWzBdLHI9W107aWYoby5mb3JFYWNoKCh0PT57YS5oYXNPd25Qcm9wZXJ0eSh0KXx8ci5wdXNoKHQpLGFbdF09blt0XX0pKSxyLmxlbmd0aClmb3IodmFyIGk9MTtpPGUubGVuZ3RoO2krKyl7bGV0IG49ZVtpXTtyLmZvckVhY2goKGZ1bmN0aW9uKGUpe25bZV09c08odCxlKX0pKX19cmV0dXJuIGV9ZnVuY3Rpb24gck8odCxlLG4pe3N3aXRjaChlLnR5cGUpe2Nhc2UgNzpyZXR1cm4gdC52aXNpdFRyaWdnZXIoZSxuKTtjYXNlIDA6cmV0dXJuIHQudmlzaXRTdGF0ZShlLG4pO2Nhc2UgMTpyZXR1cm4gdC52aXNpdFRyYW5zaXRpb24oZSxuKTtjYXNlIDI6cmV0dXJuIHQudmlzaXRTZXF1ZW5jZShlLG4pO2Nhc2UgMzpyZXR1cm4gdC52aXNpdEdyb3VwKGUsbik7Y2FzZSA0OnJldHVybiB0LnZpc2l0QW5pbWF0ZShlLG4pO2Nhc2UgNTpyZXR1cm4gdC52aXNpdEtleWZyYW1lcyhlLG4pO2Nhc2UgNjpyZXR1cm4gdC52aXNpdFN0eWxlKGUsbik7Y2FzZSA4OnJldHVybiB0LnZpc2l0UmVmZXJlbmNlKGUsbik7Y2FzZSA5OnJldHVybiB0LnZpc2l0QW5pbWF0ZUNoaWxkKGUsbik7Y2FzZSAxMDpyZXR1cm4gdC52aXNpdEFuaW1hdGVSZWYoZSxuKTtjYXNlIDExOnJldHVybiB0LnZpc2l0UXVlcnkoZSxuKTtjYXNlIDEyOnJldHVybiB0LnZpc2l0U3RhZ2dlcihlLG4pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmVzb2x2ZSBhbmltYXRpb24gbWV0YWRhdGEgbm9kZSAjJHtlLnR5cGV9YCl9fWZ1bmN0aW9uIHNPKHQsZSl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW2VdfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBsTz0iKiI7ZnVuY3Rpb24gY08odCxlKXtjb25zdCBuPVtdO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaCgodD0+KGZ1bmN0aW9uIG8odCxlLG4pe2lmKCI6Ij09dFswXSl7Y29uc3Qgbz0oZnVuY3Rpb24gbyh0LGUpe3N3aXRjaCh0KXtjYXNlIjplbnRlciI6cmV0dXJuInZvaWQgPT4gKiI7Y2FzZSI6bGVhdmUiOnJldHVybiIqID0+IHZvaWQiO2Nhc2UiOmluY3JlbWVudCI6cmV0dXJuKHQsZSk9PnBhcnNlRmxvYXQoZSk+cGFyc2VGbG9hdCh0KTtjYXNlIjpkZWNyZW1lbnQiOnJldHVybih0LGUpPT5wYXJzZUZsb2F0KGUpPHBhcnNlRmxvYXQodCk7ZGVmYXVsdDpyZXR1cm4gZS5wdXNoKGBUaGUgdHJhbnNpdGlvbiBhbGlhcyB2YWx1ZSAiJHt0fSIgaXMgbm90IHN1cHBvcnRlZGApLCIqID0+ICoifX0pKHQsbik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG8pcmV0dXJuIHZvaWQgZS5wdXNoKG8pO3Q9b31jb25zdCBpPXQubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWl8fGkubGVuZ3RoPDQpcmV0dXJuIG4ucHVzaChgVGhlIHByb3ZpZGVkIHRyYW5zaXRpb24gZXhwcmVzc2lvbiAiJHt0fSIgaXMgbm90IHN1cHBvcnRlZGApLGU7Y29uc3QgYT1pWzFdLHI9aVsyXSxzPWlbM107ZS5wdXNoKG1PKGEscykpLCI8IiE9clswXXx8YT09bE8mJnM9PWxPfHxlLnB1c2gobU8ocyxhKSl9KSh0LG4sZSkpKTpuLnB1c2godCksbn1jb25zdCBkTz1uZXcgU2V0KFsidHJ1ZSIsIjEiXSkscE89bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiBtTyh0LGUpe2NvbnN0IG49ZE8uaGFzKHQpfHxwTy5oYXModCksbz1kTy5oYXMoZSl8fHBPLmhhcyhlKTtyZXR1cm4oaSxhKT0+e2xldCByPXQ9PWxPfHx0PT1pLHM9ZT09bE98fGU9PWE7cmV0dXJuIXImJm4mJiJib29sZWFuIj09dHlwZW9mIGkmJihyPWk/ZE8uaGFzKHQpOnBPLmhhcyh0KSksIXMmJm8mJiJib29sZWFuIj09dHlwZW9mIGEmJihzPWE/ZE8uaGFzKGUpOnBPLmhhcyhlKSksciYmc319Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IHVPPW5ldyBSZWdFeHAoInMqOnNlbGZzKiw/IiwiZyIpO2Z1bmN0aW9uIGZPKHQsZSxuKXtyZXR1cm4gbmV3IGdPKHQpLmJ1aWxkKGUsbil9Y2xhc3MgZ097Y29uc3RydWN0b3IodCl7dGhpcy5fZHJpdmVyPXR9YnVpbGQodCxlKXtjb25zdCBuPW5ldyBoTyhlKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShuKSxyTyh0aGlzLEp4KHQpLG4pfV9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKHQpe3QuY3VycmVudFF1ZXJ5U2VsZWN0b3I9IiIsdC5jb2xsZWN0ZWRTdHlsZXM9e30sdC5jb2xsZWN0ZWRTdHlsZXNbIiJdPXt9LHQuY3VycmVudFRpbWU9MH12aXNpdFRyaWdnZXIodCxlKXtsZXQgbj1lLnF1ZXJ5Q291bnQ9MCxvPWUuZGVwQ291bnQ9MDtjb25zdCBpPVtdLGE9W107cmV0dXJuIkAiPT10Lm5hbWUuY2hhckF0KDApJiZlLmVycm9ycy5wdXNoKCJhbmltYXRpb24gdHJpZ2dlcnMgY2Fubm90IGJlIHByZWZpeGVkIHdpdGggYW4gYEBgIHNpZ24gKGUuZy4gdHJpZ2dlcignQGZvbycsIFsuLi5dKSkiKSx0LmRlZmluaXRpb25zLmZvckVhY2goKHQ9PntpZih0aGlzLl9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGUpLDA9PXQudHlwZSl7Y29uc3Qgbj10LG89bi5uYW1lO28udG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goKHQ9PntuLm5hbWU9dCxpLnB1c2godGhpcy52aXNpdFN0YXRlKG4sZSkpfSkpLG4ubmFtZT1vfWVsc2UgaWYoMT09dC50eXBlKXtjb25zdCBpPXRoaXMudmlzaXRUcmFuc2l0aW9uKHQsZSk7bis9aS5xdWVyeUNvdW50LG8rPWkuZGVwQ291bnQsYS5wdXNoKGkpfWVsc2UgZS5lcnJvcnMucHVzaCgib25seSBzdGF0ZSgpIGFuZCB0cmFuc2l0aW9uKCkgZGVmaW5pdGlvbnMgY2FuIHNpdCBpbnNpZGUgb2YgYSB0cmlnZ2VyKCkiKX0pKSx7dHlwZTo3LG5hbWU6dC5uYW1lLHN0YXRlczppLHRyYW5zaXRpb25zOmEscXVlcnlDb3VudDpuLGRlcENvdW50Om8sb3B0aW9uczpudWxsfX12aXNpdFN0YXRlKHQsZSl7Y29uc3Qgbj10aGlzLnZpc2l0U3R5bGUodC5zdHlsZXMsZSksbz10Lm9wdGlvbnMmJnQub3B0aW9ucy5wYXJhbXN8fG51bGw7aWYobi5jb250YWluc0R5bmFtaWNTdHlsZXMpe2NvbnN0IGk9bmV3IFNldCxhPW98fHt9O2lmKG4uc3R5bGVzLmZvckVhY2goKHQ9PntpZihiTyh0KSl7Y29uc3QgZT10O09iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PnskeChlW3RdKS5mb3JFYWNoKCh0PT57YS5oYXNPd25Qcm9wZXJ0eSh0KXx8aS5hZGQodCl9KSl9KSl9fSkpLGkuc2l6ZSl7Y29uc3Qgbj1lTyhpLnZhbHVlcygpKTtlLmVycm9ycy5wdXNoKGBzdGF0ZSgiJHt0Lm5hbWV9IiwgLi4uKSBtdXN0IGRlZmluZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSBmb2xsb3dpbmcgc3R5bGUgc3Vic3RpdHV0aW9uczogJHtuLmpvaW4oIiwgIil9YCl9fXJldHVybnt0eXBlOjAsbmFtZTp0Lm5hbWUsc3R5bGU6bixvcHRpb25zOm8/e3BhcmFtczpvfTpudWxsfX12aXNpdFRyYW5zaXRpb24odCxlKXtlLnF1ZXJ5Q291bnQ9MCxlLmRlcENvdW50PTA7Y29uc3Qgbj1yTyh0aGlzLEp4KHQuYW5pbWF0aW9uKSxlKTtyZXR1cm57dHlwZToxLG1hdGNoZXJzOmNPKHQuZXhwcixlLmVycm9ycyksYW5pbWF0aW9uOm4scXVlcnlDb3VudDplLnF1ZXJ5Q291bnQsZGVwQ291bnQ6ZS5kZXBDb3VudCxvcHRpb25zOnlPKHQub3B0aW9ucyl9fXZpc2l0U2VxdWVuY2UodCxlKXtyZXR1cm57dHlwZToyLHN0ZXBzOnQuc3RlcHMubWFwKCh0PT5yTyh0aGlzLHQsZSkpKSxvcHRpb25zOnlPKHQub3B0aW9ucyl9fXZpc2l0R3JvdXAodCxlKXtjb25zdCBuPWUuY3VycmVudFRpbWU7bGV0IG89MDtjb25zdCBpPXQuc3RlcHMubWFwKCh0PT57ZS5jdXJyZW50VGltZT1uO2NvbnN0IGk9ck8odGhpcyx0LGUpO3JldHVybiBvPU1hdGgubWF4KG8sZS5jdXJyZW50VGltZSksaX0pKTtyZXR1cm4gZS5jdXJyZW50VGltZT1vLHt0eXBlOjMsc3RlcHM6aSxvcHRpb25zOnlPKHQub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZSh0LGUpe2NvbnN0IG49KGZ1bmN0aW9uIG8odCxlKXtsZXQgbj1udWxsO2lmKHQuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIikpbj10O2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiBfTyhHeCh0LGUpLmR1cmF0aW9uLDAsIiIpO2NvbnN0IG89dDtpZihvLnNwbGl0KC9ccysvKS5zb21lKCh0PT4ieyI9PXQuY2hhckF0KDApJiYieyI9PXQuY2hhckF0KDEpKSkpe2NvbnN0IHQ9X08oMCwwLCIiKTtyZXR1cm4gdC5keW5hbWljPSEwLHQuc3RyVmFsdWU9byx0fXJldHVybiBuPW58fEd4KG8sZSksX08obi5kdXJhdGlvbixuLmRlbGF5LG4uZWFzaW5nKX0pKHQudGltaW5ncyxlLmVycm9ycyk7bGV0IGk7ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bjtsZXQgYT10LnN0eWxlcz90LnN0eWxlczpheCh7fSk7aWYoNT09YS50eXBlKWk9dGhpcy52aXNpdEtleWZyYW1lcyhhLGUpO2Vsc2V7bGV0IG89dC5zdHlsZXMsYT0hMTtpZighbyl7YT0hMDtjb25zdCB0PXt9O24uZWFzaW5nJiYodC5lYXNpbmc9bi5lYXNpbmcpLG89YXgodCl9ZS5jdXJyZW50VGltZSs9bi5kdXJhdGlvbituLmRlbGF5O2NvbnN0IHI9dGhpcy52aXNpdFN0eWxlKG8sZSk7ci5pc0VtcHR5U3RlcD1hLGk9cn1yZXR1cm4gZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx7dHlwZTo0LHRpbWluZ3M6bixzdHlsZTppLG9wdGlvbnM6bnVsbH19dmlzaXRTdHlsZSh0LGUpe2NvbnN0IG49dGhpcy5fbWFrZVN0eWxlQXN0KHQsZSk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QobixlKSxufV9tYWtlU3R5bGVBc3QodCxlKXtjb25zdCBuPVtdO0FycmF5LmlzQXJyYXkodC5zdHlsZXMpP3Quc3R5bGVzLmZvckVhY2goKHQ9Pnsic3RyaW5nIj09dHlwZW9mIHQ/dD09ZXg/bi5wdXNoKHQpOmUuZXJyb3JzLnB1c2goYFRoZSBwcm92aWRlZCBzdHlsZSBzdHJpbmcgdmFsdWUgJHt0fSBpcyBub3QgYWxsb3dlZC5gKTpuLnB1c2godCl9KSk6bi5wdXNoKHQuc3R5bGVzKTtsZXQgbz0hMSxpPW51bGw7cmV0dXJuIG4uZm9yRWFjaCgodD0+e2lmKGJPKHQpKXtjb25zdCBlPXQsbj1lLmVhc2luZztpZihuJiYoaT1uLGRlbGV0ZSBlLmVhc2luZyksIW8pZm9yKGxldCB0IGluIGUpaWYoZVt0XS50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe289ITA7YnJlYWt9fX0pKSx7dHlwZTo2LHN0eWxlczpuLGVhc2luZzppLG9mZnNldDp0Lm9mZnNldCxjb250YWluc0R5bmFtaWNTdHlsZXM6byxvcHRpb25zOm51bGx9fV92YWxpZGF0ZVN0eWxlQXN0KHQsZSl7Y29uc3Qgbj1lLmN1cnJlbnRBbmltYXRlVGltaW5ncztsZXQgbz1lLmN1cnJlbnRUaW1lLGk9ZS5jdXJyZW50VGltZTtuJiZpPjAmJihpLT1uLmR1cmF0aW9uK24uZGVsYXkpLHQuc3R5bGVzLmZvckVhY2goKHQ9Pnsic3RyaW5nIiE9dHlwZW9mIHQmJk9iamVjdC5rZXlzKHQpLmZvckVhY2goKG49PntpZighdGhpcy5fZHJpdmVyLnZhbGlkYXRlU3R5bGVQcm9wZXJ0eShuKSlyZXR1cm4gdm9pZCBlLmVycm9ycy5wdXNoKGBUaGUgcHJvdmlkZWQgYW5pbWF0aW9uIHByb3BlcnR5ICIke259IiBpcyBub3QgYSBzdXBwb3J0ZWQgQ1NTIHByb3BlcnR5IGZvciBhbmltYXRpb25zYCk7Y29uc3QgYT1lLmNvbGxlY3RlZFN0eWxlc1tlLmN1cnJlbnRRdWVyeVNlbGVjdG9yXSxyPWFbbl07bGV0IHM9ITA7ciYmKGkhPW8mJmk+PXIuc3RhcnRUaW1lJiZvPD1yLmVuZFRpbWUmJihlLmVycm9ycy5wdXNoKGBUaGUgQ1NTIHByb3BlcnR5ICIke259IiB0aGF0IGV4aXN0cyBiZXR3ZWVuIHRoZSB0aW1lcyBvZiAiJHtyLnN0YXJ0VGltZX1tcyIgYW5kICIke3IuZW5kVGltZX1tcyIgaXMgYWxzbyBiZWluZyBhbmltYXRlZCBpbiBhIHBhcmFsbGVsIGFuaW1hdGlvbiBiZXR3ZWVuIHRoZSB0aW1lcyBvZiAiJHtpfW1zIiBhbmQgIiR7b31tcyJgKSxzPSExKSxpPXIuc3RhcnRUaW1lKSxzJiYoYVtuXT17c3RhcnRUaW1lOmksZW5kVGltZTpvfSksZS5vcHRpb25zJiYoZnVuY3Rpb24gbCh0LGUsbil7Y29uc3Qgbz1lLnBhcmFtc3x8e30saT0keCh0KTtpLmxlbmd0aCYmaS5mb3JFYWNoKCh0PT57by5oYXNPd25Qcm9wZXJ0eSh0KXx8bi5wdXNoKGBVbmFibGUgdG8gcmVzb2x2ZSB0aGUgbG9jYWwgYW5pbWF0aW9uIHBhcmFtICR7dH0gaW4gdGhlIGdpdmVuIGxpc3Qgb2YgdmFsdWVzYCl9KSl9KSh0W25dLGUub3B0aW9ucyxlLmVycm9ycyl9KSl9KSl9dmlzaXRLZXlmcmFtZXModCxlKXtjb25zdCBuPXt0eXBlOjUsc3R5bGVzOltdLG9wdGlvbnM6bnVsbH07aWYoIWUuY3VycmVudEFuaW1hdGVUaW1pbmdzKXJldHVybiBlLmVycm9ycy5wdXNoKCJrZXlmcmFtZXMoKSBtdXN0IGJlIHBsYWNlZCBpbnNpZGUgb2YgYSBjYWxsIHRvIGFuaW1hdGUoKSIpLG47bGV0IG89MDtjb25zdCBpPVtdO2xldCBhPSExLHI9ITEscz0wO2NvbnN0IGw9dC5zdGVwcy5tYXAoKHQ9Pntjb25zdCBuPXRoaXMuX21ha2VTdHlsZUFzdCh0LGUpO2xldCBsPW51bGwhPW4ub2Zmc2V0P24ub2Zmc2V0OihmdW5jdGlvbiBjKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gbnVsbDtsZXQgZT1udWxsO2lmKEFycmF5LmlzQXJyYXkodCkpdC5mb3JFYWNoKCh0PT57aWYoYk8odCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXtjb25zdCBuPXQ7ZT1wYXJzZUZsb2F0KG4ub2Zmc2V0KSxkZWxldGUgbi5vZmZzZXR9fSkpO2Vsc2UgaWYoYk8odCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXtjb25zdCBuPXQ7ZT1wYXJzZUZsb2F0KG4ub2Zmc2V0KSxkZWxldGUgbi5vZmZzZXR9cmV0dXJuIGV9KShuLnN0eWxlcyksZD0wO3JldHVybiBudWxsIT1sJiYobysrLGQ9bi5vZmZzZXQ9bCkscj1yfHxkPDB8fGQ+MSxhPWF8fGQ8cyxzPWQsaS5wdXNoKGQpLG59KSk7ciYmZS5lcnJvcnMucHVzaCgiUGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBrZXlmcmFtZSBvZmZzZXRzIGFyZSBiZXR3ZWVuIDAgYW5kIDEiKSxhJiZlLmVycm9ycy5wdXNoKCJQbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGtleWZyYW1lIG9mZnNldHMgYXJlIGluIG9yZGVyIik7Y29uc3QgYz10LnN0ZXBzLmxlbmd0aDtsZXQgZD0wO28+MCYmbzxjP2UuZXJyb3JzLnB1c2goIk5vdCBhbGwgc3R5bGUoKSBzdGVwcyB3aXRoaW4gdGhlIGRlY2xhcmVkIGtleWZyYW1lcygpIGNvbnRhaW4gb2Zmc2V0cyIpOjA9PW8mJihkPTEvKGMtMSkpO2NvbnN0IHA9Yy0xLG09ZS5jdXJyZW50VGltZSx1PWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLGY9dS5kdXJhdGlvbjtyZXR1cm4gbC5mb3JFYWNoKCgodCxvKT0+e2NvbnN0IGE9ZD4wP289PXA/MTpkKm86aVtvXSxyPWEqZjtlLmN1cnJlbnRUaW1lPW0rdS5kZWxheStyLHUuZHVyYXRpb249cix0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KHQsZSksdC5vZmZzZXQ9YSxuLnN0eWxlcy5wdXNoKHQpfSkpLG59dmlzaXRSZWZlcmVuY2UodCxlKXtyZXR1cm57dHlwZTo4LGFuaW1hdGlvbjpyTyh0aGlzLEp4KHQuYW5pbWF0aW9uKSxlKSxvcHRpb25zOnlPKHQub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZUNoaWxkKHQsZSl7cmV0dXJuIGUuZGVwQ291bnQrKyx7dHlwZTo5LG9wdGlvbnM6eU8odC5vcHRpb25zKX19dmlzaXRBbmltYXRlUmVmKHQsZSl7cmV0dXJue3R5cGU6MTAsYW5pbWF0aW9uOnRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24sZSksb3B0aW9uczp5Tyh0Lm9wdGlvbnMpfX12aXNpdFF1ZXJ5KHQsZSl7Y29uc3Qgbj1lLmN1cnJlbnRRdWVyeVNlbGVjdG9yLG89dC5vcHRpb25zfHx7fTtlLnF1ZXJ5Q291bnQrKyxlLmN1cnJlbnRRdWVyeT10O2NvbnN0W2ksYV09KGZ1bmN0aW9uIHIodCl7Y29uc3QgZT0hIXQuc3BsaXQoL1xzKixccyovKS5maW5kKCh0PT4iOnNlbGYiPT10KSk7cmV0dXJuIGUmJih0PXQucmVwbGFjZSh1TywiIikpLFt0PXQucmVwbGFjZSgvQFwqL2csTHgpLnJlcGxhY2UoL0BcdysvZywodD0+Ii5uZy10cmlnZ2VyLSIrdC5zdWJzdHIoMSkpKS5yZXBsYWNlKC86YW5pbWF0aW5nL2csVngpLGVdfSkodC5zZWxlY3Rvcik7ZS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1uLmxlbmd0aD9uKyIgIitpOmksTXgoZS5jb2xsZWN0ZWRTdHlsZXMsZS5jdXJyZW50UXVlcnlTZWxlY3Rvcix7fSk7Y29uc3Qgcz1yTyh0aGlzLEp4KHQuYW5pbWF0aW9uKSxlKTtyZXR1cm4gZS5jdXJyZW50UXVlcnk9bnVsbCxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW4se3R5cGU6MTEsc2VsZWN0b3I6aSxsaW1pdDpvLmxpbWl0fHwwLG9wdGlvbmFsOiEhby5vcHRpb25hbCxpbmNsdWRlU2VsZjphLGFuaW1hdGlvbjpzLG9yaWdpbmFsU2VsZWN0b3I6dC5zZWxlY3RvcixvcHRpb25zOnlPKHQub3B0aW9ucyl9fXZpc2l0U3RhZ2dlcih0LGUpe2UuY3VycmVudFF1ZXJ5fHxlLmVycm9ycy5wdXNoKCJzdGFnZ2VyKCkgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgcXVlcnkoKSIpO2NvbnN0IG49ImZ1bGwiPT09dC50aW1pbmdzP3tkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiJmdWxsIn06R3godC50aW1pbmdzLGUuZXJyb3JzLCEwKTtyZXR1cm57dHlwZToxMixhbmltYXRpb246ck8odGhpcyxKeCh0LmFuaW1hdGlvbiksZSksdGltaW5nczpuLG9wdGlvbnM6bnVsbH19fWNsYXNzIGhPe2NvbnN0cnVjdG9yKHQpe3RoaXMuZXJyb3JzPXQsdGhpcy5xdWVyeUNvdW50PTAsdGhpcy5kZXBDb3VudD0wLHRoaXMuY3VycmVudFRyYW5zaXRpb249bnVsbCx0aGlzLmN1cnJlbnRRdWVyeT1udWxsLHRoaXMuY3VycmVudFF1ZXJ5U2VsZWN0b3I9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMuY3VycmVudFRpbWU9MCx0aGlzLmNvbGxlY3RlZFN0eWxlcz17fSx0aGlzLm9wdGlvbnM9bnVsbH19ZnVuY3Rpb24gYk8odCl7cmV0dXJuIUFycmF5LmlzQXJyYXkodCkmJiJvYmplY3QiPT10eXBlb2YgdH1mdW5jdGlvbiB5Tyh0KXtyZXR1cm4gdD8odD1XeCh0KSkucGFyYW1zJiYodC5wYXJhbXM9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIHQ/V3godCk6bnVsbH0pKHQucGFyYW1zKSk6dD17fSx0fWZ1bmN0aW9uIF9PKHQsZSxuKXtyZXR1cm57ZHVyYXRpb246dCxkZWxheTplLGVhc2luZzpufX1mdW5jdGlvbiBDTyh0LGUsbixvLGksYSxyPW51bGwscz0hMSl7cmV0dXJue3R5cGU6MSxlbGVtZW50OnQsa2V5ZnJhbWVzOmUscHJlU3R5bGVQcm9wczpuLHBvc3RTdHlsZVByb3BzOm8sZHVyYXRpb246aSxkZWxheTphLHRvdGFsVGltZTppK2EsZWFzaW5nOnIsc3ViVGltZWxpbmU6c319Y2xhc3MgTU97Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcH1jb25zdW1lKHQpe2xldCBlPXRoaXMuX21hcC5nZXQodCk7cmV0dXJuIGU/dGhpcy5fbWFwLmRlbGV0ZSh0KTplPVtdLGV9YXBwZW5kKHQsZSl7bGV0IG49dGhpcy5fbWFwLmdldCh0KTtufHx0aGlzLl9tYXAuc2V0KHQsbj1bXSksbi5wdXNoKC4uLmUpfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3Qgdk89bmV3IFJlZ0V4cCgiOmVudGVyIiwiZyIpLHhPPW5ldyBSZWdFeHAoIjpsZWF2ZSIsImciKTtmdW5jdGlvbiBPTyh0LGUsbixvLGksYT17fSxyPXt9LHMsbCxjPVtdKXtyZXR1cm4obmV3IFBPKS5idWlsZEtleWZyYW1lcyh0LGUsbixvLGksYSxyLHMsbCxjKX1jbGFzcyBQT3tidWlsZEtleWZyYW1lcyh0LGUsbixvLGksYSxyLHMsbCxjPVtdKXtsPWx8fG5ldyBNTztjb25zdCBkPW5ldyBrTyh0LGUsbCxvLGksYyxbXSk7ZC5vcHRpb25zPXMsZC5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVzKFthXSxudWxsLGQuZXJyb3JzLHMpLHJPKHRoaXMsbixkKTtjb25zdCBwPWQudGltZWxpbmVzLmZpbHRlcigodD0+dC5jb250YWluc0FuaW1hdGlvbigpKSk7aWYocC5sZW5ndGgmJk9iamVjdC5rZXlzKHIpLmxlbmd0aCl7Y29uc3QgdD1wW3AubGVuZ3RoLTFdO3QuYWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXx8dC5zZXRTdHlsZXMoW3JdLG51bGwsZC5lcnJvcnMscyl9cmV0dXJuIHAubGVuZ3RoP3AubWFwKCh0PT50LmJ1aWxkS2V5ZnJhbWVzKCkpKTpbQ08oZSxbXSxbXSxbXSwwLDAsIiIsITEpXX12aXNpdFRyaWdnZXIodCxlKXt9dmlzaXRTdGF0ZSh0LGUpe312aXNpdFRyYW5zaXRpb24odCxlKXt9dmlzaXRBbmltYXRlQ2hpbGQodCxlKXtjb25zdCBuPWUuc3ViSW5zdHJ1Y3Rpb25zLmNvbnN1bWUoZS5lbGVtZW50KTtpZihuKXtjb25zdCBvPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpLGk9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsYT10aGlzLl92aXNpdFN1Ykluc3RydWN0aW9ucyhuLG8sby5vcHRpb25zKTtpIT1hJiZlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShhKX1lLnByZXZpb3VzTm9kZT10fXZpc2l0QW5pbWF0ZVJlZih0LGUpe2NvbnN0IG49ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyk7bi50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSx0aGlzLnZpc2l0UmVmZXJlbmNlKHQuYW5pbWF0aW9uLG4pLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKG4uY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxlLnByZXZpb3VzTm9kZT10fV92aXNpdFN1Ykluc3RydWN0aW9ucyh0LGUsbil7bGV0IG89ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWU7Y29uc3QgaT1udWxsIT1uLmR1cmF0aW9uP2p4KG4uZHVyYXRpb24pOm51bGwsYT1udWxsIT1uLmRlbGF5P2p4KG4uZGVsYXkpOm51bGw7cmV0dXJuIDAhPT1pJiZ0LmZvckVhY2goKHQ9Pntjb25zdCBuPWUuYXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKHQsaSxhKTtvPU1hdGgubWF4KG8sbi5kdXJhdGlvbituLmRlbGF5KX0pKSxvfXZpc2l0UmVmZXJlbmNlKHQsZSl7ZS51cGRhdGVPcHRpb25zKHQub3B0aW9ucywhMCksck8odGhpcyx0LmFuaW1hdGlvbixlKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0U2VxdWVuY2UodCxlKXtjb25zdCBuPWUuc3ViQ29udGV4dENvdW50O2xldCBvPWU7Y29uc3QgaT10Lm9wdGlvbnM7aWYoaSYmKGkucGFyYW1zfHxpLmRlbGF5KSYmKG89ZS5jcmVhdGVTdWJDb250ZXh0KGkpLG8udHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9aS5kZWxheSkpezY9PW8ucHJldmlvdXNOb2RlLnR5cGUmJihvLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxvLnByZXZpb3VzTm9kZT13Tyk7Y29uc3QgdD1qeChpLmRlbGF5KTtvLmRlbGF5TmV4dFN0ZXAodCl9dC5zdGVwcy5sZW5ndGgmJih0LnN0ZXBzLmZvckVhY2goKHQ9PnJPKHRoaXMsdCxvKSkpLG8uY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG8uc3ViQ29udGV4dENvdW50Pm4mJm8udHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCkpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRHcm91cCh0LGUpe2NvbnN0IG49W107bGV0IG89ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWU7Y29uc3QgaT10Lm9wdGlvbnMmJnQub3B0aW9ucy5kZWxheT9qeCh0Lm9wdGlvbnMuZGVsYXkpOjA7dC5zdGVwcy5mb3JFYWNoKChhPT57Y29uc3Qgcj1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKTtpJiZyLmRlbGF5TmV4dFN0ZXAoaSksck8odGhpcyxhLHIpLG89TWF0aC5tYXgobyxyLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksbi5wdXNoKHIuY3VycmVudFRpbWVsaW5lKX0pKSxuLmZvckVhY2goKHQ9PmUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXModCkpKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShvKSxlLnByZXZpb3VzTm9kZT10fV92aXNpdFRpbWluZyh0LGUpe2lmKHQuZHluYW1pYyl7Y29uc3Qgbj10LnN0clZhbHVlO3JldHVybiBHeChlLnBhcmFtcz90TyhuLGUucGFyYW1zLGUuZXJyb3JzKTpuLGUuZXJyb3JzKX1yZXR1cm57ZHVyYXRpb246dC5kdXJhdGlvbixkZWxheTp0LmRlbGF5LGVhc2luZzp0LmVhc2luZ319dmlzaXRBbmltYXRlKHQsZSl7Y29uc3Qgbj1lLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLl92aXNpdFRpbWluZyh0LnRpbWluZ3MsZSksbz1lLmN1cnJlbnRUaW1lbGluZTtuLmRlbGF5JiYoZS5pbmNyZW1lbnRUaW1lKG4uZGVsYXkpLG8uc25hcHNob3RDdXJyZW50U3R5bGVzKCkpO2NvbnN0IGk9dC5zdHlsZTs1PT1pLnR5cGU/dGhpcy52aXNpdEtleWZyYW1lcyhpLGUpOihlLmluY3JlbWVudFRpbWUobi5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKGksZSksby5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxlLnByZXZpb3VzTm9kZT10fXZpc2l0U3R5bGUodCxlKXtjb25zdCBuPWUuY3VycmVudFRpbWVsaW5lLG89ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7IW8mJm4uZ2V0Q3VycmVudFN0eWxlUHJvcGVydGllcygpLmxlbmd0aCYmbi5mb3J3YXJkRnJhbWUoKTtjb25zdCBpPW8mJm8uZWFzaW5nfHx0LmVhc2luZzt0LmlzRW1wdHlTdGVwP24uYXBwbHlFbXB0eVN0ZXAoaSk6bi5zZXRTdHlsZXModC5zdHlsZXMsaSxlLmVycm9ycyxlLm9wdGlvbnMpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRLZXlmcmFtZXModCxlKXtjb25zdCBuPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLG89ZS5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24saT1uLmR1cmF0aW9uLGE9ZS5jcmVhdGVTdWJDb250ZXh0KCkuY3VycmVudFRpbWVsaW5lO2EuZWFzaW5nPW4uZWFzaW5nLHQuc3R5bGVzLmZvckVhY2goKHQ9PnthLmZvcndhcmRUaW1lKCh0Lm9mZnNldHx8MCkqaSksYS5zZXRTdHlsZXModC5zdHlsZXMsdC5lYXNpbmcsZS5lcnJvcnMsZS5vcHRpb25zKSxhLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpfSkpLGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoYSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUobytpKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0UXVlcnkodCxlKXtjb25zdCBuPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLG89dC5vcHRpb25zfHx7fSxpPW8uZGVsYXk/angoby5kZWxheSk6MDtpJiYoNj09PWUucHJldmlvdXNOb2RlLnR5cGV8fDA9PW4mJmUuY3VycmVudFRpbWVsaW5lLmdldEN1cnJlbnRTdHlsZVByb3BlcnRpZXMoKS5sZW5ndGgpJiYoZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksZS5wcmV2aW91c05vZGU9d08pO2xldCBhPW47Y29uc3Qgcj1lLmludm9rZVF1ZXJ5KHQuc2VsZWN0b3IsdC5vcmlnaW5hbFNlbGVjdG9yLHQubGltaXQsdC5pbmNsdWRlU2VsZiwhIW8ub3B0aW9uYWwsZS5lcnJvcnMpO2UuY3VycmVudFF1ZXJ5VG90YWw9ci5sZW5ndGg7bGV0IHM9bnVsbDtyLmZvckVhY2goKChuLG8pPT57ZS5jdXJyZW50UXVlcnlJbmRleD1vO2NvbnN0IHI9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyxuKTtpJiZyLmRlbGF5TmV4dFN0ZXAoaSksbj09PWUuZWxlbWVudCYmKHM9ci5jdXJyZW50VGltZWxpbmUpLHJPKHRoaXMsdC5hbmltYXRpb24sciksci5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksYT1NYXRoLm1heChhLHIuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKX0pKSxlLmN1cnJlbnRRdWVyeUluZGV4PTAsZS5jdXJyZW50UXVlcnlUb3RhbD0wLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGEpLHMmJihlLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKHMpLGUuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0U3RhZ2dlcih0LGUpe2NvbnN0IG49ZS5wYXJlbnRDb250ZXh0LG89ZS5jdXJyZW50VGltZWxpbmUsaT10LnRpbWluZ3MsYT1NYXRoLmFicyhpLmR1cmF0aW9uKSxyPWEqKGUuY3VycmVudFF1ZXJ5VG90YWwtMSk7bGV0IHM9YSplLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChpLmR1cmF0aW9uPDA/InJldmVyc2UiOmkuZWFzaW5nKXtjYXNlInJldmVyc2UiOnM9ci1zO2JyZWFrO2Nhc2UiZnVsbCI6cz1uLmN1cnJlbnRTdGFnZ2VyVGltZX1jb25zdCBsPWUuY3VycmVudFRpbWVsaW5lO3MmJmwuZGVsYXlOZXh0U3RlcChzKTtjb25zdCBjPWwuY3VycmVudFRpbWU7ck8odGhpcyx0LmFuaW1hdGlvbixlKSxlLnByZXZpb3VzTm9kZT10LG4uY3VycmVudFN0YWdnZXJUaW1lPW8uY3VycmVudFRpbWUtYysoby5zdGFydFRpbWUtbi5jdXJyZW50VGltZWxpbmUuc3RhcnRUaW1lKX19Y29uc3Qgd089e307Y2xhc3Mga097Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzKXt0aGlzLl9kcml2ZXI9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLnN1Ykluc3RydWN0aW9ucz1uLHRoaXMuX2VudGVyQ2xhc3NOYW1lPW8sdGhpcy5fbGVhdmVDbGFzc05hbWU9aSx0aGlzLmVycm9ycz1hLHRoaXMudGltZWxpbmVzPXIsdGhpcy5wYXJlbnRDb250ZXh0PW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLnByZXZpb3VzTm9kZT13Tyx0aGlzLnN1YkNvbnRleHRDb3VudD0wLHRoaXMub3B0aW9ucz17fSx0aGlzLmN1cnJlbnRRdWVyeUluZGV4PTAsdGhpcy5jdXJyZW50UXVlcnlUb3RhbD0wLHRoaXMuY3VycmVudFN0YWdnZXJUaW1lPTAsdGhpcy5jdXJyZW50VGltZWxpbmU9c3x8bmV3IFNPKHRoaXMuX2RyaXZlcixlLDApLHIucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSl9Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfXVwZGF0ZU9wdGlvbnModCxlKXtpZighdClyZXR1cm47Y29uc3Qgbj10O2xldCBvPXRoaXMub3B0aW9ucztudWxsIT1uLmR1cmF0aW9uJiYoby5kdXJhdGlvbj1qeChuLmR1cmF0aW9uKSksbnVsbCE9bi5kZWxheSYmKG8uZGVsYXk9angobi5kZWxheSkpO2NvbnN0IGk9bi5wYXJhbXM7aWYoaSl7bGV0IHQ9by5wYXJhbXM7dHx8KHQ9dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2JqZWN0LmtleXMoaSkuZm9yRWFjaCgobj0+e2UmJnQuaGFzT3duUHJvcGVydHkobil8fCh0W25dPXRPKGlbbl0sdCx0aGlzLmVycm9ycykpfSkpfX1fY29weU9wdGlvbnMoKXtjb25zdCB0PXt9O2lmKHRoaXMub3B0aW9ucyl7Y29uc3QgZT10aGlzLm9wdGlvbnMucGFyYW1zO2lmKGUpe2NvbnN0IG49dC5wYXJhbXM9e307T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgodD0+e25bdF09ZVt0XX0pKX19cmV0dXJuIHR9Y3JlYXRlU3ViQ29udGV4dCh0PW51bGwsZSxuKXtjb25zdCBvPWV8fHRoaXMuZWxlbWVudCxpPW5ldyBrTyh0aGlzLl9kcml2ZXIsbyx0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKG8sbnx8MCkpO3JldHVybiBpLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxpLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxpLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxpLnVwZGF0ZU9wdGlvbnModCksaS5jdXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUluZGV4LGkuY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxpLnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLGl9dHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHQpe3JldHVybiB0aGlzLnByZXZpb3VzTm9kZT13Tyx0aGlzLmN1cnJlbnRUaW1lbGluZT10aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHRoaXMuZWxlbWVudCx0KSx0aGlzLnRpbWVsaW5lcy5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKSx0aGlzLmN1cnJlbnRUaW1lbGluZX1hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUodCxlLG4pe2NvbnN0IG89e2R1cmF0aW9uOm51bGwhPWU/ZTp0LmR1cmF0aW9uLGRlbGF5OnRoaXMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhudWxsIT1uP246MCkrdC5kZWxheSxlYXNpbmc6IiJ9LGk9bmV3IERPKHRoaXMuX2RyaXZlcix0LmVsZW1lbnQsdC5rZXlmcmFtZXMsdC5wcmVTdHlsZVByb3BzLHQucG9zdFN0eWxlUHJvcHMsbyx0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChpKSxvfWluY3JlbWVudFRpbWUodCl7dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24rdCl9ZGVsYXlOZXh0U3RlcCh0KXt0PjAmJnRoaXMuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAodCl9aW52b2tlUXVlcnkodCxlLG4sbyxpLGEpe2xldCByPVtdO2lmKG8mJnIucHVzaCh0aGlzLmVsZW1lbnQpLHQubGVuZ3RoPjApe3Q9KHQ9dC5yZXBsYWNlKHZPLCIuIit0aGlzLl9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UoeE8sIi4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1lKTtsZXQgZT10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LHQsMSE9bik7MCE9PW4mJihlPW48MD9lLnNsaWNlKGUubGVuZ3RoK24sZS5sZW5ndGgpOmUuc2xpY2UoMCxuKSksci5wdXNoKC4uLmUpfXJldHVybiBpfHwwIT1yLmxlbmd0aHx8YS5wdXNoKGBcYHF1ZXJ5KCIke2V9IilcYCByZXR1cm5lZCB6ZXJvIGVsZW1lbnRzLiAoVXNlIFxgcXVlcnkoIiR7ZX0iLCB7IG9wdGlvbmFsOiB0cnVlIH0pXGAgaWYgeW91IHdpc2ggdG8gYWxsb3cgdGhpcy4pYCkscn19Y2xhc3MgU097Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdGFydFRpbWU9bix0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9byx0aGlzLmR1cmF0aW9uPTAsdGhpcy5fcHJldmlvdXNLZXlmcmFtZT17fSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9e30sdGhpcy5fa2V5ZnJhbWVzPW5ldyBNYXAsdGhpcy5fc3R5bGVTdW1tYXJ5PXt9LHRoaXMuX3BlbmRpbmdTdHlsZXM9e30sdGhpcy5fYmFja0ZpbGw9e30sdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPW51bGwsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwfHwodGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPW5ldyBNYXApLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXM9T2JqZWN0LmNyZWF0ZSh0aGlzLl9iYWNrRmlsbCx7fSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLmdldChlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlc3x8KHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLnNldChlLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpKSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1jb250YWluc0FuaW1hdGlvbigpe3N3aXRjaCh0aGlzLl9rZXlmcmFtZXMuc2l6ZSl7Y2FzZSAwOnJldHVybiExO2Nhc2UgMTpyZXR1cm4gdGhpcy5nZXRDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkubGVuZ3RoPjA7ZGVmYXVsdDpyZXR1cm4hMH19Z2V0Q3VycmVudFN0eWxlUHJvcGVydGllcygpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9jdXJyZW50S2V5ZnJhbWUpfWdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLnN0YXJ0VGltZSt0aGlzLmR1cmF0aW9ufWRlbGF5TmV4dFN0ZXAodCl7Y29uc3QgZT0xPT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmT2JqZWN0LmtleXModGhpcy5fcGVuZGluZ1N0eWxlcykubGVuZ3RoO3RoaXMuZHVyYXRpb258fGU/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZSt0KSxlJiZ0aGlzLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9dH1mb3JrKHQsZSl7cmV0dXJuIHRoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksbmV3IFNPKHRoaXMuX2RyaXZlcix0LGV8fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX1fbG9hZEtleWZyYW1lKCl7dGhpcy5fY3VycmVudEtleWZyYW1lJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWUpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT10aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pLHRoaXMuX2N1cnJlbnRLZXlmcmFtZXx8KHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1PYmplY3QuY3JlYXRlKHRoaXMuX2JhY2tGaWxsLHt9KSx0aGlzLl9rZXlmcmFtZXMuc2V0KHRoaXMuZHVyYXRpb24sdGhpcy5fY3VycmVudEtleWZyYW1lKSl9Zm9yd2FyZEZyYW1lKCl7dGhpcy5kdXJhdGlvbis9MSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1mb3J3YXJkVGltZSh0KXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHRoaXMuZHVyYXRpb249dCx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1fdXBkYXRlU3R5bGUodCxlKXt0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzW3RdPWUsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF09ZSx0aGlzLl9zdHlsZVN1bW1hcnlbdF09e3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTplfX1hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpe3JldHVybiB0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWUhPT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9YXBwbHlFbXB0eVN0ZXAodCl7dCYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuZWFzaW5nPXQpLE9iamVjdC5rZXlzKHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKS5mb3JFYWNoKCh0PT57dGhpcy5fYmFja0ZpbGxbdF09dGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF18fGV4LHRoaXMuX2N1cnJlbnRLZXlmcmFtZVt0XT1leH0pKSx0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lfXNldFN0eWxlcyh0LGUsbixvKXtlJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZS5lYXNpbmc9ZSk7Y29uc3QgaT1vJiZvLnBhcmFtc3x8e30sYT0oZnVuY3Rpb24gcih0LGUpe2NvbnN0IG49e307bGV0IG87cmV0dXJuIHQuZm9yRWFjaCgodD0+eyIqIj09PXQ/KG89b3x8T2JqZWN0LmtleXMoZSksby5mb3JFYWNoKCh0PT57blt0XT1leH0pKSk6WXgodCwhMSxuKX0pKSxufQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpO09iamVjdC5rZXlzKGEpLmZvckVhY2goKHQ9Pntjb25zdCBlPXRPKGFbdF0saSxuKTt0aGlzLl9wZW5kaW5nU3R5bGVzW3RdPWUsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuX2JhY2tGaWxsW3RdPXRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLmhhc093blByb3BlcnR5KHQpP3RoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzW3RdOmV4KSx0aGlzLl91cGRhdGVTdHlsZSh0LGUpfSkpfWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpe2NvbnN0IHQ9dGhpcy5fcGVuZGluZ1N0eWxlcyxlPU9iamVjdC5rZXlzKHQpOzAhPWUubGVuZ3RoJiYodGhpcy5fcGVuZGluZ1N0eWxlcz17fSxlLmZvckVhY2goKGU9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWVbZV09dFtlXX0pKSxPYmplY3Qua2V5cyh0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKS5mb3JFYWNoKCh0PT57dGhpcy5fY3VycmVudEtleWZyYW1lLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5fY3VycmVudEtleWZyYW1lW3RdPXRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXNbdF0pfSkpKX1zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKXtPYmplY3Qua2V5cyh0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKS5mb3JFYWNoKCh0PT57Y29uc3QgZT10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzW3RdO3RoaXMuX3BlbmRpbmdTdHlsZXNbdF09ZSx0aGlzLl91cGRhdGVTdHlsZSh0LGUpfSkpfWdldEZpbmFsS2V5ZnJhbWUoKXtyZXR1cm4gdGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKX1nZXQgcHJvcGVydGllcygpe2NvbnN0IHQ9W107Zm9yKGxldCBlIGluIHRoaXMuX2N1cnJlbnRLZXlmcmFtZSl0LnB1c2goZSk7cmV0dXJuIHR9bWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh0KXtPYmplY3Qua2V5cyh0Ll9zdHlsZVN1bW1hcnkpLmZvckVhY2goKGU9Pntjb25zdCBuPXRoaXMuX3N0eWxlU3VtbWFyeVtlXSxvPXQuX3N0eWxlU3VtbWFyeVtlXTsoIW58fG8udGltZT5uLnRpbWUpJiZ0aGlzLl91cGRhdGVTdHlsZShlLG8udmFsdWUpfSkpfWJ1aWxkS2V5ZnJhbWVzKCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKTtjb25zdCB0PW5ldyBTZXQsZT1uZXcgU2V0LG49MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiYwPT09dGhpcy5kdXJhdGlvbjtsZXQgbz1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaCgoKGksYSk9Pntjb25zdCByPVl4KGksITApO09iamVjdC5rZXlzKHIpLmZvckVhY2goKG49Pntjb25zdCBvPXJbbl07IiEiPT1vP3QuYWRkKG4pOm89PWV4JiZlLmFkZChuKX0pKSxufHwoci5vZmZzZXQ9YS90aGlzLmR1cmF0aW9uKSxvLnB1c2gocil9KSk7Y29uc3QgaT10LnNpemU/ZU8odC52YWx1ZXMoKSk6W10sYT1lLnNpemU/ZU8oZS52YWx1ZXMoKSk6W107aWYobil7Y29uc3QgdD1vWzBdLGU9V3godCk7dC5vZmZzZXQ9MCxlLm9mZnNldD0xLG89W3QsZV19cmV0dXJuIENPKHRoaXMuZWxlbWVudCxvLGksYSx0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX19Y2xhc3MgRE8gZXh0ZW5kcyBTT3tjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyPSExKXtzdXBlcih0LGUsYS5kZWxheSksdGhpcy5rZXlmcmFtZXM9bix0aGlzLnByZVN0eWxlUHJvcHM9byx0aGlzLnBvc3RTdHlsZVByb3BzPWksdGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9cix0aGlzLnRpbWluZ3M9e2R1cmF0aW9uOmEuZHVyYXRpb24sZGVsYXk6YS5kZWxheSxlYXNpbmc6YS5lYXNpbmd9fWNvbnRhaW5zQW5pbWF0aW9uKCl7cmV0dXJuIHRoaXMua2V5ZnJhbWVzLmxlbmd0aD4xfWJ1aWxkS2V5ZnJhbWVzKCl7bGV0IHQ9dGhpcy5rZXlmcmFtZXMse2RlbGF5OmUsZHVyYXRpb246bixlYXNpbmc6b309dGhpcy50aW1pbmdzO2lmKHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lJiZlKXtjb25zdCBpPVtdLGE9bitlLHI9ZS9hLHM9WXgodFswXSwhMSk7cy5vZmZzZXQ9MCxpLnB1c2gocyk7Y29uc3QgbD1ZeCh0WzBdLCExKTtsLm9mZnNldD1FTyhyKSxpLnB1c2gobCk7Y29uc3QgYz10Lmxlbmd0aC0xO2ZvcihsZXQgbz0xO288PWM7bysrKXtsZXQgcj1ZeCh0W29dLCExKTtyLm9mZnNldD1FTygoZStyLm9mZnNldCpuKS9hKSxpLnB1c2gocil9bj1hLGU9MCxvPSIiLHQ9aX1yZXR1cm4gQ08odGhpcy5lbGVtZW50LHQsdGhpcy5wcmVTdHlsZVByb3BzLHRoaXMucG9zdFN0eWxlUHJvcHMsbixlLG8sITApfX1mdW5jdGlvbiBFTyh0LGU9Myl7Y29uc3Qgbj1NYXRoLnBvdygxMCxlLTEpO3JldHVybiBNYXRoLnJvdW5kKHQqbikvbn1jbGFzcyBST3t9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIEFPIGV4dGVuZHMgUk97bm9ybWFsaXplUHJvcGVydHlOYW1lKHQsZSl7cmV0dXJuIG9PKHQpfW5vcm1hbGl6ZVN0eWxlVmFsdWUodCxlLG4sbyl7bGV0IGk9IiI7Y29uc3QgYT1uLnRvU3RyaW5nKCkudHJpbSgpO2lmKFRPW2VdJiYwIT09biYmIjAiIT09bilpZigibnVtYmVyIj09dHlwZW9mIG4paT0icHgiO2Vsc2V7Y29uc3QgZT1uLm1hdGNoKC9eWystXT9bXGRcLl0rKFthLXpdKikkLyk7ZSYmMD09ZVsxXS5sZW5ndGgmJm8ucHVzaChgUGxlYXNlIHByb3ZpZGUgYSBDU1MgdW5pdCB2YWx1ZSBmb3IgJHt0fToke259YCl9cmV0dXJuIGEraX19Y29uc3QgVE89KGZ1bmN0aW9uIE5PKHQpe2NvbnN0IGU9e307cmV0dXJuIHQuZm9yRWFjaCgodD0+ZVt0XT0hMCkpLGV9KSgid2lkdGgsaGVpZ2h0LG1pbldpZHRoLG1pbkhlaWdodCxtYXhXaWR0aCxtYXhIZWlnaHQsbGVmdCx0b3AsYm90dG9tLHJpZ2h0LGZvbnRTaXplLG91dGxpbmVXaWR0aCxvdXRsaW5lT2Zmc2V0LHBhZGRpbmdUb3AscGFkZGluZ0xlZnQscGFkZGluZ0JvdHRvbSxwYWRkaW5nUmlnaHQsbWFyZ2luVG9wLG1hcmdpbkxlZnQsbWFyZ2luQm90dG9tLG1hcmdpblJpZ2h0LGJvcmRlclJhZGl1cyxib3JkZXJXaWR0aCxib3JkZXJUb3BXaWR0aCxib3JkZXJMZWZ0V2lkdGgsYm9yZGVyUmlnaHRXaWR0aCxib3JkZXJCb3R0b21XaWR0aCx0ZXh0SW5kZW50LHBlcnNwZWN0aXZlIi5zcGxpdCgiLCIpKTtmdW5jdGlvbiB6Tyh0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtKXtyZXR1cm57dHlwZTowLGVsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLGlzUmVtb3ZhbFRyYW5zaXRpb246aSxmcm9tU3RhdGU6bixmcm9tU3R5bGVzOmEsdG9TdGF0ZTpvLHRvU3R5bGVzOnIsdGltZWxpbmVzOnMscXVlcmllZEVsZW1lbnRzOmwscHJlU3R5bGVQcm9wczpjLHBvc3RTdHlsZVByb3BzOmQsdG90YWxUaW1lOnAsZXJyb3JzOm19fWNvbnN0IElPPXt9O2NsYXNzIEhPe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl90cmlnZ2VyTmFtZT10LHRoaXMuYXN0PWUsdGhpcy5fc3RhdGVTdHlsZXM9bn1tYXRjaCh0LGUsbixvKXtyZXR1cm4oZnVuY3Rpb24gaSh0LGUsbixvLGEpe3JldHVybiB0LnNvbWUoKHQ9PnQoZSxuLG8sYSkpKX0pKHRoaXMuYXN0Lm1hdGNoZXJzLHQsZSxuLG8pfWJ1aWxkU3R5bGVzKHQsZSxuKXtjb25zdCBvPXRoaXMuX3N0YXRlU3R5bGVzWyIqIl0saT10aGlzLl9zdGF0ZVN0eWxlc1t0XSxhPW8/by5idWlsZFN0eWxlcyhlLG4pOnt9O3JldHVybiBpP2kuYnVpbGRTdHlsZXMoZSxuKTphfWJ1aWxkKHQsZSxuLG8saSxhLHIscyxsLGMpe2NvbnN0IGQ9W10scD10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8SU8sbT10aGlzLmJ1aWxkU3R5bGVzKG4sciYmci5wYXJhbXN8fElPLGQpLHU9cyYmcy5wYXJhbXN8fElPLGY9dGhpcy5idWlsZFN0eWxlcyhvLHUsZCksZz1uZXcgU2V0LGg9bmV3IE1hcCxiPW5ldyBNYXAseT0idm9pZCI9PT1vLF89e3BhcmFtczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scCksdSl9LEM9Yz9bXTpPTyh0LGUsdGhpcy5hc3QuYW5pbWF0aW9uLGksYSxtLGYsXyxsLGQpO2xldCBNPTA7aWYoQy5mb3JFYWNoKCh0PT57TT1NYXRoLm1heCh0LmR1cmF0aW9uK3QuZGVsYXksTSl9KSksZC5sZW5ndGgpcmV0dXJuIHpPKGUsdGhpcy5fdHJpZ2dlck5hbWUsbixvLHksbSxmLFtdLFtdLGgsYixNLGQpO0MuZm9yRWFjaCgodD0+e2NvbnN0IG49dC5lbGVtZW50LG89TXgoaCxuLHt9KTt0LnByZVN0eWxlUHJvcHMuZm9yRWFjaCgodD0+b1t0XT0hMCkpO2NvbnN0IGk9TXgoYixuLHt9KTt0LnBvc3RTdHlsZVByb3BzLmZvckVhY2goKHQ9PmlbdF09ITApKSxuIT09ZSYmZy5hZGQobil9KSk7Y29uc3Qgdj1lTyhnLnZhbHVlcygpKTtyZXR1cm4gek8oZSx0aGlzLl90cmlnZ2VyTmFtZSxuLG8seSxtLGYsQyx2LGgsYixNKX19Y2xhc3MgRk97Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuc3R5bGVzPXQsdGhpcy5kZWZhdWx0UGFyYW1zPWUsdGhpcy5ub3JtYWxpemVyPW59YnVpbGRTdHlsZXModCxlKXtjb25zdCBuPXt9LG89V3godGhpcy5kZWZhdWx0UGFyYW1zKTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZT0+e2NvbnN0IG49dFtlXTtudWxsIT1uJiYob1tlXT1uKX0pKSx0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaCgodD0+e2lmKCJzdHJpbmciIT10eXBlb2YgdCl7Y29uc3QgaT10O09iamVjdC5rZXlzKGkpLmZvckVhY2goKHQ9PntsZXQgYT1pW3RdO2EubGVuZ3RoPjEmJihhPXRPKGEsbyxlKSk7Y29uc3Qgcj10aGlzLm5vcm1hbGl6ZXIubm9ybWFsaXplUHJvcGVydHlOYW1lKHQsZSk7YT10aGlzLm5vcm1hbGl6ZXIubm9ybWFsaXplU3R5bGVWYWx1ZSh0LHIsYSxlKSxuW3JdPWF9KSl9fSkpLG59fWNsYXNzIExPe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLm5hbWU9dCx0aGlzLmFzdD1lLHRoaXMuX25vcm1hbGl6ZXI9bix0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXM9W10sdGhpcy5zdGF0ZXM9e30sZS5zdGF0ZXMuZm9yRWFjaCgodD0+e3RoaXMuc3RhdGVzW3QubmFtZV09bmV3IEZPKHQuc3R5bGUsdC5vcHRpb25zJiZ0Lm9wdGlvbnMucGFyYW1zfHx7fSxuKX0pKSxCTyh0aGlzLnN0YXRlcywidHJ1ZSIsIjEiKSxCTyh0aGlzLnN0YXRlcywiZmFsc2UiLCIwIiksZS50cmFuc2l0aW9ucy5mb3JFYWNoKChlPT57dGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2gobmV3IEhPKHQsZSx0aGlzLnN0YXRlcykpfSkpLHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uPShmdW5jdGlvbiBvKHQsZSxuKXtyZXR1cm4gbmV3IEhPKHQse3R5cGU6MSxhbmltYXRpb246e3R5cGU6MixzdGVwczpbXSxvcHRpb25zOm51bGx9LG1hdGNoZXJzOlsodCxlKT0+ITBdLG9wdGlvbnM6bnVsbCxxdWVyeUNvdW50OjAsZGVwQ291bnQ6MH0sZSl9KSh0LHRoaXMuc3RhdGVzKX1nZXQgY29udGFpbnNRdWVyaWVzKCl7cmV0dXJuIHRoaXMuYXN0LnF1ZXJ5Q291bnQ+MH1tYXRjaFRyYW5zaXRpb24odCxlLG4sbyl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5maW5kKChpPT5pLm1hdGNoKHQsZSxuLG8pKSl8fG51bGx9bWF0Y2hTdHlsZXModCxlLG4pe3JldHVybiB0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbi5idWlsZFN0eWxlcyh0LGUsbil9fWZ1bmN0aW9uIEJPKHQsZSxuKXt0Lmhhc093blByb3BlcnR5KGUpP3QuaGFzT3duUHJvcGVydHkobil8fCh0W25dPXRbZV0pOnQuaGFzT3duUHJvcGVydHkobikmJih0W2VdPXRbbl0pfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBWTz1uZXcgTU87Y2xhc3Mgak97Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPW4sdGhpcy5fYW5pbWF0aW9ucz17fSx0aGlzLl9wbGF5ZXJzQnlJZD17fSx0aGlzLnBsYXllcnM9W119cmVnaXN0ZXIodCxlKXtjb25zdCBuPVtdLG89Zk8odGhpcy5fZHJpdmVyLGUsbik7aWYobi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gYnVpbGQgdGhlIGFuaW1hdGlvbiBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6ICR7bi5qb2luKCJcbiIpfWApO3RoaXMuX2FuaW1hdGlvbnNbdF09b31fYnVpbGRQbGF5ZXIodCxlLG4pe2NvbnN0IG89dC5lbGVtZW50LGk9YngoMCx0aGlzLl9ub3JtYWxpemVyLDAsdC5rZXlmcmFtZXMsZSxuKTtyZXR1cm4gdGhpcy5fZHJpdmVyLmFuaW1hdGUobyxpLHQuZHVyYXRpb24sdC5kZWxheSx0LmVhc2luZyxbXSwhMCl9Y3JlYXRlKHQsZSxuPXt9KXtjb25zdCBvPVtdLGk9dGhpcy5fYW5pbWF0aW9uc1t0XTtsZXQgYTtjb25zdCByPW5ldyBNYXA7aWYoaT8oYT1PTyh0aGlzLl9kcml2ZXIsZSxpLEl4LEh4LHt9LHt9LG4sVk8sbyksYS5mb3JFYWNoKCh0PT57Y29uc3QgZT1NeChyLHQuZWxlbWVudCx7fSk7dC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKCh0PT5lW3RdPW51bGwpKX0pKSk6KG8ucHVzaCgiVGhlIHJlcXVlc3RlZCBhbmltYXRpb24gZG9lc24ndCBleGlzdCBvciBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCIpLGE9W10pLG8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGNyZWF0ZSB0aGUgYW5pbWF0aW9uIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczogJHtvLmpvaW4oIlxuIil9YCk7ci5mb3JFYWNoKCgodCxlKT0+e09iamVjdC5rZXlzKHQpLmZvckVhY2goKG49Pnt0W25dPXRoaXMuX2RyaXZlci5jb21wdXRlU3R5bGUoZSxuLGV4KX0pKX0pKTtjb25zdCBzPWh4KGEubWFwKCh0PT57Y29uc3QgZT1yLmdldCh0LmVsZW1lbnQpO3JldHVybiB0aGlzLl9idWlsZFBsYXllcih0LHt9LGUpfSkpKTtyZXR1cm4gdGhpcy5fcGxheWVyc0J5SWRbdF09cyxzLm9uRGVzdHJveSgoKCk9PnRoaXMuZGVzdHJveSh0KSkpLHRoaXMucGxheWVycy5wdXNoKHMpLHN9ZGVzdHJveSh0KXtjb25zdCBlPXRoaXMuX2dldFBsYXllcih0KTtlLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5fcGxheWVyc0J5SWRbdF07Y29uc3Qgbj10aGlzLnBsYXllcnMuaW5kZXhPZihlKTtuPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKG4sMSl9X2dldFBsYXllcih0KXtjb25zdCBlPXRoaXMuX3BsYXllcnNCeUlkW3RdO2lmKCFlKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgdGhlIHRpbWVsaW5lIHBsYXllciByZWZlcmVuY2VkIGJ5ICR7dH1gKTtyZXR1cm4gZX1saXN0ZW4odCxlLG4sbyl7Y29uc3QgaT1DeChlLCIiLCIiLCIiKTtyZXR1cm4geXgodGhpcy5fZ2V0UGxheWVyKHQpLG4saSxvKSwoKT0+e319Y29tbWFuZCh0LGUsbixvKXtpZigicmVnaXN0ZXIiPT1uKXJldHVybiB2b2lkIHRoaXMucmVnaXN0ZXIodCxvWzBdKTtpZigiY3JlYXRlIj09bilyZXR1cm4gdm9pZCB0aGlzLmNyZWF0ZSh0LGUsb1swXXx8e30pO2NvbnN0IGk9dGhpcy5fZ2V0UGxheWVyKHQpO3N3aXRjaChuKXtjYXNlInBsYXkiOmkucGxheSgpO2JyZWFrO2Nhc2UicGF1c2UiOmkucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjppLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjppLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6aS5maW5pc2goKTticmVhaztjYXNlImluaXQiOmkuaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOmkuc2V0UG9zaXRpb24ocGFyc2VGbG9hdChvWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kodCl9fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgVU89Im5nLWFuaW1hdGUtcXVldWVkIixHTz0ibmctYW5pbWF0ZS1kaXNhYmxlZCIsV089Ii5uZy1hbmltYXRlLWRpc2FibGVkIixZTz1bXSxxTz17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sWk89e25hbWVzcGFjZUlkOiIiLHNldEZvck1vdmU6ITEsc2V0Rm9yUmVtb3ZhbDohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITB9O2NsYXNzIFhPe2NvbnN0cnVjdG9yKHQsZT0iIil7dGhpcy5uYW1lc3BhY2VJZD1lO2NvbnN0IG49dCYmdC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKTtpZih0aGlzLnZhbHVlPShmdW5jdGlvbiBvKHQpe3JldHVybiBudWxsIT10P3Q6bnVsbH0pKG4/dC52YWx1ZTp0KSxuKXtjb25zdCBlPVd4KHQpO2RlbGV0ZSBlLnZhbHVlLHRoaXMub3B0aW9ucz1lfWVsc2UgdGhpcy5vcHRpb25zPXt9O3RoaXMub3B0aW9ucy5wYXJhbXN8fCh0aGlzLm9wdGlvbnMucGFyYW1zPXt9KX1nZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9YWJzb3JiT3B0aW9ucyh0KXtjb25zdCBlPXQucGFyYW1zO2lmKGUpe2NvbnN0IHQ9dGhpcy5vcHRpb25zLnBhcmFtcztPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChuPT57bnVsbD09dFtuXSYmKHRbbl09ZVtuXSl9KSl9fX1jb25zdCBLTz0idm9pZCIsSk89bmV3IFhPKEtPKTtjbGFzcyBRT3tjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5pZD10LHRoaXMuaG9zdEVsZW1lbnQ9ZSx0aGlzLl9lbmdpbmU9bix0aGlzLnBsYXllcnM9W10sdGhpcy5fdHJpZ2dlcnM9e30sdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK3QsYVAoZSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1saXN0ZW4odCxlLG4sbyl7aWYoIXRoaXMuX3RyaWdnZXJzLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxpc3RlbiBvbiB0aGUgYW5pbWF0aW9uIHRyaWdnZXIgZXZlbnQgIiR7bn0iIGJlY2F1c2UgdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICIke2V9IiBkb2Vzbid0IGV4aXN0IWApO2lmKG51bGw9PW58fDA9PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxpc3RlbiBvbiB0aGUgYW5pbWF0aW9uIHRyaWdnZXIgIiR7ZX0iIGJlY2F1c2UgdGhlIHByb3ZpZGVkIGV2ZW50IGlzIHVuZGVmaW5lZCFgKTtpZighKGZ1bmN0aW9uIGkodCl7cmV0dXJuInN0YXJ0Ij09dHx8ImRvbmUiPT10fSkobikpdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvdmlkZWQgYW5pbWF0aW9uIHRyaWdnZXIgZXZlbnQgIiR7bn0iIGZvciB0aGUgYW5pbWF0aW9uIHRyaWdnZXIgIiR7ZX0iIGlzIG5vdCBzdXBwb3J0ZWQhYCk7Y29uc3QgYT1NeCh0aGlzLl9lbGVtZW50TGlzdGVuZXJzLHQsW10pLHI9e25hbWU6ZSxwaGFzZTpuLGNhbGxiYWNrOm99O2EucHVzaChyKTtjb25zdCBzPU14KHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQsdCx7fSk7cmV0dXJuIHMuaGFzT3duUHJvcGVydHkoZSl8fChhUCh0LEZ4KSxhUCh0LCJuZy10cmlnZ2VyLSIrZSksc1tlXT1KTyksKCk9Pnt0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKCk9Pntjb25zdCB0PWEuaW5kZXhPZihyKTt0Pj0wJiZhLnNwbGljZSh0LDEpLHRoaXMuX3RyaWdnZXJzW2VdfHxkZWxldGUgc1tlXX0pKX19cmVnaXN0ZXIodCxlKXtyZXR1cm4hdGhpcy5fdHJpZ2dlcnNbdF0mJih0aGlzLl90cmlnZ2Vyc1t0XT1lLCEwKX1fZ2V0VHJpZ2dlcih0KXtjb25zdCBlPXRoaXMuX3RyaWdnZXJzW3RdO2lmKCFlKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiB0cmlnZ2VyICIke3R9IiBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZCFgKTtyZXR1cm4gZX10cmlnZ2VyKHQsZSxuLG89ITApe2NvbnN0IGk9dGhpcy5fZ2V0VHJpZ2dlcihlKSxhPW5ldyB0UCh0aGlzLmlkLGUsdCk7bGV0IHI9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7cnx8KGFQKHQsRngpLGFQKHQsIm5nLXRyaWdnZXItIitlKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LnNldCh0LHI9e30pKTtsZXQgcz1yW2VdO2NvbnN0IGw9bmV3IFhPKG4sdGhpcy5pZCk7aWYoIShuJiZuLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKSYmcyYmbC5hYnNvcmJPcHRpb25zKHMub3B0aW9ucykscltlXT1sLHN8fChzPUpPKSxsLnZhbHVlIT09S08mJnMudmFsdWU9PT1sLnZhbHVlKXtpZighKGZ1bmN0aW9uIGUodCxuKXtjb25zdCBvPU9iamVjdC5rZXlzKHQpLGk9T2JqZWN0LmtleXMobik7aWYoby5sZW5ndGghPWkubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wO2U8by5sZW5ndGg7ZSsrKXtjb25zdCBpPW9bZV07aWYoIW4uaGFzT3duUHJvcGVydHkoaSl8fHRbaV0hPT1uW2ldKXJldHVybiExfXJldHVybiEwfSkocy5wYXJhbXMsbC5wYXJhbXMpKXtjb25zdCBlPVtdLG49aS5tYXRjaFN0eWxlcyhzLnZhbHVlLHMucGFyYW1zLGUpLG89aS5tYXRjaFN0eWxlcyhsLnZhbHVlLGwucGFyYW1zLGUpO2UubGVuZ3RoP3RoaXMuX2VuZ2luZS5yZXBvcnRFcnJvcihlKTp0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKCk9PntLeCh0LG4pLFh4KHQsbyl9KSl9cmV0dXJufWNvbnN0IGM9TXgodGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQsdCxbXSk7Yy5mb3JFYWNoKCh0PT57dC5uYW1lc3BhY2VJZD09dGhpcy5pZCYmdC50cmlnZ2VyTmFtZT09ZSYmdC5xdWV1ZWQmJnQuZGVzdHJveSgpfSkpO2xldCBkPWkubWF0Y2hUcmFuc2l0aW9uKHMudmFsdWUsbC52YWx1ZSx0LGwucGFyYW1zKSxwPSExO2lmKCFkKXtpZighbylyZXR1cm47ZD1pLmZhbGxiYWNrVHJhbnNpdGlvbixwPSEwfXJldHVybiB0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVudDp0LHRyaWdnZXJOYW1lOmUsdHJhbnNpdGlvbjpkLGZyb21TdGF0ZTpzLHRvU3RhdGU6bCxwbGF5ZXI6YSxpc0ZhbGxiYWNrVHJhbnNpdGlvbjpwfSkscHx8KGFQKHQsVU8pLGEub25TdGFydCgoKCk9PntyUCh0LFVPKX0pKSksYS5vbkRvbmUoKCgpPT57bGV0IGU9dGhpcy5wbGF5ZXJzLmluZGV4T2YoYSk7ZT49MCYmdGhpcy5wbGF5ZXJzLnNwbGljZShlLDEpO2NvbnN0IG49dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2lmKG4pe2xldCB0PW4uaW5kZXhPZihhKTt0Pj0wJiZuLnNwbGljZSh0LDEpfX0pKSx0aGlzLnBsYXllcnMucHVzaChhKSxjLnB1c2goYSksYX1kZXJlZ2lzdGVyKHQpe2RlbGV0ZSB0aGlzLl90cmlnZ2Vyc1t0XSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmZvckVhY2goKChlLG4pPT57ZGVsZXRlIGVbdF19KSksdGhpcy5fZWxlbWVudExpc3RlbmVycy5mb3JFYWNoKCgoZSxuKT0+e3RoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuc2V0KG4sZS5maWx0ZXIoKGU9PmUubmFtZSE9dCkpKX0pKX1jbGVhckVsZW1lbnRDYWNoZSh0KXt0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmRlbGV0ZSh0KSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmRlbGV0ZSh0KTtjb25zdCBlPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtlJiYoZS5mb3JFYWNoKCh0PT50LmRlc3Ryb3koKSkpLHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmRlbGV0ZSh0KSl9X3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHQsZSl7Y29uc3Qgbj10aGlzLl9lbmdpbmUuZHJpdmVyLnF1ZXJ5KHQsTHgsITApO24uZm9yRWFjaCgodD0+e2lmKHQuX19uZ19yZW1vdmVkKXJldHVybjtjb25zdCBuPXRoaXMuX2VuZ2luZS5mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQodCk7bi5zaXplP24uZm9yRWFjaCgobj0+bi50cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLCExLCEwKSkpOnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUodCl9KSksdGhpcy5fZW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKCk9Pm4uZm9yRWFjaCgodD0+dGhpcy5jbGVhckVsZW1lbnRDYWNoZSh0KSkpKSl9dHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSxuLG8pe2NvbnN0IGk9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYoaSl7Y29uc3QgYT1bXTtpZihPYmplY3Qua2V5cyhpKS5mb3JFYWNoKChlPT57aWYodGhpcy5fdHJpZ2dlcnNbZV0pe2NvbnN0IG49dGhpcy50cmlnZ2VyKHQsZSxLTyxvKTtuJiZhLnB1c2gobil9fSkpLGEubGVuZ3RoKXJldHVybiB0aGlzLl9lbmdpbmUubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCEwLGUpLG4mJmh4KGEpLm9uRG9uZSgoKCk9PnRoaXMuX2VuZ2luZS5wcm9jZXNzTGVhdmVOb2RlKHQpKSksITB9cmV0dXJuITF9cHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKHQpe2NvbnN0IGU9dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQodCksbj10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihlJiZuKXtjb25zdCBvPW5ldyBTZXQ7ZS5mb3JFYWNoKChlPT57Y29uc3QgaT1lLm5hbWU7aWYoby5oYXMoaSkpcmV0dXJuO28uYWRkKGkpO2NvbnN0IGE9dGhpcy5fdHJpZ2dlcnNbaV0uZmFsbGJhY2tUcmFuc2l0aW9uLHI9bltpXXx8Sk8scz1uZXcgWE8oS08pLGw9bmV3IHRQKHRoaXMuaWQsaSx0KTt0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVudDp0LHRyaWdnZXJOYW1lOmksdHJhbnNpdGlvbjphLGZyb21TdGF0ZTpyLHRvU3RhdGU6cyxwbGF5ZXI6bCxpc0ZhbGxiYWNrVHJhbnNpdGlvbjohMH0pfSkpfX1yZW1vdmVOb2RlKHQsZSl7Y29uc3Qgbj10aGlzLl9lbmdpbmU7aWYodC5jaGlsZEVsZW1lbnRDb3VudCYmdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModCxlKSx0aGlzLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbih0LGUsITApKXJldHVybjtsZXQgbz0hMTtpZihuLnRvdGFsQW5pbWF0aW9ucyl7Y29uc3QgZT1uLnBsYXllcnMubGVuZ3RoP24ucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpOltdO2lmKGUmJmUubGVuZ3RoKW89ITA7ZWxzZXtsZXQgZT10O2Zvcig7ZT1lLnBhcmVudE5vZGU7KWlmKG4uc3RhdGVzQnlFbGVtZW50LmdldChlKSl7bz0hMDticmVha319fWlmKHRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKHQpLG8pbi5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITEsZSk7ZWxzZXtjb25zdCBvPXQuX19uZ19yZW1vdmVkO28mJm8hPT1xT3x8KG4uYWZ0ZXJGbHVzaCgoKCk9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUodCkpKSxuLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnModCksbi5fb25SZW1vdmFsQ29tcGxldGUodCxlKSl9fWluc2VydE5vZGUodCxlKXthUCh0LHRoaXMuX2hvc3RDbGFzc05hbWUpfWRyYWluUXVldWVkVHJhbnNpdGlvbnModCl7Y29uc3QgZT1bXTtyZXR1cm4gdGhpcy5fcXVldWUuZm9yRWFjaCgobj0+e2NvbnN0IG89bi5wbGF5ZXI7aWYoby5kZXN0cm95ZWQpcmV0dXJuO2NvbnN0IGk9bi5lbGVtZW50LGE9dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQoaSk7YSYmYS5mb3JFYWNoKChlPT57aWYoZS5uYW1lPT1uLnRyaWdnZXJOYW1lKXtjb25zdCBvPUN4KGksbi50cmlnZ2VyTmFtZSxuLmZyb21TdGF0ZS52YWx1ZSxuLnRvU3RhdGUudmFsdWUpO28uX2RhdGE9dCx5eChuLnBsYXllcixlLnBoYXNlLG8sZS5jYWxsYmFjayl9fSkpLG8ubWFya2VkRm9yRGVzdHJveT90aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKCk9PntvLmRlc3Ryb3koKX0pKTplLnB1c2gobil9KSksdGhpcy5fcXVldWU9W10sZS5zb3J0KCgodCxlKT0+e2NvbnN0IG49dC50cmFuc2l0aW9uLmFzdC5kZXBDb3VudCxvPWUudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQ7cmV0dXJuIDA9PW58fDA9PW8/bi1vOnRoaXMuX2VuZ2luZS5kcml2ZXIuY29udGFpbnNFbGVtZW50KHQuZWxlbWVudCxlLmVsZW1lbnQpPzE6LTF9KSl9ZGVzdHJveSh0KXt0aGlzLnBsYXllcnMuZm9yRWFjaCgodD0+dC5kZXN0cm95KCkpKSx0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0aGlzLmhvc3RFbGVtZW50LHQpfWVsZW1lbnRDb250YWluc0RhdGEodCl7bGV0IGU9ITE7cmV0dXJuIHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuaGFzKHQpJiYoZT0hMCksZT0hIXRoaXMuX3F1ZXVlLmZpbmQoKGU9PmUuZWxlbWVudD09PXQpKXx8ZSxlfX1jbGFzcyAkT3tjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5ib2R5Tm9kZT10LHRoaXMuZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1uLHRoaXMucGxheWVycz1bXSx0aGlzLm5ld0hvc3RFbGVtZW50cz1uZXcgTWFwLHRoaXMucGxheWVyc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQ9bmV3IE1hcCx0aGlzLnN0YXRlc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMuZGlzYWJsZWROb2Rlcz1uZXcgU2V0LHRoaXMudG90YWxBbmltYXRpb25zPTAsdGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLl9uYW1lc3BhY2VMb29rdXA9e30sdGhpcy5fbmFtZXNwYWNlTGlzdD1bXSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnM9W10sdGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudD1uZXcgTWFwLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cz1bXSx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHM9W10sdGhpcy5vblJlbW92YWxDb21wbGV0ZT0odCxlKT0+e319X29uUmVtb3ZhbENvbXBsZXRlKHQsZSl7dGhpcy5vblJlbW92YWxDb21wbGV0ZSh0LGUpfWdldCBxdWV1ZWRQbGF5ZXJzKCl7Y29uc3QgdD1bXTtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTGlzdC5mb3JFYWNoKChlPT57ZS5wbGF5ZXJzLmZvckVhY2goKGU9PntlLnF1ZXVlZCYmdC5wdXNoKGUpfSkpfSkpLHR9Y3JlYXRlTmFtZXNwYWNlKHQsZSl7Y29uc3Qgbj1uZXcgUU8odCxlLHRoaXMpO3JldHVybiB0aGlzLmJvZHlOb2RlJiZ0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodGhpcy5ib2R5Tm9kZSxlKT90aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChuLGUpOih0aGlzLm5ld0hvc3RFbGVtZW50cy5zZXQoZSxuKSx0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoZSkpLHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XT1ufV9iYWxhbmNlTmFtZXNwYWNlTGlzdCh0LGUpe2NvbnN0IG49dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtpZihuPj0wKXtsZXQgbz0hMTtmb3IobGV0IGk9bjtpPj0wO2ktLSlpZih0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodGhpcy5fbmFtZXNwYWNlTGlzdFtpXS5ob3N0RWxlbWVudCxlKSl7dGhpcy5fbmFtZXNwYWNlTGlzdC5zcGxpY2UoaSsxLDAsdCksbz0hMDticmVha31vfHx0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZSgwLDAsdCl9ZWxzZSB0aGlzLl9uYW1lc3BhY2VMaXN0LnB1c2godCk7cmV0dXJuIHRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuc2V0KGUsdCksdH1yZWdpc3Rlcih0LGUpe2xldCBuPXRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XTtyZXR1cm4gbnx8KG49dGhpcy5jcmVhdGVOYW1lc3BhY2UodCxlKSksbn1yZWdpc3RlclRyaWdnZXIodCxlLG4pe2xldCBvPXRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XTtvJiZvLnJlZ2lzdGVyKGUsbikmJnRoaXMudG90YWxBbmltYXRpb25zKyt9ZGVzdHJveSh0LGUpe2lmKCF0KXJldHVybjtjb25zdCBuPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO3RoaXMuYWZ0ZXJGbHVzaCgoKCk9Pnt0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmRlbGV0ZShuLmhvc3RFbGVtZW50KSxkZWxldGUgdGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdO2NvbnN0IGU9dGhpcy5fbmFtZXNwYWNlTGlzdC5pbmRleE9mKG4pO2U+PTAmJnRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKGUsMSl9KSksdGhpcy5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCgpPT5uLmRlc3Ryb3koZSkpKX1fZmV0Y2hOYW1lc3BhY2UodCl7cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XX1mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQodCl7Y29uc3QgZT1uZXcgU2V0LG49dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO2lmKG4pe2NvbnN0IHQ9T2JqZWN0LmtleXMobik7Zm9yKGxldCBvPTA7bzx0Lmxlbmd0aDtvKyspe2NvbnN0IGk9blt0W29dXS5uYW1lc3BhY2VJZDtpZihpKXtjb25zdCB0PXRoaXMuX2ZldGNoTmFtZXNwYWNlKGkpO3QmJmUuYWRkKHQpfX19cmV0dXJuIGV9dHJpZ2dlcih0LGUsbixvKXtpZihlUChlKSl7Y29uc3QgaT10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTtpZihpKXJldHVybiBpLnRyaWdnZXIoZSxuLG8pLCEwfXJldHVybiExfWluc2VydE5vZGUodCxlLG4sbyl7aWYoIWVQKGUpKXJldHVybjtjb25zdCBpPWUuX19uZ19yZW1vdmVkO2lmKGkmJmkuc2V0Rm9yUmVtb3ZhbCl7aS5zZXRGb3JSZW1vdmFsPSExLGkuc2V0Rm9yTW92ZT0hMDtjb25zdCB0PXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRleE9mKGUpO3Q+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UodCwxKX1pZih0KXtjb25zdCBvPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO28mJm8uaW5zZXJ0Tm9kZShlLG4pfW8mJnRoaXMuY29sbGVjdEVudGVyRWxlbWVudChlKX1jb2xsZWN0RW50ZXJFbGVtZW50KHQpe3RoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5wdXNoKHQpfW1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LGUpe2U/dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyh0KXx8KHRoaXMuZGlzYWJsZWROb2Rlcy5hZGQodCksYVAodCxHTykpOnRoaXMuZGlzYWJsZWROb2Rlcy5oYXModCkmJih0aGlzLmRpc2FibGVkTm9kZXMuZGVsZXRlKHQpLHJQKHQsR08pKX1yZW1vdmVOb2RlKHQsZSxuLG8pe2lmKGVQKGUpKXtjb25zdCBpPXQ/dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk6bnVsbDtpZihpP2kucmVtb3ZlTm9kZShlLG8pOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQodCxlLCExLG8pLG4pe2NvbnN0IG49dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5nZXQoZSk7biYmbi5pZCE9PXQmJm4ucmVtb3ZlTm9kZShlLG8pfX1lbHNlIHRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGUsbyl9bWFya0VsZW1lbnRBc1JlbW92ZWQodCxlLG4sbyl7dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnB1c2goZSksZS5fX25nX3JlbW92ZWQ9e25hbWVzcGFjZUlkOnQsc2V0Rm9yUmVtb3ZhbDpvLGhhc0FuaW1hdGlvbjpuLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExfX1saXN0ZW4odCxlLG4sbyxpKXtyZXR1cm4gZVAoZSk/dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkubGlzdGVuKGUsbixvLGkpOigpPT57fX1fYnVpbGRJbnN0cnVjdGlvbih0LGUsbixvLGkpe3JldHVybiB0LnRyYW5zaXRpb24uYnVpbGQodGhpcy5kcml2ZXIsdC5lbGVtZW50LHQuZnJvbVN0YXRlLnZhbHVlLHQudG9TdGF0ZS52YWx1ZSxuLG8sdC5mcm9tU3RhdGUub3B0aW9ucyx0LnRvU3RhdGUub3B0aW9ucyxlLGkpfWRlc3Ryb3lJbm5lckFuaW1hdGlvbnModCl7bGV0IGU9dGhpcy5kcml2ZXIucXVlcnkodCxMeCwhMCk7ZS5mb3JFYWNoKCh0PT50aGlzLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudCh0KSkpLDAhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuc2l6ZSYmKGU9dGhpcy5kcml2ZXIucXVlcnkodCxWeCwhMCksZS5mb3JFYWNoKCh0PT50aGlzLmZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQodCkpKSl9ZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KHQpe2NvbnN0IGU9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtlJiZlLmZvckVhY2goKHQ9Pnt0LnF1ZXVlZD90Lm1hcmtlZEZvckRlc3Ryb3k9ITA6dC5kZXN0cm95KCl9KSl9ZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudCh0KXtjb25zdCBlPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpO2UmJmUuZm9yRWFjaCgodD0+dC5maW5pc2goKSkpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIG5ldyBQcm9taXNlKCh0PT57aWYodGhpcy5wbGF5ZXJzLmxlbmd0aClyZXR1cm4gaHgodGhpcy5wbGF5ZXJzKS5vbkRvbmUoKCgpPT50KCkpKTt0KCl9KSl9cHJvY2Vzc0xlYXZlTm9kZSh0KXtjb25zdCBlPXQuX19uZ19yZW1vdmVkO2lmKGUmJmUuc2V0Rm9yUmVtb3ZhbCl7aWYodC5fX25nX3JlbW92ZWQ9cU8sZS5uYW1lc3BhY2VJZCl7dGhpcy5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpO2NvbnN0IG49dGhpcy5fZmV0Y2hOYW1lc3BhY2UoZS5uYW1lc3BhY2VJZCk7biYmbi5jbGVhckVsZW1lbnRDYWNoZSh0KX10aGlzLl9vblJlbW92YWxDb21wbGV0ZSh0LGUuc2V0Rm9yUmVtb3ZhbCl9dGhpcy5kcml2ZXIubWF0Y2hlc0VsZW1lbnQodCxXTykmJnRoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsITEpLHRoaXMuZHJpdmVyLnF1ZXJ5KHQsV08sITApLmZvckVhY2goKHQ9Pnt0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LCExKX0pKX1mbHVzaCh0PS0xKXtsZXQgZT1bXTtpZih0aGlzLm5ld0hvc3RFbGVtZW50cy5zaXplJiYodGhpcy5uZXdIb3N0RWxlbWVudHMuZm9yRWFjaCgoKHQsZSk9PnRoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KHQsZSkpKSx0aGlzLm5ld0hvc3RFbGVtZW50cy5jbGVhcigpKSx0aGlzLnRvdGFsQW5pbWF0aW9ucyYmdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aClmb3IobGV0IHQ9MDt0PHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg7dCsrKWFQKHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50c1t0XSwibmctc3Rhci1pbnNlcnRlZCIpO2lmKHRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoJiYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnN8fHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGgpKXtjb25zdCBuPVtdO3RyeXtlPXRoaXMuX2ZsdXNoQW5pbWF0aW9ucyhuLHQpfWZpbmFsbHl7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kyspblt0XSgpfX1lbHNlIGZvcihsZXQgdD0wO3Q8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDt0KyspdGhpcy5wcm9jZXNzTGVhdmVOb2RlKHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1t0XSk7aWYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuX2ZsdXNoRm5zLmZvckVhY2goKHQ9PnQoKSkpLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucy5sZW5ndGgpe2NvbnN0IHQ9dGhpcy5fd2hlblF1aWV0Rm5zO3RoaXMuX3doZW5RdWlldEZucz1bXSxlLmxlbmd0aD9oeChlKS5vbkRvbmUoKCgpPT57dC5mb3JFYWNoKCh0PT50KCkpKX0pKTp0LmZvckVhY2goKHQ9PnQoKSkpfX1yZXBvcnRFcnJvcih0KXt0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwcm9jZXNzIGFuaW1hdGlvbnMgZHVlIHRvIHRoZSBmb2xsb3dpbmcgZmFpbGVkIHRyaWdnZXIgdHJhbnNpdGlvbnNcbiAke3Quam9pbigiXG4iKX1gKX1fZmx1c2hBbmltYXRpb25zKHQsZSl7Y29uc3Qgbj1uZXcgTU8sbz1bXSxpPW5ldyBNYXAsYT1bXSxyPW5ldyBNYXAscz1uZXcgTWFwLGw9bmV3IE1hcCxjPW5ldyBTZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goKHQ9PntjLmFkZCh0KTtjb25zdCBlPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWMuYWRkKGVbdF0pfSkpO2NvbnN0IGQ9dGhpcy5ib2R5Tm9kZSxwPUFycmF5LmZyb20odGhpcy5zdGF0ZXNCeUVsZW1lbnQua2V5cygpKSxtPWlQKHAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzKSx1PW5ldyBNYXA7bGV0IGY9MDttLmZvckVhY2goKCh0LGUpPT57Y29uc3Qgbj1JeCtmKys7dS5zZXQoZSxuKSx0LmZvckVhY2goKHQ9PmFQKHQsbikpKX0pKTtjb25zdCBnPVtdLGg9bmV3IFNldCxiPW5ldyBTZXQ7Zm9yKGxldCB0PTA7dDx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO3QrKyl7Y29uc3QgZT10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbdF0sbj1lLl9fbmdfcmVtb3ZlZDtuJiZuLnNldEZvclJlbW92YWwmJihnLnB1c2goZSksaC5hZGQoZSksbi5oYXNBbmltYXRpb24/dGhpcy5kcml2ZXIucXVlcnkoZSwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKCh0PT5oLmFkZCh0KSkpOmIuYWRkKGUpKX1jb25zdCB5PW5ldyBNYXAsXz1pUChwLEFycmF5LmZyb20oaCkpO18uZm9yRWFjaCgoKHQsZSk9Pntjb25zdCBuPUh4K2YrKzt5LnNldChlLG4pLHQuZm9yRWFjaCgodD0+YVAodCxuKSkpfSkpLHQucHVzaCgoKCk9PnttLmZvckVhY2goKCh0LGUpPT57Y29uc3Qgbj11LmdldChlKTt0LmZvckVhY2goKHQ9PnJQKHQsbikpKX0pKSxfLmZvckVhY2goKCh0LGUpPT57Y29uc3Qgbj15LmdldChlKTt0LmZvckVhY2goKHQ9PnJQKHQsbikpKX0pKSxnLmZvckVhY2goKHQ9Pnt0aGlzLnByb2Nlc3NMZWF2ZU5vZGUodCl9KSl9KSk7Y29uc3QgQz1bXSxNPVtdO2ZvcihsZXQgdD10aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aC0xO3Q+PTA7dC0tKXRoaXMuX25hbWVzcGFjZUxpc3RbdF0uZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyhlKS5mb3JFYWNoKCh0PT57Y29uc3QgZT10LnBsYXllcixpPXQuZWxlbWVudDtpZihDLnB1c2goZSksdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7Y29uc3QgdD1pLl9fbmdfcmVtb3ZlZDtpZih0JiZ0LnNldEZvck1vdmUpcmV0dXJuIHZvaWQgZS5kZXN0cm95KCl9Y29uc3QgYz0hZHx8IXRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudChkLGkpLHA9eS5nZXQoaSksbT11LmdldChpKSxmPXRoaXMuX2J1aWxkSW5zdHJ1Y3Rpb24odCxuLG0scCxjKTtpZihmLmVycm9ycyYmZi5lcnJvcnMubGVuZ3RoKU0ucHVzaChmKTtlbHNle2lmKGMpcmV0dXJuIGUub25TdGFydCgoKCk9Pkt4KGksZi5mcm9tU3R5bGVzKSkpLGUub25EZXN0cm95KCgoKT0+WHgoaSxmLnRvU3R5bGVzKSkpLHZvaWQgby5wdXNoKGUpO2lmKHQuaXNGYWxsYmFja1RyYW5zaXRpb24pcmV0dXJuIGUub25TdGFydCgoKCk9Pkt4KGksZi5mcm9tU3R5bGVzKSkpLGUub25EZXN0cm95KCgoKT0+WHgoaSxmLnRvU3R5bGVzKSkpLHZvaWQgby5wdXNoKGUpO2YudGltZWxpbmVzLmZvckVhY2goKHQ9PnQuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9ITApKSxuLmFwcGVuZChpLGYudGltZWxpbmVzKSxhLnB1c2goe2luc3RydWN0aW9uOmYscGxheWVyOmUsZWxlbWVudDppfSksZi5xdWVyaWVkRWxlbWVudHMuZm9yRWFjaCgodD0+TXgocix0LFtdKS5wdXNoKGUpKSksZi5wcmVTdHlsZVByb3BzLmZvckVhY2goKCh0LGUpPT57Y29uc3Qgbj1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCl7bGV0IHQ9cy5nZXQoZSk7dHx8cy5zZXQoZSx0PW5ldyBTZXQpLG4uZm9yRWFjaCgoZT0+dC5hZGQoZSkpKX19KSksZi5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKCgodCxlKT0+e2NvbnN0IG49T2JqZWN0LmtleXModCk7bGV0IG89bC5nZXQoZSk7b3x8bC5zZXQoZSxvPW5ldyBTZXQpLG4uZm9yRWFjaCgodD0+by5hZGQodCkpKX0pKX19KSk7aWYoTS5sZW5ndGgpe2NvbnN0IHQ9W107TS5mb3JFYWNoKChlPT57dC5wdXNoKGBAJHtlLnRyaWdnZXJOYW1lfSBoYXMgZmFpbGVkIGR1ZSB0bzpcbmApLGUuZXJyb3JzLmZvckVhY2goKGU9PnQucHVzaChgLSAke2V9XG5gKSkpfSkpLEMuZm9yRWFjaCgodD0+dC5kZXN0cm95KCkpKSx0aGlzLnJlcG9ydEVycm9yKHQpfWNvbnN0IHY9bmV3IE1hcCx4PW5ldyBNYXA7YS5mb3JFYWNoKCh0PT57Y29uc3QgZT10LmVsZW1lbnQ7bi5oYXMoZSkmJih4LnNldChlLGUpLHRoaXMuX2JlZm9yZUFuaW1hdGlvbkJ1aWxkKHQucGxheWVyLm5hbWVzcGFjZUlkLHQuaW5zdHJ1Y3Rpb24sdikpfSkpLG8uZm9yRWFjaCgodD0+e2NvbnN0IGU9dC5lbGVtZW50O3RoaXMuX2dldFByZXZpb3VzUGxheWVycyhlLCExLHQubmFtZXNwYWNlSWQsdC50cmlnZ2VyTmFtZSxudWxsKS5mb3JFYWNoKCh0PT57TXgodixlLFtdKS5wdXNoKHQpLHQuZGVzdHJveSgpfSkpfSkpO2NvbnN0IE89Zy5maWx0ZXIoKHQ9PmNQKHQscyxsKSkpLFA9bmV3IE1hcDtvUChQLHRoaXMuZHJpdmVyLGIsbCxleCkuZm9yRWFjaCgodD0+e2NQKHQscyxsKSYmTy5wdXNoKHQpfSkpO2NvbnN0IHc9bmV3IE1hcDttLmZvckVhY2goKCh0LGUpPT57b1Aodyx0aGlzLmRyaXZlcixuZXcgU2V0KHQpLHMsIiEiKX0pKSxPLmZvckVhY2goKHQ9Pntjb25zdCBlPVAuZ2V0KHQpLG49dy5nZXQodCk7UC5zZXQodCxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSksbikpfSkpO2NvbnN0IGs9W10sUz1bXSxEPXt9O2EuZm9yRWFjaCgodD0+e2NvbnN0e2VsZW1lbnQ6ZSxwbGF5ZXI6YSxpbnN0cnVjdGlvbjpyfT10O2lmKG4uaGFzKGUpKXtpZihjLmhhcyhlKSlyZXR1cm4gYS5vbkRlc3Ryb3koKCgpPT5YeChlLHIudG9TdHlsZXMpKSksYS5kaXNhYmxlZD0hMCxhLm92ZXJyaWRlVG90YWxUaW1lKHIudG90YWxUaW1lKSx2b2lkIG8ucHVzaChhKTtsZXQgdD1EO2lmKHguc2l6ZT4xKXtsZXQgbj1lO2NvbnN0IG89W107Zm9yKDtuPW4ucGFyZW50Tm9kZTspe2NvbnN0IGU9eC5nZXQobik7aWYoZSl7dD1lO2JyZWFrfW8ucHVzaChuKX1vLmZvckVhY2goKGU9Pnguc2V0KGUsdCkpKX1jb25zdCBuPXRoaXMuX2J1aWxkQW5pbWF0aW9uKGEubmFtZXNwYWNlSWQscix2LGksdyxQKTtpZihhLnNldFJlYWxQbGF5ZXIobiksdD09PUQpay5wdXNoKGEpO2Vsc2V7Y29uc3QgZT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2UmJmUubGVuZ3RoJiYoYS5wYXJlbnRQbGF5ZXI9aHgoZSkpLG8ucHVzaChhKX19ZWxzZSBLeChlLHIuZnJvbVN0eWxlcyksYS5vbkRlc3Ryb3koKCgpPT5YeChlLHIudG9TdHlsZXMpKSksUy5wdXNoKGEpLGMuaGFzKGUpJiZvLnB1c2goYSl9KSksUy5mb3JFYWNoKCh0PT57Y29uc3QgZT1pLmdldCh0LmVsZW1lbnQpO2lmKGUmJmUubGVuZ3RoKXtjb25zdCBuPWh4KGUpO3Quc2V0UmVhbFBsYXllcihuKX19KSksby5mb3JFYWNoKCh0PT57dC5wYXJlbnRQbGF5ZXI/dC5zeW5jUGxheWVyRXZlbnRzKHQucGFyZW50UGxheWVyKTp0LmRlc3Ryb3koKX0pKTtmb3IobGV0IHQ9MDt0PGcubGVuZ3RoO3QrKyl7Y29uc3QgZT1nW3RdLG49ZS5fX25nX3JlbW92ZWQ7aWYoclAoZSxIeCksbiYmbi5oYXNBbmltYXRpb24pY29udGludWU7bGV0IG89W107aWYoci5zaXplKXtsZXQgdD1yLmdldChlKTt0JiZ0Lmxlbmd0aCYmby5wdXNoKC4uLnQpO2xldCBuPXRoaXMuZHJpdmVyLnF1ZXJ5KGUsVngsITApO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtsZXQgZT1yLmdldChuW3RdKTtlJiZlLmxlbmd0aCYmby5wdXNoKC4uLmUpfX1jb25zdCBpPW8uZmlsdGVyKCh0PT4hdC5kZXN0cm95ZWQpKTtpLmxlbmd0aD9zUCh0aGlzLGUsaSk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKGUpfXJldHVybiBnLmxlbmd0aD0wLGsuZm9yRWFjaCgodD0+e3RoaXMucGxheWVycy5wdXNoKHQpLHQub25Eb25lKCgoKT0+e3QuZGVzdHJveSgpO2NvbnN0IGU9dGhpcy5wbGF5ZXJzLmluZGV4T2YodCk7dGhpcy5wbGF5ZXJzLnNwbGljZShlLDEpfSkpLHQucGxheSgpfSkpLGt9ZWxlbWVudENvbnRhaW5zRGF0YSh0LGUpe2xldCBuPSExO2NvbnN0IG89ZS5fX25nX3JlbW92ZWQ7cmV0dXJuIG8mJm8uc2V0Rm9yUmVtb3ZhbCYmKG49ITApLHRoaXMucGxheWVyc0J5RWxlbWVudC5oYXMoZSkmJihuPSEwKSx0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmhhcyhlKSYmKG49ITApLHRoaXMuc3RhdGVzQnlFbGVtZW50LmhhcyhlKSYmKG49ITApLHRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpLmVsZW1lbnRDb250YWluc0RhdGEoZSl8fG59YWZ0ZXJGbHVzaCh0KXt0aGlzLl9mbHVzaEZucy5wdXNoKHQpfWFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSh0KXt0aGlzLl93aGVuUXVpZXRGbnMucHVzaCh0KX1fZ2V0UHJldmlvdXNQbGF5ZXJzKHQsZSxuLG8saSl7bGV0IGE9W107aWYoZSl7Y29uc3QgZT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTtlJiYoYT1lKX1lbHNle2NvbnN0IGU9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtpZihlKXtjb25zdCB0PSFpfHxpPT1LTztlLmZvckVhY2goKGU9PntlLnF1ZXVlZHx8KHR8fGUudHJpZ2dlck5hbWU9PW8pJiZhLnB1c2goZSl9KSl9fXJldHVybihufHxvKSYmKGE9YS5maWx0ZXIoKHQ9PiEobiYmbiE9dC5uYW1lc3BhY2VJZHx8byYmbyE9dC50cmlnZ2VyTmFtZSkpKSksYX1fYmVmb3JlQW5pbWF0aW9uQnVpbGQodCxlLG4pe2NvbnN0IG89ZS5lbGVtZW50LGk9ZS5pc1JlbW92YWxUcmFuc2l0aW9uP3ZvaWQgMDp0LGE9ZS5pc1JlbW92YWxUcmFuc2l0aW9uP3ZvaWQgMDplLnRyaWdnZXJOYW1lO2Zvcihjb25zdCB0IG9mIGUudGltZWxpbmVzKXtjb25zdCByPXQuZWxlbWVudCxzPXIhPT1vLGw9TXgobixyLFtdKTt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMocixzLGksYSxlLnRvU3RhdGUpLmZvckVhY2goKHQ9Pntjb25zdCBlPXQuZ2V0UmVhbFBsYXllcigpO2UuYmVmb3JlRGVzdHJveSYmZS5iZWZvcmVEZXN0cm95KCksdC5kZXN0cm95KCksbC5wdXNoKHQpfSkpfUt4KG8sZS5mcm9tU3R5bGVzKX1fYnVpbGRBbmltYXRpb24odCxlLG4sbyxpLGEpe2NvbnN0IHI9ZS50cmlnZ2VyTmFtZSxzPWUuZWxlbWVudCxsPVtdLGM9bmV3IFNldCxkPW5ldyBTZXQscD1lLnRpbWVsaW5lcy5tYXAoKGU9Pntjb25zdCBwPWUuZWxlbWVudDtjLmFkZChwKTtjb25zdCBtPXAuX19uZ19yZW1vdmVkO2lmKG0mJm0ucmVtb3ZlZEJlZm9yZVF1ZXJpZWQpcmV0dXJuIG5ldyBteChlLmR1cmF0aW9uLGUuZGVsYXkpO2NvbnN0IHU9cCE9PXMsZj0oZnVuY3Rpb24gZyh0KXtjb25zdCBlPVtdO3JldHVybiBsUCh0LGUpLGV9KSgobi5nZXQocCl8fFlPKS5tYXAoKHQ9PnQuZ2V0UmVhbFBsYXllcigpKSkpLmZpbHRlcigodD0+ISF0LmVsZW1lbnQmJnQuZWxlbWVudD09PXApKSxoPWkuZ2V0KHApLGI9YS5nZXQocCkseT1ieCgwLHRoaXMuX25vcm1hbGl6ZXIsMCxlLmtleWZyYW1lcyxoLGIpLF89dGhpcy5fYnVpbGRQbGF5ZXIoZSx5LGYpO2lmKGUuc3ViVGltZWxpbmUmJm8mJmQuYWRkKHApLHUpe2NvbnN0IGU9bmV3IHRQKHQscixwKTtlLnNldFJlYWxQbGF5ZXIoXyksbC5wdXNoKGUpfXJldHVybiBffSkpO2wuZm9yRWFjaCgodD0+e014KHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsdC5lbGVtZW50LFtdKS5wdXNoKHQpLHQub25Eb25lKCgoKT0+KGZ1bmN0aW9uIGUodCxuLG8pe2xldCBpO2lmKHQgaW5zdGFuY2VvZiBNYXApe2lmKGk9dC5nZXQobiksaSl7aWYoaS5sZW5ndGgpe2NvbnN0IHQ9aS5pbmRleE9mKG8pO2kuc3BsaWNlKHQsMSl9MD09aS5sZW5ndGgmJnQuZGVsZXRlKG4pfX1lbHNlIGlmKGk9dFtuXSxpKXtpZihpLmxlbmd0aCl7Y29uc3QgdD1pLmluZGV4T2Yobyk7aS5zcGxpY2UodCwxKX0wPT1pLmxlbmd0aCYmZGVsZXRlIHRbbl19cmV0dXJuIGl9KSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LHQuZWxlbWVudCx0KSkpfSkpLGMuZm9yRWFjaCgodD0+YVAodCxCeCkpKTtjb25zdCBtPWh4KHApO3JldHVybiBtLm9uRGVzdHJveSgoKCk9PntjLmZvckVhY2goKHQ9PnJQKHQsQngpKSksWHgocyxlLnRvU3R5bGVzKX0pKSxkLmZvckVhY2goKHQ9PntNeChvLHQsW10pLnB1c2gobSl9KSksbX1fYnVpbGRQbGF5ZXIodCxlLG4pe3JldHVybiBlLmxlbmd0aD4wP3RoaXMuZHJpdmVyLmFuaW1hdGUodC5lbGVtZW50LGUsdC5kdXJhdGlvbix0LmRlbGF5LHQuZWFzaW5nLG4pOm5ldyBteCh0LmR1cmF0aW9uLHQuZGVsYXkpfX1jbGFzcyB0UHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5uYW1lc3BhY2VJZD10LHRoaXMudHJpZ2dlck5hbWU9ZSx0aGlzLmVsZW1lbnQ9bix0aGlzLl9wbGF5ZXI9bmV3IG14LHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9e30sdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5tYXJrZWRGb3JEZXN0cm95PSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5xdWV1ZWQ9ITAsdGhpcy50b3RhbFRpbWU9MH1zZXRSZWFsUGxheWVyKHQpe3RoaXMuX2NvbnRhaW5zUmVhbFBsYXllcnx8KHRoaXMuX3BsYXllcj10LE9iamVjdC5rZXlzKHRoaXMuX3F1ZXVlZENhbGxiYWNrcykuZm9yRWFjaCgoZT0+e3RoaXMuX3F1ZXVlZENhbGxiYWNrc1tlXS5mb3JFYWNoKChuPT55eCh0LGUsdm9pZCAwLG4pKSl9KSksdGhpcy5fcXVldWVkQ2FsbGJhY2tzPXt9LHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMCx0aGlzLm92ZXJyaWRlVG90YWxUaW1lKHQudG90YWxUaW1lKSx0aGlzLnF1ZXVlZD0hMSl9Z2V0UmVhbFBsYXllcigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9b3ZlcnJpZGVUb3RhbFRpbWUodCl7dGhpcy50b3RhbFRpbWU9dH1zeW5jUGxheWVyRXZlbnRzKHQpe2NvbnN0IGU9dGhpcy5fcGxheWVyO2UudHJpZ2dlckNhbGxiYWNrJiZ0Lm9uU3RhcnQoKCgpPT5lLnRyaWdnZXJDYWxsYmFjaygic3RhcnQiKSkpLHQub25Eb25lKCgoKT0+dGhpcy5maW5pc2goKSkpLHQub25EZXN0cm95KCgoKT0+dGhpcy5kZXN0cm95KCkpKX1fcXVldWVFdmVudCh0LGUpe014KHRoaXMuX3F1ZXVlZENhbGxiYWNrcyx0LFtdKS5wdXNoKGUpfW9uRG9uZSh0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZG9uZSIsdCksdGhpcy5fcGxheWVyLm9uRG9uZSh0KX1vblN0YXJ0KHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJzdGFydCIsdCksdGhpcy5fcGxheWVyLm9uU3RhcnQodCl9b25EZXN0cm95KHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkZXN0cm95Iix0KSx0aGlzLl9wbGF5ZXIub25EZXN0cm95KHQpfWluaXQoKXt0aGlzLl9wbGF5ZXIuaW5pdCgpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4hdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5oYXNTdGFydGVkKCl9cGxheSgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBsYXkoKX1wYXVzZSgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBhdXNlKCl9cmVzdGFydCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc3RhcnQoKX1maW5pc2goKXt0aGlzLl9wbGF5ZXIuZmluaXNoKCl9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuX3BsYXllci5kZXN0cm95KCl9cmVzZXQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXNldCgpfXNldFBvc2l0aW9uKHQpe3RoaXMucXVldWVkfHx0aGlzLl9wbGF5ZXIuc2V0UG9zaXRpb24odCl9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5xdWV1ZWQ/MDp0aGlzLl9wbGF5ZXIuZ2V0UG9zaXRpb24oKX10cmlnZ2VyQ2FsbGJhY2sodCl7Y29uc3QgZT10aGlzLl9wbGF5ZXI7ZS50cmlnZ2VyQ2FsbGJhY2smJmUudHJpZ2dlckNhbGxiYWNrKHQpfX1mdW5jdGlvbiBlUCh0KXtyZXR1cm4gdCYmMT09PXQubm9kZVR5cGV9ZnVuY3Rpb24gblAodCxlKXtjb25zdCBuPXQuc3R5bGUuZGlzcGxheTtyZXR1cm4gdC5zdHlsZS5kaXNwbGF5PW51bGwhPWU/ZToibm9uZSIsbn1mdW5jdGlvbiBvUCh0LGUsbixvLGkpe2NvbnN0IGE9W107bi5mb3JFYWNoKCh0PT5hLnB1c2goblAodCkpKSk7Y29uc3Qgcj1bXTtvLmZvckVhY2goKChuLG8pPT57Y29uc3QgYT17fTtuLmZvckVhY2goKHQ9Pntjb25zdCBuPWFbdF09ZS5jb21wdXRlU3R5bGUobyx0LGkpO24mJjAhPW4ubGVuZ3RofHwoby5fX25nX3JlbW92ZWQ9Wk8sci5wdXNoKG8pKX0pKSx0LnNldChvLGEpfSkpO2xldCBzPTA7cmV0dXJuIG4uZm9yRWFjaCgodD0+blAodCxhW3MrK10pKSkscn1mdW5jdGlvbiBpUCh0LGUpe2NvbnN0IG49bmV3IE1hcDtpZih0LmZvckVhY2goKHQ9Pm4uc2V0KHQsW10pKSksMD09ZS5sZW5ndGgpcmV0dXJuIG47Y29uc3Qgbz1uZXcgU2V0KGUpLGk9bmV3IE1hcDtmdW5jdGlvbiBhKHQpe2lmKCF0KXJldHVybiAxO2xldCBlPWkuZ2V0KHQpO2lmKGUpcmV0dXJuIGU7Y29uc3Qgcj10LnBhcmVudE5vZGU7cmV0dXJuIGU9bi5oYXMocik/cjpvLmhhcyhyKT8xOmEociksaS5zZXQodCxlKSxlfXJldHVybiBlLmZvckVhY2goKHQ9Pntjb25zdCBlPWEodCk7MSE9PWUmJm4uZ2V0KGUpLnB1c2godCl9KSksbn1mdW5jdGlvbiBhUCh0LGUpe2lmKHQuY2xhc3NMaXN0KXQuY2xhc3NMaXN0LmFkZChlKTtlbHNle2xldCBuPXQuJCRjbGFzc2VzO258fChuPXQuJCRjbGFzc2VzPXt9KSxuW2VdPSEwfX1mdW5jdGlvbiByUCh0LGUpe2lmKHQuY2xhc3NMaXN0KXQuY2xhc3NMaXN0LnJlbW92ZShlKTtlbHNle2xldCBuPXQuJCRjbGFzc2VzO24mJmRlbGV0ZSBuW2VdfX1mdW5jdGlvbiBzUCh0LGUsbil7aHgobikub25Eb25lKCgoKT0+dC5wcm9jZXNzTGVhdmVOb2RlKGUpKSl9ZnVuY3Rpb24gbFAodCxlKXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7Y29uc3Qgbz10W25dO28gaW5zdGFuY2VvZiB1eD9sUChvLnBsYXllcnMsZSk6ZS5wdXNoKG8pfX1mdW5jdGlvbiBjUCh0LGUsbil7Y29uc3Qgbz1uLmdldCh0KTtpZighbylyZXR1cm4hMTtsZXQgaT1lLmdldCh0KTtyZXR1cm4gaT9vLmZvckVhY2goKHQ9PmkuYWRkKHQpKSk6ZS5zZXQodCxvKSxuLmRlbGV0ZSh0KSwhMH1jbGFzcyBkUHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5ib2R5Tm9kZT10LHRoaXMuX2RyaXZlcj1lLHRoaXMuX25vcm1hbGl6ZXI9bix0aGlzLl90cmlnZ2VyQ2FjaGU9e30sdGhpcy5vblJlbW92YWxDb21wbGV0ZT0odCxlKT0+e30sdGhpcy5fdHJhbnNpdGlvbkVuZ2luZT1uZXcgJE8odCxlLG4pLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBqTyh0LGUsbiksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT0odCxlKT0+dGhpcy5vblJlbW92YWxDb21wbGV0ZSh0LGUpfXJlZ2lzdGVyVHJpZ2dlcih0LGUsbixvLGkpe2NvbnN0IGE9dCsiLSIrbztsZXQgcj10aGlzLl90cmlnZ2VyQ2FjaGVbYV07aWYoIXIpe2NvbnN0IHQ9W10sZT1mTyh0aGlzLl9kcml2ZXIsaSx0KTtpZih0Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBhbmltYXRpb24gdHJpZ2dlciAiJHtvfSIgaGFzIGZhaWxlZCB0byBidWlsZCBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4gLSAke3Quam9pbigiXG4gLSAiKX1gKTtyPShmdW5jdGlvbiBuKHQsZSxvKXtyZXR1cm4gbmV3IExPKHQsZSxvKX0pKG8sZSx0aGlzLl9ub3JtYWxpemVyKSx0aGlzLl90cmlnZ2VyQ2FjaGVbYV09cn10aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihlLG8scil9cmVnaXN0ZXIodCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyKHQsZSl9ZGVzdHJveSh0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZGVzdHJveSh0LGUpfW9uSW5zZXJ0KHQsZSxuLG8pe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuaW5zZXJ0Tm9kZSh0LGUsbixvKX1vblJlbW92ZSh0LGUsbixvKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlbW92ZU5vZGUodCxlLG98fCExLG4pfWRpc2FibGVBbmltYXRpb25zKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCxlKX1wcm9jZXNzKHQsZSxuLG8pe2lmKCJAIj09bi5jaGFyQXQoMCkpe2NvbnN0W3QsaV09dngobik7dGhpcy5fdGltZWxpbmVFbmdpbmUuY29tbWFuZCh0LGUsaSxvKX1lbHNlIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUudHJpZ2dlcih0LGUsbixvKX1saXN0ZW4odCxlLG4sbyxpKXtpZigiQCI9PW4uY2hhckF0KDApKXtjb25zdFt0LG9dPXZ4KG4pO3JldHVybiB0aGlzLl90aW1lbGluZUVuZ2luZS5saXN0ZW4odCxlLG8saSl9cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUubGlzdGVuKHQsZSxuLG8saSl9Zmx1c2godD0tMSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5mbHVzaCh0KX1nZXQgcGxheWVycygpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMuY29uY2F0KHRoaXMuX3RpbWVsaW5lRW5naW5lLnBsYXllcnMpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHBQKHQsZSl7bGV0IG49bnVsbCxvPW51bGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPyhuPXVQKGVbMF0pLGUubGVuZ3RoPjEmJihvPXVQKGVbZS5sZW5ndGgtMV0pKSk6ZSYmKG49dVAoZSkpLG58fG8/bmV3IG1QKHQsbixvKTpudWxsfWNsYXNzIG1Qe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fc3RhcnRTdHlsZXM9ZSx0aGlzLl9lbmRTdHlsZXM9bix0aGlzLl9zdGF0ZT0wO2xldCBvPW1QLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZ2V0KHQpO298fG1QLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuc2V0KHQsbz17fSksdGhpcy5faW5pdGlhbFN0eWxlcz1vfXN0YXJ0KCl7dGhpcy5fc3RhdGU8MSYmKHRoaXMuX3N0YXJ0U3R5bGVzJiZYeCh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzLHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTEpfWZpbmlzaCgpe3RoaXMuc3RhcnQoKSx0aGlzLl9zdGF0ZTwyJiYoWHgodGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXMmJihYeCh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX3N0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmZpbmlzaCgpLHRoaXMuX3N0YXRlPDMmJihtUC5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmRlbGV0ZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9zdGFydFN0eWxlcyYmKEt4KHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9lbmRTdHlsZXMmJihLeCh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLFh4KHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9Myl9fWZ1bmN0aW9uIHVQKHQpe2xldCBlPW51bGw7Y29uc3Qgbj1PYmplY3Qua2V5cyh0KTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKyl7Y29uc3QgaT1uW29dO2ZQKGkpJiYoZT1lfHx7fSxlW2ldPXRbaV0pfXJldHVybiBlfWZ1bmN0aW9uIGZQKHQpe3JldHVybiJkaXNwbGF5Ij09PXR8fCJwb3NpdGlvbiI9PT10fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9tUC5pbml0aWFsU3R5bGVzQnlFbGVtZW50PW5ldyBXZWFrTWFwO2NvbnN0IGdQPSJhbmltYXRpb24iLGhQPSJhbmltYXRpb25lbmQiO2NsYXNzIGJQe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIpe3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9uYW1lPWUsdGhpcy5fZHVyYXRpb249bix0aGlzLl9kZWxheT1vLHRoaXMuX2Vhc2luZz1pLHRoaXMuX2ZpbGxNb2RlPWEsdGhpcy5fb25Eb25lRm49cix0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fc3RhcnRUaW1lPTAsdGhpcy5fcG9zaXRpb249MCx0aGlzLl9ldmVudEZuPXQ9PnRoaXMuX2hhbmRsZUNhbGxiYWNrKHQpfWFwcGx5KCl7IShmdW5jdGlvbiB0KGUsbil7Y29uc3Qgbz14UChlLCIiKS50cmltKCk7bGV0IGk9MDtvLmxlbmd0aCYmKChmdW5jdGlvbiBhKHQsZSl7bGV0IG49MDtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl0LmNoYXJBdChvKT09PWUmJm4rKztyZXR1cm4gbn0pKG8sIiwiKSsxLG49YCR7b30sICR7bn1gKSx2UChlLCIiLG4pfSkodGhpcy5fZWxlbWVudCxgJHt0aGlzLl9kdXJhdGlvbn1tcyAke3RoaXMuX2Vhc2luZ30gJHt0aGlzLl9kZWxheX1tcyAxIG5vcm1hbCAke3RoaXMuX2ZpbGxNb2RlfSAke3RoaXMuX25hbWV9YCksTVAodGhpcy5fZWxlbWVudCx0aGlzLl9ldmVudEZuLCExKSx0aGlzLl9zdGFydFRpbWU9RGF0ZS5ub3coKX1wYXVzZSgpe3lQKHRoaXMuX2VsZW1lbnQsdGhpcy5fbmFtZSwicGF1c2VkIil9cmVzdW1lKCl7eVAodGhpcy5fZWxlbWVudCx0aGlzLl9uYW1lLCJydW5uaW5nIil9c2V0UG9zaXRpb24odCl7Y29uc3QgZT1fUCh0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUpO3RoaXMuX3Bvc2l0aW9uPXQqdGhpcy5fZHVyYXRpb24sdlAodGhpcy5fZWxlbWVudCwiRGVsYXkiLGAtJHt0aGlzLl9wb3NpdGlvbn1tc2AsZSl9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259X2hhbmRsZUNhbGxiYWNrKHQpe2NvbnN0IGU9dC5fbmdUZXN0TWFudWFsVGltZXN0YW1wfHxEYXRlLm5vdygpLG49MWUzKnBhcnNlRmxvYXQodC5lbGFwc2VkVGltZS50b0ZpeGVkKDMpKTt0LmFuaW1hdGlvbk5hbWU9PXRoaXMuX25hbWUmJk1hdGgubWF4KGUtdGhpcy5fc3RhcnRUaW1lLDApPj10aGlzLl9kZWxheSYmbj49dGhpcy5fZHVyYXRpb24mJnRoaXMuZmluaXNoKCl9ZmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbigpLE1QKHRoaXMuX2VsZW1lbnQsdGhpcy5fZXZlbnRGbiwhMCkpfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5maW5pc2goKSwoZnVuY3Rpb24gdChlLG4pe2NvbnN0IG89eFAoZSwiIikuc3BsaXQoIiwiKSxpPUNQKG8sbik7aT49MCYmKG8uc3BsaWNlKGksMSksdlAoZSwiIixvLmpvaW4oIiwiKSkpfSkodGhpcy5fZWxlbWVudCx0aGlzLl9uYW1lKSl9fWZ1bmN0aW9uIHlQKHQsZSxuKXt2UCh0LCJQbGF5U3RhdGUiLG4sX1AodCxlKSl9ZnVuY3Rpb24gX1AodCxlKXtjb25zdCBuPXhQKHQsIiIpO3JldHVybiBuLmluZGV4T2YoIiwiKT4wP0NQKG4uc3BsaXQoIiwiKSxlKTpDUChbbl0sZSl9ZnVuY3Rpb24gQ1AodCxlKXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dLmluZGV4T2YoZSk+PTApcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gTVAodCxlLG4pe24/dC5yZW1vdmVFdmVudExpc3RlbmVyKGhQLGUpOnQuYWRkRXZlbnRMaXN0ZW5lcihoUCxlKX1mdW5jdGlvbiB2UCh0LGUsbixvKXtjb25zdCBpPWdQK2U7aWYobnVsbCE9byl7Y29uc3QgZT10LnN0eWxlW2ldO2lmKGUubGVuZ3RoKXtjb25zdCB0PWUuc3BsaXQoIiwiKTt0W29dPW4sbj10LmpvaW4oIiwiKX19dC5zdHlsZVtpXT1ufWZ1bmN0aW9uIHhQKHQsZSl7cmV0dXJuIHQuc3R5bGVbZ1ArZV18fCIifWNsYXNzIE9Qe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyl7dGhpcy5lbGVtZW50PXQsdGhpcy5rZXlmcmFtZXM9ZSx0aGlzLmFuaW1hdGlvbk5hbWU9bix0aGlzLl9kdXJhdGlvbj1vLHRoaXMuX2RlbGF5PWksdGhpcy5fZmluYWxTdHlsZXM9cix0aGlzLl9zcGVjaWFsU3R5bGVzPXMsdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuY3VycmVudFNuYXBzaG90PXt9LHRoaXMuX3N0YXRlPTAsdGhpcy5lYXNpbmc9YXx8ImxpbmVhciIsdGhpcy50b3RhbFRpbWU9bytpLHRoaXMuX2J1aWxkU3R5bGVyKCl9b25TdGFydCh0KXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9b25Eb25lKHQpe3RoaXMuX29uRG9uZUZucy5wdXNoKHQpfW9uRGVzdHJveSh0KXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaCh0KX1kZXN0cm95KCl7dGhpcy5pbml0KCksdGhpcy5fc3RhdGU+PTR8fCh0aGlzLl9zdGF0ZT00LHRoaXMuX3N0eWxlci5kZXN0cm95KCksdGhpcy5fZmx1c2hTdGFydEZucygpLHRoaXMuX2ZsdXNoRG9uZUZucygpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZGVzdHJveSgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfV9mbHVzaERvbmVGbnMoKXt0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCgodD0+dCgpKSksdGhpcy5fb25Eb25lRm5zPVtdfV9mbHVzaFN0YXJ0Rm5zKCl7dGhpcy5fb25TdGFydEZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdfWZpbmlzaCgpe3RoaXMuaW5pdCgpLHRoaXMuX3N0YXRlPj0zfHwodGhpcy5fc3RhdGU9Myx0aGlzLl9zdHlsZXIuZmluaXNoKCksdGhpcy5fZmx1c2hTdGFydEZucygpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fZmx1c2hEb25lRm5zKCkpfXNldFBvc2l0aW9uKHQpe3RoaXMuX3N0eWxlci5zZXRQb3NpdGlvbih0KX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLl9zdHlsZXIuZ2V0UG9zaXRpb24oKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXRlPj0yfWluaXQoKXt0aGlzLl9zdGF0ZT49MXx8KHRoaXMuX3N0YXRlPTEsdGhpcy5fc3R5bGVyLmFwcGx5KCksdGhpcy5fZGVsYXkmJnRoaXMuX3N0eWxlci5wYXVzZSgpKX1wbGF5KCl7dGhpcy5pbml0KCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9mbHVzaFN0YXJ0Rm5zKCksdGhpcy5fc3RhdGU9Mix0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLnN0YXJ0KCkpLHRoaXMuX3N0eWxlci5yZXN1bWUoKX1wYXVzZSgpe3RoaXMuaW5pdCgpLHRoaXMuX3N0eWxlci5wYXVzZSgpfXJlc3RhcnQoKXt0aGlzLnJlc2V0KCksdGhpcy5wbGF5KCl9cmVzZXQoKXt0aGlzLl9zdGF0ZT0wLHRoaXMuX3N0eWxlci5kZXN0cm95KCksdGhpcy5fYnVpbGRTdHlsZXIoKSx0aGlzLl9zdHlsZXIuYXBwbHkoKX1fYnVpbGRTdHlsZXIoKXt0aGlzLl9zdHlsZXI9bmV3IGJQKHRoaXMuZWxlbWVudCx0aGlzLmFuaW1hdGlvbk5hbWUsdGhpcy5fZHVyYXRpb24sdGhpcy5fZGVsYXksdGhpcy5lYXNpbmcsImZvcndhcmRzIiwoKCk9PnRoaXMuZmluaXNoKCkpKX10cmlnZ2VyQ2FsbGJhY2sodCl7Y29uc3QgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaCgodD0+dCgpKSksZS5sZW5ndGg9MH1iZWZvcmVEZXN0cm95KCl7dGhpcy5pbml0KCk7Y29uc3QgdD17fTtpZih0aGlzLmhhc1N0YXJ0ZWQoKSl7Y29uc3QgZT10aGlzLl9zdGF0ZT49MztPYmplY3Qua2V5cyh0aGlzLl9maW5hbFN0eWxlcykuZm9yRWFjaCgobj0+eyJvZmZzZXQiIT1uJiYodFtuXT1lP3RoaXMuX2ZpbmFsU3R5bGVzW25dOnNPKHRoaXMuZWxlbWVudCxuKSl9KSl9dGhpcy5jdXJyZW50U25hcHNob3Q9dH19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFBQIGV4dGVuZHMgbXh7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuZWxlbWVudD10LHRoaXMuX3N0YXJ0aW5nU3R5bGVzPXt9LHRoaXMuX19pbml0aWFsaXplZD0hMSx0aGlzLl9zdHlsZXM9VHgoZSl9aW5pdCgpeyF0aGlzLl9faW5pdGlhbGl6ZWQmJnRoaXMuX3N0YXJ0aW5nU3R5bGVzJiYodGhpcy5fX2luaXRpYWxpemVkPSEwLE9iamVjdC5rZXlzKHRoaXMuX3N0eWxlcykuZm9yRWFjaCgodD0+e3RoaXMuX3N0YXJ0aW5nU3R5bGVzW3RdPXRoaXMuZWxlbWVudC5zdHlsZVt0XX0pKSxzdXBlci5pbml0KCkpfXBsYXkoKXt0aGlzLl9zdGFydGluZ1N0eWxlcyYmKHRoaXMuaW5pdCgpLE9iamVjdC5rZXlzKHRoaXMuX3N0eWxlcykuZm9yRWFjaCgodD0+dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHQsdGhpcy5fc3R5bGVzW3RdKSkpLHN1cGVyLnBsYXkoKSl9ZGVzdHJveSgpe3RoaXMuX3N0YXJ0aW5nU3R5bGVzJiYoT2JqZWN0LmtleXModGhpcy5fc3RhcnRpbmdTdHlsZXMpLmZvckVhY2goKHQ9Pntjb25zdCBlPXRoaXMuX3N0YXJ0aW5nU3R5bGVzW3RdO2U/dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHQsZSk6dGhpcy5lbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfSkpLHRoaXMuX3N0YXJ0aW5nU3R5bGVzPW51bGwsc3VwZXIuZGVzdHJveSgpKX19Y2xhc3Mgd1B7Y29uc3RydWN0b3IoKXt0aGlzLl9jb3VudD0wfXZhbGlkYXRlU3R5bGVQcm9wZXJ0eSh0KXtyZXR1cm4gRHgodCl9bWF0Y2hlc0VsZW1lbnQodCxlKXtyZXR1cm4gRXgodCxlKX1jb250YWluc0VsZW1lbnQodCxlKXtyZXR1cm4gUngodCxlKX1xdWVyeSh0LGUsbil7cmV0dXJuIEF4KHQsZSxuKX1jb21wdXRlU3R5bGUodCxlLG4pe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtlXX1idWlsZEtleWZyYW1lRWxlbWVudCh0LGUsbil7bj1uLm1hcCgodD0+VHgodCkpKTtsZXQgbz1gQGtleWZyYW1lcyAke2V9IHtcbmAsaT0iIjtuLmZvckVhY2goKHQ9PntpPSIgIjtjb25zdCBlPXBhcnNlRmxvYXQodC5vZmZzZXQpO28rPWAke2l9JHsxMDAqZX0lIHtcbmAsaSs9IiAiLE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGU9Pntjb25zdCBuPXRbZV07c3dpdGNoKGUpe2Nhc2Uib2Zmc2V0IjpyZXR1cm47Y2FzZSJlYXNpbmciOnJldHVybiB2b2lkKG4mJihvKz1gJHtpfWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7bn07XG5gKSk7ZGVmYXVsdDpyZXR1cm4gdm9pZChvKz1gJHtpfSR7ZX06ICR7bn07XG5gKX19KSksbys9YCR7aX19XG5gfSkpLG8rPSJ9XG4iO2NvbnN0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gYS50ZXh0Q29udGVudD1vLGF9YW5pbWF0ZSh0LGUsbixvLGksYT1bXSxyKXsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJnImJihmdW5jdGlvbiBzKCl7a1B8fChjb25zb2xlLndhcm4oIkBhbmd1bGFyL2FuaW1hdGlvbnM6IHBsZWFzZSBsb2FkIHRoZSB3ZWItYW5pbWF0aW9ucy5qcyBwb2x5ZmlsbCB0byBhbGxvdyBwcm9ncmFtbWF0aWMgYWNjZXNzLi4uXG4iLCIgIHZpc2l0IGh0dHBzOi8vYml0Lmx5L0lXdWthbSB0byBsZWFybiBtb3JlIGFib3V0IHVzaW5nIHRoZSB3ZWItYW5pbWF0aW9uLWpzIHBvbHlmaWxsLiIpLGtQPSEwKX0pKCk7Y29uc3QgbD1hLmZpbHRlcigodD0+dCBpbnN0YW5jZW9mIE9QKSksYz17fTtpTyhuLG8pJiZsLmZvckVhY2goKHQ9PntsZXQgZT10LmN1cnJlbnRTbmFwc2hvdDtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKCh0PT5jW3RdPWVbdF0pKX0pKTtjb25zdCBkPShmdW5jdGlvbiBwKHQpe2xldCBlPXt9O3JldHVybiB0JiYoQXJyYXkuaXNBcnJheSh0KT90Olt0XSkuZm9yRWFjaCgodD0+e09iamVjdC5rZXlzKHQpLmZvckVhY2goKG49Pnsib2Zmc2V0IiE9biYmImVhc2luZyIhPW4mJihlW25dPXRbbl0pfSkpfSkpLGV9KShlPWFPKHQsZSxjKSk7aWYoMD09bilyZXR1cm4gbmV3IFBQKHQsZCk7Y29uc3QgbT0iZ2VuX2Nzc19rZl8iK3RoaXMuX2NvdW50KyssdT10aGlzLmJ1aWxkS2V5ZnJhbWVFbGVtZW50KHQsbSxlKTsoZnVuY3Rpb24gZih0KXt2YXIgZTtjb25zdCBuPW51bGw9PT0oZT10LmdldFJvb3ROb2RlKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jYWxsKHQpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgU2hhZG93Um9vdCYmbiBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q/bjpkb2N1bWVudC5oZWFkfSkodCkuYXBwZW5kQ2hpbGQodSk7Y29uc3QgZz1wUCh0LGUpLGg9bmV3IE9QKHQsZSxtLG4sbyxpLGQsZyk7cmV0dXJuIGgub25EZXN0cm95KCgoKT0+KGZ1bmN0aW9uIHQoZSl7ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpfSkodSkpKSxofX1sZXQga1A9ITE7Y2xhc3MgU1B7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5lbGVtZW50PXQsdGhpcy5rZXlmcmFtZXM9ZSx0aGlzLm9wdGlvbnM9bix0aGlzLl9zcGVjaWFsU3R5bGVzPW8sdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9e30sdGhpcy5fZHVyYXRpb249bi5kdXJhdGlvbix0aGlzLl9kZWxheT1uLmRlbGF5fHwwLHRoaXMudGltZT10aGlzLl9kdXJhdGlvbit0aGlzLl9kZWxheX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpfV9idWlsZFBsYXllcigpe2lmKHRoaXMuX2luaXRpYWxpemVkKXJldHVybjt0aGlzLl9pbml0aWFsaXplZD0hMDtjb25zdCB0PXRoaXMua2V5ZnJhbWVzO3RoaXMuZG9tUGxheWVyPXRoaXMuX3RyaWdnZXJXZWJBbmltYXRpb24odGhpcy5lbGVtZW50LHQsdGhpcy5vcHRpb25zKSx0aGlzLl9maW5hbEtleWZyYW1lPXQubGVuZ3RoP3RbdC5sZW5ndGgtMV06e30sdGhpcy5kb21QbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiZmluaXNoIiwoKCk9PnRoaXMuX29uRmluaXNoKCkpKX1fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl7dGhpcy5fZGVsYXk/dGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpOnRoaXMuZG9tUGxheWVyLnBhdXNlKCl9X3RyaWdnZXJXZWJBbmltYXRpb24odCxlLG4pe3JldHVybiB0LmFuaW1hdGUoZSxuKX1vblN0YXJ0KHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1vbkRvbmUodCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfXBsYXkoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydEZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMuaW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX1fcmVzZXREb21QbGF5ZXJTdGF0ZSgpe3RoaXMuZG9tUGxheWVyJiZ0aGlzLmRvbVBsYXllci5jYW5jZWwoKX1yZXN0YXJ0KCl7dGhpcy5yZXNldCgpLHRoaXMucGxheSgpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZGVzdHJveSgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXNldFBvc2l0aW9uKHQpe3ZvaWQgMD09PXRoaXMuZG9tUGxheWVyJiZ0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZT10KnRoaXMudGltZX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZS90aGlzLnRpbWV9Z2V0IHRvdGFsVGltZSgpe3JldHVybiB0aGlzLl9kZWxheSt0aGlzLl9kdXJhdGlvbn1iZWZvcmVEZXN0cm95KCl7Y29uc3QgdD17fTt0aGlzLmhhc1N0YXJ0ZWQoKSYmT2JqZWN0LmtleXModGhpcy5fZmluYWxLZXlmcmFtZSkuZm9yRWFjaCgoZT0+eyJvZmZzZXQiIT1lJiYodFtlXT10aGlzLl9maW5pc2hlZD90aGlzLl9maW5hbEtleWZyYW1lW2VdOnNPKHRoaXMuZWxlbWVudCxlKSl9KSksdGhpcy5jdXJyZW50U25hcHNob3Q9dH10cmlnZ2VyQ2FsbGJhY2sodCl7Y29uc3QgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaCgodD0+dCgpKSksZS5sZW5ndGg9MH19Y2xhc3MgRFB7Y29uc3RydWN0b3IoKXt0aGlzLl9pc05hdGl2ZUltcGw9L1x7XHMqXFtuYXRpdmVccytjb2RlXF1ccypcfS8udGVzdChFUCgpLnRvU3RyaW5nKCkpLHRoaXMuX2Nzc0tleWZyYW1lc0RyaXZlcj1uZXcgd1B9dmFsaWRhdGVTdHlsZVByb3BlcnR5KHQpe3JldHVybiBEeCh0KX1tYXRjaGVzRWxlbWVudCh0LGUpe3JldHVybiBFeCh0LGUpfWNvbnRhaW5zRWxlbWVudCh0LGUpe3JldHVybiBSeCh0LGUpfXF1ZXJ5KHQsZSxuKXtyZXR1cm4gQXgodCxlLG4pfWNvbXB1dGVTdHlsZSh0LGUsbil7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW2VdfW92ZXJyaWRlV2ViQW5pbWF0aW9uc1N1cHBvcnQodCl7dGhpcy5faXNOYXRpdmVJbXBsPXR9YW5pbWF0ZSh0LGUsbixvLGksYT1bXSxyKXtpZighciYmIXRoaXMuX2lzTmF0aXZlSW1wbClyZXR1cm4gdGhpcy5fY3NzS2V5ZnJhbWVzRHJpdmVyLmFuaW1hdGUodCxlLG4sbyxpLGEpO2NvbnN0IHM9e2R1cmF0aW9uOm4sZGVsYXk6byxmaWxsOjA9PW8/ImJvdGgiOiJmb3J3YXJkcyJ9O2kmJihzLmVhc2luZz1pKTtjb25zdCBsPXt9LGM9YS5maWx0ZXIoKHQ9PnQgaW5zdGFuY2VvZiBTUCkpO2lPKG4sbykmJmMuZm9yRWFjaCgodD0+e2xldCBlPXQuY3VycmVudFNuYXBzaG90O09iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PmxbdF09ZVt0XSkpfSkpO2NvbnN0IGQ9cFAodCxlPWFPKHQsZT1lLm1hcCgodD0+WXgodCwhMSkpKSxsKSk7cmV0dXJuIG5ldyBTUCh0LGUscyxkKX19ZnVuY3Rpb24gRVAoKXtyZXR1cm4gZngoKSYmRWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZXx8e319Ci8qKgogICAgICogQGxpY2Vuc2UgQW5ndWxhciB2MTIuMi4xCiAgICAgKiAoYykgMjAxMC0yMDIxIEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5pby8KICAgICAqIExpY2Vuc2U6IE1JVAogICAgICovY2xhc3MgUlAgZXh0ZW5kcyB0eHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5fbmV4dEFuaW1hdGlvbklkPTAsdGhpcy5fcmVuZGVyZXI9dC5jcmVhdGVSZW5kZXJlcihlLmJvZHkse2lkOiIwIixlbmNhcHN1bGF0aW9uOkhuLk5vbmUsc3R5bGVzOltdLGRhdGE6e2FuaW1hdGlvbjpbXX19KX1idWlsZCh0KXtjb25zdCBlPXRoaXMuX25leHRBbmltYXRpb25JZC50b1N0cmluZygpO3RoaXMuX25leHRBbmltYXRpb25JZCsrO2NvbnN0IG49QXJyYXkuaXNBcnJheSh0KT9peCh0KTp0O3JldHVybiBOUCh0aGlzLl9yZW5kZXJlcixudWxsLGUsInJlZ2lzdGVyIixbbl0pLG5ldyBBUChlLHRoaXMuX3JlbmRlcmVyKX19UlAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFJQKSh2cihfZyksdnIoWl8pKX0sUlAuybVwcm92PU1uKHt0b2tlbjpSUCxmYWN0b3J5OlJQLsm1ZmFjfSksUlAuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpfZ30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChSUCxbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6X2d9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dfSksbnVsbCk7Y2xhc3MgQVAgZXh0ZW5kcyBjbGFzc3t9e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLl9pZD10LHRoaXMuX3JlbmRlcmVyPWV9Y3JlYXRlKHQsZSl7cmV0dXJuIG5ldyBUUCh0aGlzLl9pZCx0LGV8fHt9LHRoaXMuX3JlbmRlcmVyKX19Y2xhc3MgVFB7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5pZD10LHRoaXMuZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPW8sdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLl9zdGFydGVkPSExLHRoaXMudG90YWxUaW1lPTAsdGhpcy5fY29tbWFuZCgiY3JlYXRlIixuKX1fbGlzdGVuKHQsZSl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQsYEBAJHt0aGlzLmlkfToke3R9YCxlKX1fY29tbWFuZCh0LC4uLmUpe3JldHVybiBOUCh0aGlzLl9yZW5kZXJlcix0aGlzLmVsZW1lbnQsdGhpcy5pZCx0LGUpfW9uRG9uZSh0KXt0aGlzLl9saXN0ZW4oImRvbmUiLHQpfW9uU3RhcnQodCl7dGhpcy5fbGlzdGVuKCJzdGFydCIsdCl9b25EZXN0cm95KHQpe3RoaXMuX2xpc3RlbigiZGVzdHJveSIsdCl9aW5pdCgpe3RoaXMuX2NvbW1hbmQoImluaXQiKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9cGxheSgpe3RoaXMuX2NvbW1hbmQoInBsYXkiKSx0aGlzLl9zdGFydGVkPSEwfXBhdXNlKCl7dGhpcy5fY29tbWFuZCgicGF1c2UiKX1yZXN0YXJ0KCl7dGhpcy5fY29tbWFuZCgicmVzdGFydCIpfWZpbmlzaCgpe3RoaXMuX2NvbW1hbmQoImZpbmlzaCIpfWRlc3Ryb3koKXt0aGlzLl9jb21tYW5kKCJkZXN0cm95Iil9cmVzZXQoKXt0aGlzLl9jb21tYW5kKCJyZXNldCIpLHRoaXMuX3N0YXJ0ZWQ9ITF9c2V0UG9zaXRpb24odCl7dGhpcy5fY29tbWFuZCgic2V0UG9zaXRpb24iLHQpfWdldFBvc2l0aW9uKCl7dmFyIHQsZTtyZXR1cm4gbnVsbCE9PShlPW51bGw9PT0odD10aGlzLl9yZW5kZXJlci5lbmdpbmUucGxheWVyc1srdGhpcy5pZF0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmdldFBvc2l0aW9uKCkpJiZ2b2lkIDAhPT1lP2U6MH19ZnVuY3Rpb24gTlAodCxlLG4sbyxpKXtyZXR1cm4gdC5zZXRQcm9wZXJ0eShlLGBAQCR7bn06JHtvfWAsaSl9Y29uc3QgelA9IkAiLElQPSJALmRpc2FibGVkIjtjbGFzcyBIUHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5kZWxlZ2F0ZT10LHRoaXMuZW5naW5lPWUsdGhpcy5fem9uZT1uLHRoaXMuX2N1cnJlbnRJZD0wLHRoaXMuX21pY3JvdGFza0lkPTEsdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdLHRoaXMuX3JlbmRlcmVyQ2FjaGU9bmV3IE1hcCx0aGlzLl9jZFJlY3VyRGVwdGg9MCx0aGlzLnByb21pc2U9UHJvbWlzZS5yZXNvbHZlKDApLGUub25SZW1vdmFsQ29tcGxldGU9KHQsZSk9PntlJiZlLnBhcmVudE5vZGUodCkmJmUucmVtb3ZlQ2hpbGQodC5wYXJlbnROb2RlLHQpfX1jcmVhdGVSZW5kZXJlcih0LGUpe2NvbnN0IG49dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcih0LGUpO2lmKCEodCYmZSYmZS5kYXRhJiZlLmRhdGEuYW5pbWF0aW9uKSl7bGV0IHQ9dGhpcy5fcmVuZGVyZXJDYWNoZS5nZXQobik7cmV0dXJuIHR8fCh0PW5ldyBGUCgiIixuLHRoaXMuZW5naW5lKSx0aGlzLl9yZW5kZXJlckNhY2hlLnNldChuLHQpKSx0fWNvbnN0IG89ZS5pZCxpPWUuaWQrIi0iK3RoaXMuX2N1cnJlbnRJZDt0aGlzLl9jdXJyZW50SWQrKyx0aGlzLmVuZ2luZS5yZWdpc3RlcihpLHQpO2NvbnN0IGE9ZT0+e0FycmF5LmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGEpOnRoaXMuZW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihvLGksdCxlLm5hbWUsZSl9O3JldHVybiBlLmRhdGEuYW5pbWF0aW9uLmZvckVhY2goYSksbmV3IExQKHRoaXMsaSxuLHRoaXMuZW5naW5lKX1iZWdpbigpe3RoaXMuX2NkUmVjdXJEZXB0aCsrLHRoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX1fc2NoZWR1bGVDb3VudFRhc2soKXt0aGlzLnByb21pc2UudGhlbigoKCk9Pnt0aGlzLl9taWNyb3Rhc2tJZCsrfSkpfXNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayh0LGUsbil7dD49MCYmdDx0aGlzLl9taWNyb3Rhc2tJZD90aGlzLl96b25lLnJ1bigoKCk9PmUobikpKTooMD09dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmxlbmd0aCYmUHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oKCgpPT57dGhpcy5fem9uZS5ydW4oKCgpPT57dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmZvckVhY2goKHQ9Pntjb25zdFtlLG5dPXQ7ZShuKX0pKSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KSl9KSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLnB1c2goW2Usbl0pKX1lbmQoKXt0aGlzLl9jZFJlY3VyRGVwdGgtLSwwPT10aGlzLl9jZFJlY3VyRGVwdGgmJnRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57dGhpcy5fc2NoZWR1bGVDb3VudFRhc2soKSx0aGlzLmVuZ2luZS5mbHVzaCh0aGlzLl9taWNyb3Rhc2tJZCl9KSksdGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhpcy5lbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX19SFAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEhQKSh2cihfZyksdnIoZFApLHZyKGFfKSl9LEhQLsm1cHJvdj1Nbih7dG9rZW46SFAsZmFjdG9yeTpIUC7JtWZhY30pLEhQLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6X2d9LHt0eXBlOmRQfSx7dHlwZTphX31dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoSFAsW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOl9nfSx7dHlwZTpkUH0se3R5cGU6YV99XX0pLG51bGwpO2NsYXNzIEZQe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy5kZWxlZ2F0ZT1lLHRoaXMuZW5naW5lPW4sdGhpcy5kZXN0cm95Tm9kZT10aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlP3Q9PmUuZGVzdHJveU5vZGUodCk6bnVsbH1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9ZGVzdHJveSgpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX1jcmVhdGVFbGVtZW50KHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudCh0LGUpfWNyZWF0ZUNvbW1lbnQodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh0KX1jcmVhdGVUZXh0KHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQodCl9YXBwZW5kQ2hpbGQodCxlKXt0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQsITEpfWluc2VydEJlZm9yZSh0LGUsbixvPSEwKXt0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZSh0LGUsbiksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQsbyl9cmVtb3ZlQ2hpbGQodCxlLG4pe3RoaXMuZW5naW5lLm9uUmVtb3ZlKHRoaXMubmFtZXNwYWNlSWQsZSx0aGlzLmRlbGVnYXRlLG4pfXNlbGVjdFJvb3RFbGVtZW50KHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQodCxlKX1wYXJlbnROb2RlKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUodCl9bmV4dFNpYmxpbmcodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCl9c2V0QXR0cmlidXRlKHQsZSxuLG8pe3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKHQsZSxuLG8pfXJlbW92ZUF0dHJpYnV0ZSh0LGUsbil7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUodCxlLG4pfWFkZENsYXNzKHQsZSl7dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyh0LGUpfXJlbW92ZUNsYXNzKHQsZSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyh0LGUpfXNldFN0eWxlKHQsZSxuLG8pe3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLG4sbyl9cmVtb3ZlU3R5bGUodCxlLG4pe3RoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlLG4pfXNldFByb3BlcnR5KHQsZSxuKXtlLmNoYXJBdCgwKT09elAmJmU9PUlQP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCwhIW4pOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfXNldFZhbHVlKHQsZSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfWxpc3Rlbih0LGUsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX1kaXNhYmxlQW5pbWF0aW9ucyh0LGUpe3RoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKHQsZSl9fWNsYXNzIExQIGV4dGVuZHMgRlB7Y29uc3RydWN0b3IodCxlLG4sbyl7c3VwZXIoZSxuLG8pLHRoaXMuZmFjdG9yeT10LHRoaXMubmFtZXNwYWNlSWQ9ZX1zZXRQcm9wZXJ0eSh0LGUsbil7ZS5jaGFyQXQoMCk9PXpQPyIuIj09ZS5jaGFyQXQoMSkmJmU9PUlQP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCxuPXZvaWQgMD09PW58fCEhbik6dGhpcy5lbmdpbmUucHJvY2Vzcyh0aGlzLm5hbWVzcGFjZUlkLHQsZS5zdWJzdHIoMSksbik6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsbil9bGlzdGVuKHQsZSxuKXtpZihlLmNoYXJBdCgwKT09elApe2NvbnN0IG89KGZ1bmN0aW9uIGkodCl7c3dpdGNoKHQpe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93IjpyZXR1cm4gd2luZG93O2RlZmF1bHQ6cmV0dXJuIHR9fSkodCk7bGV0IGE9ZS5zdWJzdHIoMSkscj0iIjtyZXR1cm4gYS5jaGFyQXQoMCkhPXpQJiYoW2Escl09KGZ1bmN0aW9uIHModCl7Y29uc3QgZT10LmluZGV4T2YoIi4iKTtyZXR1cm5bdC5zdWJzdHJpbmcoMCxlKSx0LnN1YnN0cihlKzEpXX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKShhKSksdGhpcy5lbmdpbmUubGlzdGVuKHRoaXMubmFtZXNwYWNlSWQsbyxhLHIsKHQ9Pnt0aGlzLmZhY3Rvcnkuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKHQuX2RhdGF8fC0xLG4sdCl9KSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX19Y2xhc3MgQlAgZXh0ZW5kcyBkUHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodC5ib2R5LGUsbil9bmdPbkRlc3Ryb3koKXt0aGlzLmZsdXNoKCl9fUJQLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxCUCkodnIoWl8pLHZyKHp4KSx2cihSTykpfSxCUC7JtXByb3Y9TW4oe3Rva2VuOkJQLGZhY3Rvcnk6QlAuybVmYWN9KSxCUC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX0se3R5cGU6enh9LHt0eXBlOlJPfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChCUCxbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfSx7dHlwZTp6eH0se3R5cGU6Uk99XX0pLG51bGwpO2NvbnN0IFZQPW5ldyBHYSgiQW5pbWF0aW9uTW9kdWxlVHlwZSIpLGpQPVt7cHJvdmlkZTp0eCx1c2VDbGFzczpSUH0se3Byb3ZpZGU6Uk8sdXNlRmFjdG9yeTpmdW5jdGlvbiBVUCgpe3JldHVybiBuZXcgQU99fSx7cHJvdmlkZTpkUCx1c2VDbGFzczpCUH0se3Byb3ZpZGU6X2csdXNlRmFjdG9yeTpmdW5jdGlvbiBHUCh0LGUsbil7cmV0dXJuIG5ldyBIUCh0LGUsbil9LGRlcHM6W2h2LGRQLGFfXX1dLFdQPVt7cHJvdmlkZTp6eCx1c2VGYWN0b3J5OmZ1bmN0aW9uIFlQKCl7cmV0dXJuKGZ1bmN0aW9uIHQoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRVAoKX0pKCk/bmV3IERQOm5ldyB3UH19LHtwcm92aWRlOlZQLHVzZVZhbHVlOiJCcm93c2VyQW5pbWF0aW9ucyJ9LC4uLmpQXSxxUD1be3Byb3ZpZGU6engsdXNlQ2xhc3M6Tnh9LHtwcm92aWRlOlZQLHVzZVZhbHVlOiJOb29wQW5pbWF0aW9ucyJ9LC4uLmpQXTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIFpQe3N0YXRpYyB3aXRoQ29uZmlnKHQpe3JldHVybntuZ01vZHVsZTpaUCxwcm92aWRlcnM6dC5kaXNhYmxlQW5pbWF0aW9ucz9xUDpXUH19fVpQLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxaUCl9LFpQLsm1bW9kPWFvKHt0eXBlOlpQfSksWlAuybVpbmo9dm4oe3Byb3ZpZGVyczpXUCxpbXBvcnRzOltVdl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFpQLFt7dHlwZTpBeSxhcmdzOlt7ZXhwb3J0czpbVXZdLHByb3ZpZGVyczpXUH1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKFpQLHtleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1V2XX19KTtjbGFzcyBYUHt9WFAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFhQKX0sWFAuybVtb2Q9YW8oe3R5cGU6WFB9KSxYUC7JtWluaj12bih7cHJvdmlkZXJzOnFQLGltcG9ydHM6W1V2XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoWFAsW3t0eXBlOkF5LGFyZ3M6W3tleHBvcnRzOltVdl0scHJvdmlkZXJzOnFQfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oWFAse2V4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bVXZdfX0pO2NvbnN0IEtQPXt9O2Z1bmN0aW9uIEpQKHQsZSl7aWYoS1BbdF09KEtQW3RdfHwwKSsxLCJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiBRUCh0LCgoLi4ubik9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKC4uLm4pKSx7dHlwZTp0fSkpKTtzd2l0Y2goZT9lLl9hczoiZW1wdHkiKXtjYXNlImVtcHR5IjpyZXR1cm4gUVAodCwoKCk9Pih7dHlwZTp0fSkpKTtjYXNlInByb3BzIjpyZXR1cm4gUVAodCwoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHt0eXBlOnR9KSkpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGNvbmZpZy4iKX19ZnVuY3Rpb24gUVAodCxlKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInR5cGUiLHt2YWx1ZTp0LHdyaXRhYmxlOiExfSl9Y29uc3QgJFA9IkBuZ3J4L3N0b3JlL2luaXQiO2NsYXNzIHR3IGV4dGVuZHMgRntjb25zdHJ1Y3Rvcigpe3N1cGVyKHt0eXBlOiRQfSl9bmV4dCh0KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJcbiAgICAgICAgRGlzcGF0Y2ggZXhwZWN0ZWQgYW4gb2JqZWN0LCBpbnN0ZWFkIGl0IHJlY2VpdmVkIGEgZnVuY3Rpb24uXG4gICAgICAgIElmIHlvdSdyZSB1c2luZyB0aGUgY3JlYXRlQWN0aW9uIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvblxuICAgICAgICBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlIGFjdGlvbi4gRm9yIGV4YW1wbGUsIHNvbWVBY3Rpb24gc2hvdWxkIGJlIHNvbWVBY3Rpb24oKS4iKTtpZih2b2lkIDA9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkFjdGlvbnMgbXVzdCBiZSBvYmplY3RzIik7aWYodm9pZCAwPT09dC50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFjdGlvbnMgbXVzdCBoYXZlIGEgdHlwZSBwcm9wZXJ0eSIpO3N1cGVyLm5leHQodCl9Y29tcGxldGUoKXt9bmdPbkRlc3Ryb3koKXtzdXBlci5jb21wbGV0ZSgpfX10dy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dHcpfSx0dy7JtXByb3Y9TW4oe3Rva2VuOnR3LGZhY3Rvcnk6dHcuybVmYWN9KSx0dy5jdG9yUGFyYW1ldGVycz0oKT0+W10sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh0dyxbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLG51bGwpO2NvbnN0IGV3PVt0d10sbnc9bmV3IEdhKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBSb290IEd1YXJkIiksb3c9bmV3IEdhKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBJbml0aWFsIFN0YXRlIiksaXc9bmV3IEdhKCJAbmdyeC9zdG9yZSBJbml0aWFsIFN0YXRlIiksYXc9bmV3IEdhKCJAbmdyeC9zdG9yZSBSZWR1Y2VyIEZhY3RvcnkiKSxydz1uZXcgR2EoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlZHVjZXIgRmFjdG9yeSBQcm92aWRlciIpLHN3PW5ldyBHYSgiQG5ncngvc3RvcmUgSW5pdGlhbCBSZWR1Y2VycyIpLGx3PW5ldyBHYSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgSW5pdGlhbCBSZWR1Y2VycyIpLGN3PW5ldyBHYSgiQG5ncngvc3RvcmUgU3RvcmUgRmVhdHVyZXMiKSxkdz1uZXcgR2EoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIFJlZHVjZXJzIikscHc9bmV3IEdhKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIiksbXc9bmV3IEdhKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIENvbmZpZ3MiKSx1dz1uZXcgR2EoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIEZlYXR1cmVzIiksZnc9bmV3IEdhKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIFRva2VuIiksZ3c9bmV3IEdhKCJAbmdyeC9zdG9yZSBGZWF0dXJlIFJlZHVjZXJzIiksaHc9bmV3IEdhKCJAbmdyeC9zdG9yZSBVc2VyIFByb3ZpZGVkIE1ldGEgUmVkdWNlcnMiKSxidz1uZXcgR2EoIkBuZ3J4L3N0b3JlIE1ldGEgUmVkdWNlcnMiKSx5dz1uZXcgR2EoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlc29sdmVkIE1ldGEgUmVkdWNlcnMiKSxfdz1uZXcgR2EoIkBuZ3J4L3N0b3JlIFVzZXIgUnVudGltZSBDaGVja3MgQ29uZmlnIiksQ3c9bmV3IEdhKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBVc2VyIFJ1bnRpbWUgQ2hlY2tzIENvbmZpZyIpLE13PW5ldyBHYSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgUnVudGltZSBDaGVja3MiKSx2dz1uZXcgR2EoIkBuZ3J4L3N0b3JlIENoZWNrIGlmIEFjdGlvbiB0eXBlcyBhcmUgdW5pcXVlIik7ZnVuY3Rpb24geHcodCxlPXt9KXtjb25zdCBuPU9iamVjdC5rZXlzKHQpLG89e307Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2NvbnN0IGk9bltlXTsiZnVuY3Rpb24iPT10eXBlb2YgdFtpXSYmKG9baV09dFtpXSl9Y29uc3QgaT1PYmplY3Qua2V5cyhvKTtyZXR1cm4gZnVuY3Rpb24gdChuLGEpe249dm9pZCAwPT09bj9lOm47bGV0IHI9ITE7Y29uc3Qgcz17fTtmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyl7Y29uc3QgZT1pW3RdLGw9bltlXSxjPSgwLG9bZV0pKGwsYSk7c1tlXT1jLHI9cnx8YyE9PWx9cmV0dXJuIHI/czpufX1mdW5jdGlvbiBPdyguLi50KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoMD09PXQubGVuZ3RoKXJldHVybiBlO2NvbnN0IG49dFt0Lmxlbmd0aC0xXTtyZXR1cm4gdC5zbGljZSgwLC0xKS5yZWR1Y2VSaWdodCgoKHQsZSk9PmUodCkpLG4oZSkpfX1mdW5jdGlvbiBQdyh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD4wJiYodD1Pdy5hcHBseShudWxsLFsuLi5lLHRdKSksKGUsbik9Pntjb25zdCBvPXQoZSk7cmV0dXJuKHQsZSk9Pm8odD12b2lkIDA9PT10P246dCxlKX19Y2xhc3Mgd3cgZXh0ZW5kcyBEe31jbGFzcyBrdyBleHRlbmRzIHR3e31jbGFzcyBTdyBleHRlbmRzIEZ7Y29uc3RydWN0b3IodCxlLG4sbyl7c3VwZXIobyhuLGUpKSx0aGlzLmRpc3BhdGNoZXI9dCx0aGlzLmluaXRpYWxTdGF0ZT1lLHRoaXMucmVkdWNlcnM9bix0aGlzLnJlZHVjZXJGYWN0b3J5PW99Z2V0IGN1cnJlbnRSZWR1Y2Vycygpe3JldHVybiB0aGlzLnJlZHVjZXJzfWFkZEZlYXR1cmUodCl7dGhpcy5hZGRGZWF0dXJlcyhbdF0pfWFkZEZlYXR1cmVzKHQpe2NvbnN0IGU9dC5yZWR1Y2UoKCh0LHtyZWR1Y2VyczplLHJlZHVjZXJGYWN0b3J5Om4sbWV0YVJlZHVjZXJzOm8saW5pdGlhbFN0YXRlOmksa2V5OmF9KT0+e2NvbnN0IHI9ImZ1bmN0aW9uIj09dHlwZW9mIGU/KGZ1bmN0aW9uIHModCl7Y29uc3QgZT1BcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD4wP093KC4uLnQpOnQ9PnQ7cmV0dXJuKHQsbik9Pih0PWUodCksKGUsbyk9PnQoZT12b2lkIDA9PT1lP246ZSxvKSl9KShvKShlLGkpOlB3KG4sbykoZSxpKTtyZXR1cm4gdFthXT1yLHR9KSx7fSk7dGhpcy5hZGRSZWR1Y2VycyhlKX1yZW1vdmVGZWF0dXJlKHQpe3RoaXMucmVtb3ZlRmVhdHVyZXMoW3RdKX1yZW1vdmVGZWF0dXJlcyh0KXt0aGlzLnJlbW92ZVJlZHVjZXJzKHQubWFwKCh0PT50LmtleSkpKX1hZGRSZWR1Y2VyKHQsZSl7dGhpcy5hZGRSZWR1Y2Vycyh7W3RdOmV9KX1hZGRSZWR1Y2Vycyh0KXt0aGlzLnJlZHVjZXJzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnJlZHVjZXJzKSx0KSx0aGlzLnVwZGF0ZVJlZHVjZXJzKE9iamVjdC5rZXlzKHQpKX1yZW1vdmVSZWR1Y2VyKHQpe3RoaXMucmVtb3ZlUmVkdWNlcnMoW3RdKX1yZW1vdmVSZWR1Y2Vycyh0KXt0LmZvckVhY2goKHQ9Pnt0aGlzLnJlZHVjZXJzPShmdW5jdGlvbiBlKHQsbil7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZpbHRlcigodD0+dCE9PW4pKS5yZWR1Y2UoKChlLG4pPT5PYmplY3QuYXNzaWduKGUse1tuXTp0W25dfSkpLHt9KX0pKHRoaXMucmVkdWNlcnMsdCl9KSksdGhpcy51cGRhdGVSZWR1Y2Vycyh0KX11cGRhdGVSZWR1Y2Vycyh0KXt0aGlzLm5leHQodGhpcy5yZWR1Y2VyRmFjdG9yeSh0aGlzLnJlZHVjZXJzLHRoaXMuaW5pdGlhbFN0YXRlKSksdGhpcy5kaXNwYXRjaGVyLm5leHQoe3R5cGU6IkBuZ3J4L3N0b3JlL3VwZGF0ZS1yZWR1Y2VycyIsZmVhdHVyZXM6dH0pfW5nT25EZXN0cm95KCl7dGhpcy5jb21wbGV0ZSgpfX1Tdy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8U3cpKHZyKGt3KSx2cihpdyksdnIoc3cpLHZyKGF3KSl9LFN3Lsm1cHJvdj1Nbih7dG9rZW46U3csZmFjdG9yeTpTdy7JtWZhY30pLFN3LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6a3d9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltpd119XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W3N3XX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbYXddfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFN3LFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTprd30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W2l3XX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbc3ddfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOlthd119XX1dfSksbnVsbCk7Y29uc3QgRHc9W1N3LHtwcm92aWRlOnd3LHVzZUV4aXN0aW5nOlN3fSx7cHJvdmlkZTprdyx1c2VFeGlzdGluZzp0d31dO2NsYXNzIEV3IGV4dGVuZHMgSXtuZ09uRGVzdHJveSgpe3RoaXMuY29tcGxldGUoKX19RXcuybVmYWM9KGZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uIGUobil7cmV0dXJuKHR8fCh0PUFhKEV3KSkpKG58fEV3KX19KSgpLEV3Lsm1cHJvdj1Nbih7dG9rZW46RXcsZmFjdG9yeTpFdy7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoRXcsW3t0eXBlOmltfV0sbnVsbCxudWxsKTtjb25zdCBSdz1bRXddO2NsYXNzIEF3IGV4dGVuZHMgRHt9Y2xhc3MgVHcgZXh0ZW5kcyBGe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3N1cGVyKG8pO2NvbnN0IGk9dC5waXBlKChmdW5jdGlvbiByKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLFIoKGZ1bmN0aW9uKG4sbyl7bi5zdWJzY3JpYmUobmV3IFQobywoZnVuY3Rpb24obil7cmV0dXJuIG8uYWRkKHQuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7cmV0dXJuIG8ubmV4dChuKX0pLGUpKX0pLChmdW5jdGlvbigpe3JldHVybiBvLmFkZCh0LnNjaGVkdWxlKChmdW5jdGlvbigpe3JldHVybiBvLmNvbXBsZXRlKCl9KSxlKSl9KSwoZnVuY3Rpb24obil7cmV0dXJuIG8uYWRkKHQuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7cmV0dXJuIG8uZXJyb3Iobil9KSxlKSl9KSkpfSkpfSkob3QpKS5waXBlKFZlKGUpKS5waXBlKChmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIFIobWUodCxlLGFyZ3VtZW50cy5sZW5ndGg+PTIsITApKX0pKE53LHtzdGF0ZTpvfSkpO3RoaXMuc3RhdGVTdWJzY3JpcHRpb249aS5zdWJzY3JpYmUoKCh7c3RhdGU6dCxhY3Rpb246ZX0pPT57dGhpcy5uZXh0KHQpLG4ubmV4dChlKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmNvbXBsZXRlKCl9fWZ1bmN0aW9uIE53KHQ9e3N0YXRlOnZvaWQgMH0sW2Usbl0pe2NvbnN0e3N0YXRlOm99PXQ7cmV0dXJue3N0YXRlOm4obyxlKSxhY3Rpb246ZX19VHcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFR3KSh2cih0dyksdnIod3cpLHZyKEV3KSx2cihpdykpfSxUdy7JtXByb3Y9TW4oe3Rva2VuOlR3LGZhY3Rvcnk6VHcuybVmYWN9KSxUdy5JTklUPSRQLFR3LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dHd9LHt0eXBlOnd3fSx7dHlwZTpFd30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W2l3XX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChUdyxbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dHd9LHt0eXBlOnd3fSx7dHlwZTpFd30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W2l3XX1dfV19KSxudWxsKTtjb25zdCB6dz1bVHcse3Byb3ZpZGU6QXcsdXNlRXhpc3Rpbmc6VHd9XTtjbGFzcyBJdyBleHRlbmRzIER7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy5hY3Rpb25zT2JzZXJ2ZXI9ZSx0aGlzLnJlZHVjZXJNYW5hZ2VyPW4sdGhpcy5zb3VyY2U9dH1zZWxlY3QodCwuLi5lKXtyZXR1cm4gRncuY2FsbChudWxsLHQsLi4uZSkodGhpcyl9bGlmdCh0KXtjb25zdCBlPW5ldyBJdyh0aGlzLHRoaXMuYWN0aW9uc09ic2VydmVyLHRoaXMucmVkdWNlck1hbmFnZXIpO3JldHVybiBlLm9wZXJhdG9yPXQsZX1kaXNwYXRjaCh0KXt0aGlzLmFjdGlvbnNPYnNlcnZlci5uZXh0KHQpfW5leHQodCl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIubmV4dCh0KX1lcnJvcih0KXt0aGlzLmFjdGlvbnNPYnNlcnZlci5lcnJvcih0KX1jb21wbGV0ZSgpe3RoaXMuYWN0aW9uc09ic2VydmVyLmNvbXBsZXRlKCl9YWRkUmVkdWNlcih0LGUpe3RoaXMucmVkdWNlck1hbmFnZXIuYWRkUmVkdWNlcih0LGUpfXJlbW92ZVJlZHVjZXIodCl7dGhpcy5yZWR1Y2VyTWFuYWdlci5yZW1vdmVSZWR1Y2VyKHQpfX1Jdy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SXcpKHZyKEF3KSx2cih0dyksdnIoU3cpKX0sSXcuybVwcm92PU1uKHt0b2tlbjpJdyxmYWN0b3J5Okl3Lsm1ZmFjfSksSXcuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpBd30se3R5cGU6dHd9LHt0eXBlOlN3fV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChJdyxbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6QXd9LHt0eXBlOnR3fSx7dHlwZTpTd31dfSksbnVsbCk7Y29uc3QgSHc9W0l3XTtmdW5jdGlvbiBGdyh0LGUsLi4ubil7cmV0dXJuIGZ1bmN0aW9uIG8oaSl7bGV0IGE7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtjb25zdCBvPVtlLC4uLm5dLmZpbHRlcihCb29sZWFuKTthPWkucGlwZSgoZnVuY3Rpb24gcigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj10Lmxlbmd0aDtpZigwPT09bil0aHJvdyBuZXcgRXJyb3IoImxpc3Qgb2YgcHJvcGVydGllcyBjYW5ub3QgYmUgZW1wdHkuIik7cmV0dXJuIEl0KChmdW5jdGlvbihlKXtmb3IodmFyIG89ZSxpPTA7aTxuO2krKyl7dmFyIGE9bnVsbD09bz92b2lkIDA6b1t0W2ldXTtpZih2b2lkIDA9PT1hKXJldHVybjtvPWF9cmV0dXJuIG99KSl9KSh0LC4uLm8pKX1lbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoYFVuZXhwZWN0ZWQgdHlwZSAnJHt0eXBlb2YgdH0nIGluIHNlbGVjdCBvcGVyYXRvciwgZXhwZWN0ZWQgJ3N0cmluZycgb3IgJ2Z1bmN0aW9uJ2ApO2E9aS5waXBlKEl0KChuPT50KG4sZSkpKSl9cmV0dXJuIGEucGlwZShNZSgpKX19Y29uc3QgTHc9Imh0dHBzOi8vbmdyeC5pby9ndWlkZS9zdG9yZS9jb25maWd1cmF0aW9uL3J1bnRpbWUtY2hlY2tzIjtmdW5jdGlvbiBCdyh0KXtyZXR1cm4gdm9pZCAwPT09dH1mdW5jdGlvbiBWdyh0KXtyZXR1cm4gbnVsbD09PXR9ZnVuY3Rpb24gancodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl9ZnVuY3Rpb24gVXcodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBHdyh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH1mdW5jdGlvbiBXdyh0LGUpe3JldHVybiB0PT09ZX1mdW5jdGlvbiBZdyh0LGUsbil7Zm9yKGxldCBvPTA7bzx0Lmxlbmd0aDtvKyspaWYoIW4odFtvXSxlW29dKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBxdyh0LGU9V3csbj1Xdyl7bGV0IG8saT1udWxsLGE9bnVsbDtyZXR1cm57bWVtb2l6ZWQ6ZnVuY3Rpb24gcigpe2lmKHZvaWQgMCE9PW8pcmV0dXJuIG8ucmVzdWx0O2lmKCFpKXJldHVybiBhPXQuYXBwbHkobnVsbCxhcmd1bWVudHMpLGk9YXJndW1lbnRzLGE7aWYoIVl3KGFyZ3VtZW50cyxpLGUpKXJldHVybiBhO2NvbnN0IHI9dC5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIGk9YXJndW1lbnRzLG4oYSxyKT9hOihhPXIscil9LHJlc2V0OmZ1bmN0aW9uIHMoKXtpPW51bGwsYT1udWxsfSxzZXRSZXN1bHQ6ZnVuY3Rpb24gbCh0KXtvPXtyZXN1bHQ6dH19LGNsZWFyUmVzdWx0OmZ1bmN0aW9uIGMoKXtvPXZvaWQgMH19fWZ1bmN0aW9uIFp3KC4uLnQpe3JldHVybihmdW5jdGlvbiBlKHQsbj17c3RhdGVGbjpYd30pe3JldHVybiBmdW5jdGlvbiguLi5lKXtsZXQgbz1lO2lmKEFycmF5LmlzQXJyYXkob1swXSkpe2NvbnN0W3QsLi4uZV09bztvPVsuLi50LC4uLmVdfWNvbnN0IGk9by5zbGljZSgwLG8ubGVuZ3RoLTEpLGE9b1tvLmxlbmd0aC0xXSxyPWkuZmlsdGVyKCh0PT50LnJlbGVhc2UmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlbGVhc2UpKSxzPXQoKGZ1bmN0aW9uKC4uLnQpe3JldHVybiBhLmFwcGx5KG51bGwsdCl9KSksbD1xdygoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zdGF0ZUZuLmFwcGx5KG51bGwsW3QsaSxlLHNdKX0pKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihsLm1lbW9pemVkLHtyZWxlYXNlOmZ1bmN0aW9uIGMoKXtsLnJlc2V0KCkscy5yZXNldCgpLHIuZm9yRWFjaCgodD0+dC5yZWxlYXNlKCkpKX0scHJvamVjdG9yOnMubWVtb2l6ZWQsc2V0UmVzdWx0Omwuc2V0UmVzdWx0LGNsZWFyUmVzdWx0OmwuY2xlYXJSZXN1bHR9KX19KShxdykoLi4udCl9ZnVuY3Rpb24gWHcodCxlLG4sbyl7aWYodm9pZCAwPT09bil7Y29uc3Qgbj1lLm1hcCgoZT0+ZSh0KSkpO3JldHVybiBvLm1lbW9pemVkLmFwcGx5KG51bGwsbil9Y29uc3QgaT1lLm1hcCgoZT0+ZSh0LG4pKSk7cmV0dXJuIG8ubWVtb2l6ZWQuYXBwbHkobnVsbCxbLi4uaSxuXSl9ZnVuY3Rpb24gS3codCl7cmV0dXJuIFp3KChlPT57Y29uc3Qgbj1lW3RdO3JldHVybiB5XygpJiYhKHQgaW4gZSkmJmNvbnNvbGUud2FybihgQG5ncngvc3RvcmU6IFRoZSBmZWF0dXJlIG5hbWUgIiR7dH0iIGRvZXMgbm90IGV4aXN0IGluIHRoZSBzdGF0ZSwgdGhlcmVmb3JlIGNyZWF0ZUZlYXR1cmVTZWxlY3RvciBjYW5ub3QgYWNjZXNzIGl0LiAgQmUgc3VyZSBpdCBpcyBpbXBvcnRlZCBpbiBhIGxvYWRlZCBtb2R1bGUgdXNpbmcgU3RvcmVNb2R1bGUuZm9yUm9vdCgnJHt0fScsIC4uLikgb3IgU3RvcmVNb2R1bGUuZm9yRmVhdHVyZSgnJHt0fScsIC4uLikuICBJZiB0aGUgZGVmYXVsdCBzdGF0ZSBpcyBpbnRlbmRlZCB0byBiZSB1bmRlZmluZWQsIGFzIGlzIHRoZSBjYXNlIHdpdGggcm91dGVyIHN0YXRlLCB0aGlzIGRldmVsb3BtZW50LW9ubHkgd2FybmluZyBtZXNzYWdlIGNhbiBiZSBpZ25vcmVkLmApLG59KSwodD0+dCkpfWZ1bmN0aW9uIEp3KHQpe09iamVjdC5mcmVlemUodCk7Y29uc3QgZT1Hdyh0KTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkuZm9yRWFjaCgobj0+e2lmKCFuLnN0YXJ0c1dpdGgoIsm1IikmJihmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfSkodCxuKSYmKCFlfHwiY2FsbGVyIiE9PW4mJiJjYWxsZWUiIT09biYmImFyZ3VtZW50cyIhPT1uKSl7Y29uc3QgZT10W25dOyFVdyhlKSYmIUd3KGUpfHxPYmplY3QuaXNGcm96ZW4oZSl8fEp3KGUpfX0pKSx0fWZ1bmN0aW9uIFF3KHQsZT1bXSl7cmV0dXJuKEJ3KHQpfHxWdyh0KSkmJjA9PT1lLmxlbmd0aD97cGF0aDpbInJvb3QiXSx2YWx1ZTp0fTpPYmplY3Qua2V5cyh0KS5yZWR1Y2UoKChuLG8pPT57aWYobilyZXR1cm4gbjtjb25zdCBpPXRbb107cmV0dXJuKGZ1bmN0aW9uIGEodCl7cmV0dXJuIEd3KHQpJiZ0Lmhhc093blByb3BlcnR5KCLJtWNtcCIpfSkoaSk/bjohKEJ3KGkpfHxWdyhpKXx8KGZ1bmN0aW9uIHIodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fSkoaSl8fChmdW5jdGlvbiBzKHQpe3JldHVybiJib29sZWFuIj09dHlwZW9mIHR9KShpKXx8KGZ1bmN0aW9uIGwodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fSkoaSl8fGp3KGkpKSYmKChmdW5jdGlvbiBjKHQpe2lmKCEoZnVuY3Rpb24gZSh0KXtyZXR1cm4gVXcodCkmJiFqdyh0KX0pKHQpKXJldHVybiExO2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO3JldHVybiBuPT09T2JqZWN0LnByb3RvdHlwZXx8bnVsbD09PW59KShpKT9RdyhpLFsuLi5lLG9dKTp7cGF0aDpbLi4uZSxvXSx2YWx1ZTppfSl9KSwhMSl9ZnVuY3Rpb24gJHcodCxlKXtpZighMT09PXQpcmV0dXJuO2NvbnN0IG49dC5wYXRoLmpvaW4oIi4iKSxvPW5ldyBFcnJvcihgRGV0ZWN0ZWQgdW5zZXJpYWxpemFibGUgJHtlfSBhdCAiJHtufSIuICR7THd9I3N0cmljdCR7ZX1zZXJpYWxpemFiaWxpdHlgKTt0aHJvdyBvLnZhbHVlPXQudmFsdWUsby51bnNlcmlhbGl6YWJsZVBhdGg9bixvfWZ1bmN0aW9uIHRrKHQpe3JldHVybiB5XygpP09iamVjdC5hc3NpZ24oe3N0cmljdFN0YXRlU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eTohMCxzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uV2l0aGluTmdab25lOiExLHN0cmljdEFjdGlvblR5cGVVbmlxdWVuZXNzOiExfSx0KTp7c3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHk6ITEsc3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdFN0YXRlSW1tdXRhYmlsaXR5OiExLHN0cmljdEFjdGlvbkltbXV0YWJpbGl0eTohMSxzdHJpY3RBY3Rpb25XaXRoaW5OZ1pvbmU6ITEsc3RyaWN0QWN0aW9uVHlwZVVuaXF1ZW5lc3M6ITF9fWZ1bmN0aW9uIGVrKHtzdHJpY3RBY3Rpb25TZXJpYWxpemFiaWxpdHk6dCxzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTplfSl7cmV0dXJuIG49PnR8fGU/KGZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gZnVuY3Rpb24obixvKXtlLmFjdGlvbihvKSYmJHcoUXcobyksImFjdGlvbiIpO2NvbnN0IGk9dChuLG8pO3JldHVybiBlLnN0YXRlKCkmJiR3KFF3KGkpLCJzdGF0ZSIpLGl9fSkobix7YWN0aW9uOmU9PnQmJiFvayhlKSxzdGF0ZTooKT0+ZX0pOm59ZnVuY3Rpb24gbmsoe3N0cmljdEFjdGlvbkltbXV0YWJpbGl0eTp0LHN0cmljdFN0YXRlSW1tdXRhYmlsaXR5OmV9KXtyZXR1cm4gbj0+dHx8ZT8oZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuLG8pe2NvbnN0IGk9ZS5hY3Rpb24obyk/Sncobyk6byxhPXQobixpKTtyZXR1cm4gZS5zdGF0ZSgpP0p3KGEpOmF9fSkobix7YWN0aW9uOmU9PnQmJiFvayhlKSxzdGF0ZTooKT0+ZX0pOm59ZnVuY3Rpb24gb2sodCl7cmV0dXJuIHQudHlwZS5zdGFydHNXaXRoKCJAbmdyeCIpfWZ1bmN0aW9uIGlrKHtzdHJpY3RBY3Rpb25XaXRoaW5OZ1pvbmU6dH0pe3JldHVybiBlPT50PyhmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4sbyl7aWYoZS5hY3Rpb24obykmJiFhXy5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoYEFjdGlvbiAnJHtvLnR5cGV9JyBydW5uaW5nIG91dHNpZGUgTmdab25lLiAke0x3fSNzdHJpY3RhY3Rpb253aXRoaW5uZ3pvbmVgKTtyZXR1cm4gdChuLG8pfX0pKGUse2FjdGlvbjplPT50JiYhb2soZSl9KTplfWZ1bmN0aW9uIGFrKCl7cmV0dXJuW3twcm92aWRlOnZ3LG11bHRpOiEwLGRlcHM6W013XSx1c2VGYWN0b3J5OnNrfV19ZnVuY3Rpb24gcmsodCl7cmV0dXJuIHR9ZnVuY3Rpb24gc2sodCl7aWYoIXQuc3RyaWN0QWN0aW9uVHlwZVVuaXF1ZW5lc3MpcmV0dXJuO2NvbnN0IGU9T2JqZWN0LmVudHJpZXMoS1ApLmZpbHRlcigoKFssdF0pPT50PjEpKS5tYXAoKChbdF0pPT50KSk7aWYoZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBBY3Rpb24gdHlwZXMgYXJlIHJlZ2lzdGVyZWQgbW9yZSB0aGFuIG9uY2UsICR7ZS5tYXAoKHQ9PmAiJHt0fSJgKSkuam9pbigiLCAiKX0uICR7THd9I3N0cmljdGFjdGlvbnR5cGV1bmlxdWVuZXNzYCl9Y2xhc3MgbGt7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEpe319bGsuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGxrKSh2cih0dyksdnIod3cpLHZyKEV3KSx2cihJdyksdnIobncsOCksdnIodncsOCkpfSxsay7JtW1vZD1hbyh7dHlwZTpsa30pLGxrLsm1aW5qPXZuKHt9KSxsay5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnR3fSx7dHlwZTp3d30se3R5cGU6RXd9LHt0eXBlOkl3fSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W253XX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W3Z3XX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChsayxbe3R5cGU6QXksYXJnczpbe31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnR3fSx7dHlwZTp3d30se3R5cGU6RXd9LHt0eXBlOkl3fSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W253XX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W3Z3XX1dfV19KSxudWxsKTtjbGFzcyBja3tjb25zdHJ1Y3Rvcih0LGUsbixvLGkpe3RoaXMuZmVhdHVyZXM9dCx0aGlzLmZlYXR1cmVSZWR1Y2Vycz1lLHRoaXMucmVkdWNlck1hbmFnZXI9bjtjb25zdCBhPXQubWFwKCgodCxuKT0+e2NvbnN0IG89ZS5zaGlmdCgpW25dO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3JlZHVjZXJzOm8saW5pdGlhbFN0YXRlOmZrKHQuaW5pdGlhbFN0YXRlKX0pfSkpO24uYWRkRmVhdHVyZXMoYSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlZHVjZXJNYW5hZ2VyLnJlbW92ZUZlYXR1cmVzKHRoaXMuZmVhdHVyZXMpfX1jay7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Y2spKHZyKHV3KSx2cihndyksdnIoU3cpLHZyKGxrKSx2cih2dyw4KSl9LGNrLsm1bW9kPWFvKHt0eXBlOmNrfSksY2suybVpbmo9dm4oe30pLGNrLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbdXddfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W2d3XX1dfSx7dHlwZTpTd30se3R5cGU6bGt9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbdnddfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGNrLFt7dHlwZTpBeSxhcmdzOlt7fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbdXddfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W2d3XX1dfSx7dHlwZTpTd30se3R5cGU6bGt9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbdnddfV19XX0pLG51bGwpO2NsYXNzIGRre3N0YXRpYyBmb3JSb290KHQsZT17fSl7cmV0dXJue25nTW9kdWxlOmxrLHByb3ZpZGVyczpbe3Byb3ZpZGU6bncsdXNlRmFjdG9yeTpoayxkZXBzOltbSXcsbmV3IFNyLG5ldyBFcl1dfSx7cHJvdmlkZTpvdyx1c2VWYWx1ZTplLmluaXRpYWxTdGF0ZX0se3Byb3ZpZGU6aXcsdXNlRmFjdG9yeTpmayxkZXBzOltvd119LHtwcm92aWRlOmx3LHVzZVZhbHVlOnR9LHtwcm92aWRlOmR3LHVzZUV4aXN0aW5nOnQgaW5zdGFuY2VvZiBHYT90Omx3fSx7cHJvdmlkZTpzdyxkZXBzOltycCxsdyxbbmV3IGtyKGR3KV1dLHVzZUZhY3Rvcnk6cGt9LHtwcm92aWRlOmh3LHVzZVZhbHVlOmUubWV0YVJlZHVjZXJzP2UubWV0YVJlZHVjZXJzOltdfSx7cHJvdmlkZTp5dyxkZXBzOltidyxod10sdXNlRmFjdG9yeTpna30se3Byb3ZpZGU6cncsdXNlVmFsdWU6ZS5yZWR1Y2VyRmFjdG9yeT9lLnJlZHVjZXJGYWN0b3J5Onh3fSx7cHJvdmlkZTphdyxkZXBzOltydyx5d10sdXNlRmFjdG9yeTpQd30sZXcsRHcsUncsencsSHcsKG49ZS5ydW50aW1lQ2hlY2tzLFt7cHJvdmlkZTpDdyx1c2VWYWx1ZTpufSx7cHJvdmlkZTpfdyx1c2VGYWN0b3J5OnJrLGRlcHM6W0N3XX0se3Byb3ZpZGU6TXcsZGVwczpbX3ddLHVzZUZhY3Rvcnk6dGt9LHtwcm92aWRlOmJ3LG11bHRpOiEwLGRlcHM6W013XSx1c2VGYWN0b3J5Om5rfSx7cHJvdmlkZTpidyxtdWx0aTohMCxkZXBzOltNd10sdXNlRmFjdG9yeTpla30se3Byb3ZpZGU6YncsbXVsdGk6ITAsZGVwczpbTXddLHVzZUZhY3Rvcnk6aWt9XSksYWsoKV19O3ZhciBufXN0YXRpYyBmb3JGZWF0dXJlKHQsZSxuPXt9KXtyZXR1cm57bmdNb2R1bGU6Y2sscHJvdmlkZXJzOlt7cHJvdmlkZTptdyxtdWx0aTohMCx1c2VWYWx1ZTp0IGluc3RhbmNlb2YgT2JqZWN0P3t9Om59LHtwcm92aWRlOmN3LG11bHRpOiEwLHVzZVZhbHVlOntrZXk6dCBpbnN0YW5jZW9mIE9iamVjdD90Lm5hbWU6dCxyZWR1Y2VyRmFjdG9yeTpuIGluc3RhbmNlb2YgR2F8fCFuLnJlZHVjZXJGYWN0b3J5P3h3Om4ucmVkdWNlckZhY3RvcnksbWV0YVJlZHVjZXJzOm4gaW5zdGFuY2VvZiBHYXx8IW4ubWV0YVJlZHVjZXJzP1tdOm4ubWV0YVJlZHVjZXJzLGluaXRpYWxTdGF0ZTpuIGluc3RhbmNlb2YgR2F8fCFuLmluaXRpYWxTdGF0ZT92b2lkIDA6bi5pbml0aWFsU3RhdGV9fSx7cHJvdmlkZTp1dyxkZXBzOltycCxtdyxjd10sdXNlRmFjdG9yeTpta30se3Byb3ZpZGU6cHcsbXVsdGk6ITAsdXNlVmFsdWU6dCBpbnN0YW5jZW9mIE9iamVjdD90LnJlZHVjZXI6ZX0se3Byb3ZpZGU6ZncsbXVsdGk6ITAsdXNlRXhpc3Rpbmc6ZSBpbnN0YW5jZW9mIEdhP2U6cHd9LHtwcm92aWRlOmd3LG11bHRpOiEwLGRlcHM6W3JwLHB3LFtuZXcga3IoZncpXV0sdXNlRmFjdG9yeTp1a30sYWsoKV19fX1mdW5jdGlvbiBwayh0LGUpe3JldHVybiBlIGluc3RhbmNlb2YgR2E/dC5nZXQoZSk6ZX1mdW5jdGlvbiBtayh0LGUsbil7cmV0dXJuIG4ubWFwKCgobixvKT0+e2lmKGVbb11pbnN0YW5jZW9mIEdhKXtjb25zdCBpPXQuZ2V0KGVbb10pO3JldHVybntrZXk6bi5rZXkscmVkdWNlckZhY3Rvcnk6aS5yZWR1Y2VyRmFjdG9yeT9pLnJlZHVjZXJGYWN0b3J5Onh3LG1ldGFSZWR1Y2VyczppLm1ldGFSZWR1Y2Vycz9pLm1ldGFSZWR1Y2VyczpbXSxpbml0aWFsU3RhdGU6aS5pbml0aWFsU3RhdGV9fXJldHVybiBufSkpfWZ1bmN0aW9uIHVrKHQsZSl7cmV0dXJuIGUubWFwKChlPT5lIGluc3RhbmNlb2YgR2E/dC5nZXQoZSk6ZSkpfWZ1bmN0aW9uIGZrKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoKTp0fWZ1bmN0aW9uIGdrKHQsZSl7cmV0dXJuIHQuY29uY2F0KGUpfWZ1bmN0aW9uIGhrKHQpe2lmKHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3RvcmVNb2R1bGUuZm9yUm9vdCgpIGNhbGxlZCB0d2ljZS4gRmVhdHVyZSBtb2R1bGVzIHNob3VsZCB1c2UgU3RvcmVNb2R1bGUuZm9yRmVhdHVyZSgpIGluc3RlYWQuIik7cmV0dXJuImd1YXJkZWQifWZ1bmN0aW9uIGJrKC4uLnQpe3JldHVybntyZWR1Y2VyOnQucG9wKCksdHlwZXM6dC5tYXAoKHQ9PnQudHlwZSkpfX1mdW5jdGlvbiB5ayh0LC4uLmUpe2NvbnN0IG49bmV3IE1hcDtmb3IoY29uc3QgdCBvZiBlKWZvcihjb25zdCBlIG9mIHQudHlwZXMpe2NvbnN0IG89bi5nZXQoZSk7bi5zZXQoZSxvPyhlLG4pPT50LnJlZHVjZXIobyhlLG4pLG4pOnQucmVkdWNlcil9cmV0dXJuIGZ1bmN0aW9uKGU9dCxvKXtjb25zdCBpPW4uZ2V0KG8udHlwZSk7cmV0dXJuIGk/aShlLG8pOmV9fWRrLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkayl9LGRrLsm1bW9kPWFvKHt0eXBlOmRrfSksZGsuybVpbmo9dm4oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoZGssW3t0eXBlOkF5LGFyZ3M6W3t9XX1dLG51bGwsbnVsbCk7Y29uc3QgX2s9e2Rpc3BhdGNoOiEwLHVzZUVmZmVjdHNFcnJvckhhbmRsZXI6ITB9LENrPSJfX0BuZ3J4L2VmZmVjdHNfY3JlYXRlX18iO2Z1bmN0aW9uIE1rKHQsZSl7Y29uc3Qgbj10KCksbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sX2spLGUpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobixDayx7dmFsdWU6b30pLG59ZnVuY3Rpb24gdmsodCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmZpbHRlcigoZT0+ISghdFtlXXx8IXRbZV0uaGFzT3duUHJvcGVydHkoQ2spKSYmdFtlXVtDa10uaGFzT3duUHJvcGVydHkoImRpc3BhdGNoIikpKS5tYXAoKGU9Pk9iamVjdC5hc3NpZ24oe3Byb3BlcnR5TmFtZTplfSx0W2VdW0NrXSkpKX1mdW5jdGlvbiB4ayh0KXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpfWNvbnN0IE9rPSJfX0BuZ3J4L2VmZmVjdHNfXyI7ZnVuY3Rpb24gUGsodCl7cmV0dXJuIE93KHdrLHhrKSh0KX1mdW5jdGlvbiB3ayh0KXtyZXR1cm4oZnVuY3Rpb24gZSh0KXtyZXR1cm4gdC5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eShPayl9KSh0KT90LmNvbnN0cnVjdG9yW09rXTpbXX1mdW5jdGlvbiBrayh0LGUsbj0xMCl7cmV0dXJuIHQucGlwZShwZSgobz0+KGUmJmUuaGFuZGxlRXJyb3Iobyksbjw9MT90OmtrKHQsZSxuLTEpKSkpKX1jbGFzcyBTayBleHRlbmRzIER7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0JiYodGhpcy5zb3VyY2U9dCl9bGlmdCh0KXtjb25zdCBlPW5ldyBTaztyZXR1cm4gZS5zb3VyY2U9dGhpcyxlLm9wZXJhdG9yPXQsZX19ZnVuY3Rpb24gRGsoLi4udCl7cmV0dXJuIGNlKChlPT50LnNvbWUoKHQ9PiJzdHJpbmciPT10eXBlb2YgdD90PT09ZS50eXBlOnQudHlwZT09PWUudHlwZSkpKSl9ZnVuY3Rpb24gRWsodCl7cmV0dXJuIFJrKHQsIm5ncnhPbkluaXRFZmZlY3RzIil9ZnVuY3Rpb24gUmsodCxlKXtyZXR1cm4gdCYmZSBpbiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFtlXX1Tay7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8U2spKHZyKEV3KSl9LFNrLsm1cHJvdj1Nbih7dG9rZW46U2ssZmFjdG9yeTpTay7JtWZhY30pLFNrLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6RCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltFd119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoU2ssW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkQsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbRXddfV19XX0pLG51bGwpO2NvbnN0IEFrPW5ldyBHYSgiQG5ncngvZWZmZWN0cyBJbnRlcm5hbCBSb290IEd1YXJkIiksVGs9bmV3IEdhKCJAbmdyeC9lZmZlY3RzIFVzZXIgUHJvdmlkZWQgRWZmZWN0cyIpLE5rPW5ldyBHYSgiQG5ncngvZWZmZWN0cyBJbnRlcm5hbCBSb290IEVmZmVjdHMiKSx6az1uZXcgR2EoIkBuZ3J4L2VmZmVjdHMgUm9vdCBFZmZlY3RzIiksSWs9bmV3IEdhKCJAbmdyeC9lZmZlY3RzIEludGVybmFsIEZlYXR1cmUgRWZmZWN0cyIpLEhrPW5ldyBHYSgiQG5ncngvZWZmZWN0cyBGZWF0dXJlIEVmZmVjdHMiKSxGaz1uZXcgR2EoIkBuZ3J4L2VmZmVjdHMgRWZmZWN0cyBFcnJvciBIYW5kbGVyIik7Y2xhc3MgTGsgZXh0ZW5kcyBJe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLmVycm9ySGFuZGxlcj10LHRoaXMuZWZmZWN0c0Vycm9ySGFuZGxlcj1lfWFkZEVmZmVjdHModCl7dGhpcy5uZXh0KHQpfXRvQWN0aW9ucygpe3JldHVybiB0aGlzLnBpcGUod2UoeGspLFp0KCh0PT50LnBpcGUod2UoQmspKSkpLFp0KCh0PT5yZSh0LnBpcGUoUGUoKHQ9PihmdW5jdGlvbiBlKHQsbil7cmV0dXJuIGU9Pntjb25zdCBvPShmdW5jdGlvbiBpKHQsZSxuKXtjb25zdCBvPXhrKHQpLmNvbnN0cnVjdG9yLm5hbWU7cmV0dXJuIHJlKC4uLihmdW5jdGlvbiBpKHQpe3JldHVybltQayx2a10ucmVkdWNlKCgoZSxuKT0+ZS5jb25jYXQobih0KSkpLFtdKX0pKHQpLm1hcCgoKHtwcm9wZXJ0eU5hbWU6aSxkaXNwYXRjaDphLHVzZUVmZmVjdHNFcnJvckhhbmRsZXI6cn0pPT57Y29uc3Qgcz0iZnVuY3Rpb24iPT10eXBlb2YgdFtpXT90W2ldKCk6dFtpXSxsPXI/bihzLGUpOnM7cmV0dXJuITE9PT1hP2wucGlwZSh5ZSgpKTpsLnBpcGUoKGZ1bmN0aW9uIGMoKXtyZXR1cm4gUigoZnVuY3Rpb24odCxlKXt0LnN1YnNjcmliZShuZXcgVChlLChmdW5jdGlvbih0KXtlLm5leHQoQXQuY3JlYXRlTmV4dCh0KSl9KSwoZnVuY3Rpb24oKXtlLm5leHQoQXQuY3JlYXRlQ29tcGxldGUoKSksZS5jb21wbGV0ZSgpfSksKGZ1bmN0aW9uKHQpe2UubmV4dChBdC5jcmVhdGVFcnJvcih0KSksZS5jb21wbGV0ZSgpfSkpKX0pKX0pKCkpLnBpcGUoSXQoKGU9Pih7ZWZmZWN0OnRbaV0sbm90aWZpY2F0aW9uOmUscHJvcGVydHlOYW1lOmksc291cmNlTmFtZTpvLHNvdXJjZUluc3RhbmNlOnR9KSkpKX0pKSl9KShlLHQsbik7cmV0dXJuKGZ1bmN0aW9uIGEodCl7cmV0dXJuIFJrKHQsIm5ncnhPblJ1bkVmZmVjdHMiKX0pKGUpP2UubmdyeE9uUnVuRWZmZWN0cyhvKTpvfX0pKHRoaXMuZXJyb3JIYW5kbGVyLHRoaXMuZWZmZWN0c0Vycm9ySGFuZGxlcikodCkpKSxJdCgodD0+KChmdW5jdGlvbiBlKHQsbil7aWYoIk4iPT09dC5ub3RpZmljYXRpb24ua2luZCl7Y29uc3QgZT10Lm5vdGlmaWNhdGlvbi52YWx1ZTshKGZ1bmN0aW9uIG8odCl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJnQmJnQudHlwZSYmInN0cmluZyI9PXR5cGVvZiB0LnR5cGV9KShlKSYmbi5oYW5kbGVFcnJvcihuZXcgRXJyb3IoYEVmZmVjdCAkeyhmdW5jdGlvbiBpKHtwcm9wZXJ0eU5hbWU6dCxzb3VyY2VJbnN0YW5jZTplLHNvdXJjZU5hbWU6bn0pe2NvbnN0IG89ImZ1bmN0aW9uIj09dHlwZW9mIGVbdF07cmV0dXJuYCIke259LiR7U3RyaW5nKHQpfSR7bz8iKCkiOiIifSJgfSkodCl9IGRpc3BhdGNoZWQgYW4gaW52YWxpZCBhY3Rpb246ICR7KGZ1bmN0aW9uIGEodCl7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeSh0KX1jYXRjaChlKXtyZXR1cm4gdH19KShlKX1gKSl9fSkodCx0aGlzLmVycm9ySGFuZGxlciksdC5ub3RpZmljYXRpb24pKSksY2UoKHQ9PiJOIj09PXQua2luZCYmbnVsbCE9dC52YWx1ZSkpLChmdW5jdGlvbiBlKCl7cmV0dXJuIFIoKGZ1bmN0aW9uKHQsZSl7dC5zdWJzY3JpYmUobmV3IFQoZSwoZnVuY3Rpb24odCl7cmV0dXJuIFR0KHQsZSl9KSkpfSkpfSkoKSksdC5waXBlKGJlKDEpLGNlKEVrKSxJdCgodD0+dC5uZ3J4T25Jbml0RWZmZWN0cygpKSkpKSkpKX19ZnVuY3Rpb24gQmsodCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuIFJrKHQsIm5ncnhPbklkZW50aWZ5RWZmZWN0cyIpfSkodCk/dC5uZ3J4T25JZGVudGlmeUVmZmVjdHMoKToiIn1May7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TGspKHZyKFpzKSx2cihGaykpfSxMay7JtXByb3Y9TW4oe3Rva2VuOkxrLGZhY3Rvcnk6TGsuybVmYWN9KSxMay5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlpzfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbRmtdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKExrLFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpac30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W0ZrXX1dfV19KSxudWxsKTtjbGFzcyBWa3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuZWZmZWN0U291cmNlcz10LHRoaXMuc3RvcmU9ZSx0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249bnVsbH1zdGFydCgpe3RoaXMuZWZmZWN0c1N1YnNjcmlwdGlvbnx8KHRoaXMuZWZmZWN0c1N1YnNjcmlwdGlvbj10aGlzLmVmZmVjdFNvdXJjZXMudG9BY3Rpb25zKCkuc3Vic2NyaWJlKHRoaXMuc3RvcmUpKX1uZ09uRGVzdHJveSgpe3RoaXMuZWZmZWN0c1N1YnNjcmlwdGlvbiYmKHRoaXMuZWZmZWN0c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuZWZmZWN0c1N1YnNjcmlwdGlvbj1udWxsKX19VmsuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFZrKSh2cihMayksdnIoSXcpKX0sVmsuybVwcm92PU1uKHt0b2tlbjpWayxmYWN0b3J5OlZrLsm1ZmFjfSksVmsuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpMa30se3R5cGU6SXd9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFZrLFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpMa30se3R5cGU6SXd9XX0pLG51bGwpO2NvbnN0IGprPSJAbmdyeC9lZmZlY3RzL2luaXQiO0pQKGprKTtjbGFzcyBVa3tjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyKXt0aGlzLnNvdXJjZXM9dCxlLnN0YXJ0KCksby5mb3JFYWNoKChlPT50LmFkZEVmZmVjdHMoZSkpKSxuLmRpc3BhdGNoKHt0eXBlOmprfSl9YWRkRWZmZWN0cyh0KXt0aGlzLnNvdXJjZXMuYWRkRWZmZWN0cyh0KX19VWsuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFVrKSh2cihMayksdnIoVmspLHZyKEl3KSx2cih6ayksdnIobGssOCksdnIoY2ssOCksdnIoQWssOCkpfSxVay7JtW1vZD1hbyh7dHlwZTpVa30pLFVrLsm1aW5qPXZuKHt9KSxVay5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkxrfSx7dHlwZTpWa30se3R5cGU6SXd9LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W3prXX1dfSx7dHlwZTpsayxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTpjayxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W0FrXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChVayxbe3R5cGU6QXksYXJnczpbe31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkxrfSx7dHlwZTpWa30se3R5cGU6SXd9LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W3prXX1dfSx7dHlwZTpsayxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTpjayxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W0FrXX1dfV19KSxudWxsKTtjbGFzcyBHa3tjb25zdHJ1Y3Rvcih0LGUsbixvKXtlLmZvckVhY2goKGU9PmUuZm9yRWFjaCgoZT0+dC5hZGRFZmZlY3RzKGUpKSkpKX19R2suybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEdrKSh2cihVayksdnIoSGspLHZyKGxrLDgpLHZyKGNrLDgpKX0sR2suybVtb2Q9YW8oe3R5cGU6R2t9KSxHay7JtWluaj12bih7fSksR2suY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpVa30se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbSGtdfV19LHt0eXBlOmxrLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOmNrLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEdrLFt7dHlwZTpBeSxhcmdzOlt7fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6VWt9LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W0hrXX1dfSx7dHlwZTpsayxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTpjayxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfV19KSxudWxsKTtjbGFzcyBXa3tzdGF0aWMgZm9yRmVhdHVyZSh0PVtdKXtyZXR1cm57bmdNb2R1bGU6R2sscHJvdmlkZXJzOlt0LHtwcm92aWRlOklrLG11bHRpOiEwLHVzZVZhbHVlOnR9LHtwcm92aWRlOlRrLG11bHRpOiEwLHVzZVZhbHVlOltdfSx7cHJvdmlkZTpIayxtdWx0aTohMCx1c2VGYWN0b3J5OllrLGRlcHM6W3JwLElrLFRrXX1dfX1zdGF0aWMgZm9yUm9vdCh0PVtdKXtyZXR1cm57bmdNb2R1bGU6VWsscHJvdmlkZXJzOlt7cHJvdmlkZTpGayx1c2VWYWx1ZTpra30sVmssTGssU2ssdCx7cHJvdmlkZTpOayx1c2VWYWx1ZTpbdF19LHtwcm92aWRlOkFrLHVzZUZhY3Rvcnk6cWssZGVwczpbW1ZrLG5ldyBTcixuZXcgRXJdLFtOayxuZXcgRHJdXX0se3Byb3ZpZGU6VGssbXVsdGk6ITAsdXNlVmFsdWU6W119LHtwcm92aWRlOnprLHVzZUZhY3Rvcnk6WWssZGVwczpbcnAsTmssVGtdfV19fX1mdW5jdGlvbiBZayh0LGUsbil7Y29uc3Qgbz1bXTtmb3IoY29uc3QgdCBvZiBlKW8ucHVzaCguLi50KTtmb3IoY29uc3QgdCBvZiBuKW8ucHVzaCguLi50KTtyZXR1cm4oZnVuY3Rpb24gaSh0LGUpe3JldHVybiBlLm1hcCgoZT0+dC5nZXQoZSkpKX0pKHQsbyl9ZnVuY3Rpb24gcWsodCxlKXtpZigoMSE9PWUubGVuZ3RofHwwIT09ZVswXS5sZW5ndGgpJiZ0KXRocm93IG5ldyBUeXBlRXJyb3IoIkVmZmVjdHNNb2R1bGUuZm9yUm9vdCgpIGNhbGxlZCB0d2ljZS4gRmVhdHVyZSBtb2R1bGVzIHNob3VsZCB1c2UgRWZmZWN0c01vZHVsZS5mb3JGZWF0dXJlKCkgaW5zdGVhZC4iKTtyZXR1cm4iZ3VhcmRlZCJ9dmFyIFprO1drLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxXayl9LFdrLsm1bW9kPWFvKHt0eXBlOldrfSksV2suybVpbmo9dm4oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoV2ssW3t0eXBlOkF5LGFyZ3M6W3t9XX1dLG51bGwsbnVsbCksKGZ1bmN0aW9uKHQpe3RbdC5VTktOT1dOPTBdPSJVTktOT1dOIix0W3QuRVhQRVJJTUVOVFM9MV09IkVYUEVSSU1FTlRTIix0W3QuRVhQRVJJTUVOVD0yXT0iRVhQRVJJTUVOVCIsdFt0LkNPTVBBUkVfRVhQRVJJTUVOVD0zXT0iQ09NUEFSRV9FWFBFUklNRU5UIix0W3QuTk9UX1NFVD00XT0iTk9UX1NFVCJ9KShaa3x8KFprPXt9KSk7Y29uc3QgWGs9ImRlZmF1bHRFeHBlcmltZW50SWQiO2Z1bmN0aW9uIEtrKHQpe3JldHVybiB0LnNwbGl0KCIsIikubWFwKCh0PT57Y29uc3QgZT10LmluZGV4T2YoIjoiKTtpZihlPDApdGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgY29sb24gZGVsaW1pdGluZyBuYW1lIGFuZCBJRDogJHt0fWApO2NvbnN0IG49dC5zbGljZSgwLGUpLG89dC5zbGljZShlKzEpO2lmKCFvKXRocm93IG5ldyBFcnJvcihgRXhwZWN0IGlkIHRvIGJlIG5vbi1mYWxzeTogJHt0fWApO3JldHVybntuYW1lOm4saWQ6b319KSl9ZnVuY3Rpb24gSmsodCxlKXtzd2l0Y2godCl7Y2FzZSBaay5FWFBFUklNRU5UOnJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZXhwZXJpbWVudElkIik/W2UuZXhwZXJpbWVudElkXTpbWGtdO2Nhc2UgWmsuQ09NUEFSRV9FWFBFUklNRU5UOnJldHVybiBLayhlLmV4cGVyaW1lbnRJZHMpLm1hcCgoKHtpZDp0fSk9PnQpKTtjYXNlIFprLkVYUEVSSU1FTlRTOmRlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFFrKHQsZSl7dmFyIG47c3dpdGNoKHQpe2Nhc2UgWmsuQ09NUEFSRV9FWFBFUklNRU5UOmNhc2UgWmsuRVhQRVJJTUVOVDp7Y29uc3Qgbz1udWxsIT09KG49SmsodCxlKSkmJnZvaWQgMCE9PW4/bjpbXTtyZXR1cm4gby5zb3J0KCksYCR7dH0vJHtvLmpvaW4oIiwiKX1gfWNhc2UgWmsuRVhQRVJJTUVOVFM6cmV0dXJuIFN0cmluZyh0KTtjYXNlIFprLk5PVF9TRVQ6cmV0dXJuIl9fbm90X3NldCI7ZGVmYXVsdDpyZXR1cm4iIn19Y29uc3QgJGs9KCk9PndpbmRvdy5sb2NhdGlvbi5ocmVmO2NsYXNzIHRTe2dldEhyZWYoKXtyZXR1cm4gJGsoKX1nZXRTZWFyY2goKXtjb25zdCB0PW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCksZT1bXTtyZXR1cm4gdC5mb3JFYWNoKCgodCxuKT0+e2UucHVzaCh7a2V5Om4sdmFsdWU6dH0pfSkpLGV9Z2V0SGFzaCgpe3JldHVybiB3aW5kb3cubG9jYXRpb24uaGFzaH1nZXRQYXRoKCl7cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZX1yZXBsYWNlU3RhdGUodCl7d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIiIsdCl9cHVzaFN0YXRlKHQpe3dpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShudWxsLCIiLHQpfW9uUG9wU3RhdGUoKXtyZXR1cm4gb2Uod2luZG93LCJwb3BzdGF0ZSIpLnBpcGUoSXQoKCgpPT4oe3BhdGhuYW1lOnRoaXMuZ2V0UGF0aCgpLHF1ZXJ5UGFyYW1zOnRoaXMuZ2V0U2VhcmNoKCl9KSkpKX1nZXRSZXNvbHZlZFBhdGgodCl7cmV0dXJuIG5ldyBVUkwodCwkaygpKS5wYXRobmFtZX1nZXRGdWxsUGF0aEZyb21Sb3V0ZU9yTmF2KHQsZSl7Y29uc3Qgbj10aGlzLmdldFJlc29sdmVkUGF0aCh0LnBhdGhuYW1lKTtsZXQgbz0iIjtyZXR1cm4hKGZ1bmN0aW9uIGkodCl7cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoInBhdGhuYW1lIikmJiF0Lmhhc093blByb3BlcnR5KCJxdWVyeVBhcmFtcyIpfSkodCkmJnQucXVlcnlQYXJhbXMubGVuZ3RoJiYobz0iPyIrKGZ1bmN0aW9uIGEodCl7Y29uc3QgZT1uZXcgVVJMU2VhcmNoUGFyYW1zO2Zvcihjb25zdHtrZXk6bix2YWx1ZTpvfW9mIHQpZS5hcHBlbmQobixvKTtyZXR1cm4gZX0pKHQucXVlcnlQYXJhbXMpLnRvU3RyaW5nKCkpLGAke259JHtvfSR7ZT90aGlzLmdldEhhc2goKToiIn1gfX10Uy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dFMpfSx0Uy7JtXByb3Y9TW4oe3Rva2VuOnRTLGZhY3Rvcnk6dFMuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHRTLFt7dHlwZTppbX1dLG51bGwsbnVsbCk7Y2xhc3MgZVN7Y29uc3RydWN0b3IodCl7dGhpcy5hcHBSb290PXRoaXMuZ2V0QXBwUm9vdEZyb21NZXRhRWxlbWVudCh0KX1nZXRBcHBSb290RnJvbU1ldGFFbGVtZW50KHQpe2NvbnN0IGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCBtZXRhW25hbWU9InRiLXJlbGF0aXZlLXJvb3QiXScpO2lmKCFlKXJldHVybiIvIjtjb25zdHtwYXRobmFtZTpufT1uZXcgVVJMKGUuY29udGVudCx0LmdldEhyZWYoKSk7cmV0dXJuIG4ucmVwbGFjZSgvXC8qJC8sIi8iKX1nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KHQpe3JldHVybiB0aGlzLmFwcFJvb3Quc2xpY2UoMCwtMSkrdH1nZXRBcHBSb290bGVzc1BhdGhuYW1lKHQpe3JldHVybiB0LnN0YXJ0c1dpdGgodGhpcy5hcHBSb290KT8iLyIrdC5zbGljZSh0aGlzLmFwcFJvb3QubGVuZ3RoKTp0fX1lUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZVMpKHZyKHRTKSl9LGVTLsm1cHJvdj1Nbih7dG9rZW46ZVMsZmFjdG9yeTplUy7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoZVMsW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnRTfV19KSxudWxsKTtjbGFzcyBuUyBleHRlbmRzIGVTe2dldEFwcFJvb3QoKXtyZXR1cm4gdGhpcy5hcHBSb290fXNldEFwcFJvb3QodCl7dGhpcy5hcHBSb290PXR9fW5TLsm1ZmFjPShmdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbiBlKG4pe3JldHVybih0fHwodD1BYShuUykpKShufHxuUyl9fSkoKSxuUy7JtXByb3Y9TW4oe3Rva2VuOm5TLGZhY3Rvcnk6blMuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKG5TLFt7dHlwZTppbX1dLG51bGwsbnVsbCk7Y2xhc3Mgb1N7fW9TLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxvUyl9LG9TLsm1bW9kPWFvKHt0eXBlOm9TfSksb1MuybVpbmo9dm4oe3Byb3ZpZGVyczpbdFNdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChvUyxbe3R5cGU6QXksYXJnczpbe3Byb3ZpZGVyczpbdFNdfV19XSxudWxsLG51bGwpO2NsYXNzIGlTe31pUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aVMpfSxpUy7JtW1vZD1hbyh7dHlwZTppU30pLGlTLsm1aW5qPXZuKHtwcm92aWRlcnM6W2VTXSxpbXBvcnRzOltbb1NdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoaVMsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltvU10scHJvdmlkZXJzOltlU119XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhpUyx7aW1wb3J0czpbb1NdfSk7Y29uc3QgYVM9SlAoIltBcHAgUm91dGluZ10gRGlzY2FyZGluZyBVbnNhdmVkIFVwZGF0ZXMiKSxyUz1KUCgiW0FwcCBSb3V0aW5nXSBTdGF0ZSBSZWh5ZHJhdGVkIEZyb20gVXJsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksc1M9SlAoIltBcHAgUm91dGluZ10gUm91dGUgQ29uZmlnIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGxTPUpQKCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW9uIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGNTPUpQKCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZFM9SlAoIltBcHAgUm91dGluZ10gSW4gQXBwIE5hdmlnYXRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHBTPW5ldyBHYSgiW0FwcCBSb3V0aW5nXSBEaXJ0eSBVcGRhdGVzIik7Y2xhc3MgbVN7Y29uc3RydWN0b3IodCl7dGhpcy5kaXJ0eVVwZGF0ZXNTZWxlY3RvckZhY3Rvcmllcz10fWdldERpcnR5VXBkYXRlc1NlbGVjdG9ycygpe3ZhciB0O3JldHVybiBudWxsIT09KHQ9dGhpcy5kaXJ0eVVwZGF0ZXNTZWxlY3RvckZhY3RvcmllcykmJnZvaWQgMCE9PXQ/dDpbXX1zdGF0aWMgcmVnaXN0ZXJEaXJ0eVVwZGF0ZXModCl7cmV0dXJue25nTW9kdWxlOm1TLHByb3ZpZGVyczpbe3Byb3ZpZGU6cFMsbXVsdGk6ITAsdXNlRmFjdG9yeTp0fV19fX1tUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bVMpKHZyKHBTLDgpKX0sbVMuybVtb2Q9YW8oe3R5cGU6bVN9KSxtUy7JtWluaj12bih7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChtUyxbe3R5cGU6QXl9XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W3BTXX1dfV19KSxudWxsKTtjb25zdCB1Uz1uZXcgR2EoIltBcHAgUm91dGluZ10gUHJvZ3JhbW1hdGljYWwgTmF2aWdhdGlvbiBQcm92aWRlciIpO2NsYXNzIGZTe2NvbnN0cnVjdG9yKHQpe3RoaXMucHJvdmlkZXJzPW5ldyBNYXA7Zm9yKGNvbnN0IGUgb2YgdHx8W10pe2lmKHRoaXMucHJvdmlkZXJzLmhhcyhlLmFjdGlvbkNyZWF0b3IudHlwZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYCIke2UuYWN0aW9uQ3JlYXRvci50eXBlfSIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGZvciBuYXYuIE11bHRpcGxlIG5hdmlnYXRpb25zIG9uIHNhbWUga2ljayBpcyBub3QgYWxsb3dlZC5gKTt0aGlzLnByb3ZpZGVycy5zZXQoZS5hY3Rpb25DcmVhdG9yLnR5cGUsZS5sYW1iZGEpfX1nZXROYXZpZ2F0aW9uKHQpe2NvbnN0IGU9dGhpcy5wcm92aWRlcnMuZ2V0KHQudHlwZSk7cmV0dXJuIGU/ZSh0KTpudWxsfXN0YXRpYyByZWdpc3RlclByb2dyYW1tYXRpY2FsTmF2aWdhdGlvbih0KXtyZXR1cm57bmdNb2R1bGU6ZlMscHJvdmlkZXJzOlt7cHJvdmlkZTp1UyxtdWx0aTohMCx1c2VGYWN0b3J5OnR9XX19fWZ1bmN0aW9uIGdTKHQpe3JldHVybiBudWxsIT10LnJvdXRlS2luZH1mdW5jdGlvbiBoUyh0KXtyZXR1cm4gdlModCkubWFwKCh0PT57Y29uc3QgZT10LnN0YXJ0c1dpdGgoIjoiKTtyZXR1cm4gZT97cGF0aFBhcnQ6dCxpc1BhcmFtOiEwLHBhcmFtTmFtZTp0LnNsaWNlKDEpfTp7cGF0aFBhcnQ6dCxpc1BhcmFtOmV9fSkpfWZTLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxmUykodnIodVMsOCkpfSxmUy7JtW1vZD1hbyh7dHlwZTpmU30pLGZTLsm1aW5qPXZuKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGZTLFt7dHlwZTpBeSxhcmdzOlt7fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOlt1U119XX1dfSksbnVsbCk7Y2xhc3MgYlN7Y29uc3RydWN0b3IodCl7dGhpcy52YWxpZGF0ZUNvbmZpZyh0KSx0aGlzLnBhdGhGcmFnbWVudHM9aFModC5wYXRoKSx0aGlzLnBhdGhNYXRjaGVycz10aGlzLmdldFBhdGhNYXRjaGVycyh0aGlzLnBhdGhGcmFnbWVudHMpfXN0YXRpYyBnZXRNYXRjaGVyKHQpe3JldHVybiBnUyh0KT9uZXcgeVModCk6KGZ1bmN0aW9uIGUodCl7cmV0dXJuIHZvaWQgMCE9PXQucmVkaXJlY3Rpb25QYXRofSkodCk/bmV3IF9TKHQpOm5ldyBDUyh0KX12YWxpZGF0ZUNvbmZpZyh7cGF0aDp0fSl7aWYoIXQuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBzaG91bGQgc3RhcnQgd2l0aCAnLycuICR7dH1gKTtsZXQgZT0wO2Zvcig7KGU9dC5pbmRleE9mKCI6IixlKzEpKT49MDspe2lmKCIvIiE9PXRbZS0xXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgY29uZmlnLnBhdGggcGFyYW1ldGVyIHNob3VsZCBjb21lIGFmdGVyICcvJy4gJHt0fWApO2lmKHZvaWQgMD09PXRbZSsxXXx8Ii8iPT09dFtlKzFdKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBwYXJhbWV0ZXIgc2hvdWxkIGhhdmUgbm9uLWVtcHR5IG5hbWUuICR7dH1gKX19Z2V0UGF0aE1hdGNoZXJzKHQpe3JldHVybiB0Lm1hcCgodD0+e2NvbnN0e3BhdGhQYXJ0OmV9PXQ7cmV0dXJuIHQuaXNQYXJhbT9lPT4oe2lzUGFyYW1QYXRoUGFydDohMCxwYXJ0TWF0Y2hlZDohMCxwYXJhbU5hbWU6dC5wYXJhbU5hbWUscGFyYW1WYWx1ZTplfSk6dD0+KHtpc1BhcmFtUGF0aFBhcnQ6ITEscGFydE1hdGNoZWQ6dD09PWV9KX0pKX1tYXRjaCh0KXtsZXQgZT17fTtpZih0aGlzLnBhdGhNYXRjaGVycy5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm57cmVzdWx0OiExfTtsZXQgbj0wO2Zvcihjb25zdCBvIG9mIHRoaXMucGF0aE1hdGNoZXJzKXtjb25zdCBpPW8odFtuKytdKTtpZighaS5wYXJ0TWF0Y2hlZClyZXR1cm57cmVzdWx0OiExfTtpLmlzUGFyYW1QYXRoUGFydCYmKGU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtbaS5wYXJhbU5hbWVdOmkucGFyYW1WYWx1ZX0pKX1yZXR1cm57cmVzdWx0OiEwLHBhcmFtczplLHBhdGhQYXJ0czp0LGlzUmVkaXJlY3Rpb246ITF9fW1hdGNoQnlQYXJhbXModCl7cmV0dXJue3Jlc3VsdDohMCxwYXJhbXM6dCxwYXRoUGFydHM6dGhpcy5yZXByb2plY3RQYXRoQnlQYXJhbXModGhpcy5wYXRoRnJhZ21lbnRzLHQpLGlzUmVkaXJlY3Rpb246ITF9fXJlcHJvamVjdFBhdGhCeVBhcmFtcyh0LGUpe2NvbnN0IG49W107Zm9yKGNvbnN0IG8gb2YgdClpZihvLmlzUGFyYW0pe2NvbnN0e3BhcmFtTmFtZTp0fT1vO2lmKCFlLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBSYW5nZUVycm9yKGBGYWlsZWQgdG8gcmVwcm9qZWN0IHBhcmFtZXRlci4gIiR7dH0iIHBhcmFtZXRlciBzaG91bGQgYmUgcHJlc2VudC5gKTtuLnB1c2goZVt0XSl9ZWxzZSBuLnB1c2goby5wYXRoUGFydCk7cmV0dXJuIG59fWNsYXNzIHlTIGV4dGVuZHMgYlN7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5kZWZpbml0aW9uPXR9fWNsYXNzIF9TIGV4dGVuZHMgYlN7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5kZWZpbml0aW9uPXQsdGhpcy5yZWRpcmVjdGlvbkZyYWdtZW50cz1oUyh0LnJlZGlyZWN0aW9uUGF0aCl9bWF0Y2godCl7Y29uc3QgZT1zdXBlci5tYXRjaCh0KTtpZighZS5yZXN1bHQpcmV0dXJuIGU7Y29uc3Qgbj10aGlzLnJlcHJvamVjdFBhdGhCeVBhcmFtcyh0aGlzLnJlZGlyZWN0aW9uRnJhZ21lbnRzLGUucGFyYW1zKTtyZXR1cm57cmVzdWx0OiEwLHBhcmFtczplLnBhcmFtcyxwYXRoUGFydHM6bixpc1JlZGlyZWN0aW9uOiEwfX19Y2xhc3MgQ1MgZXh0ZW5kcyBiU3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH1tYXRjaCh0KXtjb25zdCBlPXN1cGVyLm1hdGNoKHQpO2lmKCFlLnJlc3VsdClyZXR1cm4gZTtjb25zdHtwYXRoUGFydHM6bixxdWVyeVBhcmFtczpvfT10aGlzLmRlZmluaXRpb24ucmVkaXJlY3Rvcih0KTtyZXR1cm57cmVzdWx0OiEwLHBhcmFtczplLnBhcmFtcyxwYXRoUGFydHM6bixpc1JlZGlyZWN0aW9uOiEwLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6b319fWNsYXNzIE1Te2NvbnN0cnVjdG9yKHQsZT0zKXtpZih0aGlzLm1heFJlZGlyZWN0aW9uPWUsZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJtYXhSZWRpcmVjdGlvbiBoYXMgdG8gYmUgbm9uLW5lZ2F0aXZlIG51bWJlciIpO3RoaXMudmFsaWRhdGVSb3V0ZUNvbmZpZ3ModCksdGhpcy5kZWZhdWx0Um91dGVDb25maWc9bnVsbCx0aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycz1uZXcgTWFwLHRoaXMuY29uZmlnTWF0Y2hlcnM9W107Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1iUy5nZXRNYXRjaGVyKGUpO3RoaXMuY29uZmlnTWF0Y2hlcnMucHVzaCh0KSx0IGluc3RhbmNlb2YgeVMmJih0aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycy5zZXQodC5kZWZpbml0aW9uLnJvdXRlS2luZCx0KSx0LmRlZmluaXRpb24uZGVmYXVsdFJvdXRlJiYodGhpcy5kZWZhdWx0Um91dGVDb25maWc9dCkpfX12YWxpZGF0ZVJvdXRlQ29uZmlncyh0KXtjb25zdCBlPXQuZmlsdGVyKGdTKSxuPWUuZmlsdGVyKCh0PT50LmRlZmF1bHRSb3V0ZSkpO2lmKG4ubGVuZ3RoPjEpe2NvbnN0IHQ9bi5tYXAoKCh7cGF0aDp0fSk9PnQpKS5qb2luKCIsICIpO3Rocm93IG5ldyBSYW5nZUVycm9yKGBUaGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBkZWZhdWx0Um91dGVzLiAke3R9YCl9aWYoMT09PW4ubGVuZ3RoKXtjb25zdHtwYXRoOnR9PW5bMF07aWYoQm9vbGVhbihoUyh0KS5maW5kKCgoe2lzUGFyYW06dH0pPT50KSkpKXRocm93IG5ldyBSYW5nZUVycm9yKGBBIGRlZmF1bHRSb3V0ZSBjYW5ub3QgaGF2ZSBhbnkgcGFyYW1zLiAke3R9YCl9Y29uc3Qgbz1uZXcgU2V0O2Zvcihjb25zdHtyb3V0ZUtpbmQ6dH1vZiBlKXtpZihvLmhhcyh0KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgTXVsdGlwbGUgcm91dGUgY29uZmlndXJhdGlvbiBmb3Iga2luZDogJHt0fS4gQ29uZmlndXJhdGlvbnMgc2hvdWxkIGhhdmUgdW5pcXVlIHJvdXRlS2luZHNgKTtvLmFkZCh0KX19bWF0Y2godCl7dmFyIGU7aWYoIXQucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKCdOYXZpZ2F0aW9uIGhhcyB0byBtYWRlIHdpdGggcGF0aG5hbWUgdGhhdCBzdGFydHMgd2l0aCAiLyInKTtsZXQgbixvPXZTKHQucGF0aG5hbWUpLGk9MCxhPSExO2Zvcig7Oyl7bGV0IHQ9ITE7Zm9yKGNvbnN0IGUgb2YgdGhpcy5jb25maWdNYXRjaGVycyl7Y29uc3QgaT1lLm1hdGNoKG8pO2lmKGkucmVzdWx0KXt0PSEwO2NvbnN0e3BhcmFtczpyLHBhdGhQYXJ0czpzLGlzUmVkaXJlY3Rpb246bH09aTtpZihsKXtvPXMsYT0hMCxuPWkucmVkaXJlY3Rpb25RdWVyeVBhcmFtczticmVha31pZighKGUgaW5zdGFuY2VvZiB5UykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk5vIGNvbmNyZXRlIHJvdXRlIGRlZmluaXRpb24gYG1hdGNoYCByZXR1cm4gcmVkaXJlY3Rpb24iKTtjb25zdHtkZWZpbml0aW9uOmN9PWUsZD17cm91dGVLaW5kOmMucm91dGVLaW5kLHBhcmFtczpyLHBhdGhuYW1lOnhTKHMpLGRlZXBMaW5rUHJvdmlkZXI6Yy5kZWVwTGlua1Byb3ZpZGVyfHxudWxsfTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGQpLGE/e29yaWdpbmF0ZUZyb21SZWRpcmVjdGlvbjohMCxyZWRpcmVjdGlvbk9ubHlRdWVyeVBhcmFtczpufTp7b3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExfSl9fWlmKGEmJmkrKywhdHx8aT50aGlzLm1heFJlZGlyZWN0aW9uKWJyZWFrfWlmKGk+dGhpcy5tYXhSZWRpcmVjdGlvbil0aHJvdyBuZXcgRXJyb3IoYFBvdGVudGlhbCByZWRpcmVjdGlvbiBsb29wIChyZWRpcmVjdGluZyBtb3JlIHRoYW4gJHt0aGlzLm1heFJlZGlyZWN0aW9ufSB0aW1lcy4gUGxlYXNlIGRvIG5vdCBoYXZlIGN5Y2xlcyBpbiB0aGUgcm91dGVzLmApO2lmKHRoaXMuZGVmYXVsdFJvdXRlQ29uZmlnKXtjb25zdHtkZWZpbml0aW9uOnR9PXRoaXMuZGVmYXVsdFJvdXRlQ29uZmlnO3JldHVybntyb3V0ZUtpbmQ6dC5yb3V0ZUtpbmQsZGVlcExpbmtQcm92aWRlcjpudWxsIT09KGU9dC5kZWVwTGlua1Byb3ZpZGVyKSYmdm9pZCAwIT09ZT9lOm51bGwscGF0aG5hbWU6dC5wYXRoLHBhcmFtczp7fSxvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246YX19cmV0dXJuIG51bGx9bWF0Y2hCeVJvdXRlS2luZCh0LGUpe2NvbnN0IG49dGhpcy5yb3V0ZUtpbmRUb0NvbmNyZXRlQ29uZmlnTWF0Y2hlcnMuZ2V0KHQpO2lmKCFuKXRocm93IG5ldyBSYW5nZUVycm9yKGBSZXF1aXJlcyBjb25maWd1cmF0aW9uIGZvciByb3V0ZUtpbmQ6ICR7dH1gKTtyZXR1cm57cm91dGVLaW5kOnQscGFyYW1zOmUscGF0aG5hbWU6eFMobi5tYXRjaEJ5UGFyYW1zKGUpLnBhdGhQYXJ0cyksZGVlcExpbmtQcm92aWRlcjpuLmRlZmluaXRpb24uZGVlcExpbmtQcm92aWRlcnx8bnVsbCxvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITF9fX1mdW5jdGlvbiB2Uyh0KXtyZXR1cm4gdC5zcGxpdCgiLyIpLnNsaWNlKDEpfWZ1bmN0aW9uIHhTKHQpe3JldHVybiIvIit0LmpvaW4oIi8iKX1jb25zdCBPUz1uZXcgR2EoIltBcHAgUm91dGluZ10gUm91dGUgQ29uZmlnIik7Y2xhc3MgUFN7Y29uc3RydWN0b3IodCl7aWYodGhpcy5yb3V0ZUNvbmZpZ3M9bnVsbCx0aGlzLnJvdXRlS2luZFRvTmdDb21wb25lbnQ9bmV3IE1hcCwhdClyZXR1cm47Y29uc3QgZT1bXTtmb3IoY29uc3QgbiBvZiB0KWZvcihjb25zdCB0IG9mIG4pZS5wdXNoKHQpO3RoaXMucm91dGVDb25maWdzPW5ldyBNUyhlKSxlLmZvckVhY2goKHQ9PntnUyh0KSYmdGhpcy5yb3V0ZUtpbmRUb05nQ29tcG9uZW50LnNldCh0LnJvdXRlS2luZCx0Lm5nQ29tcG9uZW50KX0pKX1nZXRSZWdpc3RlcmVkUm91dGVLaW5kcygpe3JldHVybiB0aGlzLnJvdXRlS2luZFRvTmdDb21wb25lbnQua2V5cygpfWdldFJvdXRlQ29uZmlncygpe3JldHVybiB0aGlzLnJvdXRlQ29uZmlnc31nZXROZ0NvbXBvbmVudEJ5Um91dGVLaW5kKHQpe3JldHVybiB0aGlzLnJvdXRlS2luZFRvTmdDb21wb25lbnQuZ2V0KHQpfHxudWxsfXN0YXRpYyByZWdpc3RlclJvdXRlcyh0KXtyZXR1cm57bmdNb2R1bGU6UFMscHJvdmlkZXJzOlt7cHJvdmlkZTpPUyxtdWx0aTohMCx1c2VGYWN0b3J5OnR9XX19fVBTLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxQUykodnIoT1MsOCkpfSxQUy7JtW1vZD1hbyh7dHlwZTpQU30pLFBTLsm1aW5qPXZuKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFBTLFt7dHlwZTpBeSxhcmdzOlt7fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltPU119XX1dfSksbnVsbCk7Y29uc3Qgd1M9ImFwcF9yb3V0aW5nIixrUz1Ldyh3UyksU1M9Wncoa1MsKHQ9PnQuYWN0aXZlUm91dGUpKSxEUz1adyhrUywodD0+dC5uZXh0Um91dGUpKSxFUz1adyhrUywodD0+dC5yZWdpc3RlcmVkUm91dGVLZXlzKSksUlM9WncoU1MsKHQ9PnQ/dC5yb3V0ZUtpbmQ6WmsuTk9UX1NFVCkpLEFTPVp3KFNTLCh0PT50P3QucGFyYW1zOnt9KSksVFM9WncoUlMsQVMsKCh0LGUpPT5Kayh0LGUpKSksTlM9WncoUlMsQVMsKCh0LGUpPT5Rayh0LGUpKSkselM9WncoUlMsQVMsKCh0LGUpPT57aWYodCE9PVprLkNPTVBBUkVfRVhQRVJJTUVOVClyZXR1cm57fTtjb25zdCBuPShmdW5jdGlvbiBvKHQpe2NvbnN0IGU9bmV3IE1hcCxuPUtrKHQuZXhwZXJpbWVudElkcyk7Zm9yKGNvbnN0e2lkOnQsbmFtZTpvfW9mIG4pbyYmZS5zZXQodCxvKTtyZXR1cm4gZX0pKGUpO3JldHVybiBPYmplY3QuZnJvbUVudHJpZXMobi5lbnRyaWVzKCkpfSkpLElTPUpQKCJbQXBwIFJvdXRpbmddIEVmZmVjdHMgSW5pdCIpO2NsYXNzIEhTe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIpe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy5sb2NhdGlvbj1uLHRoaXMuZGlydHlVcGRhdGVzUmVnaXN0cnk9byx0aGlzLnJlZ2lzdHJ5PWksdGhpcy5wcm9ncmFtbWF0aWNhbE5hdk1vZHVsZT1hLHRoaXMuYXBwUm9vdFByb3ZpZGVyPXIsdGhpcy5vbk5hdmlnYXRpb25SZXF1ZXN0ZWQkPXRoaXMuYWN0aW9ucyQucGlwZShEayhsUyksSXQoKHQ9Pntjb25zdCBlPXQucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpP3RoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QodC5wYXRobmFtZSk6dGhpcy5sb2NhdGlvbi5nZXRSZXNvbHZlZFBhdGgodC5wYXRobmFtZSk7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7cGF0aG5hbWU6ZX0pfSkpKSx0aGlzLmJvb3RzdHJhcFJlZHVjZXJzJD1NaygoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShEayhJUyksSXQoKCgpPT5zUyh7cm91dGVLaW5kczpuZXcgU2V0KHRoaXMucmVnaXN0cnkuZ2V0UmVnaXN0ZXJlZFJvdXRlS2luZHMoKSl9KSkpKSkpLHRoaXMub25Jbml0JD10aGlzLmFjdGlvbnMkLnBpcGUoRGsoSVMpKS5waXBlKENlKDApLEl0KCgoKT0+KHtwYXRobmFtZTp0aGlzLmxvY2F0aW9uLmdldFBhdGgoKSxxdWVyeVBhcmFtczp0aGlzLmxvY2F0aW9uLmdldFNlYXJjaCgpLHJlcGxhY2VTdGF0ZTohMCxicm93c2VySW5pdGlhdGVkOiEwfSkpKSksdGhpcy51c2VySW5pdE5hdlJvdXRlJD1yZSh0aGlzLm9uTmF2aWdhdGlvblJlcXVlc3RlZCQsdGhpcy5vbkluaXQkLHRoaXMubG9jYXRpb24ub25Qb3BTdGF0ZSgpLnBpcGUoSXQoKHQ9Pih7cGF0aG5hbWU6dC5wYXRobmFtZSxyZXBsYWNlU3RhdGU6dC5yZXBsYWNlU3RhdGUsYnJvd3NlckluaXRpYXRlZDohMH0pKSkpKS5waXBlKEl0KCh0PT57aWYoIXQucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBFcnJvcihgW0FwcCByb3V0aW5nXSBwYXRobmFtZSBtdXN0IHN0YXJ0IHdpdGggJy8nLiBHb3Q6ICR7dC5wYXRobmFtZX1gKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtwYXRobmFtZTp0aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBcHBSb290bGVzc1BhdGhuYW1lKHQucGF0aG5hbWUpfSl9KSksSXQoKHQ9Pih7cm91dGVNYXRjaDp0aGlzLnJvdXRlQ29uZmlncz90aGlzLnJvdXRlQ29uZmlncy5tYXRjaCh0KTpudWxsLG9wdGlvbnM6e3JlcGxhY2VTdGF0ZTp0LnJlcGxhY2VTdGF0ZSxicm93c2VySW5pdGlhdGVkOnQuYnJvd3NlckluaXRpYXRlZH19KSkpKSx0aGlzLnByb2dyYW1tdGljYWxOYXZSb3V0ZSQ9dGhpcy5hY3Rpb25zJC5waXBlKEl0KCh0PT50aGlzLnByb2dyYW1tYXRpY2FsTmF2TW9kdWxlLmdldE5hdmlnYXRpb24odCkpKSxjZSgodD0+bnVsbCE9PXQpKSxJdCgodD0+e2NvbnN0IGU9dCxuPWUucm91dGVLaW5kO2xldCBvO3N3aXRjaChlLnJvdXRlS2luZCl7Y2FzZSBaay5DT01QQVJFX0VYUEVSSU1FTlQ6bz17ZXhwZXJpbWVudElkczooaT1lLnJvdXRlUGFyYW1zLmFsaWFzQW5kRXhwZXJpbWVudElkcyxpLm1hcCgoKHthbGlhczp0LGlkOmV9KT0+YCR7dH06JHtlfWApKS5qb2luKCIsIikpfTticmVhaztkZWZhdWx0Om89ZS5yb3V0ZVBhcmFtc312YXIgaTtyZXR1cm57cm91dGVLaW5kOm4scm91dGVQYXJhbXM6b319KSksSXQoKCh7cm91dGVLaW5kOnQscm91dGVQYXJhbXM6ZX0pPT4oe3JvdXRlTWF0Y2g6dGhpcy5yb3V0ZUNvbmZpZ3M/dGhpcy5yb3V0ZUNvbmZpZ3MubWF0Y2hCeVJvdXRlS2luZCh0LGUpOm51bGwsb3B0aW9uczp7cmVwbGFjZVN0YXRlOiExLGJyb3dzZXJJbml0aWF0ZWQ6ITF9fSkpKSksdGhpcy52YWxpZGF0ZWRSb3V0ZSQ9cmUodGhpcy51c2VySW5pdE5hdlJvdXRlJCx0aGlzLnByb2dyYW1tdGljYWxOYXZSb3V0ZSQpLnBpcGUoY2UoKCh7cm91dGVNYXRjaDp0fSk9PkJvb2xlYW4odCkpKSxJdCgodD0+KHtyb3V0ZU1hdGNoOnQucm91dGVNYXRjaCxvcHRpb25zOnQub3B0aW9uc30pKSkpLHRoaXMubmF2aWdhdGUkPU1rKCgoKT0+dGhpcy52YWxpZGF0ZWRSb3V0ZSQucGlwZShWZSh0aGlzLnN0b3JlLnNlbGVjdChTUykpLFp0KCgoW3QsZV0pPT57Y29uc3Qgbj1udWxsIT09ZSYmUWsodC5yb3V0ZU1hdGNoLnJvdXRlS2luZCx0LnJvdXRlTWF0Y2gucGFyYW1zKT09PVFrKGUucm91dGVLaW5kLGUucGFyYW1zKSxvPXRoaXMuZGlydHlVcGRhdGVzUmVnaXN0cnkuZ2V0RGlydHlVcGRhdGVzU2VsZWN0b3JzKCk7cmV0dXJuIG58fCFvLmxlbmd0aD9FdCh0KTokdCh0aGlzLmRpcnR5VXBkYXRlc1JlZ2lzdHJ5LmdldERpcnR5VXBkYXRlc1NlbGVjdG9ycygpLm1hcCgodD0+dGhpcy5zdG9yZS5zZWxlY3QodCkucGlwZShiZSgxKSkpKSkucGlwZShJdCgodD0+dm9pZCAwIT09dFswXS5leHBlcmltZW50SWRzJiZ0WzBdLmV4cGVyaW1lbnRJZHMubGVuZ3RoPjApKSxjZSgodD0+e2lmKHQpe2NvbnN0IHQ9d2luZG93LmNvbmZpcm0oIllvdSBoYXZlIHVuc2F2ZWQgZWRpdHMsIGFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNjYXJkIHRoZW0/Iik7cmV0dXJuIHQmJnRoaXMuc3RvcmUuZGlzcGF0Y2goYVMoKSksdH1yZXR1cm4hMH0pKSxJdCgoKCk9PnQpKSl9KSksRmUoKCh7cm91dGVNYXRjaDp0LG9wdGlvbnM6ZX0pPT57aWYoZS5icm93c2VySW5pdGlhdGVkJiZ0LmRlZXBMaW5rUHJvdmlkZXIpe2NvbnN0IGU9dC5vcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb24mJnQucmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM/dC5yZWRpcmVjdGlvbk9ubHlRdWVyeVBhcmFtczp0aGlzLmxvY2F0aW9uLmdldFNlYXJjaCgpLG49dC5kZWVwTGlua1Byb3ZpZGVyLmRlc2VyaWFsaXplUXVlcnlQYXJhbXMoZSk7dGhpcy5zdG9yZS5kaXNwYXRjaChyUyh7cm91dGVLaW5kOnQucm91dGVLaW5kLHBhcnRpYWxTdGF0ZTpufSkpfX0pKSx6ZSgoKHtyb3V0ZU1hdGNoOnQsb3B0aW9uczplfSk9Pnt2YXIgbjtjb25zdCBvPXtyZXBsYWNlU3RhdGU6bnVsbCE9PShuPWUucmVwbGFjZVN0YXRlKSYmdm9pZCAwIT09biYmbn0saT1FdCh7cm91dGVLaW5kOnQucm91dGVLaW5kLHBhcmFtczp0LnBhcmFtcyxwYXRobmFtZTp0LnBhdGhuYW1lLHF1ZXJ5UGFyYW1zOltdLG5hdmlnYXRpb25PcHRpb25zOm99KTtyZXR1cm4gbnVsbD09PXQuZGVlcExpbmtQcm92aWRlcj9pOnQuZGVlcExpbmtQcm92aWRlci5zZXJpYWxpemVTdGF0ZVRvUXVlcnlQYXJhbXModGhpcy5zdG9yZSkucGlwZShJdCgoKGUsbik9Pih7cm91dGVLaW5kOnQucm91dGVLaW5kLHBhcmFtczp0LnBhcmFtcyxwYXRobmFtZTp0LnBhdGhuYW1lLHF1ZXJ5UGFyYW1zOmUsbmF2aWdhdGlvbk9wdGlvbnM6MD09PW4/bzpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse3JlcGxhY2VTdGF0ZTohMH0pfSkpKSl9KSksRmUoKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGNTKHthZnRlcjp0fSkpfSkpLGdlKDApKS5waXBlKFZlKHRoaXMuc3RvcmUuc2VsZWN0KFNTKSksSXQoKChbdCxlXSk9Pih7cHJlc2VydmVIYXNoOm51bGw9PT1lfHxudWxsPT09dHx8UWsoZS5yb3V0ZUtpbmQsZS5wYXJhbXMpPT09UWsodC5yb3V0ZUtpbmQsdC5wYXJhbXMpLHJvdXRlOnR9KSkpLEZlKCgoe3ByZXNlcnZlSGFzaDp0LHJvdXRlOmV9KT0+eyEoZnVuY3Rpb24gbih0LGUpe3JldHVybiB0LnBhdGhuYW1lPT09ZS5wYXRobmFtZSYmdC5xdWVyeVBhcmFtcy5sZW5ndGg9PT1lLnF1ZXJ5UGFyYW1zLmxlbmd0aCYmdC5xdWVyeVBhcmFtcy5ldmVyeSgoKHQsbik9Pntjb25zdCBvPWUucXVlcnlQYXJhbXNbbl07cmV0dXJuIHQua2V5PT09by5rZXkmJnQudmFsdWU9PT1vLnZhbHVlfSkpfSkoZSx7cGF0aG5hbWU6dGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QXBwUm9vdGxlc3NQYXRobmFtZSh0aGlzLmxvY2F0aW9uLmdldFBhdGgoKSkscXVlcnlQYXJhbXM6dGhpcy5sb2NhdGlvbi5nZXRTZWFyY2goKX0pJiYoZS5uYXZpZ2F0aW9uT3B0aW9ucy5yZXBsYWNlU3RhdGU/dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdCh0aGlzLmxvY2F0aW9uLmdldEZ1bGxQYXRoRnJvbVJvdXRlT3JOYXYoZSx0KSkpOnRoaXMubG9jYXRpb24ucHVzaFN0YXRlKHRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QodGhpcy5sb2NhdGlvbi5nZXRGdWxsUGF0aEZyb21Sb3V0ZU9yTmF2KGUsdCkpKSl9KSkpLnBpcGUoVmUodGhpcy5zdG9yZS5zZWxlY3QoU1MpKSxJdCgoKFt7cm91dGU6dH0sZV0pPT5kUyh7YmVmb3JlOmUsYWZ0ZXI6dH0pKSkpKSksdGhpcy5yb3V0ZUNvbmZpZ3M9aS5nZXRSb3V0ZUNvbmZpZ3MoKX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiBJUygpfX1IUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SFMpKHZyKFNrKSx2cihJdyksdnIodFMpLHZyKG1TKSx2cihQUyksdnIoZlMpLHZyKGVTKSl9LEhTLsm1cHJvdj1Nbih7dG9rZW46SFMsZmFjdG9yeTpIUy7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoSFMsW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlNrfSx7dHlwZTpJd30se3R5cGU6dFN9LHt0eXBlOm1TfSx7dHlwZTpQU30se3R5cGU6ZlN9LHt0eXBlOmVTfV19KSxudWxsKTtjb25zdCBGUz15ayh7YWN0aXZlUm91dGU6bnVsbCxuZXh0Um91dGU6bnVsbCxyZWdpc3RlcmVkUm91dGVLZXlzOm5ldyBTZXR9LGJrKGNTLCgodCx7YWZ0ZXI6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse25leHRSb3V0ZTplfSkpKSxiayhkUywoKHQse2FmdGVyOmV9KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHthY3RpdmVSb3V0ZTplLG5leHRSb3V0ZTpudWxsfSkpKSxiayhzUywoKHQse3JvdXRlS2luZHM6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3JlZ2lzdGVyZWRSb3V0ZUtleXM6ZX0pKSkpO2Z1bmN0aW9uIExTKHQsZSl7cmV0dXJuIEZTKHQsZSl9Y2xhc3MgQlN7fUJTLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxCUyl9LEJTLsm1bW9kPWFvKHt0eXBlOkJTfSksQlMuybVpbmo9dm4oe3Byb3ZpZGVyczpbbVMsZlNdLGltcG9ydHM6W1tQUyxkay5mb3JGZWF0dXJlKHdTLExTKSxXay5mb3JGZWF0dXJlKFtIU10pLGlTLG9TXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEJTLFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbUFMsZGsuZm9yRmVhdHVyZSh3UyxMUyksV2suZm9yRmVhdHVyZShbSFNdKSxpUyxvU10scHJvdmlkZXJzOlttUyxmU119XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhCUyx7aW1wb3J0czpbUFMsY2ssR2ssaVMsb1NdfSk7Y2xhc3MgVlN7fWNvbnN0IGpTPSJfX3RhYl9fIjtjbGFzcyBVU3tjb25zdHJ1Y3Rvcigpe3RoaXMudGZTdG9yYWdlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLXN0b3JhZ2UiKSxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1nbG9iYWxzIikudGZfZ2xvYmFscy5zZXRVc2VIYXNoKCEwKSx0aGlzLnRmU3RvcmFnZS50Zl9zdG9yYWdlLm1pZ3JhdGVMZWdhY3lVUkxTY2hlbWUoKX1nZXRTdHJpbmcodCl7cmV0dXJuIHRoaXMudGZTdG9yYWdlLnRmX3N0b3JhZ2UuZ2V0U3RyaW5nKHQpfXNldFN0cmluZyh0LGUsbil7dGhpcy50ZlN0b3JhZ2UudGZfc3RvcmFnZS5zZXRTdHJpbmcodCxlLG4pfWdldFBsdWdpbklkKCl7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGpTKX1zZXRQbHVnaW5JZCh0LGUpe3RoaXMuc2V0U3RyaW5nKGpTLHQsZSl9fXZhciBHUztVUy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VVMpfSxVUy7JtXByb3Y9TW4oe3Rva2VuOlVTLGZhY3Rvcnk6VVMuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFVTLFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVybltdfSksbnVsbCksKGZ1bmN0aW9uKHQpe3QuQlJPV1NFUl9ERUZBVUxUPSJicm93c2VyX2RlZmF1bHQiLHQuTElHSFQ9ImxpZ2h0Iix0LkRBUks9ImRhcmsifSkoR1N8fChHUz17fSkpO2NvbnN0IFdTPUpQKCJbUGVyc2lzdGVudCBTZXR0aW5nc10gR2xvYmFsIFNldHRpbmdzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFlTPW5ldyBHYSgiW1BlcnNpc3RlbnQgU2V0dGluZ3NdIEdsb2JhbCBTZXR0aW5ncyIpO2NsYXNzIHFTe2NvbnN0cnVjdG9yKHQpe3RoaXMuZ2xvYmFsU2V0dGluZ1NlbGVjdG9ycz1bXSx0JiYodGhpcy5nbG9iYWxTZXR0aW5nU2VsZWN0b3JzPXQubWFwKCh0PT50KCkpKSl9Z2V0R2xvYmFsU2V0dGluZ1NlbGVjdG9ycygpe3ZhciB0O3JldHVybiBudWxsIT09KHQ9dGhpcy5nbG9iYWxTZXR0aW5nU2VsZWN0b3JzKSYmdm9pZCAwIT09dD90OltdfXN0YXRpYyBkZWZpbmVHbG9iYWxTZXR0aW5nKHQpe3JldHVybntuZ01vZHVsZTpxUyxwcm92aWRlcnM6W3twcm92aWRlOllTLG11bHRpOiEwLHVzZVZhbHVlOnR9XX19fXFTLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxxUykodnIoWVMsOCkpfSxxUy7JtW1vZD1hbyh7dHlwZTpxU30pLHFTLsm1aW5qPXZuKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHFTLFt7dHlwZTpBeX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbWVNdfV19XX0pLG51bGwpO2NsYXNzIFpTe3NldEl0ZW0odCxlKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0LGUpfWdldEl0ZW0odCl7cmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHQpfXJlbW92ZUl0ZW0odCl7bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odCl9fVpTLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxaUyl9LFpTLsm1cHJvdj1Nbih7dG9rZW46WlMsZmFjdG9yeTpaUy7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoWlMsW3t0eXBlOmltfV0sbnVsbCxudWxsKTtjbGFzcyBYU3t9WFMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFhTKX0sWFMuybVtb2Q9YW8oe3R5cGU6WFN9KSxYUy7JtWluaj12bih7cHJvdmlkZXJzOltaU119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFhTLFt7dHlwZTpBeSxhcmdzOlt7cHJvdmlkZXJzOltaU119XX1dLG51bGwsbnVsbCk7Y29uc3QgS1M9Il90Yl9nbG9iYWxfc2V0dGluZ3MudGltZXNlcmllcyIsSlM9Il90Yl9nbG9iYWxfc2V0dGluZ3MiLFFTPSJub3RpZmljYXRpb25MYXN0UmVhZFRpbWVzdGFtcCI7Y2xhc3MgJFN7fSRTLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHwkUyl9LCRTLsm1cHJvdj1Nbih7dG9rZW46JFMsZmFjdG9yeTokUy7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoJFMsW3t0eXBlOmltfV0sbnVsbCxudWxsKTtjbGFzcyB0RHt9dEQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHREKX0sdEQuybVwcm92PU1uKHt0b2tlbjp0RCxmYWN0b3J5OnRELsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh0RCxbe3R5cGU6aW19XSxudWxsLG51bGwpO2NsYXNzIGVEIGV4dGVuZHMgdER7dWlUb0JhY2tlbmQodCl7cmV0dXJue2lnbm9yZU91dGxpZXJzOnQuaWdub3JlT3V0bGllcnMsc2NhbGFyU21vb3RoaW5nOnQuc2NhbGFyU21vb3RoaW5nLHRvb2x0aXBTb3J0OnQudG9vbHRpcFNvcnRTdHJpbmcsYXV0b1JlbG9hZDp0LmF1dG9SZWxvYWQsYXV0b1JlbG9hZFBlcmlvZEluTXM6dC5hdXRvUmVsb2FkUGVyaW9kSW5NcyxwYWdpbmF0aW9uU2l6ZTp0LnBhZ2VTaXplLHRoZW1lOnQudGhlbWVPdmVycmlkZSxub3RpZmljYXRpb25MYXN0UmVhZFRpbWVJbk1zOnQubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyxzaWRlQmFyV2lkdGhJblBlcmNlbnQ6dC5zaWRlQmFyV2lkdGhJblBlcmNlbnQsdGltZVNlcmllc1Byb21vdGlvbkRpc21pc3NlZDp0LnRpbWVTZXJpZXNQcm9tb3Rpb25EaXNtaXNzZWQsdGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZDp0LnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWR9fWJhY2tlbmRUb1VpKHQpe2NvbnN0IGU9e307cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoInNjYWxhclNtb290aGluZyIpJiYibnVtYmVyIj09dHlwZW9mIHQuc2NhbGFyU21vb3RoaW5nJiYoZS5zY2FsYXJTbW9vdGhpbmc9dC5zY2FsYXJTbW9vdGhpbmcpLHQuaGFzT3duUHJvcGVydHkoImlnbm9yZU91dGxpZXJzIikmJiJib29sZWFuIj09dHlwZW9mIHQuaWdub3JlT3V0bGllcnMmJihlLmlnbm9yZU91dGxpZXJzPXQuaWdub3JlT3V0bGllcnMpLHQuaGFzT3duUHJvcGVydHkoInRvb2x0aXBTb3J0IikmJiJzdHJpbmciPT10eXBlb2YgdC50b29sdGlwU29ydCYmKGUudG9vbHRpcFNvcnRTdHJpbmc9dC50b29sdGlwU29ydCksdC5oYXNPd25Qcm9wZXJ0eSgiYXV0b1JlbG9hZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiB0LmF1dG9SZWxvYWQmJihlLmF1dG9SZWxvYWQ9dC5hdXRvUmVsb2FkKSx0Lmhhc093blByb3BlcnR5KCJhdXRvUmVsb2FkUGVyaW9kSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIHQuYXV0b1JlbG9hZFBlcmlvZEluTXMmJihlLmF1dG9SZWxvYWRQZXJpb2RJbk1zPXQuYXV0b1JlbG9hZFBlcmlvZEluTXMpLHQuaGFzT3duUHJvcGVydHkoInBhZ2luYXRpb25TaXplIikmJiJudW1iZXIiPT10eXBlb2YgdC5wYWdpbmF0aW9uU2l6ZSYmKGUucGFnZVNpemU9dC5wYWdpbmF0aW9uU2l6ZSksdC5oYXNPd25Qcm9wZXJ0eSgidGhlbWUiKSYmInN0cmluZyI9PXR5cGVvZiB0LnRoZW1lJiZuZXcgU2V0KE9iamVjdC52YWx1ZXMoR1MpKS5oYXModC50aGVtZSkmJihlLnRoZW1lT3ZlcnJpZGU9dC50aGVtZSksdC5oYXNPd25Qcm9wZXJ0eSgibm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIHQubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyYmKGUubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Ncz10Lm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMpLHQuaGFzT3duUHJvcGVydHkoInNpZGVCYXJXaWR0aEluUGVyY2VudCIpJiYibnVtYmVyIj09dHlwZW9mIHQuc2lkZUJhcldpZHRoSW5QZXJjZW50JiYoZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ9dC5zaWRlQmFyV2lkdGhJblBlcmNlbnQpLHQuaGFzT3duUHJvcGVydHkoInRpbWVTZXJpZXNQcm9tb3Rpb25EaXNtaXNzZWQiKSYmImJvb2xlYW4iPT10eXBlb2YgdC50aW1lU2VyaWVzUHJvbW90aW9uRGlzbWlzc2VkJiYoZS50aW1lU2VyaWVzUHJvbW90aW9uRGlzbWlzc2VkPXQudGltZVNlcmllc1Byb21vdGlvbkRpc21pc3NlZCksdC5oYXNPd25Qcm9wZXJ0eSgidGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiB0LnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQmJihlLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQ9dC50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkKSxlfX1lRC7JtWZhYz0oZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4odHx8KHQ9QWEoZUQpKSkobnx8ZUQpfX0pKCksZUQuybVwcm92PU1uKHt0b2tlbjplRCxmYWN0b3J5OmVELsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChlRCxbe3R5cGU6aW19XSxudWxsLG51bGwpO2NsYXNzIG5Ee2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5sb2NhbFN0b3JhZ2U9dCx0aGlzLmNvbnZlcnRlcj1lfXNldFNldHRpbmdzKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KT90aGlzLmdldFNldHRpbmdzKCkucGlwZShGZSgoZT0+e3RoaXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oSlMsSlNPTi5zdHJpbmdpZnkodGhpcy5jb252ZXJ0ZXIudWlUb0JhY2tlbmQoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHQpKSkpLHRoaXMubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oS1MpLHRoaXMubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oUVMpfSkpLEl0KCgoKT0+e30pKSk6cnR9ZGVzZXJpYWxpemUodCl7dHJ5e3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKHQpe3JldHVybnt9fX1nZXRTZXR0aW5ncygpe3ZhciB0LGU7Y29uc3Qgbj10aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKFFTKSxvPXRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUobj9KU09OLnN0cmluZ2lmeSh7bm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NczpOdW1iZXIobil9KToie30iKSksaT10aGlzLmNvbnZlcnRlci5iYWNrZW5kVG9VaSh0aGlzLmRlc2VyaWFsaXplKG51bGwhPT0odD10aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKEtTKSkmJnZvaWQgMCE9PXQ/dDoie30iKSksYT10aGlzLmNvbnZlcnRlci5iYWNrZW5kVG9VaSh0aGlzLmRlc2VyaWFsaXplKG51bGwhPT0oZT10aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKEpTKSkmJnZvaWQgMCE9PWU/ZToie30iKSk7cmV0dXJuIEV0KE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG8pLGkpLGEpKX19bkQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG5EKSh2cihaUyksdnIodEQpKX0sbkQuybVwcm92PU1uKHt0b2tlbjpuRCxmYWN0b3J5Om5ELsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChuRCxbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WlN9LHt0eXBlOnREfV19KSxudWxsKTtjbGFzcyBvRHt9b0QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG9EKX0sb0QuybVtb2Q9YW8oe3R5cGU6b0R9KSxvRC7JtWluaj12bih7cHJvdmlkZXJzOlt7cHJvdmlkZTokUyx1c2VDbGFzczpuRH0se3Byb3ZpZGU6dEQsdXNlQ2xhc3M6ZUR9XSxpbXBvcnRzOltbWFNdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgob0QsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltYU10scHJvdmlkZXJzOlt7cHJvdmlkZTokUyx1c2VDbGFzczpuRH0se3Byb3ZpZGU6dEQsdXNlQ2xhc3M6ZUR9XX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKG9ELHtpbXBvcnRzOltYU119KTtjb25zdCBpRD1KUCgiW1BlcnNpc3RlbnQgU2V0dGluZ3NdIEVmZmVjdHMgSW5pdCIpO2NsYXNzIGFEe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy5jb25maWdNb2R1bGU9bix0aGlzLmRhdGFTb3VyY2U9byx0aGlzLmluaXRpYWxpemVBbmRVcGRhdGVTZXR0aW5ncyQ9TWsoKCgpPT57Y29uc3QgdD10aGlzLmFjdGlvbnMkLnBpcGUoRGsoaUQpLFp0KCgoKT0+dGhpcy5kYXRhU291cmNlLmdldFNldHRpbmdzKCkpKSxGZSgodD0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goV1Moe3BhcnRpYWxTZXR0aW5nczp0fSkpfSkpLENlKDApLFp0KCgoKT0+cmUoLi4udGhpcy5jb25maWdNb2R1bGUuZ2V0R2xvYmFsU2V0dGluZ1NlbGVjdG9ycygpLm1hcCgodD0+dGhpcy5zdG9yZS5zZWxlY3QodCkucGlwZShNZSgoKHQsZSk9Pntjb25zdCBuPU9iamVjdC52YWx1ZXModCksbz1PYmplY3QudmFsdWVzKGUpO3JldHVybiBuLmxlbmd0aD09PW8ubGVuZ3RoJiZuLmV2ZXJ5KCgodCxlKT0+dD09PW9bZV0pKX0pKSxUZSgxKSkpKSkpKSxFZSgpKTtyZXR1cm4gdC5waXBlKChmdW5jdGlvbiBlKHQpe3JldHVybiBSKChmdW5jdGlvbihlLG4pe3ZhciBvPVtdO3JldHVybiBlLnN1YnNjcmliZShuZXcgVChuLChmdW5jdGlvbih0KXtyZXR1cm4gby5wdXNoKHQpfSksKGZ1bmN0aW9uKCl7bi5uZXh0KG8pLG4uY29tcGxldGUoKX0pKSksdC5zdWJzY3JpYmUobmV3IFQobiwoZnVuY3Rpb24oKXt2YXIgdD1vO289W10sbi5uZXh0KHQpfSkseSkpLGZ1bmN0aW9uKCl7bz1udWxsfX0pKX0pKHQucGlwZShnZSg1MDApKSksWnQoKHQ9Pntjb25zdCBlPXt9O2Zvcihjb25zdCBuIG9mIHQpT2JqZWN0LmFzc2lnbihlLG4pO3JldHVybiB0aGlzLmRhdGFTb3VyY2Uuc2V0U2V0dGluZ3MoZSl9KSkpfSkse2Rpc3BhdGNoOiExfSl9bmdyeE9uSW5pdEVmZmVjdHMoKXtyZXR1cm4gaUQoKX19YUQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGFEKSh2cihTayksdnIoSXcpLHZyKHFTKSx2cigkUykpfSxhRC7JtXByb3Y9TW4oe3Rva2VuOmFELGZhY3Rvcnk6YUQuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGFELFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpTa30se3R5cGU6SXd9LHt0eXBlOnFTfSx7dHlwZTokU31dfSksbnVsbCk7Y2xhc3MgckR7fXJELsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxyRCl9LHJELsm1bW9kPWFvKHt0eXBlOnJEfSksckQuybVpbmo9dm4oe3Byb3ZpZGVyczpbcVNdLGltcG9ydHM6W1tXay5mb3JGZWF0dXJlKFthRF0pLG9EXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHJELFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbV2suZm9yRmVhdHVyZShbYURdKSxvRF0scHJvdmlkZXJzOltxU119XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhyRCx7aW1wb3J0czpbR2ssb0RdfSk7Ci8qKgogICAgICogQGxpY2Vuc2UgQW5ndWxhciB2MTIuMi4xCiAgICAgKiAoYykgMjAxMC0yMDIxIEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5pby8KICAgICAqIExpY2Vuc2U6IE1JVAogICAgICovCmNsYXNzIHNEe31jbGFzcyBsRHt9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIGNEe2NvbnN0cnVjdG9yKHQpe3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsdD90aGlzLmxhenlJbml0PSJzdHJpbmciPT10eXBlb2YgdD8oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLHQuc3BsaXQoIlxuIikuZm9yRWFjaCgodD0+e2NvbnN0IGU9dC5pbmRleE9mKCI6Iik7aWYoZT4wKXtjb25zdCBuPXQuc2xpY2UoMCxlKSxvPW4udG9Mb3dlckNhc2UoKSxpPXQuc2xpY2UoZSsxKS50cmltKCk7dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKG4sbyksdGhpcy5oZWFkZXJzLmhhcyhvKT90aGlzLmhlYWRlcnMuZ2V0KG8pLnB1c2goaSk6dGhpcy5oZWFkZXJzLnNldChvLFtpXSl9fSkpfTooKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGU9PntsZXQgbj10W2VdO2NvbnN0IG89ZS50b0xvd2VyQ2FzZSgpOyJzdHJpbmciPT10eXBlb2YgbiYmKG49W25dKSxuLmxlbmd0aD4wJiYodGhpcy5oZWFkZXJzLnNldChvLG4pLHRoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShlLG8pKX0pKX06dGhpcy5oZWFkZXJzPW5ldyBNYXB9aGFzKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmhlYWRlcnMuaGFzKHQudG9Mb3dlckNhc2UoKSl9Z2V0KHQpe3RoaXMuaW5pdCgpO2NvbnN0IGU9dGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpO3JldHVybiBlJiZlLmxlbmd0aD4wP2VbMF06bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFsdWVzKCkpfWdldEFsbCh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpfHxudWxsfWFwcGVuZCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoiYSJ9KX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6InMifSl9ZGVsZXRlKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJkIn0pfW1heWJlU2V0Tm9ybWFsaXplZE5hbWUodCxlKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoZSl8fHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQpfWluaXQoKXt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIGNEP3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxhenlVcGRhdGUuZm9yRWFjaCgodD0+dGhpcy5hcHBseVVwZGF0ZSh0KSkpLHRoaXMubGF6eVVwZGF0ZT1udWxsKSl9Y29weUZyb20odCl7dC5pbml0KCksQXJyYXkuZnJvbSh0LmhlYWRlcnMua2V5cygpKS5mb3JFYWNoKChlPT57dGhpcy5oZWFkZXJzLnNldChlLHQuaGVhZGVycy5nZXQoZSkpLHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQubm9ybWFsaXplZE5hbWVzLmdldChlKSl9KSl9Y2xvbmUodCl7Y29uc3QgZT1uZXcgY0Q7cmV0dXJuIGUubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIGNEP3RoaXMubGF6eUluaXQ6dGhpcyxlLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbdF0pLGV9YXBwbHlVcGRhdGUodCl7Y29uc3QgZT10Lm5hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2godC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBuPXQudmFsdWU7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYobj1bbl0pLDA9PT1uLmxlbmd0aClyZXR1cm47dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKHQubmFtZSxlKTtjb25zdCBvPSgiYSI9PT10Lm9wP3RoaXMuaGVhZGVycy5nZXQoZSk6dm9pZCAwKXx8W107by5wdXNoKC4uLm4pLHRoaXMuaGVhZGVycy5zZXQoZSxvKTticmVhaztjYXNlImQiOmNvbnN0IGk9dC52YWx1ZTtpZihpKXtsZXQgdD10aGlzLmhlYWRlcnMuZ2V0KGUpO2lmKCF0KXJldHVybjt0PXQuZmlsdGVyKCh0PT4tMT09PWkuaW5kZXhPZih0KSkpLDA9PT10Lmxlbmd0aD8odGhpcy5oZWFkZXJzLmRlbGV0ZShlKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoZSkpOnRoaXMuaGVhZGVycy5zZXQoZSx0KX1lbHNlIHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpfX1mb3JFYWNoKHQpe3RoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKChlPT50KHRoaXMubm9ybWFsaXplZE5hbWVzLmdldChlKSx0aGlzLmhlYWRlcnMuZ2V0KGUpKSkpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgZER7ZW5jb2RlS2V5KHQpe3JldHVybiBwRCh0KX1lbmNvZGVWYWx1ZSh0KXtyZXR1cm4gcEQodCl9ZGVjb2RlS2V5KHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9ZGVjb2RlVmFsdWUodCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX19ZnVuY3Rpb24gcEQodCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0KS5yZXBsYWNlKC8lNDAvZ2ksIkAiKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZ2ksIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lM0IvZ2ksIjsiKS5yZXBsYWNlKC8lMkIvZ2ksIisiKS5yZXBsYWNlKC8lM0QvZ2ksIj0iKS5yZXBsYWNlKC8lM0YvZ2ksIj8iKS5yZXBsYWNlKC8lMkYvZ2ksIi8iKX1mdW5jdGlvbiBtRCh0KXtyZXR1cm5gJHt0fWB9Y2xhc3MgdUR7Y29uc3RydWN0b3IodD17fSl7aWYodGhpcy51cGRhdGVzPW51bGwsdGhpcy5jbG9uZUZyb209bnVsbCx0aGlzLmVuY29kZXI9dC5lbmNvZGVyfHxuZXcgZEQsdC5mcm9tU3RyaW5nKXtpZih0LmZyb21PYmplY3QpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc3BlY2lmeSBib3RoIGZyb21TdHJpbmcgYW5kIGZyb21PYmplY3QuIik7dGhpcy5tYXA9KGZ1bmN0aW9uIGUodCxuKXtjb25zdCBvPW5ldyBNYXA7cmV0dXJuIHQubGVuZ3RoPjAmJnQucmVwbGFjZSgvXlw/LywiIikuc3BsaXQoIiYiKS5mb3JFYWNoKCh0PT57Y29uc3QgZT10LmluZGV4T2YoIj0iKSxbaSxhXT0tMT09ZT9bbi5kZWNvZGVLZXkodCksIiJdOltuLmRlY29kZUtleSh0LnNsaWNlKDAsZSkpLG4uZGVjb2RlVmFsdWUodC5zbGljZShlKzEpKV0scj1vLmdldChpKXx8W107ci5wdXNoKGEpLG8uc2V0KGkscil9KSksb30pKHQuZnJvbVN0cmluZyx0aGlzLmVuY29kZXIpfWVsc2UgdC5mcm9tT2JqZWN0Pyh0aGlzLm1hcD1uZXcgTWFwLE9iamVjdC5rZXlzKHQuZnJvbU9iamVjdCkuZm9yRWFjaCgoZT0+e2NvbnN0IG49dC5mcm9tT2JqZWN0W2VdO3RoaXMubWFwLnNldChlLEFycmF5LmlzQXJyYXkobik/bjpbbl0pfSkpKTp0aGlzLm1hcD1udWxsfWhhcyh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuaGFzKHQpfWdldCh0KXt0aGlzLmluaXQoKTtjb25zdCBlPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gZT9lWzBdOm51bGx9Z2V0QWxsKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5nZXQodCl8fG51bGx9a2V5cygpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubWFwLmtleXMoKSl9YXBwZW5kKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoiYSJ9KX1hcHBlbmRBbGwodCl7Y29uc3QgZT1bXTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgobj0+e2NvbnN0IG89dFtuXTtBcnJheS5pc0FycmF5KG8pP28uZm9yRWFjaCgodD0+e2UucHVzaCh7cGFyYW06bix2YWx1ZTp0LG9wOiJhIn0pfSkpOmUucHVzaCh7cGFyYW06bix2YWx1ZTpvLG9wOiJhIn0pfSkpLHRoaXMuY2xvbmUoZSl9c2V0KHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoicyJ9KX1kZWxldGUodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJkIn0pfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMua2V5cygpLm1hcCgodD0+e2NvbnN0IGU9dGhpcy5lbmNvZGVyLmVuY29kZUtleSh0KTtyZXR1cm4gdGhpcy5tYXAuZ2V0KHQpLm1hcCgodD0+ZSsiPSIrdGhpcy5lbmNvZGVyLmVuY29kZVZhbHVlKHQpKSkuam9pbigiJiIpfSkpLmZpbHRlcigodD0+IiIhPT10KSkuam9pbigiJiIpfWNsb25lKHQpe2NvbnN0IGU9bmV3IHVEKHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0pO3JldHVybiBlLmNsb25lRnJvbT10aGlzLmNsb25lRnJvbXx8dGhpcyxlLnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdCh0KSxlfWluaXQoKXtudWxsPT09dGhpcy5tYXAmJih0aGlzLm1hcD1uZXcgTWFwKSxudWxsIT09dGhpcy5jbG9uZUZyb20mJih0aGlzLmNsb25lRnJvbS5pbml0KCksdGhpcy5jbG9uZUZyb20ua2V5cygpLmZvckVhY2goKHQ9PnRoaXMubWFwLnNldCh0LHRoaXMuY2xvbmVGcm9tLm1hcC5nZXQodCkpKSksdGhpcy51cGRhdGVzLmZvckVhY2goKHQ9Pntzd2l0Y2godC5vcCl7Y2FzZSJhIjpjYXNlInMiOmNvbnN0IGU9KCJhIj09PXQub3A/dGhpcy5tYXAuZ2V0KHQucGFyYW0pOnZvaWQgMCl8fFtdO2UucHVzaChtRCh0LnZhbHVlKSksdGhpcy5tYXAuc2V0KHQucGFyYW0sZSk7YnJlYWs7Y2FzZSJkIjppZih2b2lkIDA9PT10LnZhbHVlKXt0aGlzLm1hcC5kZWxldGUodC5wYXJhbSk7YnJlYWt9e2xldCBlPXRoaXMubWFwLmdldCh0LnBhcmFtKXx8W107Y29uc3Qgbj1lLmluZGV4T2YobUQodC52YWx1ZSkpOy0xIT09biYmZS5zcGxpY2UobiwxKSxlLmxlbmd0aD4wP3RoaXMubWFwLnNldCh0LnBhcmFtLGUpOnRoaXMubWFwLmRlbGV0ZSh0LnBhcmFtKX19fSkpLHRoaXMuY2xvbmVGcm9tPXRoaXMudXBkYXRlcz1udWxsKX19Y2xhc3MgZkR7Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXNldCh0LGUpe3JldHVybiB0aGlzLm1hcC5zZXQodCxlKSx0aGlzfWdldCh0KXtyZXR1cm4gdGhpcy5tYXAuaGFzKHQpfHx0aGlzLm1hcC5zZXQodCx0LmRlZmF1bHRWYWx1ZSgpKSx0aGlzLm1hcC5nZXQodCl9ZGVsZXRlKHQpe3JldHVybiB0aGlzLm1hcC5kZWxldGUodCksdGhpc31rZXlzKCl7cmV0dXJuIHRoaXMubWFwLmtleXMoKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGdEKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn1mdW5jdGlvbiBoRCh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJnQgaW5zdGFuY2VvZiBCbG9ifWZ1bmN0aW9uIGJEKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgRm9ybURhdGEmJnQgaW5zdGFuY2VvZiBGb3JtRGF0YX1jbGFzcyB5RHtjb25zdHJ1Y3Rvcih0LGUsbixvKXtsZXQgaTtpZih0aGlzLnVybD1lLHRoaXMuYm9keT1udWxsLHRoaXMucmVwb3J0UHJvZ3Jlc3M9ITEsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5yZXNwb25zZVR5cGU9Impzb24iLHRoaXMubWV0aG9kPXQudG9VcHBlckNhc2UoKSwoZnVuY3Rpb24gYSh0KXtzd2l0Y2godCl7Y2FzZSJERUxFVEUiOmNhc2UiR0VUIjpjYXNlIkhFQUQiOmNhc2UiT1BUSU9OUyI6Y2FzZSJKU09OUCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19KSh0aGlzLm1ldGhvZCl8fG8/KHRoaXMuYm9keT12b2lkIDAhPT1uP246bnVsbCxpPW8pOmk9bixpJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIWkucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFpLndpdGhDcmVkZW50aWFscyxpLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPWkucmVzcG9uc2VUeXBlKSxpLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9aS5oZWFkZXJzKSxpLmNvbnRleHQmJih0aGlzLmNvbnRleHQ9aS5jb250ZXh0KSxpLnBhcmFtcyYmKHRoaXMucGFyYW1zPWkucGFyYW1zKSksdGhpcy5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBjRCksdGhpcy5jb250ZXh0fHwodGhpcy5jb250ZXh0PW5ldyBmRCksdGhpcy5wYXJhbXMpe2NvbnN0IHQ9dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09dC5sZW5ndGgpdGhpcy51cmxXaXRoUGFyYW1zPWU7ZWxzZXtjb25zdCBuPWUuaW5kZXhPZigiPyIpO3RoaXMudXJsV2l0aFBhcmFtcz1lKygtMT09PW4/Ij8iOm48ZS5sZW5ndGgtMT8iJiI6IiIpK3R9fWVsc2UgdGhpcy5wYXJhbXM9bmV3IHVELHRoaXMudXJsV2l0aFBhcmFtcz1lfXNlcmlhbGl6ZUJvZHkoKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOmdEKHRoaXMuYm9keSl8fGhEKHRoaXMuYm9keSl8fGJEKHRoaXMuYm9keSl8fChmdW5jdGlvbiB0KGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgVVJMU2VhcmNoUGFyYW1zJiZlIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zfSkodGhpcy5ib2R5KXx8InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/dGhpcy5ib2R5OnRoaXMuYm9keSBpbnN0YW5jZW9mIHVEP3RoaXMuYm9keS50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT9KU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkpOnRoaXMuYm9keS50b1N0cmluZygpfWRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHl8fGJEKHRoaXMuYm9keSk/bnVsbDpoRCh0aGlzLmJvZHkpP3RoaXMuYm9keS50eXBlfHxudWxsOmdEKHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT8idGV4dC9wbGFpbiI6dGhpcy5ib2R5IGluc3RhbmNlb2YgdUQ/ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Ijoib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8Im51bWJlciI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlwZW9mIHRoaXMuYm9keT8iYXBwbGljYXRpb24vanNvbiI6bnVsbH1jbG9uZSh0PXt9KXt2YXIgZTtjb25zdCBuPXQubWV0aG9kfHx0aGlzLm1ldGhvZCxvPXQudXJsfHx0aGlzLnVybCxpPXQucmVzcG9uc2VUeXBlfHx0aGlzLnJlc3BvbnNlVHlwZSxhPXZvaWQgMCE9PXQuYm9keT90LmJvZHk6dGhpcy5ib2R5LHI9dm9pZCAwIT09dC53aXRoQ3JlZGVudGlhbHM/dC53aXRoQ3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHMscz12b2lkIDAhPT10LnJlcG9ydFByb2dyZXNzP3QucmVwb3J0UHJvZ3Jlc3M6dGhpcy5yZXBvcnRQcm9ncmVzcztsZXQgbD10LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxjPXQucGFyYW1zfHx0aGlzLnBhcmFtcztjb25zdCBkPW51bGwhPT0oZT10LmNvbnRleHQpJiZ2b2lkIDAhPT1lP2U6dGhpcy5jb250ZXh0O3JldHVybiB2b2lkIDAhPT10LnNldEhlYWRlcnMmJihsPU9iamVjdC5rZXlzKHQuc2V0SGVhZGVycykucmVkdWNlKCgoZSxuKT0+ZS5zZXQobix0LnNldEhlYWRlcnNbbl0pKSxsKSksdC5zZXRQYXJhbXMmJihjPU9iamVjdC5rZXlzKHQuc2V0UGFyYW1zKS5yZWR1Y2UoKChlLG4pPT5lLnNldChuLHQuc2V0UGFyYW1zW25dKSksYykpLG5ldyB5RChuLG8sYSx7cGFyYW1zOmMsaGVhZGVyczpsLGNvbnRleHQ6ZCxyZXBvcnRQcm9ncmVzczpzLHJlc3BvbnNlVHlwZTppLHdpdGhDcmVkZW50aWFsczpyfSl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi92YXIgX0Q7IShmdW5jdGlvbih0KXt0W3QuU2VudD0wXT0iU2VudCIsdFt0LlVwbG9hZFByb2dyZXNzPTFdPSJVcGxvYWRQcm9ncmVzcyIsdFt0LlJlc3BvbnNlSGVhZGVyPTJdPSJSZXNwb25zZUhlYWRlciIsdFt0LkRvd25sb2FkUHJvZ3Jlc3M9M109IkRvd25sb2FkUHJvZ3Jlc3MiLHRbdC5SZXNwb25zZT00XT0iUmVzcG9uc2UiLHRbdC5Vc2VyPTVdPSJVc2VyIn0pKF9EfHwoX0Q9e30pKTtjbGFzcyBDRHtjb25zdHJ1Y3Rvcih0LGU9MjAwLG49Ik9LIil7dGhpcy5oZWFkZXJzPXQuaGVhZGVyc3x8bmV3IGNELHRoaXMuc3RhdHVzPXZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOmUsdGhpcy5zdGF0dXNUZXh0PXQuc3RhdHVzVGV4dHx8bix0aGlzLnVybD10LnVybHx8bnVsbCx0aGlzLm9rPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMH19Y2xhc3MgTUQgZXh0ZW5kcyBDRHtjb25zdHJ1Y3Rvcih0PXt9KXtzdXBlcih0KSx0aGlzLnR5cGU9X0QuUmVzcG9uc2VIZWFkZXJ9Y2xvbmUodD17fSl7cmV0dXJuIG5ldyBNRCh7aGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX19Y2xhc3MgdkQgZXh0ZW5kcyBDRHtjb25zdHJ1Y3Rvcih0PXt9KXtzdXBlcih0KSx0aGlzLnR5cGU9X0QuUmVzcG9uc2UsdGhpcy5ib2R5PXZvaWQgMCE9PXQuYm9keT90LmJvZHk6bnVsbH1jbG9uZSh0PXt9KXtyZXR1cm4gbmV3IHZEKHtib2R5OnZvaWQgMCE9PXQuYm9keT90LmJvZHk6dGhpcy5ib2R5LGhlYWRlcnM6dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOnQudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fWNsYXNzIHhEIGV4dGVuZHMgQ0R7Y29uc3RydWN0b3IodCl7c3VwZXIodCwwLCJVbmtub3duIEVycm9yIiksdGhpcy5uYW1lPSJIdHRwRXJyb3JSZXNwb25zZSIsdGhpcy5vaz0hMSx0aGlzLm1lc3NhZ2U9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwP2BIdHRwIGZhaWx1cmUgZHVyaW5nIHBhcnNpbmcgZm9yICR7dC51cmx8fCIodW5rbm93biB1cmwpIn1gOmBIdHRwIGZhaWx1cmUgcmVzcG9uc2UgZm9yICR7dC51cmx8fCIodW5rbm93biB1cmwpIn06ICR7dC5zdGF0dXN9ICR7dC5zdGF0dXNUZXh0fWAsdGhpcy5lcnJvcj10LmVycm9yfHxudWxsfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gT0QodCxlKXtyZXR1cm57Ym9keTplLGhlYWRlcnM6dC5oZWFkZXJzLGNvbnRleHQ6dC5jb250ZXh0LG9ic2VydmU6dC5vYnNlcnZlLHBhcmFtczp0LnBhcmFtcyxyZXBvcnRQcm9ncmVzczp0LnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTp0LnJlc3BvbnNlVHlwZSx3aXRoQ3JlZGVudGlhbHM6dC53aXRoQ3JlZGVudGlhbHN9fWNsYXNzIFBEe2NvbnN0cnVjdG9yKHQpe3RoaXMuaGFuZGxlcj10fXJlcXVlc3QodCxlLG49e30pe2xldCBvO2lmKHQgaW5zdGFuY2VvZiB5RClvPXQ7ZWxzZXtsZXQgaSxhO2k9bi5oZWFkZXJzIGluc3RhbmNlb2YgY0Q/bi5oZWFkZXJzOm5ldyBjRChuLmhlYWRlcnMpLG4ucGFyYW1zJiYoYT1uLnBhcmFtcyBpbnN0YW5jZW9mIHVEP24ucGFyYW1zOm5ldyB1RCh7ZnJvbU9iamVjdDpuLnBhcmFtc30pKSxvPW5ldyB5RCh0LGUsdm9pZCAwIT09bi5ib2R5P24uYm9keTpudWxsLHtoZWFkZXJzOmksY29udGV4dDpuLmNvbnRleHQscGFyYW1zOmEscmVwb3J0UHJvZ3Jlc3M6bi5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6bi5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6bi53aXRoQ3JlZGVudGlhbHN9KX1jb25zdCBpPUV0KG8pLnBpcGUoKGZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gbChlKT9adCh0LGUsMSk6WnQodCwxKX0pKCh0PT50aGlzLmhhbmRsZXIuaGFuZGxlKHQpKSkpO2lmKHQgaW5zdGFuY2VvZiB5RHx8ImV2ZW50cyI9PT1uLm9ic2VydmUpcmV0dXJuIGk7Y29uc3Qgcj1pLnBpcGUoY2UoKHQ9PnQgaW5zdGFuY2VvZiB2RCkpKTtzd2l0Y2gobi5vYnNlcnZlfHwiYm9keSIpe2Nhc2UiYm9keSI6c3dpdGNoKG8ucmVzcG9uc2VUeXBlKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gci5waXBlKEl0KCh0PT57aWYobnVsbCE9PXQuYm9keSYmISh0LmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIHQuYm9keX0pKSk7Y2FzZSJibG9iIjpyZXR1cm4gci5waXBlKEl0KCh0PT57aWYobnVsbCE9PXQuYm9keSYmISh0LmJvZHkgaW5zdGFuY2VvZiBCbG9iKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIEJsb2IuIik7cmV0dXJuIHQuYm9keX0pKSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gci5waXBlKEl0KCh0PT57aWYobnVsbCE9PXQuYm9keSYmInN0cmluZyIhPXR5cGVvZiB0LmJvZHkpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBzdHJpbmcuIik7cmV0dXJuIHQuYm9keX0pKSk7Y2FzZSJqc29uIjpkZWZhdWx0OnJldHVybiByLnBpcGUoSXQoKHQ9PnQuYm9keSkpKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gcjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtuLm9ic2VydmV9fWApfX1kZWxldGUodCxlPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJERUxFVEUiLHQsZSl9Z2V0KHQsZT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiR0VUIix0LGUpfWhlYWQodCxlPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJIRUFEIix0LGUpfWpzb25wKHQsZSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLHQse3BhcmFtczoobmV3IHVEKS5hcHBlbmQoZSwiSlNPTlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9b3B0aW9ucyh0LGU9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIk9QVElPTlMiLHQsZSl9cGF0Y2godCxlLG49e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBBVENIIix0LE9EKG4sZSkpfXBvc3QodCxlLG49e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBPU1QiLHQsT0QobixlKSl9cHV0KHQsZSxuPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQVVQiLHQsT0QobixlKSl9fVBELsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxQRCkodnIoc0QpKX0sUEQuybVwcm92PU1uKHt0b2tlbjpQRCxmYWN0b3J5OlBELsm1ZmFjfSksUEQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpzRH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoUEQsW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnNEfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHdEe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5uZXh0PXQsdGhpcy5pbnRlcmNlcHRvcj1lfWhhbmRsZSh0KXtyZXR1cm4gdGhpcy5pbnRlcmNlcHRvci5pbnRlcmNlcHQodCx0aGlzLm5leHQpfX1jb25zdCBrRD1uZXcgR2EoIkhUVFBfSU5URVJDRVBUT1JTIik7Y2xhc3MgU0R7aW50ZXJjZXB0KHQsZSl7cmV0dXJuIGUuaGFuZGxlKHQpfX1TRC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8U0QpfSxTRC7JtXByb3Y9TW4oe3Rva2VuOlNELGZhY3Rvcnk6U0QuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFNELFt7dHlwZTppbX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpsZXQgREQ9MDtjbGFzcyBFRHt9Y2xhc3MgUkR7Y29uc3RydWN0b3IodCxlKXt0aGlzLmNhbGxiYWNrTWFwPXQsdGhpcy5kb2N1bWVudD1lLHRoaXMucmVzb2x2ZWRQcm9taXNlPVByb21pc2UucmVzb2x2ZSgpfW5leHRDYWxsYmFjaygpe3JldHVybiJuZ19qc29ucF9jYWxsYmFja18iK0REKyt9aGFuZGxlKHQpe2lmKCJKU09OUCIhPT10Lm1ldGhvZCl0aHJvdyBuZXcgRXJyb3IoIkpTT05QIHJlcXVlc3RzIG11c3QgdXNlIEpTT05QIHJlcXVlc3QgbWV0aG9kLiIpO2lmKCJqc29uIiE9PXQucmVzcG9uc2VUeXBlKXRocm93IG5ldyBFcnJvcigiSlNPTlAgcmVxdWVzdHMgbXVzdCB1c2UgSnNvbiByZXNwb25zZSB0eXBlLiIpO3JldHVybiBuZXcgRCgoZT0+e2NvbnN0IG49dGhpcy5uZXh0Q2FsbGJhY2soKSxvPXQudXJsV2l0aFBhcmFtcy5yZXBsYWNlKC89SlNPTlBfQ0FMTEJBQ0soJnwkKS8sYD0ke259JDFgKSxpPXRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7aS5zcmM9bztsZXQgYT1udWxsLHI9ITEscz0hMTt0aGlzLmNhbGxiYWNrTWFwW25dPXQ9PntkZWxldGUgdGhpcy5jYWxsYmFja01hcFtuXSxzfHwoYT10LHI9ITApfTtjb25zdCBsPSgpPT57aS5wYXJlbnROb2RlJiZpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSksZGVsZXRlIHRoaXMuY2FsbGJhY2tNYXBbbl19LGM9dD0+e3N8fHRoaXMucmVzb2x2ZWRQcm9taXNlLnRoZW4oKCgpPT57bCgpLHI/KGUubmV4dChuZXcgdkQoe2JvZHk6YSxzdGF0dXM6MjAwLHN0YXR1c1RleHQ6Ik9LIix1cmw6b30pKSxlLmNvbXBsZXRlKCkpOmUuZXJyb3IobmV3IHhEKHt1cmw6byxzdGF0dXM6MCxzdGF0dXNUZXh0OiJKU09OUCBFcnJvciIsZXJyb3I6bmV3IEVycm9yKCJKU09OUCBpbmplY3RlZCBzY3JpcHQgZGlkIG5vdCBpbnZva2UgY2FsbGJhY2suIil9KSl9KSl9LGQ9dD0+e3N8fChsKCksZS5lcnJvcihuZXcgeEQoe2Vycm9yOnQsc3RhdHVzOjAsc3RhdHVzVGV4dDoiSlNPTlAgRXJyb3IiLHVybDpvfSkpKX07cmV0dXJuIGkuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsYyksaS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZCksdGhpcy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpLGUubmV4dCh7dHlwZTpfRC5TZW50fSksKCk9PntzPSEwLGkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsYyksaS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsZCksbCgpfX0pKX19UkQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFJEKSh2cihFRCksdnIoWl8pKX0sUkQuybVwcm92PU1uKHt0b2tlbjpSRCxmYWN0b3J5OlJELsm1ZmFjfSksUkQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpFRH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChSRCxbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RUR9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dfSksbnVsbCk7Y2xhc3MgQUR7Y29uc3RydWN0b3IodCl7dGhpcy5qc29ucD10fWludGVyY2VwdCh0LGUpe3JldHVybiJKU09OUCI9PT10Lm1ldGhvZD90aGlzLmpzb25wLmhhbmRsZSh0KTplLmhhbmRsZSh0KX19QUQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEFEKSh2cihSRCkpfSxBRC7JtXByb3Y9TW4oe3Rva2VuOkFELGZhY3Rvcnk6QUQuybVmYWN9KSxBRC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlJEfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChBRCxbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6UkR9XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgVEQ9L15cKVxdXH0nLD9cbi87Y2xhc3MgTkR7Y29uc3RydWN0b3IodCl7dGhpcy54aHJGYWN0b3J5PXR9aGFuZGxlKHQpe2lmKCJKU09OUCI9PT10Lm1ldGhvZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRlZCB0byBjb25zdHJ1Y3QgSnNvbnAgcmVxdWVzdCB3aXRob3V0IEh0dHBDbGllbnRKc29ucE1vZHVsZSBpbnN0YWxsZWQuIik7cmV0dXJuIG5ldyBEKChlPT57Y29uc3Qgbj10aGlzLnhockZhY3RvcnkuYnVpbGQoKTtpZihuLm9wZW4odC5tZXRob2QsdC51cmxXaXRoUGFyYW1zKSx0LndpdGhDcmVkZW50aWFscyYmKG4ud2l0aENyZWRlbnRpYWxzPSEwKSx0LmhlYWRlcnMuZm9yRWFjaCgoKHQsZSk9Pm4uc2V0UmVxdWVzdEhlYWRlcih0LGUuam9pbigiLCIpKSkpLHQuaGVhZGVycy5oYXMoIkFjY2VwdCIpfHxuLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIpLCF0LmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKSl7Y29uc3QgZT10LmRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCk7bnVsbCE9PWUmJm4uc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixlKX1pZih0LnJlc3BvbnNlVHlwZSl7Y29uc3QgZT10LnJlc3BvbnNlVHlwZS50b0xvd2VyQ2FzZSgpO24ucmVzcG9uc2VUeXBlPSJqc29uIiE9PWU/ZToidGV4dCJ9Y29uc3Qgbz10LnNlcmlhbGl6ZUJvZHkoKTtsZXQgaT1udWxsO2NvbnN0IGE9KCk9PntpZihudWxsIT09aSlyZXR1cm4gaTtjb25zdCBlPTEyMjM9PT1uLnN0YXR1cz8yMDQ6bi5zdGF0dXMsbz1uLnN0YXR1c1RleHR8fCJPSyIsYT1uZXcgY0Qobi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkscj0oZnVuY3Rpb24gcyh0KXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gdCYmdC5yZXNwb25zZVVSTD90LnJlc3BvbnNlVVJMOi9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KHQuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpP3QuZ2V0UmVzcG9uc2VIZWFkZXIoIlgtUmVxdWVzdC1VUkwiKTpudWxsfSkobil8fHQudXJsO3JldHVybiBpPW5ldyBNRCh7aGVhZGVyczphLHN0YXR1czplLHN0YXR1c1RleHQ6byx1cmw6cn0pLGl9LHI9KCk9PntsZXR7aGVhZGVyczpvLHN0YXR1czppLHN0YXR1c1RleHQ6cix1cmw6c309YSgpLGw9bnVsbDsyMDQhPT1pJiYobD12b2lkIDA9PT1uLnJlc3BvbnNlP24ucmVzcG9uc2VUZXh0Om4ucmVzcG9uc2UpLDA9PT1pJiYoaT1sPzIwMDowKTtsZXQgYz1pPj0yMDAmJmk8MzAwO2lmKCJqc29uIj09PXQucmVzcG9uc2VUeXBlJiYic3RyaW5nIj09dHlwZW9mIGwpe2NvbnN0IHQ9bDtsPWwucmVwbGFjZShURCwiIik7dHJ5e2w9IiIhPT1sP0pTT04ucGFyc2UobCk6bnVsbH1jYXRjaChlKXtsPXQsYyYmKGM9ITEsbD17ZXJyb3I6ZSx0ZXh0Omx9KX19Yz8oZS5uZXh0KG5ldyB2RCh7Ym9keTpsLGhlYWRlcnM6byxzdGF0dXM6aSxzdGF0dXNUZXh0OnIsdXJsOnN8fHZvaWQgMH0pKSxlLmNvbXBsZXRlKCkpOmUuZXJyb3IobmV3IHhEKHtlcnJvcjpsLGhlYWRlcnM6byxzdGF0dXM6aSxzdGF0dXNUZXh0OnIsdXJsOnN8fHZvaWQgMH0pKX0scz10PT57Y29uc3R7dXJsOm99PWEoKSxpPW5ldyB4RCh7ZXJyb3I6dCxzdGF0dXM6bi5zdGF0dXN8fDAsc3RhdHVzVGV4dDpuLnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIix1cmw6b3x8dm9pZCAwfSk7ZS5lcnJvcihpKX07bGV0IGw9ITE7Y29uc3QgYz1vPT57bHx8KGUubmV4dChhKCkpLGw9ITApO2xldCBpPXt0eXBlOl9ELkRvd25sb2FkUHJvZ3Jlc3MsbG9hZGVkOm8ubG9hZGVkfTtvLmxlbmd0aENvbXB1dGFibGUmJihpLnRvdGFsPW8udG90YWwpLCJ0ZXh0Ij09PXQucmVzcG9uc2VUeXBlJiZuLnJlc3BvbnNlVGV4dCYmKGkucGFydGlhbFRleHQ9bi5yZXNwb25zZVRleHQpLGUubmV4dChpKX0sZD10PT57bGV0IG49e3R5cGU6X0QuVXBsb2FkUHJvZ3Jlc3MsbG9hZGVkOnQubG9hZGVkfTt0Lmxlbmd0aENvbXB1dGFibGUmJihuLnRvdGFsPXQudG90YWwpLGUubmV4dChuKX07cmV0dXJuIG4uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsciksbi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIscyksbi5hZGRFdmVudExpc3RlbmVyKCJ0aW1lb3V0IixzKSxuLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixzKSx0LnJlcG9ydFByb2dyZXNzJiYobi5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsYyksbnVsbCE9PW8mJm4udXBsb2FkJiZuLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZCkpLG4uc2VuZChvKSxlLm5leHQoe3R5cGU6X0QuU2VudH0pLCgpPT57bi5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIscyksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscyksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixyKSxuLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLHMpLHQucmVwb3J0UHJvZ3Jlc3MmJihuLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixjKSxudWxsIT09byYmbi51cGxvYWQmJm4udXBsb2FkLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixkKSksbi5yZWFkeVN0YXRlIT09bi5ET05FJiZuLmFib3J0KCl9fSkpfX1ORC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TkQpKHZyKFhNKSl9LE5ELsm1cHJvdj1Nbih7dG9rZW46TkQsZmFjdG9yeTpORC7JtWZhY30pLE5ELmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WE19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKE5ELFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYTX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCB6RD1uZXcgR2EoIlhTUkZfQ09PS0lFX05BTUUiKSxJRD1uZXcgR2EoIlhTUkZfSEVBREVSX05BTUUiKTtjbGFzcyBIRHt9Y2xhc3MgRkR7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuZG9jPXQsdGhpcy5wbGF0Zm9ybT1lLHRoaXMuY29va2llTmFtZT1uLHRoaXMubGFzdENvb2tpZVN0cmluZz0iIix0aGlzLmxhc3RUb2tlbj1udWxsLHRoaXMucGFyc2VDb3VudD0wfWdldFRva2VuKCl7aWYoInNlcnZlciI9PT10aGlzLnBsYXRmb3JtKXJldHVybiBudWxsO2NvbnN0IHQ9dGhpcy5kb2MuY29va2llfHwiIjtyZXR1cm4gdCE9PXRoaXMubGFzdENvb2tpZVN0cmluZyYmKHRoaXMucGFyc2VDb3VudCsrLHRoaXMubGFzdFRva2VuPWlNKHQsdGhpcy5jb29raWVOYW1lKSx0aGlzLmxhc3RDb29raWVTdHJpbmc9dCksdGhpcy5sYXN0VG9rZW59fUZELsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxGRCkodnIoWl8pLHZyKGp5KSx2cih6RCkpfSxGRC7JtXByb3Y9TW4oe3Rva2VuOkZELGZhY3Rvcnk6RkQuybVmYWN9KSxGRC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W2p5XX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbekRdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEZELFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltqeV19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W3pEXX1dfV19KSxudWxsKTtjbGFzcyBMRHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMudG9rZW5TZXJ2aWNlPXQsdGhpcy5oZWFkZXJOYW1lPWV9aW50ZXJjZXB0KHQsZSl7Y29uc3Qgbj10LnVybC50b0xvd2VyQ2FzZSgpO2lmKCJHRVQiPT09dC5tZXRob2R8fCJIRUFEIj09PXQubWV0aG9kfHxuLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8bi5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiBlLmhhbmRsZSh0KTtjb25zdCBvPXRoaXMudG9rZW5TZXJ2aWNlLmdldFRva2VuKCk7cmV0dXJuIG51bGw9PT1vfHx0LmhlYWRlcnMuaGFzKHRoaXMuaGVhZGVyTmFtZSl8fCh0PXQuY2xvbmUoe2hlYWRlcnM6dC5oZWFkZXJzLnNldCh0aGlzLmhlYWRlck5hbWUsbyl9KSksZS5oYW5kbGUodCl9fUxELsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxMRCkodnIoSEQpLHZyKElEKSl9LExELsm1cHJvdj1Nbih7dG9rZW46TEQsZmFjdG9yeTpMRC7JtWZhY30pLExELmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6SER9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltJRF19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoTEQsW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkhEfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbSURdfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgQkR7Y29uc3RydWN0b3IodCxlKXt0aGlzLmJhY2tlbmQ9dCx0aGlzLmluamVjdG9yPWUsdGhpcy5jaGFpbj1udWxsfWhhbmRsZSh0KXtpZihudWxsPT09dGhpcy5jaGFpbil7Y29uc3QgdD10aGlzLmluamVjdG9yLmdldChrRCxbXSk7dGhpcy5jaGFpbj10LnJlZHVjZVJpZ2h0KCgodCxlKT0+bmV3IHdEKHQsZSkpLHRoaXMuYmFja2VuZCl9cmV0dXJuIHRoaXMuY2hhaW4uaGFuZGxlKHQpfX1mdW5jdGlvbiBWRCgpe3JldHVybiJvYmplY3QiPT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fX1CRC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QkQpKHZyKGxEKSx2cihycCkpfSxCRC7JtXByb3Y9TW4oe3Rva2VuOkJELGZhY3Rvcnk6QkQuybVmYWN9KSxCRC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmxEfSx7dHlwZTpycH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoQkQsW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmxEfSx7dHlwZTpycH1dfSksbnVsbCk7Y2xhc3MgakR7c3RhdGljIGRpc2FibGUoKXtyZXR1cm57bmdNb2R1bGU6akQscHJvdmlkZXJzOlt7cHJvdmlkZTpMRCx1c2VDbGFzczpTRH1dfX1zdGF0aWMgd2l0aE9wdGlvbnModD17fSl7cmV0dXJue25nTW9kdWxlOmpELHByb3ZpZGVyczpbdC5jb29raWVOYW1lP3twcm92aWRlOnpELHVzZVZhbHVlOnQuY29va2llTmFtZX06W10sdC5oZWFkZXJOYW1lP3twcm92aWRlOklELHVzZVZhbHVlOnQuaGVhZGVyTmFtZX06W11dfX19akQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGpEKX0sakQuybVtb2Q9YW8oe3R5cGU6akR9KSxqRC7JtWluaj12bih7cHJvdmlkZXJzOltMRCx7cHJvdmlkZTprRCx1c2VFeGlzdGluZzpMRCxtdWx0aTohMH0se3Byb3ZpZGU6SEQsdXNlQ2xhc3M6RkR9LHtwcm92aWRlOnpELHVzZVZhbHVlOiJYU1JGLVRPS0VOIn0se3Byb3ZpZGU6SUQsdXNlVmFsdWU6IlgtWFNSRi1UT0tFTiJ9XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoakQsW3t0eXBlOkF5LGFyZ3M6W3twcm92aWRlcnM6W0xELHtwcm92aWRlOmtELHVzZUV4aXN0aW5nOkxELG11bHRpOiEwfSx7cHJvdmlkZTpIRCx1c2VDbGFzczpGRH0se3Byb3ZpZGU6ekQsdXNlVmFsdWU6IlhTUkYtVE9LRU4ifSx7cHJvdmlkZTpJRCx1c2VWYWx1ZToiWC1YU1JGLVRPS0VOIn1dfV19XSxudWxsLG51bGwpO2NsYXNzIFVEe31VRC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VUQpfSxVRC7JtW1vZD1hbyh7dHlwZTpVRH0pLFVELsm1aW5qPXZuKHtwcm92aWRlcnM6W1BELHtwcm92aWRlOnNELHVzZUNsYXNzOkJEfSxORCx7cHJvdmlkZTpsRCx1c2VFeGlzdGluZzpORH1dLGltcG9ydHM6W1tqRC53aXRoT3B0aW9ucyh7Y29va2llTmFtZToiWFNSRi1UT0tFTiIsaGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIn0pXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFVELFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbakQud2l0aE9wdGlvbnMoe2Nvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLGhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiJ9KV0scHJvdmlkZXJzOltQRCx7cHJvdmlkZTpzRCx1c2VDbGFzczpCRH0sTkQse3Byb3ZpZGU6bEQsdXNlRXhpc3Rpbmc6TkR9XX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKFVELHtpbXBvcnRzOltqRF19KTtjbGFzcyBHRHt9R0QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEdEKX0sR0QuybVtb2Q9YW8oe3R5cGU6R0R9KSxHRC7JtWluaj12bih7cHJvdmlkZXJzOltSRCx7cHJvdmlkZTpFRCx1c2VGYWN0b3J5OlZEfSx7cHJvdmlkZTprRCx1c2VDbGFzczpBRCxtdWx0aTohMH1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChHRCxbe3R5cGU6QXksYXJnczpbe3Byb3ZpZGVyczpbUkQse3Byb3ZpZGU6RUQsdXNlRmFjdG9yeTpWRH0se3Byb3ZpZGU6a0QsdXNlQ2xhc3M6QUQsbXVsdGk6ITB9XX1dfV0sbnVsbCxudWxsKTtjb25zdCBXRD0iZmVhdHVyZSIsWUQ9S3coV0QpLHFEPVp3KFlELCh0PT50LmlzRmVhdHVyZUZsYWdzTG9hZGVkKSksWkQ9WncoWUQsKHQ9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmRlZmF1bHRGbGFncyksdC5mbGFnT3ZlcnJpZGVzKSkpLFhEPVp3KFlELCh0PT50LmZsYWdPdmVycmlkZXN8fHt9KSksS0Q9WncoWkQsKHQ9PnQuaXNBdXRvRGFya01vZGVBbGxvd2VkKSksSkQ9WncoWkQsKHQ9Pm51bGwhPT10LmVuYWJsZURhcmtNb2RlT3ZlcnJpZGU/dC5lbmFibGVEYXJrTW9kZU92ZXJyaWRlOnQuZGVmYXVsdEVuYWJsZURhcmtNb2RlKSksUUQ9WncoWkQsKHQ9PnQuZW5hYmxlRGFya01vZGVPdmVycmlkZSkpLCREPVp3KFpELCh0PT50LmVuYWJsZWRFeHBlcmltZW50YWxQbHVnaW5zKSksdEU9WncoWkQsKHQ9PnQuaW5Db2xhYikpLGVFPVp3KFpELCh0PT50LmVuYWJsZWRDb2xvckdyb3VwKSksbkU9WncoWkQsKHQ9PnQuZW5hYmxlZENvbG9yR3JvdXBCeVJlZ2V4KSksb0U9WncoWkQsKHQ9PnQubWV0cmljc0ltYWdlU3VwcG9ydEVuYWJsZWQpKSxpRT1adyhaRCwodD0+dC5lbmFibGVkTGlua2VkVGltZSkpLGFFPVp3KFpELCh0PT50LmVuYWJsZVRpbWVTZXJpZXNQcm9tb3Rpb24pKTtmdW5jdGlvbiByRSh0KXtjb25zdCBlPXt9O2Zvcihjb25zdFtuLG9db2YgdC5lbnRyaWVzKCkpZVtuXT1vO3JldHVybiBlfWZ1bmN0aW9uIHNFKHQpe2xldCBlPXQuaGVhZGVyc3x8bmV3IGNEO3JldHVybiBlPWUuYXBwZW5kKCJYLVhTUkYtUHJvdGVjdGVkIiwiMSIpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7aGVhZGVyczplfSl9Y2xhc3MgbEV7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYXBwUm9vdFByb3ZpZGVyPXQsdGhpcy5odHRwPWUsdGhpcy5zdG9yZT1ufXJlc29sdmVBcHBSb290KHQpe3JldHVybiB0LnN0YXJ0c1dpdGgoIi8iKT90aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KHQpOnR9Z2V0KHQsZT17fSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5yZXNvbHZlQXBwUm9vdCh0KSxlKX1wb3N0KHQsZSxuPXt9KXtyZXR1cm4gbj1zRShuKSx0aGlzLnN0b3JlLnNlbGVjdChxRCkucGlwZShjZSgodD0+Qm9vbGVhbih0KSkpLGJlKDEpLFZlKHRoaXMuc3RvcmUuc2VsZWN0KHRFKSksWnQoKChbLG9dKT0+e2NvbnN0IGk9dGhpcy5yZXNvbHZlQXBwUm9vdCh0KTtyZXR1cm4gbz90aGlzLmh0dHAuZ2V0KGkse2hlYWRlcnM6bi5oZWFkZXJzLHBhcmFtczpyRShlKX0pOnRoaXMuaHR0cC5wb3N0KGksZSxuKX0pKSl9cHV0KHQsZSxuPXt9KXtyZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLnJlc29sdmVBcHBSb290KHQpLGUsc0UobikpfWRlbGV0ZSh0LGU9e30pe3JldHVybiB0aGlzLmh0dHAuZGVsZXRlKHRoaXMucmVzb2x2ZUFwcFJvb3QodCksc0UoZSkpfX1sRS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bEUpKHZyKGVTKSx2cihQRCksdnIoSXcpKX0sbEUuybVwcm92PU1uKHt0b2tlbjpsRSxmYWN0b3J5OmxFLsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChsRSxbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6ZVN9LHt0eXBlOlBEfSx7dHlwZTpJd31dfSksbnVsbCk7Y2xhc3MgY0V7fXZhciBkRSxwRSxtRTtjRS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Y0UpfSxjRS7JtW1vZD1hbyh7dHlwZTpjRX0pLGNFLsm1aW5qPXZuKHtwcm92aWRlcnM6W2xFXSxpbXBvcnRzOltbVUQsaVNdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoY0UsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltVRCxpU10scHJvdmlkZXJzOltsRV19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhjRSx7aW1wb3J0czpbVUQsaVNdfSksKGZ1bmN0aW9uKHQpe3QuU1RFUD0ic3RlcCIsdC5XQUxMX1RJTUU9IndhbGxfdGltZSIsdC5SRUxBVElWRT0icmVsYXRpdmUifSkoZEV8fChkRT17fSkpLChmdW5jdGlvbih0KXt0Lk9GRlNFVD0ib2Zmc2V0Iix0Lk9WRVJMQVk9Im92ZXJsYXkifSkocEV8fChwRT17fSkpLChmdW5jdGlvbih0KXt0LlVOS05PV049IlVOS05PV04iLHQuTk9UX0ZPVU5EPSJOT1RfRk9VTkQifSkobUV8fChtRT17fSkpO2NvbnN0IHVFPW5ldyBHYSgiVGVuc29yQm9hcmQgYnJhbmQgbmFtZSIpO2Z1bmN0aW9uIGZFKHQpe2xldCBlPW1FLlVOS05PV047cmV0dXJuIHQgaW5zdGFuY2VvZiB4RCYmNDA0PT09dC5zdGF0dXMmJihlPW1FLk5PVF9GT1VORCksUnQobmV3IGdFKGUpKX1jbGFzcyBnRXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmZhaWx1cmVDb2RlPXR9fWNsYXNzIGhFe2NvbnN0cnVjdG9yKHQpe3RoaXMuaHR0cD10LHRoaXMudGZCYWNrZW5kPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWJhY2tlbmQiKS50Zl9iYWNrZW5kfWZldGNoUGx1Z2luc0xpc3RpbmcodCl7Y29uc3QgZT0oZnVuY3Rpb24gbih0KXtpZighdC5sZW5ndGgpcmV0dXJuIG51bGw7Y29uc3QgZT1uZXcgVVJMU2VhcmNoUGFyYW1zO2Zvcihjb25zdCBuIG9mIHQpZS5hcHBlbmQoImV4cGVyaW1lbnRhbFBsdWdpbiIsbik7cmV0dXJuIGV9KSh0KSxvPWU/YGRhdGEvcGx1Z2luc19saXN0aW5nPyR7ZS50b1N0cmluZygpfWA6ImRhdGEvcGx1Z2luc19saXN0aW5nIjtyZXR1cm4gdGhpcy5odHRwLmdldChvKS5waXBlKHBlKGZFKSl9ZmV0Y2hFbnZpcm9ubWVudCgpe3JldHVybiAkdChbdGhpcy5odHRwLmdldCgiZGF0YS9lbnZpcm9ubWVudCIpLEN0KHRoaXMudGZCYWNrZW5kLmVudmlyb25tZW50U3RvcmUucmVmcmVzaCgpKV0pLnBpcGUoSXQoKChbdF0pPT50KSkscGUoZkUpKX19aEUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGhFKSh2cihsRSkpfSxoRS7JtXByb3Y9TW4oe3Rva2VuOmhFLGZhY3Rvcnk6aEUuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGhFLFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpsRX1dfSksbnVsbCk7Y2xhc3MgYkV7fXZhciB5RTtiRS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8YkUpfSxiRS7JtW1vZD1hbyh7dHlwZTpiRX0pLGJFLsm1aW5qPXZuKHtwcm92aWRlcnM6W2hFXSxpbXBvcnRzOltbY0VdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoYkUsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltjRV0scHJvdmlkZXJzOltoRV19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhiRSx7aW1wb3J0czpbY0VdfSksKGZ1bmN0aW9uKHQpe3RbdC5OT1RfTE9BREVEPTBdPSJOT1RfTE9BREVEIix0W3QuTE9BREVEPTFdPSJMT0FERUQiLHRbdC5MT0FESU5HPTJdPSJMT0FESU5HIix0W3QuRkFJTEVEPTNdPSJGQUlMRUQifSkoeUV8fCh5RT17fSkpO2NvbnN0IF9FPUpQKCJbQ29yZV0gUGx1Z2luIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxDRT1KUCgiW0NvcmVdIFBsdWdpbiBVcmwgSGFzaCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTUU9SlAoIltDb3JlXSBMb2FkZWQiKSx2RT1KUCgiW0NvcmVdIFVzZXIgVHJpZ2dlcmVkIFJlbG9hZCIpLHhFPUpQKCJbQ29yZV0gQXV0byBSZWxvYWQiKSxPRT1KUCgiW0NvcmVdIFBsdWdpbkxpc3RpbmcgRmV0Y2ggUmVxdWVzdGVkIiksUEU9SlAoIltDb3JlXSBQbHVnaW5MaXN0aW5nIEZldGNoIFN1Y2Nlc3NmdWwiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx3RT1KUCgiW0NvcmVdIFBsdWdpbkxpc3RpbmcgRmV0Y2ggRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksa0U9SlAoIltDb3JlXSBQb2x5bWVyIENvbXBvbmVudCBSdW5zIEZldGNoIFJlcXVlc3RlZCIpLFNFPUpQKCJbQ29yZV0gUG9seW1lciBDb21wb25lbnQgUnVucyBGZXRjaCBTdWNjZXNzZnVsIiksREU9SlAoIltDb3JlXSBQb2x5bWVyIENvbXBvbmVudCBSdW5zIEZldGNoIEZhaWxlZCIpLEVFPUpQKCJbQ29yZV0gRW52aXJvbm1lbnQgRmV0Y2ggU3VjY2Vzc2Z1bCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFJFPUpQKCJbQ29yZV0gUnVuIFNlbGVjdGlvbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQUU9SlAoIltDb3JlXSBSdW4gRmV0Y2ggU3VjY2Vzc2Z1bCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFRFPUpQKCJbQ29yZV0gU2lkZSBCYXIgV2lkdGggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE5FPUpQKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5ncyBQYW5lIENsb3NlZCIpLHpFPUpQKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5ncyBQYW5lIFRvZ2dsZWQiKSxJRT1KUCgiW01ldHJpY3NdIE1ldHJpY3MgVGFnIE1ldGFkYXRhIFJlcXVlc3RlZCIpLEhFPUpQKCJbTWV0cmljc10gTWV0cmljcyBUYWcgTWV0YWRhdGEgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksRkU9SlAoIltNZXRyaWNzXSBNZXRyaWNzIFRhZyBNZXRhZGF0YSBGYWlsZWQiKSxMRT1KUCgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgQ2hhbmdlIFRvb2x0aXAiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KTtKUCgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgVG9nZ2xlIFNob3cgRGF0YSBEb3dubG9hZCIpO2NvbnN0IEJFPUpQKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFRvZ2dsZSBJZ25vcmUgT3V0bGllciIpLFZFPUpQKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBYIEF4aXMgVHlwZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGpFPUpQKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBTY2FsYXIgU21vb3RoaW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVUU9SlAoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgUGFydGl0aW9uIE5vbiBNb25vdG9uaWMgWCBUb2dnbGVkIiksR0U9SlAoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEltYWdlIEJyaWdodG5lc3MiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxXRT1KUCgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgSW1hZ2UgQ29udHJhc3QiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxZRT1KUCgiW01ldHJpY3NdIEltYWdlIEJyaWdodG5lc3MgU2V0dGluZyBSZXNldCIpLHFFPUpQKCJbTWV0cmljc10gSW1hZ2UgQ29udHJhc3QgU2V0dGluZyBSZXNldCIpLFpFPUpQKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFRvZ2dsZSBJbWFnZSBTaG93IEFjdHVhbCBTaXplIiksWEU9SlAoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEhpc3RvZ3JhbSBNb2RlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksS0U9SlAoIltNZXRyaWNzXSBNdWx0aXBsZSBUaW1lIFNlcmllcyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxKRT1KUCgiW01ldHJpY3NdIEZldGNoIFRpbWUgU2VyaWVzIFJlcXVlc3QgRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUUU9SlAoIltNZXRyaWNzXSBGZXRjaCBUaW1lIFNlcmllcyBSZXNwb25zZSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSwkRT1KUCgiW01ldHJpY3NdIENhcmQgVmlzaWJpbGl0eSBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdFI9SlAoIltNZXRyaWNzXSBDYXJkIFN0ZXAgU2xpZGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxlUj1KUCgiW01ldHJpY3NdIFRhZyBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG5SPUpQKCJbTWV0cmljc10gTWV0cmljcyBUYWcgR3JvdXAgRXhwYW5zaW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxvUj1KUCgiW01ldHJpY3NdIENhcmQgUGluIFN0YXRlIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxpUj1KUCgiW01ldHJpY3NdIFRvZ2dsZSBWaXNpYmxlIFBsdWdpbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGFSPUpQKCJbTWV0cmljc10gVG9nZ2xlIFNob3cgQWxsIFBsdWdpbnMiKSxyUj1KUCgiW01ldHJpY3NdIExpbmtlZCBUaW1lIFNlbGVjdGlvbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksc1I9SlAoIltNZXRyaWNzXSBMaW5rZWQgVGltZSBTZWxlY3Rpb24gQ2xlYXJlZCIpLGxSPUpQKCJbTWV0cmljc10gU2VsZWN0IFRpbWUgRW5hYmxlIFRvZ2dsZSIpLGNSPUpQKCJbTWV0cmljc10gVXNlIFJhbmdlIFNlbGVjdCBUaW1lIFRvZ2dsZSIpLGRSPUpQKCJbTWV0cmljc10gTWV0cmljcyBQcm9tbyBEaXNtaXNzZWQiKSxwUj1KUCgiW01ldHJpY3NdIE1ldHJpY3MgUHJvbW8gR28gVG8gU2NhbGFycyIpLG1SPSJjb3JlIix1Uj17YWN0aXZlUGx1Z2luOm51bGwscGx1Z2luczp7fSxjb3JlRGF0YUxvYWRTdGF0ZTp7c3RhdGU6eUUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0scGx1Z2luc0xpc3RMb2FkZWQ6e3N0YXRlOnlFLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGwsZmFpbHVyZUNvZGU6bnVsbH0sZW52aXJvbm1lbnQ6e2RhdGFfbG9jYXRpb246IiIsd2luZG93X3RpdGxlOiIifSxwb2x5bWVyUnVuc0xvYWRTdGF0ZTp7c3RhdGU6eUUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0scG9seW1lckludGVyb3BSdW5zOltdLHBvbHltZXJJbnRlcm9wUnVuU2VsZWN0aW9uOm5ldyBTZXQsc2lkZUJhcldpZHRoSW5QZXJjZW50OjIwfSxmUj15ayh1UixiayhfRSxDRSwoKHQse3BsdWdpbjplfSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7YWN0aXZlUGx1Z2luOmV9KSkpLGJrKE9FLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2NvcmVEYXRhTG9hZFN0YXRlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmNvcmVEYXRhTG9hZFN0YXRlKSx7c3RhdGU6eUUuTE9BRElOR30pLHBsdWdpbnNMaXN0TG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnBsdWdpbnNMaXN0TG9hZGVkKSx7c3RhdGU6eUUuTE9BRElOR30pfSkpKSxiayh3RSwoKHQse2ZhaWx1cmVDb2RlOmV9KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtjb3JlRGF0YUxvYWRTdGF0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5jb3JlRGF0YUxvYWRTdGF0ZSkse3N0YXRlOnlFLkZBSUxFRH0pLHBsdWdpbnNMaXN0TG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnBsdWdpbnNMaXN0TG9hZGVkKSx7c3RhdGU6eUUuRkFJTEVELGZhaWx1cmVDb2RlOmV9KX0pKSksYmsoUEUsKCh0LHtwbHVnaW5zOmV9KT0+e2NvbnN0IG49T2JqZWN0LmtleXMoZSkuZmluZCgodD0+ZVt0XS5lbmFibGVkKSl8fG51bGwsbz10LmFjdGl2ZVBsdWdpbnx8bixpPURhdGUubm93KCk7bGV0IGE9dC5jb3JlRGF0YUxvYWRTdGF0ZTtyZXR1cm4gdC5wb2x5bWVyUnVuc0xvYWRTdGF0ZS5zdGF0ZT09PXlFLkxPQURFRCYmKGE9e3N0YXRlOnlFLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6aX0pLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7YWN0aXZlUGx1Z2luOm8sY29yZURhdGFMb2FkU3RhdGU6YSxwbHVnaW5zOmUscGx1Z2luc0xpc3RMb2FkZWQ6e3N0YXRlOnlFLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6aSxmYWlsdXJlQ29kZTpudWxsfX0pfSkpLGJrKGtFLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2NvcmVEYXRhTG9hZFN0YXRlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmNvcmVEYXRhTG9hZFN0YXRlKSx7c3RhdGU6eUUuTE9BRElOR30pLHBvbHltZXJSdW5zTG9hZFN0YXRlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnBvbHltZXJSdW5zTG9hZFN0YXRlKSx7c3RhdGU6eUUuTE9BRElOR30pfSkpKSxiayhTRSwodD0+e2NvbnN0IGU9RGF0ZS5ub3coKTtsZXQgbj10LmNvcmVEYXRhTG9hZFN0YXRlO3JldHVybiB0LnBsdWdpbnNMaXN0TG9hZGVkLnN0YXRlPT09eUUuTE9BREVEJiYobj17c3RhdGU6eUUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczplfSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtjb3JlRGF0YUxvYWRTdGF0ZTpuLHBvbHltZXJSdW5zTG9hZFN0YXRlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnBvbHltZXJSdW5zTG9hZFN0YXRlKSx7c3RhdGU6eUUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczplfSl9KX0pKSxiayhERSwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtjb3JlRGF0YUxvYWRTdGF0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5jb3JlRGF0YUxvYWRTdGF0ZSkse3N0YXRlOnlFLkZBSUxFRH0pLHBvbHltZXJSdW5zTG9hZFN0YXRlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnBvbHltZXJSdW5zTG9hZFN0YXRlKSx7c3RhdGU6eUUuRkFJTEVEfSl9KSkpLGJrKEVFLCgodCx7ZW52aXJvbm1lbnQ6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2Vudmlyb25tZW50OmV9KSkpLGJrKEFFLCgodCx7cnVuczplfSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7cG9seW1lckludGVyb3BSdW5zOmV9KSkpLGJrKFJFLCgodCx7bmV4dFNlbGVjdGlvbjplfSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7cG9seW1lckludGVyb3BSdW5TZWxlY3Rpb246bmV3IFNldChlKX0pKSksYmsoVEUsKCh0LHt3aWR0aEluUGVyY2VudDplfSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2lkZUJhcldpZHRoSW5QZXJjZW50Ok1hdGgubWluKE1hdGgubWF4KDAsZSksMTAwKX0pKSksYmsoV1MsKCh0LHtwYXJ0aWFsU2V0dGluZ3M6ZX0pPT57Y29uc3Qgbj1PYmplY3QuYXNzaWduKHt9LHQpLG89ZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBvJiZvPj0wJiZvPD0xMDAmJihuLnNpZGVCYXJXaWR0aEluUGVyY2VudD1vKSxufSkpLGJrKHBSLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2FjdGl2ZVBsdWdpbjoic2NhbGFycyJ9KSkpKTtmdW5jdGlvbiBnUih0LGUpe3JldHVybiBmUih0LGUpfWNvbnN0IGhSPUt3KG1SKSxiUj1adyhoUiwodD0+dC5wbHVnaW5zTGlzdExvYWRlZCkpLHlSPVp3KGhSLCh0PT50LnBvbHltZXJSdW5zTG9hZFN0YXRlKSksX1I9WncoaFIsKHQ9PnQuY29yZURhdGFMb2FkU3RhdGUuc3RhdGUpKSxDUj1adyhoUiwodD0+dC5jb3JlRGF0YUxvYWRTdGF0ZS5sYXN0TG9hZGVkVGltZUluTXMpKSxNUj1adyhoUiwodD0+dC5hY3RpdmVQbHVnaW4pKSx2Uj1adyhoUiwodD0+dC5wbHVnaW5zKSkseFI9WncoaFIsKHQ9PnQuZW52aXJvbm1lbnQpKSxPUj1adyhoUiwodD0+dC5zaWRlQmFyV2lkdGhJblBlcmNlbnQpKSxQUj1uZXcgU2V0KFtaay5DT01QQVJFX0VYUEVSSU1FTlQsWmsuRVhQRVJJTUVOVCxaay5OT1RfU0VUXSk7Y2xhc3Mgd1J7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy53ZWJhcHBEYXRhU291cmNlPW4sdGhpcy50ZkJhY2tlbmQ9e3JlZjpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1iYWNrZW5kIikudGZfYmFja2VuZH0sdGhpcy5vbkRhc2hib2FyZExvYWQkPXJlKHRoaXMuYWN0aW9ucyQucGlwZShEayhNRSxkUyksVmUodGhpcy5zdG9yZS5zZWxlY3QoTlMpKSxNZSgoKFssdF0sWyxlXSk9PnQ9PT1lKSkpLHRoaXMuYWN0aW9ucyQucGlwZShEayh4RSx2RSkpKS5waXBlKFZlKHRoaXMuc3RvcmUuc2VsZWN0KFJTKSksY2UoKChbLHRdKT0+UFIuaGFzKHQpKSksQmUoMSx2b2lkIDAse2xlYWRpbmc6ITB9KSksdGhpcy5mZXRjaFdlYkFwcERhdGEkPU1rKCgoKT0+cmUodGhpcy5vbkRhc2hib2FyZExvYWQkLnBpcGUoVmUodGhpcy5zdG9yZS5zZWxlY3QoYlIpLHRoaXMuc3RvcmUuc2VsZWN0KCREKSksY2UoKChbLHtzdGF0ZTp0fV0pPT50IT09eUUuTE9BRElORykpLEZlKCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChPRSgpKSkpLFp0KCgoWywsdF0pPT4oZnVuY3Rpb24gZSgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1rdCh0KSxvPWxlKHQpO3JldHVybiBvLmxlbmd0aD9uZXcgRCgoZnVuY3Rpb24odCl7dmFyIGU9by5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuW119KSkscj1vLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4hMX0pKTt0LmFkZCgoZnVuY3Rpb24oKXtlPXI9bnVsbH0pKTtmb3IodmFyIHM9ZnVuY3Rpb24ocyl7TXQob1tzXSkuc3Vic2NyaWJlKG5ldyBUKHQsKGZ1bmN0aW9uKG8pe2lmKGVbc10ucHVzaChvKSxlLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9KSkpe3ZhciBsPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zaGlmdCgpfSkpO3QubmV4dChuP24uYXBwbHkodm9pZCAwLGEoW10saShsKSkpOmwpLGUuc29tZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4hdC5sZW5ndGgmJnJbZV19KSkmJnQuY29tcGxldGUoKX19KSwoZnVuY3Rpb24oKXtyW3NdPSEwLCFlW3NdLmxlbmd0aCYmdC5jb21wbGV0ZSgpfSkpKX0sbD0wOyF0LmNsb3NlZCYmbDxvLmxlbmd0aDtsKyspcyhsKTtyZXR1cm4gZnVuY3Rpb24oKXtlPXI9bnVsbH19KSk6cnR9KSh0aGlzLndlYmFwcERhdGFTb3VyY2UuZmV0Y2hQbHVnaW5zTGlzdGluZyh0KSx0aGlzLmZldGNoRW52aXJvbm1lbnQoKSkucGlwZShJdCgoKFt0XSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFBFKHtwbHVnaW5zOnR9KSl9KSkscGUoKHQ9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKHdFKHQgaW5zdGFuY2VvZiBnRT97ZmFpbHVyZUNvZGU6dC5mYWlsdXJlQ29kZX06e2ZhaWx1cmVDb2RlOm1FLlVOS05PV059KSkscnQpKSkpKSkpLHRoaXMub25EYXNoYm9hcmRMb2FkJC5waXBlKEl0KCgoWyx0XSk9PnQpKSx6ZSgodD0+dCE9PVprLkNPTVBBUkVfRVhQRVJJTUVOVD9FdChbXSk6dGhpcy5zdG9yZS5zZWxlY3QoelMpLnBpcGUoTWUoKCh0LGUpPT57Y29uc3Qgbj1PYmplY3QuZW50cmllcyh0KSxvPW5ldyBNYXAoT2JqZWN0LmVudHJpZXMoZSkpO2lmKG4ubGVuZ3RoIT09by5zaXplKXJldHVybiExO2Zvcihjb25zdFt0LGVdb2YgbilpZihvLmdldCh0KSE9PWUpcmV0dXJuITE7cmV0dXJuITB9KSksQ2UoMCksQmUoNTAwLHZvaWQgMCx7bGVhZGluZzohMCx0cmFpbGluZzohMH0pKSkpLFZlKHRoaXMuc3RvcmUuc2VsZWN0KFJTKSx0aGlzLnN0b3JlLnNlbGVjdCh5UikpLGNlKCgoWyx0LGVdKT0+UFIuaGFzKHQpJiZlLnN0YXRlIT09eUUuTE9BRElORykpLEZlKCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goa0UoKSl9KSksemUoKCgpPT50aGlzLnJlZnJlc2hQb2x5bWVyUnVucygpKSksRmUoKCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChTRSgpKX0pKSxwZSgoKCk9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKERFKCkpLHJ0KSkpKSkpLHtkaXNwYXRjaDohMX0pLHRoaXMuZGlzcGF0Y2hDaGFuZ2VQbHVnaW4kPU1rKCgoKT0+cmUodGhpcy5vbkRhc2hib2FyZExvYWQkLHRoaXMuYWN0aW9ucyQucGlwZShEayhQRSkpKS5waXBlKFZlKHRoaXMuc3RvcmUuc2VsZWN0KE1SKSksSXQoKChbLHRdKT0+dCkpLE1lKCksY2UoKHQ9Pm51bGwhPT10KSksYmUoMSksRmUoKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKF9FKHtwbHVnaW46dH0pKX0pKSkpLHtkaXNwYXRjaDohMX0pfXJlZnJlc2hQb2x5bWVyUnVucygpe3JldHVybiBDdCh0aGlzLnRmQmFja2VuZC5yZWYucnVuc1N0b3JlLnJlZnJlc2goKSl9ZmV0Y2hFbnZpcm9ubWVudCgpe3JldHVybiB0aGlzLndlYmFwcERhdGFTb3VyY2UuZmV0Y2hFbnZpcm9ubWVudCgpLnBpcGUoRmUoKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEVFKHtlbnZpcm9ubWVudDp0fSkpfSkpKX19d1IuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHdSKSh2cihTayksdnIoSXcpLHZyKGhFKSl9LHdSLsm1cHJvdj1Nbih7dG9rZW46d1IsZmFjdG9yeTp3Ui7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgod1IsW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlNrfSx7dHlwZTpJd30se3R5cGU6aEV9XX0pLG51bGwpO2NvbnN0IGtSPW5ldyBHYSgiQ29yZSBGZWF0dXJlIENvbmZpZyIpO2Z1bmN0aW9uIFNSKHQpe3JldHVybntpbml0aWFsU3RhdGU6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHVSKSx7YWN0aXZlUGx1Z2luOnQuZ2V0UGx1Z2luSWQoKXx8bnVsbH0pfX1mdW5jdGlvbiBEUigpe3JldHVybiBadyhPUiwodD0+KHtzaWRlQmFyV2lkdGhJblBlcmNlbnQ6dH0pKSl9Y2xhc3MgRVJ7fUVSLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxFUil9LEVSLsm1bW9kPWFvKHt0eXBlOkVSfSksRVIuybVpbmo9dm4oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6a1IsZGVwczpbVlNdLHVzZUZhY3Rvcnk6U1J9XSxpbXBvcnRzOltbV2suZm9yRmVhdHVyZShbd1JdKSxkay5mb3JGZWF0dXJlKG1SLGdSLGtSKSxiRSxxUy5kZWZpbmVHbG9iYWxTZXR0aW5nKERSKV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChFUixbe3R5cGU6QXksYXJnczpbe2ltcG9ydHM6W1drLmZvckZlYXR1cmUoW3dSXSksZGsuZm9yRmVhdHVyZShtUixnUixrUiksYkUscVMuZGVmaW5lR2xvYmFsU2V0dGluZyhEUildLHByb3ZpZGVyczpbe3Byb3ZpZGU6a1IsZGVwczpbVlNdLHVzZUZhY3Rvcnk6U1J9XX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKEVSLHtpbXBvcnRzOltHayxjayxiRSxxU119KTtjb25zdCBSUj1uZXcgR2EoIltBbGVydF0gQWN0aW9uLVRvLUFsZXJ0IFByb3ZpZGVyIik7Y2xhc3MgQVJ7Y29uc3RydWN0b3IodCl7dGhpcy5wcm92aWRlcnM9bmV3IE1hcDtmb3IoY29uc3QgZSBvZiB0fHxbXSlmb3IoY29uc3QgdCBvZiBlKXtpZih0aGlzLnByb3ZpZGVycy5oYXModC5hY3Rpb25DcmVhdG9yLnR5cGUpKXRocm93IG5ldyBSYW5nZUVycm9yKGAiJHt0LmFjdGlvbkNyZWF0b3IudHlwZX0iIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3IgYWxlcnRzLiBNdWx0aXBsZSBhbGVydHMgZm9yIHRoZSBzYW1lIGFjdGlvbiBpcyBub3QgYWxsb3dlZC5gKTt0aGlzLnByb3ZpZGVycy5zZXQodC5hY3Rpb25DcmVhdG9yLnR5cGUsdC5hbGVydEZyb21BY3Rpb24pfX1nZXRBbGVydEZyb21BY3Rpb24odCl7Y29uc3QgZT10aGlzLnByb3ZpZGVycy5nZXQodC50eXBlKTtyZXR1cm4gZT9lKHQpOm51bGx9c3RhdGljIHJlZ2lzdGVyQWxlcnRBY3Rpb25zKHQpe3JldHVybntuZ01vZHVsZTpBUixwcm92aWRlcnM6W3twcm92aWRlOlJSLG11bHRpOiEwLHVzZUZhY3Rvcnk6dH1dfX19QVIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEFSKSh2cihSUiw4KSl9LEFSLsm1bW9kPWFvKHt0eXBlOkFSfSksQVIuybVpbmo9dm4oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoQVIsW3t0eXBlOkF5LGFyZ3M6W3t9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1JSXX1dfV19KSxudWxsKTtjb25zdCBUUj0iaHBhcmFtcyIsTlI9SlAoIltSdW5zXSBGZXRjaCBSdW5zIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHpSPUpQKCJbUnVuc10gRmV0Y2ggUnVucyBTdWNjZWVkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxJUj1KUCgiW1J1bnNdIEZldGNoIFJ1bnMgRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSFI9SlAoIltSdW5zXSBSdW4gU2VsZWN0aW9uIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxGUj1KUCgiW1J1bnNdIFJ1biBQYWdlIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTFI9SlAoIltSdW5zXSBSdW4gU2VsZWN0b3IgUGFnaW5hdGlvbiBPcHRpb24gQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEJSPUpQKCJbUnVuc10gUnVuIFNlbGVjdG9yIFNvcnQgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFZSPUpQKCJbUnVuc10gUnVuIFNlbGVjdG9yIFJlZ2V4IEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksalI9SlAoIltSdW5zXSBSdW4gQ29sb3IgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFVSPUpQKCJbUnVuc10gUnVuIFRhYmxlIFNob3duIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksR1I9SlAoIltSdW5zXSBSdW4gR3JvdXAgQnkgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pO3ZhciBXUixZUixxUixaUjshKGZ1bmN0aW9uKHQpe3QuREFUQVNFVF9VTktOT1dOPSJEQVRBU0VUX1VOS05PV04iLHQuREFUQVNFVF9UUkFJTklORz0iREFUQVNFVF9UUkFJTklORyIsdC5EQVRBU0VUX1ZBTElEQVRJT049IkRBVEFTRVRfVkFMSURBVElPTiJ9KShXUnx8KFdSPXt9KSksKGZ1bmN0aW9uKHQpe3QuU1RBVFVTX1VOS05PV049IlNUQVRVU19VTktOT1dOIix0LlNUQVRVU19TVUNDRVNTPSJTVEFUVVNfU1VDQ0VTUyIsdC5TVEFUVVNfRkFJTFVSRT0iU1RBVFVTX0ZBSUxVUkUiLHQuU1RBVFVTX1JVTk5JTkc9IlNUQVRVU19SVU5OSU5HIn0pKFlSfHwoWVI9e30pKSwoZnVuY3Rpb24odCl7dC5EQVRBX1RZUEVfVU5TRVQ9IkRBVEFfVFlQRV9VTlNFVCIsdC5EQVRBX1RZUEVfU1RSSU5HPSJEQVRBX1RZUEVfU1RSSU5HIix0LkRBVEFfVFlQRV9CT09MPSJEQVRBX1RZUEVfQk9PTCIsdC5EQVRBX1RZUEVfRkxPQVQ2ND0iREFUQV9UWVBFX0ZMT0FUNjQifSkocVJ8fChxUj17fSkpLChmdW5jdGlvbih0KXt0W3QuRElTQ1JFVEU9MF09IkRJU0NSRVRFIix0W3QuSU5URVJWQUw9MV09IklOVEVSVkFMIn0pKFpSfHwoWlI9e30pKTtjbGFzcyBYUnt9WFIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFhSKX0sWFIuybVwcm92PU1uKHt0b2tlbjpYUixmYWN0b3J5OlhSLsm1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChYUixbe3R5cGU6aW0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSxudWxsLG51bGwpO2NvbnN0IEtSPUpQKCJbSHBhcmFtc10gSHBhcmFtcyBEaXNjcmV0ZSBIcGFyYW0gRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxKUj1KUCgiW0hwYXJhbXNdIEhwYXJhbXMgSW50ZXJ2YWwgSHBhcmFtIEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUVI9SlAoIltIcGFyYW1zXSBIcGFyYW1zIE1ldHJpYyBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pO2Z1bmN0aW9uICRSKHQpe3JldHVybiBKU09OLnN0cmluZ2lmeShbLi4udF0uc29ydCgpKX1mdW5jdGlvbiB0QSh0KXt2YXIgZSxuLG8saTtjb25zdCBhPW5ldyBNYXAscj1uZXcgTWFwLHM9bmV3IE1hcDtmb3IoY29uc3QgYSBvZiB0KWZvcihjb25zdFt0LGxdb2YgYSlpZihsLnR5cGU9PT1aUi5ESVNDUkVURSl7Y29uc3R7cG9zc2libGVWYWx1ZXM6ZSx2YWx1ZXM6bn09ci5nZXQodCl8fHtwb3NzaWJsZVZhbHVlczpuZXcgU2V0LHZhbHVlczpuZXcgU2V0fTtmb3IoY29uc3QgdCBvZiBsLmZpbHRlclZhbHVlcyluLmFkZCh0KTtmb3IoY29uc3QgdCBvZiBsLnBvc3NpYmxlVmFsdWVzKWUuYWRkKHQpO3Iuc2V0KHQse3Bvc3NpYmxlVmFsdWVzOmUsdmFsdWVzOm59KX1lbHNle2NvbnN0IGE9cy5nZXQodCk7cy5zZXQodCx7ZmlsdGVyTG93ZXJWYWx1ZTpNYXRoLm1pbihsLmZpbHRlckxvd2VyVmFsdWUsbnVsbCE9PShlPW51bGw9PWE/dm9pZCAwOmEuZmlsdGVyTG93ZXJWYWx1ZSkmJnZvaWQgMCE9PWU/ZToxLzApLGZpbHRlclVwcGVyVmFsdWU6TWF0aC5tYXgobC5maWx0ZXJVcHBlclZhbHVlLG51bGwhPT0obj1udWxsPT1hP3ZvaWQgMDphLmZpbHRlclVwcGVyVmFsdWUpJiZ2b2lkIDAhPT1uP246LTEvMCksbWluVmFsdWU6TWF0aC5taW4obC5taW5WYWx1ZSxudWxsIT09KG89bnVsbD09YT92b2lkIDA6YS5taW5WYWx1ZSkmJnZvaWQgMCE9PW8/bzoxLzApLG1heFZhbHVlOk1hdGgubWF4KGwubWF4VmFsdWUsbnVsbCE9PShpPW51bGw9PWE/dm9pZCAwOmEubWF4VmFsdWUpJiZ2b2lkIDAhPT1pP2k6LTEvMCl9KX1mb3IoY29uc3RbdCx7dmFsdWVzOmUscG9zc2libGVWYWx1ZXM6bn1db2YgcilhLnNldCh0LHt0eXBlOlpSLkRJU0NSRVRFLGluY2x1ZGVVbmRlZmluZWQ6ITAscG9zc2libGVWYWx1ZXM6Wy4uLm5dLGZpbHRlclZhbHVlczpbLi4uZV19KTtmb3IoY29uc3RbdCx7bWluVmFsdWU6ZSxtYXhWYWx1ZTpuLGZpbHRlckxvd2VyVmFsdWU6byxmaWx0ZXJVcHBlclZhbHVlOml9XW9mIHMpe2lmKGEuaGFzKHQpKXtjb25zdCBlPWEuZ2V0KHQpO2lmKGUudHlwZT09PVpSLkRJU0NSRVRFJiZlLnBvc3NpYmxlVmFsdWVzLnNvbWUoKHQ9PnQpKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ2Fubm90IGNvbWJpbmUgaHBhcmFtLCAke3R9LCBhcyBpdCBpcyBvZiBtaXhlZCB0eXBlcy5gKX1hLnNldCh0LHt0eXBlOlpSLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsbWluVmFsdWU6ZSxtYXhWYWx1ZTpuLGZpbHRlckxvd2VyVmFsdWU6byxmaWx0ZXJVcHBlclZhbHVlOml9KX1yZXR1cm4gYX1mdW5jdGlvbiBlQSh0KXt2YXIgZSxuLG8saTtjb25zdCBhPW5ldyBNYXA7Zm9yKGNvbnN0IHIgb2YgdClmb3IoY29uc3RbdCxzXW9mIHIpe2NvbnN0IHI9YS5nZXQodCk7YS5zZXQodCxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe3R5cGU6WlIuSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMH0scikse21pblZhbHVlOk1hdGgubWluKHMubWluVmFsdWUsbnVsbCE9PShlPW51bGw9PXI/dm9pZCAwOnIubWluVmFsdWUpJiZ2b2lkIDAhPT1lP2U6MS8wKSxtYXhWYWx1ZTpNYXRoLm1heChzLm1heFZhbHVlLG51bGwhPT0obj1udWxsPT1yP3ZvaWQgMDpyLm1heFZhbHVlKSYmdm9pZCAwIT09bj9uOi0xLzApLGZpbHRlckxvd2VyVmFsdWU6TWF0aC5taW4ocy5maWx0ZXJMb3dlclZhbHVlLG51bGwhPT0obz1udWxsPT1yP3ZvaWQgMDpyLmZpbHRlckxvd2VyVmFsdWUpJiZ2b2lkIDAhPT1vP286MS8wKSxmaWx0ZXJVcHBlclZhbHVlOk1hdGgubWF4KHMuZmlsdGVyVXBwZXJWYWx1ZSxudWxsIT09KGk9bnVsbD09cj92b2lkIDA6ci5maWx0ZXJVcHBlclZhbHVlKSYmdm9pZCAwIT09aT9pOi0xLzApfSkpfXJldHVybiBhfWNvbnN0IG5BPXlrKHtzcGVjczp7fSxmaWx0ZXJzOnt9fSxiayhLUiwoKHQsZSk9Pnt2YXIgbjtjb25zdHtleHBlcmltZW50SWRzOm8saHBhcmFtTmFtZTppLGZpbHRlclZhbHVlczphLGluY2x1ZGVVbmRlZmluZWQ6cn09ZSxzPSRSKG8pLGw9bnVsbCE9PShuPXQuZmlsdGVyc1tzXSkmJnZvaWQgMCE9PW4/bjp7aHBhcmFtczpuZXcgTWFwfSxjPWwuaHBhcmFtcy5nZXQoaSk7aWYoYyYmYy50eXBlIT09WlIuRElTQ1JFVEUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5ldyBkaXNjcmV0ZSBmaWx0ZXIgb2YgJHtpfSBjb25mbGljdHMgZXhpc3RpbmcgZmlsdGVyIG9mIGArWlJbYy50eXBlXSk7Y29uc3QgZD10QShvLmZpbHRlcigoZT0+Qm9vbGVhbih0LnNwZWNzW2VdKSkpLm1hcCgoZT0+dC5zcGVjc1tlXS5ocGFyYW0uZGVmYXVsdEZpbHRlcnMpKSkuZ2V0KGkpO2lmKCFkKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBocGFyYW0sICR7aX0sIHdoZW4gaXQgaXMgbm90IGtub3duIGZvciBleHBlcmltZW50SWRzOiAke28uam9pbigiLCAiKX1gKTtpZihkLnR5cGUhPT1aUi5ESVNDUkVURSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgJHtpfSB3aGVuIGRlZmF1bHQgZmlsdGVyIGlzIG5vdCBvZiBkaXNjcmV0ZSB0eXBlLmApO2NvbnN0IHA9bmV3IFNldChkLnBvc3NpYmxlVmFsdWVzKSxtPVsuLi5hXS5maWx0ZXIoKHQ9PiFwLmhhcyh0KSkpO2lmKG0ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgTmV3IGZpbHRlciBmb3IgJHtpfSBoYXMgbW9yZSB0aGFuIG9uZSB2YWx1ZSB0aGF0IGlzIG5vdCBwcmVzZW50IGluIHRoZSBzcGVjLiBCYWQgdmFsdWVzOiAke20uam9pbigiLCAiKX1gKTtjb25zdCB1PW5ldyBNYXAobC5ocGFyYW1zKTtyZXR1cm4gdS5zZXQoaSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYykse3R5cGU6WlIuRElTQ1JFVEUsaW5jbHVkZVVuZGVmaW5lZDpyLHBvc3NpYmxlVmFsdWVzOlsuLi5wXSxmaWx0ZXJWYWx1ZXM6YX0pKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2ZpbHRlcnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZmlsdGVycykse1tzXTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbCkse2hwYXJhbXM6dX0pfSl9KX0pKSxiayhKUiwoKHQsZSk9Pnt2YXIgbjtjb25zdHtleHBlcmltZW50SWRzOm8saHBhcmFtTmFtZTppLGZpbHRlckxvd2VyVmFsdWU6YSxmaWx0ZXJVcHBlclZhbHVlOnIsaW5jbHVkZVVuZGVmaW5lZDpzfT1lLGw9JFIobyksYz1udWxsIT09KG49dC5maWx0ZXJzW2xdKSYmdm9pZCAwIT09bj9uOnttZXRyaWNzOm5ldyBNYXAsaHBhcmFtczpuZXcgTWFwfSxkPWMuaHBhcmFtcy5nZXQoaSk7aWYoZCYmZC50eXBlIT09WlIuSU5URVJWQUwpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5ldyBpbnRlcnZhbCBmaWx0ZXIgb2YgJHtpfSBjb25mbGljdHMgZXhpc3RpbmcgZmlsdGVyIG9mIGArWlJbZC50eXBlXSk7Y29uc3QgcD10QShvLmZpbHRlcigoZT0+Qm9vbGVhbih0LnNwZWNzW2VdKSkpLm1hcCgoZT0+dC5zcGVjc1tlXS5ocGFyYW0uZGVmYXVsdEZpbHRlcnMpKSkuZ2V0KGkpO2lmKCFwKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBocGFyYSwgJHtpfSwgd2hlbiBpdCBpcyBub3Qga25vd24gZm9yIGV4cGVyaW1lbnRJZHM6ICR7by5qb2luKCIsICIpfWApO2lmKHAudHlwZSE9PVpSLklOVEVSVkFMKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCAke2l9IHdoZW4gZGVmYXVsdCBmaWx0ZXIgaXMgbm90IG9mIGludGVydmFsIHR5cGUuYCk7Y29uc3QgbT1uZXcgTWFwKGMuaHBhcmFtcyk7cmV0dXJuIG0uc2V0KGksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGQpLHt0eXBlOlpSLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6cyxtaW5WYWx1ZTpwLm1pblZhbHVlLG1heFZhbHVlOnAubWF4VmFsdWUsZmlsdGVyTG93ZXJWYWx1ZTphLGZpbHRlclVwcGVyVmFsdWU6cn0pKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2ZpbHRlcnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZmlsdGVycykse1tsXTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYykse2hwYXJhbXM6bX0pfSl9KX0pKSxiayhRUiwoKHQsZSk9Pnt2YXIgbjtjb25zdHtleHBlcmltZW50SWRzOm8sbWV0cmljVGFnOmksZmlsdGVyTG93ZXJWYWx1ZTphLGZpbHRlclVwcGVyVmFsdWU6cixpbmNsdWRlVW5kZWZpbmVkOnN9PWUsbD0kUihvKSxjPW51bGwhPT0obj10LmZpbHRlcnNbbF0pJiZ2b2lkIDAhPT1uP246e21ldHJpY3M6bmV3IE1hcCxocGFyYW1zOm5ldyBNYXB9LGQ9ZUEoby5maWx0ZXIoKGU9PkJvb2xlYW4odC5zcGVjc1tlXSkpKS5tYXAoKGU9PnQuc3BlY3NbZV0ubWV0cmljLmRlZmF1bHRGaWx0ZXJzKSkpLmdldChpKTtpZighZCl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgbWV0cmljLCAke2l9LCB3aGVuIGl0IGlzIG5vdCBrbm93biBmb3IgZXhwZXJpbWVudElkczogJHtvLmpvaW4oIiwgIil9YCk7Y29uc3QgcD1jLm1ldHJpY3MuZ2V0KGkpLG09bmV3IE1hcChjLm1ldHJpY3MpO3JldHVybiBtLnNldChpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxwKSx7dHlwZTpaUi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOnMsbWluVmFsdWU6ZC5taW5WYWx1ZSxtYXhWYWx1ZTpkLm1heFZhbHVlLGZpbHRlckxvd2VyVmFsdWU6YSxmaWx0ZXJVcHBlclZhbHVlOnJ9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtmaWx0ZXJzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmZpbHRlcnMpLHtbbF06T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGMpLHttZXRyaWNzOm19KX0pfSl9KSksYmsoelIsKCh0LGUpPT57dmFyIG4sbyxpLGE7aWYoMD09PU9iamVjdC5rZXlzKGUubmV3UnVuc0FuZE1ldGFkYXRhKS5sZW5ndGgpcmV0dXJuIHQ7Y29uc3Qgcj1PYmplY3QuYXNzaWduKHt9LHQuc3BlY3MpLHM9bmV3IE1hcCxsPW5ldyBTZXQ7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXMoZS5uZXdSdW5zQW5kTWV0YWRhdGEpKXtjb25zdCBjPW5ldyBNYXAsZD1uZXcgTWFwLHA9bmV3IE1hcCxtPW5ldyBNYXAse3J1bnM6dSxtZXRhZGF0YTpmfT1lLm5ld1J1bnNBbmRNZXRhZGF0YVt0XTtmb3IoY29uc3QgdCBvZiB1KXtjb25zdCBlPWYucnVuVG9IcGFyYW1zQW5kTWV0cmljc1t0LmlkXTtpZihlKWZvcihjb25zdCB0IG9mIGUubWV0cmljcyl7Y29uc3QgZT1zLmdldCh0LnRhZyk7cy5zZXQodC50YWcse21pbjplP01hdGgubWluKGUubWluLHQudmFsdWUpOnQudmFsdWUsbWF4OmU/TWF0aC5tYXgoZS5tYXgsdC52YWx1ZSk6dC52YWx1ZX0pfX1mb3IoY29uc3R7bmFtZTp0LGRvbWFpbjplfW9mIGYuaHBhcmFtU3BlY3MpaWYoZS50eXBlPT09WlIuRElTQ1JFVEUpe2NvbnN0IG49cC5nZXQodCl8fG5ldyBTZXQ7Zm9yKGNvbnN0IHQgb2YgZS52YWx1ZXMpbi5hZGQodCk7cC5zZXQodCxuKX1lbHNle2NvbnN0IG49bS5nZXQodCk7bS5zZXQodCx7bWluVmFsdWU6bj9NYXRoLm1pbihlLm1pblZhbHVlLG4ubWluVmFsdWUpOmUubWluVmFsdWUsbWF4VmFsdWU6bj9NYXRoLm1heChlLm1heFZhbHVlLG4ubWF4VmFsdWUpOmUubWF4VmFsdWV9KX1mb3IoY29uc3QgdCBvZiBmLm1ldHJpY1NwZWNzKWwuYWRkKHQudGFnKTtmb3IoY29uc3RbdCxlXW9mIHApYy5zZXQodCx7dHlwZTpaUi5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOiEwLHBvc3NpYmxlVmFsdWVzOlsuLi5lXSxmaWx0ZXJWYWx1ZXM6Wy4uLmVdfSk7Zm9yKGNvbnN0W3Qse21pblZhbHVlOmUsbWF4VmFsdWU6bn1db2YgbSljLnNldCh0LHt0eXBlOlpSLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsbWluVmFsdWU6ZSxtYXhWYWx1ZTpuLGZpbHRlckxvd2VyVmFsdWU6ZSxmaWx0ZXJVcHBlclZhbHVlOm59KTtmb3IoY29uc3QgdCBvZiBsKXtjb25zdCBlPXMuZ2V0KHQpLGk9bnVsbCE9PShuPW51bGw9PWU/dm9pZCAwOmUubWluKSYmdm9pZCAwIT09bj9uOjAsYT1udWxsIT09KG89bnVsbD09ZT92b2lkIDA6ZS5tYXgpJiZ2b2lkIDAhPT1vP286MDtkLnNldCh0LHt0eXBlOlpSLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsbWluVmFsdWU6aSxtYXhWYWx1ZTphLGZpbHRlckxvd2VyVmFsdWU6aSxmaWx0ZXJVcHBlclZhbHVlOmF9KX1yW3RdPXtocGFyYW06T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG51bGw9PT0oaT1yW3RdKXx8dm9pZCAwPT09aT92b2lkIDA6aS5ocGFyYW0pLHtzcGVjczpmLmhwYXJhbVNwZWNzLGRlZmF1bHRGaWx0ZXJzOmN9KSxtZXRyaWM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG51bGw9PT0oYT1yW3RdKXx8dm9pZCAwPT09YT92b2lkIDA6YS5tZXRyaWMpLHtzcGVjczpmLm1ldHJpY1NwZWNzLGRlZmF1bHRGaWx0ZXJzOmR9KX19cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c3BlY3M6cn0pfSkpKTtmdW5jdGlvbiBvQSh0LGUpe3JldHVybiBuQSh0LGUpfWNsYXNzIGlBe31pQS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aUEpfSxpQS7JtW1vZD1hbyh7dHlwZTppQX0pLGlBLsm1aW5qPXZuKHtpbXBvcnRzOltbZGsuZm9yRmVhdHVyZShUUixvQSldXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoaUEsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltkay5mb3JGZWF0dXJlKFRSLG9BKV19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhpQSx7aW1wb3J0czpbY2tdfSk7Y2xhc3MgYUF7fWZ1bmN0aW9uIHJBKHQsZSl7cmV0dXJuYCR7ZX0vJHt0fWB9YUEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGFBKX0sYUEuybVtb2Q9YW8oe3R5cGU6YUF9KSxhQS7JtWluaj12bih7aW1wb3J0czpbW2lBXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGFBLFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbaUFdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oYUEse2ltcG9ydHM6W2lBXX0pO2NsYXNzIHNBe2NvbnN0cnVjdG9yKHQpe3RoaXMuaHR0cD10fWZldGNoUnVucyh0KXtyZXR1cm4gdGhpcy5odHRwLmdldCgiZGF0YS9ydW5zIikucGlwZShJdCgoZT0+ZS5tYXAoKGU9Pih7aWQ6ckEoZSx0KSxuYW1lOmUsc3RhcnRUaW1lOjB9KSkpKSkpfWZldGNoSHBhcmFtc01ldGFkYXRhKHQpe3JldHVybiBFdCh7aHBhcmFtU3BlY3M6W10sbWV0cmljU3BlY3M6W10scnVuVG9IcGFyYW1zQW5kTWV0cmljczp7fX0pfX1zQS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8c0EpKHZyKGxFKSl9LHNBLsm1cHJvdj1Nbih7dG9rZW46c0EsZmFjdG9yeTpzQS7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoc0EsW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmxFfV19KSxudWxsKTtjbGFzcyBsQXt9bEEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGxBKX0sbEEuybVtb2Q9YW8oe3R5cGU6bEF9KSxsQS7JtWluaj12bih7cHJvdmlkZXJzOlt7cHJvdmlkZTpYUix1c2VDbGFzczpzQX1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChsQSxbe3R5cGU6QXksYXJnczpbe3Byb3ZpZGVyczpbe3Byb3ZpZGU6WFIsdXNlQ2xhc3M6c0F9XX1dfV0sbnVsbCxudWxsKTtjb25zdCBjQT0iYWxlcnRzIixkQT1adyhLdyhjQSksKHQ9PnQubGF0ZXN0QWxlcnQpKSxwQT0iZXhwZXJpbWVudHMiLG1BPVp3KEt3KHBBKSwodD0+dC5kYXRhKSksdUE9WncobUEsKCh0LGUpPT57Y29uc3R7ZXhwZXJpbWVudElkOm59PWU7cmV0dXJuIHQuZXhwZXJpbWVudE1hcFtuXXx8bnVsbH0pKTsKLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KCiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogICAgUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCiAgICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICAgIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCiAgICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KZnVuY3Rpb24gZkEodCxlKXt2YXIgbj17fTtmb3IodmFyIG8gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmZS5pbmRleE9mKG8pPDAmJihuW29dPXRbb10pO2lmKG51bGwhPXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT0wO2ZvcihvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7aTxvLmxlbmd0aDtpKyspZS5pbmRleE9mKG9baV0pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0LG9baV0pJiYobltvW2ldXT10W29baV1dKX1yZXR1cm4gbn1mdW5jdGlvbiBnQSh0LGUsbixvKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxhKXtmdW5jdGlvbiByKHQpe3RyeXtsKG8ubmV4dCh0KSl9Y2F0Y2godCl7YSh0KX19ZnVuY3Rpb24gcyh0KXt0cnl7bChvLnRocm93KHQpKX1jYXRjaCh0KXthKHQpfX1mdW5jdGlvbiBsKHQpe3QuZG9uZT9pKHQudmFsdWUpOihmdW5jdGlvbiBlKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpfSkodC52YWx1ZSkudGhlbihyLHMpfWwoKG89by5hcHBseSh0LGV8fFtdKSkubmV4dCgpKX0pKX12YXIgaEEsYkEseUE7IShmdW5jdGlvbih0KXt0LlNDQUxBUlM9InNjYWxhcnMiLHQuSElTVE9HUkFNUz0iaGlzdG9ncmFtcyIsdC5JTUFHRVM9ImltYWdlcyJ9KShoQXx8KGhBPXt9KSksKGZ1bmN0aW9uKHQpe3QuREVGQVVMVD0iZGVmYXVsdCIsdC5BU0NFTkRJTkc9ImFzY2VuZGluZyIsdC5ERVNDRU5ESU5HPSJkZXNjZW5kaW5nIix0Lk5FQVJFU1Q9Im5lYXJlc3QifSkoYkF8fChiQT17fSkpLChmdW5jdGlvbih0KXt0W3QuU1RFUD0wXT0iU1RFUCIsdFt0LlJFTEFUSVZFPTFdPSJSRUxBVElWRSIsdFt0LldBTExfVElNRT0yXT0iV0FMTF9USU1FIn0pKHlBfHwoeUE9e30pKTtjb25zdCBfQT0idGltZXNlcmllcyIsQ0E9W2hBLklNQUdFU107ZnVuY3Rpb24gTUEodCl7cmV0dXJuIENBLmluY2x1ZGVzKHQpfWNvbnN0IHZBPVtoQS5ISVNUT0dSQU1TLGhBLklNQUdFU107ZnVuY3Rpb24geEEodCl7cmV0dXJuIHZBLmluY2x1ZGVzKHQpfWZ1bmN0aW9uIE9BKHQpe3JldHVybiB4QSh0LnBsdWdpbil9Y2xhc3MgUEF7fWZ1bmN0aW9uIHdBKHQpe3JldHVybiB0Lmhhc093blByb3BlcnR5KCJlcnJvciIpfWNvbnN0IGtBPSJkYXRhL3BsdWdpbi90aW1lc2VyaWVzIjtmdW5jdGlvbiBTQSh0KXtjb25zdCBlPXQuaW5kZXhPZigiLyIpO3JldHVybntydW46dC5zdWJzdHJpbmcoZSsxKSxleHBlcmltZW50SWQ6dC5zdWJzdHJpbmcoMCxlKX19ZnVuY3Rpb24gREEodCxlKXtyZXR1cm5gJHtlfS8ke3R9YH1mdW5jdGlvbiBFQSh0LGUpe2NvbnN0e3J1blRvU2VyaWVzOm4scnVuOm99PXQsaT1mQSh0LFsicnVuVG9TZXJpZXMiLCJydW4iXSksYT1PYmplY3QuYXNzaWduKHt9LGkpO3JldHVybiBuJiYoYS5ydW5Ub1Nlcmllcz1SQShuLGUpKSxvJiYoYS5ydW5JZD1EQShvLGUpKSxhfWZ1bmN0aW9uIFJBKHQsZSl7Y29uc3Qgbj17fTtmb3IoY29uc3QgbyBpbiB0KXQuaGFzT3duUHJvcGVydHkobykmJihuW0RBKG8sZSldPXRbb10pO3JldHVybiBufWNsYXNzIEFBe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5odHRwPXQsdGhpcy5zdG9yZT1lfWZldGNoVGFnTWV0YWRhdGEodCl7Y29uc3QgZT10Lm1hcCgodD0+dGhpcy5odHRwLmdldChgL2V4cGVyaW1lbnQvJHt0fS8ke2tBfS90YWdzYCkucGlwZShJdCgoZT0+KGZ1bmN0aW9uIG4odCxlKXtjb25zdCBuPXt9O2Zvcihjb25zdCBvIG9mIE9iamVjdC5rZXlzKHQpKXtjb25zdCBpPW87aWYoTUEoaSkpe2NvbnN0IG89dFtpXSx7dGFnUnVuU2FtcGxlZEluZm86YX09byxyPWZBKG8sWyJ0YWdSdW5TYW1wbGVkSW5mbyJdKSxzPXt9O2Zvcihjb25zdCB0IGluIGEpYS5oYXNPd25Qcm9wZXJ0eSh0KSYmKHNbdF09UkEoYVt0XSxlKSk7bltpXT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scikse3RhZ1J1blNhbXBsZWRJbmZvOnN9KX1lbHNle2NvbnN0IG89dFtpXSx7cnVuVGFnSW5mbzphfT1vLHI9ZkEobyxbInJ1blRhZ0luZm8iXSk7bltpXT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scikse3J1blRhZ0luZm86UkEoYSxlKX0pfX1yZXR1cm4gbn0pKGUsdCkpKSkpKSxuPXRoaXMuc3RvcmUuc2VsZWN0KHFEKS5waXBlKGNlKEJvb2xlYW4pLGJlKDEpLFZlKHRoaXMuc3RvcmUuc2VsZWN0KG9FKSksSXQoKChbLHRdKT0+dCkpKTtyZXR1cm4gJHQoZSkucGlwZShWZShuKSxJdCgoKFt0LGVdKT0+e2NvbnN0IG49KGZ1bmN0aW9uIG8odCl7Y29uc3QgZT17fTtmb3IoY29uc3QgbiBvZiB0KWZvcihjb25zdCB0IG9mIE9iamVjdC52YWx1ZXMoaEEpKWlmKE1BKHQpKXtlW3RdPWVbdF18fHt0YWdEZXNjcmlwdGlvbnM6e30sdGFnUnVuU2FtcGxlZEluZm86e319O2NvbnN0e3RhZ0Rlc2NyaXB0aW9uczpvLHRhZ1J1blNhbXBsZWRJbmZvOml9PW5bdF07ZVt0XS50YWdEZXNjcmlwdGlvbnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGVbdF0udGFnRGVzY3JpcHRpb25zKSxvKTtjb25zdCBhPWVbdF0udGFnUnVuU2FtcGxlZEluZm87Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXMoaSkpe2FbdF09YVt0XXx8e307Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXMoaVt0XSkpYVt0XVtlXT1pW3RdW2VdfX1lbHNle2VbdF09ZVt0XXx8e3RhZ0Rlc2NyaXB0aW9uczp7fSxydW5UYWdJbmZvOnt9fTtjb25zdHt0YWdEZXNjcmlwdGlvbnM6byxydW5UYWdJbmZvOml9PW5bdF07ZVt0XS50YWdEZXNjcmlwdGlvbnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGVbdF0udGFnRGVzY3JpcHRpb25zKSxvKSxlW3RdLnJ1blRhZ0luZm89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGVbdF0ucnVuVGFnSW5mbyksaSl9cmV0dXJuIGV9KSh0KTtyZXR1cm4gZXx8KG5baEEuSU1BR0VTXT17dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1J1blNhbXBsZWRJbmZvOnt9fSksbn0pKSl9ZmV0Y2hUaW1lU2VyaWVzKHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZih4QSh0LnBsdWdpbikpe2NvbnN0IGU9dCx7cnVuSWQ6bn09ZSxvPWZBKGUsWyJydW5JZCJdKSx7cnVuOmksZXhwZXJpbWVudElkOmF9PVNBKG4pLHI9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG8pLHtydW46aX0pO3JldHVybiB0aGlzLmZldGNoVGltZVNlcmllc0JhY2tlbmRSZXF1ZXN0KHIsYSkucGlwZShJdCgoKHtyZXNwb25zZTp0LGV4cGVyaW1lbnRJZDplfSk9PkVBKHQsZSkpKSl9Y29uc3QgZT10LHtleHBlcmltZW50SWRzOm59PWUsbz1mQShlLFsiZXhwZXJpbWVudElkcyJdKTtyZXR1cm4gJHQobi5tYXAoKHQ9PnRoaXMuZmV0Y2hUaW1lU2VyaWVzQmFja2VuZFJlcXVlc3Qobyx0KSkpKS5waXBlKEl0KCh0PT57Y29uc3QgZT1mQSh0WzBdLnJlc3BvbnNlLFsicnVuVG9TZXJpZXMiLCJlcnJvciJdKTtmb3IoY29uc3R7cmVzcG9uc2U6bixleHBlcmltZW50SWQ6b31vZiB0KXtjb25zdCB0PUVBKG4sbyk7aWYoZS5lcnJvciljb250aW51ZTtjb25zdHtydW5Ub1NlcmllczppLGVycm9yOmF9PXQ7aWYoYSllLmVycm9yPWEsZS5ydW5Ub1Nlcmllcz12b2lkIDA7ZWxzZXtlLnJ1blRvU2VyaWVzPWUucnVuVG9TZXJpZXN8fHt9O2Zvcihjb25zdCB0IG9mIE9iamVjdC5rZXlzKGkpKWUucnVuVG9TZXJpZXNbdF09aVt0XX19cmV0dXJuIGV9KSkpfSkpO3JldHVybiAkdChlKX1mZXRjaFRpbWVTZXJpZXNCYWNrZW5kUmVxdWVzdCh0LGUpe2NvbnN0IG49bmV3IEZvcm1EYXRhO3JldHVybiBuLmFwcGVuZCgicmVxdWVzdHMiLEpTT04uc3RyaW5naWZ5KFt0XSkpLHRoaXMuaHR0cC5wb3N0KGAvZXhwZXJpbWVudC8ke2V9LyR7a0F9L3RpbWVTZXJpZXNgLG4pLnBpcGUoSXQoKHQ9Pih7cmVzcG9uc2U6dFswXSxleHBlcmltZW50SWQ6ZX0pKSkpfWltYWdlVXJsKHQpe3JldHVybmAke2tBfS9pbWFnZURhdGE/aW1hZ2VJZD0ke3R9YH1kb3dubG9hZFVybCh0LGUsbixvKXtjb25zdHtydW46aSxleHBlcmltZW50SWQ6YX09U0Eobik7bGV0IHI7c3dpdGNoKHQpe2Nhc2UgaEEuU0NBTEFSUzpyPSJzY2FsYXJzL3NjYWxhcnMiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBOb3QgaW1wbGVtZW50ZWQ6IGRvd25sb2FkVXJsIGZvciAke3R9IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRgKX1pZighYSl0aHJvdyBuZXcgRXJyb3IoImV4cGVyaW1lbnRJZCBpcyBlbXB0eTsgaXQgaXMgcmVxdWlyZWQgdG8gZm9ybSBkb3dubG9hZFVybC4iKTtyZXR1cm5gL2V4cGVyaW1lbnQvJHthfS9kYXRhL3BsdWdpbi8ke3J9PyR7bmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOmUscnVuOmksZm9ybWF0Om99KX1gfX1BQS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QUEpKHZyKGxFKSx2cihJdykpfSxBQS7JtXByb3Y9TW4oe3Rva2VuOkFBLGZhY3Rvcnk6QUEuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEFBLFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpsRX0se3R5cGU6SXd9XX0pLG51bGwpO2NsYXNzIFRBe31UQS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VEEpfSxUQS7JtXByb3Y9TW4oe3Rva2VuOlRBLGZhY3Rvcnk6VEEuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFRBLFt7dHlwZTppbX1dLG51bGwsbnVsbCk7Y29uc3QgTkE9ImV4cGVyaW1lbnRhbFBsdWdpbiIsekE9InNjYWxhcnNCYXRjaFNpemUiLElBPSJlbmFibGVDb2xvckdyb3VwIixIQT0iZW5hYmxlQ29sb3JHcm91cEJ5UmVnZXgiLEZBPSJkYXJrTW9kZSIsTEE9ImVuYWJsZUxpbmtUaW1lIixCQT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO2NsYXNzIFZBe2dldFBhcmFtcygpe3JldHVybiBCQX19VkEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFZBKX0sVkEuybVwcm92PU1uKHt0b2tlbjpWQSxmYWN0b3J5OlZBLsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChWQSxbe3R5cGU6aW19XSxudWxsLG51bGwpO2NsYXNzIGpBe2NvbnN0cnVjdG9yKHQpe3RoaXMucXVlcnlQYXJhbXM9dH1nZXRGZWF0dXJlcyh0PSExKXtjb25zdCBlPXRoaXMucXVlcnlQYXJhbXMuZ2V0UGFyYW1zKCksbj10P3RoaXMuZ2V0UGFydGlhbEZlYXR1cmVzRnJvbU1lZGlhUXVlcnkoKTp7fTtyZXR1cm4gZS5oYXMoTkEpJiYobi5lbmFibGVkRXhwZXJpbWVudGFsUGx1Z2lucz1lLmdldEFsbChOQSkpLGUuaGFzKCJ0ZW5zb3Jib2FyZENvbGFiIikmJihuLmluQ29sYWI9InRydWUiPT09ZS5nZXQoInRlbnNvcmJvYXJkQ29sYWIiKSksZS5oYXMoekEpJiYobi5zY2FsYXJzQmF0Y2hTaXplPU51bWJlcihlLmdldCh6QSkpKSxlLmhhcyhJQSkmJihuLmVuYWJsZWRDb2xvckdyb3VwPSJmYWxzZSIhPT1lLmdldChJQSkpLGUuaGFzKEhBKSYmKG4uZW5hYmxlZENvbG9yR3JvdXBCeVJlZ2V4PSJmYWxzZSIhPT1lLmdldChIQSkpLGUuaGFzKEZBKSYmKG4uZGVmYXVsdEVuYWJsZURhcmtNb2RlPSJmYWxzZSIhPT1lLmdldChGQSkpLGUuaGFzKExBKSYmKG4uZW5hYmxlZExpbmtlZFRpbWU9ImZhbHNlIiE9PWUuZ2V0KExBKSksbn1nZXRQYXJ0aWFsRmVhdHVyZXNGcm9tTWVkaWFRdWVyeSgpe2NvbnN0IHQ9e307cmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcyYmKHQuZGVmYXVsdEVuYWJsZURhcmtNb2RlPSEwKSx0fX1qQS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8akEpKHZyKFZBKSl9LGpBLsm1cHJvdj1Nbih7dG9rZW46akEsZmFjdG9yeTpqQS7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoakEsW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlZBfV19KSxudWxsKTtjbGFzcyBVQXt9VUEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFVBKX0sVUEuybVtb2Q9YW8oe3R5cGU6VUF9KSxVQS7JtWluaj12bih7cHJvdmlkZXJzOltqQSxWQSx7cHJvdmlkZTpUQSx1c2VDbGFzczpqQX1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChVQSxbe3R5cGU6QXksYXJnczpbe3Byb3ZpZGVyczpbakEsVkEse3Byb3ZpZGU6VEEsdXNlQ2xhc3M6akF9XX1dfV0sbnVsbCxudWxsKTtjb25zdCBHQT1KUCgiW0ZFQVRVUkUgRkxBR10gUGFydGlhbCBGZWF0dXJlIEZsYWdzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFdBPUpQKCJbRkVBVFVSRSBGTEFHXSBFbmFibGUgRGFyayBNb2RlIE92ZXJyaWRlIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxZQT1KUCgiW0ZFQVRVUkUgRkxBR10gRWZmZWN0cyBJbml0Iik7Y2xhc3MgcUF7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy5kYXRhU291cmNlPW4sdGhpcy5nZXRGZWF0dXJlRmxhZ3MkPU1rKCgoKT0+dGhpcy5hY3Rpb25zJC5waXBlKERrKFlBKSxmZSh0aGlzLnN0b3JlLnNlbGVjdChLRCkpLEl0KCgoWyx0XSk9Pntjb25zdCBlPXRoaXMuZGF0YVNvdXJjZS5nZXRGZWF0dXJlcyh0KTtyZXR1cm4gR0Eoe2ZlYXR1cmVzOmV9KX0pKSkpKX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiBZQSgpfX1xQS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cUEpKHZyKFNrKSx2cihJdyksdnIoVEEpKX0scUEuybVwcm92PU1uKHt0b2tlbjpxQSxmYWN0b3J5OnFBLsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChxQSxbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6U2t9LHt0eXBlOkl3fSx7dHlwZTpUQX1dfSksbnVsbCk7Y29uc3QgWkE9e2lzRmVhdHVyZUZsYWdzTG9hZGVkOiExLGRlZmF1bHRGbGFnczp7aXNBdXRvRGFya01vZGVBbGxvd2VkOiEwLGRlZmF1bHRFbmFibGVEYXJrTW9kZTohMSxlbmFibGVEYXJrTW9kZU92ZXJyaWRlOm51bGwsZW5hYmxlZENvbG9yR3JvdXA6ITAsZW5hYmxlZENvbG9yR3JvdXBCeVJlZ2V4OiEwLGVuYWJsZWRFeHBlcmltZW50YWxQbHVnaW5zOltdLGluQ29sYWI6ITEsc2NhbGFyc0JhdGNoU2l6ZTp2b2lkIDAsbWV0cmljc0ltYWdlU3VwcG9ydEVuYWJsZWQ6ITAsZW5hYmxlZExpbmtlZFRpbWU6ITEsZW5hYmxlVGltZVNlcmllc1Byb21vdGlvbjohMX0sZmxhZ092ZXJyaWRlczp7fX0sWEE9bmV3IEdhKCJbRmVhdHVyZSBGbGFnXSBTdG9yZSBDb25maWciKTtmdW5jdGlvbiBLQSgpe3JldHVybntpbml0aWFsU3RhdGU6WkF9fWNvbnN0IEpBPXlrKFpBLGJrKEdBLCgodCx7ZmVhdHVyZXM6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2lzRmVhdHVyZUZsYWdzTG9hZGVkOiEwLGZsYWdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZmxhZ092ZXJyaWRlcyksZSl9KSkpLGJrKFdBLCgodCx7ZW5hYmxlRGFya01vZGU6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2ZsYWdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZmxhZ092ZXJyaWRlcykse2VuYWJsZURhcmtNb2RlT3ZlcnJpZGU6ZX0pfSkpKSxiayhXUywoKHQse3BhcnRpYWxTZXR0aW5nczplfSk9PntpZighZS50aGVtZU92ZXJyaWRlKXJldHVybiB0O2xldCBuO3N3aXRjaChlLnRoZW1lT3ZlcnJpZGUpe2Nhc2UgR1MuQlJPV1NFUl9ERUZBVUxUOm49bnVsbDticmVhaztjYXNlIEdTLkRBUks6bj0hMDticmVhaztjYXNlIEdTLkxJR0hUOm49ITF9cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZmxhZ092ZXJyaWRlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5mbGFnT3ZlcnJpZGVzKSx7ZW5hYmxlRGFya01vZGVPdmVycmlkZTpufSl9KX0pKSk7ZnVuY3Rpb24gUUEodCxlKXtyZXR1cm4gSkEodCxlKX1mdW5jdGlvbiAkQSgpe3JldHVybiBadyhRRCwodD0+bnVsbD09PXQ/e3RoZW1lT3ZlcnJpZGU6R1MuQlJPV1NFUl9ERUZBVUxUfTp7dGhlbWVPdmVycmlkZTp0P0dTLkRBUks6R1MuTElHSFR9KSl9Y2xhc3MgdFR7fXRULsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx0VCl9LHRULsm1bW9kPWFvKHt0eXBlOnRUfSksdFQuybVpbmo9dm4oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6WEEsdXNlRmFjdG9yeTpLQX1dLGltcG9ydHM6W1tVQSxkay5mb3JGZWF0dXJlKFdELFFBLFhBKSxXay5mb3JGZWF0dXJlKFtxQV0pLHFTLmRlZmluZUdsb2JhbFNldHRpbmcoJEEpXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHRULFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbVUEsZGsuZm9yRmVhdHVyZShXRCxRQSxYQSksV2suZm9yRmVhdHVyZShbcUFdKSxxUy5kZWZpbmVHbG9iYWxTZXR0aW5nKCRBKV0scHJvdmlkZXJzOlt7cHJvdmlkZTpYQSx1c2VGYWN0b3J5OktBfV19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyh0VCx7aW1wb3J0czpbVUEsY2ssR2sscVNdfSk7Y2xhc3MgZVR7fWZ1bmN0aW9uIG5UKHQsZSxuLG8pe3JldHVybiB0W2VdLmhhc093blByb3BlcnR5KG4pP01BKGUpP3RbZV1bbl0uaGFzT3duUHJvcGVydHkobyk/dFtlXVtuXVtvXTpudWxsOnRbZV1bbl06bnVsbH1mdW5jdGlvbiBvVCh0LGUsbixvKXtpZihNQShlKSl7Y29uc3QgaT1PYmplY3QuYXNzaWduKHt9LHRbZV0pLGE9KGZ1bmN0aW9uIGkodCxlLG4pe2NvbnN0IG89dC5oYXNPd25Qcm9wZXJ0eShlKT9PYmplY3QuYXNzaWduKHt9LHRbZV0pOnt9LGk9by5oYXNPd25Qcm9wZXJ0eShuKTtyZXR1cm4gb1tuXT1pP09iamVjdC5hc3NpZ24oe30sb1tuXSk6e3J1blRvU2VyaWVzOnt9LHJ1blRvTG9hZFN0YXRlOnt9fSxvfSkoaSxuLG8pO3JldHVybiBpW25dPWEsaX1jb25zdCBhPU9iamVjdC5hc3NpZ24oe30sdFtlXSkscj1hLmhhc093blByb3BlcnR5KG4pO3JldHVybiBhW25dPXI/T2JqZWN0LmFzc2lnbih7fSxhW25dKTp7cnVuVG9TZXJpZXM6e30scnVuVG9Mb2FkU3RhdGU6e319LGF9ZnVuY3Rpb24gaVQodCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfWZ1bmN0aW9uIGFUKHQsZSxuKXtjb25zdCBvPU9iamVjdC5hc3NpZ24oe30sbik7Zm9yKGNvbnN0IG4gb2YgZSlvW25dPXQ7cmV0dXJuIG99ZnVuY3Rpb24gclQodCxlLG4sbyl7aWYoTUEoZSkpe2NvbnN0IGk9dFtlXS50YWdSdW5TYW1wbGVkSW5mbztyZXR1cm4gaS5oYXNPd25Qcm9wZXJ0eShuKT9PYmplY3Qua2V5cyhpW25dKS5maWx0ZXIoKHQ9Pm88aVtuXVt0XS5tYXhTYW1wbGVzUGVyU3RlcCkpOltdfWNvbnN0IGk9dFtlXS50YWdUb1J1bnM7cmV0dXJuIGkuaGFzT3duUHJvcGVydHkobik/aVtuXTpbXX1mdW5jdGlvbiBzVCh0LGUsbixvLGksYSl7Y29uc3Qgcj1uZXcgU2V0KHQpLHM9W107Zm9yKGNvbnN0IG8gb2YgdClmb3IoY29uc3QgdCBvZiBlKWlmKChsPW5bdF0pLnBsdWdpbj09PShjPW8pLnBsdWdpbiYmbC50YWc9PT1jLnRhZyYmbC5zYW1wbGU9PT1jLnNhbXBsZSYmKGwucnVuSWQ9PT1jLnJ1bklkfHwhbC5ydW5JZCYmIWMucnVuSWQpKXtzLnB1c2godCksci5kZWxldGUobyk7YnJlYWt9dmFyIGwsYztpZighcy5sZW5ndGgpcmV0dXJue3VucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzOnQsY2FyZE1ldGFkYXRhTWFwOm4sY2FyZFRvUGlubmVkQ29weTpvLHBpbm5lZENhcmRUb09yaWdpbmFsOmksY2FyZFN0ZXBJbmRleDphfTtsZXQgZD17Y2FyZFRvUGlubmVkQ29weTpvLHBpbm5lZENhcmRUb09yaWdpbmFsOmksY2FyZFN0ZXBJbmRleDphLGNhcmRNZXRhZGF0YU1hcDpufTtmb3IoY29uc3QgdCBvZiBzKWQ9bFQodCxkLmNhcmRUb1Bpbm5lZENvcHksZC5waW5uZWRDYXJkVG9PcmlnaW5hbCxkLmNhcmRTdGVwSW5kZXgsZC5jYXJkTWV0YWRhdGFNYXApO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZCkse3VucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzOlsuLi5yXX0pfWZ1bmN0aW9uIGxUKHQsZSxuLG8saSl7aWYoZS5oYXModCkpcmV0dXJue2NhcmRUb1Bpbm5lZENvcHk6ZSxwaW5uZWRDYXJkVG9PcmlnaW5hbDpuLGNhcmRTdGVwSW5kZXg6byxjYXJkTWV0YWRhdGFNYXA6aX07Y29uc3QgYT1uZXcgTWFwKGUpLHI9bmV3IE1hcChuKSxzPU9iamVjdC5hc3NpZ24oe30sbyksbD1PYmplY3QuYXNzaWduKHt9LGkpLGM9KGZ1bmN0aW9uIGQodCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHtiYXNlQ2FyZElkOnR9KX0pKHQpO2Euc2V0KHQsYyksci5zZXQoYyx0KSxvLmhhc093blByb3BlcnR5KHQpJiYoc1tjXT1vW3RdKTtjb25zdCBwPWlbdF07aWYoIXApdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGluIGEgY2FyZCB3aXRob3V0IG1ldGFkYXRhIik7cmV0dXJuIGxbY109cCx7Y2FyZFRvUGlubmVkQ29weTphLHBpbm5lZENhcmRUb09yaWdpbmFsOnIsY2FyZFN0ZXBJbmRleDpzLGNhcmRNZXRhZGF0YU1hcDpsfX1mdW5jdGlvbiBjVCh0KXtyZXR1cm4gdC5waW5uZWRDYXJkVG9PcmlnaW5hbC5zaXplK3QudW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMubGVuZ3RoPDEwfWVULsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxlVCl9LGVULsm1bW9kPWFvKHt0eXBlOmVUfSksZVQuybVpbmo9dm4oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6UEEsdXNlQ2xhc3M6QUF9XSxpbXBvcnRzOltbdFQsY0VdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoZVQsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOlt0VCxjRV0scHJvdmlkZXJzOlt7cHJvdmlkZTpQQSx1c2VDbGFzczpBQX1dfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oZVQse2ltcG9ydHM6W3RULGNFXX0pO2NvbnN0IGRUPSJtZXRyaWNzIixwVD17dG9vbHRpcFNvcnQ6YkEuREVGQVVMVCxpZ25vcmVPdXRsaWVyczohMCx4QXhpc1R5cGU6eUEuU1RFUCxzY2FsYXJTbW9vdGhpbmc6LjYsc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWDohMSxpbWFnZUJyaWdodG5lc3NJbk1pbGxpOjFlMyxpbWFnZUNvbnRyYXN0SW5NaWxsaToxZTMsaW1hZ2VTaG93QWN0dWFsU2l6ZTohMSxoaXN0b2dyYW1Nb2RlOnBFLk9GRlNFVH0sbVQ9S3coZFQpLHVUPVp3KG1ULCh0PT50LnRhZ01ldGFkYXRhTG9hZFN0YXRlKSk7WncobVQsKHQ9PnQudGFnTWV0YWRhdGEpKTtjb25zdCBmVD1adyhtVCwodD0+dC5jYXJkTGlzdCkpLGdUPVp3KG1ULCgodCxlKT0+e2lmKCF0LmNhcmRNZXRhZGF0YU1hcC5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4geUUuTk9UX0xPQURFRDtjb25zdHtwbHVnaW46bix0YWc6byxydW5JZDppLHNhbXBsZTphfT10LmNhcmRNZXRhZGF0YU1hcFtlXSxyPW5UKHQudGltZVNlcmllc0RhdGEsbixvLGEpO2lmKCFyKXJldHVybiB5RS5OT1RfTE9BREVEO2NvbnN0IHM9ci5ydW5Ub0xvYWRTdGF0ZTtpZihpKXJldHVybiBzLmhhc093blByb3BlcnR5KGkpP3NbaV06eUUuTk9UX0xPQURFRDtjb25zdCBsPXJUKHQudGFnTWV0YWRhdGEsbixvLGEpO2lmKCFsLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBsb2FkIGEgY2FyZCB3aG9zZSB0YWcgaGFzIG5vIHJ1bnMiKTtyZXR1cm4gbC5ldmVyeSgodD0+c1t0XT09PXlFLkxPQURFRCkpP3lFLkxPQURFRDpsLnNvbWUoKHQ9PnNbdF09PT15RS5MT0FESU5HKSk/eUUuTE9BRElORzp5RS5OT1RfTE9BREVEfSkpLGhUPVp3KG1ULCgodCxlKT0+e2lmKCF0LmNhcmRNZXRhZGF0YU1hcC5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gbnVsbDtjb25zdHtwbHVnaW46bix0YWc6byxzYW1wbGU6aX09dC5jYXJkTWV0YWRhdGFNYXBbZV0sYT1uVCh0LnRpbWVTZXJpZXNEYXRhLG4sbyxpKTtyZXR1cm4gYT9hLnJ1blRvU2VyaWVzOm51bGx9KSksYlQ9WncobVQsKHQ9PnQuY2FyZE1ldGFkYXRhTWFwKSkseVQ9WncoYlQsKCh0LGUpPT50Lmhhc093blByb3BlcnR5KGUpP3RbZV06bnVsbCkpLF9UPVp3KG1ULCh0PT50LnZpc2libGVDYXJkTWFwKSksQ1Q9WncoX1QsKHQ9Pm5ldyBTZXQodC52YWx1ZXMoKSkpKSxNVD1adyhmVCxiVCwoKHQsZSk9PnQuZmlsdGVyKCh0PT5lLmhhc093blByb3BlcnR5KHQpKSkubWFwKCh0PT5PYmplY3QuYXNzaWduKHtjYXJkSWQ6dH0sZVt0XSkpKSkpLHZUPVp3KG1ULCgodCxlKT0+dC5jYXJkU3RlcEluZGV4Lmhhc093blByb3BlcnR5KGUpP3QuY2FyZFN0ZXBJbmRleFtlXTpudWxsKSkseFQ9WncobVQsKHQ9PnQuY2FyZFRvUGlubmVkQ29weSkpLE9UPVp3KG1ULCh0PT50LnBpbm5lZENhcmRUb09yaWdpbmFsKSksUFQ9WncoeFQsYlQsKCh0LGUpPT5bLi4udC52YWx1ZXMoKV0uZmlsdGVyKCh0PT5lLmhhc093blByb3BlcnR5KHQpKSkubWFwKCh0PT5PYmplY3QuYXNzaWduKHtjYXJkSWQ6dH0sZVt0XSkpKSkpLHdUPVp3KHhULE9ULCgodCxlLG4pPT50LmhhcyhuKXx8ZS5oYXMobikpKSxrVD1adyhtVCwodD0+dC51bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkcykpLFNUPVp3KG1ULCh0PT5jVCh0KSkpLERUPVp3KG1ULCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zZXR0aW5ncyksdC5zZXR0aW5nT3ZlcnJpZGVzKSkpLEVUPVp3KG1ULCh0PT50LnNldHRpbmdPdmVycmlkZXMpKSxSVD1adyhEVCwodD0+dC50b29sdGlwU29ydCkpLEFUPVp3KERULCh0PT50Lmlnbm9yZU91dGxpZXJzKSksVFQ9WncoRFQsKHQ9PnQueEF4aXNUeXBlKSksTlQ9WncoRFQsKHQ9PnQuaGlzdG9ncmFtTW9kZSkpLHpUPVp3KERULCh0PT50LnNjYWxhclNtb290aGluZykpLElUPVp3KERULCh0PT50LnNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1gpKSxIVD1adyhEVCwodD0+dC5pbWFnZUJyaWdodG5lc3NJbk1pbGxpKSksRlQ9WncoRFQsKHQ9PnQuaW1hZ2VDb250cmFzdEluTWlsbGkpKSxMVD1adyhEVCwodD0+dC5pbWFnZVNob3dBY3R1YWxTaXplKSksQlQ9WncobVQsKHQ9PnQudGFnRmlsdGVyKSksVlQ9WncobVQsKCh0LGUpPT5Cb29sZWFuKHQudGFnR3JvdXBFeHBhbmRlZC5nZXQoZSkpKSksalQ9WncobVQsKHQ9PnQuc2VsZWN0VGltZUVuYWJsZWQpKSxVVD1adyhtVCwodD0+dC51c2VSYW5nZVNlbGVjdFRpbWUpKSxHVD1adyhtVCwodD0+e2NvbnN0e21pbjplLG1heDpufT10LnN0ZXBNaW5NYXg7cmV0dXJue21pbjplPT09MS8wPzA6ZSxtYXg6bj09PS0xLzA/MWUzOm59fSkpLFdUPVp3KG1ULEdULCgodCxlKT0+e3ZhciBuO3JldHVybiB0LnNlbGVjdGVkVGltZT9PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zZWxlY3RlZFRpbWUpLHtlbmQ6bnVsbCE9PShuPXQuc2VsZWN0ZWRUaW1lLmVuZCkmJnZvaWQgMCE9PW4/bjp7c3RlcDplLm1heH19KTp7c3RhcnQ6e3N0ZXA6ZS5taW59LGVuZDp7c3RlcDplLm1heH19fSkpLFlUPVp3KG1ULFdULCgodCxlKT0+dC5zZWxlY3RUaW1lRW5hYmxlZD90LnVzZVJhbmdlU2VsZWN0VGltZT9lOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7ZW5kOm51bGx9KTpudWxsKSkscVQ9WncobVQsKHQ9PnQuZmlsdGVyZWRQbHVnaW5UeXBlcykpLFpUPVp3KG1ULCh0PT50LnByb21vdGVUaW1lU2VyaWVzKSksWFQ9WncobVQsKHQ9PnQuaXNTZXR0aW5nc1BhbmVPcGVuKSk7dmFyIEtUOyEoZnVuY3Rpb24odCl7dFt0Lk5PTkU9MF09Ik5PTkUiLHRbdC5XSEFUU19ORVc9MV09IldIQVRTX05FVyJ9KShLVHx8KEtUPXt9KSk7Y29uc3QgSlQ9S3coIm5vdGlmaWNhdGlvbiIpO1p3KEpULCh0PT50Lm5vdGlmaWNhdGlvbnMpKSxadyhKVCwodD0+e3ZhciBlO3JldHVybiBudWxsIT09KGU9dC5sYXN0UmVhZFRpbWVzdGFtcEluTXMpJiZ2b2lkIDAhPT1lP2U6LTF9KSk7Y29uc3QgUVQ9InJ1bnMiO3ZhciAkVCx0TjtmdW5jdGlvbiBlTih0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodC5zbGljZSgpLnNvcnQoKSl9ZnVuY3Rpb24gbk4odCxlLG4pe2NvbnN0IG89e30saT1bXSxhPXttYXRjaGVzOm8sbm9uTWF0Y2hlczppfTtzd2l0Y2godC5rZXkpe2Nhc2UgdE4uUlVOOmZvcihjb25zdCB0IG9mIGUpb1t0LmlkXT1bdF07YnJlYWs7Y2FzZSB0Ti5FWFBFUklNRU5UOmZvcihjb25zdCB0IG9mIGUpe2NvbnN0IGU9blt0LmlkXSxpPW9bZV18fFtdO2kucHVzaCh0KSxvW2VdPWl9YnJlYWs7Y2FzZSB0Ti5SRUdFWDppZighdC5yZWdleFN0cmluZylicmVhaztsZXQgYTt0cnl7YT1uZXcgUmVnRXhwKHQucmVnZXhTdHJpbmcpfWNhdGNoKHQpe2JyZWFrfWZvcihjb25zdCB0IG9mIGUpe2NvbnN0IGU9dC5uYW1lLm1hdGNoKGEpO2lmKGUpe2NvbnN0IG49ZS5sZW5ndGg+MT9KU09OLnN0cmluZ2lmeShlLnNsaWNlKDEpKToicHNldWRvX2dyb3VwIixpPW9bbl18fFtdO2kucHVzaCh0KSxvW25dPWl9ZWxzZSBpLnB1c2godCl9fXJldHVybiBhfWZ1bmN0aW9uIG9OKHQsZSl7c3dpdGNoKHQpe2Nhc2UgdE4uUkVHRVg6cmV0dXJue2tleTp0LHJlZ2V4U3RyaW5nOm51bGwhPWU/ZToiIn07Y2FzZSB0Ti5SVU46Y2FzZSB0Ti5FWFBFUklNRU5UOmRlZmF1bHQ6cmV0dXJue2tleTp0fX19IShmdW5jdGlvbih0KXt0W3QuRVhQRVJJTUVOVF9OQU1FPTBdPSJFWFBFUklNRU5UX05BTUUiLHRbdC5IUEFSQU09MV09IkhQQVJBTSIsdFt0Lk1FVFJJQz0yXT0iTUVUUklDIix0W3QuUlVOX05BTUU9M109IlJVTl9OQU1FIn0pKCRUfHwoJFQ9e30pKSwoZnVuY3Rpb24odCl7dFt0LlJVTj0wXT0iUlVOIix0W3QuRVhQRVJJTUVOVD0xXT0iRVhQRVJJTUVOVCIsdFt0LlJFR0VYPTJdPSJSRUdFWCJ9KSh0Tnx8KHROPXt9KSk7Y29uc3QgaU49S3coUVQpLGFOPVp3KGlOLCh0PT50LmRhdGEpKSxyTj1adyhhTiwoKHQsZSk9Pnt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPXQucnVuSWRUb0V4cElkW2UucnVuSWRdKSYmdm9pZCAwIT09bj9uOm51bGx9KSksc049WncoYU4sKCh0LGUpPT57dmFyIG47cmV0dXJuIG51bGwhPT0obj10LnJ1bk1ldGFkYXRhW2UucnVuSWRdKSYmdm9pZCAwIT09bj9uOm51bGx9KSksbE49WncoYU4sKCh0LGUpPT4odC5ydW5JZHNbZS5leHBlcmltZW50SWRdfHxbXSkuZmlsdGVyKChlPT5Cb29sZWFuKHQucnVuTWV0YWRhdGFbZV0pKSkubWFwKChlPT50LnJ1bk1ldGFkYXRhW2VdKSkpKSxjTj1adyhhTiwoKHQsZSk9Pnt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPXQucnVuSWRzW2UuZXhwZXJpbWVudElkXSkmJnZvaWQgMCE9PW4/bjpbXX0pKSxkTj1adyhhTiwodD0+bmV3IE1hcChPYmplY3QuZW50cmllcyh0LnJ1bk1ldGFkYXRhKSkpKSxwTj1adyhhTiwoKHQsZSk9PnQucnVuc0xvYWRTdGF0ZVtlLmV4cGVyaW1lbnRJZF18fHtsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxzdGF0ZTp5RS5OT1RfTE9BREVEfSkpLG1OPVp3KGFOLCgodCxlKT0+e2NvbnN0IG49ZU4oZS5leHBlcmltZW50SWRzKTtyZXR1cm4gdC5zZWxlY3Rpb25TdGF0ZS5nZXQobil8fG5ldyBNYXB9KSksdU49WncoYU4sKHQ9Pm51bGwhPT10LnVzZXJTZXRHcm91cEJ5S2V5P29OKHQudXNlclNldEdyb3VwQnlLZXksdC5jb2xvckdyb3VwUmVnZXhTdHJpbmcpOm51bGwpKSxmTj1adyh1TixhTiwoKHQsZSk9Pm51bGwhPXQ/dDplLmluaXRpYWxHcm91cEJ5KSksZ049WncoYU4sKHQ9PnQucmVnZXhGaWx0ZXIpKSxoTj1adyhpTiwodD0+dC51aSkpLGJOPVp3KGhOLCh0PT50LnBhZ2luYXRpb25PcHRpb24pKSx5Tj1adyhoTiwodD0+dC5zb3J0KSksX049WncoYU4sKHQ9PnQucnVuQ29sb3JPdmVycmlkZUZvckdyb3VwQnkpKSxDTj1adyhhTiwodD0+dC5kZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnkpKSxNTj1adyhhTiwodD0+dC5jb2xvckdyb3VwUmVnZXhTdHJpbmcpKSx2Tj1KUCgiW1NldHRpbmdzXSBSZWxvYWQgRW5hYmxlIFRvZ2dsZWQiKSx4Tj1KUCgiW1NldHRpbmdzXSBSZWxvYWQgUGVyaW9kIENoYW5nZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE9OPUpQKCJbU2V0dGluZ3NdIFBhZ2UgU2l6ZSBDaGFuZ2UiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxQTj0ic2V0dGluZ3MiLHdOPXtzdGF0ZTp5RS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCksc2V0dGluZ3M6e3JlbG9hZFBlcmlvZEluTXM6M2U0LHJlbG9hZEVuYWJsZWQ6ITEscGFnZVNpemU6MTIsY29sb3JQYWxldHRlOntpZDoiZGVmYXVsdCIsbmFtZToiRGVmYWx0Iixjb2xvcnM6W3tuYW1lOiJTbGF0ZSIsbGlnaHRIZXg6IiM0MjUwNjYiLGRhcmtIZXg6IiM4ZTk4YTMifSx7bmFtZToiQ3lhbiIsbGlnaHRIZXg6IiMxMmI1Y2IiLGRhcmtIZXg6IiMxMmI1Y2IifSx7bmFtZToiUGluayIsbGlnaHRIZXg6IiNlNTI1OTIiLGRhcmtIZXg6IiNlNTI1OTIifSx7bmFtZToiWWVsbG93IixsaWdodEhleDoiI2Y5YWIwMCIsZGFya0hleDoiI2Y5YWIwMCJ9LHtuYW1lOiJQdXJwbGUiLGxpZ2h0SGV4OiIjOTMzNGU2IixkYXJrSGV4OiIjOTMzNGU2In0se25hbWU6IkxpZ2h0IEdyZWVuIixsaWdodEhleDoiIzdjYjM0MiIsZGFya0hleDoiIzdjYjM0MiJ9LHtuYW1lOiJPcmFuZ2UiLGxpZ2h0SGV4OiIjZTg3MTBhIixkYXJrSGV4OiIjZTg3MTBhIn1dLGluYWN0aXZlOntuYW1lOiJHcmF5IixsaWdodEhleDoiI2UwZTBlMCIsZGFya0hleDoiIzNiM2IzYiJ9fX19LGtOPUt3KFBOKSxTTj1adyhrTiwodD0+dC5zdGF0ZSkpLEROPVp3KGtOLCh0PT50LnNldHRpbmdzLnJlbG9hZEVuYWJsZWQpKSxFTj1adyhrTiwodD0+dC5zZXR0aW5ncy5yZWxvYWRQZXJpb2RJbk1zKSksUk49Wncoa04sKHQ9PnQuc2V0dGluZ3MucGFnZVNpemUpKSxBTj1adyhrTiwodD0+dC5zZXR0aW5ncy5jb2xvclBhbGV0dGUpKTtmdW5jdGlvbiBUTih0LGUsbil7aWYoIWUpcmV0dXJuITA7bGV0IG87dHJ5e289bmV3IFJlZ0V4cChlLCJpIil9Y2F0Y2godCl7cmV0dXJuITF9Y29uc3QgaT1bdC5ydW5OYW1lXTtyZXR1cm4gbiYmaS5wdXNoKHQuZXhwZXJpbWVudEFsaWFzLGAke3QuZXhwZXJpbWVudEFsaWFzfS8ke3QucnVuTmFtZX1gKSxpLnNvbWUoKHQ9Pm8udGVzdCh0KSkpfWNvbnN0IE5OPVp3KCh0PT57Y29uc3QgZT1UUyh0KTtyZXR1cm4gZT9tTih0LHtleHBlcmltZW50SWRzOmV9KTpudWxsfSksZ04sKHQ9Pnt2YXIgZTtjb25zdCBuPW51bGwhPT0oZT1UUyh0KSkmJnZvaWQgMCE9PWU/ZTpbXSxvPXpTKHQpLGk9bmV3IE1hcDtmb3IoY29uc3QgZSBvZiBuKXtjb25zdCBuPXVBKHQse2V4cGVyaW1lbnRJZDplfSk7aWYoIW4pY29udGludWU7Y29uc3QgYT1sTih0LHtleHBlcmltZW50SWQ6ZX0pO2Zvcihjb25zdCB0IG9mIGEpaS5zZXQodC5pZCx7cnVuTmFtZTp0Lm5hbWUsZXhwZXJpbWVudE5hbWU6bi5uYW1lLGV4cGVyaW1lbnRBbGlhczpvW2VdfSl9cmV0dXJuIGl9KSxSUywoKHQsZSxuLG8pPT57aWYoIXQpcmV0dXJuIG51bGw7Y29uc3QgaT1vPT09WmsuQ09NUEFSRV9FWFBFUklNRU5ULGE9bmV3IE1hcDtmb3IoY29uc3RbbyxyXW9mIHQuZW50cmllcygpKXtjb25zdCB0PW4uZ2V0KG8pO2Euc2V0KG8sVE4odCxlLGkpJiZyKX1yZXR1cm4gYX0pKSx6Tj1adyhBTixDTixfTixKRCwoKHQsZSxuLG8pPT57Y29uc3QgaT17fTtyZXR1cm4gZS5mb3JFYWNoKCgoZSxhKT0+e2xldCByPW8/dC5pbmFjdGl2ZS5kYXJrSGV4OnQuaW5hY3RpdmUubGlnaHRIZXg7aWYobi5oYXMoYSkpcj1uLmdldChhKTtlbHNlIGlmKGU+PTApe2NvbnN0IG49dC5jb2xvcnNbZSV0LmNvbG9ycy5sZW5ndGhdO3I9bz9uLmRhcmtIZXg6bi5saWdodEhleH1pW2FdPXJ9KSksaX0pKTtjbGFzcyBJTntjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5hY3Rpb25zJD10LHRoaXMuc3RvcmU9ZSx0aGlzLnJ1bnNEYXRhU291cmNlPW4sdGhpcy5sb2FkUnVuc09uUnVuVGFibGVTaG93biQ9TWsoKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoRGsoVVIpLFp0KCgoe2V4cGVyaW1lbnRJZHM6dH0pPT50aGlzLmdldEV4cGVyaW1lbnRzV2l0aExvYWRTdGF0ZSh0LCh0PT50PT09eUUuRkFJTEVEfHx0PT09eUUuTk9UX0xPQURFRCkpLnBpcGUoY2UoKHQ9PiEhdC5sZW5ndGgpKSxadCgoZT0+dGhpcy5mZXRjaEFsbFJ1bnNMaXN0KHQsZSkpKSkpKSkpLHtkaXNwYXRjaDohMX0pLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25Sb3V0ZUNoYW5nZSQ9dGhpcy5hY3Rpb25zJC5waXBlKERrKGRTKSxWZSh0aGlzLnN0b3JlLnNlbGVjdChOUykpLE1lKCgoWyx0XSxbLGVdKT0+dD09PWUpKSxWZSh0aGlzLnN0b3JlLnNlbGVjdChUUykpLGNlKCgoWyx0XSk9PiEhdCkpLEl0KCgoWyx0XSk9PnQpKSxadCgodD0+dGhpcy5nZXRFeHBlcmltZW50c1dpdGhMb2FkU3RhdGUodCwodD0+dD09PXlFLkZBSUxFRHx8dD09PXlFLk5PVF9MT0FERUQpKS5waXBlKEl0KChlPT4oe2V4cGVyaW1lbnRJZHM6dCxleHBlcmltZW50SWRzVG9CZUZldGNoZWQ6ZX0pKSkpKSkpLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25SZWxvYWQkPXRoaXMuYWN0aW9ucyQucGlwZShEayh4RSx2RSksVmUodGhpcy5zdG9yZS5zZWxlY3QoVFMpKSxjZSgoKFssdF0pPT4hIXQpKSxJdCgoKFssdF0pPT50KSksWnQoKHQ9PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKHQsKHQ9PnQhPT15RS5MT0FESU5HKSkucGlwZShJdCgoZT0+KHtleHBlcmltZW50SWRzOnQsZXhwZXJpbWVudElkc1RvQmVGZXRjaGVkOmV9KSkpKSkpKSx0aGlzLmxvYWRSdW5zT25OYXZpZ2F0aW9uT3JSZWxvYWQkPU1rKCgoKT0+cmUodGhpcy5leHBlcmltZW50c1dpdGhTdGFsZVJ1bnNPblJvdXRlQ2hhbmdlJCx0aGlzLmV4cGVyaW1lbnRzV2l0aFN0YWxlUnVuc09uUmVsb2FkJCkucGlwZShadCgoKHtleHBlcmltZW50SWRzOnQsZXhwZXJpbWVudElkc1RvQmVGZXRjaGVkOmV9KT0+dGhpcy5mZXRjaEFsbFJ1bnNMaXN0KHQsZSkpKSkpLHtkaXNwYXRjaDohMX0pfWdldFJ1bnNMaXN0TG9hZFN0YXRlKHQpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChwTix7ZXhwZXJpbWVudElkOnR9KS5waXBlKGJlKDEpKX1nZXRFeHBlcmltZW50c1dpdGhMb2FkU3RhdGUodCxlKXtyZXR1cm4gJHQodC5tYXAoKHQ9PnRoaXMuZ2V0UnVuc0xpc3RMb2FkU3RhdGUodCkpKSkucGlwZShJdCgobj0+dC5maWx0ZXIoKCh0LG8pPT5lKG5bb10uc3RhdGUpKSkpKSl9ZmV0Y2hBbGxSdW5zTGlzdCh0LGUpe3JldHVybiBFdCh7ZXhwZXJpbWVudElkczp0LGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDplfSkucGlwZShGZSgoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKE5SKHtleHBlcmltZW50SWRzOnQscmVxdWVzdGVkRXhwZXJpbWVudElkczplfSkpfSkpLFp0KCgoKT0+e2NvbnN0IG49bmV3IFNldChlKTtyZXR1cm4gJHQodC5tYXAoKHQ9Pm4uaGFzKHQpP3RoaXMuZmV0Y2hSdW5zRm9yRXhwZXJpbWVudCh0KTp0aGlzLm1heWJlV2FpdEZvclJ1bnNBbmRHZXRSdW5zKHQpKSkpfSkpLEl0KCh0PT57Y29uc3QgZT17fSxuPVtdO2Zvcihjb25zdCBvIG9mIHQpbi5wdXNoKC4uLm8ucnVucyksby5mcm9tUmVtb3RlJiYoZVtvLmV4cGVyaW1lbnRJZF09e3J1bnM6by5ydW5zLG1ldGFkYXRhOm8ubWV0YWRhdGF9KTtyZXR1cm57bmV3UnVuc0FuZE1ldGFkYXRhOmUscnVuc0ZvckFsbEV4cGVyaW1lbnRzOm59fSkpLEZlKCgoe25ld1J1bnNBbmRNZXRhZGF0YTplLHJ1bnNGb3JBbGxFeHBlcmltZW50czpufSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKHpSKHtleHBlcmltZW50SWRzOnQsbmV3UnVuc0FuZE1ldGFkYXRhOmUscnVuc0ZvckFsbEV4cGVyaW1lbnRzOm59KSl9KSkscGUoKG49Pih0aGlzLnN0b3JlLmRpc3BhdGNoKElSKHtleHBlcmltZW50SWRzOnQscmVxdWVzdGVkRXhwZXJpbWVudElkczplfSkpLEV0KG51bGwpKSkpLEl0KCgoKT0+bnVsbCkpKX1tYXliZVdhaXRGb3JSdW5zQW5kR2V0UnVucyh0KXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QocE4se2V4cGVyaW1lbnRJZDp0fSkucGlwZShjZSgodD0+dC5zdGF0ZSE9PXlFLkxPQURJTkcpKSxiZSgxKSxadCgodD0+dC5zdGF0ZT09PXlFLkZBSUxFRD9SdChuZXcgRXJyb3IoIlBlbmRpbmcgcmVxdWVzdCBmYWlsZWQiKSk6RXQodCkpKSxWZSh0aGlzLnN0b3JlLnNlbGVjdChsTix7ZXhwZXJpbWVudElkOnR9KSksSXQoKChbLGVdKT0+KHtmcm9tUmVtb3RlOiExLGV4cGVyaW1lbnRJZDp0LHJ1bnM6ZX0pKSkpfWZldGNoUnVuc0ZvckV4cGVyaW1lbnQodCl7cmV0dXJuICR0KFt0aGlzLnJ1bnNEYXRhU291cmNlLmZldGNoUnVucyh0KSx0aGlzLnJ1bnNEYXRhU291cmNlLmZldGNoSHBhcmFtc01ldGFkYXRhKHQpXSkucGlwZShJdCgoKFtlLG5dKT0+KHtmcm9tUmVtb3RlOiEwLGV4cGVyaW1lbnRJZDp0LHJ1bnM6ZSxtZXRhZGF0YTpufSkpKSl9fWZ1bmN0aW9uIEhOKHQsZSxuKXtjb25zdCBvPU9iamVjdC5rZXlzKHQpLGk9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCksZSkse3ByaXZhdGVSb3V0ZUNvbnRleHRlZFN0YXRlOnt9fSk7cmV0dXJue2luaXRpYWxTdGF0ZTppLHJlZHVjZXJzOnlrKGksYmsoZFMsKChlLHtiZWZvcmU6aSxhZnRlcjphfSk9Pntjb25zdCByPVFrKGEucm91dGVLaW5kLGEucGFyYW1zKSxzPWk/UWsoaS5yb3V0ZUtpbmQsaS5wYXJhbXMpOm51bGw7aWYocz09PXIpcmV0dXJuIGU7bGV0IGw9T2JqZWN0LmFzc2lnbih7fSxlLnByaXZhdGVSb3V0ZUNvbnRleHRlZFN0YXRlKTtpZihzKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIG8pdFtuXT1lW25dO2w9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGwpLHtbc106dH0pfWxldCBjPWUucHJpdmF0ZVJvdXRlQ29udGV4dGVkU3RhdGUmJmUucHJpdmF0ZVJvdXRlQ29udGV4dGVkU3RhdGVbcl0/ZS5wcml2YXRlUm91dGVDb250ZXh0ZWRTdGF0ZVtyXTpudWxsO3MmJm51bGw9PT1jJiYoYz10KTtjb25zdCBkPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLGMpLHtwcml2YXRlUm91dGVDb250ZXh0ZWRTdGF0ZTpsfSk7cmV0dXJuIG4/bihkLGEpOmR9KSkpfX12YXIgRk4sTE47ZnVuY3Rpb24gQk4oLi4udCl7cmV0dXJuKGUsbik9PntsZXQgbz1lO2Zvcihjb25zdCBlIG9mIHQpbz1lKG8sbik7cmV0dXJuIG99fUlOLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxJTikodnIoU2spLHZyKEl3KSx2cihYUikpfSxJTi7JtXByb3Y9TW4oe3Rva2VuOklOLGZhY3Rvcnk6SU4uybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKElOLFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpTa30se3R5cGU6SXd9LHt0eXBlOlhSfV19KSxudWxsKSwoZnVuY3Rpb24odCl7dC5BU0M9ImFzYyIsdC5ERVNDPSJkZXNjIix0LlVOU0VUPSIifSkoRk58fChGTj17fSkpLChmdW5jdGlvbih0KXt0LkVYUEVSSU1FTlRfSUQ9ImlkIix0LlVTRVI9InVzZXIiLHQuQkVGT1JFPSJiZWZvcmUiLHQuQUZURVI9ImFmdGVyIix0LlJFR0VYPSJyZWdleCJ9KShMTnx8KExOPXt9KSk7Y29uc3R7aW5pdGlhbFN0YXRlOlZOLHJlZHVjZXJzOmpOfT1ITih7cnVuQ29sb3JPdmVycmlkZUZvckdyb3VwQnk6bmV3IE1hcCxkZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnk6bmV3IE1hcCxncm91cEtleVRvQ29sb3JJZDpuZXcgTWFwLGluaXRpYWxHcm91cEJ5OntrZXk6dE4uUlVOfSx1c2VyU2V0R3JvdXBCeUtleTpudWxsLGNvbG9yR3JvdXBSZWdleFN0cmluZzoiIixyZWdleEZpbHRlcjoiIn0se3J1bklkczp7fSxydW5JZFRvRXhwSWQ6e30scnVuTWV0YWRhdGE6e30scnVuc0xvYWRTdGF0ZTp7fSxzZWxlY3Rpb25TdGF0ZTpuZXcgTWFwfSwoKHQsZSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7aW5pdGlhbEdyb3VwQnk6e2tleTplLnJvdXRlS2luZD09PVprLkNPTVBBUkVfRVhQRVJJTUVOVD90Ti5FWFBFUklNRU5UOnROLlJVTn19KSkpLFVOPUJOKHlrKFZOLGJrKHJTLCgodCx7cm91dGVLaW5kOmUscGFydGlhbFN0YXRlOm59KT0+e3ZhciBvO2lmKGUhPT1aay5DT01QQVJFX0VYUEVSSU1FTlQmJmUhPT1aay5FWFBFUklNRU5UKXJldHVybiB0O2NvbnN0IGk9bi5ydW5zLmdyb3VwQnk7aWYoIWkpcmV0dXJuIHQ7Y29uc3QgYT1pLmtleT09PXROLlJFR0VYP2kucmVnZXhTdHJpbmc6dC5jb2xvckdyb3VwUmVnZXhTdHJpbmc7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29sb3JHcm91cFJlZ2V4U3RyaW5nOmEsdXNlclNldEdyb3VwQnlLZXk6bnVsbCE9PShvPWkua2V5KSYmdm9pZCAwIT09bz9vOm51bGx9KX0pKSxiayhOUiwoKHQsZSk9Pntjb25zdCBuPU9iamVjdC5hc3NpZ24oe30sdC5ydW5zTG9hZFN0YXRlKTtmb3IoY29uc3QgdCBvZiBlLnJlcXVlc3RlZEV4cGVyaW1lbnRJZHMpblt0XT1uW3RdP09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxuW3RdKSx7c3RhdGU6eUUuTE9BRElOR30pOntsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxzdGF0ZTp5RS5MT0FESU5HfTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtydW5zTG9hZFN0YXRlOm59KX0pKSxiayh6UiwoKHQsZSk9Pnt2YXIgbjtjb25zdCBvPU9iamVjdC5hc3NpZ24oe30sdC5ydW5JZHMpLGk9T2JqZWN0LmFzc2lnbih7fSx0LnJ1bk1ldGFkYXRhKSxhPU9iamVjdC5hc3NpZ24oe30sdC5ydW5JZFRvRXhwSWQpLHI9T2JqZWN0LmFzc2lnbih7fSx0LnJ1bnNMb2FkU3RhdGUpLHM9bmV3IE1hcCh0LnNlbGVjdGlvblN0YXRlKTtmb3IoY29uc3QgdCBvZiBPYmplY3Qua2V5cyhlLm5ld1J1bnNBbmRNZXRhZGF0YSkpe2NvbnN0e3J1bnM6bixtZXRhZGF0YTpzfT1lLm5ld1J1bnNBbmRNZXRhZGF0YVt0XTtvW3RdPW4ubWFwKCgoe2lkOnR9KT0+dCkpLHJbdF09T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHJbdF0pLHtsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKSxzdGF0ZTp5RS5MT0FERUR9KTtmb3IoY29uc3QgZSBvZiBuKXtjb25zdCBuPXMucnVuVG9IcGFyYW1zQW5kTWV0cmljc1tlLmlkXTtpW2UuaWRdPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7aHBhcmFtczpuP24uaHBhcmFtczpudWxsLG1ldHJpY3M6bj9uLm1ldHJpY3M6bnVsbH0pLGFbZS5pZF09dH19Y29uc3QgbD1lTihlLmV4cGVyaW1lbnRJZHMpLGM9bmV3IE1hcChudWxsIT09KG49cy5nZXQobCkpJiZ2b2lkIDAhPT1uP246W10pLGQ9ZS5ydW5zRm9yQWxsRXhwZXJpbWVudHMubGVuZ3RoPD01MDA7Zm9yKGNvbnN0IHQgb2YgZS5ydW5zRm9yQWxsRXhwZXJpbWVudHMpYy5oYXModC5pZCl8fGMuc2V0KHQuaWQsZCk7cmV0dXJuIHMuc2V0KGwsYyksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtydW5JZHM6byxydW5JZFRvRXhwSWQ6YSxydW5NZXRhZGF0YTppLHJ1bnNMb2FkU3RhdGU6cixzZWxlY3Rpb25TdGF0ZTpzfSl9KSksYmsoSVIsKCh0LGUpPT57Y29uc3Qgbj1PYmplY3QuYXNzaWduKHt9LHQucnVuc0xvYWRTdGF0ZSk7Zm9yKGNvbnN0IHQgb2YgZS5yZXF1ZXN0ZWRFeHBlcmltZW50SWRzKW5bdF09blt0XT9PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sblt0XSkse3N0YXRlOnlFLkZBSUxFRH0pOntsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxzdGF0ZTp5RS5GQUlMRUR9O3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3J1bnNMb2FkU3RhdGU6bn0pfSkpLGJrKEhSLCgodCx7ZXhwZXJpbWVudElkczplLHJ1bklkOm59KT0+e3ZhciBvO2NvbnN0IGk9ZU4oZSksYT1uZXcgTWFwKHQuc2VsZWN0aW9uU3RhdGUpLHI9bmV3IE1hcChudWxsIT09KG89YS5nZXQoaSkpJiZ2b2lkIDAhPT1vP286W10pO3JldHVybiByLnNldChuLCFCb29sZWFuKHIuZ2V0KG4pKSksYS5zZXQoaSxyKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NlbGVjdGlvblN0YXRlOmF9KX0pKSxiayhGUiwoKHQse2V4cGVyaW1lbnRJZHM6ZSxydW5JZHM6bn0pPT57dmFyIG87Y29uc3QgaT1lTihlKSxhPW5ldyBNYXAodC5zZWxlY3Rpb25TdGF0ZSkscj1uZXcgTWFwKG51bGwhPT0obz1hLmdldChpKSkmJnZvaWQgMCE9PW8/bzpbXSkscz0hbi5ldmVyeSgodD0+Qm9vbGVhbihyLmdldCh0KSkpKTtmb3IoY29uc3QgdCBvZiBuKXIuc2V0KHQscyk7cmV0dXJuIGEuc2V0KGksciksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZWxlY3Rpb25TdGF0ZTphfSl9KSksYmsoelIsKCh0LHtydW5zRm9yQWxsRXhwZXJpbWVudHM6ZX0pPT57Y29uc3Qgbj1uZXcgTWFwKHQuZ3JvdXBLZXlUb0NvbG9ySWQpLG89bmV3IE1hcCh0LmRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeSk7bGV0IGk9dC5pbml0aWFsR3JvdXBCeTtudWxsIT09dC51c2VyU2V0R3JvdXBCeUtleSYmKGk9b04odC51c2VyU2V0R3JvdXBCeUtleSx0LmNvbG9yR3JvdXBSZWdleFN0cmluZykpO2NvbnN0IGE9bk4oaSxlLHQucnVuSWRUb0V4cElkKTtPYmplY3QuZW50cmllcyhhLm1hdGNoZXMpLmZvckVhY2goKChbdCxlXSk9Pnt2YXIgaTtjb25zdCBhPW51bGwhPT0oaT1uLmdldCh0KSkmJnZvaWQgMCE9PWk/aTpuLnNpemU7bi5zZXQodCxhKTtmb3IoY29uc3QgdCBvZiBlKW8uc2V0KHQuaWQsYSl9KSk7Zm9yKGNvbnN0IHQgb2YgYS5ub25NYXRjaGVzKW8uc2V0KHQuaWQsLTEpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2RlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeTpvLGdyb3VwS2V5VG9Db2xvcklkOm59KX0pKSxiayhHUiwoKHQse2V4cGVyaW1lbnRJZHM6ZSxncm91cEJ5Om59KT0+e2NvbnN0IG89bmV3IE1hcCxpPW5ldyBNYXAodC5kZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnkpLGE9bk4obixlLmZsYXRNYXAoKGU9PnQucnVuSWRzW2VdKSkubWFwKChlPT50LnJ1bk1ldGFkYXRhW2VdKSksdC5ydW5JZFRvRXhwSWQpO09iamVjdC5lbnRyaWVzKGEubWF0Y2hlcykuZm9yRWFjaCgoKFt0LGVdKT0+e3ZhciBuO2NvbnN0IGE9bnVsbCE9PShuPW8uZ2V0KHQpKSYmdm9pZCAwIT09bj9uOm8uc2l6ZTtvLnNldCh0LGEpO2Zvcihjb25zdCB0IG9mIGUpaS5zZXQodC5pZCxhKX0pKTtmb3IoY29uc3QgdCBvZiBhLm5vbk1hdGNoZXMpaS5zZXQodC5pZCwtMSk7Y29uc3Qgcj1uLmtleT09PXROLlJFR0VYP24ucmVnZXhTdHJpbmc6dC5jb2xvckdyb3VwUmVnZXhTdHJpbmc7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29sb3JHcm91cFJlZ2V4U3RyaW5nOnIsdXNlclNldEdyb3VwQnlLZXk6bi5rZXksZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5OmksZ3JvdXBLZXlUb0NvbG9ySWQ6byxydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeTpuZXcgTWFwfSl9KSksYmsoalIsKCh0LHtydW5JZDplLG5ld0NvbG9yOm59KT0+e2NvbnN0IG89bmV3IE1hcCh0LnJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5KTtyZXR1cm4gby5zZXQoZSxuKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3J1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5Om99KX0pKSxiayhWUiwoKHQsZSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7cmVnZXhGaWx0ZXI6ZS5yZWdleFN0cmluZ30pKSkpLGpOKSxHTj17a2V5Om51bGwsZGlyZWN0aW9uOkZOLlVOU0VUfSx7aW5pdGlhbFN0YXRlOldOLHJlZHVjZXJzOllOfT1ITih7cGFnaW5hdGlvbk9wdGlvbjp7cGFnZUluZGV4OjAscGFnZVNpemU6MTB9LHNvcnQ6R059LHt9KSxxTj1CTih5ayhXTixiayhMUiwoKHQse3BhZ2VTaXplOmUscGFnZUluZGV4Om59KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtwYWdpbmF0aW9uT3B0aW9uOntwYWdlU2l6ZTplLHBhZ2VJbmRleDpufX0pKSksYmsoVlIsKCh0LGUpPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BhZ2luYXRpb25PcHRpb246T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQucGFnaW5hdGlvbk9wdGlvbikse3BhZ2VJbmRleDowfSl9KSkpLGJrKEJSLCgodCxlKT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzb3J0OntrZXk6ZS5rZXksZGlyZWN0aW9uOmUuZGlyZWN0aW9ufX0pKSkpLFlOKTtmdW5jdGlvbiBaTih0LGUpe3JldHVybiB4dyh7ZGF0YTpVTix1aTpxTn0pKHQsZSl9ZnVuY3Rpb24gWE4oKXtyZXR1cm5be2FjdGlvbkNyZWF0b3I6SVIsYWxlcnRGcm9tQWN0aW9uOigpPT4oe2xvY2FsaXplZE1lc3NhZ2U6IkZhaWxlZCB0byBmZXRjaCBydW5zIn0pfV19Y2xhc3MgS057fXZhciBKTjtLTi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S04pfSxLTi7JtW1vZD1hbyh7dHlwZTpLTn0pLEtOLsm1aW5qPXZuKHtpbXBvcnRzOltbZGsuZm9yRmVhdHVyZShRVCxaTiksV2suZm9yRmVhdHVyZShbSU5dKSxsQSxBUi5yZWdpc3RlckFsZXJ0QWN0aW9ucyhYTiksYUFdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoS04sW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltkay5mb3JGZWF0dXJlKFFULFpOKSxXay5mb3JGZWF0dXJlKFtJTl0pLGxBLEFSLnJlZ2lzdGVyQWxlcnRBY3Rpb25zKFhOKSxhQV19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhLTix7aW1wb3J0czpbY2ssR2ssbEEsQVIsYUFdfSksKGZ1bmN0aW9uKHQpe3QuUlVOU19DSEFOR0VEPSJleHBlcmltZW50YWwuUnVuc0NoYW5nZWQiLHQuR0VUX1JVTlM9ImV4cGVyaW1lbnRhbC5HZXRSdW5zIix0LkdFVF9VUkxfREFUQT0iZXhwZXJpbWVudGFsLkdldFVSTFBsdWdpbkRhdGEiLHQuREFUQV9SRUxPQURFRD0iZXhwZXJpbWVudGFsLkRhdGFSZWxvYWRlZCJ9KShKTnx8KEpOPXt9KSk7Y2xhc3MgUU57Y29uc3RydWN0b3IodCl7dGhpcy5wb3J0PXQsdGhpcy5pZD0wLHRoaXMucmVzcG9uc2VXYWl0cz1uZXcgTWFwLHRoaXMubGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh0PT50aGlzLm9uTWVzc2FnZSh0KSkpfWxpc3Rlbih0LGUpe3RoaXMubGlzdGVuZXJzLnNldCh0LGUpfXVubGlzdGVuKHQpe3RoaXMubGlzdGVuZXJzLmRlbGV0ZSh0KX1vbk1lc3NhZ2UodCl7cmV0dXJuIGdBKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT1KU09OLnBhcnNlKHQuZGF0YSksbj1lLnR5cGUsbz1lLmlkLGk9ZS5wYXlsb2FkLGE9ZS5lcnJvcjtpZihlLmlzUmVwbHkpe2lmKCF0aGlzLnJlc3BvbnNlV2FpdHMuaGFzKG8pKXJldHVybjtjb25zdHtyZXNvbHZlOnQscmVqZWN0OmV9PXRoaXMucmVzcG9uc2VXYWl0cy5nZXQobyk7cmV0dXJuIHRoaXMucmVzcG9uc2VXYWl0cy5kZWxldGUobyksdm9pZChhP2UobmV3IEVycm9yKGEpKTp0KGkpKX1sZXQgcj1udWxsLHM9bnVsbDtpZih0aGlzLmxpc3RlbmVycy5oYXMobikpe2NvbnN0IHQ9dGhpcy5saXN0ZW5lcnMuZ2V0KG4pO3RyeXtyPXlpZWxkIHQoaSl9Y2F0Y2godCl7cz10fX10aGlzLnBvc3RNZXNzYWdlKHt0eXBlOm4saWQ6byxwYXlsb2FkOnIsZXJyb3I6cyxpc1JlcGx5OiEwfSl9KSl9cG9zdE1lc3NhZ2UodCl7dGhpcy5wb3J0LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHQpKX1zZW5kTWVzc2FnZSh0LGUpe2NvbnN0IG49dGhpcy5pZCsrO3JldHVybiB0aGlzLnBvc3RNZXNzYWdlKHt0eXBlOnQsaWQ6bixwYXlsb2FkOmUsZXJyb3I6bnVsbCxpc1JlcGx5OiExfSksbmV3IFByb21pc2UoKCh0LGUpPT57dGhpcy5yZXNwb25zZVdhaXRzLnNldChuLHtyZXNvbHZlOnQscmVqZWN0OmV9KX0pKX19Y29uc3QgJE49bmV3IFdlYWtNYXAsdHo9bmV3IFNldCxlej1uZXcgTWFwLG56PW5ldyBNYXA7ZnVuY3Rpb24gb3oodCxlKXtyZXR1cm4gbj0+e2NvbnN0IG89bnouZ2V0KGUpLGk9JE4uZ2V0KG8pfHxudWxsO3JldHVybiB0KGksbil9fXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwodD0+e2lmKCJleHBlcmltZW50YWwuYm9vdHN0cmFwIiE9PXQuZGF0YSlyZXR1cm47Y29uc3QgZT10LnBvcnRzWzBdO2lmKCFlKXJldHVybjtjb25zdCBuPXQuc291cmNlP3Quc291cmNlLmZyYW1lRWxlbWVudDpudWxsO24mJihmdW5jdGlvbiBvKHQsZSl7Y29uc3Qgbj1uZXcgUU4odCk7dHouYWRkKG4pLG56LnNldChuLGUpLHQuc3RhcnQoKTtmb3IoY29uc3RbdCxlXW9mIGV6KXtjb25zdCBvPW96KGUsbik7bi5saXN0ZW4odCxvKX19KShlLG4pfSkpO2NsYXNzIGl6e2Jyb2FkY2FzdCh0LGUpe3JldHVybihmdW5jdGlvbiBuKHQsZSl7Zm9yKGNvbnN0IHQgb2YgdHopbnouZ2V0KHQpLmlzQ29ubmVjdGVkfHwodHouZGVsZXRlKHQpLG56LmRlbGV0ZSh0KSk7Y29uc3Qgbj1bLi4udHpdLm1hcCgobj0+bi5zZW5kTWVzc2FnZSh0LGUpKSk7cmV0dXJuIFByb21pc2UuYWxsKG4pfSkodCxlKX1saXN0ZW4odCxlKXshKGZ1bmN0aW9uIG4odCxlKXtlei5zZXQodCxlKTtmb3IoY29uc3QgbiBvZiB0eil7Y29uc3Qgbz1veihlLG4pO24ubGlzdGVuKHQsbyl9fSkodCxlKX11bmxpc3Rlbih0KXshKGZ1bmN0aW9uIGUodCl7ZXouZGVsZXRlKHQpO2Zvcihjb25zdCBlIG9mIHR6KWUudW5saXN0ZW4odCl9KSh0KX19aXouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGl6KX0saXouybVwcm92PU1uKHt0b2tlbjppeixmYWN0b3J5Oml6Lsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChpeixbe3R5cGU6aW19XSxudWxsLG51bGwpO2NsYXNzIGF6e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5pcGM9dCx0aGlzLnN0b3JlPWV9aW5pdCgpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtc3RvcmFnZSIpO3RoaXMuaXBjLmxpc3RlbihKTi5HRVRfVVJMX0RBVEEsKGU9PntpZighZSlyZXR1cm47Y29uc3Qgbj1gcC4ke2UucGx1Z2luTmFtZX0uYCxvPXt9LGk9dC50Zl9zdG9yYWdlLmdldFVybEhhc2hEaWN0KCk7Zm9yKGxldCB0IGluIGkpdC5zdGFydHNXaXRoKG4pJiYob1t0LnN1YnN0cmluZyhuLmxlbmd0aCldPWlbdF0pO3JldHVybiBvfSkpLHRoaXMuc3RvcmUuc2VsZWN0KENSKS5waXBlKGNlKCh0PT5udWxsIT09dCkpLE1lKCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmlwYy5icm9hZGNhc3QoSk4uREFUQV9SRUxPQURFRCx2b2lkIDApfSkpfX1hei7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8YXopKHZyKGl6KSx2cihJdykpfSxhei7JtXByb3Y9TW4oe3Rva2VuOmF6LGZhY3Rvcnk6YXouybVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGF6LFt7dHlwZTppbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTppen0se3R5cGU6SXd9XX0pLG51bGwpO2NsYXNzIHJ6e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5pcGM9dCx0aGlzLnN0b3JlPWV9aW5pdCgpe2NvbnN0IHQ9dGhpcy5zdG9yZS5zZWxlY3QoVFMpLnBpcGUoWnQoKHQ9PnQ/V3QodC5tYXAoKHQ9PnRoaXMuc3RvcmUuc2VsZWN0KGxOLHtleHBlcmltZW50SWQ6dH0pKSkpLnBpcGUoSXQoKHQ9PnQuZmxhdCgpKSksTWUoKCh0LGUpPT50Lmxlbmd0aD09PWUubGVuZ3RoJiZ0LmV2ZXJ5KCgodCxuKT0+ZVtuXS5pZD09PXQuaWQpKSkpLEl0KCh0PT50Lm1hcCgoKHtuYW1lOnR9KT0+dCkpKSkpOkV0KFtdKSkpKTt0LnN1YnNjcmliZSgodD0+e3RoaXMuaXBjLmJyb2FkY2FzdChKTi5SVU5TX0NIQU5HRUQsdCl9KSksdGhpcy5pcGMubGlzdGVuKEpOLkdFVF9SVU5TLCgoKT0+dC5waXBlKGJlKDEpKS50b1Byb21pc2UoKSkpfX1yei7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cnopKHZyKGl6KSx2cihJdykpfSxyei7JtXByb3Y9TW4oe3Rva2VuOnJ6LGZhY3Rvcnk6cnouybVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHJ6LFt7dHlwZTppbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTppen0se3R5cGU6SXd9XX0pLG51bGwpO2NsYXNzIHN6e2NvbnN0cnVjdG9yKHQsZSl7ZS5pbml0KCksdC5pbml0KCl9cmVnaXN0ZXJQbHVnaW5JZnJhbWUodCxlKXshKGZ1bmN0aW9uIG4odCxlKXskTi5zZXQodCx7cGx1Z2luTmFtZTplfSl9KSh0LGUpfX1zei7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8c3opKHZyKHJ6KSx2cihheikpfSxzei7JtW1vZD1hbyh7dHlwZTpzen0pLHN6Lsm1aW5qPXZuKHtwcm92aWRlcnM6W2l6LGF6LHJ6XSxpbXBvcnRzOltbQlMsRVIsS05dXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoc3osW3t0eXBlOkF5LGFyZ3M6W3twcm92aWRlcnM6W2l6LGF6LHJ6XSxpbXBvcnRzOltCUyxFUixLTl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpyen0se3R5cGU6YXp9XX0pLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oc3ose2ltcG9ydHM6W0JTLEVSLEtOXX0pO2NvbnN0IGx6PUpQKCJbQWxlcnRdIEFsZXJ0IFJlcG9ydGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSk7Y2xhc3MgY3p7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy5hbGVydEFjdGlvbk1vZHVsZT1uLHRoaXMucmVwb3J0UmVnaXN0ZXJlZEFjdGlvbkFsZXJ0cyQ9TWsoKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoRmUoKHQ9Pntjb25zdCBlPXRoaXMuYWxlcnRBY3Rpb25Nb2R1bGUuZ2V0QWxlcnRGcm9tQWN0aW9uKHQpO2UmJnRoaXMuc3RvcmUuZGlzcGF0Y2gobHooZSkpfSkpKSkse2Rpc3BhdGNoOiExfSl9fWN6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxjeikodnIoU2spLHZyKEl3KSx2cihBUikpfSxjei7JtXByb3Y9TW4oe3Rva2VuOmN6LGZhY3Rvcnk6Y3ouybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGN6LFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpTa30se3R5cGU6SXd9LHt0eXBlOkFSfV19KSxudWxsKTtjb25zdCBkej15ayh7bGF0ZXN0QWxlcnQ6bnVsbH0sYmsobHosKCh0LHtsb2NhbGl6ZWRNZXNzYWdlOmUsZm9sbG93dXBBY3Rpb246bn0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2xhdGVzdEFsZXJ0Ontsb2NhbGl6ZWRNZXNzYWdlOmUsZm9sbG93dXBBY3Rpb246bixjcmVhdGVkOkRhdGUubm93KCl9fSkpKSk7ZnVuY3Rpb24gcHoodCxlKXtyZXR1cm4gZHoodCxlKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgbXo9MTMsdXo9MjcsZno9MzIsZ3o9MzgsaHo9NDA7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBieih0LC4uLmUpe3JldHVybiBlLmxlbmd0aD9lLnNvbWUoKGU9PnRbZV0pKTp0LmFsdEtleXx8dC5zaGlmdEtleXx8dC5jdHJsS2V5fHx0Lm1ldGFLZXl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHl6KHQpe3JldHVybiBudWxsIT10JiYiZmFsc2UiIT1gJHt0fWB9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIF96KHQsZT0wKXtyZXR1cm4gQ3oodCk/TnVtYmVyKHQpOmV9ZnVuY3Rpb24gQ3oodCl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQodCkpJiYhaXNOYU4oTnVtYmVyKHQpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gTXoodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDpbdF19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIHZ6KHQpe3JldHVybiBudWxsPT10PyIiOiJzdHJpbmciPT10eXBlb2YgdD90OmAke3R9cHhgfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiB4eih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGhnP3QubmF0aXZlRWxlbWVudDp0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9sZXQgT3osUHo7dHJ5e096PSJ1bmRlZmluZWQiIT10eXBlb2YgSW50bCYmSW50bC52OEJyZWFrSXRlcmF0b3J9Y2F0Y2goakN0KXtPej0hMX1jbGFzcyB3entjb25zdHJ1Y3Rvcih0KXt0aGlzLl9wbGF0Zm9ybUlkPXQsdGhpcy5pc0Jyb3dzZXI9dGhpcy5fcGxhdGZvcm1JZD8oZnVuY3Rpb24gZSh0KXtyZXR1cm4iYnJvd3NlciI9PT10fSkodGhpcy5fcGxhdGZvcm1JZCk6Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmISFkb2N1bWVudCx0aGlzLkVER0U9dGhpcy5pc0Jyb3dzZXImJi8oZWRnZSkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuVFJJREVOVD10aGlzLmlzQnJvd3NlciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkJMSU5LPXRoaXMuaXNCcm93c2VyJiYhKCF3aW5kb3cuY2hyb21lJiYhT3opJiYidW5kZWZpbmVkIiE9dHlwZW9mIENTUyYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLldFQktJVD10aGlzLmlzQnJvd3NlciYmL0FwcGxlV2ViS2l0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuQkxJTksmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5JT1M9dGhpcy5pc0Jyb3dzZXImJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhKCJNU1N0cmVhbSJpbiB3aW5kb3cpLHRoaXMuRklSRUZPWD10aGlzLmlzQnJvd3NlciYmLyhmaXJlZm94fG1pbmVmaWVsZCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQU5EUk9JRD10aGlzLmlzQnJvd3NlciYmL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5UUklERU5ULHRoaXMuU0FGQVJJPXRoaXMuaXNCcm93c2VyJiYvc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmdGhpcy5XRUJLSVR9fXd6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx3eikodnIoankpKX0sd3ouybVwcm92PU1uKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IHd6KHZyKGp5KSl9LHRva2VuOnd6LHByb3ZpZGVkSW46InJvb3QifSksd3ouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpPYmplY3QsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbanldfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHd6LFt7dHlwZTppbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpPYmplY3QsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbanldfV19XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3Mga3p7fWt6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxreil9LGt6Lsm1bW9kPWFvKHt0eXBlOmt6fSksa3ouybVpbmo9dm4oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoa3osW3t0eXBlOkF5LGFyZ3M6W3t9XX1dLG51bGwsbnVsbCk7Y29uc3QgU3o9WyJjb2xvciIsImJ1dHRvbiIsImNoZWNrYm94IiwiZGF0ZSIsImRhdGV0aW1lLWxvY2FsIiwiZW1haWwiLCJmaWxlIiwiaGlkZGVuIiwiaW1hZ2UiLCJtb250aCIsIm51bWJlciIsInBhc3N3b3JkIiwicmFkaW8iLCJyYW5nZSIsInJlc2V0Iiwic2VhcmNoIiwic3VibWl0IiwidGVsIiwidGV4dCIsInRpbWUiLCJ1cmwiLCJ3ZWVrIl07ZnVuY3Rpb24gRHooKXtpZihQeilyZXR1cm4gUHo7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50KXJldHVybiBQej1uZXcgU2V0KFN6KSxQejtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiBQej1uZXcgU2V0KFN6LmZpbHRlcigoZT0+KHQuc2V0QXR0cmlidXRlKCJ0eXBlIixlKSx0LnR5cGU9PT1lKSkpKSxQen0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovbGV0IEV6LFJ6LEF6LFR6O2Z1bmN0aW9uIE56KHQpe3JldHVybihmdW5jdGlvbiBlKCl7aWYobnVsbD09RXomJiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93KXRyeXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6KCk9PkV6PSEwfSkpfWZpbmFsbHl7RXo9RXp8fCExfXJldHVybiBFen0pKCk/dDohIXQuY2FwdHVyZX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24genooKXtpZihudWxsPT1Beil7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50fHwiZnVuY3Rpb24iIT10eXBlb2YgRWxlbWVudHx8IUVsZW1lbnQpcmV0dXJuIEF6PSExLEF6O2lmKCJzY3JvbGxCZWhhdmlvciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUpQXo9ITA7ZWxzZXtjb25zdCB0PUVsZW1lbnQucHJvdG90eXBlLnNjcm9sbFRvO0F6PSEhdCYmIS9ce1xzKlxbbmF0aXZlIGNvZGVcXVxzKlx9Ly50ZXN0KHQudG9TdHJpbmcoKSl9fXJldHVybiBBen1mdW5jdGlvbiBJeigpe2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudClyZXR1cm4gMDtpZihudWxsPT1Seil7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxlPXQuc3R5bGU7dC5kaXI9InJ0bCIsZS53aWR0aD0iMXB4IixlLm92ZXJmbG93PSJhdXRvIixlLnZpc2liaWxpdHk9ImhpZGRlbiIsZS5wb2ludGVyRXZlbnRzPSJub25lIixlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7Y29uc3Qgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxvPW4uc3R5bGU7by53aWR0aD0iMnB4IixvLmhlaWdodD0iMXB4Iix0LmFwcGVuZENoaWxkKG4pLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksUno9MCwwPT09dC5zY3JvbGxMZWZ0JiYodC5zY3JvbGxMZWZ0PTEsUno9MD09PXQuc2Nyb2xsTGVmdD8xOjIpLHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX1yZXR1cm4gUnp9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIEh6KHQpe2lmKChmdW5jdGlvbiBlKCl7aWYobnVsbD09VHope2NvbnN0IHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5oZWFkOm51bGw7VHo9ISghdHx8IXQuY3JlYXRlU2hhZG93Um9vdCYmIXQuYXR0YWNoU2hhZG93KX1yZXR1cm4gVHp9KSgpKXtjb25zdCBlPXQuZ2V0Um9vdE5vZGU/dC5nZXRSb290Tm9kZSgpOm51bGw7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTaGFkb3dSb290JiZTaGFkb3dSb290JiZlIGluc3RhbmNlb2YgU2hhZG93Um9vdClyZXR1cm4gZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBGeigpe2xldCB0PSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50P2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ6bnVsbDtmb3IoO3QmJnQuc2hhZG93Um9vdDspe2NvbnN0IGU9dC5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ7aWYoZT09PXQpYnJlYWs7dD1lfXJldHVybiB0fWZ1bmN0aW9uIEx6KHQpe3JldHVybiB0LmNvbXBvc2VkUGF0aD90LmNvbXBvc2VkUGF0aCgpWzBdOnQudGFyZ2V0fWNsYXNzIEJ6e2NyZWF0ZSh0KXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI/bnVsbDpuZXcgTXV0YXRpb25PYnNlcnZlcih0KX19QnouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJ6KX0sQnouybVwcm92PU1uKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IEJ6fSx0b2tlbjpCeixwcm92aWRlZEluOiJyb290In0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoQnosW3t0eXBlOmltLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sbnVsbCxudWxsKTtjbGFzcyBWentjb25zdHJ1Y3Rvcih0KXt0aGlzLl9tdXRhdGlvbk9ic2VydmVyRmFjdG9yeT10LHRoaXMuX29ic2VydmVkRWxlbWVudHM9bmV3IE1hcH1uZ09uRGVzdHJveSgpe3RoaXMuX29ic2VydmVkRWxlbWVudHMuZm9yRWFjaCgoKHQsZSk9PnRoaXMuX2NsZWFudXBPYnNlcnZlcihlKSkpfW9ic2VydmUodCl7Y29uc3QgZT14eih0KTtyZXR1cm4gbmV3IEQoKHQ9Pntjb25zdCBuPXRoaXMuX29ic2VydmVFbGVtZW50KGUpLnN1YnNjcmliZSh0KTtyZXR1cm4oKT0+e24udW5zdWJzY3JpYmUoKSx0aGlzLl91bm9ic2VydmVFbGVtZW50KGUpfX0pKX1fb2JzZXJ2ZUVsZW1lbnQodCl7aWYodGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXModCkpdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQodCkuY291bnQrKztlbHNle2NvbnN0IGU9bmV3IEksbj10aGlzLl9tdXRhdGlvbk9ic2VydmVyRmFjdG9yeS5jcmVhdGUoKHQ9PmUubmV4dCh0KSkpO24mJm4ub2JzZXJ2ZSh0LHtjaGFyYWN0ZXJEYXRhOiEwLGNoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5zZXQodCx7b2JzZXJ2ZXI6bixzdHJlYW06ZSxjb3VudDoxfSl9cmV0dXJuIHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KHQpLnN0cmVhbX1fdW5vYnNlcnZlRWxlbWVudCh0KXt0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmhhcyh0KSYmKHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KHQpLmNvdW50LS0sdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQodCkuY291bnR8fHRoaXMuX2NsZWFudXBPYnNlcnZlcih0KSl9X2NsZWFudXBPYnNlcnZlcih0KXtpZih0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmhhcyh0KSl7Y29uc3R7b2JzZXJ2ZXI6ZSxzdHJlYW06bn09dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQodCk7ZSYmZS5kaXNjb25uZWN0KCksbi5jb21wbGV0ZSgpLHRoaXMuX29ic2VydmVkRWxlbWVudHMuZGVsZXRlKHQpfX19VnouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFZ6KSh2cihCeikpfSxWei7JtXByb3Y9TW4oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgVnoodnIoQnopKX0sdG9rZW46VnoscHJvdmlkZWRJbjoicm9vdCJ9KSxWei5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkJ6fV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChWeixbe3R5cGU6aW0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Qnp9XX0pLG51bGwpO2NsYXNzIGp6e2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9jb250ZW50T2JzZXJ2ZXI9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fbmdab25lPW4sdGhpcy5ldmVudD1uZXcgTGgsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbj1udWxsfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5fZGlzYWJsZWQ9eXoodCksdGhpcy5fZGlzYWJsZWQ/dGhpcy5fdW5zdWJzY3JpYmUoKTp0aGlzLl9zdWJzY3JpYmUoKX1nZXQgZGVib3VuY2UoKXtyZXR1cm4gdGhpcy5fZGVib3VuY2V9c2V0IGRlYm91bmNlKHQpe3RoaXMuX2RlYm91bmNlPV96KHQpLHRoaXMuX3N1YnNjcmliZSgpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb258fHRoaXMuZGlzYWJsZWR8fHRoaXMuX3N1YnNjcmliZSgpfW5nT25EZXN0cm95KCl7dGhpcy5fdW5zdWJzY3JpYmUoKX1fc3Vic2NyaWJlKCl7dGhpcy5fdW5zdWJzY3JpYmUoKTtjb25zdCB0PXRoaXMuX2NvbnRlbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYpO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pnt0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uPSh0aGlzLmRlYm91bmNlP3QucGlwZShnZSh0aGlzLmRlYm91bmNlKSk6dCkuc3Vic2NyaWJlKHRoaXMuZXZlbnQpfSkpfV91bnN1YnNjcmliZSgpe3ZhciB0O251bGw9PT0odD10aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uKXx8dm9pZCAwPT09dHx8dC51bnN1YnNjcmliZSgpfX1qei7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8anopKFNtKFZ6KSxTbShoZyksU20oYV8pKX0sanouybVkaXI9bG8oe3R5cGU6anosc2VsZWN0b3JzOltbIiIsImNka09ic2VydmVDb250ZW50IiwiIl1dLGlucHV0czp7ZGlzYWJsZWQ6WyJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwiZGlzYWJsZWQiXSxkZWJvdW5jZToiZGVib3VuY2UifSxvdXRwdXRzOntldmVudDoiY2RrT2JzZXJ2ZUNvbnRlbnQifSxleHBvcnRBczpbImNka09ic2VydmVDb250ZW50Il19KSxqei5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlZ6fSx7dHlwZTpoZ30se3R5cGU6YV99XSxqei5wcm9wRGVjb3JhdG9ycz17ZXZlbnQ6W3t0eXBlOk95LGFyZ3M6WyJjZGtPYnNlcnZlQ29udGVudCJdfV0sZGlzYWJsZWQ6W3t0eXBlOnh5LGFyZ3M6WyJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIl19XSxkZWJvdW5jZTpbe3R5cGU6eHl9XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChqeixbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbY2RrT2JzZXJ2ZUNvbnRlbnRdIixleHBvcnRBczoiY2RrT2JzZXJ2ZUNvbnRlbnQifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Vnp9LHt0eXBlOmhnfSx7dHlwZTphX31dfSkse2V2ZW50Olt7dHlwZTpPeSxhcmdzOlsiY2RrT2JzZXJ2ZUNvbnRlbnQiXX1dLGRpc2FibGVkOlt7dHlwZTp4eSxhcmdzOlsiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCJdfV0sZGVib3VuY2U6W3t0eXBlOnh5fV19KTtjbGFzcyBVent9ZnVuY3Rpb24gR3oodCxlKXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoZSl8fCIiKS5tYXRjaCgvXFMrL2cpfHxbXX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovVXouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFV6KX0sVXouybVtb2Q9YW8oe3R5cGU6VXp9KSxVei7JtWluaj12bih7cHJvdmlkZXJzOltCel19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFV6LFt7dHlwZTpBeSxhcmdzOlt7ZXhwb3J0czpbanpdLGRlY2xhcmF0aW9uczpbanpdLHByb3ZpZGVyczpbQnpdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oVXose2RlY2xhcmF0aW9uczpbanpdLGV4cG9ydHM6W2p6XX0pO2NvbnN0IFd6PSJjZGstZGVzY3JpYmVkYnktbWVzc2FnZS1jb250YWluZXIiLFl6PSJjZGstZGVzY3JpYmVkYnktaG9zdCI7bGV0IHF6PTA7Y29uc3QgWno9bmV3IE1hcDtsZXQgWHo9bnVsbDtjbGFzcyBLentjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kb2N1bWVudD10fWRlc2NyaWJlKHQsZSxuKXtpZighdGhpcy5fY2FuQmVEZXNjcmliZWQodCxlKSlyZXR1cm47Y29uc3Qgbz1KeihlLG4pOyJzdHJpbmciIT10eXBlb2YgZT8oUXooZSksWnouc2V0KG8se21lc3NhZ2VFbGVtZW50OmUscmVmZXJlbmNlQ291bnQ6MH0pKTpaei5oYXMobyl8fHRoaXMuX2NyZWF0ZU1lc3NhZ2VFbGVtZW50KGUsbiksdGhpcy5faXNFbGVtZW50RGVzY3JpYmVkQnlNZXNzYWdlKHQsbyl8fHRoaXMuX2FkZE1lc3NhZ2VSZWZlcmVuY2UodCxvKX1yZW1vdmVEZXNjcmlwdGlvbih0LGUsbil7aWYoIWV8fCF0aGlzLl9pc0VsZW1lbnROb2RlKHQpKXJldHVybjtjb25zdCBvPUp6KGUsbik7aWYodGhpcy5faXNFbGVtZW50RGVzY3JpYmVkQnlNZXNzYWdlKHQsbykmJnRoaXMuX3JlbW92ZU1lc3NhZ2VSZWZlcmVuY2UodCxvKSwic3RyaW5nIj09dHlwZW9mIGUpe2NvbnN0IHQ9WnouZ2V0KG8pO3QmJjA9PT10LnJlZmVyZW5jZUNvdW50JiZ0aGlzLl9kZWxldGVNZXNzYWdlRWxlbWVudChvKX1YeiYmMD09PVh6LmNoaWxkTm9kZXMubGVuZ3RoJiZ0aGlzLl9kZWxldGVNZXNzYWdlc0NvbnRhaW5lcigpfW5nT25EZXN0cm95KCl7Y29uc3QgdD10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbY2RrLWRlc2NyaWJlZGJ5LWhvc3RdIik7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy5fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHModFtlXSksdFtlXS5yZW1vdmVBdHRyaWJ1dGUoWXopO1h6JiZ0aGlzLl9kZWxldGVNZXNzYWdlc0NvbnRhaW5lcigpLFp6LmNsZWFyKCl9X2NyZWF0ZU1lc3NhZ2VFbGVtZW50KHQsZSl7Y29uc3Qgbj10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtReihuKSxuLnRleHRDb250ZW50PXQsZSYmbi5zZXRBdHRyaWJ1dGUoInJvbGUiLGUpLHRoaXMuX2NyZWF0ZU1lc3NhZ2VzQ29udGFpbmVyKCksWHouYXBwZW5kQ2hpbGQobiksWnouc2V0KEp6KHQsZSkse21lc3NhZ2VFbGVtZW50Om4scmVmZXJlbmNlQ291bnQ6MH0pfV9kZWxldGVNZXNzYWdlRWxlbWVudCh0KXtjb25zdCBlPVp6LmdldCh0KSxuPWUmJmUubWVzc2FnZUVsZW1lbnQ7WHomJm4mJlh6LnJlbW92ZUNoaWxkKG4pLFp6LmRlbGV0ZSh0KX1fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKXtpZighWHope2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoV3opO3QmJnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLFh6PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFh6LmlkPVd6LFh6LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsWHouY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoWHopfX1fZGVsZXRlTWVzc2FnZXNDb250YWluZXIoKXtYeiYmWHoucGFyZW50Tm9kZSYmKFh6LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoWHopLFh6PW51bGwpfV9yZW1vdmVDZGtEZXNjcmliZWRCeVJlZmVyZW5jZUlkcyh0KXtjb25zdCBlPUd6KHQsImFyaWEtZGVzY3JpYmVkYnkiKS5maWx0ZXIoKHQ9PjAhPXQuaW5kZXhPZigiY2RrLWRlc2NyaWJlZGJ5LW1lc3NhZ2UiKSkpO3Quc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixlLmpvaW4oIiAiKSl9X2FkZE1lc3NhZ2VSZWZlcmVuY2UodCxlKXtjb25zdCBuPVp6LmdldChlKTshKGZ1bmN0aW9uIG8odCxlLG4pe2NvbnN0IG89R3oodCxlKTtvLnNvbWUoKHQ9PnQudHJpbSgpPT1uLnRyaW0oKSkpfHwoby5wdXNoKG4udHJpbSgpKSx0LnNldEF0dHJpYnV0ZShlLG8uam9pbigiICIpKSl9KSh0LCJhcmlhLWRlc2NyaWJlZGJ5IixuLm1lc3NhZ2VFbGVtZW50LmlkKSx0LnNldEF0dHJpYnV0ZShZeiwiIiksbi5yZWZlcmVuY2VDb3VudCsrfV9yZW1vdmVNZXNzYWdlUmVmZXJlbmNlKHQsZSl7Y29uc3Qgbj1aei5nZXQoZSk7bi5yZWZlcmVuY2VDb3VudC0tLChmdW5jdGlvbiBvKHQsZSxuKXtjb25zdCBvPUd6KHQsZSkuZmlsdGVyKCh0PT50IT1uLnRyaW0oKSkpO28ubGVuZ3RoP3Quc2V0QXR0cmlidXRlKGUsby5qb2luKCIgIikpOnQucmVtb3ZlQXR0cmlidXRlKGUpfSkodCwiYXJpYS1kZXNjcmliZWRieSIsbi5tZXNzYWdlRWxlbWVudC5pZCksdC5yZW1vdmVBdHRyaWJ1dGUoWXopfV9pc0VsZW1lbnREZXNjcmliZWRCeU1lc3NhZ2UodCxlKXtjb25zdCBuPUd6KHQsImFyaWEtZGVzY3JpYmVkYnkiKSxvPVp6LmdldChlKSxpPW8mJm8ubWVzc2FnZUVsZW1lbnQuaWQ7cmV0dXJuISFpJiYtMSE9bi5pbmRleE9mKGkpfV9jYW5CZURlc2NyaWJlZCh0LGUpe2lmKCF0aGlzLl9pc0VsZW1lbnROb2RlKHQpKXJldHVybiExO2lmKGUmJiJvYmplY3QiPT10eXBlb2YgZSlyZXR1cm4hMDtjb25zdCBuPW51bGw9PWU/IiI6YCR7ZX1gLnRyaW0oKSxvPXQuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIik7cmV0dXJuISghbnx8byYmby50cmltKCk9PT1uKX1faXNFbGVtZW50Tm9kZSh0KXtyZXR1cm4gdC5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERX19ZnVuY3Rpb24gSnoodCxlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/YCR7ZXx8IiJ9LyR7dH1gOnR9ZnVuY3Rpb24gUXoodCl7dC5pZHx8KHQuaWQ9ImNkay1kZXNjcmliZWRieS1tZXNzYWdlLSIrcXorKyl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL0t6Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxLeikodnIoWl8pKX0sS3ouybVwcm92PU1uKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IEt6KHZyKFpfKSl9LHRva2VuOkt6LHByb3ZpZGVkSW46InJvb3QifSksS3ouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEt6LFt7dHlwZTppbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19XX0pLG51bGwpO2NsYXNzICR6e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2l0ZW1zPXQsdGhpcy5fYWN0aXZlSXRlbUluZGV4PS0xLHRoaXMuX2FjdGl2ZUl0ZW09bnVsbCx0aGlzLl93cmFwPSExLHRoaXMuX2xldHRlcktleVN0cmVhbT1uZXcgSSx0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb249bS5FTVBUWSx0aGlzLl92ZXJ0aWNhbD0hMCx0aGlzLl9hbGxvd2VkTW9kaWZpZXJLZXlzPVtdLHRoaXMuX2hvbWVBbmRFbmQ9ITEsdGhpcy5fc2tpcFByZWRpY2F0ZUZuPXQ9PnQuZGlzYWJsZWQsdGhpcy5fcHJlc3NlZExldHRlcnM9W10sdGhpcy50YWJPdXQ9bmV3IEksdGhpcy5jaGFuZ2U9bmV3IEksdCBpbnN0YW5jZW9mIFZoJiZ0LmNoYW5nZXMuc3Vic2NyaWJlKCh0PT57aWYodGhpcy5fYWN0aXZlSXRlbSl7Y29uc3QgZT10LnRvQXJyYXkoKS5pbmRleE9mKHRoaXMuX2FjdGl2ZUl0ZW0pO2U+LTEmJmUhPT10aGlzLl9hY3RpdmVJdGVtSW5kZXgmJih0aGlzLl9hY3RpdmVJdGVtSW5kZXg9ZSl9fSkpfXNraXBQcmVkaWNhdGUodCl7cmV0dXJuIHRoaXMuX3NraXBQcmVkaWNhdGVGbj10LHRoaXN9d2l0aFdyYXAodD0hMCl7cmV0dXJuIHRoaXMuX3dyYXA9dCx0aGlzfXdpdGhWZXJ0aWNhbE9yaWVudGF0aW9uKHQ9ITApe3JldHVybiB0aGlzLl92ZXJ0aWNhbD10LHRoaXN9d2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0KXtyZXR1cm4gdGhpcy5faG9yaXpvbnRhbD10LHRoaXN9d2l0aEFsbG93ZWRNb2RpZmllcktleXModCl7cmV0dXJuIHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXM9dCx0aGlzfXdpdGhUeXBlQWhlYWQodD0yMDApe2lmKCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmdGhpcy5faXRlbXMubGVuZ3RoJiZ0aGlzLl9pdGVtcy5zb21lKCh0PT4iZnVuY3Rpb24iIT10eXBlb2YgdC5nZXRMYWJlbCkpKXRocm93IEVycm9yKCJMaXN0S2V5TWFuYWdlciBpdGVtcyBpbiB0eXBlYWhlYWQgbW9kZSBtdXN0IGltcGxlbWVudCB0aGUgYGdldExhYmVsYCBtZXRob2QuIik7cmV0dXJuIHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbj10aGlzLl9sZXR0ZXJLZXlTdHJlYW0ucGlwZShGZSgodD0+dGhpcy5fcHJlc3NlZExldHRlcnMucHVzaCh0KSkpLGdlKHQpLGNlKCgoKT0+dGhpcy5fcHJlc3NlZExldHRlcnMubGVuZ3RoPjApKSxJdCgoKCk9PnRoaXMuX3ByZXNzZWRMZXR0ZXJzLmpvaW4oIiIpKSkpLnN1YnNjcmliZSgodD0+e2NvbnN0IGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2ZvcihsZXQgbj0xO248ZS5sZW5ndGgrMTtuKyspe2NvbnN0IG89KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCtuKSVlLmxlbmd0aCxpPWVbb107aWYoIXRoaXMuX3NraXBQcmVkaWNhdGVGbihpKSYmMD09PWkuZ2V0TGFiZWwoKS50b1VwcGVyQ2FzZSgpLnRyaW0oKS5pbmRleE9mKHQpKXt0aGlzLnNldEFjdGl2ZUl0ZW0obyk7YnJlYWt9fXRoaXMuX3ByZXNzZWRMZXR0ZXJzPVtdfSkpLHRoaXN9d2l0aEhvbWVBbmRFbmQodD0hMCl7cmV0dXJuIHRoaXMuX2hvbWVBbmRFbmQ9dCx0aGlzfXNldEFjdGl2ZUl0ZW0odCl7Y29uc3QgZT10aGlzLl9hY3RpdmVJdGVtO3RoaXMudXBkYXRlQWN0aXZlSXRlbSh0KSx0aGlzLl9hY3RpdmVJdGVtIT09ZSYmdGhpcy5jaGFuZ2UubmV4dCh0aGlzLl9hY3RpdmVJdGVtSW5kZXgpfW9uS2V5ZG93bih0KXtjb25zdCBlPXQua2V5Q29kZSxuPVsiYWx0S2V5IiwiY3RybEtleSIsIm1ldGFLZXkiLCJzaGlmdEtleSJdLmV2ZXJ5KChlPT4hdFtlXXx8dGhpcy5fYWxsb3dlZE1vZGlmaWVyS2V5cy5pbmRleE9mKGUpPi0xKSk7c3dpdGNoKGUpe2Nhc2UgOTpyZXR1cm4gdm9pZCB0aGlzLnRhYk91dC5uZXh0KCk7Y2FzZSBoejppZih0aGlzLl92ZXJ0aWNhbCYmbil7dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIGd6OmlmKHRoaXMuX3ZlcnRpY2FsJiZuKXt0aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM5OmlmKHRoaXMuX2hvcml6b250YWwmJm4peyJydGwiPT09dGhpcy5faG9yaXpvbnRhbD90aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpOnRoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzNzppZih0aGlzLl9ob3Jpem9udGFsJiZuKXsicnRsIj09PXRoaXMuX2hvcml6b250YWw/dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpOnRoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzY6aWYodGhpcy5faG9tZUFuZEVuZCYmbil7dGhpcy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzNTppZih0aGlzLl9ob21lQW5kRW5kJiZuKXt0aGlzLnNldExhc3RJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2RlZmF1bHQ6cmV0dXJuIHZvaWQoKG58fGJ6KHQsInNoaWZ0S2V5IikpJiYodC5rZXkmJjE9PT10LmtleS5sZW5ndGg/dGhpcy5fbGV0dGVyS2V5U3RyZWFtLm5leHQodC5rZXkudG9Mb2NhbGVVcHBlckNhc2UoKSk6KGU+PTY1JiZlPD05MHx8ZT49NDgmJmU8PTU3KSYmdGhpcy5fbGV0dGVyS2V5U3RyZWFtLm5leHQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSkpKX10aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0LnByZXZlbnREZWZhdWx0KCl9Z2V0IGFjdGl2ZUl0ZW1JbmRleCgpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtSW5kZXh9Z2V0IGFjdGl2ZUl0ZW0oKXtyZXR1cm4gdGhpcy5fYWN0aXZlSXRlbX1pc1R5cGluZygpe3JldHVybiB0aGlzLl9wcmVzc2VkTGV0dGVycy5sZW5ndGg+MH1zZXRGaXJzdEl0ZW1BY3RpdmUoKXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCgwLDEpfXNldExhc3RJdGVtQWN0aXZlKCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5faXRlbXMubGVuZ3RoLTEsLTEpfXNldE5leHRJdGVtQWN0aXZlKCl7dGhpcy5fYWN0aXZlSXRlbUluZGV4PDA/dGhpcy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTp0aGlzLl9zZXRBY3RpdmVJdGVtQnlEZWx0YSgxKX1zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKXt0aGlzLl9hY3RpdmVJdGVtSW5kZXg8MCYmdGhpcy5fd3JhcD90aGlzLnNldExhc3RJdGVtQWN0aXZlKCk6dGhpcy5fc2V0QWN0aXZlSXRlbUJ5RGVsdGEoLTEpfXVwZGF0ZUFjdGl2ZUl0ZW0odCl7Y29uc3QgZT10aGlzLl9nZXRJdGVtc0FycmF5KCksbj0ibnVtYmVyIj09dHlwZW9mIHQ/dDplLmluZGV4T2YodCksbz1lW25dO3RoaXMuX2FjdGl2ZUl0ZW09bnVsbD09bz9udWxsOm8sdGhpcy5fYWN0aXZlSXRlbUluZGV4PW59X3NldEFjdGl2ZUl0ZW1CeURlbHRhKHQpe3RoaXMuX3dyYXA/dGhpcy5fc2V0QWN0aXZlSW5XcmFwTW9kZSh0KTp0aGlzLl9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlKHQpfV9zZXRBY3RpdmVJbldyYXBNb2RlKHQpe2NvbnN0IGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2ZvcihsZXQgbj0xO248PWUubGVuZ3RoO24rKyl7Y29uc3Qgbz0odGhpcy5fYWN0aXZlSXRlbUluZGV4K3QqbitlLmxlbmd0aCklZS5sZW5ndGg7aWYoIXRoaXMuX3NraXBQcmVkaWNhdGVGbihlW29dKSlyZXR1cm4gdm9pZCB0aGlzLnNldEFjdGl2ZUl0ZW0obyl9fV9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlKHQpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCt0LHQpfV9zZXRBY3RpdmVJdGVtQnlJbmRleCh0LGUpe2NvbnN0IG49dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2lmKG5bdF0pe2Zvcig7dGhpcy5fc2tpcFByZWRpY2F0ZUZuKG5bdF0pOylpZighblt0Kz1lXSlyZXR1cm47dGhpcy5zZXRBY3RpdmVJdGVtKHQpfX1fZ2V0SXRlbXNBcnJheSgpe3JldHVybiB0aGlzLl9pdGVtcyBpbnN0YW5jZW9mIFZoP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKTp0aGlzLl9pdGVtc319Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIHRJIGV4dGVuZHMgJHp7c2V0QWN0aXZlSXRlbSh0KXt0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5zZXRJbmFjdGl2ZVN0eWxlcygpLHN1cGVyLnNldEFjdGl2ZUl0ZW0odCksdGhpcy5hY3RpdmVJdGVtJiZ0aGlzLmFjdGl2ZUl0ZW0uc2V0QWN0aXZlU3R5bGVzKCl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBlSSBleHRlbmRzICR6e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcmlnaW49InByb2dyYW0ifXNldEZvY3VzT3JpZ2luKHQpe3JldHVybiB0aGlzLl9vcmlnaW49dCx0aGlzfXNldEFjdGl2ZUl0ZW0odCl7c3VwZXIuc2V0QWN0aXZlSXRlbSh0KSx0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5mb2N1cyh0aGlzLl9vcmlnaW4pfX1jbGFzcyBuSXtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9wbGF0Zm9ybT10fWlzRGlzYWJsZWQodCl7cmV0dXJuIHQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfWlzVmlzaWJsZSh0KXtyZXR1cm4oZnVuY3Rpb24gZSh0KXtyZXR1cm4hISh0Lm9mZnNldFdpZHRofHx0Lm9mZnNldEhlaWdodHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0Q2xpZW50UmVjdHMmJnQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpfSkodCkmJiJ2aXNpYmxlIj09PWdldENvbXB1dGVkU3R5bGUodCkudmlzaWJpbGl0eX1pc1RhYmJhYmxlKHQpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuITE7Y29uc3QgZT0oZnVuY3Rpb24gbyh0KXt0cnl7cmV0dXJuIHQuZnJhbWVFbGVtZW50fWNhdGNoKHQpe3JldHVybiBudWxsfX0pKChmdW5jdGlvbiBuKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQpKTtpZihlKXtpZigtMT09PWlJKGUpKXJldHVybiExO2lmKCF0aGlzLmlzVmlzaWJsZShlKSlyZXR1cm4hMX1sZXQgaT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksYT1pSSh0KTtyZXR1cm4gdC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpPy0xIT09YToiaWZyYW1lIiE9PWkmJiJvYmplY3QiIT09aSYmISh0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJnRoaXMuX3BsYXRmb3JtLklPUyYmIShmdW5jdGlvbiByKHQpe2xldCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxuPSJpbnB1dCI9PT1lJiZ0LnR5cGU7cmV0dXJuInRleHQiPT09bnx8InBhc3N3b3JkIj09PW58fCJzZWxlY3QiPT09ZXx8InRleHRhcmVhIj09PWV9KSh0KSkmJigiYXVkaW8iPT09aT8hIXQuaGFzQXR0cmlidXRlKCJjb250cm9scyIpJiYtMSE9PWE6InZpZGVvIj09PWk/LTEhPT1hJiYobnVsbCE9PWF8fHRoaXMuX3BsYXRmb3JtLkZJUkVGT1h8fHQuaGFzQXR0cmlidXRlKCJjb250cm9scyIpKTp0LnRhYkluZGV4Pj0wKX1pc0ZvY3VzYWJsZSh0LGUpe3JldHVybihmdW5jdGlvbiBuKHQpe3JldHVybiEoZnVuY3Rpb24gZSh0KXtyZXR1cm4oZnVuY3Rpb24gZSh0KXtyZXR1cm4iaW5wdXQiPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9KSh0KSYmImhpZGRlbiI9PXQudHlwZX0pKHQpJiYoKGZ1bmN0aW9uIG4odCl7bGV0IGU9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1lfHwic2VsZWN0Ij09PWV8fCJidXR0b24iPT09ZXx8InRleHRhcmVhIj09PWV9KSh0KXx8KGZ1bmN0aW9uIG8odCl7cmV0dXJuKGZ1bmN0aW9uIGUodCl7cmV0dXJuImEiPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9KSh0KSYmdC5oYXNBdHRyaWJ1dGUoImhyZWYiKX0pKHQpfHx0Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fG9JKHQpKX0pKHQpJiYhdGhpcy5pc0Rpc2FibGVkKHQpJiYoKG51bGw9PWU/dm9pZCAwOmUuaWdub3JlVmlzaWJpbGl0eSl8fHRoaXMuaXNWaXNpYmxlKHQpKX19ZnVuY3Rpb24gb0kodCl7aWYoIXQuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx2b2lkIDA9PT10LnRhYkluZGV4KXJldHVybiExO2xldCBlPXQuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpO3JldHVybiItMzI3NjgiIT1lJiYhKCFlfHxpc05hTihwYXJzZUludChlLDEwKSkpfWZ1bmN0aW9uIGlJKHQpe2lmKCFvSSh0KSlyZXR1cm4gbnVsbDtjb25zdCBlPXBhcnNlSW50KHQuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKGUpPy0xOmV9bkkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG5JKSh2cih3eikpfSxuSS7JtXByb3Y9TW4oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgbkkodnIod3opKX0sdG9rZW46bkkscHJvdmlkZWRJbjoicm9vdCJ9KSxuSS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnd6fV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChuSSxbe3R5cGU6aW0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6d3p9XX0pLG51bGwpO2NsYXNzIGFJe2NvbnN0cnVjdG9yKHQsZSxuLG8saT0hMSl7dGhpcy5fZWxlbWVudD10LHRoaXMuX2NoZWNrZXI9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9kb2N1bWVudD1vLHRoaXMuX2hhc0F0dGFjaGVkPSExLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcj0oKT0+dGhpcy5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQoKSx0aGlzLmVuZEFuY2hvckxpc3RlbmVyPSgpPT50aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKSx0aGlzLl9lbmFibGVkPSEwLGl8fHRoaXMuYXR0YWNoQW5jaG9ycygpfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9c2V0IGVuYWJsZWQodCl7dGhpcy5fZW5hYmxlZD10LHRoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0LHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0LHRoaXMuX2VuZEFuY2hvcikpfWRlc3Ryb3koKXtjb25zdCB0PXRoaXMuX3N0YXJ0QW5jaG9yLGU9dGhpcy5fZW5kQW5jaG9yO3QmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXIpLHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpKSxlJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5lbmRBbmNob3JMaXN0ZW5lciksZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSkpLHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2VuZEFuY2hvcj1udWxsLHRoaXMuX2hhc0F0dGFjaGVkPSExfWF0dGFjaEFuY2hvcnMoKXtyZXR1cm4hIXRoaXMuX2hhc0F0dGFjaGVkfHwodGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e3RoaXMuX3N0YXJ0QW5jaG9yfHwodGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCksdGhpcy5fc3RhcnRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcikpLHRoaXMuX2VuZEFuY2hvcnx8KHRoaXMuX2VuZEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9lbmRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpKX0pKSx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJih0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX3N0YXJ0QW5jaG9yLHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fZW5kQW5jaG9yLHRoaXMuX2VsZW1lbnQubmV4dFNpYmxpbmcpLHRoaXMuX2hhc0F0dGFjaGVkPSEwKSx0aGlzLl9oYXNBdHRhY2hlZCl9Zm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeSh0KXtyZXR1cm4gbmV3IFByb21pc2UoKGU9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCgpPT5lKHRoaXMuZm9jdXNJbml0aWFsRWxlbWVudCh0KSkpKX0pKX1mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKCk9PmUodGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KHQpKSkpfSkpfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeSh0KXtyZXR1cm4gbmV3IFByb21pc2UoKGU9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCgpPT5lKHRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KHQpKSkpfSkpfV9nZXRSZWdpb25Cb3VuZGFyeSh0KXtsZXQgZT10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtjZGstZm9jdXMtcmVnaW9uLSR7dH1dLCBbY2RrRm9jdXNSZWdpb24ke3R9XSwgW2Nkay1mb2N1cy0ke3R9XWApO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKWVbbl0uaGFzQXR0cmlidXRlKGBjZGstZm9jdXMtJHt0fWApP2NvbnNvbGUud2FybihgRm91bmQgdXNlIG9mIGRlcHJlY2F0ZWQgYXR0cmlidXRlICdjZGstZm9jdXMtJHt0fScsIHVzZSAnY2RrRm9jdXNSZWdpb24ke3R9JyBpbnN0ZWFkLiBUaGUgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgd2lsbCBiZSByZW1vdmVkIGluIDguMC4wLmAsZVtuXSk6ZVtuXS5oYXNBdHRyaWJ1dGUoYGNkay1mb2N1cy1yZWdpb24tJHt0fWApJiZjb25zb2xlLndhcm4oYEZvdW5kIHVzZSBvZiBkZXByZWNhdGVkIGF0dHJpYnV0ZSAnY2RrLWZvY3VzLXJlZ2lvbi0ke3R9JywgdXNlICdjZGtGb2N1c1JlZ2lvbiR7dH0nIGluc3RlYWQuIFRoZSBkZXByZWNhdGVkIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQgaW4gOC4wLjAuYCxlW25dKTtyZXR1cm4ic3RhcnQiPT10P2UubGVuZ3RoP2VbMF06dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCk6ZS5sZW5ndGg/ZVtlLmxlbmd0aC0xXTp0aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpfWZvY3VzSW5pdGlhbEVsZW1lbnQodCl7Y29uc3QgZT10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIltjZGstZm9jdXMtaW5pdGlhbF0sIFtjZGtGb2N1c0luaXRpYWxdIik7aWYoZSl7aWYoZS5oYXNBdHRyaWJ1dGUoImNkay1mb2N1cy1pbml0aWFsIikmJmNvbnNvbGUud2FybigiRm91bmQgdXNlIG9mIGRlcHJlY2F0ZWQgYXR0cmlidXRlICdjZGstZm9jdXMtaW5pdGlhbCcsIHVzZSAnY2RrRm9jdXNJbml0aWFsJyBpbnN0ZWFkLiBUaGUgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgd2lsbCBiZSByZW1vdmVkIGluIDguMC4wIixlKSwidW5kZWZpbmVkIiE9dHlwZW9mIG5nRGV2TW9kZSYmIW5nRGV2TW9kZXx8dGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShlKXx8Y29uc29sZS53YXJuKCJFbGVtZW50IG1hdGNoaW5nICdbY2RrRm9jdXNJbml0aWFsXScgaXMgbm90IGZvY3VzYWJsZS4iLGUpLCF0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKGUpKXtjb25zdCBuPXRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGUpO3JldHVybiBudWxsPT1ufHxuLmZvY3VzKHQpLCEhbn1yZXR1cm4gZS5mb2N1cyh0KSwhMH1yZXR1cm4gdGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KHQpfWZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQodCl7Y29uc3QgZT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgic3RhcnQiKTtyZXR1cm4gZSYmZS5mb2N1cyh0KSwhIWV9Zm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KHQpe2NvbnN0IGU9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoImVuZCIpO3JldHVybiBlJiZlLmZvY3VzKHQpLCEhZX1oYXNBdHRhY2hlZCgpe3JldHVybiB0aGlzLl9oYXNBdHRhY2hlZH1fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQodCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKHQpKXJldHVybiB0O2xldCBlPXQuY2hpbGRyZW58fHQuY2hpbGROb2Rlcztmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IG49ZVt0XS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlW3RdKTpudWxsO2lmKG4pcmV0dXJuIG59cmV0dXJuIG51bGx9X2dldExhc3RUYWJiYWJsZUVsZW1lbnQodCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKHQpKXJldHVybiB0O2xldCBlPXQuY2hpbGRyZW58fHQuY2hpbGROb2Rlcztmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0wO3QtLSl7bGV0IG49ZVt0XS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGVbdF0pOm51bGw7aWYobilyZXR1cm4gbn1yZXR1cm4gbnVsbH1fY3JlYXRlQW5jaG9yKCl7Y29uc3QgdD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodGhpcy5fZW5hYmxlZCx0KSx0LmNsYXNzTGlzdC5hZGQoImNkay12aXN1YWxseS1oaWRkZW4iKSx0LmNsYXNzTGlzdC5hZGQoImNkay1mb2N1cy10cmFwLWFuY2hvciIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSx0fV90b2dnbGVBbmNob3JUYWJJbmRleCh0LGUpe3Q/ZS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpOmUucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpfXRvZ2dsZUFuY2hvcnModCl7dGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fZW5kQW5jaG9yKSl9X2V4ZWN1dGVPblN0YWJsZSh0KXt0aGlzLl9uZ1pvbmUuaXNTdGFibGU/dCgpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKGJlKDEpKS5zdWJzY3JpYmUodCl9fWNsYXNzIHJJe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9jaGVja2VyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fZG9jdW1lbnQ9bn1jcmVhdGUodCxlPSExKXtyZXR1cm4gbmV3IGFJKHQsdGhpcy5fY2hlY2tlcix0aGlzLl9uZ1pvbmUsdGhpcy5fZG9jdW1lbnQsZSl9fXJJLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxySSkodnIobkkpLHZyKGFfKSx2cihaXykpfSxySS7JtXByb3Y9TW4oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgckkodnIobkkpLHZyKGFfKSx2cihaXykpfSx0b2tlbjpySSxwcm92aWRlZEluOiJyb290In0pLHJJLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6bkl9LHt0eXBlOmFffSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHJJLFt7dHlwZTppbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpuSX0se3R5cGU6YV99LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dfSksbnVsbCk7Y2xhc3Mgc0l7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9mb2N1c1RyYXBGYWN0b3J5PWUsdGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PW51bGwsdGhpcy5mb2N1c1RyYXA9dGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCEwKX1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLmZvY3VzVHJhcC5lbmFibGVkfXNldCBlbmFibGVkKHQpe3RoaXMuZm9jdXNUcmFwLmVuYWJsZWQ9eXoodCl9Z2V0IGF1dG9DYXB0dXJlKCl7cmV0dXJuIHRoaXMuX2F1dG9DYXB0dXJlfXNldCBhdXRvQ2FwdHVyZSh0KXt0aGlzLl9hdXRvQ2FwdHVyZT15eih0KX1uZ09uRGVzdHJveSgpe3RoaXMuZm9jdXNUcmFwLmRlc3Ryb3koKSx0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQmJih0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQuZm9jdXMoKSx0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9bnVsbCl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5mb2N1c1RyYXAuYXR0YWNoQW5jaG9ycygpLHRoaXMuYXV0b0NhcHR1cmUmJnRoaXMuX2NhcHR1cmVGb2N1cygpfW5nRG9DaGVjaygpe3RoaXMuZm9jdXNUcmFwLmhhc0F0dGFjaGVkKCl8fHRoaXMuZm9jdXNUcmFwLmF0dGFjaEFuY2hvcnMoKX1uZ09uQ2hhbmdlcyh0KXtjb25zdCBlPXQuYXV0b0NhcHR1cmU7ZSYmIWUuZmlyc3RDaGFuZ2UmJnRoaXMuYXV0b0NhcHR1cmUmJnRoaXMuZm9jdXNUcmFwLmhhc0F0dGFjaGVkKCkmJnRoaXMuX2NhcHR1cmVGb2N1cygpfV9jYXB0dXJlRm9jdXMoKXt0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9RnooKSx0aGlzLmZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCl9fXNJLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxzSSkoU20oaGcpLFNtKHJJKSxTbShaXykpfSxzSS7JtWRpcj1sbyh7dHlwZTpzSSxzZWxlY3RvcnM6W1siIiwiY2RrVHJhcEZvY3VzIiwiIl1dLGlucHV0czp7ZW5hYmxlZDpbImNka1RyYXBGb2N1cyIsImVuYWJsZWQiXSxhdXRvQ2FwdHVyZTpbImNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIiwiYXV0b0NhcHR1cmUiXX0sZXhwb3J0QXM6WyJjZGtUcmFwRm9jdXMiXSxmZWF0dXJlczpbQm9dfSksc0kuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpoZ30se3R5cGU6ckl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dLHNJLnByb3BEZWNvcmF0b3JzPXtlbmFibGVkOlt7dHlwZTp4eSxhcmdzOlsiY2RrVHJhcEZvY3VzIl19XSxhdXRvQ2FwdHVyZTpbe3R5cGU6eHksYXJnczpbImNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChzSSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbY2RrVHJhcEZvY3VzXSIsZXhwb3J0QXM6ImNka1RyYXBGb2N1cyJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpoZ30se3R5cGU6ckl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dfSkse2VuYWJsZWQ6W3t0eXBlOnh5LGFyZ3M6WyJjZGtUcmFwRm9jdXMiXX1dLGF1dG9DYXB0dXJlOlt7dHlwZTp4eSxhcmdzOlsiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBsSSBleHRlbmRzIGFJe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIpe3N1cGVyKHQsZSxuLG8sci5kZWZlciksdGhpcy5fZm9jdXNUcmFwTWFuYWdlcj1pLHRoaXMuX2luZXJ0U3RyYXRlZ3k9YSx0aGlzLl9mb2N1c1RyYXBNYW5hZ2VyLnJlZ2lzdGVyKHRoaXMpfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9c2V0IGVuYWJsZWQodCl7dGhpcy5fZW5hYmxlZD10LHRoaXMuX2VuYWJsZWQ/dGhpcy5fZm9jdXNUcmFwTWFuYWdlci5yZWdpc3Rlcih0aGlzKTp0aGlzLl9mb2N1c1RyYXBNYW5hZ2VyLmRlcmVnaXN0ZXIodGhpcyl9ZGVzdHJveSgpe3RoaXMuX2ZvY3VzVHJhcE1hbmFnZXIuZGVyZWdpc3Rlcih0aGlzKSxzdXBlci5kZXN0cm95KCl9X2VuYWJsZSgpe3RoaXMuX2luZXJ0U3RyYXRlZ3kucHJldmVudEZvY3VzKHRoaXMpLHRoaXMudG9nZ2xlQW5jaG9ycyghMCl9X2Rpc2FibGUoKXt0aGlzLl9pbmVydFN0cmF0ZWd5LmFsbG93Rm9jdXModGhpcyksdGhpcy50b2dnbGVBbmNob3JzKCExKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBjST1uZXcgR2EoIkZPQ1VTX1RSQVBfSU5FUlRfU1RSQVRFR1kiKSxkST0idW5kZWZpbmVkIiE9dHlwZW9mIEVsZW1lbnQmJiEhRWxlbWVudC5wcm90b3R5cGUuY2xvc2VzdDsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gcEkodCxlKXtyZXR1cm4gdC5tYXRjaGVzP3QubWF0Y2hlcyhlKTp0Lm1zTWF0Y2hlc1NlbGVjdG9yKGUpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBtSXtjb25zdHJ1Y3Rvcigpe3RoaXMuX2xpc3RlbmVyPW51bGx9cHJldmVudEZvY3VzKHQpe3RoaXMuX2xpc3RlbmVyJiZ0Ll9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fbGlzdGVuZXIsITApLHRoaXMuX2xpc3RlbmVyPWU9PnRoaXMuX3RyYXBGb2N1cyh0LGUpLHQuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pnt0Ll9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fbGlzdGVuZXIsITApfSkpfWFsbG93Rm9jdXModCl7dGhpcy5fbGlzdGVuZXImJih0Ll9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fbGlzdGVuZXIsITApLHRoaXMuX2xpc3RlbmVyPW51bGwpfV90cmFwRm9jdXModCxlKXtjb25zdCBuPWUudGFyZ2V0LG89dC5fZWxlbWVudDtvLmNvbnRhaW5zKG4pfHxudWxsIT09KGZ1bmN0aW9uIGkodCxlKXtpZighKHQgaW5zdGFuY2VvZiBOb2RlKSlyZXR1cm4gbnVsbDtsZXQgbj10O2Zvcig7bnVsbCE9biYmIShuIGluc3RhbmNlb2YgRWxlbWVudCk7KW49bi5wYXJlbnROb2RlO3JldHVybiBuJiYoZEk/bi5jbG9zZXN0KGUpOihmdW5jdGlvbiBvKHQsZSl7bGV0IG49dDtmb3IoO251bGwhPW4mJiEobiBpbnN0YW5jZW9mIEVsZW1lbnQmJnBJKG4sZSkpOyluPW4ucGFyZW50Tm9kZTtyZXR1cm4gbnx8bnVsbH0pKG4sZSkpfSkobiwiZGl2LmNkay1vdmVybGF5LXBhbmUiKXx8c2V0VGltZW91dCgoKCk9Pnt0LmVuYWJsZWQmJiFvLmNvbnRhaW5zKHQuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQpJiZ0LmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKX0pKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIHVJe2NvbnN0cnVjdG9yKCl7dGhpcy5fZm9jdXNUcmFwU3RhY2s9W119cmVnaXN0ZXIodCl7dGhpcy5fZm9jdXNUcmFwU3RhY2s9dGhpcy5fZm9jdXNUcmFwU3RhY2suZmlsdGVyKChlPT5lIT09dCkpO2xldCBlPXRoaXMuX2ZvY3VzVHJhcFN0YWNrO2UubGVuZ3RoJiZlW2UubGVuZ3RoLTFdLl9kaXNhYmxlKCksZS5wdXNoKHQpLHQuX2VuYWJsZSgpfWRlcmVnaXN0ZXIodCl7dC5fZGlzYWJsZSgpO2NvbnN0IGU9dGhpcy5fZm9jdXNUcmFwU3RhY2ssbj1lLmluZGV4T2YodCk7LTEhPT1uJiYoZS5zcGxpY2UobiwxKSxlLmxlbmd0aCYmZVtlLmxlbmd0aC0xXS5fZW5hYmxlKCkpfX11SS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dUkpfSx1SS7JtXByb3Y9TW4oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgdUl9LHRva2VuOnVJLHByb3ZpZGVkSW46InJvb3QifSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh1SSxbe3R5cGU6aW0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgZkl7Y29uc3RydWN0b3IodCxlLG4sbyxpKXt0aGlzLl9jaGVja2VyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fZm9jdXNUcmFwTWFuYWdlcj1uLHRoaXMuX2RvY3VtZW50PW8sdGhpcy5faW5lcnRTdHJhdGVneT1pfHxuZXcgbUl9Y3JlYXRlKHQsZT17ZGVmZXI6ITF9KXtsZXQgbjtyZXR1cm4gbj0iYm9vbGVhbiI9PXR5cGVvZiBlP3tkZWZlcjplfTplLG5ldyBsSSh0LHRoaXMuX2NoZWNrZXIsdGhpcy5fbmdab25lLHRoaXMuX2RvY3VtZW50LHRoaXMuX2ZvY3VzVHJhcE1hbmFnZXIsdGhpcy5faW5lcnRTdHJhdGVneSxuKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBnSSh0KXtyZXR1cm4gMD09PXQub2Zmc2V0WCYmMD09PXQub2Zmc2V0WX1mdW5jdGlvbiBoSSh0KXtjb25zdCBlPXQudG91Y2hlcyYmdC50b3VjaGVzWzBdfHx0LmNoYW5nZWRUb3VjaGVzJiZ0LmNoYW5nZWRUb3VjaGVzWzBdO3JldHVybiEoIWV8fC0xIT09ZS5pZGVudGlmaWVyfHxudWxsIT1lLnJhZGl1c1gmJjEhPT1lLnJhZGl1c1h8fG51bGwhPWUucmFkaXVzWSYmMSE9PWUucmFkaXVzWSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2ZJLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxmSSkodnIobkkpLHZyKGFfKSx2cih1SSksdnIoWl8pLHZyKGNJLDgpKX0sZkkuybVwcm92PU1uKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IGZJKHZyKG5JKSx2cihhXyksdnIodUkpLHZyKFpfKSx2cihjSSw4KSl9LHRva2VuOmZJLHByb3ZpZGVkSW46InJvb3QifSksZkkuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpuSX0se3R5cGU6YV99LHt0eXBlOnVJfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbY0ldfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGZJLFt7dHlwZTppbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpuSX0se3R5cGU6YV99LHt0eXBlOnVJfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbY0ldfV19XX0pLG51bGwpO2NvbnN0IGJJPW5ldyBHYSgiY2RrLWlucHV0LW1vZGFsaXR5LWRldGVjdG9yLW9wdGlvbnMiKSx5ST17aWdub3JlS2V5czpbMTgsMTcsMjI0LDkxLDE2XX0sX0k9Tnooe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pO2NsYXNzIENJe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuX3BsYXRmb3JtPXQsdGhpcy5fbW9zdFJlY2VudFRhcmdldD1udWxsLHRoaXMuX21vZGFsaXR5PW5ldyBGKG51bGwpLHRoaXMuX2xhc3RUb3VjaE1zPTAsdGhpcy5fb25LZXlkb3duPXQ9Pnt2YXIgZSxuOyhudWxsPT09KG49bnVsbD09PShlPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmlnbm9yZUtleXMpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnNvbWUoKGU9PmU9PT10LmtleUNvZGUpKSl8fCh0aGlzLl9tb2RhbGl0eS5uZXh0KCJrZXlib2FyZCIpLHRoaXMuX21vc3RSZWNlbnRUYXJnZXQ9THoodCkpfSx0aGlzLl9vbk1vdXNlZG93bj10PT57RGF0ZS5ub3coKS10aGlzLl9sYXN0VG91Y2hNczw2NTB8fCh0aGlzLl9tb2RhbGl0eS5uZXh0KGdJKHQpPyJrZXlib2FyZCI6Im1vdXNlIiksdGhpcy5fbW9zdFJlY2VudFRhcmdldD1Meih0KSl9LHRoaXMuX29uVG91Y2hzdGFydD10PT57aEkodCk/dGhpcy5fbW9kYWxpdHkubmV4dCgia2V5Ym9hcmQiKToodGhpcy5fbGFzdFRvdWNoTXM9RGF0ZS5ub3coKSx0aGlzLl9tb2RhbGl0eS5uZXh0KCJ0b3VjaCIpLHRoaXMuX21vc3RSZWNlbnRUYXJnZXQ9THoodCkpfSx0aGlzLl9vcHRpb25zPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx5SSksbyksdGhpcy5tb2RhbGl0eURldGVjdGVkPXRoaXMuX21vZGFsaXR5LnBpcGUoVGUoMSkpLHRoaXMubW9kYWxpdHlDaGFuZ2VkPXRoaXMubW9kYWxpdHlEZXRlY3RlZC5waXBlKE1lKCkpLHQuaXNCcm93c2VyJiZlLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e24uYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlkb3duLF9JKSxuLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZWRvd24sX0kpLG4uYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaHN0YXJ0LF9JKX0pKX1nZXQgbW9zdFJlY2VudE1vZGFsaXR5KCl7cmV0dXJuIHRoaXMuX21vZGFsaXR5LnZhbHVlfW5nT25EZXN0cm95KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlkb3duLF9JKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2Vkb3duLF9JKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9vblRvdWNoc3RhcnQsX0kpKX19Q0kuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fENJKSh2cih3eiksdnIoYV8pLHZyKFpfKSx2cihiSSw4KSl9LENJLsm1cHJvdj1Nbih7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBDSSh2cih3eiksdnIoYV8pLHZyKFpfKSx2cihiSSw4KSl9LHRva2VuOkNJLHByb3ZpZGVkSW46InJvb3QifSksQ0kuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp3en0se3R5cGU6YV99LHt0eXBlOkRvY3VtZW50LGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W2JJXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChDSSxbe3R5cGU6aW0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6d3p9LHt0eXBlOmFffSx7dHlwZTpEb2N1bWVudCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltiSV19XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBNST1uZXcgR2EoImxpdmVBbm5vdW5jZXJFbGVtZW50Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiB2SSgpe3JldHVybiBudWxsfX0pLHhJPW5ldyBHYSgiTElWRV9BTk5PVU5DRVJfREVGQVVMVF9PUFRJT05TIik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBPSXtjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1vLHRoaXMuX2RvY3VtZW50PW4sdGhpcy5fbGl2ZUVsZW1lbnQ9dHx8dGhpcy5fY3JlYXRlTGl2ZUVsZW1lbnQoKX1hbm5vdW5jZSh0LC4uLmUpe2NvbnN0IG49dGhpcy5fZGVmYXVsdE9wdGlvbnM7bGV0IG8saTtyZXR1cm4gMT09PWUubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIGVbMF0/aT1lWzBdOltvLGldPWUsdGhpcy5jbGVhcigpLGNsZWFyVGltZW91dCh0aGlzLl9wcmV2aW91c1RpbWVvdXQpLG98fChvPW4mJm4ucG9saXRlbmVzcz9uLnBvbGl0ZW5lc3M6InBvbGl0ZSIpLG51bGw9PWkmJm4mJihpPW4uZHVyYXRpb24pLHRoaXMuX2xpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIixvKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT5uZXcgUHJvbWlzZSgoZT0+e2NsZWFyVGltZW91dCh0aGlzLl9wcmV2aW91c1RpbWVvdXQpLHRoaXMuX3ByZXZpb3VzVGltZW91dD1zZXRUaW1lb3V0KCgoKT0+e3RoaXMuX2xpdmVFbGVtZW50LnRleHRDb250ZW50PXQsZSgpLCJudW1iZXIiPT10eXBlb2YgaSYmKHRoaXMuX3ByZXZpb3VzVGltZW91dD1zZXRUaW1lb3V0KCgoKT0+dGhpcy5jbGVhcigpKSxpKSl9KSwxMDApfSkpKSl9Y2xlYXIoKXt0aGlzLl9saXZlRWxlbWVudCYmKHRoaXMuX2xpdmVFbGVtZW50LnRleHRDb250ZW50PSIiKX1uZ09uRGVzdHJveSgpe2NsZWFyVGltZW91dCh0aGlzLl9wcmV2aW91c1RpbWVvdXQpLHRoaXMuX2xpdmVFbGVtZW50JiZ0aGlzLl9saXZlRWxlbWVudC5wYXJlbnROb2RlJiYodGhpcy5fbGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9saXZlRWxlbWVudCksdGhpcy5fbGl2ZUVsZW1lbnQ9bnVsbCl9X2NyZWF0ZUxpdmVFbGVtZW50KCl7Y29uc3QgdD0iY2RrLWxpdmUtYW5ub3VuY2VyLWVsZW1lbnQiLGU9dGhpcy5fZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0KSxuPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlW3RdKTtyZXR1cm4gbi5jbGFzc0xpc3QuYWRkKHQpLG4uY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLG4uc2V0QXR0cmlidXRlKCJhcmlhLWF0b21pYyIsInRydWUiKSxuLnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChuKSxufX1PSS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8T0kpKHZyKE1JLDgpLHZyKGFfKSx2cihaXyksdnIoeEksOCkpfSxPSS7JtXByb3Y9TW4oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgT0kodnIoTUksOCksdnIoYV8pLHZyKFpfKSx2cih4SSw4KSl9LHRva2VuOk9JLHByb3ZpZGVkSW46InJvb3QifSksT0kuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W01JXX1dfSx7dHlwZTphX30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W3hJXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChPSSxbe3R5cGU6aW0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltNSV19XX0se3R5cGU6YV99LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOlt4SV19XX1dfSksbnVsbCk7Y2xhc3MgUEl7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2xpdmVBbm5vdW5jZXI9ZSx0aGlzLl9jb250ZW50T2JzZXJ2ZXI9bix0aGlzLl9uZ1pvbmU9byx0aGlzLl9wb2xpdGVuZXNzPSJwb2xpdGUifWdldCBwb2xpdGVuZXNzKCl7cmV0dXJuIHRoaXMuX3BvbGl0ZW5lc3N9c2V0IHBvbGl0ZW5lc3ModCl7dGhpcy5fcG9saXRlbmVzcz0ib2ZmIj09PXR8fCJhc3NlcnRpdmUiPT09dD90OiJwb2xpdGUiLCJvZmYiPT09dGhpcy5fcG9saXRlbmVzcz90aGlzLl9zdWJzY3JpcHRpb24mJih0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCk6dGhpcy5fc3Vic2NyaXB0aW9ufHwodGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PnRoaXMuX2NvbnRlbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYpLnN1YnNjcmliZSgoKCk9Pntjb25zdCB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDt0IT09dGhpcy5fcHJldmlvdXNBbm5vdW5jZWRUZXh0JiYodGhpcy5fbGl2ZUFubm91bmNlci5hbm5vdW5jZSh0LHRoaXMuX3BvbGl0ZW5lc3MpLHRoaXMuX3ByZXZpb3VzQW5ub3VuY2VkVGV4dD10KX0pKSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9fVBJLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxQSSkoU20oaGcpLFNtKE9JKSxTbShWeiksU20oYV8pKX0sUEkuybVkaXI9bG8oe3R5cGU6UEksc2VsZWN0b3JzOltbIiIsImNka0FyaWFMaXZlIiwiIl1dLGlucHV0czp7cG9saXRlbmVzczpbImNka0FyaWFMaXZlIiwicG9saXRlbmVzcyJdfSxleHBvcnRBczpbImNka0FyaWFMaXZlIl19KSxQSS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTpPSX0se3R5cGU6Vnp9LHt0eXBlOmFffV0sUEkucHJvcERlY29yYXRvcnM9e3BvbGl0ZW5lc3M6W3t0eXBlOnh5LGFyZ3M6WyJjZGtBcmlhTGl2ZSJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoUEksW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW2Nka0FyaWFMaXZlXSIsZXhwb3J0QXM6ImNka0FyaWFMaXZlIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfSx7dHlwZTpPSX0se3R5cGU6Vnp9LHt0eXBlOmFffV19KSx7cG9saXRlbmVzczpbe3R5cGU6eHksYXJnczpbImNka0FyaWFMaXZlIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3Qgd0k9bmV3IEdhKCJjZGstZm9jdXMtbW9uaXRvci1kZWZhdWx0LW9wdGlvbnMiKSxrST1Oeih7cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSk7Y2xhc3MgU0l7Y29uc3RydWN0b3IodCxlLG4sbyxpKXt0aGlzLl9uZ1pvbmU9dCx0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvcj1uLHRoaXMuX29yaWdpbj1udWxsLHRoaXMuX3dpbmRvd0ZvY3VzZWQ9ITEsdGhpcy5fb3JpZ2luRnJvbVRvdWNoSW50ZXJhY3Rpb249ITEsdGhpcy5fZWxlbWVudEluZm89bmV3IE1hcCx0aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnQ9MCx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudD1uZXcgTWFwLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXI9KCk9Pnt0aGlzLl93aW5kb3dGb2N1c2VkPSEwLHRoaXMuX3dpbmRvd0ZvY3VzVGltZW91dElkPXNldFRpbWVvdXQoKCgpPT50aGlzLl93aW5kb3dGb2N1c2VkPSExKSl9LHRoaXMuX3N0b3BJbnB1dE1vZGFsaXR5RGV0ZWN0b3I9bmV3IEksdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcj10PT57Y29uc3QgZT1Meih0KSxuPSJmb2N1cyI9PT10LnR5cGU/dGhpcy5fb25Gb2N1czp0aGlzLl9vbkJsdXI7Zm9yKGxldCBvPWU7bztvPW8ucGFyZW50RWxlbWVudCluLmNhbGwodGhpcyx0LG8pfSx0aGlzLl9kb2N1bWVudD1vLHRoaXMuX2RldGVjdGlvbk1vZGU9KG51bGw9PWk/dm9pZCAwOmkuZGV0ZWN0aW9uTW9kZSl8fDB9bW9uaXRvcih0LGU9ITEpe2NvbnN0IG49eHoodCk7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8MSE9PW4ubm9kZVR5cGUpcmV0dXJuIEV0KG51bGwpO2NvbnN0IG89SHoobil8fHRoaXMuX2dldERvY3VtZW50KCksaT10aGlzLl9lbGVtZW50SW5mby5nZXQobik7aWYoaSlyZXR1cm4gZSYmKGkuY2hlY2tDaGlsZHJlbj0hMCksaS5zdWJqZWN0O2NvbnN0IGE9e2NoZWNrQ2hpbGRyZW46ZSxzdWJqZWN0Om5ldyBJLHJvb3ROb2RlOm99O3JldHVybiB0aGlzLl9lbGVtZW50SW5mby5zZXQobixhKSx0aGlzLl9yZWdpc3Rlckdsb2JhbExpc3RlbmVycyhhKSxhLnN1YmplY3R9c3RvcE1vbml0b3JpbmcodCl7Y29uc3QgZT14eih0KSxuPXRoaXMuX2VsZW1lbnRJbmZvLmdldChlKTtuJiYobi5zdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fc2V0Q2xhc3NlcyhlKSx0aGlzLl9lbGVtZW50SW5mby5kZWxldGUoZSksdGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXJzKG4pKX1mb2N1c1ZpYSh0LGUsbil7Y29uc3Qgbz14eih0KTtvPT09dGhpcy5fZ2V0RG9jdW1lbnQoKS5hY3RpdmVFbGVtZW50P3RoaXMuX2dldENsb3Nlc3RFbGVtZW50c0luZm8obykuZm9yRWFjaCgoKFt0LG5dKT0+dGhpcy5fb3JpZ2luQ2hhbmdlZCh0LGUsbikpKToodGhpcy5fc2V0T3JpZ2luKGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBvLmZvY3VzJiZvLmZvY3VzKG4pKX1uZ09uRGVzdHJveSgpe3RoaXMuX2VsZW1lbnRJbmZvLmZvckVhY2goKCh0LGUpPT50aGlzLnN0b3BNb25pdG9yaW5nKGUpKSl9X2dldERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50fHxkb2N1bWVudH1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2dldERvY3VtZW50KCkuZGVmYXVsdFZpZXd8fHdpbmRvd31fdG9nZ2xlQ2xhc3ModCxlLG4pe24/dC5jbGFzc0xpc3QuYWRkKGUpOnQuY2xhc3NMaXN0LnJlbW92ZShlKX1fZ2V0Rm9jdXNPcmlnaW4odCl7cmV0dXJuIHRoaXMuX29yaWdpbj90aGlzLl9vcmlnaW5Gcm9tVG91Y2hJbnRlcmFjdGlvbj90aGlzLl9zaG91bGRCZUF0dHJpYnV0ZWRUb1RvdWNoKHQpPyJ0b3VjaCI6InByb2dyYW0iOnRoaXMuX29yaWdpbjp0aGlzLl93aW5kb3dGb2N1c2VkJiZ0aGlzLl9sYXN0Rm9jdXNPcmlnaW4/dGhpcy5fbGFzdEZvY3VzT3JpZ2luOiJwcm9ncmFtIn1fc2hvdWxkQmVBdHRyaWJ1dGVkVG9Ub3VjaCh0KXtyZXR1cm4gMT09PXRoaXMuX2RldGVjdGlvbk1vZGV8fCEhKG51bGw9PXQ/dm9pZCAwOnQuY29udGFpbnModGhpcy5faW5wdXRNb2RhbGl0eURldGVjdG9yLl9tb3N0UmVjZW50VGFyZ2V0KSl9X3NldENsYXNzZXModCxlKXt0aGlzLl90b2dnbGVDbGFzcyh0LCJjZGstZm9jdXNlZCIsISFlKSx0aGlzLl90b2dnbGVDbGFzcyh0LCJjZGstdG91Y2gtZm9jdXNlZCIsInRvdWNoIj09PWUpLHRoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay1rZXlib2FyZC1mb2N1c2VkIiwia2V5Ym9hcmQiPT09ZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLW1vdXNlLWZvY3VzZWQiLCJtb3VzZSI9PT1lKSx0aGlzLl90b2dnbGVDbGFzcyh0LCJjZGstcHJvZ3JhbS1mb2N1c2VkIiwicHJvZ3JhbSI9PT1lKX1fc2V0T3JpZ2luKHQsZT0hMSl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e3RoaXMuX29yaWdpbj10LHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPSJ0b3VjaCI9PT10JiZlLDA9PT10aGlzLl9kZXRlY3Rpb25Nb2RlJiYoY2xlYXJUaW1lb3V0KHRoaXMuX29yaWdpblRpbWVvdXRJZCksdGhpcy5fb3JpZ2luVGltZW91dElkPXNldFRpbWVvdXQoKCgpPT50aGlzLl9vcmlnaW49bnVsbCksdGhpcy5fb3JpZ2luRnJvbVRvdWNoSW50ZXJhY3Rpb24/NjUwOjEpKX0pKX1fb25Gb2N1cyh0LGUpe2NvbnN0IG49dGhpcy5fZWxlbWVudEluZm8uZ2V0KGUpLG89THoodCk7biYmKG4uY2hlY2tDaGlsZHJlbnx8ZT09PW8pJiZ0aGlzLl9vcmlnaW5DaGFuZ2VkKGUsdGhpcy5fZ2V0Rm9jdXNPcmlnaW4obyksbil9X29uQmx1cih0LGUpe2NvbnN0IG49dGhpcy5fZWxlbWVudEluZm8uZ2V0KGUpOyFufHxuLmNoZWNrQ2hpbGRyZW4mJnQucmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIE5vZGUmJmUuY29udGFpbnModC5yZWxhdGVkVGFyZ2V0KXx8KHRoaXMuX3NldENsYXNzZXMoZSksdGhpcy5fZW1pdE9yaWdpbihuLnN1YmplY3QsbnVsbCkpfV9lbWl0T3JpZ2luKHQsZSl7dGhpcy5fbmdab25lLnJ1bigoKCk9PnQubmV4dChlKSkpfV9yZWdpc3Rlckdsb2JhbExpc3RlbmVycyh0KXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybjtjb25zdCBlPXQucm9vdE5vZGUsbj10aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5nZXQoZSl8fDA7bnx8dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e2UuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX3Jvb3ROb2RlRm9jdXNBbmRCbHVyTGlzdGVuZXIsa0kpLGUuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcixrSSl9KSksdGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGUsbisxKSwxPT0rK3RoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudCYmKHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pnt0aGlzLl9nZXRXaW5kb3coKS5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fd2luZG93Rm9jdXNMaXN0ZW5lcil9KSksdGhpcy5faW5wdXRNb2RhbGl0eURldGVjdG9yLm1vZGFsaXR5RGV0ZWN0ZWQucGlwZShJZSh0aGlzLl9zdG9wSW5wdXRNb2RhbGl0eURldGVjdG9yKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5fc2V0T3JpZ2luKHQsITApfSkpKX1fcmVtb3ZlR2xvYmFsTGlzdGVuZXJzKHQpe2NvbnN0IGU9dC5yb290Tm9kZTtpZih0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5oYXMoZSkpe2NvbnN0IHQ9dGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuZ2V0KGUpO3Q+MT90aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5zZXQoZSx0LTEpOihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLGtJKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3Jvb3ROb2RlRm9jdXNBbmRCbHVyTGlzdGVuZXIsa0kpLHRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmRlbGV0ZShlKSl9LS10aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnR8fCh0aGlzLl9nZXRXaW5kb3coKS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fd2luZG93Rm9jdXNMaXN0ZW5lciksdGhpcy5fc3RvcElucHV0TW9kYWxpdHlEZXRlY3Rvci5uZXh0KCksY2xlYXJUaW1lb3V0KHRoaXMuX3dpbmRvd0ZvY3VzVGltZW91dElkKSxjbGVhclRpbWVvdXQodGhpcy5fb3JpZ2luVGltZW91dElkKSl9X29yaWdpbkNoYW5nZWQodCxlLG4pe3RoaXMuX3NldENsYXNzZXModCxlKSx0aGlzLl9lbWl0T3JpZ2luKG4uc3ViamVjdCxlKSx0aGlzLl9sYXN0Rm9jdXNPcmlnaW49ZX1fZ2V0Q2xvc2VzdEVsZW1lbnRzSW5mbyh0KXtjb25zdCBlPVtdO3JldHVybiB0aGlzLl9lbGVtZW50SW5mby5mb3JFYWNoKCgobixvKT0+eyhvPT09dHx8bi5jaGVja0NoaWxkcmVuJiZvLmNvbnRhaW5zKHQpKSYmZS5wdXNoKFtvLG5dKX0pKSxlfX1TSS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8U0kpKHZyKGFfKSx2cih3eiksdnIoQ0kpLHZyKFpfLDgpLHZyKHdJLDgpKX0sU0kuybVwcm92PU1uKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IFNJKHZyKGFfKSx2cih3eiksdnIoQ0kpLHZyKFpfLDgpLHZyKHdJLDgpKX0sdG9rZW46U0kscHJvdmlkZWRJbjoicm9vdCJ9KSxTSS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmFffSx7dHlwZTp3en0se3R5cGU6Q0l9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbWl9dfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbd0ldfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFNJLFt7dHlwZTppbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTphX30se3R5cGU6d3p9LHt0eXBlOkNJfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1pfXX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W3dJXX1dfV19KSxudWxsKTtjbGFzcyBESXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9mb2N1c01vbml0b3I9ZSx0aGlzLmNka0ZvY3VzQ2hhbmdlPW5ldyBMaH1uZ0FmdGVyVmlld0luaXQoKXtjb25zdCB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDt0aGlzLl9tb25pdG9yU3Vic2NyaXB0aW9uPXRoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHQsMT09PXQubm9kZVR5cGUmJnQuaGFzQXR0cmlidXRlKCJjZGtNb25pdG9yU3VidHJlZUZvY3VzIikpLnN1YnNjcmliZSgodD0+dGhpcy5jZGtGb2N1c0NoYW5nZS5lbWl0KHQpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fbW9uaXRvclN1YnNjcmlwdGlvbiYmdGhpcy5fbW9uaXRvclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1ESS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8REkpKFNtKGhnKSxTbShTSSkpfSxESS7JtWRpcj1sbyh7dHlwZTpESSxzZWxlY3RvcnM6W1siIiwiY2RrTW9uaXRvckVsZW1lbnRGb2N1cyIsIiJdLFsiIiwiY2RrTW9uaXRvclN1YnRyZWVGb2N1cyIsIiJdXSxvdXRwdXRzOntjZGtGb2N1c0NoYW5nZToiY2RrRm9jdXNDaGFuZ2UifX0pLERJLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6aGd9LHt0eXBlOlNJfV0sREkucHJvcERlY29yYXRvcnM9e2Nka0ZvY3VzQ2hhbmdlOlt7dHlwZTpPeX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKERJLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6IltjZGtNb25pdG9yRWxlbWVudEZvY3VzXSwgW2Nka01vbml0b3JTdWJ0cmVlRm9jdXNdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfSx7dHlwZTpTSX1dfSkse2Nka0ZvY3VzQ2hhbmdlOlt7dHlwZTpPeX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBFST0iY2RrLWhpZ2gtY29udHJhc3QtYmxhY2stb24td2hpdGUiLFJJPSJjZGstaGlnaC1jb250cmFzdC13aGl0ZS1vbi1ibGFjayIsQUk9ImNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSI7Y2xhc3MgVEl7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9wbGF0Zm9ybT10LHRoaXMuX2RvY3VtZW50PWV9Z2V0SGlnaENvbnRyYXN0TW9kZSgpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuIDA7Y29uc3QgdD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LnN0eWxlLmJhY2tncm91bmRDb2xvcj0icmdiKDEsMiwzKSIsdC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCk7Y29uc3QgZT10aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93LG49ZSYmZS5nZXRDb21wdXRlZFN0eWxlP2UuZ2V0Q29tcHV0ZWRTdHlsZSh0KTpudWxsLG89KG4mJm4uYmFja2dyb3VuZENvbG9yfHwiIikucmVwbGFjZSgvIC9nLCIiKTtzd2l0Y2godGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KSxvKXtjYXNlInJnYigwLDAsMCkiOnJldHVybiAyO2Nhc2UicmdiKDI1NSwyNTUsMjU1KSI6cmV0dXJuIDF9cmV0dXJuIDB9X2FwcGx5Qm9keUhpZ2hDb250cmFzdE1vZGVDc3NDbGFzc2VzKCl7aWYoIXRoaXMuX2hhc0NoZWNrZWRIaWdoQ29udHJhc3RNb2RlJiZ0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMuX2RvY3VtZW50LmJvZHkpe2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3Q7dC5yZW1vdmUoQUkpLHQucmVtb3ZlKEVJKSx0LnJlbW92ZShSSSksdGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITA7Y29uc3QgZT10aGlzLmdldEhpZ2hDb250cmFzdE1vZGUoKTsxPT09ZT8odC5hZGQoQUkpLHQuYWRkKEVJKSk6Mj09PWUmJih0LmFkZChBSSksdC5hZGQoUkkpKX19fVRJLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxUSSkodnIod3opLHZyKFpfKSl9LFRJLsm1cHJvdj1Nbih7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBUSSh2cih3eiksdnIoWl8pKX0sdG9rZW46VEkscHJvdmlkZWRJbjoicm9vdCJ9KSxUSS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnd6fSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFRJLFt7dHlwZTppbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp3en0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIE5Je2NvbnN0cnVjdG9yKHQpe3QuX2FwcGx5Qm9keUhpZ2hDb250cmFzdE1vZGVDc3NDbGFzc2VzKCl9fU5JLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxOSSkodnIoVEkpKX0sTkkuybVtb2Q9YW8oe3R5cGU6Tkl9KSxOSS7JtWluaj12bih7aW1wb3J0czpbW2t6LFV6XV19KSxOSS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlRJfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChOSSxbe3R5cGU6QXksYXJnczpbe2ltcG9ydHM6W2t6LFV6XSxkZWNsYXJhdGlvbnM6W1BJLHNJLERJXSxleHBvcnRzOltQSSxzSSxESV19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpUSX1dfSksbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhOSSx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW1BJLHNJLERJXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltreixVel19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bUEksc0ksREldfX0pO2NvbnN0IHpJPW5ldyBHYSgiY2RrLWRpci1kb2MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIElJKCl7cmV0dXJuIE9yKFpfKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovfSk7Y2xhc3MgSEl7Y29uc3RydWN0b3IodCl7aWYodGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgTGgsdCl7Y29uc3QgZT10LmRvY3VtZW50RWxlbWVudD90LmRvY3VtZW50RWxlbWVudC5kaXI6bnVsbCxuPSh0LmJvZHk/dC5ib2R5LmRpcjpudWxsKXx8ZTt0aGlzLnZhbHVlPSJsdHIiPT09bnx8InJ0bCI9PT1uP246Imx0ciJ9fW5nT25EZXN0cm95KCl7dGhpcy5jaGFuZ2UuY29tcGxldGUoKX19SEkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEhJKSh2cih6SSw4KSl9LEhJLsm1cHJvdj1Nbih7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBISSh2cih6SSw4KSl9LHRva2VuOkhJLHByb3ZpZGVkSW46InJvb3QifSksSEkuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W3pJXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChISSxbe3R5cGU6aW0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOlt6SV19XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBGSXtjb25zdHJ1Y3Rvcigpe3RoaXMuX2Rpcj0ibHRyIix0aGlzLl9pc0luaXRpYWxpemVkPSExLHRoaXMuY2hhbmdlPW5ldyBMaH1nZXQgZGlyKCl7cmV0dXJuIHRoaXMuX2Rpcn1zZXQgZGlyKHQpe2NvbnN0IGU9dGhpcy5fZGlyLG49dD90LnRvTG93ZXJDYXNlKCk6dDt0aGlzLl9yYXdEaXI9dCx0aGlzLl9kaXI9Imx0ciI9PT1ufHwicnRsIj09PW4/bjoibHRyIixlIT09dGhpcy5fZGlyJiZ0aGlzLl9pc0luaXRpYWxpemVkJiZ0aGlzLmNoYW5nZS5lbWl0KHRoaXMuX2Rpcil9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuZGlyfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITB9bmdPbkRlc3Ryb3koKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfX1GSS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RkkpfSxGSS7JtWRpcj1sbyh7dHlwZTpGSSxzZWxlY3RvcnM6W1siIiwiZGlyIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJmpwKCJkaXIiLG4uX3Jhd0Rpcil9LGlucHV0czp7ZGlyOiJkaXIifSxvdXRwdXRzOntjaGFuZ2U6ImRpckNoYW5nZSJ9LGV4cG9ydEFzOlsiZGlyIl0sZmVhdHVyZXM6W3BnKFt7cHJvdmlkZTpISSx1c2VFeGlzdGluZzpGSX1dKV19KSxGSS5wcm9wRGVjb3JhdG9ycz17Y2hhbmdlOlt7dHlwZTpPeSxhcmdzOlsiZGlyQ2hhbmdlIl19XSxkaXI6W3t0eXBlOnh5fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoRkksW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW2Rpcl0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6SEksdXNlRXhpc3Rpbmc6Rkl9XSxob3N0OnsiW2F0dHIuZGlyXSI6Il9yYXdEaXIifSxleHBvcnRBczoiZGlyIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSx7Y2hhbmdlOlt7dHlwZTpPeSxhcmdzOlsiZGlyQ2hhbmdlIl19XSxkaXI6W3t0eXBlOnh5fV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIExJe31MSS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TEkpfSxMSS7JtW1vZD1hbyh7dHlwZTpMSX0pLExJLsm1aW5qPXZuKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKExJLFt7dHlwZTpBeSxhcmdzOlt7ZXhwb3J0czpbRkldLGRlY2xhcmF0aW9uczpbRkldfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oTEkse2RlY2xhcmF0aW9uczpbRkldLGV4cG9ydHM6W0ZJXX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgQkk9bmV3IE9nKCIxMi4yLjEiKSxWST1bIioiLFtbIm1hdC1vcHRpb24iXSxbIm5nLWNvbnRhaW5lciJdXV07ZnVuY3Rpb24gakkodCxlKXtpZigxJnQmJlRtKDAsIm1hdC1wc2V1ZG8tY2hlY2tib3giLDQpLDImdCl7Y29uc3QgdD1ZbSgpO0RtKCJzdGF0ZSIsdC5zZWxlY3RlZD8iY2hlY2tlZCI6InVuY2hlY2tlZCIpKCJkaXNhYmxlZCIsdC5kaXNhYmxlZCl9fWZ1bmN0aW9uIFVJKHQsZSl7aWYoMSZ0JiYoUm0oMCwic3BhbiIsNSksa3UoMSksQW0oKSksMiZ0KXtjb25zdCB0PVltKCk7cmMoMSksRHUoIigiLHQuZ3JvdXAubGFiZWwsIikiKX19bmV3IE9nKCIxMi4yLjMiKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIEdJe31HSS5TVEFOREFSRF9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIixHSS5ERUNFTEVSQVRJT05fQ1VSVkU9ImN1YmljLWJlemllcigwLjAsMC4wLDAuMiwxKSIsR0kuQUNDRUxFUkFUSU9OX0NVUlZFPSJjdWJpYy1iZXppZXIoMC40LDAuMCwxLDEpIixHSS5TSEFSUF9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC42LDEpIjtjbGFzcyBXSXt9V0kuQ09NUExFWD0iMzc1bXMiLFdJLkVOVEVSSU5HPSIyMjVtcyIsV0kuRVhJVElORz0iMTk1bXMiOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgWUk9bmV3IE9nKCIxMi4yLjMiKSxxST1uZXcgR2EoIm1hdC1zYW5pdHktY2hlY2tzIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBaSSgpe3JldHVybiEwfX0pO2NsYXNzIFhJe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzPSExLHRoaXMuX2RvY3VtZW50PW4sdC5fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKSx0aGlzLl9zYW5pdHlDaGVja3M9ZSx0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzfHwodGhpcy5fY2hlY2tEb2N0eXBlSXNEZWZpbmVkKCksdGhpcy5fY2hlY2tUaGVtZUlzUHJlc2VudCgpLHRoaXMuX2NoZWNrQ2RrVmVyc2lvbk1hdGNoKCksdGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMCl9X2dldFdpbmRvdygpe2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdztyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJnQ/dDpudWxsfV9jaGVja0lzRW5hYmxlZCh0KXtyZXR1cm4hKCF5XygpfHx0aGlzLl9pc1Rlc3RFbnYoKSkmJigiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLl9zYW5pdHlDaGVja3M/dGhpcy5fc2FuaXR5Q2hlY2tzOiEhdGhpcy5fc2FuaXR5Q2hlY2tzW3RdKX1faXNUZXN0RW52KCl7Y29uc3QgdD10aGlzLl9nZXRXaW5kb3coKTtyZXR1cm4gdCYmKHQuX19rYXJtYV9ffHx0Lmphc21pbmUpfV9jaGVja0RvY3R5cGVJc0RlZmluZWQoKXt0aGlzLl9jaGVja0lzRW5hYmxlZCgiZG9jdHlwZSIpJiYhdGhpcy5fZG9jdW1lbnQuZG9jdHlwZSYmY29uc29sZS53YXJuKCJDdXJyZW50IGRvY3VtZW50IGRvZXMgbm90IGhhdmUgYSBkb2N0eXBlLiBUaGlzIG1heSBjYXVzZSBzb21lIEFuZ3VsYXIgTWF0ZXJpYWwgY29tcG9uZW50cyBub3QgdG8gYmVoYXZlIGFzIGV4cGVjdGVkLiIpfV9jaGVja1RoZW1lSXNQcmVzZW50KCl7aWYoIXRoaXMuX2NoZWNrSXNFbmFibGVkKCJ0aGVtZSIpfHwhdGhpcy5fZG9jdW1lbnQuYm9keXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGdldENvbXB1dGVkU3R5bGUpcmV0dXJuO2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc0xpc3QuYWRkKCJtYXQtdGhlbWUtbG9hZGVkLW1hcmtlciIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCk7Y29uc3QgZT1nZXRDb21wdXRlZFN0eWxlKHQpO2UmJiJub25lIiE9PWUuZGlzcGxheSYmY29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBBbmd1bGFyIE1hdGVyaWFsIGNvcmUgdGhlbWUuIE1vc3QgTWF0ZXJpYWwgY29tcG9uZW50cyBtYXkgbm90IHdvcmsgYXMgZXhwZWN0ZWQuIEZvciBtb3JlIGluZm8gcmVmZXIgdG8gdGhlIHRoZW1pbmcgZ3VpZGU6IGh0dHBzOi8vbWF0ZXJpYWwuYW5ndWxhci5pby9ndWlkZS90aGVtaW5nIiksdGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KX1fY2hlY2tDZGtWZXJzaW9uTWF0Y2goKXt0aGlzLl9jaGVja0lzRW5hYmxlZCgidmVyc2lvbiIpJiZZSS5mdWxsIT09QkkuZnVsbCYmY29uc29sZS53YXJuKCJUaGUgQW5ndWxhciBNYXRlcmlhbCB2ZXJzaW9uICgiK1lJLmZ1bGwrIikgZG9lcyBub3QgbWF0Y2ggdGhlIEFuZ3VsYXIgQ0RLIHZlcnNpb24gKCIrQkkuZnVsbCsiKS5cblBsZWFzZSBlbnN1cmUgdGhlIHZlcnNpb25zIG9mIHRoZXNlIHR3byBwYWNrYWdlcyBleGFjdGx5IG1hdGNoLiIpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIEtJKHQpe3JldHVybiBjbGFzcyBleHRlbmRzIHR7Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fZGlzYWJsZWQ9ITF9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZCh0KXt0aGlzLl9kaXNhYmxlZD15eih0KX19fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBKSSh0LGUpe3JldHVybiBjbGFzcyBleHRlbmRzIHR7Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5kZWZhdWx0Q29sb3I9ZSx0aGlzLmNvbG9yPWV9Z2V0IGNvbG9yKCl7cmV0dXJuIHRoaXMuX2NvbG9yfXNldCBjb2xvcih0KXtjb25zdCBlPXR8fHRoaXMuZGVmYXVsdENvbG9yO2UhPT10aGlzLl9jb2xvciYmKHRoaXMuX2NvbG9yJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShgbWF0LSR7dGhpcy5fY29sb3J9YCksZSYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoYG1hdC0ke2V9YCksdGhpcy5fY29sb3I9ZSl9fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gUUkodCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgdHtjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLl9kaXNhYmxlUmlwcGxlPSExfWdldCBkaXNhYmxlUmlwcGxlKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVSaXBwbGV9c2V0IGRpc2FibGVSaXBwbGUodCl7dGhpcy5fZGlzYWJsZVJpcHBsZT15eih0KX19fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiAkSSh0LGU9MCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgdHtjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLl90YWJJbmRleD1lLHRoaXMuZGVmYXVsdFRhYkluZGV4PWV9Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/LTE6dGhpcy5fdGFiSW5kZXh9c2V0IHRhYkluZGV4KHQpe3RoaXMuX3RhYkluZGV4PW51bGwhPXQ/X3oodCk6dGhpcy5kZWZhdWx0VGFiSW5kZXh9fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gdEgodCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgdHtjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLnN0YXRlQ2hhbmdlcz1uZXcgSSx0aGlzLmVycm9yU3RhdGU9ITF9dXBkYXRlRXJyb3JTdGF0ZSgpe2NvbnN0IHQ9dGhpcy5lcnJvclN0YXRlLGU9KHRoaXMuZXJyb3JTdGF0ZU1hdGNoZXJ8fHRoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcikuaXNFcnJvclN0YXRlKHRoaXMubmdDb250cm9sP3RoaXMubmdDb250cm9sLmNvbnRyb2w6bnVsbCx0aGlzLl9wYXJlbnRGb3JtR3JvdXB8fHRoaXMuX3BhcmVudEZvcm0pO2UhPT10JiYodGhpcy5lcnJvclN0YXRlPWUsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX19fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBlSCh0KXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0e2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX2lzSW5pdGlhbGl6ZWQ9ITEsdGhpcy5fcGVuZGluZ1N1YnNjcmliZXJzPVtdLHRoaXMuaW5pdGlhbGl6ZWQ9bmV3IEQoKHQ9Pnt0aGlzLl9pc0luaXRpYWxpemVkP3RoaXMuX25vdGlmeVN1YnNjcmliZXIodCk6dGhpcy5fcGVuZGluZ1N1YnNjcmliZXJzLnB1c2godCl9KSl9X21hcmtJbml0aWFsaXplZCgpe2lmKHRoaXMuX2lzSW5pdGlhbGl6ZWQmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyBFcnJvcigiVGhpcyBkaXJlY3RpdmUgaGFzIGFscmVhZHkgYmVlbiBtYXJrZWQgYXMgaW5pdGlhbGl6ZWQgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIHR3aWNlLiIpO3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5fcGVuZGluZ1N1YnNjcmliZXJzLmZvckVhY2godGhpcy5fbm90aWZ5U3Vic2NyaWJlciksdGhpcy5fcGVuZGluZ1N1YnNjcmliZXJzPW51bGx9X25vdGlmeVN1YnNjcmliZXIodCl7dC5uZXh0KCksdC5jb21wbGV0ZSgpfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9YSS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WEkpKHZyKFRJKSx2cihxSSw4KSx2cihaXykpfSxYSS7JtW1vZD1hbyh7dHlwZTpYSX0pLFhJLsm1aW5qPXZuKHtpbXBvcnRzOltbTEldLExJXX0pLFhJLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VEl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbcUldfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoWEksW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltMSV0sZXhwb3J0czpbTEldfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6VEl9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbcUldfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dfSksbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhYSSx7aW1wb3J0czpmdW5jdGlvbigpe3JldHVybltMSV19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bTEldfX0pO2NvbnN0IG5IPW5ldyBHYSgiTUFUX0RBVEVfTE9DQUxFIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBvSCgpe3JldHVybiBPcihXeSl9fSk7Y2xhc3MgaUh7Y29uc3RydWN0b3IoKXt0aGlzLl9sb2NhbGVDaGFuZ2VzPW5ldyBJLHRoaXMubG9jYWxlQ2hhbmdlcz10aGlzLl9sb2NhbGVDaGFuZ2VzfWdldFZhbGlkRGF0ZU9yTnVsbCh0KXtyZXR1cm4gdGhpcy5pc0RhdGVJbnN0YW5jZSh0KSYmdGhpcy5pc1ZhbGlkKHQpP3Q6bnVsbH1kZXNlcmlhbGl6ZSh0KXtyZXR1cm4gbnVsbD09dHx8dGhpcy5pc0RhdGVJbnN0YW5jZSh0KSYmdGhpcy5pc1ZhbGlkKHQpP3Q6dGhpcy5pbnZhbGlkKCl9c2V0TG9jYWxlKHQpe3RoaXMubG9jYWxlPXQsdGhpcy5fbG9jYWxlQ2hhbmdlcy5uZXh0KCl9Y29tcGFyZURhdGUodCxlKXtyZXR1cm4gdGhpcy5nZXRZZWFyKHQpLXRoaXMuZ2V0WWVhcihlKXx8dGhpcy5nZXRNb250aCh0KS10aGlzLmdldE1vbnRoKGUpfHx0aGlzLmdldERhdGUodCktdGhpcy5nZXREYXRlKGUpfXNhbWVEYXRlKHQsZSl7aWYodCYmZSl7bGV0IG49dGhpcy5pc1ZhbGlkKHQpLG89dGhpcy5pc1ZhbGlkKGUpO3JldHVybiBuJiZvPyF0aGlzLmNvbXBhcmVEYXRlKHQsZSk6bj09b31yZXR1cm4gdD09ZX1jbGFtcERhdGUodCxlLG4pe3JldHVybiBlJiZ0aGlzLmNvbXBhcmVEYXRlKHQsZSk8MD9lOm4mJnRoaXMuY29tcGFyZURhdGUodCxuKT4wP246dH19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IGFIPW5ldyBHYSgibWF0LWRhdGUtZm9ybWF0cyIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9sZXQgckg7dHJ5e3JIPSJ1bmRlZmluZWQiIT10eXBlb2YgSW50bH1jYXRjaChqQ3Qpe3JIPSExfWNvbnN0IHNIPXtsb25nOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLG5hcnJvdzpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdfSxsSD1wSCgzMSwodD0+U3RyaW5nKHQrMSkpKSxjSD17bG9uZzpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxuYXJyb3c6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl19LGRIPS9eXGR7NH0tXGR7Mn0tXGR7Mn0oPzpUXGR7Mn06XGR7Mn06XGR7Mn0oPzpcLlxkKyk/KD86WnwoPzooPzpcK3wtKVxkezJ9OlxkezJ9KSk/KT8kLztmdW5jdGlvbiBwSCh0LGUpe2NvbnN0IG49QXJyYXkodCk7Zm9yKGxldCBvPTA7bzx0O28rKyluW29dPWUobyk7cmV0dXJuIG59Y2xhc3MgbUggZXh0ZW5kcyBpSHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy51c2VVdGNGb3JEaXNwbGF5PSEwLHN1cGVyLnNldExvY2FsZSh0KSx0aGlzLnVzZVV0Y0ZvckRpc3BsYXk9IWUuVFJJREVOVCx0aGlzLl9jbGFtcERhdGU9ZS5UUklERU5UfHxlLkVER0V9Z2V0WWVhcih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfWdldE1vbnRoKHQpe3JldHVybiB0LmdldE1vbnRoKCl9Z2V0RGF0ZSh0KXtyZXR1cm4gdC5nZXREYXRlKCl9Z2V0RGF5T2ZXZWVrKHQpe3JldHVybiB0LmdldERheSgpfWdldE1vbnRoTmFtZXModCl7aWYockgpe2NvbnN0IGU9bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUse21vbnRoOnQsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4gcEgoMTIsKHQ9PnRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHRoaXMuX2Zvcm1hdChlLG5ldyBEYXRlKDIwMTcsdCwxKSkpKSl9cmV0dXJuIHNIW3RdfWdldERhdGVOYW1lcygpe2lmKHJIKXtjb25zdCB0PW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLHtkYXk6Im51bWVyaWMiLHRpbWVab25lOiJ1dGMifSk7cmV0dXJuIHBIKDMxLChlPT50aGlzLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0aGlzLl9mb3JtYXQodCxuZXcgRGF0ZSgyMDE3LDAsZSsxKSkpKSl9cmV0dXJuIGxIfWdldERheU9mV2Vla05hbWVzKHQpe2lmKHJIKXtjb25zdCBlPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLHt3ZWVrZGF5OnQsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4gcEgoNywodD0+dGhpcy5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModGhpcy5fZm9ybWF0KGUsbmV3IERhdGUoMjAxNywwLHQrMSkpKSkpfXJldHVybiBjSFt0XX1nZXRZZWFyTmFtZSh0KXtpZihySCl7Y29uc3QgZT1uZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSx7eWVhcjoibnVtZXJpYyIsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4gdGhpcy5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModGhpcy5fZm9ybWF0KGUsdCkpfXJldHVybiBTdHJpbmcodGhpcy5nZXRZZWFyKHQpKX1nZXRGaXJzdERheU9mV2Vlaygpe3JldHVybiAwfWdldE51bURheXNJbk1vbnRoKHQpe3JldHVybiB0aGlzLmdldERhdGUodGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIodCksdGhpcy5nZXRNb250aCh0KSsxLDApKX1jbG9uZSh0KXtyZXR1cm4gbmV3IERhdGUodC5nZXRUaW1lKCkpfWNyZWF0ZURhdGUodCxlLG4pe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpe2lmKGU8MHx8ZT4xMSl0aHJvdyBFcnJvcihgSW52YWxpZCBtb250aCBpbmRleCAiJHtlfSIuIE1vbnRoIGluZGV4IGhhcyB0byBiZSBiZXR3ZWVuIDAgYW5kIDExLmApO2lmKG48MSl0aHJvdyBFcnJvcihgSW52YWxpZCBkYXRlICIke259Ii4gRGF0ZSBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuYCl9bGV0IG89dGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0LGUsbik7aWYoby5nZXRNb250aCgpIT1lJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgRXJyb3IoYEludmFsaWQgZGF0ZSAiJHtufSIgZm9yIG1vbnRoIHdpdGggaW5kZXggIiR7ZX0iLmApO3JldHVybiBvfXRvZGF5KCl7cmV0dXJuIG5ldyBEYXRlfXBhcnNlKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdD9uZXcgRGF0ZSh0KTp0P25ldyBEYXRlKERhdGUucGFyc2UodCkpOm51bGx9Zm9ybWF0KHQsZSl7aWYoIXRoaXMuaXNWYWxpZCh0KSl0aHJvdyBFcnJvcigiTmF0aXZlRGF0ZUFkYXB0ZXI6IENhbm5vdCBmb3JtYXQgaW52YWxpZCBkYXRlLiIpO2lmKHJIKXt0aGlzLl9jbGFtcERhdGUmJih0LmdldEZ1bGxZZWFyKCk8MXx8dC5nZXRGdWxsWWVhcigpPjk5OTkpJiYodD10aGlzLmNsb25lKHQpKS5zZXRGdWxsWWVhcihNYXRoLm1heCgxLE1hdGgubWluKDk5OTksdC5nZXRGdWxsWWVhcigpKSkpLGU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHt0aW1lWm9uZToidXRjIn0pO2NvbnN0IG49bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsZSk7cmV0dXJuIHRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHRoaXMuX2Zvcm1hdChuLHQpKX1yZXR1cm4gdGhpcy5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModC50b0RhdGVTdHJpbmcoKSl9YWRkQ2FsZW5kYXJZZWFycyh0LGUpe3JldHVybiB0aGlzLmFkZENhbGVuZGFyTW9udGhzKHQsMTIqZSl9YWRkQ2FsZW5kYXJNb250aHModCxlKXtsZXQgbj10aGlzLl9jcmVhdGVEYXRlV2l0aE92ZXJmbG93KHRoaXMuZ2V0WWVhcih0KSx0aGlzLmdldE1vbnRoKHQpK2UsdGhpcy5nZXREYXRlKHQpKTtyZXR1cm4gdGhpcy5nZXRNb250aChuKSE9KCh0aGlzLmdldE1vbnRoKHQpK2UpJTEyKzEyKSUxMiYmKG49dGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIobiksdGhpcy5nZXRNb250aChuKSwwKSksbn1hZGRDYWxlbmRhckRheXModCxlKXtyZXR1cm4gdGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIodCksdGhpcy5nZXRNb250aCh0KSx0aGlzLmdldERhdGUodCkrZSl9dG9Jc284NjAxKHQpe3JldHVyblt0LmdldFVUQ0Z1bGxZZWFyKCksdGhpcy5fMmRpZ2l0KHQuZ2V0VVRDTW9udGgoKSsxKSx0aGlzLl8yZGlnaXQodC5nZXRVVENEYXRlKCkpXS5qb2luKCItIil9ZGVzZXJpYWxpemUodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZighdClyZXR1cm4gbnVsbDtpZihkSC50ZXN0KHQpKXtsZXQgZT1uZXcgRGF0ZSh0KTtpZih0aGlzLmlzVmFsaWQoZSkpcmV0dXJuIGV9fXJldHVybiBzdXBlci5kZXNlcmlhbGl6ZSh0KX1pc0RhdGVJbnN0YW5jZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGV9aXNWYWxpZCh0KXtyZXR1cm4haXNOYU4odC5nZXRUaW1lKCkpfWludmFsaWQoKXtyZXR1cm4gbmV3IERhdGUoTmFOKX1fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0LGUsbil7Y29uc3Qgbz1uZXcgRGF0ZTtyZXR1cm4gby5zZXRGdWxsWWVhcih0LGUsbiksby5zZXRIb3VycygwLDAsMCwwKSxvfV8yZGlnaXQodCl7cmV0dXJuKCIwMCIrdCkuc2xpY2UoLTIpfV9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bXHUyMDBlXHUyMDBmXS9nLCIiKX1fZm9ybWF0KHQsZSl7Y29uc3Qgbj1uZXcgRGF0ZTtyZXR1cm4gbi5zZXRVVENGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLGUuZ2V0RGF0ZSgpKSxuLnNldFVUQ0hvdXJzKGUuZ2V0SG91cnMoKSxlLmdldE1pbnV0ZXMoKSxlLmdldFNlY29uZHMoKSxlLmdldE1pbGxpc2Vjb25kcygpKSx0LmZvcm1hdChuKX19bUguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG1IKSh2cihuSCw4KSx2cih3eikpfSxtSC7JtXByb3Y9TW4oe3Rva2VuOm1ILGZhY3Rvcnk6bUguybVmYWN9KSxtSC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbbkhdfV19LHt0eXBlOnd6fV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChtSCxbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltuSF19XX0se3R5cGU6d3p9XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgdUh7fXVILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx1SCl9LHVILsm1bW9kPWFvKHt0eXBlOnVIfSksdUguybVpbmo9dm4oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6aUgsdXNlQ2xhc3M6bUh9XSxpbXBvcnRzOltba3pdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgodUgsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltrel0scHJvdmlkZXJzOlt7cHJvdmlkZTppSCx1c2VDbGFzczptSH1dfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8odUgse2ltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5ba3pdfX0pO2NvbnN0IGZIPXtwYXJzZTp7ZGF0ZUlucHV0Om51bGx9LGRpc3BsYXk6e2RhdGVJbnB1dDp7eWVhcjoibnVtZXJpYyIsbW9udGg6Im51bWVyaWMiLGRheToibnVtZXJpYyJ9LG1vbnRoWWVhckxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQifSxkYXRlQTExeUxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIn0sbW9udGhZZWFyQTExeUxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyJ9fX07Y2xhc3MgZ0h7fWdILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxnSCl9LGdILsm1bW9kPWFvKHt0eXBlOmdIfSksZ0guybVpbmo9dm4oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6YUgsdXNlVmFsdWU6Zkh9XSxpbXBvcnRzOltbdUhdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoZ0gsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOlt1SF0scHJvdmlkZXJzOlt7cHJvdmlkZTphSCx1c2VWYWx1ZTpmSH1dfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oZ0gse2ltcG9ydHM6W3VIXX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgaEh7aXNFcnJvclN0YXRlKHQsZSl7cmV0dXJuISEodCYmdC5pbnZhbGlkJiYodC5kaXJ0eXx8ZSYmZS5zdWJtaXR0ZWQpKX19aEguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGhIKX0saEguybVwcm92PU1uKHt0b2tlbjpoSCxmYWN0b3J5OmhILsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChoSCxbe3R5cGU6aW19XSxudWxsLG51bGwpO2NsYXNzIGJIe2lzRXJyb3JTdGF0ZSh0LGUpe3JldHVybiEhKHQmJnQuaW52YWxpZCYmKHQudG91Y2hlZHx8ZSYmZS5zdWJtaXR0ZWQpKX19YkguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGJIKX0sYkguybVwcm92PU1uKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IGJIfSx0b2tlbjpiSCxwcm92aWRlZEluOiJyb290In0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoYkgsW3t0eXBlOmltLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIHlIe315SC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8eUgpfSx5SC7JtWRpcj1sbyh7dHlwZTp5SCxzZWxlY3RvcnM6W1siIiwibWF0LWxpbmUiLCIiXSxbIiIsIm1hdExpbmUiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtbGluZSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh5SCxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbbWF0LWxpbmVdLCBbbWF0TGluZV0iLGhvc3Q6e2NsYXNzOiJtYXQtbGluZSJ9fV19XSxudWxsLG51bGwpO2NsYXNzIF9Ie31fSC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8X0gpfSxfSC7JtW1vZD1hbyh7dHlwZTpfSH0pLF9ILsm1aW5qPXZuKHtpbXBvcnRzOltbWEldLFhJXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoX0gsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltYSV0sZXhwb3J0czpbeUgsWEldLGRlY2xhcmF0aW9uczpbeUhdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oX0gse2RlY2xhcmF0aW9uczpbeUhdLGltcG9ydHM6W1hJXSxleHBvcnRzOlt5SCxYSV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIENIe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuY29uZmlnPW4sdGhpcy5zdGF0ZT0zfWZhZGVPdXQoKXt0aGlzLl9yZW5kZXJlci5mYWRlT3V0UmlwcGxlKHRoaXMpfX1jb25zdCBNSD17ZW50ZXJEdXJhdGlvbjoyMjUsZXhpdER1cmF0aW9uOjE1MH0sdkg9Tnooe3Bhc3NpdmU6ITB9KSx4SD1bIm1vdXNlZG93biIsInRvdWNoc3RhcnQiXSxPSD1bIm1vdXNldXAiLCJtb3VzZWxlYXZlIiwidG91Y2hlbmQiLCJ0b3VjaGNhbmNlbCJdO2NsYXNzIFBIe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuX3RhcmdldD10LHRoaXMuX25nWm9uZT1lLHRoaXMuX2lzUG9pbnRlckRvd249ITEsdGhpcy5fYWN0aXZlUmlwcGxlcz1uZXcgU2V0LHRoaXMuX3BvaW50ZXJVcEV2ZW50c1JlZ2lzdGVyZWQ9ITEsby5pc0Jyb3dzZXImJih0aGlzLl9jb250YWluZXJFbGVtZW50PXh6KG4pKX1mYWRlSW5SaXBwbGUodCxlLG49e30pe2NvbnN0IG89dGhpcy5fY29udGFpbmVyUmVjdD10aGlzLl9jb250YWluZXJSZWN0fHx0aGlzLl9jb250YWluZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LE1IKSxuLmFuaW1hdGlvbik7bi5jZW50ZXJlZCYmKHQ9by5sZWZ0K28ud2lkdGgvMixlPW8udG9wK28uaGVpZ2h0LzIpO2NvbnN0IGE9bi5yYWRpdXN8fChmdW5jdGlvbiByKHQsZSxuKXtjb25zdCBvPU1hdGgubWF4KE1hdGguYWJzKHQtbi5sZWZ0KSxNYXRoLmFicyh0LW4ucmlnaHQpKSxpPU1hdGgubWF4KE1hdGguYWJzKGUtbi50b3ApLE1hdGguYWJzKGUtbi5ib3R0b20pKTtyZXR1cm4gTWF0aC5zcXJ0KG8qbytpKmkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKHQsZSxvKSxzPXQtby5sZWZ0LGw9ZS1vLnRvcCxjPWkuZW50ZXJEdXJhdGlvbixkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuY2xhc3NMaXN0LmFkZCgibWF0LXJpcHBsZS1lbGVtZW50IiksZC5zdHlsZS5sZWZ0PXMtYSsicHgiLGQuc3R5bGUudG9wPWwtYSsicHgiLGQuc3R5bGUuaGVpZ2h0PTIqYSsicHgiLGQuc3R5bGUud2lkdGg9MiphKyJweCIsbnVsbCE9bi5jb2xvciYmKGQuc3R5bGUuYmFja2dyb3VuZENvbG9yPW4uY29sb3IpLGQuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWAke2N9bXNgLHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQoZCksKGZ1bmN0aW9uIHAodCl7d2luZG93LmdldENvbXB1dGVkU3R5bGUodCkuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpfSkoZCksZC5zdHlsZS50cmFuc2Zvcm09InNjYWxlKDEpIjtjb25zdCBtPW5ldyBDSCh0aGlzLGQsbik7cmV0dXJuIG0uc3RhdGU9MCx0aGlzLl9hY3RpdmVSaXBwbGVzLmFkZChtKSxuLnBlcnNpc3RlbnR8fCh0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPW0pLHRoaXMuX3J1blRpbWVvdXRPdXRzaWRlWm9uZSgoKCk9Pntjb25zdCB0PW09PT10aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlO20uc3RhdGU9MSxuLnBlcnNpc3RlbnR8fHQmJnRoaXMuX2lzUG9pbnRlckRvd258fG0uZmFkZU91dCgpfSksYyksbX1mYWRlT3V0UmlwcGxlKHQpe2NvbnN0IGU9dGhpcy5fYWN0aXZlUmlwcGxlcy5kZWxldGUodCk7aWYodD09PXRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGUmJih0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPW51bGwpLHRoaXMuX2FjdGl2ZVJpcHBsZXMuc2l6ZXx8KHRoaXMuX2NvbnRhaW5lclJlY3Q9bnVsbCksIWUpcmV0dXJuO2NvbnN0IG49dC5lbGVtZW50LG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LE1IKSx0LmNvbmZpZy5hbmltYXRpb24pO24uc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWAke28uZXhpdER1cmF0aW9ufW1zYCxuLnN0eWxlLm9wYWNpdHk9IjAiLHQuc3RhdGU9Mix0aGlzLl9ydW5UaW1lb3V0T3V0c2lkZVpvbmUoKCgpPT57dC5zdGF0ZT0zLG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX0pLG8uZXhpdER1cmF0aW9uKX1mYWRlT3V0QWxsKCl7dGhpcy5fYWN0aXZlUmlwcGxlcy5mb3JFYWNoKCh0PT50LmZhZGVPdXQoKSkpfWZhZGVPdXRBbGxOb25QZXJzaXN0ZW50KCl7dGhpcy5fYWN0aXZlUmlwcGxlcy5mb3JFYWNoKCh0PT57dC5jb25maWcucGVyc2lzdGVudHx8dC5mYWRlT3V0KCl9KSl9c2V0dXBUcmlnZ2VyRXZlbnRzKHQpe2NvbnN0IGU9eHoodCk7ZSYmZSE9PXRoaXMuX3RyaWdnZXJFbGVtZW50JiYodGhpcy5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpLHRoaXMuX3RyaWdnZXJFbGVtZW50PWUsdGhpcy5fcmVnaXN0ZXJFdmVudHMoeEgpKX1oYW5kbGVFdmVudCh0KXsibW91c2Vkb3duIj09PXQudHlwZT90aGlzLl9vbk1vdXNlZG93bih0KToidG91Y2hzdGFydCI9PT10LnR5cGU/dGhpcy5fb25Ub3VjaFN0YXJ0KHQpOnRoaXMuX29uUG9pbnRlclVwKCksdGhpcy5fcG9pbnRlclVwRXZlbnRzUmVnaXN0ZXJlZHx8KHRoaXMuX3JlZ2lzdGVyRXZlbnRzKE9IKSx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkPSEwKX1fb25Nb3VzZWRvd24odCl7Y29uc3QgZT1nSSh0KSxuPXRoaXMuX2xhc3RUb3VjaFN0YXJ0RXZlbnQmJkRhdGUubm93KCk8dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudCs4MDA7dGhpcy5fdGFyZ2V0LnJpcHBsZURpc2FibGVkfHxlfHxufHwodGhpcy5faXNQb2ludGVyRG93bj0hMCx0aGlzLmZhZGVJblJpcHBsZSh0LmNsaWVudFgsdC5jbGllbnRZLHRoaXMuX3RhcmdldC5yaXBwbGVDb25maWcpKX1fb25Ub3VjaFN0YXJ0KHQpe2lmKCF0aGlzLl90YXJnZXQucmlwcGxlRGlzYWJsZWQmJiFoSSh0KSl7dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudD1EYXRlLm5vdygpLHRoaXMuX2lzUG9pbnRlckRvd249ITA7Y29uc3QgZT10LmNoYW5nZWRUb3VjaGVzO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXRoaXMuZmFkZUluUmlwcGxlKGVbdF0uY2xpZW50WCxlW3RdLmNsaWVudFksdGhpcy5fdGFyZ2V0LnJpcHBsZUNvbmZpZyl9fV9vblBvaW50ZXJVcCgpe3RoaXMuX2lzUG9pbnRlckRvd24mJih0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX2FjdGl2ZVJpcHBsZXMuZm9yRWFjaCgodD0+eyF0LmNvbmZpZy5wZXJzaXN0ZW50JiYoMT09PXQuc3RhdGV8fHQuY29uZmlnLnRlcm1pbmF0ZU9uUG9pbnRlclVwJiYwPT09dC5zdGF0ZSkmJnQuZmFkZU91dCgpfSkpKX1fcnVuVGltZW91dE91dHNpZGVab25lKHQsZT0wKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT5zZXRUaW1lb3V0KHQsZSkpKX1fcmVnaXN0ZXJFdmVudHModCl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e3QuZm9yRWFjaCgodD0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodCx0aGlzLHZIKX0pKX0pKX1fcmVtb3ZlVHJpZ2dlckV2ZW50cygpe3RoaXMuX3RyaWdnZXJFbGVtZW50JiYoeEguZm9yRWFjaCgodD0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodCx0aGlzLHZIKX0pKSx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkJiZPSC5mb3JFYWNoKCh0PT57dGhpcy5fdHJpZ2dlckVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LHRoaXMsdkgpfSkpKX19Y29uc3Qgd0g9bmV3IEdhKCJtYXQtcmlwcGxlLWdsb2JhbC1vcHRpb25zIik7Y2xhc3Mga0h7Y29uc3RydWN0b3IodCxlLG4sbyxpKXt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fYW5pbWF0aW9uTW9kZT1pLHRoaXMucmFkaXVzPTAsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9nbG9iYWxPcHRpb25zPW98fHt9LHRoaXMuX3JpcHBsZVJlbmRlcmVyPW5ldyBQSCh0aGlzLGUsdCxuKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKHQpe3QmJnRoaXMuZmFkZU91dEFsbE5vblBlcnNpc3RlbnQoKSx0aGlzLl9kaXNhYmxlZD10LHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfWdldCB0cmlnZ2VyKCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1zZXQgdHJpZ2dlcih0KXt0aGlzLl90cmlnZ2VyPXQsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9bmdPbkluaXQoKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwLHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfW5nT25EZXN0cm95KCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuX3JlbW92ZVRyaWdnZXJFdmVudHMoKX1mYWRlT3V0QWxsKCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZU91dEFsbCgpfWZhZGVPdXRBbGxOb25QZXJzaXN0ZW50KCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZU91dEFsbE5vblBlcnNpc3RlbnQoKX1nZXQgcmlwcGxlQ29uZmlnKCl7cmV0dXJue2NlbnRlcmVkOnRoaXMuY2VudGVyZWQscmFkaXVzOnRoaXMucmFkaXVzLGNvbG9yOnRoaXMuY29sb3IsYW5pbWF0aW9uOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuX2dsb2JhbE9wdGlvbnMuYW5pbWF0aW9uKSwiTm9vcEFuaW1hdGlvbnMiPT09dGhpcy5fYW5pbWF0aW9uTW9kZT97ZW50ZXJEdXJhdGlvbjowLGV4aXREdXJhdGlvbjowfTp7fSksdGhpcy5hbmltYXRpb24pLHRlcm1pbmF0ZU9uUG9pbnRlclVwOnRoaXMuX2dsb2JhbE9wdGlvbnMudGVybWluYXRlT25Qb2ludGVyVXB9fWdldCByaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhIXRoaXMuX2dsb2JhbE9wdGlvbnMuZGlzYWJsZWR9X3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpeyF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pc0luaXRpYWxpemVkJiZ0aGlzLl9yaXBwbGVSZW5kZXJlci5zZXR1cFRyaWdnZXJFdmVudHModGhpcy50cmlnZ2VyKX1sYXVuY2godCxlPTAsbil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVJblJpcHBsZSh0LGUsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMucmlwcGxlQ29uZmlnKSxuKSk6dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZUluUmlwcGxlKDAsMCxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5yaXBwbGVDb25maWcpLHQpKX19a0guybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGtIKShTbShoZyksU20oYV8pLFNtKHd6KSxTbSh3SCw4KSxTbShWUCw4KSl9LGtILsm1ZGlyPWxvKHt0eXBlOmtILHNlbGVjdG9yczpbWyIiLCJtYXQtcmlwcGxlIiwiIl0sWyIiLCJtYXRSaXBwbGUiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtcmlwcGxlIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmcHUoIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixuLnVuYm91bmRlZCl9LGlucHV0czp7cmFkaXVzOlsibWF0UmlwcGxlUmFkaXVzIiwicmFkaXVzIl0sZGlzYWJsZWQ6WyJtYXRSaXBwbGVEaXNhYmxlZCIsImRpc2FibGVkIl0sdHJpZ2dlcjpbIm1hdFJpcHBsZVRyaWdnZXIiLCJ0cmlnZ2VyIl0sY29sb3I6WyJtYXRSaXBwbGVDb2xvciIsImNvbG9yIl0sdW5ib3VuZGVkOlsibWF0UmlwcGxlVW5ib3VuZGVkIiwidW5ib3VuZGVkIl0sY2VudGVyZWQ6WyJtYXRSaXBwbGVDZW50ZXJlZCIsImNlbnRlcmVkIl0sYW5pbWF0aW9uOlsibWF0UmlwcGxlQW5pbWF0aW9uIiwiYW5pbWF0aW9uIl19LGV4cG9ydEFzOlsibWF0UmlwcGxlIl19KSxrSC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTphX30se3R5cGU6d3p9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbd0hdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbVlBdfV19XSxrSC5wcm9wRGVjb3JhdG9ycz17Y29sb3I6W3t0eXBlOnh5LGFyZ3M6WyJtYXRSaXBwbGVDb2xvciJdfV0sdW5ib3VuZGVkOlt7dHlwZTp4eSxhcmdzOlsibWF0UmlwcGxlVW5ib3VuZGVkIl19XSxjZW50ZXJlZDpbe3R5cGU6eHksYXJnczpbIm1hdFJpcHBsZUNlbnRlcmVkIl19XSxyYWRpdXM6W3t0eXBlOnh5LGFyZ3M6WyJtYXRSaXBwbGVSYWRpdXMiXX1dLGFuaW1hdGlvbjpbe3R5cGU6eHksYXJnczpbIm1hdFJpcHBsZUFuaW1hdGlvbiJdfV0sZGlzYWJsZWQ6W3t0eXBlOnh5LGFyZ3M6WyJtYXRSaXBwbGVEaXNhYmxlZCJdfV0sdHJpZ2dlcjpbe3R5cGU6eHksYXJnczpbIm1hdFJpcHBsZVRyaWdnZXIiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGtILFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6IlttYXQtcmlwcGxlXSwgW21hdFJpcHBsZV0iLGV4cG9ydEFzOiJtYXRSaXBwbGUiLGhvc3Q6e2NsYXNzOiJtYXQtcmlwcGxlIiwiW2NsYXNzLm1hdC1yaXBwbGUtdW5ib3VuZGVkXSI6InVuYm91bmRlZCJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9LHt0eXBlOmFffSx7dHlwZTp3en0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOlt3SF19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltWUF19XX1dfSkse3JhZGl1czpbe3R5cGU6eHksYXJnczpbIm1hdFJpcHBsZVJhZGl1cyJdfV0sZGlzYWJsZWQ6W3t0eXBlOnh5LGFyZ3M6WyJtYXRSaXBwbGVEaXNhYmxlZCJdfV0sdHJpZ2dlcjpbe3R5cGU6eHksYXJnczpbIm1hdFJpcHBsZVRyaWdnZXIiXX1dLGNvbG9yOlt7dHlwZTp4eSxhcmdzOlsibWF0UmlwcGxlQ29sb3IiXX1dLHVuYm91bmRlZDpbe3R5cGU6eHksYXJnczpbIm1hdFJpcHBsZVVuYm91bmRlZCJdfV0sY2VudGVyZWQ6W3t0eXBlOnh5LGFyZ3M6WyJtYXRSaXBwbGVDZW50ZXJlZCJdfV0sYW5pbWF0aW9uOlt7dHlwZTp4eSxhcmdzOlsibWF0UmlwcGxlQW5pbWF0aW9uIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgU0h7fVNILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxTSCl9LFNILsm1bW9kPWFvKHt0eXBlOlNIfSksU0guybVpbmo9dm4oe2ltcG9ydHM6W1tYSSxrel0sWEldfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChTSCxbe3R5cGU6QXksYXJnczpbe2ltcG9ydHM6W1hJLGt6XSxleHBvcnRzOltrSCxYSV0sZGVjbGFyYXRpb25zOltrSF19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhTSCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW2tIXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltYSSxrel19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5ba0gsWEldfX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgREh7Y29uc3RydWN0b3IodCl7dGhpcy5fYW5pbWF0aW9uTW9kZT10LHRoaXMuc3RhdGU9InVuY2hlY2tlZCIsdGhpcy5kaXNhYmxlZD0hMX19REguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fERIKShTbShWUCw4KSl9LERILsm1Y21wPXRvKHt0eXBlOkRILHNlbGVjdG9yczpbWyJtYXQtcHNldWRvLWNoZWNrYm94Il1dLGhvc3RBdHRyczpbMSwibWF0LXBzZXVkby1jaGVja2JveCJdLGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJnB1KCJtYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUiLCJpbmRldGVybWluYXRlIj09PW4uc3RhdGUpKCJtYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQiLCJjaGVja2VkIj09PW4uc3RhdGUpKCJtYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkIixuLmRpc2FibGVkKSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1uLl9hbmltYXRpb25Nb2RlKX0saW5wdXRzOntzdGF0ZToic3RhdGUiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXt9LHN0eWxlczpbJy5tYXQtcHNldWRvLWNoZWNrYm94e3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7Ym9yZGVyOjJweCBzb2xpZDtib3JkZXItcmFkaXVzOjJweDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjA7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpLGJhY2tncm91bmQtY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpfS5tYXQtcHNldWRvLWNoZWNrYm94OjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7Y29udGVudDoiIjtib3JkZXItYm90dG9tOjJweCBzb2xpZCBjdXJyZW50Q29sb3I7dHJhbnNpdGlvbjpvcGFjaXR5IDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKX0ubWF0LXBzZXVkby1jaGVja2JveC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC1wc2V1ZG8tY2hlY2tib3gubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXBzZXVkby1jaGVja2JveHt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye3RyYW5zaXRpb246bm9uZX0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlOjphZnRlcnt0b3A6NXB4O2xlZnQ6MXB4O3dpZHRoOjEwcHg7b3BhY2l0eToxO2JvcmRlci1yYWRpdXM6MnB4fS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQ6OmFmdGVye3RvcDoyLjRweDtsZWZ0OjFweDt3aWR0aDo4cHg7aGVpZ2h0OjNweDtib3JkZXItbGVmdDoycHggc29saWQgY3VycmVudENvbG9yO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKTtvcGFjaXR5OjE7Ym94LXNpemluZzpjb250ZW50LWJveH1cbiddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLERILmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltWUF19XX1dLERILnByb3BEZWNvcmF0b3JzPXtzdGF0ZTpbe3R5cGU6eHl9XSxkaXNhYmxlZDpbe3R5cGU6eHl9XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChESCxbe3R5cGU6TXksYXJnczpbe2VuY2Fwc3VsYXRpb246SG4uTm9uZSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNoLHNlbGVjdG9yOiJtYXQtcHNldWRvLWNoZWNrYm94Iix0ZW1wbGF0ZToiIixob3N0OntjbGFzczoibWF0LXBzZXVkby1jaGVja2JveCIsIltjbGFzcy5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGVdIjonc3RhdGUgPT09ICJpbmRldGVybWluYXRlIicsIltjbGFzcy5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWRdIjonc3RhdGUgPT09ICJjaGVja2VkIicsIltjbGFzcy5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkXSI6ImRpc2FibGVkIiwiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6J19hbmltYXRpb25Nb2RlID09PSAiTm9vcEFuaW1hdGlvbnMiJ30sc3R5bGVzOlsnLm1hdC1wc2V1ZG8tY2hlY2tib3h7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtib3JkZXI6MnB4IHNvbGlkO2JvcmRlci1yYWRpdXM6MnB4O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7ZmxleC1zaHJpbms6MDt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSksYmFja2dyb3VuZC1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSl9Lm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDtjb250ZW50OiIiO2JvcmRlci1ib3R0b206MnB4IHNvbGlkIGN1cnJlbnRDb2xvcjt0cmFuc2l0aW9uOm9wYWNpdHkgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpfS5tYXQtcHNldWRvLWNoZWNrYm94Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXBzZXVkby1jaGVja2JveC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcHNldWRvLWNoZWNrYm94e3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7dHJhbnNpdGlvbjpub25lfS5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGU6OmFmdGVye3RvcDo1cHg7bGVmdDoxcHg7d2lkdGg6MTBweDtvcGFjaXR5OjE7Ym9yZGVyLXJhZGl1czoycHh9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZDo6YWZ0ZXJ7dG9wOjIuNHB4O2xlZnQ6MXB4O3dpZHRoOjhweDtoZWlnaHQ6M3B4O2JvcmRlci1sZWZ0OjJweCBzb2xpZCBjdXJyZW50Q29sb3I7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpO29wYWNpdHk6MTtib3gtc2l6aW5nOmNvbnRlbnQtYm94fVxuJ119XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1ZQXX1dfV19KSx7c3RhdGU6W3t0eXBlOnh5fV0sZGlzYWJsZWQ6W3t0eXBlOnh5fV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIEVIe31FSC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RUgpfSxFSC7JtW1vZD1hbyh7dHlwZTpFSH0pLEVILsm1aW5qPXZuKHtpbXBvcnRzOltbWEldXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoRUgsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltYSV0sZXhwb3J0czpbREhdLGRlY2xhcmF0aW9uczpbREhdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oRUgse2RlY2xhcmF0aW9uczpbREhdLGltcG9ydHM6W1hJXSxleHBvcnRzOltESF19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IFJIPW5ldyBHYSgiTUFUX09QVElPTl9QQVJFTlRfQ09NUE9ORU5UIiksQUg9S0koY2xhc3N7fSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2xldCBUSD0wO2NsYXNzIE5IIGV4dGVuZHMgQUh7Y29uc3RydWN0b3IodCl7dmFyIGU7c3VwZXIoKSx0aGlzLl9sYWJlbElkPSJtYXQtb3B0Z3JvdXAtbGFiZWwtIitUSCsrLHRoaXMuX2luZXJ0PW51bGwhPT0oZT1udWxsPT10P3ZvaWQgMDp0LmluZXJ0R3JvdXBzKSYmdm9pZCAwIT09ZSYmZX19TkguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE5IKShTbShSSCw4KSl9LE5ILsm1ZGlyPWxvKHt0eXBlOk5ILGlucHV0czp7bGFiZWw6ImxhYmVsIn0sZmVhdHVyZXM6W3hwXX0pLE5ILmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1JIXX0se3R5cGU6U3J9XX1dLE5ILnByb3BEZWNvcmF0b3JzPXtsYWJlbDpbe3R5cGU6eHl9XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChOSCxbe3R5cGU6Q3l9XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1JIXX0se3R5cGU6U3J9XX1dfSkse2xhYmVsOlt7dHlwZTp4eX1dfSk7Y29uc3Qgekg9bmV3IEdhKCJNYXRPcHRncm91cCIpO2NsYXNzIElIIGV4dGVuZHMgTkh7fUlILsm1ZmFjPShmdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbiBlKG4pe3JldHVybih0fHwodD1BYShJSCkpKShufHxJSCl9fSkoKSxJSC7JtWNtcD10byh7dHlwZTpJSCxzZWxlY3RvcnM6W1sibWF0LW9wdGdyb3VwIl1dLGhvc3RBdHRyczpbMSwibWF0LW9wdGdyb3VwIl0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmKGpwKCJyb2xlIixuLl9pbmVydD9udWxsOiJncm91cCIpKCJhcmlhLWRpc2FibGVkIixuLl9pbmVydD9udWxsOm4uZGlzYWJsZWQudG9TdHJpbmcoKSkoImFyaWEtbGFiZWxsZWRieSIsbi5faW5lcnQ/bnVsbDpuLl9sYWJlbElkKSxwdSgibWF0LW9wdGdyb3VwLWRpc2FibGVkIixuLmRpc2FibGVkKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIn0sZXhwb3J0QXM6WyJtYXRPcHRncm91cCJdLGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6ekgsdXNlRXhpc3Rpbmc6SUh9XSkseHBdLG5nQ29udGVudFNlbGVjdG9yczpbIioiLCJtYXQtb3B0aW9uLCBuZy1jb250YWluZXIiXSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1siYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtYXQtb3B0Z3JvdXAtbGFiZWwiLDMsImlkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihabShWSSksUm0oMCwic3BhbiIsMCksa3UoMSksWG0oMiksQW0oKSxYbSgzLDEpKSwyJmUmJihEbSgiaWQiLG4uX2xhYmVsSWQpLHJjKDEpLER1KCIiLG4ubGFiZWwsIiAiKSl9LHN0eWxlczpbIi5tYXQtb3B0Z3JvdXAtbGFiZWx7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6NDhweDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMTZweDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bWF4LXdpZHRoOjEwMCU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtb3B0Z3JvdXAtbGFiZWxbZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fVtkaXI9cnRsXSAubWF0LW9wdGdyb3VwLWxhYmVse3RleHQtYWxpZ246cmlnaHR9Lm1hdC1vcHRncm91cC1sYWJlbCAubWF0LWljb257bWFyZ2luLXJpZ2h0OjE2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtb3B0Z3JvdXAtbGFiZWwgLm1hdC1pY29uIHN2Z3t2ZXJ0aWNhbC1hbGlnbjp0b3B9W2Rpcj1ydGxdIC5tYXQtb3B0Z3JvdXAtbGFiZWwgLm1hdC1pY29ue21hcmdpbi1sZWZ0OjE2cHg7bWFyZ2luLXJpZ2h0OjB9XG4iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKElILFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im1hdC1vcHRncm91cCIsZXhwb3J0QXM6Im1hdE9wdGdyb3VwIix0ZW1wbGF0ZTonPHNwYW4gY2xhc3M9Im1hdC1vcHRncm91cC1sYWJlbCIgYXJpYS1oaWRkZW49InRydWUiIFtpZF09Il9sYWJlbElkIj57eyBsYWJlbCB9fSA8bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9zcGFuPlxuPG5nLWNvbnRlbnQgc2VsZWN0PSJtYXQtb3B0aW9uLCBuZy1jb250YWluZXIiPjwvbmctY29udGVudD5cbicsZW5jYXBzdWxhdGlvbjpIbi5Ob25lLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2gsaW5wdXRzOlsiZGlzYWJsZWQiXSxob3N0OntjbGFzczoibWF0LW9wdGdyb3VwIiwiW2F0dHIucm9sZV0iOidfaW5lcnQgPyBudWxsIDogImdyb3VwIicsIlthdHRyLmFyaWEtZGlzYWJsZWRdIjoiX2luZXJ0ID8gbnVsbCA6IGRpc2FibGVkLnRvU3RyaW5nKCkiLCJbYXR0ci5hcmlhLWxhYmVsbGVkYnldIjoiX2luZXJ0ID8gbnVsbCA6IF9sYWJlbElkIiwiW2NsYXNzLm1hdC1vcHRncm91cC1kaXNhYmxlZF0iOiJkaXNhYmxlZCJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6ekgsdXNlRXhpc3Rpbmc6SUh9XSxzdHlsZXM6WyIubWF0LW9wdGdyb3VwLWxhYmVse3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjpub25lO21heC13aWR0aDoxMDAlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6ZGVmYXVsdH0ubWF0LW9wdGdyb3VwLWxhYmVsW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH1bZGlyPXJ0bF0gLm1hdC1vcHRncm91cC1sYWJlbHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtb3B0Z3JvdXAtbGFiZWwgLm1hdC1pY29ue21hcmdpbi1yaWdodDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LW9wdGdyb3VwLWxhYmVsIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfVtkaXI9cnRsXSAubWF0LW9wdGdyb3VwLWxhYmVsIC5tYXQtaWNvbnttYXJnaW4tbGVmdDoxNnB4O21hcmdpbi1yaWdodDowfVxuIl19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpsZXQgSEg9MDtjbGFzcyBGSHtjb25zdHJ1Y3Rvcih0LGU9ITEpe3RoaXMuc291cmNlPXQsdGhpcy5pc1VzZXJJbnB1dD1lfX1jbGFzcyBMSHtjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9wYXJlbnQ9bix0aGlzLmdyb3VwPW8sdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fYWN0aXZlPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWU9IiIsdGhpcy5pZD0ibWF0LW9wdGlvbi0iK0hIKyssdGhpcy5vblNlbGVjdGlvbkNoYW5nZT1uZXcgTGgsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBJfWdldCBtdWx0aXBsZSgpe3JldHVybiB0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5tdWx0aXBsZX1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWR9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuZ3JvdXAmJnRoaXMuZ3JvdXAuZGlzYWJsZWR8fHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZCh0KXt0aGlzLl9kaXNhYmxlZD15eih0KX1nZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5kaXNhYmxlUmlwcGxlfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfWdldCB2aWV3VmFsdWUoKXtyZXR1cm4odGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS50ZXh0Q29udGVudHx8IiIpLnRyaW0oKX1zZWxlY3QoKXt0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPSEwLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCgpKX1kZXNlbGVjdCgpe3RoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCkpfWZvY3VzKHQsZSl7Y29uc3Qgbj10aGlzLl9nZXRIb3N0RWxlbWVudCgpOyJmdW5jdGlvbiI9PXR5cGVvZiBuLmZvY3VzJiZuLmZvY3VzKGUpfXNldEFjdGl2ZVN0eWxlcygpe3RoaXMuX2FjdGl2ZXx8KHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9c2V0SW5hY3RpdmVTdHlsZXMoKXt0aGlzLl9hY3RpdmUmJih0aGlzLl9hY3RpdmU9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldExhYmVsKCl7cmV0dXJuIHRoaXMudmlld1ZhbHVlfV9oYW5kbGVLZXlkb3duKHQpe3Qua2V5Q29kZSE9PW16JiZ0LmtleUNvZGUhPT1menx8YnoodCl8fCh0aGlzLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpLHQucHJldmVudERlZmF1bHQoKSl9X3NlbGVjdFZpYUludGVyYWN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuX3NlbGVjdGVkPSF0aGlzLm11bHRpcGxlfHwhdGhpcy5fc2VsZWN0ZWQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCEwKSl9X2dldEFyaWFTZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGVkfHwhdGhpcy5tdWx0aXBsZSYmbnVsbH1fZ2V0VGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD8iLTEiOiIwIn1fZ2V0SG9zdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2lmKHRoaXMuX3NlbGVjdGVkKXtjb25zdCB0PXRoaXMudmlld1ZhbHVlO3QhPT10aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlJiYodGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZT10LHRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KCkpfX1uZ09uRGVzdHJveSgpe3RoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfV9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQodD0hMSl7dGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KG5ldyBGSCh0aGlzLHQpKX19TEguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fExIKShTbShoZyksU20oVWcpLFNtKHZvaWQgMCksU20oTkgpKX0sTEguybVkaXI9bG8oe3R5cGU6TEgsaW5wdXRzOntpZDoiaWQiLGRpc2FibGVkOiJkaXNhYmxlZCIsdmFsdWU6InZhbHVlIn0sb3V0cHV0czp7b25TZWxlY3Rpb25DaGFuZ2U6Im9uU2VsZWN0aW9uQ2hhbmdlIn19KSxMSC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTpVZ30se3R5cGU6dm9pZCAwfSx7dHlwZTpOSH1dLExILnByb3BEZWNvcmF0b3JzPXt2YWx1ZTpbe3R5cGU6eHl9XSxpZDpbe3R5cGU6eHl9XSxkaXNhYmxlZDpbe3R5cGU6eHl9XSxvblNlbGVjdGlvbkNoYW5nZTpbe3R5cGU6T3l9XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChMSCxbe3R5cGU6Q3l9XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9LHt0eXBlOlVnfSx7dHlwZTp2b2lkIDB9LHt0eXBlOk5IfV19KSx7aWQ6W3t0eXBlOnh5fV0sb25TZWxlY3Rpb25DaGFuZ2U6W3t0eXBlOk95fV0sZGlzYWJsZWQ6W3t0eXBlOnh5fV0sdmFsdWU6W3t0eXBlOnh5fV19KTtjbGFzcyBCSCBleHRlbmRzIExIe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3N1cGVyKHQsZSxuLG8pfX1mdW5jdGlvbiBWSCh0LGUsbil7aWYobi5sZW5ndGgpe2xldCBvPWUudG9BcnJheSgpLGk9bi50b0FycmF5KCksYT0wO2ZvcihsZXQgZT0wO2U8dCsxO2UrKylvW2VdLmdyb3VwJiZvW2VdLmdyb3VwPT09aVthXSYmYSsrO3JldHVybiBhfXJldHVybiAwfWZ1bmN0aW9uIGpIKHQsZSxuLG8pe3JldHVybiB0PG4/dDp0K2U+bitvP01hdGgubWF4KDAsdC1vK2UpOm59Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL0JILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxCSCkoU20oaGcpLFNtKFVnKSxTbShSSCw4KSxTbSh6SCw4KSl9LEJILsm1Y21wPXRvKHt0eXBlOkJILHNlbGVjdG9yczpbWyJtYXQtb3B0aW9uIl1dLGhvc3RBdHRyczpbInJvbGUiLCJvcHRpb24iLDEsIm1hdC1vcHRpb24iLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJlZtKCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX0pKSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZUtleWRvd24oZSl9KSksMiZlJiYoVHUoImlkIixuLmlkKSxqcCgidGFiaW5kZXgiLG4uX2dldFRhYkluZGV4KCkpKCJhcmlhLXNlbGVjdGVkIixuLl9nZXRBcmlhU2VsZWN0ZWQoKSkoImFyaWEtZGlzYWJsZWQiLG4uZGlzYWJsZWQudG9TdHJpbmcoKSkscHUoIm1hdC1zZWxlY3RlZCIsbi5zZWxlY3RlZCkoIm1hdC1vcHRpb24tbXVsdGlwbGUiLG4ubXVsdGlwbGUpKCJtYXQtYWN0aXZlIixuLmFjdGl2ZSkoIm1hdC1vcHRpb24tZGlzYWJsZWQiLG4uZGlzYWJsZWQpKX0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXSxmZWF0dXJlczpbeHBdLG5nQ29udGVudFNlbGVjdG9yczpbIioiXSxkZWNsczo1LHZhcnM6NCxjb25zdHM6W1siY2xhc3MiLCJtYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywic3RhdGUiLCJkaXNhYmxlZCIsNCwibmdJZiJdLFsxLCJtYXQtb3B0aW9uLXRleHQiXSxbImNsYXNzIiwiY2RrLXZpc3VhbGx5LWhpZGRlbiIsNCwibmdJZiJdLFsibWF0LXJpcHBsZSIsIiIsMSwibWF0LW9wdGlvbi1yaXBwbGUiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCJdLFsxLCJtYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywic3RhdGUiLCJkaXNhYmxlZCJdLFsxLCJjZGstdmlzdWFsbHktaGlkZGVuIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihabSgpLFFwKDAsakksMSwyLCJtYXQtcHNldWRvLWNoZWNrYm94IiwwKSxSbSgxLCJzcGFuIiwxKSxYbSgyKSxBbSgpLFFwKDMsVUksMiwxLCJzcGFuIiwyKSxUbSg0LCJkaXYiLDMpKSwyJmUmJihEbSgibmdJZiIsbi5tdWx0aXBsZSkscmMoMyksRG0oIm5nSWYiLG4uZ3JvdXAmJm4uZ3JvdXAuX2luZXJ0KSxyYygxKSxEbSgibWF0UmlwcGxlVHJpZ2dlciIsbi5fZ2V0SG9zdEVsZW1lbnQoKSkoIm1hdFJpcHBsZURpc2FibGVkIixuLmRpc2FibGVkfHxuLmRpc2FibGVSaXBwbGUpKX0sZGlyZWN0aXZlczpbZE0sa0gsREhdLHN0eWxlczpbIi5tYXQtb3B0aW9ue3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjpub25lO21heC13aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O21heC13aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtb3B0aW9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH1bZGlyPXJ0bF0gLm1hdC1vcHRpb257dGV4dC1hbGlnbjpyaWdodH0ubWF0LW9wdGlvbiAubWF0LWljb257bWFyZ2luLXJpZ2h0OjE2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtb3B0aW9uIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfVtkaXI9cnRsXSAubWF0LW9wdGlvbiAubWF0LWljb257bWFyZ2luLWxlZnQ6MTZweDttYXJnaW4tcmlnaHQ6MH0ubWF0LW9wdGlvblthcmlhLWRpc2FibGVkPXRydWVdey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6ZGVmYXVsdH0ubWF0LW9wdGdyb3VwIC5tYXQtb3B0aW9uOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSl7cGFkZGluZy1sZWZ0OjMycHh9W2Rpcj1ydGxdIC5tYXQtb3B0Z3JvdXAgLm1hdC1vcHRpb246bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjMycHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW9wdGlvbnttYXJnaW46MCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW9wdGlvbi5tYXQtYWN0aXZle2JvcmRlcjpzb2xpZCAxcHggY3VycmVudENvbG9yO21hcmdpbjowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1vcHRpb25bYXJpYS1kaXNhYmxlZD10cnVlXXtvcGFjaXR5Oi41fS5tYXQtb3B0aW9uLXRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1hdC1vcHRpb24gLm1hdC1vcHRpb24tcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94e21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveHttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9XG4iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxCSC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTpVZ30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltSSF19XX0se3R5cGU6SUgsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W3pIXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChCSCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJtYXQtb3B0aW9uIixleHBvcnRBczoibWF0T3B0aW9uIixob3N0Ontyb2xlOiJvcHRpb24iLCJbYXR0ci50YWJpbmRleF0iOiJfZ2V0VGFiSW5kZXgoKSIsIltjbGFzcy5tYXQtc2VsZWN0ZWRdIjoic2VsZWN0ZWQiLCJbY2xhc3MubWF0LW9wdGlvbi1tdWx0aXBsZV0iOiJtdWx0aXBsZSIsIltjbGFzcy5tYXQtYWN0aXZlXSI6ImFjdGl2ZSIsIltpZF0iOiJpZCIsIlthdHRyLmFyaWEtc2VsZWN0ZWRdIjoiX2dldEFyaWFTZWxlY3RlZCgpIiwiW2F0dHIuYXJpYS1kaXNhYmxlZF0iOiJkaXNhYmxlZC50b1N0cmluZygpIiwiW2NsYXNzLm1hdC1vcHRpb24tZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCIoY2xpY2spIjoiX3NlbGVjdFZpYUludGVyYWN0aW9uKCkiLCIoa2V5ZG93bikiOiJfaGFuZGxlS2V5ZG93bigkZXZlbnQpIixjbGFzczoibWF0LW9wdGlvbiBtYXQtZm9jdXMtaW5kaWNhdG9yIn0sdGVtcGxhdGU6JzxtYXQtcHNldWRvLWNoZWNrYm94ICpuZ0lmPSJtdWx0aXBsZSIgY2xhc3M9Im1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94IlxuICAgIFtzdGF0ZV09InNlbGVjdGVkID8gXCdjaGVja2VkXCcgOiBcJ3VuY2hlY2tlZFwnIiBbZGlzYWJsZWRdPSJkaXNhYmxlZCI+PC9tYXQtcHNldWRvLWNoZWNrYm94PlxuXG48c3BhbiBjbGFzcz0ibWF0LW9wdGlvbi10ZXh0Ij48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9zcGFuPlxuXG5ceDNjIS0tIFNlZSBhMTF5IG5vdGVzIGluc2lkZSBvcHRncm91cC50cyBmb3IgY29udGV4dCBiZWhpbmQgdGhpcyBlbGVtZW50LiAtLVx4M2VcbjxzcGFuIGNsYXNzPSJjZGstdmlzdWFsbHktaGlkZGVuIiAqbmdJZj0iZ3JvdXAgJiYgZ3JvdXAuX2luZXJ0Ij4oe3sgZ3JvdXAubGFiZWwgfX0pPC9zcGFuPlxuXG48ZGl2IGNsYXNzPSJtYXQtb3B0aW9uLXJpcHBsZSIgbWF0LXJpcHBsZVxuICAgICBbbWF0UmlwcGxlVHJpZ2dlcl09Il9nZXRIb3N0RWxlbWVudCgpIlxuICAgICBbbWF0UmlwcGxlRGlzYWJsZWRdPSJkaXNhYmxlZCB8fCBkaXNhYmxlUmlwcGxlIj5cbjwvZGl2PlxuJyxlbmNhcHN1bGF0aW9uOkhuLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaCxzdHlsZXM6WyIubWF0LW9wdGlvbnt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246bm9uZTttYXgtd2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzttYXgtd2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW9wdGlvbltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9W2Rpcj1ydGxdIC5tYXQtb3B0aW9ue3RleHQtYWxpZ246cmlnaHR9Lm1hdC1vcHRpb24gLm1hdC1pY29ue21hcmdpbi1yaWdodDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LW9wdGlvbiAubWF0LWljb24gc3Zne3ZlcnRpY2FsLWFsaWduOnRvcH1bZGlyPXJ0bF0gLm1hdC1vcHRpb24gLm1hdC1pY29ue21hcmdpbi1sZWZ0OjE2cHg7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1vcHRpb25bYXJpYS1kaXNhYmxlZD10cnVlXXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1vcHRncm91cCAubWF0LW9wdGlvbjpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe3BhZGRpbmctbGVmdDozMnB4fVtkaXI9cnRsXSAubWF0LW9wdGdyb3VwIC5tYXQtb3B0aW9uOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSl7cGFkZGluZy1sZWZ0OjE2cHg7cGFkZGluZy1yaWdodDozMnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1vcHRpb257bWFyZ2luOjAgMXB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtib3JkZXI6c29saWQgMXB4IGN1cnJlbnRDb2xvcjttYXJnaW46MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtb3B0aW9uW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17b3BhY2l0eTouNX0ubWF0LW9wdGlvbi10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtb3B0aW9uIC5tYXQtb3B0aW9uLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveHttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LW9wdGlvbi1wc2V1ZG8tY2hlY2tib3h7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfVxuIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpoZ30se3R5cGU6VWd9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbUkhdfV19LHt0eXBlOklILGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOlt6SF19XX1dfSksbnVsbCk7Y2xhc3MgVUh7fVVILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxVSCl9LFVILsm1bW9kPWFvKHt0eXBlOlVIfSksVUguybVpbmo9dm4oe2ltcG9ydHM6W1tTSCxXTSxYSSxFSF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChVSCxbe3R5cGU6QXksYXJnczpbe2ltcG9ydHM6W1NILFdNLFhJLEVIXSxleHBvcnRzOltCSCxJSF0sZGVjbGFyYXRpb25zOltCSCxJSF19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhVSCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW0JILElIXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltTSCxXTSxYSSxFSF19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bQkgsSUhdfX0pO2NvbnN0IEdIPVsibWF0LWJ1dHRvbiIsIiJdLFdIPVsiKiJdLFlIPSIubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH19Lm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGV9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LXJhaXNlZC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1hdC1yYWlzZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtcmFpc2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtcmFpc2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1yYWlzZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcmFpc2VkLWJ1dHRvbnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1zdHJva2VkLWJ1dHRvbntib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtwYWRkaW5nOjAgMTVweDtsaW5lLWhlaWdodDozNHB4fS5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDotMXB4O2xlZnQ6LTFweDtyaWdodDotMXB4O2JvdHRvbTotMXB4fS5tYXQtZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO21pbi13aWR0aDowO2JvcmRlci1yYWRpdXM6NTAlO3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzowO2ZsZXgtc2hyaW5rOjB9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWZhYnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjE2cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtbWluaS1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LW1pbmktZmFie3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXJ7cGFkZGluZzo4cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtaWNvbi1idXR0b257cGFkZGluZzowO21pbi13aWR0aDowO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7ZmxleC1zaHJpbms6MDtsaW5lLWhlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtaWNvbi1idXR0b24gaSwubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntsaW5lLWhlaWdodDoyNHB4fS5tYXQtYnV0dG9uLXJpcHBsZS5tYXQtcmlwcGxlLC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtib3JkZXItcmFkaXVzOmluaGVyaXR9Lm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGU6bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDIwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDIwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1idXR0b24tcmlwcGxlLXJvdW5ke2JvcmRlci1yYWRpdXM6NTAlO3otaW5kZXg6MX0ubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mbGF0LWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1yYWlzZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVyPip7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZTppbmhlcml0O3dpZHRoOjIuNWVtO2hlaWdodDoyLjVlbX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mbGF0LWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcmFpc2VkLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaWNvbi1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZhYiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWluaS1mYWJ7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi1iYXNlLmNkay1rZXlib2FyZC1mb2N1c2VkLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tYmFzZS5jZGstcHJvZ3JhbS1mb2N1c2Vke291dGxpbmU6c29saWQgM3B4fVxuIixxSD1bIm1hdC1idXR0b24iLCJtYXQtZmxhdC1idXR0b24iLCJtYXQtaWNvbi1idXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIm1hdC1taW5pLWZhYiIsIm1hdC1mYWIiXSxaSD1KSShLSShRSShjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9lbGVtZW50UmVmPXR9fSkpKTtjbGFzcyBYSCBleHRlbmRzIFpIe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcih0KSx0aGlzLl9mb2N1c01vbml0b3I9ZSx0aGlzLl9hbmltYXRpb25Nb2RlPW4sdGhpcy5pc1JvdW5kQnV0dG9uPXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtZmFiIiwibWF0LW1pbmktZmFiIiksdGhpcy5pc0ljb25CdXR0b249dGhpcy5faGFzSG9zdEF0dHJpYnV0ZXMoIm1hdC1pY29uLWJ1dHRvbiIpO2Zvcihjb25zdCB0IG9mIHFIKXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKHQpJiZ0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmNsYXNzTGlzdC5hZGQodCk7dC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1idXR0b24tYmFzZSIpLHRoaXMuaXNSb3VuZEJ1dHRvbiYmKHRoaXMuY29sb3I9ImFjY2VudCIpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpfWZvY3VzKHQsZSl7dD90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZ2V0SG9zdEVsZW1lbnQoKSx0LGUpOnRoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoZSl9X2dldEhvc3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1faXNSaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9X2hhc0hvc3RBdHRyaWJ1dGVzKC4uLnQpe3JldHVybiB0LnNvbWUoKHQ9PnRoaXMuX2dldEhvc3RFbGVtZW50KCkuaGFzQXR0cmlidXRlKHQpKSl9fVhILsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxYSCkoU20oaGcpLFNtKFNJKSxTbShWUCw4KSl9LFhILsm1Y21wPXRvKHt0eXBlOlhILHNlbGVjdG9yczpbWyJidXR0b24iLCJtYXQtYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtZmFiIiwiIl0sWyJidXR0b24iLCJtYXQtbWluaS1mYWIiLCIiXSxbImJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWZsYXQtYnV0dG9uIiwiIl1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiZRaChrSCw1KSwyJmUpe2xldCB0O0poKHQ9dGIoKSkmJihuLnJpcHBsZT10LmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LWZvY3VzLWluZGljYXRvciJdLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihqcCgiZGlzYWJsZWQiLG4uZGlzYWJsZWR8fG51bGwpLHB1KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PW4uX2FuaW1hdGlvbk1vZGUpKCJtYXQtYnV0dG9uLWRpc2FibGVkIixuLmRpc2FibGVkKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IifSxleHBvcnRBczpbIm1hdEJ1dHRvbiJdLGZlYXR1cmVzOlt4cF0sYXR0cnM6R0gsbmdDb250ZW50U2VsZWN0b3JzOldILGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWzEsIm1hdC1idXR0b24td3JhcHBlciJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtYnV0dG9uLXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVDZW50ZXJlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbMSwibWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihabSgpLFJtKDAsInNwYW4iLDApLFhtKDEpLEFtKCksVG0oMiwic3BhbiIsMSksVG0oMywic3BhbiIsMikpLDImZSYmKHJjKDIpLHB1KCJtYXQtYnV0dG9uLXJpcHBsZS1yb3VuZCIsbi5pc1JvdW5kQnV0dG9ufHxuLmlzSWNvbkJ1dHRvbiksRG0oIm1hdFJpcHBsZURpc2FibGVkIixuLl9pc1JpcHBsZURpc2FibGVkKCkpKCJtYXRSaXBwbGVDZW50ZXJlZCIsbi5pc0ljb25CdXR0b24pKCJtYXRSaXBwbGVUcmlnZ2VyIixuLl9nZXRIb3N0RWxlbWVudCgpKSl9LGRpcmVjdGl2ZXM6W2tIXSxzdHlsZXM6W1lIXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxYSC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTpTSX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltWUF19XX1dLFhILnByb3BEZWNvcmF0b3JzPXtyaXBwbGU6W3t0eXBlOlphLGFyZ3M6W2tIXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFhILFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6ImJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0sXG4gICAgICAgICAgICAgYnV0dG9uW21hdC1mYWJdLCBidXR0b25bbWF0LW1pbmktZmFiXSwgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0sXG4gICAgICAgICAgICAgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0iLGV4cG9ydEFzOiJtYXRCdXR0b24iLGhvc3Q6eyJbYXR0ci5kaXNhYmxlZF0iOiJkaXNhYmxlZCB8fCBudWxsIiwiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6J19hbmltYXRpb25Nb2RlID09PSAiTm9vcEFuaW1hdGlvbnMiJywiW2NsYXNzLm1hdC1idXR0b24tZGlzYWJsZWRdIjoiZGlzYWJsZWQiLGNsYXNzOiJtYXQtZm9jdXMtaW5kaWNhdG9yIn0sdGVtcGxhdGU6JzxzcGFuIGNsYXNzPSJtYXQtYnV0dG9uLXdyYXBwZXIiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L3NwYW4+XG48c3BhbiBtYXRSaXBwbGUgY2xhc3M9Im1hdC1idXR0b24tcmlwcGxlIlxuICAgICAgW2NsYXNzLm1hdC1idXR0b24tcmlwcGxlLXJvdW5kXT0iaXNSb3VuZEJ1dHRvbiB8fCBpc0ljb25CdXR0b24iXG4gICAgICBbbWF0UmlwcGxlRGlzYWJsZWRdPSJfaXNSaXBwbGVEaXNhYmxlZCgpIlxuICAgICAgW21hdFJpcHBsZUNlbnRlcmVkXT0iaXNJY29uQnV0dG9uIlxuICAgICAgW21hdFJpcHBsZVRyaWdnZXJdPSJfZ2V0SG9zdEVsZW1lbnQoKSI+PC9zcGFuPlxuPHNwYW4gY2xhc3M9Im1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSI+PC9zcGFuPlxuJyxpbnB1dHM6WyJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJjb2xvciJdLGVuY2Fwc3VsYXRpb246SG4uTm9uZSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNoLHN0eWxlczpbIi5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH0ubWF0LWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMDR9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowfX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1yYWlzZWQtYnV0dG9ue3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXN0cm9rZWQtYnV0dG9ue2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjM0cHh9Lm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZSwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dG9wOi0xcHg7bGVmdDotMXB4O3JpZ2h0Oi0xcHg7Ym90dG9tOi0xcHh9Lm1hdC1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZmFie3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtbWluaS1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtbWluaS1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LW1pbmktZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtbWluaS1mYWJ7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjhweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1pY29uLWJ1dHRvbntwYWRkaW5nOjA7bWluLXdpZHRoOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtmbGV4LXNocmluazowO2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1pY29uLWJ1dHRvbiBpLC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1yYWRpdXM6aW5oZXJpdH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZX0ubWF0LWJ1dHRvbi1yaXBwbGUtcm91bmR7Ym9yZGVyLXJhZGl1czo1MCU7ei1pbmRleDoxfS5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZsYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXJhaXNlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOmluaGVyaXQ7d2lkdGg6Mi41ZW07aGVpZ2h0OjIuNWVtfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZsYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1yYWlzZWQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1pY29uLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZmFiLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1taW5pLWZhYntvdXRsaW5lOnNvbGlkIDFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLWJhc2UuY2RrLWtleWJvYXJkLWZvY3VzZWQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi1iYXNlLmNkay1wcm9ncmFtLWZvY3VzZWR7b3V0bGluZTpzb2xpZCAzcHh9XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfSx7dHlwZTpTSX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltWUF19XX1dfSkse3JpcHBsZTpbe3R5cGU6WmEsYXJnczpba0hdfV19KTtjbGFzcyBLSCBleHRlbmRzIFhIe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcihlLHQsbil9X2hhbHREaXNhYmxlZEV2ZW50cyh0KXt0aGlzLmRpc2FibGVkJiYodC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfX1LSC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S0gpKFNtKFNJKSxTbShoZyksU20oVlAsOCkpfSxLSC7JtWNtcD10byh7dHlwZTpLSCxzZWxlY3RvcnM6W1siYSIsIm1hdC1idXR0b24iLCIiXSxbImEiLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIiJdLFsiYSIsIm1hdC1pY29uLWJ1dHRvbiIsIiJdLFsiYSIsIm1hdC1mYWIiLCIiXSxbImEiLCJtYXQtbWluaS1mYWIiLCIiXSxbImEiLCJtYXQtc3Ryb2tlZC1idXR0b24iLCIiXSxbImEiLCJtYXQtZmxhdC1idXR0b24iLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmVm0oImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFsdERpc2FibGVkRXZlbnRzKGUpfSkpLDImZSYmKGpwKCJ0YWJpbmRleCIsbi5kaXNhYmxlZD8tMTpuLnRhYkluZGV4fHwwKSgiZGlzYWJsZWQiLG4uZGlzYWJsZWR8fG51bGwpKCJhcmlhLWRpc2FibGVkIixuLmRpc2FibGVkLnRvU3RyaW5nKCkpLHB1KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PW4uX2FuaW1hdGlvbk1vZGUpKCJtYXQtYnV0dG9uLWRpc2FibGVkIixuLmRpc2FibGVkKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl0sZmVhdHVyZXM6W3hwXSxhdHRyczpHSCxuZ0NvbnRlbnRTZWxlY3RvcnM6V0gsZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbMSwibWF0LWJ1dHRvbi13cmFwcGVyIl0sWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlVHJpZ2dlciJdLFsxLCJtYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFptKCksUm0oMCwic3BhbiIsMCksWG0oMSksQW0oKSxUbSgyLCJzcGFuIiwxKSxUbSgzLCJzcGFuIiwyKSksMiZlJiYocmMoMikscHUoIm1hdC1idXR0b24tcmlwcGxlLXJvdW5kIixuLmlzUm91bmRCdXR0b258fG4uaXNJY29uQnV0dG9uKSxEbSgibWF0UmlwcGxlRGlzYWJsZWQiLG4uX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZUNlbnRlcmVkIixuLmlzSWNvbkJ1dHRvbikoIm1hdFJpcHBsZVRyaWdnZXIiLG4uX2dldEhvc3RFbGVtZW50KCkpKX0sZGlyZWN0aXZlczpba0hdLHN0eWxlczpbWUhdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLEtILmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6U0l9LHt0eXBlOmhnfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1ZQXX1dfV0sS0gucHJvcERlY29yYXRvcnM9e3RhYkluZGV4Olt7dHlwZTp4eX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEtILFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6ImFbbWF0LWJ1dHRvbl0sIGFbbWF0LXJhaXNlZC1idXR0b25dLCBhW21hdC1pY29uLWJ1dHRvbl0sIGFbbWF0LWZhYl0sXG4gICAgICAgICAgICAgYVttYXQtbWluaS1mYWJdLCBhW21hdC1zdHJva2VkLWJ1dHRvbl0sIGFbbWF0LWZsYXQtYnV0dG9uXSIsZXhwb3J0QXM6Im1hdEJ1dHRvbiwgbWF0QW5jaG9yIixob3N0OnsiW2F0dHIudGFiaW5kZXhdIjoiZGlzYWJsZWQgPyAtMSA6ICh0YWJJbmRleCB8fCAwKSIsIlthdHRyLmRpc2FibGVkXSI6ImRpc2FibGVkIHx8IG51bGwiLCJbYXR0ci5hcmlhLWRpc2FibGVkXSI6ImRpc2FibGVkLnRvU3RyaW5nKCkiLCIoY2xpY2spIjoiX2hhbHREaXNhYmxlZEV2ZW50cygkZXZlbnQpIiwiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6J19hbmltYXRpb25Nb2RlID09PSAiTm9vcEFuaW1hdGlvbnMiJywiW2NsYXNzLm1hdC1idXR0b24tZGlzYWJsZWRdIjoiZGlzYWJsZWQiLGNsYXNzOiJtYXQtZm9jdXMtaW5kaWNhdG9yIn0saW5wdXRzOlsiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwiY29sb3IiXSx0ZW1wbGF0ZTonPHNwYW4gY2xhc3M9Im1hdC1idXR0b24td3JhcHBlciI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50Pjwvc3Bhbj5cbjxzcGFuIG1hdFJpcHBsZSBjbGFzcz0ibWF0LWJ1dHRvbi1yaXBwbGUiXG4gICAgICBbY2xhc3MubWF0LWJ1dHRvbi1yaXBwbGUtcm91bmRdPSJpc1JvdW5kQnV0dG9uIHx8IGlzSWNvbkJ1dHRvbiJcbiAgICAgIFttYXRSaXBwbGVEaXNhYmxlZF09Il9pc1JpcHBsZURpc2FibGVkKCkiXG4gICAgICBbbWF0UmlwcGxlQ2VudGVyZWRdPSJpc0ljb25CdXR0b24iXG4gICAgICBbbWF0UmlwcGxlVHJpZ2dlcl09Il9nZXRIb3N0RWxlbWVudCgpIj48L3NwYW4+XG48c3BhbiBjbGFzcz0ibWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5Ij48L3NwYW4+XG4nLGVuY2Fwc3VsYXRpb246SG4uTm9uZSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNoLHN0eWxlczpbIi5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH0ubWF0LWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMDR9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowfX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1yYWlzZWQtYnV0dG9ue3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXN0cm9rZWQtYnV0dG9ue2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjM0cHh9Lm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZSwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dG9wOi0xcHg7bGVmdDotMXB4O3JpZ2h0Oi0xcHg7Ym90dG9tOi0xcHh9Lm1hdC1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZmFie3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtbWluaS1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtbWluaS1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LW1pbmktZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtbWluaS1mYWJ7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjhweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1pY29uLWJ1dHRvbntwYWRkaW5nOjA7bWluLXdpZHRoOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtmbGV4LXNocmluazowO2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1pY29uLWJ1dHRvbiBpLC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1yYWRpdXM6aW5oZXJpdH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZX0ubWF0LWJ1dHRvbi1yaXBwbGUtcm91bmR7Ym9yZGVyLXJhZGl1czo1MCU7ei1pbmRleDoxfS5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZsYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXJhaXNlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOmluaGVyaXQ7d2lkdGg6Mi41ZW07aGVpZ2h0OjIuNWVtfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZsYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1yYWlzZWQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1pY29uLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZmFiLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1taW5pLWZhYntvdXRsaW5lOnNvbGlkIDFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLWJhc2UuY2RrLWtleWJvYXJkLWZvY3VzZWQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi1iYXNlLmNkay1wcm9ncmFtLWZvY3VzZWR7b3V0bGluZTpzb2xpZCAzcHh9XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlNJfSx7dHlwZTpoZ30se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltWUF19XX1dfSkse3RhYkluZGV4Olt7dHlwZTp4eX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBKSHt9SkguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEpIKX0sSkguybVtb2Q9YW8oe3R5cGU6Skh9KSxKSC7JtWluaj12bih7aW1wb3J0czpbW1NILFhJXSxYSV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEpILFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbU0gsWEldLGV4cG9ydHM6W1hILEtILFhJXSxkZWNsYXJhdGlvbnM6W1hILEtIXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKEpILHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bWEgsS0hdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1NILFhJXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltYSCxLSCxYSV19fSk7Y2xhc3MgUUh7fWZ1bmN0aW9uICRIKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jb25uZWN0fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyB0RiBleHRlbmRzIFFIe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fZGF0YT10fWNvbm5lY3QoKXtyZXR1cm4gTnQodGhpcy5fZGF0YSk/dGhpcy5fZGF0YTpFdCh0aGlzLl9kYXRhKX1kaXNjb25uZWN0KCl7fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIGVGe2FwcGx5Q2hhbmdlcyh0LGUsbixvLGkpe3QuZm9yRWFjaE9wZXJhdGlvbigoKHQsbyxhKT0+e2xldCByLHM7aWYobnVsbD09dC5wcmV2aW91c0luZGV4KXtjb25zdCBpPW4odCxvLGEpO3I9ZS5jcmVhdGVFbWJlZGRlZFZpZXcoaS50ZW1wbGF0ZVJlZixpLmNvbnRleHQsaS5pbmRleCkscz0xfWVsc2UgbnVsbD09YT8oZS5yZW1vdmUobykscz0zKToocj1lLmdldChvKSxlLm1vdmUocixhKSxzPTIpO2kmJmkoe2NvbnRleHQ6bnVsbD09cj92b2lkIDA6ci5jb250ZXh0LG9wZXJhdGlvbjpzLHJlY29yZDp0fSl9KSl9ZGV0YWNoKCl7fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgbkZ7Y29uc3RydWN0b3IoKXt0aGlzLnZpZXdDYWNoZVNpemU9MjAsdGhpcy5fdmlld0NhY2hlPVtdfWFwcGx5Q2hhbmdlcyh0LGUsbixvLGkpe3QuZm9yRWFjaE9wZXJhdGlvbigoKHQsYSxyKT0+e2xldCBzLGw7bnVsbD09dC5wcmV2aW91c0luZGV4PyhzPXRoaXMuX2luc2VydFZpZXcoKCgpPT5uKHQsYSxyKSkscixlLG8odCkpLGw9cz8xOjApOm51bGw9PXI/KHRoaXMuX2RldGFjaEFuZENhY2hlVmlldyhhLGUpLGw9Myk6KHM9dGhpcy5fbW92ZVZpZXcoYSxyLGUsbyh0KSksbD0yKSxpJiZpKHtjb250ZXh0Om51bGw9PXM/dm9pZCAwOnMuY29udGV4dCxvcGVyYXRpb246bCxyZWNvcmQ6dH0pfSkpfWRldGFjaCgpe2Zvcihjb25zdCB0IG9mIHRoaXMuX3ZpZXdDYWNoZSl0LmRlc3Ryb3koKTt0aGlzLl92aWV3Q2FjaGU9W119X2luc2VydFZpZXcodCxlLG4sbyl7Y29uc3QgaT10aGlzLl9pbnNlcnRWaWV3RnJvbUNhY2hlKGUsbik7aWYoaSlyZXR1cm4gdm9pZChpLmNvbnRleHQuJGltcGxpY2l0PW8pO2NvbnN0IGE9dCgpO3JldHVybiBuLmNyZWF0ZUVtYmVkZGVkVmlldyhhLnRlbXBsYXRlUmVmLGEuY29udGV4dCxhLmluZGV4KX1fZGV0YWNoQW5kQ2FjaGVWaWV3KHQsZSl7Y29uc3Qgbj1lLmRldGFjaCh0KTt0aGlzLl9tYXliZUNhY2hlVmlldyhuLGUpfV9tb3ZlVmlldyh0LGUsbixvKXtjb25zdCBpPW4uZ2V0KHQpO3JldHVybiBuLm1vdmUoaSxlKSxpLmNvbnRleHQuJGltcGxpY2l0PW8saX1fbWF5YmVDYWNoZVZpZXcodCxlKXtpZih0aGlzLl92aWV3Q2FjaGUubGVuZ3RoPHRoaXMudmlld0NhY2hlU2l6ZSl0aGlzLl92aWV3Q2FjaGUucHVzaCh0KTtlbHNle2NvbnN0IG49ZS5pbmRleE9mKHQpOy0xPT09bj90LmRlc3Ryb3koKTplLnJlbW92ZShuKX19X2luc2VydFZpZXdGcm9tQ2FjaGUodCxlKXtjb25zdCBuPXRoaXMuX3ZpZXdDYWNoZS5wb3AoKTtyZXR1cm4gbiYmZS5pbnNlcnQobix0KSxufHxudWxsfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3Mgb0Z7Y29uc3RydWN0b3IodD0hMSxlLG49ITApe3RoaXMuX211bHRpcGxlPXQsdGhpcy5fZW1pdENoYW5nZXM9bix0aGlzLl9zZWxlY3Rpb249bmV3IFNldCx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0PVtdLHRoaXMuX3NlbGVjdGVkVG9FbWl0PVtdLHRoaXMuY2hhbmdlZD1uZXcgSSxlJiZlLmxlbmd0aCYmKHQ/ZS5mb3JFYWNoKCh0PT50aGlzLl9tYXJrU2VsZWN0ZWQodCkpKTp0aGlzLl9tYXJrU2VsZWN0ZWQoZVswXSksdGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RoPTApfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPUFycmF5LmZyb20odGhpcy5fc2VsZWN0aW9uLnZhbHVlcygpKSksdGhpcy5fc2VsZWN0ZWR9c2VsZWN0KC4uLnQpe3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudCh0KSx0LmZvckVhY2goKHQ9PnRoaXMuX21hcmtTZWxlY3RlZCh0KSkpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpfWRlc2VsZWN0KC4uLnQpe3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudCh0KSx0LmZvckVhY2goKHQ9PnRoaXMuX3VubWFya1NlbGVjdGVkKHQpKSksdGhpcy5fZW1pdENoYW5nZUV2ZW50KCl9dG9nZ2xlKHQpe3RoaXMuaXNTZWxlY3RlZCh0KT90aGlzLmRlc2VsZWN0KHQpOnRoaXMuc2VsZWN0KHQpfWNsZWFyKCl7dGhpcy5fdW5tYXJrQWxsKCksdGhpcy5fZW1pdENoYW5nZUV2ZW50KCl9aXNTZWxlY3RlZCh0KXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uLmhhcyh0KX1pc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLl9zZWxlY3Rpb24uc2l6ZX1oYXNWYWx1ZSgpe3JldHVybiF0aGlzLmlzRW1wdHkoKX1zb3J0KHQpe3RoaXMuX211bHRpcGxlJiZ0aGlzLnNlbGVjdGVkJiZ0aGlzLl9zZWxlY3RlZC5zb3J0KHQpfWlzTXVsdGlwbGVTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5fbXVsdGlwbGV9X2VtaXRDaGFuZ2VFdmVudCgpe3RoaXMuX3NlbGVjdGVkPW51bGwsKHRoaXMuX3NlbGVjdGVkVG9FbWl0Lmxlbmd0aHx8dGhpcy5fZGVzZWxlY3RlZFRvRW1pdC5sZW5ndGgpJiYodGhpcy5jaGFuZ2VkLm5leHQoe3NvdXJjZTp0aGlzLGFkZGVkOnRoaXMuX3NlbGVjdGVkVG9FbWl0LHJlbW92ZWQ6dGhpcy5fZGVzZWxlY3RlZFRvRW1pdH0pLHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5fc2VsZWN0ZWRUb0VtaXQ9W10pfV9tYXJrU2VsZWN0ZWQodCl7dGhpcy5pc1NlbGVjdGVkKHQpfHwodGhpcy5fbXVsdGlwbGV8fHRoaXMuX3VubWFya0FsbCgpLHRoaXMuX3NlbGVjdGlvbi5hZGQodCksdGhpcy5fZW1pdENoYW5nZXMmJnRoaXMuX3NlbGVjdGVkVG9FbWl0LnB1c2godCkpfV91bm1hcmtTZWxlY3RlZCh0KXt0aGlzLmlzU2VsZWN0ZWQodCkmJih0aGlzLl9zZWxlY3Rpb24uZGVsZXRlKHQpLHRoaXMuX2VtaXRDaGFuZ2VzJiZ0aGlzLl9kZXNlbGVjdGVkVG9FbWl0LnB1c2godCkpfV91bm1hcmtBbGwoKXt0aGlzLmlzRW1wdHkoKXx8dGhpcy5fc2VsZWN0aW9uLmZvckVhY2goKHQ9PnRoaXMuX3VubWFya1NlbGVjdGVkKHQpKSl9X3ZlcmlmeVZhbHVlQXNzaWdubWVudCh0KXtpZih0Lmxlbmd0aD4xJiYhdGhpcy5fbXVsdGlwbGUmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyhmdW5jdGlvbiBlKCl7cmV0dXJuIEVycm9yKCJDYW5ub3QgcGFzcyBtdWx0aXBsZSB2YWx1ZXMgaW50byBTZWxlY3Rpb25Nb2RlbCB3aXRoIHNpbmdsZS12YWx1ZSBtb2RlLiIpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKCl9fWNsYXNzIGlGe2NvbnN0cnVjdG9yKCl7dGhpcy5fbGlzdGVuZXJzPVtdfW5vdGlmeSh0LGUpe2ZvcihsZXQgbiBvZiB0aGlzLl9saXN0ZW5lcnMpbih0LGUpfWxpc3Rlbih0KXtyZXR1cm4gdGhpcy5fbGlzdGVuZXJzLnB1c2godCksKCk9Pnt0aGlzLl9saXN0ZW5lcnM9dGhpcy5fbGlzdGVuZXJzLmZpbHRlcigoZT0+dCE9PWUpKX19bmdPbkRlc3Ryb3koKXt0aGlzLl9saXN0ZW5lcnM9W119fWlGLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxpRil9LGlGLsm1cHJvdj1Nbih7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBpRn0sdG9rZW46aUYscHJvdmlkZWRJbjoicm9vdCJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGlGLFt7dHlwZTppbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVybltdfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgYUY9bmV3IEdhKCJfVmlld1JlcGVhdGVyIiksckY9WyJjb250ZW50V3JhcHBlciJdLHNGPW5ldyBHYSgiVklSVFVBTF9TQ1JPTExfU1RSQVRFR1kiKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGxGe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBJLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT10aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlLnBpcGUoTWUoKSksdGhpcy5fdmlld3BvcnQ9bnVsbCx0aGlzLl9pdGVtU2l6ZT10LHRoaXMuX21pbkJ1ZmZlclB4PWUsdGhpcy5fbWF4QnVmZmVyUHg9bn1hdHRhY2godCl7dGhpcy5fdmlld3BvcnQ9dCx0aGlzLl91cGRhdGVUb3RhbENvbnRlbnRTaXplKCksdGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfWRldGFjaCgpe3RoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydD1udWxsfXVwZGF0ZUl0ZW1BbmRCdWZmZXJTaXplKHQsZSxuKXtpZihuPGUmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyBFcnJvcigiQ0RLIHZpcnR1YWwgc2Nyb2xsOiBtYXhCdWZmZXJQeCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtaW5CdWZmZXJQeCIpO3RoaXMuX2l0ZW1TaXplPXQsdGhpcy5fbWluQnVmZmVyUHg9ZSx0aGlzLl9tYXhCdWZmZXJQeD1uLHRoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25Db250ZW50U2Nyb2xsZWQoKXt0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25EYXRhTGVuZ3RoQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25Db250ZW50UmVuZGVyZWQoKXt9b25SZW5kZXJlZE9mZnNldENoYW5nZWQoKXt9c2Nyb2xsVG9JbmRleCh0LGUpe3RoaXMuX3ZpZXdwb3J0JiZ0aGlzLl92aWV3cG9ydC5zY3JvbGxUb09mZnNldCh0KnRoaXMuX2l0ZW1TaXplLGUpfV91cGRhdGVUb3RhbENvbnRlbnRTaXplKCl7dGhpcy5fdmlld3BvcnQmJnRoaXMuX3ZpZXdwb3J0LnNldFRvdGFsQ29udGVudFNpemUodGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpKnRoaXMuX2l0ZW1TaXplKX1fdXBkYXRlUmVuZGVyZWRSYW5nZSgpe2lmKCF0aGlzLl92aWV3cG9ydClyZXR1cm47Y29uc3QgdD10aGlzLl92aWV3cG9ydC5nZXRSZW5kZXJlZFJhbmdlKCksZT17c3RhcnQ6dC5zdGFydCxlbmQ6dC5lbmR9LG49dGhpcy5fdmlld3BvcnQuZ2V0Vmlld3BvcnRTaXplKCksbz10aGlzLl92aWV3cG9ydC5nZXREYXRhTGVuZ3RoKCk7bGV0IGk9dGhpcy5fdmlld3BvcnQubWVhc3VyZVNjcm9sbE9mZnNldCgpLGE9dGhpcy5faXRlbVNpemU+MD9pL3RoaXMuX2l0ZW1TaXplOjA7aWYoZS5lbmQ+byl7Y29uc3QgdD1NYXRoLmNlaWwobi90aGlzLl9pdGVtU2l6ZSkscj1NYXRoLm1heCgwLE1hdGgubWluKGEsby10KSk7YSE9ciYmKGE9cixpPXIqdGhpcy5faXRlbVNpemUsZS5zdGFydD1NYXRoLmZsb29yKGEpKSxlLmVuZD1NYXRoLm1heCgwLE1hdGgubWluKG8sZS5zdGFydCt0KSl9Y29uc3Qgcj1pLWUuc3RhcnQqdGhpcy5faXRlbVNpemU7aWYocjx0aGlzLl9taW5CdWZmZXJQeCYmMCE9ZS5zdGFydCl7Y29uc3QgdD1NYXRoLmNlaWwoKHRoaXMuX21heEJ1ZmZlclB4LXIpL3RoaXMuX2l0ZW1TaXplKTtlLnN0YXJ0PU1hdGgubWF4KDAsZS5zdGFydC10KSxlLmVuZD1NYXRoLm1pbihvLE1hdGguY2VpbChhKyhuK3RoaXMuX21pbkJ1ZmZlclB4KS90aGlzLl9pdGVtU2l6ZSkpfWVsc2V7Y29uc3QgdD1lLmVuZCp0aGlzLl9pdGVtU2l6ZS0oaStuKTtpZih0PHRoaXMuX21pbkJ1ZmZlclB4JiZlLmVuZCE9byl7Y29uc3Qgbj1NYXRoLmNlaWwoKHRoaXMuX21heEJ1ZmZlclB4LXQpL3RoaXMuX2l0ZW1TaXplKTtuPjAmJihlLmVuZD1NYXRoLm1pbihvLGUuZW5kK24pLGUuc3RhcnQ9TWF0aC5tYXgoMCxNYXRoLmZsb29yKGEtdGhpcy5fbWluQnVmZmVyUHgvdGhpcy5faXRlbVNpemUpKSl9fXRoaXMuX3ZpZXdwb3J0LnNldFJlbmRlcmVkUmFuZ2UoZSksdGhpcy5fdmlld3BvcnQuc2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KHRoaXMuX2l0ZW1TaXplKmUuc3RhcnQpLHRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UubmV4dChNYXRoLmZsb29yKGEpKX19ZnVuY3Rpb24gY0YodCl7cmV0dXJuIHQuX3Njcm9sbFN0cmF0ZWd5fWNsYXNzIGRGe2NvbnN0cnVjdG9yKCl7dGhpcy5faXRlbVNpemU9MjAsdGhpcy5fbWluQnVmZmVyUHg9MTAwLHRoaXMuX21heEJ1ZmZlclB4PTIwMCx0aGlzLl9zY3JvbGxTdHJhdGVneT1uZXcgbEYodGhpcy5pdGVtU2l6ZSx0aGlzLm1pbkJ1ZmZlclB4LHRoaXMubWF4QnVmZmVyUHgpfWdldCBpdGVtU2l6ZSgpe3JldHVybiB0aGlzLl9pdGVtU2l6ZX1zZXQgaXRlbVNpemUodCl7dGhpcy5faXRlbVNpemU9X3oodCl9Z2V0IG1pbkJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX21pbkJ1ZmZlclB4fXNldCBtaW5CdWZmZXJQeCh0KXt0aGlzLl9taW5CdWZmZXJQeD1feih0KX1nZXQgbWF4QnVmZmVyUHgoKXtyZXR1cm4gdGhpcy5fbWF4QnVmZmVyUHh9c2V0IG1heEJ1ZmZlclB4KHQpe3RoaXMuX21heEJ1ZmZlclB4PV96KHQpfW5nT25DaGFuZ2VzKCl7dGhpcy5fc2Nyb2xsU3RyYXRlZ3kudXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUodGhpcy5pdGVtU2l6ZSx0aGlzLm1pbkJ1ZmZlclB4LHRoaXMubWF4QnVmZmVyUHgpfX1kRi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZEYpfSxkRi7JtWRpcj1sbyh7dHlwZTpkRixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IiwiaXRlbVNpemUiLCIiXV0saW5wdXRzOntpdGVtU2l6ZToiaXRlbVNpemUiLG1pbkJ1ZmZlclB4OiJtaW5CdWZmZXJQeCIsbWF4QnVmZmVyUHg6Im1heEJ1ZmZlclB4In0sZmVhdHVyZXM6W3BnKFt7cHJvdmlkZTpzRix1c2VGYWN0b3J5OmNGLGRlcHM6W3FlKCgoKT0+ZEYpKV19XSksQm9dfSksZEYucHJvcERlY29yYXRvcnM9e2l0ZW1TaXplOlt7dHlwZTp4eX1dLG1pbkJ1ZmZlclB4Olt7dHlwZTp4eX1dLG1heEJ1ZmZlclB4Olt7dHlwZTp4eX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGRGLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6ImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFtpdGVtU2l6ZV0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6c0YsdXNlRmFjdG9yeTpjRixkZXBzOltxZSgoKCk9PmRGKSldfV19XX1dLChmdW5jdGlvbigpe3JldHVybltdfSkse2l0ZW1TaXplOlt7dHlwZTp4eX1dLG1pbkJ1ZmZlclB4Olt7dHlwZTp4eX1dLG1heEJ1ZmZlclB4Olt7dHlwZTp4eX1dfSk7Y2xhc3MgcEZ7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX25nWm9uZT10LHRoaXMuX3BsYXRmb3JtPWUsdGhpcy5fc2Nyb2xsZWQ9bmV3IEksdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fc2Nyb2xsZWRDb3VudD0wLHRoaXMuc2Nyb2xsQ29udGFpbmVycz1uZXcgTWFwLHRoaXMuX2RvY3VtZW50PW59cmVnaXN0ZXIodCl7dGhpcy5zY3JvbGxDb250YWluZXJzLmhhcyh0KXx8dGhpcy5zY3JvbGxDb250YWluZXJzLnNldCh0LHQuZWxlbWVudFNjcm9sbGVkKCkuc3Vic2NyaWJlKCgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dCh0KSkpKX1kZXJlZ2lzdGVyKHQpe2NvbnN0IGU9dGhpcy5zY3JvbGxDb250YWluZXJzLmdldCh0KTtlJiYoZS51bnN1YnNjcmliZSgpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5kZWxldGUodCkpfXNjcm9sbGVkKHQ9MjApe3JldHVybiB0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/bmV3IEQoKGU9Pnt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb258fHRoaXMuX2FkZEdsb2JhbExpc3RlbmVyKCk7Y29uc3Qgbj10PjA/dGhpcy5fc2Nyb2xsZWQucGlwZShkZSh0KSkuc3Vic2NyaWJlKGUpOnRoaXMuX3Njcm9sbGVkLnN1YnNjcmliZShlKTtyZXR1cm4gdGhpcy5fc2Nyb2xsZWRDb3VudCsrLCgpPT57bi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbGVkQ291bnQtLSx0aGlzLl9zY3JvbGxlZENvdW50fHx0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpfX0pKTpFdCgpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgoKHQsZSk9PnRoaXMuZGVyZWdpc3RlcihlKSkpLHRoaXMuX3Njcm9sbGVkLmNvbXBsZXRlKCl9YW5jZXN0b3JTY3JvbGxlZCh0LGUpe2NvbnN0IG49dGhpcy5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnModCk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQoZSkucGlwZShjZSgodD0+IXR8fG4uaW5kZXhPZih0KT4tMSkpKX1nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnModCl7Y29uc3QgZT1bXTtyZXR1cm4gdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKChuLG8pPT57dGhpcy5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChvLHQpJiZlLnB1c2gobyl9KSksZX1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQodCxlKXtsZXQgbj14eihlKSxvPXQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYobj09bylyZXR1cm4hMH13aGlsZShuPW4ucGFyZW50RWxlbWVudCk7cmV0dXJuITF9X2FkZEdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pm9lKHRoaXMuX2dldFdpbmRvdygpLmRvY3VtZW50LCJzY3JvbGwiKS5zdWJzY3JpYmUoKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KCkpKSkpfV9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbiYmKHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj1udWxsKX19cEYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHBGKSh2cihhXyksdnIod3opLHZyKFpfLDgpKX0scEYuybVwcm92PU1uKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IHBGKHZyKGFfKSx2cih3eiksdnIoWl8sOCkpfSx0b2tlbjpwRixwcm92aWRlZEluOiJyb290In0pLHBGLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6YV99LHt0eXBlOnd6fSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1pfXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChwRixbe3R5cGU6aW0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6YV99LHt0eXBlOnd6fSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1pfXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIG1Ge2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuZWxlbWVudFJlZj10LHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcj1lLHRoaXMubmdab25lPW4sdGhpcy5kaXI9byx0aGlzLl9kZXN0cm95ZWQ9bmV3IEksdGhpcy5fZWxlbWVudFNjcm9sbGVkPW5ldyBEKCh0PT50aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9Pm9lKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJzY3JvbGwiKS5waXBlKEllKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSh0KSkpKSl9bmdPbkluaXQoKXt0aGlzLnNjcm9sbERpc3BhdGNoZXIucmVnaXN0ZXIodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLnNjcm9sbERpc3BhdGNoZXIuZGVyZWdpc3Rlcih0aGlzKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfWVsZW1lbnRTY3JvbGxlZCgpe3JldHVybiB0aGlzLl9lbGVtZW50U2Nyb2xsZWR9Z2V0RWxlbWVudFJlZigpe3JldHVybiB0aGlzLmVsZW1lbnRSZWZ9c2Nyb2xsVG8odCl7Y29uc3QgZT10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxuPXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7bnVsbD09dC5sZWZ0JiYodC5sZWZ0PW4/dC5lbmQ6dC5zdGFydCksbnVsbD09dC5yaWdodCYmKHQucmlnaHQ9bj90LnN0YXJ0OnQuZW5kKSxudWxsIT10LmJvdHRvbSYmKHQudG9wPWUuc2Nyb2xsSGVpZ2h0LWUuY2xpZW50SGVpZ2h0LXQuYm90dG9tKSxuJiYwIT1JeigpPyhudWxsIT10LmxlZnQmJih0LnJpZ2h0PWUuc2Nyb2xsV2lkdGgtZS5jbGllbnRXaWR0aC10LmxlZnQpLDI9PUl6KCk/dC5sZWZ0PXQucmlnaHQ6MT09SXooKSYmKHQubGVmdD10LnJpZ2h0Py10LnJpZ2h0OnQucmlnaHQpKTpudWxsIT10LnJpZ2h0JiYodC5sZWZ0PWUuc2Nyb2xsV2lkdGgtZS5jbGllbnRXaWR0aC10LnJpZ2h0KSx0aGlzLl9hcHBseVNjcm9sbFRvT3B0aW9ucyh0KX1fYXBwbHlTY3JvbGxUb09wdGlvbnModCl7Y29uc3QgZT10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDt6eigpP2Uuc2Nyb2xsVG8odCk6KG51bGwhPXQudG9wJiYoZS5zY3JvbGxUb3A9dC50b3ApLG51bGwhPXQubGVmdCYmKGUuc2Nyb2xsTGVmdD10LmxlZnQpKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KHQpe2NvbnN0IGU9ImxlZnQiLG49InJpZ2h0IixvPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKCJ0b3AiPT10KXJldHVybiBvLnNjcm9sbFRvcDtpZigiYm90dG9tIj09dClyZXR1cm4gby5zY3JvbGxIZWlnaHQtby5jbGllbnRIZWlnaHQtby5zY3JvbGxUb3A7Y29uc3QgaT10aGlzLmRpciYmInJ0bCI9PXRoaXMuZGlyLnZhbHVlO3JldHVybiJzdGFydCI9PXQ/dD1pP246ZToiZW5kIj09dCYmKHQ9aT9lOm4pLGkmJjI9PUl6KCk/dD09ZT9vLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgtby5zY3JvbGxMZWZ0Om8uc2Nyb2xsTGVmdDppJiYxPT1JeigpP3Q9PWU/by5zY3JvbGxMZWZ0K28uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aDotby5zY3JvbGxMZWZ0OnQ9PWU/by5zY3JvbGxMZWZ0Om8uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aC1vLnNjcm9sbExlZnR9fW1GLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxtRikoU20oaGcpLFNtKHBGKSxTbShhXyksU20oSEksOCkpfSxtRi7JtWRpcj1sbyh7dHlwZTptRixzZWxlY3RvcnM6W1siIiwiY2RrLXNjcm9sbGFibGUiLCIiXSxbIiIsImNka1Njcm9sbGFibGUiLCIiXV19KSxtRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTpwRn0se3R5cGU6YV99LHt0eXBlOkhJLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKG1GLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6IltjZGstc2Nyb2xsYWJsZV0sIFtjZGtTY3JvbGxhYmxlXSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpoZ30se3R5cGU6cEZ9LHt0eXBlOmFffSx7dHlwZTpISSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfV19KSxudWxsKTtjbGFzcyB1Rntjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5fcGxhdGZvcm09dCx0aGlzLl9jaGFuZ2U9bmV3IEksdGhpcy5fY2hhbmdlTGlzdGVuZXI9dD0+e3RoaXMuX2NoYW5nZS5uZXh0KHQpfSx0aGlzLl9kb2N1bWVudD1uLGUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57aWYodC5pc0Jyb3dzZXIpe2NvbnN0IHQ9dGhpcy5fZ2V0V2luZG93KCk7dC5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5jaGFuZ2UoKS5zdWJzY3JpYmUoKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCkpfSkpfW5nT25EZXN0cm95KCl7aWYodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXtjb25zdCB0PXRoaXMuX2dldFdpbmRvdygpO3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuX2NoYW5nZS5jb21wbGV0ZSgpfWdldFZpZXdwb3J0U2l6ZSgpe3RoaXMuX3ZpZXdwb3J0U2l6ZXx8dGhpcy5fdXBkYXRlVmlld3BvcnRTaXplKCk7Y29uc3QgdD17d2lkdGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLHR9Z2V0Vmlld3BvcnRSZWN0KCl7Y29uc3QgdD10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSx7d2lkdGg6ZSxoZWlnaHQ6bn09dGhpcy5nZXRWaWV3cG9ydFNpemUoKTtyZXR1cm57dG9wOnQudG9wLGxlZnQ6dC5sZWZ0LGJvdHRvbTp0LnRvcCtuLHJpZ2h0OnQubGVmdCtlLGhlaWdodDpuLHdpZHRoOmV9fWdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybnt0b3A6MCxsZWZ0OjB9O2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQsZT10aGlzLl9nZXRXaW5kb3coKSxuPXQuZG9jdW1lbnRFbGVtZW50LG89bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOi1vLnRvcHx8dC5ib2R5LnNjcm9sbFRvcHx8ZS5zY3JvbGxZfHxuLnNjcm9sbFRvcHx8MCxsZWZ0Oi1vLmxlZnR8fHQuYm9keS5zY3JvbGxMZWZ0fHxlLnNjcm9sbFh8fG4uc2Nyb2xsTGVmdHx8MH19Y2hhbmdlKHQ9MjApe3JldHVybiB0PjA/dGhpcy5fY2hhbmdlLnBpcGUoZGUodCkpOnRoaXMuX2NoYW5nZX1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3VwZGF0ZVZpZXdwb3J0U2l6ZSgpe2NvbnN0IHQ9dGhpcy5fZ2V0V2luZG93KCk7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6dC5pbm5lcldpZHRoLGhlaWdodDp0LmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19fXVGLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx1RikodnIod3opLHZyKGFfKSx2cihaXyw4KSl9LHVGLsm1cHJvdj1Nbih7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyB1Rih2cih3eiksdnIoYV8pLHZyKFpfLDgpKX0sdG9rZW46dUYscHJvdmlkZWRJbjoicm9vdCJ9KSx1Ri5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnd6fSx7dHlwZTphX30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltaX119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgodUYsW3t0eXBlOmltLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnd6fSx7dHlwZTphX30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltaX119XX1dfSksbnVsbCk7Y29uc3QgZkY9InVuZGVmaW5lZCIhPXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/YXQ6JDtjbGFzcyBnRiBleHRlbmRzIG1Ge2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIpe2lmKHN1cGVyKHQsYSxuLGkpLHRoaXMuZWxlbWVudFJlZj10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9byx0aGlzLl9kZXRhY2hlZFN1YmplY3Q9bmV3IEksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3Q9bmV3IEksdGhpcy5fb3JpZW50YXRpb249InZlcnRpY2FsIix0aGlzLl9hcHBlbmRPbmx5PSExLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgRCgodD0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsZWRJbmRleENoYW5nZS5zdWJzY3JpYmUoKGU9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT50aGlzLm5nWm9uZS5ydW4oKCgpPT50Lm5leHQoZSkpKSkpKSkpKSx0aGlzLnJlbmRlcmVkUmFuZ2VTdHJlYW09dGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QsdGhpcy5fdG90YWxDb250ZW50U2l6ZT0wLHRoaXMuX3RvdGFsQ29udGVudFdpZHRoPSIiLHRoaXMuX3RvdGFsQ29udGVudEhlaWdodD0iIix0aGlzLl9yZW5kZXJlZFJhbmdlPXtzdGFydDowLGVuZDowfSx0aGlzLl9kYXRhTGVuZ3RoPTAsdGhpcy5fdmlld3BvcnRTaXplPTAsdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0PTAsdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSExLHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMSx0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbj1bXSx0aGlzLl92aWV3cG9ydENoYW5nZXM9bS5FTVBUWSwhbyYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCdFcnJvcjogY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IHJlcXVpcmVzIHRoZSAiaXRlbVNpemUiIHByb3BlcnR5IHRvIGJlIHNldC4nKTt0aGlzLl92aWV3cG9ydENoYW5nZXM9ci5jaGFuZ2UoKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5jaGVja1ZpZXdwb3J0U2l6ZSgpfSkpfWdldCBvcmllbnRhdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbn1zZXQgb3JpZW50YXRpb24odCl7dGhpcy5fb3JpZW50YXRpb24hPT10JiYodGhpcy5fb3JpZW50YXRpb249dCx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCkpfWdldCBhcHBlbmRPbmx5KCl7cmV0dXJuIHRoaXMuX2FwcGVuZE9ubHl9c2V0IGFwcGVuZE9ubHkodCl7dGhpcy5fYXBwZW5kT25seT15eih0KX1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e3RoaXMuX21lYXN1cmVWaWV3cG9ydFNpemUoKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5hdHRhY2godGhpcyksdGhpcy5lbGVtZW50U2Nyb2xsZWQoKS5waXBlKE5lKG51bGwpLGRlKDAsZkYpKS5zdWJzY3JpYmUoKCgpPT50aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRTY3JvbGxlZCgpKSksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgpfSkpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRldGFjaCgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRldGFjaCgpLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fZGV0YWNoZWRTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnRDaGFuZ2VzLnVuc3Vic2NyaWJlKCksc3VwZXIubmdPbkRlc3Ryb3koKX1hdHRhY2godCl7aWYodGhpcy5fZm9yT2YmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyBFcnJvcigiQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IGlzIGFscmVhZHkgYXR0YWNoZWQuIik7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57dGhpcy5fZm9yT2Y9dCx0aGlzLl9mb3JPZi5kYXRhU3RyZWFtLnBpcGUoSWUodGhpcy5fZGV0YWNoZWRTdWJqZWN0KSkuc3Vic2NyaWJlKCh0PT57Y29uc3QgZT10Lmxlbmd0aDtlIT09dGhpcy5fZGF0YUxlbmd0aCYmKHRoaXMuX2RhdGFMZW5ndGg9ZSx0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCkpLHRoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KSl9KSl9ZGV0YWNoKCl7dGhpcy5fZm9yT2Y9bnVsbCx0aGlzLl9kZXRhY2hlZFN1YmplY3QubmV4dCgpfWdldERhdGFMZW5ndGgoKXtyZXR1cm4gdGhpcy5fZGF0YUxlbmd0aH1nZXRWaWV3cG9ydFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRTaXplfWdldFJlbmRlcmVkUmFuZ2UoKXtyZXR1cm4gdGhpcy5fcmVuZGVyZWRSYW5nZX1zZXRUb3RhbENvbnRlbnRTaXplKHQpe3RoaXMuX3RvdGFsQ29udGVudFNpemUhPT10JiYodGhpcy5fdG90YWxDb250ZW50U2l6ZT10LHRoaXMuX2NhbGN1bGF0ZVNwYWNlclNpemUoKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCkpfXNldFJlbmRlcmVkUmFuZ2UodCl7KAovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gZSh0LG4pe3JldHVybiB0LnN0YXJ0PT1uLnN0YXJ0JiZ0LmVuZD09bi5lbmR9KSh0aGlzLl9yZW5kZXJlZFJhbmdlLHQpfHwodGhpcy5hcHBlbmRPbmx5JiYodD17c3RhcnQ6MCxlbmQ6TWF0aC5tYXgodGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQsdC5lbmQpfSksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QubmV4dCh0aGlzLl9yZW5kZXJlZFJhbmdlPXQpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCgpPT50aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRSZW5kZXJlZCgpKSkpfWdldE9mZnNldFRvUmVuZGVyZWRDb250ZW50U3RhcnQoKXtyZXR1cm4gdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlP251bGw6dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0fXNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0LGU9InRvLXN0YXJ0Iil7Y29uc3Qgbj0iaG9yaXpvbnRhbCI9PXRoaXMub3JpZW50YXRpb24sbz1uPyJYIjoiWSI7bGV0IGk9YHRyYW5zbGF0ZSR7b30oJHtOdW1iZXIoKG4mJnRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU/LTE6MSkqdCl9cHgpYDt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9dCwidG8tZW5kIj09PWUmJihpKz1gIHRyYW5zbGF0ZSR7b30oLTEwMCUpYCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITApLHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSE9aSYmKHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybT1pLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCgpPT57dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPyh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQtPXRoaXMubWVhc3VyZVJlbmRlcmVkQ29udGVudFNpemUoKSx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITEsdGhpcy5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0KSk6dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25SZW5kZXJlZE9mZnNldENoYW5nZWQoKX0pKSl9c2Nyb2xsVG9PZmZzZXQodCxlPSJhdXRvIil7Y29uc3Qgbj17YmVoYXZpb3I6ZX07Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9uLnN0YXJ0PXQ6bi50b3A9dCx0aGlzLnNjcm9sbFRvKG4pfXNjcm9sbFRvSW5kZXgodCxlPSJhdXRvIil7dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsVG9JbmRleCh0LGUpfW1lYXN1cmVTY3JvbGxPZmZzZXQodCl7cmV0dXJuIHN1cGVyLm1lYXN1cmVTY3JvbGxPZmZzZXQodHx8KCJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/InN0YXJ0IjoidG9wIikpfW1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCl7Y29uc3QgdD10aGlzLl9jb250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50O3JldHVybiJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/dC5vZmZzZXRXaWR0aDp0Lm9mZnNldEhlaWdodH1tZWFzdXJlUmFuZ2VTaXplKHQpe3JldHVybiB0aGlzLl9mb3JPZj90aGlzLl9mb3JPZi5tZWFzdXJlUmFuZ2VTaXplKHQsdGhpcy5vcmllbnRhdGlvbik6MH1jaGVja1ZpZXdwb3J0U2l6ZSgpe3RoaXMuX21lYXN1cmVWaWV3cG9ydFNpemUoKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCl9X21lYXN1cmVWaWV3cG9ydFNpemUoKXtjb25zdCB0PXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3ZpZXdwb3J0U2l6ZT0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP3QuY2xpZW50V2lkdGg6dC5jbGllbnRIZWlnaHR9X21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQodCl7dCYmdGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb24ucHVzaCh0KSx0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmd8fCh0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITAsdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e3RoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KSkpKSl9X2RvQ2hhbmdlRGV0ZWN0aW9uKCl7dGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPXRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSx0aGlzLm5nWm9uZS5ydW4oKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSkpO2NvbnN0IHQ9dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb247dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb249W107Zm9yKGNvbnN0IGUgb2YgdCllKCl9X2NhbGN1bGF0ZVNwYWNlclNpemUoKXt0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8iIjpgJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Ake3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgOiIifX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmZ1bmN0aW9uIGhGKHQsZSxuKXtpZighbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QpcmV0dXJuIDA7Y29uc3Qgbz1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiJob3Jpem9udGFsIj09PXQ/InN0YXJ0Ij09PWU/by5sZWZ0Om8ucmlnaHQ6InN0YXJ0Ij09PWU/by50b3A6by5ib3R0b219Z0YuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGdGKShTbShoZyksU20oVWcpLFNtKGFfKSxTbShzRiw4KSxTbShISSw4KSxTbShwRiksU20odUYpKX0sZ0YuybVjbXA9dG8oe3R5cGU6Z0Ysc2VsZWN0b3JzOltbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmUWgockYsNyksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi5fY29udGVudFdyYXBwZXI9dC5maXJzdCl9fSxob3N0QXR0cnM6WzEsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJnB1KCJjZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCIsImhvcml6b250YWwiPT09bi5vcmllbnRhdGlvbikoImNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCIsImhvcml6b250YWwiIT09bi5vcmllbnRhdGlvbil9LGlucHV0czp7b3JpZW50YXRpb246Im9yaWVudGF0aW9uIixhcHBlbmRPbmx5OiJhcHBlbmRPbmx5In0sb3V0cHV0czp7c2Nyb2xsZWRJbmRleENoYW5nZToic2Nyb2xsZWRJbmRleENoYW5nZSJ9LGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6bUYsdXNlRXhpc3Rpbmc6Z0Z9XSkseHBdLG5nQ29udGVudFNlbGVjdG9yczpbIioiXSxkZWNsczo0LHZhcnM6NCxjb25zdHM6W1sxLCJjZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyIl0sWyJjb250ZW50V3JhcHBlciIsIiJdLFsxLCJjZGstdmlydHVhbC1zY3JvbGwtc3BhY2VyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihabSgpLFJtKDAsImRpdiIsMCwxKSxYbSgyKSxBbSgpLFRtKDMsImRpdiIsMikpLDImZSYmKHJjKDMpLGR1KCJ3aWR0aCIsbi5fdG90YWxDb250ZW50V2lkdGgpKCJoZWlnaHQiLG4uX3RvdGFsQ29udGVudEhlaWdodCkpfSxzdHlsZXM6WyJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnR7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzphdXRvO2NvbnRhaW46c3RyaWN0O3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApO3dpbGwtY2hhbmdlOnNjcm9sbC1wb3NpdGlvbjstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Y29udGFpbjpjb250ZW50fVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntyaWdodDowO2xlZnQ6YXV0b30uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLWhlaWdodDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowO291dGxpbmU6bm9uZX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye21pbi13aWR0aDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2hlaWdodDoxcHg7d2lkdGg6MXB4O3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcntyaWdodDowO2xlZnQ6YXV0bzt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMH1cbiJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGdGLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6aGd9LHt0eXBlOlVnfSx7dHlwZTphX30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltzRl19XX0se3R5cGU6SEksZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6cEZ9LHt0eXBlOnVGfV0sZ0YucHJvcERlY29yYXRvcnM9e29yaWVudGF0aW9uOlt7dHlwZTp4eX1dLGFwcGVuZE9ubHk6W3t0eXBlOnh5fV0sc2Nyb2xsZWRJbmRleENoYW5nZTpbe3R5cGU6T3l9XSxfY29udGVudFdyYXBwZXI6W3t0eXBlOlphLGFyZ3M6WyJjb250ZW50V3JhcHBlciIse3N0YXRpYzohMH1dfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoZ0YsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Iix0ZW1wbGF0ZTonXHgzYyEtLVxuICBXcmFwIHRoZSByZW5kZXJlZCBjb250ZW50IGluIGFuIGVsZW1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gb2Zmc2V0IGl0IGJhc2VkIG9uIHRoZSBzY3JvbGxcbiAgcG9zaXRpb24uXG4tLVx4M2VcbjxkaXYgI2NvbnRlbnRXcmFwcGVyIGNsYXNzPSJjZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyIj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5ceDNjIS0tXG4gIFNwYWNlciB1c2VkIHRvIGZvcmNlIHRoZSBzY3JvbGxpbmcgY29udGFpbmVyIHRvIHRoZSBjb3JyZWN0IHNpemUgZm9yIHRoZSAqdG90YWwqIG51bWJlciBvZiBpdGVtc1xuICBzbyB0aGF0IHRoZSBzY3JvbGxiYXIgY2FwdHVyZXMgdGhlIHNpemUgb2YgdGhlIGVudGlyZSBkYXRhIHNldC5cbi0tXHgzZVxuPGRpdiBjbGFzcz0iY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlciJcbiAgICAgW3N0eWxlLndpZHRoXT0iX3RvdGFsQ29udGVudFdpZHRoIiBbc3R5bGUuaGVpZ2h0XT0iX3RvdGFsQ29udGVudEhlaWdodCI+PC9kaXY+XG4nLGhvc3Q6e2NsYXNzOiJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiLCJbY2xhc3MuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWxdIjonb3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIicsIltjbGFzcy5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWxdIjonb3JpZW50YXRpb24gIT09ICJob3Jpem9udGFsIid9LGVuY2Fwc3VsYXRpb246SG4uTm9uZSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6bUYsdXNlRXhpc3Rpbmc6Z0Z9XSxzdHlsZXM6WyJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnR7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzphdXRvO2NvbnRhaW46c3RyaWN0O3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApO3dpbGwtY2hhbmdlOnNjcm9sbC1wb3NpdGlvbjstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Y29udGFpbjpjb250ZW50fVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntyaWdodDowO2xlZnQ6YXV0b30uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLWhlaWdodDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowO291dGxpbmU6bm9uZX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye21pbi13aWR0aDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2hlaWdodDoxcHg7d2lkdGg6MXB4O3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcntyaWdodDowO2xlZnQ6YXV0bzt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMH1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9LHt0eXBlOlVnfSx7dHlwZTphX30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltzRl19XX0se3R5cGU6SEksZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6cEZ9LHt0eXBlOnVGfV19KSx7c2Nyb2xsZWRJbmRleENoYW5nZTpbe3R5cGU6T3l9XSxvcmllbnRhdGlvbjpbe3R5cGU6eHl9XSxhcHBlbmRPbmx5Olt7dHlwZTp4eX1dLF9jb250ZW50V3JhcHBlcjpbe3R5cGU6WmEsYXJnczpbImNvbnRlbnRXcmFwcGVyIix7c3RhdGljOiEwfV19XX0pO2NsYXNzIGJGe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhKXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPXQsdGhpcy5fdGVtcGxhdGU9ZSx0aGlzLl9kaWZmZXJzPW4sdGhpcy5fdmlld1JlcGVhdGVyPW8sdGhpcy5fdmlld3BvcnQ9aSx0aGlzLnZpZXdDaGFuZ2U9bmV3IEksdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXM9bmV3IEksdGhpcy5kYXRhU3RyZWFtPXRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLnBpcGUoTmUobnVsbCksRGUoKSx6ZSgoKFt0LGVdKT0+dGhpcy5fY2hhbmdlRGF0YVNvdXJjZSh0LGUpKSksQWUoMSkpLHRoaXMuX2RpZmZlcj1udWxsLHRoaXMuX25lZWRzVXBkYXRlPSExLHRoaXMuX2Rlc3Ryb3llZD1uZXcgSSx0aGlzLmRhdGFTdHJlYW0uc3Vic2NyaWJlKCh0PT57dGhpcy5fZGF0YT10LHRoaXMuX29uUmVuZGVyZWREYXRhQ2hhbmdlKCl9KSksdGhpcy5fdmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbS5waXBlKEllKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgodD0+e3RoaXMuX3JlbmRlcmVkUmFuZ2U9dCxhLnJ1bigoKCk9PnRoaXMudmlld0NoYW5nZS5uZXh0KHRoaXMuX3JlbmRlcmVkUmFuZ2UpKSksdGhpcy5fb25SZW5kZXJlZERhdGFDaGFuZ2UoKX0pKSx0aGlzLl92aWV3cG9ydC5hdHRhY2godGhpcyl9Z2V0IGNka1ZpcnR1YWxGb3JPZigpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yT2Z9c2V0IGNka1ZpcnR1YWxGb3JPZih0KXt0aGlzLl9jZGtWaXJ0dWFsRm9yT2Y9dCwkSCh0KT90aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KHQpOnRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQobmV3IHRGKE50KHQpP3Q6QXJyYXkuZnJvbSh0fHxbXSkpKX1nZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fY2RrVmlydHVhbEZvclRyYWNrQnl9c2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KHQpe3RoaXMuX25lZWRzVXBkYXRlPSEwLHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5PXQ/KGUsbik9PnQoZSsodGhpcy5fcmVuZGVyZWRSYW5nZT90aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0OjApLG4pOnZvaWQgMH1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlKHQpe3QmJih0aGlzLl9uZWVkc1VwZGF0ZT0hMCx0aGlzLl90ZW1wbGF0ZT10KX1nZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdSZXBlYXRlci52aWV3Q2FjaGVTaXplfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUodCl7dGhpcy5fdmlld1JlcGVhdGVyLnZpZXdDYWNoZVNpemU9X3oodCl9bWVhc3VyZVJhbmdlU2l6ZSh0LGUpe2lmKHQuc3RhcnQ+PXQuZW5kKXJldHVybiAwO2lmKCh0LnN0YXJ0PHRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnR8fHQuZW5kPnRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kKSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJFcnJvcjogYXR0ZW1wdGVkIHRvIG1lYXN1cmUgYW4gaXRlbSB0aGF0IGlzbid0IHJlbmRlcmVkLiIpO2NvbnN0IG49dC5zdGFydC10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LG89dC5lbmQtdC5zdGFydDtsZXQgaSxhO2ZvcihsZXQgdD0wO3Q8bzt0Kyspe2NvbnN0IGU9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQodCtuKTtpZihlJiZlLnJvb3ROb2Rlcy5sZW5ndGgpe2k9YT1lLnJvb3ROb2Rlc1swXTticmVha319Zm9yKGxldCB0PW8tMTt0Pi0xO3QtLSl7Y29uc3QgZT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldCh0K24pO2lmKGUmJmUucm9vdE5vZGVzLmxlbmd0aCl7YT1lLnJvb3ROb2Rlc1tlLnJvb3ROb2Rlcy5sZW5ndGgtMV07YnJlYWt9fXJldHVybiBpJiZhP2hGKGUsImVuZCIsYSktaEYoZSwic3RhcnQiLGkpOjB9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyJiZ0aGlzLl9uZWVkc1VwZGF0ZSl7Y29uc3QgdD10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9yZW5kZXJlZEl0ZW1zKTt0P3RoaXMuX2FwcGx5Q2hhbmdlcyh0KTp0aGlzLl91cGRhdGVDb250ZXh0KCksdGhpcy5fbmVlZHNVcGRhdGU9ITF9fW5nT25EZXN0cm95KCl7dGhpcy5fdmlld3BvcnQuZGV0YWNoKCksdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dCh2b2lkIDApLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy52aWV3Q2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl92aWV3UmVwZWF0ZXIuZGV0YWNoKCl9X29uUmVuZGVyZWREYXRhQ2hhbmdlKCl7dGhpcy5fcmVuZGVyZWRSYW5nZSYmKHRoaXMuX3JlbmRlcmVkSXRlbXM9dGhpcy5fZGF0YS5zbGljZSh0aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LHRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kKSx0aGlzLl9kaWZmZXJ8fCh0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKHRoaXMuX3JlbmRlcmVkSXRlbXMpLmNyZWF0ZSgoKHQsZSk9PnRoaXMuY2RrVmlydHVhbEZvclRyYWNrQnk/dGhpcy5jZGtWaXJ0dWFsRm9yVHJhY2tCeSh0LGUpOmUpKSksdGhpcy5fbmVlZHNVcGRhdGU9ITApfV9jaGFuZ2VEYXRhU291cmNlKHQsZSl7cmV0dXJuIHQmJnQuZGlzY29ubmVjdCh0aGlzKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCxlP2UuY29ubmVjdCh0aGlzKTpFdCgpfV91cGRhdGVDb250ZXh0KCl7Y29uc3QgdD10aGlzLl9kYXRhLmxlbmd0aDtsZXQgZT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtmb3IoO2UtLTspe2NvbnN0IG49dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoZSk7bi5jb250ZXh0LmluZGV4PXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQrZSxuLmNvbnRleHQuY291bnQ9dCx0aGlzLl91cGRhdGVDb21wdXRlZENvbnRleHRQcm9wZXJ0aWVzKG4uY29udGV4dCksbi5kZXRlY3RDaGFuZ2VzKCl9fV9hcHBseUNoYW5nZXModCl7dGhpcy5fdmlld1JlcGVhdGVyLmFwcGx5Q2hhbmdlcyh0LHRoaXMuX3ZpZXdDb250YWluZXJSZWYsKCh0LGUsbik9PnRoaXMuX2dldEVtYmVkZGVkVmlld0FyZ3ModCxuKSksKHQ9PnQuaXRlbSkpLHQuZm9yRWFjaElkZW50aXR5Q2hhbmdlKCh0PT57dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQodC5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbX0pKTtjb25zdCBlPXRoaXMuX2RhdGEubGVuZ3RoO2xldCBuPXRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoO2Zvcig7bi0tOyl7Y29uc3QgdD10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChuKTt0LmNvbnRleHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtuLHQuY29udGV4dC5jb3VudD1lLHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXModC5jb250ZXh0KX19X3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXModCl7dC5maXJzdD0wPT09dC5pbmRleCx0Lmxhc3Q9dC5pbmRleD09PXQuY291bnQtMSx0LmV2ZW49dC5pbmRleCUyPT0wLHQub2RkPSF0LmV2ZW59X2dldEVtYmVkZGVkVmlld0FyZ3ModCxlKXtyZXR1cm57dGVtcGxhdGVSZWY6dGhpcy5fdGVtcGxhdGUsY29udGV4dDp7JGltcGxpY2l0OnQuaXRlbSxjZGtWaXJ0dWFsRm9yT2Y6dGhpcy5fY2RrVmlydHVhbEZvck9mLGluZGV4Oi0xLGNvdW50Oi0xLGZpcnN0OiExLGxhc3Q6ITEsb2RkOiExLGV2ZW46ITF9LGluZGV4OmV9fX1iRi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8YkYpKFNtKGVoKSxTbShYZyksU20oSGcpLFNtKGFGKSxTbShnRiw0KSxTbShhXykpfSxiRi7JtWRpcj1sbyh7dHlwZTpiRixzZWxlY3RvcnM6W1siIiwiY2RrVmlydHVhbEZvciIsIiIsImNka1ZpcnR1YWxGb3JPZiIsIiJdXSxpbnB1dHM6e2Nka1ZpcnR1YWxGb3JPZjoiY2RrVmlydHVhbEZvck9mIixjZGtWaXJ0dWFsRm9yVHJhY2tCeToiY2RrVmlydHVhbEZvclRyYWNrQnkiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlIixjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6ImNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSJ9LGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6YUYsdXNlQ2xhc3M6bkZ9XSldfSksYkYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTplaH0se3R5cGU6WGd9LHt0eXBlOkhnfSx7dHlwZTpuRixkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOlthRl19XX0se3R5cGU6Z0YsZGVjb3JhdG9yczpbe3R5cGU6RXJ9XX0se3R5cGU6YV99XSxiRi5wcm9wRGVjb3JhdG9ycz17Y2RrVmlydHVhbEZvck9mOlt7dHlwZTp4eX1dLGNka1ZpcnR1YWxGb3JUcmFja0J5Olt7dHlwZTp4eX1dLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZTpbe3R5cGU6eHl9XSxjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6W3t0eXBlOnh5fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoYkYsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW2Nka1ZpcnR1YWxGb3JdW2Nka1ZpcnR1YWxGb3JPZl0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6YUYsdXNlQ2xhc3M6bkZ9XX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmVofSx7dHlwZTpYZ30se3R5cGU6SGd9LHt0eXBlOm5GLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W2FGXX1dfSx7dHlwZTpnRixkZWNvcmF0b3JzOlt7dHlwZTpFcn1dfSx7dHlwZTphX31dfSkse2Nka1ZpcnR1YWxGb3JPZjpbe3R5cGU6eHl9XSxjZGtWaXJ0dWFsRm9yVHJhY2tCeTpbe3R5cGU6eHl9XSxjZGtWaXJ0dWFsRm9yVGVtcGxhdGU6W3t0eXBlOnh5fV0sY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplOlt7dHlwZTp4eX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyB5Rnt9eUYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHlGKX0seUYuybVtb2Q9YW8oe3R5cGU6eUZ9KSx5Ri7JtWluaj12bih7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh5Rixbe3R5cGU6QXksYXJnczpbe2V4cG9ydHM6W21GXSxkZWNsYXJhdGlvbnM6W21GXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKHlGLHtkZWNsYXJhdGlvbnM6W21GXSxleHBvcnRzOlttRl19KTtjbGFzcyBfRnt9ZnVuY3Rpb24gQ0YoKXt0aHJvdyBFcnJvcigiSG9zdCBhbHJlYWR5IGhhcyBhIHBvcnRhbCBhdHRhY2hlZCIpfV9GLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxfRil9LF9GLsm1bW9kPWFvKHt0eXBlOl9GfSksX0YuybVpbmo9dm4oe2ltcG9ydHM6W1tMSSxreix5Rl0sTEkseUZdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChfRixbe3R5cGU6QXksYXJnczpbe2ltcG9ydHM6W0xJLGt6LHlGXSxleHBvcnRzOltMSSx5RixkRixiRixnRl0sZGVjbGFyYXRpb25zOltkRixiRixnRl19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhfRix7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW2RGLGJGLGdGXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltMSSxreix5Rl19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bTEkseUYsZEYsYkYsZ0ZdfX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgTUZ7YXR0YWNoKHQpe3JldHVybigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmKG51bGw9PXQmJihmdW5jdGlvbiBlKCl7dGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gYXR0YWNoIGEgcG9ydGFsIHRvIGEgbnVsbCBQb3J0YWxPdXRsZXQiKX0pKCksdC5oYXNBdHRhY2hlZCgpJiZDRigpKSx0aGlzLl9hdHRhY2hlZEhvc3Q9dCx0LmF0dGFjaCh0aGlzKX1kZXRhY2goKXtsZXQgdD10aGlzLl9hdHRhY2hlZEhvc3Q7bnVsbCE9dD8odGhpcy5fYXR0YWNoZWRIb3N0PW51bGwsdC5kZXRhY2goKSk6KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiYoZnVuY3Rpb24gZSgpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGRldGFjaCBhIHBvcnRhbCB0aGF0IGlzIG5vdCBhdHRhY2hlZCB0byBhIGhvc3QiKX0pKCl9Z2V0IGlzQXR0YWNoZWQoKXtyZXR1cm4gbnVsbCE9dGhpcy5fYXR0YWNoZWRIb3N0fXNldEF0dGFjaGVkSG9zdCh0KXt0aGlzLl9hdHRhY2hlZEhvc3Q9dH19Y2xhc3MgdkYgZXh0ZW5kcyBNRntjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcigpLHRoaXMuY29tcG9uZW50PXQsdGhpcy52aWV3Q29udGFpbmVyUmVmPWUsdGhpcy5pbmplY3Rvcj1uLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW99fWNsYXNzIHhGIGV4dGVuZHMgTUZ7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKCksdGhpcy50ZW1wbGF0ZVJlZj10LHRoaXMudmlld0NvbnRhaW5lclJlZj1lLHRoaXMuY29udGV4dD1ufWdldCBvcmlnaW4oKXtyZXR1cm4gdGhpcy50ZW1wbGF0ZVJlZi5lbGVtZW50UmVmfWF0dGFjaCh0LGU9dGhpcy5jb250ZXh0KXtyZXR1cm4gdGhpcy5jb250ZXh0PWUsc3VwZXIuYXR0YWNoKHQpfWRldGFjaCgpe3JldHVybiB0aGlzLmNvbnRleHQ9dm9pZCAwLHN1cGVyLmRldGFjaCgpfX1jbGFzcyBPRiBleHRlbmRzIE1Ge2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5lbGVtZW50PXQgaW5zdGFuY2VvZiBoZz90Lm5hdGl2ZUVsZW1lbnQ6dH19Y2xhc3MgUEZ7Y29uc3RydWN0b3IoKXt0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuYXR0YWNoRG9tUG9ydGFsPW51bGx9aGFzQXR0YWNoZWQoKXtyZXR1cm4hIXRoaXMuX2F0dGFjaGVkUG9ydGFsfWF0dGFjaCh0KXtyZXR1cm4oInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJih0fHwoZnVuY3Rpb24gZSgpe3Rocm93IEVycm9yKCJNdXN0IHByb3ZpZGUgYSBwb3J0YWwgdG8gYXR0YWNoIil9KSgpLHRoaXMuaGFzQXR0YWNoZWQoKSYmQ0YoKSx0aGlzLl9pc0Rpc3Bvc2VkJiYoZnVuY3Rpb24gbigpe3Rocm93IEVycm9yKCJUaGlzIFBvcnRhbE91dGxldCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIil9KSgpKSx0IGluc3RhbmNlb2YgdkY/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hDb21wb25lbnRQb3J0YWwodCkpOnQgaW5zdGFuY2VvZiB4Rj8odGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLmF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpKTp0aGlzLmF0dGFjaERvbVBvcnRhbCYmdCBpbnN0YW5jZW9mIE9GPyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoRG9tUG9ydGFsKHQpKTp2b2lkKCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmKGZ1bmN0aW9uIG8oKXt0aHJvdyBFcnJvcigiQXR0ZW1wdGluZyB0byBhdHRhY2ggYW4gdW5rbm93biBQb3J0YWwgdHlwZS4gQmFzZVBvcnRhbE91dGxldCBhY2NlcHRzIGVpdGhlciBhIENvbXBvbmVudFBvcnRhbCBvciBhIFRlbXBsYXRlUG9ydGFsLiIpfSkoKSl9ZGV0YWNoKCl7dGhpcy5fYXR0YWNoZWRQb3J0YWwmJih0aGlzLl9hdHRhY2hlZFBvcnRhbC5zZXRBdHRhY2hlZEhvc3QobnVsbCksdGhpcy5fYXR0YWNoZWRQb3J0YWw9bnVsbCksdGhpcy5faW52b2tlRGlzcG9zZUZuKCl9ZGlzcG9zZSgpe3RoaXMuaGFzQXR0YWNoZWQoKSYmdGhpcy5kZXRhY2goKSx0aGlzLl9pbnZva2VEaXNwb3NlRm4oKSx0aGlzLl9pc0Rpc3Bvc2VkPSEwfXNldERpc3Bvc2VGbih0KXt0aGlzLl9kaXNwb3NlRm49dH1faW52b2tlRGlzcG9zZUZuKCl7dGhpcy5fZGlzcG9zZUZuJiYodGhpcy5fZGlzcG9zZUZuKCksdGhpcy5fZGlzcG9zZUZuPW51bGwpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3Mgd0YgZXh0ZW5kcyBQRntjb25zdHJ1Y3Rvcih0LGUsbixvLGkpe3N1cGVyKCksdGhpcy5vdXRsZXRFbGVtZW50PXQsdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPWUsdGhpcy5fYXBwUmVmPW4sdGhpcy5fZGVmYXVsdEluamVjdG9yPW8sdGhpcy5hdHRhY2hEb21Qb3J0YWw9dD0+e2lmKCF0aGlzLl9kb2N1bWVudCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJDYW5ub3QgYXR0YWNoIERPTSBwb3J0YWwgd2l0aG91dCBfZG9jdW1lbnQgY29uc3RydWN0b3IgcGFyYW1ldGVyIik7Y29uc3QgZT10LmVsZW1lbnQ7aWYoIWUucGFyZW50Tm9kZSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJET00gcG9ydGFsIGNvbnRlbnQgbXVzdCBiZSBhdHRhY2hlZCB0byBhIHBhcmVudCBub2RlLiIpO2NvbnN0IG49dGhpcy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiZG9tLXBvcnRhbCIpO2UucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobixlKSx0aGlzLm91dGxldEVsZW1lbnQuYXBwZW5kQ2hpbGQoZSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCxzdXBlci5zZXREaXNwb3NlRm4oKCgpPT57bi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGUsbil9KSl9LHRoaXMuX2RvY3VtZW50PWl9YXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpe2NvbnN0IGU9KHQuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfHx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQuY29tcG9uZW50KTtsZXQgbjtyZXR1cm4gdC52aWV3Q29udGFpbmVyUmVmPyhuPXQudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoZSx0LnZpZXdDb250YWluZXJSZWYubGVuZ3RoLHQuaW5qZWN0b3J8fHQudmlld0NvbnRhaW5lclJlZi5pbmplY3RvciksdGhpcy5zZXREaXNwb3NlRm4oKCgpPT5uLmRlc3Ryb3koKSkpKToobj1lLmNyZWF0ZSh0LmluamVjdG9yfHx0aGlzLl9kZWZhdWx0SW5qZWN0b3IpLHRoaXMuX2FwcFJlZi5hdHRhY2hWaWV3KG4uaG9zdFZpZXcpLHRoaXMuc2V0RGlzcG9zZUZuKCgoKT0+e3RoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KG4uaG9zdFZpZXcpLG4uZGVzdHJveSgpfSkpKSx0aGlzLm91dGxldEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZ2V0Q29tcG9uZW50Um9vdE5vZGUobikpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsbn1hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KXtsZXQgZT10LnZpZXdDb250YWluZXJSZWYsbj1lLmNyZWF0ZUVtYmVkZGVkVmlldyh0LnRlbXBsYXRlUmVmLHQuY29udGV4dCk7cmV0dXJuIG4ucm9vdE5vZGVzLmZvckVhY2goKHQ9PnRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZCh0KSkpLG4uZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2V0RGlzcG9zZUZuKCgoKT0+e2xldCB0PWUuaW5kZXhPZihuKTstMSE9PXQmJmUucmVtb3ZlKHQpfSkpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsbn1kaXNwb3NlKCl7c3VwZXIuZGlzcG9zZSgpLG51bGwhPXRoaXMub3V0bGV0RWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLm91dGxldEVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLm91dGxldEVsZW1lbnQpfV9nZXRDb21wb25lbnRSb290Tm9kZSh0KXtyZXR1cm4gdC5ob3N0Vmlldy5yb290Tm9kZXNbMF19fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBrRiBleHRlbmRzIHhGe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKX19a0YuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGtGKShTbShYZyksU20oZWgpKX0sa0YuybVkaXI9bG8oe3R5cGU6a0Ysc2VsZWN0b3JzOltbIiIsImNka1BvcnRhbCIsIiJdXSxleHBvcnRBczpbImNka1BvcnRhbCJdLGZlYXR1cmVzOlt4cF19KSxrRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlhnfSx7dHlwZTplaH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoa0YsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW2Nka1BvcnRhbF0iLGV4cG9ydEFzOiJjZGtQb3J0YWwifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WGd9LHt0eXBlOmVofV19KSxudWxsKTtjbGFzcyBTRiBleHRlbmRzIGtGe31TRi7JtWZhYz0oZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4odHx8KHQ9QWEoU0YpKSkobnx8U0YpfX0pKCksU0YuybVkaXI9bG8oe3R5cGU6U0Ysc2VsZWN0b3JzOltbIiIsImNkay1wb3J0YWwiLCIiXSxbIiIsInBvcnRhbCIsIiJdXSxleHBvcnRBczpbImNka1BvcnRhbCJdLGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6a0YsdXNlRXhpc3Rpbmc6U0Z9XSkseHBdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChTRixbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbY2RrLXBvcnRhbF0sIFtwb3J0YWxdIixleHBvcnRBczoiY2RrUG9ydGFsIixwcm92aWRlcnM6W3twcm92aWRlOmtGLHVzZUV4aXN0aW5nOlNGfV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgREYgZXh0ZW5kcyBQRntjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIoKSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9dCx0aGlzLl92aWV3Q29udGFpbmVyUmVmPWUsdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLmF0dGFjaGVkPW5ldyBMaCx0aGlzLmF0dGFjaERvbVBvcnRhbD10PT57aWYoIXRoaXMuX2RvY3VtZW50JiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgRXJyb3IoIkNhbm5vdCBhdHRhY2ggRE9NIHBvcnRhbCB3aXRob3V0IF9kb2N1bWVudCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIiKTtjb25zdCBlPXQuZWxlbWVudDtpZighZS5wYXJlbnROb2RlJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgRXJyb3IoIkRPTSBwb3J0YWwgY29udGVudCBtdXN0IGJlIGF0dGFjaGVkIHRvIGEgcGFyZW50IG5vZGUuIik7Y29uc3Qgbj10aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCJkb20tcG9ydGFsIik7dC5zZXRBdHRhY2hlZEhvc3QodGhpcyksZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuLGUpLHRoaXMuX2dldFJvb3ROb2RlKCkuYXBwZW5kQ2hpbGQoZSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCxzdXBlci5zZXREaXNwb3NlRm4oKCgpPT57bi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGUsbil9KSl9LHRoaXMuX2RvY3VtZW50PW59Z2V0IHBvcnRhbCgpe3JldHVybiB0aGlzLl9hdHRhY2hlZFBvcnRhbH1zZXQgcG9ydGFsKHQpeyghdGhpcy5oYXNBdHRhY2hlZCgpfHx0fHx0aGlzLl9pc0luaXRpYWxpemVkKSYmKHRoaXMuaGFzQXR0YWNoZWQoKSYmc3VwZXIuZGV0YWNoKCksdCYmc3VwZXIuYXR0YWNoKHQpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQpfWdldCBhdHRhY2hlZFJlZigpe3JldHVybiB0aGlzLl9hdHRhY2hlZFJlZn1uZ09uSW5pdCgpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITB9bmdPbkRlc3Ryb3koKXtzdXBlci5kaXNwb3NlKCksdGhpcy5fYXR0YWNoZWRQb3J0YWw9bnVsbCx0aGlzLl9hdHRhY2hlZFJlZj1udWxsfWF0dGFjaENvbXBvbmVudFBvcnRhbCh0KXt0LnNldEF0dGFjaGVkSG9zdCh0aGlzKTtjb25zdCBlPW51bGwhPXQudmlld0NvbnRhaW5lclJlZj90LnZpZXdDb250YWluZXJSZWY6dGhpcy5fdmlld0NvbnRhaW5lclJlZixuPSh0LmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcnx8dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0LmNvbXBvbmVudCksbz1lLmNyZWF0ZUNvbXBvbmVudChuLGUubGVuZ3RoLHQuaW5qZWN0b3J8fGUuaW5qZWN0b3IpO3JldHVybiBlIT09dGhpcy5fdmlld0NvbnRhaW5lclJlZiYmdGhpcy5fZ2V0Um9vdE5vZGUoKS5hcHBlbmRDaGlsZChvLmhvc3RWaWV3LnJvb3ROb2Rlc1swXSksc3VwZXIuc2V0RGlzcG9zZUZuKCgoKT0+by5kZXN0cm95KCkpKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuX2F0dGFjaGVkUmVmPW8sdGhpcy5hdHRhY2hlZC5lbWl0KG8pLG99YXR0YWNoVGVtcGxhdGVQb3J0YWwodCl7dC5zZXRBdHRhY2hlZEhvc3QodGhpcyk7Y29uc3QgZT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0LnRlbXBsYXRlUmVmLHQuY29udGV4dCk7cmV0dXJuIHN1cGVyLnNldERpc3Bvc2VGbigoKCk9PnRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKSkpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5fYXR0YWNoZWRSZWY9ZSx0aGlzLmF0dGFjaGVkLmVtaXQoZSksZX1fZ2V0Um9vdE5vZGUoKXtjb25zdCB0PXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50O3JldHVybiB0Lm5vZGVUeXBlPT09dC5FTEVNRU5UX05PREU/dDp0LnBhcmVudE5vZGV9fURGLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxERikoU20odWcpLFNtKGVoKSxTbShaXykpfSxERi7JtWRpcj1sbyh7dHlwZTpERixzZWxlY3RvcnM6W1siIiwiY2RrUG9ydGFsT3V0bGV0IiwiIl1dLGlucHV0czp7cG9ydGFsOlsiY2RrUG9ydGFsT3V0bGV0IiwicG9ydGFsIl19LG91dHB1dHM6e2F0dGFjaGVkOiJhdHRhY2hlZCJ9LGV4cG9ydEFzOlsiY2RrUG9ydGFsT3V0bGV0Il0sZmVhdHVyZXM6W3hwXX0pLERGLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dWd9LHt0eXBlOmVofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19XSxERi5wcm9wRGVjb3JhdG9ycz17YXR0YWNoZWQ6W3t0eXBlOk95fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoREYsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW2Nka1BvcnRhbE91dGxldF0iLGV4cG9ydEFzOiJjZGtQb3J0YWxPdXRsZXQiLGlucHV0czpbInBvcnRhbDogY2RrUG9ydGFsT3V0bGV0Il19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp1Z30se3R5cGU6ZWh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dfSkse2F0dGFjaGVkOlt7dHlwZTpPeX1dfSk7Y2xhc3MgRUYgZXh0ZW5kcyBERnt9RUYuybVmYWM9KGZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uIGUobil7cmV0dXJuKHR8fCh0PUFhKEVGKSkpKG58fEVGKX19KSgpLEVGLsm1ZGlyPWxvKHt0eXBlOkVGLHNlbGVjdG9yczpbWyIiLCJjZGtQb3J0YWxIb3N0IiwiIl0sWyIiLCJwb3J0YWxIb3N0IiwiIl1dLGlucHV0czp7cG9ydGFsOlsiY2RrUG9ydGFsSG9zdCIsInBvcnRhbCJdfSxleHBvcnRBczpbImNka1BvcnRhbEhvc3QiXSxmZWF0dXJlczpbcGcoW3twcm92aWRlOkRGLHVzZUV4aXN0aW5nOkVGfV0pLHhwXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoRUYsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW2Nka1BvcnRhbEhvc3RdLCBbcG9ydGFsSG9zdF0iLGV4cG9ydEFzOiJjZGtQb3J0YWxIb3N0IixpbnB1dHM6WyJwb3J0YWw6IGNka1BvcnRhbEhvc3QiXSxwcm92aWRlcnM6W3twcm92aWRlOkRGLHVzZUV4aXN0aW5nOkVGfV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgUkZ7fVJGLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxSRil9LFJGLsm1bW9kPWFvKHt0eXBlOlJGfSksUkYuybVpbmo9dm4oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoUkYsW3t0eXBlOkF5LGFyZ3M6W3tleHBvcnRzOltrRixERixTRixFRl0sZGVjbGFyYXRpb25zOltrRixERixTRixFRl19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhSRix7ZGVjbGFyYXRpb25zOltrRixERixTRixFRl0sZXhwb3J0czpba0YsREYsU0YsRUZdfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBBRj16eigpO2NsYXNzIFRGe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fdmlld3BvcnRSdWxlcj10LHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcz17dG9wOiIiLGxlZnQ6IiJ9LHRoaXMuX2lzRW5hYmxlZD0hMSx0aGlzLl9kb2N1bWVudD1lfWF0dGFjaCgpe31lbmFibGUoKXtpZih0aGlzLl9jYW5CZUVuYWJsZWQoKSl7Y29uc3QgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMubGVmdD10LnN0eWxlLmxlZnR8fCIiLHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3A9dC5zdHlsZS50b3B8fCIiLHQuc3R5bGUubGVmdD12eigtdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0KSx0LnN0eWxlLnRvcD12eigtdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi50b3ApLHQuY2xhc3NMaXN0LmFkZCgiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpLHRoaXMuX2lzRW5hYmxlZD0hMH19ZGlzYWJsZSgpe2lmKHRoaXMuX2lzRW5hYmxlZCl7Y29uc3QgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT10LnN0eWxlLG49dGhpcy5fZG9jdW1lbnQuYm9keS5zdHlsZSxvPWUuc2Nyb2xsQmVoYXZpb3J8fCIiLGk9bi5zY3JvbGxCZWhhdmlvcnx8IiI7dGhpcy5faXNFbmFibGVkPSExLGUubGVmdD10aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMubGVmdCxlLnRvcD10aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMudG9wLHQuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpLEFGJiYoZS5zY3JvbGxCZWhhdmlvcj1uLnNjcm9sbEJlaGF2aW9yPSJhdXRvIiksd2luZG93LnNjcm9sbCh0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLmxlZnQsdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi50b3ApLEFGJiYoZS5zY3JvbGxCZWhhdmlvcj1vLG4uc2Nyb2xsQmVoYXZpb3I9aSl9fV9jYW5CZUVuYWJsZWQoKXtpZih0aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIil8fHRoaXMuX2lzRW5hYmxlZClyZXR1cm4hMTtjb25zdCB0PXRoaXMuX2RvY3VtZW50LmJvZHksZT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpO3JldHVybiB0LnNjcm9sbEhlaWdodD5lLmhlaWdodHx8dC5zY3JvbGxXaWR0aD5lLndpZHRofX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gTkYoKXtyZXR1cm4gRXJyb3IoIlNjcm9sbCBzdHJhdGVneSBoYXMgYWxyZWFkeSBiZWVuIGF0dGFjaGVkLiIpfWNsYXNzIHpGe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl92aWV3cG9ydFJ1bGVyPW4sdGhpcy5fY29uZmlnPW8sdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fZGV0YWNoPSgpPT57dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9uZ1pvbmUucnVuKCgoKT0+dGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSkpfX1hdHRhY2godCl7aWYodGhpcy5fb3ZlcmxheVJlZiYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IE5GKCk7dGhpcy5fb3ZlcmxheVJlZj10fWVuYWJsZSgpe2lmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbilyZXR1cm47Y29uc3QgdD10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKDApO3RoaXMuX2NvbmZpZyYmdGhpcy5fY29uZmlnLnRocmVzaG9sZCYmdGhpcy5fY29uZmlnLnRocmVzaG9sZD4xPyh0aGlzLl9pbml0aWFsU2Nyb2xsUG9zaXRpb249dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10LnN1YnNjcmliZSgoKCk9Pntjb25zdCB0PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLnRvcDtNYXRoLmFicyh0LXRoaXMuX2luaXRpYWxTY3JvbGxQb3NpdGlvbik+dGhpcy5fY29uZmlnLnRocmVzaG9sZD90aGlzLl9kZXRhY2goKTp0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9KSkpOnRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10LnN1YnNjcmliZSh0aGlzLl9kZXRhY2gpfWRpc2FibGUoKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24mJih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCl9ZGV0YWNoKCl7dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgSUZ7ZW5hYmxlKCl7fWRpc2FibGUoKXt9YXR0YWNoKCl7fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovZnVuY3Rpb24gSEYodCxlKXtyZXR1cm4gZS5zb21lKChlPT50LmJvdHRvbTxlLnRvcHx8dC50b3A+ZS5ib3R0b218fHQucmlnaHQ8ZS5sZWZ0fHx0LmxlZnQ+ZS5yaWdodCkpfWZ1bmN0aW9uIEZGKHQsZSl7cmV0dXJuIGUuc29tZSgoZT0+dC50b3A8ZS50b3B8fHQuYm90dG9tPmUuYm90dG9tfHx0LmxlZnQ8ZS5sZWZ0fHx0LnJpZ2h0PmUucmlnaHQpKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgTEZ7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj10LHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9jb25maWc9byx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbH1hdHRhY2godCl7aWYodGhpcy5fb3ZlcmxheVJlZiYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IE5GKCk7dGhpcy5fb3ZlcmxheVJlZj10fWVuYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbnx8KHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKHRoaXMuX2NvbmZpZz90aGlzLl9jb25maWcuc2Nyb2xsVGhyb3R0bGU6MCkuc3Vic2NyaWJlKCgoKT0+e2lmKHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSx0aGlzLl9jb25maWcmJnRoaXMuX2NvbmZpZy5hdXRvQ2xvc2Upe2NvbnN0IHQ9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6ZSxoZWlnaHQ6bn09dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtIRih0LFt7d2lkdGg6ZSxoZWlnaHQ6bixib3R0b206bixyaWdodDplLHRvcDowLGxlZnQ6MH1dKSYmKHRoaXMuZGlzYWJsZSgpLHRoaXMuX25nWm9uZS5ydW4oKCgpPT50aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpKSkpfX0pKSl9ZGlzYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX1kZXRhY2goKXt0aGlzLmRpc2FibGUoKSx0aGlzLl9vdmVybGF5UmVmPW51bGx9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBCRntjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPXQsdGhpcy5fdmlld3BvcnRSdWxlcj1lLHRoaXMuX25nWm9uZT1uLHRoaXMubm9vcD0oKT0+bmV3IElGLHRoaXMuY2xvc2U9dD0+bmV3IHpGKHRoaXMuX3Njcm9sbERpc3BhdGNoZXIsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0UnVsZXIsdCksdGhpcy5ibG9jaz0oKT0+bmV3IFRGKHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fZG9jdW1lbnQpLHRoaXMucmVwb3NpdGlvbj10PT5uZXcgTEYodGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcix0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX25nWm9uZSx0KSx0aGlzLl9kb2N1bWVudD1vfX1CRi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QkYpKHZyKHBGKSx2cih1RiksdnIoYV8pLHZyKFpfKSl9LEJGLsm1cHJvdj1Nbih7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBCRih2cihwRiksdnIodUYpLHZyKGFfKSx2cihaXykpfSx0b2tlbjpCRixwcm92aWRlZEluOiJyb290In0pLEJGLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6cEZ9LHt0eXBlOnVGfSx7dHlwZTphX30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChCRixbe3R5cGU6aW0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6cEZ9LHt0eXBlOnVGfSx7dHlwZTphX30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBWRntjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnNjcm9sbFN0cmF0ZWd5PW5ldyBJRix0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMSx0aGlzLmJhY2tkcm9wQ2xhc3M9ImNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AiLHRoaXMuZGlzcG9zZU9uTmF2aWdhdGlvbj0hMSx0KXtjb25zdCBlPU9iamVjdC5rZXlzKHQpO2Zvcihjb25zdCBuIG9mIGUpdm9pZCAwIT09dFtuXSYmKHRoaXNbbl09dFtuXSl9fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgakZ7Y29uc3RydWN0b3IodCxlLG4sbyxpKXt0aGlzLm9mZnNldFg9bix0aGlzLm9mZnNldFk9byx0aGlzLnBhbmVsQ2xhc3M9aSx0aGlzLm9yaWdpblg9dC5vcmlnaW5YLHRoaXMub3JpZ2luWT10Lm9yaWdpblksdGhpcy5vdmVybGF5WD1lLm92ZXJsYXlYLHRoaXMub3ZlcmxheVk9ZS5vdmVybGF5WX19Y2xhc3MgVUZ7fWNsYXNzIEdGe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jb25uZWN0aW9uUGFpcj10LHRoaXMuc2Nyb2xsYWJsZVZpZXdQcm9wZXJ0aWVzPWV9fWZ1bmN0aW9uIFdGKHQsZSl7aWYoInRvcCIhPT1lJiYiYm90dG9tIiE9PWUmJiJjZW50ZXIiIT09ZSl0aHJvdyBFcnJvcihgQ29ubmVjdGVkUG9zaXRpb246IEludmFsaWQgJHt0fSAiJHtlfSIuIEV4cGVjdGVkICJ0b3AiLCAiYm90dG9tIiBvciAiY2VudGVyIi5gKX1mdW5jdGlvbiBZRih0LGUpe2lmKCJzdGFydCIhPT1lJiYiZW5kIiE9PWUmJiJjZW50ZXIiIT09ZSl0aHJvdyBFcnJvcihgQ29ubmVjdGVkUG9zaXRpb246IEludmFsaWQgJHt0fSAiJHtlfSIuIEV4cGVjdGVkICJzdGFydCIsICJlbmQiIG9yICJjZW50ZXIiLmApfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9HRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmpGfSx7dHlwZTpVRixkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfV07Y2xhc3MgcUZ7Y29uc3RydWN0b3IodCl7dGhpcy5fYXR0YWNoZWRPdmVybGF5cz1bXSx0aGlzLl9kb2N1bWVudD10fW5nT25EZXN0cm95KCl7dGhpcy5kZXRhY2goKX1hZGQodCl7dGhpcy5yZW1vdmUodCksdGhpcy5fYXR0YWNoZWRPdmVybGF5cy5wdXNoKHQpfXJlbW92ZSh0KXtjb25zdCBlPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuaW5kZXhPZih0KTtlPi0xJiZ0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNwbGljZShlLDEpLDA9PT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmxlbmd0aCYmdGhpcy5kZXRhY2goKX19cUYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHFGKSh2cihaXykpfSxxRi7JtXByb3Y9TW4oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgcUYodnIoWl8pKX0sdG9rZW46cUYscHJvdmlkZWRJbjoicm9vdCJ9KSxxRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgocUYsW3t0eXBlOmltLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBaRiBleHRlbmRzIHFGe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuX2tleWRvd25MaXN0ZW5lcj10PT57Y29uc3QgZT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzO2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+LTE7bi0tKWlmKGVbbl0uX2tleWRvd25FdmVudHMub2JzZXJ2ZXJzLmxlbmd0aD4wKXtlW25dLl9rZXlkb3duRXZlbnRzLm5leHQodCk7YnJlYWt9fX1hZGQodCl7c3VwZXIuYWRkKHQpLHRoaXMuX2lzQXR0YWNoZWR8fCh0aGlzLl9kb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX2tleWRvd25MaXN0ZW5lciksdGhpcy5faXNBdHRhY2hlZD0hMCl9ZGV0YWNoKCl7dGhpcy5faXNBdHRhY2hlZCYmKHRoaXMuX2RvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fa2V5ZG93bkxpc3RlbmVyKSx0aGlzLl9pc0F0dGFjaGVkPSExKX19WkYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFpGKSh2cihaXykpfSxaRi7JtXByb3Y9TW4oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgWkYodnIoWl8pKX0sdG9rZW46WkYscHJvdmlkZWRJbjoicm9vdCJ9KSxaRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoWkYsW3t0eXBlOmltLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBYRiBleHRlbmRzIHFGe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCksdGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9jdXJzb3JTdHlsZUlzU2V0PSExLHRoaXMuX2NsaWNrTGlzdGVuZXI9dD0+e2NvbnN0IGU9THoodCksbj10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNsaWNlKCk7Zm9yKGxldCBvPW4ubGVuZ3RoLTE7bz4tMTtvLS0pe2NvbnN0IGk9bltvXTtpZighKGkuX291dHNpZGVQb2ludGVyRXZlbnRzLm9ic2VydmVycy5sZW5ndGg8MSkmJmkuaGFzQXR0YWNoZWQoKSl7aWYoaS5vdmVybGF5RWxlbWVudC5jb250YWlucyhlKSlicmVhaztpLl9vdXRzaWRlUG9pbnRlckV2ZW50cy5uZXh0KHQpfX19fWFkZCh0KXtpZihzdXBlci5hZGQodCksIXRoaXMuX2lzQXR0YWNoZWQpe2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQuYm9keTt0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9jbGlja0xpc3RlbmVyLCEwKSx0LmFkZEV2ZW50TGlzdGVuZXIoImF1eGNsaWNrIix0aGlzLl9jbGlja0xpc3RlbmVyLCEwKSx0LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iix0aGlzLl9jbGlja0xpc3RlbmVyLCEwKSx0aGlzLl9wbGF0Zm9ybS5JT1MmJiF0aGlzLl9jdXJzb3JTdHlsZUlzU2V0JiYodGhpcy5fY3Vyc29yT3JpZ2luYWxWYWx1ZT10LnN0eWxlLmN1cnNvcix0LnN0eWxlLmN1cnNvcj0icG9pbnRlciIsdGhpcy5fY3Vyc29yU3R5bGVJc1NldD0hMCksdGhpcy5faXNBdHRhY2hlZD0hMH19ZGV0YWNoKCl7aWYodGhpcy5faXNBdHRhY2hlZCl7Y29uc3QgdD10aGlzLl9kb2N1bWVudC5ib2R5O3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYXV4Y2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLHRoaXMuX3BsYXRmb3JtLklPUyYmdGhpcy5fY3Vyc29yU3R5bGVJc1NldCYmKHQuc3R5bGUuY3Vyc29yPXRoaXMuX2N1cnNvck9yaWdpbmFsVmFsdWUsdGhpcy5fY3Vyc29yU3R5bGVJc1NldD0hMSksdGhpcy5faXNBdHRhY2hlZD0hMX19fVhGLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxYRikodnIoWl8pLHZyKHd6KSl9LFhGLsm1cHJvdj1Nbih7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBYRih2cihaXyksdnIod3opKX0sdG9rZW46WEYscHJvdmlkZWRJbjoicm9vdCJ9KSxYRi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX0se3R5cGU6d3p9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFhGLFt7dHlwZTppbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19LHt0eXBlOnd6fV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IEtGPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxKRj12b2lkIDAhPT1LRi5fX2thcm1hX18mJiEhS0YuX19rYXJtYV9ffHx2b2lkIDAhPT1LRi5qYXNtaW5lJiYhIUtGLmphc21pbmV8fHZvaWQgMCE9PUtGLmplc3QmJiEhS0YuamVzdHx8dm9pZCAwIT09S0YuTW9jaGEmJiEhS0YuTW9jaGE7Y2xhc3MgUUZ7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX2RvY3VtZW50PXR9bmdPbkRlc3Ryb3koKXtjb25zdCB0PXRoaXMuX2NvbnRhaW5lckVsZW1lbnQ7dCYmdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9Z2V0Q29udGFpbmVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9jb250YWluZXJFbGVtZW50fHx0aGlzLl9jcmVhdGVDb250YWluZXIoKSx0aGlzLl9jb250YWluZXJFbGVtZW50fV9jcmVhdGVDb250YWluZXIoKXtjb25zdCB0PSJjZGstb3ZlcmxheS1jb250YWluZXIiO2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8SkYpe2NvbnN0IGU9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7dH1bcGxhdGZvcm09InNlcnZlciJdLCAuJHt0fVtwbGF0Zm9ybT0idGVzdCJdYCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVbdF0pfWNvbnN0IGU9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZS5jbGFzc0xpc3QuYWRkKHQpLEpGP2Uuc2V0QXR0cmlidXRlKCJwbGF0Zm9ybSIsInRlc3QiKTp0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJ8fGUuc2V0QXR0cmlidXRlKCJwbGF0Zm9ybSIsInNlcnZlciIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSksdGhpcy5fY29udGFpbmVyRWxlbWVudD1lfX1RRi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UUYpKHZyKFpfKSx2cih3eikpfSxRRi7JtXByb3Y9TW4oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgUUYodnIoWl8pLHZyKHd6KSl9LHRva2VuOlFGLHByb3ZpZGVkSW46InJvb3QifSksUUYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19LHt0eXBlOnd6fV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChRRixbe3R5cGU6aW0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfSx7dHlwZTp3en1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyAkRntjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyLHMsbCl7dGhpcy5fcG9ydGFsT3V0bGV0PXQsdGhpcy5faG9zdD1lLHRoaXMuX3BhbmU9bix0aGlzLl9jb25maWc9byx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXI9YSx0aGlzLl9kb2N1bWVudD1yLHRoaXMuX2xvY2F0aW9uPXMsdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlcj1sLHRoaXMuX2JhY2tkcm9wRWxlbWVudD1udWxsLHRoaXMuX2JhY2tkcm9wQ2xpY2s9bmV3IEksdGhpcy5fYXR0YWNobWVudHM9bmV3IEksdGhpcy5fZGV0YWNobWVudHM9bmV3IEksdGhpcy5fbG9jYXRpb25DaGFuZ2VzPW0uRU1QVFksdGhpcy5fYmFja2Ryb3BDbGlja0hhbmRsZXI9dD0+dGhpcy5fYmFja2Ryb3BDbGljay5uZXh0KHQpLHRoaXMuX2tleWRvd25FdmVudHM9bmV3IEksdGhpcy5fb3V0c2lkZVBvaW50ZXJFdmVudHM9bmV3IEksby5zY3JvbGxTdHJhdGVneSYmKHRoaXMuX3Njcm9sbFN0cmF0ZWd5PW8uc2Nyb2xsU3RyYXRlZ3ksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5PW8ucG9zaXRpb25TdHJhdGVneX1nZXQgb3ZlcmxheUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fcGFuZX1nZXQgYmFja2Ryb3BFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2JhY2tkcm9wRWxlbWVudH1nZXQgaG9zdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5faG9zdH1hdHRhY2godCl7bGV0IGU9dGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaCh0KTtyZXR1cm4hdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50JiZ0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQmJnRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmF0dGFjaCh0aGlzKSx0aGlzLl91cGRhdGVTdGFja2luZ09yZGVyKCksdGhpcy5fdXBkYXRlRWxlbWVudFNpemUoKSx0aGlzLl91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX3Njcm9sbFN0cmF0ZWd5LmVuYWJsZSgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKGJlKDEpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLnVwZGF0ZVBvc2l0aW9uKCl9KSksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMCksdGhpcy5fY29uZmlnLmhhc0JhY2tkcm9wJiZ0aGlzLl9hdHRhY2hCYWNrZHJvcCgpLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX3BhbmUsdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MsITApLHRoaXMuX2F0dGFjaG1lbnRzLm5leHQoKSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIuYWRkKHRoaXMpLHRoaXMuX2NvbmZpZy5kaXNwb3NlT25OYXZpZ2F0aW9uJiYodGhpcy5fbG9jYXRpb25DaGFuZ2VzPXRoaXMuX2xvY2F0aW9uLnN1YnNjcmliZSgoKCk9PnRoaXMuZGlzcG9zZSgpKSkpLHRoaXMuX291dHNpZGVDbGlja0Rpc3BhdGNoZXIuYWRkKHRoaXMpLGV9ZGV0YWNoKCl7aWYoIXRoaXMuaGFzQXR0YWNoZWQoKSlyZXR1cm47dGhpcy5kZXRhY2hCYWNrZHJvcCgpLHRoaXMuX3RvZ2dsZVBvaW50ZXJFdmVudHMoITEpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoJiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRldGFjaCgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5JiZ0aGlzLl9zY3JvbGxTdHJhdGVneS5kaXNhYmxlKCk7Y29uc3QgdD10aGlzLl9wb3J0YWxPdXRsZXQuZGV0YWNoKCk7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzLm5leHQoKSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIucmVtb3ZlKHRoaXMpLHRoaXMuX2RldGFjaENvbnRlbnRXaGVuU3RhYmxlKCksdGhpcy5fbG9jYXRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCksdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdH1kaXNwb3NlKCl7Y29uc3QgdD10aGlzLmhhc0F0dGFjaGVkKCk7dGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5kaXNwb3NlKCksdGhpcy5fZGlzcG9zZVNjcm9sbFN0cmF0ZWd5KCksdGhpcy5kZXRhY2hCYWNrZHJvcCgpLHRoaXMuX2xvY2F0aW9uQ2hhbmdlcy51bnN1YnNjcmliZSgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fcG9ydGFsT3V0bGV0LmRpc3Bvc2UoKSx0aGlzLl9hdHRhY2htZW50cy5jb21wbGV0ZSgpLHRoaXMuX2JhY2tkcm9wQ2xpY2suY29tcGxldGUoKSx0aGlzLl9rZXlkb3duRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5fb3V0c2lkZVBvaW50ZXJFdmVudHMuY29tcGxldGUoKSx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0aGlzLl9ob3N0JiZ0aGlzLl9ob3N0LnBhcmVudE5vZGUmJih0aGlzLl9ob3N0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5faG9zdCksdGhpcy5faG9zdD1udWxsKSx0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQ9dGhpcy5fcGFuZT1udWxsLHQmJnRoaXMuX2RldGFjaG1lbnRzLm5leHQoKSx0aGlzLl9kZXRhY2htZW50cy5jb21wbGV0ZSgpfWhhc0F0dGFjaGVkKCl7cmV0dXJuIHRoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpfWJhY2tkcm9wQ2xpY2soKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BDbGlja31hdHRhY2htZW50cygpe3JldHVybiB0aGlzLl9hdHRhY2htZW50c31kZXRhY2htZW50cygpe3JldHVybiB0aGlzLl9kZXRhY2htZW50c31rZXlkb3duRXZlbnRzKCl7cmV0dXJuIHRoaXMuX2tleWRvd25FdmVudHN9b3V0c2lkZVBvaW50ZXJFdmVudHMoKXtyZXR1cm4gdGhpcy5fb3V0c2lkZVBvaW50ZXJFdmVudHN9Z2V0Q29uZmlnKCl7cmV0dXJuIHRoaXMuX2NvbmZpZ311cGRhdGVQb3NpdGlvbigpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuYXBwbHkoKX11cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHQpe3QhPT10aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiYodGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5kaXNwb3NlKCksdGhpcy5fcG9zaXRpb25TdHJhdGVneT10LHRoaXMuaGFzQXR0YWNoZWQoKSYmKHQuYXR0YWNoKHRoaXMpLHRoaXMudXBkYXRlUG9zaXRpb24oKSkpfXVwZGF0ZVNpemUodCl7dGhpcy5fY29uZmlnPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLl9jb25maWcpLHQpLHRoaXMuX3VwZGF0ZUVsZW1lbnRTaXplKCl9c2V0RGlyZWN0aW9uKHQpe3RoaXMuX2NvbmZpZz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5fY29uZmlnKSx7ZGlyZWN0aW9uOnR9KSx0aGlzLl91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCl9YWRkUGFuZWxDbGFzcyh0KXt0aGlzLl9wYW5lJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX3BhbmUsdCwhMCl9cmVtb3ZlUGFuZWxDbGFzcyh0KXt0aGlzLl9wYW5lJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX3BhbmUsdCwhMSl9Z2V0RGlyZWN0aW9uKCl7Y29uc3QgdD10aGlzLl9jb25maWcuZGlyZWN0aW9uO3JldHVybiB0PyJzdHJpbmciPT10eXBlb2YgdD90OnQudmFsdWU6Imx0ciJ9dXBkYXRlU2Nyb2xsU3RyYXRlZ3kodCl7dCE9PXRoaXMuX3Njcm9sbFN0cmF0ZWd5JiYodGhpcy5fZGlzcG9zZVNjcm9sbFN0cmF0ZWd5KCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9dCx0aGlzLmhhc0F0dGFjaGVkKCkmJih0LmF0dGFjaCh0aGlzKSx0LmVuYWJsZSgpKSl9X3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKXt0aGlzLl9ob3N0LnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLmdldERpcmVjdGlvbigpKX1fdXBkYXRlRWxlbWVudFNpemUoKXtpZighdGhpcy5fcGFuZSlyZXR1cm47Y29uc3QgdD10aGlzLl9wYW5lLnN0eWxlO3Qud2lkdGg9dnoodGhpcy5fY29uZmlnLndpZHRoKSx0LmhlaWdodD12eih0aGlzLl9jb25maWcuaGVpZ2h0KSx0Lm1pbldpZHRoPXZ6KHRoaXMuX2NvbmZpZy5taW5XaWR0aCksdC5taW5IZWlnaHQ9dnoodGhpcy5fY29uZmlnLm1pbkhlaWdodCksdC5tYXhXaWR0aD12eih0aGlzLl9jb25maWcubWF4V2lkdGgpLHQubWF4SGVpZ2h0PXZ6KHRoaXMuX2NvbmZpZy5tYXhIZWlnaHQpfV90b2dnbGVQb2ludGVyRXZlbnRzKHQpe3RoaXMuX3BhbmUuc3R5bGUucG9pbnRlckV2ZW50cz10PyIiOiJub25lIn1fYXR0YWNoQmFja2Ryb3AoKXtjb25zdCB0PSJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIjt0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wIiksdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCEwKSx0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9ob3N0KSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2JhY2tkcm9wQ2xpY2tIYW5kbGVyKSwidW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e3RoaXMuX2JhY2tkcm9wRWxlbWVudCYmdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQodCl9KSl9KSk6dGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQodCl9X3VwZGF0ZVN0YWNraW5nT3JkZXIoKXt0aGlzLl9ob3N0Lm5leHRTaWJsaW5nJiZ0aGlzLl9ob3N0LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5faG9zdCl9ZGV0YWNoQmFja2Ryb3AoKXtsZXQgdCxlPXRoaXMuX2JhY2tkcm9wRWxlbWVudDtpZighZSlyZXR1cm47bGV0IG49KCk9PntlJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fYmFja2Ryb3BDbGlja0hhbmRsZXIpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsbiksZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSkpLHRoaXMuX2JhY2tkcm9wRWxlbWVudD09ZSYmKHRoaXMuX2JhY2tkcm9wRWxlbWVudD1udWxsKSx0aGlzLl9jb25maWcuYmFja2Ryb3BDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3NlcyhlLHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCExKSxjbGVhclRpbWVvdXQodCl9O2UuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PntlLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLG4pfSkpLGUuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsdD10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT5zZXRUaW1lb3V0KG4sNTAwKSkpfV90b2dnbGVDbGFzc2VzKHQsZSxuKXtjb25zdCBvPXQuY2xhc3NMaXN0O016KGUpLmZvckVhY2goKHQ9Pnt0JiYobj9vLmFkZCh0KTpvLnJlbW92ZSh0KSl9KSl9X2RldGFjaENvbnRlbnRXaGVuU3RhYmxlKCl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e2NvbnN0IHQ9dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoSWUocmUodGhpcy5fYXR0YWNobWVudHMsdGhpcy5fZGV0YWNobWVudHMpKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX3BhbmUmJnRoaXMuX2hvc3QmJjAhPT10aGlzLl9wYW5lLmNoaWxkcmVuLmxlbmd0aHx8KHRoaXMuX3BhbmUmJnRoaXMuX2NvbmZpZy5wYW5lbENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX3BhbmUsdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MsITEpLHRoaXMuX2hvc3QmJnRoaXMuX2hvc3QucGFyZW50RWxlbWVudCYmKHRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudD10aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQsdGhpcy5fcHJldmlvdXNIb3N0UGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuX2hvc3QpKSx0LnVuc3Vic2NyaWJlKCkpfSkpfSkpfV9kaXNwb3NlU2Nyb2xsU3RyYXRlZ3koKXtjb25zdCB0PXRoaXMuX3Njcm9sbFN0cmF0ZWd5O3QmJih0LmRpc2FibGUoKSx0LmRldGFjaCYmdC5kZXRhY2goKSl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCB0TD0iY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveCIsZUw9LyhbQS1aYS16JV0rKSQvO2NsYXNzIG5Me2NvbnN0cnVjdG9yKHQsZSxuLG8saSl7dGhpcy5fdmlld3BvcnRSdWxlcj1lLHRoaXMuX2RvY3VtZW50PW4sdGhpcy5fcGxhdGZvcm09byx0aGlzLl9vdmVybGF5Q29udGFpbmVyPWksdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZT17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5faXNQdXNoZWQ9ITEsdGhpcy5fY2FuUHVzaD0hMCx0aGlzLl9ncm93QWZ0ZXJPcGVuPSExLHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucz0hMCx0aGlzLl9wb3NpdGlvbkxvY2tlZD0hMSx0aGlzLl92aWV3cG9ydE1hcmdpbj0wLHRoaXMuX3Njcm9sbGFibGVzPVtdLHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz1bXSx0aGlzLl9wb3NpdGlvbkNoYW5nZXM9bmV3IEksdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPW0uRU1QVFksdGhpcy5fb2Zmc2V0WD0wLHRoaXMuX29mZnNldFk9MCx0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzPVtdLHRoaXMucG9zaXRpb25DaGFuZ2VzPXRoaXMuX3Bvc2l0aW9uQ2hhbmdlcyx0aGlzLnNldE9yaWdpbih0KX1nZXQgcG9zaXRpb25zKCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uc31hdHRhY2godCl7aWYodGhpcy5fb3ZlcmxheVJlZiYmdCE9PXRoaXMuX292ZXJsYXlSZWYmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyBFcnJvcigiVGhpcyBwb3NpdGlvbiBzdHJhdGVneSBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIGFuIG92ZXJsYXkiKTt0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0TCksdGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX2JvdW5kaW5nQm94PXQuaG9zdEVsZW1lbnQsdGhpcy5fcGFuZT10Lm92ZXJsYXlFbGVtZW50LHRoaXMuX2lzRGlzcG9zZWQ9ITEsdGhpcy5faXNJbml0aWFsUmVuZGVyPSEwLHRoaXMuX2xhc3RQb3NpdGlvbj1udWxsLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9pc0luaXRpYWxSZW5kZXI9ITAsdGhpcy5hcHBseSgpfSkpfWFwcGx5KCl7aWYodGhpcy5faXNEaXNwb3NlZHx8IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47aWYoIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmdGhpcy5fcG9zaXRpb25Mb2NrZWQmJnRoaXMuX2xhc3RQb3NpdGlvbilyZXR1cm4gdm9pZCB0aGlzLnJlYXBwbHlMYXN0UG9zaXRpb24oKTt0aGlzLl9jbGVhclBhbmVsQ2xhc3NlcygpLHRoaXMuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKSx0aGlzLl9yZXNldEJvdW5kaW5nQm94U3R5bGVzKCksdGhpcy5fdmlld3BvcnRSZWN0PXRoaXMuX2dldE5hcnJvd2VkVmlld3BvcnRSZWN0KCksdGhpcy5fb3JpZ2luUmVjdD10aGlzLl9nZXRPcmlnaW5SZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCB0PXRoaXMuX29yaWdpblJlY3QsZT10aGlzLl9vdmVybGF5UmVjdCxuPXRoaXMuX3ZpZXdwb3J0UmVjdCxvPVtdO2xldCBpO2ZvcihsZXQgYSBvZiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMpe2xldCByPXRoaXMuX2dldE9yaWdpblBvaW50KHQsYSkscz10aGlzLl9nZXRPdmVybGF5UG9pbnQocixlLGEpLGw9dGhpcy5fZ2V0T3ZlcmxheUZpdChzLGUsbixhKTtpZihsLmlzQ29tcGxldGVseVdpdGhpblZpZXdwb3J0KXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMSx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24oYSxyKTt0aGlzLl9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zKGwscyxuKT9vLnB1c2goe3Bvc2l0aW9uOmEsb3JpZ2luOnIsb3ZlcmxheVJlY3Q6ZSxib3VuZGluZ0JveFJlY3Q6dGhpcy5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0KHIsYSl9KTooIWl8fGkub3ZlcmxheUZpdC52aXNpYmxlQXJlYTxsLnZpc2libGVBcmVhKSYmKGk9e292ZXJsYXlGaXQ6bCxvdmVybGF5UG9pbnQ6cyxvcmlnaW5Qb2ludDpyLHBvc2l0aW9uOmEsb3ZlcmxheVJlY3Q6ZX0pfWlmKG8ubGVuZ3RoKXtsZXQgdD1udWxsLGU9LTE7Zm9yKGNvbnN0IG4gb2Ygbyl7Y29uc3Qgbz1uLmJvdW5kaW5nQm94UmVjdC53aWR0aCpuLmJvdW5kaW5nQm94UmVjdC5oZWlnaHQqKG4ucG9zaXRpb24ud2VpZ2h0fHwxKTtvPmUmJihlPW8sdD1uKX1yZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITEsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKHQucG9zaXRpb24sdC5vcmlnaW4pfWlmKHRoaXMuX2NhblB1c2gpcmV0dXJuIHRoaXMuX2lzUHVzaGVkPSEwLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihpLnBvc2l0aW9uLGkub3JpZ2luUG9pbnQpO3RoaXMuX2FwcGx5UG9zaXRpb24oaS5wb3NpdGlvbixpLm9yaWdpblBvaW50KX1kZXRhY2goKXt0aGlzLl9jbGVhclBhbmVsQ2xhc3NlcygpLHRoaXMuX2xhc3RQb3NpdGlvbj1udWxsLHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudD1udWxsLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkfHwodGhpcy5fYm91bmRpbmdCb3gmJm9MKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLHt0b3A6IiIsbGVmdDoiIixyaWdodDoiIixib3R0b206IiIsaGVpZ2h0OiIiLHdpZHRoOiIiLGFsaWduSXRlbXM6IiIsanVzdGlmeUNvbnRlbnQ6IiJ9KSx0aGlzLl9wYW5lJiZ0aGlzLl9yZXNldE92ZXJsYXlFbGVtZW50U3R5bGVzKCksdGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKHRMKSx0aGlzLmRldGFjaCgpLHRoaXMuX3Bvc2l0aW9uQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX292ZXJsYXlSZWY9dGhpcy5fYm91bmRpbmdCb3g9bnVsbCx0aGlzLl9pc0Rpc3Bvc2VkPSEwKX1yZWFwcGx5TGFzdFBvc2l0aW9uKCl7aWYoIXRoaXMuX2lzRGlzcG9zZWQmJighdGhpcy5fcGxhdGZvcm18fHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcikpe3RoaXMuX29yaWdpblJlY3Q9dGhpcy5fZ2V0T3JpZ2luUmVjdCgpLHRoaXMuX292ZXJsYXlSZWN0PXRoaXMuX3BhbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fdmlld3BvcnRSZWN0PXRoaXMuX2dldE5hcnJvd2VkVmlld3BvcnRSZWN0KCk7Y29uc3QgdD10aGlzLl9sYXN0UG9zaXRpb258fHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uc1swXSxlPXRoaXMuX2dldE9yaWdpblBvaW50KHRoaXMuX29yaWdpblJlY3QsdCk7dGhpcy5fYXBwbHlQb3NpdGlvbih0LGUpfX13aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnModCl7cmV0dXJuIHRoaXMuX3Njcm9sbGFibGVzPXQsdGhpc313aXRoUG9zaXRpb25zKHQpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9dCwtMT09PXQuaW5kZXhPZih0aGlzLl9sYXN0UG9zaXRpb24pJiYodGhpcy5fbGFzdFBvc2l0aW9uPW51bGwpLHRoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdGhpc313aXRoVmlld3BvcnRNYXJnaW4odCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0TWFyZ2luPXQsdGhpc313aXRoRmxleGlibGVEaW1lbnNpb25zKHQ9ITApe3JldHVybiB0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnM9dCx0aGlzfXdpdGhHcm93QWZ0ZXJPcGVuKHQ9ITApe3JldHVybiB0aGlzLl9ncm93QWZ0ZXJPcGVuPXQsdGhpc313aXRoUHVzaCh0PSEwKXtyZXR1cm4gdGhpcy5fY2FuUHVzaD10LHRoaXN9d2l0aExvY2tlZFBvc2l0aW9uKHQ9ITApe3JldHVybiB0aGlzLl9wb3NpdGlvbkxvY2tlZD10LHRoaXN9c2V0T3JpZ2luKHQpe3JldHVybiB0aGlzLl9vcmlnaW49dCx0aGlzfXdpdGhEZWZhdWx0T2Zmc2V0WCh0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WD10LHRoaXN9d2l0aERlZmF1bHRPZmZzZXRZKHQpe3JldHVybiB0aGlzLl9vZmZzZXRZPXQsdGhpc313aXRoVHJhbnNmb3JtT3JpZ2luT24odCl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yPXQsdGhpc31fZ2V0T3JpZ2luUG9pbnQodCxlKXtsZXQgbixvO2lmKCJjZW50ZXIiPT1lLm9yaWdpblgpbj10LmxlZnQrdC53aWR0aC8yO2Vsc2V7Y29uc3Qgbz10aGlzLl9pc1J0bCgpP3QucmlnaHQ6dC5sZWZ0LGk9dGhpcy5faXNSdGwoKT90LmxlZnQ6dC5yaWdodDtuPSJzdGFydCI9PWUub3JpZ2luWD9vOml9cmV0dXJuIG89ImNlbnRlciI9PWUub3JpZ2luWT90LnRvcCt0LmhlaWdodC8yOiJ0b3AiPT1lLm9yaWdpblk/dC50b3A6dC5ib3R0b20se3g6bix5Om99fV9nZXRPdmVybGF5UG9pbnQodCxlLG4pe2xldCBvLGk7cmV0dXJuIG89ImNlbnRlciI9PW4ub3ZlcmxheVg/LWUud2lkdGgvMjoic3RhcnQiPT09bi5vdmVybGF5WD90aGlzLl9pc1J0bCgpPy1lLndpZHRoOjA6dGhpcy5faXNSdGwoKT8wOi1lLndpZHRoLGk9ImNlbnRlciI9PW4ub3ZlcmxheVk/LWUuaGVpZ2h0LzI6InRvcCI9PW4ub3ZlcmxheVk/MDotZS5oZWlnaHQse3g6dC54K28seTp0LnkraX19X2dldE92ZXJsYXlGaXQodCxlLG4sbyl7Y29uc3QgaT1hTChlKTtsZXR7eDphLHk6cn09dCxzPXRoaXMuX2dldE9mZnNldChvLCJ4IiksbD10aGlzLl9nZXRPZmZzZXQobywieSIpO3MmJihhKz1zKSxsJiYocis9bCk7bGV0IGM9MC1yLGQ9citpLmhlaWdodC1uLmhlaWdodCxwPXRoaXMuX3N1YnRyYWN0T3ZlcmZsb3dzKGkud2lkdGgsMC1hLGEraS53aWR0aC1uLndpZHRoKSxtPXRoaXMuX3N1YnRyYWN0T3ZlcmZsb3dzKGkuaGVpZ2h0LGMsZCksdT1wKm07cmV0dXJue3Zpc2libGVBcmVhOnUsaXNDb21wbGV0ZWx5V2l0aGluVmlld3BvcnQ6aS53aWR0aCppLmhlaWdodD09PXUsZml0c0luVmlld3BvcnRWZXJ0aWNhbGx5Om09PT1pLmhlaWdodCxmaXRzSW5WaWV3cG9ydEhvcml6b250YWxseTpwPT1pLndpZHRofX1fY2FuRml0V2l0aEZsZXhpYmxlRGltZW5zaW9ucyh0LGUsbil7aWYodGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zKXtjb25zdCBvPW4uYm90dG9tLWUueSxpPW4ucmlnaHQtZS54LGE9aUwodGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5taW5IZWlnaHQpLHI9aUwodGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5taW5XaWR0aCkscz10LmZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5fHxudWxsIT1yJiZyPD1pO3JldHVybih0LmZpdHNJblZpZXdwb3J0VmVydGljYWxseXx8bnVsbCE9YSYmYTw9bykmJnN9cmV0dXJuITF9X3B1c2hPdmVybGF5T25TY3JlZW4odCxlLG4pe2lmKHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudCYmdGhpcy5fcG9zaXRpb25Mb2NrZWQpcmV0dXJue3g6dC54K3RoaXMuX3ByZXZpb3VzUHVzaEFtb3VudC54LHk6dC55K3RoaXMuX3ByZXZpb3VzUHVzaEFtb3VudC55fTtjb25zdCBvPWFMKGUpLGk9dGhpcy5fdmlld3BvcnRSZWN0LGE9TWF0aC5tYXgodC54K28ud2lkdGgtaS53aWR0aCwwKSxyPU1hdGgubWF4KHQueStvLmhlaWdodC1pLmhlaWdodCwwKSxzPU1hdGgubWF4KGkudG9wLW4udG9wLXQueSwwKSxsPU1hdGgubWF4KGkubGVmdC1uLmxlZnQtdC54LDApO2xldCBjPTAsZD0wO3JldHVybiBjPW8ud2lkdGg8PWkud2lkdGg/bHx8LWE6dC54PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP2kubGVmdC1uLmxlZnQtdC54OjAsZD1vLmhlaWdodDw9aS5oZWlnaHQ/c3x8LXI6dC55PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP2kudG9wLW4udG9wLXQueTowLHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudD17eDpjLHk6ZH0se3g6dC54K2MseTp0LnkrZH19X2FwcGx5UG9zaXRpb24odCxlKXtpZih0aGlzLl9zZXRUcmFuc2Zvcm1PcmlnaW4odCksdGhpcy5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoZSx0KSx0aGlzLl9zZXRCb3VuZGluZ0JveFN0eWxlcyhlLHQpLHQucGFuZWxDbGFzcyYmdGhpcy5fYWRkUGFuZWxDbGFzc2VzKHQucGFuZWxDbGFzcyksdGhpcy5fbGFzdFBvc2l0aW9uPXQsdGhpcy5fcG9zaXRpb25DaGFuZ2VzLm9ic2VydmVycy5sZW5ndGgpe2NvbnN0IGU9dGhpcy5fZ2V0U2Nyb2xsVmlzaWJpbGl0eSgpLG49bmV3IEdGKHQsZSk7dGhpcy5fcG9zaXRpb25DaGFuZ2VzLm5leHQobil9dGhpcy5faXNJbml0aWFsUmVuZGVyPSExfV9zZXRUcmFuc2Zvcm1PcmlnaW4odCl7aWYoIXRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yKXJldHVybjtjb25zdCBlPXRoaXMuX2JvdW5kaW5nQm94LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpO2xldCBuLG89dC5vdmVybGF5WTtuPSJjZW50ZXIiPT09dC5vdmVybGF5WD8iY2VudGVyIjp0aGlzLl9pc1J0bCgpPyJzdGFydCI9PT10Lm92ZXJsYXlYPyJyaWdodCI6ImxlZnQiOiJzdGFydCI9PT10Lm92ZXJsYXlYPyJsZWZ0IjoicmlnaHQiO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0uc3R5bGUudHJhbnNmb3JtT3JpZ2luPWAke259ICR7b31gfV9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QodCxlKXtjb25zdCBuPXRoaXMuX3ZpZXdwb3J0UmVjdCxvPXRoaXMuX2lzUnRsKCk7bGV0IGksYSxyLHMsbCxjO2lmKCJ0b3AiPT09ZS5vdmVybGF5WSlhPXQueSxpPW4uaGVpZ2h0LWErdGhpcy5fdmlld3BvcnRNYXJnaW47ZWxzZSBpZigiYm90dG9tIj09PWUub3ZlcmxheVkpcj1uLmhlaWdodC10LnkrMip0aGlzLl92aWV3cG9ydE1hcmdpbixpPW4uaGVpZ2h0LXIrdGhpcy5fdmlld3BvcnRNYXJnaW47ZWxzZXtjb25zdCBlPU1hdGgubWluKG4uYm90dG9tLXQueStuLnRvcCx0LnkpLG89dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQ7aT0yKmUsYT10LnktZSxpPm8mJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYoYT10Lnktby8yKX1pZigiZW5kIj09PWUub3ZlcmxheVgmJiFvfHwic3RhcnQiPT09ZS5vdmVybGF5WCYmbyljPW4ud2lkdGgtdC54K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLHM9dC54LXRoaXMuX3ZpZXdwb3J0TWFyZ2luO2Vsc2UgaWYoInN0YXJ0Ij09PWUub3ZlcmxheVgmJiFvfHwiZW5kIj09PWUub3ZlcmxheVgmJm8pbD10Lngscz1uLnJpZ2h0LXQueDtlbHNle2NvbnN0IGU9TWF0aC5taW4obi5yaWdodC10Lngrbi5sZWZ0LHQueCksbz10aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLndpZHRoO3M9MiplLGw9dC54LWUscz5vJiYhdGhpcy5faXNJbml0aWFsUmVuZGVyJiYhdGhpcy5fZ3Jvd0FmdGVyT3BlbiYmKGw9dC54LW8vMil9cmV0dXJue3RvcDphLGxlZnQ6bCxib3R0b206cixyaWdodDpjLHdpZHRoOnMsaGVpZ2h0Oml9fV9zZXRCb3VuZGluZ0JveFN0eWxlcyh0LGUpe2NvbnN0IG49dGhpcy5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0KHQsZSk7dGhpcy5faXNJbml0aWFsUmVuZGVyfHx0aGlzLl9ncm93QWZ0ZXJPcGVufHwobi5oZWlnaHQ9TWF0aC5taW4obi5oZWlnaHQsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQpLG4ud2lkdGg9TWF0aC5taW4obi53aWR0aCx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLndpZHRoKSk7Y29uc3Qgbz17fTtpZih0aGlzLl9oYXNFeGFjdFBvc2l0aW9uKCkpby50b3A9by5sZWZ0PSIwIixvLmJvdHRvbT1vLnJpZ2h0PW8ubWF4SGVpZ2h0PW8ubWF4V2lkdGg9IiIsby53aWR0aD1vLmhlaWdodD0iMTAwJSI7ZWxzZXtjb25zdCB0PXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4SGVpZ2h0LGk9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhXaWR0aDtvLmhlaWdodD12eihuLmhlaWdodCksby50b3A9dnoobi50b3ApLG8uYm90dG9tPXZ6KG4uYm90dG9tKSxvLndpZHRoPXZ6KG4ud2lkdGgpLG8ubGVmdD12eihuLmxlZnQpLG8ucmlnaHQ9dnoobi5yaWdodCksby5hbGlnbkl0ZW1zPSJjZW50ZXIiPT09ZS5vdmVybGF5WD8iY2VudGVyIjoiZW5kIj09PWUub3ZlcmxheVg/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsby5qdXN0aWZ5Q29udGVudD0iY2VudGVyIj09PWUub3ZlcmxheVk/ImNlbnRlciI6ImJvdHRvbSI9PT1lLm92ZXJsYXlZPyJmbGV4LWVuZCI6ImZsZXgtc3RhcnQiLHQmJihvLm1heEhlaWdodD12eih0KSksaSYmKG8ubWF4V2lkdGg9dnooaSkpfXRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9bixvTCh0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSxvKX1fcmVzZXRCb3VuZGluZ0JveFN0eWxlcygpe29MKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLHt0b3A6IjAiLGxlZnQ6IjAiLHJpZ2h0OiIwIixib3R0b206IjAiLGhlaWdodDoiIix3aWR0aDoiIixhbGlnbkl0ZW1zOiIiLGp1c3RpZnlDb250ZW50OiIifSl9X3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKXtvTCh0aGlzLl9wYW5lLnN0eWxlLHt0b3A6IiIsbGVmdDoiIixib3R0b206IiIscmlnaHQ6IiIscG9zaXRpb246IiIsdHJhbnNmb3JtOiIifSl9X3NldE92ZXJsYXlFbGVtZW50U3R5bGVzKHQsZSl7Y29uc3Qgbj17fSxvPXRoaXMuX2hhc0V4YWN0UG9zaXRpb24oKSxpPXRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucyxhPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCk7aWYobyl7Y29uc3Qgbz10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtvTChuLHRoaXMuX2dldEV4YWN0T3ZlcmxheVkoZSx0LG8pKSxvTChuLHRoaXMuX2dldEV4YWN0T3ZlcmxheVgoZSx0LG8pKX1lbHNlIG4ucG9zaXRpb249InN0YXRpYyI7bGV0IHI9IiIscz10aGlzLl9nZXRPZmZzZXQoZSwieCIpLGw9dGhpcy5fZ2V0T2Zmc2V0KGUsInkiKTtzJiYocis9YHRyYW5zbGF0ZVgoJHtzfXB4KSBgKSxsJiYocis9YHRyYW5zbGF0ZVkoJHtsfXB4KWApLG4udHJhbnNmb3JtPXIudHJpbSgpLGEubWF4SGVpZ2h0JiYobz9uLm1heEhlaWdodD12eihhLm1heEhlaWdodCk6aSYmKG4ubWF4SGVpZ2h0PSIiKSksYS5tYXhXaWR0aCYmKG8/bi5tYXhXaWR0aD12eihhLm1heFdpZHRoKTppJiYobi5tYXhXaWR0aD0iIikpLG9MKHRoaXMuX3BhbmUuc3R5bGUsbil9X2dldEV4YWN0T3ZlcmxheVkodCxlLG4pe2xldCBvPXt0b3A6IiIsYm90dG9tOiIifSxpPXRoaXMuX2dldE92ZXJsYXlQb2ludChlLHRoaXMuX292ZXJsYXlSZWN0LHQpO3RoaXMuX2lzUHVzaGVkJiYoaT10aGlzLl9wdXNoT3ZlcmxheU9uU2NyZWVuKGksdGhpcy5fb3ZlcmxheVJlY3QsbikpO2xldCBhPXRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtyZXR1cm4gaS55LT1hLCJib3R0b20iPT09dC5vdmVybGF5WT9vLmJvdHRvbT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LShpLnkrdGhpcy5fb3ZlcmxheVJlY3QuaGVpZ2h0KSsicHgiOm8udG9wPXZ6KGkueSksb31fZ2V0RXhhY3RPdmVybGF5WCh0LGUsbil7bGV0IG8saT17bGVmdDoiIixyaWdodDoiIn0sYT10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTtyZXR1cm4gdGhpcy5faXNQdXNoZWQmJihhPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4oYSx0aGlzLl9vdmVybGF5UmVjdCxuKSksbz10aGlzLl9pc1J0bCgpPyJlbmQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0IjoiZW5kIj09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCIsInJpZ2h0Ij09PW8/aS5yaWdodD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgtKGEueCt0aGlzLl9vdmVybGF5UmVjdC53aWR0aCkrInB4IjppLmxlZnQ9dnooYS54KSxpfV9nZXRTY3JvbGxWaXNpYmlsaXR5KCl7Y29uc3QgdD10aGlzLl9nZXRPcmlnaW5SZWN0KCksZT10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dGhpcy5fc2Nyb2xsYWJsZXMubWFwKCh0PT50LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSk7cmV0dXJue2lzT3JpZ2luQ2xpcHBlZDpGRih0LG4pLGlzT3JpZ2luT3V0c2lkZVZpZXc6SEYodCxuKSxpc092ZXJsYXlDbGlwcGVkOkZGKGUsbiksaXNPdmVybGF5T3V0c2lkZVZpZXc6SEYoZSxuKX19X3N1YnRyYWN0T3ZlcmZsb3dzKHQsLi4uZSl7cmV0dXJuIGUucmVkdWNlKCgodCxlKT0+dC1NYXRoLm1heChlLDApKSx0KX1fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKXtjb25zdCB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxlPXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtyZXR1cm57dG9wOm4udG9wK3RoaXMuX3ZpZXdwb3J0TWFyZ2luLGxlZnQ6bi5sZWZ0K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLHJpZ2h0Om4ubGVmdCt0LXRoaXMuX3ZpZXdwb3J0TWFyZ2luLGJvdHRvbTpuLnRvcCtlLXRoaXMuX3ZpZXdwb3J0TWFyZ2luLHdpZHRoOnQtMip0aGlzLl92aWV3cG9ydE1hcmdpbixoZWlnaHQ6ZS0yKnRoaXMuX3ZpZXdwb3J0TWFyZ2lufX1faXNSdGwoKXtyZXR1cm4icnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0RGlyZWN0aW9uKCl9X2hhc0V4YWN0UG9zaXRpb24oKXtyZXR1cm4hdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zfHx0aGlzLl9pc1B1c2hlZH1fZ2V0T2Zmc2V0KHQsZSl7cmV0dXJuIngiPT09ZT9udWxsPT10Lm9mZnNldFg/dGhpcy5fb2Zmc2V0WDp0Lm9mZnNldFg6bnVsbD09dC5vZmZzZXRZP3RoaXMuX29mZnNldFk6dC5vZmZzZXRZfV92YWxpZGF0ZVBvc2l0aW9ucygpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpe2lmKCF0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMubGVuZ3RoKXRocm93IEVycm9yKCJGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3k6IEF0IGxlYXN0IG9uZSBwb3NpdGlvbiBpcyByZXF1aXJlZC4iKTt0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMuZm9yRWFjaCgodD0+e1lGKCJvcmlnaW5YIix0Lm9yaWdpblgpLFdGKCJvcmlnaW5ZIix0Lm9yaWdpblkpLFlGKCJvdmVybGF5WCIsdC5vdmVybGF5WCksV0YoIm92ZXJsYXlZIix0Lm92ZXJsYXlZKX0pKX19X2FkZFBhbmVsQ2xhc3Nlcyh0KXt0aGlzLl9wYW5lJiZNeih0KS5mb3JFYWNoKCh0PT57IiIhPT10JiYtMT09PXRoaXMuX2FwcGxpZWRQYW5lbENsYXNzZXMuaW5kZXhPZih0KSYmKHRoaXMuX2FwcGxpZWRQYW5lbENsYXNzZXMucHVzaCh0KSx0aGlzLl9wYW5lLmNsYXNzTGlzdC5hZGQodCkpfSkpfV9jbGVhclBhbmVsQ2xhc3Nlcygpe3RoaXMuX3BhbmUmJih0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzLmZvckVhY2goKHQ9Pnt0aGlzLl9wYW5lLmNsYXNzTGlzdC5yZW1vdmUodCl9KSksdGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcz1bXSl9X2dldE9yaWdpblJlY3QoKXtjb25zdCB0PXRoaXMuX29yaWdpbjtpZih0IGluc3RhbmNlb2YgaGcpcmV0dXJuIHQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0IGluc3RhbmNlb2YgRWxlbWVudClyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBlPXQud2lkdGh8fDAsbj10LmhlaWdodHx8MDtyZXR1cm57dG9wOnQueSxib3R0b206dC55K24sbGVmdDp0LngscmlnaHQ6dC54K2UsaGVpZ2h0Om4sd2lkdGg6ZX19fWZ1bmN0aW9uIG9MKHQsZSl7Zm9yKGxldCBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gaUwodCl7aWYoIm51bWJlciIhPXR5cGVvZiB0JiZudWxsIT10KXtjb25zdFtlLG5dPXQuc3BsaXQoZUwpO3JldHVybiBuJiYicHgiIT09bj9udWxsOnBhcnNlRmxvYXQoZSl9cmV0dXJuIHR8fG51bGx9ZnVuY3Rpb24gYUwodCl7cmV0dXJue3RvcDpNYXRoLmZsb29yKHQudG9wKSxyaWdodDpNYXRoLmZsb29yKHQucmlnaHQpLGJvdHRvbTpNYXRoLmZsb29yKHQuYm90dG9tKSxsZWZ0Ok1hdGguZmxvb3IodC5sZWZ0KSx3aWR0aDpNYXRoLmZsb29yKHQud2lkdGgpLGhlaWdodDpNYXRoLmZsb29yKHQuaGVpZ2h0KX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIHJMe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIpe3RoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz1bXSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5PW5ldyBuTChuLG8saSxhLHIpLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoITEpLndpdGhQdXNoKCExKS53aXRoVmlld3BvcnRNYXJnaW4oMCksdGhpcy53aXRoRmFsbGJhY2tQb3NpdGlvbih0LGUpLHRoaXMub25Qb3NpdGlvbkNoYW5nZT10aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnBvc2l0aW9uQ2hhbmdlc31nZXQgcG9zaXRpb25zKCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uc31hdHRhY2godCl7dGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuYXR0YWNoKHQpLHRoaXMuX2RpcmVjdGlvbiYmKHQuc2V0RGlyZWN0aW9uKHRoaXMuX2RpcmVjdGlvbiksdGhpcy5fZGlyZWN0aW9uPW51bGwpfWRpc3Bvc2UoKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKX1kZXRhY2goKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRldGFjaCgpfWFwcGx5KCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5hcHBseSgpfXJlY2FsY3VsYXRlTGFzdFBvc2l0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5yZWFwcGx5TGFzdFBvc2l0aW9uKCl9d2l0aFNjcm9sbGFibGVDb250YWluZXJzKHQpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aFNjcm9sbGFibGVDb250YWluZXJzKHQpfXdpdGhGYWxsYmFja1Bvc2l0aW9uKHQsZSxuLG8pe2NvbnN0IGk9bmV3IGpGKHQsZSxuLG8pO3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMucHVzaChpKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhQb3NpdGlvbnModGhpcy5fcHJlZmVycmVkUG9zaXRpb25zKSx0aGlzfXdpdGhEaXJlY3Rpb24odCl7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi5zZXREaXJlY3Rpb24odCk6dGhpcy5fZGlyZWN0aW9uPXQsdGhpc313aXRoT2Zmc2V0WCh0KXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoRGVmYXVsdE9mZnNldFgodCksdGhpc313aXRoT2Zmc2V0WSh0KXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoRGVmYXVsdE9mZnNldFkodCksdGhpc313aXRoTG9ja2VkUG9zaXRpb24odCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aExvY2tlZFBvc2l0aW9uKHQpLHRoaXN9d2l0aFBvc2l0aW9ucyh0KXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPXQuc2xpY2UoKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhQb3NpdGlvbnModGhpcy5fcHJlZmVycmVkUG9zaXRpb25zKSx0aGlzfXNldE9yaWdpbih0KXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS5zZXRPcmlnaW4odCksdGhpc319Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IHNMPSJjZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciI7Y2xhc3MgbEx7Y29uc3RydWN0b3IoKXt0aGlzLl9jc3NQb3NpdGlvbj0ic3RhdGljIix0aGlzLl90b3BPZmZzZXQ9IiIsdGhpcy5fYm90dG9tT2Zmc2V0PSIiLHRoaXMuX2xlZnRPZmZzZXQ9IiIsdGhpcy5fcmlnaHRPZmZzZXQ9IiIsdGhpcy5fYWxpZ25JdGVtcz0iIix0aGlzLl9qdXN0aWZ5Q29udGVudD0iIix0aGlzLl93aWR0aD0iIix0aGlzLl9oZWlnaHQ9IiJ9YXR0YWNoKHQpe2NvbnN0IGU9dC5nZXRDb25maWcoKTt0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fd2lkdGgmJiFlLndpZHRoJiZ0LnVwZGF0ZVNpemUoe3dpZHRoOnRoaXMuX3dpZHRofSksdGhpcy5faGVpZ2h0JiYhZS5oZWlnaHQmJnQudXBkYXRlU2l6ZSh7aGVpZ2h0OnRoaXMuX2hlaWdodH0pLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChzTCksdGhpcy5faXNEaXNwb3NlZD0hMX10b3AodD0iIil7cmV0dXJuIHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl90b3BPZmZzZXQ9dCx0aGlzLl9hbGlnbkl0ZW1zPSJmbGV4LXN0YXJ0Iix0aGlzfWxlZnQodD0iIil7cmV0dXJuIHRoaXMuX3JpZ2h0T2Zmc2V0PSIiLHRoaXMuX2xlZnRPZmZzZXQ9dCx0aGlzLl9qdXN0aWZ5Q29udGVudD0iZmxleC1zdGFydCIsdGhpc31ib3R0b20odD0iIil7cmV0dXJuIHRoaXMuX3RvcE9mZnNldD0iIix0aGlzLl9ib3R0b21PZmZzZXQ9dCx0aGlzLl9hbGlnbkl0ZW1zPSJmbGV4LWVuZCIsdGhpc31yaWdodCh0PSIiKXtyZXR1cm4gdGhpcy5fbGVmdE9mZnNldD0iIix0aGlzLl9yaWdodE9mZnNldD10LHRoaXMuX2p1c3RpZnlDb250ZW50PSJmbGV4LWVuZCIsdGhpc313aWR0aCh0PSIiKXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUoe3dpZHRoOnR9KTp0aGlzLl93aWR0aD10LHRoaXN9aGVpZ2h0KHQ9IiIpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7aGVpZ2h0OnR9KTp0aGlzLl9oZWlnaHQ9dCx0aGlzfWNlbnRlckhvcml6b250YWxseSh0PSIiKXtyZXR1cm4gdGhpcy5sZWZ0KHQpLHRoaXMuX2p1c3RpZnlDb250ZW50PSJjZW50ZXIiLHRoaXN9Y2VudGVyVmVydGljYWxseSh0PSIiKXtyZXR1cm4gdGhpcy50b3AodCksdGhpcy5fYWxpZ25JdGVtcz0iY2VudGVyIix0aGlzfWFwcGx5KCl7aWYoIXRoaXMuX292ZXJsYXlSZWZ8fCF0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpcmV0dXJuO2NvbnN0IHQ9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5zdHlsZSxlPXRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQuc3R5bGUsbj10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLHt3aWR0aDpvLGhlaWdodDppLG1heFdpZHRoOmEsbWF4SGVpZ2h0OnJ9PW4scz0hKCIxMDAlIiE9PW8mJiIxMDB2dyIhPT1vfHxhJiYiMTAwJSIhPT1hJiYiMTAwdnciIT09YSksbD0hKCIxMDAlIiE9PWkmJiIxMDB2aCIhPT1pfHxyJiYiMTAwJSIhPT1yJiYiMTAwdmgiIT09cik7dC5wb3NpdGlvbj10aGlzLl9jc3NQb3NpdGlvbix0Lm1hcmdpbkxlZnQ9cz8iMCI6dGhpcy5fbGVmdE9mZnNldCx0Lm1hcmdpblRvcD1sPyIwIjp0aGlzLl90b3BPZmZzZXQsdC5tYXJnaW5Cb3R0b209dGhpcy5fYm90dG9tT2Zmc2V0LHQubWFyZ2luUmlnaHQ9dGhpcy5fcmlnaHRPZmZzZXQscz9lLmp1c3RpZnlDb250ZW50PSJmbGV4LXN0YXJ0IjoiY2VudGVyIj09PXRoaXMuX2p1c3RpZnlDb250ZW50P2UuanVzdGlmeUNvbnRlbnQ9ImNlbnRlciI6InJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLmRpcmVjdGlvbj8iZmxleC1zdGFydCI9PT10aGlzLl9qdXN0aWZ5Q29udGVudD9lLmp1c3RpZnlDb250ZW50PSJmbGV4LWVuZCI6ImZsZXgtZW5kIj09PXRoaXMuX2p1c3RpZnlDb250ZW50JiYoZS5qdXN0aWZ5Q29udGVudD0iZmxleC1zdGFydCIpOmUuanVzdGlmeUNvbnRlbnQ9dGhpcy5fanVzdGlmeUNvbnRlbnQsZS5hbGlnbkl0ZW1zPWw/ImZsZXgtc3RhcnQiOnRoaXMuX2FsaWduSXRlbXN9ZGlzcG9zZSgpe2lmKHRoaXMuX2lzRGlzcG9zZWR8fCF0aGlzLl9vdmVybGF5UmVmKXJldHVybjtjb25zdCB0PXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUsZT10aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LG49ZS5zdHlsZTtlLmNsYXNzTGlzdC5yZW1vdmUoc0wpLG4uanVzdGlmeUNvbnRlbnQ9bi5hbGlnbkl0ZW1zPXQubWFyZ2luVG9wPXQubWFyZ2luQm90dG9tPXQubWFyZ2luTGVmdD10Lm1hcmdpblJpZ2h0PXQucG9zaXRpb249IiIsdGhpcy5fb3ZlcmxheVJlZj1udWxsLHRoaXMuX2lzRGlzcG9zZWQ9ITB9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBjTHtjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLl92aWV3cG9ydFJ1bGVyPXQsdGhpcy5fZG9jdW1lbnQ9ZSx0aGlzLl9wbGF0Zm9ybT1uLHRoaXMuX292ZXJsYXlDb250YWluZXI9b31nbG9iYWwoKXtyZXR1cm4gbmV3IGxMfWNvbm5lY3RlZFRvKHQsZSxuKXtyZXR1cm4gbmV3IHJMKGUsbix0LHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fZG9jdW1lbnQsdGhpcy5fcGxhdGZvcm0sdGhpcy5fb3ZlcmxheUNvbnRhaW5lcil9ZmxleGlibGVDb25uZWN0ZWRUbyh0KXtyZXR1cm4gbmV3IG5MKHQsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCx0aGlzLl9wbGF0Zm9ybSx0aGlzLl9vdmVybGF5Q29udGFpbmVyKX19Y0wuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGNMKSh2cih1RiksdnIoWl8pLHZyKHd6KSx2cihRRikpfSxjTC7JtXByb3Y9TW4oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgY0wodnIodUYpLHZyKFpfKSx2cih3eiksdnIoUUYpKX0sdG9rZW46Y0wscHJvdmlkZWRJbjoicm9vdCJ9KSxjTC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnVGfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19LHt0eXBlOnd6fSx7dHlwZTpRRn1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoY0wsW3t0eXBlOmltLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnVGfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19LHt0eXBlOnd6fSx7dHlwZTpRRn1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpsZXQgZEw9MDtjbGFzcyBwTHtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyLHMsbCxjLGQpe3RoaXMuc2Nyb2xsU3RyYXRlZ2llcz10LHRoaXMuX292ZXJsYXlDb250YWluZXI9ZSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bix0aGlzLl9wb3NpdGlvbkJ1aWxkZXI9byx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXI9aSx0aGlzLl9pbmplY3Rvcj1hLHRoaXMuX25nWm9uZT1yLHRoaXMuX2RvY3VtZW50PXMsdGhpcy5fZGlyZWN0aW9uYWxpdHk9bCx0aGlzLl9sb2NhdGlvbj1jLHRoaXMuX291dHNpZGVDbGlja0Rpc3BhdGNoZXI9ZH1jcmVhdGUodCl7Y29uc3QgZT10aGlzLl9jcmVhdGVIb3N0RWxlbWVudCgpLG49dGhpcy5fY3JlYXRlUGFuZUVsZW1lbnQoZSksbz10aGlzLl9jcmVhdGVQb3J0YWxPdXRsZXQobiksaT1uZXcgVkYodCk7cmV0dXJuIGkuZGlyZWN0aW9uPWkuZGlyZWN0aW9ufHx0aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZSxuZXcgJEYobyxlLG4saSx0aGlzLl9uZ1pvbmUsdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLHRoaXMuX2RvY3VtZW50LHRoaXMuX2xvY2F0aW9uLHRoaXMuX291dHNpZGVDbGlja0Rpc3BhdGNoZXIpfXBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uQnVpbGRlcn1fY3JlYXRlUGFuZUVsZW1lbnQodCl7Y29uc3QgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5pZD0iY2RrLW92ZXJsYXktIitkTCsrLGUuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktcGFuZSIpLHQuYXBwZW5kQ2hpbGQoZSksZX1fY3JlYXRlSG9zdEVsZW1lbnQoKXtjb25zdCB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5hcHBlbmRDaGlsZCh0KSx0fV9jcmVhdGVQb3J0YWxPdXRsZXQodCl7cmV0dXJuIHRoaXMuX2FwcFJlZnx8KHRoaXMuX2FwcFJlZj10aGlzLl9pbmplY3Rvci5nZXQoT18pKSxuZXcgd0YodCx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsdGhpcy5fYXBwUmVmLHRoaXMuX2luamVjdG9yLHRoaXMuX2RvY3VtZW50KX19cEwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHBMKSh2cihCRiksdnIoUUYpLHZyKHVnKSx2cihjTCksdnIoWkYpLHZyKHJwKSx2cihhXyksdnIoWl8pLHZyKEhJKSx2cihsQyksdnIoWEYpKX0scEwuybVwcm92PU1uKHt0b2tlbjpwTCxmYWN0b3J5OnBMLsm1ZmFjfSkscEwuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpCRn0se3R5cGU6UUZ9LHt0eXBlOnVnfSx7dHlwZTpjTH0se3R5cGU6WkZ9LHt0eXBlOnJwfSx7dHlwZTphX30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfSx7dHlwZTpISX0se3R5cGU6bEN9LHt0eXBlOlhGfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChwTCxbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6QkZ9LHt0eXBlOlFGfSx7dHlwZTp1Z30se3R5cGU6Y0x9LHt0eXBlOlpGfSx7dHlwZTpycH0se3R5cGU6YV99LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX0se3R5cGU6SEl9LHt0eXBlOmxDfSx7dHlwZTpYRn1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBtTD1be29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6InRvcCJ9LHtvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJib3R0b20ifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJib3R0b20ifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJ0b3AifV0sdUw9bmV3IEdhKCJjZGstY29ubmVjdGVkLW92ZXJsYXktc2Nyb2xsLXN0cmF0ZWd5Iik7Y2xhc3MgZkx7Y29uc3RydWN0b3IodCl7dGhpcy5lbGVtZW50UmVmPXR9fWZMLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxmTCkoU20oaGcpKX0sZkwuybVkaXI9bG8oe3R5cGU6Zkwsc2VsZWN0b3JzOltbIiIsImNkay1vdmVybGF5LW9yaWdpbiIsIiJdLFsiIiwib3ZlcmxheS1vcmlnaW4iLCIiXSxbIiIsImNka092ZXJsYXlPcmlnaW4iLCIiXV0sZXhwb3J0QXM6WyJjZGtPdmVybGF5T3JpZ2luIl19KSxmTC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChmTCxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbY2RrLW92ZXJsYXktb3JpZ2luXSwgW292ZXJsYXktb3JpZ2luXSwgW2Nka092ZXJsYXlPcmlnaW5dIixleHBvcnRBczoiY2RrT3ZlcmxheU9yaWdpbiJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpoZ31dfSksbnVsbCk7Y2xhc3MgZ0x7Y29uc3RydWN0b3IodCxlLG4sbyxpKXt0aGlzLl9vdmVybGF5PXQsdGhpcy5fZGlyPWksdGhpcy5faGFzQmFja2Ryb3A9ITEsdGhpcy5fbG9ja1Bvc2l0aW9uPSExLHRoaXMuX2dyb3dBZnRlck9wZW49ITEsdGhpcy5fZmxleGlibGVEaW1lbnNpb25zPSExLHRoaXMuX3B1c2g9ITEsdGhpcy5fYmFja2Ryb3BTdWJzY3JpcHRpb249bS5FTVBUWSx0aGlzLl9hdHRhY2hTdWJzY3JpcHRpb249bS5FTVBUWSx0aGlzLl9kZXRhY2hTdWJzY3JpcHRpb249bS5FTVBUWSx0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbj1tLkVNUFRZLHRoaXMudmlld3BvcnRNYXJnaW49MCx0aGlzLm9wZW49ITEsdGhpcy5kaXNhYmxlQ2xvc2U9ITEsdGhpcy5iYWNrZHJvcENsaWNrPW5ldyBMaCx0aGlzLnBvc2l0aW9uQ2hhbmdlPW5ldyBMaCx0aGlzLmF0dGFjaD1uZXcgTGgsdGhpcy5kZXRhY2g9bmV3IExoLHRoaXMub3ZlcmxheUtleWRvd249bmV3IExoLHRoaXMub3ZlcmxheU91dHNpZGVDbGljaz1uZXcgTGgsdGhpcy5fdGVtcGxhdGVQb3J0YWw9bmV3IHhGKGUsbiksdGhpcy5fc2Nyb2xsU3RyYXRlZ3lGYWN0b3J5PW8sdGhpcy5zY3JvbGxTdHJhdGVneT10aGlzLl9zY3JvbGxTdHJhdGVneUZhY3RvcnkoKX1nZXQgb2Zmc2V0WCgpe3JldHVybiB0aGlzLl9vZmZzZXRYfXNldCBvZmZzZXRYKHQpe3RoaXMuX29mZnNldFg9dCx0aGlzLl9wb3NpdGlvbiYmdGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvbil9Z2V0IG9mZnNldFkoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0WX1zZXQgb2Zmc2V0WSh0KXt0aGlzLl9vZmZzZXRZPXQsdGhpcy5fcG9zaXRpb24mJnRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb24pfWdldCBoYXNCYWNrZHJvcCgpe3JldHVybiB0aGlzLl9oYXNCYWNrZHJvcH1zZXQgaGFzQmFja2Ryb3AodCl7dGhpcy5faGFzQmFja2Ryb3A9eXoodCl9Z2V0IGxvY2tQb3NpdGlvbigpe3JldHVybiB0aGlzLl9sb2NrUG9zaXRpb259c2V0IGxvY2tQb3NpdGlvbih0KXt0aGlzLl9sb2NrUG9zaXRpb249eXoodCl9Z2V0IGZsZXhpYmxlRGltZW5zaW9ucygpe3JldHVybiB0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnN9c2V0IGZsZXhpYmxlRGltZW5zaW9ucyh0KXt0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnM9eXoodCl9Z2V0IGdyb3dBZnRlck9wZW4oKXtyZXR1cm4gdGhpcy5fZ3Jvd0FmdGVyT3Blbn1zZXQgZ3Jvd0FmdGVyT3Blbih0KXt0aGlzLl9ncm93QWZ0ZXJPcGVuPXl6KHQpfWdldCBwdXNoKCl7cmV0dXJuIHRoaXMuX3B1c2h9c2V0IHB1c2godCl7dGhpcy5fcHVzaD15eih0KX1nZXQgb3ZlcmxheVJlZigpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmfWdldCBkaXIoKXtyZXR1cm4gdGhpcy5fZGlyP3RoaXMuX2Rpci52YWx1ZToibHRyIn1uZ09uRGVzdHJveSgpe3RoaXMuX2F0dGFjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKX1uZ09uQ2hhbmdlcyh0KXt0aGlzLl9wb3NpdGlvbiYmKHRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb24pLHRoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy53aWR0aCxtaW5XaWR0aDp0aGlzLm1pbldpZHRoLGhlaWdodDp0aGlzLmhlaWdodCxtaW5IZWlnaHQ6dGhpcy5taW5IZWlnaHR9KSx0Lm9yaWdpbiYmdGhpcy5vcGVuJiZ0aGlzLl9wb3NpdGlvbi5hcHBseSgpKSx0Lm9wZW4mJih0aGlzLm9wZW4/dGhpcy5fYXR0YWNoT3ZlcmxheSgpOnRoaXMuX2RldGFjaE92ZXJsYXkoKSl9X2NyZWF0ZU92ZXJsYXkoKXt0aGlzLnBvc2l0aW9ucyYmdGhpcy5wb3NpdGlvbnMubGVuZ3RofHwodGhpcy5wb3NpdGlvbnM9bUwpO2NvbnN0IHQ9dGhpcy5fb3ZlcmxheVJlZj10aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9idWlsZENvbmZpZygpKTt0aGlzLl9hdHRhY2hTdWJzY3JpcHRpb249dC5hdHRhY2htZW50cygpLnN1YnNjcmliZSgoKCk9PnRoaXMuYXR0YWNoLmVtaXQoKSkpLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbj10LmRldGFjaG1lbnRzKCkuc3Vic2NyaWJlKCgoKT0+dGhpcy5kZXRhY2guZW1pdCgpKSksdC5rZXlkb3duRXZlbnRzKCkuc3Vic2NyaWJlKCh0PT57dGhpcy5vdmVybGF5S2V5ZG93bi5uZXh0KHQpLHQua2V5Q29kZSE9PXV6fHx0aGlzLmRpc2FibGVDbG9zZXx8YnoodCl8fCh0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGV0YWNoT3ZlcmxheSgpKX0pKSx0aGlzLl9vdmVybGF5UmVmLm91dHNpZGVQb2ludGVyRXZlbnRzKCkuc3Vic2NyaWJlKCh0PT57dGhpcy5vdmVybGF5T3V0c2lkZUNsaWNrLm5leHQodCl9KSl9X2J1aWxkQ29uZmlnKCl7Y29uc3QgdD10aGlzLl9wb3NpdGlvbj10aGlzLnBvc2l0aW9uU3RyYXRlZ3l8fHRoaXMuX2NyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koKSxlPW5ldyBWRih7ZGlyZWN0aW9uOnRoaXMuX2Rpcixwb3NpdGlvblN0cmF0ZWd5OnQsc2Nyb2xsU3RyYXRlZ3k6dGhpcy5zY3JvbGxTdHJhdGVneSxoYXNCYWNrZHJvcDp0aGlzLmhhc0JhY2tkcm9wfSk7cmV0dXJuKHRoaXMud2lkdGh8fDA9PT10aGlzLndpZHRoKSYmKGUud2lkdGg9dGhpcy53aWR0aCksKHRoaXMuaGVpZ2h0fHwwPT09dGhpcy5oZWlnaHQpJiYoZS5oZWlnaHQ9dGhpcy5oZWlnaHQpLCh0aGlzLm1pbldpZHRofHwwPT09dGhpcy5taW5XaWR0aCkmJihlLm1pbldpZHRoPXRoaXMubWluV2lkdGgpLCh0aGlzLm1pbkhlaWdodHx8MD09PXRoaXMubWluSGVpZ2h0KSYmKGUubWluSGVpZ2h0PXRoaXMubWluSGVpZ2h0KSx0aGlzLmJhY2tkcm9wQ2xhc3MmJihlLmJhY2tkcm9wQ2xhc3M9dGhpcy5iYWNrZHJvcENsYXNzKSx0aGlzLnBhbmVsQ2xhc3MmJihlLnBhbmVsQ2xhc3M9dGhpcy5wYW5lbENsYXNzKSxlfV91cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHQpe2NvbnN0IGU9dGhpcy5wb3NpdGlvbnMubWFwKCh0PT4oe29yaWdpblg6dC5vcmlnaW5YLG9yaWdpblk6dC5vcmlnaW5ZLG92ZXJsYXlYOnQub3ZlcmxheVgsb3ZlcmxheVk6dC5vdmVybGF5WSxvZmZzZXRYOnQub2Zmc2V0WHx8dGhpcy5vZmZzZXRYLG9mZnNldFk6dC5vZmZzZXRZfHx0aGlzLm9mZnNldFkscGFuZWxDbGFzczp0LnBhbmVsQ2xhc3N8fHZvaWQgMH0pKSk7cmV0dXJuIHQuc2V0T3JpZ2luKHRoaXMub3JpZ2luLmVsZW1lbnRSZWYpLndpdGhQb3NpdGlvbnMoZSkud2l0aEZsZXhpYmxlRGltZW5zaW9ucyh0aGlzLmZsZXhpYmxlRGltZW5zaW9ucykud2l0aFB1c2godGhpcy5wdXNoKS53aXRoR3Jvd0FmdGVyT3Blbih0aGlzLmdyb3dBZnRlck9wZW4pLndpdGhWaWV3cG9ydE1hcmdpbih0aGlzLnZpZXdwb3J0TWFyZ2luKS53aXRoTG9ja2VkUG9zaXRpb24odGhpcy5sb2NrUG9zaXRpb24pLndpdGhUcmFuc2Zvcm1PcmlnaW5Pbih0aGlzLnRyYW5zZm9ybU9yaWdpblNlbGVjdG9yKX1fY3JlYXRlUG9zaXRpb25TdHJhdGVneSgpe2NvbnN0IHQ9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5vcmlnaW4uZWxlbWVudFJlZik7cmV0dXJuIHRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodCksdH1fYXR0YWNoT3ZlcmxheSgpe3RoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5oYXNCYWNrZHJvcD10aGlzLmhhc0JhY2tkcm9wOnRoaXMuX2NyZWF0ZU92ZXJsYXkoKSx0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCl8fHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKHRoaXMuX3RlbXBsYXRlUG9ydGFsKSx0aGlzLmhhc0JhY2tkcm9wP3RoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uPXRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgodD0+e3RoaXMuYmFja2Ryb3BDbGljay5lbWl0KHQpfSkpOnRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnBvc2l0aW9uQ2hhbmdlLm9ic2VydmVycy5sZW5ndGg+MCYmKHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uPXRoaXMuX3Bvc2l0aW9uLnBvc2l0aW9uQ2hhbmdlcy5waXBlKEhlKCgoKT0+dGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoPjApKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5wb3NpdGlvbkNoYW5nZS5lbWl0KHQpLDA9PT10aGlzLnBvc2l0aW9uQ2hhbmdlLm9ic2VydmVycy5sZW5ndGgmJnRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9KSkpfV9kZXRhY2hPdmVybGF5KCl7dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSx0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9fWdMLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxnTCkoU20ocEwpLFNtKFhnKSxTbShlaCksU20odUwpLFNtKEhJLDgpKX0sZ0wuybVkaXI9bG8oe3R5cGU6Z0wsc2VsZWN0b3JzOltbIiIsImNkay1jb25uZWN0ZWQtb3ZlcmxheSIsIiJdLFsiIiwiY29ubmVjdGVkLW92ZXJsYXkiLCIiXSxbIiIsImNka0Nvbm5lY3RlZE92ZXJsYXkiLCIiXV0saW5wdXRzOnt2aWV3cG9ydE1hcmdpbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlWaWV3cG9ydE1hcmdpbiIsInZpZXdwb3J0TWFyZ2luIl0sb3BlbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIiwib3BlbiJdLGRpc2FibGVDbG9zZTpbImNka0Nvbm5lY3RlZE92ZXJsYXlEaXNhYmxlQ2xvc2UiLCJkaXNhYmxlQ2xvc2UiXSxzY3JvbGxTdHJhdGVneTpbImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSIsInNjcm9sbFN0cmF0ZWd5Il0sb2Zmc2V0WDpbImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRYIiwib2Zmc2V0WCJdLG9mZnNldFk6WyJjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WSIsIm9mZnNldFkiXSxoYXNCYWNrZHJvcDpbImNka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcCIsImhhc0JhY2tkcm9wIl0sbG9ja1Bvc2l0aW9uOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsImxvY2tQb3NpdGlvbiJdLGZsZXhpYmxlRGltZW5zaW9uczpbImNka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnMiLCJmbGV4aWJsZURpbWVuc2lvbnMiXSxncm93QWZ0ZXJPcGVuOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUdyb3dBZnRlck9wZW4iLCJncm93QWZ0ZXJPcGVuIl0scHVzaDpbImNka0Nvbm5lY3RlZE92ZXJsYXlQdXNoIiwicHVzaCJdLHBvc2l0aW9uczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMiLCJwb3NpdGlvbnMiXSxvcmlnaW46WyJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwib3JpZ2luIl0scG9zaXRpb25TdHJhdGVneTpbImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvblN0cmF0ZWd5IiwicG9zaXRpb25TdHJhdGVneSJdLHdpZHRoOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVdpZHRoIiwid2lkdGgiXSxoZWlnaHQ6WyJjZGtDb25uZWN0ZWRPdmVybGF5SGVpZ2h0IiwiaGVpZ2h0Il0sbWluV2lkdGg6WyJjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGgiLCJtaW5XaWR0aCJdLG1pbkhlaWdodDpbImNka0Nvbm5lY3RlZE92ZXJsYXlNaW5IZWlnaHQiLCJtaW5IZWlnaHQiXSxiYWNrZHJvcENsYXNzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3MiLCJiYWNrZHJvcENsYXNzIl0scGFuZWxDbGFzczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzIiwicGFuZWxDbGFzcyJdLHRyYW5zZm9ybU9yaWdpblNlbGVjdG9yOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVRyYW5zZm9ybU9yaWdpbk9uIiwidHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IiXX0sb3V0cHV0czp7YmFja2Ryb3BDbGljazoiYmFja2Ryb3BDbGljayIscG9zaXRpb25DaGFuZ2U6InBvc2l0aW9uQ2hhbmdlIixhdHRhY2g6ImF0dGFjaCIsZGV0YWNoOiJkZXRhY2giLG92ZXJsYXlLZXlkb3duOiJvdmVybGF5S2V5ZG93biIsb3ZlcmxheU91dHNpZGVDbGljazoib3ZlcmxheU91dHNpZGVDbGljayJ9LGV4cG9ydEFzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheSJdLGZlYXR1cmVzOltCb119KSxnTC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnBMfSx7dHlwZTpYZ30se3R5cGU6ZWh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOlt1TF19XX0se3R5cGU6SEksZGVjb3JhdG9yczpbe3R5cGU6U3J9XX1dLGdMLnByb3BEZWNvcmF0b3JzPXtvcmlnaW46W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIl19XSxwb3NpdGlvbnM6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIl19XSxwb3NpdGlvblN0cmF0ZWd5Olt7dHlwZTp4eSxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uU3RyYXRlZ3kiXX1dLG9mZnNldFg6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WCJdfV0sb2Zmc2V0WTpbe3R5cGU6eHksYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRZIl19XSx3aWR0aDpbe3R5cGU6eHksYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aCJdfV0saGVpZ2h0Olt7dHlwZTp4eSxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUhlaWdodCJdfV0sbWluV2lkdGg6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGgiXX1dLG1pbkhlaWdodDpbe3R5cGU6eHksYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlNaW5IZWlnaHQiXX1dLGJhY2tkcm9wQ2xhc3M6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcyJdfV0scGFuZWxDbGFzczpbe3R5cGU6eHksYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzIl19XSx2aWV3cG9ydE1hcmdpbjpbe3R5cGU6eHksYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlWaWV3cG9ydE1hcmdpbiJdfV0sc2Nyb2xsU3RyYXRlZ3k6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiXX1dLG9wZW46W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5T3BlbiJdfV0sZGlzYWJsZUNsb3NlOlt7dHlwZTp4eSxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheURpc2FibGVDbG9zZSJdfV0sdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3I6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5VHJhbnNmb3JtT3JpZ2luT24iXX1dLGhhc0JhY2tkcm9wOlt7dHlwZTp4eSxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIl19XSxsb2NrUG9zaXRpb246W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIl19XSxmbGV4aWJsZURpbWVuc2lvbnM6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIl19XSxncm93QWZ0ZXJPcGVuOlt7dHlwZTp4eSxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUdyb3dBZnRlck9wZW4iXX1dLHB1c2g6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5UHVzaCJdfV0sYmFja2Ryb3BDbGljazpbe3R5cGU6T3l9XSxwb3NpdGlvbkNoYW5nZTpbe3R5cGU6T3l9XSxhdHRhY2g6W3t0eXBlOk95fV0sZGV0YWNoOlt7dHlwZTpPeX1dLG92ZXJsYXlLZXlkb3duOlt7dHlwZTpPeX1dLG92ZXJsYXlPdXRzaWRlQ2xpY2s6W3t0eXBlOk95fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoZ0wsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW2Nkay1jb25uZWN0ZWQtb3ZlcmxheV0sIFtjb25uZWN0ZWQtb3ZlcmxheV0sIFtjZGtDb25uZWN0ZWRPdmVybGF5XSIsZXhwb3J0QXM6ImNka0Nvbm5lY3RlZE92ZXJsYXkifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6cEx9LHt0eXBlOlhnfSx7dHlwZTplaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W3VMXX1dfSx7dHlwZTpISSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfV19KSx7dmlld3BvcnRNYXJnaW46W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5Vmlld3BvcnRNYXJnaW4iXX1dLG9wZW46W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5T3BlbiJdfV0sZGlzYWJsZUNsb3NlOlt7dHlwZTp4eSxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheURpc2FibGVDbG9zZSJdfV0sYmFja2Ryb3BDbGljazpbe3R5cGU6T3l9XSxwb3NpdGlvbkNoYW5nZTpbe3R5cGU6T3l9XSxhdHRhY2g6W3t0eXBlOk95fV0sZGV0YWNoOlt7dHlwZTpPeX1dLG92ZXJsYXlLZXlkb3duOlt7dHlwZTpPeX1dLG92ZXJsYXlPdXRzaWRlQ2xpY2s6W3t0eXBlOk95fV0sc2Nyb2xsU3RyYXRlZ3k6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiXX1dLG9mZnNldFg6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WCJdfV0sb2Zmc2V0WTpbe3R5cGU6eHksYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRZIl19XSxoYXNCYWNrZHJvcDpbe3R5cGU6eHksYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcCJdfV0sbG9ja1Bvc2l0aW9uOlt7dHlwZTp4eSxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiJdfV0sZmxleGlibGVEaW1lbnNpb25zOlt7dHlwZTp4eSxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUZsZXhpYmxlRGltZW5zaW9ucyJdfV0sZ3Jvd0FmdGVyT3Blbjpbe3R5cGU6eHksYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlHcm93QWZ0ZXJPcGVuIl19XSxwdXNoOlt7dHlwZTp4eSxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVB1c2giXX1dLHBvc2l0aW9uczpbe3R5cGU6eHksYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMiXX1dLG9yaWdpbjpbe3R5cGU6eHksYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4iXX1dLHBvc2l0aW9uU3RyYXRlZ3k6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25TdHJhdGVneSJdfV0sd2lkdGg6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5V2lkdGgiXX1dLGhlaWdodDpbe3R5cGU6eHksYXJnczpbImNka0Nvbm5lY3RlZE92ZXJsYXlIZWlnaHQiXX1dLG1pbldpZHRoOlt7dHlwZTp4eSxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIl19XSxtaW5IZWlnaHQ6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5TWluSGVpZ2h0Il19XSxiYWNrZHJvcENsYXNzOlt7dHlwZTp4eSxhcmdzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3MiXX1dLHBhbmVsQ2xhc3M6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzcyJdfV0sdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3I6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5VHJhbnNmb3JtT3JpZ2luT24iXX1dfSk7Y29uc3QgaEw9e3Byb3ZpZGU6dUwsZGVwczpbcExdLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gYkwodCl7cmV0dXJuKCk9PnQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgeUx7fXlMLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx5TCl9LHlMLsm1bW9kPWFvKHt0eXBlOnlMfSkseUwuybVpbmo9dm4oe3Byb3ZpZGVyczpbcEwsaExdLGltcG9ydHM6W1tMSSxSRixfRl0sX0ZdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh5TCxbe3R5cGU6QXksYXJnczpbe2ltcG9ydHM6W0xJLFJGLF9GXSxleHBvcnRzOltnTCxmTCxfRl0sZGVjbGFyYXRpb25zOltnTCxmTF0scHJvdmlkZXJzOltwTCxoTF19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyh5TCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW2dMLGZMXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltMSSxSRixfRl19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bZ0wsZkwsX0ZdfX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIF9MIGV4dGVuZHMgUUZ7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLl9mdWxsU2NyZWVuRXZlbnROYW1lJiZ0aGlzLl9mdWxsU2NyZWVuTGlzdGVuZXImJnRoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fZnVsbFNjcmVlbkV2ZW50TmFtZSx0aGlzLl9mdWxsU2NyZWVuTGlzdGVuZXIpfV9jcmVhdGVDb250YWluZXIoKXtzdXBlci5fY3JlYXRlQ29udGFpbmVyKCksdGhpcy5fYWRqdXN0UGFyZW50Rm9yRnVsbHNjcmVlbkNoYW5nZSgpLHRoaXMuX2FkZEZ1bGxzY3JlZW5DaGFuZ2VMaXN0ZW5lcigoKCk9PnRoaXMuX2FkanVzdFBhcmVudEZvckZ1bGxzY3JlZW5DaGFuZ2UoKSkpfV9hZGp1c3RQYXJlbnRGb3JGdWxsc2NyZWVuQ2hhbmdlKCl7dGhpcy5fY29udGFpbmVyRWxlbWVudCYmKHRoaXMuZ2V0RnVsbHNjcmVlbkVsZW1lbnQoKXx8dGhpcy5fZG9jdW1lbnQuYm9keSkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyRWxlbWVudCl9X2FkZEZ1bGxzY3JlZW5DaGFuZ2VMaXN0ZW5lcih0KXtjb25zdCBlPXRoaXMuX2dldEV2ZW50TmFtZSgpO2UmJih0aGlzLl9mdWxsU2NyZWVuTGlzdGVuZXImJnRoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0aGlzLl9mdWxsU2NyZWVuTGlzdGVuZXIpLHRoaXMuX2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZSx0KSx0aGlzLl9mdWxsU2NyZWVuTGlzdGVuZXI9dCl9X2dldEV2ZW50TmFtZSgpe2lmKCF0aGlzLl9mdWxsU2NyZWVuRXZlbnROYW1lKXtjb25zdCB0PXRoaXMuX2RvY3VtZW50O3QuZnVsbHNjcmVlbkVuYWJsZWQ/dGhpcy5fZnVsbFNjcmVlbkV2ZW50TmFtZT0iZnVsbHNjcmVlbmNoYW5nZSI6dC53ZWJraXRGdWxsc2NyZWVuRW5hYmxlZD90aGlzLl9mdWxsU2NyZWVuRXZlbnROYW1lPSJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIjp0Lm1vekZ1bGxTY3JlZW5FbmFibGVkP3RoaXMuX2Z1bGxTY3JlZW5FdmVudE5hbWU9Im1vemZ1bGxzY3JlZW5jaGFuZ2UiOnQubXNGdWxsc2NyZWVuRW5hYmxlZCYmKHRoaXMuX2Z1bGxTY3JlZW5FdmVudE5hbWU9Ik1TRnVsbHNjcmVlbkNoYW5nZSIpfXJldHVybiB0aGlzLl9mdWxsU2NyZWVuRXZlbnROYW1lfWdldEZ1bGxzY3JlZW5FbGVtZW50KCl7Y29uc3QgdD10aGlzLl9kb2N1bWVudDtyZXR1cm4gdC5mdWxsc2NyZWVuRWxlbWVudHx8dC53ZWJraXRGdWxsc2NyZWVuRWxlbWVudHx8dC5tb3pGdWxsU2NyZWVuRWxlbWVudHx8dC5tc0Z1bGxzY3JlZW5FbGVtZW50fHxudWxsfX1fTC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8X0wpKHZyKFpfKSx2cih3eikpfSxfTC7JtXByb3Y9TW4oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgX0wodnIoWl8pLHZyKHd6KSl9LHRva2VuOl9MLHByb3ZpZGVkSW46InJvb3QifSksX0wuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19LHt0eXBlOnd6fV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChfTCxbe3R5cGU6aW0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfSx7dHlwZTp3en1dfSksbnVsbCk7Y2xhc3MgQ0x7fUNMLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxDTCl9LENMLsm1bW9kPWFvKHt0eXBlOkNMfSksQ0wuybVpbmo9dm4oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoQ0wsW3t0eXBlOkF5LGFyZ3M6W3t9XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBNTD1uZXcgU2V0O2xldCB2TDtjbGFzcyB4THtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9wbGF0Zm9ybT10LHRoaXMuX21hdGNoTWVkaWE9dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ3aW5kb3cubWF0Y2hNZWRpYT93aW5kb3cubWF0Y2hNZWRpYS5iaW5kKHdpbmRvdyk6T0x9bWF0Y2hNZWRpYSh0KXtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uV0VCS0lUJiYoZnVuY3Rpb24gZSh0KXtpZighTUwuaGFzKHQpKXRyeXt2THx8KHZMPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIiksdkwuc2V0QXR0cmlidXRlKCJ0eXBlIiwidGV4dC9jc3MiKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHZMKSksdkwuc2hlZXQmJih2TC5zaGVldC5pbnNlcnRSdWxlKGBAbWVkaWEgJHt0fSB7LmZ4LXF1ZXJ5LXRlc3R7IH19YCwwKSxNTC5hZGQodCkpfWNhdGNoKHQpe2NvbnNvbGUuZXJyb3IodCl9fSkodCksdGhpcy5fbWF0Y2hNZWRpYSh0KX19ZnVuY3Rpb24gT0wodCl7cmV0dXJue21hdGNoZXM6ImFsbCI9PT10fHwiIj09PXQsbWVkaWE6dCxhZGRMaXN0ZW5lcjooKT0+e30scmVtb3ZlTGlzdGVuZXI6KCk9Pnt9fX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICoveEwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHhMKSh2cih3eikpfSx4TC7JtXByb3Y9TW4oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgeEwodnIod3opKX0sdG9rZW46eEwscHJvdmlkZWRJbjoicm9vdCJ9KSx4TC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnd6fV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh4TCxbe3R5cGU6aW0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6d3p9XX0pLG51bGwpO2NsYXNzIFBMe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fbWVkaWFNYXRjaGVyPXQsdGhpcy5fem9uZT1lLHRoaXMuX3F1ZXJpZXM9bmV3IE1hcCx0aGlzLl9kZXN0cm95U3ViamVjdD1uZXcgSX1uZ09uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3lTdWJqZWN0Lm5leHQoKSx0aGlzLl9kZXN0cm95U3ViamVjdC5jb21wbGV0ZSgpfWlzTWF0Y2hlZCh0KXtyZXR1cm4gd0woTXoodCkpLnNvbWUoKHQ9PnRoaXMuX3JlZ2lzdGVyUXVlcnkodCkubXFsLm1hdGNoZXMpKX1vYnNlcnZlKHQpe2xldCBlPVd0KHdMKE16KHQpKS5tYXAoKHQ9PnRoaXMuX3JlZ2lzdGVyUXVlcnkodCkub2JzZXJ2YWJsZSkpKTtyZXR1cm4gZT1KdChlLnBpcGUoYmUoMSkpLGUucGlwZShUZSgxKSxnZSgwKSkpLGUucGlwZShJdCgodD0+e2NvbnN0IGU9e21hdGNoZXM6ITEsYnJlYWtwb2ludHM6e319O3JldHVybiB0LmZvckVhY2goKCh7bWF0Y2hlczp0LHF1ZXJ5Om59KT0+e2UubWF0Y2hlcz1lLm1hdGNoZXN8fHQsZS5icmVha3BvaW50c1tuXT10fSkpLGV9KSkpfV9yZWdpc3RlclF1ZXJ5KHQpe2lmKHRoaXMuX3F1ZXJpZXMuaGFzKHQpKXJldHVybiB0aGlzLl9xdWVyaWVzLmdldCh0KTtjb25zdCBlPXRoaXMuX21lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKHQpLG49e29ic2VydmFibGU6bmV3IEQoKHQ9Pntjb25zdCBuPWU9PnRoaXMuX3pvbmUucnVuKCgoKT0+dC5uZXh0KGUpKSk7cmV0dXJuIGUuYWRkTGlzdGVuZXIobiksKCk9PntlLnJlbW92ZUxpc3RlbmVyKG4pfX0pKS5waXBlKE5lKGUpLEl0KCgoe21hdGNoZXM6ZX0pPT4oe3F1ZXJ5OnQsbWF0Y2hlczplfSkpKSxJZSh0aGlzLl9kZXN0cm95U3ViamVjdCkpLG1xbDplfTtyZXR1cm4gdGhpcy5fcXVlcmllcy5zZXQodCxuKSxufX1mdW5jdGlvbiB3TCh0KXtyZXR1cm4gdC5tYXAoKHQ9PnQuc3BsaXQoIiwiKSkpLnJlZHVjZSgoKHQsZSk9PnQuY29uY2F0KGUpKSkubWFwKCh0PT50LnRyaW0oKSkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBrTCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsImRpdiIsMSksUm0oMSwiYnV0dG9uIiwyKSxWbSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIGhpKHQpLFltKCkuYWN0aW9uKCl9KSksa3UoMiksQW0oKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgpO3JjKDIpLFN1KHQuZGF0YS5hY3Rpb24pfX1mdW5jdGlvbiBTTCh0LGUpe31QTC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UEwpKHZyKHhMKSx2cihhXykpfSxQTC7JtXByb3Y9TW4oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgUEwodnIoeEwpLHZyKGFfKSl9LHRva2VuOlBMLHByb3ZpZGVkSW46InJvb3QifSksUEwuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp4TH0se3R5cGU6YV99XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFBMLFt7dHlwZTppbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp4TH0se3R5cGU6YV99XX0pLG51bGwpO2NvbnN0IERMPW5ldyBHYSgiTWF0U25hY2tCYXJEYXRhIik7Y2xhc3MgRUx7Y29uc3RydWN0b3IoKXt0aGlzLnBvbGl0ZW5lc3M9ImFzc2VydGl2ZSIsdGhpcy5hbm5vdW5jZW1lbnRNZXNzYWdlPSIiLHRoaXMuZHVyYXRpb249MCx0aGlzLmRhdGE9bnVsbCx0aGlzLmhvcml6b250YWxQb3NpdGlvbj0iY2VudGVyIix0aGlzLnZlcnRpY2FsUG9zaXRpb249ImJvdHRvbSJ9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBSTD1NYXRoLnBvdygyLDMxKS0xO2NsYXNzIEFMe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fb3ZlcmxheVJlZj1lLHRoaXMuX2FmdGVyRGlzbWlzc2VkPW5ldyBJLHRoaXMuX2FmdGVyT3BlbmVkPW5ldyBJLHRoaXMuX29uQWN0aW9uPW5ldyBJLHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSExLHRoaXMuY29udGFpbmVySW5zdGFuY2U9dCx0aGlzLm9uQWN0aW9uKCkuc3Vic2NyaWJlKCgoKT0+dGhpcy5kaXNtaXNzKCkpKSx0Ll9vbkV4aXQuc3Vic2NyaWJlKCgoKT0+dGhpcy5fZmluaXNoRGlzbWlzcygpKSl9ZGlzbWlzcygpe3RoaXMuX2FmdGVyRGlzbWlzc2VkLmNsb3NlZHx8dGhpcy5jb250YWluZXJJbnN0YW5jZS5leGl0KCksY2xlYXJUaW1lb3V0KHRoaXMuX2R1cmF0aW9uVGltZW91dElkKX1kaXNtaXNzV2l0aEFjdGlvbigpe3RoaXMuX29uQWN0aW9uLmNsb3NlZHx8KHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSEwLHRoaXMuX29uQWN0aW9uLm5leHQoKSx0aGlzLl9vbkFjdGlvbi5jb21wbGV0ZSgpKSxjbGVhclRpbWVvdXQodGhpcy5fZHVyYXRpb25UaW1lb3V0SWQpfWNsb3NlV2l0aEFjdGlvbigpe3RoaXMuZGlzbWlzc1dpdGhBY3Rpb24oKX1fZGlzbWlzc0FmdGVyKHQpe3RoaXMuX2R1cmF0aW9uVGltZW91dElkPXNldFRpbWVvdXQoKCgpPT50aGlzLmRpc21pc3MoKSksTWF0aC5taW4odCxSTCkpfV9vcGVuKCl7dGhpcy5fYWZ0ZXJPcGVuZWQuY2xvc2VkfHwodGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCkpfV9maW5pc2hEaXNtaXNzKCl7dGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb25BY3Rpb24uY2xvc2VkfHx0aGlzLl9vbkFjdGlvbi5jb21wbGV0ZSgpLHRoaXMuX2FmdGVyRGlzbWlzc2VkLm5leHQoe2Rpc21pc3NlZEJ5QWN0aW9uOnRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9ufSksdGhpcy5fYWZ0ZXJEaXNtaXNzZWQuY29tcGxldGUoKSx0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbj0hMX1hZnRlckRpc21pc3NlZCgpe3JldHVybiB0aGlzLl9hZnRlckRpc21pc3NlZH1hZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLmNvbnRhaW5lckluc3RhbmNlLl9vbkVudGVyfW9uQWN0aW9uKCl7cmV0dXJuIHRoaXMuX29uQWN0aW9ufX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgVEx7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNuYWNrQmFyUmVmPXQsdGhpcy5kYXRhPWV9YWN0aW9uKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzV2l0aEFjdGlvbigpfWdldCBoYXNBY3Rpb24oKXtyZXR1cm4hIXRoaXMuZGF0YS5hY3Rpb259fVRMLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxUTCkoU20oQUwpLFNtKERMKSl9LFRMLsm1Y21wPXRvKHt0eXBlOlRMLHNlbGVjdG9yczpbWyJzaW1wbGUtc25hY2stYmFyIl1dLGhvc3RBdHRyczpbMSwibWF0LXNpbXBsZS1zbmFja2JhciJdLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWyJjbGFzcyIsIm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIiw0LCJuZ0lmIl0sWzEsIm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIl0sWyJtYXQtYnV0dG9uIiwiIiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwic3BhbiIpLGt1KDEpLEFtKCksUXAoMixrTCwzLDEsImRpdiIsMCkpLDImZSYmKHJjKDEpLFN1KG4uZGF0YS5tZXNzYWdlKSxyYygxKSxEbSgibmdJZiIsbi5oYXNBY3Rpb24pKX0sZGlyZWN0aXZlczpbZE0sWEhdLHN0eWxlczpbIi5tYXQtc2ltcGxlLXNuYWNrYmFye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bGluZS1oZWlnaHQ6MjBweDtvcGFjaXR5OjF9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2ZsZXgtc2hyaW5rOjA7bWFyZ2luOi04cHggLThweCAtOHB4IDhweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24gYnV0dG9ue21heC1oZWlnaHQ6MzZweDttaW4td2lkdGg6MH1bZGlyPXJ0bF0gLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue21hcmdpbi1sZWZ0Oi04cHg7bWFyZ2luLXJpZ2h0OjhweH1cbiJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLFRMLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6QUx9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltETF19XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoVEwsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3Rvcjoic2ltcGxlLXNuYWNrLWJhciIsdGVtcGxhdGU6JzxzcGFuPnt7ZGF0YS5tZXNzYWdlfX08L3NwYW4+XG48ZGl2IGNsYXNzPSJtYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiIgICpuZ0lmPSJoYXNBY3Rpb24iPlxuICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT0iYWN0aW9uKCkiPnt7ZGF0YS5hY3Rpb259fTwvYnV0dG9uPlxuPC9kaXY+XG4nLGVuY2Fwc3VsYXRpb246SG4uTm9uZSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNoLGhvc3Q6e2NsYXNzOiJtYXQtc2ltcGxlLXNuYWNrYmFyIn0sc3R5bGVzOlsiLm1hdC1zaW1wbGUtc25hY2tiYXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtsaW5lLWhlaWdodDoyMHB4O29wYWNpdHk6MX0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257ZmxleC1zaHJpbms6MDttYXJnaW46LThweCAtOHB4IC04cHggOHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiBidXR0b257bWF4LWhlaWdodDozNnB4O21pbi13aWR0aDowfVtkaXI9cnRsXSAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tcmlnaHQ6OHB4fVxuIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpBTH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W0RMXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IE5MPXtzbmFja0JhclN0YXRlOm54KCJzdGF0ZSIsW3J4KCJ2b2lkLCBoaWRkZW4iLGF4KHt0cmFuc2Zvcm06InNjYWxlKDAuOCkiLG9wYWNpdHk6MH0pKSxyeCgidmlzaWJsZSIsYXgoe3RyYW5zZm9ybToic2NhbGUoMSkiLG9wYWNpdHk6MX0pKSxseCgiKiA9PiB2aXNpYmxlIixveCgiMTUwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiKSksbHgoIiogPT4gdm9pZCwgKiA9PiBoaWRkZW4iLG94KCI3NW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSkiLGF4KHtvcGFjaXR5OjB9KSkpXSl9OwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyB6TCBleHRlbmRzIFBGe2NvbnN0cnVjdG9yKHQsZSxuLG8saSl7c3VwZXIoKSx0aGlzLl9uZ1pvbmU9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9bix0aGlzLl9wbGF0Zm9ybT1vLHRoaXMuc25hY2tCYXJDb25maWc9aSx0aGlzLl9hbm5vdW5jZURlbGF5PTE1MCx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25Bbm5vdW5jZT1uZXcgSSx0aGlzLl9vbkV4aXQ9bmV3IEksdGhpcy5fb25FbnRlcj1uZXcgSSx0aGlzLl9hbmltYXRpb25TdGF0ZT0idm9pZCIsdGhpcy5hdHRhY2hEb21Qb3J0YWw9dD0+KHRoaXMuX2Fzc2VydE5vdEF0dGFjaGVkKCksdGhpcy5fYXBwbHlTbmFja0JhckNsYXNzZXMoKSx0aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoRG9tUG9ydGFsKHQpKSx0aGlzLl9saXZlPSJhc3NlcnRpdmUiIT09aS5wb2xpdGVuZXNzfHxpLmFubm91bmNlbWVudE1lc3NhZ2U/Im9mZiI9PT1pLnBvbGl0ZW5lc3M/Im9mZiI6InBvbGl0ZSI6ImFzc2VydGl2ZSIsdGhpcy5fcGxhdGZvcm0uRklSRUZPWCYmKCJwb2xpdGUiPT09dGhpcy5fbGl2ZSYmKHRoaXMuX3JvbGU9InN0YXR1cyIpLCJhc3NlcnRpdmUiPT09dGhpcy5fbGl2ZSYmKHRoaXMuX3JvbGU9ImFsZXJ0IikpfWF0dGFjaENvbXBvbmVudFBvcnRhbCh0KXtyZXR1cm4gdGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKSx0aGlzLl9hcHBseVNuYWNrQmFyQ2xhc3NlcygpLHRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hDb21wb25lbnRQb3J0YWwodCl9YXR0YWNoVGVtcGxhdGVQb3J0YWwodCl7cmV0dXJuIHRoaXMuX2Fzc2VydE5vdEF0dGFjaGVkKCksdGhpcy5fYXBwbHlTbmFja0JhckNsYXNzZXMoKSx0aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoVGVtcGxhdGVQb3J0YWwodCl9b25BbmltYXRpb25FbmQodCl7Y29uc3R7ZnJvbVN0YXRlOmUsdG9TdGF0ZTpufT10O2lmKCgidm9pZCI9PT1uJiYidm9pZCIhPT1lfHwiaGlkZGVuIj09PW4pJiZ0aGlzLl9jb21wbGV0ZUV4aXQoKSwidmlzaWJsZSI9PT1uKXtjb25zdCB0PXRoaXMuX29uRW50ZXI7dGhpcy5fbmdab25lLnJ1bigoKCk9Pnt0Lm5leHQoKSx0LmNvbXBsZXRlKCl9KSl9fWVudGVyKCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fYW5pbWF0aW9uU3RhdGU9InZpc2libGUiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLl9zY3JlZW5SZWFkZXJBbm5vdW5jZSgpKX1leGl0KCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblN0YXRlPSJoaWRkZW4iLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hdC1leGl0IiwiIiksY2xlYXJUaW1lb3V0KHRoaXMuX2Fubm91bmNlVGltZW91dElkKSx0aGlzLl9vbkV4aXR9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fY29tcGxldGVFeGl0KCl9X2NvbXBsZXRlRXhpdCgpe3RoaXMuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LnBpcGUoYmUoMSkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9vbkV4aXQubmV4dCgpLHRoaXMuX29uRXhpdC5jb21wbGV0ZSgpfSkpfV9hcHBseVNuYWNrQmFyQ2xhc3Nlcygpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGU9dGhpcy5zbmFja0JhckNvbmZpZy5wYW5lbENsYXNzO2UmJihBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaCgoZT0+dC5jbGFzc0xpc3QuYWRkKGUpKSk6dC5jbGFzc0xpc3QuYWRkKGUpKSwiY2VudGVyIj09PXRoaXMuc25hY2tCYXJDb25maWcuaG9yaXpvbnRhbFBvc2l0aW9uJiZ0LmNsYXNzTGlzdC5hZGQoIm1hdC1zbmFjay1iYXItY2VudGVyIiksInRvcCI9PT10aGlzLnNuYWNrQmFyQ29uZmlnLnZlcnRpY2FsUG9zaXRpb24mJnQuY2xhc3NMaXN0LmFkZCgibWF0LXNuYWNrLWJhci10b3AiKX1fYXNzZXJ0Tm90QXR0YWNoZWQoKXtpZih0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGF0dGFjaCBzbmFjayBiYXIgY29udGVudCBhZnRlciBjb250ZW50IGlzIGFscmVhZHkgYXR0YWNoZWQiKX1fc2NyZWVuUmVhZGVyQW5ub3VuY2UoKXt0aGlzLl9hbm5vdW5jZVRpbWVvdXRJZHx8dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e3RoaXMuX2Fubm91bmNlVGltZW91dElkPXNldFRpbWVvdXQoKCgpPT57Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiW2FyaWEtaGlkZGVuXSIpLGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIlthcmlhLWxpdmVdIik7aWYodCYmZSl7bGV0IG49bnVsbDt0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmdC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSYmKG49ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCksdC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiksZS5hcHBlbmRDaGlsZCh0KSxudWxsPT1ufHxuLmZvY3VzKCksdGhpcy5fb25Bbm5vdW5jZS5uZXh0KCksdGhpcy5fb25Bbm5vdW5jZS5jb21wbGV0ZSgpfX0pLHRoaXMuX2Fubm91bmNlRGVsYXkpfSkpfX16TC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ekwpKFNtKGFfKSxTbShoZyksU20oVWcpLFNtKHd6KSxTbShFTCkpfSx6TC7JtWNtcD10byh7dHlwZTp6TCxzZWxlY3RvcnM6W1sic25hY2stYmFyLWNvbnRhaW5lciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmUWgoREYsNyksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi5fcG9ydGFsT3V0bGV0PXQuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtc25hY2stYmFyLWNvbnRhaW5lciJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJmptKCJAc3RhdGUuZG9uZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25BbmltYXRpb25FbmQoZSl9KSksMiZlJiZOdSgiQHN0YXRlIixuLl9hbmltYXRpb25TdGF0ZSl9LGZlYXR1cmVzOlt4cF0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsiY2RrUG9ydGFsT3V0bGV0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJkaXYiLDApLFFwKDEsU0wsMCwwLCJuZy10ZW1wbGF0ZSIsMSksQW0oKSxUbSgyLCJkaXYiKSksMiZlJiYocmMoMiksanAoImFyaWEtbGl2ZSIsbi5fbGl2ZSkoInJvbGUiLG4uX3JvbGUpKX0sZGlyZWN0aXZlczpbREZdLHN0eWxlczpbIi5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntib3JkZXItcmFkaXVzOjRweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MjRweDttYXgtd2lkdGg6MzN2dzttaW4td2lkdGg6MzQ0cHg7cGFkZGluZzoxNHB4IDE2cHg7bWluLWhlaWdodDo0OHB4O3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbmFjay1iYXItY29udGFpbmVye2JvcmRlcjpzb2xpZCAxcHh9Lm1hdC1zbmFjay1iYXItaGFuZHNldHt3aWR0aDoxMDAlfS5tYXQtc25hY2stYmFyLWhhbmRzZXQgLm1hdC1zbmFjay1iYXItY29udGFpbmVye21hcmdpbjo4cHg7bWF4LXdpZHRoOjEwMCU7bWluLXdpZHRoOjA7d2lkdGg6MTAwJX1cbiJdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W05MLnNuYWNrQmFyU3RhdGVdfX0pLHpMLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6YV99LHt0eXBlOmhnfSx7dHlwZTpVZ30se3R5cGU6d3p9LHt0eXBlOkVMfV0sekwucHJvcERlY29yYXRvcnM9e19wb3J0YWxPdXRsZXQ6W3t0eXBlOlphLGFyZ3M6W0RGLHtzdGF0aWM6ITB9XX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHpMLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InNuYWNrLWJhci1jb250YWluZXIiLHRlbXBsYXRlOidceDNjIS0tIEluaXRpYWxseSBob2xkcyB0aGUgc25hY2sgYmFyIGNvbnRlbnQsIHdpbGwgYmUgZW1wdHkgYWZ0ZXIgYW5ub3VuY2luZyB0byBzY3JlZW4gcmVhZGVycy4gLS1ceDNlXG48ZGl2IGFyaWEtaGlkZGVuPSJ0cnVlIj5cbiAgPG5nLXRlbXBsYXRlIGNka1BvcnRhbE91dGxldD48L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cblx4M2MhLS0gV2lsbCByZWNlaXZlIHRoZSBzbmFjayBiYXIgY29udGVudCBmcm9tIHRoZSBub24tbGl2ZSBkaXYsIG1vdmUgd2lsbCBoYXBwZW4gYSBzaG9ydCBkZWxheSBhZnRlciBvcGVuaW5nIC0tXHgzZVxuPGRpdiBbYXR0ci5hcmlhLWxpdmVdPSJfbGl2ZSIgW2F0dHIucm9sZV09Il9yb2xlIj48L2Rpdj5cbicsY2hhbmdlRGV0ZWN0aW9uOnpuLkRlZmF1bHQsZW5jYXBzdWxhdGlvbjpIbi5Ob25lLGFuaW1hdGlvbnM6W05MLnNuYWNrQmFyU3RhdGVdLGhvc3Q6e2NsYXNzOiJtYXQtc25hY2stYmFyLWNvbnRhaW5lciIsIltAc3RhdGVdIjoiX2FuaW1hdGlvblN0YXRlIiwiKEBzdGF0ZS5kb25lKSI6Im9uQW5pbWF0aW9uRW5kKCRldmVudCkifSxzdHlsZXM6WyIubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjI0cHg7bWF4LXdpZHRoOjMzdnc7bWluLXdpZHRoOjM0NHB4O3BhZGRpbmc6MTRweCAxNnB4O21pbi1oZWlnaHQ6NDhweDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntib3JkZXI6c29saWQgMXB4fS5tYXQtc25hY2stYmFyLWhhbmRzZXR7d2lkdGg6MTAwJX0ubWF0LXNuYWNrLWJhci1oYW5kc2V0IC5tYXQtc25hY2stYmFyLWNvbnRhaW5lcnttYXJnaW46OHB4O21heC13aWR0aDoxMDAlO21pbi13aWR0aDowO3dpZHRoOjEwMCV9XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmFffSx7dHlwZTpoZ30se3R5cGU6VWd9LHt0eXBlOnd6fSx7dHlwZTpFTH1dfSkse19wb3J0YWxPdXRsZXQ6W3t0eXBlOlphLGFyZ3M6W0RGLHtzdGF0aWM6ITB9XX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBJTHt9SUwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fElMKX0sSUwuybVtb2Q9YW8oe3R5cGU6SUx9KSxJTC7JtWluaj12bih7aW1wb3J0czpbW3lMLFJGLFdNLEpILFhJXSxYSV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKElMLFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbeUwsUkYsV00sSkgsWEldLGV4cG9ydHM6W3pMLFhJXSxkZWNsYXJhdGlvbnM6W3pMLFRMXSxlbnRyeUNvbXBvbmVudHM6W3pMLFRMXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKElMLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bekwsVExdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW3lMLFJGLFdNLEpILFhJXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVyblt6TCxYSV19fSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBITD1uZXcgR2EoIm1hdC1zbmFjay1iYXItZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBGTCgpe3JldHVybiBuZXcgRUx9fSk7Y2xhc3MgTEx7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEpe3RoaXMuX292ZXJsYXk9dCx0aGlzLl9saXZlPWUsdGhpcy5faW5qZWN0b3I9bix0aGlzLl9icmVha3BvaW50T2JzZXJ2ZXI9byx0aGlzLl9wYXJlbnRTbmFja0Jhcj1pLHRoaXMuX2RlZmF1bHRDb25maWc9YSx0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsPW51bGwsdGhpcy5zaW1wbGVTbmFja0JhckNvbXBvbmVudD1UTCx0aGlzLnNuYWNrQmFyQ29udGFpbmVyQ29tcG9uZW50PXpMLHRoaXMuaGFuZHNldENzc0NsYXNzPSJtYXQtc25hY2stYmFyLWhhbmRzZXQifWdldCBfb3BlbmVkU25hY2tCYXJSZWYoKXtjb25zdCB0PXRoaXMuX3BhcmVudFNuYWNrQmFyO3JldHVybiB0P3QuX29wZW5lZFNuYWNrQmFyUmVmOnRoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWx9c2V0IF9vcGVuZWRTbmFja0JhclJlZih0KXt0aGlzLl9wYXJlbnRTbmFja0Jhcj90aGlzLl9wYXJlbnRTbmFja0Jhci5fb3BlbmVkU25hY2tCYXJSZWY9dDp0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsPXR9b3BlbkZyb21Db21wb25lbnQodCxlKXtyZXR1cm4gdGhpcy5fYXR0YWNoKHQsZSl9b3BlbkZyb21UZW1wbGF0ZSh0LGUpe3JldHVybiB0aGlzLl9hdHRhY2godCxlKX1vcGVuKHQsZT0iIixuKXtjb25zdCBvPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLl9kZWZhdWx0Q29uZmlnKSxuKTtyZXR1cm4gby5kYXRhPXttZXNzYWdlOnQsYWN0aW9uOmV9LG8uYW5ub3VuY2VtZW50TWVzc2FnZT09PXQmJihvLmFubm91bmNlbWVudE1lc3NhZ2U9dm9pZCAwKSx0aGlzLm9wZW5Gcm9tQ29tcG9uZW50KHRoaXMuc2ltcGxlU25hY2tCYXJDb21wb25lbnQsbyl9ZGlzbWlzcygpe3RoaXMuX29wZW5lZFNuYWNrQmFyUmVmJiZ0aGlzLl9vcGVuZWRTbmFja0JhclJlZi5kaXNtaXNzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsJiZ0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsLmRpc21pc3MoKX1fYXR0YWNoU25hY2tCYXJDb250YWluZXIodCxlKXtjb25zdCBuPXJwLmNyZWF0ZSh7cGFyZW50OmUmJmUudmlld0NvbnRhaW5lclJlZiYmZS52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yfHx0aGlzLl9pbmplY3Rvcixwcm92aWRlcnM6W3twcm92aWRlOkVMLHVzZVZhbHVlOmV9XX0pLG89bmV3IHZGKHRoaXMuc25hY2tCYXJDb250YWluZXJDb21wb25lbnQsZS52aWV3Q29udGFpbmVyUmVmLG4pLGk9dC5hdHRhY2gobyk7cmV0dXJuIGkuaW5zdGFuY2Uuc25hY2tCYXJDb25maWc9ZSxpLmluc3RhbmNlfV9hdHRhY2godCxlKXtjb25zdCBuPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG5ldyBFTCksdGhpcy5fZGVmYXVsdENvbmZpZyksZSksbz10aGlzLl9jcmVhdGVPdmVybGF5KG4pLGk9dGhpcy5fYXR0YWNoU25hY2tCYXJDb250YWluZXIobyxuKSxhPW5ldyBBTChpLG8pO2lmKHQgaW5zdGFuY2VvZiBYZyl7Y29uc3QgZT1uZXcgeEYodCxudWxsLHskaW1wbGljaXQ6bi5kYXRhLHNuYWNrQmFyUmVmOmF9KTthLmluc3RhbmNlPWkuYXR0YWNoVGVtcGxhdGVQb3J0YWwoZSl9ZWxzZXtjb25zdCBlPXRoaXMuX2NyZWF0ZUluamVjdG9yKG4sYSksbz1uZXcgdkYodCx2b2lkIDAsZSkscj1pLmF0dGFjaENvbXBvbmVudFBvcnRhbChvKTthLmluc3RhbmNlPXIuaW5zdGFuY2V9cmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKCIobWF4LXdpZHRoOiA1OTkuOThweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIikucGlwZShJZShvLmRldGFjaG1lbnRzKCkpKS5zdWJzY3JpYmUoKHQ9Pntjb25zdCBlPW8ub3ZlcmxheUVsZW1lbnQuY2xhc3NMaXN0O3QubWF0Y2hlcz9lLmFkZCh0aGlzLmhhbmRzZXRDc3NDbGFzcyk6ZS5yZW1vdmUodGhpcy5oYW5kc2V0Q3NzQ2xhc3MpfSkpLG4uYW5ub3VuY2VtZW50TWVzc2FnZSYmaS5fb25Bbm5vdW5jZS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fbGl2ZS5hbm5vdW5jZShuLmFubm91bmNlbWVudE1lc3NhZ2Usbi5wb2xpdGVuZXNzKX0pKSx0aGlzLl9hbmltYXRlU25hY2tCYXIoYSxuKSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZj1hLHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmfV9hbmltYXRlU25hY2tCYXIodCxlKXt0LmFmdGVyRGlzbWlzc2VkKCkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX29wZW5lZFNuYWNrQmFyUmVmPT10JiYodGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9bnVsbCksZS5hbm5vdW5jZW1lbnRNZXNzYWdlJiZ0aGlzLl9saXZlLmNsZWFyKCl9KSksdGhpcy5fb3BlbmVkU25hY2tCYXJSZWY/KHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmLmFmdGVyRGlzbWlzc2VkKCkuc3Vic2NyaWJlKCgoKT0+e3QuY29udGFpbmVySW5zdGFuY2UuZW50ZXIoKX0pKSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZi5kaXNtaXNzKCkpOnQuY29udGFpbmVySW5zdGFuY2UuZW50ZXIoKSxlLmR1cmF0aW9uJiZlLmR1cmF0aW9uPjAmJnQuYWZ0ZXJPcGVuZWQoKS5zdWJzY3JpYmUoKCgpPT50Ll9kaXNtaXNzQWZ0ZXIoZS5kdXJhdGlvbikpKX1fY3JlYXRlT3ZlcmxheSh0KXtjb25zdCBlPW5ldyBWRjtlLmRpcmVjdGlvbj10LmRpcmVjdGlvbjtsZXQgbj10aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCk7Y29uc3Qgbz0icnRsIj09PXQuZGlyZWN0aW9uLGk9ImxlZnQiPT09dC5ob3Jpem9udGFsUG9zaXRpb258fCJzdGFydCI9PT10Lmhvcml6b250YWxQb3NpdGlvbiYmIW98fCJlbmQiPT09dC5ob3Jpem9udGFsUG9zaXRpb24mJm8sYT0haSYmImNlbnRlciIhPT10Lmhvcml6b250YWxQb3NpdGlvbjtyZXR1cm4gaT9uLmxlZnQoIjAiKTphP24ucmlnaHQoIjAiKTpuLmNlbnRlckhvcml6b250YWxseSgpLCJ0b3AiPT09dC52ZXJ0aWNhbFBvc2l0aW9uP24udG9wKCIwIik6bi5ib3R0b20oIjAiKSxlLnBvc2l0aW9uU3RyYXRlZ3k9bix0aGlzLl9vdmVybGF5LmNyZWF0ZShlKX1fY3JlYXRlSW5qZWN0b3IodCxlKXtyZXR1cm4gcnAuY3JlYXRlKHtwYXJlbnQ6dCYmdC52aWV3Q29udGFpbmVyUmVmJiZ0LnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3J8fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczpbe3Byb3ZpZGU6QUwsdXNlVmFsdWU6ZX0se3Byb3ZpZGU6REwsdXNlVmFsdWU6dC5kYXRhfV19KX19TEwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fExMKSh2cihwTCksdnIoT0kpLHZyKHJwKSx2cihQTCksdnIoTEwsMTIpLHZyKEhMKSl9LExMLsm1cHJvdj1Nbih7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBMTCh2cihwTCksdnIoT0kpLHZyKEdkKSx2cihQTCksdnIoTEwsMTIpLHZyKEhMKSl9LHRva2VuOkxMLHByb3ZpZGVkSW46SUx9KSxMTC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnBMfSx7dHlwZTpPSX0se3R5cGU6cnB9LHt0eXBlOlBMfSx7dHlwZTpMTCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RXJ9XX0se3R5cGU6RUwsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbSExdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKExMLFt7dHlwZTppbSxhcmdzOlt7cHJvdmlkZWRJbjpJTH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnBMfSx7dHlwZTpPSX0se3R5cGU6cnB9LHt0eXBlOlBMfSx7dHlwZTpMTCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RXJ9XX0se3R5cGU6RUwsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbSExdfV19XX0pLG51bGwpO2NvbnN0IEJMPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxWTD0iXFx1MDAwMC1cXHUwMDIwXFx1MDA3Zi1cXHUwMDlmIixqTD1uZXcgUmVnRXhwKCIoPzpbYS16QS1aXVthLXpBLVowLTkrLi1dezIsfTpcXC9cXC98ZGF0YTp8d3d3XFwuKVteXFxzIitWTCsnIl17Mix9W15cXHMnK1ZMKyJcIicpfVxcXSw6Oy4hP10iLCJndSIpO2Z1bmN0aW9uIFVMKHQpe3JldHVybihmdW5jdGlvbiBlKHQsbil7bi5mbGFncy5pbmNsdWRlcygiZyIpfHwobj1uZXcgUmVnRXhwKG4sbi5mbGFncysiZyIpKTtjb25zdCBvPVtdO2xldCBpPTA7Zm9yKGNvbnN0IGUgb2YgdC5tYXRjaEFsbChuKSl7Y29uc3Qgbj1lLmluZGV4LGE9ZVswXTtuPmkmJm8ucHVzaCh7aW5kZXg6aSx0ZXh0OnQuc3Vic3RyaW5nKGksbiksbWF0Y2hlc1JlZ2V4OiExfSksby5wdXNoKHtpbmRleDpuLHRleHQ6YSxtYXRjaGVzUmVnZXg6ITB9KSxpPW4rYS5sZW5ndGh9cmV0dXJuIHQubGVuZ3RoPmkmJm8ucHVzaCh7aW5kZXg6aSx0ZXh0OnQuc3Vic3RyaW5nKGksdC5sZW5ndGgpLG1hdGNoZXNSZWdleDohMX0pLG99KSh0LGpMKS5tYXAoKCh7bWF0Y2hlc1JlZ2V4OnQsdGV4dDplfSk9Pih7aXNVUkw6dCx0ZXh0OmV9KSkpfWZ1bmN0aW9uIEdMKHQsZSl7aWYoMSZ0JiYoTm0oMCksa3UoMSksem0oKSksMiZ0KXtjb25zdCB0PVltKCkuJGltcGxpY2l0O3JjKDEpLER1KCIgIix0LnRleHQsIiAiKX19ZnVuY3Rpb24gV0wodCxlKXtpZigxJnQmJihSbSgwLCJhIiw3KSxrdSgxKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oKS4kaW1wbGljaXQ7S20oImhyZWYiLHQudGV4dCxUcykscmMoMSksU3UodC50ZXh0KX19ZnVuY3Rpb24gWUwodCxlKXtpZigxJnQmJihObSgwKSxRcCgxLEdMLDIsMSwibmctY29udGFpbmVyIiw1KSxRcCgyLFdMLDIsMiwibmctdGVtcGxhdGUiLG51bGwsNixpYiksem0oKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49JHAoMyk7cmMoMSksRG0oIm5nSWYiLCF0LmlzVVJMKSgibmdJZkVsc2UiLG4pfX1mdW5jdGlvbiBxTCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsImJ1dHRvbiIsOCksVm0oImNsaWNrIiwoZnVuY3Rpb24gZSgpe3JldHVybiBoaSh0KSxZbSgpLm9uQWN0aW9uQnV0dG9uQ2xpY2tlZCgpfSkpLGt1KDEpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PVltKCk7cmMoMSksRHUoIiAiLHQuYWxlcnQuZm9sbG93dXBBY3Rpb24ubG9jYWxpemVkTGFiZWwsIiAiKX19Y2xhc3MgWkx7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuc25hY2tCYXJSZWY9dCx0aGlzLnVua25vd25EYXRhPWUsdGhpcy5zdG9yZT1uLHRoaXMuc3BsaXRCeVVSTD1VTCx0aGlzLmFsZXJ0PWV9b25BY3Rpb25CdXR0b25DbGlja2VkKCl7cmV0dXJuIGdBKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzKCk7Y29uc3QgdD15aWVsZCB0aGlzLmFsZXJ0LmZvbGxvd3VwQWN0aW9uLmdldEZvbGxvd3VwQWN0aW9uKHRoaXMuc3RvcmUpO3RoaXMuc3RvcmUuZGlzcGF0Y2godCl9KSl9b25DbG9zZUJ1dHRvbkNsaWNrZWQoKXt0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3MoKX19WkwuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFpMKShTbShBTCksU20oREwpLFNtKEl3KSl9LFpMLsm1Y21wPXRvKHt0eXBlOlpMLHNlbGVjdG9yczpbWyJhbGVydC1kaXNwbGF5LXNuYWNrYmFyIl1dLGRlY2xzOjYsdmFyczoyLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJEaXNtaXNzIik6JGxvY2FsaXplYDpBIGJ1dHRvbiB0byBjbG9zZSB0aGUgc25hY2tiYXIgbWVzc2FnZeKQn2VhNGQ5ZmU2MTQyMGEzZmNlODFjZjU0YzRjNjE1ZTNjMTljNjQ2YTbikJ8xNTM2MDg3NTE5NzQzNzA3MzYyOkRpc21pc3NgLFtbMSwibWVzc2FnZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udHJvbHMiXSxbIm1hdC1idXR0b24iLCIiLCJjbGFzcyIsImZvbGxvd3VwLWJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsImRpc21pc3MtYnV0dG9uIiwzLCJjbGljayJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxpbmtQaWVjZSIsIiJdLFsicmVsIiwibm9yZWZlcnJlciBub29wZW5lciIsInRhcmdldCIsIl9ibGFuayIsMywiaHJlZiJdLFsibWF0LWJ1dHRvbiIsIiIsMSwiZm9sbG93dXAtYnV0dG9uIiwzLCJjbGljayJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsImRpdiIsMCksUXAoMSxZTCw0LDIsIm5nLWNvbnRhaW5lciIsMSksQW0oKSxSbSgyLCJkaXYiLDIpLFFwKDMscUwsMiwxLCJidXR0b24iLDMpLFJtKDQsImJ1dHRvbiIsNCksVm0oImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uQ2xvc2VCdXR0b25DbGlja2VkKCl9KSksa3UoNSwiIERpc21pc3MgIiksQW0oKSxBbSgpKSwyJmUmJihyYygxKSxEbSgibmdGb3JPZiIsbi5zcGxpdEJ5VVJMKG4uYWxlcnQubG9jYWxpemVkTWVzc2FnZSkpLHJjKDIpLERtKCJuZ0lmIixuLmFsZXJ0LmZvbGxvd3VwQWN0aW9uKSl9LGRpcmVjdGl2ZXM6W2xNLGRNLFhIXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcH0ubWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7YWxpZ24tc2VsZjpjZW50ZXI7bWFyZ2luOjVweCAwO3dvcmQtYnJlYWs6YnJlYWstd29yZH0ubWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0gICBhW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0fS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO21hcmdpbi1sZWZ0OmF1dG99YnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFpMLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6ImFsZXJ0LWRpc3BsYXktc25hY2tiYXIiLHRlbXBsYXRlVXJsOiIuL2FsZXJ0X2Rpc3BsYXlfc25hY2tiYXJfY29udGFpbmVyLm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vYWxlcnRfZGlzcGxheV9zbmFja2Jhcl9jb250YWluZXIuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkFMfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbRExdfV19LHt0eXBlOkl3fV19KSxudWxsKTtjbGFzcyBYTHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3RvcmU9dCx0aGlzLnNuYWNrQmFyPWUsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJfW5nT25Jbml0KCl7dGhpcy5zdG9yZS5zZWxlY3QoZEEpLnBpcGUoSWUodGhpcy5uZ1Vuc3Vic2NyaWJlKSxjZSgodD0+Qm9vbGVhbih0KSkpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLnNob3dBbGVydCh0KX0pKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9c2hvd0FsZXJ0KHQpe3RoaXMuc25hY2tCYXIub3BlbkZyb21Db21wb25lbnQoWkwse2R1cmF0aW9uOjVlMyxob3Jpem9udGFsUG9zaXRpb246InN0YXJ0Iix2ZXJ0aWNhbFBvc2l0aW9uOiJib3R0b20iLGRhdGE6dH0pfX1YTC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WEwpKFNtKEl3KSxTbShMTCkpfSxYTC7JtWNtcD10byh7dHlwZTpYTCxzZWxlY3RvcnM6W1siYWxlcnQtc25hY2tiYXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChYTCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJhbGVydC1zbmFja2JhciIsdGVtcGxhdGU6IiIsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fSx7dHlwZTpMTH1dfSksbnVsbCk7Y2xhc3MgS0x7fUtMLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxLTCl9LEtMLsm1bW9kPWFvKHt0eXBlOktMfSksS0wuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxKSCxJTF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChLTCxbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbWEwsWkxdLGV4cG9ydHM6W1hMXSxpbXBvcnRzOltXTSxKSCxJTF0sZW50cnlDb21wb25lbnRzOltaTF19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhLTCx7ZGVjbGFyYXRpb25zOltYTCxaTF0saW1wb3J0czpbV00sSkgsSUxdLGV4cG9ydHM6W1hMXX0pO2NsYXNzIEpMe31KTC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SkwpfSxKTC7JtW1vZD1hbyh7dHlwZTpKTH0pLEpMLsm1aW5qPXZuKHtpbXBvcnRzOltbQVIsS0wsZGsuZm9yRmVhdHVyZShjQSxweiksV2suZm9yRmVhdHVyZShbY3pdKV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChKTCxbe3R5cGU6QXksYXJnczpbe2ltcG9ydHM6W0FSLEtMLGRrLmZvckZlYXR1cmUoY0EscHopLFdrLmZvckZlYXR1cmUoW2N6XSldfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oSkwse2ltcG9ydHM6W0FSLEtMLGNrLEdrXX0pO2NvbnN0IFFMPVsiKiIsW1sibWF0LXRvb2xiYXItcm93Il1dXSwkTD1KSShjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9lbGVtZW50UmVmPXR9fSk7Y2xhc3MgdEJ7fXRCLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx0Qil9LHRCLsm1ZGlyPWxvKHt0eXBlOnRCLHNlbGVjdG9yczpbWyJtYXQtdG9vbGJhci1yb3ciXV0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbGJhci1yb3ciXSxleHBvcnRBczpbIm1hdFRvb2xiYXJSb3ciXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgodEIsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoibWF0LXRvb2xiYXItcm93IixleHBvcnRBczoibWF0VG9vbGJhclJvdyIsaG9zdDp7Y2xhc3M6Im1hdC10b29sYmFyLXJvdyJ9fV19XSxudWxsLG51bGwpO2NsYXNzIGVCIGV4dGVuZHMgJEx7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHQpLHRoaXMuX3BsYXRmb3JtPWUsdGhpcy5fZG9jdW1lbnQ9bn1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJih0aGlzLl9jaGVja1Rvb2xiYXJNaXhlZE1vZGVzKCksdGhpcy5fdG9vbGJhclJvd3MuY2hhbmdlcy5zdWJzY3JpYmUoKCgpPT50aGlzLl9jaGVja1Rvb2xiYXJNaXhlZE1vZGVzKCkpKSl9X2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKXt0aGlzLl90b29sYmFyUm93cy5sZW5ndGgmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmQXJyYXkuZnJvbSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGROb2RlcykuZmlsdGVyKCh0PT4hKHQuY2xhc3NMaXN0JiZ0LmNsYXNzTGlzdC5jb250YWlucygibWF0LXRvb2xiYXItcm93IikpKSkuZmlsdGVyKCh0PT50Lm5vZGVUeXBlIT09KHRoaXMuX2RvY3VtZW50P3RoaXMuX2RvY3VtZW50LkNPTU1FTlRfTk9ERTo4KSkpLnNvbWUoKHQ9PiEoIXQudGV4dENvbnRlbnR8fCF0LnRleHRDb250ZW50LnRyaW0oKSkpKSYmKGZ1bmN0aW9uIHQoKXt0aHJvdyBFcnJvcigiTWF0VG9vbGJhcjogQXR0ZW1wdGluZyB0byBjb21iaW5lIGRpZmZlcmVudCB0b29sYmFyIG1vZGVzLiBFaXRoZXIgc3BlY2lmeSBtdWx0aXBsZSBgPG1hdC10b29sYmFyLXJvdz5gIGVsZW1lbnRzIGV4cGxpY2l0bHkgb3IganVzdCBwbGFjZSBjb250ZW50IGluc2lkZSBvZiBhIGA8bWF0LXRvb2xiYXI+YCBmb3IgYSBzaW5nbGUgcm93LiIpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKCl9fWVCLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxlQikoU20oaGcpLFNtKHd6KSxTbShaXykpfSxlQi7JtWNtcD10byh7dHlwZTplQixzZWxlY3RvcnM6W1sibWF0LXRvb2xiYXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYkaChvLHRCLDUpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4uX3Rvb2xiYXJSb3dzPXQpfX0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbGJhciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJnB1KCJtYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dzIixuLl90b29sYmFyUm93cy5sZW5ndGg+MCkoIm1hdC10b29sYmFyLXNpbmdsZS1yb3ciLDA9PT1uLl90b29sYmFyUm93cy5sZW5ndGgpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciJ9LGV4cG9ydEFzOlsibWF0VG9vbGJhciJdLGZlYXR1cmVzOlt4cF0sbmdDb250ZW50U2VsZWN0b3JzOlsiKiIsIm1hdC10b29sYmFyLXJvdyJdLGRlY2xzOjIsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihabShRTCksWG0oMCksWG0oMSwxKSl9LHN0eWxlczpbIi5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10b29sYmFye291dGxpbmU6c29saWQgMXB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTZweDt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCV9XG4iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxlQi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTp3en0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfV0sZUIucHJvcERlY29yYXRvcnM9e190b29sYmFyUm93czpbe3R5cGU6WWEsYXJnczpbdEIse2Rlc2NlbmRhbnRzOiEwfV19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChlQixbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJtYXQtdG9vbGJhciIsZXhwb3J0QXM6Im1hdFRvb2xiYXIiLHRlbXBsYXRlOic8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48bmctY29udGVudCBzZWxlY3Q9Im1hdC10b29sYmFyLXJvdyI+PC9uZy1jb250ZW50PlxuJyxpbnB1dHM6WyJjb2xvciJdLGhvc3Q6e2NsYXNzOiJtYXQtdG9vbGJhciIsIltjbGFzcy5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dzXSI6Il90b29sYmFyUm93cy5sZW5ndGggPiAwIiwiW2NsYXNzLm1hdC10b29sYmFyLXNpbmdsZS1yb3ddIjoiX3Rvb2xiYXJSb3dzLmxlbmd0aCA9PT0gMCJ9LGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2gsZW5jYXBzdWxhdGlvbjpIbi5Ob25lLHN0eWxlczpbIi5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10b29sYmFye291dGxpbmU6c29saWQgMXB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTZweDt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCV9XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfSx7dHlwZTp3en0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfV19KSx7X3Rvb2xiYXJSb3dzOlt7dHlwZTpZYSxhcmdzOlt0Qix7ZGVzY2VuZGFudHM6ITB9XX1dfSk7Y2xhc3MgbkJ7fWZ1bmN0aW9uIG9CKHQsZSl7MSZ0JiZYbSgwKX1uQi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bkIpfSxuQi7JtW1vZD1hbyh7dHlwZTpuQn0pLG5CLsm1aW5qPXZuKHtpbXBvcnRzOltbWEldLFhJXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgobkIsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltYSV0sZXhwb3J0czpbZUIsdEIsWEldLGRlY2xhcmF0aW9uczpbZUIsdEJdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8obkIse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltlQix0Ql19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bWEldfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW2VCLHRCLFhJXX19KTtjb25zdCBpQj1bIioiXTtmdW5jdGlvbiBhQih0LGUpe31jb25zdCByQj1mdW5jdGlvbih0KXtyZXR1cm57YW5pbWF0aW9uRHVyYXRpb246dH19LHNCPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3ZhbHVlOnQscGFyYW1zOmV9fSxsQj1bInRhYkJvZHlXcmFwcGVyIl0sY0I9WyJ0YWJIZWFkZXIiXTtmdW5jdGlvbiBkQih0LGUpe31mdW5jdGlvbiBwQih0LGUpezEmdCYmUXAoMCxkQiwwLDAsIm5nLXRlbXBsYXRlIiw5KSwyJnQmJkRtKCJjZGtQb3J0YWxPdXRsZXQiLFltKCkuJGltcGxpY2l0LnRlbXBsYXRlTGFiZWwpfWZ1bmN0aW9uIG1CKHQsZSl7MSZ0JiZrdSgwKSwyJnQmJlN1KFltKCkuJGltcGxpY2l0LnRleHRMYWJlbCl9ZnVuY3Rpb24gdUIodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJkaXYiLDYpLFZtKCJjbGljayIsKGZ1bmN0aW9uIGUoKXtjb25zdCBuPWhpKHQpLG89bi4kaW1wbGljaXQsaT1uLmluZGV4LGE9WW0oKSxyPSRwKDEpO3JldHVybiBhLl9oYW5kbGVDbGljayhvLHIsaSl9KSkoImNka0ZvY3VzQ2hhbmdlIiwoZnVuY3Rpb24gZShuKXtjb25zdCBvPWhpKHQpLmluZGV4O3JldHVybiBZbSgpLl90YWJGb2N1c0NoYW5nZWQobixvKX0pKSxSbSgxLCJkaXYiLDcpLFFwKDIscEIsMSwxLCJuZy10ZW1wbGF0ZSIsOCksUXAoMyxtQiwxLDEsIm5nLXRlbXBsYXRlIiw4KSxBbSgpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49ZS5pbmRleCxvPVltKCk7cHUoIm1hdC10YWItbGFiZWwtYWN0aXZlIixvLnNlbGVjdGVkSW5kZXg9PW4pLERtKCJpZCIsby5fZ2V0VGFiTGFiZWxJZChuKSkoImRpc2FibGVkIix0LmRpc2FibGVkKSgibWF0UmlwcGxlRGlzYWJsZWQiLHQuZGlzYWJsZWR8fG8uZGlzYWJsZVJpcHBsZSksanAoInRhYkluZGV4IixvLl9nZXRUYWJJbmRleCh0LG4pKSgiYXJpYS1wb3NpbnNldCIsbisxKSgiYXJpYS1zZXRzaXplIixvLl90YWJzLmxlbmd0aCkoImFyaWEtY29udHJvbHMiLG8uX2dldFRhYkNvbnRlbnRJZChuKSkoImFyaWEtc2VsZWN0ZWQiLG8uc2VsZWN0ZWRJbmRleD09bikoImFyaWEtbGFiZWwiLHQuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IiwhdC5hcmlhTGFiZWwmJnQuYXJpYUxhYmVsbGVkYnk/dC5hcmlhTGFiZWxsZWRieTpudWxsKSxyYygyKSxEbSgibmdJZiIsdC50ZW1wbGF0ZUxhYmVsKSxyYygxKSxEbSgibmdJZiIsIXQudGVtcGxhdGVMYWJlbCl9fWZ1bmN0aW9uIGZCKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwibWF0LXRhYi1ib2R5IiwxMCksVm0oIl9vbkNlbnRlcmVkIiwoZnVuY3Rpb24gZSgpe3JldHVybiBoaSh0KSxZbSgpLl9yZW1vdmVUYWJCb2R5V3JhcHBlckhlaWdodCgpfSkpKCJfb25DZW50ZXJpbmciLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLl9zZXRUYWJCb2R5V3JhcHBlckhlaWdodChuKX0pKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPWUuaW5kZXgsbz1ZbSgpO3B1KCJtYXQtdGFiLWJvZHktYWN0aXZlIixvLnNlbGVjdGVkSW5kZXg9PT1uKSxEbSgiaWQiLG8uX2dldFRhYkNvbnRlbnRJZChuKSkoImNvbnRlbnQiLHQuY29udGVudCkoInBvc2l0aW9uIix0LnBvc2l0aW9uKSgib3JpZ2luIix0Lm9yaWdpbikoImFuaW1hdGlvbkR1cmF0aW9uIixvLmFuaW1hdGlvbkR1cmF0aW9uKSxqcCgidGFiaW5kZXgiLG51bGwhPW8uY29udGVudFRhYkluZGV4JiZvLnNlbGVjdGVkSW5kZXg9PT1uP28uY29udGVudFRhYkluZGV4Om51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLG8uX2dldFRhYkxhYmVsSWQobikpfX1jb25zdCBnQj1bInRhYkxpc3RDb250YWluZXIiXSxoQj1bInRhYkxpc3QiXSxiQj1bIm5leHRQYWdpbmF0b3IiXSx5Qj1bInByZXZpb3VzUGFnaW5hdG9yIl0sX0I9bmV3IEdhKCJNYXRJbmtCYXJQb3NpdGlvbmVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBDQigpe3JldHVybiB0PT4oe2xlZnQ6dD8odC5vZmZzZXRMZWZ0fHwwKSsicHgiOiIwIix3aWR0aDp0Pyh0Lm9mZnNldFdpZHRofHwwKSsicHgiOiIwIn0pfX0pO2NsYXNzIE1Ce2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9pbmtCYXJQb3NpdGlvbmVyPW4sdGhpcy5fYW5pbWF0aW9uTW9kZT1vfWFsaWduVG9FbGVtZW50KHQpe3RoaXMuc2hvdygpLCJ1bmRlZmluZWQiIT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT50aGlzLl9zZXRTdHlsZXModCkpKX0pKTp0aGlzLl9zZXRTdHlsZXModCl9c2hvdygpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIn1oaWRlKCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiJ9X3NldFN0eWxlcyh0KXtjb25zdCBlPXRoaXMuX2lua0JhclBvc2l0aW9uZXIodCksbj10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7bi5zdHlsZS5sZWZ0PWUubGVmdCxuLnN0eWxlLndpZHRoPWUud2lkdGh9fU1CLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxNQikoU20oaGcpLFNtKGFfKSxTbShfQiksU20oVlAsOCkpfSxNQi7JtWRpcj1sbyh7dHlwZTpNQixzZWxlY3RvcnM6W1sibWF0LWluay1iYXIiXV0saG9zdEF0dHJzOlsxLCJtYXQtaW5rLWJhciJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJnB1KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PW4uX2FuaW1hdGlvbk1vZGUpfX0pLE1CLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6aGd9LHt0eXBlOmFffSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbX0JdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbVlBdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKE1CLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6Im1hdC1pbmstYmFyIixob3N0OntjbGFzczoibWF0LWluay1iYXIiLCJbY2xhc3MuX21hdC1hbmltYXRpb24tbm9vcGFibGVdIjoiX2FuaW1hdGlvbk1vZGUgPT09ICdOb29wQW5pbWF0aW9ucycifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfSx7dHlwZTphX30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W19CXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1ZQXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IHZCPW5ldyBHYSgiTWF0VGFiQ29udGVudCIpO2NsYXNzIHhCe2NvbnN0cnVjdG9yKHQpe3RoaXMudGVtcGxhdGU9dH19eEIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHhCKShTbShYZykpfSx4Qi7JtWRpcj1sbyh7dHlwZTp4QixzZWxlY3RvcnM6W1siIiwibWF0VGFiQ29udGVudCIsIiJdXSxmZWF0dXJlczpbcGcoW3twcm92aWRlOnZCLHVzZUV4aXN0aW5nOnhCfV0pXX0pLHhCLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WGd9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHhCLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6IlttYXRUYWJDb250ZW50XSIscHJvdmlkZXJzOlt7cHJvdmlkZTp2Qix1c2VFeGlzdGluZzp4Qn1dfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WGd9XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgT0I9bmV3IEdhKCJNYXRUYWJMYWJlbCIpO2NsYXNzIFBCIGV4dGVuZHMga0Z7fVBCLsm1ZmFjPShmdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbiBlKG4pe3JldHVybih0fHwodD1BYShQQikpKShufHxQQil9fSkoKSxQQi7JtWRpcj1sbyh7dHlwZTpQQixzZWxlY3RvcnM6W1siIiwibWF0LXRhYi1sYWJlbCIsIiJdLFsiIiwibWF0VGFiTGFiZWwiLCIiXV0sZmVhdHVyZXM6W3BnKFt7cHJvdmlkZTpPQix1c2VFeGlzdGluZzpQQn1dKSx4cF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFBCLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6IlttYXQtdGFiLWxhYmVsXSwgW21hdFRhYkxhYmVsXSIscHJvdmlkZXJzOlt7cHJvdmlkZTpPQix1c2VFeGlzdGluZzpQQn1dfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3Qgd0I9S0koY2xhc3N7fSksa0I9bmV3IEdhKCJNQVRfVEFCX0dST1VQIik7Y2xhc3MgU0IgZXh0ZW5kcyB3Qntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5fdmlld0NvbnRhaW5lclJlZj10LHRoaXMuX2Nsb3Nlc3RUYWJHcm91cD1lLHRoaXMudGV4dExhYmVsPSIiLHRoaXMuX2NvbnRlbnRQb3J0YWw9bnVsbCx0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IEksdGhpcy5wb3NpdGlvbj1udWxsLHRoaXMub3JpZ2luPW51bGwsdGhpcy5pc0FjdGl2ZT0hMX1nZXQgdGVtcGxhdGVMYWJlbCgpe3JldHVybiB0aGlzLl90ZW1wbGF0ZUxhYmVsfXNldCB0ZW1wbGF0ZUxhYmVsKHQpe3RoaXMuX3NldFRlbXBsYXRlTGFiZWxJbnB1dCh0KX1nZXQgY29udGVudCgpe3JldHVybiB0aGlzLl9jb250ZW50UG9ydGFsfW5nT25DaGFuZ2VzKHQpeyh0Lmhhc093blByb3BlcnR5KCJ0ZXh0TGFiZWwiKXx8dC5oYXNPd25Qcm9wZXJ0eSgiZGlzYWJsZWQiKSkmJnRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX1uZ09uSW5pdCgpe3RoaXMuX2NvbnRlbnRQb3J0YWw9bmV3IHhGKHRoaXMuX2V4cGxpY2l0Q29udGVudHx8dGhpcy5faW1wbGljaXRDb250ZW50LHRoaXMuX3ZpZXdDb250YWluZXJSZWYpfV9zZXRUZW1wbGF0ZUxhYmVsSW5wdXQodCl7dCYmKHRoaXMuX3RlbXBsYXRlTGFiZWw9dCl9fVNCLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxTQikoU20oZWgpLFNtKGtCLDgpKX0sU0IuybVjbXA9dG8oe3R5cGU6U0Isc2VsZWN0b3JzOltbIm1hdC10YWIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYoJGgobyxPQiw1KSwkaChvLHZCLDcsWGcpKSwyJmUpe2xldCB0O0poKHQ9dGIoKSkmJihuLnRlbXBsYXRlTGFiZWw9dC5maXJzdCksSmgodD10YigpKSYmKG4uX2V4cGxpY2l0Q29udGVudD10LmZpcnN0KX19LHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiZRaChYZyw3KSwyJmUpe2xldCB0O0poKHQ9dGIoKSkmJihuLl9pbXBsaWNpdENvbnRlbnQ9dC5maXJzdCl9fSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsdGV4dExhYmVsOlsibGFiZWwiLCJ0ZXh0TGFiZWwiXSxhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdfSxleHBvcnRBczpbIm1hdFRhYiJdLGZlYXR1cmVzOlt4cCxCb10sbmdDb250ZW50U2VsZWN0b3JzOmlCLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihabSgpLFFwKDAsb0IsMSwwLCJuZy10ZW1wbGF0ZSIpKX0sZW5jYXBzdWxhdGlvbjoyfSksU0IuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTplaH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W2tCXX0se3R5cGU6U3J9XX1dLFNCLnByb3BEZWNvcmF0b3JzPXt0ZW1wbGF0ZUxhYmVsOlt7dHlwZTpxYSxhcmdzOltPQl19XSxfZXhwbGljaXRDb250ZW50Olt7dHlwZTpxYSxhcmdzOlt2Qix7cmVhZDpYZyxzdGF0aWM6ITB9XX1dLF9pbXBsaWNpdENvbnRlbnQ6W3t0eXBlOlphLGFyZ3M6W1hnLHtzdGF0aWM6ITB9XX1dLHRleHRMYWJlbDpbe3R5cGU6eHksYXJnczpbImxhYmVsIl19XSxhcmlhTGFiZWw6W3t0eXBlOnh5LGFyZ3M6WyJhcmlhLWxhYmVsIl19XSxhcmlhTGFiZWxsZWRieTpbe3R5cGU6eHksYXJnczpbImFyaWEtbGFiZWxsZWRieSJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoU0IsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWF0LXRhYiIsdGVtcGxhdGU6Ilx4M2MhLS0gQ3JlYXRlIGEgdGVtcGxhdGUgZm9yIHRoZSBjb250ZW50IG9mIHRoZSA8bWF0LXRhYj4gc28gdGhhdCB3ZSBjYW4gZ3JhYiBhIHJlZmVyZW5jZSB0byB0aGlzXG4gICAgVGVtcGxhdGVSZWYgYW5kIHVzZSBpdCBpbiBhIFBvcnRhbCB0byByZW5kZXIgdGhlIHRhYiBjb250ZW50IGluIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbiB0aGVcbiAgICB0YWItZ3JvdXAuIC0tXHgzZVxuPG5nLXRlbXBsYXRlPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPlxuIixpbnB1dHM6WyJkaXNhYmxlZCJdLGNoYW5nZURldGVjdGlvbjp6bi5EZWZhdWx0LGVuY2Fwc3VsYXRpb246SG4uTm9uZSxleHBvcnRBczoibWF0VGFiIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmVofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpba0JdfSx7dHlwZTpTcn1dfV19KSx7dGV4dExhYmVsOlt7dHlwZTp4eSxhcmdzOlsibGFiZWwiXX1dLHRlbXBsYXRlTGFiZWw6W3t0eXBlOnFhLGFyZ3M6W09CXX1dLF9leHBsaWNpdENvbnRlbnQ6W3t0eXBlOnFhLGFyZ3M6W3ZCLHtyZWFkOlhnLHN0YXRpYzohMH1dfV0sX2ltcGxpY2l0Q29udGVudDpbe3R5cGU6WmEsYXJnczpbWGcse3N0YXRpYzohMH1dfV0sYXJpYUxhYmVsOlt7dHlwZTp4eSxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sYXJpYUxhYmVsbGVkYnk6W3t0eXBlOnh5LGFyZ3M6WyJhcmlhLWxhYmVsbGVkYnkiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBEQj17dHJhbnNsYXRlVGFiOm54KCJ0cmFuc2xhdGVUYWIiLFtyeCgiY2VudGVyLCB2b2lkLCBsZWZ0LW9yaWdpbi1jZW50ZXIsIHJpZ2h0LW9yaWdpbi1jZW50ZXIiLGF4KHt0cmFuc2Zvcm06Im5vbmUifSkpLHJ4KCJsZWZ0IixheCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCkiLG1pbkhlaWdodDoiMXB4In0pKSxyeCgicmlnaHQiLGF4KHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIixtaW5IZWlnaHQ6IjFweCJ9KSksbHgoIiogPT4gbGVmdCwgKiA9PiByaWdodCwgbGVmdCA9PiBjZW50ZXIsIHJpZ2h0ID0+IGNlbnRlciIsb3goInt7YW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSkiKSksbHgoInZvaWQgPT4gbGVmdC1vcmlnaW4tY2VudGVyIixbYXgoe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApIn0pLG94KCJ7e2FuaW1hdGlvbkR1cmF0aW9ufX0gY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpIildKSxseCgidm9pZCA9PiByaWdodC1vcmlnaW4tY2VudGVyIixbYXgoe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoMTAwJSwgMCwgMCkifSksb3goInt7YW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSkiKV0pXSl9OwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBFQiBleHRlbmRzIERGe2NvbnN0cnVjdG9yKHQsZSxuLG8pe3N1cGVyKHQsZSxvKSx0aGlzLl9ob3N0PW4sdGhpcy5fY2VudGVyaW5nU3ViPW0uRU1QVFksdGhpcy5fbGVhdmluZ1N1Yj1tLkVNUFRZfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLl9jZW50ZXJpbmdTdWI9dGhpcy5faG9zdC5fYmVmb3JlQ2VudGVyaW5nLnBpcGUoTmUodGhpcy5faG9zdC5faXNDZW50ZXJQb3NpdGlvbih0aGlzLl9ob3N0Ll9wb3NpdGlvbikpKS5zdWJzY3JpYmUoKHQ9Pnt0JiYhdGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmF0dGFjaCh0aGlzLl9ob3N0Ll9jb250ZW50KX0pKSx0aGlzLl9sZWF2aW5nU3ViPXRoaXMuX2hvc3QuX2FmdGVyTGVhdmluZ0NlbnRlci5zdWJzY3JpYmUoKCgpPT57dGhpcy5kZXRhY2goKX0pKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5fY2VudGVyaW5nU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fbGVhdmluZ1N1Yi51bnN1YnNjcmliZSgpfX1FQi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RUIpKFNtKHVnKSxTbShlaCksU20ocWUoKCgpPT5BQikpKSxTbShaXykpfSxFQi7JtWRpcj1sbyh7dHlwZTpFQixzZWxlY3RvcnM6W1siIiwibWF0VGFiQm9keUhvc3QiLCIiXV0sZmVhdHVyZXM6W3hwXX0pLEVCLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dWd9LHt0eXBlOmVofSx7dHlwZTpBQixkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltxZSgoKCk9PkFCKSldfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoRUIsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW21hdFRhYkJvZHlIb3N0XSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp1Z30se3R5cGU6ZWh9LHt0eXBlOkFCLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W3FlKCgoKT0+QUIpKV19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfV19KSxudWxsKTtjbGFzcyBSQntjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2Rpcj1lLHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj1tLkVNUFRZLHRoaXMuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlPW5ldyBJLHRoaXMuX29uQ2VudGVyaW5nPW5ldyBMaCx0aGlzLl9iZWZvcmVDZW50ZXJpbmc9bmV3IExoLHRoaXMuX2FmdGVyTGVhdmluZ0NlbnRlcj1uZXcgTGgsdGhpcy5fb25DZW50ZXJlZD1uZXcgTGgoITApLHRoaXMuYW5pbWF0aW9uRHVyYXRpb249IjUwMG1zIixlJiYodGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uPWUuY2hhbmdlLnN1YnNjcmliZSgodD0+e3RoaXMuX2NvbXB1dGVQb3NpdGlvbkFuaW1hdGlvblN0YXRlKHQpLG4ubWFya0ZvckNoZWNrKCl9KSkpLHRoaXMuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLnBpcGUoTWUoKCh0LGUpPT50LmZyb21TdGF0ZT09PWUuZnJvbVN0YXRlJiZ0LnRvU3RhdGU9PT1lLnRvU3RhdGUpKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5faXNDZW50ZXJQb3NpdGlvbih0LnRvU3RhdGUpJiZ0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fb25DZW50ZXJlZC5lbWl0KCksdGhpcy5faXNDZW50ZXJQb3NpdGlvbih0LmZyb21TdGF0ZSkmJiF0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fYWZ0ZXJMZWF2aW5nQ2VudGVyLmVtaXQoKX0pKX1zZXQgcG9zaXRpb24odCl7dGhpcy5fcG9zaXRpb25JbmRleD10LHRoaXMuX2NvbXB1dGVQb3NpdGlvbkFuaW1hdGlvblN0YXRlKCl9bmdPbkluaXQoKXsiY2VudGVyIj09dGhpcy5fcG9zaXRpb24mJm51bGwhPXRoaXMub3JpZ2luJiYodGhpcy5fcG9zaXRpb249dGhpcy5fY29tcHV0ZVBvc2l0aW9uRnJvbU9yaWdpbih0aGlzLm9yaWdpbikpfW5nT25EZXN0cm95KCl7dGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdHJhbnNsYXRlVGFiQ29tcGxldGUuY29tcGxldGUoKX1fb25UcmFuc2xhdGVUYWJTdGFydGVkKHQpe2NvbnN0IGU9dGhpcy5faXNDZW50ZXJQb3NpdGlvbih0LnRvU3RhdGUpO3RoaXMuX2JlZm9yZUNlbnRlcmluZy5lbWl0KGUpLGUmJnRoaXMuX29uQ2VudGVyaW5nLmVtaXQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCl9X2dldExheW91dERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifV9pc0NlbnRlclBvc2l0aW9uKHQpe3JldHVybiJjZW50ZXIiPT10fHwibGVmdC1vcmlnaW4tY2VudGVyIj09dHx8InJpZ2h0LW9yaWdpbi1jZW50ZXIiPT10fV9jb21wdXRlUG9zaXRpb25BbmltYXRpb25TdGF0ZSh0PXRoaXMuX2dldExheW91dERpcmVjdGlvbigpKXt0aGlzLl9wb3NpdGlvbj10aGlzLl9wb3NpdGlvbkluZGV4PDA/Imx0ciI9PXQ/ImxlZnQiOiJyaWdodCI6dGhpcy5fcG9zaXRpb25JbmRleD4wPyJsdHIiPT10PyJyaWdodCI6ImxlZnQiOiJjZW50ZXIifV9jb21wdXRlUG9zaXRpb25Gcm9tT3JpZ2luKHQpe2NvbnN0IGU9dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk7cmV0dXJuImx0ciI9PWUmJnQ8PTB8fCJydGwiPT1lJiZ0PjA/ImxlZnQtb3JpZ2luLWNlbnRlciI6InJpZ2h0LW9yaWdpbi1jZW50ZXIifX1SQi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UkIpKFNtKGhnKSxTbShISSw4KSxTbShVZykpfSxSQi7JtWRpcj1sbyh7dHlwZTpSQixpbnB1dHM6e2FuaW1hdGlvbkR1cmF0aW9uOiJhbmltYXRpb25EdXJhdGlvbiIscG9zaXRpb246InBvc2l0aW9uIixfY29udGVudDpbImNvbnRlbnQiLCJfY29udGVudCJdLG9yaWdpbjoib3JpZ2luIn0sb3V0cHV0czp7X29uQ2VudGVyaW5nOiJfb25DZW50ZXJpbmciLF9iZWZvcmVDZW50ZXJpbmc6Il9iZWZvcmVDZW50ZXJpbmciLF9hZnRlckxlYXZpbmdDZW50ZXI6Il9hZnRlckxlYXZpbmdDZW50ZXIiLF9vbkNlbnRlcmVkOiJfb25DZW50ZXJlZCJ9fSksUkIuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpoZ30se3R5cGU6SEksZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6VWd9XSxSQi5wcm9wRGVjb3JhdG9ycz17X29uQ2VudGVyaW5nOlt7dHlwZTpPeX1dLF9iZWZvcmVDZW50ZXJpbmc6W3t0eXBlOk95fV0sX2FmdGVyTGVhdmluZ0NlbnRlcjpbe3R5cGU6T3l9XSxfb25DZW50ZXJlZDpbe3R5cGU6T3l9XSxfY29udGVudDpbe3R5cGU6eHksYXJnczpbImNvbnRlbnQiXX1dLG9yaWdpbjpbe3R5cGU6eHl9XSxhbmltYXRpb25EdXJhdGlvbjpbe3R5cGU6eHl9XSxwb3NpdGlvbjpbe3R5cGU6eHl9XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChSQixbe3R5cGU6Q3l9XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9LHt0eXBlOkhJLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOlVnfV19KSx7X29uQ2VudGVyaW5nOlt7dHlwZTpPeX1dLF9iZWZvcmVDZW50ZXJpbmc6W3t0eXBlOk95fV0sX2FmdGVyTGVhdmluZ0NlbnRlcjpbe3R5cGU6T3l9XSxfb25DZW50ZXJlZDpbe3R5cGU6T3l9XSxhbmltYXRpb25EdXJhdGlvbjpbe3R5cGU6eHl9XSxwb3NpdGlvbjpbe3R5cGU6eHl9XSxfY29udGVudDpbe3R5cGU6eHksYXJnczpbImNvbnRlbnQiXX1dLG9yaWdpbjpbe3R5cGU6eHl9XX0pO2NsYXNzIEFCIGV4dGVuZHMgUkJ7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHQsZSxuKX19QUIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEFCKShTbShoZyksU20oSEksOCksU20oVWcpKX0sQUIuybVjbXA9dG8oe3R5cGU6QUIsc2VsZWN0b3JzOltbIm1hdC10YWItYm9keSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmUWgoREYsNSksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi5fcG9ydGFsSG9zdD10LmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LXRhYi1ib2R5Il0sZmVhdHVyZXM6W3hwXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1siY2RrU2Nyb2xsYWJsZSIsIiIsMSwibWF0LXRhYi1ib2R5LWNvbnRlbnQiXSxbImNvbnRlbnQiLCIiXSxbIm1hdFRhYkJvZHlIb3N0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJkaXYiLDAsMSksVm0oIkB0cmFuc2xhdGVUYWIuc3RhcnQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9vblRyYW5zbGF0ZVRhYlN0YXJ0ZWQoZSl9KSkoIkB0cmFuc2xhdGVUYWIuZG9uZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLm5leHQoZSl9KSksUXAoMixhQiwwLDAsIm5nLXRlbXBsYXRlIiwyKSxBbSgpKSwyJmUmJkRtKCJAdHJhbnNsYXRlVGFiIix2aCgzLHNCLG4uX3Bvc2l0aW9uLE1oKDEsckIsbi5hbmltYXRpb25EdXJhdGlvbikpKX0sZGlyZWN0aXZlczpbRUJdLHN0eWxlczpbIi5tYXQtdGFiLWJvZHktY29udGVudHtoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfS5tYXQtdGFiLWdyb3VwLWR5bmFtaWMtaGVpZ2h0IC5tYXQtdGFiLWJvZHktY29udGVudHtvdmVyZmxvdzpoaWRkZW59XG4iXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltEQi50cmFuc2xhdGVUYWJdfX0pLEFCLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6aGd9LHt0eXBlOkhJLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOlVnfV0sQUIucHJvcERlY29yYXRvcnM9e19wb3J0YWxIb3N0Olt7dHlwZTpaYSxhcmdzOltERl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChBQixbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJtYXQtdGFiLWJvZHkiLHRlbXBsYXRlOic8ZGl2IGNsYXNzPSJtYXQtdGFiLWJvZHktY29udGVudCIgI2NvbnRlbnRcbiAgICAgW0B0cmFuc2xhdGVUYWJdPSJ7XG4gICAgICAgIHZhbHVlOiBfcG9zaXRpb24sXG4gICAgICAgIHBhcmFtczoge2FuaW1hdGlvbkR1cmF0aW9uOiBhbmltYXRpb25EdXJhdGlvbn1cbiAgICAgfSJcbiAgICAgKEB0cmFuc2xhdGVUYWIuc3RhcnQpPSJfb25UcmFuc2xhdGVUYWJTdGFydGVkKCRldmVudCkiXG4gICAgIChAdHJhbnNsYXRlVGFiLmRvbmUpPSJfdHJhbnNsYXRlVGFiQ29tcGxldGUubmV4dCgkZXZlbnQpIlxuICAgICBjZGtTY3JvbGxhYmxlPlxuICA8bmctdGVtcGxhdGUgbWF0VGFiQm9keUhvc3Q+PC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuJyxlbmNhcHN1bGF0aW9uOkhuLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnpuLkRlZmF1bHQsYW5pbWF0aW9uczpbREIudHJhbnNsYXRlVGFiXSxob3N0OntjbGFzczoibWF0LXRhYi1ib2R5In0sc3R5bGVzOlsiLm1hdC10YWItYm9keS1jb250ZW50e2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99Lm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQgLm1hdC10YWItYm9keS1jb250ZW50e292ZXJmbG93OmhpZGRlbn1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9LHt0eXBlOkhJLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOlVnfV19KSx7X3BvcnRhbEhvc3Q6W3t0eXBlOlphLGFyZ3M6W0RGXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBUQj1uZXcgR2EoIk1BVF9UQUJTX0NPTkZJRyIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9sZXQgTkI9MDtjbGFzcyB6Qnt9Y29uc3QgSUI9SkkoUUkoY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZWxlbWVudFJlZj10fX0pLCJwcmltYXJ5Iik7Y2xhc3MgSEIgZXh0ZW5kcyBJQntjb25zdHJ1Y3Rvcih0LGUsbixvKXt2YXIgaTtzdXBlcih0KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1lLHRoaXMuX2FuaW1hdGlvbk1vZGU9byx0aGlzLl90YWJzPW5ldyBWaCx0aGlzLl9pbmRleFRvU2VsZWN0PTAsdGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQ9MCx0aGlzLl90YWJzU3Vic2NyaXB0aW9uPW0uRU1QVFksdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb249bS5FTVBUWSx0aGlzLl9zZWxlY3RlZEluZGV4PW51bGwsdGhpcy5oZWFkZXJQb3NpdGlvbj0iYWJvdmUiLHRoaXMuc2VsZWN0ZWRJbmRleENoYW5nZT1uZXcgTGgsdGhpcy5mb2N1c0NoYW5nZT1uZXcgTGgsdGhpcy5hbmltYXRpb25Eb25lPW5ldyBMaCx0aGlzLnNlbGVjdGVkVGFiQ2hhbmdlPW5ldyBMaCghMCksdGhpcy5fZ3JvdXBJZD1OQisrLHRoaXMuYW5pbWF0aW9uRHVyYXRpb249biYmbi5hbmltYXRpb25EdXJhdGlvbj9uLmFuaW1hdGlvbkR1cmF0aW9uOiI1MDBtcyIsdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hKCFufHxudWxsPT1uLmRpc2FibGVQYWdpbmF0aW9uKSYmbi5kaXNhYmxlUGFnaW5hdGlvbix0aGlzLmR5bmFtaWNIZWlnaHQ9ISghbnx8bnVsbD09bi5keW5hbWljSGVpZ2h0KSYmbi5keW5hbWljSGVpZ2h0LHRoaXMuY29udGVudFRhYkluZGV4PW51bGwhPT0oaT1udWxsPT1uP3ZvaWQgMDpuLmNvbnRlbnRUYWJJbmRleCkmJnZvaWQgMCE9PWk/aTpudWxsfWdldCBkeW5hbWljSGVpZ2h0KCl7cmV0dXJuIHRoaXMuX2R5bmFtaWNIZWlnaHR9c2V0IGR5bmFtaWNIZWlnaHQodCl7dGhpcy5fZHluYW1pY0hlaWdodD15eih0KX1nZXQgc2VsZWN0ZWRJbmRleCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZEluZGV4fXNldCBzZWxlY3RlZEluZGV4KHQpe3RoaXMuX2luZGV4VG9TZWxlY3Q9X3oodCxudWxsKX1nZXQgYW5pbWF0aW9uRHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uRHVyYXRpb259c2V0IGFuaW1hdGlvbkR1cmF0aW9uKHQpe3RoaXMuX2FuaW1hdGlvbkR1cmF0aW9uPS9eXGQrJC8udGVzdCh0KT90KyJtcyI6dH1nZXQgY29udGVudFRhYkluZGV4KCl7cmV0dXJuIHRoaXMuX2NvbnRlbnRUYWJJbmRleH1zZXQgY29udGVudFRhYkluZGV4KHQpe3RoaXMuX2NvbnRlbnRUYWJJbmRleD1feih0LG51bGwpfWdldCBiYWNrZ3JvdW5kQ29sb3IoKXtyZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yfXNldCBiYWNrZ3JvdW5kQ29sb3IodCl7Y29uc3QgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7ZS5jbGFzc0xpc3QucmVtb3ZlKGBtYXQtYmFja2dyb3VuZC0ke3RoaXMuYmFja2dyb3VuZENvbG9yfWApLHQmJmUuY2xhc3NMaXN0LmFkZChgbWF0LWJhY2tncm91bmQtJHt0fWApLHRoaXMuX2JhY2tncm91bmRDb2xvcj10fW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe2NvbnN0IHQ9dGhpcy5faW5kZXhUb1NlbGVjdD10aGlzLl9jbGFtcFRhYkluZGV4KHRoaXMuX2luZGV4VG9TZWxlY3QpO2lmKHRoaXMuX3NlbGVjdGVkSW5kZXghPXQpe2NvbnN0IGU9bnVsbD09dGhpcy5fc2VsZWN0ZWRJbmRleDtpZighZSl7dGhpcy5zZWxlY3RlZFRhYkNoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KHQpKTtjb25zdCBlPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7ZS5zdHlsZS5taW5IZWlnaHQ9ZS5jbGllbnRIZWlnaHQrInB4In1Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e3RoaXMuX3RhYnMuZm9yRWFjaCgoKGUsbik9PmUuaXNBY3RpdmU9bj09PXQpKSxlfHwodGhpcy5zZWxlY3RlZEluZGV4Q2hhbmdlLmVtaXQodCksdGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudC5zdHlsZS5taW5IZWlnaHQ9IiIpfSkpfXRoaXMuX3RhYnMuZm9yRWFjaCgoKGUsbik9PntlLnBvc2l0aW9uPW4tdCxudWxsPT10aGlzLl9zZWxlY3RlZEluZGV4fHwwIT1lLnBvc2l0aW9ufHxlLm9yaWdpbnx8KGUub3JpZ2luPXQtdGhpcy5fc2VsZWN0ZWRJbmRleCl9KSksdGhpcy5fc2VsZWN0ZWRJbmRleCE9PXQmJih0aGlzLl9zZWxlY3RlZEluZGV4PXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX3N1YnNjcmliZVRvQWxsVGFiQ2hhbmdlcygpLHRoaXMuX3N1YnNjcmliZVRvVGFiTGFiZWxzKCksdGhpcy5fdGFic1N1YnNjcmlwdGlvbj10aGlzLl90YWJzLmNoYW5nZXMuc3Vic2NyaWJlKCgoKT0+e2lmKHRoaXMuX2NsYW1wVGFiSW5kZXgodGhpcy5faW5kZXhUb1NlbGVjdCk9PT10aGlzLl9zZWxlY3RlZEluZGV4KXtjb25zdCB0PXRoaXMuX3RhYnMudG9BcnJheSgpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKHRbZV0uaXNBY3RpdmUpe3RoaXMuX2luZGV4VG9TZWxlY3Q9dGhpcy5fc2VsZWN0ZWRJbmRleD1lO2JyZWFrfX10aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKX1fc3Vic2NyaWJlVG9BbGxUYWJDaGFuZ2VzKCl7dGhpcy5fYWxsVGFicy5jaGFuZ2VzLnBpcGUoTmUodGhpcy5fYWxsVGFicykpLnN1YnNjcmliZSgodD0+e3RoaXMuX3RhYnMucmVzZXQodC5maWx0ZXIoKHQ9PnQuX2Nsb3Nlc3RUYWJHcm91cD09PXRoaXN8fCF0Ll9jbG9zZXN0VGFiR3JvdXApKSksdGhpcy5fdGFicy5ub3RpZnlPbkNoYW5nZXMoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX3RhYnMuZGVzdHJveSgpLHRoaXMuX3RhYnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXJlYWxpZ25JbmtCYXIoKXt0aGlzLl90YWJIZWFkZXImJnRoaXMuX3RhYkhlYWRlci5fYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCl9Zm9jdXNUYWIodCl7Y29uc3QgZT10aGlzLl90YWJIZWFkZXI7ZSYmKGUuZm9jdXNJbmRleD10KX1fZm9jdXNDaGFuZ2VkKHQpe3RoaXMuZm9jdXNDaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudCh0KSl9X2NyZWF0ZUNoYW5nZUV2ZW50KHQpe2NvbnN0IGU9bmV3IHpCO3JldHVybiBlLmluZGV4PXQsdGhpcy5fdGFicyYmdGhpcy5fdGFicy5sZW5ndGgmJihlLnRhYj10aGlzLl90YWJzLnRvQXJyYXkoKVt0XSksZX1fc3Vic2NyaWJlVG9UYWJMYWJlbHMoKXt0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbiYmdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbj1yZSguLi50aGlzLl90YWJzLm1hcCgodD0+dC5fc3RhdGVDaGFuZ2VzKSkpLnN1YnNjcmliZSgoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSl9X2NsYW1wVGFiSW5kZXgodCl7cmV0dXJuIE1hdGgubWluKHRoaXMuX3RhYnMubGVuZ3RoLTEsTWF0aC5tYXgodHx8MCwwKSl9X2dldFRhYkxhYmVsSWQodCl7cmV0dXJuYG1hdC10YWItbGFiZWwtJHt0aGlzLl9ncm91cElkfS0ke3R9YH1fZ2V0VGFiQ29udGVudElkKHQpe3JldHVybmBtYXQtdGFiLWNvbnRlbnQtJHt0aGlzLl9ncm91cElkfS0ke3R9YH1fc2V0VGFiQm9keVdyYXBwZXJIZWlnaHQodCl7aWYoIXRoaXMuX2R5bmFtaWNIZWlnaHR8fCF0aGlzLl90YWJCb2R5V3JhcHBlckhlaWdodClyZXR1cm47Y29uc3QgZT10aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50O2Uuc3R5bGUuaGVpZ2h0PXRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0KyJweCIsdGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQmJihlLnN0eWxlLmhlaWdodD10KyJweCIpfV9yZW1vdmVUYWJCb2R5V3JhcHBlckhlaWdodCgpe2NvbnN0IHQ9dGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudDt0aGlzLl90YWJCb2R5V3JhcHBlckhlaWdodD10LmNsaWVudEhlaWdodCx0LnN0eWxlLmhlaWdodD0iIix0aGlzLmFuaW1hdGlvbkRvbmUuZW1pdCgpfV9oYW5kbGVDbGljayh0LGUsbil7dC5kaXNhYmxlZHx8KHRoaXMuc2VsZWN0ZWRJbmRleD1lLmZvY3VzSW5kZXg9bil9X2dldFRhYkluZGV4KHQsZSl7cmV0dXJuIHQuZGlzYWJsZWQ/bnVsbDp0aGlzLnNlbGVjdGVkSW5kZXg9PT1lPzA6LTF9X3RhYkZvY3VzQ2hhbmdlZCh0LGUpe3QmJiJtb3VzZSIhPT10JiYidG91Y2giIT09dCYmKHRoaXMuX3RhYkhlYWRlci5mb2N1c0luZGV4PWUpfX1IQi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SEIpKFNtKGhnKSxTbShVZyksU20oVEIsOCksU20oVlAsOCkpfSxIQi7JtWRpcj1sbyh7dHlwZTpIQixpbnB1dHM6e2hlYWRlclBvc2l0aW9uOiJoZWFkZXJQb3NpdGlvbiIsYW5pbWF0aW9uRHVyYXRpb246ImFuaW1hdGlvbkR1cmF0aW9uIixkaXNhYmxlUGFnaW5hdGlvbjoiZGlzYWJsZVBhZ2luYXRpb24iLGR5bmFtaWNIZWlnaHQ6ImR5bmFtaWNIZWlnaHQiLGNvbnRlbnRUYWJJbmRleDoiY29udGVudFRhYkluZGV4IixzZWxlY3RlZEluZGV4OiJzZWxlY3RlZEluZGV4IixiYWNrZ3JvdW5kQ29sb3I6ImJhY2tncm91bmRDb2xvciJ9LG91dHB1dHM6e3NlbGVjdGVkSW5kZXhDaGFuZ2U6InNlbGVjdGVkSW5kZXhDaGFuZ2UiLGZvY3VzQ2hhbmdlOiJmb2N1c0NoYW5nZSIsYW5pbWF0aW9uRG9uZToiYW5pbWF0aW9uRG9uZSIsc2VsZWN0ZWRUYWJDaGFuZ2U6InNlbGVjdGVkVGFiQ2hhbmdlIn0sZmVhdHVyZXM6W3hwXX0pLEhCLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6aGd9LHt0eXBlOlVnfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbVEJdfSx7dHlwZTpTcn1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1ZQXX1dfV0sSEIucHJvcERlY29yYXRvcnM9e2R5bmFtaWNIZWlnaHQ6W3t0eXBlOnh5fV0sc2VsZWN0ZWRJbmRleDpbe3R5cGU6eHl9XSxoZWFkZXJQb3NpdGlvbjpbe3R5cGU6eHl9XSxhbmltYXRpb25EdXJhdGlvbjpbe3R5cGU6eHl9XSxjb250ZW50VGFiSW5kZXg6W3t0eXBlOnh5fV0sZGlzYWJsZVBhZ2luYXRpb246W3t0eXBlOnh5fV0sYmFja2dyb3VuZENvbG9yOlt7dHlwZTp4eX1dLHNlbGVjdGVkSW5kZXhDaGFuZ2U6W3t0eXBlOk95fV0sZm9jdXNDaGFuZ2U6W3t0eXBlOk95fV0sYW5pbWF0aW9uRG9uZTpbe3R5cGU6T3l9XSxzZWxlY3RlZFRhYkNoYW5nZTpbe3R5cGU6T3l9XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChIQixbe3R5cGU6Q3l9XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9LHt0eXBlOlVnfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbVEJdfSx7dHlwZTpTcn1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1ZQXX1dfV19KSx7aGVhZGVyUG9zaXRpb246W3t0eXBlOnh5fV0sc2VsZWN0ZWRJbmRleENoYW5nZTpbe3R5cGU6T3l9XSxmb2N1c0NoYW5nZTpbe3R5cGU6T3l9XSxhbmltYXRpb25Eb25lOlt7dHlwZTpPeX1dLHNlbGVjdGVkVGFiQ2hhbmdlOlt7dHlwZTpPeX1dLGFuaW1hdGlvbkR1cmF0aW9uOlt7dHlwZTp4eX1dLGRpc2FibGVQYWdpbmF0aW9uOlt7dHlwZTp4eX1dLGR5bmFtaWNIZWlnaHQ6W3t0eXBlOnh5fV0sY29udGVudFRhYkluZGV4Olt7dHlwZTp4eX1dLHNlbGVjdGVkSW5kZXg6W3t0eXBlOnh5fV0sYmFja2dyb3VuZENvbG9yOlt7dHlwZTp4eX1dfSk7Y2xhc3MgRkIgZXh0ZW5kcyBIQntjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcih0LGUsbixvKX19RkIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEZCKShTbShoZyksU20oVWcpLFNtKFRCLDgpLFNtKFZQLDgpKX0sRkIuybVjbXA9dG8oe3R5cGU6RkIsc2VsZWN0b3JzOltbIm1hdC10YWItZ3JvdXAiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYkaChvLFNCLDUpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4uX2FsbFRhYnM9dCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFFoKGxCLDUpLFFoKGNCLDUpKSwyJmUpe2xldCB0O0poKHQ9dGIoKSkmJihuLl90YWJCb2R5V3JhcHBlcj10LmZpcnN0KSxKaCh0PXRiKCkpJiYobi5fdGFiSGVhZGVyPXQuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtdGFiLWdyb3VwIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmcHUoIm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQiLG4uZHluYW1pY0hlaWdodCkoIm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIiwiYmVsb3ciPT09bi5oZWFkZXJQb3NpdGlvbil9LGlucHV0czp7Y29sb3I6ImNvbG9yIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZXhwb3J0QXM6WyJtYXRUYWJHcm91cCJdLGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6a0IsdXNlRXhpc3Rpbmc6RkJ9XSkseHBdLGRlY2xzOjYsdmFyczo3LGNvbnN0czpbWzMsInNlbGVjdGVkSW5kZXgiLCJkaXNhYmxlUmlwcGxlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJpbmRleEZvY3VzZWQiLCJzZWxlY3RGb2N1c2VkSW5kZXgiXSxbInRhYkhlYWRlciIsIiJdLFsiY2xhc3MiLCJtYXQtdGFiLWxhYmVsIG1hdC1mb2N1cy1pbmRpY2F0b3IiLCJyb2xlIiwidGFiIiwibWF0VGFiTGFiZWxXcmFwcGVyIiwiIiwibWF0LXJpcHBsZSIsIiIsImNka01vbml0b3JFbGVtZW50Rm9jdXMiLCIiLDMsImlkIiwibWF0LXRhYi1sYWJlbC1hY3RpdmUiLCJkaXNhYmxlZCIsIm1hdFJpcHBsZURpc2FibGVkIiwiY2xpY2siLCJjZGtGb2N1c0NoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1hdC10YWItYm9keS13cmFwcGVyIl0sWyJ0YWJCb2R5V3JhcHBlciIsIiJdLFsicm9sZSIsInRhYnBhbmVsIiwzLCJpZCIsIm1hdC10YWItYm9keS1hY3RpdmUiLCJjb250ZW50IiwicG9zaXRpb24iLCJvcmlnaW4iLCJhbmltYXRpb25EdXJhdGlvbiIsIl9vbkNlbnRlcmVkIiwiX29uQ2VudGVyaW5nIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInJvbGUiLCJ0YWIiLCJtYXRUYWJMYWJlbFdyYXBwZXIiLCIiLCJtYXQtcmlwcGxlIiwiIiwiY2RrTW9uaXRvckVsZW1lbnRGb2N1cyIsIiIsMSwibWF0LXRhYi1sYWJlbCIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsImlkIiwiZGlzYWJsZWQiLCJtYXRSaXBwbGVEaXNhYmxlZCIsImNsaWNrIiwiY2RrRm9jdXNDaGFuZ2UiXSxbMSwibWF0LXRhYi1sYWJlbC1jb250ZW50Il0sWzMsIm5nSWYiXSxbMywiY2RrUG9ydGFsT3V0bGV0Il0sWyJyb2xlIiwidGFicGFuZWwiLDMsImlkIiwiY29udGVudCIsInBvc2l0aW9uIiwib3JpZ2luIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJfb25DZW50ZXJlZCIsIl9vbkNlbnRlcmluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwibWF0LXRhYi1oZWFkZXIiLDAsMSksVm0oImluZGV4Rm9jdXNlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2ZvY3VzQ2hhbmdlZChlKX0pKSgic2VsZWN0Rm9jdXNlZEluZGV4IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5zZWxlY3RlZEluZGV4PWV9KSksUXAoMix1Qiw0LDE0LCJkaXYiLDIpLEFtKCksUm0oMywiZGl2IiwzLDQpLFFwKDUsZkIsMSw5LCJtYXQtdGFiLWJvZHkiLDUpLEFtKCkpLDImZSYmKERtKCJzZWxlY3RlZEluZGV4IixuLnNlbGVjdGVkSW5kZXh8fDApKCJkaXNhYmxlUmlwcGxlIixuLmRpc2FibGVSaXBwbGUpKCJkaXNhYmxlUGFnaW5hdGlvbiIsbi5kaXNhYmxlUGFnaW5hdGlvbikscmMoMiksRG0oIm5nRm9yT2YiLG4uX3RhYnMpLHJjKDEpLHB1KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PW4uX2FuaW1hdGlvbk1vZGUpLHJjKDIpLERtKCJuZ0Zvck9mIixuLl90YWJzKSl9LGRpcmVjdGl2ZXM6ZnVuY3Rpb24oKXtyZXR1cm5bR0IsbE0sQkIsa0gsREksZE0sREYsQUJdfSxzdHlsZXM6WyIubWF0LXRhYi1ncm91cHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21heC13aWR0aDoxMDAlfS5tYXQtdGFiLWdyb3VwLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfS5tYXQtdGFiLWxhYmVse2hlaWdodDo0OHB4O3BhZGRpbmc6MCAyNHB4O2N1cnNvcjpwb2ludGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5Oi42O21pbi13aWR0aDoxNjBweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXRhYi1sYWJlbDpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1hdC10YWItbGFiZWw6Zm9jdXM6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbDpmb2N1c3tvdXRsaW5lOmRvdHRlZCAycHg7b3V0bGluZS1vZmZzZXQ6LTJweH0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtdGFiLWxhYmVsIC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbHtvcGFjaXR5OjF9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpey5tYXQtdGFiLWxhYmVse3BhZGRpbmc6MCAxMnB4fX1AbWVkaWEobWF4LXdpZHRoOiA5NTlweCl7Lm1hdC10YWItbGFiZWx7cGFkZGluZzowIDEycHh9fS5tYXQtdGFiLWdyb3VwW21hdC1zdHJldGNoLXRhYnNdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjF9Lm1hdC10YWItYm9keS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmZsZXg7dHJhbnNpdGlvbjpoZWlnaHQgNTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtdGFiLWJvZHktd3JhcHBlcnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC10YWItYm9keXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjtvdXRsaW5lOjA7ZmxleC1iYXNpczoxMDAlfS5tYXQtdGFiLWJvZHkubWF0LXRhYi1ib2R5LWFjdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdy14OmhpZGRlbjtvdmVyZmxvdy15OmF1dG87ei1pbmRleDoxO2ZsZXgtZ3JvdzoxfS5tYXQtdGFiLWdyb3VwLm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQgLm1hdC10YWItYm9keS5tYXQtdGFiLWJvZHktYWN0aXZle292ZXJmbG93LXk6aGlkZGVufVxuIl0sZW5jYXBzdWxhdGlvbjoyfSksRkIuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpoZ30se3R5cGU6VWd9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltUQl19LHt0eXBlOlNyfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbVlBdfV19XSxGQi5wcm9wRGVjb3JhdG9ycz17X2FsbFRhYnM6W3t0eXBlOllhLGFyZ3M6W1NCLHtkZXNjZW5kYW50czohMH1dfV0sX3RhYkJvZHlXcmFwcGVyOlt7dHlwZTpaYSxhcmdzOlsidGFiQm9keVdyYXBwZXIiXX1dLF90YWJIZWFkZXI6W3t0eXBlOlphLGFyZ3M6WyJ0YWJIZWFkZXIiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEZCLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im1hdC10YWItZ3JvdXAiLGV4cG9ydEFzOiJtYXRUYWJHcm91cCIsdGVtcGxhdGU6JzxtYXQtdGFiLWhlYWRlciAjdGFiSGVhZGVyXG4gICAgICAgICAgICAgICBbc2VsZWN0ZWRJbmRleF09InNlbGVjdGVkSW5kZXggfHwgMCJcbiAgICAgICAgICAgICAgIFtkaXNhYmxlUmlwcGxlXT0iZGlzYWJsZVJpcHBsZSJcbiAgICAgICAgICAgICAgIFtkaXNhYmxlUGFnaW5hdGlvbl09ImRpc2FibGVQYWdpbmF0aW9uIlxuICAgICAgICAgICAgICAgKGluZGV4Rm9jdXNlZCk9Il9mb2N1c0NoYW5nZWQoJGV2ZW50KSJcbiAgICAgICAgICAgICAgIChzZWxlY3RGb2N1c2VkSW5kZXgpPSJzZWxlY3RlZEluZGV4ID0gJGV2ZW50Ij5cbiAgPGRpdiBjbGFzcz0ibWF0LXRhYi1sYWJlbCBtYXQtZm9jdXMtaW5kaWNhdG9yIiByb2xlPSJ0YWIiIG1hdFRhYkxhYmVsV3JhcHBlciBtYXQtcmlwcGxlIGNka01vbml0b3JFbGVtZW50Rm9jdXNcbiAgICAgICAqbmdGb3I9ImxldCB0YWIgb2YgX3RhYnM7IGxldCBpID0gaW5kZXgiXG4gICAgICAgW2lkXT0iX2dldFRhYkxhYmVsSWQoaSkiXG4gICAgICAgW2F0dHIudGFiSW5kZXhdPSJfZ2V0VGFiSW5kZXgodGFiLCBpKSJcbiAgICAgICBbYXR0ci5hcmlhLXBvc2luc2V0XT0iaSArIDEiXG4gICAgICAgW2F0dHIuYXJpYS1zZXRzaXplXT0iX3RhYnMubGVuZ3RoIlxuICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPSJfZ2V0VGFiQ29udGVudElkKGkpIlxuICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPSJzZWxlY3RlZEluZGV4ID09IGkiXG4gICAgICAgW2F0dHIuYXJpYS1sYWJlbF09InRhYi5hcmlhTGFiZWwgfHwgbnVsbCJcbiAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPSIoIXRhYi5hcmlhTGFiZWwgJiYgdGFiLmFyaWFMYWJlbGxlZGJ5KSA/IHRhYi5hcmlhTGFiZWxsZWRieSA6IG51bGwiXG4gICAgICAgW2NsYXNzLm1hdC10YWItbGFiZWwtYWN0aXZlXT0ic2VsZWN0ZWRJbmRleCA9PSBpIlxuICAgICAgIFtkaXNhYmxlZF09InRhYi5kaXNhYmxlZCJcbiAgICAgICBbbWF0UmlwcGxlRGlzYWJsZWRdPSJ0YWIuZGlzYWJsZWQgfHwgZGlzYWJsZVJpcHBsZSJcbiAgICAgICAoY2xpY2spPSJfaGFuZGxlQ2xpY2sodGFiLCB0YWJIZWFkZXIsIGkpIlxuICAgICAgIChjZGtGb2N1c0NoYW5nZSk9Il90YWJGb2N1c0NoYW5nZWQoJGV2ZW50LCBpKSI+XG5cblxuICAgIDxkaXYgY2xhc3M9Im1hdC10YWItbGFiZWwtY29udGVudCI+XG4gICAgICBceDNjIS0tIElmIHRoZXJlIGlzIGEgbGFiZWwgdGVtcGxhdGUsIHVzZSBpdC4gLS1ceDNlXG4gICAgICA8bmctdGVtcGxhdGUgW25nSWZdPSJ0YWIudGVtcGxhdGVMYWJlbCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbY2RrUG9ydGFsT3V0bGV0XT0idGFiLnRlbXBsYXRlTGFiZWwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICBceDNjIS0tIElmIHRoZXJlIGlzIG5vdCBhIGxhYmVsIHRlbXBsYXRlLCBmYWxsIGJhY2sgdG8gdGhlIHRleHQgbGFiZWwuIC0tXHgzZVxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT0iIXRhYi50ZW1wbGF0ZUxhYmVsIj57e3RhYi50ZXh0TGFiZWx9fTwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9tYXQtdGFiLWhlYWRlcj5cblxuPGRpdlxuICBjbGFzcz0ibWF0LXRhYi1ib2R5LXdyYXBwZXIiXG4gIFtjbGFzcy5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZV09Il9hbmltYXRpb25Nb2RlID09PSBcJ05vb3BBbmltYXRpb25zXCciXG4gICN0YWJCb2R5V3JhcHBlcj5cbiAgPG1hdC10YWItYm9keSByb2xlPSJ0YWJwYW5lbCJcbiAgICAgICAgICAgICAgICpuZ0Zvcj0ibGV0IHRhYiBvZiBfdGFiczsgbGV0IGkgPSBpbmRleCJcbiAgICAgICAgICAgICAgIFtpZF09Il9nZXRUYWJDb250ZW50SWQoaSkiXG4gICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09Iihjb250ZW50VGFiSW5kZXggIT0gbnVsbCAmJiBzZWxlY3RlZEluZGV4ID09PSBpKSA/IGNvbnRlbnRUYWJJbmRleCA6IG51bGwiXG4gICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPSJfZ2V0VGFiTGFiZWxJZChpKSJcbiAgICAgICAgICAgICAgIFtjbGFzcy5tYXQtdGFiLWJvZHktYWN0aXZlXT0ic2VsZWN0ZWRJbmRleCA9PT0gaSJcbiAgICAgICAgICAgICAgIFtjb250ZW50XT0idGFiLmNvbnRlbnQhIlxuICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT0idGFiLnBvc2l0aW9uISJcbiAgICAgICAgICAgICAgIFtvcmlnaW5dPSJ0YWIub3JpZ2luIlxuICAgICAgICAgICAgICAgW2FuaW1hdGlvbkR1cmF0aW9uXT0iYW5pbWF0aW9uRHVyYXRpb24iXG4gICAgICAgICAgICAgICAoX29uQ2VudGVyZWQpPSJfcmVtb3ZlVGFiQm9keVdyYXBwZXJIZWlnaHQoKSJcbiAgICAgICAgICAgICAgIChfb25DZW50ZXJpbmcpPSJfc2V0VGFiQm9keVdyYXBwZXJIZWlnaHQoJGV2ZW50KSI+XG4gIDwvbWF0LXRhYi1ib2R5PlxuPC9kaXY+XG4nLGVuY2Fwc3VsYXRpb246SG4uTm9uZSxjaGFuZ2VEZXRlY3Rpb246em4uRGVmYXVsdCxpbnB1dHM6WyJjb2xvciIsImRpc2FibGVSaXBwbGUiXSxwcm92aWRlcnM6W3twcm92aWRlOmtCLHVzZUV4aXN0aW5nOkZCfV0saG9zdDp7Y2xhc3M6Im1hdC10YWItZ3JvdXAiLCJbY2xhc3MubWF0LXRhYi1ncm91cC1keW5hbWljLWhlaWdodF0iOiJkeW5hbWljSGVpZ2h0IiwiW2NsYXNzLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyXSI6J2hlYWRlclBvc2l0aW9uID09PSAiYmVsb3ciJ30sc3R5bGVzOlsiLm1hdC10YWItZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttYXgtd2lkdGg6MTAwJX0ubWF0LXRhYi1ncm91cC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlcntmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX0ubWF0LXRhYi1sYWJlbHtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMjRweDtjdXJzb3I6cG9pbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3BhY2l0eTouNjttaW4td2lkdGg6MTYwcHg7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC10YWItbGFiZWw6Zm9jdXN7b3V0bGluZTpub25lfS5tYXQtdGFiLWxhYmVsOmZvY3VzOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWw6Zm9jdXN7b3V0bGluZTpkb3R0ZWQgMnB4O291dGxpbmUtb2Zmc2V0Oi0ycHh9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWR7b3BhY2l0eTouNX0ubWF0LXRhYi1sYWJlbCAubWF0LXRhYi1sYWJlbC1jb250ZW50e2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWx7b3BhY2l0eToxfUBtZWRpYShtYXgtd2lkdGg6IDU5OXB4KXsubWF0LXRhYi1sYWJlbHtwYWRkaW5nOjAgMTJweH19QG1lZGlhKG1heC13aWR0aDogOTU5cHgpey5tYXQtdGFiLWxhYmVse3BhZGRpbmc6MCAxMnB4fX0ubWF0LXRhYi1ncm91cFttYXQtc3RyZXRjaC10YWJzXT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWx7ZmxleC1iYXNpczowO2ZsZXgtZ3JvdzoxfS5tYXQtdGFiLWJvZHktd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpmbGV4O3RyYW5zaXRpb246aGVpZ2h0IDUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXRhYi1ib2R5LXdyYXBwZXJ7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtdGFiLWJvZHl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47b3V0bGluZTowO2ZsZXgtYmFzaXM6MTAwJX0ubWF0LXRhYi1ib2R5Lm1hdC10YWItYm9keS1hY3RpdmV7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3otaW5kZXg6MTtmbGV4LWdyb3c6MX0ubWF0LXRhYi1ncm91cC5tYXQtdGFiLWdyb3VwLWR5bmFtaWMtaGVpZ2h0IC5tYXQtdGFiLWJvZHkubWF0LXRhYi1ib2R5LWFjdGl2ZXtvdmVyZmxvdy15OmhpZGRlbn1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9LHt0eXBlOlVnfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbVEJdfSx7dHlwZTpTcn1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1ZQXX1dfV19KSx7X2FsbFRhYnM6W3t0eXBlOllhLGFyZ3M6W1NCLHtkZXNjZW5kYW50czohMH1dfV0sX3RhYkJvZHlXcmFwcGVyOlt7dHlwZTpaYSxhcmdzOlsidGFiQm9keVdyYXBwZXIiXX1dLF90YWJIZWFkZXI6W3t0eXBlOlphLGFyZ3M6WyJ0YWJIZWFkZXIiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBMQj1LSShjbGFzc3t9KTtjbGFzcyBCQiBleHRlbmRzIExCe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5lbGVtZW50UmVmPXR9Zm9jdXMoKXt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfWdldE9mZnNldExlZnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdH1nZXRPZmZzZXRXaWR0aCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aH19QkIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJCKShTbShoZykpfSxCQi7JtWRpcj1sbyh7dHlwZTpCQixzZWxlY3RvcnM6W1siIiwibWF0VGFiTGFiZWxXcmFwcGVyIiwiIl1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihqcCgiYXJpYS1kaXNhYmxlZCIsISFuLmRpc2FibGVkKSxwdSgibWF0LXRhYi1kaXNhYmxlZCIsbi5kaXNhYmxlZCkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCJ9LGZlYXR1cmVzOlt4cF19KSxCQi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChCQixbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbbWF0VGFiTGFiZWxXcmFwcGVyXSIsaW5wdXRzOlsiZGlzYWJsZWQiXSxob3N0OnsiW2NsYXNzLm1hdC10YWItZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbYXR0ci5hcmlhLWRpc2FibGVkXSI6IiEhZGlzYWJsZWQifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IFZCPU56KHtwYXNzaXZlOiEwfSk7Y2xhc3MgakJ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscil7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fdmlld3BvcnRSdWxlcj1uLHRoaXMuX2Rpcj1vLHRoaXMuX25nWm9uZT1pLHRoaXMuX3BsYXRmb3JtPWEsdGhpcy5fYW5pbWF0aW9uTW9kZT1yLHRoaXMuX3Njcm9sbERpc3RhbmNlPTAsdGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQ9ITEsdGhpcy5fZGVzdHJveWVkPW5ldyBJLHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ITEsdGhpcy5fZGlzYWJsZVNjcm9sbEFmdGVyPSEwLHRoaXMuX2Rpc2FibGVTY3JvbGxCZWZvcmU9ITAsdGhpcy5fc3RvcFNjcm9sbGluZz1uZXcgSSx0aGlzLmRpc2FibGVQYWdpbmF0aW9uPSExLHRoaXMuX3NlbGVjdGVkSW5kZXg9MCx0aGlzLnNlbGVjdEZvY3VzZWRJbmRleD1uZXcgTGgsdGhpcy5pbmRleEZvY3VzZWQ9bmV3IExoLGkucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57b2UodC5uYXRpdmVFbGVtZW50LCJtb3VzZWxlYXZlIikucGlwZShJZSh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fc3RvcEludGVydmFsKCl9KSl9KSl9Z2V0IHNlbGVjdGVkSW5kZXgoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleH1zZXQgc2VsZWN0ZWRJbmRleCh0KXt0PV96KHQpLHRoaXMuX3NlbGVjdGVkSW5kZXghPXQmJih0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZD0hMCx0aGlzLl9zZWxlY3RlZEluZGV4PXQsdGhpcy5fa2V5TWFuYWdlciYmdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKHQpKX1uZ0FmdGVyVmlld0luaXQoKXtvZSh0aGlzLl9wcmV2aW91c1BhZ2luYXRvci5uYXRpdmVFbGVtZW50LCJ0b3VjaHN0YXJ0IixWQikucGlwZShJZSh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImJlZm9yZSIpfSkpLG9lKHRoaXMuX25leHRQYWdpbmF0b3IubmF0aXZlRWxlbWVudCwidG91Y2hzdGFydCIsVkIpLnBpcGUoSWUodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJhZnRlciIpfSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe2NvbnN0IHQ9dGhpcy5fZGlyP3RoaXMuX2Rpci5jaGFuZ2U6RXQoImx0ciIpLGU9dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoMTUwKSxuPSgpPT57dGhpcy51cGRhdGVQYWdpbmF0aW9uKCksdGhpcy5fYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCl9O3RoaXMuX2tleU1hbmFnZXI9bmV3IGVJKHRoaXMuX2l0ZW1zKS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2dldExheW91dERpcmVjdGlvbigpKS53aXRoSG9tZUFuZEVuZCgpLndpdGhXcmFwKCksdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKHRoaXMuX3NlbGVjdGVkSW5kZXgpLCJ1bmRlZmluZWQiIT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3JlcXVlc3RBbmltYXRpb25GcmFtZShuKTpuKCkscmUodCxlLHRoaXMuX2l0ZW1zLmNoYW5nZXMpLnBpcGUoSWUodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX25nWm9uZS5ydW4oKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKG4pKSksdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2dldExheW91dERpcmVjdGlvbigpKX0pKSx0aGlzLl9rZXlNYW5hZ2VyLmNoYW5nZS5waXBlKEllKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgodD0+e3RoaXMuaW5kZXhGb2N1c2VkLmVtaXQodCksdGhpcy5fc2V0VGFiRm9jdXModCl9KSl9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7dGhpcy5fdGFiTGFiZWxDb3VudCE9dGhpcy5faXRlbXMubGVuZ3RoJiYodGhpcy51cGRhdGVQYWdpbmF0aW9uKCksdGhpcy5fdGFiTGFiZWxDb3VudD10aGlzLl9pdGVtcy5sZW5ndGgsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpLHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkJiYodGhpcy5fc2Nyb2xsVG9MYWJlbCh0aGlzLl9zZWxlY3RlZEluZGV4KSx0aGlzLl9jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCksdGhpcy5fYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCksdGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpLHRoaXMuX3Njcm9sbERpc3RhbmNlQ2hhbmdlZCYmKHRoaXMuX3VwZGF0ZVRhYlNjcm9sbFBvc2l0aW9uKCksdGhpcy5fc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1uZ09uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fc3RvcFNjcm9sbGluZy5jb21wbGV0ZSgpfV9oYW5kbGVLZXlkb3duKHQpe2lmKCFieih0KSlzd2l0Y2godC5rZXlDb2RlKXtjYXNlIG16OmNhc2UgZno6dGhpcy5mb2N1c0luZGV4IT09dGhpcy5zZWxlY3RlZEluZGV4JiYodGhpcy5zZWxlY3RGb2N1c2VkSW5kZXguZW1pdCh0aGlzLmZvY3VzSW5kZXgpLHRoaXMuX2l0ZW1TZWxlY3RlZCh0KSk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9rZXlNYW5hZ2VyLm9uS2V5ZG93bih0KX19X29uQ29udGVudENoYW5nZXMoKXtjb25zdCB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDt0IT09dGhpcy5fY3VycmVudFRleHRDb250ZW50JiYodGhpcy5fY3VycmVudFRleHRDb250ZW50PXR8fCIiLHRoaXMuX25nWm9uZS5ydW4oKCgpPT57dGhpcy51cGRhdGVQYWdpbmF0aW9uKCksdGhpcy5fYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSkpfXVwZGF0ZVBhZ2luYXRpb24oKXt0aGlzLl9jaGVja1BhZ2luYXRpb25FbmFibGVkKCksdGhpcy5fY2hlY2tTY3JvbGxpbmdDb250cm9scygpLHRoaXMuX3VwZGF0ZVRhYlNjcm9sbFBvc2l0aW9uKCl9Z2V0IGZvY3VzSW5kZXgoKXtyZXR1cm4gdGhpcy5fa2V5TWFuYWdlcj90aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleDowfXNldCBmb2N1c0luZGV4KHQpe3RoaXMuX2lzVmFsaWRJbmRleCh0KSYmdGhpcy5mb2N1c0luZGV4IT09dCYmdGhpcy5fa2V5TWFuYWdlciYmdGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKHQpfV9pc1ZhbGlkSW5kZXgodCl7aWYoIXRoaXMuX2l0ZW1zKXJldHVybiEwO2NvbnN0IGU9dGhpcy5faXRlbXM/dGhpcy5faXRlbXMudG9BcnJheSgpW3RdOm51bGw7cmV0dXJuISFlJiYhZS5kaXNhYmxlZH1fc2V0VGFiRm9jdXModCl7aWYodGhpcy5fc2hvd1BhZ2luYXRpb25Db250cm9scyYmdGhpcy5fc2Nyb2xsVG9MYWJlbCh0KSx0aGlzLl9pdGVtcyYmdGhpcy5faXRlbXMubGVuZ3RoKXt0aGlzLl9pdGVtcy50b0FycmF5KClbdF0uZm9jdXMoKTtjb25zdCBlPXRoaXMuX3RhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudCxuPXRoaXMuX2dldExheW91dERpcmVjdGlvbigpO2Uuc2Nyb2xsTGVmdD0ibHRyIj09bj8wOmUuc2Nyb2xsV2lkdGgtZS5vZmZzZXRXaWR0aH19X2dldExheW91dERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifV91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpe2lmKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24pcmV0dXJuO2NvbnN0IHQ9dGhpcy5zY3JvbGxEaXN0YW5jZSxlPSJsdHIiPT09dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk/LXQ6dDt0aGlzLl90YWJMaXN0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVYKCR7TWF0aC5yb3VuZChlKX1weClgLCh0aGlzLl9wbGF0Zm9ybS5UUklERU5UfHx0aGlzLl9wbGF0Zm9ybS5FREdFKSYmKHRoaXMuX3RhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0PTApfWdldCBzY3JvbGxEaXN0YW5jZSgpe3JldHVybiB0aGlzLl9zY3JvbGxEaXN0YW5jZX1zZXQgc2Nyb2xsRGlzdGFuY2UodCl7dGhpcy5fc2Nyb2xsVG8odCl9X3Njcm9sbEhlYWRlcih0KXtyZXR1cm4gdGhpcy5fc2Nyb2xsVG8odGhpcy5fc2Nyb2xsRGlzdGFuY2UrKCJiZWZvcmUiPT10Py0xOjEpKnRoaXMuX3RhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aC8zKX1faGFuZGxlUGFnaW5hdG9yQ2xpY2sodCl7dGhpcy5fc3RvcEludGVydmFsKCksdGhpcy5fc2Nyb2xsSGVhZGVyKHQpfV9zY3JvbGxUb0xhYmVsKHQpe2lmKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24pcmV0dXJuO2NvbnN0IGU9dGhpcy5faXRlbXM/dGhpcy5faXRlbXMudG9BcnJheSgpW3RdOm51bGw7aWYoIWUpcmV0dXJuO2NvbnN0IG49dGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLHtvZmZzZXRMZWZ0Om8sb2Zmc2V0V2lkdGg6aX09ZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7bGV0IGEscjsibHRyIj09dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk/KGE9byxyPWEraSk6KHI9dGhpcy5fdGFiTGlzdC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLW8sYT1yLWkpO2NvbnN0IHM9dGhpcy5zY3JvbGxEaXN0YW5jZSxsPXRoaXMuc2Nyb2xsRGlzdGFuY2UrbjthPHM/dGhpcy5zY3JvbGxEaXN0YW5jZS09cy1hKzYwOnI+bCYmKHRoaXMuc2Nyb2xsRGlzdGFuY2UrPXItbCs2MCl9X2NoZWNrUGFnaW5hdGlvbkVuYWJsZWQoKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ITE7ZWxzZXtjb25zdCB0PXRoaXMuX3RhYkxpc3QubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aD50aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7dHx8KHRoaXMuc2Nyb2xsRGlzdGFuY2U9MCksdCE9PXRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHMmJnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9dH19X2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKXt0aGlzLmRpc2FibGVQYWdpbmF0aW9uP3RoaXMuX2Rpc2FibGVTY3JvbGxBZnRlcj10aGlzLl9kaXNhYmxlU2Nyb2xsQmVmb3JlPSEwOih0aGlzLl9kaXNhYmxlU2Nyb2xsQmVmb3JlPTA9PXRoaXMuc2Nyb2xsRGlzdGFuY2UsdGhpcy5fZGlzYWJsZVNjcm9sbEFmdGVyPXRoaXMuc2Nyb2xsRGlzdGFuY2U9PXRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9nZXRNYXhTY3JvbGxEaXN0YW5jZSgpe3JldHVybiB0aGlzLl90YWJMaXN0Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGgtdGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwwfV9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKXtjb25zdCB0PXRoaXMuX2l0ZW1zJiZ0aGlzLl9pdGVtcy5sZW5ndGg/dGhpcy5faXRlbXMudG9BcnJheSgpW3RoaXMuc2VsZWN0ZWRJbmRleF06bnVsbCxlPXQ/dC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ6bnVsbDtlP3RoaXMuX2lua0Jhci5hbGlnblRvRWxlbWVudChlKTp0aGlzLl9pbmtCYXIuaGlkZSgpfV9zdG9wSW50ZXJ2YWwoKXt0aGlzLl9zdG9wU2Nyb2xsaW5nLm5leHQoKX1faGFuZGxlUGFnaW5hdG9yUHJlc3ModCxlKXtlJiZudWxsIT1lLmJ1dHRvbiYmMCE9PWUuYnV0dG9ufHwodGhpcy5fc3RvcEludGVydmFsKCksYWUoNjUwLDEwMCkucGlwZShJZShyZSh0aGlzLl9zdG9wU2Nyb2xsaW5nLHRoaXMuX2Rlc3Ryb3llZCkpKS5zdWJzY3JpYmUoKCgpPT57Y29uc3R7bWF4U2Nyb2xsRGlzdGFuY2U6ZSxkaXN0YW5jZTpufT10aGlzLl9zY3JvbGxIZWFkZXIodCk7KDA9PT1ufHxuPj1lKSYmdGhpcy5fc3RvcEludGVydmFsKCl9KSkpfV9zY3JvbGxUbyh0KXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXJldHVybnttYXhTY3JvbGxEaXN0YW5jZTowLGRpc3RhbmNlOjB9O2NvbnN0IGU9dGhpcy5fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKTtyZXR1cm4gdGhpcy5fc2Nyb2xsRGlzdGFuY2U9TWF0aC5tYXgoMCxNYXRoLm1pbihlLHQpKSx0aGlzLl9zY3JvbGxEaXN0YW5jZUNoYW5nZWQ9ITAsdGhpcy5fY2hlY2tTY3JvbGxpbmdDb250cm9scygpLHttYXhTY3JvbGxEaXN0YW5jZTplLGRpc3RhbmNlOnRoaXMuX3Njcm9sbERpc3RhbmNlfX19akIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGpCKShTbShoZyksU20oVWcpLFNtKHVGKSxTbShISSw4KSxTbShhXyksU20od3opLFNtKFZQLDgpKX0sakIuybVkaXI9bG8oe3R5cGU6akIsaW5wdXRzOntkaXNhYmxlUGFnaW5hdGlvbjoiZGlzYWJsZVBhZ2luYXRpb24ifX0pLGpCLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6aGd9LHt0eXBlOlVnfSx7dHlwZTp1Rn0se3R5cGU6SEksZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6YV99LHt0eXBlOnd6fSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1ZQXX1dfV0sakIucHJvcERlY29yYXRvcnM9e2Rpc2FibGVQYWdpbmF0aW9uOlt7dHlwZTp4eX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGpCLFt7dHlwZTpDeX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpoZ30se3R5cGU6VWd9LHt0eXBlOnVGfSx7dHlwZTpISSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTphX30se3R5cGU6d3p9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbVlBdfV19XX0pLHtkaXNhYmxlUGFnaW5hdGlvbjpbe3R5cGU6eHl9XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgVUIgZXh0ZW5kcyBqQntjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyKXtzdXBlcih0LGUsbixvLGksYSxyKSx0aGlzLl9kaXNhYmxlUmlwcGxlPSExfWdldCBkaXNhYmxlUmlwcGxlKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVSaXBwbGV9c2V0IGRpc2FibGVSaXBwbGUodCl7dGhpcy5fZGlzYWJsZVJpcHBsZT15eih0KX1faXRlbVNlbGVjdGVkKHQpe3QucHJldmVudERlZmF1bHQoKX19VUIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFVCKShTbShoZyksU20oVWcpLFNtKHVGKSxTbShISSw4KSxTbShhXyksU20od3opLFNtKFZQLDgpKX0sVUIuybVkaXI9bG8oe3R5cGU6VUIsaW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZmVhdHVyZXM6W3hwXX0pLFVCLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6aGd9LHt0eXBlOlVnfSx7dHlwZTp1Rn0se3R5cGU6SEksZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6YV99LHt0eXBlOnd6fSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1ZQXX1dfV0sVUIucHJvcERlY29yYXRvcnM9e2Rpc2FibGVSaXBwbGU6W3t0eXBlOnh5fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoVUIsW3t0eXBlOkN5fV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfSx7dHlwZTpVZ30se3R5cGU6dUZ9LHt0eXBlOkhJLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOmFffSx7dHlwZTp3en0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltWUF19XX1dfSkse2Rpc2FibGVSaXBwbGU6W3t0eXBlOnh5fV19KTtjbGFzcyBHQiBleHRlbmRzIFVCe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIpe3N1cGVyKHQsZSxuLG8saSxhLHIpfX1HQi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8R0IpKFNtKGhnKSxTbShVZyksU20odUYpLFNtKEhJLDgpLFNtKGFfKSxTbSh3eiksU20oVlAsOCkpfSxHQi7JtWNtcD10byh7dHlwZTpHQixzZWxlY3RvcnM6W1sibWF0LXRhYi1oZWFkZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYkaChvLEJCLDQpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4uX2l0ZW1zPXQpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihRaChNQiw3KSxRaChnQiw3KSxRaChoQiw3KSxRaChiQiw1KSxRaCh5Qiw1KSksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi5faW5rQmFyPXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLl90YWJMaXN0Q29udGFpbmVyPXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLl90YWJMaXN0PXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLl9uZXh0UGFnaW5hdG9yPXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLl9wcmV2aW91c1BhZ2luYXRvcj10LmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LXRhYi1oZWFkZXIiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZwdSgibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jb250cm9scy1lbmFibGVkIixuLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzKSgibWF0LXRhYi1oZWFkZXItcnRsIiwicnRsIj09bi5fZ2V0TGF5b3V0RGlyZWN0aW9uKCkpfSxpbnB1dHM6e3NlbGVjdGVkSW5kZXg6InNlbGVjdGVkSW5kZXgifSxvdXRwdXRzOntzZWxlY3RGb2N1c2VkSW5kZXg6InNlbGVjdEZvY3VzZWRJbmRleCIsaW5kZXhGb2N1c2VkOiJpbmRleEZvY3VzZWQifSxmZWF0dXJlczpbeHBdLG5nQ29udGVudFNlbGVjdG9yczppQixkZWNsczoxMyx2YXJzOjgsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSIsIm1hdC1yaXBwbGUiLCIiLDEsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24iLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSIsIm1hdC1lbGV2YXRpb24tejQiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwiY2xpY2siLCJtb3VzZWRvd24iLCJ0b3VjaGVuZCJdLFsicHJldmlvdXNQYWdpbmF0b3IiLCIiXSxbMSwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIl0sWzEsIm1hdC10YWItbGFiZWwtY29udGFpbmVyIiwzLCJrZXlkb3duIl0sWyJ0YWJMaXN0Q29udGFpbmVyIiwiIl0sWyJyb2xlIiwidGFibGlzdCIsMSwibWF0LXRhYi1saXN0IiwzLCJjZGtPYnNlcnZlQ29udGVudCJdLFsidGFiTGlzdCIsIiJdLFsxLCJtYXQtdGFiLWxhYmVscyJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwibWF0LXJpcHBsZSIsIiIsMSwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiIsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXIiLCJtYXQtZWxldmF0aW9uLXo0IiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1vdXNlZG93biIsImNsaWNrIiwidG91Y2hlbmQiXSxbIm5leHRQYWdpbmF0b3IiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFptKCksUm0oMCwiZGl2IiwwLDEpLFZtKCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5faGFuZGxlUGFnaW5hdG9yQ2xpY2soImJlZm9yZSIpfSkpKCJtb3VzZWRvd24iLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9oYW5kbGVQYWdpbmF0b3JQcmVzcygiYmVmb3JlIixlKX0pKSgidG91Y2hlbmQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX3N0b3BJbnRlcnZhbCgpfSkpLFRtKDIsImRpdiIsMiksQW0oKSxSbSgzLCJkaXYiLDMsNCksVm0oImtleWRvd24iLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9oYW5kbGVLZXlkb3duKGUpfSkpLFJtKDUsImRpdiIsNSw2KSxWbSgiY2RrT2JzZXJ2ZUNvbnRlbnQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX29uQ29udGVudENoYW5nZXMoKX0pKSxSbSg3LCJkaXYiLDcpLFhtKDgpLEFtKCksVG0oOSwibWF0LWluay1iYXIiKSxBbSgpLEFtKCksUm0oMTAsImRpdiIsOCw5KSxWbSgibW91c2Vkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImFmdGVyIixlKX0pKSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2hhbmRsZVBhZ2luYXRvckNsaWNrKCJhZnRlciIpfSkpKCJ0b3VjaGVuZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fc3RvcEludGVydmFsKCl9KSksVG0oMTIsImRpdiIsMiksQW0oKSksMiZlJiYocHUoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQiLG4uX2Rpc2FibGVTY3JvbGxCZWZvcmUpLERtKCJtYXRSaXBwbGVEaXNhYmxlZCIsbi5fZGlzYWJsZVNjcm9sbEJlZm9yZXx8bi5kaXNhYmxlUmlwcGxlKSxyYyg1KSxwdSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1uLl9hbmltYXRpb25Nb2RlKSxyYyg1KSxwdSgibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCIsbi5fZGlzYWJsZVNjcm9sbEFmdGVyKSxEbSgibWF0UmlwcGxlRGlzYWJsZWQiLG4uX2Rpc2FibGVTY3JvbGxBZnRlcnx8bi5kaXNhYmxlUmlwcGxlKSl9LGRpcmVjdGl2ZXM6W2tILGp6LE1CXSxzdHlsZXM6WycubWF0LXRhYi1oZWFkZXJ7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4LXNocmluazowfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLXdpZHRoOjMycHg7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0b3VjaC1hY3Rpb246bm9uZX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jb250cm9scy1lbmFibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2Rpc3BsYXk6ZmxleH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUsLm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlcntwYWRkaW5nLWxlZnQ6NHB4fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbnt0cmFuc2Zvcm06cm90YXRlKC0xMzVkZWcpfS5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlLC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVye3BhZGRpbmctcmlnaHQ6NHB4fS5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbnt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MnB4IDJweCAwIDA7Y29udGVudDoiIjtoZWlnaHQ6OHB4O3dpZHRoOjhweH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHtib3gtc2hhZG93Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC10YWItbGlzdHtmbGV4LWdyb3c6MTtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Lm1hdC1pbmstYmFye3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2hlaWdodDoycHg7dHJhbnNpdGlvbjo1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1pbmstYmFye3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC1pbmstYmFye2JvdHRvbTphdXRvO3RvcDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1pbmstYmFye291dGxpbmU6c29saWQgMnB4O2hlaWdodDowfS5tYXQtdGFiLWxhYmVsc3tkaXNwbGF5OmZsZXh9W21hdC1hbGlnbi10YWJzPWNlbnRlcl0+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsc3tqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVttYXQtYWxpZ24tdGFicz1lbmRdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHN7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtdGFiLWxhYmVsLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXRhYi1saXN0e3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXRhYi1sYWJlbHtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMjRweDtjdXJzb3I6cG9pbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3BhY2l0eTouNjttaW4td2lkdGg6MTYwcHg7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC10YWItbGFiZWw6Zm9jdXN7b3V0bGluZTpub25lfS5tYXQtdGFiLWxhYmVsOmZvY3VzOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWw6Zm9jdXN7b3V0bGluZTpkb3R0ZWQgMnB4O291dGxpbmUtb2Zmc2V0Oi0ycHh9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWR7b3BhY2l0eTouNX0ubWF0LXRhYi1sYWJlbCAubWF0LXRhYi1sYWJlbC1jb250ZW50e2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWx7b3BhY2l0eToxfUBtZWRpYShtYXgtd2lkdGg6IDU5OXB4KXsubWF0LXRhYi1sYWJlbHttaW4td2lkdGg6NzJweH19XG4nXSxlbmNhcHN1bGF0aW9uOjJ9KSxHQi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTpVZ30se3R5cGU6dUZ9LHt0eXBlOkhJLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOmFffSx7dHlwZTp3en0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltWUF19XX1dLEdCLnByb3BEZWNvcmF0b3JzPXtfaXRlbXM6W3t0eXBlOllhLGFyZ3M6W0JCLHtkZXNjZW5kYW50czohMX1dfV0sX2lua0Jhcjpbe3R5cGU6WmEsYXJnczpbTUIse3N0YXRpYzohMH1dfV0sX3RhYkxpc3RDb250YWluZXI6W3t0eXBlOlphLGFyZ3M6WyJ0YWJMaXN0Q29udGFpbmVyIix7c3RhdGljOiEwfV19XSxfdGFiTGlzdDpbe3R5cGU6WmEsYXJnczpbInRhYkxpc3QiLHtzdGF0aWM6ITB9XX1dLF9uZXh0UGFnaW5hdG9yOlt7dHlwZTpaYSxhcmdzOlsibmV4dFBhZ2luYXRvciJdfV0sX3ByZXZpb3VzUGFnaW5hdG9yOlt7dHlwZTpaYSxhcmdzOlsicHJldmlvdXNQYWdpbmF0b3IiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEdCLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im1hdC10YWItaGVhZGVyIix0ZW1wbGF0ZTonPGRpdiBjbGFzcz0ibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiBtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSBtYXQtZWxldmF0aW9uLXo0IlxuICAgICAjcHJldmlvdXNQYWdpbmF0b3JcbiAgICAgYXJpYS1oaWRkZW49InRydWUiXG4gICAgIG1hdC1yaXBwbGUgW21hdFJpcHBsZURpc2FibGVkXT0iX2Rpc2FibGVTY3JvbGxCZWZvcmUgfHwgZGlzYWJsZVJpcHBsZSJcbiAgICAgW2NsYXNzLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWRdPSJfZGlzYWJsZVNjcm9sbEJlZm9yZSJcbiAgICAgKGNsaWNrKT0iX2hhbmRsZVBhZ2luYXRvckNsaWNrKFwnYmVmb3JlXCcpIlxuICAgICAobW91c2Vkb3duKT0iX2hhbmRsZVBhZ2luYXRvclByZXNzKFwnYmVmb3JlXCcsICRldmVudCkiXG4gICAgICh0b3VjaGVuZCk9Il9zdG9wSW50ZXJ2YWwoKSI+XG4gIDxkaXYgY2xhc3M9Im1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiI+PC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz0ibWF0LXRhYi1sYWJlbC1jb250YWluZXIiICN0YWJMaXN0Q29udGFpbmVyIChrZXlkb3duKT0iX2hhbmRsZUtleWRvd24oJGV2ZW50KSI+XG4gIDxkaXZcbiAgICAjdGFiTGlzdFxuICAgIGNsYXNzPSJtYXQtdGFiLWxpc3QiXG4gICAgW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXT0iX2FuaW1hdGlvbk1vZGUgPT09IFwnTm9vcEFuaW1hdGlvbnNcJyJcbiAgICByb2xlPSJ0YWJsaXN0IlxuICAgIChjZGtPYnNlcnZlQ29udGVudCk9Il9vbkNvbnRlbnRDaGFuZ2VzKCkiPlxuICAgIDxkaXYgY2xhc3M9Im1hdC10YWItbGFiZWxzIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8bWF0LWluay1iYXI+PC9tYXQtaW5rLWJhcj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz0ibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiBtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIG1hdC1lbGV2YXRpb24tejQiXG4gICAgICNuZXh0UGFnaW5hdG9yXG4gICAgIGFyaWEtaGlkZGVuPSJ0cnVlIlxuICAgICBtYXQtcmlwcGxlIFttYXRSaXBwbGVEaXNhYmxlZF09Il9kaXNhYmxlU2Nyb2xsQWZ0ZXIgfHwgZGlzYWJsZVJpcHBsZSJcbiAgICAgW2NsYXNzLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWRdPSJfZGlzYWJsZVNjcm9sbEFmdGVyIlxuICAgICAobW91c2Vkb3duKT0iX2hhbmRsZVBhZ2luYXRvclByZXNzKFwnYWZ0ZXJcJywgJGV2ZW50KSJcbiAgICAgKGNsaWNrKT0iX2hhbmRsZVBhZ2luYXRvckNsaWNrKFwnYWZ0ZXJcJykiXG4gICAgICh0b3VjaGVuZCk9Il9zdG9wSW50ZXJ2YWwoKSI+XG4gIDxkaXYgY2xhc3M9Im1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiI+PC9kaXY+XG48L2Rpdj5cbicsaW5wdXRzOlsic2VsZWN0ZWRJbmRleCJdLG91dHB1dHM6WyJzZWxlY3RGb2N1c2VkSW5kZXgiLCJpbmRleEZvY3VzZWQiXSxlbmNhcHN1bGF0aW9uOkhuLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnpuLkRlZmF1bHQsaG9zdDp7Y2xhc3M6Im1hdC10YWItaGVhZGVyIiwiW2NsYXNzLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZF0iOiJfc2hvd1BhZ2luYXRpb25Db250cm9scyIsIltjbGFzcy5tYXQtdGFiLWhlYWRlci1ydGxdIjoiX2dldExheW91dERpcmVjdGlvbigpID09ICdydGwnIn0sc3R5bGVzOlsnLm1hdC10YWItaGVhZGVye2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ZmxleC1zaHJpbms6MH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi13aWR0aDozMnB4O2N1cnNvcjpwb2ludGVyO3otaW5kZXg6Mjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dG91Y2gtYWN0aW9uOm5vbmV9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntkaXNwbGF5OmZsZXh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlLC5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1sZWZ0OjRweH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257dHJhbnNmb3JtOnJvdGF0ZSgtMTM1ZGVnKX0ubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlcntwYWRkaW5nLXJpZ2h0OjRweH0ubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjJweCAycHggMCAwO2NvbnRlbnQ6IiI7aGVpZ2h0OjhweDt3aWR0aDo4cHh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWR7Ym94LXNoYWRvdzpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtdGFiLWxpc3R7ZmxleC1ncm93OjE7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5tYXQtaW5rLWJhcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtoZWlnaHQ6MnB4O3RyYW5zaXRpb246NTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtaW5rLWJhcnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtaW5rLWJhcntib3R0b206YXV0bzt0b3A6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaW5rLWJhcntvdXRsaW5lOnNvbGlkIDJweDtoZWlnaHQ6MH0ubWF0LXRhYi1sYWJlbHN7ZGlzcGxheTpmbGV4fVttYXQtYWxpZ24tdGFicz1jZW50ZXJdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHN7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bbWF0LWFsaWduLXRhYnM9ZW5kXT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWxze2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0ubWF0LXRhYi1sYWJlbC1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjt6LWluZGV4OjF9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC10YWItbGlzdHt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC10YWItbGFiZWx7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHg7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6LjY7bWluLXdpZHRoOjE2MHB4O3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXRhYi1sYWJlbDpmb2N1czpub3QoLm1hdC10YWItZGlzYWJsZWQpe29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6ZG90dGVkIDJweDtvdXRsaW5lLW9mZnNldDotMnB4fS5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke29wYWNpdHk6LjV9Lm1hdC10YWItbGFiZWwgLm1hdC10YWItbGFiZWwtY29udGVudHtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxhYmVse29wYWNpdHk6MX1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjcycHh9fVxuJ119XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpoZ30se3R5cGU6VWd9LHt0eXBlOnVGfSx7dHlwZTpISSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTphX30se3R5cGU6d3p9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbVlBdfV19XX0pLHtfaXRlbXM6W3t0eXBlOllhLGFyZ3M6W0JCLHtkZXNjZW5kYW50czohMX1dfV0sX2lua0Jhcjpbe3R5cGU6WmEsYXJnczpbTUIse3N0YXRpYzohMH1dfV0sX3RhYkxpc3RDb250YWluZXI6W3t0eXBlOlphLGFyZ3M6WyJ0YWJMaXN0Q29udGFpbmVyIix7c3RhdGljOiEwfV19XSxfdGFiTGlzdDpbe3R5cGU6WmEsYXJnczpbInRhYkxpc3QiLHtzdGF0aWM6ITB9XX1dLF9uZXh0UGFnaW5hdG9yOlt7dHlwZTpaYSxhcmdzOlsibmV4dFBhZ2luYXRvciJdfV0sX3ByZXZpb3VzUGFnaW5hdG9yOlt7dHlwZTpaYSxhcmdzOlsicHJldmlvdXNQYWdpbmF0b3IiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBXQiBleHRlbmRzIGpCe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIpe3N1cGVyKHQsbyxpLGUsbixhLHIpLHRoaXMuX2Rpc2FibGVSaXBwbGU9ITEsdGhpcy5jb2xvcj0icHJpbWFyeSJ9Z2V0IGJhY2tncm91bmRDb2xvcigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29sb3J9c2V0IGJhY2tncm91bmRDb2xvcih0KXtjb25zdCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3Q7ZS5yZW1vdmUoYG1hdC1iYWNrZ3JvdW5kLSR7dGhpcy5iYWNrZ3JvdW5kQ29sb3J9YCksdCYmZS5hZGQoYG1hdC1iYWNrZ3JvdW5kLSR7dH1gKSx0aGlzLl9iYWNrZ3JvdW5kQ29sb3I9dH1nZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfXNldCBkaXNhYmxlUmlwcGxlKHQpe3RoaXMuX2Rpc2FibGVSaXBwbGU9eXoodCl9X2l0ZW1TZWxlY3RlZCgpe31uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9pdGVtcy5jaGFuZ2VzLnBpcGUoTmUobnVsbCksSWUodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMudXBkYXRlQWN0aXZlTGluaygpfSkpLHN1cGVyLm5nQWZ0ZXJDb250ZW50SW5pdCgpfXVwZGF0ZUFjdGl2ZUxpbmsoKXtpZighdGhpcy5faXRlbXMpcmV0dXJuO2NvbnN0IHQ9dGhpcy5faXRlbXMudG9BcnJheSgpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKHRbZV0uYWN0aXZlKXJldHVybiB0aGlzLnNlbGVjdGVkSW5kZXg9ZSx2b2lkIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO3RoaXMuc2VsZWN0ZWRJbmRleD0tMSx0aGlzLl9pbmtCYXIuaGlkZSgpfX1XQi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V0IpKFNtKGhnKSxTbShISSw4KSxTbShhXyksU20oVWcpLFNtKHVGKSxTbSh3eiksU20oVlAsOCkpfSxXQi7JtWRpcj1sbyh7dHlwZTpXQixpbnB1dHM6e2NvbG9yOiJjb2xvciIsYmFja2dyb3VuZENvbG9yOiJiYWNrZ3JvdW5kQ29sb3IiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUifSxmZWF0dXJlczpbeHBdfSksV0IuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpoZ30se3R5cGU6SEksZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6YV99LHt0eXBlOlVnfSx7dHlwZTp1Rn0se3R5cGU6d3p9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbVlBdfV19XSxXQi5wcm9wRGVjb3JhdG9ycz17YmFja2dyb3VuZENvbG9yOlt7dHlwZTp4eX1dLGRpc2FibGVSaXBwbGU6W3t0eXBlOnh5fV0sY29sb3I6W3t0eXBlOnh5fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoV0IsW3t0eXBlOkN5fV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfSx7dHlwZTpISSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTphX30se3R5cGU6VWd9LHt0eXBlOnVGfSx7dHlwZTp3en0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltWUF19XX1dfSkse2NvbG9yOlt7dHlwZTp4eX1dLGJhY2tncm91bmRDb2xvcjpbe3R5cGU6eHl9XSxkaXNhYmxlUmlwcGxlOlt7dHlwZTp4eX1dfSk7Y2xhc3MgWUIgZXh0ZW5kcyBXQntjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyKXtzdXBlcih0LGUsbixvLGksYSxyKX19WUIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFlCKShTbShoZyksU20oSEksOCksU20oYV8pLFNtKFVnKSxTbSh1RiksU20od3opLFNtKFZQLDgpKX0sWUIuybVjbXA9dG8oe3R5cGU6WUIsc2VsZWN0b3JzOltbIiIsIm1hdC10YWItbmF2LWJhciIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbiB0KGUsbixvKXtpZigxJmUmJiRoKG8sWEIsNSksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi5faXRlbXM9dCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFFoKE1CLDcpLFFoKGdCLDcpLFFoKGhCLDcpLFFoKGJCLDUpLFFoKHlCLDUpKSwyJmUpe2xldCB0O0poKHQ9dGIoKSkmJihuLl9pbmtCYXI9dC5maXJzdCksSmgodD10YigpKSYmKG4uX3RhYkxpc3RDb250YWluZXI9dC5maXJzdCksSmgodD10YigpKSYmKG4uX3RhYkxpc3Q9dC5maXJzdCksSmgodD10YigpKSYmKG4uX25leHRQYWdpbmF0b3I9dC5maXJzdCksSmgodD10YigpKSYmKG4uX3ByZXZpb3VzUGFnaW5hdG9yPXQuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtdGFiLW5hdi1iYXIiLCJtYXQtdGFiLWhlYWRlciJdLGhvc3RWYXJzOjEwLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZwdSgibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jb250cm9scy1lbmFibGVkIixuLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzKSgibWF0LXRhYi1oZWFkZXItcnRsIiwicnRsIj09bi5fZ2V0TGF5b3V0RGlyZWN0aW9uKCkpKCJtYXQtcHJpbWFyeSIsIndhcm4iIT09bi5jb2xvciYmImFjY2VudCIhPT1uLmNvbG9yKSgibWF0LWFjY2VudCIsImFjY2VudCI9PT1uLmNvbG9yKSgibWF0LXdhcm4iLCJ3YXJuIj09PW4uY29sb3IpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciJ9LGV4cG9ydEFzOlsibWF0VGFiTmF2QmFyIiwibWF0VGFiTmF2Il0sZmVhdHVyZXM6W3hwXSxhdHRyczpbIm1hdC10YWItbmF2LWJhciIsIiJdLG5nQ29udGVudFNlbGVjdG9yczppQixkZWNsczoxMyx2YXJzOjgsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSIsIm1hdC1yaXBwbGUiLCIiLDEsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24iLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSIsIm1hdC1lbGV2YXRpb24tejQiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwiY2xpY2siLCJtb3VzZWRvd24iLCJ0b3VjaGVuZCJdLFsicHJldmlvdXNQYWdpbmF0b3IiLCIiXSxbMSwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIl0sWzEsIm1hdC10YWItbGluay1jb250YWluZXIiLDMsImtleWRvd24iXSxbInRhYkxpc3RDb250YWluZXIiLCIiXSxbMSwibWF0LXRhYi1saXN0IiwzLCJjZGtPYnNlcnZlQ29udGVudCJdLFsidGFiTGlzdCIsIiJdLFsxLCJtYXQtdGFiLWxpbmtzIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJtYXQtcmlwcGxlIiwiIiwxLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIiwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciIsIm1hdC1lbGV2YXRpb24tejQiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwibW91c2Vkb3duIiwiY2xpY2siLCJ0b3VjaGVuZCJdLFsibmV4dFBhZ2luYXRvciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoWm0oKSxSbSgwLCJkaXYiLDAsMSksVm0oImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9oYW5kbGVQYWdpbmF0b3JDbGljaygiYmVmb3JlIil9KSkoIm1vdXNlZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZVBhZ2luYXRvclByZXNzKCJiZWZvcmUiLGUpfSkpKCJ0b3VjaGVuZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fc3RvcEludGVydmFsKCl9KSksVG0oMiwiZGl2IiwyKSxBbSgpLFJtKDMsImRpdiIsMyw0KSxWbSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZUtleWRvd24oZSl9KSksUm0oNSwiZGl2Iiw1LDYpLFZtKCJjZGtPYnNlcnZlQ29udGVudCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fb25Db250ZW50Q2hhbmdlcygpfSkpLFJtKDcsImRpdiIsNyksWG0oOCksQW0oKSxUbSg5LCJtYXQtaW5rLWJhciIpLEFtKCksQW0oKSxSbSgxMCwiZGl2Iiw4LDkpLFZtKCJtb3VzZWRvd24iLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9oYW5kbGVQYWdpbmF0b3JQcmVzcygiYWZ0ZXIiLGUpfSkpKCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5faGFuZGxlUGFnaW5hdG9yQ2xpY2soImFmdGVyIil9KSkoInRvdWNoZW5kIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9zdG9wSW50ZXJ2YWwoKX0pKSxUbSgxMiwiZGl2IiwyKSxBbSgpKSwyJmUmJihwdSgibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCIsbi5fZGlzYWJsZVNjcm9sbEJlZm9yZSksRG0oIm1hdFJpcHBsZURpc2FibGVkIixuLl9kaXNhYmxlU2Nyb2xsQmVmb3JlfHxuLmRpc2FibGVSaXBwbGUpLHJjKDUpLHB1KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PW4uX2FuaW1hdGlvbk1vZGUpLHJjKDUpLHB1KCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIixuLl9kaXNhYmxlU2Nyb2xsQWZ0ZXIpLERtKCJtYXRSaXBwbGVEaXNhYmxlZCIsbi5fZGlzYWJsZVNjcm9sbEFmdGVyfHxuLmRpc2FibGVSaXBwbGUpKX0sZGlyZWN0aXZlczpba0gsanosTUJdLHN0eWxlczpbJy5tYXQtdGFiLWhlYWRlcntkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjB9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjttaW4td2lkdGg6MzJweDtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RvdWNoLWFjdGlvbjpub25lfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNvbnRyb2xzLWVuYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257ZGlzcGxheTpmbGV4fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVye3BhZGRpbmctbGVmdDo0cHh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue3RyYW5zZm9ybTpyb3RhdGUoLTEzNWRlZyl9Lm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUsLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1yaWdodDo0cHh9Lm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoycHggMnB4IDAgMDtjb250ZW50OiIiO2hlaWdodDo4cHg7d2lkdGg6OHB4fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVke2JveC1zaGFkb3c6bm9uZTtjdXJzb3I6ZGVmYXVsdH0ubWF0LXRhYi1saXN0e2ZsZXgtZ3JvdzoxO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb246dHJhbnNmb3JtIDUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0ubWF0LXRhYi1saW5rc3tkaXNwbGF5OmZsZXh9W21hdC1hbGlnbi10YWJzPWNlbnRlcl0+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3N7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bbWF0LWFsaWduLXRhYnM9ZW5kXT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rc3tqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9Lm1hdC1pbmstYmFye3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2hlaWdodDoycHg7dHJhbnNpdGlvbjo1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1pbmstYmFye3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC1pbmstYmFye2JvdHRvbTphdXRvO3RvcDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1pbmstYmFye291dGxpbmU6c29saWQgMnB4O2hlaWdodDowfS5tYXQtdGFiLWxpbmstY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW47ei1pbmRleDoxfS5tYXQtdGFiLWxpbmt7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHg7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6LjY7bWluLXdpZHRoOjE2MHB4O3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO3ZlcnRpY2FsLWFsaWduOnRvcDt0ZXh0LWRlY29yYXRpb246bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtdGFiLWxpbms6Zm9jdXN7b3V0bGluZTpub25lfS5tYXQtdGFiLWxpbms6Zm9jdXM6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1saW5rOmZvY3Vze291dGxpbmU6ZG90dGVkIDJweDtvdXRsaW5lLW9mZnNldDotMnB4fS5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtdGFiLWxpbmsgLm1hdC10YWItbGFiZWwtY29udGVudHtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxpbmt7b3BhY2l0eToxfVttYXQtc3RyZXRjaC10YWJzXSAubWF0LXRhYi1saW5re2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MX0ubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZX1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10YWItbGlua3ttaW4td2lkdGg6NzJweH19XG4nXSxlbmNhcHN1bGF0aW9uOjJ9KSxZQi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTpISSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTphX30se3R5cGU6VWd9LHt0eXBlOnVGfSx7dHlwZTp3en0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltWUF19XX1dLFlCLnByb3BEZWNvcmF0b3JzPXtfaXRlbXM6W3t0eXBlOllhLGFyZ3M6W3FlKCgoKT0+WEIpKSx7ZGVzY2VuZGFudHM6ITB9XX1dLF9pbmtCYXI6W3t0eXBlOlphLGFyZ3M6W01CLHtzdGF0aWM6ITB9XX1dLF90YWJMaXN0Q29udGFpbmVyOlt7dHlwZTpaYSxhcmdzOlsidGFiTGlzdENvbnRhaW5lciIse3N0YXRpYzohMH1dfV0sX3RhYkxpc3Q6W3t0eXBlOlphLGFyZ3M6WyJ0YWJMaXN0Iix7c3RhdGljOiEwfV19XSxfbmV4dFBhZ2luYXRvcjpbe3R5cGU6WmEsYXJnczpbIm5leHRQYWdpbmF0b3IiXX1dLF9wcmV2aW91c1BhZ2luYXRvcjpbe3R5cGU6WmEsYXJnczpbInByZXZpb3VzUGFnaW5hdG9yIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChZQixbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJbbWF0LXRhYi1uYXYtYmFyXSIsZXhwb3J0QXM6Im1hdFRhYk5hdkJhciwgbWF0VGFiTmF2IixpbnB1dHM6WyJjb2xvciJdLHRlbXBsYXRlOic8ZGl2IGNsYXNzPSJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIG1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIG1hdC1lbGV2YXRpb24tejQiXG4gICAgICNwcmV2aW91c1BhZ2luYXRvclxuICAgICBhcmlhLWhpZGRlbj0idHJ1ZSJcbiAgICAgbWF0LXJpcHBsZSBbbWF0UmlwcGxlRGlzYWJsZWRdPSJfZGlzYWJsZVNjcm9sbEJlZm9yZSB8fCBkaXNhYmxlUmlwcGxlIlxuICAgICBbY2xhc3MubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZF09Il9kaXNhYmxlU2Nyb2xsQmVmb3JlIlxuICAgICAoY2xpY2spPSJfaGFuZGxlUGFnaW5hdG9yQ2xpY2soXCdiZWZvcmVcJykiXG4gICAgIChtb3VzZWRvd24pPSJfaGFuZGxlUGFnaW5hdG9yUHJlc3MoXCdiZWZvcmVcJywgJGV2ZW50KSJcbiAgICAgKHRvdWNoZW5kKT0iX3N0b3BJbnRlcnZhbCgpIj5cbiAgPGRpdiBjbGFzcz0ibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIj48L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPSJtYXQtdGFiLWxpbmstY29udGFpbmVyIiAjdGFiTGlzdENvbnRhaW5lciAoa2V5ZG93bik9Il9oYW5kbGVLZXlkb3duKCRldmVudCkiPlxuICA8ZGl2XG4gICAgY2xhc3M9Im1hdC10YWItbGlzdCJcbiAgICBbY2xhc3MuX21hdC1hbmltYXRpb24tbm9vcGFibGVdPSJfYW5pbWF0aW9uTW9kZSA9PT0gXCdOb29wQW5pbWF0aW9uc1wnIlxuICAgICN0YWJMaXN0XG4gICAgKGNka09ic2VydmVDb250ZW50KT0iX29uQ29udGVudENoYW5nZXMoKSI+XG4gICAgPGRpdiBjbGFzcz0ibWF0LXRhYi1saW5rcyI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPG1hdC1pbmstYmFyPjwvbWF0LWluay1iYXI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9Im1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gbWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciBtYXQtZWxldmF0aW9uLXo0IlxuICAgICAjbmV4dFBhZ2luYXRvclxuICAgICBhcmlhLWhpZGRlbj0idHJ1ZSJcbiAgICAgbWF0LXJpcHBsZSBbbWF0UmlwcGxlRGlzYWJsZWRdPSJfZGlzYWJsZVNjcm9sbEFmdGVyIHx8IGRpc2FibGVSaXBwbGUiXG4gICAgIFtjbGFzcy5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkXT0iX2Rpc2FibGVTY3JvbGxBZnRlciJcbiAgICAgKG1vdXNlZG93bik9Il9oYW5kbGVQYWdpbmF0b3JQcmVzcyhcJ2FmdGVyXCcsICRldmVudCkiXG4gICAgIChjbGljayk9Il9oYW5kbGVQYWdpbmF0b3JDbGljayhcJ2FmdGVyXCcpIlxuICAgICAodG91Y2hlbmQpPSJfc3RvcEludGVydmFsKCkiPlxuICA8ZGl2IGNsYXNzPSJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24iPjwvZGl2PlxuPC9kaXY+XG4nLGhvc3Q6e2NsYXNzOiJtYXQtdGFiLW5hdi1iYXIgbWF0LXRhYi1oZWFkZXIiLCJbY2xhc3MubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jb250cm9scy1lbmFibGVkXSI6Il9zaG93UGFnaW5hdGlvbkNvbnRyb2xzIiwiW2NsYXNzLm1hdC10YWItaGVhZGVyLXJ0bF0iOiJfZ2V0TGF5b3V0RGlyZWN0aW9uKCkgPT0gJ3J0bCciLCJbY2xhc3MubWF0LXByaW1hcnldIjonY29sb3IgIT09ICJ3YXJuIiAmJiBjb2xvciAhPT0gImFjY2VudCInLCJbY2xhc3MubWF0LWFjY2VudF0iOidjb2xvciA9PT0gImFjY2VudCInLCJbY2xhc3MubWF0LXdhcm5dIjonY29sb3IgPT09ICJ3YXJuIid9LGVuY2Fwc3VsYXRpb246SG4uTm9uZSxjaGFuZ2VEZXRlY3Rpb246em4uRGVmYXVsdCxzdHlsZXM6WycubWF0LXRhYi1oZWFkZXJ7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4LXNocmluazowfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLXdpZHRoOjMycHg7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0b3VjaC1hY3Rpb246bm9uZX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jb250cm9scy1lbmFibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2Rpc3BsYXk6ZmxleH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUsLm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlcntwYWRkaW5nLWxlZnQ6NHB4fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbnt0cmFuc2Zvcm06cm90YXRlKC0xMzVkZWcpfS5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlLC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVye3BhZGRpbmctcmlnaHQ6NHB4fS5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbnt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MnB4IDJweCAwIDA7Y29udGVudDoiIjtoZWlnaHQ6OHB4O3dpZHRoOjhweH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHtib3gtc2hhZG93Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC10YWItbGlzdHtmbGV4LWdyb3c6MTtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Lm1hdC10YWItbGlua3N7ZGlzcGxheTpmbGV4fVttYXQtYWxpZ24tdGFicz1jZW50ZXJdPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmtze2p1c3RpZnktY29udGVudDpjZW50ZXJ9W21hdC1hbGlnbi10YWJzPWVuZF0+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3N7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtaW5rLWJhcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtoZWlnaHQ6MnB4O3RyYW5zaXRpb246NTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtaW5rLWJhcnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtaW5rLWJhcntib3R0b206YXV0bzt0b3A6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaW5rLWJhcntvdXRsaW5lOnNvbGlkIDJweDtoZWlnaHQ6MH0ubWF0LXRhYi1saW5rLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MX0ubWF0LXRhYi1saW5re2hlaWdodDo0OHB4O3BhZGRpbmc6MCAyNHB4O2N1cnNvcjpwb2ludGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5Oi42O21pbi13aWR0aDoxNjBweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjp0b3A7dGV4dC1kZWNvcmF0aW9uOm5vbmU7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LXRhYi1saW5rOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXRhYi1saW5rOmZvY3VzOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGluazpmb2N1c3tvdXRsaW5lOmRvdHRlZCAycHg7b3V0bGluZS1vZmZzZXQ6LTJweH0ubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7b3BhY2l0eTouNX0ubWF0LXRhYi1saW5rIC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1saW5re29wYWNpdHk6MX1bbWF0LXN0cmV0Y2gtdGFic10gLm1hdC10YWItbGlua3tmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjF9Lm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmV9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpey5tYXQtdGFiLWxpbmt7bWluLXdpZHRoOjcycHh9fVxuJ119XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpoZ30se3R5cGU6SEksZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6YV99LHt0eXBlOlVnfSx7dHlwZTp1Rn0se3R5cGU6d3p9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbVlBdfV19XX0pLHtfaXRlbXM6W3t0eXBlOllhLGFyZ3M6W3FlKCgoKT0+WEIpKSx7ZGVzY2VuZGFudHM6ITB9XX1dLF9pbmtCYXI6W3t0eXBlOlphLGFyZ3M6W01CLHtzdGF0aWM6ITB9XX1dLF90YWJMaXN0Q29udGFpbmVyOlt7dHlwZTpaYSxhcmdzOlsidGFiTGlzdENvbnRhaW5lciIse3N0YXRpYzohMH1dfV0sX3RhYkxpc3Q6W3t0eXBlOlphLGFyZ3M6WyJ0YWJMaXN0Iix7c3RhdGljOiEwfV19XSxfbmV4dFBhZ2luYXRvcjpbe3R5cGU6WmEsYXJnczpbIm5leHRQYWdpbmF0b3IiXX1dLF9wcmV2aW91c1BhZ2luYXRvcjpbe3R5cGU6WmEsYXJnczpbInByZXZpb3VzUGFnaW5hdG9yIl19XX0pO2NvbnN0IHFCPSRJKFFJKEtJKGNsYXNze30pKSk7Y2xhc3MgWkIgZXh0ZW5kcyBxQntjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSl7c3VwZXIoKSx0aGlzLl90YWJOYXZCYXI9dCx0aGlzLmVsZW1lbnRSZWY9ZSx0aGlzLl9mb2N1c01vbml0b3I9aSx0aGlzLl9pc0FjdGl2ZT0hMSx0aGlzLnJpcHBsZUNvbmZpZz1ufHx7fSx0aGlzLnRhYkluZGV4PXBhcnNlSW50KG8pfHwwLCJOb29wQW5pbWF0aW9ucyI9PT1hJiYodGhpcy5yaXBwbGVDb25maWcuYW5pbWF0aW9uPXtlbnRlckR1cmF0aW9uOjAsZXhpdER1cmF0aW9uOjB9KX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuX2lzQWN0aXZlfXNldCBhY3RpdmUodCl7eXoodCkhPT10aGlzLl9pc0FjdGl2ZSYmKHRoaXMuX2lzQWN0aXZlPXQsdGhpcy5fdGFiTmF2QmFyLnVwZGF0ZUFjdGl2ZUxpbmsoKSl9Z2V0IHJpcHBsZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5fdGFiTmF2QmFyLmRpc2FibGVSaXBwbGV8fCEhdGhpcy5yaXBwbGVDb25maWcuZGlzYWJsZWR9Zm9jdXMoKXt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuZWxlbWVudFJlZil9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5lbGVtZW50UmVmKX1faGFuZGxlRm9jdXMoKXt0aGlzLl90YWJOYXZCYXIuZm9jdXNJbmRleD10aGlzLl90YWJOYXZCYXIuX2l0ZW1zLnRvQXJyYXkoKS5pbmRleE9mKHRoaXMpfX1aQi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WkIpKFNtKFdCKSxTbShoZyksU20od0gsOCksTmEoInRhYmluZGV4IiksU20oU0kpLFNtKFZQLDgpKX0sWkIuybVkaXI9bG8oe3R5cGU6WkIsaW5wdXRzOnthY3RpdmU6ImFjdGl2ZSJ9LGZlYXR1cmVzOlt4cF19KSxaQi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOldCfSx7dHlwZTpoZ30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOlt3SF19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmphLGFyZ3M6WyJ0YWJpbmRleCJdfV19LHt0eXBlOlNJfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1ZQXX1dfV0sWkIucHJvcERlY29yYXRvcnM9e2FjdGl2ZTpbe3R5cGU6eHl9XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChaQixbe3R5cGU6Q3l9XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6V0J9LHt0eXBlOmhnfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W3dIXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6amEsYXJnczpbInRhYmluZGV4Il19XX0se3R5cGU6U0l9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbVlBdfV19XX0pLHthY3RpdmU6W3t0eXBlOnh5fV19KTtjbGFzcyBYQiBleHRlbmRzIFpCe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyl7c3VwZXIodCxlLGksYSxyLHMpLHRoaXMuX3RhYkxpbmtSaXBwbGU9bmV3IFBIKHRoaXMsbixlLG8pLHRoaXMuX3RhYkxpbmtSaXBwbGUuc2V0dXBUcmlnZ2VyRXZlbnRzKGUubmF0aXZlRWxlbWVudCl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuX3RhYkxpbmtSaXBwbGUuX3JlbW92ZVRyaWdnZXJFdmVudHMoKX19WEIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFhCKShTbShZQiksU20oaGcpLFNtKGFfKSxTbSh3eiksU20od0gsOCksTmEoInRhYmluZGV4IiksU20oU0kpLFNtKFZQLDgpKX0sWEIuybVkaXI9bG8oe3R5cGU6WEIsc2VsZWN0b3JzOltbIiIsIm1hdC10YWItbGluayIsIiJdLFsiIiwibWF0VGFiTGluayIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC10YWItbGluayIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZWbSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2hhbmRsZUZvY3VzKCl9KSksMiZlJiYoanAoImFyaWEtY3VycmVudCIsbi5hY3RpdmU/InBhZ2UiOm51bGwpKCJhcmlhLWRpc2FibGVkIixuLmRpc2FibGVkKSgidGFiSW5kZXgiLG4udGFiSW5kZXgpLHB1KCJtYXQtdGFiLWRpc2FibGVkIixuLmRpc2FibGVkKSgibWF0LXRhYi1sYWJlbC1hY3RpdmUiLG4uYWN0aXZlKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIix0YWJJbmRleDoidGFiSW5kZXgifSxleHBvcnRBczpbIm1hdFRhYkxpbmsiXSxmZWF0dXJlczpbeHBdfSksWEIuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpZQn0se3R5cGU6aGd9LHt0eXBlOmFffSx7dHlwZTp3en0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOlt3SF19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmphLGFyZ3M6WyJ0YWJpbmRleCJdfV19LHt0eXBlOlNJfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1ZQXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChYQixbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbbWF0LXRhYi1saW5rXSwgW21hdFRhYkxpbmtdIixleHBvcnRBczoibWF0VGFiTGluayIsaW5wdXRzOlsiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiXSxob3N0OntjbGFzczoibWF0LXRhYi1saW5rIG1hdC1mb2N1cy1pbmRpY2F0b3IiLCJbYXR0ci5hcmlhLWN1cnJlbnRdIjonYWN0aXZlID8gInBhZ2UiIDogbnVsbCcsIlthdHRyLmFyaWEtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbYXR0ci50YWJJbmRleF0iOiJ0YWJJbmRleCIsIltjbGFzcy5tYXQtdGFiLWRpc2FibGVkXSI6ImRpc2FibGVkIiwiW2NsYXNzLm1hdC10YWItbGFiZWwtYWN0aXZlXSI6ImFjdGl2ZSIsIihmb2N1cykiOiJfaGFuZGxlRm9jdXMoKSJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WUJ9LHt0eXBlOmhnfSx7dHlwZTphX30se3R5cGU6d3p9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbd0hdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpqYSxhcmdzOlsidGFiaW5kZXgiXX1dfSx7dHlwZTpTSX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltWUF19XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBLQnt9S0IuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEtCKX0sS0IuybVtb2Q9YW8oe3R5cGU6S0J9KSxLQi7JtWluaj12bih7aW1wb3J0czpbW1dNLFhJLFJGLFNILFV6LE5JXSxYSV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEtCLFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbV00sWEksUkYsU0gsVXosTkldLGV4cG9ydHM6W1hJLEZCLFBCLFNCLFlCLFhCLHhCXSxkZWNsYXJhdGlvbnM6W0ZCLFBCLFNCLE1CLEJCLFlCLFhCLEFCLEVCLEdCLHhCXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKEtCLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bRkIsUEIsU0IsTUIsQkIsWUIsWEIsQUIsRUIsR0IseEJdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1dNLFhJLFJGLFNILFV6LE5JXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltYSSxGQixQQixTQixZQixYQix4Ql19fSk7Y29uc3QgSkI9WyJ1bmRlcmxpbmUiXSxRQj1bImNvbm5lY3Rpb25Db250YWluZXIiXSwkQj1bImlucHV0Q29udGFpbmVyIl0sdFY9WyJsYWJlbCJdO2Z1bmN0aW9uIGVWKHQsZSl7MSZ0JiYoTm0oMCksUm0oMSwiZGl2IiwxNCksVG0oMiwiZGl2IiwxNSksVG0oMywiZGl2IiwxNiksVG0oNCwiZGl2IiwxNyksQW0oKSxSbSg1LCJkaXYiLDE4KSxUbSg2LCJkaXYiLDE1KSxUbSg3LCJkaXYiLDE2KSxUbSg4LCJkaXYiLDE3KSxBbSgpLHptKCkpfWZ1bmN0aW9uIG5WKHQsZSl7MSZ0JiYoUm0oMCwiZGl2IiwxOSksWG0oMSwxKSxBbSgpKX1mdW5jdGlvbiBvVih0LGUpe2lmKDEmdCYmKE5tKDApLFhtKDEsMiksUm0oMiwic3BhbiIpLGt1KDMpLEFtKCksem0oKSksMiZ0KXtjb25zdCB0PVltKDIpO3JjKDMpLFN1KHQuX2NvbnRyb2wucGxhY2Vob2xkZXIpfX1mdW5jdGlvbiBpVih0LGUpezEmdCYmWG0oMCwzLFsiKm5nU3dpdGNoQ2FzZSIsInRydWUiXSl9ZnVuY3Rpb24gYVYodCxlKXsxJnQmJihSbSgwLCJzcGFuIiwyMyksa3UoMSwiICoiKSxBbSgpKX1mdW5jdGlvbiByVih0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsImxhYmVsIiwyMCwyMSksVm0oImNka09ic2VydmVDb250ZW50IiwoZnVuY3Rpb24gZSgpe3JldHVybiBoaSh0KSxZbSgpLnVwZGF0ZU91dGxpbmVHYXAoKX0pKSxRcCgyLG9WLDQsMSwibmctY29udGFpbmVyIiwxMiksUXAoMyxpViwxLDAsIm5nLWNvbnRlbnQiLDEyKSxRcCg0LGFWLDIsMCwic3BhbiIsMjIpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PVltKCk7cHUoIm1hdC1lbXB0eSIsdC5fY29udHJvbC5lbXB0eSYmIXQuX3Nob3VsZEFsd2F5c0Zsb2F0KCkpKCJtYXQtZm9ybS1maWVsZC1lbXB0eSIsdC5fY29udHJvbC5lbXB0eSYmIXQuX3Nob3VsZEFsd2F5c0Zsb2F0KCkpKCJtYXQtYWNjZW50IiwiYWNjZW50Ij09dC5jb2xvcikoIm1hdC13YXJuIiwid2FybiI9PXQuY29sb3IpLERtKCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwib3V0bGluZSIhPXQuYXBwZWFyYW5jZSkoImlkIix0Ll9sYWJlbElkKSgibmdTd2l0Y2giLHQuX2hhc0xhYmVsKCkpLGpwKCJmb3IiLHQuX2NvbnRyb2wuaWQpKCJhcmlhLW93bnMiLHQuX2NvbnRyb2wuaWQpLHJjKDIpLERtKCJuZ1N3aXRjaENhc2UiLCExKSxyYygxKSxEbSgibmdTd2l0Y2hDYXNlIiwhMCkscmMoMSksRG0oIm5nSWYiLCF0LmhpZGVSZXF1aXJlZE1hcmtlciYmdC5fY29udHJvbC5yZXF1aXJlZCYmIXQuX2NvbnRyb2wuZGlzYWJsZWQpfX1mdW5jdGlvbiBzVih0LGUpezEmdCYmKFJtKDAsImRpdiIsMjQpLFhtKDEsNCksQW0oKSl9ZnVuY3Rpb24gbFYodCxlKXtpZigxJnQmJihSbSgwLCJkaXYiLDI1LDI2KSxUbSgyLCJzcGFuIiwyNyksQW0oKSksMiZ0KXtjb25zdCB0PVltKCk7cmMoMikscHUoIm1hdC1hY2NlbnQiLCJhY2NlbnQiPT10LmNvbG9yKSgibWF0LXdhcm4iLCJ3YXJuIj09dC5jb2xvcil9fWZ1bmN0aW9uIGNWKHQsZSl7MSZ0JiYoUm0oMCwiZGl2IiksWG0oMSw1KSxBbSgpKSwyJnQmJkRtKCJAdHJhbnNpdGlvbk1lc3NhZ2VzIixZbSgpLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZSl9ZnVuY3Rpb24gZFYodCxlKXtpZigxJnQmJihSbSgwLCJkaXYiLDMxKSxrdSgxKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oMik7RG0oImlkIix0Ll9oaW50TGFiZWxJZCkscmMoMSksU3UodC5oaW50TGFiZWwpfX1mdW5jdGlvbiBwVih0LGUpe2lmKDEmdCYmKFJtKDAsImRpdiIsMjgpLFFwKDEsZFYsMiwyLCJkaXYiLDI5KSxYbSgyLDYpLFRtKDMsImRpdiIsMzApLFhtKDQsNyksQW0oKSksMiZ0KXtjb25zdCB0PVltKCk7RG0oIkB0cmFuc2l0aW9uTWVzc2FnZXMiLHQuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlKSxyYygxKSxEbSgibmdJZiIsdC5oaW50TGFiZWwpfX1jb25zdCBtVj1bIioiLFtbIiIsIm1hdFByZWZpeCIsIiJdXSxbWyJtYXQtcGxhY2Vob2xkZXIiXV0sW1sibWF0LWxhYmVsIl1dLFtbIiIsIm1hdFN1ZmZpeCIsIiJdXSxbWyJtYXQtZXJyb3IiXV0sW1sibWF0LWhpbnQiLDMsImFsaWduIiwiZW5kIl1dLFtbIm1hdC1oaW50IiwiYWxpZ24iLCJlbmQiXV1dO2xldCB1Vj0wO2NvbnN0IGZWPW5ldyBHYSgiTWF0RXJyb3IiKTtjbGFzcyBnVntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuaWQ9Im1hdC1lcnJvci0iK3VWKyssdHx8ZS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIil9fWdWLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxnVikoTmEoImFyaWEtbGl2ZSIpLFNtKGhnKSl9LGdWLsm1ZGlyPWxvKHt0eXBlOmdWLHNlbGVjdG9yczpbWyJtYXQtZXJyb3IiXV0saG9zdEF0dHJzOlsiYXJpYS1hdG9taWMiLCJ0cnVlIiwxLCJtYXQtZXJyb3IiXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZqcCgiaWQiLG4uaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6ZlYsdXNlRXhpc3Rpbmc6Z1Z9XSldfSksZ1YuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6amEsYXJnczpbImFyaWEtbGl2ZSJdfV19LHt0eXBlOmhnfV0sZ1YucHJvcERlY29yYXRvcnM9e2lkOlt7dHlwZTp4eX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGdWLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6Im1hdC1lcnJvciIsaG9zdDp7Y2xhc3M6Im1hdC1lcnJvciIsIlthdHRyLmlkXSI6ImlkIiwiYXJpYS1hdG9taWMiOiJ0cnVlIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpmVix1c2VFeGlzdGluZzpnVn1dfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmphLGFyZ3M6WyJhcmlhLWxpdmUiXX1dfSx7dHlwZTpoZ31dfSkse2lkOlt7dHlwZTp4eX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBoVj17dHJhbnNpdGlvbk1lc3NhZ2VzOm54KCJ0cmFuc2l0aW9uTWVzc2FnZXMiLFtyeCgiZW50ZXIiLGF4KHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDAlKSJ9KSksbHgoInZvaWQgPT4gZW50ZXIiLFtheCh7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlWSgtNXB4KSJ9KSxveCgiMzAwbXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMikiKV0pXSl9OwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBiVnt9ZnVuY3Rpb24geVYodCl7cmV0dXJuIEVycm9yKGBBIGhpbnQgd2FzIGFscmVhZHkgZGVjbGFyZWQgZm9yICdhbGlnbj0iJHt0fSInLmApfWJWLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxiVil9LGJWLsm1ZGlyPWxvKHt0eXBlOmJWfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChiVixbe3R5cGU6Q3l9XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KbGV0IF9WPTA7Y29uc3QgQ1Y9bmV3IEdhKCJNYXRIaW50Iik7Y2xhc3MgTVZ7Y29uc3RydWN0b3IoKXt0aGlzLmFsaWduPSJzdGFydCIsdGhpcy5pZD0ibWF0LWhpbnQtIitfVisrfX1NVi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TVYpfSxNVi7JtWRpcj1sbyh7dHlwZTpNVixzZWxlY3RvcnM6W1sibWF0LWhpbnQiXV0saG9zdEF0dHJzOlsxLCJtYXQtaGludCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihqcCgiaWQiLG4uaWQpKCJhbGlnbiIsbnVsbCkscHUoIm1hdC1mb3JtLWZpZWxkLWhpbnQtZW5kIiwiZW5kIj09PW4uYWxpZ24pKX0saW5wdXRzOnthbGlnbjoiYWxpZ24iLGlkOiJpZCJ9LGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6Q1YsdXNlRXhpc3Rpbmc6TVZ9XSldfSksTVYucHJvcERlY29yYXRvcnM9e2FsaWduOlt7dHlwZTp4eX1dLGlkOlt7dHlwZTp4eX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKE1WLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6Im1hdC1oaW50Iixob3N0OntjbGFzczoibWF0LWhpbnQiLCJbY2xhc3MubWF0LWZvcm0tZmllbGQtaGludC1lbmRdIjonYWxpZ24gPT09ICJlbmQiJywiW2F0dHIuaWRdIjoiaWQiLCJbYXR0ci5hbGlnbl0iOiJudWxsIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpDVix1c2VFeGlzdGluZzpNVn1dfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLHthbGlnbjpbe3R5cGU6eHl9XSxpZDpbe3R5cGU6eHl9XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgdlZ7fXZWLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx2Vil9LHZWLsm1ZGlyPWxvKHt0eXBlOnZWLHNlbGVjdG9yczpbWyJtYXQtbGFiZWwiXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHZWLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6Im1hdC1sYWJlbCJ9XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyB4Vnt9eFYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHhWKX0seFYuybVkaXI9bG8oe3R5cGU6eFYsc2VsZWN0b3JzOltbIm1hdC1wbGFjZWhvbGRlciJdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoeFYsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoibWF0LXBsYWNlaG9sZGVyIn1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IE9WPW5ldyBHYSgiTWF0UHJlZml4Iik7Y2xhc3MgUFZ7fVBWLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxQVil9LFBWLsm1ZGlyPWxvKHt0eXBlOlBWLHNlbGVjdG9yczpbWyIiLCJtYXRQcmVmaXgiLCIiXV0sZmVhdHVyZXM6W3BnKFt7cHJvdmlkZTpPVix1c2VFeGlzdGluZzpQVn1dKV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFBWLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6IlttYXRQcmVmaXhdIixwcm92aWRlcnM6W3twcm92aWRlOk9WLHVzZUV4aXN0aW5nOlBWfV19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCB3Vj1uZXcgR2EoIk1hdFN1ZmZpeCIpO2NsYXNzIGtWe31rVi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8a1YpfSxrVi7JtWRpcj1sbyh7dHlwZTprVixzZWxlY3RvcnM6W1siIiwibWF0U3VmZml4IiwiIl1dLGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6d1YsdXNlRXhpc3Rpbmc6a1Z9XSldfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChrVixbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbbWF0U3VmZml4XSIscHJvdmlkZXJzOlt7cHJvdmlkZTp3Vix1c2VFeGlzdGluZzprVn1dfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KbGV0IFNWPTA7Y29uc3QgRFY9SkkoY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZWxlbWVudFJlZj10fX0sInByaW1hcnkiKSxFVj1uZXcgR2EoIk1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUyIpLFJWPW5ldyBHYSgiTWF0Rm9ybUZpZWxkIik7Y2xhc3MgQVYgZXh0ZW5kcyBEVntjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyLHMpe3N1cGVyKHQpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fZGlyPW8sdGhpcy5fZGVmYXVsdHM9aSx0aGlzLl9wbGF0Zm9ybT1hLHRoaXMuX25nWm9uZT1yLHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZEltbWVkaWF0ZWx5PSExLHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZE9uU3RhYmxlPSExLHRoaXMuX2Rlc3Ryb3llZD1uZXcgSSx0aGlzLl9zaG93QWx3YXlzQW5pbWF0ZT0hMSx0aGlzLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZT0iIix0aGlzLl9oaW50TGFiZWw9IiIsdGhpcy5faGludExhYmVsSWQ9Im1hdC1oaW50LSIrU1YrKyx0aGlzLl9sYWJlbElkPSJtYXQtZm9ybS1maWVsZC1sYWJlbC0iK1NWKyssdGhpcy5mbG9hdExhYmVsPXRoaXMuX2dldERlZmF1bHRGbG9hdExhYmVsU3RhdGUoKSx0aGlzLl9hbmltYXRpb25zRW5hYmxlZD0iTm9vcEFuaW1hdGlvbnMiIT09cyx0aGlzLmFwcGVhcmFuY2U9aSYmaS5hcHBlYXJhbmNlP2kuYXBwZWFyYW5jZToibGVnYWN5Iix0aGlzLl9oaWRlUmVxdWlyZWRNYXJrZXI9ISghaXx8bnVsbD09aS5oaWRlUmVxdWlyZWRNYXJrZXIpJiZpLmhpZGVSZXF1aXJlZE1hcmtlcn1nZXQgYXBwZWFyYW5jZSgpe3JldHVybiB0aGlzLl9hcHBlYXJhbmNlfXNldCBhcHBlYXJhbmNlKHQpe2NvbnN0IGU9dGhpcy5fYXBwZWFyYW5jZTt0aGlzLl9hcHBlYXJhbmNlPXR8fHRoaXMuX2RlZmF1bHRzJiZ0aGlzLl9kZWZhdWx0cy5hcHBlYXJhbmNlfHwibGVnYWN5Iiwib3V0bGluZSI9PT10aGlzLl9hcHBlYXJhbmNlJiZlIT09dCYmKHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZE9uU3RhYmxlPSEwKX1nZXQgaGlkZVJlcXVpcmVkTWFya2VyKCl7cmV0dXJuIHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcn1zZXQgaGlkZVJlcXVpcmVkTWFya2VyKHQpe3RoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj15eih0KX1fc2hvdWxkQWx3YXlzRmxvYXQoKXtyZXR1cm4iYWx3YXlzIj09PXRoaXMuZmxvYXRMYWJlbCYmIXRoaXMuX3Nob3dBbHdheXNBbmltYXRlfV9jYW5MYWJlbEZsb2F0KCl7cmV0dXJuIm5ldmVyIiE9PXRoaXMuZmxvYXRMYWJlbH1nZXQgaGludExhYmVsKCl7cmV0dXJuIHRoaXMuX2hpbnRMYWJlbH1zZXQgaGludExhYmVsKHQpe3RoaXMuX2hpbnRMYWJlbD10LHRoaXMuX3Byb2Nlc3NIaW50cygpfWdldCBmbG9hdExhYmVsKCl7cmV0dXJuImxlZ2FjeSIhPT10aGlzLmFwcGVhcmFuY2UmJiJuZXZlciI9PT10aGlzLl9mbG9hdExhYmVsPyJhdXRvIjp0aGlzLl9mbG9hdExhYmVsfXNldCBmbG9hdExhYmVsKHQpe3QhPT10aGlzLl9mbG9hdExhYmVsJiYodGhpcy5fZmxvYXRMYWJlbD10fHx0aGlzLl9nZXREZWZhdWx0RmxvYXRMYWJlbFN0YXRlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldCBfY29udHJvbCgpe3JldHVybiB0aGlzLl9leHBsaWNpdEZvcm1GaWVsZENvbnRyb2x8fHRoaXMuX2NvbnRyb2xOb25TdGF0aWN8fHRoaXMuX2NvbnRyb2xTdGF0aWN9c2V0IF9jb250cm9sKHQpe3RoaXMuX2V4cGxpY2l0Rm9ybUZpZWxkQ29udHJvbD10fWdldExhYmVsSWQoKXtyZXR1cm4gdGhpcy5faGFzRmxvYXRpbmdMYWJlbCgpP3RoaXMuX2xhYmVsSWQ6bnVsbH1nZXRDb25uZWN0ZWRPdmVybGF5T3JpZ2luKCl7cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25Db250YWluZXJSZWZ8fHRoaXMuX2VsZW1lbnRSZWZ9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fdmFsaWRhdGVDb250cm9sQ2hpbGQoKTtjb25zdCB0PXRoaXMuX2NvbnRyb2w7dC5jb250cm9sVHlwZSYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoYG1hdC1mb3JtLWZpZWxkLXR5cGUtJHt0LmNvbnRyb2xUeXBlfWApLHQuc3RhdGVDaGFuZ2VzLnBpcGUoTmUobnVsbCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl92YWxpZGF0ZVBsYWNlaG9sZGVycygpLHRoaXMuX3N5bmNEZXNjcmliZWRCeUlkcygpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSkpLHQubmdDb250cm9sJiZ0Lm5nQ29udHJvbC52YWx1ZUNoYW5nZXMmJnQubmdDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKEllKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEllKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZSYmdGhpcy51cGRhdGVPdXRsaW5lR2FwKCl9KSl9KSkscmUodGhpcy5fcHJlZml4Q2hpbGRyZW4uY2hhbmdlcyx0aGlzLl9zdWZmaXhDaGlsZHJlbi5jaGFuZ2VzKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSksdGhpcy5faGludENoaWxkcmVuLmNoYW5nZXMucGlwZShOZShudWxsKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX3Byb2Nlc3NIaW50cygpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSkpLHRoaXMuX2Vycm9yQ2hpbGRyZW4uY2hhbmdlcy5waXBlKE5lKG51bGwpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSksdGhpcy5fZGlyJiZ0aGlzLl9kaXIuY2hhbmdlLnBpcGUoSWUodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgoKT0+eyJmdW5jdGlvbiI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9PnRoaXMudXBkYXRlT3V0bGluZUdhcCgpKSl9KSk6dGhpcy51cGRhdGVPdXRsaW5lR2FwKCl9KSl9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7dGhpcy5fdmFsaWRhdGVDb250cm9sQ2hpbGQoKSx0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseSYmdGhpcy51cGRhdGVPdXRsaW5lR2FwKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGU9ImVudGVyIix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfV9zaG91bGRGb3J3YXJkKHQpe2NvbnN0IGU9dGhpcy5fY29udHJvbD90aGlzLl9jb250cm9sLm5nQ29udHJvbDpudWxsO3JldHVybiBlJiZlW3RdfV9oYXNQbGFjZWhvbGRlcigpe3JldHVybiEhKHRoaXMuX2NvbnRyb2wmJnRoaXMuX2NvbnRyb2wucGxhY2Vob2xkZXJ8fHRoaXMuX3BsYWNlaG9sZGVyQ2hpbGQpfV9oYXNMYWJlbCgpe3JldHVybiEoIXRoaXMuX2xhYmVsQ2hpbGROb25TdGF0aWMmJiF0aGlzLl9sYWJlbENoaWxkU3RhdGljKX1fc2hvdWxkTGFiZWxGbG9hdCgpe3JldHVybiB0aGlzLl9jYW5MYWJlbEZsb2F0KCkmJih0aGlzLl9jb250cm9sJiZ0aGlzLl9jb250cm9sLnNob3VsZExhYmVsRmxvYXR8fHRoaXMuX3Nob3VsZEFsd2F5c0Zsb2F0KCkpfV9oaWRlQ29udHJvbFBsYWNlaG9sZGVyKCl7cmV0dXJuImxlZ2FjeSI9PT10aGlzLmFwcGVhcmFuY2UmJiF0aGlzLl9oYXNMYWJlbCgpfHx0aGlzLl9oYXNMYWJlbCgpJiYhdGhpcy5fc2hvdWxkTGFiZWxGbG9hdCgpfV9oYXNGbG9hdGluZ0xhYmVsKCl7cmV0dXJuIHRoaXMuX2hhc0xhYmVsKCl8fCJsZWdhY3kiPT09dGhpcy5hcHBlYXJhbmNlJiZ0aGlzLl9oYXNQbGFjZWhvbGRlcigpfV9nZXREaXNwbGF5ZWRNZXNzYWdlcygpe3JldHVybiB0aGlzLl9lcnJvckNoaWxkcmVuJiZ0aGlzLl9lcnJvckNoaWxkcmVuLmxlbmd0aD4wJiZ0aGlzLl9jb250cm9sLmVycm9yU3RhdGU/ImVycm9yIjoiaGludCJ9X2FuaW1hdGVBbmRMb2NrTGFiZWwoKXt0aGlzLl9oYXNGbG9hdGluZ0xhYmVsKCkmJnRoaXMuX2NhbkxhYmVsRmxvYXQoKSYmKHRoaXMuX2FuaW1hdGlvbnNFbmFibGVkJiZ0aGlzLl9sYWJlbCYmKHRoaXMuX3Nob3dBbHdheXNBbmltYXRlPSEwLG9lKHRoaXMuX2xhYmVsLm5hdGl2ZUVsZW1lbnQsInRyYW5zaXRpb25lbmQiKS5waXBlKGJlKDEpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGU9ITF9KSkpLHRoaXMuZmxvYXRMYWJlbD0iYWx3YXlzIix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X3ZhbGlkYXRlUGxhY2Vob2xkZXJzKCl7aWYodGhpcy5fY29udHJvbC5wbGFjZWhvbGRlciYmdGhpcy5fcGxhY2Vob2xkZXJDaGlsZCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KdGhyb3coZnVuY3Rpb24gdCgpe3JldHVybiBFcnJvcigiUGxhY2Vob2xkZXIgYXR0cmlidXRlIGFuZCBjaGlsZCBlbGVtZW50IHdlcmUgYm90aCBzcGVjaWZpZWQuIil9KSgpfV9wcm9jZXNzSGludHMoKXt0aGlzLl92YWxpZGF0ZUhpbnRzKCksdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCl9X3ZhbGlkYXRlSGludHMoKXtpZih0aGlzLl9oaW50Q2hpbGRyZW4mJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl7bGV0IHQsZTt0aGlzLl9oaW50Q2hpbGRyZW4uZm9yRWFjaCgobj0+e2lmKCJzdGFydCI9PT1uLmFsaWduKXtpZih0fHx0aGlzLmhpbnRMYWJlbCl0aHJvdyB5Vigic3RhcnQiKTt0PW59ZWxzZSBpZigiZW5kIj09PW4uYWxpZ24pe2lmKGUpdGhyb3cgeVYoImVuZCIpO2U9bn19KSl9fV9nZXREZWZhdWx0RmxvYXRMYWJlbFN0YXRlKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRzJiZ0aGlzLl9kZWZhdWx0cy5mbG9hdExhYmVsfHwiYXV0byJ9X3N5bmNEZXNjcmliZWRCeUlkcygpe2lmKHRoaXMuX2NvbnRyb2wpe2xldCB0PVtdO2lmKHRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeSYmInN0cmluZyI9PXR5cGVvZiB0aGlzLl9jb250cm9sLnVzZXJBcmlhRGVzY3JpYmVkQnkmJnQucHVzaCguLi50aGlzLl9jb250cm9sLnVzZXJBcmlhRGVzY3JpYmVkQnkuc3BsaXQoIiAiKSksImhpbnQiPT09dGhpcy5fZ2V0RGlzcGxheWVkTWVzc2FnZXMoKSl7Y29uc3QgZT10aGlzLl9oaW50Q2hpbGRyZW4/dGhpcy5faGludENoaWxkcmVuLmZpbmQoKHQ9PiJzdGFydCI9PT10LmFsaWduKSk6bnVsbCxuPXRoaXMuX2hpbnRDaGlsZHJlbj90aGlzLl9oaW50Q2hpbGRyZW4uZmluZCgodD0+ImVuZCI9PT10LmFsaWduKSk6bnVsbDtlP3QucHVzaChlLmlkKTp0aGlzLl9oaW50TGFiZWwmJnQucHVzaCh0aGlzLl9oaW50TGFiZWxJZCksbiYmdC5wdXNoKG4uaWQpfWVsc2UgdGhpcy5fZXJyb3JDaGlsZHJlbiYmdC5wdXNoKC4uLnRoaXMuX2Vycm9yQ2hpbGRyZW4ubWFwKCh0PT50LmlkKSkpO3RoaXMuX2NvbnRyb2wuc2V0RGVzY3JpYmVkQnlJZHModCl9fV92YWxpZGF0ZUNvbnRyb2xDaGlsZCgpe2lmKCF0aGlzLl9jb250cm9sJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3coZnVuY3Rpb24gdCgpe3JldHVybiBFcnJvcigibWF0LWZvcm0tZmllbGQgbXVzdCBjb250YWluIGEgTWF0Rm9ybUZpZWxkQ29udHJvbC4iKX0pKCl9dXBkYXRlT3V0bGluZUdhcCgpe2NvbnN0IHQ9dGhpcy5fbGFiZWw/dGhpcy5fbGFiZWwubmF0aXZlRWxlbWVudDpudWxsO2lmKCJvdXRsaW5lIiE9PXRoaXMuYXBwZWFyYW5jZXx8IXR8fCF0LmNoaWxkcmVuLmxlbmd0aHx8IXQudGV4dENvbnRlbnQudHJpbSgpKXJldHVybjtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybjtpZighdGhpcy5faXNBdHRhY2hlZFRvRE9NKCkpcmV0dXJuIHZvaWQodGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHk9ITApO2xldCBlPTAsbj0wO2NvbnN0IG89dGhpcy5fY29ubmVjdGlvbkNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LGk9by5xdWVyeVNlbGVjdG9yQWxsKCIubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCIpLGE9by5xdWVyeVNlbGVjdG9yQWxsKCIubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAiKTtpZih0aGlzLl9sYWJlbCYmdGhpcy5fbGFiZWwubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpe2NvbnN0IGk9by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigwPT09aS53aWR0aCYmMD09PWkuaGVpZ2h0KXJldHVybiB0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT0hMCx2b2lkKHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZEltbWVkaWF0ZWx5PSExKTtjb25zdCBhPXRoaXMuX2dldFN0YXJ0RW5kKGkpLHI9dC5jaGlsZHJlbixzPXRoaXMuX2dldFN0YXJ0RW5kKHJbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO2xldCBsPTA7Zm9yKGxldCB0PTA7dDxyLmxlbmd0aDt0KyspbCs9clt0XS5vZmZzZXRXaWR0aDtlPU1hdGguYWJzKHMtYSktNSxuPWw+MD8uNzUqbCsxMDowfWZvcihsZXQgdD0wO3Q8aS5sZW5ndGg7dCsrKWlbdF0uc3R5bGUud2lkdGg9YCR7ZX1weGA7Zm9yKGxldCB0PTA7dDxhLmxlbmd0aDt0KyspYVt0XS5zdHlsZS53aWR0aD1gJHtufXB4YDt0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT10aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseT0hMX1fZ2V0U3RhcnRFbmQodCl7cmV0dXJuIHRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/dC5yaWdodDp0LmxlZnR9X2lzQXR0YWNoZWRUb0RPTSgpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKHQuZ2V0Um9vdE5vZGUpe2NvbnN0IGU9dC5nZXRSb290Tm9kZSgpO3JldHVybiBlJiZlIT09dH1yZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKHQpfX1BVi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QVYpKFNtKGhnKSxTbShVZyksU20oaGcpLFNtKEhJLDgpLFNtKEVWLDgpLFNtKHd6KSxTbShhXyksU20oVlAsOCkpfSxBVi7JtWNtcD10byh7dHlwZTpBVixzZWxlY3RvcnM6W1sibWF0LWZvcm0tZmllbGQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYoJGgobyxiViw1KSwkaChvLGJWLDcpLCRoKG8sdlYsNSksJGgobyx2Viw3KSwkaChvLHhWLDUpLCRoKG8sZlYsNSksJGgobyxDViw1KSwkaChvLE9WLDUpLCRoKG8sd1YsNSkpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4uX2NvbnRyb2xOb25TdGF0aWM9dC5maXJzdCksSmgodD10YigpKSYmKG4uX2NvbnRyb2xTdGF0aWM9dC5maXJzdCksSmgodD10YigpKSYmKG4uX2xhYmVsQ2hpbGROb25TdGF0aWM9dC5maXJzdCksSmgodD10YigpKSYmKG4uX2xhYmVsQ2hpbGRTdGF0aWM9dC5maXJzdCksSmgodD10YigpKSYmKG4uX3BsYWNlaG9sZGVyQ2hpbGQ9dC5maXJzdCksSmgodD10YigpKSYmKG4uX2Vycm9yQ2hpbGRyZW49dCksSmgodD10YigpKSYmKG4uX2hpbnRDaGlsZHJlbj10KSxKaCh0PXRiKCkpJiYobi5fcHJlZml4Q2hpbGRyZW49dCksSmgodD10YigpKSYmKG4uX3N1ZmZpeENoaWxkcmVuPXQpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihRaChKQiw1KSxRaChRQiw3KSxRaCgkQiw1KSxRaCh0Viw1KSksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi51bmRlcmxpbmVSZWY9dC5maXJzdCksSmgodD10YigpKSYmKG4uX2Nvbm5lY3Rpb25Db250YWluZXJSZWY9dC5maXJzdCksSmgodD10YigpKSYmKG4uX2lucHV0Q29udGFpbmVyUmVmPXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLl9sYWJlbD10LmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LWZvcm0tZmllbGQiXSxob3N0VmFyczo0MCxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmcHUoIm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQiLCJzdGFuZGFyZCI9PW4uYXBwZWFyYW5jZSkoIm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCIsImZpbGwiPT1uLmFwcGVhcmFuY2UpKCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUiLCJvdXRsaW5lIj09bi5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kiLCJsZWdhY3kiPT1uLmFwcGVhcmFuY2UpKCJtYXQtZm9ybS1maWVsZC1pbnZhbGlkIixuLl9jb250cm9sLmVycm9yU3RhdGUpKCJtYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQiLG4uX2NhbkxhYmVsRmxvYXQoKSkoIm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCIsbi5fc2hvdWxkTGFiZWxGbG9hdCgpKSgibWF0LWZvcm0tZmllbGQtaGFzLWxhYmVsIixuLl9oYXNGbG9hdGluZ0xhYmVsKCkpKCJtYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIixuLl9oaWRlQ29udHJvbFBsYWNlaG9sZGVyKCkpKCJtYXQtZm9ybS1maWVsZC1kaXNhYmxlZCIsbi5fY29udHJvbC5kaXNhYmxlZCkoIm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsZWQiLG4uX2NvbnRyb2wuYXV0b2ZpbGxlZCkoIm1hdC1mb2N1c2VkIixuLl9jb250cm9sLmZvY3VzZWQpKCJuZy11bnRvdWNoZWQiLG4uX3Nob3VsZEZvcndhcmQoInVudG91Y2hlZCIpKSgibmctdG91Y2hlZCIsbi5fc2hvdWxkRm9yd2FyZCgidG91Y2hlZCIpKSgibmctcHJpc3RpbmUiLG4uX3Nob3VsZEZvcndhcmQoInByaXN0aW5lIikpKCJuZy1kaXJ0eSIsbi5fc2hvdWxkRm9yd2FyZCgiZGlydHkiKSkoIm5nLXZhbGlkIixuLl9zaG91bGRGb3J3YXJkKCJ2YWxpZCIpKSgibmctaW52YWxpZCIsbi5fc2hvdWxkRm9yd2FyZCgiaW52YWxpZCIpKSgibmctcGVuZGluZyIsbi5fc2hvdWxkRm9yd2FyZCgicGVuZGluZyIpKSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCFuLl9hbmltYXRpb25zRW5hYmxlZCl9LGlucHV0czp7Y29sb3I6ImNvbG9yIixmbG9hdExhYmVsOiJmbG9hdExhYmVsIixhcHBlYXJhbmNlOiJhcHBlYXJhbmNlIixoaWRlUmVxdWlyZWRNYXJrZXI6ImhpZGVSZXF1aXJlZE1hcmtlciIsaGludExhYmVsOiJoaW50TGFiZWwifSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdLGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6UlYsdXNlRXhpc3Rpbmc6QVZ9XSkseHBdLG5nQ29udGVudFNlbGVjdG9yczpbIioiLCJbbWF0UHJlZml4XSIsIm1hdC1wbGFjZWhvbGRlciIsIm1hdC1sYWJlbCIsIlttYXRTdWZmaXhdIiwibWF0LWVycm9yIiwibWF0LWhpbnQ6bm90KFthbGlnbj0nZW5kJ10pIiwibWF0LWhpbnRbYWxpZ249J2VuZCddIl0sZGVjbHM6MTUsdmFyczo4LGNvbnN0czpbWzEsIm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIiXSxbMSwibWF0LWZvcm0tZmllbGQtZmxleCIsMywiY2xpY2siXSxbImNvbm5lY3Rpb25Db250YWluZXIiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1wcmVmaXgiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtaW5maXgiXSxbImlucHV0Q29udGFpbmVyIiwiIl0sWzEsIm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIiXSxbImNsYXNzIiwibWF0LWZvcm0tZmllbGQtbGFiZWwiLDMsImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJpZCIsIm1hdC1lbXB0eSIsIm1hdC1mb3JtLWZpZWxkLWVtcHR5IiwibWF0LWFjY2VudCIsIm1hdC13YXJuIiwibmdTd2l0Y2giLCJjZGtPYnNlcnZlQ29udGVudCIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1zdWZmaXgiLDQsIm5nSWYiXSxbImNsYXNzIiwibWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIiw0LCJuZ0lmIl0sWzEsIm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyIiwzLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwibWF0LWZvcm0tZmllbGQtaGludC13cmFwcGVyIiw0LCJuZ1N3aXRjaENhc2UiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZSJdLFsxLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Il0sWzEsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwIl0sWzEsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIl0sWzEsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUiLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIl0sWzEsIm1hdC1mb3JtLWZpZWxkLXByZWZpeCJdLFsxLCJtYXQtZm9ybS1maWVsZC1sYWJlbCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImlkIiwibmdTd2l0Y2giLCJjZGtPYnNlcnZlQ29udGVudCJdLFsibGFiZWwiLCIiXSxbImNsYXNzIiwibWF0LXBsYWNlaG9sZGVyLXJlcXVpcmVkIG1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtYXQtcGxhY2Vob2xkZXItcmVxdWlyZWQiLCJtYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIiXSxbMSwibWF0LWZvcm0tZmllbGQtc3VmZml4Il0sWzEsIm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSJdLFsidW5kZXJsaW5lIiwiIl0sWzEsIm1hdC1mb3JtLWZpZWxkLXJpcHBsZSJdLFsxLCJtYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXIiXSxbImNsYXNzIiwibWF0LWhpbnQiLDMsImlkIiw0LCJuZ0lmIl0sWzEsIm1hdC1mb3JtLWZpZWxkLWhpbnQtc3BhY2VyIl0sWzEsIm1hdC1oaW50IiwzLCJpZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoWm0obVYpLFJtKDAsImRpdiIsMCksUm0oMSwiZGl2IiwxLDIpLFZtKCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2NvbnRyb2wub25Db250YWluZXJDbGljayYmbi5fY29udHJvbC5vbkNvbnRhaW5lckNsaWNrKGUpfSkpLFFwKDMsZVYsOSwwLCJuZy1jb250YWluZXIiLDMpLFFwKDQsblYsMiwwLCJkaXYiLDQpLFJtKDUsImRpdiIsNSw2KSxYbSg3KSxSbSg4LCJzcGFuIiw3KSxRcCg5LHJWLDUsMTYsImxhYmVsIiw4KSxBbSgpLEFtKCksUXAoMTAsc1YsMiwwLCJkaXYiLDkpLEFtKCksUXAoMTEsbFYsMyw0LCJkaXYiLDEwKSxSbSgxMiwiZGl2IiwxMSksUXAoMTMsY1YsMiwxLCJkaXYiLDEyKSxRcCgxNCxwViw1LDIsImRpdiIsMTMpLEFtKCksQW0oKSksMiZlJiYocmMoMyksRG0oIm5nSWYiLCJvdXRsaW5lIj09bi5hcHBlYXJhbmNlKSxyYygxKSxEbSgibmdJZiIsbi5fcHJlZml4Q2hpbGRyZW4ubGVuZ3RoKSxyYyg1KSxEbSgibmdJZiIsbi5faGFzRmxvYXRpbmdMYWJlbCgpKSxyYygxKSxEbSgibmdJZiIsbi5fc3VmZml4Q2hpbGRyZW4ubGVuZ3RoKSxyYygxKSxEbSgibmdJZiIsIm91dGxpbmUiIT1uLmFwcGVhcmFuY2UpLHJjKDEpLERtKCJuZ1N3aXRjaCIsbi5fZ2V0RGlzcGxheWVkTWVzc2FnZXMoKSkscmMoMSksRG0oIm5nU3dpdGNoQ2FzZSIsImVycm9yIikscmMoMSksRG0oIm5nU3dpdGNoQ2FzZSIsImhpbnQiKSl9LGRpcmVjdGl2ZXM6W2RNLGZNLGdNLGp6XSxzdHlsZXM6WyIubWF0LWZvcm0tZmllbGR7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpsZWZ0fVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGR7dGV4dC1hbGlnbjpyaWdodH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWZvcm0tZmllbGQtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMDAlfS5tYXQtZm9ybS1maWVsZC1wcmVmaXgsLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeHt3aGl0ZS1zcGFjZTpub3dyYXA7ZmxleDpub25lO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1pbmZpeHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXg6YXV0bzttaW4td2lkdGg6MDt3aWR0aDoxODBweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtib3JkZXItaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LCB0cmFuc3BhcmVudCl9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JveC1zaXppbmc6Y29udGVudC1ib3g7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47cG9pbnRlci1ldmVudHM6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7bGVmdDphdXRvO3JpZ2h0OjB9Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtmb250OmluaGVyaXQ7cG9pbnRlci1ldmVudHM6bm9uZTt3aWR0aDoxMDAlO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxjb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSx3aWR0aCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtkaXNwbGF5Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMDtsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LWZvcm0tZmllbGQtZW1wdHkubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpibG9jazt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtaW5wdXQtc2VydmVyW3BsYWNlaG9sZGVyXTpub3QoOnBsYWNlaG9sZGVyLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbcGxhY2Vob2xkZXJdOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1sYWJlbDpub3QoLm1hdC1mb3JtLWZpZWxkLWVtcHR5KXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNmb3JtOnNjYWxlM2QoMSwgMS4wMDAxLCAxKX0ubWF0LWZvcm0tZmllbGQtcmlwcGxle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlO3RyYW5zZm9ybS1vcmlnaW46NTAlO3RyYW5zZm9ybTpzY2FsZVgoMC41KTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246dHJhbnNmb3JtIDMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLG9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1pY29ue3dpZHRoOjFlbTtoZWlnaHQ6MWVtO2ZvbnQtc2l6ZTppbmhlcml0O3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfS5tYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5tYXQtZm9ybS1maWVsZC1oaW50LXNwYWNlcntmbGV4OjEgMCAxZW19Lm1hdC1lcnJvcntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1jb250cm9sLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtZW5ke29yZGVyOjF9Lm1hdC1mb3JtLWZpZWxkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9XG4iLCcubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7cGFkZGluZzouNzVlbSAuNzVlbSAwIC43NWVtfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtvdXRsaW5lOnNvbGlkIDFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7b3V0bGluZTpkYXNoZWQgM3B4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtoZWlnaHQ6MXB4O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JvdHRvbTowO2hlaWdodDoycHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbDpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246b3BhY2l0eSA2MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cGFkZGluZzowIDFlbX1cbicsJy5tYXQtaW5wdXQtZWxlbWVudHtmb250OmluaGVyaXQ7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjpjdXJyZW50Q29sb3I7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO3BhZGRpbmc6MDttYXJnaW46MDt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO3ZlcnRpY2FsLWFsaWduOmJvdHRvbTt0ZXh0LWFsaWduOmluaGVyaXQ7Ym94LXNpemluZzpjb250ZW50LWJveH0ubWF0LWlucHV0LWVsZW1lbnQ6LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi1tcy1jbGVhciwubWF0LWlucHV0LWVsZW1lbnQ6Oi1tcy1yZXZlYWx7ZGlzcGxheTpub25lfS5tYXQtaW5wdXQtZWxlbWVudCwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNvbnRhY3RzLWF1dG8tZmlsbC1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNhcHMtbG9jay1pbmRpY2F0b3IsLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNyZWRlbnRpYWxzLWF1dG8tZmlsbC1idXR0b257dmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZV0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWVdLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGV0aW1lLWxvY2FsXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1tb250aF0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9d2Vla10sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9dGltZV17bGluZS1oZWlnaHQ6MX0ubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRlXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWVdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZS1sb2NhbF06OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPW1vbnRoXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9d2Vla106OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPXRpbWVdOjphZnRlcntjb250ZW50OiIgIjt3aGl0ZS1zcGFjZTpwcmU7d2lkdGg6MXB4fS5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2xlYXItYnV0dG9ue2ZvbnQtc2l6ZTouNzVlbX0ubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7LW1zLXVzZXItc2VsZWN0OnRleHR9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcnstbXMtdXNlci1zZWxlY3Q6dGV4dH0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXI6LW1zLWlucHV0LXBsYWNlaG9sZGVyey1tcy11c2VyLXNlbGVjdDp0ZXh0fS5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcnstbXMtdXNlci1zZWxlY3Q6dGV4dH0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcntvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVye2NvbG9yOnRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVye29wYWNpdHk6MH0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6dHJhbnNwYXJlbnQgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6dHJhbnNwYXJlbnQgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye29wYWNpdHk6MH10ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudHtyZXNpemU6dmVydGljYWw7b3ZlcmZsb3c6YXV0b310ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudC5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZzoycHggMDttYXJnaW46LTJweCAwfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudHstbW96LWFwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctdG9wOjFlbTt0b3A6LTFlbTttYXJnaW4tYm90dG9tOi0xZW19c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50OjotbXMtZXhwYW5ke2Rpc3BsYXk6bm9uZX1zZWxlY3QubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50Om5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudDo6LW1zLXZhbHVle2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDpub25lfS5tYXQtZm9jdXNlZCAuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIHNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudDo6LW1zLXZhbHVle2NvbG9yOmluaGVyaXR9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb250ZW50OiIiO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDo1cHggc29saWQ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDowO21hcmdpbi10b3A6LTIuNXB4O3BvaW50ZXItZXZlbnRzOm5vbmV9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7cmlnaHQ6YXV0bztsZWZ0OjB9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1pbnB1dC1lbGVtZW50e3BhZGRpbmctcmlnaHQ6MTVweH1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1pbnB1dC1lbGVtZW50e3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTVweH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcnttYXgtd2lkdGg6Y2FsYygxMDAlIC0gMTBweCl9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7bWFyZ2luLXRvcDotNXB4fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye21hcmdpbi10b3A6LTEwcHh9XG4nLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMDBweCk7LW1zLXRyYW5zZm9ybTpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257d2lkdGg6MWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntmb250OmluaGVyaXQ7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257Zm9udC1zaXplOmluaGVyaXR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcmlwcGxle3RvcDowO2hlaWdodDoycHg7b3ZlcmZsb3c6aGlkZGVufS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1wb3NpdGlvbjowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3JkZXItdG9wLXN0eWxlOmRvdHRlZDtib3JkZXItdG9wLXdpZHRoOjJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtaW52YWxpZDpub3QoLm1hdC1mb2N1c2VkKSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDoxcHh9XG4iLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC13cmFwcGVye21hcmdpbjouMjVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWZsZXh7cGFkZGluZzowIC43NWVtIDAgLjc1ZW07bWFyZ2luLXRvcDotMC4yNWVtO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1zdWZmaXh7dG9wOi4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDouMjVlbTtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmR7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7bWluLXdpZHRoOjVweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0e2JvcmRlci1yYWRpdXM6NXB4IDAgMCA1cHg7Ym9yZGVyLXJpZ2h0LXN0eWxlOm5vbmV9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnR7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7Ym9yZGVyLXJhZGl1czowIDVweCA1cHggMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZHtib3JkZXItcmFkaXVzOjAgNXB4IDVweCAwO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7ZmxleC1ncm93OjF9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5ke2JvcmRlci1sZWZ0LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC1zdHlsZTpub25lO2JvcmRlci1yYWRpdXM6NXB4IDAgMCA1cHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXB7Ym9yZGVyLXJhZGl1czouMDAwMDAxcHg7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7Ym9yZGVyLWxlZnQtc3R5bGU6bm9uZTtib3JkZXItcmlnaHQtc3R5bGU6bm9uZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe2JvcmRlci10b3AtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tib3JkZXI6M3B4IGRhc2hlZH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3ZlciAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cGFkZGluZzowIDFlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHt0cmFuc2l0aW9uOm5vbmV9XG4iLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtZmxleHtwYWRkaW5nLXRvcDouNzVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2hlaWdodDoxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7Ym90dG9tOjA7aGVpZ2h0OjJweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym9yZGVyLXRvcC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXRvcC13aWR0aDoycHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHkgNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQuX21hdC1hbmltYXRpb24tbm9vcGFibGU6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle3RyYW5zaXRpb246bm9uZX1cbiJdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W2hWLnRyYW5zaXRpb25NZXNzYWdlc119LGNoYW5nZURldGVjdGlvbjowfSksQVYuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpoZ30se3R5cGU6VWd9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltoZ119XX0se3R5cGU6SEksZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltFVl19XX0se3R5cGU6d3p9LHt0eXBlOmFffSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1ZQXX1dfV0sQVYucHJvcERlY29yYXRvcnM9e2FwcGVhcmFuY2U6W3t0eXBlOnh5fV0saGlkZVJlcXVpcmVkTWFya2VyOlt7dHlwZTp4eX1dLGhpbnRMYWJlbDpbe3R5cGU6eHl9XSxmbG9hdExhYmVsOlt7dHlwZTp4eX1dLHVuZGVybGluZVJlZjpbe3R5cGU6WmEsYXJnczpbInVuZGVybGluZSJdfV0sX2Nvbm5lY3Rpb25Db250YWluZXJSZWY6W3t0eXBlOlphLGFyZ3M6WyJjb25uZWN0aW9uQ29udGFpbmVyIix7c3RhdGljOiEwfV19XSxfaW5wdXRDb250YWluZXJSZWY6W3t0eXBlOlphLGFyZ3M6WyJpbnB1dENvbnRhaW5lciJdfV0sX2xhYmVsOlt7dHlwZTpaYSxhcmdzOlsibGFiZWwiXX1dLF9jb250cm9sTm9uU3RhdGljOlt7dHlwZTpxYSxhcmdzOltiVl19XSxfY29udHJvbFN0YXRpYzpbe3R5cGU6cWEsYXJnczpbYlYse3N0YXRpYzohMH1dfV0sX2xhYmVsQ2hpbGROb25TdGF0aWM6W3t0eXBlOnFhLGFyZ3M6W3ZWXX1dLF9sYWJlbENoaWxkU3RhdGljOlt7dHlwZTpxYSxhcmdzOlt2Vix7c3RhdGljOiEwfV19XSxfcGxhY2Vob2xkZXJDaGlsZDpbe3R5cGU6cWEsYXJnczpbeFZdfV0sX2Vycm9yQ2hpbGRyZW46W3t0eXBlOllhLGFyZ3M6W2ZWLHtkZXNjZW5kYW50czohMH1dfV0sX2hpbnRDaGlsZHJlbjpbe3R5cGU6WWEsYXJnczpbQ1Yse2Rlc2NlbmRhbnRzOiEwfV19XSxfcHJlZml4Q2hpbGRyZW46W3t0eXBlOllhLGFyZ3M6W09WLHtkZXNjZW5kYW50czohMH1dfV0sX3N1ZmZpeENoaWxkcmVuOlt7dHlwZTpZYSxhcmdzOlt3Vix7ZGVzY2VuZGFudHM6ITB9XX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEFWLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixleHBvcnRBczoibWF0Rm9ybUZpZWxkIix0ZW1wbGF0ZTonPGRpdiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtd3JhcHBlciI+XG4gIDxkaXYgY2xhc3M9Im1hdC1mb3JtLWZpZWxkLWZsZXgiICNjb25uZWN0aW9uQ29udGFpbmVyXG4gICAgICAgKGNsaWNrKT0iX2NvbnRyb2wub25Db250YWluZXJDbGljayAmJiBfY29udHJvbC5vbkNvbnRhaW5lckNsaWNrKCRldmVudCkiPlxuXG4gICAgXHgzYyEtLSBPdXRsaW5lIHVzZWQgZm9yIG91dGxpbmUgYXBwZWFyYW5jZS4gLS1ceDNlXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iYXBwZWFyYW5jZSA9PSBcJ291dGxpbmVcJyI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1vdXRsaW5lIj5cbiAgICAgICAgPGRpdiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9Im1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1vdXRsaW5lIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Ij48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgY2xhc3M9Im1hdC1mb3JtLWZpZWxkLXByZWZpeCIgKm5nSWY9Il9wcmVmaXhDaGlsZHJlbi5sZW5ndGgiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PSJbbWF0UHJlZml4XSI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtaW5maXgiICNpbnB1dENvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuICAgICAgPHNwYW4gY2xhc3M9Im1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIiPlxuICAgICAgICBceDNjIS0tIFdlIGFkZCBhcmlhLW93bnMgYXMgYSB3b3JrYXJvdW5kIGZvciBhbiBpc3N1ZSBpbiBKQVdTICYgTlZEQSB3aGVyZSB0aGUgbGFiZWwgaXNuXCd0XG4gICAgICAgICAgICAgcmVhZCBpZiBpdCBjb21lcyBiZWZvcmUgdGhlIGNvbnRyb2wgaW4gdGhlIERPTS4gLS1ceDNlXG4gICAgICAgIDxsYWJlbCBjbGFzcz0ibWF0LWZvcm0tZmllbGQtbGFiZWwiXG4gICAgICAgICAgICAgICAoY2RrT2JzZXJ2ZUNvbnRlbnQpPSJ1cGRhdGVPdXRsaW5lR2FwKCkiXG4gICAgICAgICAgICAgICBbY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZF09ImFwcGVhcmFuY2UgIT0gXCdvdXRsaW5lXCciXG4gICAgICAgICAgICAgICBbaWRdPSJfbGFiZWxJZCJcbiAgICAgICAgICAgICAgIFthdHRyLmZvcl09Il9jb250cm9sLmlkIlxuICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1vd25zXT0iX2NvbnRyb2wuaWQiXG4gICAgICAgICAgICAgICBbY2xhc3MubWF0LWVtcHR5XT0iX2NvbnRyb2wuZW1wdHkgJiYgIV9zaG91bGRBbHdheXNGbG9hdCgpIlxuICAgICAgICAgICAgICAgW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWVtcHR5XT0iX2NvbnRyb2wuZW1wdHkgJiYgIV9zaG91bGRBbHdheXNGbG9hdCgpIlxuICAgICAgICAgICAgICAgW2NsYXNzLm1hdC1hY2NlbnRdPSJjb2xvciA9PSBcJ2FjY2VudFwnIlxuICAgICAgICAgICAgICAgW2NsYXNzLm1hdC13YXJuXT0iY29sb3IgPT0gXCd3YXJuXCciXG4gICAgICAgICAgICAgICAjbGFiZWxcbiAgICAgICAgICAgICAgICpuZ0lmPSJfaGFzRmxvYXRpbmdMYWJlbCgpIlxuICAgICAgICAgICAgICAgW25nU3dpdGNoXT0iX2hhc0xhYmVsKCkiPlxuXG4gICAgICAgICAgXHgzYyEtLSBAYnJlYWtpbmctY2hhbmdlIDguMC4wIHJlbW92ZSBpbiBmYXZvciBvZiBtYXQtbGFiZWwgZWxlbWVudCBhbiBwbGFjZWhvbGRlciBhdHRyLiAtLVx4M2VcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9ImZhbHNlIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD0ibWF0LXBsYWNlaG9sZGVyIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICA8c3Bhbj57e19jb250cm9sLnBsYWNlaG9sZGVyfX08L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9Im1hdC1sYWJlbCIgKm5nU3dpdGNoQ2FzZT0idHJ1ZSI+PC9uZy1jb250ZW50PlxuXG4gICAgICAgICAgXHgzYyEtLSBAYnJlYWtpbmctY2hhbmdlIDguMC4wIHJlbW92ZSBgbWF0LXBsYWNlaG9sZGVyLXJlcXVpcmVkYCBjbGFzcyAtLVx4M2VcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9Im1hdC1wbGFjZWhvbGRlci1yZXF1aXJlZCBtYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj0idHJ1ZSJcbiAgICAgICAgICAgICpuZ0lmPSIhaGlkZVJlcXVpcmVkTWFya2VyICYmIF9jb250cm9sLnJlcXVpcmVkICYmICFfY29udHJvbC5kaXNhYmxlZCI+JiMzMjsqPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtc3VmZml4IiAqbmdJZj0iX3N1ZmZpeENoaWxkcmVuLmxlbmd0aCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9IlttYXRTdWZmaXhdIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIFx4M2MhLS0gVW5kZXJsaW5lIHVzZWQgZm9yIGxlZ2FjeSwgc3RhbmRhcmQsIGFuZCBib3ggYXBwZWFyYW5jZXMuIC0tXHgzZVxuICA8ZGl2IGNsYXNzPSJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiICN1bmRlcmxpbmVcbiAgICAgICAqbmdJZj0iYXBwZWFyYW5jZSAhPSBcJ291dGxpbmVcJyI+XG4gICAgPHNwYW4gY2xhc3M9Im1hdC1mb3JtLWZpZWxkLXJpcHBsZSJcbiAgICAgICAgICBbY2xhc3MubWF0LWFjY2VudF09ImNvbG9yID09IFwnYWNjZW50XCciXG4gICAgICAgICAgW2NsYXNzLm1hdC13YXJuXT0iY29sb3IgPT0gXCd3YXJuXCciPjwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIiXG4gICAgICAgW25nU3dpdGNoXT0iX2dldERpc3BsYXllZE1lc3NhZ2VzKCkiPlxuICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT0iXCdlcnJvclwnIiBbQHRyYW5zaXRpb25NZXNzYWdlc109Il9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZSI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9Im1hdC1lcnJvciI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtaGludC13cmFwcGVyIiAqbmdTd2l0Y2hDYXNlPSJcJ2hpbnRcJyJcbiAgICAgIFtAdHJhbnNpdGlvbk1lc3NhZ2VzXT0iX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlIj5cbiAgICAgIFx4M2MhLS0gVE9ETyhtbWFsZXJiYSk6IHVzZSBhbiBhY3R1YWwgPG1hdC1oaW50PiBvbmNlIGFsbCBzZWxlY3RvcnMgYXJlIHN3aXRjaGVkIHRvIG1hdC0qIC0tXHgzZVxuICAgICAgPGRpdiAqbmdJZj0iaGludExhYmVsIiBbaWRdPSJfaGludExhYmVsSWQiIGNsYXNzPSJtYXQtaGludCI+e3toaW50TGFiZWx9fTwvZGl2PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PSJtYXQtaGludDpub3QoW2FsaWduPVwnZW5kXCddKSI+PC9uZy1jb250ZW50PlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtaGludC1zcGFjZXIiPjwvZGl2PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PSJtYXQtaGludFthbGlnbj1cJ2VuZFwnXSI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxhbmltYXRpb25zOltoVi50cmFuc2l0aW9uTWVzc2FnZXNdLGhvc3Q6e2NsYXNzOiJtYXQtZm9ybS1maWVsZCIsIltjbGFzcy5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkXSI6J2FwcGVhcmFuY2UgPT0gInN0YW5kYXJkIicsIltjbGFzcy5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxdIjonYXBwZWFyYW5jZSA9PSAiZmlsbCInLCJbY2xhc3MubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lXSI6J2FwcGVhcmFuY2UgPT0gIm91dGxpbmUiJywiW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5XSI6J2FwcGVhcmFuY2UgPT0gImxlZ2FjeSInLCJbY2xhc3MubWF0LWZvcm0tZmllbGQtaW52YWxpZF0iOiJfY29udHJvbC5lcnJvclN0YXRlIiwiW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdF0iOiJfY2FuTGFiZWxGbG9hdCgpIiwiW2NsYXNzLm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdF0iOiJfc2hvdWxkTGFiZWxGbG9hdCgpIiwiW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbF0iOiJfaGFzRmxvYXRpbmdMYWJlbCgpIiwiW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXJdIjoiX2hpZGVDb250cm9sUGxhY2Vob2xkZXIoKSIsIltjbGFzcy5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZF0iOiJfY29udHJvbC5kaXNhYmxlZCIsIltjbGFzcy5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbGVkXSI6Il9jb250cm9sLmF1dG9maWxsZWQiLCJbY2xhc3MubWF0LWZvY3VzZWRdIjoiX2NvbnRyb2wuZm9jdXNlZCIsIltjbGFzcy5uZy11bnRvdWNoZWRdIjonX3Nob3VsZEZvcndhcmQoInVudG91Y2hlZCIpJywiW2NsYXNzLm5nLXRvdWNoZWRdIjonX3Nob3VsZEZvcndhcmQoInRvdWNoZWQiKScsIltjbGFzcy5uZy1wcmlzdGluZV0iOidfc2hvdWxkRm9yd2FyZCgicHJpc3RpbmUiKScsIltjbGFzcy5uZy1kaXJ0eV0iOidfc2hvdWxkRm9yd2FyZCgiZGlydHkiKScsIltjbGFzcy5uZy12YWxpZF0iOidfc2hvdWxkRm9yd2FyZCgidmFsaWQiKScsIltjbGFzcy5uZy1pbnZhbGlkXSI6J19zaG91bGRGb3J3YXJkKCJpbnZhbGlkIiknLCJbY2xhc3MubmctcGVuZGluZ10iOidfc2hvdWxkRm9yd2FyZCgicGVuZGluZyIpJywiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6IiFfYW5pbWF0aW9uc0VuYWJsZWQifSxpbnB1dHM6WyJjb2xvciJdLGVuY2Fwc3VsYXRpb246SG4uTm9uZSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6UlYsdXNlRXhpc3Rpbmc6QVZ9XSxzdHlsZXM6WyIubWF0LWZvcm0tZmllbGR7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpsZWZ0fVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGR7dGV4dC1hbGlnbjpyaWdodH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWZvcm0tZmllbGQtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMDAlfS5tYXQtZm9ybS1maWVsZC1wcmVmaXgsLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeHt3aGl0ZS1zcGFjZTpub3dyYXA7ZmxleDpub25lO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1pbmZpeHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXg6YXV0bzttaW4td2lkdGg6MDt3aWR0aDoxODBweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtib3JkZXItaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LCB0cmFuc3BhcmVudCl9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JveC1zaXppbmc6Y29udGVudC1ib3g7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47cG9pbnRlci1ldmVudHM6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7bGVmdDphdXRvO3JpZ2h0OjB9Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtmb250OmluaGVyaXQ7cG9pbnRlci1ldmVudHM6bm9uZTt3aWR0aDoxMDAlO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxjb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSx3aWR0aCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtkaXNwbGF5Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMDtsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LWZvcm0tZmllbGQtZW1wdHkubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpibG9jazt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtaW5wdXQtc2VydmVyW3BsYWNlaG9sZGVyXTpub3QoOnBsYWNlaG9sZGVyLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbcGxhY2Vob2xkZXJdOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1sYWJlbDpub3QoLm1hdC1mb3JtLWZpZWxkLWVtcHR5KXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNmb3JtOnNjYWxlM2QoMSwgMS4wMDAxLCAxKX0ubWF0LWZvcm0tZmllbGQtcmlwcGxle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlO3RyYW5zZm9ybS1vcmlnaW46NTAlO3RyYW5zZm9ybTpzY2FsZVgoMC41KTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246dHJhbnNmb3JtIDMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLG9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1pY29ue3dpZHRoOjFlbTtoZWlnaHQ6MWVtO2ZvbnQtc2l6ZTppbmhlcml0O3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfS5tYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5tYXQtZm9ybS1maWVsZC1oaW50LXNwYWNlcntmbGV4OjEgMCAxZW19Lm1hdC1lcnJvcntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1jb250cm9sLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtZW5ke29yZGVyOjF9Lm1hdC1mb3JtLWZpZWxkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9XG4iLCcubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7cGFkZGluZzouNzVlbSAuNzVlbSAwIC43NWVtfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtvdXRsaW5lOnNvbGlkIDFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7b3V0bGluZTpkYXNoZWQgM3B4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtoZWlnaHQ6MXB4O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JvdHRvbTowO2hlaWdodDoycHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbDpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246b3BhY2l0eSA2MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cGFkZGluZzowIDFlbX1cbicsJy5tYXQtaW5wdXQtZWxlbWVudHtmb250OmluaGVyaXQ7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjpjdXJyZW50Q29sb3I7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO3BhZGRpbmc6MDttYXJnaW46MDt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO3ZlcnRpY2FsLWFsaWduOmJvdHRvbTt0ZXh0LWFsaWduOmluaGVyaXQ7Ym94LXNpemluZzpjb250ZW50LWJveH0ubWF0LWlucHV0LWVsZW1lbnQ6LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi1tcy1jbGVhciwubWF0LWlucHV0LWVsZW1lbnQ6Oi1tcy1yZXZlYWx7ZGlzcGxheTpub25lfS5tYXQtaW5wdXQtZWxlbWVudCwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNvbnRhY3RzLWF1dG8tZmlsbC1idXR0b24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNhcHMtbG9jay1pbmRpY2F0b3IsLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWNyZWRlbnRpYWxzLWF1dG8tZmlsbC1idXR0b257dmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZV0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWVdLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGV0aW1lLWxvY2FsXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1tb250aF0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9d2Vla10sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9dGltZV17bGluZS1oZWlnaHQ6MX0ubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRlXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWVdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZS1sb2NhbF06OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPW1vbnRoXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9d2Vla106OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPXRpbWVdOjphZnRlcntjb250ZW50OiIgIjt3aGl0ZS1zcGFjZTpwcmU7d2lkdGg6MXB4fS5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2xlYXItYnV0dG9ue2ZvbnQtc2l6ZTouNzVlbX0ubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7LW1zLXVzZXItc2VsZWN0OnRleHR9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcnstbXMtdXNlci1zZWxlY3Q6dGV4dH0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXI6LW1zLWlucHV0LXBsYWNlaG9sZGVyey1tcy11c2VyLXNlbGVjdDp0ZXh0fS5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcnstbXMtdXNlci1zZWxlY3Q6dGV4dH0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcntvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVye2NvbG9yOnRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVye29wYWNpdHk6MH0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6dHJhbnNwYXJlbnQgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6dHJhbnNwYXJlbnQgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye29wYWNpdHk6MH10ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudHtyZXNpemU6dmVydGljYWw7b3ZlcmZsb3c6YXV0b310ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudC5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZzoycHggMDttYXJnaW46LTJweCAwfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudHstbW96LWFwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctdG9wOjFlbTt0b3A6LTFlbTttYXJnaW4tYm90dG9tOi0xZW19c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50OjotbXMtZXhwYW5ke2Rpc3BsYXk6bm9uZX1zZWxlY3QubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50Om5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudDo6LW1zLXZhbHVle2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDpub25lfS5tYXQtZm9jdXNlZCAuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIHNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudDo6LW1zLXZhbHVle2NvbG9yOmluaGVyaXR9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb250ZW50OiIiO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDo1cHggc29saWQ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDowO21hcmdpbi10b3A6LTIuNXB4O3BvaW50ZXItZXZlbnRzOm5vbmV9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7cmlnaHQ6YXV0bztsZWZ0OjB9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1pbnB1dC1lbGVtZW50e3BhZGRpbmctcmlnaHQ6MTVweH1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1pbnB1dC1lbGVtZW50e3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTVweH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcnttYXgtd2lkdGg6Y2FsYygxMDAlIC0gMTBweCl9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7bWFyZ2luLXRvcDotNXB4fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye21hcmdpbi10b3A6LTEwcHh9XG4nLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMDBweCk7LW1zLXRyYW5zZm9ybTpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257d2lkdGg6MWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntmb250OmluaGVyaXQ7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257Zm9udC1zaXplOmluaGVyaXR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcmlwcGxle3RvcDowO2hlaWdodDoycHg7b3ZlcmZsb3c6aGlkZGVufS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1wb3NpdGlvbjowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3JkZXItdG9wLXN0eWxlOmRvdHRlZDtib3JkZXItdG9wLXdpZHRoOjJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtaW52YWxpZDpub3QoLm1hdC1mb2N1c2VkKSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDoxcHh9XG4iLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC13cmFwcGVye21hcmdpbjouMjVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWZsZXh7cGFkZGluZzowIC43NWVtIDAgLjc1ZW07bWFyZ2luLXRvcDotMC4yNWVtO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1zdWZmaXh7dG9wOi4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDouMjVlbTtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmR7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7bWluLXdpZHRoOjVweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0e2JvcmRlci1yYWRpdXM6NXB4IDAgMCA1cHg7Ym9yZGVyLXJpZ2h0LXN0eWxlOm5vbmV9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnR7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7Ym9yZGVyLXJhZGl1czowIDVweCA1cHggMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZHtib3JkZXItcmFkaXVzOjAgNXB4IDVweCAwO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7ZmxleC1ncm93OjF9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5ke2JvcmRlci1sZWZ0LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC1zdHlsZTpub25lO2JvcmRlci1yYWRpdXM6NXB4IDAgMCA1cHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXB7Ym9yZGVyLXJhZGl1czouMDAwMDAxcHg7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7Ym9yZGVyLWxlZnQtc3R5bGU6bm9uZTtib3JkZXItcmlnaHQtc3R5bGU6bm9uZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe2JvcmRlci10b3AtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tib3JkZXI6M3B4IGRhc2hlZH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3ZlciAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cGFkZGluZzowIDFlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHt0cmFuc2l0aW9uOm5vbmV9XG4iLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtZmxleHtwYWRkaW5nLXRvcDouNzVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2hlaWdodDoxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7Ym90dG9tOjA7aGVpZ2h0OjJweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym9yZGVyLXRvcC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXRvcC13aWR0aDoycHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHkgNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQuX21hdC1hbmltYXRpb24tbm9vcGFibGU6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle3RyYW5zaXRpb246bm9uZX1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9LHt0eXBlOlVnfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbaGddfV19LHt0eXBlOkhJLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbRVZdfV19LHt0eXBlOnd6fSx7dHlwZTphX30se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltWUF19XX1dfSkse2Zsb2F0TGFiZWw6W3t0eXBlOnh5fV0sYXBwZWFyYW5jZTpbe3R5cGU6eHl9XSxoaWRlUmVxdWlyZWRNYXJrZXI6W3t0eXBlOnh5fV0saGludExhYmVsOlt7dHlwZTp4eX1dLHVuZGVybGluZVJlZjpbe3R5cGU6WmEsYXJnczpbInVuZGVybGluZSJdfV0sX2Nvbm5lY3Rpb25Db250YWluZXJSZWY6W3t0eXBlOlphLGFyZ3M6WyJjb25uZWN0aW9uQ29udGFpbmVyIix7c3RhdGljOiEwfV19XSxfaW5wdXRDb250YWluZXJSZWY6W3t0eXBlOlphLGFyZ3M6WyJpbnB1dENvbnRhaW5lciJdfV0sX2xhYmVsOlt7dHlwZTpaYSxhcmdzOlsibGFiZWwiXX1dLF9jb250cm9sTm9uU3RhdGljOlt7dHlwZTpxYSxhcmdzOltiVl19XSxfY29udHJvbFN0YXRpYzpbe3R5cGU6cWEsYXJnczpbYlYse3N0YXRpYzohMH1dfV0sX2xhYmVsQ2hpbGROb25TdGF0aWM6W3t0eXBlOnFhLGFyZ3M6W3ZWXX1dLF9sYWJlbENoaWxkU3RhdGljOlt7dHlwZTpxYSxhcmdzOlt2Vix7c3RhdGljOiEwfV19XSxfcGxhY2Vob2xkZXJDaGlsZDpbe3R5cGU6cWEsYXJnczpbeFZdfV0sX2Vycm9yQ2hpbGRyZW46W3t0eXBlOllhLGFyZ3M6W2ZWLHtkZXNjZW5kYW50czohMH1dfV0sX2hpbnRDaGlsZHJlbjpbe3R5cGU6WWEsYXJnczpbQ1Yse2Rlc2NlbmRhbnRzOiEwfV19XSxfcHJlZml4Q2hpbGRyZW46W3t0eXBlOllhLGFyZ3M6W09WLHtkZXNjZW5kYW50czohMH1dfV0sX3N1ZmZpeENoaWxkcmVuOlt7dHlwZTpZYSxhcmdzOlt3Vix7ZGVzY2VuZGFudHM6ITB9XX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBUVnt9VFYuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFRWKX0sVFYuybVtb2Q9YW8oe3R5cGU6VFZ9KSxUVi7JtWluaj12bih7aW1wb3J0czpbW1dNLFhJLFV6XSxYSV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFRWLFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltnVixBVixNVix2Vix4VixQVixrVl0saW1wb3J0czpbV00sWEksVXpdLGV4cG9ydHM6W1hJLGdWLEFWLE1WLHZWLHhWLFBWLGtWXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKFRWLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bZ1YsQVYsTVYsdlYseFYsUFYsa1ZdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1dNLFhJLFV6XX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltYSSxnVixBVixNVix2Vix4VixQVixrVl19fSk7Ci8qKgogICAgICogQGxpY2Vuc2UgQW5ndWxhciB2MTIuMi4xCiAgICAgKiAoYykgMjAxMC0yMDIxIEdvb2dsZSBMTEMuIGh0dHBzOi8vYW5ndWxhci5pby8KICAgICAqIExpY2Vuc2U6IE1JVAogICAgICovCmNsYXNzIE5We2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5vbkNoYW5nZT10PT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e319c2V0UHJvcGVydHkodCxlKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsdCxlKX1yZWdpc3Rlck9uVG91Y2hlZCh0KXt0aGlzLm9uVG91Y2hlZD10fXJlZ2lzdGVyT25DaGFuZ2UodCl7dGhpcy5vbkNoYW5nZT10fXNldERpc2FibGVkU3RhdGUodCl7dGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLHQpfX1OVi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TlYpKFNtKENnKSxTbShoZykpfSxOVi7JtWRpcj1sbyh7dHlwZTpOVn0pLE5WLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Q2d9LHt0eXBlOmhnfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChOVixbe3R5cGU6Q3l9XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Q2d9LHt0eXBlOmhnfV19KSxudWxsKTtjbGFzcyB6ViBleHRlbmRzIE5We316Vi7JtWZhYz0oZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4odHx8KHQ9QWEoelYpKSkobnx8elYpfX0pKCkselYuybVkaXI9bG8oe3R5cGU6elYsZmVhdHVyZXM6W3hwXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoelYsW3t0eXBlOkN5fV0sbnVsbCxudWxsKTtjb25zdCBJVj1uZXcgR2EoIk5nVmFsdWVBY2Nlc3NvciIpLEhWPXtwcm92aWRlOklWLHVzZUV4aXN0aW5nOnFlKCgoKT0+RlYpKSxtdWx0aTohMH07Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIEZWIGV4dGVuZHMgelZ7d3JpdGVWYWx1ZSh0KXt0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIix0KX19RlYuybVmYWM9KGZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uIGUobil7cmV0dXJuKHR8fCh0PUFhKEZWKSkpKG58fEZWKX19KSgpLEZWLsm1ZGlyPWxvKHt0eXBlOkZWLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZWbSgiY2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkNoYW5nZShlLnRhcmdldC5jaGVja2VkKX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblRvdWNoZWQoKX0pKX0sZmVhdHVyZXM6W3BnKFtIVl0pLHhwXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoRlYsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiaW5wdXRbdHlwZT1jaGVja2JveF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPWNoZWNrYm94XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1jaGVja2JveF1bbmdNb2RlbF0iLGhvc3Q6eyIoY2hhbmdlKSI6Im9uQ2hhbmdlKCRldmVudC50YXJnZXQuY2hlY2tlZCkiLCIoYmx1cikiOiJvblRvdWNoZWQoKSJ9LHByb3ZpZGVyczpbSFZdfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgTFY9e3Byb3ZpZGU6SVYsdXNlRXhpc3Rpbmc6cWUoKCgpPT5WVikpLG11bHRpOiEwfSxCVj1uZXcgR2EoIkNvbXBvc2l0aW9uRXZlbnRNb2RlIik7Y2xhc3MgVlYgZXh0ZW5kcyBOVntjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCxlKSx0aGlzLl9jb21wb3NpdGlvbk1vZGU9bix0aGlzLl9jb21wb3Npbmc9ITEsbnVsbD09dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYodGhpcy5fY29tcG9zaXRpb25Nb2RlPSEoZnVuY3Rpb24gbygpe2NvbnN0IHQ9cV8oKT9xXygpLmdldFVzZXJBZ2VudCgpOiIiO3JldHVybi9hbmRyb2lkIChcZCspLy50ZXN0KHQudG9Mb3dlckNhc2UoKSl9KSgpKX13cml0ZVZhbHVlKHQpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixudWxsPT10PyIiOnQpfV9oYW5kbGVJbnB1dCh0KXsoIXRoaXMuX2NvbXBvc2l0aW9uTW9kZXx8dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYhdGhpcy5fY29tcG9zaW5nKSYmdGhpcy5vbkNoYW5nZSh0KX1fY29tcG9zaXRpb25TdGFydCgpe3RoaXMuX2NvbXBvc2luZz0hMH1fY29tcG9zaXRpb25FbmQodCl7dGhpcy5fY29tcG9zaW5nPSExLHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmdGhpcy5vbkNoYW5nZSh0KX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiBqVih0KXtyZXR1cm4gbnVsbD09dHx8MD09PXQubGVuZ3RofWZ1bmN0aW9uIFVWKHQpe3JldHVybiBudWxsIT10JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RofVZWLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxWVikoU20oQ2cpLFNtKGhnKSxTbShCViw4KSl9LFZWLsm1ZGlyPWxvKHt0eXBlOlZWLHNlbGVjdG9yczpbWyJpbnB1dCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJuZ01vZGVsIiwiIl0sWyIiLCJuZ0RlZmF1bHRDb250cm9sIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZWbSgiaW5wdXQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9oYW5kbGVJbnB1dChlLnRhcmdldC52YWx1ZSl9KSkoImJsdXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25Ub3VjaGVkKCl9KSkoImNvbXBvc2l0aW9uc3RhcnQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2NvbXBvc2l0aW9uU3RhcnQoKX0pKSgiY29tcG9zaXRpb25lbmQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9jb21wb3NpdGlvbkVuZChlLnRhcmdldC52YWx1ZSl9KSl9LGZlYXR1cmVzOltwZyhbTFZdKSx4cF19KSxWVi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkNnfSx7dHlwZTpoZ30se3R5cGU6Qm9vbGVhbixkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbQlZdfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFZWLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSIsaG9zdDp7IihpbnB1dCkiOiIkYW55KHRoaXMpLl9oYW5kbGVJbnB1dCgkZXZlbnQudGFyZ2V0LnZhbHVlKSIsIihibHVyKSI6Im9uVG91Y2hlZCgpIiwiKGNvbXBvc2l0aW9uc3RhcnQpIjoiJGFueSh0aGlzKS5fY29tcG9zaXRpb25TdGFydCgpIiwiKGNvbXBvc2l0aW9uZW5kKSI6IiRhbnkodGhpcykuX2NvbXBvc2l0aW9uRW5kKCRldmVudC50YXJnZXQudmFsdWUpIn0scHJvdmlkZXJzOltMVl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpDZ30se3R5cGU6aGd9LHt0eXBlOkJvb2xlYW4sZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W0JWXX1dfV19KSxudWxsKTtjb25zdCBHVj1uZXcgR2EoIk5nVmFsaWRhdG9ycyIpLFdWPW5ldyBHYSgiTmdBc3luY1ZhbGlkYXRvcnMiKSxZVj0vXig/PS57MSwyNTR9JCkoPz0uezEsNjR9QClbYS16QS1aMC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKD86XC5bYS16QS1aMC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSpAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvO2NsYXNzIHFWe3N0YXRpYyBtaW4odCl7cmV0dXJuIFpWKHQpfXN0YXRpYyBtYXgodCl7cmV0dXJuIFhWKHQpfXN0YXRpYyByZXF1aXJlZCh0KXtyZXR1cm4gS1YodCl9c3RhdGljIHJlcXVpcmVkVHJ1ZSh0KXtyZXR1cm4gSlYodCl9c3RhdGljIGVtYWlsKHQpe3JldHVybiBRVih0KX1zdGF0aWMgbWluTGVuZ3RoKHQpe3JldHVybiAkVih0KX1zdGF0aWMgbWF4TGVuZ3RoKHQpe3JldHVybiB0aih0KX1zdGF0aWMgcGF0dGVybih0KXtyZXR1cm4gZWoodCl9c3RhdGljIG51bGxWYWxpZGF0b3IodCl7cmV0dXJuIG51bGx9c3RhdGljIGNvbXBvc2UodCl7cmV0dXJuIGxqKHQpfXN0YXRpYyBjb21wb3NlQXN5bmModCl7cmV0dXJuIGRqKHQpfX1mdW5jdGlvbiBaVih0KXtyZXR1cm4gZT0+e2lmKGpWKGUudmFsdWUpfHxqVih0KSlyZXR1cm4gbnVsbDtjb25zdCBuPXBhcnNlRmxvYXQoZS52YWx1ZSk7cmV0dXJuIWlzTmFOKG4pJiZuPHQ/e21pbjp7bWluOnQsYWN0dWFsOmUudmFsdWV9fTpudWxsfX1mdW5jdGlvbiBYVih0KXtyZXR1cm4gZT0+e2lmKGpWKGUudmFsdWUpfHxqVih0KSlyZXR1cm4gbnVsbDtjb25zdCBuPXBhcnNlRmxvYXQoZS52YWx1ZSk7cmV0dXJuIWlzTmFOKG4pJiZuPnQ/e21heDp7bWF4OnQsYWN0dWFsOmUudmFsdWV9fTpudWxsfX1mdW5jdGlvbiBLVih0KXtyZXR1cm4galYodC52YWx1ZSk/e3JlcXVpcmVkOiEwfTpudWxsfWZ1bmN0aW9uIEpWKHQpe3JldHVybiEwPT09dC52YWx1ZT9udWxsOntyZXF1aXJlZDohMH19ZnVuY3Rpb24gUVYodCl7cmV0dXJuIGpWKHQudmFsdWUpfHxZVi50ZXN0KHQudmFsdWUpP251bGw6e2VtYWlsOiEwfX1mdW5jdGlvbiAkVih0KXtyZXR1cm4gZT0+alYoZS52YWx1ZSl8fCFVVihlLnZhbHVlKT9udWxsOmUudmFsdWUubGVuZ3RoPHQ/e21pbmxlbmd0aDp7cmVxdWlyZWRMZW5ndGg6dCxhY3R1YWxMZW5ndGg6ZS52YWx1ZS5sZW5ndGh9fTpudWxsfWZ1bmN0aW9uIHRqKHQpe3JldHVybiBlPT5VVihlLnZhbHVlKSYmZS52YWx1ZS5sZW5ndGg+dD97bWF4bGVuZ3RoOntyZXF1aXJlZExlbmd0aDp0LGFjdHVhbExlbmd0aDplLnZhbHVlLmxlbmd0aH19Om51bGx9ZnVuY3Rpb24gZWoodCl7aWYoIXQpcmV0dXJuIG5qO2xldCBlLG47cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0PyhuPSIiLCJeIiE9PXQuY2hhckF0KDApJiYobis9Il4iKSxuKz10LCIkIiE9PXQuY2hhckF0KHQubGVuZ3RoLTEpJiYobis9IiQiKSxlPW5ldyBSZWdFeHAobikpOihuPXQudG9TdHJpbmcoKSxlPXQpLHQ9PntpZihqVih0LnZhbHVlKSlyZXR1cm4gbnVsbDtjb25zdCBvPXQudmFsdWU7cmV0dXJuIGUudGVzdChvKT9udWxsOntwYXR0ZXJuOntyZXF1aXJlZFBhdHRlcm46bixhY3R1YWxWYWx1ZTpvfX19fWZ1bmN0aW9uIG5qKHQpe3JldHVybiBudWxsfWZ1bmN0aW9uIG9qKHQpe3JldHVybiBudWxsIT10fWZ1bmN0aW9uIGlqKHQpe2NvbnN0IGU9Rm0odCk/Q3QodCk6dDtpZighQm0oZSkmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHZhbGlkYXRvciB0byByZXR1cm4gUHJvbWlzZSBvciBPYnNlcnZhYmxlLiIpO3JldHVybiBlfWZ1bmN0aW9uIGFqKHQpe2xldCBlPXt9O3JldHVybiB0LmZvckVhY2goKHQ9PntlPW51bGwhPXQ/T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHQpOmV9KSksMD09PU9iamVjdC5rZXlzKGUpLmxlbmd0aD9udWxsOmV9ZnVuY3Rpb24gcmoodCxlKXtyZXR1cm4gZS5tYXAoKGU9PmUodCkpKX1mdW5jdGlvbiBzaih0KXtyZXR1cm4gdC5tYXAoKHQ9PihmdW5jdGlvbiBlKHQpe3JldHVybiF0LnZhbGlkYXRlfSkodCk/dDplPT50LnZhbGlkYXRlKGUpKSl9ZnVuY3Rpb24gbGoodCl7aWYoIXQpcmV0dXJuIG51bGw7Y29uc3QgZT10LmZpbHRlcihvaik7cmV0dXJuIDA9PWUubGVuZ3RoP251bGw6ZnVuY3Rpb24odCl7cmV0dXJuIGFqKHJqKHQsZSkpfX1mdW5jdGlvbiBjaih0KXtyZXR1cm4gbnVsbCE9dD9saihzaih0KSk6bnVsbH1mdW5jdGlvbiBkaih0KXtpZighdClyZXR1cm4gbnVsbDtjb25zdCBlPXQuZmlsdGVyKG9qKTtyZXR1cm4gMD09ZS5sZW5ndGg/bnVsbDpmdW5jdGlvbih0KXtyZXR1cm4gJHQocmoodCxlKS5tYXAoaWopKS5waXBlKEl0KGFqKSl9fWZ1bmN0aW9uIHBqKHQpe3JldHVybiBudWxsIT10P2RqKHNqKHQpKTpudWxsfWZ1bmN0aW9uIG1qKHQsZSl7cmV0dXJuIG51bGw9PT10P1tlXTpBcnJheS5pc0FycmF5KHQpP1suLi50LGVdOlt0LGVdfWZ1bmN0aW9uIHVqKHQpe3JldHVybiB0Ll9yYXdWYWxpZGF0b3JzfWZ1bmN0aW9uIGZqKHQpe3JldHVybiB0Ll9yYXdBc3luY1ZhbGlkYXRvcnN9ZnVuY3Rpb24gZ2oodCl7cmV0dXJuIHQ/QXJyYXkuaXNBcnJheSh0KT90Olt0XTpbXX1mdW5jdGlvbiBoaih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QuaW5jbHVkZXMoZSk6dD09PWV9ZnVuY3Rpb24gYmoodCxlKXtjb25zdCBuPWdqKGUpO3JldHVybiBnaih0KS5mb3JFYWNoKCh0PT57aGoobix0KXx8bi5wdXNoKHQpfSkpLG59ZnVuY3Rpb24geWoodCxlKXtyZXR1cm4gZ2ooZSkuZmlsdGVyKChlPT4haGoodCxlKSkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBfantjb25zdHJ1Y3Rvcigpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9W10sdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPVtdLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWx1ZTpudWxsfWdldCB2YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbGlkOm51bGx9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5pbnZhbGlkOm51bGx9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wZW5kaW5nOm51bGx9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlzYWJsZWQ6bnVsbH1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVuYWJsZWQ6bnVsbH1nZXQgZXJyb3JzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZXJyb3JzOm51bGx9Z2V0IHByaXN0aW5lKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH1nZXQgZGlydHkoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXJ0eTpudWxsfWdldCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudG91Y2hlZDpudWxsfWdldCBzdGF0dXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6bnVsbH1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudW50b3VjaGVkOm51bGx9Z2V0IHN0YXR1c0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzOm51bGx9Z2V0IHZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9X3NldFZhbGlkYXRvcnModCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10fHxbXSx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPWNqKHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9zZXRBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPXR8fFtdLHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1waih0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbnx8bnVsbH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufHxudWxsfV9yZWdpc3Rlck9uRGVzdHJveSh0KXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MucHVzaCh0KX1faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLmZvckVhY2goKHQ9PnQoKSkpLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1yZXNldCh0KXt0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5yZXNldCh0KX1oYXNFcnJvcih0LGUpe3JldHVybiEhdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wuaGFzRXJyb3IodCxlKX1nZXRFcnJvcih0LGUpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9yKHQsZSk6bnVsbH19X2ouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fF9qKX0sX2ouybVkaXI9bG8oe3R5cGU6X2p9KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIENqIGV4dGVuZHMgX2p7Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gbnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfX1Dai7JtWZhYz0oZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4odHx8KHQ9QWEoQ2opKSkobnx8Q2opfX0pKCksQ2ouybVkaXI9bG8oe3R5cGU6Q2osZmVhdHVyZXM6W3hwXX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgTWogZXh0ZW5kcyBfantjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcGFyZW50PW51bGwsdGhpcy5uYW1lPW51bGwsdGhpcy52YWx1ZUFjY2Vzc29yPW51bGx9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyB2antjb25zdHJ1Y3Rvcih0KXt0aGlzLl9jZD10fWlzKHQpe3ZhciBlLG4sbztyZXR1cm4ic3VibWl0dGVkIj09PXQ/ISEobnVsbD09PShlPXRoaXMuX2NkKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zdWJtaXR0ZWQpOiEhKG51bGw9PT0obz1udWxsPT09KG49dGhpcy5fY2QpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmNvbnRyb2wpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvW3RdKX19Y2xhc3MgeGogZXh0ZW5kcyB2antjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX19eGouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHhqKShTbShNaiwyKSl9LHhqLsm1ZGlyPWxvKHt0eXBlOnhqLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIiIsIm5nTW9kZWwiLCIiXSxbIiIsImZvcm1Db250cm9sIiwiIl1dLGhvc3RWYXJzOjE0LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZwdSgibmctdW50b3VjaGVkIixuLmlzKCJ1bnRvdWNoZWQiKSkoIm5nLXRvdWNoZWQiLG4uaXMoInRvdWNoZWQiKSkoIm5nLXByaXN0aW5lIixuLmlzKCJwcmlzdGluZSIpKSgibmctZGlydHkiLG4uaXMoImRpcnR5IikpKCJuZy12YWxpZCIsbi5pcygidmFsaWQiKSkoIm5nLWludmFsaWQiLG4uaXMoImludmFsaWQiKSkoIm5nLXBlbmRpbmciLG4uaXMoInBlbmRpbmciKSl9LGZlYXR1cmVzOlt4cF19KSx4ai5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOk1qLGRlY29yYXRvcnM6W3t0eXBlOkRyfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHhqLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIixob3N0OnsiW2NsYXNzLm5nLXVudG91Y2hlZF0iOidpcygidW50b3VjaGVkIiknLCJbY2xhc3MubmctdG91Y2hlZF0iOidpcygidG91Y2hlZCIpJywiW2NsYXNzLm5nLXByaXN0aW5lXSI6J2lzKCJwcmlzdGluZSIpJywiW2NsYXNzLm5nLWRpcnR5XSI6J2lzKCJkaXJ0eSIpJywiW2NsYXNzLm5nLXZhbGlkXSI6J2lzKCJ2YWxpZCIpJywiW2NsYXNzLm5nLWludmFsaWRdIjonaXMoImludmFsaWQiKScsIltjbGFzcy5uZy1wZW5kaW5nXSI6J2lzKCJwZW5kaW5nIiknfX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOk1qLGRlY29yYXRvcnM6W3t0eXBlOkRyfV19XX0pLG51bGwpO2NsYXNzIE9qIGV4dGVuZHMgdmp7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9fU9qLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxPaikoU20oQ2osMTApKX0sT2ouybVkaXI9bG8oe3R5cGU6T2osc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cE5hbWUiLCIiXSxbIiIsImZvcm1BcnJheU5hbWUiLCIiXSxbIiIsIm5nTW9kZWxHcm91cCIsIiJdLFsiIiwiZm9ybUdyb3VwIiwiIl0sWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RWYXJzOjE2LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZwdSgibmctdW50b3VjaGVkIixuLmlzKCJ1bnRvdWNoZWQiKSkoIm5nLXRvdWNoZWQiLG4uaXMoInRvdWNoZWQiKSkoIm5nLXByaXN0aW5lIixuLmlzKCJwcmlzdGluZSIpKSgibmctZGlydHkiLG4uaXMoImRpcnR5IikpKCJuZy12YWxpZCIsbi5pcygidmFsaWQiKSkoIm5nLWludmFsaWQiLG4uaXMoImludmFsaWQiKSkoIm5nLXBlbmRpbmciLG4uaXMoInBlbmRpbmciKSkoIm5nLXN1Ym1pdHRlZCIsbi5pcygic3VibWl0dGVkIikpfSxmZWF0dXJlczpbeHBdfSksT2ouY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpDaixkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoT2osW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSIsaG9zdDp7IltjbGFzcy5uZy11bnRvdWNoZWRdIjonaXMoInVudG91Y2hlZCIpJywiW2NsYXNzLm5nLXRvdWNoZWRdIjonaXMoInRvdWNoZWQiKScsIltjbGFzcy5uZy1wcmlzdGluZV0iOidpcygicHJpc3RpbmUiKScsIltjbGFzcy5uZy1kaXJ0eV0iOidpcygiZGlydHkiKScsIltjbGFzcy5uZy12YWxpZF0iOidpcygidmFsaWQiKScsIltjbGFzcy5uZy1pbnZhbGlkXSI6J2lzKCJpbnZhbGlkIiknLCJbY2xhc3MubmctcGVuZGluZ10iOidpcygicGVuZGluZyIpJywiW2NsYXNzLm5nLXN1Ym1pdHRlZF0iOidpcygic3VibWl0dGVkIiknfX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkNqLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpEcn1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IFBqPSdcbiAgICA8ZGl2IFtmb3JtR3JvdXBdPSJteUdyb3VwIj5cbiAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9ImZpcnN0TmFtZSI+XG4gICAgPC9kaXY+XG5cbiAgICBJbiB5b3VyIGNsYXNzOlxuXG4gICAgdGhpcy5teUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgZmlyc3ROYW1lOiBuZXcgRm9ybUNvbnRyb2woKVxuICAgIH0pOycsd2o9J1xuICAgIDxkaXYgW2Zvcm1Hcm91cF09Im15R3JvdXAiPlxuICAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0icGVyc29uIj5cbiAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJmaXJzdE5hbWUiPlxuICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgSW4geW91ciBjbGFzczpcblxuICAgIHRoaXMubXlHcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgIHBlcnNvbjogbmV3IEZvcm1Hcm91cCh7IGZpcnN0TmFtZTogbmV3IEZvcm1Db250cm9sKCkgfSlcbiAgICB9KTsnLGtqPSdcbiAgICA8Zm9ybT5cbiAgICAgICA8ZGl2IG5nTW9kZWxHcm91cD0icGVyc29uIj5cbiAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09InBlcnNvbi5uYW1lIiBuYW1lPSJmaXJzdE5hbWUiPlxuICAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT4nOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBTantzdGF0aWMgY29udHJvbFBhcmVudEV4Y2VwdGlvbigpe3Rocm93IG5ldyBFcnJvcihgZm9ybUNvbnRyb2xOYW1lIG11c3QgYmUgdXNlZCB3aXRoIGEgcGFyZW50IGZvcm1Hcm91cCBkaXJlY3RpdmUuICBZb3UnbGwgd2FudCB0byBhZGQgYSBmb3JtR3JvdXBcbiAgICAgICBkaXJlY3RpdmUgYW5kIHBhc3MgaXQgYW4gZXhpc3RpbmcgRm9ybUdyb3VwIGluc3RhbmNlICh5b3UgY2FuIGNyZWF0ZSBvbmUgaW4geW91ciBjbGFzcykuXG5cbiAgICAgIEV4YW1wbGU6XG5cbiAgICAgICR7UGp9YCl9c3RhdGljIG5nTW9kZWxHcm91cEV4Y2VwdGlvbigpe3Rocm93IG5ldyBFcnJvcihgZm9ybUNvbnRyb2xOYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGggYW4gbmdNb2RlbEdyb3VwIHBhcmVudC4gSXQgaXMgb25seSBjb21wYXRpYmxlIHdpdGggcGFyZW50c1xuICAgICAgIHRoYXQgYWxzbyBoYXZlIGEgImZvcm0iIHByZWZpeDogZm9ybUdyb3VwTmFtZSwgZm9ybUFycmF5TmFtZSwgb3IgZm9ybUdyb3VwLlxuXG4gICAgICAgT3B0aW9uIDE6ICBVcGRhdGUgdGhlIHBhcmVudCB0byBiZSBmb3JtR3JvdXBOYW1lIChyZWFjdGl2ZSBmb3JtIHN0cmF0ZWd5KVxuXG4gICAgICAgICR7d2p9XG5cbiAgICAgICAgT3B0aW9uIDI6IFVzZSBuZ01vZGVsIGluc3RlYWQgb2YgZm9ybUNvbnRyb2xOYW1lICh0ZW1wbGF0ZS1kcml2ZW4gc3RyYXRlZ3kpXG5cbiAgICAgICAgJHtran1gKX1zdGF0aWMgbWlzc2luZ0Zvcm1FeGNlcHRpb24oKXt0aHJvdyBuZXcgRXJyb3IoYGZvcm1Hcm91cCBleHBlY3RzIGEgRm9ybUdyb3VwIGluc3RhbmNlLiBQbGVhc2UgcGFzcyBvbmUgaW4uXG5cbiAgICAgICBFeGFtcGxlOlxuXG4gICAgICAgJHtQan1gKX1zdGF0aWMgZ3JvdXBQYXJlbnRFeGNlcHRpb24oKXt0aHJvdyBuZXcgRXJyb3IoYGZvcm1Hcm91cE5hbWUgbXVzdCBiZSB1c2VkIHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwIGRpcmVjdGl2ZS4gIFlvdSdsbCB3YW50IHRvIGFkZCBhIGZvcm1Hcm91cFxuICAgICAgZGlyZWN0aXZlIGFuZCBwYXNzIGl0IGFuIGV4aXN0aW5nIEZvcm1Hcm91cCBpbnN0YW5jZSAoeW91IGNhbiBjcmVhdGUgb25lIGluIHlvdXIgY2xhc3MpLlxuXG4gICAgICBFeGFtcGxlOlxuXG4gICAgICAke3dqfWApfXN0YXRpYyBhcnJheVBhcmVudEV4Y2VwdGlvbigpe3Rocm93IG5ldyBFcnJvcignZm9ybUFycmF5TmFtZSBtdXN0IGJlIHVzZWQgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXAgZGlyZWN0aXZlLiAgWW91XCdsbCB3YW50IHRvIGFkZCBhIGZvcm1Hcm91cFxuICAgICAgIGRpcmVjdGl2ZSBhbmQgcGFzcyBpdCBhbiBleGlzdGluZyBGb3JtR3JvdXAgaW5zdGFuY2UgKHlvdSBjYW4gY3JlYXRlIG9uZSBpbiB5b3VyIGNsYXNzKS5cblxuICAgICAgICBFeGFtcGxlOlxuXG4gICAgICAgIFxuICAgIDxkaXYgW2Zvcm1Hcm91cF09Im15R3JvdXAiPlxuICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPSJjaXRpZXMiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj0ibGV0IGNpdHkgb2YgY2l0eUFycmF5LmNvbnRyb2xzOyBpbmRleCBhcyBpIj5cbiAgICAgICAgICA8aW5wdXQgW2Zvcm1Db250cm9sTmFtZV09ImkiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgSW4geW91ciBjbGFzczpcblxuICAgIHRoaXMuY2l0eUFycmF5ID0gbmV3IEZvcm1BcnJheShbbmV3IEZvcm1Db250cm9sKFwnU0ZcJyldKTtcbiAgICB0aGlzLm15R3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIGNpdGllczogdGhpcy5jaXR5QXJyYXlcbiAgICB9KTsnKX1zdGF0aWMgZGlzYWJsZWRBdHRyV2FybmluZygpe2NvbnNvbGUud2FybigiXG4gICAgICBJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyB0aGUgZGlzYWJsZWQgYXR0cmlidXRlIHdpdGggYSByZWFjdGl2ZSBmb3JtIGRpcmVjdGl2ZS4gSWYgeW91IHNldCBkaXNhYmxlZCB0byB0cnVlXG4gICAgICB3aGVuIHlvdSBzZXQgdXAgdGhpcyBjb250cm9sIGluIHlvdXIgY29tcG9uZW50IGNsYXNzLCB0aGUgZGlzYWJsZWQgYXR0cmlidXRlIHdpbGwgYWN0dWFsbHkgYmUgc2V0IGluIHRoZSBET00gZm9yXG4gICAgICB5b3UuIFdlIHJlY29tbWVuZCB1c2luZyB0aGlzIGFwcHJvYWNoIHRvIGF2b2lkICdjaGFuZ2VkIGFmdGVyIGNoZWNrZWQnIGVycm9ycy5cblxuICAgICAgRXhhbXBsZTpcbiAgICAgIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgZmlyc3Q6IG5ldyBGb3JtQ29udHJvbCh7dmFsdWU6ICdOYW5jeScsIGRpc2FibGVkOiB0cnVlfSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIGxhc3Q6IG5ldyBGb3JtQ29udHJvbCgnRHJldycsIFZhbGlkYXRvcnMucmVxdWlyZWQpXG4gICAgICB9KTtcbiAgICAiKX1zdGF0aWMgbmdNb2RlbFdhcm5pbmcodCl7Y29uc29sZS53YXJuKGBcbiAgICBJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyBuZ01vZGVsIG9uIHRoZSBzYW1lIGZvcm0gZmllbGQgYXMgJHt0fS5cbiAgICBTdXBwb3J0IGZvciB1c2luZyB0aGUgbmdNb2RlbCBpbnB1dCBwcm9wZXJ0eSBhbmQgbmdNb2RlbENoYW5nZSBldmVudCB3aXRoXG4gICAgcmVhY3RpdmUgZm9ybSBkaXJlY3RpdmVzIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gQW5ndWxhciB2NiBhbmQgd2lsbCBiZSByZW1vdmVkXG4gICAgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBBbmd1bGFyLlxuXG4gICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgc2VlIG91ciBBUEkgZG9jcyBoZXJlOlxuICAgIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvZm9ybXMvJHsiZm9ybUNvbnRyb2wiPT09dD8iRm9ybUNvbnRyb2xEaXJlY3RpdmUiOiJGb3JtQ29udHJvbE5hbWUifSN1c2Utd2l0aC1uZ21vZGVsXG4gICAgYCl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBEaih0LGUpe3JldHVyblsuLi5lLnBhdGgsdF19ZnVuY3Rpb24gRWoodCxlKXsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJih0fHxIaihlLCJDYW5ub3QgZmluZCBjb250cm9sIHdpdGgiKSxlLnZhbHVlQWNjZXNzb3J8fEhqKGUsIk5vIHZhbHVlIGFjY2Vzc29yIGZvciBmb3JtIGNvbnRyb2wgd2l0aCIpKSxUaih0LGUpLGUudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKHQudmFsdWUpLChmdW5jdGlvbiBuKHQsZSl7ZS52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoKG49Pnt0Ll9wZW5kaW5nVmFsdWU9bix0Ll9wZW5kaW5nQ2hhbmdlPSEwLHQuX3BlbmRpbmdEaXJ0eT0hMCwiY2hhbmdlIj09PXQudXBkYXRlT24mJnpqKHQsZSl9KSl9KSh0LGUpLChmdW5jdGlvbiBvKHQsZSl7Y29uc3Qgbj0odCxuKT0+e2UudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKHQpLG4mJmUudmlld1RvTW9kZWxVcGRhdGUodCl9O3QucmVnaXN0ZXJPbkNoYW5nZShuKSxlLl9yZWdpc3Rlck9uRGVzdHJveSgoKCk9Pnt0Ll91bnJlZ2lzdGVyT25DaGFuZ2Uobil9KSl9KSh0LGUpLChmdW5jdGlvbiBpKHQsZSl7ZS52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25Ub3VjaGVkKCgoKT0+e3QuX3BlbmRpbmdUb3VjaGVkPSEwLCJibHVyIj09PXQudXBkYXRlT24mJnQuX3BlbmRpbmdDaGFuZ2UmJnpqKHQsZSksInN1Ym1pdCIhPT10LnVwZGF0ZU9uJiZ0Lm1hcmtBc1RvdWNoZWQoKX0pKX0pKHQsZSksKGZ1bmN0aW9uIGEodCxlKXtpZihlLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSl7Y29uc3Qgbj10PT57ZS52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUodCl9O3QucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKG4pLGUuX3JlZ2lzdGVyT25EZXN0cm95KCgoKT0+e3QuX3VucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKG4pfSkpfX0pKHQsZSl9ZnVuY3Rpb24gUmoodCxlLG49ITApe2NvbnN0IG89KCk9PntuJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJihmdW5jdGlvbiB0KGUpe0hqKGUsIlRoZXJlIGlzIG5vIEZvcm1Db250cm9sIGluc3RhbmNlIGF0dGFjaGVkIHRvIGZvcm0gY29udHJvbCBlbGVtZW50IHdpdGgiKX0pKGUpfTtlLnZhbHVlQWNjZXNzb3ImJihlLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPbkNoYW5nZShvKSxlLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQobykpLE5qKHQsZSksdCYmKGUuX2ludm9rZU9uRGVzdHJveUNhbGxiYWNrcygpLHQuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgoKT0+e30pKSl9ZnVuY3Rpb24gQWoodCxlKXt0LmZvckVhY2goKHQ9Pnt0LnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UmJnQucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShlKX0pKX1mdW5jdGlvbiBUaih0LGUpe2NvbnN0IG49dWoodCk7bnVsbCE9PWUudmFsaWRhdG9yP3Quc2V0VmFsaWRhdG9ycyhtaihuLGUudmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIG4mJnQuc2V0VmFsaWRhdG9ycyhbbl0pO2NvbnN0IG89ZmoodCk7bnVsbCE9PWUuYXN5bmNWYWxpZGF0b3I/dC5zZXRBc3luY1ZhbGlkYXRvcnMobWoobyxlLmFzeW5jVmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIG8mJnQuc2V0QXN5bmNWYWxpZGF0b3JzKFtvXSk7Y29uc3QgaT0oKT0+dC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7QWooZS5fcmF3VmFsaWRhdG9ycyxpKSxBaihlLl9yYXdBc3luY1ZhbGlkYXRvcnMsaSl9ZnVuY3Rpb24gTmoodCxlKXtsZXQgbj0hMTtpZihudWxsIT09dCl7aWYobnVsbCE9PWUudmFsaWRhdG9yKXtjb25zdCBvPXVqKHQpO2lmKEFycmF5LmlzQXJyYXkobykmJm8ubGVuZ3RoPjApe2NvbnN0IGk9by5maWx0ZXIoKHQ9PnQhPT1lLnZhbGlkYXRvcikpO2kubGVuZ3RoIT09by5sZW5ndGgmJihuPSEwLHQuc2V0VmFsaWRhdG9ycyhpKSl9fWlmKG51bGwhPT1lLmFzeW5jVmFsaWRhdG9yKXtjb25zdCBvPWZqKHQpO2lmKEFycmF5LmlzQXJyYXkobykmJm8ubGVuZ3RoPjApe2NvbnN0IGk9by5maWx0ZXIoKHQ9PnQhPT1lLmFzeW5jVmFsaWRhdG9yKSk7aS5sZW5ndGghPT1vLmxlbmd0aCYmKG49ITAsdC5zZXRBc3luY1ZhbGlkYXRvcnMoaSkpfX19Y29uc3Qgbz0oKT0+e307cmV0dXJuIEFqKGUuX3Jhd1ZhbGlkYXRvcnMsbyksQWooZS5fcmF3QXN5bmNWYWxpZGF0b3JzLG8pLG59ZnVuY3Rpb24gemoodCxlKXt0Ll9wZW5kaW5nRGlydHkmJnQubWFya0FzRGlydHkoKSx0LnNldFZhbHVlKHQuX3BlbmRpbmdWYWx1ZSx7ZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiExfSksZS52aWV3VG9Nb2RlbFVwZGF0ZSh0Ll9wZW5kaW5nVmFsdWUpLHQuX3BlbmRpbmdDaGFuZ2U9ITF9ZnVuY3Rpb24gSWoodCxlKXtudWxsIT10fHwidW5kZWZpbmVkIiE9dHlwZW9mIG5nRGV2TW9kZSYmIW5nRGV2TW9kZXx8SGooZSwiQ2Fubm90IGZpbmQgY29udHJvbCB3aXRoIiksVGoodCxlKX1mdW5jdGlvbiBIaih0LGUpe2xldCBuO3Rocm93IG49dC5wYXRoLmxlbmd0aD4xP2BwYXRoOiAnJHt0LnBhdGguam9pbigiIC0+ICIpfSdgOnQucGF0aFswXT9gbmFtZTogJyR7dC5wYXRofSdgOiJ1bnNwZWNpZmllZCBuYW1lIGF0dHJpYnV0ZSIsbmV3IEVycm9yKGAke2V9ICR7bn1gKX1mdW5jdGlvbiBGaih0LGUpe2lmKCF0Lmhhc093blByb3BlcnR5KCJtb2RlbCIpKXJldHVybiExO2NvbnN0IG49dC5tb2RlbDtyZXR1cm4hIW4uaXNGaXJzdENoYW5nZSgpfHwhT2JqZWN0LmlzKGUsbi5jdXJyZW50VmFsdWUpfWZ1bmN0aW9uIExqKHQsZSl7dC5fc3luY1BlbmRpbmdDb250cm9scygpLGUuZm9yRWFjaCgodD0+e2NvbnN0IGU9dC5jb250cm9sOyJzdWJtaXQiPT09ZS51cGRhdGVPbiYmZS5fcGVuZGluZ0NoYW5nZSYmKHQudmlld1RvTW9kZWxVcGRhdGUoZS5fcGVuZGluZ1ZhbHVlKSxlLl9wZW5kaW5nQ2hhbmdlPSExKX0pKX1mdW5jdGlvbiBCaih0LGUpe2lmKCFlKXJldHVybiBudWxsO2xldCBuLG8saTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKXx8InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0Rldk1vZGUmJiFuZ0Rldk1vZGV8fEhqKHQsIlZhbHVlIGFjY2Vzc29yIHdhcyBub3QgcHJvdmlkZWQgYXMgYW4gYXJyYXkgZm9yIGZvcm0gY29udHJvbCB3aXRoIiksZS5mb3JFYWNoKChlPT57ZS5jb25zdHJ1Y3Rvcj09PVZWP249ZTooZnVuY3Rpb24gYSh0KXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHQuY29uc3RydWN0b3IpPT09elZ9KShlKT8obyYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZIaih0LCJNb3JlIHRoYW4gb25lIGJ1aWx0LWluIHZhbHVlIGFjY2Vzc29yIG1hdGNoZXMgZm9ybSBjb250cm9sIHdpdGgiKSxvPWUpOihpJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJkhqKHQsIk1vcmUgdGhhbiBvbmUgY3VzdG9tIHZhbHVlIGFjY2Vzc29yIG1hdGNoZXMgZm9ybSBjb250cm9sIHdpdGgiKSxpPWUpfSkpLGl8fG98fG58fCgoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJkhqKHQsIk5vIHZhbGlkIHZhbHVlIGFjY2Vzc29yIGZvciBmb3JtIGNvbnRyb2wgd2l0aCIpLG51bGwpfWZ1bmN0aW9uIFZqKHQsZSl7Y29uc3Qgbj10LmluZGV4T2YoZSk7bj4tMSYmdC5zcGxpY2UobiwxKX1mdW5jdGlvbiBqaih0LGUsbixvKXsibmV2ZXIiIT09byYmKChudWxsIT09byYmIm9uY2UiIT09b3x8ZS5fbmdNb2RlbFdhcm5pbmdTZW50T25jZSkmJigiYWx3YXlzIiE9PW98fG4uX25nTW9kZWxXYXJuaW5nU2VudCl8fChTai5uZ01vZGVsV2FybmluZyh0KSxlLl9uZ01vZGVsV2FybmluZ1NlbnRPbmNlPSEwLG4uX25nTW9kZWxXYXJuaW5nU2VudD0hMCkpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jb25zdCBVaj0iVkFMSUQiLEdqPSJJTlZBTElEIixXaj0iUEVORElORyIsWWo9IkRJU0FCTEVEIjtmdW5jdGlvbiBxaih0KXtyZXR1cm4oSmoodCk/dC52YWxpZGF0b3JzOnQpfHxudWxsfWZ1bmN0aW9uIFpqKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP2NqKHQpOnR8fG51bGx9ZnVuY3Rpb24gWGoodCxlKXtyZXR1cm4oSmooZSk/ZS5hc3luY1ZhbGlkYXRvcnM6dCl8fG51bGx9ZnVuY3Rpb24gS2oodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/cGoodCk6dHx8bnVsbH1mdW5jdGlvbiBKaih0KXtyZXR1cm4gbnVsbCE9dCYmIUFycmF5LmlzQXJyYXkodCkmJiJvYmplY3QiPT10eXBlb2YgdH1jbGFzcyBRantjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9KCk9Pnt9LHRoaXMuX3BhcmVudD1udWxsLHRoaXMucHJpc3RpbmU9ITAsdGhpcy50b3VjaGVkPSExLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2U9W10sdGhpcy5fcmF3VmFsaWRhdG9ycz10LHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1lLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49WmoodGhpcy5fcmF3VmFsaWRhdG9ycyksdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPUtqKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufXNldCB2YWxpZGF0b3IodCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPXR9Z2V0IGFzeW5jVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbn1zZXQgYXN5bmNWYWxpZGF0b3IodCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj10fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fWdldCB2YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PVVqfWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09R2p9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PVdqfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PVlqfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzIT09WWp9Z2V0IGRpcnR5KCl7cmV0dXJuIXRoaXMucHJpc3RpbmV9Z2V0IHVudG91Y2hlZCgpe3JldHVybiF0aGlzLnRvdWNoZWR9Z2V0IHVwZGF0ZU9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZU9uP3RoaXMuX3VwZGF0ZU9uOnRoaXMucGFyZW50P3RoaXMucGFyZW50LnVwZGF0ZU9uOiJjaGFuZ2UifXNldFZhbGlkYXRvcnModCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10LHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49WmoodCl9c2V0QXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10LHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1Laih0KX1hZGRWYWxpZGF0b3JzKHQpe3RoaXMuc2V0VmFsaWRhdG9ycyhiaih0LHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1hZGRBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoYmoodCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKHQpe3RoaXMuc2V0VmFsaWRhdG9ycyh5aih0LHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1yZW1vdmVBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoeWoodCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1oYXNWYWxpZGF0b3IodCl7cmV0dXJuIGhqKHRoaXMuX3Jhd1ZhbGlkYXRvcnMsdCl9aGFzQXN5bmNWYWxpZGF0b3IodCl7cmV0dXJuIGhqKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyx0KX1jbGVhclZhbGlkYXRvcnMoKXt0aGlzLnZhbGlkYXRvcj1udWxsfWNsZWFyQXN5bmNWYWxpZGF0b3JzKCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1udWxsfW1hcmtBc1RvdWNoZWQodD17fSl7dGhpcy50b3VjaGVkPSEwLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKHQpfW1hcmtBbGxBc1RvdWNoZWQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKCh0PT50Lm1hcmtBbGxBc1RvdWNoZWQoKSkpfW1hcmtBc1VudG91Y2hlZCh0PXt9KXt0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9ITEsdGhpcy5fZm9yRWFjaENoaWxkKCh0PT57dC5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfW1hcmtBc0RpcnR5KHQ9e30pe3RoaXMucHJpc3RpbmU9ITEsdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc0RpcnR5KHQpfW1hcmtBc1ByaXN0aW5lKHQ9e30pe3RoaXMucHJpc3RpbmU9ITAsdGhpcy5fcGVuZGluZ0RpcnR5PSExLHRoaXMuX2ZvckVhY2hDaGlsZCgodD0+e3QubWFya0FzUHJpc3RpbmUoe29ubHlTZWxmOiEwfSl9KSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX1tYXJrQXNQZW5kaW5nKHQ9e30pe3RoaXMuc3RhdHVzPVdqLCExIT09dC5lbWl0RXZlbnQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyh0KX1kaXNhYmxlKHQ9e30pe2NvbnN0IGU9dGhpcy5fcGFyZW50TWFya2VkRGlydHkodC5vbmx5U2VsZik7dGhpcy5zdGF0dXM9WWosdGhpcy5lcnJvcnM9bnVsbCx0aGlzLl9mb3JFYWNoQ2hpbGQoKGU9PntlLmRpc2FibGUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtvbmx5U2VsZjohMH0pKX0pKSx0aGlzLl91cGRhdGVWYWx1ZSgpLCExIT09dC5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2tpcFByaXN0aW5lQ2hlY2s6ZX0pKSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goKHQ9PnQoITApKSl9ZW5hYmxlKHQ9e30pe2NvbnN0IGU9dGhpcy5fcGFyZW50TWFya2VkRGlydHkodC5vbmx5U2VsZik7dGhpcy5zdGF0dXM9VWosdGhpcy5fZm9yRWFjaENoaWxkKChlPT57ZS5lbmFibGUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtvbmx5U2VsZjohMH0pKX0pKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDp0LmVtaXRFdmVudH0pLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NraXBQcmlzdGluZUNoZWNrOmV9KSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKCh0PT50KCExKSkpfV91cGRhdGVBbmNlc3RvcnModCl7dGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmKHRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpLHQuc2tpcFByaXN0aW5lQ2hlY2t8fHRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUoKSx0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQoKSl9c2V0UGFyZW50KHQpe3RoaXMuX3BhcmVudD10fXVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkodD17fSl7dGhpcy5fc2V0SW5pdGlhbFN0YXR1cygpLHRoaXMuX3VwZGF0ZVZhbHVlKCksdGhpcy5lbmFibGVkJiYodGhpcy5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKSx0aGlzLmVycm9ycz10aGlzLl9ydW5WYWxpZGF0b3IoKSx0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSx0aGlzLnN0YXR1cyE9PVVqJiZ0aGlzLnN0YXR1cyE9PVdqfHx0aGlzLl9ydW5Bc3luY1ZhbGlkYXRvcih0LmVtaXRFdmVudCkpLCExIT09dC5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkodCl9X3VwZGF0ZVRyZWVWYWxpZGl0eSh0PXtlbWl0RXZlbnQ6ITB9KXt0aGlzLl9mb3JFYWNoQ2hpbGQoKGU9PmUuX3VwZGF0ZVRyZWVWYWxpZGl0eSh0KSkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OnQuZW1pdEV2ZW50fSl9X3NldEluaXRpYWxTdGF0dXMoKXt0aGlzLnN0YXR1cz10aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/WWo6VWp9X3J1blZhbGlkYXRvcigpe3JldHVybiB0aGlzLnZhbGlkYXRvcj90aGlzLnZhbGlkYXRvcih0aGlzKTpudWxsfV9ydW5Bc3luY1ZhbGlkYXRvcih0KXtpZih0aGlzLmFzeW5jVmFsaWRhdG9yKXt0aGlzLnN0YXR1cz1Xaix0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITA7Y29uc3QgZT1paih0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUoKGU9Pnt0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEsdGhpcy5zZXRFcnJvcnMoZSx7ZW1pdEV2ZW50OnR9KX0pKX19X2NhbmNlbEV4aXN0aW5nU3Vic2NyaXB0aW9uKCl7dGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uJiYodGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSExKX1zZXRFcnJvcnModCxlPXt9KXt0aGlzLmVycm9ycz10LHRoaXMuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzKCExIT09ZS5lbWl0RXZlbnQpfWdldCh0KXtyZXR1cm4oZnVuY3Rpb24gZSh0LG4sbyl7aWYobnVsbD09bilyZXR1cm4gbnVsbDtpZihBcnJheS5pc0FycmF5KG4pfHwobj1uLnNwbGl0KG8pKSxBcnJheS5pc0FycmF5KG4pJiYwPT09bi5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IGk9dDtyZXR1cm4gbi5mb3JFYWNoKCh0PT57aT1pIGluc3RhbmNlb2YgdFU/aS5jb250cm9scy5oYXNPd25Qcm9wZXJ0eSh0KT9pLmNvbnRyb2xzW3RdOm51bGw6aSBpbnN0YW5jZW9mIGVVJiZpLmF0KHQpfHxudWxsfSkpLGl9KSh0aGlzLHQsIi4iKX1nZXRFcnJvcih0LGUpe2NvbnN0IG49ZT90aGlzLmdldChlKTp0aGlzO3JldHVybiBuJiZuLmVycm9ycz9uLmVycm9yc1t0XTpudWxsfWhhc0Vycm9yKHQsZSl7cmV0dXJuISF0aGlzLmdldEVycm9yKHQsZSl9Z2V0IHJvb3QoKXtsZXQgdD10aGlzO2Zvcig7dC5fcGFyZW50Oyl0PXQuX3BhcmVudDtyZXR1cm4gdH1fdXBkYXRlQ29udHJvbHNFcnJvcnModCl7dGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksdCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll91cGRhdGVDb250cm9sc0Vycm9ycyh0KX1faW5pdE9ic2VydmFibGVzKCl7dGhpcy52YWx1ZUNoYW5nZXM9bmV3IExoLHRoaXMuc3RhdHVzQ2hhbmdlcz1uZXcgTGh9X2NhbGN1bGF0ZVN0YXR1cygpe3JldHVybiB0aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/WWo6dGhpcy5lcnJvcnM/R2o6dGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yfHx0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMoV2opP1dqOnRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhHaik/R2o6VWp9X2FueUNvbnRyb2xzSGF2ZVN0YXR1cyh0KXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMoKGU9PmUuc3RhdHVzPT09dCkpfV9hbnlDb250cm9sc0RpcnR5KCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKCh0PT50LmRpcnR5KSl9X2FueUNvbnRyb2xzVG91Y2hlZCgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scygodD0+dC50b3VjaGVkKSl9X3VwZGF0ZVByaXN0aW5lKHQ9e30pe3RoaXMucHJpc3RpbmU9IXRoaXMuX2FueUNvbnRyb2xzRGlydHkoKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKHQpfV91cGRhdGVUb3VjaGVkKHQ9e30pe3RoaXMudG91Y2hlZD10aGlzLl9hbnlDb250cm9sc1RvdWNoZWQoKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQodCl9X2lzQm94ZWRWYWx1ZSh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10JiYyPT09T2JqZWN0LmtleXModCkubGVuZ3RoJiYidmFsdWUiaW4gdCYmImRpc2FibGVkImluIHR9X3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHQpe3RoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT10fV9zZXRVcGRhdGVTdHJhdGVneSh0KXtKaih0KSYmbnVsbCE9dC51cGRhdGVPbiYmKHRoaXMuX3VwZGF0ZU9uPXQudXBkYXRlT24pfV9wYXJlbnRNYXJrZWREaXJ0eSh0KXtyZXR1cm4hdCYmISghdGhpcy5fcGFyZW50fHwhdGhpcy5fcGFyZW50LmRpcnR5KSYmIXRoaXMuX3BhcmVudC5fYW55Q29udHJvbHNEaXJ0eSgpfX1jbGFzcyAkaiBleHRlbmRzIFFqe2NvbnN0cnVjdG9yKHQ9bnVsbCxlLG4pe3N1cGVyKHFqKGUpLFhqKG4sZSkpLHRoaXMuX29uQ2hhbmdlPVtdLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKHQpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGUpLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pfXNldFZhbHVlKHQsZT17fSl7dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dCx0aGlzLl9vbkNoYW5nZS5sZW5ndGgmJiExIT09ZS5lbWl0TW9kZWxUb1ZpZXdDaGFuZ2UmJnRoaXMuX29uQ2hhbmdlLmZvckVhY2goKHQ9PnQodGhpcy52YWx1ZSwhMSE9PWUuZW1pdFZpZXdUb01vZGVsQ2hhbmdlKSkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX1wYXRjaFZhbHVlKHQsZT17fSl7dGhpcy5zZXRWYWx1ZSh0LGUpfXJlc2V0KHQ9bnVsbCxlPXt9KXt0aGlzLl9hcHBseUZvcm1TdGF0ZSh0KSx0aGlzLm1hcmtBc1ByaXN0aW5lKGUpLHRoaXMubWFya0FzVW50b3VjaGVkKGUpLHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSxlKSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExfV91cGRhdGVWYWx1ZSgpe31fYW55Q29udHJvbHModCl7cmV0dXJuITF9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZH1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMuX29uQ2hhbmdlLnB1c2godCl9X3VucmVnaXN0ZXJPbkNoYW5nZSh0KXtWaih0aGlzLl9vbkNoYW5nZSx0KX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UodCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKHQpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSh0KXtWaih0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLHQpfV9mb3JFYWNoQ2hpbGQodCl7fV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7cmV0dXJuISgic3VibWl0IiE9PXRoaXMudXBkYXRlT258fCh0aGlzLl9wZW5kaW5nRGlydHkmJnRoaXMubWFya0FzRGlydHkoKSx0aGlzLl9wZW5kaW5nVG91Y2hlZCYmdGhpcy5tYXJrQXNUb3VjaGVkKCksIXRoaXMuX3BlbmRpbmdDaGFuZ2UpfHwodGhpcy5zZXRWYWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUse29ubHlTZWxmOiEwLGVtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLDApKX1fYXBwbHlGb3JtU3RhdGUodCl7dGhpcy5faXNCb3hlZFZhbHVlKHQpPyh0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT10LnZhbHVlLHQuZGlzYWJsZWQ/dGhpcy5kaXNhYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KTp0aGlzLmVuYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSkpOnRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXR9fWNsYXNzIHRVIGV4dGVuZHMgUWp7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHFqKGUpLFhqKG4sZSkpLHRoaXMuY29udHJvbHM9dCx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShlKSx0aGlzLl9zZXRVcENvbnRyb2xzKCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5jVmFsaWRhdG9yfSl9cmVnaXN0ZXJDb250cm9sKHQsZSl7cmV0dXJuIHRoaXMuY29udHJvbHNbdF0/dGhpcy5jb250cm9sc1t0XToodGhpcy5jb250cm9sc1t0XT1lLGUuc2V0UGFyZW50KHRoaXMpLGUuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSksZSl9YWRkQ29udHJvbCh0LGUsbj17fSl7dGhpcy5yZWdpc3RlckNvbnRyb2wodCxlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDpuLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXJlbW92ZUNvbnRyb2wodCxlPXt9KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKCk9Pnt9KSksZGVsZXRlIHRoaXMuY29udHJvbHNbdF0sdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1zZXRDb250cm9sKHQsZSxuPXt9KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKCk9Pnt9KSksZGVsZXRlIHRoaXMuY29udHJvbHNbdF0sZSYmdGhpcy5yZWdpc3RlckNvbnRyb2wodCxlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDpuLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfWNvbnRhaW5zKHQpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KHQpJiZ0aGlzLmNvbnRyb2xzW3RdLmVuYWJsZWR9c2V0VmFsdWUodCxlPXt9KXt0aGlzLl9jaGVja0FsbFZhbHVlc1ByZXNlbnQodCksT2JqZWN0LmtleXModCkuZm9yRWFjaCgobj0+e3RoaXMuX3Rocm93SWZDb250cm9sTWlzc2luZyhuKSx0aGlzLmNvbnRyb2xzW25dLnNldFZhbHVlKHRbbl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX1wYXRjaFZhbHVlKHQsZT17fSl7bnVsbCE9dCYmKE9iamVjdC5rZXlzKHQpLmZvckVhY2goKG49Pnt0aGlzLmNvbnRyb2xzW25dJiZ0aGlzLmNvbnRyb2xzW25dLnBhdGNoVmFsdWUodFtuXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpKX1yZXNldCh0PXt9LGU9e30pe3RoaXMuX2ZvckVhY2hDaGlsZCgoKG4sbyk9PntuLnJlc2V0KHRbb10se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSkpLHRoaXMuX3VwZGF0ZVByaXN0aW5lKGUpLHRoaXMuX3VwZGF0ZVRvdWNoZWQoZSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMuX3JlZHVjZUNoaWxkcmVuKHt9LCgodCxlLG4pPT4odFtuXT1lIGluc3RhbmNlb2YgJGo/ZS52YWx1ZTplLmdldFJhd1ZhbHVlKCksdCkpKX1fc3luY1BlbmRpbmdDb250cm9scygpe2xldCB0PXRoaXMuX3JlZHVjZUNoaWxkcmVuKCExLCgodCxlKT0+ISFlLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCl8fHQpKTtyZXR1cm4gdCYmdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLHR9X3Rocm93SWZDb250cm9sTWlzc2luZyh0KXtpZighT2JqZWN0LmtleXModGhpcy5jb250cm9scykubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiXG4gICAgICAgIFRoZXJlIGFyZSBubyBmb3JtIGNvbnRyb2xzIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIGdyb3VwIHlldC4gSWYgeW91J3JlIHVzaW5nIG5nTW9kZWwsXG4gICAgICAgIHlvdSBtYXkgd2FudCB0byBjaGVjayBuZXh0IHRpY2sgKGUuZy4gdXNlIHNldFRpbWVvdXQpLlxuICAgICAgIik7aWYoIXRoaXMuY29udHJvbHNbdF0pdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBmb3JtIGNvbnRyb2wgd2l0aCBuYW1lOiAke3R9LmApfV9mb3JFYWNoQ2hpbGQodCl7T2JqZWN0LmtleXModGhpcy5jb250cm9scykuZm9yRWFjaCgoZT0+e2NvbnN0IG49dGhpcy5jb250cm9sc1tlXTtuJiZ0KG4sZSl9KSl9X3NldFVwQ29udHJvbHMoKXt0aGlzLl9mb3JFYWNoQ2hpbGQoKHQ9Pnt0LnNldFBhcmVudCh0aGlzKSx0Ll9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpfSkpfV91cGRhdGVWYWx1ZSgpe3RoaXMudmFsdWU9dGhpcy5fcmVkdWNlVmFsdWUoKX1fYW55Q29udHJvbHModCl7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModGhpcy5jb250cm9scykpe2NvbnN0IG49dGhpcy5jb250cm9sc1tlXTtpZih0aGlzLmNvbnRhaW5zKGUpJiZ0KG4pKXJldHVybiEwfXJldHVybiExfV9yZWR1Y2VWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwoKHQsZSxuKT0+KChlLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYodFtuXT1lLnZhbHVlKSx0KSkpfV9yZWR1Y2VDaGlsZHJlbih0LGUpe2xldCBuPXQ7cmV0dXJuIHRoaXMuX2ZvckVhY2hDaGlsZCgoKHQsbyk9PntuPWUobix0LG8pfSkpLG59X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IoY29uc3QgdCBvZiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRyb2xzW3RdLmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfV9jaGVja0FsbFZhbHVlc1ByZXNlbnQodCl7dGhpcy5fZm9yRWFjaENoaWxkKCgoZSxuKT0+e2lmKHZvaWQgMD09PXRbbl0pdGhyb3cgbmV3IEVycm9yKGBNdXN0IHN1cHBseSBhIHZhbHVlIGZvciBmb3JtIGNvbnRyb2wgd2l0aCBuYW1lOiAnJHtufScuYCl9KSl9fWNsYXNzIGVVIGV4dGVuZHMgUWp7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHFqKGUpLFhqKG4sZSkpLHRoaXMuY29udHJvbHM9dCx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShlKSx0aGlzLl9zZXRVcENvbnRyb2xzKCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5jVmFsaWRhdG9yfSl9YXQodCl7cmV0dXJuIHRoaXMuY29udHJvbHNbdF19cHVzaCh0LGU9e30pe3RoaXMuY29udHJvbHMucHVzaCh0KSx0aGlzLl9yZWdpc3RlckNvbnRyb2wodCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1pbnNlcnQodCxlLG49e30pe3RoaXMuY29udHJvbHMuc3BsaWNlKHQsMCxlKSx0aGlzLl9yZWdpc3RlckNvbnRyb2woZSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6bi5lbWl0RXZlbnR9KX1yZW1vdmVBdCh0LGU9e30pe3RoaXMuY29udHJvbHNbdF0mJnRoaXMuY29udHJvbHNbdF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgoKT0+e30pKSx0aGlzLmNvbnRyb2xzLnNwbGljZSh0LDEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9c2V0Q29udHJvbCh0LGUsbj17fSl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCgpPT57fSkpLHRoaXMuY29udHJvbHMuc3BsaWNlKHQsMSksZSYmKHRoaXMuY29udHJvbHMuc3BsaWNlKHQsMCxlKSx0aGlzLl9yZWdpc3RlckNvbnRyb2woZSkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50Om4uZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmNvbnRyb2xzLmxlbmd0aH1zZXRWYWx1ZSh0LGU9e30pe3RoaXMuX2NoZWNrQWxsVmFsdWVzUHJlc2VudCh0KSx0LmZvckVhY2goKCh0LG4pPT57dGhpcy5fdGhyb3dJZkNvbnRyb2xNaXNzaW5nKG4pLHRoaXMuYXQobikuc2V0VmFsdWUodCx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfXBhdGNoVmFsdWUodCxlPXt9KXtudWxsIT10JiYodC5mb3JFYWNoKCgodCxuKT0+e3RoaXMuYXQobikmJnRoaXMuYXQobikucGF0Y2hWYWx1ZSh0LHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSkpfXJlc2V0KHQ9W10sZT17fSl7dGhpcy5fZm9yRWFjaENoaWxkKCgobixvKT0+e24ucmVzZXQodFtvXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSksdGhpcy5fdXBkYXRlUHJpc3RpbmUoZSksdGhpcy5fdXBkYXRlVG91Y2hlZChlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5jb250cm9scy5tYXAoKHQ9PnQgaW5zdGFuY2VvZiAkaj90LnZhbHVlOnQuZ2V0UmF3VmFsdWUoKSkpfWNsZWFyKHQ9e30pe3RoaXMuY29udHJvbHMubGVuZ3RoPDF8fCh0aGlzLl9mb3JFYWNoQ2hpbGQoKHQ9PnQuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgoKT0+e30pKSkpLHRoaXMuY29udHJvbHMuc3BsaWNlKDApLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OnQuZW1pdEV2ZW50fSkpfV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7bGV0IHQ9dGhpcy5jb250cm9scy5yZWR1Y2UoKCh0LGUpPT4hIWUuX3N5bmNQZW5kaW5nQ29udHJvbHMoKXx8dCksITEpO3JldHVybiB0JiZ0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwfSksdH1fdGhyb3dJZkNvbnRyb2xNaXNzaW5nKHQpe2lmKCF0aGlzLmNvbnRyb2xzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlxuICAgICAgICBUaGVyZSBhcmUgbm8gZm9ybSBjb250cm9scyByZWdpc3RlcmVkIHdpdGggdGhpcyBhcnJheSB5ZXQuIElmIHlvdSdyZSB1c2luZyBuZ01vZGVsLFxuICAgICAgICB5b3UgbWF5IHdhbnQgdG8gY2hlY2sgbmV4dCB0aWNrIChlLmcuIHVzZSBzZXRUaW1lb3V0KS5cbiAgICAgICIpO2lmKCF0aGlzLmF0KHQpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgZm9ybSBjb250cm9sIGF0IGluZGV4ICR7dH1gKX1fZm9yRWFjaENoaWxkKHQpe3RoaXMuY29udHJvbHMuZm9yRWFjaCgoKGUsbik9Pnt0KGUsbil9KSl9X3VwZGF0ZVZhbHVlKCl7dGhpcy52YWx1ZT10aGlzLmNvbnRyb2xzLmZpbHRlcigodD0+dC5lbmFibGVkfHx0aGlzLmRpc2FibGVkKSkubWFwKCh0PT50LnZhbHVlKSl9X2FueUNvbnRyb2xzKHQpe3JldHVybiB0aGlzLmNvbnRyb2xzLnNvbWUoKGU9PmUuZW5hYmxlZCYmdChlKSkpfV9zZXRVcENvbnRyb2xzKCl7dGhpcy5fZm9yRWFjaENoaWxkKCh0PT50aGlzLl9yZWdpc3RlckNvbnRyb2wodCkpKX1fY2hlY2tBbGxWYWx1ZXNQcmVzZW50KHQpe3RoaXMuX2ZvckVhY2hDaGlsZCgoKGUsbik9PntpZih2b2lkIDA9PT10W25dKXRocm93IG5ldyBFcnJvcihgTXVzdCBzdXBwbHkgYSB2YWx1ZSBmb3IgZm9ybSBjb250cm9sIGF0IGluZGV4OiAke259LmApfSkpfV9hbGxDb250cm9sc0Rpc2FibGVkKCl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5jb250cm9scylpZih0LmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIHRoaXMuY29udHJvbHMubGVuZ3RoPjB8fHRoaXMuZGlzYWJsZWR9X3JlZ2lzdGVyQ29udHJvbCh0KXt0LnNldFBhcmVudCh0aGlzKSx0Ll9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgblU9e3Byb3ZpZGU6Q2osdXNlRXhpc3Rpbmc6cWUoKCgpPT5pVSkpfSxvVT1Qcm9taXNlLnJlc29sdmUobnVsbCk7Y2xhc3MgaVUgZXh0ZW5kcyBDantjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5zdWJtaXR0ZWQ9ITEsdGhpcy5fZGlyZWN0aXZlcz1bXSx0aGlzLm5nU3VibWl0PW5ldyBMaCx0aGlzLmZvcm09bmV3IHRVKHt9LGNqKHQpLHBqKGUpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXN9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtfWdldCBwYXRoKCl7cmV0dXJuW119Z2V0IGNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc31hZGRDb250cm9sKHQpe29VLnRoZW4oKCgpPT57Y29uc3QgZT10aGlzLl9maW5kQ29udGFpbmVyKHQucGF0aCk7dC5jb250cm9sPWUucmVnaXN0ZXJDb250cm9sKHQubmFtZSx0LmNvbnRyb2wpLEVqKHQuY29udHJvbCx0KSx0LmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5fZGlyZWN0aXZlcy5wdXNoKHQpfSkpfWdldENvbnRyb2wodCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX1yZW1vdmVDb250cm9sKHQpe29VLnRoZW4oKCgpPT57Y29uc3QgZT10aGlzLl9maW5kQ29udGFpbmVyKHQucGF0aCk7ZSYmZS5yZW1vdmVDb250cm9sKHQubmFtZSksVmoodGhpcy5fZGlyZWN0aXZlcyx0KX0pKX1hZGRGb3JtR3JvdXAodCl7b1UudGhlbigoKCk9Pntjb25zdCBlPXRoaXMuX2ZpbmRDb250YWluZXIodC5wYXRoKSxuPW5ldyB0VSh7fSk7SWoobix0KSxlLnJlZ2lzdGVyQ29udHJvbCh0Lm5hbWUsbiksbi51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pKX1yZW1vdmVGb3JtR3JvdXAodCl7b1UudGhlbigoKCk9Pntjb25zdCBlPXRoaXMuX2ZpbmRDb250YWluZXIodC5wYXRoKTtlJiZlLnJlbW92ZUNvbnRyb2wodC5uYW1lKX0pKX1nZXRGb3JtR3JvdXAodCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX11cGRhdGVNb2RlbCh0LGUpe29VLnRoZW4oKCgpPT57dGhpcy5mb3JtLmdldCh0LnBhdGgpLnNldFZhbHVlKGUpfSkpfXNldFZhbHVlKHQpe3RoaXMuY29udHJvbC5zZXRWYWx1ZSh0KX1vblN1Ym1pdCh0KXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9ITAsTGoodGhpcy5mb3JtLHRoaXMuX2RpcmVjdGl2ZXMpLHRoaXMubmdTdWJtaXQuZW1pdCh0KSwhMX1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0odCl7dGhpcy5mb3JtLnJlc2V0KHQpLHRoaXMuc3VibWl0dGVkPSExfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5mb3JtLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9maW5kQ29udGFpbmVyKHQpe3JldHVybiB0LnBvcCgpLHQubGVuZ3RoP3RoaXMuZm9ybS5nZXQodCk6dGhpcy5mb3JtfX1pVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aVUpKFNtKEdWLDEwKSxTbShXViwxMCkpfSxpVS7JtWRpcj1sbyh7dHlwZTppVSxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsImZvcm1Hcm91cCIsIiJdLFsibmctZm9ybSJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZWbSgic3VibWl0IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblN1Ym1pdChlKX0pKSgicmVzZXQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZXNldCgpfSkpfSxpbnB1dHM6e29wdGlvbnM6WyJuZ0Zvcm1PcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOltwZyhbblVdKSx4cF19KSxpVS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpEcn0se3R5cGU6a3IsYXJnczpbR1ZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpEcn0se3R5cGU6a3IsYXJnczpbV1ZdfV19XSxpVS5wcm9wRGVjb3JhdG9ycz17b3B0aW9uczpbe3R5cGU6eHksYXJnczpbIm5nRm9ybU9wdGlvbnMiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGlVLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6ImZvcm06bm90KFtuZ05vRm9ybV0pOm5vdChbZm9ybUdyb3VwXSksbmctZm9ybSxbbmdGb3JtXSIscHJvdmlkZXJzOltuVV0saG9zdDp7IihzdWJtaXQpIjoib25TdWJtaXQoJGV2ZW50KSIsIihyZXNldCkiOiJvblJlc2V0KCkifSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczoibmdGb3JtIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpEcn0se3R5cGU6a3IsYXJnczpbR1ZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpEcn0se3R5cGU6a3IsYXJnczpbV1ZdfV19XX0pLHtvcHRpb25zOlt7dHlwZTp4eSxhcmdzOlsibmdGb3JtT3B0aW9ucyJdfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGFVIGV4dGVuZHMgQ2p7bmdPbkluaXQoKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmZvcm1EaXJlY3RpdmUuYWRkRm9ybUdyb3VwKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlRm9ybUdyb3VwKHRoaXMpfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybURpcmVjdGl2ZS5nZXRGb3JtR3JvdXAodGhpcyl9Z2V0IHBhdGgoKXtyZXR1cm4gRGoobnVsbD09dGhpcy5uYW1lP3RoaXMubmFtZTp0aGlzLm5hbWUudG9TdHJpbmcoKSx0aGlzLl9wYXJlbnQpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfV9jaGVja1BhcmVudFR5cGUoKXt9fWFVLsm1ZmFjPShmdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbiBlKG4pe3JldHVybih0fHwodD1BYShhVSkpKShufHxhVSl9fSkoKSxhVS7JtWRpcj1sbyh7dHlwZTphVSxmZWF0dXJlczpbeHBdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChhVSxbe3R5cGU6Q3l9XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgclV7c3RhdGljIG1vZGVsUGFyZW50RXhjZXB0aW9uKCl7dGhyb3cgbmV3IEVycm9yKGBcbiAgICAgIG5nTW9kZWwgY2Fubm90IGJlIHVzZWQgdG8gcmVnaXN0ZXIgZm9ybSBjb250cm9scyB3aXRoIGEgcGFyZW50IGZvcm1Hcm91cCBkaXJlY3RpdmUuICBUcnkgdXNpbmdcbiAgICAgIGZvcm1Hcm91cCdzIHBhcnRuZXIgZGlyZWN0aXZlICJmb3JtQ29udHJvbE5hbWUiIGluc3RlYWQuICBFeGFtcGxlOlxuXG4gICAgICAke1BqfVxuXG4gICAgICBPciwgaWYgeW91J2QgbGlrZSB0byBhdm9pZCByZWdpc3RlcmluZyB0aGlzIGZvcm0gY29udHJvbCwgaW5kaWNhdGUgdGhhdCBpdCdzIHN0YW5kYWxvbmUgaW4gbmdNb2RlbE9wdGlvbnM6XG5cbiAgICAgIEV4YW1wbGU6XG5cbiAgICAgIFxuICAgIDxkaXYgW2Zvcm1Hcm91cF09Im15R3JvdXAiPlxuICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9ImZpcnN0TmFtZSI+XG4gICAgICAgPGlucHV0IFsobmdNb2RlbCldPSJzaG93TW9yZUNvbnRyb2xzIiBbbmdNb2RlbE9wdGlvbnNdPSJ7c3RhbmRhbG9uZTogdHJ1ZX0iPlxuICAgIDwvZGl2PlxuICBgKX1zdGF0aWMgZm9ybUdyb3VwTmFtZUV4Y2VwdGlvbigpe3Rocm93IG5ldyBFcnJvcihgXG4gICAgICBuZ01vZGVsIGNhbm5vdCBiZSB1c2VkIHRvIHJlZ2lzdGVyIGZvcm0gY29udHJvbHMgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXBOYW1lIG9yIGZvcm1BcnJheU5hbWUgZGlyZWN0aXZlLlxuXG4gICAgICBPcHRpb24gMTogVXNlIGZvcm1Db250cm9sTmFtZSBpbnN0ZWFkIG9mIG5nTW9kZWwgKHJlYWN0aXZlIHN0cmF0ZWd5KTpcblxuICAgICAgJHt3an1cblxuICAgICAgT3B0aW9uIDI6ICBVcGRhdGUgbmdNb2RlbCdzIHBhcmVudCBiZSBuZ01vZGVsR3JvdXAgKHRlbXBsYXRlLWRyaXZlbiBzdHJhdGVneSk6XG5cbiAgICAgICR7a2p9YCl9c3RhdGljIG1pc3NpbmdOYW1lRXhjZXB0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCdJZiBuZ01vZGVsIGlzIHVzZWQgd2l0aGluIGEgZm9ybSB0YWcsIGVpdGhlciB0aGUgbmFtZSBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQgb3IgdGhlIGZvcm1cbiAgICAgIGNvbnRyb2wgbXVzdCBiZSBkZWZpbmVkIGFzIFwnc3RhbmRhbG9uZVwnIGluIG5nTW9kZWxPcHRpb25zLlxuXG4gICAgICBFeGFtcGxlIDE6IDxpbnB1dCBbKG5nTW9kZWwpXT0icGVyc29uLmZpcnN0TmFtZSIgbmFtZT0iZmlyc3QiPlxuICAgICAgRXhhbXBsZSAyOiA8aW5wdXQgWyhuZ01vZGVsKV09InBlcnNvbi5maXJzdE5hbWUiIFtuZ01vZGVsT3B0aW9uc109IntzdGFuZGFsb25lOiB0cnVlfSI+Jyl9c3RhdGljIG1vZGVsR3JvdXBQYXJlbnRFeGNlcHRpb24oKXt0aHJvdyBuZXcgRXJyb3IoYFxuICAgICAgbmdNb2RlbEdyb3VwIGNhbm5vdCBiZSB1c2VkIHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwIGRpcmVjdGl2ZS5cblxuICAgICAgT3B0aW9uIDE6IFVzZSBmb3JtR3JvdXBOYW1lIGluc3RlYWQgb2YgbmdNb2RlbEdyb3VwIChyZWFjdGl2ZSBzdHJhdGVneSk6XG5cbiAgICAgICR7d2p9XG5cbiAgICAgIE9wdGlvbiAyOiAgVXNlIGEgcmVndWxhciBmb3JtIHRhZyBpbnN0ZWFkIG9mIHRoZSBmb3JtR3JvdXAgZGlyZWN0aXZlICh0ZW1wbGF0ZS1kcml2ZW4gc3RyYXRlZ3kpOlxuXG4gICAgICAke2tqfWApfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3Qgc1U9e3Byb3ZpZGU6Q2osdXNlRXhpc3Rpbmc6cWUoKCgpPT5sVSkpfTtjbGFzcyBsVSBleHRlbmRzIGFVe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcigpLHRoaXMuX3BhcmVudD10LHRoaXMuX3NldFZhbGlkYXRvcnMoZSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKG4pfV9jaGVja1BhcmVudFR5cGUoKXt0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBsVXx8dGhpcy5fcGFyZW50IGluc3RhbmNlb2YgaVV8fCJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiYhbmdEZXZNb2RlfHxyVS5tb2RlbEdyb3VwUGFyZW50RXhjZXB0aW9uKCl9fWxVLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxsVSkoU20oQ2osNSksU20oR1YsMTApLFNtKFdWLDEwKSl9LGxVLsm1ZGlyPWxvKHt0eXBlOmxVLHNlbGVjdG9yczpbWyIiLCJuZ01vZGVsR3JvdXAiLCIiXV0saW5wdXRzOntuYW1lOlsibmdNb2RlbEdyb3VwIiwibmFtZSJdfSxleHBvcnRBczpbIm5nTW9kZWxHcm91cCJdLGZlYXR1cmVzOltwZyhbc1VdKSx4cF19KSxsVS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkNqLGRlY29yYXRvcnM6W3t0eXBlOlJyfSx7dHlwZTpFcn1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W0dWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W1dWXX1dfV0sbFUucHJvcERlY29yYXRvcnM9e25hbWU6W3t0eXBlOnh5LGFyZ3M6WyJuZ01vZGVsR3JvdXAiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGxVLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6IltuZ01vZGVsR3JvdXBdIixwcm92aWRlcnM6W3NVXSxleHBvcnRBczoibmdNb2RlbEdyb3VwIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkNqLGRlY29yYXRvcnM6W3t0eXBlOlJyfSx7dHlwZTpFcn1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W0dWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W1dWXX1dfV19KSx7bmFtZTpbe3R5cGU6eHksYXJnczpbIm5nTW9kZWxHcm91cCJdfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IGNVPXtwcm92aWRlOk1qLHVzZUV4aXN0aW5nOnFlKCgoKT0+cFUpKX0sZFU9UHJvbWlzZS5yZXNvbHZlKG51bGwpO2NsYXNzIHBVIGV4dGVuZHMgTWp7Y29uc3RydWN0b3IodCxlLG4sbyl7c3VwZXIoKSx0aGlzLmNvbnRyb2w9bmV3ICRqLHRoaXMuX3JlZ2lzdGVyZWQ9ITEsdGhpcy51cGRhdGU9bmV3IExoLHRoaXMuX3BhcmVudD10LHRoaXMuX3NldFZhbGlkYXRvcnMoZSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKG4pLHRoaXMudmFsdWVBY2Nlc3Nvcj1Caih0aGlzLG8pfW5nT25DaGFuZ2VzKHQpe3RoaXMuX2NoZWNrRm9yRXJyb3JzKCksdGhpcy5fcmVnaXN0ZXJlZHx8dGhpcy5fc2V0VXBDb250cm9sKCksImlzRGlzYWJsZWQiaW4gdCYmdGhpcy5fdXBkYXRlRGlzYWJsZWQodCksRmoodCx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLl91cGRhdGVWYWx1ZSh0aGlzLm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5fcGFyZW50P0RqKHRoaXMubmFtZSx0aGlzLl9wYXJlbnQpOlt0aGlzLm5hbWVdfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfXZpZXdUb01vZGVsVXBkYXRlKHQpe3RoaXMudmlld01vZGVsPXQsdGhpcy51cGRhdGUuZW1pdCh0KX1fc2V0VXBDb250cm9sKCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKSx0aGlzLl9pc1N0YW5kYWxvbmUoKT90aGlzLl9zZXRVcFN0YW5kYWxvbmUoKTp0aGlzLmZvcm1EaXJlY3RpdmUuYWRkQ29udHJvbCh0aGlzKSx0aGlzLl9yZWdpc3RlcmVkPSEwfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5jb250cm9sLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9pc1N0YW5kYWxvbmUoKXtyZXR1cm4hdGhpcy5fcGFyZW50fHwhKCF0aGlzLm9wdGlvbnN8fCF0aGlzLm9wdGlvbnMuc3RhbmRhbG9uZSl9X3NldFVwU3RhbmRhbG9uZSgpe0VqKHRoaXMuY29udHJvbCx0aGlzKSx0aGlzLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X2NoZWNrRm9yRXJyb3JzKCl7dGhpcy5faXNTdGFuZGFsb25lKCl8fHRoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuX2NoZWNrTmFtZSgpfV9jaGVja1BhcmVudFR5cGUoKXsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJighKHRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIGxVKSYmdGhpcy5fcGFyZW50IGluc3RhbmNlb2YgYVU/clUuZm9ybUdyb3VwTmFtZUV4Y2VwdGlvbigpOnRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIGxVfHx0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBpVXx8clUubW9kZWxQYXJlbnRFeGNlcHRpb24oKSl9X2NoZWNrTmFtZSgpe3RoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLm5hbWUmJih0aGlzLm5hbWU9dGhpcy5vcHRpb25zLm5hbWUpLHRoaXMuX2lzU3RhbmRhbG9uZSgpfHx0aGlzLm5hbWV8fCJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiYhbmdEZXZNb2RlfHxyVS5taXNzaW5nTmFtZUV4Y2VwdGlvbigpfV91cGRhdGVWYWx1ZSh0KXtkVS50aGVuKCgoKT0+e3RoaXMuY29udHJvbC5zZXRWYWx1ZSh0LHtlbWl0Vmlld1RvTW9kZWxDaGFuZ2U6ITF9KX0pKX1fdXBkYXRlRGlzYWJsZWQodCl7Y29uc3QgZT10LmlzRGlzYWJsZWQuY3VycmVudFZhbHVlLG49IiI9PT1lfHxlJiYiZmFsc2UiIT09ZTtkVS50aGVuKCgoKT0+e24mJiF0aGlzLmNvbnRyb2wuZGlzYWJsZWQ/dGhpcy5jb250cm9sLmRpc2FibGUoKTohbiYmdGhpcy5jb250cm9sLmRpc2FibGVkJiZ0aGlzLmNvbnRyb2wuZW5hYmxlKCl9KSl9fXBVLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxwVSkoU20oQ2osOSksU20oR1YsMTApLFNtKFdWLDEwKSxTbShJViwxMCkpfSxwVS7JtWRpcj1sbyh7dHlwZTpwVSxzZWxlY3RvcnM6W1siIiwibmdNb2RlbCIsIiIsMywiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGlzRGlzYWJsZWQ6WyJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxtb2RlbDpbIm5nTW9kZWwiLCJtb2RlbCJdLG9wdGlvbnM6WyJuZ01vZGVsT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ01vZGVsIl0sZmVhdHVyZXM6W3BnKFtjVV0pLHhwLEJvXX0pLHBVLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Q2osZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOlJyfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpEcn0se3R5cGU6a3IsYXJnczpbR1ZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpEcn0se3R5cGU6a3IsYXJnczpbV1ZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpEcn0se3R5cGU6a3IsYXJnczpbSVZdfV19XSxwVS5wcm9wRGVjb3JhdG9ycz17bmFtZTpbe3R5cGU6eHl9XSxpc0Rpc2FibGVkOlt7dHlwZTp4eSxhcmdzOlsiZGlzYWJsZWQiXX1dLG1vZGVsOlt7dHlwZTp4eSxhcmdzOlsibmdNb2RlbCJdfV0sb3B0aW9uczpbe3R5cGU6eHksYXJnczpbIm5nTW9kZWxPcHRpb25zIl19XSx1cGRhdGU6W3t0eXBlOk95LGFyZ3M6WyJuZ01vZGVsQ2hhbmdlIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChwVSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbbmdNb2RlbF06bm90KFtmb3JtQ29udHJvbE5hbWVdKTpub3QoW2Zvcm1Db250cm9sXSkiLHByb3ZpZGVyczpbY1VdLGV4cG9ydEFzOiJuZ01vZGVsIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkNqLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpScn1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W0dWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W1dWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W0lWXX1dfV19KSx7dXBkYXRlOlt7dHlwZTpPeSxhcmdzOlsibmdNb2RlbENoYW5nZSJdfV0sbmFtZTpbe3R5cGU6eHl9XSxpc0Rpc2FibGVkOlt7dHlwZTp4eSxhcmdzOlsiZGlzYWJsZWQiXX1dLG1vZGVsOlt7dHlwZTp4eSxhcmdzOlsibmdNb2RlbCJdfV0sb3B0aW9uczpbe3R5cGU6eHksYXJnczpbIm5nTW9kZWxPcHRpb25zIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgbVV7fW1VLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxtVSl9LG1VLsm1ZGlyPWxvKHt0eXBlOm1VLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywibmdOYXRpdmVWYWxpZGF0ZSIsIiJdXSxob3N0QXR0cnM6WyJub3ZhbGlkYXRlIiwiIl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKG1VLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6ImZvcm06bm90KFtuZ05vRm9ybV0pOm5vdChbbmdOYXRpdmVWYWxpZGF0ZV0pIixob3N0Ontub3ZhbGlkYXRlOiIifX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IHVVPXtwcm92aWRlOklWLHVzZUV4aXN0aW5nOnFlKCgoKT0+ZlUpKSxtdWx0aTohMH07Y2xhc3MgZlUgZXh0ZW5kcyB6Vnt3cml0ZVZhbHVlKHQpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixudWxsPT10PyIiOnQpfXJlZ2lzdGVyT25DaGFuZ2UodCl7dGhpcy5vbkNoYW5nZT1lPT57dCgiIj09ZT9udWxsOnBhcnNlRmxvYXQoZSkpfX19ZlUuybVmYWM9KGZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uIGUobil7cmV0dXJuKHR8fCh0PUFhKGZVKSkpKG58fGZVKX19KSgpLGZVLsm1ZGlyPWxvKHt0eXBlOmZVLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZWbSgiaW5wdXQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblRvdWNoZWQoKX0pKX0sZmVhdHVyZXM6W3BnKFt1VV0pLHhwXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoZlUsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0iLGhvc3Q6eyIoaW5wdXQpIjoib25DaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSkiLCIoYmx1cikiOiJvblRvdWNoZWQoKSJ9LHByb3ZpZGVyczpbdVVdfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgZ1U9e3Byb3ZpZGU6SVYsdXNlRXhpc3Rpbmc6cWUoKCgpPT55VSkpLG11bHRpOiEwfTtjbGFzcyBoVXt9aFUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGhVKX0saFUuybVtb2Q9YW8oe3R5cGU6aFV9KSxoVS7JtWluaj12bih7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChoVSxbe3R5cGU6QXl9XSxudWxsLG51bGwpO2NsYXNzIGJVe2NvbnN0cnVjdG9yKCl7dGhpcy5fYWNjZXNzb3JzPVtdfWFkZCh0LGUpe3RoaXMuX2FjY2Vzc29ycy5wdXNoKFt0LGVdKX1yZW1vdmUodCl7Zm9yKGxldCBlPXRoaXMuX2FjY2Vzc29ycy5sZW5ndGgtMTtlPj0wOy0tZSlpZih0aGlzLl9hY2Nlc3NvcnNbZV1bMV09PT10KXJldHVybiB2b2lkIHRoaXMuX2FjY2Vzc29ycy5zcGxpY2UoZSwxKX1zZWxlY3QodCl7dGhpcy5fYWNjZXNzb3JzLmZvckVhY2goKGU9Pnt0aGlzLl9pc1NhbWVHcm91cChlLHQpJiZlWzFdIT09dCYmZVsxXS5maXJlVW5jaGVjayh0LnZhbHVlKX0pKX1faXNTYW1lR3JvdXAodCxlKXtyZXR1cm4hIXRbMF0uY29udHJvbCYmdFswXS5fcGFyZW50PT09ZS5fY29udHJvbC5fcGFyZW50JiZ0WzFdLm5hbWU9PT1lLm5hbWV9fWJVLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxiVSl9LGJVLsm1cHJvdj1Nbih7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBiVX0sdG9rZW46YlUscHJvdmlkZWRJbjpoVX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoYlUsW3t0eXBlOmltLGFyZ3M6W3twcm92aWRlZEluOmhVfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLG51bGwpO2NsYXNzIHlVIGV4dGVuZHMgelZ7Y29uc3RydWN0b3IodCxlLG4sbyl7c3VwZXIodCxlKSx0aGlzLl9yZWdpc3RyeT1uLHRoaXMuX2luamVjdG9yPW8sdGhpcy5vbkNoYW5nZT0oKT0+e319bmdPbkluaXQoKXt0aGlzLl9jb250cm9sPXRoaXMuX2luamVjdG9yLmdldChNaiksdGhpcy5fY2hlY2tOYW1lKCksdGhpcy5fcmVnaXN0cnkuYWRkKHRoaXMuX2NvbnRyb2wsdGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZWdpc3RyeS5yZW1vdmUodGhpcyl9d3JpdGVWYWx1ZSh0KXt0aGlzLl9zdGF0ZT10PT09dGhpcy52YWx1ZSx0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIix0aGlzLl9zdGF0ZSl9cmVnaXN0ZXJPbkNoYW5nZSh0KXt0aGlzLl9mbj10LHRoaXMub25DaGFuZ2U9KCk9Pnt0KHRoaXMudmFsdWUpLHRoaXMuX3JlZ2lzdHJ5LnNlbGVjdCh0aGlzKX19ZmlyZVVuY2hlY2sodCl7dGhpcy53cml0ZVZhbHVlKHQpfV9jaGVja05hbWUoKXt0aGlzLm5hbWUmJnRoaXMuZm9ybUNvbnRyb2xOYW1lJiZ0aGlzLm5hbWUhPT10aGlzLmZvcm1Db250cm9sTmFtZSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiYoZnVuY3Rpb24gdCgpe3Rocm93IG5ldyBFcnJvcignXG4gICAgICBJZiB5b3UgZGVmaW5lIGJvdGggYSBuYW1lIGFuZCBhIGZvcm1Db250cm9sTmFtZSBhdHRyaWJ1dGUgb24geW91ciByYWRpbyBidXR0b24sIHRoZWlyIHZhbHVlc1xuICAgICAgbXVzdCBtYXRjaC4gRXg6IDxpbnB1dCB0eXBlPSJyYWRpbyIgZm9ybUNvbnRyb2xOYW1lPSJmb29kIiBuYW1lPSJmb29kIj5cbiAgICAnKX0pKCksIXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfX15VS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8eVUpKFNtKENnKSxTbShoZyksU20oYlUpLFNtKHJwKSl9LHlVLsm1ZGlyPWxvKHt0eXBlOnlVLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZWbSgiY2hhbmdlIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uQ2hhbmdlKCl9KSkoImJsdXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25Ub3VjaGVkKCl9KSl9LGlucHV0czp7bmFtZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2YWx1ZSJ9LGZlYXR1cmVzOltwZyhbZ1VdKSx4cF19KSx5VS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkNnfSx7dHlwZTpoZ30se3R5cGU6YlV9LHt0eXBlOnJwfV0seVUucHJvcERlY29yYXRvcnM9e25hbWU6W3t0eXBlOnh5fV0sZm9ybUNvbnRyb2xOYW1lOlt7dHlwZTp4eX1dLHZhbHVlOlt7dHlwZTp4eX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHlVLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6ImlucHV0W3R5cGU9cmFkaW9dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1yYWRpb11bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9cmFkaW9dW25nTW9kZWxdIixob3N0OnsiKGNoYW5nZSkiOiJvbkNoYW5nZSgpIiwiKGJsdXIpIjoib25Ub3VjaGVkKCkifSxwcm92aWRlcnM6W2dVXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkNnfSx7dHlwZTpoZ30se3R5cGU6YlV9LHt0eXBlOnJwfV19KSx7bmFtZTpbe3R5cGU6eHl9XSxmb3JtQ29udHJvbE5hbWU6W3t0eXBlOnh5fV0sdmFsdWU6W3t0eXBlOnh5fV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IF9VPXtwcm92aWRlOklWLHVzZUV4aXN0aW5nOnFlKCgoKT0+Q1UpKSxtdWx0aTohMH07Y2xhc3MgQ1UgZXh0ZW5kcyB6Vnt3cml0ZVZhbHVlKHQpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixwYXJzZUZsb2F0KHQpKX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMub25DaGFuZ2U9ZT0+e3QoIiI9PWU/bnVsbDpwYXJzZUZsb2F0KGUpKX19fUNVLsm1ZmFjPShmdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbiBlKG4pe3JldHVybih0fHwodD1BYShDVSkpKShufHxDVSl9fSkoKSxDVS7JtWRpcj1sbyh7dHlwZTpDVSxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFuZ2UiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmVm0oImNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25DaGFuZ2UoZS50YXJnZXQudmFsdWUpfSkpKCJpbnB1dCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25DaGFuZ2UoZS50YXJnZXQudmFsdWUpfSkpKCJibHVyIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uVG91Y2hlZCgpfSkpfSxmZWF0dXJlczpbcGcoW19VXSkseHBdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChDVSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJpbnB1dFt0eXBlPXJhbmdlXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9cmFuZ2VdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPXJhbmdlXVtuZ01vZGVsXSIsaG9zdDp7IihjaGFuZ2UpIjoib25DaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSkiLCIoaW5wdXQpIjoib25DaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSkiLCIoYmx1cikiOiJvblRvdWNoZWQoKSJ9LHByb3ZpZGVyczpbX1VdfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgTVU9bmV3IEdhKCJOZ01vZGVsV2l0aEZvcm1Db250cm9sV2FybmluZyIpLHZVPXtwcm92aWRlOk1qLHVzZUV4aXN0aW5nOnFlKCgoKT0+eFUpKX07Y2xhc3MgeFUgZXh0ZW5kcyBNantjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcigpLHRoaXMuX25nTW9kZWxXYXJuaW5nQ29uZmlnPW8sdGhpcy51cGRhdGU9bmV3IExoLHRoaXMuX25nTW9kZWxXYXJuaW5nU2VudD0hMSx0aGlzLl9zZXRWYWxpZGF0b3JzKHQpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhlKSx0aGlzLnZhbHVlQWNjZXNzb3I9QmoodGhpcyxuKX1zZXQgaXNEaXNhYmxlZCh0KXsoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJlNqLmRpc2FibGVkQXR0cldhcm5pbmcoKX1uZ09uQ2hhbmdlcyh0KXtpZih0aGlzLl9pc0NvbnRyb2xDaGFuZ2VkKHQpKXtjb25zdCBlPXQuZm9ybS5wcmV2aW91c1ZhbHVlO2UmJlJqKGUsdGhpcywhMSksRWoodGhpcy5mb3JtLHRoaXMpLHRoaXMuY29udHJvbC5kaXNhYmxlZCYmdGhpcy52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUmJnRoaXMudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKCEwKSx0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9RmoodCx0aGlzLnZpZXdNb2RlbCkmJigoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmpqKCJmb3JtQ29udHJvbCIseFUsdGhpcyx0aGlzLl9uZ01vZGVsV2FybmluZ0NvbmZpZyksdGhpcy5mb3JtLnNldFZhbHVlKHRoaXMubW9kZWwpLHRoaXMudmlld01vZGVsPXRoaXMubW9kZWwpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtJiZSaih0aGlzLmZvcm0sdGhpcywhMSl9Z2V0IHBhdGgoKXtyZXR1cm5bXX1nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm19dmlld1RvTW9kZWxVcGRhdGUodCl7dGhpcy52aWV3TW9kZWw9dCx0aGlzLnVwZGF0ZS5lbWl0KHQpfV9pc0NvbnRyb2xDaGFuZ2VkKHQpe3JldHVybiB0Lmhhc093blByb3BlcnR5KCJmb3JtIil9fXhVLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx4VSkoU20oR1YsMTApLFNtKFdWLDEwKSxTbShJViwxMCksU20oTVUsOCkpfSx4VS7JtWRpcj1sbyh7dHlwZTp4VSxzZWxlY3RvcnM6W1siIiwiZm9ybUNvbnRyb2wiLCIiXV0saW5wdXRzOntpc0Rpc2FibGVkOlsiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sZm9ybTpbImZvcm1Db250cm9sIiwiZm9ybSJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sZmVhdHVyZXM6W3BnKFt2VV0pLHhwLEJvXX0pLHhVLl9uZ01vZGVsV2FybmluZ1NlbnRPbmNlPSExLHhVLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOkRyfSx7dHlwZTprcixhcmdzOltHVl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOkRyfSx7dHlwZTprcixhcmdzOltXVl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOkRyfSx7dHlwZTprcixhcmdzOltJVl19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltNVV19XX1dLHhVLnByb3BEZWNvcmF0b3JzPXtmb3JtOlt7dHlwZTp4eSxhcmdzOlsiZm9ybUNvbnRyb2wiXX1dLGlzRGlzYWJsZWQ6W3t0eXBlOnh5LGFyZ3M6WyJkaXNhYmxlZCJdfV0sbW9kZWw6W3t0eXBlOnh5LGFyZ3M6WyJuZ01vZGVsIl19XSx1cGRhdGU6W3t0eXBlOk95LGFyZ3M6WyJuZ01vZGVsQ2hhbmdlIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh4VSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixwcm92aWRlcnM6W3ZVXSxleHBvcnRBczoibmdGb3JtIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpEcn0se3R5cGU6a3IsYXJnczpbR1ZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpEcn0se3R5cGU6a3IsYXJnczpbV1ZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpEcn0se3R5cGU6a3IsYXJnczpbSVZdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbTVVdfV19XX0pLHt1cGRhdGU6W3t0eXBlOk95LGFyZ3M6WyJuZ01vZGVsQ2hhbmdlIl19XSxpc0Rpc2FibGVkOlt7dHlwZTp4eSxhcmdzOlsiZGlzYWJsZWQiXX1dLGZvcm06W3t0eXBlOnh5LGFyZ3M6WyJmb3JtQ29udHJvbCJdfV0sbW9kZWw6W3t0eXBlOnh5LGFyZ3M6WyJuZ01vZGVsIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgT1U9e3Byb3ZpZGU6Q2osdXNlRXhpc3Rpbmc6cWUoKCgpPT5QVSkpfTtjbGFzcyBQVSBleHRlbmRzIENqe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLnZhbGlkYXRvcnM9dCx0aGlzLmFzeW5jVmFsaWRhdG9ycz1lLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+dGhpcy5fdXBkYXRlRG9tVmFsdWUoKSx0aGlzLmRpcmVjdGl2ZXM9W10sdGhpcy5mb3JtPW51bGwsdGhpcy5uZ1N1Ym1pdD1uZXcgTGgsdGhpcy5fc2V0VmFsaWRhdG9ycyh0KSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoZSl9bmdPbkNoYW5nZXModCl7dGhpcy5fY2hlY2tGb3JtUHJlc2VudCgpLHQuaGFzT3duUHJvcGVydHkoImZvcm0iKSYmKHRoaXMuX3VwZGF0ZVZhbGlkYXRvcnMoKSx0aGlzLl91cGRhdGVEb21WYWx1ZSgpLHRoaXMuX3VwZGF0ZVJlZ2lzdHJhdGlvbnMoKSx0aGlzLl9vbGRGb3JtPXRoaXMuZm9ybSl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm0mJihOaih0aGlzLmZvcm0sdGhpcyksdGhpcy5mb3JtLl9vbkNvbGxlY3Rpb25DaGFuZ2U9PT10aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UmJnRoaXMuZm9ybS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCgpPT57fSkpKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWFkZENvbnRyb2wodCl7Y29uc3QgZT10aGlzLmZvcm0uZ2V0KHQucGF0aCk7cmV0dXJuIEVqKGUsdCksZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmRpcmVjdGl2ZXMucHVzaCh0KSxlfWdldENvbnRyb2wodCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX1yZW1vdmVDb250cm9sKHQpe1JqKHQuY29udHJvbHx8bnVsbCx0LCExKSxWaih0aGlzLmRpcmVjdGl2ZXMsdCl9YWRkRm9ybUdyb3VwKHQpe3RoaXMuX3NldFVwRm9ybUNvbnRhaW5lcih0KX1yZW1vdmVGb3JtR3JvdXAodCl7dGhpcy5fY2xlYW5VcEZvcm1Db250YWluZXIodCl9Z2V0Rm9ybUdyb3VwKHQpe3JldHVybiB0aGlzLmZvcm0uZ2V0KHQucGF0aCl9YWRkRm9ybUFycmF5KHQpe3RoaXMuX3NldFVwRm9ybUNvbnRhaW5lcih0KX1yZW1vdmVGb3JtQXJyYXkodCl7dGhpcy5fY2xlYW5VcEZvcm1Db250YWluZXIodCl9Z2V0Rm9ybUFycmF5KHQpe3JldHVybiB0aGlzLmZvcm0uZ2V0KHQucGF0aCl9dXBkYXRlTW9kZWwodCxlKXt0aGlzLmZvcm0uZ2V0KHQucGF0aCkuc2V0VmFsdWUoZSl9b25TdWJtaXQodCl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLExqKHRoaXMuZm9ybSx0aGlzLmRpcmVjdGl2ZXMpLHRoaXMubmdTdWJtaXQuZW1pdCh0KSwhMX1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0odCl7dGhpcy5mb3JtLnJlc2V0KHQpLHRoaXMuc3VibWl0dGVkPSExfV91cGRhdGVEb21WYWx1ZSgpe3RoaXMuZGlyZWN0aXZlcy5mb3JFYWNoKCh0PT57Y29uc3QgZT10LmNvbnRyb2wsbj10aGlzLmZvcm0uZ2V0KHQucGF0aCk7ZSE9PW4mJihSaihlfHxudWxsLHQpLG4gaW5zdGFuY2VvZiAkaiYmKEVqKG4sdCksdC5jb250cm9sPW4pKX0pKSx0aGlzLmZvcm0uX3VwZGF0ZVRyZWVWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X3NldFVwRm9ybUNvbnRhaW5lcih0KXtjb25zdCBlPXRoaXMuZm9ybS5nZXQodC5wYXRoKTtJaihlLHQpLGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X2NsZWFuVXBGb3JtQ29udGFpbmVyKHQpe2lmKHRoaXMuZm9ybSl7Y29uc3QgZT10aGlzLmZvcm0uZ2V0KHQucGF0aCk7ZSYmKGZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gTmoodCxlKX0pKGUsdCkmJmUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9fV91cGRhdGVSZWdpc3RyYXRpb25zKCl7dGhpcy5mb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLHRoaXMuX29sZEZvcm0mJnRoaXMuX29sZEZvcm0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgoKT0+e30pKX1fdXBkYXRlVmFsaWRhdG9ycygpe1RqKHRoaXMuZm9ybSx0aGlzKSx0aGlzLl9vbGRGb3JtJiZOaih0aGlzLl9vbGRGb3JtLHRoaXMpfV9jaGVja0Zvcm1QcmVzZW50KCl7dGhpcy5mb3JtfHwidW5kZWZpbmVkIiE9dHlwZW9mIG5nRGV2TW9kZSYmIW5nRGV2TW9kZXx8U2oubWlzc2luZ0Zvcm1FeGNlcHRpb24oKX19UFUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFBVKShTbShHViwxMCksU20oV1YsMTApKX0sUFUuybVkaXI9bG8oe3R5cGU6UFUsc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmVm0oInN1Ym1pdCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25TdWJtaXQoZSl9KSkoInJlc2V0IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUmVzZXQoKX0pKX0saW5wdXRzOntmb3JtOlsiZm9ybUdyb3VwIiwiZm9ybSJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOltwZyhbT1VdKSx4cCxCb119KSxQVS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpEcn0se3R5cGU6a3IsYXJnczpbR1ZdfV19LHt0eXBlOkFycmF5LGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpEcn0se3R5cGU6a3IsYXJnczpbV1ZdfV19XSxQVS5wcm9wRGVjb3JhdG9ycz17Zm9ybTpbe3R5cGU6eHksYXJnczpbImZvcm1Hcm91cCJdfV0sbmdTdWJtaXQ6W3t0eXBlOk95fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoUFUsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLHByb3ZpZGVyczpbT1VdLGhvc3Q6eyIoc3VibWl0KSI6Im9uU3VibWl0KCRldmVudCkiLCIocmVzZXQpIjoib25SZXNldCgpIn0sZXhwb3J0QXM6Im5nRm9ybSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W0dWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W1dWXX1dfV19KSx7Zm9ybTpbe3R5cGU6eHksYXJnczpbImZvcm1Hcm91cCJdfV0sbmdTdWJtaXQ6W3t0eXBlOk95fV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IHdVPXtwcm92aWRlOkNqLHVzZUV4aXN0aW5nOnFlKCgoKT0+a1UpKX07Y2xhc3Mga1UgZXh0ZW5kcyBhVXtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIoKSx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9zZXRWYWxpZGF0b3JzKGUpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhuKX1fY2hlY2tQYXJlbnRUeXBlKCl7RVUodGhpcy5fcGFyZW50KSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZTai5ncm91cFBhcmVudEV4Y2VwdGlvbigpfX1rVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8a1UpKFNtKENqLDEzKSxTbShHViwxMCksU20oV1YsMTApKX0sa1UuybVkaXI9bG8oe3R5cGU6a1Usc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cE5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUdyb3VwTmFtZSIsIm5hbWUiXX0sZmVhdHVyZXM6W3BnKFt3VV0pLHhwXX0pLGtVLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Q2osZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOlJyfSx7dHlwZTpFcn1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W0dWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W1dWXX1dfV0sa1UucHJvcERlY29yYXRvcnM9e25hbWU6W3t0eXBlOnh5LGFyZ3M6WyJmb3JtR3JvdXBOYW1lIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChrVSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLHByb3ZpZGVyczpbd1VdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Q2osZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOlJyfSx7dHlwZTpFcn1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W0dWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W1dWXX1dfV19KSx7bmFtZTpbe3R5cGU6eHksYXJnczpbImZvcm1Hcm91cE5hbWUiXX1dfSk7Y29uc3QgU1U9e3Byb3ZpZGU6Q2osdXNlRXhpc3Rpbmc6cWUoKCgpPT5EVSkpfTtjbGFzcyBEVSBleHRlbmRzIENqe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcigpLHRoaXMuX3BhcmVudD10LHRoaXMuX3NldFZhbGlkYXRvcnMoZSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKG4pfW5nT25Jbml0KCl7dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5mb3JtRGlyZWN0aXZlLmFkZEZvcm1BcnJheSh0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUZvcm1BcnJheSh0aGlzKX1nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm1EaXJlY3RpdmUuZ2V0Rm9ybUFycmF5KHRoaXMpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfWdldCBwYXRoKCl7cmV0dXJuIERqKG51bGw9PXRoaXMubmFtZT90aGlzLm5hbWU6dGhpcy5uYW1lLnRvU3RyaW5nKCksdGhpcy5fcGFyZW50KX1fY2hlY2tQYXJlbnRUeXBlKCl7RVUodGhpcy5fcGFyZW50KSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZTai5hcnJheVBhcmVudEV4Y2VwdGlvbigpfX1mdW5jdGlvbiBFVSh0KXtyZXR1cm4hKHQgaW5zdGFuY2VvZiBrVXx8dCBpbnN0YW5jZW9mIFBVfHx0IGluc3RhbmNlb2YgRFUpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9EVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RFUpKFNtKENqLDEzKSxTbShHViwxMCksU20oV1YsMTApKX0sRFUuybVkaXI9bG8oe3R5cGU6RFUsc2VsZWN0b3JzOltbIiIsImZvcm1BcnJheU5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUFycmF5TmFtZSIsIm5hbWUiXX0sZmVhdHVyZXM6W3BnKFtTVV0pLHhwXX0pLERVLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6Q2osZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOlJyfSx7dHlwZTpFcn1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W0dWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W1dWXX1dfV0sRFUucHJvcERlY29yYXRvcnM9e25hbWU6W3t0eXBlOnh5LGFyZ3M6WyJmb3JtQXJyYXlOYW1lIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChEVSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLHByb3ZpZGVyczpbU1VdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Q2osZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOlJyfSx7dHlwZTpFcn1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W0dWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W1dWXX1dfV19KSx7bmFtZTpbe3R5cGU6eHksYXJnczpbImZvcm1BcnJheU5hbWUiXX1dfSk7Y29uc3QgUlU9e3Byb3ZpZGU6TWosdXNlRXhpc3Rpbmc6cWUoKCgpPT5BVSkpfTtjbGFzcyBBVSBleHRlbmRzIE1qe2NvbnN0cnVjdG9yKHQsZSxuLG8saSl7c3VwZXIoKSx0aGlzLl9uZ01vZGVsV2FybmluZ0NvbmZpZz1pLHRoaXMuX2FkZGVkPSExLHRoaXMudXBkYXRlPW5ldyBMaCx0aGlzLl9uZ01vZGVsV2FybmluZ1NlbnQ9ITEsdGhpcy5fcGFyZW50PXQsdGhpcy5fc2V0VmFsaWRhdG9ycyhlKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMobiksdGhpcy52YWx1ZUFjY2Vzc29yPUJqKHRoaXMsbyl9c2V0IGlzRGlzYWJsZWQodCl7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZTai5kaXNhYmxlZEF0dHJXYXJuaW5nKCl9bmdPbkNoYW5nZXModCl7dGhpcy5fYWRkZWR8fHRoaXMuX3NldFVwQ29udHJvbCgpLEZqKHQsdGhpcy52aWV3TW9kZWwpJiYoKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZqaigiZm9ybUNvbnRyb2xOYW1lIixBVSx0aGlzLHRoaXMuX25nTW9kZWxXYXJuaW5nQ29uZmlnKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsLHRoaXMuZm9ybURpcmVjdGl2ZS51cGRhdGVNb2RlbCh0aGlzLHRoaXMubW9kZWwpKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9dmlld1RvTW9kZWxVcGRhdGUodCl7dGhpcy52aWV3TW9kZWw9dCx0aGlzLnVwZGF0ZS5lbWl0KHQpfWdldCBwYXRoKCl7cmV0dXJuIERqKG51bGw9PXRoaXMubmFtZT90aGlzLm5hbWU6dGhpcy5uYW1lLnRvU3RyaW5nKCksdGhpcy5fcGFyZW50KX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH1fY2hlY2tQYXJlbnRUeXBlKCl7KCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiYoISh0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBrVSkmJnRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIGFVP1NqLm5nTW9kZWxHcm91cEV4Y2VwdGlvbigpOnRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIGtVfHx0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBQVXx8dGhpcy5fcGFyZW50IGluc3RhbmNlb2YgRFV8fFNqLmNvbnRyb2xQYXJlbnRFeGNlcHRpb24oKSl9X3NldFVwQ29udHJvbCgpe3RoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuY29udHJvbD10aGlzLmZvcm1EaXJlY3RpdmUuYWRkQ29udHJvbCh0aGlzKSx0aGlzLmNvbnRyb2wuZGlzYWJsZWQmJnRoaXMudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlJiZ0aGlzLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSghMCksdGhpcy5fYWRkZWQ9ITB9fUFVLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxBVSkoU20oQ2osMTMpLFNtKEdWLDEwKSxTbShXViwxMCksU20oSVYsMTApLFNtKE1VLDgpKX0sQVUuybVkaXI9bG8oe3R5cGU6QVUsc2VsZWN0b3JzOltbIiIsImZvcm1Db250cm9sTmFtZSIsIiJdXSxpbnB1dHM6e2lzRGlzYWJsZWQ6WyJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxuYW1lOlsiZm9ybUNvbnRyb2xOYW1lIiwibmFtZSJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGZlYXR1cmVzOltwZyhbUlVdKSx4cCxCb119KSxBVS5fbmdNb2RlbFdhcm5pbmdTZW50T25jZT0hMSxBVS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkNqLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpScn0se3R5cGU6RXJ9XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOkRyfSx7dHlwZTprcixhcmdzOltHVl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOkRyfSx7dHlwZTprcixhcmdzOltXVl19XX0se3R5cGU6QXJyYXksZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOkRyfSx7dHlwZTprcixhcmdzOltJVl19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltNVV19XX1dLEFVLnByb3BEZWNvcmF0b3JzPXtuYW1lOlt7dHlwZTp4eSxhcmdzOlsiZm9ybUNvbnRyb2xOYW1lIl19XSxpc0Rpc2FibGVkOlt7dHlwZTp4eSxhcmdzOlsiZGlzYWJsZWQiXX1dLG1vZGVsOlt7dHlwZTp4eSxhcmdzOlsibmdNb2RlbCJdfV0sdXBkYXRlOlt7dHlwZTpPeSxhcmdzOlsibmdNb2RlbENoYW5nZSJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoQVUsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLHByb3ZpZGVyczpbUlVdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6Q2osZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOlJyfSx7dHlwZTpFcn1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W0dWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W1dWXX1dfSx7dHlwZTpBcnJheSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W0lWXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W01VXX1dfV19KSx7dXBkYXRlOlt7dHlwZTpPeSxhcmdzOlsibmdNb2RlbENoYW5nZSJdfV0saXNEaXNhYmxlZDpbe3R5cGU6eHksYXJnczpbImRpc2FibGVkIl19XSxuYW1lOlt7dHlwZTp4eSxhcmdzOlsiZm9ybUNvbnRyb2xOYW1lIl19XSxtb2RlbDpbe3R5cGU6eHksYXJnczpbIm5nTW9kZWwiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBUVT17cHJvdmlkZTpJVix1c2VFeGlzdGluZzpxZSgoKCk9PnpVKSksbXVsdGk6ITB9O2Z1bmN0aW9uIE5VKHQsZSl7cmV0dXJuIG51bGw9PXQ/YCR7ZX1gOihlJiYib2JqZWN0Ij09dHlwZW9mIGUmJihlPSJPYmplY3QiKSxgJHt0fTogJHtlfWAuc2xpY2UoMCw1MCkpfWNsYXNzIHpVIGV4dGVuZHMgelZ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMuX2NvbXBhcmVXaXRoPU9iamVjdC5pc31zZXQgY29tcGFyZVdpdGgodCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyBuZXcgRXJyb3IoYGNvbXBhcmVXaXRoIG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7dGhpcy5fY29tcGFyZVdpdGg9dH13cml0ZVZhbHVlKHQpe3RoaXMudmFsdWU9dDtjb25zdCBlPXRoaXMuX2dldE9wdGlvbklkKHQpO251bGw9PWUmJnRoaXMuc2V0UHJvcGVydHkoInNlbGVjdGVkSW5kZXgiLC0xKTtjb25zdCBuPU5VKGUsdCk7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLG4pfXJlZ2lzdGVyT25DaGFuZ2UodCl7dGhpcy5vbkNoYW5nZT1lPT57dGhpcy52YWx1ZT10aGlzLl9nZXRPcHRpb25WYWx1ZShlKSx0KHRoaXMudmFsdWUpfX1fcmVnaXN0ZXJPcHRpb24oKXtyZXR1cm4odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCl9X2dldE9wdGlvbklkKHQpe2Zvcihjb25zdCBlIG9mIEFycmF5LmZyb20odGhpcy5fb3B0aW9uTWFwLmtleXMoKSkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChlKSx0KSlyZXR1cm4gZTtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUodCl7Y29uc3QgZT0oZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5zcGxpdCgiOiIpWzBdfSkodCk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoZSk/dGhpcy5fb3B0aW9uTWFwLmdldChlKTp0fX16VS7JtWZhYz0oZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4odHx8KHQ9QWEoelUpKSkobnx8elUpfX0pKCkselUuybVkaXI9bG8oe3R5cGU6elUsc2VsZWN0b3JzOltbInNlbGVjdCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsImZvcm1Db250cm9sIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwibmdNb2RlbCIsIiIsMywibXVsdGlwbGUiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJlZtKCJjaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblRvdWNoZWQoKX0pKX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgifSxmZWF0dXJlczpbcGcoW1RVXSkseHBdfSkselUucHJvcERlY29yYXRvcnM9e2NvbXBhcmVXaXRoOlt7dHlwZTp4eX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHpVLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6InNlbGVjdDpub3QoW211bHRpcGxlXSlbZm9ybUNvbnRyb2xOYW1lXSxzZWxlY3Q6bm90KFttdWx0aXBsZV0pW2Zvcm1Db250cm9sXSxzZWxlY3Q6bm90KFttdWx0aXBsZV0pW25nTW9kZWxdIixob3N0OnsiKGNoYW5nZSkiOiJvbkNoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKSIsIihibHVyKSI6Im9uVG91Y2hlZCgpIn0scHJvdmlkZXJzOltUVV19XX1dLG51bGwse2NvbXBhcmVXaXRoOlt7dHlwZTp4eX1dfSk7Y2xhc3MgSVV7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9yZW5kZXJlcj1lLHRoaXMuX3NlbGVjdD1uLHRoaXMuX3NlbGVjdCYmKHRoaXMuaWQ9dGhpcy5fc2VsZWN0Ll9yZWdpc3Rlck9wdGlvbigpKX1zZXQgbmdWYWx1ZSh0KXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5zZXQodGhpcy5pZCx0KSx0aGlzLl9zZXRFbGVtZW50VmFsdWUoTlUodGhpcy5pZCx0KSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c2V0IHZhbHVlKHQpe3RoaXMuX3NldEVsZW1lbnRWYWx1ZSh0KSx0aGlzLl9zZWxlY3QmJnRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSl9X3NldEVsZW1lbnRWYWx1ZSh0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInZhbHVlIix0KX1uZ09uRGVzdHJveSgpe3RoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLmRlbGV0ZSh0aGlzLmlkKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX19SVUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fElVKShTbShoZyksU20oQ2cpLFNtKHpVLDkpKX0sSVUuybVkaXI9bG8oe3R5cGU6SVUsc2VsZWN0b3JzOltbIm9wdGlvbiJdXSxpbnB1dHM6e25nVmFsdWU6Im5nVmFsdWUiLHZhbHVlOiJ2YWx1ZSJ9fSksSVUuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpoZ30se3R5cGU6Q2d9LHt0eXBlOnpVLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpScn1dfV0sSVUucHJvcERlY29yYXRvcnM9e25nVmFsdWU6W3t0eXBlOnh5LGFyZ3M6WyJuZ1ZhbHVlIl19XSx2YWx1ZTpbe3R5cGU6eHksYXJnczpbInZhbHVlIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChJVSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJvcHRpb24ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9LHt0eXBlOkNnfSx7dHlwZTp6VSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6UnJ9XX1dfSkse25nVmFsdWU6W3t0eXBlOnh5LGFyZ3M6WyJuZ1ZhbHVlIl19XSx2YWx1ZTpbe3R5cGU6eHksYXJnczpbInZhbHVlIl19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgSFU9e3Byb3ZpZGU6SVYsdXNlRXhpc3Rpbmc6cWUoKCgpPT5MVSkpLG11bHRpOiEwfTtmdW5jdGlvbiBGVSh0LGUpe3JldHVybiBudWxsPT10P2Ake2V9YDooInN0cmluZyI9PXR5cGVvZiBlJiYoZT1gJyR7ZX0nYCksZSYmIm9iamVjdCI9PXR5cGVvZiBlJiYoZT0iT2JqZWN0IiksYCR7dH06ICR7ZX1gLnNsaWNlKDAsNTApKX1jbGFzcyBMVSBleHRlbmRzIHpWe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgbmV3IEVycm9yKGBjb21wYXJlV2l0aCBtdXN0IGJlIGEgZnVuY3Rpb24sIGJ1dCByZWNlaXZlZCAke0pTT04uc3RyaW5naWZ5KHQpfWApO3RoaXMuX2NvbXBhcmVXaXRoPXR9d3JpdGVWYWx1ZSh0KXtsZXQgZTtpZih0aGlzLnZhbHVlPXQsQXJyYXkuaXNBcnJheSh0KSl7Y29uc3Qgbj10Lm1hcCgodD0+dGhpcy5fZ2V0T3B0aW9uSWQodCkpKTtlPSh0LGUpPT57dC5fc2V0U2VsZWN0ZWQobi5pbmRleE9mKGUudG9TdHJpbmcoKSk+LTEpfX1lbHNlIGU9KHQsZSk9Pnt0Ll9zZXRTZWxlY3RlZCghMSl9O3RoaXMuX29wdGlvbk1hcC5mb3JFYWNoKGUpfXJlZ2lzdGVyT25DaGFuZ2UodCl7dGhpcy5vbkNoYW5nZT1lPT57Y29uc3Qgbj1bXTtpZih2b2lkIDAhPT1lLnNlbGVjdGVkT3B0aW9ucyl7Y29uc3QgdD1lLnNlbGVjdGVkT3B0aW9ucztmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7Y29uc3Qgbz10Lml0ZW0oZSksaT10aGlzLl9nZXRPcHRpb25WYWx1ZShvLnZhbHVlKTtuLnB1c2goaSl9fWVsc2V7Y29uc3QgdD1lLm9wdGlvbnM7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2NvbnN0IG89dC5pdGVtKGUpO2lmKG8uc2VsZWN0ZWQpe2NvbnN0IHQ9dGhpcy5fZ2V0T3B0aW9uVmFsdWUoby52YWx1ZSk7bi5wdXNoKHQpfX19dGhpcy52YWx1ZT1uLHQobil9fV9yZWdpc3Rlck9wdGlvbih0KXtjb25zdCBlPSh0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLnNldChlLHQpLGV9X2dldE9wdGlvbklkKHQpe2Zvcihjb25zdCBlIG9mIEFycmF5LmZyb20odGhpcy5fb3B0aW9uTWFwLmtleXMoKSkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChlKS5fdmFsdWUsdCkpcmV0dXJuIGU7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKHQpe2NvbnN0IGU9KGZ1bmN0aW9uIG4odCl7cmV0dXJuIHQuc3BsaXQoIjoiKVswXX0pKHQpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGUpP3RoaXMuX29wdGlvbk1hcC5nZXQoZSkuX3ZhbHVlOnR9fUxVLsm1ZmFjPShmdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbiBlKG4pe3JldHVybih0fHwodD1BYShMVSkpKShufHxMVSl9fSkoKSxMVS7JtWRpcj1sbyh7dHlwZTpMVSxzZWxlY3RvcnM6W1sic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmVm0oImNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25DaGFuZ2UoZS50YXJnZXQpfSkpKCJibHVyIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uVG91Y2hlZCgpfSkpfSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVzOltwZyhbSFVdKSx4cF19KSxMVS5wcm9wRGVjb3JhdG9ycz17Y29tcGFyZVdpdGg6W3t0eXBlOnh5fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoTFUsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3Rvcjoic2VsZWN0W211bHRpcGxlXVtmb3JtQ29udHJvbE5hbWVdLHNlbGVjdFttdWx0aXBsZV1bZm9ybUNvbnRyb2xdLHNlbGVjdFttdWx0aXBsZV1bbmdNb2RlbF0iLGhvc3Q6eyIoY2hhbmdlKSI6Im9uQ2hhbmdlKCRldmVudC50YXJnZXQpIiwiKGJsdXIpIjoib25Ub3VjaGVkKCkifSxwcm92aWRlcnM6W0hVXX1dfV0sbnVsbCx7Y29tcGFyZVdpdGg6W3t0eXBlOnh5fV19KTtjbGFzcyBCVXtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5fZWxlbWVudD10LHRoaXMuX3JlbmRlcmVyPWUsdGhpcy5fc2VsZWN0PW4sdGhpcy5fc2VsZWN0JiYodGhpcy5pZD10aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKHRoaXMpKX1zZXQgbmdWYWx1ZSh0KXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl92YWx1ZT10LHRoaXMuX3NldEVsZW1lbnRWYWx1ZShGVSh0aGlzLmlkLHQpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUodCl7dGhpcy5fc2VsZWN0Pyh0aGlzLl92YWx1ZT10LHRoaXMuX3NldEVsZW1lbnRWYWx1ZShGVSh0aGlzLmlkLHQpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKTp0aGlzLl9zZXRFbGVtZW50VmFsdWUodCl9X3NldEVsZW1lbnRWYWx1ZSh0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInZhbHVlIix0KX1fc2V0U2VsZWN0ZWQodCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJzZWxlY3RlZCIsdCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KZnVuY3Rpb24gVlUodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P3Q6cGFyc2VJbnQodCwxMCl9QlUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJVKShTbShoZyksU20oQ2cpLFNtKExVLDkpKX0sQlUuybVkaXI9bG8oe3R5cGU6QlUsc2VsZWN0b3JzOltbIm9wdGlvbiJdXSxpbnB1dHM6e25nVmFsdWU6Im5nVmFsdWUiLHZhbHVlOiJ2YWx1ZSJ9fSksQlUuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpoZ30se3R5cGU6Q2d9LHt0eXBlOkxVLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpScn1dfV0sQlUucHJvcERlY29yYXRvcnM9e25nVmFsdWU6W3t0eXBlOnh5LGFyZ3M6WyJuZ1ZhbHVlIl19XSx2YWx1ZTpbe3R5cGU6eHksYXJnczpbInZhbHVlIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChCVSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJvcHRpb24ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9LHt0eXBlOkNnfSx7dHlwZTpMVSxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6UnJ9XX1dfSkse25nVmFsdWU6W3t0eXBlOnh5LGFyZ3M6WyJuZ1ZhbHVlIl19XSx2YWx1ZTpbe3R5cGU6eHksYXJnczpbInZhbHVlIl19XX0pO2NsYXNzIGpVe2NvbnN0cnVjdG9yKCl7dGhpcy5fdmFsaWRhdG9yPW5qfWhhbmRsZUNoYW5nZXModCl7aWYodGhpcy5pbnB1dE5hbWUgaW4gdCl7Y29uc3QgZT10aGlzLm5vcm1hbGl6ZUlucHV0KHRbdGhpcy5pbnB1dE5hbWVdLmN1cnJlbnRWYWx1ZSk7dGhpcy5fdmFsaWRhdG9yPXRoaXMuY3JlYXRlVmFsaWRhdG9yKGUpLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpfX12YWxpZGF0ZSh0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yKHQpfXJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UodCl7dGhpcy5fb25DaGFuZ2U9dH19alUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGpVKX0salUuybVkaXI9bG8oe3R5cGU6alV9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGpVLFt7dHlwZTpDeX1dLChmdW5jdGlvbigpe3JldHVybltdfSksbnVsbCk7Y29uc3QgVVU9e3Byb3ZpZGU6R1YsdXNlRXhpc3Rpbmc6cWUoKCgpPT5HVSkpLG11bHRpOiEwfTtjbGFzcyBHVSBleHRlbmRzIGpVe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0ibWF4Iix0aGlzLm5vcm1hbGl6ZUlucHV0PXQ9PnBhcnNlRmxvYXQodCksdGhpcy5jcmVhdGVWYWxpZGF0b3I9dD0+WFYodCl9bmdPbkNoYW5nZXModCl7dGhpcy5oYW5kbGVDaGFuZ2VzKHQpfX1HVS7JtWZhYz0oZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4odHx8KHQ9QWEoR1UpKSkobnx8R1UpfX0pKCksR1UuybVkaXI9bG8oe3R5cGU6R1Usc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibWF4IiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pe2lmKDImZSl7bGV0IHQ7anAoIm1heCIsbnVsbCE9PSh0PW4ubWF4KSYmdm9pZCAwIT09dD90Om51bGwpfX0saW5wdXRzOnttYXg6Im1heCJ9LGZlYXR1cmVzOltwZyhbVVVdKSx4cCxCb119KSxHVS5wcm9wRGVjb3JhdG9ycz17bWF4Olt7dHlwZTp4eX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEdVLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW25nTW9kZWxdIixwcm92aWRlcnM6W1VVXSxob3N0OnsiW2F0dHIubWF4XSI6Im1heCA/PyBudWxsIn19XX1dLG51bGwse21heDpbe3R5cGU6eHl9XX0pO2NvbnN0IFdVPXtwcm92aWRlOkdWLHVzZUV4aXN0aW5nOnFlKCgoKT0+WVUpKSxtdWx0aTohMH07Y2xhc3MgWVUgZXh0ZW5kcyBqVXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1pbiIsdGhpcy5ub3JtYWxpemVJbnB1dD10PT5wYXJzZUZsb2F0KHQpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPXQ9PlpWKHQpfW5nT25DaGFuZ2VzKHQpe3RoaXMuaGFuZGxlQ2hhbmdlcyh0KX19WVUuybVmYWM9KGZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uIGUobil7cmV0dXJuKHR8fCh0PUFhKFlVKSkpKG58fFlVKX19KSgpLFlVLsm1ZGlyPWxvKHt0eXBlOllVLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1pbiIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXtpZigyJmUpe2xldCB0O2pwKCJtaW4iLG51bGwhPT0odD1uLm1pbikmJnZvaWQgMCE9PXQ/dDpudWxsKX19LGlucHV0czp7bWluOiJtaW4ifSxmZWF0dXJlczpbcGcoW1dVXSkseHAsQm9dfSksWVUucHJvcERlY29yYXRvcnM9e21pbjpbe3R5cGU6eHl9XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChZVSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIscHJvdmlkZXJzOltXVV0saG9zdDp7IlthdHRyLm1pbl0iOiJtaW4gPz8gbnVsbCJ9fV19XSxudWxsLHttaW46W3t0eXBlOnh5fV19KTtjb25zdCBxVT17cHJvdmlkZTpHVix1c2VFeGlzdGluZzpxZSgoKCk9PlhVKSksbXVsdGk6ITB9LFpVPXtwcm92aWRlOkdWLHVzZUV4aXN0aW5nOnFlKCgoKT0+S1UpKSxtdWx0aTohMH07Y2xhc3MgWFV7Y29uc3RydWN0b3IoKXt0aGlzLl9yZXF1aXJlZD0hMX1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWR9c2V0IHJlcXVpcmVkKHQpe3RoaXMuX3JlcXVpcmVkPW51bGwhPXQmJiExIT09dCYmImZhbHNlIiE9YCR7dH1gLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpfXZhbGlkYXRlKHQpe3JldHVybiB0aGlzLnJlcXVpcmVkP0tWKHQpOm51bGx9cmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSh0KXt0aGlzLl9vbkNoYW5nZT10fX1YVS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WFUpfSxYVS7JtWRpcj1sbyh7dHlwZTpYVSxzZWxlY3RvcnM6W1siIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZqcCgicmVxdWlyZWQiLG4ucmVxdWlyZWQ/IiI6bnVsbCl9LGlucHV0czp7cmVxdWlyZWQ6InJlcXVpcmVkIn0sZmVhdHVyZXM6W3BnKFtxVV0pXX0pLFhVLnByb3BEZWNvcmF0b3JzPXtyZXF1aXJlZDpbe3R5cGU6eHl9XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChYVSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIscHJvdmlkZXJzOltxVV0saG9zdDp7IlthdHRyLnJlcXVpcmVkXSI6J3JlcXVpcmVkID8gIiIgOiBudWxsJ319XX1dLChmdW5jdGlvbigpe3JldHVybltdfSkse3JlcXVpcmVkOlt7dHlwZTp4eX1dfSk7Y2xhc3MgS1UgZXh0ZW5kcyBYVXt2YWxpZGF0ZSh0KXtyZXR1cm4gdGhpcy5yZXF1aXJlZD9KVih0KTpudWxsfX1LVS7JtWZhYz0oZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4odHx8KHQ9QWEoS1UpKSkobnx8S1UpfX0pKCksS1UuybVkaXI9bG8oe3R5cGU6S1Usc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmanAoInJlcXVpcmVkIixuLnJlcXVpcmVkPyIiOm51bGwpfSxmZWF0dXJlczpbcGcoW1pVXSkseHBdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChLVSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJpbnB1dFt0eXBlPWNoZWNrYm94XVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPWNoZWNrYm94XVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9Y2hlY2tib3hdW3JlcXVpcmVkXVtuZ01vZGVsXSIscHJvdmlkZXJzOltaVV0saG9zdDp7IlthdHRyLnJlcXVpcmVkXSI6J3JlcXVpcmVkID8gIiIgOiBudWxsJ319XX1dLG51bGwsbnVsbCk7Y29uc3QgSlU9e3Byb3ZpZGU6R1YsdXNlRXhpc3Rpbmc6cWUoKCgpPT5RVSkpLG11bHRpOiEwfTtjbGFzcyBRVXtjb25zdHJ1Y3Rvcigpe3RoaXMuX2VuYWJsZWQ9ITF9c2V0IGVtYWlsKHQpe3RoaXMuX2VuYWJsZWQ9IiI9PT10fHwhMD09PXR8fCJ0cnVlIj09PXQsdGhpcy5fb25DaGFuZ2UmJnRoaXMuX29uQ2hhbmdlKCl9dmFsaWRhdGUodCl7cmV0dXJuIHRoaXMuX2VuYWJsZWQ/UVYodCk6bnVsbH1yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKHQpe3RoaXMuX29uQ2hhbmdlPXR9fVFVLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxRVSl9LFFVLsm1ZGlyPWxvKHt0eXBlOlFVLHNlbGVjdG9yczpbWyIiLCJlbWFpbCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwiZW1haWwiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiIiwiZW1haWwiLCIiLCJuZ01vZGVsIiwiIl1dLGlucHV0czp7ZW1haWw6ImVtYWlsIn0sZmVhdHVyZXM6W3BnKFtKVV0pXX0pLFFVLnByb3BEZWNvcmF0b3JzPXtlbWFpbDpbe3R5cGU6eHl9XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChRVSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbZW1haWxdW2Zvcm1Db250cm9sTmFtZV0sW2VtYWlsXVtmb3JtQ29udHJvbF0sW2VtYWlsXVtuZ01vZGVsXSIscHJvdmlkZXJzOltKVV19XX1dLChmdW5jdGlvbigpe3JldHVybltdfSkse2VtYWlsOlt7dHlwZTp4eX1dfSk7Y29uc3QgJFU9e3Byb3ZpZGU6R1YsdXNlRXhpc3Rpbmc6cWUoKCgpPT50RykpLG11bHRpOiEwfTtjbGFzcyB0R3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3ZhbGlkYXRvcj1uan1uZ09uQ2hhbmdlcyh0KXsibWlubGVuZ3RoImluIHQmJih0aGlzLl9jcmVhdGVWYWxpZGF0b3IoKSx0aGlzLl9vbkNoYW5nZSYmdGhpcy5fb25DaGFuZ2UoKSl9dmFsaWRhdGUodCl7cmV0dXJuIHRoaXMuZW5hYmxlZCgpP3RoaXMuX3ZhbGlkYXRvcih0KTpudWxsfXJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UodCl7dGhpcy5fb25DaGFuZ2U9dH1fY3JlYXRlVmFsaWRhdG9yKCl7dGhpcy5fdmFsaWRhdG9yPXRoaXMuZW5hYmxlZCgpPyRWKFZVKHRoaXMubWlubGVuZ3RoKSk6bmp9ZW5hYmxlZCgpe3JldHVybiBudWxsIT10aGlzLm1pbmxlbmd0aH19dEcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHRHKX0sdEcuybVkaXI9bG8oe3R5cGU6dEcsc2VsZWN0b3JzOltbIiIsIm1pbmxlbmd0aCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibWlubGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsIm1pbmxlbmd0aCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmanAoIm1pbmxlbmd0aCIsbi5lbmFibGVkKCk/bi5taW5sZW5ndGg6bnVsbCl9LGlucHV0czp7bWlubGVuZ3RoOiJtaW5sZW5ndGgifSxmZWF0dXJlczpbcGcoWyRVXSksQm9dfSksdEcucHJvcERlY29yYXRvcnM9e21pbmxlbmd0aDpbe3R5cGU6eHl9XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh0Ryxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbbWlubGVuZ3RoXVtmb3JtQ29udHJvbE5hbWVdLFttaW5sZW5ndGhdW2Zvcm1Db250cm9sXSxbbWlubGVuZ3RoXVtuZ01vZGVsXSIscHJvdmlkZXJzOlskVV0saG9zdDp7IlthdHRyLm1pbmxlbmd0aF0iOiJlbmFibGVkKCkgPyBtaW5sZW5ndGggOiBudWxsIn19XX1dLChmdW5jdGlvbigpe3JldHVybltdfSkse21pbmxlbmd0aDpbe3R5cGU6eHl9XX0pO2NvbnN0IGVHPXtwcm92aWRlOkdWLHVzZUV4aXN0aW5nOnFlKCgoKT0+bkcpKSxtdWx0aTohMH07Y2xhc3Mgbkd7Y29uc3RydWN0b3IoKXt0aGlzLl92YWxpZGF0b3I9bmp9bmdPbkNoYW5nZXModCl7Im1heGxlbmd0aCJpbiB0JiYodGhpcy5fY3JlYXRlVmFsaWRhdG9yKCksdGhpcy5fb25DaGFuZ2UmJnRoaXMuX29uQ2hhbmdlKCkpfXZhbGlkYXRlKHQpe3JldHVybiB0aGlzLmVuYWJsZWQoKT90aGlzLl92YWxpZGF0b3IodCk6bnVsbH1yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKHQpe3RoaXMuX29uQ2hhbmdlPXR9X2NyZWF0ZVZhbGlkYXRvcigpe3RoaXMuX3ZhbGlkYXRvcj10aGlzLmVuYWJsZWQoKT90aihWVSh0aGlzLm1heGxlbmd0aCkpOm5qfWVuYWJsZWQoKXtyZXR1cm4gbnVsbCE9dGhpcy5tYXhsZW5ndGh9fW5HLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxuRyl9LG5HLsm1ZGlyPWxvKHt0eXBlOm5HLHNlbGVjdG9yczpbWyIiLCJtYXhsZW5ndGgiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIiIsIm1heGxlbmd0aCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyIiLCJtYXhsZW5ndGgiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJmpwKCJtYXhsZW5ndGgiLG4uZW5hYmxlZCgpP24ubWF4bGVuZ3RoOm51bGwpfSxpbnB1dHM6e21heGxlbmd0aDoibWF4bGVuZ3RoIn0sZmVhdHVyZXM6W3BnKFtlR10pLEJvXX0pLG5HLnByb3BEZWNvcmF0b3JzPXttYXhsZW5ndGg6W3t0eXBlOnh5fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgobkcsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW21heGxlbmd0aF1bZm9ybUNvbnRyb2xOYW1lXSxbbWF4bGVuZ3RoXVtmb3JtQ29udHJvbF0sW21heGxlbmd0aF1bbmdNb2RlbF0iLHByb3ZpZGVyczpbZUddLGhvc3Q6eyJbYXR0ci5tYXhsZW5ndGhdIjoiZW5hYmxlZCgpID8gbWF4bGVuZ3RoIDogbnVsbCJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLHttYXhsZW5ndGg6W3t0eXBlOnh5fV19KTtjb25zdCBvRz17cHJvdmlkZTpHVix1c2VFeGlzdGluZzpxZSgoKCk9PmlHKSksbXVsdGk6ITB9O2NsYXNzIGlHe2NvbnN0cnVjdG9yKCl7dGhpcy5fdmFsaWRhdG9yPW5qfW5nT25DaGFuZ2VzKHQpeyJwYXR0ZXJuImluIHQmJih0aGlzLl9jcmVhdGVWYWxpZGF0b3IoKSx0aGlzLl9vbkNoYW5nZSYmdGhpcy5fb25DaGFuZ2UoKSl9dmFsaWRhdGUodCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRvcih0KX1yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKHQpe3RoaXMuX29uQ2hhbmdlPXR9X2NyZWF0ZVZhbGlkYXRvcigpe3RoaXMuX3ZhbGlkYXRvcj1laih0aGlzLnBhdHRlcm4pfX1pRy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aUcpfSxpRy7JtWRpcj1sbyh7dHlwZTppRyxzZWxlY3RvcnM6W1siIiwicGF0dGVybiIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwicGF0dGVybiIsIiIsImZvcm1Db250cm9sIiwiIl0sWyIiLCJwYXR0ZXJuIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZqcCgicGF0dGVybiIsbi5wYXR0ZXJuP24ucGF0dGVybjpudWxsKX0saW5wdXRzOntwYXR0ZXJuOiJwYXR0ZXJuIn0sZmVhdHVyZXM6W3BnKFtvR10pLEJvXX0pLGlHLnByb3BEZWNvcmF0b3JzPXtwYXR0ZXJuOlt7dHlwZTp4eX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGlHLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6IltwYXR0ZXJuXVtmb3JtQ29udHJvbE5hbWVdLFtwYXR0ZXJuXVtmb3JtQ29udHJvbF0sW3BhdHRlcm5dW25nTW9kZWxdIixwcm92aWRlcnM6W29HXSxob3N0OnsiW2F0dHIucGF0dGVybl0iOiJwYXR0ZXJuID8gcGF0dGVybiA6IG51bGwifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSx7cGF0dGVybjpbe3R5cGU6eHl9XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgYUc9W21VLElVLEJVLFZWLGZVLENVLEZWLHpVLExVLHlVLHhqLE9qLFhVLHRHLG5HLGlHLEtVLFFVLFlVLEdVXSxyRz1bcFUsbFUsaVVdLHNHPVt4VSxQVSxBVSxrVSxEVV07Y2xhc3MgbEd7fWxHLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxsRyl9LGxHLsm1bW9kPWFvKHt0eXBlOmxHfSksbEcuybVpbmo9dm4oe2ltcG9ydHM6W1toVV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChsRyxbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczphRyxpbXBvcnRzOltoVV0sZXhwb3J0czphR31dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKGxHLHtkZWNsYXJhdGlvbnM6W21VLElVLEJVLFZWLGZVLENVLEZWLHpVLExVLHlVLHhqLE9qLFhVLHRHLG5HLGlHLEtVLFFVLFlVLEdVXSxpbXBvcnRzOltoVV0sZXhwb3J0czpbbVUsSVUsQlUsVlYsZlUsQ1UsRlYselUsTFUseVUseGosT2osWFUsdEcsbkcsaUcsS1UsUVUsWVUsR1VdfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBjR3t9Y0cuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGNHKX0sY0cuybVtb2Q9YW8oe3R5cGU6Y0d9KSxjRy7JtWluaj12bih7aW1wb3J0czpbbEddfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChjRyxbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpyRyxleHBvcnRzOltsRyxyR119XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhjRyx7ZGVjbGFyYXRpb25zOltwVSxsVSxpVV0sZXhwb3J0czpbbEcscFUsbFUsaVVdfSk7Y2xhc3MgZEd7c3RhdGljIHdpdGhDb25maWcodCl7cmV0dXJue25nTW9kdWxlOmRHLHByb3ZpZGVyczpbe3Byb3ZpZGU6TVUsdXNlVmFsdWU6dC53YXJuT25OZ01vZGVsV2l0aEZvcm1Db250cm9sfV19fX1kRy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZEcpfSxkRy7JtW1vZD1hbyh7dHlwZTpkR30pLGRHLsm1aW5qPXZuKHtpbXBvcnRzOltsR119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGRHLFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltzR10sZXhwb3J0czpbbEcsc0ddfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oZEcse2RlY2xhcmF0aW9uczpbeFUsUFUsQVUsa1UsRFVdLGV4cG9ydHM6W2xHLHhVLFBVLEFVLGtVLERVXX0pO2NsYXNzIHBHe2dyb3VwKHQsZT1udWxsKXtjb25zdCBuPXRoaXMuX3JlZHVjZUNvbnRyb2xzKHQpO2xldCBvLGk9bnVsbCxhPW51bGw7cmV0dXJuIG51bGwhPWUmJigoCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiByKHQpe3JldHVybiB2b2lkIDAhPT10LmFzeW5jVmFsaWRhdG9yc3x8dm9pZCAwIT09dC52YWxpZGF0b3JzfHx2b2lkIDAhPT10LnVwZGF0ZU9ufSkoZSk/KGk9bnVsbCE9ZS52YWxpZGF0b3JzP2UudmFsaWRhdG9yczpudWxsLGE9bnVsbCE9ZS5hc3luY1ZhbGlkYXRvcnM/ZS5hc3luY1ZhbGlkYXRvcnM6bnVsbCxvPW51bGwhPWUudXBkYXRlT24/ZS51cGRhdGVPbjp2b2lkIDApOihpPW51bGwhPWUudmFsaWRhdG9yP2UudmFsaWRhdG9yOm51bGwsYT1udWxsIT1lLmFzeW5jVmFsaWRhdG9yP2UuYXN5bmNWYWxpZGF0b3I6bnVsbCkpLG5ldyB0VShuLHthc3luY1ZhbGlkYXRvcnM6YSx1cGRhdGVPbjpvLHZhbGlkYXRvcnM6aX0pfWNvbnRyb2wodCxlLG4pe3JldHVybiBuZXcgJGoodCxlLG4pfWFycmF5KHQsZSxuKXtjb25zdCBvPXQubWFwKCh0PT50aGlzLl9jcmVhdGVDb250cm9sKHQpKSk7cmV0dXJuIG5ldyBlVShvLGUsbil9X3JlZHVjZUNvbnRyb2xzKHQpe2NvbnN0IGU9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKG49PntlW25dPXRoaXMuX2NyZWF0ZUNvbnRyb2wodFtuXSl9KSksZX1fY3JlYXRlQ29udHJvbCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mICRqfHx0IGluc3RhbmNlb2YgdFV8fHQgaW5zdGFuY2VvZiBlVT90OkFycmF5LmlzQXJyYXkodCk/dGhpcy5jb250cm9sKHRbMF0sdC5sZW5ndGg+MT90WzFdOm51bGwsdC5sZW5ndGg+Mj90WzJdOm51bGwpOnRoaXMuY29udHJvbCh0KX19cEcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHBHKX0scEcuybVwcm92PU1uKHtmYWN0b3J5OmZ1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IHBHfSx0b2tlbjpwRyxwcm92aWRlZEluOmRHfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChwRyxbe3R5cGU6aW0sYXJnczpbe3Byb3ZpZGVkSW46ZEd9XX1dLG51bGwsbnVsbCksCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpuZXcgT2coIjEyLjIuMSIpO2NvbnN0IG1HPVsidHJpZ2dlciJdLHVHPVsicGFuZWwiXTtmdW5jdGlvbiBmRyh0LGUpe2lmKDEmdCYmKFJtKDAsInNwYW4iLDgpLGt1KDEpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgpO3JjKDEpLFN1KHQucGxhY2Vob2xkZXIpfX1mdW5jdGlvbiBnRyh0LGUpe2lmKDEmdCYmKFJtKDAsInNwYW4iLDEyKSxrdSgxKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oMik7cmMoMSksU3UodC50cmlnZ2VyVmFsdWUpfX1mdW5jdGlvbiBoRyh0LGUpezEmdCYmWG0oMCwwLFsiKm5nU3dpdGNoQ2FzZSIsInRydWUiXSl9ZnVuY3Rpb24gYkcodCxlKXsxJnQmJihSbSgwLCJzcGFuIiw5KSxRcCgxLGdHLDIsMSwic3BhbiIsMTApLFFwKDIsaEcsMSwwLCJuZy1jb250ZW50IiwxMSksQW0oKSksMiZ0JiYoRG0oIm5nU3dpdGNoIiwhIVltKCkuY3VzdG9tVHJpZ2dlcikscmMoMiksRG0oIm5nU3dpdGNoQ2FzZSIsITApKX1mdW5jdGlvbiB5Ryh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsImRpdiIsMTMpLFJtKDEsImRpdiIsMTQsMTUpLFZtKCJAdHJhbnNmb3JtUGFuZWwuZG9uZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKCkuX3BhbmVsRG9uZUFuaW1hdGluZ1N0cmVhbS5uZXh0KG4udG9TdGF0ZSl9KSkoImtleWRvd24iLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLl9oYW5kbGVLZXlkb3duKG4pfSkpLFhtKDMsMSksQW0oKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgpO0RtKCJAdHJhbnNmb3JtUGFuZWxXcmFwIix2b2lkIDApLHJjKDEpLEF1KCJtYXQtc2VsZWN0LXBhbmVsICIsdC5fZ2V0UGFuZWxUaGVtZSgpLCIiKSxkdSgidHJhbnNmb3JtLW9yaWdpbiIsdC5fdHJhbnNmb3JtT3JpZ2luKSgiZm9udC1zaXplIix0Ll90cmlnZ2VyRm9udFNpemUsInB4IiksRG0oIm5nQ2xhc3MiLHQucGFuZWxDbGFzcykoIkB0cmFuc2Zvcm1QYW5lbCIsdC5tdWx0aXBsZT8ic2hvd2luZy1tdWx0aXBsZSI6InNob3dpbmciKSxqcCgiaWQiLHQuaWQrIi1wYW5lbCIpKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIsdC5tdWx0aXBsZSkoImFyaWEtbGFiZWwiLHQuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5Iix0Ll9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KCkpfX1jb25zdCBfRz1bW1sibWF0LXNlbGVjdC10cmlnZ2VyIl1dLCIqIl0sQ0c9e3RyYW5zZm9ybVBhbmVsV3JhcDpueCgidHJhbnNmb3JtUGFuZWxXcmFwIixbbHgoIiogPT4gdm9pZCIsZHgoIkB0cmFuc2Zvcm1QYW5lbCIsW2N4KCldLHtvcHRpb25hbDohMH0pKV0pLHRyYW5zZm9ybVBhbmVsOm54KCJ0cmFuc2Zvcm1QYW5lbCIsW3J4KCJ2b2lkIixheCh7dHJhbnNmb3JtOiJzY2FsZVkoMC44KSIsbWluV2lkdGg6IjEwMCUiLG9wYWNpdHk6MH0pKSxyeCgic2hvd2luZyIsYXgoe29wYWNpdHk6MSxtaW5XaWR0aDoiY2FsYygxMDAlICsgMzJweCkiLHRyYW5zZm9ybToic2NhbGVZKDEpIn0pKSxyeCgic2hvd2luZy1tdWx0aXBsZSIsYXgoe29wYWNpdHk6MSxtaW5XaWR0aDoiY2FsYygxMDAlICsgNjRweCkiLHRyYW5zZm9ybToic2NhbGVZKDEpIn0pKSxseCgidm9pZCA9PiAqIixveCgiMTIwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiKSksbHgoIiogPT4gdm9pZCIsb3goIjEwMG1zIDI1bXMgbGluZWFyIixheCh7b3BhY2l0eTowfSkpKV0pfTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmxldCBNRz0wO2NvbnN0IHZHPTI1Nix4Rz1uZXcgR2EoIm1hdC1zZWxlY3Qtc2Nyb2xsLXN0cmF0ZWd5IiksT0c9bmV3IEdhKCJNQVRfU0VMRUNUX0NPTkZJRyIpLFBHPXtwcm92aWRlOnhHLGRlcHM6W3BMXSx1c2VGYWN0b3J5OmZ1bmN0aW9uIHdHKHQpe3JldHVybigpPT50LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX07Y2xhc3Mga0d7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMudmFsdWU9ZX19Y29uc3QgU0c9UUkoJEkoS0kodEgoY2xhc3N7Y29uc3RydWN0b3IodCxlLG4sbyxpKXt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyPWUsdGhpcy5fcGFyZW50Rm9ybT1uLHRoaXMuX3BhcmVudEZvcm1Hcm91cD1vLHRoaXMubmdDb250cm9sPWl9fSkpKSksREc9bmV3IEdhKCJNYXRTZWxlY3RUcmlnZ2VyIik7Y2xhc3MgRUd7fUVHLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxFRyl9LEVHLsm1ZGlyPWxvKHt0eXBlOkVHLHNlbGVjdG9yczpbWyJtYXQtc2VsZWN0LXRyaWdnZXIiXV0sZmVhdHVyZXM6W3BnKFt7cHJvdmlkZTpERyx1c2VFeGlzdGluZzpFR31dKV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEVHLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciIscHJvdmlkZXJzOlt7cHJvdmlkZTpERyx1c2VFeGlzdGluZzpFR31dfV19XSxudWxsLG51bGwpO2NsYXNzIFJHIGV4dGVuZHMgU0d7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1KXt2YXIgZixnLGg7c3VwZXIoaSxvLHIscyxjKSx0aGlzLl92aWV3cG9ydFJ1bGVyPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9kaXI9YSx0aGlzLl9wYXJlbnRGb3JtRmllbGQ9bCx0aGlzLl9saXZlQW5ub3VuY2VyPW0sdGhpcy5fZGVmYXVsdE9wdGlvbnM9dSx0aGlzLl9wYW5lbE9wZW49ITEsdGhpcy5fY29tcGFyZVdpdGg9KHQsZSk9PnQ9PT1lLHRoaXMuX3VpZD0ibWF0LXNlbGVjdC0iK01HKyssdGhpcy5fdHJpZ2dlckFyaWFMYWJlbGxlZEJ5PW51bGwsdGhpcy5fZGVzdHJveT1uZXcgSSx0aGlzLl9vbkNoYW5nZT0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl92YWx1ZUlkPSJtYXQtc2VsZWN0LXZhbHVlLSIrTUcrKyx0aGlzLl9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW09bmV3IEksdGhpcy5fb3ZlcmxheVBhbmVsQ2xhc3M9KG51bGw9PT0oZj10aGlzLl9kZWZhdWx0T3B0aW9ucyl8fHZvaWQgMD09PWY/dm9pZCAwOmYub3ZlcmxheVBhbmVsQ2xhc3MpfHwiIix0aGlzLl9mb2N1c2VkPSExLHRoaXMuY29udHJvbFR5cGU9Im1hdC1zZWxlY3QiLHRoaXMuX3JlcXVpcmVkPSExLHRoaXMuX211bHRpcGxlPSExLHRoaXMuX2Rpc2FibGVPcHRpb25DZW50ZXJpbmc9bnVsbCE9PShoPW51bGw9PT0oZz10aGlzLl9kZWZhdWx0T3B0aW9ucyl8fHZvaWQgMD09PWc/dm9pZCAwOmcuZGlzYWJsZU9wdGlvbkNlbnRlcmluZykmJnZvaWQgMCE9PWgmJmgsdGhpcy5hcmlhTGFiZWw9IiIsdGhpcy5vcHRpb25TZWxlY3Rpb25DaGFuZ2VzPVF0KCgoKT0+e2NvbnN0IHQ9dGhpcy5vcHRpb25zO3JldHVybiB0P3QuY2hhbmdlcy5waXBlKE5lKHQpLHplKCgoKT0+cmUoLi4udC5tYXAoKHQ9PnQub25TZWxlY3Rpb25DaGFuZ2UpKSkpKSk6dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoYmUoMSksemUoKCgpPT50aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXMpKSl9KSksdGhpcy5vcGVuZWRDaGFuZ2U9bmV3IExoLHRoaXMuX29wZW5lZFN0cmVhbT10aGlzLm9wZW5lZENoYW5nZS5waXBlKGNlKCh0PT50KSksSXQoKCgpPT57fSkpKSx0aGlzLl9jbG9zZWRTdHJlYW09dGhpcy5vcGVuZWRDaGFuZ2UucGlwZShjZSgodD0+IXQpKSxJdCgoKCk9Pnt9KSkpLHRoaXMuc2VsZWN0aW9uQ2hhbmdlPW5ldyBMaCx0aGlzLnZhbHVlQ2hhbmdlPW5ldyBMaCx0aGlzLm5nQ29udHJvbCYmKHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3I9dGhpcyksbnVsbCE9KG51bGw9PXU/dm9pZCAwOnUudHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCkmJih0aGlzLl90eXBlYWhlYWREZWJvdW5jZUludGVydmFsPXUudHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3lGYWN0b3J5PXAsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9dGhpcy5fc2Nyb2xsU3RyYXRlZ3lGYWN0b3J5KCksdGhpcy50YWJJbmRleD1wYXJzZUludChkKXx8MCx0aGlzLmlkPXRoaXMuaWR9Z2V0IGZvY3VzZWQoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZHx8dGhpcy5fcGFuZWxPcGVufWdldCBwbGFjZWhvbGRlcigpe3JldHVybiB0aGlzLl9wbGFjZWhvbGRlcn1zZXQgcGxhY2Vob2xkZXIodCl7dGhpcy5fcGxhY2Vob2xkZXI9dCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfXNldCByZXF1aXJlZCh0KXt0aGlzLl9yZXF1aXJlZD15eih0KSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Z2V0IG11bHRpcGxlKCl7cmV0dXJuIHRoaXMuX211bHRpcGxlfXNldCBtdWx0aXBsZSh0KXtpZih0aGlzLl9zZWxlY3Rpb25Nb2RlbCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KdGhyb3coZnVuY3Rpb24gZSgpe3JldHVybiBFcnJvcigiQ2Fubm90IGNoYW5nZSBgbXVsdGlwbGVgIG1vZGUgb2Ygc2VsZWN0IGFmdGVyIGluaXRpYWxpemF0aW9uLiIpfSkoKTt0aGlzLl9tdWx0aXBsZT15eih0KX1nZXQgZGlzYWJsZU9wdGlvbkNlbnRlcmluZygpe3JldHVybiB0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nfXNldCBkaXNhYmxlT3B0aW9uQ2VudGVyaW5nKHQpe3RoaXMuX2Rpc2FibGVPcHRpb25DZW50ZXJpbmc9eXoodCl9Z2V0IGNvbXBhcmVXaXRoKCl7cmV0dXJuIHRoaXMuX2NvbXBhcmVXaXRofXNldCBjb21wYXJlV2l0aCh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93KGZ1bmN0aW9uIGUoKXtyZXR1cm4gRXJyb3IoImBjb21wYXJlV2l0aGAgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpfSkoKTt0aGlzLl9jb21wYXJlV2l0aD10LHRoaXMuX3NlbGVjdGlvbk1vZGVsJiZ0aGlzLl9pbml0aWFsaXplU2VsZWN0aW9uKCl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfXNldCB2YWx1ZSh0KXsodCE9PXRoaXMuX3ZhbHVlfHx0aGlzLl9tdWx0aXBsZSYmQXJyYXkuaXNBcnJheSh0KSkmJih0aGlzLm9wdGlvbnMmJnRoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUodCksdGhpcy5fdmFsdWU9dCl9Z2V0IHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwoKXtyZXR1cm4gdGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbH1zZXQgdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCh0KXt0aGlzLl90eXBlYWhlYWREZWJvdW5jZUludGVydmFsPV96KHQpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQodCl7dGhpcy5faWQ9dHx8dGhpcy5fdWlkLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1uZ09uSW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsPW5ldyBvRih0aGlzLm11bHRpcGxlKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCksdGhpcy5fcGFuZWxEb25lQW5pbWF0aW5nU3RyZWFtLnBpcGUoTWUoKSxJZSh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgoKT0+dGhpcy5fcGFuZWxEb25lQW5pbWF0aW5nKHRoaXMucGFuZWxPcGVuKSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2luaXRLZXlNYW5hZ2VyKCksdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2hhbmdlZC5waXBlKEllKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKHQ9Pnt0LmFkZGVkLmZvckVhY2goKHQ9PnQuc2VsZWN0KCkpKSx0LnJlbW92ZWQuZm9yRWFjaCgodD0+dC5kZXNlbGVjdCgpKSl9KSksdGhpcy5vcHRpb25zLmNoYW5nZXMucGlwZShOZShudWxsKSxJZSh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX3Jlc2V0T3B0aW9ucygpLHRoaXMuX2luaXRpYWxpemVTZWxlY3Rpb24oKX0pKX1uZ0RvQ2hlY2soKXtjb25zdCB0PXRoaXMuX2dldFRyaWdnZXJBcmlhTGFiZWxsZWRieSgpO2lmKHQhPT10aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnkpe2NvbnN0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3RyaWdnZXJBcmlhTGFiZWxsZWRCeT10LHQ/ZS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsdCk6ZS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIpfXRoaXMubmdDb250cm9sJiZ0aGlzLnVwZGF0ZUVycm9yU3RhdGUoKX1uZ09uQ2hhbmdlcyh0KXt0LmRpc2FibGVkJiZ0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCksdC50eXBlYWhlYWREZWJvdW5jZUludGVydmFsJiZ0aGlzLl9rZXlNYW5hZ2VyJiZ0aGlzLl9rZXlNYW5hZ2VyLndpdGhUeXBlQWhlYWQodGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95Lm5leHQoKSx0aGlzLl9kZXN0cm95LmNvbXBsZXRlKCksdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX10b2dnbGUoKXt0aGlzLnBhbmVsT3Blbj90aGlzLmNsb3NlKCk6dGhpcy5vcGVuKCl9b3Blbigpe3RoaXMuX2Nhbk9wZW4oKSYmKHRoaXMuX3BhbmVsT3Blbj0hMCx0aGlzLl9rZXlNYW5hZ2VyLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24obnVsbCksdGhpcy5faGlnaGxpZ2h0Q29ycmVjdE9wdGlvbigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1jbG9zZSgpe3RoaXMuX3BhbmVsT3BlbiYmKHRoaXMuX3BhbmVsT3Blbj0hMSx0aGlzLl9rZXlNYW5hZ2VyLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5faXNSdGwoKT8icnRsIjoibHRyIiksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fb25Ub3VjaGVkKCkpfXdyaXRlVmFsdWUodCl7dGhpcy52YWx1ZT10fXJlZ2lzdGVyT25DaGFuZ2UodCl7dGhpcy5fb25DaGFuZ2U9dH1yZWdpc3Rlck9uVG91Y2hlZCh0KXt0aGlzLl9vblRvdWNoZWQ9dH1zZXREaXNhYmxlZFN0YXRlKHQpe3RoaXMuZGlzYWJsZWQ9dCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Z2V0IHBhbmVsT3Blbigpe3JldHVybiB0aGlzLl9wYW5lbE9wZW59Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMubXVsdGlwbGU/dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQ6dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF19Z2V0IHRyaWdnZXJWYWx1ZSgpe2lmKHRoaXMuZW1wdHkpcmV0dXJuIiI7aWYodGhpcy5fbXVsdGlwbGUpe2NvbnN0IHQ9dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQubWFwKCh0PT50LnZpZXdWYWx1ZSkpO3JldHVybiB0aGlzLl9pc1J0bCgpJiZ0LnJldmVyc2UoKSx0LmpvaW4oIiwgIil9cmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdLnZpZXdWYWx1ZX1faXNSdGwoKXtyZXR1cm4hIXRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWV9X2hhbmRsZUtleWRvd24odCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMucGFuZWxPcGVuP3RoaXMuX2hhbmRsZU9wZW5LZXlkb3duKHQpOnRoaXMuX2hhbmRsZUNsb3NlZEtleWRvd24odCkpfV9oYW5kbGVDbG9zZWRLZXlkb3duKHQpe2NvbnN0IGU9dC5rZXlDb2RlLG49ZT09PWh6fHxlPT09Z3p8fDM3PT09ZXx8Mzk9PT1lLG89ZT09PW16fHxlPT09ZnosaT10aGlzLl9rZXlNYW5hZ2VyO2lmKCFpLmlzVHlwaW5nKCkmJm8mJiFieih0KXx8KHRoaXMubXVsdGlwbGV8fHQuYWx0S2V5KSYmbil0LnByZXZlbnREZWZhdWx0KCksdGhpcy5vcGVuKCk7ZWxzZSBpZighdGhpcy5tdWx0aXBsZSl7Y29uc3QgZT10aGlzLnNlbGVjdGVkO2kub25LZXlkb3duKHQpO2NvbnN0IG49dGhpcy5zZWxlY3RlZDtuJiZlIT09biYmdGhpcy5fbGl2ZUFubm91bmNlci5hbm5vdW5jZShuLnZpZXdWYWx1ZSwxZTQpfX1faGFuZGxlT3BlbktleWRvd24odCl7Y29uc3QgZT10aGlzLl9rZXlNYW5hZ2VyLG49dC5rZXlDb2RlLG89bj09PWh6fHxuPT09Z3osaT1lLmlzVHlwaW5nKCk7aWYobyYmdC5hbHRLZXkpdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2UoKTtlbHNlIGlmKGl8fG4hPT1teiYmbiE9PWZ6fHwhZS5hY3RpdmVJdGVtfHxieih0KSlpZighaSYmdGhpcy5fbXVsdGlwbGUmJjY1PT09biYmdC5jdHJsS2V5KXt0LnByZXZlbnREZWZhdWx0KCk7Y29uc3QgZT10aGlzLm9wdGlvbnMuc29tZSgodD0+IXQuZGlzYWJsZWQmJiF0LnNlbGVjdGVkKSk7dGhpcy5vcHRpb25zLmZvckVhY2goKHQ9Pnt0LmRpc2FibGVkfHwoZT90LnNlbGVjdCgpOnQuZGVzZWxlY3QoKSl9KSl9ZWxzZXtjb25zdCBuPWUuYWN0aXZlSXRlbUluZGV4O2Uub25LZXlkb3duKHQpLHRoaXMuX211bHRpcGxlJiZvJiZ0LnNoaWZ0S2V5JiZlLmFjdGl2ZUl0ZW0mJmUuYWN0aXZlSXRlbUluZGV4IT09biYmZS5hY3RpdmVJdGVtLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpfWVsc2UgdC5wcmV2ZW50RGVmYXVsdCgpLGUuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX1fb25Gb2N1cygpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9mb2N1c2VkPSEwLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X29uQmx1cigpe3RoaXMuX2ZvY3VzZWQ9ITEsdGhpcy5kaXNhYmxlZHx8dGhpcy5wYW5lbE9wZW58fCh0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9vbkF0dGFjaGVkKCl7dGhpcy5fb3ZlcmxheURpci5wb3NpdGlvbkNoYW5nZS5waXBlKGJlKDEpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuX3Bvc2l0aW9uaW5nU2V0dGxlZCgpfSkpfV9nZXRQYW5lbFRoZW1lKCl7cmV0dXJuIHRoaXMuX3BhcmVudEZvcm1GaWVsZD9gbWF0LSR7dGhpcy5fcGFyZW50Rm9ybUZpZWxkLmNvbG9yfWA6IiJ9Z2V0IGVtcHR5KCl7cmV0dXJuIXRoaXMuX3NlbGVjdGlvbk1vZGVsfHx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc0VtcHR5KCl9X2luaXRpYWxpemVTZWxlY3Rpb24oKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e3RoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUodGhpcy5uZ0NvbnRyb2w/dGhpcy5uZ0NvbnRyb2wudmFsdWU6dGhpcy5fdmFsdWUpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pKX1fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0KXtpZih0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5mb3JFYWNoKCh0PT50LnNldEluYWN0aXZlU3R5bGVzKCkpKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLHRoaXMubXVsdGlwbGUmJnQpe2lmKCFBcnJheS5pc0FycmF5KHQpJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3coZnVuY3Rpb24gZSgpe3JldHVybiBFcnJvcigiVmFsdWUgbXVzdCBiZSBhbiBhcnJheSBpbiBtdWx0aXBsZS1zZWxlY3Rpb24gbW9kZS4iKX0pKCk7dC5mb3JFYWNoKCh0PT50aGlzLl9zZWxlY3RWYWx1ZSh0KSkpLHRoaXMuX3NvcnRWYWx1ZXMoKX1lbHNle2NvbnN0IGU9dGhpcy5fc2VsZWN0VmFsdWUodCk7ZT90aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oZSk6dGhpcy5wYW5lbE9wZW58fHRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbSgtMSl9dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X3NlbGVjdFZhbHVlKHQpe2NvbnN0IGU9dGhpcy5vcHRpb25zLmZpbmQoKGU9PntpZih0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKGUpKXJldHVybiExO3RyeXtyZXR1cm4gbnVsbCE9ZS52YWx1ZSYmdGhpcy5fY29tcGFyZVdpdGgoZS52YWx1ZSx0KX1jYXRjaCh0KXtyZXR1cm4oInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmNvbnNvbGUud2Fybih0KSwhMX19KSk7cmV0dXJuIGUmJnRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChlKSxlfV9pbml0S2V5TWFuYWdlcigpe3RoaXMuX2tleU1hbmFnZXI9bmV3IHRJKHRoaXMub3B0aW9ucykud2l0aFR5cGVBaGVhZCh0aGlzLl90eXBlYWhlYWREZWJvdW5jZUludGVydmFsKS53aXRoVmVydGljYWxPcmllbnRhdGlvbigpLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5faXNSdGwoKT8icnRsIjoibHRyIikud2l0aEhvbWVBbmRFbmQoKS53aXRoQWxsb3dlZE1vZGlmaWVyS2V5cyhbInNoaWZ0S2V5Il0pLHRoaXMuX2tleU1hbmFnZXIudGFiT3V0LnBpcGUoSWUodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLnBhbmVsT3BlbiYmKCF0aGlzLm11bHRpcGxlJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0mJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSx0aGlzLmZvY3VzKCksdGhpcy5jbG9zZSgpKX0pKSx0aGlzLl9rZXlNYW5hZ2VyLmNoYW5nZS5waXBlKEllKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fcGFuZWxPcGVuJiZ0aGlzLnBhbmVsP3RoaXMuX3Njcm9sbE9wdGlvbkludG9WaWV3KHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4fHwwKTp0aGlzLl9wYW5lbE9wZW58fHRoaXMubXVsdGlwbGV8fCF0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW18fHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX0pKX1fcmVzZXRPcHRpb25zKCl7Y29uc3QgdD1yZSh0aGlzLm9wdGlvbnMuY2hhbmdlcyx0aGlzLl9kZXN0cm95KTt0aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXMucGlwZShJZSh0KSkuc3Vic2NyaWJlKCh0PT57dGhpcy5fb25TZWxlY3QodC5zb3VyY2UsdC5pc1VzZXJJbnB1dCksdC5pc1VzZXJJbnB1dCYmIXRoaXMubXVsdGlwbGUmJnRoaXMuX3BhbmVsT3BlbiYmKHRoaXMuY2xvc2UoKSx0aGlzLmZvY3VzKCkpfSkpLHJlKC4uLnRoaXMub3B0aW9ucy5tYXAoKHQ9PnQuX3N0YXRlQ2hhbmdlcykpKS5waXBlKEllKHQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSkpfV9vblNlbGVjdCh0LGUpe2NvbnN0IG49dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZCh0KTtudWxsIT10LnZhbHVlfHx0aGlzLl9tdWx0aXBsZT8obiE9PXQuc2VsZWN0ZWQmJih0LnNlbGVjdGVkP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdCh0KTp0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdCh0KSksZSYmdGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKHQpLHRoaXMubXVsdGlwbGUmJih0aGlzLl9zb3J0VmFsdWVzKCksZSYmdGhpcy5mb2N1cygpKSk6KHQuZGVzZWxlY3QoKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLG51bGwhPXRoaXMudmFsdWUmJnRoaXMuX3Byb3BhZ2F0ZUNoYW5nZXModC52YWx1ZSkpLG4hPT10aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKHQpJiZ0aGlzLl9wcm9wYWdhdGVDaGFuZ2VzKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfV9zb3J0VmFsdWVzKCl7aWYodGhpcy5tdWx0aXBsZSl7Y29uc3QgdD10aGlzLm9wdGlvbnMudG9BcnJheSgpO3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNvcnQoKChlLG4pPT50aGlzLnNvcnRDb21wYXJhdG9yP3RoaXMuc29ydENvbXBhcmF0b3IoZSxuLHQpOnQuaW5kZXhPZihlKS10LmluZGV4T2YobikpKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9fV9wcm9wYWdhdGVDaGFuZ2VzKHQpe2xldCBlPW51bGw7ZT10aGlzLm11bHRpcGxlP3RoaXMuc2VsZWN0ZWQubWFwKCh0PT50LnZhbHVlKSk6dGhpcy5zZWxlY3RlZD90aGlzLnNlbGVjdGVkLnZhbHVlOnQsdGhpcy5fdmFsdWU9ZSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZSksdGhpcy5fb25DaGFuZ2UoZSksdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLl9nZXRDaGFuZ2VFdmVudChlKSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X2hpZ2hsaWdodENvcnJlY3RPcHRpb24oKXt0aGlzLl9rZXlNYW5hZ2VyJiYodGhpcy5lbXB0eT90aGlzLl9rZXlNYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpOnRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSh0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXSkpfV9jYW5PcGVuKCl7dmFyIHQ7cmV0dXJuIXRoaXMuX3BhbmVsT3BlbiYmIXRoaXMuZGlzYWJsZWQmJihudWxsPT09KHQ9dGhpcy5vcHRpb25zKXx8dm9pZCAwPT09dD92b2lkIDA6dC5sZW5ndGgpPjB9Zm9jdXModCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKHQpfV9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KCl7dmFyIHQ7aWYodGhpcy5hcmlhTGFiZWwpcmV0dXJuIG51bGw7Y29uc3QgZT1udWxsPT09KHQ9dGhpcy5fcGFyZW50Rm9ybUZpZWxkKXx8dm9pZCAwPT09dD92b2lkIDA6dC5nZXRMYWJlbElkKCk7cmV0dXJuIHRoaXMuYXJpYUxhYmVsbGVkYnk/KGU/ZSsiICI6IiIpK3RoaXMuYXJpYUxhYmVsbGVkYnk6ZX1fZ2V0QXJpYUFjdGl2ZURlc2NlbmRhbnQoKXtyZXR1cm4gdGhpcy5wYW5lbE9wZW4mJnRoaXMuX2tleU1hbmFnZXImJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbT90aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uaWQ6bnVsbH1fZ2V0VHJpZ2dlckFyaWFMYWJlbGxlZGJ5KCl7dmFyIHQ7aWYodGhpcy5hcmlhTGFiZWwpcmV0dXJuIG51bGw7Y29uc3QgZT1udWxsPT09KHQ9dGhpcy5fcGFyZW50Rm9ybUZpZWxkKXx8dm9pZCAwPT09dD92b2lkIDA6dC5nZXRMYWJlbElkKCk7bGV0IG49KGU/ZSsiICI6IiIpK3RoaXMuX3ZhbHVlSWQ7cmV0dXJuIHRoaXMuYXJpYUxhYmVsbGVkYnkmJihuKz0iICIrdGhpcy5hcmlhTGFiZWxsZWRieSksbn1fcGFuZWxEb25lQW5pbWF0aW5nKHQpe3RoaXMub3BlbmVkQ2hhbmdlLmVtaXQodCl9c2V0RGVzY3JpYmVkQnlJZHModCl7dGhpcy5fYXJpYURlc2NyaWJlZGJ5PXQuam9pbigiICIpfW9uQ29udGFpbmVyQ2xpY2soKXt0aGlzLmZvY3VzKCksdGhpcy5vcGVuKCl9Z2V0IHNob3VsZExhYmVsRmxvYXQoKXtyZXR1cm4gdGhpcy5fcGFuZWxPcGVufHwhdGhpcy5lbXB0eXx8dGhpcy5fZm9jdXNlZCYmISF0aGlzLl9wbGFjZWhvbGRlcn19UkcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFJHKShTbSh1RiksU20oVWcpLFNtKGFfKSxTbShiSCksU20oaGcpLFNtKEhJLDgpLFNtKGlVLDgpLFNtKFBVLDgpLFNtKFJWLDgpLFNtKE1qLDEwKSxOYSgidGFiaW5kZXgiKSxTbSh4RyksU20oT0kpLFNtKE9HLDgpKX0sUkcuybVkaXI9bG8oe3R5cGU6Ukcsdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihRaChtRyw1KSxRaCh1Ryw1KSxRaChnTCw1KSksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi50cmlnZ2VyPXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLnBhbmVsPXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLl9vdmVybGF5RGlyPXQuZmlyc3QpfX0saW5wdXRzOnthcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0saWQ6ImlkIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHJlcXVpcmVkOiJyZXF1aXJlZCIsbXVsdGlwbGU6Im11bHRpcGxlIixkaXNhYmxlT3B0aW9uQ2VudGVyaW5nOiJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIixjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgiLHZhbHVlOiJ2YWx1ZSIsdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbDoidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIscGFuZWxDbGFzczoicGFuZWxDbGFzcyIsYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGVycm9yU3RhdGVNYXRjaGVyOiJlcnJvclN0YXRlTWF0Y2hlciIsc29ydENvbXBhcmF0b3I6InNvcnRDb21wYXJhdG9yIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UiLF9vcGVuZWRTdHJlYW06Im9wZW5lZCIsX2Nsb3NlZFN0cmVhbToiY2xvc2VkIixzZWxlY3Rpb25DaGFuZ2U6InNlbGVjdGlvbkNoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W3hwLEJvXX0pLFJHLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dUZ9LHt0eXBlOlVnfSx7dHlwZTphX30se3R5cGU6Ykh9LHt0eXBlOmhnfSx7dHlwZTpISSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTppVSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTpQVSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTpBVixkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbUlZdfV19LHt0eXBlOk1qLGRlY29yYXRvcnM6W3t0eXBlOkRyfSx7dHlwZTpTcn1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6amEsYXJnczpbInRhYmluZGV4Il19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W3hHXX1dfSx7dHlwZTpPSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltPR119XX1dLFJHLnByb3BEZWNvcmF0b3JzPXt0cmlnZ2VyOlt7dHlwZTpaYSxhcmdzOlsidHJpZ2dlciJdfV0scGFuZWw6W3t0eXBlOlphLGFyZ3M6WyJwYW5lbCJdfV0sX292ZXJsYXlEaXI6W3t0eXBlOlphLGFyZ3M6W2dMXX1dLHBhbmVsQ2xhc3M6W3t0eXBlOnh5fV0scGxhY2Vob2xkZXI6W3t0eXBlOnh5fV0scmVxdWlyZWQ6W3t0eXBlOnh5fV0sbXVsdGlwbGU6W3t0eXBlOnh5fV0sZGlzYWJsZU9wdGlvbkNlbnRlcmluZzpbe3R5cGU6eHl9XSxjb21wYXJlV2l0aDpbe3R5cGU6eHl9XSx2YWx1ZTpbe3R5cGU6eHl9XSxhcmlhTGFiZWw6W3t0eXBlOnh5LGFyZ3M6WyJhcmlhLWxhYmVsIl19XSxhcmlhTGFiZWxsZWRieTpbe3R5cGU6eHksYXJnczpbImFyaWEtbGFiZWxsZWRieSJdfV0sZXJyb3JTdGF0ZU1hdGNoZXI6W3t0eXBlOnh5fV0sdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbDpbe3R5cGU6eHl9XSxzb3J0Q29tcGFyYXRvcjpbe3R5cGU6eHl9XSxpZDpbe3R5cGU6eHl9XSxvcGVuZWRDaGFuZ2U6W3t0eXBlOk95fV0sX29wZW5lZFN0cmVhbTpbe3R5cGU6T3ksYXJnczpbIm9wZW5lZCJdfV0sX2Nsb3NlZFN0cmVhbTpbe3R5cGU6T3ksYXJnczpbImNsb3NlZCJdfV0sc2VsZWN0aW9uQ2hhbmdlOlt7dHlwZTpPeX1dLHZhbHVlQ2hhbmdlOlt7dHlwZTpPeX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFJHLFt7dHlwZTpDeX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp1Rn0se3R5cGU6VWd9LHt0eXBlOmFffSx7dHlwZTpiSH0se3R5cGU6aGd9LHt0eXBlOkhJLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOmlVLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOlBVLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOkFWLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltSVl19XX0se3R5cGU6TWosZGVjb3JhdG9yczpbe3R5cGU6RHJ9LHt0eXBlOlNyfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpqYSxhcmdzOlsidGFiaW5kZXgiXX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbeEddfV19LHt0eXBlOk9JfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W09HXX1dfV19KSx7YXJpYUxhYmVsOlt7dHlwZTp4eSxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sb3BlbmVkQ2hhbmdlOlt7dHlwZTpPeX1dLF9vcGVuZWRTdHJlYW06W3t0eXBlOk95LGFyZ3M6WyJvcGVuZWQiXX1dLF9jbG9zZWRTdHJlYW06W3t0eXBlOk95LGFyZ3M6WyJjbG9zZWQiXX1dLHNlbGVjdGlvbkNoYW5nZTpbe3R5cGU6T3l9XSx2YWx1ZUNoYW5nZTpbe3R5cGU6T3l9XSxpZDpbe3R5cGU6eHl9XSxwbGFjZWhvbGRlcjpbe3R5cGU6eHl9XSxyZXF1aXJlZDpbe3R5cGU6eHl9XSxtdWx0aXBsZTpbe3R5cGU6eHl9XSxkaXNhYmxlT3B0aW9uQ2VudGVyaW5nOlt7dHlwZTp4eX1dLGNvbXBhcmVXaXRoOlt7dHlwZTp4eX1dLHZhbHVlOlt7dHlwZTp4eX1dLHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw6W3t0eXBlOnh5fV0sdHJpZ2dlcjpbe3R5cGU6WmEsYXJnczpbInRyaWdnZXIiXX1dLHBhbmVsOlt7dHlwZTpaYSxhcmdzOlsicGFuZWwiXX1dLF9vdmVybGF5RGlyOlt7dHlwZTpaYSxhcmdzOltnTF19XSxwYW5lbENsYXNzOlt7dHlwZTp4eX1dLGFyaWFMYWJlbGxlZGJ5Olt7dHlwZTp4eSxhcmdzOlsiYXJpYS1sYWJlbGxlZGJ5Il19XSxlcnJvclN0YXRlTWF0Y2hlcjpbe3R5cGU6eHl9XSxzb3J0Q29tcGFyYXRvcjpbe3R5cGU6eHl9XX0pO2NsYXNzIEFHIGV4dGVuZHMgUkd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3Njcm9sbFRvcD0wLHRoaXMuX3RyaWdnZXJGb250U2l6ZT0wLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0idG9wIix0aGlzLl9vZmZzZXRZPTAsdGhpcy5fcG9zaXRpb25zPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImJvdHRvbSJ9XX1fY2FsY3VsYXRlT3ZlcmxheVNjcm9sbCh0LGUsbil7Y29uc3Qgbz10aGlzLl9nZXRJdGVtSGVpZ2h0KCk7cmV0dXJuIE1hdGgubWluKE1hdGgubWF4KDAsbyp0LWUrby8yKSxuKX1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoKS5waXBlKEllKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5wYW5lbE9wZW4mJih0aGlzLl90cmlnZ2VyUmVjdD10aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9KSl9b3Blbigpe3N1cGVyLl9jYW5PcGVuKCkmJihzdXBlci5vcGVuKCksdGhpcy5fdHJpZ2dlclJlY3Q9dGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fdHJpZ2dlckZvbnRTaXplPXBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUodGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQpLmZvbnRTaXplfHwiMCIpLHRoaXMuX2NhbGN1bGF0ZU92ZXJsYXlQb3NpdGlvbigpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKGJlKDEpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fdHJpZ2dlckZvbnRTaXplJiZ0aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYmJnRoaXMuX292ZXJsYXlEaXIub3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudCYmKHRoaXMuX292ZXJsYXlEaXIub3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5zdHlsZS5mb250U2l6ZT1gJHt0aGlzLl90cmlnZ2VyRm9udFNpemV9cHhgKX0pKSl9X3Njcm9sbE9wdGlvbkludG9WaWV3KHQpe2NvbnN0IGU9VkgodCx0aGlzLm9wdGlvbnMsdGhpcy5vcHRpb25Hcm91cHMpLG49dGhpcy5fZ2V0SXRlbUhlaWdodCgpO3RoaXMucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A9MD09PXQmJjE9PT1lPzA6akgoKHQrZSkqbixuLHRoaXMucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AsdkcpfV9wb3NpdGlvbmluZ1NldHRsZWQoKXt0aGlzLl9jYWxjdWxhdGVPdmVybGF5T2Zmc2V0WCgpLHRoaXMucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A9dGhpcy5fc2Nyb2xsVG9wfV9wYW5lbERvbmVBbmltYXRpbmcodCl7dGhpcy5wYW5lbE9wZW4/dGhpcy5fc2Nyb2xsVG9wPTA6KHRoaXMuX292ZXJsYXlEaXIub2Zmc2V0WD0wLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSxzdXBlci5fcGFuZWxEb25lQW5pbWF0aW5nKHQpfV9nZXRDaGFuZ2VFdmVudCh0KXtyZXR1cm4gbmV3IGtHKHRoaXMsdCl9X2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRYKCl7Y29uc3QgdD10aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpLG49dGhpcy5faXNSdGwoKSxvPXRoaXMubXVsdGlwbGU/NTY6MzI7bGV0IGk7aWYodGhpcy5tdWx0aXBsZSlpPTQwO2Vsc2UgaWYodGhpcy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nKWk9MTY7ZWxzZXtsZXQgdD10aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXXx8dGhpcy5vcHRpb25zLmZpcnN0O2k9dCYmdC5ncm91cD8zMjoxNn1ufHwoaSo9LTEpO2NvbnN0IGE9MC0odC5sZWZ0K2ktKG4/bzowKSkscj10LnJpZ2h0K2ktZS53aWR0aCsobj8wOm8pO2E+MD9pKz1hKzg6cj4wJiYoaS09cis4KSx0aGlzLl9vdmVybGF5RGlyLm9mZnNldFg9TWF0aC5yb3VuZChpKSx0aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX1fY2FsY3VsYXRlT3ZlcmxheU9mZnNldFkodCxlLG4pe2NvbnN0IG89dGhpcy5fZ2V0SXRlbUhlaWdodCgpLGk9KG8tdGhpcy5fdHJpZ2dlclJlY3QuaGVpZ2h0KS8yLGE9TWF0aC5mbG9vcih2Ry9vKTtsZXQgcjtyZXR1cm4gdGhpcy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPzA6KHI9MD09PXRoaXMuX3Njcm9sbFRvcD90Km86dGhpcy5fc2Nyb2xsVG9wPT09bj8odC0odGhpcy5fZ2V0SXRlbUNvdW50KCktYSkpKm8rKG8tKHRoaXMuX2dldEl0ZW1Db3VudCgpKm8tdkcpJW8pOmUtby8yLE1hdGgucm91bmQoLTEqci1pKSl9X2NoZWNrT3ZlcmxheVdpdGhpblZpZXdwb3J0KHQpe2NvbnN0IGU9dGhpcy5fZ2V0SXRlbUhlaWdodCgpLG49dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKSxvPXRoaXMuX3RyaWdnZXJSZWN0LnRvcC04LGk9bi5oZWlnaHQtdGhpcy5fdHJpZ2dlclJlY3QuYm90dG9tLTgsYT1NYXRoLmFicyh0aGlzLl9vZmZzZXRZKSxyPU1hdGgubWluKHRoaXMuX2dldEl0ZW1Db3VudCgpKmUsdkcpLWEtdGhpcy5fdHJpZ2dlclJlY3QuaGVpZ2h0O3I+aT90aGlzLl9hZGp1c3RQYW5lbFVwKHIsaSk6YT5vP3RoaXMuX2FkanVzdFBhbmVsRG93bihhLG8sdCk6dGhpcy5fdHJhbnNmb3JtT3JpZ2luPXRoaXMuX2dldE9yaWdpbkJhc2VkT25PcHRpb24oKX1fYWRqdXN0UGFuZWxVcCh0LGUpe2NvbnN0IG49TWF0aC5yb3VuZCh0LWUpO3RoaXMuX3Njcm9sbFRvcC09bix0aGlzLl9vZmZzZXRZLT1uLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj10aGlzLl9nZXRPcmlnaW5CYXNlZE9uT3B0aW9uKCksdGhpcy5fc2Nyb2xsVG9wPD0wJiYodGhpcy5fc2Nyb2xsVG9wPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0iNTAlIGJvdHRvbSAwcHgiKX1fYWRqdXN0UGFuZWxEb3duKHQsZSxuKXtjb25zdCBvPU1hdGgucm91bmQodC1lKTtpZih0aGlzLl9zY3JvbGxUb3ArPW8sdGhpcy5fb2Zmc2V0WSs9byx0aGlzLl90cmFuc2Zvcm1PcmlnaW49dGhpcy5fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpLHRoaXMuX3Njcm9sbFRvcD49bilyZXR1cm4gdGhpcy5fc2Nyb2xsVG9wPW4sdGhpcy5fb2Zmc2V0WT0wLHZvaWQodGhpcy5fdHJhbnNmb3JtT3JpZ2luPSI1MCUgdG9wIDBweCIpfV9jYWxjdWxhdGVPdmVybGF5UG9zaXRpb24oKXtjb25zdCB0PXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxlPXRoaXMuX2dldEl0ZW1Db3VudCgpLG49TWF0aC5taW4oZSp0LHZHKSxvPWUqdC1uO2xldCBpO2k9dGhpcy5lbXB0eT8wOk1hdGgubWF4KHRoaXMub3B0aW9ucy50b0FycmF5KCkuaW5kZXhPZih0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXSksMCksaSs9VkgoaSx0aGlzLm9wdGlvbnMsdGhpcy5vcHRpb25Hcm91cHMpO2NvbnN0IGE9bi8yO3RoaXMuX3Njcm9sbFRvcD10aGlzLl9jYWxjdWxhdGVPdmVybGF5U2Nyb2xsKGksYSxvKSx0aGlzLl9vZmZzZXRZPXRoaXMuX2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRZKGksYSxvKSx0aGlzLl9jaGVja092ZXJsYXlXaXRoaW5WaWV3cG9ydChvKX1fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpe2NvbnN0IHQ9dGhpcy5fZ2V0SXRlbUhlaWdodCgpLGU9KHQtdGhpcy5fdHJpZ2dlclJlY3QuaGVpZ2h0KS8yO3JldHVybmA1MCUgJHtNYXRoLmFicyh0aGlzLl9vZmZzZXRZKS1lK3QvMn1weCAwcHhgfV9nZXRJdGVtSGVpZ2h0KCl7cmV0dXJuIDMqdGhpcy5fdHJpZ2dlckZvbnRTaXplfV9nZXRJdGVtQ291bnQoKXtyZXR1cm4gdGhpcy5vcHRpb25zLmxlbmd0aCt0aGlzLm9wdGlvbkdyb3Vwcy5sZW5ndGh9fUFHLsm1ZmFjPShmdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbiBlKG4pe3JldHVybih0fHwodD1BYShBRykpKShufHxBRyl9fSkoKSxBRy7JtWNtcD10byh7dHlwZTpBRyxzZWxlY3RvcnM6W1sibWF0LXNlbGVjdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbiB0KGUsbixvKXtpZigxJmUmJigkaChvLERHLDUpLCRoKG8sQkgsNSksJGgobyx6SCw1KSksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi5jdXN0b21UcmlnZ2VyPXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLm9wdGlvbnM9dCksSmgodD10YigpKSYmKG4ub3B0aW9uR3JvdXBzPXQpfX0saG9zdEF0dHJzOlsicm9sZSIsImNvbWJvYm94IiwiYXJpYS1hdXRvY29tcGxldGUiLCJub25lIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsIm1hdC1zZWxlY3QiXSxob3N0VmFyczoyMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmVm0oImtleWRvd24iLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9oYW5kbGVLZXlkb3duKGUpfSkpKCJmb2N1cyIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fb25Gb2N1cygpfSkpKCJibHVyIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vbkJsdXIoKX0pKSwyJmUmJihqcCgiaWQiLG4uaWQpKCJ0YWJpbmRleCIsbi50YWJJbmRleCkoImFyaWEtY29udHJvbHMiLG4ucGFuZWxPcGVuP24uaWQrIi1wYW5lbCI6bnVsbCkoImFyaWEtZXhwYW5kZWQiLG4ucGFuZWxPcGVuKSgiYXJpYS1sYWJlbCIsbi5hcmlhTGFiZWx8fG51bGwpKCJhcmlhLXJlcXVpcmVkIixuLnJlcXVpcmVkLnRvU3RyaW5nKCkpKCJhcmlhLWRpc2FibGVkIixuLmRpc2FibGVkLnRvU3RyaW5nKCkpKCJhcmlhLWludmFsaWQiLG4uZXJyb3JTdGF0ZSkoImFyaWEtZGVzY3JpYmVkYnkiLG4uX2FyaWFEZXNjcmliZWRieXx8bnVsbCkoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsbi5fZ2V0QXJpYUFjdGl2ZURlc2NlbmRhbnQoKSkscHUoIm1hdC1zZWxlY3QtZGlzYWJsZWQiLG4uZGlzYWJsZWQpKCJtYXQtc2VsZWN0LWludmFsaWQiLG4uZXJyb3JTdGF0ZSkoIm1hdC1zZWxlY3QtcmVxdWlyZWQiLG4ucmVxdWlyZWQpKCJtYXQtc2VsZWN0LWVtcHR5IixuLmVtcHR5KSgibWF0LXNlbGVjdC1tdWx0aXBsZSIsbi5tdWx0aXBsZSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsdGFiSW5kZXg6InRhYkluZGV4In0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXSxmZWF0dXJlczpbcGcoW3twcm92aWRlOmJWLHVzZUV4aXN0aW5nOkFHfSx7cHJvdmlkZTpSSCx1c2VFeGlzdGluZzpBR31dKSx4cF0sbmdDb250ZW50U2VsZWN0b3JzOlsibWF0LXNlbGVjdC10cmlnZ2VyIiwiKiJdLGRlY2xzOjksdmFyczoxMixjb25zdHM6W1siY2RrLW92ZXJsYXktb3JpZ2luIiwiIiwxLCJtYXQtc2VsZWN0LXRyaWdnZXIiLDMsImNsaWNrIl0sWyJvcmlnaW4iLCJjZGtPdmVybGF5T3JpZ2luIiwidHJpZ2dlciIsIiJdLFsxLCJtYXQtc2VsZWN0LXZhbHVlIiwzLCJuZ1N3aXRjaCJdLFsiY2xhc3MiLCJtYXQtc2VsZWN0LXBsYWNlaG9sZGVyIG1hdC1zZWxlY3QtbWluLWxpbmUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJtYXQtc2VsZWN0LXZhbHVlLXRleHQiLDMsIm5nU3dpdGNoIiw0LCJuZ1N3aXRjaENhc2UiXSxbMSwibWF0LXNlbGVjdC1hcnJvdy13cmFwcGVyIl0sWzEsIm1hdC1zZWxlY3QtYXJyb3ciXSxbImNkay1jb25uZWN0ZWQtb3ZlcmxheSIsIiIsImNka0Nvbm5lY3RlZE92ZXJsYXlMb2NrUG9zaXRpb24iLCIiLCJjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3AiLCIiLCJjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcyIsImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIiwzLCJjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzcyIsImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSIsImNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5T3BlbiIsImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMiLCJjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGgiLCJjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WSIsImJhY2tkcm9wQ2xpY2siLCJhdHRhY2giLCJkZXRhY2giXSxbMSwibWF0LXNlbGVjdC1wbGFjZWhvbGRlciIsIm1hdC1zZWxlY3QtbWluLWxpbmUiXSxbMSwibWF0LXNlbGVjdC12YWx1ZS10ZXh0IiwzLCJuZ1N3aXRjaCJdLFsiY2xhc3MiLCJtYXQtc2VsZWN0LW1pbi1saW5lIiw0LCJuZ1N3aXRjaERlZmF1bHQiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm1hdC1zZWxlY3QtbWluLWxpbmUiXSxbMSwibWF0LXNlbGVjdC1wYW5lbC13cmFwIl0sWyJyb2xlIiwibGlzdGJveCIsInRhYmluZGV4IiwiLTEiLDMsIm5nQ2xhc3MiLCJrZXlkb3duIl0sWyJwYW5lbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoWm0oX0cpLFJtKDAsImRpdiIsMCwxKSxWbSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4udG9nZ2xlKCl9KSksUm0oMywiZGl2IiwyKSxRcCg0LGZHLDIsMSwic3BhbiIsMyksUXAoNSxiRywzLDIsInNwYW4iLDQpLEFtKCksUm0oNiwiZGl2Iiw1KSxUbSg3LCJkaXYiLDYpLEFtKCksQW0oKSxRcCg4LHlHLDQsMTQsIm5nLXRlbXBsYXRlIiw3KSxWbSgiYmFja2Ryb3BDbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5jbG9zZSgpfSkpKCJhdHRhY2giLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX29uQXR0YWNoZWQoKX0pKSgiZGV0YWNoIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLmNsb3NlKCl9KSkpLDImZSl7Y29uc3QgdD0kcCgxKTtqcCgiYXJpYS1vd25zIixuLnBhbmVsT3Blbj9uLmlkKyItcGFuZWwiOm51bGwpLHJjKDMpLERtKCJuZ1N3aXRjaCIsbi5lbXB0eSksanAoImlkIixuLl92YWx1ZUlkKSxyYygxKSxEbSgibmdTd2l0Y2hDYXNlIiwhMCkscmMoMSksRG0oIm5nU3dpdGNoQ2FzZSIsITEpLHJjKDMpLERtKCJjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzcyIsbi5fb3ZlcmxheVBhbmVsQ2xhc3MpKCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLG4uX3Njcm9sbFN0cmF0ZWd5KSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiIsdCkoImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIixuLnBhbmVsT3BlbikoImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMiLG4uX3Bvc2l0aW9ucykoImNka0Nvbm5lY3RlZE92ZXJsYXlNaW5XaWR0aCIsbnVsbD09bi5fdHJpZ2dlclJlY3Q/bnVsbDpuLl90cmlnZ2VyUmVjdC53aWR0aCkoImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRZIixuLl9vZmZzZXRZKX19LGRpcmVjdGl2ZXM6W2ZMLGZNLGdNLGdMLGhNLGFNXSxzdHlsZXM6WycubWF0LXNlbGVjdHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMDAlO291dGxpbmU6bm9uZX0ubWF0LXNlbGVjdC10cmlnZ2Vye2Rpc3BsYXk6aW5saW5lLXRhYmxlO2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC10cmlnZ2Vyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6ZGVmYXVsdH0ubWF0LXNlbGVjdC12YWx1ZXtkaXNwbGF5OnRhYmxlLWNlbGw7bWF4LXdpZHRoOjA7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC1zZWxlY3QtdmFsdWUtdGV4dHt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcntkaXNwbGF5OnRhYmxlLWNlbGw7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTI1JSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtaGFzLWxhYmVsIC5tYXQtc2VsZWN0Om5vdCgubWF0LXNlbGVjdC1lbXB0eSkgLm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWVtcHR5IC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1lbXB0eSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zaXRpb246bm9uZX0ubWF0LXNlbGVjdC1hcnJvd3t3aWR0aDowO2hlaWdodDowO2JvcmRlci1sZWZ0OjVweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci10b3A6NXB4IHNvbGlkO21hcmdpbjowIDRweH0ubWF0LXNlbGVjdC1wYW5lbC13cmFwe2ZsZXgtYmFzaXM6MTAwJX0ubWF0LXNlbGVjdC1wYW5lbHttaW4td2lkdGg6MTEycHg7bWF4LXdpZHRoOjI4MHB4O292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO21heC1oZWlnaHQ6MjU2cHg7bWluLXdpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo0cHg7b3V0bGluZTowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zZWxlY3QtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRncm91cC1sYWJlbCwubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbntmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDozZW07aGVpZ2h0OjNlbX0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtc2VsZWN0Om5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4e2N1cnNvcjpwb2ludGVyfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3dpZHRoOmNhbGMoMTAwJSAtIDE4cHgpfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246bm9uZTtkaXNwbGF5OmJsb2NrfS5tYXQtc2VsZWN0LW1pbi1saW5lOmVtcHR5OjpiZWZvcmV7Y29udGVudDoiICI7d2hpdGUtc3BhY2U6cHJlO3dpZHRoOjFweDtkaXNwbGF5OmlubGluZS1ibG9jaztvcGFjaXR5OjB9XG4nXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltDRy50cmFuc2Zvcm1QYW5lbFdyYXAsQ0cudHJhbnNmb3JtUGFuZWxdfSxjaGFuZ2VEZXRlY3Rpb246MH0pLEFHLnByb3BEZWNvcmF0b3JzPXtvcHRpb25zOlt7dHlwZTpZYSxhcmdzOltCSCx7ZGVzY2VuZGFudHM6ITB9XX1dLG9wdGlvbkdyb3Vwczpbe3R5cGU6WWEsYXJnczpbekgse2Rlc2NlbmRhbnRzOiEwfV19XSxjdXN0b21UcmlnZ2VyOlt7dHlwZTpxYSxhcmdzOltER119XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChBRyxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJtYXQtc2VsZWN0IixleHBvcnRBczoibWF0U2VsZWN0Iix0ZW1wbGF0ZTonXHgzYyEtLVxuIE5vdGUgdGhhdCB0aGUgc2VsZWN0IHRyaWdnZXIgZWxlbWVudCBzcGVjaWZpZXMgYGFyaWEtb3duc2AgcG9pbnRpbmcgdG8gdGhlIGxpc3Rib3ggb3ZlcmxheS5cbiBXaGlsZSBhcmlhLW93bnMgaXMgbm90IHJlcXVpcmVkIGZvciB0aGUgQVJJQSAxLjIgYHJvbGU9ImNvbWJvYm94ImAgaW50ZXJhY3Rpb24gcGF0dGVybixcbiBpdCBmaXhlcyBhbiBpc3N1ZSB3aXRoIFZvaWNlT3ZlciB3aGVuIHRoZSBzZWxlY3QgYXBwZWFycyBpbnNpZGUgb2YgYW4gYGFyaWEtbW9kZWw9InRydWUiYFxuIGVsZW1lbnQgKGUuZy4gYSBkaWFsb2cpLiBXaXRob3V0IHRoaXMgYGFyaWEtb3duc2AsIHRoZSBgYXJpYS1tb2RhbGAgb24gYSBkaWFsb2cgcHJldmVudHNcbiBWb2ljZU92ZXIgZnJvbSAic2VlaW5nIiB0aGUgc2VsZWN0XCdzIGxpc3Rib3ggb3ZlcmxheSBmb3IgYXJpYS1hY3RpdmVkZXNjZW5kYW50LlxuIFVzaW5nIGBhcmlhLW93bnNgIHJlLXBhcmVudHMgdGhlIHNlbGVjdCBvdmVybGF5IHNvIHRoYXQgaXQgd29ya3MgYWdhaW4uXG4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzIwNjk0XG4tLVx4M2VcbjxkaXYgY2RrLW92ZXJsYXktb3JpZ2luXG4gICAgIFthdHRyLmFyaWEtb3duc109InBhbmVsT3BlbiA/IGlkICsgXCctcGFuZWxcJyA6IG51bGwiXG4gICAgIGNsYXNzPSJtYXQtc2VsZWN0LXRyaWdnZXIiXG4gICAgIChjbGljayk9InRvZ2dsZSgpIlxuICAgICAjb3JpZ2luPSJjZGtPdmVybGF5T3JpZ2luIlxuICAgICAjdHJpZ2dlcj5cbiAgPGRpdiBjbGFzcz0ibWF0LXNlbGVjdC12YWx1ZSIgW25nU3dpdGNoXT0iZW1wdHkiIFthdHRyLmlkXT0iX3ZhbHVlSWQiPlxuICAgIDxzcGFuIGNsYXNzPSJtYXQtc2VsZWN0LXBsYWNlaG9sZGVyIG1hdC1zZWxlY3QtbWluLWxpbmUiICpuZ1N3aXRjaENhc2U9InRydWUiPnt7cGxhY2Vob2xkZXJ9fTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz0ibWF0LXNlbGVjdC12YWx1ZS10ZXh0IiAqbmdTd2l0Y2hDYXNlPSJmYWxzZSIgW25nU3dpdGNoXT0iISFjdXN0b21UcmlnZ2VyIj5cbiAgICAgIDxzcGFuIGNsYXNzPSJtYXQtc2VsZWN0LW1pbi1saW5lIiAqbmdTd2l0Y2hEZWZhdWx0Pnt7dHJpZ2dlclZhbHVlfX08L3NwYW4+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9Im1hdC1zZWxlY3QtdHJpZ2dlciIgKm5nU3dpdGNoQ2FzZT0idHJ1ZSI+PC9uZy1jb250ZW50PlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz0ibWF0LXNlbGVjdC1hcnJvdy13cmFwcGVyIj48ZGl2IGNsYXNzPSJtYXQtc2VsZWN0LWFycm93Ij48L2Rpdj48L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGVcbiAgY2RrLWNvbm5lY3RlZC1vdmVybGF5XG4gIGNka0Nvbm5lY3RlZE92ZXJsYXlMb2NrUG9zaXRpb25cbiAgY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wXG4gIGNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzPSJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzXT0iX292ZXJsYXlQYW5lbENsYXNzIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5XT0iX3Njcm9sbFN0cmF0ZWd5IlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09Im9yaWdpbiJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT0icGFuZWxPcGVuIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109Il9wb3NpdGlvbnMiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGhdPSJfdHJpZ2dlclJlY3Q/LndpZHRoISJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRZXT0iX29mZnNldFkiXG4gIChiYWNrZHJvcENsaWNrKT0iY2xvc2UoKSJcbiAgKGF0dGFjaCk9Il9vbkF0dGFjaGVkKCkiXG4gIChkZXRhY2gpPSJjbG9zZSgpIj5cbiAgPGRpdiBjbGFzcz0ibWF0LXNlbGVjdC1wYW5lbC13cmFwIiBbQHRyYW5zZm9ybVBhbmVsV3JhcF0+XG4gICAgPGRpdlxuICAgICAgI3BhbmVsXG4gICAgICByb2xlPSJsaXN0Ym94IlxuICAgICAgdGFiaW5kZXg9Ii0xIlxuICAgICAgY2xhc3M9Im1hdC1zZWxlY3QtcGFuZWwge3sgX2dldFBhbmVsVGhlbWUoKSB9fSJcbiAgICAgIFthdHRyLmlkXT0iaWQgKyBcJy1wYW5lbFwnIlxuICAgICAgW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdPSJtdWx0aXBsZSJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPSJhcmlhTGFiZWwgfHwgbnVsbCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09Il9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KCkiXG4gICAgICBbbmdDbGFzc109InBhbmVsQ2xhc3MiXG4gICAgICBbQHRyYW5zZm9ybVBhbmVsXT0ibXVsdGlwbGUgPyBcJ3Nob3dpbmctbXVsdGlwbGVcJyA6IFwnc2hvd2luZ1wnIlxuICAgICAgKEB0cmFuc2Zvcm1QYW5lbC5kb25lKT0iX3BhbmVsRG9uZUFuaW1hdGluZ1N0cmVhbS5uZXh0KCRldmVudC50b1N0YXRlKSJcbiAgICAgIFtzdHlsZS50cmFuc2Zvcm1PcmlnaW5dPSJfdHJhbnNmb3JtT3JpZ2luIlxuICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09Il90cmlnZ2VyRm9udFNpemUiXG4gICAgICAoa2V5ZG93bik9Il9oYW5kbGVLZXlkb3duKCRldmVudCkiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLGlucHV0czpbImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4Il0sZW5jYXBzdWxhdGlvbjpIbi5Ob25lLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2gsaG9zdDp7cm9sZToiY29tYm9ib3giLCJhcmlhLWF1dG9jb21wbGV0ZSI6Im5vbmUiLCJhcmlhLWhhc3BvcHVwIjoidHJ1ZSIsY2xhc3M6Im1hdC1zZWxlY3QiLCJbYXR0ci5pZF0iOiJpZCIsIlthdHRyLnRhYmluZGV4XSI6InRhYkluZGV4IiwiW2F0dHIuYXJpYS1jb250cm9sc10iOidwYW5lbE9wZW4gPyBpZCArICItcGFuZWwiIDogbnVsbCcsIlthdHRyLmFyaWEtZXhwYW5kZWRdIjoicGFuZWxPcGVuIiwiW2F0dHIuYXJpYS1sYWJlbF0iOiJhcmlhTGFiZWwgfHwgbnVsbCIsIlthdHRyLmFyaWEtcmVxdWlyZWRdIjoicmVxdWlyZWQudG9TdHJpbmcoKSIsIlthdHRyLmFyaWEtZGlzYWJsZWRdIjoiZGlzYWJsZWQudG9TdHJpbmcoKSIsIlthdHRyLmFyaWEtaW52YWxpZF0iOiJlcnJvclN0YXRlIiwiW2F0dHIuYXJpYS1kZXNjcmliZWRieV0iOiJfYXJpYURlc2NyaWJlZGJ5IHx8IG51bGwiLCJbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdIjoiX2dldEFyaWFBY3RpdmVEZXNjZW5kYW50KCkiLCJbY2xhc3MubWF0LXNlbGVjdC1kaXNhYmxlZF0iOiJkaXNhYmxlZCIsIltjbGFzcy5tYXQtc2VsZWN0LWludmFsaWRdIjoiZXJyb3JTdGF0ZSIsIltjbGFzcy5tYXQtc2VsZWN0LXJlcXVpcmVkXSI6InJlcXVpcmVkIiwiW2NsYXNzLm1hdC1zZWxlY3QtZW1wdHldIjoiZW1wdHkiLCJbY2xhc3MubWF0LXNlbGVjdC1tdWx0aXBsZV0iOiJtdWx0aXBsZSIsIihrZXlkb3duKSI6Il9oYW5kbGVLZXlkb3duKCRldmVudCkiLCIoZm9jdXMpIjoiX29uRm9jdXMoKSIsIihibHVyKSI6Il9vbkJsdXIoKSJ9LGFuaW1hdGlvbnM6W0NHLnRyYW5zZm9ybVBhbmVsV3JhcCxDRy50cmFuc2Zvcm1QYW5lbF0scHJvdmlkZXJzOlt7cHJvdmlkZTpiVix1c2VFeGlzdGluZzpBR30se3Byb3ZpZGU6UkgsdXNlRXhpc3Rpbmc6QUd9XSxzdHlsZXM6WycubWF0LXNlbGVjdHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMDAlO291dGxpbmU6bm9uZX0ubWF0LXNlbGVjdC10cmlnZ2Vye2Rpc3BsYXk6aW5saW5lLXRhYmxlO2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC10cmlnZ2Vyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6ZGVmYXVsdH0ubWF0LXNlbGVjdC12YWx1ZXtkaXNwbGF5OnRhYmxlLWNlbGw7bWF4LXdpZHRoOjA7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC1zZWxlY3QtdmFsdWUtdGV4dHt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcntkaXNwbGF5OnRhYmxlLWNlbGw7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTI1JSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtaGFzLWxhYmVsIC5tYXQtc2VsZWN0Om5vdCgubWF0LXNlbGVjdC1lbXB0eSkgLm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWVtcHR5IC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1lbXB0eSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zaXRpb246bm9uZX0ubWF0LXNlbGVjdC1hcnJvd3t3aWR0aDowO2hlaWdodDowO2JvcmRlci1sZWZ0OjVweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci10b3A6NXB4IHNvbGlkO21hcmdpbjowIDRweH0ubWF0LXNlbGVjdC1wYW5lbC13cmFwe2ZsZXgtYmFzaXM6MTAwJX0ubWF0LXNlbGVjdC1wYW5lbHttaW4td2lkdGg6MTEycHg7bWF4LXdpZHRoOjI4MHB4O292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO21heC1oZWlnaHQ6MjU2cHg7bWluLXdpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo0cHg7b3V0bGluZTowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zZWxlY3QtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRncm91cC1sYWJlbCwubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbntmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDozZW07aGVpZ2h0OjNlbX0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtc2VsZWN0Om5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4e2N1cnNvcjpwb2ludGVyfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3dpZHRoOmNhbGMoMTAwJSAtIDE4cHgpfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246bm9uZTtkaXNwbGF5OmJsb2NrfS5tYXQtc2VsZWN0LW1pbi1saW5lOmVtcHR5OjpiZWZvcmV7Y29udGVudDoiICI7d2hpdGUtc3BhY2U6cHJlO3dpZHRoOjFweDtkaXNwbGF5OmlubGluZS1ibG9jaztvcGFjaXR5OjB9XG4nXX1dfV0sbnVsbCx7b3B0aW9uczpbe3R5cGU6WWEsYXJnczpbQkgse2Rlc2NlbmRhbnRzOiEwfV19XSxvcHRpb25Hcm91cHM6W3t0eXBlOllhLGFyZ3M6W3pILHtkZXNjZW5kYW50czohMH1dfV0sY3VzdG9tVHJpZ2dlcjpbe3R5cGU6cWEsYXJnczpbREddfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIFRHe31mdW5jdGlvbiBORyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsInNwYW4iLDUpLFZtKCJjbGljayIsKGZ1bmN0aW9uIGUobil7aGkodCk7Y29uc3Qgbz1ZbSgpLiRpbXBsaWNpdDtyZXR1cm4gWW0oKS5vbkFjdGl2ZVBsdWdpblNlbGVjdGlvbihuLG8uaWQpfSkpLGt1KDEpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PVltKCkuJGltcGxpY2l0O2pwKCJkYXRhLXBsdWdpbi1pZCIsdC5pZCkscmMoMSksRHUoIiAiLHQudGFiX25hbWUsIiAiKX19ZnVuY3Rpb24gekcodCxlKXsxJnQmJihSbSgwLCJtYXQtdGFiIiwzKSxRcCgxLE5HLDIsMiwibmctdGVtcGxhdGUiLDQpLEFtKCkpLDImdCYmRG0oImRpc2FibGVkIiwhZS4kaW1wbGljaXQuZW5hYmxlZCl9ZnVuY3Rpb24gSUcodCxlKXtpZigxJnQmJihSbSgwLCJtYXQtb3B0aW9uIiw5KSxrdSgxKSxBbSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7RG0oInZhbHVlIix0LmlkKSxqcCgiZGF0YS1wbHVnaW4taWQiLHQuaWQpLHJjKDEpLER1KCIgIix0LnRhYl9uYW1lLCIgIil9fWZ1bmN0aW9uIEhHKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwibWF0LWZvcm0tZmllbGQiLDYpLFJtKDEsIm1hdC1sYWJlbCIpLGt1KDIsIkluYWN0aXZlIiksQW0oKSxSbSgzLCJtYXQtc2VsZWN0Iiw3KSxWbSgic2VsZWN0aW9uQ2hhbmdlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oKS5vbkRpc2FibGVkUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZChuKX0pKSxRcCg0LElHLDIsMywibWF0LW9wdGlvbiIsOCksQW0oKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgpO3JjKDMpLERtKCJ2YWx1ZSIsdC5zZWxlY3RlZFBsdWdpbikscmMoMSksRG0oIm5nRm9yT2YiLHQuZGlzYWJsZWRQbHVnaW5zKX19VEcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFRHKX0sVEcuybVtb2Q9YW8oe3R5cGU6VEd9KSxURy7JtWluaj12bih7cHJvdmlkZXJzOltQR10saW1wb3J0czpbW1dNLHlMLFVILFhJXSx5RixUVixVSCxYSV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFRHLFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbV00seUwsVUgsWEldLGV4cG9ydHM6W3lGLFRWLEFHLEVHLFVILFhJXSxkZWNsYXJhdGlvbnM6W0FHLEVHXSxwcm92aWRlcnM6W1BHXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKFRHLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bQUcsRUddfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1dNLHlMLFVILFhJXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVyblt5RixUVixBRyxFRyxVSCxYSV19fSk7Y2xhc3MgRkd7Y29uc3RydWN0b3IoKXt0aGlzLm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZD1uZXcgTGh9Z2V0QWN0aXZlUGx1Z2luSW5kZXgoKXtyZXR1cm4gdGhpcy5hY3RpdmVQbHVnaW5zLmZpbmRJbmRleCgoKHtpZDp0fSk9PnQ9PT10aGlzLnNlbGVjdGVkUGx1Z2luKSl9b25BY3RpdmVQbHVnaW5TZWxlY3Rpb24odCxlKXt0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoZSl9b25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQodCl7dGhpcy5vblBsdWdpblNlbGVjdGlvbkNoYW5nZWQuZW1pdCh0LnZhbHVlKX19RkcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEZHKX0sRkcuybVjbXA9dG8oe3R5cGU6Rkcsc2VsZWN0b3JzOltbInBsdWdpbi1zZWxlY3Rvci1jb21wb25lbnQiXV0saW5wdXRzOnthY3RpdmVQbHVnaW5zOiJhY3RpdmVQbHVnaW5zIixkaXNhYmxlZFBsdWdpbnM6ImRpc2FibGVkUGx1Z2lucyIsc2VsZWN0ZWRQbHVnaW46InNlbGVjdGVkUGx1Z2luIn0sb3V0cHV0czp7b25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkOiJvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQifSxkZWNsczozLHZhcnM6Myxjb25zdHM6W1siYW5pbWF0aW9uRHVyYXRpb24iLCIxMDBtcyIsMSwiYWN0aXZlLXBsdWdpbi1saXN0IiwzLCJzZWxlY3RlZEluZGV4Il0sWzMsImRpc2FibGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImZsb2F0TGFiZWwiLCJuZXZlciIsNCwibmdJZiJdLFszLCJkaXNhYmxlZCJdLFsibWF0LXRhYi1sYWJlbCIsIiJdLFsxLCJwbHVnaW4tbmFtZSIsMywiY2xpY2siXSxbImZsb2F0TGFiZWwiLCJuZXZlciJdLFszLCJ2YWx1ZSIsInNlbGVjdGlvbkNoYW5nZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJtYXQtdGFiLWdyb3VwIiwwKSxRcCgxLHpHLDIsMSwibWF0LXRhYiIsMSksQW0oKSxRcCgyLEhHLDUsMiwibWF0LWZvcm0tZmllbGQiLDIpKSwyJmUmJihEbSgic2VsZWN0ZWRJbmRleCIsbi5nZXRBY3RpdmVQbHVnaW5JbmRleCgpKSxyYygxKSxEbSgibmdGb3JPZiIsbi5hY3RpdmVQbHVnaW5zKSxyYygxKSxEbSgibmdJZiIsbi5kaXNhYmxlZFBsdWdpbnMubGVuZ3RoPjApKX0sZGlyZWN0aXZlczpbRkIsbE0sZE0sU0IsUEIsQVYsdlYsQUcsQkhdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2ZvbnQtc2l6ZToxNHB4O2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn1tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17ZmxleDowIDA7bWFyZ2luLXRvcDo1cHg7d2lkdGg6MTMwcHh9bWF0LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgbWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV0sIG1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjUwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LmFjdGl2ZS1wbHVnaW4tbGlzdFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24tc2VsZjpzdHJldGNoO2ZsZXg6MSAxIGF1dG87b3ZlcmZsb3c6aGlkZGVufS5wbHVnaW4tbmFtZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjAgMTJweDt3aWR0aDoxMDAlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QubWF0LXByaW1hcnkgLm1hdC10YWItbGlzdCAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1sYWJlbCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1saW5re2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouN31bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItbGFiZWwtYWN0aXZlLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1sYWJlbC1hY3RpdmV7b3BhY2l0eToxfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6Y3VycmVudENvbG9yfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWR7dmlzaWJpbGl0eTpoaWRkZW59W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1kaXNhYmxlZHtkaXNwbGF5Om5vbmV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWxpc3QsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItaGVhZGVyLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVscywgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1sYWJlbHtoZWlnaHQ6MTAwJX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVse21pbi13aWR0aDo0OHB4O3BhZGRpbmc6MDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1sYWJlbC1jb250ZW50e2hlaWdodDoxMDAlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGlzdHtwYWRkaW5nOjAgMzZweH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPjpmaXJzdC1jaGlsZCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1sYWJlbC1jb250YWluZXIsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Omxhc3QtY2hpbGR7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj46Zmlyc3QtY2hpbGQsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Lm1hdC10YWItbGFiZWwtY29udGFpbmVye2xlZnQ6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPjpsYXN0LWNoaWxkLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWxhYmVsLWNvbnRhaW5lcntyaWdodDowfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9J119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEZHLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InBsdWdpbi1zZWxlY3Rvci1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL3BsdWdpbl9zZWxlY3Rvcl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9wbHVnaW5fc2VsZWN0b3JfY29tcG9uZW50LmNzcyJdfV19XSxudWxsLHthY3RpdmVQbHVnaW5zOlt7dHlwZTp4eX1dLGRpc2FibGVkUGx1Z2luczpbe3R5cGU6eHl9XSxzZWxlY3RlZFBsdWdpbjpbe3R5cGU6eHl9XSxvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQ6W3t0eXBlOk95fV19KTtjb25zdCBMRz1adyh2UiwodD0+T2JqZWN0LmtleXModCkubWFwKChlPT5PYmplY3QuYXNzaWduKHt9LHtpZDplfSx0W2VdKSkpKSksQkc9WncoTEcsKHQ9PnQuZmlsdGVyKCh0PT4hdC5lbmFibGVkKSkpKTtjbGFzcyBWR3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5hY3RpdmVQbHVnaW4kPXRoaXMuc3RvcmUucGlwZShGdyhNUikpLHRoaXMucGx1Z2lucyQ9dGhpcy5zdG9yZS5waXBlKEZ3KExHKSksdGhpcy5kaXNhYmxlZFBsdWdpbnMkPXRoaXMuc3RvcmUucGlwZShGdyhCRykpfW9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goX0Uoe3BsdWdpbjp0fSkpfX1mdW5jdGlvbiBqRyh0LGUpe31WRy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VkcpKFNtKEl3KSl9LFZHLsm1Y21wPXRvKHt0eXBlOlZHLHNlbGVjdG9yczpbWyJwbHVnaW4tc2VsZWN0b3IiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywiYWN0aXZlUGx1Z2lucyIsImRpc2FibGVkUGx1Z2lucyIsInNlbGVjdGVkUGx1Z2luIiwib25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJwbHVnaW4tc2VsZWN0b3ItY29tcG9uZW50IiwwKSxWbSgib25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblBsdWdpblNlbGVjdGlvbkNoYW5nZShlKX0pKSxBaCgxLCJhc3luYyIpLEFoKDIsImFzeW5jIiksQWgoMywiYXN5bmMiKSxBbSgpKSwyJmUmJkRtKCJhY3RpdmVQbHVnaW5zIixUaCgxLDMsbi5wbHVnaW5zJCkpKCJkaXNhYmxlZFBsdWdpbnMiLFRoKDIsNSxuLmRpc2FibGVkUGx1Z2lucyQpKSgic2VsZWN0ZWRQbHVnaW4iLFRoKDMsNyxuLmFjdGl2ZVBsdWdpbiQpKX0sZGlyZWN0aXZlczpbRkddLHBpcGVzOlt3TV0sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChWRyxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJwbHVnaW4tc2VsZWN0b3IiLHRlbXBsYXRlOidcbiAgICA8cGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudFxuICAgICAgW2FjdGl2ZVBsdWdpbnNdPSJwbHVnaW5zJCB8IGFzeW5jIlxuICAgICAgW2Rpc2FibGVkUGx1Z2luc109ImRpc2FibGVkUGx1Z2lucyQgfCBhc3luYyJcbiAgICAgIFtzZWxlY3RlZFBsdWdpbl09ImFjdGl2ZVBsdWdpbiQgfCBhc3luYyJcbiAgICAgIChvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQpPSJvblBsdWdpblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpIlxuICAgID48L3BsdWdpbi1zZWxlY3Rvci1jb21wb25lbnQ+XG4gICd9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd31dfSksbnVsbCk7Y2xhc3MgVUd7Y29uc3RydWN0b3IoKXt0aGlzLnJvbGU9ImRpYWxvZyIsdGhpcy5wYW5lbENsYXNzPSIiLHRoaXMuaGFzQmFja2Ryb3A9ITAsdGhpcy5iYWNrZHJvcENsYXNzPSIiLHRoaXMuZGlzYWJsZUNsb3NlPSExLHRoaXMud2lkdGg9IiIsdGhpcy5oZWlnaHQ9IiIsdGhpcy5tYXhXaWR0aD0iODB2dyIsdGhpcy5kYXRhPW51bGwsdGhpcy5hcmlhRGVzY3JpYmVkQnk9bnVsbCx0aGlzLmFyaWFMYWJlbGxlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWw9bnVsbCx0aGlzLmF1dG9Gb2N1cz0hMCx0aGlzLnJlc3RvcmVGb2N1cz0hMCx0aGlzLmNsb3NlT25OYXZpZ2F0aW9uPSEwfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY29uc3QgR0c9e2RpYWxvZ0NvbnRhaW5lcjpueCgiZGlhbG9nQ29udGFpbmVyIixbcngoInZvaWQsIGV4aXQiLGF4KHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJzY2FsZSgwLjcpIn0pKSxyeCgiZW50ZXIiLGF4KHt0cmFuc2Zvcm06Im5vbmUifSkpLGx4KCIqID0+IGVudGVyIixveCgiMTUwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiLGF4KHt0cmFuc2Zvcm06Im5vbmUiLG9wYWNpdHk6MX0pKSksbHgoIiogPT4gdm9pZCwgKiA9PiBleGl0IixveCgiNzVtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkiLGF4KHtvcGFjaXR5OjB9KSkpXSl9OwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBXRygpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGF0dGFjaCBkaWFsb2cgY29udGVudCBhZnRlciBjb250ZW50IGlzIGFscmVhZHkgYXR0YWNoZWQiKX1jbGFzcyBZRyBleHRlbmRzIFBGe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhKXtzdXBlcigpLHRoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9mb2N1c1RyYXBGYWN0b3J5PWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9bix0aGlzLl9jb25maWc9aSx0aGlzLl9mb2N1c01vbml0b3I9YSx0aGlzLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQ9bmV3IExoLHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRGlhbG9nV2FzT3BlbmVkPW51bGwsdGhpcy5fY2xvc2VJbnRlcmFjdGlvblR5cGU9bnVsbCx0aGlzLmF0dGFjaERvbVBvcnRhbD10PT4odGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCkmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmV0coKSx0aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoRG9tUG9ydGFsKHQpKSx0aGlzLl9hcmlhTGFiZWxsZWRCeT1pLmFyaWFMYWJlbGxlZEJ5fHxudWxsLHRoaXMuX2RvY3VtZW50PW99X2luaXRpYWxpemVXaXRoQXR0YWNoZWRDb250ZW50KCl7dGhpcy5fc2V0dXBGb2N1c1RyYXAoKSx0aGlzLl9jYXB0dXJlUHJldmlvdXNseUZvY3VzZWRFbGVtZW50KCksdGhpcy5fZm9jdXNEaWFsb2dDb250YWluZXIoKX1hdHRhY2hDb21wb25lbnRQb3J0YWwodCl7cmV0dXJuIHRoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJldHKCksdGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbCh0KX1hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KXtyZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCkmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmV0coKSx0aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoVGVtcGxhdGVQb3J0YWwodCl9X3JlY2FwdHVyZUZvY3VzKCl7dGhpcy5fY29udGFpbnNGb2N1cygpfHwoIXRoaXMuX2NvbmZpZy5hdXRvRm9jdXN8fCF0aGlzLl9mb2N1c1RyYXAuZm9jdXNJbml0aWFsRWxlbWVudCgpKSYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9X3RyYXBGb2N1cygpe3RoaXMuX2NvbmZpZy5hdXRvRm9jdXM/dGhpcy5fZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKTp0aGlzLl9jb250YWluc0ZvY3VzKCl8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfV9yZXN0b3JlRm9jdXMoKXtjb25zdCB0PXRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRGlhbG9nV2FzT3BlbmVkO2lmKHRoaXMuX2NvbmZpZy5yZXN0b3JlRm9jdXMmJnQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmZvY3VzKXtjb25zdCBlPUZ6KCksbj10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7ZSYmZSE9PXRoaXMuX2RvY3VtZW50LmJvZHkmJmUhPT1uJiYhbi5jb250YWlucyhlKXx8KHRoaXMuX2ZvY3VzTW9uaXRvcj8odGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHQsdGhpcy5fY2xvc2VJbnRlcmFjdGlvblR5cGUpLHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlPW51bGwpOnQuZm9jdXMoKSl9dGhpcy5fZm9jdXNUcmFwJiZ0aGlzLl9mb2N1c1RyYXAuZGVzdHJveSgpfV9zZXR1cEZvY3VzVHJhcCgpe3RoaXMuX2ZvY3VzVHJhcD10aGlzLl9mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpfV9jYXB0dXJlUHJldmlvdXNseUZvY3VzZWRFbGVtZW50KCl7dGhpcy5fZG9jdW1lbnQmJih0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURpYWxvZ1dhc09wZW5lZD1GeigpKX1fZm9jdXNEaWFsb2dDb250YWluZXIoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfV9jb250YWluc0ZvY3VzKCl7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZT1GeigpO3JldHVybiB0PT09ZXx8dC5jb250YWlucyhlKX19WUcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFlHKShTbShoZyksU20ockkpLFNtKFVnKSxTbShaXyw4KSxTbShVRyksU20oU0kpKX0sWUcuybVkaXI9bG8oe3R5cGU6WUcsdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJlFoKERGLDcpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4uX3BvcnRhbE91dGxldD10LmZpcnN0KX19LGZlYXR1cmVzOlt4cF19KSxZRy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTpySX0se3R5cGU6VWd9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbWl9dfV19LHt0eXBlOlVHfSx7dHlwZTpTSX1dLFlHLnByb3BEZWNvcmF0b3JzPXtfcG9ydGFsT3V0bGV0Olt7dHlwZTpaYSxhcmdzOltERix7c3RhdGljOiEwfV19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChZRyxbe3R5cGU6Q3l9XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9LHt0eXBlOnJJfSx7dHlwZTpVZ30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltaX119XX0se3R5cGU6VUd9LHt0eXBlOlNJfV19KSx7X3BvcnRhbE91dGxldDpbe3R5cGU6WmEsYXJnczpbREYse3N0YXRpYzohMH1dfV19KTtjbGFzcyBxRyBleHRlbmRzIFlHe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9zdGF0ZT0iZW50ZXIifV9vbkFuaW1hdGlvbkRvbmUoe3RvU3RhdGU6dCx0b3RhbFRpbWU6ZX0peyJlbnRlciI9PT10Pyh0aGlzLl90cmFwRm9jdXMoKSx0aGlzLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQubmV4dCh7c3RhdGU6Im9wZW5lZCIsdG90YWxUaW1lOmV9KSk6ImV4aXQiPT09dCYmKHRoaXMuX3Jlc3RvcmVGb2N1cygpLHRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToiY2xvc2VkIix0b3RhbFRpbWU6ZX0pKX1fb25BbmltYXRpb25TdGFydCh7dG9TdGF0ZTp0LHRvdGFsVGltZTplfSl7ImVudGVyIj09PXQ/dGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLm5leHQoe3N0YXRlOiJvcGVuaW5nIix0b3RhbFRpbWU6ZX0pOiJleGl0IiE9PXQmJiJ2b2lkIiE9PXR8fHRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToiY2xvc2luZyIsdG90YWxUaW1lOmV9KX1fc3RhcnRFeGl0QW5pbWF0aW9uKCl7dGhpcy5fc3RhdGU9ImV4aXQiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfX1xRy7JtWZhYz0oZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4odHx8KHQ9QWEocUcpKSkobnx8cUcpfX0pKCkscUcuybVjbXA9dG8oe3R5cGU6cUcsc2VsZWN0b3JzOltbIm1hdC1kaWFsb2ctY29udGFpbmVyIl1dLGhvc3RBdHRyczpbInRhYmluZGV4IiwiLTEiLCJhcmlhLW1vZGFsIiwidHJ1ZSIsMSwibWF0LWRpYWxvZy1jb250YWluZXIiXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZqbSgiQGRpYWxvZ0NvbnRhaW5lci5zdGFydCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX29uQW5pbWF0aW9uU3RhcnQoZSl9KSkoIkBkaWFsb2dDb250YWluZXIuZG9uZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX29uQW5pbWF0aW9uRG9uZShlKX0pKSwyJmUmJihUdSgiaWQiLG4uX2lkKSxqcCgicm9sZSIsbi5fY29uZmlnLnJvbGUpKCJhcmlhLWxhYmVsbGVkYnkiLG4uX2NvbmZpZy5hcmlhTGFiZWw/bnVsbDpuLl9hcmlhTGFiZWxsZWRCeSkoImFyaWEtbGFiZWwiLG4uX2NvbmZpZy5hcmlhTGFiZWwpKCJhcmlhLWRlc2NyaWJlZGJ5IixuLl9jb25maWcuYXJpYURlc2NyaWJlZEJ5fHxudWxsKSxOdSgiQGRpYWxvZ0NvbnRhaW5lciIsbi5fc3RhdGUpKX0sZmVhdHVyZXM6W3hwXSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1siY2RrUG9ydGFsT3V0bGV0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJlFwKDAsakcsMCwwLCJuZy10ZW1wbGF0ZSIsMCl9LGRpcmVjdGl2ZXM6W0RGXSxzdHlsZXM6WyIubWF0LWRpYWxvZy1jb250YWluZXJ7ZGlzcGxheTpibG9jaztwYWRkaW5nOjI0cHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OmF1dG87b3V0bGluZTowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7bWluLWhlaWdodDppbmhlcml0O21heC1oZWlnaHQ6aW5oZXJpdH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZGlhbG9nLWNvbnRhaW5lcntvdXRsaW5lOnNvbGlkIDFweH0ubWF0LWRpYWxvZy1jb250ZW50e2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjAgLTI0cHg7cGFkZGluZzowIDI0cHg7bWF4LWhlaWdodDo2NXZoO292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9Lm1hdC1kaWFsb2ctdGl0bGV7bWFyZ2luOjAgMCAyMHB4O2Rpc3BsYXk6YmxvY2t9Lm1hdC1kaWFsb2ctYWN0aW9uc3twYWRkaW5nOjhweCAwO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDttaW4taGVpZ2h0OjUycHg7YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Y29udGVudC1ib3g7bWFyZ2luLWJvdHRvbTotMjRweH0ubWF0LWRpYWxvZy1hY3Rpb25zW2FsaWduPWVuZF17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtZGlhbG9nLWFjdGlvbnNbYWxpZ249Y2VudGVyXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1idXR0b24tYmFzZSsubWF0LWJ1dHRvbi1iYXNlLC5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1tZGMtYnV0dG9uLWJhc2UrLm1hdC1tZGMtYnV0dG9uLWJhc2V7bWFyZ2luLWxlZnQ6OHB4fVtkaXI9cnRsXSAubWF0LWRpYWxvZy1hY3Rpb25zIC5tYXQtYnV0dG9uLWJhc2UrLm1hdC1idXR0b24tYmFzZSxbZGlyPXJ0bF0gLm1hdC1kaWFsb2ctYWN0aW9ucyAubWF0LW1kYy1idXR0b24tYmFzZSsubWF0LW1kYy1idXR0b24tYmFzZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9XG4iXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltHRy5kaWFsb2dDb250YWluZXJdfX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgocUcsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWF0LWRpYWxvZy1jb250YWluZXIiLHRlbXBsYXRlOiI8bmctdGVtcGxhdGUgY2RrUG9ydGFsT3V0bGV0PjwvbmctdGVtcGxhdGU+XG4iLGVuY2Fwc3VsYXRpb246SG4uTm9uZSxjaGFuZ2VEZXRlY3Rpb246em4uRGVmYXVsdCxhbmltYXRpb25zOltHRy5kaWFsb2dDb250YWluZXJdLGhvc3Q6e2NsYXNzOiJtYXQtZGlhbG9nLWNvbnRhaW5lciIsdGFiaW5kZXg6Ii0xIiwiYXJpYS1tb2RhbCI6InRydWUiLCJbaWRdIjoiX2lkIiwiW2F0dHIucm9sZV0iOiJfY29uZmlnLnJvbGUiLCJbYXR0ci5hcmlhLWxhYmVsbGVkYnldIjoiX2NvbmZpZy5hcmlhTGFiZWwgPyBudWxsIDogX2FyaWFMYWJlbGxlZEJ5IiwiW2F0dHIuYXJpYS1sYWJlbF0iOiJfY29uZmlnLmFyaWFMYWJlbCIsIlthdHRyLmFyaWEtZGVzY3JpYmVkYnldIjoiX2NvbmZpZy5hcmlhRGVzY3JpYmVkQnkgfHwgbnVsbCIsIltAZGlhbG9nQ29udGFpbmVyXSI6Il9zdGF0ZSIsIihAZGlhbG9nQ29udGFpbmVyLnN0YXJ0KSI6Il9vbkFuaW1hdGlvblN0YXJ0KCRldmVudCkiLCIoQGRpYWxvZ0NvbnRhaW5lci5kb25lKSI6Il9vbkFuaW1hdGlvbkRvbmUoJGV2ZW50KSJ9LHN0eWxlczpbIi5tYXQtZGlhbG9nLWNvbnRhaW5lcntkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MjRweDtib3JkZXItcmFkaXVzOjRweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6YXV0bztvdXRsaW5lOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTttaW4taGVpZ2h0OmluaGVyaXQ7bWF4LWhlaWdodDppbmhlcml0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1kaWFsb2ctY29udGFpbmVye291dGxpbmU6c29saWQgMXB4fS5tYXQtZGlhbG9nLWNvbnRlbnR7ZGlzcGxheTpibG9jazttYXJnaW46MCAtMjRweDtwYWRkaW5nOjAgMjRweDttYXgtaGVpZ2h0OjY1dmg7b3ZlcmZsb3c6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0ubWF0LWRpYWxvZy10aXRsZXttYXJnaW46MCAwIDIwcHg7ZGlzcGxheTpibG9ja30ubWF0LWRpYWxvZy1hY3Rpb25ze3BhZGRpbmc6OHB4IDA7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO21pbi1oZWlnaHQ6NTJweDthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpjb250ZW50LWJveDttYXJnaW4tYm90dG9tOi0yNHB4fS5tYXQtZGlhbG9nLWFjdGlvbnNbYWxpZ249ZW5kXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9Lm1hdC1kaWFsb2ctYWN0aW9uc1thbGlnbj1jZW50ZXJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1hdC1kaWFsb2ctYWN0aW9ucyAubWF0LWJ1dHRvbi1iYXNlKy5tYXQtYnV0dG9uLWJhc2UsLm1hdC1kaWFsb2ctYWN0aW9ucyAubWF0LW1kYy1idXR0b24tYmFzZSsubWF0LW1kYy1idXR0b24tYmFzZXttYXJnaW4tbGVmdDo4cHh9W2Rpcj1ydGxdIC5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1idXR0b24tYmFzZSsubWF0LWJ1dHRvbi1iYXNlLFtkaXI9cnRsXSAubWF0LWRpYWxvZy1hY3Rpb25zIC5tYXQtbWRjLWJ1dHRvbi1iYXNlKy5tYXQtbWRjLWJ1dHRvbi1iYXNle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweH1cbiJdfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KbGV0IFpHPTA7Y2xhc3MgWEd7Y29uc3RydWN0b3IodCxlLG49Im1hdC1kaWFsb2ctIitaRysrKXt0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fY29udGFpbmVySW5zdGFuY2U9ZSx0aGlzLmlkPW4sdGhpcy5kaXNhYmxlQ2xvc2U9dGhpcy5fY29udGFpbmVySW5zdGFuY2UuX2NvbmZpZy5kaXNhYmxlQ2xvc2UsdGhpcy5fYWZ0ZXJPcGVuZWQ9bmV3IEksdGhpcy5fYWZ0ZXJDbG9zZWQ9bmV3IEksdGhpcy5fYmVmb3JlQ2xvc2VkPW5ldyBJLHRoaXMuX3N0YXRlPTAsZS5faWQ9bixlLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQucGlwZShjZSgodD0+Im9wZW5lZCI9PT10LnN0YXRlKSksYmUoMSkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9hZnRlck9wZW5lZC5uZXh0KCksdGhpcy5fYWZ0ZXJPcGVuZWQuY29tcGxldGUoKX0pKSxlLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQucGlwZShjZSgodD0+ImNsb3NlZCI9PT10LnN0YXRlKSksYmUoMSkpLnN1YnNjcmliZSgoKCk9PntjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VGYWxsYmFja1RpbWVvdXQpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSksdC5kZXRhY2htZW50cygpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9iZWZvcmVDbG9zZWQubmV4dCh0aGlzLl9yZXN1bHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX2FmdGVyQ2xvc2VkLm5leHQodGhpcy5fcmVzdWx0KSx0aGlzLl9hZnRlckNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuY29tcG9uZW50SW5zdGFuY2U9bnVsbCx0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKX0pKSx0LmtleWRvd25FdmVudHMoKS5waXBlKGNlKCh0PT50LmtleUNvZGU9PT11eiYmIXRoaXMuZGlzYWJsZUNsb3NlJiYhYnoodCkpKSkuc3Vic2NyaWJlKCh0PT57dC5wcmV2ZW50RGVmYXVsdCgpLEtHKHRoaXMsImtleWJvYXJkIil9KSksdC5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuZGlzYWJsZUNsb3NlP3RoaXMuX2NvbnRhaW5lckluc3RhbmNlLl9yZWNhcHR1cmVGb2N1cygpOktHKHRoaXMsIm1vdXNlIil9KSl9Y2xvc2UodCl7dGhpcy5fcmVzdWx0PXQsdGhpcy5fY29udGFpbmVySW5zdGFuY2UuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5waXBlKGNlKCh0PT4iY2xvc2luZyI9PT10LnN0YXRlKSksYmUoMSkpLnN1YnNjcmliZSgoZT0+e3RoaXMuX2JlZm9yZUNsb3NlZC5uZXh0KHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX292ZXJsYXlSZWYuZGV0YWNoQmFja2Ryb3AoKSx0aGlzLl9jbG9zZUZhbGxiYWNrVGltZW91dD1zZXRUaW1lb3V0KCgoKT0+dGhpcy5fZmluaXNoRGlhbG9nQ2xvc2UoKSksZS50b3RhbFRpbWUrMTAwKX0pKSx0aGlzLl9zdGF0ZT0xLHRoaXMuX2NvbnRhaW5lckluc3RhbmNlLl9zdGFydEV4aXRBbmltYXRpb24oKX1hZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLl9hZnRlck9wZW5lZH1hZnRlckNsb3NlZCgpe3JldHVybiB0aGlzLl9hZnRlckNsb3NlZH1iZWZvcmVDbG9zZWQoKXtyZXR1cm4gdGhpcy5fYmVmb3JlQ2xvc2VkfWJhY2tkcm9wQ2xpY2soKXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCl9a2V5ZG93bkV2ZW50cygpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmLmtleWRvd25FdmVudHMoKX11cGRhdGVQb3NpdGlvbih0KXtsZXQgZT10aGlzLl9nZXRQb3NpdGlvblN0cmF0ZWd5KCk7cmV0dXJuIHQmJih0LmxlZnR8fHQucmlnaHQpP3QubGVmdD9lLmxlZnQodC5sZWZ0KTplLnJpZ2h0KHQucmlnaHQpOmUuY2VudGVySG9yaXpvbnRhbGx5KCksdCYmKHQudG9wfHx0LmJvdHRvbSk/dC50b3A/ZS50b3AodC50b3ApOmUuYm90dG9tKHQuYm90dG9tKTplLmNlbnRlclZlcnRpY2FsbHkoKSx0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCksdGhpc311cGRhdGVTaXplKHQ9IiIsZT0iIil7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dCxoZWlnaHQ6ZX0pLHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSx0aGlzfWFkZFBhbmVsQ2xhc3ModCl7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWYuYWRkUGFuZWxDbGFzcyh0KSx0aGlzfXJlbW92ZVBhbmVsQ2xhc3ModCl7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWYucmVtb3ZlUGFuZWxDbGFzcyh0KSx0aGlzfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX3N0YXRlfV9maW5pc2hEaWFsb2dDbG9zZSgpe3RoaXMuX3N0YXRlPTIsdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCl9X2dldFBvc2l0aW9uU3RyYXRlZ3koKXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5wb3NpdGlvblN0cmF0ZWd5fX1mdW5jdGlvbiBLRyh0LGUsbil7cmV0dXJuIHZvaWQgMCE9PXQuX2NvbnRhaW5lckluc3RhbmNlJiYodC5fY29udGFpbmVySW5zdGFuY2UuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlPWUpLHQuY2xvc2Uobil9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IEpHPW5ldyBHYSgiTWF0RGlhbG9nRGF0YSIpLFFHPW5ldyBHYSgibWF0LWRpYWxvZy1kZWZhdWx0LW9wdGlvbnMiKSwkRz1uZXcgR2EoIm1hdC1kaWFsb2ctc2Nyb2xsLXN0cmF0ZWd5IiksdFc9e3Byb3ZpZGU6JEcsZGVwczpbcExdLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gZVcodCl7cmV0dXJuKCk9PnQuc2Nyb2xsU3RyYXRlZ2llcy5ibG9jaygpfX07Y2xhc3Mgbld7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzLGwpe3RoaXMuX292ZXJsYXk9dCx0aGlzLl9pbmplY3Rvcj1lLHRoaXMuX2RlZmF1bHRPcHRpb25zPW4sdGhpcy5fcGFyZW50RGlhbG9nPW8sdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1pLHRoaXMuX2RpYWxvZ1JlZkNvbnN0cnVjdG9yPXIsdGhpcy5fZGlhbG9nQ29udGFpbmVyVHlwZT1zLHRoaXMuX2RpYWxvZ0RhdGFUb2tlbj1sLHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWw9W10sdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbD1uZXcgSSx0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsPW5ldyBJLHRoaXMuX2FyaWFIaWRkZW5FbGVtZW50cz1uZXcgTWFwLHRoaXMuYWZ0ZXJBbGxDbG9zZWQ9UXQoKCgpPT50aGlzLm9wZW5EaWFsb2dzLmxlbmd0aD90aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpOnRoaXMuX2dldEFmdGVyQWxsQ2xvc2VkKCkucGlwZShOZSh2b2lkIDApKSkpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PWF9Z2V0IG9wZW5EaWFsb2dzKCl7cmV0dXJuIHRoaXMuX3BhcmVudERpYWxvZz90aGlzLl9wYXJlbnREaWFsb2cub3BlbkRpYWxvZ3M6dGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbH1nZXQgYWZ0ZXJPcGVuZWQoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5hZnRlck9wZW5lZDp0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsfV9nZXRBZnRlckFsbENsb3NlZCgpe2NvbnN0IHQ9dGhpcy5fcGFyZW50RGlhbG9nO3JldHVybiB0P3QuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbH1vcGVuKHQsZSl7aWYoKGU9KGZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHQpfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKGUsdGhpcy5fZGVmYXVsdE9wdGlvbnN8fG5ldyBVRykpLmlkJiZ0aGlzLmdldERpYWxvZ0J5SWQoZS5pZCkmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyBFcnJvcihgRGlhbG9nIHdpdGggaWQgIiR7ZS5pZH0iIGV4aXN0cyBhbHJlYWR5LiBUaGUgZGlhbG9nIGlkIG11c3QgYmUgdW5pcXVlLmApO2NvbnN0IG89dGhpcy5fY3JlYXRlT3ZlcmxheShlKSxpPXRoaXMuX2F0dGFjaERpYWxvZ0NvbnRhaW5lcihvLGUpLGE9dGhpcy5fYXR0YWNoRGlhbG9nQ29udGVudCh0LGksbyxlKTtyZXR1cm4gdGhpcy5vcGVuRGlhbG9ncy5sZW5ndGh8fHRoaXMuX2hpZGVOb25EaWFsb2dDb250ZW50RnJvbUFzc2lzdGl2ZVRlY2hub2xvZ3koKSx0aGlzLm9wZW5EaWFsb2dzLnB1c2goYSksYS5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKCk9PnRoaXMuX3JlbW92ZU9wZW5EaWFsb2coYSkpKSx0aGlzLmFmdGVyT3BlbmVkLm5leHQoYSksaS5faW5pdGlhbGl6ZVdpdGhBdHRhY2hlZENvbnRlbnQoKSxhfWNsb3NlQWxsKCl7dGhpcy5fY2xvc2VEaWFsb2dzKHRoaXMub3BlbkRpYWxvZ3MpfWdldERpYWxvZ0J5SWQodCl7cmV0dXJuIHRoaXMub3BlbkRpYWxvZ3MuZmluZCgoZT0+ZS5pZD09PXQpKX1uZ09uRGVzdHJveSgpe3RoaXMuX2Nsb3NlRGlhbG9ncyh0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsKSx0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsLmNvbXBsZXRlKCksdGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbC5jb21wbGV0ZSgpfV9jcmVhdGVPdmVybGF5KHQpe2NvbnN0IGU9dGhpcy5fZ2V0T3ZlcmxheUNvbmZpZyh0KTtyZXR1cm4gdGhpcy5fb3ZlcmxheS5jcmVhdGUoZSl9X2dldE92ZXJsYXlDb25maWcodCl7Y29uc3QgZT1uZXcgVkYoe3Bvc2l0aW9uU3RyYXRlZ3k6dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpLHNjcm9sbFN0cmF0ZWd5OnQuc2Nyb2xsU3RyYXRlZ3l8fHRoaXMuX3Njcm9sbFN0cmF0ZWd5KCkscGFuZWxDbGFzczp0LnBhbmVsQ2xhc3MsaGFzQmFja2Ryb3A6dC5oYXNCYWNrZHJvcCxkaXJlY3Rpb246dC5kaXJlY3Rpb24sbWluV2lkdGg6dC5taW5XaWR0aCxtaW5IZWlnaHQ6dC5taW5IZWlnaHQsbWF4V2lkdGg6dC5tYXhXaWR0aCxtYXhIZWlnaHQ6dC5tYXhIZWlnaHQsZGlzcG9zZU9uTmF2aWdhdGlvbjp0LmNsb3NlT25OYXZpZ2F0aW9ufSk7cmV0dXJuIHQuYmFja2Ryb3BDbGFzcyYmKGUuYmFja2Ryb3BDbGFzcz10LmJhY2tkcm9wQ2xhc3MpLGV9X2F0dGFjaERpYWxvZ0NvbnRhaW5lcih0LGUpe2NvbnN0IG49cnAuY3JlYXRlKHtwYXJlbnQ6ZSYmZS52aWV3Q29udGFpbmVyUmVmJiZlLnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3J8fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczpbe3Byb3ZpZGU6VUcsdXNlVmFsdWU6ZX1dfSksbz1uZXcgdkYodGhpcy5fZGlhbG9nQ29udGFpbmVyVHlwZSxlLnZpZXdDb250YWluZXJSZWYsbixlLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcik7cmV0dXJuIHQuYXR0YWNoKG8pLmluc3RhbmNlfV9hdHRhY2hEaWFsb2dDb250ZW50KHQsZSxuLG8pe2NvbnN0IGk9bmV3IHRoaXMuX2RpYWxvZ1JlZkNvbnN0cnVjdG9yKG4sZSxvLmlkKTtpZih0IGluc3RhbmNlb2YgWGcpZS5hdHRhY2hUZW1wbGF0ZVBvcnRhbChuZXcgeEYodCxudWxsLHskaW1wbGljaXQ6by5kYXRhLGRpYWxvZ1JlZjppfSkpO2Vsc2V7Y29uc3Qgbj10aGlzLl9jcmVhdGVJbmplY3RvcihvLGksZSksYT1lLmF0dGFjaENvbXBvbmVudFBvcnRhbChuZXcgdkYodCxvLnZpZXdDb250YWluZXJSZWYsbikpO2kuY29tcG9uZW50SW5zdGFuY2U9YS5pbnN0YW5jZX1yZXR1cm4gaS51cGRhdGVTaXplKG8ud2lkdGgsby5oZWlnaHQpLnVwZGF0ZVBvc2l0aW9uKG8ucG9zaXRpb24pLGl9X2NyZWF0ZUluamVjdG9yKHQsZSxuKXtjb25zdCBvPXQmJnQudmlld0NvbnRhaW5lclJlZiYmdC52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yLGk9W3twcm92aWRlOnRoaXMuX2RpYWxvZ0NvbnRhaW5lclR5cGUsdXNlVmFsdWU6bn0se3Byb3ZpZGU6dGhpcy5fZGlhbG9nRGF0YVRva2VuLHVzZVZhbHVlOnQuZGF0YX0se3Byb3ZpZGU6dGhpcy5fZGlhbG9nUmVmQ29uc3RydWN0b3IsdXNlVmFsdWU6ZX1dO3JldHVybiF0LmRpcmVjdGlvbnx8byYmby5nZXQoSEksbnVsbCxFbi5PcHRpb25hbCl8fGkucHVzaCh7cHJvdmlkZTpISSx1c2VWYWx1ZTp7dmFsdWU6dC5kaXJlY3Rpb24sY2hhbmdlOkV0KCl9fSkscnAuY3JlYXRlKHtwYXJlbnQ6b3x8dGhpcy5faW5qZWN0b3IscHJvdmlkZXJzOml9KX1fcmVtb3ZlT3BlbkRpYWxvZyh0KXtjb25zdCBlPXRoaXMub3BlbkRpYWxvZ3MuaW5kZXhPZih0KTtlPi0xJiYodGhpcy5vcGVuRGlhbG9ncy5zcGxpY2UoZSwxKSx0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aHx8KHRoaXMuX2FyaWFIaWRkZW5FbGVtZW50cy5mb3JFYWNoKCgodCxlKT0+e3Q/ZS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIix0KTplLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKX0pKSx0aGlzLl9hcmlhSGlkZGVuRWxlbWVudHMuY2xlYXIoKSx0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLm5leHQoKSkpfV9oaWRlTm9uRGlhbG9nQ29udGVudEZyb21Bc3Npc3RpdmVUZWNobm9sb2d5KCl7Y29uc3QgdD10aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKTtpZih0LnBhcmVudEVsZW1lbnQpe2NvbnN0IGU9dC5wYXJlbnRFbGVtZW50LmNoaWxkcmVuO2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+LTE7bi0tKXtsZXQgbz1lW25dO289PT10fHwiU0NSSVBUIj09PW8ubm9kZU5hbWV8fCJTVFlMRSI9PT1vLm5vZGVOYW1lfHxvLmhhc0F0dHJpYnV0ZSgiYXJpYS1saXZlIil8fCh0aGlzLl9hcmlhSGlkZGVuRWxlbWVudHMuc2V0KG8sby5nZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIikpLG8uc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSl9fX1fY2xvc2VEaWFsb2dzKHQpe2xldCBlPXQubGVuZ3RoO2Zvcig7ZS0tOyl0W2VdLmNsb3NlKCl9fW5XLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxuVykoU20ocEwpLFNtKHJwKSxTbSh2b2lkIDApLFNtKHZvaWQgMCksU20oUUYpLFNtKHZvaWQgMCksU20oUWEpLFNtKFFhKSxTbShHYSkpfSxuVy7JtWRpcj1sbyh7dHlwZTpuV30pLG5XLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6cEx9LHt0eXBlOnJwfSx7dHlwZTp2b2lkIDB9LHt0eXBlOnZvaWQgMH0se3R5cGU6UUZ9LHt0eXBlOnZvaWQgMH0se3R5cGU6UWF9LHt0eXBlOlFhfSx7dHlwZTpHYX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoblcsW3t0eXBlOkN5fV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnBMfSx7dHlwZTpycH0se3R5cGU6dm9pZCAwfSx7dHlwZTp2b2lkIDB9LHt0eXBlOlFGfSx7dHlwZTp2b2lkIDB9LHt0eXBlOlFhfSx7dHlwZTpRYX0se3R5cGU6R2F9XX0pLG51bGwpO2NsYXNzIG9XIGV4dGVuZHMgbld7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscil7c3VwZXIodCxlLG8sYSxyLGksWEcscUcsSkcpfX1vVy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8b1cpKHZyKHBMKSx2cihycCksdnIobEMsOCksdnIoUUcsOCksdnIoJEcpLHZyKG9XLDEyKSx2cihRRikpfSxvVy7JtXByb3Y9TW4oe3Rva2VuOm9XLGZhY3Rvcnk6b1cuybVmYWN9KSxvVy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnBMfSx7dHlwZTpycH0se3R5cGU6bEMsZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6VUcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1FHXX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbJEddfV19LHt0eXBlOm9XLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpFcn1dfSx7dHlwZTpRRn1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgob1csW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnBMfSx7dHlwZTpycH0se3R5cGU6bEMsZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6VUcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1FHXX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbJEddfV19LHt0eXBlOm9XLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpFcn1dfSx7dHlwZTpRRn1dfSksbnVsbCk7bGV0IGlXPTA7Y2xhc3MgYVd7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuZGlhbG9nUmVmPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2RpYWxvZz1uLHRoaXMudHlwZT0iYnV0dG9uIn1uZ09uSW5pdCgpe3RoaXMuZGlhbG9nUmVmfHwodGhpcy5kaWFsb2dSZWY9Y1codGhpcy5fZWxlbWVudFJlZix0aGlzLl9kaWFsb2cub3BlbkRpYWxvZ3MpKX1uZ09uQ2hhbmdlcyh0KXtjb25zdCBlPXQuX21hdERpYWxvZ0Nsb3NlfHx0Ll9tYXREaWFsb2dDbG9zZVJlc3VsdDtlJiYodGhpcy5kaWFsb2dSZXN1bHQ9ZS5jdXJyZW50VmFsdWUpfV9vbkJ1dHRvbkNsaWNrKHQpe0tHKHRoaXMuZGlhbG9nUmVmLDA9PT10LnNjcmVlblgmJjA9PT10LnNjcmVlblk/ImtleWJvYXJkIjoibW91c2UiLHRoaXMuZGlhbG9nUmVzdWx0KX19YVcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGFXKShTbShYRyw4KSxTbShoZyksU20ob1cpKX0sYVcuybVkaXI9bG8oe3R5cGU6YVcsc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbIiIsIm1hdERpYWxvZ0Nsb3NlIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJlZtKCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX29uQnV0dG9uQ2xpY2soZSl9KSksMiZlJiZqcCgiYXJpYS1sYWJlbCIsbi5hcmlhTGFiZWx8fG51bGwpKCJ0eXBlIixuLnR5cGUpfSxpbnB1dHM6e3R5cGU6InR5cGUiLGRpYWxvZ1Jlc3VsdDpbIm1hdC1kaWFsb2ctY2xvc2UiLCJkaWFsb2dSZXN1bHQiXSxhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sX21hdERpYWxvZ0Nsb3NlOlsibWF0RGlhbG9nQ2xvc2UiLCJfbWF0RGlhbG9nQ2xvc2UiXX0sZXhwb3J0QXM6WyJtYXREaWFsb2dDbG9zZSJdLGZlYXR1cmVzOltCb119KSxhVy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlhHLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOmhnfSx7dHlwZTpvV31dLGFXLnByb3BEZWNvcmF0b3JzPXthcmlhTGFiZWw6W3t0eXBlOnh5LGFyZ3M6WyJhcmlhLWxhYmVsIl19XSx0eXBlOlt7dHlwZTp4eX1dLGRpYWxvZ1Jlc3VsdDpbe3R5cGU6eHksYXJnczpbIm1hdC1kaWFsb2ctY2xvc2UiXX1dLF9tYXREaWFsb2dDbG9zZTpbe3R5cGU6eHksYXJnczpbIm1hdERpYWxvZ0Nsb3NlIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChhVyxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbbWF0LWRpYWxvZy1jbG9zZV0sIFttYXREaWFsb2dDbG9zZV0iLGV4cG9ydEFzOiJtYXREaWFsb2dDbG9zZSIsaG9zdDp7IihjbGljaykiOiJfb25CdXR0b25DbGljaygkZXZlbnQpIiwiW2F0dHIuYXJpYS1sYWJlbF0iOiJhcmlhTGFiZWwgfHwgbnVsbCIsIlthdHRyLnR5cGVdIjoidHlwZSJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WEcsZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6aGd9LHt0eXBlOm9XfV19KSx7dHlwZTpbe3R5cGU6eHl9XSxkaWFsb2dSZXN1bHQ6W3t0eXBlOnh5LGFyZ3M6WyJtYXQtZGlhbG9nLWNsb3NlIl19XSxhcmlhTGFiZWw6W3t0eXBlOnh5LGFyZ3M6WyJhcmlhLWxhYmVsIl19XSxfbWF0RGlhbG9nQ2xvc2U6W3t0eXBlOnh5LGFyZ3M6WyJtYXREaWFsb2dDbG9zZSJdfV19KTtjbGFzcyByV3tjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5fZGlhbG9nUmVmPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2RpYWxvZz1uLHRoaXMuaWQ9Im1hdC1kaWFsb2ctdGl0bGUtIitpVysrfW5nT25Jbml0KCl7dGhpcy5fZGlhbG9nUmVmfHwodGhpcy5fZGlhbG9nUmVmPWNXKHRoaXMuX2VsZW1lbnRSZWYsdGhpcy5fZGlhbG9nLm9wZW5EaWFsb2dzKSksdGhpcy5fZGlhbG9nUmVmJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e2NvbnN0IHQ9dGhpcy5fZGlhbG9nUmVmLl9jb250YWluZXJJbnN0YW5jZTt0JiYhdC5fYXJpYUxhYmVsbGVkQnkmJih0Ll9hcmlhTGFiZWxsZWRCeT10aGlzLmlkKX0pKX19clcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHJXKShTbShYRyw4KSxTbShoZyksU20ob1cpKX0sclcuybVkaXI9bG8oe3R5cGU6clcsc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIiIsIm1hdERpYWxvZ1RpdGxlIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWRpYWxvZy10aXRsZSJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJlR1KCJpZCIsbi5pZCl9LGlucHV0czp7aWQ6ImlkIn0sZXhwb3J0QXM6WyJtYXREaWFsb2dUaXRsZSJdfSksclcuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpYRyxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTpoZ30se3R5cGU6b1d9XSxyVy5wcm9wRGVjb3JhdG9ycz17aWQ6W3t0eXBlOnh5fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoclcsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW21hdC1kaWFsb2ctdGl0bGVdLCBbbWF0RGlhbG9nVGl0bGVdIixleHBvcnRBczoibWF0RGlhbG9nVGl0bGUiLGhvc3Q6e2NsYXNzOiJtYXQtZGlhbG9nLXRpdGxlIiwiW2lkXSI6ImlkIn19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYRyxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTpoZ30se3R5cGU6b1d9XX0pLHtpZDpbe3R5cGU6eHl9XX0pO2NsYXNzIHNXe31zVy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8c1cpfSxzVy7JtWRpcj1sbyh7dHlwZTpzVyxzZWxlY3RvcnM6W1siIiwibWF0LWRpYWxvZy1jb250ZW50IiwiIl0sWyJtYXQtZGlhbG9nLWNvbnRlbnQiXSxbIiIsIm1hdERpYWxvZ0NvbnRlbnQiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtZGlhbG9nLWNvbnRlbnQiXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoc1csW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIixob3N0OntjbGFzczoibWF0LWRpYWxvZy1jb250ZW50In19XX1dLG51bGwsbnVsbCk7Y2xhc3MgbFd7fWZ1bmN0aW9uIGNXKHQsZSl7bGV0IG49dC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7Zm9yKDtuJiYhbi5jbGFzc0xpc3QuY29udGFpbnMoIm1hdC1kaWFsb2ctY29udGFpbmVyIik7KW49bi5wYXJlbnRFbGVtZW50O3JldHVybiBuP2UuZmluZCgodD0+dC5pZD09PW4uaWQpKTpudWxsfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9sVy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bFcpfSxsVy7JtWRpcj1sbyh7dHlwZTpsVyxzZWxlY3RvcnM6W1siIiwibWF0LWRpYWxvZy1hY3Rpb25zIiwiIl0sWyJtYXQtZGlhbG9nLWFjdGlvbnMiXSxbIiIsIm1hdERpYWxvZ0FjdGlvbnMiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtZGlhbG9nLWFjdGlvbnMiXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgobFcsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW21hdC1kaWFsb2ctYWN0aW9uc10sIG1hdC1kaWFsb2ctYWN0aW9ucywgW21hdERpYWxvZ0FjdGlvbnNdIixob3N0OntjbGFzczoibWF0LWRpYWxvZy1hY3Rpb25zIn19XX1dLG51bGwsbnVsbCk7Y2xhc3MgZFd7fWRXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkVyl9LGRXLsm1bW9kPWFvKHt0eXBlOmRXfSksZFcuybVpbmo9dm4oe3Byb3ZpZGVyczpbb1csdFddLGltcG9ydHM6W1t5TCxSRixYSV0sWEldfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChkVyxbe3R5cGU6QXksYXJnczpbe2ltcG9ydHM6W3lMLFJGLFhJXSxleHBvcnRzOltxRyxhVyxyVyxzVyxsVyxYSV0sZGVjbGFyYXRpb25zOltxRyxhVyxyVyxsVyxzV10scHJvdmlkZXJzOltvVyx0V10sZW50cnlDb21wb25lbnRzOltxR119XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhkVyx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW3FHLGFXLHJXLGxXLHNXXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVyblt5TCxSRixYSV19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bcUcsYVcsclcsc1csbFcsWEldfX0pO2NsYXNzIHBXe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fZG9jdW1lbnQ9ZTtjb25zdCBuPXRoaXMuX3RleHRhcmVhPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIiksbz1uLnN0eWxlO28ucG9zaXRpb249ImZpeGVkIixvLnRvcD1vLm9wYWNpdHk9IjAiLG8ubGVmdD0iLTk5OWVtIixuLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksbi52YWx1ZT10LHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobil9Y29weSgpe2NvbnN0IHQ9dGhpcy5fdGV4dGFyZWE7bGV0IGU9ITE7dHJ5e2lmKHQpe2NvbnN0IG49dGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudDt0LnNlbGVjdCgpLHQuc2V0U2VsZWN0aW9uUmFuZ2UoMCx0LnZhbHVlLmxlbmd0aCksZT10aGlzLl9kb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpLG4mJm4uZm9jdXMoKX19Y2F0Y2godCl7fXJldHVybiBlfWRlc3Ryb3koKXtjb25zdCB0PXRoaXMuX3RleHRhcmVhO3QmJih0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0aGlzLl90ZXh0YXJlYT12b2lkIDApfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovY2xhc3MgbVd7Y29uc3RydWN0b3IodCl7dGhpcy5fZG9jdW1lbnQ9dH1jb3B5KHQpe2NvbnN0IGU9dGhpcy5iZWdpbkNvcHkodCksbj1lLmNvcHkoKTtyZXR1cm4gZS5kZXN0cm95KCksbn1iZWdpbkNvcHkodCl7cmV0dXJuIG5ldyBwVyh0LHRoaXMuX2RvY3VtZW50KX19bVcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG1XKSh2cihaXykpfSxtVy7JtXByb3Y9TW4oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgbVcodnIoWl8pKX0sdG9rZW46bVcscHJvdmlkZWRJbjoicm9vdCJ9KSxtVy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgobVcsW3t0eXBlOmltLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCB1Vz1uZXcgR2EoIkNES19DT1BZX1RPX0NMSVBCT0FSRF9DT05GSUciKTtjbGFzcyBmV3tjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5fY2xpcGJvYXJkPXQsdGhpcy5fbmdab25lPWUsdGhpcy50ZXh0PSIiLHRoaXMuYXR0ZW1wdHM9MSx0aGlzLmNvcGllZD1uZXcgTGgsdGhpcy5fcGVuZGluZz1uZXcgU2V0LG4mJm51bGwhPW4uYXR0ZW1wdHMmJih0aGlzLmF0dGVtcHRzPW4uYXR0ZW1wdHMpfWNvcHkodD10aGlzLmF0dGVtcHRzKXtpZih0PjEpe2xldCBlPXQ7Y29uc3Qgbj10aGlzLl9jbGlwYm9hcmQuYmVnaW5Db3B5KHRoaXMudGV4dCk7dGhpcy5fcGVuZGluZy5hZGQobik7Y29uc3Qgbz0oKT0+e2NvbnN0IHQ9bi5jb3B5KCk7dHx8IS0tZXx8dGhpcy5fZGVzdHJveWVkPyh0aGlzLl9jdXJyZW50VGltZW91dD1udWxsLHRoaXMuX3BlbmRpbmcuZGVsZXRlKG4pLG4uZGVzdHJveSgpLHRoaXMuY29waWVkLmVtaXQodCkpOnRoaXMuX2N1cnJlbnRUaW1lb3V0PXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PnNldFRpbWVvdXQobywxKSkpfTtvKCl9ZWxzZSB0aGlzLmNvcGllZC5lbWl0KHRoaXMuX2NsaXBib2FyZC5jb3B5KHRoaXMudGV4dCkpfW5nT25EZXN0cm95KCl7dGhpcy5fY3VycmVudFRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLl9jdXJyZW50VGltZW91dCksdGhpcy5fcGVuZGluZy5mb3JFYWNoKCh0PT50LmRlc3Ryb3koKSkpLHRoaXMuX3BlbmRpbmcuY2xlYXIoKSx0aGlzLl9kZXN0cm95ZWQ9ITB9fWZXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxmVykoU20obVcpLFNtKGFfKSxTbSh1Vyw4KSl9LGZXLsm1ZGlyPWxvKHt0eXBlOmZXLHNlbGVjdG9yczpbWyIiLCJjZGtDb3B5VG9DbGlwYm9hcmQiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJlZtKCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5jb3B5KCl9KSl9LGlucHV0czp7dGV4dDpbImNka0NvcHlUb0NsaXBib2FyZCIsInRleHQiXSxhdHRlbXB0czpbImNka0NvcHlUb0NsaXBib2FyZEF0dGVtcHRzIiwiYXR0ZW1wdHMiXX0sb3V0cHV0czp7Y29waWVkOiJjZGtDb3B5VG9DbGlwYm9hcmRDb3BpZWQifX0pLGZXLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6bVd9LHt0eXBlOmFffSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W3VXXX1dfV0sZlcucHJvcERlY29yYXRvcnM9e3RleHQ6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb3B5VG9DbGlwYm9hcmQiXX1dLGF0dGVtcHRzOlt7dHlwZTp4eSxhcmdzOlsiY2RrQ29weVRvQ2xpcGJvYXJkQXR0ZW1wdHMiXX1dLGNvcGllZDpbe3R5cGU6T3ksYXJnczpbImNka0NvcHlUb0NsaXBib2FyZENvcGllZCJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoZlcsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW2Nka0NvcHlUb0NsaXBib2FyZF0iLGhvc3Q6eyIoY2xpY2spIjoiY29weSgpIn19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTptV30se3R5cGU6YV99LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbdVddfV19XX0pLHt0ZXh0Olt7dHlwZTp4eSxhcmdzOlsiY2RrQ29weVRvQ2xpcGJvYXJkIl19XSxhdHRlbXB0czpbe3R5cGU6eHksYXJnczpbImNka0NvcHlUb0NsaXBib2FyZEF0dGVtcHRzIl19XSxjb3BpZWQ6W3t0eXBlOk95LGFyZ3M6WyJjZGtDb3B5VG9DbGlwYm9hcmRDb3BpZWQiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBnV3t9ZnVuY3Rpb24gaFcodCl7cmV0dXJuIEVycm9yKGBVbmFibGUgdG8gZmluZCBpY29uIHdpdGggdGhlIG5hbWUgIiR7dH0iYCl9ZnVuY3Rpb24gYlcodCl7cmV0dXJuIEVycm9yKGBUaGUgVVJMIHByb3ZpZGVkIHRvIE1hdEljb25SZWdpc3RyeSB3YXMgbm90IHRydXN0ZWQgYXMgYSByZXNvdXJjZSBVUkwgdmlhIEFuZ3VsYXIncyBEb21TYW5pdGl6ZXIuIEF0dGVtcHRlZCBVUkwgd2FzICIke3R9Ii5gKX1mdW5jdGlvbiB5Vyh0KXtyZXR1cm4gRXJyb3IoYFRoZSBsaXRlcmFsIHByb3ZpZGVkIHRvIE1hdEljb25SZWdpc3RyeSB3YXMgbm90IHRydXN0ZWQgYXMgc2FmZSBIVE1MIGJ5IEFuZ3VsYXIncyBEb21TYW5pdGl6ZXIuIEF0dGVtcHRlZCBsaXRlcmFsIHdhcyAiJHt0fSIuYCl9Z1cuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGdXKX0sZ1cuybVtb2Q9YW8oe3R5cGU6Z1d9KSxnVy7JtWluaj12bih7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChnVyxbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbZlddLGV4cG9ydHM6W2ZXXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKGdXLHtkZWNsYXJhdGlvbnM6W2ZXXSxleHBvcnRzOltmV119KTtjbGFzcyBfV3tjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy51cmw9dCx0aGlzLnN2Z1RleHQ9ZSx0aGlzLm9wdGlvbnM9bn19Y2xhc3MgQ1d7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5faHR0cENsaWVudD10LHRoaXMuX3Nhbml0aXplcj1lLHRoaXMuX2Vycm9ySGFuZGxlcj1vLHRoaXMuX3N2Z0ljb25Db25maWdzPW5ldyBNYXAsdGhpcy5faWNvblNldENvbmZpZ3M9bmV3IE1hcCx0aGlzLl9jYWNoZWRJY29uc0J5VXJsPW5ldyBNYXAsdGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXM9bmV3IE1hcCx0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXM9bmV3IE1hcCx0aGlzLl9yZXNvbHZlcnM9W10sdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzcz0ibWF0ZXJpYWwtaWNvbnMiLHRoaXMuX2RvY3VtZW50PW59YWRkU3ZnSWNvbih0LGUsbil7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvbkluTmFtZXNwYWNlKCIiLHQsZSxuKX1hZGRTdmdJY29uTGl0ZXJhbCh0LGUsbil7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvbkxpdGVyYWxJbk5hbWVzcGFjZSgiIix0LGUsbil9YWRkU3ZnSWNvbkluTmFtZXNwYWNlKHQsZSxuLG8pe3JldHVybiB0aGlzLl9hZGRTdmdJY29uQ29uZmlnKHQsZSxuZXcgX1cobixudWxsLG8pKX1hZGRTdmdJY29uUmVzb2x2ZXIodCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVycy5wdXNoKHQpLHRoaXN9YWRkU3ZnSWNvbkxpdGVyYWxJbk5hbWVzcGFjZSh0LGUsbixvKXtjb25zdCBpPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShBcy5IVE1MLG4pO2lmKCFpKXRocm93IHlXKG4pO3JldHVybiB0aGlzLl9hZGRTdmdJY29uQ29uZmlnKHQsZSxuZXcgX1coIiIsaSxvKSl9YWRkU3ZnSWNvblNldCh0LGUpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25TZXRJbk5hbWVzcGFjZSgiIix0LGUpfWFkZFN2Z0ljb25TZXRMaXRlcmFsKHQsZSl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvblNldExpdGVyYWxJbk5hbWVzcGFjZSgiIix0LGUpfWFkZFN2Z0ljb25TZXRJbk5hbWVzcGFjZSh0LGUsbil7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25TZXRDb25maWcodCxuZXcgX1coZSxudWxsLG4pKX1hZGRTdmdJY29uU2V0TGl0ZXJhbEluTmFtZXNwYWNlKHQsZSxuKXtjb25zdCBvPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShBcy5IVE1MLGUpO2lmKCFvKXRocm93IHlXKGUpO3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKHQsbmV3IF9XKCIiLG8sbikpfXJlZ2lzdGVyRm9udENsYXNzQWxpYXModCxlPXQpe3JldHVybiB0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXMuc2V0KHQsZSksdGhpc31jbGFzc05hbWVGb3JGb250QWxpYXModCl7cmV0dXJuIHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5nZXQodCl8fHR9c2V0RGVmYXVsdEZvbnRTZXRDbGFzcyh0KXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzcz10LHRoaXN9Z2V0RGVmYXVsdEZvbnRTZXRDbGFzcygpe3JldHVybiB0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzfWdldFN2Z0ljb25Gcm9tVXJsKHQpe2NvbnN0IGU9dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKEFzLlJFU09VUkNFX1VSTCx0KTtpZighZSl0aHJvdyBiVyh0KTtjb25zdCBuPXRoaXMuX2NhY2hlZEljb25zQnlVcmwuZ2V0KGUpO3JldHVybiBuP0V0KE1XKG4pKTp0aGlzLl9sb2FkU3ZnSWNvbkZyb21Db25maWcobmV3IF9XKHQsbnVsbCkpLnBpcGUoRmUoKHQ9PnRoaXMuX2NhY2hlZEljb25zQnlVcmwuc2V0KGUsdCkpKSxJdCgodD0+TVcodCkpKSl9Z2V0TmFtZWRTdmdJY29uKHQsZT0iIil7Y29uc3Qgbj12VyhlLHQpO2xldCBvPXRoaXMuX3N2Z0ljb25Db25maWdzLmdldChuKTtpZihvKXJldHVybiB0aGlzLl9nZXRTdmdGcm9tQ29uZmlnKG8pO2lmKG89dGhpcy5fZ2V0SWNvbkNvbmZpZ0Zyb21SZXNvbHZlcnMoZSx0KSxvKXJldHVybiB0aGlzLl9zdmdJY29uQ29uZmlncy5zZXQobixvKSx0aGlzLl9nZXRTdmdGcm9tQ29uZmlnKG8pO2NvbnN0IGk9dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KGUpO3JldHVybiBpP3RoaXMuX2dldFN2Z0Zyb21JY29uU2V0Q29uZmlncyh0LGkpOlJ0KGhXKG4pKX1uZ09uRGVzdHJveSgpe3RoaXMuX3Jlc29sdmVycz1bXSx0aGlzLl9zdmdJY29uQ29uZmlncy5jbGVhcigpLHRoaXMuX2ljb25TZXRDb25maWdzLmNsZWFyKCksdGhpcy5fY2FjaGVkSWNvbnNCeVVybC5jbGVhcigpfV9nZXRTdmdGcm9tQ29uZmlnKHQpe3JldHVybiB0LnN2Z1RleHQ/RXQoTVcodGhpcy5fc3ZnRWxlbWVudEZyb21Db25maWcodCkpKTp0aGlzLl9sb2FkU3ZnSWNvbkZyb21Db25maWcodCkucGlwZShJdCgodD0+TVcodCkpKSl9X2dldFN2Z0Zyb21JY29uU2V0Q29uZmlncyh0LGUpe2NvbnN0IG49dGhpcy5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQodCxlKTtyZXR1cm4gbj9FdChuKTokdChlLmZpbHRlcigodD0+IXQuc3ZnVGV4dCkpLm1hcCgodD0+dGhpcy5fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnKHQpLnBpcGUocGUoKGU9Pntjb25zdCBuPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShBcy5SRVNPVVJDRV9VUkwsdC51cmwpO3JldHVybiB0aGlzLl9lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IobmV3IEVycm9yKGBMb2FkaW5nIGljb24gc2V0IFVSTDogJHtufSBmYWlsZWQ6ICR7ZS5tZXNzYWdlfWApKSxFdChudWxsKX0pKSkpKSkucGlwZShJdCgoKCk9Pntjb25zdCBuPXRoaXMuX2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KHQsZSk7aWYoIW4pdGhyb3cgaFcodCk7cmV0dXJuIG59KSkpfV9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldCh0LGUpe2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+PTA7bi0tKXtjb25zdCBvPWVbbl07aWYoby5zdmdUZXh0JiZvLnN2Z1RleHQuaW5kZXhPZih0KT4tMSl7Y29uc3QgZT10aGlzLl9zdmdFbGVtZW50RnJvbUNvbmZpZyhvKSxuPXRoaXMuX2V4dHJhY3RTdmdJY29uRnJvbVNldChlLHQsby5vcHRpb25zKTtpZihuKXJldHVybiBufX1yZXR1cm4gbnVsbH1fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKHQpe3JldHVybiB0aGlzLl9mZXRjaEljb24odCkucGlwZShGZSgoZT0+dC5zdmdUZXh0PWUpKSxJdCgoKCk9PnRoaXMuX3N2Z0VsZW1lbnRGcm9tQ29uZmlnKHQpKSkpfV9sb2FkU3ZnSWNvblNldEZyb21Db25maWcodCl7cmV0dXJuIHQuc3ZnVGV4dD9FdChudWxsKTp0aGlzLl9mZXRjaEljb24odCkucGlwZShGZSgoZT0+dC5zdmdUZXh0PWUpKSl9X2V4dHJhY3RTdmdJY29uRnJvbVNldCh0LGUsbil7Y29uc3Qgbz10LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtlfSJdYCk7aWYoIW8pcmV0dXJuIG51bGw7Y29uc3QgaT1vLmNsb25lTm9kZSghMCk7aWYoaS5yZW1vdmVBdHRyaWJ1dGUoImlkIiksInN2ZyI9PT1pLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoaSxuKTtpZigic3ltYm9sIj09PWkubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyh0aGlzLl90b1N2Z0VsZW1lbnQoaSksbik7Y29uc3QgYT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZygiPHN2Zz48L3N2Zz4iKTtyZXR1cm4gYS5hcHBlbmRDaGlsZChpKSx0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGEsbil9X3N2Z0VsZW1lbnRGcm9tU3RyaW5nKHQpe2NvbnN0IGU9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7ZS5pbm5lckhUTUw9dDtjb25zdCBuPWUucXVlcnlTZWxlY3Rvcigic3ZnIik7aWYoIW4pdGhyb3cgRXJyb3IoIjxzdmc+IHRhZyBub3QgZm91bmQiKTtyZXR1cm4gbn1fdG9TdmdFbGVtZW50KHQpe2NvbnN0IGU9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcoIjxzdmc+PC9zdmc+Iiksbj10LmF0dHJpYnV0ZXM7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kyspe2NvbnN0e25hbWU6byx2YWx1ZTppfT1uW3RdOyJpZCIhPT1vJiZlLnNldEF0dHJpYnV0ZShvLGkpfWZvcihsZXQgbj0wO248dC5jaGlsZE5vZGVzLmxlbmd0aDtuKyspdC5jaGlsZE5vZGVzW25dLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFJiZlLmFwcGVuZENoaWxkKHQuY2hpbGROb2Rlc1tuXS5jbG9uZU5vZGUoITApKTtyZXR1cm4gZX1fc2V0U3ZnQXR0cmlidXRlcyh0LGUpe3JldHVybiB0LnNldEF0dHJpYnV0ZSgiZml0IiwiIiksdC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjEwMCUiKSx0LnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxMDAlIiksdC5zZXRBdHRyaWJ1dGUoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCBtZWV0IiksdC5zZXRBdHRyaWJ1dGUoImZvY3VzYWJsZSIsImZhbHNlIiksZSYmZS52aWV3Qm94JiZ0LnNldEF0dHJpYnV0ZSgidmlld0JveCIsZS52aWV3Qm94KSx0fV9mZXRjaEljb24odCl7dmFyIGU7Y29uc3R7dXJsOm4sb3B0aW9uczpvfT10LGk9bnVsbCE9PShlPW51bGw9PW8/dm9pZCAwOm8ud2l0aENyZWRlbnRpYWxzKSYmdm9pZCAwIT09ZSYmZTtpZighdGhpcy5faHR0cENsaWVudCl0aHJvdyhmdW5jdGlvbiBhKCl7cmV0dXJuIEVycm9yKCJDb3VsZCBub3QgZmluZCBIdHRwQ2xpZW50IHByb3ZpZGVyIGZvciB1c2Ugd2l0aCBBbmd1bGFyIE1hdGVyaWFsIGljb25zLiBQbGVhc2UgaW5jbHVkZSB0aGUgSHR0cENsaWVudE1vZHVsZSBmcm9tIEBhbmd1bGFyL2NvbW1vbi9odHRwIGluIHlvdXIgYXBwIGltcG9ydHMuIil9KSgpO2lmKG51bGw9PW4pdGhyb3cgRXJyb3IoYENhbm5vdCBmZXRjaCBpY29uIGZyb20gVVJMICIke259Ii5gKTtjb25zdCByPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShBcy5SRVNPVVJDRV9VUkwsbik7aWYoIXIpdGhyb3cgYlcobik7Y29uc3Qgcz10aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5nZXQocik7aWYocylyZXR1cm4gcztjb25zdCBsPXRoaXMuX2h0dHBDbGllbnQuZ2V0KHIse3Jlc3BvbnNlVHlwZToidGV4dCIsd2l0aENyZWRlbnRpYWxzOml9KS5waXBlKChmdW5jdGlvbiBjKHQpe3JldHVybiBSKChmdW5jdGlvbihlLG4pe3RyeXtlLnN1YnNjcmliZShuKX1maW5hbGx5e24uYWRkKHQpfX0pKX0pKCgoKT0+dGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuZGVsZXRlKHIpKSksRWUoKSk7cmV0dXJuIHRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLnNldChyLGwpLGx9X2FkZFN2Z0ljb25Db25maWcodCxlLG4pe3JldHVybiB0aGlzLl9zdmdJY29uQ29uZmlncy5zZXQodlcodCxlKSxuKSx0aGlzfV9hZGRTdmdJY29uU2V0Q29uZmlnKHQsZSl7Y29uc3Qgbj10aGlzLl9pY29uU2V0Q29uZmlncy5nZXQodCk7cmV0dXJuIG4/bi5wdXNoKGUpOnRoaXMuX2ljb25TZXRDb25maWdzLnNldCh0LFtlXSksdGhpc31fc3ZnRWxlbWVudEZyb21Db25maWcodCl7aWYoIXQuc3ZnRWxlbWVudCl7Y29uc3QgZT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyh0LnN2Z1RleHQpO3RoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoZSx0Lm9wdGlvbnMpLHQuc3ZnRWxlbWVudD1lfXJldHVybiB0LnN2Z0VsZW1lbnR9X2dldEljb25Db25maWdGcm9tUmVzb2x2ZXJzKHQsZSl7Zm9yKGxldCBvPTA7bzx0aGlzLl9yZXNvbHZlcnMubGVuZ3RoO28rKyl7Y29uc3QgaT10aGlzLl9yZXNvbHZlcnNbb10oZSx0KTtpZihpKXJldHVybihuPWkpLnVybCYmbi5vcHRpb25zP25ldyBfVyhpLnVybCxudWxsLGkub3B0aW9ucyk6bmV3IF9XKGksbnVsbCl9dmFyIG47Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL319ZnVuY3Rpb24gTVcodCl7cmV0dXJuIHQuY2xvbmVOb2RlKCEwKX1mdW5jdGlvbiB2Vyh0LGUpe3JldHVybiB0KyI6IitlfUNXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxDVykodnIoUEQsOCksdnIoenYpLHZyKFpfLDgpLHZyKFpzKSl9LENXLsm1cHJvdj1Nbih7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBDVyh2cihQRCw4KSx2cih6diksdnIoWl8sOCksdnIoWnMpKX0sdG9rZW46Q1cscHJvdmlkZWRJbjoicm9vdCJ9KSxDVy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlBELGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOnp2fSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1pfXX1dfSx7dHlwZTpac31dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoQ1csW3t0eXBlOmltLGFyZ3M6W3twcm92aWRlZEluOiJyb290In1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlBELGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOnp2fSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1pfXX1dfSx7dHlwZTpac31dfSksbnVsbCksbmV3IFNyLG5ldyBFcixuZXcgU3IsbmV3IFNyO2NvbnN0IHhXPUpJKGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH19KSxPVz1uZXcgR2EoIm1hdC1pY29uLWxvY2F0aW9uIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBQVygpe2NvbnN0IHQ9T3IoWl8pLGU9dD90LmxvY2F0aW9uOm51bGw7cmV0dXJue2dldFBhdGhuYW1lOigpPT5lP2UucGF0aG5hbWUrZS5zZWFyY2g6IiJ9fX0pLHdXPVsiY2xpcC1wYXRoIiwiY29sb3ItcHJvZmlsZSIsInNyYyIsImN1cnNvciIsImZpbGwiLCJmaWx0ZXIiLCJtYXJrZXIiLCJtYXJrZXItc3RhcnQiLCJtYXJrZXItbWlkIiwibWFya2VyLWVuZCIsIm1hc2siLCJzdHJva2UiXSxrVz13Vy5tYXAoKHQ9PmBbJHt0fV1gKSkuam9pbigiLCAiKSxTVz0vXnVybFwoWyciXT8jKC4qPylbJyJdP1wpJC87Y2xhc3MgRFcgZXh0ZW5kcyB4V3tjb25zdHJ1Y3Rvcih0LGUsbixvLGkpe3N1cGVyKHQpLHRoaXMuX2ljb25SZWdpc3RyeT1lLHRoaXMuX2xvY2F0aW9uPW8sdGhpcy5fZXJyb3JIYW5kbGVyPWksdGhpcy5faW5saW5lPSExLHRoaXMuX2N1cnJlbnRJY29uRmV0Y2g9bS5FTVBUWSxufHx0Lm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKX1nZXQgaW5saW5lKCl7cmV0dXJuIHRoaXMuX2lubGluZX1zZXQgaW5saW5lKHQpe3RoaXMuX2lubGluZT15eih0KX1nZXQgc3ZnSWNvbigpe3JldHVybiB0aGlzLl9zdmdJY29ufXNldCBzdmdJY29uKHQpe3QhPT10aGlzLl9zdmdJY29uJiYodD90aGlzLl91cGRhdGVTdmdJY29uKHQpOnRoaXMuX3N2Z0ljb24mJnRoaXMuX2NsZWFyU3ZnRWxlbWVudCgpLHRoaXMuX3N2Z0ljb249dCl9Z2V0IGZvbnRTZXQoKXtyZXR1cm4gdGhpcy5fZm9udFNldH1zZXQgZm9udFNldCh0KXtjb25zdCBlPXRoaXMuX2NsZWFudXBGb250VmFsdWUodCk7ZSE9PXRoaXMuX2ZvbnRTZXQmJih0aGlzLl9mb250U2V0PWUsdGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCkpfWdldCBmb250SWNvbigpe3JldHVybiB0aGlzLl9mb250SWNvbn1zZXQgZm9udEljb24odCl7Y29uc3QgZT10aGlzLl9jbGVhbnVwRm9udFZhbHVlKHQpO2UhPT10aGlzLl9mb250SWNvbiYmKHRoaXMuX2ZvbnRJY29uPWUsdGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCkpfV9zcGxpdEljb25OYW1lKHQpe2lmKCF0KXJldHVyblsiIiwiIl07Y29uc3QgZT10LnNwbGl0KCI6Iik7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDE6cmV0dXJuWyIiLGVbMF1dO2Nhc2UgMjpyZXR1cm4gZTtkZWZhdWx0OnRocm93IEVycm9yKGBJbnZhbGlkIGljb24gbmFtZTogIiR7dH0iYCl9fW5nT25Jbml0KCl7dGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCl9bmdBZnRlclZpZXdDaGVja2VkKCl7Y29uc3QgdD10aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXM7aWYodCYmdC5zaXplKXtjb25zdCB0PXRoaXMuX2xvY2F0aW9uLmdldFBhdGhuYW1lKCk7dCE9PXRoaXMuX3ByZXZpb3VzUGF0aCYmKHRoaXMuX3ByZXZpb3VzUGF0aD10LHRoaXMuX3ByZXBlbmRQYXRoVG9SZWZlcmVuY2VzKHQpKX19bmdPbkRlc3Ryb3koKXt0aGlzLl9jdXJyZW50SWNvbkZldGNoLnVuc3Vic2NyaWJlKCksdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzJiZ0aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXMuY2xlYXIoKX1fdXNpbmdGb250SWNvbigpe3JldHVybiF0aGlzLnN2Z0ljb259X3NldFN2Z0VsZW1lbnQodCl7dGhpcy5fY2xlYXJTdmdFbGVtZW50KCk7Y29uc3QgZT10LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIik7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS50ZXh0Q29udGVudCs9IiAiO2NvbnN0IG49dGhpcy5fbG9jYXRpb24uZ2V0UGF0aG5hbWUoKTt0aGlzLl9wcmV2aW91c1BhdGg9bix0aGlzLl9jYWNoZUNoaWxkcmVuV2l0aEV4dGVybmFsUmVmZXJlbmNlcyh0KSx0aGlzLl9wcmVwZW5kUGF0aFRvUmVmZXJlbmNlcyhuKSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodCl9X2NsZWFyU3ZnRWxlbWVudCgpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2xldCBlPXQuY2hpbGROb2Rlcy5sZW5ndGg7Zm9yKHRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcyYmdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzLmNsZWFyKCk7ZS0tOyl7Y29uc3Qgbj10LmNoaWxkTm9kZXNbZV07MT09PW4ubm9kZVR5cGUmJiJzdmciIT09bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfHx0LnJlbW92ZUNoaWxkKG4pfX1fdXBkYXRlRm9udEljb25DbGFzc2VzKCl7aWYoIXRoaXMuX3VzaW5nRm9udEljb24oKSlyZXR1cm47Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZT10aGlzLmZvbnRTZXQ/dGhpcy5faWNvblJlZ2lzdHJ5LmNsYXNzTmFtZUZvckZvbnRBbGlhcyh0aGlzLmZvbnRTZXQpOnRoaXMuX2ljb25SZWdpc3RyeS5nZXREZWZhdWx0Rm9udFNldENsYXNzKCk7ZSE9dGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3MmJih0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcyYmdC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzKSxlJiZ0LmNsYXNzTGlzdC5hZGQoZSksdGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3M9ZSksdGhpcy5mb250SWNvbiE9dGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzJiYodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzJiZ0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzKSx0aGlzLmZvbnRJY29uJiZ0LmNsYXNzTGlzdC5hZGQodGhpcy5mb250SWNvbiksdGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzPXRoaXMuZm9udEljb24pfV9jbGVhbnVwRm9udFZhbHVlKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90LnRyaW0oKS5zcGxpdCgiICIpWzBdOnR9X3ByZXBlbmRQYXRoVG9SZWZlcmVuY2VzKHQpe2NvbnN0IGU9dGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzO2UmJmUuZm9yRWFjaCgoKGUsbik9PntlLmZvckVhY2goKGU9PntuLnNldEF0dHJpYnV0ZShlLm5hbWUsYHVybCgnJHt0fSMke2UudmFsdWV9JylgKX0pKX0pKX1fY2FjaGVDaGlsZHJlbldpdGhFeHRlcm5hbFJlZmVyZW5jZXModCl7Y29uc3QgZT10LnF1ZXJ5U2VsZWN0b3JBbGwoa1cpLG49dGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlc3x8bmV3IE1hcDtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl3Vy5mb3JFYWNoKChvPT57Y29uc3QgaT1lW3RdLGE9aS5nZXRBdHRyaWJ1dGUobykscj1hP2EubWF0Y2goU1cpOm51bGw7aWYocil7bGV0IHQ9bi5nZXQoaSk7dHx8KHQ9W10sbi5zZXQoaSx0KSksdC5wdXNoKHtuYW1lOm8sdmFsdWU6clsxXX0pfX0pKX1fdXBkYXRlU3ZnSWNvbih0KXtpZih0aGlzLl9zdmdOYW1lc3BhY2U9bnVsbCx0aGlzLl9zdmdOYW1lPW51bGwsdGhpcy5fY3VycmVudEljb25GZXRjaC51bnN1YnNjcmliZSgpLHQpe2NvbnN0W2Usbl09dGhpcy5fc3BsaXRJY29uTmFtZSh0KTtlJiYodGhpcy5fc3ZnTmFtZXNwYWNlPWUpLG4mJih0aGlzLl9zdmdOYW1lPW4pLHRoaXMuX2N1cnJlbnRJY29uRmV0Y2g9dGhpcy5faWNvblJlZ2lzdHJ5LmdldE5hbWVkU3ZnSWNvbihuLGUpLnBpcGUoYmUoMSkpLnN1YnNjcmliZSgodD0+dGhpcy5fc2V0U3ZnRWxlbWVudCh0KSksKHQ9Pnt0aGlzLl9lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IobmV3IEVycm9yKGBFcnJvciByZXRyaWV2aW5nIGljb24gJHtlfToke259ISAke3QubWVzc2FnZX1gKSl9KSl9fX1EVy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RFcpKFNtKGhnKSxTbShDVyksTmEoImFyaWEtaGlkZGVuIiksU20oT1cpLFNtKFpzKSl9LERXLsm1Y21wPXRvKHt0eXBlOkRXLHNlbGVjdG9yczpbWyJtYXQtaWNvbiJdXSxob3N0QXR0cnM6WyJyb2xlIiwiaW1nIiwxLCJtYXQtaWNvbiIsIm5vdHJhbnNsYXRlIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmKGpwKCJkYXRhLW1hdC1pY29uLXR5cGUiLG4uX3VzaW5nRm9udEljb24oKT8iZm9udCI6InN2ZyIpKCJkYXRhLW1hdC1pY29uLW5hbWUiLG4uX3N2Z05hbWV8fG4uZm9udEljb24pKCJkYXRhLW1hdC1pY29uLW5hbWVzcGFjZSIsbi5fc3ZnTmFtZXNwYWNlfHxuLmZvbnRTZXQpLHB1KCJtYXQtaWNvbi1pbmxpbmUiLG4uaW5saW5lKSgibWF0LWljb24tbm8tY29sb3IiLCJwcmltYXJ5IiE9PW4uY29sb3ImJiJhY2NlbnQiIT09bi5jb2xvciYmIndhcm4iIT09bi5jb2xvcikpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsaW5saW5lOiJpbmxpbmUiLHN2Z0ljb246InN2Z0ljb24iLGZvbnRTZXQ6ImZvbnRTZXQiLGZvbnRJY29uOiJmb250SWNvbiJ9LGV4cG9ydEFzOlsibWF0SWNvbiJdLGZlYXR1cmVzOlt4cF0sbmdDb250ZW50U2VsZWN0b3JzOlsiKiJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihabSgpLFhtKDApKX0sc3R5bGVzOlsiLm1hdC1pY29ue2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtkaXNwbGF5OmlubGluZS1ibG9jaztmaWxsOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MjRweDt3aWR0aDoyNHB4fS5tYXQtaWNvbi5tYXQtaWNvbi1pbmxpbmV7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDt3aWR0aDppbmhlcml0fVtkaXI9cnRsXSAubWF0LWljb24tcnRsLW1pcnJvcnt0cmFuc2Zvcm06c2NhbGUoLTEsIDEpfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257ZGlzcGxheTpibG9ja30ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbnttYXJnaW46YXV0b31cbiJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLERXLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6aGd9LHt0eXBlOkNXfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6amEsYXJnczpbImFyaWEtaGlkZGVuIl19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W09XXX1dfSx7dHlwZTpac31dLERXLnByb3BEZWNvcmF0b3JzPXtpbmxpbmU6W3t0eXBlOnh5fV0sc3ZnSWNvbjpbe3R5cGU6eHl9XSxmb250U2V0Olt7dHlwZTp4eX1dLGZvbnRJY29uOlt7dHlwZTp4eX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKERXLFt7dHlwZTpNeSxhcmdzOlt7dGVtcGxhdGU6IjxuZy1jb250ZW50PjwvbmctY29udGVudD4iLHNlbGVjdG9yOiJtYXQtaWNvbiIsZXhwb3J0QXM6Im1hdEljb24iLGlucHV0czpbImNvbG9yIl0saG9zdDp7cm9sZToiaW1nIixjbGFzczoibWF0LWljb24gbm90cmFuc2xhdGUiLCJbYXR0ci5kYXRhLW1hdC1pY29uLXR5cGVdIjonX3VzaW5nRm9udEljb24oKSA/ICJmb250IiA6ICJzdmciJywiW2F0dHIuZGF0YS1tYXQtaWNvbi1uYW1lXSI6Il9zdmdOYW1lIHx8IGZvbnRJY29uIiwiW2F0dHIuZGF0YS1tYXQtaWNvbi1uYW1lc3BhY2VdIjoiX3N2Z05hbWVzcGFjZSB8fCBmb250U2V0IiwiW2NsYXNzLm1hdC1pY29uLWlubGluZV0iOiJpbmxpbmUiLCJbY2xhc3MubWF0LWljb24tbm8tY29sb3JdIjonY29sb3IgIT09ICJwcmltYXJ5IiAmJiBjb2xvciAhPT0gImFjY2VudCIgJiYgY29sb3IgIT09ICJ3YXJuIid9LGVuY2Fwc3VsYXRpb246SG4uTm9uZSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNoLHN0eWxlczpbIi5tYXQtaWNvbntiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Q29sb3I7aGVpZ2h0OjI0cHg7d2lkdGg6MjRweH0ubWF0LWljb24ubWF0LWljb24taW5saW5le2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7d2lkdGg6aW5oZXJpdH1bZGlyPXJ0bF0gLm1hdC1pY29uLXJ0bC1taXJyb3J7dHJhbnNmb3JtOnNjYWxlKC0xLCAxKX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257bWFyZ2luOmF1dG99XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfSx7dHlwZTpDV30se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmphLGFyZ3M6WyJhcmlhLWhpZGRlbiJdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltPV119XX0se3R5cGU6WnN9XX0pLHtpbmxpbmU6W3t0eXBlOnh5fV0sc3ZnSWNvbjpbe3R5cGU6eHl9XSxmb250U2V0Olt7dHlwZTp4eX1dLGZvbnRJY29uOlt7dHlwZTp4eX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBFV3t9RVcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEVXKX0sRVcuybVtb2Q9YW8oe3R5cGU6RVd9KSxFVy7JtWluaj12bih7aW1wb3J0czpbW1hJXSxYSV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEVXLFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbWEldLGV4cG9ydHM6W0RXLFhJXSxkZWNsYXJhdGlvbnM6W0RXXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKEVXLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bRFddfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1hJXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltEVyxYSV19fSk7Y2xhc3MgUld7Y29uc3RydWN0b3IodCl7dGhpcy5kaWFsb2dSZWY9dCx0aGlzLnRlbnNvcmJvYXJkRG90RGV2VXJsPSJodHRwczovL3RlbnNvcmJvYXJkLmRldi8/dXRtX3NvdXJjZT10ZW5zb3Jib2FyZCJ9b25DbG9zZSgpe3RoaXMuZGlhbG9nUmVmLmNsb3NlKCl9Z2V0Q29tbWFuZFRleHQoKXtyZXR1cm4gdGhpcy5sb2dkaXI/InRlbnNvcmJvYXJkIGRldiB1cGxvYWQgLS1sb2dkaXIgXFxcbiAgICAnIit0aGlzLmxvZ2Rpci5yZXBsYWNlKC8nL2csIidcXCcnIikrIiciOiJ0ZW5zb3Jib2FyZCBkZXYgdXBsb2FkIC0tbG9nZGlyIHtsb2dkaXJ9In19UlcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFJXKShTbShYRykpfSxSVy7JtWNtcD10byh7dHlwZTpSVyxzZWxlY3RvcnM6W1sidGJkZXYtdXBsb2FkLWRpYWxvZy1jb21wb25lbnQiXV0saW5wdXRzOntsb2dkaXI6ImxvZ2RpciJ9LGRlY2xzOjIxLHZhcnM6NCxjb25zdHM6W1sidGFyZ2V0IiwiX2JsYW5rIiwicmVsIiwibm9yZWZlcnJlciBub29wZW5lciIsMSwiYW5jaG9yLXRleHQiLDMsImhyZWYiXSxbMSwiY29tbWFuZCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidGl0bGUiLCJDbGljayB0byBjb3B5IHRoZSBjb21tYW5kIiwxLCJjb21tYW5kLWNvcHkiLDMsImNka0NvcHlUb0NsaXBib2FyZCJdLFsic3ZnSWNvbiIsImNvbnRlbnRfY29weV8yNHB4Il0sWzEsImJvdHRvbS1idXR0b25zIl0sWyJtYXQtZmxhdC1idXR0b24iLCIiLDEsImNsb3NlLWJ1dHRvbiIsMywiY2xpY2siXSxbIm1hdC1mbGF0LWJ1dHRvbiIsIiIsInRhcmdldCIsIl9ibGFuayIsInJlbCIsIm5vcmVmZXJyZXIgbm9vcGVuZXIiLDEsImxlYXJuLW1vcmUtYnV0dG9uIiwzLCJocmVmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJoMyIpLGt1KDEsIlVwbG9hZCB0byBUZW5zb3JCb2FyZC5kZXYiKSxBbSgpLFJtKDIsInAiKSxSbSgzLCJhIiwwKSxrdSg0LCIgVGVuc29yQm9hcmQuZGV2IiksQW0oKSxrdSg1LCIgZW5hYmxlcyB5b3UgdG8gZWFzaWx5IGhvc3QsIHRyYWNrLCBhbmQgc2hhcmUgeW91ciBNTCBleHBlcmltZW50cyB3aXRoIGV2ZXJ5b25lLiBZb3UgY2FuIHNoYXJlIGEgbGluayB0byB0aGUgdXBsb2FkZWQgVGVuc29yQm9hcmQgaW4gcGFwZXJzLCBibG9nIHBvc3RzLCBhbmQgc29jaWFsIG1lZGlhLiBUaGlzIGNhbiBzaG93Y2FzZSB0aGUgcmVzdWx0cyBtb3JlIGVmZmVjdGl2ZWx5IGFuZCBoZWxwcyByZXByb2R1Y2liaWxpdHkuXG4iKSxBbSgpLFJtKDYsInAiKSxrdSg3LCJUbyB1cGxvYWQgYSBsb2dkaXIgdG8gVGVuc29yQm9hcmQuZGV2LCBydW4gdGhlIGNvbW1hbmQ6IiksQW0oKSxSbSg4LCJkaXYiLDEpLFJtKDksInByZSIpLFJtKDEwLCJjb2RlIiksa3UoMTEpLEFtKCksQW0oKSxSbSgxMiwiYnV0dG9uIiwyKSxUbSgxMywibWF0LWljb24iLDMpLEFtKCksQW0oKSxSbSgxNCwicCIpLGt1KDE1LCIgT25seSBjZXJ0YWluIHBsdWdpbnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuIFVwbG9hZGVkIFRlbnNvckJvYXJkcyBhcmUgcHVibGljIGFuZCB2aXNpYmxlIHRvIGV2ZXJ5b25lOyBkbyBub3QgdXBsb2FkIHNlbnNpdGl2ZSBkYXRhLlxuIiksQW0oKSxSbSgxNiwiZGl2Iiw0KSxSbSgxNywiYnV0dG9uIiw1KSxWbSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25DbG9zZSgpfSkpLGt1KDE4LCIgQ2xvc2UgIiksQW0oKSxSbSgxOSwiYSIsNiksa3UoMjAsIiBMZWFybiBtb3JlICIpLEFtKCksQW0oKSksMiZlJiYocmMoMyksS20oImhyZWYiLG4udGVuc29yYm9hcmREb3REZXZVcmwsVHMpLHJjKDgpLFN1KG4uZ2V0Q29tbWFuZFRleHQoKSkscmMoMSksRG0oImNka0NvcHlUb0NsaXBib2FyZCIsbi5nZXRDb21tYW5kVGV4dCgpKSxyYyg3KSxLbSgiaHJlZiIsbi50ZW5zb3Jib2FyZERvdERldlVybCxUcykpfSxkaXJlY3RpdmVzOltYSCxmVyxEVyxLSF0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9ZGl2W19uZ2NvbnRlbnQtJUNPTVAlXSwgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjE2cHggMH1bX25naG9zdC0lQ09NUCVdID4gW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9W19uZ2hvc3QtJUNPTVAlXSA+IFtfbmdjb250ZW50LSVDT01QJV06bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9aDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxLjV9cFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzIxMjEyMTtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9LmFuY2hvci10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWRlY29yYXRpb246bm9uZX0uY29tbWFuZFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6I2Y1ZjZmNztib3JkZXItcmFkaXVzOjRweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZzoycHggMTJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29tbWFuZFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb21tYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjF9cHJlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy14OmF1dG99Y29kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS41fS5ib3R0b20tYnV0dG9uc1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNsb3NlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bWFyZ2luLXJpZ2h0OjhweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY2xvc2UtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNsb3NlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9W19uZ2hvc3QtJUNPTVAlXSAgIC5sZWFybi1tb3JlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzE5NzZkMjt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmxlYXJuLW1vcmUtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNDJhNWY1fSddfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChSVyxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJ0YmRldi11cGxvYWQtZGlhbG9nLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vdGJkZXZfdXBsb2FkX2RpYWxvZ19jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi90YmRldl91cGxvYWRfZGlhbG9nX2NvbXBvbmVudC5jc3MiXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlhHfV19KSx7bG9nZGlyOlt7dHlwZTp4eX1dfSk7Y29uc3QgQVc9WncoeFIsKHQ9PnQuZGF0YV9sb2NhdGlvbikpO2NsYXNzIFRXe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmxvZ2RpciQ9dGhpcy5zdG9yZS5waXBlKEZ3KEFXKSl9fWZ1bmN0aW9uIE5XKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiYnV0dG9uIiwxKSxWbSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIGhpKHQpLFltKCkub3BlbkRpYWxvZygpfSkpLFJtKDEsInNwYW4iLDIpLFRtKDIsIm1hdC1pY29uIiwzKSxrdSgzLCIgVXBsb2FkICIpLEFtKCksQW0oKX19VFcuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFRXKShTbShJdykpfSxUVy7JtWNtcD10byh7dHlwZTpUVyxzZWxlY3RvcnM6W1sidGJkZXYtdXBsb2FkLWRpYWxvZyJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJsb2dkaXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFRtKDAsInRiZGV2LXVwbG9hZC1kaWFsb2ctY29tcG9uZW50IiwwKSxBaCgxLCJhc3luYyIpKSwyJmUmJkRtKCJsb2dkaXIiLFRoKDEsMSxuLmxvZ2RpciQpKX0sZGlyZWN0aXZlczpbUlddLHBpcGVzOlt3TV0sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChUVyxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJ0YmRldi11cGxvYWQtZGlhbG9nIix0ZW1wbGF0ZTonXG4gICAgPHRiZGV2LXVwbG9hZC1kaWFsb2ctY29tcG9uZW50XG4gICAgICBbbG9nZGlyXT0ibG9nZGlyJCB8IGFzeW5jIlxuICAgID48L3RiZGV2LXVwbG9hZC1kaWFsb2ctY29tcG9uZW50PlxuICAnfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLG51bGwpO2NvbnN0IHpXPVsibG9jYWxob3N0IiwiMTI3LjAuMC4xIl07Y2xhc3MgSVd7Y29uc3RydWN0b3IodCxlKXt0aGlzLndpbmRvdz10LHRoaXMuZGlhbG9nPWUsdGhpcy5zaG93bj16Vy5pbmNsdWRlcyh0LmxvY2F0aW9uLmhvc3RuYW1lKX1vcGVuRGlhbG9nKCl7dGhpcy5kaWFsb2cub3BlbihUVyx7d2lkdGg6IjU2MHB4In0pfX1mdW5jdGlvbiBIVyh0LGUpezEmdCYmKHFpKCksUm0oMCwic3ZnIiwyKSxUbSgxLCJwb2x5Z29uIiwzKSxBbSgpKX1JVy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SVcpKFNtKCJ3aW5kb3ciKSxTbShvVykpfSxJVy7JtWNtcD10byh7dHlwZTpJVyxzZWxlY3RvcnM6W1sidGJkZXYtdXBsb2FkLWJ1dHRvbiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZwdSgic2hvd24iLG4uc2hvd24pfSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1sibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwzLCJjbGljayIsNCwibmdJZiJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwzLCJjbGljayJdLFsxLCJidXR0b24tY29udGVudHMiXSxbInN2Z0ljb24iLCJpbmZvX291dGxpbmVfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZRcCgwLE5XLDQsMCwiYnV0dG9uIiwwKSwyJmUmJkRtKCJuZ0lmIixuLnNob3duKX0sZGlyZWN0aXZlczpbZE0sWEgsRFddLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV0gICBidXR0b24ubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIGJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH0uYnV0dG9uLWNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX1tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjZweH0nXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoSVcsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoidGJkZXYtdXBsb2FkLWJ1dHRvbiIsdGVtcGxhdGVVcmw6Ii4vdGJkZXZfdXBsb2FkX2J1dHRvbl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi90YmRldl91cGxvYWRfYnV0dG9uX2NvbXBvbmVudC5jc3MiXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOldpbmRvdyxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOlsid2luZG93Il19XX0se3R5cGU6b1d9XX0pLHtzaG93bjpbe3R5cGU6UHksYXJnczpbImNsYXNzLnNob3duIl19XX0pO2NvbnN0IEZXPVsiKiJdO2Z1bmN0aW9uIExXKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiZGl2IiwwKSxWbSgia2V5ZG93biIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKCkuX2hhbmRsZUtleWRvd24obil9KSkoImNsaWNrIiwoZnVuY3Rpb24gZSgpe3JldHVybiBoaSh0KSxZbSgpLmNsb3NlZC5lbWl0KCJjbGljayIpfSkpKCJAdHJhbnNmb3JtTWVudS5zdGFydCIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKCkuX29uQW5pbWF0aW9uU3RhcnQobil9KSkoIkB0cmFuc2Zvcm1NZW51LmRvbmUiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLl9vbkFuaW1hdGlvbkRvbmUobil9KSksUm0oMSwiZGl2IiwxKSxYbSgyKSxBbSgpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PVltKCk7RG0oImlkIix0LnBhbmVsSWQpKCJuZ0NsYXNzIix0Ll9jbGFzc0xpc3QpKCJAdHJhbnNmb3JtTWVudSIsdC5fcGFuZWxBbmltYXRpb25TdGF0ZSksanAoImFyaWEtbGFiZWwiLHQuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5Iix0LmFyaWFMYWJlbGxlZGJ5fHxudWxsKSgiYXJpYS1kZXNjcmliZWRieSIsdC5hcmlhRGVzY3JpYmVkYnl8fG51bGwpfX1jb25zdCBCVz17dHJhbnNmb3JtTWVudTpueCgidHJhbnNmb3JtTWVudSIsW3J4KCJ2b2lkIixheCh7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGUoMC44KSJ9KSksbHgoInZvaWQgPT4gZW50ZXIiLG94KCIxMjBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIsYXgoe29wYWNpdHk6MSx0cmFuc2Zvcm06InNjYWxlKDEpIn0pKSksbHgoIiogPT4gdm9pZCIsb3goIjEwMG1zIDI1bXMgbGluZWFyIixheCh7b3BhY2l0eTowfSkpKV0pLGZhZGVJbkl0ZW1zOm54KCJmYWRlSW5JdGVtcyIsW3J4KCJzaG93aW5nIixheCh7b3BhY2l0eToxfSkpLGx4KCJ2b2lkID0+ICoiLFtheCh7b3BhY2l0eTowfSksb3goIjQwMG1zIDEwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpIildKV0pfSxWVz1uZXcgR2EoIk1hdE1lbnVDb250ZW50Iik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIGpXe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIpe3RoaXMuX3RlbXBsYXRlPXQsdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPWUsdGhpcy5fYXBwUmVmPW4sdGhpcy5faW5qZWN0b3I9byx0aGlzLl92aWV3Q29udGFpbmVyUmVmPWksdGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX2F0dGFjaGVkPW5ldyBJfWF0dGFjaCh0PXt9KXt0aGlzLl9wb3J0YWx8fCh0aGlzLl9wb3J0YWw9bmV3IHhGKHRoaXMuX3RlbXBsYXRlLHRoaXMuX3ZpZXdDb250YWluZXJSZWYpKSx0aGlzLmRldGFjaCgpLHRoaXMuX291dGxldHx8KHRoaXMuX291dGxldD1uZXcgd0YodGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLHRoaXMuX2FwcFJlZix0aGlzLl9pbmplY3RvcikpO2NvbnN0IGU9dGhpcy5fdGVtcGxhdGUuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2UucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fb3V0bGV0Lm91dGxldEVsZW1lbnQsZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYmJnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX3BvcnRhbC5hdHRhY2godGhpcy5fb3V0bGV0LHQpLHRoaXMuX2F0dGFjaGVkLm5leHQoKX1kZXRhY2goKXt0aGlzLl9wb3J0YWwuaXNBdHRhY2hlZCYmdGhpcy5fcG9ydGFsLmRldGFjaCgpfW5nT25EZXN0cm95KCl7dGhpcy5fb3V0bGV0JiZ0aGlzLl9vdXRsZXQuZGlzcG9zZSgpfX1qVy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8alcpKFNtKFhnKSxTbSh1ZyksU20oT18pLFNtKHJwKSxTbShlaCksU20oWl8pLFNtKFVnKSl9LGpXLsm1ZGlyPWxvKHt0eXBlOmpXLHNlbGVjdG9yczpbWyJuZy10ZW1wbGF0ZSIsIm1hdE1lbnVDb250ZW50IiwiIl1dLGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6VlcsdXNlRXhpc3Rpbmc6ald9XSldfSksalcuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpYZ30se3R5cGU6dWd9LHt0eXBlOk9ffSx7dHlwZTpycH0se3R5cGU6ZWh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX0se3R5cGU6VWd9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGpXLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6Im5nLXRlbXBsYXRlW21hdE1lbnVDb250ZW50XSIscHJvdmlkZXJzOlt7cHJvdmlkZTpWVyx1c2VFeGlzdGluZzpqV31dfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WGd9LHt0eXBlOnVnfSx7dHlwZTpPX30se3R5cGU6cnB9LHt0eXBlOmVofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19LHt0eXBlOlVnfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IFVXPW5ldyBHYSgiTUFUX01FTlVfUEFORUwiKSxHVz1RSShLSShjbGFzc3t9KSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIFdXIGV4dGVuZHMgR1d7Y29uc3RydWN0b3IodCxlLG4sbyxpKXtzdXBlcigpLHRoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9mb2N1c01vbml0b3I9bix0aGlzLl9wYXJlbnRNZW51PW8sdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLnJvbGU9Im1lbnVpdGVtIix0aGlzLl9ob3ZlcmVkPW5ldyBJLHRoaXMuX2ZvY3VzZWQ9bmV3IEksdGhpcy5faGlnaGxpZ2h0ZWQ9ITEsdGhpcy5fdHJpZ2dlcnNTdWJtZW51PSExLG8mJm8uYWRkSXRlbSYmby5hZGRJdGVtKHRoaXMpfWZvY3VzKHQsZSl7dGhpcy5fZm9jdXNNb25pdG9yJiZ0P3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9nZXRIb3N0RWxlbWVudCgpLHQsZSk6dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5mb2N1cyhlKSx0aGlzLl9mb2N1c2VkLm5leHQodGhpcyl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yJiZ0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCExKX1uZ09uRGVzdHJveSgpe3RoaXMuX2ZvY3VzTW9uaXRvciYmdGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLHRoaXMuX3BhcmVudE1lbnUmJnRoaXMuX3BhcmVudE1lbnUucmVtb3ZlSXRlbSYmdGhpcy5fcGFyZW50TWVudS5yZW1vdmVJdGVtKHRoaXMpLHRoaXMuX2hvdmVyZWQuY29tcGxldGUoKSx0aGlzLl9mb2N1c2VkLmNvbXBsZXRlKCl9X2dldFRhYkluZGV4KCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/Ii0xIjoiMCJ9X2dldEhvc3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1fY2hlY2tEaXNhYmxlZCh0KXt0aGlzLmRpc2FibGVkJiYodC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCkpfV9oYW5kbGVNb3VzZUVudGVyKCl7dGhpcy5faG92ZXJlZC5uZXh0KHRoaXMpfWdldExhYmVsKCl7dmFyIHQsZTtjb25zdCBuPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9uZU5vZGUoITApLG89bi5xdWVyeVNlbGVjdG9yQWxsKCJtYXQtaWNvbiwgLm1hdGVyaWFsLWljb25zIik7Zm9yKGxldCBlPTA7ZTxvLmxlbmd0aDtlKyspe2NvbnN0IG49b1tlXTtudWxsPT09KHQ9bi5wYXJlbnROb2RlKXx8dm9pZCAwPT09dHx8dC5yZW1vdmVDaGlsZChuKX1yZXR1cm4obnVsbD09PShlPW4udGV4dENvbnRlbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnRyaW0oKSl8fCIifV9zZXRIaWdobGlnaHRlZCh0KXt2YXIgZTt0aGlzLl9oaWdobGlnaHRlZD10LG51bGw9PT0oZT10aGlzLl9jaGFuZ2VEZXRlY3RvclJlZil8fHZvaWQgMD09PWV8fGUubWFya0ZvckNoZWNrKCl9fVdXLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxXVykoU20oaGcpLFNtKFpfKSxTbShTSSksU20oVVcsOCksU20oVWcpKX0sV1cuybVjbXA9dG8oe3R5cGU6V1csc2VsZWN0b3JzOltbIiIsIm1hdC1tZW51LWl0ZW0iLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJlZtKCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2NoZWNrRGlzYWJsZWQoZSl9KSkoIm1vdXNlZW50ZXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2hhbmRsZU1vdXNlRW50ZXIoKX0pKSwyJmUmJihqcCgicm9sZSIsbi5yb2xlKSgidGFiaW5kZXgiLG4uX2dldFRhYkluZGV4KCkpKCJhcmlhLWRpc2FibGVkIixuLmRpc2FibGVkLnRvU3RyaW5nKCkpKCJkaXNhYmxlZCIsbi5kaXNhYmxlZHx8bnVsbCkscHUoIm1hdC1tZW51LWl0ZW0iLCEwKSgibWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZCIsbi5faGlnaGxpZ2h0ZWQpKCJtYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlciIsbi5fdHJpZ2dlcnNTdWJtZW51KSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixyb2xlOiJyb2xlIn0sZXhwb3J0QXM6WyJtYXRNZW51SXRlbSJdLGZlYXR1cmVzOlt4cF0sYXR0cnM6WyJtYXQtbWVudS1pdGVtIiwiIl0sbmdDb250ZW50U2VsZWN0b3JzOkZXLGRlY2xzOjMsdmFyczozLGNvbnN0czpbWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1tZW51LXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVUcmlnZ2VyIl0sWyJjbGFzcyIsIm1hdC1tZW51LXN1Ym1lbnUtaWNvbiIsInZpZXdCb3giLCIwIDAgNSAxMCIsImZvY3VzYWJsZSIsImZhbHNlIiw0LCJuZ0lmIl0sWyJ2aWV3Qm94IiwiMCAwIDUgMTAiLCJmb2N1c2FibGUiLCJmYWxzZSIsMSwibWF0LW1lbnUtc3VibWVudS1pY29uIl0sWyJwb2ludHMiLCIwLDAgNSw1IDAsMTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFptKCksWG0oMCksVG0oMSwiZGl2IiwwKSxRcCgyLEhXLDIsMCwic3ZnIiwxKSksMiZlJiYocmMoMSksRG0oIm1hdFJpcHBsZURpc2FibGVkIixuLmRpc2FibGVSaXBwbGV8fG4uZGlzYWJsZWQpKCJtYXRSaXBwbGVUcmlnZ2VyIixuLl9nZXRIb3N0RWxlbWVudCgpKSxyYygxKSxEbSgibmdJZiIsbi5fdHJpZ2dlcnNTdWJtZW51KSl9LGRpcmVjdGl2ZXM6W2tILGRNXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxXVy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19LHt0eXBlOlNJfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbVVddfSx7dHlwZTpTcn1dfSx7dHlwZTpVZ31dLFdXLnByb3BEZWNvcmF0b3JzPXtyb2xlOlt7dHlwZTp4eX1dLF9jaGVja0Rpc2FibGVkOlt7dHlwZTp3eSxhcmdzOlsiY2xpY2siLFsiJGV2ZW50Il1dfV0sX2hhbmRsZU1vdXNlRW50ZXI6W3t0eXBlOnd5LGFyZ3M6WyJtb3VzZWVudGVyIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChXVyxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJbbWF0LW1lbnUtaXRlbV0iLGV4cG9ydEFzOiJtYXRNZW51SXRlbSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIl0saG9zdDp7IlthdHRyLnJvbGVdIjoicm9sZSIsIltjbGFzcy5tYXQtbWVudS1pdGVtXSI6InRydWUiLCJbY2xhc3MubWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZF0iOiJfaGlnaGxpZ2h0ZWQiLCJbY2xhc3MubWF0LW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXJdIjoiX3RyaWdnZXJzU3VibWVudSIsIlthdHRyLnRhYmluZGV4XSI6Il9nZXRUYWJJbmRleCgpIiwiW2F0dHIuYXJpYS1kaXNhYmxlZF0iOiJkaXNhYmxlZC50b1N0cmluZygpIiwiW2F0dHIuZGlzYWJsZWRdIjoiZGlzYWJsZWQgfHwgbnVsbCIsY2xhc3M6Im1hdC1mb2N1cy1pbmRpY2F0b3IifSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNoLGVuY2Fwc3VsYXRpb246SG4uTm9uZSx0ZW1wbGF0ZTonPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPGRpdiBjbGFzcz0ibWF0LW1lbnUtcmlwcGxlIiBtYXRSaXBwbGVcbiAgICAgW21hdFJpcHBsZURpc2FibGVkXT0iZGlzYWJsZVJpcHBsZSB8fCBkaXNhYmxlZCJcbiAgICAgW21hdFJpcHBsZVRyaWdnZXJdPSJfZ2V0SG9zdEVsZW1lbnQoKSI+XG48L2Rpdj5cblxuPHN2Z1xuICAqbmdJZj0iX3RyaWdnZXJzU3VibWVudSJcbiAgY2xhc3M9Im1hdC1tZW51LXN1Ym1lbnUtaWNvbiJcbiAgdmlld0JveD0iMCAwIDUgMTAiXG4gIGZvY3VzYWJsZT0iZmFsc2UiPjxwb2x5Z29uIHBvaW50cz0iMCwwIDUsNSAwLDEwIi8+PC9zdmc+XG4nfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX0se3R5cGU6U0l9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltVV119LHt0eXBlOlNyfV19LHt0eXBlOlVnfV19KSx7cm9sZTpbe3R5cGU6eHl9XSxfY2hlY2tEaXNhYmxlZDpbe3R5cGU6d3ksYXJnczpbImNsaWNrIixbIiRldmVudCJdXX1dLF9oYW5kbGVNb3VzZUVudGVyOlt7dHlwZTp3eSxhcmdzOlsibW91c2VlbnRlciJdfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IFlXPW5ldyBHYSgibWF0LW1lbnUtZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBxVygpe3JldHVybntvdmVybGFwVHJpZ2dlcjohMSx4UG9zaXRpb246ImFmdGVyIix5UG9zaXRpb246ImJlbG93IixiYWNrZHJvcENsYXNzOiJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCJ9fX0pO2xldCBaVz0wO2NsYXNzIFhXe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fZGVmYXVsdE9wdGlvbnM9bix0aGlzLl94UG9zaXRpb249dGhpcy5fZGVmYXVsdE9wdGlvbnMueFBvc2l0aW9uLHRoaXMuX3lQb3NpdGlvbj10aGlzLl9kZWZhdWx0T3B0aW9ucy55UG9zaXRpb24sdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zPW5ldyBWaCx0aGlzLl90YWJTdWJzY3JpcHRpb249bS5FTVBUWSx0aGlzLl9jbGFzc0xpc3Q9e30sdGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZT0idm9pZCIsdGhpcy5fYW5pbWF0aW9uRG9uZT1uZXcgSSx0aGlzLm92ZXJsYXlQYW5lbENsYXNzPXRoaXMuX2RlZmF1bHRPcHRpb25zLm92ZXJsYXlQYW5lbENsYXNzfHwiIix0aGlzLmJhY2tkcm9wQ2xhc3M9dGhpcy5fZGVmYXVsdE9wdGlvbnMuYmFja2Ryb3BDbGFzcyx0aGlzLl9vdmVybGFwVHJpZ2dlcj10aGlzLl9kZWZhdWx0T3B0aW9ucy5vdmVybGFwVHJpZ2dlcix0aGlzLl9oYXNCYWNrZHJvcD10aGlzLl9kZWZhdWx0T3B0aW9ucy5oYXNCYWNrZHJvcCx0aGlzLmNsb3NlZD1uZXcgTGgsdGhpcy5jbG9zZT10aGlzLmNsb3NlZCx0aGlzLnBhbmVsSWQ9Im1hdC1tZW51LXBhbmVsLSIrWlcrK31nZXQgeFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3hQb3NpdGlvbn1zZXQgeFBvc2l0aW9uKHQpeyJiZWZvcmUiPT09dHx8ImFmdGVyIj09PXR8fCJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiYhbmdEZXZNb2RlfHwoZnVuY3Rpb24gZSgpe3Rocm93IEVycm9yKCd4UG9zaXRpb24gdmFsdWUgbXVzdCBiZSBlaXRoZXIgXCdiZWZvcmVcJyBvciBhZnRlclwnLlxuICAgICAgRXhhbXBsZTogPG1hdC1tZW51IHhQb3NpdGlvbj0iYmVmb3JlIiAjbWVudT0ibWF0TWVudSI+PC9tYXQtbWVudT4nKX0pKCksdGhpcy5feFBvc2l0aW9uPXQsdGhpcy5zZXRQb3NpdGlvbkNsYXNzZXMoKX1nZXQgeVBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3lQb3NpdGlvbn1zZXQgeVBvc2l0aW9uKHQpeyJhYm92ZSI9PT10fHwiYmVsb3ciPT09dHx8InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0Rldk1vZGUmJiFuZ0Rldk1vZGV8fChmdW5jdGlvbiBlKCl7dGhyb3cgRXJyb3IoJ3lQb3NpdGlvbiB2YWx1ZSBtdXN0IGJlIGVpdGhlciBcJ2Fib3ZlXCcgb3IgYmVsb3dcJy5cbiAgICAgIEV4YW1wbGU6IDxtYXQtbWVudSB5UG9zaXRpb249ImFib3ZlIiAjbWVudT0ibWF0TWVudSI+PC9tYXQtbWVudT4nKX0pKCksdGhpcy5feVBvc2l0aW9uPXQsdGhpcy5zZXRQb3NpdGlvbkNsYXNzZXMoKX1nZXQgb3ZlcmxhcFRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fb3ZlcmxhcFRyaWdnZXJ9c2V0IG92ZXJsYXBUcmlnZ2VyKHQpe3RoaXMuX292ZXJsYXBUcmlnZ2VyPXl6KHQpfWdldCBoYXNCYWNrZHJvcCgpe3JldHVybiB0aGlzLl9oYXNCYWNrZHJvcH1zZXQgaGFzQmFja2Ryb3AodCl7dGhpcy5faGFzQmFja2Ryb3A9eXoodCl9c2V0IHBhbmVsQ2xhc3ModCl7Y29uc3QgZT10aGlzLl9wcmV2aW91c1BhbmVsQ2xhc3M7ZSYmZS5sZW5ndGgmJmUuc3BsaXQoIiAiKS5mb3JFYWNoKCh0PT57dGhpcy5fY2xhc3NMaXN0W3RdPSExfSkpLHRoaXMuX3ByZXZpb3VzUGFuZWxDbGFzcz10LHQmJnQubGVuZ3RoJiYodC5zcGxpdCgiICIpLmZvckVhY2goKHQ9Pnt0aGlzLl9jbGFzc0xpc3RbdF09ITB9KSksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZT0iIil9Z2V0IGNsYXNzTGlzdCgpe3JldHVybiB0aGlzLnBhbmVsQ2xhc3N9c2V0IGNsYXNzTGlzdCh0KXt0aGlzLnBhbmVsQ2xhc3M9dH1uZ09uSW5pdCgpe3RoaXMuc2V0UG9zaXRpb25DbGFzc2VzKCl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fdXBkYXRlRGlyZWN0RGVzY2VuZGFudHMoKSx0aGlzLl9rZXlNYW5hZ2VyPW5ldyBlSSh0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMpLndpdGhXcmFwKCkud2l0aFR5cGVBaGVhZCgpLndpdGhIb21lQW5kRW5kKCksdGhpcy5fdGFiU3Vic2NyaXB0aW9uPXRoaXMuX2tleU1hbmFnZXIudGFiT3V0LnN1YnNjcmliZSgoKCk9PnRoaXMuY2xvc2VkLmVtaXQoInRhYiIpKSksdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmNoYW5nZXMucGlwZShOZSh0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMpLHplKCh0PT5yZSguLi50Lm1hcCgodD0+dC5fZm9jdXNlZCkpKSkpKS5zdWJzY3JpYmUoKHQ9PnRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbSh0KSkpfW5nT25EZXN0cm95KCl7dGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmRlc3Ryb3koKSx0aGlzLl90YWJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmNsb3NlZC5jb21wbGV0ZSgpfV9ob3ZlcmVkKCl7cmV0dXJuIHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzLnBpcGUoTmUodGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zKSx6ZSgodD0+cmUoLi4udC5tYXAoKHQ9PnQuX2hvdmVyZWQpKSkpKSl9YWRkSXRlbSh0KXt9cmVtb3ZlSXRlbSh0KXt9X2hhbmRsZUtleWRvd24odCl7Y29uc3QgZT10LmtleUNvZGUsbj10aGlzLl9rZXlNYW5hZ2VyO3N3aXRjaChlKXtjYXNlIHV6OmJ6KHQpfHwodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2VkLmVtaXQoImtleWRvd24iKSk7YnJlYWs7Y2FzZSAzNzp0aGlzLnBhcmVudE1lbnUmJiJsdHIiPT09dGhpcy5kaXJlY3Rpb24mJnRoaXMuY2xvc2VkLmVtaXQoImtleWRvd24iKTticmVhaztjYXNlIDM5OnRoaXMucGFyZW50TWVudSYmInJ0bCI9PT10aGlzLmRpcmVjdGlvbiYmdGhpcy5jbG9zZWQuZW1pdCgia2V5ZG93biIpO2JyZWFrO2RlZmF1bHQ6ZSE9PWd6JiZlIT09aHp8fG4uc2V0Rm9jdXNPcmlnaW4oImtleWJvYXJkIiksbi5vbktleWRvd24odCl9fWZvY3VzRmlyc3RJdGVtKHQ9InByb2dyYW0iKXt0aGlzLmxhenlDb250ZW50P3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKGJlKDEpKS5zdWJzY3JpYmUoKCgpPT50aGlzLl9mb2N1c0ZpcnN0SXRlbSh0KSkpOnRoaXMuX2ZvY3VzRmlyc3RJdGVtKHQpfV9mb2N1c0ZpcnN0SXRlbSh0KXtjb25zdCBlPXRoaXMuX2tleU1hbmFnZXI7aWYoZS5zZXRGb2N1c09yaWdpbih0KS5zZXRGaXJzdEl0ZW1BY3RpdmUoKSwhZS5hY3RpdmVJdGVtJiZ0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMubGVuZ3RoKXtsZXQgdD10aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuZmlyc3QuX2dldEhvc3RFbGVtZW50KCkucGFyZW50RWxlbWVudDtmb3IoO3Q7KXtpZigibWVudSI9PT10LmdldEF0dHJpYnV0ZSgicm9sZSIpKXt0LmZvY3VzKCk7YnJlYWt9dD10LnBhcmVudEVsZW1lbnR9fX1yZXNldEFjdGl2ZUl0ZW0oKXt0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpfXNldEVsZXZhdGlvbih0KXtjb25zdCBlPU1hdGgubWluKHRoaXMuX2Jhc2VFbGV2YXRpb24rdCwyNCksbj1gJHt0aGlzLl9lbGV2YXRpb25QcmVmaXh9JHtlfWAsbz1PYmplY3Qua2V5cyh0aGlzLl9jbGFzc0xpc3QpLmZpbmQoKHQ9PnQuc3RhcnRzV2l0aCh0aGlzLl9lbGV2YXRpb25QcmVmaXgpKSk7byYmbyE9PXRoaXMuX3ByZXZpb3VzRWxldmF0aW9ufHwodGhpcy5fcHJldmlvdXNFbGV2YXRpb24mJih0aGlzLl9jbGFzc0xpc3RbdGhpcy5fcHJldmlvdXNFbGV2YXRpb25dPSExKSx0aGlzLl9jbGFzc0xpc3Rbbl09ITAsdGhpcy5fcHJldmlvdXNFbGV2YXRpb249bil9c2V0UG9zaXRpb25DbGFzc2VzKHQ9dGhpcy54UG9zaXRpb24sZT10aGlzLnlQb3NpdGlvbil7Y29uc3Qgbj10aGlzLl9jbGFzc0xpc3Q7blsibWF0LW1lbnUtYmVmb3JlIl09ImJlZm9yZSI9PT10LG5bIm1hdC1tZW51LWFmdGVyIl09ImFmdGVyIj09PXQsblsibWF0LW1lbnUtYWJvdmUiXT0iYWJvdmUiPT09ZSxuWyJtYXQtbWVudS1iZWxvdyJdPSJiZWxvdyI9PT1lfV9zdGFydEFuaW1hdGlvbigpe3RoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGU9ImVudGVyIn1fcmVzZXRBbmltYXRpb24oKXt0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlPSJ2b2lkIn1fb25BbmltYXRpb25Eb25lKHQpe3RoaXMuX2FuaW1hdGlvbkRvbmUubmV4dCh0KSx0aGlzLl9pc0FuaW1hdGluZz0hMX1fb25BbmltYXRpb25TdGFydCh0KXt0aGlzLl9pc0FuaW1hdGluZz0hMCwiZW50ZXIiPT09dC50b1N0YXRlJiYwPT09dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXgmJih0LmVsZW1lbnQuc2Nyb2xsVG9wPTApfV91cGRhdGVEaXJlY3REZXNjZW5kYW50cygpe3RoaXMuX2FsbEl0ZW1zLmNoYW5nZXMucGlwZShOZSh0aGlzLl9hbGxJdGVtcykpLnN1YnNjcmliZSgodD0+e3RoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5yZXNldCh0LmZpbHRlcigodD0+dC5fcGFyZW50TWVudT09PXRoaXMpKSksdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLm5vdGlmeU9uQ2hhbmdlcygpfSkpfX1YVy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WFcpKFNtKGhnKSxTbShhXyksU20oWVcpKX0sWFcuybVkaXI9bG8oe3R5cGU6WFcsY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYoJGgobyxWVyw1KSwkaChvLFdXLDUpLCRoKG8sV1csNCkpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4ubGF6eUNvbnRlbnQ9dC5maXJzdCksSmgodD10YigpKSYmKG4uX2FsbEl0ZW1zPXQpLEpoKHQ9dGIoKSkmJihuLml0ZW1zPXQpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJlFoKFhnLDUpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4udGVtcGxhdGVSZWY9dC5maXJzdCl9fSxpbnB1dHM6e2JhY2tkcm9wQ2xhc3M6ImJhY2tkcm9wQ2xhc3MiLHhQb3NpdGlvbjoieFBvc2l0aW9uIix5UG9zaXRpb246InlQb3NpdGlvbiIsb3ZlcmxhcFRyaWdnZXI6Im92ZXJsYXBUcmlnZ2VyIixoYXNCYWNrZHJvcDoiaGFzQmFja2Ryb3AiLHBhbmVsQ2xhc3M6WyJjbGFzcyIsInBhbmVsQ2xhc3MiXSxjbGFzc0xpc3Q6ImNsYXNzTGlzdCIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxhcmlhRGVzY3JpYmVkYnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwiYXJpYURlc2NyaWJlZGJ5Il19LG91dHB1dHM6e2Nsb3NlZDoiY2xvc2VkIixjbG9zZToiY2xvc2UifX0pLFhXLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6aGd9LHt0eXBlOmFffSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWVddfV19XSxYVy5wcm9wRGVjb3JhdG9ycz17X2FsbEl0ZW1zOlt7dHlwZTpZYSxhcmdzOltXVyx7ZGVzY2VuZGFudHM6ITB9XX1dLGJhY2tkcm9wQ2xhc3M6W3t0eXBlOnh5fV0sYXJpYUxhYmVsOlt7dHlwZTp4eSxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sYXJpYUxhYmVsbGVkYnk6W3t0eXBlOnh5LGFyZ3M6WyJhcmlhLWxhYmVsbGVkYnkiXX1dLGFyaWFEZXNjcmliZWRieTpbe3R5cGU6eHksYXJnczpbImFyaWEtZGVzY3JpYmVkYnkiXX1dLHhQb3NpdGlvbjpbe3R5cGU6eHl9XSx5UG9zaXRpb246W3t0eXBlOnh5fV0sdGVtcGxhdGVSZWY6W3t0eXBlOlphLGFyZ3M6W1hnXX1dLGl0ZW1zOlt7dHlwZTpZYSxhcmdzOltXVyx7ZGVzY2VuZGFudHM6ITF9XX1dLGxhenlDb250ZW50Olt7dHlwZTpxYSxhcmdzOltWV119XSxvdmVybGFwVHJpZ2dlcjpbe3R5cGU6eHl9XSxoYXNCYWNrZHJvcDpbe3R5cGU6eHl9XSxwYW5lbENsYXNzOlt7dHlwZTp4eSxhcmdzOlsiY2xhc3MiXX1dLGNsYXNzTGlzdDpbe3R5cGU6eHl9XSxjbG9zZWQ6W3t0eXBlOk95fV0sY2xvc2U6W3t0eXBlOk95fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoWFcsW3t0eXBlOkN5fV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfSx7dHlwZTphX30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1lXXX1dfV19KSx7YmFja2Ryb3BDbGFzczpbe3R5cGU6eHl9XSxjbG9zZWQ6W3t0eXBlOk95fV0sY2xvc2U6W3t0eXBlOk95fV0seFBvc2l0aW9uOlt7dHlwZTp4eX1dLHlQb3NpdGlvbjpbe3R5cGU6eHl9XSxvdmVybGFwVHJpZ2dlcjpbe3R5cGU6eHl9XSxoYXNCYWNrZHJvcDpbe3R5cGU6eHl9XSxwYW5lbENsYXNzOlt7dHlwZTp4eSxhcmdzOlsiY2xhc3MiXX1dLGNsYXNzTGlzdDpbe3R5cGU6eHl9XSxfYWxsSXRlbXM6W3t0eXBlOllhLGFyZ3M6W1dXLHtkZXNjZW5kYW50czohMH1dfV0sYXJpYUxhYmVsOlt7dHlwZTp4eSxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sYXJpYUxhYmVsbGVkYnk6W3t0eXBlOnh5LGFyZ3M6WyJhcmlhLWxhYmVsbGVkYnkiXX1dLGFyaWFEZXNjcmliZWRieTpbe3R5cGU6eHksYXJnczpbImFyaWEtZGVzY3JpYmVkYnkiXX1dLHRlbXBsYXRlUmVmOlt7dHlwZTpaYSxhcmdzOltYZ119XSxpdGVtczpbe3R5cGU6WWEsYXJnczpbV1cse2Rlc2NlbmRhbnRzOiExfV19XSxsYXp5Q29udGVudDpbe3R5cGU6cWEsYXJnczpbVlddfV19KTtjbGFzcyBLVyBleHRlbmRzIFhXe2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcih0LGUsbiksdGhpcy5fZWxldmF0aW9uUHJlZml4PSJtYXQtZWxldmF0aW9uLXoiLHRoaXMuX2Jhc2VFbGV2YXRpb249NH19S1cuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEtXKShTbShoZyksU20oYV8pLFNtKFlXKSl9LEtXLsm1Y21wPXRvKHt0eXBlOktXLHNlbGVjdG9yczpbWyJtYXQtbWVudSJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZqcCgiYXJpYS1sYWJlbCIsbnVsbCkoImFyaWEtbGFiZWxsZWRieSIsbnVsbCkoImFyaWEtZGVzY3JpYmVkYnkiLG51bGwpfSxleHBvcnRBczpbIm1hdE1lbnUiXSxmZWF0dXJlczpbcGcoW3twcm92aWRlOlVXLHVzZUV4aXN0aW5nOktXfV0pLHhwXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RlcsZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbInRhYmluZGV4IiwiLTEiLCJyb2xlIiwibWVudSIsMSwibWF0LW1lbnUtcGFuZWwiLDMsImlkIiwibmdDbGFzcyIsImtleWRvd24iLCJjbGljayJdLFsxLCJtYXQtbWVudS1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihabSgpLFFwKDAsTFcsMyw2LCJuZy10ZW1wbGF0ZSIpKX0sZGlyZWN0aXZlczpbYU1dLHN0eWxlczpbIm1hdC1tZW51e2Rpc3BsYXk6bm9uZX0ubWF0LW1lbnUtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO21heC1oZWlnaHQ6Y2FsYygxMDB2aCAtIDQ4cHgpO2JvcmRlci1yYWRpdXM6NHB4O291dGxpbmU6MDttaW4taGVpZ2h0OjY0cHh9Lm1hdC1tZW51LXBhbmVsLm5nLWFuaW1hdGluZ3twb2ludGVyLWV2ZW50czpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LXBhbmVse291dGxpbmU6c29saWQgMXB4fS5tYXQtbWVudS1jb250ZW50Om5vdCg6ZW1wdHkpe3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1tZW51LWl0ZW17LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6NDhweDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMTZweDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bWF4LXdpZHRoOjEwMCU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZW51LWl0ZW06Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fVtkaXI9cnRsXSAubWF0LW1lbnUtaXRlbXt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbnttYXJnaW4tcmlnaHQ6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uIHN2Z3t2ZXJ0aWNhbC1hbGlnbjp0b3B9W2Rpcj1ydGxdIC5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbnttYXJnaW4tbGVmdDoxNnB4O21hcmdpbi1yaWdodDowfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXXtwb2ludGVyLWV2ZW50czpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LWl0ZW17bWFyZ2luLXRvcDoxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LWl0ZW0uY2RrLWtleWJvYXJkLWZvY3VzZWQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZHtvdXRsaW5lOmRvdHRlZCAxcHh9Lm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2Vye3BhZGRpbmctcmlnaHQ6MzJweH1bZGlyPXJ0bF0gLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2Vye3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MzJweH0ubWF0LW1lbnUtc3VibWVudS1pY29ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTZweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt3aWR0aDo1cHg7aGVpZ2h0OjEwcHg7ZmlsbDpjdXJyZW50Q29sb3J9W2Rpcj1ydGxdIC5tYXQtbWVudS1zdWJtZW51LWljb257cmlnaHQ6YXV0bztsZWZ0OjE2cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgc2NhbGVYKC0xKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWVudS1zdWJtZW51LWljb257ZmlsbDpDYW52YXNUZXh0fWJ1dHRvbi5tYXQtbWVudS1pdGVte3dpZHRoOjEwMCV9Lm1hdC1tZW51LWl0ZW0gLm1hdC1tZW51LXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfVxuIl0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbQlcudHJhbnNmb3JtTWVudSxCVy5mYWRlSW5JdGVtc119LGNoYW5nZURldGVjdGlvbjowfSksS1cuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpoZ30se3R5cGU6YV99LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltZV119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoS1csW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWF0LW1lbnUiLHRlbXBsYXRlOic8bmctdGVtcGxhdGU+XG4gIDxkaXZcbiAgICBjbGFzcz0ibWF0LW1lbnUtcGFuZWwiXG4gICAgW2lkXT0icGFuZWxJZCJcbiAgICBbbmdDbGFzc109Il9jbGFzc0xpc3QiXG4gICAgKGtleWRvd24pPSJfaGFuZGxlS2V5ZG93bigkZXZlbnQpIlxuICAgIChjbGljayk9ImNsb3NlZC5lbWl0KFwnY2xpY2tcJykiXG4gICAgW0B0cmFuc2Zvcm1NZW51XT0iX3BhbmVsQW5pbWF0aW9uU3RhdGUiXG4gICAgKEB0cmFuc2Zvcm1NZW51LnN0YXJ0KT0iX29uQW5pbWF0aW9uU3RhcnQoJGV2ZW50KSJcbiAgICAoQHRyYW5zZm9ybU1lbnUuZG9uZSk9Il9vbkFuaW1hdGlvbkRvbmUoJGV2ZW50KSJcbiAgICB0YWJpbmRleD0iLTEiXG4gICAgcm9sZT0ibWVudSJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT0iYXJpYUxhYmVsIHx8IG51bGwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT0iYXJpYUxhYmVsbGVkYnkgfHwgbnVsbCJcbiAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT0iYXJpYURlc2NyaWJlZGJ5IHx8IG51bGwiPlxuICAgIDxkaXYgY2xhc3M9Im1hdC1tZW51LWNvbnRlbnQiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2gsZW5jYXBzdWxhdGlvbjpIbi5Ob25lLGV4cG9ydEFzOiJtYXRNZW51Iixob3N0OnsiW2F0dHIuYXJpYS1sYWJlbF0iOiJudWxsIiwiW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XSI6Im51bGwiLCJbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XSI6Im51bGwifSxhbmltYXRpb25zOltCVy50cmFuc2Zvcm1NZW51LEJXLmZhZGVJbkl0ZW1zXSxwcm92aWRlcnM6W3twcm92aWRlOlVXLHVzZUV4aXN0aW5nOktXfV0sc3R5bGVzOlsibWF0LW1lbnV7ZGlzcGxheTpub25lfS5tYXQtbWVudS1wYW5lbHttaW4td2lkdGg6MTEycHg7bWF4LXdpZHRoOjI4MHB4O292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7bWF4LWhlaWdodDpjYWxjKDEwMHZoIC0gNDhweCk7Ym9yZGVyLXJhZGl1czo0cHg7b3V0bGluZTowO21pbi1oZWlnaHQ6NjRweH0ubWF0LW1lbnUtcGFuZWwubmctYW5pbWF0aW5ne3BvaW50ZXItZXZlbnRzOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1lbnUtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1tZW51LWNvbnRlbnQ6bm90KDplbXB0eSl7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LW1lbnUtaXRlbXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246bm9uZTttYXgtd2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1lbnUtaXRlbTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9W2Rpcj1ydGxdIC5tYXQtbWVudS1pdGVte3RleHQtYWxpZ246cmlnaHR9Lm1hdC1tZW51LWl0ZW0gLm1hdC1pY29ue21hcmdpbi1yaWdodDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LW1lbnUtaXRlbSAubWF0LWljb24gc3Zne3ZlcnRpY2FsLWFsaWduOnRvcH1bZGlyPXJ0bF0gLm1hdC1tZW51LWl0ZW0gLm1hdC1pY29ue21hcmdpbi1sZWZ0OjE2cHg7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRde3BvaW50ZXItZXZlbnRzOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1lbnUtaXRlbXttYXJnaW4tdG9wOjFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVke291dGxpbmU6ZG90dGVkIDFweH0ubWF0LW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXJ7cGFkZGluZy1yaWdodDozMnB4fVtkaXI9cnRsXSAubWF0LW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXJ7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDozMnB4fS5tYXQtbWVudS1zdWJtZW51LWljb257cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDoxNnB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3dpZHRoOjVweDtoZWlnaHQ6MTBweDtmaWxsOmN1cnJlbnRDb2xvcn1bZGlyPXJ0bF0gLm1hdC1tZW51LXN1Ym1lbnUtaWNvbntyaWdodDphdXRvO2xlZnQ6MTZweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSBzY2FsZVgoLTEpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LXN1Ym1lbnUtaWNvbntmaWxsOkNhbnZhc1RleHR9YnV0dG9uLm1hdC1tZW51LWl0ZW17d2lkdGg6MTAwJX0ubWF0LW1lbnUtaXRlbSAubWF0LW1lbnUtcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfSx7dHlwZTphX30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1lXXX1dfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IEpXPW5ldyBHYSgibWF0LW1lbnUtc2Nyb2xsLXN0cmF0ZWd5IiksUVc9e3Byb3ZpZGU6SlcsZGVwczpbcExdLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gJFcodCl7cmV0dXJuKCk9PnQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fSx0WT1Oeih7cGFzc2l2ZTohMH0pO2NsYXNzIGVZe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyl7dGhpcy5fb3ZlcmxheT10LHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl92aWV3Q29udGFpbmVyUmVmPW4sdGhpcy5fbWVudUl0ZW1JbnN0YW5jZT1hLHRoaXMuX2Rpcj1yLHRoaXMuX2ZvY3VzTW9uaXRvcj1zLHRoaXMuX292ZXJsYXlSZWY9bnVsbCx0aGlzLl9tZW51T3Blbj0hMSx0aGlzLl9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbj1tLkVNUFRZLHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9uPW0uRU1QVFksdGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uPW0uRU1QVFksdGhpcy5faGFuZGxlVG91Y2hTdGFydD10PT57aEkodCl8fCh0aGlzLl9vcGVuZWRCeT0idG91Y2giKX0sdGhpcy5fb3BlbmVkQnk9dm9pZCAwLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMubWVudU9wZW5lZD1uZXcgTGgsdGhpcy5vbk1lbnVPcGVuPXRoaXMubWVudU9wZW5lZCx0aGlzLm1lbnVDbG9zZWQ9bmV3IExoLHRoaXMub25NZW51Q2xvc2U9dGhpcy5tZW51Q2xvc2VkLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PW8sdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51PWkgaW5zdGFuY2VvZiBYVz9pOnZvaWQgMCxlLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5faGFuZGxlVG91Y2hTdGFydCx0WSksYSYmKGEuX3RyaWdnZXJzU3VibWVudT10aGlzLnRyaWdnZXJzU3VibWVudSgpKX1nZXQgX2RlcHJlY2F0ZWRNYXRNZW51VHJpZ2dlckZvcigpe3JldHVybiB0aGlzLm1lbnV9c2V0IF9kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3IodCl7dGhpcy5tZW51PXR9Z2V0IG1lbnUoKXtyZXR1cm4gdGhpcy5fbWVudX1zZXQgbWVudSh0KXt0IT09dGhpcy5fbWVudSYmKHRoaXMuX21lbnU9dCx0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0JiYodCE9PXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudXx8InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0Rldk1vZGUmJiFuZ0Rldk1vZGV8fChmdW5jdGlvbiBlKCl7dGhyb3cgRXJyb3IoIm1hdE1lbnVUcmlnZ2VyRm9yOiBtZW51IGNhbm5vdCBjb250YWluIGl0cyBvd24gdHJpZ2dlci4gQXNzaWduIGEgbWVudSB0aGF0IGlzIG5vdCBhIHBhcmVudCBvZiB0aGUgdHJpZ2dlciBvciBtb3ZlIHRoZSB0cmlnZ2VyIG91dHNpZGUgb2YgdGhlIG1lbnUuIil9KSgpLHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbj10LmNsb3NlLnN1YnNjcmliZSgodD0+e3RoaXMuX2Rlc3Ryb3lNZW51KHQpLCJjbGljayIhPT10JiYidGFiIiE9PXR8fCF0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnV8fHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5jbG9zZWQuZW1pdCh0KX0pKSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2NoZWNrTWVudSgpLHRoaXMuX2hhbmRsZUhvdmVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKSx0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5faGFuZGxlVG91Y2hTdGFydCx0WSksdGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9ob3ZlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWdldCBtZW51T3Blbigpe3JldHVybiB0aGlzLl9tZW51T3Blbn1nZXQgZGlyKCl7cmV0dXJuIHRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/InJ0bCI6Imx0ciJ9dHJpZ2dlcnNTdWJtZW51KCl7cmV0dXJuISghdGhpcy5fbWVudUl0ZW1JbnN0YW5jZXx8IXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudSl9dG9nZ2xlTWVudSgpe3JldHVybiB0aGlzLl9tZW51T3Blbj90aGlzLmNsb3NlTWVudSgpOnRoaXMub3Blbk1lbnUoKX1vcGVuTWVudSgpe2lmKHRoaXMuX21lbnVPcGVuKXJldHVybjt0aGlzLl9jaGVja01lbnUoKTtjb25zdCB0PXRoaXMuX2NyZWF0ZU92ZXJsYXkoKSxlPXQuZ2V0Q29uZmlnKCk7dGhpcy5fc2V0UG9zaXRpb24oZS5wb3NpdGlvblN0cmF0ZWd5KSxlLmhhc0JhY2tkcm9wPW51bGw9PXRoaXMubWVudS5oYXNCYWNrZHJvcD8hdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKTp0aGlzLm1lbnUuaGFzQmFja2Ryb3AsdC5hdHRhY2godGhpcy5fZ2V0UG9ydGFsKCkpLHRoaXMubWVudS5sYXp5Q29udGVudCYmdGhpcy5tZW51LmxhenlDb250ZW50LmF0dGFjaCh0aGlzLm1lbnVEYXRhKSx0aGlzLl9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbj10aGlzLl9tZW51Q2xvc2luZ0FjdGlvbnMoKS5zdWJzY3JpYmUoKCgpPT50aGlzLmNsb3NlTWVudSgpKSksdGhpcy5faW5pdE1lbnUoKSx0aGlzLm1lbnUgaW5zdGFuY2VvZiBYVyYmdGhpcy5tZW51Ll9zdGFydEFuaW1hdGlvbigpfWNsb3NlTWVudSgpe3RoaXMubWVudS5jbG9zZS5lbWl0KCl9Zm9jdXModCxlKXt0aGlzLl9mb2N1c01vbml0b3ImJnQ/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2VsZW1lbnQsdCxlKTp0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoZSl9dXBkYXRlUG9zaXRpb24oKXt2YXIgdDtudWxsPT09KHQ9dGhpcy5fb3ZlcmxheVJlZil8fHZvaWQgMD09PXR8fHQudXBkYXRlUG9zaXRpb24oKX1fZGVzdHJveU1lbnUodCl7aWYoIXRoaXMuX292ZXJsYXlSZWZ8fCF0aGlzLm1lbnVPcGVuKXJldHVybjtjb25zdCBlPXRoaXMubWVudTt0aGlzLl9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCksIXRoaXMucmVzdG9yZUZvY3VzfHwia2V5ZG93biIhPT10JiZ0aGlzLl9vcGVuZWRCeSYmdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKXx8dGhpcy5mb2N1cyh0aGlzLl9vcGVuZWRCeSksdGhpcy5fb3BlbmVkQnk9dm9pZCAwLGUgaW5zdGFuY2VvZiBYVz8oZS5fcmVzZXRBbmltYXRpb24oKSxlLmxhenlDb250ZW50P2UuX2FuaW1hdGlvbkRvbmUucGlwZShjZSgodD0+InZvaWQiPT09dC50b1N0YXRlKSksYmUoMSksSWUoZS5sYXp5Q29udGVudC5fYXR0YWNoZWQpKS5zdWJzY3JpYmUoe25leHQ6KCk9PmUubGF6eUNvbnRlbnQuZGV0YWNoKCksY29tcGxldGU6KCk9PnRoaXMuX3NldElzTWVudU9wZW4oITEpfSk6dGhpcy5fc2V0SXNNZW51T3BlbighMSkpOih0aGlzLl9zZXRJc01lbnVPcGVuKCExKSxlLmxhenlDb250ZW50JiZlLmxhenlDb250ZW50LmRldGFjaCgpKX1faW5pdE1lbnUoKXt0aGlzLm1lbnUucGFyZW50TWVudT10aGlzLnRyaWdnZXJzU3VibWVudSgpP3RoaXMuX3BhcmVudE1hdGVyaWFsTWVudTp2b2lkIDAsdGhpcy5tZW51LmRpcmVjdGlvbj10aGlzLmRpcix0aGlzLl9zZXRNZW51RWxldmF0aW9uKCksdGhpcy5tZW51LmZvY3VzRmlyc3RJdGVtKHRoaXMuX29wZW5lZEJ5fHwicHJvZ3JhbSIpLHRoaXMuX3NldElzTWVudU9wZW4oITApfV9zZXRNZW51RWxldmF0aW9uKCl7aWYodGhpcy5tZW51LnNldEVsZXZhdGlvbil7bGV0IHQ9MCxlPXRoaXMubWVudS5wYXJlbnRNZW51O2Zvcig7ZTspdCsrLGU9ZS5wYXJlbnRNZW51O3RoaXMubWVudS5zZXRFbGV2YXRpb24odCl9fV9zZXRJc01lbnVPcGVuKHQpe3RoaXMuX21lbnVPcGVuPXQsdGhpcy5fbWVudU9wZW4/dGhpcy5tZW51T3BlbmVkLmVtaXQoKTp0aGlzLm1lbnVDbG9zZWQuZW1pdCgpLHRoaXMudHJpZ2dlcnNTdWJtZW51KCkmJnRoaXMuX21lbnVJdGVtSW5zdGFuY2UuX3NldEhpZ2hsaWdodGVkKHQpfV9jaGVja01lbnUoKXt0aGlzLm1lbnV8fCJ1bmRlZmluZWQiIT10eXBlb2YgbmdEZXZNb2RlJiYhbmdEZXZNb2RlfHwoCi8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpmdW5jdGlvbiB0KCl7dGhyb3cgRXJyb3IoJ21hdE1lbnVUcmlnZ2VyRm9yOiBtdXN0IHBhc3MgaW4gYW4gbWF0LW1lbnUgaW5zdGFuY2UuXG5cbiAgICBFeGFtcGxlOlxuICAgICAgPG1hdC1tZW51ICNtZW51PSJtYXRNZW51Ij48L21hdC1tZW51PlxuICAgICAgPGJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPSJtZW51Ij48L2J1dHRvbj4nKX0pKCl9X2NyZWF0ZU92ZXJsYXkoKXtpZighdGhpcy5fb3ZlcmxheVJlZil7Y29uc3QgdD10aGlzLl9nZXRPdmVybGF5Q29uZmlnKCk7dGhpcy5fc3Vic2NyaWJlVG9Qb3NpdGlvbnModC5wb3NpdGlvblN0cmF0ZWd5KSx0aGlzLl9vdmVybGF5UmVmPXRoaXMuX292ZXJsYXkuY3JlYXRlKHQpLHRoaXMuX292ZXJsYXlSZWYua2V5ZG93bkV2ZW50cygpLnN1YnNjcmliZSgpfXJldHVybiB0aGlzLl9vdmVybGF5UmVmfV9nZXRPdmVybGF5Q29uZmlnKCl7cmV0dXJuIG5ldyBWRih7cG9zaXRpb25TdHJhdGVneTp0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9lbGVtZW50KS53aXRoTG9ja2VkUG9zaXRpb24oKS53aXRoR3Jvd0FmdGVyT3BlbigpLndpdGhUcmFuc2Zvcm1PcmlnaW5PbigiLm1hdC1tZW51LXBhbmVsLCAubWF0LW1kYy1tZW51LXBhbmVsIiksYmFja2Ryb3BDbGFzczp0aGlzLm1lbnUuYmFja2Ryb3BDbGFzc3x8ImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIixwYW5lbENsYXNzOnRoaXMubWVudS5vdmVybGF5UGFuZWxDbGFzcyxzY3JvbGxTdHJhdGVneTp0aGlzLl9zY3JvbGxTdHJhdGVneSgpLGRpcmVjdGlvbjp0aGlzLl9kaXJ9KX1fc3Vic2NyaWJlVG9Qb3NpdGlvbnModCl7dGhpcy5tZW51LnNldFBvc2l0aW9uQ2xhc3NlcyYmdC5wb3NpdGlvbkNoYW5nZXMuc3Vic2NyaWJlKCh0PT57dGhpcy5tZW51LnNldFBvc2l0aW9uQ2xhc3Nlcygic3RhcnQiPT09dC5jb25uZWN0aW9uUGFpci5vdmVybGF5WD8iYWZ0ZXIiOiJiZWZvcmUiLCJ0b3AiPT09dC5jb25uZWN0aW9uUGFpci5vdmVybGF5WT8iYmVsb3ciOiJhYm92ZSIpfSkpfV9zZXRQb3NpdGlvbih0KXtsZXRbZSxuXT0iYmVmb3JlIj09PXRoaXMubWVudS54UG9zaXRpb24/WyJlbmQiLCJzdGFydCJdOlsic3RhcnQiLCJlbmQiXSxbbyxpXT0iYWJvdmUiPT09dGhpcy5tZW51LnlQb3NpdGlvbj9bImJvdHRvbSIsInRvcCJdOlsidG9wIiwiYm90dG9tIl0sW2Escl09W28saV0sW3MsbF09W2Usbl0sYz0wO3RoaXMudHJpZ2dlcnNTdWJtZW51KCk/KGw9ZT0iYmVmb3JlIj09PXRoaXMubWVudS54UG9zaXRpb24/InN0YXJ0IjoiZW5kIixuPXM9ImVuZCI9PT1lPyJzdGFydCI6ImVuZCIsYz0iYm90dG9tIj09PW8/ODotOCk6dGhpcy5tZW51Lm92ZXJsYXBUcmlnZ2VyfHwoYT0idG9wIj09PW8/ImJvdHRvbSI6InRvcCIscj0idG9wIj09PWk/ImJvdHRvbSI6InRvcCIpLHQud2l0aFBvc2l0aW9ucyhbe29yaWdpblg6ZSxvcmlnaW5ZOmEsb3ZlcmxheVg6cyxvdmVybGF5WTpvLG9mZnNldFk6Y30se29yaWdpblg6bixvcmlnaW5ZOmEsb3ZlcmxheVg6bCxvdmVybGF5WTpvLG9mZnNldFk6Y30se29yaWdpblg6ZSxvcmlnaW5ZOnIsb3ZlcmxheVg6cyxvdmVybGF5WTppLG9mZnNldFk6LWN9LHtvcmlnaW5YOm4sb3JpZ2luWTpyLG92ZXJsYXlYOmwsb3ZlcmxheVk6aSxvZmZzZXRZOi1jfV0pfV9tZW51Q2xvc2luZ0FjdGlvbnMoKXtjb25zdCB0PXRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLGU9dGhpcy5fb3ZlcmxheVJlZi5kZXRhY2htZW50cygpO3JldHVybiByZSh0LHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT90aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuY2xvc2VkOkV0KCksdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51P3RoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpLnBpcGUoY2UoKHQ9PnQhPT10aGlzLl9tZW51SXRlbUluc3RhbmNlKSksY2UoKCgpPT50aGlzLl9tZW51T3BlbikpKTpFdCgpLGUpfV9oYW5kbGVNb3VzZWRvd24odCl7Z0kodCl8fCh0aGlzLl9vcGVuZWRCeT0wPT09dC5idXR0b24/Im1vdXNlIjp2b2lkIDAsdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSYmdC5wcmV2ZW50RGVmYXVsdCgpKX1faGFuZGxlS2V5ZG93bih0KXtjb25zdCBlPXQua2V5Q29kZTtlIT09bXomJmUhPT1menx8KHRoaXMuX29wZW5lZEJ5PSJrZXlib2FyZCIpLHRoaXMudHJpZ2dlcnNTdWJtZW51KCkmJigzOT09PWUmJiJsdHIiPT09dGhpcy5kaXJ8fDM3PT09ZSYmInJ0bCI9PT10aGlzLmRpcikmJih0aGlzLl9vcGVuZWRCeT0ia2V5Ym9hcmQiLHRoaXMub3Blbk1lbnUoKSl9X2hhbmRsZUNsaWNrKHQpe3RoaXMudHJpZ2dlcnNTdWJtZW51KCk/KHQuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vcGVuTWVudSgpKTp0aGlzLnRvZ2dsZU1lbnUoKX1faGFuZGxlSG92ZXIoKXt0aGlzLnRyaWdnZXJzU3VibWVudSgpJiZ0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUmJih0aGlzLl9ob3ZlclN1YnNjcmlwdGlvbj10aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuX2hvdmVyZWQoKS5waXBlKGNlKCh0PT50PT09dGhpcy5fbWVudUl0ZW1JbnN0YW5jZSYmIXQuZGlzYWJsZWQpKSxDZSgwLCQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fb3BlbmVkQnk9Im1vdXNlIix0aGlzLm1lbnUgaW5zdGFuY2VvZiBYVyYmdGhpcy5tZW51Ll9pc0FuaW1hdGluZz90aGlzLm1lbnUuX2FuaW1hdGlvbkRvbmUucGlwZShiZSgxKSxDZSgwLCQpLEllKHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpKSkuc3Vic2NyaWJlKCgoKT0+dGhpcy5vcGVuTWVudSgpKSk6dGhpcy5vcGVuTWVudSgpfSkpKX1fZ2V0UG9ydGFsKCl7cmV0dXJuIHRoaXMuX3BvcnRhbCYmdGhpcy5fcG9ydGFsLnRlbXBsYXRlUmVmPT09dGhpcy5tZW51LnRlbXBsYXRlUmVmfHwodGhpcy5fcG9ydGFsPW5ldyB4Rih0aGlzLm1lbnUudGVtcGxhdGVSZWYsdGhpcy5fdmlld0NvbnRhaW5lclJlZikpLHRoaXMuX3BvcnRhbH19ZVkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGVZKShTbShwTCksU20oaGcpLFNtKGVoKSxTbShKVyksU20oVVcsOCksU20oV1csMTApLFNtKEhJLDgpLFNtKFNJKSl9LGVZLsm1ZGlyPWxvKHt0eXBlOmVZLHNlbGVjdG9yczpbWyIiLCJtYXQtbWVudS10cmlnZ2VyLWZvciIsIiJdLFsiIiwibWF0TWVudVRyaWdnZXJGb3IiLCIiXV0saG9zdEF0dHJzOlsiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsIm1hdC1tZW51LXRyaWdnZXIiXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZWbSgibW91c2Vkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlTW91c2Vkb3duKGUpfSkpKCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlS2V5ZG93bihlKX0pKSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9oYW5kbGVDbGljayhlKX0pKSwyJmUmJmpwKCJhcmlhLWV4cGFuZGVkIixuLm1lbnVPcGVufHxudWxsKSgiYXJpYS1jb250cm9scyIsbi5tZW51T3Blbj9uLm1lbnUucGFuZWxJZDpudWxsKX0saW5wdXRzOntyZXN0b3JlRm9jdXM6WyJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyIsInJlc3RvcmVGb2N1cyJdLF9kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3I6WyJtYXQtbWVudS10cmlnZ2VyLWZvciIsIl9kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3IiXSxtZW51OlsibWF0TWVudVRyaWdnZXJGb3IiLCJtZW51Il0sbWVudURhdGE6WyJtYXRNZW51VHJpZ2dlckRhdGEiLCJtZW51RGF0YSJdfSxvdXRwdXRzOnttZW51T3BlbmVkOiJtZW51T3BlbmVkIixvbk1lbnVPcGVuOiJvbk1lbnVPcGVuIixtZW51Q2xvc2VkOiJtZW51Q2xvc2VkIixvbk1lbnVDbG9zZToib25NZW51Q2xvc2UifSxleHBvcnRBczpbIm1hdE1lbnVUcmlnZ2VyIl19KSxlWS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnBMfSx7dHlwZTpoZ30se3R5cGU6ZWh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltKV119XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1VXXX0se3R5cGU6U3J9XX0se3R5cGU6V1csZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOkRyfV19LHt0eXBlOkhJLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOlNJfV0sZVkucHJvcERlY29yYXRvcnM9e19kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3I6W3t0eXBlOnh5LGFyZ3M6WyJtYXQtbWVudS10cmlnZ2VyLWZvciJdfV0sbWVudTpbe3R5cGU6eHksYXJnczpbIm1hdE1lbnVUcmlnZ2VyRm9yIl19XSxtZW51RGF0YTpbe3R5cGU6eHksYXJnczpbIm1hdE1lbnVUcmlnZ2VyRGF0YSJdfV0scmVzdG9yZUZvY3VzOlt7dHlwZTp4eSxhcmdzOlsibWF0TWVudVRyaWdnZXJSZXN0b3JlRm9jdXMiXX1dLG1lbnVPcGVuZWQ6W3t0eXBlOk95fV0sb25NZW51T3Blbjpbe3R5cGU6T3l9XSxtZW51Q2xvc2VkOlt7dHlwZTpPeX1dLG9uTWVudUNsb3NlOlt7dHlwZTpPeX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGVZLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6IlttYXQtbWVudS10cmlnZ2VyLWZvcl0sIFttYXRNZW51VHJpZ2dlckZvcl0iLGhvc3Q6e2NsYXNzOiJtYXQtbWVudS10cmlnZ2VyIiwiYXJpYS1oYXNwb3B1cCI6InRydWUiLCJbYXR0ci5hcmlhLWV4cGFuZGVkXSI6Im1lbnVPcGVuIHx8IG51bGwiLCJbYXR0ci5hcmlhLWNvbnRyb2xzXSI6Im1lbnVPcGVuID8gbWVudS5wYW5lbElkIDogbnVsbCIsIihtb3VzZWRvd24pIjoiX2hhbmRsZU1vdXNlZG93bigkZXZlbnQpIiwiKGtleWRvd24pIjoiX2hhbmRsZUtleWRvd24oJGV2ZW50KSIsIihjbGljaykiOiJfaGFuZGxlQ2xpY2soJGV2ZW50KSJ9LGV4cG9ydEFzOiJtYXRNZW51VHJpZ2dlciJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpwTH0se3R5cGU6aGd9LHt0eXBlOmVofSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbSlddfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltVV119LHt0eXBlOlNyfV19LHt0eXBlOldXLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpEcn1dfSx7dHlwZTpISSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTpTSX1dfSkse3Jlc3RvcmVGb2N1czpbe3R5cGU6eHksYXJnczpbIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl19XSxtZW51T3BlbmVkOlt7dHlwZTpPeX1dLG9uTWVudU9wZW46W3t0eXBlOk95fV0sbWVudUNsb3NlZDpbe3R5cGU6T3l9XSxvbk1lbnVDbG9zZTpbe3R5cGU6T3l9XSxfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yOlt7dHlwZTp4eSxhcmdzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiXX1dLG1lbnU6W3t0eXBlOnh5LGFyZ3M6WyJtYXRNZW51VHJpZ2dlckZvciJdfV0sbWVudURhdGE6W3t0eXBlOnh5LGFyZ3M6WyJtYXRNZW51VHJpZ2dlckRhdGEiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBuWXt9blkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG5ZKX0sblkuybVtb2Q9YW8oe3R5cGU6bll9KSxuWS7JtWluaj12bih7cHJvdmlkZXJzOltRV10saW1wb3J0czpbWEldfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChuWSxbe3R5cGU6QXksYXJnczpbe2V4cG9ydHM6W2VZLGpXLFhJXSxkZWNsYXJhdGlvbnM6W2VZLGpXXSxwcm92aWRlcnM6W1FXXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKG5ZLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bZVksalddfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW2VZLGpXLFhJXX19KTtjbGFzcyBvWXt9ZnVuY3Rpb24gaVkodCxlKXsxJnQmJlRtKDAsIm1hdC1pY29uIiw4KX1mdW5jdGlvbiBhWSh0LGUpezEmdCYmVG0oMCwibWF0LWljb24iLDkpfWZ1bmN0aW9uIHJZKHQsZSl7MSZ0JiZUbSgwLCJtYXQtaWNvbiIsMTApfXZhciBzWTtvWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8b1kpfSxvWS7JtW1vZD1hbyh7dHlwZTpvWX0pLG9ZLsm1aW5qPXZuKHtwcm92aWRlcnM6W1FXXSxpbXBvcnRzOltbV00sWEksU0gseUwsblldLHlGLFhJLG5ZXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgob1ksW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltXTSxYSSxTSCx5TCxuWV0sZXhwb3J0czpbeUYsWEksS1csV1csblldLGRlY2xhcmF0aW9uczpbS1csV1ddLHByb3ZpZGVyczpbUVddfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8ob1kse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltLVyxXV119LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bV00sWEksU0gseUwsblldfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW3lGLFhJLEtXLFdXLG5ZXX19KSwoZnVuY3Rpb24odCl7dFt0LkRFRkFVTFQ9MF09IkRFRkFVTFQiLHRbdC5EQVJLX01PREVfT049MV09IkRBUktfTU9ERV9PTiIsdFt0LkRBUktfTU9ERV9PRkY9Ml09IkRBUktfTU9ERV9PRkYifSkoc1l8fChzWT17fSkpO2NsYXNzIGxZe2NvbnN0cnVjdG9yKCl7dGhpcy5EYXJrTW9kZU92ZXJyaWRlPXNZLHRoaXMub25PdmVycmlkZUNoYW5nZWQ9bmV3IExofWdldEJ1dHRvblRpdGxlKCl7bGV0IHQ7c3dpdGNoKHRoaXMuZGFya01vZGVPdmVycmlkZSl7Y2FzZSBzWS5ERUZBVUxUOnQ9IkJyb3dzZXIgZGVmYXVsdCI7YnJlYWs7Y2FzZSBzWS5EQVJLX01PREVfT046dD0iRGFyayBtb2RlIjticmVhaztjYXNlIHNZLkRBUktfTU9ERV9PRkY6dD0iTGlnaHQgbW9kZSJ9cmV0dXJuYEN1cnJlbnQgbW9kZTogWyR7dH1dLiBTd2l0Y2ggYmV0d2VlbiBicm93c2VyIGRlZmF1bHQsIGxpZ2h0LCBvciBkYXJrIHRoZW1lLmB9fWxZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxsWSl9LGxZLsm1Y21wPXRvKHt0eXBlOmxZLHNlbGVjdG9yczpbWyJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUtY29tcG9uZW50Il1dLGlucHV0czp7ZGFya01vZGVPdmVycmlkZToiZGFya01vZGVPdmVycmlkZSJ9LG91dHB1dHM6e29uT3ZlcnJpZGVDaGFuZ2VkOiJvbk92ZXJyaWRlQ2hhbmdlZCJ9LGRlY2xzOjE1LHZhcnM6Nixjb25zdHM6W1sibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsIk1lbnUgZm9yIGNoYW5naW5nIGxpZ2h0IG9yIGRhcmsgdGhlbWUiLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIiwibmdTd2l0Y2giLCJ0aXRsZSJdLFsic3ZnSWNvbiIsImJyaWdodG5lc3NfNl8yNHB4Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInN2Z0ljb24iLCJsaWdodF9tb2RlXzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic3ZnSWNvbiIsImRhcmtfbW9kZV8yNHB4Iiw0LCJuZ1N3aXRjaENhc2UiXSxbIm1lbnUiLCJtYXRNZW51Il0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJTZXQgdGhlIHRoZW1lIHRvIG1hdGNoIHRoZSBkZWZhdWx0IG1vZGUgaW4gdGhlIGJyb3dzZXIuIiwzLCJjbGljayJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInRpdGxlIiwiRm9yY2UgbGlnaHQgVGVuc29yQm9hcmQgdGhlbWUuIiwzLCJjbGljayJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInRpdGxlIiwiRm9yY2UgZGFyayBUZW5zb3JCb2FyZCB0aGVtZS4iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiYnJpZ2h0bmVzc182XzI0cHgiXSxbInN2Z0ljb24iLCJsaWdodF9tb2RlXzI0cHgiXSxbInN2Z0ljb24iLCJkYXJrX21vZGVfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiYnV0dG9uIiwwKSxRcCgxLGlZLDEsMCwibWF0LWljb24iLDEpLFFwKDIsYVksMSwwLCJtYXQtaWNvbiIsMiksUXAoMyxyWSwxLDAsIm1hdC1pY29uIiwzKSxBbSgpLFJtKDQsIm1hdC1tZW51IixudWxsLDQpLFJtKDYsImJ1dHRvbiIsNSksVm0oImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uT3ZlcnJpZGVDaGFuZ2VkLmVtaXQobi5EYXJrTW9kZU92ZXJyaWRlLkRFRkFVTFQpfSkpLFJtKDcsImxhYmVsIiksa3UoOCwiQnJvd3NlciBkZWZhdWx0IiksQW0oKSxBbSgpLFJtKDksImJ1dHRvbiIsNiksVm0oImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uT3ZlcnJpZGVDaGFuZ2VkLmVtaXQobi5EYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PRkYpfSkpLFJtKDEwLCJsYWJlbCIpLGt1KDExLCJMaWdodCIpLEFtKCksQW0oKSxSbSgxMiwiYnV0dG9uIiw3KSxWbSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25PdmVycmlkZUNoYW5nZWQuZW1pdChuLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09OKX0pKSxSbSgxMywibGFiZWwiKSxrdSgxNCwiRGFyayIpLEFtKCksQW0oKSxBbSgpKSwyJmUmJihEbSgibWF0TWVudVRyaWdnZXJGb3IiLCRwKDUpKSgibmdTd2l0Y2giLG4uZGFya01vZGVPdmVycmlkZSkoInRpdGxlIixuLmdldEJ1dHRvblRpdGxlKCkpLHJjKDEpLERtKCJuZ1N3aXRjaENhc2UiLG4uRGFya01vZGVPdmVycmlkZS5ERUZBVUxUKSxyYygxKSxEbSgibmdTd2l0Y2hDYXNlIixuLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09GRikscmMoMSksRG0oIm5nU3dpdGNoQ2FzZSIsbi5EYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PTikpfSxkaXJlY3RpdmVzOltYSCxlWSxmTSxnTSxLVyxXVyxEV10sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChsWSxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUtY29tcG9uZW50Iix0ZW1wbGF0ZTonXG4gICAgPGJ1dHRvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJtZW51IlxuICAgICAgYXJpYS1sYWJlbD0iTWVudSBmb3IgY2hhbmdpbmcgbGlnaHQgb3IgZGFyayB0aGVtZSJcbiAgICAgIFtuZ1N3aXRjaF09ImRhcmtNb2RlT3ZlcnJpZGUiXG4gICAgICBbdGl0bGVdPSJnZXRCdXR0b25UaXRsZSgpIlxuICAgID5cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICAqbmdTd2l0Y2hDYXNlPSJEYXJrTW9kZU92ZXJyaWRlLkRFRkFVTFQiXG4gICAgICAgIHN2Z0ljb249ImJyaWdodG5lc3NfNl8yNHB4IlxuICAgICAgPjwvbWF0LWljb24+XG4gICAgICA8bWF0LWljb25cbiAgICAgICAgKm5nU3dpdGNoQ2FzZT0iRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT0ZGIlxuICAgICAgICBzdmdJY29uPSJsaWdodF9tb2RlXzI0cHgiXG4gICAgICA+PC9tYXQtaWNvbj5cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICAqbmdTd2l0Y2hDYXNlPSJEYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PTiJcbiAgICAgICAgc3ZnSWNvbj0iZGFya19tb2RlXzI0cHgiXG4gICAgICA+PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bWF0LW1lbnUgI21lbnU9Im1hdE1lbnUiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgIHRpdGxlPSJTZXQgdGhlIHRoZW1lIHRvIG1hdGNoIHRoZSBkZWZhdWx0IG1vZGUgaW4gdGhlIGJyb3dzZXIuIlxuICAgICAgICAoY2xpY2spPSJvbk92ZXJyaWRlQ2hhbmdlZC5lbWl0KERhcmtNb2RlT3ZlcnJpZGUuREVGQVVMVCkiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbD5Ccm93c2VyIGRlZmF1bHQ8L2xhYmVsPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgdGl0bGU9IkZvcmNlIGxpZ2h0IFRlbnNvckJvYXJkIHRoZW1lLiJcbiAgICAgICAgKGNsaWNrKT0ib25PdmVycmlkZUNoYW5nZWQuZW1pdChEYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PRkYpIlxuICAgICAgPlxuICAgICAgICA8bGFiZWw+TGlnaHQ8L2xhYmVsPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgdGl0bGU9IkZvcmNlIGRhcmsgVGVuc29yQm9hcmQgdGhlbWUuIlxuICAgICAgICAoY2xpY2spPSJvbk92ZXJyaWRlQ2hhbmdlZC5lbWl0KERhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09OKSJcbiAgICAgID5cbiAgICAgICAgPGxhYmVsPkRhcms8L2xhYmVsPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtbWVudT5cbiAgJ31dfV0sbnVsbCx7ZGFya01vZGVPdmVycmlkZTpbe3R5cGU6eHl9XSxvbk92ZXJyaWRlQ2hhbmdlZDpbe3R5cGU6T3l9XX0pO2NsYXNzIGNZe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmRhcmtNb2RlT3ZlcnJpZGUkPXRoaXMuc3RvcmUuc2VsZWN0KFFEKS5waXBlKEl0KCh0PT5udWxsPT09dD9zWS5ERUZBVUxUOnQ/c1kuREFSS19NT0RFX09OOnNZLkRBUktfTU9ERV9PRkYpKSl9Y2hhbmdlRGFya01vZGUodCl7bGV0IGU9bnVsbDtzd2l0Y2godCl7Y2FzZSBzWS5ERUZBVUxUOmU9bnVsbDticmVhaztjYXNlIHNZLkRBUktfTU9ERV9PRkY6ZT0hMTticmVhaztjYXNlIHNZLkRBUktfTU9ERV9PTjplPSEwfXRoaXMuc3RvcmUuZGlzcGF0Y2goV0Eoe2VuYWJsZURhcmtNb2RlOmV9KSl9fWNZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxjWSkoU20oSXcpKX0sY1kuybVjbXA9dG8oe3R5cGU6Y1ksc2VsZWN0b3JzOltbImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZSJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJkYXJrTW9kZU92ZXJyaWRlIiwib25PdmVycmlkZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZS1jb21wb25lbnQiLDApLFZtKCJvbk92ZXJyaWRlQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uY2hhbmdlRGFya01vZGUoZSl9KSksQWgoMSwiYXN5bmMiKSxBbSgpKSwyJmUmJkRtKCJkYXJrTW9kZU92ZXJyaWRlIixUaCgxLDEsbi5kYXJrTW9kZU92ZXJyaWRlJCkpfSxkaXJlY3RpdmVzOltsWV0scGlwZXM6W3dNXSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGNZLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6ImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZSIsdGVtcGxhdGU6J1xuICAgIDxhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUtY29tcG9uZW50XG4gICAgICBbZGFya01vZGVPdmVycmlkZV09ImRhcmtNb2RlT3ZlcnJpZGUkIHwgYXN5bmMiXG4gICAgICAob25PdmVycmlkZUNoYW5nZWQpPSJjaGFuZ2VEYXJrTW9kZSgkZXZlbnQpIlxuICAgID5cbiAgICA8L2FwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZS1jb21wb25lbnQ+XG4gICd9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd31dfSksbnVsbCk7Y29uc3QgZFk9WncodlIsTVIsKCh0LGUpPT4hKCFlfHwhdFtlXSkmJnRbZV0uZGlzYWJsZV9yZWxvYWQpKTtjbGFzcyBwWXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5yZWxvYWREaXNhYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoZFkpLHRoaXMuaXNSZWxvYWRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KF9SKS5waXBlKGZlKHRoaXMucmVsb2FkRGlzYWJsZWQkKSxJdCgoKFt0LGVdKT0+IWUmJnQ9PT15RS5MT0FESU5HKSkpLHRoaXMubGFzdExvYWRlZFRpbWVJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChDUil9dHJpZ2dlclJlbG9hZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2godkUoKSl9Z2V0UmVsb2FkVGl0bGUodCl7cmV0dXJuIHQ/YExhc3QgVXBkYXRlZDogJHt0fWA6IkxvYWRpbmcuLi4ifX1mdW5jdGlvbiBtWSh0KXtyZXR1cm4gdC5zdGF0ZSE9PXlFLk5PVF9MT0FERUQmJnQuc3RhdGUhPT15RS5MT0FESU5HfXBZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxwWSkoU20oSXcpKX0scFkuybVjbXA9dG8oe3R5cGU6cFksc2VsZWN0b3JzOltbImFwcC1oZWFkZXItcmVsb2FkIl1dLGRlY2xzOjYsdmFyczoxMyxjb25zdHM6W1sibWF0LWljb24tYnV0dG9uIiwiIiwxLCJyZWxvYWQtYnV0dG9uIiwzLCJ0aXRsZSIsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJyZWZyZXNoXzI0cHgiLDEsInJlZnJlc2gtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiYnV0dG9uIiwwKSxWbSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4udHJpZ2dlclJlbG9hZCgpfSkpLEFoKDEsImFzeW5jIiksQWgoMiwiZGF0ZSIpLEFoKDMsImFzeW5jIiksQWgoNCwiYXN5bmMiKSxUbSg1LCJtYXQtaWNvbiIsMSksQW0oKSksMiZlJiYocHUoImxvYWRpbmciLFRoKDEsNCxuLmlzUmVsb2FkaW5nJCkpLERtKCJ0aXRsZSIsbi5nZXRSZWxvYWRUaXRsZShOaCgyLDYsVGgoMyw5LG4ubGFzdExvYWRlZFRpbWVJbk1zJCksIm1lZGl1bSIpKSkoImRpc2FibGVkIixUaCg0LDExLG4ucmVsb2FkRGlzYWJsZWQkKSkpfSxkaXJlY3RpdmVzOltYSCxEV10scGlwZXM6W3dNLFJNXSxzdHlsZXM6WyIucmVsb2FkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5yZWZyZXNoLWljb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5yZWxvYWQtYnV0dG9uLmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYW5pbWF0aW9uOiByb3RhdGUgMnMgbGluZWFyIGluZmluaXRlO1xuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIHJvdGF0ZSB7XG4gICAgICAgIDAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgfVxuICAgICAgICA1MCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgIH1cbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgICAgICAgfVxuICAgICAgfSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChwWSxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJhcHAtaGVhZGVyLXJlbG9hZCIsdGVtcGxhdGU6J1xuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPSJyZWxvYWQtYnV0dG9uIlxuICAgICAgW2NsYXNzLmxvYWRpbmddPSJpc1JlbG9hZGluZyQgfCBhc3luYyJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgKGNsaWNrKT0idHJpZ2dlclJlbG9hZCgpIlxuICAgICAgW3RpdGxlXT0iZ2V0UmVsb2FkVGl0bGUobGFzdExvYWRlZFRpbWVJbk1zJCB8IGFzeW5jIHwgZGF0ZTogXCdtZWRpdW1cJykiXG4gICAgICBbZGlzYWJsZWRdPSJyZWxvYWREaXNhYmxlZCQgfCBhc3luYyJcbiAgICA+XG4gICAgICA8bWF0LWljb24gY2xhc3M9InJlZnJlc2gtaWNvbiIgc3ZnSWNvbj0icmVmcmVzaF8yNHB4Ij48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAnLHN0eWxlczpbIlxuICAgICAgLnJlbG9hZC1idXR0b24sXG4gICAgICAucmVmcmVzaC1pY29uIHtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5yZWxvYWQtYnV0dG9uLmxvYWRpbmcge1xuICAgICAgICBhbmltYXRpb246IHJvdGF0ZSAycyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgcm90YXRlIHtcbiAgICAgICAgMCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICB9XG4gICAgICAgIDUwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICAgICAgfVxuICAgICAgICAxMDAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd31dfSksbnVsbCk7Y29uc3QgdVk9eWsod04sYmsodk4sKHQ9Pm1ZKHQpP09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2V0dGluZ3M6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ3MpLHtyZWxvYWRFbmFibGVkOiF0LnNldHRpbmdzLnJlbG9hZEVuYWJsZWR9KX0pOnQpKSxiayh4TiwoKHQse3BlcmlvZEluTXM6ZX0pPT57aWYoIW1ZKHQpKXJldHVybiB0O2NvbnN0IG49ZT49M2U0P2U6dC5zZXR0aW5ncy5yZWxvYWRQZXJpb2RJbk1zO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdzKSx7cmVsb2FkUGVyaW9kSW5NczpufSl9KX0pKSxiayhPTiwoKHQse3NpemU6ZX0pPT57aWYoIW1ZKHQpKXJldHVybiB0O2NvbnN0IG49ZT4wP2U6dC5zZXR0aW5ncy5wYWdlU2l6ZTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZXR0aW5nczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zZXR0aW5ncykse3BhZ2VTaXplOm59KX0pfSkpLGJrKFdTLCgodCx7cGFydGlhbFNldHRpbmdzOmV9KT0+e2NvbnN0IG49e307cmV0dXJuIE51bWJlci5pc0Zpbml0ZShlLnBhZ2VTaXplKSYmZS5wYWdlU2l6ZT4wJiYobi5wYWdlU2l6ZT1lLnBhZ2VTaXplKSwiYm9vbGVhbiI9PXR5cGVvZiBlLmF1dG9SZWxvYWQmJihuLnJlbG9hZEVuYWJsZWQ9ZS5hdXRvUmVsb2FkKSxOdW1iZXIuaXNGaW5pdGUoZS5hdXRvUmVsb2FkUGVyaW9kSW5NcykmJmUuYXV0b1JlbG9hZFBlcmlvZEluTXM+M2U0JiYobi5yZWxvYWRQZXJpb2RJbk1zPWUuYXV0b1JlbG9hZFBlcmlvZEluTXMpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2V0dGluZ3M6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ3MpLG4pfSl9KSkpO2Z1bmN0aW9uIGZZKHQsZSl7cmV0dXJuIHVZKHQsZSl9Y29uc3QgZ1k9WyJpbnB1dCJdLGhZPWZ1bmN0aW9uKHQpe3JldHVybntlbnRlckR1cmF0aW9uOnR9fSxiWT1uZXcgR2EoIm1hdC1jaGVja2JveC1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIHlZKCl7cmV0dXJue2NvbG9yOiJhY2NlbnQiLGNsaWNrQWN0aW9uOiJjaGVjay1pbmRldGVybWluYXRlIn19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL30pO2xldCBfWT0wO2NvbnN0IENZPXtjb2xvcjoiYWNjZW50IixjbGlja0FjdGlvbjoiY2hlY2staW5kZXRlcm1pbmF0ZSJ9LE1ZPXtwcm92aWRlOklWLHVzZUV4aXN0aW5nOnFlKCgoKT0+T1kpKSxtdWx0aTohMH07Y2xhc3Mgdll7fWNvbnN0IHhZPSRJKEpJKFFJKEtJKGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH19KSkpKTtjbGFzcyBPWSBleHRlbmRzIHhZe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIpe3N1cGVyKHQpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fZm9jdXNNb25pdG9yPW4sdGhpcy5fbmdab25lPW8sdGhpcy5fYW5pbWF0aW9uTW9kZT1hLHRoaXMuX29wdGlvbnM9cix0aGlzLmFyaWFMYWJlbD0iIix0aGlzLmFyaWFMYWJlbGxlZGJ5PW51bGwsdGhpcy5fdW5pcXVlSWQ9Im1hdC1jaGVja2JveC0iKyArK19ZLHRoaXMuaWQ9dGhpcy5fdW5pcXVlSWQsdGhpcy5sYWJlbFBvc2l0aW9uPSJhZnRlciIsdGhpcy5uYW1lPW51bGwsdGhpcy5jaGFuZ2U9bmV3IExoLHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZT1uZXcgTGgsdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3M9IiIsdGhpcy5fY3VycmVudENoZWNrU3RhdGU9MCx0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPSgpPT57fSx0aGlzLl9jaGVja2VkPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX2luZGV0ZXJtaW5hdGU9ITEsdGhpcy5fb3B0aW9ucz10aGlzLl9vcHRpb25zfHxDWSx0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPXRoaXMuX29wdGlvbnMuY29sb3J8fENZLmNvbG9yLHRoaXMudGFiSW5kZXg9cGFyc2VJbnQoaSl8fDB9Z2V0IGlucHV0SWQoKXtyZXR1cm5gJHt0aGlzLmlkfHx0aGlzLl91bmlxdWVJZH0taW5wdXRgfWdldCByZXF1aXJlZCgpe3JldHVybiB0aGlzLl9yZXF1aXJlZH1zZXQgcmVxdWlyZWQodCl7dGhpcy5fcmVxdWlyZWQ9eXoodCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCkuc3Vic2NyaWJlKCh0PT57dHx8UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9Pnt0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKX0pKSx0aGlzLl9zeW5jSW5kZXRlcm1pbmF0ZSh0aGlzLl9pbmRldGVybWluYXRlKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZil9Z2V0IGNoZWNrZWQoKXtyZXR1cm4gdGhpcy5fY2hlY2tlZH1zZXQgY2hlY2tlZCh0KXt0IT10aGlzLmNoZWNrZWQmJih0aGlzLl9jaGVja2VkPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7Y29uc3QgZT15eih0KTtlIT09dGhpcy5kaXNhYmxlZCYmKHRoaXMuX2Rpc2FibGVkPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldCBpbmRldGVybWluYXRlKCl7cmV0dXJuIHRoaXMuX2luZGV0ZXJtaW5hdGV9c2V0IGluZGV0ZXJtaW5hdGUodCl7Y29uc3QgZT10IT10aGlzLl9pbmRldGVybWluYXRlO3RoaXMuX2luZGV0ZXJtaW5hdGU9eXoodCksZSYmKHRoaXMuX3RyYW5zaXRpb25DaGVja1N0YXRlKHRoaXMuX2luZGV0ZXJtaW5hdGU/Mzp0aGlzLmNoZWNrZWQ/MToyKSx0aGlzLmluZGV0ZXJtaW5hdGVDaGFuZ2UuZW1pdCh0aGlzLl9pbmRldGVybWluYXRlKSksdGhpcy5fc3luY0luZGV0ZXJtaW5hdGUodGhpcy5faW5kZXRlcm1pbmF0ZSl9X2lzUmlwcGxlRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlUmlwcGxlfHx0aGlzLmRpc2FibGVkfV9vbkxhYmVsVGV4dENoYW5nZSgpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKX13cml0ZVZhbHVlKHQpe3RoaXMuY2hlY2tlZD0hIXR9cmVnaXN0ZXJPbkNoYW5nZSh0KXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPXR9cmVnaXN0ZXJPblRvdWNoZWQodCl7dGhpcy5fb25Ub3VjaGVkPXR9c2V0RGlzYWJsZWRTdGF0ZSh0KXt0aGlzLmRpc2FibGVkPXR9X2dldEFyaWFDaGVja2VkKCl7cmV0dXJuIHRoaXMuY2hlY2tlZD8idHJ1ZSI6dGhpcy5pbmRldGVybWluYXRlPyJtaXhlZCI6ImZhbHNlIn1fdHJhbnNpdGlvbkNoZWNrU3RhdGUodCl7bGV0IGU9dGhpcy5fY3VycmVudENoZWNrU3RhdGUsbj10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aWYoZSE9PXQmJih0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3MubGVuZ3RoPjAmJm4uY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3MpLHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcz10aGlzLl9nZXRBbmltYXRpb25DbGFzc0ZvckNoZWNrU3RhdGVUcmFuc2l0aW9uKGUsdCksdGhpcy5fY3VycmVudENoZWNrU3RhdGU9dCx0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3MubGVuZ3RoPjApKXtuLmNsYXNzTGlzdC5hZGQodGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzKTtjb25zdCB0PXRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57c2V0VGltZW91dCgoKCk9PntuLmNsYXNzTGlzdC5yZW1vdmUodCl9KSwxZTMpfSkpfX1fZW1pdENoYW5nZUV2ZW50KCl7Y29uc3QgdD1uZXcgdlk7dC5zb3VyY2U9dGhpcyx0LmNoZWNrZWQ9dGhpcy5jaGVja2VkLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4odGhpcy5jaGVja2VkKSx0aGlzLmNoYW5nZS5lbWl0KHQpLHRoaXMuX2lucHV0RWxlbWVudCYmKHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNoZWNrZWQ9dGhpcy5jaGVja2VkKX10b2dnbGUoKXt0aGlzLmNoZWNrZWQ9IXRoaXMuY2hlY2tlZH1fb25JbnB1dENsaWNrKHQpe3ZhciBlO2NvbnN0IG49bnVsbD09PShlPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNsaWNrQWN0aW9uO3Quc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kaXNhYmxlZHx8Im5vb3AiPT09bj90aGlzLmRpc2FibGVkfHwibm9vcCIhPT1ufHwodGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hlY2tlZD10aGlzLmNoZWNrZWQsdGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaW5kZXRlcm1pbmF0ZT10aGlzLmluZGV0ZXJtaW5hdGUpOih0aGlzLmluZGV0ZXJtaW5hdGUmJiJjaGVjayIhPT1uJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+e3RoaXMuX2luZGV0ZXJtaW5hdGU9ITEsdGhpcy5pbmRldGVybWluYXRlQ2hhbmdlLmVtaXQodGhpcy5faW5kZXRlcm1pbmF0ZSl9KSksdGhpcy50b2dnbGUoKSx0aGlzLl90cmFuc2l0aW9uQ2hlY2tTdGF0ZSh0aGlzLl9jaGVja2VkPzE6MiksdGhpcy5fZW1pdENoYW5nZUV2ZW50KCkpfWZvY3VzKHQsZSl7dD90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5faW5wdXRFbGVtZW50LHQsZSk6dGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoZSl9X29uSW50ZXJhY3Rpb25FdmVudCh0KXt0LnN0b3BQcm9wYWdhdGlvbigpfV9nZXRBbmltYXRpb25DbGFzc0ZvckNoZWNrU3RhdGVUcmFuc2l0aW9uKHQsZSl7aWYoIk5vb3BBbmltYXRpb25zIj09PXRoaXMuX2FuaW1hdGlvbk1vZGUpcmV0dXJuIiI7bGV0IG49IiI7c3dpdGNoKHQpe2Nhc2UgMDppZigxPT09ZSluPSJ1bmNoZWNrZWQtY2hlY2tlZCI7ZWxzZXtpZigzIT1lKXJldHVybiIiO249InVuY2hlY2tlZC1pbmRldGVybWluYXRlIn1icmVhaztjYXNlIDI6bj0xPT09ZT8idW5jaGVja2VkLWNoZWNrZWQiOiJ1bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSI7YnJlYWs7Y2FzZSAxOm49Mj09PWU/ImNoZWNrZWQtdW5jaGVja2VkIjoiY2hlY2tlZC1pbmRldGVybWluYXRlIjticmVhaztjYXNlIDM6bj0xPT09ZT8iaW5kZXRlcm1pbmF0ZS1jaGVja2VkIjoiaW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQifXJldHVybmBtYXQtY2hlY2tib3gtYW5pbS0ke259YH1fc3luY0luZGV0ZXJtaW5hdGUodCl7Y29uc3QgZT10aGlzLl9pbnB1dEVsZW1lbnQ7ZSYmKGUubmF0aXZlRWxlbWVudC5pbmRldGVybWluYXRlPXQpfX1PWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8T1kpKFNtKGhnKSxTbShVZyksU20oU0kpLFNtKGFfKSxOYSgidGFiaW5kZXgiKSxTbShWUCw4KSxTbShiWSw4KSl9LE9ZLsm1Y21wPXRvKHt0eXBlOk9ZLHNlbGVjdG9yczpbWyJtYXQtY2hlY2tib3giXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihRaChnWSw1KSxRaChrSCw1KSksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi5faW5wdXRFbGVtZW50PXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLnJpcHBsZT10LmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LWNoZWNrYm94Il0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihUdSgiaWQiLG4uaWQpLGpwKCJ0YWJpbmRleCIsbnVsbCkscHUoIm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIixuLmluZGV0ZXJtaW5hdGUpKCJtYXQtY2hlY2tib3gtY2hlY2tlZCIsbi5jaGVja2VkKSgibWF0LWNoZWNrYm94LWRpc2FibGVkIixuLmRpc2FibGVkKSgibWF0LWNoZWNrYm94LWxhYmVsLWJlZm9yZSIsImJlZm9yZSI9PW4ubGFiZWxQb3NpdGlvbikoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09bi5fYW5pbWF0aW9uTW9kZSkpfSxpbnB1dHM6e2Rpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLGNvbG9yOiJjb2xvciIsdGFiSW5kZXg6InRhYkluZGV4IixhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGlkOiJpZCIsbGFiZWxQb3NpdGlvbjoibGFiZWxQb3NpdGlvbiIsbmFtZToibmFtZSIscmVxdWlyZWQ6InJlcXVpcmVkIixjaGVja2VkOiJjaGVja2VkIixkaXNhYmxlZDoiZGlzYWJsZWQiLGluZGV0ZXJtaW5hdGU6ImluZGV0ZXJtaW5hdGUiLGFyaWFEZXNjcmliZWRieTpbImFyaWEtZGVzY3JpYmVkYnkiLCJhcmlhRGVzY3JpYmVkYnkiXSx2YWx1ZToidmFsdWUifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSIsaW5kZXRlcm1pbmF0ZUNoYW5nZToiaW5kZXRlcm1pbmF0ZUNoYW5nZSJ9LGV4cG9ydEFzOlsibWF0Q2hlY2tib3giXSxmZWF0dXJlczpbcGcoW01ZXSkseHBdLG5nQ29udGVudFNlbGVjdG9yczpbIioiXSxkZWNsczoxNyx2YXJzOjIxLGNvbnN0czpbWzEsIm1hdC1jaGVja2JveC1sYXlvdXQiXSxbImxhYmVsIiwiIl0sWzEsIm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXIiXSxbInR5cGUiLCJjaGVja2JveCIsMSwibWF0LWNoZWNrYm94LWlucHV0IiwiY2RrLXZpc3VhbGx5LWhpZGRlbiIsMywiaWQiLCJyZXF1aXJlZCIsImNoZWNrZWQiLCJkaXNhYmxlZCIsInRhYkluZGV4IiwiY2hhbmdlIiwiY2xpY2siXSxbImlucHV0IiwiIl0sWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1jaGVja2JveC1yaXBwbGUiLCJtYXQtZm9jdXMtaW5kaWNhdG9yIiwzLCJtYXRSaXBwbGVUcmlnZ2VyIiwibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVSYWRpdXMiLCJtYXRSaXBwbGVDZW50ZXJlZCIsIm1hdFJpcHBsZUFuaW1hdGlvbiJdLFsxLCJtYXQtcmlwcGxlLWVsZW1lbnQiLCJtYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGUiXSxbMSwibWF0LWNoZWNrYm94LWZyYW1lIl0sWzEsIm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kIl0sWyJ2ZXJzaW9uIiwiMS4xIiwiZm9jdXNhYmxlIiwiZmFsc2UiLCJ2aWV3Qm94IiwiMCAwIDI0IDI0IiwwLCJ4bWwiLCJzcGFjZSIsInByZXNlcnZlIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtYXQtY2hlY2tib3gtY2hlY2ttYXJrIl0sWyJmaWxsIiwibm9uZSIsInN0cm9rZSIsIndoaXRlIiwiZCIsIk00LjEsMTIuNyA5LDE3LjYgMjAuMyw2LjMiLDEsIm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aCJdLFsxLCJtYXQtY2hlY2tib3gtbWl4ZWRtYXJrIl0sWzEsIm1hdC1jaGVja2JveC1sYWJlbCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbImNoZWNrYm94TGFiZWwiLCIiXSxbMiwiZGlzcGxheSIsIm5vbmUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFptKCksUm0oMCwibGFiZWwiLDAsMSksUm0oMiwic3BhbiIsMiksUm0oMywiaW5wdXQiLDMsNCksVm0oImNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX29uSW50ZXJhY3Rpb25FdmVudChlKX0pKSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9vbklucHV0Q2xpY2soZSl9KSksQW0oKSxSbSg1LCJzcGFuIiw1KSxUbSg2LCJzcGFuIiw2KSxBbSgpLFRtKDcsInNwYW4iLDcpLFJtKDgsInNwYW4iLDgpLHFpKCksUm0oOSwic3ZnIiw5KSxUbSgxMCwicGF0aCIsMTApLEFtKCksWmkoKSxUbSgxMSwic3BhbiIsMTEpLEFtKCksQW0oKSxSbSgxMiwic3BhbiIsMTIsMTMpLFZtKCJjZGtPYnNlcnZlQ29udGVudCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fb25MYWJlbFRleHRDaGFuZ2UoKX0pKSxSbSgxNCwic3BhbiIsMTQpLGt1KDE1LCLCoCIpLEFtKCksWG0oMTYpLEFtKCksQW0oKSksMiZlKXtjb25zdCB0PSRwKDEpLGU9JHAoMTMpO2pwKCJmb3IiLG4uaW5wdXRJZCkscmMoMikscHUoIm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXItbm8tc2lkZS1tYXJnaW4iLCFlLnRleHRDb250ZW50fHwhZS50ZXh0Q29udGVudC50cmltKCkpLHJjKDEpLERtKCJpZCIsbi5pbnB1dElkKSgicmVxdWlyZWQiLG4ucmVxdWlyZWQpKCJjaGVja2VkIixuLmNoZWNrZWQpKCJkaXNhYmxlZCIsbi5kaXNhYmxlZCkoInRhYkluZGV4IixuLnRhYkluZGV4KSxqcCgidmFsdWUiLG4udmFsdWUpKCJuYW1lIixuLm5hbWUpKCJhcmlhLWxhYmVsIixuLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsbi5hcmlhTGFiZWxsZWRieSkoImFyaWEtY2hlY2tlZCIsbi5fZ2V0QXJpYUNoZWNrZWQoKSkoImFyaWEtZGVzY3JpYmVkYnkiLG4uYXJpYURlc2NyaWJlZGJ5KSxyYygyKSxEbSgibWF0UmlwcGxlVHJpZ2dlciIsdCkoIm1hdFJpcHBsZURpc2FibGVkIixuLl9pc1JpcHBsZURpc2FibGVkKCkpKCJtYXRSaXBwbGVSYWRpdXMiLDIwKSgibWF0UmlwcGxlQ2VudGVyZWQiLCEwKSgibWF0UmlwcGxlQW5pbWF0aW9uIixNaCgxOSxoWSwiTm9vcEFuaW1hdGlvbnMiPT09bi5fYW5pbWF0aW9uTW9kZT8wOjE1MCkpfX0sZGlyZWN0aXZlczpba0gsanpdLHN0eWxlczpbIkBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZHswJXtvcGFjaXR5OjB9NTAle29wYWNpdHk6MX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZHswJSw1MCV7b3BhY2l0eToxfTEwMCV7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC11bmNoZWNrZWQtY2hlY2tlZC1jaGVja21hcmstcGF0aHswJSw1MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjIuOTEwMjU5fTUwJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSl9MTAwJXtzdHJva2UtZGFzaG9mZnNldDowfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmt7MCUsNjguMiV7dHJhbnNmb3JtOnNjYWxlWCgwKX02OC4yJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLCAxKX0xMDAle3RyYW5zZm9ybTpzY2FsZVgoMSl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtdW5jaGVja2VkLWNoZWNrbWFyay1wYXRoe2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKTtzdHJva2UtZGFzaG9mZnNldDowfXRve3N0cm9rZS1kYXNob2Zmc2V0Oi0yMi45MTAyNTl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1jaGVja21hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7b3BhY2l0eToxO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtY2hlY2ttYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4xNCwgMCwgMCwgMSk7b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLW1peGVkbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMTQsIDAsIDAsIDEpO29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKDMxNWRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFya3swJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmxpbmVhcjtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlWCgxKX0zMi44JSwxMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGVYKDApfX0ubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1mcmFtZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWNoZWNrYm94e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtY2hlY2tib3h7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZSl7b3BhY2l0eTouMTZ9Lm1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LXJpcHBsZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OmNhbGMoNTAlIC0gMjBweCk7dG9wOmNhbGMoNTAlIC0gMjBweCk7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweDt6LWluZGV4OjE7cG9pbnRlci1ldmVudHM6bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3guY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jaGVja2JveC1yaXBwbGV7b3V0bGluZTpzb2xpZCAzcHh9Lm1hdC1jaGVja2JveC1sYXlvdXR7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjppbmhlcml0O2FsaWduLWl0ZW1zOmJhc2VsaW5lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OmlubGluZS1mbGV4O3doaXRlLXNwYWNlOm5vd3JhcH0ubWF0LWNoZWNrYm94LWxhYmVsey13ZWJraXQtdXNlci1zZWxlY3Q6YXV0bzstbW96LXVzZXItc2VsZWN0OmF1dG87LW1zLXVzZXItc2VsZWN0OmF1dG87dXNlci1zZWxlY3Q6YXV0b30ubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDowO21hcmdpbjphdXRvO21hcmdpbi1yaWdodDo4cHg7b3JkZXI6MDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjE2cHg7ZmxleC1zaHJpbms6MH1bZGlyPXJ0bF0gLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDphdXRvfS5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyLW5vLXNpZGUtbWFyZ2lue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1jaGVja2JveC1mcmFtZXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKTtib3JkZXItd2lkdGg6MnB4O2JvcmRlci1zdHlsZTpzb2xpZH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1jaGVja2JveC1mcmFtZXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKSxvcGFjaXR5IDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKTstd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDpleGFjdDtjb2xvci1hZGp1c3Q6ZXhhY3R9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWNoZWNrYm94IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOm5vbmV9Lm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dHJhbnNmb3JtOm5vbmV9Lm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXI6aG92ZXIgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5Oi4wNH0ubWF0LWNoZWNrYm94LmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTouMTJ9Lm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LWNoZWNrYm94Lm1hdC1jaGVja2JveC1kaXNhYmxlZCAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcjpob3ZlciAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6MH1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyOmhvdmVyIC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7ZGlzcGxheTpub25lfX0ubWF0LWNoZWNrYm94LWNoZWNrbWFya3t0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlLWRhc2hvZmZzZXQ6MjIuOTEwMjU5O3N0cm9rZS1kYXNoYXJyYXk6MjIuOTEwMjU5O3N0cm9rZS13aWR0aDoyLjEzMzMzMzMzMzNweH0uY2RrLWhpZ2gtY29udHJhc3QtYmxhY2stb24td2hpdGUgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2U6IzAwMCAhaW1wb3J0YW50fS5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre3dpZHRoOmNhbGMoMTAwJSAtIDZweCk7aGVpZ2h0OjJweDtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlWCgwKSByb3RhdGUoMGRlZyk7Ym9yZGVyLXJhZGl1czoycHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3toZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweDttYXJnaW4tdG9wOjJweH0ubWF0LWNoZWNrYm94LWxhYmVsLWJlZm9yZSAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcntvcmRlcjoxO21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6YXV0b31bZGlyPXJ0bF0gLm1hdC1jaGVja2JveC1sYWJlbC1iZWZvcmUgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6OHB4fS5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWNoZWNrbWFya3tvcGFjaXR5OjF9Lm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlLWRhc2hvZmZzZXQ6MH0ubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7dHJhbnNmb3JtOnNjYWxlWCgxKSByb3RhdGUoLTQ1ZGVnKX0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1jaGVja21hcmt7b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjB9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGVYKDEpIHJvdGF0ZSgwZGVnKX0ubWF0LWNoZWNrYm94LXVuY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWNoZWNrYm94LWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1jaGVja2JveC1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWNoZWNrZWQtY2hlY2ttYXJrLXBhdGh9Lm1hdC1jaGVja2JveC1hbmltLXVuY2hlY2tlZC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kfS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmt9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHthbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLXVuY2hlY2tlZC1jaGVja21hcmstcGF0aH0ubWF0LWNoZWNrYm94LWFuaW0tY2hlY2tlZC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2FuaW1hdGlvbjo5MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1jaGVja21hcmt9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmt7YW5pbWF0aW9uOjUwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1jaGVja21hcmt9Lm1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtY2hlY2tlZCAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246NTAwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2FuaW1hdGlvbjoxODBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1mYWRlLW91dC1iYWNrZ3JvdW5kfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246MzAwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtaW5wdXR7Ym90dG9tOjA7bGVmdDo1MCV9XG4iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxPWS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTpVZ30se3R5cGU6U0l9LHt0eXBlOmFffSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6amEsYXJnczpbInRhYmluZGV4Il19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltWUF19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltiWV19XX1dLE9ZLnByb3BEZWNvcmF0b3JzPXthcmlhTGFiZWw6W3t0eXBlOnh5LGFyZ3M6WyJhcmlhLWxhYmVsIl19XSxhcmlhTGFiZWxsZWRieTpbe3R5cGU6eHksYXJnczpbImFyaWEtbGFiZWxsZWRieSJdfV0sYXJpYURlc2NyaWJlZGJ5Olt7dHlwZTp4eSxhcmdzOlsiYXJpYS1kZXNjcmliZWRieSJdfV0saWQ6W3t0eXBlOnh5fV0scmVxdWlyZWQ6W3t0eXBlOnh5fV0sbGFiZWxQb3NpdGlvbjpbe3R5cGU6eHl9XSxuYW1lOlt7dHlwZTp4eX1dLGNoYW5nZTpbe3R5cGU6T3l9XSxpbmRldGVybWluYXRlQ2hhbmdlOlt7dHlwZTpPeX1dLHZhbHVlOlt7dHlwZTp4eX1dLF9pbnB1dEVsZW1lbnQ6W3t0eXBlOlphLGFyZ3M6WyJpbnB1dCJdfV0scmlwcGxlOlt7dHlwZTpaYSxhcmdzOltrSF19XSxjaGVja2VkOlt7dHlwZTp4eX1dLGRpc2FibGVkOlt7dHlwZTp4eX1dLGluZGV0ZXJtaW5hdGU6W3t0eXBlOnh5fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoT1ksW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWF0LWNoZWNrYm94Iix0ZW1wbGF0ZTonPGxhYmVsIFthdHRyLmZvcl09ImlucHV0SWQiIGNsYXNzPSJtYXQtY2hlY2tib3gtbGF5b3V0IiAjbGFiZWw+XG4gIDxzcGFuIGNsYXNzPSJtYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyIlxuICAgICAgIFtjbGFzcy5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyLW5vLXNpZGUtbWFyZ2luXT0iIWNoZWNrYm94TGFiZWwudGV4dENvbnRlbnQgfHwgIWNoZWNrYm94TGFiZWwudGV4dENvbnRlbnQudHJpbSgpIj5cbiAgICA8aW5wdXQgI2lucHV0XG4gICAgICAgICAgIGNsYXNzPSJtYXQtY2hlY2tib3gtaW5wdXQgY2RrLXZpc3VhbGx5LWhpZGRlbiIgdHlwZT0iY2hlY2tib3giXG4gICAgICAgICAgIFtpZF09ImlucHV0SWQiXG4gICAgICAgICAgIFtyZXF1aXJlZF09InJlcXVpcmVkIlxuICAgICAgICAgICBbY2hlY2tlZF09ImNoZWNrZWQiXG4gICAgICAgICAgIFthdHRyLnZhbHVlXT0idmFsdWUiXG4gICAgICAgICAgIFtkaXNhYmxlZF09ImRpc2FibGVkIlxuICAgICAgICAgICBbYXR0ci5uYW1lXT0ibmFtZSJcbiAgICAgICAgICAgW3RhYkluZGV4XT0idGFiSW5kZXgiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPSJhcmlhTGFiZWwgfHwgbnVsbCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT0iYXJpYUxhYmVsbGVkYnkiXG4gICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09Il9nZXRBcmlhQ2hlY2tlZCgpIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT0iYXJpYURlc2NyaWJlZGJ5IlxuICAgICAgICAgICAoY2hhbmdlKT0iX29uSW50ZXJhY3Rpb25FdmVudCgkZXZlbnQpIlxuICAgICAgICAgICAoY2xpY2spPSJfb25JbnB1dENsaWNrKCRldmVudCkiPlxuICAgIDxzcGFuIG1hdFJpcHBsZSBjbGFzcz0ibWF0LWNoZWNrYm94LXJpcHBsZSBtYXQtZm9jdXMtaW5kaWNhdG9yIlxuICAgICAgICAgW21hdFJpcHBsZVRyaWdnZXJdPSJsYWJlbCJcbiAgICAgICAgIFttYXRSaXBwbGVEaXNhYmxlZF09Il9pc1JpcHBsZURpc2FibGVkKCkiXG4gICAgICAgICBbbWF0UmlwcGxlUmFkaXVzXT0iMjAiXG4gICAgICAgICBbbWF0UmlwcGxlQ2VudGVyZWRdPSJ0cnVlIlxuICAgICAgICAgW21hdFJpcHBsZUFuaW1hdGlvbl09IntlbnRlckR1cmF0aW9uOiBfYW5pbWF0aW9uTW9kZSA9PT0gXCdOb29wQW5pbWF0aW9uc1wnID8gMCA6IDE1MH0iPlxuICAgICAgPHNwYW4gY2xhc3M9Im1hdC1yaXBwbGUtZWxlbWVudCBtYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGUiPjwvc3Bhbj5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9Im1hdC1jaGVja2JveC1mcmFtZSI+PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPSJtYXQtY2hlY2tib3gtYmFja2dyb3VuZCI+XG4gICAgICA8c3ZnIHZlcnNpb249IjEuMSJcbiAgICAgICAgICAgZm9jdXNhYmxlPSJmYWxzZSJcbiAgICAgICAgICAgY2xhc3M9Im1hdC1jaGVja2JveC1jaGVja21hcmsiXG4gICAgICAgICAgIHZpZXdCb3g9IjAgMCAyNCAyNCJcbiAgICAgICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSJcbiAgICAgICAgICAgYXJpYS1oaWRkZW49InRydWUiPlxuICAgICAgICA8cGF0aCBjbGFzcz0ibWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoIlxuICAgICAgICAgICAgICBmaWxsPSJub25lIlxuICAgICAgICAgICAgICBzdHJva2U9IndoaXRlIlxuICAgICAgICAgICAgICBkPSJNNC4xLDEyLjcgOSwxNy42IDIwLjMsNi4zIi8+XG4gICAgICA8L3N2Zz5cbiAgICAgIFx4M2MhLS0gRWxlbWVudCBmb3IgcmVuZGVyaW5nIHRoZSBpbmRldGVybWluYXRlIHN0YXRlIGNoZWNrYm94LiAtLVx4M2VcbiAgICAgIDxzcGFuIGNsYXNzPSJtYXQtY2hlY2tib3gtbWl4ZWRtYXJrIj48L3NwYW4+XG4gICAgPC9zcGFuPlxuICA8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPSJtYXQtY2hlY2tib3gtbGFiZWwiICNjaGVja2JveExhYmVsIChjZGtPYnNlcnZlQ29udGVudCk9Il9vbkxhYmVsVGV4dENoYW5nZSgpIj5cbiAgICBceDNjIS0tIEFkZCBhbiBpbnZpc2libGUgc3BhbiBzbyBKQVdTIGNhbiByZWFkIHRoZSBsYWJlbCAtLVx4M2VcbiAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTpub25lIj4mbmJzcDs8L3NwYW4+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L3NwYW4+XG48L2xhYmVsPlxuJyxleHBvcnRBczoibWF0Q2hlY2tib3giLGhvc3Q6e2NsYXNzOiJtYXQtY2hlY2tib3giLCJbaWRdIjoiaWQiLCJbYXR0ci50YWJpbmRleF0iOiJudWxsIiwiW2NsYXNzLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlXSI6ImluZGV0ZXJtaW5hdGUiLCJbY2xhc3MubWF0LWNoZWNrYm94LWNoZWNrZWRdIjoiY2hlY2tlZCIsIltjbGFzcy5tYXQtY2hlY2tib3gtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbY2xhc3MubWF0LWNoZWNrYm94LWxhYmVsLWJlZm9yZV0iOidsYWJlbFBvc2l0aW9uID09ICJiZWZvcmUiJywiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6Il9hbmltYXRpb25Nb2RlID09PSAnTm9vcEFuaW1hdGlvbnMnIn0scHJvdmlkZXJzOltNWV0saW5wdXRzOlsiZGlzYWJsZVJpcHBsZSIsImNvbG9yIiwidGFiSW5kZXgiXSxlbmNhcHN1bGF0aW9uOkhuLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaCxzdHlsZXM6WyJAa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmR7MCV7b3BhY2l0eTowfTUwJXtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmR7MCUsNTAle29wYWNpdHk6MX0xMDAle29wYWNpdHk6MH19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWNoZWNrZWQtY2hlY2ttYXJrLXBhdGh7MCUsNTAle3N0cm9rZS1kYXNob2Zmc2V0OjIyLjkxMDI1OX01MCV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MH19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrezAlLDY4LjIle3RyYW5zZm9ybTpzY2FsZVgoMCl9NjguMiV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMCwgMSl9MTAwJXt0cmFuc2Zvcm06c2NhbGVYKDEpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1jaGVja2VkLXVuY2hlY2tlZC1jaGVja21hcmstcGF0aHtmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSk7c3Ryb2tlLWRhc2hvZmZzZXQ6MH10b3tzdHJva2UtZGFzaG9mZnNldDotMjIuOTEwMjU5fX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtY2hlY2ttYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpO29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLWNoZWNrbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMTQsIDAsIDAsIDEpO29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpO29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjE0LCAwLCAwLCAxKTtvcGFjaXR5OjE7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSgzMTVkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLXVuY2hlY2tlZC1taXhlZG1hcmt7MCV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpsaW5lYXI7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZVgoMSl9MzIuOCUsMTAwJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlWCgwKX19Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtZnJhbWV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czoycHg7Ym94LXNpemluZzpib3JkZXItYm94O3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1jaGVja2JveHtkaXNwbGF5OmlubGluZS1ibG9jazt0cmFuc2l0aW9uOmJhY2tncm91bmQgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO2N1cnNvcjpwb2ludGVyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWNoZWNrYm94e3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGUpe29wYWNpdHk6LjE2fS5tYXQtY2hlY2tib3ggLm1hdC1jaGVja2JveC1yaXBwbGV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDpjYWxjKDUwJSAtIDIwcHgpO3RvcDpjYWxjKDUwJSAtIDIwcHgpO2hlaWdodDo0MHB4O3dpZHRoOjQwcHg7ei1pbmRleDoxO3BvaW50ZXItZXZlbnRzOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWNoZWNrYm94LmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2hlY2tib3gtcmlwcGxle291dGxpbmU6c29saWQgM3B4fS5tYXQtY2hlY2tib3gtbGF5b3V0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6aW5oZXJpdDthbGlnbi1pdGVtczpiYXNlbGluZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtZmxleDt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC1jaGVja2JveC1sYWJlbHstd2Via2l0LXVzZXItc2VsZWN0OmF1dG87LW1vei11c2VyLXNlbGVjdDphdXRvOy1tcy11c2VyLXNlbGVjdDphdXRvO3VzZXItc2VsZWN0OmF1dG99Lm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjE2cHg7bGluZS1oZWlnaHQ6MDttYXJnaW46YXV0bzttYXJnaW4tcmlnaHQ6OHB4O29yZGVyOjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxNnB4O2ZsZXgtc2hyaW5rOjB9W2Rpcj1ydGxdIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6YXV0b30ubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lci1uby1zaWRlLW1hcmdpbnttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtY2hlY2tib3gtZnJhbWV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItc3R5bGU6c29saWR9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtY2hlY2tib3gtZnJhbWV7dHJhbnNpdGlvbjpub25lfS5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSksb3BhY2l0eSA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7LXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3Q6ZXhhY3Q7Y29sb3ItYWRqdXN0OmV4YWN0fS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZDpub25lfS5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RyYW5zZm9ybTpub25lfS5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyOmhvdmVyIC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTouMDR9Lm1hdC1jaGVja2JveC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6LjEyfS5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1jaGVja2JveC5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXI6aG92ZXIgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5OjB9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcjpob3ZlciAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle2Rpc3BsYXk6bm9uZX19Lm1hdC1jaGVja2JveC1jaGVja21hcmt7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJX0ubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjIyLjkxMDI1OTtzdHJva2UtZGFzaGFycmF5OjIyLjkxMDI1OTtzdHJva2Utd2lkdGg6Mi4xMzMzMzMzMzMzcHh9LmNkay1oaWdoLWNvbnRyYXN0LWJsYWNrLW9uLXdoaXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiMwMDAgIWltcG9ydGFudH0ubWF0LWNoZWNrYm94LW1peGVkbWFya3t3aWR0aDpjYWxjKDEwMCUgLSA2cHgpO2hlaWdodDoycHg7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZVgoMCkgcm90YXRlKDBkZWcpO2JvcmRlci1yYWRpdXM6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHg7bWFyZ2luLXRvcDoycHh9Lm1hdC1jaGVja2JveC1sYWJlbC1iZWZvcmUgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7b3JkZXI6MTttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OmF1dG99W2Rpcj1ydGxdIC5tYXQtY2hlY2tib3gtbGFiZWwtYmVmb3JlIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjhweH0ubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmt7b3BhY2l0eToxfS5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjB9Lm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre3RyYW5zZm9ybTpzY2FsZVgoMSkgcm90YXRlKC00NWRlZyl9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2UtZGFzaG9mZnNldDowfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlWCgxKSByb3RhdGUoMGRlZyl9Lm1hdC1jaGVja2JveC11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1jaGVja2JveC1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWR7b3BhY2l0eTouNX0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2FuaW1hdGlvbjoxODBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmR9Lm1hdC1jaGVja2JveC1hbmltLXVuY2hlY2tlZC1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRofS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLXVuY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmR9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtY2hlY2tlZC11bmNoZWNrZWQtY2hlY2ttYXJrLXBhdGh9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtY2hlY2ttYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2FuaW1hdGlvbjo1MDBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtY2hlY2ttYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjUwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmt9Lm1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjMwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWlucHV0e2JvdHRvbTowO2xlZnQ6NTAlfVxuIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpoZ30se3R5cGU6VWd9LHt0eXBlOlNJfSx7dHlwZTphX30se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmphLGFyZ3M6WyJ0YWJpbmRleCJdfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbVlBdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbYlldfV19XX0pLHthcmlhTGFiZWw6W3t0eXBlOnh5LGFyZ3M6WyJhcmlhLWxhYmVsIl19XSxhcmlhTGFiZWxsZWRieTpbe3R5cGU6eHksYXJnczpbImFyaWEtbGFiZWxsZWRieSJdfV0saWQ6W3t0eXBlOnh5fV0sbGFiZWxQb3NpdGlvbjpbe3R5cGU6eHl9XSxuYW1lOlt7dHlwZTp4eX1dLGNoYW5nZTpbe3R5cGU6T3l9XSxpbmRldGVybWluYXRlQ2hhbmdlOlt7dHlwZTpPeX1dLHJlcXVpcmVkOlt7dHlwZTp4eX1dLGNoZWNrZWQ6W3t0eXBlOnh5fV0sZGlzYWJsZWQ6W3t0eXBlOnh5fV0saW5kZXRlcm1pbmF0ZTpbe3R5cGU6eHl9XSxhcmlhRGVzY3JpYmVkYnk6W3t0eXBlOnh5LGFyZ3M6WyJhcmlhLWRlc2NyaWJlZGJ5Il19XSx2YWx1ZTpbe3R5cGU6eHl9XSxfaW5wdXRFbGVtZW50Olt7dHlwZTpaYSxhcmdzOlsiaW5wdXQiXX1dLHJpcHBsZTpbe3R5cGU6WmEsYXJnczpba0hdfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IFBZPXtwcm92aWRlOkdWLHVzZUV4aXN0aW5nOnFlKCgoKT0+d1kpKSxtdWx0aTohMH07Y2xhc3Mgd1kgZXh0ZW5kcyBLVXt9d1kuybVmYWM9KGZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uIGUobil7cmV0dXJuKHR8fCh0PUFhKHdZKSkpKG58fHdZKX19KSgpLHdZLsm1ZGlyPWxvKHt0eXBlOndZLHNlbGVjdG9yczpbWyJtYXQtY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGZlYXR1cmVzOltwZyhbUFldKSx4cF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHdZLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6Im1hdC1jaGVja2JveFtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSxcbiAgICAgICAgICAgICBtYXQtY2hlY2tib3hbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSwgbWF0LWNoZWNrYm94W3JlcXVpcmVkXVtuZ01vZGVsXSIscHJvdmlkZXJzOltQWV19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBrWXt9a1kuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGtZKX0sa1kuybVtb2Q9YW8oe3R5cGU6a1l9KSxrWS7JtWluaj12bih7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChrWSxbe3R5cGU6QXksYXJnczpbe2V4cG9ydHM6W3dZXSxkZWNsYXJhdGlvbnM6W3dZXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKGtZLHtkZWNsYXJhdGlvbnM6W3dZXSxleHBvcnRzOlt3WV19KTtjbGFzcyBTWXt9U1kuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFNZKX0sU1kuybVtb2Q9YW8oe3R5cGU6U1l9KSxTWS7JtWluaj12bih7aW1wb3J0czpbW1NILFhJLFV6LGtZXSxYSSxrWV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFNZLFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbU0gsWEksVXosa1ldLGV4cG9ydHM6W09ZLFhJLGtZXSxkZWNsYXJhdGlvbnM6W09ZXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKFNZLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bT1ldfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1NILFhJLFV6LGtZXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltPWSxYSSxrWV19fSk7Y29uc3QgRFk9Tnooe3Bhc3NpdmU6ITB9KTtjbGFzcyBFWXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3BsYXRmb3JtPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fbW9uaXRvcmVkRWxlbWVudHM9bmV3IE1hcH1tb25pdG9yKHQpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuIHJ0O2NvbnN0IGU9eHoodCksbj10aGlzLl9tb25pdG9yZWRFbGVtZW50cy5nZXQoZSk7aWYobilyZXR1cm4gbi5zdWJqZWN0O2NvbnN0IG89bmV3IEksaT0iY2RrLXRleHQtZmllbGQtYXV0b2ZpbGxlZCIsYT10PT57ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IiE9PXQuYW5pbWF0aW9uTmFtZXx8ZS5jbGFzc0xpc3QuY29udGFpbnMoaSk/ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCI9PT10LmFuaW1hdGlvbk5hbWUmJmUuY2xhc3NMaXN0LmNvbnRhaW5zKGkpJiYoZS5jbGFzc0xpc3QucmVtb3ZlKGkpLHRoaXMuX25nWm9uZS5ydW4oKCgpPT5vLm5leHQoe3RhcmdldDp0LnRhcmdldCxpc0F1dG9maWxsZWQ6ITF9KSkpKTooZS5jbGFzc0xpc3QuYWRkKGkpLHRoaXMuX25nWm9uZS5ydW4oKCgpPT5vLm5leHQoe3RhcmdldDp0LnRhcmdldCxpc0F1dG9maWxsZWQ6ITB9KSkpKX07cmV0dXJuIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PntlLmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbnN0YXJ0IixhLERZKSxlLmNsYXNzTGlzdC5hZGQoImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZCIpfSkpLHRoaXMuX21vbml0b3JlZEVsZW1lbnRzLnNldChlLHtzdWJqZWN0Om8sdW5saXN0ZW46KCk9PntlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbnN0YXJ0IixhLERZKX19KSxvfXN0b3BNb25pdG9yaW5nKHQpe2NvbnN0IGU9eHoodCksbj10aGlzLl9tb25pdG9yZWRFbGVtZW50cy5nZXQoZSk7biYmKG4udW5saXN0ZW4oKSxuLnN1YmplY3QuY29tcGxldGUoKSxlLmNsYXNzTGlzdC5yZW1vdmUoImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZCIpLGUuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGxlZCIpLHRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmRlbGV0ZShlKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9tb25pdG9yZWRFbGVtZW50cy5mb3JFYWNoKCgodCxlKT0+dGhpcy5zdG9wTW9uaXRvcmluZyhlKSkpfX1FWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RVkpKHZyKHd6KSx2cihhXykpfSxFWS7JtXByb3Y9TW4oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgRVkodnIod3opLHZyKGFfKSl9LHRva2VuOkVZLHByb3ZpZGVkSW46InJvb3QifSksRVkuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp3en0se3R5cGU6YV99XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEVZLFt7dHlwZTppbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp3en0se3R5cGU6YV99XX0pLG51bGwpO2NsYXNzIFJZe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2F1dG9maWxsTW9uaXRvcj1lLHRoaXMuY2RrQXV0b2ZpbGw9bmV3IExofW5nT25Jbml0KCl7dGhpcy5fYXV0b2ZpbGxNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZikuc3Vic2NyaWJlKCh0PT50aGlzLmNka0F1dG9maWxsLmVtaXQodCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuX2F1dG9maWxsTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKX19UlkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFJZKShTbShoZyksU20oRVkpKX0sUlkuybVkaXI9bG8oe3R5cGU6Ulksc2VsZWN0b3JzOltbIiIsImNka0F1dG9maWxsIiwiIl1dLG91dHB1dHM6e2Nka0F1dG9maWxsOiJjZGtBdXRvZmlsbCJ9fSksUlkuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpoZ30se3R5cGU6RVl9XSxSWS5wcm9wRGVjb3JhdG9ycz17Y2RrQXV0b2ZpbGw6W3t0eXBlOk95fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoUlksW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW2Nka0F1dG9maWxsXSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpoZ30se3R5cGU6RVl9XX0pLHtjZGtBdXRvZmlsbDpbe3R5cGU6T3l9XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgQVl7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX3BsYXRmb3JtPWUsdGhpcy5fbmdab25lPW4sdGhpcy5fZGVzdHJveWVkPW5ldyBJLHRoaXMuX2VuYWJsZWQ9ITAsdGhpcy5fcHJldmlvdXNNaW5Sb3dzPS0xLHRoaXMuX2lzVmlld0luaXRlZD0hMSx0aGlzLl9oYW5kbGVGb2N1c0V2ZW50PXQ9Pnt0aGlzLl9oYXNGb2N1cz0iZm9jdXMiPT09dC50eXBlfSx0aGlzLl9kb2N1bWVudD1vLHRoaXMuX3RleHRhcmVhRWxlbWVudD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9Z2V0IG1pblJvd3MoKXtyZXR1cm4gdGhpcy5fbWluUm93c31zZXQgbWluUm93cyh0KXt0aGlzLl9taW5Sb3dzPV96KHQpLHRoaXMuX3NldE1pbkhlaWdodCgpfWdldCBtYXhSb3dzKCl7cmV0dXJuIHRoaXMuX21heFJvd3N9c2V0IG1heFJvd3ModCl7dGhpcy5fbWF4Um93cz1feih0KSx0aGlzLl9zZXRNYXhIZWlnaHQoKX1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLl9lbmFibGVkfXNldCBlbmFibGVkKHQpe3Q9eXoodCksdGhpcy5fZW5hYmxlZCE9PXQmJigodGhpcy5fZW5hYmxlZD10KT90aGlzLnJlc2l6ZVRvRml0Q29udGVudCghMCk6dGhpcy5yZXNldCgpKX1nZXQgcGxhY2Vob2xkZXIoKXtyZXR1cm4gdGhpcy5fdGV4dGFyZWFFbGVtZW50LnBsYWNlaG9sZGVyfXNldCBwbGFjZWhvbGRlcih0KXt0aGlzLl9jYWNoZWRQbGFjZWhvbGRlckhlaWdodD12b2lkIDAsdGhpcy5fdGV4dGFyZWFFbGVtZW50LnBsYWNlaG9sZGVyPXQsdGhpcy5fY2FjaGVUZXh0YXJlYVBsYWNlaG9sZGVySGVpZ2h0KCl9X3NldE1pbkhlaWdodCgpe2NvbnN0IHQ9dGhpcy5taW5Sb3dzJiZ0aGlzLl9jYWNoZWRMaW5lSGVpZ2h0P3RoaXMubWluUm93cyp0aGlzLl9jYWNoZWRMaW5lSGVpZ2h0KyJweCI6bnVsbDt0JiYodGhpcy5fdGV4dGFyZWFFbGVtZW50LnN0eWxlLm1pbkhlaWdodD10KX1fc2V0TWF4SGVpZ2h0KCl7Y29uc3QgdD10aGlzLm1heFJvd3MmJnRoaXMuX2NhY2hlZExpbmVIZWlnaHQ/dGhpcy5tYXhSb3dzKnRoaXMuX2NhY2hlZExpbmVIZWlnaHQrInB4IjpudWxsO3QmJih0aGlzLl90ZXh0YXJlYUVsZW1lbnQuc3R5bGUubWF4SGVpZ2h0PXQpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKHRoaXMuX2luaXRpYWxIZWlnaHQ9dGhpcy5fdGV4dGFyZWFFbGVtZW50LnN0eWxlLmhlaWdodCx0aGlzLnJlc2l6ZVRvRml0Q29udGVudCgpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PntvZSh0aGlzLl9nZXRXaW5kb3coKSwicmVzaXplIikucGlwZShkZSgxNiksSWUodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgoKT0+dGhpcy5yZXNpemVUb0ZpdENvbnRlbnQoITApKSksdGhpcy5fdGV4dGFyZWFFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9oYW5kbGVGb2N1c0V2ZW50KSx0aGlzLl90ZXh0YXJlYUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5faGFuZGxlRm9jdXNFdmVudCl9KSksdGhpcy5faXNWaWV3SW5pdGVkPSEwLHRoaXMucmVzaXplVG9GaXRDb250ZW50KCEwKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl90ZXh0YXJlYUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2hhbmRsZUZvY3VzRXZlbnQpLHRoaXMuX3RleHRhcmVhRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9oYW5kbGVGb2N1c0V2ZW50KSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfV9jYWNoZVRleHRhcmVhTGluZUhlaWdodCgpe2lmKHRoaXMuX2NhY2hlZExpbmVIZWlnaHQpcmV0dXJuO2xldCB0PXRoaXMuX3RleHRhcmVhRWxlbWVudC5jbG9uZU5vZGUoITEpO3Qucm93cz0xLHQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdC5zdHlsZS5ib3JkZXI9Im5vbmUiLHQuc3R5bGUucGFkZGluZz0iMCIsdC5zdHlsZS5oZWlnaHQ9IiIsdC5zdHlsZS5taW5IZWlnaHQ9IiIsdC5zdHlsZS5tYXhIZWlnaHQ9IiIsdC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIix0aGlzLl90ZXh0YXJlYUVsZW1lbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0KSx0aGlzLl9jYWNoZWRMaW5lSGVpZ2h0PXQuY2xpZW50SGVpZ2h0LHRoaXMuX3RleHRhcmVhRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHRoaXMuX3NldE1pbkhlaWdodCgpLHRoaXMuX3NldE1heEhlaWdodCgpfV9tZWFzdXJlU2Nyb2xsSGVpZ2h0KCl7Y29uc3QgdD10aGlzLl90ZXh0YXJlYUVsZW1lbnQsZT10LnN0eWxlLm1hcmdpbkJvdHRvbXx8IiIsbj10aGlzLl9wbGF0Zm9ybS5GSVJFRk9YLG89biYmdGhpcy5faGFzRm9jdXMsaT1uPyJjZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3giOiJjZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nIjtvJiYodC5zdHlsZS5tYXJnaW5Cb3R0b209YCR7dC5jbGllbnRIZWlnaHR9cHhgKSx0LmNsYXNzTGlzdC5hZGQoaSk7Y29uc3QgYT10LnNjcm9sbEhlaWdodC00O3JldHVybiB0LmNsYXNzTGlzdC5yZW1vdmUoaSksbyYmKHQuc3R5bGUubWFyZ2luQm90dG9tPWUpLGF9X2NhY2hlVGV4dGFyZWFQbGFjZWhvbGRlckhlaWdodCgpe2lmKCF0aGlzLl9pc1ZpZXdJbml0ZWR8fG51bGwhPXRoaXMuX2NhY2hlZFBsYWNlaG9sZGVySGVpZ2h0KXJldHVybjtpZighdGhpcy5wbGFjZWhvbGRlcilyZXR1cm4gdm9pZCh0aGlzLl9jYWNoZWRQbGFjZWhvbGRlckhlaWdodD0wKTtjb25zdCB0PXRoaXMuX3RleHRhcmVhRWxlbWVudC52YWx1ZTt0aGlzLl90ZXh0YXJlYUVsZW1lbnQudmFsdWU9dGhpcy5fdGV4dGFyZWFFbGVtZW50LnBsYWNlaG9sZGVyLHRoaXMuX2NhY2hlZFBsYWNlaG9sZGVySGVpZ2h0PXRoaXMuX21lYXN1cmVTY3JvbGxIZWlnaHQoKSx0aGlzLl90ZXh0YXJlYUVsZW1lbnQudmFsdWU9dH1uZ0RvQ2hlY2soKXt0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMucmVzaXplVG9GaXRDb250ZW50KCl9cmVzaXplVG9GaXRDb250ZW50KHQ9ITEpe2lmKCF0aGlzLl9lbmFibGVkKXJldHVybjtpZih0aGlzLl9jYWNoZVRleHRhcmVhTGluZUhlaWdodCgpLHRoaXMuX2NhY2hlVGV4dGFyZWFQbGFjZWhvbGRlckhlaWdodCgpLCF0aGlzLl9jYWNoZWRMaW5lSGVpZ2h0KXJldHVybjtjb25zdCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxuPWUudmFsdWU7aWYoIXQmJnRoaXMuX21pblJvd3M9PT10aGlzLl9wcmV2aW91c01pblJvd3MmJm49PT10aGlzLl9wcmV2aW91c1ZhbHVlKXJldHVybjtjb25zdCBvPXRoaXMuX21lYXN1cmVTY3JvbGxIZWlnaHQoKSxpPU1hdGgubWF4KG8sdGhpcy5fY2FjaGVkUGxhY2Vob2xkZXJIZWlnaHR8fDApO2Uuc3R5bGUuaGVpZ2h0PWAke2l9cHhgLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PnsidW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT50aGlzLl9zY3JvbGxUb0NhcmV0UG9zaXRpb24oZSkpKTpzZXRUaW1lb3V0KCgoKT0+dGhpcy5fc2Nyb2xsVG9DYXJldFBvc2l0aW9uKGUpKSl9KSksdGhpcy5fcHJldmlvdXNWYWx1ZT1uLHRoaXMuX3ByZXZpb3VzTWluUm93cz10aGlzLl9taW5Sb3dzfXJlc2V0KCl7dm9pZCAwIT09dGhpcy5faW5pdGlhbEhlaWdodCYmKHRoaXMuX3RleHRhcmVhRWxlbWVudC5zdHlsZS5oZWlnaHQ9dGhpcy5faW5pdGlhbEhlaWdodCl9X25vb3BJbnB1dEhhbmRsZXIoKXt9X2dldERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50fHxkb2N1bWVudH1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2dldERvY3VtZW50KCkuZGVmYXVsdFZpZXd8fHdpbmRvd31fc2Nyb2xsVG9DYXJldFBvc2l0aW9uKHQpe2NvbnN0e3NlbGVjdGlvblN0YXJ0OmUsc2VsZWN0aW9uRW5kOm59PXQ7IXRoaXMuX2Rlc3Ryb3llZC5pc1N0b3BwZWQmJnRoaXMuX2hhc0ZvY3VzJiZ0LnNldFNlbGVjdGlvblJhbmdlKGUsbil9fUFZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxBWSkoU20oaGcpLFNtKHd6KSxTbShhXyksU20oWl8sOCkpfSxBWS7JtWRpcj1sbyh7dHlwZTpBWSxzZWxlY3RvcnM6W1sidGV4dGFyZWEiLCJjZGtUZXh0YXJlYUF1dG9zaXplIiwiIl1dLGhvc3RBdHRyczpbInJvd3MiLCIxIiwxLCJjZGstdGV4dGFyZWEtYXV0b3NpemUiXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmVm0oImlucHV0IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9ub29wSW5wdXRIYW5kbGVyKCl9KSl9LGlucHV0czp7bWluUm93czpbImNka0F1dG9zaXplTWluUm93cyIsIm1pblJvd3MiXSxtYXhSb3dzOlsiY2RrQXV0b3NpemVNYXhSb3dzIiwibWF4Um93cyJdLGVuYWJsZWQ6WyJjZGtUZXh0YXJlYUF1dG9zaXplIiwiZW5hYmxlZCJdLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciJ9LGV4cG9ydEFzOlsiY2RrVGV4dGFyZWFBdXRvc2l6ZSJdfSksQVkuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpoZ30se3R5cGU6d3p9LHt0eXBlOmFffSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1pfXX1dfV0sQVkucHJvcERlY29yYXRvcnM9e21pblJvd3M6W3t0eXBlOnh5LGFyZ3M6WyJjZGtBdXRvc2l6ZU1pblJvd3MiXX1dLG1heFJvd3M6W3t0eXBlOnh5LGFyZ3M6WyJjZGtBdXRvc2l6ZU1heFJvd3MiXX1dLGVuYWJsZWQ6W3t0eXBlOnh5LGFyZ3M6WyJjZGtUZXh0YXJlYUF1dG9zaXplIl19XSxwbGFjZWhvbGRlcjpbe3R5cGU6eHl9XSxfbm9vcElucHV0SGFuZGxlcjpbe3R5cGU6d3ksYXJnczpbImlucHV0Il19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChBWSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJ0ZXh0YXJlYVtjZGtUZXh0YXJlYUF1dG9zaXplXSIsZXhwb3J0QXM6ImNka1RleHRhcmVhQXV0b3NpemUiLGhvc3Q6e2NsYXNzOiJjZGstdGV4dGFyZWEtYXV0b3NpemUiLHJvd3M6IjEifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfSx7dHlwZTp3en0se3R5cGU6YV99LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbWl9dfV19XX0pLHttaW5Sb3dzOlt7dHlwZTp4eSxhcmdzOlsiY2RrQXV0b3NpemVNaW5Sb3dzIl19XSxtYXhSb3dzOlt7dHlwZTp4eSxhcmdzOlsiY2RrQXV0b3NpemVNYXhSb3dzIl19XSxlbmFibGVkOlt7dHlwZTp4eSxhcmdzOlsiY2RrVGV4dGFyZWFBdXRvc2l6ZSJdfV0scGxhY2Vob2xkZXI6W3t0eXBlOnh5fV0sX25vb3BJbnB1dEhhbmRsZXI6W3t0eXBlOnd5LGFyZ3M6WyJpbnB1dCJdfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIFRZe31UWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VFkpfSxUWS7JtW1vZD1hbyh7dHlwZTpUWX0pLFRZLsm1aW5qPXZuKHtpbXBvcnRzOltba3pdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoVFksW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1JZLEFZXSxpbXBvcnRzOltrel0sZXhwb3J0czpbUlksQVldfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oVFkse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltSWSxBWV19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5ba3pdfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1JZLEFZXX19KTtjbGFzcyBOWSBleHRlbmRzIEFZe2dldCBtYXRBdXRvc2l6ZU1pblJvd3MoKXtyZXR1cm4gdGhpcy5taW5Sb3dzfXNldCBtYXRBdXRvc2l6ZU1pblJvd3ModCl7dGhpcy5taW5Sb3dzPXR9Z2V0IG1hdEF1dG9zaXplTWF4Um93cygpe3JldHVybiB0aGlzLm1heFJvd3N9c2V0IG1hdEF1dG9zaXplTWF4Um93cyh0KXt0aGlzLm1heFJvd3M9dH1nZXQgbWF0QXV0b3NpemUoKXtyZXR1cm4gdGhpcy5lbmFibGVkfXNldCBtYXRBdXRvc2l6ZSh0KXt0aGlzLmVuYWJsZWQ9dH1nZXQgbWF0VGV4dGFyZWFBdXRvc2l6ZSgpe3JldHVybiB0aGlzLmVuYWJsZWR9c2V0IG1hdFRleHRhcmVhQXV0b3NpemUodCl7dGhpcy5lbmFibGVkPXR9fU5ZLsm1ZmFjPShmdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbiBlKG4pe3JldHVybih0fHwodD1BYShOWSkpKShufHxOWSl9fSkoKSxOWS7JtWRpcj1sbyh7dHlwZTpOWSxzZWxlY3RvcnM6W1sidGV4dGFyZWEiLCJtYXQtYXV0b3NpemUiLCIiXSxbInRleHRhcmVhIiwibWF0VGV4dGFyZWFBdXRvc2l6ZSIsIiJdXSxob3N0QXR0cnM6WyJyb3dzIiwiMSIsMSwiY2RrLXRleHRhcmVhLWF1dG9zaXplIiwibWF0LWF1dG9zaXplIl0saW5wdXRzOntjZGtBdXRvc2l6ZU1pblJvd3M6ImNka0F1dG9zaXplTWluUm93cyIsY2RrQXV0b3NpemVNYXhSb3dzOiJjZGtBdXRvc2l6ZU1heFJvd3MiLG1hdEF1dG9zaXplTWluUm93czoibWF0QXV0b3NpemVNaW5Sb3dzIixtYXRBdXRvc2l6ZU1heFJvd3M6Im1hdEF1dG9zaXplTWF4Um93cyIsbWF0QXV0b3NpemU6WyJtYXQtYXV0b3NpemUiLCJtYXRBdXRvc2l6ZSJdLG1hdFRleHRhcmVhQXV0b3NpemU6Im1hdFRleHRhcmVhQXV0b3NpemUifSxleHBvcnRBczpbIm1hdFRleHRhcmVhQXV0b3NpemUiXSxmZWF0dXJlczpbeHBdfSksTlkucHJvcERlY29yYXRvcnM9e21hdEF1dG9zaXplTWluUm93czpbe3R5cGU6eHl9XSxtYXRBdXRvc2l6ZU1heFJvd3M6W3t0eXBlOnh5fV0sbWF0QXV0b3NpemU6W3t0eXBlOnh5LGFyZ3M6WyJtYXQtYXV0b3NpemUiXX1dLG1hdFRleHRhcmVhQXV0b3NpemU6W3t0eXBlOnh5fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoTlksW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoidGV4dGFyZWFbbWF0LWF1dG9zaXplXSwgdGV4dGFyZWFbbWF0VGV4dGFyZWFBdXRvc2l6ZV0iLGV4cG9ydEFzOiJtYXRUZXh0YXJlYUF1dG9zaXplIixpbnB1dHM6WyJjZGtBdXRvc2l6ZU1pblJvd3MiLCJjZGtBdXRvc2l6ZU1heFJvd3MiXSxob3N0OntjbGFzczoiY2RrLXRleHRhcmVhLWF1dG9zaXplIG1hdC1hdXRvc2l6ZSIscm93czoiMSJ9fV19XSxudWxsLHttYXRBdXRvc2l6ZU1pblJvd3M6W3t0eXBlOnh5fV0sbWF0QXV0b3NpemVNYXhSb3dzOlt7dHlwZTp4eX1dLG1hdEF1dG9zaXplOlt7dHlwZTp4eSxhcmdzOlsibWF0LWF1dG9zaXplIl19XSxtYXRUZXh0YXJlYUF1dG9zaXplOlt7dHlwZTp4eX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCB6WT1uZXcgR2EoIk1BVF9JTlBVVF9WQUxVRV9BQ0NFU1NPUiIpLElZPVsiYnV0dG9uIiwiY2hlY2tib3giLCJmaWxlIiwiaGlkZGVuIiwiaW1hZ2UiLCJyYWRpbyIsInJhbmdlIiwicmVzZXQiLCJzdWJtaXQiXTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovbGV0IEhZPTA7Y29uc3QgRlk9dEgoY2xhc3N7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5fZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyPXQsdGhpcy5fcGFyZW50Rm9ybT1lLHRoaXMuX3BhcmVudEZvcm1Hcm91cD1uLHRoaXMubmdDb250cm9sPW99fSk7Y2xhc3MgTFkgZXh0ZW5kcyBGWXtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyLHMsbCxjKXtzdXBlcihhLG8saSxuKSx0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9hdXRvZmlsbE1vbml0b3I9cyx0aGlzLl9mb3JtRmllbGQ9Yyx0aGlzLl91aWQ9Im1hdC1pbnB1dC0iK0hZKyssdGhpcy5mb2N1c2VkPSExLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBJLHRoaXMuY29udHJvbFR5cGU9Im1hdC1pbnB1dCIsdGhpcy5hdXRvZmlsbGVkPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3JlcXVpcmVkPSExLHRoaXMuX3R5cGU9InRleHQiLHRoaXMuX3JlYWRvbmx5PSExLHRoaXMuX25ldmVyRW1wdHlJbnB1dFR5cGVzPVsiZGF0ZSIsImRhdGV0aW1lIiwiZGF0ZXRpbWUtbG9jYWwiLCJtb250aCIsInRpbWUiLCJ3ZWVrIl0uZmlsdGVyKCh0PT5EeigpLmhhcyh0KSkpO2NvbnN0IGQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHA9ZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3RoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvcj1yfHxkLHRoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWU9dGhpcy52YWx1ZSx0aGlzLmlkPXRoaXMuaWQsZS5JT1MmJmwucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57dC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwodD0+e2NvbnN0IGU9dC50YXJnZXQ7ZS52YWx1ZXx8MCE9PWUuc2VsZWN0aW9uU3RhcnR8fDAhPT1lLnNlbGVjdGlvbkVuZHx8KGUuc2V0U2VsZWN0aW9uUmFuZ2UoMSwxKSxlLnNldFNlbGVjdGlvblJhbmdlKDAsMCkpfSkpfSkpLHRoaXMuX2lzU2VydmVyPSF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIsdGhpcy5faXNOYXRpdmVTZWxlY3Q9InNlbGVjdCI9PT1wLHRoaXMuX2lzVGV4dGFyZWE9InRleHRhcmVhIj09PXAsdGhpcy5faXNJbkZvcm1GaWVsZD0hIWMsdGhpcy5faXNOYXRpdmVTZWxlY3QmJih0aGlzLmNvbnRyb2xUeXBlPWQubXVsdGlwbGU/Im1hdC1uYXRpdmUtc2VsZWN0LW11bHRpcGxlIjoibWF0LW5hdGl2ZS1zZWxlY3QiKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5uZ0NvbnRyb2wmJm51bGwhPT10aGlzLm5nQ29udHJvbC5kaXNhYmxlZD90aGlzLm5nQ29udHJvbC5kaXNhYmxlZDp0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5fZGlzYWJsZWQ9eXoodCksdGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPSExLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZCh0KXt0aGlzLl9pZD10fHx0aGlzLl91aWR9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfXNldCByZXF1aXJlZCh0KXt0aGlzLl9yZXF1aXJlZD15eih0KX1nZXQgdHlwZSgpe3JldHVybiB0aGlzLl90eXBlfXNldCB0eXBlKHQpe3RoaXMuX3R5cGU9dHx8InRleHQiLHRoaXMuX3ZhbGlkYXRlVHlwZSgpLCF0aGlzLl9pc1RleHRhcmVhJiZEeigpLmhhcyh0aGlzLl90eXBlKSYmKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50eXBlPXRoaXMuX3R5cGUpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWV9c2V0IHZhbHVlKHQpe3QhPT10aGlzLnZhbHVlJiYodGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yLnZhbHVlPXQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1nZXQgcmVhZG9ubHkoKXtyZXR1cm4gdGhpcy5fcmVhZG9ubHl9c2V0IHJlYWRvbmx5KHQpe3RoaXMuX3JlYWRvbmx5PXl6KHQpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmdGhpcy5fYXV0b2ZpbGxNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLmF1dG9maWxsZWQ9dC5pc0F1dG9maWxsZWQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSkpfW5nT25DaGFuZ2VzKCl7dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMuX2F1dG9maWxsTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpfW5nRG9DaGVjaygpe3RoaXMubmdDb250cm9sJiZ0aGlzLnVwZGF0ZUVycm9yU3RhdGUoKSx0aGlzLl9kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKSx0aGlzLl9kaXJ0eUNoZWNrUGxhY2Vob2xkZXIoKX1mb2N1cyh0KXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXModCl9X2ZvY3VzQ2hhbmdlZCh0KXt0IT09dGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPXQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1fb25JbnB1dCgpe31fZGlydHlDaGVja1BsYWNlaG9sZGVyKCl7dmFyIHQsZTtjb25zdCBuPShudWxsPT09KGU9bnVsbD09PSh0PXRoaXMuX2Zvcm1GaWVsZCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuX2hpZGVDb250cm9sUGxhY2Vob2xkZXIpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwodCkpP251bGw6dGhpcy5wbGFjZWhvbGRlcjtpZihuIT09dGhpcy5fcHJldmlvdXNQbGFjZWhvbGRlcil7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fcHJldmlvdXNQbGFjZWhvbGRlcj1uLG4/dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIixuKTp0LnJlbW92ZUF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiKX19X2RpcnR5Q2hlY2tOYXRpdmVWYWx1ZSgpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO3RoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWUhPT10JiYodGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZT10LHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X3ZhbGlkYXRlVHlwZSgpe2lmKElZLmluZGV4T2YodGhpcy5fdHlwZSk+LTEmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSkKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCnRocm93KGZ1bmN0aW9uIHQoZSl7cmV0dXJuIEVycm9yKGBJbnB1dCB0eXBlICIke2V9IiBpc24ndCBzdXBwb3J0ZWQgYnkgbWF0SW5wdXQuYCl9KSh0aGlzLl90eXBlKX1faXNOZXZlckVtcHR5KCl7cmV0dXJuIHRoaXMuX25ldmVyRW1wdHlJbnB1dFR5cGVzLmluZGV4T2YodGhpcy5fdHlwZSk+LTF9X2lzQmFkSW5wdXQoKXtsZXQgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsaWRpdHk7cmV0dXJuIHQmJnQuYmFkSW5wdXR9Z2V0IGVtcHR5KCl7cmV0dXJuISh0aGlzLl9pc05ldmVyRW1wdHkoKXx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlfHx0aGlzLl9pc0JhZElucHV0KCl8fHRoaXMuYXV0b2ZpbGxlZCl9Z2V0IHNob3VsZExhYmVsRmxvYXQoKXtpZih0aGlzLl9pc05hdGl2ZVNlbGVjdCl7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZT10Lm9wdGlvbnNbMF07cmV0dXJuIHRoaXMuZm9jdXNlZHx8dC5tdWx0aXBsZXx8IXRoaXMuZW1wdHl8fCEhKHQuc2VsZWN0ZWRJbmRleD4tMSYmZSYmZS5sYWJlbCl9cmV0dXJuIHRoaXMuZm9jdXNlZHx8IXRoaXMuZW1wdHl9c2V0RGVzY3JpYmVkQnlJZHModCl7dC5sZW5ndGg/dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsdC5qb2luKCIgIikpOnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiKX1vbkNvbnRhaW5lckNsaWNrKCl7dGhpcy5mb2N1c2VkfHx0aGlzLmZvY3VzKCl9fUxZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxMWSkoU20oaGcpLFNtKHd6KSxTbShNaiwxMCksU20oaVUsOCksU20oUFUsOCksU20oYkgpLFNtKHpZLDEwKSxTbShFWSksU20oYV8pLFNtKFJWLDgpKX0sTFkuybVkaXI9bG8oe3R5cGU6TFksc2VsZWN0b3JzOltbImlucHV0IiwibWF0SW5wdXQiLCIiXSxbInRleHRhcmVhIiwibWF0SW5wdXQiLCIiXSxbInNlbGVjdCIsIm1hdE5hdGl2ZUNvbnRyb2wiLCIiXSxbImlucHV0IiwibWF0TmF0aXZlQ29udHJvbCIsIiJdLFsidGV4dGFyZWEiLCJtYXROYXRpdmVDb250cm9sIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWlucHV0LWVsZW1lbnQiLCJtYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sIl0saG9zdFZhcnM6OSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmVm0oImZvY3VzIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9mb2N1c0NoYW5nZWQoITApfSkpKCJibHVyIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9mb2N1c0NoYW5nZWQoITEpfSkpKCJpbnB1dCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fb25JbnB1dCgpfSkpLDImZSYmKFR1KCJkaXNhYmxlZCIsbi5kaXNhYmxlZCkoInJlcXVpcmVkIixuLnJlcXVpcmVkKSxqcCgiaWQiLG4uaWQpKCJkYXRhLXBsYWNlaG9sZGVyIixuLnBsYWNlaG9sZGVyKSgicmVhZG9ubHkiLG4ucmVhZG9ubHkmJiFuLl9pc05hdGl2ZVNlbGVjdHx8bnVsbCkoImFyaWEtaW52YWxpZCIsbi5lbXB0eSYmbi5yZXF1aXJlZD9udWxsOm4uZXJyb3JTdGF0ZSkoImFyaWEtcmVxdWlyZWQiLG4ucmVxdWlyZWQpLHB1KCJtYXQtaW5wdXQtc2VydmVyIixuLl9pc1NlcnZlcikpfSxpbnB1dHM6e2lkOiJpZCIsZGlzYWJsZWQ6ImRpc2FibGVkIixyZXF1aXJlZDoicmVxdWlyZWQiLHR5cGU6InR5cGUiLHZhbHVlOiJ2YWx1ZSIscmVhZG9ubHk6InJlYWRvbmx5IixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLGVycm9yU3RhdGVNYXRjaGVyOiJlcnJvclN0YXRlTWF0Y2hlciIsdXNlckFyaWFEZXNjcmliZWRCeTpbImFyaWEtZGVzY3JpYmVkYnkiLCJ1c2VyQXJpYURlc2NyaWJlZEJ5Il19LGV4cG9ydEFzOlsibWF0SW5wdXQiXSxmZWF0dXJlczpbcGcoW3twcm92aWRlOmJWLHVzZUV4aXN0aW5nOkxZfV0pLHhwLEJvXX0pLExZLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6aGd9LHt0eXBlOnd6fSx7dHlwZTpNaixkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9XX0se3R5cGU6aVUsZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6UFUsZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6Ykh9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6RHJ9LHt0eXBlOmtyLGFyZ3M6W3pZXX1dfSx7dHlwZTpFWX0se3R5cGU6YV99LHt0eXBlOkFWLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltSVl19XX1dLExZLnByb3BEZWNvcmF0b3JzPXtkaXNhYmxlZDpbe3R5cGU6eHl9XSxpZDpbe3R5cGU6eHl9XSxwbGFjZWhvbGRlcjpbe3R5cGU6eHl9XSxyZXF1aXJlZDpbe3R5cGU6eHl9XSx0eXBlOlt7dHlwZTp4eX1dLGVycm9yU3RhdGVNYXRjaGVyOlt7dHlwZTp4eX1dLHVzZXJBcmlhRGVzY3JpYmVkQnk6W3t0eXBlOnh5LGFyZ3M6WyJhcmlhLWRlc2NyaWJlZGJ5Il19XSx2YWx1ZTpbe3R5cGU6eHl9XSxyZWFkb25seTpbe3R5cGU6eHl9XSxfZm9jdXNDaGFuZ2VkOlt7dHlwZTp3eSxhcmdzOlsiZm9jdXMiLFsidHJ1ZSJdXX0se3R5cGU6d3ksYXJnczpbImJsdXIiLFsiZmFsc2UiXV19XSxfb25JbnB1dDpbe3R5cGU6d3ksYXJnczpbImlucHV0Il19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChMWSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLFxuICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixleHBvcnRBczoibWF0SW5wdXQiLGhvc3Q6e2NsYXNzOiJtYXQtaW5wdXQtZWxlbWVudCBtYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sIiwiW2NsYXNzLm1hdC1pbnB1dC1zZXJ2ZXJdIjoiX2lzU2VydmVyIiwiW2F0dHIuaWRdIjoiaWQiLCJbYXR0ci5kYXRhLXBsYWNlaG9sZGVyXSI6InBsYWNlaG9sZGVyIiwiW2Rpc2FibGVkXSI6ImRpc2FibGVkIiwiW3JlcXVpcmVkXSI6InJlcXVpcmVkIiwiW2F0dHIucmVhZG9ubHldIjoicmVhZG9ubHkgJiYgIV9pc05hdGl2ZVNlbGVjdCB8fCBudWxsIiwiW2F0dHIuYXJpYS1pbnZhbGlkXSI6IihlbXB0eSAmJiByZXF1aXJlZCkgPyBudWxsIDogZXJyb3JTdGF0ZSIsIlthdHRyLmFyaWEtcmVxdWlyZWRdIjoicmVxdWlyZWQifSxwcm92aWRlcnM6W3twcm92aWRlOmJWLHVzZUV4aXN0aW5nOkxZfV19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpoZ30se3R5cGU6d3p9LHt0eXBlOk1qLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpEcn1dfSx7dHlwZTppVSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTpQVSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTpiSH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpEcn0se3R5cGU6a3IsYXJnczpbelldfV19LHt0eXBlOkVZfSx7dHlwZTphX30se3R5cGU6QVYsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1JWXX1dfV19KSx7aWQ6W3t0eXBlOnh5fV0sZGlzYWJsZWQ6W3t0eXBlOnh5fV0scmVxdWlyZWQ6W3t0eXBlOnh5fV0sdHlwZTpbe3R5cGU6eHl9XSx2YWx1ZTpbe3R5cGU6eHl9XSxyZWFkb25seTpbe3R5cGU6eHl9XSxfZm9jdXNDaGFuZ2VkOlt7dHlwZTp3eSxhcmdzOlsiZm9jdXMiLFsidHJ1ZSJdXX0se3R5cGU6d3ksYXJnczpbImJsdXIiLFsiZmFsc2UiXV19XSxfb25JbnB1dDpbe3R5cGU6d3ksYXJnczpbImlucHV0Il19XSxwbGFjZWhvbGRlcjpbe3R5cGU6eHl9XSxlcnJvclN0YXRlTWF0Y2hlcjpbe3R5cGU6eHl9XSx1c2VyQXJpYURlc2NyaWJlZEJ5Olt7dHlwZTp4eSxhcmdzOlsiYXJpYS1kZXNjcmliZWRieSJdfV19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIEJZe31mdW5jdGlvbiBWWSh0LGUpe2lmKDEmdCYmKFJtKDAsIm1hdC1lcnJvciIpLGt1KDEpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgpO3JjKDEpLER1KCIgUmVsb2FkIHBlcmlvZCBoYXMgdG8gYmUgbWluaW11bSBvZiAiLHQuTUlOX1JFTE9BRF9QRVJJT0RfSU5fUywiIHNlY29uZHMuICIpfX1mdW5jdGlvbiBqWSh0LGUpezEmdCYmKFJtKDAsIm1hdC1lcnJvciIpLGt1KDEsIiBQYWdlIHNpemUgaGFzIHRvIGJlIGEgcG9zaXRpdmUgaW50ZWdlci4gIiksQW0oKSl9QlkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJZKX0sQlkuybVtb2Q9YW8oe3R5cGU6Qll9KSxCWS7JtWluaj12bih7cHJvdmlkZXJzOltiSF0saW1wb3J0czpbW1RZLFRWLFhJXSxUWSxUVl19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEJZLFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltMWSxOWV0saW1wb3J0czpbVFksVFYsWEldLGV4cG9ydHM6W1RZLFRWLExZLE5ZXSxwcm92aWRlcnM6W2JIXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKEJZLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bTFksTlldfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1RZLFRWLFhJXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltUWSxUVixMWSxOWV19fSk7Y2xhc3MgVVl7Y29uc3RydWN0b3IoKXt0aGlzLnJlbG9hZFRvZ2dsZWQ9bmV3IExoLHRoaXMucmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQ9bmV3IExoLHRoaXMucGFnZVNpemVDaGFuZ2VkPW5ldyBMaCx0aGlzLk1JTl9SRUxPQURfUEVSSU9EX0lOX1M9MzAsdGhpcy5yZWxvYWRQZXJpb2RDb250cm9sPW5ldyAkaih0aGlzLk1JTl9SRUxPQURfUEVSSU9EX0lOX1MsW3FWLnJlcXVpcmVkLHFWLm1pbih0aGlzLk1JTl9SRUxPQURfUEVSSU9EX0lOX1MpXSksdGhpcy5wYWdpbmF0aW9uQ29udHJvbD1uZXcgJGooMSxbcVYucmVxdWlyZWQscVYubWluKDEpLHQ9Pntjb25zdCBlPU51bWJlcih0LnZhbHVlKTtyZXR1cm4gTWF0aC5yb3VuZChlKT09PXQudmFsdWU/bnVsbDp7aW50ZWdlcjp7dmFsdWU6dC52YWx1ZX19fV0pLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgSX1uZ09uSW5pdCgpe3RoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShJZSh0aGlzLm5nVW5zdWJzY3JpYmUpLGdlKDUwMCksY2UoKCgpPT50aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wudmFsaWQpKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWxpZCYmdGhpcy5yZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZC5lbWl0KDFlMyp0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wudmFsdWUpfSkpLHRoaXMucGFnaW5hdGlvbkNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoSWUodGhpcy5uZ1Vuc3Vic2NyaWJlKSxnZSg1MDApLGNlKCgoKT0+dGhpcy5wYWdpbmF0aW9uQ29udHJvbC52YWxpZCkpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5wYWdlU2l6ZUNoYW5nZWQuZW1pdCh0aGlzLnBhZ2luYXRpb25Db250cm9sLnZhbHVlKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9bmdPbkNoYW5nZXModCl7aWYodC5yZWxvYWRQZXJpb2RJbk1zKXtjb25zdCBlPXQucmVsb2FkUGVyaW9kSW5NcztlLnByZXZpb3VzVmFsdWUhPT1lLmN1cnJlbnRWYWx1ZSYmdGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnNldFZhbHVlKGUuY3VycmVudFZhbHVlLzFlMyl9aWYodC5yZWxvYWRFbmFibGVkJiYodC5yZWxvYWRFbmFibGVkLmN1cnJlbnRWYWx1ZT90aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wuZW5hYmxlKCk6dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLmRpc2FibGUoKSksdC5wYWdlU2l6ZSl7Y29uc3QgZT10LnBhZ2VTaXplO2UucHJldmlvdXNWYWx1ZSE9PWUuY3VycmVudFZhbHVlJiZ0aGlzLnBhZ2luYXRpb25Db250cm9sLnNldFZhbHVlKGUuY3VycmVudFZhbHVlKX19b25SZWxvYWRUb2dnbGUoKXt0aGlzLnJlbG9hZFRvZ2dsZWQuZW1pdCgpfX1VWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VVkpfSxVWS7JtWNtcD10byh7dHlwZTpVWSxzZWxlY3RvcnM6W1sic2V0dGluZ3MtZGlhbG9nLWNvbXBvbmVudCJdXSxpbnB1dHM6e3JlbG9hZEVuYWJsZWQ6InJlbG9hZEVuYWJsZWQiLHJlbG9hZFBlcmlvZEluTXM6InJlbG9hZFBlcmlvZEluTXMiLHBhZ2VTaXplOiJwYWdlU2l6ZSJ9LG91dHB1dHM6e3JlbG9hZFRvZ2dsZWQ6InJlbG9hZFRvZ2dsZWQiLHJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkOiJyZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZCIscGFnZVNpemVDaGFuZ2VkOiJwYWdlU2l6ZUNoYW5nZWQifSxmZWF0dXJlczpbQm9dLGRlY2xzOjE0LHZhcnM6NSxjb25zdHM6W1sxLCJyZWxvYWQtdG9nZ2xlIl0sWzMsImNoZWNrZWQiLCJjaGFuZ2UiXSxbIm1hdElucHV0IiwiIiwidHlwZSIsIm51bWJlciIsInBsYWNlaG9sZGVyIiwiUmVsb2FkIFBlcmlvZCIsMSwicmVsb2FkLXBlcmlvZCIsMywiZm9ybUNvbnRyb2wiXSxbNCwibmdJZiJdLFsibWF0SW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwicGxhY2Vob2xkZXIiLCJQYWdpbmF0aW9uIExpbWl0IiwxLCJwYWdlLXNpemUiLDMsImZvcm1Db250cm9sIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJoMyIpLGt1KDEsIlNldHRpbmdzIiksQW0oKSxSbSgyLCJkaXYiKSxSbSgzLCJkaXYiLDApLFJtKDQsIm1hdC1jaGVja2JveCIsMSksVm0oImNoYW5nZSIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblJlbG9hZFRvZ2dsZSgpfSkpLGt1KDUsIlJlbG9hZCBkYXRhIiksQW0oKSxBbSgpLFJtKDYsImRpdiIpLFJtKDcsIm1hdC1mb3JtLWZpZWxkIiksVG0oOCwiaW5wdXQiLDIpLEFtKCksUXAoOSxWWSwyLDEsIm1hdC1lcnJvciIsMyksQW0oKSxBbSgpLFJtKDEwLCJkaXYiKSxSbSgxMSwibWF0LWZvcm0tZmllbGQiKSxUbSgxMiwiaW5wdXQiLDQpLEFtKCksUXAoMTMsalksMiwwLCJtYXQtZXJyb3IiLDMpLEFtKCkpLDImZSYmKHJjKDQpLERtKCJjaGVja2VkIixuLnJlbG9hZEVuYWJsZWQpLHJjKDQpLERtKCJmb3JtQ29udHJvbCIsbi5yZWxvYWRQZXJpb2RDb250cm9sKSxyYygxKSxEbSgibmdJZiIsbi5yZWxvYWRQZXJpb2RDb250cm9sLmhhc0Vycm9yKCJtaW4iKXx8bi5yZWxvYWRQZXJpb2RDb250cm9sLmhhc0Vycm9yKCJyZXF1aXJlZCIpKSxyYygzKSxEbSgiZm9ybUNvbnRyb2wiLG4ucGFnaW5hdGlvbkNvbnRyb2wpLHJjKDEpLERtKCJuZ0lmIixuLnBhZ2luYXRpb25Db250cm9sLmludmFsaWQpKX0sZGlyZWN0aXZlczpbT1ksQVYsTFksZlUsVlYseGoseFUsZE0sZ1ZdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICBmb250LXNpemU6IDE1cHg7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgPiBkaXZbX25nY29udGVudC0lQ09NUCVdIHtcbiAgbWFyZ2luOiAxMHB4IDA7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgPiBbX25nY29udGVudC0lQ09NUCVdOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cblxuW19uZ2hvc3QtJUNPTVAlXSAgICA+IFtfbmdjb250ZW50LSVDT01QJV06bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbmgzW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbn1cblxuLnJlbG9hZC10b2dnbGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn0iXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoVVksW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3Rvcjoic2V0dGluZ3MtZGlhbG9nLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6InNldHRpbmdzX2RpYWxvZ19jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9zZXR0aW5nc19kaWFsb2dfY29tcG9uZW50LmNzcyJdfV19XSxudWxsLHtyZWxvYWRFbmFibGVkOlt7dHlwZTp4eX1dLHJlbG9hZFBlcmlvZEluTXM6W3t0eXBlOnh5fV0scGFnZVNpemU6W3t0eXBlOnh5fV0scmVsb2FkVG9nZ2xlZDpbe3R5cGU6T3l9XSxyZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZDpbe3R5cGU6T3l9XSxwYWdlU2l6ZUNoYW5nZWQ6W3t0eXBlOk95fV19KTtjbGFzcyBHWXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5yZWxvYWRFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChETiksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChFTiksdGhpcy5wYWdlU2l6ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoUk4pfW9uUmVsb2FkVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2godk4oKSl9b25SZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZCh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKHhOKHtwZXJpb2RJbk1zOnR9KSl9b25QYWdlU2l6ZUNoYW5nZWQodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChPTih7c2l6ZTp0fSkpfX1HWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8R1kpKFNtKEl3KSl9LEdZLsm1Y21wPXRvKHt0eXBlOkdZLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1kaWFsb2ciXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywicmVsb2FkRW5hYmxlZCIsInJlbG9hZFBlcmlvZEluTXMiLCJwYWdlU2l6ZSIsInJlbG9hZFRvZ2dsZWQiLCJyZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZCIsInBhZ2VTaXplQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwic2V0dGluZ3MtZGlhbG9nLWNvbXBvbmVudCIsMCksVm0oInJlbG9hZFRvZ2dsZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZWxvYWRUb2dnbGVkKCl9KSkoInJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkKGUpfSkpKCJwYWdlU2l6ZUNoYW5nZWQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uUGFnZVNpemVDaGFuZ2VkKGUpfSkpLEFoKDEsImFzeW5jIiksQWgoMiwiYXN5bmMiKSxBaCgzLCJhc3luYyIpLEFtKCkpLDImZSYmRG0oInJlbG9hZEVuYWJsZWQiLFRoKDEsMyxuLnJlbG9hZEVuYWJsZWQkKSkoInJlbG9hZFBlcmlvZEluTXMiLFRoKDIsNSxuLnJlbG9hZFBlcmlvZEluTXMkKSkoInBhZ2VTaXplIixUaCgzLDcsbi5wYWdlU2l6ZSQpKX0sZGlyZWN0aXZlczpbVVldLHBpcGVzOlt3TV0sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChHWSxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJzZXR0aW5ncy1kaWFsb2ciLHRlbXBsYXRlOidcbiAgICA8c2V0dGluZ3MtZGlhbG9nLWNvbXBvbmVudFxuICAgICAgW3JlbG9hZEVuYWJsZWRdPSJyZWxvYWRFbmFibGVkJCB8IGFzeW5jIlxuICAgICAgW3JlbG9hZFBlcmlvZEluTXNdPSJyZWxvYWRQZXJpb2RJbk1zJCB8IGFzeW5jIlxuICAgICAgW3BhZ2VTaXplXT0icGFnZVNpemUkIHwgYXN5bmMiXG4gICAgICAocmVsb2FkVG9nZ2xlZCk9Im9uUmVsb2FkVG9nZ2xlZCgpIlxuICAgICAgKHJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkKT0ib25SZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZCgkZXZlbnQpIlxuICAgICAgKHBhZ2VTaXplQ2hhbmdlZCk9Im9uUGFnZVNpemVDaGFuZ2VkKCRldmVudCkiXG4gICAgPjwvc2V0dGluZ3MtZGlhbG9nLWNvbXBvbmVudD5cbiAgJ31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fV19KSxudWxsKTtjbGFzcyBXWXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmRpYWxvZz10fWlzQnV0dG9uRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PXlFLk5PVF9MT0FERUR8fHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT15RS5MT0FESU5HfW9wZW5EaWFsb2coKXt0aGlzLmRpYWxvZy5vcGVuKEdZLHt3aWR0aDoiNDAwcHgifSl9fVdZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxXWSkoU20ob1cpKX0sV1kuybVjbXA9dG8oe3R5cGU6V1ksc2VsZWN0b3JzOltbInNldHRpbmdzLWJ1dHRvbi1jb21wb25lbnQiXV0saW5wdXRzOntzZXR0aW5nc0xvYWRTdGF0ZToic2V0dGluZ3NMb2FkU3RhdGUifSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1sibWF0LWljb24tYnV0dG9uIiwiIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzdmdJY29uIiwic2V0dGluZ3NfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiYnV0dG9uIiwwKSxWbSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub3BlbkRpYWxvZygpfSkpLFRtKDEsIm1hdC1pY29uIiwxKSxBbSgpKSwyJmUmJkRtKCJkaXNhYmxlZCIsbi5pc0J1dHRvbkRpc2FibGVkKCkpfSxkaXJlY3RpdmVzOltYSCxEV10sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChXWSxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJzZXR0aW5ncy1idXR0b24tY29tcG9uZW50Iix0ZW1wbGF0ZTonXG4gICAgPGJ1dHRvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBbZGlzYWJsZWRdPSJpc0J1dHRvbkRpc2FibGVkKCkiXG4gICAgICAoY2xpY2spPSJvcGVuRGlhbG9nKCkiXG4gICAgPlxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249InNldHRpbmdzXzI0cHgiPjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICd9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpvV31dfSkse3NldHRpbmdzTG9hZFN0YXRlOlt7dHlwZTp4eX1dfSk7Y2xhc3MgWVl7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuc2V0dGluZ3NMb2FkU3RhdGUkPXRoaXMuc3RvcmUuc2VsZWN0KFNOKX19WVkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFlZKShTbShJdykpfSxZWS7JtWNtcD10byh7dHlwZTpZWSxzZWxlY3RvcnM6W1sic2V0dGluZ3MtYnV0dG9uIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsInNldHRpbmdzTG9hZFN0YXRlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihUbSgwLCJzZXR0aW5ncy1idXR0b24tY29tcG9uZW50IiwwKSxBaCgxLCJhc3luYyIpKSwyJmUmJkRtKCJzZXR0aW5nc0xvYWRTdGF0ZSIsVGgoMSwxLG4uc2V0dGluZ3NMb2FkU3RhdGUkKSl9LGRpcmVjdGl2ZXM6W1dZXSxwaXBlczpbd01dLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoWVksW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3Rvcjoic2V0dGluZ3MtYnV0dG9uIix0ZW1wbGF0ZTonXG4gICAgPHNldHRpbmdzLWJ1dHRvbi1jb21wb25lbnRcbiAgICAgIFtzZXR0aW5nc0xvYWRTdGF0ZV09InNldHRpbmdzTG9hZFN0YXRlJCB8IGFzeW5jIlxuICAgID48L3NldHRpbmdzLWJ1dHRvbi1jb21wb25lbnQ+XG4gICd9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd31dfSksbnVsbCk7Y2xhc3MgcVl7fXFZLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxxWSl9LHFZLsm1Y21wPXRvKHt0eXBlOnFZLHNlbGVjdG9yczpbWyJhcHAtaGVhZGVyIl1dLGRlY2xzOjEwLHZhcnM6MCxjb25zdHM6W1sxLCJicmFuZCJdLFsxLCJwbHVnaW5zIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJocmVmIiwiaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIiwicmVsIiwibm9vcGVuZXIgbm9yZWZlcnJlciIsInRhcmdldCIsIl9ibGFuayIsImFyaWEtbGFiZWwiLCJIZWxwIiwxLCJyZWFkbWUiXSxbInN2Z0ljb24iLCJoZWxwX291dGxpbmVfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwibWF0LXRvb2xiYXIiKSxSbSgxLCJzcGFuIiwwKSxrdSgyLCJUZW5zb3JCb2FyZCIpLEFtKCksVG0oMywicGx1Z2luLXNlbGVjdG9yIiwxKSxUbSg0LCJ0YmRldi11cGxvYWQtYnV0dG9uIiksVG0oNSwiYXBwLWhlYWRlci1kYXJrLW1vZGUtdG9nZ2xlIiksVG0oNiwiYXBwLWhlYWRlci1yZWxvYWQiKSxUbSg3LCJzZXR0aW5ncy1idXR0b24iKSxSbSg4LCJhIiwyKSxUbSg5LCJtYXQtaWNvbiIsMyksQW0oKSxBbSgpKX0sZGlyZWN0aXZlczpbZUIsVkcsSVcsY1kscFksWVksS0gsRFddLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfW1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjY0cHg7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCV9dGJkZXYtdXBsb2FkLWJ1dHRvbi5zaG93bltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgOHB4IDAgMTZweH0uYnJhbmRbX25nY29udGVudC0lQ09NUCVdLCAucmVhZG1lW19uZ2NvbnRlbnQtJUNPTVAlXSwgYXBwLWhlYWRlci1yZWxvYWRbX25nY29udGVudC0lQ09NUCVdLCBzZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZsZXg6MCAwIGF1dG99LmJyYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtsZXR0ZXItc3BhY2luZzotMC4wMjVlbTttYXJnaW4tbGVmdDoxMHB4O3RleHQtcmVuZGVyaW5nOm9wdGltaXplTGVnaWJpbGl0eX0ucGx1Z2luc1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2ZvbnQtc2l6ZToxNHB4O2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0nXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgocVksW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoiYXBwLWhlYWRlciIsdGVtcGxhdGU6J1xuICAgIDxtYXQtdG9vbGJhcj5cbiAgICAgIDxzcGFuIGNsYXNzPSJicmFuZCI+VGVuc29yQm9hcmQ8L3NwYW4+XG4gICAgICA8cGx1Z2luLXNlbGVjdG9yIGNsYXNzPSJwbHVnaW5zIj48L3BsdWdpbi1zZWxlY3Rvcj5cbiAgICAgIDx0YmRldi11cGxvYWQtYnV0dG9uPjwvdGJkZXYtdXBsb2FkLWJ1dHRvbj5cbiAgICAgIDxhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGU+PC9hcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGU+XG4gICAgICA8YXBwLWhlYWRlci1yZWxvYWQ+PC9hcHAtaGVhZGVyLXJlbG9hZD5cbiAgICAgIDxzZXR0aW5ncy1idXR0b24+PC9zZXR0aW5ncy1idXR0b24+XG4gICAgICA8YVxuICAgICAgICBjbGFzcz0icmVhZG1lIlxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIlxuICAgICAgICByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiXG4gICAgICAgIHRhcmdldD0iX2JsYW5rIlxuICAgICAgICBhcmlhLWxhYmVsPSJIZWxwIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj0iaGVscF9vdXRsaW5lXzI0cHgiPjwvbWF0LWljb24+XG4gICAgICA8L2E+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgJyxzdHlsZVVybHM6WyJoZWFkZXJfY29tcG9uZW50LmNzcyJdfV19XSxudWxsLG51bGwpO2NvbnN0IFpZPVsicm91dGVDb250YWluZXIiXTtjbGFzcyBYWXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj10fW5nT25DaGFuZ2VzKHQpe2NvbnN0IGU9dC5hY3RpdmVOZ0NvbXBvbmVudDtpZihlJiYodGhpcy5yb3V0ZUNvbnRhaW5lci5jbGVhcigpLGUuY3VycmVudFZhbHVlKSl7Y29uc3QgdD10aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShlLmN1cnJlbnRWYWx1ZSk7dGhpcy5yb3V0ZUNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQodCl9fX1YWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WFkpKFNtKHVnKSl9LFhZLsm1Y21wPXRvKHt0eXBlOlhZLHNlbGVjdG9yczpbWyJyb3V0ZXItb3V0bGV0LWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmUWgoWlksNyxlaCksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi5yb3V0ZUNvbnRhaW5lcj10LmZpcnN0KX19LGlucHV0czp7YWN0aXZlTmdDb21wb25lbnQ6ImFjdGl2ZU5nQ29tcG9uZW50In0sZmVhdHVyZXM6W0JvXSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sicm91dGVDb250YWluZXIiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmSW0oMCxudWxsLDApfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFhZLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InJvdXRlci1vdXRsZXQtY29tcG9uZW50Iix0ZW1wbGF0ZToiIDxuZy1jb250YWluZXIgI3JvdXRlQ29udGFpbmVyPjwvbmctY29udGFpbmVyPiAiLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp1Z31dfSkse3JvdXRlQ29udGFpbmVyOlt7dHlwZTpaYSxhcmdzOlsicm91dGVDb250YWluZXIiLHtzdGF0aWM6ITAscmVhZDplaH1dfV0sYWN0aXZlTmdDb21wb25lbnQ6W3t0eXBlOnh5fV19KTtjbGFzcyBLWXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3RvcmU9dCx0aGlzLnJlZ2lzdHJ5PWUsdGhpcy5hY3RpdmVOZ0NvbXBvbmVudCQ9V3QoW3RoaXMuc3RvcmUuc2VsZWN0KFNTKSx0aGlzLnN0b3JlLnNlbGVjdChEUyldKS5waXBlKEl0KCgoW3QsZV0pPT50P251bGwhPT1lJiZRayhlLnJvdXRlS2luZCxlLnBhcmFtcykhPT1Rayh0LnJvdXRlS2luZCx0LnBhcmFtcyk/bnVsbDp0aGlzLnJlZ2lzdHJ5LmdldE5nQ29tcG9uZW50QnlSb3V0ZUtpbmQodC5yb3V0ZUtpbmQpOm51bGwpKSl9fXZhciBKWTtLWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8S1kpKFNtKEl3KSxTbShQUykpfSxLWS7JtWNtcD10byh7dHlwZTpLWSxzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldCJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJhY3RpdmVOZ0NvbXBvbmVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVG0oMCwicm91dGVyLW91dGxldC1jb21wb25lbnQiLDApLEFoKDEsImFzeW5jIikpLDImZSYmRG0oImFjdGl2ZU5nQ29tcG9uZW50IixUaCgxLDEsbi5hY3RpdmVOZ0NvbXBvbmVudCQpKX0sZGlyZWN0aXZlczpbWFldLHBpcGVzOlt3TV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChLWSxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJyb3V0ZXItb3V0bGV0Iix0ZW1wbGF0ZTonXG4gICAgPHJvdXRlci1vdXRsZXQtY29tcG9uZW50XG4gICAgICBbYWN0aXZlTmdDb21wb25lbnRdPSJhY3RpdmVOZ0NvbXBvbmVudCQgfCBhc3luYyJcbiAgICA+PC9yb3V0ZXItb3V0bGV0LWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9LHt0eXBlOlBTfV19KSxudWxsKSwoZnVuY3Rpb24odCl7dFt0LkFDVElWRV9QTFVHSU49MF09IkFDVElWRV9QTFVHSU4ifSkoSll8fChKWT17fSkpO2NsYXNzIFFZe2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVlcExpbmtlcj10LHRoaXMub25WYWx1ZUNoYW5nZT1uZXcgTGgsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJLHRoaXMub25IYXNoQ2hhbmdlPW9lKHdpbmRvdywicG9wc3RhdGUiLHtwYXNzaXZlOiEwfSkucGlwZShJZSh0aGlzLm5nVW5zdWJzY3JpYmUpKX1uZ09uSW5pdCgpe3RoaXMub25IYXNoQ2hhbmdlLnN1YnNjcmliZSgoKCk9Pntjb25zdCB0PXRoaXMuZGVlcExpbmtlci5nZXRQbHVnaW5JZCgpO3QhPT10aGlzLmFjdGl2ZVBsdWdpbklkJiZ0aGlzLm9uVmFsdWVDaGFuZ2UuZW1pdCh7cHJvcDpKWS5BQ1RJVkVfUExVR0lOLHZhbHVlOnR9KX0pKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9bmdPbkNoYW5nZXModCl7aWYodC5hY3RpdmVQbHVnaW5JZCl7Y29uc3QgZT10LmFjdGl2ZVBsdWdpbklkO3RoaXMuZGVlcExpbmtlci5zZXRQbHVnaW5JZChudWxsPT09ZS5jdXJyZW50VmFsdWU/IiI6ZS5jdXJyZW50VmFsdWUse2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhdGlvblJlcGxhY2U6bnVsbD09PWUucHJldmlvdXNWYWx1ZXx8ZS5maXJzdENoYW5nZX0pfX19UVkuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFFZKShTbShWUykpfSxRWS7JtWNtcD10byh7dHlwZTpRWSxzZWxlY3RvcnM6W1siaGFzaC1zdG9yYWdlLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVBsdWdpbklkOiJhY3RpdmVQbHVnaW5JZCJ9LG91dHB1dHM6e29uVmFsdWVDaGFuZ2U6Im9uVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbQm9dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoUVksW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoiaGFzaC1zdG9yYWdlLWNvbXBvbmVudCIsdGVtcGxhdGU6IiIsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlZTfV19KSx7YWN0aXZlUGx1Z2luSWQ6W3t0eXBlOnh5fV0sb25WYWx1ZUNoYW5nZTpbe3R5cGU6T3l9XX0pO2NsYXNzICRZe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmFjdGl2ZVBsdWdpbklkJD10aGlzLnN0b3JlLnBpcGUoRncoTVIpKX1vblZhbHVlQ2hhbmdlZCh0KXtzd2l0Y2godC5wcm9wKXtjYXNlIEpZLkFDVElWRV9QTFVHSU46dGhpcy5zdG9yZS5kaXNwYXRjaChDRSh7cGx1Z2luOnQudmFsdWV9KSl9fX0kWS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8JFkpKFNtKEl3KSl9LCRZLsm1Y21wPXRvKHt0eXBlOiRZLHNlbGVjdG9yczpbWyJoYXNoLXN0b3JhZ2UiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywiYWN0aXZlUGx1Z2luSWQiLCJvblZhbHVlQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJoYXNoLXN0b3JhZ2UtY29tcG9uZW50IiwwKSxWbSgib25WYWx1ZUNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25WYWx1ZUNoYW5nZWQoZSl9KSksQWgoMSwiYXN5bmMiKSxBbSgpKSwyJmUmJkRtKCJhY3RpdmVQbHVnaW5JZCIsVGgoMSwxLG4uYWN0aXZlUGx1Z2luSWQkKSl9LGRpcmVjdGl2ZXM6W1FZXSxwaXBlczpbd01dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCgkWSxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJoYXNoLXN0b3JhZ2UiLHRlbXBsYXRlOidcbiAgICA8aGFzaC1zdG9yYWdlLWNvbXBvbmVudFxuICAgICAgW2FjdGl2ZVBsdWdpbklkXT0iYWN0aXZlUGx1Z2luSWQkIHwgYXN5bmMiXG4gICAgICAob25WYWx1ZUNoYW5nZSk9Im9uVmFsdWVDaGFuZ2VkKCRldmVudCkiXG4gICAgPlxuICAgIDwvaGFzaC1zdG9yYWdlLWNvbXBvbmVudD5cbiAgJyxzdHlsZXM6WyJcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICAiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLG51bGwpO2NsYXNzIHRxe25nT25DaGFuZ2VzKHQpe3QudGl0bGUmJihmdW5jdGlvbiBlKHQpe2RvY3VtZW50LnRpdGxlPXR9KSh0LnRpdGxlLmN1cnJlbnRWYWx1ZSl9fXRxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx0cSl9LHRxLsm1Y21wPXRvKHt0eXBlOnRxLHNlbGVjdG9yczpbWyJwYWdlLXRpdGxlLWNvbXBvbmVudCJdXSxpbnB1dHM6e3RpdGxlOiJ0aXRsZSJ9LGZlYXR1cmVzOltCb10sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh0cSxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJwYWdlLXRpdGxlLWNvbXBvbmVudCIsdGVtcGxhdGU6IiIsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sbnVsbCx7dGl0bGU6W3t0eXBlOnh5fV19KTtjb25zdCBlcT0iVGVuc29yQm9hcmQiO2NsYXNzIG5xe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zdG9yZT10LHRoaXMuY3VzdG9tQnJhbmROYW1lPWUsdGhpcy5nZXRFeHBlcmltZW50SWQkPXRoaXMuc3RvcmUuc2VsZWN0KFRTKS5waXBlKEl0KCh0PT5udWxsPT10P3ZvaWQgMDp0WzBdKSkpLHRoaXMuZXhwZXJpbWVudE5hbWUkPXRoaXMuZ2V0RXhwZXJpbWVudElkJC5waXBlKGNlKEJvb2xlYW4pLFp0KCh0PT50aGlzLnN0b3JlLnNlbGVjdCh1QSx7ZXhwZXJpbWVudElkOnR9KSkpLEl0KCh0PT50P3QubmFtZTpudWxsKSkpLHRoaXMudGl0bGUkPXRoaXMuc3RvcmUuc2VsZWN0KHhSKS5waXBlKGZlKHRoaXMuc3RvcmUuc2VsZWN0KFJTKSx0aGlzLmV4cGVyaW1lbnROYW1lJCksSXQoKChbdCxlLG5dKT0+e2NvbnN0IG89dGhpcy5jdXN0b21CcmFuZE5hbWV8fGVxO3JldHVybiB0LndpbmRvd190aXRsZT90LndpbmRvd190aXRsZTplPT09WmsuRVhQRVJJTUVOVCYmbj9gJHtufSAtICR7b31gOm99KSksTmUodGhpcy5jdXN0b21CcmFuZE5hbWV8fGVxKSxNZSgpKX19bnEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG5xKShTbShJdyksU20odUUsOCkpfSxucS7JtWNtcD10byh7dHlwZTpucSxzZWxlY3RvcnM6W1sicGFnZS10aXRsZSJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJ0aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVG0oMCwicGFnZS10aXRsZS1jb21wb25lbnQiLDApLEFoKDEsImFzeW5jIikpLDImZSYmRG0oInRpdGxlIixUaCgxLDEsbi50aXRsZSQpKX0sZGlyZWN0aXZlczpbdHFdLHBpcGVzOlt3TV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKG5xLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InBhZ2UtdGl0bGUiLHRlbXBsYXRlOidcbiAgICA8cGFnZS10aXRsZS1jb21wb25lbnQgW3RpdGxlXT0idGl0bGUkIHwgYXN5bmMiPjwvcGFnZS10aXRsZS1jb21wb25lbnQ+XG4gICcsc3R5bGVzOlsiXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W3VFXX1dfV19KSxudWxsKTtjbGFzcyBvcXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJLHRoaXMuZ2V0UGFnZVNpemUkPXRoaXMuc3RvcmUucGlwZShGdyhSTikpLHRoaXMucGFnaW5hdGVkVmlld1N0b3JlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLXBhZ2luYXRlZC12aWV3LXN0b3JlIikudGZfcGFnaW5hdGVkX3ZpZXd9bmdPbkluaXQoKXt0aGlzLmdldFBhZ2VTaXplJC5waXBlKEllKHRoaXMubmdVbnN1YnNjcmliZSksTWUoKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5wYWdpbmF0ZWRWaWV3U3RvcmUuc2V0TGltaXQodCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfX1vcS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8b3EpKFNtKEl3KSl9LG9xLsm1Y21wPXRvKHt0eXBlOm9xLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1wb2x5bWVyLWludGVyb3AiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChvcSxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJzZXR0aW5ncy1wb2x5bWVyLWludGVyb3AiLHRlbXBsYXRlOiIiLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd31dfSksbnVsbCk7Y2xhc3MgaXF7Y29uc3RydWN0b3IodCl7dC5zZWxlY3QoSkQpLnN1YnNjcmliZSgodD0+e2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiZGFyay1tb2RlIix0KX0pKX19aXEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGlxKShTbShJdykpfSxpcS7JtWNtcD10byh7dHlwZTppcSxzZWxlY3RvcnM6W1siZGFyay1tb2RlLXN1cHBvcnRlciJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7fSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoaXEsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoiZGFyay1tb2RlLXN1cHBvcnRlciIsdGVtcGxhdGU6IiIsc3R5bGVzOlsiXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fV19KSxudWxsKTtjbGFzcyBhcXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnZjUmVmPXR9fWFxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxhcSkoU20oZWgpKX0sYXEuybVjbXA9dG8oe3R5cGU6YXEsc2VsZWN0b3JzOltbInRiLXdlYmFwcCJdXSxkZWNsczo4LHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVG0oMCwiYXBwLWhlYWRlciIpLFJtKDEsIm1haW4iKSxUbSgyLCJyb3V0ZXItb3V0bGV0IiksQW0oKSxUbSgzLCJhbGVydC1zbmFja2JhciIpLFRtKDQsImhhc2gtc3RvcmFnZSIpLFRtKDUsInBhZ2UtdGl0bGUiKSxUbSg2LCJzZXR0aW5ncy1wb2x5bWVyLWludGVyb3AiKSxUbSg3LCJkYXJrLW1vZGUtc3VwcG9ydGVyIikpfSxkaXJlY3RpdmVzOltxWSxLWSxYTCwkWSxucSxvcSxpcV0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9aHRtbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90byxzYW5zLXNlcmlmO2hlaWdodDoxMDAlO21hcmdpbjowO3BhZGRpbmc6MH1bX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQ6I2Y1ZjVmNTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfWFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MCAxcHggM3B4IDNweCByZ2JhKDAsMCwwLC4yNSk7ZmxleDowIDA7ei1pbmRleDoxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIGFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBhcHAtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgMXB4IDNweCAzcHggcmdiYSgyNTUsMjU1LDI1NSwuMSl9bWFpbltfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0b30nXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoYXEsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoidGItd2ViYXBwIix0ZW1wbGF0ZVVybDoiLi9hcHBfY29udGFpbmVyLm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vYXBwX2NvbnRhaW5lci5jc3MiXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmVofV19KSxudWxsKTtjbGFzcyBycXtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5zdG9yZT10LHRoaXMubG9jYXRpb249ZSx0aGlzLmFwcFJvb3RQcm92aWRlcj1uLHRoaXMucGF0aG5hbWU9bnVsbH1oYW5kbGVDbGljayh0KXshdGhpcy5wYXRobmFtZXx8dC5jdHJsS2V5fHx0Lm1ldGFLZXl8fCh0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnN0b3JlLmRpc3BhdGNoKGxTKHtwYXRobmFtZTp0aGlzLnBhdGhuYW1lfSkpKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLnBhdGhuYW1lP3RoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QodGhpcy5sb2NhdGlvbi5nZXRGdWxsUGF0aEZyb21Sb3V0ZU9yTmF2KHtwYXRobmFtZTp0aGlzLnBhdGhuYW1lfSkpOm51bGx9c2V0IHJvdXRlckxpbmsodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0JiYodD1bdF0pLDA9PT10Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicm91dGVMaW5rIHNob3VsZCBoYXZlIHByb3BlciBwYXRoLiBHb3Qgbm90aGluZy4iKTtjb25zdCBlPVsuLi50XS5qb2luKCIvIik7dGhpcy5wYXRobmFtZT1lLmVuZHNXaXRoKCIvIik/ZTplKyIvIn19cnEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHJxKShTbShJdyksU20odFMpLFNtKGVTKSl9LHJxLsm1ZGlyPWxvKHt0eXBlOnJxLHNlbGVjdG9yczpbWyJhIiwicm91dGVyTGluayIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZWbSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmhhbmRsZUNsaWNrKGUpfSkpLDImZSYmanAoImhyZWYiLG4uaHJlZixUcyl9LGlucHV0czp7cm91dGVyTGluazoicm91dGVyTGluayJ9fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChycSxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJhW3JvdXRlckxpbmtdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fSx7dHlwZTp0U30se3R5cGU6ZVN9XX0pLHtoYW5kbGVDbGljazpbe3R5cGU6d3ksYXJnczpbImNsaWNrIixbIiRldmVudCJdXX1dLGhyZWY6W3t0eXBlOlB5LGFyZ3M6WyJhdHRyLmhyZWYiXX1dLHJvdXRlckxpbms6W3t0eXBlOnh5fV19KTtjbGFzcyBzcXt9c3EuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHNxKX0sc3EuybVtb2Q9YW8oe3R5cGU6c3F9KSxzcS7JtWluaj12bih7aW1wb3J0czpbW1dNLGlTLG9TLFBTXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHNxLFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbV00saVMsb1MsUFNdLGV4cG9ydHM6W0tZLHJxXSxkZWNsYXJhdGlvbnM6W0tZLFhZLHJxXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKHNxLHtkZWNsYXJhdGlvbnM6W0tZLFhZLHJxXSxpbXBvcnRzOltXTSxpUyxvUyxQU10sZXhwb3J0czpbS1kscnFdfSk7Y2xhc3MgbHF7fWxxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxscSl9LGxxLsm1bW9kPWFvKHt0eXBlOmxxfSksbHEuybVpbmo9dm4oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgobHEsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2lxXSxleHBvcnRzOltpcV19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhscSx7ZGVjbGFyYXRpb25zOltpcV0sZXhwb3J0czpbaXFdfSk7Y2xhc3MgY3F7fWNxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxjcSl9LGNxLsm1bW9kPWFvKHt0eXBlOmNxfSksY3EuybVpbmo9dm4oe3Byb3ZpZGVyczpbe3Byb3ZpZGU6VlMsdXNlQ2xhc3M6VVN9XX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoY3EsW3t0eXBlOkF5LGFyZ3M6W3twcm92aWRlcnM6W3twcm92aWRlOlZTLHVzZUNsYXNzOlVTfV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgZHF7fWRxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkcSl9LGRxLsm1bW9kPWFvKHt0eXBlOmRxfSksZHEuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxjcV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChkcSxbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbJFksUVldLGV4cG9ydHM6WyRZXSxpbXBvcnRzOltXTSxjcV19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhkcSx7ZGVjbGFyYXRpb25zOlskWSxRWV0saW1wb3J0czpbV00sY3FdLGV4cG9ydHM6WyRZXX0pO2NsYXNzIHBxe31wcS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cHEpfSxwcS7JtW1vZD1hbyh7dHlwZTpwcX0pLHBxLsm1aW5qPXZuKHtpbXBvcnRzOltbV01dXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgocHEsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W25xLHRxXSxleHBvcnRzOltucV0saW1wb3J0czpbV01dfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8ocHEse2RlY2xhcmF0aW9uczpbbnEsdHFdLGltcG9ydHM6W1dNXSxleHBvcnRzOltucV19KTtjb25zdCBtcT17aWQ6WGssbmFtZToiIixzdGFydF90aW1lOjB9LHVxPXlrKHtleHBlcmltZW50TWFwOntbbXEuaWRdOm1xfX0pO2Z1bmN0aW9uIGZxKHQsZSl7cmV0dXJuIHh3KHtkYXRhOnVxfSkodCxlKX1jbGFzcyBncXt9Z3EuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGdxKX0sZ3EuybVtb2Q9YW8oe3R5cGU6Z3F9KSxncS7JtWluaj12bih7aW1wb3J0czpbW2RrLmZvckZlYXR1cmUocEEsZnEpXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGdxLFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbZGsuZm9yRmVhdHVyZShwQSxmcSldfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oZ3Ese2ltcG9ydHM6W2NrXX0pO2NsYXNzIGhxe31mdW5jdGlvbiBicSgpe3JldHVybiBadyhETiwodD0+KHthdXRvUmVsb2FkOnR9KSkpfWZ1bmN0aW9uIHlxKCl7cmV0dXJuIFp3KEVOLCh0PT4oe2F1dG9SZWxvYWRQZXJpb2RJbk1zOnR9KSkpfWZ1bmN0aW9uIF9xKCl7cmV0dXJuIFp3KFJOLCh0PT4oe3BhZ2VTaXplOnR9KSkpfWhxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxocSl9LGhxLsm1bW9kPWFvKHt0eXBlOmhxfSksaHEuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxjRyxkRyxKSCxTWSxkVyxFVyxCWV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChocSxbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbV1ksWVksVVksR1ksb3FdLGV4cG9ydHM6W1dZLFlZLEdZLG9xXSxlbnRyeUNvbXBvbmVudHM6W0dZXSxpbXBvcnRzOltXTSxjRyxkRyxKSCxTWSxkVyxFVyxCWV19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhocSx7ZGVjbGFyYXRpb25zOltXWSxZWSxVWSxHWSxvcV0saW1wb3J0czpbV00sY0csZEcsSkgsU1ksZFcsRVcsQlldLGV4cG9ydHM6W1dZLFlZLEdZLG9xXX0pO2NsYXNzIENxe31DcS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Q3EpfSxDcS7JtW1vZD1hbyh7dHlwZTpDcX0pLENxLsm1aW5qPXZuKHtpbXBvcnRzOltbZGsuZm9yRmVhdHVyZShQTixmWSkscVMuZGVmaW5lR2xvYmFsU2V0dGluZyhicSkscVMuZGVmaW5lR2xvYmFsU2V0dGluZyh5cSkscVMuZGVmaW5lR2xvYmFsU2V0dGluZyhfcSldLGhxXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoQ3EsW3t0eXBlOkF5LGFyZ3M6W3tleHBvcnRzOltocV0saW1wb3J0czpbZGsuZm9yRmVhdHVyZShQTixmWSkscVMuZGVmaW5lR2xvYmFsU2V0dGluZyhicSkscVMuZGVmaW5lR2xvYmFsU2V0dGluZyh5cSkscVMuZGVmaW5lR2xvYmFsU2V0dGluZyhfcSldfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oQ3Ese2ltcG9ydHM6W2NrLHFTLHFTLHFTXSxleHBvcnRzOltocV19KTtjbGFzcyBNcXt9TXEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE1xKX0sTXEuybVtb2Q9YW8oe3R5cGU6TXF9KSxNcS7JtWluaj12bih7cHJvdmlkZXJzOlt7cHJvdmlkZToid2luZG93Iix1c2VWYWx1ZTp3aW5kb3d9XSxpbXBvcnRzOltbZ1csV00sSkgsZFcsRVddXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoTXEsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0lXLFJXLFRXXSxleHBvcnRzOltJV10sZW50cnlDb21wb25lbnRzOltUV10saW1wb3J0czpbZ1csV00sSkgsZFcsRVddLHByb3ZpZGVyczpbe3Byb3ZpZGU6IndpbmRvdyIsdXNlVmFsdWU6d2luZG93fV19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhNcSx7ZGVjbGFyYXRpb25zOltJVyxSVyxUV10saW1wb3J0czpbZ1csV00sSkgsZFcsRVddLGV4cG9ydHM6W0lXXX0pO2NsYXNzIHZxe312cS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dnEpfSx2cS7JtW1vZD1hbyh7dHlwZTp2cX0pLHZxLsm1aW5qPXZuKHtwcm92aWRlcnM6W10saW1wb3J0czpbW0pILEVXLEtCLG5CLFRHLG9ZLFdNLEVSLENxLE1xXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHZxLFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltsWSxjWSxxWSxGRyxWRyxwWV0sZXhwb3J0czpbY1kscVksVkcscFldLHByb3ZpZGVyczpbXSxpbXBvcnRzOltKSCxFVyxLQixuQixURyxvWSxXTSxFUixDcSxNcV19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyh2cSx7ZGVjbGFyYXRpb25zOltsWSxjWSxxWSxGRyxWRyxwWV0saW1wb3J0czpbSkgsRVcsS0IsbkIsVEcsb1ksV00sRVIsQ3EsTXFdLGV4cG9ydHM6W2NZLHFZLFZHLHBZXX0pO2NsYXNzIHhxe2NvbnN0cnVjdG9yKHQsZSl7Y29uc3Qgbj10LmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCgiLi9pY29uX2J1bmRsZS5zdmciKTtlLmFkZFN2Z0ljb25TZXQobil9fXhxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx4cSkodnIoenYpLHZyKENXKSl9LHhxLsm1bW9kPWFvKHt0eXBlOnhxfSkseHEuybVpbmo9dm4oe2ltcG9ydHM6W1tFV11dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh4cSxbe3R5cGU6QXksYXJnczpbe2ltcG9ydHM6W0VXXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnp2fSx7dHlwZTpDV31dfSksbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyh4cSx7aW1wb3J0czpbRVddfSk7Y29uc3QgT3E9bmV3IEdhKCJbcGx1Z2luc10gUGx1Z2luIHJlZ2lzdHJ5IGNvbmZpZyIpLFBxPW5ldyBNYXA7Y2xhc3Mgd3F7Y29uc3RydWN0b3IodCl7aWYoIXQpcmV0dXJuO2NvbnN0IGU9bmV3IFNldCh0Lm1hcCgodD0+dC5wbHVnaW5OYW1lKSkpO2NvbnNvbGUuYXNzZXJ0KGUuc2l6ZT09PXQubGVuZ3RoLCJDYW5ub3QgcmVnaXN0ZXIgdGhlIHNhbWUgcGx1Z2luIG11bHRpcGxlIHRpbWVzLiIpO2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0e3BsdWdpbk5hbWU6dCxjb21wb25lbnRDbGFzczpufT1lO1BxLnNldCh0LG4pfX1zdGF0aWMgZm9yUGx1Z2luKHQsZSl7cmV0dXJue25nTW9kdWxlOndxLHByb3ZpZGVyczpbe3Byb3ZpZGU6T3EsbXVsdGk6ITAsdXNlVmFsdWU6e3BsdWdpbk5hbWU6dCxjb21wb25lbnRDbGFzczplfX1dfX1nZXRDb21wb25lbnQodCl7cmV0dXJuIFBxLmdldCh0KXx8bnVsbH19d3EuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHdxKSh2cihPcSw4KSl9LHdxLsm1bW9kPWFvKHt0eXBlOndxfSksd3EuybVpbmo9dm4oe30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgod3EsW3t0eXBlOkF5LGFyZ3M6W3t9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W09xXX1dfV19KSxudWxsKTtjbGFzcyBrcXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmh0dHA9dCx0aGlzLmh0dHBQYXRoUHJlZml4PSJkYXRhL3BsdWdpbi9kZWJ1Z2dlci12MiJ9ZmV0Y2hSdW5zKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3J1bnMiKX1mZXRjaEV4ZWN1dGlvbkRpZ2VzdHModCxlLG4pe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9leGVjdXRpb24vZGlnZXN0cyIse3BhcmFtczp7cnVuOnQsYmVnaW46U3RyaW5nKGUpLGVuZDpTdHJpbmcobil9fSl9ZmV0Y2hFeGVjdXRpb25EYXRhKHQsZSxuKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZXhlY3V0aW9uL2RhdGEiLHtwYXJhbXM6e3J1bjp0LGJlZ2luOlN0cmluZyhlKSxlbmQ6U3RyaW5nKG4pfX0pfWZldGNoR3JhcGhFeGVjdXRpb25EaWdlc3RzKHQsZSxuLG8pe2lmKHZvaWQgMCE9PW8pdGhyb3cgbmV3IEVycm9yKCJ0cmFjZV9pZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIGZldGNoR3JhcGhFeGVjdXRpb25EaWdlc3RzKCkgeWV0Iik7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2dyYXBoX2V4ZWN1dGlvbi9kaWdlc3RzIix7cGFyYW1zOntydW46dCxiZWdpbjpTdHJpbmcoZSksZW5kOlN0cmluZyhuKX19KX1mZXRjaEdyYXBoRXhlY3V0aW9uRGF0YSh0LGUsbixvKXtpZih2b2lkIDAhPT1vKXRocm93IG5ldyBFcnJvcigidHJhY2VfaWQgaXMgbm90IGltcGxlbWVudGVkIGZvciBmZXRjaEdyYXBoRXhlY3V0aW9uRGF0YSgpIHlldCIpO3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9ncmFwaF9leGVjdXRpb24vZGF0YSIse3BhcmFtczp7cnVuOnQsYmVnaW46U3RyaW5nKGUpLGVuZDpTdHJpbmcobil9fSl9ZmV0Y2hHcmFwaE9wSW5mbyh0LGUsbil7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2dyYXBocy9vcF9pbmZvIix7cGFyYW1zOntydW46dCxncmFwaF9pZDplLG9wX25hbWU6bn19KX1mZXRjaFNvdXJjZUZpbGVMaXN0KHQpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9zb3VyY2VfZmlsZXMvbGlzdCIse3BhcmFtczp7cnVuOnR9fSl9ZmV0Y2hTb3VyY2VGaWxlKHQsZSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3NvdXJjZV9maWxlcy9maWxlIix7cGFyYW1zOntydW46dCxpbmRleDpTdHJpbmcoZSl9fSl9ZmV0Y2hTdGFja0ZyYW1lcyh0LGUpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9zdGFja19mcmFtZXMvc3RhY2tfZnJhbWVzIix7cGFyYW1zOntydW46dCxzdGFja19mcmFtZV9pZHM6ZS5qb2luKCIsIil9fSkucGlwZShJdCgodD0+KHtzdGFja19mcmFtZXM6dC5zdGFja19mcmFtZXMubWFwKCh0PT4oZnVuY3Rpb24gZSh0KXtyZXR1cm57aG9zdF9uYW1lOnRbMF0sZmlsZV9wYXRoOnRbMV0sbGluZW5vOnRbMl0sZnVuY3Rpb25fbmFtZTp0WzNdfX0pKHQpKSl9KSkpKX1mZXRjaEFsZXJ0cyh0LGUsbixvKXtjb25zdCBpPXtydW46dCxiZWdpbjpTdHJpbmcoZSksZW5kOlN0cmluZyhuKX07cmV0dXJuIHZvaWQgMCE9PW8mJihpLmFsZXJ0X3R5cGU9byksdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvYWxlcnRzIix7cGFyYW1zOml9KX19a3EuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGtxKSh2cihsRSkpfSxrcS7JtXByb3Y9TW4oe3Rva2VuOmtxLGZhY3Rvcnk6a3EuybVmYWN9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGtxLFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpsRX1dfSksbnVsbCk7Y2xhc3MgU3F7fVNxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxTcSl9LFNxLsm1bW9kPWFvKHt0eXBlOlNxfSksU3EuybVpbmo9dm4oe3Byb3ZpZGVyczpba3FdLGltcG9ydHM6W1tjRV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChTcSxbe3R5cGU6QXksYXJnczpbe2ltcG9ydHM6W2NFXSxwcm92aWRlcnM6W2txXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKFNxLHtpbXBvcnRzOltjRV19KTtjbGFzcyBEcXt9RHEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fERxKX0sRHEuybVjbXA9dG8oe3R5cGU6RHEsc2VsZWN0b3JzOltbImluYWN0aXZlLWNvbXBvbmVudCJdXSxkZWNsczo1NCx2YXJzOjAsY29uc3RzOltbMSwiY29udGFpbmVyIl0sWzEsInRpdGxlIl0sWzEsImNvZGUiXSxbMSwiYXJnIl0sWzEsImV4aGliaXRzLWNvbnRhaW5lciJdLFsxLCJleGhpYml0Il0sWzEsInNjcmVlbnNob3QiXSxbInNyYyIsImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVFlBQUFFMkNBWUFBQURydkw2cEFBQW95SHBVV0hSU1lYY2djSEp2Wm1sc1pTQjBlWEJsSUdWNGFXWUFBSGphclp4cGRoeTVjb1gvWXhWZUF1WmhPUmdDNTNnSFhyNi9pMkpyZW1xcm4rMVdpNlNLeFV3a0VIR0hRSURPL3VzL3Ivc1AvaHV0WlpkTDYzWFU2dmt2anp6aTVJdnVQLytOOXpINC9ENisvMUw5K2lyOC9Mcjc5bzNJNTZSM2ZyN1I1dWR6bUx4ZXZ2L0FYL2NJNitmWFhmLzZUdXhmRi9yNkJoZitqRUIzMXRmbngwSHlldnk4SHZMWGhZWjl2cWlqdHgrSHVyNHV0TC9lK0lieTlUZC9HOWJuay83dGZucWhNVXVuY0tNVW82V1EvUHVZUHlOSW43K1R2KzE5akx3djhOcE1LUVgzK2ZSMU1TYmtwOGY3NjdQM1AwN1FUNVA4MTFmdTE5bi85dFV2a3gvbjErdnBsN21zWDNQazYrKy9FY292cjZkdnQ0ay9oY08zRWNXZnYzRjd6UC95T0Y5Lzd6MzlYdnM4M2N5VkdhMWZFZlVtKzY4WjBoc1hVNTdlajFYK05QNFd2bTd2eitCUDk5TnZsdno0N1JkL2RoZ2hzaXJYaFJ4T21PRUdlNTkzMkF3eFI0dU56ekh1bU41clBiVTQ0azVhcDZ3LzRjYVdSanFwczI0N21tUE5jb3JmeGhMZWZjZTczdzZkTzUvQVcyUGdZbHJxdi8zai9xZHYvanQvM0wxYlV4UjgvelpYakNzcXJobUdWazRmZVJkTEVPN1h1cFUzd1gvOStWcCsvMFA4RUtxc1lIblQzSG5BNmRmbkVxdUU3N0dWM2pvbjNsZjQvRm5qNE5yNXVnQlR4TDBMZ3dtSkZmQTFwQkpxOEMzR0ZnTHoyRm1neWNoanluR3hBcUdVZUJoa3pDblY2RnJzVWZmbVoxcDQ3NDBsMXFpWHdTWVdvcVJLYm5WV2FMSllPUmZpcCtWT0RNMlNTaTZsMU5KS2QyV1VXVlBOdGRSYVd4WEl6WlphYnFYVjFscHZvODJlZXU2bDE5NTY3NlBQRVVjQ0E4dW9vNDAreHBnenVzbU5KdGVhdkgveXlvb3JyYnpLcXF1dHZzYWFtL0RaZVpkZGQ5dDlqejFQUE9rQUU2ZWVkdm9aWjFwd0JsSll0bUxWbW5VYk5pK3hkdFBOdDl4NjIrMTMzUGx0MWI1VzlWLysvQnVyRnI1V0xiNlYwdnZhdDFYalZkZmFYNWNJZ3BPaU5XUEZZZzZzZU5NS0VOQlJhK1o3eURscTViUm1ma1NTb2tRR1diUTI3Z1N0R0V1WUxjUnl3N2UxKzc1eS8yamRYT24vYU4zaW4xYk9hZW4rUDFiT3NYVC91bTYvV2JVam50dHZ4VDVacURuMWlleTdaWnk0M0k1eDFUTG50SmxhUzJYdUZYTUxhWmVRV3oyMXJucUJrOXZQTHQzSHhyZTZaNVlQbk1Na0hMOXlQYUhvUXIybWZPUHhFM2hmcGQwMTAyRnBrNTZ5TTQ2OVRyNjUzMVVZTFpjRy84NDhPN1JqM0xTc3VGZFk1dG8wbml1bGZYbmtsdkkrbnFRc0J3QmRmVzhtZGQ4V29tK3NaT285NTU3KzRvWWtLTDlsbmpaakp5RDVPSFZ6bTZXdVdjNWNaWmVUSnludnpmTzQyWWM2Um84UnJTR1NQbmxNUzIzbmNRbTFmSS9DeGFVZVRpM3dkZHNnd3RwMzdicHV5TVhhWWJKcnYxWUE3dVhUYWNiVDVkRGEzS3pEQ20weWY1VXhNMzNiNVFrOWhGMW40YVozU1JTRXMyOGZ6V0k2Vm1lSXlXeHM0MXErcmg3V09DMGFWekRpdUsvR1BCRVF3U21KQ09uK3hFUmFZOTdNMEViYnZoeml0bmF5b0xHRVBNSnN1MXBpa1FmZ05jdGw2WHNJMXRmTmxoMXozRzhvZHBLRndjTWh1eTZQNGxFVFFPSHVNNDJ5N0I3TlNDSU9UN3A5WHlZL0hPWDJRaUsxZlJaejFIWUVPWGlZZmtyTithUmx1L2hWZlIrUm1HUnR5VEk3blptb2ljZzcvdVp5RDhHOUR6azZFb05vc2FHUGFneDVaUktOY1laOFd6bjdpQXZQOWJQWktHWWtKdmNOUE5EMW5ZYytQQ1J3UFkxUXlIRHRhdFhjNnJYQ3hKZEpiWk9STWhlVmRMQithMHVSbXhJUmhjbGsyT2UwYm9jdzdpeUVKK1p6Vk1EeWdmK2R4TjJZZXNycnIvWFR5Tmk5V3BuNTlNMDAzV09OQlNZVkV2ZFY2QmF1SFBaS0RETldHeFZZS2JlNFdFY1NjR3crRTZFa3hzbkowQk05dEJLWXQ2QWJWejFPR2d1Z0lmZnZIRVQ2SkZvTDR3UWN6bUN5Szh6V1NLTWFod2ZIeUdHR2txWUdFTllCVG5PRGpNdGNaeEZZMmJZVmNBT1FJMklodDd1TnBTUkY5a1JDZENZWVBPVHJHeUEvVnJjdVltSGNYYStGblJseU9Zblp0VkRTM2p3T29kcHRTZkFrd1U4eU55NloxWGpBS2FCWXVaK3doYlVrRkFoYUEvUkpGdm8rUVFWYkF6Q3ViU2NGb3lka0pwTi9iaUhtSElIT3R3dWh0bmRPZTBtRXdRZkxHOGhSMHdnbEt4UkoyMkp4RTFDRGZONFRlcmRid0VER3lQVldkRHN0QUdPMkM4TGI2Qy9tUmdQTG1KaDRnS3JXenlTbWdmNEZGbGZ3ajVjSlVGRGtLa3dPa1hQbmNZMVpKZ0tQRVZhZ0c2blFvSlNJZGtzeGQ4VlFPMW15K1M0a21TMkZ4QllFVk5ZdWx5UWtZNUZRL2lFTWI2Y1FqdU9za3hKaWxGZ0RNb3p3OEtZQkdWRTZSaGl4MWhJOXQyOWtYeWRLWWp5ekxsWWhJMnVZeXBHQ2dlTTFBWGZlR3lBMDg5T2txSnRNZW1mMGkxd0hNRjYrZjI0a0pNaEZoRVhRaWpnQ0hiRU81QnY4dUMvNUltSWxCZ09NQ21vQ2cyUDdUYWlCM0FFQUJWdFJtSk1GSmlTenFHSEFLYTd1QVVPUEJwcDBCbVNRNGdVTklSTmZZUDFGVk56Yy9ENEFkMEdlb28wclV1MENZUkFCVHlxV3UyazRVQlR0dFhoV0l3Uk5yQXN4RGpKM3JkMVg3Y0lLaFd1VEtTQVNlU0JtSDBpWXl0V05zQWFoaHJtamxTV1ZXQ0x6MnpKRU9zWTlGUTZyd3ZiZWJWOGlrRXVrc2xseUxOQ05zemFBNktZSjN5MkxBY3kydVJnMHlaaFdtdWlVeGhVRUFMVlpJbFFQY01UVkd6UlBzdkxvbXhDY0Z4QWFyV1JDd3RhMUNFbTZUUGdRdXhpL2phNnYrQUFlR3NRaXF3MThJdHBZUjBKZU9Dd1dBVWxMWXVyMktzTUkwbzRuSU5YTjVUU1kraHhaOVhQNUZwZGNDbGVnc0VQSFlHSmg0VWoyVWxZZy9OcmxHbk1zSm1NalZMaFpZRVhUbG1JREZWbVd4SlNqb3pBT3hCY3EyWVBsVVU0M041SFUvWWFGdi8vczlFVUd0a3NtYXJvQWRPOExCWkVFWnlJbGRrSlE5VEJyUlI4Y1VyYklYb01QTWszTVNnT3pab0ZGN0JJWEZ6RllHcU5ackJ4NnlMTmVnRXNpbi9xR3VJS3VqaHpQSFRteVJIQ0VCcmxtRWpSOGU5VGxrT2RubGF0WlBhdW53d2ZqbmR3OEkxb1dkQWI3b3lNazQ5QmVxWEhQR01sbEVtT1VSc0FNTkV3MzVxaEFud0J5T2NnOGtET1RtMnY0WXdVaGdLSElCS1VGcENEUEMvcXh0UDU2VUdSc1lMOEZDUThnTFRtSW5wOHhLWkF1ZE1DSThzT1hmQU9vQUxrOERnK1Z6amFXcDBwSG5BZVI2Q2xtNWFUWmk1WFRGOW0vejE3RUoxbU1jb2w1QXgxTUplQU93Y3E5NEIyUlBRZ0pRaGpVSHVnVnBCeU1kQVc0QUdXVU9IUHRqZ0k4Ly9LeVhtM0tBd3h3MlFOUVFocVFOOEZTWC9ub0ViR1c1V0E5MGE3TXJYY0xXMlZvU2lJeUNla3ZySCtUeEtvRXpnMWkxMFpXMkRwRzhnellkM2Q0STI4bWdYVWhjcVJkajBOaWlYZVFCbVErUzVvQnExU1FDUFBGdk1JRXpHNUZvclNSK0loRzVCd2lPeXRtRTdDQXJKODdPVGlJTllSbHhLOXozNW1ZOTdvV0lnZm9aa2FnTVM3TTRJQUpjQzRkbnBtQmNvdUw2WWRIdHRla3VDQnNxdWVBSk9RMnF5bnhESHNzekFEWVRIREJCd2huSHBVdkNJY05tUFlKODJFSWdoSXpTTnd2aDYyL3FGc3doYWVUa0NJMFlDeFNIV3lYK3I5RFRtS0JUajBiOEVBNHMrNHNDeCtoYzUrUmFYdkRJb2hoWTdxMTVIeGo0SnBLWVdhR3lVRVV5RHFzUmt4MTY1M0Z1TUlXeFhWRnpFR1pDSTJUSlhoZFFoekFXNENwdUFIeVpSUm9OQVlML1JnUDI1RVJnWGtvOEdmZWltK1VRMGZBTGNLU2pPQ0JRYkx0OW43Z2F2Q1RzZkRjbmpTMTlBWlZpSG5NRm9NZjh4UkJHcWc1R0JEZmcrbDZ3MDFKd203MHUxdGdXRldnWENSekp2MlJOUTJHSjlZbmlMbXc1MFJySmtpTXlRVnAwb0pLa1RRcXNzMG5Kb1ltM0JVRi9FQzk2TVlFU1VORzgwenh6UkRBakd0b09MdXFkVitFMkVsZDZvSDVLS3JUbGZEMTJZVmZYdmoxTTg4Qmtac25DbGp5eG1JeVVGSzN5dG9OTFE4cXNVK0Uxc0I0SUZnMnVoOCtSQkloRDhrZVJEaHZ3UzB1RkFUMlUrYXBpcThObzFnRFZnWHJwZVVETTJGSWMwQ2V4OUMwcCtQQkw2SVJUYTRNK2Qyckt5ZEV5bnhnalIwQ2JrRWFNQWRWeXd1SnJMeGRzNDdzeFh6aVVnbG1GbjRsd0JrN0FkSGphSnNQYlMydXdHQU54b0JlMGFHUUY3QkdISGtVb2ljeFR3ZlJWRUVCQUlvaXY0cEZpZkR0S3c0bjRTMEdFOXdKZFZnUmJEdG5zOEI0aWFUS1FITVhKWUlXNnZJc1RLN2hpdURDblFGSkpneTloN2NHUzBHNXhGdkp2cWFFaDNJbVNiZEltYXFVYU0xeDM0cmNRUGZpSTlDSHZVYUZqdzNtc2hLQWd4aEg1c0hPQURrMEVGUEFxUjVWaGRmWDB2SnhaZ2VNRWk2YnFTTWZFUzlkdzdFYjVDTWxSN2tkN0RQSVY3SUJHN3RFQ1pmd0dnMEZIQWNUZmdqQTdiQSt0NkpNSTR4dGsrbkVUbHkvSUkyRGwwMVpNcjBVNG5VRG5TajlQVUg5S2prUDlWd0VKaTVoZ0crT3Q2QVlLdmlCYkNETU10UW1kc3prdXlvdGQrRXZzWDVRTUltUDZpWDRXWktPOVFlbE8yQVo4VHU1T0d3NVVBeWgrUVpSamd1WGJpQk5kRWwrR3c2S0M0MUVrbTlpT1pBODFhOVIwWnk0TGloQWhXMVdGb0lrc1J2RSt5aTF3Vmt6TjJSakJ0K3d0Z1NTS2d1NkczR3lBZU83aENsSFZvaGJvWWFpYkpCTlJ3QTI1bzdjUmxlU3UxYzJoY1ZsWmdGZzFwMHhtT1Myblp3TmFnR0lXQlhRRWlXRlk2N2dzRExaVFRDOE5WVkJ5SDl1TFdGM3lId01mVlJkMTBmSWxEQkRCYWFTNWxCUS9lN216alEyd0xaQzE3OFoyei8rcnZzZnZvM2dIWmkzeWRSVUtMczJTUkNNak9GRXZDcER5TWs0VHdEemVuVG80SHQ1dEJWNU51Z2FUTjk4WjRtMjhZZnBDV0pzZjg4a2ZTakk2Z1QrSWtUQ1NJQXl1cmJzQnRnNWVETmwvR1Z0d1dxMURaVjFnZytkamhDend6eXBOb04wUWI1K2dMWFV2dlFWMmdYMlJWa3RlVXlFVnBtcVFudkJKOCtHaWNkKzRUd2J1blFUMndENUJXdHlSQThOVkJ2UFF5RGpJOUFhcjhhQVJXQXNqdHh2Q0VWNEVHL2pzUkZIUWtRQ0UrZWgwVi9CS2tsRFhCWFFNT0ZYVVZwZ0ZtU25Za1p2cW03OGJrU0FkRVNuSTZUSnhiaE5QbkxqcGcyc0JKY2JNbWc5TTA5aU56eTI3Y0JGSFhaVThnUjl4M1NyYXNFaUJsYnd4U1g0SlcwWGtDbmtlSW1JeGJMRkgrVEU1Q21aS1dWRkdzY2pqM0V1NEFnRElZTFIyQ1VPcEEvS0RLMkxZdVk5ZXlxdXF5MzQ0RjVMQjhPbFM3eVBjV0xJN2kxRWRnRzFmbFZyT0ttR2pPOHBRV212Mm5pSU54Z3g0N1RRUXd2elhQd3dINkpRaW9zNDNCKzQrRDdnQlBCSTZYTlJyb0NJR2ZLb3FSSWNoRWc0aVFCaC9ZSmxuUFRLRUJsU0NIWURLaHhra29UR2ozaE93V3lSU3dnejNtODVTQmtmQ0ZBZWhWczJwb21YcWt6OVFFQTErQUlLQmZ6TlhjZ2NqVGtoTXE4S0NuNGtraGhBUnBYckRQQzh5Qnk4eEFGTVpCYk9aSmNxZjRkd3c1aWhDdEVoSkMzeENRWlBSb3ZiNTJhQU92Zm43ZkJLMFZjQmpWRndQSjJuSXc1c1Y3UVhERUpBRUVFb3ZnaHk0bW1OTWJKUzRhcllTcnFxL25zbVM0WDVneDhMZW42QUg3dE1CV2Jnc2ZkVzlSUGtoc2tOa0x3NVl0Y0JKY3kyYXF3TlQwR3VIZFlEcFRWeG1zd2ZBRlFCK29reElRTHc0N1YyOEpNMXhER2VjRkYzR2VyT3ljV0FCT011aUdnRUVLcHF5Sm1RYXdOSzZVT0tHbUlqRXJhUGVFOUd2YmhDWFRsM01wSjFOSW5maW9oQTJ5MWtQSzRSK1lJTTQ1MVFUdVhmQ0hPVkVaSmtQSlBVV2RJTE1HUkJySHlyN0FWNkhVNjRyVHBaS213dlZITVNiSGV4ZWd1Ym5VT3ZTT25FeHpFUVl5dDY4WkxIQ1NBTGlXK0NCQVZNanNZWm5zNldqYnZJQVVNV2NHTXlxd2tIa1FnZUVpcXF2ZkNvd1BpUmVjSlRkZVViZ2dMaU9vUUl5UzNUVkYzUXM3QWl2ak9mczkvU29tMjRDMHNhSVllTG9tem5WVUhIRURrejVxeDYrZXg1QXhlcVEvaFpnWkZ3dE5raCtjZzZUR050VFNWZjhOeS9FaDJvZytoRFBiK3FKdlluUU12R2NyRUVRN1Y0THllOXRodTRicHhEd0EyZ1ZWQkJYcFZuTXYvakoxWHJCODJEWnlGSVhpL0JlQkx1QlRXSFlxL0llaVFVb3dMOHhkam5xSnlBZEF0RitRRlFza1pqU0NWRHJVaTNoSEt6RElGZ3NqekNvOHJ3a3ozanF0VEh1RjNEaVdPRThheFlIdXlvU0lKVVZIWDU3clZBUTYzOVVCMXNUT3ZvU0RqR0JrNys2NHZOdFU4MGdJMkhHdWhBeE5yVlpzRUowbVBNSUJHS0NHeHlwZmRnTFM3UHRVT2RxZ2hweDhaam9WUjNOMlRocks1Q1krT0JDTG8xdnkvMVJTRXlEY2tXK0RmakIrOUlqZmpBbFM5QnVsNEVuYnhpNVNHWVF4ZUc5N1crcUN5Vzl2YUVrcis5K0U4Ly9lMUhCYnZ1NjZkYlRLbytCRlJ4cmR0dlpCQjhwdklNTVlrNlJHYUdxKzJkRmpzcVRvVm5ySStzWFJmVjE0aUZHQkZ6cXQwZTZkTktsdGpXcm9CQzhFck5HUUJ6dURzMGIzRDAxZzVFT3BYcHFxck40TFFyVjNmaUNvS2lvM3VnUmtnVTBUb0FjOUlyUkJGWnNpelBnek1XOHhUVktyQTJrSTU4SHNhNkU1a1dyMHNKc0FocnFCb0N2MGtoSkhTV2FvbS9HMWw0U3ZQb1ZjVUpXWHVGSmdFWUdmQlV4TVpma2grZm04WXowb2g0TEFoY29rSkpQV21URVBDejEyNnFhbzNaZ3lhRVFCeXd6Q0lFbmZhMnQwcFI4QXlhUEwzU2tYUXljcnFYbXlLWWx5T3d3cGZvWTc1R09hSkFtREVZdmdGZEx5U3V3OTVGV0VGVnRneUt4YXpCTFBUOGxtYkU2U0hyUzBoZVZYU2dIWW1lc1FZcklhako1dkZZVnNiTC9ZNkVZWnA0eHVhS2VSRW1hQ1pCbnlsODhHYWtZekR1Yzg2SThQQ0FYQkdWYm5obUtpZzlxeHl6bkJtQVBCSGpxRmtUbXNCNVZzaUoxeVF5WmNaaE9TZ1RFSUFXeUhRVmZ4b3d3a3dEV0VBMHN1NG13SVhVVEhQQ21vQ3RxclJra3JnS0xESTVHV0FUeHN0UGhxT1hWWkJDN1Rpc1FZQitONmtFWlJ0TEtoUkVScU8vRm9NbGdRRThucFh3dy9zeE5pZ1E5cTRxeXV3bG1FWW1abm1SSHNsOU1rZENTK1VWeEwzMkV1NitNQ0wzYkNRSElRajFRYVg0aEE1dXBKTHhVRUhpRjRhdXpLMDI2Z3hGempLRGc3V2NqRE1uNDdSWmh0c2srdkYzQ1AyTDVnQ3A0WjJsblFrMEhpRmZNVERjcTRvcVhjWjBxdXdudlFJOVZOZ1hsa2xoeTZGY1pET0crdzZicHlEL3NMcEhtdy9ZeUNDcjI3WTIrSFpQK3lMWUkwTUh1Q2RpaEF0Z0V3blpDVjVXeEFoQktLT1hDcEZhWW9GaVgzS1FpdVEvT1lLZVpRV1FQT3BBV054ODVZdmIzdW81V05JVGcwRjZtWkl3aXFvMWhRZ0pTeG1OdDBKV0Z0RXZjaFRXa3JQeWkxd0QxSGU4ZW1ORVJuVnQyMTdwcTRrTVpoNFlFcm9maEJ5bDk2WktWZGNtTWhJSTVRMHFJNXo4d1dBNGVWNjBDN09aNE1vcnpVVEt6anVKeTUyYXNPWUU3UndpUnJURkZBTEVLSmxlVlV5T2pjV2ZSQ1pNU3c2U01RUGdERis3Y21IUFgzY2MvdnpaL2MwM1htSFNFNXcvU04ydmN1VXZyNnBIakNkeXFreWtsTENXYzJ6c1hjS0dJN25nUXBBRGEzRWFHTnFUZ2xKSUFwL0FzUU5OVW1QVHRyK3hGancrOHZnUUZSMVFnTkd5N0dZQ1FsUmd5MHdTcnArOGdlSUlERHlzb1RwMjJFOGNXMGZqc2M0TkVHNTRmVGZsV3JWbkpqZFZ0RHRkRDdKTEdhaUV2ZDZ5akpzQjdKaWhzSGJ2R2RPaktobWtzeUNUS05VK0hIU3Y0bVF3d0dtK1RYK3l0V0VqTmhtSm9vRngxZ3MxZkZHVDd1SG5rTmZKdzNLZElHVmNtRDB1aE1iY0lpaE1pQm5XYThtS1NxV055dU9CbVZmS0hCMkROc1pUdHpXSWtSclgxUDRLdUt4U0xmZU9yazN5R1dtTzMxUHhrZmpSTmh6RDV6NEJMd3BtSXp1MVZjZlBBSDJxRFFOSFFObFJ1d3hRYzNLSkhxZ0ZjZUdscXQyVTNobHdXREZCZkhoRzFJZ0s5eVNqdE93YkFnbU9oMk0yVUxza0xGUUppRi9GT2JsMm1WVFVJWXpieHVFeVRMTlhwcVBGVkpBUFN1NVc0T0JscXBLUkZkclNhZHBKQ1VjNGdpaTczU25BTU1DR3hzR081MUs4NGFvWEQ4Zno1M2FzN1BISVNGeFlWRkJTRldoRm5odEd4WkJtTWdXOGQraUpnVTBHQjRIYXVyRmZBQVBNcG5JZlFzMlBpWHNhVUFiVXJGS0FxY2hVYnhsM2VoVTNWQXcxZExzakVNdFpTRVVpSitNU3h6YjhPalBVQ0lQSmRHT3d5cCtLbFh4MmYzckQrNXpiVTBFL0VWejgrVlgzZVRtckN3RTFMTXdIU0dTM2VWazg4c2M4NC9NYkVkcjBkTDVvaWVBZWlKbmJTWnBUbVNCQWlIeXBRL1VtVm8ybGVjME9zb21nY3VTeFFTNGl2aWdVSFNxL0JrL1VSdUlaQThDaXdRR21iWkVJaFZvNW9seXV0MGxzRUJCWFNKVFd5VzBydDhRY1RmU3piYWZTMWxGVHlXaVZjRlJSQ1c3V1B1a2NRbEdZa3JRUDVFd0k2UGtCQUlqMTRHbUdoanhBU0VPdUN6RUt3ajVmalFyS2hRa2k2azBiaFR3L2RBNnBRSnZFZzk1VENUNlVOTStMV1VyeUhLai9oaFFuVFJ6QWpPSkNaR1FZYTZtS2ZER0pBQk42Zld0UEVmTzhrdTJDTGtFOU1PY2dRNUJwU1ZQa1dERUxyWTZ0elFPeTVMeVo1NUg5djQvV244L3UvNHJXbitqUWhWNkFJTjVlaUJEN3Y0bW1EZmVlRWJCdjJCWSthL0RhR3BvenY2NGVkSzUzMGhqd040WW1MTWdXYVlwcmtPL3J1SlZVK3V6cFpLK2V5Ym04ZHVteTloQ0taRG82bmlraDVUcjZ3cW5KRE5nWnVCVDFUWGpWN0dBWGRXQVl3dnVvMVlEQUF5bjR1WWxuRGIxTDNsUVZZVkdDL2FJYk54WUMyTFBYK1lBeFJLUGFSZTBsaExsS3Y5TURSaDZVMkVXOVVvQUF4dXlxazJHczBodTJaOVpTRnBOUjBVY3NPSk1Xc1dUQXdsak1RRk43QlJKK3FXbWt5NldpQWZqT1BnVDR4QVZtK0JvSXhvYmg0OUNUQ1B2dXdCY0dweDNxSExzdUxxL1oxUWdKbXRYTmNzRmFEWHZLYW5BWFZSWFUwem0xU2RCVTVzWFRJMG1Td3pLamgwL3RYYjA2blZERXR2TG9VTVpSRlloSHIxZWx2ZkRLNHZCdlVMK05qT3dabDhsRUE2cEx4bUhJNzl1MmV3VngrYkpqcjNxdkhXdkVJYWxMOGlCOUcxQnZ0Y2JwVlFkZm9BSitBZnI3Q2tEM3Z3N2xueU5ZWXZRM0lmeEx4ZTJIRVA0UjRJZ1RNTEloWG10UmkxNk8rR1A4ZUN5TDljWktWNVF2RDQ5VnE3YXJIRGlDMEJQQlhxVWNuRUJDQTdJQTBGbU1XQWh0bDNPaHMydGxQVnZIZktwWEVnRWF1am9zSnJvWTB1RTJQVmVWWm1CTkVBakVTMHVYWkFXWENoc3A1UnJVTXR6eDlBb2RtQ2hPUk9ZR2FJOHdWOXhWUUdCK0pEZXAvSml2akZocVRNQ0RmUnpIM1JJV016MkNIS2dZVFFXOGhUaE9GUVcwc0dUb0R6K3h5bDBOZmFCY1VrK2IvaTRRRG43VVprZGhOUkhTWXpnVkdEZnordmJhMFVmaFU2WEVEQmIrNzlwemozSFhyZFJWcVZjRGtMU2U0aDZpR3JFd3dJREFaTVBQVUhwN1pTcDhSWWpTWGdKbDhsTjdudHlsbzVIMHM0Qzh1cW53ZkpnV0ZhdHRxUDJOVkdwZ2RuNmRZdkF5d2tyOWt0cTNTeUpuaUFPUm9KMkRBOTFqUWZFVEpLUnlRclk5WTcxNFhsRDRZcDNkWkxWbXVuNnBsUTJsc3hUejFZTUc2clVpc0M3U1hwMTd2cXV2aTFFQWFVbm1VQW9HeGM2VHMvTFplUXpLM2xQY2J6cTNFQ2ZtRk8vZUZrL3pRd3I4S2NMZFAwMkJQMldBKzY2NUp6RkFrQmIxZEJncUdYYUN0dmREOUxZd0hOQWlHTWVIb3ViVlg2RGQvUXUyQTNTWVpnVDB4dWdGbWUwQTZrMFlMMnJuSGlTREg4cFNHR3NuL1ZXZG1XV25NaWdzZ0RndlNkMkNXNW9XVFF4b0V2cEZFQmRHWk9INTMyUUVNb0RmVkhvbEpxd2tOVlduMVlkRHprRXBFdi8xcXB6ZUVZSmphZGRoRXBuVnQ2Rk95MnEzUklYY0FSbW45bzZJMnlFc1o5eXY1OGdWYlEva0dsbHBobll6U1pLbHU1Y2hHZ3IzSzRYbkFSejVCbUc2TXRrMmNOWXdpWFpReUFpOE9DRGd1QXBFUHRST2NORE9mVExSUk9CYytMcklEWGlDSkgwYWRITGd6akNaYXJDL2c4cjFYQmdzWmd4alBtNW45ZmlOT3pMZUQ4SERpNjlmUzVWRXlHRTh6NHAxcVFuQjM5WHdlUlBMSVFIUDhoWGIwSjE2TlJ3alYvRnRta3BwaUgxU0tsMzFjUUh2eHljbXpBaDRGV2JnNG55bnlnN0UrVkJoYkRRUHdpK0diOEFJcGtmb3JqSUQ2UTFXb2F5RERoUGNYdFJBaHNJMjZXdnRwNWRaQTA0VkZjZWpxWDlwa0NwcTA1N05aZGJ1OWxmeHZyM0pES3NYaUp3cGFnR00yaVZJMmtKSzVvV1FoNGYwOEE1b0JhV3BDV1BDNkFDbnF3aFRWby9waG1NQndTVWRwZE0xVVR2Y1hmWDZCb1l2aENTZUFvU2VjM3oyM0h0Vm5YUjF0Q3ByNG5EMG1EVWNFRWE3NHRYQjFqVDd0NDM0Zi96Wi9jMDMvbkVIUVBjUlZSRVdUS3VlOENITGtyU0IxWkJCVmFVaWdLMEFLT1I0K29XaGdEcmQ4TEZKN0V4ZnFBTlpvMi9xY0FuQ3lxdWlGcjJha2hIS1JITHlhaWxSNDJwR2plRmFNSGRvS0J3ZFlsNGRIT0ZEN1RndEorOWNCK0hpdFZtTzk4UjJ0L3FxVk1nUE5Xek85Yng4WGdnUndjTHhPRGJBQ3A5L2tDQTRjaUk1NGlDemYvNFllSnJxQXQ3STRsN1UxeFl5RDZ2K1gzZ0xndEttcVRRTGtTbzJKWkVKOFM2Nnprd1o1bGlubjFqOHJrTTROWWxRaDdZbFZpbmkrNXEzNnAyS2Z2U2FRZmJocUtyWXlKNWR5MmNYSWRma3VFbUJVUHZDZU12S1hXM1lzQkxZZnVZOUlIYU9PdXlnQWpYTFFabHhuMC9IRjNDR2NpZC84VHpadTJ6dzVGb3lKK3JnWGMxNFoxUTV3UjZwNkZqS1ZJc2hkcDgxU0RMQ1pLR0Z2WGJ6UXkxeitFdWZuSHlrUi9oOStyOVJXbG1OOGlnT2kxUFpScVozYmF0VUJjNGVMS2k2TDBFMWtrQWRPOUFaQ0J1M2s5S056V3Q3cTZrM2w4eGdtdFdsSGRRdWh1TzRBV1M4SW1Jc2pxbStEa0hrckZ1Z1RCZWEwemVienZmWExYSzBjdW9OcS85V1luei83UDV2aWZFOUw5eTN4QWo0Uk9RL0RpbURtQWlURVY0RElsNjN2K1JJbURINVpkT1JNZVNacm5lZTE5TS9uSURBTnI0RGFRTDlxMXVNREF0TDRxbCtkaGplUDhSckJuSTJYQ0N6MWlRTHB0cE1rQ0RFZm5OZUxlc0l5c0p0Tzl4MmNZeFJPOUhNY28zcXRjY3E0MzRhY1lQZ1ltSURaQlFHTE1GZFdTaHR2K0NFQVRaN0hlbllHcEJkNTE5QWFSUjhLd2pEWVF1RkFmYm1nbEdHNzVPMHEwNDhxTzl5cVhZR0d1c3d5WFJYeDBSSXU2QkdXZmpiQXFGOGNNUVdrQVRxNDlldWRvWkJzVFBjUGh2dU5KUFVHVis3dFdIcHB6YitIZTdFOTVuZ09TUURvMndyOTc1MEtJWG9RZGRsRlVSaWJ3ZmszV0JwcXFxV29Va3dNQk5ZelVHbGlOSWN6d0JyQU11Z016bE50QUxTNnBEMUt1WWExTkpLVUhKNWJOWk40RDVLTnV5dFhzUWJNcE9nMHgrWW1taWVhYjd2dUNUMnBUSXo0R01KbUczRTR0WDJQTXQ1WHU4ekNTaU5oc3IwT2dUME5udkZFVWdBNXNoVXBCM3Ewb3dhNTZ2aXF2VmxGNTNDUEZzTlNpVE0rbkRIVUNFclZKUm5Kd3F6Q3VyKzFWMmNIZXRvZy8xNkNab2ttdHFyMGl6L3FJenovYlA3VFgzbmQ5V2RIMTk3cFIzTUpkYXU3cFhSYVlBSnk3K0JYaWtWTW1mc2pBaTFRZndVc21ab245bE9RSEdvS0ZpMHAzTFFZSFY0U2UzUzFCYXJuWGZzdEF2cXdrZi9xbHFwWGkva0lkWmF4dVlNc1NiWEJ4NW0wZUdLaVVBQ0pra1VRRnoxUTNCT0xaT3EvamdTcFduL0hOcVdKQXZpQUxSVWxaa1lhbVFGL2RXb1JGamhQR1RSMUxhaFJsa05IVFdGWmpqekhBY1RsWTVHclZqcFJwQ0NtK1I0bTdlOTB3N1ZKeHpHOTlFa1pROXNGWS9DcE5TbVBXbFpCTGRoa0tyeG9QMzk4QWRpcW5vV0s3eVpZUEhhbndzSlZPSEhkQmYxSXZZZ1p3dW5RYTJEL0sxSFVKdlUyNXZHYXlsL2JieERYYmg3YVljUXlGaVlrS0YyT2dGV3JYSmpUQ05jcTYzUnF0YW5UdlFXWnd3OG9xRG02K0RSOWdTdTRTSjhIbVRob2RZTlFXWW9QZGpHQ1pZTENJSkFvYWt5VFNaS20zcW5iVTBVZG1aQTZ0QU42ajVnK1JFUUdSTkhITVUrSUNwbVQ3M3RpR3F6dHFPMk45b3BVWEtQVUlhZWRYNHRxV1c5ZFo5ZjR4M3FLZXJmQ1p5UTcwRmdDQzNSbUZ4Q3g0VlcvNXlwMWxGd1NVaHNJL2JXU1NZam50WHBpK3lkYitXbTltNlV6RldWVlJ3TE1oblFqeGsvZ0hKWEd5eXBPdS9DSEVKSWt1L2RhWThMVFlHczFvYks3QzNxekp0d2oxemd2ZTBsSzU0bmdRVTZtWWNXNnRsWG5Td2RQSWZPa0xGc0h1NC9Gek9vR3JKT3dPbUlVMUVMNjZoSzQ2UGpCZHRRUUhVUDFNM1N4dUxybitTQm5vRUlrbFRBaXNzcUhrMDFQWU1XMHVPTUNRT3BwblVnbm9qQllDTm1vVDNlcGZYc0M3QmNHNVZtekI3NENBQ0dGcHdLcGR5Zmh3cmEybEhKQzhHRTZsVmp2NDVZUnBEMW5SbHAwa293M0lycVFkd3FNUFNrWXpYdm9JNUxCRHJXZzJBR2pEVFFGZFdzaVl3anUzbHN4V3NpS0ZGK2hiUWhqeit0bkJlVjNsRVEyN1RwaFJWZHFhdEJ3VlRvZ2oySzlpQjErby9rMDZteXJoYWNQeHc2ZUovZHJ5L005THVkMi9FM3I3T2VxSnVHbDNPZWh3R3NWSVpZdGhJY3FiTmhwWXlrVXdGRVhLNXFHQXlxZE1FM3BpTmpxRkI3dS9OcU1EYlpCdnhhOE5ORDE3dkwvY2s2TWpqMU9FaUJialZvUytzT25ZOVVwSVdHNkQxRmlLQitWQWxFd3BwL2RLZDhKV1lqL09FSkxrbFRuZW5EMGxpb1IzWkp2VzFCRnErVC93RktVNnBsakJqeUJCdEU3c3Z2dWxXSWEvUnBtOEFOWVVGV3ZnWGRFcGtaOEVDOElna200cFVNVzhHdnJqT01ZYXNyQ0FEUTBTQUFEMzJFYmh6S3BsNVFRS0FuajAwRUdHTXg5VnV5Nk9yMXdIbGxIV3U5d042Vkt1OWxJS1hxYStVTndKUmpQZFNUcno2bnJhMFMxVUVLUU9WNVo1L29SQkRRZ3A3Z3lOb2lPV1dscG9TMnBXaGJKWXNPUWp1OGJxaGRsbk9oWDh0V1I3anN2Rnc3czZ6ejZJUzJDRncxQWVndnFXYVRYNmRSd0JLaTBPZnJpWWhadmZsSmhqQXh2MXEyT3NMTVY4M21yOU9DcEFRbWN0b2RKVVRlYlIxbkpLbTZqblF3ejZCV3l1YlVkcmluQXFkbWdIcngrSk1sQlpzZ1YvV0E0THEzZlB4bEZDU2Nlb0o3ZjNRRVovS2Rxak9YSXpwQ1U2azZuZ3ByYWpTS2tuMldkZm9MMnBpdnNxNU5nMlpiQWd6M1BKcGtxK3FGRWFRbDZkVVBTVTR2OVVsai9PUFY0UXhGL2xUZm9qYjgwSHVHeG9NVFpvU3BKMitwWUhsOGpXRkxUV2JjOGJVRU9mSmJKMTZBRVNPSmwxcEljQVozRTBYYTF6cWZRajVDT3dlVUtnWXBNOWNYczR4ZXJWRERWZUVlZ25MSTZsZHEwakdmNUYrUE9nQ0t3UENBVFh6dDE4aEtLT2tkU24wSFVPTWVDUmZlV05Ld0paRkx4ZmZQdEhHSVVlNzBDME9ISGdLRnJPT0hPb1h4cmltMkFMTlJPR3IzVVJkTWZtMzdPZ0JVTTRiUGZXN1pzRHM2akR0MUlyUEtQbzFJTW5ENXc0cnNxZTBySXAyNWI2bzJ2T08vK00ycmZqRUdpdlNBKzYrT2hiR3NDeXR3R2ZSZ0RVR0pGZ09HTFJsOEFIZXkzTWp0dzgrbEYxczZqd2xwNDRhSWFsWFEzSzA2SnNQVWtpSjg1SnVIUkFPUGp4Nm9pek1CSHlHMk9vUzlQQXlXc0d2VnA4NG5JYWdRTmI0NmozTWsrSEJyeUUxQ2ZhcHd5OUJFdDR4WVBRVjRrSUpPUHlwUUZCMFAxVzdUaHZrQlpsUjhFbGNXTG9SOWtsYkRxZjBCbG45Q1kzN2lnN3RDWGJDWXlKYXRWbGxoRTZGQko0ZVpFeDN6RzJBR3l6KzBWMkllb0YwQmtVMHVCektBbjJMd09wYW1rM2g0U3ZEbzZLd25ZWTJoVklPS2dFMEt0S21BWFZ0VzZUY0RzV1NjamtzT25ocEpvVUtqam9TK3ZnZlVTSEpFQWg1Nlh2Vm5EMEMzNlZpZ05JeUtGc0Fxcm5vZG5SYnM2dFhJMWxxR0owYVh6SHRPU3NlWFJ5bHV2aE1ES2VvYWdWVTY3OGpNdWtYblVMWVJFc2dpdUpqNXlmbWRrOUZPVEkwNHlxc3lzN3F4dFJQc0pKU2hBclZTVjBtRmhlUFdyNjI1NnQ3UHFobnZaRStiQS93MXFidEtuU2lpSnBBY3lPa2dJdUh0VkRjSlJ5YzVNc0dUbVlaeUZFOXhERFd1RVFvb3RLUTZkYml2WmZNcGJWVEc4VHJZcitvMWRKeW1XK0NsS3ZQQUhnWTBKamtxNExFdWRVMlRyb3I1T0tzaVZoeUtlckRQZm5aV1I0eUJST0tDdDhIUzFGUSs5UXNJTWhuOGRqOVZxaVBSWjFDSHRhb1hxQVVKVDlQdnFDRFJnSE5XaTRUU3IySkk2cUVFYWhrZFdWUlAyYS95QSs5Y0RXUU83ZkhMdnBPNEJFL1NNYnNkbWVXVnRCc2NNSlVIWWEwVEkvNkMyVk9IWC9Ec3dPVzRiNGNCTzRvOE5rblFxOU5HTnBOYTNsL2ZLTm1nTTJNQTF3RjhWVkt4TEFSdEZhYkZlQ1BCQ2srUEwwbUszdTVmK1g2dDE0TkNXSHkwQjZScXFQcnhkVjkxM00ybnhuWHZ0OEh5NiszVjRNWUFqclF5bksvRGpKTHdFUnRRNitmNHE5cml3TkpmeTRkcFpLVVpNWVgxdFQ3R1VjeThaVldoYTBvSkJwQWtMY0dpdWc2NURHOEkrdDBOREV2S2YrbjNWRFMxMzZvU0VnUk5iWVhQK1Q0Y0hjZ1QxZEdpWHNKUWxCZkkzWGNtMGRUT05QeCtIY1U2VG4zZWhvcllweDZOaVNUZjJ1a0RNSnZPVm1vZlVJQ3ZYN1lCWlZicFZjRU9VZTYxSjQ0Q3VNeXhtMTd0T1BoczlCYjZCQXA4OUlPS2FXckMwV1pQbDNnRjE4QTRSTmRhOEJLbzYwZFBIUytONkFFbHN0TzJWd096V2FEWHVRdHZYMi9JMFVTR0tOUGlpam9CSDFHRW9LRWVHUThFOFJIeGFxV2FSQmpMa1Z3UlBML3FCYTVOT3h3NGYvMCtEWlYyZWxFbEFSYUVFb1BNVTlwUGhPRmR1Vi9mWDdVQTJUMEJXM2o5SmloU0xFMUNGOXV1T3ErbDN4UVE5QnQrNXRhdnBqQVUzMmc2RTN1Zkw3MEhVYmtNUzBWMHhLNytvL2RUcjU2b0k5ZjhHeFJsVGhFK1RTNVNwZThoUVlwcTRPblJ2VjNTUUQwL3JFWlFYd3h4YWc3dW5Jb1FKQ3BmcUtYNjg3c2ZqbjZ6Q1c5YThBc29kWmR5R3JRaDlYRWRXK2NLY2xUYnNrNEdBYTZPV2ZTTVl1aFg2YWh6WDRwMWZCMGdJTWFBQ0l1U25UbXJaQnJIZk16NzJWZmxXZFJ2dEl3bmRYM2ppZkRxYW1OcUtNQUlUT3R3SWlLVm1OK1cvWTZDZkdndmFnOTZwUFNNNEg2U0Z5eUR3TlUwNS9DQ0FkRFdXWkNzTGR3dWNhSGZ6aFdDVHFxb2s2UWhNVmo4aGJoQytwYWpYeUtoQmhCMVdPZ2IyTGdWbkZ3cTRrNlRxczR0cG5hdFhaWitwWWM2NS9WZHNhNU9DNkpsbU9oY2xVZ3JhYWNDa0dvK2VUMmpBeEszMnM5WDBMbU5kRmpOZ1JObnBwcnlROGR3MVN5Y1ZDTXNQREpKa0xYRnFaTnhPakx6MTYvTWNnaUU5ZmVWSVJ3ajV0VDlOOUN1dGhqZzZ0MTRBQUFCZzJsRFExQkpRME1nY0hKdlptbHNaUUFBZUp4OWtUMUl3MEFjeFY5VHBhSVZCVHVJT0dTb1RoWkVSUnkxQ2tXb0VHcUZWaDFNTHYyQ0pnMUppb3VqNEZwdzhHT3g2dURpckt1RHF5QUlmb0E0T1RvcHVraUovMHNLTFdJOE9PN0h1M3VQdTNlQVVDOHp6ZW9ZQnpUZE5sT0p1SmpKcm9xaFY0UWdvQjg5Q01qTU11WWtLUW5mOFhXUEFGL3ZZanpMLzl5Zm8xZk5XUXdJaU1TenpEQnQ0ZzNpNlUzYjRMeFBIR0ZGV1NVK0p4NHo2WUxFajF4WFBIN2pYSEJaNEprUk01MmFKNDRRaTRVMlZ0cVlGVTJOZUlvNHFtbzY1UXNaajFYT1c1eTFjcFUxNzhsZkdNN3BLOHRjcHptTUJCYXhCQWtpRkZSUlFoazJZclRxcEZoSTBYN2N4ei9rK2lWeUtlUXFnWkZqQVJWb2tGMC8rQi84N3RiS1QwNTRTZUU0MFBuaU9COGpRR2dYYU5RYzUvdlljUm9uUVBBWnVOSmIva29kbVBra3ZkYlNva2RBM3pad2NkM1NsRDNnY2djWWZESmtVM2FsSUUwaG53ZmV6K2lic3NEQUxkQzk1dlhXM01mcEE1Q21ycEkzd01FaE1GcWc3SFdmZDNlMTkvYnZtV1ovUDhhN2NtTHcwWHh2QUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDVBY0NFQjhmQlZ4SHRBQUFJQUJKUkVGVWVOcnNuWGw4Vk9XOS85L1BtUzA3a0lXd2hNVUVBUkVFcEFXMEltb1JwWXExaUZXdy9rVEZ1clNpWGNDNjBOcUNYYkQxdXR3cVdtcXhyZEQySXJkWHNiVEk5WXBMQ3lpaVV0a0RFUklnZXpLVFdjK2M4L3orbUhNbUo1TUppeUlrOEx4ZnIvTUtaQ1l6a3pOblB2bnVYL0g5cjEzQW1xMVZSSDE5R1RieFp1WmQrQUczejF0RjBSMnJXRHR2R0ZETGlobmptTGRoSElzK1dNNzBQS0Q4R2E2NDlGSEtMMTNNOW1jbjA0cWZGYlBHTXUvTjBTellzSndiaXV6dlJ5bGZzWUNIRnIvQzVqMEJmSVZuTWY3bWU3aW1iZ0YzL0M3S3pHVWJXVGllTGtrNEhPYkFnUVBVMU5SUVYxZEhZMk1qVFUxTkJBSUJXbHBhQ0FhRGhNTmh3dUV3MFdpVWFEUktMQllqRm91aDZ6cTZyaE9QeDVPSFlSakpyNFpoWUpxbTg5L0NORTJjaDVUUy9pcWtsTmdISUZLL0FrZ3BoZlhTazE5VHZpZDI3ZHBWWEZCUTBOdm44eFc3WEs1aVRkT0tORTByRUVMa0F6MkFQQ0ZFSHBBTlpBR1pnTmM2WElCbVBaNEpHRURNT3NKQUNBaEtLZjJBWDByWkpLVnNrRkxXRzRaUnArdDZkU1FTcVRsNDhPREJrU05IMWxpUEl4MUh1LzhMSVZKdnM3OEhJSVVRN2I0NkRxbHBHa0lJTkUxTFBhVEw1Y0xsY3FGcEd2YS8zVzUzOHF0OWVEd2UzRzQzaG1IUXZYdDNmRDRmUHArUHpNeE1Nak16eWM3T0ppY25oOXpjWExwMzcwNlBIajBvTEN5a1o4K2U5T25UaDh6TXpHTzQ2dnlzbXp1Sm16ZFBaZFhhK1F4RGtZcDkwYmVlc2hXekdEdnZUVVl2Mk1EeVZtWDZISWl5YnM1WWJsNVZ4QjJyMWpLdmk3MDdzVmlNQXdjT2NPalFJZXJxNm1ob2FLQ3BxUW0vMzU4VXRGQW9SQ1FTSVJLSkhGSFFuR0xtUEV6VEZMYkFwWWhaR3lHenhja3BVcW1DNWZ4L1RVM040SnljbkVGdXQ3dE0wN1JTSWNSQUljUUFZQUNRMFVsT2N3VFlKNlg4eERUTkNzTXc5c1ppc1QyTmpZM2xBd1lNMkowaWNQSXdndGRPQUczaEUwSzBFVHBOMDJTcXlGbkNsaFE1NStFVU41ZkxoV0VZNU9YbDRmVjY4WHE5K0h3K01qSXl5TWpJSUNzckt5bHdlWGw1ZE8vZW5mejhmQW9MQytuVnF4ZDkrdlRCNi9VZVZ0QzJybmlSbDk1Y3hZcFZsUXhiOENyTGJ5aFJLcFlHZHkzUWFsaHRaZkh2MWhQakxDNGNYM1RjQkd6ck0zTlpWaktQK1ZOTDhObmZMVi9CNG5VQjZEdVZTN3VZcU8zZnY1OURodzVSVzF0TGZYMDlqWTJOK1AxK0FvRkFVdERDNGZCaEJVM1g5YVIxbGlwcTZjVE10c3BzWWJQL0tLVVJzamIvMzdWclY4OCtmZnFNOEhnOEkxd3UxOWxDaUxPQnN5RDVWblJtTW9EQlFvakJ0cEI0dlY1eWNuSXdUVE1LYkROTmMyczhIdDhhRG9jLzNybHo1OGZqeG8ycnN5eEZLUk1uU3RyL2Q0cWNsRklLSWV6N0pBWE9NSXlrOVdaYmM5WWhPaEk1cDdDWnBvbW1hWGc4SGp3ZUQxNnZsM0E0ak0vbkl4UUtFUXdHYVdscElSQUk0UGY3YVdwcW9yR3hrWWFHQm1wcmErblZxeGY5K3ZYcitMTzA2Z2wrdDc2SWNUYy95Wk5LMURxMjJJWmNjRDJUSnc2amlGbzJyMXZEQjFWUWV2TlNWczRmVDk1eGVZcEtWc3lheHJ3My9mUWROWkdKbzB2QXY1WDFyMnhnVDZ3dlZ5NWV5Wk9UaTdyRXlhcXVybTduZGpZM055ZmRUcWVnUlNLUmRvSjJCQ3ROMkc1bmlxQ0pEcXl5ZGhiWnRkZGU2MXF5Wk1rWE16SXl2dUJ5dWNZSUljNEZCcDltMS9RdTB6VGYxM1Y5czkvdmYvL3JYLy82Kyt2V3JUTWQ0cFlVT1NHRW1jNmlTMmZOYVpvbTAxaHh1Rnl1TmlJbnBTUXJLeXZwbmpvRnp1djFKcTIzek14TXNyS3lrdTVwdDI3ZDJybW54Y1hGU3FFK3JiQjkvNmF2c0c3OU51cklwYkJzTkZOdm5zYzkwNGNkSjFHenFXWDlpMCt3ZU5rNk5wZFhFYUNRMHZHVHVmbWVlN2hoZE9jWHRlYm1acXFxcXBKV1dqcTNNMTBjVGRkMVlyRlkwa0pMRTBjVHpqaGFHc3RNcEltWDJWYVorTjczdnVkNitPR0hML0Q1Zk9kcG1uYStFT0k4SUVkZDFtMW9rVkt1ajhmajZ3T0J3TWE3N3Jwci9WLys4cGQ0R3FFem5hNnJRK1NjY1RtWmFzbWx4TitrbEpLTWpJeDJzVGV2MTVzVXVJN2liMDczdEtpb2lGNjlldEczYjErNmRldW0zc1hQR21OVHRLTHJPdnYzNzI5anBUVTFOU1d0dEtPSm82VkxEdGlDbG1LZEpkMU1oMFdHVThpa2xGcERROE93bkp5Y2kxd3UxNFZDaUltQXV1cVA4ZStVYVpwdjZicitkblYxOWRzREJ3N2Nib2xiTzZ2T2FkSFoxcHZ6MzNhQ3dTbHlVa3A4UHA5TWwxeEl0ZDdTeGQ5czY2MTc5KzV0ckxkKy9mcmg4WGpVdTZlRTdiTng2TkFoS2lzcjJ5VUhuRzZuTFdxMmxXWmJhRWNyYUlaaEpOMU0welE3RkxOUUtIU3gxK3VkcEduYUpHQ0VlbmVPSy8rT3grT3YrLzMrTndvTEM5OG1rY1UxVThXdUk1R3prdzIydXdyZzlYcVRGbHhIQW1kYmNMYjFab3ViMHoxTlRTNlVsSlRRcTFjdjlZNHBZVHQyZ3NFZysvYnQ0OENCQTFSWFY2ZE5EaHlwZkNQRjdSUXBpUUduZFNaU0xMU2ttSVhENFNsZXIzZUtFR0lLMEZlOU15ZUVLc013L2hFSUJOYm01K2V2cGJWY0phM0lPV055dHFzSzRIYTdwYk04eEJhNUkxbHZxZTVwYm00dWVYbDU5T2pSZzRLQ0FvcUxpK25UcHcvOSsvY25PenRidlZ0SzJJNk8vZnYzSjYwMFp5d3RYWElnTlphV3hrbzdrcUNKMUpoWk1CaTh4T2Z6WFNXRXVGS0pXYWNRdWRWTlRVMnJpNHFLYkV1dWpjaWxXbkgydngzdWFUdUJjN3ZkSFFxYzAzcExUUzZreHQ1S1Nrb09rejFWS0dFREFvRUFuM3p5Q1ZWVlZXMnN0T2JtNWpZMWFVZFpaQ3RzMTlOMk53OWpuV21OalkzRGMzSnl2cVpwMnRXZ2FpMDdLZHRpc2RnckJ3NGMrRnRwYWVsV2g4QVpEcEZ6eHViYVdIRjI5dFFXT1V2WVpEcjNOTlY2YzlhKzJabFQyM3JyMjdjdkF3WU1JRGMzVjcxRFN0amFXMmwyZ2lCZHhyT2pFZzViMU5JSm1yTkx3Q2xvdHBpdFdyVXFZOUtrU2RlNjNlN3BRb2pMMUdYWWRUQk5jMDBvRkhyNXFhZWVldVhCQng4TUEvR09SQzZkd0RscjROSUpuQzF1SFpXR3BHWk83Y1NDc3Q2VXNBRVFDb1hZdTNkdnV3U0JiYVcxdExRa1kybEg2Qnc0bktBSnA5dloxTlEwSWpzNyt6cE4wNjREMUpYWXhmOG02cnIrMHY3OSsvODZhTkNnYlE1WDFVaDFWUjBDSjQ4a2NCMWxUdTNZVzA1T1R0SjZTMDBzbkhIR0dXUmxaYWwzNW5RVnRvTUhEeVpkejVxYW1qWUpnaVBWcFRsRUxhMmdXUVcxYmR6TlVDZzB4ZXYxemhCQ1hLc3V1VlBTaWx2WjFOVDBVbUZoNGV0U3lyZ1F3aWx3aHRPQ3M0WE9HWWRMRmJpT1ltL3A2dDVzMTdSbno1NUoxN1IzNzk2bi9YdmlQcDErV2NNd0tDOHZaOSsrZlJ3OGVERFpFdFhjM0l6Zjd5Y1lEQ1pGTFJxTnB1MGVzQVhORVVkTEsyZzMzbmlqYThtU0pUZTYzZTRiZ1F2VXgvL1VSZE8wYWZuNStkTmlzZGc3TzNmdS9QTXR0OXp5MHNhTkcrT1dtMnBJS2R0bFZnM0RrS1pwU2szVDdGaXNkSllFeGVOeDZTd1hzajBFWnlqRS9xTnIveEVPaFVMSmRxMnlzakpjTHBjU3RsT2RwcVltOXV6WjB5YnI2V3lKT2xLeGJScTNVemk2QkpLQ3RtblRwdHdSSTBiTWNybGNONkZxems0djkwZUlMMlZuWjMvcFgvLzYxemNqa2NqeVpjdVcvZVcyMjI3elc5WmJ2Q09CazFKS1I2RzJVK0JrYWd1ZXM5ZjRTQUpYV2xwSzkrN2RsU3Q2cWxKWldVbEZSUVdWbFpWcGE5UFNGZHNleGtwTEcwUGJ0bTFiajdLeXNsdGNMdGN0d0NEMU1ULzlNQXlEeXNwS0Jnd1lZSCtyUEJLSi9PR1ZWMTc1ODNYWFhkZG9XM0QyWWNYZ3pIUXhPR2ZkbTlNOVRTMExzWXQ2MDlXOGxaU1VNSERnUUVwS1NwU3duVXBJS2RtNWN5ZWZmUEpKc3VEMmNGblAxQTZDRHR4T084dXBTU25GaHg5K21IZldXV2ZOZHJsY3M0RXk5ZkZXd3VZUU5wczk0WEQ0OTMvNjA1K1czM3JycmMxSEVEalQwWFNmMnJrZzAzVXNkSlExdFF0NkJ3d1l3T0RCZzdHNkpaU3dkV1VDZ1FDN2QrOU94dE5xYW1xU1dVOW53VzBIcnFkSWJZVktzZEswK2ZQbnUrYlBuLzlObDh2MVRWVDkyUWw4WXc5QjlRNW9xSUJ3VStJQXlPeWVPUElIUXZFUXlPM1ZtWVROL2tPN0xSUUt2ZkQxcjM5OTJlclZxMk9Xd05raVp6b0V6a3kxM3B3QzUvRjRaRWY5cHM1cElmbjUrZlRzMlpQZXZYdlR2MzkvQmcwYWROclV2SjJTd2xaZFhVMTVlVG43OSsvbjRNR0Q3VW81VXVOcHpvQnNPcmZUVGd6WVdjNUlKSEs5eCtPNUV4aW5sT1lFMFZBQnU5Y2x2aDROK1FOaDBNVEUxMDRpYkE2QjIrajMrNWQyNzk3OUZTR0VuaUp3N1Z4VVJ3ZURUTFhlVW12ZVVndDY3WktRM3IxNzA2OWZQOHJLeWs2TGNVaW5YUEtnb3FLaVRaTEFucHZXVVR6TmFhWFpnVm1uMitsSURHaWhVT2dTcjlkN2w5WHlwRGhSYlBrclZIMTQ3RUs0c1FMNmpvSVJYKzFjMW9RUVk3dDE2emJXTUl3cmEycHFsdmJ1M2Z1ZlRvRkxUVExZQ1FacldJSk1tZDluLy8rb2tneVJTSVJ3T016QWdRT1ZzSFdWZU5xT0hUdllzMmRQc2pYS0hqUFVVVHl0QTllem5kdlowTkF3T0M4djcxdENpRHVVeXB4QTRoSFk4RUxDL2Z5MFZIMlFjRmZQdlE3Y0daM3ExOU0wN1N1OWV2WDZTaXdXVy9MeHh4Ly9mdlRvMGVVT2diUExSQXpBTkUzVHRQZGIyTmxUdTJYUEtXNnBJbWNud0ZMRkxSS0pNR1RJa0ZNMjduWktDRnM0SEdiSGpoMVVWRlMwNmZlMDY5TTZpcWVsV21tV3FDWGR6bG16WnJtZWUrNjV1MTB1MXh4QXpXRSswV3hZQ29IcTQrUEd2djluR0h0VHAvdzFQUjdQN0ZHalJrMEpCb1BQVHBndzRmZWJOMitPQWJwbHZXbTJpeXFsTk8xeDVsWUNTenFISzZRS1hMcFNFV2ZZeFJhM1kxc2tvNFR0aE5EWTJNak9uVHVwcUtoSURvUjBUdVZJVjU5bS9SVnppcHJUU3RPa2xDSVVDazMyK1h6M0FsOVdDbk9TM00vaklXcE9jZHZ5UDUzT0xYWFFOeXNyNnlmdnZ2dnV4VFUxTlV0NjkrNzlsaEFpNW5CUEJhMDlxVExGZ25NS25FeTNGQ2lkZTJwWEFRd2VQSmdlUFhxY1lzTG1YOEdNVWZQWWtIc052L3Z3VVNaMm9SZGZYVjNkcHB6RGJtSlBWM1RyS09VUXRubWV4a3JUS2lzcmV4VVhGOStyYWRwM2xMcWNKQm9xamoybWRyUnVhZCtSSnpTaDhDbmMwNHQ3OWVwMWNUUWEvZlhycjcvK3V5bFRwaHl5M0ZQTktYQ0pYVFRDN01oNmM3aXFISTJiT25qdzRGTXFxZEJsTGJiOSsvZXphOWN1UHZua2syUTVoN09USUYyU0lOVktNd3pEYWFWcGtVaGt1c2ZqK1E0d1JxbkxTV1RYRzYzLzFnL3gwSS8vd2JJR0dEZmo2eXlma0FrWVZINjRpWWRlM2N2NnlnaGtaak42NUFqbVRSL0NhS3NIUExwL053dFdiT0dWdlg0Q1pGQTZ1RDkzVEIvTDlOM3JZT3pBVG44S3ZGN3Z0eTY3N0xMejYrdnJueTBvS0ZndGhIQlo3cW51aUwwSlovd3RqY0IxR0h0THRlQnNnZXZ5VTBMODVheDdaUm51U2FQbXNRY2c4QkkzbDY1ajVrc2JXVmkybFJjWFBNVGlOVnVwaXZyb08yd2lOODlmeUMyajh6ckZheTh2TDJmMzd0MUpVYlBMT1ZLYjJEc1NOV2ZHVTBxcFZWZFg5eXNvS1BpdUVPSXVwU29ubWNBaGFQd2srZCt0cjI5a1JVUEt0ZnZ4djVqeGJEbFZlQ2dkV0l5dm9aWU42OWN6b3g3V2ZtY0lKYzE3bWZQNE83d1doc0xpWW9iUnpJYXRPNW4zZUl5OEg3cVlmTmFoazFMbmRxd0lJVWJuNStjdmpzVml2M25ublhlZXYvamlpeXVGRUpyRFBZMWp0ZkxaazBUc3pLbFQzSnhiejV6TGcrellzbk80UXl3V282eXNLOWFabDdOaXpod1dyZG1HMzVlTGUrYk1DL25kc2plcDhwWnk2UTNYY0dtUm4zVVB6V0wrS2o5OUw1ek9IU1hsdkxKc0ZRdG4rY2xidTVUcEozbXAxUGJ0MjVPRnQ4NmV6OE5rUG9XejE5TlJsNlpKS1VVa0Vwbm04WGkrQjN4QnFVcG5pQzlzYi8xMy9RNFd2TnBJTE9VdVc3ZldFczNMNXNJckxtZnBoQndJN1diV0Q5N2h6YjM3V0I4YXd1U0tmV3oxWk5CMzJGaFczbm9HUmJUdy9LS1hXRmhSeGFxOU1MbStva3NJbTQzSDQ3bHQ0c1NKWTJwcmF4Y1hGUld0c1dKdm1pVnF0dlZHd25DVHFkYWJTSW5Ea2VxaU9qZW4yUUkzZE9qUUxuYmhSS0hvR3VZdm44cmt2Qlc0YjVsM0phOHRlNU1xMzJobXpyK1RpWlR6VEhrZFVNclVlZk9aTnl6S3BXY3RadFdlWFBMOE9MWXJuMWlrbEh6ODhjZnMzcjI3emNKaWUydVVQWmtqSlVtUUttckplTnIyN2R1N2w1V1ZmVi9UdEhsS1RUb1I5UlhXUDJLcytlc0hiS0FINHdhMnNLRkNUOTVsL0xWZlkyTzZBVkFlTDNrZXlCczVrYmRHcG50d0Yza2VTendIanU5U3AwVUljVzVoWWVGemtVamtpVC8rOFkrL25UMTdkcU5sdmVtMGpzZ3liRUZ6eHQ3c1FhZE9jVXRkKzVnUXVTaE5GZS95NXlmMlVqanJQM2xzNXRsZHFCeGtHTlBuRDdPTnQzUXh0akltWGptS0o3Wjl3T0lyeDdKbTFIakdYM29OTSsrWnpMQ1Q1SW5xdXM3SEgzK2M3Q1pJTGJ4TkxlZXcwdG1wV2M5a2dpQVlERjdvOC9ubUNpRW1LeVhwWkZndFV0RzltMWl3S1VMZkN5WnljM3hkRzJHenFmMXdFd3ZlYTZaMmJ4VWI0aGxjZU8wb0pqczMxQjNhelVPdlZsRlpmNGoxRlJwOXg0emxqc0ZBUE5wbFQ0L1A1N3ZuNXB0dlBudlNwRW5QRGh3NDhGMHI5aGF6WEZNaGhEQVNobHByM00zcG1xWk1Fa2tJV3p4QzNkNHR2TDUvUHdmOEp1Nk1Ya3lkdklNUFA0eHo5dGxuZDhtMWYybVRCOFB1WE03YTBTdFl0dXcxMXExZng3SkhYMlBaNzY1azhkb25tWHlDeFMwU2lhUVZOYnZ3TnQwK0FvZWxsdXA2YXJGWTdIYVh5M1VmMEVlcFNDY2swZ3cwOC96eTNWUmw5dU9KcTN1UnR5TDlYZjE3OTdGcWt6L3huN3h1REN0T3FjZnkxN0ptVXdWMUFPNXNocDNSTGJFSS9MTVUvSFlDTkUyYk5HREFnR0Yrdi84LzgvTHkvZ3hvbG51YXROeHdKQlpzajhleTNvVGxzbUthVVJxcnlxbHRDcU9qNGMzcnlhQnpoelAyM0hNNFM2dGc1ODZFcTNyMjJXZVRrWkhSdGM0UmdNL3lVYU5Sd0wrZVorYk1aZEZyZWN4OGNpbXZibHpMUTZPQXVuV3MybnhpWDF3d0dPU2pqejQ2YkoxYVNseE54R0l4WWZkOFdtYTJacHFtVmxWVjFTY2Vqei9tY3JtZVVLTFd1YW45MTBZV1Y4SzRxOGN5OVRDVHJzdXUvaHA3bnY0R0crNDlpN05DMVN4KzlsK3NDVG51TVBnOE5qNTlFOXNXWE13MUJVRmVXL0U2aS9ZYXA4cHA2cE9ibS92VGFEUjYvNnBWcTBxa2xCbldSOWtMZUtTVUxpbWxabC8vVmd4TjJONU1KQklSNFdBejFRMGhvcVlnbytnTVJvNFl6QmtGR2VqTk5SdzRjSUNLaWdwMjd0ekpSeDk5UkRBWTdHSVdtNitJdkZ3Z3NJWUYwMlpSdm5BaGViVnJXTFZxSFZzclAyQnlTUzNyeWdGdkdhTk9ZTElrRUFpMHNkU2NMVksyb0RuSGQ5dXVwMVdmMWlickdRd0dKL2g4dnZ1RUVKY3EyZWprWkJpcytMOERCSUFOeTEraWRIbnJUUnVXLzRVSis3L0NxNWQ1cWRWZDVCWGtVT1J4VVRSNEdOZVViR05oUlMwYnFtRmlmZ3VWWVFOZlhqZEtzc0JYMEorWnc3SjVxVHJJNXAwdGNNN2dVK1owZWIzZTJWT21UQ25kdTNmdk0yZWNjY1o3VnR6TlRpd0lJWVJobXFacEwzaHVHM2R6aVc3ZE1tVkxNRUs0ZWpjYmF6OGh0N0F2WldjT1lxakRYYldQczg4K3U4dE1CM0hqbThnOTg2OWs2NEkxN0NrdnB5cGF3cDFQTHNYLzBBSit0KzUzTEk1NUtUenJVdTZZdDVCYlRsQlRVWE56YzFMVTdHYjIrdnI2ZHU3bllUS2Z5WGhhTkJyOWh0dnR2aDgxL0xGcmtObVRzalA3Y0tFajVGRmJlWWh0ZnBQYzRtTEdueUZZcy94bDVtMkZjVE8reHZJSk9SQnE0SU1HQUMrRm1WQzUvblV1L1o5R2NzZGN6RnUzOWllUE1PWFZZVUFqTDgvYjZYcEdqNE5yZXNtQUFRTUdORFEwUEpXZm4vK0s1WnFLRk5jVVo5ek5Gam1QSjFOMEwrd21QZWdFQTM2YWF6L2hnOW9xYXVPWGNxSFYyZURzVVQzNzdMUHAxcTFiMTRpeGxVMS9rclhUbmQ4ZXo1M1B2c3FkSitFRk5UVTFmV3BSY3lRSnRGdHV1Y1cxZVBIaUgyaWE5aUNuMlc2SExrM0JjQ1pmZXluT3JNNzYzLytabWVzakRMdGtJbytlbDBtdHB5K0ZXL2V6WWZuTFRIb3ZIMTkxTGR2OGtIdm1FS2IyZ2hMUEVNYXRXYytHVGV1WVZGMUVtZDdNaG1vVDh2b3hjMWdtRkE4OTVVNmJFS0tzUjQ4ZXZ3eUZRbjNHangrLzVLT1BQdEljMXB0dWlWa3k3aGFQeDl0a1RLWFhLM01LZWxQWUcyTEJJTzVvTTQyTnliS1JOc2ZaWjUvZDZVZU9kNm9QZkdOajR4RkZMWjM3bVpva09IVG9VTCtDZ29MN2hSQ3psVkowTVlxSEp1YXVIWWFpTDB4a09adFlzR1l2NjNkVlEyWWU0eTRZd2Z5ckJ5VW1GUlFNNGRsN1hTeGFzWVUxZTZ2WlFBWm5EVHVMTzZhUFlXbzNvR0RncVhyMjNKbVptZlBlZSsrOTR0ZGZmLzAzbDE5K2VhVnR1Vm5XVzl5K1k3cWtRdUtMajh6Y0FqSmxDODNONllYTkZyZk8zRi9hYVFaTk9rWE56bjdhb3VhTXFhV3gxT3pXS00wMFRSRUlCTDZRbVpuNWdKcVoxb1hac0xSTjk4RnhwY2NBR0RmcmMzbm9veDAwZVNJd0RHUDF6cDA3Rnc4Yk5td0xFTFd5cGpxUVhBK29hWm9VUXBqV2RGNXA3VlNRenBIajlrVGU3dDI3VTFCUVFLOWV2WklES3p1enVIVUtpODNwZnFhSzJ1SGNUNnZmTStsK2hzUGh5N3hlNzRPb3liWmRtek12Z28wdmZINlBmUnJnY3JtbURCMDZ0S0N5c3ZMcGtwS1N0NnhFZ20yNUlZVEFtVlN3ZzI2dGxsc3lGc2ZoakovaHc0ZDNTcmYwcEF1Yk0xSGdGTFhHeHNhMEV6cFMzTStrcUVXajBSbHV0L3RCNEV5bERGMmMvSUdKS1J6SGU4SkhKNS9zOFRuRTNjYjI2ZE1udjY2dTdxbkN3c0svU1NtZFNRVWRSMUxCSVdEU2NsM2JxVms2Z1JOQ01IejQ4RTZYVURpcHd1WXM2WERHMUd4Uk81ejc2UlMxV0N4Mmg4dmxlb2lUMXZDbE9PNk11QnI4aDQ3ZlRMWWVBeEtQZVpvaGhCaFVVRkR3VUZOVFUwNzM3dDMveTJHNXRRbEYyZUlXajhmVGlsdEhvbVlmSTBhTTZGU2xJQ2ROMklMQllJZUpnalIxYXNLNTQ5TXBhcnF1ejlVMDdTRWdRNm5CS2NhNFdjZG5pbTZQQVREbSt0UDVUQloxNjladGZrdExTM1pPVHM3dm5XNnBVN1RTaVp1ZFhFZ1Z0RlJoMHpTTkVTTkdrSjJkM1NsK1llMWtQS216VGVvb3NwL0N1VUhLanFrOS9mVFRIbDNYZjZocDJrSWxhcWNvN2d6NDBoMEpGL0t6dUovalpwMXl0V3VmZ296czdPd0hRcUhRN1ZkZWVXVzJvMVBCQTdpdFRnV1hhWnJDTUF6aDZGSWdHbzBLKy9NWURBYngrLzAwTlRWUlgxL1BvVU9IcUt5c3BMeThuSTgvL3BoSUpOSXBmbG5Yd3c4L2ZFS2ZVTmQxL3YzdmY3Y1pQZVMwMUZKaWFzTGV5RzRuQ3FTVTR0MTMzODM1eWxlKzhpTk4wMzZnUHYybkFjVkRFN0d4VUpQVlMzcVVWdG81VjUvUUtSNVNTdngrZjZldThmSjRQT2RObXpZTmw4dTFkZDI2ZGZFT3BuZklOSWtEa2VxU09wcnMyeHhGUlVXNFhLN1RSOWlrbEd6WnNxV05xS1hiSkpVNmRzZ3BhanQyN09neGRPalFIMnFhOWwzMWlUK055T3dPSmFNU0l1ZkxTVGhLbmd5SVdUMk11Y1dRWFpnUXNpR1RvUFNDeE0rY1FMcUNzQUc0M2U2eDU1OS92aWd1THQ3K3Q3LzlUWGRtUmpzU042Y0FPdXZaVWdYTy9scGNYSHhTUng2ZDBCaGJSNzJmVHZlem81SU9LYVVvTHk4djZOKy8vNE5DaUx2VkovMDBKYmRYNGxBTmNwOEpuODkzKzIyMzNhWjV2ZDRsdDk5K2V5MjB4czRjVnBsaEdJYnRhYlZKS0RqamE4NDRtOHZsd3Q1YVAzejQ4Rk5mMk96SnR4Mk5IanBNOFczU1VsT2lwbEFjVjNHNzdhYWJiaUlhalQ0M1o4NmNCcWRsbGs3Y2NHUkxPeEsyVkhFN1daTjRUNGdyV2w1ZW50d21kZkRnd1E3SGVhY3I2YkJqYXBiN09VZGRqb3JPU2xkeFJWUGMwakVqUjQ2VVFvaC92L25tbTRabGpiVnpTMVBFcmwyOHpYa09uTzZweStVaVB6Ly8xTFBZOXUvZmY5UXh0WFIxYWs4Ly9iUm41TWlSRDJxYWRvLzY2Q2dVeDUrTWpJemJIM2pnZ2ZpbVRadWVYYjE2TmVrc045TTBEV2d0QmJIS1JlVGgzRkdYeTRYVnBuWEN0MTk5cnNKV1hWMmRYSkdYdW5qbGNERTFaNTNhN05tekg5UTA3ZnZxOGxNb1BqOHlNek8vdFdMRmlsaDJkdlp2YlVGemlKdkVXdEpzK2FiSm1Kc1FRanJkVU9kaHU2TzJ1SjNJdmFXZm03RFpHOXFkN21kSDQ3eFRZMm9weGJjUHFzdE9vZmo4eWNySytrNGdFSWprNXViK2tiWlpVcGxheEd0L1h5U1FIY1haYkt2TkZyY1QxVFQvdVFoYk9CeHVJMnIyNHBYbTV1YkR1cC9XS085a201VFZVYUJRS0U0UU9UazUzMmxzYkF6MTZORmpwV1cxU1ZKaWJKYTRPUzAySVlTUXRxZzVCYzYyMkd4aE8rZWNjOGpNek94NndpYWxaTWVPSGUxMkZLUmFhdFkyS2VjU1kreUZLOUZvZEliVis2azZDaFNLRTB0RzkrN2Q1MVJYVndlTGk0di9MaFA5VjIwKzMvWlhlMkNsWmEyMXNkeWNGcHZUSmZYNWZJd2NPZkp6cjNFNzdzTG1GTFhVN0tlOTk3T2p5YmVtYVlwd09IeVpOYVZETmJRckZDZUhvcUtpb3J2Mjd0M3JQK09NTS82Wllyblo4VGE3OUFPSG9BbE4wMlJIY1RaYjJESXlNajczTXBEakttd1ZGUlhzMmJPSHFxcXFwS1dXNm40NnVncElLZXZRQW9IQUY2eDVhbXIwa0VKeEVoRkNET3Jmdi8vdG16ZHZiaG85ZXZUSGx1V1duTnNtaEdoanRaR1NJVTJOczduZGJ0eHVOMTZ2RjYvWFMwWkdCZ01IRHV6OHdsWmRYWjBVdGVycTZxU28yZjJmRHZlelRhdVVjNXgzWm1ibUE2Z2hrUXBGcDBEVHRDK09HREZpOXNxVkt4K2RObTFhbFVQY3BHTjJHNlpwbW5hbU5KM1Zac2ZhbkJsU2UwTHY1NVVwUFM3Q0ZnZ0VrcE02cXF1cjJ6UzFPMk5xNmNvNnBKVGlsbHR1Y1ZrN0N0UTRiNFdpRStGeXVTNi80b29yYW9jT0hmclk5dTNielJSeHN6T24wdDRxYjR1Yk01bGdXMnoyVjYvWG0zUkpzN0t5UHBjNWJwOVoyS1NVN1ZxbG5KWmF1cWIyMUF6bzRzV0xmNkFXcnlnVW5ST3YxM3ZqdSsrK1c1T2JtL3Q3UzlETUZIR1RxWmxTVGRQYVdHN3BTajk4UGgrWm1abU1HalhxdUNjVFByT3c3ZHk1azMzNzlpWExPbzVtVFY1S0J2UWJxbFpOb2VqYzVPVGszRk5kWFgyb3VMajQ3NENaeGkxdEUzT3p5ajZTNG5hNFdGdFdWaFpEaGd6cFBNSldXVm5acmxhdGcxWXAwbVZBZzhIZ0JHdVpzZHI3cVZCMGJ0eEZSVVYzYk4yNjlkQ3dZY1BldDZ3ejIwcHJseW1OeCtPeW80TGRkTEcyN094c1NrcU8zMGIyVHkwb1RVMU5hV3ZWT2hBMWtiS2xYVHR3NEVBZm44OTNIMm9BalVMUkpSQkNsQTBlUFBpV0YxOTg4Y0FOTjl4d3dPR1NKaTI0bFBxMnBFdWFUdGljNHBhVmxVVk9UczV4R3lEZy9qVDdHdzNUWk0rL3QxSzVldy9WKzZ0b09GUkRjMzA5Z2FabVF2NEFrV0NJU0NoRU5CSkJqOFNFcnNlSTYzRmhHcWFRTWlGc1BUM2hlYUpwMzZYcWNsR2NuRStwQmk0UGFKN0V3RXB2dGpvblI0SEw1YnA0MnJScEZjQlR0TWJiVE5Ja0UxTEZ6WmxJY0xxa3prVEN5SkVqajh2MDNVOWxzWlh2L1lUS3FvTlUxOVRSME5CSXM5OVBTMHVRVUNoTU9CSWhFbzBTamNYUVk3clE0M0hpY1NNeE5saEtJU1ZhckhyMzdVS0l1OVJsb2pocFNCUGlVU0FLc1JZSU5VSkdMbVRrMmQ2VW9nTXlNakp1cnErdnJ5Z29LUGdyWUhTVVRCQkNTRHZlbG1xNU9kMVJwN0RsNU9Rd2VQRGdFeTlzQjZ0cjJGZFp4YUhxV3VvYkdtbHE5aE1JdEJBTWhRaUZJMFFpVWFMUkdIcE1KeUZxY1JJeE5TbWtsQ0pZdGUxQ2w4dDFuN284RkoxTDZBd0lONEVlaHB5ZUNZdE8wU0g1K2ZsM2JOMjZ0Y0tLdDVrcGg1UlN5b1MyQ2VMeGVESTdHbzFHNlVqY01qTXprK1Vmdlh2M1BuSENGZ3FGK1dSL0pRY1AxVkJiWDA5alV6TW9NaklCQUFBZ0FFbEVRVlQrUUFzdFNWR0xFSTNGaU9reDlIaGM2UEU0aHRFNmdtajdodi90N3ZQNTVnSjkxS1doNkpURW8rQS9tQkEzbCtkemY3cDE2OVoxbWwvOW9vc3VPcGE3OXdadUF2YVNpTEcxRVRaQVdpVmRwbUVZeE9OeEdZdkZSRFFhbGZhMnE1YVdsdVMycStycWFxcXFxcWlvcUdEbnpwMlVsWldSa2ZIcFc4V1BTZGoyN3R0UDFjRnFhdXRzVVF2UUVuUllhckVZc1ppT3JzZUZyc2N4REJORFdpNG9pTEl6Qm54ZndHVDE2VkYwYXN3NGhPb1R1eFZPQUdWbmZyYSt5ZkpkMndIdzlmM2lwMzZNYU5XN0FGU2QrZVN4L05nbFlUTzJiVkQ1OTM5TFlxdThnWjFJQUNrUVVrZ3BNRTFKWEVMVWdHQmNhQ0ltTldKb0lvSkxoSENKSUc2WEg3ZXJDWStuRG8vM0VBY1haWEhHR1dkdzVtMGZmYXJmNTZqdDdmMVZCNmlzT2toTmJSMzFqVTAwK3dNRVdvS0V3bUVpNFVSY0xSYUxFZE4xZEQxTzNEQXdERk5JTXhGWGl4emNPVTNUdEhucVU2UG9NcGJiMGE3Nk80M0oxTHpmZW5mZ2p5ZVFtTVRqQTd5V3dlU1NTSmNFVFNLRmlSUUdramdtT2dZeDRrUmxuSWpVQ2Nzb1FUTkt3QXpUYUFTcGkvdXByYTJscHFibVU3K3VveEsyUUVzTCt5c1BjS2ltbHZyNlJwcWIvUVJhV2hMSkFxZW9XZFphc2w3TnlvQlc3M2l2bjhmai9wNjZEQlJkaW5CeklzbWdPTHhQNnVrKzY5bWlXYjA3RURkTmdtWTZ4RTJYcGtpS0d6b1JxUk9TVVZyTUNINGpUR004bUhSUFc0eFB0NEQ1cUZ6UlQvWlZjYUM2aHJyNkJocWJFM0cxWURCTXlKRUJqU1dTQmJhb1lab1NLYVdRU0swZ3Y4ZDNnUytvUytBVTh0YWFZd1NlMjBIa1g5VVlWYUV1OFpwZGZiUEpPSzhudWQ4Y2d0Yk5leFEvSVJON1MzMjVKKzAxZi9MWEozbUdhL241MWIxUDl0bkQ5L09iS0xpaWpzWXhMeE9PdGQ0aUVLTXZ6UnZ4ZFdyNXRlMlNTakNFTTVrQTBrUktBeE1CYU5JUUxpR2tTMnE0aFlaYnV2Q1lVYnpDamM5d296VTNrNW1aU2FVZVlhanIyRVB5UjdUWTlsY2RwT3JnSVdycjZtbXdrZ1dKREtpenNWMXY2NEphR2RDRUM3cHJ1aXJ0T1BYd1AvRXh3UlY3dTR5b0FSaFZRWUlyOXVKLzR1T2oveUU5ck43c284Q25lVzUrYitCUEpqZ3NOaS9nQWR3U3FRR2FCR0ZDV3BjMEtuWENVcmRjMGdoK3Y1K21waVlPNlUwYzBCdVByOFVXRElhb1BIQ1E2dG82R2hxYWt2VnF3WkF0YWpHaWxxakY0M0VSTjZ3c3FPV0NWbjY4dnBmSDQvNk9ldHRQUFNML3F1bXlyejI2cWY3bzd4eVBkc25mc2ZvZmovRFMzbUlLM0g1YUdnTzRoMDFrY0dBTGU1cjhOSWVMR2YrTm16aTM2UGhtZlh0NXV0MEVmSnpPYXBOSUNVS2FTRk1BQmxMR3BTazBZVWczY2FKb3VIRVJsaTY4cGhzUkROTGMzRXl0SGlWSHk2QzdLNHNzelhkOExMWkV2VnBOc2w3TkZyVkVFVzRzVVlTYkdCaHB1YUFtcGpSdEYxUVVGeFhkQzR4Uk1uQnFJUU02WmtPMHk3NStvemFNR2RDUDhwZnR1akcyZU9HWCtPcnM3M0xydHk4blkrTmE2cys5Z3h2dWVKQ1pZLzI4dmE3aXVEK2ZRSXdDcGx0V213L3dTaXZXWm1tTklHRzFZVnR0Y1dtSUdBWXhhUkNWT2hFWkl5U2poRUloV2xwYWFJd0hxWTM3cVlvMUhCOVg5RkIxTFFjT1ZWTmIxNUFvN1docG9TVVlJaHdKRTdXS2NHTkphODJ3dXd2c0xLZ0lIZGd4V2RPRXN0Wk9RVVN1cDJ2L0FvWkU2K3Evd3hIeGtKMmJtMWdha3BsUGRrNHgvZnNsZnVlYzNFemlrYy9OeGY3bUgvLzR4M1BUdUtSMmxsU2taa25qR09qRWlVa3JVMnJxUkNJUlFxRVFUVWFJK25pQVEzb3pOYnIvc3dtYkhvOWJMbWc5RFZacHh5ZnZyT0t2ZjkvQTN1WW9rVmcwVVlTcjY4U2pBZEhVN0Nlc3QzWVh6SnB4amN2bjlkNmI3ckUzLy9SNlNzKzdseGNQcE54UTl6SXp6cHZHUSsrbGNSMys3eWVNdldrWjVVcFRUaU95eVBqMUxmVForVFd5Q3gwWDdJVHp5Rjk5QzcxMzNrM3ZkNjZueHpmN3Q3bUlqM1M3NHZPblQ1OCtNd2VJN2hrT3E4MWpoYjAwYWNYYVpFTFlFdUxXSmtzYUowSkMyTUxoY0tJRUpCNmlMaDdnb041SVhCcWZYdGlTcFIwTmpUVDUvYlFFZzBSMEEwdy9GZVhWaEdLNm5RVWxiaVJNZGRsYWlLczk5L2pQN3dhKzNPR3p4ajVrMGE5ZXAvYW9YbUlMYTFaOVFNblVTeWhUMTh6cFl4Vk9ta0MzUzFNYTAwdkhrUC8wQ0Z3Yi8wbjlWWCtrN3BkMXVPKytuTzVmeXpxNjJ4VW5CRTNUSnE0KzR3ZFRIVmFicDFYY3BJdWt1TFc2cERwRzRwQnhZbEluR28wU2lVUUlHaEg4Um9qR2VJdmxralorT21GcjlnYzRjS2c2VWRyUjFKem9BdzJHaU1STnBBRFpjcENxeG9qZEJ5cmloa3k0MTFJS3BCUU41UjhNZHJsY2N3NzdyRG5aOE1aL3N1aWZMVWQraFhWdjg5SjdnNWg1VVM5MXhad3U1UFluNzRFQkdLOVZZanBDZWU1SlorS3AzVW56STl1SmJXOUUvKzgzYWRuZ3dqZXA3MUhkcmpoeGRITmwzZlRINHR2N09jV050clZ0d2xuYjVyVGFZc1NKeFdKRW8xRkNNa2FMR2FIWkNGRWZiNkU2M2tUQUNCKzdzRlVkU0hRWE5EUTJPVnFtd3NUaUpyaTdrWjhoQ2RmWEVkVGoxdURJNUtRU0laRmFYcDc0MXVabFB5bVpObmt5cFdNbU0vYWFlU3o2Wjl2QW4zZmdWZHd6R1Y3NjZYTnNQa0lNdXZhTnY3UDVDNWN6dWZCdzRyZVB6VnYyNFZmWFV5Y1RxQjU0Si9URjdTd0RHM3NSUmUvZFFON1lqa2JUdVBEY1BZSE11azAwLzNmYlVwTDQwdi9pME9WdkVZdWwvSWpQZFZTM2QwVUdYRDNuVTlXd0ZWODJqMXN2c3djM25zbVZjKy9tSEd0UHNmdWNPL251Tjg0NXhrYzBpUDdnZVE2TWFGdkRkaGo2bnA4eitHcFNFd2xDdUt4RFF4TkpxODFJSkJLSVc0a0VYZGVKeFdLRVpZeVFHU1ZnUkdpS0I2azdveS9oMzF4RXo5ZHZTaDVGLzNGbXUza3NiY285cW12ck9GUlRTNTA5dGNOcW1RcEhvc1RpRWt4QlpsRTNYQWVhOERlN1JKYTN0UThVaVFnZjJINUozYXI1ZDh4Nk5zWU5QMXZDczROaDYvS2ZNK2YreHpocjFVS21KaS93ZkNaLzc5dHN1T2JuUFBUY1ZieDZkMGV6SmcveHlpdjdHRDlyTEhuMnR3Njh6WUtmTG1OenJEL1gzUDF0SmdlZVk4N1NGc3A2dDdENXFWRTgrdFJNaHZtVXBweHd2SVZrL2VKaXNrdmp4RmYraytZTlJYVDd5Wm13SjRycmdiRkV2dk15TGRzTnFOcEg1TlVvK3A0T1lpVkR4OUo5R29SdS9RQzlhRkpLQ01OQU9nVFFOV0VjT2VPaVJPN2JkM1MzbnlZYzJGZkJDOC8reHhIdk4rbUtyL0hGOHk4NnFzZjBYVFNRZ3VlbUFoQmF1WTJtSDZ3OThzOW9ucHZlNlBmQU94ZnQvK2ttSUc0ZGlYNVNwQW5DTkVHQXhBQnBJSVdPSVYzRUVaYXdSV1Nja0JuREp5SmtHbDZhbTNiUXdCZW85NFNURzY1aWRhT1E3T3BZMkE0Y1RHUkJtNXFhQ2JRa0NuSERZYXNJMTVCSWFhRExESEo5UWpSR3drUTBqOUJNS1VpOE9NM3I5ZDZWZDk2M1diazhuN0krT1FCTW5IRTV3NVl0NDRNS21EckM4V1NGbHpELzdwZVo5S3ZIZVA2YXA3a2xYU0g0M3RkNTZlQW81cDJmay96VytxWEw0UGJIV2RsN0s0c2V1SXNadWRONTlybXJLQVBXLy9SZVh0bzVrMkVqbE02YzhMakt0UFBKcW4yVDJ2dGlaUHppTW9xdTkrUC8xbjhUM2dQaWExZFJjRVVQV3JiWFFkVWVBai9hMDhHajlDRDdKeU1Rci82ZHdJY0dUT3JBb252Z2VncG41Q044Y2VJci8wSHozMExIY1B1cFQ1LytBN24va1NlTzYyTkczNmpnd09Dbmp2bm5TbjA5cndIK0RlaUFMcVdNQzd2T1RhS1I2RXJBQk9LWVVwTkN4SVVoUlR5ZXNOcGtuQWh1UW1iQ0pXMm9yR0hIZFM4UXp5aG1lR2EvSTd1aSs2dGFYZEJtZjhJRlRmU0JKa1lSNllZRWFSQ1B4OEhud3lVa2hoN0hxdkxSN3YvYnJ1dUZFRmY2Q25Pby9jZGpUTHZ5U29hZU41blN5LzZERGJFWTZUek9rdW5mNXA2QnUzbmlwMytuTXMzdFcxZjlIZjlGVnpIZVlZSDV2RkM1WXg5YmQrNm1QT29sTDdDUHlnQkFDLzVBNG5iRmlVZjY0NGlpSG5oSEZlUHJDMmJNaDZjdzhXWm9lUzVrNE1qWkxOZjFFOGp0K3duK1grNXpXRjd0WFNMOXViOVJlKzFmYVBqaEx1U2tTZlM0cWNjeDNLNDRrYmlFZHRtbWdUKzV3T0dTZWxwcjI1SWRDWmhPbDVURTlGMWQxNU5kQ1JFWlMzUWxHR0dhakNCMWV1Q3dIUWx1Z0ppdWM2aTZwdFVGRGJaT3c3WHIxZUptUXRpTWVGekVEWUhISllRUk40VmhDbTFvWHFGTGM3bnZCQ2hmOWhDelh1ckZ3bC85bnFsRDh2RUYvczZNeWM5MThQU0R1T1dCcTNocDFuTXNlbU42cXF5eDdCOHhKdjlzRkU3UGN2VGRQK0RLNTVieHU0cEIzUHlySll5dWY1bTUzNzZMeGJRUUhUaUxKNGVvaStta0NOdmYzc0JmZEQ3Wk0rTEVubnFWNW0wOXlQdVBhUlRsdVlCcUFuY2RJWnZsTFNiN213UFFpcURIUDB1dHYySnVCTkR0Lys0a2ErbC9VZnVyT2l1bTJraThEdUxiNnpEUDZrdkJ0S0c0WC9nWDhXVE05UWkzSzA0b1BUM2RyaDJoOWY3WEZ2T2dibGx1VHBkVWdwQVNhVnJpSnVQU0ZDSWVseTZYQ3gwelVRSWlkY0ptakJZalFyTVdwc0Zvb1VadnBzaWRoMGU0MGd2YkFhc1h0TEdweVdwd1Q4eFlpOW9ON3JwTzNBQ2thWThqd2hRdU5CRVhwcFRDazkvdm04QTRhR0h6UDNlVE4rYWJUQitTbjNpR1FBdUh5dy80UnN4aS9wV3ZjL05UeThpTmVaTWxIZEgzWG1hTjd4S1dwcnFWdnY1TXZmc0hURTI2dEZmeDVBdFhFWTJDVDhYV1RpSWhvaStzSmZxQy9mOEEvaHYzZ2RjRnNhT29QWXJWMFRKN09TR254VDNxZkFwL2trWHcxcldFOS9qeFBuQTkzVXUzMFREN3c2Ukl5U2lKbkJzdXZBOWNlNWpiRlNjdFRJSDQ0cklCZDA4ZXNmZUJWVW1YRkd5WDFHcTVRaVJNcDBUNWg1WVlUb2t1VFhSY1JORUp5eGcrMDBPTEViRUtkMXM0cERmUnoxdlEvam5Ea1FpSGFscG5yTFVFZzRuQmtkRldhMDNYZGVKU0lqR0ZFVTh1T2haQ0NIRk5XZSs4RmlHK21YaTRITW9HNWxQM3IyVTgvOC9kYkgzdjd6eDAvMUkraUVHMFEzWExZZUxkMytaU2dnUmFyM0xXdmJTUm9pc3ZaOWhSbmp3bGFwMlVWRkhyVzBydXo4L0RWOWpleFRUMzFCSGY3ampxb2hDTkpyNWZGMFBmV0ljWU40YThiNWJpTHUyQlo5Slk4cTdJSXY3V25rVDErbUZ2VjV4TWVyaXpyNzA3NTh1NXBEVElKMXhScWFWMkpCaUdJUXpEd0ZrQ2ttaVVqeEUwSXdTczhVYTF1cCtJMmI0OVRtdFhzNVpjbmRjcWFyb2V4N0NHajVpbWFTMW1RVWlFZUd6dTJObGVXdlZuOU8wLzVLRVJoM2ppZTdjeDdZRVYrQytieGN6aE9VVHJEMU96Vm5nSjgrOGUyZnFITmZBMkwvMnpGOWRjMWw5ZEVhY2FmZnVUT2FrVVg5OWpMOEdRYS8rUCtoL3VRWHh0RWtWLy93YUZQeTVGdnJxV3hsOVdIOVh0aXBPSFFBeTlzK2VsbDlLMmFMZE5INmxkdEdzbWhBM0RTSlIvNk5MdUpVMklXOGgyU1kwUTlVWUwxWHBUKytmNzV6OWVZbGQ1UmJzRkxmNFd5eVZ0M1R3bG90SEVMb080WVFocFNtM3Jodi9OSDF4MnhqdHduSnNDRHJ6TjgvL01ZZXIwVVJTcGE2SlRjbURjeTEzNjlmZlpjTlV4bUJzRGp1cHVobUZRV1ZuSmdBRURqdnFodS9ET2d3NTU0NDAzMHY5aGtuTFBILzd3aHp1ZWYvNzVPaUFJaElDd0VDSm11YWlHRU1LMHRsbEphOUdMdExkWTJjdGVjbkp5Nk5hdEcvbjUrUlFYRjFOU1VzS2dRWVBhN0VodzE5VzNyMW16VnVjbHJEVnIwMVE4Ym1CWTFwcVVDWFV0R3pqZ2x1TXVhZ0I5THVDVzZVbzhGS2MrRXlkTzdEU3ZwWFV0Nk9kRzZhaFJveVk5Ly96eksrMVlteEJDeHlyL0VFS1lRb2prbWo3bjNsRjdXM3hPVGc1NWVYbms1K2RUVkZSRTc5Njk2ZCsvUDRNR0RhS3NyRldLTkhzcFN6RG9xRm16ZHhmWW9tYjV1NlpwQ3ROcW5kcjBmNnR5WFM3dEZuVnBLaFNLbzZWYnQyN1h6SjA3TnpmcGprcnBzZHpScEV1YVdOZHBDbXU3bGJCTFB4THJCeEt0VnZhbUs3L2ZUMk5qSXpVMU5ZUkNyZldLbWoxbkxSUU90NDc1dHVKcXVwNFV0bmJXMm9oaFEyWUJnOVJiZFhyaTZwVjFlcngyemFYZTdPT0lFS0xzdnZ2dXU1ajJTUVNYbEZKTFRONld3alJOTEdGTDFyVFo0bVkzeU5zejIrd1Zmb2NPSFdwOTJ4SWRCZ2tYTkdLTitVNjRvRHB4bzYyMUppMXI3Y2F2WCsxeXVWdzNxYmZwOU1VM3BxRHJ2dll2RkI2RENxcGFrZU5OZm43K1YwdExTNzFwckRiTnR0b3NjV3RudGRuaVpvODFDZ2FEQkFJQkdoc2JxYTJ0SlJKSkxIL1JuTmFhTXd0cUQ0ODBEQVBUTUszbExBbHJiY21UaTI0RVZPUFNhVXplUFdlVGRYVi9YSDJ6dTQ2bDFqZUw3T2xua0RkbjJOSC9rQ2RUdmRuSDMybzcrKzIzMzU1d05GYmI0U3czcDlYVzNOemN4bXB6Si9ZWFJOUEcxaEsxSkNhR1phMVpGcHZtZHJ0dlZHL1A2WTNXelV2MyswZWQ0cDlBRGJ3NTZzMytIQ2d1THI0Q2VOTVN0cGlVMGkyRWNKTklKR2d5Z2JES1BxUmhHQ0llajh2VVdGc2tFbWxqdGRYVjFWRlNVb0xiS3VXd2Q0SW1sVEZ1MVpFWXBvRXBKVkpLSklqUXdSMVRnQXZVVzZNNDVjbnNCa0o4L3M5akduQm9LN1RVbkRaYnNUUTRiK2VyaTBjTnZ1S09qWmJGNWtGS0hZRkxTZ3dTaGhTbU5ER2tnU0YxNG1hVXVCRW1IZytpeHdQRVlrMUVvZzJFSXpXMGhBL1FIUHlFK3BiZEhQTC9PeUZzeVdMY3VHMnRHUmkyRzJwS3BKbFl6Z0pTZUQyZUdlcUtWNXp5dUgzZ3kvdjhueWZVQ0pXYlFRK2RkcWQ0WU4vaVNjQUhTYXNOUEVJU1IwZ1hDRk1paFpSZ1Npa053OFF3VE9LR2lXNFk2THBCVEk4VDFYWENrU2pCY0pSQU1FeFRvSVc2eG1hMGFDVGhndXB4dlcwVzFISkRyYVFCVWlLYTltNFpJWVM0VmwzMWlsUGJuSEJCVHM4VDgxd3ROYWVscUFGNDNPNnIvdmUzQy9zbExiWkVuQzFsTndLWVVnb2pFV3NUY1NNUis5ZU5PSG84VGl5bUU0MVo0aFlLMHh3STBkQVVRSE9XZHlRTGNXMFgxRFFUYm1qQ1d0T3lzN091VTFlOTRwUzMxUEo2SitKcko0TG1BNmYxNlI0N1lzaUZwR3l6UWxvWlVva21wUlNtbEppbXhMQVRDYmE0eFExaThUalJtRTRrR2lNWWlSSUlobWdNQk5HU1RlNU9VVXRhYTNiQ0FMSHFUNy9MMERSTkNadmkxRVM0d0pzTnViMFMvejVSbk9hYjVuT3lNcTZZT1dWQ2htMjFTVnZjRXJQYUJJbVpSaUpodFVrTXd4UUpsOVNhL3FISGllbHhJcGJWMWhLTzRBOEUwZXdzcUc2NW9IYlNJR210V1NVZWt5NjY0RnFnbi9vRUtFNE5JZE1TMXBrM0I3SUxvWHNKYmZiOG5TaTY4RUxtNDBUSm8zTnZIWmZHSFhWSjBLUzBoWTJrMVJZM1RPSnhFOTIyMnZSV3F5MFVqaElJaFhIcnVJbmp4c0JGWEFvTUtZUWhCWVlsYUpacWF1N0MwdWtuSkVPa1VDaE9LM29XZEw4RWVOdGh0Ym1GeElXUVd1SXZrSlJTSWd3cE1Vd3BEZE1RY2NPUXR1V214MU9zdGxBRXJkVU5qU2RIaFNSYXA2UjlpTWJHeHVGQ2lNdlVXNkJRZEQyaWIvNkdvWGU4ek5aTyt2cmNMdGNsYTVjc1NFMGl1Q3lyTFRuT1NKclNLdGcxTGN1dE5kWm1KeElTVmxzRWQ3SnV6UkkyTTlrVG1oQTFRT1RrNUh4TlhSNEt4UW1rOGpXdXVQTVZ0clYrL01udE9aREowNmN4ZjBvSmh5MUVhZHpGaS8vclovejBNU2R3eWZndUhycnhLWmFsamtiem5NdmlsYk9ZZklTZi91THd3ZU9BVDFLc05oMkJoaVJSK2lHUXBta2xFcXpTRHp0ODFqYldGbXNWdHRha2dUWEZ3elJ0TjFSb21uYTF1dElVaWhPTVp4QUxmanVIRzNvQTZGUnVXczJjUjU5aWJ2YVBlUGJDd3pUeU4yN2pkOHVxeUx0OERHVW50SEhDemFVUFBzYXo0NC85SjNPek15Y0IvMDNiT0pzYlpOeXFraGFtRldzelRGTWFpVDVTbVlpM0dlaEdhNnd0SEkyaHBicWc5b0hWaUJvTUJpOEJocW1yVEtFNHFTcEh5WmdwM0R4RVovT1dHaXIvNTFkdDNjdnFONWcyN1JmODhyK2VZZXdEYjdCSDM4WGMyUTh6ZDVOMXUxN05TNC8vaWduVDVqRDArb1hNV1Z1ZDNFVVNyZHpFUS9jL3pNaHAzMlhvamIvZzloVzdxTFZ1Vy8vNGc0ejkwWitaZS84dm1IVGpmWXk4NHhtZTMzNk1kWGV4U3A2WjgxMnVXRnFaZU03R1RkeCsvWVBjL3FhMTRyejZJeFkrOE1qUVFmMzZEYlVFcmRVZGxiaE1LVFhEbENKdW1DSnFtQmlteE5RakhLenpVeCt6eXovQzdQN3czN3k1UDhUdURXK2gyYUtXTHI0R0NKL1BkNVc2cUJTS2s0MU83ZlozV0xiRHc3QWgrWlJjT0k3Uk5SK3h5bHJSV3Z2K1Iyd3RPWmV2WFhzbkczOTZFYVdlTTNsMHljTThPc2I2OFpvcWFvZC9nMWRYL29xMXM0dFp2K1JsMXJRQXNRb1dMZndMVzRmY3dOcVZqL0hoenliaFc3MkVPYXZyazg5Y1Z4bm0wbnZ2WSswZkZySjBURDJMWG5nL0tYeEhoYmVFVys2OUNQNytaMTZzOUxQdU55dlpQUHdxRmw2WUI3RUtGdnpvUlRZUHVZN1gvL3I0ZWM0NG03UXlvNENtQ1NGY0FqQk5Jb2JFTUVGQ011YVdHSzBHcG1IUzgreHpFNjZvdy8zRWJuYTNEazBJY2FXNnFCU0trNkZsdTVuLy8rWXdQeGxqNjh2RTZiT1pQeWtQT0lkcmhxeGs4WnVWekN2Tlo5MzZLc291dks3am1GcmZjN2xqVWpGNVFONlljeWg3K2cxcWd4RGQ4VFlyZ2lONGR1YVppVEg4SldPWVAvMGRKcXgrbi9JcGx3SlFPT0pMVEM1T1dJMmpSNVRBK21vcUljM1kvaml2UFRLSFVzZDNMcnpuNXl5ZGxJV3ZkQXFQWHI2TkdRdWZKQzlZd3J3bngxRUVSTGU4d1lyZ0NKNmNlU2I5dkZ3Q0xFMjEyb1JJZENJZ2hLbUJRRXJNaFBVbFRNT1VpVGliaGlIQnRGeFNkNnExWnJ1aGdBaUh3MU9BdnVvS1V5aE9kb3d0bFR3bWZ2bE1Gcnk4amZMcCtieTJJNThyYnlzK1dxODI0WUxxRUcwTUVDMCtpeExIMkxtaW52bjRHcXM3dE1wOG55ckc1bUhZVnk5aTlNc3ZVdjdsNjVodS9VN1JSaitCcGdwdXYvNTlnRDREQnZRZjhja24rOTVyRzJkREJ3UVNJWVFRbWtDYTFoUnowelN0amdRd3BVd0ttNVlxYXBhbEJpQzhYdThVZFhVcEZKMlRvdkZqR1YzelBzdit2b1hOSmVPWVduTHNqK0hya1ltdnVwcktXT3YzYW1zYWlQWW9QczZMbEVLc1g3YWF6U1VEOEwyMW1oZXR4V0crbkR4eWUzNko1U3NmWS92S3g5aSs4aisrbUdxeFNkbmFpV0JLaVNHbE1HV3FLMm9tRnBTYWlkSVB6UkkwZTZpYnNNczhMRGRVQ1p0QzBWbkpPWXRyaGpmdzRyS1BLSmt3Z3FTdWVUUHhFYUt5NmNoQmZ0K0lpNWp1Zlo5Rnl5cW9CYUxWbTFpd29vclJVODQ5cnFVaTBTMnZNUGV0Zk9ZOU9JZEh2K3huMGVOdlV3bjRobzlsTWh0WnRLSUNQNUNoTjE2VVlxMGxWL1JKcEdaYW9tYUNFRWlpRVYzb1JweHd3RTlkSEtTWnFHdHpweVlOYkRjMEZBcGRyTnhRaGFJems4WEVTWVB3YmZCejVYakhxUGFTYzdqNTNIZDQ2TTRmcyszQmhUeDZ1SWZ3RG1UZWo3L09nbDh2WmRJMFA5SHNmQ1orZFRaUFR2azBvOS9ieDlqZ0xCYTlNSWtQZnIyQm9objNjVU94QjJaTVkvSTlMekIzOVZrc256S01oVCtleG9KZkwyWENNajlSYjE2ZnkyWitlOGcvbHYzbmh5VDdSbkZKbVJnWmpoQkNBeUdsa0Y2WElLcEhPVmdmdytWeTQ5TWtwbFgrSVhyMjdFazBHaFd4V0l4NFBDNU0wOVNrbEM1ZDEzK21hZHAzMU1XalVCd2RuMmF2S0IrditteVcwS1kvTW1sNUNjdC9lUkVscDhoNURJWWlTM0xHWHZzaTBBSUVnS0NBTUlLb1FPaENZR2hDbUc2WEpyMGVGejZ2UjJiNnZHVDZmR1JsK3NqT3pFQkx6WWFTcUYvVE5FMmJwQzVWaGFMekVtMnM0UGtWMnlqNThybW5qS2dCWkdYNnprdm5pbUxOYWNOdXM1SlNKRG9SVEd1RmdaSHNSTkJTaW5LUlVvcUdob1pocUdVdENrWG5aYy9MWEhIck03elU0eW9XVHNrN3BYNDFJY1RacTUvNVVlOE94RTFJaVVDQ0thMU1xTE9IMURyY3FRM3ZKSHBETDFKWGprTFJpU205aXJVclQ5M2ErVEZubnprTTJHOExtd1NYa0dnSTIyS1RRb0tVZHUrb2RkaGJyWkpaVVZwSEZBbVh5M1dodW5JVUNzWEpvbnRlemlqTFNrdE8ra2djc2xXcnBOMC9LcE9WSFlaMWFLa1cyL2UrOXoyWEVHS2lPclVLaGVKazRYRzd6aHQ1WnIrVWh2aGtuSzExbEJHV0t5cmJ1cU5haWh2S3d3OC9mQUhRVFoxYWhVSnhFdW4yL0NQZkxYVmFiVExSRkovWUZpL0JtcTZMdEVRdE9kTElhYkZaQ0ovUGQ1NDZwd3FGNG1SVFd0SnJTSHRYRkszVkhVMFlaYVoxR0xJMUVhbzV5enhJekY0N1g1MVNoVUp4c3NuSnpqekhZYkcxS2Z1dzlVcGFXVkpwN1Q4MlpHS3NrV1piYTFKS2NlMjExN3FFRU1waVV5Z1VKeDIzeS9XRkFiM3lYU2tXbThzU05FMUtCRmh4dGpidWFHdU1UUUJpeVpJbFh3UnkxQ2xWS0JTZHdXaGI5dWg5L1oyaUpxMTlvemhXOHlYaWJNNmFOb2ZGQnBDUmtmRUZkUzRWQ2tWbjRjd0JmZHNrRUdnYlp5TTF6aWFsaVNuTlZ1VWpVYjgyUnAxS2hVTFJXZWlXbXpXRWRzbUR0bkUySEhFMjAweTBXYmtkWTRxRUVPSmNkU29WQ2tWbndlTjJENmQ5akMzWkw0cXpuaTNwanJaYWJPemF0YXNuTUZpZFNvVkMwVmtRUWd6NjVmZG01WFFrYmlSVUxWblBacnVsZG94TjlPblRSelc5S3hTS1RzZWw1NS9ieHhJeWErQWtHaEpoVDlXVldKVWRWaGVDbEk3c2dzZmpVY0ttVUNnNkhYMkxDL283ckxSMnRXeFlJNHhhdXhBU3dvYVVVcmhjcnJQVktWUW9GSjJObkt6TU14eWkxa2JZckRoYndpT1ZDTXNWRlpyZEl5cUVVTUttVUNnNkhSNlBlMUNLcUxrY0ZodXQ0cFpJSU5pdUtOWWR6bEtuVUtGUWREWTBJWVk0ckxUMkpSOXBFZ2dhSUdwcWFnWnp1SFdCQ29WQ2NTU3FOekYzem9NTW5Yb2ZjOWJyeC9PUmZTc2Z2Ny9RS1dqU21zZEdzdVREVGlBNExMYWNuSnhCNmwxUktFNVgvTHg0L3k5WVZBbFV2OEcwNzc5QjVURS9oczZhRi83Q3VwNVhzZmFsWC9Ea2VFL2JtN2UveElRYmw3SW05dWxlNGREU2ZrV2tMZEsxT3hBU2dxYnJCdUc0WmJHNTNlNHk5ZVlxRktjcExidDRzM0VnRjVaQTdaWnRSSWNQK2hUTFljTFVOdXFVakJqVVpxdDhrdEtMZUhMZUZNWjdQOTFMTE95UlY1ekdIUlZ0RHlrTTB4UzZBVzRwcGRBMHJWUzl1d3JGNmNaVzV0NzZJdXVDWWVwaUhqYmYrQkhSWUlDb3Q1SUpOZGV4ZHQ0NWJlTlRzVXBlZlByUExGNWZSUzJaRER0M0NndnZ1b0JoT1pVODgvMW5lR0pIbk5pT1JZeGRQWlpuRjEvRGFPZlA3bGpMN1kvb1BQcW5iekQremQ4d2NobmNVQnBtM1k1cWFtT1pUTHpwTmg2ZFZJeXY4VzFtM1BvT2VSZG1Vcm05Z2RvbUtQdnlOQmJjT0tSUFcwc3RHVjhUSmxKb2dHN2F4bU0wNFlvS0lRYXFOMW1oT04wWXhxTy9mWVNWTS9veWF1WjMyZmlIT2R4Uk1vajV6enpDVzZtaVJvZzFqei9ERTQxamVIYkpZMnhmY2lmWEJGY3o2L0ZOMUZMQ25iKzhqL25EM1l5NmFSNGJVMFV0SFRVTk1HVVdhMy83Q0cvZE81RDFTMTVtVFV1cmE4endHMWk1K0dFMlBqT05vdlV2OHBNM1E3MHR5Nnk5dUFGU0NPRjJpY1FkM043RURVS0lBZXBOVmloT1IzUzI3Z2hRZGtZeHRGVHlRYXd2dzNxa2MxZTNzR3g5SnROdnVvaGhPVUJPQ1RmY05vNjg5OTloWGVPbmVOcWVaM0hOaU1UYXdMelNNeW1MTlZBYnRHOHM1c0l4QlFsaDdYRU9kMHpJWmVNN08wbzZFRFY3c1Fza0J4VkozTllOU3RnVWl0T015dFhQTUdOWkpmNm1NR3g1a0hXRXFRdDYySHhyQlRjLytEM3VkQWFvbXZ6VVVrQnBUNmM0OWFXRWo5alRDUFQ0REMvRXlqTkVkU0JOREs2b09BLytIZW1YWXJFSkNacEltYVpyeTV1MmE5ZXVZaUJEdmMwS3hlbEZ5WlE3ZWV1WmFZenYreVdXL3VFUlhwMTVKbWRkZFRjYmY1c2lhZ0RkOHlpaW5qMDFiZDNKV3ZJbzdmSDV2czdLeWdiSXpzMzQyYnhiY2pxMDJGTFFDZ29LZXF1M1dLRTRUYW1wb0prdkJxQUFBQ0FBU1VSQlZMeTRoREtnZkU4OUphWEY2ZStYTTRLWjQ4T3NlT0Z0dHJZQUxaVzh1UFFOYXMvOUVoT1B1N0JWc2VwL0svQUQwY3EzZWVMTk1PTW5uTWtYQjUrUjV4Q3kxbnEyRktScDR2YjVmTVhxM1ZVb1RrLzhsUTFRTW9ZOC9KUlhlaWliNHVuZ25sbE12dmRPYXAvK003Tm1yOFFmeTZScy9CU2V2V3NNUmNmOVZlV1NWN21hYWRmdm9qS1d4K2dwTi9Eb3BEeWFkL2ZJNjhCYWExMUdKUkNHYVVnUmpVYnY5SHE5VDZ1M1dLSDRiQmlHUVdWbEpRTUdIRVBJK3VOVjZzUTVhWHliR2JlK3o1Vy9uY01OS1paZ1pYWGRnbjVmdnZrZElHQWZBa0lJSWdJUkV3SkRFOEowYVpwMGE1cFdwTTZtUXFIbzdHUmwrUEljYm1nYlM4MDU1UU1rbXFacEJlcVVLUlNLem83WDQyNFhZeU5kakExd0N5SHkxU2xUS0JTZGdoNFhzSHpsQldsdmNydmJDRnY3UXlKc21kUDRiQlVvQ29WQ2NVSndhVm82VjVRMlZwdFZxS3NCZWVxVUtSU0t6bzZtaVJ6U3hkWmtHM0VURXRDRUVFcllGQXBGcDBlSTlzS1dhcm5aWFZVYWtLMU9tVUtoNlBUQ2x0QXFwL3VacHV0QUpvVXRTNTB5aFVMUkJTeTJ6QlJSYzJpZWJDTndHcENwVHBsQ29lZ0NaQnpHRFcxanRXbWs3YWRYS0JTS1RvZTN2WGVhVHRaUXdxWlFLSTZHRUp0WFBNT0U2Ny9MME8rL1J2bkpFN1oyQ1lOMkFpZGI1NGNyRklwVGxTMS9adExDajRpaXMyN1JRdVp1K2hRYnBDcmY0YUZsZmlZL3ZKRHR2N3lVNDdja3BaNTEvL01HYTZxUDZzNnV3MWhzMWtaNE1HbHRTMUFvRktjb1d6ZFZVRFJtSUQ2cWVHMVBNUmNPOFJ6N2d6UTJVSnZkbHd1SEh1OWNZd092clZqTmEwZTNGa3ZyMEVxelRMWEVKbmdRVWtxcDNucUY0clBUMmFaN2xQL1BrOHhZVVlXL1NjZlhQUk9mbmxqYVVwamRrNXQvM0g2WVpPMm1sNW43bTNkWVg2UGo2M2ttMDJkOW5mbmpDNGl1WDhxRXh6K2lMZ2k1MlptTW4zMGZ6MDVxVy80YXJkekVnbCsvd2lzNy9FU3ppNW40MVdrc25ING1SY0M2UmZjeE4zczJHNzkxWnVMTzYzL0QwTi9rcy96SGVTeTRmeTFibThLUW5Vdlo1YmZ4NmxjcjB5NXplZlMyY3lnQnhQQ3AwNEFnaWVrZWZxQUZDQXFJU3RDQk9DQTFFcGFiUXFFNHhTajc2aHcyL3ZZbXB2WThoMGQvK3dodjNYc09mUytjemNZL3BKbVFXL2thc3g3OWlKSlo4L2h3NVM5WWUxcys2eDVmd3FJOTRCcy9pNDBQanFPdys3azgrYWRIMm9rYXNRb1dMZndMVzRmY3dOcVZqL0hoenliaFc3MkVPYXZyRC84Q1N5NWw1UjltTTcxN0psUG5Qc0tyc3daYU43UmY1dkxRV2orSDFTcVJtQk9lR01xbW9RR0d1Z1FVaWxPVW1pcktldzVpbUJmS3QxZFROcnh2MnJ0dFh2ME9sY09uTUc5OEFUNDhGSTJaeXJ6aERheFlYWEhFcDRodWVac1Z3UkhNbTVtdzBId2xZNWcvdlMrYlY3Ly9LWk1NN1plNXJIOXJHLzcyV3RXK1Y5VENEY1JJcmxOUUtCU25CbHQ1Nkk2L3NLYkpUMTBzazJrM3JrN3NETTEraEFudlQrUFZlV1BhTkluWE5vYkpLeTV3ZkMrTGtwSmMvSlgxUkJtWXNvb3ZSZGdhQTBTTHoycXpLTG1vWno2K3htcHFqOE52a2xqbUVzYWYwS3FqUXVNWTdxeFFLTG9LdzFpNCtHR1dmam1mQys5NmtJMS9tTVhVbmlNU0xtbUtxQUVVOWNqRVgxMlBQL2tkbmNxYUFIazlDZzRyYWdDK0hwbjRxcXVwZENoSmJVMEQwUjdGaWJIaG43R2d6RnJtUWw1N3JaSXBYOXNJVzFoZEJBckZxVWlJOG1vb0s4bUN4bXJLdmNXVWRTQXlvNmQ4aVpKL3IyWFJKajlSRW9tRUo5N1BaL3FVZ1VkOEZ0K0lpNWp1Zlo5Rnl5cW9CYUxWbTFpd29vclJVODZsRENncHljZS81U1BXTitwRUd5dDRmbldGUTZFOCtMdzZ0VFgxUkpQZlM3L01KUThpUi9Wcnk0UXJHbElYZ0VKeEt0TEFCNVVGbkZVQzdLMml0dWVnanV2UFNpNWw2ZHd3YzMvekNDTWZzYktpOTg1bVh1bFJQSTEzSVBOKy9IVVcvSG9wazZiNWlXYm5NL0dyczNseVNtSTRkOW5sMTNIUGxxWGMvdi9XRWUwK2dLa2o4c2xOL25CZnJwa3lrRm0vZVlSSmUrN2tyWm5RMFRJWEtXVTRqWFhtK0w5QUNJa3BUU21rbEI4QUk5VkZvRkI4TnRReWwrUEFZWmE1bUZKdWNZMjQ2b2UwbG5zNEY3cEVCVUlYZ3JnbWhLbEpLZjNxYkNvVWlzNk9sTEtsWTJ2Tm5wMmJRQU9Vc0NrVWlrNlBhY29XaDRESmRJSm1lYVM0cFpSTlFnaDExaFFLeGNubk1NdGNETU1JSE1aaWMrb2FtcFN5UVoxTmhVTFIyWWtiaGovRllwUHB4VTJnU1NucjFTbFRLQlNkbldoTTkzZmdma3JIdWdNQU5NTXc2dFFwVXlnVW5aMVFKQnFnZld4TnRuZEVRZE4xdlZxZE1vVkMwZGxwOGdjN2NrV1RZbWRuQzl5UlNLUW1KeWRIblRXRm9oUHh5WUVhZFJKUytHRDdua0RIb2lhdEZhT0pRV3p1Z3djUEhpd3NMRlJuVGFIb1JBem8wMU9kaEJTcTZ4dnRjZy9URmpXUjhENmw3WUlLSWRBMGdUWnk1TWdhanJZSFM2RlFLRTRPa2JtL1dobzZqQ3Y2Lzl0NzgvaW82bnYvLy9VNTIreExsc2tlRWhLV0VFUkFLK0R2aWxoLzZOV3FiUzlZV3JTOVNsdSthUHVyMUc4TDFRcTl0cUJ0b2N0RmJ5dFdyMWhic0ZxZ1ZXcFJSQlRVRmxjVU5TeWFSQ0FRUXNqQ3pHU1ptWFBPNS9mSG5IUHltWk16U2JCc3d1ZjFlQndUQW1hWk0vUE02NzE5M3RUYUNZKytvM2IzODhlTmk0dnJUQldsOUlBTlpEcmozREpFRExCUlN1aysvdEJ4Y1hHZHFkSjAvYUFOYWhsdXpkeVliQVNrYWJEcHV2NHhmK2k0dUxqT1ZDV1Rhck9EWTNOcytTQWt2Zk9BYXByV3lCODZMaTZ1TTFYeDdwNW1oeEEwYSt1SGxLWmhza0ZSK041a0xpNnVNMEVwYkZqNkE4eC9UVTMvc1dBYWZuN0haMW94aEJ3YklTUmRHUVZBT3pvNjZ2bUR5Y1YxWmluUjlCWVczWGszeGw5M0cycSs5a3NzMk56RW5ESTdORURVYlg0ZWEzZWZyTE5rVzdCcDdTdlkzbkdpUDYrTTZ4YjlDcnZXL1JMdkxCZ0hCVUJEL2I0MkJtWTIxMmFPVXhIcnZ3SUFXbEZSOFJGd25JOFpGeGZYeVZQeVF5eForaVIyVk0zQStzZC9oczBMejBmVHd3OWd3ZmJqZ1ZRUGRyeXdFV3Yybkt6VC8xdXdiczFMMk5aeGNqNjdTNUVSVEFlU2lUdSt2N3pEN3RRSW9JTms5TFNsQ3dna0hZcWExbTRYZ0FuOEdjWEZkZm9WM2Y0U05tQVNIcDE3ZnZvNDczRlhZT24xYitPYXA5NUQ2NVRKaURpY05MdHA2Zi9Ga3NMYjhQTGNTdXg0OU9lWTkydzdvbDBxa251V1lmempBT1FSV0h6ZlhGeWZBMFEzUDRCSmF5VmNWOWlPSFEzdGFGVktjZjNjRzdGNFN2bzQ3OFMyaHpCK1RTSFdyL3c4YWdFQUgyTFIxeDVHOUxzL3gzMFh0dUNSTysvRGlrWVZpVlFQdHY3d0IxZ053RFg4YWp6KzA4dXlIeitlb1c1c1g3c2FTNTdhaGZvdUlGZzJCblBtZmhtM2pnczYvRnU2eHdZMUhZQk9BUW9LQ3FTM3ZoTmlMQmFsZWpySGhuUmx0RTRRQkE0MkxxNHpRRTBOTFVEVlpBTXFhVldQcmtUd3FROVJqOG5wN1U4RGFPTE5QOERyTjBleCtzNjdzVzdLUXF6L1FsNy9mOVNwWXNLaS80dmxaVEphdHorS0dmKzlHbFVyYnNPTmhZTjlkNFg0K2svdndkZXhFL05tUEkzcWV4Y05iVGNDRzJhL3RSNjNQUVVzL09uUGNYMVpDblViZjQrYjcxbVA2b2R2eHBXMkNVOWQxK3ZSUDdlbUE5Q0oyWlJMUVRWS0lZR0FDQ0lFUWdnRlFGVlZyZU5QSnk2dU0wT0pMaFV1UmNwY2ZlZVQ0RXFwSnk1blZEQUNVOHJTSzRValU2N0dEUVVmNDIvdm5hSUR0UlVacmxRUFdqdWlpTUtMMnF1L2ljMFB6TUkwaDdGMVhVdnVRLy84R2hPQ0Vpb1FBSlJDQTFNOEFFQjdlbm8rNEU4bkxxNHpReTZmaEVUU0JyRXVGUWxaR25UUDV5ZFRBR1U1UUxUejFHempkSTJiZ2NlL093YTcxanlBNlYrNUM5UC9hejAydEtpT1AxdXlOMzdRQmpRTjlwWVBRaWhKVDhKVFF2cEdxdWpldlhzNTJMaTR6aEJWMXhRQ2V6NUVYVVo0Mm9SbzJVZ2poeVVEU0NGeHd0YWR4OURVQWdURG5qUjRGQm11Vk9xa1ZSUVRMUzFJakw0TTkvMTBFVjcvMDEyNGIyb1BWdDY5R21zZENoSFI5Z010QnNBMEJtckdaVlJFS1FVRklCQ1N2a3ppVFo0OCtTaUFEL2xUaW92ckRIQnNGMXlCNitYWHNlU2hPdFRIdTlHNit5VXNXTnVPSzc4d0xwMWZ5eWxGYmNGQi9PM2xKa1NSUXV2dTU3SHFmZFgyV1R3b3k1RlIvL1l1MUNlQlJEeUtLQXZDSXp1eGFYYzNnQlRxTnorTlZVY3FjYTJadkI5ZWllcU9YZmpiZTkwQXVsRzMrU1ZzNnJSL2wwR1U1YlJqKzl0TmlBS0lkblFQR1lTdDI1L0FOWGMrZ1UwdEtRQmVSQW9EY0NYN2c3UTNnWStPSGQ3Wmc2eXRIdWxMcHdDSUFKbWtpd2hXOFFDQXJ1djYyNElnak9SUEt5NnUweXlsRWdzWHpjS1MzenlKYTJhM0ErRlNYSG5EclZnK3hXdjhnekxNLy9abG1QZmZ2OEtFMzhzb1BlOENYSGxlQUUwWm4wVEd0SnRtNE1wN25zWTFNNThFd2hXWWY5ZjNjR3VOOGRjK0wzWTkvaXRNZXE4ZDBaeEtYTC93eHI3Q1FlRy9ZZWxOSCtLMmV4WmhWZEtEQ1pkZWdDbWw5bSt5RXJmTW5ZeDV2L2tWSnZ3ZUNKVCtHKzY3YnlhbURhSFh2K3dMTitQQmp2Vlk5djBmNExZdXdGVlFpZXUvZTZOUjRlMXIwS1dVZnVBVWhwSjBWVlNuNmVQWEFFS29MS2JkR2lFRVJCUkZXZGQxQ1lEYzA5TnpxOHZsK2hsL1ZuRnhIYjgrVFF1VG81c2Z3S1NuUitDWis2NFlZbnZHNmRIaG94Mi9MTDdzUDE5RmVrbHlISmxMa25zQmtoSUlWRUtJTGdrQ1ZTU0JLb3FjenJHWmxkRm9OUG8yZjNweWNYR2RLZHJkY0dDZnphMnhPVFpLakpFcW96R1hrblNPalFwc25EcHIxcXkzRFNweWNYRnhuVzdGdi9hRDVTM0lySVJtZ00yOENDR1VrTDRUZENWQ2lIRktPUFN0VzdmcWxOTHRoSkRwL0RIbDRqcDdGWngrSzNhZjRhOXlWZFBlYW1ydDdBYzFZNVNLQXNSd2JlYU1hQnBxYkI4YmpMZTZxcXJiK1czbjR1STYzWXJHdTk5M0NFUFpjSlNtWTFCWWJvMlk3UjdHSDZpWlo0dkZZcS96aDVTTGkrdDBhKy9IQnhzR2dockpPRG1YUUNCR0g1c2dJQ1BIQmtELzFyZSt0UjNBTWY2d2NuRnhuVVlkKzhhaVh6ZGxnWnBEamcyVUNBU0NRS2dnR0k2TkVYM3l5U2RWWGRkZjVvOHJGeGVYa3lnOStWOGpwYXF2MVRVZVlzTlFOUk51Zldld01lRW5DQkVnRUNGZFBDQ0VtSDF1RklDZVNxVmVjYmxjMS9KYnlNWEZCYVM3WVErblBEaVNVS0NCSUo3UVR1clhhMnRyMjVrdERLWHBBZ0tsNXRRQkNGS1VBRlFFcUFpcWkybXdBVll2bTA0cHBTMHRMYThNR3phTTMwMHVMaTdvRk5nUkN3S3VBUHg1UWZoOGZoU2U1Sy81NFVkL3IzZUFtZ1pBTTFsRkNLRkVFQ0FJQW1SWmhxSzQ0SEs1NEhhNzA4Y1dtWVVEMDdGVlZsYnVCdkErdjZWY1hGeUhVMjdBRlVCaFVRbDhQdjhwQ0hWcDNkeHZmcjNORm9hcUJ0UnNSeGFaUFd5Q2tWOUxnMDRRQkFGTW5zMkNtNnFxVy9ndDVlTGlPcEpRNEE4RVQ5blg2K3JxZWczT3ViVytpbWpha0JrdEhnSUVnY0NDbWloWTdSNW1LQXJqZjlTajBlaEwvSlp5Y1ozYm9oVFFxSkRkcWJWdHg4cnZmUVdmdS94aVRML3FQL0REdnpjREFKcWYvQ1l1dmVSaTQvb20vdHc4OUs5WlgvOVJIVEx6YTdiQ0FYVExpQm1UQm9JZ2dCaFFFd1VSa3VuWUdMaFJTcW1lbjUvL2lwN2V2bHpLYnk4WDE3a3BRb0I0VXN1U1U0dmg1ZnNXNDFsOEN5dWUrZytNVkdLSUlRQUFLSjcxTUxaOUlZRkUrOSt4NE1abmp1ZExIcnIyYzFmdHQ0V2d4bVVQUXlrMFZZY2twNkVtc283TnNHOU9TMGMxVGRPZTQ3ZVdpNHZMV2MzNDRNTWthcS8rSEVZR0FMZ0NDTEJINExwY2NCM251dUtlbnA1dDJkd2FJZENRc1hLUFVsM1hxSjUyYkZRUVJJaUNDRkh2N08vWXpMbFJBSG9zRnRzY0RvZS96bThnRnhjWEUzOWk0NTMvaWZ0M0pKR01KNEZmWEl2UC9RS0FNZ1YzL25rSnBycUc5amxlKytNeVBQamtkdXlQS3lpYWVBM21mZis3eU85c2ZOY0dOYXR3WUxSNTZBUklBODM0VE1sNEhPM3hPQVJQQkZWbFBvakVuUWFiZWVtNm5nRzMzTnpjelR3YzVlTGl5bFFlcnY3cE03Z2FlN0h5aHJuWS8vVy80ZDdweDdlSllkK1RQOENQLzE2Qk94L2NoS201Y2J5MjhuYjgrSHUvUGZUZTFwODBHc1pLdFlNTmxPb2doSUlRS2dvaVJLSWhxUko0d2lFRWpUWVBVUlFnZW5JZ3BDMmNrREV2eXBSVWRVM1ROdklieWNYRmRlSzBGeHYvK2lGcXYvcGRUQzEyQWE0OFRMN2xHNWg0OU9tWDRKaGI2ejlLUlVoNk94VWhBREhDVUVFVUlZb2lSRW1DSUlxaTVkak1rQlI5Ky91MHpzNU9Eall1THE0VHFIYTB0L3RSVkJ6bys1Q3JBZ0Z2MjQ1c1lhZ0Z0NHcyRHdBZ1NFTXRYUTBWUlJHU0tLYkJac0tOZ1pyVnp4YUpSRjVCZWtzOEZ4Y1gxd2xRTG5KejR6amNGck0rUW51Yjkvem1qUVAyYW1qS2hCckpQREhYT0NrMy9mK3lVQk5GQ1pJVzY2dUttbStaWTR5c0FkUmtNcm1CM3d3dUxxNVBySXcxZ2FOdzlSZEhvdTZSMytMbDVnU0FOcnp5MndkZVF2OUpnNHpDZ1hXd3BNRW9RUlJBb05ORWtrSVVDWFFLU0pJSWljWWdzWTZOeWJVUnBqcXFIVHAwNk8rVmxaVUwrZDNoNHVJYWlwcWYvQ2ErZkYvZnF1SjNicndZOXdPWTlNTk4rTVhuQXFpWTlYUDhWOXNTM0QvdlN2dzRya0FMalhqWHdhM1pHM01wVE9NbENCQmtCWDZ0Ry9HT0kyanNKSkQ5WlJpWG13TTVNQkpreElnUjZPM3RSVzl2TDBra0VraWxVa1JWVmFMcnVrQXBsWkRlek9wU1ZmV1BnaUJjeVc4WkY1ZXpQazFicW9ZcVNvRzNZMkVVVnB5OHJaeXFxcjQ0dktKc0pZQmU5RzJqTXE5dVFrZ0NRSW9Rb2hKQ2RGRVVxU1RKVkZFVXVOd3U2bmE3NFhGNzRQVjY0ZlA3RVF3RUlFaVNaRHEyak9xb1BSenQ3dTUrbWo5MXViak9MUkVDU0VSSFY5ZkoyL0hVM0h6b1ZZY1FOQVZBSllSa2JxVXkyQ1FJQWtSUm9GWnVUUkloU1JKa1NZS3NLSDNGQTNzUndWWWQxZSsvLy80TkFBN3dXODNGZFc2cFFFbWdLM1p5RHRXbWxEYjkxNDhXNzJMQWxyS0ZvVHJNSTRyTW5RYlcyRlFmdHlSUlNvTk5scUVvU3A5alkvTnNnaUNBb2FNT1FMdnJycnQ2VXFuVU9uNmJ1YmpPTFJVcENkQkVIRWVhbTA2NGM0dkg0ODg5dittNWxKTmJBNGc5djVhR216RVhhb2VhSk11UUZRVXVsd3VTSktVL2FQd2pLb29pMFRTTkNvSUFUZE1vNDlyVUF3Y08vTFdxcXVxNy9GWnpjWjFiNGVnRmdTaU9KTHB4dUMyTzJGRVJYY2tUYzRMdUs2Kzg4bllXdDZZQzFCeDhUM09JR3RKMWFKcEdOVTJGcXFhUVNvbElKa1ZJdlNKNlpRazlMcVVQYkV5dWpRMUhNMlpIUjR3WXNVdFYxZldDSU16Z3Q1dUw2OXlDVzZGYlJhRTdCa3FCekZVcG4weUpaT3B2bHkxYWROVG0xRklBVWdSUVFjd3dGRlFnb0NJQlpCRlFKTUN0RUhnVXdPc0N2RzRnNEFWQ2ZpQTNDQlRrQUlJc3k3QzVOdGdINDQxUkt3M3BTUVFlam5KeG5lT1FPeEhhM1hqZ1ZRZTNsdEhta2JGaXp6aDNUUlRUb2Fna2lwQWtFYklrUXBZa0tJb010MHVCMStQdUE1c29pdVpiYW9hbHpKSGhWblUwUHo5L0M2WDBWWDU3dWJpNFBxazBUZDgrWWViOHhnSGNtdFozL2xyYVhJbUVVRkVnRUFXUlNxSUlVVXpEVFpZa0tMSUV0eUxENDNiQjczVkRVQlFGc2l6RDd0eHNEYnRXRVFHQTJ0WFY5UVMvTlZ4Y1hKOVVCdzYzdmpDQVcxTU50NmFUOUpaM0toQkFFSWpoMUFSSWttQTROUkdLTE1GbHVUVVhBbDVQSDlnY2lnam1pRlhHN0NnQWJmcjA2ZXNvcFh6WkN4Y1gxM0ZMcDdSdTZsZS8vMzRXdDJiTWgvWVZEZEpnTTl5YUtGRFRxYVhiTzJ4dXplTkdNT0NENEhLNWtBVnVHYTZORFVkZmYvMTF0YmUzOTNGK2k3aTR1STVYUjlvNm4yMXE3V1NobGpTdU5OU0llWkpIdW45Tk1QWWFtQzBlYkc1TmtmcmNtcy90UXNEblJZNGRiRGE0c2E3TlBoaXZybG16NWtrQTlmdzJjWEZ4RFZXVTBvWWYzZitISFlPRW9kWkp1UVJBMnEwSkVNVjBiazJTUk1paVpCVU1YSVpiODNrOUNBVzh5QTBISUhnOEhqakJ6VlloWlVOU0RZQTJkKzdjYUc5djd4LzRyZUxpNGhxcVdqdWlHeDVhOTN6Q3lhMFJJR1VVRFRUQVBFZ3k3ZGhFVVRDS0JRSmtVWVFzRzdrMTJZQ2F4NFdBejROd3dJLzhuRkFhYkc2M3UxODRtcVg5STZQMVk4T0dEVThBYU9DM2k0dUxhd2h1clhIWncwKytaWU1hNjlqNldqelNSUU1JaEVDMGlnWnB0MmJPaENxeURMZExoc2Vsd08vMUlCVHdJUzhjUUZGZURnU2Z6d2UzMjIyNU5oWnc5dFlQVzY1Ti9mS1h2OXpSMDlQekdMOWxYRnhjZzdxMTltTlAvL0t4cDN0dElhanAxbFNRdmhWN3Bsc1RCVUxUYmkwZGhxYUJsbGtKOVhuY0NQZzh5QW1tM1pva2lSRDhmais4WG0rR2F6dWUxbzgvL2VsUGoxTksrUW03WEZ4Y0E3bTFQWGYvNW85dk9rRE5kRzBPTFI1RzBVQVVqUllQZXpPdURLL2JCYi9QY0d1aEFJcnljd0FBUWlBUWdNL25nejBrWmVEbTFQcGhWVWkvOFkxdkhPdnU3djQ5djNWY1hGeloxTnphL3ZRRFR6NDNXRzR0b3lGWE1OeWFKQXEwSDlRVUdSNlhLOE90UlhKRGNCdUxUSVZ3T0F6V3RRMVFKYzNxMm1iTm1yV0dVdm82djMxY1hGeDI2YnIrNXZSdi9IQ0hBOVFHY0d1QUtCQklnamxkMERkaDRKSmx1SlYwTTY3ZjUwRTQ0RU5lT0lpaS9GenJhd281T1RrSUJvT1dhM1BLdGJHdWpka2FiMjFyM3JoeFl6SWFqVDdLYnlFWEY1ZGREVTJIbjluVmVFakY0SlZRSFNCVVNCOGtTVVZCZ0NTSmhsdExRMDJSbWZZT2p4dEJueGM1d1FBS2NzUHdldnAybXdyNStma0loOE1JQkFMd2VyMFczRXpITmxUWEZnNkhOK2k2L25kK0c3bTR1RXlsVlBYNWtaK2J0OHZCcVEzdTFzUk10eVliQlFPUDJ4aWQ4bmtRRHZxUW54TkVVU1FuNCtzS0JRVUZ5TTNOUlRBWWhOL3Z0M0p0RGhNSkE3azJsUkNTT25Ma0NIZHRYRnhjbG5ic3F0K0V6R1pjQzJ5R1cxT0g2dFpjVm51SE1Ucmw5eUkzRkVCQlhoZytqenNUYkNVbEpjalB6MGRPVGc3TVFzSlFjbTFtTVlGMWJjWEZ4ZjlJcFZJUDg5dkp4Y1hWMWRPN1p2THM3eCt3UVMyUnphMEpSaVhVeWEwcHNnU1h5Mnp2Y0NIZzkxcnRIU1dSdkg1ZlcvQjRQQ2dxS2tKZVhoNUNvVkRXUW9KVGhkVGUxMFlJU1gzd3dRZVBBVGpJYnlzWDE3a3JDaHo4NitaL2JvTnp3WUIxYXhsOWExWWwxTzdXRktOZzRIYW4yenY4WHVTRmdpakt6NEhIcmZRSEd3Q1VsSlFnRW9tQUxTUjR2VjY0WEM1a0c1TFBsbXViT0hGaWZYZDM5NFA4MW5KeG5iczZjclRqeWEvZSthc09tMVBMNnRaSWhsc1RNODVaY3lreVhJb0NyMXVCejJzVURFSUJSSEpES0NuSWMvejZBZ0FvaW9LaW9pSmtLeVRZcXFUVW5FcXdyK2d6WGR2VXFWTWYwM1g5Ulg1N3ViZ0drZUk3NjM0a1ZkTmUvc3lYYm50akNHNU5NOXlhYms0WlNFYmZXcjhxcUhFeWJzQ2JidS9JRHdkUkZNbUZJa3Zad1FZQTVlWGxNQXNKWmtqcVZFaGdoK1NaR1ZLZGRXMDdkdXhJSGpseWhPZmF1TGdHVTZqa3JQdVJkdTVwZkthcHRkTStYWkFBa0NETUJpckRyZW5FT2tTU1dFNU50bzFOZVR6cGszSE4wenNLOHNJb0w4clArajBJN0IvTWtOUjBiUVAwdGxtdWpabElZSjFicXJpNCtPVmtNdmtiL3N6bDRocEFrWkZubFd1THhyc2Z2WERXN1I4YmJvMkZXdC9BZS8vejFxaElDRTBQdUlzMGZTcXVuT0hXMGhNR1hvU0Rma1J5c29lZ2ptQXJMQ3pNR3BJNmpGdFJTWkl5Q2dtc2F5T0VKTGRzMmJLS1VycURQM3U1dUxLSUNFRDFwVUJPQlNCN1B0VS9pcTdUZHgvNDB6UDJnb0dWV3lOQTBneEJtZlBXcUdDRm9HbW9aWnlLNnhTQzV1ZWlNQzg4NFBmU0wwQXRMUzFGZTNzN290RW80dkU0ZW5wNmtFZ2trRXdta1V3bWtVcWxvS29xVkZXRnBtblFOQTI2cm9OWjA2ZFJTZ1VBNnRWWFgzMjRyYTN0d2R6YzNKWDhHY3pGbGMxZWlFREp1RS85ai9IaG5qM3I3L2p2eCtJT1VFczdOa0xTQlFOQ05DTjlSUVZSaENqTGtGd3VTQzRYWkk4SGl0Y0xsOThQZHpBSWJ6Z01mMTRlZ29XRnlCMDJEQVVqUnFCMDNEZ2dGQnE2WXdPQVVDZ0VwOTYyTEkyN0dTRXBISnAyOC9MeU5xWlNxWWY0czVlTDYreFZQQjVmWFZOVHM0Y0pRVE9nUmdoaDErcnBBTktOdUtKSXpWWXlXWmFoR0p2YzNXNDNQQjRQZkQ0ZkFvRUFjbkp5a0orZmo1S1NFb1FHZ1pvajJJQjBJY0hzYldPSDVMUE5rdHFhZG5WQ2lOVnBUQWhKdmZycXE0OVFTdC9tdDUrTDYreVRydXZ2UFByb295K2lmMTZOaFZyS01Ec2FJVVEzSnBpc3RaOG0xRXl3ZVR3ZWVMMWUrUDEraE1OaDVPWGxvYWlvQ09YbDVVTXp3VTRmbEdVWlpXVmxLQ3dzN0ZjbGRUaHhkNkJDZ2dvZzlkblBmcmFwcmEyTmg2TmNYR2VoOXV6WnMvNDczL2xPTkdzSTJ0ZTNabXgySjFuZG11blVQQjRQL0g0L1FxRVFjbk56VVZoWWlMS3lNc2l5UEtUdlNjcjJGMFZGUmVqbzZFQTBHa1ZYVjFmV1hCdWJaOU4xbmVxNmJtNjEwaWlseEhCdFFpUVMyZFRiMjd2QzVYTE41MDhGTHE2elE4ZU9IWHU0dHJaMjd3QnV6ZG8rWmJnMWFvTE5iUGhublpycDF2eCtQNExCSUhKeWNoQ0pSRkJTVW9LaW9xSWhmMS9TUUg4NWJOZ3dkSFoySWhhTG9idTdPd051WmdIQnVLaXU2OFJXU0tBQWRFcXBWU1g5NHgvLytMOXo1c3daS3dqQ2RQNlU0T0lDOXUzYjk2bjkzbFZWZmVtZWUrNTUyUWExWHB0Ynk4aXJBYUNFRU90ekdDWUlBSkRHUnZxdHdSSHJZOGY3V0EwSU5wL1BoN0t5TXN1MWRYZDNXMkJMcFZKMjEwWTFUU082cmxQakc5TU54MmJtMjRSdmZ2T2JIZE9uVDMrd29xS2lGa0FKZjFwem5ldXFxS2o0dEg3cnphKysrdXFHVmF0VzlUaUVvTDJ3RlF5TXZKcHVPRFZxT0RScTV0TE1Ja0U0SEVadWJpNEtDZ3BRVmxhR3Fxb3ExTmJXRGptM05pU3dBZWxDd3JGanh5elgxdHZibXdFM3R2WERDRWRCMDRMUjEwWW9wV29hemtTb3JLeDhJeHFOL2s4Z0VMaVhQNjI1dUQ2ZE9uanc0Qjh2dWVTU0pnTnFMTkRzSWFocVRpWVJRcXk4bXIxWTRIYTdMY0FGZzBIazV1WWlFb21ndExUMHVLRUdaQ2tlT1AxV1lWdEEyRUY1V3dzSWRSaVNaOGV0VW9TUVpEQVlmQ0taVFBLUkt5NnVNMVIxUzZhaXF1cG1ySTMyLzd0NFBMNjZyS3pzYldTMmRsZ2hxQzJ2WmtITlZnV2wyYURHdG5aOFVrYzdKTEFGQW9HTUZwQlFLT1E0bFdDRG0xa2x6UmlTTngrSTU1OS8vbUZkMTdmd3B4QVhWMXJSdXJWWU11OGFUQjFmZzZxcUdveWZOQjJ6Rnp5Q3JhMW56dmVvcXVyV2xTdFhib0Z6QmRTQUcwMVNTbFZLcWFicnVxNXBtcTVwT3RWaHVUV3FLQXBFdFF2dDdURWs1WFE0R2dnRUVBcUZNbG83QW9IQUovbytwYUgrdy9MeWNzZHBCSWRjVzdhUUZFYk9UU1dFSksrOTl0cERqWTJORDFSVVZGUVFRcXI1MDVyclhGYnIxZ1dZUFc4ZEdvSVRjTzMxODNGREtSRGJ0UTBiTml6Rm5LMnZZY1V6RCtLNnlPbjlIaW1sRGR1M2IzOTZ3WUlGTVljUXRCZnBJZmNrcFdiQmdHaUVwRWVuS05WcEt0R0RoTWVIZ0dHQ3hHZ3ptbzhvQ05lY2x3RTFNNy8yU1VMUTR3WWJBQXdmUHR5eFF1b3daa1YxWFNkbVpRTUExWFdkYlFFaGhCQmgrUERoYjdhM3Q5K2ZrNVB6aStQOVhyaTR6aDZydGhYTEZxeERRMlFtVnExZmpta1d3RzdGTFRjc3dZeVpxN0JrMlZaY3VYd2FYS2ZSckRVMk5xNlpPblZxazgydFpZYWdsS1lMQmtUUVJNSHFWNE1rYU9qdVNhRTNucUJDWGhBdWx3dWlMSUFRRVc1dlptdEhhV2twaGc4Zi9pOTlzOEx4L0dPdjE0dUtpZ29VRnhkbkhFeVo1ZFJkS3N0eXY1RFVOcFdReU0zTjNkRFQwL01yL3V6bU9uZTV0Z1liamlxNGRQNUMwU0F4c2dBQUlBQkpSRUZVQm1wcEJTZmVnc1VMYnNDVmtRUmFiZm12WmFzWFlNYlVHbFNOWDRDdGFkK0hyUS9jaGhsVHg2T21xZ28xazY3QnpVczJvU25CZk1LdHQyRjgxWFFzV3JzYWkyWlB4L2lhS3RTTW40b1pDOWFpemlHZmxxamZnRVd6cDJQc2lJcUhxcXVyMzJlY1dpOTdFVUlTWUErUVRKL2NvWnVOdUxMTEI3OGtVSUhxSUhvNzluN3dBZDQ3bEFRaGNieS82Uzk0NUsvdkl4V0pvUGpJVTVnemF3NXUvLzJmY05zMWsxQlROUlZMNmdCc21vZWFxa2xZc0Qzeis5dTZZRHlxYXVaaEUvdkJwcTNINzVLS2k0c0hkRzFtT01xR3BHWUxpQkdhc3ZrMkFZQXdaY3FVaDk5ODg4MUNXWlp2NGs5enJuTk5kYS90UUJLMXVHS0tVNndad2JSYmwySmF2NDl2dzhwbFZiamkrdmxZVkZXTGFrU3hkZEVNekZtVHdPUWI1bVBwQkJkYVgxdUhsYXR1d2V6b0ttek9jSHNOV0xOb0ZhNmRQeC8zelE4aXVtMFZscTFjaU5sUkZ6WS9lQjM2dm92dFdIWnpIU28rKy9rbjlyZjhnKzFYNnhlQ3NsQURvRk1LU296RlQrbThtZ0ovVVNtS3ZWNzRQQkp5eHBZQnh4cnd3V0UzeGw0eEhSZVBIb054UlVVWTVnMUJrUko0ZnZrS2pMbjJSc3lmV1lXSkVRQk5RM2UvQzJiUCtXVGhYM1YxTmVMeGVOYjJEd1pzR1NFcHBaVHF1bTV2QVNFN2QrNFV0bXpaOHREMDZkTUxSRkc4bWovVnVjNGRKZERhR2dXVUNDSXMxNkt0YUdXZEZsd0lSb0lNbkVveDg3NzFXRDR0YVB6N1RWaXhIWmh3eTRONGRPSEU5TCs3L2pwRVdpZGg0YWEvWWZ2eWFRd2NGVXhlL0RqdXU5SDRnbE9tb0N3eEhUTlhyY0NxdXV1d3NMYnZhNDYvODRuTm56bXk0ZmtOOFI2blhqVjdGVlFsQXRHaFU1MVNuYVpTS1ZBSVVFUVpzaXhUYTdqZGx3NDlKYmtadTQ1NFVUbHVJaTQ1dndMRHk4cFFmU3k5UnEvcWxzZXhmbUh0Y1lmZWRTdVhZTjNCcWs4R05sRVVVVlZWMVE5czdEU0NiY3lLbUlVRUkrZkdGaE1JSVVTNDZxcXJtdXJxNmxiVzFOVGtFVUltOFNjODE3a0N0a1FpRFJFWDh5cmV2dVFhM0xEdWFOOEhBak94NnQzbERKeXFNWGxpa0lsWnI4VHl6VmZhUG5jUTFXVVJZSHNyb2dtZ2p4SXVSTW9pR2RDY09QTTZWSzFhaWUwN1dvRmE4KzhtdkZXdTdIMTYvdno1VVZ0T3JjZTRlbTM5YXVsR1hJbFFVSjFxdWs3VlpDK090U2RvM09WSFVYa0llVVpyUnlBUWdCU1ZJWW91QlBNTHJXWmM4VjBDSUlEYXliV2ZJSjlZajYxYkc0QXhDejU1d2o0Y0RxT3lzdEtDVzdZS0tldmNUTGdaVXdrZ2hKakZCSUVRUW1wcmE5OXJhbXI2YlVsSlNTNGhaQVIvMG5PZC9US0JaZ0RPZURYWDNuSWZWbDJiQUJERnRtWHpzV29vb1ZpMERtdFhyTUNhVGR0UmR6Q0dwR1hRcXROSUdvZ1VaVlVvQTFEZjBBUWdBa3BSMzlQVDl1ZDdaMTdWWW9OYVh3V1V5YXNadVhNcnJ5YkxMaXJMTW1SQnAycWlGL0dlT0pvYlBnTDFUY2Jra3JSamt6c1VTSklMNGNJU1ZGWldJaHdPLzR1UFpTc2FXZ0ZsWXZXL1Zva3NLeXV6QnVSWnVHWEx0UmxRTTRlL3pMQlVNeDRjQWtBb0t5dDcrZWpSby9mbjVlVXRBaERoVDN5dXN4MXNrVWdRU0RhaHFSVkFtZUcxcXFkZ1dqVUFSTkc2U2hsQ2pxa09EOHllZ2VXdEV6Rm40WElzckM1RDBBWFVyYndaQ3pjTjFUdGFPbnFndlh2MTRjT3ZOQ0p6c0wzWElhK1dNdk5xNWpKMWRyckE3WGJEazErRVNpV0ZwcjM3Y0tUaE1EQ2hDams1T1ZEYVhaQWtEL0xMS2xCV1ZuWkNIOVYvdWNWaTFLaFJHYTZORFVudEozOVFTdGw4bTI0T3d4cmhLU0dFRUVvcHljL1AvM3RuWjZjL0ZBb3RCdURtVDM2dXMxbTFsMDVFWU0xVy9HMVRFNzcrOVUvNEF0K3hCbXQyQVpldWVCQ0xyK3NMVVJQQklRWjA5ZStnQ1VDa3FxejM0TUdEcTY1ZThYWWQrdG82elBDVGRXdjlRbEJDcUs0bWswaUpMbmg5TWhSRnNmSnEza0FleXZNUG9MTXRpVlFnalB6OGZMaU91cUVvUGhSVmpSclNMd0Fna1VIZi9vcWdLZ0lrbTVxT3I5M0RTWVFRakJneHdwcE15TS9QdHlZVDdHTlhaZ3VJYmZHeU9YSmx0b0FrQVNUQzRmQ2Z1N3E2ZUJzSTExbXY0TFJiY0gxcEV1K3NXSUJINmhMOXdxdlcxdVFRN0ZZQ1VRQ0pLUFAvSitydy9JNVd1eHNERUVOOVhUMGJ3MkxUcWswNGlER1lNZ29QR2VOU0xOUjZHYmhsbkxGbXZuN05maldCZ0ZJOWhTVHBLeFo0dlY3NFBDbkU0Z1NDUHc5bGhma29LaXBDUldFSWlxSWdtU1NELzN5UkNDS0lvYjYrS2VQbmU2MHV4dnlqYWt5YlZnWHNXbk5pbW1JRGdRQ3FxNnY3RlJJMFRjczJJRDlZTVlGUVNvbmY3MytzdTd2YjQvRjRidWRQZjY2ek54cWRpSVVQTGtMZDdLVllPbU02bnIvdVNsdzZwaFE0Mm9EWE5tM0F0b1lBSnR3eUV4TUh0SDNYNHNyOGRWaTNaRGJtTlZ5SmFyUml4NllOMkhFd0NTQ0tSQlFBVTJ2WXRYdzJaalJjajJzbjVPUG9hMnV3K205SEViNzA5Z2QvTUtuZ0h3Nmhadzh5anlPeU9UV3pFVmVpYmg4UTYwclMrTkVXSkx1RHlBbW4wQk5ydzc3Mk5yUW5YYWllUGhVWEdJZEdqblNOUXVpSkxWaXpaQWx3eGFXNDdzWnBLQnZvNXl0ZGhWWExic2E4Z3pNeHdYVVE3MnphZ09jYkFEQ0w0R3R2V1l5WkcrYWN1Rzcvd3NKQ3gxeWJxcXBzUDF0R1dNb1dFNHhQbzluRDBsbXpaajM4NXovL1dYRzczZC9tcndDdXM1WnR0Vi9INDV0cjhjaXlGVml6ZFMxV3JJc2hxZVNqcW5ZYWJsazVIL092ckI2NFNoaWNocVdQTDROcjBRcHNXTDBTVzExVm1ITDlmWGg4d3ZOWXRMSUpCNW44SFJEQUZZc1dvMnpiQ3F4YzBvQ29xeFFqcjczN2tmcFhmN2tWL2FjS3JCQ1VFQ1FvTlZmb1dWRHJhOEtWWlNpS2o1YUdLSHFpY2NSN1kyZzlITU5SUVVHNHNBcFRwMTZPYS85dEpFcExTMUZWVllYeXkrL0U0amVic1d6REtxeG96Y2UwRzZjTkRQOUhseUc2WUFVMnJWcU9yWUVxVEx4dU1aWk5YSUdGR3pJZmgrV1Byd1JoRDNJN0VkcTllemQyNzk2TnhzWkdIRHAwQ0VlT0hFRjdlM3ZHMFVjR0FBa0RRR0wwdXdrQVJFcXBCRUFHNEtLVXVuLzBveCtGZi9qREg5N2ljcm5tOFpjQTE1a3FUZFBRMU5SMFpwK3h0dlUyakorekZkTld2WXY3REk3RVlySGZmL3ZiMzk3OGh6LzhvWWR4WlQwQXVvMjNQWVFRcTJCQWpHMVQ3UGxxek5IZTFobHI1dnluZWI1YVNVa0poZzhmanBxYUd0VFUxSnpVSC9PRXoyZU9IajNhQ2tudDdSOVpYSnQ1NGk2UVdTbTF3dEtmL09Rbm5aRkk1T0c1YytjS0xwZHJMbjhKY1hHZEdNVmlzVDhzWHJ4NGl3RzFKQU8xSGdacS9VN0RkYXFBc3NVQ244L25lTHgzWldVbFJvOGVmZEovcmhNT05rSUlSbzhlYllITjN2cWhhWnAxNUMrVGI4dFdLYlUrNTNlKzg1MDJSVkVldnVtbW04RGh4c1YxWXFDMmRPblN6U3RXck9oQ1pxR0FiY0RObGxmVEJVRmdOMHhSY3hHTC9jQkkwNjJaVUdPUEJ2L1VnQTBBUEI0UFJvMGExYTlwMTliUDFxK1lZTGcwMDdXeGNDT0VFREp2M3J6V1JDTHh1N2x6NStwdXQ1dUhwVnhjbjFESjd0anZGeTlldkdVQXFMRk9yZC9xUE9QQVNHcDNhdWJLdkZBb1pCMFlXVnhjaklxS0Nvd2FOUW9lejZuWmRpL2VmZmZkSitVVG13ZFFtbkF6SzZRczNHelhZQmluQUxCeDQ4WVVJZVQ5aXkrK1dKVmxtWTllY1oweG9wUWlHbzJlZ0E3Nms2aktxM0hEelRjODh2U3kvMi9MNzM3M3UrNXNUZzBPa3dWc29jQ0Vtc3Zsb3V3SnVQYVZlV2FoWU15WU1jalB6ejlsUCtaSlBRT3RzTEN3M3pTQ1E0VVVUSjdOcXBRQ2dHMWdIb1FRVUVxeGRPbFN2UFhXV3crdVhiczI2ZlY2ZVNzSUY5Y1ExZEhSOGVBVlYxeXg5YTIzM2twbWMycXdIVVBFVmo4eks2QjlUczNjMnM3bTFJcUtpbEJSVVlHUkkwZWlzTER3bFA2Y0ovMXd4L0x5OGd6WHhrNGoyRjFiK3BjZUpRQ29xcW9tM0RRMkxEWGh0bkhqUnZoOHZ2K054V0s5ZnIvL2R2QUpCUzZ1Z2RUYjJ0cjZVRUZCd1QvUS8vVGJnYUNtRVVJMG9lOElvcXpoWnpBWVJEaWNuaW9vS2lyQ3NHSERyT2I5VTYxVGNtcHRkWFYxMXVQRG1WTjJUVHR2NWRwVVZUWC96aEZ1QUJBSUJQN1kwZEhSSFE2SGJ3T2ZMZVhpY3RMUmd3Y1ByakltQ3RqWnp4NWIrT2tJTldiQmNRYlVuRmJubVZBckx5L0hpQkVqVUYxOWVrNzlQMlhIY2RmVTFHVGJpK0RvM0V5NEFlbitvQUhnUm5OeWN0YTN0TFIwUlNLUmIvRlRRYmk0d0JxRit2cjYrdFVqUjQ2c0c4U3BKYkpCamMycFpRcy9uYUIyc252VnpnaXdBY0RZc1dQN3dTMEwyQ3k0bVFtM2JIQXovMXhZV1Boc1kyTmpkTml3WWZNRVFiaUlQNlc1em5WcG12Yld1KysrKytjTEw3eXdFZjFuUHdkcjZiQ2dObGhPellSYVlXRWh5c3ZMVVYxZGpiRmp4NTdXbi8yVWdvMFFnckZqeDJaMWJRNi9iVmdINXdnMzQvTlNTaWtkUG56NFAzYnMyTkU1YnR5NGI0cWllQlYvYW5PZDhUcjJ1NVB5YVZNcGJmT1diYnVldm1ybS9TMU0rR21mL2V3aHhycThUS2hSalJCS1JZRlFVYUJVbG5USW9nNlhwTUl0cS9BcUtmamRTUVE5Q1lTOVBjanpkNkV3RkVkNVhoVFZoWjBZVzk0R0VuMzkzQUViQU1peWJNRnRFTWZHNXR1eXdZMGFINmRtYURweDRzUVAxcTlmdi95YWE2NXBWUlRsYS95VnczV3VxYnM3K2NURGoyMTdmdjRkZjQ0T0FMVmVBaVJBWUt0K1FpTUVhYWlKaE1xeUFFVVc0WEpKMU8yVzRmVW84UGxjQ1BqZENJZTh5TXYxbzZnd2hQTFNYRlFQTDhEWW1sTElrbmphSDRQVHN2TE83WFpqN05peGpuazIxcTJ4SVNraEJLbFVLbjBVU1ByLzAvcllsdW5jWnN5WWNiQ21wdVpYYjd6eHhoRy8zejhmZkxVZjE3a2h0YTA5L3RENGYvdXZsdzgyeCswN0N0anoxRXlvMlp3YWRJR0FDZ0toa2dFMVdSYVE2RXpRenFBTFkzTFNVQXNHR0tnVmhGQldtb3ZxNFJHTUhWTUN0MXMrSXg2STAvYUM5L2w4RnR6c1lMT0hwWVFRYXVUVDdLMGc5Z2tGYXNKdDkrN2RlaUFRZUt5bHBlVndKQks1aFM5bDVqcFR0ZjJlKzNIejBmOFg3LzY2OWhQdkRhV1VOalR1TzdxbWVzS2k5NUc1VGFyZmVXb00xTlNCb0tZb0luVXBJcWlRUkZLUjRmZTVFVENobHVkSFVVR3dEMm8xcGZCNVhhaC85cC9Zbmo4T04zN0c3L0JkeHJIMXZtZXc1T245YUlwSmlJd2JoOFUvbVk0clM4NGlzQUhwYzl6R2poM3I2TmpZdkJ4Ny93YUJHMldkR3dCYVdGajRiRjFkM2VGUm8wWjlYUlRGei9LWEVkZFpaOU5VYmV2Mk54cWVubnIxTDV5V0dkdVA4MDZBOUIzcDNRYzFRZ1VCVkpJRUtrdkVnSm9NdDF1QUpoS0lMaGNDQVRkeVdLZFcxZ2UxUU1BTlFFWGRjNjlnWlVtVkk5aGFuMzBHdHowdFllbGp0K082a2w1cy9kRWF6THZqRFd4KzdDS1VuVTFnQTRCUUtHVEJiUkNvOVlPYmtXOWp6M096Z0diQVRRZWcxOWJXdnIxNjllcERNMmJNK05qdGRzL2hMd1d1TTFXSlo5ZGgvSVBBamFNVDJMcXpEYTFKRjZiZE5oUExQNThIRjFxdzdEL1dZUHZvS3JqMnRLQXBsb0JZTldiMWVTUFZMYis1NXk4eFpMWnoyTU5QYSs2VFVxUUVRalFRNkNiVVJBRlVUZWswbWRRQlFxZ2dFNVNWeXZCNlJHZ1MwTzEyR1ZEelFEdTBIMzk2TG9aTzNZdnlDOGZqaHo4ZWp1dUMrN0hrUDU3QzJrTWFZbGlEU1hzdXdlTVBYNFMrTUVuRmp1Y09JZmp2czNCZGlRVEFqMmx6eHFINkt4OWllK3dpWEorb3c3eXZiRVhrWjdkaTZXZk9BckFCNlkxWEE1V0hUY0FSUXN5TEVrS0ltWE16YzIyNnJsTzJ2NDExYmpmZWVPTWhBUGUzdGJWOW5KdWJld3VBWXY0eTRqb2pkZWdZY05jc2JQNlpIOUZYbjhIME8xN0Nwcy9PeEhVQkFFaWdWUm1EOVgvNVFuUHk0LzEvTEp0d3o5dGIrNWFxSkJtSXNVZDVKd2hCa2xLa1FLQUtJQm9JTklHQUVvSG9va0JBVXhyVmlJQ2NQQmYxU3hUdHJRbTBkSXNvSzNCQmxRVW8zblQ0NlRuNk1WYnZDdUsySDgvQXZNdHo4ZkZqeitMbWIyOUc1QzlYWWZGZmJzV0UyMytOWlNVMzRPVUY5aEdxWHJUR1ZFUktHQ2VYNzBjRXZXZzlDbUQ0TU54eTE3OGpPTzRzY1d5bWNuSnlNdURHUUt3ZjJPek9EUUJoNWtyN09UY0F1dUhlYUY1ZTNsL3I2dW8rSGpWcTFFMmlLRjdPWDBWY1o1eEtxakRUQ09XQ280ZWhPdmtHV21NQUFnQWdvbVp5eFV0N3QzKzQ0WktyZnRHRWdiZXo5OXBDVHhWSWg1NkVRQmNFUWdXQlFKSUlKUnBCVWdjbGdnaVgzNFVSdVVFb1hpK0NBUWtwUlVEVTcwTnhnUXYxcjNXaCtrdWZ4N3pMaHlFbjdFWE9iWmZodXFmWFljMC9wbVBLWUltZWZxc2JSQUFxWWtrQThHUGlaLzFuVHlocWg5dDU1NTNYRDJvRFFJNlN0UHJsM0N3YjE5Y09Zb2FtV20xdDdkcy8rOW5QR3Ivem5lL3M4bnE5L01oeHJqTlhSalVoWVd4ajZVbHBENy95Mk5xWEgzNXVXNDh0bjlaLzd5ZVFwRUNLV0ZDRER2UkJUUlFKbFNRQ1dSS2dlQ1hxN2traDJ0Nk56clllQkNLNU9ML1lqWnl3Z3FSYlJHY29pUEl5TnhwVUwyb3ZISUdjc05kTUpxR3FSTVh6UjNzeDZMaTJZditBQmtCQ1FEbnhEOXNaMXdZUkRvZUhCRGQ3V0dxK2J4eU5wSnRBWTRvS09pSEVkRzc2SFhmY29kOXh4eDMvZStEQWdiMmxwYVUzRTBJbThsY1IxNWtxcXROM2R1MDVzdjd1VnhyM0FvMnFRejR0dzZVUmdpU29CVFNORUdpZzBFRkFCWkZRU1NCVWt0THRISW9pVWdrRXZrSS95djBLZkxLTzVvK080dDJtZkV3WTRVZlNJNkV0TndjanF2TVFyWGdmcjBaMTVqdUxvK0dvaEVqK1lHZFF1QkhKbDlCNktBNGdsUDdRMFRoYTRVUGtKSnhtSkp5Sk56RVVDbUhjdUhFWU9YSWtoZzBiaHVMaVlrUWlFZVRrNUdSYjdVY1ZSUUd6Mm84eXEvMDA0NHoyRklBa0lTUkJDREhQYys4dUx5L2Z1bTdkdWgvMjl2YXU0aThmcmpOUnFxNnRmdkdKTGY5VE8vbC9kaU56ejZmMVBHWXVhMFVlTloyYWNaWmEraGM4Mjg0aEdJMjNJbExIZXJDL1RZWHNkU09VNDBlK1g0TGk4Nkc0S0loOG40SkFRVDdHamFuQkYyY1BSOTJxRjdEaGtBcWdGenNlMllvTkdJTWIvaDhKZ0FTWFMwS2k3UmhhRS8wOTFKVExoaUg2M0hhc2JWU0J4REZzV3ZVTzZzZU53cFJBR3BBN1hteEFmZUlzZFd5bUFvRUF4bzBiQjBFUUhDOUNpUDJ0NWR4U3FaUlpNV1dMQ3BRSlRVMzNwZ0hRdnZTbEx6VUIrRTFUVTlQT2twS1Ntd2doRS9qTGlldDBTOWZwdXgvV3Q2OWYrK0diZTdEc1RaVUpQWk9PTG8yQkdhVjkrd2xJdWo5TkZ5aEZTdGRwVDFLRXp5dENVU1RxZGtsd3UyWGtqMUNnSEl6aG5UZmpvS0tNZ29waG1IMVZHU3JLdlVnRVhEaFlXb0pBd0kzQTU3K0FCNDgrZ3lYLytXc3NpRW1JakI2RHhiK1pqaWxHeUR6bCtuRW91K01wVFAzUFMvRE1FeGVEYlI0Tlh2WHZlUERRYzFnMDk5ZFlaUFN4M2ZlVGllbFdqNlA3c2ZKSFcxSDJtMXV4K1B4Ly9iRTc0VnVxVHJSNmUzdnh3UWNmb0w2K0hnY09ITURodzRkeDlPaFJkSFoySWhxTm9xdXJ5OXA4bFVna3pGMExoTmwrQlYzWENhVlVNQzhqYXlrQmtDbWxpcEhKY0FGd3JWcTFLakpyMXF6cnZWN3YvK0V2TGE3ajBTZmFVcFZsVmpRYTYzbjBnZjk5Y2RzZGR6OFZSMStCZ0IyUFlzUFFkT2dKTnZRa09rSC9Jb0VzQ1pCbGticVV0THZ5dUdWNHZhNk1pWUw4dkFDS0NrSW9MOHV4eHFUT2xJbUNUNzFqc3lKenR4dm5uMzgrUkZIc2Q3SHV6ZWJnc2hVVktKTjdNNHNLT3RKVlV3MkFPbWZPSEczT25Ea1A3ZDI3OTYycXFxb2JSRkdjeGwreVhLY3M3RlQxbDNlK2YrQ1pDeSs3OTJNRFVuYVh4dWJVa2dSSVprd1JvSzgvelhCcVZCU1lJb0VpVWtXUjRIYkpjQnRROC90Y0NBWTh5QWw1a1ovSHpINVdGV0RzbUROajl2T3NBeHVRSHB3ZlAzNDhKRW5xQnpiN1d3WjJWQkFFSWdnQ1ZGV2x6TDZGOU42L3Z0RFVxQlFSelF4TkFhaWpSbzE2ZmNTSUVUdGZmLzMxNjNKeWNtNENVTXBmZGx3blM1VGk0SkhXWTA5K1p0cFAzbWhLejNteVVFczRYRWtIbDlZWGVwcVRCR0pma1NEdDFHUzQzUkxjYmdVK2IzcjJNeFR3SUJ6MklXSkNyU3dYSTRZWFl1eVlVcHlDaFZMbkx0aUFkSHZIZWVlZEIwbVNqZ2R3L1NxbWhCQnFoS1pnblp1WmQwTjZHNzBHUVAzb280L1UzTnpjOVJzM2Juempzc3N1KzZMYjdiNkp2d1M1VHFoQy93ZGRYVjFyL3ZyWHYyNzc2bGZuZFF6aTBneWdFUk5vS2VNWHNYVitHck9iQUpJa09lNzhORSsrdGUvOVpJL3pQcDJIUko1VFlETlZVMU1EV1piTkNpaU1OV0NPSWFvSk4rTXRZZUFHUFMzclNDU3pnZGZKdlYxOTlkV05BSDViVjFmMzZzaVJJMmRLa3ZUdi9CWEo5YThxbFVvOXYyUEhqazJUSjA4K3dBQXRHOVNTRE5SVTlBMndteEdIdFd6Rk9NYmJmSjFRUlZGZ1B5RFNoRnB1Ym03R2lyelRlWnozT1EwMklMMUR3V3p2TUM4V2NFNmhxWEhEcmRDVXFacGFybzBKVFRYR3ZWbFBvdHJhMnJjQXZOL1UxUFJDY1hIeGwvaEp2VnlmUkxxdXY5blEwUERNeUpFamQ1bS9QRzFBU3pxNHRKU0RTOU9aaXhxLzJMTkN6ZXYxd3V2MUloQUlXSHMvQ3dvS0xLaU5IRG55dEN4ZTRXQmpWRjVlbmdFMzgyYWFvYXJkeFJtZ3MrQ1dTcVVvSWNRODhOSmVXTkFad0dXNE53Q3Bzckt5RnkrODhNSi9QdnZzczFmbTVlVjlpUkJTdzErdVhJUG4wZWllNXVibXA2ZFBuNzVqMTY1ZEtwTWZZM05wN051a0RXb3E4MHZYQXBxNUVrOFVSZmFYUFhXNVhCbFFNNWV1bUhzL0k1RUlTa3BLckdYR3AzcEYzc25VU1Z1WWZDcGsybW1uZkp6NWRvQnhMSHRhMUp3cmhRRTRHSEN6R24xTjJBSFFtNXVidGVYTGx6ZWtVcWtYTHJqZ2dtYTMyMTFDQ01uaEw5OXpHbHlPQzVNcHBZMnRyYTJQTFZ5NDhFK3paOC9lZi9Ub1Vic3I2M2RrTjlMTFZYcnQrVFJtY2JIVFJuWW9pa0lWUmVtWFMyT0J4aTVkcWE2dVB1WExqTGxqRzRKeWNuSncvdm5udy96dHhFd2daT1RoMkN1UlNEaUdwb3g3TTRmckJWdDRxZ0ZRamZBMEJTQjE3NzMzSnUrOTk5Ni9MRjI2OUlWdmYvdmIwME9oMEV4K3FDV1hBYlNHMXRiV0RjdVdMWHZybDcvOFpTK1RHM1BLcGJGaGFBcnA0NFZVUW1CR0N4cEEra1lGQVVwQWFQcXBTa0JCUUNtb1RnRktDWFFLYURxRnBnT3FScEhTZ0pRR0pGV0toQW9rVWtCdmlxQW5SYkQ3b3dNQURweFZqLzJuMnJHWmttVVpoWVdGanFlQURISGUxRzdnekJONzJSTkM3TlZUeTcwQjBMWnMyWkw0K2M5L3ZyZTd1L3Y1Q3k2NG9Nbmo4ZVFTUWdyNHkvdmNjMnpCWUxDdXBhWGxEOS83M3ZjZW56MTdkdU0vLy9uUFhnZUgxbStucHkybnBoSmlnZERJcDZXZmk0UUlFQVdSaXBJSVNUSnlhYklNUlVuL2NuZTUzWEM3UGZCNmZmRDUvQWdFQXdpRndzakp5VVYrcEFERnhTVW9IellNVmRVaklFbnlXWGt2enZqSmcrUFZ4eDkvaklhR0JqUTFOVmxUQ2gwZEhZaEdvNGpGWXVqdTdrWjNkemQ2ZTN1UlNDU1FUQ2JOVGZXRVhlcXM2em94TCtOeE1xY1cyTWtGaVZJcUE1Q1JQcnZBdXFxcXFwUlhYbmxsYW1GaDRUV0NJRnpNWC9abnY1TEo1UFkzM25qamhhOTg1U3Z2TnpVMW1TTk5yRU96RndneUhKb3gwOHlNUWhIemx5aGxLNTVtb1l3dEVHUXJFcGp0SEdiNFdWWldocXFxS2xSV1ZwN1Y5K0tzVzNKU1dWa0pqOGRqRHNlYmVZZWhGQmlvVVUwbHFxcGE0YW5aOTJhNk5TTTgxUWNJVDVNQWxJYUdCcVdrcE9RRkFOdjI3dDA3b2JLeWNyb3N5NS9uTC8relQ0bEU0bSs3ZCs5K2RjS0VDWTBNek5pd00ra0FOUloycWdFMXE5cHBnSTJheFFIanVVbVo1NjRGTkRPbnhoWUovSDUvUms2dHVMall5cW1kVFVXQ2N3WnNBRkJZV0FpdjEyc0J6dTEyZzMwUzJPSFcyOXRyQVM2WlRHYkx2VkZLS1dIUGVEUFBkMk9lbUNuRHdWbUFBNkNNR2pYcWRRRHZ2UERDQzA5TW1qVHBVci9mZncxd3dvOTU1enExWVdkVExCWjc3c1VYWDN6N2kxLzg0dEVzUUhPQ211bk9yR0YxSTQrbTI2dWRCdFJnVmp6TjU2dVRTek9oWmk4VW1PMGNadU50SUJBNEorN1BXUmVLMm5NZWUvZnV4YjU5KzNEbzBDRzB0TFNndmIzZEdxQ1B4K1BXQUwwWm1ocEQ5RWdtazFCVjFYUnZHZUdwc1hoR29KUVN3OEdaNGFsNXNTRXFHNnJLQUpRYmJyakJ2WHo1OHNrRkJRV1hTNUxFVC9IOUZFbFYxUmNQSERqdzZ1MjMzNzdycWFlZVNnMFJhQ2s3MEFDMktKQUJNOTJjZDJiRFR0YWx5YklNdHBYRFBra1FEb2VSbTV1THdzTENqSFlPOG1tZGorSmdjMVpUVXhNKy92aGpORFUxb2FXbEJXMXRiUVBtM2N6Y1d5cVZnbmxLQ0FNNFlxd01KT3cxQU9Da0xJQ1RBY2liTjI4dXYraWlpeVlIQW9IcHZCL3VqUDBGdWFlenMvT2xiZHUydmZ2RkwzNnhqUUdTRTlCU1dZQ20yb0ZtSG54cWhwdDJsOFlDemV4UE0xM2FRUG0wdkx3OEZCWVdvcXlzREpXVmxTZ3JPL2VDZzNNQ2JBRFEyZG1aVVZSb2JXMUZSMGNIamgwN2hsZ3NaaDEvMU52YjYxUllnQUUyWXJvM0ZuQk1nWUVGSEZ0a0VBMEhaNGRjeHZYZWUrL1ZWRmRYWCt6eGVDNEhVTUtSY2xwaGRxaTd1L3VsdXJxNkhaTW1UZHFQdmlyNFlFQ3o1ODVZVjJjUE9hbDVJQU9UNDJWZEdqdnI2Umg2c2syMzdNeW5XU1N3OTlSeHNKMkYwalFOOWZYMTJMOS9QNXFibTlIYTJvcTJ0alljTzNiTU90dXRxNnZMT3R1dHQ3YzNBMjRPN3MwTVQ4MHozd1lDM0ZBZ1ozNU0ycjE3OTdpS2lvcUwzRzczWlJ4eXB3NW1QVDA5Mno3NjZLTjN4NDhmMzJnTEY1MkFwZzRSWnYyQUJtc1BCeWdSQ0JSWjdoZDJzaTdOTEJDNFhDNXIzdFBuOHlFWURDSVVDaUV2THcrUlNNVEtwMVZYVjBNVXhYUDJYcDVUWURQVjNOeU1mZnYyNGVEQmd6aHk1RWhHYUJxUHh5MjRzWWRYc25CakFjY1VGd1lDSERIQUpqaUVxWklOYXJMdFk5TE9uVHRIVjFWVlRmQjZ2UmNUUXNaeUJKMDQ2YnBlMTlYVjlkcWVQWHZxTHJyb0l0YVo2UXlZQmdLYXlnQk5wWlNxUnFYYzZuRTBONld4UURNcm5icXVVMEVRNFhhNytnSE5IbnA2UEo1K1EreG02RmxRVUlEUzBsSlVWRlNndUpodmxqd253UVlBM2QzZGFHeHN6T2gzYTI5dng3Rmp4eENQeHhHUHh5MjRPWVdtV2NKVEMzQU9PVGpDT0xpTVhCd0RPQ2ZRWmZ6ZHhvMGJpeSs4OE1MYWNEZzhRWmJsaTJGdHh1QWFvbzZsVXFuWDJ0cmFkdjd6bi8rc256RmpScHNCSUgwQWQrWUVOZmFFalg3RkFNYWhXYmt6Tm9kbUZnWTBUWWNvaXZENXZPendlci9RMDRTYTMrL3YxOHBoaHA3RGh3K0gxK3ZsZC9oY0JwdXBBd2NPNE1DQkF6aDA2QkJhVzFzSHJKcXlvYWt0OXpZWTRNQVdHV3lRTTUyY0dhYUtkcGc1QVE2QU9INzhlUG1SUng2cHFxcXFHdTMzKzgrWEpPa3pBUHo4YVoyaHVLcXFiMFdqMGZmMzd0M2I4STF2ZktPcHJxNnUzK1NJTFhUTUJqUVdadXovbzl1QVpqazA0NElkYUdiWXFhb2FGU1VKQWI4dkEyaHNiMXEycXFjNXhGNWVYbjdXbk1yQndYWUNGWXZGck5DVXJacWE3czFwcjBJVzk1WUJPRjNYN1ZWVVpBbFQ3WkF6UTFVckwrY0FOc24yZDJKRlJZVzRaczJhWVNOSGpxd0toVUtqWlZrK2p4QXk0aHpMazMyVVRDWS82T2pvK0dqMzd0Mzd2dmExcjdVME5UWHBObGZtNU02eXVUVHI3OHhtYk52bnlJQ1p6YUdCclhLYXgybXhoWUZrU29Va1NRaUhnaGt1elF3OTdRMjNiTlhUREQzUGxkNDBEclovd2IyeFZWUFR2Y1Zpc2F3OWJ3NjVOd3R3cG5zeklXY1BVeG5BT1lXcTluQlZ0QUhPNlgzUmZ2M2lGNy93WDNIRkZTV2xwYVhEL0g3L2NGbVdSd2lDTUJyV0t0NVByUks2cnU5SkpwUDFzVmhzMy83OSt3OCs5OXh6TFhmZGRWZVBDWmhCWUpZTmFobnZNODRzSTh4a1EwM1k1b21adzAySXBRaVhBQUFHR1VsRVFWUXRtREV1alRLTnRrZ2tVNUFrR1htNTRheTlhWUZBSU1PbG1hRW5kMmtjYkVOV1YxY1g5dS9mYnpYMDJudmVzaFVXc2dGTzA3VEJBR2QzY1NiZ2lBUGtCQWZJRGZhKzZPQUdoZlhyMStmWDFOUkU4dlB6Qy8xK2Y0a3N5OFdpS0pZUlFzb3g2RXJ2VTZaZVN1a0JUZE1PSnBQSjVuZzgzbnpreUpIV3VycTZ0aTkvK2NzZFlBNG1HQVJtMlJ5YTQvdjI1RDhMTS9RdEFLSnNNY0IwWndBZ1NWSS9vTEY5YVd4eG9LYzNtVDdFb1NDL1g0SEFxVGV0cEtRRXc0WU5nOC9uNHk5V0RyYmoxK0hEaC9zVkZ1enV6ZDdVYTA0c09MZzNxL2VOQlp5bWFTYll3UFRDd2NIRjJTRm5BWXFCM0dDWFlIdGZzTDF2NWY5Ky9ldGYrOGVOR3hjc0tpb0toa0tob05mckRTcUtFcFFrS1NpS1lsQVFCRDhoeEU4SThSRkNQQVlJelFNQXpNOEpCZ3pXMmpoS2FRK2x0SXRTR3RkMVBhNXBXa3hWMVdnaWtZaDJkM2ZIT2pzN284M056YkdkTzNmR0Z5eFkwTTNBaTlwQVJnZUFtVzV6V05wZ2wvMjh2V3d3WTBGbXVqTm1TeG9GQUVWUkxKalpXamd5aWdPeUxLTzdKd2xGVVZCU1hHQTEyOXBkR2xzZ0tDb3E0aTlPRHJaL1RhbFV5aW9zSERseXhOcG5PdFNtM3FFQ3p1YmlXQWMzRU9RY1ljZE1Qd2dEUUUxMEFKdjlZci9PUUJjYzN0cmZ6MGlET2J6UHZoM29zb1BNZm1WemFmM2VONDkrZDRMWVlEQXozN2Z0MUlBb2lxQ1V3dVZ5WlFXYXZlSVo3K3FGeStWQ3hiRFNqR2JiY0RpTS9QeDhGQlFVV0FVQ1daYjVpNUtEN2NUcDJMRmpPSGp3WUwvYzIxRDYzb3laVTN0NG1oR21HdTdOZ3B3eHpXQ0Zxc3g5c3Vma2lBT0Vzc0ZPeUFJemNRaGdZd0VuT0VCdElNQU5CRGM3ME9BQXNZRWNtcDdGcmRrVCs0TkNqQ2tBVUZ1WWFjTE1LZ1F3RmM2TUhSdWlLRkpLS2R4dWR3YlFKRW15SEpxOU9CQ05kY1B0OFdEVWlPSDlLcDVGUlVVb0xTMUZLTVE3ZWpqWVRxSmFXbG95M0JzN2tqVlFhMGcyOThhMmg1alZVNXVMQXpOMGI3bzNlMDRPRG81dVVPRFpxckZPUUJzSWJzZmozSTRIYk1jVGRqb0NqcWxPWmdVWUF5OFdubUJ6WnVhZjJUQ1RYUTdFQUkyeXVUUktLYnhlYjFhWFptL2g2SXgyd2V2MTRmenphcXh6MDB5WGRpNGNMOFRCZGdicHdJRURsbnR6S2k3WXE2ZE9yU0dwVk1weWJqYkFRZGQxNGdBNDFzbkJGcXJhM1p6OXozWW9aWFZpRHVFdUdRUnMyVnliUFNTbEE4QnRJTURwVG45bW9EU1FzN1AvUHhsZmkvMnpMZFNFM1puWmdFWnRsVTdyYkQ5ZDErSHorUVpzdEdWblBOczZZZ2dFZ3BneWFhTGwwbmkxazRQdHRDbVpUT0xRb1VQOWlndHNlRHBZL20wQTl6WWc1TXhpQStQazdHNE9XUnlkSFVSTzE2RE9qQTJIVDBhT3piWlVodzRSZVBZTHRpUGRZUWVaM1pXWnpvekpuMldGbVIxcUp0ZzBUVU13R0J4d2FKMXR0RzA1ZWd6aGNBNnV1UHdTbEpTVVFGRVUvdUxpWUR2OTZ1bnA2UmVlc3RYVG9iU0gyT0ZtbTJCd21rZTFRNDV0SFlGRFhnNDJLTUhCMldFQUp6YlVmSm9UekxJNXRxRVdFdXlBd3dBQWd4MWM5andaa3krRExXOW0zME9iQVRPMmZZTmQxRzNQcFdtYWhuQTRuSFcrMDZ4Mm1tSG53Y1B0eUk4VTRMSkwrSXJhRXltSlB3VC9tandlRDZxcnExRlVWSVREaHc5bkROV3orVGNUY0hZSE4xRDExQUZ3bE1uREVSdmdxQTEwNWtWTm9GRkt6Y01HMlY5b2c0TEtDWVlEd0d5b3B4blNvVUxPWVMwaWJDRWwrMjh6M21lY21TUElISUJHN1V1M0J3TWFlMm1haHB5Y25INWIxOW1qaGN5aDlhS2lJa0NxNXk4aURyWXpWejZmRDlYVjFTZ3VMdTZYZjJQYlEreUFzOCtlWm1rUGNRcFJxUWsxVGRPcy9Kc1Q2RXpBTWE3T2hGMC8xODVBYkRCb1pRUFlKd1ZiVnNBeEo3LzIwYmdQZHJBNXNneUkyY0xNZmlBek42amJROC9Cd2s1N0RzMjhWRlZGZm42K2RheVFIV2htSG8wUHEzT3dmYXJrOVhwUlZWV0ZrcElTSy8vVzF0YVcwZi9tVkVFOUhnZG5DMDh6M0J5YmczTndjSGJZbVhCajMyWkFqLzI3VTVIQ1lCMlg3V1A5NEdWNzZ3Z3hCNkJsNU5CWXFObkR6c0VjbWoySDVuYTdrVXFsVUZKU2t0R1BscGVYWnpYWnV0MXUvaUxoWVB2MHl1MTJXOGN5c3dVR3RvTEtBdTU0Y25BTzdzMnBUY1FPdW40RkI5UFoyUUhIL0preVJRblcxZldqbWhQOGh1TFVuTTdoWnovR2dzdm14dXp1TEFObWJJdEdsdnlaWTdnNVZJZG16NkdaVXdPcFZBcVZsWlhJeWNuSm1CcVFKUDVTTzVYNi93SEYxRm5aOGoxaXh3QUFBQUJKUlU1RXJrSmdnZz09Il0sWzEsImRlc2NyaXB0aW9uIl0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUJNQzNwVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJmMVp0aVc1bFdVTC9rc3JvZ2tpcUFSb0Rpb1o0L1VnbTU5ejRpaU5SdEk5SXZ4bG1sSUwzbnV1Rk1BdTF0b1ZydjMvK1grKzYzLzlyLy8xdktta0srVzNsbGJLelgrcHBSWTYvNmozNzc5Mi9uenVkUDQ4LzhYeTUxL1B2Mzc5K3VzYmdiK2puL3g5NCsyL3Y1L08xL00vZitBZjkzakd2Mzc5cW4rK0UrcWZDLzM1QmhmK1BZRjM5dC9yN3cvSjE4UHY2MC82YzZHMmYvOG9yYjUvZjlUeDUwTHp6d2ZQby96NW5mNTZyTjlmL3Yvclg3N3dza29yYzZNWXdvNVB2TStmNmZjRThmZTc4L3M5ZndZKzkvQzFIbU1zRjM4OThmMXpNUmJrWDE3dkgzL2Y5OThYNkY4VytSLy91djU5OWYvNjE3OHRmdWgvdmg3L2JTM0xuelc2eTMvOWpTZi8yOWZqWDdjSi95SU9mejFSK05kdjNDSEYvM2lkUDcrL2I5WHYyNyszNjBoaFMrV1BSSjNGZnY1eEdUNDRXUEo0ZnF6dzYrVjM1dC92K2RYNFZlOStUN1o4M2ZNZS9KcFBld0s3OGwxUGV0YlRuKy9aNSsvNVRCNHhoUjFlL2c1aGhuaStWdU1iV3BqUmZVcitlcjd3eGhaWHJPemJEUHRpNjFJTWZ6M0xjKzdienYzbVU3bnpldmhvZUxpWVcvM2YvcnIrZDkvOG4veTZ2bSs2Uk05ZC8xb3JuaXNvMXp5R08rZWZmSW9OZWI0Lys1YlBBdi9qMTUvdHYvOG1QNGdxTzVqUE1sZGVzTi9qZDRtUm4zL0tWano3SFBsYzV1K2ZDajNYdS81Y2dDWGkzcG1IZVNJN2NKY241cWM4OXh2Qyt6eXNZMldET2s4ZVlncURIWGh5RG91SFJGNWlDZGNiYXZEZS9NejduTStHSEVyd3k5Z21OaUxIZ201VmRxaXpXU2xsNU9kTkZSbnFPZWFVY3k3NXpmWEtMZmNTU3lxNWxQSVdqVngvNDV2ZS9KYjNmZXZiM2w1alRUWFhVdDlhYTZ1OWhSYXhnYm1WOXJiYVd1czlYSjBiZGE3VitYem5LeU9NT05MSW80eDMxTkZHbjRqUFREUFBNdDlaWjV0OWhSVVhabUtWOWE2NjJ1cjd1VGFXWXFlZGQ5bnZycnZ0L2lGclgvelNsNy95dlYvOTJ0Zi8yclUvdS9vZnYvNEh1L2I4MmJWd2RzclB2WC90R2wrOTN2Y2ZsM2cwSjlrOVk4ZENldGp4MXgxQW9JTjdkdGNucGVET3VXZDNDeWhGRGp4a2RtK3U5YmhqYkdIYVQ4amY4OWZlL1hQbi9xLzI3Y3IxLzJyZnd2OXA1eTYzN3Y4Zk8zZXhkZis1Yi8vRnJpMzkzRHc3OXROQzEvU09hQitmNmFGZS9MNXYvdmpyYng2cDdwN0w2SG4xa1dkZXFhTWk5NzdmRjRmeWNObVpZbjkzdjFOWU82VXZocFRlSzliUWE4Wk81YStOc2Q1N2JOYzhzRFp2K3VwVDhGclBkcW5penBVMXJuMitiWS82MUw3ak84dkhoM2R1VjRtNHlCRXdaWVZscjJGekU0eGYvN2hvU3l6QnlPL3FmYzMwM2pQdzFud1hieHZZMGR4YS9ZbytPbzc3WXNPL09ubVorTDVmcVd6RDJobWZIc1lJdmV5TVJ3UUlQTHhsbmFPdHROTllMZk9jdVlYTXBuN0lFd0pVcjRFUlhwWG5DcW4xUFYvZXVlYjFmbThyOWV1MWpQWStYMEVvSXErNVcxOGRPOU16Ky9IdVozQ2hOMjA4d1hzOTdCNHVvdll2NTQ4djFQeWw4ZDFuVC9IZ2RjZTYyVS8ycnFlRW9JNVVTd2hydHZmRncxUldaQjNkdWNvN25sMTR6VmxIaWp6TllBay8xQUlkd0g0OXBha01uMUw1N2Z6bCtaWEpvOFZudDd6MnF1K2VIMXRjVUpGNWYzM3R3ZDUrTWRZNzl6QlN1dG1kOTVsMXphVVhXdC9kZWNiOERsNXZmVWhQV09OYisvbG1yeXU5Kzd0NGlxeDQ3UGNwNzNkdmZNSEx6OHhSMm14WXlQZDk0c2F2enBCdjlndWREM2ZKZGFQckc2ZjI3SW5FUFN0Y0kwMWVrajhpdCtvKzloZm5qWmNiM3JPbFhka3lkaTZ1Kzlzam9Wbzk4WWc3c0lNWWx6SkNyU0d4L1JPUmFDbjB2VldudVQ3V2xsdVArYjBvM1U0RnVZajM3clBpZFhkZ0M5QzV3YzY5TGgxWHcvWWdGL25DUG9Ua3hTcHFGbmZ4L2R0dXdiL1hOOC8vZjNwaHM1Nm5aVFM3M1RFMmZYZ1liM2kvMkhkZUk2MXJMRjRtM1BWTHJHRmlEenNPS2JjUmUvdFFjT0J1VzJOZ21DYmJ3Zjh3Vm14VGIvRWJvV0Nwa0tuVTN0d3ZmTk5DTXdjN0hWSkJxZ2VHQjdBQXNwdklGelp1YllUanJldkxBMlVaZS9LWU55L2xEU0pyMitabXQ2K05UajF6RlV4YlExYjd5bHZkZjdGSTkrQlJFS0cxUUl4ejhyRTNIRDBzV0krZXhoeiticXYwOWFDMDJpYmM1NDVlTGN6R005MnJwcktScjRhdGlieDFmN25MZzB6c2pxbGFxN1FXTUZBcGxkcnZ2TGdPeUw5aXhQWWNEeVlaUk5YQlZ4R2JJaTVlNmR0UC9saFdWZ3ZKU2JraU1hM3hrYlhxTE9sN0VOUVhGVTF4UWlFKzNqUnJUQkhWK21Jd3NBWCtMOFRCNXM0K1o4UWZvTHgzVGhnbDlCZ2wzOXc5THBUM2V3RjZvUTlzZHJ2ZFl2UVQrTVhiOCsrWSsxMnd6YkgzdDk1alloZmkzZG8zSzR2Q1U5MjVZVTE0aFRsQi9yRXNsdnZDek1YTmpzeGNucFI3VFJqcThLUTNJSU1kTHFDSHV3dUxneWZJZzQwYWhlY2N1d0ZXeHV4bGxZU0hBRVRVbVBKNGNrVFVKMnBYc084VDNMcmJmTit1TUxIM3JPUERzaURzdlBsdUdBM1cwVjNFcDdFay9VWXZMcGE1cE1ETEQyMUw0c1ZRSUM1MmYvNTRYaXhmd2dFTlJHVy8yTitNU3FMMGZLNDJibzZ3aDgwRjl0VzRZNHQ1cnJjTzFCem5zSEJ5dURLRUR1L1YwZmZZNTUxS0tNL0h2MnY1VUY5TU9UOHhQOXhGM0R2anhhRlpHNXVYRTUvQUFLWStzRTY4YnVVdlRENWVBdUY4ZTZxajNCT0ZCbVVETmpGeGVYd0ZiVVlpTXo3andXV3ZoUnRwWGg5bm05N2FlbVpWMFFoV0Z2SEg2bUtHZmVmQk15TmhyNUx4ZklNbmEvVjQzdlcxV2E5SEN5S3c1eG5SRnN4NUx3RkJ3STY2L0E4K0d5ZVJ0SWpOVmVUYkJiRFBXN0RTN0ZoVDBsNFpwRnVNVVFOS1lIa2p0cFJYeTFoUlZpYS82RCtDV1ZyR2tDTSsrR0YwclFxbnY3bGJTWURSa2p2T1pWelNndzlHOElZUlpzVUF5VlhDOXVJZG1VSmxrSjVVUGtES2hpdjBnWWdqSDBYUDlXSE1jWWhMYTMwOXFPVVJwWFhqejlhSDJyZHYrWUg3UXhLaEVBVVFrR0NtTENieXhZOGhBN21pTkI4cnpSODM5dll0MTFzbkYwY0pWd2U4N2JleUl3cmRNeFl1ODFiZXNONVR3SUF2akJxMnIyYzgyQXg0eHc5UitmYis4Q0s4SytnQTRJSVJ3b2hqOFlCbGoyNmQ3V3Y3Z3gwTkVNOUNLRUZCS0M2QzhHMFdQN0o2SDc0Qng5QVJodXZHQ29SM0RGejBERHpqM1dOUkZWa3NTQUtQMnBDRDJZb2NXQlB6WWNBQk9Ed1M5OGFWWWtqdzdSSGp2M2paamRGSndDVllJVGRhZU8xajlNZUdaUDM5SnhyS3picC83NUdma0F1N2dZWlhEUGVGN2VVaURTZ3hwRVRsUlZ0QkZHOTlYTlZieGVkR1BDdTdFU2FlVDBjTGF2eGFqZ3BPeGcxaTBGOEFPeVlVQlh1ZlVQQUtlQSswbGdzQXk5Qlp4SGgvZ3hYTEdLRGVubmV5K3FrOEQ1Z25nVGg1SWxaUWczYTlFL1BMT3BaUFUrbEs3YWNDSDBabDYzc3JlYlQwRnFBVzBvaWZIamp5K1FEWXBqR0NxcmlpM1R3WFFHdlA5dUVBRmV3RjZzR2xjR0hVRkNlUGlSTTVndDJ3VDAvSEZVajlVRHBzVlB0dXR2RURmTU9Obm5JMW5BWXFnM0haQmJERjVvQWZzVnFaalgzQU9NMTM1MllWZzg0LzhYMlFYY3dsL2pHT3dpYmphUkhBZENIdFNGbGNRVU1PbW4vVGdpRUNWc1E0b1VBcWNvQktsSXhqdUpWdGRBaVpQOGdETkFFdUwySGdsYTVibUlOb0taTVF4M0dXSGhkWGdhWW85WU92QmdLK0dHTitQSlNXbG55UzF3c1pnY1gvSWNaM25lbWFGVE8xVmU4bXdjZER4L3VOMEZYV1RjU1IwVXpFSFMvT1ZvTlhjcGh6QXdyeGlZSEwzQ3c3TnFpVks3SUhXTGdHL0FNN0k3MW9PU3Yxdks3eWc1NkhoZy9EK0FZd05nUVB1UHNoZWVLdG1yazVxcFVnVFB2cTZCUXdJUmVjV0FJeklBZ29QcThGT1lZYUpZZ0hkMEh5SjJDVkhaL0lGWmoxdzNOdnZBSGZPVngrWFZpbXg4akpDeVg1eDllUHZ5NTFQVEtHOWZzQUZ1VHZINW5IcHYzdEo2Ly85ei82cno5NW5SL2RvK1M3WWd4N2F0aWVDSnFjWTJKT1lTbUk2SVBSaFphQzlMRGZDR25MRUlDWEhTcWlrZC9iWHZOSUs5Ymh4ZTIvOCtBQWRMVCtZeVYrMzRCRitDMlY5MEFaVE5ETnphS2F6eTNuVGhjQ09QRnlvTCtBSG1GdFhpQXI2b082SHVUSFBrSms4Z3NkMkYySGt6SHU3S0M0SFVCWC9mUERNMStMN1VHNzN4VUVkZy9NQU1VT01zOGN2VFdrWmVEbWNXOTR1dyt2SkU2TGdNUTNkamowRFJBZlJqb3VjSERCR1dPQnNac05nY0dBaHhlNENLWm1LYmduZG0wQWNnR2JQR3BNY1dnVEVxaDFwTHVCYWhOeTNPTjFieTRGcWNHUGJSWm5vQzJzQk9hUGp3VEpJSzQrUkZ3WVZvbEhHYkFqckxEUlQ0aGpiM3VQdmRhbzMyWG9DdUFxb0ZMUDBTelVEWjRjV0JBWU5adGJFbWF2cy8wTkdaMDRwcG1mTU1TbjdEUFVHMk4wZi9tcWNHdUFKZENndmtwSmlobjNCUHY0S3A0NUQ1eCtydHh6ZGhGWVNWS01oQ0dhK203czBvSTJMNjU5VFRRU1NsamZJVHBpalhDV2NUenBHOUQvUGxnMWVQNkh6TUNTeDFmeGRqc0hIQlppMVdTUkQyNityUEZnMkxqekIrd0FqZUJESUFqdm01OThLQVIrQWxTR0NQWENZdDBpL1RkTTlMNjlBVjVRUlNKdzZ3UmtYeGVxSGZSVUJidUJ0SDFmKzRQSEFPOXhZNWphRVZoZ0lkWXN3bmcvWE5QODhEdm9pQnl4QXRUWnp5dGovUnF3SDZ6K3BNQnQ1ZUxuaDFHS0cvekE0K1hJM21ON2VDM2VuMzFubFo4TUZvcEE4WTRGRGUwRnNiRWZRRTJlQTFvQjJVS3FOb1JpcHdSNVlVZUN6QXVVOG9DY01KNll4QWc5d3RtaHVDelhEZVNTb2x6RlhjZkRBWFIxbkJtbUpibzNwaWd3TGVnZnNBR1V6dTQwT0lBc21wL2xIYll1YWNKOU1XUGh1WDc4ck9MdG9KYTd2MndUb3BCNWQ1VDFabFZ1VER1MjFUQUdEQjZ6Q1ppTE9NQ2huMDI4WGtxbzdydzZJQnRFaGs0VWJTK09DSGpUV1V6OENZNUJ6b1RvWWVqaE14MUVDQk9GVGtpMjJNNEhhQVhrZkRSc0NUM283eDRzUFJzeThLcUdIOUNXRFBERGMyRW5CTU0za09jYjJBQnNUeEFuZWowZUwyRE1XYjN5WG1VamU5c2NBekNzMyt4U3llOUJoMi9HdjdGRU9OWlZXUkxqYnM4TFRPa2JHN0x3ZExPQWpockVtblcvUU5aWWlpQlpLdm5CaVJvMUFhYkEyTytXSDNYemhNTEV2RGpZd3JPM0ZjTXFBRng0Q2VqdlpRM3ZjcTNxSG1TbGNIVE1Sb1hpSkw0SUJJMlNZdkFOc0czaGpZYVNBdHlJaWdXaTlPb0gxUW53ejQyS0hDWVBtTUpVOFNCcnZTQjZsQi9oNEw2YlZjS0pZYzRDQ2kwWkc1V05CY0hOVzdXOTN3RWhoRzdzQzRJTDlrSFV3ZGY1L011ZGcrT3pZcENxZ0kxR1lQa1NXTmVRNHR3dk9CZWJuc0V1aGlSUVhBUzhYNENZZ0YvQUM1YU5QT0NLdFZ0VG1NRHl1ZXlvVGw4R0NtS29idzRxY3BlMnNtNExFUXlWRndQNnNUZ1lEVVFNdFVSY3VUZXlFUnFNSE13R2FoQ2xWR3c4SGtxdml6MWx6WkNNelRibWdUSFJoT1BicjVNNkFhQXZzUld3Qm16NUhTZ2RjQ0RmMjNIdXJDRzYvQUVPY0pPZjRmWVhIS2tDQVg0MmN1Sy9UVUpwRU1ieFo0TmJJZnBZZm9CV1FMNXF5TytFTFhXOERsNElLNDJkbCtrQkdQazhKQUtXaVZLOXo1VmcrVGphdHU3ZHE2ckFOcUlEckdMSUlqak1icm1CS3dOZXQ5bkhKUDJHb2Y3alNmN3hJTmVmSjBFUCtyR0tCbjBFMVh5SzNVRkl2N3hPZkplMWhnMFhTRFBZQzhWaWRlSmROSjYzRHYzS01GZE1yczVBRXQxUWJYNmcxSUpBWTdaaGM0akFnNmJmZmNsWnZ2TG4xbmp4OVAzejl0ZmY3eDgvd0sxb0F5TEtBcDBGN1N2ajBnRzZCbG1rUWMzb21ORS9CYlBINTJ1WXROd3ZURnFTaWhiSWZ4TkFnOEZiZERGbHNDOE1EUG4rak9nbTZhQ3hJSmdqdHBVdE5jUjlGbjIwY0NVOFVPQ3hmRGZNTnFBVi93YWlEcytJUU9JQWoxUm1jYWI1T1NMellzV2hWTU9jNE4vQ0dwZHhqZFlibmdIZmNvUmdISkFsc1AwRHQvNXRmLzdyN2JuKzJoOHQvd0NCNEN6eWcvK0YzK0JaRjZRSEd3YnN5TFZnT2xJNFVjVWJwTERuMFU4ajZTakx0YkNRYStiS0MwekRCZ0hsWWRNYjJzYzJicnhVbEZzY29MNm1pQXQrTm5CNzZBQVB4eGFEVEZoWUxPUytIeUQ5MHpvdktNM0xFM3M0MEV5TWJOREh3MGw1NmdlSzYxN2lZOS96cW8veDhyMzdUMW11dTVRNzdxckZFeGd2dlB0RUd5RzFrcTRURTRPWHlScll1eE9kVG51QU96NXN6RjVWNW84Q2xIcE5IQ0hLWFRMd3B3Q1RFSVEzd25OQnFCQVVLSGRmVDNCdEIxNk42L085VlFXdWZDTHlUT3dydXJrMEk0anlQV0RBS0JSbW1MWHBFU0tNbTB3UlVJSGx1Q1Zhc21EZUh5dUUxUVVsU1lDZVZlSEtHM2YwakF1RU53d2FHTjFIWmhkcUpOVjh4MmQ4R0JRTWJPblF3aGhpVWRrTldBL2o4SzlCbEtYeGI2dUVkU0hOTUdtRG5Ed2prZzFkZ0thT2IyWWM3YU5aNkJXeWdLeGxLTXFlMHFHeXNaUEdwa1BTbmlKVkkxMUd6bHBubFg1N1d4dE9RQWdIcW1oUWQ3T3JyQ0Uvelpla3B4aGhRK25pdXNERmNaVGdLL2pLVlJzVzJEVDMvYXBMb3J4dkYwWFlUQVJNc3FPQ09JcVYyc2J3c3pOQTA2NVMzRkJsdkRyUGlud1lRS2g0aW5yamJpclVxT25raGlRS1JJKzNpUk1VQTdQN01zdUNnWTN6Qjd3Z2VSR29rbVlBOEVNbzZoVkVRaER1bGNGUCsyQTE0T3YzYmlRYVVpd0kzem5pOHlGbkgxcXc4Ym52QjVUaEpoK1dISk5UOEpoVHhKYkJIK3JzUE9xNGpTMFhWZzI4T1NlMGMrQWpqQUZEUW5HdllHTjR4c2RGY2VHWXpGWnJpZERRQzE3OExwZGQwYTA0RGZnUnEyaUFrNFZQT0dXZUZ3K3dZaDlyNTJXQXc0MVBPck9HRUppb3h0NWY0Snh0M0NFMGJyaGtMM2xVMEUweUFZQVRPK0lYUG53c1duaVhiNlBhS1R6b2Z0WG56VGRXZ05LYVY5MjRiMURZbDJ0Q3NjRE1DTzhOOFgxZ05pdHh1N3FCT3hEdS9EN2dINU1uY0RVdzJNMXRBQXREM1dueE1qUTBaY2NRNm9DdHdEd2x0UmlTZ0dEK0kzUmZzVTFQaHRpKzBFaDBialhFUndlUVZvc2dqU2RmQVMxeVlUZGVlRWltOTZ0MTI1aUNEREsrTzdnVWZ3cnZpMGEwUUxJYkMzaFhjekdGSmZwKzBQN2tSWkJnby9PUEllMG5KYUF6QXNVK0JoMHkwZzNPM2RLQ1J6ZGw0bjdNOVFCSmNWTy9uQkpMbks4aEdETGtnUkZwaUJ2YWJqRHhSSStCSlZKWUVGWXZFcGtRVVNIZUQ1SEZ0Y016dExwUVg2U3FYeGlVa1JBRVZnRi9OdlBocjF0bkFMaUlRcldGSEdKM3NSY0w4OGJydzlJU3VBaWZlWnM0ZUJhVWFGKzZTendIMndTSGhvYTJwMFlBUENKeWcwL3lFWGJJTDZ6dzQ0RmZTQ0FmUUdLNWIwYnVRZjVnUlJ6WkJYcGNieXFEYjQwSi94NzhSalc1aEtIbkFxb0VSeGovdUxHendNY25MK0g0L1Z2aXB4cWdXeXc0K0tpYXQ5ZWNpWE1OdjJoMHFrYkpid0J4bnR1ZzI5MTF5WWFsMEg1WTJtNXhQWGxHSlFIbHVNU01ZS0tOMFVSV09oQnFwaStFYm5YTjFwMXJ0K2FTR2d5SkFQaVVaY05oY1MrTWNZakJqRW9HUkZTd1pQOFA0UlBuLzIzZE1BaDhNR09ySS9BaG9vV1ovOTdYZVBhZEowK0s4VzhtcGRDeEpkbXl4Q2ViSkdXZkRURmhGZmNHNjBNUEJDYi9manNFOHNjRDQ2VTR4bi9lL2NGVFlDbnJNSTJrU0p0clN5Y3FBaitCZE1TVGhHTFhhOCt4Ui9OK3JZZnhYcCtGTGJWalAxSFIyOWcxUk9NRi9KZit6OXVkdTAyREFGdDRPdXVCRUR3UTNuUGh1d0JQRjhKZkUzZ2Y0SVE1eDhzVUF3SjREM3dxZnROMFg2eVloMSt1RDdNWmtzOHdOL0tCUWdCVnh0RFdYUHpiVDZZdllpaTNBZnp2WkFsOTE3TWdmeTBIK0pnSGlUZHdQT0NDc1cyNDFsWngxWERrKzJLSHh6M2h1cmp6cmFpQk5iV3ZrbzErdGg0OGhkbHIvNGViWFArNFN6NFNBVWptM1lFR2FMVUxEOFpENFRDWXVMc09UOG5uOFYvQS9NdDJBQTdteWZMaGZDN2diUnpZNTR4dmVqNFVHb3ZzbXM2VGpmM1hCL2pidHYvTGU4WWFRUDRzRFJ3REl3Rml3b1ZrVGZHSjZXQXlHOXVDRFVIWlFaZEdrYnFrNWUrN2gvWEMrdlN4TDBnNldvbFV5dEFOT09LWEkyWVZNWmJzakNkQzVORkY3REc4NTMyQnYrQTVKS2RYNUMvcXZrenhLWkQ0YnpZQUlpU016bFdhTnF1R3pqaUNGQkZZQnJvcVg5RUdoWm54UkRqdzl5OVFXaWFROFNyQ3VmRUhtcU9WRTRxTFA4VWxRNUFiMmdRVktDK1diVXYvYnBPRnoxR0NabUprUDloUmRIYysxNUJjR01xQnd0enhYdWptTU04SzFvVE5taHpCaEpaM2M5Rzh6d2FBUlQ0enRaQWhQMzFqUExBb2x6NXZtT21ZK0lOOUloRGNqMlhHeDZmNjRXNHhsU2JKd0NhTlp3UTVyY0x5c3VLc25RVmxHYVRSOTJYQWNuMG1ia3J2WEFWbmhJaU1lbWRaRlR1QzZaOW8wSy9LWmZMcTIxZ1lQamF6UWRVOHZrWVN1cjRUeGlQd1hpYlJYK09kNFBScFRka1RQak5VOG9yZXNaWGJJQnY4MzJqWlNRVWE2Q3JyYWV3UHFMWUI4aDgwZnhnOWovMEJFTEd6Y24xY1NHZGpKcVprakNQU1ZVSWhpREFTemNydllPWTRocThIdkVnNzlZbHd1ME1sUHJqbGhMc1ZUR1FHcFVXcjZmZ1paQzByS1ZQSlI2WndhOXorUzVnU3J2Mll6bEE0VFRWSGxwMVZnU3hiaHZDTGFZSDd1NVVqM0RzTmdCNTcyTER5TDh4UlB3aGdCdFVDTFo1OVJlQWxaQ0dEeE9SNG90MjNJWGxKWklodkxTdkRxMXFZNlFTbjJFeUFDK3lETlRTK1h2UEo1RDJtNlJ0MExCWFRHY2FvOFMxY1RFdHV2WU4wVlN5cytjUEhyRU9WWUlOZ2p2UWtCSjM3NDIyeGtkZnptSFNva3gzQVdJeGpXOFBQKzhLanVPTWI0SU1MaElDSUFIQlJhTVRydFdnbWZnQXpBQW52SFBjRlJ2QmJxSk5xdytzaGpMTjNKQjhvQmwrdGVMWnZRZUdXZ1k3OEdMSlMvLys2NDdtZnlVejkweERpb3lUb2RjVHg0TEFnL2pIaGJzVmhpVjJER0NCSCtIU1RnUG5GVTZNQmo5OFB4a3UrZmpYOE5ONW5BblhhKzVqNkJDV0M4WEEyUXFCUWpBTHhMbENXdUZHa2x2QlhKOWxkQVErZ3laR0tNT3JpVVlCd0E0dUREdDVZVThnQ05HcURBU3JZTytYNFlMYVEvMmNOOXEwY0hnYktRWW5CNFA2NUVKaUpQZnBiamtIY0QwQkt0NG5vWDhidnh4VWp5cHpMNFlxWUdmalJCL1FCNUpna1MrOER3Uy9YMXdjWUtpMWVDU2tDSWdMU3A3YnpPWWtIeGRtNm9CdWptdzB5Z3preGozbGpKdzJyOFB3WStyb25oaTNrb1o1dU1XMHlWN3RNdTNmTE9VQ0NTR1FVdExlbDdSUm5Md1AzM1NEaFNVekdYOHIrMHZGSGpPVUh1TTNscERSK2JQN0J1ZTRIQk1iM3Y2YVIrcjJNMG94d3ZMb0JNVFJlQS9xTzBsYVVITitiSVNuV3ZTQ2tCaTd4aVR4L1J5eXl0VXlnRi9CQnJnQ2h1azRCTlVDTHI0RGg0YTVKTk5KTWVrUlVKUFZYVHplTnpnRmFVNDl2d2lJaWdZWWhlU3VVdmNSa3JBNXZQWUJJMGJEY1l4WVJRbnhGODVQc1RyQktSY3FLalZZTnhoaStoN1JCcnhLTHNWV2NTTVhaWW1DeExqaTdjcTlmREtDVUN3c0NyVGdMRmtvK1A0UVJnT2dCL2pDL3JBK0FBNXVCYU93RjhBY0NBcUVtR2phd0pwZ1M3aHRHWFNCL2ZLSkpBTmxOUlJSV3g2RVpOK0RkYmpsQ040akJicUhYVm9weHp3UytFbTZNdjczNEJVK0hHRm1PdHdZdzRzRk9mTUhhRlRnak1tNGxqd2dKbSszV205RUFxeVFnR080WXVDaGVoSzNkMjByZnVBQUZ0UjVCNFBkU0g3SDRIK2dQQUc3cXE4UGxBK3hyak00aWxjejZXRHRpNlZHMFhNRDgyZ2N1aEd3K3hnQS85dVhCcVBQS3JHUnNRMFdDa3FOZ3dMSnlGcTJlOVFQUW16cWYzSVJyWVJMcTFhQVBrSU1ialc4dzluTFNveDlXRVhPSDgrTDN4cDRNakg5OVRmbnZDbWZsZmdLYzIwVFc4YjRqWHRFUTFYbVg4UDZXTUJzVndIWkIzVzVqN29BdGtDTW9CRVNVZ2hsQlNCR2NXNS95R3ZaK2tKNThJWmEzRjBMZVlEd3NVTG9iajlqUjduYkNFam1mdEJhMElxQjdWaXhpa3RrTHNhakpVdlBGT05lejJKWEw1SGREaTRlbEFZY1ZRU0JBRWF3S3lHNXVFSXFBUWJMQVhtQUxjQjVJc01WU1pSbzltWmVSUVpacytkN28xUnJzY0RReXRBeWU2VG0ybVFjNG82Vi9vby83TTBzeEFhdDgwWW9qci9kZE1JV2VyZUVTTW9kYWNJbzMxczJ5aHdTQTJQR1lpUnRuQXhQY2x2NEJDbnZkRFU4Q1dNMElHRVJ0dGdzTGJFUkdlSmg3TlErRlBxTG5HTFo2U20wQXl0V0VOSStYWXNaNkEvQkFoVkNqOVZoU2NHUHVNQWlBQ0o4SDZHRFdMWnJiUndicVFoYkJUK1UrSmRrWnNqMXcyaGJJWTdBTndBRDhkVVliRnkzZ3llT2FXSWVOQi84c21RSlUxMnJBUWIyTTNDSVhnekhmSVJHc3RlbDYxamRYby9pbXdaRHFWSkc0TmkremY1dDdmNERLOXZaaTZHcytJRHVYR0E2QUlOekJNT1g5amZHcjNMOTNISllWQ3NuTnY3SnFMMDhVNzdSUHJTRWdoMGV0cHJjTTJRd2xQT0NkTUtVR2kzQWNpYlY5bXFVTXhnaTNWZWdBc1g1cVF5K3NNcFRLekUweUNtbHBPbERBU2dZeGlMY0hZbVJFeitvQjYzYkFRUjBFanMxN0UzSTF1blVYRDd0V1VUME1NRGZNMnpJelh1M1JqbjI4UGpDaFdTZG9jQTJ2MExSZFlMM0JUc09WbGNOVmVYYkFON3EydDZVVkpvWUFZNy9rUE1TZWEvbyswTGREQTVCa05CYy9oSERMQkxKNTcySlFOb1lUdVYyc2tmZ0llUVludkJWUVBqSkVKQmpEZkRBZ3dMTStoNldURmVqRzZrSUYrNHVBRnhZWkV6YjdBeUR1YjduMkN4UkZiZ0EyWnJSYTNOTTBtcFV2Z0IzaklkKzB3SEVhY0R2NTBSUGJUMzU1TEdReEh3VDJvR3RUSjQxTzdveHQ0WGRTcmpWOGVLWUVlOENXM01naVd4V01WdFlwU2VhS0FsM1E2N1FjTmdmcklRM001WEkva0JaV2hFdmkrcE5PYW9mT3ZyQVh0NFdsNzdES3cyenVsRHVlY0hzM2pKaGVFT0ZsTmVTZnJFUFYxa2JyUmZqaUwxZUwwVFNDekplZzVjbXlhYXRXMUFSNWk2V2UrME1KY0R3Zy93Y0VCUy9PMll2MXRuR01PTS8zUmErbjRSS1RaRHdRV0FBRDJ3empyMmd4Z0xWalNpVk1qQVc4MHZydkh2YmZuMVZUYlREelZ5TVJiaFpDN3d3UVp6L0RaWmhMYVR4MW1LZzlHS0Nua0tCKzBEUTBLV0NacGd5bDUxTyswR1JCVmpKTlhBZG1Ca0lGQTQvcENtd0NnQWhROWVpcXpCQWExZWFudnYvcXFmNDgvbC9KalQ4dk1QSmwwZnc2M3dJcEhCdUZtQlJjNllrQ2hjT3RjenN4M21DVUVvcWJtb0YxSE9EM0V6TGp3Zmw2MVhkMFBJckhrVEVBeWR4OFNzZ0tsSHQxMDEyc2dyeTk3TU1OMTFxditCV29CL01HQjdNb3NLT3EyWVA4VDR2cUJDalZOSElDL21KdThzbGdKK1N2WWVzQVFCYXZKUFBxa05NTUdKbFkrRzRjQjNka08wRDY2VWI0ZmtwUWZsVnN1azZBblJVMXI3c2FUelhiOGF6YjZrRTRMRitZRFNkWjhnVUJZTjlnUmV3WXptSGpBbmx6WEhFQ3lHUFo1MHdnbmhNUldzYWVIMnM1Z1IxQVZaYm13Nyt4YXZsYjEwa1BRRnh1cUhUYkp0T01oVUFzc0grUHhaTGhHMko4bnE3OEl4bjExNk1kMGpST1U4bUZoRXR1VDJ6OXMwSmxHUWxvL3JpUDBIbzB2NkkxSHZoTXN6bTV6aUFWVXZqNXMwNDg0dXFYRnVqR3dUYXd1dVdrMVlMbFZYaE5pQXQyQmM2RUh3WlNscHdOQ2NrT0FpNGlXL0J6M2hIT0JBYStEQTdNZitUSlhPWHh5NkQ5YzVYLzgyVitVT2JGb1lsc29rYjVRWTRPMjhERUE2QlNNTXp5enZITFZvbS9oQ213aHBGWnhWQnV1OFFDNjgxYW5DUkNBd0ZqUHRFMXl4NEVJVkNiKzFldkx1ZEZzd0xNQmljZnNSd3dDQUFsUUJQNkF2Y01tbGFXaDFkRDlMRmFzb01yS1hRNG5BZEVpSWdpaWpDQS9QNWFmVjVERWMxQThuZGFackNTMnR3aGZZYnlCMUNwVFB3R0YxNUdPSU5PMDRRRmFONW1rLy9wcW8wT3AvMUxPTlAzV3pZWWJJNTJKeVRRL1lpamJMTmtKcGZTdEpRQlMyTWR2dVd5ZVJvZEttMWo4VnpzbUc1Z1dNTkNza0R1UFdhUzJ4c1BBMzBYaUdyRy9YSVIvQU9Zb2dQTit1RVcxb1ZEN0VMZ0JhOW45T2VuWWN0V2pHS2NnL1VWclUwNDlyT2EvbnZITzFjdk8wVVArRGFjTDVRWHNIbi85SE9mcEhnL0pGTmptdUl2NEcySjJIRzEvVFV6S1RWM0RmQ01acFBZNWJidUNlZTAxSHh1Q0NPNkZxcmRWY2JPY1VDMkpKZzNlMW13WllrTW9CMUVqZ3V3akJta2lnQmFZR1kwNXpIcmZVUlR2M0VwT1hIVzMxNTgzQlVlUE8yQ1lUMStYN1BraEZkQWhJOFh4VWppUW5oM05nTHppRU8yL21GZUZyN3hxaFhrcjc0OXVNME9vUVF2c1Y3TE5FblpBOXFDRmJFYWN6MW1IaXhtZk15K1ZlUHQ3T29ET1k0NjBQRWZxd01xdjMreWhHRndFYlg4K1FDVytBdmF3YWp2MzRMWk9IQk4yelVSdTN0TGFSQXZaQmJNaEttd3pjc2FJOGpEampnUkMxOTdmV2Y4UUkvc0t5eENYdnZsWW16NytsanhhaTJMelNSWlBwdngwYmZ0TGkvT0FlLzE5dnNFVlgydUIzS04yMnRZbTEydEFVSEYwVHN3TUo2Mnd3M1JSVjU4V2M5a2p1WlRwbUlwa0M0QlNZVGdQbmlhaWRtTDJDalFLMWJpQkdhbXhkNUFMeE4xMml6OGVRbWdKTU5LcGxUdmFtMEFVTHNBWTRWWXRoeFptd0pJKzdSKzRLenZUNUxsdDdzWEx0UTBtWjRudlBCUGxobWJ6MlpJK0FNcktWNkRackhoRnYxSTBvSEttUFFuVnd0ajd0ZmkvejJ1ekRmYk5vQWM1ZytUdlVheE9raFpKQUFUQ0xZbHhYeHlXZmlXK2t6SXJFVlFBZnJiakI1YW9IOHRnQVVnSVNCZDFlUjlZWGRuTFR3RkdQUzI1OHNWV0pZSmdqS0xKWW80WHcwVlZoWEEvaHBWZzNkY3I5MFhjZ0owcWhpUmg4RStXaXBUTGpPQ1NOZW9keHNOaWRnYlc4bHF2OFppbzQwVnBXTlN4b1BzWHRrNkJIemQrMkJ5Z2xIQitTdkFRYmFCRzQvMTNValQ5QVhaZDVNSXNCbXJkTmtIYkhoa2I4Q2J6OVhNVkcxb3h5bTNoc3MrVm1qRENrQjdvSE13R3JUaWZubkJ0NTMvaSt3OHdJZkM0NWI3eTgrbzJKUUpZcHQyUFVCcWpvdkVmaUVxN0NuSU52Q0R2QWI4aTMxL0Nnd01lbXY1MHdPaGd5c0F2bkpHMEFPWUxkNlhqMnpqajdsTWtOakhtMWRiUWxsTGtWMHhEbjRiZGhrbm1vK2t0bWJlRklsNVBvc1dSQzZQRHZKVEVjNDJjbWZ3RDQ3TnFzTXRSOVNzeFpQWHQwVUxGTmpFZmJOYVVNSUw1OU1qOHV3S283dXlyWFFEeTEveUNDZ1M1aXpmS1ExZkIwYkFRMmJjOTJNczB0b1JNMVJ2ejZlMUNkTTVnRkxSeXFyN21paE5BcXdIaVNEMk5PT2EwaTgzYW1yZjZrbzA1OWxOeW1SZWZwWmZkVmNDYzMwTFd3a2wrdVVnc1VVL2ExT3M5VWtuUFduOVpZVDkzeWM2Rk4vL3ZOamY3bm51ZUV3dHlCWklhY0V2bG9WZGVMSFJvVC80K1JmOEJhS0d0UmdOQk12SUNic0I5OWZvaUltUmIwNlVOVi90Ly9LTy83d2grQVlUdml4RHJTYTg3YzVGYWEzd1NSSFBnREIydUdjSGZleW84N3J4QXljYTlWb2hnYW5VdW9TVFBaQWduU0lDRVlOZUNRWlpRSGw5TmE2UC83VDdnMGMyM1JsaHNSRGZvVnRLRWR4eGVqOHdVYk5ZSklXaFJ5Y0JlQmxrYlJFdHZoOVl4N1hjL0lCMVEyM1JWOVFPbWRQNk50OEQwcCtSLzJVN0ZwK0hwRTE0NUVKYjhaSmNHOFp4d1NXVEtkaGZLOVFHWHFIcEZ2MW1TR0RoU3NzTU1wU1l4MEJoaDJuYlVYRExCWE13Wmg0R2NRVVJ6ekJuY1dCTHNYQ25tVHAvMFVVOGNMYXdEM2lDOEQzUmN0YmJMUFJ0bjJOUGFMaWhTalFScWxXUTdGUWI3OXZTblpHemQxbHpjb3YzT2g5ZkZVS2F0dlY1Q1JObk1NeGtxc0VHNjlnQ1hzVU9UdnZQcnJzZ0hiYStueHdQL3k0ejdPM0RBV1hRUW4wcFc0YmMvT3FScFU1NGw5UFJDcjh3QXdlbnVOc1YwQXRydU5Lako3NFBUbjRWb2JFTUFVRXQ4ZjRiUkpPZko3MFdMNXJBd3loQUt1dmRyWm01YlhpNUxNTXg3V3I0OUhQYnJIdVozUzVsaUxpdG9XWWR6Ly9rODM3QlVoYWtJRFpBVmx0OCtFRXFMNzBremdHaWpWTkRIbitVWloyWUNzOVhzbDAxdHNXODJVNndiOThMNjQ3ODNnYVFSb21vVk5peEE5Z25iZ21pZ3hldnZCeUdOZHZMdGF6N2U1QzlPN1lLbEY2R1RTZlMxSzF1Wkd0aE11aW1WWE8zelpHWHdBQXRPRzA0M1M0NFdJaTE0QWFBeStoSlRtaWpkYlVOVkZ6SGZvN0dTeGE4R2dhQ1MvRXlrSnBxWVVlMFR0Z1FOV3NIZU9rZDN3cUJ3NDNWOXJKSkEzRTBoSG9IYlBtOHhRc1p0cnB2T1N6dmsyYTZVS014dWpLQVkwRWlZSkJXQmtQanpLMmNlcEtWTEtCQjhLMXJRTXBDTWRVL2JCL2IvdUJudzlZRnYzaGF0Sm5Gc29rQXhjM0JlUmYzcjlidVJuZnRkc2FpUG5iZEJRdFJjbzg4S0x4MlFwTXR0T0VScmxvd1hKYUw1ZklyNGx0VzRDZjRLeXNRQkZiVHd2VngrbTROUDBBZlpoSjNSQi9KZm9udEY2NXBFQ3lDUEFNN3lRNmR2SVVKSWR1T3JkaFd1RzhiWG80K2RvakhpWjBsYkRJMDZaVVRBQ2NhaUMzYkNZVWtBOWNBQ3ZNR2wvSmNHS2JIUWtUK0Z5SFpFMkNMYnpzWGh1R2hTSjkxcHNrY0J1UWVNUHE5eTQ2QnZaZUZFVHh3MDZIanZMQitFN2VRd3BrZmczSkdheFhTeEQ4Nm9jTW5xVkNjKzdITE9kMFhUSFBxUjVMSkt2WUhEeFAxMHlDR1lZSHpLb2FnNUErMVlRVWVwOGRnVEIzK1lldkdON1hJNzNkZnRqbEE2Y3FKTTBGVTY3QktwMzVyMWV3NjFjOE12c2g0L1lDQnFNbHNBQ0RsRVdBQXd1NDA4MVY5bTJ3N245NzBzL2UxL0JyWDVtNkdsUnFMZ0sycDVvd2UrTTNhVWxOSkZMU2ExWURlRyt3RytWdkdZNzdIM21BMGtLZDVnRlZmaXZZTVRzdUVPeUsxb3kzaEZRT2FkZmpXMmUzYkpCNm9kd1BKcm1KVlNtT0RiNlhSdmNCbnJiQ2JuWlh3M1c3VmtCR0s3TndJNjdRRm90RTFLOUFkSU9MSE5oVjgvelRpakUxOGJQSkh5SGwrOERPU1p2a2IzcVRaK1hCcXRZQkdwdy84Tlo3UDB4a0gyWGsvTDFoM1h3NmpFTk4rMDU3Sk5uUWt4WWc2R0JuUUFZNDNhMmZhK2IxMXhVRjJEWFlBVU5wNTNwTFY5M2RmMXRXZWR0MWhXNER4WTc0Tk9zTU5JSXdmYm5uV2hCV1BCZ1FRZUFQb0ZkWlJtcGp6VFNrT25TbFUxTmdzUDVBQTYxZ3RLOGJITkVsclZwZWwvekJoUm5kcjBoNThBTnBuV1hsLzkvWktYSGpZZUtvVnJ4V3RJUWkxc0JlZ1k2Zzdvb0FPZ1RkZmROT3VOaXo5YWNROWxCMVViVHZMQnpFQWgyQzVYeXZWNTc3YStCV1pEbXNQZGJ0bXhnUG10cUFaN1o4QmoxOVY4bXQxQ0FvZ285c0YycmJtYTZRNVAxNEkwYmp6MDRDY3ZHK3lwdmdCdFg4RkRXVDVnTDQxb0dHUHIvdVlxYnF0Uzc3TmVlZFdPZzdJZlBuMS9xcnhoNE5jOERsUEhJWURwb0hvejNRREtzSnF1dFJnak1lSW5WV3RwcFFOa3RoaW5ubjUrVnc0QlR1UldBdWNyQ0pxdEJOMStVNWhFbTRjQjJBUExONm0zS2dDcUw0cVU3Y0Y0U2lJVVVCem5sZTI2djdyanJWd3B0T3ZJanR1eWZnN3NYamdlREFHdUczaDY3Q2p1T1JpTlFPMFl1c1owMzc3aGpkY1dDS00xTVFzN1JhNEsvY0ZhQ0diZ3FLVEdMVFVZYkZJOVFiRmZraVY3UENKb0NORXIvRkpmTUtLRjVhZGwwSUoyVXRjb0ROTE9tK0thaTV6NmFjRkhYc045YmVieFhqTXRPTUM4Y0w1N2RIdDlXUTN3b1VUc2Nwaldlc0lXMlB2UU9vTDA3Vk1jdHBtanBHMGZBVCtEN1JmV2VVd2lZQVhlaHhLMEZLSEp0Y0xrTm1xZVNxdzl2MUFsRjQ3eVJxdXhraE5ONHhnZWJ3c09laVgrTmZEVXE1VHBldGJQalpqM2VXeWxla3RQNmxGZ3NISHhoTGk5eE8yQlVuL0pyTFBBd3dqK3JvS3FCNXVHUmRtbmhSMGhIM285NFZmL0xhanZuZ0ExdGU1Tm05SmVpSk10L2xJYS9WUS9mYldkVHVNQnZDVjlPV2dNRVF1Yjl0Zys4YlRzc3ZSeGdRdzlPbi9LRnpEZkgwMndqenN0dWtuczVxc1h4Qms4WDc3QVBvTndaNGlnNDFEdjlBZnE0cmlabHRmRUhKSTNEajVpbVpqV0RTZ3haTlBCOGs3ZVV3YjZONWs4M0VDOUo3WUp0YmlUbGMxeExiakVjVFhDb2J5TEhOMm16VjVPdVRPTWxKOVg1ejJHSlFUMjRoQUFXTWtDYkxDRG9BWnRpb0NKbTAyNFFGdmwyTnFESWFGVTRzTWpnY293bVpWOTNVeU5MeFVzRFNqbi9BOWdORWVSejV4L1I4K01qVjRqaFZ3QkUyMjlRbDZISVRQdVFnVG12U2c3VEV1bHVPRWt1b25BRDVZSFAvUXJWNXpoQXZDYkR3K0FUeFo3aTdFd2p3Q2NEQWVlbDVuTmZRT2w3MldOVnZMSG5XMjNqamo1NVFTU0REbU5waUtyS2U2NmdSMGJMbEIrT0VxQmdoNUpKTjZFOU1BNmRhd0xXTXhXRmNnQnNZODNGYStOMXcrWkFiYk5MdVc2Yk5DTEM1OFZiWlFxanFKQjVjSEFnSzJodzFndHlZa3VndjVzWnFrVDhFTU9qMDZTQXlpNEpnTmk5YmdReG5sQWtuQU5CQ0xHMUF2OXVqSUdSRHh1d0xpL3FIengrWTFhUjBQaiswelBsVW4ydzZrUU9vVHB2UERKSnRZMFgxdHl4ZmduY1hDT0V6dGdJc0FLOUgzZnFyUkM3b2hjUi9WK241OGJNYUJRTCtlSUZuWXAyOHJhd3M2QUdvTHE0OFZBb2RmV2xyOUV0TEhTMWg2K0oxRjVnYnZ2NGlEZEREYkFTOXpTSFl5c2s3b0FCQUhyQUFWeGM5ejlSSE5LNE1WeXd0d0dNRVVCMjRmSzNTZnlVaC9YVk42YnpEMng1WEdMMExBQ2x4bjJKSlZhNWhhczByclYzUno2bDMvN2N2RzBITDlieTU1L2ZPYS83OWQ4dnF2SHZQL3pTV3YvLzJiczd5b0lpUTBZRzV2YStLRTBpZjZrSDRMZVRjY24zRklKejhzZyt6MytJL0wvQ3lIY3hCK3RzTXNwZTIrTVBlZ252ZmY0SUJUdTN6OSs5Y05IdjBYTDJ1ZEpPWUZOZDZJbzUxVXVmMW8xN0xNOUF1WFExdWdaSmdpZkNkVzBNTG5Qait3SWh3cGgybzhoSFd3Wk85VEZHMW0xQ1RvaDBRVHVEV3JOc3ZWM20wUEtmYndYTisrS0J6eHJLNFpvR1pWc0RVZUQ3dXd3cHdPdlVHWjRKSExrbmowUmtoczZPYjZiT2I3ckhVR1c1U0JaZGhXZ3pWNzlEc2VheHNVL09JeDNWWnliSXRoYjl1QkhQMFJzRG1mSTVRc3EzN3QrZnF3elJsc2lFTkV4Wko5YXYxNUxJUUFEZk0xVE1vQ2htclA3Q2ZBQW42R21kakU2YlNEMUM4c2FJZkR0RlFDak8wV2pqdEQ3eGpPTjd6THJqSEwvWUp4TlNjZzdRRGdkdnJNNTJ3MTUwN0FDWnBnRk9XSENzT3VvZzJyZU96UDhIODUxWnJSQnVwa21mVm5kYUxmMUNkRE81Rkt5STNKMHUva3RpNFdDNE1KN3Rxd1NDaUNwc2R3ZExGMHlkaTVmdmZPUHB3ellaQkE4UWtJeUM0bDJ5QUNIaUdZcDUxbjlscTNsWDdjRWtNcHhiUXF4Z2Q3VHFPRkpYcXV6MGtmbWRHRUFkejFjTXJIbUR3c0hONlBpdVR1OXA5Q1dNVHh3MlZEN1NQR1pqeXVaUlVHRnlpcDJhdzE4QU1CcDFLQlIxQkV4ZkNiVmlBNDYwTU90VXdhaFZPZkc1emZ4ZzRub3phVzRTNG43U1FMR3V4VWorQXNiUE50UlFxK3JEM3c0eXZjZ29xU3dRYThUY1R4NXo4Vm8zc3NpZFp0WU1PeHBILzl6Zk82RzlYSmZBQnJLT2Q2KzJrNlpZc0ZLamY3QnZDMFZ1aXpNc1FhVllBOGtFYWkxRSt2L3lmYTNXQk9tT1NMVHp5N0NFLzhlRFVUZElvanFNbm04NDRvZ2M1aWJhQkI1eVhzYWY4RlBnWFFCNUp1eHJUZ0NwSzc1THlPamg5YSs4cllvd25LZi9LcDFFZ1dQeWN1RVIxamd4cW5XRXl6Qk9kQ0RXdlljVTdnOVR3aDNSVStMRlYyVE5hRmxDYzI2OHVIcVlJZGRGK0RIWjIrSDhBR2pKWWN1bW1GRFI1OGRoT2lmaFZENHJnWk5JbWRYSmRSSWhNUW9KaU5YSDJ2cERuZXpyNTY0WDRxVjA4akE2YWRXY1crckZTY0ZLZ0REWTVYbTg0OEt0bW8zOWRPSTlkMkxnK3lETDhRbTIyTVUxYjlUMjJ0ZzV6QTNOemxEbVhQMCtBMnNKbVFLR3U4OXJwMHE5QWpPT1pHSmV5N0dNQWdlSkRCTXJHM1JvRFhXYzZGM2ZPa3VrOXgyTnJQbVRsa3JSRlk1bkxTaGZrdExyRGhmMWdpVUt3OXJvNGNhbGhHN004d0NnUVlTaCs2RDIxaC9leGJDZllKWXRjL2N5QVhhQkwvMEU5UzFwQ1ZMc0ZhdFdMT3o1UkR3VmFjVVlmOU9mV2RJZzZ6UVFzQXI3a3JnSVFTeDNWaW5MRllDZHJ2VmNvOWZHM2N1SE1FNnNNWGlnR3RaQVZBZkQ2UXJ6MHM2N1NQYUtqR3I5UXpYVGFyWlhZQk84SnRSc0MyZDJmZzJhMThRMWJ0ZVVnZENXZEo0VkNBYlg4WTJ4a21ycVpOMlBZMFQyUy95Qm03QnVGN0R4NTZONHNrUTg2aVZNU3UyS2pGbi9kb0xMSnhOaU5ucDZNcG41U01jMENRYkpocXNMYnZrTjdxYUtUMWE4MEY5Wm5ZUEpNNVdqVmRtaUhoblo5dk1lUG53bE1iaU1iWmNuMlB5d1FlNzRrdk5uUTUyc24rTzUzUWNWdFlBc2NFYXA0c2NqMnp3Nnh6Y3ppRjB4ak9hdy9SS2RBUDlKNmp5cE5ZNTJVMzFRamxRY1N4VHJFa3kzcHU3MitGNlBQc1dqRDhUcmw3TFNacnR4TjJIcmp0ZGFmakQ4dy9yejJqdFZIZHlISjJobDl1em5jS1JVTGZUNWs5aG5qeDJmdXhiUGlaaGc2YzZ3VmQvL25YZWlxYkhjVmg0ZWRuL3dYNm9iSUgrK2JMWTVQeGQ0dnBIWGgxaGlnYUhyVmMwMExDbmk5WEptRUxNL3R1YkxMYk8zUjNqSThpblo2K2tuT3k3dXhrcEZoNEcyQUpCaW80ZCtwR3E4Nk9MOW1SUGRZMkNaY1BVQXBzeHJJajdOREtZRWtHUGhkYmJWSHJOSXI5dnBGcnB2WWFjc0NsWUFaUlpCemVaWWtRSnBkZnh0anc2Z2dYcERTYmNJeEFHa0dXeVFNY0UwYldHVWRMaWV0Mkx5Sy9xWnJEUi9pdkh0OWpkNFdEZVZ2Q3NoeXlkaGVuRmpxV1l0c0Q4Q0MyR2FZNzdhZVAwYkdNRmlmYUFZeHd3SG4yOVNURnlqSTJRelN2UmFaV3RGblpDV000Q1ZVYkh4elhOL01OSTMyek5YeHMxVDR6Ry9qQmJ1bm1sYzR3UDd1VExhRnc3aGxMNTU3ajNuU01mQXREWWVVc2l6OC95NTk1OU9lTVQwVFJxMmxBVEVtNEZvNm5JMXloTzIvcVBVbUo5U3dzbXoyR1RrZUM3VXdzTnM0aldyeWFMVWFTejhDRjdER2NKclhMZDdHcEFkRWNmQmljQlNiQWU3Q3I5Mm1CZ0pEZ3pzemtETXpZc2xyRE1rellDaUp1bEd3WVlhaldLRjdSOFpOdlNoTllaREwvTnhjeXNxbjZLQTBscEZ1ZG5mWjhuZ0dnYjNST1N2dWdheGpqTUhyQUZrSkY0V3UzMC92TWlnS2dINmpxWjBzTTJtd3I4R09zekM3MVlWTDJzZllyNUk3VzI1WGk0Rm9NZkovOXNvL0hvVzdRK2ZLY1dBSzJIbmdGRkhvNmNtckxTM1JpREFidlVEVTg4SXZCc3NEVEVHZVZRdS8yWHY5KzE2YzVqTEtPdi9jOGZZYm1ZL3lYai83NnN2NzY4SHV0OTlkVy8xOSsyb28ybTJZY3MyRTIwWG04dU05OU85UmdSSXhMZXh6WFluRUZGZzhuc2o0aHB5WGIrMUVOWUFzWmZ5QkJmTWRVdXZsak9rdXRtalVCeWlLbXhjRmZyOVdhVmVMMzNkVnFKZENRUFBxSGplS2ZSTUZwZEJIQ0c3ZGF6YWhzTXFBRU5FaC9taW02NGNocEVnb2R4dVUxaDhvNHRndGJheGNNTG1WYnhCckFSc3ZlZFdjVW1WZDAxSWR3ekVsc2dGZm5XWHd2YkpnMVNoWnhPbm9EVmNkdk81bkYydVFIWTVmNEY1UTRkSWUxMmd6bkZJVzdDZzJSSFQ2emJLaTNjdmU3T202a3h0amRWRXdGTmxhaHRvUnhWa3lpcWZmZEg1Tmh3QlV3eTBRSFR2QjQyQzJCcDhyMloyS1BCdHVHR1J5T3RJTHl4OU15UEgvVk0vdXpFRktKRjlDZU52UDNoeS90TU1nc084c2F1cFBhL296aytYM2l6L2Vmdnk3WC8zNDVuRUw5MTd2NTdiL3VkZjF1OXU4WCszT3pZWnY3KzRBNXdWbzRHSUM1ZnRZSmV1dTBBSm5RUWNEYm50ZWZCV25sdjdqZC8rM0xPWFhwTW1nSkttR2xMVEhGQm1sZklVYWZVb1ZYaGhYQ1g5N3o5ZGFIeGN0RGFobFAvTkZSRFRndDAvU25nK1kzWFhTViswOWxKazl3aXNrUTAxT3lqSE0zRHY0Q2NFYzZVVDRINTVuM2h1RmFIeEZRMnBGTzJXaHp1RkpDbVVCM1RsdnFqckxVNFJ6QVA3czVxWk1NZ1AwKy9UUGJacmV2ZFJ3MzhEcGV1Nlh0dUJIczJENnIwK2RaZk50Sy96enM3MUZ0MVhQU2I5UmxPaThRZC9SYVpmZllmRjJ1VXV1WVozelV2RSt6VE5vQ01qMDJTL0hzcms1N3lBTm9CUHk1bmFXS0FZZEFSTjFXL2NmY0U1RC9mejRKcE5zaEtkRVorZEJ1YTN1TElkb2MwWFZuWUJRMEpGbjNaSjNLWjA5NXU4Qkx2cXdlSXI0aUhpOW9tOG5FYnlaVEozek1OaVY4VzBOZzdFWlhkRWFNelp6M3dOb0tqSzVvYk1GSm1OYitQK0FTcDVjMHAwM01GSVVXay9mb2o2MjExWEc0SVFHUU1USHhWR25nMjRlOWZXVmNqOFBFQnRwbEZCaW9hT1U4Zmo5aGtuTUZhNHJOeStoeWhkMTJjWnpTRkJra0VCN290STZZdWcyMGw2MVYzU1lDUG4xTTFZMG5ldXhtNDRraXZpZndvbkQxM2NOcnRQZ2RDYnJqcXQ0T2NWYjZNRXRmdll6em5xNnp4eXBIVUtqMW5lY2dDZXhLa0gvYjBkUUJHZFpKWWUxNFRJK1hlREIzRDg0WFI4NFNMVlRFZEFBT3lFamx4NElEY2Ezc2M5ekZzbitUSmNNM2RTSENWZ2Ewejh1U1FHN3NTSVIvekNmSEhUbWtDY0M1Q2p6ZXdZZmdGNFVrR3ZBM2JlSElqZkE2d2hoOFVSMXVCcjIwUUxJMWdLVXpYKzFydHUzTStsN0FvNTFyeHIyWDRSQ2JvMWFSa2JYeHE2Und0eDNmaEMxWmpyYnNOdDA2bXJUWkpoMHV4eCtFaEg4RklJSUNiOGU2R01rNEpZb3hPeGtITUhVYjRyUnJhY3ZHckJoNlBXakRnbjBUREVqOGhZWVg2Yk1KV3JNWUMzTDE4R0pwREljQlliZC9NNkRPZkkvYlFWcE9ZZ05RU0hZVjd3ZVozMjFkZGErVFJuZWtLcHdqTy9kMU9FWWt2bzREZGhqK0djRTBucnV5dUdjMkZvRFNzckU3OVpxbFdPV2N3dkR1bk9ZNE15dXpnL0dCYXdyaTQ5em1NNGhrbEYvaG5vYlVtSVVzSHdQZ3pDelRTaGlDQmRHLzBFaFFITlRWdVRaQ25MYVBWZXY2dVhRN1p2Nk1lVisyemZJU29oZHJZVnQzSUlLbGFyQktRT2pGN2pkc2UvSkpIL2t4OStuamNkemN0b0tGMVRlU2J3R1Vsc2lBRkFyOG1DT2Jwb1k3dEFjb0VDNlA0bkE2aHVVTXAxUlNaQXUxL1pWTXZHY3k3ZW5yZDlhVk9lbmwrUS9RUWg3dHBIczYzaFk1WWRmczNPZS9aYk1pVW1TZ1dDNEQvTXZSbWppSFg2RDMzNGtyNlZKTVhyWlNMRmdLMWlzaXM3a0RqNDA3T2t3aE9CaXVRSHZDeWVNNW9VTHNhbkhhWWd1ZEZ2QnQzUUo3S2tWdlR0aVMrRmwyczY1ZG0wMDF3UmpQNUhtZHZNdWwzcE1iZzBBNTNXN0FPRHFJWTlvTEVneldMSHZjc2pLNk16QUE4Ym84cldHaVhzVmhQZ2tFYmwwd0dJR2ZldTM5QSt0SDUyMWlEcjVwODJNcGdoRWJwTzFTYmJhUGFnSXVQcEhuTktYY25QLytBdmRaVVpPUTJRNTlGSGFoM0V1MzdieVFWTGNRMEs0SkdOeGZZNnNReVBjNHhYOGJYU1U3TmdCNUI4ZFEyQnpDbDE5WDNjd29QdEVDQjE4K1FVMjNTWmIzUWw4dytzV3VKMjluSGF3VG1DcytvVGtZMzk2WmFuK2VrUmhkcTEzOWF4Z3lmUzN5UDJWTWQ3b3YwVlpsMjUyNlpnc05FcThZdjZmZGFUazN4dk9Gd3EvQkhxWUU3Ri9SbWhTbk85OUdmZmNKbjF4bzl3ZU4rRHl5Qld6czNNdHpwc2lYbm1pUnFaMGsyUmR5dE42L0pJTnQ0UG5uOUtyckgrT3JUS0RDR1ROY1o3RzVEaWMwL0dYenRPYzFGQ3YxK002MkpnWlB3UVo4VHRSeElqUU9NYldyQkFzNllNUGZWL0swWVE3U1o5UTFzejBRNHJVMTNwYk9Jay93WFNFUUsycHJFdHVLeW1wRTBhekxtY2VtaW02TXFIUFFVU3hXODhYcllhdTFOZEdPdTU0ek1vQjJzOEFzVnJIYkdHeGcvL2hJNHdNMlgvekViZ1dLZHVielduSUwvd3c0clhMR0w3L0FzQWFZRlpwaG84YXRNTllEWlhHMlJsRVFQbEJMdXh5MVpXOHlaSHBiWFZ4US9TQmN5cGEvcy8rc2lpMHNFK1Z6cUluaXNrOVN6V0J4YzJnNE9qNDMwSzh0eStudEdKeVc3ejdPdUxUekZsS0NKUGRqZHJHWThqMEVGa3A0VzhnVzdTMHZkalZhN3ZhT0s1WnNsNS9sbHVaYkxWcEhzT3B2c3VGdGRHSGdZdkNkR3ZjWm5aZFRuSXlRNjNJOVR3Sk5ZQWluL1pPNk94bGQwVU5VTVIwYTR1a1ZSdHFHRXdhaHFvZ2J6Z1FENUtEdzRXd3g0SktqVkR3bTVESzAvMWl0Q1RNMWh1ZjhWNHdHckFUcVlEN0U2Z04rMnFrZ0huNnc5bTVOUDJER0huVlBJempMT1Y5R2N3VmF4YzRzWHVqTVZpeUNZWFNXbDEvT202MU9sd3ptTVQzSVkySnRicTRNamlwWWFSczdXN3lTSmN3V2UzZ1NUN2RkeHE2Wnp3SkI1Nzg3MkRlbHoyS1U3cUJvVzVSOXdBWVE4WkFKamJyenZMN0w3cDdITWo5ci9lMVl6YzV0QmtMd0FqZHd4RzVlNEtUZGNmZm5EQlI3MjdOczEra2tnS2xsRnRTb0g1TG9kSGVZUFU0ME9lcjZYbzdkNG9HcUk1UU02emxWeGxaT0FGV1Foajl2cWc2akFzS01BWjVCQ0s4Y3ExV2p4OHJaTGZJdHAvS2lBT09NZER6YW5mcDYwalRnbUFxUW96alV5cWJGS0RjbzQ0VGpyN2dkTlpSQWpzYWg4Q0dhTlJ2MzdQVzMwdmFjS3VBRXlSSzVQZThlSGd2UERYTy80YlI0bm5rV0YwaU1hK05ieTRCMHoxMnRyTm0ybnpza0paaitCM0k1dTk2aFA5aU1kaVl1QThHclUwT0FBVHJxV2ZCcjRjbkcrZmM2UlgrYWZGYmx6QUZ3aERsNjVVU284Zm9zemFsYzFlbkhqNTJjRS92blJ2Q0NrSnJQU2FMZENiMjJ3L01Hd2VnaDdCZFcvc3lGRllxWkpXdmwxcnc2dE43REVTQWFxS2I5cEkrVHR1TzRUa2xqUGlOdGVYVUhFUlM3a3M0RzhNcjl6SVhVVE85VHkrR0V0MkszK1BLNEJZQklldkZ2MElQTGVwZDU2dGlzcGtBRnN4bDJHM2lUNGNWMHlwMUJ5S2MxcmhlYkdCOXIyRUcraUFZd3J0NW5jUDNGYXRnNmNzVFplcTBqMEZiTW1pZHF2L1RKZzVmL2paMCtFWXBkQnliQzNwdS82Y0FGTk1oT3JuQW9POThZOVVGcDU2K3QrKzNoc3gzODN5NTUzTVcvL0JUN2Z2MVRxSjczRGhXYzhadGZZckZyLy9kTDVwOVgvdHZQOFBRT3g1N3JPbTJUKzBhZHNSdFNhdERGdWoxbUFTY2QyK256WDh0SjFyRmdYdS84cGpQTzRIWkduYk9qMmpodmVQMXpYWDd2S0VQOVBlLy83UG11ZjMzQWZ6eGZCQXkxVlJ5bSs4QVQrMnRhYmp2SXltcmhRMXl6aFdUM2hIZ0hlKzh2Si9hbDkwK2IxOUVXREdob1dIL2tlK1V6Z2p3QWRvS1JHbmI5SElqenJDK2ZTanFMYUNOUTlKa1hacVpGQi9zdW85Vm5Ndmo0NEVleHZ0bm9mTFVrc1owT2lnZU54Rm5EUkR5MkIzNjZmS0w2RnVOL09NaHpSb1V6MVZ5YU5OZzdRTy9lVHA1ajllMVhyTGFpbndwcGlFVURuajhOV2pyMGZjMTRDY3YzWGF2Vlg1djA5MXRJQ2E3elVESXdkd3RPUUFnVGtRZC9ZV3FEWFp2WWs5Y1JCbVU3Ui9nSTZjMGFtV3Q1REV6djRUU3p3Q3Fpc3RZYkJ0Ti9Ob0VOY1VYVnZ3V25yR0VmdjM0N0ZOUVJjSjQwOGE1d2RZODYrdXhmOEFYT21GdkxWbmZ3K0ozdDZ6Nk92SE0yY1hWMkpaWUVZTHVhQ25lT0g5aW5GaVZmbHFQYVRIeE9mTE4xSU5qQ2J3SUVQYmYwZnZ4NjUrQjJtQ3Nza29YUnhlcFE0KzFHdzlLUksvdjd2OXVoSXlmYnlzOVpCV2pmb3FNWnJDMndXVDJmVXlhSDFYVk8vLzh6YXVXY0paWnhwZTB0OGJJWXhrazUzUW01TmlUb3pWNGpNN2dBOGU5WDg2L3lvUUFxTXErRGV3TDBKUHNFdUFOYytuR3c5OFVLZUpsdDdRRTNQNE94c3pkK2s0ZXN4TjRobUNGM1l6cmRvc2o4Y1p2eFdGenVYSWJqeDVEMHF6dkdjejhuaUtIdnJUYm1aTFBpYk13Wk1tcXpUZ2Rhb25RQlJ1bm8zZjQ2WGRKdW1uRG5DY1Z0VHF0K3pWREpIZU1haGp5QmRmYW1PRWpRR0M4S2dWbSsyN2JjYWxxQ09VNWVFRGZhOFJQR3doY28rS3IxeklhWVFxVG1DSU8yeHVOSktmSUttNVF4SXUxZEh0amxxVkZHMEl5L0EvS2NNeFZDZGd5RXNSR1dZWTFpQXl0SzQ4UUE1NDJiQzdZTFlOdEo2SW1ZemRQV0tqaW1DMTBkaXJlc0szRGUza25Jd1duWm1OZFl6YXRCeHNGQkdCMTlaUWUzalh6T0ZzV0ZoWFBnbUFIV1J6RGtsT3BxLzQ1VEJWN0lTZ2NlNHpsWE94cnlaL1N1cDJ2QWR4T0FFTjRJYnVGQy9PY2NEUWRjUEwybWF1TnBIcFpRWVFYcVBuWCtzTmd6NldlOURqVEJ2TDRPRUpsUS9XV0I5N1pIUERudTFRbW1BOUtQNlFBQ2R0WURhY0pwclFlcGdFSmc5QUtJSlRzWFpNOEhON2xnSlU5ZTZEWTR5NVkrYkxUSFVEUlBXektHSEhqR3gzSnBRZloyd0Jpa0pqdEVibjNPemJiSDdBN2I0SlBSRmRUVzdybGx6WnFKdzVGc3REdmI5OERaUEJPdzVXankzOU5WMkRVNzNMZW54bGh3NGlHc096bnpGdkF5RUIzbnpOZ0RjM3VjWEMvL01ndmJ3cVl5L3ZUVHJyK1pzNXovL3ExLy9jNFptbW5hMElIWXcrRjRTOVNRem5sc0ZqSlZxRGtneTU0OUozNGoxL0VjMVZOdFFSdW5yZ1loVHNueDBKYmNJQWpiM3JMVkZwN2Y4ZXpEYWNUMWdqMEQ4bkowSU1ZcGJiSkw1VDBaaVBramR1Q2svKzdyRzNRS0NhczlOb2Nwc0pvNVFKNnFjMlphc01FNnozTjQwV3RJTldHN25qNGQ2M3BtVE5zMGRRcElteFgvQUc4ZStZa1hGc3l3OFRZMWZsc045ajk4cG1LZmZCd0RtcldPcTBxMVNxOGZFSmVlRnhLQVpRNnZoWXlmQjl2QkFaYjcxb0tWQWw4emNPdEpUWFo1UEU0WnhvUlg2eUtBMG0xRDBXMHlkNmJTaVNMWFgyVFlzMjRNVW5pNG5tTWg0NWxZZ3BOMHJ2Q0p1K1Z3cllWN21WYm9POW9SOFppdjRZUHFxQmN3Tjl0NG5qLy82YS8vRFFhM21lc2M5MlVtNk1oTHZJNjRIR0ZoMWY0cFNQSGZ2aTU5M2JxcWZCRC9hMEdEVll0V21zQUVlcnlLM1NnQTh3cTczc1hJMkZxZUJ3QnlIQTcvZENZemJNMDVkbllreE5xQ25pT1krUmVkUDVLaENJVzROZHJzV0xJWWY4azFrM05qMlYvRGljTW12QS9XMEkyS25LbXJ3VnJuNHJGY0ZsSTRJZVdrMWEvL05xL3VtWGIyWWV1NFVZY3prQW9HNGxRVXlQUDBFS1VCV2hTTTQ4UHlKZkMrblV4Z0JiZlJRS2VncmVuOFM2T1pnODEzcUxlVkx2czljNnN0MDlKYWFFL0RtOUY5UXdZWE1LTURUQ1FRY0xKdUlIS2hoUG11VGxWL25DTnVCMkg5bkwvRXowaEwwam5BemtIb0EvNTlnNGJnSW13aE8zWG5BdXBvNW4wL1IxNkJOWndVTmswR2RTbmU2N3dMUkpBMTNBWnJzRWlHcnozaVlJQXNjNGNjODNPbUwvczlTbUczcG1jdW5CcG0yTFZJQmF2bHFaaUlQSTZTSGZIY1NLZytUc3ltclZHSHVZam53b0FCY1l6ZExOU2dUVXc4cmcvbytTNEw4WjdIdHVuaTNOeHNPKzNub0JnYjd5d1pibmZCVEJlanAvQitUS2FuQVZUcmhMTjFFL0djM2dPZ3ZIZkZjSDlHSEVCaVdGV0xXSVlENDdkRE1MbjE2N2xOc0U3ZUJGMnp2QitIZXRjS0JuRzBlUDg4eEk3bk5HY1RuMmRZWi9mbnlDdVB3b0hTL3M3SWFyZ293K1hoSEp5RXE3SC8rM01NdHVld05tZTA0QzdSWUtSb2ZSVWJ3U1dkVStRWXpISnlMYTloeUF6QkJlMTRFa091bDNQSFc3V1h3bmx0ck84SHRrYWVuWWtsbFB0ekdpT2dFUTd4MDd4UExPM1FobmVkempsWTUwVDdiNFBtT3g2bGdmLzliMzdVb0hZOThZVHFKSlhpYVdmQlRuZFcxTUM0VSs2c25KYm1lOUFkZ3Y3OEFOV050Sm5nRzhsTUNWemRtd0h0SEFFenpsR1JxNkRZb0RHbkREZjcweE13cVlLUW5EWDdIQ0x0eU5LN2ZkWFRPejA1OWN4M1FmcnJjRHlEZHJMQUxJRDdEbEQ1S3J1bXhKeUlpWlRIczE4OFpRL2s3YUc0dytIK3dTRkw4VDdCbHBvZHZnZUtWNTVQZHZCclRxcXpXMHhvNFBTNjRjUkZEMGV0UUtLNlBDUFM4U3hkc3V5cjhrOUFoVlUvejMwYUFUeWYwN3A0YkVudjdUcUpGOUNsZzJhVmllaWg1WkM5UitvdkI3REJBb2RRN0hBby9WUWEyMEpsMVE4bTBIR0pTTjFiQUtOcm56TW5vR0JCL1p1Ty9Cb3ZiQnNEYWsyZFo1M1lsb3ZpUEFHaTFQM0JkZWJWb2pPZXc0YkphNWZwL2pySzQwUUtYTXp6TEQzZEVna0oydTNhVC9ZemRyUGxZR2d3RkovSmY1MTNXcitUKzIrWGRZSDNPZHJIQks1UlRNdTFxb25pWUR0TFlWMkFOcERJSTJKL0JBeGt6RlliY3dkbDJpQ1lFY2hUc1c4OThmQW93SGxLWmw2bkhqaFFFMlZ6aXA1OXlSQ2RmV3V0djJqRjdqNk5uTk9CZFpDdmpvWHN2NGtoeTlFUDZWK1Z3b2cvTUJiejI2b0htb0phV2NFRG5XMTVsWDBYNXp4N0NvTVRiMDZ4Mll1dUJ5VVZNMncweFZOdVlyQUZyVnJwNDZrdGtBZnJHZi8yaWtlSGpnWmQ5emxDcHRXRDZJc1RLb0taaXZ2YnhUa1ljWGhnQVlUVUh1dlg4ZGU1ZUE0Wmh0VVUrdHhXaUdEQjM4dVdCQ2R3Mld0NzZ2L3pMMGJDNHRaUWYyWHAzNS8zenZpUCtEcGtPR0liWXJubFpmMTBIcS9MZzJYUVZDZlFUSDRZeEZxc1Q0Mi9uaFljMWZyZlhmcmtyWUtEMDY4bCtMWnRBUmlNT0ZyZGhqbVl4NDk1Mk5BNTZRNi9GZlJYNW91dHpFUHpEVnhDQVlQdE9pYkFMMzJDZ1NlRGpZNmJEeDRQZ0dMQ2NzN1p3STdBZkR6cEdMVjUwMWgydUtmYndmYnY4YTNnVzZoV0hGYzk3V2FtZE9YeVJWeGN6UzNvZjdjVkVjT2h3Q2ExQzQ3S2s1QTlabU1iZ0JxZVZYc0x1a3l3T0hJWExDbjdpNmJjUHFjdEd0TXNRVXAwVGlscUo2ZDVvMzJtSXg4blY1YUQ1aEgrYUlOem1QUDZwU29GYXNIMHROT2YwMkQ5bHFOM25kRWI0enJUbWMyc3RUT1l6VURmNDRtb3poN3BKeTN6b212ak50MWpxV0p4aXFPbE0veVk4MU1xSy9VQXBSMm1XVytQdXdSSEZEdGNBQmt0Z2ZkZTV5SzNQL05xZVVpWThNblF6TlNkQzJTZStINHdBTHVlU1BHTXU4YmtNYjdaREJlT3VucWVGTXpRTXQxNENtRytDd2RXSCtjQ3ZtVTFzQTk0Mm41YnozNTF2TUE2WTF3ODBleHhMay8rZFZNOGY4N1Z3c0J0VDY0QmRGMVdUTnVRNy9HQXJMT1QvZmM1SE9aOHRCNjNQSm9ub0p3SVRzQzdyNG9yaTU1NitwMVJxeDdNbU9EOVZyRkFRSjBYamJleWlMLzhUUzA5Ly91RkJNZm1hUXBPZFRRRVpxT0RTZnVURVR4RFVDOU1qR2JaZVFmSXlHMEZuUU9tSEhhMFR6cXQ1Tjg1UHRaZEZhZXMyMEg0bi9wLzZVS2RvL0NkdlAzZks4M2ZadkFXUkhMYUJUM2w3VTM0eFZvZFRGQTgzdkp6T1BuNzRnKzNaL253bzlwS2VJaGQzazZVQ3c1OXkwaVEyNDM4VktNcjAyTlZzSDhuVHZTZTA3V2hDajFZRGNvbnJuaHFUWkRrVTNuVG5aNTRzeUxvd0x6UElRT2oyVzZKRUU4bktOcDhiM0d5SWJieU9Ea1poZ0RvU0pjTkx0YVBXVG0yaHZQaGtzZmtnYUVmaDhNSEo1YS9uZ3I2Mmd6ZG5PMnBMM0w2cVJXWW5yV0J2RUhYMzlmanc4VHhqL044K1Jtbk8rQ0lkYVpXN0s3b3NNOXUvUTRPK3daMk8zcjhPY1Z5ZUFCMmFEcE00RG9oRkFDNStHVTYyZ0ZnNWJBZ2c5UFJVOEtEeHhFNS9NekRUNnl0aE94Nzh0M3lhRGxJaEFLUzhQMC8wb0tjTjFOaWdHWkQxMkU2cmNhSjJxK05EaW44OHRIMmJpZlU4UFdjS1N1dGNlWEpRdWRRN3N0Y2RRd1oxbStlZHppdVl0M0NRanZSRGV1Yks1SXh6eE9UdzMyV09UQWxveDhrMGV1SUtET28xck1Ta1dYZFRJRkkyS2xSREpuK0NpdzFUTTZlM3RGRGZLM3g3UmFFYnVNTDJHSGtkVHYwc1RuWjY4OWswN25QSVhNZTBwREZhR3hyR3lmVmhLa2YyOWxtRW1qUFMweW1mOHpqLzg0N0F1cjlacks4QzFPQmVTMmUrUHhyZ2JRbXBKNGhua1hHNlFHTjFWbmlGaVpoNHExbWZteDF4S2ZiakhRNldLWm52enpid1ZPNGpUZWVmQjJ2M2U5d3N1YU9uclJvekJTVnc1ejVUQTdBaHZyMWc5YnZEeVhEdFhtMldKYVlwdGtTQW96bU90SGZFNmxONFFHbHpwRkdOcFFBOHl3TEhSNjEzaDJpM0o1cXM0SDlXTTZybFdBODV0M1J5eGgyUUdNTW5qMm1EeDNRVUIyY1d5eWVsdVp0TEhnemNlRXVPNURXSkNPc3RsMW53aXcyMi9PL3krZTVndmFOVEpkbHRHTTVrY1BuOUkwNkNPSjJCb09EWWhUTlpGdnJPUXNsTFk5eWFpZjV4MjRhWGJIeHFXbmVUdnJPWkp3elJ0WFk3V25BVmt4Z0V1SDEvdGpkalZMakE2dERGSk1CYnE5L2gyTWhEcEhTWEVIZWx0bjltTTVSV3g3QXhMN1pHOHU3MnJpaHF6WWN1YkgybDlVZXJ6bnpjelM5REdlbk03YXBXZk53Q2xkVzV6WGY5M1I4WTVGd21kbkdHNk9BbnZzVHo3SGZGK1ROZ2pWTFM1cjhJdU81N3p3OGRDSmo2UlpiWUNWRkVoMDYrUTAzalgzVElYZ3YrWkJkcDlhd3Z4N2VpZzJ3RU1hS0pydzZUMlgwZEZwMyttWHJZVDh1Q01IQ3VaZmxvUjNZeDlJTlpUM3VnTW5UeTAxWVo5Nzk0TW51NVpFWUNJQnpSb1NrRm0rSm9MZkYzR2RtMWhsbzdSQ3d1czhCMzFhN2xQWmRBUy9aN00wS1R0d2Q5em5zT1ZuVHREekJRalY5ekN1YkVuUzRQUGFlYjJlSHdsYjcxN09uRmZlK0w5dWpIVCtGM21WUDMrck9CdkRjUC90WHduTU9WUExRR0E5eHFpYmcyRi9KWnZmSWVnK3R3YXpwZjY1ekxDckk1ZnIvQXBZVHFBOGFKZXJZQUFBQmcybERRMUJKUTBNZ2NISnZabWxzWlFBQWVKeDlrVDFJdzBBY3hWOVRwYUlWQlR1SU9HU29UaFpFUlJ5MUNrV29FR3FGVmgxTUx2MkNKZzFKaW91ajRGcHc4R094NnVEaXJLdURxeUFJZm9BNE9Ub3B1a2lKLzBzS0xXSThPTzdIdTN1UHUzZUFVQzh6emVvWUJ6VGRObE9KdUpqSnJvcWhWNFFnb0I4OUNNak1NdVlrS1FuZjhYV1BBRi92WWp6TC85eWZvMWZOV1F3SWlNU3p6REJ0NGczaTZVM2I0THhQSEdGRldTVStKeDR6NllMRWoxeFhQSDdqWEhCWjRKa1JNNTJhSjQ0UWk0VTJWdHFZRlUyTmVJbzRxbW82NVFzWmoxWE9XNXkxY3BVMTc4bGZHTTdwSzh0Y3B6bU1CQmF4QkFraUZGUlJRaGsyWXJUcXBGaEkwWDdjeHovaytpVnlLZVFxZ1pGakFSVm9rRjAvK0IvODd0YktUMDU0U2VFNDBQbmlPQjhqUUdnWGFOUWM1L3ZZY1JvblFQQVp1TkpiL2tvZG1Qa2t2ZGJTb2tkQTN6WndjZDNTbEQzZ2NnY1lmREprVTNhbElFMGhud2ZleitpYnNzREFMZEM5NXZYVzNNZnBBNUNtcnBJM3dNRWhNRnFnN0hXZmQzZTE5L2J2bVdaL1A4YTdjbUx3MFh4dkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg1QWNDRUNRU1IxL1VNUUFBSUFCSlJFRlVlTnJzWFdkNEZGWGJ2cy9NMW5UU0V3SkpxRUtvU3ErQ1NGRXNLS0orb29DZ2lJclN1d2d2dlNnZFFTa1dSSDFGUklvRkMvS0NnQ0NDUWlDMGtKQzJ1OGx1eXZhZGNyNGZPek5zR29ZU2l1eHpYWE50c2p1N00zUG1uSHVlZWorRVVvcTdWZjc4ODArTUdERUNmLy85TjhMRHc5R3paMC9FeHNiaXE2Kyt3dG16WndFQUd6ZHV4T3paczVHYm00dEhIMzBVTE1zaUpDUUVhOWFzQVFEczNic1hJMGVPeE9uVHA1R1ltSWhHalJyaHQ5OSt3OWl4WTJHejJiQjU4MllVRmhiaTBVY2ZoZHZ0aHNQaHdOR2pSMkV5bVFBQW9hR2hTRTVPaGlpSzRIa2VnaUFvcjRJZ1FCUkYzNytKS0lydzNTaWw4aXVobEVMZUFKQ3lyd0JBS1NYUzVTdXZaZDRqNTg2ZGk0bUlpSWpUYXJVeExNdkdNQXdUeFRCTUJDRWtIRUFOQUNHRWtCQUFnUUFDQU9nQmFLU05CY0JJdnljQ0VBQjRwTTBKd0FIQVRpa3RBVkJDS1MyaWxGb29wV1pCRUFvNGpqTzZYQzVUWGw1ZVh2UG16VTNTNzFDZnJkei9oSkN5bjhudkFRQWxoSlI3OWRrb3d6QWdoSUJobUxJYlpWa1dMTXVDWVJqSWY2dFVLdVZWM3RScU5kUnFOVFFhRFRRYURiUmFMYlJhTGZSNlBmUjZQUUlEQXhFVUZJVGc0R0NFaFlXaFJvMGFpSXlNUkhSME5PTGo0M0g0OEdIVXJYOFAvSEpqaE56TndIWTk0dkY0a0p1YkM0UEJnSUtDQWxnc0ZoUVZGYUdrcEFRMm13MTJ1eDBPaHdNdWx3c3Vsd3R1dHhzZWp3Y2Vqd2NjeDRIak9QQThYMnFUQWN4M0UwV1J5QUJYQnN4S0FabjhmeGtBS3dWWXZ2OXYyN2F0Z1Y2dnI4ZXliRjJHWWVvQVNDS0VKQUpJQktDN1RZYlpCZUFTcFRTVFVwb2hpdUpGanVQU3JWYnJoUUVEQnB5WHdjMEgyQ29EdkhJQVNBaWgwbmhSRUhKNVlBZ3BCWHkrSU9jTGVtWEJ6aGYwZk1GT3A5ZERwOVVpTkRRVU1URXhDc0NGaElRZ0xDd000ZUhoaUl5TVJFWkdCdHEyN3dTMVd1MWZYSDVndTNZWk9YSWtWcTVjZVZ1ZFUzUjB0RmZOcVFETVpLMU1CamI1M3NtYW1pOTQrZjYvYi8vQjZKalkyS1pxdGJvcHd6QXBoSkFVQUkwQWFPL3dXK2dHY0ZvVXhWT0NJSnh5dVp5cDZSZlNVeC9wMjZkQTBoUjlRVTBzQTRDZ2xDci9YMEdqbzRSaHdCQUdERVBBTURLWU1aUmgyQXBCalZXeFVLblVVS3RVVUtuVjBLalZFaGdTcURVYTFFcElRRUJBQUFJREF4RWNISXlRa0JEVXFGRURPVGs1YU5xc0pRUkJRRXhNakIrWi9NQjI4OFJvTkNJM054Y21rd2tGQlFVb0xDeEVjWEV4ckZZcmJEWWJIQTRIbkU2bm9xV1YxZEQrUVVzanN0bFpCdEI4TmJOUzJsaFpVSHU0N3lQczRuZVd0TmJwZEswWWhybVBFSEl2Z0FaMzJXMDZKNHJpbjdrNVdjYzBHdldmWThlTStYUHYzcjJpRDlpSmxRQ2VaTVlTU2dnb1FFQklaU0RIZ0dFWnNBd0RobUZwS1lCVHNWQ3hsN1UybFd5aXF0VVFSUkhCd1VHSWlJaUFYcTlIUUVDQVlwNGFqVWJVYjNBUGFrZ2FYR3hNTENLam92eUx6ZzlzMVNmRnhjWEl5Y21Cd1dCQWZuNStoV2FuMCttRTArbUUyKzFXekU2TzQrRHhlTUR6ZkNsUTgvR2pFVjgvV2dXYUdhbkFYNlpvWm1QSGptVWZlK3p4VHVHUlVlMkRnb0k3RUVMYUF3ankzekhBYnJmQldsS01WdmZkYTZPVUh1SjUvcERWYWozODZxdXZIdnJpaXk5NFFraFpvQk1yTW0zTGFIRzBsRitPVWNBTkxNdUFZYjBncDJKWnNMN2dKZ0Vjd3pCZ2lGY3pMK3QvTTV2TnFGVTdDYUdob1Y0VE5TSUMwZEhSaUl1TFEzQndpUCtHK29IdHhnbkhjY2pLeWlxbHBSVVZGU2xhV2xYOGFHVzFORms3OHcwT3lKcVpiR2I2YUdTK3ZqSkNLV1VzRmt2am9LQ2crMW1XN1FLUXJrZU9IQW1OVDZqdHYxa1ZTRzdPSmJScDNicmNjK3JRNzRmM1JVWEg3aThveU4vZnZtM3JOQW5VS3RMcXhFcEE3cklteHpDVUlUNGFITXVDbGJXNGN0cWJDcUlnSWpJeVFna3c2SFE2NkhRNkZCVVZJUzZ1SmdLREFoRWNISUxRMEZCRmU0dUppVVZ3VUJDeXN6Smh0OXNxdmQ3QXdDQWtKZGRGU0dqb0xSdnprdUppWkZ5OGNNdlBVM1czVFhaS0tRd0dBMHdtRTNoQmdNMXFyWEEvaThVQ2s4bFVTanV6MisyS2R1WUxaUDhBWWhWR05XV0h2MlQvZ1BqNHg4cUNtY1BoNktiUmFIb3dETk1EUUZQZjgzUTZIWDRFcTBTY2pnckhKdFR0Y3ZiVmFyVjlhOVpNd0tYc3ZKTTh6LzlpczlsK2JaclNhRDhoRUh5QmpsSmFUcU9UL0hNQUlaU0lJa1JDd0lnTUJNSlFoaEhBc2d4aEdCWXN6MUtlNWFGU1NSb2NwNElnOExEWnROQm9OSXAyNzNLNVVGSlNBcTFPRDZmTHEvazdITjY1WnJOYVVWSlNnaUpMQVFJREF4RVdGblpGTFRYajRnVTBhM0h2TFJ2emkrbm40WERZLzFHYnJ1N3pWTjF0b0hiczJER0FNQWdNQ2taZ1lCQmlZa3Z2NDNBNGtKT1REYmVIQjhlTDRBUVJna2doVWlpdkZLVDBSbEZtbzZBVUVDbUZLRklpS3BGTDcxYld4S1NVRWlxWm1jUWJybU9jVG1jZmpVYlRoeERTQjBETmE3M21IM2YvZ0kwYjFzTmtNaUkrUGg0ZmIvb001ODZkeGRBaGc1UjlKazJaaG9jZWV2aHV4YjhtS3BXcVNWaFkyQnRaT1hrNWdpRDhZTGZiZjBwcDFPQW55VndWS2dVNVNpa0ZvZDRBS3dVaElrU1JRQkI4QUk1bHdmTXNXQlZQVmJ3S29pakE0WENBNHppbzFXckZYV0czMjZFcExsYUFUblp0T0J4MjJPdzJGSmlNQ0EwTmhjMW1RMlJrSkhRNlhhV2djU3ZsbjBEdFpwM25YUVZzQm9NQklBeWlZK0lxTmwxeWM1R1htd3RUdmdsbXN4bEZoWVdLSDgzaHNNTXBtNTF1Tnp4dU56eWNCNXhIMHRaNEh4OGFMMEFRZU1uY0ZDR0tzc2xKQ2FVaUtBVUJLTGxzY25yLy8rMjNBOTBURTJzL0doOGYzL2Q2d016M2VoYk1uNHVacythZ2RlczJLQ2twQVFEVXExY2ZQLzc4S3dEZ3BhR0RxMjI4TjZ4Zmg4Y2U3NGVJaUloeTU3VnN5VHM0Y2VKdmFEUWE5SGl3RjBhOCtocFlsZ1VBWkdkblk4V3lKVGh4OGdTMFdpMTY5dXlGbDRlUFVENnZEcEdPV2ZQRXlSTXZhclhhRjZkTW5aWXpkTmpMMzludDl1K2FOV20wWHdJNG9ZelpXbGFMazRJUElrU1JnU2dTeWdnQ0JJWUZLekJFWUhtSW9raWRUbWM1WUhNNEhGQ3JOVjVYaGpTLzNHNDNuRTRYSEE0bkNpMEZFdEE1WUxmYkVSRVJnY2pJU0w5YTdnYzJ3R1RLUjJCUWNMbjNiVFlic3JPenZEbHArZm13RkZwUVhDVDcwUzVITzkwdUY5d2VOenh1anhmVU9BNDh4NEZUQUkwSEx3Y0VGRkFUSlRDVEUyaTlJQ2FibWFkT24yMFNFQmpZajJHWXgrMTJXK1A4L0h6RXg4ZmZrT3M5azNZYWtaR1I2Tml4RXdBb0M0RVFBcTFXcS94ZFhmTGh4dlhvM0tWTE9XQ2I4ZlkwTkduU0ZQK1pQUmZGUlVVWU0vcE4xRXlvaVg3OW5vUW9pcGcwWVJ5NmRYOEFzK2JNZzhsb3hMaXhveEFWRlkzK1R3Mm9sdk9zNUpnMW82S2loL1YvYXNDd3JCekQ2YzRkMiszNHoreTUzNzR3OFA5T0FSQWs3VTBneEt1WVg5YmtLS1dVVUVJRVNpa2hvaWhTUWtRSUFrTloxdXVPY0xsY1VLbFVWQTRxcWRWcXVGd3VxTlIyeWFYaDlkTzZQUjdKWEhXaHVLaFEwZVpjTGhjY0RnY2NEZ2Vpb3FLZzErdXY2YnEvMnZJbDNsdTlFai85c2hjQThNckx3MkN4V0VxNVl5Wk5ub0llRC9ZRUFKdytmUXE3ZHU1QTgrWXQ4R0RQWHRXK1hoZk1uNHR2ZCsxVTV1anJJOTlFLzZjR0lEMDlIVXZlWFl5UzRpSUVoNFJpNHFUSnFGWEw2MmMrZU9BM3JGbXordTRDTmw3Z0VSZ1lWRVo3eUVGdVRpNk1SaVBNWm04S2gxZExzMTcycDhuUlRvL2tVL1BJL2pRdnFBazhENTczRFFnSXZta2FwSFJBQU14SEgzK2k2OXlsNjFNc3kvWW5oUFR5ZGFyYVNvcXUrenFQSHorR0dkT25LWnJBNDQ5NnpjeCtUL1RIb01GRHF2UWJodzRld01vVnkyRXc1Q0V4TVFsanhvNUhTcE1teXVkN2Y5MkREUnZXSWQ5a1FreHNMSVlQSDRGMjdUc0FBRWErL2lxeUxtVUNBRWEvK1FaVUtoWUpDYld3Y3ZVYWlLS0lybDI3NGVHK2ZhSFZhaEVkRTROV3JWdmo3Smt6eW1LcUVSNk81d1lPaEVhalFVS3RXdWpZcVRQUzBrNVgyN3lvd2pFYkVVSWF4Y2JHVHJpVW5iZmI2WFJzbnpIOXJSMmZmYmJaQ1lDWE5EY1o3QlNRazMxeGhGQlE2alZUS2FYVTdYYUQ1M2tpQlJVb3ovTnd1OTFnV1JWNE5RK092K3l6NWFSZ2xMV2tSQWxNZVR5ZVVnQVhHUmxab2ZZbWlpSVloaW4zTndEazVlWGgyMTA3UysyLzV2MTF5dDl1bHd0REJyK0FqcDA2QXdCV3IxcUo5UFFMY05qdHFGZXYvdFhaK2syYUtJbnNWenJIc3Y5YnpHYTh0K1lETkU1SktmV2RXZjk1RzZOR2pVSHpGaTJ4YStjT0xGKzJGSXNXdnd1WHk0bUZDK1poNWVxMVlPNG1ZUE1ORkRpZFRwdzVjd1puejU3RnhZdnB5TTdPUWw1ZUh2THpUUXJBRlJjWHd5cVpvamE3SFE2N0EwNkgweWRYelEyMzIwM2NiZy94QmhFODRIbU9TRGxwUkJSRlJoUkZobExLVWtyWjFOTm5tMmRjeXA3ZHJmc0RKMVFxMVFlK29PYXJQVjZ2dEdqUkV0dTI3OEtibzhhZ1pzMEViTnUrQzl1Mjc2b3lxRjA0Zng1dlRadUNFYSs5amwzZjdjWlRBNTdHbU5GdndHUTBBZ0F5TXpNd2U5Wk1USnc0QlR1Ly9RR1BQUElZcGs2ZERJZmtyRit4Y2pXMmJkOEZBRml5YkRtMmJkK0ZsYXU5SldnTXcrQzVnYzhqTEt5RzE5bDhNUjBIZnZzTmJkdTJVN1RLRlN0WFE2ZlRLeFA5K0xGamFOYXNlYlhOaTZzNUppR2taMEJBNE1vRmk5N1pYNzlCZ3lscjMxL1hqRktxaFRmaFdRTkFEVkFWcFZRbDMzZDVIa2h6Z25BY1J6eVNOdVp5dVlqTDVTSXlXRG1kVGpnZFRqanNEdGpzZHRoc05saWx3SlhOWmtOeGNURUtDd3RoTnB0aE1wbVFsNWVIckt3c1hMcDBDVzYzV3puUEkwY09ZK3JraWVBNERoYUxCUzhOSFZKS0cxdTBjRDVHdnZGbXBXUHkzWGZmb2xQbkxvbzJPT3lsbDdING5TV29VN2Z1Vlk5dlNFZ0lOQnBOaFordFgvYytObis2Q1FCdzRzVGZlUE9OMThzOWNNcjZ5Ujk5N0hFMGI5RVNBSERQUFkxZ2xnQXpMeThQWVdFMVVMTm16YnN2S3VvMVNZM0l6c3FXbmlMNUtDeTA0TUtGQzlqOXcvZm8xdTBCdUZ4T09GMnV5NmFucEtWbFptWWdyRVlORUVJZzhEemhlYStHNXZHNElRZ0NZVlVxOEJ4SFpKSE56ZDY5Ky9SWis4SDZaL2Y5Yis5VEgyN2NBSTdqVUxkZVBVeWFQRVZaVExlVDdOeTVIVjN2NzZhWXNMMzdQSVR2dnR1RjNidC93TURuWDBCRVJDUTJiUHdZdFdwNzFmOUhIbjBNUzVlOGc2eXNTMmpZc0dyMWpxa25UMkwwcUpGd3VWeTR2MXQzZE9sNmY0WDdyWGx2RmZRQkFYam80YjQzN2ZxcmNreENTSzJJOEloUlFjSEJvekt6Y3JlV2xCUi8xVFNsMFM4QTRhWElxaUJwYllLdkJnZUE4anhQR1lhUjh4ZXBsTmRJR0lZQkw2Z29ML2dtY1h2OXQwNkhvMVErcEt6UmVSUnoxV3VtUmtsSnZhMWF0Y2F2ZTM3QnpCblRrWk9UalNlZmZBcmhFa2hzLzJZYjZ0YXRoMGFOVXlvMXpiZCs5U1VXTG41WGVhOHlZTHBlZWZiL0JtTDBxRGRnTmhkZzMvLytoMWx6NWlxZm1TMW1USjgyQldhTEdXM2F0TVhvTWVPZzFXclJyOStUeWo1ZmZQNFpldmJ1RFFDSWpZMkR4V0pHZW5yNjNhV3hpYUtJOVBRTE9IUG1qS1NsWFVKZVhoNU1KaFBPcEtXQjUzbGN5cnFrVkJMSWVXcE9oeE5PbHhPVVVuamNIdUp4dTB0cGFGTGFCcUdpeUJCQ0dFb3AwKytKSjFVWExsNGFQRzc4aEIrN2RMMS9xOWxzZm1yRjhtVjRkK2t5ZlBMcFoxQ3IxTmo2MVZlM2JaQWxMcTYwbjY5MjdTUVlESGtBZ0tDZ0lCdzkrZ2VHdnp3VXp6MzdOQWEvTUZBWjM2cEtTcE1tMlAzVEhueng1VmJrNWVWaHcvcDE1ZmI1K0tNUDhmdnZoekIzN255b1ZEZm5HVnpWWTFKS1lTbTBJQ2d3Q0F6RFBCRVdWdVBUUzlsNVc5TE9ubisyZWZNV2VrcXBEcGVKQVh3MU9JWlN5Z2lDd1BBOFQzaWVKeHpIRVo3bjVjQUJjYnZjeE9WeWVWTS9IRTRsVjFJT0h2QThyMVFzaElhR1FxL1h3MlF5SVRjM0YxbFpXVWhQdndCS0tZWVBINEUvai80QnJVYXJnTFRSYU1DTzdkOWcyTENYS3IyMjMvYnZRMUp5SGNUR3hsM1hXUGJ1M1J2OSsvZEhmSHc4T25Ub2dQNzkrNk54NDhhbDlna0tDc0lycjd5S0wvLzdCYnAxNzE3cXdUaCsvRVM4OCs1U2JQcjBjNWpOWm55OWRVdXA3Mjc1OHI4b01CZmdxYWVlQmdEbzlYcE1uaklOOCtmTnZuczB0cUtpSXB3L2Z4NnNTZ3RUdmhFV3N6Yy96V3IxbXBwWldaY1FHeGVIM053Y3hNVEVLRTlDUTE0ZU9JNERJUVNVVXNKeEhnQUVITWNSUWVDQjBqV2FaUE5uWHdRdldqaC84SktseXdjUlFwb2VQSGdBOCtZdkJCVkZ2REZxdEdLQ05iem5IdVRsNWQ2V1l4VVRFd05EWGw2cDkzSnlzdEd5cFRmdmFOLy85dUxUVFo5Z3lkTGxTS2hWQ3dEUXBWUDdpclNhY21EbmRybnczWGZmb2srZmg2RFY2UkFYRjRjZVBSN0UvdjM3eWszYUgzZi9nR1VyVnQyMGhOT3JPZWFSSTRlaFVhdlJvR0ZEMyt2dEdCZ1kySEg3em05ZmRydmRuMzM5OVZmL25UQnViQWtoUkpCOGNiSVdwL2ppQkVHZ2xGSXFpaUk0am9NZ2lKUmxSUWlpUUFSQm9JSktnQ0I0UWM4M0o5SnV0ME9qMFVDbjB5bmxXYkwvN2Z5NTh5aklMOENhTmFzdzhQbEJPSHNtRFF2bXo4V2t5Vk94YzhjT1dHMVd2REw4SllCNHlSeUdESG9lYTlaK0FLMlVRdkxGNTUvaDVWZEdYUGQ0ZnYvOTl3Q0FEaDA2SUNNakE3bTU1ZWY3aFFzWE1IL2VIUHhuMWh4czNMQU90Uk9UOFBERGZTRUlBbHEwdkZjeGhYdjI3SVhEdi8rdWZPL1hQYi9neHg5L3dMdExscGVLbHJkcjN3SHQybmU0T3pTMjdPeHNuRHg1RWxsWldjakt1b1M4M0R5WVRKZURCVWFEQVlJZ0lpZ3dDRVdGaFlvZnJTQS9INElnSUNRa2xHaTFPa0lwaFNBSWhCZDRJZ2c4WVNRQndEejVaUC93aTVuWll6dDE3bklvSmpaMmNkcnBVMDJ6c2k0QkFKS1NraEVWSFkzT25ic29pM3ZIam0vUW84ZUR0eTZRSXBrNkFFQWx5aVFaaEI3dSt3ajI3dDJEdzRkL0I4L3orT1dYbjVGNjhnUjY5dks2Qk0xbU13Z0JHSlpGY1hHUjRpT2hZdWtxbHJqNGVCdzZlQkFjeHlGZm9tblNhTFg0NU9PUDhQbm5tOEZ4SElxS0NyRnYzLy9RckZtenk2YndqdTNZOXZWV0xGMitVakdmcXQzOHJ1SXgzVzQzZmo5MEVQUG56Y0h3VjE1RllHQmdSWURlUktmVHpYbjIyZWUrUDM4aFk4VHE5OVpHU1JxY2xsS3FvWlNxZlRVNHlRL0xlTWtQZU1MeEhQRUdEZHpFN1hZVGw4c05INTljS2UzTmJyZkRLaVh4eXI2M3JLeExPSFRvQU9yVXFZdHUzUi9BdE9rem9ORm9ZYkZZTUhUWVMvajhpeTNZK05FbldMTjJIVFFhRFRaKzlJa0NhcWRQbllMYjQ2bFduNmF2SFAzakNDWk5ub3I3dTNYSHUwdFg0RlRxU1ZCS1VWeGNqQmNHL3ArU29uVDgrREVrSlNjcmYzLzA0VWJNWDdDb3d2RUgvdVhwSHBSU25EMTdGcG1abVFyRkVLdFNvNlM0QkZhYkZRNjdIUTZuRTlrNTJRZ0kwRXZPVjRMaTRtSVFoc0RsY2hPMVdnVVA1NEVvQ2dCQWZPaUJHQURraHg5L0NibDBLWFBZZ2YzN2hqRU1VeGNBT25ic2pJTUhEeUl3TUJDZE8zY3RadzdQbVRNTER6elFvMUlmUjNWTDJRVGRCZlBuWXNIOHVYaXdaeSs4TlgwRzZ0ZHZnTGRuenNKN3ExZkNrSmVIMm9tSldMajRYY1JJMmN4OUhub1lKMCtld05BaEw0QmxWWGpzOFg2b1g3OEJMSVdXVXNjWk0yWWNGaTlhNkgwUzE2Nk5kUnMrZ2thandZS0ZpN0Z5eFRKODhmbG5VS3ZWNkhwL053d2EvQ0lBUUJBRUxGcm9OUU9mZmJwL2FUTngwK2JyTm84cWtxb2VjK1JycjRJUUlERXhDV1BIVFZCOGtGZVF1bHFkYmtiZlJ4NTlvY2VEUFQvK1p0dlhuNDBiTzdwWTF0NGsvNXVpeFhsVFE0aElLQVgxVnFoUVFSUWhpZ0xoZVI0c3kxSzVjcVVpaWl2NVlXVXc1S0ZHalhBMGFOQVFaOCtlZ2NQaHdKaXg0NnFVMnZQNVo1L2lxUnVjVm5QZ3dJRktQeHZ3OURQSzN4RVJFUmcvWVJJQUlEdzhIQzhPRzRiWFh4ME9Tb0hrT25YUTd3bXZiMjMrdkRsd3U5MFk1Uk5vbVByVzIyalFvQ0VLQ3kxNGVkalFmMit0cU5WcXhmbno1M0hwMG1VLzJsOS8vUVdHVmNGdXM4SHVrNXVXbG5iNnN2WkNLZFJxTmRIcGRMQmFyVEx2RnBHSUlBbkRNSVJTeWlRbEpiRjc5dTUvbVdYWmwzLzY2Y2ZHKy8rM0Z6UCtNeHNBa0o2ZWpubHpaeU1vTUJDRFh4eUs1czFiS09lMWJPbTc0RGdPNDhaUHJEZ2llUzROWGJ0MnJmSjE3dDI3MTA5UVdJbFVOcGEzY014T3A1NDQvdEh5NWNzM2YvZmRkeDRKNEJRVEZkN2FWUG1WeXNYMkRNTlFRUkFVL2plVlNrVlpsb1ZhcllaS3BWTElMV1hUTkNtNWpzVDNKcEZaeHNTZ1pzMEVKQ2NubFV0M3V0Rnk4TGYvVlhuZjloMjdWTnQ1L0NzMU5xUFJpQXNYTGlBcnk1dkM0VXNFeWJBcXJ6UFc2WVRMN1lMZGJnZlA4NGlPaVFIUGNYQzZYTVJodDROaFdSQkNpQ0FJY2k2YUV1VThmZWI4TXk4TS9MOFJScU94Ylh4OFBQTEsrQTdxMUtrRHU4Mkdnb0o4TkcxNjJjVGEvT2ttbU0xbXpKZzU2NFpkcTE0ZjRFZXdxeHliV3pobWpXclVDSisvYytmT0owcEtTajRNQ3d2YlFRamhmQUZPMHVLSVY0c0RwVlNnb2xTckovbmpJSW9pVWFsVTFKY1ZSdGJhQUlLaW9pTHdISzhrKzdyZGJyaGRMcmhjVGlRbEpsVXJIVkpBUUdDVnlxb0NBZ0tyZGFEL2RjQ1drWkdCOVBSMFpHZG5LMG1CY3RLdDFXb0Z3N0JLS29mSDQ0SEZiSUZLcFlMYjVTWTh6NE5LQmVyZXRBMkdpQ0pQQkVFZ0FKZzJiZHAyZjJmSjBsY0RBd1A3VHBveUZWTW5UMFNOOEhDb1ZDd0N5aXlXanAwNm82UzRTRWsyTkJvTldQUGVLaVFrMU1LUVFkNG9Jc093MlBqUko5ZDF2U3pMd202M1ZmdVQrRTRUdTgxYWFRa1djNHZHekc2emdsV3BRQWhwRXhvYTJrWVFoTDRtaytuRHVMaTRBNFFRamxMS0UwSmtnQk5CSUlKQ2hDZ3FCSm1pNk0wYWthbXRSRkZVekZNQTBPbjBzSmFVZUZOQ2VEa2xoTHRjeWVCeXcrbHlvWllVOUxuUmtseW4zajhXd2djRUJDSzVUcjFxSGV0L2pTbEtLY1daTTJlUW5wNk9uSndjR0kxR2hXWklydmZNeWNrQllSZ3ZLMGVwc2lpZWVOazRlRi82SUZsTFkwNmtwalVJRGc1K2pSRHl5cTB5bnlvSDhreVlMUmJFeE1iNzBjeFhhemZrSWpJeUFvbTF5MU02WldSbXdteSsrV05tTk9RaUlpSUNTWW1sejRuanVIV3BxYWtmdDJ6WjhnSUFEZ0F2UlZJVkg1ek1IK2ZMQ2VkRGNFbkxtcVV5SlpJY01aVlRROExEd3hFVkZZVzR1RGpVcmwyN1drdnFicVg4S3pRMnVZb2dJeU5EQVRXejJZemk0bUtmSW5ZSDNHNDNSRXA5eTZJSXovUGdCUjZpUWl0RUNRVWxvSlQwZjJvQXUzRFJPeU5abG4wRFFNTE51SmFnNE9DcjJqOHhzVGJ5ODAwd0duSVJGQnh5MTJ0dWRwc1ZOcHNWQXM5WENHb0FrSlNZQ0pQcDVvMlpmRTZpSUpRRE5RQlFxOVhEV3JSbzBjZHV0Ni90M0xueng4ZU9IZlBJQUFkdmtNcTNBRi9oaHBOQmptRVlJdm5mcUV4Ujd0dGNSZ1k0WDlaZXVlZEN3NFlOcjduVzlIYVdPMTVqS3l3c3hObXpaNVU4R1Y4T3RiSmtrSVdGaGZCV0MvRGdLdGZTR0FEazNJV01uaHFOWmhTQUIyN21vblM3bldqV3RPbFZhNnNYTXpKaHNaZ2g4Q0pjcnJ1VG8wMnZEd0REc29pTWlFUmlZcTEvMUVZeU15OGh2NkFBQWk5VTI1anA5UUZnVmFvS05iV0tSQlRGUFNhVGFWMWNYTncrUW9odmdJR1hORGRCQWpSUkRpNndMRXQ5d0l5cTFlcFNKSmErUFJia0JqSnlkNnlrcENRMGFOQUFOV3JVOEFQYmJXTnVHSTJsMGpsazJ1NktHRzdkYmpmc2RqdGNMaGNSS1lVZ0VVRXFXaHFsQktETWthUEhZcU9pb2tjUlFrYmY3T3N4R2ZNUUZ4dUR1TGc0K09YdUZvL0hzK3FYWDM3WjJLZFBINE1VWUpBMU9NRW5jaXFERzVXMU5WbFRVNnZWVkc0QldCYmNmRTNTK1BoNEpDWW1va0dEQnYrcUpqSjNyQ21hbFpXRmMrZk9JVE16VTBubjhHMnVJdE82K0RMZENvSkFQQjZ1SXZZTkJnQno0ZUtsL2lxVmFqU0ErMjdtdFRqc050aXNKUUNvSDlUOEFnRFFhRFN2OWVyVnE0UFpiRjRiRVJIeEhTR0VsY0NOODhsL0kxNGxUeFI5R3Y1UUg2cDVXbG11VzJWMXA5VVZWUEFEV3hYa3dvVUxPSC8rdkFKcWNqcEgyZVlxWmVpN0NjZHhBS2g4MCtVdVQ4eTJiZHRxaFlTRWpNbThlUDdWbTMwdHdjSEJVS2xVaUkrUFEyeHNySDlGKytXeU9VVkl5L0R3OERVZWorZUQzMzc3YlVPM2J0MnlDU0dNYkpwU1NubGNabDRXdlY0SjZoc3BKYjVSMDdMcElUSjl2UysxdmNmalFkMXJZUER3QTl0MVNscGFtcEo0SzNlTktpekZkT3NvQzJyRXB4ZUI0a3VEVkRuZ2RydWZVS3ZWWXdHMDhpOGx2OXlPb2xhclgrcmF0ZXQ5K2ZuNWE2S2lvblpMdmpkR0FqVlplNU5UUWNwcWIrWFNRc3BXTHZoMlRwTUI3cDU3N3V5a2I1S1JrWEZIbktoY0hpVUhDWHo5YVdXMU5KOU9VY1JiV096dERDV25jRkJLeWM4Ly94eVdtSmc0am1HWUNmNmw0NWM3eVBlMmJPdldyZXNuVFpwVUNNRGprK0FyeVA0M3VXcEJTZ254OWIxUjN3b0Z1ZlZmVUZCUU9iK2JIRlM0VTlOQlZJbUppYmY5U1hJY2g5VFVWTVYzVmxHSHFBcTZRdmwyVS9jRk5jWnV0M2ZSYXJYakNTRTkvVXZGTDNlWXZEbCsvUGlVWjU1NVptMVNVdElSQUN3QU9YcEtVSnJKRjZJb2doQWlsMlFSbWYrdHJJYm1XMlR2Y0RoZ3RWcFJWRlNFbEpRVXFOVnF2eWw2bzhYbGNpRTFOVlVwa1pLckNYeGI0aWs5Q1NUQ1BWbFRrMDFQQ2RnWVNpbmo4WGlHc3l3N0VZQS9vOVV2ZDZRd0ROTWpNVEd4Y1VsSnljcVFrSkF2QURDU2VTb25sWmNLTE1nV0QvVUtrYXNYZlByWTRrckY5U2twS1pWMnhicHRUZEhiT2QzRGJyZVhBcld5MVFSbEd4YkwvalRKL0pUclBCbFJGRWx1Ym01OGRIVDBCRUxJcS82bDRaZmIxZDFpTUJoZ05Kb2dDQUpzTnVzL2ZvZm4rWFZIamh4Wk4zbnk1RnhKYzVNckY1VGllcCs4TjBpcElYSVNyNUx6Sm5lbUwxdWxFQjBkalpvMWF5STVPZm0yQUxmZzRCQ3dMSVBvNk9nclpoRGN0aHFiMVdxdEZOUmtobHU1OTZKdmtFQUdOWi9JSjJPMzJ6dHJ0ZHFKaEpBSC9jdkhMN2NycUIwN2Rnd1VSS21HcUdKVzJiRDZEUnZYNmRydGdmYzZ0R3Z6QndBRzNzaXBUSURxcFVYeS9rT2x2cmRlalkxU0wwT1MxQWRYM3VRZXVvSkl3UXNVSEMvQzdSR1FtSnlBb0tCYlg5bGl0OXVRbTJkQWJsNGU3cnYzM2pzSDJJcUxpeFZRazR2WnpXWnpoWnBhSlpGUHhaL21kcnNIcWxTcXlRRHErWmVQWDI1WE1SZ01vQ0RYVkwvS01FejNXclZxSjU1TVRWdlJKT1dlSGFDVW9ZQnYzdzFCb2dzUnZiRUFDc2tDQmJ6cmhDb21xUnhSbGN4VVVhUVFxUlJOcFNJYU5taUk0SkNRV3pwV2dZRkJDQXdNZ3NtWUI0UEJVR0dhMUczRm9QdkREeitnZmZ2MmlJbUpRZGV1WFRGaHdnVHMyYk5IWWVpb0tBTHFWdm9QZUgxcTBzYUlvcWlhUDMvK2xQVDA5TFhmZi8vOWJRTnFQTTlqMUtoUmlJNk9SbWhvS0lZUEg2NTBkL0xMM1NzbVV6NkNncThMTU9xR2hvVXRQbmYrNHZDRzl6UUtBS0NUdW1mSlBSZFlTc0ZTS25mTEVnalBjL0J3bkplcDErV1dlaXg0dTJOWnJWWVVGeFhCWWpIRFpEUWhKeWNIR1Jjdkl1MU1Ha3FLaTIrTE1Rc01Db1pSNnB4V1Z0Z1pNMmJjRmllNWQrOWU5T3paRXlrcEtYamdnUWVRbEpTRW9xSWlIRDU4V0k3c0tJQlcxdnlVdFRRdnRiTEFwS1NrMVByODg4L25kdTNhZGN5QUFRT1lrSkFRZE9uUzViYTR6b2tUSjJMYnRtMzQ5Tk5QOGV5enoyTHAwcVU0ZGVvVUhudnNNZi9xdm9zbE56Y1hOY0lqcnZwN3AwK2xZdDVVN01lSEFBQWdBRWxFUVZTYzJlalZ1dzhBTUNxMXV1T3ovL2RjU0t2V2JTNTh2ZlVyQitCVjNTb3pmeWxBY0xtUnQyU08wc3VicEtrVkZPVGowTUdES0N3c1JFUkVCSUtDZ3FIVDZmRDExMTloL3R6WjJMWnRLd290aFdncG1ZYjUrZmw0YTlvVWJONjhDVC8vOUJPYU5HMkswTkF3QU1CZmZ4M0h0Q21Uc0hYckZody85aWRhdDJsN1RWMndOQm9Ock5aaXhGZmdhN3R0VE5HMWE5ZWlhZE9tZU9hWlo1Q1ZsUVZDQ0ZxMmJJbUNnZ0tjT1hNR0tTa3BsU1hlbGdvU1BQamdnNjBhTldvMHBWdTNibjNsbTNlN2lOMXV4NnBWcTdCcDB5YUZtdWo5OTk5SHo1NDlzV0RCZ2dxYjN2cmw3aENydFFUUjEyQ0dOcnluRWQ2ZStaOVM3Nm5WNmtGZHVuU0ovdVhYLzYzcGZuK1hFNVJTUmtJM3hUU1ZzVTBVQkpHWGZHMkE5OVVMZUJLd2dlSkMrZ1Z3SEFlV1lSRVJFWUdNakF4UUFJR0JnZGk2WlF2V2ZyQWVHbzBHWThlOGlTTkhEcU4xNnpaWXZXb0Z1bmQvQUgwZmVSUi8vSEVFQytiTnhhcjMxb0xuZWN5Yk13dnpGeTVHVWxJeTFuM2c3U3Y2MHN2RHIybmNmSHNGMzNhbWFGRlJFZXgyTzNKeWNuRGh3b1ZTUHJYRXhFUWtKaVlxS1IxMnV4MzUrZm1rc0xBUU5wdU51Rnd1SWdnQ0k0b2lrNVNVMVB2SEgzOWNzbno1OHI2RUVIVHAwZ1ZIang3RlcyKzloWGJ0dkExNTI3VnJoOW16WjZONzkrNElDQWhBdlhyMThQMzMzMlBac21WSVNFaEFhR2dvaGcwYnBoRDNVVW94Yjk0ODFLOWZIeHFOQmhFUkVSZzBhQkRzZGpzOEhnK2FObTJLQngrOEhKUFl0R2tUdEZvdGpoOC9EZ0RvMzc4L1dyWHlGalVjTzNZTVRxZXpGTjlhNTg3ZVR0c0hEeDcwcjI2L2xCT3oyWXl4WTBaaDBQUC9oOEdEQnVMM1E5NTVrcDJkalFIOW44Q1QvUjdGcURkR2x2ck81SW5qTVdUUTgzMW0vMmZHMUpTVWxDNEFkS0RVdDVFTUs0b2lLNjhicFlrTXg2R2twSmdZREhsZVFrcW50M0Z6WkdRa0dqWm9DSTFXZzVLU0V1VG01aUF6SXdPN2YvZ0JLVTJhSUNEQVM3SmFJNndHL3BMbS9WOS9IVWVYTHQ1NUhob2FpclMwMC9CNFBERGs1VUduMXlNcHlkdVlKVHc4SEg4ZFAzYkR4KzJXYTJ4eW9LQmR1M2I0OXR0dk1YZnVYTVRGeFNFa0pBUjZ2UjR5MTd1YzBtRTJtd2tBcUZRcVFpbVZ1NjR6VnF2MVdZMUdNN1Z2Mzc3MUd6WnNpRVdMRm9GaEdMUnYzeDZQUFBJSXBreVpvaHh6L3Z6NTJMRmpCenAxNm9SWFhua0YvZnIxdytPUFA0N1RwMC9qMUtsVDZOYXRHeDU2NkNFODhjUVRXTFZxRlJZdVhJak5temVqY2VQR09INzhPQVlPSElqbXpadGp6Smd4K1BEREQ5R3VYVHQ4OHNrbjZONjlPMGFPSEltWk0yZWlSWXNXQ3JBVkZoWUNBSEp5Y2hSdzlIbTZJaUlpQXRuWjJmNVY3SmR5OHNYbm05R3NXVE1NR3Z3aTB0UFRzWHJWQ3JSdDF4NEpDUW40NzVhdE9IZnVMT2JPTGswMVAyL0JJbWx0RmJVWi90TFE4QTgvK21URjRFSFBmeXNwTWtTeVRqa0tDTjRIT0JHbGZGNFFRcWhLcFNKdXQ5dXJ4QUdnb0NDRWdkdmxnczFtUTc0cEh3QkJabVlHQWdJQ2NQRmlPbFlzV3dwQkZCQXMrUW1MaTR1aDFlbXdZL3MzK09tbjNkQm9OTERaYkNncEtZRldxNFhINDhIS0ZjdVFtNXVMb3FLaUd6NXV0MVJqODAzcEVFVVJBd2NPUk4yNmRXRXltWERxMUNrY1BYb1VxYW1wS0NrcGdkdnRSa2xKQ1pIQVFJbjRNQXpEQkFjSHYvTGxsMTh1MG1nMDllV0dGenFkRGhxTkJvUVFoVmxVbG43OStxRmJ0MjVRcTlWNDRva240SEs1TUhmdVhBUUhCNk50MjdabzBxUUpVbE5UQVFCSlNVbFl2MzQ5K3ZUcGc4VEVSRHoyMkdQbzJyV3I4dmw5OTkySFNaTW1ZZno0OFJneVpBaWFOR21DQ1JNdVYyazk4OHd6R0RIQzI2UFI0WEJVbUF1azFXcWxEbGwrOFV0cGFkMm1MWDcrNlVkODlPRkd1RjB1TEg1blNaVytKNG9pWnM1NEd3LzNmYlRlQXowZW5IWXE3ZHdBQURwcDAxQksxYUJVQllBRktLT2tSd0dFWlZYZ09BL3h1RDArcmY3c2NIczhjRGdjc0JSYWtKOXZRbEZSRVU3OC9SZkdqeHVENTU1L0FkMjZsYVl1bkRkbkZqSXlMbUx4TzB1aDFXcExLVE5qUnIrSnhvMVRNUEtOTjZ0bDNHNFpzUGttMzhvcEhTNlhDM1hxMUVHclZxM1F1SEZqUkVSRVFCQUVHSTFHNG5hN0pYWU83eE5IemxIak9HNThTa3JLZ3RUVTFDcDNxUEF0STVNSFBDRWhvWlJUVWdhYXZuMzdvbmJ0MnBnNWN5YWVlKzQ1dEdqUkF0OTk5NTNVT01NcjA2ZFBSMFJFQlBiczJZT1BQLzVZNlhOUVZ2UjZQVHdlVDduMzNXNTNwZjBSL1hLWEExdnJObGk1YWcxcUppVGc0NDgyNHUyM3BsYnBlK3ZYdlErZFRvZUJ6NzhBQUZIQndjRnZmZjNOOXNFQTlCSzRhUWtoYWtLSWlsTEtBbUI4QW5DRTQzaDRPQTlSSXFaT0p6aVBGK2hLaW90aHNWamdjYnRSWEZLQ3h4OS9BZ1FFSmRZU2hJYUZLZVpuaDQ2ZE1QS05VVkNyMWZCNFBBcHpiMGx4TVVhUEdZZmVmUjZDeStWQ21QU2RPeDdZZk11a3NyT3prWk9UZ3kxYnR1RGl4WXRLbmhySGNkRHI5UWdKQ1NHQWwvN2JGOVJXcjE2dDVqaHVPc013czBWUjFKWHRPSDVGKzF0VjNnS3ZyTmgzeVpJbDZOQ2hBekl6TTlHaFF3ZXNYYnNXdlh2M0xyV1AwV2hFVGs0T0tLWDQ5ZGRmS3oxdVFrSUNYQzVYS2RXYjR6aVl6V2JVckZuVHY0cjlVazdteloyTncwY09vMGVQQnpGNXlqUWNPblFRL3pUWDkrL2ZoNzIvL29vcFU5L3luZGU2SmsyYVRybjMzbnVITjJ2V1BCQlNPZ2lsVkEwcEhRUUFTMFdSOER4SEJJRW5QRmM2SFlUbmViamRic1drVkdzMGNEZ2NLQ2pJeDhXTDZkajl3L2RvMUxneEFLQkZpNWJLZWY1NTlDaVNrcEtoMFdnUUd4ZUgwTEF3YUNVTGF2KytmV2plb3NXZDcyT1RDOXA5YXorTGlvcVFuNThQaDhPQjVPUmszK1JiSW1zNGN2czdBR1RuenAxQlBYdjJuTW93ekxpaW9pS2NPblVLUTRjT3JmQjQxOHRPc0dUSkVreWVQQmt6Wjg1VTNzdkl5Q2dWd1h6cHBaZlFva1VMOU92WEQ2TkhqMGJQbmowckJLcVdMVnRDcjlkajM3NTllT1NSUjZSSnVCOE13eWpCRGIvNHhWY0dEbndCaXhjdndPZWJQNFVvaWhnemRqd1loa0YyZGpiR2pIb0RIT2RCY1hFeEJ2Ui9BdmZlZHg4bVRaNktsY3VYd3VWeTRiVVJMeXUvczNMMVdnUUhCMlBCb25kR3Y3Tm9vYWFnSUg5ZGJtNnUvSVNWbzZXOHROWUViMk1zd2V0aWsvYmhlWUY2T0s4NUNnSUVCd1VqTGk0ZW4yN3lkcEsvOTk3N0VCd2NESjduOGVwckl6Ri8zaHg4K2Q4dm9OZnJNWEh5RkVXcG1ETDFMY3lhTlFPY2gwT3RXclV3WWRLVU94dllLS1hseXFUazZHZHljakxPbnorUDFOUlVCQVFFUUJBRXVOM2Vwd1FoUkNiVEl5a3BLVFZtejU0OU5TSWk0azIxV28wcFU2WWdKQ1FFQXdaVTNMMDZLQ2dJQnc4ZXhLRkRoNjRKUE1MRHczSGd3QUhrNXVaQ0VBUXNYTGdRcDA2ZFFsT3BMOEg2OWV1eFo4OGUvUDMzMzZoWHJ4NDJiZHFFbDE1NkNkOSsreTBBNFBQUFAwZGhZU0ZHakJpQndNQkFEQjA2RksrLy9qcUNnNE9oMFdnd2ZQaHdEQmt5Qk9IaDRmNVY3SmR5VXF0MmJTeGJ2cXBDN2YrL1c3WlcrSjNQLy90VnBiOTN6ejJOOE1INmphKzUzVzdWNWs4M3JadisxbFN6dExaOGxBRUdsSXFDS0RLbHdDMG9LQWdhclVhMm5rQkFVQ01zREVsSlNZaUlpRUJNVEN3eU16TEFzaXdhTjA2cDFCL1l0R2t6ckgxL2ZiV08yMDAxUmE5VTBCNFVGSVRZMkZpSW9paWJvMFFHTlpabENhV1VYTGh3SWVMNzc3OS9LeTR1N3MwSEhuZ0FYYnAwZ1ZhcnhmNzkreXUxMDE5NzdUVWNPSEFBZ3djUHZxWnozckJoQTBwS1NsQzNibDIwYTljT05wc05reVpOd3A5Ly9vbXNyQ3lNR1RNR1U2ZE9SWU1HRGNBd0RENzQ0QVA4K09PUDJMQmhBd0JneTVZdFdMLys4azFjdkhneEhucm9JVHorK09QbzI3Y3Y3ci8vZml4YnRzeS9ndjF5VTBXcjFRNS9idURBbCtjdFdCUUZRQ3RWS2FpOXlvNVNwVUJFMFp0NTRHM0E3QTBvdU4zZUtnV0h3K0UxU3lXZm04bGtRbTV1TGpJeU1uRDJ6SmxiZW4wM2pkMGpMUzBOYVdscFNvczh1WnVVWENibHkzeGJKdm1XVUVySm1UTm5hdFNwVStjdFFzaEkvN1FzTGFJb0lpUHpFaXdXQ3dSQmdNdDVkNVpvNmZSNnNDeUw4Qm9SU0VxcVhXa1FSN1lldkdObUJzOVgzNWpwOUhxb1ZDcEVoRWNnS2FseTdzTzllL2VpYnYyYnoxcnJjYnMvMkxUcGsvZmZuajdOQXNCRkNIRkRhUnhEQkVJZ0VNSW9EV1BVYWhYVUdnM1ZhcVMrcFFFQkNBb01STERVemk4aUloS3hzYkdvWGJzMjZ0YXJqM3IxcXJlYXNiSSt2RGZGRkpWN0ZKVGxVNU03U1IwL2Z0eTNRb0Q0MnYzU0ZsU3ZYcjJwQVA3Vm9HWXdHSzY2VTVEYjdjRmZmLzBGVnFWQ2NFaW92NitvM1liQ29rSVVITTFIaStZdG9OR29Ld1MxUC80NENvWmxFUlJjL1dObXQ5dGd0bGlRWDVDUDFxMnV6RUNmYy9QekdWL3ExcTI3ZUhISWkycy8zTGhCV1lkZTA5UmJZZ1dJZ2loU1VHOHhQQlVFa1FpOFFKVnU4ejRrbFU2SEEzYTdEVlpyQ1lvS2kyQXVLQ2lWY1hBanBlWVZmcmZhZ1Mwcks2dFVqNEt5M2RrZERnZHExNjZ0YUdvZWo2ZFU3ZWZxMWF2Vnc0WU5tOG93ekp2d1N6bkpNK1NCVmFuOG5lQWxrWmtmaklaYzVPYmxJcWtDaHVpTEdabGdXUGFtalpudk9XVm1Ya0xpRmZxTDFreEl1QlhETm56cXRPbDhSa2JHMmwvMy9GS1poaXRjQmp1UlVpb1NTc3YzVWVBbFpsNlBoNFBMNDgyQkk0UWcvaVpIL2FzVjJJeEdvOUlpcjJ6amxRbzZTWkdLdU5Ra1VCdm5YN0lWaTduQWpLQ1FVUDlBbEpHZzRCQVVGSmdyQkRhTHhZTGdXekJtUWNFaEtEQVhYQkhZYnBrWnI5Tzk5djRINnowTjZpV3ZsN1ZhT2FCQXZkRUZLcGJLTXlFVUlBUWdjbGQ2RUVMQWVNa3N3VEFzV0phRmlsVkI1VFZmRVJVVmRlY0RtOXloWFc2Umw1K2ZYeW1kZDFtZm1tL3lMY013VS8zTHRESS9FU0FJd2wxdmZsYW1KUlVYV1NyODdGYU5XV0JnRUlvTExkZjAzWkxpWW1SY3ZBQzczWGJGMzA5S3JvdVEwR3NEYmIxZVB6cnQ3QVhYUFEzcWJwTHdUSmxxUG1NblhtN2Z4MUdPOHhBSitFQVlBc0l3RXJBeFlGa0dLcFhDMWd1TlJvUFEwTkE3RjlpY1RtY3BVQ3ZMcDFZSlNhVGNmSVZJdlFsZVlSaG0ycFVYOXRWVEtkOXVVbFdxNDRxRUVNRHA5SE81VlRvUEsrRzV1NVhCbFd1OVh4ZlR6OFBoc0Y5eEg3dmRob3lMRjlDc3hiM1hBYjZCbzArZU91Tm8wcmpoVmg5UW8yVTBPQkVBRlVXUjhEeFBuVTRIWVZtV01vU0FFQVlNUXlDWE5ubzNGVlJxTlRScURSbzFibnhUS01adk9MQlJTbkhtekJtbFRaNGMvU3lycVpXSmZzcU5KUmlKOWZaWmxtV253VnY2VWVseHJwRksrYmFUcWxBZFg2djh1UHNIYk55d0hpYVRFZkh4OGZoNDAyYzRkKzRzaGc0WnBPd3phY28wUFBUUXczNGt2STNsbjBETmR5NWRyMVVhR2hyNnhyRy9UdHBiTm0veXZhKzJWZ2JjQUVDa2xIcDlhcHlIZUhzclhBWTJobVhCTWhLd3lWcWJWb1BHalZPcXZhM2ZEUWMyWDFBcjI4ellicmRYU09mdDYxZHpPcDI5VkNyVlZBQlhOTWl2aDByNWRqU2Ivb25xK0Zva056Y1hDK2JQeGN4WmM5QzZkUnVVbEpRQUFPclZxNDhmZi80VkFQRFMwTUhWZGwwYjFxL0RZNC8zSzhWbUlwL1hzaVh2NE1TSnY2SFJhTkRqd1Y0WThlcHJZRmtXZ0plU1o4V3lKVGh4OGdTMFdpMTY5dXlGbDRlUFVENnZEdm1uWTNicDFCNXF0UnFFTUVoS1NzS1FvY1BRc1dPbmZ5dU9Sa1ZFUkx5NmN1WEtrdGRmZi8xQUdjMk5Fa0tvOUQrUm0yRHhIT2ZsSW1jSUpRd0JReVEvbTZTNUtjQ20xa0NyMGFKZS9mclZlZ0UzTkVFM0l5TUQ2ZW5wbGVhcHlkUkRVb3M4K0xMZlVrb1pxOVhhU3FQUlRBWHdqMWQ5QTZpVWJ6K0F1d0xWOFRVOVpOSk9Jekl5RWgwN2RvSkdvMUhLd0FnaFNtZWk2bnh5ZnJoeFBTd1djN24zWjd3OURUVVRFdkQxTnp2eC9nY2JjT2pnQVd6ZnZnMkFOeWR2MG9SeGFORHdIbXo3WmlkV3JGaU52Yi91d2RkYnY2cTI4NnpxTVZldVhvTWR1NzdEa0tIRHNIamhmR3o5YXNzdG1TZUVFTng3NzczbzJiTW5ldlRvZ2ZqNHEzdTRDNEtBMzM3Ymo4a1R4eU03SzZ1eVk5U0xpb29hdm1EQmdzYVM1U1RUakt1VnVsSks1VzcwaE9kNThKdzM5Y05US3ZYRGpzS2lRdnowNDI2c1hmTWU1cytmZy8zNzl5RkxPbTdXcFVzWStmcXJlUGFacHpCbTFCc29LaXBVenVHakR6Zml1V2VmeGpOUDk4ZXVuVHR1amNabU5Cb1ZVRE1halFxb3libHF2bDNhZlRxMEs2Qm1NQmhxNmZYNktRRGFWdlhtL051YzVvR0JRYkJacjU5UC92anhZNWd4ZlJvOEVzM000NDk2emN4K1QvVEhvTUZEcXZRYmh3NGV3TW9WeTJFdzVDRXhNUWxqeG81SFNwTW15dWQ3ZjkyRERSdldJZDlrUWt4c0xJWVBINEYyN1RzQUFFYSsvaXF5TG1VQ0FFYS8rUVpVS2hZSkNiV3djdlVhaUtLSXJsMjc0ZUcrZmFIVmFoRWRFNE5XclZzcm1lb1dpd1Uxd3NQeDNNQ0IwR2cwU0toVkN4MDdkVVphMnVscUcvZXJPYVplcjBmSGpwMmduaklOYjArZmhsNjkrOXgwWnBiazVHU3dMSXZkdTNkRHE5V2llL2Z1eU0vUGg4UitVd3F3NVNSbDM3L2ZmT04xMUt4WkU2ZFBuNElnQ2xjQzBOYUppWW5EeG80ZHUraWRkOTdKa2JVMkg1K2JIR0FRQlVFRUlieTM3cEV3bERBTUNFUEFzQXh5YzNOQkNNRURQWG9BbEdMRCtuV29WNzgrOURvZGxpNTVCNDg5M2c4OWVqeUlMejcvRE8rdFhvWEpVNmJoeEltL3ZYTnM0MGR3dTkwWVBud1lXdDU3WDVWQi9JWm9iRmFyVldIcThLMy9sRHUzWHltdGcxSktYbnp4UlRZaUltSXlJYVJ2MVk5WmNrTW5pOWxzeHVSSkUvRGNzMDlqM3R6WnR3emNLcU02dmhwcDBhSWx0bTNmaFRkSGpVSE5tZ25ZdG4wWHRtM2ZWV1ZRdTNEK1BONmFOZ1VqWG5zZHU3N2JqYWNHUEkweG85K0FTZEltTXpNek1IdldURXljT0FVN3YvMEJqenp5R0taT25hdzBwVm14Y2pXMmJkOEZBRml5YkRtMmJkK0ZsYXZYZUNjY3crQzVnYzhqTEt5RzF5bCtNUjBIZnZzTmJkdDY2M2dqSXlPeFl1VnE2SFI2WlVFZVAzWU16Wm8xcjdZeHY1Wmp0bTdURmg2T3V5V2xRNUdSa2NqTnpWVjhYYUlvb2thTkdxWDJPWExrTUtaT25naU80MkN4V1BEUzBDR3dXTHdSMlhlWExNUGtLZE9xcEJnd0ROUDd2dnZ1R3h3VEU2T1h0RGFmMGl1d0FCaHZSemlSdUZ3dTRuSzV3SEVlWWpHYmtaZWJDNWZUaGVMaUlnUUdCcUtrcEFRcXRScUNJQ0QxNUFsa1pHWWdMZTIwY3U4ZmVyZ3ZEdjkrQ0FCdy90eFp0R2paRWxxZERpR2hvV2pmdmdQK09ITDQ1cG1pbE5KeVZRVyttcHB2Qk5TM1E3dHZCSFRObWpXVENDSERic1JOLzJyTGwzanUyYWZ4N0ROUFlmNjhPWEM3WEZYNjN2dHIzOE05OXpUQ3A1OTlnYkhqTGhORm1veEc3Tnl4L2E1eVZPL2N1UjFkNysrR2poMDdRYXZWb25lZmgzQlBvMGJZdmZzSEFFQkVSQ1EyYlB3WWpWTlN3REFNSG5uME1YQWVEN0t5TGxYNUdLa25UNkpuajI0WTlQeHp1S2RSSTNUcGVuK0YrNjE1YnhYMEFRRjQ2T0crTiszNnEzSk1RZ2pDYTRURGR2M08rcXNXalVZRFFSQVFFUkdCVHAwNlFSVEZVa1NPQU5DcVZXdUVSMFJnNW96cEdEdm1UZlI3NGttRmFPRnFHNmVvVktybkZ5MWFOQkJlTGpkZmsxUWxZUWdqVWtvWWhvSEg0eUUybXcwdWw0c0VCZ2JDN1haRHBWTEJZTWlEMVdwRmRuWTJDZ3N0eU0zTlJXNU9EaUlqb3lBbkJSODZlQUJXcTNjODY5U3RoNk4vSEZFb2tsSlRUOEptczkwOFlEdDc5aXd1WGJxa3BIVlVwZmRubVFqb3dCdVZxM2JpeE4vWXN1Vy9XUHZCZW55NitRc3dESVAxNjlkVjZidm56NTFEaDQ0ZHk5MzQvUHg4N05qeHpWMEZiQWFEQVhGeHBWWCsycldUWUREa0FmQ3lQQnc5K2dlR3Z6d1V6ejM3TkFhL01GRFJkS29xS1UyYVlQZFBlL0RGbDF1Umw1ZUhEUlhjcDQ4LytoQy8vMzRJYytmT3I1QkRyenFrcXNla2xNSlNhRUhRTFhLSEpDY25vMUdqUnZqdHQ5K1VvRkJaNEIwK2ZBVCtQUG9IdEJydGRUMFk5SG85Qmc0YytLYkJZT2haZ2IvTnE3bDUvVzBNSVFTQ0lFQ3Qxa0FRQk9MeHVCRVVGQXhlRUhENDkwTTRmU29WRE1QQTRYREFaREtoVjYvZStPYWJyekZrOFBOSVRUMkp3RUJ2LzRUbXpWdWdaNjgrR1BuNkNFeWZOZ1VCK2dEb0EvUTN4OGVXbloxZExsZk50MVRLQjlSUVVRVFVicmQzbHBvWjM1QlphN05hRVJRVWpJQ0FBREFNZ3hlSHZvU0xGOU9seFpxSFJRc1hJTjlrUkdoWURZd2JQd0dKaVVuNCtlZWY4Tjh2UGtObVppYm16cGtGalVhRDU1NTdIbDI2M28rbFM5N0JzVCtQd21Bd1lQakxYcjYzdGUrdng0YjE2L0RubjBkaE5CaVEwcVFKTHFaZlFHUlVOTjU1ZHlrb3BWaTlhaVgrK09Nd09BK0g5aDA2NHJYWFI0SlNpbkZqUnVIK2J0M3h5S09QNGNTSnZ6Rm45bit3YnYySHQwVjNiVitKaVltQklTK3YxSHM1T2RsbzJkS2Jpckx2ZjN2eDZhWlBzR1RwY2lUVXFnWEFHeldzYUhHVkJUdTN5NFh2dnZzV2ZmbzhCSzFPaDdpNE9QVG84U0QyNzk5WGFyOHRYLzRYUCs3K0FjdFdyTHJtaE5PcmxhczU1cEVqaDZGUnE5R2dZY09iZm4ra3NrUDgrZWVmQUFDV1pjdFJ5OXRzTm93ZlB3WURueCtFczJmU3NHRCtYRXlhUFBXYWdrVk9weE5idG14UkFYamxyNy8rTWpSdjN2eFB5ZGNtU3Y0MkpXSktLU1VNdzhMamNWT24wOXVVbmpBTW9xS2lFQkFRQUoxT2g3Ly8rZ3VpSU1KaU1VTWJGNC9uWHhpTUJnMGE0bUo2T2k1bFppckhmVzdnODNodTRQTUFnSmVHdllpNmRhdGVVSC9OR2x0UlVWR0Z1V3FWZ0JvcDA2V2R5YzNOamRkcXRSTnhBenUwdDI3VEZqVnIxc1RMdzE3RTExdTNRS2ZUb1hYck5nQ0FPYk5ub1dmUFh2aDQwMmQ0L29WQm1DNVJMRC93UUErc2ZYODlhdGFNeDdTM1ptRHQrK3NWczJqVTZMR1lNSEVLa3BLVHNmYjk5YVU0cE5xMmJZY1pNMmNoTXpNREgzMnlHWmN5TTJHeFdHQTBHaEFZR0lBTkd6L0d4NXMySS9Ya0NSdy9mZ3lFRUV5Wk5oMmZidm9ZYVdtbk1YZk9MRXg3NisxYkJtclMvZkJxSDZLb2FOSUE4SERmUjdCMzd4NGNQdnc3ZUo3SEw3LzhqTlNUSjlDelZ5L0ZIMGtJd0xBc2lvdUxzUG5UVGRMdmxHYUtpWXVQeDZHREI4RnhIUEpOSnE4MnJOWGlrNDgvd3VlZmJ3YkhjU2dxS3NTK2ZmOURzMmJOTHB2Q083WmoyOWRic1hUNXlwdkdVMWZWWTdyZGJ2eCs2Q0RtejV1RDRhKzhla3NvM2ZQejh4V0EwbWcwQ0FzTEs5Y1E1Y0tGOCtqYXRSdis3N21CbURaOUJqUWFyZUpqdXc2cFc3OSsvUmRIalJvVlc1Ry9qVkxLTUF6RHlGUmpIbzhISE04UnpzUEI0M2JEWVhmZ3pKa3ppSXFLZ3QxaFIxRlJFUW9LQ21BMEdQREhIMGV3Zk5rU1BQbFVhVjVGanVPdzZaT1BRWWlYeDYxYU5UWkJFSkNlbnE0RUMzd2pvQldrZFpBeWFSMkVVc3BFUjBkUElJUThlQ052dUVxbHdveVpzM0Q2VkNxKy9mWmJESDVoSUdiTm5vczZkZXZpN0prMDlGemhKZXhyMDZZdDNuVzVZRElhRVIxemJXbTlXcTBXT3IxZU1Wc0RBdlRnT1E2eHNYR0lqSXpDeEFsandUSXNERWF2MzlIcm00ckE2REhqOFBxcnIrRDVGd2FqU1pPbXR3VFV5aWJvTHBnL0Z3dm16OFdEUFh2aHJla3pVTDkrQTd3OWN4YmVXNzBTaHJ3ODFFNU14TUxGN3lJbXhwdGYxK2VoaDNIeTVBa01IZklDV0ZhRnh4N3ZoL3IxRzhCU3BseG96Smh4V0x4b0lUWnVXSWZhdFd0ajNZYVBvTkZvc0dEaFlxeGNzUXhmZlA0WjFHbzF1dDdmRFlNR3Y2ak1yVVVMdldiZ3MwLzNMMjBtYnRxTTJOaTRHejRlVlQzbXlOZGVCU0ZBWW1JU3hvNmJjRVB6MklLRGc2dThiMFpHQnNMQ3d0Q2pSdzhBd1BIang4djEwbWpldkFXYU4yK2hySXV4NDhiZklQL3J6bTZ0VzdmT0FMRENSMnNUQVZCQ2lEZEdTa1VxMTR2eVBFOFp3cEFTYXdubE9RNmhvV0dJam9tRjNXNkhXcVdHV3EzR3JsMDd3RElzbm5yNmFiU1hJdXVBbCtKOCtkSjMwYng1Uzh4ZnNMaENiYk95Y2JzbVlQT05nRmJHcVZZRzFHUUdBTGxjYWpnaDVOVWJQVUZQbno0Rm5VNkhSbzFUMEtoeENyNzl0akUrK0dBdDVzMWJvSmhHaXBuRU1LQzQ4VngwZi8xMUhMdDI3c0RTWlN1ZzFla3dZM3JwcWpDSHd3RzFXZzJYeTFudEFOYXJkeCs1UTNncHFWKy9BZjYzLzhwOVREdDI3RlRwd3RWcXRaajIxdHVsM3F1bzRXMmJ0dTBxWkhtdFY3OCtsaTVmV2VGdnN5eUx2ZnNPM0ZTZ3I4b3gvMm04YnNRNTJPMjJLa1VxNWFxYjY1VlBQL3ZpbXI2blZxdUhiTml3SWVQRkYxL2NCaS9GcmtnQktyV1NwL0NtZ1lpaUtGS0JGOEFURG9FQkFVU3IxVkdkWGdlMzJ3V253MXVOb0ZLcjBLMWJkOFRHeHFGV3Jkckl5TGlJT25YcUFnQTZkZXFNVHAwNlYzb2VkcHUxVWovb1ZadWllWGw1Q2dXUmIxcEhCUkZRK0lDYW9xM1o3Zll1TE10T3JJN0prWFhwRWhiT253ZTczVnQrWWk0b1FHaG9LTFE2SGVvM2FJZ2ZwYWplSDM4Y2dWcWxRblQwUDJ0cm9hR2hLTWd2cUxDN1ZFVmlOcHVoMSt1aDFtaVFuNS92ellXU2lva05oank4dDNvbDN2OWdBdzcvL2p1T1hFWDR1bkxIYmdEOGNuVmpjeXZIckxKalIwZEh3M0dGV3VlQWdLcVp2RlhkNzNwL0t5Z282SlYzMzMyM2hSSk1rSnJDeUNhcG5BSWlpZ0xoZVFFY3o0UGpQUEI0WkFaZUZ4d09CK3cyRzBxS1M3d012UGxHS2JtL2FrbnFkcHNWMGRIUjF3OXNEb2VqRkZ2SFB3UUx5aVhocHFXbGhXbTEydkVBcXFVT3FtZXYzdWpjcFN0ZUh2WWlubjNtS2FTZVBJSFhSM3BwM0taT200NXZkKzNFNEVFRHNYSDlPc3o0ejV3cU9WSVRhdFZDMjNidDhQU0FKL0hDd0dkaE5CcXV1SCtuVHAyaDArdngxSlA5TUgzYUZOU3RWeDkydXgwOHoyUG0yOVB4MHN1dm9GYnQycGo2MXR0WXZIRCtkZnM5NUNlOVg4cFArc3BLc0poYk5HWjJteFZzSlJwR1hGd2NLQldSYjh5cjhOeVM2OVQ3UjlBS0NBaEVjcDBieDFqN0Q4ZU1pNCtQSC9UQ0M0TnF5T0JHeTRNYlF5a2xvaWdRZ2VmQmNiemtiL1BBN1hMQjVYVEM3bkRBYXJPaXVMZ0lGck1GSnFNUjJWblpTbCtGeXNiUlpNZ0ZDQ290UDd3cWF2RFUxRlNrcGFVaE16TlRxUVgxTlVWOUtneUlyTFZKdmpWR29pR2F4VERNaEJzeDZMZUtTcm02cFRLcTQ4cjlMWmt3V3l4K29za3lZalRrSWpJeUFvbTF5M09mWldSbXdteSsrV05tTk9RaUlpSUNTVmZnWXpPWlREQVlET0I1SGxicjdjOVc0M0s1VnZYdTNYczlBSWUwdVFCNENDRWNBSjRRSWhKQ1JJbGFYS1l2b2xxdGwxbzhJQ0FBZ1lHQkNBNE9SbzBhTlJBUkVZRzR1RGpVcmwwYnljbko1VFhGNEdDb1ZTckV4c1pXcXExZGxZOHRLeXNMMmRuWk1KbE1NSnZORlFZTFBCNVB1ZFFPT1ZqZ2NybWV1RkdnZHJYTzFqdEpydmE2RWhOckl6L2ZCS01oVjJFNXVkczFOWnZOQ29Ibkt3UTFBRWhLVElUSmRQUEdURDRuVVJDdUNHcXlTWHFsQlhzYnltdFpXVmxuYTlXcXRWZjJ0eEZDbElBQ0FIaFpQd2hrY0ZPcFZOQm9OTkJxdGREcjlRcXdoWWFHSWp3OEhGRlJVWWlMaTBPZE9uVlFTMG9udWxxcEVyQlpyVmFsc3FBc3FQbldnUHFtZHZpYW9FYWpzWlphclI1N3E1eXRkOUtpdk5wRVZFSUlXclZxaFlzWm1iQll6Q2l5V09CeTNaMGNiWHA5QUJpV1JXUkVKQklUcjd3ZzJyUnVqY3pNUzhndktLaldNZFByQThDcVZQK29xZDNKVXJObXpjRmZmdm5sMmFlZWVpb2JsNk9rTXJCUk9aTGdKYWZrS2NNd2hHVlp5cklzWEM1WEtTSktHZXdDQWdJUUhKdGcwTndBQUNBQVNVUkJWQnlNc0xDd2ExSmlxclNLWk5QVE53bTNnc29DWDFDVHF3c0lwWlNKaUlnWUE2RFZqUnpNNk9ob0dBekdmeDJ3eGNkZmZUb0RJUVIxa3BOUUp6bkpiNE5lcGJhYitDOEZtNXNwaEpDV2ZmdjJIUUJnRlFCQjZvL2dqWlpLcEpUd0VsTlNDZHpBY1p3Q2JpcVZxa0p3Q3d3TVJFaElDSnI0a0M5VVZmNHhlSkNWbFlXY25CekZuMVlacUYzQkJPMWZIYWtkaXJQVlpJRGpEbmVlTyt3MnJ6TVU5SVp4c2ZuRkx6ZFRkRHJka096czdNNlF5cTBvcFJwSXlidStnUVJCRUlnRWJBcHV5QjJ1SEJMTlVVbUpOMHFhbjUrUG5Kd2NoZUxvaG1sc2RydTl3bncxWDhKSUdkaDRuaTluZ21ablo4ZXExZXJSMVRXWTk5NTdMNHhHSTR3bUU2d2x4WGNrTmJqc0RFMUlxSG1uK1ZiODRwZFNFaDhmUDJqanhvMnBRNFlNRVNSL20rQnJscFkxU2FYcUJPcExSR20zMnhXdFRRNHNoSVNFSUR3OC9LcXFQSzRJYkdYejFjcEVQbjN6MVNveVFVbE1UTXdvQVBkVjUyREd4TVJjZFM5T3YvakZMOVZpa3JZWU1HQkEveUZEaG53QWdQY3hTUVhKSkJYaFpkMVZURktHWVloS3BhSXlDNGh2WUtHb3FLaVVyNjFSbzBaVkI3Wk1uNkpUWDhuUHo4ZVpNMmRLTVhlVTlhK1ZEUno0Y3F5bHBhWDF6TXJLR3UyLzNYN3h5MTBsTCsvWnMrZG90MjdkRHN2Z0JpbFNLaGZMUzAxZzVLcDVoVlB1Y3Zlcnk2WnFXVE8xcWkzOFZJbGhQNVI3aytNRjVGL01BbkVhUU54bUVFOHhDR2NESTloQkJCY2d1QURCNDkxRWpsQlJBQ2dsOGpiNC85cXc5YVAzalBMZlk3LzQ1ZTZUaEdiaS85VkxydkgzK1l1RlBBQ0JBQUpBWmJPVWdSZk5BQ3FDaWp5RjZDWVFYQlNDQXhDc0lJSU9qR0FCNGZKQlBMa2c3a3dRNXpuQWxvcjQ1RnBRcS82NTkwV0Z3WU9zYkFzTXBtS1lMVFlVRlR0aHM3bmdjTHJoZEhKd3V6bDRQRHc4SEErT0Y4RHpJZ1NCUWhRcFJFb0pCWmozbHcwZUNlQUIveTMyaTErdVRTaTljOCtkWlptdWgvZE1md1J5SU1FYlJKQURDU3lWaUNsRmtVSVFLSGhlQk1jTDhIQThQQjRlYmpjSHA1T0R3K21HemVaQ1ViRVRab3NOQmxNeExtVlZyVktubkkrdHVNU0ozTHdpRkJSWVVWamtnTlhxaE4zaEJUV1htNFBidzhQakVjQnhBbmhlSkx4QUlRaVVpSlFTVUJETHhYY2JzQ3p6aG45cStzVXZWeWNpQlF5V1NKZ0t3eUNJTEd4M2RqcmlvQVVMRmh5Wk9ISGlSYTlKNmcwbWVFMVNpSklGU2tSS3dBdUVjZ0pEUER4TDNad0tUbzhhTnBjYUpVNHRDbTA2RkZqMU1CWUZJdHNjQkVOeENQSks0bEFuZ1VOY2VBRXFxNG9zQjJ3NXVZVXc1WmZBVW1oSGlkVUptOTBOaDlNRGw4c2pnUm9QanVQQisycHJGS0FVaEFKTVNJaitOUUFKL21ucUY3OWNIYWdkTzFjZllNTVFGSEpuOThtVnBHWkM3ZVRISjA2Y3VCb0FEMitFVkg0VlFRZ0Z2RzM4Q0NFZ1VyTmxJdEVkc1NvMVZDbzFWR29OMUJvdE5Gb2R0TG9BaUNRUXhUWTE4b29Ta0djT3c3MzF6MWNJYnFWTVVXTitDUXpHWWhSWWJDZ3Fkc0JxYzhIaDhNRHA0dUJ5eTZBbXlDWW80YjBtS0tFaUpaU0NPUEpXZENlRXZQSnZtbkRqcG0zQi9YM2Z1V0cveC9NQ1JrMytBdEgxeGlHMDlwc1lQbW9USEE2UGYyWGY1V0lvakFUWU1NVEV4djlya3M2MVd1MmdQYi91YTQ3TFZPSWFTdUZESmU3Tm5oQkZrUWlDQUY3Z0NjOTVBd2VjNS8vWk8rL3dLS28yaXY5bXRtVlRJRTE2Q1VoSGFWSkUwQUFmVWtSQkJDc2xJQWdxTFlMU2xkNkQ5TjVFcFNnSWlpQktFWkFlbENJSVVnVUVFdEo3c21WbXZqOW1kNUpOSXlCTjJmTTgrMEIyWm5idTNwMTU1MjMzSENzV3F3V0xROFpQMVQ1SUpENHVqdVNVRkhRNkErZ0tjelBlTDlkenV4aTJHeEVKUk1jbWs1Q2dHclhVTkF2cEdkYk12SnJEc05udHNtQzNPMEpRR1VFQkFSQ05Sc1A3N2tzMGZ3d2JzNUZOUC96T3VzOTZzV2wxSDNidStaTitnOWU2SitZUlIxUjhvZitjVGk1QXVmTGxPMlF4YkFaUURHU3FXNG5PMWpCSmxnWEpMbUczMndXYjNaWlpGYlZtVmtWVFVsSklURXdrTGphV3lKdVJlUHY0M3Rxdy9YMDlUZzFCNDFKSlRFb2pKZFZDZXBxVmpBd2JGb3VqV0pEcHJTRkpNcktzT0FzY1lrYlV2RGNFZ1JmZGwyamVTRTIxTUcvcGJzTEdkeUM0Y1NXQ0cxZGk4YXpPckZ4emtKaFlOL1hRb3dwRkFVblMzNUduZHViMEh3d012ZmNwN1ROblRoTTJiWXJHYWVqRXhvM2ZFTkxsTFVLNmRuSVI1SW1Pam1iZ0J3TjR1M3ZYbGkxYXRtcE1GaXB4UlZIVUlvS2lpQTdtSHhSSHE0Y2syYlYyRHlmRlVZYWo1U00xTlpYazVDU05Vand4TVFtN3JNKzEwQ0lDV0cxMk5RU05UU0VoS1kza0ZBdHBhUmJTblViTldUQ3dTOWp0a21DWFpDUVp4N0lweEk4L2FxMHo2SFh2UGVnTDVPbm1rd2tkOWhYQmJjSUlxakdjSnhxTzRmdXRKN1R0ZFp0TVpQallqVlN0UDRyaWxUL2k3UGxJTEJZYll5WnZwbnpORVhnVTdVTzlwaFBac2R0VktOZG1rK2dkK2lYZUpmdFR2UEpIZkRwdmUrWVBHSlBNSzUwWDRsZjJBN3hMOXVlRlYrZHc0VktVdHIxajEwWFViVElSZ0dPLy8wMTZ1bzNnUnBXMDdjODJWRVh2RDRaZmROL2hqeWdFQVZMU2hEczZ0bktWcW93YU0vYWVqbS8rdkxrc1c3cUVTeGN2YWlTdUFGZXZYbUhEK3ZVc1dMU1VaY3RYY3VMRU1ZMDhkZjY4T1RScjlqOVdmcjZLZDk5Ny8xVVBEN09ITXh6RlVTRVZCRUVIT0kyYnl0c21TVWlPVlV3Mm13MnJMWXV5ZkhvNnFTbXBKQ2FxSVdsMFZCUUppVkt1T1RZOXdJMGJDVVRISkJPZmtFcFNrbG9GVFhPMGRsaXNkcXlhcHliaHFJSTZ2RFUxRFAxNDhFdTlLS0NDKzczR2dtVy9zSFY5UDVvOVY0WE5QLzdPSzEwV2Nuam5VR3JYVUJjN3o1aS9rNVVMdW1FeTZxbFVvU2c5KzMzQmp6di9ZT0duYjFHcFFsR1dmcjZQRjE2ZHcvRzlJNmxXUmVYck9uRDRJdVhLQm5CMHp3aU9ucmhLajM2ZlU4akhUTSt1alFrZDlqVVdxNDN3bjRjQzBHL3dWNFM4OXhuN2YxSVptanEycTBOOGdscmV1aDZSZ05Hb0o4QS84OGxzTU9nSThQZmkybzBFOXgzdVJnN0V4c1l5Y2NJNFlxS2pFRVNSOTk3clE0T25HM0x0MmpVR2h2YkhaclBpNit2SGlwVmZaS1k3aG56RWpSdlhBVlYweWRQTGl6VnIxd0VxcmYrY1dUTklURXJFMzgrZndVT0hhVm9XQU91Ky9vb05HOVpyK3dQMGZLY1hScU9Sc0dsVFhNYjIrNGtUUEZXM0xwNmVudGp0ZHZ4OC9UaHgvRGoxNnRYbnhJbmpmUENCU3VqajYrdGJyMFNKNGkwdVhicTBHYkE1WGxvaFFWRVUyUkdTT2xZa1NPaDBkdXgyR3phYkhxdk4wYWlibms2YVNRMUpFeElTaUltTndXVEl2YWRObjU1dTFYcldFcE95VkVFMW8rYklxemx5YTQ0UTFPbXRDU2YyZlZ4SXB4TjdQU3dYd2xzZDY5SHNPWldBOHNWV05XamVwQ29MbC8vQ29wbXE5bVdiRmsveVdudVZhQ1F1UHBYUFZoOWcxWklldk5SYVZmMmVOcTRqaDM3OWl5bXpmbUxsQWxVNXZWalJRaXliMHhXVHlVQ2xDa1g1N2ZnVjVpemVSYyt1amJsOE5aYlNKZjBvV2R3UFQwOGp5K2QyNWRxTmVHMDhiM1NvcC8wL0xkMktoNGMrbHlTckhvdlY3cjZMM2NpQnI5YXVwa2FOR29SMGU1dExseTR4Zjk0Y0dqemRrRktsU3ZIMStnMmNQMytPaWVQSHVSd3phY28wQUJJVEUrajlUZzgrR1BnaG9NcjJUUncvbHZFVEoxTzhlSEYrK25FckMrYlBZL1NZek9OcjFxcVZnM2s0TDRIbHhNUkVQRHc4aUk2T1p0S0VjVWl5aEk4alQ1aVltSWpKdzRQdk4zM0hqaDNiOFBUMGZMVkh6M2YyTEZ1NnhPbzBiSTVWQ1pJajM2YklpaUlJYWtpcTJDVzdZTFByRkwwekpEV29JV2w2ZWpxcHFTbHFTQm9majBFdmtwNHVZemE3amxHOEVhbUdvUEdKbVQxckdlbVpCUU9iemRtemx0VmJBOW5oclZXdFhMd25VTzFodVJEcTFIU2xvYWxlcFRpbnp0elEvcTc0ZU9aQzh6Tm5JNUJsaFliMXlyc2MwL2pwQ3Z4eEpsTlhzMjd0SUV3bWcvWjMvYWZLOGVlNVNHUlpac2lBbG56LzQrOEVQajZRTnEvTjRic2ZUbEM5U3U3TXJHWVBBMWFybE9OOWk4V09sNmZSZlJlN2tRUDE2amRnNTQ3dHJQeHNCWmFNRE1LbXp5alFjYklzTTJiMEtOcTgySmI2OWRWZzZxKy9Mbkh0MnQ4TUh6cVk3aUZkV0wzNlM2SnV1dW9MVktwVW1WYzZkQ3p3K0U2Zi9vT1JJNGJ5VHU5M2FkclV0U2QvMG9SeFhMNzhGMkhUWjJJeW1hcDA2OTdqZVZ3S0NZNEtxWm9TRTFDOU5tUlpRckpMU0hhN1F5dEJyWkphTFJZeUxCbWtwNlZyaFlURXhFUnVSQ2JtOU5qVW5yVVVraHplV3JyVFc3TTRRbEJuejVva0M1SmQ5ZGFjemJobndzZjQ2WFJpejRmcFFwQ3phVnRtV096b2RKbkYzNndHSkx1Vnovb1pXWVYramRuY1hiMWVSSzhYRVVXUnRpL1U1UHFaS1h5LzlYZCszUGtIdzhkK3kveGx1em04WXhpZTJZeFZxUkorWkdUWVNFaE13N2V3cDVhL2k0MUxwV1J4WC9kZDdFWk93MWF2UG5QbkxTVDhTRGlmcjF5QjBXaGt6TGdKdHp4dTJkTEZlSGg0MExsTDF5eTVZaHZGaWhWekNWdi9DUW9YTGt4R1JnWmgwMmRTcUZBaFRwdzRUbUZmWDIzYk00MGEwNkpsSzgxYkxGNjgrS3U5ZXIyN2MvSGloZFlzNGFpZExMeHRMbDZiWFJKMGRydmlVaVcxV0VqUFNDYzFOWTNrNUdUME9vR29hSmxpUlF2aDVXbks5TmhpWXBOSlNFeFhlOWJTclZyQndLWlZRZVZNYjAxV3ZUVm5idTN4Y28rOURUeitNRjBJNFVjdnUveDk2TWdsYXRmSW5VMjFZdmtpNlBVaUI0OWNjbm4vUVBoRnFsVEt6RHVjdmVENlZEdCs4bStxVlZZSklZZU0yc0Q1aTFGMGVlTnBWaTNwd2Y2ZlB1TFU2UnNjUDVtVFE2cDJqZEtZelFiMkhqaXZ2YmZ2MEFWRVVlRHBiRjZqRzI0QVRKbzRudkFqNFRSdi9qekRoby9rMEtHRExnL2QzTEJ2MzE3MjdON044QkVmdXdnV1ZhaFFnYVNrSkg3WnMxdkx0MzIvNlR1WFk4K2ZQOGZHamQ4VWFHeFAxcWlCMVdyRlpESWhTUklIRCt5blppMVZ5N1JXcmRyYU9JLys5aHRCUWVVd21VemwrL1R0MTV4c1JZVHNYcHZzOU5yVVFrSm1sZFNtQ2k5Yk1qSklUMWR6YlNrcEtjVEVKaE41MDlWcjA4Y25xQ3NNVWgzZW1zVmlVOWRzT1VOUW04TmJrMXk5dGQvMkRQZlI2Y1MzSDdxY3hJWmZlYWIrNHp6ZnRDb3JWaDNnNU9ucnJGclNJOWQ5Zlh3ODZOZXJHWU5HcnNmYnkwU2xDa1ZaL3VWK0RvWmZZdXJXRDdYOS9qaHpnNFhMOS9EdTI4RWMvdlV2NWl6YXhkSTVYUnhHTDVJK0g2NWhYdGliQlBoN3NXTFZBYnk5VFpwaFhQdk5FZUlUMG5pdlJ6QmVYaVo2ZEdsTTM4RnI4Zkh4d0dqUTB6djBTN3AzZWdaL1B5LzNYZXhHRG5UdTNKV3dzQ21zWGIwS1daWVpPT2dqUkZGMEtSNGtKaWJ5V3NkWHFQUFVVd3dkTm9LNXMyZVNrWkZCbi9jeVU5OXo1eS9DeDhlSFNWT21NZlBUNlN4YXVBQlBUMDhHWmhOU1BuYjBLQnMycktkOSt3NjNIRnZac2tHMGI5K0JkM3YxUkVIaDJXZURxVmV2UGdEdjkrbkg1RWtUV1BmMVY1ak5ab1lNR3c2QW43OS9oL2F2ZE5pK2NjTTNOc0RxTUc1MlZHVXJsVzFYYmRwMTVOcFVyeTFybGRSaXRXcTliVG9SNGhNa29xS1RLVjdVVjR1U2hGbVRYK1ZHUkR4Uk1jbkV4NmVTbUt3dWVrOU5zMnBMcVRJc2ttQzFTdGp0aWlESmlxZ29pTmJvK2YxME9qSHNZYm9Jbm00K21TZXFsdURDWDlFY09uS0pHdFZMTVgxOFI1NTlSbTJwcU50a0lpKzNxY25Jajlwb3gxaXRka2FPLzQ0dnZqcEVRbUk2dFo0c3pmaVJiZmxmc01yOTlPSEk5Wnc1RjRHZnJ5Yy8vM0lXblU1a2FHZ3IrcnpUQkZEYlBRWU0vWXJ0dTg2UW5KSkJuWnBsbURhMkE0MmVWbVhRT25aZHhPV3JzZnk2ZTdnam4yWWpkTmpYclBubUNLSWcwTEZkSFdaUGVRTVBENFA3TG42RXNlZDQ1ZitrNmxwdWlJK1BuMWpqaWFyZkF5bEFLcEFtQ0lJRlZkM0s3bEMxa25VNm5XSXdHakVaVFlxSGh3a1BzeGxQc3lkZTNsNzQrQlRDdDdBdm9nZ05hMG1VRDNxTWFsVktVRDVJcFRVU3hvOTh5WFVabGNON1MwMnprcDVoSlNQREpsaXNFamFiSWtpU0xNZ3lZdWZYNitrL1c5RGpNUERrdzJiWVdqV3Z6dWloTHoyeU40aWlnQ0M0di92RE1tY0YvZXhIeWJBcGl2SkhvNFlOM3YvNzc2c3BEdU9XSmdoQ09tQkJsZXlUUkZHVVJWRlVEQWFEb2hKUGVpZ2VIaDZZUGMxNGVucmg3ZTFONFVLRkVRU0Zlay9LbENubFQ2VUt4YWo1UkdrOFBBem9VeHk1dFl3TUcxWkwxdFVGV1JhNVordGJXenFuVzVlSHphaGxoK0RiKzEvM2cwZWVtMGJSSXJlL3JFWlM5RnlPcWt4OGtoNUpGc2xJZnpSVnFqek1ablNpZ244aE8wRkZ6aUlLZWJmUXlBcGNpYWxNYklJSlNkYmRzemxUeHlRVFdOaEMyY2ZPM3RMSVhiOTI3Vkg0cWFvdldMajQyUmZidE5ycHlMWFpGRVd4Z1dBWEJMV1FJTXV5QUNnMm15M1RJT0pZNlNTckt4VThUQ2ExdVRsRklqRXBrOW9vcUV3Zyt0UTBpNE81STF0dVRaS1JKRm1RSk1XeHlrQjlvU0RxOWJvdUQvMVRJV0hSSTNFenA5djkrUDFDS2ZRR0Qzd0t1M1ZGVTFOVGlFOU9JaWFoS2pVZnY0cEpuNWlyVWZ2MTNCUG85T2I3TW1lcHFTbkVKaWNSRmY4RTlTcWR5dGU0bFN6MWFCRGpGQzlSb2czd2k4T3dXUUc5SUtESDBkZUdxbXdscU12UUJRVUVRUlFFUlJUVmJnUlJwOE5pdFNLZ2tKb21rWnljUVh4Q0dqRXh5WlFxNFllWW5tNVR2VFdyU3lNdWRydUVKTWxxSmRSQm5xU0FrSFp6Ym11ZzhjTTRXWWQyREgza3d0REl1Q0xvRFI3L0tWYUlmd0l2TDIrS0ZpdUJUdTlCUkZ6dWlsK1hvNnVoMDV2djI1eGxqc25NbFpqS3VBR2lLRGJjcy9kQUxUSkpLQTJLb3VoUUs2U3FOVk1VRkVWV0s2U3lNNHJNdXBaVWxTUklUN2VSa3BwQllsSWFzZkdwUkVZbElhWnJQR3RxejVyTkxtR1hIRWJOR1lKbU1uZ0lSb1B1VGZmUDh2QWdOdEgwbjJTRitLZnc5aWxFVEtJcDEyMXhpZm9ITW1mZVBvV0lTVEM1Znh3SFNwY3VuYjMxdzhuOG9YT3lmamhvalpBbHRmM0Q3bGdrYjdmWnNEcGFRTkl6cktTbVdVbE95U0FoSVkyWTJHVDBGa3NtZWFUV3M2Ym0xZ1MxYjAxeFdFNkVoQ3N6bnhRRTRkWGJDZ2tmNFdUMnZaNGZTZFloeVRxM3A1YUhsNVFZSDRzc2d5aTZ6dmVEbWpOMVRIRjM5SnNuSlNaeSthK0xwT2Fqb2V2bDVVMVF1Y2NwVkxqd1hSbnZ2VDZud1dCb3UvYXI5Vis5OFhySEMyUlNoK3NGUWJBN3dsRlpsZXhUQkVtU0ZVbVNCTWt1S1U2dnpXNnpBUW9XaTB4NnVwWFVWQXVKeWVuRXhhV2lWM05yV1pkTnlRNXZUVmFMQmdvNCtkYTh2RXl2RjJUQS96R0s0M3Y3RlBjRW5VNmlpRzlDdmxUSHVVRW5Tbzlzb2FBZ1NFOVBkekZxb0JxVUJ6bG42ZWxwZC9RZysrdlNCZExTVXZQZEp6VTFoY3QvWGFSR3JUcDNaYXozNDV5MTY5UitEcmlhSmRkbWRYaHRrcUtvdVRaRmtSVlZ4VXB5cFRheTJ4RlFzRmdsTWl3MjFXdEx6aUErTVExOUZ2MENOYTltenl3YXlBNVhFQVZoODFkOVBFUlJlTDBnUnUwL1JuRjh6NUdhbWtKRWdsKytWTWQzaXUzYmZtTEY4bVZFUmQya1JJa1NmUDdsR3M2ZlAwZVA3aUhhUGtPSGorU0ZGOXE0ZjRpSEdMY3lNRm12cFgvVE9UMDl2ZHEwZTduOSt1KyszV2pKekxWaEV3UkVVQnk1TmtGUUZCbEpraFZKbGdTN3VrZ2V1OTJHQUZpdE1oa1dHK25wVmxKU00waEtTa2VmblVEU25pVzNsblg1VlBPbTFWNEZTdDlxb0ZrcGp0MG9lSWppNWVYTnpVaVptL0YrRlBPUHZ5dWZlK1BHRGFaTW5zaVljUk9vVjY4K1NVbEpBRlNvVUpIdE8zY0Q4RTZQYnZmc2V5MWZ0cFIyTDdjbklDQWd4N2htelpqT3laTy9ZelFhYWY1OFM5NTd2NC9HS25IdDJqWG16SnJCeVZNbk1abE10R2pSa2w2OTM4dkJPbkUzY2F0elB0ZTRJUWFEQVVFUUNRb0tvbnVQbmpScTFOaDk4ZjV6bEJyNThhZ0czMzI3Y1JmYUVpdEZEMEttUG9KS0lhNWt6YldwaStRbFFNRnFrN0ZZN0dSWWJLU2xxN2syMFJtQ1NwS2MyZUloWjdaNDRHengwT2tLdE9UL3YwcHhmRi9DMG55b2p1OEVaLzg4UTJCZ0lJMGFOY1pvTkJJWUdPZ0l4d1JNSmhNbWs4bGxMZUhkeG1jcmxoRVhGNXZqL2RHalJsS3lWQ2syZnJlWnhVdVdjK2pnQVRadCtsYjErR1dab1lNL3BGTGxLbno3M1dibXpKblBudDI3MkxqaG0zczJ6b0tlYys3OGhYeS9aU3ZkZS9Ra2JPcGtObnl6L29GY0o0SWdVS2RPSFZxMGFFSHo1czBwVWVMMm5BaEprdGkvZngvRGhuekV0Yi8vdmk4cGdiRmpSdkhXRzYvUnZWc1h6cHcrclczNysrcFZ4bzhiMDR3czFWRWM2MGVkREx1U0pBbVNKQW1LSWd1U2F0d0VwN0N5SktrUnA5VnFkL0hhTk1QbTB0NGhPU20vMVJhUCtLc3puaEFFV3Q3cUMvd1RpbU0zVk04dEw2cmoyOEh4NDhkNHVXMGJwazJkVEdSa0pDKzNiY1BMYmR1dzhyTVZCZjZNUXdjUDBQbXROMmplTEpnZTNVUDQ0OVFwbCsxN2R1OGlwR3NuWG1qMVBOMjdkZUhRd1FQYXRuNTkzK2ZsdG1wbys4R0EvcnpjdGcxOTMzOVhNeUxCd1UzcEd0SU5rOGxFa2FKRnFWdXZIdWZPbmdVZ0xpNE9QMzkvT25YdWpORm9wRlRwMGpScS9DeC8vbm5tbnMzNzdaelRiRGJUcUZGamhnMGZ5WkxGQzEwWVplOFh5cFVyaDA2blk5dTJiZXpkdTVlYU5XdGlNQmh5TmRpNS9YOUEvNzc4c21jM1o4NmNScEtsMnpwMzQ4YU4wZXYxZVQ0Z2N2dDczZGRmNGVucHllcTFYek40OEZER2p4dUQ0cmpJWjg2WXpzdnRYMm0yWnUyNjBtVFRId1YwZ2lBSW9pZzYxNDRpYXpVQVNYczVxZFdzRmpzWkdUYlMwcXlJem9LQlhTc1lPTFVNdEtLQjRPM2wwYjVnVDVJN3B6aDJRMFZLcXZDUGMyeTFhdFhtMjAxYkdCQTZrSklsUy9IdHBpMTh1MmtMSWQyNkYrajRpeGN1OFBISTRielhweTlidG03ajFkZGVaK0FIL1RYdXJpdFhMak4rM0JpR0RCbk81aDkrNHFXWDJqRml4RERTMHRTay9KeTU4L2wyMHhZQVpzeWF6YmVidGpCMy9rSUFSRkdrVStjdStQcXFudWxmZjEzaXdQNzlOR2p3TkFDQmdZSE1tVHNmRHcremRuTWNQM2FNR2pWcTNyTTV2NU56MXF2ZkFLdk5waG5rKzRuQXdFQnUzTGpoY0NaVWlpMC9QMWRQLzhpUmNFWU1HNExOWmlNdUxvNTNlblFuTGs0VkcvNTB4aXlHRFI5NVJ3NUlRRUJBbmw3K2h3TkRPWDdzcUdiTUZzeWY1N2llem11L2I5VnExVEVhalZ5N3BucUs1OCtmbzBHRHA2bFZ1MWFEWEx3MkVSQVZCVUVRQkxYdFE4bGFSSEMwZ05pemVtMTIwak9zaUhaSjFzUlpuR0dvckdTeWVLQW9naWdLTC8rVEgyTFF3RkJlNjlpZWtDNXYwYlh6bTJ6Wi9MMlcxM2l0NHl1MGIvY2kzVVB1N1dLRzdpRmR1SGp4OW5RRnR2MzBJNjkxZklVWFdyZGc5cXk4Q2Y1MjdOak82RTlHL21lTTYrYk5td2h1MHBSR2pScGpNcGxvMWZvRnFsU3R5amFIa0VkQVFDRExWM3hPdGVyVkVVV1JsOXEydzJhMTh2ZmZWd3Q4amo5T25hSkY4NmFFZE9sRWxhcFZlUzY0U2E3N0xWd3dEN09uSnkrMHVYODZRUVU1cHlBSStQdjVrNUo2LzBWNGpFWWpraVFSRUJCQTQ4YU5rV1VaazhtMVA2NXUzWHI0QndRd1p2UW5EQm80Z1BhdmRNRGYzMTg3L2w2Z1Q5LytUSnd3bnJselpyUDFoeTEwNmFvV3FCNnZVSUZmOXV4QmxtVXVYYnJFelp1UnBDU3I4L2I0NHhYWXMzc1hYbDdlemJNWk5YMm1jY3ZzYVZOa1J6anExRWVRVk1kTVZaS1hzRmh0cEdmWUVMTVlOYTFnSUN1QW8yaVFHakczR1hlQklmZWpJY05ZK2NWcTVzeGJ3T2NyVjNEcDBpV04zbmhxMktjUDVRM2VvbVVydmw2L2dXN2QzdVpSUW1Sa0pNV0x1K1p0eXBRSklqSlNaUlgyOXZibXQ5OStwWGV2SG5SNjgzVzZkZTJjYXlpU0g2by84UVRiZHV6aXEzVWJpSWlJY0ZFNGN1THpsWjl4K1BBaEprNmNuR2Y0YzdkUjBITXFpa0pjZkJ6ZUR5anRVcTVjT2FwV3JjcisvZnUxb2xCMnc5dTc5M3NjL2UxWFRFYlRQM293bU0xbU9uYnNTTWVPSFRFWURMUnIxNDZPSFR2eTJHT1B1ZXozZUlVSzZqM3oxUnA2OVg2WFFvWFVYUHVycjcyQlRxK2plN2N1ZlBINVozaDdlMlAyVkwzalFSOE81dWVmZC9KMjk2NVZ1b2FFVkhFWXM2eDVOcDJpS0NwWG0zTTFnaXdqT1VOVFdkWTZPbFN2VGNKaXNhR1hzcXd5Y0RUa09zTlFBTUZrMHJlOW16OUk0Y0srUFBGa0RTNWVPRS81OG5tVEt5WW1KakI1NGdTaW9xS3cyMjEwNnR4VlkrTThjK1kwTTJkTUp6MHRqU0pGaXpGMDJBZ3RNYjU3MTgrc1h2MGxsb3dNcWoveEpCOE0vRkRMUCt6NmVTZGpSMzlNZW5vR2ZmdjExN3lFYjlhdlU1UFhpa0xUWnYralcvY2V0L3dlUjQ2RTgrbjBhWWlDU01sU0pmRTBlMnJiOGh0RDgyYkI5Qi93QVV1WExFSlI0UHN0V3g4NncxYTBhRkVpSXlKYzNydCsvUnExYTZ1OVNudC8yY09xTDc5Z3hzelpsQ3F0RnNxZmE5d3cxNXNydTdHelpHU3dkZXNQdEc3OUFpWVBENG9YTDA3ejVzK3piOTllbC8zV3IvdWE3ZHQrWXRhY2VYZXQ0ZlJXdUoxekhqa1NqdEZnb0ZMbCs3OUV5bXExWXJmYk9YcFVEZnQwT2gwV2k4VTFwWkdTd2tjZkRhUnpseERPbmYyVEtaTW5NblRZaURzcUZxV25wN04rdlZvb2FkZXVIVC84OEFOWkY2ZG5qWEIyNy9xWjhSTW1NVDFzR2hNbVRhWlNwY3FZeldhR0Roc0JRRkpTRW0rODFvRVNKVW9DVUtwMGFUNmRNY3R4Myt4cStQbktsWDlrTld5Q0lEakNVVVhJR25xcktUTUpSUkdRSkFXN1hmWGFiRFk3Rm90ZERVVlZiMDBXSEVVRFRhaEZVUlJSRUlTN0dnTkVSMFZ4NnVUdlZLbFNOZC85enAwN3gvK2FQOCt5RlN1Wk0zY0JzMmJPd09wWUd6YnE0eEdFaGc3azh5L1g4TXd6alZpeWFJR1dyMW0vZmgxejVzeG41UmVyQWZoaHkyYnRNMzE4ZkZqNXhXcEdqeG5IL1BsekFaVlliL1BtVFN4Y3RKUWx5ejdqdDk5K1k5ZlBPL01kbThWaVljSzRNWXdhUFpZdlY2K2xUT215MnJaYmpjRnV0eE1WRmNXNmI3NWwvVGNiSDVqeGNuWnZBeWl5ak4xdTE0eFFteGRmWXMrZVhZU0hIOFp1dC9Qenp6djU0OVJKV3JSVTYwZXhzYkVJQW9nNkhZbUpDYXhlOWFYamMxeXJIc1ZMbE9EUXdZUFliRGFpbzFSSlFxUEp4QmVmcjJUdDJ0WFliRFlTRXVMWnUvY1hhdFNva1JrS2Y3K0piemR1WU9ic3VWcjRkTS9EN3dLZTAyS3hjUGpRUVNaUG1rRHZkOS9IeSt2K0U0UkdSMGRyQnNwb05PTHI2MHRDZ3F2SzJjV0xGd2dPYnNwYm5Ub3o4cFBSR0kwbUxjZDJyM0R5NUVrK25UR0w1NEtiTU9MalQvanQxeU11MjVPU2twZzJkVEl2dnRRMlJ6ajg5OTlYV2JaMGNiTXNJYWhXUkhCNGJLSWdDQzdMckZRYU5kbFJJM0ROdGVuVlNxaXNlV3V5eW1FcEFFSjY1THpXUU1tNzhhV25oMDNGN0dIR2FETFNwMjkvU3BjcGsrLytOV3ZXWXZteUpXemI5aU02blI2TEpZUGs1R1FTNHVQeDl2YWhhclhxQUx6VXRoMU5telVENFBEaFExejcreXJ2OW41SGU3SjVlL3RrNWgwYzdKNVZxMVhURXVIaDRZZDQvdm1XbU0ycWEvemlpeThSSG42WXBzMytsK2ZZcmw2OXdtT1BGZEdNYzVWcTFkajN5NTRDalFHZ2EwaTNlNWJuS0FpeU4raE9tVHlSS1pNbjhueUxsbno4eVdncVZxekVxREhqV0RCL0xwRVJFWlFwVzVhcFlaOXFNbTJ0WDJqRHFWTW42ZEc5S3pxZG5uWXZ0NmRpeFVyRXhidmVPQU1IZmtqWXRLbXNXTDZVTW1YS3NIVDVTb3hHSTFPbWhqRjN6aXkrV3JzR2c4RkFjSk9taERqQ2ZVbVNtRFpWRFFQZmZOMjF3K2p6TDFkVHJGanh1ejRmQlQxbnZ6N3ZJd2dxYyt5Z0R3ZmZ0VDQyUlFGdno0S1h3aTlmdm95dnJ5L05temNINFBqeDQxaXQxaHozdzYyQXVRQUFJQUJKUkVGVVQ4MmFLazIzWHE5blVEYW0zRHZGZDk5OWwzY3VQY3M1YXRXcVRhMWF0YlcvRnk5YXdPNWR1L2hmOCtkekZMSDY5M3VmbE9RVVFycS9YV0wwMlBGUE5ubXUwYS9aOG13MlFiWGt6bkJVVVlzSU1vS2dlbXlTbzFiZ3pMWHBKYWZ5bEhQNWxKcGJBeENNUmwzcnUzWHhEUHB3c0VZYlhCQ3NYYk1LdTgzT2xLblRFUVJCYXg5d2hqaE9HQXdHL1B6VUo2ek5haU80U1ZOTmJpeS94Ry9XRUNtcmR5NElnbGFLemkrL2tsZXphRUhHSUdaZjUzT1AwTEpWYTFxMnl2a1RWcXhZaVYvMkhjejMyRWFOR3VkNTQ1cE1Ka1orUE1ybHZYZDY1ZVMvcTkvZ2FiNWV2eUhIK3hVcVZtVG03TG01ZnJaT3AyUFAzZ1AzMWRBWDVKeTNtcTkvQWtFQXZjNU9hbXBLZ1NxVmlxSnc3Tml4ZjN6ZVZXdSt1bTl6M0t2M2UvVHFuYnVtK3V3NTg3T21LdW9CeDdPRm83cHM0YWlneUxJaVNYWkVRVVNTQk1maWdreXZUWlNkWWFpakdxcVN1V2xoYUdzZUVLS2pZL0QyOFVZUUJJNGZQMFpTVWhLS29sQzZUQm1TazVNNWYvNGNBRC85dUZVVGNxMVh2ejQvNzl6SjlldXFXT3pPblRzNGVmTDNmTTlUdDI1OXRtL2JSbnA2T2phYmpSKzJiS2Erb3pTZEY4cVdEU0k2T2xvcnVVZmN5SlQzdTVNeC9KTW52VGxMYnMrTjdFbHZ6eHc5Z1E5NnpuSWJFMEFSM3dSU2svTVd6ZmIwTEZqSVc5RDk3dVpuM2Mxem1qdzhtbVR6MXB3OWJhTGo1U0RsVUFSSmtoQUV1eUE3bzg0c1hwdGVDME1WQlNWTEdKb1dNYmZwM1FwRDgwSitnaFN2dmZZNlk4ZU00b2N0VzZoY3BRb1ZLbFlrTVNHQndNQkF4b3diejZkaDA3QllMQVErRnNpUW9XcGlza3FWcXZUclA0Q2hnei9FWnJkUkxxZ2NnNGNPeTNjTVQ5V3RTOHRXclhtM2wxb3dlUGE1SmpSdDJreExoaTVkc3BpVTFCUmtTV0xmM3IxMDZSckNTMjNiTVhUNENFWU1HNEtmdno5NnZVNHJIdHpKR1A3SmsxNFU1UUkvNlI4bHBLWWtJNHB5anA1QWRjNmtCekpucVNuSjZFUXAxejdGWXY1eDNJajFKeXBTd2N2SEw4Zll5cFd2Y010RjZaNmVYcFFyWCtHdWpmZEJuQk1vc1gzSHJzclBOMjk2Z2l3MFJrNmpwaG8yQkZtV0hlNGJTTEtnZFhZNEs2UkNrVUF6RnF0ZHNGcGw3SklpeUtwWWk4NFdzMkNTS0FvZjNPNm9IaVh1OW51QmkrZi9KTGhXd1pzK0wwZFZKamE1a0h0dGJqYmNqTHhCUUtFa2doN0xPWmVYb3lzVG0zVC81eXkvTVRtOXlhajRRa1RHQjJDVGpLUStvc1F0NmVucFMxdTNicjBLVlE4aEdWWHdKZDBoK0dJVEJDUlJGR1NEWGxDTVJoR1RVYStZUFF5WXpRWTh6U2E4dkV6b25XR29rb1hKUTFFVVVSU0Y1dmM2Q2VwR1RuaDdLcmZGMTFVbThEeFI4ZFc1R1hrRGJ4ODNOWGhxU2pJcEtjblliUm1VQ1RpWGV5b2g4Q3hSY1UvZXR6bHpqa215cDFNMjhHeStIbmhSL3lTSytpYzk0cUk4U2tQZ3F5emhxTTdCOXFGV1J4RWNDK05CbGhWRlZwdDJGVWxTMUFxcFhVS2ZyU2tYQllTNHl6T3FjUWRpTGJlYkJIVWo1dzJnMTlsdjY0SVdSWm02bGM1d09ib3ljWWxXRXVMaXlNaDROQi8xWnJNbm9pZ1RVTmhHMmNmT0lRcEtudGRwdlVvbnVSSlRtWmdFeXoyZE03UFpFNTBvRWVCcm9XemcyUUwvdG84eU9hc2dDTlczcnU5YnZIWEh1WDlweGsxQmgrRElzWUVnS0tyTmttWFViZzVIWmRUNTBxdlUzOW5XaG5wN05MblRRUlh4VFNBaUljRnQyTzRBS1NtSmxQUzdmY29pVWJCVHZzZ2ZsQy9pbHQrN0hjTVI5TmhaZ2g1N09PVDMzSERGVTdXQ3FnRi9PdzJiQWpvaGF3RkJ6YlVwaXFOTlRYS3NSbkQwdHlFNnZEVUJiVzBvZ2s0VW43dlRBUlh6ajBPUkVvaTZlWTIwQjdDTzd0K0l0TlFVb2lLdWdwUklVYjkveHNYMmFEL3BINzQ1Y3h1MU80T3ZyMmN0MUtLQm5zd0NnaXIwb3RHcEtZS3NJRGk4TmtHV2xTd2VtNU9leU9HeERlclhUQ2NJQlArVEgvS3BTcGU0R2UvRHpmZ0FraE9OcEtTNmY2aTg0TzBGQnAyVlVvRnhGUEZOY2srSUcyNEFCcjJ1WWMzcXhRd24vb2pVWndsSFJRUkVCVVVBUVZBVXh4SXJ4Ykc0d0VHN0pza3lncGRaSjlqc2lpQ3AxVkF4K2Zyc3BwNW00NC91cVhYRERUY2VKSTZldU5MbnFlQ0pwOGhTSFJVRTBnR3JJQWcyUVVEV2FkVlJIUjRtdmVMaFljQnNOcUszUzFrV3ZpdUtjRE1xc2VIOTZveDN3dzAzM01qVGF6UG9LZ04vWmcxRkZRVlJFRkE3T0JDUVpRVzdCSUpOUmhEc2FzZ29nT0RoNFNIYTdYWkJVUlJSVVJTZDNXN2ZKQWpDOCs1cGRjTU5OeDRrN0hiN2JvUEJNREdMeDVZaUNFSXFZQkVFd1NvSWdpUUlncXpYNnhXajBhZzQ2TzRWczltTTZGd1hxU2lLOE9xcnIrb0VRV2pvbmxJMzNIRGpRVU92MTljdFc3WnMxc0tCVmtCd09HS3VWRVpaWG9MUmFCUWxTUklWUmRFbEppWTI5UGIyM3VXZVVqZmN1UDlRRklYSXlFaHUzb3hDa2lSU1VwSWYrVGs1ZGVwVTc3NTkrNTUxZW15T1Y3b2dDRmJBN3ZUYWREcWRvdGZyTVJnTWlzbGtRcCtWeWNMRHc2T3UrL0p5dzQwSFk5U09IVHVHZ3FDdGhuRHI4WUt2LzJQbGdRdGthZnR3a0U5cWpUU0NJQ0FJQXFLb1E2L1hvOWNiTWhlV0FvSk9wM3ZxMy9qbFEwTkRhZFdxVllIMlRVbEpRUkFFZHUvZWZjZm5xMVdyRnBNblQ3N1R2QUdob2FFVUtWS0V3b1VMMDd0M2IwMEV4WTFIRjVHUmtTZ0lGQzFXd3QzY25nVStQajZWczRXaG9wTjRNcXZ0VWhtSlpMV2ZUWkhWSEp0em5hZ2dDSFhjVTNsdk1XellNRFp0MnNTNmRldll0R2tUTzNmdXBGKy9mdTZKZWNRUkZSWHQxdVBOQlFhRDRRbHk1dGl5R1RVRmxXNU5RVkZrRkZuV2R1RDgrZk5GZ0VydXFieDNTRTFOWmQ2OGVZU0ZoUkVjSEV4d2NEQ0xGeTltNWNxVnhNVEV1Q2ZvRVlZa1NYZmtxWjA1L1FjRFEvdmY4L0dkT1hPYXNHbFQyTzVRS25OaTQ4WnZDT255RmlGZE83a0k4a1JIUnpQd2d3R0VkTzFFM3o3dmNmWHFGVzNiaVJQSDZmbDJON3FGZEdiMEp5UHoxV1lWQktIQ3lJOUhlZWRqM0FBRUhBc05uTTI2enFxb1VLSkVpU2YvS3hmSmQ5OTlSLzM2OVRHYnpYaDVlZEc4ZVhQT25YTmxldmpsbDErb1ZxMGFIaDRlTkd2V2pMLysra3ZiSnNzeVk4ZU9wWFRwMG5oN2U5T29VU1AyNzkrZjY3bWlvNk41NVpWWDhQUHp3OXZibXhkZWVJRUxGeTVvMndNREEvbndRNVZOOTlpeFk2U25weE1jbkxtdzQ5bG5ud1hnNE1HRDdydjdFVVp5OHAydE9xbGNwU3FqeG95OXAyT2JQMjh1eTVZdTRkTEZpeTVHNk9yVksyeFl2NTRGaTVheWJQbEtUcHc0eHBFajRZNWo1dENzMmY5WStma3F1blYvbXltVEptcXBtRWtUeGpIeWsxRjh0dkpMU3BVdW8ybG01SVZubndzdTRUQmtMb1NUanJCVVc0R2dLbGlwWHB2bTBoa01oditFWWZ2OTk5OTU1WlZYNk55NU0yZk9uR0hIamgzY3ZIbFRNeTVPekpvMWkwbVRKbkg4K0hHOHZiMXAxcXlacHJ3emNlSkVsaXhad3BJbFN6aDU4aVFkT25TZ2VmUG1uTTFGSERjME5CU0x4VUo0ZURqSGpoMURsbVZDUWpMMUJBWU5HcVJ4MDErL2ZoMmowVWhBUUVCV1Y1dUFnQUN1WGJ2bXZydmR5SUhZMkZnR0RRd2xwTXRiZEF2cHpPRkQ2Z1BRcWNuYm9YMWJRdnU3cGpLR0RmbEk5YUs2dkVXN2wxN2d6VGRlMWJaZHZIaVIwUDU5NmQ2dEM0TStHTURObTVFdXg2NzcraXVYL1FGNnZ0T0xzT2t6S1AvNDQ2NzMyb2tUUEZXM0xwNmVLc21xbjY4Zko0NGYxN3l5NTU1VEgrQ0ZDeGZtenovUFlMVmFpWXlJd01Oc0ppaW9IQUQrL3Y2Y09KNC96WG54WXNYS1pERnFqanhiMW5CVXlReEoxVHdiZWxCNzJIUTZYZlgvd29XZ0tBcWZmdm9wL2Z1cjdubFFVQkFoSVNFc1dMREFaYjlQUHZtRWR1M2FBYkJpeFFwS2xTckY1czJiZWVtbGw1ZzhlVExMbHkvWENoSURCdzVrMTY1ZHpKdzVNOGZuWEw1OG1kS2xTMU95WkVrOFBUMVp2bnk1aTVFYU5peVRQVGN0TFEwUEQ0OGNZemFaVERuazA5eHdBK0NydGF1cFVhTUdJZDNlNXRLbFM4eWZONGNHVHpmVU5IblBuei9IeFBIalhJNlpOR1Vhb0VwWTluNm5oNmEvWWJWYW1UaCtMT01uVHFaNDhlTDg5T05XRnN5ZngrZ3htY2ZYckZVcmg1NUhYc0pEaVltSmVIaDRFQjBkemFRSjQ1QmtDUjlIbmpBeE1SR1Rod2ZmYi9xT0hUdTJZVFFhU1VsSklTa3BDWlBKaE5WcVplNmNXZHk0Y1NPSHdsWjJlSGw3bDh0aTFCd0dUaEVkRkFPT1hqYWN0UUpGVVJSQjcyeHlFd1RoUDJIWWF0YXNTVUJBQU5PblQrZk1tVE9jUFh1V1gzLzlsYUpGWFl2bmpSdG5DcFVFQkFSUXZueDUvdmpqRDU1ODhrbFNVMVBwMXEwYmI3K2RLWlJzdFZwZGpuRml5SkFodlBubW13UUdCdEswYVZOZWZQRkZ1bmJ0bXV2WXpHWnpEalVoVUNYZEhvU01teHNQUCtyVmI4Q2NXVE1BZ2ZyMUd4QTJmVWFCanBObG1UR2pSOUhteGJiVXI5OEFVS1VocjEzN20rRkRCNnY3S0RKZTJmUUtLbFdxVEtWS0JkZEtQWDM2RDQ2TkdFcm9CNE00KytlZlhNeVNocGswWVJ3QmdZR0VUWi9KcXgxZWRqR0lBejhZd0lzdnZrU0hqcTh5WXRqUWZNOWhNQmdxWk11dDVjeXhvYUNBVmtEUVoyNmc2bi9oUWpoNDhDRE5taldqU1pNbU5HM2FsTmRlZTQzdzhIQ1dMbDJhNzFOSXI5ZGpOQm8xcmMwMWE5WlF2YnFycmMvTjIycmJ0aTNYcjEvbisrKy81OGNmZjJUNDhPSE1ueitmdzRjUGF5NjZFNlZLbFNJakk0T0VoQVI4ZlgwQnNObHN4TWJHVXJKa1NmZGQ3RVpPdzFhdlBuUG5MU1Q4U0RpZnIxeUIwV2hrekxnSnR6eHUyZExGZUhoNDBMbEw1a1BXWnJOUnJGZ3hWcXo4NHE2TXJYRGh3bVJrWkJBMmZTYUZDaFhpeEluakZIWmMxNFVMRithWlJvMDFrWE5WaHRLYlFvVUtrWlNZeUlTSlUzajg4Y2M1ZS9aUDdWN0lDNElnVk02U1c4dWFaOHRlUUZDY0JRUVJFS0tpb2lvQnB2L0NoYkJnd1FMcTE2L1AxcTFiR1R4NE1DMWF0T0RHalJzNUpQV3k1c3VTazVPNWVQRWkxYXRYcDN6NThwaE1KaTVjdUVDRkNoVzAxNkpGaTlpeVpVdXVIdHY1OCtmcDBxVUxxMWF0WXYvKy9adzZkWXJqamx4RFZ0U3VYUnV6MmN6ZXZabXE1L3YyN1VNVVJaNSsrbW4zWGV4R0RreWFPSjd3SStFMGIvNDh3NGFQNU5DaGd5N1NrYmxoMzc2OTdObTltK0VqUG5hUnFxeFFvUUpKU1VuOHNtZTNsbS83ZnBPclR1ajU4K2ZZdVBHYkFvM3R5Um8xc0ZxdG1Fd21KRW5pNElIOTFLeWxhcG5XcWxWYkcrZlIzMzRqS0tnY1JxT1JZc1dMVTlqWEY1UERzZGkzZDY5MlRENHdMVjY2UERBWGc2YjFzQUZaUERaSGpzM2IyN3ZDZitWQzhQZjNaK2ZPblp3OGVaS1NKVXV5YnQwNmxpMWJocCtmbjh0KzQ4ZVBwM0hqeHZqNitoSWFHa3JGaWhWcDNibzFvaWd5Y09CQXhvNGRTN0ZpeFdqWXNDSHIxNjlueG93WmJOKytQY2Y1enA0OVM1OCtmWmczYng0QkFRR3NXTEVDYjI5dnFsUlJCVzBtVFpwRTdkcTFhZFdxRlY1ZVh2VG8wWU8rZmZ2aTQrT0QwV2lrZCsvZWRPL2UvYjRwbnJ2eDcwTG56bDBKQzV2QzJ0V3JrR1daZ1lNK1FoVEZmQlhlNXM2ZVNVWkdCbjNlNjZWOXp0ejVpL0R4OFdIU2xHbk0vSFE2aXhZdXdOUFRrNEhaaEpTUEhUM0toZzNyYWQrK3d5M0hWclpzRU8zYmQrRGRYajFSVUhqMjJXQk5PL2o5UHYyWVBHa0M2NzcrQ3JQWnpKQmh3N1hJYVBpSWp4azNialEycTQzU3BVc3plT2p3VzU2clFvV0tqd0hYYy9mWUhEb2hHcmVrZ2lDS29vZkZZaG1nMStzbi8xdC8vTkRRVVA3ODgwOSsvUEZIWW1OajZkbXpKenQzN3NSZ01QRFVVMC94eGh0djBMTm5UNjVldllxdnJ5OCtQajVNblRxVmxTdFg4dmZmZjlPb1VTTVdMbHhJR1ljNnZjMW1ZOHlZTVh6MjJXZkV4TVJRdVhKbFB2bmtFenAwNk9CNEd0WGlqVGZlWU9qUW9VUkhSek5nd0FDMmI5OU9jbkl5ZGVyVVlkcTBhVFJxMUFoUTJ6MjZkZXRHV0ZpWWxrOExEUTFselpvMWlLSkl4NDRkbVQxN2RxNWhyaHVQRHZiczJlTldkOHNIY2JHeFlUVnJWTitPdW1iVStVb1RCQ0VEVlNsZUVrVlJYVE5xTUNpQ0lBaG11OTArVXhURlh1N3BjOE1OdDJGN0dKR1JucjY2WW9WeVgyUXpiS2xaREp0ZEVFUlpweE1WdmNHZzZCM0p1YUIvNnhlZU4yOGVmZnYyL1UvOGVKR1JrVG1xdHdXQkxNdGN2bktWdUxnNEpFa2lJLzNSWEh2cVlUYWowK253OXdzZ0tLZ00rUkdtS29yaW1MTlk3UFo3TjJjZVpqTjZ2WjRBL3dDQ2dzcmVjdi9yN243R1hDRkpVbkVjVGJsWlg0cWlwaEhWN2c0WldRYkpMaUVJZ3VBcHkvSlJvTEo3K3Y1OXNGaXNuRGh4QXAxZTc5WVZCVkpUVTBoSlRrS1M3TlNxV1F1ajBaQ3JVZnYxMTk4UWRicjdveXZxR0pNc1M5U3JXOWZ0c2QwQkZFVTVYNlpVOFEvSUpKMTBFazg2cWNMdGpuQlUwZXYxaXJPNlVOWTlkZjlPUkVSR29OUHIzYXdRRG5oNWVWTzBXQWwwT2owM0ltN2t1czlmbDY4ZzZuVDNiYzZjWXhKRkhWZXVYSFZmdEhjQVFSQktaL1BZc3YvZnBWbFhQSC8rZkZIQW5ibitseUkySnRiTkNwRUx2SDBLRVJNVG0rdTJ1TGk0QnpKbjNqNkZpSWwxa3gzY2FWVC95ZWd4M3VUWjh1SFViUUZRMEFjRUJCUjN6OW0vMVQyL2MxYUlSOEZ6UzB5SXkzWGJnNW96THk5dkV1UGo3dWpZcE1SRUx2OTFrZFI4dEhxOXZMd0pLdmM0aFFvWGZtRHpmaS9IV2JWS3RVSkFUQzdlbXZPT3dObjZvVGVaVEVYdi9nM25wamd1S0h4OENxSFRpUlFwVW9UaXhXL3ZHU01Ja0o3dUpxbk1DK2w1RUhnK3lPTEtuZjVlZjEyNlFGcGEvZ0s5cWFrcFhQN3JJalZxUFRoYXhYczV6c2VLRkNtVTNWdHpGQThFMTNCVVVmUTZuZTZ1R2pZM3hmSHRJelUxaFJzUmtkeUlpT0NwT25mM290eSs3U2RXTEY5R1ZOUk5TcFFvd2VkZnJ1SDgrWFAwNko3SlFESjArRWhlZUtHTis0ZDRpSEVyWTVIMVd2cXZqck5Rb1VLRnNoZ3daM091NEZnTW56V1NFZlNpS0Q1Mk43OVlWb3BqTndvZW9uaDVlUk4xTTRMSXlFaUtGU3QyVno3M3hvMGJUSms4a1RIakpsQ3ZYbjJTa2xUT3J3b1ZLcko5NTI0QTN1blI3WjU5citYTGx0THU1Zll1TkUzT2NjMmFNWjJUSjMvSGFEVFMvUG1XdlBkK0g0MVY0dHExYTh5Wk5ZT1RwMDVpTXBsbzBhSWx2WHEvbDROMTRtN2lWdWQ4cm5GRERBWURnaUFTRkJSRTl4NDlhZFNvc2Z2aXZZOHdtejBLdVJxMUhDL0gwa2tGVVJURmdMdDVjamZGOFQ4d2NONCszTHg1ODY1OTN0ay96eEFZR0VpalJvMHhHbzBFQmdZNlFsZ0Jod2FqeTFyQ3U0M1BWaXdqTGk1bkFuLzBxSkdVTEZXS2pkOXRadkdTNVJ3NmVJQk5tNzRGMUo2OG9ZTS9wRkxsS256NzNXYm16Sm5QbnQyNzJMamhtM3Myem9LZWMrNzhoWHkvWlN2ZGUvUWtiT3BrTm55ei9vRmNKNElnVUtkT0hWcTBhRUh6NXMwcFVlTDJuSWlEQi9ZVDByVVRyNy82Q2pNK0RkUFdkTnBzTnNLbVRTR2t5MXQwRCtuQ3ZuMlphNXJ6WThTOWQ1Rk1LcHUrKzVhaGcxWGFKWVBCbU4xakUzRVVEckpHakZhckZWRVFoTHU2U05HZHpQNW5ucHRka3Y3eDV4dy9mb3lYMjdaaDJ0VEpSRVpHOG5MYk5yemN0ZzByUDF0UjRNODRkUEFBbmQ5NmcrYk5ndW5SUFlRL1RwMXkyYjVuOXk1Q3VuYmloVmJQMDcxYkZ3NGRQS0J0NjlmM2ZWNXVxNGEySHd6b3o4dHQyOUQzL1hjMUl4SWMzSlN1SWQwd21Vd1VLVnFVdXZYcWNjNUJTaEFYRjRlZnZ6K2RPbmZHYURSU3FuUnBHalYrbGovL1BIUFA1djEyem1rMm0yblVxREhEaG85a3llS0YrZEphM3l1VUsxY09uVTdIdG0zYjJMdDNMelZyMXNSZ01PUnFzTFAvUHlNam5hbFRKakZ4MGxSV3IxMUhURXdNMjM3NkVZQ3RQMndoSXlPRGxWK3NadnFNV2N5ZSthbm01ZWZGaUZzUVBQSEVFOXBETmI4eFp2MDdKaWFHZDNwMDU4S0Y4OXJ2b05mckMrWGhxV2t2V1piUjYvV0lnTi9kblBRN3BUaDJRMFZLOGo4dnROU3FWWnR2TjIxaFFPaEFTcFlzeGJlYnR2RHRwaTJFZE90ZW9PTXZYcmpBeHlPSDgxNmZ2bXpadW8xWFgzdWRnUi8wSjhyaFRWNjVjcG54NDhZd1pNaHdOdi93RXkrOTFJNFJJNFpwYWx0ejVzN24yMDBxRThxTVdiUDVkdE1XNXM1ZkNJQW9pblRxM0FWZlgvV3krK3V2U3h6WXY1OEdEVlIyazhEQVFPYk1uWStIaDFtNzBJOGZPMGFOR2pYdjJaemZ5VG5yMVcrQTFXYlREUEw5UkdCZ0lEZHUzTkE4RkZtV2M1QThIRGtTem9oaFE3RFpiTVRGeGZGT2orN0V4Y1VSRVJHQnI2OGZKVXVXUktmVDBhcFZhdzRmUGdTb3JMZlBQdnVjNDNjU01CaU1uRHQzVnR1V0d5TnVBWE5qZVpKVkxsdTZXS01HUDNueWR3YjBWMWNSK2ZyNjhzV3FOWVIweStSRTFPbDB1WVdpdUlhaHFrY3JBdmM4Ymh3ME1KVFhPcllucE10YmRPMzhKbHMyZjYvbE5WN3IrQXJ0MjcxSTk1QXU5M1FNM1VPNmNQSGl4ZHM2WnR0UFAvSmF4MWQ0b1hVTFpzL0ttK0J2eDQ3dGpQNWs1SC9HdUc3ZXZJbmdKazFwMUtneEpwT0pWcTFmb0VyVnFteHpDSGtFQkFTeWZNWG5WS3RlSFZFVWVhbHRPMnhXSzMvL1hmRG0wejlPbmFKRjg2YUVkT2xFbGFwVmVTNjRTYTc3TFZ3d0Q3T25KeSswZWZHK2ZmK0NuRk1RQlB6OS9FbDVBTWw2bzlHSUpFa0VCQVRRdUhGalpGbkdaSEpsSGF0YnR4NytBUUdNR2YwSmd3WU9vUDBySGZEMzk2ZFlzZUxFeGNWeTZkSWw3SFk3NGVIaHBLU28zOEhKaUh2cTFFbUdEUDRRbzhsSVltS2l0czNKaUR0M3ppeU5FZmVmNHMyM09yTnIxOC9NbVQyVGNXTkcwN2RmZjZkM2xpT25LZ2lDZHo2NU5SY2pweGNFNGI0a3hENGFNb3g2OWVxVG1KaEFyNTV2VTdXYXluMldGNzN4dzRBV0xWdlJvbVVydnY1cUxaR1JFWStNMXhnWkdVbUZDaFZkM2l0VEpraWJBMjl2YjNaczM4YjQ4V05JU1U3Sk02eklEOVdmZUlKdE8zWVJFUkhCSngrUFlQbXlwZlI4eDVXSDRmT1ZuM0g0OENIbXpKbVBYcSsvTDkrOW9PZFVGSVc0K0RpOEgxRGF4Um1PN3QrL24xcTU4SmtKZ2tEdjN1L3h4dXNkS1ZPbXJHYWt6V1l6dzRhUFpQS2s4WTdmdFN5ZVpyTjIzUGZmYnlJOVBaMUprNmN4ZSthbkxwK1pGeU51WG1qVnFoWGUzdXI4T1BPQXAwK2Y1dlRwMDlvKzN0N2V2UHZ1KzN3UTJvODMzK3BFNWNwNUx5c1RSZEU3bnpCVU0ybzJtdzA5Y0Y4NXFRc1g5dVdKSjJ0dzhjSjV5cGN2bitkK2lZa0pUSjQ0Z2Fpb0tPeDJHNTA2ZDlYWU9NK2NPYzNNR2ROSlQwdWpTTkZpREIwMlFvdmhkKy82bWRXcnY4U1NrVUgxSjU3a2c0RWZhdm1IWFQvdlpPem9qMGxQejZCdnYvNmFsL0ROK25WcThscFJhTnJzZjNUcjN1T1czK1BJa1hBK25UNE5VUkFwV2Fva251Wk10dHo4eHRDOFdURDlCM3pBMGlXTFVCVDRmc3ZXaDg2d0ZTMWFsTWdJVjBOKy9mbzFhdGRXVzFIMi9yS0hWVjkrd1l5WnN5bFZ1alNnVmcxenU3bXlHenRMUmdaYnQvNUE2OVl2WVBMd29Iang0alJ2L3J4TG9ocGcvYnF2MmI3dEoyYk5tWGZmR2s1djU1eEhqb1JqTkJpb1ZQbitMN0cyV3EzWTdYYU9IajNxRE5GeWFHYWtwS1R3MFVjRDZkd2xoSE5uLzJUSzVJa01IVFlDUVJCNHV1RXpQTjN3R1VmdWJLNUdTMSs0Y0dITVpqTmp4MDFBRkVVc0ZndUZIZk9RRnlOdWZ2anhSelYzOTh3enozRDU4bVV0ZkhaSmUxeTh5T1JKRXhnN2JnSXJsaStsVE5rZzJ1VHRLWHRsTTJKWmpKcVFOV1JGQkR6djU0OFNIUlhGcVpPL1U2Vksva3prNTg2ZDQzL05uMmZaaXBYTW1idUFXVE5uWUxWYXNWcXRqUHA0QktHaEEvbjh5elU4ODB3amxpeGFvT1ZyMXE5Zng1dzU4MW41eFdvQWZ0aXlXZnRNSHg4ZlZuNnhtdEZqeGpGLy9seEFKZGJidkhrVEN4Y3RaY215ei9qdHQ5L1k5ZlBPZk1kbXNWaVlNRzRNbzBhUDVjdlZheWxUT25PcDdhM0dZTGZiaVlxS1l0MDMzN0wrbTQwUHpIalo3WGFOQmwyUlpleDJ1MmFFMnJ6NEVudjI3Q0k4L0RCMnU1MmZmOTdKSDZkTzBxSmxTMEJWVGhJRUVIVTZFaE1UdEJ5SklydXlGQmN2VVlKREJ3OWlzOW1Jam9wU3d5aVRpUzgrWDhuYXRhdXgyV3drSk1TemQrOHYxS2hSSXpNVS9uNFQzMjdjd016WmMrOGJBV2RCejJteFdEaDg2Q0NUSjAyZzk3dnZQeEN0aXVqb2FLMmFiVFFhOGZYMXpTR0ljdkhpQllLRG0vSldwODZNL0dRMFJxT0p1RGpYVlErSER4MWt4NDV0V2c5anJWcTFzZHZ0aUtKSVFrSThGeTllcEZMRlN0cTIzQmh4L3lsKysvVUlRNGVOb0VuVFpudzZjdzZuL3ppVmcrMDZ5NFBTbk0yb1pYMkd1cFQzOVlENWZ2d1kwOE9tWXZZd1l6UVo2ZE8zUDZVZHBJNTVvV2JOV2l4ZnRvUnQyMzVFcDlOanNXU1FuSnhNUW53ODN0NCtWSzJtNmhHODFMWWRUWnMxVTMrb3c0ZTQ5dmRWM3UzOVRwYW5pazltM3NIQjdsbTFXalV0RVI0ZWZvam5uMitKMmVHT3YvamlTNFNISDZacHMvL2xPYmFyVjYvdzJHTkZOT05jcFZvMTl2MnlwMEJqQU9nYTB1MnVYQlIzaXV3TnVsTW1UMlRLNUlrODM2SWxIMzh5bW9vVkt6RnF6RGdXeko5TFpFUUVaY3FXWldyWXB4UXRxdmJYdFg2aERhZE9uYVJIOTY3b2RIcmF2ZHllaWhVckVaZHR1ZERBZ1I4U05tMnEraVF1VTRhbHkxZGlOQnFaTWpXTXVYTm04ZFhhTlJnTUJvS2JOTldTeEpJa01XM3FaUFI2UFcrKzN0RTFUUHh5TmNXSzNmMFZnQVU5Wjc4Kzd5TUlLblBzb0E4SDM5VStOaDhmbndMdmUvbnlaWHg5ZlRWWngrUEhqK2RJNU5lc1dZdWFOV3RwK2FwQldaaHk0K1BqNk5XekI2VkxsMmJpcENrOFZxU0k5cnVlTzNkT3kzZjNHeENxZWE1NU1lSVdCQWNPSE1oejIydXZ2Nkg5UHlBZ2dJOEc1eXZzNHBGUEdPcXdjQ0tTSktFSDdzc2ROdWpEd1JwdGNFR3dkczBxN0RZN1U2Wk9SeEFFclgzQWFaNmRNQmdNK1BtcFQxaWIxVVp3azZhYTNGaCtpZCtzSVZMV1ZpNUJFUEo4WW1UTnIrVFZMRnFRTWVUSEUzWTMwYkpWYTFxMmFwM2ovWW9WSy9ITHZ2d0ZtaHMxYXB6bmpXc3ltUmo1OFNpWDk5N3AxVHZIZnZVYlBNM1g2emZrZUw5Q3hZck1uRDAzMTgvVzZYVHMyWHZndmhyNmdwenpWdk4xTjhhUW1wcFNvRllwNStxZU80V2Zuei9yY29rV3NodkFyQWdNREN5d1F0YmRSRUJBZ0ZaaHo4VldDZG50Z1NDQVRxZTJlenc0MXlGZmR6c0dieDl2QkVIZytQRmpKQ1Vsb1NnS3BjdVVJVGs1bWZQblZXWDNuMzdjU3RpMEtRRFVxMStmbjNmdTVQcjE2d0RzM0xtRGt5ZC96L2M4ZGV2V1ovdTJiYVNucDJPejJmaGh5MmJxTjhoZldLVnMyU0NpbzZPMW5FRkVsdHpCbll6aG44QnM5c1NOMjV1YkJ6bG5lWjI3U0pFaXBPV3pwdHJUczJBaGIwSDN1MWU0eCtNMDV1S3BDVW8ycjgwWml1b2UxQ1RrSjBqeDJtdXZNM2JNS0g3WXNvWEtWYXBRb1dKRkVoTVNDQXdNWk15NDhYd2FOZzJMeFVMZ1k0RU1HVHBDRFFtclZLVmYvd0VNSGZ3aE5ydU5ja0hsR0R4MFdMNWplS3B1WFZxMmFzMjd2ZFNDd2JQUE5hRnBVelcwM2ZiVGp5eGRzcGlVMUJSa1NXTGYzcjEwNlJyQ1MyM2JNWFQ0Q0VZTUc0S2Z2ejk2dlU0ckh0ekpHTzdYay81UlFtcEtjcDVldGZpQTVpdzFKUmxkSHBYVzRzV0xFeEVSUWZUTkNEeTlmWEtNclZ6NUNyZGNZTzdwNlVXNThnOVdsK2tlajFPWG04ZVdXOTVOVUc0VmQ5MG1qaDQ5U3BGaWJvM01PMFZVNUhYcTNNWkMrTXVYcnhBYkYrZGVtNXNOTnlOdkVCZ1lRTmxjY3JtWHIxd2hOdmIrejluTnlCc0VCQVFRVkRidi9ISlVWQlNSa1pIWTdYYVNrOTJzT05uUnBFbVQ5a0FhS29OdUVwbWlMaFkwN1FOQnZ1dk5RVzRQNHA4OTBXKzNYNnRzMlRKRVIwY2pudHFQQUFBZ0FFbEVRVlJ4TS9LR214cmNNWWNwS2NsSWRudXVSZzBncUd4Wm9xTHUzNXc1eHlSTFVyNUd6Um1TRm5Fazg5M0lGZG5EVHNHWll4TUVRVjExSUlxQ29DaUtoTHBFNGE0Z0lpS0N5TWliUEZiVXpWOTUrOTdhRFVxVUtIN2I3QjZLb3ZEWDVTdkV4Y1VpMldVeU1oNU5qamF6MlJOUnB5TXdJSkN5WlV2ZmNvSC9sU3RYaVk2SlFiSkw5MnpPekdaUGRIcjlMVDAxTndvRVdSQ0Vqa0JxRm84dFJSQ0VWTUFpQ0lKTkVBUzdLSXFLb0NpS0ZURGM3WEJVRUhWNGVYbmo2ZmJjYm9rMGg5Z0hLTGNWaHJyaHhpTUdteUFJcjJjeGJNbEFzaUFJYVVCR1ZzT21CKzY2WWF0VHB3NDNiOTdrWmxRVXlVbUpiZ2JkZk9EdDQ0TkJyNmRVcVpMdUVNUU5OL0tIdGFBN09nM2JYYThSRnkxYTlJNDBNdDF3d3cwM0NtallsR3ovYWhDQmRQZDh1ZUdHRy84Q1pCVFlZN3R5NVlwYkRjUU5OOXg0NktFb1Nub3UzcG1pT0JSZG5KMXJpcUlvK3JKbHk2YTZwOHdOTjl4NDJDSExjbXFXMEZNemNObmJQUVJCUUZRVXhVMTU2NFliYnZ3YlBMYnN6SlpLdHY5cmYrdFJlMEhjY01PTkIzL2p1dlY0ODRIZGJrL0pZc0NVTEtHb2tqVVVsV1VadmFJb0NmZFNxY2dOTjl3b21GRno2L0htRDR2RmtweWJ4K1pxdnpKRDBiaEhiWUpLbFNwRnRXclZjaFdqOFBiMjVyUFBQcnVYVHgxQ1EwTXBVcVFJaFFzWHBuZnYzcG9JaWh1UExyTHE4YnFYSStaNTd5Umw4OWdVY21uMUFOV3d4VDZLazNUbXpCa21UWnAwMzg4N2JOZ3dObTNheExwMTY5aTBhUk03ZCs2a1g3OSs3cXYyRVlkYmovZldzRnF0U1ZrOHRWenlhNExLclNpQUtFbFN6S000U2VYS2xXUGl4SW1jT1hQbXZwMHpOVFdWZWZQbUVSWVdSbkJ3TU1IQndTeGV2SmlWSzFjU0V4UGp2bklmWWR5cEh1K1owMzh3TUxUL2ZYQUVUaE0yYlFyYkhVcGxUbXpjK0EwaFhkNGlwR3NubGk5YnFyMmZuOER5aVJQSDZmbDJON3FGZEdiMEp5TUxyTTJhbnA2V2pHdFRicmJxcU5OZkE5Rm1zOTE4RkMrazNyMTdVNzE2ZGQ1NTU1MThHWFBYcjEvUGswOCtpZGxzcG5yMTZpeGR1dFJsKzg4Ly8weWRPblV3bTgzVXExZVBzTEF3RjNIWXdNQkFQdnhRWmRNOWR1d1k2ZW5wQkFjSGE5dWZmZlpaQUE0ZVBPaSt1eDloM0trZWIrVXFWUmsxWnV3OUhkdjhlWE5adG5RSmx5NWVkREZDVjY5ZVljUDY5U3hZdEpSbHkxZHk0c1F4amh3SmR4eVR1OEN5M1c1bjBvUnhqUHhrRkordC9KSlNwY3RvbWhtM1FsSmlVbDZoYUk0VkNQcU1qSXlvVzZuTi9CZWgwK2xZc21RSkRSbzBZTkdpUmJ6NzdyczU5dG03ZHkrZE9uVmk5dXpadEdyVmlxTkhqOUs3ZDI5ME9oM2R1M2ZuNHNXTHRHblRocjU5KzdKbXpScCsrZVVYK3Zmdjd5THdNV2pRSUdyWHJnM0E5ZXZYTVJxTkJBUUVhTnNOQmdNQkFRRmN1M2JOZlhlN2tRT3hzYkZNbkRDT21PZ29CRkhrdmZmNjBPRHBoaTRrcmI2K2ZxeFkrVVZtdW1QSVI5eTRvVEk0SnlRazRPbmx4WnExNndCVkZXck9yQmtrSmlYaTcrZlA0S0hETkMwTGdIVmZmOFdHRGV1MS9RRjZ2dE1MbzlHb01WVTc4ZnVKRXp4VnR5NmVucDdZN1hiOGZQMDRjZnc0OWVyVjU4U0o0M3p3d1NEQVZXQTU2dVpOUE14bWdvTEtBZUR2NzgvUE8zY1VhQzV1UnQxTUxvQlJVd0QwRVJFUkVYbkp6Ly9YOGRSVFR4RWFHc3FRSVVObzI3YXRwbjNveElRSkUralJvd2U5ZTZ0OC9tWExsdVhTcFV0TW5UcVY3dDI3czNEaFFxcFVxY0swYWRQVXAyZmx5cHc4ZVpMVnExZTc1TlNjU0V0THc4UERJOGM0VENaVER2azBOOXdBK0dydGFtclVxRUZJdDdlNWRPa1M4K2ZOb2NIVERTbFZxbFNlbXJ5VHBxalhZMkppQXIzZjZhSHBiMWl0VmlhT0g4djRpWk1wWHJ3NFAvMjRsUVh6NXpGNlRPYnhOV3ZWeXNFOG5KZndrRk5nT1RvNm1ra1R4aUhKRWo2T1BHRldnZVVkTzdacEFzdEpTVW1ZVENhc1ZpdHo1OHppeG8wYk9SUzI4ZzY3VHp2YlBlUzhQRFZuTUNyV3JGa3ppdHRZZy9WZnc5aXhZd2tJQ0tCdjM3NDV0cDA2ZFlwbHk1Ymg3ZTJ0dlVhT0hNbUZDeGVRSkluang0OVR2NzZyUUUyalJvM3lQSmZaYk02MUVtdXhXQjZJakpzYkR6L3ExVy9BemgzYldmblpDaXdaR1FVV1ZKRmxtVEdqUjlIbXhiYlVyOThBVUtVaHIxMzdtK0ZEQjlNOXBBdXJWMytwcWJVNVVhbFNaVjdwMExIQTR6dDkrZzlHamhqS083M2ZwV2xUVjJXM1NSUEdjZm55WDRSTm4rbWlWSitZbU1qQUR3WlFyVnAxK3ZVZlVOQlRaVXdZUHpZdG4xQlVNM1NDb0Rib0Fsd0ZLajJLRjQ2bnB5Y0xGeTZrWmN1V2JOem9xdHhqdDlzWk5HZ1FiNy85ZG83alJGRkVyOWZuRUFUT0wxOVhxbFFwTWpJeVNFaEl3TmZYRjFCVnEyTmpZeWxaMGsybjdrWXVocTFlZmViT1cwajRrWEErWDdrQ285SEltSEVUYm5uY3NxV0w4ZkR3b0hPWHJ0cDdOcHVOWXNXS3VZU3Qvd1NGQ3hjbUl5T0RzT2t6S1ZTb0VDZE9IS2V3NDdyT1MyQzVVS0ZDSkNVbU1tSGlGQjUvL0hIT252MVR1eGZ5ZzZJb2YyY3pZSElXenkzbi9ha2VvMXg1bEMrZUZpMWEwTGx6Wi9yMjdhdUpDQU5VcTFhTmt5ZFBVcUZDQmUxMTRNQUJaczJhaFNBSVBQbmtreHc1Y3NUbHM3TC9uUlcxYTlmR2JEYXpkMittNnZtK2Zmc1FSWkdubjM3YWZSZTdrUU9USm80bi9FZzR6WnMvejdEaEl6bDA2R0NPaDJsMjdOdTNsejI3ZHpOOHhNY3V6YXNWS2xRZ0tTbUpYL2JzMXZKdDMyLzZ6dVhZOCtmUHNYSGpOd1VhMjVNMWFtQzFXakdaVEVpU3hNRUQrNmxaUzlVeXpVdGd1Vmp4NGhUMjljWGtDRy8zN2QyckhaTWZKRW02bnMybzVlR3RxZjBlZWtDUlpmbHlYb28randwbXpKaEIxYXBWWFhKZFE0WU1vVldyVm93ZVBacE9uVHB4K3ZScCt2ZnZ6OENCQXdIbzI3Y3ZzMmZQWnVqUW9iejk5dHNjT25TSUJRc1d1SVNWa3laTm9uYnQyclJxMVFvdkx5OTY5T2hCMzc1OThmSHh3V2cwMHJ0M2I3cDM3MzdmRk0vZCtIZWhjK2V1aElWTlllM3FWY2l5ek1CQkh5R0tZcjRLYjNObnp5UWpJNE0rNy9YU1BtZnUvRVg0K1Bnd2FjbzBabjQ2blVVTEYrRHA2Y25BYkRxaXg0NGVaY09HOWJSdjMrR1dZeXRiTm9qMjdUdndicStlS0NnOCsyeXdwaDJjbDhDeVhxOW4rSWlQR1RkdU5EYXJqZEtsU3pONDZLM0ZsMjAyVzBRdUhwdWlxdSs1ZW0yQ2dDSUlndUNka1pIUnoyZzBUbnhVTHBaU3BVb1JHaHFxdFdFNDhjVVhYOUMxYTFkV3JGaEJ0MjdkQUZpMWFoVVRKMDdrd29VTEZDdFdqSjQ5ZXpKeTVFanRTZmpUVHo4eGNPQkFMbHk0UU8zYXRXblFvQUhyMTYvWGRFVURBd1BwMXEwYllXRmhXajR0TkRTVU5XdldJSW9pSFR0MlpQYnMyYmtXRmR4NGRMQm56eDRlcjFqRlBSRjVJQ1ltNXRQYU5aLzRCVmRhOEJRbkxUZ3FiYmdraXFLczArbFZ3NWFVbE5URzI5dDdyWHY2Ymc4blQ1NGtMUzJOQmcwYWFPK05IajJhSDM3NGdmRHc4UHMyRGxtV3VYemxLbkZ4Y1VpU1JFYjZvN2xFeThOc1JxZlQ0ZThYUUZCUUdVUlJ6QzluNDVpeldPejJlemRuSG1ZemVyMmVBUDhBZ29MS3VnM2JIZUxzbjM4T2EvNi9KcWZKS2VTU0RqaWs5MFJKRkVWWnI5Y3Bla0NKajQrLytDajBza21TZE52eWR2bmRHQmN1WEtCTGx5NnNXcldLV3JWcWNmTGtTZWJObThmdzRjUEpqUGNManNqSXlOdW1VN2RZckp3NGNRS2RYbzlQb2NKdStiM1VGT0lUNG9uNUxacGFOV3RoTkJweS9lMSsvZlUzUkowT2I1OTdQMmVwcVNuRXhzVVJIUk5OdmJwMTg5MzN1cnVmTVZjY09uZ2dsc3lDZ1ZZNGNEQjdPRUpSQlFVRldaWVJCRUh3Qkl6L1orKzc0NXVvLy8rZmQ1ZGNkdmVtcFlXMkRGR2dTQUUvRkJGL2JCemdGMFVGUkN4WWtDRWdJaFFVRkdRclFnc2lVNUNsSUdKWkFySmt5aXBZaG15UTBxYnBidE9SY1hlL1AyNDBTZE5Tb0dYbTlYaEVhZFpkM25mM3ZOZDhQbG1XMVFOUXVKYnc3bXpxMUtsWXZIZ3gwdExTRUJ3Y2pMaTRPSXdlUGJwU2I2RTY3V0dKL3o3cXhvc1RleUVzdEx5WGRPMzZEZVRtNWo0VXdXUWZiMitFT3BIaGMzbHNsZCsvUTJvRjlBRXZZMkIwQ0VWTEFKZ0ZvV1NHSkVsT0pwTnhKTXFTY1JkYzYzZjNGaDhmait2WHI4TmtNdUhxMWFzWU0yYk1Bd00xQU1qT3luWU5UenN4cmM0TldWbk8rUjF5Y25JZXlwcHBkVzdJeW5iTkJOOURxdVVpN0ZzOGJGczk3SXNISW9PdTZKMnpMSHZldFlTUGwzSGN2UTlQUCttbTBXakJza3lGS1ltSHNXWWFqUmFNbFhFZG5MczBpOFZ5RmVYNzF4ejcySGgyRHdIY1pBUkJjQnpIY1ZhcjlYeEZveE11ZXpTTklJQ1NFaGVYVzBWV1VnSFAzY01zcnR6cjhTckl6OGVONjFkUlZHU3NGRGpENm9URHpkMzlvZjIrbXRoUG83SHdwaE5BSytleEVVU1o3b0ZNZktHa3BPU2NDOWdxODQ1NDJtYUR3UUFydzhCWVdEMjB6VnF0RGpLNURINit2Z2dNREt6Mi9kNjFjd2VXTDFzS2d5RURRVUZCV0xscUxTNWZ2b1RZL3Yyazk0eU5uNEN1WGJ1NUR2SWpiTmV2WFVGeGNlWDBQa1ZGUnR5NGZoV05telo3b3Ziejl1MjAydzZBeGdCZ2hhSkJ1WWNJYkFEQVhicDA2VngwZExUckRLb0ExSktUa3dHQ2hFYXI0Mm1iQTZydis0dUtqRWpYWnlBOVBSM05tbFhmU1ptV2xvWVowNmZpeThsZkl6cTZCUW9LZUdxY2lJaEk3TnE5RHdBd01QYjlHbHUzWlV1WDRQWHVQZXpZVE1UOW1qdm5HNlNrL0FPYXB0RytReWNNL21pSU5IeWRtcHFLaExsemtISTJCUXFGQWgwN2RzS0hjWU5SazAza2Q5cm1pekV2UUM2WGd5QkloSVdGb1gvc0FMUnVIZlBBenNFN2dZWHR1ZlF3clNiMmMvKyt2UmtDYURFaXFObDdiYnlYQmx1VktoSGxXclpzbVFYZ3Nndkd5cHRlcndjSUVuNytnVFdTbTlGb3RQRHpEd1JBSUQwOXZkcSs5K0svRitEajQ0UFdyV05BMDdURUUwY1FCQlFLQlJRS0JXcFM3K0xINVV1UmsxTStnVDlwNGdUVUNnN0diNzl2d2FMRnkzRDB5R0VrSlcwQ3dQZmtqUjB6R3ZYcU44Q20zN2NnSVdFQjl1L2JpOTgyL2xwaisxblZiU1l1V0lqTlc3ZWpmK3dBeko0NUhSdC8zZUM2T0dyZXFiZ3ljOGEwa3NyQ1VJSVFRbEhZaDZJUTNzQ3lMSHVLSk1sSTEzTGFtOEdRQ1kxV1YrUGIwZWpjWURBWTdqc2tQWDA2R1pPK21BQ3oyWXppNG1KMGY0MFBNM3U4MFJQOTN1OWZwZTg0ZXVRd0VoUG1RYTlQUjJob0dFWjk4aWthUGZ1czdWMFV5NVl0UWFiQkFQK0FBTVRGRFVhckYvNEhBQmcyOUNQY0VoaFRSMzQ4SERJWmhlRGdFQ1F1V0FpV1pkRzJiVHQwZStVVktCUUsrUG43bzNsME5DNWR2QWlBcjFoNmVubWhkNTgrb0drYXdTRWhhQjNUQnYvK1czTkYrN3ZacGtxbFF1dldNWkRIVDhERUx5YWdVK2N1angwekM4TXdPSHIwQ0xZay9ZNGhRNGNqT0NRRUFEOGtQL2U3YjVIeXp4bVFKSVhZZ1I4aUpvWW5RczNNek1TMHFWT1FuWjBGbmM0Tll6NGJpOXExUXl2ZERrRVFpSXFLZ28rUEQxaVd4Zm56NTVHV2xsYmwvVnp4NDNMOHNYM2JPV2RoS0FDVzR6aTJMTDlHY0NBSXZrRzlvRUFxSGdBQVo3RllraFVLUlM4WGxObWJsYkUra0NxYVJxT0ZzU0R2dnIrbmFkTW9iRXJhaWgxL2JNZktGVDlpOWRxZjcrcnpWNjljd2VjVDRqSHBxeWxvM2p3YWUvZnN4cWlSdy9IVHFyWHc4L2ZIelpzM01HWHlsNWc3Yno0YU5HeUlUYjl0eFBqeDQ3QjV5M2FvMVdva0pDNlF3cmM1YytjaE1yS01PSVlrU2ZUdTA3Y3NKM1A5R2c0Zk9vU1BodkMwVVQ0K1B0TG5SVy9xZEhJeVh1L2VvOGJXL1Y2MkdkMmlKY3dXQ3k1ZHZJaW9aczBleWZPV1pWbXA5Y2oyM3g4UEg0cGF0V3Jod29YellHd3F4OXUzYlVWcGFTbFcvTFFHT1RrNUdQUmhMQm8zYmdJM056ZUpFZmVWVjEvRGlSUEhNV1BhVk16Ly9vZEt0MStuVGgxUUZJV2RPM2RDb1ZEZzVaZGZSbVptSml3V2k5Tjl0UDA3SmVVZjdOKzNGN05tZjN2bGhWYlJqbUdvYlk0TklvQVJBamhydFZxKzNVTk13aFVVRkp4eXdWaDVxNjVDUVpXMlpUUSs5Tis3WlVzUzJyN1VEcTFieDBDaFVLQnpsNjVvMExBaGRncDg5OTdlUGxpMmZDV2VhZFFJSkVuaTFkZGVoOFZzeHExYi8xVjVHK2ZPbmtYSDl1M1FyMjl2TkdqWUVDKzJmY25wK3haK1B4OHF0UnBkdTczeXdINS9WYlpKRUFTOFBMMWdMREkra3VmczhlUEhNSDdjWjdCWUxNakp5Y0hBMlA3SXllRUY2YjZkTXhmajRpZVV1MW1mT1hNYWJkcThLTnlBQ01qbE5DNWR1aWk5OXVLTFBLVzlMU1B1blc0WW9vZkdjZnhFZ0tlbnA5MTdsaTVaSkZHRHA2VDhnNCtIOHplNEs1Y3ZvV2xVRkc3eHJyK3R0OFk0Q1VmQmNad0VjSEk1YmRlZ3k3MzExbHVud0hmMnVxd1NPM1BtTkRwMWVCbDVlYm1TaDlPdjc3dFBWRTR4TU5DK0s3OTI3VERvOVh6K1Q2dlY0dVRKRTRqN01CYTkzK21GOTkvckk5MXRxMnFObm4wV08vL2NpNS9YYjBSNmVycWRFSWhvSzFmOGlMLy9Qb3FwVTZkWDJ5amNuYXlxMitRNERqbTVPZEErb2oyRXpadEh3OHZiRzE5TytnS2ZqUG9ZUGQ3NFA0bEI1azZNdUdmUHB1Q3pNYU5CSzJqazUrZExyNG1NdUlrSmN5VkczTXFNcG1rd0RBTnZiMi9FeE1TQVpWazd3a2tBZU9mZFB0aTdkdzhTNW4ySHlWOU93dEJodkRCTjNmQUluRHh4M0RoMHlFY1pEaUdvSGJBSllGWk8xSVVVa3NjY0FIYi8vdjBzeDNGSFhkQjFaeXNwS2NHYTFhdWZ5Ti9tNys4UHZVTVI0L2J0VklrYi84QmYrN0Y2MVUvNC9QTkpXTDMyNXdwRFhZSWd5b0dkcWJRVW0zN2JDRk1wVDlvY0dCaUk5dTA3NE15WjAzYnYyN0QrRit6YXVRTnp2a3Q0WUgxWmQ3UE40OGVQZ1piTFVhOSsvWWR5ZkRwMjdDZzlIRm1jeGJXUGl4dU1VeWRQUUVFcnF1enhidDZjaE9YTGxtTGE5RmtJZGNpaFZjU0llNmR3dEdIRGhqaDA2SkJVbGJjMXJWYUxRWU0rd3ZwZmZrYTdsMTlHL2ZyOFdGbVRKazNSdmtPbmt3WkRSbVdneHBiTmlZckJLSy96UU1LZU41eTFXcTB1WUt2aUFkdTdaN2ZrM3R2YXZyMTc4T0hBRDlDdjc3dVlPV09hbEZOSVMwdkRvQThIb1BjN3ZUQnI1blFwcWY5UThvWldxMFNxeWJFc3JGYXJCRUxkWG5rVisvZnZ4YkZqZjhOcXRXTFBudDA0ZHpZRkhUdDFBc0FMakJBRVFGSVU4dlB6cEZDQ1krM0pUQU9EZ25EMHlCRllMQlprR2d6OFhWeWh3RThyVjJEZHVqV3dXQ3pJeTh2RmdRTi9vWEhqeG1XaDhPWWtiUHB0STc2YmwvakFlT3FxdWsyVHlZUy9qeDdCOUdsZkkyN1FSdytsY0pDUmtZR2RPM2RLRDJkTU1rYWpFWjkrT2dwOSt2WkRRRUFBWmt5ZldpbTdzeGhpZW5oNFlOYnNiK0hsNVFXVHlRUjNBZUJGUnR4aHcwZEFMcGRMakxpVm1kbHNoc2xrd3NHREIyRXltVUJSVkRsdGo2dFhyMkw2dEsveDFlU3ZjZlRJWVd6ZHVrVjY3ZFZYWHp2ckpBeGxiSE5zb21OR0VJU1VxM056ZDRkTUtJOXlvbHRYV0ZoNHpFVjZlR2RUcXpYbzJLa0xWcTlhaVM1ZHlnRHErdlZyMkxCaFBSSVNGa0NoVkdMbWpHbll0blVMWHUvZUEzUG5mSVAySFRxaTU1dHY0ZGpmUjNIbzRJR0hzdStPRGJvenBrL0ZqT2xUMGFGakozeit4U1JFUnRiRHhDOG40L3NGaWRDbnA2TjJhQ2htenY1Vzh0aTZkTzJHczJkVEVOdi9QVkNVREs5Mzc0SEl5SHJJeWJVSCtWR2pSbVAyckpsWXZtd0phdGV1alNYTFZvQ21hY3lZT1J1SkNYUHg4N3Exa012bGFQdFNPL1I3bjZkZlp4Z0dzMmJ5WWVBN3ZleTU5MWV1V29PQWdPcHZZcTdxTm9jTitRZ0V3Uk1zZmpKNnpBUHRZN3RidTNyMUN0cTJiWWQzZS9lQjFXckYzTy9tSUNjbnAxeFBvYTAxYlJxRmMrZk9naVJKNU9YbDR1clZxNmduRkg0cVlzU3R6REl6TSszQ1h3OFBqM0xDTFNkUEhNZlljZVB4ZlBQbWVLNXhFeXhidWhoZHUzWURRUkM0ZHYzYXRZcEFEUTVUQnlSSlFTYWpZRFlERkVtVlRSNklIdHRISDMxMGROMjZkZmtBM0Yzd1ZibTk4WDg5MGE5dmI0azFGQUQrL3Zzb1VtLzloMEZ4QTZXN2xsWm9GVWxKK1FjVEJVV2c4SWlhNzZycDFMa0xPblh1VXU3NXlNaDYrT3RnNVRxbXJWdkhWSGpoS2hRS1RQaDhvdDF6QXorTUsvZStGaTFiNFpjTkc4czlIeEVaaWUvbUpUcjlib3Fpc1AvQTRRZDZIS3V5elR1dDEvMmFUbGU5N1VSTm1qUkZreVk4NWJaTUpzTW5Ea3k1enF4TDEyNjRkT2tTK3ZmanE5YkRQaDRoaGVRVk1lSldaamR1M0lDSGh3ZmF0MjhQQURoOStuUzVnc05idmQ2Vy91M3Q3WTFQeDR5VlVuNXhBMk5UbllJYVFiRGdPSllUakNSSmppUUpqaUJJYUxWYUxqYzNoL2ZZYkhPaXYvenlpM1hObWpVSFNKSjh4UVZkRlJ0QkVGQ3BWSGlqWjArc1dsVW1qbUV4VzlEMnBYYVM1Smxqd3JrbUcySmQ5dmdhUlZFb0tqSSswT0Y4eDl4b1pRRG80K05UWllVczIvTTlPVG41bnZiTllySDhyZGZyYmNOUXF3aHVCQTl1bkRSbFFKSWdDQklrU1lCV0tPRHU3c0VYRHh4bXJsaUx4WExRZGFyZEdkZ0FvRWYzTjNBNzlaYjBmSFNMRnRpemU3ZEVEYjU3OTU5SVNmbEhjdWUzYjl2S2g0TkNHZjErVGFWU3V3N0dYYTdOdzF5emlyYnQ1K2VIWW1OaHBhbVBxcVpJSG5hS3BqcmVsNXViKzA4bFlhaERLQ3FNVXBFa1NJSUVTWkpTVlJSQ0lvNEZ3R1ZrWkxpQXJZcW1VQ3JScDI5WnZxcEJnNFlZTnZ4ampCMHpHbS8zNm9rL2QrNUFjSEF3QUdENGlGSFl1ZU1QOUg2bkY3WnQyd3F5R21ZZnhUdTl5K3l0eUZoWTRXd3ArWkRXck1oWUNLcUNGcExBd0VCd0hJdk1qSFNuKzFhbmJzUWR3VUN0MXFCTzNZaUh1dTdWdForblRwNjQ2Z1RVeEVlWm1BdEI4SVVza2lnRE5aSUVvVktwQ0t2VlNyQXNTM0ljUjNFY0p3ZWdZRmwySDRCblhaY0ljUExVS2ZnSDNML3U1NFVMNTFHclZqRGMzTnl3Wjg5dWJOKzJGYk5tZjJ2M25nejliVHgvRjUzc04yN2NSSGFPaTBIWDBUTDBhZkR4OFVabzdmSnN0UStMZFpobjlmVkdtQk1HWGRFTUJnUDBlajJzVmlzS0gyQmorS05rSE1lZGI5ZXUzU1R3SWkyMjRpMUZBSW9KZ2hBMERnaUdJQWlXSkVtT29palFOTTNSTkEyRlFnRVpINTlLZVI4cEhMVmFyWHRrTXBrTDJBRElxaW4vVVZwU2lqR2pSL0hLNzFvdFBoczdydHdkWFM2WDM5VjNob2JXUm1hbUFSbjZOR2gxYmk3TkEyTWhqTVpDTUZhclUxQURnTERRVUJnTUQyN054SDFpR2FaU1VCTkRVajgvdjZmNkdCWVdGdjROSjdrMUFJd1lWWXF0SGhSRlFTNlhnNlpwS0pWS0tKVktxRlFxRUZxdGxyQllMQVRETUFUTHNoVEhjUlFBT2lzcjYyVXZMNitOTGxnRDB0UFRrYTdQRUJnNGFzNE1HZWtJRFBDLzZ5RjRqdU53L2NaTjVPUmtnN0d5S0MxOU9za25WU28xU0lxQ2o3Y1BRa05EN2xpb3VYbnpQMlJtWllHeE1qVzJaaXFWR3BSTWRrZFB6V1ZsZHVMRWlVK2pvNk92QWloR21jYUJrU0NJSXNHTE13djZCZ3hGVVp4Y0x1Y1VDZ1dVU2lXblZDcWhWcXRCdUxtNUVXYXpXUVEyMjNCVXliSnNNb0JhcnFVR1RwMUtCa0VRMEdoMVVGZnpIYjY0eUFoallRRUFybHI1MkZ6bXNzY3dERTBqU1hLa1RSaHFDMndsQUVvSmdyRFJFS1U0bXFZbFlGT3BWRkNyMVh3b1NwSWt4ekNNYlNqS0FXQVlodGxCVWRRSHJ1VUdtaldMUW5wNk9neUdUQlFXNUZYYnNMcE9wNE5NSmtOUVVDQUNBZ0pjQysyeXA5cEtTa3IrZ24wMTFDNFVkY0Fvb1llTnh6Q1NKRUZSRkNpS0tzdXhpVzBmd2xBcEM0QXRMQ3o4MDhQRHd3VnNnZ1VHQnRZSWZiZkxYT1l5M3E1Y3VYTEdBZFNzQUt3RVFkaTFlaEFPZld3aW9Jbi9Kc1h5cURoblpkUFR4bnA1ZWYwSjRMWnJ1VjNtTXBjOWlEQzBTWk1tMXdYd3NqbzhHRnRRQXdCYjdMSUZONHFpSUdOWmx1TTRyb3h0MHNaakE4QmV1M1p0TzBWUkExekw3aktYdWF5R3c5QjlqcDZhQTZpSnpMbWNHRjBLUEc4Y3d6QmdHQVpXcXhVV2l3VXloVUloa3JSSjAvOEMyTEVBR0hkMzkrM2UzdDR1WUhPWnkxeFdvM2I4K1BIa1NzSlFpZEZEOU5Ca01obmtjam1Fd2dIRXdvRldxd1ZwRzV2YWNMTko0YWl2cis5QnVGVGlYZVl5bDlWc0dIcXhSWXNXL3ptQW1nVVZNSG80NXRha0VGUW00eDgyRlFXQ0pFbU9aVmxDaUdGRnNRVEdiRFp2cG1tNm9XdjVYZWF5R3IyNG9kZnJrWkZoQU1Nd01CcWZuc21Ed3NMQ2ZiQnZ5cFVlSE1lSmpia2l3U1JZbHVVc0ZndHNkQS9BY1p3VWpzcHNQVGJCYStPSU1vVVhGZ0NUbHBhMkxTd3NiSXpyMUhPWnkyb08xSktUazhHQmtLWWgvSitpMzc5enh4OW5uSGhyVnZEVEJuYkVraVJKY3BSTUJscE9RNkdnb1ZBcW9WS3FvRktyb0ZGcm9OUHB5a0pSVzNCekRFZnIxcTE3bm1YWm5VL2FZaVltSmtLcFZEN1FiVnF0Vm93WU1RSitmbjV3ZDNkSFhGd2Npb3VMWFZmMlUyNTZ2UjRjQ1BnSEJEMTFZM0ZXcTNWdjdBZnZaOXNBbThYQmF5c2Zob29ENzdaaEtDV0RUQzZIWEM0SEtaUEpSRkRqYkR3MnpvYnRnd1hBRkJjWEo3bE92L3UzY2VQR0lTa3BDZXZYcjBkU1VoSjI3OTZOWWNPR3VSYm1LVGVESVJOYW5kdFQrZHZUMDlNT09RbEJMYWk0ZjAxb3hpVTVpaFNBVGNibjErUXlHZVEwWFJhS09oWVJDSUt3YS8xSVNFallQRzdjdU04QWhMaE93M3V6b3FJaXpKOC9INnRXclVMYnRyeVUyYUpGaTlDeFkwZk1tREZEVW1wMzJkTm5ETVBjazZkMjRmdzVMRjcwQTc3OWJsNk43dCtGQytleGRjdG1OR25TRkIwNmRwS2UvKzIzWDdGcDQ2OEFRYUJ0MjNiNElKWnZvS2hNWVBuTW1kTkltUHNkckl3VllhRmhxZGV1WDcvZzRLMUpZYWlJUDQ0TnVTUkZnaVFkdkRXaFNrclRkSm5IWmh1S2l1R29qZGZHakI4L3ZzUmlzZno2dEoxd2E5ZXVSWk1tVGFCU3FWQzNibDNNbTJkL0F1M1pzd2ZObWpXRFNxVkNkSFEwWnMrZWJRZFFQWHYyUlBQbXpRRUF5Y25KS0NrcGtVQU5BTnEwNFpXMmp4dzU0cnE2bjJJckxDeTRwOC9WYjlBUUU3Lzhxa2IzYmNIOFJDeGRzaGpYcmw1RlVWR1I5UHgvLzkzRXhnMGI4UDBQUzdCMDJRcWNPWk9NNDhlUENaL2hCWlpYckZ5TjkvdC9nQm5UcGtxcG1HbGZUOGFFTHliaXh4V3I0T1BydDJQdm50MFdaOTRhUU5oWFJFVndJMGxRdHVOVEFxako1SExJUmRvaXNUd3F2SW1qS0lwZ0dJWWpTUklNdzBoNU5nRFdXN2R1YmFwYnQrNklwK1ZrKyttbm54QWJHNHR2dnZrR25UdDN4bDkvL1lYaHc0ZERyVlpqd0lBQnVIcjFLcnAxNjRhaFE0ZGk3ZHExMHV1MnlrVTllL1pFYmk2dlAzcjc5bTNRTkcwbnFDR1h5K0h0N1kzVTFGVFgxZTJ5Y3BhZG5ZMnBYMDlHVnFZQkJFbGk4T0FoYU5ucUJhU21wbUxVaU9Hd1dNenc4UERFOGhWbDlQVGpQdnNVYVduOHdGQmVYaDdVR2czV3Jsc1BnRmVGU3BnN0Iva0YrZkR5OU1LWXNlTWtrUjRBV1AvTHo5aTRjWVAwZmdBWU1QQkQwRFNOMmJObTJPM2JQMmZPNFBubXphRldxMkcxV3VIcDRZa3pwMDhqT3JvRnpwdzVqWkVqUHdGZ0w3QnN5TWlBVXFWQ1dGZ2QwYk03VllHM1ppVUlNYjlHY0FEQkVRQkhrQ1JIa1NSSWt1S2tTRk1NUXdWdlRhRlFsZ0diVGE3Tk5oeTFteDJOaUlpNFlMVmFONUlrK2NiVGNGSjk4ODAzK09DREQ2UWNXR1JrSkc3Y3VJSEpreWRqd0lBQldMaHdJUm8wYUlCWnMyYnhkOC82OVpHU2tvSTFhOVpJMy9IMjIyVmlGY1hGeFU2TEZRcUZvcHdzbWN0Y0JnQS9yMXVEeG8wYm85LzdIK0RhdFd0WU1EOEJMVnU5Z09EZ1lQeXlZU011WDc2RXFWTW0yMzFtMmd6K2ZNelB6MFBjd0ZoSmY4TnNObVBxbEs4d1plcDBCQVlHWXNjZjIvSDlndm1ZOVBqTzdyUUFBQ0FBU1VSQlZHWFo1NXMwYlZxT2VmaE9Bc3VabVptWTl2VmtNQ3dEblpBbnRCVlkvdlBQblpMQWNrRkJBUlFLQmN4bU0rWis5KzJXWlVzWFp6bDRhcmJnSm9TaDRQaUhXRFN3U1ovSnlydzFXbWpXVmFtVUlPVnlPUnk4TmpnT3hndTlJZ3dBSmk4djc2a0pSOCtmUDQ4WFhuakI3cm1ZbUJqODk5OS9NQnFOT0gzNmREbXgydGF0VzFmNGZTcVZxcHhLRDhCclZUNE1mVXFYUGZvVzNhSWxkdis1Q3l0K1hBNVRhV21WQlZWWWxzV1hreWFpMnl1dm9VV0xsZ0I0YWNqVTFGdUlIenNHL2Z2MXhabzFxMkRJeUxEN1hMMTY5ZkhHLy9XOGkydmtIQ2FNSDR1QmNZUFFydDMvc3dmWUNnU1c4L1B6TVdya3gvQnc5empreEZ1ekxScEliQjYydVRXS3NnbERaUlJrTXJtTnQ2YUFTcVdHVEFRMnNXdFhERWNwaXVJRUhVSGIyVkhHeDhkbkQ4TXdod2lDYVAya24xUXFsY3JwQ1NQK1h5YVRsVk02cjB5VU5qZzRHS1dscGNqTHk0T0hod2NBd0dLeElEczdHN1ZxdVdqdlhPWUUyS0piSUhIK1FodzdmZ3dyVnl3SFRkUDRjdkxYZC96YzBpV0xvRlFxMGFmdmU5SnpGb3NGQVFFQmRtSHIvWmk3dXp0S1Mwc3grNXZ2NE9ibWhqTm5Uc05kT0s5RmdlV09uVHBMM3FKV3E0V2JteHNLOHZNeGVjcTBveSsvMU9aNkpkNmEyTHZHbG5WcENHRW9qMUdTUXlhWHlVREw1YUFWQ2lpVktxZzFhcEEwVFVNdTlINVVFSkxhRlJFQVdJdUtpbjUrR2s2cWhnMGJsa3ZxSHo1OEdJR0JnWEJ6YzhOenp6Mkg0OGVQMjczdStMZXRSVVZGUWFWUzRjQ0JNcUhrZ3djUGdpUkp0R3JWeW5VVnU2eWNUWnM2QmNlT0gwUDc5aDB3TG40Q2poNDlVdTVtNm1nSER4N0EvbjM3RUQvK2N6c1c0WWlJQ0JRVUZPQ3YvZnVrZk52bXBOL3RQbnY1OGlYODlsdlZnckxuR2plRzJXeUdRcUVBd3pBNGN2Z1FtalRsdFV3ckVsZ09DQXlFdTRjSDhuSnpkMWZrclFHRUhac0hRTmg0YkdWNU5jck9XMU5BcVZCQ3JWWkJxOUZDSmdKYlJVVUVtN1lQYVJLaGZmdjJ2eDQ1Y3VSRGdpQWVlMDBFbG1YeHh4OS9sSHUrYmR1MmlJK1BSOCtlUGZIc3M4K2ljK2ZPT0hqd0lPYk1tWU9KRTNteDRLRkRoMkxldkhrWU8zWXNQdmpnQXh3OWVoVGZmLys5WFZpNWJ0MDY1T2JtWXZEZ3dkQm9OSWlOamNYUW9VT2gwK2xBMHpUaTR1TFF2MzkvU1RIYlpTNnp0VDU5M3NQczJUT3diczFxc0N5TFVaOThDcElrN1lvSCtmbjVlS3ZuRzJqMi9QTVlPMjQ4RXVkOWg5TFNVZ3daL0tIMFBZa0xmb0JPcDhPMEdiUHczYmZmNEllRjMwT3RWbU9VZzQ1bzhxbFQyTGh4QTNyMCtMODc3bHRvYUJoNjlQZy9EUHB3QURod2FOT21yU1FlWHBIQXNrd213N2o0Q2VkZmU2WHIyUXE4TlF0QmlLQW1GQTBJOE40YVJZSWlLVTRtVlVMbFV0OGFyYUNoVkNtaEZpWVBpSjQ5ZXlJL1B4K0ZoWVVvS2lwQ2NYRXhTa3BLWURLWkNKUEpCQnM5QkpMak9Ca0FPUUJsVVZIUkFKVks5ZlhqZk5Ja0ppWlcyQng3L2ZwMWhJV0ZZZG15WlpneFl3WnUzTGlCc0xBd0RCOCtIRU9HREpIZXQyUEhEb3dhTlFwWHJseEJWRlFVV3Jac2lRMGJOa2k2b2oxNzlzU05HemR3NHNRSktaODJZc1FJckYyN0ZpUkpvbWZQbnBnM2I5NERuNEJ3MmFObCsvZnZSM2hrZzZmaXR4b01obStmajJwOEJEejl0NmhyWUFSUEJWNUNFRVFwRDNDRWxWZWhvamlaVENZcVVIRzJUQjRhclJZNm5RNmVucDd3OGZGRlVGQVF3c0xDUVBUdTNSdDVlWGtvS0NoQVVWRVJpb3FLVUZKU2d0TFNVcGhNSnNKc05zTnF0WklzeXhJMmVnajA0c1dMdldKalkvOEFFUDYwbm93cEtTa29MaTVHeTVZdHBlY21UWnFFYmR1MjRkaXhZdy9VNjd4eDh6L2s1T1NBWVJpVWxqeWRJMXBLbFFvVVJjSEwweHRoWWJVbDhsUm54bkdjc0diWnNGcHJiczJVS2hWa01obTh2YndSRmhiNjFBTWJ4M0hYUGhzemV1TGFOYXVMQUpTZ1ROZkFDRjVhcndTQVdRQTJScERXWTRWd2sxTW9GZnhjcUVvRnRVWURuVllMTjNkM2VIbDV3OS9mRDhIQklRaVBpSUJNcFZLaHBLUUVORTNEYkRaRExwZkRZckU0VmtodFExSUdBRE53NE1DQzNyMTcvNlJVS2ljOWpnczhiTmd3SkNZbTNzOEJ3cFVyVjlDM2IxK3NYcjBhVFpzMlJVcEtDdWJQbjQvNGVON3R2cE5La3FQcDlYcjQrOS9kNkxQSlpNYVpNMmRBeVdUUXVibTc1UGVLak1qTnkwWFd5VXcwYmRJVU5DMTNldXhPbkRnSmtxS2cxZFg4bWhVVkdaR2RrNFBNckV4RUM4M2FGZG50Sjd5Zk1UYzNkL1BhTmF0Tk5pR29XUVF5QUJZT1lBZ0hiUVB4UHh6SGdXTTVzQ3dMbG1WNUpnK0J6Y05xdGNCaXNjQmlOc05zTXZQQXBsUXFVVkpTWXBkcms4bGtzRnF0b0NnS0RNT0E0emlKTnB6ak9BWUFzM256NXAvZmZQUE45d0RVZmR3V09DRWhBUWtKQ2ZmMUhUMTY5RUI4ZkR4R2pCaUJ0TFEwQkFjSDQ5TlBQOFhISDM4c1hVQTFiZW42ZEZBeW1Vc3dXVENOUmd1TlJvc01mUnJTMHRNUUZscmVTN3ArNHlaSWlucGdhMmE3VHpkdi9vZlFTbVQ0YWdVSFA4bmUydldsUzVlY2RBQTFtOXhhV1l0SEdhRWtCYmxNMUEzbHE1Nml0NmJWYXVIdTdnNVBUeS80K2ZraE9EZ1lkY1BEMGFqUnN5QTFHZzJVU2lVVUNnVm9tb1p0TVVFb0lvQ2lLTTZtbjAxcy9iRDI2dFVydDZTa1pPWFRmQ0hGeDhmait2WHJNSmxNdUhyMUtzYU1HVk5wQ0ZUZGxwMlYvZFFPVDFkbVdwMGJzckt5bmI2V2s1UHpVTlpNcTNORFZuYldVM3RNc3JPemt4WXZXbGdLKzRLQkNHNFNrNGR0aXdjZmlwS2daQlJIVVE3TnVNS1VnVnF0a2tETzI4c2JNcGtNcEZhcmhWcXRobEtweEwyMGZxeGJ0MjR0eDNFdWh0MkhjZ2U4OStIcHA4RnpZMW5HNldzUGE4MDBHaTBZSy9PVW5xdmN4VzltenpyaEJOVEVmRm81d1JaZTZaMTBtQWZsUjZma0FxaXBWRXBvTkJxNHVibkJ3OU1Udm42K0FBQ1pUcWVUS3FKQ3djQXUxeWFUeVRpcjFVb3dET08wWVRjMk5qYi9yYmZlV3FIUmFLWS80UWNHZXIwZUJvTUJWb2FCc2JCNjJFMjFXaDFrY2huOGZIM3ZXdHFQSUlDU0VoZVhXMFZXVWdIUDNjTXNydHpyOFNLU00wSE1Ud2F1NU4zYmhpTTh3QTJKQWhmbFd5Mi9veUEvSHpldVgwVlJrYkZTSUErckV3NDNkM2RrWkdRa3JmcHBSWVc1TlRocHlDVkprdVA3MW1TY1RFYnhvQ2FUZzZiTGRBNTRqUU1kNzYxNSswQ2g0THNMWkI0ZUhpZ29LSURSYUpTcW9XYXpXUUkzcTlVS21Vd0dobUhFcEozVTB5YmsycXh2dmZYV21pMWJ0cnhCRUVTTEp4WFVrcE9UQVlLRVJxdmoyVTJyVWR1NHFNaUlkSDBHMHRQVHExMEpmdGZPSFZpK2JDa01oZ3dFQlFWaDVhcTF1SHo1RW1MNzk1UGVNelorQXJwMjdlWkN3a2ZaRXBPQnEzbjMvdmtyZVNEbUo0TmIwckZhZHVmNnRTc29MaTY2NDNsOTQvcFZQTnU0NllsM2VyMlo3QVRVbkhwcmtKaHliWWZjNVpETDVKRFRmRE91UXFHQVVxV0NSc05QTTNoNjhYazIwV1NlbnA3SXk4dERZV0doYlE4YmFKcm1xd3dPWHBzTjY0ZWsxcng5KzNaelFVSEJqKzd1N2s4a3NPbjFlb0FnNGVkZk0yTEpZbkxab0U5RGVucDZ0WWt5cDZXbFljYjBxZmh5OHRlSWptNkJnZ0tlR2ljaUloSzdkdThEQUF5TWZiL0cxbTNaMGlWNHZYc1BPellUY2IvbXp2a0dLU24vZ0tacHRPL1FDWU0vR2lJTlg2ZW1waUpoN2h5a25FMkJRcUZBeDQ2ZDhHSGM0SExEMmRWcGQ5cm1pekV2UUM2WGd5QkloSVdGb1gvc0FMUnVIZlBBemtIaWZrRE5CdHlxeSs0RWFyYmc5dC9ObTF1dlhMbHN2WU8zeHBUUHJWR1FVUlFualU3SjVUd2RPRTJYZVdzNkxkdzlQT0R0N1dNM0FrbjYrUGpBdzhNRE9wME9hclVhS3BVS0NvVkN5clU1eTdjNXk3VjVlSGhzWmxsMjI1TUliQVpESmpSYVhjM25ZSFJ1TUJnTTFmWjlGLys5QUI4Zkg3UnVIUU9hcGlXZU9JSWdvRkR3ZDcyN2JVbTVHL3R4K1ZMazVKUlA0RSthT0FHMWdvUHgyKzlic0dqeE1odzljaGhKU1pzQThEMTVZOGVNUnIzNkRiRHA5eTFJU0ZpQS9mdjI0cmVOTmNlOVVOVnRKaTVZaU0xYnQ2Ti83QURNbmprZEczL2Q0UElrNzJCV3EzVlhtNWdYTGpqeDFDcjAxa2c3YjYwTTFPVENQS2hDcVlSS3hjdnN1YnU1dzh2VEMvNDIzaG9Ba0g1K2Z2RHk4b0tibXh1MFdpM0U5Zyt4U21vRGJKd05oYmpkaUJYNGFYeUx3V0Q0OFlrOE9JejFnU1NiTlJvdHJGYnJmWC9QNmRQSjZQNWFOOHlhT1IxNnZSN2RYK3VHN3E5MXc0b2ZsMWY1TzQ0ZU9Zdys3NzZOOWkrM1JXei9mamgzOXF6ZDYvdjM3VVcvOTNxamErY082UDkrWHh3OWNsaDZiZGpRajlEOU5UNjBIZm54Y0hSL3JSdUdmalJJQXBHMmJkdmh2WDd2UTZGUXdNL2ZIODJqbzNIcDRrVUFmTVhTMDhzTHZmdjBBVTNUQ0E0SlFldVlOdmozMzVxclQ5M05ObFVxRlZxM2pzRzQrQWxZdkdpaEhmSGlrMkJGUlVWSStuMFR4bzRaWFQwaDYvWHJPMkUvRTJvSGJCekhXVG1PWXppT1kxbVc1UWhBOHRaS1NvcTVUSU1CcWJkdW9hQ2dvSXk5UTZtQ1JxT0dRcUhBZ3ZtSk9IandMNmpVYW50Z0N3b0tnbytQRHp3OVBhSFQ2ZURZL2xGSmxiU2MxeFlZR0hqWVlyRXNlZEtBcmJvS0JWWGFsdEY0MzkvUnRHa1VOaVZ0eGNjalJxRldyV0JzU3RxS1RVbGIwZS85L2xYNi9OVXJWL0Q1aEhnTUhqSVVXN2Z2eEp0djljS29rY01saXB1Yk4yOWd5dVF2OGRsbjhkaXliUWRlZmZWMWpCOC9UaEtsU1VoY2dFMUpXd0VBYytiT3c2YWtyVWhjc0pBLzRVZ1N2ZnYwaFllSHAzRGlYOFBoUTRmUXNpVlBBdURqNDRPRXhBVlFLbFVTRUo1T1RrYmp4azFxYk0zdlpadlJMVnJDYkxGSWdQdzRtZU1RdmZoM1ZsWVdCc2IyeDVVcmw2dmxSbEphV3JwbS9Qanh0eHhBemVUb3JmRmpVenllTUF3RGtxVEFzZ3dzRmdzL1NSQWVqc3lzVExBY0I2VkNDWlhRM25IczJGRW9sVXE0dWJtWDJ6YXBVcWtRRUJBQWIyOXZ1THU3dzdiOW96S3Z6VmxmRzBFUWxuUG56cTBFY052bGhEKyt0bVZMRXRxKzFBNnRXOGRBb1ZDZ2M1ZXVhTkN3SVhidTNBRUE4UGIyd2JMbEsvRk1vMFlnU1JLdnZ2WTZMR1l6YnQzNnI4cmJPSGYyTERxMmI0ZCtmWHVqUWNPR2VMSHRTMDdmdC9ENytWQ3AxZWphN1pVSDl2dXJzazJDSU9EbDZRVmprZkhST1hBRW9QMGdDbTZqL3dkQ0tZUHF0ZnB3RzljR2hKdkM3bTJqUjQzQTZlUlRBSGpHM084WHpBY0FlSGg0NEtmVmE5SHYvUStxWTI5dUh6dDI3SzhLUERYYjNqVVc0SE5yRkVWeEhNZHhGRVdCWlZsT29WQUl3KzBxZUh0NXdXZ3NoRW9vR09UbDVjRnNNdUhGRjErRVhGNSt1b1FFZ0tDZ0lQajYrc0xUMHhOdWJtN1FhRFJRcTlWU0hzWVpBMGhGdWJhb3FLaXJ4Y1hGUHp6cEYzL1h6aDFRV1Boa0N0cnE5WG9FQnRwMzVkZXVIUWE5UGgwQW9OVnFjZkxrQ2NSOUdJdmU3L1RDKysvMWNlb0pWR2FObm4wV08vL2NpNS9YYjBSNmVqcVdMUzN2Nks5YzhTUCsvdnNvcGs2ZERwbE05a0IrZTFXM3lYRWNjbkp6b0gyRWVnaVZIU05BcU9SZ2Mwcmd2ZlExcU45b2lOSS9yOEw5VTN2cXhDRkRoMlBxMTFPUW1EQVAyN2R0UmQvMytBcTVlRzFYaCtYbDVmMlNtSmlZNitDcG1aem4xaml1VE1vWWtNa29LSlJLbU0xbVVDU1BOY1hGeFNBSVFuQzZGRGg4NkJBR0RJaUR6czE1bzdVTTRLbC9Bd0lDa0pPVFUySHJoOFZpRVdheXJKekE5c0d4TEF1Q0lGaU80d2piWEZ1Yk5tMVdIajkrdkIxSmt1MWMvcy9qWi83Ky90Q25wOXZmZm0rbklpcUtiMFU1OE5kK3JGNzFFK1o4TncvQklieG8yWXN4THpqMWFoekJ6bFJhaXUzYnQ2RkxsNjVRS0pVSURBeEUrL1lkY1BEZ0FidjNiVmovQzNidDNJRzVDZlBoNXU3K1FINzMzV3p6K1BGam9PVnkxS3RmLzRFZkgwWHJFTGpIdnlqOWJmazNFN21mN0lTOG5qZEt0bDJHOVhvdWRNTmJJbmZrRHBpUHAwSDdnWDBMVVhoRUJEcDI2b3lWSzVaajVxeHY0T1oyNzFNWWNya2M3ZHJaWCtZN2R1dzRNSHIwNk9OVjhOWVlBVDlZcTlYS0NaRWdLSm1NVXlxVUlBa0NOMjVjbDRZSGVEWVBEVTZmVHNaTDdWNUd2UVlOOE8vRkN4VURHd0NFaElRZ0t5dkxhZXVIQ0d3aXVERU1JejJFR1ZJV0FDSDJ0U1VuSjVzTkJzT1NnSUNBcHhMWWZ0MnducS95Y1J6YXZmei84SDcvV0FCOG04TlhrNzVBWVdFaG1rWkY0ZERCQTFJdTZrR2JiWkdDWTFsWXJWWnB3cVRiSzY5aXlPQTRkT2pVQ2MyYVBZKy8vdHFQYzJkVDhOblljUUI0Z1JHQ0FFaUtRbjUrSHJadTJTSjhqLzFzYkdCUUVJNGVPWUs2ZGNPUmw1c0xYejgvMEFvRmZscTVBdm41ZVhpM2QxOFVGUmx4NE1CZmFOS2tMSisxWlhNU052MjJFWE1UNWo4d25ycXFidE5rTXVGMDhpbk1tREVOY1lNK2VpaVU3cVpEdDJEb3RycjhNYjJlQzdxSlArVFArY0Y2TXcrcVYrdkJjamtiY0RndU8zZjhnWDE3OTJESzE5UHd6ZXhaK0hyYWROU3JkMjhBYmJGWXNIT252WmI2dFd2WHRoWVVGRGhPRjRnZVd6bUdYSXFpUUZJVXdIRlMzNnhjTGtkQVlDQTBHZzEwV2gzKytlY00vUDBEUU5NS1hMMXlCWVVGaGJqNDd3WGs1R1NESkVuSTVYTDBldnVkOHNBbWhxUzV1Ym5JejgrSDBXaEVjWEV4VENhVEhialplbTBNdzNBY3gwRjRTTk1JQUN5QmdZRUhUQ2JUZkpxbWh6eE5vSlo4NmhTMmJFbkN3aCtXZ0tJb2ZESnFCRUpEdzlEdTVmK0h1WE8rUWZzT0hkSHp6YmR3N08rak9PVGdwVHdvYzJ6UW5URjlLbVpNbjRvT0hUdmg4eThtSVRLeUhpWitPUm5mTDBpRVBqMGR0VU5ETVhQMnQ1S2FVWmV1M1hEMmJBcGkrNzhIaXBMaDllNDlFQmxaRHptNU9YYmJHVFZxTkdiUG1vbmx5NWFnZHUzYVdMSnNCV2lheG95WnM1R1lNQmMvcjFzTHVWeU90aSsxay9JNkRNTmcxa3crREh5bmx6MzMvc3BWYXhBUVVQMjloRlhkNXJBaEg0RWdlSUxGVDBhUGVhQjliRld4a3UyWDRmYkovMEQ1cUpIVmV5TTBiejREOTg5aWtEL2pvTjM3VWxKUzhPMmN1ZkR6OTRlYnV6dE9uamgrejhCV2JoOUtTbjRjTjI3Y0RRRzh6STRGQTFRd1pRQ0FzMWdzMEdpMW5OeEd3MEF1cDVHV25nYVpUSVk2ZGVyQ3o4OFAwMmZPUm9QNkRlRGo2NHVGMzgrSFZxdXpBN1Z5d09idjc0L3M3R3prNWVWSndDYU9XWWtlbTQzWDVoaVMyazBqRUFSaDNyTm56L0pPblRyOWp5Q0lxS2NGMkk0ZE80b09IVHBKellLdnZQSXFqaDM3RysxZS9uOUlTZmtIRXdWRm9QQ0l5QnJmbDA2ZHU2QlQ1eTdsbm8rTXJJZS9EbGF1WTlxNmRVeUZGNjVDb2NDRXp5ZmFQVGZ3dzdoeTcydlJzaFYrMmJDeDNQTVJrWkg0YnA1enlpaUtvckQvd09FSGVzeXFzczA3cmRmOW1rNVhEWDJTREllQ21ZZWtQNDNMVHdQTFQ1ZDcyeWMyckxsTm0wYWhhZFBxdVR3NWpqdnp4eDkvT0JZTWJITnJaaW0zUmhDc1FQbk5XYTFXRGdDVVNpV24wK21rV2RDaW9tSmN1bmdSL3Y0QjZOQ3hFOC9rSVV3WStQaFdQaHBXTGp0YXExYXRjcmsyMFdOejhOcWtjSlJsV1Z2VmVJYmpPQktBdFV1WEx2cnM3T3dmdkx5OEZqNU5YcHR0ejZ2QVl5Y2xuR3V5SWRabGo2OVJGSVdpSXVNalFXamc3ZTE5VHltU3RMUzBqV3ZYcmpVNkFUV1RIYWp4bkdzc1FZQWpTWktuOXBielBXcmkySlNDcHVIdDVZWDY5ZXNMdEVTKzhQRHdnSStQajkxa3pxREJ6Z1BDY3Z3Njd1N3VjTmJiVmtIakxpZlNHMVhVdE92dDdiM2RZckVzZmxwTzBPYk5XMkRYenAwb0tTbUJ4V0xCdHExYjBFTG8wV3JhTkFyYnQvRW56T1ZMMWRQL3BGS3BYYWh3bDJ2ek1OZXNvbTM3K2ZtaDJGaHhsWjBMOTdoL2o2b2F2a00wdGRvK3QxaGFXcnA2NU1pUkYyMUNVSk9EdDJaWE1DQUlnaU9FWm44WnJ6akZ5ZVV5WVJhVWxtWkIrU0YzZ1NYWDJ4disvZ0dTZHVsZGVXd0FYMGdRdlRaYnFuQkhyODIyaUNCNmJTeGZCbU9FU2lsSkVBUjE2TkNoWlczYnRuMmVJSWhtVDlLRk0rQ0RmaUFFN2pWZlh6OGtKQzdBODgyYm8xUG5MaGowSVY4d2FQUGlTMmpYN21VQXdQQVJvL0RseE0veDY0YjFDSStJNEJPbVQ5Q2QvbEd5SW1OaGhhMEw1RU5hc3lKaklhZ0tXa2dDQXdPUm5wNk96SXgwcUFXaUJUc2JHZ1V1TWZtZVowYTVjQTlnYVBWbGhPclVqWkFHNFRtT083MW56NTY5VHZKcXR1MGRqa1VEZm5SS0hKdVN5eUNYQzU0YkxZNU5sUTI1ZTNsNndjL1hyOG95bFU1WFdTNlhJemc0Mks2SVlFdHBKSWFpanUwZlRnb0pWZ0NXZHUzYXBXWm1aaTcwOGZGWjlEaGVKRm9uK1k5dGYreXE4UDI5M242blhESVRBUEx5Y2pGejlyZHdjM1BEbmoyN1VWSlNVcVZ0M1Nsc3lNN0pjUUdiZ3htTmhmRHg5WEg2bW8rUE43S3pIL3lhR1kyRjVRZ0JiSzFaczJZd0dBelE2L1VvS3N5Mzc1UFVBaGhiRzBEdCs5aURiT0J5ZHZWZEYxb050Rm9OYnQ2OHVmSEhIMzhzcUNnRWhZT3lPNStWRVpUdk9BNGN5M0ljeTRKbEdUQ01sWDlZTGJCYXpMQ1lTMkV4bDhKVVdneFRhUkZ1WHI5eTc4QUdBQUVCQWNqTnpiWHoycHpsMm13OU5vZENndWkxV1FpQ0lIMTlmWGVXbHBiT1ZTZ1VIejl1RjRtc211N3dwU1dsR0RONkZLLzhydFZLN1JPMmQzUm5YZFNWV1dob2JXUm1HcENoVDROVzUrYlNQREFXd21nc0JHTzFJclMyY3hBSUN3MkZ3ZkRnMWt6Y0o1WmhFQlphT1RENStmblowZTg4NnBhZm43L2twWmRldWxTUnQwWVFoQWhzREVFUWpNamNJYXBPMFRRTmxVb2xlR2RsZE45ZVhsN3c5UzFUbldyUW9BRWFObXhZOVd1MnNoZHIxNjVkWVYrYm85ZkdzaXpoVUVnb1Z5VmR0V3JWMHY3OSt6Y2lTYkw5NDNTeCtQbjVJVjJmY2Q4WFFGU3pabGk0cU9KUjJxSWlJd0lEN2s3TWhTQUlORy9lSE5kdjNFUk9UamJ5Y25KUVd2cDBraytxVkdxUUZBVWZieCtFaG9aVSt0NFcwZEc0ZWZNL1pHWmwxZWlhcVZScVVESVp2TDI5N3docWo1dFpyZFo5RXlkT1BPQUFhcVVpc0FtZ1pwOVhFN1FNUkNWM3VWek95ZVZseEpHMkFPZmg0UUZ2YjI4RUJBU2dkdTI3V3p2aVRvSWp0Mjdkd3ZuejUzSHQyaldrcHFiQ1lEQWdKeWRIQWp4SExWSUI5QWlXWlFtV1pTbU80eWp3V3FRMHgzSEtHemR1dEFvTkRaMEw0TEZTSHpsMUtoa0VRVUNqMVVGZHpYZjQ0aUlqaklVRkFMaHFKNXAwbWN0cXlOSVBIVG8wT3lZbTVwWUFaQ1hnTlVLTFlLOFBhaXVseDloNmF3cUZncFAwUVRXODBMR0hod2U4dkd6RVdlcld4VFBQUElPUWtKQzdpN0x1OUlhUWtCQkpVTmt4MStiWStpSEtZbkc4MlU0a1dIbm5naUREd3NLT0Z4UVVKT3AwdXFtUDAxRnMxaXdLNmVucE1CZ3lVVmlRVnkwc0hBRGZ2eVNUeVJBVUZJaUFnQURYNWVLeXg4SnUzNzY5S2lZbUpsVUlNOFhRczlSSkNHb1Z2RFZwMEYwaWpSUkNVVnVhYjFHL1FBeEZhOVdxZGRlZ1ZpVmc0L000b1U1emJVNTYyc1JDZ21Odm16aHVaU0VJZ25KemMvdlpaRExWcFdsNndPTjBNQU1EQTZ1TjNkWmxMbnRjeldnMHJnNE9EajRGKzlZT3h4RFVZaE9Dc3M1QzBJcEFqVmQxOTBGUVVCQkNRMFB2YVIrcnBCT24wK2tRRWhKaVIyOWt5N2dyRHFrSy9XMTJ2VzJDMXliMXRva0xzV3ZYcmlVc3krNXhuU1l1YzlsamxWZmJ2M0Rod2oxd1hnR1ZQRFk0eklNSzVKR2NMYWpSQXNXM0dJN3FkS0lvQzU5WEN3a0p1ZWVKRE5uTm16ZXJqb0k4VlpIVDdubnhPZkYxNFNFbThGaWhBNThRd2UyVlYxNUpPM0Rnd1BjaElTR2hBTUpkcDR6TFhQWm9HOGR4MTA2Y09KSDA2YWVmRmpvSlFjdUJtaUNBYkNlblo0c2ZGZUVJTCtSQ2dtVlozQTArMlFIYjNiaDZ2cjYrVGljUmJBU1dZVU1mVHBoTUpoQUVBVUc2VDJvQklmaGZSTFpwMCtaRVRrNU9ncWVuNSt5cWhzVXVjNW5MSG82emR1M2F0VFZ2dnZsbXFvTzM1aXdFdGRxMmRvamhwOER2S0JVTXRGcXRYZWdwVmo4akl5UFJ1SEZqcU5YM1BpRnlWMkNpVnFzUkdocGFib2EwZ3ZsUmptVlpRaXdrY0J6SENnVUYyNmtFMHN2TGEzTnhjWEdRU3FVYTR6cDNYT2F5UjlPeXM3TVhoNGVIbjdYeDFFcHRId1JCbUd4QnpURUVGU1FHeXVYVmJNSE5WOURXRFEwTnZTOVF1MnRnQS9nRWVrVjhiYzdHck1UR1hRSGNPR0VxUWN5M2tRRElWcTFhTFRseDRvUy9YQzd2NXpxRlhQWVVoM3JRNi9YSXlEQ0FZUmdZalk4R1EzTnBhZW5QNzc3N3JtMi9XcmtRbE9NNENkUTRqbU1GUmx5T1pWbU9ZUmc3dmo4eHNoTWZZcFZVb1ZCQXJWWkRMcGZqMHFWTER4YllBQ0E4UE56cHFKV1RhUVJPNkdjVFI2M0VXVkxiRmhEaW4zLytJZmZzMmJPNGZmdjJmaFJGZFhHZDRpNTdHa0V0T1RrWkhBaHBHc0wvRWRndmk4WHk1MDhyVit6S3ljbXhPQUUxMndrRGZteUtJRmdDWVBsMEZLL2VMakIzY0VvbEw4U2kwV2o1bmpWM0QzaDVlOEhmUHdDMWdvTVJYamRjMHRHNFg3dW5iNkFvQ25YcjFrVndjREQ4L2YzaDVlVmxWeWxWS3BXMitUZE9aQUt4VmJZUzNGVXIrQllRYytmT25WTXZYYnEwa09PNFk0L3pDYnBwMHlZb2xjcUtFeFZXSzBhTUdBRS9Qeis0dTdzakxpNU9VbmR5MmROcmVyMGVIQWo0QndROU1tTnhMTXVlUEhUd1lOTEVMeVlVT09UVVNvUkhxUjJvU1hSRUpGZStDbHArdWtEbnBvT0hoNmRFUlZRN05MUmFRTzJlZ1EzZ0ZXM0N3c0lRRkJRRVIyMVNKeXBYb3BxelhRdUlBN2labm5ubW1aUzB0TFFGSE1kZGVWSlA0SEhqeGlFcEtRbnIxNjlIVWxJU2R1L2VqV0hEaHJtdTdLZmNESVpNYUhWdWo4eitjQngzOWR5NWMrdjc5bmtud3dIVWJDdWdKanRRRTNyV1NGS2FCNFZjSnVma3RDaDBySUJLWlQ5bDRPUGpBLytBQUlTRTFMNHY3WVZxQXpZQUNBNE9SbWhvS0FJREF5WCt0a3JBRGJiOWJRSi9tMFFsTGp4TXdjSEJCM0p5Y2hJQVpENXBKMjlSVVJIbXo1K1AyYk5ubzIzYnRtamJ0aTBXTFZxRUZTdFdJQ3NyeTNWMVA4WEdNTXc5ZVdvWHpwL0RxQkhEcTN0M3NtN2V2TG02YStjTzEyRS8yRzRIYkFSQldEaU9zNGlDeHh6SENSeHJGRWVRSklxS2pNak56VUdtd1FBQ3ZOaTBScTJHMldUQ2diLyt3cFl0bS9IbnJwM3c5dmF1OXNiMysvYjc2dFdyaDlxMWEwdmc1dUhoWVNmaFp3TnVZa2dxOXNPeHprSlNBQ1lmSDU5dCtmbjUzd2tMV0tQV3FsVXJUSmt5QlMrLy9ETFVhalVpSWlMd3h4OS9ZTzdjdVFnT0RvYTd1enNHREJnZ3FTMk5HREVDblR0M3R2dU83dDI3WTlDZ1FVNi92MmZQbm1qZXZEa0FJRGs1R1NVbEpXamJ0cTMwZXBzMmJRQUFSNDRjY1YzZFQ3RVZGaGJjMCtmcU4yaUlpVjkrVloyN1VxclhweTl2MDdyVmVaUzFkWlRhaEo2OHQyYlgya0V5SkVteEhNZXg0RGpJWkJUTUpoTlVLalVYRWxJYi9nRUJTRTlQaDFxdGdWcWpRVXJLUDNqbDFWY3hldlFZUkVSRTR2Q2hROVcrbnZmZE8wWVFCQ0lpSXB3cVdqbXJqb290SUFBSUFFNkxDUnpIa1I0ZUh1dU5ScU5HbzlIRTEvUkpOWDM2ZEd6ZXZCa3hNVEVZTkdnUWV2VG9nZTdkdStQQ2hRczRmLzQ4MnJWcmg2NWR1K0tOTjk2NDYrL3UyYk1uY25OekFRQzNiOThHVGROMm5GeHl1UnplM3Q1SVRVMTFYZDB1SzJmWjJkbVkrdlZrWkdVYVFKQWtCZzhlZ3BhdFhrQnFhaXBHalJnT2k4VU1EdzlQTEYveFUxbTY0N05Qa1piR2E1Ym41ZVZCcmRGZzdicjFBSUNyVjY4aVllNGM1QmZrdzh2VEMyUEdqcE5FZWdCZytiS2xpNy80ZlB3cEIxQXJ0UUUzdmxnQVdJUnJsaVVJc0FSSmNBUkhnT000VGlhVGdXVlp6dDNESFFxRkFnUkJRSitlRHJWS0RZcWlvRmFyVWI5QlF3VFZxb1dpSWlNT0hUejRNcm5Fd0FBQUlBQkpSRUZVNkFFYndJOWNoWWVIbHlPakZNdThUZ2JrYmZ2YklJU2s0bVNDQ0c2RVZxdGRXVnhjckZLcFZDTnI4dVRwMGFPSHBJMzR4aHR2WU5teVpaZzZkU3AwT2gxYXRteUpaNTk5RnVmT25ic25ZSHY3N2JlbGZ4Y1hGenN0TENnVUNwaE1KdGRWN0xKeTl2TzZOV2pjdURINnZmOEJybDI3aGdYekU5Q3kxUXNJRGc3R0x4czI0dkxsUzVnNlpiTGRaNmJObUFVQXlNL1BROXpBV0l3Y05Sb0FZRGFiTVhYS1Y1Z3lkVG9DQXdPeDQ0L3QrSDdCZkV3U0JJYnk4L04rK09MejhZZWRoSjRsZDhpcmNTekRpRlJsa010cFVad0ZSVVZGTUFwc3hrb1ZINzFwdEZyNCt2cGkrN2F0eU0vUFIxNWUzcU1KYkFDdmNHVkxJVzdidEd2anNkbjJ0VW5neHBhcDZqSUMwRW5nOXRaYmJ5MVp2MzQ5clZRcWEwekd6M2I2UXFGUVNQbEQwV2lhcmhiZ1VhbFVNSnZONVo0M21Vd1BSWi9TWlkrK1JiZG9pWVM1Y3dBUWFOR2lKV1ovTTZkS24yTlpGbDlPbW9odXI3eUdGaTFhQWdDdVg3K0cxTlJiaUIvTDk4S3pIQXVOb0YxUVdGaTQ3SjFlYisxSCtha0MreERVUmtKUEZEdG1HSWFUeStVYzc1eUFvMm1lTERYVFlJQkdvMFYwZEF2OC9mZFJ1THQ3UUtWVWdtVlpyUGh4T1hyMWVoc05uM2tHNDhlTmZYU0JEUURDd3NMc3RCRWNweEZzaUNoaDQ2MXhBdmlKa3drUW12MUFFQVN4WmNzV1l0cTBhVXZpNCtObENvVWlyaVpPSHBrVEh2cUsxS1NjUFcreFdLcTBuZURnWUpTV2xpSXZMdzhlSGg3U1o3T3pzNnZNNWU2eXB3ellvbHNnY2Y1Q0hEdCtEQ3RYTEFkTjAvaHk4dGQzL056U0pZdWdWQ3JScCs5N2R1ZHBRRUNBWGRnS0FFYWpjY1dFK0hGN1UxTCtjZXhUY3dRMU96WmNvZG1lb3hVS2pwYkxZYlpZUUpFa2FJVUNGRVhCMTljWGRlclVoYnU3QndpQ1FHQlFJSFJhSFJpckZSTStuNGp3OEhCY3ZQaXZkQzA4c3NBR0FQWHIxeStuUmVvWWpqcDRiU0s5RVd4eWJveVFneU1JZ2lDKyt1cXJQRjlmM3lVREJ3NGtGUXJGd0lkNW90RTBYYzUxdm5UcFVwVTRvNktpb3FCU3FYRGd3QUc4K3VxckFJQ0RCdytDSkVtMGF0WEtkUlc3ckp4Tm16b0YwUzFhb24zN0RtZ1IzUUp2OXV3QmxtVXI3ZmM2ZVBBQTl1L2JoNFdMbHRqZGlDTWlJbEJRVUlDLzl1L0RpMjFmd3RXclYzSHE1SW1menA0OXUyZmp4ZzBsTnA1YWljUERSQkNFV2NpcDJiSGhNaXpMeVNnWlpESTVTa3BLT0hjdmJ5aVZTdWgwYmxBbytQK1hta3I1SnR4YXdRZ0xEVU5BWUNBVU5NM3Y2NEVEYU5LMDZhTVBiQVJCb0g3OStoS3dPWHBzRE1QWWVteTI0QVpoRkFOQ3ZzM3VPNGNORzVaTjAvU1NmdjM2NFdHQ1c4dVdMVEY3OW13c1c3WU16WnMzeDZKRmk1Q2VubDdoKzlldFc0ZmMzRndNSGp3WUdvMEdzYkd4R0RwMEtIUTZIV2lhUmx4Y0hQcjM3dzh2THkvWFZleXljdGFuejN1WVBYc0cxcTFaRFpabE1lcVRUMEdTcEYzeElEOC9IMi8xZkFQTm5uOGVZOGVOUitLODcxQmFXb29oZ3orVXZpZHh3US9RNlhTWU5tTVd2dnYyRy95dzhIdlFOUDJUaDZmbm54dlcvMUlFKzBLQmJRT3V5WEVPVk9wWG95Z1FESU9Ta21LVWxwWndhclVhbmw1ZVVLbFVxRmUvUG03ZXVJR2pSdzlEcDlPaDE5dnZJaVE0QlBYcTEwZjgrTTh4ZWZJa1dNd1doSVNFWU16WStFY2YyTVJjVXIxNjlld3FwTGE1TmlHdlZxNllBUHRLcVMyNEVRUkJFSEZ4Y1prbWsyblJ3SUVEV2FWU0dmY3dUclRYWDM4ZEkwZU94T2pSbzhHeUxQcjE2NGNCQXdhZ3ROUjVaOHFHRFJ0dzQ4WU5EQjQ4R0FBd2UvWnNXSzFXZE8vZUhTUkpvbWZQbnBnN2Q2N3JDbmFaVXd1cFhSdHo1ODEzbXRiNFpjTkc1emZUWDM2dDhQc2FOR2lJaFl1V3dHZzBycGcxYzhhZVpVc1hWd1Jxa3FjbWdocEprZ3hRUmhvcG95aE9ybFNDcGhVYzMzd3JpTEtvTlhCemQwZGtaQ1Q4L1B3UUZGUUxZWFhxb0c1NE9KUktKWjU3cmpGK1dMUzBSdGZ0anBvSDkyTVpHUms0ZCs0Y3JseTVndFRVVk9qMWVtUm5aNWZUU3hCQ1YwSUFRRUpnNFNVNGppTnROQlBrSE1jcEFDZ25USmpnSGg4Zkg2dFNxWWE0VG4wK1VYemo1bi9JeWNrQnd6QW9MWGs2UjdTVUtoVW9pb0tYcHpmQ3dtcFhHcTV4SENlc1dUYXMxcHBiTTZWS0JabE1CbTh2YjRTRlZVd1J0bi8vZm9SSE5uZ2c2MVJZV0xoc1F2eTR2VGJocHpOUXMyWHNzSWlNSFdKelBVWEpPSUhlbXdjMXBiMjRzYWRubWNwVWFGZ1k2dGR2QUY5ZjN3ZDJMdFFvQjVxL3YzKzU0WGduRlZMWTVObWtTcWx3d2RyMnVJbUZCVXlaTWdVblQ1NzhZY09HRFdhMVduM1ByU0FkT25UQW4zLysrY2hjbUhxOUh2NytkemY2YkRLWmNlYk1HVkF5R1hSdTdpNzV2U0lqY3ZOeWtYVXlFMDJiTklWWW9YTUV0Uk1uVG9La0tHaDFOYjltUlVWR1pPZmtJRE1yRTlGQ3MzWkZkcnVHK3hrTENncCtHRHBrOFA1TGx5NmFLd00xbEZWQUpUMVFnVGhXVUpvaUlJeE9TYXdkSkNWUWYxTVU1RElaeFBsUXRWSUZzOGxVNDcvdGdRRWJ3SXZCaU9CV1dYVlVySkFLdld5YzFXb1Z3WTJ4RFV0RmNOdStmVHMwR3MzU3dzTENVcTFXT3hLQThtNzNiZGV1WFkvOWhaeXVUd2NsazhFL0lBZ3VBelFhTFRRYUxUTDBhVWhMVDBPWUV5TFY2emR1Z3FTb0I3Wm10dnQwOCtaL0NLMUVocStXVFp0Uk5WdHBkbmIyNGxZdG14OUdlZmJiaWp3MUt3aUNJUUNHRUR3MUdVVnhNcG5ncVlsRDdXbzF0Qm9OZEhha2tZR29YVHNVa1pHUkNBMExlK0Rud1FOaHJRMFBENjlJWUZrQ09KdTdxWlJyczFxdDRtdE93UTBBZERyZHF0emMzR0lQRDQvaEFIeWZ0Z3M1T3lzYldqZDNGNkk1bUZibmhxeXNiS2ZBbHBPVEE5MURXRE90emcxWjJWbVZBbHNOV1paZW43NDgrdm1vVTdDZi9YVDAwdXhCRFFLb0VTUkhFaVJIa1FKYkIyMURHQ25NZjJvRnZRSStCUFZEclZwOFh1MWhnTm9EQXpZK2FkbkFLYkE1ZW0yaTV5YUNHOEFQQ0ZjQ2JweW5wK2ZHakl5TUlsOWYzNDhJZ29oNFdpNWVqcnYzNGVtbndYUEx6OHR4K3RyRFdqT05Sb3Y4M0p4NytpeVJuQWxpZmpKdzVlNjY5RGx3VjIrYXNsYTMvbS95K1R0NGFxWnlvRVlJb0VZU0FndXVESEk1elNsb2thbERBRFdKQmRjTGJqb2RMT1pTNU9WbUl6TkRnOHlNTktmckVGWW5IRzd1N284L3NBRkFvMGFOeW9GYkJjQW1nWnVZY0tzSTNNUy8vZjM5LzdoKy9YcEI3ZHExNDBpU2pLNStFT0haVFEwR0E2d01BMk5oOWJDYmFyVTZ5T1F5K0FtMHlIZDFzaE5BU1ltTHk2MGlLNm1BNSs1aEZsZnUrWGdsSmdOWDd3N1VXSEFuejVYY1d0ODVkZloxbEovOXRHL3BzTXVwbFFjMW1RQnF0SUwzMUJ5TEJhTElzZFZpZ29lSFI2WEs3VVZGUnR5NGZoV05telo3TW9DTklBZzBhdFNvUXEvTkdaalllSEJPd1UzNFhvN2pPSzVPblRxSGs1T1Q4NTU3N3JrQkZFVjFyazVRUzA1T0JnZ1NHcTJPWnpldFJtM2pvaUlqMHZVWlNFOVByM1lsK0YwN2QyRDVzcVV3R0RJUUZCU0VsYXZXNHZMbFM0anRYOGJDUGpaK0FycDI3ZVpDd2tmWWlMc0VOUXZIL0htdzhHSlNuNHlGR1RiaHArUHNaNGtBYXVaeU9UVTdVSk9ERmdTT2xRcEJMay9qV0FIMVEyQlFFSXdGZVpXQ211MDUvMFNFb3FMSjVYSUozTzdnc2RubTJ5b0NOM0h3bGhORDA2aW9xSE1iTjI2YzFhMWJ0MHlhcHZ0V3h6N3I5WHFBSU9Iblh6Tml5V0p5MmFCUFEzcDZlclZ4VTZXbHBXSEc5S240Y3ZMWGlJNXVnWUlDbmhvbklpSVN1M2J2QXdBTWpIMi94bzcxc3FWTDhIcjNIblpzSnVKK3paM3pEVkpTL2dGTjAyamZvUk1HZnpRRUZFVUJBRkpUVTVFd2R3NVN6cVpBb1ZDZ1k4ZE8rREJ1c1BSNlRkaWR0dmxpekF1UXkrVWdDQkpoWVdIb0h6c0FyVnZIUEpxZUttditlVTMyb1YxZjVQMVdVQW1vbGZQVUJBTFlDa0NONzFWVHFrUVJGbDBacVBueGJSMWhvV0hJejh1dTBlTlVWU01meGthVlNpVWFOV3FFOFBCd0JBY0hTMExNdGx4dVlyT2ZRcUdReEZWbE1obG5JOFRNMkhLNUNUbUNVZ0FsYjd6eHh1MG1UWnA4YXpRYXZ4RmV2eTh6R0RLaDBlcHFmRjAwT2pjWURJWnErNzZMLzE2QWo0OFBXcmVPQVUzVDhQSHhrVHhuUVFxdHdwblk2ckFmbHk5RlRrNTJ1ZWNuVFp5QVdzSEIrTzMzTFZpMGVCbU9Iam1NcEtSTmZQakVzaGc3WmpUcTFXK0FUYjl2UVVMQ0F1emZ0eGUvYmZ5MXh2YXpxdHRNWExBUW03ZHVSLy9ZQVpnOWN6bzIvcnJob1Z5MDNqOTJoOXZvLzBsL2V5VjBoYkpUQkFCWWM2MUYzN2UrTnZIM0wvSit5M2ZJcFJVTGo3THFweTJvZ1dCZ1UvMmtLRms1VUFNSFpHWm1vcmk0V01xcCtmcjZJaWd3Q0tHaFlhaFh2ejVvWVZSS1BNK2FOV3VHamgwN29uMzc5Z2dLdXJzcTlJb2ZsNlAzTzczd2RxK2UyTHBsYzVrM2FyRmc5cXdaNk5mM1hmVHYxeGNIRHg1NCtCNWJtWmVpUWFOR2pad054WmNMUzBXeFZkaFVTNFVUMG5GQ2dSUEQwbi8vL1pmVjZYUXJNekl5OUw2K3ZvTUlncmhuVVdZclkzMGd5V2FOUmd0andmMVR1Sncrbll4SlgweUEyV3hHY1hFeHVyL0doNWs5M3VpSmZ1LzNyOUozSEQxeUdJa0o4NkRYcHlNME5BeWpQdmtValo1OVZucDkvNzY5V0xac0NUSU5CdmdIQkNBdWJqQmF2Y0JmYk1PR2ZvUmIvL0ZDdHlNL0hnNlpqRUp3Y0FnU0Z5d0V5N0pvMjdZZHVyM3lDaFFLQmZ6OC9kRThPaHFYTGw0RXdGY3NQYjI4MEx0UEg5QTBqZUNRRUxTT2FZTi8vNzFRWSt0K045dFVxVlJvM1RvRzh2Z0ptUGpGQkhUcTNPV2hNTE5vK2pTR2NWa3kySndTSVp6aHJ2MW56bHJ6d3MydnpzSmVUY29abjVvUWZoSldnQk5CamVVZEJ0S21VQ0RuYUtGUWtKK2ZEMFpRbXFKcEdsNWVaWjVhYUJnUGFvNlNlWFhxMUFGRlVkaTVjeWNVQ2dWZWZ2bGxaR1ptMnBGR09NNjlpbitucFB6RG4yUExWOEJrTWlFdWJnQ2ltajJQb0tBZ2JOKzJGYVdscFZqeDB4cms1T1JnMElleGFOeTRpVVF0bnA2ZS9uQThOdEYwT3AxVHo4M1QweE02bmM0WnhiaWRNSXlvbitEZ3Vaa0Z6NjBVUUxHL3YvOGYvLzc3N3lTR1lmYmU2MzVXVjZHZ1N0c3kzbi91b1duVEtHeEsyb3FQUjR4Q3JWckIySlMwRlp1U3RsWVoxSzVldVlMUEo4Umo4SkNoMkxwOUo5NThxeGRHalJ3T1EwWUdBT0RtelJ1WU12bExmUFpaUExaczI0RlhYMzBkNDhlUGswUnBFaElYWUZQU1ZnREFuTG56c0NscEt4SVhMT1JEQkpKRTd6NTk0ZUhoQ1lDbjBqbDg2QkJhdHVSSkFIeDhmSkNRdUFCS3BVbzYwVThuSjZOeDR5WTF0dWIzc3Mzb0ZpMWh0bGdrUUg3UVpqbHJnUGJENS9rYkwydmQvL2Z0Yy9OZnVQbFZDdXdaYjRzZEhxVUUvekFEaEFVRXlrQ056K3h3VnF1Rms4bDVDdis4dkh6STVES29WQ3JVQ2F1RHFHYlB3OHZiRzFxdEZyNitmcnluRmhhRyt2WHFRNnZWT2wzWHRMUTB5VmxoV1JhZW5wNTI3MW02WkJIV3JGNEZBRWhKK1FjZkR4OEtBTGh5K1JLYVJrVkJvVlRDemQwZEw3endQNXc0enVzOG5UbHpHbTNhdkNpY1R3VGtjaHFYTHBVZGgxa3pwejljWUFNQWQzZDNDZHhDUWtMc3dPME9GT08yWVNrcmhLYmluVW9FdHhJQXhjODg4OHlwbjMvK2VVcHBhZWx5VnhyNnpyWmxTeExhdnRRT3JWdkhRS0ZRb0hPWHJtalFzQ0YyN3R6QmgwTGVQbGkyZktVa2xmYnFhNi9EWWpiajFxMy9xcnlOYzJmUG9tUDdkdWpYdHpjYU5HeUlGOXUrNVBSOUM3K2ZENVZhamE3ZFhubGd2NzhxMnlRSUFsNmVYakRXY0JLOHdodmd5ak5RZFk1QWlTZTFPdUhYNVN1Ny9UYm1sZ09vT1FKYkNRR1VBb1NaZjhCS0NLcFNKTUNSSURpYXBqbVNKRkZTWE13VkZCVEEzY01kT3EyT24vMTBjNE83dXp0VUtoWGMzTno0bkpvQWFyb0tSRmhvbWdiRE1QRDI5a1pNVEF4WWxwWDREa1Y3NTkwKzJMdDNEeExtZllmSlgwN0MwR0c4ZmtQZDhBaWNQSEVjUnFNUkJRVUZPSGZ1ckhUVHo4L1BoMUtweE5tektmaHN6R2pRQ2hyNStma0FnS1RmTnlFOFBPTGhoYUsyNXVIaGdVYU5HbFY2RW9uL0Z4NGNRUkNFeFdMaGJPc01MTXR5dHYxdFlsZ0tnT3ZkdTNjYWdJVHM3T3diWGw1ZWd3RGNjNGIrd29YemlCc1lpMlhMVnlJaU1oSkxseXpHNXFSTmtwZFNrWDAzNXhzY1BuUUlPVGs1bURqcFM3UjVzZTBqQ1d4NnZSNFJFWkYyejlXdUhRYTlubWN4MFdxMStIUFhUa3laOGlXTWhVYTdNS0txMXVqWlo3SHp6NzFJVDAvSEY1K1B4N0tsU3pCZzRJZDI3MW01NGtmOC9mZFJKQ1FzY01xWlZ4TlcxVzF5SEllYzNCeG9IMUlQSVZka1NiODhmL2VxaHNlR25NSXhpZnhSQkRaVEJhR25CZUJFcFhhR0FNRUp3QVlLQkNlWHk2RlVxcmk4dkZ4UWxBd0IvZ0ZDOVZNSE56YzNlSGw1UWEvWHdOUExTd2cvRzl5eEYwME1SdzhkT29TbVR1aUp0Rm90QmczNkNDTkhETU03Ny9aRy9mcjh2R3lUSmszUnNWTVhEQnM2R081dTdsQ3IxRkNwVmRMbk5tOU9Ra2xKQ2FaTm40VjUzMzBMQU1qSTBHTnowdTlJblAvOW93RnNBT0RwNldrSGJqWWdWZzdZeEdPTHNpWmV3bWF1VkFRNmFhNE5BQ3VTNG5sN2UyODZmLzc4alhyMTZ2V2pLT3JsZTkxZnVWeU92LzdhajRqSVNCdytWRFhPOWhFalA4R0lrWjlnbk1CZytxaWF2NzgvOUE1VVRMZHZweUlxaW05Rk9mRFhmcXhlOVJQbWZEY1B3UUlQM1lzeEx6aTlJVG1DbmFtMEZOdTNiME9YTGwyaFVDb1JHQmlJOXUwN2xFc0FiMWovQzNidDNJRzVDZk5ydEpIelhyZDUvUGd4MEhJNTZ0V3YvOENQajVXeDd2dGJmMzV6dHgvalUxR0pPcnQ5Z1lDUWV0UUFnaVVKZ2lWQWNDVEhnZ0xKeVVCQ0pwTnorZmw1Y0hOM0IyTzF3bURJd0xQUE5TNmJLUER6aFZ2cUxmajYrcUYrL2YvZjNwbkhSMVhlKy8vem5HWDJ5YjRNeVlTRWtJUmN0dUNsd3JWaVhTNHVWRnNwdUsrWHFxMC8vZlc2SWxhOXJiVjFCWmNxeXExNlJhdTFldVVWYmRVZjlkNjZ3cjBnb2xHSkNZUWtKQ1FrSVNHUVpTYVptYk04dnovT2VVNmVPWmxKUUFGSnpQTjZIZVprTXBNWnpweDVuODkzTDBmcUtNZUlOWnY5N0xQUEFCanppTzJkcUJzYUd2REEvZmZpbnQvZWk3WFBQWXZKaFVVNDIxVEtsMTUyT1M2OXpFaHN1T2JxbjJMcTFCTEx5bk83M2JqbnQvZENFQVJFbzFHa3BxYmlyVGZmUkgrb0g5ZisvSnB2M3hTMXcyM216SmtvS1NsQlFVRkIzRmkvMU5SVXkrZm1kcnVaYVVyWjNGS2JXY3I4Ym9yTk5CMWdwdW1xVmF2dUhoZ1llUExydnRkL21ENERIMys4Q1hWMU94RGcwak0rM3J3Sks1YmZZdjM4NkNPcnZyWG8yWWhmRHJPN01RQlFYYmZhU2dIQTJlZjhDQjkrK0Q2MmJQa1lxcXJpdmZmZXhWZlYyM0RHbVdjQ01BYU1FQUlJb29qZTNoN0xSMEwxK0tEUHBMdzhiTjYwQ1lxaW9NdU05anFjVHJ6NHh4Znd5aXN2UTFFVTlQUWN3SVlOSDJIMjdObERwdkNiZjhVYnIxZmlzY2RYSDdVK2RRZjdtdEZvRkI5djNvUUg3cjhYUDcvMnVxTWVPT2pUQnArOS9mSGZyVDM3YjNlTVpub09BSWlZMDZSaUFCUkN6SUhHRkxvZ2lWUWtBcFVnVUJrQ0hFU2toQUIrZndyeTg0T1lWdjRQY0xuY2NMdmN5TWpJUkU1T0R2THo4cEdlbG82OHZMeFJvUVlZRVZRbVJCd09COUxTMG9ZMWFmMTA2eWU0L1pkMzRwUlRUOE1qanoyQm1xK3E0NEtIaXFMZ3BSZi9DRUtBV2JObVd6NWsxUXhrOVBRY1FFTkRBOHBLeTNEVjFkZmdsVmZYWWUwTEx4NDdpbzAzUzJmT25EbE1zWTJ3VVdJc0VFS3NOdU9ta3FOY2dxL09lclFEMEcrLy9YYjk5dHR2LzQrV2xwYTYvUHo4ZnlHRUhIY283OU1oeS9CNlBIanhqeTlnd1VrbjRhdnFiV1BHaDJaUDBIM3dnZnZ3NEFQMzRmUXp6c1MvL2VwdWxKYVc0ZGUvK1MzV1BMVWFIZTN0bUZ4WWlJZFdQV0pOTTFyMHc3TlJYYjBOVnkyN0FxSW80ZHpGUDBGcGFSbjIyOHFGYnI3NVZxeGErWkJ4Slo0OEdjOCs5d0ljRGdjZWZHZ1ZWai94ZTd6NnlwOGh5ekpPUHVWVVhQa3ZQd1ZnNUNtdWZPZ0JTSktFaXk4OEw5NU1mT2xsQkFLSFA1ZndZRi96RjlkZkIwS0F3c0lpM0hMcmJVYzFqMDBIL2J3aHNyZnlsSmI3NnRBNGxPSmtVMnJXTGNGUUh6VUFSaVVCaUE1UUtnQlVwSVJLZ2dCUkEyUWlVaWNrT05QU2gyby9mVDRVRkJRTTVhbVpnWUlkTzdZUGkzNG1XMDFOVFVoTFM4UENoUXNCQUo5Ly92bXdtUjhYWERnMDdDZ3pNeFBMYnh1YWY3Qng0d1k4L3RnanFLZzREZzg4dU1xQzVLSWZubzI2dWpvc3U5SlFjNys0NGNaaENsczZGcjk0cWFtcG1EVnJsdFVPaFJCaTNmTDczSDBXM0FCUXJxcEI1M3h3aVV4VHJhQ2c0TVBYWG51dDdweHp6cm5BNVhJdE85ajNxS2dxVHZ2bmhmajlZNC9naGh0dnhoL1dQSFhNSGNjenoxcUVNODlhTk96KzB0SXlmTFJ4NURtbUo1NjRJT2tYMStsMDRxNS8rM1hjZmRmOGJIamZ6M256L3lsaE04U1MwbEk4OXZqcWhIOWJGRVY4dU9GL2orcHhPcGpYSE8xNGZkUGw5eWZQa3h3SWgvLzAycjRQMzcvclFHVWZaM3JHRWdITjlLY3BBRFdnUmcyZ0VRcWRnRklDUWtVUUtpb2FKQUF5a1F5b1FZYmI0ekdTYi8xRFByWHM3QndqcGNQTVUvdmU5dzYrV3RHcTJQbWFhOEdDazdCZ3dVbkQ3cGNrQ2JmY3VuekU1eDZUWUdNZk5BODMrNVlBY0JiY0ZFV2hab1VDSDFTZ1hLVUNVMjhhQU8zODg4OXZCZkJrYTJ2cmwzbDVlVmNTUWtadHdxNXJHcjUvNGdJME5UWEZSWG9FVVlSK0JKdDNUcXp4dVVSUlJEZ2Npc3VYMUhYOWkxMjdkbFdlOG9NVGQ0QkxaeG9CYWpFeXBOSllkdzZkQUdhUWdFQUVvUklFeUJBc3FMa2d3K1gwd09QendlZnpXVDYxbkJ5alRLcW9NSEdlV3FMbDhYZ3hNQkErcU1jZHlTVWR5eCsyMSt2RjdObXpJWXFpdFkwQ09tb3FPQll4dFFjVm1HMnEyMDFUQUZvd0dQeGc3ZHExWDExd3dRWG5lVHllbjQzMi9qSXlNdkIvZi9HdjZPZnkzUEx6ZzlqZDNJUllMQWFxNjZpdHJVRmhZZEVSTzBadXQyZUNDb2Q0Ykw3Tlk1YnN0WE55Y3REUnNkY0NXeWpVLy93ZlgzaitvL3Z2dXpka1UybDg1SlBmZUtpWlppZDBFMmpVaUh3S1ZBS0JURVRxZ0FnSFpMaUlETGZEQTA5SkRueG1TZ2VER3QvOTFwNm1rV3hOS1M3QnJzYjZFZUhtOFhneHBiamt1d3Myd0NpL3NzUE5EcmtFSmlwVGIvWXFCY3I1M3BocHFwdW1xUVpBWGJac21iWnMyYkpuNnVycVBpMHVMcjVFRk1WRHlzbkl5OHZEcWFmOU15Ni85Q0trcEtSYVpVeEFmTHJIVjlYYjhNVGp2OGY5RHp5RXFTVmYvME5PZEtXZldFRFlITktiYUFuZjBqRUxoL29oSmtraG1UUnBFdHJiMjlIUjFycGhkMHZyMjB1WExHNUtvdEo0bnhvTGpNV0dWSm94UmNxNGNCczFuNElnVWtrU0lVbG1odzZIREFkckVtbk9LR0Q5MUN6ek16L2Z5Rk9iVm41SXFUWXBxYW1vT0c3dXQvNzVIOUdaQjRkelVVcXQrUWt0TFMzbzZPaEFWMWNYZW5wNjBOdmJpM0E0akhBNGpFZ2t3by8vSTl6Z1pxTHJPcHVsUUFDd2VRcWlDWGlaVXVvQTRBRGdCT0FzS1NseGJkbXk1VWVOdTNaZG1SczRPb00vOTNic3dkeEQ2UERSMU5TTTd2MzdKenJvRGp1T2Jjakt5a1JoZ2s0VFRjM042TzQrK3Nkc2IwY2JNak16VVpTZzBTU2xkRTluWitkL3pwa3o1NU9Pamc3RkJyVm9Jb1VHSzlwSlZCaU5JVFRURXFGc015dDBJRWtTSk1tYVV3QW5CemFQeHdPLzM0KzB0RFJrWkdRZ056Y1grZm41bURKbHloR3RKZjVPS3phTHdJUmc1c3laN0FNYXB0enN0K1kyTEdKS0NLRW0zTUFyTjJhYXdwaEdyd0ZRNit2cjFZeU1qTW9ubjN6eWt3VS9PR1Z4UmtibWxVZjZpaTdMOGlFOXA3QndNcnE2T3JHM293MCtmOHJFeklOUVAwS2hmbWlxbWhCcUFGQlVXSWpPenFOM3pOaDcwalV0SWRUQzRmRExiN3p4eGtlWFhYYlpnVkZVV3BSVGFOWkVkbE9sYVNiTWRBNW1Sc2RiMmRiSzI4MzFValBiZVdkblp5TVFDR0R5NU1rb0tTbEJlWG41bUQ0UHhveGk0MWREUXdQcTYrdlIzTnlNOXZaMjdOdTNEL3YzNzBkZlh4OUNvUkRDNFRBR0J3Y3Q1V2JPWENEY0dFQmV2UW1tZWhOTTBFc0FKRTY5V1FydS9RODJWRXdwTGw0cWl1S1pSK0wvMWJtM0haTUN1WWZjdG9oU2lsMU56ZGkvdnh1YXFpTVMrVzQybjNTN1BSQkVFVm1aV1Nnc0xCaFZiVFEzNzBiWHZuM1FWTzJJSFRPMzJ3TlJraElxTlVWUi9ydXFxdXEvNXMrZjM4SUJMUm5VRXBtZDZwRFphUUhObUUxZ0FzMG9aSTlYYUY2djE0SmFSa1lHc3JLeU1HblNKQlFXRnFLa3BBUlRwMDRkOCtmQ21BUWJBTFMwdEdEbnpwMFczRG83TzNIZ3dBSDA5dmFpdjc4ZkF3TUQvR2kvWVhEVE5JMll3NXZabUQ4R04yYWVzcEYvTWc4M0FNNVBQcTFha0pPVGUvN2g2dFE3RUE0aDFOOEhnQjcyUnBNVDY5aGJ1cTV2Yld4c2ZMdTB0TFRXVkZ4MmxSWkxvTktVQkNwTjV6WnFXakJKb2VZeDB6bjgxbnlDZENQeWFVS3R0TFFVQldZbHlWaGYwbGg5NHdVRkJUQ3JEbUFXeFZ1M2ljeFYwMFNsZ2lBUVFSQ2dLQW9saExDR2wvYkFnaFVwSllRdzA5UTZBWStmZTl6N0pTVWxteDUrK09FelVsSlN6aWVFZkczZDd2ZjdJVWtTOHZJbUlSQUlUSHpyeC9HaWxPNW9iMi8vNjhLRkM2dHFhMnNaek95K3RKak5oOFpEelJZY3NJWVhVMUVVcVNpSzF2ZEJsbVhLZXU0eHFIbTlYZ3RxUnBEQWJEdFVXSWl5c3JKREh2MDRBYllqdEhKemM4R2FVUEtBU3dRMXp2ZkdaaUVTUlZGQUNHRUp2WlFPRFRYVmJXa2hHZ0RWbkcrcW1QNDM1ZHh6ejMzcmpqdnUrUERXVzI4OVBTMHQ3WHhDU1BIRTEzZGlKUURhcnE2dXJyL2VmZmZkVzllc1dSUGxUTWxZQXRPVDNTcDJzNU9kaTh5WHhpYXkyMVdhTE1zVzBPeFFZd0VDbHM1UlZGU0Vzckt5WWUyRXhyd3AydFRVTk9iL0U1RklCSTJOalZhMGROKytmVmEwTkJRS1lXQmdBSU9EZzRoR281WlphaGJvRWxZenljeFNMbXBLYkthcFNDbVZtSW5LK2Q4Y0FKeTMzSEpMeWhWWFhMRXdKU1ZsNlRkcGFqbXh4aFhRR3ZmdjMvL21talZyUG4zMjJXY2pIS0NVSkVDTGNiQ3pSenVaVXJPaW5jejg1S3dVcTlzMFUydDhvQ0ExTlJWcGFXbm0zTThBQ2dvS1VGeGNESmZMTmU2Ty9aajFzU1U0aWJCanh3NDBOalppejU0OTJMdDNyd1U0RmxSZ2dPUDlic3ozeGdHT21GMTlDZk8vSVQ0MVJJUVJYRWdFT01meTVjdjlLMWFzT0RVakkrTmNRc2lNaWEvM2Q5S0hWdFBaMmZtM1gvM3FWMVhQUFBOTWRBU2cyVGZGTkR0VkRtWWFiM2JhVlpxcDFPS0FsaWp5eVlER1VqbUtpNHN4YmRxME1adk84WjBCRzF0TlRVMW9iR3hFYTJ1cnBkNE9IRGlBdnI2K3BFR0ZCSUdGdU1ncFUyOE1jaGpLZlVzS3VPTGlZc2ZHalJ0UHlzM05QVnNRaEJNbXZ1N2pmMm1hdHJtbHBlWGRrMDQ2cWJxMXRaWEJpUWVhY2hCQVk4K3pBZ01BS0IveFpDcU5EeEFrQ3hLa3hFMW5EeUFZREtLNHVCaEYzOUlnNHdrZjI5ZGNSVVZGZkZ1ak9CL2NLQUVHZGlWazZvMXFtbWJsdmNITWRUUFZXMXh3d2VaL2l3RndORFkyT3ZMeTh0NEY4RkZkWGQyY29xS2loYklzLzNqaTZ6LytWalFhZld2Nzl1My9NMmZPbkYwY3pIaVZGa3NBTlNVSjBQamdRRnlTTGEvU2VMUFQ0WEFNODZjeDA1TlA1eWdvS01EVXFWUEhWWkRnT3dNMndBZ3E4SDNiWEM0WCtKUEFEcmRJSkdJQkxoYUxXWkZUQmpjdXVFRDRrWCtzUXdpTWZDSVZnR0lxT0F0d0FCeGxaV1ZiQUh6KzdydnZ2anB2M3J3ZitIeStzd0VFSjVBd3BsMGZyZjM5L2UrOC8vNzdueTFldkhoZkVxQWxncG95a2tJekw1aDhsQjRzcHNXdGtKVHlBQUFUVGtsRVFWVG1CdWk2VG5WZGg2WnBWbDh5UlZHc0JIV202QndPQjhMaE1OeHVOL3I3KzlIYjI0dnQyN2RqKy9idGgrVVkrUDBwRUVYQlNobVpNRVdQb3QrdHJxNE96YzNOYUd0cnc5NjllN0YvLy80Ui9XNW1LVmJDNEFLWDFBdlROR1dsV1hGQkJwdUp5cHVxTWdESEpaZGM0bHE1Y3VYOG5KeWMweVJKT20wQ0UyTm5xYXI2Zmt0THkvL2NkTk5OdFgvNXkxK1Vnd1Nha2dCbzlxQUFnNWxPaUFDanhsT2dnaWhDRWtXSXJDUktraUU3WkRoa0I0eXA3S1pTYzd2aDhYcmg5L21Sa21xTXhzdkt5a0p1SUlCZzBBZ1NIQWwvV3BqTHdaeDdET1Znaml1d1hYVFJSWGoxMVZkeC9mWFhZL1hxb1g1ZnJhMnRhR3Bxd2cwMzNJRFBQdnNNNTU1N0xnb0tDcEw2M2JpRVhwaCt0NUdDQzJRVXdFbEpBQ2NEa0JjdFdsU3dkdTNhK1RrNU9RdS9TVDdjeERxaUY4Z2RQVDA5SDN6MDBVZGZMRjY4dUp1RFVpS2dLVW1BcGlZRG10a2prREpmR2hFRWlLWXZUUlFOb0VteVdSb2xPeUE3SEhDYVVITzdYSERINWFnWjZSeFoyZG1tK1RuNXFLaXB6cjN0eUpzVU9HWnlNY2VkS1NyTE10NTQ0dzA4OGNRVDFoVXFHQXhDRUFSVVYxY0RNRHAxQmdLQllUNDRleTVjTEJhREtJcFFGSVZsZFpORTVxbk5COGM2aFFpbWlTcHhKcXBrbnZBVzJOYXZYMThmQ0FTYUFieStiZHUyOHFsVHA1N2dkcnRQQXpCUjFmN3R3cXh0WUdEZ2c1cWFtcXA1OCtidFpqN1Znd0FhdjZtbVF0TVNtWndNYUlJZ1VFcXBtVjlwSk5xS2tnaEpaTFdlRW1UWllTZzFGaVJ3R3BGUHR4bjU5UHVOeUdkR1pnWnlzbk9SbDVlSHlZV0YxcXpOSTcyOFBqLzI3dDA3QWJZanRSWXNXSUFOR3paZ3k1WXRtRDkvdm5YL3hvMGJNV2ZPSEd6ZHV0VXE5alVuemNjQkxod09XMEdHU0NSaUFjNVViOVFlWE5CMW5ROHdKQW95YUFCRTg0b3RVVW9aMk94S1RwNDFhOWJuQUw0QzhQejI3ZHRuRlJZV0h1OXl1VTZaZ056Umc5bmc0T0JIOWZYMVgxUlVWT3ppMVZVU29La0hDYk9FUU9NREE3cXVVMW1XTVV5bHhabWVUcmo0ZEE2dkY3Rm9GRnMvK1FRWFgzSUpNak96a0dPbWN4UVZUWWtiUlB4TlYyMXREZDUrNjAxVVZNekI2V2NNTDVYMmVuMEk5ZmNlTTUvbHVBTmJSa1lHVGozMVZGUldWc2FCYmQyNmRiamdnZ3Z3NmFlZkloZ01vclMwRkI2UEJ6VTFOYWlzckVSUFR3L2NiamZLeTh1Um41K1B3Y0ZCU0pLRW5UdDNZdCsrZmRhZ0UwbVNhR1ptSmtSUkpLRlFDSkZJaElxaUNOYXhGd0FSUmRFQ25LN3JnbWwyaUdia1ZEUlBmR2FtU2dsQUo1V1hsMjhGOERtQXRWOSsrZVcwNHVMaU9SNlA1NFNKM0xqRHUzUmRyd21Id3gvdjJMR2o1dmpqaitlVm1jNkJhU1NncVJ6UTdPWW1pNXpUWkVCajZSdXFxc0xoY0VCa0hUa2swNEpnS3MzaGhOTTEzUFQwcDZSZ3puSEhJUmljYktSekZBU1JrM040bzU1UFBia2FqWTBOR0FpSGg0MWw1TmZSSEN6K25RTWJBQ3hkdWhRUFAvd3dIbnp3UVFEQTRPQWcxcTlmajVVclYyTEZpaFZJVDAvSDdObXpVVmRYaCtlZmZ4NlhYSElKQ2dvS1VGdGJpemZmZkJPeUxDTVlER0wzN3QzbzZ1cENhV2twWkZsR1QwOFA5dXpaZzRHQkFhU21wdEpZTElaSUpFSjBYWWZYNjZXYXBpRVNpVURYZFNwSkV1R2lxTVM4V2dzMk01V3ZhT0EzSG5UUzdObXp2ekNWM0t2cjE2K2ZOSGZ1M09scGFXbHpaRmsrQVVEcUJKNE9hZlVxaXZKeGQzZjNsNXMyYldwWXNtUkpONFlpa2NuVVdTS284UjAyVk50emRVNmhVYjQvR2t1d0ZTd2ZtaEhCRkFTQk9wMHVQajhOc3NNQmdSRHMzcjBibXFwQ2xDVE1ualViK2NFZ0tBWCszOXR2UVJBRXBLZG40SkhISHJlc2tGK3VXSTYydGowQWdKNmVIbmk4WHZ6NWxkY0FHSjF4bnZqOW8ranQ2MFZHZWdadXUvMlgxcEFlQUhqdFAxOUZaZVU2Ni9FQWNQVTFQNFBENGNDcWxRK09tUTk1WElKdDhlTEZ1TzY2NjFCZFhZMlpNMmRpL2ZyMW1ENTlPZ29MQzYzSGVEd2V2UHp5eTdqNDRvdHg3YlhYb3EydERjRmdFS0ZRQ0pzMmJVSkZSUVZ5YzNQaDkvdVJsWldGU0NRQ244K0hmZnYyUWRNMHVOMXVSQ0lSQUtEcDZla1FCTUV5VVZWVmhTaUtiTllDaTZJUzB6UVZ6UHNZNEVUeml5S1pxazYwUVk0SG5iUm8wYUpkQUZvQS9MMmlva0orN3JubmlvdUxpNmY1Zkw3WmtpUjlEOEJFSzEyYmtGQlY5ZE8rdnI3cXVycTZ4cXV1dXFxMXBxWkd0eWt6eldZNkpnTWFEelArT2JyTjNMUVVtcmtoR2RCWXp6UkNDRnd1MXpDVnRxZHREM0t5Y3pCOXhneW9xb3J0dGJXWS8wOG5JRDA5SGQvLy9vbUl4YUo0OVpVL1l4bzMzL1QrQjFjYUJPL3R3Yyt2dVFvMzNYd3JBR1BPNTMyL3V3ZS91KzhCVEpvMENlLzhiVDNXUFBVazd2N05iNjNuVnN5Wk02enpzTVBoR0hNZityak5ZMXV3WUFGZWYvMTF6Snc1RSt2V3JjTjU1NTAzN0hIVjFkWG82dXBDWldVbHVNbFcwSFVkMmRuWmNMbGNhR3hzeE02ZE82MDBFVVZSa0pLU0FxL1hpNEVCbzRlWDMrK0hwbWxVVlZVTURnNFNWVlVoeTdLVmEyUkdVVmsrRWpYSGFRMVRjS2FaYWxVMmNKQkxCRHZwaXkrK2tPYk9uVnNOWUR1QXR3b0xDOFdYWDM1NWNtbHBhWEZxYXVvMFdaWm5Fa0pLdmtzVW81VFd4Mkt4cnc0Y09GQy9mZnYyNXNzdnYzeHZhMnVyYmxObGlkUlpNcFZtL1k0bFk5ditCdTgzaXpNM2VhQnhDZUJ4UUdNS2pSQUN0OGM5bE1aaG1wN0JZQUYyMXUxQVcxc2JTa3BLY01sbGx5RWozWWg2QmdJQlJLTlJ1TjN1UkNZMmZuUDNyM0gyT1QvR3ZIbUdTMmJYcmthMHRyYmdEbk5ndDA1MWVHMURWY3JLcHFHc2JOcVlQdytrOFhxQ0wxMjZGR3ZYcnNWdHQ5Mkd0OTkrRy9mZWUrK3d4NmlxaWx0dXVRVS8vYWt4MDdLOXZkMXFPUzZLSXQ1NDR3Mjg4ODQ3S0M0dXh1VEprekZqeGd4VVZWVkJraVQ0ZkQ1cmlJdlg2N1ZTUTJSWnB0Rm9GRTZuazVqUlUycUxvREt3V1ZQc0thVzZlUitEbkFBalJZQXZ3QmR0Z0J1MjM5emNMSjU0NG9rN0FOUURlQmVBdUdyVkt0L3BwNStlbDUrZlA5bm44MDJSWmJsRUVJUnBNSHJMamVVVjFYVjlSeXdXYStqdjcyL2V2WHYzbm5mZWVXZnZuWGZlT1FndUoyd0VtQ1dEV3R3K3A4eml6RXliT3FNMm9GRytrd3pmWWNZT05MWUJnTmZqalE4UWVEekl5OHZIak9uVGNhQ25CenZyZHFDOXJRMDMzblFMSnVYbElTOHZEenQzMWlVOE9QL3g3Tk53dVZ5NDdQSXJyUHNVUlVFZ0VNRGFGMTRjOXhlNGNRdTJKVXVXNE1ZYmI4VFRUeitOc3JJeVRKa3laZGhqcGsrZmptM2J0cUhFSEtaU1VsS0NaNTU1QmhzM2JzUlZWMTJGVFpzMlllSENoVml3WUlHVjg3WjU4MmE0M1c3NC9YNXJxclhYNjdVaXB3NkhnNWtWbEc5b3FXa2FCRUdncXFxQ1VncFJGQ21sbEpoQkI4S3BPRlo0VHpqSUNTYmtoQVNRRzNILzFsdHZIUVRRRGFDR00zMkZ5c3JLclBMeTh1eXNyS3hjbjgrWEo4dnlKRkVVZzRTUUFnREhTcnVIQ0tXMFJkTzBQYkZZckQwVUNyVjNkbloyMWRUVWRGOTQ0WVVITUpTZHI0OENzMlFLTGVFK0J6UGREak1NRFFDaXlkUlpJcURaaXRhdGpVWGpBY0RuOThlVlJ2bDhQbXpkK2dtbVRTdkhxYWVlQnJmYmpYdC9kdyttbFpmRDUwdnVjZGk0Y1FNKy9PQUQvUHZUejhZbDVaYVVsS0N2cnc4ZmZmZ0JmbkR5S1dob2FFRE5WOVg0MFkvUHRSNnpjMmNkcXF1MzRTYy9XVG9CdG1OeEJZTkJ6SnMzRDNmZGRSZnV2UFBPaEk5WnNXSUZ6anJyTE54OTk5MjQ5TkpMVVZOVGcrWExsK1BtbTIvR2pCa3prSldWaFk2T0R2ajlmaWlLZ3ZmZWV3K1JTQVN5TENNOVBSMzc5eHVUejMwK24xV3h3RTVTdDlzTlZWV3hmLzkrcWlnS2ZENGZKRWtpZzRPRDBEU05NajhHU3hjUkJJRVYyNE1CYmdUSVdZQ3lkUjBaYWVPVGg0VWxTNVlNQU5qRC9WMzJHdVRSUngvMXpabzFLeVVRQ0tTa3BxYW1lRHllRklmRGtTSkpVb29vaWltQ0lQZ0lJVDVDaUpjUTRqWkJ5Qm9Bc05jQ0J3WnJiQnlsZEpCU0dxYVVoblJkRDJtYTFxK3FhbDgwR3UwYkdCam83K25wNld0dmIrLy84c3N2UTh1WEx4L2c0RVZ0SUtNandFeTNLU3h0dEkxMTBVZ0FzamlZOFNBRFM2ZzFwNlR4NWlhRG1hMnRVQnpRV044MHA5TUpTaWxTVTFOdHJidFRjZFpaUDhTNzcvNDNHaHZxNFhRNmNlZGR2NExQNTBOcmF5dHV2dkZmb1NneDlQYjI0b0x6bHVBZjU4N0Y3Yis4RTZzZmZ3eVJTQVRYLzUraENaS3JuL29EL0g0LzduOXdKUjU3NUdIODRkL1h3T1B4NEdiYjRPR3F6ejVEWmVXNk1RKzJjVmQ1b0tvcTFxMWJCd0JZdVhJbGJydnROalEwTktDNDJPZ0JLVWtTWG5ycEpWeDAwVVVBZ0QvOTZVKzQ3Nzc3VUY5ZmowQWdnS3V2dmhwMzNYVVhDQ0hZc21VTHJyNzZhdFRXMXNMajhhQzgzSml2V0ZWVmhXWExscUcydGhaLy8vdmZzWGp4WXF0cVlkZXVYV2h1YmtaRlJRVVVSY0hPblR1aHFpcUN3U0NibG9YdTdtNm0xQ0FJQWp1eENlZUxzeURIOWhOQUxnNTJuSm9URW9Fc3dUNS9tMmpqWDJla0RRbHU3ZnR4YnJBRSsvenRTSnNkWlBZdG1Vb2J0czhHOXlTQzJHZ3dZL3UyeHFVSEJUUmVwZkhOSUh0NmVqQnBVajY4UGkvOGZuTytwMW5BbnBzYlFINSsvaUdOd2ZzMlZzUE83VGo1NUpNbndEWldWbTl2TC9iczJXUDUzK3oxcG14NGpMMlpKVmR6Q200TW9GVzh6TXhVUHNqQXlyVzRzaTMrY3lJMjBNVkJqbElRZ0E2RDNTSCtuQWhzUE9DRUJGQWJDWEFqd2MwT05DU0EyRWdLVFUraTF1eU8vVkVoWm5zOTNtL0dZR2JkY3FhbmZYQTN0WGR0WmpCenVkeElTZkVQYXdMSkZGcDNkemNLSmhkWnpTQXpNak90NG5LL1AyVk1mRStPSmJDTkcxUDBoQk5Pd09iTm04ZGNFSSsveUtTbXBqTHpsSEpkSEFqWDNZRVFRdUpVSEl4eGdjVHcwMEVBQ0VrRUpVb2gyS0JIUmdIYVNIQTdGT1YyS0dBN0ZMTXpHZUNvRFdnakFVeTNBd3dnbEJCUWdJQVFDMlFHekFRQkFqRWhKZ29RK1JJb3RobWxVRU5xVFpZaENBUUNJVkExRGRtcHFjTWFRZnI5ZmhCQ0VBd0dvV2thZkQ0L1VsTlM0ZlY0MGRmYmg3N2V2bVArUk00UEhsdk5hc1lOMkRadDJuVFVYb3NmMk56ZDNSM1h5REljRG8vVXFkZFNib3FpV01yTlZHOThEU3JoRkJ6bGxCeTdwVFpUbGNGRTU5VWRyN0lJQVVrRVBRNlNvNEZNR0FWb3lhQkdFa0I4TkxWR2t5aTNaS0JqY05KSGVnNXo5ck9ac3B6elA1RXFzOEdNUUJEWTdGcUJDc0x3bVJxU0pCbGdrMlRJSnRRY1pxS3QwK0dBcnV1UUpCbVptWmxXNVFCckJDbUtJb3FMcHlMYm5FVXdzU2JBZHRSWFFVRUJjbk56MGRiV1puWHBUV1Nlc280aEl3R08zeGpZUm9NY0J6aG9ta1lKa3hoRFFJdURqVTNoeFVHUFN6MFpCakRUdEIwSlpFZlN4MmI3bVNtcHBNQ2ppWjdQZGM3QXNIMkQ5Z2JRQ0FFQkFSRUlGUWhCbkRvekZCb1ZCUUdDS0VLMFEwMlNJRW5NcDJaQVRYWTQ0SkJsT0V5ejA2Z3FFQ0dLQWdLQmdOV3VteldDbEdVWjAyZk1PT1NCMlJOckFteUhkVGtjRGhRVkZWbUE2K3pzdE5xUTkvVDBvTCsvZjBUL1d6TEFjZjQzcTRNSUR6a3VpZGlDbkdtZUluNjRQYS9jQ0V4QVlRaDJJT3c3bmd4WU5wVTNxaitOc24wNmltSWoxczNCUUc0VTRQRS9HK1lqLzNkc1RuOEFvTHBPSVFnQ0RKNFJhdlkvQTdHVW1jQUZCa1RUN0RSdmVZVW1Nb1hHQWMxVWFQSEJBVGM4SHNPWHBpb0tKaytlYkxYclp0T2lvdEhvaUZBalZWMGdUMVlCOVQySC8yUXVTUU85L2pqUTQ3SW53RFllRjZVVUhSMGQ2T3pzaEtwcGgxVFVHNGxFME4vZmI1bWpiRXZXeUpKdGxBSTZwWkFrQ1U2bmN5VEFRZE0wdnByQmdwd2dpS0JVcDdwT1RjRHBvQlNnb0t6OUtnQkNUUENaMzNlWUlCd09LaTZnUkVhNWpkdTNlSFZ3L1F6cElTcTUrRGVmNEhkY3poWmwrYytpS0ZyUFllYWxwbWtRUldrWXpBaWZnMmI0enl5b2plWkhrMDJ6MCtGd3d1RjB4QUhONHhtYXZENFE3a2RwYVNseWNuSVFDQVRnOVhvUDdnUmJYUVUwOUJ5WkU3KytCK1RKS3RCbno1Z0EyM2lFV2xWVkZVQUVlSDErZUwwKzVINk4xbEtEZzRQbzdPeEVkL2MrOUppVDZmdjYreEFPaFJBT0QyQndjQUNSd1FnaTBRaGlwbm9iR0J4RUpESUlWVkdNcTNwaTh6UnVZNHBOVlZWSWtnUmRwMFNuT3FpdXd3Q2NNUnFWUldWTkFCRFo0WUJ1bXJxTVJ5eTZOOFFuQWs3TklZbDV5WU1TQjJHQ2pnSTJBa0tTQWk0T1dQR1A0MzRtaEplYW9KUmFkWmpzLzBnSU1TcEVIQTdtTzZNTWFoYk1ERC9hY0xOelJLQ3h0a0l1dU53dXVOMGVlTDBlZUgwK3BKanBHMm5wNlFqMzk2S2lvZ0llaitlUXppdHlwS0RHd1czQ0ZCMkhxNk9qQXlBQ2NuSy9XYmRSdDl1TndzSkNCQUs1Nk9yc1F2ZCtNN2pRMjJ1WnB3TURZUXdNR0RDTFJxTndlenlJeFdMbzcrdUZKRWx3dTkwam1xaE10V21hQmtWUklFbnlVSkJoQ0c1RVZZMi80WFE2emNlWS9qaFJoSzRiMWxzMEdqV1VpaWhpeUpaRkhOZ1NwQVF4Zm1Bb2RrRVRYaXlTdGFObWJhRGkxWlQxUEdyL3ZablF6SVBOQWxnQ3B6OElJZEEwRFE2SHd3SWFNeThCd09sd3hxZHFpSUwxR1ZGSzRUTHJORjF1RjBSUndoZWZWMWwvMStQeG9LUzBGSG1abVhIcEczYUY1dmY3a1pLYWl2VDBkR1JtWkNJN0p4dXR1NXNPR1dvVGF3SnNYM3QxZG5iQjYvTWZ0ci9uZExvUUxDaEFZTklrTS9ldDIxSncvZjM5Q0lWREdEQVYzT0JnQk5Gb0JBNVp4dURnQUh3KzM0ZytPSDZMeFdLUVpVZGNBYjhKT0txR0ZCQkM0UGY3VFJWSENhVTZkTXBNVm1vTXJ5RUNaRW5pL1hTY3YyN0lGY1lCei9xSERPME5neDhiTkdLREcxVlYxWUlWcFlDbXFTQ0VRaENNYWd4RlVVQUVBWkpvdkNkVlZhRHJsQnJGNGtNcXpYTDYyemFCR0NhbXBxblU1WElOeXpkajRPS2hGZ3FGRUFxRlVGdzhGUzYzRzNzN090RFd0Z2V6WnMwR1UzM2ZPMzRlMHRMUzBOZlhoK3B0WDhMcGNHTEd6Rmx3bXdyTjQvWEE1L1daTGJvTmhaYVJrWW5zN096RG1seWIrZnhpS05XZDZGdjF2d0NBakNkK2lJRzM2aEI1cHo3cGMvelhIUS9uS1VYWWQ0SFJqc2g3K1d4SVU5TFJlOCtIQi8yNm96V2JQSmJXL3djYUx0Ynd1T0xUcXdBQUFBQkpSVTVFcmtKZ2dnPT0iXSxbInNyYyIsImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVFlBQUFFMkNBWUFBQURydkw2cEFBQktvbnBVV0hSU1lYY2djSEp2Wm1sc1pTQjBlWEJsSUdWNGFXWUFBSGphcloxdGx1VzRyV1gvYXhSdkNCSy9PUnp4UTJ2MURIcjR2VGNqczF4VnRsLzdyVzZYcXlJejRzYTlFZ2tjbkFNQzBMWC85Ly82cnYvNnIvOTZTbXZoU3JtMjBrdTUrVi9xcVllWFA3VDc1My85L1BlNTAvbnYrVjhzdi83MC9QWDcxeDgvQ0h5TnZ2TG5CL1g5K2ZxOGZELy80eGQrZjhZei92cjlxLzM2U1dpLzN1alhEM2pqbnl2d2svM3ordk5GOHYzdzgvMG4vWHFqdm4vK1VIcXJmNzdVOGV1TjVxOFhua3Y1OVcvNjQ3Sit2dmozNnkvZnFLelN5bnhRREdISEo5N252K25uQ3VMUHZ5Ly8xdlBmd091ZUdQbnpFOXQxdnZ5K0pSYmtMN2YzKyt0OS8zbUIvckxJdi85MC9YMzEvL2pUM3hZL3ZMKytILysybHVYWEd0M2xYLy9neVgvN2Z2empZOEpmek9HUEt3cC8vY0VZNlo5djU5ZS8zN2ZhOSsyZnUzdFRZVVhMTDRzNmkvMzhmaHRlT0ZqeWVINnQ4RS9sMzh5ZjYvbW44MCs3MzN1eTVldWU5K0NmK2ZRbnNDdmY5YVJuUGUvelBmdDhuYy9rRWxQWW9mSTFoQm5pK1Y2TE5mUXdvL3VVL09mNVFvMDlydGpZeXhuMnhmYWxHUDY0bHVkOGJqK2ZONS9HSjYrSGw0YUhOM3Y0bFgvN3ovWGYvZkIvOHMvMWZkTWxldTcyeDFweFhVRzc1akxjT2YvTHE5aUQ1L3UxYi9rczhPOS9mbTMvL1NmN3dWVFp3WHlXdVhHRDd6MSszbUxrNXgrMkZjOCtSMTZYK2ZxenljOVYxNjgzWUluNDdNekZQSkVkdU1zVDgxT2V1NFpRbjRkMWJHelF5NVdIbU1KZ0I1NmN3K0lpUTRxeGhLdUdGdnhzZnFjKzU3VWhoeEw4TnRqRVJ1Ulk4SzNHRHIxc1Zrb1orNm1wWVVOdmpqbmxuRXV1dVYyNTU3ZkVra291cGRRaXlMMDExbFJ6TGJYV1ZudDlXMnlwNVZaYWJhMzE5dmJRSXhpWWUrbTF0OTc3KzRicjVZTmUzdXZsOVMvZkdXSEVrVVllWmRUUlJoL3Z4SHhtbW5tV1dXZWJmYjRyckxpQWlWVldYVzMxOWU3bjJpREZUanZ2c3V0dXUrLzN3OWErK0tVdmYrV3JYL3Y2OS82eGE3OTI5Wi8rK1IvczJ2TnIxOExaS1Y5WC85ZzF2bnZWK3ZzdEh1RWt1MmZzV0VnUE8xN2RBUXc2dUdkM2UxSUs3cHg3ZHZlQVUrVEFSV2IzNWxxUE84WVdwdjJFL0QxLzdOMC9kdTQvMnJjcnQvOW8zOEwvYmVjdXQrNy94ODVkYk4wLzc5dS8yTFZsbkp0bngzNjgwRFc5STk3SGE5N0FGWDFqZmZ5MXhDKy84YXZqMjdOdVlkSWYvK2MvdlY3dlo3LzE0VjdMdStwVGMwaWx2V3h1SEozTEdIUGlWMmxFTDJXL2laZU1IZExYV255NWc5bldNKzg5cmpCbkhMdTJKKzg2ZHN4ZmU0RzZiK3kxVjU0SmU5cVR6MXExMzJ2dDhYQWZNKzkzalRWQ0duenVFL29NcVY1UDQ2MG02NFgxM1h2WG1RWTJzTCtZNy81OE5lMzY4TE9ZNTczbUhwM3RIUFVlVDhwanMyT0EvOHN1WWxUWFRLTFZzK2FxTDhRa3gwMTRmZGZMT25RdU1lVEJubGJXSjR6U0FmWTN6L3FOVk4vd0xTeHJmaVhPWEVlNklEVjEzaXhHYlFtRDdrU1ozc3Yzc01GZjNTekdIUHh4eGEvTkw5eGNudjR6b0NGMThxNnh6b0J6enE5ZGJlV1MwbUtkWnI1SHVWc1A3UHNjUUg3ZnE0VTFTMXhoclB0TCtWc1kwRno0UVk5NXJ4cHEzeVd3RVNtWHE3U0hQZmxxNXVhTU4rdTcyWXpPNjl6WWY3UDV6OHlyY1RIQVFTejl1MGNxMXpEZ3hidVV0UWF3d3EyRnVQRWpEQk96aldzVXRqbHlLWFBFL1BJSkJjZC9CNSs4NDZoY3lvTWg4R3ZYR01lcS9qdUwreGMvbTZXTVdQYVk4Y09wOTJ6ZkZkWXFIZmVPaWJET1BXTWJLVXhYcHNjMlYvYlcxajYzK1h3dllQL0hXMk10SWJBaFJQcjJmQmVoL1FGOUZtQ0NLZlc1dWNmK3hsQXg0bWVYd1hLWDhSVSt2UlI4OHlQQ1l5ZnRUZmViV250NVQ4eDlyblcxOHVVSmlIM0huTXFMRFg3LzdncStmdlBpcjZWdngvcHhRVEdOc0h0Ym9PUDFzb1A4dFh3UkFNSzd1VXBRRE44SEZVYm5mbk1BU2NTczJPVis3N05lYkNBYUJSZi81bzlYNzY5ZVVoNHV2dGZ2aWQvWi9mMDFYZUZsaTJyQldwNVpndWF5ODRRbUxqeGs4LzZzSWV5R1QzMjBsVEJodFlTVHhJY2tQUXgzL1BhajV3NXNhb1JudlBWaks3aitZNWNkTUs2d0JSY3UxZGJmTC9MaGtYZTRObEc2bDhhT0R1Z1NLMVJUK2JCalhqbEhMOXQ3WHZ5aEZaYWtoNmZuRzJzTEtRZnViNy9TNzdyRzgxNnBqRldlZC9JcGdHdHZCQUt3R09OLzhsdnpSK0J2TlU3d2xML09BejR6cHhiM3lDek1malRIY1dOVTE4TTlWWnowVGJNMjdoNUhlOWRSRUptOWxJN0pMbExBMTBKZ0pmK2R5VjcvdVQwL1h2SEtHdzRYSmpmTkJSY2lUK2NlcERVM3hqZUJWVHhhT2xwRHdUS0pydlV0R3lOczd5N2xHNERBZ3BEbGN2ZlJpbXZFUlk5S0dKMVZUSG9IVjlRelZERUJwcE9RcHJrV1ByVHp5ZzF1d25uNC8vZXlpckVOWUpLVjRwNzUwekQyQVR2c3lWcFB2OHJUZExXT05RSlFmT0p1OGRDdXpYczloQzhDWWt4RXhNZFBHUnU4aWdSVklta3BzZDBFOC9SaUd2dGEvVTQ1Z28rZG5jZW5TOFpRSGx5clB4MThZSjltNUJjcWNjWlBXcVcrWHd0N0VqSW4vc1J2YmFJQWNZMzd3RnJaNWtCRVh1bmV4TS8rZU5zdmlBT3lEZEIxMTRKb1drRERBMFpoTWMvZ2QwZHEvVDdzRysrNVFPRmtWRFdDRFlKYzIxWGt4ZWkrQXRCa1FoUG9jRStDL2lEK3M3SjFQanZpOXgzR1V4OUR6cTQ1WFdQaTd2RVJFTURZeGtKeStiemxuQVQrR3JtaU1jcXp1TTNiMEFRUmdPaDhIU3dCL2lOK0dTQXJmTzlLOFNVOGNodjh6U1VocW1DNjVka3BHOGJBSlZaLzg0dG44VEdMbGdGckl4Vy9qemtsc0FFeUVhK1JGb3NPUUk2YXhTaG9GUHpxL25hQU9zQzI5b2RZTFFOQ1JkUWpYb3pBSGNBaXFtamEwaUljZjVOMXV6Wk9DSVpGU0VlcXdENlVZMGxDcHRZRGpFU1FzUzhpVFNHNFZqQ3NOTDZ1dlo4SmZNU1ZoYkV2dlZkSmE5OGd3ZDczT3dpM2tXQ2VYdXc4QXk4ZjcvSHRZcEM1VTJFbFo5dkljYkFLLzBPTHNWdllQcHp0SmtDK2hPUWJ1cGQwcHp1dnRVSW0zTDdiQ3dVRVNzejVXYmxCSE91SFMzUFJtTUtRSlJMU1lERWZzQkhZTlJ5K2x3eDI5bHN0QmJ6aVFSdkN4d2RqZmRBVUdDQXh6VVdGeExWYUNPRmpBOURneFFmZFpITUpKUmU2ekhDQ3pSUGVJVWg0TjVmUDRzUDFRSFo0M3MwTnNVNHBEYUltZG5BTEJqS24vdjVjRmplVzR4VXlSR2krSFhMWUMvNkN4QUtWY0NQOGpoc2hxT1pudndUbXNEYjJuRURWaVRNUVplL2FpWDdZS0phdjhJdlF4ZzVtOTRGNVlFejNCOW9BRzRtTDc4QXc5S2pnM1VSMGRoNEVaM1hlbk5oWjNwZGJ4V1Q3M250ZFMzNUJOQW9ZZDRzRHozZzdMdnBKQS9BYUtCWnZnQk1YMW4yOVdNbWNIZGJSY3lDWUpTVlc1WGQ2dmZTZVJQZ0k4QnRDOWF1ZHdDZ211QTZsSS83Y0IvV1FCa0FNWkJLK1dONVFGd3FoNUFGWTFjNlBCbS9VZVBsczNuWGlWckVNcENCMG5vMURYMWVNSXh2bmVvTkpnZ0VMcmM2YWFrdWJWWGxZbDRWbEJRSWtiTXJOVGMwZFJjZWtHZ2hvcUljMmMrdDU0b2tUTXdBdVFBYmVlMkUxaTFENlFNWUMwZ0NxU2VSWUY4eXVtU0tBanFVcUhpQkljQTU1R1ZFd3NaUlFwRGsvc0creElZU3JDVTBCUjNadVdncHNZY0w1MkRYQXZHdktQVWFpQXdJS2x3V3BXSFB6UGZ3V1ZCTmtqdEF3VENPV2I3NWdub3QrUWhXdndLbnJ2bnJDbTlZTDJ6VHlQVFVBeklRTDRESmtkQVdYRGdxaFBrQ1laMjNlSFJ3QmFOeHEyR3JxT0FnN2VvUFpnQWg0RHVKcWh2ZFRqVE5xc0JjSlhURENSSFI5Mk1EcFp3Z09OMkU3dzhwQmF3SXpEbG9ENEhvQjVIQ0xVREo0OVFiV0N4VGlBb24reUFEczVlMndpL0tDbkVRWGpIYjM1eDR2Q3h6QlVvSUlXOHJXb1VXZ3IwUWIvSE9OcEJXai8xaXhUdUJoWSsrcHo1NTBHeXNFUnR4dzVwNGpJVGRPSWhpVUFFSjhBL0lRclNlVmhZWUpRanM3N0gyK2NDUXVHWDhrSEJDOE96aUZIRzBoSmNJc1lWTWdMdGd2VXFVU1A5VU1GMFFwanU4dUh4NnNXZ256WXpIblU4SGtyK2NLeHpkU0FUeVREWUlrVHJidWdUQUNQQldUZnJHcmhHOWVMOUhLUDZKTStSTkdVSlArNnk5MWJpWEJzN2lxZ0o0QzFBSExoUVJDVmdTa1RKUTlZa2U0TE5RUHZJa2RKb0NPaWxJNUNkR0FrOVVYaEk0RUtaeDgrOEdHT3Q4WHFwYkN5OW9EVTVDS3lwSzFXY2VGZlV3WXdyY0NvaFg5M1JNc0VIN29Uc0FFMGJtOEFRZ3dDTVBwVWJSQjBJM0ZMNlFFbklhMHNNdDN2ZEFrMzBOY2hLR3lwSERhSmpYZXQxSWJVK3FUaTlrOVpKZ2Y5UGcxakhrRkV6S0dHNktGNzdJaDF3bmhSNmoxcGlEampTVU9vTklORkJwckJ5R08vK0JaZXN6NzVjNTFGUlRsQm9sYklPSmwvQnBKeDFaZUVjditqSTEzbDQrQ3dvRVk5TEsyUkVWZXlKMHZUTjBQWVZNSkZ4MlRhd2d4Z2pPWWl4SHRQSUNrQzdjWUgrOFA0bjFMVGY2OU4wNnZqZ1RtVW1oZ0M0dUh3NEVvMkNUT0FnRUQ2aUJWbnd1R1JZLzh0Z3MwakhzaEJGQUZEZmNObUVyMmN4QzRpK0J1S3F5ejZnTW43cUFRd1pOb2puYzExU3ZtR0hDOHVIRVJYZ2tNYnN4RzVNaUdZUUpRZmt0NkFOZTM0VkhObldjTkRpRDFrMVpFNDM1dk96RnA0akFENGNmSHNoTUp3aEpnNVRBRkZ1ZjgxZ0E4TUNlRFVkc0dJbHk1SnhPYUl4THAyRHN3Q3NrTW5zQjhMdmdBZkp4OU53b013UHJlSU4zTnZSQzdNZU1YTzRiRVRwWWZQdjZDZzF3Rmk4VjExd1RyZWdzYjJVYTRaSE1nQmFvZWlXc3VGYU5KWExNOHBCTnA5dEVvbU1lSUNlRDd5ckd6bDZWbEtURS9TRFpMUDVFUWdBdmsrTlhqbDJaRzRBZGxvQk80U0NWU3dmaUlJWlYvdi81RU16UklpVWVYSm1wT0JkNElZOHpyVFJnOGtRVyt6VzlYV0dFMFJUSkN4NGVKRWdBZ2R3SHlmRk41WHpFUzFQNDlzRnpvMzNvRVFaWWxYeTBaN0RHTDczTzdJakljVGNsNnZRQ0l2MDRVYmtab2ZpV1BEMUkrRXlTQmVBUEhiZnpwWFFpSkhTNTBZTTY5dzJ2TC9neTZCUFBLVnZ4YURoY2pFWWhRaWIyYmdJQUNzemhQVFRkUnFiRzF5QVFXdEpsaGYvZzczeFhIUzVBQmJLUXMxbzZqQ095QVVpb3plYkF3RVRWZlJnMzZTWWczS0czSk4rdk5HN1h3Qk5qZDRIS0krTUFQY2FraTVIQnRERGVqKzlnempHS1lNTVRKaUFBZzI1MzRYRmtOL0NHR2hjVmRFMHZlQ2s2azViY2lLLzF6UWR5RWx5VHFIYTcyNVVHWVFESHp1Wkcvb25wQjVZclNmUkNUZlVOR1lkWTNuSFBJWkFKeUQvNmNYendLQm9uUGNTUEFGWnJQZTRaVndqakdxTVh3U2lSOE5QRE94U0N6cXZENXI1YVZnSWlZUkpNVVJENWU4YjRxUHZpN0Y1TUM3MGNvYnhncGtwQXJZaStoS1lxTHBkOGs0aU4zK21IcGtLcWdac201aEhQa2xYbHYrSXFadEk0NzhUMkUyMjlidi83cFFoQWVLUEJ6SmdGU1lZNnNDT3h0QzNoM0FLSUQyaWplUmxsVys4R0xIaVJSdXZobDZUdWNLK0pWaElZTU9VSU9RRFVLWlA4TExNaG1sWEJzeURBaHlqd21sNy8rdGp2WDkzdHpjTkVjRGp2bURiaWhuUk9Pai9hUmZrYzJDeVoxQ0dEYmtERndGeFNxSzV2VUsxOVpGL3JtSVJ3VDdMeFRqMlpNRldmMkZpYi9uWk01S0J3b1FIamQzQlpzOWc5ei9jZEZzVWJiSzY4WksvbHUxRTh3ek8raDYwSzh3R3o4RFZuUmVLOGxyMFZheE5kTUw2UnU5M0diNlVXV2huakJmRk9ycHNyVVpWa1VoWEdFb2YzOXEwOG1aa2kxVFgraUxZQWErWEo5dUtKOW05dG1IV0NGSGJxeVppRFdvTGlBZkN6SENBZFlZcWNtdkJGUUQzK0R0MmJzR1Y0SHFRYW4wS2tROWc0VE80bW50eUpDUy93M1Y4SUs2TEd4d2poWXJGQU5mOHArSUJVeWVSR3VDdEVUTVlWQThKUjJtME1DODkrQi9YNTF3K2FnS093T2tmZE81dUtXeW1pZ0JBdnFMR2dLNE01MW44djQvdXlvZjc2UWp6MEc5cEN4alNoQzdNWVB3UisyRk9XTnIvRCtjUFRTRzhDR1ZtZ05KWHQvQlZZRyswUEJoeUdoQk53N0lUUEJBR1dxUlAveHFvMGdhWmdZNFA3ZUFEaWtBVFZ5N2VlRnR1NnQ5b0pPUWM0RkZSZzZ2UHJGMU1HZVhUL0UrZ1BxcGc5V2h0U0ZnQU8rQ0llWjNJc0t4RjdRUWVMMWN6d2ptM3NzQ01pQ2VxdlRvNVM0aHprbjJRMXZuRG82SFZva2hxc0x3VFRDMkFNRDJSZWhuc1dBTTNTbzJ3ZnRoeVpBR0Q1MzVYbjVWYVFsd211bXdtMFFOTUNGQ0QzQ05jdnU3RE1lRFV5T1pqNzdoeDdoNU5nSFV0SXMyRHNWaUliS2JDb2FWcDBDTWFoNWpBUDNmVEZMZUJVRWxpZ0hQK1NTTC9VdWxrelEzcmZISEpBT1VDeDZxdHkwY3lrQWVyc1hreVVUR0J6L0dnYXZoR1ErWndQbEhGaW5RLy9RTy9EQlYva0hjR1djQWRuVTRHNGdhekRCNFE3eWxqQmJyamRyLzNnL1AyTDFrVzltc0JBU1k2RllSTTEzNFpLWURmc2lBUUV2Q1NkOENqc1BpM2lmMjBUSVJHczh4T3pyZy8zaWhxQlBXRENMWVdvTUFOdmI3QmJMU3B5RzFTQ1FRRjVBR0NkcEd5Zi96TG1pVEovMkZjK3VJRnEvVHZtRnJNZGZPQm54eVdWTFc3RHZpVkVpa2VEeEExV0ZtMFhzaEhVQjV6QnJOTUdFMW02UE13aFJZRTB6dzVuUUhlemFEVmplSUJOdmpBNzU3cDhVNzRSakxQT2szUGQ0YnUrZlVCUlordlRHY3ZrbHY4bzlJbkJQNkErcEpKdmhrVmhCSXhkVGhCRGVneEJRTnFKa0lBaUdqLy80blR0ajhOKytWTHJmQ2JYdzU0VkJCUk9pR3dHQTViTmx2QzF2VE9BSkNpelRjWVowb2dJQjdtTmxaUTR2dGc4ZWdZVlFRUzQrZUtiTmRpRGNDYXNEQnpSTjVCRjlOK1dKVnVtSFBSVitCTWk4VC9tTWZxbDUxQzBiZWZkRVd3K3dybmt3QXkwRTR3bGhEeHdUaTBEVFdINHczRXZvWXovWkhSVjJCN3d6ZUkyd04rbnJZa1RQcjVROWlwWEYvektNaW5qL0lnTUJYV3hwdGladjczampvL0dDYVd5ZktRSzJjMEVUTDZ3Tklib251eFhEQUptTzNHa1JodEZ1ZHJpYWFrVko4NVkzOFNTWlJNZEF1RnpJVTN4dVhtK2VaMTRtYWowQnd5YUEvY3dPc3NxbUdFQlNMbjFnR2JlSG1oTkdVUU1CQ1ViS3k3aVUwUlZqTmNDU0FuZ0VhcmtzbWRYQUlWajNDblNqREpJL3hjeUJUR1F6TzZJOEI1MlIxZHk0YUdndUszZEFHa0JvL1dMVm9rZXFzczlzRHU0eFZ5QVBVR1crejhSK3NmUjFrc0VwbjNPdUFGQTB6NFYwanFtU2UrS0JFYWkvMG9WMVlGZkxCK2VEUFlNV3c2UUZ3UWQyakl3YmdOczM0RnFMSFlNSVJZVHZzOGRraitIUjE0S05OYzJkVDlDYkg4d285Qzk0Nk5XTS8rSXNzY25ySktCREx3TFhORjVvbm1lQmhJWkJuT3JKek9pUnpnTTZSaERrMzlpSmMwaG9FeDEzckhDOFdhYld2VytjQlRoN01pVFovRHJ4SVJIS3NEZENkb05ZOFJWSEtBRHo5cXpRUThlNUlBTlEvTytjbGo0QkdZQjhSSTQ4QVJUbmdyRW4zQnlGalJEYnJQaUZxK1VZQVdoQ1RabGRvd3d2OGNqTTJGNDNsMkMrK2I2SnQ4MWNYczluZllnb0EwWUlQZ0xzUU5wM2VmenRTVEJHMEhDYjZhSFdMSjV3dWtpN1JzKzhBYlNIVDRXRFpVVHBqU2NYZVlmcFhUNGNXQ3hnTnB1MWM0UVZFc0M1YTZ5ZHBSdjZnam93UG1xOGtuRUpOQURnNG5uQkIxT1FxZDBJbklEWUFzbS9xNThqTU5nMFBnakh3Tzg4cW5qalMrd0pVQjh3Q2c3WElKVlFIVURRT0xsMm5oMEhuYXpmbkh4YTdkWkUrS1hpWk1FY2p3b2MzdjZrS2tYNkNCQUxGaDFNc1dXdUFsVDk5b3ZwNEFiZklwUmcyMWdYNkh2bDBuTkpyWXNCSC94K21VZ3o1bnhvSG9nVkxHc1MzeXN3aGd4aGRTcUxGRTUwY2tzc0JZQkExK2ZpTS9PVFFDVElEUGpKZFhzWWlEMjl0YjFjVW9RYnd1WFBnY09ReTZBRmN5dG1nN2NudVI5V2g2eUx2Qkc4Q1JhYk1wSDlQV3dITzVkUUI1VDlGNUk2S21NZGt4Zy9DWnVZSGF2SkhzTjcwTFlZbzZ4bXNtdmZuYzA4WUtGcEhBVDRJTEVzRlIvVk52RVBzLzlraDZ3S09yT2hQelBXNFdGRGZXRHhlRG5zazhWTzdnWDZFd2FTWVdhK2NVbFI4WHR6U1dBcVhBNFhHY3Jld2QzazduRVE3N21RME85M2t0K3MvY1ZHSnBPa2tmODAxaGFWUWNTSXJpRU96SjVpeEN3OHpHTWNkYzdtQnZWU3ZORUxqOWlOQy9NcDJORURTOWtmWVFMVzBJRW1OSWVxSGw0VWpLVGJzeWJRdE4xNFdJdFlLMzhEcVRJYldHY2tKbVF6T0pjNmVucTRiVjFUelBMaURqUlg3TndFVFVvSk8wTGFjaG1JZkZuRmtxRkdrd090c3h6M1NvVVB2Z2pkY0FzVXlrbER3VEF3Tnk3VkUwK1dNSjZERytKc2d3MXpmNnNRdXNmTjlkK2Ztc0xqekd6S2ZsektRY0IvUXk5Z0o3RDNpZWEya3FZQWN1RlFBaHozeTZZb1AwOWNmMzBsM0RlTFQyN1l5Z3Qzdm9KT25ZMzloSTVVZ3A4Rnl1UVA2czc3d2lMeEI0SCtlVmpvZ28vaWIzdzFpSnVQQkxPSlYxaDI4SXY1V3lJN3NhaXVUckErQlJpeXZtYXhnV3lXV0liUVJnZ2h6bDVwNVZnUW1tWFVBc3NoaVZmUHBwb3RaeWp6M21iNVpHS3lnUVEvQWhNQVgwU2UvczV0VEVJSEVXY3JOV0dQT1cwMEgwSHJDOWZIdldZaURCYnZNWEQ3elZsdVM0OStjUllzOEpBV3YvNm1MWWg1L0l6bC8zNFkwT1Y1RUpkcmpVekdWcTJBeUlxUUxuRnFQNVVSNkJ6ZTMrTnBmQVU0Ky9XRFg5OW1PL2pCWmRWcU9uVUdlRW8za2Zld3ljU2pZS2tTenJKWTBZRGRBT2x3NUtWVCt4UGpuWnc2UVF1UTNPa0NRYUxSazlqbUFjTk0yWElsd2pZVXR2MmNTU1NEQXpIOHNXNGwrZG9Kbm52dUZzdDRUNlZKd3RlZ1RTVnNYcTJjWXk4TlJkd2ZGMi9RUWdkbWVBZ3VtTTM4UmVqSmhLVkhWd2w3KzlRcGlBYnprSXNZSU9oRU0vdGFFdW9HU01FOVZPc2VwN0xOZzQwSXJBWGhYbTRGa3JIcW5xeHREQno5QkI2aDlFSEM0QW5JVWoxOW9TVmpHd29DdkdpZXRkMFZydWpCN0NzMzBFL2VmRnNUZ1Q1Q1Q4WXhQWUx1VUdiYzRnVnlJK292L05iNlppd0paNE1ZV2N3NHhXYVZJandobitOd1pDZmlsMGpiUVhZbzk3cFlmZ2drNUFuVUp1S0JEb1ZZQUhzWWFncmVzSGwrRGl5VzVzY0JlRmh3U2FqVEczT0ZFOHdQMHZhdWE5MWNFaUlkY0s0cHZxYU1NWUxDQnNDWDJQM2pKQURMMTBYbUFNZ1JDRGNSZ3N1SGZTV0oyZ0l1TGd0N0lLZTNDSkNlMTN3anZqYlVDcDRhcWhMWnlqcFpKalllUU5NZXUwa0V6d3E0ZHpaMUxld0k0WlZiZ29SWVZRYlAzZENXNWYyZ1FSY1hrenlJQXdkeFYvUU0xTWxVVEFnblNuYlBrdkJzRER4Y3hJbHVMdWdHL2tDTmVKTGpyeUkvSUJwWnZWY2ptTTNnZ2t5VEk0VnpOdm15YmNDRnJLU3lJTmZSZDZnMUJGRXFUMHFZeDRDZG0zajF2Qnl1WkNHSmxIYXREd0dSY0ZIcmJLWlZYTkdqUWV5SnYxOGVGTTdpZ2ZYTEN5dVlnNTU4MkZ3UUZ2a0x1VFdCZzBJcGFYSi9jSXQ4dng2MGJqMHpHOU83U2RmcnVTWGphRTlNNyszcWNHVDlubnRDTEt6VllnOENieFB1VWFmbFkwMHJHcGlBRlJnRUJUZ2dhaTdBajVUQ1ZpWDI1Mlk5RFNYRTdJWnk1QmZoSjU0eEVtMkkxTkUxaDdFSGF3THdqQUlwK0Y3dkJ2NWFMamFQeFNkQWg2Y3ZyTUxqdVY4NnoyUnBSZXQ4ZWc4TURQYThDSENzQVJqU0lBNHhudFNoWlNQek10ZXdQbFFDV0RndGxVaXNNazZWd1pOUUxDK0J1UlBBOHBzOEl3Q05SM3JpMXVnOW8wSnllMnlkKzJYVm1qVTcwQ1BJUW1GaGtYZ3h3bTFhTE83SVBPVlJyRHU4RkRLNGdyQzA1Yjc4ZzZTMi9xTDE3MUlabm16NnRLcGtla3FIQ3NFaXNQYmFNaUNEN3hLVDhXb1kwSWhHR1NMK1l6VVJUSVJWZzR2dzI5ZkRqNkFzME5FR3UxK285S1A5UHp5WXkzeVFjMzE3d0tXZE5lUVRzb2RJSWlNUjEzRi9sQ29Xdks4eWRydk5hWUVHWFBDRzB6WlBYOTZBcDJZcjFtQm1XQnAweWxNbWdpWnVpc1FHS3daMytwMWpQbXdjcUlXQUZDQm40RFNTSzFIWlBJV25hUStoNFVQeVdVN1NNUC9rMFdnbGRPSHVPeGRVQjN0L2QwakF2RTQyQi9mUzRNRFpMeEQ0SmxweWU3S044V1lnazRpQW12M3dLSWdyOGR3Q0NmWWlXNTExRXpvZU5OcEY4SjRQU0pIUTBGNWt4S1BqQjg1akRBblJBdU41OWNKRFkxNVBnWEI5aE1zODVZSEVHZUJDMkxocWhmbUQrT3o3U3F3dmhKVDFqRStjMzcwOFd1ZTlFYWRWczRKaEdkQytVMWgxa3R5OUtPeDE5Q3RDTVZYRXBadGl5ZFkyQTRnbTF2c0E3Vm9hdC9rMjRlelR4aHZHM2l4WHdpOEpaTU55TzI0blhFUWYxTDVITCtZZmVWdDhJbkROQ09mUUJ1dVpWU2pkMCtpWndrOGQyd3hBeU1PMno0Z2ZIWkhiTUVoQ0N0ekhZZ0ZZVEZ2TjBtTkMxU0wyVmlVT3VMSUhqTnJpa3cxZlN3WmlZdDBIMENvd3VZSEFyUkd3WUJFQnNudnlsZWFNdVp6SGNsOVdlbHFJU3h5dHcwekhucm4vOEpaa2FZRkhJT003b3NqRFRIRDVaRVJZMGZNVkR2Mk5NSElBMllpTWgyMThZRDVzNjJSbldNbnp0Y0ozNEsyUTVHRFJIZXJvNXcyYXF2cHdFV0lGSENUOC9PRFAzNFpYRXd3ZVpEaTBMQ05GRTJ3N0FlZzNXRWFBQlBJSSsraVhCOUNLeVlOS1hOeVRTY2lKdVJURVp4andOWXZaaVpaRWJpQlpvMGsvbkNtejM1OTVTRlBYVnVBVFlxRURFTWdXOFE4enc1RC91QWlZNFpYNVZpZ1RkbW9SVDhBaXBiMmdLeTQ0WnVhS0NITUE2aXVmSDBiN1l2RU9ZZTlGejJHY2dNSE9saW53VGxDQTVkNFFjOU5YM2wwOStRVkRDUUR4YXJDb2hrNUE3dktHajNtS2x3L0hlT0Rsbms5K2ZncHk1ejBWM0hDOVlnVU11QldoTFZrakJCZ0dlSVFOVjlBRFVXUEppUTVIK014UTBVV2MvenduaFBkZ0hjWGNSUkVDaVRGcllYZ0VxUnVIUnZQaXhsY05uaktoQklnenNtSVFHSnd3YzVnc3ZIemhpTVAxZ0x2NFpaMzhCVGMzOS9aSTV5UkhhbHdXNkdaTUhPV3dNbmFER09KdGxmeVlKaDZJNTRscm5tOWtzMWMxSGNrN1gxNWlFYUhKM0w0VEYzNnhteXhreTNCN0FKV3dWNENRRE0rekJvOFFvRktLQ0NJUDhyOWR6Mms2b2loWk1vdFZnRkd2UlJuelFwNjQ3NW13bGphTW9pZ25QZHY0dXZLZExRSEtTdWNqVXJmMjB2cVNHeTNBbFFIakE1cGt6dVpOT0czMEhWK1BlamV1VDNUeXlKN3cwME1GbzJBY2pVMW0vL2tLQXB2M0JkUzlLU3RWTEpmMGlDQmYrU2xXVnVMVlpoQ3g1M21EcUFVL2dZZGJRVzdlZnB0T1dOWGFNNnYyVGY0cytTclVDbXFRaUlEemdwV1diWEVac1N5S0RwMlZHM3dHWVQ2WmpLOWY1ZFZkaFdOdHdjWk0wU0tvYm5odkRCNEF3cEZEdk41SC80R2VJK3pGU1U5MFhXZ2dUU3BIZUFraDVCdDA1aDFkb21xbEZ0d1VpRVAzWWFIcWpWUXYweUxGbnBVdmVvWnJ3aGh2KzFEQjhPd01zQzU3aXhEcTMydWxkaXQ0YkpGb0tURm15OFNJT1UyeWVPcGNMUnhKMW95cVdaRFZxa1pXNjMzTW9pcmRjT0JzMGNCandrT3JUNS90RG55RzlTb1FqWGhKYVYrMldlOENtRnMzdFhCYlYyZHhocFdQZUxGNVNuTVkxVkRIZHFOTXNhRjlKNlFKRWhlWGJOalJTYmhtT050VTdySjVzRHJpNC9Ra1pYbFloZmhBNVFIOXczd1ZvdlN6RlNGOEN2bHFRb2RYak1zNmxUWk9xNDh4MUNvL1VNNktHcVR3dWIvTmxYT0R5MmFnUkJodjVpM1IvamFOUUZiT3I1ZDJIVWpyMXNUMDkvRU0veFJYbmFRak1SRCsxUWpnWEhBTG51L0JzT1J0dUJEclY2eW16eWNmY3BkTC95REc0WlZKYmMvVkVDcDlPMjQyWlFGZzVJZGRzUjZNT0llRVlZa3c2Qml5cm9RdmhKTXJ1anl3eGdDMng2WkZhWlVzOWtWK2N1R2JXQkhiOXliUHVvcThXOGU3N1pSQkVjSkVWT29DQUpkMDNkOUo5QUtFSGx3UFAxVkZDS1MrWmdKaGFVSEx0M2o0c1cxdjJ3QlJvSkhZUDR1QnVYbSsvcXpMRTFsM2lrMEJ2RHBvMTB6TlFEUnY2eWNhUE5hVHdHTGhIZ1NZU01hL0NETm8yWHJWY1lYM2duZGREWjVQSU1TSVh1dmhlejVIMHVobnFIQ3N5end2SnZ3TjNyUGV3U0tmMjFSRVZrZmVrSDZDLzNvQXV3c3oyZ1ZDWVM4RWl3cnFZQUxaSlBPNHQxazJjQk0xaUh3SFlTMVg5elQxMjFCWTFtWS9Ia1N0RnllK2Jtemh0bHAydmVWV2I0YjJlVUx3SlF0UTlvc1VqQjllQ0dVS2NBQ2JIOWdRYzRhbklNbmNhSlNsWEF0MitMelFHbUV5V3ZFSGtQWU9WeUVTWTQ5Sk5meHBCekFXNVRCNmhMdkNVVjhFbkdrc3BHU0RSSnk0RDc5RkJKVTVVZUlzdHZtYkV1QWVqYjJ2cHVwTk1scVRYQzEzeHpxZ1U0UUZsdlFKMWRPU3VTL0xKSW5GbUVVbERJQVVjSHZUVzNWd3o3bjNXbGdza05naUQ2SWZFZXk5VHhVenFxdFkzeVl2aEFaY2lOK2Zia3dyZVRFbjhRRXdlSHN3bzNNYmdMY0ZtaG1pVGdSQXNZQm5BMTVrOUFGZlhHbndaVmxXYlVrWjhmdFU4eUs0Q1drS3FTZXRVM2VBSUlIUXNqQVQxUTJKOEtnakRmUk1oNTI3NTJ3eUNBalBQdFgwbGlUZU54b2RhZFYzdHRpaERvM05JdW0wakRLNVNuZUZKVnU4MnQ4eVRkZC9ubXI2dDVrbUlES25DK1BJcDRwKzNoN1lXYzVhMm8wL1AyaHV2L0hhai94Ly8zcjlKeS9FUUwrbXRBNjdib3MzUWR4NDloZXNjdU5tZXkvdUQ2V1BDbEQwZ1JJNXFxNEpaY0dNd2VrSEdxdlVvMVpQcVJwRVEraDNqMUh2dHFmczUwTkN3Snl6WjkrUXpXbDUvcFEwMitGUW9Sa1YvUE13YnMzWHVrRUxPT3A5aWh5TjE3Q1E1Rm51YThmV1pTbWVhRnR0QVNsVGtZWXJSUTgxS3NJaHZ4V3FBU0VBZzFCZEhnaWlrcERXdUdERFh3bGhmcnVuaS9oYjl5bFF0R1RXZzdueVUxYVIwS3daTmcwclRzMDJtdnNoVUJERlRPNWE4RSs0R3FqNXRPMjdhVmZmMmdvc3Q3SHBTNEsxUVo2QTV4eGJoOHBDUHN4L1ZHTFBUMFo1ZWtoeWpyYjVVSlFtU2ljL1Z3YWxyTHQ2ckZJREFQNWhQTmpVTC9PQm1tbEFmdFdBTkovOFZ3SHhwT3ZmQ0FoOGIySGY0QXVJWkdGRUJsRHVjenh1a3lBK3JFSjhna1NtVFVqUnhZNWk1eDU5MjdrUVpDV3RleWpYSUVVR3ptcllHelovZWZCK0UycUl3LzNlN0d1MEgrV3p5YUxlMTRaenhlR2gycHVoNXpnczRkM0RENXM3b2gxZ0ZqYTFJaUdDMHNMNHRnYklVc0lVSVZpSnV3ZHc3Y3kwemhEbW1LeGxKd3hvUmVqVkl4SU1UeS9raUlWOHZtTDhBazZnVndhRmRIK0laaERyNS9TWFhjdmFEc0RMaW9JNzlvRkhHWnRaSHl0eE5od0VqSUpDOHRiYlZ1TzFMSDM4aW9NS0NPTHBOYVYrM2VkMCtnNzRRclRPOUFVb3VXVVRHUGFDVEl0Tmk4ZUdxNEdIMktiY0ZQSG9ZZWhMa0xESkcxVmFMOHU4eHZzaG5UejVObWNhMzNkYVM1VE5pc3JncDgxTHJNT3cyQzE2VjRRTG5EZDUvdGVuRFJscFhqOFY1NmxteTdyWTdoMWdDY05PRUg0WC80UVVQZk93SmE4TTl2amFIT1JaU05WTzdaUE8vSGhkL0lkdHZLc25udUZXQVZiN3Y0TG50REpjWEJtdzl1aFZDUmM4cmJmWGdNQXk4ZVVNc0Z1cWtQTUZ0Vlh6QXJDc2Q3RTBJd1I3MUJJWHhNb2pRU2UveHR2aTR6REw1NjBRaUk1ck51MGh4Zzk5d0VhTnEyY0N1Y0s1bjQ2Qi9tcEFvMldQS203ZEtVNTc1bEZCSDRUL0ZWYzJGdTBwZWJ3Sm9xZVdGWnBEN0VldFFCclNZNDN4NmYrSW1DQ0tGcDV2VFkwbzVYa1h2TG9wcWdEenoycEtZak1xUzFVSDJNdVBoTHB2blB3b3Q5SHdvcG93RHVMYU9aMTRCU0MyRktLQmF5eGdEUzRNSDhNK0pXRlFvS2RCNXVCSFpaNXlTbUo4Wm1NOFhtTEZZTHhzT3BvanRQSGVmTWNRRGtMY0xnOUFjWHVtSW1TbzJjNVhTejJuYVlGbFVTTUJCYU9UUVdlcjBFR0swV1hucVgrYis5NW93enNFOWJrbEpETWFoOHhjNHliWFNnUmw3ZzNlYkRrYVpsVGE1dzVQdTA3Wk9LVDZkNXZ3WGFhTk1EM0NPWXJmUGpVK1BkU2Z2Rkh4WE1RU0dzbnB0bExIWE0yclhuNHRuRVI2b0dtZTZuRXhHdE9hWURTTnhWYnZ1b25YWU53Z1NBSXkxMk41VkxSYVB4TjFZR3hRTFN3cnZLYjRQUWMxdEkxNFRxZms3MkFHTG05REgyNkNxVmlZNXBuQ2xjL0Z3c3B2MDBlQk5VZmNOL2p6WStEeFhKTGJRbVRZOXhUUGVkZmNrR25yVHRHWllEeDB6MmtDbDZtZG5RNlBNTnRkVDRLbm1PRjVmNTFNL1NYRDg1M1dRZkg1QjUwUE5qc0w1UHBUZnVjSHRYL3lPei9ablpQYnNUVG5qK3pPN3h3T1FlZVAxSTdpRDZlVmV1SVVpeFY1YlpuL1VMakk3WjBscUY4TGxtRVppZE50WitZdHN3a1NTTVc3WndMRVBKSGhRdWg3QklBMnR3U0FuUXNtdzNNRnltMGtpV3pUR3NCR1BOM0ZNbDM3a2lyeExSTUk4YlRhUFcwY0Y1UUxYcVhZUnpCK3RwL2NNdEQ1M3RZNnZUYXZJcEpaUHhRb1FvWXJnQ2w3T3BXRzRpS0FyYTBDOGRkMFpVOTlpRjA0dDVvVXJ3aFdMdGhzQURZUUVvcWRMUTJaYzAvelJWdFRXcXphOE9BcFlMb1FkaFF1Sk5hZ2dneUdvNFNJaUo2akhXbUJVUFBVc3lUQlJDUWhaRUcxVjhSRDhmcmNUOCsvZlRMMWdzbWlZdkMzaytNaWltV1BkajBJRlZDdDlhMGIzMzhMZ3NQdXJXSFJIQ3JWRSsvYk9IQVRpcjhYY2R4TlRyS2lxSWFBWnhlNDlsZHFCcEc1ZUpqMU1uOUlyR3V2OVNQZGNvQTJyZkN5UldVb1hiNlJHNkxHUGxMUDgwYUI2VnREbGl3ditPYnRNUnErdk9SQ2FPRlRJem05Wlg2S3JNZGFvS0UyMUJHaFFyN1FyVVJpT0RoTEVrOXVHQ1FZZDdZUkZDVEJZZmtRQy9ROXM3TVNpQVY5OFZhNEdMYUVVV3picUV1OTJHSG9VN2NZSENIK0pxakVBcXFFWnB5WXo1QXMrMm53ZWpQYWIzREtRaUpZUnoweFB1VlVickZyWDdhZERTbldMVWZGTllqMnBkc2xBSnN3aHJNUkhtczBlY3lLL0xENVNTMzkycERubFhSRnQzOWhrOG1TSG1TTUtRTTdaSzFvYlRicDNnZEo4LzNIVjZ6NkJwMGhML2plSFo1b0RjRzhMM1ljaTl6Mzk0eTFJVDVyUTdGd3RpT0NXVXlUSkpXTCtDeU5lSDRUNG1DYlNEdDBlS2F2OFdhb0kvajNwMERLSnNqTVpTUTRoYjIrbUNwQXNDd3o2bTlWWjI1RFZKdldYWnNWcmVFemJNVVBMbkRaMTczNkdDWUlocXpOWG1ZWUwzelp5dExrb1lLdEZYcVNMYzNFQ0FESG1seHJrakMzdUxsSkZydXNaVTlMTEJrVnVvc0ZCN2pTeVc2Q2pmWnpkb2hWd2UvdEJPcjdIdGF3b3hJZUs3WkNMbVlQaU80WHEyTXUxS1JLOWppR1RjUENoMG1mYW9iWlRuWEwxNkVOeGZROS9Bb0RZWGZoTlhnMEcvVlk4ZGl1MC9xUzJUdjdwOUVxV0JDM1pYZFZ1QWZFeFdLdEdON3ErWkx1YTllYmRTK0liTWlrV2Nxa3BvV043T1VwYURTaFM0ejdxZmdiME5PRDJLUEdPM1FwNDJOM3BvWTkyZEZwQ2pRQ3NNbVpTOEQrd1B0L3VpVFp1MDYwWUM5WWVWdUg0UE8rMnRCRGxBUFdRN2Vub0VPM2hpWDdHNTVyZEZIMUUxYjdaUVVjM2dXdTRvZ2Y4Tlh0dFFuMkNPR25ZSWNqYTlnUlpQdXc5UlY3d0ZBa2xpZUt6OWNHZVJpaDNhdklhSFMwNGFoQ01oYmFOMzBlUzhjQlZUcDVMSHZPaUJnSUxXTEd3QnBxcS9DY2lZOXdrWjhXZjltWGg3TURiOHFMaEJvSFpqeFZ0RDBaQW5qYkJvMENaeHNBeG1FNUNsU0hCYnVmKy9Ub1JHTTRscDFodUJxTjgwRkt0dUVBRGRSKzhvK0xxSXFvUUZuY2xreDN4VjUyUnNyQ1B0aWpVNlpzVWU1VDltVWhaVFJ4aXluWEUreTM4cnoyMCtLRVcwTmoyVmpDWXZZOHN2MzVMOE5oV1orQ2E2WExHa2tMRGdQQjFKemViU1YwaFJ0dkR6R3NFYlR2UGllUEZrL040dW5SdCszSlVzc3h3eTQyKzBCR29jb3ZzWThvQkxDZHMvSWJ6bUVueU5MMnVFZVcwOGtoaFZVM0VmdHVBQVQvdGtldnl1RVF3ZDB5eHVIQkl2WVI3dHdxQk1DVCtmZ2tHM3JzNWcvOFB4RllIUDB3alZlWVN6THA5VVhBQXVqajkzRHlDNXJPajl3QVNGUDd3QzlpUk1JNHQrVlhIWE8zOE9KOTdqUVZpdkt3YytDRExUbE9BV00weTlIV2hTTEhKZ25wbnB0OU50MjJFdTdYSTJnLzJLSnAyeFVnSlhhcUNxU1BSN3AyT0Nkb0tWS2pnYVhodWV5R3g1a3hudWVyZzdqM3ZkK3BvdzBUVWJCNGp5U0JKT1NqWlorYkFMdk1QVUhvZ0tKNWl2UHg3NGJ3ZS9OeUhsaDdmaVo1Z0tyQTZZQXduVGFkYXBVMnY0VmZQeGp1UkpUQTMrMHBPdDIzN054cDRCcmo4aUlkSldFZFFuNklZZzRtd1I3NXRJRFdBNjdpK296Y0lOeEk3Q0pYSUFtMHN2QlVvVG04QUtPNlRsVVFIL0M2U3QzMHBiTmlHaXlEaFpYL2VsWmhKVEdMeDRJRTV4NndVNTVXNVJ2NVorbWFKeUtYZlRBQkxPdFdjTUdTMFozb1BrU2d4Uml3VGxRM0RERTYxYU1OOTZoNmhBUGdqMmRwUURZMVFkakNGWnVOWThsNDVrZ25HYUNESnJUY1J3VmFUNjRSNDhja3JTejc4MS9rM0dBenB2TFdDd0k5WlJ0UVpEemdCa0FncjdZWFk2Tld3VXZtTXpwRzFwK1QxUS9OQTdISFJvRGFSSkxHbmdXSDMvRkRhM3VKSHNSS0xUQkNuNU5kc3M4UDNxemJuZ3lMNElJVkFZWHdMc094cHdtZU9nMGMvYnYrakk1UVNHVEp6YkpNQTJxeU5BRHU5SjBnbDg1UWc1dXR1Z1cyZldhQUNGV3ZSd0g5VWhSOEFXRnpHci82R2dSZEM5bWlaMzJZZFNLOFlVRElVM1BGSnBXd1FidUJUbkV4ZnRRMlRtQmY5c09xT0Jya0NNTS9yYU9KUnJQR09KcEYxZyswM2VKZUdGU3h6aEl6OEt3ZXY2eEhrVGxLSlVsa1VmVm5KNGQ1M2drenQxN0hBenhFc0gyUXhWNWNhd3EzS05JZVI4bDRvQUpGQStnZk1MdStaNG9JNEdMSGJMUnAxcmlZUFZHNms0NXNpZitmY2JIeDQyWHpyNEhOUW1Uczhic2lVSm1zbCtINm9ZamRkUFNSY3BZZDN3TG5Qb1RjWmxKTG05My9aWVZycW56T3kxWGFZYmJqaGJERytzWW5nT3BKbm4rcml0ZjNUQk1yc0kzSERubUVZQnFuWlVpQ041RWhqN0tud0tCN2htcGVyS0F6Wmo3TFd1QWN4NUJlbTBtc2owQVdsUXBXMjJHVG1rSXlUWnRsVHBFMEROdUtYbXRQVTNOa0lXeWd5Vk4xbzNxYTA3SUNnS3RzWjU0T1FJRWtLRmJybUt0MGxrMHdqSjRwUWhGb3RUMitYaXpHK094YnJRdFVZRFhzclZtd2htRGJPOXUxZ2FWcWpTbmZYQkdHVXgzWTByRlI4Rzg1RU1WVlRSQ3RhU3J5ak9xeGhPTk1BYnFqZmNvZjlMM1pSYk9reVkxTGcvVEJxVzdMZng5bDF5bll1NjBPT3J0bTlTcWFuSHUxZHJWVm0yS1JYb252SVR0bWI2Y2ZGSmJTTnJHSXEzalhUNjZ3bnVFaHBwRHVkWUh3ZDdZQjlrVzl0cG9KTzl1NVFzUFhlTDZ1QklJOUlJb2VqTnloQU1zVUVPd2JGc0hXM3ZkSlplRWlQNk1WdUd0VWlBWE1kekluQW1kcDQ0ZGF4Ny9YUC95cjhvZnJmMXovQUg1YU9HUVpPM2JOeFJJZEg1dVhuUkFUUFVpOVpUWGJpbXJ6RGNzVGQvVGRBaEpxc2xFWE0vRmtEbmNoZGp2S3hzazVZWjVFMC8xYzUvVGFPc3p1U0pMUUdzUTdHeS81M0czbGFuRHdUYldIQWxjZml1OVJGcGJaaTUwdDNTaUJXQTVYc0VsYWlaUS9ITHlhRWljUUkvQk9TTWJWYjQ5Umt0VlFOc2VjbVQ1SVpNK0phbStZSnlMV1pOaUZnV0JpdTM0ZDQ3SmNuVEFTVGQzT0JWWERWenhDaHBKVmh3MHNQcU5uQzhuUElGRDkrSDVzbnJON0ZTVDJZb1pWT3RnenIzSll4eTBsZEJwQjk4RFpRVGhIdllQMUVWM0xkUk1aK0trZHlkbUVTTG1Lc3pYZ251Z3hqRG9IbEYrSGVFR1F1aE11Y0xzVnovVEQxMFdxVDdKUE1IdUF3R3VzNWp3ZGlTK1dqVXFyNHlIYUZQU0QxUkIyNFh5MUlna3NjSnEyWHp1OElKeVkrazAvMWNsLzBwNlJjZVE2MkFWTHp3Rit5N3lKY253aVc5QnRXUHlRRE9xK0FDRXl0VzM5MWpRTGpabUF2aXhpa2w5Tlc3WnNIMEN1VjhkL25lRlVMMWorVFJ1OTJOd1A3bzA5bVIwN2RiYjNaNHQyUkJTak00dlZaYytaUlFEbFJmek5jZG1SQmJXeGxmTzBRcldmd1hOSVdkNGd2dXhjRWpHKzNFVTlKSjFDMnV6cHRISktRaFNWQ00zaGQ2RE51S1hYWnVmQUFWc3VBQlRlM3g1T0lnbnNkbHF4bHh6Z1lGMUIxYldKeE9hVkliVTJBRjFsOE9sY20yVWFKWEo5ZGJQLzdIN0MwTHVwQzlNTlQ3Y3NoTldwOXM4OUZnNG9Lci9LZmdDb2hQaXJFWG1iTGQ0bXVyVmlHeWVkYVRvOVJiSlBmZndhN21IN0RQQU1TN0ZFWHJFMHpzZ1IxTk00TTFsZ3lyZWpSQ3A0UjZnd0dXSFZ4dlQ4dWhMV3FpMkg2QnRIM2ppSllscm5pWnNjb3BneXdZS1lNNi8zN3J6YWdRaE9hdUd1c1BlcThzOW13KzYxU2lVbzFRUWR0M3ZlbkdNaHlHS1U0WkVtaEFmayszSzRia3ZkTElqWjBhYks5NXlMejI3d05Zc0wrL1BZRGtGRE9QTzA4bFNnY2tmVlJZZDVSdXZkVUtTWGM0bFFsSXVBZzNpQU41eENjU3MrWCtnQVNoakw2bDRKS0FwZmY1VFh3WUtqS20zeTNGOWhOZVBGTzhPNzdHeDB5b1ZETk12SGhVQUE4UFhGeDhFbnAyT0F5bnRTOEN3aWEyZEZyeVB2SE5YRzMxQVQ0TkZXNGtEemw3eU9FRFhVaytha0F1NXo2aEU5TU5zcXlZMjZzeWkxdjkwalYvemI3aGRFMmszc1ArMnVOZG16MjI0ejVPS01LUUdQNmkwUUtrUTRPMEtTczhLU1V5ekRaK0hFTXpkRTFhcFMvZVZhZXptdkFDT0h3cnlaQzI0UUVIQUExMTJXNmVKZGtIQTdXZVA0R1hsa1NYeXc2cmJhQUV1WVF6c0wvazRKR1N0c3h6UWd2bXhQc0Z0NjJXQnUzUzUwVmNpcUd5cndnV2JOMlg2d2dkNHRjV0JYNEJiN0ptUURzRGR4OFN4c3MxNGRVL0N1TUZ1WW5LM2VqdmNzelpZdlFMTnpnNDdVTzNVaCtod3FFN2VEWjc5bmRxbWQvYkF2cStteEhKUVgvby9Mb3BvN24yRm5mSmxJczFqT1hMUElXdzUyTm0raDBwbGVsMVBnTEloK29ZSndBeFR4K0lnY0x3cDFPYXZGZ0dGeXhoUG1ZcFI0aTNYSmFhTmx4NWswWjRGWHlwYyttZXhhYVNkWHgzNVVzM1phcDZNeVc5V2hsbW5LZFVZSVd0RDdoTStJWVNQNDh0QWM1UUhQdG44bUJpZURmQjY2bm82TVd3NkpxRjNPbkgzc3hjMjREQjVwM1F5TVp6WUhYa0E5VXdJUjdaL3RGOXEybTU0bWFuK0NsbnEyT212bWxNNTBCd1FrU3dOTlJXNUhYam9FeGdoSlJMSlJIUm8vbGFRNExTUXhlcnBSN0pERWUrNkdmSHFKSzhFYVdPazNOM1I3S1o5OVJxZmt2cGpmeERiUTVOeThReit1RnUvdGRKZEtHRnpPN0pDa1RZZnVlWVJwMjhjMExYeWZZdHlLMk9HTnEvT01uSzRRUFQ2NHR6SGdzZ0VTSVpzd1l0VGdhNi81czdtWnluSTBTL1VkSFFzWXNCSFR1VFNkS0JSTXZ6d3FEWENVaU9JMHBHdEd1MFl0T0IyM2c4TEVIWWRSc01VT1FhbTh1L2xLTE96R2daRktFS0JvQ2drS21LRWhlcUhvY0ZrOGJMK1VmZ05MbTl0R01rZEx3UjZ4azk2emhjTmVSN2Z1MHg0NVp4amxKRHNCdTBSK3MyalgvMU5Mem9aaXoxZnpjaEp6OUFEanpPT0RIU0VEMGlNdnpXTTVHY0IyUVBndTI0Y202aGtiQ2VkSWVkbGxrMDgrdFNja3JYTzBWaE5CYlg5NzBVN0padjl6V284YXZKWE5CYUFDWDk3WFlpU3JkbzFWdHNWQWRYck5aK29BTGtKSWNtN0hlckl0N2NYWlFleE5pK3V6d1JBUEZtV3lsQTVjbDllWnNMQVNld0RmZ0prN2JUZkV0Vm4xT3Q1bytsSXl0dmRqVWYzS1lJQjE1UkNGYm5jTGhLZnAyVW9FaTVuU2l6Vmx0Nkp4L3dGZ0s5Qm5pOWo0TzdIS28rL0hVdlY2Y3EzQm9jcjJjeFMwUElqaTRCYXU2Sndxb0FHaXVkTzdtOHF6aHAwZGR3NGVETXhCWTNnOGtZK1kxcTNPTWp0bi9xZkhjMkZlUkROOTcvRElNVE1oMFBsNHRmYnJjZklJOHF6ZVZnRGNRUEhKODVnNUtJNERhZjloTWN2MSt3OThORzcyUmFVT1hCRFQ3eTlhaDh2YnJQZVlhSFBIQjVVelZUT1kzM1FqVUMvd3hNOUJBYWRlL3U0T2hTVnNPaEhyNlU2N08rZFcyQW9CMVNQSEl5U3l3d0N5cmpmL2lpMEo1bS9iQ1FSaW52R29lNnhwZXRLcWVaVFdaOHV2OUFYRkRsTkFISFkxaUQzczlwdUFDZmxNNVFYeDZ1WHM4ZWRNTVlDUERZSlJzZSsxbmxFM2RzMXVhRjZBa2lUbk5jQmliaWR4dmE3L0diTmlsc2Z4MSsxQ040VFRBV0RuVWJROWMvdkJYZ3hibzcwTkoxK3pTTzh3N1dMeGJIZXdYaWV1bnVvYVhCZi8xZnUzdllnT29iMm5rNHNjNmZYWnhJdzlnT2RGZUVNeERLQ3NPUmpxTTFMYi9QMFI5d2g2anI3emVMV2o4c3FwS3Q3Mm9pQ1duTGxjRllOZ1ZtZ2VURmhhdE02QXJoYndwK2JzUTJ1S0FJRFBDdnorMU12bzhqcUhwWG9WMXFJVUQvMXdOY2NkalhiS3kyRU9DWVd4UGZNbUppQXJwc1dObnZUZlo3ejNHeTZvMkQraFVScEswTDlxeWhjelE3NkowS3poR1c3V1hZb0pPMzN4NXN1RmN3VFY0L2dqTzJtS1F5VDNHVm50L0RuSXZQVXpVdVpodmFQZE9aSy9nYmRPcS84UVJRNXlRV1VUbDkya1plOEVhMm5DRFM5OEFYTEgyRVhWcFMxMDRUUXZUUk9iTUNNSCtVNUZwM2w0cTJhdXR3SEpBV3RJRHJSR0ZoYWJSQWg2emxvdEhsdHVod0U0d29hVmN6ajI3enFWdzhYQkRsUHJCV0JEZEExRmFQU1F5ZnFRR1J5TUxRNVh1TjFZRGpFdWpvU2RpZGR0MXBQZFc2WnhQNURXNTNhWTVyNmNFMXljaCtjMFJNelowNXB3TDJBU29zL2xwRE12ZFlHZjZSeVI4Z2M0K1RJTnptZG1TN2tKN2M5anliQ2VhSGNySzJxZ3Nya1BpY2oyZU52OEJKb0JCd25tOWp3dWNKWm82ZEdSSGl3Z2xNVXN1SThGV1phbmVJNTYwcnVaYnpnMUJEcTBDclJ0V3Bqd09wak4vQzRYSGR3U0lPV3hOR1E2NDhHcFYrdUtFRElmcllHMlFwQk9PeDJtSlR2TlVZTFd1Nk8zeStlUGNNQ2l1TDJkK0NBa0wraUNyVU1FREpoLytkZ2tEeENjelNCYjNQbFJ2RnNEQVgwTzlaU2lPc242N2JjbnF0bnhWQjJ1UFpKam0wR2JaWTN4aGRzL3MyUWtxN01XSWNUM0dlTmJZY2g1Yi9tUE8yVzFsbWVQVmc3ZERoTUowMkViYzhwNklSYmx1VHcyaTA3QTR6NHJmTlJCamtHVkg1MHpiOVlnclE3dk1WVU10MEpFSjhoRjZpQ2I5U0tJVFdoYlNlbWFMcDFIZHBBS3p6aXFoK2pCSTh4enlieE5VZzQ3VE0yVGRXeEVQaHlNdmc3WmNkWm5YSkM5aXdYTUdYNzBkc2Z0b1Q2Uk11aGFoN281RStBSTR0Y3lXQmFEbjVtSlBLVjFEbnE1WHlzRWlyMEZuU3VLWjc0SFJMUFlyVTBnOXNoWGQrTzMrNHlDdzdJa0p3Y2Y0MkVxMHRMMFBURS9iT0hCMmVaK3kzVnNidU8waHpIeDRhM1pydXhnT0V6YlRtM3I1bStWZGJLczMrSWw1elRDVkk3c2FNN05ubm5ad2ZKNUVqUk85aUtBUXdUWkRXS3hXbDkzd3VGZy80YWQ1Y0ZheERPNDdNT09paFZ3enNnOFIrL3pxaTNyanpiTmdkWFJtbVJFYVkybjZQdUZTamduU2ZZUXpvbU9mZVFZQktMTXJ2a3p3YzdPOFp3dngrNmY0ZllQQkVuY2VDVkt6NmxXVGFZcm0yMnBjVFJMRWRBOTJxdjFNYzVVdUNIYTIvNzJCUnNCTEIxMkFLNklIcFBMeHJQZjVCeGNCMGJaZUJmdEZMR1V6RWNCNUZkZXRVMzJFQmZMM1J4ZmlicTZBUElVcmI2MDJUNmZLZEtRdkFBdlk0M3Q1cTAyeWNWNVlPcWdYUHVzRERXcjlWcU44Slg5Ni9raTJJVFZVRDdVWVZvWG9QVG5zajMvYnR5Q2pjWWorUnFjeXpxTnh5NGJlZVhqbU1uYlUyV2c0eHFLci9zZFVYMktRSzAycnNleXA3eDNFSitSQ0M5ZlFLdmw1QitSZkczSG5kc1JsQWEzUXdBSW1WMUxKdmVlNHVobFFrUkc3N3dKS1pmc0NLM3pPUWZVWnlxbXd6QnRWMHFFTkxZV3VGeW1kcXFqVnNEc3dqM3NFdXd0Tmxub3RDS3ovVTZmSFVzbURPZGVHb2Z6czNlZDVzNm5kYXI3REdRTVcwbGVpTFErZ2NOUjJGeG9IUjBBZStDSVFMNkhTY1Y0RHgrWUUyWmVrYWtZRnJJS3NpY0xiQVpnRzdUdFJMN09JNEdzQkhwUTBRNmk5akVSblVoNFNtbE45Y1ZmcWZ4N1F1ZVFEaTk0VlFuRURvb01UdFhhbFNEREd0blBDb0lRMFZsc0E3V0gvMjg5WTV3czRmbHI2SFlpYzJ0U0FLRHdUSHpHQTlBczF5bnV0Q29wK2N3SVQvQlJiYXVlMlJaT0luSjhxVnhQbW50T1dKeEpqaUpiQlZWeGp1Q1FacWlDeTdaclowK1lQWWxPUkF5RVlQU2lGTHQxL2dWY3h6bDNzVFhrT1pPNG5NMW9sL1FaTHNSclBNKy93blF1SElEQ0lqcHVibHVKdno1QnpKNzZoQjYzTk5LWlhPOHI2eHZkWTRKa2Q1QkpxK0swYnJ0OHRtTS9Tbldvc01PRE1ERTA0SEppM0YyRHg0WFA4ckV2NXU4ZHd1TlFMdE1QM1Q2K25LeGJDY04raGl2RGIvT1ppZXVBR1FkT1pQMklHOTVvMWZjOHBNcVNwdFBicmZKVGdBWWZLR052a3ZPUnQwOGJtUmYyMFcxdHNMVHlTK0VwNDNhYzRuTzYvWjFJdnUwd1I3WEU2dXhpL05tU2FmNis3UUo4N0dpUzVUaXVHSmJrZFVySGlwTzJUanNoUHR1enRVMVdQRVZreG1zamtHY3NIdGE0eks5anBHQXhYRGtoWlY5V2hMUFFZMGhDUWZaWW5DOXZuc2xHRDBlblRvOE5MU3MyZUxDZ3RpRUxGa1FQTUJxL1FrM0VkS0VTQjl4M09HRy9PcXpiYytVN08vUU1FbXA5b3pNNVlYVk83UWtlM1Rrc0lVNGZJd005WklOWm16SHFaUmRldDM0WldVVTBIUVNheDBJQUVCMU9qSGtSOGZGQzNPWG4rVlV6TmJPd1RuTTJnZVRJN0dYZG5OUFBWdFdqOSsxSjhubUVUc3NlMVRUc09ZbWlxWnpKenQxQ1VqYkVrbGxJZ2hKcm5tZGJGUWRMWGVNOG1DRytDQ3M3M1ZzOFBVNTludEgwSGl3RmorM251VDByTjYyRWhxY2lxT2Vwc2JGWFFXUkNpd3l1M2NkVkNJUGd6SFNLbDlVVmhBLzdqWHlhRlZ4M255Rnh6dWNiRXVGRGFnZUNFZlJweHJLTEdNY0cxZWM4eG9WRkM1Wk1ycy8yVWdMSFo4TmRQc09hc3NZL0hPQVNwSnk5clFjZGhjL3NjeGg1V1JUOUFsa2VqQklDMkZySHJmTFNSY0NQOHVVV3dta25URTZPVjJEWTRGT3JKZzZkcmFkSDhDdlhxeGMvbmd3QXpNMm5YWlNOcEd2eWhHYUNncUJLV0o0d2xCTVVYck1hUGxmRE05MDVMYm5rWFV1NUhCeTFidDRob0ltY1EvUVltanhySDVBZGJzV1p5Q1U1QnM0SGpIbVVPOC9NaG16cnVNaGt3K0FMaHdUbXBKcnJnMVRwSDE4MVRMTnlNU0FmSVlUck5uK0VKWVIwQ29vOXdmS3dhNXhuUnRnd05DcVJGbnJpMEhtSFBVcmhjdjJpVTFvY2cyL2VIdk5uKzNCY1p6S2tkVW94WGdMa1poY01sT3E0TTB6NzRrMVpNMGNxUDdhR212WlhnSG00cEVOeDAzMDVUZUZrK2U0enN2UjliU2diVS9WT2pFZHNGd3d5M3phMm4yZVpmT1laNEp1dzVtQnZHMDd4Uk1mN1EyeFlSQ2RlV3B3Umc4Zmp6dUQwRVNMVG04TWpyd290ZEVobFErWkRmMTVQVTZFaHpZbmgzMm1FZGNLTUZkM2JpZ1VucDhYNzFORi90amxMTTFnT3BDalVhSnVIUkhSL1owNDNHR0MzeUxmOW44blFuUkVNSGk2Zkt2Nzl5VUJBdE1VRjMxYTRxYnFMYklTMVU3dHZITVhpVitkT090TEQ2aE5ZS2lFL3p1REpPRCtOTWpaN1BzOVAxOC9JSDJ3RXNMK2NZZ1NYeHRpakU4RXNOVHd0enE4QS9kMjJ4ei8yQ0hUMnhPWVdKQ09PQzJFR1grNC9xc2FKL1E3YlFRQlpvWWNHdWxXdTFlb3ZyTkU1cnRzcFI1OFliTVVMN0tBNm8vaDk2NWxydVRCTTFOWUdOODhBbkR0Z0E4RmhtUWpONlNEb0JlWkRCTE9QQmJEakhFTHdWZDVjZlltT3RwVUNUUUkzMm1kSTBoZlNaVzF2UDQvVklhcER4bDZrOW52TEFCT29LZkt1TTdOQ1BMQ2p2eUsxUk9xZWJjOTQ3QWhTdDkvWHVPMlVLSStqTW53Q0RqUXUyKzRFUEtsV05OdG4ydkl5dkVrdmRxVEVwUTROanQwN3ovMGc0TmpDTUIyK0RuVERtQkQwVHNmM0lWQnpnTnZRNi9ZemhsTmFycnBTbFVHZnUrZkZ6UUhGODhVZzQ4ZXRvV0E4Z0Ivd016dk1hem5WL0E3d3RxcnE3czZVZW4xMmhGMVF2TmR0SVZwWUJNa0owNnNGVE1SUkw3TzRsaFUyczhDQjJIWUdhRXF3VC9YZmFZSHljTWl4K1gzNGtNSk1KQjBPbkxjNDByWnJLZmdIclhGV2c2ak4rL3U0SE1UNjRjL2JLR2VXRFFKamdZeGo3NTA2aGlna0RGbkZBNEttZVZ0NURGZThRQllZOUxkNklNNWo4SGJUelBFTjA2MGQ4d1VvUFhFa2ZpMFBQUWlrUVA3eTJRanMybXpCL0ZWS2xudllIeDU4T0E5czNQeVNUVWZ1UjhGMUxBODNDVmk0TXdkTDMyOXdZcFd4M2o2K24vS29hdU1wck5idXNuNmU4VE1PaFhYV1BRcjljUWQ5TEJEczBVa25acG50MDRBOXFLelk0b25hOGF6VHFkZDVYczR3N2FhelFJd2tGQ0RwQUJBZ3dybWNyK2Mwc3BYWnpJdG11QnNSb0RvVUdnMmY1RGFuWWRFNUVkRklMbXFkZ3ZCbWR0RHhkTU5YMVdvTnZROXVFUWliZGFESlBEWHJMVUxiL0RESGVTYmFldzFqd3VOa2Z2aml5YXRidEdkQnVQWER5Tkg3VjVuYzU4RCs0UFMxQndMNUZvamg2WkU1VTdReHlONWZINVBuVThoWVRaOFFVY3lyQnlLb1RkWUJIKzRQd1luSTVxTWVzek95YlNhMU5zcHNNU0NUbk1kK2ZVS3lVMzU4SXBVUEV3aU9rcldiL05UaFkxQ0ZOVmJrMkZQc09CM0VySlZxYi9JNUtwYVB5S3pMTloxQWMwb2RvNDl1eUVGUXhxOFFDZmVaeER6RVRaOVQxcVd6RG5UY0hxQzlmRnIwak0wbjZPd0ZyUWxPRFN2MmZTVnJWc3JwaE1WSlVOZG55Q0NZMElGTUk5NlEySnc4M2o3UGw0eU9XSzhSZWZMQklaL3d0WHhTSGphVW0rb1o3N1FySldQeFhFNXhVQ3dLMUFlc2JLT1NUZkdPZlBtNlJQbk1nY1Y2ek5VU3d5MnNIaVhhTzB2NFNJTVhPZVFTTkR4SjB0UDRmYWJhcWZGaC9zdGFKQUlDdi9ZNGJ6dDlWeFlwSkZVTzBYWXVUenE1L25rb3UvSEExT3hKTEh2MnZKMjBCN05wNXJQR012QnhYeXhGZ3ZvdER3NlhCK2pGYnMrNStsaU8zTGZRR2VkSXArcmVzckc1N3VqYzNZM2RPc1lmWSsvZXZvTzE3OHZCRW5leUJBTWk1RUFSOWJRZEx1TzBjeW05enpSVnJNc0RUc05nUm01NkcvYlFtQ1k3UVlQRnZzRVczcHdMSkZaOVRrYVdJamh6eEVmdlFXS2NBdS80Y1hqVk5nZnBXU0ZyWFdkQnF2dUFoNG9kWHdnNmZvWFA1UHF3Ryt4b0JuejZ0SVJidE04aU9hU3BPZmZVc2JtT2tuak91SXpwdWZBY3lyZnc1c3NScnl5SkZQUFhzOU13eUdrVHVNODZlVEUrWU5iNXo0NHI4ZnpFZG9UUHlBdjRQVTVYbVYxMjRPZ0NxM2R1TUxuSWJDdG8rOGdGQUZtazFEcXpvM3pvbk95TEJlUm1wYU1lUmNGSnpUNlpQdnVlaTQxblM1N1hHdTNndVkvVFdRQlRLSGVGVjY5dFRaa0greW9taTJ6T2M5dWVIY2JuUXgvMEZ4K08xYS8zVENpMTFNaE9ZR0lIckxIN2JDZXJzdGxESjhkVkoraDZ6T2ZEUFJ3bGtwMDVXbndLVFBJdVRkMWNJN3BYenpQeVQ1bGVObHc2M2dKRzlxQUNsSENQTGZ0UWlzOENoalBQenc0NTYxRWNWcGxmUi9aZTJJbFBuWU9heEF3bjgzZ1pjSWdvQy9UNnlWcURiUFk4bktkZHpXb3Yrc05LQjRQUjgvajRGeTVzK3JBN2EzRjhvcFoxbXltY1pGeDAzTnVwdC9ZeGRQMHRVSDY4OVIxbldwV0hOdXdLTXVXUjBRTUhNNjdydTAvNUtmdnpoVlZPVnQvU041RFVKOFE1VU1hSFBWaHFOTXlVbU9xTHhCK1dtWS8zc1ljSWU3YTJYWTZYZGlpaWJXNDQ2ODlNWkd3YXh2dTVKeU9jeHpqc2JmL1RZMTdmTWp1YkN5Q2J6bW00bXdlYjR6cVJPL2xZWWVodzhyR1B5OVF3Nkg2eXNkc0gxK0syNTdBMjJoWmpoMlV4a3hOOWhBOE1FWmVFK0RwcmJOa3NrYU1QOCswK29jN1JURWZ3TGl2R2lJUmVDbmJoOFlIc3Zwc3ljSnc2RUlzZjVWUFNjNWxXVUxmNllMdm5IR0RZZUswY1JKN0FUeDdpQmN5TDNmUkpJdzQveFBNOUtYMGo3bHJzdXpsbmxsZER5dmlJaGVjMkxZMjVmUEZNQncvTFRyNWdmWVJUaHdnMnhBZTIydGtFNk96aFUrSFdjdjY0bytTMG8yMWZvTW1qZTV4SGU1YndGSityTVFGbHgxaDlCSE1mK3VSakhHQlIrZGVvcWZ2MHo1aVlQWDRNSGprU3gvTnFXR1VqMkcySEREcmdLeE5wWVhIZFpwWGlRNWtMdU9DY3NtYndSUUlhWHl5ejhEUGZlb204NlZjL0k0cnF0YXdmTmVxMFVqMkEzYkk0eDBjMzJibnNRMTdzUUQxUHViS3BHTnN3N3p6MlJiU1lSaFdIbnBxdDRyY3RteVo4RW9BbXhCYjVacnFia0Izbk14NWJhWHdpeE9jakhoM0RpVHBzRnVnQ2xzMnVNcXR3eTdiU0JEbjNzRGg4RWdCUHdQaFRUeVBCNVBuZG5WN0ZFdnYvZVo4eGg3Tjk3Q0tNU0NHZkFGc0pSaDZiblRHcll6cTVQWHVzV1oyQ0dJZlBkNElGL3IzaGtkVzR0a2Q0UG43cmtZR2JxSExlRU84QzZ6QllFMm5FVFpPZ1RqcVJRVHNJQ1hlSzJlZWNkc2M2eExhdVUxV3JCWml0T2dQYmEyMU9GL1NRenZHM1ZreGd1WHRHQjVXZHB5Q2RWdjd1V0NZVFV5THNlQzRIV0ZydFlNdEtkQW9RaXNRSjYrTnpOQ3ZZOFp5Ukt3NDh4UUNoYThnY09LTlpWQ3VLZ2s4cGZYekNRRlhLcnZBNUU5OE8yZXpqQjZyOXZpamY1VE4vRytLMU9QeTZPOG9TVW5JN0dyOURlN0Y4SStEc25tV2o5VDJmeHlpTEhJb0ZnSSs2OEo1NzRTeE8zYTdMNThQNGJKMEEvcjNxcFNSQi9FenhlUnFSZlFJVHhoaUFWcGpGbUQ3Y2JKdTI5Umpma3Ywelh1MDdCeCtPNXhDK2ZXNVdQdW1vZWNvWUVWOEFjcnYyUExOTWtHZndSVlpLVU1TSnN5VWlIakhHMTltSHFUdSszeDZUSHM2elNhQmV3SWZEK29vUGRBNzJISCtWdXh6V0o5bXBCdXQzakh5MnJRekYzQ3JvYW1JZm1MdWRNTUNOUWRSc3IvQTVqNXMzdzJCWnZldk1BU2svbGNTT0xEelBKNFdPTCtOR3NSbHlxRHpmWGoyMUR6NDJPUHRvaWNma2NiU21mSjJ6MjR1bEhvN0U1aXFRaWhha1R4K1RHcERlTXoxQzJVZjR6QjMxNWZOVUxQVzUyK05qcVo5NysxeW5ZQkhVNHlOVG5UUnpwamVpYzMwR2VmbDV4dGdwSC9MSkFzUVk0N3dkYVdDVkE0SldjVFRwTU4zdHdUVC9zbXU3VjgrKytDN3JBRGtFOXg3SENWaHc4bnBnN0lPcEhYWG84eHA5cU9PcC92Rmh5TDRZazM3VTA5RkJremJIM2FnREJ4dXdXdDI0T2thMU5XQWxqMElSRkQ2emFaWUdlWHJpT2NDM1dKL2xyY3VXdSs4ODdheWZydjdoZ2FYajhweStWeUptZDVxSEljMldyampNd0dNZ0tCZlUyTm84eStVcjB2aStjVnVqOCtWNGcyMEJrMCtzdzRZOWh1WENpVUdPVFhmcUdwVFpKeUY1K2o1Zm43c21mOXYyNHpxeC93VDR1dXBWUEhJZ05IZ1c1SUZ1UDdNOXZvUkxmZFZIRDhHSUFmZnNBY1I5R3ZlVEQwQWJCZG1IQTN5UGVlRVhMZEtHbTRyN29aN1BYRWY4QkNKdm5ScXY5eG1OVnQxR0h3NTlocDFqSDhSdEsxVXNpMkZsZllidERENnB3bno3emhIRWM1enpycWRRREJhbWhTenA1NW56WmFzWnZvRTVMZ25rNFpUSnMxdmxmRW5UY1h6ejFKZEVINXhta2lEeUJxOUQ4ckZqYkljRmwvTE94ZldiZzdRbXloSFdEd1NCejc0L2JxZjduR09zNnZVMHdRZk5BUm5Pckx0dDVhaHE2L2M4eFdQZU9UbmNzMFdUZkZZcjNSNHBwek9nVHp6QlJ5NnJuQUNFODh5MEp3MldNcW1uaStOOWJhYXhlOENHZm9tQ3d3THMvZmc4ZXpZVlBCeGtyaXRhZ1dDVGdnY3pQVHZFMzRkdUpwK2ltQjJ3ZFNyMVgydlpBRUZqNkRlQXpXS2F4SWR3UHpBM3Uza2lvdU02RDFKS1g1cWVmTXRLdWRKbGhwdG8ySDFNd1p1ZHR3WEVxdWVjOHd1YXNXT0FyR08rNjdRamkrVytQaDkvKzRxVEZpVzBEaUI2U05LRzAvaHR6MFc0d3BpMlJsODN1NUVTOGdQZHlmWjRQb2lSR2J2aVpibWxOWWFXZkZvbGlMQllwalNmZDNZRjRPdUVGTHVYMXZESnUydlk4dTJENnQvMlpXUUlkdTVVbTN3VkM5VzZjK1J0OGJQWkdtZGp5WjNZeEJyYk1YdGI3dm42Q0hFY3cvUDU2cEFWYktsWk9rQzQ1SXJTOVZrTWRkdVVaOE5Fc04za3RrTjN3YmJsN0dCcFF3QzJuZzArbm9vNDhqaWFyOGRqN0xVQVp2OFBQUGZ2RWE2TzBVNEFBQUdEYVVORFVFbERReUJ3Y205bWFXeGxBQUI0bkgyUlBVakRRQnpGWDFPbG9oVUZPNGc0WktoT0ZrUkZITFVLUmFnUWFvVldIVXd1L1lJbURVbUtpNlBnV25Ed1k3SHE0T0tzcTRPcklBaCtnRGc1T2ltNlNJbi9Td290WWp3NDdzZTdlNCs3ZDRCUUx6UE42aGdITk4wMlU0bTRtTW11aXFGWGhDQ2dIejBJeU13eTVpUXBDZC94ZFk4QVgrOWlQTXYvM0oralY4MVpEQWlJeExQTU1HM2lEZUxwVGR2Z3ZFOGNZVVZaSlQ0bkhqUHBnc1NQWEZjOGZ1TmNjRm5nbVJFem5ab25qaENMaFRaVzJwZ1ZUWTE0aWppcWFqcmxDeG1QVmM1Ym5MVnlsVFh2eVY4WXp1a3J5MXluT1l3RUZyRUVDU0lVVkZGQ0dUWml0T3FrV0VqUmZ0ekhQK1Q2SlhJcDVDcUJrV01CRldpUVhULzRIL3p1MXNwUFRuaEo0VGpRK2VJNEh5TkFhQmRvMUJ6bis5aHhHaWRBOEJtNDBsditTaDJZK1NTOTF0S2lSMERmTm5CeDNkS1VQZUJ5QnhoOE1tUlRkcVVnVFNHZkI5N1A2SnV5d01BdDBMM205ZGJjeCtrRGtLYXVramZBd1NFd1dxRHNkWjkzZDdYMzl1K1pabjgveHJ0eVl2RFJmRzhBQUFBR1lrdEhSQUQvQVA4QS82QzlwNU1BQUFBSmNFaFpjd0FBQ3hNQUFBc1RBUUNhbkJnQUFBQUhkRWxOUlFma0J3SVJFZytzaDBPcUFBQWdBRWxFUVZSNDJ1eGRkM2dVMWQ1K3oyekxwdmVFa0lSaUNDMFFhZ2hkT3FHSU5CRkVVY0VHSW9JRnBQaGh1VjdBY20zWDNwQXJLZ29pSUNBaXZZbDBFa3BDU085bGU1dlptZlA5c1R2RDdHWkRVVVRVL1QzUFBKdmR6Y3llT1hQbW5mZlhDYVVVZnZudFlyUFpVRjVlanVycWF0VFcxa0tuMDBHdjE4TmtNc0ZzTnNOaXNjQm1zOEZtczhIaGNNRGhjSUJsV2JBc0M0N2p3SEVjbkU2bnRQRThMNzN5UEE5QkVPUi9FMEVRSU44b3BlSXJvWlJDM0FBUTcxY0FvSlFTOTlDbFY2L1BTRjVlWGx4VVZGUVRqVVlUcDFBbzRoaUdpV0VZSm9vUUVna2dBa0FvSVNRVVFCQ0FRQUJhQUdyM3BnREF1SThuQU9BQnNPN05Cc0FLd0VJcE5RSXdVa3IxbE5KNlNta2R6L08xSE1kVjJlMzI2b3FLaW9yMDlQUnE5M0dvYkd2d25oRGkvWjM0R1FCUVFraURWOWxHR1lZQklRUU13MEFRQktqVmFqQU1BNFpocUVLaGdFS2hBTU13RVA5V0twWFNxN2lwVkNxb1ZDcW8xV3FvMVdwb05CcG9OQnBvdFZwb3RWb0VCUVVoT0RnWUlTRWhDQThQUjBSRUJLS2pveEViRzR1RWhBUm90VnIvelhRZGhmaUI3YmNKeTdJb0x5OUhaV1VsYW10clVWOWZENzFlRDZQUktBR2ExV3FGM1c2SDNXNi9JcURKd1V5K0NZSkFSSUR6QWpNUElCUEJTUTVTM29BbGYxOWRYWjBhSEJ5Y29sUXFiMkVZcGlVaHBEa2hwQm1BWmdBQ2JwSnB0Z01vcHBRV0NZSlF5UE44QWN1eUYzVTZYWDZ6WnMwdWVBRWN2UXpnTlFCQUVmZ0lJUjVBUnltbFNxVlNCRFlKME9RZ0o5L2s0TllZd0FVRUJDQWdJQUNCZ1lFU3dJV0doaUk4UEJ5UmtaR0lqbzVHZkh3OEVoSVNvRmFyL1RlWEg5aitIQ2twS1VGbFpTVnFhbXBRVjFjSG5VNEhvOUVJazhra0Fack5acnNzb0hFY0o3RXpiMUR6QldZaUt4T0JUYngyUG9ETTQzMWVYbDVzUWtKQ0I1VksxVUdoVUxRbmhMUUgwQmFBNXE5OERYaWVkNVNXbHA1TlNrbzY0M1E2ejloc3RwemMzTnljSGoxNjFMcVpvaHpVQkRkVDgyQjIza0FuQXBzSWFDS2J1eExJaWFDbVVDaWdVcWt1QzNCYXJWWUN1SkNRRUlTR2hpSWlJZ0pSVVZHSWlZbEJmSHc4a3BLUy9EZVpIOWh1bkZSVlZUVlFPdzBHZzZSMnlnSE5icmMzQUxRcnNEUWlxcDFlZ0VZYVlXVU5HTm5FaVJNVkgzMzBVZmVBZ0lCdUNvV2lLeUdrQzREVXYrTzE0SGtlcGFXbGFOYXNtZmRYZVlJZ0hPTTQ3cmpSYUR4Mnh4MTNITnU5ZTdjZ0F6c0o5QWdoZ2plamN3TmJBemJITUF6MUFYQlFLQlQwU3V4TkRuQWlleE1CVGxSUHc4TENHcWluY1hGeC9wdk9EMngvbkJnTUJwU1ZsVWtzelpmYTZjdU94bkVjV0phVkdKb1BPeHFSMjlGOE1EUGl3MTRtc2pMeXhCTlBLSll1WGRwSG85SDBaQmltRnlHa0o0RGdmOEkxdVF5d2VZdVpVbnJJNlhRZU1wbE1oMmZPbkhsb3pabzFUaDlBSjRqQTVnWTA2c011UjcyWm5KZjlqWHJiMzBRR3AxYXJKWUJyelA0bVYwOUY5dGEwYVZPRWhZWDViMEkvc0YwLzRUZ09KU1VsSGl4TnI5ZExMTzFxN0dpK25BTWlvSG14TTBuTmxERXl5SUdNVXNyVTE5ZTNDdzRPdmxXaFVQUWpoUFFIOEk5YzlkY0FiQTJlVTRJZzdPVTRibDlWVmRXKzVzMmJuM09EV3dOV0oyZDBJbnVUL3kwNkdPUWdKd0pjWTg2Rks5bmZSUFlXSGg3dXdkNlNrcEtnVXFuOE42VWYySDZmVkZaV29yUzB0SUZ6UUs1MmlxQW1zalNSb1YwdG9QRThMNm1aZ2lBMENtWldxM1dBV3EwZXpERE1ZQUFkL0ZmbmR3R2J0MlE3bmM0ZFJxTnhWM1IwOUQ2NHZMaUNOOWcxQm5JTXcwanFxa0tob0ZjTGNDS0RFOW1iQ0c1eTlkVGJ1WkNZbUlqNCtIai94ZmNEMjdXTHhXSkJjWEV4eXN2TFVWVlY1ZE01Y0tYd0RTKzFrM2c1QnVUc2pIZ3hOQW5NYkRaYmxscXR6aUtFWkFGbzZyOHlOMFRLZUo3LzBXUXliWStNak55T1MrRXFQa0ZPcHE1NnFLb2lpL1B5b05JcnNUZHY5ZFRidVJBWEY0ZUVoQVFrSnljaktDaklmN1g4d0haMVVsSlNJckUwdVMzTmwzUEEyNWJtZzZWZENkQ0l0ODNNWXJFTTFHZzB0eEZDUnZuQjdLWUF1UzE2dlg1TFRFeU15T1E4UU02YnhjbEFybEdBVXlxVmpRS2NuTDE1T3hlOGJXK0ppWWwrNzZrZjJDNHZKcE1KUlVWRktDc3I4MkJwQm9QQkl5YnRLb05zaWFoNml1cm1aZGdabzlQcDBvS0RnOGN5REhNN2dIYitKWGxUeWxtV1pUZVdsNWR2YnRteTVSa1p3UEV5a0tPeTF3WXNUcTZtdW9HTlhrMXdyenoyVGZTY2l1eXRhZE9tYU5hc0dVSkNRdnhYeUE5c0RWbWE2Q0R3NWZGc0xJUkRCRFZmZ0NiUEVwQURtZ2htbXpadENoZzhlUEJFcFZJNWdSQXl6TDhNL3pvaUNNSTJxOVc2NGEyMzN0cTRhTkVpR3dDbkhPUmtMRTRRMlp1M211b1ZIdUlCY0NLNE5SWWE0dTA1RlIwTGZ2Ym1CellBZ05WcVJVRkJRUU1IZ2NqU3pHYXpaRXU3UXViQTVRQ055TlZPdlY3ZklTZ29hQkxETUpNQStGZmlYL3laeUhIYzJwS1NrdlVwS1Nsblphb3E3NjJxeWdDT1hnbmdMaGZZcTlWcUVSd2NMTEUzYjhkQ2l4WXRFQmdZNkw4eS8xUmdxNmlva0ZUUDZ1cHFEd2ZCbGVMU1pLRG1FOURjQWJVZTZxYlZhczFTcTlXVENTRVQvVXZ1YjhuaTF1bjErclhSMGRFNzNBeE9EbkM4THpWVkZpYlNBT0FhczczNWluc1RWZFBZMkZoSk5XM1NwTWsvL3Bvby8wa255L004OHZQelVWeGNqSXFLQ2lrbHltQXd3R2cwd21LeFNLRG1jRGg4WmcrSWdDYXpvL2tFdEx2dnZsdngwVWNmM2ExVUt1OEcwTWQvKy85OWhXR1ljWkdSa2VONG50OXZzVmkrSGp4NDhOckRodzg3UlpDamxEYndyUEk4VHdWQm9HTGlQYy96VkI0UzVIUTZxVHhjU05RUTVLWVE4YUVyUG9TdFZpdk1aak5NSmhOdXVlVVdLQlNLZnk1akt5d3MvRWVjcU5GbzlBbG9vc2RUcm5aZXpvN21TK1dVc1RPeWFkT21rTmF0VzkrclVDaW13Ujl6OW84VVNtbTJ3K0g0Y3YzNjlXc1dMRmhnSklUd01pYlhRRTJWc1RodkJuZForNXRjUFJVRGU4V2MweVpObWlBNU9SbWhvYUgvVEdEak9PNXZmNUpsWldVb0xDeVV2SjVpQm9HMzZ0bFlHSWVYMmtsa2FVOFNxR1ZuWjBlMGJObnlmb1ZDY1QrQUZQL3Q3UmNBK1hhN2ZkV21UWnUrbmpKbGlzNUxUZVhkNENhcHFPNWdYeXJQUWZWV1QzMkZoWGluWkVWSFIwdGUwK2JObTZOcDAzOWU1TkRmMnNaR0tVVnViaTZLaW9xa2dOdkxlVDI5TXdnYVVUdEZMeWRES1NVblQ1NE1iZHUyN1F5RlFqRUR3QzMrZTlrdlB1U2l6V2I3L0t1dnZ2cHkrdlRwaHNzQkhDRkVrQ1hkZTJjdVVGOFpDNDE1VGNXQTNtYk5taUUxTlJYdWJBay9zUDJWeFdReTRjS0ZDNUw2V1YxZExYazk1UUczamVSNUV1OVVLQzlQSjdOa3lSTEZraVZMSGxRb0ZBL0NIMy9tbDZ0NzBKNjFXcTByNzdqamp0VmJ0bXhoM1FBbnFhZ3lnQlBrSGxUdjFDeVZTa1VieXplVnE2V1JrWkdJalkyVjFOS1VsSlIvVE16YjN4TFlxcXFxa0orZmo1S1NFbFJVVkRRSTVmQk9YcGZiMUx4WW1vZGpRUFJ5MnUzMk8xVXExU01BZXZodlY3LzhCb0E3YkRRYVB3c1BEOTlJQ09HOEFNNmJ3VkZaQmdQMVptL2VNVy9lQWIxaVNFaVRKazJRbEpTRVcyNjU1UjlSRHVsdjV4VXRMQ3pFeFlzWFBlTFQ1TG1lM3NucmNwWW1PZ3JrYXFmTWpzWllyZGFCYXJWNnBqdmx5UzkrK1cxc2dwQ01zTEN3REo3blIxVlhWMy9XcEVtVEEzS0E4L2FpOGp4UDNRSkJFS2hYL1Q3eFBYeDVVVVd6aXVoRnRkdnRzTmxzYU42OHVSL1kvaXIydFBQbnorUGl4WXVOT2drdVU5bTJBVXVUcTUzMTlmV3BvYUdoc3dnaEQvdHZTNzljTDJFWVprUjhmUHdJbG1VL3lzbkorYnh6NTg3NU1vQVR3MFI0QUlJZ0NJTFkzOEs5VVRGbFR3NXUzaUFuT3NDOHdjMXV0Nk4xNjlaL1c3dmIzd0xZYkRZYnpwOC83K0g1bE1lbk5XWlA4MlpwYmxDVDFNNTc3NzFYOGNFSEg4eFdLQlNQQVVqMDM0cCsrU05FcFZMTjZOU3BVNWJGWW5tL2I5KytueDgvZnB3RndMblpHeU9xcUpSU3FSaW0yNEZGNWNVVnZBSE91MXF6SE9CWWxwWEE3ZS9ZU09ZdkQydzZuUTY1dWJrb0xDeVVDa0xLcTNMNEtnYnBmb3JKUVUzTzBoaEtLYkZhclVNMUdzM2pBQWI1YnoyLzNBQnBHaGdZK1B5dnYvNDZvTHE2K3FNbVRacnNKWVN3TXZXVTRGSk9LdlZpY0hLQW83NmFBdmxTVDhVb2dOVFVWRVJFUlBpQjdXYVJxcW9xajNBT01ZbmRWNFZiV1NnSEVlbTVENWJHbEphV3hzZkZ4VDNPTU14Yy83M21sejlCUFIwUUh4OC93T0Z3L0hmSGpoMmZabVZsVmJyVlUwWU9jSzRLNWtSb2pMM0pWRlZjalpxYW1wcjZ0M0lxL0dXQnJhU2tCSGw1ZVNncUtwTENPZVROVlh3NUNieFpHcy96Y3BiRzJPMzJDU3FWYW03cHVlTmR5eDNCeUVodmRWT2RjMzE5UFdwcmE1R2FtdXBIZ0wrQTZQVjZiTnEwQ1E2SEE0TUdEYm9tZzcxYXJaNDFiTml3WG5WMWRlOUhSVVZ0SVlRbzNPb3BKN085RWJuOVRRNXdMTXNTbG1VYnRiMTVNemlPNDFCVFV3T3oyUXdBaUlpSVFPdldyWDgzOFNnb0tBQUF4TWZIWDlYNVYxUlV3T0Z3L0c3bkJ0UG9ONndlbnl4N0VvUDdaeUlqc3o4ZVdmZ3F5a3pPbTJMQjVPZm40OHlaTXg1eGFwZlltZzdGRjg3ZzJKRmZrWjJkZzhMaU1saHNkamdjRGlJQ25EczFpZ2lDd0FpQ29LaXNyRXgyT3AydnFWU3Evd0hvdXZvLzgzRFB3bmR1aW5NOWZQZ3czbnp6VFFEQWtTTkg4TnByci8ycFkvZzl3bkVjQmcwYUJJUEI4S2VONFhyTDJiTm5ZYmZiRzN6dWREb3hZY0lFRkJVVklUQXdFRmFyOVpxUFRRanBIQmtaK1I3THNvdDM3TmpSakZJYVFDblZ3TldZV2tVcFZWQktGWUlnS0FSQllIaWVKMDZuazdBc0M1UEpCS1BSU0VRdnFEeVAxR0F3U0ZXaUt5b3FVRnhjakFzWEx1RFFvVVA0K09PUDhmYmJiLy9tZGZiU1N5L2h6Smt6QUlDQ2dnS3NXN2NPSzFhc3dLcFZxNjVxUFd6WnNzWG4vMTdyZW1nVTJMWjk4Q3hlL0hRM1JrNS9CdiszNEQ3ay9mZ2VIbm4yNHo5OUlaMDdkdzVuejU1RmZuNitSN1Zia2ExVkZlY2h2NlFheXNCUWhBUUhnSE5ZU0gyOW5vaU16YzNVaUNBSUlrc2JGeDBkL1JVaFpPYk4rTlQvOHNzdmtaR1I4YmNZZzBxbHd2dnZ2LytidWk3ZERQUGdTK2JNbVlPU2twSUduK2ZsNVlFUWdrV0xGbUh5NU1sbzE2N2Q3NW0zQi9yMzcvL2ZFeWRPWkFIUXd0VVRWZ1EzcFJ2Z0dCSGMzTDAwQ00vemNEZ2N4RzYzRXhIY0xCWUxUQ1lUVHA0OGlZS0NBdFRVMUVqOVBWaVd4Wmd4WXpCdzRNRGZORTZUeVlUZHUzZWpUWnMyQUlETXpFeXNXTEVDdDkxMjJ3MWZENDBDVzFGUkVVaEVjMHlaTkFZamI3OFhMeTkvRWNPNkpNRUpRRjk0RkhQdm40Q01qRXpjTnZraDdENVhCUUE0dXY1TkRNKzZGM2syQUhEaXhZZEc0dUZsWDdwNStVbE15aHFPZDcvWWlEbFRiMGRtUmlZKzIxM29ZbUNIdnNjOTQ0WWlJNk1YcGo3NkhQSnJIU0p0eE5aUGxtUDBnTDdJN0RzWUR5NTRCYWZQblVOQlFZSFVEcys3SjBGRmVUWEFxQkFhRkFDVldrdlVTZ1dvNEhTQm10TkpPSTVsbkU0bjAyUEFpUEJ2OXAxNVFhVlNmUW1nMjRGdjM4VHcvcjB3OExaN2NMalFKS2V1SG1OWTh1WWFPRzdRVFdNMEduSDI3Rm4wNkhFcER0aHF0V0xldkhubzM3OC9IbnZzTVRnY3J0R1l6V1k4OWRSVEdEcDBLQ1pObW9SVHAwNEJBTDc0NGdzOCt1aWpHREJnQUJZdlhveXNyQ3pNbVROSGJMcU10V3ZYWXVUSWtjakt5dkw1cFBRMWhsOSsrUVhqeDQvSDRNR0RzV1RKRXRoc05nQkFiVzB0WnMrZWpheXNMSXdmUHg2Ly9QS0x0TTlkZDkyRmtTTkhZczZjT1pLNkk4cW5uMzZLNGNPSFk4aVFJWGp0dGRmZ0hUVHVQWWJ2di84ZTc3MzNudlQ5NmRPbnNXREJBb2twTFZ1MkRFT0hEc1hZc1dPbE1aak5aa3lmUGgydnYvNDZoZ3daZ29rVEo2S29xQWdBOE1JTEwyRC8vdjNTOFZhdlhvM1ZxMWRmOXRyczJiTUhFeWRPUkdscEtlYk9uWXVKRXlkaTU4NmRBSUNubjM0YVR6enhCQ29xS2pCeDRrUk1uRGdSTE10ZTluanIxNi9INjYrL2poa3pacUJmdjM1WXVuU3BOQS9MbHkvSHFGR2p1aXhjdVBDRFhidDJ6ZjN3d3crakthVUJBRFNVVWhXbFZDa0lncExuZVViYzNNQkdEQVlEYW10clVWdGJTMncyRzNRNkhVNmZQZzJqMFlqczdHeHMyN1lOUjQ4ZVJXVmxKY3JLeWxCUVVJRGk0bUxVMWRWSnY1K1hsNGQ3N3JrSGdpQkk0NTA5ZXphT0hqM3FjUTRiTjI3RXFGR2p3RERNRmRmMjVkYkR1WFBuTUdIQ0JBd1lNQUNmZnZycEZkZmtoUXNYTUhQbVREend3QVBvMzc4L0ZpNWNDTWgwYzQrdDhzUUc5R2pmRXAxNmpjRFNWOTdCNlJMWGlWTGVnRmtqT3FIN3NHbjRidE42ekpwd0sxcjNtSUFTTzhXdWorZWpSWXMrT0dtbW9KVERJNE5TTUd6Mlc2NzlxdmVoUzRzV2FObTZFMmJNbTQ5Rjg1L0Uzbnd6K0xvVEdOQytKVVkvK0N3MnJGK04wVDNiWXRUanJuMU9yRnVHbGkzYVl2N3JLL0hLMGpsSWlvbEMxclFuTUgvK2ZFeWZQaDNqeG8zRDRNR0RrWm1aaVk0ZE95STFOUlVhQlFGUmFoQVpHVWxDUWtLSVZxc2xhcldhVVNxVkN1S3lLYXBYcmZsMjhPSUhSLy9Zc20wZmVxeWFvNDdTUGJSclNnczY5cUdsZFAzYWxYUll0MVRhZXNUamxGSktUNnhiUmx1MmFFdWZlZXQvZE8ybksyaW5sSlowMmJvVDlFYklxbFdyNk50dnZ5MjkvL0hISDJuLy92MXBXVmtaZFRnYzlNNDc3NlJyMTY2bGxGSzZZTUVDK3E5Ly9Zc0tna0FQSHo1TWUvVG9RYTFXSzMzOTlkZnBmLzd6SDNya3lCRTZkT2hReW5FYzdkV3JGNjJ0cmFVSER4NmtJMGVPcEhxOW51cjFlanBreUJCNjh1VEp5NDVCcDlQUjd0MjcwN05uejFLZTUrbkNoUXZwRzIrOFFTbWw5UDMzMzZlZmYvNDVwWlRTUTRjTzBYNzkra243bVV3bWFqUWFhWHA2T2pVWUROTG41OCtmcC8zNjlhTVdpNFZhTEJZNlpjb1Urc3N2djF4MkREVTFOYlIzNzk2VTR6aEtLYVZMbGl5aGE5YXNvWlJTK3ZycnI5T25uMzZhT3AxT2V2YnNXWnFabVVudGRqczFHQXcwSlNXRkhqaHdnRkpLNllvVksrajgrZk9sZVowNWM2WjAvR0hEaHRIQ3dzS3J1a1pEaGd5aHVibTVEVDQvY2VJRUhUTm16RlZmNjQ4Ly9wamVkdHR0VktmVFViUFpUQWNPSEVoLy9mVlhTaW1sTnB1TkdvMUdPbVBHRFByamp6OVNudWQvS2l3c25BQ2dHWUFtQUtJSUlXRUFnZ0FFTUF5akpvUW9DU0VLdFZyTkJBUUVFQUFrTEN5TXhNZkhJems1R1FFQkFXamV2RGt5TXpNeGVQQmdqQnMzRHRPblQ4ZjgrZlB4MEVNUFllREFnVGgrL0RoWWxnV2xGR1BHak1IT25UdEJLY1c1YytmUXQyOWZPSjFPRDh3WU4yNGN5c3JLR21ESnA1OStpdWVmZjk3ak03ZXFqUFQwZEJnTUJ1bnpqei8rR0dQSGpvWFpiRVpWVlJVeU16T1JuWjN0c2UrcVZhdnc5dHR2Uys5UG56Nk5ybDI3b3F5c0RGYXJGUk1uVG15Y3NjV2xqOGJXcmQvanZxd08yUC9OZXhnemVBZysrZmtjaE9JRDJISFdnSWtQUG8zYlI0N0Jvc2Z1Qmx0OUZMdFAxbDhWQ3huMTZISjgrT295dkxqc1pmUnBHWVNDZzd0UmFHVXdmZDRpakI0ekdXKzgrd0ZtanV2dGVnSjh2d0UwTEFGOHhSbmtGQmtRb0hEaTlQR2pVcHlhZDBpSHpXWURUeWtnOEI2cXA4dnJLVEFVVU14K1k5UERVeWVPWDdsay9zeWhHbnNadHUzT1JmNnZoMURQQitEQnA1L0JtSEgzWUdDWGhFdFBvZTgzQUJGSlNGQVlVV1VMUkdJRWcxMjc5dDBReHJaMjdWcU1HemZPNDdNMmJkb2dJU0VCYXJVYTNicDFRMFZGQlFEZ3A1OSt3b3daTTBBSVFmZnUzWkdjbkl3VEowNEFnRlIxTlNRa0JFcWxFa0ZCUVdCWkZwczNiMGFUSmsyd2R1MWFyRjI3RmpFeE1UaDA2TkJseDNENDhHRjA2TkFCYmRxMEFjTXdXTEJnQWNhUEh3OEFtREZqQmhJU0V2RDIyMjlqNTg2ZHFLbXBrZllUZjk4N0lEUXVMZzRxbFFydnZQTU9UcDgralpVclZ6WlFNYnpIRUIwZGpTNWR1bUQzN3QxZ1dSYTdkKy9HcUZHdVpKQWZmdmdCSVNFaFdMbHlKUTRjT0FDR1lYRCsvSGxwREQxNzlnUUFaR1Jrb0tyS3BXa01IRGdRT1RrNTBPbDBPSG55Sk9MaTRxNUhXNzlybHU3ZHV5TThQQnhCUVVGbzM3NDlLaXNyQVFBQkFRRUlDUW1SNnFzeERETzRXYk5tYjN6enpUZFQzS3BwZ0tpYUFoQlZVd1VBUnN5ZUlZUVF0eU9OMk8xMjhEd1B1OTB1cWFaNnZSNTFkWFZTWUx2UmFFUnViaTVPblRvRnU5Mk9HVE5tNFBQUFB3Y0FmUFhWVjdqbm5uczg2cjNsNXVZaUpDUUVDUWtKVjNXdWphMEhBT2pjdVRPQ2dvSVFHeHVMWWNPR2VURC94dTZMaElRRUpDUWtRS3ZWNHE2Nzdtb00yRmhzVy9NWjloY3llR3p4TW16YnN4ZTNkMURobGRmZWQzbFFBR2cwcnVhdEt2Y3J4L0x1ZlFYSUdHc0RDZmVLbDJFNUJ3QUZOQnFYZzdaRmVoOWs5ZTNzb3B3bUN6aWJIaGZPbjBkaFlSSENrMUlSRzZLOFhQY29Ra0VJcFlKVU84M3A1QmllNTVuaXZPMEp2VnEyZUMxQXEzMERRSUpTbzRZQ0FNZXo0Snc4QUFXVW1vWk9ZcnZORGlYRG82YXlFcFdWMWVpU05RVlp2ZHJlRUZ0aWVIajRaYXVoTWd3anFRc2N4MEdqMFVqZmFiWGFLNm8vTnBzTm9hR2gwaloyN0ZqMDZkUG5zbVBnT0E1cXRWcDZIeElTSXBYRmVlMjExN0IrL1hyMDZORURJMGFNdUtyekRBc0x3OGFORzVHYW1vcHZ2dmtHdzRZTlExbFoyUlhuWWVyVXFmajIyMit4ZmZ0MkRCbzBTQW95dGRsc2lJeU1sTTVwN3R5NVB1ZFFQbmRLcFJMang0L0g5OTkvajNYcjF1R3V1Kzc2MDIxM2hCQmNJWTg3UWExV3Z6Uno1c3huTm0zYWxDaXFwaktBRTRHTmNkdVRJUWdDY1FmbkVrRVFpTVBoOEhBcTZQVjY2ZDZ5V0N3b0xDeVV3SzF2Mzc3SXo4L0h1WFBuc0czYk5reWFOTWxqTUd2V3JNR0VDUk91K3p5bzFXcklTNnRkelgyaDBXZ2FBellsanYrNEVrOHRlQlo3VCthanRMUVFlclByeGxFMDY0Wk8wU3I4c081L0tDd3R4YW92TndDQkxkR3RZd3ppWStJQTFPR1hnOW5JUDdrTEY2cjVLdzY4WlpjTVJDaFliUHBtSGNwSzgvRFl1RXowdnVkRm1Fd21ORW0rQlpiYUtnaWg4YmlsWlRNb0JSWUJha1dET0RWM3hWdkNzaXdVaEFCVUlDekxFWjduR1VHZ3pOQ0hYKzNYcEhubWg1bnR3MmJ1MnJnRzU0cEw4ZTJxTmJDUUVHUjBhWTFiT25SRUlDeFl2Mm9kQ3M4ZnhjbThPbWw4ZlhyM0JLZlhJU0VqQ3c4L09BMXQ0c09Ra2RIbEQxL1lhOWFzd1IxMzNIRk5UL3N0VzdaSWJ2YnM3R3gwN05qeGl2dFVWVlZoekpneG1EQmhBbHEzYnUyeFlIeU5vWFBuempoNjlDajBlcjMwUHg5ODhJSGt0UjAzYmh5NmQrOHVxUWxYa2wyN2R1SGxsMS9HYmJmZGhsZGVlUVZ0MjdiRndZTUhyemdQM2J0M1IybHBLVmF1WElrcFU2WkluMmRrWklCbFdVeVlNQUVUSmt4QVFrTENWUVdmVHBvMENldlhyOGZodzRldnlYaXUxV3BSVjFmM3A0QmZlbm82amg0OU9xTlhyMTR2RlJRVTlQRGxXQUNnRUFTQkVkbWI2RFdsbE1LWFUwSE0xckhaYkZJSi9ieThQSnc5ZXhhVEprM0NvNDgraXFGRGgzcFVDZUU0RHJ0MjdjTFFvVU92eTNrVkZoYUNVZ3FIdzRIZHUzZWpRNGNPVjF3UE9wMU9zamYvOU5OUGpjV3hNWGpzcGYraWV2NUN6QmczQkJ3Rm9sdDJ3Y3N2ejRGUzNRVExYdjhYWnM1N0hnUDdyWUk2ckNtZWVlVnRwSVVDR0h3blJxVjlnK1VQMzRaUFcvZERpNlpoMEYzaEpEVEovZkhLMGdmeDFMOFhvZSs3SEtLYWQ4VnpDNmZnOU9uVGlPNDRCSm10TCtEbmJ6NEQ2K1NoMElhZ1pZb0dBWEI2eDZoSjhXbFFLQWdSQkNJSVBBSEFESjc0eU5UWC8rL2had2pScGl4NCtYVVVQVElQSTI3dEIwVkFCTzViK2hxR3R0SUNHSW9sRHc3QnN4OCtqUjlYeDZKOXdxV3FvOE1mZmg2UGx6NkJOeDZmZ3VVOEVOMnFLMTdxUHhsQStCKzJZRm1XeFo0OWV5U0QrTlhJMHFWTE1YUG1UR3phdEFrVkZSVll1blRwRlcvbzhlUEg0L1RwMDhqS3lrSk1UQXdVQ29YazVtOXNEQWtKQ1pnN2R5NG1USmlBbUpnWUFKRGM3ak5tek1EQ2hRc1JHeHVMMk5oWUNJSUFnOEdBc0xBd2pCczNEdlgxOVRDWlRCZzFhaFNDZ29Ld1pjc1daR1ptWXZYcTFSZ3pab3pyd2FsUVNEZkk1ZWFCRUlLSkV5ZGl5NVl0U0VtNVZOZHo0Y0tGZVBUUlJ6RjI3RmhRU3RHdVhidXI4cWFLUFFOYXRXb0ZwZkxxd3p1blRwMktPWFBtb0huejVoZzllalNtVHAxNjNkZkQ4ODgvangwN2RxQzJ0aGJIamgzRFN5KzloUGZmZngrdFc3ZkcxS2xUTVdyVXFJRnhjWEhOQmcwYTlOYlBQLys4MFoyR0phL3N6QU1BcFZSd3gyNUNvVkJRa1JDbzFXb2FIeDhQczltTVU2ZE9TV3p4czg4K1EvdjI3VEZ5NUVnSWdvQTJiZHFndUxnWTk5NTdyOGY0ZnY3NVovVHQyOWVEeVFQQWhnMGI4TnBycjhGa01zSHBkT0xubjMvR0k0ODhna21USmpXNkhrU1FHanQyTFBSNlBYcjA2Q0daRHk2M0hod09CKzY5OTE0cDlPYUtaWXRZaHdsV0I0UHdVSy9PMDRJVDlYbzlna09qb2ZaWUJ3TDA5WG9FUjBaZVUvU3Z3RHFnTjlzQUJqaWJrK01SemxGZFhZWGFlaDBjTmx1RGJBSTVxTW15Q0pocGQwOVZMUC9QZnhkRWh3Y3Rna2Nnc210ODJ1QndhTlNlaE5WbTBRUEtZR2g5cUtTc3d3S2pqVWQwK0I5ZmF2bnMyYk00Y3VRSTdyNzc3bXZldDY2dURxR2hvVkNwVkZlOWo4MW1BOGR4SG1Xa3J6UUdsbVZoTnBzUkdSblpZSUhaYkRhRWgxOGI4SnRNSmhCQ0VCd2NmRjNtd1dBd1FLMVcvKzQ4eUNsVHBqU0l1OXU0Y2FPSDUwL3NrWEdsY3k0dUxzWWpqenppOFZuNzl1MnhZc1dLM3p5K21wb2FhTFZhTUF5RGYvM3JYODdFeE1UWDNudnZ2WTlPblRwbGQ2ZGtjZTdONmE3ekpoQkNCSGtoUzQxR0E3VmFUY1hhYm1McEk3Rm9aVlJVRk9MajQyRTBHcEdUazROVnExWjVuT3VubjM2S1BuMzZvRldyNnhmUUxpYnJ5ME5CR2xzUDJkblpXTGh3SWI3Nzdqdm85WHBFUmtiZVhQWFlkRG9kY3J4QVRYUVNpTTFXNU4yalpLQW1yNXZHVkZaV0prVkZSVDFEQ0prQnYvamxieXFDSU9EdXUrOUcwNlpOd2ZNOFRwMDZoYSsvL2hvaElTRXJkK3pZOGVIdzRjTkxDU0VPTDNEanZjQk5LajB1Z3B1OEc1WUlicVdscFNnb0tNQ3NXYlBRcDA4ZnRHL2YvcWJKTHhXQmJjT0dEWmNZL2MwQ2JISlFLeWtwOFFBMWVjTVZIMHhOVEkxaUJFRWdKcE9wbTFhclhlaXZtZWFYZndxNFpXZG53MjYzSXowOVhYSWc4VHkvSlRjMzk3MTI3ZHFkQnVDUXNUZW51N2tNNys2eElJaU5ZK1RnSnBZY0Y3MlhZZzIzbEpRVXFXRGx6UUp1VnFzVmhZV0ZIa0hRTndXdzZmVjZaR2RuK3dRMWthbjVVajlsV1FTRVVzclliTFpoYXJWNkVmeVZiZjNpRjFCS0Q1ZVhsNytUbUppNDF3dmNPRGU0U2N6TlhYNjhBYmcxcHBhSzRKYVdsbmJOWm9jYklYOTZFcnpCWVBESjFIUTZuYzhLSFY3cXB3UnFEb2Rqc2xLcFhBU2dsWDlKKzhVdnJrcTlDUWtKa2JXMXRXOUZSMGR2cHBReXhCVTRSaWlsSE54T0JjR2RVdUFtT1JRdXh3UDFBWlMrZmdOcGFXbS9LUzNxYnd0c0pwUEpwMDFOQkxYTHFaOXlVR05aOW1HRlFyRVlRSXgvT2Z2Rkx4N0FreElWRmJWWXI5Y0hoNGVIZitNdWQwUzhOVFlSM0p4T3AwOXdhd3pVeEsxRGh3NDNWYU1ZNXMvNllZdkYwcWlqd0VjVFk5SVlxSEVjOTVSQ29WanVCN1hHN1EvMzNYZmZUVFdtd3NKQy9OVWFkYi84OHN2bzNiczNoZzRkS3FVYVRaNDhHWk1uVDhiMDZkT3YrKy90Mzc4ZjE3SG5iMHhZV05nU3M5bDhMd0N0TEpoWG5xa2daU2s0blU3aXJscEpSN1FBQUNBQVNVUkJWTk1tSmREYmJEYVBRTjY2dWpvcGVUNC9QeDg1T1Rtd1dDdzRlL2FzbE5IaExmUG16Wk15WlJxVHpaczNTeGtPZnpsZ3M5dnQxK0w5SlBJT1VxSk43WjEzM2xGeEhQY3N3ekF2d3BWUzRoY2Z3dk04amh3NWNsT042Y1VYWDRURllwSGVHNDFHeko0OSs2YWR3NU1uVDJMTGxpMzQ2YWVmc0czYk5uVHExQWtxbFFxdnZQSUtubnZ1dWVzK3Z6VTFOVmkrZlBrMWhlejRrb3NYTCtLNTU1NFQzd1lFQlFVdHJLeXNmRWlqMFFRMUFtNEtRUkNJdlB5UnU5S3VCRzRXaXdWR283RlJjSHZpaVNjOFVxM2tjdXJVS2FsZ1FtTlNXVmtwRlNmNFM2bWlITWRkMXZ2cFpWTVRjejRoTDhmeTY2Ky9CcWVucHk5aUdPYkp2eU1ZSFRod0FNMmJOOGYrL2ZzUkZ4ZUh2bjM3U2psMVpyTVoyN2R2QndEMDZkTUgwZEhSMG43bDVlWFl0MjhmSWlNak1YRGdRSjlWRms2ZE9nV05SaU1WRWF5dHJjWE9uVHNSR0JpSWZ2MzZlYWdUUjQ4ZVJWNWVIdnIxNjRmYzNGemNldXV0a2xxeWI5OCtsSmVYbzNmdjNraE12TlFPb3F5c0RQdjI3VU5vYUNnR0Roem9rZVlGdUxJaWFtcHEwTDU5ZXdCQVRrNE96cDQ5aTkyN2QyUGJ0bTBBZ0w1OSswcnhaOFhGeFRodzRBQ1NrNVBScTFjdkNRZ3ZYTGlBbUpnWTdOKy9INm1wcWVqU3Bjc1Z4MEFweGQ2OWUxRlJVWUdlUFhzaU9UbFoyaWNuSndkUlVWRW9MUzFGYm00dSt2WHJoOFRFUk96Y3VST0hEaDFDUkVRRTl1M2JCN1ZhTGMxRDA2Wk5ZVEtaR21XbGh3NGRRbEpTRW5yMTZnVkNDSTRkTzRiVTFGUm90VnFjUG4wYW5UcDF3b1VMRnhBWUdPaVJZN2x1M1RxTUhUdjJpdXZoK1BIamlJNk9SbEpTRWdCSWViT0RCZzNDc1dQSGNQVG9VZXphdFVzS2NCMDZkQ2kwV3UzYzFxMWJxNGNORy9iUnl5Ky9ySGVybEtMZHplbFdTM2wzcVh4UkxZWEQ0U0NDSUZDajBRaTFXbzNFeEVRUFZaUVFncEtTRWdRRUJIalkyOFRyNTZ0czA5R2pSNUdibTR0dTNicDV4TUFKZ29BZE8zYWd2cjRlUTRZTWtZNzN5eSsvb0UyYk5nZ0xDd1BMc2podzRJQjBMZXgyTzdadDJ3YWxVb2wyN2RyZFdNWkdLZlVBTlhreXUzZlRGVmx2QWc5UU8zLytmRVI2ZXZyU3Z5dW9BYTR5T2s4KytTVDBlajJXTFZzbVpRUG9kRHJjZHR0dEtDMHRSV0ZoSVVhUEhvM2EybG9Bd0xGanh6QnAwaVRvOVhwczNyd1pEenp3UUlQamJ0bXlCZlBuejVmQThPTEZpNWc0Y2FLVS9EMW16QmdwTFdYMTZ0VjQrdW1uWVRRYXNXalJJano5OU5NZUtzWFhYMzhObzlHSUtWT21JRHM3R3dCdy9QaHgzSDMzM1RBYWpkaTVjeWNtVDU3Y3dEYXpidDA2andUbXVybzZsSmFXUWhBRUZCVVZvYWlvU0xUellPZk9uWGpnZ1FkZ3NWanc3cnZ2U29Hc3BhV2xtRFZyRnQ1NDR3M29kRHJNbWpVTHUzYnR1dUlZNXMyYmh5KysrQUlta3dsVHAwNzFLRlcwYXRVcVRKOCtIZSsrK3k1eWNuSlFYKzhxNmxCU1VvS2FtaHJZYkRZVUZSV2h0TFQwaXRkdjU4NmR1TysrKzJDeFdQRFJSeDlKa2ZJYk4yN0VrU05IY1Bic1dUenh4Qk1BZ1BmZmY5OURQYU9VNHZ2dnY4ZnR0OTkreGZWdy92eDVQUC84ODlML2JkMjZGWjkvL2prWWhrRjFkVFVxS3l2QnNxdzByNkt3TER2TDRYQThQSEhpeEdnQVl2RktGUUNsSUFnS0FBcEtLV0ZaVmxKTFRTWVRxcXFxWUxGWVVGMWRqWnljSEEvbVZsVlZoYTFidDZKZHUzYkl5Y2tCcFJSbnpwekIrUEhqVVYxZGpjOC8vOXhqN2w1OTlWVzgvdnJyc0ZxdGVPU1JSN0JqeHc3cHV3MGJOdURvMGFNNGZmbzB4b3daSTdINzVjdVhTeVlNbzlHSUo1OThVZ0xDcVZPbll2djI3Y2pQejNkbGZ6Uld0dWlQMkU2ZlBvMXZ2LzBXcjd6eUN1Yk5tNGVwVTZkaTVNaVI2Tk9uRHpwMTZvVFUxRlFrSlNVaE5qWVc0ZUhoSkNnb2lHZzBHa2FwVkNvVUNvV3lzTEF3VGhDRU4rbmZYSVlQSDA2enM3TXBwWlNXbHBiU0RoMDZVS2ZUU1d0cmErbXhZOGNvcFpTeUxFdG56SmhCdDJ6WlFpbWw5UDc3NzZlYk5tMmk3dExRZE1HQ0JWU24wMUdqMFVqVDB0TG8xcTFiNlpBaFEyaFZWWlgwTzZXbHBmVE1tVFBTOGJLeXN1anAwNmNwcFpUMjc5OWZHa041ZVRudDNyMDdwWlRTNDhlUDB4RWpSbEJYTldwS3Yvbm1HL3JVVTA5UlNpbjk5Tk5QNmV6WnM2blQ2WlMrczlsczB1OEpna0N6c3JLb1RxZnpPTithbWhyYXRXdlhCdk13ZVBCZ2FRd1dpNFYyN3R5Wk9od09tcE9UUXdjTkdpU040WU1QUHFEUFBmZmNaY2R3NXN3WmV1dXR0MUt4UitldVhidm8rUEhqcGQrYVAzOCtmZjc1NTMxZWowMmJOdEZaczJiNS9NNW9OTktPSFR0NmZEWnExQ2g2K1BCaFNpbWxITWZSbmoxNzB2ejhmUHJkZDkvUmQ5NTVoMzc0NFlkMDRNQ0J0TEt5a280ZE85WmpqbzRjT2RMZ3R4cGJEM2E3bldaa1pORGk0bUpLS2FWMzNua24zYkZqeDJWTEp4a01CcHFXbGtZNWpxTjJ1LzJEMmJOblp3Qm9BU0FCUUJTQVVFSklJTU13R2dCS2htRVVHbzJHSVlTUXdNQkFFaHNiaTRTRUJEQU1nMDZkT3FGUG56NFlPWElrSmsrZWpDWk5tbURGaWhYNDl0dHZwUnA1SDMvOHNYVC85K3ZYRC9uNSthaXNyRVJHUmdic2Rqc29wVGg0OENDbVRKa2lsUzFhdEdpUnRNLzA2ZE94ZnYxNlVFb3hkdXhZbkRoeEFwUlMxTlRVb0d2WHJxQ1U0cGRmZnNHSUVTTWdzc3kzM25ycnhxbWk1ODZkdzRVTEZ5VDFVOTd6VTdTcE5SSjhLekcxNU9Ua1JZU1EyZmdIaUppdjJMUnBVekFNQTZQUmlKQ1FFS3hldlJvclZxeEFhR2dvY25KeXBDZDdZV0docEY0U1F2RHZmLzhiZ012emJMZmJNWC8rZlBUczJWUEs3d1JjcFdPZWYvNTVXQ3dXQkFjSG82S2lBanpQUzZ4SVBKN2MxcE9ibTR2eThuS01IRGxTc3VHMWJldXFkako1OG1RVUZSVmgyTEJoU0UxTnhiUnAweEFRY01uOGVlVElFYVNrcEZ4VjNCUFA4OGpQejhkVFR6M2xNVjR4K1Y2cjFVcnFlWEJ3c0ZUSnBMRXhGQlFVb0czYnRwSjZucGFXSnRYakYrVjZwUVJkdkhoUlVyMlVTaVhhdEdtRHdzSkNwS2VuWStmT25YQTRISmc2ZFNvT0hqd0lwVkxwTVVlTkpYbjdXZzhSRVJHWU9uVXFWcTFhaGNtVEo2T21wZ2I5Ky9lL3FyWGwzaDRZTjI0Yzl1N2QrOEdKRXlmcXZiVXJkODRvTCthWDhqeFBXWllWKy8vQlpyTkphbWg1ZVRsaVkyTlJYVjBObFVvRmhVS0IwNmRQUytXazVPc29QejhmRm90RlVyY0ZRZkJZRTNMelJXcHFxa2UxRjE5U1ZsYm0wU05WcFZMZEdHREx6OC8zQ1dvK0tuUTBDT2tRYldvdFdyVDR4NENhWEl4R0kxaVdSWEJ3TUxaczJRS2owWWd2djNSVkpYNzAwVWVsLzR1T2prWkZSWVdVRUw1bnp4NTA3OTdkNVNGaUdHemV2Qm56NXMzRGUrKzlKK1Vycmw2OUdvbUppVml5WkFrQWVLZy9VVkZScUt5czlMQ2ZpWiszYmR2V1o0WFp2THc4UFB6d3czajIyV2R4N05neFBQamdnOWkyYlJ1aW9xSXVlOU1TUWp5cXN3S0FRcUZBZUhnNFB2endRNmtza2lpaSt1MUxHaHREVEV5TXh3MVNWbGJtQWZMWFU4VGZFcHZ1aUwvVnZIbHpWRlpXSWpBd0VJTUdEY0xpeFlzOUdxWllMQlljUDM1Y2VpaGRhVDBBcmlUOEVTTkdnR1ZaVEpzMnpjT3U2bXRldlVXdFZqL1FwazBiWWRTb1VlKy8rT0tMYUF6Y1JBRGlPRTRLQlJFZEFZUVFYTHg0RWQyNmRVTnRiUzBVQ29Ya1FEaCsvRGg2OSs0dEhVOWNROUhSMGRpMGFaTlBPN0I4ek9YbDVjak16QlRIS2ozQTVDYU9xS2lvQnVyOEh3NXNKU1VsVXRNVmI2Ym1iVlB6RmRMeHpqdnZxTnlPZ2puL0pFQjc3NzMzTUdYS0ZLeGF0UW9qUm95QVNxVkNiR3lzVkErcnVMZ1l1M2J0a2tyc1RKczJUZktrNWVibTRxdXZ2c0tHRFJ2Z2REcWhWcXVSa0pDQXQ5NTZDN2ZmZmp2YXRXdUgvdjM3SXlZbUJsdTNic1dPSFR0dzRzUUpuRGx6UnJLeFRabzBDUXNYTHNTRER6N29rWVBYdDI5ZnZQTEtLM2oxMVZmUnYzOS83Tml4QTBsSlNaZzhlVEtPSERtQ2JkdTJZYzZjT2FpcHFZRmFyWmFldm1MbGlPWExsemM0MS9Ed2NDZ1VDbnoxMVZkbzBxUUoyclZyaDVpWUdEend3QU9ZTTJjTzVzMmJoN3E2T216WnNnWC8vZTkvTHp0dmpZMmhhOWV1SUlUZzdiZmZSa1pHQnBZdFc5YWdTc1cxZXBzM2JOZ0F1OTBPanVQdzNYZmZJVFEwRklNR0RjTDk5OStQSlV1VzRNa25uOFRldlhzUkZoYUd0TFEwRUVJUUdCaUl0bTNiSWprNUdVVkZSUjc5QURadjNvemh3NGY3dk5sOXJRZkExVTFxOE9EQjJMQmhBL2J0OHl5QW1wU1VoT0xpWXZ6d3d3OElDQWlRQU1KYkZBckZRd3NYTG5UdTNMbnovZjM3OXpld2k3cmY4NElnU0hGdWxGTGljRGdvSVFUeXB1TjZ2VjRDdHRUVVZMejc3cnVJakl5RXpXWkRjWEV4QUtCMTY5Wm8zcnc1RmkxYWhQSGp4K1BZc1dPd1dDeVlPM2V1TkE5ZHUzYUZ5V1RDL3YzN3NYanhZZ0JBMTY1ZDhmbm5uOFBoY09DSEgzNlF4cGVabVluLys3Ly93M3Z2dllkV3JWcGh6Wm8xVUN4ZHV2UVB1em1ycXFwd3p0MmpRTjdNMkdBd2VCU0k5RTZUa3NlcHJWKy9mZ25ETUF2K1NhRDJ4UmRmWU5Tb1VUaDQ4Q0JhdEdpQnVYUG5RcVZTSVRFeEVZbUppZGkzYngvaTQrTXhZY0lFUkVWRklURXhFYTFhdFVKU1VwS3JGcFZTaVJkZWVFSHlMQ29VQ25UdjNoMUJRVUhvMGFNSHpwdzVnL1QwZExScjF3NHFsUXFIRGgxQ1dsb2FoZzRkaW9TRUJNVEV4Q0FqSXdOV3F4VkhqaHhCdDI3ZGNPalFJVXlmUGgwS2hRSzMzWFliY25OemNmVG9VYlJwMHdZVEprd0F3ekJJVDA5SFVGQVFkdTdjQ1l2RmdzV0xGMHU5S3RldFc0Y21UWnBJSGpxNU1BeURYcjE2WWQrK2ZhaW9xRUJhV2hwQ1EwT2xpcktpK2pacjFpeUpxUVFHQm5yVTZZcUxpME9MRmkwYUhRTWhCQ05IamtSMmRqYU9IeitPaVJNbk5tZ3kwckpsUzhUR3h2cThKbEZSVVEwOGQ5dTNiNGZGWWtHM2J0MWdNQmpnZERxUm5wNk85UFIwaElXRllmdjI3WWlLaXNLenp6NHJsZlNKaUloQXQyN2RFQjBkamVqb2FHUm1aa3FlNk9lZWV3NlBQLzU0Z3lqK3h0YURuRHcwYjk0Y0F3WU04TmhQcTlXaVk4ZU8yTE5uRDNRNkhUcDE2b1NBZ0FBb0ZBcDA2OVpOK3Ird3NEQjA3Tmd4NDg0Nzc3Uy85TkpMcDJXTVQwUTRLcXFjY2lhblZDcUo2TlFLQ1FueHFLUkNLVVZrWkNTYU5XdUdFeWRPSUNrcENWbFpXVWhMUzROV3EwVldWaGFxcTZ0eDhPQkJ4TWJHNHQ1Nzc1WFU3ZDY5ZXlNdkx3OWxaV1Y0OXRsbkplOTF0MjdkVUZwYWlweWNIRXlhTkFteHNiSG8ycldyVk9ycThPSERxS3FxUW54OC9CK1hLNnJUNlpDZG5lM0Ixcnl6Q3J6RE91UnhhbUx3clR0T3pTOSs4Y3NORUxQWi9PK1FrSkQvQWJDNUs0TTRBTENRVlFZUmMwdVZTaVYxTTJJcTVwV0tTZk1SRVJGU1htbHljakpTVWxLUWxwWjJ3NUxtL3hCVjFHYXpTUjNhS3lvcVVGdGJLN1hIdTV6NnlmTTg1R2xTRE1NczlpODF2L2pseGtsd2NQQmNuVTVuallpSVdPZG1aaFR1V0RhdjlDdnFJblhFbGFORkNHVVlCZ3pEZ0JBQzhXK2xVZ21WU2dWM2NqMDZkdXo0dTJ2ay9TbkFSaW5GK2ZQblVWaFk2S0YreXF0MGlCNVFlWkZJdDZ1V0VSUGEzYm1mL293Q3Yvamx4a3BBZUhqNFkxVlZWWmE0dUxpdDFKVmM2bTF2Zzd1SGd1QjBPa1hQcUFoeUlJUklkalp4RXdGT285RWdQVDNkWnhPWG14clk1S0FtTmpJV0hRVVdpK1d5bFc4RlFTQTJtMjJZdTBxSFAvZlRMMzc1Y3lRbUppWm1aa0ZCZ2JGRml4WUh2SmdiQlVBRlFSQzlvNUFCR2hHTFY0cWJITlJFWUFzSUNKQ2FLdjhsZ0syd3NCQVhMMTVFV1ZtWlQwZUIzVzV2a0ZVZ0MrdGdUQ1pUTjNjOU5YL3BJYi80NVU4VVFraEtjbkx5UThlUEg5ZDM3dHc1eDgzY1JKV1VpbjBSUk5ZR21ZTkJWRVc5R1p0U3FZUmFyWVphclpiNm12NVJjdDI4b2xWVlZaSmRyYnk4M0tkZHJURVBxRmpPT3pRMDlDVkN5RUQvc3ZLTFgyNEtjR3NhRXhNVDJxbFRwOU5mZi8yMXpRMWVrcWNVUG1xMnVWVlM4Vy81NTVCL0xvYSt5SHRjWEZmR2RqMWFoNW5OWnB3NWMwWmlhMklPcUhlYlBJZkQ0ZUVCRmRYUHUrNjZTd0hnbWZyNmVuODViNy80NWVhUzRabVptVFVwS1NtdlhiaHdRWkF4TjFmNmdmc1A5eXZjV1FuRW5VSUgrZVowT3FYTlhUVUU3ZHExKzBQQVRmbDdhejVSU3BHWGw0Zmk0bUpVVkZRMHNLczFWdExiN1N3Z0FKaGx5NVl0Y0RxZE42VHhpdGhUMGJ2cXhKWEVZckVnTUZBTFFoai9VdmZMUDQyNTNiMTE2OWJxbEpTVXo5MDRKc2pCalJBUnh3VEs4enpoT0k2NmFSc1Z2YVJ5RmRYYlk5cStmZnZyN2t4UUJnVUYvcTRENU9YbG9iYTJCbnE5RG1hekNWYXJCWGE3cEhMS0tuUTRpUmlkTFBlQTF0YldUSFU3QzI2SThMd1RUaWVQYXoxdm5VNkh5TWlJYStvNWFUQVlFUklTN0RPUzNDOSsrU3RKVUZEZ25QejhDNVczM0pLeUZZQTNjNVArVHhBRWdlZDVPSjFPS0JRTTRUaU9LcFZLaWFIWjdUWllyUmFZelNibzlUclUxdGFnb3FMOHVyYnVBd0RsdGR5bzNsSldWb2F5c25KVVY5ZWd2bDRIZzhFSXM3bEJqd0kzdUVtZ1J0eFVsZFRXMXZRTkNBaDRCamV3THB6cmFTSGd0NXkzYUFDOVdqR1pUQWdMQzhYdm1XTy8rT1VtRVdWOGZQekR4NDhmcSt6Y3Vjc3hYOHpOL1VvRVFRRFA4NVRqbkdBWXppdmtRd21WU2cyMVdnT05KZ0JhYlNDQ2dvSVJHaHJhSUNmNGR3MjJzV3FYVjVMUzhqSWNQM3NCT25kR2djRndLYW5kYkxiQWJMV0J2UVJzSWxzanZDQVFLbENtcUtnd0lTZ29hRDZBbEJ0THF4a3B6dVphVlc1NWN1OGZ0YzhmSWZwamU2Qm9sb0dRcUJzVEZrZzVPNncxOVZCR1JFT2pWUU53b21Mckp0aHNnS3BwR3lSbHRQbGIzT20vWlY1dGhUbXdPS01SblJMWHlIL1lVYlhqTUNKdjdRZVZtK2c3aWs2ajdGZytBSUxZUWFNUkhNcGN4N0ZFSURvbDRXcDN1YVYxNjliM3IxeTVzbnphdEdubEFNUkFYZkdWaXA1U251ZmhEdHFWUWtBdWVVY3Q3dEFQdGJzVGxoYkJ3VUVJQ3d1N3BxWXdqdEpjR0l4YXhMWkxhbkJPeW10V2s2Z1ZpejdZZ1AxRjVTQjFaU2l2cVVmWHVGQW9MU1pZTEdhVWxKV2hzTjRNd3RrZ0NFQ0lFc1RwZE1MSmNjVEJPUW5nc3F1OWsydCsrcm40K0NIa1QxaVFsT0thMVVNeFArNWE5dnN0Ky93UlV2TFpjZ1JOL2d4aHZRUC84TitxMi9ZWkRyL3lKYlROV3NCUlZvQm04OTlGbS81SlVBVUV3bkp1Tjg0ZHFFS3p6SFovQzJEN0xmTnFPTEFHaGZwTXhLYU9iSXpuSS8rOXp4RFk5MVpvM0VTZlVXcWcxZ2JnNHRzdlFKMStHMExERzY2bnl1OC9Sc0R0YVFpTDhSeEx3ZnRMb2V6MUdKSTZSRGJZeDN6aVI1UVlPaU0yTmZGYU5KNEI0OGFOSzV3MmJkcGJNdFlteUZnYjRJcHpnMXNscFF6REVJV0NvUTZIQWtxbGF4TXpFZFRxUzIzK2dvT0QwYkZqeDZzbUFwYmptM0gyVkJMaTA1bzFPS2RyQnphbzBUK3REWG8yRFVGaG9ScTc5cFppN3prZHVrY29ZTmJYNFdLZEZZbmhnZUR0UUVWMUhURXJsVkFJVG5DdUNHVkNBTVpTbS8vUXlEZjJ6TXpKVEVYSEc1eGJJRGRpL2pZMWx2bkQ5d0VFVURCdzZxdkEwU0FFUm5oNmpTZ0VFREN3VjVWRDBJUWpNUHpTWXJaWGxZSlhoaUlvS3ZUU0Rxd2RvQVRPdW1vSW1qQUVoSHFtdERpTmRiQVpIUWlNaTRkQzlkdEJtQy9kai8yTFY2TEgybzFvMGl3VUVHeXcxbk5nR0EzaUI0OUFNRk9PL0FLTGova1E0S2lwQnNjcEVKUVFBOCtISFE5YmVRVUVWVEFDWThJOXZxTU9LOHhWdGRERXhFR3QxZHhrOCtyN25BalBnVG9GVUtzQk5nc1FIQmZoT1Q1bkRQcCsreG1JYkk2MHpkcWhlYk4ycVB4b0NZQ0dhNWM2bldqLzNDb1FaY1BQemFjT1FObHFPb2dRRGlpVjBqaW80RVQ4N2ZNUUwvdnMwakE0V01zcndFVEdJU0JRMDJDdDhFYkhmVlVWVllWeFRlTFdBK0I5cWFTQ0lBaUVFT3AwT3NFd0JBNGJKWVF3MUtYQktLRlV1dE9zVkdvRWFOUlFPT3pRS0xVSURRMTEyOXNFMkNyTFFRTWlQYTREQUhDNktuQWtCRVRnUUoyOE5CL3ljMUplcXplaW9xSWVhazZQa3FwSzFOWFZnemhaMk13bVdOUXExT29NSUFvQ2NDNjdtb0pRY0N3TEVFcW9xNlk2c1ZoTS9aVE91dmtjbzBTd2tvQ1FHdzFzbHdEdXR6QzJhOW52dCt3REFPZWZtWWlMdVNvd1NpV0V5b3NJdm4waCtzNGQ3ZnJTZUFycit6K0RwR0V4cUR5bEE4dzZkUGprSnpSTE11TFFmVk5SWjQyRXlsSUdrallSdDc0Nkd5b0dvRTRPaFcvTlI3RktBWHZCR2NUUFhvSHVkN2tLRWhiKzUxR2MzRlNDaU9ZUk1GNm9ROFozR3hFclBkd2RPUG5rVEtnR3pVSzdyQzVYWGhzL3JJZXErd1FrTkhlckU0cEFCTW55UndnVlFIbkJhejZxc1hQd2VMQXhMYUdDQVNaZEtQcXUraENSTVJwUVV6SDJUTGtIOXRDV1VBczYyQk1HSXV0VlYwaysvZTdQc1dmUkp3aHRtd0o3MlVVa1Ava0oyZzFzZnBQTWErUG5CSUdIOGVlVjJIN2dLekNXTXFEMW5SajR4aXdvQVZTdSt5OU9mYmtEK21OMUdIeG1MeUs5c1pyakFIaXVKL2JzejlqOS9FZXduUDRWcmQvZWk3YTNObkdwWk1jMllkL0xYOENTVXdKUzhEaktQOUVpK3JaSDBHVnlQd0JsT0hEM2s5QVZua2ZJN1l2Ui8rbExwZHJ0dVh1d2U5WWlNRTFhZ1MzTVE5eERMNkhiWFgxOXJaV0g5eHpJTHV6WEsrMllTeFdsQWtBRVVTMTF1MGtKejdKdzJ1MVVTUWpzT2gzNDZIZzNhMU9DNk10UTlRdUxXcFVkUWVwZ1hGVCtpSUIzWGtDZ3ZReDV6endITnJRWlVIOFJRVVBub3ZjVDQwQWc0T0pyczNGeVl5SENZalhnV0FkSW0yVDNmSGllMHpVQm05VnFsY0k2YW12cm9LK3Z4dkhDU3NRRmg3cmFjOW5zSUx3QW85RUdvOE5KRkZRQUZTaWhEQWhEd0l4YnNpTDhrVFU3bjZxdjB5ZE1HejhZS2VvL1F4SDliY0QyZS9hN1poRGxuWEJHOXNLb2o1NENNZVhoaDh6eHFKZ3lBZ254U2hldnFEa0ZSZVptakY3ZUVRQUxKNnRFMWVvM1VhWHFoOUhmTDRiQ2FjQ3VJWm5JMnpNTzdRY2tBcndUeXJRc0RINXVDcHpsZTdGK3dCSzBHcmNMRVlIVk9QZmhYbVRzT29XRU9BQk9GandqZjlnSU1KdzZBazE3M1ZXZGcrWENCUVFuOTJ6OGY2a0F3ZWtOYkJIb3MzNDcxQ0V1NnA3M3doU2MrV29YK2o0MkhPWURQNkErYkRER2ZlRXFoTW16ckxSdjRlY2ZvTm5UbjZIVEdOZlRuV2VGSzQ3eHhzMXI0K2NFZ1ljVnlSajc3WnRRQ3dic0hOUUQrWWZ1UUp1ZXNXZ3lmZzZhakIrTEg5cE1kQU9ZMS9pZEhFQTlnVTNUYmpDR2ZqVVlSKzdxQnRCTGF5Mnc2MmdNL1dvMGp0L2ZHNm83MzBMYTBHVFprUkxSNTh1dlVQTCtZN2hRVDJYSHMrTElZM09Rc09CcmRCemNHb0xwUERiM200SDZNWHNSRmRKZ3JUUmhxV0xhc21YL0xsaXc0Qm1CVWdpRVFJRE1ZMG9wQlFVRXlpaWcwQVpRRlp6RVhGdER0YUdCVUNqc0lDd0xjMTAxNG9lUFJHeUxKb2lMamtadFJRVjIvdWRWSkkxOEdjTm5EUUdjT3V3WU9BQ2w0MGFpcWZvUWpuNXlBVU1QYjBWNGtJRGo5dzlHbGZTZzlEeW5hM0xYRlJRVW9Lek1uUU5hWDR1REo4N0FvUXBDc3NJSnM5a09qbVVoY0FLYzFFbkFTNG50RUFRUVFhREVrZHpweWJuOTJ3MnRMem1QVjdjZndhalVFWWhUd1M4K0pMWlBMMWVublpCV2lHa0QxSjhxUjBLOGUzRnFVbkhMNkk2U2FVQ3BCblFuVHlLdTc1TlFBSUF5REUxNnQwZjE2ZFBBQUpmOUpLNm5xNHFwTXFFN29xSXVvajdmam9nT2tZanZHWWtqRDB4RDhwQitpQjg0RFBIdDVmYVdRUFQvNmRRZmZLWU1xamUrZzl6dmRzTm10b090TGtLSXU1eTBOcTBybUZNUFlOY2NCK0o2ZEVYeXlKRUlVcnZucDJjdkhQalhMRGpQamtCVWozNUlIdERsSnBwWFphUG5CQUJSbVpsUU13Q1lNTVIzYjRYNjdHeWc1MDJRY0dQS1JYVzJEWXE5MytEWVFaZHFUcDJsMEJXWUVkWFI1MW9aT0h2MjdMTUxGanp6c1ZzbDViM3NiZFNOMEpUbmVUQXFCZ0xsaWMzT1VxVkNBY0p5Y0FaR1FDQXNqRVlqTkJvTkFtc0tVSCtzQ0h6MGVoeXIvd1VVQU90MG9ENm5CQkdxTTJEU01oQWV4QUJnRU4rM0o2ck9OTGFxcnRaUVdsS0MwdEpTVkZkWG9hNnVGa2RPbkVLSlE0SFdvVXJZN2E1cUhWUVFJSEFjR01KQXpRQzhRQWxBQ2FXVW1mYjhmOFpOSGRybjZaN040ekd5YngrMDV3cXhyZERpUjdCRzZjVmx2dE1HNGZkRmtCRDNsVmVpODBmYjBIdnhkS2k1TXV3ZlB4UjV4MnArODFHRFdqYUhzYUQ0bXZheDdGK0pneCtmUkpkMy9vZVJXN2FnNi8xRDNkb01vRXpzZ2RIN2ZrTEtrRTR3N1ZxRkgyNS9ES3g3djZZUHZJd1JYNjVBZUh3QXppKzVCNGZlMzNIVHpPdmx6c25uWG96aUpsbDBBcUNLUlB6SUxDUm1aU0VwYXlSNmZMb1dUVzhKYkhTdEJBWUd6aW9wS2U0TFZ5VWVEYVZVRFZmNGxvSlNxcUFBUXlsMTl5cmx3UVBnT0JZczY0Q0Q0OEJCZ05WcWhjbGtoc0ZnUUYyZERqcU9BZHVxTFVpWExrakt5a0tYTi8rSGxGN1hGZ3B5VmNCbU1wazhlb0FlUDNVS1o0d1VIYUkwWU8wMjJPME9zS3dEQ2dDVXRST0hLMmFOVUVFZ0JHQ3Fxa3FUUWdQVlR4VFZHbHpUWnplZ3hFSVFIT0NQNzJwTXF2Y2VjQmtyVEhtb09RZEVkcnk4U3o0aXZRT3E5dTRGRHdCT0F5cjI1eUJTVm1HMjZ1QmVsL0czL0ZmVTZWb2hxa1VBQUJhc1JVQlVSaiswbS9jc1V2ckZ3cGd2NytMTkl1Zi81dUQ4OXF0amJRbWp4NEhkdHhwbEJRYjNmV0tGcGRwd3llMFVHUW0yckFST3VYbWpyQXdCcmRJUkhoTUVDQmFVL2JUM2txSGFaQUxDNHBBNGFnSzZ2N1lVeXBKenNMcDNaazBtQk4zU0NTbjNQb3hPRDk0Ry9ibThtMlplTDNkT0FGQzNieDlZd1hXOHlsL3pFTmtoN2VyY2RwSGhzRnloc1ltM0tEVWFzSFgxVi9mUElXMFEyOW9HcXlrY3NkMjZJclpiVjRTM2FBWlZFSFBadGRLMGFkTjd2L2xtVFJNUjNBQkk0QWFBb1FMUHVPeHRUc0lUUUhCeWhHVTVPRGduV040Sm04MFZ0T3NDTnc2MGFTREtDcXRnaXdpSHRuVXFvbHEzaERva0VFR2RPb0JtSDRiZUlnQndvbkx2d2NiUCsyck8xNVhZN2k0WVdWT0tBM21Wc0xGMjdDbTNRV0R0Z0FBa0JDbmhwQ0FxeHRXOUJ0UlZoNDRCbUtpb3VIbVBqdXpkN1lGdk4rTG9rUmpvYTJ1UjBMRW5SaVJwL0FqV2lDaHFEK0xIY1hlQXI3NkkwQWRlY051QkdwZjRPeDlIM0E5MzRvY1JKNkN5bFlHa1BZUlcvUytwbGR6SkxkZzZjU3ZzQldmUWZNbGJjRG1hcXJGcjJGandDYWxRb3g1Rzh5MFlPRlFlaXNHaGN0TTNVTWNPUit2QkhhOThFeVgzUjc5L1Q4SCsyL3Nqb0VVTE9FcUxrZkxTYW5RWTZuSW1hTHFNUkt1V1gyRjl0OTdRZEJtQjBSOHNRdFNnU1ZDL2RSZTJURHdLeGxhUGdPaExEZ0R6d2YvaDU4VmZJcUpOQzlnS3ppQjY1Z0tFdWFmaDdJSTdVSFJSaTVBWU5YUzUxZWo2d2VNM3pid0tsemtuQU5BcXl2SFQ3ZVBBV01yQWRIb010MlJFQWREaDREMzNRRmZ2Z05GUWdRUGpSa09wYllFK2E5K0UyTUs2OWR6NTJQbllPT1F2RFViN2w3OUVxNTRKeUZ2eEtQTDJGTUdhV3cxU2NpOEtYOU1pYmZuL2tOemV0VmZ5UFE5ajF4T1BvT3lURU1UZCtUUXlwZzlHN2RaM2NQanRMV0FyTDhMQi9Zck4rMWVpeVgwTDBYbDhUM1I3ODNYc2ZuQXFTdDVMZ1pLcmhkbVNnQ0UvZll6Z3k2d1ZRa2puVWFORzNRSGd2ektWbEhmVFZJRlNTZ1dua3dvQVZTclZjRHFkNERpT0VKNm5uRUJodDl2ZHdidXV5aDlSUFFlZ2F2dEtiRHorRTNJaUF4QmxEVVBmRGQ4akpyNHZ1ajdRRWo4UEc0N1FXQzE0cW5FMURBUWFuQk9oR21uUWdRQUFJQUJKUkVGVVZMaWlDaW9tdUplV2l1V0k2cURYRzN4MW1YSW51SE9FNXdWQ0tWWFk3YmFKS3BYcWZ5N3JMNGR5Z3dVYWJSQ2l0SCtPY2EyNnVob3N5eUV4OGRxb2JYWjJEbEpUVzBtMTYvK29mUURnN0ZPalllbTZGQjJISllJVGdoRVVGWFRWKzdyQ0VrSVFGTlV3ME5GUlV3a2hJQlRha0VBUDljTldXUWtuVkFpT2o4SDFjT2RRMWdwemVUVlVNZkVJQ0xxS2VCNkJoYW00RXVyWUJHZ0NsVjVmV1dHcHJJVXFJaFlCSVo3SFlnMDFjQmdjQ0V4SWhFSjVrODNyWmM0SkFIaExIV3hteGl2YzQyWVJBZGJ5VWxCTkJJS2lRcTU2clpTVmxjMU5URXphQmNBQ1YybHhPNldVSllSdzdyTGl2SGRKY2ExV2k4REFRQVFGQlNFa0pBVGg0V0dJakl4Q2JHd3M0a0lEMGF4WkszVHVuWW5rcEV0QnVHeGRGWnhNTUFJamduNGJZN05ZTENndExVVlZsYnkybWdrV2k5V2REM29wYmNycGxISkJpU0M0Z25CTFMwdmlWU3JWM0V1UFN4VVNJc1BobDZzVGRVUWMxTmU0VDBCYzQ4R1dtcGg0bjlZSWJYekNkUjAzVVFjaTVGcHFiVEZxaERSUGJ1U3JRSVFrKy81T0hSWURkZGhOT3ErWE9TY0FVQVJGSVRqb1psMTVEQUlUa3E5NXJTUWtKRXo3OU5OUGN1Njc3MzRlQUE5UWliWGhVb0ZLTVplVUtoUUt3cklzZFdVa0tLQlNLV0d4cUtUT1lvR0JXaGhZTzhwS1N4RVZHWW1nSU5lRXFhT3VmUDB1YTJPNzFJVEYxVEpQQkRWWGFXOEhIQTRXSE9lUk1pVjZRZ21sbE1URnhUME9vS3Nmb3E1TkVtZjhIMUp1VGZGUGhIOWUvMUpDQ09sMHh4MTNUSERiMlRTVVF1NUlZRVJja0dVbGdPTTR3bkVzSEE0V2Ryc0ROcHNORm92Vm5TU3ZSMTFkTFNvcks2WFdmVmR0VzJ6c2k4cktTcS95M2lhWXpSYlliRllQcHNheW5GUmpTUkI0S2NIZGFyVU1aUmhtcnY5eVg3dUV0TzdtbndUL3ZQNGxKVEF3OE1IYzNQTkhVMU5iSHdiZ2RERzNTN1kyU0lueVVyb1ZXSmFEUXNGS1NmSTJtd3BtczlxZEpLOURVRkFRUWtOREVSRVJnZmo0K0t2a25ENkU0emd2RmRSVlc4MW1zOEptczd1OW9LeFUybHV1Z2xKS3liMzNUbE5vTkpySC9aZlpMMzc1NTBuTGxpMm5wS1NreUQya0tqZUpZdUFPL3hBRU1RVEVDYWZUU1RpT0E4dUtyTTBPbTgwS3M5a01nOEdJK3ZwNlZGVlZvN1MwRkZkYlA5SW5zTGxDTzZyY0txaEJxck5tczhtWkd1dlJBZHBkSlpOUVNwa1BQdmhnTm9CQi9rdDg3VkpkWFkzUzBqTC9SUGpsTHlzS2hhTC80Y08vakJhQmpWS3FFc0dOVXFxZ2xETHU2dGx5bFZUQ0ZZZkRCVzZYNnJZWjNDcHBGVXBLU240YnNCa01CbmZQZ2hyb2RIcVlUSzYyZVdMTFBIbU5OYWVUSS9JdVV3QklmWDFkcWtLaGVNeC9lZjNpbDMrdVJFUkVUTnV5WlhPU0Y3aEpzVzBBaUNBSU10YkdTYXpOVlpEUzdyYTNXV0F5R2FIVDZWRmJXNFB5OG5JWURJWnJCelo1aHlsWGVXOExyRlpQVURPYXpLZzFtS0EzV1dGak9ibkRnQkU0NjZ4WE51eE1YTEJ1TC9hV21TNGQyR25ITjdzUDRjbXZ0dUhmMjArZ3lrSDlWLzk2aTlPQzJ0UG5YY0drdjFNcVZyK0FnKzl2dSs1RDVDdC94WTdaeXozR2FEaTJIY2VXek1lKzJYTng1cnU5RUg3WEx3alFuOWlQOHgrK2d4TnZyb1RENjd1cXJTdHhjUFpqT1BMS2g3QmFaYi9rck1PKysyZkM1RStHdVY3UzlOWmJiNzNkRFd3ZVFic2lhL04wSkhneU54SGNyRlliekdZTGpFYVhTbHBkWFkyeXF3aFM5Z0MycXFvcVZGWld1aExjM1hGcUxoWFVKck9yMldHdzJNRVFWeUVQd2NrUnB5dG1qVmdORlFObmY3VDVZUzRxRVNOYi9qOTc1eDBmUlozLy8rZk1sdXhtMDNzMmdTUWtoQllnR0NEU0lRS0NvS0FDSXZZR25PVzhzNWV2RFU4NXozTHF6M1lxbGtOUkViRmdwQmNGUktRSENNMlFoUFJlTjl0bmZuL3NKdGtVVWhDVTAzazl6QU96bTVuNXpPZnptZmU4Nit0dDRLSDN2dUZBdldzTGY1VCtIVXR6Yk13ZE1Zamcyanh1WHZIenI5ekFDdHJBZEpRdDF6N2FWSGIwcTJSa1hSbVd5dHF6UHNUakx6MUw4TVV6OFN3aXl2bGlKWDdESnhFM1l4VFpqOTlNNW9iY1gzR0ZLakpmZUlYcXpEMWt2dnB4aTdtbzN2dzJQL3pqYTZMblhvZTJhQ09iN251MXVjSktIVXpNRUMwSDN0K2c3S096QkoxT2QwTm01dUhCSGxyYjZhS2tMYlMybHY2Mnhxb0VsMGxhWGw1QmNYRXhKU1VsWFJkc2hZV3VaaXpWMVZVdFRGQ3IxWUxOMWlqWUpQeTl0WUpXRkJBRkJORlZ4aThBWXVISjdOdVArTVZ5LzZqZWpFbStnTGtKQWl2MkZ3QldOaHd1NGRaSkl4a2FFOEg4UzBkZ1AzYVVnMlpsOGM4V2lyNWV3djZYbHVLb084bmh4WXZadi9oNXFpcWtSaWxGMXB2UHMvMk9POW43OGhJYVRGMTdwY2gxaFJ4YS9BamI3MzJFZ294OFQ2bEg5anN2c2YyT085bjkwcEtXbWsrSGd2Y0l4OWFhaUp2Y3A4WEhnNTk1ZzRSTEp4STFjUmFSS1NHWUNvdC94VXdFTS9LajVhVGVmdzJ0S3pDelAxeEs3TUtINlRGcUdJTVdQWUw5dS85UzVtSFZSTTIrbk9ML3ZvZEZlZU9lTmZUdTNmdEtXZ1lSTkI3bWFLUFcxbFJMNmhsSXNObXNXSzB0VGRMcTZpckt5c29vTEN6cW1tREx5M01WdUxlT2dycE1VRmRhaDBlVDQrYUFnU3VDSzFvczVybkh5NnVuSjBTRTRHeW81MVNkbGNTSUVJNlhWZ0ZPSEpLTVN1VytuS2hDSmRkenN0S3VyUHhaZ2svL1lZU05HWUtvQ1NJNExZMnd0TEhvOWE3NVB2SDBBbzd1cVNIK3RsdlI1RzlrdzkwdmRrbGJMbHJ4R2VvaDA0aWRFTWRQMTh5anZNSUJPTWk0ZXc2L1pEcEpXREFmSC9NZU52NzEzMTA2WDkzUFAyQlBISTdmYWJJcmk1Y3RJanUzRi8wdUgzWU9ac2hDOWRFOC9Qc25Vbi95R0RhdlJBSWl5cW5KYW5hWGlCRXBCSWw3S2M2eUtSdnFMRUd0VmwrY241ODNtcWJjdG1aZlcyTkRKemVkZUl0QWdrdTQyZDM1YlcyanBLV2xKZVRsNVhjczJHdzJHOFhGcmxyUTZ1cHF0d25hNEJFRlBVMTZoOU1weUxJczN2SFFZeXFOUnZNWHM4Mkd0MWJGcDJ2V2NzMktuOUZyMU5UYUhZQTNJK0tEV1BGakJtWDFEYXpkdW85Y1djQnNkU2dyZjViZzIzc1F4bUZKaUxvQUlsSlRNYWFtb3ZNR0tDTjc1UzZTSG4yY2lPUmtCaTU2Rk9lNjVWVFVkMzVPLzZsWDAzZktLS0ttMzBiOE1DYzVHektRUzNkeWJLT1RvWXZ1SWlneGtmaTc3MFhjc1lLcWhzN1BWM3Z5Sklib21IYS9hOWkvZ20ydjdTTnQrUkw4Zk04Rmxib0pteGxVbW1LMlRCeExabm91YWowNDZqek5CaDk4WW5UVVpSVXJHK29zSWpJeWNuWktTb3JPcmJXMUNTUTBtcVh0cFgrNHRMYkdLR21EMnlTdHByeThuT0xpSW15MjlsOUNhcGNKV3RpaUg2aXIvck94WktwWlcydE14SFU2bmE0MmRwSWtDSUlndlBMMFkvT0JWTDFXUzRQSnlkWFRMK0VTcDVxOU96ZmpwM0hWaE40Mll3cld0VHU1ZldrV0EvdjBaWHpRQ2J3VmRvOXpEMGMxRGRYK2VJZTUxU1R2VVBTKzFWZ3FnVTc2MUJvOGtpSDF4a2pLSzh0eGxOWml0UlN5NjlZYm05UjlyNlFrc0FLZFVQL0xPT0EwTk9rVk83WVJjUEZzQWtQUEZWZThBYTBlblBZSUp2NjBEMDFJRUQ4c0JyV3Z2dTJmU2s1bDM1eEZpS0k0Yk0yYTFaTkRROE8rQmV6dUh3ZHVXbkZjeWJ1Q3V5OXBrNXp4MU5xMFdsY2dRYWR6QlJLcXFocE4wa0ppMnluZlU1dk41aVk2SWxjdHFHZVQ0NWI1YWc2SFEzQUxOY0h1Y0FtMWpBUDcvVlFxMVh5QVBxR0IvSEswSE5Gck1LSEE4ZUp5RW51NE9oSnB2UU80NS9LTDNTNmFRaVpzOCtYK1VJVmw4dXp1SUFGQmNyYWtIRk1INEIxUVEwT3BEZUswWUNyRFhCZUFMcWdMT282SHI4dGNXSVIrc0JGMW1BRXZRenlqUHY0VVF6ZmZTMzZSY1pnM3RKK0hGRFR4V3BKc29lMGJrU1g1NEIySXp2ZlhGRmZxQ09qZmc1ck00K2d1R0FhbURLcEx3eGdRNzl2Q1hHMG9NQkVTRjludUdKeGFmd3lCdnNvK094UFBaM0R3N0VjZWVmajdaNTlkYkFQc3NpdzczQXdnVHJmVzFxSjFuOXN5bEp1anBEWjNsTFRSSksyaG9zSVZTQWdQRDBldmIvbUNFcHZvaUtvYTIrYzFlRFE4dGpiV2d1SndOUHJXSE5oc0RnQUJXUmIyMURodVhiYi9WSCtBMkw1OTZWZWJ3L1BiVDdCbC8xNCt6WktabGV3cUhpNDZsY3RIZTA2dzZlQXgvcjUwRTRNdUhFcWNJdGZPc2xJU2c2LzZCSm52ZlVIZXVnMDBtQUJDaWIxaUdJZWUrUWZGR2ZzNStNUmlWSlBuRU96VCtlbHExbjdNMFRYYktmajJIYkwyYU9nNXNUOUNXQ3A5eHRyNDhmN25LZDZmUWRIbU5leCs0WjB1cFpqNGpSaUprTGtIVXpzZWlNcE5Lem0rZW5lN3grMjVkZ3piWDE3VjVXa28rdllqam55K0FhZTluS3dQUGlSNyt5RUFlbDEzUFRsdlBFUHU5enM1OFBpemFLWmNTNmhIRWIxY2NZQnkweUFpK3JUVkdnL2NNWVh2bjEydTdMRXpoQ0FJZmUrNzc3NUp0SzFHOEV6OWFKRzA2M0EwK3ZXYlRWS0x4VlZMV2xkWDU4NXRLMjgza0tDYU8vY3FqOXkxS21wcmE5cHBlbXpGWm5PRllwME9SeE43eHlQdmZSYWs5dlo1M1NwcWc0WkhCNEhLaTdSK1VSdzRsa1ZHcFpNN0x4M0hNSGVmUTZmTndwYk1iUGFYMURJd2FUQVBqSW5uOStBTk5abE1PSjBTZm41KzNUcXV0TFNNNE9EZ2J2VUlQWk5qem5SOHJ0M2pqWEhTaFppT0hxUWh2d2pEd0F2UmV3c0VqNW1NcXV3d2VhdTNJTWFPWlBpamYwSGJoWDRUd2VNbVl6dXdscExNV2dZKy9VL0NZL3dBa2ZBcE0xQ1ZIaVF2ZlFPMWhiVUVqeHhMVUZ4azU1Ukgra2pzR1V1cDhSNURXSytXTEMrU3RRRjFXQ3hCY2ExcUFhVmlEdi96Yll4M1BFWlliTmVZWWFwKzJrUkRyWmF3NFFNUkdreUlmajBKN20xRUYzY0JJVkYyVHFXdlJZZ2V6ZkJIRnFEVk5JKzY2SlBYYU9nMW5jUXg3ZmM5OVJzd2pPRDRTRVZLbmFuT3JOTVpOUnJOK2syYk5sdHgxNDgyVW9rTGd0RFlXZDZ6azV3Z2lnS2lxSEwvaU80T1Z5cDNseXMxV3EwV25jNkxvS0NnRnZSZ3dqZmZmTzNSeTZCUnVOVzZtVHdhazNQTldDeU5YR3NPd2VsMGlySXNpemFiOVY2VlN2WHMvOUxrbnU5OGJHYzZ2djhWMkxJMnNQSHBINW44d2VOZGVySFpNcjVnMVNNL00rUGI1emluSGxsSEJWdXUrQXVEUHZ5VW9FQlJrVUxuQ05YVjFmOEtEQXhhaVl1enpTUUlRZ011RDYxTkVBU0hJQWlTU3FXU0dqbmJkRG92V2FmVDQrMnR4MkF3NE9Qamk1K2ZIMEZCZ1lTR2hoRVZaU1F1TG83Ky9mc1RIeC9mYklwNkJnemNaSkdOR2hwMnU4T3RFam9GZDNwSFUrblVuajI3ZlZVcTFjM0tVaW5vRHJUeEU1bmFSYUVHb0UyYXdlVmZMZWFjaDVuVXdZei9acmtpMU00eC9QMzlyN3ovL3Z0OEc4MVJkNFJVUmF0U0szZHVHdzZISzFKcXR6dXcyZXdlVVZKWGJsdGpJS0cwdEpTR2h1YlF2T2dxY3E5dlpYcTJ6RmxyajJ0dDRNQ0JOd0lLdVpXQ2N3dFJqYWhXaE0wZnlOY1cvK0NERDA1d0M3WjJmVzJ0T2R2YTVyWlpXd1FTWEVYeXJrQkMwN1pwV2VUZW1LL1dOaExxWnU0UUFPRzY2NjVWcVZTcUc1UmxVcUJBUVhjUkZCUTBvMWV2WHRwMnREYXhVV3Z6cUVob3lwMXREaVI0a2xJMkZzbTcwajhzRm90THNMbTBOVmVSZXp0Q3paT1NxRWxiZS9mZGQ2OERCaXBMZFBiaEl0VlRVZ29VL0tHMXRnSGJ0bTBkMHhXdHJYM05yVkc0TlJiSnQwei9BQkJicG5mWVd2alduRTZuTzIrdG1Sa1hFTlZxOVhYSzhweEx3ZWFuVElTQ1B6VEN3OE9udVFWYW85YW1waFVaWldNMVFxTU1hdWxyczUwMi9jUGhjS0J1ckFkdDFOWWE4OVdhS3d5YWZHdTRLYituQXFPcmEydXBzWXRFQmZyUXJndkVLWU9xZFFLQWs2S3FPZ3pldnZoNXFaVFZQUTJLMTN4S1ZiRVZNYVFYZmFhUDZkSXh0dndqbEJTSzlCamVwOHZYc1JjZklXdk56OGhBK01RckNJbytWNXFpaE9Sb1cwMHFxTlZucFN0V2l5dFY1Wkt6dDR4ZUYzV0RCcnd1bjJOZmJFUUNBbE12SnFKZjEraW5LN2F2UnRWN0hBRmgzbDIrVk1YV2RFcXp5aEYwNGNUUG5jTFpTdVdVR2lvbzNMSU5xMG5FZU9tbDZIVy8zWDQxbmRoTnJUV1V5S1NZTGg4aml1S0k0OGVQSmJzcHhCdUw0KzF1cmMzcE5rZWJORGFuMDRuRFpzRlVYNDlUcTRYUVNMeTh2RnJWa1RacWJTV0lybnJRNWdvREQyMnRUY0FBRUxScTI5VjMvZnNEcHIzMUxYLy82RXRHdjdTQ0hhV045WFpXbnZ2b0MwWSs5UjhTRmkzSHMwVFZZYXBnL2lzZnNlQ3p6Vno2NGxJK1BGS21TTERUUU9WbFFGTnpoRDJ2Zk43bFl4cjJmY3UrRDlaMnp5UVF0V2dNQm9vL2VaSEN6S3B6ZGorbjNubVlsU2xEV1ptU3pDZkdhRDRmTXBTVktVUForTVJIditxOCtSOHQ1c2lHSXkxZm5RVzcrUG1GLzNidlJLSWFqY0ZBNWRvUHlmN3hlSmNQeTM3ak1Zb09WWGZ2VWw1NnRHSTUrNTk2bmJOWGF1OWc5MDJYOE11bVE1aEx5NUhPSVR2SndZZHVvcml3NVFVcU55MGo4OHRkM1Q1WGJHenNSRTl6dEZXRVZHZ2RTSEE2blRobEdXdDFPZldWZFUwVkNXYXpwVWxyYzlXUmxpRTJVaEo1Q2pWM2hZRm4wQUJabG9YcTZxcUJna283ZThHc21XeC9ZQjRyNzc2T0IvcDdzV2pEd2NaSGtza2pMMlRWZ290by9lNWY5ZjJQMVBVY3pEY0xMMmZsTlVONSthdnRWQ2owTU8waWRNS2w5SnFjZW5ydHJLS0UybE9GT051WlAyZERIWFg1cGJTaDhaUnNtRTdsWURGWm1qNVNoOFVUUDNzV2dWRytwMzFnR3ZKUFVWOVN4YStoQmUxNTIzUE1PckNmV1FkVzRlY2R5S2kxKzVsMVlEOFRuN3EyZVhpU1M3TXo1ZWRncWJOMHJxRTRISmlPSGFEbVZEbVN3MEdiOXJpU2picWNmT3kyTG13eVF3UzlaczhpTlBFMHJlVWNOa3o1cHpCVnRNL2NhaTB0eEZ6VDBNNWExRkNiazk5aW5RS0hweEUvNHlKT0YraVZMQ1pxYzNLd05saTZPTHNTa2lPZnNuMGlTWXNlcFA5ZmJzRGdvVUE2VFJYVW5jcHZkNi9JQUE0TGRUazVYWm9ueWVHZ2V1Y1dURFUyMTV5M3UvZUsyeks5dUs5aGJXaFpjcUxSYUM3YnVIRkREdytOcmNrY2JmSzF1VnNPdUlRYWd1anREUm9WRG1kakxha0h0VkZkRGFVNTJSUms1NkgyVE85b0xwdHk0blJLU0ZLenhnYUlCb1BoS2hCSjh1amczalBJSDB0SkkvMlFtaUc5b3FBbXA4MFU3c2dxWk1KRll3RUlqdWxGUDhkV2RwWTV1U1JjTVVtN1k5THR2R29NWmVaSXZIMGxxck1iU0gzL0U2TDZ1SnJ1Mmc2dlpzMnN6V2lvd3F3Znh1UlBua2V2QmZPeExXeWUveUFxWXlMVzdPTkUzUDR2aGw4L3JzTXJ5WFc1YkprOUQ0dHZMN1J5Slphb1NVeDdwYmsvaiszWUpyWXVXazd5RzI4UjdQOHI3K3JJbDN5eTRITVNldFZSVmlSaHIzSXdldjFhTEovZXcvSFNrVnowMkN6QXdwYVIvWWo5T0pzWXpRN1cvZTFGTENjT1lqYzhSZlYzQVJoR3ptSE1QWFBjNW1nV1c2NmJpNjJ1bnVwU1B5YXZYMEhBR1ZyWjloUHJXSFhOMC9qMjdvVlVmaElwYmpvWHZmRWdXcmRneW43MVhuTFZLaXpabVVUZS9SS3AxNDhISkU2OTh3aTdsL3lFZjN3UXRmbDJSbjY0alBEWWpnZFJ2Zmw5TmovNEx2NzlFN0FVWkJIejRGSUdUSXpyOEppODkvN0I0VzkyVWx0VHhFL3o1cUpXQnpEcy9YY0o5b1dDOXg3aHB6ZTJFUkFYU0hXdWpaR2ZmVXBrbkd1eENwZmN6NEdkRW1MMkxwd2FiNnoreWN6ODVKK25kUTJVci9zUHU5OWVRMTIybVlwN3J1YUVRVVhQK1UvUmYvSUFBTXo3dm1iOXRjdVJLbjVCNm5NTlU5KytGeFZRdldNNVA5ejlQUG8rZlRFZCs0WEVmN3piZEF6QThPR3BZNEZUYnEzTkJySU5CQld5N0pSbFdaUkFscHhPV1JCRTFHcVg1aVpMTW9Ma2JKSCswVkJ5Z3IwcnZpUXkya2lKMUlDNnRXK3QwVkhuMHRhYVRkQnZ2LzFXSjRyaVZTMVgzY1I3TzdPWU0rbXlUcmFIbGJJNkJ5UDhSRjc0YkEzSm8wY1I3Z05sdFdZSTkxSGtWZGNOR1lhOHV3YXRyK3NCS2ZyZ0VmYS9zNUtvRjI1eHpYSzFscWxydjhTZ3M3SDdxbEZrZnIyZmxObUo3UDdyMzRoKzdETUdUZXlEVkhlTTc4YmVTc1hsV3dudTREbXIzNTVPVmZBVXJ2ajRNZGZidUJVOWpMT3VsSXI5aDdDZEpYdEtQckdId0JjMmt6cmNDQTRMVHFEd2RDWjA5QWltckZqQjhTZm1VaFgzZDFKdmJLbmRTcVVtQnE3OW1tQi9rZDFYRFNmMyt5d0Nwc2VmbVZzZ2FnU1gvcmdWalJyQXdyWXBROG5kUFovZXcxMHZFKzNnUzVuNDFEd2NoVnY1YXNKakpNN2FnaUY3TlR2L2M0eUxOMi9DejFlay9JdG4rT241OTVuK2VzZXRRTEtYdmt2Y294K1FQS00zSU9Ic2doYlY0K2JINlhIektWWWxYTTNJRlNzSWFzeGtyc3ZnNTMrdVovUzJyWVNINmNoLy9XNTJQZmMrbDczVi9IS3Eybm1VU3phdEl5QlloOU5pNmREZkdUSjVBVk1tTDJEcmhEaWlYdjJjWHIxYnBreWJIVVl1LytZNTFKWWMwZ2ZOcEt6aVhpSjhDOWw1K3o5SVdycVJYa21oMlBPMzhQWE1wNGlidUJ3M1ZTQStQb1pwOCtiTlc3RnMyVEtyeXh4Rkl5RGJaUkFGd2ZXZjRDS3p4ZWwweWs2blU1QWxXUmFjVG5jdHFic0JqQ0dBNk5temlJd01wMmZQQ05TTlVWQ1hHZXIwU1BGbzZWK2JPSEhpYktDNXo3eGs1L1V2VnVOSVNHVkIvK0N1ZW5VdzZEUm9SRUdSVVdlSW11MHJ5Znc0SFZORkhZN3FFcVMremU4YVE4cG9ERG9BTFNHamgzSDh3Q0dZQXFXSHpLaTJmczdlSFNBaklUdnlxY3F1SjNqUTZWOHErcVFVeEl6YjJISzNsZkRVRkhwT200YkJvekpNUDNRdWN3N1BQWHMzRm5NaHZZYTdUVUcxN2xmVkVhdmlrd2oyZHoxNGh1aEk2cXFyei9oY2dtamh4UE9MeWQ5NUFMdFZ3cHhUUzBCbERlQVNiT0VqUnJtR2JCeEdjUEJKS3JNc21IZHZBMi9JZXZsWlZ3djB5aFBVSFBUQzZYWWVuUTVoSTBieTR6TjM0RGh5Q2NHcFkrazU0WUl6SHJmbFdBYm1xR0dFaGJtaUNCRmp4MUM3TkwzRkdBSW16aVRBWGN1dDB2MjZhRU5neWhCWGRZZ3VBa05JRFpaYWNKYnZvcnpHaTZBdi8wUFZsNEJrUnF6TXBLWUs5TTBpSS9yNTUvK1Z1bXpac3MyTjVxanNNa2NkSUR0bEdjbmxiNU5rU1hLMjB0ZzhvcVJhTThVL2JhR2lwcDRDalJmcVJoUFU2V3lkNHRHY2tBdUlhclZxbHNmN21rOVhyV2FyR01mN1UvdlRlVjY0RjZHK2FzcHFuZnhseGtWQUEvK3BoMUEvdlNLcE9yWThXN29xVHE1ank2UExHZmZGZndtTERhYnE2eGZaOHJXdEl3WFBkUkpORUJIVHB1TGpYcWdlVTZmakcrL2Q0YlhVMGFsY3VtMDlSVnUzVXZqTlV0TGZXY3ZNelcraFBVZTNLdW9OcDlsSFV0Ty9jaGQ1U1FWUEIxWTNpaGJhZTkxbXYvb1ErYVVwakYyMkNKMjNtdDNYRFVPVzVOT2Z3WDA5cjVqQlJFMmQ2djU4S2oxdkRtZ3hsUGF1RlhYYjgxeVN0cCtpclQ5eDdMSHJLYnp1VlVZdFNEdG4yMHZyYy9hZVAwRThUZEdiZnpSUlU2YzJsY1QxbURhN2pWc2dMQ3dzRGRqV3l0Zm1tYkFydTFJL1hKUkdzb3dnT0oyeVMyYTUzR2hWbVlkQk5qSmdTaHJSUFl5SXpjbTR6dmJTTzVCbFdhaXFxa3dTQk9IaVJuOVordnIxZkZZWHdqdFhwalNwbEoxdG1aR0pSallmeXdhZ0xQY2t4OVNScElZcS9yWFR6bGh3Q09yeVhFd2Vjc3RlVklRYzJaZmcyR0RBUWQ2NmxvMUhUSHUyVVc4QnNGRytiUmVoQXdlQmIxL0MrcGhwcUFzZ2JHZ0tZVU5UQ0lpTFFXTm9Yamh0U0FoMUJTMGJxRGpxNnNBL25PanBzeGoyMHBPbzg0N2k2ZnUxWlcxbCsxMFBVMWwzN3ViQUt5Q0FCamY5czdQNEFKVkZMY21SMUhvRGxzcnlzL2VnaHdSaE90V1NicnFob0lDQUljUFFlYXR4Vmh5aWFHZExQcm1TSFZ0ZDgxVzRpNHFxM2dUSDZRZ1pQaHByMWlIMC9ZWTB6Ym1mTWFoWm1CbUMwRHFLTVZXMWxOUzJ1am9NOGNrazNMaVE1UG1YVVgzMHhCbmZpNjdQSUhRRnV5Z3RkUVVoaW4vWWlsL3k0Ri9OcUtQMjFXTXI3MW9FWFJVM2pCQnlzUnBpbStjaExncE5xN2VqV3ExTzI3QmhmWTkyQkp1cTBXSnNsRWVTSkNFTDRMRFpXblMyc3BnYUVQejljVGl0MUpkbm8yNFVhbTJyREpxQ0JvS1BqOC9semNaMENZczNaVkdyOHlMdFdWZW9YUnZhaSswTEp3RHc1TnNma0Y1c284N21ZTWFpSlNRTkhzYUhNd1l4ZmN3b3ZudG5GWmU5ZVpLYXFscitldmswZ3BVU3dOTUx0ckFSREo0Wnd1b0xSNkEycG5EeHQ2K2hIellWSTIremV1WmN0R0lkdXFDUWxvSWdTT0tIV1planBncUw3MFFtenhnRXdOQlhYK2I3K2RlUzkxWUNhbnM1OVNZams5WXZhU0xRN1hYTFBXeTYrVDYrZkY5SDNOOWZKUG5Lb2RUditJaU4vL2NKZ1gzak1HZG5Fbkw3US9oN3ZKU2Q1U2ZKL3V3clloNWJUTkE1U244TG1YZ0Zxbi9PSVgzbVQ2ajlJdEdGdE5SempKZGZ6OUZiSCtLYjFhL2dOLzU2eGo5NjdhKzZYdlRjQlp5WU41K1ZJOThrNHBxSEdIbkhOR0t1dVpYMUN4WlF0M0VnbGhyUUo3UmtYYkVmV00yYTJXdXdaR2NTKzlqL0k4QWJHRENWMUp1MnMzN0NPUHo3eFdJK2xZM2ZwUTh5OXA1TDNVOXlUd2JmZHhGYjAwYWc4b3RoVFBvS2duM2d5RU56eUQycHh6ZFVTOVh4VWxMZS90dVozNHp2SUZJZnVwanQweWZqSHg5TWRiYU5rWjhzK3RWcmtuRFRRcmJmUFpOZi9BM0UzUDBTQTZjbmRmQ21NSkw2MmtOc3ZXa0tKK0w3SWxlVllnbEtaZnBIaTlvSTJHSERocVVDdVo3Q1RaWmx1K0NLa0VxeUlMak5VUW1WbHc3SlZFOVZ0Z2xiWURqYVdDOTA0VVpxTTM4aXEvd2tKWUlPWWZEZ3dlNytCbVlzRm90Z3RWcXgyKzJDdytFUTNDRlhsZFBwMkFQMFB4dTJWVWxWUFhxREFUL3Q3Nk90bmUrMFJaM0RnU2svSDFWZ0JEcERXNytJczZHT2hsb0xQaEdocmN3ZGlZYkNmR1N2UUF6QlhaTkVrcTBCVTNFNW1zQXdkTDY2MzJXOVpKdUordEk2dktNaitMMzBlMmRESFEybE5YajNqRWJWenN2WVdsYU1wUE5ENzl2U3ZKY3NKa3lsRlhpRlJhRFZkVzBQMkdyS3NOWlk4VFpHb3pvTGxDWk9VdzBORlNhOG80M3RqdjIzY2FuWU1PVVhJL3FIb1BkdlA1bFpsdVdqb3FpNkE2Z0g2bkJSR3BrQmk0QmdGMFRCS1FpQ3BGYXJaWTFHSTN0NWVhSFQ2V1M5WG8rM3Q3ZUwwc2hiajQ5V1QxalBIaTZOcmRrRWJkYlljQ2ZJbVV6MWFXZEhxTGtjSHVHQlNyblFyelFHTUVUSG5sNzk5L2JGMTl1MzNibjNOdmJzM21wcHZmSHQyZk4zdlZ0QmE4QTMydkM3amtIbDdZdHZCNmthWHFIdFZ5cUlPZ08rUGJzM2RxMS9LRnIvc3poMmd6KytCdi9mZDh1S1dneWQ3Q05CRVBvZVBKalJkK0RBUWZ2Ym1LUElUbVFrUVJBRVNYSnBiWTJCQk04NlVvY2tJMm5WMkd3V3hNYkdMTTI1YTgzK05VRHc4dks2VEJFbUNoUW9PTmVJajQ4ZjBjb1ViYzM0UVhPWmxZU243UElza0xkYWJZZ2V2alhCN1ZzVFBCeDJvaUFJMDVVcFY2QkF3Ym1HWHE5UG83bjZvTjBXZmE0ZnFaSDVRMmloc1RWMXRySTFhbXlTUitEQXBha0JndG5jTUJXSVVxWmNnUUlGdndHTVI0OGVHVWpMOHFwR3hvL0cxRE5Ca2p5TDQ1czF0MmIyanliQjFvWnp6ZVhlMEdxbktuUDkyNkswdEpUOC9BSmxJaFQ4S1JFVEV6UE1VMk56bTZPcVZ1Wm9DNjQyTjRWNEM2MU5kQWNNbWxTN3hnUGRacWdpMkJRb1VQQ2JRYWZUalcrbHJiVm5qcmFRV2EwRENYYTdIZEhUREczVTFBQ2hvY0Uwb1gwejFNbk9qTU1zV3JtQmU1ZHY0djE5dVI3MEt6SlplWGw4dW0wdnIyNDhTSzNIVVE1ckE5c1BIZWV0alR0Wm5sbWlyT0J2aUVQM1hjR0pIY1hud1Vna2ZyNTZQQVduL2poemF5dk5wYnF3NGd5UHJtUGJaWmRTMnFYRGJWUmxITUorRmhoeGFqY3RZY01UUzgvcVBNZ05GWlFleVczeitjL1hqQ1V2cDN2bWFFYkdnVDRlV2xzTGphM3hweVZYbTlRbVFpcTJNa1B4TUVNbnRyODM2L2hxYnlGOVltUEV6UktVQUFBZ0FFbEVRVlM0dEg4VW03ZHM0UEVmR2tkdTVyMzFlemhTWE1KYlAyUzJFR3lsZVRtOHN6ZWIvYitjNUl0amltRDdMV0V0SzhCdXRwMEhJeEdKbnJjUXY4QS9rT3RnMVN2c1diTCtqQVc5cFNBUFIxZTZUVlBPanF0dnBOcDhGbDR2cGtvYXlzNHUvNTZVK3dNYi92cGltODh0ZVRuWTdkMDdWNjlldlpJOU5iYlRtS040bXFQTldwdExzS21ibzZHTlRCNHVNMVFVeGZZRm14akE0aHNuTmYwYTJGREdYL2Jud3RoWXdKdG5icDRKTlRsOGMzQm5TekdjMEo4UEV2cXplc05hUHFoVGhNMjVRUFhPZEk0dlg0OGREUUVqcDlIL3l2Rk5TYnEyNHFQc2UreDF6RlpmRXY5Mk55RkdYOEJDM3JJUEtkcDdGTHRkVGZDa1dmU1pub29BVlArY1RtV2xub1k5RzZpcEZJbTc2WGFNU2U0aWRVY2QyZSsvUStIK2szakZENkgvd3B2dzl1NDQrOU4wNkFkT3JOb09vaGJ2MGEwRWI4NStNcGQ4Z3FuYWlpRitDSDBYM3RBNUEreHB4bEN6ZHcxRkJmNzB2WFFFQUpXYlYxSWxKUkovVVJKbDZ6NmlRVzJrY25NNkZtY3dDZlB2SURUVzMvMndsM0w4blhlb3lDckJrRFNPL3JkY2lWYmRxSTJVY2VLOTl5ZzdVb0JYejBRU2JyNlZBUDlxTWw5K240bzlHZFRWbGJGL2NUWkNaREtEYjNSNWJ4d1ZXUng5OTBPcVQ5VVNNUFl5K2wyVjVrNHd0cEgzMFZ1YzJubVNnTFRKZEVVQnEveCtCYWQrM0kvWlZNT0pGeFpUb0JXSm5MT1E4SGgvMS9tV3ZVdmVqcU9valFra3pwL2ZWTmplc1FKWXpiR1huNlU4dTRySVdUZlRhMHkvSnMwdy8vUDN5UHZoRUtxSVJCSVhkbjYrM0E5ZW92TGdBZVRpWFBZdFhveWdDcVQzM3hZMmtTYVlUK3hrOTVKUHNYdEZNK0NldS9Gemw3Qlk4ak00OXM3SDFGVTdDSjE2TllsVGhpSUEzdDdlSTREUFdwdWlqZVlvc2lRNUpVbkE2VVFscW1WSkl3bE91MDAyMWRSZ2t5UXNYdDZJalZMUG5aU0xMQ05VVmxiMHA0dk5XbzZVbHBOb0RGR2t5dThNdVdRbkcrWS9UK2pNYStsejNSVUk1cG9XUklBbmwzOUY2Q1d6Q2RCbHMvWEIxNXBNb1pwQ08xR3pyNlAzdkdrVXZYSTdCOWNjQTZCbVZ6bzcvdlk0bXBScHhFN293WTZycjZXaVJnSWNaTnc5aDE4eW5TUXNtSStQZVE4Yi8vcnZUaDlRVFhnc1lXbWpLZm44VlZxU2JUU3c4NmJyY2ZhNW1IN3piOFEvUU1MYTZSdis5R1B3Nnp1SXdsZnY0OFR1UW14Wlcvbmg0ZjhRTUNqUnBmT3MvNHdkRDd4STRPUzVHQk1kYkxuMlRzd09seFd5ODVvWmxKbU1KTjUySXh6OWpCK2VXOTVrb2Z3MDd6SUtDbjFKdUcwKzRiMjhxTTJ0QkxVdndlUFM4RThNUXh2ZGw3QzBOTUtISnJwdktaOHRNK2ZRRUpCQ245dXVvdjdiWjluOXdYWUFTajU5bGwyZkhpTHVwaHNSOXEya3JMRHp5bjVkM0VEQzBsSlJhNzBJSEpOR1dOcDRmSUpjbklpRlN4NWoxNmNaeE41ME13R2FrNnlmZDErWG1IbnIxbjFLUStTRnhNOGN5YUU3cnlMM21JdEVNK3U1djdCL1ZUYXhOODBuTkt5VXpkYzkxT241L0llT0lXUllFdmhHRUo2V1J0aTRDOTAwVHk2dE5HZEZPc1paMTZBdDNjSlB6eTl6T2JSSzk3TnU1aTJJZ3liUlo5NWxGTDU4QjRjM1pRR3VaaStyVjM4WDJaNmZEVmtXWkFSQkVBUVFhSEtqT2UxV25LalJCSWVpRGRDaGJsM3dqcXMyZEh4WEhxWlQyWWQ1ODdDVGQrN3NwMGlXMzl0NzFWQ0p3NkZIYjR3bUpENkNrT1NXMzhkZGR5ZlJJL29qUjExTnh1VWZZQU8waERMZ3J6ZFJzWDgvNW1vYi9vUGlLTjkxRUthNCtpWUVYSHdOZmFhTUFrWVJ0K0k5Y2pjZEkyaFVKY2MyT3BtNDZ5NThOQkIwOTcxa3BWNUxWY085QkhkQS9hOE43WWt4MU1ndmJUUTdLNVpxSzRGaFlRUU1TQ0o0WUhMblFyeDBad2RqTURMeXRhZFpjOHR0NUJocTZmdmlSd1NITnBjelJjNWJTT3lZWVRCbU1Ma2ZEaUIvYnhVeDZ2WGtsdmRuNXIxWG93TDg3NzJEcjJlOGp1WFJPWWdacThrcFR1REtyMjUzTVpza045ZEdocWVtWWo4VVFaazJIbU5xTXlkYzFmcmwxQmluTWY2R2k1R0JRWGZkeUtwRlh6SDh4bEhrcmxoSjc3OStqZkdDT0l6OTcrZkVoMWQyZXIvZVBmdmczZE1YalVaSFNHb3FvWVptb1pHOTRpdjZQdlE5eGdzaUlQa0pjcFplUU1HSmw0anIzWEVKbCthQ1MwbStLZzBCNkRmek0zTFRmeUFtZmpCSGx1d2llZE9QaElhb2tmdmZUKzdTRVJSbE9ZaUpQMzE5VjBEU01IeFYrUWlHdkJiejBJamVDLytPY1dnZ2dmWlpySHJPVlY5ZThQbjdhTWJmU3Y5cG81R0FnUXV1WU1meWRKTFNYSngxS1NrcC9ZRThUM05VRUlTbVpGMEVRVUFVWlVIRXBaaHB2TkQ1YW5BNnJOZ0ZMNWRnYSt6dTN2aWpVcW5HZGpiWkZVVTVMUGo4QUl0dW1FbWlRYWxtLzcyaGlwdkV5SHN5T0hEbkhING90R0s4NXUrTWVHQnVVMzJsVjZDcjVGM1FhUkVjRGlUQVdaSEoraGszNFQxeUtnRVIvalFVMXlQNU5GTlNlMGVFTnYyL1BqU002c29TSEtYbFdDMkY3THIxeGlZYUhxK2tKTEFDM21jeThrQ0d2Zm9NKzE5OW1DLytua2ZBaU1zWThjcVQrSGF3cHh5bFJSMk9RZGRuUERHSml6aGVNSmp4bzFvMkdOR0hOZEovYS9FMit0TlFYazJEc3hpcE1vTnROOXpZUEtvQjhVaUF0YkFZVFV4OHQraWE2b3Z6Y1J6ZHc1WWJtdnNuQlBjZTdqcGZhUjFCWVdGdVZTd0NROEN2S1FnMVl5azFvMnUwbU1SQURHRmdxNndET3VaSTFJVkZOYmtwZE1Zd0dySXFvYVlJczluTW9YdHY1V2pUbStBQ1ZOamM4dVhNL0tycVFKZFRWYVZSSVZ1dHJwRVhGV0Q2OFFpYmI5amNyUGtOYVM1eUNnZ0lTQVkyZUdocnJoOEJBVmtXSktkVGtKMlNJSW9xSkVtU0hlWmFvYWJVS2h0OGZCRjB0cllhMjczMzNxc1NCS0ZEM3VpNmlnSnUrV2diZDg2ZHdiZ0liMFdxbkJkUTAvT1dCK2w1eTRQWVNqTllOMjQyUmRmT0pkcllnZTltNHdvY1EyNWc3TDl1QitENEU3dndERmcyRkRjMzNER1hsZUoxWVRqcU1BMWVobmhHZmZ3cEJ2WFpHWG5nbUZsTUdETUwyVkxGam5tVE9mN2RIRkptbjU0MVFoMFcyZUVZeXI5NWtkenFJY1QzK29XZlg5L0FxRHVhM2NYbTRrSWdCYkRSVUZoRFpFZ0EzdW9JVkpHcFRQanN0VGFGOWpaakJQYmNuZGdrbXVqQVBTRUlBbktyN2lrK0VkRjRwWVF5OGIySDJ3cVVjSC9NcGFWQUhGaUtNVlU3dWl3Z0JGRnExZHRCank1TWo2V3dISHBIZ0ZTRnFSU01YYUJic1pRV0lMczFHVXRoS2Q0UlFlQWZqdDdnejVDM2xoRWVlQWJLU2plNnlPZ2pqZmhmTkpPSlQ3ZlB5S0xSYUVZTUhqeEljK0JBUnF0RVhVRjA2V3VDZ0N6aHROdVJOR3JzWmdzYW4yQjBZZjdvdkhXb1c1bWhQUG5rRTZPQjAxZk4ydXU0YzBrNnV1ZytWQlprczdRQVZQb0E1aVc3aWx5M0h6akV5WXB5ckU0elgyN1BJQ0U4a3FrSm9VZ04xU3c3Y0lyRHA2b3B0VWtzM1FHcEEvcVI2S2RSWk5KWmdDMXJPMGMyRlJDWk9nQkgvazZzMmhoOEFqb3hjYUo2MExBbm5ZS2ZSMFB4TG81OXV3Lzk5RXVhZ3hGclArYm9ta0g0T2c2UnZjL0ErRmY2SVBoTDlCbHI0OGY3bjJmZ0RSY2pWeFZTc0NlUElmZmQxaUg3UnRYKzdaaHFySmhOVGlwM2JrRjl5b3VRMUJIb2RLVWMvTmNLZ3NhTlJFc2w5YVYyZ21QQ094eTNFSlo2MmpFNHM3YXo3UjlyR2ZYTk40VDRsckYreWh4T3BQYW45MUNYaEMvNjVDMXlVaU1Rc2xkVFlyK1FZUmNFb2hXbjB0UDNSYlkvczRRK2w2YmlLRHhHU2JiRUJYK1pqWGJRVkdJai9zMzIvM3VEL25QSFlzdmRneHc1aVo3dTgvbkg5NlhxZzY4NE9UUUliV2dNMGNQN0VUaHBEajR2WE03UGIvWW1ia3dpNXF4RFZKdkNHRFJ2SWpGenJtVGJxNHNKQ2JtZHFxL2VvTDZyY28wUUFtSWNuSGh6S2Ria1NBSlNSdU1ickNOdTFreCtldkZKQW53WFVyL3BBMm9pcGhIVnUzUDkwcjQzblgyZlhZd3hvb1lqM3h4bHlLZmpRZTFMdjVzR3N2dXVoMG4rNnpXbzdlVVViZHBQd21QMzBCbUJ2eW82SG4zQk14ejZmQlgrZ1VHRWp4L1ZGSHhwRDFHemIrVEFKWDhobzM4SXhnRkc2bzd1eE9xVFROOUxoalVwY08rOTkzNnZsSlNVUXpRM1UxWUpJQ0lJSXJMc1JFWkFGR1JabHBGRkFidTVGbHVEQnJtNkZKVmFyUmJjaWJrQ0lENzExSk5YaTZKNGVoK2JaS2ZLcGlMY29NRmlkMkN4TzdDS1dvWkhCd0Z3TFBjVWVWWTFRMk5Ed2VGQXJmY2xLY3dYMlZyUEQ5bGwrUGdIMGkvSUc0dmRRVlI0QkJINjM1YU14bVF5NFhSSzNXNUtYRnBhUm5Cd01DcVY2cHdlYzZialEzQlN0V3M3UlpzMlUxc3FNSERSMDRRYW03ZWpiNzhVRElIdTZKWW1nTEJoL2RIMUhFeGdVQTA1WDY3QmpKR2syMlpqNkpGQVlGdzROYnZTY2NSY2hMNXNENlhIVFF4OCtwK0U5L0FGUk1LbnpFQlZlcEM4OUEzVUZ0WVNQSElzUVhHUkhYTG1sNjFiU2RYeGZIeVRVaEZyQ3pFWGxPQnpRU282THpCbkhhQm8weWJLRHVjUWZjdWpKSTVONkZSN09kMFl5cmR2Sm5UMlh6RDJqVURRQmhBNW9pOFZod3NKR1JoUHhmcFAwSTJkaStQZ0pxcktmRWg1N2duOEEzUWdlQkYxMlV4c1I3ZVR2KzRIVEZWMndzYU93ejhxQkFRdm9pK2JnVDE3Si9scmY4RHFDTUE0WVFRNmI5ZFRxNDBkVEVpVVFQWGg0MWpNV3NJSDl3YU5IejFuVEtMdTU4MFViTnlLMWFvbFl1eDRmTU44TVF3WWdhK1lUKzQzbTlHTm1VMU1TaStDaGc3RnExTlpKQkkrTVExYjFpSHE4L0xSeFNWakNOTGhlOEU0Zk9RQ1RxMWFqODBRei9Cbkg4YmczYmtxYlJpZWhsZkJ6K1QvbkVYQy9jOFNrK3dTMUVHakw4RkhLQ0l2L1R1cXNvcnh1MkEwWWYxaU9pY2k5Z29uYW13L2FqSU9ZUzZzeG45NENvM01aQUhKSTlDN0RUdkJONXl3UVFtSWhraGlMeGxCeFpZMUZHNzdDWWNZVE9UWTBYZ0hORnVBZXIwKzY3bm5uanVCcTkrb0hYQUk0QUNjZ0NRSW9peXFSRmtRQk5SZU9sU1NFNm5CZ3RvUWlLRFQ2VVJQN2pXSHcvNk5JQWlUL3FpYXpmbk94M2FtNHp2YnlIMzlkckpOa3hqL3dPVi9tTFUvY3YrbG1GS2VaT2pjRkVYRi94K0F3K0hZb3RGb242V1pvNjFlRUFRVFlCVUV3U1lJelJ4dFdxMkxvODNMeThYUkpyb1RjcEZsV1pnOWU1WktFSVFSeXBRcThBcUx3eWNpNkE5MVQ3cVlSTHhERkovdy80elhXSzBlR2hNVDB4dzRhTmxNV1d4MG43bVNkUnQvWEtscmFzODBqM2ZmZlhjWW9QVERVMERFN1B1SitJUGRVOXlkTHlvTCs3OEZuMlhMUHU0NWF0VG9ZelQzUUJEZGFSK05wVldDTE11eUxEZm40MHFTMUt5eEFlaDB1cUhLWENwUW9PQjhRZS9ldlh1NWhacG4ya2VqWUtPbHh1YnExU0pKVXN2Q1VwVktwVGdmemlMQ3drSzdGVGdBTUJnTStQbjVLcE9uUUFIZzcrL2ZwNVVaS25yOENLMDBOeVRKUldtazlxQXBFZ1JCdUVDWnlyTXAyTUs2Zll6QllGQW1Ub0VDTnpRYVRSSnRmV3lOeGZCTlRCK2VSZkdlR2hzblRod1BBeEs3ZXNIcTJscHlLK3B4bkM0bno5bTJxYXpWYkNhM3JCcXpRMVpXVElFQ0JaMUNFSVNFRjE1NDNxZWxZSk5ibTZOQ2N6NnVSL0FBRUl4R1k1ZUszcEhxdWV1VkZleTFhd24zY2xKbzEvUHY2NmN4SWt3UFdIbnVvMi81T3F1Y1VpbUFMVTlkUmJUN3NQZFhydVNOekRwNkJIaVJWMlZod1JXWGNPdUFNR1hsRkNoUTBDRW1UWnBrQkNwb0lweEVGQVFFRDgwTmFQYTF5YktFdXRGRzFXaTBYUk5zb29ZRnMyYVMxTU9WMXI3eXUxVXMybkNRMWZPR0F5b21qN3lRV3llYW1mam1uaGFIalVnZHhUVXp3OUdLa0g5MEQ1TlhiT1B5QVZkMFV0R21RSUdDUHp1aW9xSjZBcGx1UWRhaWN4VnRvcU11NFNhNkpaMmdVb2tEdW5ZWnJ5YWhCdEF6eUI5TEU4K01taUc5b2dqV3Q4MTg3aHNWM2xSckZ4YmtoK2l3WTVXVVJWT2dRRUhIOFBIeGlmTVFhcTFiOGpYbHNyazdXQ0ZKa3RDVTVDWUl3b0J1WDlGdTRyMmRXY3hKN2R1TmcyUSsyWHFRWWNPVE1DcWtJQW9VS09nRUdvMG1vWlZRYStGamE1Mm9LOHR5VXdtWUFIU1BWRTJ5OC9vWHEzRWtwTEtnZjljTnloMC9iK1hqY2o5ZW1EUkFXVEVGQ2hSMENsRVUrM2hvYVc2aEpudWFvOUFpZ09BU2JFSnBhVWtpNE5YMVN6bjVkTlZxdG9weHZESzFQMTFWdkE1bTdPS3huMnA1NTdvMGdoVlNEd1VLRkhRTlhpdFhmaEhpSWR4RVdhWUZoNlJuQUVHV1hla2UrUGo0SkhUOUdqTHA2OWZ6V1YwSTcxeVpncjZMVXUzRThRUDhmVk1CYjl3MGhSaHZ4UVpWb0VCQjE5RzNiOTlRVHArazZ5SFVYT2FvR2hEVWFuVjhsNjlnTG1IeHBpeHFkVjZrUGV1aStkV0c5bUw3d2drQVBQbjJCNlFYMjZpek9aaXhhQWxKZzRmeDRZeEIvR2YxRGdvclJhNTUrVVAzaWZTOGQ5ODhCdXFWUlZPZ1FFSEhDQWtKRFc5cmpyYlUyanpNVVZrUUJFSHZjTmhmRmtWeC9wOWhnbjVMMmlJRkNoU2NIWmpONW1YZTNvYWx1T2lMNm9BNk40V1JCYkFMZ3VBUVJWRlNxOVd5UnFPUlJRQkJFR0tWcVZPZ1FNSDVDbzFHRStuV3lzVFRtS0tlYVIrdUx3UkJpRkdtVG9FQ0JlY3JWQ3BWOUdtRW11QWgzQUFaa0p1K1ZBU2JBZ1VLemxzSWd0Q2psY1lteUhLTGxBOTM5UUhJTW9nblRod1BCM1RLMUNsUW9PQThodTdmLzM3SnAzT056V1dPaXNIQndaSEtuQ2xRb09COHg4Q0JBLzA4QkZtYmRJOUdvU2JMTXFLWGwxZjRtVnprVEdpTHpPWUdjc3VxTWRuL1BMUkZzdVJBa3BTaVdBVUtmaTBpSWlMOFRxT3R0ZjVCclZLcHVpZll6cEMyNktPdlZ2TG1VUlBodmxvS0swM2NPR01xQ3dmOXdaWEZ3azBzVDc0ZVZZOElaSnNGcjdnVWhyLzRFaEc5T3k5Qk0rMyttZ1BiSFl5OCswcGxSeXRRQVBqNys3ZlcyRTVuaWdxaUtJcWgzVHE3bTdabyt3UHpXSG4zZFR6UTM0dEZHdzY2djNUUkZxMWFjQkd0eWEydm5EcWQ3UTlkeDhvN3JpTDkycUc4K3MxUFZQd1pWc01ya1VsN2RqUDc0SDc2RG5Hdy9mLytYNHV2SFRWbDFPWVhJN1hROGlUc3hkbVVIdndGeWRFOWpVOEdjRmlveThuQmJwUGM1M045WjZzcW83NjBwczB4OXBveWFrL2w0N0FwbXFXQzh4ZmUzdDUrcHhGcVRkVGdqYVZWYWxFVXUwbUo1a1ZTaitheTBwNUIvbGhLV3RJV1VaUFQ1aWk5UjBkWUNWQ3J4QTRiN1A3eG9DWnNlQXFXelVkeEFpb3NISHY2TGc1dnlNTS9WRU50YlJBVFBsdENRR0FkTytmZlJzV0pIQnJLSk5iTjNRVUJTVXg0OTBtOEtDUzk3K1VNMzdPVFVBTlVmcm1ZYmVzTlhQYkdYMTBLNHBMN09iQlRRc3plaFZQampkVS9tWm1mL0pPOU42VlNJUXhCTmxYVGNEU0RpTCsveFlpYnh3S1EvY0pDOW4yVFMyQnNFTFcvbEhQaHFyV0VOKzBJQy92L3ZnRDFSWGVSTkYzcDg2UGc5NFZXcSszVXgrYlcyRkFMZ25EbXpTTWJhWXNtWGRhbFAvOXB6eTVlM1pYTnlRb3IvNWgzS1VGL2h0V1E2aWpldElscVN3MG5YL3VDdUd1ZVFnVlViM2lQakIwYUx0dTRCaTgxNUx3OG4zMXZyV0xDdzVkejRic3JxUG51VlRaL1pXWEsyL2QzNjNKVk80OXl5YVoxQkFUcmNGb3NUYXV1NlRlVkNRL093TEo3R1YvZXU0emhONDlGUlNsSGwvekloVnN5TUlZRERodk9GbVc4RWpXSDl1RTFzRnA1cWhUOC9xcUJXdTFIeDc0MW9WbU5nTUF6ZTJDN1QxczBzRzgvbmpMR3NHM3ZIbDdkdUorTGJoM1BINzUxaVZSTDhhcHZFWXFQVWFNZnl1UWJKZ0pRdG4wN0drUXlGLzhEQ2JEblZsQmxQUVQ4dXM3ckFSTm5FaERzeXQ1UjZacXplTUtHREFaQUZ4Mk5XRjJOSFZBUlJNU0lJSGJmZGdNOUo0MGxJdTFpSWdaRWV5ci9qRnVmb1R4UkNzNExxRlNxZGt4UkdSQ0UxZzRaRWZEci9pWE9qTGJJWVBDaGQyUVlOMDBkalYvK01YNnMrQk5FUjlWUkpQLzdKY1orc29wZWtjZlk5VnA2MCtRYmtsS0ptanFWSGxPbjBtdmhJNHg5L0phdVNNcm01V3NuSkszMWFaOVZRRkM3VjBsc2FSNFBlWGNkby83dkZyVDJBclpmT1prVGU4dVVKMGpCZVFsUkZIMW80MXRyV1ZMbC9neFJFSVJ1Q3JZem9TMlNLS294TmYxV1dWcE1ua05Mb083UDVHVVQ2WGYvQTVRc2VaN0tHb25RVVNPcHpUeUJmM0lLWVVOVENCczZHRU5Rcy82cTlqVmdMNitrcGVqeXhjdW5sb2JDQnBmV3QyL1ByeHlURFp0SkluajRXUHJmOHpnSlk4T296U3BwOGYzaEorN20yQVpGYTFQdyswTVFCSjlPVE5BbVhqWTFkTk1hUENQYW9yNjhzdlF6dHB0MWhPcEZjaXRNekpsK0VVUC9aQzAwTmJGcDlCMy9MQWYvazg2NEIyNGxhY2ZkcEkrYlRFQ3ZjT3B6ZnlIcWpwZEl1V3FFUzd0Tm1Vb2tOL0xOdUlsb0lsSzQ2TFBuME9GTDcrc25zWFBXeFJ4TENFZHJFTUhuMTR5b2xDMFhYNDdUbUlpV1NtcnI0MG1iM04vamV6dkYzMzZPTm13S2ZTWU9VcDRzQmIrM1lEUFFzdWk5VGFvSHpSSk9LZ0NNdjhYQVRBMG1LaXdPZ24xOU1XaCtIN0xKODQyMnlHbXFvYUdxRG4yWUViVzJhM05pTFN0RTBnV2c5L1UrQ3lPUU1CY1g0MENEVDBUb255eFNyZUIvREVXQ0lDNEVUTGlvaTJxQmVrRVF6SUJWRUFTN0lBaE9sVW9scVlIZmpPclI0RzNBNEsyc2ppZFVCbjk4RGY3ZE9zWXI5R3kraDBUMEVVWmxJUlQ4TDBEWGdSbnFBVmZ3UUdGT1ZLQkF3ZjhDV3N1cWRnME1XVVlSYkFvVUtQaWZFbXh0QWdidENiaEcvbkFGQ2hRb09OK2g2a0JqYXlIZ0dzc1NGSndESERwMEdKdk5wa3lFQWdWbkIySkhXbHA3ZjZoQWdRSUYvd3NRT3ZrZFFCQ0JibEk2T05tWmNaaEZLemR3Ny9KTnZMOHZsMmFkUkNZckw0OVB0KzNsMVkwSHFXM3ZjSWVKOXpmK3hKYjhHbVdKT29LdG1NeC9QVWZlL3R6ZjVmSy92SFF2NlpkTVl2bm9HMmc0aDljeFo2U1RQdjFTVmc0Znd0SHY4My9YS2EvUE9vU3BSdEd3ejJOMFdWYUpnTE43cDY3anE3MkY5SW1ONGRMK1VXemVzb0hIZjhocDNLYTh0MzRQUjRwTGVPdUh6SFlGMitvdDIzamp4d3kyRk5RcXk5VFJRN2JqYXc1OXNKVDkvL255ZDdsK3dqMHZNdTJUNXhHcktqbVhoVy82UWRPWTl1MHFlaVY1NDdEK3ZyUkpKNTVaUVBiT1ltWHpuYjl3bmtaYmE2TzFxUUVib09tNmxSdkE0aHNuTmYwYTJGREdYL2Jud3RoWXdKdG5icDRKTlRsOGMzQm5tME5yaTdOWld1akQ3RGp2YzZvRi9CR1F0M29OdmU1OWlQeVhQNmJXOWpmOHVoQzdydDZaenZIbDY3R2pJV0RrTlBwZk9iNXB4VTFIdG5OczJUZVlheVg4TDd5WWZsZFBSSVdGdkdVZlVyVDNLSGE3bXVCSnMrZ3pQYlhUSk4ySzdhdklYZjBqRFZVbWZBZU5vZTlOczJsa3BhcmJ1NDdTbWlDOFNuNGlkK3RSZk1aY3dlQzVhV2Y4Z2k3NWJpblphM2VCWHhUeHR5d2tOTmJGMlNBM2xITHM3WGNvUDFHRWx6R0dYamNzSkRqYXhRSm9PcnlWSXgrdXhHb1Y4UmswbHY2M3pPaHdnMXV6ZG5GaytRWktqcFlqcm5nVHh4NC8vRVplU3E5eFNVM25PN2IwSzh4V0xWRnpieVEydFE4QWhWKzhnMndjUk9sM0t6RmJmVW44MjkyRUdGMWpzT2JzSjNQSko1aXFyUmppaDlCMzRRM29kUjNmRTVnNDhmcFNncWRjU002U3BWZ2N2dlQ1Mi8wRUd3M0tBK0cyWTdxanNmMHEzZnRJYVRtSnhwQXU3RkViejMzN013dW5Ec05MU1cvdlpLNnF5RitYVGVUVU9VUW1scERmQlMxQ0x0bkpodm5QRXpyeld2cGNkd1dDdWFaSjA3SWNXY09hZVErZ0czb3hmVzZhZzFEVzZENm9vNmJRVHRUczYrZzlieHBGcjl6T3dUWEhPcjFXWFZZdWdXblQ2YmZnZXFUTXovamhtWSthdjl1M25yMzMvWTFUMlY3RXpKcUoybEYzeGhwZjlZYlgrT0haZEtMbTNreGtuSk10Vjk1RXJmdU5lUHpaMjhrdkRLVHY3UXVKSE5JRFM2VzdGdG1Xei9mejdzSTdiUTU5YjVtTEhoT09UcTZqRG9vaUxDME43eEFEUG9NdUpDd3REZis0OE9hNXUvNVJmTkpta25ERk9JN2VlejNaQjZzQUtQcm1YWFkrOXlHaGw4d21RSmZOMWdkZmM1K3hnWjAzWFkreno4WDBtMzhqL2dFU1Zudm45d1Ftc2w1N2tSLy83elg4UjE1TTlLZ0VMT1YxeXZOd2VzRW10L3EzaGNabTVneXBpMDVsSCtiTncwN2V1Yk5mcDMvNzg4NGRWUGRJWm15b2xuM0tBblVJYThaR0tueFNDVGRxa2RMR2NHVHRPdnFQdWI1aldkaFFpY09oUjIrTUppUStncERrNXU5eWxyNU42SFdQMG4rR1MzTUtTUjdtL2lhVUFYKzlpWXI5K3pGWDIvQWZGRWY1cm9Nd3BVK0gxNHE5L25acWoreW5wcUFjLzZUK0hGdXhHN2kyK1cyWmtNYUloMjlEQUtKL3hUemtMbDlCM08wdjBXUEVCVEJpRUlVckI1SDNVejREMHFLeFZsYWlpUXJCTDc0dklRT1NQTForTlZhVENsMVlCSUdENGdnZU5LelQ2NmdDalJoVGpaU0U2TkVrRHNHWTJyTjU3dDcvRDJFM1BFU3ZzY09RZ2I2emg1R2R2b200Z1M3SzlyanI3aVI2Ukgva3FLdkp1UHdEYklBV0s1WnFLNEZoWVFRTVNDSjRZSEtYN3NuMWlKcnBjKzl6eEE4TlZoNkV0ckIwUjJNN0k2dXdvaWlIQlo4ZllORU5VMGswZEJKY3RWWHdqNDNaREEzWHNQN3dTVTdXMk1rckxPWlFoVWxacW5aUXVHNHRHcjJGbzYrL1FVVmVQV1ZyMTJMdDdPR01tOFRJZThaejRNNDVMQitjeXJaL2ZkcmtrREFYRk9BYkY5ZldZVkdSeWRxME5ESlhyS2ZxMEdFYWl1dVJISjN0SFJPN3I3K1lINS85TDVYN0QxT1hYWVJrczdWNFpmb21KcDZWbWxOTFpTWGVJV0ZONzJCOVdDQ1cwbklBK2p6d0FsNTVYL1B0aUtGOGZjbTFGSjV3RTgzN0pESHlwZHM0K2VRQ3ZoaVF6S1lIWHNicU9QTXhtRW9LS2Z2eVRiYmNjQ1BmMzNBanYveFlqazl3czJub0ZlaGlJUkIwV2dTSHcrM2REbVRZcTg5US9zN0RmREV3bVhXM1BrNmRTZXIwbmx3TEdZSnZ2Q0xVMnJWS1pObmNqbmJXbmtFZ3EzRVZsSFlMZFJVRjNQTFJOdTZjTzROeEVWMG8vcFJWakIwWVMyN3VLWEtCN0hvNzl0SlNUbFRFa2hTcytBOWF2NVR5MTI4bGZNSzlxQXhhVkgxSEVwRCtUd29PbXVnMXNLTzVVdFB6bGdmcGVjdUQyRW96V0RkdU5rWFh6aVhhQ1BvZVVaUmtad010TmV2S2pTdHdETG1Cc2YrNjNXWGVQYkdMVXkya3BSclI0V2l4YytUOEhadzRITUdWZTE1R0M5UnVlSTNET3pKZGRIK05iOHN6U0NJUzFDcWtSbnZORFYxUUVBM2xwVUJQd0lHNXRBcS9NSmZid3l2MkFpNTg2MlBBUWRiaUJleC9hd1hHRnhjQUVIN1pRc0l2VzRpekpwOHQweWFRcy9jRytnenZvbEhTcXIrRUlkeEk1T2g3R0hIYm1HN2RUK0NZV1V3WU13dlpVc1dPZVpNNS90MGNVbVluZFhoUGRESi90b3BpYkE0dmZNSUQvNnlDemVRaHpEcjBjS2hsV2E0VmhHNjhYKzExM0xra0hWMTBIeW9Mc2xsYUFDcDlBUE9TWGVyNzlnT0hPRmxSanRWcDVzdnRHU1NFUnpJMUlaVDdab3h2T3NVckgrZFRsVENJeXhOREZUbldXb3ZLLzVIQzNKNU12ZSsycG9DQmZQQXI4amQrVDYrQmw1eGVLYzdhenBGTkJVU21Ec0NSdnhPck5nYWZBTGZwZU0xOERzOTdpc3g0SFdGeHZwUituMEhjWGJmZ0hkV0RoajNwRlB3OEdvcDNjZXpiZmVpbmUxekRweGVoc1VWa3ZQQWhFWDBpTVU2ZGpDNHdDbS96UWJMVzdTRFlZT0x3cXg4RFEzNzFmWWVtam1EWGYxL0JJRTNDZjlDRmhNU0YwblBPTERZOCtTL0M0eDVDeWxwTmZsRWlGMS9vTXRteVAzZ1ZvZWN3ZkVNMVZKekl3eWY1S3JjcGNZZ0R5L1lRUGlZRm9TYUxCcE12dmwxMHZ2djFUdURZOG5meEZjZmlIVGVJME40UnhONndnTU0zUE1iUnlDY0o2ZWxIOWQ0ZkVIdlBvTmVvdUE3T1ZNckJmNjBnYU54SXRGUlNYMm9uT01ibHMrdm9uanJETDA5ZVQyYnBTR1o5OXVTZlZiRFZkNkN0dFJCMnFpZWVlT0pLUVJBU3UrN1l0bE5sVXhGdTBHQ3hPN0RZSFZoRkxjT2pYUjBNanVXZUlzK3FabWhzS0RnY3FQVytKSVg1dGpsTmRIZzRzWDYvZmJjT3Npd0FBQ0FBU1VSQlZBTjZrOG1FMHluaDU5YzlmczNTMGpLQ2c0TlJxVlRuOUJoclFTSHF2c1Bva1J6ZjlKbDNsQkdIWFVOby85Z09WQjRuVmJ1MlU3UnBNN1dsQWdNWFBVMm8wV1VtcVVNVGlCazNnSksxNlJUL2ZBaDk3MVRDQjhiaTFYTXdnVUUxNUh5NUJqTkdrbTZiamFGSEFvRnhqUjBaTlJndnZnanpzUXdzSlNZQ2hxYWc5UTdGbUJwTHdjb3ZxY3F0cDk5ZHQrTWRIa1Y0Y3JQNTZSVVo3M0dPcnNFM2VRdytZaVcxV2Jtb0l4UHhqd3hBMzJzWW9VWWJwNzVLeDFRZnhKQi9MaUlvMUVWRzQ2ak1wV2pUWmtwKzNJY2hkUzdKdDE2Q1NnUkVnZHFNSFJSdDJVVGxMMVVrUHZnMDBmM0N1cVpsRFJ1UDJseE0zUzg1NEJkRllHd1k2ckFFWXNiMHBuaE5Pc1UvSFVEd2pjVTRiamc2Z3l2TzZ0c3ZCVU9nZXg5ckFnZ2I1bUtVTm1jZG9HalRKc29PNXhCOXk2TWtqazBBNlBDZVhOQVNOR3dvV25YN1l6VDBIa3pvZ05nLzUwdmY2VHo2OU5QLytCbFhFTUhhK0s4Z0NIYkFLUWlDSkFpQ0xBaUNMRGlkam85RVViem16ekk1dnlVZjI3bmljRk9nNEUvcHBMRllWdXIxM3YrbExSOWJBeTM0MkVSSmxHVzVVcGt5QlFvVW5POXdPQnkxSGlhbmZIcGZtNEFveTNLRk1tVUtGQ2c0MzJHMVdodkxsVm9MdERZQ1RuUTZuZVhLbENsUW9PQjhSME5EUXgwdGszSlBHeDBWN1haN2lUSmw1d1poWWFIZENod29VS0RnOUtpdXJqNmRLZG9rN0JvelBFU0x4VktxVE5tNUVteGhpbUJUb09Bc29haW9xSzYxUUJPRU5tVlZzaUNBV0ZSVVhIUkcwck8ybHR5S2VoeW5JMlJ3dHRJUUpSbUhVMnI2a2FRL3o0TEk3bngwdVIzV2xkTVZ1elY5TGlrYldvRUNnSXlNZy9YdVIwTnFGbTVDTzQrUGdIcnc0TUdsa3VTMDRPb0Ewem1rZXU1NlpRVjc3VnJDdlp3VTJ2WDgrL3BwakFqVEExYWUrK2hidnM0cXAxUUtZTXRUVnpYVkNuNjFialdQN0NqQXo1MmdNL3JDVWJ4d1VlSWZmelZxOXZERnBIOHo0K2NuU0I5d0Q1TU9yMnBxNUpxLzVCNU8xa3lnbi9FQUI0NGtNUEdwdVUySGJadVFST3lIaHlpOEo1blFwM2ZUcTU5YTJka0svc3l3M0gvLy9RMGRtS0l0L0cyTlQ4c3BvR3RTUnRTd1lOWk1rbnE0MHRwWGZyZUtSUnNPc25yZWNFREY1SkVYY3V0RU14UGZiTnVsZk9xRUNidzRQa0ZaSWdVS0ZIVFA2cEhsdkZZQ1RQTFEzRnJxYTRLQTZEcEc3Z1pOcTFlVFVBUG9HZVNQcGFuR1Q4MlFYbEVFNjl2WExxcXJxOWh5Sklmc0dzdWZhRWtFVkY1ZWdJaEtyMjlSSEM2cXZCQzFJb0pLaGRncTFWelU2MEVFMFV2djRqbFdvT0JQREtmVFdkQktxTFh5dFFteUlBZzBCZy9VZ0N4SlVzNFpPYm50SnQ3Ym1jV2NTWmQxK3FjYUx4MzJrbkpXN1M5aDYvSjFUSjh5aGNjOTZHSCtzUEMvZ011M0xnSGcwdDNMVzN4bHZIRXhybGJGMDJoTnhUanF1MTBBOVBoNGg3S3JGZnpwWWJQWml0clIyTnBOK1JBRVFWWURzdFBwek82MllKUHN2UDdGYWh3SnFTem8zem5OeXJRSmFVeHovMzlaN21FbXZMZWQ2eS9vU2F4R1dUUUZDaFIwalByNitxSjJUTkRUK3RsRXR6UTgyVTNGa0U5WHJXYXJHTWNyVS90M3U5VlZhSFFrVVk1NlRpbjg0QW9VS09nQ1NrdEx5K2lDajYzUkhCVUJ1YXFxS3F2cmw1QkpYNytleitwQ2VPZktGUFJpMTQ2cHJEYzMvWloxN0NRRittRDYrQ2dMcGtDQmdzNlJtWmxaNFNITXBFNU1VUVJCRUx3QnJTUTVpd0d2VHE5Z0xtYjBvaStvMVhuaEpib2NkZHJRWG14Zk9BR0FKOS8rZ1BSaUcxVm1CLzU2TDVJR0QrUERHUU80NzVYMzJPUHd3Vjhqa1ZjcmNlL3NxY3pyRS9LYlQ5QnZ5ZTZoUUlHQ3N3S3JJSWpYNG1walVJK0wyYU5PRUlSNjkyYzJRUkFjb2lnNlZTcFIxbWcwc2lBSWd0NHQyTFlBeWVkdWJCSmwxZldZblFMaEFiNTQvVTRKK1lwZ1U2RGdmd3VTSkdXb1ZPcEZ1Tm9ZZUFvMms0ZGdjN29FbTByV2FEUnlZNDZCTEVsU3BpaUs1MUN3aVlRRytDbXJwRUNCZ203QlpyTmwwZGEzMXRySEpudVlvWWlDSU1pQTdIQTRNcFVwVktCQXdmbUd1cnE2M0hZRVdwT1ByWFVPVzFQd0FKRE5adk5oWlFvVktGQnd2dUhVcVZNRnJRU2FrOU9rZkRRS3VjYVlwbno4K0FsRnNDbFFvT0M4dzlxMTYwcmNnc3ZwSWRUYXBIczBtYUdpNEtvOEFPVFUxTlJ5U1hLZUFIci9wcU4rNTlLMm4xMXdOYVRNVTFaVWdZSS9PV1JaL3VYUlJ4ODF0elpEM1hSRm5wcWFoM0FUbTRyZ1pVQ1NKR212S0lxOS84Z1Q1VldUaTZvd0U2cTcxNVRXNzlRcFJNY0pVQ3NzR3dvVS9GYXcyZXlIMnpWRFpTUUVXUUpCUnBaQmxtUkJsaEdjSURqa3B1QUJnR3kzMi9kMWZpa25Pek1PczJqbEJ1NWR2b24zOStWaWE1YXZaT1hsOGVtMnZieTY4U0MxclczbC9CeWUrWElqOTYzWXpFZVpoWCs2UlNyZnQ1bXhUMzdSNHJPVDI3NWwrcjlXdC92M1A2NVp3ZWpaZDVFODYxSDIxbmg4NGFobDBaUC9ZTkFWZDNQSjRxOS8yNXR3RkhQdFRROHk5SXFGWFB2R0QxMCs3SVVuSCtHL2U2dTZkYWxsLzNtTjBkZituZWdaejNBMjJWQy9XN242LzdOMzduRlIxZm4vZjU0ekY0WmhHRVlZWUVSRVJGSkRSRU15SkRVemM4M016Rnh6eTh5MXNqSXoxM1ZiYTExei9mVTF0MjI3bUd0bWRqTXoxOHpNVE0xWU5EUFh5c3pJQzVrUklSSWlJZ3pETU16bGZINS96SVVad0d2cVZzNzc4VGdQWmM3bDh6bm44em12ODc2K1BwelI3SE0zc0t1b2xCTXRLTC9talpmSkdUV1pubVAvU2NWNWUvQXU5dTByeHRhTW4yLzVpMDh6NS8xdnoraEtCYXRmcCsrNDZhUmQrd2QyMjg1aEZ4VWJVNmJQNDREOTNKRUlIcmZhRHJaaWhnYjcyUENUVFVwSXlGSlQ4QUIvWk5ScXRlNDZkZWZyV0xPcm5DNnBIYmdob3gyYnQrUXphMnVKYjJjREwzLzRCZnNyanJCbzY3NFFZRHRXZG9EZnZicU51TGJKREwwMEdkbmx2dWlBemUyb3AvUm9iY2h2c1IweXVPdnFMcTBjWGNmc2Y3N0h6UGxQc252Vi81RWQwN1NuL0xPUGVMazhnWjJybjJYOXd6ZGUySnRRVzFqMnl0K1pOeXFMR3J2cjlFSDlhQ1ZXdStlTW1ycjFuc2xzV3pnSmRhMlZjL0dxNUc5NGo0SUR4eml3NXh1cTdjZVovL0phcWs1bkd0cExHWDcvaTdTNk9JaTltQmt2RnJKczZiUHNYdlpITE9mdHdkY3ljZEpjaXBvUjQxaXJxNm11ZDUzUmxRYU92SjF0Uy85Q2txdnV4RVN4WnlHRm05YXlyMDBXbmZYbmpvNm1xUGpRRDgyMHRXQWZtNUQ4NE9ZRE9GK3FoMUFIMjZtalI5K3lhL1BtQWh0dzRtSW4yY1RqNDY4Ti9ObkdmcFQ3ZHY4QS9WTUJQZjgzWVFUVWxyRDI2MDlEVGx1eGJSZlhEUnJJdmJsSkZ4V1lPWTRmNXNtWDExSmNyMlZvdWk3a0M3enN0YmNvc2lwWUxzME9PV2ZudHYrdzVzdHZLYXgyczNybFcyeFRSVEx4enB0SmliU3orTVYzMkxYM2F4eFZHdVk4dDR6WWpwbE1HOWJ6WjNHdmJsc1ZpMWZtcy92N0NoU2RrZEUzM2NEZ2pQZ21jQ3Y5aG9mbXZJbE5uOENVMzQrZ2E1eTMwTVYrL0RBTDN0aklubklibWJsOW1UcThGNmRLZzFZYWpyTm8yWHZzK1A0WXNZbUpqQnM5Z3V5MitwTy8wQU91WXRuS3RiejhTU0ZibERVOE5QNG16S2Z3TEd6NVlCMzVYeGRqclQvTUU4OHRRNC9NcldQSGtORkdKdi85dFd6Wjh5MWxqZ2FXdlBRbWVsMGMwKzYrRHRNSnI5YkkwdGMzVWVPcTVxQTlnYUdkbkt6OC9CalQ3NytkakRnTnV6Ly9oQlVGZXlpdmJTRHQwaDVNSFhNMUpnM3MvdTltVnUwOFNJbTlua1dMbG1IUlNBeTk0VWJ5VWcwK0JiNktKeGNzWnM5UkdELzJ0d3k0cE0xUEdFUTd5OTlZdzZadmptRHBlQWxUYnh1S3hRZFVaVVc3ZVdMRlJ5aHRraG1lRlk4anRoUERlN1FMV0hLTC9sM0FyVk9mRHJIdVZpeC9CMk5xZTlaLzhDbTZ4STVNLy8zMVdIeDFtRFVsKzFtMjMwbU85a2VXRkJTUjBPa3laazY0Q2owdTFxOWV4Nm92ZnJDOXNXSHJrV1phbWdkUWhOY2M5Vk9EQzBsQ0tJcUNyY0dEcmRHRjdITzZDVUQ1NktPUEZDSEVqak41RHZzcnEraWNkS3JTS0JkN1MydUpFY2U1Yy9GYjNQcnlCajc0b2VaaThCQXdmZHBzRHVxN01HbFlOc3ZleVEvYXB5STdweWRkdFVkWmxCK2FRcGpjSVowaHVkMHdTUkhrNVdZekpLODdSZzJBaHQ2OUx5T3ZjeUlHY3lKRHJzeW0vNlZ0VDlvRDY2RUR6Rm40SnJPYmJadUt6djNpWk03cUNxcTFDWXkvWlRoais3Vm42b04vWVh0Vms1YTI1SjB0REJvMmhOeW9IeG55aHhleEF6UWNaZFNFUjZtTTZjeVVXNitoWk5QclRQLzMxNmRzYThuOHAxaC9KSnBwZDl6STBPNEpWQjF2T09VNXhRZjJzK09IT3BMajQwblFPZGoweWQ0V3BsMXpTZXQ4S1VONlg0Sk9ZNlQvbGRrTXViSW5DVHJ2aTVuZTlWS0c1S1NqMHhrWWVHVTJneS92Y2dvYTZrYVd2dkltY3FmZWxIKzhuTVY3dGVSR1ZmREV1MThCY0xDa2dwd3I4NWcyZGdnY0tHRE1zNXNBU0VycHhKQXJNNGpWYU9qZE81c2hWMTVHU3BzbTZGKzk3aitrOWVyTHNJNkMwWDk1aVovQ0xmSHFNLzlnZm1FOUUyOGRSdXlQWHpENHJ5dTg2bEZ0TVVNbnpTY2w5eXBHOXpJeWJmWjhWbjhaWk5EYmZtRFRnU2o2ZG9zT0FiWlZiNzdCak5jL1ovU282NGl0M01uSXVVMnVrNW9maXBqOTVIUE0vMjhOSTYrL2lsU2RDd2RRc0h3SlU5NzlqdHQrZTkwWFRwZGJhY1VFOVp1aGlpS0VrUERxYlkxdUJZMUdUWXhlRzRpS0JzRE43WGJ2MEdnMGcwN25JWlIrdjVmbjkzcDRjZktscC9vTVlITzVXYi92Q00rUEdZYXQvQnNtdkxhUmpnK040ZGRNRHE1VTdHWEY5M0hzZVdrZ0ZobG0zdDZmVVIvNEg3ZE1ScmNNNU1PNzRmdlE4eXp0TzJCcHI4T2dpU0NuVndhWkFhMUNRODhlR2FqTGQyTW9qNlJ2ZHNhcExVZU5sZ1J6U3gzQ29EbjNOVzM2bEV5bUQ2L2hzMisrd3laTVpDUTQrR3hmTlhuOXZWcmJtTnQreStEc1M2RG5IYno4MW4xc09UeUoxRDBGN0V2c3c2clJWeUFEYys0Y1NzYlRXNWwvUy9lVHRsVjkzSXErYlF4cHFSM28yU1h0dFBvbkd5ek1lK1ErWHA3N0RFTm0zQWRGM3lPZndtcEs2ZGlKbERnM1dtMDB1ZGtaSWFabWFxZExTSTJwUnhjUlRWNTJ4a2swdGVEdldSeUQrbDJLODBNelNxL0xHT0NwWjlVWDNvL01xTi9lUlBHM0J5bjZzWmJNcnFuTVgxY0VEQ2FoWFFvSjdmUVlOVnF5c3pQSWFhYVlEaHgySFNQN1pNRGwwY3hlT0k4U0oyU2NWZVZmRFV2WDcyZm1xNCtRbDZJaHI5TTRsdlNmeTI3N3JjZ2ZmNEl6YXhEVGgzaXRnd2xYZjBoaDhFZnR4ekxLWXhKSWFVVUR2dmZPMituZlBZYitLV05ZK0p0RkZEOTZFMm0rNCt5R05CYlBIT00xRWZNQUZKYS8vekZUSmovSFpSMjFlMW94UXoyQVI1Szg0Q1lFSUNIOGE3cW8xU29pSXlKUSszSS9oUGNnSWVycTZqNkxqWTA5NVNNNDltTUo5N3oxRlhQdUdFSG5xRlBaMUdyMGFoalcrekpTalpGZ3pLSlAxSFkrSzdmL3FvSE5XVk9MclUwY1p0L2pzY1RHQXhkMlVUQTVRb2ZGM05JME1lcFBIZDFkdHVCSlpxN2REOGc4OGR4OFJuZUpQUG1IYmxjK2cyYSt5NUJCdVNSRXFhbXllM0M0bS93L3lXYmZ2SktOV0dKY1ZOWTBJbGRXWWozNERTTWZQQlE0cm5mSFMxSGdwSFJZOTk1L1A0OHNXRUgyc05mUkpYWmsvditieXNDT0p5L1pTK3ZVQVlBaE4xOVBFbURzMnZIQ1R3cFpqVm9HV2FWQzFraG9aUlgyUmdFME1IUEtJMndScVF6cVpvSGpWVGhjcHhlQk54dDk5NjFXb1ZhNVVjUloreEtvckRWZ01mdElFaU5OSkVUWktEOE82dG9hTE9ZbVd2K0UySmpRanppZ3lGSXJGOVdRbE9BN05pYVdCTWxLcFIzU2ZGMU83cGpjek8vVlNFVlZJME1zSmc2VWZGdmNHcWdGKzllRWQwT1NaYlFvMURjNHNOa2RoUGpZQUdYU3BQdDNyRmp4WmkwUWM2TDdyenQybUR1WGJXUHltQnU1eXFJL2pTZW1vV09pQVpmYkhYZ01MbytFUnY1MUwwMm5qVFZoUEg2TUtnVXNNbFJVSGIzd1ByN3FvNnovNlBNV3p2Y2hwbFF5MjBhZjlOeXhrNmN6ZHZJSjdrMmp4dUVLRFFhc2VtY0RJeWRPWmQ2SVRvQ0w0aTN2aE93dnE2b0N6S0JZcWFqVmtSUWJRWEpDQWdsWmJkajQxTmdUYURncVpMZW5SVVRTMUw0ekMvOCtDL0N3YlA0L21QbmFGcmJQSG41YXo2UnJ0elBNYUpJbFpNVnp4Z0VNbTdXV0tyc2cxWElhdXR5UGUxbjRUUnlsSHp5SUFTaloralpQZkZFU2RJQUUwcG12N3VhMDJ5Zy8za2h5dXppYWtjK2pWU2s0Z29kUWJTQWh4a1pGbFF0U05HQ3ZvYkxlUUZJYjBKbmpLZDNXRlBNdHF6Z0tRZDhSWFdJOENjY3JLVmNnVFE1MVE1VWZxWUVVRTlSV1V5bU1tSU1nUTI0QmhoRll6QkdVVjlUVVB2cjRNMlVuQUxXUWtpclpWM0VRcWRQU1Jxc1JHaFZlalMxSXhNcVZLOTNMbDcveHNTekx3MXAzbDlVeCthWDMwU1Yzb2Zydzk3eCtHRlNSSm03dDZhWDUvdVNyUFJRZnE2TFIwOEE3bnhTU250aVc2OUxqdWJIWHBVd28rQzg5alRuVUh6N0k1NHFGdjdhTCtGVURtNXlRd2EzcHg1anh3bVltWDJIaXNUYytob1MrWHNDcFBjcTJmWWNwUGZBajlxTnE4dis3RzFOQ01qbWR6aTJWazZsVGR4Yi9yZnM1djdlczd0MG9ldWtkRm1mcFNVMXV6K0FlSFVocGw4Q0tyVnZZMlZWaTM4Y2ZzUDRISlVRalgvbkcyd3hPR1UzbHArOVQycUVmZmR2SzZFMERTVnYwQ05OZWE4ZXRWNlJRV1ZMTUhuc2JIaHFaNHowcHFoMEQyaDlqenZNYkdOekp6TUNCbHhPcmhsWC9YZ1h0dXRMWnJHYm45NVdrWjE1ei9nWlNuMGhYZFJrTFZueEVYdHNvY2k3UDRYUys1eHZmWE15WWRSNXM3ODA0OVJKd01mRWtPYjVqMlVkN3lORTdlT0tsRHduTmxUZVIwZDdEb3FVYnFleG1KaU1yaTdRMnA3WTNDemU5emVWemQvSHRaODhTdW94U0RQMTdSUEhVb3JjcDcyVWhMNjhQeVFZVDQ0WmV5bVBQTGlYMnp2NXNXL1VtdXY1WDAxTVBjcjkrSkQ4OWsrbXZwWkFUV2NXcm54NGhOM2h3amVrTTdsakw5cUlHMGpKQ05mdEZMeThqTS9JM2JGKzFrdVJyQjVCK1VrVlU1dGJyKzNIUDh5OTlldkQ3OG1BejFCMENic0svTXFXdlJsUW8xRHNFa2lTanVEMm8xR3ExSklSQUNDSDV0SC81NFljZlRsQ3IxYTM3MlJRWHg1MHFFcU0wT0Z4dUhDNDNqYktXM3NsZU0rT2JIMG81MUtnbUp6VWUzRzdVa2RGa0prUmpUa3lpbTc2UkRWLy93STlLSkErUDZFY25neHAydmRteWpiYmRJYW43ZVptampkWGxLSFZIMGV2MVozUmViVzB0MGRIUnlQS1poTEpWRE9pWHc0R2RPL2pQL3FQY2Njc3dPcVVra2R1NUxiYUtVbFordklkYUtab2VTVkdVVmxSaDE1ckk3aGdNYkZwNlpYY21xaFVOUHlvdWdaeU84Zjh6ME5hWlV4amMxY2dYUlQ5UXI0bWhkM29pR2QyekVPVUhlUHVqUXFJdTdjdTkxM1NrVTNwblV0cDRQMkRYWDNVNS84bmZ6QTlTSWd2K2ZDdUprU3JRUkhIemIzTDQ5c3N2V2ZmSlYxUTZ0UXpzY3hrZDR2UUJOOFkxQTNMNDhidGlTcW9hNk5HakM5RnFzTmRVc09tVFhlUi9mb0NVN0VITXZqV1hpUE8xNkkyazR6Zjl1MUY4c0pqaThtT2tYWnBCZkdUUW9HZ005T21SU212dmEzeFNDbGQxVHdreXExWDA2SkZPSkpEY3NSUEpNVnAwSmpPWFhaTEc0T3kyckZ1L2xjL0xHbmhnd2syMGl6ZlRyMXY3d0F0L1ZiOWVWSlY4ejdlSGo1S1lrazU3azlZWFhPaElla0pVWU03a1pIY2gyRHNVYmJZd29OY2xOSGNrOUwzeUN1b3JTdmp1eCtPa2RlMUdnbDZpWisvZTZLdS9aK1htTDlFa1o3TGd3WnVJMWtpZ01YTFRvQ3dPZkYxRWpiNDkvUklhT0dycXlnM2RMWUg3U2hCVkxOaFZ6MjE5T2dhQ0J5dmZmSThieG81aWUvNFdHaTBaTEhqZ0JxSTBUYzlPWnpMVE96MDBTYVpqOTU3RVdnKzk4ODcydlljQUo5QUlPSHovT2dHWEgrQlVzcXlvSkFtMVNrWlJCRTYzQjZjaUllbDBPdG50ZGt0Q0NGa0lvUkpDYUV0S3Z1K2VrcEt5N1lLOElSZTRwS3IyMjg5eGwrOGpMdTdNS2c5S1MwdEpTa3BDSGE0OENNdEZLa1hmZkVkcXAwNm9uY2U1OWZkL1pPak1weG5mUGNoajVhcGgxTDFQTWVmWjJXUVlaTURKcUJ2R01YYlJDa2FjR2YwaDcrUnZ2Mi9rSCtiOVNDZ0htMDJDZWlRYUpTU25KT0dSSkVsUnk3TFFxbVVSb2RVUUVhRVIvdUNCa0NRSjRZMHZDRUJKVGUxWXBDaWVQVUJtZURqREVwYXdBR3o5Y0EzalpwZWhTSkVNSFRXSmNkMmJ1ZUUxSmxhOU5DZkVMNWpldFJPeFo3aGdreUxFdnBGL21IZXNtUm5xcG1XNmg1QjhPV3orSUtoS2tsSEpFbXBabGdueXN3WEF6ZTEyRjZqVjZsOGRzTGtqWW5ESHBrRkM0cG1ac0xVU0lqNFZOT0ZsdGNKeWNjckVPUzh3OFF6UG1mZmFXMmZjVHIydC90TVQrTlk4U0pJWDFDUUVrb1FreTk0SXMxcUxTcU5GMWtZZ1IrZ0M2UjVJa3VSVDJyeUlhTFZhdDhUR3hrNzV0UTJPUjJmQ0pVZEJ3cG5weG8yVkxrVDhKUkNtQmc5TFdNNnJmRk82Y3graGFSNXV3Q05KVXBER0ppRkpzcEJrRlpKS2c2elJJbXQxeUZvZHFnaDlrOGJXTEo5Tk1admp0eW1LNXpEUTdyemVSZmJ2V3Y3V3RudDRkTU1TbG90UWhCRGxsMS9ldTdTWkNlcmZmSlJGVWdocnJpekxnVTJsVXFGU3lWNWdrMlZaZUR5ZVlGTlVBQjZQeC9PQlNxV2FjRjd2Sk15N0ZwYXdoTVVuRFEwTlcxdlQxb0syRUI0MldaYUZIOE84d09ZRk43azFqYzJQakhWMXR2d1RkYURHYXVXSFk3WVRzd040UXRPZkZVWEI3UW5kZnZXaVZMTmk4U0lXTFZyRSt1MUZ2N3JicXlrdll2V0s1U3hmZHlFQzZFNEtWcSttMG5FUnZOMk9LdGJuZjNiQzNmdTJiNlN3TkxUV2V2ZVdOUlJWdEY0bFdsbThrNVhMbDdObXkrNW04OVBKWndWcldiNXNHWHRLbTdoNFBpdFlUNVh6ZjNQckJ3OSs5MVV6VUhNRDdsQXpsQllhV3hPZ3FWQ3AxRjVnODI4UTREWVNnQkliRzVzUEhBNTlHRFllZVBwVnJsKzBqajhzZTRlK1Q2M2l2NVgrQXVSRy9yN3NiZkwrOWdMcGMxWlNGampKeFVQL2VvMis4M3piNHk5ejZjd2xmRlFqZnVVelZNWmdNRkM2NHkwV3J0N3hpK3U5dTJRTG82YzgxZnBPNng0RzVWM1A5cUpTS2lwck9QK2ZLVHRQVEh1UXdvdUFPMkhkTTM5aS9iNFRFNld0WC93d3E3ZVhoZnkyOGRXL3MrMkF0U1ZHbG13aWQrQ2Q3Q2t0bzdJNjlPR3RuZmQ3N24zaWJjcktLN0RhbTJvN2JIdldNSDMreHYrSkdkcWpSNC92ZmVEVjNBeHRLcVh5RllZR1k1Y1gwSm8ydFUrRms1clNQaVFoU1NoQ0NBVlFQQjdQQnBWS2RWZlR1NnJobmxFanlHenZMUk5admY0OTV1Ui96WVpiZXdNcUJ1ZmxjdGVnQmdZOS8wVlFselU4K2NEdkEzK1ZGMzNKeU0zSDZXT1NmdVc0Wm1MWXJXUFJWWDlDWWNrSnRKN0tNbXJjT2xLYk02UW9Uc3BLeTVBTlpwTE1vVFdRRGxzMTVaVld6RW5KR0hYbkthOU9VWERVbExGcCsxZTQzVzZRWmRUKzVHUkZ3VnEwazFMTFFPYk5uTzZkV0tkMVRVQUdlMDBWbFRaSVRXNjZaNmU5aHJJS0swbXBLZWlDTCtaMlVGSldpU1hsREpkdVZKeVVsWmFqajdVUWE5U0ZkS0t5ckJTMzNreFNyT0gwQU41aHBjb0dsbGd0WmVVMUpDVmJtdTdYTjA0NmN4Sm1RMmc3MVJYbFdKMXFVbElzSWM5SEFSUzdsYklxRzhrcFNhR0p2YzVTNWkzWnljTGRyN1I0ZUJXbHBlak1MV20vRkxlYjZVcytRYTJXVzFoSnhUdDJZT2g3QzdPbVQwT1cxU0huYk4rK2czRlROak41Y0doKzVzRHhrNWlhL1FDbFU0YVFjZ0ZqWlhhN2Zjc0pmR3VlSVArYUFnRWZXOEFNOVd0c2FyVUt0VnFOMm1lUEVteVMrc0tqQ3VDcHFhblpFQmNYMXdSc1JKRFp2cWtVS2lVMkJzY1JmNkd6bXN2UzJrRnR5VWx2NEsyZGV4bVdmVFVYZFh4UnNURjMvQTI4V3VnbVJWOURsYkV2RzljOGowVUg5cklkREI1MEc3cjBuc2pXTW1MNzM4K0t4OFlCc09YVnYzRFgzUFZrWmFaUWV1QUFNNVovenFnc3d6bnYzaE9UaDdOKzV3L1lEbFF4YU1oMXFPVkVGcTVkUm1jZFBEWnhDSnQySDZibVlBMURobHlIbkhvVkc1Zk1QQ1c0amUvZEJuMy9DV3pOMzRKZWRqQmd5Z3M4TVNHUHRmTWZaT3FDcldSME5sTlUyc2lyYTliVE44MklyWFE3Z3diOURsMTZGZzZIaTVvZ2pxRXhtWkdNV3RYQXFLNVFzMk1KWGFkK1NzV09Gd0U0c0cwcG84Yy9TbXpuTEp4VkpReWE5aUt6eC9UR1hyNkwwU051bzhxWUJsVUhTQjN4S010bmp6MXB2OGZudHFYRW5FdnBycy9vbXRzSGEvRlg5Sno0QWdzbURhUnkzeVpHanJrZmJYSUdOUWYzTVhENjh6dzVjUkJRd2Npc2ZsUW1kQ2FXR2c1VW0xaTUvbTJ5TERvMlBuTTNqNnc5UWl5TjJLdUtjR2JjeWZZVnN3THZRa25CS2lvNi80YVFJWFZXTVduRU5XeXJTY0NFQTdldG1zRkRmSXB6NFRwR1RudVdvbDNibUw3OFc2WU9TZmFkVk1XVWtiOWo1OEVERkZmS0RCbXlHVXZ1TFN4NzdDNUt0eTVqd3B6WEtOcFZqcUg4TnRZOXBXUGNySmNZMTk5YkZvbXhKNE03bDdPcW9JUnBRMUl2MkN1eGI5LytMMDlpaGdacGJLRkJneVlUMUd1R3F0VnFTRTV1aDlsc2xxS2pvNldJaUFoWnJWYXJaRm5XU0pJVUtVbVNVWktrQkNHVWZVSW9vc1htckJQM1BmT1NXTGozYU9qdk5jV2k1NnczeGFGV3puSFZIUko1czVlSy9RMnRYTzhDYkVlT1ZJaERodzZkOFhsZmYvMjFhR3gwbkZXYkh6NTNqN2orankrSC9QYkRCMCtLeEY2M2lGcVBJb1J3aUQ5ZmY2bDQ4SVd0UWdoRi9PZTVlOFhWOXkwTUhCdmM3dTJYeFloWFByZjYvbmFLeGtiM1Nkdis4YVBGb20xaW9raHN0ajM2eG1lbjdIZkQxOHRGVEs4N1d0MTMvUE9YUmVLVjk1elJjN2lqVjVTNDVyNW5oTXQvL1FhN3FQMXFsVWpzZUpYNHZ0WjdIMSs4TVVQMHVuMnVFRUlSejk3ZFIvenU4VFhlOXI1YUlXS2tSUEhoajk1emIra1dJZDdhNyt2TGZ4ZUx4Q3Z1OUxiaktoTlh0NDhYcjN4UzVtdlhMWTRkcnhGQ0tPTFJtN3VMKzU3Tjl4MVhKVzdzMWs2OCs2Mzk1SDIrSWxHOHRkOHBYdnZ6OWVMMmY2d1J4ejVaSXJyOWRvNFF3aVorZjNrNzhmZjM5d2doRk9HcDNTTjZ0YjlVZkZIckhjL2EycWJydnZibjY4VHR2dnZZOFBTZG9sMi9lMFc5VUlSb09DaDZ0V2tuUGo3YTFONWJmN3RGM1BqdzBwQStmUEhHSTZManRkTkVvMUNFYUNnVlY3WFRpRWZmTEF3NTVzL1hkeEJQYnlodE9XL2ZuQ1Y2M1BGRXEvZjJ4K3M3aU9jK0xHOTEzK3NQM3lodStkdktDL1plS29xbkNCZ05EQWNHQWJsQU55QlZrcVFFSHhaRnlyS3NVYXZWcW9pSUNEazZPbG95bTgxU2NuSTcwdFBUeWNyS29rK2ZQbHg3N2JXb1pWbmxqeWhJc2l3TFJWRWtYeERCYjQ1Nm5FN25lMXF0TnBSMFRYSHhyN2MzNEU2L2duc3lUcjg4YWR2Ty9jUmYycFd1T2k1cTJiWHJTM3IydlFhakRLQmx3T0E4SHR1NUd5YjJKYk4zZnc3TS9UUGo1Ukw2NXZWbDVNaWgrSW1rQmd6c3k1eTdidVRBeU92b08yZ29RL05PenNsbTZYOFg1UlYzL1d4OGptUEdqZzJZWGpxZGpoM2JDbEQwc0dqdVg3elRxcXFJUGJ0MEtNQ3VuWHNZT01GTEdtREtHa0JQODZrTlh2ZUJiWHdtOTJadFhsS2d6VmlURWFoa3k5WUR4Sm8vWU1hTUQ3MDZqZHRCNGU0U2hxZDNQY2tWOVJnTWFqQWFNQmxpTVJqdE9PdzJzTzVqeTI0N2NzSHJ6TmpxTlJXZDdsTDJITFNSbmExang2b25XYmppUXlxdERtb3Fpa2tkZFhQZ2lqMXplNk1IMENXUm1sQkRWUTNnczhxcnE2c3dKWWV5Z1JUdS9wSzhBWGQ2dFRwZE1nUHowcys3VDlNWWE2S3E3TUk1Tkd0cWFyYlFzdElneEJTVkpFa0pyQnNhRWcwTjhxMnAxV2cwR3E4cDJzd2NGVkpUdHE0Q2VNckx5OWVucHFZK0ZCVHlaTVY3Ry9oWTdzZ3IxMlZ3MnJYSFNpTXJzU09ncEFBQUlBQkpSRUZVZHhZemNzUkZsdUp4aHNYWkNiM0hzRzkzTGdYNUJheGUramVlWExHZGZXdm5JZ01Ubm55WC9ydTJVYkJsQ3pORzlXUDN3bzk0Wk1TSkMwUXFkNnhnOEwxL2IvSDd1Tm12TVcxRTFvVVBwaGhia2c5WTBub3hZb1IvN1lZYkdUVTU5cFNQek92Vjh6cnRGRVZwZXRGUGVxS2VBVU52b25lQzk2OFJJMjRrSlQzbDlBWlA5akZFZU9FVFVGQzBaZ2FQdkpFVTJYKzltMG5ycktkOHkwSW1MUGlDL0kzdjBUWEJ3UG9uNzJSK1JSTVVxZVVUKzBXTkpoTldxN1dWUHNnWGRLUnNWaXNtaytHQ3RiZDE2OGRmTlFNMTEwbk1VQkdhdHhia1cvTUJtK3hQYUdzQ3R3QlZlQ0E2bXBiV2FaK2lLSnQ4c1F2ZS8vQkQvbDFuNXNXYmV4RjVCcy83NkEvZjhJbW5MY1BUREJjVnJsbGkyMUpjWEJMeWxjM092b3pkMi82RFZRRndzbVhqZG5KeWVnWW1sU0VobFJHM1RtRHhNdzlUc1c4L0RwOEQyV3ExazU3ZG40blRadkhRK0w3czJYZmdwRzJiczRlemZ0MTdyR3UyM1RXNDZ5bjdyZFhwVUtxcmZIMDhmVm4yeEJUbUxzMC9yV096K3c2azZzQlhKR1gySmpjM2w5emNYTko4UVlYczNKNFViUEdta3RRVWJtRlhWVk5IWXMxR1NrdThrY0VkMjNZRW5xMDZ2Uys5bGM5WUdZZ2FLdFRVV0lFRUJ2UlA1bUNGTTlCT2RrYm5Wb0gyOUZTYVRBWm0yQ20xeGdhdWw1bWVodEVnVTFGYVNrTFhYblJOTUlCaVkrMjZndE8rYkU1MkwvYnRDYVdLejg2K2pPMWJ0bmxYZzNPVWtiLzk0UG4zZCszWlEwNTJ6Z1Y1UDl4dTkrWVJJMFljQ3dJMkZ5MFRjNE55MTZTUVpOeGczNXBHbzBhcjFhSldxOVYrVVBORlIyVWhTUXJOelZHN3ZXR3R3UkExbUlZalBGN3dIVlpkQkFQbjd2ZStBUEZwZkhMdjFRRE1YdndxNzFjNHFYTzZ1WEhPUzJUMnVKelhidlJxQm05L3ZwOSt2WHBoa2k4cVhDTnorQVR5WHI2SnRLNXZrVFgwUHRZK05abVVRUk9ac3Z4OWNuS3VJa1ZucGNyWW40M2p2R2JYWnl0bU0vR1pqOG5zbWtKeDRXNG1QZktTMTNUQnpVUERlN0JMU1NmSjZLU3d4TTN5OVlOUHJtOW85U1FsbjkzTEs2Y1BaR3J2WjhuSnVneWpJWlZsQmUvUTlUUXV0V1BUVyt4Tzc4d2o0MDdOTUcvTUdzSGlTUjh4c0dkM3VtYW1VMVZ5a0s2ai9zYXJNMGR4MXlOL1orWGczekZnNjRzNDNZTGtJRk4wM01TN0dUcStINXV5T21NeFJ5RGpXL3RCbmNTaTVmOWd6TGlyV05ZMUU2V3FqRUZUbjJmbW1ONDhOUDhWeG82OG5aemx5VmkwRGc2V0NaWnQzVXJPV1ZIZzZabjM2a3VNSG5NRGE1L3FpczVaU2FtdEhmazdWNUUxZER6bUo2NG5iL0NuNk94VldCTFNUdnVxNllOR1lwaDJHd2NkaitGZit5ZHIxQlNHTGIyR25MeHJpWlZkS09ZbW1wK1haOS9CeS9uRkZPK3JRRmR5RTZzZTB6Tmo0WHNNeXpLZS9ZUzFIMkRqTGlQTGw2VmZrUGZqMEtHeVQxb3hRVjBuTUVPRkpNbEIwZEFtVGMydnJXbTFXcVJ1M2JyUjBOQkFRME1EalkwT3FiSFJpY3Zsa2hSRmtSVkZrWVVRYWtEN2YvLzNtUEhoaHgvZUJyVC9KWU5NWldVbFRxZUw1T1F6cXhUYnMyY3ZuVHRmZ3ZZYzE0cldWSlZqZFd0SnNZUytYVTY3bGZMS2Frd0pTWmowMmhiblZOdGxVcEl0cUg4bEh3bTN3MFo1UlJXeGxpUU1PbTN3RHNyS3FraElTVWJiN0Y1dFZlWFlNR0l4dDJJQktFN0tTOHZSbVMzRUdrSWR1dFVWcFRqUVk3R1l6NEdCcDFCUlZncTZXQ3pCYVRtS2s5S1Njb3lXWkV6Nk0wdkpXVDdySm5hblBjd1Q0M3VIdEZOWlhvYk9sSFJhdE80L1JiWXZtY2FUcFRtc25uUCtYVVpDaUxLYmJocjU1M2ZmZmRkT0UwV1JEYkJKa21USHk4UG1sQ1RKTGN1eUlzdXlvdEZvUkVTRWxvZ0luWWlNakNReU1wS29xQ2dNQmdOR281SFkyRFpJUFhyMHdHNjMwOURRZ01QaGtCb2JHM0c1WEZJempqWU5vR3RzZER5aTBXaW1ob0V0TEdFNWY2SllpMW02cVlUeG93YitUOW92V1BVcTZVUEdrV0k0LzE5TnE5WDZVa3lNNlFPZ2dWRHV0WHBKa2hvQWh5UkpMa21Tdk54cmFyWHdBbHNFT3AwWDJQUjZQVkZSVVVSSFJ4TVRFME5jWEp6WEZQV2JveXFWU3FoVUtzbmo4UWhabHZCNFJIQ0psZnZRb1VOcjB0TFNwb2FuWGxoK1BWTEQ4b1hMcUc3Rmoyako3TXVvQVJkK3pWYlptTWI0VVduL3N5Y3ljTlQ0QzliVzVzMWJkalh6clozUXZ5YkxrdkNibno2c0NqSkIxV2kxR2lJaUlvaU0xUG1CVFVXUXI4MFhIWlh4eGtZRDBWRWxQZjJTL1c2M2E3VXN5eVBETDBSWWZoMWk0dFpKazhPUDRYOGdqWTJONjBhTUdGRkZxRi9OQmJna1NRcXdlUkNvRFExbDhRakdMcjl2VGFlTElESlNqNnpSYUFJSEJLZCtCQmZHK3dJSkhyeVZDRytIaHlRc1lRbkxUNVdpb3FKUFd0SFdnb01HbnRZb2lwcW5lR2cwR2pRYUxWcHRCRHFkRHIwK0FHeWFRTGpVcitLcFZMSm96dllCZU16bStBSWh4Q2ZoWVFsTFdNSnl0dUx4ZUhiMDdIblo5eWZSMWxxd2VhaFVUV2FvRjZ2VXFOV2FGdHFhd1JDRldxdlZvTkY0YlZTWHk0dUFicmNiYjBXQ2dxSW9BWEFUUW5nQWQzMTkvYi9kaW5KbHJVdW1YUnRENjVFNWp3QlZzeUozajR2eTR6WWlvZ3pFUllZcHRuL09zcnRnTlRzT1ZJSXVpWEhqaDZNUFA1S3duRU01ZEtqc1B5ZlIxdnlNdVVwb3Nic3F4QVQxNDViZnQ2YlRlUU1KMGRIUnFMVmFMUnFORnJYYTJVb1F3ZDFpb1JmQWs5SWw4KzFMSDV3N01USENrMW51aXVUcGNkZlRKeUVTTDIzUk90Nzlyb3BLeGNTV3Y5MkN2eVQzeUtGdkdiOXNHM0dXZUk1WEhxVnpyenorT2FnTGNuaU1XNVh5SFRCbkN5eWE4YjlwWDZ2VFk1QXJtZnJRRzR3SUExdFl6cUVvaXJLdlg3KytlMXJYMXBxVzFzTy9ZSXNrQ1ZtV1dna2ErRTFRdjdZV2ljRVFoZEVZZ3h3UkVZRlhhL09hcEUzZ0p2dTBOam1Rck9zSHR1UGxoOXo1RDl6MDV1b0hiK2VoakFqbTVIL3Q2N0tYdHVpOWU2NmgrUnJqYjJ6OWxPNTVWN1BzOThONGQ5SzFmTHA1TzE4MVhDUUQ2ZnZYV2dWbEZhSDc3RFZRWEVySVN1ZUtBclp5MkxvTDNHN09hUFZ2QmU5VUtTa0d1ek8wQTdicWx1MmZTREx5aGpCMjlGQk9GUEYzTzZ3VUY1ZGdkN2JzWEUxbEdTV2w1YlRZcFRncEt5bW12TW9hZnJzdllxbXNyTnhZVm5ZNEdOU2NCTllMRFNtaFVrSzF0ZUNnZ2Q4RWJkTFdvcUs4MmxxYk5pYmtpQWdkV20yRXp3SFhsTUdyVXFtRnZ5SWhLSWpnYXd6Mzh1WExWd0xmcGNURzRHZ01wUzJLaTJ5WlFHalFhbEg1bDdPWEFMVVdnK3JpR01qK0ZwajJFT1FOZ3VHRFlJR3ZPRzN4RE9qWkg2Wk1nS3plVUZUdC9mMmhNVEJ1TnBSc2dTRkRZUEFZOE8waTF3eTdmUnlFZTFaQXo3Rk43ZVF2Z0FGallIQXVqQmtMMlNPOHY4OFlDVU5Hd3NneE1DZ2JKaS84aVdicTJtZm8zTGtYVTZiY1E5Zk9QVmk1bzlTM3g4bVRFNitoNzlBN21EcjU5L1RNSG81L2o3MXNCMzB6TG1YODVEOHhmdVMxakptNU5QeUdYNFFpaENpZU5ldlJMMDloaHJZb2VQZVZUWW5nOUE0dnNFVVFFYUh6SmVrYWlJbUpJVFkyRm5Wa3BJNkdCcTg2NTNScWZMNDJkZk1JYWJCSjZnRThkOTg5MFhyYjZCR3Z2L3pwZDdOSFh6djhsRGQweDNYWDhNRHJteGhmdkpmcVl6WGNPZnBhTHJsWWNsM2RFdFd4Z2owK1ptYUhBNHJYdzJOYm9YQVhtTlN3ZGk0ODlCU3NmUXllWEFrSDE4Q0lGWkMvNHN5YTJya05kdTZHRExPM25jQ0hKUk5XellHYUhaQTZFWjZaQkdlVnY2NVVNbTNTLytPeHRkOXdhN2FaZmF0bU0yRGFZNHpZdmhodHpXNFdyTEt5cGVwelVtVlFuTTZBdHJwanpWSzBBLzlFL3NKN3ZSRG9kSWJmOG90UWpoNDkrdDZMTDc3WTJKcTJKa21TM3d6MTBFVC9MVUlqb2NHZ3BpVWlRa3RrcEM2Z3JabE1Kc3ptZU9USVNEMDZuWTRtWDV1R1prbTd3ZWtmSWFrZmsyYiszNy9kNlZjVW53NXQwWmJQdnFCU1orR2VxN0s1NS9KMnZKRy9rd0EvNWE5ZFpNR3RRWnFWVGdmYnRvQWVtRGNUWnN5QWpidGhUK0ZQYjZyblVDK28rZHZ4UzU2dk9zZVVBcnBxYjNyMzJUbi9DaW0wWnpBZzI5dEl4c0JCcUFzL3AxUUJqT24wVDY5a3pMRGJtZnZNSW5hWDFRVEFNN04zZnc2c2VaenhrMmV3WlBrNmJJbzYvSlpmZk5yYTkwODg4Y1FYelVBdFdHTnJrZUxSSE5SYSt0WjB2a2lvSVZCMVlMRWtJa2RGNmRIcEl2SDYyclQ0bzZTaHFSOHFFUVJxQ3Q0SXFmdVYrYzhjLy91QWprdFBIUUJvWk9XbjMzTGJ0VmZTSjlYQzlmMzYwczFWd3FhUytvc0UyTUJvYU9rTFMra0pJMFo0dDNIVFlOVVRaK2F6VTl3dDl4bFBVUHNjWU1vNW45RWFPWmFsMi9jeWYvb3R5Qlc3R056N2NyYVdlVFV6THhYVFI0ekk2OHpXcFg4amIvUk1sUEM3ZnJGcGEydi8rYytuSE0xTVVMKzIxdW9TZThFWUZGeGg0TlhXV3ZyV3pHWXphclVhMldBd29OZEhobWh0VFVtNzZ0YTQybnpnSm5ra1NYS3ZXYm5pVFNIRS9wUGZrZ3BEaElvZnFtcTlMNlNqbGtQMUVnYmR4ZnZWN2o4QURoUkMxeHpJemZWdUtVRjE4SG9qV0N0RGd3b0FDVVlvOVRIeWJQdnNQSGZTWU1ic0xxZWtPcWdYU1psazZmZXhaVmNWQVBzSzhuRm5YZTdsSkhQYXNMcjE5QjQ0akJuekZqSWkzVUZSaVZjM1BERVZVMWd1RW0zdG05bXpaKzlzQmRTY1FmNjFWbEk4WkVKTHAwSzFOYjArc3BtMjVtVStVVWRIRzZtcnE2TyszbzdEMFVCall5Tk9weGFOeG9YTDVVS3RWZ3UzMnkxNVBCNmhlTU56UWdnVUVJb1FlQ1pNdUxQMmhUckxhenVtWERjUFRreGJOUG42SzdsNzFYdDhzVE9lbXFvcWtyTDZNRFJvN1lTTFRkS0d3c3l0a0pNRm1lbmVLT2JRaDJEdU9COSs1SHI1a2JPeXdKQUVHemRDTERCaEl0dzFDQloyQmJNQk9KL1VkdXBVWnM4YXlxMDl1NkEzcGJGaSs0ZGtHaXc4dGVDdmpCclpoK1daYWV6WlY4NkM1ZTk3MlYxckN1bWZlenZtakN6a21oSnFFc1l3TDlmTC9YdGlLcWF3WEF6eTQ0OC9ybjMrK1VXbjhxMkZKT1FHMFJLSmxxQVdFV0QxaUk0MjBxWk5HK0xqNDlINS9DL1NhNis5U21scEtSVVZSemgycklxYW1scnE2cXpZYlBXbnkvcWh2ZTY2SWZwMTY5YXRraVNwOTBudnp1T2l2TGFlaU1pby8xbUM3cytOM2NOaGc0cHFzRmhBZDVxWHJxNEVSUWRtNC85dW9yb2ROc29xcWtoSVRrRWZuS0d0T0ttb0tNZXROcEdjRUVweGZUSXFwckQ4ZWtWUmxKMlptZDJmMnI5L3Z3TXZpMGU5YjdNQmRoK0xoL04wV0R3TUJpK1FtVXd4eE1XWnNWZ1NTVWxKNFpKTExxRkhqeDdvOWQ3UHBicE5temJVMU5SUVYyZkRicStub2NGQlkyTUVXcTBUbDhzYklWV3JWY0x0OXJOK3lIZzhua0N5THVEWnNHR2owMnExdmhvVEUzTnlZRk5wU0lvMWhVYzZTSFFHU0QxRHJTczI0WC9mYjdYT1FHcHJIWmUxV0pKU1d6MUhxemVTbW1vTUQvcEZKc1hGeGUvdjM3L2Z6YWtqb1FwTnE3djd0TFhtdnJVSUg0T0hWMXN6R3IzYVdrSkNRZ0RVQUdTejJZekpaQ0k2Mm9CZUgwVmtwSTZJaUFpZnI2MTFmMXRRMUNLdytJTEoxT1k5UlZIV2g0Y3hMR0VKaTE5Y0x0ZUhsMXpTZVg4elFEdWxiNjAxdjVwR293M1FFdW4xVVVSSEczenBIZWFBYnkwQWJBa0ppY1RHeG1JMHhtQXdST0ZOLzRpZ3FTSkI3VXNCVVlrZ0N2R1FFaXU4aXk2NEtpc3JYdzBQWlZqQ0VoYS9mUG5sbDVzSVRjWU5BSnRQVzNPZlhGdlROS3NIYlNwME54cTl5YmdKQ1lsRVJVV0ZBbHRTVWx2TVpqTnQycGlJam80bU5QMGpJa2hyMHpTUGtyYlEydHEyVGRydWNybVdoSWN6TEdFSlMzMTkvZklycnNnOTFBelVHaytrcmZtWDFHdGVOdVduSkRwUmVrZFNVdHVXSHBISXlFZ3NGZ3R4Y1hIRXhNVGdUZi93SnUxR1JHaDlLU0FCY3pTNHpFbzBxeUYxUzVMazJydDM3MUxnOEs5dGtESXp1NFZwd2NNU2x0TVVJY1RoTld2V2JHMU5VMnVtcllYa3JiVVdDZlZYR1BpNTFwcW5kMFJHUnJZRU5vQ2twQ1RpNCtOcDA2WU5ScU9ScUtnbzlQcElJaUw4NEtZNWJWL2JaWmRsZjJlMzIxOElEMjFZd25MeFNtVmw1Y3F4WTI4LzNreFRPNkcyZGlMZm10Y0UxUklSNGMxWkN3NFl4TWZIazVTVTFHcjczblhJdFZvc0ZxOUo2ZzBrUktQWDZ3T0JCSzAySWxoekU0b1FPTjBlNGZZb1FoRk5yQjkrZE83YUkzdnBzL21GbTBNNEhOd08zdnBvQjlOWGJPTHgvTjBjYVJUaDBROUxXSDZGNG5hN1A4N0p5Zm44TkxTMWtLWDEvTlVGdmxRUFh5VlVSRkRBSUxnZTFJekYwdmFFVmxRZ0FhbDkrMlQ4Z1lTWUdDTUdnd0YvSFdtdzFxYlJ5RGpkb05ab1VLbFVJQVRDMXprL3VCMDZlTUM1WU1OL2x3UUQyN0wzMS9ONmlaTXhmYktJc3g1aXdxclB3aVUxWVFuTHIxQUtDd3ZmTHlzNzNMeTZvQkZvREFZMUg2QXB3VFdoVFZIUUptMHR0QjdVR0FnWXRHK2ZmTUkraEZRT0ppVzFKVDQrSHBPcERkSFJYcE0wTXRKcmtqWnBiVHJNYmFLRklUS0NDSzFHcUZTeThHSmJ3RmIyU0JLdWcwL2Q5N0hMNmZ5WDk4cU41Tzg5d2wzWDVwSFR3Y0xFRy9yZytxYUlyeHZDa3lBc1lmazFpZFZxZmJWWHI1d1NIM2dGZzFwd3dYdHp2aldmdHFacVJWdlRoVlFZbUV4K0U3VHRTZnNSQW15SmlZbFlMQmJNNWpoTXBoaWZTZW9GTjUydXlSejFSVW1GV3ExR0JOR0xOR2x0a2h0d2Jpc29lRVVJOFNWNGNDc0NsY3JYbkt4Q0pXd1VWN3ZDTXlFc1lmbVZpS0lvWHozLy9LTG1BWU9BYjAyU0pDZXQrOVo4SnFoR05HbHJUV1ZUM3B5MWFFeW1HTXhtYjhBZ01USHg5SUVOb0YyN2RpUWtKUGh5MjR3WURGR0JJbmsvQTRnL2tBQUtpcEJRYTlRQklrcEpDakJndXNkZE43VGkrUEhqTDRDZVBwMWlXYlc5a0tNMk94OTgvQ1UvQ0ltR1JuZDROb1FsTEw4UytmYmJiMWZQbURIRDFncW8rVFUyUDZnRnAzaTBXSEdxaWJuRFgrUWU1VnZoUFphRWhBVGF0VHQxT1dRTFlJdUppU0VwS1Ftek9kNlgyOVpra2dhRG15eEJuY01qZEhvOUdwV3ExYVJkSk1rVkYyZmU0SEs1WHJ6N3hpRjA1d2lUWHQvQXAwb2lBMkpWNkhWaFRxNndoT1hYSURhYjdZMnVYUy85SnNnRWJXeW1yYldhak5zVU1OQ0k1cUFXV3VUdUpaQk1Ta29pSmlibWxQMXBGVm5hdDI5UGRYVTFWcXVWK3ZwNlh5RjhJMDZuRTZmVGlhT2huaU8yUm93bUUycVBrOFpHQlVWUkVFSUlSVkVVRUI0aGtDU1FrU1RWSjU5ODh2SlZWMTNWYTlwTnY4a0djTmVWYy9XMmFQNFVIMTZwS2l4aCtSV1lvTHRmZmZXMXphMzQxWUpCellVMzE5VWpTWkxTUEJtM3lhOFdXalpsTUVTSEZMeTNiOS8rdFByVUtyQnBOQnFTazVPcHJhM0ZacXZEYnJmamNEaThsRWFPQnI0K1ZvY3FNZ3BKdUdod0s4SXRKRW10VWdraEZEd2U4TklhU1lvQU53TFgxVmNQTE52ejVhNUZYM3FpRmlkcEZkNzUrSE95Y252VE1ZeHJZUW5MTDE2KytlYWIxUTg4OElEMUpDWm9pMlJjMzZwVExkSTd2SDYxbGxIUXhNUUVrcE9UMFdoT0R6Uk95S2Rxc1ZpYUplNUcrMnBKSTRtUGk4T2tqd0NWQ2ttbFFwSzlxQ3ZMS2lGSkNDUkpTSkt2WWwvQ0pVbVNNL095N0UybEpTWFByaTg2VE0vZWZYbDZjT2Z3akFoTFdIN2hVbHRidXlRam85dUJrMmhyZm1Eeis5WjhBWU1BcUlVdzRucWpvUDVhME9pUVJOem1oZTVuckxINUpTVWxKWWpTeU82ak5Hb2tQVm54Y2JiWnFLKzMwOURRSUJvYkd5V1B4NE5hcmNiajhRaWZCQlpabGlUSm1WaFQrdEtNMy8rK215ekxnOEpUSWl4aCtXV0wyKzNlOHVpanN6OXVCbW9PbW5MV1RoUUZEVFpCaFplMUk1ZzhVdTh6UVUwK0U5UkNTa3JLR2ZYdHBBejRVVkZSSkNjbms1aVk0RXZjamNGZ0NDNlVid29tK0d1N1ZMNUFnbitwUG9JcUV1NjY2KzdqaHc0ZGVnRW9EMCtMc0lUbEZ5MC9mdnJwcCs4OSsreXpEYTJZb0k1bUptaWd3aUEwWUtBV3dacWF2OERkWUlnT0xLUG5OMEdiczNmOEpJME52SUdFMnRyYWdOWVc4TFU1dmRUaGJyY2J0OXVOeCtOQlVacUNDRUlJZk9BbUNTSGNnQ1JKa3B5YTJ2RnpxN1YyUVhSMDlOenczQWhMV0g2WmN2anc0V1Y5Ky9Zcjg0RlhNS0ExTjBIZFFSVUdvbWxSbHRCZ2diL0FQU3JLNEV2dGFFTjh2RGUxNDNRREJtY0ViQUFkT25Ud1JVaHRORFEwME5qb3dPbDA0bkk1ZzRETmpjZmpFUjZQUndvR09KL1dKdmxNVXBja1NTcWpNZWJmalkyT05LMVdlMWQ0aW9RbExMOHNzZGxzYnlRbnQ5OUZhR3BIY3hQVVJXalpWQXNUdElsakxiakFQWlNPcUVPSERtZlZ4OU5hakMwNk9wcjI3ZHNIMFJzRk0rNzZxeEw4eEpTYVU1bWtUcUR4d3cvemx5aUtVaENlSm1FSnl5OUgzRzczUjRzV0xTcWc5UWhvUUdNN21RbnFCeld0TnFKWmRZR0JtQmhUZ0k2b2ZmdjJSRWRIbjFVL1R6dER0bjM3OWxpdDNrVmVRclUydjBucXdlUHg0UEVvSnpKSkVVSklQdFhVT1d6WXNQTHZ2eTkrdmtPSDFBNlNSS2Z3bEFsTFdIN2VJb1FvM3JGang5by8vZW1odWxaTVVBY3RBd2FlRTV1Z1hrMU5wNHYwc1hiNE9kYThCZTdKeWNsblpZS2VrY2JtbDQ0ZE85S3VuVGNGSkZLdkIwMGsrcWlvSUdMS0NMUWFEWklzQzFubFgwaytoRzAzRUVpUUpNblpzV1BhenBxYTQ4L1Jjdm5NaTBhc3BYdFl2MjNQdWJuTzluMFhwTS9iMXErZ3pQcHpmNjZ3ZnR1RmFzMU93Zm90T0g4aGM2VzVmTFpwTlFlclQva0t1b3UvL3UveWZ2MzZselhUMWxvelFmMkp1TDdxQXE4SnF0SDR0YlZRdjVxL1pLcE5tMWppNCtOcDF5NkpqaDA3L3FSN09pTmcwK3YxZEdodjVxMVBDbm45NnpJK0tTbG4wM2VWTktpOU5ySWtQSlJVMTNITTdzUnFkd2k3UzBGV3FZVXNTMEtTVUJUaFhZdFVDT0VXQXBja1NZMnhzWEh2TlRRMFBQVkxBYUluSm85a1c5bTVJMXlxTE16bm1aVmJmdkoxeWo5YnhTTUwxMTZRZTFydzBPL1o4VE9QYTFjV3dqTXJXM2xPTytEZWVlZTJyZDByNS9Ga3dVRzB2NUM1MGx4ZW5uTS8yNHB0SnozbTJMSHFGOU43OU4wVHBLazVnamRKa2hxRFFhM0pCSldFU3FVV1hsRFRpaFBWZ1hyejFjeTBiWnRFaHc0ZFFsYWNPdS9BQnRDMlhYc20vbTRNODM4L2dnZHVHRVMvOWtiMjF6aUppb3JDRUIzRHBSM2FrWjZVUUx1RU5raEN3WVdNTEt1RUlvUUFTY2l5djFCZStCa0FHbk56YzVlNFhLN1hmZ0grQlFxM2ZVaFpqVGRvRWlyZUNhdzRiQlFYbCtJTW1zLzJtaXFLaTB1d3UwTW51YUlvcEE2WnpNYjVrMXU5bHNOV1JVbFoxWm4xMFc2bHBMU2lCZGVkdzFaRFNYRXhOb2Y3RE83SnUzNW9jVWtwZG1mTEY3U21zb3lLNnBZdmhLMnF2TlYrSzA0N0pjWEZWRm50NTNXY0ZBVlNoOERHK1MxL3Q1WEQxbDNnZG52L0R0bnZnSklTc0xlaWVpbDQ3WXFTNHViNzdUejV4QnRNbWpUMmx6VlhGQ2RsSlNYWVdoblg1dU5rdDl2LzNhTkhqK0I4dFJZbUtDMVRPM3hyR0toRU1NZGE4MkNCbnppeUtWK3RQVzNidHYzSmMrQXNxdEFqdUs1dlQ3NzZTc1p1YnlERmtzQ250ZFVZREJHNFhHNGtXY2FHZ3NmalFhMVJDNkZTUzJvWkhJMU9aRmtTRWlLUUFpSzhLU0JTWWVIWGNrRkJ3WXVEQmcxS1VLbFUxLzBjUWExdzNUTk1lK1pkQ2cvYTJYM1hkU3d4cUJrMjlaOU1IWllGd0t2VGIyUjFUVWNxUDlzTWVoM3F6SnZadG1RR1Q5dzdpR1c3UGFRbDZOaXpyNXpacjc3TjJMN3BnSU5aNDRhVFgvZ050cXo3MkxOc1JxQ3RSVk4vdzRvRGNhamR4Nms2V0VqSzZNZFpPMi84S2Z0WVhiaUdBWU0rUUVjMUZmbzhDdFkvVDRJV1ZzNFp5NnpWMzlNNTFjekJ3aUxHUC9FR0Q0M0tPZVU5clZ2d0lGT2Uya1JHVm1mS0R4UXpkKzBYREVuMzZpWExabzluc2ZVSSszYnVZdXJMLzJINnNFeHdWek5yL00yc0xGSkkwZHVwTnZSbTNlcC9ZZEZCeGU0MURCNzFKMUl5czdCVkhpUjcvTk04TlhIZ2VSbXJXZU1ndnhCc1diQm5XZFB2RDQyQmJVVlFVZ0ZEaGdDeHNISWx4QUk3VnNMNEdaQ2VDUWVLWU81eUdKWGpQUzkvQWN6WkJycURZTlZDalFtS2ZBdE5Pb3JXVTJEUFlVbWE3aGN6VjVTYWc0d2MvQnNxREYyUjdRMDRLcDNrK3ZZMUg2ZWV0LzhqUDgzMXpZZUhEeDl1TFZldE5STlVDYTRGOWE4SnF0Rm9SZE1xVTVHQk90Q1lHQk94c1hFa0ppYVNuTnllVHAzT2tidGRDT1dzdHVQSHEvbDQ4d2YwdjJVODE5My9aKzY3N3o1R2ovNHQxMTU3TFZkY2NRV2RMMGxETnNRUmIybExiR3diU1ZLcEpKVldLMHV5ckpKa1dRTlNCSklVSlVtU1NaS2tSS0REdm4xN2h5dUs1MU52d2NMNTJZNGNxUkNIRGgwNjYvTnY2eEVsM3RydmJQSDdLMys4WHNUM0dpVitySGNMSVJUUjBHZ1hRaWlpdHJZbWNNejNHNTRRSGE2ZEduTGUvcmRtaVc2M3pRMzU3ZmtIcnhHWDN6WlhlSVFpWEljTFJMdTRLOFFQbnBQM2EvOWJzNFNtWFQ5eHFFRVJRampFSDMvVFVmenA5YzlhOUtGdS95b1IzK1ZtVVgrS2U2cjlhcFdJYTNlRjJIL000ZjJ0c1VZY3IvUGUyeTNkVk9LUEwyNFhRaWhpNzc5bmlrNDN6QkJDS0dMemM1TkVqNXNmRVkxQ0VVSzR4ZE4zWHluKzhPSTIzL081VHR6eGo3V0I2emMyT2s3K3JCdjNpVDV0RTBWaVl1aDI5ZjN6VDJ1YzlyK2xpRzYzdGZ6OTIzY1UwZTJXME44OFJ4WFJLVkVSbnh6Mi92M2p4NHBvMzA4Ukx0LytENTlUUkdRN1Jldzk2djI3b2FIcDNDOWVteUc2Lys2eFg5UmNlZmZ4c2FMZmZkN24ySGhraCtnVXFSS3ZmRjdkWXB6Y2J0Zk85OTViK3dEd1cyQTRNQmpvQzJRRFhZRU9raVFsK3Q3aEtGbVdJMVFxbFVhdFZxc2lJaUprZzhFZ3hjYkdTbTNidGlVdHJTT1ptZDI0NG9vcnVQYmFheGs5K3JmY2Q5OTkvTzF2ZitPVlYxN200NCszY3Z4NDlWbmpVZlB0ckhtRFRNWW90dXd0SnJKYkg0YkZleWd2Sy9ORlNOMDBOdFJ6eU9yQ2toaUh4dDJJUTNpRUpNbVNKS3VFMS95V0ZDRjVrTHhxcXdUSWtpUkpHUm5kdmk0ck83UXdLU2twVnBLazlGOWFJR0R3eUZ1eDZMM1d2VTdyL1lKWEZHNWk4ak92Y0tDc0dzVlJSYVdjZDFyWDZwMlhpd3pJU2NtWW5kVlluWUR1NU9lazVWNU5zZzVBUy8rQmVTemN1UnZHNW1BcjNjbU1lZjlpOThFS0ZMZU5tbW9qVnVCa1hveGRPd3BJSFhRelhXTjluaU90RVpPMlNkSHZuZWRWWjVKU1VyQlZmUTdBMXEyYjBkcHptRFhqWVFCS1MreFU2QXFCUExMNzltUEc1RDl4YjhWbjVQWHR6NmhoZ3pqcG1sL2FybXd2Ly9HQ2pGdkpkaWhYdzVyNXNOWnJwV0hkNHkyUDhSZnk5QndLR1didi8zVkI0MUJaZlJTak1ma1hOVmQyN2Z5Yy9pT25leDl6UWc1OU00eUJmVTNqOU9sM1NXMlQzbnAwK3YxSG1nVUtnaU9nSi9DcnlhSnBCWGQvc0tBcEFtb3dHSHhyZ3JZaEljRmJCNXFhbW9ySlpEcG5ZM3FXd09aaHhYc2IyQk9md3hQWEdQaitteUtjUGxvamg3Mk9UNDdXMFM0NW1XakZRWDI5MXo4Z3ExUklzcG9JTGNMamNlTlVFRWlTZ2k5eDF3OXd5Y250UDY2cU92cGNYRnpjVENEK2x3UnNPcU9obWJPcGtGR2ovc3BqNno5Z1dIWUs5bDFMc1V6NDhQUUdSZzRhR3ZuTUhkQ0szNE9xVkRGaCtHME1XL1FoOHdkbm9xN2NnaVh6cno4NURDMEg5OC9uckZLQXJOeHJHVEhZOTAwYWNTUEdoRlFBc2tiTVlGL09jUEkzRmJCMDNuMHMzZkpIOHArNTk4UU5PQTh5SXUrM2xEVHJhTmRoRDdEaXNRbm5mT3lNeVRCeVJOUGZJOGRBUXZCK1krdm5tWTNSMk96V1g5WmNrZVhXM0hUQjQxUzE3UFYvdi9IZzlQdS9KN1N3M2RHS1h5MUE5UjIwMkxId3J3bmFNZ0pxOEFVTHZQeHFiZHQ2azNDVGs1UFA2WGllQmJBSjN2L3dRLzVkWjJicDczcGhrQVdlaGdZY0RnY09XdzNyZGh3ak9TMmRSQnhZcmJWNHpGTmlBQUFnQUVsRVFWU0JVcXVveUFoUjV4U1NUcTFHOGJnQlNaRWxDUUY0Q3hTOC9qWWhoR1EyeDYrdnFUbHVpSW1KK2V1cDlaUUxLd2FqbnFyS2F1aWFjT3FEcThzb1ZhZlF0MmNLTXJCK3pidTQwWiszdmhYdjJFeVpZemJKT2lmYkNyYVRNL1lQNEs2a3ROcEkvN3hNMU1DTzlldXBWRTU5VDltNUF5bVo4dytLcXFkNHRUYTNsUnFIQVpQaHhQR21BZjJ2NXFGdHhXVFBHdXZWeGhRN1ZUWGV4cXhXSzdISkdZeWVrRUZ1a3B1OEo0dE9malBhVkJhdmZZL212bTJ0NGFkOTFmVkdzRlo2dmR6K3laK2FCNFpTa0ZPaHQ0OUFvcXJxOUNaZTE1NDVsRCt6QVNlMDBFQi9ybk9sZDA0djVtM2JDcmRtNGF6Y3liWWlLd044KzZ4V3E2TkJpbm5sd1VmKzN6NmEwam9jUUVNSXFMVk03ZkJyYThIOGFxSzF5Z0wvS2xOdDIxcElTZWxBNTg3bm51bm56SUd0NFFpUEYzeUhWUmZCd0xuN0FWQkZXM2lxZHdxRmhWOXlTTkdpUG5LTWIreDF1QnZzdE5GSFl0YnBpRFhGVUgva21LaHY5RWpDSTRSS3JaWmsvTVNVSWZXa2toQkNOcG5hdkdXejFVVkZSVVU5OG5NQ3RnbVQvc0Q0Q1ZleDJHUmd6Q012OHRESW5pYytPR1VBVS9JZXBXL3VOYVFaRk13cDhZRUhYckZqQmFPbS93dDdWUWtsVlRKOSs3NVA1ckFIV1RSajFGbjN6V0wyTUhiUTFhaXBwdEk0bElMUjJhQlZtRDZoTThOeis5QXpXWStjMUI2TGZPcDdNbWFONE5VWkh6RTBwd2NaV1oycExDM2xzWldmTWpqOXhBYmtnSWx6R1ByWmI4bnNlU1VaS1NZT0hpaG04b0wzdVhlUWdiVlBqT2V4OVVmSlNJMWxYMkVSanl4OCs1UlRNeUhwekwvaUZUdGcxSFN3VjBGSkZmVHRDNW5EWUpIUDM1NlVDNE9BckN3d0pNSEdqUkJyaHVYellWeWVOM2hnTFFkdER1UXZPbzBQWGMraDVMa2ZaV3VaazBISjJsL0VYQmx5N3l4ZUhuUTl1UU0vUU8xMFliUTBxYVBMSHYzZGkvYy9zMkZYTTFCekJJR2J0eGEwbFdDQmY2RmpYd1JVdEJZQmpZa3hCZFl0YU44K2hmVDBUa2lTZE03ZlUwbUljNU5uYytUSUVmYnUzY3QzMzMzSG9VTmxIRGxTd2JGanh6aCt2SWE2dWpycTY3MUY5UFgxRFRoZFRzbnRMYUNYUEI2UEpJU1FmWnNhMEFCYUlZUU9pTFRiNisrSmpJejh3N202NGNyS1NweE9GOG5KN1M0WUdGYVZsZURXbTdIRUdzNTdXMjY3bGZJYUI4bEpDU0c1UERXVlpkZ3drSnh3WmhxUDIyR2p2TElhc3lVWnZmYjBzb1BzTlpWVVdkMVlrcExRQm4wNkhiWXF5cXRzV0pKU1R2dGFGMUlVTjVTVmdkRU1wak1ZcW0xTHBqSy9OSStWYzBiL2d1YUttL0xTY2t4QjQzcjgrUEVYWW1QanRqUXpQUnNBdSs5ZnI5WW1TVTdKbTJRZkFEWmZaWUUvVDAwMEFacUI2R2h2L1dkY1hCeUppUmJhdDArbVU2ZE9kT3ZXN1pTTHNweXRxR2JQZnZUY21HZ0dBNUlrMGRqb0xZNTN1ZnlGOFFxSzR2R1hXUGxEc1Q1UUZVMi9CZHU2WHMwTmdLKysrbXJQeUpFalVhdlZ2YzlGUCt2cjYvRjRGSXduY3BxY0I5RWJUUmdpdFJla0xWa1RRVXgwRk0yL2dib29JOGFvTTdmcVpiV1dtSmdZTktyVC82cHFkRkhFeEVTamFvWmRhcTJlTmliVEdWM3JRb29rUTR3SmRHYzRWQ2xadldrOFhFYlhIbDFSL1dMbWlreDAwTGpXMXRhK1BHalF0WnQvL1BGSFZ5dkE1azNDOWZuVkpFbHlOVE0vQTZEbU56LzlDeHo3QXdWdDJyVHhyVm5RTm1CK25tdS8yamtJSHJRdXFhbXBPQndPbkU0dnJaSGI3UXBRR25rOGlnL2t2R0RXQkdwQ2VKTWxGY1ZYVjRvUXd1VjN1cTFiOTc3MCtPUHpsanp5eU1QcWlJaUllN2hvcFlibEM1ZFIzWXFDYmNuc3k2Z0JQUW5MLzBqVXNZd2ROK0lYTzFmcTZ1cGVlK0NCQnpaLzhjVVh6ZlBVbWtETkd3SDFhMm9lZk13ZC9naG84d1JjYndUVW42c1d1c0pVV2xwSFVsTlR6KytRbk9zTGR1blN4Y2ZaNWd5a2YvZ0w1UDJhbTI4VFFnaWYxa1pBbFZNVTRXY0NrZncrdHpsejV0VEV4NXVYM0gzMzNYSkVSTVRkRitmYlkrTFdTWlBESUJLV2N6cFg2dXJxWHYvclgyY1Z2UDc2c29ZZ1RhMGhlUE9ER2tHVkJiSXN0UllCRGZqVnZJU1JocUFhMElSQVdrZVhMbDNPLzdmbW5Ldnpra1NYTGwxb2JHejA4Ylc1L0Z4dEFjMnRLWkZPQklHYlFBaWgrSWhBUWt4VVNaSjQ0SUVweDdSYTdaSTc3cmlEaXhmY3doS1djeWQxZFhXdlAvYllZL25QUHZ0c1BhR0Jnb0EvelFkcUlmbHFYaE5VYmhFQjlTL0UwcHd3MHB1cjFwYlUxQTUwNmRMbHZBUUx6anV3QVVSR1J0SzVjK2NnV2lPdjF0YmthL09hcEQ2ejFBOXV3cWVsK1NPbHdlQW1TUkxTUGZmY2U3U3hzWEh4M1hmZnJlaDB1bnZDVXpNc1lUbHJVSHZ0cjMrZFZYQVNVR3VRcE5CVnBvS1h6Z3VPZ0RacGFrMEp1REV4eG9CZnpaK3Ixcmx6WnlJakl5L0kvWjJ6NEVGcjRLYlQ2UUxnNXZINHdTM0ExZWJYMnZ5YkQ4YkZpWFJCQWJCaHcwYVhKRWw3K3ZUSmRXczBtak1PS1B3dmdnZGhDY3ZQU1dwcmExK2VQSGx5d2VMRkw5cFBwS25SU21WQkU2akp3ci9BY1dnRU5LckZlZ1YrbjlxbGwxNksyV3krWVBkNEZqRjNENThXN21YTzZueit1TEtBVjc3OEljQkQxVmhmdy9LUFBtWEd2emZ4bDNlM1U2eEVjY2tsbDlDaFF3b0o1amdhRkluRDlZM1VDSzF2ZFhsOThPcnlRcVBSb0ZLcGhUK0QyUjkxb1luRHJSRndQUGJZWTdVMzN6enFCYnZkL3ZTRm5oUUg5K3lrMm5HdXJ1WmszNjdkMkU0NzQ2YWNrVG0vNGNCWkVIOVpLNG9wT2dQMmgyMnZQc0s5VDY3NTJiK2tJM09ncUpYbnNXOFhaL0JjVDBmY3pMdHJORnRLN0QvcHVaNUtLa3VMS0trOFM3STc5d0dHWk45TTJVa09PWDc4K0F2WFhETW9QOGluMWtKVG95VU5VWEJodTQrR0tOU25GaG1wOXlYZ2Vxc0s0dVBOV0N4dDZkQWhoVXN1dWVTOHBYV2NPMkJUNmxpenE1d3VxUjI0SWFNZG03ZmtNMnRyQ1FBL0ZKZndkYjNNMWQwN2t4MHJlT0NGVlJ3MnRDVTlQWjFvblliOURSTDFIc0VSUllQUmFNUmdhRVpTNlFNM3Rkb1BibDV5eW1ZRWxZMkFZOE9HRGZWUlVZYVhiRGJiNDc2QnVTQXllK3pWRkpTY0sxN01TaVlPdllraSsra0RZV2xKTWM2emVHRS9XL1U0MHhlc08rM2piVFZIcWFpeS9leUJiZnhVU0dobEZrOGN5aGs4MTlNWXFSMUxXVkdSUnY5VS9VOTZycWVTdGZQL3dMelZoV2Y5b1N3cExqMVJ1WnpqNk5Hano4WEd4bTBKaW42ZURxaDVKRW55K0lNRkxjM1BVTEpJZjFXQm40SW9QVDM5SnpIaFhqZ2ZtMnppOGZIWEJ2NXNZei9LZmJ0L2dQNnBkTzdlazhlNysvZWtzbXZ2ZnJaK1g4MUQyWjF3dVFZU2s5Q085emV1cDZEY2dja2srY3pTUU5vSFByOWF3TmZtZHVNckpjVVQ3SFB6cFlRQUVCMXRYSGI4ZUxYZFpESk40VHpXbHBidVhNZmlOWjlTV09IRS9zeWo3RGJMNUk2NG0yRTUzakxwZlZ0WHMyVDUrMWpsTm95NWR5cURzcnc1T29xOWdrWFB6R2RIMFdGaWt6c3k3dDVwWktjWTJaMi9qRlZidnFERVZzT2lPWC9Gb3BVWk91NFA1SFUrZFFMdDd2eWx6RisxbVlTTXE1ZytiVHdtTmJpdFpTeGU5REs3aTc1SDBjY3hlc0lVQm1lbmdMT2NwK1krejg0ZHV6aGdyV1Rtek8vUUpmZGk1cjBqQWk5RC9zckZyTnI0QlJqYU1tckNKQWIxOVBYZFdjMlN1WSt3N2VBeGhrMzRJNlA2K2twZjNGWldMSnpQcHAzZmt0RDVjcVpPbXhRbzZONjNiVFdMbHI2UERTMFpBMjVpMnEyRE9SK3B1UHUyd3ZKTjNobmNPK1Rad0tvdFVHS0RSWFBBb29XaDR5RFAxL1h0NjJEWkduQWJZT0kweVBGWHVUdmdtUVV3WkRBc1hnQjJBMHlmQmVtKzRYaDE4UXNNSC90QzA3MmM0cm5hcXc2d1lQNGk5cFRVa2pub3Qwd2ROeVJRY3JWajNXSmVYZjFmbkZvamVjTnY0NjZodlZHcTlqSG4vN2QzN3VGUmxIZjcvOHpzSVp2TlpyTXNJUWtoaVRGZ2lDSEVpQmdSSXlJaUlsSkVSS1NJaUpRaVdxcldvclZLS1M4dlB6elVJcVVVclZJOElaNFFFUkVwSXFVVUVSQVJNVWFNTWNRUVlnZ2hoR1d6MmV6T3p2UDdZL1l3dXptQWVLSytQdGMxMTU1blptZWV1ZWYrbnU3dndoZll0YldDdXJLL002dm1uNlFWWHNhTWNZTlB3TkpjTEYvNENCdEx2MkxJMkl1amtheWhnb1VMRjFOV2Zhd2hQam45cVNjZWZXQTMwYldmTFRIbVo3dWdwbXR3SEFWcWtVQkJBb21KMGFDbVZSWDArdlpraUw1ellJc1puOVkza0p0K1Z0c1AvTWVwT0tJeUtUVUpnTHk4UEJSRm9WdEtOK0piV2toT1J1ZHJDeTFoOEFxREcwQWcwQ200aVM1ZG5Lc09IYXByN3RhdDIyM2ZsU3FJUFNPUDRjTnRiSC94RVlwS0xtTkl0cG0wRE0xUFY3NWhFU1B1ZkkwRmkvNlhaRjhsTThaY3hkSnQ3MU9jWW1icGZUZXl6bmNGODJhT283NXlEdzBOYnNpeWs5NnJIOE10RnRZc2VaSGlJVmVRYjRPczVKTklvRldxV1BaeU9RL2Uva3RXekwrRHlYTXNySjQzSGw5OUpZMldiQ2JmTmdwZi9XNXVHMzBaUzNkK3lzQVVPNE9HWG9IczJrMWxiUitHRDc4QzJSYXBYWHh4OWczTTIyWm53Wnhic1hwcUtOMVhIZ2EyTFM4L3g4Z2xEekVoZXhzVHh0NU1jZlc3WkprVkhweHlCWnZOVnpEN3pqc29YZmtvSXlZM3N1dmwyVkMzbFJIai80Y0Z6LzZkYkx1UGJYczB3Y3ZPZ0czYnFzZlpzUGRRek0yeks3ZmRONE9VVG1ablNqWU1Id3BUUjhQWWV5RXQrTjMwWGpEY0FtdVdRUEVRZ3NjMWFGNHZnNmxQd01KSGdGb1lQd3cyN1lFc1N4RFk1c0c2N1RCMU10QUlqUzdBQWREQSt2V1YzRGV2VUhmbGRISmNQZFdNSFh3RitWTWY0dlpSYVN5Yit4dG1laXdzbWo2WXh0MHJHRDN6RlpZdmV3aUgyc0R1YXMyTWxhMHBEQjErQmQ3eURjaFpGekI4ZUJIVzVCTTNDVjQ1N3hjczNKdkJvdnQreWJwRjkxS2hvMnR6cHY2TStuTm5mWEg5OWJiblI0NjhKbFQ3R1p1bkZscGFPd0sxVUZWQlorYW5CbXBkU1V0TEpUTXprMTY5ZXBLWGwvZURNZmx2Qkd6Vit6L2hzVThDUERuajdGaDdsV2ZXYkNUdTdBRmMyU011L0c2ZlBuMUlUMDhub2JtWjFGUTZDaUlFdnkwRWhLT2xIWUliYUlDWW1wcTJmdi8rL2E2c3JNeGJaRmsrLzlzK1VJNjBYcFNrOVNMTlppUy8veUJLOGlLSGJ1bkN2ekJ4MXF1TUtNa0Qrak4xNkZPc1dMdUw0aWtEYVd4b3dKcVZRazV1QVVXRlJib0xNNStVYkR0MnM0VitKU1gwUDlrS0d0bkt6TGx6S000MlVqajN0NlNNZWc3WHZQSFlldzFpNXFROGR1N1pqVnROSVQvZHpjN2R0UXdja1VYL2toS2E5cVNUYk02bHBLUkVCNUxWTEZ5OGxRVjd2bVJZbGhrb1J2Y3BCU052Wk5xb0lVQXhBMmY5bWIyMWtHWFp5c0oxQ3Bzcjd5WGJEUDN1K3dOUDlQb1pwWjdaNUxzYmFGS3NwR1JrMFM4M25YNzlUL3gzTEE0bmFXbHRiaU1ZVDBEemtyT2dKQXRzeHJhQWw1SU5kalAwS3lIcXVDNTZCTzU2QWdZSDkydjAwN0I2Szl3K05QZ0ZEOXk3Q0lha3gyeXNxWkpLVndiWitpSmIyZGJoY1MxYit5eGxHZGV3Y3Zvb1pHRHV2YmVTZjgrTExKbytHRzlESTZyRlJscEdOZ1ZaL1FnZkltc3lKU1VsN0Z2dHBLbFhVZlI1NnRoaHdQSVZHNW01NmlBREM2d1V6NzJISmF2L0VQR25IV3I4b0xYVi9jcklrVGZ1cDIzdHA2NUVpbGFKamtITllEQUlrOG1JMld6U2dWcHNVWHVvWENvelhDNzFRNDVUQnJZalgxVnh5eXNmTWZlbTBlUW02R2VoWU1PbWpieDZQSm5sTnhaRzNhMGxTU0k3TzV2RTR5NHlNOUNab21xVU9ScGFqOGJnb0RQbUJoSWFlUlBpekRQUDNQYmhoN3ViK3ZidE85VmdNQXovdmc1aWRYVXRaWXQveDY1blEvL1d3dENoMnZQcGMvL09mYlArbDM2NTkyUEpLR0xSc3FjWWt2Y05va055Q3VsQmVtSkp5OERhVkU4ajBMVDFhWVpPZnBUaFk2NG14VzZtd2EzZzlaMGd5dUN1cFVaTkl5ZXIvUktlWkljelBFM01aZ1ZGQVc5ZERZM2VHdTRjZDAza2UwWG5vSHJCMkdza3o4N2F6YXhKVjFCZTQyWDQxUHQ1Zk03a1RuWFhiSTRVMHRKaXZpSGJ2NU04cE9wYVdEb0xWdW1JY1QvOWhoeVFtOTZ1WXhsRi9qcmIrUkpYNlhiR2pQNDAvRjV4M2tXb1FQclF5VHc0cG9LcEl5K2syaVV6K2Q1SG1ULzlWS2RxRTNYMUZqS1NOYitmTVMwTlozQS8vWDcveG9zbjNyN214aG0zSHRLWm4zcFFDeGUxUzdSUjZvZ0JOUk1tVTNzTldFS3kzbTFCN2Z2SVZmdldnZTM0a1lQOFl2bFdab3kvbWt2U29wMnA3NzczSC83eXVjelROMStNdlozQ09ZUFJnQ09ySnozUEZLaHFJSWF0aFlBczVHOExtNlFkZ1ZzSURVWElORDMzM0g2ZnJGcjE2cCt1dXVxcXcyYXorY1p2UGRvaXk2Z3hZdmxaV1JrVVRmOGI5NDVxYXdVN2NvcFpzdUlOUUdINXJKOHphOEZ5dGoxeFp5UjJJNnR0dFBjN0Q5N1VVMU9yVUpSanhGdFhnOGVaUVRMd3hMTEhHRFByS1I2YzNBL3dVYm5tejdFNzNtYS9zYVdUSWRkUldlMmpWOWJKMVNlYTB6Sncybko1ZXUxYllmTlBQNTFHelpqTHFCbHpjZFh0Wm5EaDVXeWVPcGxoblpRRVZ1N1p3dHB0QjJKV2swcnhpQ0hZdjRselRtN2IweUFySGNZc2h2RUZYek9VNXNnbXgxSkhUUVAwU3VHRXh6VXIvUXhTQnFTeWZ1VzhkclpoWThyc2hVeVp2WkQ2MGxVVURmdzlVNllPcDVkUlA3OU9OampsSUQzRlMwMkRCOUtzS0hWMU5LclE0dkc4OU5qU2Y3eDl4eDEvY0hVQ2FsNmRXYXFQZnJZQnRVaGhlN3hPcWNPdTYxV1FHaXhzejZGUG56NllUS1lmUEtqMDlZSE5mNXdaLzNnVFMwWnZHZy91NTdtRFlJaDNNS0VvaS8zbGU3ajFyYys1NGRMK3JQOUFpK3ljZGNhWkRFaFBSUFUwc2VLamFqNnBidUtJVDJWdk55ZjJ0RFBJVUtOOWJEcFFDejBYSWF2VDc5ZHkyYlJFWHdJUmJBc3pRaUdFRUdQR1hIc3dMeTl2d2Z2djc2eTMyV3gzOEMwbUl1Zm45Mkw1b2dWWVJoYlFxM0FnK1ZsT3B0NzVLNGJmOVV0eXpQOURybE5tNTZiMTVJeTZoNkg1ZGxZKy9pQmtEeVEzemN5dWZWWDA2bitUM25BaVAwZmg4UVZQVU44L2cvd0JROGc1a1o5TjliSmd6aXhTYmgvRml2bC9adGpFMzJFRHNyS3plWEh0OCt3cWtpbGI5d1RyeWhYMEtsZTV1WDNZdmVRbFhoeVFqQ010aCtFREM4Q1l4WjB6U3JocnlxMHNtUE1yck40YTlqWGFtRHF1NDE0RWNsb0pkdzcxTVhuNkhHWk5Id1dOTmF6ZFhzWGMyYmZqSzkvTW92WFZEQ2twd2xPOWxRWnpEdG5PenYvTzhDbXpHWDRLdXBHN3QwS2pGMXcrMkw0Skdxd3djSEJFRlRnL0J4NWZBUFg5SVg4QTVDVEQ3VE5oNmpTd3pkZUNDbHZXdytEYm9kOEpDWFFhdzRhbXNHMTdPWU5IUld1SHRYZGM4MGRPSW1mdXBkeTFJSThKUS9LcEw5OURxVHVOZTZhTW9HcnJhbGFWK3hqY0w1ZmEzYnVRczdKSjFzM092RjVuOCtDS2Y3QXF3MDF5Umg2RCtuWG1Ncll4Y2VKdzVzKytuNno3ZnM2YVJZOG94eFhseVV0emUvL25VTnNlQlhwQTgwcVMxQ3FFYUNmNVZoOG9NSWFZbW9pUEQ1bWZOaDFUMDBBdDFLdWdUNTgrV0N5bmgzemkxMC9RVmYwYzlSbElUVERoOVN0NC9RcXRzcG5pRENmSG0xdXcybXlZUkNEOFdWSVhKemxKRmtTcm15MzdEMk5MNnNMWlRpdCtJWkdYbTR2VEtGQVVCVldObEZ1cHFnaWJvanF5Um9pOUNkSGgzZ2xKa2dRZ0dob2ExQWNlZUtEc3R0dHVyYkphclQwbFNYTENOMC9RTFI1eUZVcmRQajZ0cUNLK1J4OXkwNVBvMm5NQVZ4WTVXZlBxcTJ4K3Z3eHJabCtHWG53ZWlYRXlub1pLTnF6L0p4czM3eVNyWkRKemZqMmFPRGxDRVM0WmNTVU41WHY0Zkg4MXFiMzZrOW4xQkJORFRtWFVzRE40L3BtVk9NLzlPUS9kTTU0NEdmSXZ1QlJSdFlOWDMvZ1hDZjNHTVgxMEVUMzdGSk9WckdWNkorV2N4NEFzaWQwZmZVcWR4OHpGNTJtTzNZSkxSNU5ycWVPMVYxL240Mm9YRncrOWd1eFU3ZGc0TTNwVGtKTWEzdGMreFJlVEhDOVRNbW9jbHJvUFdiVnFIWjhlT0VhL1M0WnlUcThlR0NTRkQ3ZjlpdzNyLzBuWlZ4Si9XUEFvNS9WSS9FNG03dHN2dzBjVjBQZENjQitFNmhvNGQxQUUyQzRaQVEzbDhQbCtTTzBGbVYwaDYxd1kwQjFXdlFvN1BvSzBQakQ0ZkxBWUlyZjVBUU1ocnAzdFpYZnhNK2ZwWFV3YmUwblUrKzBlVjFNUzE0Njdpcy9mWGMvYXR6WlIzeHJIa0tIRE9DUFZqb3lYN1p2ZjVxMzE3L0JsU3pjZS9zc0RuSmtVT2VlWjU1WndWdHd4UGl3cngyMTBjbjUrZHFmSDRleUxobUUvOUFFdnJYdTNNbWZ3MVkrdFgvblkrODNIajNlazBLRlA1L0FGQVMwcStUWTIraGxxdmhJZnI1bWZpWW4yb0FTUkpoU3BCUXA2VVZCUWdNMW00M1FaMzVvZTI2bU9ZOGVPVVZwYVNrWEZGeHc0Y0lDNnVqcU9IR21JMFhGckNSYld0K0x6K1NSL1VNdE5WVlZKVmRXUW5wc0JNS0RwdVptRUVIRm9jOVJTVnZaSlVXNXU3aFNEd1hEcEQ2SEg5dFA0TVF3UGQ0NitrbEVMMzJKSXR2VzAyak5GVWY2OWZmdjJOUjAwTSs2Z1Q0SHdDMEZBbHVXQVB2bTIvVHkxV0YyMVVFcUhGdjBzS0NnZ0tTbnB0RG9teGg5NkI1S1NrdWpUcDQvTzlOU2JsbEZFVFUvZkpOQjZKMmltYWRqSklVSit0NkJacWdKcWZuNmYzYzgvLzN6dG1ESFhWQUUzbjg2WFQvbXVUZXl0YW16bkV6dkR4ZzdqcDBLd0gycFlXYmo2MzkvN1ZuME5GYXpadktmZHozS0xoNUxqTkQ3LytPT1BiN3I3N251T0U1M09FV3QrNnR2aytTVkpEa2dTcXI1TXFyMktnbENlV3F6NXFSZUxQTjFBN2JRQU5nQ0h3MEdmUHZrNlVKTjBqMUlZNENSSkNpMUNraVJKODdrcFFVQlRVVlVoOVBsdElaOGJJRzY0NFlaYTRLK2ZmYmF2eW1wTm1BNTBQeDB2bjR5OEl1d1o3VVF6WlNPMm45RGwvOXd3MmpNWVZHS2pIYnZxSzdmSHRUd3hNVHNrNDYxUDU5Q2JvTzMxL2d3QUFhMnlSMWJiTDJqWGZHb2g4ek1VL2RTWVdnalU4ci9WemxJL09tQUQ2TktsU3pEM0pRSm1Hb2lGbUpzVWZoM0wzQUJKVlNVVlZDa0VhbnJtQnFoQjlpWjY5ODVidlduVHBxcnUzZE51TWhnTVEwNjNFMksxT2JIK2hHQS9qZEQ5ekd3aEpTYlJUMUdVelR0MjdIaWpwT1RpR2pydnpxNnZKR2l2OFVxb3FYR2Jpb0pJOG0xSGdZSjh1blRwY3RvZXQrOU0zZU5VUm54OFBIYTdQYXpmRmdva2hMSTZPZ2dhZEpZd0U3WnRRd0FIaUdlZWVlYXcxV3JkMGE5ZlA4K3BLSVQ4Tkg0YVA5UTRkdXpZMHZ2dXUvLzFXMjY1NVlqTzlEeFJ6V2RVTWJ0T2VpZ21uY09pNjlJZUt6Mms5Nm4xT2ExQkRVNkQ0RUVISjQ5UFBpbmppeSsrb0tibUFIVjFoemh5NUFoTlRVMjRYQzZhbTV2eGVEenRCQlQ4S0VvZ0ZGQ0lEU29ZMFlJS1pvSkJCU0R1d0lIcWkzdjA2REZaa3FSemY3cHNmaHFuNjFCVmRjOW5uMzIyS2orL1QzbVFwY1g2MC9RbWFKVHBpU2JqSFdKcUl0TFEyRVRIUGpXOStSbk4xRTVIbjlxM3h0aWFYQzRPdWYzWUxHWmtQV2NLS05RMkhzTWpETmpNMFJtNnJTMHRIR3hxSmk0dURwUGNNZEd5V0N3NEhJNXdUOUxvNmdUQ3ZyaVk1R2FwSS9JV1NnSFJtNmFoMTQ4Kyt1akJnb0tDblRrNU9YNmowZmk5ZzV1cnVwUjNQcTduckt5VWsvK1J0NTVWYTNiUTgrd3p2M0h6a05OcFZPM2R5dnAzdGxEWFlpR25SOWZ2ZndkTzhiaHVYZnNpY2xvQjlyanZacmZjYnZmelR6NjU5T1dSSTBjZXBQMTZUMzBxaDFmcXVPZW5ydTdUSEdacVF2Rmh0am13MnhKSVRJdzBYd2xKRDRWVU9nb0tDazZZSnJWM3l6b0NYWHVTYUpaQWJlVEZKNTloNi91N3FQZlpPQ3Z6KzlOaisvbytOdFhOci8reWt0MStNNmx4QVdyOThUdzY2U291VEltbjV2T1B1ZTdGSFRnZGRqeXU0M1R2MVplL1gxZE1vZ3hQclZyRmtyTGpaRHJpT0hEVXl5MWpSakMxVDhjWGMySmlJbjM3OWtXV1pXVFpFSHlNTEpLa2Y0d0VGQ1JKd3UvM2kyQ0ZnaEJDb0twcVZDQWhxUEdtQ2swNkpIRGRkZU5xZ0wvVjFCelltNTZlZnBNa1NkOXFaNVQxUzJkUmtUNmVHU1BhcHJ6WDc5M0l3ZzFHUnBRVW5Qd0tQVlhNZjNBcGc4Y013ZmxmQkZ4NzFpeGtWV01CY3ljUGJmTlozYlluR0RUbE9hWlAvaGx5aXVjNzI0ZmE3Uzh6ZDdQQzQvZE8rSmFPcThxS0JYOWtWTUY0TXI3bGtMV3FxaDk5L3ZubnEvTHl6djVNeDlKaU83TjN4TklVU1pJQ1FxaXFFQWpaYUZJTkJnT1JFcWxJbmxyZG9hOHdkYzBpTVRFeHFxQTlVaWFsVlJRa0pDUjBmbCtvM3N6a1dTK3daY3VJa0ljUW04M0czZzFQc2JiQ3dvaUJlYWN4c01rbWJoazdtb0pNTFJxeWF0MGJ6TjM0TVc5TktNYnFUT2ZWMzk1RXV0V0U2bk16YWNGenZGU2V4OVE4T3hkZWNCRTNqRTdGTEVQTnZnOFl0bklyMS9RWlEyZjM1WVNFQkFvTEM5Rk9pSXpCMEI3SVNVRmdrd21LVTZKRlRQM0JvRUs0SVROaHBOTVlteXBKVWlpb29BS0JqSXpNelU4OXRleVRjZVBHamJWYXJkUGF2WHMyMVZQdlVzbktTb3M2ZUNyZ2RUWFE0SmJKU285Y0ZxcWlVRjMyQWFXK0lTaUtnaXdia2VYd3hDVjcrQXpXanpTMnVWamNqZlg0ekU3c3NvYzZ0MHhHaWozOG1XTHZ4ODd0eTl0VUFDbEtkQ21PYkRSR3ZxUDZxS211d1pLY1RyTE5FcnM1a0ZYcXFxc3dPdEpKdG4vNzJlT3FxbEJYOVFtN2ErenRIQWVGbmR2ZW85L1lXN2huNW5oazQ4bE5TOFhyb3JxMmtiU01tRDZsS3FpS20rcmFKdEt6TThLMXFxcXE0cTZ0WU10dWIzQWZ0RGwwd3VQcWRkSGdoalNubVpyYUp0SXowc0xmVVJTVlJScy9iVk8wcnlwS1ZDUlQvMzhCbXVxcWNjdjJObjFlUTJvb0IvZVhQLzIzZjZ6WThzRC9tK3NtRWlEUWwwZnB6ZEQyVEU5VmtpUlZWVFhyUktnaXVwbXgyWXdzeThSWnJKaGtpRSt3NFhBNHRNVnV3MktPSXkwOWc5emNzNElWQldadER0VTJrcDZSUmtOTk5iYTBMS3k2VS9Yc3dnY1lNdmwvSXRGNzJjSElDUk94Tkw3TDNxb083dEZOOWRTNUZMS3kwcU91SjhYcnBxYTJIa2RLT283WStSbzhTbzIxMWZnc3pxZ2VyS3JQUTNWdHc2bEVSZU1veUl4dzdpeG5FdDVEZmdDY1hTTXdKWnNUeUxBYmFmRnBGMXRlajRpQ1pvclRqcXo0YVQyUnBrM1FMSTJBbXlFRzVDS3NMY0xncEJEQVNaSWtpZERGSGdRNGdTNWkyZzU3VTI2K2VVcmc1cHVuUEZsZS90a0hPVGs1RXd3R3d5V2hnL24wZlQ5bnp1cEs4dE5rS3R6cHJGNzNFdm5KWmxZL2NpT3pWaDdBYmpRZ2U2b3hGOTNDdW1Vek1WZHZZZmlVLzZWbTMyNmFiSGRUc2NwSjl1QWJXVHByRXVCbDlxUlJiTno3R2U3Q1d5bGRIbXhWN3Q1RGJ0YlBLQ2pKWS92ZVJnYjBTMlBmN3IzTVcvMHhZNG9jckh4NEJvK3YyY0cyS2lmVk5XOFRKdmMxV3hnKy92Nmc0cWFQMHAyN1diVDlLSlA2MmFndjI4Q1k4Yi9DbkpGUFUwVVpRMlkreGlQVE5OYWtsTDZJWS94elRNazl4dFlhZ2FkUlljV3VIZlQ3TnFQNDNuSW1qZm9WWmRXbFZMbTNNWHozQzFoeUwyZnRrbnZBVmNyNHNiK2h2THlVR25VWHc3Yy9ROUhvTzNoa3hzZ1Rzcjh4TS81R2ZtRU9lMHRyZWVURk54azNJSXVtN1V2Sm1mQVlSU2xXTEZhRmZlNTBObXg4aFY3Mkp1NFpmejFiOTFWUVZhY3lmUGg3NER5SGwxOStCQ2QwZUZ3bkQraE9WZklBcW5mdkpHL0FoYmdxUDZKbzJ0OVpmTnNReWpjczViYUhuMmZ2OXUwczJkUEMySEQxazR1N3h2Mk1YZlVhdEZYdjI4M1FXYSt3N000UnFLNUtwbzI5anQwZUp3NWZQUlQ4bkxYTDdnMVdUTlJ4Y1dyLy81d3hyT2pORjVhdnErcUFwZW5OVUY4UTBIeDZsaGE2YVV0YXVFM0VtUXlpVlZFSjlmMDBHK0dyMm9Pb0JoUHlWNGVRVkxBbUp0RzFxNU5Ebi95SDF5czlaR2VrOFB3enk3bmwwWmM1N3p3THkrKzlodm1ibXJHN1A4V1ljUjQyNVN2cWs2OWs5OHR6Z3BkSFBTKytYTWJzZTA4MkZ1ZmxpYWN4dkRnQUFDQUFTVVJCVkh0djRwRjFWZVNtbUtsMEpiTnEvU3ZrT1kxc2ZmbytKai84TmdXNTZWU1hsVEx3dHIrdytNN2dmR2phUlhiZXJZd2RuY3FHWFVkUVhJM01XL01SK2FXUE1QemhMUlE1QkUxTnRlZzZScDNDNGp2T3JRdi93WkpQRHJmNXJIWi9LUmZPZjRVRDN0amZCWGg2NVVvbXYvbngxOXFXcWdiNCtPTzl2UGJhYXl4YTlCZnV1Ky8zL1BLWHYrUzY2OFl5Yk5nd0xycG9JRVZGUmVUbDlTWTdPNXZ1M2J1VG5Kd3NKU1VsU1FrSlZpa3VMazQybVV3R2c4RmdsR1haSk10eW5DUkpWa21TRWlWSjZpSkpVZ3FRQWVRQVp3TkZ2WHIxR3REWWVPVC9DYUhXTkgrNlNuVHRmcUhZMzZ3SUlWVHh0MTlkS241Mi83TkNDRlc4OXFjYlJMY0xKb3ZqQVZVSWY0TzQrdXl1NHFrZERVSUlWUWloaWlkL2U0VzQ1YkV0NGRmNjVkTlhab3MrTjh5UHZIZDh0emlyeDZYaXNGREV6ZWNsaVgrODN5aGVlK0FHOGF2SE5rVytjM2lMNk5Iak1uRzRuZlVKb1lwM0h2dTFPUGZxZTdUOUVXNXg4L2s5eEVOdmxnb2hWQkU0VmlyT3l6eGJmSEJNKzY3LzR4WENZT2dpbm5xM1d2dTkzeU5hL08ydlZ3aFZ2UC84YkpHYW1ocXpkQmRQL3J1Mnc5K0VscmYvK2d0eDFlK1d0ZnZaRzMrNlNWejd4eFVuWEljUXFoQ0JPbkZwank3aStRL3FoUkNxK09TVjJhTGJoVk5GcTFERjBmZWVFSWI0czhTT3cxNGhoQ3IrL011THhFMFByUTMvOXZQWDVvcysxODl1ZjczdEhOZWJMa2dWcjN6cUU4Lzg3aXB4NDU5V2l5UHZMaFY5cnB1cis1MVBYTjhuUWJ6eWVmdjcrdFdISzBYdjNpWGk0K0QrUEhYM1ZlTEszeTRUQWFFS0lUemlqc3ZPRW45NXAxcW9hcUNtcnU2akJUTDhIQmdMakFhdUFpNEhCZ0VYQUVYQnVaa0RaRWlTbEJLY3U0bVNKRmxsV1k2VFpkbGtNQmlNSnBQSllKUWxHY2tnSmRrVEpBa2taMnAzc3JPelNYUEVZYktuY3RGRkE3bDg4UG1ZSkNpNWVoTDMzZmQ3SG5yb0lWNTc3VFUrL25ndnJyS1ZkT3Q5TGMxQzVibmZYYzJ2SDl2TWwyODhUT1pWZHlJQzVaeDc1aVVjQ2w2ZmdmM3I2Tkw5TWc2M2MrMisvZGRidU9xM3k2TGUrK0xOaDhtODhBYU8rclhYci8rLzYvblovU3NRUXVYNHNTWUNvZlVlM1U3UHJ1ZnlSZkI3NHVoT3pqQ1orTU1MdTRMcjh0TFNxdkRwSzNPSlAvTUtEcldxQ09INkJubHNxcCsvdmZvV1NxOEx1Q1UvMnFCc2J2eUtXMS8rZ1B0dnVJYU1HSWZxZXp2L3cvTU5kbDZZOHZYMG1pUkpvcUNnQUtQUmlORm93R0F3aGhtY0xPc2ZvM3h4WWIrYkpDa2g5aVpVVlEwcmh1allXNmkvUWlERTNpb3FLaFNucyt1cXQ5NWE5MzdYUTl0SE93ZGNlbE4yVUNsMjZKRExtUC9FYm1BaUFNV0RCbUdUQWRuSjRJRTU3TnBkeXVUaVFhZDBhR1diSFJzeWRvY2R1ODJPeldiRDdUazVtZTdxcmM4eWZVazU2N2E4b2UyUHE0ek5lenpJbTU3ajNpMGE4L1FwMVpSV3VPblhUNlB3NXB4QmpCOFlsT0F3V3VqTUVPMC9ZUTUxRStiOHNNNjYycjNzOWVRek9GaTluajlrS01iSnY2WmFoV1RBbmorUS9zbWFBVHBrME1Vc1c3c0xHSEdLRzdOaXN4bkJic05oYzJLemUvQ2U1TG53TlpReWJ2ejl6SC94WHhRRTkyZlR4aTM0Y3JPNTc5N1BBQ2gzcXh4NWYvdUtGVisxYnBrNDhjYWpKMkJwb1JwUG55UkpvVFNPZ0M3cUtmVDVhVDdGTDR4eDhaamo0akViUEtMVkQ5YXU4YmdQK2VuYW96dDJleEoyZXlLWjl0MGtkVTJoUjQ4TUVrUWpMeTVkVEhXREIxVngwOVJvSjlTQndXNnpZM1hZY2RvOElOdXc0aWJrRGZVMk5lQ3hPemhab3I5MTg3K3hJdlBnck45ckhMZXlubEx2SG1BOGFsTUY5OTcxSjNhV1ZlRlZmZFM3RzJod1EwNW81Wlo4Sm8zdEYzeGh4aEwwTldUM3Y0QVVNNER0VklFdHdJdHZ2TVYvNURONTZzcjhLR3V5MWQzQXJjOXU1TnFycitLcXJPaE0wNC8zdnM4ZnRydjR4OVFSZEQxRlpaTzh2RHhDemsrajBZakJFQUs2aUptcStlSEN2amdSZkpTQ0VWR2RiellLNEZRZHdJWEFMUUFvVjE0NVlqK3dKUE95WDc2cktNcTFScVB4aXBOeEtuL3pJVWRzOVpOWW5hZDJOK09uL0puRnEvOUZMNGN4dkIrcU9abGhZNjRtSzdpcTBhT3ZKU2MzVXU4b1cyMmNyRmR0NytvRlRKcnpYSnYzNzMzOG40d2ZrTUtQYjhqaGg4alpPQWxaSWFXSjI4ZmZRTW5zcHhoVGxCYTF2Z0ZEcjJaa2dRMUZVZDQrNjZ4ZUc2Wk9IWGRnZVFUUU9nSTF2WTlOMFptZVlYOXhxRStJTEJ1RTBTRHdla0gxdWtWRGF6TUlnYi9GUzBLQ2pUaXpqTWxxbzB1WExqaWREcXhHaWE2cFBlaDVabGZtL2ZJUFhMOXNNOU9IRldDczMweGF3UjlpL20zN2M5Sml0MlAydUhCQjI4Q0wzTjdWb1pKVmRER2pSNGR1L2xjejFaRUJLTnczNldvc2s1NW53eE9ETUZOTmNmSkYwZFBmYXNQU0RuTEpzdkViQkE4UXZQbjIyN3gwUEpsbmYzNGU4YnFkVmp4TjNQSFVlZ1lPR2NhTnZhUC8zdWZsSC9HYlRRZFo4b3VSbkdIOVppcjRQWHYyeEd3MkJ3SE9pTWtVRFhEdE1MY2d3RWxTUkhvOFVxRVFZbTI2d0VKQXg5N0NrK2pBTzA5K1lESTlXVnBUYytDZHQ5L1plRjIvL2xQQ1NyMDd0MnpCclU3R3BqYXllVnNsbzZaR1pLUnRWaHVORGZYZjdmWG5xMmY2dUJzWStlQUxETXZYSFh0N0FVUHlQVlM3bkl3YnJrbnV1QnNhTU5wTzdSemtEWnZLMnY3ajJzeGNaOHFKUS9sV2F5SU5EViszbzVPUGhUT25ZeDB5ZzJramduZnA5QUlLcldWczN0M0FoSDdKbEczYWlGSjRQbGt5ZUFCWDJWWjJOZmdvVGphemFjdC82Ti92OTVGOXNOdHcxZGVnOEYyVzNhZ3N2ZWRHYWdwL3paSUpBNkkrR1RKMElLOStYck5yMHVDU04zdWZsZnRwNk9ZWkEyanRnSnJrbHlRTitJUVFBUUVCT1p4d2l4b0lxQUxKZ05sb0VrYWpFZUZyQnRra3pzaE0xd1FpWlM4ZmYvWVZSbHNpNmFsZCtkenRvVnUzYmppdFhnNDJCUmllY1NiNXVRa2NjWGRsME1BQ2pNRDJkZXVvUDhuN3M1emRqMExmUHNvYW9TUUcyZEtjM2FuY1dCVWxFejlvOENYTW1mOFplZjN2UWJzSEs1cHNQaDZxcXoxTUxTbkdMRVBWcGpYc1BZV21YVi8vM0xZYzRvRk5YK0N5eERGa3ZxWVFhdTZXdzd2VEwyWEhoeCt5c2U0NEg3eStsbis4SG1RSGx3L2ovZ0daL1AydDk2aHRsTGxoNFRQQkZjV3piT1lFK3A1aS85VE16RXdkdUpuUWtnMk5ZVk0xbXNXRmdVNElJYVJnUGFtUXBFQW9WeTRjV05DeHR4REFSYkUzd0orUmtma3YyUmovM3I4L2VYNllFT0k2SUMrRlNvWU51Z3lqcHdaenllK1pNQ0J5ZG9lTnY0VkY0MzVGMGVvSHlCdDJDeS9PbjByZDloY1pPL052ZUJxcXFHcVFLU2w1azRLUmQvRDRqRTcwdDd6N0dEZnNsOVI2WGRUWFZ6T3k1R0xNR1JlejhjWDUxRzk2a2VXNzZpaWNlek12ejlWTzdid1YvMlprdnBVSG4vNEg0OGIvakRVTDhyRDQ2cWwyOTJEanJwVmtuTUp4TjF2dFpGaFBMYStoLzhoSk9CNi9nWUtpRjNBV1hjT1dwMmVkRkxCdFhQa2NqclJSRVdDVDAxaXcrQStNSFhNaEt3cHlLQzJyWmZHS056R2pBWnM5emM2OUl5L0ZhbFVwZDJldzdwR0lRbTM2Z05FTTVSb0tDOC9EbG40QjY5Y3Z3ZG5KY2Uxc3pKOTJCZXZLM095cjlMQjMzRVVzdERwWXNPcE5pdTE3ZVhEUmVzaXJvVi9SMzdUcllPWmYrZU1ORjMwMjlCZXoxdnlxNzZBUGV6OGNVSFJSVEwwaWh5K1dvVW5nRjVvYWh4S2NoMm9FMUNRaHl3aEZFVUpJTW1hemRqMGNiM1lKYzBKeXVBdWMxZXJFWVR5QXF6V080dUtMYUZqM1QxNSt6VVc4MFlTemF6d1pQZlBJN05tTG1WTnlHVFhnUW9veXJNanBtYVNkN1AxUHptRGM2Q3pXYjloRHlmam9iS21DVVZNWXVPd2Fjdkplb1hERXJheFpNSU9jRWJjemE4dk45Qzg4bjRKZTZWUlY3bVBFUFU4eWY5SWdicnR6QWxPSFg4Q3lnalM4MXU3ME9vV2NwdE95OHVEcmpLTkhqMUplWGs1VjFaZlUxdFpTWDE5UFkrTVJtcHFPQldXUFFsVUtMWGk5clhnOEhudytIMEtva3RhaFhpRVFDRWpCL2d1aGFnVXBXTEVnQjhIZkNCaURWUXNtdE1vRk14QjMzMzIvVHp6YlVuSDU2c0ExMXkyL2EyaE9nMWNtSStWMHpDNVRxYXVwQm91VHRPUWZoMGFJNG5WVFU5ZEFTa1lXMW1DK1JkUDJwZVROL0lEYVRYK2lwczVGZWt3YXdROHhoQkQ3RHg4K3ZHYk9uRG03SG52czhWYWRLZWxyeC9RTVBmcURFVTlGdDZoNlgxcXdpb0JnMG0zUWVqR0hHaGxqc1VTNnMydXF0NGs0SEVrNG5WMUpTZWxLdk5uQzJlZWNSMkdmM2xFbFVrMzFOYml4dFVsRk9kRndsYTJoWk1ZR2RtNWFmTkt1RGErN2licEdGMmxwR1ZoMEtUdnV4bm9hUERKWkdjbW4xT1hNK044K3VidDA2VUpoWVNGeGNYSEV4Wm5EZHl3OWc5TXpOeUhVVUljckljdCtTWlpsRkVVUmdVQVVld3NWMThzeDVta0FVSUxtcVIvd3o1Ly9nQTk0cmZjZzhZNzN6dUZEZTNSTHVoYm9lZm9kS1ptMGpPd2ZsZmZMYUxHUm5kMitZb0JzdHBHVlpmdWhBYTN5OE9IRGJ6ejg4TU1mL1BuUEM3dzZnUEozQUdpeGdRRkZIeHdJQXBzSWxVVUY1YnZSUUUzTFR3dFdFMFNCbXMybXFkNG1KWVg2RTJnZDJyT3pzK25kdXpmeDhkRm1reU1sZzFQSjlySG5qMkxoakVacVhTbzVKNm5yYnJFNXlMYTEzWnJObVlMdEcvQ0QvM3JHcHB0RWZQYlpaMVJXN3VmZ3dSb09IVHBFUTBPa3Z0VHRkdVB4ZUhDNWp0SFM0a1VJZ2MvbncrZno0ZmY3SlVWcGw3MUpRZ2c1Q0hDaG1sTkRrTDJaZ3V6TnJGL3V2bnRtNHU5Kzk3dExuVTduMVpJazllR244ZjJ5dUtZYXR1eHpNV1JBL2cvSGpWVzFyTDYrZnYzczJYLzg4TWtubjJ6dEJOQmlGMzhRMU5vRE5EMm9oVmxhRU5SRU1FY052ZVJRQk5UMDFRU3A5T2lSUVU3T21mVHUzZnNIYjdyeVhZMGZEYkNGUmxWVkZaV1ZsZFRVMUZCWFYwZERnNmJHNjNJZDQvaHhOMGVQSHNYajhTQ0VDQmJRdCtMeitmSDcvU0ZsM2lCekMwaXFLcVJnNURSa29vWkNRZ2FkZWRvdXdPWGs1SmkzYnYzUHhhbXBxVmZKc256aFQ1RHo0eCtCUUdEN2dRTTE3MXg4Y1VscFRjMUJKU1l3MEJtbzZRRXQ3RWNMVlE4QVFoL3hiTXZTVEpqTmNlZ1ZiNjFXZmQxbnBKRnhSa1lHT1RrNVpHZG4vNmpQaGZISDlvZXlzN09KajQvSFlva25MaTRPc3prdUhHUXdHazBFQWdGa1dVWUlvVE5UV3pFWURLRTdZWWk5aVVBZ2dDUkpvYnkza0VrcXh3WVhZc3hUSDJDdXJLdzBwNmYzZUFmWVVsNytXVkYyZHZaUWs4azA2cWZMLzhjM1dsdGIxKzdidCsvZG9xSno5K3ZBVE0vU2ZPMkFtcjhEUUF2b1VqakNabWNzU3pNYWpVR1dwb0dheFdMUnlYZ25ZTE1sa3BTVWhOT3BseDNLb21mUEhGSlRVMy8wNThUNFkveFRxYW1wV0szV0lNQlpzRmdpQUJjSUtCZ01CbFJWRFVkUXZWNWpDTnp3K1h4Q2x1WDJmRzhpYUpyR1JrOERCSnRpb0lYaVRYcUFBOHk1dWIxM0FudmVlV2ZqUzhYRkZ3eXkyUkt1Z2xNS1N2NDBUaC9YUjgzeDQ4Zi8rYTkvYmQ0OWV2VG9oZzRBclQxUTgzZkcwRG95TzBNc3JYM1RVKzlQMDRJRVNVa09uRTRuS1NuZDZONjlPMWxaWjlDclYwOFNFeFAvVDV5ZlV6WkZtMXd1anZsbGVuU3hSUmNBQnhScWp4N0hFSjlBYWtKMHI4cVdGZy8xYmgvSmppUVNUTkwzTWZrb0x5L255eSsxaU9taFEvVWNPRkROMGFOTnFHb0F0MXVMbUxhMFJKckZ0TGEyNHZmNzhQbTBoakU2M3h1aDVqRnFRS0FLSVFmYm1ZWk0xSTU4Y0hwVDFRU1lKMHlZWVBuVG54NitJQ1VsWllqUmFPeFF4WGZQNXRWWThvYVJsM2J5elVOcXk2QkNnVUdGUDY2SldyRnJNMnBHTWJuaFk2R2lLRkZsNWhpREUvRkVKY2lxcXVxSzM2TStvYjZtR3AvWjBTWWkyTlJRUTZNYjB0TFQvblhvWU0yN3Yvbk5iejU5L2ZYWC9TY0phUDUyQUMzUUFVTlRRL1hPd1FBQjBTd3Qwcnk0clQ4dG9xUG1kR3BCZ3ZUMGRNNDQ0d3h5YzNPL1UzOWE5ZDZ0dUoyRjVHZWNIaEgzNzAyMmFQbnFWVHkycjVuVVJETzFqYzFNdnZwS3BoZCt0MjBISkVtaWQrL2VKQ1FrQlBONTR2SDcvUmdNUmxRMUVKWGtHNWs4QmxwYmpSZ01QdngrdjlDK0wwdUtFa0JSRktINEF2aFZGVWtTS3RwTk5hd1dFc3gzTXdRbmE0akJHWU9BNWdzQjI0b1ZLMXBYckZqeEwyRHJ4bzF2UDNYKytlZGZrSmlZT0ZTU3BDaGRsL1ZQUDBUeWxBRmZDOWoyYllNVmpUOHVZRk5kNVV5Wit2OVlzZjN0OEhzcjU5M0F4QWZYayt5d2hhZnlJMnMrWW55L1JvcHQ1ekp2MzFHR3Q4ZUpQV1VVcEJWZ0gvY3cyNWZPakFCWHhWYkdqYnVKV21NR2RxVWV1ZkJtdGo1OUQzanJ1V1BDMVordC9zUzNPY25RL05ISG41WWYwWUZTZTREbTd3RFFsQk1BbW1nL09HREFhRFRwcFlhSWl6TVRGMmRweDUrbUtkNTI3WnBNYW1vcUdSazkyUDM2WXR6WExhTDNkeHdrc0NrMWpKbStsbTFySDhSOEdzeVpVMkJzclpRZWFJbVNMWHF5S1pXM0poVFRlT1FJM25oN2xHelI0TkUzTURYUFRrdXJqL2c0N1M4ZjJiK1hpNS8vZ3YvTXVvYnZTMDZ3cWFtSnlzcjlsSmFXVWx0YlN5QVE0T2pSUm80ZDA0SUtzZmx1UVdYZVVOUVVSVkh3Ky8xUzgvRUFmalZBbkRrU1BkVUZHQ1Foa0tGTmtNRVFaSERHR0JZWHRYejg4ZDY4bmoxN1hoZ2ZIejlFVlpSMFZjZENUZ29BVkcyUmpUR01KVWhoM0kzUTVJT010SzhKTEY2b3FvV01iQWlsR25tYW9LNFIwcktJa3E0SjFiNVVWMEZ5QmxoMXMxenhRblVkWkdXM3ZhT3F3YzlTMHFOL0E3QngwVFNXTkE1aDFaenhPbUQ3T1F0ckxtSHI0OU5qMWxSRi8wNkFyWEx0ZzR4ZHNndDMyV0UyVi95YmRDT0FtMG45ZTJLZjloS0xwdzBHb0xTMHJQYk1NOC9ZL05KRDB6Nzh4ZisrVUIzeXFaNEVvT2tYSmNqUUF1MlpuQVNGVDRNMXpURm1wd0dEd1JSc1dteWlJOU16SVNHQlJKc1ZDWWt1S2VuMHpNNElCZ2t5eWM3SzRwRnBBM0ZNZnBPN1JtUkh5MWdCN29aYUdyeG1zak9TMjh5VnhycHFGR3N5S2Zib202cW5xWjY2Smk5cDZSblJVbEg0bUQ2b0Q0TVh2cy80Zmo5OGc1ZnZUYllvQkdxaFkyYzB5SHlmZ1dhSHc4RTU1eFRTMnVyRlpES2hLSDdpNHkzRXhWbUNRUWJORWR2Y2JNSm9iTUZrTXVMMWFpek81L1BoYi9WenBNRWdWRldSQkFxdHJZcVE1QUJtazRxRUpIeCtEZHhDUVFaWkRnY1pBa0pnQUNsWXhTTkN6SzBOeVBYdFc3Z0grQVI0K29JTEx1aDc0TE1QejcvN2hZckJkdzdQU0QrWi96aHRPT3lxZ093SnNIcGU1UDE3eDhBZUdWUTNWSmZDMEZtdytMWVRyKy9wbWJDcUNlcDNBbFl3RnNEV3BmRHdkRmkrQjNKU29MUU01andORTB2QXZRY3l4c0hJWEdod3daNDYyTElMY3UxUXR4c0dqNGFNUXUyZjc5c01XNXNnRzlqK01reStGM29WUVBrK21MOEN4dllQd3lFclZyek82RVVQZnl2ellNM3FOeGc2NFZHOFM2OWw3ZllHcHBVazQ5MjNudFVWV2V5WmZFbXR4K1BaVWxIeHhVZm5uSFBPZmoyNzZnRFEyZ08yMEh1aG9GSWdER2l5ckVwQ3FHcW9JemdJSkVrWVRTWU1zaVM4TFMzSTVnUzZXT1BBM3l3YWpyckl6TTdHYXRGQXpXS0pJeTR1MUpIZFNrS0NqWGpKemVzdnY0RTE3UXppMUdaU2lzZng1SnpCMkJwMk0yNzhQWlR2cWNGWWVSTWJGbGtaTVA1dTVrMGRCa29qc3lkZnk4djdWTEtzSGhwdHhheGQ5VGZTTERCelJDYmJQSDB4bWczVVYrNWw5T3puZUhDeVZzLzU0dHdibVBWeUpZVzlrcW5ZVjg4VFczY3dJSXlKWmthTnVvZ2xMNjlsZkwrSlVjZmNWYmFlQ2ZjOHk3emxLeWh5bkxiQXBoditacGJ0K0lKeGw3Y045bjFWOVNsYmpqbDVXVmN6dXYyRDkxbjAvbjRxajdReWI4TFB2bmYxVjRQQlFNK2VQWW1McytEenRXSzFKZ1M3WE1jQ25KbVdGaTJLMnRyYXFvR2IwY2NaMlVhTzF2bUZLK0NuUzZJV1BRMEVBcUxGRndCSnhXeFNoYXFxa3FJZ0NSQ1NGSTZpQmdDREpLR0FaQWhPZkdQUVREVzJBM1RHSFR0MjdBTDIvT2JLcktjdTIvdFI3NXljbkNLcjFYcGhaN2x4U3pmQTJvV3d0SjF5VEZzQnJKd0xUZHNoZXhvc3ZPM2tUdjcyUGJCM082Ulp3UnZzQ2pqOVliZ242RXFwV2crRDU4TEVEY0U3ZWgzY3N4TUtIWERQY0ZpNUVlNGJBdy9mQzJNZmhIa1RvR29EOU5vWXZNazF3TVRiNGRuZE1EQWQ2clpDOFYwd2VrdHcvM3dWN0N5MWMzdEIyeXVpZE0xZkdGcnhxamFSMHk1ZzlmSjVuV2U4cTNXc1hsZkY3SG45OGRSZXl1TnIxekYxNE1TeThnLzM3ZkIwY1pUMWpEUG9tWm1xWTFtZEFacWlZMmVLSHN3a0NUWFlsRmhvaWd1U2tHUkpHTU9SVG9sV2I2dFFoWUY0czRuNE9CT05UY2RGZ0hpT0hXc2hMYXNuU2JiNHNEOHQwajNLaXMybXFkMGUrYlNVaEw0amVmaXVjZlRva1U1NmVqcFpXVm1RbTh2R2plT1pOZlpzSEpPZlorYkk3UEJoMlB6NGJOWjRMMkx2cm5tWVVWazQ3UkllWHI2TkJWTUhhaVJnd0RqV1BUd1pUL1ZHZXZXL20ybmpkNUJqcVdQSjRzMHMyM3VRUVdtQTRzTVhZMHdVRmhheDY4R2RoQlJ2d3JjbVZ4MjdkbjJFMi9mZkVCVTlCZG1pdm5sbjh6L3BaN0IxOXdjc2VtY1BsMDBkVE1JUFFGTlRVbEp3T3J1UW1KaUl6WllRRlVIVkp0RngzRzR6WnJPSGxoYU40WVZNMDJhekQ4bHZ4R0x4aTJCZ1FmSzRGUXltZ0RBYXRSNE5BVVVWSUNSWkRrZFJKUTNraEJ5OFVPVGdoV0FJbXFuaHNxMTJnTTVZV0hqT1IwRW05OUpiYjYzcmZ0NTU1K1U3SEk0aWs4bDBJWEJTblRVR0J2WC9IRmxnYVFRM25GUjIrYkF4R3FnQllYbVl1cjB3WXlHVTEyZ21aTDF1Z3R0eU5WQUR5TXFDVU8vblhidGg5dFBhOCt5QmtCR2NlVlhib05ZSXF4ZkJHa0QxZ2FzVWFvRXNBRmNEalVZSGpuYmNqRG1Ecm1QeG5LREV0OUYyUXQ5TzQvYTFsS1pkZHV6OHJvRWQ5VVhGZTkrWjlOY3ZEQTlOUGhMeWtYYkN6dG9ETmIzQ1JyVHZERlNCcEdxUFFvUjdic2l5TU1nSTdZYW9DSkMwM3BFR0l4YUxSUmlOUnRLTmNQQndBL2JVYkxwM3Rlc0NCQnFvMld6UnFSelpDZWZ6K3FLVlBMc3lnV0hEUnBCYmRHS2h4eTFiL29YWjA1L1o5LzQrNkRid1VHZlpDMmpBTm1TUVpvNWJzd1pTYkM5bGQ1VkNUbDR5UXdZbGM5dTRheGczOGpJR0R4L0ZvTUtzcVBYYW5RNWM5VWZhYk04NVlESjFkWk5QZDFNVVRsVzJLQ0hCeGxrSk5zNjZzb1EzNXE1ZzI1Rkx1THpyRDVQNWJMVmE2ZE9uRDNhN25jVEVSQklTYkZpdFZxeldlSnFhTkFibmRzZGhOamRqTnB2d2VrMTR2YTBjTnhzeDRDYytQdXg3RTdMa0IyTkFNcHMxQnVkcjFSaWNMR3NwSW9HQVFKS0ZoQWdIN0tUZ1hWM1dtSnprMS9uaURERWdwd2M2WTFCQzZRQ3c4Wnh6Q2szTGxqMlZrNU56Wm0rYnpWWm9OQnI3US90OWxjT0tMbCt6OE00U0crUnl3OWl4TUc4ZGpPd0hudDJRTnFXZDdjUnNTemFDVDRuNEl2U2VYWHNHakJrZGVUMW1QSVFGa093TzdJb0xseGRpNlpqVmtVNWUzZ2wxOU4yS29uemdjcmxLRno3K1ZPV1JEN2ZYMk0zTDFSaG1Gb2p4ZzNVRWFIb3cwLzlHMWZ2UGdvMGlWVWxDSUJDeUxLTUdBa0tXRGFoS3F4RElKTm9UTVp1TUhHdHNFQWFUQmw0bWt3bVA1d2l5TE9Ieks5Z1NiY1RIdE1RTDlmbDBPcDEwNjVaQ2V2cUZiTHZtSmo3NzlGTldQZnNnZjMzdEE4cld6Tzg4S2d3VURyaWMwY09DZ2d1anI4YWVrbjFDcUpqejh2dU0zcjZGTFpzMk1ISEkrVHk0N21NbUZFZWtxdHhOTG16TzA2T0QxZmNrVzZUeTFiRVd1aWRwL0t5eHZvNERpcGt1bGgrK25DTXpNeE9Id3hFRU9Gc1k0T0xqajJLeGFPQ21CUlphTUpsYU9CWm53b0NQaEFSanFHS0JoRGdqTHNVdkxIWURpaThndVlXQ3lSd1FKbGtsRUFqZzk2dElraURZVHliVTZGbHZwc3JCQzhRZ1NWSTQ2S0FEdWZiQXp2alJSM3VONTUxM1hpbXdEMWg3eGhsbkdHNGI5WHhXcStHc0hKOHZxYmZKWkNxUUpLblh0M3JBR3FIYUNDVkYyazZ2VzMxUzZtUU1HZ2pyMThDSUdiQjNQZFFvRWZabXF3WTVHNHFEUVkyR0JoMkdtWE1wem0ya3ROeERZZUdKbzhOQ2lBcFZpRStPSHE2cjJGeXg3OHNiYjV4MHFLYW1SbzFoWmUyeHM0NVlXdml6b05LTEVyTU9WUWloVDlVUVdndGNTY2d5QkZTRXdXQkE4ZnVGd1dSQ1ZWb3htT0t4eHNjSmd4UkFVU0UrVG10N0o3eE5mSFZNMEsrNG1PcTlIMURqeXViOE5JY3U0VllmOWRUcVBidDI2VUpxang2Y2ZlNkZETy9uSUcza2MzZzFsNmpHb0MwVzZoc2EwTHlaMmhnODZGTHUyVnBKdjlrVE5aYXJlbWhvaXR4cU5tM1p4TXlSVS9CVWIyT25xNEFGMlViQWg4dXRValJ3S0VVRGg5SlUray9LeW10QkIyeGxaYVVVOVcvTEdOM2xtNWd4ZnhYM0xGcE12djEwQmJaVGtpMUs1Uy9QdmNTN0xSYTZ4Y3Q4ZWFTWmNTTXZvMy9DYVFIdUpDWW1VbEJRUUZKU2tnN2dFckJhRzJscWlzZGljUkVYMTB4Y25KbkdPRE1tNGNWbU05SGFxa1ZOMHpKOXVDdE0xQi8ySTFSRnlHWUZlNElpQlpON2hkY2JRRGFxUWhhcUZFcjAxUVVhUWlBWFpuSEJ2RGcvMGJseGhoaUFhL1A4eXkrL05QenVyeVdmQVJWeEMza0hNRHp5eUo5c2g1b3VUMDkwOWNocWJiV2RhUkttWGlEM1JsTW8rZm9qQzI0ZkNDVURJTWNHeVZrbk40bnVlaGhHajRIOHBaRGJIN0tDZHFPY0RDc1d3YVNCV3ZEQVZRdm0vckR4OFloVGV1eTRLMWk1ZmlNVENrZEZoK2VGK016cjlYNXgvUGp4TDZ1cnF3Lys4NThiRHQxLy8vMHRnRHFoWDdvNEFaaDFCR3F4ejhOTDhQeEVKZElHMndNSmlLUnJJRWxDUXNKb2tJUmYwZEtLZksxZVRPWTRMQ1pWSEdseWM3akJDMExDYUpBd3g4VmpOY1BlZlhYazlSdElhbGM3R1lNdjR1Mk5PL0hrOXlhN1czSlFsY05KdDI3ZHdxVlJtWm1aYkhyaUxpNWUrQjhLOHJLbzNMdUgyKzc3QjNyNEh6dnRONHlkZGdNYkY5c1pQUGwvV0RCakJJT256V1hFenVzb0tMcUkvQ3dIRmVXVnpGajhKdE9IYW1TL2FmdkxEQnI2R2syVnBVeDYrQmx5TEFCMWpDKytGSGRHUG5ZYXFIVG5zbVprWVJSNVdidm0zNHlkTzYvTnVmZldsL1BNTXk4eDhjSHZEOWkrMTFyUlprOHpSN3dLWFJNVFNUREpQd2lJMWRmWDQvUDV5Y2pvMGY0K05qZFRYVjBkVHVnOWNpUlVhK29LeXlDMXRHaSt0OVpXYnhEY3RIcFRqOXVISWhTRXFxV0hoSXJxUTlVTHdScFVnaldvb1VKN1FrQ25lNVNEZ0NmcmxwQ01raUdtQ2ZTSm5odGlmdy9JcTFhOW1weVhsOWN0T2JsYnFzMldrRzR5bWJvYkRJWU1TWkl5MnhwOWJVZEREU2hXU1B1YUVTQkZBV29oYXlpVWwwZnNabFdCbWhxd0o0TWpZa3g3aFJBSFdnL3ZPamh3K0IrL1dySDI2YStVeHZyRFpXVmxSNjYvZnZ4UklocDY0ZlNKRHNDc0k0Ylc0Zk5ROGJudTkvb1VqWENxUnVneDJCMHRxTllzaVpCY3ZXNkpsRU1aWkFRUzFnUWJscmhRbmFjNUdQRU1CUWdTd3Uzd3VuUnhoRmxhS0RpZ2I0WG44N2lvclcvVU9qcFpUejZMek5OVVQ0TkxJUzA5SFhQdzdqUnplQ2JaTTk5bllxR0NZbkdTSEpYdW9kSlFXNHNiTTFucEtkR3BJL3ZXTW5ENk9yWnZYb0wxTkNBclA3b2krRzhLYktGUlYxY1hMS1EvUkVQRFlSb2JHNE1hYnhHbEVJK24vWW9Gdjk4ZnpuM1RWeTRFQW9vVUNLaGhnQXNFMUNDd3FhaHFHTlRRTWJxT1FDNE1VREdxSTUwdGNzeHpPZVo1YUJ2U280OHVzUFh0MjllZWxwWm1UMHBLc2x1dFZydlpiTFlialVhN3dXQ3d5N0pza3lUSkprbFNnaVJKOFVFZ0RBa0FHSFRldFJBdytHcTM0cHY1TE41emU0dVdiYStKNXZRSndyM3dsNm83RUFnY1Z4VEYxZHJhNnZKNFBNZWJtcHBjWDMzMTFmRzllejkyMzMzMzNSNGRlSWtZSUJPZGIrLzA0Z0FBQzh4SlJFRlVnSmtleURwaWFsRkxKMEFXQldaNklBT0VMRXRDNjVJbVlURElPa0NUTVJpTXNaVURSQkp0MjFZUWFNbTJtaUpIWXFJOXpOS1NrN3NGdTdGck9XcmY1UWdCMjR5aFgyODcrN2F0cGNGUlRFbis2U0VQL3hPd2RaYk40dmR6NE1DQnNJQ2xKb04wbEdQSFhPMktXRWFyaGZpQ0FLZTBBM0FSRnFkMXVsZEQ1VnJFTUxqT1FLNWRzTk9WZDhtZGdKcWhIV0NMWGZUYjZXeWhuY2ZZNTlGTzJyYlA5WStkTGJGQUZydDB4TkxhUEE5SnY3Y0hZaWNDczlEem1KNGFVZXlzTGFDRlFDMVN1TjZSR0dSU2toMkhvd3ZKeVYxeHlHNys4MkVsRG1jWERJYm8vdlQ5aDQxblFPNjMyMTE5Mzg3TldIc05KTXRwL3ErK3puOEN0cE1ZeDQ0ZDQrREJnOVRWMVhINGNJaTlSWFRlbXBzOU92TTBVclVRcVRtTkJyaEFJQkJscHFxcUdnVnlRcWlTcW9xd3FVcTQ0Yk9RaEVBUGRGSTdJQlFEVU1LZ1ZVTzB5OUk2QXplcEE0Q1Qyd0cxemdDdU0zQ0xCVFRhQWJIT0dKcmFBVnVMZXEybDJraWRnbGpRWjZick54djJtNFhBTEdocVNraFNOSmpwUUUyRUZHUDBnR1kwUmhoYXFIcWdiVjZhVFZmbkdmR2w5ZWpSZzZTa0pINGEzM2xVOVAvZVNFcEtJaWtwaWE1ZHUxSmIreFgxOVllQ09tOUhneVZaeDRNRjljM2hnbnF2VjErU3BXZHZJUk0xRUtVZW9nbGNCZ2dFVkZSVkZVR1FFNnFxU3FGK00xcS9CcUpZWFBBQ2ptVjBPZ0NTWkVtS0JUd2hCd0d5TTBEckROeStEblA3T3NEMmRjek9kZ0V1Q0VpZEFoalJ6YkxEb0tyM21ZVmVCd0V0aXBscFFDYUgyajZLRUZPTDFIWWF3d3JPRVpZV3FSNndSS1Z3aEZoYUVsMjZkQ0U1T1ptVWxGVFMwN3YvbjVBWCtnbllmdUJSV3ZvSnVibG5rWnFheW9FRE5kVFZmY1hodzRjNWN1UklsSkJseUR6Vks0Ym9hMDQxMzVzR2NvRkFHT0FJQkFKNmlTUkp4K0JFaE1tSjBLT0lNVlhSUjFjamJGeEk3WU5TRk5oRmZhY2RjMWM2QWJCMXhOcGlUVkxSQ2JoMUJuQnFlNjkxb05RWnM0djlUZFMyOUs5alRFMWtXZFlGQS9TQVppQ2t1aEVMYUFaRGhLSHBpOWJiVTdiVnpNNklFR1RYcmwyRExLMDdtWmsvS1ZyOUJHdy93TWpNekNBMU5ZWGEydHF3U205Yjg3UTVHRndJQVp3dnh2L1docjJGQWd4QmtGTTdCRGtkd0JITjVxUllvSXQ2M3M1bmJaWmdIbDBuekV4TDB2b3VmV3hCMW5XeVRLNmpCYjFwR2ZPYTlsaFppSm5wL0dmdGdGbkk3RFIyd3RMMGZqUnpVQk13WGljQ0dXMTJodFJ0MDlQVE1adk5QMTFnUHd5d0JkaXhkeC8vclBpS1k0cE13Vms5dWVIY016QURyYzFOdkxyck0vYldIY05nc1RHeXVKQUx1OGNrd2l2TlBQWHZqem16OTlrTXp2anY5UjJZeldheXM3TkpUVTF0WTU3cW82ZlIvamM5ZytzNGVxb29Db3EvbFpaV0NZdFppZ0k1WGJDaFBaQWowaVlWS2ZaUlZWVWtXUTRKMk1ReU96cGhZcnJYVWtqVzYyVEJyQ1BHRnZXZUNOblpKMlp5ZEFKZ2tkOExJVlJWWURESVVVeE01eTlEbjZJUkMyYWh3SUMrQ2JlZW9YVVc3WXo0MFN4dC9HaWhhR2VzMlJuYlVLVzlVYllic29xZzNaYXc3aW9tVEhtWXhTdVc0TlJkMWJYbGU1QlQ4a2x6ZkR1QTZTbGR4ZUM1dTlqNTh2eHZ2SjRoYzNleC9SVFdjekwvNlJUMDJJNnplbmN0UllYWnBKcFZscjI5a2MrT1g4YURnN0w1c3JLS2o1dGxMdTJiaS92SVFYNzk5NVVzdm1NaUE3cEVOdlBXNXEwc2VlOUxyckwxK0s4R3R0Q0lqNCtuWjg4YzB0SlNxYXVybzc2K1BtaWU2djF2SVlCcmFTT0wxRkgwdExuaENJY2JBK1JrcGVqVFE0VE9ENmNIT1lSUWhSWndVQWtHSHNKQUY3ek9KU0VFa2l3alJjQ09rMkZkTWNCM0lqQTcyWEtTTnFhcGlQdzRDcVJDN0tvanRxY0h4UER6NFA4ekdBemg5Mk1DQUVRZVk4Rk0xalhkMWdPYUlkaVl1Nk5vWjdTc1VFaUZRd08waUIrdGE5ZXVwS1Nra0phV0ZwV1BkcUl4YlFRc3JJRCs3UlROclZzeUI4dUE4VkdnQnJEa3ZwL2ptUHhXVkJIOE43cWhweFZ3KzZSdm50S2hlbDFVVlI4K3BkK2V6SC82K3NBbU8zaGc4dVhobDEwOGg3bDF6NWN3S0p2Y3ZrVTgwRGYwU1RhN1AvbVVMZnNiR2RCRk94Q3V1djA4VjJ2anVqT3RlSDVrMURjaElZR2VQWHZTdlh2M2NQVDBTTzFuUFAvQ2UvUXRLY0hlY2h6WG9VbzJmVkpMbjc2NUpMUzJCQU1Nc1F6T3k0RXZ2cURwV0ROQ0VSdzVjZ1JWTXBHUzRvUkFnSURpNWZEaFkxaXRSbkhNNVVKRnhwN2tRQloreWVWeW93UzBXSUlwemlKTVJna2hCQUcvRDE4Z0lBQkpsZzFJaE1CT1JWRlVMU0NocXFDeGxwTUZyVFlBcGtYWXBUQ2xDNmJrSTdjdmNpakMzd21CclBiOVlGNFlZWUFLN20yUTFXbUFKSVFxaE5CK0wwa3lScU1oQkhBRUZEOENDVW5Xb3BRaFVBdjRXMUV4b3JTMkVoQmd0ZG14eHBuQ1FOWk8yZ1p0ZldudE16U3Q3MEFRMEl6eDdQbkVTdTRaTm5ac1M2UmJUaEkzVDNTUTNrM3pveDJ0U09OdnoxaHh5VEIrT2d3dEJEeXdjQkdNdnhQU0xPQ3JoMGVlaFJsM1FlVW1XTGtacXR6dytGeElNOE9JU1RBd040UVNqU3grNGwvY3RXVnArT0EybFc5andiTnZzYm0wSHN2eVA5TzAzVUhlNEd1Wk9GUnJabHk1Y3kxYm01SkpxZDNDaTVzK0lYZkl6N2x2OG5BcWQyM2c2WmZmb3JxdWtmVGM4NWx4KzNUUzdScE1ySHY2WWJaVkhNZWFkWDdVaWF6WXZvYnRqWGE4ZXphd3RlSUlJNmY4bHJFbHVTZHgxZmhZdldRZWEzWitTYitSTjNIYjJCSmtvTDU4TzB1ZlhVVjU5U0djR2IyWmR2dWQ1S1ZaVC9pZlZFODl5eFl2Wm12cEFiNXgrdituOVEza3ByZVRTK00vVHNVUmxUNnBRVmFtK25obzdVNm1YM2srY1QvT2psK0FWbHlmazVQRE9lZWNRLzY1Z3pqSDBjQ0xHOHZJeWtwangvbzFtRFB5eVV4THBWdTNGSktUdStKME9uRTR1b1RMdWV4Mk82azlNa2gxSmlLWkUwaExTeU0xcFNzSlZvMEJ4TWNaY0x1UGMrUm9NM2FIRTd2Tmd0RWNSNXhSRnJJcFR0aVRrb1F0d1N4OExjMWdER2EwV3pRNUpzMDJNd21UeVNTTVJxTXdHaVFSQkFoaE1CcUUxc1JCVWcwR2d5ckxjbnRMSUxpRUd2ZEdMNXIybkNKSmtxWjRvZFZWaGwvSExBRkprZ0t5SkFWa1dRNG15V3JybG1VcHZCMkJVSVdHdW1wd3U2ckJZRkFsdEk1TkpwTlJTS2hDQ2FqQ2FEUUtrOGtrVENhek1FaUlnQ3AwaXJOeGlJQkNhMnVyc0NRa0NwdFpGbTdYY1JFWHIvbS9Jbzc5NEhHT2o4ZHF0WEM4c1o1RGh3NVJWMWRIYlcwdEJ3OGU1S3NqYnV4Mk8wbEpTVGdjWFlKK3NxNTA2NVpDYW1vcTZjbmRlVzlMQm1VTlozRDk5VGswN3N4bFcxMCs1NXh6RGtwRkR0ZmVhYVZrTEV3YUNYZU5nWjMxZ0JXeWZERHBIazBzZE5ZVWNLV0JYWWIwWGpCOE9Eak5VRHhFZTU2bHUrUjg1WnZZS2ZkblFIcUVwMWlTc3hnMi9BcXlVMnowNm5jeHc0ZGZRYjllRVZtL3lwMXZjdCswWDdDcXdzTDRpZGRqVlZ3QVZGV1UwMnZBbGR4KzF4MWt1ZDlqMkpSNVljR0N2SDZES2NrSzhNaXlOMktBN1ExbVRMc2J0V0FvRTRabU1uM3N6VlNmaEVSUjArNVZiSEQxWXZxVWExazkrem9XYjZnRW9LYXlBbWQrQ1hmZWRRY2xLWWNZTnVJVzNDZjZUNnFMR1NNdVpsMk5uV20zMy9ITmdnZlYrei9oc1U4Q1BEbmo3RmlpeVROck5oSjM5Z0N1N0tHVkpPN2M4UjVObVVVTTZtYm13LzhEemt1THhVSjJkalozTFg2QlR5Ky9tTWNmLzRER3pKSE12dTRTM0M1OWlvaW5UWW1XMVpxSVRiaW85UGpKeU1pSTlzRVp0Um1UY1ZadkVnMUNaNlphTU1mN2FQWTBvMGp4eUhLTFVERVFGMmRHbU0zRVdWUWFXcjJTMFJ4SG5DRm9zaXFDRnE5ZnhOc1NrSVdndGFVWlJZRFJhQ1Jpd1lxUU9Sb21Xa0VpRmtXK2hORGlwcW8vQUxLTWpDb0ZBbUF3R0pHbGprMVFqV1JKK0gwK0pJTVJveHg1RDBBRUFnUWtDWXNsTHNxa05KdE5CQlNGZ0Nvd0dtUjhBVUZjbkJsSmtwRXNGcFFXRjY1V1NWZ3NjV0Z6cy9XNGhDa3VpV1NuQTFsSzRIaGxMWEpjUFBGR2ZiV0FQakFnMDJwTEpJNW9jOVNjMkFXbnMwdVVEMDNmU01WT0VpYWpnOS8rMFVtLzFHNTBQNTdLcXpWR0xCWll1aEFtem9JUkpkci9uem9VVnF5RjRpa3daaFpzSGdGanhrQlRDbXdNeXBxbFpHdUwzUXo5U3RxYW9yWGxWVmh5TXFOa1hTek9ERXBLTWxpZllzV1JYMHhKU1Z1enpaaDNCWS9QdXgwWkdCNThiOGo0R2RSVzdHVnZlUTBaaGVkUzkreGJOQUxKUUU1aE1TbStNdVJsYlUzSWdwRTNNbTNVRUtDWWdiUCt6TjVhVFNtNTA1RStpUG4zanNjQnpKcHhEZmU4dUlyYmg4MmszL0NKWkZmdlkwOVpKZVplNTJDcGZJQUtOeFIxOHA5Y3UxZXp2RGFQbXMwenNRUC9IM2l4Z0ptUU81d3VBQUFBQUVsRlRrU3VRbUNDIl0sWzEsImRldGFpbHMtY29udGFpbmVyIl0sWzEsImRldGFpbHMiXSxbImhyZWYiLCJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvZGVidWdnaW5nL2V4cGVyaW1lbnRhbC9lbmFibGVfZHVtcF9kZWJ1Z19pbmZvIiwidGFyZ2V0IiwiYmxhbmsiLCJyZWwiLCJub3JlZmVycmVyIG5vb3BlbmVyIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL2RlYnVnZ2luZyIsInRhcmdldCIsImJsYW5rIiwicmVsIiwibm9yZWZlcnJlciBub29wZW5lciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiZGl2IiwwKSxSbSgxLCJkaXYiLDEpLGt1KDIsIkRlYnVnZ2VyIFYyIGlzIGluYWN0aXZlIGJlY2F1c2Ugbm8gZGF0YSBpcyBhdmFpbGFibGUuIiksQW0oKSxSbSgzLCJkaXYiKSxrdSg0LCJUbyB1c2UgdGhlIGRlYnVnZ2VyLCIpLEFtKCksUm0oNSwiZGl2IiksUm0oNiwib2wiKSxSbSg3LCJsaSIpLGt1KDgsIiBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHRoZSBiZWdpbm5pbmcgb2YgeW91ciBwcm9ncmFtOiAiKSxSbSg5LCJkaXYiLDIpLFJtKDEwLCJzcGFuIiksa3UoMTEsInRmLmRlYnVnZ2luZy5leHBlcmltZW50YWwuZW5hYmxlX2R1bXBfZGVidWdfaW5mbygiKSxBbSgpLFJtKDEyLCJzcGFuIiwzKSxrdSgxMywibG9nZGlyIiksQW0oKSxrdSgxNCwiLCAiKSxSbSgxNSwic3BhbiIsMyksa3UoMTYsJ3RlbnNvcl9kZWJ1Z19tb2RlPSJGVUxMX0hFQUxUSCInKSxBbSgpLGt1KDE3LCIsICIpLFJtKDE4LCJzcGFuIiwzKSxrdSgxOSwiY2lyY3VsYXJfYnVmZmVyX3NpemU9LTEiKSxBbSgpLFJtKDIwLCJzcGFuIiksa3UoMjEsIikiKSxBbSgpLEFtKCksQW0oKSxSbSgyMiwibGkiKSxrdSgyMywiUmUtcnVuIHRoZSBwcm9ncmFtLiIpLEFtKCksQW0oKSxBbSgpLFJtKDI0LCJkaXYiLDQpLFJtKDI1LCJkaXYiLDUpLFJtKDI2LCJkaXYiLDYpLFRtKDI3LCJpbWciLDcpLEFtKCksUm0oMjgsImRpdiIsOCksa3UoMjksIkF1dG8tYWxlcnRzIGZvciBwcm9ibGVtcyBmb3VuZCIpLEFtKCksQW0oKSxSbSgzMCwiZGl2Iiw1KSxSbSgzMSwiZGl2Iiw2KSxUbSgzMiwiaW1nIiw5KSxBbSgpLFJtKDMzLCJkaXYiLDgpLGt1KDM0LCIgSW50ZWdyYXRlZCBkZWJ1Z2dpbmcgdG8gdHJhY2UgcHJvYmxlbXMgdG8gdGhlaXIgY2F1c2VzICIpLEFtKCksQW0oKSxSbSgzNSwiZGl2Iiw1KSxSbSgzNiwiZGl2Iiw2KSxUbSgzNywiaW1nIiwxMCksQW0oKSxSbSgzOCwiZGl2Iiw4KSxrdSgzOSwiTGluayBsb2cgdG8gY29kZSIpLEFtKCksQW0oKSxBbSgpLFJtKDQwLCJkaXYiLDExKSxSbSg0MSwiZGl2IiwxMiksa3UoNDIsIiBUaGUgbG9nIGRpcmVjdG9yeSBtdXN0IGNvbnRhaW4gVGVuc29yRmxvdyBEZWJ1Z2dlciAoVjIpIGRhdGEuIHRmLmRlYnVnZ2luZy5leHBlcmltZW50YWwuZW5hYmxlX2R1bXBfZGVidWdfaW5mbygpIHdpbGwgY29sbGVjdCB0ZW5zb3IgZGF0YSwgZ3JhcGggc3RydWN0dXJlcywgdGhlIGFzc29jaWF0ZWQgc3RhY2sgdHJhY2VzLCBhbmQgc291cmNlIGNvZGUgdG8gdGhlIHNwZWNpZmljZWQgZGlyZWN0b3J5IGxvZ2RpciBhcyB0aGUgaW5zdHJ1bWVudGVkIFRlbnNvckZsb3cgcHJvZ3JhbSBleGVjdXRlcy4gIiksQW0oKSxSbSg0MywiZGl2IiwxMiksUm0oNDQsImRpdiIpLGt1KDQ1LCIgU2VlICIpLFJtKDQ2LCJhIiwxMyksa3UoNDcsIiBkb2N1bWVudGF0aW9uICIpLEFtKCksa3UoNDgsIiBvZiB0aGUgUHl0aG9uIEFQSSBvZiBEZWJ1Z2dlciBWMi4gIiksQW0oKSxSbSg0OSwiZGl2Iiksa3UoNTAsIiBTZWUgIiksUm0oNTEsImEiLDE0KSxrdSg1MiwiIGhlcmUgIiksQW0oKSxrdSg1MywiIGZvciBvdGhlciBUZW5zb3JGbG93IGRlYnVnZ2luZyBBUElzLiAiKSxBbSgpLEFtKCksQW0oKSxBbSgpKX0sc3R5bGVzOlsiLmFyZ1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBjb2xvcjogbGlnaHRibHVlO1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIG1hcmdpbjogMnB4O1xufVxuXG4uY29kZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlO1xuICBtYXJnaW46IDEwcHg7XG59XG5cbi5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmb250LWZhbWlseTogUm9ib3RvO1xuICBmb250LXNpemU6IDE1cHg7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIHBhZGRpbmc6IDUwcHg7XG59XG5cbi5kZXRhaWxzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luOiAxMHB4IDYwcHg7XG4gIHdpZHRoOiA1MCU7XG59XG5cbi5leGhpYml0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmV4aGliaXRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYWxpZ24tY29udGVudDogY2VudGVyO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMTBweCA2MHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICB3aWR0aDogMzEwcHg7XG59XG5cbi5leGhpYml0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kZXNjcmlwdGlvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogMzEwcHg7XG59XG5cbi5leGhpYml0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zY3JlZW5zaG90W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNhbnZhc1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDIwMHB4O1xuICB3aWR0aDogMTAwJTtcbn1cblxuLnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMTM1JTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIG1hcmdpbi1ib3R0b206IDI1cHg7XG59Il19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKERxLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6ImluYWN0aXZlLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vaW5hY3RpdmVfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vaW5hY3RpdmVfY29tcG9uZW50LmNzcyJdfV19XSxudWxsLG51bGwpO2NsYXNzIEVxe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dH19RXEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEVxKShTbShJdykpfSxFcS7JtWNtcD10byh7dHlwZTpFcSxzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItaW5hY3RpdmUiXV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmVG0oMCwiaW5hY3RpdmUtY29tcG9uZW50Iil9LGRpcmVjdGl2ZXM6W0RxXSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEVxLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InRmLWRlYnVnZ2VyLXYyLWluYWN0aXZlIix0ZW1wbGF0ZToiIDxpbmFjdGl2ZS1jb21wb25lbnQ+PC9pbmFjdGl2ZS1jb21wb25lbnQ+ICJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd31dfSksbnVsbCk7Y29uc3QgUnE9SlAoIltEZWJ1Z2dlcl0gRGVidWdnZXIgTG9hZGVkIiksQXE9SlAoIltEZWJ1Z2dlcl0gRGVidWdnZXIgVW5sb2FkZWQiKSxUcT1KUCgiW0RlYnVnZ2VyXSBBIE5ldyBEZWJ1Z2dlciBEYXRhIFBvbGxpbmcgRXZlbnQgQmVnaW5zIiksTnE9SlAoIltEZWJ1Z2dlcl0gRGVidWdnZXIgUnVucyBSZXF1ZXN0ZWQiKSx6cT1KUCgiW0RlYnVnZ2VyXSBEZWJ1Z2dlciBSdW5zIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLElxPUpQKCJbRGVidWdnZXJdIERlYnVnZ2VyIFJ1bnMgUmVxdWVzdCBGYWlsZWQiKSxIcT1KUCgiW0RlYnVnZ2VyXSBOdW1iZXIgYW5kIEJyZWFrZG93biBvZiBBbGVydHMgUmVxdWVzdGVkIiksRnE9SlAoIltEZWJ1Z2dlcl0gTnVtYmVyIGFuZCBCcmVha2Rvd24gb2YgQWxlcnRzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLExxPUpQKCJbRGVidWdnZXJdIEFsZXJ0cyBEYXRhIG9mIGFuIEFsZXJ0VHlwZSBJcyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxCcT1KUCgiW0RlYnVnZ2VyXSBBbGVydCBUeXBlIEZvY3VzIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxWcT1KUCgiW0RlYnVnZ2VyXSBOdW1iZXIgb2YgVG9wLUxldmVsIEV4ZWN1dGlvbnMgUmVxdWVzdGVkIiksanE9SlAoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIFRvcC1MZXZlbCBFeGVjdXRpb25zIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFVxPUpQKCJbRGVidWdnZXJdIEV4ZWN1dGlvbkRpZ2VzdHMgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksR3E9SlAoIltEZWJ1Z2dlcl0gRXhlY3V0aW9uRGlnZXN0cyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxXcT1KUCgiW0RlYnVnZ2VyXSBTY3JvbGwgTGVmdHdhcmQgb24gdGhlIEV4ZWN1dGlvbiBUaW1lbGluZSIpLFlxPUpQKCJbRGVidWdnZXJdIFNjcm9sbCBSaWdodHdhcmQgb24gdGhlIEV4ZWN1dGlvbiBUaW1lbGluZSIpLHFxPUpQKCJbRGVidWdnZXJdIFNjcm9sbCB0aGUgRXhlY3V0aW9uIFRpbWVsaW5lIHRvIEdpdmVuIEluZGV4Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWnE9SlAoIltEZWJ1Z2dlcl0gRXhlY3V0aW9uIERhdGEgT2JqZWN0cyBCZWluZyBGb2N1c2VkIE9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWHE9SlAoIltEZWJ1Z2dlcl0gRXhlY3V0aW9uIERhdGEgT2JqZWN0cyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxLcT1KUCgiW0RlYnVnZ2VyXSBOdW1iZXIgb2YgSW50cmEtR3JhcGggRXhlY3V0aW9ucyBSZXF1ZXN0ZWQiKSxKcT1KUCgiW0RlYnVnZ2VyXSBOdW1iZXIgb2YgSW50cmEtR3JhcGggRXhlY3V0aW9ucyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxRcT1KUCgiW0RlYnVnZ2VyXSBJbnRyYS1HcmFwaCBFeGVjdXRpb24gRGF0YSBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSwkcT1KUCgiW0RlYnVnZ2VyXSBJbnRyYS1HcmFwaCBFeGVjdXRpb24gRGF0YSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx0Wj1KUCgiW0RlYnVnZ2VyXSBTY3JvbGwgSW50cmEtR3JhcGggRXhlY3V0aW9uIExpc3QgdG8gR2l2ZW4gSW5kZXgiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxlWj1KUCgiW0RlYnVnZ2VyXSBHcmFwaCBFeGVjdXRpb24gaXMgRm9jdXNlZCBPbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG5aPUpQKCJbRGVidWdnZXJdIEdyYXBoIE9wIElzIEZvY3VzZWQgT24iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxvWj1KUCgiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJbmZvIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGlaPUpQKCJbRGVidWdnZXJdIEdyYXBoIE9wIEluZm8gTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksYVo9SlAoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTGlzdCBSZXF1ZXN0ZWQuIiksclo9SlAoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTGlzdCBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxzWj1KUCgiW0RlYnVnZ2VyXSBTb3VyY2UgRmlsZSBMaW5lIElzIEZvY3VzZWQgb24iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxsWj1KUCgiW0RlYnVnZ2VyXSBTb3VyY2UgRmlsZSBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxjWj1KUCgiW0RlYnVnZ2VyXSBTb3VyY2UgRmlsZSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxkWj1KUCgiW0RlYnVnZ2VyXSBBIFNldCBvZiBTdGFjayBGcmFtZXMgSGF2ZSBCZWVuIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHBaPSJkZWJ1Z2dlciI7dmFyIG1aLHVaLGZaO2Z1bmN0aW9uIGdaKHQpe2lmKG51bGw9PT10LmNvZGVMb2NhdGlvbkZvY3VzVHlwZSlyZXR1cm4gbnVsbDtsZXQgZT1bXTtpZih0LmNvZGVMb2NhdGlvbkZvY3VzVHlwZT09PWZaLkVYRUNVVElPTil7Y29uc3R7Zm9jdXNJbmRleDpuLGV4ZWN1dGlvbkRhdGE6b309dC5leGVjdXRpb25zO2lmKG51bGw9PT1ufHx2b2lkIDA9PT1vW25dKXJldHVybiBudWxsO2U9b1tuXS5zdGFja19mcmFtZV9pZHN9ZWxzZXtpZihudWxsPT09dC5ncmFwaHMuZm9jdXNlZE9wKXJldHVybiBudWxsO2NvbnN0e2dyYXBoSWQ6bixvcE5hbWU6b309dC5ncmFwaHMuZm9jdXNlZE9wO2lmKHZvaWQgMD09PXQuZ3JhcGhzLm9wc1tuXXx8IXQuZ3JhcGhzLm9wc1tuXS5oYXMobykpcmV0dXJuIG51bGw7ZT10LmdyYXBocy5vcHNbbl0uZ2V0KG8pLnN0YWNrX2ZyYW1lX2lkc31jb25zdCBuPVtdO2Zvcihjb25zdCBvIG9mIGUpe2lmKG51bGw9PXQuc3RhY2tGcmFtZXNbb10pcmV0dXJuIG51bGw7bi5wdXNoKHQuc3RhY2tGcmFtZXNbb10pfXJldHVybiBufWZ1bmN0aW9uIGhaKHQsZSl7cmV0dXJuIHQuZmluZEluZGV4KCh0PT50Lmhvc3RfbmFtZT09PWUuaG9zdF9uYW1lJiZ0LmZpbGVfcGF0aD09PWUuZmlsZV9wYXRoKSl9ZnVuY3Rpb24gYloodCxlLG4pe2lmKGU+PW4pdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBiZWdpbiB0byBiZSBsZXNzIHRoYW4gZW5kLCBidXQgZ290IGJlZ2luPSR7ZX0sIGVuZD0ke259YCk7cmV0dXJuIHQuZmluZEluZGV4KCh0PT50LmJlZ2luPT09ZSYmdC5lbmQ9PT1uKSl9ZnVuY3Rpb24geVoodCl7Y29uc3QgZT10LnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYztpZighdC5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSlyZXR1cm4gZTtjb25zdCBuPWdaKHQpO2lmKG51bGw9PT1uKXJldHVybiBlO2NvbnN0IG89KGZ1bmN0aW9uIGkodCxlKXtpZihudWxsPT09ZSlyZXR1cm4gbnVsbDtmb3IobGV0IG49dC5sZW5ndGgtMTtuPj0wOy0tbil7Y29uc3Qgbz10W25dLHtob3N0X25hbWU6aSxmaWxlX3BhdGg6YX09bztpZihpPT09ZS5ob3N0X25hbWUmJmE9PT1lLmZpbGVfcGF0aClyZXR1cm4gb31yZXR1cm4gbnVsbH0pKG4sZSk7cmV0dXJuIG51bGw9PT1vP2U6b30hKGZ1bmN0aW9uKHQpe3RbdC5VTlNQRUNJRklFRD0wXT0iVU5TUEVDSUZJRUQiLHRbdC5OT19URU5TT1I9MV09Ik5PX1RFTlNPUiIsdFt0LkNVUlRfSEVBTFRIPTJdPSJDVVJUX0hFQUxUSCIsdFt0LkNPTkNJU0VfSEVBTFRIPTNdPSJDT05DSVNFX0hFQUxUSCIsdFt0LkZVTExfSEVBTFRIPTRdPSJGVUxMX0hFQUxUSCIsdFt0LlNIQVBFPTVdPSJTSEFQRSIsdFt0LkZVTExfTlVNRVJJQ1M9Nl09IkZVTExfTlVNRVJJQ1MiLHRbdC5GVUxMX1RFTlNPUj03XT0iRlVMTF9URU5TT1IiLHRbdC5SRURVQ0VfSU5GX05BTl9USFJFRV9TTE9UUz04XT0iUkVEVUNFX0lORl9OQU5fVEhSRUVfU0xPVFMifSkobVp8fChtWj17fSkpLChmdW5jdGlvbih0KXt0LkZVTkNUSU9OX1JFQ09NUElMRV9BTEVSVD0iRnVuY3Rpb25SZWNvbXBpbGVzQWxlcnQiLHQuSU5GX05BTl9BTEVSVD0iSW5mTmFuQWxlcnQiLHQuVEVOU09SX1NIQVBFX0FMRVJUPSJUZW5zb3JTaGFwZUFsZXJ0In0pKHVafHwodVo9e30pKSwoZnVuY3Rpb24odCl7dFt0LkVYRUNVVElPTj0wXT0iRVhFQ1VUSU9OIix0W3QuR1JBUEhfT1BfQ1JFQVRJT049MV09IkdSQVBIX09QX0NSRUFUSU9OIn0pKGZafHwoZlo9e30pKTtjb25zdCBfWj15ayh7cnVuczp7fSxydW5zTG9hZGVkOntzdGF0ZTp5RS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxhY3RpdmVSdW5JZDpudWxsLGxhc3REYXRhUG9sbE9uc2V0VGltZU1zOi0xLGxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOjEsYWxlcnRzOnthbGVydHNMb2FkZWQ6e3N0YXRlOnlFLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LG51bUFsZXJ0czowLGFsZXJ0c0JyZWFrZG93bjp7fSxhbGVydHM6e30sZXhlY3V0aW9uSW5kaWNlczp7fSxncmFwaEV4ZWN1dGlvbkluZGljZXM6e30sZm9jdXNUeXBlOm51bGx9LGV4ZWN1dGlvbnM6KGZ1bmN0aW9uIENaKCl7cmV0dXJue251bUV4ZWN1dGlvbnNMb2FkZWQ6e3N0YXRlOnlFLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6e2xvYWRpbmdSYW5nZXM6W10sbnVtRXhlY3V0aW9uczowLHBhZ2VMb2FkZWRTaXplczp7fX0sZGlzcGxheUNvdW50OjUwLHBhZ2VTaXplOjEwMCxzY3JvbGxCZWdpbkluZGV4OjAsZm9jdXNJbmRleDpudWxsLGV4ZWN1dGlvbkRpZ2VzdHM6e30sZXhlY3V0aW9uRGF0YTp7fX19KSgpLGdyYXBoRXhlY3V0aW9uczooZnVuY3Rpb24gTVooKXtyZXR1cm57bnVtRXhlY3V0aW9uc0xvYWRlZDp7c3RhdGU6eUUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7bG9hZGluZ1JhbmdlczpbXSxudW1FeGVjdXRpb25zOjAscGFnZUxvYWRlZFNpemVzOnt9fSxkaXNwbGF5Q291bnQ6MTAwLHBhZ2VTaXplOjIwMCxzY3JvbGxCZWdpbkluZGV4OjAsZm9jdXNJbmRleDpudWxsLGdyYXBoRXhlY3V0aW9uRGlnZXN0czp7fSxncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXM6W10sZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzOnt9LGdyYXBoRXhlY3V0aW9uRGF0YTp7fX19KSgpLGdyYXBoczp7b3BzOnt9LGxvYWRpbmdPcHM6e30sZm9jdXNlZE9wOm51bGx9LHN0YWNrRnJhbWVzOnt9LGNvZGVMb2NhdGlvbkZvY3VzVHlwZTpudWxsLHN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlOiExLHNvdXJjZUNvZGU6e3NvdXJjZUZpbGVMaXN0TG9hZGVkOntzdGF0ZTp5RS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxzb3VyY2VGaWxlTGlzdDpbXSxmaWxlQ29udGVudHM6W10sZm9jdXNMaW5lU3BlYzpudWxsfX0sYmsoTnEsKHQ9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7cnVuc0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ydW5zTG9hZGVkKSx7c3RhdGU6eUUuTE9BRElOR30pfSkpKSxiayhJcSwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtydW5zTG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnJ1bnNMb2FkZWQpLHtzdGF0ZTp5RS5GQUlMRUR9KX0pKSksYmsoenEsKCh0LHtydW5zOmV9KT0+e2NvbnN0IG49T2JqZWN0LmtleXMoZSksbz1uLmxlbmd0aD4wJiZudWxsPT09dC5hY3RpdmVSdW5JZDtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczpvP0RhdGUubm93KCk6dC5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxydW5zOmUscnVuc0xvYWRlZDp7c3RhdGU6eUUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxhY3RpdmVSdW5JZDpuLmxlbmd0aD4wP25bMF06bnVsbH0pfSkpLGJrKFRxLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2xhc3REYXRhUG9sbE9uc2V0VGltZU1zOkRhdGUubm93KCl9KSkpLGJrKEhxLCh0PT5udWxsPT09dC5hY3RpdmVSdW5JZD90Ok9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7YWxlcnRzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmFsZXJ0cykse2FsZXJ0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5hbGVydHMuYWxlcnRzTG9hZGVkKSx7c3RhdGU6eUUuTE9BRElOR30pfSl9KSkpLGJrKEZxLCgodCx7bnVtQWxlcnRzOmUsYWxlcnRzQnJlYWtkb3duOm59KT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0IG89ZT50LmFsZXJ0cy5udW1BbGVydHM7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7bGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6bz9EYXRlLm5vdygpOnQubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMsYWxlcnRzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmFsZXJ0cykse2FsZXJ0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5hbGVydHMuYWxlcnRzTG9hZGVkKSx7c3RhdGU6eUUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSksbnVtQWxlcnRzOmUsYWxlcnRzQnJlYWtkb3duOm59KX0pfSkpLGJrKExxLCgodCx7bnVtQWxlcnRzOmUsYWxlcnRzQnJlYWtkb3duOm4sYWxlcnRUeXBlOm8sYmVnaW46aSxhbGVydHM6YX0pPT57aWYobnVsbD09PXQuYWN0aXZlUnVuSWQpcmV0dXJuIHQ7Y29uc3Qgcj17fSxzPXQuYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbb10/dC5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tvXS5zbGljZSgpOltdLGw9dC5hbGVydHMuZ3JhcGhFeGVjdXRpb25JbmRpY2VzW29dP3QuYWxlcnRzLmdyYXBoRXhlY3V0aW9uSW5kaWNlc1tvXS5zbGljZSgpOltdO2ZvcihsZXQgdD0wO3Q8YS5sZW5ndGg7Kyt0KXtjb25zdCBlPWkrdCxuPWFbdF07aWYocltlXT1uLG4uYWxlcnRfdHlwZT09PXVaLklORl9OQU5fQUxFUlQpe2NvbnN0IHQ9bjtzW2VdPXQuZXhlY3V0aW9uX2luZGV4LG51bGwhPT10LmdyYXBoX2V4ZWN1dGlvbl90cmFjZV9pbmRleCYmKGxbZV09dC5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgpfX12b2lkIDAhPT10LmFsZXJ0cy5hbGVydHNbb10mJk9iamVjdC5hc3NpZ24ocix0LmFsZXJ0cy5hbGVydHNbb10pO2xldCBjPXQuZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4LGQ9dC5ncmFwaEV4ZWN1dGlvbnMuZm9jdXNJbmRleDtpZihvPT09dVouSU5GX05BTl9BTEVSVCYmMD09PWkpe2NvbnN0IGU9YVswXTtjPU1hdGgubWF4KDAsZS5leGVjdXRpb25faW5kZXgtTWF0aC5mbG9vcih0LmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LzIpKSxudWxsIT09ZS5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgmJihkPWUuZ3JhcGhfZXhlY3V0aW9uX3RyYWNlX2luZGV4KX1yZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtleGVjdXRpb25zOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmV4ZWN1dGlvbnMpLHtzY3JvbGxCZWdpbkluZGV4OmN9KSxncmFwaEV4ZWN1dGlvbnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZ3JhcGhFeGVjdXRpb25zKSx7Zm9jdXNJbmRleDpkfSksYWxlcnRzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmFsZXJ0cykse2FsZXJ0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5hbGVydHMuYWxlcnRzTG9hZGVkKSx7c3RhdGU6eUUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSksbnVtQWxlcnRzOmUsYWxlcnRzQnJlYWtkb3duOm4sYWxlcnRzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmFsZXJ0cy5hbGVydHMpLHtbb106cn0pLGV4ZWN1dGlvbkluZGljZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuYWxlcnRzLmV4ZWN1dGlvbkluZGljZXMpLHtbb106c30pLGdyYXBoRXhlY3V0aW9uSW5kaWNlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5hbGVydHMuZ3JhcGhFeGVjdXRpb25JbmRpY2VzKSx7W29dOmx9KX0pfSl9KSksYmsoQnEsKCh0LHthbGVydFR5cGU6ZX0pPT57Y29uc3Qgbj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2FsZXJ0czpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5hbGVydHMpLHtmb2N1c1R5cGU6dC5hbGVydHMuZm9jdXNUeXBlPT09ZT9udWxsOmV9KX0pLG89bi5hbGVydHMuZm9jdXNUeXBlO2lmKG51bGwhPT1vKXtjb25zdCB0PW4uYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbb118fFtdO3ZvaWQgMCE9PXRbMF0mJihuLmV4ZWN1dGlvbnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4uZXhlY3V0aW9ucykse3Njcm9sbEJlZ2luSW5kZXg6TWF0aC5tYXgoMCxOdW1iZXIodFswXSktTWF0aC5mbG9vcihuLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LzIpKX0pKX1yZXR1cm4gbn0pKSxiayhWcSwodD0+bnVsbD09PXQuYWN0aXZlUnVuSWQ/dDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2V4ZWN1dGlvbnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZXhlY3V0aW9ucykse251bUV4ZWN1dGlvbnNMb2FkZWQ6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkKSx7c3RhdGU6eUUuTE9BRElOR30pfSl9KSkpLGJrKGpxLCgodCx7bnVtRXhlY3V0aW9uczplfSk9PntpZihudWxsPT09dC5hY3RpdmVSdW5JZClyZXR1cm4gdDtjb25zdCBuPWU+dC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyxvPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7bGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6bj9EYXRlLm5vdygpOnQubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMsZXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zKSx7bnVtRXhlY3V0aW9uc0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zLm51bUV4ZWN1dGlvbnNMb2FkZWQpLHtzdGF0ZTp5RS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9KSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCkse251bUV4ZWN1dGlvbnM6ZX0pfSl9KTtyZXR1cm4gZT4wJiZudWxsPT09dC5leGVjdXRpb25zLmZvY3VzSW5kZXgmJihvLmV4ZWN1dGlvbnMuZm9jdXNJbmRleD0wKSxvfSkpLGJrKFVxLCgodCxlKT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0IG49Wy4uLnQuZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLmxvYWRpbmdSYW5nZXNdO3JldHVybi0xPT09YloobixlLmJlZ2luLGUuZW5kKSYmbi5wdXNoKHtiZWdpbjplLmJlZ2luLGVuZDplLmVuZH0pLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zKSx7ZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQpLHtsb2FkaW5nUmFuZ2VzOm59KX0pfSl9KSksYmsoR3EsKCh0LGUpPT57aWYobnVsbD09PXQuYWN0aXZlUnVuSWQpcmV0dXJuIHQ7Y29uc3Qgbj1bLi4udC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubG9hZGluZ1Jhbmdlc10sbz1iWihuLGUuYmVnaW4sZS5lbmQpOy0xIT09byYmbi5zcGxpY2UobywxKTtjb25zdCBpPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zKSx7ZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQpLHtudW1FeGVjdXRpb25zOmUubnVtX2RpZ2VzdHMsbG9hZGluZ1JhbmdlczpufSksZXhlY3V0aW9uRGlnZXN0czpPYmplY3QuYXNzaWduKHt9LHQuZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzKX0pfSk7Zm9yKGxldCB0PWUuYmVnaW47dDxlLmVuZDsrK3QpaS5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNbdF09ZS5leGVjdXRpb25fZGlnZXN0c1t0LWUuYmVnaW5dO2lmKGUuZW5kPmUuYmVnaW4pe2NvbnN0IG49ZS5iZWdpbi90LmV4ZWN1dGlvbnMucGFnZVNpemU7aS5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQucGFnZUxvYWRlZFNpemVzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5wYWdlTG9hZGVkU2l6ZXMpLHtbbl06ZS5lbmQtZS5iZWdpbn0pfXJldHVybiBpfSkpLGJrKFdxLCh0PT57aWYobnVsbD09PXQuYWN0aXZlUnVuSWQpcmV0dXJuIHQ7bGV0IGU9dC5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXg7cmV0dXJuIGU+MCYmZS0tLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zKSx7c2Nyb2xsQmVnaW5JbmRleDplfSl9KX0pKSxiayhZcSwodD0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2xldCBlPXQuZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4O3JldHVybiBlK3QuZXhlY3V0aW9ucy5kaXNwbGF5Q291bnQrMTw9dC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyYmZSsrLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zKSx7c2Nyb2xsQmVnaW5JbmRleDplfSl9KX0pKSxiayhxcSwoKHQsZSk9PntpZihlLmluZGV4PDB8fCFOdW1iZXIuaXNJbnRlZ2VyKGUuaW5kZXgpKXRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBzY3JvbGwgdG8gbmVnYXRpdmUgb3Igbm9uLWludGVnZXIgZXhlY3V0aW9uIGluZGV4ICgke2UuaW5kZXh9KWApO2NvbnN0e2Rpc3BsYXlDb3VudDpufT10LmV4ZWN1dGlvbnMse251bUV4ZWN1dGlvbnM6b309dC5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ7aWYoZS5pbmRleD5NYXRoLm1heCgwLG8tbikpdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0IHRvIHNjcm9sbCB0byBleGVjdXRpb24gaW5kZXggKCR7ZS5pbmRleH0pLCB3aGljaCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBpbmRleCAobnVtRXhlY3V0aW9ucz0ke299OyBkaXNwbGF5Q291bnQ9JHtufSlgKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtleGVjdXRpb25zOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmV4ZWN1dGlvbnMpLHtzY3JvbGxCZWdpbkluZGV4OmUuaW5kZXh9KX0pfSkpLGJrKFpxLCgodCxlKT0+e2NvbnN0IG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtleGVjdXRpb25zOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmV4ZWN1dGlvbnMpLHtmb2N1c0luZGV4OnQuZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4K2UuZGlzcGxheUluZGV4fSksY29kZUxvY2F0aW9uRm9jdXNUeXBlOmZaLkVYRUNVVElPTixzb3VyY2VDb2RlOk9iamVjdC5hc3NpZ24oe30sdC5zb3VyY2VDb2RlKX0pO3JldHVybiBuLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYz15WihuKSxufSkpLGJrKFhxLCgodCxlKT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0IG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtleGVjdXRpb25zOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmV4ZWN1dGlvbnMpLHtleGVjdXRpb25EYXRhOk9iamVjdC5hc3NpZ24oe30sdC5leGVjdXRpb25zLmV4ZWN1dGlvbkRhdGEpfSl9KTtmb3IobGV0IHQ9ZS5iZWdpbjt0PGUuZW5kOysrdCluLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGF0YVt0XT1lLmV4ZWN1dGlvbnNbdC1lLmJlZ2luXTtyZXR1cm4gbn0pKSxiayhLcSwodD0+bnVsbD09PXQuYWN0aXZlUnVuSWQ/dDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2dyYXBoRXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaEV4ZWN1dGlvbnMpLHtudW1FeGVjdXRpb25zTG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBoRXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkKSx7c3RhdGU6eUUuTE9BRElOR30pfSl9KSkpLGJrKEpxLCgodCx7bnVtR3JhcGhFeGVjdXRpb25zOmV9KT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0IG49ZT50LmdyYXBoRXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLm51bUV4ZWN1dGlvbnMsbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2xhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOm4/RGF0ZS5ub3coKTp0Lmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zLGdyYXBoRXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaEV4ZWN1dGlvbnMpLHtudW1FeGVjdXRpb25zTG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBoRXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkKSx7c3RhdGU6eUUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSksZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCkse251bUV4ZWN1dGlvbnM6ZX0pfSl9KTtyZXR1cm4gZT4wJiZudWxsPT09dC5ncmFwaEV4ZWN1dGlvbnMuZm9jdXNJbmRleCYmKG8uZ3JhcGhFeGVjdXRpb25zLmZvY3VzSW5kZXg9MCksb30pKSxiayhRcSwoKHQse3BhZ2VJbmRleDplfSk9PntpZihudWxsPT09dC5hY3RpdmVSdW5JZClyZXR1cm4gdDtjb25zdCBuPXQuZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlcy5zbGljZSgpO3JldHVybi0xPT09bi5pbmRleE9mKGUpJiZuLnB1c2goZSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtncmFwaEV4ZWN1dGlvbnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZ3JhcGhFeGVjdXRpb25zKSx7Z3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzOm59KX0pfSkpLGJrKCRxLCgodCxlKT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0e3BhZ2VTaXplOm59PXQuZ3JhcGhFeGVjdXRpb25zLG89dC5ncmFwaEV4ZWN1dGlvbnMuZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzLnNsaWNlKCksaT1PYmplY3QuYXNzaWduKHt9LHQuZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YVBhZ2VMb2FkZWRTaXplcyksYT1PYmplY3QuYXNzaWduKHt9LHQuZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YSk7Zm9yKGxldCB0PWUuYmVnaW47dDxlLmVuZDsrK3Qpe2NvbnN0IHI9TWF0aC5mbG9vcih0L24pOy0xIT09by5pbmRleE9mKHIpJiZvLnNwbGljZShvLmluZGV4T2YociksMSksdm9pZCAwPT09aVtyXSYmKGlbcl09MCksdm9pZCAwPT09YVt0XSYmaVtyXSsrLGFbdF09ZS5ncmFwaF9leGVjdXRpb25zW3QtZS5iZWdpbl19cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Z3JhcGhFeGVjdXRpb25zOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBoRXhlY3V0aW9ucykse2dyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlczpvLGdyYXBoRXhlY3V0aW9uRGF0YVBhZ2VMb2FkZWRTaXplczppLGdyYXBoRXhlY3V0aW9uRGF0YTphfSl9KX0pKSxiayh0WiwoKHQsZSk9PntpZihlLmluZGV4PDB8fCFOdW1iZXIuaXNJbnRlZ2VyKGUuaW5kZXgpKXRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBzY3JvbGwgdG8gbmVnYXRpdmUgb3Igbm9uLWludGVnZXIgZ3JhcGgtZXhlY3V0aW9uIGluZGV4ICgke2UuaW5kZXh9KWApO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2dyYXBoRXhlY3V0aW9uczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaEV4ZWN1dGlvbnMpLHtzY3JvbGxCZWdpbkluZGV4OmUuaW5kZXh9KX0pfSkpLGJrKGVaLCgodCxlKT0+dloodCxlLmdyYXBoX2lkLGUub3BfbmFtZSxlLmluZGV4KSkpLGJrKG5aLCgodCxlKT0+dloodCxlLmdyYXBoX2lkLGUub3BfbmFtZSkpKSxiayhvWiwoKHQsZSk9Pntjb25zdHtncmFwaF9pZDpuLG9wX25hbWU6b309ZSxpPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Z3JhcGhzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBocykse2xvYWRpbmdPcHM6T2JqZWN0LmFzc2lnbih7fSx0LmdyYXBocy5sb2FkaW5nT3BzKX0pfSk7cmV0dXJuIHZvaWQgMD09PWkuZ3JhcGhzLmxvYWRpbmdPcHNbbl0mJihpLmdyYXBocy5sb2FkaW5nT3BzW25dPW5ldyBNYXApLGkuZ3JhcGhzLmxvYWRpbmdPcHNbbl0uaGFzKG8pfHxpLmdyYXBocy5sb2FkaW5nT3BzW25dLnNldChvLHlFLkxPQURJTkcpLGl9KSksYmsoaVosKCh0LGUpPT57Y29uc3R7Z3JhcGhPcEluZm9SZXNwb25zZTpufT1lLHtncmFwaF9pZHM6b309bixpPW9bby5sZW5ndGgtMV0sYT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2dyYXBoczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaHMpLHtvcHM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuZ3JhcGhzLm9wcykse1tpXTpuZXcgTWFwKHQuZ3JhcGhzLm9wc1tpXSl9KSxsb2FkaW5nT3BzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBocy5sb2FkaW5nT3BzKSx7W2ldOm5ldyBNYXAodC5ncmFwaHMubG9hZGluZ09wc1tpXSl9KX0pfSk7Zm9yKGNvbnN0IHQgb2Ygbi5pbnB1dHMpdC5kYXRhJiZhLmdyYXBocy5vcHNbaV0uc2V0KHQub3BfbmFtZSx0LmRhdGEpO2ZvcihsZXQgdD0wO3Q8bi5jb25zdW1lcnMubGVuZ3RoOysrdClmb3IoY29uc3QgZSBvZiBuLmNvbnN1bWVyc1t0XSllLmRhdGEmJmEuZ3JhcGhzLm9wc1tpXS5zZXQoZS5vcF9uYW1lLGUuZGF0YSk7cmV0dXJuIGEuZ3JhcGhzLm9wc1tpXS5zZXQobi5vcF9uYW1lLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxuKSx7aW5wdXRzOm4uaW5wdXRzLm1hcCgodD0+KHtvcF9uYW1lOnQub3BfbmFtZSxvdXRwdXRfc2xvdDp0Lm91dHB1dF9zbG90fSkpKSxjb25zdW1lcnM6bi5jb25zdW1lcnMubWFwKCh0PT50Lm1hcCgodD0+KHtvcF9uYW1lOnQub3BfbmFtZSxpbnB1dF9zbG90OnQuaW5wdXRfc2xvdH0pKSkpKX0pKSxhLmdyYXBocy5sb2FkaW5nT3BzW2ldLnNldChuLm9wX25hbWUseUUuTE9BREVEKSxhfSkpLGJrKGFaLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NvdXJjZUNvZGU6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc291cmNlQ29kZSkse3NvdXJjZUZpbGVMaXN0TG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3RMb2FkZWQpLHtzdGF0ZTp5RS5MT0FESU5HfSl9KX0pKSksYmsoclosKCh0LGUpPT57dmFyIG47Y29uc3Qgbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NvdXJjZUNvZGU6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc291cmNlQ29kZSkse3NvdXJjZUZpbGVMaXN0TG9hZGVkOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3RMb2FkZWQpLHtzdGF0ZTp5RS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9KSxzb3VyY2VGaWxlTGlzdDplLnNvdXJjZUZpbGVzLGZpbGVDb250ZW50czp0LnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNsaWNlKCl9KX0pLGk9ZS5zb3VyY2VGaWxlcy5sZW5ndGgse2ZpbGVDb250ZW50czphfT1vLnNvdXJjZUNvZGU7Zm9yKGxldCBlPTA7ZTxpOysrZSlhW2VdPW51bGwhPT0obj10LnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzW2VdKSYmdm9pZCAwIT09bj9uOntsb2FkU3RhdGU6eUUuTk9UX0xPQURFRCxsaW5lczpudWxsfTtyZXR1cm4gb30pKSxiayhzWiwoKHQsZSk9Pntjb25zdCBuPWdaKHQpLG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzb3VyY2VDb2RlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNvdXJjZUNvZGUpLHtmb2N1c0xpbmVTcGVjOmUuc3RhY2tGcmFtZX0pfSk7cmV0dXJuIG51bGwhPT1uJiYoby5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZT0oZnVuY3Rpb24gaSh0LGUpe2xldCBuPS0xLG89LTE7aWYodC5mb3JFYWNoKCgoe2ZpbGVfcGF0aDp0LGxpbmVubzppfSxhKT0+e3Q9PT1lLmZpbGVfcGF0aCYmKG89YSxpPT09ZS5saW5lbm8mJihuPWEpKX0pKSwtMT09PW4pdGhyb3cgbmV3IEVycm9yKGBTdGFjayBmcmFtZSAke0pTT04uc3RyaW5naWZ5KGUpfSBpcyBub3QgZm91bmQuYCk7cmV0dXJuIG49PT1vfSkobixlLnN0YWNrRnJhbWUpKSxvfSkpLGJrKGxaLCgodCxlKT0+e2NvbnN0IG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzb3VyY2VDb2RlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNvdXJjZUNvZGUpLHtmaWxlQ29udGVudHM6dC5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zbGljZSgpfSl9KSxvPWhaKG4uc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdCxlKTtpZighKG8+PTApKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgdGhlIGZvbGxvd2luZyBmaWxlIGluIGZpbGUgbGlzdDogaG9zdF9uYW1lPSIke2UuaG9zdF9uYW1lfSIsIGZpbGVfcGF0aD0iJHtlLmZpbGVfcGF0aH0iYCk7cmV0dXJuIG4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc3BsaWNlKG8sMSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbi5zb3VyY2VDb2RlLmZpbGVDb250ZW50c1tvXSkse2xvYWRTdGF0ZTp5RS5MT0FESU5HfSkpLG59KSksYmsoY1osKCh0LGUpPT57Y29uc3Qgbj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NvdXJjZUNvZGU6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc291cmNlQ29kZSkse2ZpbGVDb250ZW50czp0LnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNsaWNlKCl9KX0pLG89aFoobi5zb3VyY2VDb2RlLnNvdXJjZUZpbGVMaXN0LGUpO2lmKCEobz49MCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB0aGUgZm9sbG93aW5nIGZpbGUgaW4gZmlsZSBsaXN0OiBob3N0X25hbWU9IiR7ZS5ob3N0X25hbWV9IiwgZmlsZV9wYXRoPSIke2UuZmlsZV9wYXRofSJgKTtyZXR1cm4gbi5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zcGxpY2UobywxLHtsb2FkU3RhdGU6eUUuTE9BREVELGxpbmVzOmUubGluZXN9KSxufSkpLGJrKGRaLCgodCxlKT0+e2lmKG51bGw9PT10LmFjdGl2ZVJ1bklkKXJldHVybiB0O2NvbnN0IG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzdGFja0ZyYW1lczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zdGFja0ZyYW1lcyksZS5zdGFja0ZyYW1lcyksc291cmNlQ29kZTpPYmplY3QuYXNzaWduKHt9LHQuc291cmNlQ29kZSl9KTtyZXR1cm4gbi5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9eVoobiksbn0pKSk7ZnVuY3Rpb24gdloodCxlLG4sbyl7Y29uc3QgaT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2dyYXBoczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5ncmFwaHMpLHtmb2N1c2VkT3A6e2dyYXBoSWQ6ZSxvcE5hbWU6bn19KSxjb2RlTG9jYXRpb25Gb2N1c1R5cGU6ZlouR1JBUEhfT1BfQ1JFQVRJT04sc291cmNlQ29kZTpPYmplY3QuYXNzaWduKHt9LHQuc291cmNlQ29kZSl9KTtyZXR1cm4gaS5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9eVooaSksdm9pZCAwIT09byYmKGkuZ3JhcGhFeGVjdXRpb25zPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmdyYXBoRXhlY3V0aW9ucykse2ZvY3VzSW5kZXg6b30pKSxpfWZ1bmN0aW9uIHhaKHQsZSl7cmV0dXJuIF9aKHQsZSl9Y29uc3QgT1o9S3cocFopLFBaPVp3KE9aLCh0PT50LnJ1bnMpKSx3Wj1adyhPWiwodD0+dC5ydW5zTG9hZGVkKSksa1o9WncoT1osKHQ9PnQuYWN0aXZlUnVuSWQpKSxTWj1adyhPWiwodD0+dC5sYXN0RGF0YVBvbGxPbnNldFRpbWVNcy10Lmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zKSksRFo9WncoT1osKHQ9PnQuYWxlcnRzKSksRVo9WncoRFosKHQ9PnQuYWxlcnRzTG9hZGVkKSksUlo9WncoRFosKHQ9PnQubnVtQWxlcnRzKSksQVo9WncoRFosKHQ9PnQuZm9jdXNUeXBlKSksVFo9WncoRFosKHQ9Pm51bGw9PT10LmZvY3VzVHlwZT8wOnQuYWxlcnRzQnJlYWtkb3duW3QuZm9jdXNUeXBlXXx8MCkpLE5aPVp3KERaLCh0PT5udWxsPT09dC5mb2N1c1R5cGV8fHZvaWQgMD09PXQuYWxlcnRzW3QuZm9jdXNUeXBlXT9udWxsOnQuYWxlcnRzW3QuZm9jdXNUeXBlXSkpLHpaPVp3KERaLCh0PT50LmFsZXJ0c0JyZWFrZG93bikpLElaPVp3KE9aLCh0PT50LmV4ZWN1dGlvbnMpKSxIWj1adyhJWiwodD0+dC5udW1FeGVjdXRpb25zTG9hZGVkKSksRlo9WncoSVosKHQ9PnQuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCkpLExaPVp3KElaLCh0PT50LmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucykpLEJaPVp3KElaLCh0PT50LnNjcm9sbEJlZ2luSW5kZXgpKSxWWj1adyhJWiwodD0+dC5wYWdlU2l6ZSkpLGpaPVp3KElaLCh0PT50LmRpc3BsYXlDb3VudCkpLFVaPVp3KElaLCh0PT57Y29uc3QgZT1bXTtmb3IobGV0IG49dC5zY3JvbGxCZWdpbkluZGV4O248dC5zY3JvbGxCZWdpbkluZGV4K3QuZGlzcGxheUNvdW50OysrbillLnB1c2gobiBpbiB0LmV4ZWN1dGlvbkRpZ2VzdHM/dC5leGVjdXRpb25EaWdlc3RzW25dOm51bGwpO3JldHVybiBlfSkpLEdaPVp3KE9aLCh0PT50LmdyYXBoRXhlY3V0aW9ucykpLFdaPVp3KEdaLCh0PT50Lm51bUV4ZWN1dGlvbnNMb2FkZWQpKSxZWj1adyhPWiwodD0+dC5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zKSkscVo9WncoR1osKHQ9PnQuc2Nyb2xsQmVnaW5JbmRleCkpLFpaPVp3KEdaLCh0PT50LmRpc3BsYXlDb3VudCkpLFhaPVp3KEdaLCh0PT50LnBhZ2VTaXplKSksS1o9WncoR1osKHQ9PnQuZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzKSksSlo9WncoR1osKHQ9PnQuZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzKSksUVo9WncoR1osKHQ9PnQuZ3JhcGhFeGVjdXRpb25EYXRhKSksJFo9WncoR1osKHQ9PnQuZm9jdXNJbmRleCkpLHRYPVp3KE9aLCh0PT50LmdyYXBocykpLGVYPVp3KHRYLCh0PT57Y29uc3R7Zm9jdXNlZE9wOmUsb3BzOm59PXQ7cmV0dXJuIG51bGw9PT1lfHx2b2lkIDA9PT1uW2UuZ3JhcGhJZF0/bnVsbDpuW2UuZ3JhcGhJZF0uZ2V0KGUub3BOYW1lKXx8bnVsbH0pKSxuWD1adyh0WCwodD0+e2NvbnN0e2ZvY3VzZWRPcDplLG9wczpufT10O2lmKG51bGwhPT1lJiZ2b2lkIDAhPT1uW2UuZ3JhcGhJZF0mJm5bZS5ncmFwaElkXS5oYXMoZS5vcE5hbWUpKXtjb25zdCB0PW5bZS5ncmFwaElkXSx7aW5wdXRzOm99PXQuZ2V0KGUub3BOYW1lKTtyZXR1cm4gby5tYXAoKGU9Pntjb25zdCBuPU9iamVjdC5hc3NpZ24oe30sZSk7cmV0dXJuIHQuaGFzKGUub3BfbmFtZSkmJihuLmRhdGE9dC5nZXQoZS5vcF9uYW1lKSksbn0pKX1yZXR1cm4gbnVsbH0pKSxvWD1adygkWixRWixuWCwoKHQsZSxuKT0+e2lmKG51bGw9PT10fHxudWxsPT09bilyZXR1cm4gbnVsbDtjb25zdCBvPW4ubWFwKCh0PT4hMSkpLGk9W107aWYoMD09PW4ubGVuZ3RoKXJldHVybiBpO2NvbnN0IGE9ZVt0XS5ncmFwaF9pZCxyPU1hdGgubWF4KDAsdC0yMDApO2ZvcihsZXQgcz10LTE7cz49cjstLXMpaWYodm9pZCAwIT09ZVtzXSlmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoJiYob1t0XXx8ZVtzXS5ncmFwaF9pZCE9PWF8fGVbc10ub3BfbmFtZSE9PW5bdF0ub3BfbmFtZXx8ZVtzXS5vdXRwdXRfc2xvdCE9PW5bdF0ub3V0cHV0X3Nsb3R8fChpLnB1c2gocyksb1t0XT0hMCxpLmxlbmd0aCE9PW4ubGVuZ3RoKSk7Kyt0KTtyZXR1cm4gaX0pKSxpWD1adyh0WCwodD0+e2NvbnN0e2ZvY3VzZWRPcDplLG9wczpufT10O2lmKG51bGwhPT1lJiZ2b2lkIDAhPT1uW2UuZ3JhcGhJZF0mJm5bZS5ncmFwaElkXS5oYXMoZS5vcE5hbWUpKXtjb25zdCB0PW5bZS5ncmFwaElkXSx7Y29uc3VtZXJzOm99PXQuZ2V0KGUub3BOYW1lKTtyZXR1cm4gby5tYXAoKGU9PmUubWFwKChlPT57Y29uc3Qgbj1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiB0LmhhcyhlLm9wX25hbWUpJiYobi5kYXRhPXQuZ2V0KGUub3BfbmFtZSkpLG59KSkpKX1yZXR1cm4gbnVsbH0pKSxhWD1adyhPWiwodD0+e2NvbnN0IGU9dC5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgsbj10LmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleCt0LmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LG89bmV3IEFycmF5KG4tZSkuZmlsbChudWxsKSxpPXQuYWxlcnRzLmZvY3VzVHlwZTtpZihudWxsPT09aSlyZXR1cm4gbztjb25zdCBhPXQuYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbaV07aWYodm9pZCAwPT09YSlyZXR1cm4gbztmb3IobGV0IGk9ZTtpPG47KytpKWEuaW5jbHVkZXMoaSkmJihvW2ktZV09dC5hbGVydHMuZm9jdXNUeXBlKTtyZXR1cm4gb30pKSxyWD1adyhPWiwodD0+dC5leGVjdXRpb25zKSksc1g9WncoclgsKHQ9PnQuZm9jdXNJbmRleCkpLGxYPVp3KHJYLCh0PT57aWYobnVsbD09PXQuZm9jdXNJbmRleClyZXR1cm4gbnVsbDtjb25zdHtmb2N1c0luZGV4OmUsc2Nyb2xsQmVnaW5JbmRleDpuLGRpc3BsYXlDb3VudDpvfT10O3JldHVybiBlPG58fGU+PW4rbz9udWxsOmUtbn0pKSxjWD1adyhyWCwodD0+dC5leGVjdXRpb25EYXRhKSksZFg9WncoT1osKHQ9PnQuZ3JhcGhzLmxvYWRpbmdPcHMpKSxwWD1adyhPWiwodD0+dC5zdGFja0ZyYW1lcykpLG1YPVp3KHJYLCh0PT57Y29uc3R7Zm9jdXNJbmRleDplLGV4ZWN1dGlvbkRhdGE6bn09dDtyZXR1cm4gbnVsbD09PWV8fHZvaWQgMD09PW5bZV0/bnVsbDpuW2VdfSkpLHVYPVp3KE9aLHNYLG1YLGVYLCgodCxlLG4sbyk9Pntjb25zdHtjb2RlTG9jYXRpb25Gb2N1c1R5cGU6aX09dDtyZXR1cm4gbnVsbD09PWk/bnVsbDppPT09ZlouRVhFQ1VUSU9OP251bGw9PT1lfHxudWxsPT09bj9udWxsOntjb2RlTG9jYXRpb25UeXBlOmZaLkVYRUNVVElPTixvcFR5cGU6bi5vcF90eXBlLGV4ZWN1dGlvbkluZGV4OmV9Om51bGw9PT1vP251bGw6e2NvZGVMb2NhdGlvblR5cGU6ZlouR1JBUEhfT1BfQ1JFQVRJT04sb3BUeXBlOm8ub3BfdHlwZSxvcE5hbWU6by5vcF9uYW1lfX0pKSxmWD1adyhPWixnWiksZ1g9WncoT1osKHQ9PnQuc291cmNlQ29kZSkpLGhYPVp3KGdYLCh0PT50LnNvdXJjZUZpbGVMaXN0TG9hZGVkKSk7WncoZ1gsKHQ9PnQuc291cmNlRmlsZUxpc3QpKTtjb25zdCBiWD1adyhnWCwodD0+e2NvbnN0e3NvdXJjZUZpbGVMaXN0OmUsZm9jdXNMaW5lU3BlYzpufT10O3JldHVybiBudWxsPT09bj8tMTpoWihlLG4pfSkpLHlYPVp3KGdYLGJYLCgodCxlKT0+LTE9PT1lP251bGw6dC5maWxlQ29udGVudHNbZV18fG51bGwpKSxfWD1adyhPWiwodD0+dC5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWMpKSxDWD1adyhPWiwodD0+dC5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSkpLE1YPWZ1bmN0aW9uKHQpe3JldHVyblt0XX07ZnVuY3Rpb24gdlgodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJkaXYiLDcpLFZtKCJjbGljayIsKGZ1bmN0aW9uIGUoKXtjb25zdCBuPWhpKHQpLiRpbXBsaWNpdDtyZXR1cm4gWW0oKS5vblRvZ2dsZUZvY3VzVHlwZS5lbWl0KG4udHlwZSl9KSksUm0oMSwiZGl2Iiw4KSxrdSgyKSxBbSgpLFJtKDMsImRpdiIsOSksa3UoNCksQW0oKSxUbSg1LCJkaXYiKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPVltKCk7RG0oIm5nQ2xhc3MiLE1oKDQsTVgsdC50eXBlPT09bi5mb2N1c1R5cGU/ImZvY3VzIjoiIikpLHJjKDIpLFN1KHQuZGlzcGxheU5hbWUpLHJjKDIpLEV1KCIgIix0LmRpc3BsYXlTeW1ib2wsIjogIix0LmNvdW50LCIgIil9fWNsYXNzIHhYe2NvbnN0cnVjdG9yKCl7dGhpcy5udW1BbGVydHM9MCx0aGlzLmFsZXJ0c0JyZWFrZG93bj1bXSx0aGlzLmZvY3VzVHlwZT1udWxsLHRoaXMub25Ub2dnbGVGb2N1c1R5cGU9bmV3IExofX14WC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8eFgpfSx4WC7JtWNtcD10byh7dHlwZTp4WCxzZWxlY3RvcnM6W1siYWxlcnRzLWNvbXBvbmVudCJdXSxpbnB1dHM6e251bUFsZXJ0czoibnVtQWxlcnRzIixhbGVydHNCcmVha2Rvd246ImFsZXJ0c0JyZWFrZG93biIsZm9jdXNUeXBlOiJmb2N1c1R5cGUifSxvdXRwdXRzOntvblRvZ2dsZUZvY3VzVHlwZToib25Ub2dnbGVGb2N1c1R5cGUifSxkZWNsczoxMCx2YXJzOjUsY29uc3RzOltbMSwiYWxlcnRzLWNvbnRhaW5lciJdLFsxLCJkZWJ1Z2dpbmctdGl0bGUiXSxbMSwibnVtLWFsZXJ0cy1jb250YWluZXIiXSxbMSwibnVtLWFsZXJ0cy1sYWJlbCJdLFsxLCJudW0tYWxlcnRzLXZhbHVlIiwzLCJuZ0NsYXNzIl0sWzEsImFsZXJ0cy1icmVha2Rvd24tY29udGFpbmVyIl0sWyJjbGFzcyIsImFsZXJ0cy1icmVha2Rvd24tdHlwZSIsMywibmdDbGFzcyIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiYWxlcnRzLWJyZWFrZG93bi10eXBlIiwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbMSwiYWxlcnQtdHlwZS1uYW1lIl0sWzEsImFsZXJ0LXR5cGUtY291bnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsImRpdiIsMCksUm0oMSwiZGl2IiwxKSxrdSgyLCJEZWJ1Z2dpbmciKSxBbSgpLFJtKDMsImRpdiIsMiksUm0oNCwiZGl2IiwzKSxrdSg1LCJBbGVydHMiKSxBbSgpLFJtKDYsImRpdiIsNCksa3UoNyksQW0oKSxBbSgpLFJtKDgsImRpdiIsNSksUXAoOSx2WCw2LDYsImRpdiIsNiksQW0oKSxBbSgpKSwyJmUmJihyYyg2KSxEbSgibmdDbGFzcyIsTWgoMyxNWCxuLm51bUFsZXJ0cz4wPyJub24temVybyI6IiIpKSxyYygxKSxEdSgiICIsbi5udW1BbGVydHMsIiAiKSxyYygyKSxEbSgibmdGb3JPZiIsbi5hbGVydHNCcmVha2Rvd24pKX0sZGlyZWN0aXZlczpbYU0sbE1dLHN0eWxlczpbIi5hbGVydHMtYnJlYWtkb3duLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDEzcHg7XG4gIHBhZGRpbmc6IDEwcHggMTBweCAxMHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5hbGVydHMtYnJlYWtkb3duLXR5cGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYm9yZGVyLXJhZGl1czogMCAxMHB4IDEwcHggMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiA2cHggMCA2cHggNTBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmFsZXJ0cy1icmVha2Rvd24tdHlwZS5mb2N1c1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlZWUwO1xufVxuXG4uYWxlcnRzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LWZhbWlseTogJ1JvYm90bycsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG59XG5cbi5hbGVydC10eXBlLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGNvbG9yOiAjZmZmO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDNweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMjBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmFsZXJ0LXR5cGUtbmFtZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDNweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmRlYnVnZ2luZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDE4cHg7XG59XG5cbi5udW0tYWxlcnRzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgcGFkZGluZzogMTBweCAxMHB4IDEwcHggMzBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4ubnVtLWFsZXJ0cy1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMTNweDtcbn1cblxuLm51bS1hbGVydHMtdmFsdWVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAyMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAyNHB4O1xufVxuXG4ubnVtLWFsZXJ0cy12YWx1ZS5ub24temVyb1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZiNzgwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn0iXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoeFgsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoiYWxlcnRzLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vYWxlcnRzX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL2FsZXJ0c19jb21wb25lbnQuY3NzIl19XX1dLG51bGwse251bUFsZXJ0czpbe3R5cGU6eHl9XSxhbGVydHNCcmVha2Rvd246W3t0eXBlOnh5fV0sZm9jdXNUeXBlOlt7dHlwZTp4eX1dLG9uVG9nZ2xlRm9jdXNUeXBlOlt7dHlwZTpPeX1dfSk7Y29uc3QgT1g9e1t1Wi5GVU5DVElPTl9SRUNPTVBJTEVfQUxFUlRdOntkaXNwbGF5TmFtZToiRnVuY3Rpb24gcmVjb21waWxlcyIsZGlzcGxheVN5bWJvbDoiQyJ9LFt1Wi5JTkZfTkFOX0FMRVJUXTp7ZGlzcGxheU5hbWU6Ik5hTi/iiJ4iLGRpc3BsYXlTeW1ib2w6IuKIniJ9LFt1Wi5URU5TT1JfU0hBUEVfQUxFUlRdOntkaXNwbGF5TmFtZToiVGVuc29yIHNoYXBlIixkaXNwbGF5U3ltYm9sOiLilqAifX07Y2xhc3MgUFh7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMubnVtQWxlcnRzJD10aGlzLnN0b3JlLnBpcGUoRncoUlopKSx0aGlzLmFsZXJ0c0JyZWFrZG93biQ9dGhpcy5zdG9yZS5waXBlKEZ3KFp3KHpaLCh0PT57Y29uc3QgZT1PYmplY3Qua2V5cyh0KTtyZXR1cm4gZS5zb3J0KCksZS5tYXAoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7dHlwZTplfSxPWFtlXSkse2NvdW50OnRbZV19KSkpfSkpKSksdGhpcy5mb2N1c1R5cGUkPXRoaXMuc3RvcmUucGlwZShGdyhBWikpfW9uVG9nZ2xlRm9jdXNUeXBlKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goQnEoe2FsZXJ0VHlwZTp0fSkpfX1QWC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UFgpKFNtKEl3KSl9LFBYLsm1Y21wPXRvKHt0eXBlOlBYLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1hbGVydHMiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywibnVtQWxlcnRzIiwiYWxlcnRzQnJlYWtkb3duIiwiZm9jdXNUeXBlIiwib25Ub2dnbGVGb2N1c1R5cGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsImFsZXJ0cy1jb21wb25lbnQiLDApLFZtKCJvblRvZ2dsZUZvY3VzVHlwZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25Ub2dnbGVGb2N1c1R5cGUoZSl9KSksQWgoMSwiYXN5bmMiKSxBaCgyLCJhc3luYyIpLEFoKDMsImFzeW5jIiksQW0oKSksMiZlJiZEbSgibnVtQWxlcnRzIixUaCgxLDMsbi5udW1BbGVydHMkKSkoImFsZXJ0c0JyZWFrZG93biIsVGgoMiw1LG4uYWxlcnRzQnJlYWtkb3duJCkpKCJmb2N1c1R5cGUiLFRoKDMsNyxuLmZvY3VzVHlwZSQpKX0sZGlyZWN0aXZlczpbeFhdLHBpcGVzOlt3TV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChQWCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJ0Zi1kZWJ1Z2dlci12Mi1hbGVydHMiLHRlbXBsYXRlOidcbiAgICA8YWxlcnRzLWNvbXBvbmVudFxuICAgICAgW251bUFsZXJ0c109Im51bUFsZXJ0cyQgfCBhc3luYyJcbiAgICAgIFthbGVydHNCcmVha2Rvd25dPSJhbGVydHNCcmVha2Rvd24kIHwgYXN5bmMiXG4gICAgICBbZm9jdXNUeXBlXT0iZm9jdXNUeXBlJCB8IGFzeW5jIlxuICAgICAgKG9uVG9nZ2xlRm9jdXNUeXBlKT0ib25Ub2dnbGVGb2N1c1R5cGUoJGV2ZW50KSJcbiAgICA+XG4gICAgPC9hbGVydHMtY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd31dfSksbnVsbCk7Y29uc3Qgd1g9WyJzbGlkZXJXcmFwcGVyIl0sa1g9Tnooe3Bhc3NpdmU6ITF9KSxTWD17cHJvdmlkZTpJVix1c2VFeGlzdGluZzpxZSgoKCk9PlJYKSksbXVsdGk6ITB9O2NsYXNzIERYe31jb25zdCBFWD0kSShKSShLSShjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9lbGVtZW50UmVmPXR9fSksImFjY2VudCIpKTtjbGFzcyBSWCBleHRlbmRzIEVYe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyl7c3VwZXIodCksdGhpcy5fZm9jdXNNb25pdG9yPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9bix0aGlzLl9kaXI9byx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9hbmltYXRpb25Nb2RlPXMsdGhpcy5faW52ZXJ0PSExLHRoaXMuX21heD0xMDAsdGhpcy5fbWluPTAsdGhpcy5fc3RlcD0xLHRoaXMuX3RodW1iTGFiZWw9ITEsdGhpcy5fdGlja0ludGVydmFsPTAsdGhpcy5fdmFsdWU9bnVsbCx0aGlzLl92ZXJ0aWNhbD0hMSx0aGlzLmNoYW5nZT1uZXcgTGgsdGhpcy5pbnB1dD1uZXcgTGgsdGhpcy52YWx1ZUNoYW5nZT1uZXcgTGgsdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX3BlcmNlbnQ9MCx0aGlzLl9pc1NsaWRpbmc9bnVsbCx0aGlzLl9pc0FjdGl2ZT0hMSx0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50PTAsdGhpcy5fc2xpZGVyRGltZW5zaW9ucz1udWxsLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj1tLkVNUFRZLHRoaXMuX3BvaW50ZXJEb3duPXQ9Pnt0aGlzLmRpc2FibGVkfHx0aGlzLl9pc1NsaWRpbmd8fCFBWCh0KSYmMCE9PXQuYnV0dG9ufHx0aGlzLl9uZ1pvbmUucnVuKCgoKT0+e3RoaXMuX3RvdWNoSWQ9QVgodCk/KGZ1bmN0aW9uIGUodCxuKXtmb3IobGV0IGU9MDtlPHQudG91Y2hlcy5sZW5ndGg7ZSsrKXtjb25zdCBvPXQudG91Y2hlc1tlXS50YXJnZXQ7aWYobj09PW98fG4uY29udGFpbnMobykpcmV0dXJuIHQudG91Y2hlc1tlXS5pZGVudGlmaWVyfX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKSh0LHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk6dm9pZCAwO2NvbnN0IG49VFgodCx0aGlzLl90b3VjaElkKTtpZihuKXtjb25zdCBlPXRoaXMudmFsdWU7dGhpcy5faXNTbGlkaW5nPSJwb2ludGVyIix0aGlzLl9sYXN0UG9pbnRlckV2ZW50PXQsdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzSG9zdEVsZW1lbnQoKSx0aGlzLl9vbk1vdXNlZW50ZXIoKSx0aGlzLl9iaW5kR2xvYmFsRXZlbnRzKHQpLHRoaXMuX2ZvY3VzSG9zdEVsZW1lbnQoKSx0aGlzLl91cGRhdGVWYWx1ZUZyb21Qb3NpdGlvbihuKSx0aGlzLl92YWx1ZU9uU2xpZGVTdGFydD1lLGUhPXRoaXMudmFsdWUmJnRoaXMuX2VtaXRJbnB1dEV2ZW50KCl9fSkpfSx0aGlzLl9wb2ludGVyTW92ZT10PT57aWYoInBvaW50ZXIiPT09dGhpcy5faXNTbGlkaW5nKXtjb25zdCBlPVRYKHQsdGhpcy5fdG91Y2hJZCk7aWYoZSl7dC5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IG49dGhpcy52YWx1ZTt0aGlzLl9sYXN0UG9pbnRlckV2ZW50PXQsdGhpcy5fdXBkYXRlVmFsdWVGcm9tUG9zaXRpb24oZSksbiE9dGhpcy52YWx1ZSYmdGhpcy5fZW1pdElucHV0RXZlbnQoKX19fSx0aGlzLl9wb2ludGVyVXA9dD0+eyJwb2ludGVyIj09PXRoaXMuX2lzU2xpZGluZyYmKEFYKHQpJiYibnVtYmVyIj09dHlwZW9mIHRoaXMuX3RvdWNoSWQmJiFOWCh0LmNoYW5nZWRUb3VjaGVzLHRoaXMuX3RvdWNoSWQpfHwodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3JlbW92ZUdsb2JhbEV2ZW50cygpLHRoaXMuX2lzU2xpZGluZz1udWxsLHRoaXMuX3RvdWNoSWQ9dm9pZCAwLHRoaXMuX3ZhbHVlT25TbGlkZVN0YXJ0PT10aGlzLnZhbHVlfHx0aGlzLmRpc2FibGVkfHx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSx0aGlzLl92YWx1ZU9uU2xpZGVTdGFydD10aGlzLl9sYXN0UG9pbnRlckV2ZW50PW51bGwpKX0sdGhpcy5fd2luZG93Qmx1cj0oKT0+e3RoaXMuX2xhc3RQb2ludGVyRXZlbnQmJnRoaXMuX3BvaW50ZXJVcCh0aGlzLl9sYXN0UG9pbnRlckV2ZW50KX0sdGhpcy5fZG9jdW1lbnQ9cix0aGlzLnRhYkluZGV4PXBhcnNlSW50KGkpfHwwLGEucnVuT3V0c2lkZUFuZ3VsYXIoKCgpPT57Y29uc3QgZT10Lm5hdGl2ZUVsZW1lbnQ7ZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX3BvaW50ZXJEb3duLGtYKSxlLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX3BvaW50ZXJEb3duLGtYKX0pKX1nZXQgaW52ZXJ0KCl7cmV0dXJuIHRoaXMuX2ludmVydH1zZXQgaW52ZXJ0KHQpe3RoaXMuX2ludmVydD15eih0KX1nZXQgbWF4KCl7cmV0dXJuIHRoaXMuX21heH1zZXQgbWF4KHQpe3RoaXMuX21heD1feih0LHRoaXMuX21heCksdGhpcy5fcGVyY2VudD10aGlzLl9jYWxjdWxhdGVQZXJjZW50YWdlKHRoaXMuX3ZhbHVlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgbWluKCl7cmV0dXJuIHRoaXMuX21pbn1zZXQgbWluKHQpe3RoaXMuX21pbj1feih0LHRoaXMuX21pbiksdGhpcy5fcGVyY2VudD10aGlzLl9jYWxjdWxhdGVQZXJjZW50YWdlKHRoaXMuX3ZhbHVlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgc3RlcCgpe3JldHVybiB0aGlzLl9zdGVwfXNldCBzdGVwKHQpe3RoaXMuX3N0ZXA9X3oodCx0aGlzLl9zdGVwKSx0aGlzLl9zdGVwJTEhPTAmJih0aGlzLl9yb3VuZFRvRGVjaW1hbD10aGlzLl9zdGVwLnRvU3RyaW5nKCkuc3BsaXQoIi4iKS5wb3AoKS5sZW5ndGgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCB0aHVtYkxhYmVsKCl7cmV0dXJuIHRoaXMuX3RodW1iTGFiZWx9c2V0IHRodW1iTGFiZWwodCl7dGhpcy5fdGh1bWJMYWJlbD15eih0KX1nZXQgdGlja0ludGVydmFsKCl7cmV0dXJuIHRoaXMuX3RpY2tJbnRlcnZhbH1zZXQgdGlja0ludGVydmFsKHQpe3RoaXMuX3RpY2tJbnRlcnZhbD0iYXV0byI9PT10PyJhdXRvIjoibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdD9feih0LHRoaXMuX3RpY2tJbnRlcnZhbCk6MH1nZXQgdmFsdWUoKXtyZXR1cm4gbnVsbD09PXRoaXMuX3ZhbHVlJiYodGhpcy52YWx1ZT10aGlzLl9taW4pLHRoaXMuX3ZhbHVlfXNldCB2YWx1ZSh0KXtpZih0IT09dGhpcy5fdmFsdWUpe2xldCBlPV96KHQsMCk7dGhpcy5fcm91bmRUb0RlY2ltYWwmJmUhPT10aGlzLm1pbiYmZSE9PXRoaXMubWF4JiYoZT1wYXJzZUZsb2F0KGUudG9GaXhlZCh0aGlzLl9yb3VuZFRvRGVjaW1hbCkpKSx0aGlzLl92YWx1ZT1lLHRoaXMuX3BlcmNlbnQ9dGhpcy5fY2FsY3VsYXRlUGVyY2VudGFnZSh0aGlzLl92YWx1ZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9fWdldCB2ZXJ0aWNhbCgpe3JldHVybiB0aGlzLl92ZXJ0aWNhbH1zZXQgdmVydGljYWwodCl7dGhpcy5fdmVydGljYWw9eXoodCl9Z2V0IGRpc3BsYXlWYWx1ZSgpe3JldHVybiB0aGlzLmRpc3BsYXlXaXRoP3RoaXMuZGlzcGxheVdpdGgodGhpcy52YWx1ZSk6dGhpcy5fcm91bmRUb0RlY2ltYWwmJnRoaXMudmFsdWUmJnRoaXMudmFsdWUlMSE9MD90aGlzLnZhbHVlLnRvRml4ZWQodGhpcy5fcm91bmRUb0RlY2ltYWwpOnRoaXMudmFsdWV8fDB9Zm9jdXModCl7dGhpcy5fZm9jdXNIb3N0RWxlbWVudCh0KX1ibHVyKCl7dGhpcy5fYmx1ckhvc3RFbGVtZW50KCl9Z2V0IHBlcmNlbnQoKXtyZXR1cm4gdGhpcy5fY2xhbXAodGhpcy5fcGVyY2VudCl9X3Nob3VsZEludmVydEF4aXMoKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbD8hdGhpcy5pbnZlcnQ6dGhpcy5pbnZlcnR9X2lzTWluVmFsdWUoKXtyZXR1cm4gMD09PXRoaXMucGVyY2VudH1fZ2V0VGh1bWJHYXAoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD83OnRoaXMuX2lzTWluVmFsdWUoKSYmIXRoaXMudGh1bWJMYWJlbD90aGlzLl9pc0FjdGl2ZT8xMDo3OjB9X2dldFRyYWNrQmFja2dyb3VuZFN0eWxlcygpe2NvbnN0IHQ9dGhpcy52ZXJ0aWNhbD9gMSwgJHsxLXRoaXMucGVyY2VudH0sIDFgOjEtdGhpcy5wZXJjZW50KyIsIDEsIDEiO3JldHVybnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSR7dGhpcy52ZXJ0aWNhbD8iWSI6IlgifSgke3RoaXMuX3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCk/Ii0iOiIifSR7dGhpcy5fZ2V0VGh1bWJHYXAoKX1weCkgc2NhbGUzZCgke3R9KWB9fV9nZXRUcmFja0ZpbGxTdHlsZXMoKXtjb25zdCB0PXRoaXMucGVyY2VudCxlPXRoaXMudmVydGljYWw/YDEsICR7dH0sIDFgOmAke3R9LCAxLCAxYDtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLl9zaG91bGRJbnZlcnRNb3VzZUNvb3JkcygpPyIiOiItIn0ke3RoaXMuX2dldFRodW1iR2FwKCl9cHgpIHNjYWxlM2QoJHtlfSlgLGRpc3BsYXk6MD09PXQ/Im5vbmUiOiIifX1fZ2V0VGlja3NDb250YWluZXJTdHlsZXMoKXtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLnZlcnRpY2FsfHwicnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCk/Ii0iOiIifSR7dGhpcy5fdGlja0ludGVydmFsUGVyY2VudC8yKjEwMH0lKWB9fV9nZXRUaWNrc1N0eWxlcygpe2xldCB0PTEwMCp0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50LGU9e2JhY2tncm91bmRTaXplOnRoaXMudmVydGljYWw/YDJweCAke3R9JWA6YCR7dH0lIDJweGAsdHJhbnNmb3JtOmB0cmFuc2xhdGVaKDApIHRyYW5zbGF0ZSR7dGhpcy52ZXJ0aWNhbD8iWSI6IlgifSgke3RoaXMudmVydGljYWx8fCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKT8iIjoiLSJ9JHt0LzJ9JSkke3RoaXMudmVydGljYWx8fCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKT8iIjoiIHJvdGF0ZSgxODBkZWcpIn1gfTtpZih0aGlzLl9pc01pblZhbHVlKCkmJnRoaXMuX2dldFRodW1iR2FwKCkpe2NvbnN0IHQ9dGhpcy5fc2hvdWxkSW52ZXJ0QXhpcygpO2xldCBuO249dGhpcy52ZXJ0aWNhbD90PyJCb3R0b20iOiJUb3AiOnQ/IlJpZ2h0IjoiTGVmdCIsZVtgcGFkZGluZyR7bn1gXT1gJHt0aGlzLl9nZXRUaHVtYkdhcCgpfXB4YH1yZXR1cm4gZX1fZ2V0VGh1bWJDb250YWluZXJTdHlsZXMoKXtjb25zdCB0PXRoaXMuX3Nob3VsZEludmVydEF4aXMoKTtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oLSR7MTAwKigoInJ0bCIhPXRoaXMuX2dldERpcmVjdGlvbigpfHx0aGlzLnZlcnRpY2FsP3Q6IXQpP3RoaXMucGVyY2VudDoxLXRoaXMucGVyY2VudCl9JSlgfX1fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKXtjb25zdCB0PXRoaXMuX3Nob3VsZEludmVydEF4aXMoKTtyZXR1cm4icnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCl8fHRoaXMudmVydGljYWw/dDohdH1fZ2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpciYmInJ0bCI9PXRoaXMuX2Rpci52YWx1ZT8icnRsIjoibHRyIn1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCEwKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLl9pc0FjdGl2ZT0hIXQmJiJrZXlib2FyZCIhPT10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKX0pKSx0aGlzLl9kaXImJih0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249dGhpcy5fZGlyLmNoYW5nZS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSkpfW5nT25EZXN0cm95KCl7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX3BvaW50ZXJEb3duLGtYKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX3BvaW50ZXJEb3duLGtYKSx0aGlzLl9sYXN0UG9pbnRlckV2ZW50PW51bGwsdGhpcy5fcmVtb3ZlR2xvYmFsRXZlbnRzKCksdGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfV9vbk1vdXNlZW50ZXIoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5fc2xpZGVyRGltZW5zaW9ucz10aGlzLl9nZXRTbGlkZXJEaW1lbnNpb25zKCksdGhpcy5fdXBkYXRlVGlja0ludGVydmFsUGVyY2VudCgpKX1fb25Gb2N1cygpe3RoaXMuX3NsaWRlckRpbWVuc2lvbnM9dGhpcy5fZ2V0U2xpZGVyRGltZW5zaW9ucygpLHRoaXMuX3VwZGF0ZVRpY2tJbnRlcnZhbFBlcmNlbnQoKX1fb25CbHVyKCl7dGhpcy5vblRvdWNoZWQoKX1fb25LZXlkb3duKHQpe2lmKHRoaXMuZGlzYWJsZWR8fGJ6KHQpfHx0aGlzLl9pc1NsaWRpbmcmJiJrZXlib2FyZCIhPT10aGlzLl9pc1NsaWRpbmcpcmV0dXJuO2NvbnN0IGU9dGhpcy52YWx1ZTtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIDMzOnRoaXMuX2luY3JlbWVudCgxMCk7YnJlYWs7Y2FzZSAzNDp0aGlzLl9pbmNyZW1lbnQoLTEwKTticmVhaztjYXNlIDM1OnRoaXMudmFsdWU9dGhpcy5tYXg7YnJlYWs7Y2FzZSAzNjp0aGlzLnZhbHVlPXRoaXMubWluO2JyZWFrO2Nhc2UgMzc6dGhpcy5faW5jcmVtZW50KCJydGwiPT10aGlzLl9nZXREaXJlY3Rpb24oKT8xOi0xKTticmVhaztjYXNlIGd6OnRoaXMuX2luY3JlbWVudCgxKTticmVhaztjYXNlIDM5OnRoaXMuX2luY3JlbWVudCgicnRsIj09dGhpcy5fZ2V0RGlyZWN0aW9uKCk/LTE6MSk7YnJlYWs7Y2FzZSBoejp0aGlzLl9pbmNyZW1lbnQoLTEpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufWUhPXRoaXMudmFsdWUmJih0aGlzLl9lbWl0SW5wdXRFdmVudCgpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpKSx0aGlzLl9pc1NsaWRpbmc9ImtleWJvYXJkIix0LnByZXZlbnREZWZhdWx0KCl9X29uS2V5dXAoKXsia2V5Ym9hcmQiPT09dGhpcy5faXNTbGlkaW5nJiYodGhpcy5faXNTbGlkaW5nPW51bGwpfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fYmluZEdsb2JhbEV2ZW50cyh0KXtjb25zdCBlPXRoaXMuX2RvY3VtZW50LG49QVgodCksbz1uPyJ0b3VjaGVuZCI6Im1vdXNldXAiO2UuYWRkRXZlbnRMaXN0ZW5lcihuPyJ0b3VjaG1vdmUiOiJtb3VzZW1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLGtYKSxlLmFkZEV2ZW50TGlzdGVuZXIobyx0aGlzLl9wb2ludGVyVXAsa1gpLG4mJmUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hjYW5jZWwiLHRoaXMuX3BvaW50ZXJVcCxrWCk7Y29uc3QgaT10aGlzLl9nZXRXaW5kb3coKTt2b2lkIDAhPT1pJiZpJiZpLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXIpfV9yZW1vdmVHbG9iYWxFdmVudHMoKXtjb25zdCB0PXRoaXMuX2RvY3VtZW50O3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9wb2ludGVyTW92ZSxrWCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9wb2ludGVyVXAsa1gpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9wb2ludGVyTW92ZSxrWCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5fcG9pbnRlclVwLGtYKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoY2FuY2VsIix0aGlzLl9wb2ludGVyVXAsa1gpO2NvbnN0IGU9dGhpcy5fZ2V0V2luZG93KCk7dm9pZCAwIT09ZSYmZSYmZS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl93aW5kb3dCbHVyKX1faW5jcmVtZW50KHQpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXAoKHRoaXMudmFsdWV8fDApK3RoaXMuc3RlcCp0LHRoaXMubWluLHRoaXMubWF4KX1fdXBkYXRlVmFsdWVGcm9tUG9zaXRpb24odCl7aWYoIXRoaXMuX3NsaWRlckRpbWVuc2lvbnMpcmV0dXJuO2xldCBlPXRoaXMuX2NsYW1wKCgodGhpcy52ZXJ0aWNhbD90Lnk6dC54KS0odGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLnRvcDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLmxlZnQpKS8odGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLmhlaWdodDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLndpZHRoKSk7aWYodGhpcy5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKSYmKGU9MS1lKSwwPT09ZSl0aGlzLnZhbHVlPXRoaXMubWluO2Vsc2UgaWYoMT09PWUpdGhpcy52YWx1ZT10aGlzLm1heDtlbHNle2NvbnN0IHQ9dGhpcy5fY2FsY3VsYXRlVmFsdWUoZSksbj1NYXRoLnJvdW5kKCh0LXRoaXMubWluKS90aGlzLnN0ZXApKnRoaXMuc3RlcCt0aGlzLm1pbjt0aGlzLnZhbHVlPXRoaXMuX2NsYW1wKG4sdGhpcy5taW4sdGhpcy5tYXgpfX1fZW1pdENoYW5nZUV2ZW50KCl7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbih0aGlzLnZhbHVlKSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSksdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudCgpKX1fZW1pdElucHV0RXZlbnQoKXt0aGlzLmlucHV0LmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoKSl9X3VwZGF0ZVRpY2tJbnRlcnZhbFBlcmNlbnQoKXtpZih0aGlzLnRpY2tJbnRlcnZhbCYmdGhpcy5fc2xpZGVyRGltZW5zaW9ucylpZigiYXV0byI9PXRoaXMudGlja0ludGVydmFsKXtsZXQgdD10aGlzLnZlcnRpY2FsP3RoaXMuX3NsaWRlckRpbWVuc2lvbnMuaGVpZ2h0OnRoaXMuX3NsaWRlckRpbWVuc2lvbnMud2lkdGgsZT1NYXRoLmNlaWwoMzAvKHQqdGhpcy5zdGVwLyh0aGlzLm1heC10aGlzLm1pbikpKTt0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50PWUqdGhpcy5zdGVwL3R9ZWxzZSB0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50PXRoaXMudGlja0ludGVydmFsKnRoaXMuc3RlcC8odGhpcy5tYXgtdGhpcy5taW4pfV9jcmVhdGVDaGFuZ2VFdmVudCh0PXRoaXMudmFsdWUpe2xldCBlPW5ldyBEWDtyZXR1cm4gZS5zb3VyY2U9dGhpcyxlLnZhbHVlPXQsZX1fY2FsY3VsYXRlUGVyY2VudGFnZSh0KXtyZXR1cm4oKHR8fDApLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pfV9jYWxjdWxhdGVWYWx1ZSh0KXtyZXR1cm4gdGhpcy5taW4rdCoodGhpcy5tYXgtdGhpcy5taW4pfV9jbGFtcCh0LGU9MCxuPTEpe3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKHQsbikpfV9nZXRTbGlkZXJEaW1lbnNpb25zKCl7cmV0dXJuIHRoaXMuX3NsaWRlcldyYXBwZXI/dGhpcy5fc2xpZGVyV3JhcHBlci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOm51bGx9X2ZvY3VzSG9zdEVsZW1lbnQodCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKHQpfV9ibHVySG9zdEVsZW1lbnQoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYmx1cigpfXdyaXRlVmFsdWUodCl7dGhpcy52YWx1ZT10fXJlZ2lzdGVyT25DaGFuZ2UodCl7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj10fXJlZ2lzdGVyT25Ub3VjaGVkKHQpe3RoaXMub25Ub3VjaGVkPXR9c2V0RGlzYWJsZWRTdGF0ZSh0KXt0aGlzLmRpc2FibGVkPXR9fWZ1bmN0aW9uIEFYKHQpe3JldHVybiJ0Ij09PXQudHlwZVswXX1mdW5jdGlvbiBUWCh0LGUpe2xldCBuO3JldHVybiBuPUFYKHQpPyJudW1iZXIiPT10eXBlb2YgZT9OWCh0LnRvdWNoZXMsZSl8fE5YKHQuY2hhbmdlZFRvdWNoZXMsZSk6dC50b3VjaGVzWzBdfHx0LmNoYW5nZWRUb3VjaGVzWzBdOnQsbj97eDpuLmNsaWVudFgseTpuLmNsaWVudFl9OnZvaWQgMH1mdW5jdGlvbiBOWCh0LGUpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0uaWRlbnRpZmllcj09PWUpcmV0dXJuIHRbbl19UlguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFJYKShTbShoZyksU20oU0kpLFNtKFVnKSxTbShISSw4KSxOYSgidGFiaW5kZXgiKSxTbShhXyksU20oWl8pLFNtKFZQLDgpKX0sUlguybVjbXA9dG8oe3R5cGU6Ulgsc2VsZWN0b3JzOltbIm1hdC1zbGlkZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJlFoKHdYLDUpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4uX3NsaWRlcldyYXBwZXI9dC5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwic2xpZGVyIiwxLCJtYXQtc2xpZGVyIiwibWF0LWZvY3VzLWluZGljYXRvciJdLGhvc3RWYXJzOjI5LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZWbSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX29uRm9jdXMoKX0pKSgiYmx1ciIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fb25CbHVyKCl9KSkoImtleWRvd24iLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9vbktleWRvd24oZSl9KSkoImtleXVwIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vbktleXVwKCl9KSkoIm1vdXNlZW50ZXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX29uTW91c2VlbnRlcigpfSkpKCJzZWxlY3RzdGFydCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUucHJldmVudERlZmF1bHQoKX0pKSwyJmUmJihUdSgidGFiSW5kZXgiLG4udGFiSW5kZXgpLGpwKCJhcmlhLWRpc2FibGVkIixuLmRpc2FibGVkKSgiYXJpYS12YWx1ZW1heCIsbi5tYXgpKCJhcmlhLXZhbHVlbWluIixuLm1pbikoImFyaWEtdmFsdWVub3ciLG4udmFsdWUpKCJhcmlhLXZhbHVldGV4dCIsbnVsbD09bi52YWx1ZVRleHQ/bi5kaXNwbGF5VmFsdWU6bi52YWx1ZVRleHQpKCJhcmlhLW9yaWVudGF0aW9uIixuLnZlcnRpY2FsPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwiKSxwdSgibWF0LXNsaWRlci1kaXNhYmxlZCIsbi5kaXNhYmxlZCkoIm1hdC1zbGlkZXItaGFzLXRpY2tzIixuLnRpY2tJbnRlcnZhbCkoIm1hdC1zbGlkZXItaG9yaXpvbnRhbCIsIW4udmVydGljYWwpKCJtYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQiLG4uX3Nob3VsZEludmVydEF4aXMoKSkoIm1hdC1zbGlkZXItaW52ZXJ0LW1vdXNlLWNvb3JkcyIsbi5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKSkoIm1hdC1zbGlkZXItc2xpZGluZyIsbi5faXNTbGlkaW5nKSgibWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIixuLnRodW1iTGFiZWwpKCJtYXQtc2xpZGVyLXZlcnRpY2FsIixuLnZlcnRpY2FsKSgibWF0LXNsaWRlci1taW4tdmFsdWUiLG4uX2lzTWluVmFsdWUoKSkoIm1hdC1zbGlkZXItaGlkZS1sYXN0LXRpY2siLG4uZGlzYWJsZWR8fG4uX2lzTWluVmFsdWUoKSYmbi5fZ2V0VGh1bWJHYXAoKSYmbi5fc2hvdWxkSW52ZXJ0QXhpcygpKSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1uLl9hbmltYXRpb25Nb2RlKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCIsaW52ZXJ0OiJpbnZlcnQiLG1heDoibWF4IixtaW46Im1pbiIsc3RlcDoic3RlcCIsdGh1bWJMYWJlbDoidGh1bWJMYWJlbCIsdGlja0ludGVydmFsOiJ0aWNrSW50ZXJ2YWwiLHZhbHVlOiJ2YWx1ZSIsdmVydGljYWw6InZlcnRpY2FsIixkaXNwbGF5V2l0aDoiZGlzcGxheVdpdGgiLHZhbHVlVGV4dDoidmFsdWVUZXh0In0sb3V0cHV0czp7Y2hhbmdlOiJjaGFuZ2UiLGlucHV0OiJpbnB1dCIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRTbGlkZXIiXSxmZWF0dXJlczpbcGcoW1NYXSkseHBdLGRlY2xzOjEzLHZhcnM6Nixjb25zdHM6W1sxLCJtYXQtc2xpZGVyLXdyYXBwZXIiXSxbInNsaWRlcldyYXBwZXIiLCIiXSxbMSwibWF0LXNsaWRlci10cmFjay13cmFwcGVyIl0sWzEsIm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRyYWNrLWZpbGwiLDMsIm5nU3R5bGUiXSxbMSwibWF0LXNsaWRlci10aWNrcy1jb250YWluZXIiLDMsIm5nU3R5bGUiXSxbMSwibWF0LXNsaWRlci10aWNrcyIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lciIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLWZvY3VzLXJpbmciXSxbMSwibWF0LXNsaWRlci10aHVtYiJdLFsxLCJtYXQtc2xpZGVyLXRodW1iLWxhYmVsIl0sWzEsIm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiZGl2IiwwLDEpLFJtKDIsImRpdiIsMiksVG0oMywiZGl2IiwzKSxUbSg0LCJkaXYiLDQpLEFtKCksUm0oNSwiZGl2Iiw1KSxUbSg2LCJkaXYiLDYpLEFtKCksUm0oNywiZGl2Iiw3KSxUbSg4LCJkaXYiLDgpLFRtKDksImRpdiIsOSksUm0oMTAsImRpdiIsMTApLFJtKDExLCJzcGFuIiwxMSksa3UoMTIpLEFtKCksQW0oKSxBbSgpLEFtKCkpLDImZSYmKHJjKDMpLERtKCJuZ1N0eWxlIixuLl9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKSkscmMoMSksRG0oIm5nU3R5bGUiLG4uX2dldFRyYWNrRmlsbFN0eWxlcygpKSxyYygxKSxEbSgibmdTdHlsZSIsbi5fZ2V0VGlja3NDb250YWluZXJTdHlsZXMoKSkscmMoMSksRG0oIm5nU3R5bGUiLG4uX2dldFRpY2tzU3R5bGVzKCkpLHJjKDEpLERtKCJuZ1N0eWxlIixuLl9nZXRUaHVtYkNvbnRhaW5lclN0eWxlcygpKSxyYyg1KSxTdShuLmRpc3BsYXlWYWx1ZSkpfSxkaXJlY3RpdmVzOltDTV0sc3R5bGVzOlsnLm1hdC1zbGlkZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6OHB4O291dGxpbmU6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTphY3RpdmUsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1zbGlkaW5nOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCl7Y3Vyc29yOi13ZWJraXQtZ3JhYmJpbmc7Y3Vyc29yOmdyYWJiaW5nfS5tYXQtc2xpZGVyLXdyYXBwZXJ7LXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3Q6ZXhhY3Q7Y29sb3ItYWRqdXN0OmV4YWN0O3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO292ZXJmbG93OmhpZGRlbn0ubWF0LXNsaWRlci10cmFjay1maWxse3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7b3ZlcmZsb3c6aGlkZGVufS5tYXQtc2xpZGVyLXRpY2tzey13ZWJraXQtYmFja2dyb3VuZC1jbGlwOmNvbnRlbnQtYm94O2JhY2tncm91bmQtY2xpcDpjb250ZW50LWJveDtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQ7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci1mb2N1cy1yaW5ne3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNmb3JtOnNjYWxlKDApO29wYWNpdHk6MDt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLG9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zbGlkZXItZm9jdXMtcmluZywubWF0LXNsaWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpOm5vdCgubWF0LXNsaWRlci1zbGlkaW5nKSAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpOm5vdCgubWF0LXNsaWRlci1zbGlkaW5nKSAubWF0LXNsaWRlci10aHVtYntjdXJzb3I6LXdlYmtpdC1ncmFiO2N1cnNvcjpncmFifS5tYXQtc2xpZGVyLXRodW1ie3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0xMHB4O2JvdHRvbTotMTBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtib3JkZXI6M3B4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zZm9ybTpzY2FsZSgwLjcpO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm9yZGVyLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2Rpc3BsYXk6bm9uZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJvcmRlci1yYWRpdXMgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse291dGxpbmU6c29saWQgMXB4fS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7ei1pbmRleDoxO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItc2xpZGluZyAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLXNsaWRpbmcgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci1zbGlkaW5nIC5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcnt0cmFuc2l0aW9uLWR1cmF0aW9uOjBtc30ubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItd2lkdGg6MDtib3JkZXItc3R5bGU6c29saWQ7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci1oYXMtdGlja3MuY2RrLWZvY3VzZWQ6bm90KC5tYXQtc2xpZGVyLWhpZGUtbGFzdC10aWNrKSAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlciwubWF0LXNsaWRlci1oYXMtdGlja3M6aG92ZXI6bm90KC5tYXQtc2xpZGVyLWhpZGUtbGFzdC10aWNrKSAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntvcGFjaXR5OjF9Lm1hdC1zbGlkZXItaGFzLXRpY2tzLmNkay1mb2N1c2VkOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkgLm1hdC1zbGlkZXItdGlja3MsLm1hdC1zbGlkZXItaGFzLXRpY2tzOmhvdmVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkgLm1hdC1zbGlkZXItdGlja3N7b3BhY2l0eToxfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tkaXNwbGF5Om5vbmV9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtkaXNwbGF5OmZsZXh9Lm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1maWxse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlfS5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHt0cmFuc2Zvcm0tb3JpZ2luOjAgMH0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1mb2N1c2VkLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYnt0cmFuc2Zvcm06c2NhbGUoMCl9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtib3JkZXItcmFkaXVzOjUwJSA1MCUgMH0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7b3BhY2l0eToxfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLW1vdXNlLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstdG91Y2gtZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLXdpZHRoOjJweDt0cmFuc2Zvcm06c2NhbGUoMSl9Lm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3t0cmFuc2Zvcm06c2NhbGUoMCk7b3BhY2l0eTowfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci13aWR0aDo0cHg7dHJhbnNmb3JtOnNjYWxlKDAuNSl9Lm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtc2xpZGVyLWhvcml6b250YWx7aGVpZ2h0OjQ4cHg7bWluLXdpZHRoOjEyOHB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItd3JhcHBlcntoZWlnaHQ6MnB4O3RvcDoyM3B4O2xlZnQ6OHB4O3JpZ2h0OjhweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2hlaWdodDoycHg7Ym9yZGVyLWxlZnQtd2lkdGg6MnB4O3JpZ2h0OjA7dG9wOjB9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay13cmFwcGVye2hlaWdodDoycHg7d2lkdGg6MTAwJX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7aGVpZ2h0OjJweDt3aWR0aDoxMDAlO3RyYW5zZm9ybTpzY2FsZVgoMCl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2hlaWdodDoycHg7d2lkdGg6MTAwJTt0cmFuc2Zvcm06c2NhbGVYKDEpfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye2hlaWdodDoycHg7d2lkdGg6MTAwJX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye2hlaWdodDowO291dGxpbmU6c29saWQgMnB4O3RvcDoxcHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3toZWlnaHQ6MnB4O3dpZHRoOjEwMCV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MDt0b3A6NTAlfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3t0b3A6LTE1cHg7cmlnaHQ6LTE1cHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtyaWdodDotMTRweDt0b3A6LTQwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMjZweCkgc2NhbGUoMC4wMSkgcm90YXRlKDQ1ZGVnKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfS5tYXQtc2xpZGVyLWhvcml6b250YWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci1ob3Jpem9udGFsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpub25lfS5tYXQtc2xpZGVyLXZlcnRpY2Fse3dpZHRoOjQ4cHg7bWluLWhlaWdodDoxMjhweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci13cmFwcGVye3dpZHRoOjJweDt0b3A6OHB4O2JvdHRvbTo4cHg7bGVmdDoyM3B4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye3dpZHRoOjJweDtib3JkZXItdG9wLXdpZHRoOjJweDtib3R0b206MDtsZWZ0OjB9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdHJhY2std3JhcHBlcntoZWlnaHQ6MTAwJTt3aWR0aDoycHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtoZWlnaHQ6MTAwJTt3aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlWSgwKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2hlaWdodDoxMDAlO3dpZHRoOjJweDt0cmFuc2Zvcm06c2NhbGVZKDEpfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcnt3aWR0aDoycHg7aGVpZ2h0OjEwMCV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7d2lkdGg6MDtvdXRsaW5lOnNvbGlkIDJweDtsZWZ0OjFweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JvdHRvbTotMTVweDtsZWZ0Oi0xNXB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tze3dpZHRoOjJweDtoZWlnaHQ6MTAwJX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7aGVpZ2h0OjEwMCU7d2lkdGg6MDtsZWZ0OjUwJX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYnstd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVufS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JvdHRvbTotMTRweDtsZWZ0Oi00MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVYKDI2cHgpIHNjYWxlKDAuMDEpIHJvdGF0ZSgtNDVkZWcpfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1hdC1zbGlkZXItdmVydGljYWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfVtkaXI9cnRsXSAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntsZWZ0OjA7cmlnaHQ6YXV0b31bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1maWxse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7dHJhbnNmb3JtLW9yaWdpbjowIDB9W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7dHJhbnNmb3JtLW9yaWdpbjowIDB9W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCV9Lm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRpY2tzLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lciwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci1mb2N1cy1yaW5nLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHQsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye3RyYW5zaXRpb246bm9uZX1cbiddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLFJYLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6aGd9LHt0eXBlOlNJfSx7dHlwZTpVZ30se3R5cGU6SEksZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmphLGFyZ3M6WyJ0YWJpbmRleCJdfV19LHt0eXBlOmFffSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbVlBdfV19XSxSWC5wcm9wRGVjb3JhdG9ycz17aW52ZXJ0Olt7dHlwZTp4eX1dLG1heDpbe3R5cGU6eHl9XSxtaW46W3t0eXBlOnh5fV0sc3RlcDpbe3R5cGU6eHl9XSx0aHVtYkxhYmVsOlt7dHlwZTp4eX1dLHRpY2tJbnRlcnZhbDpbe3R5cGU6eHl9XSx2YWx1ZTpbe3R5cGU6eHl9XSxkaXNwbGF5V2l0aDpbe3R5cGU6eHl9XSx2YWx1ZVRleHQ6W3t0eXBlOnh5fV0sdmVydGljYWw6W3t0eXBlOnh5fV0sY2hhbmdlOlt7dHlwZTpPeX1dLGlucHV0Olt7dHlwZTpPeX1dLHZhbHVlQ2hhbmdlOlt7dHlwZTpPeX1dLF9zbGlkZXJXcmFwcGVyOlt7dHlwZTpaYSxhcmdzOlsic2xpZGVyV3JhcHBlciJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoUlgsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWF0LXNsaWRlciIsZXhwb3J0QXM6Im1hdFNsaWRlciIscHJvdmlkZXJzOltTWF0saG9zdDp7Iihmb2N1cykiOiJfb25Gb2N1cygpIiwiKGJsdXIpIjoiX29uQmx1cigpIiwiKGtleWRvd24pIjoiX29uS2V5ZG93bigkZXZlbnQpIiwiKGtleXVwKSI6Il9vbktleXVwKCkiLCIobW91c2VlbnRlcikiOiJfb25Nb3VzZWVudGVyKCkiLCIoc2VsZWN0c3RhcnQpIjoiJGV2ZW50LnByZXZlbnREZWZhdWx0KCkiLGNsYXNzOiJtYXQtc2xpZGVyIG1hdC1mb2N1cy1pbmRpY2F0b3IiLHJvbGU6InNsaWRlciIsIlt0YWJJbmRleF0iOiJ0YWJJbmRleCIsIlthdHRyLmFyaWEtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbYXR0ci5hcmlhLXZhbHVlbWF4XSI6Im1heCIsIlthdHRyLmFyaWEtdmFsdWVtaW5dIjoibWluIiwiW2F0dHIuYXJpYS12YWx1ZW5vd10iOiJ2YWx1ZSIsIlthdHRyLmFyaWEtdmFsdWV0ZXh0XSI6InZhbHVlVGV4dCA9PSBudWxsID8gZGlzcGxheVZhbHVlIDogdmFsdWVUZXh0IiwiW2F0dHIuYXJpYS1vcmllbnRhdGlvbl0iOid2ZXJ0aWNhbCA/ICJ2ZXJ0aWNhbCIgOiAiaG9yaXpvbnRhbCInLCJbY2xhc3MubWF0LXNsaWRlci1kaXNhYmxlZF0iOiJkaXNhYmxlZCIsIltjbGFzcy5tYXQtc2xpZGVyLWhhcy10aWNrc10iOiJ0aWNrSW50ZXJ2YWwiLCJbY2xhc3MubWF0LXNsaWRlci1ob3Jpem9udGFsXSI6IiF2ZXJ0aWNhbCIsIltjbGFzcy5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWRdIjoiX3Nob3VsZEludmVydEF4aXMoKSIsIltjbGFzcy5tYXQtc2xpZGVyLWludmVydC1tb3VzZS1jb29yZHNdIjoiX3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCkiLCJbY2xhc3MubWF0LXNsaWRlci1zbGlkaW5nXSI6Il9pc1NsaWRpbmciLCJbY2xhc3MubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nXSI6InRodW1iTGFiZWwiLCJbY2xhc3MubWF0LXNsaWRlci12ZXJ0aWNhbF0iOiJ2ZXJ0aWNhbCIsIltjbGFzcy5tYXQtc2xpZGVyLW1pbi12YWx1ZV0iOiJfaXNNaW5WYWx1ZSgpIiwiW2NsYXNzLm1hdC1zbGlkZXItaGlkZS1sYXN0LXRpY2tdIjoiZGlzYWJsZWQgfHwgX2lzTWluVmFsdWUoKSAmJiBfZ2V0VGh1bWJHYXAoKSAmJiBfc2hvdWxkSW52ZXJ0QXhpcygpIiwiW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSI6J19hbmltYXRpb25Nb2RlID09PSAiTm9vcEFuaW1hdGlvbnMiJ30sdGVtcGxhdGU6JzxkaXYgY2xhc3M9Im1hdC1zbGlkZXItd3JhcHBlciIgI3NsaWRlcldyYXBwZXI+XG4gIDxkaXYgY2xhc3M9Im1hdC1zbGlkZXItdHJhY2std3JhcHBlciI+XG4gICAgPGRpdiBjbGFzcz0ibWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIiBbbmdTdHlsZV09Il9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKSI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0ibWF0LXNsaWRlci10cmFjay1maWxsIiBbbmdTdHlsZV09Il9nZXRUcmFja0ZpbGxTdHlsZXMoKSI+PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJtYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lciIgW25nU3R5bGVdPSJfZ2V0VGlja3NDb250YWluZXJTdHlsZXMoKSI+XG4gICAgPGRpdiBjbGFzcz0ibWF0LXNsaWRlci10aWNrcyIgW25nU3R5bGVdPSJfZ2V0VGlja3NTdHlsZXMoKSI+PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJtYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lciIgW25nU3R5bGVdPSJfZ2V0VGh1bWJDb250YWluZXJTdHlsZXMoKSI+XG4gICAgPGRpdiBjbGFzcz0ibWF0LXNsaWRlci1mb2N1cy1yaW5nIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtc2xpZGVyLXRodW1iIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJtYXQtc2xpZGVyLXRodW1iLWxhYmVsIj5cbiAgICAgIDxzcGFuIGNsYXNzPSJtYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHQiPnt7ZGlzcGxheVZhbHVlfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGlucHV0czpbImRpc2FibGVkIiwiY29sb3IiLCJ0YWJJbmRleCJdLGVuY2Fwc3VsYXRpb246SG4uTm9uZSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNoLHN0eWxlczpbJy5tYXQtc2xpZGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjhweDtvdXRsaW5lOm5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCk6YWN0aXZlLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItc2xpZGluZzpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpe2N1cnNvcjotd2Via2l0LWdyYWJiaW5nO2N1cnNvcjpncmFiYmluZ30ubWF0LXNsaWRlci13cmFwcGVyey13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdDtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LXNsaWRlci10cmFjay13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtvdmVyZmxvdzpoaWRkZW59Lm1hdC1zbGlkZXItdHJhY2stZmlsbHtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO292ZXJmbG93OmhpZGRlbn0ubWF0LXNsaWRlci10aWNrc3std2Via2l0LWJhY2tncm91bmQtY2xpcDpjb250ZW50LWJveDtiYWNrZ3JvdW5kLWNsaXA6Y29udGVudC1ib3g7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItZm9jdXMtcmluZ3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDozMHB4O2hlaWdodDozMHB4O2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zZm9ybTpzY2FsZSgwKTtvcGFjaXR5OjA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcsLm1hdC1zbGlkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTpub3QoLm1hdC1zbGlkZXItc2xpZGluZykgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTpub3QoLm1hdC1zbGlkZXItc2xpZGluZykgLm1hdC1zbGlkZXItdGh1bWJ7Y3Vyc29yOi13ZWJraXQtZ3JhYjtjdXJzb3I6Z3JhYn0ubWF0LXNsaWRlci10aHVtYntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTBweDtib3R0b206LTEwcHg7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyOjNweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2Zvcm06c2NhbGUoMC43KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJvcmRlci1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbHtkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3JkZXItcmFkaXVzIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3otaW5kZXg6MTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXNsaWRpbmcgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci1zbGlkaW5nIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXItc2xpZGluZyAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7dHJhbnNpdGlvbi1kdXJhdGlvbjowbXN9Lm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXN0eWxlOnNvbGlkO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItaGFzLXRpY2tzLmNkay1mb2N1c2VkOm5vdCgubWF0LXNsaWRlci1oaWRlLWxhc3QtdGljaykgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXIsLm1hdC1zbGlkZXItaGFzLXRpY2tzOmhvdmVyOm5vdCgubWF0LXNsaWRlci1oaWRlLWxhc3QtdGljaykgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7b3BhY2l0eToxfS5tYXQtc2xpZGVyLWhhcy10aWNrcy5jZGstZm9jdXNlZDpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpIC5tYXQtc2xpZGVyLXRpY2tzLC5tYXQtc2xpZGVyLWhhcy10aWNrczpob3Zlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpIC5tYXQtc2xpZGVyLXRpY2tze29wYWNpdHk6MX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7ZGlzcGxheTpub25lfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7ZGlzcGxheTpmbGV4fS5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX0ubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7dHJhbnNmb3JtLW9yaWdpbjowIDB9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWJ7dHJhbnNmb3JtOnNjYWxlKDApfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7Ym9yZGVyLXJhZGl1czo1MCUgNTAlIDB9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e29wYWNpdHk6MX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1tb3VzZS1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLXRvdWNoLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci13aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlKDEpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dHJhbnNmb3JtOnNjYWxlKDApO29wYWNpdHk6MH0ubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItd2lkdGg6NHB4O3RyYW5zZm9ybTpzY2FsZSgwLjUpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2Rpc3BsYXk6bm9uZX0ubWF0LXNsaWRlci1ob3Jpem9udGFse2hlaWdodDo0OHB4O21pbi13aWR0aDoxMjhweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXdyYXBwZXJ7aGVpZ2h0OjJweDt0b3A6MjNweDtsZWZ0OjhweDtyaWdodDo4cHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntoZWlnaHQ6MnB4O2JvcmRlci1sZWZ0LXdpZHRoOjJweDtyaWdodDowO3RvcDowfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2std3JhcHBlcntoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1maWxse2hlaWdodDoycHg7d2lkdGg6MTAwJTt0cmFuc2Zvcm06c2NhbGVYKDApfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtoZWlnaHQ6MnB4O3dpZHRoOjEwMCU7dHJhbnNmb3JtOnNjYWxlWCgxKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntoZWlnaHQ6MDtvdXRsaW5lOnNvbGlkIDJweDt0b3A6MXB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3N7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye3dpZHRoOjEwMCU7aGVpZ2h0OjA7dG9wOjUwJX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dG9wOi0xNXB4O3JpZ2h0Oi0xNXB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7cmlnaHQ6LTE0cHg7dG9wOi00MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKDI2cHgpIHNjYWxlKDAuMDEpIHJvdGF0ZSg0NWRlZyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLWhvcml6b250YWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt0cmFuc2Zvcm06bm9uZX0ubWF0LXNsaWRlci12ZXJ0aWNhbHt3aWR0aDo0OHB4O21pbi1oZWlnaHQ6MTI4cHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItd3JhcHBlcnt3aWR0aDoycHg7dG9wOjhweDtib3R0b206OHB4O2xlZnQ6MjNweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcnt3aWR0aDoycHg7Ym9yZGVyLXRvcC13aWR0aDoycHg7Ym90dG9tOjA7bGVmdDowfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4O3RyYW5zZm9ybTpzY2FsZVkoMCl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtoZWlnaHQ6MTAwJTt3aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlWSgxKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7d2lkdGg6MnB4O2hlaWdodDoxMDAlfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye3dpZHRoOjA7b3V0bGluZTpzb2xpZCAycHg7bGVmdDoxcHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tib3R0b206LTE1cHg7bGVmdDotMTVweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3t3aWR0aDoycHg7aGVpZ2h0OjEwMCV9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye2hlaWdodDoxMDAlO3dpZHRoOjA7bGVmdDo1MCV9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWJ7LXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbn0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtib3R0b206LTE0cHg7bGVmdDotNDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgyNnB4KSBzY2FsZSgwLjAxKSByb3RhdGUoLTQ1ZGVnKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtc2xpZGVyLXZlcnRpY2FsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7bGVmdDowO3JpZ2h0OmF1dG99W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsLm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1maWxse3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsLm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlfS5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aWNrcywubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXIsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItZm9jdXMtcmluZywubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0LC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcnt0cmFuc2l0aW9uOm5vbmV9XG4nXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfSx7dHlwZTpTSX0se3R5cGU6VWd9LHt0eXBlOkhJLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpqYSxhcmdzOlsidGFiaW5kZXgiXX1dfSx7dHlwZTphX30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1ZQXX1dfV19KSx7Y2hhbmdlOlt7dHlwZTpPeX1dLGlucHV0Olt7dHlwZTpPeX1dLHZhbHVlQ2hhbmdlOlt7dHlwZTpPeX1dLGludmVydDpbe3R5cGU6eHl9XSxtYXg6W3t0eXBlOnh5fV0sbWluOlt7dHlwZTp4eX1dLHN0ZXA6W3t0eXBlOnh5fV0sdGh1bWJMYWJlbDpbe3R5cGU6eHl9XSx0aWNrSW50ZXJ2YWw6W3t0eXBlOnh5fV0sdmFsdWU6W3t0eXBlOnh5fV0sdmVydGljYWw6W3t0eXBlOnh5fV0sZGlzcGxheVdpdGg6W3t0eXBlOnh5fV0sdmFsdWVUZXh0Olt7dHlwZTp4eX1dLF9zbGlkZXJXcmFwcGVyOlt7dHlwZTpaYSxhcmdzOlsic2xpZGVyV3JhcHBlciJdfV19KTtjbGFzcyB6WHt9elguybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHpYKX0selguybVtb2Q9YW8oe3R5cGU6elh9KSx6WC7JtWluaj12bih7aW1wb3J0czpbW1dNLFhJXSxYSV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHpYLFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbV00sWEldLGV4cG9ydHM6W1JYLFhJXSxkZWNsYXJhdGlvbnM6W1JYXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKHpYLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bUlhdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1dNLFhJXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltSWCxYSV19fSk7Y29uc3QgSVg9ezE5OiJmbG9hdDE2IiwxOiJmbG9hdDMyIiwyOiJmbG9hdDY0IiwzOiJpbnQzMiIsNDoidWludDgiLDE3OiJ1aW50MTYiLDIyOiJ1aW50MzIiLDIzOiJ1aW50NjQiLDU6ImludDE2Iiw2OiJpbnQ4Iiw3OiJzdHJpbmciLDg6ImNvbXBsZXg2NCIsMTg6ImNvbXBsZXgxMjgiLDk6ImludDY0IiwxMDoiYm9vbCIsMTE6InFpbnQ4IiwxMjoicXVpbnQ4IiwxNToicWludDE2IiwxNjoicXVpbnQxNiIsMTM6InFpbnQzMiIsMTQ6ImJmbG9hdDE2IiwyMDoicmVzb3VyY2UiLDIxOiJ2YXJpYW50IiwxMTk6ImZsb2F0MTZfcmVmIiwxMDE6ImZsb2F0MzJfcmVmIiwxMDI6ImZsb2F0NjRfcmVmIiwxMDM6ImludDMyX3JlZiIsMTIyOiJ1aW50MzJfcmVmIiwxMDQ6InVpbnQ4X3JlZiIsMTE3OiJ1aW50MTZfcmVmIiwxMDU6ImludDE2X3JlZiIsMTA2OiJpbnQ4X3JlZiIsMTA3OiJzdHJpbmdfcmVmIiwxMDg6ImNvbXBsZXg2NF9yZWYiLDExODoiY29tcGxleDEyOF9yZWYiLDEwOToiaW50NjRfcmVmIiwxMjM6InVpbnQ2NF9yZWYiLDExMDoiYm9vbF9yZWYiLDExMToicWludDhfcmVmIiwxMTI6InF1aW50OF9yZWYiLDExNToicWludDE2X3JlZiIsMTE2OiJxdWludDE2X3JlZiIsMTEzOiJxaW50MzJfcmVmIiwxMTQ6ImJmbG9hdDE2X3JlZiIsMTIwOiJyZXNvdXJjZV9yZWYiLDEyMToidmFyaWFudF9yZWYifTtmdW5jdGlvbiBIWCh0KXtjb25zdHt0ZW5zb3JEZWJ1Z01vZGU6ZSxhcnJheTpufT10O3N3aXRjaChlKXtjYXNlIG1aLk5PX1RFTlNPUjppZihudWxsIT09bil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWRseSByZWNlaXZlZCBub24tbnVsbCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdW5kZXIgTk9fVEVOU09SIG1vZGUiKTtyZXR1cm57fTtjYXNlIG1aLkNVUlRfSEVBTFRIOmlmKG51bGw9PT1ufHwyIT09bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBDVVJUX0hFQUxUSCBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMiwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KG4pfWApO3JldHVybntoYXNJbmZPck5hTjpCb29sZWFuKG5bMV0pfTtjYXNlIG1aLkNPTkNJU0VfSEVBTFRIOntpZihudWxsPT09bnx8NSE9PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgQ09OQ0lTRV9IRUFMVEggbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDUsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShuKX1gKTtjb25zdCB0PXtzaXplOm5bMV19O3JldHVybiBuWzJdPjAmJih0Lm51bU5lZ2F0aXZlSW5mcz1uWzJdKSxuWzNdPjAmJih0Lm51bVBvc2l0aXZlSW5mcz1uWzNdKSxuWzRdPjAmJih0Lm51bU5hTnM9bls0XSksdH1jYXNlIG1aLlNIQVBFOntpZihudWxsPT09bnx8MTAhPT1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFVuZGVyIFNIQVBFIG1vZGUsIGV4cGVjdGVkIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB0byBoYXZlIGxlbmd0aCAxMCwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KG4pfWApO2NvbnN0IHQ9blsyXTtsZXQgZT1uLnNsaWNlKDQsTWF0aC5taW4oNCt0LG4ubGVuZ3RoKSk7cmV0dXJuIGUubGVuZ3RoPHQmJihlPW5ldyBBcnJheSh0LWUubGVuZ3RoKS5jb25jYXQoZSkpLHtkdHlwZTpJWFtuWzFdXSxyYW5rOnQsc2l6ZTpuWzNdLHNoYXBlOmV9fWNhc2UgbVouRlVMTF9IRUFMVEg6e2lmKG51bGw9PT1ufHwxMSE9PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgRlVMTF9IRUFMVEggbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDExLCBidXQgZ290ICR7SlNPTi5zdHJpbmdpZnkobil9YCk7Y29uc3QgdD17ZHR5cGU6SVhbblsyXV0scmFuazpuWzNdLHNpemU6bls0XX07cmV0dXJuIG5bNV0+MCYmKHQubnVtTmVnYXRpdmVJbmZzPW5bNV0pLG5bNl0+MCYmKHQubnVtUG9zaXRpdmVJbmZzPW5bNl0pLG5bN10+MCYmKHQubnVtTmFOcz1uWzddKSxuWzhdPjAmJih0Lm51bU5lZ2F0aXZlRmluaXRlcz1uWzhdKSxuWzldPjAmJih0Lm51bVplcm9zPW5bOV0pLG5bMTBdPjAmJih0Lm51bVBvc2l0aXZlRmluaXRlcz1uWzEwXSksdH1jYXNlIG1aLkZVTExfVEVOU09SOmlmKG51bGwhPT1uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZGx5IHJlY2VpdmVkIG5vbi1udWxsIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB1bmRlciBGVUxMX1RFTlNPUiBtb2RlIik7cmV0dXJue307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCB0ZW5zb3JEZWJ1Z01vZGU6ICR7ZX1gKX19Y29uc3QgRlg9Iltfbmdob3N0LSVDT01QJV0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2U1ZTg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICBoZWlnaHQ6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDE0cHg7XG4gICAgbWFyZ2luOiAwIDJweDtcbiAgICBwYWRkaW5nOiAxcHggM3B4O1xuICAgIHdpZHRoOiBtYXgtY29udGVudDtcbiAgfSI7ZnVuY3Rpb24gTFgodCxlKXsxJnQmJlRtKDAsImRpdiIsNCl9ZnVuY3Rpb24gQlgodCxlKXtpZigxJnQmJihSbSgwLCJkaXYiLDcpLFJtKDEsInNwYW4iLDgpLGt1KDIsIk5hTiIpLEFtKCksUm0oMywic3BhbiIsOSksa3UoNCksQW0oKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oMik7cmMoNCksRHUoIsOXIix0Lm51bU5hTnMsIiIpfX1mdW5jdGlvbiBWWCh0LGUpe2lmKDEmdCYmKFJtKDAsImRpdiIsNyksUm0oMSwic3BhbiIsOCksa3UoMiwiLeKIniIpLEFtKCksUm0oMywic3BhbiIsOSksa3UoNCksQW0oKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oMik7cmMoNCksRHUoIsOXIix0Lm51bU5lZ2F0aXZlSW5mcywiIil9fWZ1bmN0aW9uIGpYKHQsZSl7aWYoMSZ0JiYoUm0oMCwiZGl2Iiw3KSxSbSgxLCJzcGFuIiw4KSxrdSgyLCIr4oieIiksQW0oKSxSbSgzLCJzcGFuIiw5KSxrdSg0KSxBbSgpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgyKTtyYyg0KSxEdSgiw5ciLHQubnVtUG9zaXRpdmVJbmZzLCIiKX19ZnVuY3Rpb24gVVgodCxlKXtpZigxJnQmJihSbSgwLCJkaXYiLDcpLFJtKDEsInNwYW4iLDEwKSxrdSgyLCItIiksQW0oKSxSbSgzLCJzcGFuIiw5KSxrdSg0KSxBbSgpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgyKTtyYyg0KSxEdSgiw5ciLHQubnVtTmVnYXRpdmVGaW5pdGVzLCIiKX19ZnVuY3Rpb24gR1godCxlKXtpZigxJnQmJihSbSgwLCJkaXYiLDcpLFJtKDEsInNwYW4iLDEwKSxrdSgyLCIwIiksQW0oKSxSbSgzLCJzcGFuIiw5KSxrdSg0KSxBbSgpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgyKTtyYyg0KSxEdSgiw5ciLHQubnVtWmVyb3MsIiIpfX1mdW5jdGlvbiBXWCh0LGUpe2lmKDEmdCYmKFJtKDAsImRpdiIsNyksUm0oMSwic3BhbiIsMTApLGt1KDIsIisiKSxBbSgpLFJtKDMsInNwYW4iLDkpLGt1KDQpLEFtKCksQW0oKSksMiZ0KXtjb25zdCB0PVltKDIpO3JjKDQpLER1KCLDlyIsdC5udW1Qb3NpdGl2ZUZpbml0ZXMsIiIpfX1mdW5jdGlvbiBZWCh0LGUpe2lmKDEmdCYmKFJtKDAsImRpdiIsNSksUXAoMSxCWCw1LDEsImRpdiIsNiksUXAoMixWWCw1LDEsImRpdiIsNiksUXAoMyxqWCw1LDEsImRpdiIsNiksUXAoNCxVWCw1LDEsImRpdiIsNiksUXAoNSxHWCw1LDEsImRpdiIsNiksUXAoNixXWCw1LDEsImRpdiIsNiksQW0oKSksMiZ0KXtjb25zdCB0PVltKCk7cmMoMSksRG0oIm5nSWYiLHZvaWQgMCE9PXQubnVtTmFOcyYmdC5udW1OYU5zPjApLHJjKDEpLERtKCJuZ0lmIix2b2lkIDAhPT10Lm51bU5lZ2F0aXZlSW5mcyYmdC5udW1OZWdhdGl2ZUluZnM+MCkscmMoMSksRG0oIm5nSWYiLHZvaWQgMCE9PXQubnVtUG9zaXRpdmVJbmZzJiZ0Lm51bVBvc2l0aXZlSW5mcz4wKSxyYygxKSxEbSgibmdJZiIsdm9pZCAwIT09dC5udW1OZWdhdGl2ZUZpbml0ZXMmJnQubnVtTmVnYXRpdmVGaW5pdGVzPjApLHJjKDEpLERtKCJuZ0lmIix2b2lkIDAhPT10Lm51bVplcm9zJiZ0Lm51bVplcm9zPjApLHJjKDEpLERtKCJuZ0lmIix2b2lkIDAhPT10Lm51bVBvc2l0aXZlRmluaXRlcyYmdC5udW1Qb3NpdGl2ZUZpbml0ZXM+MCl9fWNvbnN0IHFYPWZ1bmN0aW9uKHQpe3JldHVyblsiY29udGFpbmVyIix0XX07ZnVuY3Rpb24gWlgodCxlKXsxJnQmJlRtKDAsImRlYnVnLXRlbnNvci1kdHlwZSIsNSksMiZ0JiZEbSgiZHR5cGUiLFltKCkuZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSl9ZnVuY3Rpb24gWFgodCxlKXsxJnQmJlRtKDAsImRlYnVnLXRlbnNvci1yYW5rIiw2KSwyJnQmJkRtKCJyYW5rIixZbSgpLmRlYnVnVGVuc29yVmFsdWUucmFuayl9ZnVuY3Rpb24gS1godCxlKXsxJnQmJlRtKDAsImRlYnVnLXRlbnNvci1zaGFwZSIsNyksMiZ0JiZEbSgic2hhcGUiLFltKCkuZGVidWdUZW5zb3JWYWx1ZS5zaGFwZSl9ZnVuY3Rpb24gSlgodCxlKXsxJnQmJlRtKDAsImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiIsOCksMiZ0JiZEbSgiaGFzSW5mT3JOYU4iLFltKCkuZGVidWdUZW5zb3JWYWx1ZS5oYXNJbmZPck5hTil9ZnVuY3Rpb24gUVgodCxlKXtpZigxJnQmJlRtKDAsImRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biIsOSksMiZ0KXtjb25zdCB0PVltKCk7S20oInNpemUiLHQuZGVidWdUZW5zb3JWYWx1ZS5zaXplKSxEbSgibnVtTmVnYXRpdmVJbmZzIix0LmRlYnVnVGVuc29yVmFsdWUubnVtTmVnYXRpdmVJbmZzKSgibnVtUG9zaXRpdmVJbmZzIix0LmRlYnVnVGVuc29yVmFsdWUubnVtUG9zaXRpdmVJbmZzKSgibnVtTmFOcyIsdC5kZWJ1Z1RlbnNvclZhbHVlLm51bU5hTnMpKCJudW1OZWdhdGl2ZUZpbml0ZXMiLHQuZGVidWdUZW5zb3JWYWx1ZS5udW1OZWdhdGl2ZUZpbml0ZXMpKCJudW1aZXJvcyIsdC5kZWJ1Z1RlbnNvclZhbHVlLm51bVplcm9zKSgibnVtUG9zaXRpdmVGaW5pdGVzIix0LmRlYnVnVGVuc29yVmFsdWUubnVtUG9zaXRpdmVGaW5pdGVzKX19Y29uc3QgJFg9IlxuICA6aG9zdCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlO1xuICAgIGhlaWdodDogMTRweDtcbiAgICBsaW5lLWhlaWdodDogMTRweDtcbiAgICBtYXJnaW46IDAgMnB4O1xuICAgIHBhZGRpbmc6IDFweCAzcHg7XG4gICAgd2lkdGg6IG1heC1jb250ZW50O1xuICB9XG4iO2NsYXNzIHRLe310Sy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dEspfSx0Sy7JtWNtcD10byh7dHlwZTp0SyxzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLWR0eXBlIl1dLGlucHV0czp7ZHR5cGU6ImR0eXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYma3UoMCksMiZlJiZEdSgiICIsbi5kdHlwZSwiICIpfSxzdHlsZXM6W0ZYXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgodEssW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoiZGVidWctdGVuc29yLWR0eXBlIix0ZW1wbGF0ZToiIHt7IGR0eXBlIH19ICIsc3R5bGVzOlskWF19XX1dLG51bGwse2R0eXBlOlt7dHlwZTp4eX1dfSk7Y2xhc3MgZUt7fWVLLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxlSyl9LGVLLsm1Y21wPXRvKHt0eXBlOmVLLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItcmFuayJdXSxpbnB1dHM6e3Jhbms6InJhbmsifSxkZWNsczoxLHZhcnM6MSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZrdSgwKSwyJmUmJkR1KCIgIixuLnJhbmssIkQgIil9LHN0eWxlczpbRlhdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChlSyxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJkZWJ1Zy10ZW5zb3ItcmFuayIsdGVtcGxhdGU6IiB7eyByYW5rIH19RCAiLHN0eWxlczpbJFhdfV19XSxudWxsLHtyYW5rOlt7dHlwZTp4eX1dfSk7Y2xhc3Mgbkt7Z2V0IHNoYXBlU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2hhcGUubWFwKCh0PT52b2lkIDA9PT10PyI/IjpTdHJpbmcodCkpKS5qb2luKCIsIikrIl0ifX1uSy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bkspfSxuSy7JtWNtcD10byh7dHlwZTpuSyxzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLXNoYXBlIl1dLGlucHV0czp7c2hhcGU6InNoYXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYma3UoMCksMiZlJiZEdSgiIHNoYXBlOiIsbi5zaGFwZVN0cmluZywiICIpfSxzdHlsZXM6W0ZYXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgobkssW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoiZGVidWctdGVuc29yLXNoYXBlIix0ZW1wbGF0ZToiIHNoYXBlOnt7IHNoYXBlU3RyaW5nIH19ICIsc3R5bGVzOlskWF19XX1dLG51bGwse3NoYXBlOlt7dHlwZTp4eX1dfSk7Y2xhc3Mgb0t7Z2V0IGJyZWFrZG93bkV4aXN0cygpe3JldHVybiB2b2lkIDAhPT10aGlzLm51bU5hTnN8fHZvaWQgMCE9PXRoaXMubnVtTmVnYXRpdmVJbmZzfHx2b2lkIDAhPT10aGlzLm51bVBvc2l0aXZlSW5mc3x8dm9pZCAwIT09dGhpcy5udW1OZWdhdGl2ZUZpbml0ZXN8fHZvaWQgMCE9PXRoaXMubnVtWmVyb3N8fHZvaWQgMCE9PXRoaXMubnVtUG9zaXRpdmVGaW5pdGVzfX1vSy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8b0spfSxvSy7JtWNtcD10byh7dHlwZTpvSyxzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIl1dLGlucHV0czp7c2l6ZToic2l6ZSIsbnVtTmFOczoibnVtTmFOcyIsbnVtTmVnYXRpdmVJbmZzOiJudW1OZWdhdGl2ZUluZnMiLG51bVBvc2l0aXZlSW5mczoibnVtUG9zaXRpdmVJbmZzIixudW1OZWdhdGl2ZUZpbml0ZXM6Im51bU5lZ2F0aXZlRmluaXRlcyIsbnVtWmVyb3M6Im51bVplcm9zIixudW1Qb3NpdGl2ZUZpbml0ZXM6Im51bVBvc2l0aXZlRmluaXRlcyJ9LGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsInNpemUiXSxbMSwic2l6ZS12YWx1ZSJdLFsiY2xhc3MiLCJicmVhayIsNCwibmdJZiJdLFsiY2xhc3MiLCJicmVha2Rvd24iLDQsIm5nSWYiXSxbMSwiYnJlYWsiXSxbMSwiYnJlYWtkb3duIl0sWyJjbGFzcyIsImNhdGVnb3J5Iiw0LCJuZ0lmIl0sWzEsImNhdGVnb3J5Il0sWzEsImNhdGVnb3J5LXRhZyIsImluZmluaXRlIl0sWzEsImNhdGVnb3J5LWNvdW50Il0sWzEsImNhdGVnb3J5LXRhZyIsImZpbml0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiZGl2IiwwKSxSbSgxLCJzcGFuIiksa3UoMiwic2l6ZToiKSxBbSgpLFJtKDMsInNwYW4iLDEpLGt1KDQpLEFtKCksQW0oKSxRcCg1LExYLDEsMCwiZGl2IiwyKSxRcCg2LFlYLDcsNiwiZGl2IiwzKSksMiZlJiYocmMoNCksU3Uobi5zaXplKSxyYygxKSxEbSgibmdJZiIsbi5icmVha2Rvd25FeGlzdHMpLHJjKDEpLERtKCJuZ0lmIixuLmJyZWFrZG93bkV4aXN0cykpfSxkaXJlY3RpdmVzOltkTV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2U1ZTg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICAgICAgZm9udC1zaXplOiAxMHB4O1xuICAgICAgICBtYXJnaW46IDAgMnB4O1xuICAgICAgICBwYWRkaW5nOiAxcHg7XG4gICAgICB9XG4gICAgICAuYnJlYWtbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZmxleC1iYXNpczogMTAwJTtcbiAgICAgICAgd2lkdGg6IDA7XG4gICAgICB9XG4gICAgICAuc2l6ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMXB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTFweDtcbiAgICAgICAgbWFyZ2luOiAwIDNweDtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIH1cbiAgICAgIC5icmVha2Rvd25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xMik7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGhlaWdodDogMTFweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDExcHg7XG4gICAgICAgIHBhZGRpbmc6IDJweDtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIH1cbiAgICAgIC5jYXRlZ29yeVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICAgICAgaGVpZ3RoOiAxMDAlO1xuICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgICB9XG4gICAgICAuY2F0ZWdvcnktdGFnW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgcGFkZGluZzogMCAycHg7XG4gICAgICB9XG4gICAgICAuZmluaXRlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNhYWE7XG4gICAgICAgIGNvbG9yOiAjZmVmZWZlO1xuICAgICAgfVxuICAgICAgLmluZmluaXRlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgfSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChvSyxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJkZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd24iLHRlbXBsYXRlOidcbiAgICA8ZGl2IGNsYXNzPSJzaXplIj5cbiAgICAgIDxzcGFuPnNpemU6PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9InNpemUtdmFsdWUiPnt7IHNpemUgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iYnJlYWtkb3duRXhpc3RzIiBjbGFzcz0iYnJlYWsiPjwvZGl2PlxuICAgIDxkaXYgKm5nSWY9ImJyZWFrZG93bkV4aXN0cyIgY2xhc3M9ImJyZWFrZG93biI+XG4gICAgICA8ZGl2ICpuZ0lmPSJudW1OYU5zICE9PSB1bmRlZmluZWQgJiYgbnVtTmFOcyA+IDAiIGNsYXNzPSJjYXRlZ29yeSI+XG4gICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS10YWcgaW5maW5pdGUiPk5hTjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImNhdGVnb3J5LWNvdW50Ij7Dl3t7IG51bU5hTnMgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9Im51bU5lZ2F0aXZlSW5mcyAhPT0gdW5kZWZpbmVkICYmIG51bU5lZ2F0aXZlSW5mcyA+IDAiXG4gICAgICAgIGNsYXNzPSJjYXRlZ29yeSJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImNhdGVnb3J5LXRhZyBpbmZpbml0ZSI+LeKInjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImNhdGVnb3J5LWNvdW50Ij7Dl3t7IG51bU5lZ2F0aXZlSW5mcyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj0ibnVtUG9zaXRpdmVJbmZzICE9PSB1bmRlZmluZWQgJiYgbnVtUG9zaXRpdmVJbmZzID4gMCJcbiAgICAgICAgY2xhc3M9ImNhdGVnb3J5IlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktdGFnIGluZmluaXRlIj4r4oiePC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktY291bnQiPsOXe3sgbnVtUG9zaXRpdmVJbmZzIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPSJudW1OZWdhdGl2ZUZpbml0ZXMgIT09IHVuZGVmaW5lZCAmJiBudW1OZWdhdGl2ZUZpbml0ZXMgPiAwIlxuICAgICAgICBjbGFzcz0iY2F0ZWdvcnkiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS10YWcgZmluaXRlIj4tPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktY291bnQiPsOXe3sgbnVtTmVnYXRpdmVGaW5pdGVzIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJudW1aZXJvcyAhPT0gdW5kZWZpbmVkICYmIG51bVplcm9zID4gMCIgY2xhc3M9ImNhdGVnb3J5Ij5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImNhdGVnb3J5LXRhZyBmaW5pdGUiPjA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1jb3VudCI+w5d7eyBudW1aZXJvcyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj0ibnVtUG9zaXRpdmVGaW5pdGVzICE9PSB1bmRlZmluZWQgJiYgbnVtUG9zaXRpdmVGaW5pdGVzID4gMCJcbiAgICAgICAgY2xhc3M9ImNhdGVnb3J5IlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktdGFnIGZpbml0ZSI+Kzwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImNhdGVnb3J5LWNvdW50Ij7Dl3t7IG51bVBvc2l0aXZlRmluaXRlcyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAnLHN0eWxlczpbIlxuICAgICAgOmhvc3Qge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4O1xuICAgICAgfVxuICAgICAgLmJyZWFrIHtcbiAgICAgICAgZmxleC1iYXNpczogMTAwJTtcbiAgICAgICAgd2lkdGg6IDA7XG4gICAgICB9XG4gICAgICAuc2l6ZSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4O1xuICAgICAgICBtYXJnaW46IDAgM3B4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgfVxuICAgICAgLmJyZWFrZG93biB7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4O1xuICAgICAgICBwYWRkaW5nOiAycHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICB9XG4gICAgICAuY2F0ZWdvcnkge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICAgICAgaGVpZ3RoOiAxMDAlO1xuICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgICB9XG4gICAgICAuY2F0ZWdvcnktdGFnIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgICAgICBwYWRkaW5nOiAwIDJweDtcbiAgICAgIH1cbiAgICAgIC5maW5pdGUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWFhO1xuICAgICAgICBjb2xvcjogI2ZlZmVmZTtcbiAgICAgIH1cbiAgICAgIC5pbmZpbml0ZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgfVxuICAgICJdfV19XSxudWxsLHtzaXplOlt7dHlwZTp4eX1dLG51bU5hTnM6W3t0eXBlOnh5fV0sbnVtTmVnYXRpdmVJbmZzOlt7dHlwZTp4eX1dLG51bVBvc2l0aXZlSW5mczpbe3R5cGU6eHl9XSxudW1OZWdhdGl2ZUZpbml0ZXM6W3t0eXBlOnh5fV0sbnVtWmVyb3M6W3t0eXBlOnh5fV0sbnVtUG9zaXRpdmVGaW5pdGVzOlt7dHlwZTp4eX1dfSk7Y2xhc3MgaUt7Z2V0IGluZm9TdHJpbmcoKXtyZXR1cm4gdGhpcy5oYXNJbmZPck5hTj8iSGFzIOKIni9OYU4iOiJObyDiiJ4vTmFOIn19aUsuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGlLKX0saUsuybVjbXA9dG8oe3R5cGU6aUssc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiJdXSxpbnB1dHM6e2hhc0luZk9yTmFOOiJoYXNJbmZPck5hTiJ9LGRlY2xzOjIsdmFyczo0LGNvbnN0czpbWzMsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsImRpdiIsMCksa3UoMSksQW0oKSksMiZlJiYoRG0oIm5nQ2xhc3MiLE1oKDIscVgsbi5oYXNJbmZPck5hTj8iaGFzLWluZi1vci1uYW4iOiIiKSkscmMoMSksRHUoIiAiLG4uaW5mb1N0cmluZywiICIpKX0sZGlyZWN0aXZlczpbYU1dLHN0eWxlczpbIi5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjb2xvcjogIzY2NjY2NjtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTRweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4IDNweDtcbiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLmhhcy1pbmYtb3ItbmFuW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgfSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChpSyxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJkZWJ1Zy10ZW5zb3ItaGFzLWluZi1vci1uYW4iLHRlbXBsYXRlOiJcbiAgICA8ZGl2IFtuZ0NsYXNzXT1cIlsnY29udGFpbmVyJywgaGFzSW5mT3JOYU4gPyAnaGFzLWluZi1vci1uYW4nIDogJyddXCI+XG4gICAgICB7eyBpbmZvU3RyaW5nIH19XG4gICAgPC9kaXY+XG4gICIsc3R5bGVzOlsiXG4gICAgICAuY29udGFpbmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjb2xvcjogIzY2NjY2NjtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTRweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4IDNweDtcbiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLmhhcy1pbmYtb3ItbmFuIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICB9XG4gICAgIl19XX1dLG51bGwse2hhc0luZk9yTmFOOlt7dHlwZTp4eX1dfSk7Y2xhc3MgYUt7fWFLLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxhSyl9LGFLLsm1Y21wPXRvKHt0eXBlOmFLLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItdmFsdWUiXV0saW5wdXRzOntkZWJ1Z1RlbnNvclZhbHVlOiJkZWJ1Z1RlbnNvclZhbHVlIn0sZGVjbHM6NSx2YXJzOjUsY29uc3RzOltbMywiZHR5cGUiLDQsIm5nSWYiXSxbMywicmFuayIsNCwibmdJZiJdLFszLCJzaGFwZSIsNCwibmdJZiJdLFszLCJoYXNJbmZPck5hTiIsNCwibmdJZiJdLFszLCJzaXplIiwibnVtTmVnYXRpdmVJbmZzIiwibnVtUG9zaXRpdmVJbmZzIiwibnVtTmFOcyIsIm51bU5lZ2F0aXZlRmluaXRlcyIsIm51bVplcm9zIiwibnVtUG9zaXRpdmVGaW5pdGVzIiw0LCJuZ0lmIl0sWzMsImR0eXBlIl0sWzMsInJhbmsiXSxbMywic2hhcGUiXSxbMywiaGFzSW5mT3JOYU4iXSxbMywic2l6ZSIsIm51bU5lZ2F0aXZlSW5mcyIsIm51bVBvc2l0aXZlSW5mcyIsIm51bU5hTnMiLCJudW1OZWdhdGl2ZUZpbml0ZXMiLCJudW1aZXJvcyIsIm51bVBvc2l0aXZlRmluaXRlcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUXAoMCxaWCwxLDEsImRlYnVnLXRlbnNvci1kdHlwZSIsMCksUXAoMSxYWCwxLDEsImRlYnVnLXRlbnNvci1yYW5rIiwxKSxRcCgyLEtYLDEsMSwiZGVidWctdGVuc29yLXNoYXBlIiwyKSxRcCgzLEpYLDEsMSwiZGVidWctdGVuc29yLWhhcy1pbmYtb3ItbmFuIiwzKSxRcCg0LFFYLDEsNywiZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIiw0KSksMiZlJiYoRG0oIm5nSWYiLHZvaWQgMCE9PW4uZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSkscmMoMSksRG0oIm5nSWYiLHZvaWQgMCE9PW4uZGVidWdUZW5zb3JWYWx1ZS5yYW5rKSxyYygxKSxEbSgibmdJZiIsdm9pZCAwIT09bi5kZWJ1Z1RlbnNvclZhbHVlLnNoYXBlKSxyYygxKSxEbSgibmdJZiIsdm9pZCAwIT09bi5kZWJ1Z1RlbnNvclZhbHVlLmhhc0luZk9yTmFOKSxyYygxKSxEbSgibmdJZiIsdm9pZCAwIT09bi5kZWJ1Z1RlbnNvclZhbHVlLnNpemUpKX0sZGlyZWN0aXZlczpbZE0sdEssZUssbkssaUssb0tdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICB9XG4gICAgICBkZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgfSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChhSyxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJkZWJ1Zy10ZW5zb3ItdmFsdWUiLHRlbXBsYXRlOidcbiAgICA8ZGVidWctdGVuc29yLWR0eXBlXG4gICAgICAqbmdJZj0iZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSAhPT0gdW5kZWZpbmVkIlxuICAgICAgW2R0eXBlXT0iZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSJcbiAgICA+XG4gICAgPC9kZWJ1Zy10ZW5zb3ItZHR5cGU+XG4gICAgPGRlYnVnLXRlbnNvci1yYW5rXG4gICAgICAqbmdJZj0iZGVidWdUZW5zb3JWYWx1ZS5yYW5rICE9PSB1bmRlZmluZWQiXG4gICAgICBbcmFua109ImRlYnVnVGVuc29yVmFsdWUucmFuayJcbiAgICA+XG4gICAgPC9kZWJ1Zy10ZW5zb3ItcmFuaz5cbiAgICA8ZGVidWctdGVuc29yLXNoYXBlXG4gICAgICAqbmdJZj0iZGVidWdUZW5zb3JWYWx1ZS5zaGFwZSAhPT0gdW5kZWZpbmVkIlxuICAgICAgW3NoYXBlXT0iZGVidWdUZW5zb3JWYWx1ZS5zaGFwZSJcbiAgICA+XG4gICAgPC9kZWJ1Zy10ZW5zb3Itc2hhcGU+XG4gICAgPGRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hblxuICAgICAgKm5nSWY9ImRlYnVnVGVuc29yVmFsdWUuaGFzSW5mT3JOYU4gIT09IHVuZGVmaW5lZCJcbiAgICAgIFtoYXNJbmZPck5hTl09ImRlYnVnVGVuc29yVmFsdWUuaGFzSW5mT3JOYU4iXG4gICAgPlxuICAgIDwvZGVidWctdGVuc29yLWhhcy1pbmYtb3ItbmFuPlxuICAgIDxkZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd25cbiAgICAgICpuZ0lmPSJkZWJ1Z1RlbnNvclZhbHVlLnNpemUgIT09IHVuZGVmaW5lZCJcbiAgICAgIHNpemU9Int7IGRlYnVnVGVuc29yVmFsdWUuc2l6ZSB9fSJcbiAgICAgIFtudW1OZWdhdGl2ZUluZnNdPSJkZWJ1Z1RlbnNvclZhbHVlLm51bU5lZ2F0aXZlSW5mcyJcbiAgICAgIFtudW1Qb3NpdGl2ZUluZnNdPSJkZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlSW5mcyJcbiAgICAgIFtudW1OYU5zXT0iZGVidWdUZW5zb3JWYWx1ZS5udW1OYU5zIlxuICAgICAgW251bU5lZ2F0aXZlRmluaXRlc109ImRlYnVnVGVuc29yVmFsdWUubnVtTmVnYXRpdmVGaW5pdGVzIlxuICAgICAgW251bVplcm9zXT0iZGVidWdUZW5zb3JWYWx1ZS5udW1aZXJvcyJcbiAgICAgIFtudW1Qb3NpdGl2ZUZpbml0ZXNdPSJkZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlRmluaXRlcyJcbiAgICA+XG4gICAgPC9kZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd24+XG4gICcsc3R5bGVzOlsiXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgIH1cbiAgICAgIGRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIH1cbiAgICAiXX1dfV0sbnVsbCx7ZGVidWdUZW5zb3JWYWx1ZTpbe3R5cGU6eHl9XX0pO2NvbnN0IHJLPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3RlbnNvckRlYnVnTW9kZTp0LGFycmF5OmV9fTtmdW5jdGlvbiBzSyh0LGUpe2lmKDEmdCYmKFJtKDAsImRpdiIsMTIpLFJtKDEsImRpdiIsMTMpLGt1KDIpLEFtKCksUm0oMywiZGl2IiwxNCksVG0oNCwiZGVidWctdGVuc29yLXZhbHVlIiwxNSksQW0oKSxBbSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1lLmluZGV4LG89WW0oMyk7cmMoMiksRHUoIk91dHB1dCBzbG90ICIsbiwiOiIpLHJjKDIpLERtKCJkZWJ1Z1RlbnNvclZhbHVlIixvLnBhcnNlRGVidWdUZW5zb3JWYWx1ZSh2aCgyLHJLLG8udGVuc29yRGVidWdNb2RlLHQpKSl9fWZ1bmN0aW9uIGxLKHQsZSl7aWYoMSZ0JiYoUm0oMCwiZGl2IiwxMCksUXAoMSxzSyw1LDUsImRpdiIsMTEpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgyKTtyYygxKSxEbSgibmdGb3JPZiIsdC5kZWJ1Z1RlbnNvclZhbHVlcyl9fWZ1bmN0aW9uIGNLKHQsZSl7aWYoMSZ0JiYoUm0oMCwiZGl2IiksUm0oMSwiZGl2IiksUm0oMiwiZGl2IiwzKSxSbSgzLCJzcGFuIiw0KSxrdSg0LCIgT3A6ICIpLEFtKCksUm0oNSwic3BhbiIsNSksa3UoNiksQW0oKSxBbSgpLFJtKDcsImRpdiIsMyksUm0oOCwic3BhbiIsNCksa3UoOSwiICMgb2YgaW5wdXQgdGVuc29yczogIiksQW0oKSxSbSgxMCwic3BhbiIsNiksa3UoMTEpLEFtKCksQW0oKSxSbSgxMiwiZGl2IiwzKSxSbSgxMywic3BhbiIsNCksa3UoMTQsIiAjIG9mIG91dHB1dCB0ZW5zb3JzOiAiKSxBbSgpLFJtKDE1LCJzcGFuIiw3KSxrdSgxNiksQW0oKSxSbSgxNywic3BhbiIsOCksa3UoMTgpLEFtKCksQW0oKSxRcCgxOSxsSywyLDEsImRpdiIsOSksQW0oKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oKTtyYyg2KSxEdSgiICIsdC5mb2N1c2VkRXhlY3V0aW9uRGF0YS5vcF90eXBlLCIgIikscmMoNSksRHUoIiAiLG51bGw9PXQuZm9jdXNlZEV4ZWN1dGlvbkRhdGEuaW5wdXRfdGVuc29yX2lkcz8wOnQuZm9jdXNlZEV4ZWN1dGlvbkRhdGEuaW5wdXRfdGVuc29yX2lkcy5sZW5ndGgsIiAiKSxyYyg1KSxEdSgiICIsbnVsbD09dC5mb2N1c2VkRXhlY3V0aW9uRGF0YS5vdXRwdXRfdGVuc29yX2lkcz8wOnQuZm9jdXNlZEV4ZWN1dGlvbkRhdGEub3V0cHV0X3RlbnNvcl9pZHMubGVuZ3RoLCIgIikscmMoMiksRHUoIiAoZGVidWcgbW9kZTogIix0LlRlbnNvckRlYnVnTW9kZVt0LnRlbnNvckRlYnVnTW9kZV0sIikgIikscmMoMSksRG0oIm5nSWYiLHQuaGFzRGVidWdUZW5zb3JWYWx1ZXMpfX1mdW5jdGlvbiBkSyh0LGUpe31jbGFzcyBwS3tjb25zdHJ1Y3Rvcigpe3RoaXMudGVuc29yRGVidWdNb2RlPW1aLlVOU1BFQ0lGSUVELHRoaXMuaGFzRGVidWdUZW5zb3JWYWx1ZXM9ITEsdGhpcy5kZWJ1Z1RlbnNvclZhbHVlcz1udWxsLHRoaXMuZGVidWdUZW5zb3JEdHlwZXM9bnVsbCx0aGlzLlRlbnNvckRlYnVnTW9kZT1tWix0aGlzLnBhcnNlRGVidWdUZW5zb3JWYWx1ZT1IWH19cEsuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHBLKX0scEsuybVjbXA9dG8oe3R5cGU6cEssc2VsZWN0b3JzOltbImV4ZWN1dGlvbi1kYXRhLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Iixmb2N1c2VkRXhlY3V0aW9uRGF0YToiZm9jdXNlZEV4ZWN1dGlvbkRhdGEiLHRlbnNvckRlYnVnTW9kZToidGVuc29yRGVidWdNb2RlIixoYXNEZWJ1Z1RlbnNvclZhbHVlczoiaGFzRGVidWdUZW5zb3JWYWx1ZXMiLGRlYnVnVGVuc29yVmFsdWVzOiJkZWJ1Z1RlbnNvclZhbHVlcyIsZGVidWdUZW5zb3JEdHlwZXM6ImRlYnVnVGVuc29yRHR5cGVzIn0sZGVjbHM6Nyx2YXJzOjMsY29uc3RzOltbMSwiZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxvYWRpbmdfc2VjdGlvbiIsIiJdLFsxLCJleGVjdXRpb24tZGF0YS1maWVsZCJdLFsxLCJleGVjdXRpb24tZGF0YS1rZXkiXSxbMSwiZXhlY3V0aW9uLWRhdGEtdmFsdWUiLCJvcC10eXBlIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIiwiaW5wdXQtdGVuc29ycyJdLFsxLCJleGVjdXRpb24tZGF0YS12YWx1ZSIsIm91dHB1dC10ZW5zb3JzIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIl0sWyJjbGFzcyIsIm91dHB1dC1zbG90cyIsNCwibmdJZiJdLFsxLCJvdXRwdXQtc2xvdHMiXSxbImNsYXNzIiwib3V0cHV0LXNsb3QtY29udGFpbmVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwib3V0cHV0LXNsb3QtY29udGFpbmVyIl0sWzEsIm91dHB1dC1zbG90LW51bWJlciJdLFsxLCJvdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWUiXSxbMywiZGVidWdUZW5zb3JWYWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoUm0oMCwiZGl2IiwwKSxSbSgxLCJkaXYiKSxSbSgyLCJzcGFuIiksa3UoMyksQW0oKSxBbSgpLFFwKDQsY0ssMjAsNSwiZGl2IiwxKSxRcCg1LGRLLDAsMCwibmctdGVtcGxhdGUiLG51bGwsMixpYiksQW0oKSksMiZlKXtjb25zdCB0PSRwKDYpO3JjKDMpLER1KCIgUHl0aG9uIEV4ZWN1dGlvbiAjIixuLmZvY3VzZWRFeGVjdXRpb25JbmRleCwiICIpLHJjKDEpLERtKCJuZ0lmIixudWxsIT09bi5mb2N1c2VkRXhlY3V0aW9uRGF0YSkoIm5nSWZFbHNlIix0KX19LGRpcmVjdGl2ZXM6W2RNLGxNLGFLXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzAwMDt0ZXh0LWFsaWduOmxlZnR9LmRlYnVnLXRlbnNvci12YWx1ZXMtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZXhlY3V0aW9uLWRhdGEtZmllbGRbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0uZXhlY3V0aW9uLWRhdGEta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MTIwcHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDoxMjBweH0uZXhlY3V0aW9uLWRhdGEtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OjEwcHh9LmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmY2M4MDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTJweDtoZWlnaHQ6MTIwcHg7cGFkZGluZzo1cHg7d2lkdGg6MzYwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5vdXRwdXQtc2xvdHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo2MHB4O292ZXJmbG93LXg6YXV0bztvdmVyZmxvdy15OmF1dG99Lm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjttYXJnaW4tdG9wOjVweDtwYWRkaW5nOjJweCAwO3ZlcnRpY2FsLWFsaWduOnRvcH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3V0cHV0LXNsb3QtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0ub3V0cHV0LXNsb3QtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlfS5vdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjNweCAwIDNweCAzMHB4fS5vdXRwdXQtdGVuc29yc1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo1cHh9J119KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHBLLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6ImV4ZWN1dGlvbi1kYXRhLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vZXhlY3V0aW9uX2RhdGFfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vZXhlY3V0aW9uX2RhdGFfY29tcG9uZW50LmNzcyJdfV19XSxudWxsLHtmb2N1c2VkRXhlY3V0aW9uSW5kZXg6W3t0eXBlOnh5fV0sZm9jdXNlZEV4ZWN1dGlvbkRhdGE6W3t0eXBlOnh5fV0sdGVuc29yRGVidWdNb2RlOlt7dHlwZTp4eX1dLGhhc0RlYnVnVGVuc29yVmFsdWVzOlt7dHlwZTp4eX1dLGRlYnVnVGVuc29yVmFsdWVzOlt7dHlwZTp4eX1dLGRlYnVnVGVuc29yRHR5cGVzOlt7dHlwZTp4eX1dfSk7Y29uc3QgbUs9IlVua25vd24gZHR5cGUiO2NsYXNzIHVLe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmZvY3VzZWRFeGVjdXRpb25EYXRhJD10aGlzLnN0b3JlLnBpcGUoRncobVgpKSx0aGlzLnRlbnNvckRlYnVnTW9kZSQ9dGhpcy5zdG9yZS5waXBlKEZ3KFp3KG1YLCh0PT5udWxsPT09dD9tWi5VTlNQRUNJRklFRDp0LnRlbnNvcl9kZWJ1Z19tb2RlKSkpKSx0aGlzLmhhc0RlYnVnVGVuc29yVmFsdWVzJD10aGlzLnN0b3JlLnBpcGUoRncoWncobVgsKHQ9PntpZihudWxsPT09dHx8bnVsbD09PXQuZGVidWdfdGVuc29yX3ZhbHVlcylyZXR1cm4hMTtmb3IoY29uc3QgZSBvZiB0LmRlYnVnX3RlbnNvcl92YWx1ZXMpaWYobnVsbCE9PWUmJmUubGVuZ3RoPjApcmV0dXJuITA7cmV0dXJuITF9KSkpKSx0aGlzLmRlYnVnVGVuc29yVmFsdWVzJD10aGlzLnN0b3JlLnBpcGUoRncoWncobVgsKHQ9Pm51bGw9PT10P251bGw6dC5kZWJ1Z190ZW5zb3JfdmFsdWVzKSkpKSx0aGlzLmRlYnVnVGVuc29yRHR5cGVzJD10aGlzLnN0b3JlLnBpcGUoRncoWncobVgsKHQ9PntpZihudWxsPT09dHx8bnVsbD09PXQuZGVidWdfdGVuc29yX3ZhbHVlcylyZXR1cm4gbnVsbDtpZih0LnRlbnNvcl9kZWJ1Z19tb2RlIT09bVouRlVMTF9IRUFMVEgmJnQudGVuc29yX2RlYnVnX21vZGUhPT1tWi5TSEFQRSlyZXR1cm4gbnVsbDtjb25zdCBlPVtdO2Zvcihjb25zdCBuIG9mIHQuZGVidWdfdGVuc29yX3ZhbHVlcylpZihudWxsPT09billLnB1c2gobUspO2Vsc2V7Y29uc3Qgbz1TdHJpbmcodC50ZW5zb3JfZGVidWdfbW9kZT09PW1aLkZVTExfSEVBTFRIP25bMl06blsxXSk7ZS5wdXNoKElYW29dfHxtSyl9cmV0dXJuIGV9KSkpKX19ZnVuY3Rpb24gZksodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJtYXQtc2xpZGVyIiwxMSksVm0oImlucHV0IiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oMikub25TbGlkZXJDaGFuZ2UuZW1pdChuLnZhbHVlKX0pKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgyKTtEbSgibWluIiwwKSgibWF4Iix0LnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0KSgidmFsdWUiLHQuc2Nyb2xsQmVnaW5JbmRleCl9fWZ1bmN0aW9uIGdLKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiZGl2Iiw2KSxSbSgxLCJidXR0b24iLDcpLFZtKCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaGkodCksWW0oKS5vbk5hdmlnYXRlTGVmdC5lbWl0KCl9KSksa3UoMiwiIDwgIiksQW0oKSxSbSgzLCJkaXYiLDgpLGt1KDQpLEFtKCksUm0oNSwiYnV0dG9uIiw5KSxWbSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIGhpKHQpLFltKCkub25OYXZpZ2F0ZVJpZ2h0LmVtaXQoKX0pKSxrdSg2LCIgPiAiKSxBbSgpLFFwKDcsZkssMSwzLCJtYXQtc2xpZGVyIiwxMCksQW0oKX1pZigyJnQpe2NvbnN0IHQ9WW0oKTtyYyg0KSxSdSgiICIsdC5zY3JvbGxCZWdpbkluZGV4LCIgfiAiLHQuc2Nyb2xsQmVnaW5JbmRleCt0LmRpc3BsYXlDb3VudC0xLCIgb2YgIix0Lm51bUV4ZWN1dGlvbnMsIiAiKSxyYygzKSxEbSgibmdJZiIsdC5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdD4wKX19dUsuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHVLKShTbShJdykpfSx1Sy7JtWNtcD10byh7dHlwZTp1SyxzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItZXhlY3V0aW9uLWRhdGEiXV0saW5wdXRzOntmb2N1c2VkRXhlY3V0aW9uSW5kZXg6ImZvY3VzZWRFeGVjdXRpb25JbmRleCJ9LGRlY2xzOjYsdmFyczoxNixjb25zdHM6W1szLCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLCJmb2N1c2VkRXhlY3V0aW9uRGF0YSIsInRlbnNvckRlYnVnTW9kZSIsImhhc0RlYnVnVGVuc29yVmFsdWVzIiwiZGVidWdUZW5zb3JWYWx1ZXMiLCJkZWJ1Z1RlbnNvckR0eXBlcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVG0oMCwiZXhlY3V0aW9uLWRhdGEtY29tcG9uZW50IiwwKSxBaCgxLCJhc3luYyIpLEFoKDIsImFzeW5jIiksQWgoMywiYXN5bmMiKSxBaCg0LCJhc3luYyIpLEFoKDUsImFzeW5jIikpLDImZSYmRG0oImZvY3VzZWRFeGVjdXRpb25JbmRleCIsbi5mb2N1c2VkRXhlY3V0aW9uSW5kZXgpKCJmb2N1c2VkRXhlY3V0aW9uRGF0YSIsVGgoMSw2LG4uZm9jdXNlZEV4ZWN1dGlvbkRhdGEkKSkoInRlbnNvckRlYnVnTW9kZSIsVGgoMiw4LG4udGVuc29yRGVidWdNb2RlJCkpKCJoYXNEZWJ1Z1RlbnNvclZhbHVlcyIsVGgoMywxMCxuLmhhc0RlYnVnVGVuc29yVmFsdWVzJCkpKCJkZWJ1Z1RlbnNvclZhbHVlcyIsVGgoNCwxMixuLmRlYnVnVGVuc29yVmFsdWVzJCkpKCJkZWJ1Z1RlbnNvckR0eXBlcyIsVGgoNSwxNCxuLmRlYnVnVGVuc29yRHR5cGVzJCkpfSxkaXJlY3RpdmVzOltwS10scGlwZXM6W3dNXSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHVLLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InRmLWRlYnVnZ2VyLXYyLWV4ZWN1dGlvbi1kYXRhIix0ZW1wbGF0ZTonXG4gICAgPGV4ZWN1dGlvbi1kYXRhLWNvbXBvbmVudFxuICAgICAgW2ZvY3VzZWRFeGVjdXRpb25JbmRleF09ImZvY3VzZWRFeGVjdXRpb25JbmRleCJcbiAgICAgIFtmb2N1c2VkRXhlY3V0aW9uRGF0YV09ImZvY3VzZWRFeGVjdXRpb25EYXRhJCB8IGFzeW5jIlxuICAgICAgW3RlbnNvckRlYnVnTW9kZV09InRlbnNvckRlYnVnTW9kZSQgfCBhc3luYyJcbiAgICAgIFtoYXNEZWJ1Z1RlbnNvclZhbHVlc109Imhhc0RlYnVnVGVuc29yVmFsdWVzJCB8IGFzeW5jIlxuICAgICAgW2RlYnVnVGVuc29yVmFsdWVzXT0iZGVidWdUZW5zb3JWYWx1ZXMkIHwgYXN5bmMiXG4gICAgICBbZGVidWdUZW5zb3JEdHlwZXNdPSJkZWJ1Z1RlbnNvckR0eXBlcyQgfCBhc3luYyJcbiAgICA+PC9leGVjdXRpb24tZGF0YS1jb21wb25lbnQ+XG4gICd9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd31dfSkse2ZvY3VzZWRFeGVjdXRpb25JbmRleDpbe3R5cGU6eHl9XX0pO2NvbnN0IGhLPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bdCxlLG5dfTtmdW5jdGlvbiBiSyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsImRpdiIsMTQpLFZtKCJjbGljayIsKGZ1bmN0aW9uIGUoKXtjb25zdCBuPWhpKHQpLmluZGV4O3JldHVybiBZbSgyKS5vbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQuZW1pdChuKX0pKSxSbSgxLCJkaXYiLDE1KSxrdSgyKSxBbSgpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49ZS5pbmRleCxvPVltKDIpO3JjKDEpLEttKCJ0aXRsZSIsdC5vcF90eXBlKSxEbSgibmdDbGFzcyIseGgoMyxoSyx0LmlzX2dyYXBoPyJmdW5jLWdyYXBoLWV4ZWN1dGlvbiI6IiIsbj09PW8uZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleD8iZm9jdXNlZCI6IiIsby5kaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXNbbl18fCIiKSkscmMoMSksRHUoIiAiLHQuc2hvcnRfb3BfdHlwZSwiICIpfX1mdW5jdGlvbiB5Syh0LGUpe2lmKDEmdCYmKFJtKDAsImRpdiIsMTIpLFFwKDEsYkssMyw3LCJkaXYiLDEzKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oKTtyYygxKSxEbSgibmdGb3JPZiIsdC5kaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyl9fWZ1bmN0aW9uIF9LKHQsZSl7aWYoMSZ0JiYoTm0oMCksVG0oMSwidGYtZGVidWdnZXItdjItZXhlY3V0aW9uLWRhdGEiLDE2KSx6bSgpKSwyJnQpe2NvbnN0IHQ9WW0oKTtyYygxKSxEbSgiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Iix0LmZvY3VzZWRFeGVjdXRpb25JbmRleCl9fWNsYXNzIENLe2NvbnN0cnVjdG9yKCl7dGhpcy5hY3RpdmVSdW5JZD1udWxsLHRoaXMubG9hZGluZ051bUV4ZWN1dGlvbnM9ITEsdGhpcy5udW1FeGVjdXRpb25zPTAsdGhpcy5zY3JvbGxCZWdpbkluZGV4PTAsdGhpcy5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdD0wLHRoaXMucGFnZVNpemU9MCx0aGlzLmRpc3BsYXlDb3VudD0wLHRoaXMuZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHM9W10sdGhpcy5kaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXM9W10sdGhpcy5mb2N1c2VkRXhlY3V0aW9uSW5kZXg9bnVsbCx0aGlzLmZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXg9bnVsbCx0aGlzLmZvY3VzZWRFeGVjdXRpb25EYXRhPW51bGwsdGhpcy5vbk5hdmlnYXRlTGVmdD1uZXcgTGgsdGhpcy5vbk5hdmlnYXRlUmlnaHQ9bmV3IExoLHRoaXMub25FeGVjdXRpb25EaWdlc3RDbGlja2VkPW5ldyBMaCx0aGlzLm9uU2xpZGVyQ2hhbmdlPW5ldyBMaH19Q0suybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fENLKX0sQ0suybVjbXA9dG8oe3R5cGU6Q0ssc2VsZWN0b3JzOltbInRpbWVsaW5lLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVJ1bklkOiJhY3RpdmVSdW5JZCIsbG9hZGluZ051bUV4ZWN1dGlvbnM6ImxvYWRpbmdOdW1FeGVjdXRpb25zIixudW1FeGVjdXRpb25zOiJudW1FeGVjdXRpb25zIixzY3JvbGxCZWdpbkluZGV4OiJzY3JvbGxCZWdpbkluZGV4IixzY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdDoic2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQiLHBhZ2VTaXplOiJwYWdlU2l6ZSIsZGlzcGxheUNvdW50OiJkaXNwbGF5Q291bnQiLGRpc3BsYXlFeGVjdXRpb25EaWdlc3RzOiJkaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyIsZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzOiJkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMiLGZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Iixmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4OiJmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4Iixmb2N1c2VkRXhlY3V0aW9uRGF0YToiZm9jdXNlZEV4ZWN1dGlvbkRhdGEifSxvdXRwdXRzOntvbk5hdmlnYXRlTGVmdDoib25OYXZpZ2F0ZUxlZnQiLG9uTmF2aWdhdGVSaWdodDoib25OYXZpZ2F0ZVJpZ2h0IixvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQ6Im9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsb25TbGlkZXJDaGFuZ2U6Im9uU2xpZGVyQ2hhbmdlIn0sZGVjbHM6OSx2YXJzOjQsY29uc3RzOltbMSwidGltZWxpbmUtdGl0bGUiXSxbMSwiZXhlY3V0aW9uLWNvdW50Il0sWzEsInRvcC1sZXZlbC1leGVjdXRpb25zIl0sWyJjbGFzcyIsIm5hdmlnYXRpb24tc2VjdGlvbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJleGVjdXRpb24tdGltZWxpbmUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJuYXZpZ2F0aW9uLXNlY3Rpb24iXSxbIm1hdC1idXR0b24iLCIiLDEsIm5hdmlnYXRpb24tYnV0dG9uLWxlZnQiLDMsImNsaWNrIl0sWzEsIm5hdmlnYXRpb24tcG9zaXRpb24taW5mbyJdLFsibWF0LWJ1dHRvbiIsIiIsMSwibmF2aWdhdGlvbi1idXR0b24tcmlnaHQiLDMsImNsaWNrIl0sWyJjbGFzcyIsInRpbWVsaW5lLXNsaWRlciIsInN0ZXAiLCIxIiwzLCJtaW4iLCJtYXgiLCJ2YWx1ZSIsImlucHV0Iiw0LCJuZ0lmIl0sWyJzdGVwIiwiMSIsMSwidGltZWxpbmUtc2xpZGVyIiwzLCJtaW4iLCJtYXgiLCJ2YWx1ZSIsImlucHV0Il0sWzEsImV4ZWN1dGlvbi10aW1lbGluZSJdLFszLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNsaWNrIl0sWzEsImV4ZWN1dGlvbi1kaWdlc3QiLDMsIm5nQ2xhc3MiLCJ0aXRsZSJdLFszLCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsImRpdiIpLFJtKDEsImRpdiIsMCksa3UoMiwiIFB5dGhvbiBFeGVjdXRpb24gVGltZWxpbmUgIiksUm0oMywic3BhbiIsMSksa3UoNCksQW0oKSxBbSgpLFJtKDUsImRpdiIsMiksUXAoNixnSyw4LDQsImRpdiIsMyksUXAoNyx5SywyLDEsImRpdiIsNCksUXAoOCxfSywyLDEsIm5nLWNvbnRhaW5lciIsNSksQW0oKSxBbSgpKSwyJmUmJihyYyg0KSxEdSgiICgiLG4ubnVtRXhlY3V0aW9ucywiKSAiKSxyYygyKSxEbSgibmdJZiIsbi5udW1FeGVjdXRpb25zKSxyYygxKSxEbSgibmdJZiIsbi5udW1FeGVjdXRpb25zKSxyYygxKSxEbSgibmdJZiIsbnVsbCE9PW4uYWN0aXZlUnVuSWQmJm51bGwhPT1uLmZvY3VzZWRFeGVjdXRpb25JbmRleCkpfSxkaXJlY3RpdmVzOltkTSxYSCxSWCxsTSxhTSx1S10sc3R5bGVzOlsiLmV4ZWN1dGlvbi1kaWdlc3RbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgY29sb3I6ICM0MjUwNjY7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxMHB4O1xuICBoZWlnaHQ6IDE1cHg7XG4gIHBhZGRpbmc6IDFweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTJweDtcbn1cblxuLmV4ZWN1dGlvbi1kaWdlc3QuZnVuYy1ncmFwaC1leGVjdXRpb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M3ZGJmNTtcbiAgY29sb3I6ICM0ZTU2NjQ7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4uZXhlY3V0aW9uLWRpZ2VzdC5mb2N1c2VkW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQ0YjM7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uZXhlY3V0aW9uLWRpZ2VzdC5JbmZOYW5BbGVydFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICBjb2xvcjogI2ZmZjtcbn1cblxuXG4uZXhlY3V0aW9uLWRpZ2VzdFtfbmdjb250ZW50LSVDT01QJV06aG92ZXIge1xuICBib3JkZXI6IDFweCBzb2xpZCAjMDAwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmV4ZWN1dGlvbi10aW1lbGluZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbn1cblxuLnRpbWVsaW5lLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGhlaWdodDogNDhweDtcbiAgbGVmdDogMzQwcHg7IFxuICBwYWRkaW5nOiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiA0MHB4O1xufVxuXG4gIC50aW1lbGluZS1zbGlkZXIgLm1hdC1zbGlkZXItdGh1bWIge1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIHJpZ2h0OiAtNDBweDtcbiAgd2lkdGg6IDgwcHg7XG59XG5cblxuLm5hdmlnYXRpb24tcG9zaXRpb24taW5mb1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBtYXgtd2lkdGg6IDIwMHB4O1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLm5hdmlnYXRpb24tc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGxpbmUtaGVpZ2h0OiA0OHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxMDAlO1xufSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChDSyxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJ0aW1lbGluZS1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL3RpbWVsaW5lX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL3RpbWVsaW5lX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSxudWxsLHthY3RpdmVSdW5JZDpbe3R5cGU6eHl9XSxsb2FkaW5nTnVtRXhlY3V0aW9uczpbe3R5cGU6eHl9XSxudW1FeGVjdXRpb25zOlt7dHlwZTp4eX1dLHNjcm9sbEJlZ2luSW5kZXg6W3t0eXBlOnh5fV0sc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQ6W3t0eXBlOnh5fV0scGFnZVNpemU6W3t0eXBlOnh5fV0sZGlzcGxheUNvdW50Olt7dHlwZTp4eX1dLGRpc3BsYXlFeGVjdXRpb25EaWdlc3RzOlt7dHlwZTp4eX1dLGRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlczpbe3R5cGU6eHl9XSxmb2N1c2VkRXhlY3V0aW9uSW5kZXg6W3t0eXBlOnh5fV0sZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleDpbe3R5cGU6eHl9XSxmb2N1c2VkRXhlY3V0aW9uRGF0YTpbe3R5cGU6eHl9XSxvbk5hdmlnYXRlTGVmdDpbe3R5cGU6T3l9XSxvbk5hdmlnYXRlUmlnaHQ6W3t0eXBlOk95fV0sb25FeGVjdXRpb25EaWdlc3RDbGlja2VkOlt7dHlwZTpPeX1dLG9uU2xpZGVyQ2hhbmdlOlt7dHlwZTpPeX1dfSk7Y29uc3QgTUs9WyJfX2ZvcndhcmRfIiwiX19iYWNrd2FyZF8iLCJfX2luZmVyZW5jZV8iXTtjbGFzcyB2S3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5hY3RpdmVSdW5JZCQ9dGhpcy5zdG9yZS5waXBlKEZ3KGtaKSksdGhpcy5sb2FkaW5nTnVtRXhlY3V0aW9ucyQ9dGhpcy5zdG9yZS5waXBlKEZ3KFp3KEhaLCh0PT50LnN0YXRlPT15RS5MT0FESU5HKSkpKSx0aGlzLnNjcm9sbEJlZ2luSW5kZXgkPXRoaXMuc3RvcmUucGlwZShGdyhCWikpLHRoaXMuc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQkPXRoaXMuc3RvcmUucGlwZShGdyhadyhMWixqWiwoKHQsZSk9Pk1hdGgubWF4KDAsdC1lKSkpKSksdGhpcy5wYWdlU2l6ZSQ9dGhpcy5zdG9yZS5waXBlKEZ3KFZaKSksdGhpcy5kaXNwbGF5Q291bnQkPXRoaXMuc3RvcmUucGlwZShGdyhqWikpLHRoaXMuZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMkPXRoaXMuc3RvcmUucGlwZShGdyhadyhVWiwodD0+dC5tYXAoKHQ9PihmdW5jdGlvbiBlKHQsbj0xKXtpZighdClyZXR1cm57b3BfdHlwZToiKE4vQSkiLHNob3J0X29wX3R5cGU6Ii4uIixpc19ncmFwaDohMX07Y29uc3Qgbz1NSy5maWx0ZXIoKGU9PnQub3BfdHlwZS5zdGFydHNXaXRoKGUpKSk7aWYoby5sZW5ndGgpe2NvbnN0IGU9dC5vcF90eXBlLnNsaWNlKG9bMF0ubGVuZ3RoKTtyZXR1cm57b3BfdHlwZTp0Lm9wX3R5cGUsc2hvcnRfb3BfdHlwZTplLnNsaWNlKDAsbiksaXNfZ3JhcGg6ITB9fXJldHVybntvcF90eXBlOnQub3BfdHlwZSxzaG9ydF9vcF90eXBlOnQub3BfdHlwZS5zbGljZSgwLG4pLGlzX2dyYXBoOiExfX0pKHQpKSkpKSkpLHRoaXMuZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzJD10aGlzLnN0b3JlLnBpcGUoRncoYVgpKSx0aGlzLmZvY3VzZWRFeGVjdXRpb25JbmRleCQ9dGhpcy5zdG9yZS5waXBlKEZ3KHNYKSksdGhpcy5mb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4JD10aGlzLnN0b3JlLnBpcGUoRncobFgpKSx0aGlzLm51bUV4ZWN1dGlvbnMkPXRoaXMuc3RvcmUucGlwZShGdyhMWikpfW9uTmF2aWdhdGVMZWZ0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaChXcSgpKX1vbk5hdmlnYXRlUmlnaHQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFlxKCkpfW9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKFpxKHtkaXNwbGF5SW5kZXg6dH0pKX1vblNsaWRlckNoYW5nZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKHFxKHtpbmRleDp0fSkpfX1mdW5jdGlvbiB4Syh0LGUpezEmdCYmKFJtKDAsInNwYW4iKSxrdSgxLCIgT3V0cHV0ICIpLEFtKCkpfWZ1bmN0aW9uIE9LKHQsZSl7MSZ0JiYoUm0oMCwic3BhbiIpLGt1KDEsIiBJbnB1dCAiKSxBbSgpKX1mdW5jdGlvbiBQSyh0LGUpe2lmKDEmdCYmKFJtKDAsImRpdiIsNiksUm0oMSwic3BhbiIsNyksUXAoMix4SywyLDAsInNwYW4iLDgpLFFwKDMsT0ssMiwwLCJzcGFuIiw4KSxBbSgpLGt1KDQpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgpO3JjKDEpLERtKCJuZ1N3aXRjaCIsdC5raW5kKSxyYygxKSxEbSgibmdTd2l0Y2hDYXNlIiwiaW5wdXQiKSxyYygxKSxEbSgibmdTd2l0Y2hDYXNlIiwiY29uc3VtZXIiKSxyYygxKSxEdSgiIHNsb3Q6ICIsdC5zbG90LCIgIil9fWZ1bmN0aW9uIHdLKHQsZSl7aWYoMSZ0JiYoUm0oMCwiZGl2Iiw5KSxrdSgxKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oKTtyYygxKSxEdSgiICIsdC5vcERhdGEub3BfdHlwZSwiICIpfX1mdW5jdGlvbiBrSyh0LGUpezEmdCYmKFJtKDAsInNwYW4iLDEwKSxrdSgxLCIgKE9wIGluZm8gdW5hdmFpbGFibGUuKSAiKSxBbSgpKX12Sy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dkspKFNtKEl3KSl9LHZLLsm1Y21wPXRvKHt0eXBlOnZLLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi10aW1lbGluZSJdXSxkZWNsczoxMix2YXJzOjMzLGNvbnN0czpbWzMsImFjdGl2ZVJ1bklkIiwibG9hZGluZ051bUV4ZWN1dGlvbnMiLCJudW1FeGVjdXRpb25zIiwic2Nyb2xsQmVnaW5JbmRleCIsInNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IiwicGFnZVNpemUiLCJkaXNwbGF5Q291bnQiLCJkaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyIsImRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyIsImZvY3VzZWRFeGVjdXRpb25JbmRleCIsImZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgiLCJvbk5hdmlnYXRlTGVmdCIsIm9uTmF2aWdhdGVSaWdodCIsIm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsIm9uU2xpZGVyQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJ0aW1lbGluZS1jb21wb25lbnQiLDApLFZtKCJvbk5hdmlnYXRlTGVmdCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbk5hdmlnYXRlTGVmdCgpfSkpKCJvbk5hdmlnYXRlUmlnaHQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25OYXZpZ2F0ZVJpZ2h0KCl9KSkoIm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25FeGVjdXRpb25EaWdlc3RDbGlja2VkKGUpfSkpKCJvblNsaWRlckNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25TbGlkZXJDaGFuZ2UoZSl9KSksQWgoMSwiYXN5bmMiKSxBaCgyLCJhc3luYyIpLEFoKDMsImFzeW5jIiksQWgoNCwiYXN5bmMiKSxBaCg1LCJhc3luYyIpLEFoKDYsImFzeW5jIiksQWgoNywiYXN5bmMiKSxBaCg4LCJhc3luYyIpLEFoKDksImFzeW5jIiksQWgoMTAsImFzeW5jIiksQWgoMTEsImFzeW5jIiksQW0oKSksMiZlJiZEbSgiYWN0aXZlUnVuSWQiLFRoKDEsMTEsbi5hY3RpdmVSdW5JZCQpKSgibG9hZGluZ051bUV4ZWN1dGlvbnMiLFRoKDIsMTMsbi5sb2FkaW5nTnVtRXhlY3V0aW9ucyQpKSgibnVtRXhlY3V0aW9ucyIsVGgoMywxNSxuLm51bUV4ZWN1dGlvbnMkKSkoInNjcm9sbEJlZ2luSW5kZXgiLFRoKDQsMTcsbi5zY3JvbGxCZWdpbkluZGV4JCkpKCJzY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCIsVGgoNSwxOSxuLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0JCkpKCJwYWdlU2l6ZSIsVGgoNiwyMSxuLnBhZ2VTaXplJCkpKCJkaXNwbGF5Q291bnQiLFRoKDcsMjMsbi5kaXNwbGF5Q291bnQkKSkoImRpc3BsYXlFeGVjdXRpb25EaWdlc3RzIixUaCg4LDI1LG4uZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMkKSkoImRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyIsVGgoOSwyNyxuLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyQpKSgiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IixUaCgxMCwyOSxuLmZvY3VzZWRFeGVjdXRpb25JbmRleCQpKSgiZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCIsVGgoMTEsMzEsbi5mb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4JCkpfSxkaXJlY3RpdmVzOltDS10scGlwZXM6W3dNXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHZLLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InRmLWRlYnVnZ2VyLXYyLXRpbWVsaW5lIix0ZW1wbGF0ZTonXG4gICAgPHRpbWVsaW5lLWNvbXBvbmVudFxuICAgICAgW2FjdGl2ZVJ1bklkXT0iYWN0aXZlUnVuSWQkIHwgYXN5bmMiXG4gICAgICBbbG9hZGluZ051bUV4ZWN1dGlvbnNdPSJsb2FkaW5nTnVtRXhlY3V0aW9ucyQgfCBhc3luYyJcbiAgICAgIFtudW1FeGVjdXRpb25zXT0ibnVtRXhlY3V0aW9ucyQgfCBhc3luYyJcbiAgICAgIFtzY3JvbGxCZWdpbkluZGV4XT0ic2Nyb2xsQmVnaW5JbmRleCQgfCBhc3luYyJcbiAgICAgIFtzY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdF09InNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0JCB8IGFzeW5jIlxuICAgICAgW3BhZ2VTaXplXT0icGFnZVNpemUkIHwgYXN5bmMiXG4gICAgICBbZGlzcGxheUNvdW50XT0iZGlzcGxheUNvdW50JCB8IGFzeW5jIlxuICAgICAgW2Rpc3BsYXlFeGVjdXRpb25EaWdlc3RzXT0iZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMkIHwgYXN5bmMiXG4gICAgICBbZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzXT0iZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzJCB8IGFzeW5jIlxuICAgICAgW2ZvY3VzZWRFeGVjdXRpb25JbmRleF09ImZvY3VzZWRFeGVjdXRpb25JbmRleCQgfCBhc3luYyJcbiAgICAgIFtmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4XT0iZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCQgfCBhc3luYyJcbiAgICAgIChvbk5hdmlnYXRlTGVmdCk9Im9uTmF2aWdhdGVMZWZ0KCkiXG4gICAgICAob25OYXZpZ2F0ZVJpZ2h0KT0ib25OYXZpZ2F0ZVJpZ2h0KCkiXG4gICAgICAob25FeGVjdXRpb25EaWdlc3RDbGlja2VkKT0ib25FeGVjdXRpb25EaWdlc3RDbGlja2VkKCRldmVudCkiXG4gICAgICAob25TbGlkZXJDaGFuZ2UpPSJvblNsaWRlckNoYW5nZSgkZXZlbnQpIlxuICAgID48L3RpbWVsaW5lLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLG51bGwpO2NvbnN0IFNLPWZ1bmN0aW9uKHQpe3JldHVyblt0XX07Y2xhc3MgREt7Y29uc3RydWN0b3IoKXt0aGlzLm9uT3BOYW1lQ2xpY2s9bmV3IExofX1mdW5jdGlvbiBFSyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsImRpdiIsMTMpLFJtKDEsImRpdiIsMTQpLGt1KDIpLEFtKCksUm0oMywiZ3JhcGgtb3AiLDE1KSxWbSgib25PcE5hbWVDbGljayIsKGZ1bmN0aW9uIGUobil7aGkodCk7Y29uc3Qgbz1ZbSgzKTtyZXR1cm4gby5vbkdyYXBoT3BOYXZpZ2F0ZS5lbWl0KHtvcF9uYW1lOm4ub3BfbmFtZSxncmFwaF9pZDpvLmdyYXBoSWR9KX0pKSxBbSgpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49ZS5pbmRleDtyYygyKSxEdSgiSW5wdXQgc2xvdCAiLG4sIjoiKSxyYygxKSxEbSgia2luZCIsImlucHV0IikoIm9wTmFtZSIsdC5vcF9uYW1lKSgic2xvdCIsdC5vdXRwdXRfc2xvdCkoIm9wRGF0YSIsdC5kYXRhKX19ZnVuY3Rpb24gUksodCxlKXtpZigxJnQmJihSbSgwLCJkaXYiLDExKSxSbSgxLCJkaXYiKSxRcCgyLEVLLDQsNSwiZGl2IiwxMiksQW0oKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oMik7cmMoMiksRG0oIm5nRm9yT2YiLHQuaW5wdXRPcHMpfX1mdW5jdGlvbiBBSyh0LGUpezEmdCYmKFJtKDAsImRpdiIsMTYpLGt1KDEsIiAoVGhpcyBvcCBoYXMgbm8gaW5wdXQgdGVuc29yLikgIiksQW0oKSl9ZnVuY3Rpb24gVEsodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJkaXYiLDIzKSxSbSgxLCJncmFwaC1vcCIsMTUpLFZtKCJvbk9wTmFtZUNsaWNrIiwoZnVuY3Rpb24gZShuKXtoaSh0KTtjb25zdCBvPVltKDQpO3JldHVybiBvLm9uR3JhcGhPcE5hdmlnYXRlLmVtaXQoe29wX25hbWU6bi5vcF9uYW1lLGdyYXBoX2lkOm8uZ3JhcGhJZH0pfSkpLEFtKCksQW0oKX1pZigyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7cmMoMSksRG0oImtpbmQiLCJjb25zdW1lciIpKCJvcE5hbWUiLHQub3BfbmFtZSkoInNsb3QiLHQuaW5wdXRfc2xvdCkoIm9wRGF0YSIsdC5kYXRhKX19ZnVuY3Rpb24gTksodCxlKXtpZigxJnQmJihSbSgwLCJkaXYiLDE5KSxSbSgxLCJkaXYiLDIwKSxrdSgyKSxSbSgzLCJzcGFuIiksdGcoNCwyMSksQW0oKSxrdSg1LCIpICIpLEFtKCksUXAoNixUSywyLDQsImRpdiIsMjIpLEFtKCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPWUuaW5kZXg7cmMoMiksRXUoIiBPdXRwdXQgc2xvdCAiLG4sIjogKCIsdC5sZW5ndGgsIiAiKSxyYygyKSxlZyh0Lmxlbmd0aCksbmcoNCkscmMoMiksRG0oIm5nRm9yT2YiLHQpfX1mdW5jdGlvbiB6Syh0LGUpe2lmKDEmdCYmKFJtKDAsImRpdiIsMTcpLFJtKDEsImRpdiIpLFFwKDIsTkssNyw0LCJkaXYiLDE4KSxBbSgpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgyKTtyYygyKSxEbSgibmdGb3JPZiIsdC5jb25zdW1lck9wcyl9fWZ1bmN0aW9uIElLKHQsZSl7aWYoMSZ0JiYoUm0oMCwiZGl2IiwyNCksa3UoMSksUm0oMiwic3BhbiIpLHRnKDMsMjUpLEFtKCksa3UoNCwiIGFuZCBubyBjb25zdW1lci4pICIpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgyKTtyYygxKSxEdSgiIChUaGlzIG9wIGhhcyAiLHQub3BJbmZvLmNvbnN1bWVycy5sZW5ndGgsIiBvdXRwdXQgIikscmMoMiksZWcodC5vcEluZm8uY29uc3VtZXJzLmxlbmd0aCksbmcoMyl9fWZ1bmN0aW9uIEhLKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiZGl2IiksUXAoMSxSSywzLDEsImRpdiIsNCksUXAoMixBSywyLDAsIm5nLXRlbXBsYXRlIixudWxsLDUsaWIpLFJtKDQsImRpdiIsNiksUm0oNSwiZGl2Iiw3KSxrdSg2LCJPcDoiKSxBbSgpLFJtKDcsImdyYXBoLW9wIiw4KSxWbSgib25PcE5hbWVDbGljayIsKGZ1bmN0aW9uIGUobil7aGkodCk7Y29uc3Qgbz1ZbSgpO3JldHVybiBvLm9uR3JhcGhPcE5hdmlnYXRlLmVtaXQoe29wX25hbWU6bi5vcF9uYW1lLGdyYXBoX2lkOm8uZ3JhcGhJZH0pfSkpLEFtKCksQW0oKSxRcCg4LHpLLDMsMSwiZGl2Iiw5KSxRcCg5LElLLDUsMiwibmctdGVtcGxhdGUiLG51bGwsMTAsaWIpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PSRwKDMpLGU9JHAoMTApLG49WW0oKTtyYygxKSxEbSgibmdJZiIsbi5pbnB1dE9wcy5sZW5ndGg+MCkoIm5nSWZFbHNlIix0KSxyYyg2KSxEbSgia2luZCIsInNlbGYiKSgib3BOYW1lIixuLm9wSW5mby5vcF9uYW1lKSgib3BEYXRhIixuLm9wSW5mbykscmMoMSksRG0oIm5nSWYiLG4udG90YWxOdW1Db25zdW1lcnM+MCkoIm5nSWZFbHNlIixlKX19ZnVuY3Rpb24gRksodCxlKXsxJnQmJihSbSgwLCJzcGFuIiwyNiksa3UoMSwiIChPcCBpbmZvIHVuYXZhaWxhYmxlLikgIiksQW0oKSl9ZnVuY3Rpb24gTEsodCxlKXsxJnQmJihSbSgwLCJkaXYiLDI3KSxrdSgxLCIgTm8gZ3JhcGggb3Agc2VsZWN0ZWQuIENsaWNrIGEgdGVuc29yIG5hbWUgaW4gdGhlIEdyYXBoIEV4ZWN1dGlvbnMgdGFibGUgdG8gdmlldyB0aGUgbmVpZ2hib3Job29kIG9mIHRoZSB0ZW5zb3IncyBvcCBpbiBpdHMgZ3JhcGguICIpLEFtKCkpfURLLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxESyl9LERLLsm1Y21wPXRvKHt0eXBlOkRLLHNlbGVjdG9yczpbWyJncmFwaC1vcCJdXSxpbnB1dHM6e2tpbmQ6ImtpbmQiLG9wTmFtZToib3BOYW1lIixzbG90OiJzbG90IixvcERhdGE6Im9wRGF0YSJ9LG91dHB1dHM6e29uT3BOYW1lQ2xpY2s6Im9uT3BOYW1lQ2xpY2sifSxkZWNsczo5LHZhcnM6Nyxjb25zdHM6W1sxLCJvcC1jb250YWluZXIiXSxbMSwiaW5wdXQtdGVuc29yLW5hbWUiXSxbMSwib3AtbmFtZSIsMywibmdDbGFzcyIsImNsaWNrIl0sWyJjbGFzcyIsInNsb3QiLDQsIm5nSWYiXSxbImNsYXNzIiwib3AtdHlwZSIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvcEluZm9NaXNzaW5nIiwiIl0sWzEsInNsb3QiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm9wLXR5cGUiXSxbMSwib3AtaW5mby1taXNzaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihSbSgwLCJidXR0b24iLDApLFJtKDEsImRpdiIsMSksUm0oMiwiYnV0dG9uIiwyKSxWbSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25PcE5hbWVDbGljay5lbWl0KHtvcF9uYW1lOm4ub3BOYW1lfSl9KSksUm0oMywic3BhbiIpLGt1KDQpLEFtKCksQW0oKSxRcCg1LFBLLDUsNCwiZGl2IiwzKSxBbSgpLFFwKDYsd0ssMiwxLCJkaXYiLDQpLFFwKDcsa0ssMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw1LGliKSxBbSgpKSwyJmUpe2NvbnN0IHQ9JHAoOCk7cmMoMiksRG0oIm5nQ2xhc3MiLE1oKDUsU0ssInNlbGYiPT09bi5raW5kPyJzZWxmLW9wLW5hbWUiOiIiKSkscmMoMiksU3Uobi5vcE5hbWUpLHJjKDEpLERtKCJuZ0lmIiwic2VsZiIhPT1uLmtpbmQpLHJjKDEpLERtKCJuZ0lmIix2b2lkIDAhPT1uLm9wRGF0YSkoIm5nSWZFbHNlIix0KX19LGRpcmVjdGl2ZXM6W2FNLGRNLGZNLGdNXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm9wLW5hbWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0fS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoycHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjFweCAzcHggI2VlZTtjdXJzb3I6cG9pbnRlcjttYXJnaW46MCA1cHggMCAwO3BhZGRpbmc6MnB4IDZweDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjIwMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MnB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MXB4IDNweCAjNzU3NTc1fS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmU6MH0ub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcntib3JkZXI6MnB4IHNvbGlkICNmZmQzYjJ9Lm9wLWluZm8tbWlzc2luZ1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6Z3JheX0ub3AtbmFtZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZTtwYWRkaW5nOjA7dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3doaXRlLXNwYWNlOnByZS13cmFwfS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lOjB9Lm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VjZWZmMTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjE0cHg7bGluZS1oZWlnaHQ6MTRweDtwYWRkaW5nOjFweCAzcHg7d2lkdGg6bWF4LWNvbnRlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDozcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQ1NWE2NH0uc2VsZi1vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkO3RleHQtZGVjb3JhdGlvbjpub25lfS5zbG90W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbG90W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsb3RbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSddfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChESyxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJncmFwaC1vcCIsdGVtcGxhdGVVcmw6ImdyYXBoX29wX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL2dyYXBoX29wX2NvbXBvbmVudC5jc3MiXX1dfV0sbnVsbCx7a2luZDpbe3R5cGU6eHl9XSxvcE5hbWU6W3t0eXBlOnh5fV0sc2xvdDpbe3R5cGU6eHl9XSxvcERhdGE6W3t0eXBlOnh5fV0sb25PcE5hbWVDbGljazpbe3R5cGU6T3l9XX0pO2NsYXNzIEJLe2NvbnN0cnVjdG9yKCl7dGhpcy5vbkdyYXBoT3BOYXZpZ2F0ZT1uZXcgTGh9Z2V0IGdyYXBoSWQoKXtyZXR1cm4gdGhpcy5vcEluZm8uZ3JhcGhfaWRzW3RoaXMub3BJbmZvLmdyYXBoX2lkcy5sZW5ndGgtMV19Z2V0IHRvdGFsTnVtQ29uc3VtZXJzKCl7cmV0dXJuIHRoaXMuY29uc3VtZXJPcHMucmVkdWNlKCgodCxlKT0+dCtlLmxlbmd0aCksMCl9fUJLLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxCSyl9LEJLLsm1Y21wPXRvKHt0eXBlOkJLLHNlbGVjdG9yczpbWyJncmFwaC1jb21wb25lbnQiXV0saW5wdXRzOntvcEluZm86Im9wSW5mbyIsaW5wdXRPcHM6ImlucHV0T3BzIixjb25zdW1lck9wczoiY29uc3VtZXJPcHMifSxvdXRwdXRzOntvbkdyYXBoT3BOYXZpZ2F0ZToib25HcmFwaE9wTmF2aWdhdGUifSxkZWNsczo5LHZhcnM6Mixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLG4sbztyZXR1cm4gdD0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygie1ZBUl9QTFVSQUwsIHBsdXJhbCwgPTAge2NvbnN1bWVyfSA9MSB7Y29uc3VtZXJ9IG90aGVyIHtjb25zdW1lcnN9fSIpOiRsb2NhbGl6ZWA64pCfZmU1NWY5YjE5M2VhMjBhYWU1YjU2MzVlNjhkOTM4NjUwMzg0Nzc0NuKQnzQ5NTUxMzM3NDA4NDEyOTk4NTE6e1ZBUl9QTFVSQUwsIHBsdXJhbCwgPTAge2NvbnN1bWVyfSA9MSB7Y29uc3VtZXJ9IG90aGVyIHtjb25zdW1lcnN9fWAsdD1vZyh0LHtWQVJfUExVUkFMOiLvv70w77+9In0pLGU9InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIiB7JGljdX0iLHtpY3U6dH0pOiRsb2NhbGl6ZWA64pCfYmFhNDYwZTJmMmI4NTdlMjYyOTJiMjQ2ZmMxOGFlMGVhOWI1ZTUzN+KQnzU1NTYzNDAzNDM4NTAxNjU1MTY6ICR7dH06SUNVOmAsbj0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygie1ZBUl9QTFVSQUwsIHBsdXJhbCwgPTAge3RlbnNvcn0gPTEge3RlbnNvcn0gb3RoZXIge3RlbnNvcnN9fSIpOiRsb2NhbGl6ZWA64pCfNmFhNzVmNjI3ZTBkYzE2MTUwZWY0NDg0NjRlMGM4NTdhYWEwZGMxOOKQnzUxNTY3MTI5MzUxNTA1ODY4Nzg6e1ZBUl9QTFVSQUwsIHBsdXJhbCwgPTAge3RlbnNvcn0gPTEge3RlbnNvcn0gb3RoZXIge3RlbnNvcnN9fWAsbj1vZyhuLHtWQVJfUExVUkFMOiLvv70w77+9In0pLG89InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIiB7JGljdX0iLHtpY3U6bn0pOiRsb2NhbGl6ZWA64pCfODkzNDc2YzJjNDIxY2VlNDc2NjNjOTczMmZhNDFhNzUwZDNhNzNkZuKQnzI0NjA2NzA1MzczNTE2MjYzNDogJHtufTpJQ1U6YCxbWzEsImdyYXBoLXN0cnVjdHVyZS1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvcEluZm9NaXNzaW5nIiwiIl0sWyJub09wRm9jdXNlZCIsIiJdLFsiY2xhc3MiLCJpbnB1dHMtY29udGFpbmVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vSW5wdXRzIiwiIl0sWzEsInNlbGYtb3AtY29udGFpbmVyIl0sWzEsInNlbGYtb3AtaGVhZGVyIl0sWzMsImtpbmQiLCJvcE5hbWUiLCJvcERhdGEiLCJvbk9wTmFtZUNsaWNrIl0sWyJjbGFzcyIsImNvbnN1bWVycy1jb250YWluZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9Db25zdW1lcnMiLCIiXSxbMSwiaW5wdXRzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJpbnB1dC1vcC1zZWN0aW9uIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiaW5wdXQtb3Atc2VjdGlvbiJdLFsxLCJpbnB1dC1zbG90LWhlYWRlciJdLFszLCJraW5kIiwib3BOYW1lIiwic2xvdCIsIm9wRGF0YSIsIm9uT3BOYW1lQ2xpY2siXSxbMSwiaW5wdXRzLWNvbnRhaW5lciIsIm5vLWlucHV0cy1pbmRpY2F0b3IiXSxbMSwiY29uc3VtZXJzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJzbG90LWNvbnN1bWVycy1jb250YWluZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJzbG90LWNvbnN1bWVycy1jb250YWluZXIiXSxbMSwic2xvdC1jb25zdW1lcnMtaGVhZGVyIl0sZSxbImNsYXNzIiwiY29uc3VtZXItc2VjdGlvbiIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnN1bWVyLXNlY3Rpb24iXSxbMSwib3AtY29uc3VtZXJzLWNvbnRhaW5lciJdLG8sWzEsIm9wLWluZm8tbWlzc2luZyJdLFsxLCJuby1vcC1mb2N1c2VkIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoUm0oMCwiZGl2IiksUm0oMSwiZGl2Iiksa3UoMiwiR3JhcGggU3RydWN0dXJlIiksQW0oKSxSbSgzLCJkaXYiLDApLFFwKDQsSEssMTEsNywiZGl2IiwxKSxBbSgpLFFwKDUsRkssMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLGliKSxRcCg3LExLLDIsMCwibmctdGVtcGxhdGUiLG51bGwsMyxpYiksQW0oKSksMiZlKXtjb25zdCB0PSRwKDgpO3JjKDQpLERtKCJuZ0lmIixudWxsIT1uLm9wSW5mbykoIm5nSWZFbHNlIix0KX19LGRpcmVjdGl2ZXM6W2RNLERLLGxNXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde292ZXJmbG93LXk6YXV0b30uY29uc3VtZXJzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206NXB4O292ZXJmbG93LXg6YXV0bzt3aGl0ZS1zcGFjZTpub3dyYXB9LmNvbnN1bWVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjVweCAwfS5ncmFwaC1zdHJ1Y3R1cmUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtvdmVyZmxvdy15OmF1dG87d2hpdGUtc3BhY2U6bm93cmFwfS5pbnB1dHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7bWFyZ2luLXRvcDo1cHg7b3ZlcmZsb3cteDphdXRvO3BhZGRpbmctYm90dG9tOjA7d2hpdGUtc3BhY2U6bm93cmFwfS5pbnB1dC1vcC1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6NXB4O3BhZGRpbmctYm90dG9tOjVweH0uaW5wdXQtc2xvdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjA5OTttYXJnaW4tYm90dG9tOjVweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtc2xvdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtc2xvdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2U2NTEwMH0uaW5wdXQtdGVuc29yLW5hbWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwfS5uby1vcC1mb2N1c2VkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5O2ZvbnQtZmFtaWx5OiJSb2JvdG8iLEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O3doaXRlLXNwYWNlOm5vcm1hbH0uc2VsZi1vcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGQ7bWFyZ2luLWJvdHRvbTo1cHh9LnNlbGYtb3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7cGFkZGluZy1ib3R0b206NXB4fS5zbG90LWNvbnN1bWVycy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDo1cHg7cGFkZGluZy10b3A6NXB4O3ZlcnRpY2FsLWFsaWduOnRvcH0uc2xvdC1jb25zdW1lcnMtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEJLLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6ImdyYXBoLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vZ3JhcGhfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vZ3JhcGhfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwse29wSW5mbzpbe3R5cGU6eHl9XSxpbnB1dE9wczpbe3R5cGU6eHl9XSxjb25zdW1lck9wczpbe3R5cGU6eHl9XSxvbkdyYXBoT3BOYXZpZ2F0ZTpbe3R5cGU6T3l9XX0pO2NsYXNzIFZLe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLm9wSW5mbyQ9dGhpcy5zdG9yZS5waXBlKEZ3KGVYKSksdGhpcy5pbnB1dE9wcyQ9dGhpcy5zdG9yZS5waXBlKEZ3KG5YKSksdGhpcy5jb25zdW1lck9wcyQ9dGhpcy5zdG9yZS5waXBlKEZ3KGlYKSl9b25HcmFwaE9wTmF2aWdhdGUodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChuWih0KSl9fWZ1bmN0aW9uIGpLKHQsZSl7MSZ0JiYoUm0oMCwiZGl2IiwxMiksa3UoMSwi4pa2IiksQW0oKSl9VksuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFZLKShTbShJdykpfSxWSy7JtWNtcD10byh7dHlwZTpWSyxzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItZ3JhcGgiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywib3BJbmZvIiwiaW5wdXRPcHMiLCJjb25zdW1lck9wcyIsIm9uR3JhcGhPcE5hdmlnYXRlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJncmFwaC1jb21wb25lbnQiLDApLFZtKCJvbkdyYXBoT3BOYXZpZ2F0ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25HcmFwaE9wTmF2aWdhdGUoZSl9KSksQWgoMSwiYXN5bmMiKSxBaCgyLCJhc3luYyIpLEFoKDMsImFzeW5jIiksQW0oKSksMiZlJiZEbSgib3BJbmZvIixUaCgxLDMsbi5vcEluZm8kKSkoImlucHV0T3BzIixUaCgyLDUsbi5pbnB1dE9wcyQpKSgiY29uc3VtZXJPcHMiLFRoKDMsNyxuLmNvbnN1bWVyT3BzJCkpfSxkaXJlY3RpdmVzOltCS10scGlwZXM6W3dNXSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFZLLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InRmLWRlYnVnZ2VyLXYyLWdyYXBoIix0ZW1wbGF0ZTonXG4gICAgPGdyYXBoLWNvbXBvbmVudFxuICAgICAgW29wSW5mb109Im9wSW5mbyQgfCBhc3luYyJcbiAgICAgIFtpbnB1dE9wc109ImlucHV0T3BzJCB8IGFzeW5jIlxuICAgICAgW2NvbnN1bWVyT3BzXT0iY29uc3VtZXJPcHMkIHwgYXN5bmMiXG4gICAgICAob25HcmFwaE9wTmF2aWdhdGUpPSJvbkdyYXBoT3BOYXZpZ2F0ZSgkZXZlbnQpIlxuICAgID48L2dyYXBoLWNvbXBvbmVudD5cbiAgJ31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fV19KSxudWxsKTtjb25zdCBVSz1mdW5jdGlvbih0LGUpe3JldHVybnt0ZW5zb3JEZWJ1Z01vZGU6dCxhcnJheTplfX07ZnVuY3Rpb24gR0sodCxlKXtpZigxJnQmJlRtKDAsImRlYnVnLXRlbnNvci12YWx1ZSIsMTcpLDImdCl7Y29uc3QgdD1ZbSgyKS4kaW1wbGljaXQsZT1ZbSgyKTtEbSgiZGVidWdUZW5zb3JWYWx1ZSIsZS5wYXJzZURlYnVnVGVuc29yVmFsdWUodmgoMSxVSyxlLmdyYXBoRXhlY3V0aW9uRGF0YVt0XS50ZW5zb3JfZGVidWdfbW9kZSxlLmdyYXBoRXhlY3V0aW9uRGF0YVt0XS5kZWJ1Z190ZW5zb3JfdmFsdWUpKSl9fWZ1bmN0aW9uIFdLKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiZGl2IiksUm0oMSwiZGl2IiwxMyksUm0oMiwiYnV0dG9uIiwxNCksVm0oImNsaWNrIiwoZnVuY3Rpb24gZSgpe2hpKHQpO2NvbnN0IG49WW0oKS4kaW1wbGljaXQsbz1ZbSgyKTtyZXR1cm4gby5vblRlbnNvck5hbWVDbGljay5lbWl0KHtpbmRleDpuLGdyYXBoX2lkOm8uZ3JhcGhFeGVjdXRpb25EYXRhW25dLmdyYXBoX2lkLG9wX25hbWU6by5ncmFwaEV4ZWN1dGlvbkRhdGFbbl0ub3BfbmFtZX0pfSkpLGt1KDMpLEFtKCksUm0oNCwiZGl2IiwxNSksa3UoNSksQW0oKSxBbSgpLFFwKDYsR0ssMSw0LCJkZWJ1Zy10ZW5zb3ItdmFsdWUiLDE2KSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgpLiRpbXBsaWNpdCxlPVltKDIpO3JjKDIpLEttKCJ0aXRsZSIsZS5nZXRUZW5zb3JOYW1lKHQpKSxyYygxKSxEdSgiICIsZS5nZXRUZW5zb3JOYW1lKHQpLCIgIikscmMoMiksU3UoZS5ncmFwaEV4ZWN1dGlvbkRhdGFbdF0ub3BfdHlwZSkscmMoMSksRG0oIm5nSWYiLG51bGwhPT1lLmdyYXBoRXhlY3V0aW9uRGF0YVt0XS5kZWJ1Z190ZW5zb3JfdmFsdWUpfX1mdW5jdGlvbiBZSyh0LGUpezEmdCYmKFJtKDAsImRpdiIsMTgpLGt1KDEsIiBMb2FkaW5nLi4uICIpLEFtKCkpfWNvbnN0IHFLPWZ1bmN0aW9uKHQpe3JldHVybnsiaW5wdXQtb2YtZm9jdXMiOnR9fTtmdW5jdGlvbiBaSyh0LGUpe2lmKDEmdCYmKFJtKDAsImRpdiIsNSksUm0oMSwiZGl2Iiw2KSxSbSgyLCJkaXYiLDcpLFFwKDMsakssMiwwLCJkaXYiLDgpLGt1KDQpLEFtKCksUXAoNSxXSyw3LDQsImRpdiIsOSksUXAoNixZSywyLDAsIm5nLXRlbXBsYXRlIiwxMCwxMSxpYiksQW0oKSxBbSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj0kcCg3KSxvPVltKDIpO3JjKDEpLERtKCJuZ0NsYXNzIixNaCg1LHFLLG8uaXNJbnB1dE9mRm9jdXModCkpKSxyYygyKSxEbSgibmdJZiIsdD09PW8uZm9jdXNJbmRleCkscmMoMSksRHUoIiAiLHQsIiAiKSxyYygxKSxEbSgibmdJZiIsby5ncmFwaEV4ZWN1dGlvbkRhdGFbdF0pKCJuZ0lmRWxzZSIsbil9fWZ1bmN0aW9uIFhLKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IiwzKSxWbSgic2Nyb2xsZWRJbmRleENoYW5nZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKCkub25TY3JvbGxlZEluZGV4Q2hhbmdlLmVtaXQobil9KSksUXAoMSxaSyw4LDcsImRpdiIsNCksQW0oKX1pZigyJnQpe2NvbnN0IHQ9WW0oKTtyYygxKSxEbSgiY2RrVmlydHVhbEZvck9mIix0LmdyYXBoRXhlY3V0aW9uSW5kaWNlcyl9fWNsYXNzIEtLe2NvbnN0cnVjdG9yKCl7dGhpcy5vblNjcm9sbGVkSW5kZXhDaGFuZ2U9bmV3IExoLHRoaXMub25UZW5zb3JOYW1lQ2xpY2s9bmV3IExoLHRoaXMucGFyc2VEZWJ1Z1RlbnNvclZhbHVlPUhYLHRoaXMuVEVTVF9PTkxZPXtnZXRWaWV3UG9ydDooKT0+dGhpcy52aWV3UG9ydH19bmdPbkNoYW5nZXModCl7aWYodGhpcy52aWV3UG9ydCYmdC5mb2N1c0luZGV4JiZudWxsIT09dC5mb2N1c0luZGV4LmN1cnJlbnRWYWx1ZSl7Y29uc3QgZT10aGlzLnZpZXdQb3J0LmdldFJlbmRlcmVkUmFuZ2UoKSxuPXQuZm9jdXNJbmRleC5jdXJyZW50VmFsdWUsbz1NYXRoLnJvdW5kKChlLmVuZC1lLnN0YXJ0KS8zKSxpPU1hdGgubWF4KG4tbywwKTt0aGlzLnZpZXdQb3J0LnNjcm9sbFRvSW5kZXgoaSxuPj1lLnN0YXJ0JiZuPGUuZW5kPyJzbW9vdGgiOnZvaWQgMCl9fWdldFRlbnNvck5hbWUodCl7cmV0dXJuYCR7dGhpcy5ncmFwaEV4ZWN1dGlvbkRhdGFbdF0ub3BfbmFtZX06JHt0aGlzLmdyYXBoRXhlY3V0aW9uRGF0YVt0XS5vdXRwdXRfc2xvdH1gfWlzSW5wdXRPZkZvY3VzKHQpe3JldHVybiBudWxsIT09dGhpcy5mb2N1c0lucHV0SW5kaWNlcyYmdGhpcy5mb2N1c0lucHV0SW5kaWNlcy5pbmNsdWRlcyh0KX19S0suybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEtLKX0sS0suybVjbXA9dG8oe3R5cGU6S0ssc2VsZWN0b3JzOltbImdyYXBoLWV4ZWN1dGlvbnMtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiZRaChnRiw1KSwyJmUpe2xldCB0O0poKHQ9dGIoKSkmJihuLnZpZXdQb3J0PXQuZmlyc3QpfX0saW5wdXRzOntudW1HcmFwaEV4ZWN1dGlvbnM6Im51bUdyYXBoRXhlY3V0aW9ucyIsZ3JhcGhFeGVjdXRpb25EYXRhOiJncmFwaEV4ZWN1dGlvbkRhdGEiLGdyYXBoRXhlY3V0aW9uSW5kaWNlczoiZ3JhcGhFeGVjdXRpb25JbmRpY2VzIixmb2N1c0luZGV4OiJmb2N1c0luZGV4Iixmb2N1c0lucHV0SW5kaWNlczoiZm9jdXNJbnB1dEluZGljZXMifSxvdXRwdXRzOntvblNjcm9sbGVkSW5kZXhDaGFuZ2U6Im9uU2Nyb2xsZWRJbmRleENoYW5nZSIsb25UZW5zb3JOYW1lQ2xpY2s6Im9uVGVuc29yTmFtZUNsaWNrIn0sZmVhdHVyZXM6W0JvXSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJncmFwaC1leGVjdXRpb25zLWNvbnRhaW5lciJdLFsxLCJncmFwaC1leGVjdXRpb25zLXRpdGxlIl0sWyJpdGVtU2l6ZSIsIjM4IiwiY2xhc3MiLCJncmFwaC1leGVjdXRpb25zLXZpZXdwb3J0IiwzLCJzY3JvbGxlZEluZGV4Q2hhbmdlIiw0LCJuZ0lmIl0sWyJpdGVtU2l6ZSIsIjM4IiwxLCJncmFwaC1leGVjdXRpb25zLXZpZXdwb3J0IiwzLCJzY3JvbGxlZEluZGV4Q2hhbmdlIl0sWyJjbGFzcyIsInRlbnNvci1jb250YWluZXIiLDQsImNka1ZpcnR1YWxGb3IiLCJjZGtWaXJ0dWFsRm9yT2YiXSxbMSwidGVuc29yLWNvbnRhaW5lciJdLFsxLCJ0ZW5zb3ItaXRlbSIsMywibmdDbGFzcyJdLFsxLCJncmFwaC1leGVjdXRpb24taW5kZXgiXSxbImNsYXNzIiwiZ3JhcGgtZXhlY3V0aW9uLWZvY3VzIiw0LCJuZ0lmIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsiY2xhc3MiLCJ0ZW5zb3ItaXRlbSJdLFsiZGF0YUxvYWRpbmciLCIiXSxbMSwiZ3JhcGgtZXhlY3V0aW9uLWZvY3VzIl0sWzEsInRlbnNvci1uYW1lLWFuZC1vcC10eXBlIl0sWzEsInRlbnNvci1uYW1lIiwzLCJ0aXRsZSIsImNsaWNrIl0sWzEsIm9wLXR5cGUiXSxbMywiZGVidWdUZW5zb3JWYWx1ZSIsNCwibmdJZiJdLFszLCJkZWJ1Z1RlbnNvclZhbHVlIl0sWzEsImxvYWRpbmctc3Bpbm5lciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiZGl2IiwwKSxSbSgxLCJkaXYiLDEpLGt1KDIpLEFtKCksUXAoMyxYSywyLDEsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCIsMiksQW0oKSksMiZlJiYocmMoMiksRHUoIiBHcmFwaCBFeGVjdXRpb25zICgiLG4ubnVtR3JhcGhFeGVjdXRpb25zLCIpICIpLHJjKDEpLERtKCJuZ0lmIixudWxsIT09bi5udW1HcmFwaEV4ZWN1dGlvbnMmJm4ubnVtR3JhcGhFeGVjdXRpb25zPjApKX0sZGlyZWN0aXZlczpbZE0sZ0YsZEYsYkYsYU0sYUtdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5ncmFwaC1leGVjdXRpb25zLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTttYXJnaW4tbGVmdDo4cHg7cGFkZGluZy1sZWZ0OjEwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX0uZ3JhcGgtZXhlY3V0aW9uLWZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JhcGgtZXhlY3V0aW9uLWluZGV4W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctcmlnaHQ6NHB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6NDBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9uLWluZGV4W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyYXBoLWV4ZWN1dGlvbi1pbmRleFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmdyYXBoLWV4ZWN1dGlvbnMtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MCA1cHggM3B4IC0zcHggI2NjYztwYWRkaW5nLWJvdHRvbTo1cHh9LmdyYXBoLWV4ZWN1dGlvbnMtdmlld3BvcnRbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO2ZvbnQtc2l6ZToxMnB4O3dpZHRoOjEwMCU7b3ZlcmZsb3cteDpoaWRkZW59LmlucHV0LW9mLWZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYwOTl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmlucHV0LW9mLWZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmlucHV0LW9mLWZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlNjUxMDB9LmxvYWRpbmctc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VjZWZmMTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjE0cHg7bGluZS1oZWlnaHQ6MTRweDtwYWRkaW5nOjFweCAzcHg7d2lkdGg6bWF4LWNvbnRlbnQ7ZGlyZWN0aW9uOnJ0bDtkaXNwbGF5OmJsb2NrfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiM0NTVhNjR9LnRlbnNvci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LnRlbnNvci1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6bm93cmFwO2hlaWdodDozOHB4O2xpbmUtaGVpZ2h0OjM4cHg7dGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudGVuc29yLWl0ZW1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudGVuc29yLWl0ZW1bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LnRlbnNvci1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O2N1cnNvcjpwb2ludGVyO2RpcmVjdGlvbjpydGw7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDoxNnB4O21hcmdpbjoycHggMCAxcHg7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDJweCk7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MCAycHg7dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS50ZW5zb3ItbmFtZVtfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZToxcHggc29saWQgI2M2Y2FkMX0udGVuc29yLW5hbWUtYW5kLW9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2RpcmVjdGlvbjpydGw7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctcmlnaHQ6OHB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6MjQwcHh9ZGVidWctdGVuc29yLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDB9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEtLLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6ImdyYXBoLWV4ZWN1dGlvbnMtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9ncmFwaF9leGVjdXRpb25zX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL2dyYXBoX2V4ZWN1dGlvbnNfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwse251bUdyYXBoRXhlY3V0aW9uczpbe3R5cGU6eHl9XSxncmFwaEV4ZWN1dGlvbkRhdGE6W3t0eXBlOnh5fV0sZ3JhcGhFeGVjdXRpb25JbmRpY2VzOlt7dHlwZTp4eX1dLGZvY3VzSW5kZXg6W3t0eXBlOnh5fV0sZm9jdXNJbnB1dEluZGljZXM6W3t0eXBlOnh5fV0sb25TY3JvbGxlZEluZGV4Q2hhbmdlOlt7dHlwZTpPeX1dLG9uVGVuc29yTmFtZUNsaWNrOlt7dHlwZTpPeX1dLHZpZXdQb3J0Olt7dHlwZTpaYSxhcmdzOltnRix7c3RhdGljOiExfV19XX0pO2NsYXNzIEpLe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLm51bUdyYXBoRXhlY3V0aW9ucyQ9dGhpcy5zdG9yZS5waXBlKEZ3KFlaKSksdGhpcy5ncmFwaEV4ZWN1dGlvbkRhdGEkPXRoaXMuc3RvcmUucGlwZShGdyhRWikpLHRoaXMuZ3JhcGhFeGVjdXRpb25JbmRpY2VzJD10aGlzLnN0b3JlLnBpcGUoRncoWncoWVosKHQ9PjA9PT10P251bGw6QXJyYXkuZnJvbSh7bGVuZ3RoOnR9KS5tYXAoKCh0LGUpPT5lKSkpKSkpLHRoaXMuZm9jdXNJbmRleCQ9dGhpcy5zdG9yZS5waXBlKEZ3KCRaKSksdGhpcy5mb2N1c0lucHV0SW5kaWNlcyQ9dGhpcy5zdG9yZS5waXBlKEZ3KG9YKSl9b25TY3JvbGxlZEluZGV4Q2hhbmdlKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2godFooe2luZGV4OnR9KSl9b25UZW5zb3JOYW1lQ2xpY2sodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChlWih0KSl9fUpLLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxKSykoU20oSXcpKX0sSksuybVjbXA9dG8oe3R5cGU6Skssc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWdyYXBoLWV4ZWN1dGlvbnMiXV0sZGVjbHM6Nix2YXJzOjE1LGNvbnN0czpbWzMsIm51bUdyYXBoRXhlY3V0aW9ucyIsImdyYXBoRXhlY3V0aW9uRGF0YSIsImdyYXBoRXhlY3V0aW9uSW5kaWNlcyIsImZvY3VzSW5kZXgiLCJmb2N1c0lucHV0SW5kaWNlcyIsIm9uU2Nyb2xsZWRJbmRleENoYW5nZSIsIm9uVGVuc29yTmFtZUNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJncmFwaC1leGVjdXRpb25zLWNvbXBvbmVudCIsMCksVm0oIm9uU2Nyb2xsZWRJbmRleENoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25TY3JvbGxlZEluZGV4Q2hhbmdlKGUpfSkpKCJvblRlbnNvck5hbWVDbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25UZW5zb3JOYW1lQ2xpY2soZSl9KSksQWgoMSwiYXN5bmMiKSxBaCgyLCJhc3luYyIpLEFoKDMsImFzeW5jIiksQWgoNCwiYXN5bmMiKSxBaCg1LCJhc3luYyIpLEFtKCkpLDImZSYmRG0oIm51bUdyYXBoRXhlY3V0aW9ucyIsVGgoMSw1LG4ubnVtR3JhcGhFeGVjdXRpb25zJCkpKCJncmFwaEV4ZWN1dGlvbkRhdGEiLFRoKDIsNyxuLmdyYXBoRXhlY3V0aW9uRGF0YSQpKSgiZ3JhcGhFeGVjdXRpb25JbmRpY2VzIixUaCgzLDksbi5ncmFwaEV4ZWN1dGlvbkluZGljZXMkKSkoImZvY3VzSW5kZXgiLFRoKDQsMTEsbi5mb2N1c0luZGV4JCkpKCJmb2N1c0lucHV0SW5kaWNlcyIsVGgoNSwxMyxuLmZvY3VzSW5wdXRJbmRpY2VzJCkpfSxkaXJlY3RpdmVzOltLS10scGlwZXM6W3dNXSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEpLLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InRmLWRlYnVnZ2VyLXYyLWdyYXBoLWV4ZWN1dGlvbnMiLHRlbXBsYXRlOidcbiAgICA8Z3JhcGgtZXhlY3V0aW9ucy1jb21wb25lbnRcbiAgICAgIFtudW1HcmFwaEV4ZWN1dGlvbnNdPSJudW1HcmFwaEV4ZWN1dGlvbnMkIHwgYXN5bmMiXG4gICAgICBbZ3JhcGhFeGVjdXRpb25EYXRhXT0iZ3JhcGhFeGVjdXRpb25EYXRhJCB8IGFzeW5jIlxuICAgICAgW2dyYXBoRXhlY3V0aW9uSW5kaWNlc109ImdyYXBoRXhlY3V0aW9uSW5kaWNlcyQgfCBhc3luYyJcbiAgICAgIFtmb2N1c0luZGV4XT0iZm9jdXNJbmRleCQgfCBhc3luYyJcbiAgICAgIFtmb2N1c0lucHV0SW5kaWNlc109ImZvY3VzSW5wdXRJbmRpY2VzJCB8IGFzeW5jIlxuICAgICAgKG9uU2Nyb2xsZWRJbmRleENoYW5nZSk9Im9uU2Nyb2xsZWRJbmRleENoYW5nZSgkZXZlbnQpIlxuICAgICAgKG9uVGVuc29yTmFtZUNsaWNrKT0ib25UZW5zb3JOYW1lQ2xpY2soJGV2ZW50KSJcbiAgICA+PC9ncmFwaC1leGVjdXRpb25zLWNvbXBvbmVudD5cbiAgJ31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fV19KSxudWxsKTtjb25zdCBRSz1mdW5jdGlvbiAkSygpe3JldHVybiB3aW5kb3d9O2Z1bmN0aW9uIHRKKHQpe2NvbnN0IGU9UUsoKS5yZXF1aXJlO3JldHVybiBuZXcgUHJvbWlzZSgobj0+e2UodCxuKX0pKX1mdW5jdGlvbiBlSigpe3JldHVybiBnQSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9UUsoKTtpZih2b2lkIDA9PT10Lm1vbmFjbyl7aWYoIXQucmVxdWlyZSl0aHJvdyBuZXcgRXJyb3IoImxvYWRNb25hY28oKSBmYWlsZWQgYmVjYXVzZSBmdW5jdGlvbiByZXF1aXJlKCkgaXMgdW5hdmFpbGFibGUiKTt0LnJlcXVpcmUuY29uZmlnKHtwYXRoczp7dnM6Ii90Zi1pbXBvcnRzL3ZzIn19KSx5aWVsZCB0SihbInZzL2VkaXRvci9lZGl0b3IubWFpbiJdKSx5aWVsZCB0SihbInZzL3B5dGhvbi9weXRob24uY29udHJpYnV0aW9uIl0pfX0pKX1mdW5jdGlvbiBuSih0KXtyZXR1cm4gdD8idnMtZGFyayI6InZzIn1jbGFzcyBvSntjb25zdHJ1Y3Rvcih0KXt0aGlzLnJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zPTEwMCx0aGlzLm9uUmVzaXplPW5ldyBMaCx0aGlzLm5nVW5zdWJzY3JpYmUkPW5ldyBJLHRoaXMub25SZXNpemUkPW5ldyBJO2NvbnN0IGU9bmV3IFJlc2l6ZU9ic2VydmVyKCgoKT0+e3RoaXMub25SZXNpemUkLm5leHQoKX0pKTtlLm9ic2VydmUodC5uYXRpdmVFbGVtZW50KSx0aGlzLm5nVW5zdWJzY3JpYmUkLnN1YnNjcmliZSgoKCk9PntlLnVub2JzZXJ2ZSh0Lm5hdGl2ZUVsZW1lbnQpfSkpfW5nT25Jbml0KCl7dGhpcy5vblJlc2l6ZSQucGlwZShUZSgxKSxnZSh0aGlzLnJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zKSxJZSh0aGlzLm5nVW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMub25SZXNpemUuZW1pdCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlJC5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlJC5jb21wbGV0ZSgpfX1vSi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8b0opKFNtKGhnKSl9LG9KLsm1ZGlyPWxvKHt0eXBlOm9KLHNlbGVjdG9yczpbWyIiLCJkZXRlY3RSZXNpemUiLCIiXV0saW5wdXRzOntyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NczoicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMifSxvdXRwdXRzOntvblJlc2l6ZToib25SZXNpemUifX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgob0osW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW2RldGVjdFJlc2l6ZV0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9XX0pLHtyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5Nczpbe3R5cGU6eHl9XSxvblJlc2l6ZTpbe3R5cGU6T3l9XX0pO2NvbnN0IGlKPVsiY29kZVZpZXdlckNvbnRhaW5lciJdO2NsYXNzIGFKe2NvbnN0cnVjdG9yKCl7dGhpcy5saW5lcz1udWxsLHRoaXMuZm9jdXNlZExpbmVubz1udWxsLHRoaXMubW9uYWNvPW51bGwsdGhpcy5lZGl0b3I9bnVsbCx0aGlzLmRlY29yYXRpb25zPVtdLHRoaXMuUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TPTUwfW9uUmVzaXplKCl7dGhpcy5lZGl0b3ImJnRoaXMuZWRpdG9yLmxheW91dCgpfW5nT25DaGFuZ2VzKHQpe3ZhciBlO2lmKG51bGw9PT10aGlzLm1vbmFjbylyZXR1cm47Y29uc3Qgbj10Lm1vbmFjbyYmbnVsbD09PXRoaXMuZWRpdG9yO251bGw9PT10aGlzLmVkaXRvciYmKHRoaXMuZWRpdG9yPXRoaXMubW9uYWNvLmVkaXRvci5jcmVhdGUodGhpcy5jb2RlVmlld2VyQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQse3ZhbHVlOihudWxsIT09KGU9dGhpcy5saW5lcykmJnZvaWQgMCE9PWU/ZTpbXSkuam9pbigiXG4iKSxsYW5ndWFnZToicHl0aG9uIixyZWFkT25seTohMCxmb250U2l6ZToxMCxtaW5pbWFwOntlbmFibGVkOiEwfSx0aGVtZTpuSih0aGlzLnVzZURhcmtNb2RlKX0pKSx0LmxpbmVzJiZ0aGlzLmxpbmVzJiZ0aGlzLmVkaXRvci5zZXRWYWx1ZSh0aGlzLmxpbmVzLmpvaW4oIlxuIikpO2NvbnN0IG89bnx8dC5mb2N1c2VkTGluZW5vP3RoaXMuZm9jdXNlZExpbmVubzpudWxsO2lmKG8mJnRoaXMubGluZXMpe3RoaXMuZWRpdG9yLnJldmVhbExpbmVJbkNlbnRlcihvLHRoaXMubW9uYWNvLmVkaXRvci5TY3JvbGxUeXBlLlNtb290aCk7Y29uc3QgdD10aGlzLmxpbmVzW28tMV0ubGVuZ3RoO3RoaXMuZGVjb3JhdGlvbnM9dGhpcy5lZGl0b3IuZGVsdGFEZWNvcmF0aW9ucyh0aGlzLmRlY29yYXRpb25zLFt7cmFuZ2U6bmV3IHRoaXMubW9uYWNvLlJhbmdlKG8sMSxvLDEpLG9wdGlvbnM6e2lzV2hvbGVMaW5lOiEwLGxpbmVzRGVjb3JhdGlvbnNDbGFzc05hbWU6ImhpZ2hsaWdodC1ndXR0ZXIifX0se3JhbmdlOm5ldyB0aGlzLm1vbmFjby5SYW5nZShvLDEsbyx0KzEpLG9wdGlvbnM6e2lubGluZUNsYXNzTmFtZToiaGlnaGxpZ2h0LWxpbmUifX1dKX10LnVzZURhcmtNb2RlJiZ0aGlzLm1vbmFjby5lZGl0b3Iuc2V0VGhlbWUobkoodGhpcy51c2VEYXJrTW9kZSkpfX1hSi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8YUopfSxhSi7JtWNtcD10byh7dHlwZTphSixzZWxlY3RvcnM6W1sic291cmNlLWNvZGUtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiZRaChpSiw3LGhnKSwyJmUpe2xldCB0O0poKHQ9dGIoKSkmJihuLmNvZGVWaWV3ZXJDb250YWluZXI9dC5maXJzdCl9fSxpbnB1dHM6e2xpbmVzOiJsaW5lcyIsZm9jdXNlZExpbmVubzoiZm9jdXNlZExpbmVubyIsbW9uYWNvOiJtb25hY28iLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSJ9LGZlYXR1cmVzOltCb10sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbImRldGVjdFJlc2l6ZSIsIiIsMSwiY29kZS12aWV3ZXItY29udGFpbmVyIiwzLCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsIm9uUmVzaXplIl0sWyJjb2RlVmlld2VyQ29udGFpbmVyIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJkaXYiLDAsMSksVm0oIm9uUmVzaXplIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUmVzaXplKCl9KSksQW0oKSksMiZlJiZEbSgicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLG4uUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TKX0sZGlyZWN0aXZlczpbb0pdLHN0eWxlczpbIi5jb2RlLXZpZXdlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgICAuaGlnaGxpZ2h0LWd1dHRlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAxMTEsIDAsIDAuNyk7XG4gIHdpZHRoOiA1cHggIWltcG9ydGFudDtcbn1cblxuW19uZ2hvc3QtJUNPTVAlXSAgICAgLmhpZ2hsaWdodC1saW5lIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDExMSwgMCwgMC4zKTtcbn0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoYUosW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3Rvcjoic291cmNlLWNvZGUtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9zb3VyY2VfY29kZV9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9zb3VyY2VfY29kZV9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sbnVsbCx7bGluZXM6W3t0eXBlOnh5fV0sZm9jdXNlZExpbmVubzpbe3R5cGU6eHl9XSxtb25hY286W3t0eXBlOnh5fV0sdXNlRGFya01vZGU6W3t0eXBlOnh5fV0sY29kZVZpZXdlckNvbnRhaW5lcjpbe3R5cGU6WmEsYXJnczpbImNvZGVWaWV3ZXJDb250YWluZXIiLHtzdGF0aWM6ITAscmVhZDpoZ31dfV19KTtjbGFzcyBySntjb25zdHJ1Y3Rvcigpe3RoaXMubGluZXM9bnVsbCx0aGlzLmZvY3VzZWRMaW5lbm89bnVsbCx0aGlzLnVzZURhcmtNb2RlPSExLHRoaXMubW9uYWNvJD1udWxsfW5nT25Jbml0KCl7dGhpcy5tb25hY28kPUN0KGVKKCkpLnBpcGUoSXQoKCgpPT53aW5kb3cubW9uYWNvKSkpfX1mdW5jdGlvbiBzSih0LGUpe2lmKDEmdCYmKFJtKDAsImRpdiIsNiksa3UoMSksQW0oKSksMiZ0KXtjb25zdCB0PVltKCk7cmMoMSksRHUoIiAiLHQuZm9jdXNlZFNvdXJjZUxpbmVTcGVjLmZpbGVfcGF0aCwiICIpfX1mdW5jdGlvbiBsSih0LGUpezEmdCYmKFJtKDAsImRpdiIsNyksa3UoMSwiIE5vIGZpbGUgc2VsZWN0ZWQuIENsaWNrIGEgbGluZSBudW1iZXIgaW4gdGhlIFN0YWNrIFRyYWNlIHNlY3Rpb24gdG8gc2hvdyB0aGUgc291cmNlIGNvZGUuICIpLEFtKCkpfWZ1bmN0aW9uIGNKKHQsZSl7aWYoMSZ0JiZUbSgwLCJzb3VyY2UtY29kZSIsOCksMiZ0KXtjb25zdCB0PVltKCk7RG0oImxpbmVzIix0LmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudC5saW5lcykoImZvY3VzZWRMaW5lbm8iLHQuZm9jdXNlZFNvdXJjZUxpbmVTcGVjLmxpbmVubykoInVzZURhcmtNb2RlIix0LnVzZURhcmtNb2RlKX19ckouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHJKKX0sckouybVjbXA9dG8oe3R5cGU6ckosc2VsZWN0b3JzOltbInNvdXJjZS1jb2RlIl1dLGlucHV0czp7bGluZXM6ImxpbmVzIixmb2N1c2VkTGluZW5vOiJmb2N1c2VkTGluZW5vIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUifSxkZWNsczoyLHZhcnM6Nixjb25zdHM6W1szLCJsaW5lcyIsImZvY3VzZWRMaW5lbm8iLCJtb25hY28iLCJ1c2VEYXJrTW9kZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVG0oMCwic291cmNlLWNvZGUtY29tcG9uZW50IiwwKSxBaCgxLCJhc3luYyIpKSwyJmUmJkRtKCJsaW5lcyIsbi5saW5lcykoImZvY3VzZWRMaW5lbm8iLG4uZm9jdXNlZExpbmVubykoIm1vbmFjbyIsVGgoMSw0LG4ubW9uYWNvJCkpKCJ1c2VEYXJrTW9kZSIsbi51c2VEYXJrTW9kZSl9LGRpcmVjdGl2ZXM6W2FKXSxwaXBlczpbd01dLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgockosW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3Rvcjoic291cmNlLWNvZGUiLHRlbXBsYXRlOidcbiAgICA8c291cmNlLWNvZGUtY29tcG9uZW50XG4gICAgICBbbGluZXNdPSJsaW5lcyJcbiAgICAgIFtmb2N1c2VkTGluZW5vXT0iZm9jdXNlZExpbmVubyJcbiAgICAgIFttb25hY29dPSJtb25hY28kIHwgYXN5bmMiXG4gICAgICBbdXNlRGFya01vZGVdPSJ1c2VEYXJrTW9kZSJcbiAgICA+PC9zb3VyY2UtY29kZS1jb21wb25lbnQ+XG4gICd9XX1dLChmdW5jdGlvbigpe3JldHVybltdfSkse2xpbmVzOlt7dHlwZTp4eX1dLGZvY3VzZWRMaW5lbm86W3t0eXBlOnh5fV0sdXNlRGFya01vZGU6W3t0eXBlOnh5fV19KTtjbGFzcyBkSntjb25zdHJ1Y3Rvcigpe3RoaXMuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50PW51bGwsdGhpcy5mb2N1c2VkU291cmNlTGluZVNwZWM9bnVsbH19ZEouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGRKKX0sZEouybVjbXA9dG8oe3R5cGU6ZEosc2VsZWN0b3JzOltbInNvdXJjZS1maWxlcy1jb21wb25lbnQiXV0saW5wdXRzOntmb2N1c2VkU291cmNlRmlsZUNvbnRlbnQ6ImZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCIsZm9jdXNlZFNvdXJjZUxpbmVTcGVjOiJmb2N1c2VkU291cmNlTGluZVNwZWMiLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSJ9LGRlY2xzOjgsdmFyczozLGNvbnN0czpbWzEsInNvdXJjZS1maWxlcy1jb250YWluZXIiXSxbMSwiaGVhZGVyLXNlY3Rpb24iXSxbMSwidGl0bGUtdGFnIl0sWyJjbGFzcyIsImZpbGUtbGFiZWwiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9GaWxlU2VsZWN0ZWQiLCIiXSxbMywibGluZXMiLCJmb2N1c2VkTGluZW5vIiwidXNlRGFya01vZGUiLDQsIm5nSWYiXSxbMSwiZmlsZS1sYWJlbCJdLFsxLCJuby1maWxlLXNlbGVjdGVkIl0sWzMsImxpbmVzIiwiZm9jdXNlZExpbmVubyIsInVzZURhcmtNb2RlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihSbSgwLCJkaXYiLDApLFJtKDEsImRpdiIsMSksUm0oMiwiZGl2IiwyKSxrdSgzLCJTb3VyY2UgQ29kZSIpLEFtKCksUXAoNCxzSiwyLDEsImRpdiIsMyksUXAoNSxsSiwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDQsaWIpLEFtKCksUXAoNyxjSiwxLDMsInNvdXJjZS1jb2RlIiw1KSxBbSgpKSwyJmUpe2NvbnN0IHQ9JHAoNik7cmMoNCksRG0oIm5nSWYiLG51bGwhPT1uLmZvY3VzZWRTb3VyY2VMaW5lU3BlYykoIm5nSWZFbHNlIix0KSxyYygzKSxEbSgibmdJZiIsbnVsbCE9PW4uZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50JiZudWxsIT09bi5mb2N1c2VkU291cmNlTGluZVNwZWMmJm51bGwhPT1uLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudC5saW5lcyl9fSxkaXJlY3RpdmVzOltkTSxySl0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LmhlYWRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MjRweDtwYWRkaW5nLWJvdHRvbTo2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5oZWFkZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5oZWFkZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uZmlsZS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6bm9ybWFsO3doaXRlLXNwYWNlOm5vcm1hbDtvdmVyZmxvdy13cmFwOmFueXdoZXJlO292ZXJmbG93LXk6YXV0bztwYWRkaW5nOjAgMjBweH0ubm8tZmlsZS1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6IzY2NjtwYWRkaW5nOjAgMjBweDt3aGl0ZS1zcGFjZTpub3JtYWx9LnNvdXJjZS1maWxlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjEwMCV9LnRpdGxlLXRhZ1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6Ym9sZDtoZWlnaHQ6MTAwJTtwYWRkaW5nLWxlZnQ6NnB4O3ZlcnRpY2FsLWFsaWduOnRvcH1zb3VyY2UtY29kZVtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7d2lkdGg6MTAwJX0nXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoZEosW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3Rvcjoic291cmNlLWZpbGVzLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vc291cmNlX2ZpbGVzX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL3NvdXJjZV9maWxlc19jb21wb25lbnQuY3NzIl19XX1dLG51bGwse2ZvY3VzZWRTb3VyY2VGaWxlQ29udGVudDpbe3R5cGU6eHl9XSxmb2N1c2VkU291cmNlTGluZVNwZWM6W3t0eXBlOnh5fV0sdXNlRGFya01vZGU6W3t0eXBlOnh5fV19KTtjbGFzcyBwSntjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQkPXRoaXMuc3RvcmUuc2VsZWN0KHlYKSx0aGlzLmZvY3VzZWRTb3VyY2VMaW5lU3BlYyQ9dGhpcy5zdG9yZS5zZWxlY3QoX1gpLHRoaXMudXNlRGFya01vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KEpEKX19cEouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHBKKShTbShJdykpfSxwSi7JtWNtcD10byh7dHlwZTpwSixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItc291cmNlLWZpbGVzIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsImZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCIsImZvY3VzZWRTb3VyY2VMaW5lU3BlYyIsInVzZURhcmtNb2RlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihUbSgwLCJzb3VyY2UtZmlsZXMtY29tcG9uZW50IiwwKSxBaCgxLCJhc3luYyIpLEFoKDIsImFzeW5jIiksQWgoMywiYXN5bmMiKSksMiZlJiZEbSgiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50IixUaCgxLDMsbi5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQkKSkoImZvY3VzZWRTb3VyY2VMaW5lU3BlYyIsVGgoMiw1LG4uZm9jdXNlZFNvdXJjZUxpbmVTcGVjJCkpKCJ1c2VEYXJrTW9kZSIsVGgoMyw3LG4udXNlRGFya01vZGUkKSl9LGRpcmVjdGl2ZXM6W2RKXSxwaXBlczpbd01dLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgocEosW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoidGYtZGVidWdnZXItdjItc291cmNlLWZpbGVzIix0ZW1wbGF0ZTonXG4gICAgPHNvdXJjZS1maWxlcy1jb21wb25lbnRcbiAgICAgIFtmb2N1c2VkU291cmNlRmlsZUNvbnRlbnRdPSJmb2N1c2VkU291cmNlRmlsZUNvbnRlbnQkIHwgYXN5bmMiXG4gICAgICBbZm9jdXNlZFNvdXJjZUxpbmVTcGVjXT0iZm9jdXNlZFNvdXJjZUxpbmVTcGVjJCB8IGFzeW5jIlxuICAgICAgW3VzZURhcmtNb2RlXT0idXNlRGFya01vZGUkIHwgYXN5bmMiXG4gICAgPjwvc291cmNlLWZpbGVzLWNvbXBvbmVudD5cbiAgJ31dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fV19KSxudWxsKTtjb25zdCBtSj1bInN0YWNrRnJhbWVBcnJheSJdO2Z1bmN0aW9uIHVKKHQsZSl7aWYoMSZ0JiYoUm0oMCwic3BhbiIsMTMpLGt1KDEpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgzKTtyYygxKSxEdSgiICMiLHQuZXhlY3V0aW9uSW5kZXgsIjogIil9fWZ1bmN0aW9uIGZKKHQsZSl7aWYoMSZ0JiYoUm0oMCwic3BhbiIsMTQpLGt1KDEpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgzKTtyYygxKSxEdSgiICIsdC5vcFR5cGUsIiAiKX19ZnVuY3Rpb24gZ0oodCxlKXtpZigxJnQmJihSbSgwLCJkaXYiKSxrdSgxLCIgRWFnZXIgZXhlY3V0aW9uICIpLFFwKDIsdUosMiwxLCJzcGFuIiwxMSksUXAoMyxmSiwyLDEsInNwYW4iLDEyKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oMik7cmMoMiksRG0oIm5nSWYiLG51bGwhPT10Lm9wVHlwZSkscmMoMSksRG0oIm5nSWYiLG51bGwhPT10Lm9wVHlwZSl9fWZ1bmN0aW9uIGhKKHQsZSl7aWYoMSZ0JiYoUm0oMCwic3BhbiIsMTYpLGt1KDEpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgzKTtyYygxKSxEdSgnICInLHQub3BOYW1lLCciICcpfX1mdW5jdGlvbiBiSih0LGUpe2lmKDEmdCYmKFJtKDAsInNwYW4iLDE0KSxrdSgxKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oMyk7cmMoMSksRHUoIiAiLHQub3BUeXBlLCIgIil9fWZ1bmN0aW9uIHlKKHQsZSl7aWYoMSZ0JiYoUm0oMCwiZGl2Iiksa3UoMSwiIENyZWF0aW9uIG9mIGdyYXBoIG9wICIpLFFwKDIsaEosMiwxLCJzcGFuIiwxNSksUXAoMyxiSiwyLDEsInNwYW4iLDEyKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oMik7cmMoMiksRG0oIm5nSWYiLG51bGwhPT10Lm9wTmFtZSkscmMoMSksRG0oIm5nSWYiLG51bGwhPT10Lm9wVHlwZSl9fWZ1bmN0aW9uIF9KKHQsZSl7aWYoMSZ0JiYoUm0oMCwic3BhbiIsMTcpLGt1KDEpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgyKTtyYygxKSxEdSgiIChIb3N0IG5hbWU6ICIsdC5zdGFja0ZyYW1lc0ZvckRpc3BsYXlbMF0uaG9zdF9uYW1lLCIpICIpfX1mdW5jdGlvbiBDSih0LGUpe2lmKDEmdCYmKFJtKDAsImRpdiIsNyksUm0oMSwic3BhbiIpLFJtKDIsInNwYW4iLDgpLFFwKDMsZ0osNCwyLCJkaXYiLDkpLFFwKDQseUosNCwyLCJkaXYiLDkpLEFtKCksQW0oKSxSbSg1LCJkaXYiKSxRcCg2LF9KLDIsMSwic3BhbiIsMTApLEFtKCksQW0oKSksMiZ0KXtjb25zdCB0PVltKCk7cmMoMiksRG0oIm5nU3dpdGNoIix0LmNvZGVMb2NhdGlvblR5cGUpLHJjKDEpLERtKCJuZ1N3aXRjaENhc2UiLHQuQ29kZUxvY2F0aW9uVHlwZS5FWEVDVVRJT04pLHJjKDEpLERtKCJuZ1N3aXRjaENhc2UiLHQuQ29kZUxvY2F0aW9uVHlwZS5HUkFQSF9PUF9DUkVBVElPTikscmMoMiksRG0oIm5nSWYiLG51bGwhPT10LnN0YWNrRnJhbWVzRm9yRGlzcGxheSYmdC5zdGFja0ZyYW1lc0ZvckRpc3BsYXkubGVuZ3RoPjApfX1mdW5jdGlvbiBNSih0LGUpezEmdCYmKFJtKDAsImRpdiIsMTgpLGt1KDEsIiBDbGljayBhbiBlYWdlciBleGVjdXRpb24gb3IgZ3JhcGggb3AgdG8gc2hvdyBpdHMgb3JpZ2luYWwgc3RhY2sgdHJhY2UuICIpLEFtKCkpfWZ1bmN0aW9uIHZKKHQsZSl7MSZ0JiYoUm0oMCwiZGl2IiwyOCksa3UoMSwiIOKkkyAiKSxBbSgpKX1jb25zdCB4Sj1mdW5jdGlvbih0LGUpe3JldHVyblt0LGVdfTtmdW5jdGlvbiBPSih0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsImRpdiIsMjIpLFJtKDEsImRpdiIsMjMpLGt1KDIpLEFtKCksUm0oMywiZGl2IiwyNCksUXAoNCx2SiwyLDAsImRpdiIsMjUpLFJtKDUsImRpdiIsMjYpLFZtKCJjbGljayIsKGZ1bmN0aW9uIGUoKXtjb25zdCBuPWhpKHQpLiRpbXBsaWNpdDtyZXR1cm4gWW0oMikub25Tb3VyY2VMaW5lQ2xpY2tlZC5lbWl0KG4pfSkpLGt1KDYpLEFtKCksUm0oNywiZGl2IiwyNyksa3UoOCksQW0oKSxBbSgpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49WW0oMik7RG0oIm5nQ2xhc3MiLHZoKDYseEosdC5iZWxvbmdzVG9Gb2N1c2VkRmlsZT8iZm9jdXNlZC1maWxlIjoiIix0LmZvY3VzZWQ/ImZvY3VzZWQtc3RhY2stZnJhbWUiOiIiKSkscmMoMSksS20oInRpdGxlIix0LmZpbGVfcGF0aCkscmMoMSksRHUoIiAiLHQuY29uY2lzZV9maWxlX3BhdGgsIiAiKSxyYygyKSxEbSgibmdJZiIsbi5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSYmdC5mb2N1c2VkKSxyYygyKSxEdSgiIExpbmUgIix0LmxpbmVubywiICIpLHJjKDIpLER1KCIgIix0LmZ1bmN0aW9uX25hbWUsIiAiKX19ZnVuY3Rpb24gUEoodCxlKXtpZigxJnQmJihSbSgwLCJkaXYiLDE5LDIwKSxRcCgyLE9KLDksOSwiZGl2IiwyMSksQW0oKSksMiZ0KXtjb25zdCB0PVltKCk7cmMoMiksRG0oIm5nRm9yT2YiLHQuc3RhY2tGcmFtZXNGb3JEaXNwbGF5KX19ZnVuY3Rpb24gd0oodCxlKXt9Y2xhc3Mga0p7Y29uc3RydWN0b3IoKXt0aGlzLnN0YWNrRnJhbWVzRm9yRGlzcGxheT1udWxsLHRoaXMub25Tb3VyY2VMaW5lQ2xpY2tlZD1uZXcgTGgsdGhpcy5Db2RlTG9jYXRpb25UeXBlPWZafW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2lmKHZvaWQgMD09PXRoaXMuc3RhY2tGcmFtZUFycmF5KXJldHVybjtjb25zdCB0PXRoaXMuc3RhY2tGcmFtZUFycmF5Lm5hdGl2ZUVsZW1lbnQsZT10LnF1ZXJ5U2VsZWN0b3IoIi5mb2N1c2VkLXN0YWNrLWZyYW1lIik7aWYobnVsbCE9PWUpcmV0dXJuIHZvaWQgdGhpcy5zY3JvbGxUb0VsZW1lbnQodCxlKTtjb25zdCBuPXQucXVlcnlTZWxlY3RvcigiLnN0YWNrLWZyYW1lLWNvbnRhaW5lcjpsYXN0LWNoaWxkIik7bnVsbCE9PW4mJnRoaXMuc2Nyb2xsVG9FbGVtZW50KHQsbil9c2Nyb2xsVG9FbGVtZW50KHQsZSl7dC5zY3JvbGxUb3A9ZS5vZmZzZXRUb3B9fWtKLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxrSil9LGtKLsm1Y21wPXRvKHt0eXBlOmtKLHNlbGVjdG9yczpbWyJzdGFjay10cmFjZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJlFoKG1KLDUpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4uc3RhY2tGcmFtZUFycmF5PXQuZmlyc3QpfX0saW5wdXRzOntjb2RlTG9jYXRpb25UeXBlOiJjb2RlTG9jYXRpb25UeXBlIixvcFR5cGU6Im9wVHlwZSIsb3BOYW1lOiJvcE5hbWUiLGV4ZWN1dGlvbkluZGV4OiJleGVjdXRpb25JbmRleCIsc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGU6InN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlIixzdGFja0ZyYW1lc0ZvckRpc3BsYXk6InN0YWNrRnJhbWVzRm9yRGlzcGxheSJ9LG91dHB1dHM6e29uU291cmNlTGluZUNsaWNrZWQ6Im9uU291cmNlTGluZUNsaWNrZWQifSxkZWNsczoxMCx2YXJzOjQsY29uc3RzOltbMSwic3RhY2stdHJhY2UtY29udGFpbmVyIl0sWzEsInN0YWNrLXRyYWNlLWhlYWRlciJdLFsxLCJzdGFjay10cmFjZS10aXRsZSJdLFsiY2xhc3MiLCJzdGFjay10cmFjZS1hdXgtaW5mbyIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub1N0YWNrVHJhY2UiLCIiXSxbImNsYXNzIiwic3RhY2stZnJhbWUtYXJyYXkiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibG9hZGluZ1NlY3Rpb24iLCIiXSxbMSwic3RhY2stdHJhY2UtYXV4LWluZm8iXSxbMSwiY29kZS1sb2NhdGlvbi1vcmlnaW4iLDMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJzdGFjay10cmFjZS1ob3N0LW5hbWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiZWFnZXItZXhlY3V0aW9uLWluZGV4Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9wLXR5cGUiLDQsIm5nSWYiXSxbMSwiZWFnZXItZXhlY3V0aW9uLWluZGV4Il0sWzEsIm9wLXR5cGUiXSxbImNsYXNzIiwib3AtbmFtZSIsNCwibmdJZiJdLFsxLCJvcC1uYW1lIl0sWzEsInN0YWNrLXRyYWNlLWhvc3QtbmFtZSJdLFsxLCJzdGFjay10cmFjZS1hdXgtaW5mbyIsIm5vLXN0YWNrLXRyYWNlIl0sWzEsInN0YWNrLWZyYW1lLWFycmF5Il0sWyJzdGFja0ZyYW1lQXJyYXkiLCIiXSxbImNsYXNzIiwic3RhY2stZnJhbWUtY29udGFpbmVyIiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwic3RhY2stZnJhbWUtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsInN0YWNrLWZyYW1lLWZpbGUtcGF0aCIsMywidGl0bGUiXSxbMSwic3RhY2stZnJhbWUtbGluZW5vLWZ1bmN0aW9uIl0sWyJjbGFzcyIsInN0aWNrLXRvLWJvdHRvbW1vc3QtaW5kaWNhdG9yIiwidGl0bGUiLCJTdGlja2luZyB0byB0aGUgYm90dG9tbW9zdCBmcmFtZSBpbiB0aGUgY3VycmVudCBzb3VyY2UgZmlsZSB3aGVuIG5hdmlnYXRpbmcgZXhlY3V0aW9ucyBhbmQgZ3JhcGggb3BzLiBUbyByZW1vdmUgdGhpcyBzdGlja2luZywgY2xpY2sgYW55IG5vbi1ib3R0b21tb3N0IHN0YWNrIGZyYW1lLiIsNCwibmdJZiJdLFsxLCJzdGFjay1mcmFtZS1saW5lbm8iLDMsImNsaWNrIl0sWzEsInN0YWNrLWZyYW1lLWZ1bmN0aW9uIl0sWyJ0aXRsZSIsIlN0aWNraW5nIHRvIHRoZSBib3R0b21tb3N0IGZyYW1lIGluIHRoZSBjdXJyZW50IHNvdXJjZSBmaWxlIHdoZW4gbmF2aWdhdGluZyBleGVjdXRpb25zIGFuZCBncmFwaCBvcHMuIFRvIHJlbW92ZSB0aGlzIHN0aWNraW5nLCBjbGljayBhbnkgbm9uLWJvdHRvbW1vc3Qgc3RhY2sgZnJhbWUuIiwxLCJzdGljay10by1ib3R0b21tb3N0LWluZGljYXRvciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoUm0oMCwiZGl2IiwwKSxSbSgxLCJkaXYiLDEpLFJtKDIsInNwYW4iLDIpLGt1KDMsIiBTdGFjayBUcmFjZSAiKSxBbSgpLFFwKDQsQ0osNyw0LCJkaXYiLDMpLFFwKDUsTUosMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw0LGliKSxBbSgpLFFwKDcsUEosMywxLCJkaXYiLDUpLFFwKDgsd0osMCwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LGliKSxBbSgpKSwyJmUpe2NvbnN0IHQ9JHAoNiksZT0kcCg5KTtyYyg0KSxEbSgibmdJZiIsbnVsbCE9PW4uY29kZUxvY2F0aW9uVHlwZSkoIm5nSWZFbHNlIix0KSxyYygzKSxEbSgibmdJZiIsbnVsbCE9PW4uc3RhY2tGcmFtZXNGb3JEaXNwbGF5KSgibmdJZkVsc2UiLGUpfX0sZGlyZWN0aXZlczpbZE0sZk0sZ00sbE0sYU1dLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5mb2N1c2VkLWZpbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGR9LmZvY3VzZWQtc3RhY2stZnJhbWVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTExLDAsLjMpfS5uby1zdGFjay10cmFjZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6Z3JheX0ub3AtbmFtZVtfbmdjb250ZW50LSVDT01QJV17d29yZC13cmFwOmFueXdoZXJlfS5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlY2VmZjE7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMHB4O2hlaWdodDoxNHB4O2xpbmUtaGVpZ2h0OjE0cHg7cGFkZGluZzoxcHggM3B4O3dpZHRoOm1heC1jb250ZW50fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiM0NTVhNjR9LnN0YWNrLWZyYW1lLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy14OmhpZGRlbjtvdmVyZmxvdy15OmF1dG87d2lkdGg6Y2FsYygxMDAlIC0gOHB4KX0uc3RhY2stZnJhbWUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYTBhMGEwfS5zdGFjay1mcmFtZS1maWxlLXBhdGhbX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoxODBweDt3aWR0aDoxODBweH0uc3RhY2stZnJhbWUtbGluZW5vLWZ1bmN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOnJpZ2h0O3doaXRlLXNwYWNlOm5vd3JhcH0uc3RhY2stZnJhbWUtZnVuY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO21heC13aWR0aDoyMDBweDtwYWRkaW5nLWxlZnQ6MTBweDt0ZXh0LWFsaWduOmxlZnQ7d2hpdGUtc3BhY2U6bm9ybWFsO3dpZHRoOjIwMHB4O3dvcmQtd3JhcDphbnl3aGVyZX0uc3RhY2stZnJhbWUtbGluZW5vW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6ODBweDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt3aWR0aDo4MHB4fS5zdGFjay10cmFjZS1hdXgtaW5mb1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxNXB4O3BhZGRpbmctbGVmdDoyNHB4fS5zdGFjay10cmFjZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1mbG93OmNvbHVtbjtmb250LXNpemU6MTBweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtoZWlnaHQ6MTAwJTttYXJnaW4tbGVmdDo4cHg7bWF4LWhlaWdodDozNjBweDtvdmVyZmxvdy14OmhpZGRlbjtvdmVyZmxvdy15OmhpZGRlbjtwYWRkaW5nLWxlZnQ6OHB4O3dpZHRoOjEwMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnN0YWNrLXRyYWNlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGFjay10cmFjZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5zdGFjay10cmFjZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MCA1cHggM3B4IC0zcHggI2NjYztwYWRkaW5nLWJvdHRvbTozcHh9LnN0YWNrLXRyYWNlLWhvc3QtbmFtZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6Z3JheX0uc3RhY2stdHJhY2UtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGR9LnN0aWNrLXRvLWJvdHRvbW1vc3QtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXdlaWdodDpib2xkO2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmctcmlnaHQ6M3B4fSddfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChrSixbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJzdGFjay10cmFjZS1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL3N0YWNrX3RyYWNlX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL3N0YWNrX3RyYWNlX2NvbXBvbmVudC5jc3MiXX1dfV0sbnVsbCx7Y29kZUxvY2F0aW9uVHlwZTpbe3R5cGU6eHl9XSxvcFR5cGU6W3t0eXBlOnh5fV0sb3BOYW1lOlt7dHlwZTp4eX1dLGV4ZWN1dGlvbkluZGV4Olt7dHlwZTp4eX1dLHN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlOlt7dHlwZTp4eX1dLHN0YWNrRnJhbWVzRm9yRGlzcGxheTpbe3R5cGU6eHl9XSxvblNvdXJjZUxpbmVDbGlja2VkOlt7dHlwZTpPeX1dLHN0YWNrRnJhbWVBcnJheTpbe3R5cGU6WmEsYXJnczpbInN0YWNrRnJhbWVBcnJheSJdfV19KTtjbGFzcyBTSntjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5jb2RlTG9jYXRpb25UeXBlJD10aGlzLnN0b3JlLnBpcGUoRncoWncodVgsKHQ9Pm51bGw9PT10P251bGw6dC5jb2RlTG9jYXRpb25UeXBlKSkpKSx0aGlzLm9wVHlwZSQ9dGhpcy5zdG9yZS5waXBlKEZ3KFp3KHVYLCh0PT5udWxsPT09dD9udWxsOnQub3BUeXBlKSkpKSx0aGlzLm9wTmFtZSQ9dGhpcy5zdG9yZS5waXBlKEZ3KFp3KHVYLCh0PT5udWxsPT09dHx8dC5jb2RlTG9jYXRpb25UeXBlIT09ZlouR1JBUEhfT1BfQ1JFQVRJT04/bnVsbDp0Lm9wTmFtZSkpKSksdGhpcy5leGVjdXRpb25JbmRleCQ9dGhpcy5zdG9yZS5waXBlKEZ3KFp3KHVYLCh0PT5udWxsPT09dHx8dC5jb2RlTG9jYXRpb25UeXBlIT09ZlouRVhFQ1VUSU9OP251bGw6dC5leGVjdXRpb25JbmRleCkpKSksdGhpcy5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSQ9dGhpcy5zdG9yZS5waXBlKEZ3KENYKSksdGhpcy5zdGFja0ZyYW1lc0ZvckRpc3BsYXkkPXRoaXMuc3RvcmUucGlwZShGdyhadyhmWCxfWCwoKHQsZSk9PntpZihudWxsPT09dClyZXR1cm4gbnVsbDtjb25zdCBuPVtdO2Zvcihjb25zdCBvIG9mIHQpe2NvbnN0e2hvc3RfbmFtZTp0LGZpbGVfcGF0aDppLGxpbmVubzphLGZ1bmN0aW9uX25hbWU6cn09byxzPWkuc3BsaXQoIi8iKSxsPW51bGwhPT1lJiZ0PT09ZS5ob3N0X25hbWUmJmk9PT1lLmZpbGVfcGF0aDtuLnB1c2goe2hvc3RfbmFtZTp0LGZpbGVfcGF0aDppLGNvbmNpc2VfZmlsZV9wYXRoOnNbcy5sZW5ndGgtMV0sbGluZW5vOmEsZnVuY3Rpb25fbmFtZTpyLGJlbG9uZ3NUb0ZvY3VzZWRGaWxlOmwsZm9jdXNlZDpsJiZhPT09ZS5saW5lbm99KX1yZXR1cm4gbn0pKSkpfW9uU291cmNlTGluZUNsaWNrZWQodCl7Y29uc3R7aG9zdF9uYW1lOmUsZmlsZV9wYXRoOm4sbGluZW5vOm8sZnVuY3Rpb25fbmFtZTppfT10O3RoaXMuc3RvcmUuZGlzcGF0Y2goc1ooe3N0YWNrRnJhbWU6e2hvc3RfbmFtZTplLGZpbGVfcGF0aDpuLGxpbmVubzpvLGZ1bmN0aW9uX25hbWU6aX19KSl9fWZ1bmN0aW9uIERKKHQsZSl7MSZ0JiZUbSgwLCJ0Zi1kZWJ1Z2dlci12Mi1pbmFjdGl2ZSIpfWZ1bmN0aW9uIEVKKHQsZSl7MSZ0JiYoUm0oMCwiZGl2IiwzKSxUbSgxLCJ0Zi1kZWJ1Z2dlci12Mi1hbGVydHMiKSxSbSgyLCJkaXYiLDQpLFRtKDMsInRmLWRlYnVnZ2VyLXYyLXRpbWVsaW5lIiksVG0oNCwidGYtZGVidWdnZXItdjItZ3JhcGgiKSxBbSgpLFRtKDUsInRmLWRlYnVnZ2VyLXYyLWdyYXBoLWV4ZWN1dGlvbnMiKSxBbSgpLFJtKDYsImRpdiIsNSksVG0oNywidGYtZGVidWdnZXItdjItc291cmNlLWZpbGVzIiksVG0oOCwidGYtZGVidWdnZXItdjItc3RhY2stdHJhY2UiKSxBbSgpKX1TSi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8U0opKFNtKEl3KSl9LFNKLsm1Y21wPXRvKHt0eXBlOlNKLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZSJdXSxkZWNsczo3LHZhcnM6MTgsY29uc3RzOltbMywiY29kZUxvY2F0aW9uVHlwZSIsIm9wVHlwZSIsIm9wTmFtZSIsImV4ZWN1dGlvbkluZGV4Iiwic3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUiLCJzdGFja0ZyYW1lc0ZvckRpc3BsYXkiLCJvblNvdXJjZUxpbmVDbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJzdGFjay10cmFjZS1jb21wb25lbnQiLDApLFZtKCJvblNvdXJjZUxpbmVDbGlja2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblNvdXJjZUxpbmVDbGlja2VkKGUpfSkpLEFoKDEsImFzeW5jIiksQWgoMiwiYXN5bmMiKSxBaCgzLCJhc3luYyIpLEFoKDQsImFzeW5jIiksQWgoNSwiYXN5bmMiKSxBaCg2LCJhc3luYyIpLEFtKCkpLDImZSYmRG0oImNvZGVMb2NhdGlvblR5cGUiLFRoKDEsNixuLmNvZGVMb2NhdGlvblR5cGUkKSkoIm9wVHlwZSIsVGgoMiw4LG4ub3BUeXBlJCkpKCJvcE5hbWUiLFRoKDMsMTAsbi5vcE5hbWUkKSkoImV4ZWN1dGlvbkluZGV4IixUaCg0LDEyLG4uZXhlY3V0aW9uSW5kZXgkKSkoInN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlIixUaCg1LDE0LG4uc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUkKSkoInN0YWNrRnJhbWVzRm9yRGlzcGxheSIsVGgoNiwxNixuLnN0YWNrRnJhbWVzRm9yRGlzcGxheSQpKX0sZGlyZWN0aXZlczpba0pdLHBpcGVzOlt3TV0sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChTSixbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJ0Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZSIsdGVtcGxhdGU6J1xuICAgIDxzdGFjay10cmFjZS1jb21wb25lbnRcbiAgICAgIFtjb2RlTG9jYXRpb25UeXBlXT0iY29kZUxvY2F0aW9uVHlwZSQgfCBhc3luYyJcbiAgICAgIFtvcFR5cGVdPSJvcFR5cGUkIHwgYXN5bmMiXG4gICAgICBbb3BOYW1lXT0ib3BOYW1lJCB8IGFzeW5jIlxuICAgICAgW2V4ZWN1dGlvbkluZGV4XT0iZXhlY3V0aW9uSW5kZXgkIHwgYXN5bmMiXG4gICAgICBbc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGVdPSJcbiAgICAgICAgc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUkIHwgYXN5bmNcbiAgICAgICJcbiAgICAgIFtzdGFja0ZyYW1lc0ZvckRpc3BsYXldPSJzdGFja0ZyYW1lc0ZvckRpc3BsYXkkIHwgYXN5bmMiXG4gICAgICAob25Tb3VyY2VMaW5lQ2xpY2tlZCk9Im9uU291cmNlTGluZUNsaWNrZWQoJGV2ZW50KSJcbiAgICA+PC9zdGFjay10cmFjZS1jb21wb25lbnQ+XG4gICd9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd31dfSksbnVsbCk7Y2xhc3MgUkp7Y29uc3RydWN0b3IoKXt0aGlzLnJ1bnM9e30sdGhpcy5ydW5JZHM9W10sdGhpcy5hY3RpdmVSdW5JZD1udWxsfX1SSi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UkopfSxSSi7JtWNtcD10byh7dHlwZTpSSixzZWxlY3RvcnM6W1siZGVidWdnZXItY29tcG9uZW50Il1dLGlucHV0czp7cnVuczoicnVucyIscnVuSWRzOiJydW5JZHMiLGFjdGl2ZVJ1bklkOiJhY3RpdmVSdW5JZCJ9LGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImRlYnVnZ2VyLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImRhdGFBdmFpbGFibGUiLCIiXSxbMSwidG9wLXNlY3Rpb24iXSxbMSwidG9wLWNlbnRlci1zZWN0aW9uIl0sWzEsImJvdHRvbS1zZWN0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihSbSgwLCJkaXYiLDApLFFwKDEsREosMSwwLCJ0Zi1kZWJ1Z2dlci12Mi1pbmFjdGl2ZSIsMSksUXAoMixFSiw5LDAsIm5nLXRlbXBsYXRlIixudWxsLDIsaWIpLEFtKCkpLDImZSl7Y29uc3QgdD0kcCgzKTtyYygxKSxEbSgibmdJZiIsMD09PW4ucnVuSWRzLmxlbmd0aCkoIm5nSWZFbHNlIix0KX19LGRpcmVjdGl2ZXM6W2RNLEVxLFBYLHZLLFZLLEpLLHBKLFNKXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTtoZWlnaHQ6MzQlO3BhZGRpbmctdG9wOjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9LmRlYnVnZ2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0udG9wLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7aGVpZ2h0OjY2JTtwYWRkaW5nOjZweCAwfXRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMHB4O21pbi13aWR0aDoxNjBweDt3aWR0aDpjYWxjKDE1JSAtIDExcHgpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNTU1fXRmLWRlYnVnZ2VyLXYyLWdyYXBoLWV4ZWN1dGlvbnNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO21pbi13aWR0aDo1NDBweDt3aWR0aDo1NDBweH10Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3dpZHRoOjcwJX10Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7bWluLXdpZHRoOjU0MHB4O3dpZHRoOjU0MHB4fS50b3AtY2VudGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmF1dG87d2lkdGg6NTUlfXRmLWRlYnVnZ2VyLXYyLXRpbWVsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfXRmLWRlYnVnZ2VyLXYyLWdyYXBoW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgdGYtZGVidWdnZXItdjItZ3JhcGhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Zi1kZWJ1Z2dlci12Mi1ncmFwaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoUkosW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoiZGVidWdnZXItY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9kZWJ1Z2dlcl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9kZWJ1Z2dlcl9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sbnVsbCx7cnVuczpbe3R5cGU6eHl9XSxydW5JZHM6W3t0eXBlOnh5fV0sYWN0aXZlUnVuSWQ6W3t0eXBlOnh5fV19KTtjbGFzcyBBSntjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5ydW5zJD10aGlzLnN0b3JlLnBpcGUoRncoUFopKSx0aGlzLnJ1bnNJZHMkPXRoaXMuc3RvcmUucGlwZShGdyhadyhQWiwodD0+T2JqZWN0LmtleXModCkpKSkpLHRoaXMuYWN0aXZlUnVuSWQkPXRoaXMuc3RvcmUucGlwZShGdyhrWikpfW5nT25Jbml0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaChScSgpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goQXEoKSl9fUFKLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxBSikoU20oSXcpKX0sQUouybVjbXA9dG8oe3R5cGU6QUosc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJ1bnMiLCJydW5JZHMiLCJhY3RpdmVSdW5JZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVG0oMCwiZGVidWdnZXItY29tcG9uZW50IiwwKSxBaCgxLCJhc3luYyIpLEFoKDIsImFzeW5jIiksQWgoMywiYXN5bmMiKSksMiZlJiZEbSgicnVucyIsVGgoMSwzLG4ucnVucyQpKSgicnVuSWRzIixUaCgyLDUsbi5ydW5zSWRzJCkpKCJhY3RpdmVSdW5JZCIsVGgoMyw3LG4uYWN0aXZlUnVuSWQkKSl9LGRpcmVjdGl2ZXM6W1JKXSxwaXBlczpbd01dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChBSixbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJ0Zi1kZWJ1Z2dlci12MiIsdGVtcGxhdGU6J1xuICAgIDxkZWJ1Z2dlci1jb21wb25lbnRcbiAgICAgIFtydW5zXT0icnVucyQgfCBhc3luYyJcbiAgICAgIFtydW5JZHNdPSJydW5zSWRzJCB8IGFzeW5jIlxuICAgICAgW2FjdGl2ZVJ1bklkXT0iYWN0aXZlUnVuSWQkIHwgYXN5bmMiXG4gICAgPjwvZGVidWdnZXItY29tcG9uZW50PlxuICAnLHN0eWxlczpbIlxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuICAgICJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLG51bGwpO2NvbnN0IFRKPSJkZWJ1Z2dlci12MiI7ZnVuY3Rpb24gTkoodCxlLG4sbyxpKXtpZihuPD0wfHwhTnVtYmVyLmlzSW50ZWdlcihuKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFnZVNpemU6ICR7bn1gKTtpZihlPm8pdGhyb3cgbmV3IEVycm9yKGBlbmQgaW5kZXggKCR7ZX0pIGV4Y2VlZHMgdG90YWwgbnVtYmVyIG9mIGl0ZW1zICgke299KWApO2lmKGUtdD5uKXRocm93IG5ldyBFcnJvcigiYmVnaW4tZW5kIHNwYW4gZXhjZWVkcyBwYWdlIHNpemUsIHdoaWNoIGlzIG5vdCBhbGxvd2VkIik7Y29uc3QgYT1bXSxyPU1hdGguZmxvb3IodC9uKTsoIShyIGluIGkpfHxpW3JdPG4mJnIqbitpW3JdPG8pJiZhLnB1c2gocik7Y29uc3Qgcz1NYXRoLmZsb29yKChlLTEpL24pO3JldHVybiBzIT09ciYmKCEocyBpbiBpKXx8cypuK2lbc108ZSYmZTxvKSYmYS5wdXNoKHMpLGF9Y2xhc3Mgekp7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy5kYXRhU291cmNlPW4sdGhpcy5sb2FkRGF0YSQ9TWsoKCgpPT57Y29uc3QgdD10aGlzLmxvYWREZWJ1Z2dlclJ1bnMocmUodGhpcy5vbkRlYnVnZ2VyRGF0YVBvbGwoKSx0aGlzLm9uQ29yZVJlbG9hZCgpKSkucGlwZShFZSgpKSxlPXRoaXMubG9hZFNvdXJjZUZpbGVMaXN0KHQpLG49dGhpcy5jcmVhdGVOdW1FeGVjdXRpb25Mb2FkZXIodCksbz10aGlzLmNyZWF0ZU51bUFsZXJ0c0FuZEJyZWFrZG93bkxvYWRlcih0KSxpPXRoaXMub25BbGVydFR5cGVGb2N1c2VkKCksYT10aGlzLmZldGNoRXhlY3V0aW9uRGlnZXN0c0ZvckFsZXJ0VHlwZUZvY3VzKGkpLHI9dGhpcy5jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGV0ZWN0b3IobikucGlwZShFZSgpKSxzPXRoaXMuY3JlYXRlRXhlY3V0aW9uRGlnZXN0TG9hZGVyKHJlKHRoaXMub25FeGVjdXRpb25TY3JvbGwoKSx0aGlzLmNyZWF0ZUluaXRpYWxFeGVjdXRpb25EaWdlc3QociksYSkpLGw9dGhpcy5jcmVhdGVFeGVjdXRpb25EYXRhQW5kU3RhY2tGcmFtZXNMb2FkZXIocmUodGhpcy5vbkV4ZWN1dGlvbkRpZ2VzdEZvY3VzZWQoKSxyLnBpcGUoVmUodGhpcy5zdG9yZS5zZWxlY3Qoa1opLHRoaXMuc3RvcmUuc2VsZWN0KGNYKSksSXQoKChbLHQsZV0pPT4oe2FjdGl2ZVJ1bklkOnQsbG9hZGVkRXhlY3V0aW9uRGF0YTplLGZvY3VzSW5kZXg6MH0pKSkpKSk7cmV0dXJuIHJlKG8scyxsLHRoaXMuY3JlYXRlTnVtR3JhcGhFeGVjdXRpb25Mb2FkZXIodCksZSx0aGlzLm9uU291cmNlRmlsZUZvY3VzZWQoKSx0aGlzLmxvYWRHcmFwaEV4ZWN1dGlvblBhZ2VzKHRoaXMub25HcmFwaEV4ZWN1dGlvblNjcm9sbCgpKSx0aGlzLmxvYWRHcmFwaE9wU3RhY2tGcmFtZXModGhpcy5sb2FkR3JhcGhPcEluZm8oKSkpLnBpcGUoSXQoKCgpPT4oe30pKSkpfSkse2Rpc3BhdGNoOiExfSl9b25EZWJ1Z2dlckRhdGFQb2xsKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShEayhScSksemUoKHQ9PihmdW5jdGlvbiBlKHQsbixvKXtyZXR1cm4gdC5waXBlKChmdW5jdGlvbiBpKHQpe3JldHVybiBSKChmdW5jdGlvbihlLG4pe3ZhciBvLGksYT0hMSxyPSExLHM9ITEsbD1mdW5jdGlvbigpe3JldHVybiBzJiZyJiYobi5jb21wbGV0ZSgpLCEwKX0sYz1mdW5jdGlvbigpe3M9ITEsbz1lLnN1YnNjcmliZShuZXcgVChuLHZvaWQgMCwoZnVuY3Rpb24oKXtzPSEwLCFsKCkmJihpfHwoaT1uZXcgSSx0KGkpLnN1YnNjcmliZShuZXcgVChuLChmdW5jdGlvbigpe28/YygpOmE9ITB9KSwoZnVuY3Rpb24oKXtyPSEwLGwoKX0pKSkpLGkpLm5leHQoKX0pKSksYSYmKG8udW5zdWJzY3JpYmUoKSxvPW51bGwsYT0hMSxjKCkpfTtjKCl9KSl9KSgodD0+dC5waXBlKFZlKG4pLF9lKCgoWyx0XSk9PmFlKHQpKSkpKSksSWUobyksSXQoKCgpPT57fSkpKX0pKEV0KHQpLHRoaXMuc3RvcmUuc2VsZWN0KFNaKS5waXBlKEl0KCh0PT4oZnVuY3Rpb24gZSh0KXtyZXR1cm4gdD42ZTQ/NmU0OnQ+NGUzP3Q6MmUzfSkodCkpKSksdGhpcy5hY3Rpb25zJC5waXBlKERrKEFxKSkpKSksRmUoKCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKFRxKCkpKSksSXQoKCgpPT57fSkpKX1vbkNvcmVSZWxvYWQoKXtyZXR1cm4gcmUodGhpcy5hY3Rpb25zJC5waXBlKERrKHZFLHhFKSksdGhpcy5hY3Rpb25zJC5waXBlKERrKF9FKSkucGlwZShWZSh0aGlzLnN0b3JlLnNlbGVjdCh3WikpLGNlKCgoWyx0XSk9PnQuc3RhdGU9PT15RS5OT1RfTE9BREVEfHx0LnN0YXRlPT09eUUuRkFJTEVEJiZudWxsPT09dC5sYXN0TG9hZGVkVGltZUluTXMpKSkpLnBpcGUoVmUodGhpcy5zdG9yZS5zZWxlY3QoTVIpKSxjZSgoKFssdF0pPT50PT09VEopKSxGZSgoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goVHEoKSkpKSxJdCgoKCk9Pnt9KSkpfWxvYWREZWJ1Z2dlclJ1bnModCl7cmV0dXJuIHQucGlwZShWZSh0aGlzLnN0b3JlLnNlbGVjdCh3WikpLGNlKCgoWyx7c3RhdGU6dH1dKT0+dCE9PXlFLkxPQURJTkcpKSxGZSgoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goTnEoKSkpKSxadCgoKCk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFJ1bnMoKS5waXBlKEZlKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaCh6cSh7cnVuczp0fSkpfSkpLEl0KCgoKT0+e30pKSkpKSl9Y3JlYXRlTnVtRXhlY3V0aW9uTG9hZGVyKHQpe3JldHVybiB0LnBpcGUoVmUodGhpcy5zdG9yZS5zZWxlY3QoUFopLHRoaXMuc3RvcmUuc2VsZWN0KEhaKSksY2UoKChbLHQsZV0pPT5PYmplY3Qua2V5cyh0KS5sZW5ndGg+MCYmZS5zdGF0ZSE9PXlFLkxPQURJTkcpKSxGZSgoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goVnEoKSkpKSxadCgoKFssdF0pPT57Y29uc3QgZT1PYmplY3Qua2V5cyh0KVswXTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGlnZXN0cyhlLDAsMCkucGlwZShGZSgodD0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goanEoe251bUV4ZWN1dGlvbnM6dC5udW1fZGlnZXN0c30pKX0pKSxJdCgoKCk9Pnt9KSkpfSkpKX1jcmVhdGVOdW1HcmFwaEV4ZWN1dGlvbkxvYWRlcih0KXtyZXR1cm4gdC5waXBlKFZlKHRoaXMuc3RvcmUuc2VsZWN0KFBaKSx0aGlzLnN0b3JlLnNlbGVjdChXWikpLGNlKCgoWyx0LGVdKT0+T2JqZWN0LmtleXModCkubGVuZ3RoPjAmJmUuc3RhdGUhPT15RS5MT0FESU5HKSksRmUoKCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKEtxKCkpKSksWnQoKChbLHRdKT0+e2NvbnN0IGU9T2JqZWN0LmtleXModClbMF07cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoRXhlY3V0aW9uRGlnZXN0cyhlLDAsMCkucGlwZShGZSgodD0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goSnEoe251bUdyYXBoRXhlY3V0aW9uczp0Lm51bV9kaWdlc3RzfSkpfSkpLEl0KCgoKT0+e30pKSl9KSkpfWNyZWF0ZU51bUFsZXJ0c0FuZEJyZWFrZG93bkxvYWRlcih0KXtyZXR1cm4gdC5waXBlKFZlKHRoaXMuc3RvcmUuc2VsZWN0KFBaKSx0aGlzLnN0b3JlLnNlbGVjdChFWikpLGNlKCgoWyx0LGVdKT0+T2JqZWN0LmtleXModCkubGVuZ3RoPjAmJmUuc3RhdGUhPT15RS5MT0FESU5HKSksRmUoKCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKEhxKCkpKSksWnQoKChbLHRdKT0+e2NvbnN0IGU9T2JqZWN0LmtleXModClbMF07cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEFsZXJ0cyhlLDAsMCkucGlwZShGZSgodD0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goRnEoe251bUFsZXJ0czp0Lm51bV9hbGVydHMsYWxlcnRzQnJlYWtkb3duOnQuYWxlcnRzX2JyZWFrZG93bn0pKX0pKSxJdCgoKCk9Pnt9KSkpfSkpKX1jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGV0ZWN0b3IodCl7cmV0dXJuIHQucGlwZShWZSh0aGlzLnN0b3JlLnNlbGVjdChMWiksdGhpcy5zdG9yZS5zZWxlY3QoRlopKSxjZSgoKFssdCxlXSk9PnQ+MCYmMD09PU9iamVjdC5rZXlzKGUucGFnZUxvYWRlZFNpemVzKS5sZW5ndGgpKSxJdCgoKCk9Pnt9KSkpfWNyZWF0ZUluaXRpYWxFeGVjdXRpb25EaWdlc3QodCl7cmV0dXJuIHQucGlwZShWZSh0aGlzLnN0b3JlLnNlbGVjdChMWiksdGhpcy5zdG9yZS5zZWxlY3Qoa1opLHRoaXMuc3RvcmUuc2VsZWN0KFZaKSksY2UoKChbLCx0XSk9Pm51bGwhPT10KSksSXQoKChbLHQsZSxuXSk9Pih7YmVnaW46MCxlbmQ6TWF0aC5taW4odCxuKSxydW5JZDplfSkpKSl9b25FeGVjdXRpb25TY3JvbGwoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKERrKFdxLFlxLHFxKSxWZSh0aGlzLnN0b3JlLnNlbGVjdChrWiksdGhpcy5zdG9yZS5zZWxlY3QoQlopLHRoaXMuc3RvcmUuc2VsZWN0KExaKSx0aGlzLnN0b3JlLnNlbGVjdChqWiksdGhpcy5zdG9yZS5zZWxlY3QoVlopKSxjZSgoKFt0XSk9Pm51bGwhPT10KSksSXQoKChbLHQsZSxuLG8saV0pPT4oe3J1bklkOnQsYmVnaW46ZSxlbmQ6TWF0aC5taW4obixlK28pLHBhZ2VTaXplOml9KSkpLFZlKHRoaXMuc3RvcmUuc2VsZWN0KEZaKSksSXQoKChbdCxlXSk9Pih7cHJvcHM6dCxsb2FkZWQ6ZSxtaXNzaW5nUGFnZXM6TkoodC5iZWdpbix0LmVuZCx0LnBhZ2VTaXplLGUubnVtRXhlY3V0aW9ucyxlLnBhZ2VMb2FkZWRTaXplcyl9KSkpLGNlKCgoe21pc3NpbmdQYWdlczp0fSk9PnQubGVuZ3RoPjApKSxJdCgoKHtwcm9wczp0LGxvYWRlZDplLG1pc3NpbmdQYWdlczpufSk9Pntjb25zdHtydW5JZDpvLHBhZ2VTaXplOml9PXQ7cmV0dXJue2JlZ2luOm5bMF0qaSxlbmQ6TWF0aC5taW4oZS5udW1FeGVjdXRpb25zLChuW24ubGVuZ3RoLTFdKzEpKmkpLHJ1bklkOm99fSkpKX1jcmVhdGVFeGVjdXRpb25EaWdlc3RMb2FkZXIodCl7cmV0dXJuIHQucGlwZShWZSh0aGlzLnN0b3JlLnNlbGVjdChGWikpLGNlKCgoW3tiZWdpbjp0LGVuZDplfSxuXSk9PmU+dCYmIShmdW5jdGlvbiBvKHQsZSxuKXtpZihlPj1uKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYmVnaW4gdG8gYmUgbGVzcyB0aGFuIGVuZCwgYnV0IGdvdCBiZWdpbj0ke2V9LCBlbmQ9JHtufWApO3JldHVybi0xIT09dC5maW5kSW5kZXgoKHQ9PnQuYmVnaW4+PWUmJnQuZW5kPD1uKSl9KShuLmxvYWRpbmdSYW5nZXMsdCxlKSkpLEZlKCgoW3tiZWdpbjp0LGVuZDplfV0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChVcSh7YmVnaW46dCxlbmQ6ZX0pKX0pKSxadCgoKFt7cnVuSWQ6dCxiZWdpbjplLGVuZDpufV0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hFeGVjdXRpb25EaWdlc3RzKHQsZSxuKS5waXBlKEZlKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaChHcSh0KSl9KSksSXQoKCgpPT57fSkpKSkpKX1vbkV4ZWN1dGlvbkRpZ2VzdEZvY3VzZWQoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKERrKFpxKSxWZSh0aGlzLnN0b3JlLnNlbGVjdChrWiksdGhpcy5zdG9yZS5zZWxlY3QoY1gpLHRoaXMuc3RvcmUuc2VsZWN0KEJaKSksSXQoKChbdCxlLG4sb10pPT4oe2FjdGl2ZVJ1bklkOmUsbG9hZGVkRXhlY3V0aW9uRGF0YTpuLGZvY3VzSW5kZXg6byt0LmRpc3BsYXlJbmRleH0pKSkpfWNyZWF0ZUV4ZWN1dGlvbkRhdGFBbmRTdGFja0ZyYW1lc0xvYWRlcih0KXtyZXR1cm4gdC5waXBlKGNlKCgoe2FjdGl2ZVJ1bklkOnQsbG9hZGVkRXhlY3V0aW9uRGF0YTplLGZvY3VzSW5kZXg6bn0pPT5udWxsIT09dCYmbnVsbCE9PW4mJnZvaWQgMD09PWVbbl0pKSxadCgoKHthY3RpdmVSdW5JZDp0LGZvY3VzSW5kZXg6ZX0pPT57Y29uc3Qgbj1lLG89bisxO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hFeGVjdXRpb25EYXRhKHQsbixvKS5waXBlKEZlKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaChYcSh0KSl9KSksSXQoKHQ9Pih7ZXhlY3V0aW9uRGF0YTp0LGJlZ2luOm4sZW5kOm99KSkpKX0pKSxJdCgoKHtleGVjdXRpb25EYXRhOnR9KT0+dC5leGVjdXRpb25zWzBdKSksVmUodGhpcy5zdG9yZS5zZWxlY3Qoa1opLHRoaXMuc3RvcmUuc2VsZWN0KHBYKSksY2UoKChbdCxlLG5dKT0+e2lmKG51bGw9PT1lKXJldHVybiExO2Zvcihjb25zdCBlIG9mIHQuc3RhY2tfZnJhbWVfaWRzKWlmKHZvaWQgMD09PW5bZV0pcmV0dXJuITA7cmV0dXJuITF9KSksWnQoKChbdCxlXSk9Pntjb25zdCBuPXQuc3RhY2tfZnJhbWVfaWRzO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hTdGFja0ZyYW1lcyhlLG4pLnBpcGUoRmUoKHQ9Pntjb25zdCBlPXt9O2ZvcihsZXQgbz0wO288bi5sZW5ndGg7KytvKWVbbltvXV09dC5zdGFja19mcmFtZXNbb107dGhpcy5zdG9yZS5kaXNwYXRjaChkWih7c3RhY2tGcmFtZXM6ZX0pKX0pKSxJdCgoKCk9Pnt9KSkpfSkpKX1vbkdyYXBoRXhlY3V0aW9uU2Nyb2xsKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShEayh0WiksZ2UoMTAwKSxWZSh0aGlzLnN0b3JlLnNlbGVjdChrWiksdGhpcy5zdG9yZS5zZWxlY3QoWVopLHRoaXMuc3RvcmUuc2VsZWN0KHFaKSksY2UoKChbLHQsZV0pPT5udWxsIT09dCYmZT4wKSksSXQoKChbLHQsZSxuXSk9Pih7cnVuSWQ6dCxudW1HcmFwaEV4ZWN1dGlvbnM6ZSxzY3JvbGxCZWdpbkluZGV4Om59KSkpLFZlKHRoaXMuc3RvcmUuc2VsZWN0KFhaKSx0aGlzLnN0b3JlLnNlbGVjdChaWiksdGhpcy5zdG9yZS5zZWxlY3QoS1opLHRoaXMuc3RvcmUuc2VsZWN0KEpaKSksSXQoKChbe3J1bklkOnQsbnVtR3JhcGhFeGVjdXRpb25zOmUsc2Nyb2xsQmVnaW5JbmRleDpufSxvLGksYSxyXSk9PntsZXQgcz1OSihuLE1hdGgubWluKG4raSxlKSxvLGUscik7cmV0dXJuIHM9cy5maWx0ZXIoKHQ9Pi0xPT09YS5pbmRleE9mKHQpKSkse3J1bklkOnQsbWlzc2luZ1BhZ2VzOnMscGFnZVNpemU6byxudW1HcmFwaEV4ZWN1dGlvbnM6ZX19KSkpfWxvYWRHcmFwaEV4ZWN1dGlvblBhZ2VzKHQpe3JldHVybiB0LnBpcGUoY2UoKCh7bWlzc2luZ1BhZ2VzOnR9KT0+dC5sZW5ndGg+MCkpLEZlKCgoe21pc3NpbmdQYWdlczp0fSk9Pnt0LmZvckVhY2goKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFFxKHtwYWdlSW5kZXg6dH0pKX0pKX0pKSxadCgoKHtydW5JZDp0LG1pc3NpbmdQYWdlczplLHBhZ2VTaXplOm4sbnVtR3JhcGhFeGVjdXRpb25zOm99KT0+e2NvbnN0IGk9ZVswXSpuLGE9TWF0aC5taW4oKGVbZS5sZW5ndGgtMV0rMSkqbixvKTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoR3JhcGhFeGVjdXRpb25EYXRhKHQsaSxhKS5waXBlKEZlKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaCgkcSh0KSl9KSksSXQoKCgpPT57fSkpKX0pKSl9bG9hZEdyYXBoT3BJbmZvKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShEayhuWixlWiksVmUodGhpcy5zdG9yZS5zZWxlY3Qoa1opLHRoaXMuc3RvcmUuc2VsZWN0KGRYKSksY2UoKChbdCxlLG5dKT0+e2NvbnN0e2dyYXBoX2lkOm8sb3BfbmFtZTppfT10O3JldHVybiEobnVsbD09PWV8fHZvaWQgMCE9PW5bb10mJm5bb10uaGFzKGkpJiYobltvXS5nZXQoaSk9PT15RS5MT0FESU5HfHxuW29dLmdldChpKT09PXlFLkxPQURFRCkpfSkpLEZlKCgoW3tncmFwaF9pZDp0LG9wX25hbWU6ZX1dKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChvWih7Z3JhcGhfaWQ6dCxvcF9uYW1lOmV9KSkpKSxadCgoKFt0LGVdKT0+e2NvbnN0e2dyYXBoX2lkOm4sb3BfbmFtZTpvfT10O3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hHcmFwaE9wSW5mbyhlLG4sbykucGlwZShGZSgodD0+dGhpcy5zdG9yZS5kaXNwYXRjaChpWih7Z3JhcGhPcEluZm9SZXNwb25zZTp0fSkpKSksSXQoKHQ9Pih7cnVuSWQ6ZSxzdGFja0ZyYW1lSWRzOnQuc3RhY2tfZnJhbWVfaWRzfSkpKSl9KSkpfWxvYWRHcmFwaE9wU3RhY2tGcmFtZXModCl7cmV0dXJuIHQucGlwZShWZSh0aGlzLnN0b3JlLnNlbGVjdChwWCkpLEl0KCgoW3tydW5JZDp0LHN0YWNrRnJhbWVJZHM6ZX0sbl0pPT4oe3J1bklkOnQsbWlzc2luZ1N0YWNrRnJhbWVJZHM6ZS5maWx0ZXIoKHQ9PnZvaWQgMD09PW5bdF0pKX0pKSksY2UoKCh7cnVuSWQ6dCxtaXNzaW5nU3RhY2tGcmFtZUlkczplfSk9Pm51bGwhPT10JiZlLmxlbmd0aD4wKSksWnQoKCh7cnVuSWQ6dCxtaXNzaW5nU3RhY2tGcmFtZUlkczplfSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFN0YWNrRnJhbWVzKHQsZSkucGlwZShGZSgodD0+e2NvbnN0IG49e307Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDsrK28pbltlW29dXT10LnN0YWNrX2ZyYW1lc1tvXTt0aGlzLnN0b3JlLmRpc3BhdGNoKGRaKHtzdGFja0ZyYW1lczpufSkpfSkpLEl0KCgoKT0+e30pKSkpKSl9b25BbGVydFR5cGVGb2N1c2VkKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShEayhCcSksVmUodGhpcy5zdG9yZS5zZWxlY3Qoa1opLHRoaXMuc3RvcmUuc2VsZWN0KEFaKSx0aGlzLnN0b3JlLnNlbGVjdChUWiksdGhpcy5zdG9yZS5zZWxlY3QoTlopLHRoaXMuc3RvcmUuc2VsZWN0KEVaKSksY2UoKChbLHQsZSxuLG8saV0pPT5udWxsIT09dCYmbnVsbCE9PWUmJm4+MCYmKG51bGw9PT1vfHxPYmplY3Qua2V5cyhvKS5sZW5ndGg8bikmJmkuc3RhdGUhPT15RS5MT0FESU5HKSksRmUoKCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKEhxKCkpKSksWnQoKChbLHQsZV0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hBbGVydHModCwwLC0xLGUpKSksRmUoKCh7bnVtX2FsZXJ0czp0LGFsZXJ0c19icmVha2Rvd246ZSxhbGVydF90eXBlOm4sYmVnaW46byxlbmQ6aSxhbGVydHM6YX0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChMcSh7bnVtQWxlcnRzOnQsYWxlcnRzQnJlYWtkb3duOmUsYWxlcnRUeXBlOm4sYmVnaW46byxlbmQ6aSxhbGVydHM6YX0pKX0pKSl9ZmV0Y2hFeGVjdXRpb25EaWdlc3RzRm9yQWxlcnRUeXBlRm9jdXModCl7cmV0dXJuIHQucGlwZShWZSh0aGlzLnN0b3JlLnNlbGVjdChWWiksdGhpcy5zdG9yZS5zZWxlY3QoalopLHRoaXMuc3RvcmUuc2VsZWN0KExaKSx0aGlzLnN0b3JlLnNlbGVjdChGWiksdGhpcy5zdG9yZS5zZWxlY3Qoa1opKSxJdCgoKFt0LGUsbixvLGksYV0pPT57Y29uc3Qgcj10LmFsZXJ0c1swXS5leGVjdXRpb25faW5kZXgscz1OSihNYXRoLm1heCgwLHItTWF0aC5mbG9vcihuLzIpKSxNYXRoLm1pbihyK01hdGguZmxvb3Iobi8yKSxvKSxlLG8saS5wYWdlTG9hZGVkU2l6ZXMpO3JldHVybiAwPT09cy5sZW5ndGg/e3J1bklkOmEsYmVnaW46MCxlbmQ6MH06e3J1bklkOmEsYmVnaW46c1swXSplLGVuZDpNYXRoLm1pbihpLm51bUV4ZWN1dGlvbnMsKHNbcy5sZW5ndGgtMV0rMSkqZSl9fSkpKX1sb2FkU291cmNlRmlsZUxpc3QodCl7cmV0dXJuIHQucGlwZShWZSh0aGlzLnN0b3JlLnNlbGVjdChrWiksdGhpcy5zdG9yZS5zZWxlY3QoaFgpKSxjZSgoKFssdCxlXSk9Pm51bGwhPT10JiZlLnN0YXRlIT09eUUuTE9BRElORykpLEZlKCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChhWigpKSkpLFp0KCgoWyx0XSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFNvdXJjZUZpbGVMaXN0KHQpLnBpcGUoRmUoKHQ9Pntjb25zdCBlPVtdO3QuZm9yRWFjaCgoKFt0LG5dKT0+e2UucHVzaCh7aG9zdF9uYW1lOnQsZmlsZV9wYXRoOm59KX0pKSx0aGlzLnN0b3JlLmRpc3BhdGNoKHJaKHtzb3VyY2VGaWxlczplfSkpfSkpLEl0KCgoKT0+e30pKSkpKSl9b25Tb3VyY2VGaWxlRm9jdXNlZCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoRGsoc1opLFZlKHRoaXMuc3RvcmUuc2VsZWN0KGtaKSx0aGlzLnN0b3JlLnNlbGVjdChiWCksdGhpcy5zdG9yZS5zZWxlY3QoeVgpKSxJdCgoKFt0LGUsbixvXSk9Pih7cnVuSWQ6ZSxzdGFja0ZyYW1lOnQuc3RhY2tGcmFtZSxmaWxlSW5kZXg6bixmaWxlQ29udGVudDpvfSkpKSxjZSgoKHtydW5JZDp0LGZpbGVDb250ZW50OmV9KT0+bnVsbCE9PXQmJm51bGwhPT1lJiZlLmxvYWRTdGF0ZT09PXlFLk5PVF9MT0FERUQpKSxGZSgoKHtzdGFja0ZyYW1lOnR9KT0+dGhpcy5zdG9yZS5kaXNwYXRjaChsWih7aG9zdF9uYW1lOnQuaG9zdF9uYW1lLGZpbGVfcGF0aDp0LmZpbGVfcGF0aH0pKSkpLFp0KCgoe2ZpbGVJbmRleDp0LHJ1bklkOmV9KT0+dGhpcy5kYXRhU291cmNlLmZldGNoU291cmNlRmlsZShlLHQpLnBpcGUoRmUoKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGNaKHQpKX0pKSxJdCgoKCk9Pnt9KSkpKSkpfX16Si7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ekopKHZyKFNrKSx2cihJdyksdnIoa3EpKX0sekouybVwcm92PU1uKHt0b2tlbjp6SixmYWN0b3J5OnpKLsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh6Sixbe3R5cGU6aW19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6U2t9LHt0eXBlOkl3fSx7dHlwZTprcX1dfSksbnVsbCk7Y2xhc3MgSUp7fUlKLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxJSil9LElKLsm1bW9kPWFvKHt0eXBlOklKfSksSUouybVpbmo9dm4oe2ltcG9ydHM6W1tXTV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChJSixbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbeFgsUFhdLGltcG9ydHM6W1dNXSxleHBvcnRzOltQWF19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhJSix7ZGVjbGFyYXRpb25zOlt4WCxQWF0saW1wb3J0czpbV01dLGV4cG9ydHM6W1BYXX0pO2NsYXNzIEhKe31ISi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SEopfSxISi7JtW1vZD1hbyh7dHlwZTpISn0pLEhKLsm1aW5qPXZuKHtpbXBvcnRzOltbV01dXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoSEosW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0JLLERLLFZLXSxpbXBvcnRzOltXTV0sZXhwb3J0czpbVktdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oSEose2RlY2xhcmF0aW9uczpbQkssREssVktdLGltcG9ydHM6W1dNXSxleHBvcnRzOltWS119KTtjbGFzcyBGSnt9RkouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEZKKX0sRkouybVtb2Q9YW8oe3R5cGU6Rkp9KSxGSi7JtWluaj12bih7aW1wb3J0czpbW1dNXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEZKLFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOlt0SyxpSyxvSyxlSyxuSyxhS10saW1wb3J0czpbV01dLGV4cG9ydHM6W2FLXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKEZKLHtkZWNsYXJhdGlvbnM6W3RLLGlLLG9LLGVLLG5LLGFLXSxpbXBvcnRzOltXTV0sZXhwb3J0czpbYUtdfSk7Y2xhc3MgTEp7fUxKLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxMSil9LExKLsm1bW9kPWFvKHt0eXBlOkxKfSksTEouybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxGSixfRl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChMSixbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbS0ssSktdLGltcG9ydHM6W1dNLEZKLF9GXSxleHBvcnRzOltKS119XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhMSix7ZGVjbGFyYXRpb25zOltLSyxKS10saW1wb3J0czpbV00sRkosX0ZdLGV4cG9ydHM6W0pLXX0pO2NsYXNzIEJKe31CSi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8QkopfSxCSi7JtW1vZD1hbyh7dHlwZTpCSn0pLEJKLsm1aW5qPXZuKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEJKLFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltEcSxFcV0sZXhwb3J0czpbRXFdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oQkose2RlY2xhcmF0aW9uczpbRHEsRXFdLGV4cG9ydHM6W0VxXX0pO2NsYXNzIFZKe31WSi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VkopfSxWSi7JtW1vZD1hbyh7dHlwZTpWSn0pLFZKLsm1aW5qPXZuKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFZKLFt7dHlwZTpBeSxhcmdzOlt7ZXhwb3J0czpbb0pdLGRlY2xhcmF0aW9uczpbb0pdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oVkose2RlY2xhcmF0aW9uczpbb0pdLGV4cG9ydHM6W29KXX0pO2NvbnN0IGpKPVsiY29kZVZpZXdlckNvbnRhaW5lciJdO2NsYXNzIFVKe2NvbnN0cnVjdG9yKCl7dGhpcy5maXJzdFRleHQ9bnVsbCx0aGlzLnNlY29uZFRleHQ9bnVsbCx0aGlzLnJlbmRlclNpZGVCeVNpZGU9ITAsdGhpcy5tb25hY289bnVsbCx0aGlzLmVkaXRvcj1udWxsLHRoaXMuUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TPTUwfW9uUmVzaXplKCl7dGhpcy5lZGl0b3ImJnRoaXMuZWRpdG9yLmxheW91dCgpfW5nT25DaGFuZ2VzKHQpe2lmKCF0aGlzLm1vbmFjbylyZXR1cm47Y29uc3QgZT0hdGhpcy5lZGl0b3I7ZSYmKHRoaXMuZWRpdG9yPXRoaXMubW9uYWNvLmVkaXRvci5jcmVhdGVEaWZmRWRpdG9yKHRoaXMuY29kZVZpZXdlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50LHtyZWFkT25seTohMCxmb250U2l6ZToxMCxtaW5pbWFwOntlbmFibGVkOiEwfSxyZW5kZXJTaWRlQnlTaWRlOnRoaXMucmVuZGVyU2lkZUJ5U2lkZSx0aGVtZTpuSih0aGlzLnVzZURhcmtNb2RlKX0pKSwoZXx8dC5maXJzdFRleHR8fHQuc2Vjb25kVGV4dCkmJnRoaXMuZWRpdG9yLnNldE1vZGVsKHtvcmlnaW5hbDp0aGlzLm1vbmFjby5lZGl0b3IuY3JlYXRlTW9kZWwodGhpcy5maXJzdFRleHR8fCIiKSxtb2RpZmllZDp0aGlzLm1vbmFjby5lZGl0b3IuY3JlYXRlTW9kZWwodGhpcy5zZWNvbmRUZXh0fHwiIil9KSx0LnJlbmRlclNpZGVCeVNpZGUmJnRoaXMuZWRpdG9yLnVwZGF0ZU9wdGlvbnMoe3JlbmRlclNpZGVCeVNpZGU6dGhpcy5yZW5kZXJTaWRlQnlTaWRlfSksdC51c2VEYXJrTW9kZSYmdGhpcy5tb25hY28uZWRpdG9yLnNldFRoZW1lKG5KKHRoaXMudXNlRGFya01vZGUpKX19VUouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFVKKX0sVUouybVjbXA9dG8oe3R5cGU6VUosc2VsZWN0b3JzOltbInNvdXJjZS1jb2RlLWRpZmYtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiZRaChqSiw3LGhnKSwyJmUpe2xldCB0O0poKHQ9dGIoKSkmJihuLmNvZGVWaWV3ZXJDb250YWluZXI9dC5maXJzdCl9fSxpbnB1dHM6e2ZpcnN0VGV4dDoiZmlyc3RUZXh0IixzZWNvbmRUZXh0OiJzZWNvbmRUZXh0IixyZW5kZXJTaWRlQnlTaWRlOiJyZW5kZXJTaWRlQnlTaWRlIixtb25hY286Im1vbmFjbyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZmVhdHVyZXM6W0JvXSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1siZGV0ZWN0UmVzaXplIiwiIiwxLCJjb2RlLXZpZXdlci1jb250YWluZXIiLDMsInJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zIiwib25SZXNpemUiXSxbImNvZGVWaWV3ZXJDb250YWluZXIiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsImRpdiIsMCwxKSxWbSgib25SZXNpemUiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZXNpemUoKX0pKSxBbSgpKSwyJmUmJkRtKCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsbi5SRVNJWkVfREVCT1VOQ0VfSU5URVJWQUxfTVMpfSxkaXJlY3RpdmVzOltvSl0sc3R5bGVzOlsiLmNvZGUtdmlld2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFVKLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InNvdXJjZS1jb2RlLWRpZmYtY29tcG9uZW50Iix0ZW1wbGF0ZTonXG4gICAgPGRpdlxuICAgICAgI2NvZGVWaWV3ZXJDb250YWluZXJcbiAgICAgIGNsYXNzPSJjb2RlLXZpZXdlci1jb250YWluZXIiXG4gICAgICBkZXRlY3RSZXNpemVcbiAgICAgIFtyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5Nc109IlJFU0laRV9ERUJPVU5DRV9JTlRFUlZBTF9NUyJcbiAgICAgIChvblJlc2l6ZSk9Im9uUmVzaXplKCkiXG4gICAgPjwvZGl2PlxuICAnLHN0eWxlczpbIlxuICAgICAgLmNvZGUtdmlld2VyLWNvbnRhaW5lciB7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cbiAgICAiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSxudWxsLHtmaXJzdFRleHQ6W3t0eXBlOnh5fV0sc2Vjb25kVGV4dDpbe3R5cGU6eHl9XSxyZW5kZXJTaWRlQnlTaWRlOlt7dHlwZTp4eX1dLG1vbmFjbzpbe3R5cGU6eHl9XSx1c2VEYXJrTW9kZTpbe3R5cGU6eHl9XSxjb2RlVmlld2VyQ29udGFpbmVyOlt7dHlwZTpaYSxhcmdzOlsiY29kZVZpZXdlckNvbnRhaW5lciIse3N0YXRpYzohMCxyZWFkOmhnfV19XX0pO2NsYXNzIEdKe2NvbnN0cnVjdG9yKCl7dGhpcy5maXJzdFRleHQ9bnVsbCx0aGlzLnNlY29uZFRleHQ9bnVsbCx0aGlzLnJlbmRlclNpZGVCeVNpZGU9ITAsdGhpcy51c2VEYXJrTW9kZT0hMSx0aGlzLm1vbmFjbyQ9bnVsbH1uZ09uSW5pdCgpe3RoaXMubW9uYWNvJD1DdChlSigpKS5waXBlKEl0KCgoKT0+d2luZG93Lm1vbmFjbykpKX19R0ouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEdKKX0sR0ouybVjbXA9dG8oe3R5cGU6R0osc2VsZWN0b3JzOltbInNvdXJjZS1jb2RlLWRpZmYiXV0saW5wdXRzOntmaXJzdFRleHQ6ImZpcnN0VGV4dCIsc2Vjb25kVGV4dDoic2Vjb25kVGV4dCIscmVuZGVyU2lkZUJ5U2lkZToicmVuZGVyU2lkZUJ5U2lkZSIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZGVjbHM6Mix2YXJzOjcsY29uc3RzOltbMywiZmlyc3RUZXh0Iiwic2Vjb25kVGV4dCIsInJlbmRlclNpZGVCeVNpZGUiLCJtb25hY28iLCJ1c2VEYXJrTW9kZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVG0oMCwic291cmNlLWNvZGUtZGlmZi1jb21wb25lbnQiLDApLEFoKDEsImFzeW5jIikpLDImZSYmRG0oImZpcnN0VGV4dCIsbi5maXJzdFRleHQpKCJzZWNvbmRUZXh0IixuLnNlY29uZFRleHQpKCJyZW5kZXJTaWRlQnlTaWRlIixuLnJlbmRlclNpZGVCeVNpZGUpKCJtb25hY28iLFRoKDEsNSxuLm1vbmFjbyQpKSgidXNlRGFya01vZGUiLG4udXNlRGFya01vZGUpfSxkaXJlY3RpdmVzOltVSl0scGlwZXM6W3dNXSxzdHlsZXM6WyJzb3VyY2UtY29kZS1kaWZmLWNvbXBvbmVudFtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChHSixbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJzb3VyY2UtY29kZS1kaWZmIix0ZW1wbGF0ZTonXG4gICAgPHNvdXJjZS1jb2RlLWRpZmYtY29tcG9uZW50XG4gICAgICBbZmlyc3RUZXh0XT0iZmlyc3RUZXh0IlxuICAgICAgW3NlY29uZFRleHRdPSJzZWNvbmRUZXh0IlxuICAgICAgW3JlbmRlclNpZGVCeVNpZGVdPSJyZW5kZXJTaWRlQnlTaWRlIlxuICAgICAgW21vbmFjb109Im1vbmFjbyQgfCBhc3luYyJcbiAgICAgIFt1c2VEYXJrTW9kZV09InVzZURhcmtNb2RlIlxuICAgID48L3NvdXJjZS1jb2RlLWRpZmYtY29tcG9uZW50PlxuICAnLHN0eWxlczpbIlxuICAgICAgc291cmNlLWNvZGUtZGlmZi1jb21wb25lbnQge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuICAgICJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwse2ZpcnN0VGV4dDpbe3R5cGU6eHl9XSxzZWNvbmRUZXh0Olt7dHlwZTp4eX1dLHJlbmRlclNpZGVCeVNpZGU6W3t0eXBlOnh5fV0sdXNlRGFya01vZGU6W3t0eXBlOnh5fV19KTtjbGFzcyBXSnt9V0ouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFdKKX0sV0ouybVtb2Q9YW8oe3R5cGU6V0p9KSxXSi7JtWluaj12bih7aW1wb3J0czpbW1dNLFZKXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFdKLFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOlthSixySixVSixHSl0saW1wb3J0czpbV00sVkpdLGV4cG9ydHM6W3JKLEdKXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKFdKLHtkZWNsYXJhdGlvbnM6W2FKLHJKLFVKLEdKXSxpbXBvcnRzOltXTSxWSl0sZXhwb3J0czpbckosR0pdfSk7Y2xhc3MgWUp7fVlKLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxZSil9LFlKLsm1bW9kPWFvKHt0eXBlOllKfSksWUouybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxXSl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChZSixbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbZEoscEpdLGltcG9ydHM6W1dNLFdKXSxleHBvcnRzOltwSl19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhZSix7ZGVjbGFyYXRpb25zOltkSixwSl0saW1wb3J0czpbV00sV0pdLGV4cG9ydHM6W3BKXX0pO2NsYXNzIHFKe31xSi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cUopfSxxSi7JtW1vZD1hbyh7dHlwZTpxSn0pLHFKLsm1aW5qPXZuKHtpbXBvcnRzOltbV00sV0pdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgocUosW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2tKLFNKXSxpbXBvcnRzOltXTSxXSl0sZXhwb3J0czpbU0pdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8ocUose2RlY2xhcmF0aW9uczpba0osU0pdLGltcG9ydHM6W1dNLFdKXSxleHBvcnRzOltTSl19KTtjbGFzcyBaSnt9WkouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFpKKX0sWkouybVtb2Q9YW8oe3R5cGU6Wkp9KSxaSi7JtWluaj12bih7aW1wb3J0czpbW1dNLEZKXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFpKLFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltwSyx1S10saW1wb3J0czpbV00sRkpdLGV4cG9ydHM6W3VLXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKFpKLHtkZWNsYXJhdGlvbnM6W3BLLHVLXSxpbXBvcnRzOltXTSxGSl0sZXhwb3J0czpbdUtdfSk7Y2xhc3MgWEp7fVhKLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxYSil9LFhKLsm1bW9kPWFvKHt0eXBlOlhKfSksWEouybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxaSixKSCx6WF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChYSixbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbQ0ssdktdLGltcG9ydHM6W1dNLFpKLEpILHpYXSxleHBvcnRzOlt2S119XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhYSix7ZGVjbGFyYXRpb25zOltDSyx2S10saW1wb3J0czpbV00sWkosSkgselhdLGV4cG9ydHM6W3ZLXX0pO2NsYXNzIEtKe31mdW5jdGlvbiBKSih0LGUpe2NvbnN0IG49e307Zm9yKGNvbnN0IG8gb2YgT2JqZWN0LmtleXModCkpbltvXT1lKHRbb10sbyk7cmV0dXJuIG59ZnVuY3Rpb24gUUoodCxlLG4pe2NvbnN0e3BsdWdpbjpvLHRhZzppLHJ1bklkOmEsc2FtcGxlOnJ9PWVbdF0scz1uVChuLG8saSxyKTtpZihzKXtpZihudWxsIT09YSYmcy5ydW5Ub1Nlcmllcy5oYXNPd25Qcm9wZXJ0eShhKSl7Y29uc3QgdD1zLnJ1blRvU2VyaWVzW2FdLmxlbmd0aDtyZXR1cm4gdD4wP3QtMTpudWxsfWNvbnN0IHQ9T2JqZWN0LnZhbHVlcyhzLnJ1blRvU2VyaWVzKS5tYXAoKHQ9PnQubGVuZ3RoKSk7aWYodC5sZW5ndGgpcmV0dXJuIE1hdGgubWF4KC4uLnQpLTF9cmV0dXJuIG51bGx9ZnVuY3Rpb24gJEoodCxlLG4sbyl7Y29uc3QgaT1PYmplY3QuYXNzaWduKHt9LGUpO2Zvcihjb25zdCBhIGluIHQpe2lmKCF0Lmhhc093blByb3BlcnR5KGEpKWNvbnRpbnVlO2NvbnN0IHI9UUooYSx0LG4pO2lmKG51bGw9PT1yKXtlLmhhc093blByb3BlcnR5KGEpJiYoaVthXT1udWxsKTtjb250aW51ZX1jb25zdCBzPWUuaGFzT3duUHJvcGVydHkoYSk/ZVthXTpudWxsLGw9UUooYSx0LG8pLGM9bnVsbCE9PXMmJnM9PT1sLGQ9bnVsbD09PXN8fGM7KG51bGwhPT1zJiZzPnJ8fGQpJiYoaVthXT1yKX1yZXR1cm4gaX1mdW5jdGlvbiB0USh0KXtjb25zdCBlPUpKKHQucnVuVG9Mb2FkU3RhdGUsKHQ9PnQ9PT15RS5MT0FESU5HP3lFLkxPQURJTkc6eUUuTk9UX0xPQURFRCkpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3J1blRvTG9hZFN0YXRlOmV9KX1mdW5jdGlvbiBlUSh0LGUsbixvKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoW3QsZSxufHwiIixvXSl9S0ouybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEtKKX0sS0ouybVtb2Q9YW8oe3R5cGU6S0p9KSxLSi7JtWluaj12bih7aW1wb3J0czpbW0lKLFdNLEVSLExKLEhKLEJKLFlKLHFKLFNxLFhKLGRrLmZvckZlYXR1cmUocFoseFopLFdrLmZvckZlYXR1cmUoW3pKXSksd3EuZm9yUGx1Z2luKFRKLEFKKV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChLSixbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbUkosQUpdLGltcG9ydHM6W0lKLFdNLEVSLExKLEhKLEJKLFlKLHFKLFNxLFhKLGRrLmZvckZlYXR1cmUocFoseFopLFdrLmZvckZlYXR1cmUoW3pKXSksd3EuZm9yUGx1Z2luKFRKLEFKKV0sZXhwb3J0czpbQUpdLGVudHJ5Q29tcG9uZW50czpbQUpdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oS0ose2RlY2xhcmF0aW9uczpbUkosQUpdLGltcG9ydHM6W0lKLFdNLEVSLExKLEhKLEJKLFlKLHFKLFNxLFhKLGNrLEdrLHdxXSxleHBvcnRzOltBSl19KTtjb25zdHtpbml0aWFsU3RhdGU6blEscmVkdWNlcnM6b1F9PUhOKHt0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7c3RhdGU6eUUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sdGFnTWV0YWRhdGE6e3NjYWxhcnM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdUb1J1bnM6e319LGhpc3RvZ3JhbXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdUb1J1bnM6e319LGltYWdlczp7dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1J1blNhbXBsZWRJbmZvOnt9fX0sY2FyZExpc3Q6W10sY2FyZFRvUGlubmVkQ29weTpuZXcgTWFwLHBpbm5lZENhcmRUb09yaWdpbmFsOm5ldyBNYXAsdW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHM6W10sY2FyZE1ldGFkYXRhTWFwOnt9LGNhcmRTdGVwSW5kZXg6e30sdGFnRmlsdGVyOiIiLHRhZ0dyb3VwRXhwYW5kZWQ6bmV3IE1hcCxzZWxlY3RlZFRpbWU6bnVsbCxzZWxlY3RUaW1lRW5hYmxlZDohMSx1c2VSYW5nZVNlbGVjdFRpbWU6ITEsZmlsdGVyZWRQbHVnaW5UeXBlczpuZXcgU2V0LHN0ZXBNaW5NYXg6e21pbjoxLzAsbWF4Oi0xLzB9fSx7aXNTZXR0aW5nc1BhbmVPcGVuOiEwLHByb21vdGVUaW1lU2VyaWVzOiEwLHRpbWVTZXJpZXNEYXRhOntzY2FsYXJzOnt9LGhpc3RvZ3JhbXM6e30saW1hZ2VzOnt9fSxzZXR0aW5nczpwVCxzZXR0aW5nT3ZlcnJpZGVzOnt9LHZpc2libGVDYXJkTWFwOm5ldyBNYXB9LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3Zpc2libGVDYXJkTWFwOm5ldyBNYXB9KSkpLGlRPW5RLGFRPXlrKG5RLGJrKHJTLCgodCx7cm91dGVLaW5kOmUscGFydGlhbFN0YXRlOm59KT0+e2lmKGUhPT1aay5FWFBFUklNRU5UJiZlIT09WmsuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybiB0O2NvbnN0IG89bmV3IFNldDtmb3IoY29uc3QgZSBvZiB0LnBpbm5lZENhcmRUb09yaWdpbmFsLmtleXMoKSl7Y29uc3R7cGx1Z2luOm4sdGFnOmkscnVuSWQ6YSxzYW1wbGU6cn09dC5jYXJkTWV0YWRhdGFNYXBbZV07by5hZGQoZVEobixpLGEscikpfWNvbnN0IGk9bixhPVtdO2Zvcihjb25zdCBlIG9mWy4uLnQudW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMsLi4uaS5tZXRyaWNzLnBpbm5lZENhcmRzXSl7Y29uc3QgdD1lUShlLnBsdWdpbixlLnRhZyxlLnJ1bklkLGUuc2FtcGxlKTtvLmhhcyh0KXx8KG8uYWRkKHQpLGEucHVzaChlKSl9Y29uc3Qgcj1zVChhLHQuY2FyZExpc3QsdC5jYXJkTWV0YWRhdGFNYXAsdC5jYXJkVG9QaW5uZWRDb3B5LHQucGlubmVkQ2FyZFRvT3JpZ2luYWwsdC5jYXJkU3RlcEluZGV4KSxzPWkubWV0cmljcy5zbW9vdGhpbmc7bGV0IGw9dC5zZXR0aW5nT3ZlcnJpZGVzO2lmKE51bWJlci5pc0Zpbml0ZShzKSYmbnVsbCE9PXMpe2NvbnN0IGU9TWF0aC5tYXgoMCxNYXRoLm1pbiguOTk5LE51bWJlcihzLnRvUHJlY2lzaW9uKDMpKSkpO2w9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ092ZXJyaWRlcykse3NjYWxhclNtb290aGluZzplfSl9Y29uc3QgYz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSxyKSx7c2V0dGluZ092ZXJyaWRlczpsfSk7cmV0dXJuIG51bGwhPT1pLm1ldHJpY3MudGFnRmlsdGVyJiYoYy50YWdGaWx0ZXI9aS5tZXRyaWNzLnRhZ0ZpbHRlciksY30pKSxiayhXUywoKHQse3BhcnRpYWxTZXR0aW5nczplfSk9Pnt2YXIgbjtjb25zdCBvPXt9O2lmKGUudG9vbHRpcFNvcnRTdHJpbmcpc3dpdGNoKGUudG9vbHRpcFNvcnRTdHJpbmcpe2Nhc2UgYkEuQVNDRU5ESU5HOm8udG9vbHRpcFNvcnQ9YkEuQVNDRU5ESU5HO2JyZWFrO2Nhc2UgYkEuREVTQ0VORElORzpvLnRvb2x0aXBTb3J0PWJBLkRFU0NFTkRJTkc7YnJlYWs7Y2FzZSBiQS5ERUZBVUxUOm8udG9vbHRpcFNvcnQ9YkEuREVGQVVMVDticmVhaztjYXNlIGJBLk5FQVJFU1Q6by50b29sdGlwU29ydD1iQS5ORUFSRVNUfSJib29sZWFuIj09dHlwZW9mIGUuaWdub3JlT3V0bGllcnMmJihvLmlnbm9yZU91dGxpZXJzPWUuaWdub3JlT3V0bGllcnMpLCJudW1iZXIiPT10eXBlb2YgZS5zY2FsYXJTbW9vdGhpbmcmJihvLnNjYWxhclNtb290aGluZz1lLnNjYWxhclNtb290aGluZyk7Y29uc3QgaT0iYm9vbGVhbiI9PXR5cGVvZiBlLnRpbWVTZXJpZXNQcm9tb3Rpb25EaXNtaXNzZWQ/IWUudGltZVNlcmllc1Byb21vdGlvbkRpc21pc3NlZDp0LnByb21vdGVUaW1lU2VyaWVzLGE9bnVsbCE9PShuPWUudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCkmJnZvaWQgMCE9PW4/bjp0LmlzU2V0dGluZ3NQYW5lT3BlbjtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtwcm9tb3RlVGltZVNlcmllczppLGlzU2V0dGluZ3NQYW5lT3BlbjphLHNldHRpbmdzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdzKSxvKX0pfSkpLGJrKHhFLHZFLCh0PT57Y29uc3QgZT10LnRhZ01ldGFkYXRhTG9hZFN0YXRlLnN0YXRlPT09eUUuTE9BRElORz95RS5MT0FESU5HOnlFLk5PVF9MT0FERUQsbj1KSih0LnRpbWVTZXJpZXNEYXRhLCgodCxlKT0+SkoodCwodD0+TUEoZSk/SkoodCwodD0+dFEodCkpKTp0USh0KSkpKSk7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7dGFnTWV0YWRhdGFMb2FkU3RhdGU6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQudGFnTWV0YWRhdGFMb2FkU3RhdGUpLHtzdGF0ZTplfSksdGltZVNlcmllc0RhdGE6bn0pfSkpLGJrKElFLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3RhZ01ldGFkYXRhTG9hZFN0YXRlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnRhZ01ldGFkYXRhTG9hZFN0YXRlKSx7c3RhdGU6eUUuTE9BRElOR30pfSkpKSxiayhGRSwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHt0YWdNZXRhZGF0YUxvYWRTdGF0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC50YWdNZXRhZGF0YUxvYWRTdGF0ZSkse3N0YXRlOnlFLkZBSUxFRH0pfSkpKSxiayhIRSwoKHQse3RhZ01ldGFkYXRhOmV9KT0+e2NvbnN0IG49e3NjYWxhcnM6c1EoZSxoQS5TQ0FMQVJTKSxoaXN0b2dyYW1zOnNRKGUsaEEuSElTVE9HUkFNUyksaW1hZ2VzOmVbaEEuSU1BR0VTXX0sbz1PYmplY3QuYXNzaWduKHt9LHQuY2FyZE1ldGFkYXRhTWFwKSxpPShmdW5jdGlvbiBhKHQpe2NvbnN0IGU9W107Zm9yKGxldCBuIG9mIE9iamVjdC5rZXlzKHQpKXtjb25zdCBvPW47bGV0IGk7aWYoTUEobykpe2lmKCF4QShvKSl0aHJvdyBuZXcgRXJyb3IoIk11bHRpLXJ1biwgc2FtcGxlZCBwbHVnaW4gc3VwcG9ydCBub3QgeWV0IGltcGxlbWVudGVkIik7e2NvbnN0IG49dFtvXS50YWdSdW5TYW1wbGVkSW5mbztmb3IoY29uc3QgdCBvZiBPYmplY3Qua2V5cyhuKSlmb3IoY29uc3QgaSBvZiBPYmplY3Qua2V5cyhuW3RdKSl7Y29uc3R7bWF4U2FtcGxlc1BlclN0ZXA6YX09blt0XVtpXTtmb3IobGV0IG49MDtuPGE7bisrKWUucHVzaCh7cGx1Z2luOm8sdGFnOnQscnVuSWQ6aSxzYW1wbGU6bixudW1TYW1wbGU6YX0pfX19ZWxzZSBpZih4QShvKSl7aT10W29dLnRhZ1RvUnVucztmb3IoY29uc3QgdCBvZiBPYmplY3Qua2V5cyhpKSlmb3IoY29uc3QgbiBvZiBpW3RdKWUucHVzaCh7cGx1Z2luOm8sdGFnOnQscnVuSWQ6bn0pfWVsc2V7aT10W29dLnRhZ1RvUnVucztmb3IoY29uc3QgdCBvZiBPYmplY3Qua2V5cyhpKSllLnB1c2goe3BsdWdpbjpvLHRhZzp0LHJ1bklkOm51bGx9KX19cmV0dXJuIGV9KShuKSxyPVtdO2Zvcihjb25zdCBlIG9mIGkpe2NvbnN0IG49aVQoZSk7dC5jYXJkTWV0YWRhdGFNYXAuaGFzT3duUHJvcGVydHkobil8fChvW25dPWUsci5wdXNoKG4pKX1jb25zdCBzPVsuLi50LmNhcmRMaXN0LC4uLnJdLGw9c1QodC51bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkcyxyLG8sdC5jYXJkVG9QaW5uZWRDb3B5LHQucGlubmVkQ2FyZFRvT3JpZ2luYWwsdC5jYXJkU3RlcEluZGV4KTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCksbCkse3RhZ01ldGFkYXRhTG9hZFN0YXRlOntzdGF0ZTp5RS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LHRhZ01ldGFkYXRhOm4sY2FyZExpc3Q6c30pfSkpLGJrKGVSLCgodCx7dGFnRmlsdGVyOmV9KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHt0YWdGaWx0ZXI6ZX0pKSksYmsoTEUsKCh0LHtzb3J0OmV9KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZXR0aW5nT3ZlcnJpZGVzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdPdmVycmlkZXMpLHt0b29sdGlwU29ydDplfSl9KSkpLGJrKEJFLCh0PT57dmFyIGU7Y29uc3Qgbj0hKG51bGwhPT0oZT10LnNldHRpbmdPdmVycmlkZXMuaWdub3JlT3V0bGllcnMpJiZ2b2lkIDAhPT1lP2U6dC5zZXR0aW5ncy5pZ25vcmVPdXRsaWVycyk7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2V0dGluZ092ZXJyaWRlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zZXR0aW5nT3ZlcnJpZGVzKSx7aWdub3JlT3V0bGllcnM6bn0pfSl9KSksYmsoVkUsKCh0LHt4QXhpc1R5cGU6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ092ZXJyaWRlcykse3hBeGlzVHlwZTplfSl9KSkpLGJrKGpFLCgodCx7c21vb3RoaW5nOmV9KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZXR0aW5nT3ZlcnJpZGVzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdPdmVycmlkZXMpLHtzY2FsYXJTbW9vdGhpbmc6ZX0pfSkpKSxiayhVRSwodD0+e3ZhciBlO2NvbnN0IG49IShudWxsIT09KGU9dC5zZXR0aW5nT3ZlcnJpZGVzLnNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1gpJiZ2b2lkIDAhPT1lP2U6dC5zZXR0aW5ncy5zY2FsYXJQYXJ0aXRpb25Ob25Nb25vdG9uaWNYKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZXR0aW5nT3ZlcnJpZGVzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdPdmVycmlkZXMpLHtzY2FsYXJQYXJ0aXRpb25Ob25Nb25vdG9uaWNYOm59KX0pfSkpLGJrKEdFLCgodCx7YnJpZ2h0bmVzc0luTWlsbGk6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ092ZXJyaWRlcykse2ltYWdlQnJpZ2h0bmVzc0luTWlsbGk6ZX0pfSkpKSxiayhXRSwoKHQse2NvbnRyYXN0SW5NaWxsaTplfSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2V0dGluZ092ZXJyaWRlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zZXR0aW5nT3ZlcnJpZGVzKSx7aW1hZ2VDb250cmFzdEluTWlsbGk6ZX0pfSkpKSxiayhZRSwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZXR0aW5nT3ZlcnJpZGVzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdPdmVycmlkZXMpLHtpbWFnZUJyaWdodG5lc3NJbk1pbGxpOnZvaWQgMH0pfSkpKSxiayhxRSwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZXR0aW5nT3ZlcnJpZGVzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdPdmVycmlkZXMpLHtpbWFnZUNvbnRyYXN0SW5NaWxsaTp2b2lkIDB9KX0pKSksYmsoWkUsKHQ9Pnt2YXIgZTtjb25zdCBuPSEobnVsbCE9PShlPXQuc2V0dGluZ092ZXJyaWRlcy5pbWFnZVNob3dBY3R1YWxTaXplKSYmdm9pZCAwIT09ZT9lOnQuc2V0dGluZ3MuaW1hZ2VTaG93QWN0dWFsU2l6ZSk7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2V0dGluZ092ZXJyaWRlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5zZXR0aW5nT3ZlcnJpZGVzKSx7aW1hZ2VTaG93QWN0dWFsU2l6ZTpufSl9KX0pKSxiayhYRSwoKHQse2hpc3RvZ3JhbU1vZGU6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NldHRpbmdPdmVycmlkZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ092ZXJyaWRlcykse2hpc3RvZ3JhbU1vZGU6ZX0pfSkpKSxiayhLRSwoKHQse3JlcXVlc3RzOmV9KT0+e2lmKCFlLmxlbmd0aClyZXR1cm4gdDtjb25zdCBuPU9iamVjdC5hc3NpZ24oe30sdC50aW1lU2VyaWVzRGF0YSk7Zm9yKGNvbnN0IG8gb2YgZSl7Y29uc3R7cGx1Z2luOmUsdGFnOmksc2FtcGxlOmF9PW87bltlXT1vVChuLGUsaSxhKTtjb25zdCByPW5UKG4sZSxpLGEpLHM9T0Eobyk/W28ucnVuSWRdOnJUKHQudGFnTWV0YWRhdGEsZSxpLGEpO3IucnVuVG9Mb2FkU3RhdGU9YVQoeUUuTE9BRElORyxzLHIucnVuVG9Mb2FkU3RhdGUpfXJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3RpbWVTZXJpZXNEYXRhOm59KX0pKSxiayhKRSwoKHQse3JlcXVlc3Q6ZX0pPT57Y29uc3Qgbj1PYmplY3QuYXNzaWduKHt9LHQudGltZVNlcmllc0RhdGEpLHtwbHVnaW46byx0YWc6aSxzYW1wbGU6YX09ZTtuW29dPW9UKG4sbyxpLGEpO2NvbnN0IHI9blQobixvLGksYSkscz1PQShlKT9bZS5ydW5JZF06clQodC50YWdNZXRhZGF0YSxvLGksYSk7cmV0dXJuIHIucnVuVG9Mb2FkU3RhdGU9YVQoeUUuRkFJTEVELHMsci5ydW5Ub0xvYWRTdGF0ZSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHt0aW1lU2VyaWVzRGF0YTpufSl9KSksYmsoUUUsKCh0LHtyZXNwb25zZTplfSk9Pntjb25zdCBuPU9iamVjdC5hc3NpZ24oe30sdC5zdGVwTWluTWF4KSxvPU9iamVjdC5hc3NpZ24oe30sdC50aW1lU2VyaWVzRGF0YSkse3BsdWdpbjppLHRhZzphLHJ1bklkOnIsc2FtcGxlOnN9PWU7b1tpXT1vVChvLGksYSxzKTtjb25zdCBsPW5UKG8saSxhLHMpO2lmKHdBKGUpKXtjb25zdCBlPXI/W3JdOnJUKHQudGFnTWV0YWRhdGEsaSxhLHMpO2wucnVuVG9Mb2FkU3RhdGU9YVQoeUUuRkFJTEVELGUsbC5ydW5Ub0xvYWRTdGF0ZSl9ZWxzZXtjb25zdCB0PWUucnVuVG9TZXJpZXM7bC5ydW5Ub1Nlcmllcz1PYmplY3QuYXNzaWduKHt9LGwucnVuVG9TZXJpZXMpLGwucnVuVG9Mb2FkU3RhdGU9T2JqZWN0LmFzc2lnbih7fSxsLnJ1blRvTG9hZFN0YXRlKTtmb3IoY29uc3QgZSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoZSkpe2wucnVuVG9TZXJpZXNbZV09dFtlXSxsLnJ1blRvTG9hZFN0YXRlW2VdPXlFLkxPQURFRDtmb3IoY29uc3QgbyBvZiB0W2VdKW4ubWluPU1hdGgubWluKG4ubWluLG8uc3RlcCksbi5tYXg9TWF0aC5tYXgobi5tYXgsby5zdGVwKX19cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7dGltZVNlcmllc0RhdGE6byxjYXJkU3RlcEluZGV4OiRKKHQuY2FyZE1ldGFkYXRhTWFwLHQuY2FyZFN0ZXBJbmRleCxvLHQudGltZVNlcmllc0RhdGEpLHN0ZXBNaW5NYXg6bn0pfSkpLGJrKHRSLCgodCx7Y2FyZElkOmUsc3RlcEluZGV4Om59KT0+e2NvbnN0IG89UUooZSx0LmNhcmRNZXRhZGF0YU1hcCx0LnRpbWVTZXJpZXNEYXRhKTtsZXQgaT1uO3JldHVybiBudWxsPT09bz9pPW51bGw6bj5vJiYoaT1vKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2NhcmRTdGVwSW5kZXg6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuY2FyZFN0ZXBJbmRleCkse1tlXTppfSl9KX0pKSxiayhuUiwoKHQse3RhZ0dyb3VwOmV9KT0+e2NvbnN0IG49bmV3IE1hcCh0LnRhZ0dyb3VwRXhwYW5kZWQpO3JldHVybiBuLnNldChlLCFuLmdldChlKSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHt0YWdHcm91cEV4cGFuZGVkOm59KX0pKSxiaygkRSwoKHQse2VudGVyZWRDYXJkczplLGV4aXRlZENhcmRzOm59KT0+e2lmKCFlLmxlbmd0aCYmIW4ubGVuZ3RoKXJldHVybiB0O2NvbnN0IG89bmV3IE1hcCh0LnZpc2libGVDYXJkTWFwKTtyZXR1cm4gZS5mb3JFYWNoKCgoe2VsZW1lbnRJZDp0LGNhcmRJZDplfSk9Pnt2YXIgbjtjb25zdCBpPW51bGwhPT0obj1vLmdldCh0KSkmJnZvaWQgMCE9PW4/bjpudWxsO2lmKG51bGwhPT1pJiZpIT09ZSl0aHJvdyBuZXcgRXJyb3IoIkEgRE9NIGVsZW1lbnQgY2Fubm90IGJlIHJldXNlZCBmb3IgbW9yZSB0aGFuIDEgdW5pcXVlIGNhcmQgbWV0YWRhdGEiKTtvLnNldCh0LGUpfSkpLG4uZm9yRWFjaCgoKHtlbGVtZW50SWQ6dH0pPT57by5kZWxldGUodCl9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHt2aXNpYmxlQ2FyZE1hcDpvfSl9KSksYmsob1IsKCh0LHtjYXJkSWQ6ZX0pPT57Y29uc3Qgbj10LnBpbm5lZENhcmRUb09yaWdpbmFsLmhhcyhlKSxvPSFuJiYhdC5jYXJkVG9QaW5uZWRDb3B5LmhhcyhlKTtpZihvJiYhY1QodCkpcmV0dXJuIHQ7bGV0IGk9bmV3IE1hcCh0LmNhcmRUb1Bpbm5lZENvcHkpLGE9bmV3IE1hcCh0LnBpbm5lZENhcmRUb09yaWdpbmFsKSxyPU9iamVjdC5hc3NpZ24oe30sdC5jYXJkTWV0YWRhdGFNYXApLHM9T2JqZWN0LmFzc2lnbih7fSx0LmNhcmRTdGVwSW5kZXgpO2lmKG4pe2NvbnN0IG49dC5waW5uZWRDYXJkVG9PcmlnaW5hbC5nZXQoZSk7aS5kZWxldGUobiksYS5kZWxldGUoZSksZGVsZXRlIHJbZV0sZGVsZXRlIHNbZV19ZWxzZSBpZihvKXtjb25zdCB0PWxUKGUsaSxhLHMscik7aT10LmNhcmRUb1Bpbm5lZENvcHksYT10LnBpbm5lZENhcmRUb09yaWdpbmFsLHI9dC5jYXJkTWV0YWRhdGFNYXAscz10LmNhcmRTdGVwSW5kZXh9ZWxzZXtjb25zdCBuPXQuY2FyZFRvUGlubmVkQ29weS5nZXQoZSk7aS5kZWxldGUoZSksYS5kZWxldGUobiksZGVsZXRlIHJbbl0sZGVsZXRlIHNbbl19cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y2FyZE1ldGFkYXRhTWFwOnIsY2FyZFN0ZXBJbmRleDpzLGNhcmRUb1Bpbm5lZENvcHk6aSxwaW5uZWRDYXJkVG9PcmlnaW5hbDphfSl9KSksYmsobFIsKHQ9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c2VsZWN0VGltZUVuYWJsZWQ6IXQuc2VsZWN0VGltZUVuYWJsZWR9KSkpLGJrKHJSLCgodCxlKT0+e3ZhciBuLG8saSxhO2NvbnN0IHI9ZS5zdGFydFN0ZXA7bGV0IHM9bnVsbCE9PShhPW51bGwhPT0obj1lLmVuZFN0ZXApJiZ2b2lkIDAhPT1uP246bnVsbD09PShpPW51bGw9PT0obz10LnNlbGVjdGVkVGltZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8uZW5kKXx8dm9pZCAwPT09aT92b2lkIDA6aS5zdGVwKSYmdm9pZCAwIT09YT9hOnQuc3RlcE1pbk1heC5tYXg7cmV0dXJuIHI+cyYmKHM9ciksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZWxlY3RUaW1lRW5hYmxlZDohMCxzZWxlY3RlZFRpbWU6e3N0YXJ0OntzdGVwOnJ9LGVuZDp7c3RlcDpzfX19KX0pKSxiayhjUiwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHt1c2VSYW5nZVNlbGVjdFRpbWU6IXQudXNlUmFuZ2VTZWxlY3RUaW1lfSkpKSxiayhzUiwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzZWxlY3RlZFRpbWU6bnVsbH0pKSksYmsoaVIsKCh0LHtwbHVnaW46ZX0pPT57bGV0IG49bmV3IFNldCh0LmZpbHRlcmVkUGx1Z2luVHlwZXMpO3JldHVybiBuLmhhcyhlKT9uLmRlbGV0ZShlKTpuLmFkZChlKSxPYmplY3QudmFsdWVzKGhBKS5ldmVyeSgodD0+bi5oYXModCkpKSYmKG49bmV3IFNldCksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtmaWx0ZXJlZFBsdWdpblR5cGVzOm59KX0pKSxiayhhUiwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtmaWx0ZXJlZFBsdWdpblR5cGVzOm5ldyBTZXR9KSkpLGJrKGRSLCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3Byb21vdGVUaW1lU2VyaWVzOiExfSkpKSxiayh6RSwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtpc1NldHRpbmdzUGFuZU9wZW46IXQuaXNTZXR0aW5nc1BhbmVPcGVufSkpKSxiayhORSwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtpc1NldHRpbmdzUGFuZU9wZW46ITF9KSkpKTtmdW5jdGlvbiByUSh0LGUpe3JldHVybiBCTihhUSxvUSkodCxlKX1mdW5jdGlvbiBzUSh0LGUpe3JldHVybnt0YWdEZXNjcmlwdGlvbnM6dFtlXS50YWdEZXNjcmlwdGlvbnMsdGFnVG9SdW5zOmxRKHRbZV0ucnVuVGFnSW5mbyl9fWZ1bmN0aW9uIGxRKHQpe2NvbnN0IGU9e307Zm9yKGNvbnN0IG4gaW4gdClmb3IoY29uc3QgbyBvZiB0W25dKWVbb109Wy4uLmVbb118fFtdLG5dO3JldHVybiBlfWNvbnN0IGNRPVp3KGdULHlULCgodCxlLG4pPT5lP09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bG9hZFN0YXRlOnQsaWQ6bn0pOm51bGwpKSxkUT1KUCgiW01ldHJpY3MgRWZmZWN0c10gSW5pdCIpO2NsYXNzIHBRe2NvbnN0cnVjdG9yKHQsZSxuKXt0aGlzLmFjdGlvbnMkPXQsdGhpcy5zdG9yZT1lLHRoaXMuZGF0YVNvdXJjZT1uLHRoaXMuZGFzaGJvYXJkU2hvd25XaXRob3V0RGF0YSQ9dGhpcy5hY3Rpb25zJC5waXBlKERrKGRRLF9FLFBFLGRTKSxWZSh0aGlzLnN0b3JlLnNlbGVjdChNUiksdGhpcy5zdG9yZS5zZWxlY3QodVQpKSxjZSgoKFssdCxlXSk9PnQ9PT1fQSYmZS5zdGF0ZT09PXlFLk5PVF9MT0FERUQpKSksdGhpcy5yZWxvYWRSZXF1ZXN0ZWRXaGlsZVNob3duJD10aGlzLmFjdGlvbnMkLnBpcGUoRGsoeEUsdkUpLFZlKHRoaXMuc3RvcmUuc2VsZWN0KE1SKSksY2UoKChbLHRdKT0+dD09PV9BKSkpLHRoaXMubG9hZFRhZ01ldGFkYXRhJD1yZSh0aGlzLmRhc2hib2FyZFNob3duV2l0aG91dERhdGEkLHRoaXMucmVsb2FkUmVxdWVzdGVkV2hpbGVTaG93biQpLnBpcGUoVmUodGhpcy5zdG9yZS5zZWxlY3QodVQpLHRoaXMuc3RvcmUuc2VsZWN0KFRTKSksY2UoKChbLHQsZV0pPT50LnN0YXRlIT09eUUuTE9BRElORyYmbnVsbCE9PWUpKSxGZSgoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKElFKCkpfSkpLHplKCgoWywsdF0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hUYWdNZXRhZGF0YSh0KS5waXBlKEZlKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaChIRSh7dGFnTWV0YWRhdGE6dH0pKX0pKSxwZSgoKCk9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKEZFKCkpLEV0KG51bGwpKSkpKSkpKSx0aGlzLnZpc2libGVDYXJkc1dpdGhvdXREYXRhQ2hhbmdlZCQ9dGhpcy5hY3Rpb25zJC5waXBlKERrKCRFKSx6ZSgoKCk9PnRoaXMuZ2V0VmlzaWJsZUNhcmRGZXRjaEluZm9zKCkucGlwZShiZSgxKSkpKSxJdCgodD0+dC5maWx0ZXIoKHQ9PnQubG9hZFN0YXRlPT09eUUuTk9UX0xPQURFRCkpKSkpLHRoaXMudmlzaWJsZUNhcmRzUmVsb2FkZWQkPXRoaXMucmVsb2FkUmVxdWVzdGVkV2hpbGVTaG93biQucGlwZSh6ZSgoKCk9PnRoaXMuZ2V0VmlzaWJsZUNhcmRGZXRjaEluZm9zKCkucGlwZShiZSgxKSkpKSxJdCgodD0+dC5maWx0ZXIoKHQ9PnQubG9hZFN0YXRlIT09eUUuTE9BRElORykpKSkpLHRoaXMubG9hZFRpbWVTZXJpZXMkPXJlKHRoaXMudmlzaWJsZUNhcmRzV2l0aG91dERhdGFDaGFuZ2VkJCx0aGlzLnZpc2libGVDYXJkc1JlbG9hZGVkJCkucGlwZShjZSgodD0+dC5sZW5ndGg+MCkpLFZlKHRoaXMuc3RvcmUuc2VsZWN0KFRTKS5waXBlKGNlKCh0PT5udWxsIT09dCkpKSksWnQoKChbdCxlXSk9PnRoaXMuZmV0Y2hUaW1lU2VyaWVzRm9yQ2FyZHModCxlKSkpKSx0aGlzLmRhdGFFZmZlY3RzJD1NaygoKCk9PnJlKHRoaXMubG9hZFRhZ01ldGFkYXRhJCx0aGlzLmxvYWRUaW1lU2VyaWVzJCkpLHtkaXNwYXRjaDohMX0pfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIGRRKCl9Z2V0VmlzaWJsZUNhcmRGZXRjaEluZm9zKCl7cmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KENUKS5waXBlKHplKCh0PT50LnNpemU/JHQoWy4uLnRdLm1hcCgodD0+dGhpcy5zdG9yZS5zZWxlY3QoY1EsdCkucGlwZShiZSgxKSkpKSk6RXQoW10pKSksSXQoKHQ9PnQuZmlsdGVyKEJvb2xlYW4pKSkpfWZldGNoVGltZVNlcmllcyh0KXtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoVGltZVNlcmllcyhbdF0pLnBpcGUoRmUoKHQ9Pntjb25zdCBlPXQuZmlsdGVyKHdBKTtlLmxlbmd0aCYmY29uc29sZS5lcnJvcigiVGltZSBzZXJpZXMgcmVzcG9uc2UgY29udGFpbmVkIGVycm9yczoiLGUpLHRoaXMuc3RvcmUuZGlzcGF0Y2goUUUoe3Jlc3BvbnNlOnRbMF19KSl9KSkscGUoKCgpPT4odGhpcy5zdG9yZS5kaXNwYXRjaChKRSh7cmVxdWVzdDp0fSkpLEV0KG51bGwpKSkpKX1mZXRjaFRpbWVTZXJpZXNGb3JDYXJkcyh0LGUpe3JldHVybiBFdCh0Lm1hcCgodD0+e2NvbnN0e3BsdWdpbjpuLHRhZzpvLHJ1bklkOmksc2FtcGxlOmF9PXQ7cmV0dXJuIHhBKG4pP3twbHVnaW46bix0YWc6byxzYW1wbGU6YSxydW5JZDppfTp7cGx1Z2luOm4sdGFnOm8sc2FtcGxlOmEsZXhwZXJpbWVudElkczplfX0pKSkucGlwZShGZSgodD0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goS0Uoe3JlcXVlc3RzOnR9KSl9KSksWnQoKHQ9PnJlKC4uLnQubWFwKCh0PT50aGlzLmZldGNoVGltZVNlcmllcyh0KSkpKSkpKX19cFEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHBRKSh2cihTayksdnIoSXcpLHZyKFBBKSl9LHBRLsm1cHJvdj1Nbih7dG9rZW46cFEsZmFjdG9yeTpwUS7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgocFEsW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlNrfSx7dHlwZTpJd30se3R5cGU6UEF9XX0pLG51bGwpO2NvbnN0IG1RPW5ldyBHYSgiTWV0cmljcyBTdG9yZSBDb25maWciKSx1UT1uZXcgR2EoIk1ldHJpY3MgSW5pdGlhbCBTZXR0aW5ncyBDb25maWciKTtmdW5jdGlvbiBmUSh0KXtyZXR1cm4gdD97aW5pdGlhbFN0YXRlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpUSkse3NldHRpbmdzOnR9KX06e2luaXRpYWxTdGF0ZTppUX19dmFyIGdROyEoZnVuY3Rpb24odCl7dFt0LkxFRlQ9MV09IkxFRlQiLHRbdC5SSUdIVD0yXT0iUklHSFQiLHRbdC5NSURETEU9NF09Ik1JRERMRSIsdFt0LkZPVVJUSD04XT0iRk9VUlRIIix0W3QuRklGVEg9MzJdPSJGSUZUSCJ9KShnUXx8KGdRPXt9KSk7bGV0IGhRPTA7ZnVuY3Rpb24gYlEodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJidXR0b24iLDMpLFZtKCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaGkodCksWW0oKS5leHBhbmRTaWRlYmFyKCl9KSksVG0oMSwibWF0LWljb24iLDQpLEFtKCl9fWZ1bmN0aW9uIHlRKHQsZSl7aWYoMSZ0JiYoUm0oMCwibmF2Iiw1KSxBaCgxLCJhc3luYyIpLFhtKDIsMSksQW0oKSksMiZ0KXtjb25zdCB0PVltKCk7ZHUoIndpZHRoIixUaCgxLDQsdC53aWR0aCQpLCIlIikoIm1pbi13aWR0aCIsdC5NSU5JTVVNX1NJREVCQVJfV0lEVEhfSU5fUFgsInB4Iil9fWZ1bmN0aW9uIF9RKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiZGl2Iiw2KSxWbSgibW91c2Vkb3duIiwoZnVuY3Rpb24gZSgpe3JldHVybiBoaSh0KSxZbSgpLnJlc2l6ZUdyYWJiZWQoKX0pKSxUbSgxLCJtYXQtaWNvbiIsNyksQW0oKX19Y29uc3QgQ1E9W1tbIiIsIm1haW4iLCIiXV0sW1siIiwic2lkZWJhciIsIiJdXV07Y2xhc3MgTVF7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN0b3JlPXQsdGhpcy53aWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QoT1IpLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgSSx0aGlzLnJlc2l6aW5nPSExLHRoaXMuTUlOSU1VTV9TSURFQkFSX1dJRFRIX0lOX1BYPTc1LG9lKGUubmF0aXZlRWxlbWVudCwibW91c2Vtb3ZlIikucGlwZShJZSh0aGlzLm5nVW5zdWJzY3JpYmUpLGNlKCgoKT0+dGhpcy5yZXNpemluZykpKS5zdWJzY3JpYmUoKHQ9PntpZigodC5idXR0b25zJmdRLkxFRlQpIT09Z1EuTEVGVClyZXR1cm4gdm9pZCh0aGlzLnJlc2l6aW5nPSExKTt0LnByZXZlbnREZWZhdWx0KCk7Y29uc3R7d2lkdGg6bn09ZS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuc3RvcmUuZGlzcGF0Y2goVEUoe3dpZHRoSW5QZXJjZW50OnQuY2xpZW50WDw9dGhpcy5NSU5JTVVNX1NJREVCQVJfV0lEVEhfSU5fUFg/MDp0LmNsaWVudFgvbioxMDB9KSl9KSksb2UoZS5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIix7cGFzc2l2ZTohMH0pLnBpcGUoSWUodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucmVzaXppbmc9ITF9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfXJlc2l6ZUdyYWJiZWQoKXt0aGlzLnJlc2l6aW5nPSEwfWV4cGFuZFNpZGViYXIoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFRFKHt3aWR0aEluUGVyY2VudDoyMH0pKX19dmFyIHZRO01RLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxNUSkoU20oSXcpLFNtKGhnKSl9LE1RLsm1Y21wPXRvKHt0eXBlOk1RLHNlbGVjdG9yczpbWyJ0Yi1kYXNoYm9hcmQtbGF5b3V0Il1dLG5nQ29udGVudFNlbGVjdG9yczpbIlttYWluXSIsIltzaWRlYmFyXSJdLGRlY2xzOjcsdmFyczo5LGNvbnN0czpbWyJjbGFzcyIsImV4cGFuZCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwic2lkZWJhciIsMywid2lkdGgiLCJtaW5XaWR0aCIsNCwibmdJZiJdLFsiY2xhc3MiLCJyZXNpemVyIiwzLCJtb3VzZWRvd24iLDQsIm5nSWYiXSxbMSwiZXhwYW5kIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImV4cGFuZF9tb3JlXzI0cHgiXSxbMSwic2lkZWJhciJdLFsxLCJyZXNpemVyIiwzLCJtb3VzZWRvd24iXSxbInN2Z0ljb24iLCJkcmFnX2luZGljYXRvcl8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihabShDUSksUXAoMCxiUSwyLDAsImJ1dHRvbiIsMCksQWgoMSwiYXN5bmMiKSxRcCgyLHlRLDMsNiwibmF2IiwxKSxBaCgzLCJhc3luYyIpLFFwKDQsX1EsMiwwLCJkaXYiLDIpLEFoKDUsImFzeW5jIiksWG0oNikpLDImZSYmKERtKCJuZ0lmIiwwPT09VGgoMSwzLG4ud2lkdGgkKSkscmMoMiksRG0oIm5nSWYiLFRoKDMsNSxuLndpZHRoJCk+MCkscmMoMiksRG0oIm5nSWYiLFRoKDUsNyxuLndpZHRoJCk+MCkpfSxkaXJlY3RpdmVzOltkTSxEV10scGlwZXM6W3dNXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjgwdnd9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdLCAuZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ViZWJlYjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZmxleDowIDAgMjBweDtqdXN0aWZ5LXNlbGY6c3RyZXRjaDt3aWR0aDoyMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6IzU1NX0ucmVzaXplcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MCAxcHg7Y3Vyc29yOmV3LXJlc2l6ZTtkaXNwbGF5OmZsZXg7anVzdGlmeS1zZWxmOnN0cmV0Y2h9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5leHBhbmRbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MCAxcHggMCAwO2NvbG9yOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktc2VsZjpzdHJldGNoO3BhZGRpbmc6MH0uZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKE1RLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InRiLWRhc2hib2FyZC1sYXlvdXQiLHRlbXBsYXRlOidcbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj0iKHdpZHRoJCB8IGFzeW5jKSA9PT0gMCJcbiAgICAgIGNsYXNzPSJleHBhbmQiXG4gICAgICAoY2xpY2spPSJleHBhbmRTaWRlYmFyKCkiXG4gICAgPlxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249ImV4cGFuZF9tb3JlXzI0cHgiPjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPG5hdlxuICAgICAgKm5nSWY9Iih3aWR0aCQgfCBhc3luYykgPiAwIlxuICAgICAgY2xhc3M9InNpZGViYXIiXG4gICAgICBbc3R5bGUud2lkdGguJV09IndpZHRoJCB8IGFzeW5jIlxuICAgICAgW3N0eWxlLm1pbldpZHRoLnB4XT0iTUlOSU1VTV9TSURFQkFSX1dJRFRIX0lOX1BYIlxuICAgID5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD0iW3NpZGViYXJdIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uYXY+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9Iih3aWR0aCQgfCBhc3luYykgPiAwIlxuICAgICAgY2xhc3M9InJlc2l6ZXIiXG4gICAgICAobW91c2Vkb3duKT0icmVzaXplR3JhYmJlZCgpIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPSJkcmFnX2luZGljYXRvcl8yNHB4Ij48L21hdC1pY29uPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD0iW21haW5dIj48L25nLWNvbnRlbnQ+XG4gICcsc3R5bGVVcmxzOlsibGF5b3V0X2NvbnRhaW5lci5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9LHt0eXBlOmhnfV19KSxudWxsKSwoZnVuY3Rpb24odCl7dC5DSEVDS0JPWD0iY2hlY2tib3giLHQuUlVOX05BTUU9InJ1bl9uYW1lIix0LkVYUEVSSU1FTlRfTkFNRT0iZXhwZXJpbWVudF9uYW1lIix0LlJVTl9DT0xPUj0icnVuX2NvbG9yIn0pKHZRfHwodlE9e30pKTtjb25zdCB4UT1LdyhUUiksT1E9WncoeFEsKCh0LGUpPT57Y29uc3Qgbj1bXTtmb3IoY29uc3QgbyBvZiBlKXQuc3BlY3Nbb10mJm4ucHVzaCh0LnNwZWNzW29dLmhwYXJhbS5kZWZhdWx0RmlsdGVycyk7cmV0dXJuIHRBKG4pfSkpLFBRPVp3KE9RLHhRLCgodCxlLG4pPT57dmFyIG87Y29uc3QgaT0kUihuKSxhPWUuZmlsdGVyc1tpXTtyZXR1cm4gbmV3IE1hcChbLi4udCwuLi5udWxsIT09KG89bnVsbD09YT92b2lkIDA6YS5ocGFyYW1zKSYmdm9pZCAwIT09bz9vOltdXSl9KSksd1E9WncoeFEsKCh0LGUpPT57Y29uc3Qgbj1bXTtmb3IoY29uc3QgbyBvZiBlKXQuc3BlY3Nbb10mJm4ucHVzaCh0LnNwZWNzW29dLm1ldHJpYy5kZWZhdWx0RmlsdGVycyk7cmV0dXJuIGVBKG4pfSkpLGtRPVp3KHdRLHhRLCgodCxlLG4pPT57dmFyIG87Y29uc3QgaT0kUihuKSxhPWUuZmlsdGVyc1tpXTtyZXR1cm4gbmV3IE1hcChbLi4udCwuLi5udWxsIT09KG89bnVsbD09YT92b2lkIDA6YS5tZXRyaWNzKSYmdm9pZCAwIT09bz9vOltdXSl9KSksU1E9WncoeFEsKCh0LGUpPT4oZnVuY3Rpb24gbiguLi50KXtjb25zdCBlPW5ldyBNYXAsbj1uZXcgTWFwLG89bmV3IE1hcCxpPW5ldyBNYXAsYT1bXTtmb3IoY29uc3QgciBvZiB0KXtmb3IoY29uc3QgdCBvZiByLmhwYXJhbXMpaWYobi5oYXModC5uYW1lKXx8bi5zZXQodC5uYW1lLG5ldyBTZXQpLG4uZ2V0KHQubmFtZSkuYWRkKHQuZGlzcGxheU5hbWUpLGUuaGFzKHQubmFtZSkpe2NvbnN0IG49ZS5nZXQodC5uYW1lKSxvPXQ7aWYobi50eXBlIT09by50eXBlJiZhLnB1c2goYEhwYXJhbSwgJHtvLm5hbWV9LCB0eXBlcyBoYXZlIHRvIG1hdGNoLiBHb3Q6ICR7bi50eXBlfSB2cy4gJHtvLnR5cGV9YCksbi5kb21haW4udHlwZT09PVpSLklOVEVSVkFMJiZvLmRvbWFpbi50eXBlPT09WlIuSU5URVJWQUwpbi5kb21haW4ubWluVmFsdWU9PT1vLmRvbWFpbi5taW5WYWx1ZSYmbi5kb21haW4ubWF4VmFsdWU9PT1vLmRvbWFpbi5tYXhWYWx1ZXx8YS5wdXNoKGBIcGFyYW0sICR7by5uYW1lfSwgZG9tYWlucyBoYXZlIHRvIG1hdGNoLiBHb3Q6ICR7bi5kb21haW59IHZzLiAke28uZG9tYWlufWApO2Vsc2UgaWYobi5kb21haW4udHlwZT09PVpSLkRJU0NSRVRFJiZvLmRvbWFpbi50eXBlPT09WlIuRElTQ1JFVEUpe2NvbnN0IHQ9bmV3IFNldChbLi4ubi5kb21haW4udmFsdWVzLC4uLm8uZG9tYWluLnZhbHVlc10pO24uZG9tYWluLnZhbHVlcy5sZW5ndGg9PT1vLmRvbWFpbi52YWx1ZXMubGVuZ3RoJiZuLmRvbWFpbi52YWx1ZXMubGVuZ3RoPT09dC5zaXplfHxhLnB1c2goYEhwYXJhbSwgJHtvLm5hbWV9LCBkb21haW5zIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtuLmRvbWFpbn0gdnMuICR7by5kb21haW59YCl9ZWxzZSBhLnB1c2goYEhwYXJhbSwgJHtvLm5hbWV9LCBkb21haW5zIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtuLmRvbWFpbn0gdnMuICR7by5kb21haW59YCl9ZWxzZSBlLnNldCh0Lm5hbWUsT2JqZWN0LmFzc2lnbih7fSx0KSk7Zm9yKGNvbnN0IHQgb2Ygci5tZXRyaWNzKWlmKGkuaGFzKHQudGFnKXx8aS5zZXQodC50YWcsbmV3IFNldCksaS5nZXQodC50YWcpLmFkZCh0LmRpc3BsYXlOYW1lKSxvLmhhcyh0LnRhZykpe2NvbnN0IGU9by5nZXQodC50YWcpLG49dDtlLmRhdGFzZXRUeXBlIT09bi5kYXRhc2V0VHlwZSYmYS5wdXNoKGBNZXRyaWMsICR7bi50YWd9LCBkYXRhc2V0VHlwZXMgaGF2ZSB0byBtYXRjaC4gR290OiAke2UuZGF0YXNldFR5cGV9IHZzLiAke24uZGF0YXNldFR5cGV9YCl9ZWxzZSBvLnNldCh0LnRhZyxPYmplY3QuYXNzaWduKHt9LHQpKX1pZihhLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFZhbGlkYXRpb24gZXJyb3I6XG4ke2Euam9pbigiXG4iKX1gKTtyZXR1cm57aHBhcmFtczpbLi4uZV0ubWFwKCgoW3QsZV0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2Rpc3BsYXlOYW1lOlsuLi5uLmdldCh0KV0uam9pbigiIG9yICIpfSkpKSxtZXRyaWNzOlsuLi5vXS5tYXAoKChbdCxlXSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7ZGlzcGxheU5hbWU6Wy4uLmkuZ2V0KHQpXS5qb2luKCIgb3IgIil9KSkpfX0pKC4uLmUuZXhwZXJpbWVudElkcy5tYXAoKGU9Pntjb25zdCBuPXQuc3BlY3NbZV07cmV0dXJuIG4/e2hwYXJhbXM6bi5ocGFyYW0uc3BlY3MsbWV0cmljczpuLm1ldHJpYy5zcGVjc306bnVsbH0pKS5maWx0ZXIoQm9vbGVhbikpKSksRFE9e3Rvb2x0aXBTdGF0ZTpueCgic3RhdGUiLFtyeCgiaW5pdGlhbCwgdm9pZCwgaGlkZGVuIixheCh7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGUoMCkifSkpLHJ4KCJ2aXNpYmxlIixheCh7dHJhbnNmb3JtOiJzY2FsZSgxKSJ9KSksbHgoIiogPT4gdmlzaWJsZSIsb3goIjIwMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixzeChbYXgoe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDApIixvZmZzZXQ6MH0pLGF4KHtvcGFjaXR5Oi41LHRyYW5zZm9ybToic2NhbGUoMC45OSkiLG9mZnNldDouNX0pLGF4KHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJzY2FsZSgxKSIsb2Zmc2V0OjF9KV0pKSksbHgoIiogPT4gaGlkZGVuIixveCgiMTAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiLGF4KHtvcGFjaXR5OjB9KSkpXSl9LEVRPU56KHtwYXNzaXZlOiEwfSk7ZnVuY3Rpb24gUlEodCl7cmV0dXJuIEVycm9yKGBUb29sdGlwIHBvc2l0aW9uICIke3R9IiBpcyBpbnZhbGlkLmApfWNvbnN0IEFRPW5ldyBHYSgibWF0LXRvb2x0aXAtc2Nyb2xsLXN0cmF0ZWd5IiksVFE9e3Byb3ZpZGU6QVEsZGVwczpbcExdLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gTlEodCl7cmV0dXJuKCk9PnQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKHtzY3JvbGxUaHJvdHRsZToyMH0pfX0selE9bmV3IEdhKCJtYXQtdG9vbHRpcC1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIElRKCl7cmV0dXJue3Nob3dEZWxheTowLGhpZGVEZWxheTowLHRvdWNoZW5kSGlkZURlbGF5OjE1MDB9fX0pO2NsYXNzIEhRe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyxsLGMsZCxwKXt0aGlzLl9vdmVybGF5PXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX3Njcm9sbERpc3BhdGNoZXI9bix0aGlzLl92aWV3Q29udGFpbmVyUmVmPW8sdGhpcy5fbmdab25lPWksdGhpcy5fcGxhdGZvcm09YSx0aGlzLl9hcmlhRGVzY3JpYmVyPXIsdGhpcy5fZm9jdXNNb25pdG9yPXMsdGhpcy5fZGlyPWMsdGhpcy5fZGVmYXVsdE9wdGlvbnM9ZCx0aGlzLl9wb3NpdGlvbj0iYmVsb3ciLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3ZpZXdJbml0aWFsaXplZD0hMSx0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSExLHRoaXMuX3ZpZXdwb3J0TWFyZ2luPTgsdGhpcy5fY3NzQ2xhc3NQcmVmaXg9Im1hdCIsdGhpcy5zaG93RGVsYXk9dGhpcy5fZGVmYXVsdE9wdGlvbnMuc2hvd0RlbGF5LHRoaXMuaGlkZURlbGF5PXRoaXMuX2RlZmF1bHRPcHRpb25zLmhpZGVEZWxheSx0aGlzLnRvdWNoR2VzdHVyZXM9ImF1dG8iLHRoaXMuX21lc3NhZ2U9IiIsdGhpcy5fcGFzc2l2ZUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9bmV3IEksdGhpcy5faGFuZGxlS2V5ZG93bj10PT57dGhpcy5faXNUb29sdGlwVmlzaWJsZSgpJiZ0LmtleUNvZGU9PT11eiYmIWJ6KHQpJiYodC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fbmdab25lLnJ1bigoKCk9PnRoaXMuaGlkZSgwKSkpKX0sdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9bCx0aGlzLl9kb2N1bWVudD1wLGQmJihkLnBvc2l0aW9uJiYodGhpcy5wb3NpdGlvbj1kLnBvc2l0aW9uKSxkLnRvdWNoR2VzdHVyZXMmJih0aGlzLnRvdWNoR2VzdHVyZXM9ZC50b3VjaEdlc3R1cmVzKSksYy5jaGFuZ2UucGlwZShJZSh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fdXBkYXRlUG9zaXRpb24odGhpcy5fb3ZlcmxheVJlZil9KSksaS5ydW5PdXRzaWRlQW5ndWxhcigoKCk9PntlLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5faGFuZGxlS2V5ZG93bil9KSl9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufXNldCBwb3NpdGlvbih0KXt2YXIgZTt0IT09dGhpcy5fcG9zaXRpb24mJih0aGlzLl9wb3NpdGlvbj10LHRoaXMuX292ZXJsYXlSZWYmJih0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKSxudWxsPT09KGU9dGhpcy5fdG9vbHRpcEluc3RhbmNlKXx8dm9pZCAwPT09ZXx8ZS5zaG93KDApLHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSkpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5fZGlzYWJsZWQ9eXoodCksdGhpcy5fZGlzYWJsZWQ/dGhpcy5oaWRlKDApOnRoaXMuX3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKX1nZXQgbWVzc2FnZSgpe3JldHVybiB0aGlzLl9tZXNzYWdlfXNldCBtZXNzYWdlKHQpe3RoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24odGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHRoaXMuX21lc3NhZ2UsInRvb2x0aXAiKSx0aGlzLl9tZXNzYWdlPW51bGwhPXQ/U3RyaW5nKHQpLnRyaW0oKToiIiwhdGhpcy5fbWVzc2FnZSYmdGhpcy5faXNUb29sdGlwVmlzaWJsZSgpP3RoaXMuaGlkZSgwKToodGhpcy5fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpLHRoaXMuX3VwZGF0ZVRvb2x0aXBNZXNzYWdlKCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57dGhpcy5fYXJpYURlc2NyaWJlci5kZXNjcmliZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsdGhpcy5tZXNzYWdlLCJ0b29sdGlwIil9KSl9KSkpfWdldCB0b29sdGlwQ2xhc3MoKXtyZXR1cm4gdGhpcy5fdG9vbHRpcENsYXNzfXNldCB0b29sdGlwQ2xhc3ModCl7dGhpcy5fdG9vbHRpcENsYXNzPXQsdGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl9zZXRUb29sdGlwQ2xhc3ModGhpcy5fdG9vbHRpcENsYXNzKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl92aWV3SW5pdGlhbGl6ZWQ9ITAsdGhpcy5fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpLHRoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYpLnBpcGUoSWUodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCh0PT57dD8ia2V5Ym9hcmQiPT09dCYmdGhpcy5fbmdab25lLnJ1bigoKCk9PnRoaXMuc2hvdygpKSk6dGhpcy5fbmdab25lLnJ1bigoKCk9PnRoaXMuaGlkZSgwKSkpfSkpfW5nT25EZXN0cm95KCl7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fdG9vbHRpcEluc3RhbmNlPW51bGwpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5faGFuZGxlS2V5ZG93biksdGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5mb3JFYWNoKCgoW2Usbl0pPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsbixFUSl9KSksdGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5sZW5ndGg9MCx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24odCx0aGlzLm1lc3NhZ2UsInRvb2x0aXAiKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodCl9c2hvdyh0PXRoaXMuc2hvd0RlbGF5KXtpZih0aGlzLmRpc2FibGVkfHwhdGhpcy5tZXNzYWdlfHx0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkmJiF0aGlzLl90b29sdGlwSW5zdGFuY2UuX3Nob3dUaW1lb3V0SWQmJiF0aGlzLl90b29sdGlwSW5zdGFuY2UuX2hpZGVUaW1lb3V0SWQpcmV0dXJuO2NvbnN0IGU9dGhpcy5fY3JlYXRlT3ZlcmxheSgpO3RoaXMuX2RldGFjaCgpLHRoaXMuX3BvcnRhbD10aGlzLl9wb3J0YWx8fG5ldyB2Rih0aGlzLl90b29sdGlwQ29tcG9uZW50LHRoaXMuX3ZpZXdDb250YWluZXJSZWYpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT1lLmF0dGFjaCh0aGlzLl9wb3J0YWwpLmluc3RhbmNlLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5hZnRlckhpZGRlbigpLnBpcGUoSWUodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgoKT0+dGhpcy5fZGV0YWNoKCkpKSx0aGlzLl9zZXRUb29sdGlwQ2xhc3ModGhpcy5fdG9vbHRpcENsYXNzKSx0aGlzLl91cGRhdGVUb29sdGlwTWVzc2FnZSgpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5zaG93KHQpfWhpZGUodD10aGlzLmhpZGVEZWxheSl7dGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl90b29sdGlwSW5zdGFuY2UuaGlkZSh0KX10b2dnbGUoKXt0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCk/dGhpcy5oaWRlKCk6dGhpcy5zaG93KCl9X2lzVG9vbHRpcFZpc2libGUoKXtyZXR1cm4hIXRoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdGhpcy5fdG9vbHRpcEluc3RhbmNlLmlzVmlzaWJsZSgpfV9jcmVhdGVPdmVybGF5KCl7aWYodGhpcy5fb3ZlcmxheVJlZilyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZjtjb25zdCB0PXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHRoaXMuX2VsZW1lbnRSZWYpLGU9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudFJlZikud2l0aFRyYW5zZm9ybU9yaWdpbk9uKGAuJHt0aGlzLl9jc3NDbGFzc1ByZWZpeH0tdG9vbHRpcGApLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoITEpLndpdGhWaWV3cG9ydE1hcmdpbih0aGlzLl92aWV3cG9ydE1hcmdpbikud2l0aFNjcm9sbGFibGVDb250YWluZXJzKHQpO3JldHVybiBlLnBvc2l0aW9uQ2hhbmdlcy5waXBlKEllKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgodD0+e3RoaXMuX3VwZGF0ZUN1cnJlbnRQb3NpdGlvbkNsYXNzKHQuY29ubmVjdGlvblBhaXIpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdC5zY3JvbGxhYmxlVmlld1Byb3BlcnRpZXMuaXNPdmVybGF5Q2xpcHBlZCYmdGhpcy5fdG9vbHRpcEluc3RhbmNlLmlzVmlzaWJsZSgpJiZ0aGlzLl9uZ1pvbmUucnVuKCgoKT0+dGhpcy5oaWRlKDApKSl9KSksdGhpcy5fb3ZlcmxheVJlZj10aGlzLl9vdmVybGF5LmNyZWF0ZSh7ZGlyZWN0aW9uOnRoaXMuX2Rpcixwb3NpdGlvblN0cmF0ZWd5OmUscGFuZWxDbGFzczpgJHt0aGlzLl9jc3NDbGFzc1ByZWZpeH0tdG9vbHRpcC1wYW5lbGAsc2Nyb2xsU3RyYXRlZ3k6dGhpcy5fc2Nyb2xsU3RyYXRlZ3koKX0pLHRoaXMuX3VwZGF0ZVBvc2l0aW9uKHRoaXMuX292ZXJsYXlSZWYpLHRoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5waXBlKEllKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKCk9PnRoaXMuX2RldGFjaCgpKSksdGhpcy5fb3ZlcmxheVJlZi5vdXRzaWRlUG9pbnRlckV2ZW50cygpLnBpcGUoSWUodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgoKT0+e3ZhciB0O3JldHVybiBudWxsPT09KHQ9dGhpcy5fdG9vbHRpcEluc3RhbmNlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5faGFuZGxlQm9keUludGVyYWN0aW9uKCl9KSksdGhpcy5fb3ZlcmxheVJlZn1fZGV0YWNoKCl7dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT1udWxsfV91cGRhdGVQb3NpdGlvbih0KXtjb25zdCBlPXQuZ2V0Q29uZmlnKCkucG9zaXRpb25TdHJhdGVneSxuPXRoaXMuX2dldE9yaWdpbigpLG89dGhpcy5fZ2V0T3ZlcmxheVBvc2l0aW9uKCk7ZS53aXRoUG9zaXRpb25zKFt0aGlzLl9hZGRPZmZzZXQoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4ubWFpbiksby5tYWluKSksdGhpcy5fYWRkT2Zmc2V0KE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxuLmZhbGxiYWNrKSxvLmZhbGxiYWNrKSldKX1fYWRkT2Zmc2V0KHQpe3JldHVybiB0fV9nZXRPcmlnaW4oKXtjb25zdCB0PSF0aGlzLl9kaXJ8fCJsdHIiPT10aGlzLl9kaXIudmFsdWUsZT10aGlzLnBvc2l0aW9uO2xldCBuO2lmKCJhYm92ZSI9PWV8fCJiZWxvdyI9PWUpbj17b3JpZ2luWDoiY2VudGVyIixvcmlnaW5ZOiJhYm92ZSI9PWU/InRvcCI6ImJvdHRvbSJ9O2Vsc2UgaWYoImJlZm9yZSI9PWV8fCJsZWZ0Ij09ZSYmdHx8InJpZ2h0Ij09ZSYmIXQpbj17b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImNlbnRlciJ9O2Vsc2UgaWYoImFmdGVyIj09ZXx8InJpZ2h0Ij09ZSYmdHx8ImxlZnQiPT1lJiYhdCluPXtvcmlnaW5YOiJlbmQiLG9yaWdpblk6ImNlbnRlciJ9O2Vsc2UgaWYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSl0aHJvdyBSUShlKTtjb25zdHt4Om8seTppfT10aGlzLl9pbnZlcnRQb3NpdGlvbihuLm9yaWdpblgsbi5vcmlnaW5ZKTtyZXR1cm57bWFpbjpuLGZhbGxiYWNrOntvcmlnaW5YOm8sb3JpZ2luWTppfX19X2dldE92ZXJsYXlQb3NpdGlvbigpe2NvbnN0IHQ9IXRoaXMuX2Rpcnx8Imx0ciI9PXRoaXMuX2Rpci52YWx1ZSxlPXRoaXMucG9zaXRpb247bGV0IG47aWYoImFib3ZlIj09ZSluPXtvdmVybGF5WDoiY2VudGVyIixvdmVybGF5WToiYm90dG9tIn07ZWxzZSBpZigiYmVsb3ciPT1lKW49e292ZXJsYXlYOiJjZW50ZXIiLG92ZXJsYXlZOiJ0b3AifTtlbHNlIGlmKCJiZWZvcmUiPT1lfHwibGVmdCI9PWUmJnR8fCJyaWdodCI9PWUmJiF0KW49e292ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJjZW50ZXIifTtlbHNlIGlmKCJhZnRlciI9PWV8fCJyaWdodCI9PWUmJnR8fCJsZWZ0Ij09ZSYmIXQpbj17b3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiY2VudGVyIn07ZWxzZSBpZigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKXRocm93IFJRKGUpO2NvbnN0e3g6byx5Oml9PXRoaXMuX2ludmVydFBvc2l0aW9uKG4ub3ZlcmxheVgsbi5vdmVybGF5WSk7cmV0dXJue21haW46bixmYWxsYmFjazp7b3ZlcmxheVg6byxvdmVybGF5WTppfX19X3VwZGF0ZVRvb2x0aXBNZXNzYWdlKCl7dGhpcy5fdG9vbHRpcEluc3RhbmNlJiYodGhpcy5fdG9vbHRpcEluc3RhbmNlLm1lc3NhZ2U9dGhpcy5tZXNzYWdlLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5fbWFya0ZvckNoZWNrKCksdGhpcy5fbmdab25lLm9uTWljcm90YXNrRW1wdHkucGlwZShiZSgxKSxJZSh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9KSkpfV9zZXRUb29sdGlwQ2xhc3ModCl7dGhpcy5fdG9vbHRpcEluc3RhbmNlJiYodGhpcy5fdG9vbHRpcEluc3RhbmNlLnRvb2x0aXBDbGFzcz10LHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5fbWFya0ZvckNoZWNrKCkpfV9pbnZlcnRQb3NpdGlvbih0LGUpe3JldHVybiJhYm92ZSI9PT10aGlzLnBvc2l0aW9ufHwiYmVsb3ciPT09dGhpcy5wb3NpdGlvbj8idG9wIj09PWU/ZT0iYm90dG9tIjoiYm90dG9tIj09PWUmJihlPSJ0b3AiKToiZW5kIj09PXQ/dD0ic3RhcnQiOiJzdGFydCI9PT10JiYodD0iZW5kIikse3g6dCx5OmV9fV91cGRhdGVDdXJyZW50UG9zaXRpb25DbGFzcyh0KXtjb25zdHtvdmVybGF5WTplLG9yaWdpblg6bixvcmlnaW5ZOm99PXQ7bGV0IGk7aWYoaT0iY2VudGVyIj09PWU/dGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8iZW5kIj09PW4/ImxlZnQiOiJyaWdodCI6InN0YXJ0Ij09PW4/ImxlZnQiOiJyaWdodCI6ImJvdHRvbSI9PT1lJiYidG9wIj09PW8/ImFib3ZlIjoiYmVsb3ciLGkhPT10aGlzLl9jdXJyZW50UG9zaXRpb24pe2NvbnN0IHQ9dGhpcy5fb3ZlcmxheVJlZjtpZih0KXtjb25zdCBlPWAke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS10b29sdGlwLXBhbmVsLWA7dC5yZW1vdmVQYW5lbENsYXNzKGUrdGhpcy5fY3VycmVudFBvc2l0aW9uKSx0LmFkZFBhbmVsQ2xhc3MoZStpKX10aGlzLl9jdXJyZW50UG9zaXRpb249aX19X3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKXshdGhpcy5fZGlzYWJsZWQmJnRoaXMubWVzc2FnZSYmdGhpcy5fdmlld0luaXRpYWxpemVkJiYhdGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5sZW5ndGgmJih0aGlzLl9wbGF0Zm9ybVN1cHBvcnRzTW91c2VFdmVudHMoKT90aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goWyJtb3VzZWVudGVyIiwoKT0+e3RoaXMuX3NldHVwUG9pbnRlckV4aXRFdmVudHNJZk5lZWRlZCgpLHRoaXMuc2hvdygpfV0pOiJvZmYiIT09dGhpcy50b3VjaEdlc3R1cmVzJiYodGhpcy5fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goWyJ0b3VjaHN0YXJ0IiwoKT0+e3RoaXMuX3NldHVwUG9pbnRlckV4aXRFdmVudHNJZk5lZWRlZCgpLGNsZWFyVGltZW91dCh0aGlzLl90b3VjaHN0YXJ0VGltZW91dCksdGhpcy5fdG91Y2hzdGFydFRpbWVvdXQ9c2V0VGltZW91dCgoKCk9PnRoaXMuc2hvdygpKSw1MDApfV0pKSx0aGlzLl9hZGRMaXN0ZW5lcnModGhpcy5fcGFzc2l2ZUxpc3RlbmVycykpfV9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKXtpZih0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkKXJldHVybjt0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSEwO2NvbnN0IHQ9W107aWYodGhpcy5fcGxhdGZvcm1TdXBwb3J0c01vdXNlRXZlbnRzKCkpdC5wdXNoKFsibW91c2VsZWF2ZSIsKCk9PnRoaXMuaGlkZSgpXSxbIndoZWVsIix0PT50aGlzLl93aGVlbExpc3RlbmVyKHQpXSk7ZWxzZSBpZigib2ZmIiE9PXRoaXMudG91Y2hHZXN0dXJlcyl7dGhpcy5fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKTtjb25zdCBlPSgpPT57Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLmhpZGUodGhpcy5fZGVmYXVsdE9wdGlvbnMudG91Y2hlbmRIaWRlRGVsYXkpfTt0LnB1c2goWyJ0b3VjaGVuZCIsZV0sWyJ0b3VjaGNhbmNlbCIsZV0pfXRoaXMuX2FkZExpc3RlbmVycyh0KSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goLi4udCl9X2FkZExpc3RlbmVycyh0KXt0LmZvckVhY2goKChbdCxlXSk9Pnt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0LGUsRVEpfSkpfV9wbGF0Zm9ybVN1cHBvcnRzTW91c2VFdmVudHMoKXtyZXR1cm4hdGhpcy5fcGxhdGZvcm0uSU9TJiYhdGhpcy5fcGxhdGZvcm0uQU5EUk9JRH1fd2hlZWxMaXN0ZW5lcih0KXtpZih0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkpe2NvbnN0IGU9dGhpcy5fZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh0LmNsaWVudFgsdC5jbGllbnRZKSxuPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtlPT09bnx8bi5jb250YWlucyhlKXx8dGhpcy5oaWRlKCl9fV9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpe2NvbnN0IHQ9dGhpcy50b3VjaEdlc3R1cmVzO2lmKCJvZmYiIT09dCl7Y29uc3QgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsbj1lLnN0eWxlOygib24iPT09dHx8IklOUFVUIiE9PWUubm9kZU5hbWUmJiJURVhUQVJFQSIhPT1lLm5vZGVOYW1lKSYmKG4udXNlclNlbGVjdD1uLm1zVXNlclNlbGVjdD1uLndlYmtpdFVzZXJTZWxlY3Q9bi5Nb3pVc2VyU2VsZWN0PSJub25lIiksIm9uIiE9PXQmJmUuZHJhZ2dhYmxlfHwobi53ZWJraXRVc2VyRHJhZz0ibm9uZSIpLG4udG91Y2hBY3Rpb249Im5vbmUiLG4ud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9InRyYW5zcGFyZW50In19fUhRLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxIUSkoU20ocEwpLFNtKGhnKSxTbShwRiksU20oZWgpLFNtKGFfKSxTbSh3eiksU20oS3opLFNtKFNJKSxTbSh2b2lkIDApLFNtKEhJKSxTbSh2b2lkIDApLFNtKFpfKSl9LEhRLsm1ZGlyPWxvKHt0eXBlOkhRLGlucHV0czp7c2hvd0RlbGF5OlsibWF0VG9vbHRpcFNob3dEZWxheSIsInNob3dEZWxheSJdLGhpZGVEZWxheTpbIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJoaWRlRGVsYXkiXSx0b3VjaEdlc3R1cmVzOlsibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJ0b3VjaEdlc3R1cmVzIl0scG9zaXRpb246WyJtYXRUb29sdGlwUG9zaXRpb24iLCJwb3NpdGlvbiJdLGRpc2FibGVkOlsibWF0VG9vbHRpcERpc2FibGVkIiwiZGlzYWJsZWQiXSxtZXNzYWdlOlsibWF0VG9vbHRpcCIsIm1lc3NhZ2UiXSx0b29sdGlwQ2xhc3M6WyJtYXRUb29sdGlwQ2xhc3MiLCJ0b29sdGlwQ2xhc3MiXX19KSxIUS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnBMfSx7dHlwZTpoZ30se3R5cGU6cEZ9LHt0eXBlOmVofSx7dHlwZTphX30se3R5cGU6d3p9LHt0eXBlOkt6fSx7dHlwZTpTSX0se3R5cGU6dm9pZCAwfSx7dHlwZTpISX0se3R5cGU6dm9pZCAwfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19XSxIUS5wcm9wRGVjb3JhdG9ycz17cG9zaXRpb246W3t0eXBlOnh5LGFyZ3M6WyJtYXRUb29sdGlwUG9zaXRpb24iXX1dLGRpc2FibGVkOlt7dHlwZTp4eSxhcmdzOlsibWF0VG9vbHRpcERpc2FibGVkIl19XSxzaG93RGVsYXk6W3t0eXBlOnh5LGFyZ3M6WyJtYXRUb29sdGlwU2hvd0RlbGF5Il19XSxoaWRlRGVsYXk6W3t0eXBlOnh5LGFyZ3M6WyJtYXRUb29sdGlwSGlkZURlbGF5Il19XSx0b3VjaEdlc3R1cmVzOlt7dHlwZTp4eSxhcmdzOlsibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiXX1dLG1lc3NhZ2U6W3t0eXBlOnh5LGFyZ3M6WyJtYXRUb29sdGlwIl19XSx0b29sdGlwQ2xhc3M6W3t0eXBlOnh5LGFyZ3M6WyJtYXRUb29sdGlwQ2xhc3MiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEhRLFt7dHlwZTpDeX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpwTH0se3R5cGU6aGd9LHt0eXBlOnBGfSx7dHlwZTplaH0se3R5cGU6YV99LHt0eXBlOnd6fSx7dHlwZTpLen0se3R5cGU6U0l9LHt0eXBlOnZvaWQgMH0se3R5cGU6SEl9LHt0eXBlOnZvaWQgMH0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfV19KSx7c2hvd0RlbGF5Olt7dHlwZTp4eSxhcmdzOlsibWF0VG9vbHRpcFNob3dEZWxheSJdfV0saGlkZURlbGF5Olt7dHlwZTp4eSxhcmdzOlsibWF0VG9vbHRpcEhpZGVEZWxheSJdfV0sdG91Y2hHZXN0dXJlczpbe3R5cGU6eHksYXJnczpbIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIl19XSxwb3NpdGlvbjpbe3R5cGU6eHksYXJnczpbIm1hdFRvb2x0aXBQb3NpdGlvbiJdfV0sZGlzYWJsZWQ6W3t0eXBlOnh5LGFyZ3M6WyJtYXRUb29sdGlwRGlzYWJsZWQiXX1dLG1lc3NhZ2U6W3t0eXBlOnh5LGFyZ3M6WyJtYXRUb29sdGlwIl19XSx0b29sdGlwQ2xhc3M6W3t0eXBlOnh5LGFyZ3M6WyJtYXRUb29sdGlwQ2xhc3MiXX1dfSk7Y2xhc3MgRlEgZXh0ZW5kcyBIUXtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyLHMsbCxjLGQscCl7c3VwZXIodCxlLG4sbyxpLGEscixzLGwsYyxkLHApLHRoaXMuX3Rvb2x0aXBDb21wb25lbnQ9QlF9fUZRLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxGUSkoU20ocEwpLFNtKGhnKSxTbShwRiksU20oZWgpLFNtKGFfKSxTbSh3eiksU20oS3opLFNtKFNJKSxTbShBUSksU20oSEksOCksU20oelEsOCksU20oWl8pKX0sRlEuybVkaXI9bG8oe3R5cGU6RlEsc2VsZWN0b3JzOltbIiIsIm1hdFRvb2x0aXAiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbHRpcC10cmlnZ2VyIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl0sZmVhdHVyZXM6W3hwXX0pLEZRLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6cEx9LHt0eXBlOmhnfSx7dHlwZTpwRn0se3R5cGU6ZWh9LHt0eXBlOmFffSx7dHlwZTp3en0se3R5cGU6S3p9LHt0eXBlOlNJfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbQVFdfV19LHt0eXBlOkhJLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbelFdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoRlEsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixleHBvcnRBczoibWF0VG9vbHRpcCIsaG9zdDp7Y2xhc3M6Im1hdC10b29sdGlwLXRyaWdnZXIifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnBMfSx7dHlwZTpoZ30se3R5cGU6cEZ9LHt0eXBlOmVofSx7dHlwZTphX30se3R5cGU6d3p9LHt0eXBlOkt6fSx7dHlwZTpTSX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W0FRXX1dfSx7dHlwZTpISSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W3pRXX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19XX0pLG51bGwpO2NsYXNzIExRe2NvbnN0cnVjdG9yKHQpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmPXQsdGhpcy5fdmlzaWJpbGl0eT0iaW5pdGlhbCIsdGhpcy5fY2xvc2VPbkludGVyYWN0aW9uPSExLHRoaXMuX29uSGlkZT1uZXcgSX1zaG93KHQpe2NsZWFyVGltZW91dCh0aGlzLl9oaWRlVGltZW91dElkKSx0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb249ITAsdGhpcy5fc2hvd1RpbWVvdXRJZD1zZXRUaW1lb3V0KCgoKT0+e3RoaXMuX3Zpc2liaWxpdHk9InZpc2libGUiLHRoaXMuX3Nob3dUaW1lb3V0SWQ9dm9pZCAwLHRoaXMuX29uU2hvdygpLHRoaXMuX21hcmtGb3JDaGVjaygpfSksdCl9aGlkZSh0KXtjbGVhclRpbWVvdXQodGhpcy5fc2hvd1RpbWVvdXRJZCksdGhpcy5faGlkZVRpbWVvdXRJZD1zZXRUaW1lb3V0KCgoKT0+e3RoaXMuX3Zpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5faGlkZVRpbWVvdXRJZD12b2lkIDAsdGhpcy5fbWFya0ZvckNoZWNrKCl9KSx0KX1hZnRlckhpZGRlbigpe3JldHVybiB0aGlzLl9vbkhpZGV9aXNWaXNpYmxlKCl7cmV0dXJuInZpc2libGUiPT09dGhpcy5fdmlzaWJpbGl0eX1uZ09uRGVzdHJveSgpe2NsZWFyVGltZW91dCh0aGlzLl9zaG93VGltZW91dElkKSxjbGVhclRpbWVvdXQodGhpcy5faGlkZVRpbWVvdXRJZCksdGhpcy5fb25IaWRlLmNvbXBsZXRlKCl9X2FuaW1hdGlvblN0YXJ0KCl7dGhpcy5fY2xvc2VPbkludGVyYWN0aW9uPSExfV9hbmltYXRpb25Eb25lKHQpe2NvbnN0IGU9dC50b1N0YXRlOyJoaWRkZW4iIT09ZXx8dGhpcy5pc1Zpc2libGUoKXx8dGhpcy5fb25IaWRlLm5leHQoKSwidmlzaWJsZSIhPT1lJiYiaGlkZGVuIiE9PWV8fCh0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb249ITApfV9oYW5kbGVCb2R5SW50ZXJhY3Rpb24oKXt0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb24mJnRoaXMuaGlkZSgwKX1fbWFya0ZvckNoZWNrKCl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X29uU2hvdygpe319TFEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fExRKShTbShVZykpfSxMUS7JtWRpcj1sbyh7dHlwZTpMUX0pLExRLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VWd9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKExRLFt7dHlwZTpDeX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpVZ31dfSksbnVsbCk7Y2xhc3MgQlEgZXh0ZW5kcyBMUXtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQpLHRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlcj1lLHRoaXMuX2lzSGFuZHNldD10aGlzLl9icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZSgiKG1heC13aWR0aDogNTk5Ljk4cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSwgKG1heC13aWR0aDogOTU5Ljk4cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiKX19QlEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJRKShTbShVZyksU20oUEwpKX0sQlEuybVjbXA9dG8oe3R5cGU6QlEsc2VsZWN0b3JzOltbIm1hdC10b29sdGlwLWNvbXBvbmVudCJdXSxob3N0QXR0cnM6WyJhcmlhLWhpZGRlbiIsInRydWUiXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZkdSgiem9vbSIsInZpc2libGUiPT09bi5fdmlzaWJpbGl0eT8xOm51bGwpfSxmZWF0dXJlczpbeHBdLGRlY2xzOjMsdmFyczo3LGNvbnN0czpbWzEsIm1hdC10b29sdGlwIiwzLCJuZ0NsYXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihSbSgwLCJkaXYiLDApLFZtKCJAc3RhdGUuc3RhcnQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2FuaW1hdGlvblN0YXJ0KCl9KSkoIkBzdGF0ZS5kb25lIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5fYW5pbWF0aW9uRG9uZShlKX0pKSxBaCgxLCJhc3luYyIpLGt1KDIpLEFtKCkpLDImZSl7bGV0IHQ7cHUoIm1hdC10b29sdGlwLWhhbmRzZXQiLG51bGw9PSh0PVRoKDEsNSxuLl9pc0hhbmRzZXQpKT9udWxsOnQubWF0Y2hlcyksRG0oIm5nQ2xhc3MiLG4udG9vbHRpcENsYXNzKSgiQHN0YXRlIixuLl92aXNpYmlsaXR5KSxyYygyKSxTdShuLm1lc3NhZ2UpfX0sZGlyZWN0aXZlczpbYU1dLHBpcGVzOlt3TV0sc3R5bGVzOlsiLm1hdC10b29sdGlwLXBhbmVse3BvaW50ZXItZXZlbnRzOm5vbmUgIWltcG9ydGFudH0ubWF0LXRvb2x0aXB7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjRweDttYXJnaW46MTRweDttYXgtd2lkdGg6MjUwcHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdG9vbHRpcHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXRvb2x0aXAtaGFuZHNldHttYXJnaW46MjRweDtwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjE2cHh9XG4iXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltEUS50b29sdGlwU3RhdGVdfSxjaGFuZ2VEZXRlY3Rpb246MH0pLEJRLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VWd9LHt0eXBlOlBMfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChCUSxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJtYXQtdG9vbHRpcC1jb21wb25lbnQiLHRlbXBsYXRlOic8ZGl2IGNsYXNzPSJtYXQtdG9vbHRpcCJcbiAgICAgW25nQ2xhc3NdPSJ0b29sdGlwQ2xhc3MiXG4gICAgIFtjbGFzcy5tYXQtdG9vbHRpcC1oYW5kc2V0XT0iKF9pc0hhbmRzZXQgfCBhc3luYyk/Lm1hdGNoZXMiXG4gICAgIFtAc3RhdGVdPSJfdmlzaWJpbGl0eSJcbiAgICAgKEBzdGF0ZS5zdGFydCk9Il9hbmltYXRpb25TdGFydCgpIlxuICAgICAoQHN0YXRlLmRvbmUpPSJfYW5pbWF0aW9uRG9uZSgkZXZlbnQpIj57e21lc3NhZ2V9fTwvZGl2PlxuJyxlbmNhcHN1bGF0aW9uOkhuLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaCxhbmltYXRpb25zOltEUS50b29sdGlwU3RhdGVdLGhvc3Q6eyJbc3R5bGUuem9vbV0iOidfdmlzaWJpbGl0eSA9PT0gInZpc2libGUiID8gMSA6IG51bGwnLCJhcmlhLWhpZGRlbiI6InRydWUifSxzdHlsZXM6WyIubWF0LXRvb2x0aXAtcGFuZWx7cG9pbnRlci1ldmVudHM6bm9uZSAhaW1wb3J0YW50fS5tYXQtdG9vbHRpcHtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NHB4O21hcmdpbjoxNHB4O21heC13aWR0aDoyNTBweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10b29sdGlwe291dGxpbmU6c29saWQgMXB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0e21hcmdpbjoyNHB4O3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MTZweH1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6VWd9LHt0eXBlOlBMfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIFZRe31mdW5jdGlvbiBqUSh0LGUpe2lmKDEmdCYmKFJtKDAsIm1hdC1vcHRpb24iLDE5KSxrdSgxKSxBbSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7RG0oInZhbHVlIix0KSxyYygxKSxEdSgiICIsdCwiICIpfX1mdW5jdGlvbiBVUSh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsIm1hdC1mb3JtLWZpZWxkIiwxNiksUm0oMSwibWF0LXNlbGVjdCIsMTcpLFZtKCJzZWxlY3Rpb25DaGFuZ2UiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgyKS5fY2hhbmdlUGFnZVNpemUobi52YWx1ZSl9KSksUXAoMixqUSwyLDIsIm1hdC1vcHRpb24iLDE4KSxBbSgpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PVltKDIpO0RtKCJhcHBlYXJhbmNlIix0Ll9mb3JtRmllbGRBcHBlYXJhbmNlKSgiY29sb3IiLHQuY29sb3IpLHJjKDEpLERtKCJ2YWx1ZSIsdC5wYWdlU2l6ZSkoImRpc2FibGVkIix0LmRpc2FibGVkKSgiYXJpYS1sYWJlbCIsdC5faW50bC5pdGVtc1BlclBhZ2VMYWJlbCkscmMoMSksRG0oIm5nRm9yT2YiLHQuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucyl9fWZ1bmN0aW9uIEdRKHQsZSl7aWYoMSZ0JiYoUm0oMCwiZGl2IiwyMCksa3UoMSksQW0oKSksMiZ0KXtjb25zdCB0PVltKDIpO3JjKDEpLFN1KHQucGFnZVNpemUpfX1mdW5jdGlvbiBXUSh0LGUpe2lmKDEmdCYmKFJtKDAsImRpdiIsMTIpLFJtKDEsImRpdiIsMTMpLGt1KDIpLEFtKCksUXAoMyxVUSwzLDYsIm1hdC1mb3JtLWZpZWxkIiwxNCksUXAoNCxHUSwyLDEsImRpdiIsMTUpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgpO3JjKDIpLER1KCIgIix0Ll9pbnRsLml0ZW1zUGVyUGFnZUxhYmVsLCIgIikscmMoMSksRG0oIm5nSWYiLHQuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGg+MSkscmMoMSksRG0oIm5nSWYiLHQuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGg8PTEpfX1mdW5jdGlvbiBZUSh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsImJ1dHRvbiIsMjEpLFZtKCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaGkodCksWW0oKS5maXJzdFBhZ2UoKX0pKSxxaSgpLFJtKDEsInN2ZyIsNyksVG0oMiwicGF0aCIsMjIpLEFtKCksQW0oKX1pZigyJnQpe2NvbnN0IHQ9WW0oKTtEbSgibWF0VG9vbHRpcCIsdC5faW50bC5maXJzdFBhZ2VMYWJlbCkoIm1hdFRvb2x0aXBEaXNhYmxlZCIsdC5fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSkoIm1hdFRvb2x0aXBQb3NpdGlvbiIsImFib3ZlIikoImRpc2FibGVkIix0Ll9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpKSxqcCgiYXJpYS1sYWJlbCIsdC5faW50bC5maXJzdFBhZ2VMYWJlbCl9fWZ1bmN0aW9uIHFRKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7cWkoKSxaaSgpLFJtKDAsImJ1dHRvbiIsMjMpLFZtKCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaGkodCksWW0oKS5sYXN0UGFnZSgpfSkpLHFpKCksUm0oMSwic3ZnIiw3KSxUbSgyLCJwYXRoIiwyNCksQW0oKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgpO0RtKCJtYXRUb29sdGlwIix0Ll9pbnRsLmxhc3RQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLHQuX25leHRCdXR0b25zRGlzYWJsZWQoKSkoIm1hdFRvb2x0aXBQb3NpdGlvbiIsImFib3ZlIikoImRpc2FibGVkIix0Ll9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpLGpwKCJhcmlhLWxhYmVsIix0Ll9pbnRsLmxhc3RQYWdlTGFiZWwpfX1WUS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VlEpfSxWUS7JtW1vZD1hbyh7dHlwZTpWUX0pLFZRLsm1aW5qPXZuKHtwcm92aWRlcnM6W1RRXSxpbXBvcnRzOltbTkksV00seUwsWEldLFhJLHlGXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoVlEsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltOSSxXTSx5TCxYSV0sZXhwb3J0czpbRlEsQlEsWEkseUZdLGRlY2xhcmF0aW9uczpbRlEsQlFdLGVudHJ5Q29tcG9uZW50czpbQlFdLHByb3ZpZGVyczpbVFFdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oVlEse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltGUSxCUV19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bTkksV00seUwsWEldfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW0ZRLEJRLFhJLHlGXX19KTtjbGFzcyBaUXtjb25zdHJ1Y3Rvcigpe3RoaXMuY2hhbmdlcz1uZXcgSSx0aGlzLml0ZW1zUGVyUGFnZUxhYmVsPSJJdGVtcyBwZXIgcGFnZToiLHRoaXMubmV4dFBhZ2VMYWJlbD0iTmV4dCBwYWdlIix0aGlzLnByZXZpb3VzUGFnZUxhYmVsPSJQcmV2aW91cyBwYWdlIix0aGlzLmZpcnN0UGFnZUxhYmVsPSJGaXJzdCBwYWdlIix0aGlzLmxhc3RQYWdlTGFiZWw9Ikxhc3QgcGFnZSIsdGhpcy5nZXRSYW5nZUxhYmVsPSh0LGUsbik9PntpZigwPT1ufHwwPT1lKXJldHVybmAwIG9mICR7bn1gO2NvbnN0IG89dCplO3JldHVybmAke28rMX0g4oCTICR7bzwobj1NYXRoLm1heChuLDApKT9NYXRoLm1pbihvK2Usbik6bytlfSBvZiAke259YH19fVpRLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxaUSl9LFpRLsm1cHJvdj1Nbih7ZmFjdG9yeTpmdW5jdGlvbiB0KCl7cmV0dXJuIG5ldyBaUX0sdG9rZW46WlEscHJvdmlkZWRJbjoicm9vdCJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFpRLFt7dHlwZTppbSxhcmdzOlt7cHJvdmlkZWRJbjoicm9vdCJ9XX1dLChmdW5jdGlvbigpe3JldHVybltdfSksbnVsbCk7Y29uc3QgWFE9e3Byb3ZpZGU6WlEsZGVwczpbW25ldyBTcixuZXcgRXIsWlFdXSx1c2VGYWN0b3J5OmZ1bmN0aW9uIEtRKHQpe3JldHVybiB0fHxuZXcgWlF9fSxKUT1uZXcgR2EoIk1BVF9QQUdJTkFUT1JfREVGQVVMVF9PUFRJT05TIiksUVE9S0koZUgoY2xhc3N7fSkpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyAkUSBleHRlbmRzIFFRe2NvbnN0cnVjdG9yKHQsZSxuKXtpZihzdXBlcigpLHRoaXMuX2ludGw9dCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1lLHRoaXMuX3BhZ2VJbmRleD0wLHRoaXMuX2xlbmd0aD0wLHRoaXMuX3BhZ2VTaXplT3B0aW9ucz1bXSx0aGlzLl9oaWRlUGFnZVNpemU9ITEsdGhpcy5fc2hvd0ZpcnN0TGFzdEJ1dHRvbnM9ITEsdGhpcy5wYWdlPW5ldyBMaCx0aGlzLl9pbnRsQ2hhbmdlcz10LmNoYW5nZXMuc3Vic2NyaWJlKCgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpKSxuKXtjb25zdHtwYWdlU2l6ZTp0LHBhZ2VTaXplT3B0aW9uczplLGhpZGVQYWdlU2l6ZTpvLHNob3dGaXJzdExhc3RCdXR0b25zOml9PW47bnVsbCE9dCYmKHRoaXMuX3BhZ2VTaXplPXQpLG51bGwhPWUmJih0aGlzLl9wYWdlU2l6ZU9wdGlvbnM9ZSksbnVsbCE9byYmKHRoaXMuX2hpZGVQYWdlU2l6ZT1vKSxudWxsIT1pJiYodGhpcy5fc2hvd0ZpcnN0TGFzdEJ1dHRvbnM9aSl9fWdldCBwYWdlSW5kZXgoKXtyZXR1cm4gdGhpcy5fcGFnZUluZGV4fXNldCBwYWdlSW5kZXgodCl7dGhpcy5fcGFnZUluZGV4PU1hdGgubWF4KF96KHQpLDApLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbGVuZ3RofXNldCBsZW5ndGgodCl7dGhpcy5fbGVuZ3RoPV96KHQpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBwYWdlU2l6ZSgpe3JldHVybiB0aGlzLl9wYWdlU2l6ZX1zZXQgcGFnZVNpemUodCl7dGhpcy5fcGFnZVNpemU9TWF0aC5tYXgoX3oodCksMCksdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl9Z2V0IHBhZ2VTaXplT3B0aW9ucygpe3JldHVybiB0aGlzLl9wYWdlU2l6ZU9wdGlvbnN9c2V0IHBhZ2VTaXplT3B0aW9ucyh0KXt0aGlzLl9wYWdlU2l6ZU9wdGlvbnM9KHR8fFtdKS5tYXAoKHQ9Pl96KHQpKSksdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl9Z2V0IGhpZGVQYWdlU2l6ZSgpe3JldHVybiB0aGlzLl9oaWRlUGFnZVNpemV9c2V0IGhpZGVQYWdlU2l6ZSh0KXt0aGlzLl9oaWRlUGFnZVNpemU9eXoodCl9Z2V0IHNob3dGaXJzdExhc3RCdXR0b25zKCl7cmV0dXJuIHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zfXNldCBzaG93Rmlyc3RMYXN0QnV0dG9ucyh0KXt0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz15eih0KX1uZ09uSW5pdCgpe3RoaXMuX2luaXRpYWxpemVkPSEwLHRoaXMuX3VwZGF0ZURpc3BsYXllZFBhZ2VTaXplT3B0aW9ucygpLHRoaXMuX21hcmtJbml0aWFsaXplZCgpfW5nT25EZXN0cm95KCl7dGhpcy5faW50bENoYW5nZXMudW5zdWJzY3JpYmUoKX1uZXh0UGFnZSgpe2lmKCF0aGlzLmhhc05leHRQYWdlKCkpcmV0dXJuO2NvbnN0IHQ9dGhpcy5wYWdlSW5kZXg7dGhpcy5wYWdlSW5kZXgrKyx0aGlzLl9lbWl0UGFnZUV2ZW50KHQpfXByZXZpb3VzUGFnZSgpe2lmKCF0aGlzLmhhc1ByZXZpb3VzUGFnZSgpKXJldHVybjtjb25zdCB0PXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4LS0sdGhpcy5fZW1pdFBhZ2VFdmVudCh0KX1maXJzdFBhZ2UoKXtpZighdGhpcy5oYXNQcmV2aW91c1BhZ2UoKSlyZXR1cm47Y29uc3QgdD10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD0wLHRoaXMuX2VtaXRQYWdlRXZlbnQodCl9bGFzdFBhZ2UoKXtpZighdGhpcy5oYXNOZXh0UGFnZSgpKXJldHVybjtjb25zdCB0PXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PXRoaXMuZ2V0TnVtYmVyT2ZQYWdlcygpLTEsdGhpcy5fZW1pdFBhZ2VFdmVudCh0KX1oYXNQcmV2aW91c1BhZ2UoKXtyZXR1cm4gdGhpcy5wYWdlSW5kZXg+PTEmJjAhPXRoaXMucGFnZVNpemV9aGFzTmV4dFBhZ2UoKXtjb25zdCB0PXRoaXMuZ2V0TnVtYmVyT2ZQYWdlcygpLTE7cmV0dXJuIHRoaXMucGFnZUluZGV4PHQmJjAhPXRoaXMucGFnZVNpemV9Z2V0TnVtYmVyT2ZQYWdlcygpe3JldHVybiB0aGlzLnBhZ2VTaXplP01hdGguY2VpbCh0aGlzLmxlbmd0aC90aGlzLnBhZ2VTaXplKTowfV9jaGFuZ2VQYWdlU2l6ZSh0KXtjb25zdCBlPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PU1hdGguZmxvb3IodGhpcy5wYWdlSW5kZXgqdGhpcy5wYWdlU2l6ZS90KXx8MCx0aGlzLnBhZ2VTaXplPXQsdGhpcy5fZW1pdFBhZ2VFdmVudChlKX1fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNOZXh0UGFnZSgpfV9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNQcmV2aW91c1BhZ2UoKX1fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl7dGhpcy5faW5pdGlhbGl6ZWQmJih0aGlzLnBhZ2VTaXplfHwodGhpcy5fcGFnZVNpemU9MCE9dGhpcy5wYWdlU2l6ZU9wdGlvbnMubGVuZ3RoP3RoaXMucGFnZVNpemVPcHRpb25zWzBdOjUwKSx0aGlzLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnM9dGhpcy5wYWdlU2l6ZU9wdGlvbnMuc2xpY2UoKSwtMT09PXRoaXMuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5pbmRleE9mKHRoaXMucGFnZVNpemUpJiZ0aGlzLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMucHVzaCh0aGlzLnBhZ2VTaXplKSx0aGlzLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMuc29ydCgoKHQsZSk9PnQtZSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fZW1pdFBhZ2VFdmVudCh0KXt0aGlzLnBhZ2UuZW1pdCh7cHJldmlvdXNQYWdlSW5kZXg6dCxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgscGFnZVNpemU6dGhpcy5wYWdlU2l6ZSxsZW5ndGg6dGhpcy5sZW5ndGh9KX19JFEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fCRRKShTbShaUSksU20oVWcpLFNtKHZvaWQgMCkpfSwkUS7JtWRpcj1sbyh7dHlwZTokUSxpbnB1dHM6e3BhZ2VJbmRleDoicGFnZUluZGV4IixsZW5ndGg6Imxlbmd0aCIscGFnZVNpemU6InBhZ2VTaXplIixwYWdlU2l6ZU9wdGlvbnM6InBhZ2VTaXplT3B0aW9ucyIsaGlkZVBhZ2VTaXplOiJoaWRlUGFnZVNpemUiLHNob3dGaXJzdExhc3RCdXR0b25zOiJzaG93Rmlyc3RMYXN0QnV0dG9ucyIsY29sb3I6ImNvbG9yIn0sb3V0cHV0czp7cGFnZToicGFnZSJ9LGZlYXR1cmVzOlt4cF19KSwkUS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlpRfSx7dHlwZTpVZ30se3R5cGU6dm9pZCAwfV0sJFEucHJvcERlY29yYXRvcnM9e2NvbG9yOlt7dHlwZTp4eX1dLHBhZ2VJbmRleDpbe3R5cGU6eHl9XSxsZW5ndGg6W3t0eXBlOnh5fV0scGFnZVNpemU6W3t0eXBlOnh5fV0scGFnZVNpemVPcHRpb25zOlt7dHlwZTp4eX1dLGhpZGVQYWdlU2l6ZTpbe3R5cGU6eHl9XSxzaG93Rmlyc3RMYXN0QnV0dG9uczpbe3R5cGU6eHl9XSxwYWdlOlt7dHlwZTpPeX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKCRRLFt7dHlwZTpDeX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpaUX0se3R5cGU6VWd9LHt0eXBlOnZvaWQgMH1dfSkse3BhZ2U6W3t0eXBlOk95fV0scGFnZUluZGV4Olt7dHlwZTp4eX1dLGxlbmd0aDpbe3R5cGU6eHl9XSxwYWdlU2l6ZTpbe3R5cGU6eHl9XSxwYWdlU2l6ZU9wdGlvbnM6W3t0eXBlOnh5fV0saGlkZVBhZ2VTaXplOlt7dHlwZTp4eX1dLHNob3dGaXJzdExhc3RCdXR0b25zOlt7dHlwZTp4eX1dLGNvbG9yOlt7dHlwZTp4eX1dfSk7Y2xhc3MgdCQgZXh0ZW5kcyAkUXtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCxlLG4pLG4mJm51bGwhPW4uZm9ybUZpZWxkQXBwZWFyYW5jZSYmKHRoaXMuX2Zvcm1GaWVsZEFwcGVhcmFuY2U9bi5mb3JtRmllbGRBcHBlYXJhbmNlKX19dCQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHQkKShTbShaUSksU20oVWcpLFNtKEpRLDgpKX0sdCQuybVjbXA9dG8oe3R5cGU6dCQsc2VsZWN0b3JzOltbIm1hdC1wYWdpbmF0b3IiXV0saG9zdEF0dHJzOlsicm9sZSIsImdyb3VwIiwxLCJtYXQtcGFnaW5hdG9yIl0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxleHBvcnRBczpbIm1hdFBhZ2luYXRvciJdLGZlYXR1cmVzOlt4cF0sZGVjbHM6MTQsdmFyczoxNCxjb25zdHM6W1sxLCJtYXQtcGFnaW5hdG9yLW91dGVyLWNvbnRhaW5lciJdLFsxLCJtYXQtcGFnaW5hdG9yLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXJhbmdlLWFjdGlvbnMiXSxbMSwibWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLWZpcnN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLXByZXZpb3VzIiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsidmlld0JveCIsIjAgMCAyNCAyNCIsImZvY3VzYWJsZSIsImZhbHNlIiwxLCJtYXQtcGFnaW5hdG9yLWljb24iXSxbImQiLCJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1uZXh0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiZCIsIk0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1sYXN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbCJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS12YWx1ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciJdLFszLCJ2YWx1ZSIsImRpc2FibGVkIiwiYXJpYS1sYWJlbCIsInNlbGVjdGlvbkNoYW5nZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl0sWzEsIm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXZhbHVlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tZmlyc3QiLDMsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwUG9zaXRpb24iLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJkIiwiTTE4LjQxIDE2LjU5TDEzLjgyIDEybDQuNTktNC41OUwxNyA2bC02IDYgNiA2ek02IDZoMnYxMkg2eiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLWxhc3QiLDMsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwUG9zaXRpb24iLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJkIiwiTTUuNTkgNy40MUwxMC4xOCAxMmwtNC41OSA0LjU5TDcgMThsNi02LTYtNnpNMTYgNmgydjEyaC0yeiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiZGl2IiwwKSxSbSgxLCJkaXYiLDEpLFFwKDIsV1EsNSwzLCJkaXYiLDIpLFJtKDMsImRpdiIsMyksUm0oNCwiZGl2Iiw0KSxrdSg1KSxBbSgpLFFwKDYsWVEsMyw1LCJidXR0b24iLDUpLFJtKDcsImJ1dHRvbiIsNiksVm0oImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnByZXZpb3VzUGFnZSgpfSkpLHFpKCksUm0oOCwic3ZnIiw3KSxUbSg5LCJwYXRoIiw4KSxBbSgpLEFtKCksWmkoKSxSbSgxMCwiYnV0dG9uIiw5KSxWbSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ubmV4dFBhZ2UoKX0pKSxxaSgpLFJtKDExLCJzdmciLDcpLFRtKDEyLCJwYXRoIiwxMCksQW0oKSxBbSgpLFFwKDEzLHFRLDMsNSwiYnV0dG9uIiwxMSksQW0oKSxBbSgpLEFtKCkpLDImZSYmKHJjKDIpLERtKCJuZ0lmIiwhbi5oaWRlUGFnZVNpemUpLHJjKDMpLER1KCIgIixuLl9pbnRsLmdldFJhbmdlTGFiZWwobi5wYWdlSW5kZXgsbi5wYWdlU2l6ZSxuLmxlbmd0aCksIiAiKSxyYygxKSxEbSgibmdJZiIsbi5zaG93Rmlyc3RMYXN0QnV0dG9ucykscmMoMSksRG0oIm1hdFRvb2x0aXAiLG4uX2ludGwucHJldmlvdXNQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLG4uX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsbi5fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSksanAoImFyaWEtbGFiZWwiLG4uX2ludGwucHJldmlvdXNQYWdlTGFiZWwpLHJjKDMpLERtKCJtYXRUb29sdGlwIixuLl9pbnRsLm5leHRQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLG4uX25leHRCdXR0b25zRGlzYWJsZWQoKSkoIm1hdFRvb2x0aXBQb3NpdGlvbiIsImFib3ZlIikoImRpc2FibGVkIixuLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpLGpwKCJhcmlhLWxhYmVsIixuLl9pbnRsLm5leHRQYWdlTGFiZWwpLHJjKDMpLERtKCJuZ0lmIixuLnNob3dGaXJzdExhc3RCdXR0b25zKSl9LGRpcmVjdGl2ZXM6W2RNLFhILEZRLEFWLEFHLGxNLEJIXSxzdHlsZXM6WyIubWF0LXBhZ2luYXRvcntkaXNwbGF5OmJsb2NrfS5tYXQtcGFnaW5hdG9yLW91dGVyLWNvbnRhaW5lcntkaXNwbGF5OmZsZXh9Lm1hdC1wYWdpbmF0b3ItY29udGFpbmVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6MCA4cHg7ZmxleC13cmFwOndyYXAtcmV2ZXJzZTt3aWR0aDoxMDAlfS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7bWFyZ2luLXJpZ2h0OjhweH1bZGlyPXJ0bF0gLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXple21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjhweH0ubWF0LXBhZ2luYXRvci1wYWdlLXNpemUtbGFiZWx7bWFyZ2luOjAgNHB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3R7bWFyZ2luOjZweCA0cHggMCA0cHg7d2lkdGg6NTZweH0ubWF0LXBhZ2luYXRvci1wYWdlLXNpemUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZXt3aWR0aDo2NHB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxse3dpZHRoOjY0cHh9Lm1hdC1wYWdpbmF0b3ItcmFuZ2UtbGFiZWx7bWFyZ2luOjAgMzJweCAwIDI0cHh9Lm1hdC1wYWdpbmF0b3ItcmFuZ2UtYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5tYXQtcGFnaW5hdG9yLWljb257d2lkdGg6MjhweDtmaWxsOmN1cnJlbnRDb2xvcn1bZGlyPXJ0bF0gLm1hdC1wYWdpbmF0b3ItaWNvbnt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXBhZ2luYXRvci1pY29ue2ZpbGw6Q2FudmFzVGV4dH1cbiJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLHQkLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WlF9LHt0eXBlOlVnfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W0pRXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh0JCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJtYXQtcGFnaW5hdG9yIixleHBvcnRBczoibWF0UGFnaW5hdG9yIix0ZW1wbGF0ZTonPGRpdiBjbGFzcz0ibWF0LXBhZ2luYXRvci1vdXRlci1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJtYXQtcGFnaW5hdG9yLWNvbnRhaW5lciI+XG4gICAgPGRpdiBjbGFzcz0ibWF0LXBhZ2luYXRvci1wYWdlLXNpemUiICpuZ0lmPSIhaGlkZVBhZ2VTaXplIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLWxhYmVsIj5cbiAgICAgICAge3tfaW50bC5pdGVtc1BlclBhZ2VMYWJlbH19XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgICpuZ0lmPSJfZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLmxlbmd0aCA+IDEiXG4gICAgICAgIFthcHBlYXJhbmNlXT0iX2Zvcm1GaWVsZEFwcGVhcmFuY2UhIlxuICAgICAgICBbY29sb3JdPSJjb2xvciJcbiAgICAgICAgY2xhc3M9Im1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdCI+XG4gICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgW3ZhbHVlXT0icGFnZVNpemUiXG4gICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgW2FyaWEtbGFiZWxdPSJfaW50bC5pdGVtc1BlclBhZ2VMYWJlbCJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT0iX2NoYW5nZVBhZ2VTaXplKCRldmVudC52YWx1ZSkiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhZ2VTaXplT3B0aW9uIG9mIF9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMiIFt2YWx1ZV09InBhZ2VTaXplT3B0aW9uIj5cbiAgICAgICAgICAgIHt7cGFnZVNpemVPcHRpb259fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz0ibWF0LXBhZ2luYXRvci1wYWdlLXNpemUtdmFsdWUiXG4gICAgICAgICpuZ0lmPSJfZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLmxlbmd0aCA8PSAxIj57e3BhZ2VTaXplfX08L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9Im1hdC1wYWdpbmF0b3ItcmFuZ2UtYWN0aW9ucyI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtcGFnaW5hdG9yLXJhbmdlLWxhYmVsIj5cbiAgICAgICAge3tfaW50bC5nZXRSYW5nZUxhYmVsKHBhZ2VJbmRleCwgcGFnZVNpemUsIGxlbmd0aCl9fVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgY2xhc3M9Im1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1maXJzdCJcbiAgICAgICAgICAgICAgKGNsaWNrKT0iZmlyc3RQYWdlKCkiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPSJfaW50bC5maXJzdFBhZ2VMYWJlbCJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJfaW50bC5maXJzdFBhZ2VMYWJlbCJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09Il9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uXT0iXCdhYm92ZVwnIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJfcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSJcbiAgICAgICAgICAgICAgKm5nSWY9InNob3dGaXJzdExhc3RCdXR0b25zIj5cbiAgICAgICAgPHN2ZyBjbGFzcz0ibWF0LXBhZ2luYXRvci1pY29uIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZvY3VzYWJsZT0iZmFsc2UiPlxuICAgICAgICAgIDxwYXRoIGQ9Ik0xOC40MSAxNi41OUwxMy44MiAxMmw0LjU5LTQuNTlMMTcgNmwtNiA2IDYgNnpNNiA2aDJ2MTJINnoiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgY2xhc3M9Im1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1wcmV2aW91cyJcbiAgICAgICAgICAgICAgKGNsaWNrKT0icHJldmlvdXNQYWdlKCkiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPSJfaW50bC5wcmV2aW91c1BhZ2VMYWJlbCJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJfaW50bC5wcmV2aW91c1BhZ2VMYWJlbCJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09Il9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uXT0iXCdhYm92ZVwnIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJfcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSI+XG4gICAgICAgIDxzdmcgY2xhc3M9Im1hdC1wYWdpbmF0b3ItaWNvbiIgdmlld0JveD0iMCAwIDI0IDI0IiBmb2N1c2FibGU9ImZhbHNlIj5cbiAgICAgICAgICA8cGF0aCBkPSJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgY2xhc3M9Im1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1uZXh0IlxuICAgICAgICAgICAgICAoY2xpY2spPSJuZXh0UGFnZSgpIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT0iX2ludGwubmV4dFBhZ2VMYWJlbCJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJfaW50bC5uZXh0UGFnZUxhYmVsIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcERpc2FibGVkXT0iX25leHRCdXR0b25zRGlzYWJsZWQoKSJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09IlwnYWJvdmVcJyJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iX25leHRCdXR0b25zRGlzYWJsZWQoKSI+XG4gICAgICAgIDxzdmcgY2xhc3M9Im1hdC1wYWdpbmF0b3ItaWNvbiIgdmlld0JveD0iMCAwIDI0IDI0IiBmb2N1c2FibGU9ImZhbHNlIj5cbiAgICAgICAgICA8cGF0aCBkPSJNMTAgNkw4LjU5IDcuNDEgMTMuMTcgMTJsLTQuNTggNC41OUwxMCAxOGw2LTZ6Ii8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIGNsYXNzPSJtYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tbGFzdCJcbiAgICAgICAgICAgICAgKGNsaWNrKT0ibGFzdFBhZ2UoKSJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09Il9pbnRsLmxhc3RQYWdlTGFiZWwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iX2ludGwubGFzdFBhZ2VMYWJlbCJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09Il9uZXh0QnV0dG9uc0Rpc2FibGVkKCkiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPSJcJ2Fib3ZlXCciXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09Il9uZXh0QnV0dG9uc0Rpc2FibGVkKCkiXG4gICAgICAgICAgICAgICpuZ0lmPSJzaG93Rmlyc3RMYXN0QnV0dG9ucyI+XG4gICAgICAgIDxzdmcgY2xhc3M9Im1hdC1wYWdpbmF0b3ItaWNvbiIgdmlld0JveD0iMCAwIDI0IDI0IiBmb2N1c2FibGU9ImZhbHNlIj5cbiAgICAgICAgICA8cGF0aCBkPSJNNS41OSA3LjQxTDEwLjE4IDEybC00LjU5IDQuNTlMNyAxOGw2LTYtNi02ek0xNiA2aDJ2MTJoLTJ6Ii8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGlucHV0czpbImRpc2FibGVkIl0saG9zdDp7Y2xhc3M6Im1hdC1wYWdpbmF0b3IiLHJvbGU6Imdyb3VwIn0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaCxlbmNhcHN1bGF0aW9uOkhuLk5vbmUsc3R5bGVzOlsiLm1hdC1wYWdpbmF0b3J7ZGlzcGxheTpibG9ja30ubWF0LXBhZ2luYXRvci1vdXRlci1jb250YWluZXJ7ZGlzcGxheTpmbGV4fS5tYXQtcGFnaW5hdG9yLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtwYWRkaW5nOjAgOHB4O2ZsZXgtd3JhcDp3cmFwLXJldmVyc2U7d2lkdGg6MTAwJX0ubWF0LXBhZ2luYXRvci1wYWdlLXNpemV7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZXttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDo4cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLWxhYmVse21hcmdpbjowIDRweH0ubWF0LXBhZ2luYXRvci1wYWdlLXNpemUtc2VsZWN0e21hcmdpbjo2cHggNHB4IDAgNHB4O3dpZHRoOjU2cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmV7d2lkdGg6NjRweH0ubWF0LXBhZ2luYXRvci1wYWdlLXNpemUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbHt3aWR0aDo2NHB4fS5tYXQtcGFnaW5hdG9yLXJhbmdlLWxhYmVse21hcmdpbjowIDMycHggMCAyNHB4fS5tYXQtcGFnaW5hdG9yLXJhbmdlLWFjdGlvbnN7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LXBhZ2luYXRvci1pY29ue3dpZHRoOjI4cHg7ZmlsbDpjdXJyZW50Q29sb3J9W2Rpcj1ydGxdIC5tYXQtcGFnaW5hdG9yLWljb257dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1wYWdpbmF0b3ItaWNvbntmaWxsOkNhbnZhc1RleHR9XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlpRfSx7dHlwZTpVZ30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltKUV19XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBlJHt9ZnVuY3Rpb24gbiQodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJkaXYiLDMpLFZtKCJAYXJyb3dQb3NpdGlvbi5zdGFydCIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaGkodCksWW0oKS5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMH0pKSgiQGFycm93UG9zaXRpb24uZG9uZSIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaGkodCksWW0oKS5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMX0pKSxUbSgxLCJkaXYiLDQpLFJtKDIsImRpdiIsNSksVG0oMywiZGl2Iiw2KSxUbSg0LCJkaXYiLDcpLFRtKDUsImRpdiIsOCksQW0oKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgpO0RtKCJAYXJyb3dPcGFjaXR5Iix0Ll9nZXRBcnJvd1ZpZXdTdGF0ZSgpKSgiQGFycm93UG9zaXRpb24iLHQuX2dldEFycm93Vmlld1N0YXRlKCkpKCJAYWxsb3dDaGlsZHJlbiIsdC5fZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpKSxyYygyKSxEbSgiQGluZGljYXRvciIsdC5fZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpKSxyYygxKSxEbSgiQGxlZnRQb2ludGVyIix0Ll9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpLHJjKDEpLERtKCJAcmlnaHRQb2ludGVyIix0Ll9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpfX1lJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZSQpfSxlJC7JtW1vZD1hbyh7dHlwZTplJH0pLGUkLsm1aW5qPXZuKHtwcm92aWRlcnM6W1hRXSxpbXBvcnRzOltbV00sSkgsVEcsVlEsWEldXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoZSQsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltXTSxKSCxURyxWUSxYSV0sZXhwb3J0czpbdCRdLGRlY2xhcmF0aW9uczpbdCRdLHByb3ZpZGVyczpbWFFdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oZSQse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVyblt0JF19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bV00sSkgsVEcsVlEsWEldfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW3QkXX19KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IG8kPW5ldyBHYSgiTUFUX1NPUlRfREVGQVVMVF9PUFRJT05TIiksaSQ9ZUgoS0koY2xhc3N7fSkpO2NsYXNzIGEkIGV4dGVuZHMgaSR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9kZWZhdWx0T3B0aW9ucz10LHRoaXMuc29ydGFibGVzPW5ldyBNYXAsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBJLHRoaXMuc3RhcnQ9ImFzYyIsdGhpcy5fZGlyZWN0aW9uPSIiLHRoaXMuc29ydENoYW5nZT1uZXcgTGh9Z2V0IGRpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXJlY3Rpb259c2V0IGRpcmVjdGlvbih0KXtpZih0JiYiYXNjIiE9PXQmJiJkZXNjIiE9PXQmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyhmdW5jdGlvbiBlKHQpe3JldHVybiBFcnJvcihgJHt0fSBpcyBub3QgYSB2YWxpZCBzb3J0IGRpcmVjdGlvbiAoJ2FzYycgb3IgJ2Rlc2MnKS5gKX0pKHQpO3RoaXMuX2RpcmVjdGlvbj10fWdldCBkaXNhYmxlQ2xlYXIoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZUNsZWFyfXNldCBkaXNhYmxlQ2xlYXIodCl7dGhpcy5fZGlzYWJsZUNsZWFyPXl6KHQpfXJlZ2lzdGVyKHQpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpe2lmKCF0LmlkKXRocm93KGZ1bmN0aW9uIGUoKXtyZXR1cm4gRXJyb3IoIk1hdFNvcnRIZWFkZXIgbXVzdCBiZSBwcm92aWRlZCB3aXRoIGEgdW5pcXVlIGlkLiIpfSkoKTtpZih0aGlzLnNvcnRhYmxlcy5oYXModC5pZCkpdGhyb3coZnVuY3Rpb24gbih0KXtyZXR1cm4gRXJyb3IoYENhbm5vdCBoYXZlIHR3byBNYXRTb3J0YWJsZXMgd2l0aCB0aGUgc2FtZSBpZCAoJHt0fSkuYCl9KSh0LmlkKX10aGlzLnNvcnRhYmxlcy5zZXQodC5pZCx0KX1kZXJlZ2lzdGVyKHQpe3RoaXMuc29ydGFibGVzLmRlbGV0ZSh0LmlkKX1zb3J0KHQpe3RoaXMuYWN0aXZlIT10LmlkPyh0aGlzLmFjdGl2ZT10LmlkLHRoaXMuZGlyZWN0aW9uPXQuc3RhcnQ/dC5zdGFydDp0aGlzLnN0YXJ0KTp0aGlzLmRpcmVjdGlvbj10aGlzLmdldE5leHRTb3J0RGlyZWN0aW9uKHQpLHRoaXMuc29ydENoYW5nZS5lbWl0KHthY3RpdmU6dGhpcy5hY3RpdmUsZGlyZWN0aW9uOnRoaXMuZGlyZWN0aW9ufSl9Z2V0TmV4dFNvcnREaXJlY3Rpb24odCl7dmFyIGUsbixvO2lmKCF0KXJldHVybiIiO2NvbnN0IGk9bnVsbCE9PShuPW51bGwhPT0oZT1udWxsPT10P3ZvaWQgMDp0LmRpc2FibGVDbGVhcikmJnZvaWQgMCE9PWU/ZTp0aGlzLmRpc2FibGVDbGVhcikmJnZvaWQgMCE9PW4/bjohIShudWxsPT09KG89dGhpcy5fZGVmYXVsdE9wdGlvbnMpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmRpc2FibGVDbGVhcik7bGV0IGE9KGZ1bmN0aW9uIHIodCxlKXtsZXQgbj1bImFzYyIsImRlc2MiXTtyZXR1cm4iZGVzYyI9PXQmJm4ucmV2ZXJzZSgpLGV8fG4ucHVzaCgiIiksbn0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovKSh0LnN0YXJ0fHx0aGlzLnN0YXJ0LGkpLHM9YS5pbmRleE9mKHRoaXMuZGlyZWN0aW9uKSsxO3JldHVybiBzPj1hLmxlbmd0aCYmKHM9MCksYVtzXX1uZ09uSW5pdCgpe3RoaXMuX21hcmtJbml0aWFsaXplZCgpfW5nT25DaGFuZ2VzKCl7dGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfX1hJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8YSQpKFNtKG8kLDgpKX0sYSQuybVkaXI9bG8oe3R5cGU6YSQsc2VsZWN0b3JzOltbIiIsIm1hdFNvcnQiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtc29ydCJdLGlucHV0czp7ZGlzYWJsZWQ6WyJtYXRTb3J0RGlzYWJsZWQiLCJkaXNhYmxlZCJdLHN0YXJ0OlsibWF0U29ydFN0YXJ0Iiwic3RhcnQiXSxkaXJlY3Rpb246WyJtYXRTb3J0RGlyZWN0aW9uIiwiZGlyZWN0aW9uIl0sZGlzYWJsZUNsZWFyOlsibWF0U29ydERpc2FibGVDbGVhciIsImRpc2FibGVDbGVhciJdLGFjdGl2ZTpbIm1hdFNvcnRBY3RpdmUiLCJhY3RpdmUiXX0sb3V0cHV0czp7c29ydENoYW5nZToibWF0U29ydENoYW5nZSJ9LGV4cG9ydEFzOlsibWF0U29ydCJdLGZlYXR1cmVzOlt4cCxCb119KSxhJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbbyRdfV19XSxhJC5wcm9wRGVjb3JhdG9ycz17YWN0aXZlOlt7dHlwZTp4eSxhcmdzOlsibWF0U29ydEFjdGl2ZSJdfV0sc3RhcnQ6W3t0eXBlOnh5LGFyZ3M6WyJtYXRTb3J0U3RhcnQiXX1dLGRpcmVjdGlvbjpbe3R5cGU6eHksYXJnczpbIm1hdFNvcnREaXJlY3Rpb24iXX1dLGRpc2FibGVDbGVhcjpbe3R5cGU6eHksYXJnczpbIm1hdFNvcnREaXNhYmxlQ2xlYXIiXX1dLHNvcnRDaGFuZ2U6W3t0eXBlOk95LGFyZ3M6WyJtYXRTb3J0Q2hhbmdlIl19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChhJCxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbbWF0U29ydF0iLGV4cG9ydEFzOiJtYXRTb3J0Iixob3N0OntjbGFzczoibWF0LXNvcnQifSxpbnB1dHM6WyJkaXNhYmxlZDogbWF0U29ydERpc2FibGVkIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W28kXX1dfV19KSx7c3RhcnQ6W3t0eXBlOnh5LGFyZ3M6WyJtYXRTb3J0U3RhcnQiXX1dLHNvcnRDaGFuZ2U6W3t0eXBlOk95LGFyZ3M6WyJtYXRTb3J0Q2hhbmdlIl19XSxkaXJlY3Rpb246W3t0eXBlOnh5LGFyZ3M6WyJtYXRTb3J0RGlyZWN0aW9uIl19XSxkaXNhYmxlQ2xlYXI6W3t0eXBlOnh5LGFyZ3M6WyJtYXRTb3J0RGlzYWJsZUNsZWFyIl19XSxhY3RpdmU6W3t0eXBlOnh5LGFyZ3M6WyJtYXRTb3J0QWN0aXZlIl19XX0pO2NvbnN0IHIkPVdJLkVOVEVSSU5HKyIgIitHSS5TVEFOREFSRF9DVVJWRSxzJD17aW5kaWNhdG9yOm54KCJpbmRpY2F0b3IiLFtyeCgiYWN0aXZlLWFzYywgYXNjIixheCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDBweCkifSkpLHJ4KCJhY3RpdmUtZGVzYywgZGVzYyIsYXgoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgxMHB4KSJ9KSksbHgoImFjdGl2ZS1hc2MgPD0+IGFjdGl2ZS1kZXNjIixveChyJCkpXSksbGVmdFBvaW50ZXI6bngoImxlZnRQb2ludGVyIixbcngoImFjdGl2ZS1hc2MsIGFzYyIsYXgoe3RyYW5zZm9ybToicm90YXRlKC00NWRlZykifSkpLHJ4KCJhY3RpdmUtZGVzYywgZGVzYyIsYXgoe3RyYW5zZm9ybToicm90YXRlKDQ1ZGVnKSJ9KSksbHgoImFjdGl2ZS1hc2MgPD0+IGFjdGl2ZS1kZXNjIixveChyJCkpXSkscmlnaHRQb2ludGVyOm54KCJyaWdodFBvaW50ZXIiLFtyeCgiYWN0aXZlLWFzYywgYXNjIixheCh7dHJhbnNmb3JtOiJyb3RhdGUoNDVkZWcpIn0pKSxyeCgiYWN0aXZlLWRlc2MsIGRlc2MiLGF4KHt0cmFuc2Zvcm06InJvdGF0ZSgtNDVkZWcpIn0pKSxseCgiYWN0aXZlLWFzYyA8PT4gYWN0aXZlLWRlc2MiLG94KHIkKSldKSxhcnJvd09wYWNpdHk6bngoImFycm93T3BhY2l0eSIsW3J4KCJkZXNjLXRvLWFjdGl2ZSwgYXNjLXRvLWFjdGl2ZSwgYWN0aXZlIixheCh7b3BhY2l0eToxfSkpLHJ4KCJkZXNjLXRvLWhpbnQsIGFzYy10by1oaW50LCBoaW50IixheCh7b3BhY2l0eTouNTR9KSkscngoImhpbnQtdG8tZGVzYywgYWN0aXZlLXRvLWRlc2MsIGRlc2MsIGhpbnQtdG8tYXNjLCBhY3RpdmUtdG8tYXNjLCBhc2MsIHZvaWQiLGF4KHtvcGFjaXR5OjB9KSksbHgoIiogPT4gYXNjLCAqID0+IGRlc2MsICogPT4gYWN0aXZlLCAqID0+IGhpbnQsICogPT4gdm9pZCIsb3goIjBtcyIpKSxseCgiKiA8PT4gKiIsb3gociQpKV0pLGFycm93UG9zaXRpb246bngoImFycm93UG9zaXRpb24iLFtseCgiKiA9PiBkZXNjLXRvLWhpbnQsICogPT4gZGVzYy10by1hY3RpdmUiLG94KHIkLHN4KFtheCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yNSUpIn0pLGF4KHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSldKSkpLGx4KCIqID0+IGhpbnQtdG8tZGVzYywgKiA9PiBhY3RpdmUtdG8tZGVzYyIsb3gociQsc3goW2F4KHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSksYXgoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgyNSUpIn0pXSkpKSxseCgiKiA9PiBhc2MtdG8taGludCwgKiA9PiBhc2MtdG8tYWN0aXZlIixveChyJCxzeChbYXgoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgyNSUpIn0pLGF4KHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSldKSkpLGx4KCIqID0+IGhpbnQtdG8tYXNjLCAqID0+IGFjdGl2ZS10by1hc2MiLG94KHIkLHN4KFtheCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pLGF4KHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTI1JSkifSldKSkpLHJ4KCJkZXNjLXRvLWhpbnQsIGFzYy10by1oaW50LCBoaW50LCBkZXNjLXRvLWFjdGl2ZSwgYXNjLXRvLWFjdGl2ZSwgYWN0aXZlIixheCh7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pKSxyeCgiaGludC10by1kZXNjLCBhY3RpdmUtdG8tZGVzYywgZGVzYyIsYXgoe3RyYW5zZm9ybToidHJhbnNsYXRlWSgtMjUlKSJ9KSkscngoImhpbnQtdG8tYXNjLCBhY3RpdmUtdG8tYXNjLCBhc2MiLGF4KHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMjUlKSJ9KSldKSxhbGxvd0NoaWxkcmVuOm54KCJhbGxvd0NoaWxkcmVuIixbbHgoIiogPD0+ICoiLFtkeCgiQCoiLGN4KCkse29wdGlvbmFsOiEwfSldKV0pfTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIGwke2NvbnN0cnVjdG9yKCl7dGhpcy5jaGFuZ2VzPW5ldyBJfX1sJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bCQpfSxsJC7JtXByb3Y9TW4oe2ZhY3Rvcnk6ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgbCR9LHRva2VuOmwkLHByb3ZpZGVkSW46InJvb3QifSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChsJCxbe3R5cGU6aW0sYXJnczpbe3Byb3ZpZGVkSW46InJvb3QifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLG51bGwpO2NvbnN0IGMkPXtwcm92aWRlOmwkLGRlcHM6W1tuZXcgU3IsbmV3IEVyLGwkXV0sdXNlRmFjdG9yeTpmdW5jdGlvbiBkJCh0KXtyZXR1cm4gdHx8bmV3IGwkfX0scCQ9S0koY2xhc3N7fSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NsYXNzIG0kIGV4dGVuZHMgcCR7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEpe2lmKHN1cGVyKCksdGhpcy5faW50bD10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fc29ydD1uLHRoaXMuX2NvbHVtbkRlZj1vLHRoaXMuX2ZvY3VzTW9uaXRvcj1pLHRoaXMuX2VsZW1lbnRSZWY9YSx0aGlzLl9zaG93SW5kaWNhdG9ySGludD0hMSx0aGlzLl92aWV3U3RhdGU9e30sdGhpcy5fYXJyb3dEaXJlY3Rpb249IiIsdGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMSx0aGlzLmFycm93UG9zaXRpb249ImFmdGVyIiwhbiYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93KGZ1bmN0aW9uIHIoKXtyZXR1cm4gRXJyb3IoIk1hdFNvcnRIZWFkZXIgbXVzdCBiZSBwbGFjZWQgd2l0aGluIGEgcGFyZW50IGVsZW1lbnQgd2l0aCB0aGUgTWF0U29ydCBkaXJlY3RpdmUuIil9KSgpO3RoaXMuX2hhbmRsZVN0YXRlQ2hhbmdlcygpfWdldCBkaXNhYmxlQ2xlYXIoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZUNsZWFyfXNldCBkaXNhYmxlQ2xlYXIodCl7dGhpcy5fZGlzYWJsZUNsZWFyPXl6KHQpfW5nT25Jbml0KCl7IXRoaXMuaWQmJnRoaXMuX2NvbHVtbkRlZiYmKHRoaXMuaWQ9dGhpcy5fY29sdW1uRGVmLm5hbWUpLHRoaXMuX3VwZGF0ZUFycm93RGlyZWN0aW9uKCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHt0b1N0YXRlOnRoaXMuX2lzU29ydGVkKCk/ImFjdGl2ZSI6dGhpcy5fYXJyb3dEaXJlY3Rpb259KSx0aGlzLl9zb3J0LnJlZ2lzdGVyKHRoaXMpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApLnN1YnNjcmliZSgodD0+e2NvbnN0IGU9ISF0O2UhPT10aGlzLl9zaG93SW5kaWNhdG9ySGludCYmKHRoaXMuX3NldEluZGljYXRvckhpbnRWaXNpYmxlKGUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSx0aGlzLl9zb3J0LmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fcmVyZW5kZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1fc2V0SW5kaWNhdG9ySGludFZpc2libGUodCl7dGhpcy5faXNEaXNhYmxlZCgpJiZ0fHwodGhpcy5fc2hvd0luZGljYXRvckhpbnQ9dCx0aGlzLl9pc1NvcnRlZCgpfHwodGhpcy5fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKSx0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUodGhpcy5fc2hvd0luZGljYXRvckhpbnQ/e2Zyb21TdGF0ZTp0aGlzLl9hcnJvd0RpcmVjdGlvbix0b1N0YXRlOiJoaW50In06e2Zyb21TdGF0ZToiaGludCIsdG9TdGF0ZTp0aGlzLl9hcnJvd0RpcmVjdGlvbn0pKSl9X3NldEFuaW1hdGlvblRyYW5zaXRpb25TdGF0ZSh0KXt0aGlzLl92aWV3U3RhdGU9dHx8e30sdGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbiYmKHRoaXMuX3ZpZXdTdGF0ZT17dG9TdGF0ZTp0LnRvU3RhdGV9KX1fdG9nZ2xlT25JbnRlcmFjdGlvbigpe3RoaXMuX3NvcnQuc29ydCh0aGlzKSwiaGludCIhPT10aGlzLl92aWV3U3RhdGUudG9TdGF0ZSYmImFjdGl2ZSIhPT10aGlzLl92aWV3U3RhdGUudG9TdGF0ZXx8KHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITApfV9oYW5kbGVDbGljaygpe3RoaXMuX2lzRGlzYWJsZWQoKXx8dGhpcy5fc29ydC5zb3J0KHRoaXMpfV9oYW5kbGVLZXlkb3duKHQpe3RoaXMuX2lzRGlzYWJsZWQoKXx8dC5rZXlDb2RlIT09ZnomJnQua2V5Q29kZSE9PW16fHwodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZU9uSW50ZXJhY3Rpb24oKSl9X2lzU29ydGVkKCl7cmV0dXJuIHRoaXMuX3NvcnQuYWN0aXZlPT10aGlzLmlkJiYoImFzYyI9PT10aGlzLl9zb3J0LmRpcmVjdGlvbnx8ImRlc2MiPT09dGhpcy5fc29ydC5kaXJlY3Rpb24pfV9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCl7cmV0dXJuYCR7dGhpcy5faXNTb3J0ZWQoKT8iYWN0aXZlLSI6IiJ9JHt0aGlzLl9hcnJvd0RpcmVjdGlvbn1gfV9nZXRBcnJvd1ZpZXdTdGF0ZSgpe2NvbnN0IHQ9dGhpcy5fdmlld1N0YXRlLmZyb21TdGF0ZTtyZXR1cm4odD9gJHt0fS10by1gOiIiKSt0aGlzLl92aWV3U3RhdGUudG9TdGF0ZX1fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKXt0aGlzLl9hcnJvd0RpcmVjdGlvbj10aGlzLl9pc1NvcnRlZCgpP3RoaXMuX3NvcnQuZGlyZWN0aW9uOnRoaXMuc3RhcnR8fHRoaXMuX3NvcnQuc3RhcnR9X2lzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fc29ydC5kaXNhYmxlZHx8dGhpcy5kaXNhYmxlZH1fZ2V0QXJpYVNvcnRBdHRyaWJ1dGUoKXtyZXR1cm4gdGhpcy5faXNTb3J0ZWQoKT8iYXNjIj09dGhpcy5fc29ydC5kaXJlY3Rpb24/ImFzY2VuZGluZyI6ImRlc2NlbmRpbmciOiJub25lIn1fcmVuZGVyQXJyb3coKXtyZXR1cm4hdGhpcy5faXNEaXNhYmxlZCgpfHx0aGlzLl9pc1NvcnRlZCgpfV9oYW5kbGVTdGF0ZUNoYW5nZXMoKXt0aGlzLl9yZXJlbmRlclN1YnNjcmlwdGlvbj1yZSh0aGlzLl9zb3J0LnNvcnRDaGFuZ2UsdGhpcy5fc29ydC5fc3RhdGVDaGFuZ2VzLHRoaXMuX2ludGwuY2hhbmdlcykuc3Vic2NyaWJlKCgoKT0+e3RoaXMuX2lzU29ydGVkKCkmJih0aGlzLl91cGRhdGVBcnJvd0RpcmVjdGlvbigpLCJoaW50IiE9PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlJiYiYWN0aXZlIiE9PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlfHwodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHtmcm9tU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb24sdG9TdGF0ZToiYWN0aXZlIn0pLHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PSExKSwhdGhpcy5faXNTb3J0ZWQoKSYmdGhpcy5fdmlld1N0YXRlJiYiYWN0aXZlIj09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlJiYodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMSx0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe2Zyb21TdGF0ZToiYWN0aXZlIix0b1N0YXRlOnRoaXMuX2Fycm93RGlyZWN0aW9ufSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSkpfX1tJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bSQpKFNtKGwkKSxTbShVZyksU20oYSQsOCksU20oIk1BVF9TT1JUX0hFQURFUl9DT0xVTU5fREVGIiw4KSxTbShTSSksU20oaGcpKX0sbSQuybVjbXA9dG8oe3R5cGU6bSQsc2VsZWN0b3JzOltbIiIsIm1hdC1zb3J0LWhlYWRlciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1zb3J0LWhlYWRlciJdLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJlZtKCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5faGFuZGxlQ2xpY2soKX0pKSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZUtleWRvd24oZSl9KSkoIm1vdXNlZW50ZXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX3NldEluZGljYXRvckhpbnRWaXNpYmxlKCEwKX0pKSgibW91c2VsZWF2ZSIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5fc2V0SW5kaWNhdG9ySGludFZpc2libGUoITEpfSkpLDImZSYmKGpwKCJhcmlhLXNvcnQiLG4uX2dldEFyaWFTb3J0QXR0cmlidXRlKCkpLHB1KCJtYXQtc29ydC1oZWFkZXItZGlzYWJsZWQiLG4uX2lzRGlzYWJsZWQoKSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsYXJyb3dQb3NpdGlvbjoiYXJyb3dQb3NpdGlvbiIsZGlzYWJsZUNsZWFyOiJkaXNhYmxlQ2xlYXIiLGlkOlsibWF0LXNvcnQtaGVhZGVyIiwiaWQiXSxzdGFydDoic3RhcnQifSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXSxmZWF0dXJlczpbeHBdLGF0dHJzOlsibWF0LXNvcnQtaGVhZGVyIiwiIl0sbmdDb250ZW50U2VsZWN0b3JzOlsiKiJdLGRlY2xzOjQsdmFyczo2LGNvbnN0czpbWyJyb2xlIiwiYnV0dG9uIiwxLCJtYXQtc29ydC1oZWFkZXItY29udGFpbmVyIiwibWF0LWZvY3VzLWluZGljYXRvciJdLFsxLCJtYXQtc29ydC1oZWFkZXItY29udGVudCJdLFsiY2xhc3MiLCJtYXQtc29ydC1oZWFkZXItYXJyb3ciLDQsIm5nSWYiXSxbMSwibWF0LXNvcnQtaGVhZGVyLWFycm93Il0sWzEsIm1hdC1zb3J0LWhlYWRlci1zdGVtIl0sWzEsIm1hdC1zb3J0LWhlYWRlci1pbmRpY2F0b3IiXSxbMSwibWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdCJdLFsxLCJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1yaWdodCJdLFsxLCJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1taWRkbGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFptKCksUm0oMCwiZGl2IiwwKSxSbSgxLCJkaXYiLDEpLFhtKDIpLEFtKCksUXAoMyxuJCw2LDYsImRpdiIsMiksQW0oKSksMiZlJiYocHUoIm1hdC1zb3J0LWhlYWRlci1zb3J0ZWQiLG4uX2lzU29ydGVkKCkpKCJtYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3JlIiwiYmVmb3JlIj09bi5hcnJvd1Bvc2l0aW9uKSxqcCgidGFiaW5kZXgiLG4uX2lzRGlzYWJsZWQoKT9udWxsOjApLHJjKDMpLERtKCJuZ0lmIixuLl9yZW5kZXJBcnJvdygpKSl9LGRpcmVjdGl2ZXM6W2RNXSxzdHlsZXM6WyIubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7Y3Vyc29yOnBvaW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2xldHRlci1zcGFjaW5nOm5vcm1hbDtvdXRsaW5lOjB9W21hdC1zb3J0LWhlYWRlcl0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIsW21hdC1zb3J0LWhlYWRlcl0uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntib3JkZXItYm90dG9tOnNvbGlkIDFweCBjdXJyZW50Q29sb3J9Lm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntjdXJzb3I6ZGVmYXVsdH0ubWF0LXNvcnQtaGVhZGVyLWNvbnRlbnR7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX0ubWF0LXNvcnQtaGVhZGVyLWFycm93e2hlaWdodDoxMnB4O3dpZHRoOjEycHg7bWluLXdpZHRoOjEycHg7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O29wYWNpdHk6MH0ubWF0LXNvcnQtaGVhZGVyLWFycm93LFtkaXI9cnRsXSAubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZSAubWF0LXNvcnQtaGVhZGVyLWFycm93e21hcmdpbjowIDAgMCA2cHh9Lm1hdC1zb3J0LWhlYWRlci1wb3NpdGlvbi1iZWZvcmUgLm1hdC1zb3J0LWhlYWRlci1hcnJvdyxbZGlyPXJ0bF0gLm1hdC1zb3J0LWhlYWRlci1hcnJvd3ttYXJnaW46MCA2cHggMCAwfS5tYXQtc29ydC1oZWFkZXItc3RlbXtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MTBweDt3aWR0aDoycHg7bWFyZ2luOmF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItc3RlbXt3aWR0aDowO2JvcmRlci1sZWZ0OnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLWluZGljYXRvcnt3aWR0aDoxMDAlO2hlaWdodDoycHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZXttYXJnaW46YXV0bztoZWlnaHQ6MnB4O3dpZHRoOjJweDtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcjt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1taWRkbGV7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweDtib3JkZXItbGVmdDpzb2xpZCAycHh9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnQsLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0e2JhY2tncm91bmQ6Y3VycmVudENvbG9yO3dpZHRoOjZweDtoZWlnaHQ6MnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDpzb2xpZCA2cHg7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnR7dHJhbnNmb3JtLW9yaWdpbjpyaWdodDtsZWZ0OjB9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0e3RyYW5zZm9ybS1vcmlnaW46bGVmdDtyaWdodDowfVxuIl0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbcyQuaW5kaWNhdG9yLHMkLmxlZnRQb2ludGVyLHMkLnJpZ2h0UG9pbnRlcixzJC5hcnJvd09wYWNpdHkscyQuYXJyb3dQb3NpdGlvbixzJC5hbGxvd0NoaWxkcmVuXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxtJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmwkfSx7dHlwZTpVZ30se3R5cGU6YSQsZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6WyJNQVRfU09SVF9IRUFERVJfQ09MVU1OX0RFRiJdfSx7dHlwZTpTcn1dfSx7dHlwZTpTSX0se3R5cGU6aGd9XSxtJC5wcm9wRGVjb3JhdG9ycz17aWQ6W3t0eXBlOnh5LGFyZ3M6WyJtYXQtc29ydC1oZWFkZXIiXX1dLGFycm93UG9zaXRpb246W3t0eXBlOnh5fV0sc3RhcnQ6W3t0eXBlOnh5fV0sZGlzYWJsZUNsZWFyOlt7dHlwZTp4eX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKG0kLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6IlttYXQtc29ydC1oZWFkZXJdIixleHBvcnRBczoibWF0U29ydEhlYWRlciIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgV2Ugc2V0IHRoZSBgdGFiaW5kZXhgIG9uIGFuIGVsZW1lbnQgaW5zaWRlIHRoZSB0YWJsZSBoZWFkZXIsIHJhdGhlciB0aGFuIHRoZSBoZWFkZXIgaXRzZWxmLFxuICBiZWNhdXNlIG9mIGEgYnVnIGluIE5WREEgd2hlcmUgaGF2aW5nIGEgYHRhYmluZGV4YCBvbiBhIGB0aGAgYnJlYWtzIGtleWJvYXJkIG5hdmlnYXRpb24gaW4gdGhlXG4gIHRhYmxlIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL252YWNjZXNzL252ZGEvaXNzdWVzLzc3MTgpLiBUaGlzIGFsbG93cyBmb3IgdGhlIGhlYWRlciB0byBib3RoXG4gIGJlIGZvY3VzYWJsZSwgYW5kIGhhdmUgc2NyZWVuIHJlYWRlcnMgcmVhZCBvdXQgaXRzIGBhcmlhLXNvcnRgIHN0YXRlLiBXZSBwcmVmZXIgdGhpcyBhcHByb2FjaFxuICBvdmVyIGhhdmluZyBhIGJ1dHRvbiB3aXRoIGFuIGBhcmlhLWxhYmVsYCBpbnNpZGUgdGhlIGhlYWRlciwgYmVjYXVzZSB0aGUgYnV0dG9uXCdzIGBhcmlhLWxhYmVsYFxuICB3aWxsIGJlIHJlYWQgb3V0IGFzIHRoZSB1c2VyIGlzIG5hdmlnYXRpbmcgdGhlIHRhYmxlXCdzIGNlbGwgKHNlZSAjMTMwMTIpLlxuXG4gIFRoZSBhcHByb2FjaCBpcyBiYXNlZCBvZmYgb2Y6IGh0dHBzOi8vZGVxdWV1bml2ZXJzaXR5LmNvbS9saWJyYXJ5L2FyaWEvdGFibGVzL3NmLXNvcnRhYmxlLWdyaWRcbi0tXHgzZVxuPGRpdiBjbGFzcz0ibWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lciBtYXQtZm9jdXMtaW5kaWNhdG9yIlxuICAgICBbY2xhc3MubWF0LXNvcnQtaGVhZGVyLXNvcnRlZF09Il9pc1NvcnRlZCgpIlxuICAgICBbY2xhc3MubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZV09ImFycm93UG9zaXRpb24gPT0gXCdiZWZvcmVcJyJcbiAgICAgW2F0dHIudGFiaW5kZXhdPSJfaXNEaXNhYmxlZCgpID8gbnVsbCA6IDAiXG4gICAgIHJvbGU9ImJ1dHRvbiI+XG5cbiAgXHgzYyEtLVxuICAgIFRPRE8oY3Jpc2JldG8pOiB0aGlzIGRpdiBpc25cJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBidXQgd2UgaGF2ZSB0byBrZWVwIGl0IGR1ZSB0byBhIGxhcmdlXG4gICAgbnVtYmVyIG9mIHNjcmVlbnNob3QgZGlmZiBmYWlsdXJlcy4gSXQgc2hvdWxkIGJlIHJlbW92ZWQgZXZlbnR1YWxseS4gTm90ZSB0aGF0IHRoZSBkaWZmZXJlbmNlXG4gICAgaXNuXCd0IHZpc2libGUgd2l0aCBhIHNob3J0ZXIgaGVhZGVyLCBidXQgb25jZSBpdCBicmVha3MgdXAgaW50byBtdWx0aXBsZSBsaW5lcywgdGhpcyBlbGVtZW50XG4gICAgY2F1c2VzIGl0IHRvIGJlIGNlbnRlci1hbGlnbmVkLCB3aGVyZWFzIHJlbW92aW5nIGl0IHdpbGwga2VlcCB0aGUgdGV4dCB0byB0aGUgbGVmdC5cbiAgLS1ceDNlXG4gIDxkaXYgY2xhc3M9Im1hdC1zb3J0LWhlYWRlci1jb250ZW50Ij5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuXG4gIFx4M2MhLS0gRGlzYWJsZSBhbmltYXRpb25zIHdoaWxlIGEgY3VycmVudCBhbmltYXRpb24gaXMgcnVubmluZyAtLVx4M2VcbiAgPGRpdiBjbGFzcz0ibWF0LXNvcnQtaGVhZGVyLWFycm93IlxuICAgICAgICpuZ0lmPSJfcmVuZGVyQXJyb3coKSJcbiAgICAgICBbQGFycm93T3BhY2l0eV09Il9nZXRBcnJvd1ZpZXdTdGF0ZSgpIlxuICAgICAgIFtAYXJyb3dQb3NpdGlvbl09Il9nZXRBcnJvd1ZpZXdTdGF0ZSgpIlxuICAgICAgIFtAYWxsb3dDaGlsZHJlbl09Il9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkiXG4gICAgICAgKEBhcnJvd1Bvc2l0aW9uLnN0YXJ0KT0iX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb24gPSB0cnVlIlxuICAgICAgIChAYXJyb3dQb3NpdGlvbi5kb25lKT0iX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb24gPSBmYWxzZSI+XG4gICAgPGRpdiBjbGFzcz0ibWF0LXNvcnQtaGVhZGVyLXN0ZW0iPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9Im1hdC1zb3J0LWhlYWRlci1pbmRpY2F0b3IiIFtAaW5kaWNhdG9yXT0iX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1sZWZ0IiBbQGxlZnRQb2ludGVyXT0iX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1yaWdodCIgW0ByaWdodFBvaW50ZXJdPSJfZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZSI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGhvc3Q6e2NsYXNzOiJtYXQtc29ydC1oZWFkZXIiLCIoY2xpY2spIjoiX2hhbmRsZUNsaWNrKCkiLCIoa2V5ZG93bikiOiJfaGFuZGxlS2V5ZG93bigkZXZlbnQpIiwiKG1vdXNlZW50ZXIpIjoiX3NldEluZGljYXRvckhpbnRWaXNpYmxlKHRydWUpIiwiKG1vdXNlbGVhdmUpIjoiX3NldEluZGljYXRvckhpbnRWaXNpYmxlKGZhbHNlKSIsIlthdHRyLmFyaWEtc29ydF0iOiJfZ2V0QXJpYVNvcnRBdHRyaWJ1dGUoKSIsIltjbGFzcy5tYXQtc29ydC1oZWFkZXItZGlzYWJsZWRdIjoiX2lzRGlzYWJsZWQoKSJ9LGVuY2Fwc3VsYXRpb246SG4uTm9uZSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNoLGlucHV0czpbImRpc2FibGVkIl0sYW5pbWF0aW9uczpbcyQuaW5kaWNhdG9yLHMkLmxlZnRQb2ludGVyLHMkLnJpZ2h0UG9pbnRlcixzJC5hcnJvd09wYWNpdHkscyQuYXJyb3dQb3NpdGlvbixzJC5hbGxvd0NoaWxkcmVuXSxzdHlsZXM6WyIubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7Y3Vyc29yOnBvaW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2xldHRlci1zcGFjaW5nOm5vcm1hbDtvdXRsaW5lOjB9W21hdC1zb3J0LWhlYWRlcl0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIsW21hdC1zb3J0LWhlYWRlcl0uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntib3JkZXItYm90dG9tOnNvbGlkIDFweCBjdXJyZW50Q29sb3J9Lm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntjdXJzb3I6ZGVmYXVsdH0ubWF0LXNvcnQtaGVhZGVyLWNvbnRlbnR7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX0ubWF0LXNvcnQtaGVhZGVyLWFycm93e2hlaWdodDoxMnB4O3dpZHRoOjEycHg7bWluLXdpZHRoOjEycHg7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O29wYWNpdHk6MH0ubWF0LXNvcnQtaGVhZGVyLWFycm93LFtkaXI9cnRsXSAubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZSAubWF0LXNvcnQtaGVhZGVyLWFycm93e21hcmdpbjowIDAgMCA2cHh9Lm1hdC1zb3J0LWhlYWRlci1wb3NpdGlvbi1iZWZvcmUgLm1hdC1zb3J0LWhlYWRlci1hcnJvdyxbZGlyPXJ0bF0gLm1hdC1zb3J0LWhlYWRlci1hcnJvd3ttYXJnaW46MCA2cHggMCAwfS5tYXQtc29ydC1oZWFkZXItc3RlbXtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MTBweDt3aWR0aDoycHg7bWFyZ2luOmF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItc3RlbXt3aWR0aDowO2JvcmRlci1sZWZ0OnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLWluZGljYXRvcnt3aWR0aDoxMDAlO2hlaWdodDoycHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZXttYXJnaW46YXV0bztoZWlnaHQ6MnB4O3dpZHRoOjJweDtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcjt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1taWRkbGV7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweDtib3JkZXItbGVmdDpzb2xpZCAycHh9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnQsLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0e2JhY2tncm91bmQ6Y3VycmVudENvbG9yO3dpZHRoOjZweDtoZWlnaHQ6MnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDpzb2xpZCA2cHg7Ym9yZGVyLXRvcDpzb2xpZCAycHh9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnR7dHJhbnNmb3JtLW9yaWdpbjpyaWdodDtsZWZ0OjB9Lm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0e3RyYW5zZm9ybS1vcmlnaW46bGVmdDtyaWdodDowfVxuIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpsJH0se3R5cGU6VWd9LHt0eXBlOmEkLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOlsiTUFUX1NPUlRfSEVBREVSX0NPTFVNTl9ERUYiXX0se3R5cGU6U3J9XX0se3R5cGU6U0l9LHt0eXBlOmhnfV19KSx7YXJyb3dQb3NpdGlvbjpbe3R5cGU6eHl9XSxkaXNhYmxlQ2xlYXI6W3t0eXBlOnh5fV0saWQ6W3t0eXBlOnh5LGFyZ3M6WyJtYXQtc29ydC1oZWFkZXIiXX1dLHN0YXJ0Olt7dHlwZTp4eX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyB1JHt9dSQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHUkKX0sdSQuybVtb2Q9YW8oe3R5cGU6dSR9KSx1JC7JtWluaj12bih7cHJvdmlkZXJzOltjJF0saW1wb3J0czpbW1dNLFhJXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHUkLFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbV00sWEldLGV4cG9ydHM6W2EkLG0kXSxkZWNsYXJhdGlvbnM6W2EkLG0kXSxwcm92aWRlcnM6W2MkXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKHUkLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bYSQsbSRdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1dNLFhJXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVyblthJCxtJF19fSk7Y29uc3QgZiQ9W1tbImNhcHRpb24iXV0sW1siY29sZ3JvdXAiXSxbImNvbCJdXV07ZnVuY3Rpb24gZyQodCxlKXtpZigxJnQmJihSbSgwLCJ0aCIsMyksa3UoMSksQW0oKSksMiZ0KXtjb25zdCB0PVltKCk7ZHUoInRleHQtYWxpZ24iLHQuanVzdGlmeSkscmMoMSksRHUoIiAiLHQuaGVhZGVyVGV4dCwiICIpfX1mdW5jdGlvbiBoJCh0LGUpe2lmKDEmdCYmKFJtKDAsInRkIiw0KSxrdSgxKSxBbSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1ZbSgpO2R1KCJ0ZXh0LWFsaWduIixuLmp1c3RpZnkpLHJjKDEpLER1KCIgIixuLmRhdGFBY2Nlc3Nvcih0LG4ubmFtZSksIiAiKX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2Z1bmN0aW9uIGIkKHQpe3JldHVybiBjbGFzcyBleHRlbmRzIHR7Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fc3RpY2t5PSExLHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITF9Z2V0IHN0aWNreSgpe3JldHVybiB0aGlzLl9zdGlja3l9c2V0IHN0aWNreSh0KXtjb25zdCBlPXRoaXMuX3N0aWNreTt0aGlzLl9zdGlja3k9eXoodCksdGhpcy5faGFzU3RpY2t5Q2hhbmdlZD1lIT09dGhpcy5fc3RpY2t5fWhhc1N0aWNreUNoYW5nZWQoKXtjb25zdCB0PXRoaXMuX2hhc1N0aWNreUNoYW5nZWQ7cmV0dXJuIHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITEsdH1yZXNldFN0aWNreUNoYW5nZWQoKXt0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExfX19Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL2NvbnN0IHkkPW5ldyBHYSgiQ0RLX1RBQkxFIiksXyQ9bmV3IEdhKCJ0ZXh0LWNvbHVtbi1vcHRpb25zIik7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBDJHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnRlbXBsYXRlPXR9fUMkLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxDJCkoU20oWGcpKX0sQyQuybVkaXI9bG8oe3R5cGU6QyQsc2VsZWN0b3JzOltbIiIsImNka0NlbGxEZWYiLCIiXV19KSxDJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOlhnfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChDJCxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbY2RrQ2VsbERlZl0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WGd9XX0pLG51bGwpO2NsYXNzIE0ke2NvbnN0cnVjdG9yKHQpe3RoaXMudGVtcGxhdGU9dH19TSQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE0kKShTbShYZykpfSxNJC7JtWRpcj1sbyh7dHlwZTpNJCxzZWxlY3RvcnM6W1siIiwiY2RrSGVhZGVyQ2VsbERlZiIsIiJdXX0pLE0kLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WGd9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKE0kLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6IltjZGtIZWFkZXJDZWxsRGVmXSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYZ31dfSksbnVsbCk7Y2xhc3MgdiR7Y29uc3RydWN0b3IodCl7dGhpcy50ZW1wbGF0ZT10fX12JC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8diQpKFNtKFhnKSl9LHYkLsm1ZGlyPWxvKHt0eXBlOnYkLHNlbGVjdG9yczpbWyIiLCJjZGtGb290ZXJDZWxsRGVmIiwiIl1dfSksdiQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpYZ31dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgodiQsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW2Nka0Zvb3RlckNlbGxEZWZdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlhnfV19KSxudWxsKTtjb25zdCB4JD1iJChjbGFzc3t9KTtjbGFzcyBPJCBleHRlbmRzIHgke2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fdGFibGU9dCx0aGlzLl9zdGlja3lFbmQ9ITF9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5fbmFtZX1zZXQgbmFtZSh0KXt0aGlzLl9zZXROYW1lSW5wdXQodCl9Z2V0IHN0aWNreUVuZCgpe3JldHVybiB0aGlzLl9zdGlja3lFbmR9c2V0IHN0aWNreUVuZCh0KXtjb25zdCBlPXRoaXMuX3N0aWNreUVuZDt0aGlzLl9zdGlja3lFbmQ9eXoodCksdGhpcy5faGFzU3RpY2t5Q2hhbmdlZD1lIT09dGhpcy5fc3RpY2t5RW5kfV91cGRhdGVDb2x1bW5Dc3NDbGFzc05hbWUoKXt0aGlzLl9jb2x1bW5Dc3NDbGFzc05hbWU9W2BjZGstY29sdW1uLSR7dGhpcy5jc3NDbGFzc0ZyaWVuZGx5TmFtZX1gXX1fc2V0TmFtZUlucHV0KHQpe3QmJih0aGlzLl9uYW1lPXQsdGhpcy5jc3NDbGFzc0ZyaWVuZGx5TmFtZT10LnJlcGxhY2UoL1teYS16MC05Xy1dL2dpLCItIiksdGhpcy5fdXBkYXRlQ29sdW1uQ3NzQ2xhc3NOYW1lKCkpfX1PJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TyQpKFNtKHkkLDgpKX0sTyQuybVkaXI9bG8oe3R5cGU6TyQsc2VsZWN0b3JzOltbIiIsImNka0NvbHVtbkRlZiIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbiB0KGUsbixvKXtpZigxJmUmJigkaChvLEMkLDUpLCRoKG8sTSQsNSksJGgobyx2JCw1KSksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi5jZWxsPXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLmhlYWRlckNlbGw9dC5maXJzdCksSmgodD10YigpKSYmKG4uZm9vdGVyQ2VsbD10LmZpcnN0KX19LGlucHV0czp7c3RpY2t5OiJzdGlja3kiLG5hbWU6WyJjZGtDb2x1bW5EZWYiLCJuYW1lIl0sc3RpY2t5RW5kOiJzdGlja3lFbmQifSxmZWF0dXJlczpbcGcoW3twcm92aWRlOiJNQVRfU09SVF9IRUFERVJfQ09MVU1OX0RFRiIsdXNlRXhpc3Rpbmc6TyR9XSkseHBdfSksTyQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbeSRdfSx7dHlwZTpTcn1dfV0sTyQucHJvcERlY29yYXRvcnM9e25hbWU6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb2x1bW5EZWYiXX1dLHN0aWNreUVuZDpbe3R5cGU6eHksYXJnczpbInN0aWNreUVuZCJdfV0sY2VsbDpbe3R5cGU6cWEsYXJnczpbQyRdfV0saGVhZGVyQ2VsbDpbe3R5cGU6cWEsYXJnczpbTSRdfV0sZm9vdGVyQ2VsbDpbe3R5cGU6cWEsYXJnczpbdiRdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoTyQsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW2Nka0NvbHVtbkRlZl0iLGlucHV0czpbInN0aWNreSJdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Ik1BVF9TT1JUX0hFQURFUl9DT0xVTU5fREVGIix1c2VFeGlzdGluZzpPJH1dfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W3kkXX0se3R5cGU6U3J9XX1dfSkse25hbWU6W3t0eXBlOnh5LGFyZ3M6WyJjZGtDb2x1bW5EZWYiXX1dLHN0aWNreUVuZDpbe3R5cGU6eHksYXJnczpbInN0aWNreUVuZCJdfV0sY2VsbDpbe3R5cGU6cWEsYXJnczpbQyRdfV0saGVhZGVyQ2VsbDpbe3R5cGU6cWEsYXJnczpbTSRdfV0sZm9vdGVyQ2VsbDpbe3R5cGU6cWEsYXJnczpbdiRdfV19KTtjbGFzcyBQJHtjb25zdHJ1Y3Rvcih0LGUpe2NvbnN0IG49ZS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdDtmb3IoY29uc3QgZSBvZiB0Ll9jb2x1bW5Dc3NDbGFzc05hbWUpbi5hZGQoZSl9fWNsYXNzIHckIGV4dGVuZHMgUCR7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpfX13JC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dyQpKFNtKE8kKSxTbShoZykpfSx3JC7JtWRpcj1sbyh7dHlwZTp3JCxzZWxlY3RvcnM6W1siY2RrLWhlYWRlci1jZWxsIl0sWyJ0aCIsImNkay1oZWFkZXItY2VsbCIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJjZGstaGVhZGVyLWNlbGwiXSxmZWF0dXJlczpbeHBdfSksdyQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpPJH0se3R5cGU6aGd9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHckLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6ImNkay1oZWFkZXItY2VsbCwgdGhbY2RrLWhlYWRlci1jZWxsXSIsaG9zdDp7Y2xhc3M6ImNkay1oZWFkZXItY2VsbCIscm9sZToiY29sdW1uaGVhZGVyIn19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpPJH0se3R5cGU6aGd9XX0pLG51bGwpO2NsYXNzIGskIGV4dGVuZHMgUCR7Y29uc3RydWN0b3IodCxlKXt2YXIgbjtpZihzdXBlcih0LGUpLDE9PT0obnVsbD09PShuPXQuX3RhYmxlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm5vZGVUeXBlKSl7Y29uc3Qgbj10Ll90YWJsZS5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgicm9sZSIpO2UubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoInJvbGUiLCJncmlkIj09PW58fCJ0cmVlZ3JpZCI9PT1uPyJncmlkY2VsbCI6ImNlbGwiKX19fWskLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxrJCkoU20oTyQpLFNtKGhnKSl9LGskLsm1ZGlyPWxvKHt0eXBlOmskLHNlbGVjdG9yczpbWyJjZGstZm9vdGVyLWNlbGwiXSxbInRkIiwiY2RrLWZvb3Rlci1jZWxsIiwiIl1dLGhvc3RBdHRyczpbMSwiY2RrLWZvb3Rlci1jZWxsIl0sZmVhdHVyZXM6W3hwXX0pLGskLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6TyR9LHt0eXBlOmhnfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChrJCxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJjZGstZm9vdGVyLWNlbGwsIHRkW2Nkay1mb290ZXItY2VsbF0iLGhvc3Q6e2NsYXNzOiJjZGstZm9vdGVyLWNlbGwifX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOk8kfSx7dHlwZTpoZ31dfSksbnVsbCk7Y2xhc3MgUyQgZXh0ZW5kcyBQJHtjb25zdHJ1Y3Rvcih0LGUpe3ZhciBuO2lmKHN1cGVyKHQsZSksMT09PShudWxsPT09KG49dC5fdGFibGUpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQubm9kZVR5cGUpKXtjb25zdCBuPXQuX3RhYmxlLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJyb2xlIik7ZS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgicm9sZSIsImdyaWQiPT09bnx8InRyZWVncmlkIj09PW4/ImdyaWRjZWxsIjoiY2VsbCIpfX19UyQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFMkKShTbShPJCksU20oaGcpKX0sUyQuybVkaXI9bG8oe3R5cGU6UyQsc2VsZWN0b3JzOltbImNkay1jZWxsIl0sWyJ0ZCIsImNkay1jZWxsIiwiIl1dLGhvc3RBdHRyczpbMSwiY2RrLWNlbGwiXSxmZWF0dXJlczpbeHBdfSksUyQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpPJH0se3R5cGU6aGd9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFMkLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6ImNkay1jZWxsLCB0ZFtjZGstY2VsbF0iLGhvc3Q6e2NsYXNzOiJjZGstY2VsbCJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6TyR9LHt0eXBlOmhnfV19KSxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIEQke2NvbnN0cnVjdG9yKCl7dGhpcy50YXNrcz1bXSx0aGlzLmVuZFRhc2tzPVtdfX1jb25zdCBFJD1uZXcgR2EoIl9DT0FMRVNDRURfU1RZTEVfU0NIRURVTEVSIik7Y2xhc3MgUiR7Y29uc3RydWN0b3IodCl7dGhpcy5fbmdab25lPXQsdGhpcy5fY3VycmVudFNjaGVkdWxlPW51bGwsdGhpcy5fZGVzdHJveWVkPW5ldyBJfXNjaGVkdWxlKHQpe3RoaXMuX2NyZWF0ZVNjaGVkdWxlSWZOZWVkZWQoKSx0aGlzLl9jdXJyZW50U2NoZWR1bGUudGFza3MucHVzaCh0KX1zY2hlZHVsZUVuZCh0KXt0aGlzLl9jcmVhdGVTY2hlZHVsZUlmTmVlZGVkKCksdGhpcy5fY3VycmVudFNjaGVkdWxlLmVuZFRhc2tzLnB1c2godCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfV9jcmVhdGVTY2hlZHVsZUlmTmVlZGVkKCl7dGhpcy5fY3VycmVudFNjaGVkdWxlfHwodGhpcy5fY3VycmVudFNjaGVkdWxlPW5ldyBEJCx0aGlzLl9nZXRTY2hlZHVsZU9ic2VydmFibGUoKS5waXBlKEllKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKCk9Pntmb3IoO3RoaXMuX2N1cnJlbnRTY2hlZHVsZS50YXNrcy5sZW5ndGh8fHRoaXMuX2N1cnJlbnRTY2hlZHVsZS5lbmRUYXNrcy5sZW5ndGg7KXtjb25zdCB0PXRoaXMuX2N1cnJlbnRTY2hlZHVsZTt0aGlzLl9jdXJyZW50U2NoZWR1bGU9bmV3IEQkO2Zvcihjb25zdCBlIG9mIHQudGFza3MpZSgpO2Zvcihjb25zdCBlIG9mIHQuZW5kVGFza3MpZSgpfXRoaXMuX2N1cnJlbnRTY2hlZHVsZT1udWxsfSkpKX1fZ2V0U2NoZWR1bGVPYnNlcnZhYmxlKCl7cmV0dXJuIHRoaXMuX25nWm9uZS5pc1N0YWJsZT9DdChQcm9taXNlLnJlc29sdmUodm9pZCAwKSk6dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoYmUoMSkpfX1SJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UiQpKHZyKGFfKSl9LFIkLsm1cHJvdj1Nbih7dG9rZW46UiQsZmFjdG9yeTpSJC7JtWZhY30pLFIkLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6YV99XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFIkLFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTphX31dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBBJD0iPG5nLWNvbnRhaW5lciBjZGtDZWxsT3V0bGV0PjwvbmctY29udGFpbmVyPiI7Y2xhc3MgVCR7Y29uc3RydWN0b3IodCxlKXt0aGlzLnRlbXBsYXRlPXQsdGhpcy5fZGlmZmVycz1lfW5nT25DaGFuZ2VzKHQpe2lmKCF0aGlzLl9jb2x1bW5zRGlmZmVyKXtjb25zdCBlPXQuY29sdW1ucyYmdC5jb2x1bW5zLmN1cnJlbnRWYWx1ZXx8W107dGhpcy5fY29sdW1uc0RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoZSkuY3JlYXRlKCksdGhpcy5fY29sdW1uc0RpZmZlci5kaWZmKGUpfX1nZXRDb2x1bW5zRGlmZigpe3JldHVybiB0aGlzLl9jb2x1bW5zRGlmZmVyLmRpZmYodGhpcy5jb2x1bW5zKX1leHRyYWN0Q2VsbFRlbXBsYXRlKHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgeiQ/dC5oZWFkZXJDZWxsLnRlbXBsYXRlOnRoaXMgaW5zdGFuY2VvZiBIJD90LmZvb3RlckNlbGwudGVtcGxhdGU6dC5jZWxsLnRlbXBsYXRlfX1UJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VCQpKFNtKFhnKSxTbShIZykpfSxUJC7JtWRpcj1sbyh7dHlwZTpUJCxmZWF0dXJlczpbQm9dfSksVCQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpYZ30se3R5cGU6SGd9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFQkLFt7dHlwZTpDeX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYZ30se3R5cGU6SGd9XX0pLG51bGwpO2NvbnN0IE4kPWIkKGNsYXNzIGV4dGVuZHMgVCR7fSk7Y2xhc3MgeiQgZXh0ZW5kcyBOJHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCxlKSx0aGlzLl90YWJsZT1ufW5nT25DaGFuZ2VzKHQpe3N1cGVyLm5nT25DaGFuZ2VzKHQpfX16JC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8eiQpKFNtKFhnKSxTbShIZyksU20oeSQsOCkpfSx6JC7JtWRpcj1sbyh7dHlwZTp6JCxzZWxlY3RvcnM6W1siIiwiY2RrSGVhZGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka0hlYWRlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJjZGtIZWFkZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W3hwLEJvXX0pLHokLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WGd9LHt0eXBlOkhnfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbeSRdfSx7dHlwZTpTcn1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh6JCxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbY2RrSGVhZGVyUm93RGVmXSIsaW5wdXRzOlsiY29sdW1uczogY2RrSGVhZGVyUm93RGVmIiwic3RpY2t5OiBjZGtIZWFkZXJSb3dEZWZTdGlja3kiXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlhnfSx7dHlwZTpIZ30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W3kkXX0se3R5cGU6U3J9XX1dfSksbnVsbCk7Y29uc3QgSSQ9YiQoY2xhc3MgZXh0ZW5kcyBUJHt9KTtjbGFzcyBIJCBleHRlbmRzIEkke2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcih0LGUpLHRoaXMuX3RhYmxlPW59bmdPbkNoYW5nZXModCl7c3VwZXIubmdPbkNoYW5nZXModCl9fUgkLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxIJCkoU20oWGcpLFNtKEhnKSxTbSh5JCw4KSl9LEgkLsm1ZGlyPWxvKHt0eXBlOkgkLHNlbGVjdG9yczpbWyIiLCJjZGtGb290ZXJSb3dEZWYiLCIiXV0saW5wdXRzOntjb2x1bW5zOlsiY2RrRm9vdGVyUm93RGVmIiwiY29sdW1ucyJdLHN0aWNreTpbImNka0Zvb3RlclJvd0RlZlN0aWNreSIsInN0aWNreSJdfSxmZWF0dXJlczpbeHAsQm9dfSksSCQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpYZ30se3R5cGU6SGd9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOlt5JF19LHt0eXBlOlNyfV19XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEgkLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6IltjZGtGb290ZXJSb3dEZWZdIixpbnB1dHM6WyJjb2x1bW5zOiBjZGtGb290ZXJSb3dEZWYiLCJzdGlja3k6IGNka0Zvb3RlclJvd0RlZlN0aWNreSJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6WGd9LHt0eXBlOkhnfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbeSRdfSx7dHlwZTpTcn1dfV19KSxudWxsKTtjbGFzcyBGJCBleHRlbmRzIFQke2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcih0LGUpLHRoaXMuX3RhYmxlPW59fUYkLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxGJCkoU20oWGcpLFNtKEhnKSxTbSh5JCw4KSl9LEYkLsm1ZGlyPWxvKHt0eXBlOkYkLHNlbGVjdG9yczpbWyIiLCJjZGtSb3dEZWYiLCIiXV0saW5wdXRzOntjb2x1bW5zOlsiY2RrUm93RGVmQ29sdW1ucyIsImNvbHVtbnMiXSx3aGVuOlsiY2RrUm93RGVmV2hlbiIsIndoZW4iXX0sZmVhdHVyZXM6W3hwXX0pLEYkLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6WGd9LHt0eXBlOkhnfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbeSRdfSx7dHlwZTpTcn1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChGJCxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbY2RrUm93RGVmXSIsaW5wdXRzOlsiY29sdW1uczogY2RrUm93RGVmQ29sdW1ucyIsIndoZW46IGNka1Jvd0RlZldoZW4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlhnfSx7dHlwZTpIZ30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W3kkXX0se3R5cGU6U3J9XX1dfSksbnVsbCk7Y2xhc3MgTCR7Y29uc3RydWN0b3IodCl7dGhpcy5fdmlld0NvbnRhaW5lcj10LEwkLm1vc3RSZWNlbnRDZWxsT3V0bGV0PXRoaXN9bmdPbkRlc3Ryb3koKXtMJC5tb3N0UmVjZW50Q2VsbE91dGxldD09PXRoaXMmJihMJC5tb3N0UmVjZW50Q2VsbE91dGxldD1udWxsKX19TCQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEwkKShTbShlaCkpfSxMJC7JtWRpcj1sbyh7dHlwZTpMJCxzZWxlY3RvcnM6W1siIiwiY2RrQ2VsbE91dGxldCIsIiJdXX0pLEwkLm1vc3RSZWNlbnRDZWxsT3V0bGV0PW51bGwsTCQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTplaH1dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoTCQsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW2Nka0NlbGxPdXRsZXRdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmVofV19KSxudWxsKTtjbGFzcyBCJHt9QiQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEIkKX0sQiQuybVjbXA9dG8oe3R5cGU6QiQsc2VsZWN0b3JzOltbImNkay1oZWFkZXItcm93Il0sWyJ0ciIsImNkay1oZWFkZXItcm93IiwiIl1dLGhvc3RBdHRyczpbInJvbGUiLCJyb3ciLDEsImNkay1oZWFkZXItcm93Il0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka0NlbGxPdXRsZXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmSW0oMCwwKX0sZGlyZWN0aXZlczpbTCRdLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoQiQsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoiY2RrLWhlYWRlci1yb3csIHRyW2Nkay1oZWFkZXItcm93XSIsdGVtcGxhdGU6QSQsaG9zdDp7Y2xhc3M6ImNkay1oZWFkZXItcm93Iixyb2xlOiJyb3cifSxjaGFuZ2VEZXRlY3Rpb246em4uRGVmYXVsdCxlbmNhcHN1bGF0aW9uOkhuLk5vbmV9XX1dLG51bGwsbnVsbCk7Y2xhc3MgViR7fVYkLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxWJCl9LFYkLsm1Y21wPXRvKHt0eXBlOlYkLHNlbGVjdG9yczpbWyJjZGstZm9vdGVyLXJvdyJdLFsidHIiLCJjZGstZm9vdGVyLXJvdyIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwicm93IiwxLCJjZGstZm9vdGVyLXJvdyJdLGRlY2xzOjEsdmFyczowLGNvbnN0czpbWyJjZGtDZWxsT3V0bGV0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJkltKDAsMCl9LGRpcmVjdGl2ZXM6W0wkXSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFYkLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6ImNkay1mb290ZXItcm93LCB0cltjZGstZm9vdGVyLXJvd10iLHRlbXBsYXRlOkEkLGhvc3Q6e2NsYXNzOiJjZGstZm9vdGVyLXJvdyIscm9sZToicm93In0sY2hhbmdlRGV0ZWN0aW9uOnpuLkRlZmF1bHQsZW5jYXBzdWxhdGlvbjpIbi5Ob25lfV19XSxudWxsLG51bGwpO2NsYXNzIGoke31qJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aiQpfSxqJC7JtWNtcD10byh7dHlwZTpqJCxzZWxlY3RvcnM6W1siY2RrLXJvdyJdLFsidHIiLCJjZGstcm93IiwiIl1dLGhvc3RBdHRyczpbInJvbGUiLCJyb3ciLDEsImNkay1yb3ciXSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1siY2RrQ2VsbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZJbSgwLDApfSxkaXJlY3RpdmVzOltMJF0sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChqJCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJjZGstcm93LCB0cltjZGstcm93XSIsdGVtcGxhdGU6QSQsaG9zdDp7Y2xhc3M6ImNkay1yb3ciLHJvbGU6InJvdyJ9LGNoYW5nZURldGVjdGlvbjp6bi5EZWZhdWx0LGVuY2Fwc3VsYXRpb246SG4uTm9uZX1dfV0sbnVsbCxudWxsKTtjbGFzcyBVJHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnRlbXBsYXRlUmVmPXR9fVUkLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxVJCkoU20oWGcpKX0sVSQuybVkaXI9bG8oe3R5cGU6VSQsc2VsZWN0b3JzOltbIm5nLXRlbXBsYXRlIiwiY2RrTm9EYXRhUm93IiwiIl1dfSksVSQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpYZ31dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoVSQsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoibmctdGVtcGxhdGVbY2RrTm9EYXRhUm93XSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpYZ31dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBHJD1bInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdO2NsYXNzIFcke2NvbnN0cnVjdG9yKHQsZSxuLG8saT0hMCxhPSEwLHIpe3RoaXMuX2lzTmF0aXZlSHRtbFRhYmxlPXQsdGhpcy5fc3RpY2tDZWxsQ3NzPWUsdGhpcy5kaXJlY3Rpb249bix0aGlzLl9jb2FsZXNjZWRTdHlsZVNjaGVkdWxlcj1vLHRoaXMuX2lzQnJvd3Nlcj1pLHRoaXMuX25lZWRzUG9zaXRpb25TdGlja3lPbkVsZW1lbnQ9YSx0aGlzLl9wb3NpdGlvbkxpc3RlbmVyPXIsdGhpcy5fY2FjaGVkQ2VsbFdpZHRocz1bXSx0aGlzLl9ib3JkZXJDZWxsQ3NzPXt0b3A6YCR7ZX0tYm9yZGVyLWVsZW0tdG9wYCxib3R0b206YCR7ZX0tYm9yZGVyLWVsZW0tYm90dG9tYCxsZWZ0OmAke2V9LWJvcmRlci1lbGVtLWxlZnRgLHJpZ2h0OmAke2V9LWJvcmRlci1lbGVtLXJpZ2h0YH19Y2xlYXJTdGlja3lQb3NpdGlvbmluZyh0LGUpe2NvbnN0IG49W107Zm9yKGNvbnN0IGUgb2YgdClpZihlLm5vZGVUeXBlPT09ZS5FTEVNRU5UX05PREUpe24ucHVzaChlKTtmb3IobGV0IHQ9MDt0PGUuY2hpbGRyZW4ubGVuZ3RoO3QrKyluLnB1c2goZS5jaGlsZHJlblt0XSl9dGhpcy5fY29hbGVzY2VkU3R5bGVTY2hlZHVsZXIuc2NoZWR1bGUoKCgpPT57Zm9yKGNvbnN0IHQgb2Ygbil0aGlzLl9yZW1vdmVTdGlja3lTdHlsZSh0LGUpfSkpfXVwZGF0ZVN0aWNreUNvbHVtbnModCxlLG4sbz0hMCl7aWYoIXQubGVuZ3RofHwhdGhpcy5faXNCcm93c2VyfHwhZS5zb21lKCh0PT50KSkmJiFuLnNvbWUoKHQ9PnQpKSlyZXR1cm4gdm9pZCh0aGlzLl9wb3NpdGlvbkxpc3RlbmVyJiYodGhpcy5fcG9zaXRpb25MaXN0ZW5lci5zdGlja3lDb2x1bW5zVXBkYXRlZCh7c2l6ZXM6W119KSx0aGlzLl9wb3NpdGlvbkxpc3RlbmVyLnN0aWNreUVuZENvbHVtbnNVcGRhdGVkKHtzaXplczpbXX0pKSk7Y29uc3QgaT10WzBdLGE9aS5jaGlsZHJlbi5sZW5ndGgscj10aGlzLl9nZXRDZWxsV2lkdGhzKGksbykscz10aGlzLl9nZXRTdGlja3lTdGFydENvbHVtblBvc2l0aW9ucyhyLGUpLGw9dGhpcy5fZ2V0U3RpY2t5RW5kQ29sdW1uUG9zaXRpb25zKHIsbiksYz1lLmxhc3RJbmRleE9mKCEwKSxkPW4uaW5kZXhPZighMCk7dGhpcy5fY29hbGVzY2VkU3R5bGVTY2hlZHVsZXIuc2NoZWR1bGUoKCgpPT57Y29uc3Qgbz0icnRsIj09PXRoaXMuZGlyZWN0aW9uLGk9bz8icmlnaHQiOiJsZWZ0IixwPW8/ImxlZnQiOiJyaWdodCI7Zm9yKGNvbnN0IG8gb2YgdClmb3IobGV0IHQ9MDt0PGE7dCsrKXtjb25zdCBhPW8uY2hpbGRyZW5bdF07ZVt0XSYmdGhpcy5fYWRkU3RpY2t5U3R5bGUoYSxpLHNbdF0sdD09PWMpLG5bdF0mJnRoaXMuX2FkZFN0aWNreVN0eWxlKGEscCxsW3RdLHQ9PT1kKX10aGlzLl9wb3NpdGlvbkxpc3RlbmVyJiYodGhpcy5fcG9zaXRpb25MaXN0ZW5lci5zdGlja3lDb2x1bW5zVXBkYXRlZCh7c2l6ZXM6LTE9PT1jP1tdOnIuc2xpY2UoMCxjKzEpLm1hcCgoKHQsbik9PmVbbl0/dDpudWxsKSl9KSx0aGlzLl9wb3NpdGlvbkxpc3RlbmVyLnN0aWNreUVuZENvbHVtbnNVcGRhdGVkKHtzaXplczotMT09PWQ/W106ci5zbGljZShkKS5tYXAoKCh0LGUpPT5uW2UrZF0/dDpudWxsKSkucmV2ZXJzZSgpfSkpfSkpfXN0aWNrUm93cyh0LGUsbil7aWYoIXRoaXMuX2lzQnJvd3NlcilyZXR1cm47Y29uc3Qgbz0iYm90dG9tIj09PW4/dC5zbGljZSgpLnJldmVyc2UoKTp0LGk9ImJvdHRvbSI9PT1uP2Uuc2xpY2UoKS5yZXZlcnNlKCk6ZSxhPVtdLHI9W10scz1bXTtmb3IobGV0IHQ9MCxlPTA7dDxvLmxlbmd0aDt0Kyspe2lmKCFpW3RdKWNvbnRpbnVlO2FbdF09ZTtjb25zdCBuPW9bdF07c1t0XT10aGlzLl9pc05hdGl2ZUh0bWxUYWJsZT9BcnJheS5mcm9tKG4uY2hpbGRyZW4pOltuXTtjb25zdCBsPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O2UrPWwsclt0XT1sfWNvbnN0IGw9aS5sYXN0SW5kZXhPZighMCk7dGhpcy5fY29hbGVzY2VkU3R5bGVTY2hlZHVsZXIuc2NoZWR1bGUoKCgpPT57dmFyIHQsZTtmb3IobGV0IHQ9MDt0PG8ubGVuZ3RoO3QrKyl7aWYoIWlbdF0pY29udGludWU7Y29uc3QgZT1hW3RdLG89dD09PWw7Zm9yKGNvbnN0IGkgb2Ygc1t0XSl0aGlzLl9hZGRTdGlja3lTdHlsZShpLG4sZSxvKX0idG9wIj09PW4/bnVsbD09PSh0PXRoaXMuX3Bvc2l0aW9uTGlzdGVuZXIpfHx2b2lkIDA9PT10fHx0LnN0aWNreUhlYWRlclJvd3NVcGRhdGVkKHtzaXplczpyLG9mZnNldHM6YSxlbGVtZW50czpzfSk6bnVsbD09PShlPXRoaXMuX3Bvc2l0aW9uTGlzdGVuZXIpfHx2b2lkIDA9PT1lfHxlLnN0aWNreUZvb3RlclJvd3NVcGRhdGVkKHtzaXplczpyLG9mZnNldHM6YSxlbGVtZW50czpzfSl9KSl9dXBkYXRlU3RpY2t5Rm9vdGVyQ29udGFpbmVyKHQsZSl7aWYoIXRoaXMuX2lzTmF0aXZlSHRtbFRhYmxlKXJldHVybjtjb25zdCBuPXQucXVlcnlTZWxlY3RvcigidGZvb3QiKTt0aGlzLl9jb2FsZXNjZWRTdHlsZVNjaGVkdWxlci5zY2hlZHVsZSgoKCk9PntlLnNvbWUoKHQ9PiF0KSk/dGhpcy5fcmVtb3ZlU3RpY2t5U3R5bGUobixbImJvdHRvbSJdKTp0aGlzLl9hZGRTdGlja3lTdHlsZShuLCJib3R0b20iLDAsITEpfSkpfV9yZW1vdmVTdGlja3lTdHlsZSh0LGUpe2Zvcihjb25zdCBuIG9mIGUpdC5zdHlsZVtuXT0iIix0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fYm9yZGVyQ2VsbENzc1tuXSk7RyQuc29tZSgobj0+LTE9PT1lLmluZGV4T2YobikmJnQuc3R5bGVbbl0pKT90LnN0eWxlLnpJbmRleD10aGlzLl9nZXRDYWxjdWxhdGVkWkluZGV4KHQpOih0LnN0eWxlLnpJbmRleD0iIix0aGlzLl9uZWVkc1Bvc2l0aW9uU3RpY2t5T25FbGVtZW50JiYodC5zdHlsZS5wb3NpdGlvbj0iIiksdC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX3N0aWNrQ2VsbENzcykpfV9hZGRTdGlja3lTdHlsZSh0LGUsbixvKXt0LmNsYXNzTGlzdC5hZGQodGhpcy5fc3RpY2tDZWxsQ3NzKSxvJiZ0LmNsYXNzTGlzdC5hZGQodGhpcy5fYm9yZGVyQ2VsbENzc1tlXSksdC5zdHlsZVtlXT1gJHtufXB4YCx0LnN0eWxlLnpJbmRleD10aGlzLl9nZXRDYWxjdWxhdGVkWkluZGV4KHQpLHRoaXMuX25lZWRzUG9zaXRpb25TdGlja3lPbkVsZW1lbnQmJih0LnN0eWxlLmNzc1RleHQrPSJwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7IHBvc2l0aW9uOiBzdGlja3k7ICIpfV9nZXRDYWxjdWxhdGVkWkluZGV4KHQpe2NvbnN0IGU9e3RvcDoxMDAsYm90dG9tOjEwLGxlZnQ6MSxyaWdodDoxfTtsZXQgbj0wO2Zvcihjb25zdCBvIG9mIEckKXQuc3R5bGVbb10mJihuKz1lW29dKTtyZXR1cm4gbj9gJHtufWA6IiJ9X2dldENlbGxXaWR0aHModCxlPSEwKXtpZighZSYmdGhpcy5fY2FjaGVkQ2VsbFdpZHRocy5sZW5ndGgpcmV0dXJuIHRoaXMuX2NhY2hlZENlbGxXaWR0aHM7Y29uc3Qgbj1bXSxvPXQuY2hpbGRyZW47Zm9yKGxldCB0PTA7dDxvLmxlbmd0aDt0Kyspbi5wdXNoKG9bdF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO3JldHVybiB0aGlzLl9jYWNoZWRDZWxsV2lkdGhzPW4sbn1fZ2V0U3RpY2t5U3RhcnRDb2x1bW5Qb3NpdGlvbnModCxlKXtjb25zdCBuPVtdO2xldCBvPTA7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspZVtpXSYmKG5baV09byxvKz10W2ldKTtyZXR1cm4gbn1fZ2V0U3RpY2t5RW5kQ29sdW1uUG9zaXRpb25zKHQsZSl7Y29uc3Qgbj1bXTtsZXQgbz0wO2ZvcihsZXQgaT10Lmxlbmd0aDtpPjA7aS0tKWVbaV0mJihuW2ldPW8sbys9dFtpXSk7cmV0dXJuIG59fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9mdW5jdGlvbiBZJCh0KXtyZXR1cm4gRXJyb3IoYENvdWxkIG5vdCBmaW5kIGNvbHVtbiB3aXRoIGlkICIke3R9Ii5gKX0KLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNvbnN0IHEkPW5ldyBHYSgiQ0RLX1NQTCIpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi9jbGFzcyBaJHt9WiQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFokKX0sWiQuybVkaXI9bG8oe3R5cGU6WiQsc2VsZWN0b3JzOltbImNkay10YWJsZSIsInJlY3ljbGVSb3dzIiwiIl0sWyJ0YWJsZSIsImNkay10YWJsZSIsIiIsInJlY3ljbGVSb3dzIiwiIl1dLGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6YUYsdXNlQ2xhc3M6bkZ9XSldfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChaJCxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJjZGstdGFibGVbcmVjeWNsZVJvd3NdLCB0YWJsZVtjZGstdGFibGVdW3JlY3ljbGVSb3dzXSIscHJvdmlkZXJzOlt7cHJvdmlkZTphRix1c2VDbGFzczpuRn1dfV19XSxudWxsLG51bGwpO2NsYXNzIFgke2NvbnN0cnVjdG9yKHQsZSl7dGhpcy52aWV3Q29udGFpbmVyPXQsdGhpcy5lbGVtZW50UmVmPWV9fVgkLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxYJCkoU20oZWgpLFNtKGhnKSl9LFgkLsm1ZGlyPWxvKHt0eXBlOlgkLHNlbGVjdG9yczpbWyIiLCJyb3dPdXRsZXQiLCIiXV19KSxYJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmVofSx7dHlwZTpoZ31dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoWCQsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW3Jvd091dGxldF0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6ZWh9LHt0eXBlOmhnfV19KSxudWxsKTtjbGFzcyBLJHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMudmlld0NvbnRhaW5lcj10LHRoaXMuZWxlbWVudFJlZj1lfX1LJC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SyQpKFNtKGVoKSxTbShoZykpfSxLJC7JtWRpcj1sbyh7dHlwZTpLJCxzZWxlY3RvcnM6W1siIiwiaGVhZGVyUm93T3V0bGV0IiwiIl1dfSksSyQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTplaH0se3R5cGU6aGd9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEskLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6IltoZWFkZXJSb3dPdXRsZXRdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmVofSx7dHlwZTpoZ31dfSksbnVsbCk7Y2xhc3MgSiR7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZpZXdDb250YWluZXI9dCx0aGlzLmVsZW1lbnRSZWY9ZX19SiQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEokKShTbShlaCksU20oaGcpKX0sSiQuybVkaXI9bG8oe3R5cGU6SiQsc2VsZWN0b3JzOltbIiIsImZvb3RlclJvd091dGxldCIsIiJdXX0pLEokLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6ZWh9LHt0eXBlOmhnfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChKJCxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbZm9vdGVyUm93T3V0bGV0XSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTplaH0se3R5cGU6aGd9XX0pLG51bGwpO2NsYXNzIFEke2NvbnN0cnVjdG9yKHQsZSl7dGhpcy52aWV3Q29udGFpbmVyPXQsdGhpcy5lbGVtZW50UmVmPWV9fVEkLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxRJCkoU20oZWgpLFNtKGhnKSl9LFEkLsm1ZGlyPWxvKHt0eXBlOlEkLHNlbGVjdG9yczpbWyIiLCJub0RhdGFSb3dPdXRsZXQiLCIiXV19KSxRJC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmVofSx7dHlwZTpoZ31dLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoUSQsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW25vRGF0YVJvd091dGxldF0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6ZWh9LHt0eXBlOmhnfV19KSxudWxsKTtjb25zdCAkJD0nXG4gIDxuZy1jb250ZW50IHNlbGVjdD0iY2FwdGlvbiI+PC9uZy1jb250ZW50PlxuICA8bmctY29udGVudCBzZWxlY3Q9ImNvbGdyb3VwLCBjb2wiPjwvbmctY29udGVudD5cbiAgPG5nLWNvbnRhaW5lciBoZWFkZXJSb3dPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgcm93T3V0bGV0PjwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIG5vRGF0YVJvd091dGxldD48L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBmb290ZXJSb3dPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4nO2NsYXNzIHQwe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyxsLGMsZCl7dGhpcy5fZGlmZmVycz10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fZWxlbWVudFJlZj1uLHRoaXMuX2Rpcj1pLHRoaXMuX3BsYXRmb3JtPXIsdGhpcy5fdmlld1JlcGVhdGVyPXMsdGhpcy5fY29hbGVzY2VkU3R5bGVTY2hlZHVsZXI9bCx0aGlzLl92aWV3cG9ydFJ1bGVyPWMsdGhpcy5fc3RpY2t5UG9zaXRpb25pbmdMaXN0ZW5lcj1kLHRoaXMuX29uRGVzdHJveT1uZXcgSSx0aGlzLl9jb2x1bW5EZWZzQnlOYW1lPW5ldyBNYXAsdGhpcy5fY3VzdG9tQ29sdW1uRGVmcz1uZXcgU2V0LHRoaXMuX2N1c3RvbVJvd0RlZnM9bmV3IFNldCx0aGlzLl9jdXN0b21IZWFkZXJSb3dEZWZzPW5ldyBTZXQsdGhpcy5fY3VzdG9tRm9vdGVyUm93RGVmcz1uZXcgU2V0LHRoaXMuX2hlYWRlclJvd0RlZkNoYW5nZWQ9ITAsdGhpcy5fZm9vdGVyUm93RGVmQ2hhbmdlZD0hMCx0aGlzLl9zdGlja3lDb2x1bW5TdHlsZXNOZWVkUmVzZXQ9ITAsdGhpcy5fZm9yY2VSZWNhbGN1bGF0ZUNlbGxXaWR0aHM9ITAsdGhpcy5fY2FjaGVkUmVuZGVyUm93c01hcD1uZXcgTWFwLHRoaXMuc3RpY2t5Q3NzQ2xhc3M9ImNkay10YWJsZS1zdGlja3kiLHRoaXMubmVlZHNQb3NpdGlvblN0aWNreU9uRWxlbWVudD0hMCx0aGlzLl9pc1Nob3dpbmdOb0RhdGFSb3c9ITEsdGhpcy5fbXVsdGlUZW1wbGF0ZURhdGFSb3dzPSExLHRoaXMuX2ZpeGVkTGF5b3V0PSExLHRoaXMuY29udGVudENoYW5nZWQ9bmV3IExoLHRoaXMudmlld0NoYW5nZT1uZXcgRih7c3RhcnQ6MCxlbmQ6TnVtYmVyLk1BWF9WQUxVRX0pLG98fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoInJvbGUiLCJ0YWJsZSIpLHRoaXMuX2RvY3VtZW50PWEsdGhpcy5faXNOYXRpdmVIdG1sVGFibGU9IlRBQkxFIj09PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ub2RlTmFtZX1nZXQgdHJhY2tCeSgpe3JldHVybiB0aGlzLl90cmFja0J5Rm59c2V0IHRyYWNrQnkodCl7InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0Rldk1vZGUmJiFuZ0Rldk1vZGV8fG51bGw9PXR8fCJmdW5jdGlvbiI9PXR5cGVvZiB0fHxjb25zb2xlLndhcm4oYHRyYWNrQnkgbXVzdCBiZSBhIGZ1bmN0aW9uLCBidXQgcmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeSh0KX0uYCksdGhpcy5fdHJhY2tCeUZuPXR9Z2V0IGRhdGFTb3VyY2UoKXtyZXR1cm4gdGhpcy5fZGF0YVNvdXJjZX1zZXQgZGF0YVNvdXJjZSh0KXt0aGlzLl9kYXRhU291cmNlIT09dCYmdGhpcy5fc3dpdGNoRGF0YVNvdXJjZSh0KX1nZXQgbXVsdGlUZW1wbGF0ZURhdGFSb3dzKCl7cmV0dXJuIHRoaXMuX211bHRpVGVtcGxhdGVEYXRhUm93c31zZXQgbXVsdGlUZW1wbGF0ZURhdGFSb3dzKHQpe3RoaXMuX211bHRpVGVtcGxhdGVEYXRhUm93cz15eih0KSx0aGlzLl9yb3dPdXRsZXQmJnRoaXMuX3Jvd091dGxldC52aWV3Q29udGFpbmVyLmxlbmd0aCYmKHRoaXMuX2ZvcmNlUmVuZGVyRGF0YVJvd3MoKSx0aGlzLnVwZGF0ZVN0aWNreUNvbHVtblN0eWxlcygpKX1nZXQgZml4ZWRMYXlvdXQoKXtyZXR1cm4gdGhpcy5fZml4ZWRMYXlvdXR9c2V0IGZpeGVkTGF5b3V0KHQpe3RoaXMuX2ZpeGVkTGF5b3V0PXl6KHQpLHRoaXMuX2ZvcmNlUmVjYWxjdWxhdGVDZWxsV2lkdGhzPSEwLHRoaXMuX3N0aWNreUNvbHVtblN0eWxlc05lZWRSZXNldD0hMH1uZ09uSW5pdCgpe3RoaXMuX3NldHVwU3RpY2t5U3R5bGVyKCksdGhpcy5faXNOYXRpdmVIdG1sVGFibGUmJnRoaXMuX2FwcGx5TmF0aXZlVGFibGVTZWN0aW9ucygpLHRoaXMuX2RhdGFEaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKFtdKS5jcmVhdGUoKCh0LGUpPT50aGlzLnRyYWNrQnk/dGhpcy50cmFja0J5KGUuZGF0YUluZGV4LGUuZGF0YSk6ZSkpLHRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkucGlwZShJZSh0aGlzLl9vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fZm9yY2VSZWNhbGN1bGF0ZUNlbGxXaWR0aHM9ITB9KSl9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7aWYodGhpcy5fY2FjaGVSb3dEZWZzKCksdGhpcy5fY2FjaGVDb2x1bW5EZWZzKCksIXRoaXMuX2hlYWRlclJvd0RlZnMubGVuZ3RoJiYhdGhpcy5fZm9vdGVyUm93RGVmcy5sZW5ndGgmJiF0aGlzLl9yb3dEZWZzLmxlbmd0aCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93KGZ1bmN0aW9uIHQoKXtyZXR1cm4gRXJyb3IoIk1pc3NpbmcgZGVmaW5pdGlvbnMgZm9yIGhlYWRlciwgZm9vdGVyLCBhbmQgcm93OyBjYW5ub3QgZGV0ZXJtaW5lIHdoaWNoIGNvbHVtbnMgc2hvdWxkIGJlIHJlbmRlcmVkLiIpfSkoKTtjb25zdCBlPXRoaXMuX3JlbmRlclVwZGF0ZWRDb2x1bW5zKCl8fHRoaXMuX2hlYWRlclJvd0RlZkNoYW5nZWR8fHRoaXMuX2Zvb3RlclJvd0RlZkNoYW5nZWQ7dGhpcy5fc3RpY2t5Q29sdW1uU3R5bGVzTmVlZFJlc2V0PXRoaXMuX3N0aWNreUNvbHVtblN0eWxlc05lZWRSZXNldHx8ZSx0aGlzLl9mb3JjZVJlY2FsY3VsYXRlQ2VsbFdpZHRocz1lLHRoaXMuX2hlYWRlclJvd0RlZkNoYW5nZWQmJih0aGlzLl9mb3JjZVJlbmRlckhlYWRlclJvd3MoKSx0aGlzLl9oZWFkZXJSb3dEZWZDaGFuZ2VkPSExKSx0aGlzLl9mb290ZXJSb3dEZWZDaGFuZ2VkJiYodGhpcy5fZm9yY2VSZW5kZXJGb290ZXJSb3dzKCksdGhpcy5fZm9vdGVyUm93RGVmQ2hhbmdlZD0hMSksdGhpcy5kYXRhU291cmNlJiZ0aGlzLl9yb3dEZWZzLmxlbmd0aD4wJiYhdGhpcy5fcmVuZGVyQ2hhbmdlU3Vic2NyaXB0aW9uP3RoaXMuX29ic2VydmVSZW5kZXJDaGFuZ2VzKCk6dGhpcy5fc3RpY2t5Q29sdW1uU3R5bGVzTmVlZFJlc2V0JiZ0aGlzLnVwZGF0ZVN0aWNreUNvbHVtblN0eWxlcygpLHRoaXMuX2NoZWNrU3RpY2t5U3RhdGVzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yb3dPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX25vRGF0YVJvd091dGxldC52aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5faGVhZGVyUm93T3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl9mb290ZXJSb3dPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2NhY2hlZFJlbmRlclJvd3NNYXAuY2xlYXIoKSx0aGlzLl9vbkRlc3Ryb3kubmV4dCgpLHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpLCRIKHRoaXMuZGF0YVNvdXJjZSkmJnRoaXMuZGF0YVNvdXJjZS5kaXNjb25uZWN0KHRoaXMpfXJlbmRlclJvd3MoKXt0aGlzLl9yZW5kZXJSb3dzPXRoaXMuX2dldEFsbFJlbmRlclJvd3MoKTtjb25zdCB0PXRoaXMuX2RhdGFEaWZmZXIuZGlmZih0aGlzLl9yZW5kZXJSb3dzKTtpZighdClyZXR1cm4gdGhpcy5fdXBkYXRlTm9EYXRhUm93KCksdm9pZCB0aGlzLmNvbnRlbnRDaGFuZ2VkLm5leHQoKTtjb25zdCBlPXRoaXMuX3Jvd091dGxldC52aWV3Q29udGFpbmVyO3RoaXMuX3ZpZXdSZXBlYXRlci5hcHBseUNoYW5nZXModCxlLCgodCxlLG4pPT50aGlzLl9nZXRFbWJlZGRlZFZpZXdBcmdzKHQuaXRlbSxuKSksKHQ9PnQuaXRlbS5kYXRhKSwodD0+ezE9PT10Lm9wZXJhdGlvbiYmdC5jb250ZXh0JiZ0aGlzLl9yZW5kZXJDZWxsVGVtcGxhdGVGb3JJdGVtKHQucmVjb3JkLml0ZW0ucm93RGVmLHQuY29udGV4dCl9KSksdGhpcy5fdXBkYXRlUm93SW5kZXhDb250ZXh0KCksdC5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoKHQ9PntlLmdldCh0LmN1cnJlbnRJbmRleCkuY29udGV4dC4kaW1wbGljaXQ9dC5pdGVtLmRhdGF9KSksdGhpcy5fdXBkYXRlTm9EYXRhUm93KCksdGhpcy51cGRhdGVTdGlja3lDb2x1bW5TdHlsZXMoKSx0aGlzLmNvbnRlbnRDaGFuZ2VkLm5leHQoKX1hZGRDb2x1bW5EZWYodCl7dGhpcy5fY3VzdG9tQ29sdW1uRGVmcy5hZGQodCl9cmVtb3ZlQ29sdW1uRGVmKHQpe3RoaXMuX2N1c3RvbUNvbHVtbkRlZnMuZGVsZXRlKHQpfWFkZFJvd0RlZih0KXt0aGlzLl9jdXN0b21Sb3dEZWZzLmFkZCh0KX1yZW1vdmVSb3dEZWYodCl7dGhpcy5fY3VzdG9tUm93RGVmcy5kZWxldGUodCl9YWRkSGVhZGVyUm93RGVmKHQpe3RoaXMuX2N1c3RvbUhlYWRlclJvd0RlZnMuYWRkKHQpLHRoaXMuX2hlYWRlclJvd0RlZkNoYW5nZWQ9ITB9cmVtb3ZlSGVhZGVyUm93RGVmKHQpe3RoaXMuX2N1c3RvbUhlYWRlclJvd0RlZnMuZGVsZXRlKHQpLHRoaXMuX2hlYWRlclJvd0RlZkNoYW5nZWQ9ITB9YWRkRm9vdGVyUm93RGVmKHQpe3RoaXMuX2N1c3RvbUZvb3RlclJvd0RlZnMuYWRkKHQpLHRoaXMuX2Zvb3RlclJvd0RlZkNoYW5nZWQ9ITB9cmVtb3ZlRm9vdGVyUm93RGVmKHQpe3RoaXMuX2N1c3RvbUZvb3RlclJvd0RlZnMuZGVsZXRlKHQpLHRoaXMuX2Zvb3RlclJvd0RlZkNoYW5nZWQ9ITB9c2V0Tm9EYXRhUm93KHQpe3RoaXMuX2N1c3RvbU5vRGF0YVJvdz10fXVwZGF0ZVN0aWNreUhlYWRlclJvd1N0eWxlcygpe2NvbnN0IHQ9dGhpcy5fZ2V0UmVuZGVyZWRSb3dzKHRoaXMuX2hlYWRlclJvd091dGxldCksZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigidGhlYWQiKTtlJiYoZS5zdHlsZS5kaXNwbGF5PXQubGVuZ3RoPyIiOiJub25lIik7Y29uc3Qgbj10aGlzLl9oZWFkZXJSb3dEZWZzLm1hcCgodD0+dC5zdGlja3kpKTt0aGlzLl9zdGlja3lTdHlsZXIuY2xlYXJTdGlja3lQb3NpdGlvbmluZyh0LFsidG9wIl0pLHRoaXMuX3N0aWNreVN0eWxlci5zdGlja1Jvd3ModCxuLCJ0b3AiKSx0aGlzLl9oZWFkZXJSb3dEZWZzLmZvckVhY2goKHQ9PnQucmVzZXRTdGlja3lDaGFuZ2VkKCkpKX11cGRhdGVTdGlja3lGb290ZXJSb3dTdHlsZXMoKXtjb25zdCB0PXRoaXMuX2dldFJlbmRlcmVkUm93cyh0aGlzLl9mb290ZXJSb3dPdXRsZXQpLGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoInRmb290Iik7ZSYmKGUuc3R5bGUuZGlzcGxheT10Lmxlbmd0aD8iIjoibm9uZSIpO2NvbnN0IG49dGhpcy5fZm9vdGVyUm93RGVmcy5tYXAoKHQ9PnQuc3RpY2t5KSk7dGhpcy5fc3RpY2t5U3R5bGVyLmNsZWFyU3RpY2t5UG9zaXRpb25pbmcodCxbImJvdHRvbSJdKSx0aGlzLl9zdGlja3lTdHlsZXIuc3RpY2tSb3dzKHQsbiwiYm90dG9tIiksdGhpcy5fc3RpY2t5U3R5bGVyLnVwZGF0ZVN0aWNreUZvb3RlckNvbnRhaW5lcih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsbiksdGhpcy5fZm9vdGVyUm93RGVmcy5mb3JFYWNoKCh0PT50LnJlc2V0U3RpY2t5Q2hhbmdlZCgpKSl9dXBkYXRlU3RpY2t5Q29sdW1uU3R5bGVzKCl7Y29uc3QgdD10aGlzLl9nZXRSZW5kZXJlZFJvd3ModGhpcy5faGVhZGVyUm93T3V0bGV0KSxlPXRoaXMuX2dldFJlbmRlcmVkUm93cyh0aGlzLl9yb3dPdXRsZXQpLG49dGhpcy5fZ2V0UmVuZGVyZWRSb3dzKHRoaXMuX2Zvb3RlclJvd091dGxldCk7KHRoaXMuX2lzTmF0aXZlSHRtbFRhYmxlJiYhdGhpcy5fZml4ZWRMYXlvdXR8fHRoaXMuX3N0aWNreUNvbHVtblN0eWxlc05lZWRSZXNldCkmJih0aGlzLl9zdGlja3lTdHlsZXIuY2xlYXJTdGlja3lQb3NpdGlvbmluZyhbLi4udCwuLi5lLC4uLm5dLFsibGVmdCIsInJpZ2h0Il0pLHRoaXMuX3N0aWNreUNvbHVtblN0eWxlc05lZWRSZXNldD0hMSksdC5mb3JFYWNoKCgodCxlKT0+e3RoaXMuX2FkZFN0aWNreUNvbHVtblN0eWxlcyhbdF0sdGhpcy5faGVhZGVyUm93RGVmc1tlXSl9KSksdGhpcy5fcm93RGVmcy5mb3JFYWNoKCh0PT57Y29uc3Qgbj1bXTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl0aGlzLl9yZW5kZXJSb3dzW29dLnJvd0RlZj09PXQmJm4ucHVzaChlW29dKTt0aGlzLl9hZGRTdGlja3lDb2x1bW5TdHlsZXMobix0KX0pKSxuLmZvckVhY2goKCh0LGUpPT57dGhpcy5fYWRkU3RpY2t5Q29sdW1uU3R5bGVzKFt0XSx0aGlzLl9mb290ZXJSb3dEZWZzW2VdKX0pKSxBcnJheS5mcm9tKHRoaXMuX2NvbHVtbkRlZnNCeU5hbWUudmFsdWVzKCkpLmZvckVhY2goKHQ9PnQucmVzZXRTdGlja3lDaGFuZ2VkKCkpKX1fZ2V0QWxsUmVuZGVyUm93cygpe2NvbnN0IHQ9W10sZT10aGlzLl9jYWNoZWRSZW5kZXJSb3dzTWFwO3RoaXMuX2NhY2hlZFJlbmRlclJvd3NNYXA9bmV3IE1hcDtmb3IobGV0IG49MDtuPHRoaXMuX2RhdGEubGVuZ3RoO24rKyl7bGV0IG89dGhpcy5fZGF0YVtuXTtjb25zdCBpPXRoaXMuX2dldFJlbmRlclJvd3NGb3JEYXRhKG8sbixlLmdldChvKSk7dGhpcy5fY2FjaGVkUmVuZGVyUm93c01hcC5oYXMobyl8fHRoaXMuX2NhY2hlZFJlbmRlclJvd3NNYXAuc2V0KG8sbmV3IFdlYWtNYXApO2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKXtsZXQgbj1pW2VdO2NvbnN0IG89dGhpcy5fY2FjaGVkUmVuZGVyUm93c01hcC5nZXQobi5kYXRhKTtvLmhhcyhuLnJvd0RlZik/by5nZXQobi5yb3dEZWYpLnB1c2gobik6by5zZXQobi5yb3dEZWYsW25dKSx0LnB1c2gobil9fXJldHVybiB0fV9nZXRSZW5kZXJSb3dzRm9yRGF0YSh0LGUsbil7cmV0dXJuIHRoaXMuX2dldFJvd0RlZnModCxlKS5tYXAoKG89Pntjb25zdCBpPW4mJm4uaGFzKG8pP24uZ2V0KG8pOltdO2lmKGkubGVuZ3RoKXtjb25zdCB0PWkuc2hpZnQoKTtyZXR1cm4gdC5kYXRhSW5kZXg9ZSx0fXJldHVybntkYXRhOnQscm93RGVmOm8sZGF0YUluZGV4OmV9fSkpfV9jYWNoZUNvbHVtbkRlZnMoKXt0aGlzLl9jb2x1bW5EZWZzQnlOYW1lLmNsZWFyKCksZTAodGhpcy5fZ2V0T3duRGVmcyh0aGlzLl9jb250ZW50Q29sdW1uRGVmcyksdGhpcy5fY3VzdG9tQ29sdW1uRGVmcykuZm9yRWFjaCgodD0+e2lmKHRoaXMuX2NvbHVtbkRlZnNCeU5hbWUuaGFzKHQubmFtZSkmJigidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSl0aHJvdyhmdW5jdGlvbiBlKHQpe3JldHVybiBFcnJvcihgRHVwbGljYXRlIGNvbHVtbiBkZWZpbml0aW9uIG5hbWUgcHJvdmlkZWQ6ICIke3R9Ii5gKX0pKHQubmFtZSk7dGhpcy5fY29sdW1uRGVmc0J5TmFtZS5zZXQodC5uYW1lLHQpfSkpfV9jYWNoZVJvd0RlZnMoKXt0aGlzLl9oZWFkZXJSb3dEZWZzPWUwKHRoaXMuX2dldE93bkRlZnModGhpcy5fY29udGVudEhlYWRlclJvd0RlZnMpLHRoaXMuX2N1c3RvbUhlYWRlclJvd0RlZnMpLHRoaXMuX2Zvb3RlclJvd0RlZnM9ZTAodGhpcy5fZ2V0T3duRGVmcyh0aGlzLl9jb250ZW50Rm9vdGVyUm93RGVmcyksdGhpcy5fY3VzdG9tRm9vdGVyUm93RGVmcyksdGhpcy5fcm93RGVmcz1lMCh0aGlzLl9nZXRPd25EZWZzKHRoaXMuX2NvbnRlbnRSb3dEZWZzKSx0aGlzLl9jdXN0b21Sb3dEZWZzKTtjb25zdCB0PXRoaXMuX3Jvd0RlZnMuZmlsdGVyKCh0PT4hdC53aGVuKSk7aWYoIXRoaXMubXVsdGlUZW1wbGF0ZURhdGFSb3dzJiZ0Lmxlbmd0aD4xJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3coZnVuY3Rpb24gZSgpe3JldHVybiBFcnJvcigiVGhlcmUgY2FuIG9ubHkgYmUgb25lIGRlZmF1bHQgcm93IHdpdGhvdXQgYSB3aGVuIHByZWRpY2F0ZSBmdW5jdGlvbi4iKX0pKCk7dGhpcy5fZGVmYXVsdFJvd0RlZj10WzBdfV9yZW5kZXJVcGRhdGVkQ29sdW1ucygpe2NvbnN0IHQ9KHQsZSk9PnR8fCEhZS5nZXRDb2x1bW5zRGlmZigpLGU9dGhpcy5fcm93RGVmcy5yZWR1Y2UodCwhMSk7ZSYmdGhpcy5fZm9yY2VSZW5kZXJEYXRhUm93cygpO2NvbnN0IG49dGhpcy5faGVhZGVyUm93RGVmcy5yZWR1Y2UodCwhMSk7biYmdGhpcy5fZm9yY2VSZW5kZXJIZWFkZXJSb3dzKCk7Y29uc3Qgbz10aGlzLl9mb290ZXJSb3dEZWZzLnJlZHVjZSh0LCExKTtyZXR1cm4gbyYmdGhpcy5fZm9yY2VSZW5kZXJGb290ZXJSb3dzKCksZXx8bnx8b31fc3dpdGNoRGF0YVNvdXJjZSh0KXt0aGlzLl9kYXRhPVtdLCRIKHRoaXMuZGF0YVNvdXJjZSkmJnRoaXMuZGF0YVNvdXJjZS5kaXNjb25uZWN0KHRoaXMpLHRoaXMuX3JlbmRlckNoYW5nZVN1YnNjcmlwdGlvbiYmKHRoaXMuX3JlbmRlckNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3JlbmRlckNoYW5nZVN1YnNjcmlwdGlvbj1udWxsKSx0fHwodGhpcy5fZGF0YURpZmZlciYmdGhpcy5fZGF0YURpZmZlci5kaWZmKFtdKSx0aGlzLl9yb3dPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpKSx0aGlzLl9kYXRhU291cmNlPXR9X29ic2VydmVSZW5kZXJDaGFuZ2VzKCl7aWYoIXRoaXMuZGF0YVNvdXJjZSlyZXR1cm47bGV0IHQ7aWYoJEgodGhpcy5kYXRhU291cmNlKT90PXRoaXMuZGF0YVNvdXJjZS5jb25uZWN0KHRoaXMpOk50KHRoaXMuZGF0YVNvdXJjZSk/dD10aGlzLmRhdGFTb3VyY2U6QXJyYXkuaXNBcnJheSh0aGlzLmRhdGFTb3VyY2UpJiYodD1FdCh0aGlzLmRhdGFTb3VyY2UpKSx2b2lkIDA9PT10JiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3coZnVuY3Rpb24gZSgpe3JldHVybiBFcnJvcigiUHJvdmlkZWQgZGF0YSBzb3VyY2UgZGlkIG5vdCBtYXRjaCBhbiBhcnJheSwgT2JzZXJ2YWJsZSwgb3IgRGF0YVNvdXJjZSIpfSkoKTt0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb249dC5waXBlKEllKHRoaXMuX29uRGVzdHJveSkpLnN1YnNjcmliZSgodD0+e3RoaXMuX2RhdGE9dHx8W10sdGhpcy5yZW5kZXJSb3dzKCl9KSl9X2ZvcmNlUmVuZGVySGVhZGVyUm93cygpe3RoaXMuX2hlYWRlclJvd091dGxldC52aWV3Q29udGFpbmVyLmxlbmd0aD4wJiZ0aGlzLl9oZWFkZXJSb3dPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2hlYWRlclJvd0RlZnMuZm9yRWFjaCgoKHQsZSk9PnRoaXMuX3JlbmRlclJvdyh0aGlzLl9oZWFkZXJSb3dPdXRsZXQsdCxlKSkpLHRoaXMudXBkYXRlU3RpY2t5SGVhZGVyUm93U3R5bGVzKCl9X2ZvcmNlUmVuZGVyRm9vdGVyUm93cygpe3RoaXMuX2Zvb3RlclJvd091dGxldC52aWV3Q29udGFpbmVyLmxlbmd0aD4wJiZ0aGlzLl9mb290ZXJSb3dPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Zvb3RlclJvd0RlZnMuZm9yRWFjaCgoKHQsZSk9PnRoaXMuX3JlbmRlclJvdyh0aGlzLl9mb290ZXJSb3dPdXRsZXQsdCxlKSkpLHRoaXMudXBkYXRlU3RpY2t5Rm9vdGVyUm93U3R5bGVzKCl9X2FkZFN0aWNreUNvbHVtblN0eWxlcyh0LGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNvbHVtbnN8fFtdKS5tYXAoKHQ9Pntjb25zdCBlPXRoaXMuX2NvbHVtbkRlZnNCeU5hbWUuZ2V0KHQpO2lmKCFlJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgWSQodCk7cmV0dXJuIGV9KSksbz1uLm1hcCgodD0+dC5zdGlja3kpKSxpPW4ubWFwKCh0PT50LnN0aWNreUVuZCkpO3RoaXMuX3N0aWNreVN0eWxlci51cGRhdGVTdGlja3lDb2x1bW5zKHQsbyxpLCF0aGlzLl9maXhlZExheW91dHx8dGhpcy5fZm9yY2VSZWNhbGN1bGF0ZUNlbGxXaWR0aHMpfV9nZXRSZW5kZXJlZFJvd3ModCl7Y29uc3QgZT1bXTtmb3IobGV0IG49MDtuPHQudmlld0NvbnRhaW5lci5sZW5ndGg7bisrKXtjb25zdCBvPXQudmlld0NvbnRhaW5lci5nZXQobik7ZS5wdXNoKG8ucm9vdE5vZGVzWzBdKX1yZXR1cm4gZX1fZ2V0Um93RGVmcyh0LGUpe2lmKDE9PXRoaXMuX3Jvd0RlZnMubGVuZ3RoKXJldHVyblt0aGlzLl9yb3dEZWZzWzBdXTtsZXQgbj1bXTtpZih0aGlzLm11bHRpVGVtcGxhdGVEYXRhUm93cyluPXRoaXMuX3Jvd0RlZnMuZmlsdGVyKChuPT4hbi53aGVufHxuLndoZW4oZSx0KSkpO2Vsc2V7bGV0IG89dGhpcy5fcm93RGVmcy5maW5kKChuPT5uLndoZW4mJm4ud2hlbihlLHQpKSl8fHRoaXMuX2RlZmF1bHRSb3dEZWY7byYmbi5wdXNoKG8pfWlmKCFuLmxlbmd0aCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93KGZ1bmN0aW9uIG8odCl7cmV0dXJuIEVycm9yKGBDb3VsZCBub3QgZmluZCBhIG1hdGNoaW5nIHJvdyBkZWZpbml0aW9uIGZvciB0aGVwcm92aWRlZCByb3cgZGF0YTogJHtKU09OLnN0cmluZ2lmeSh0KX1gKX0pKHQpO3JldHVybiBufV9nZXRFbWJlZGRlZFZpZXdBcmdzKHQsZSl7cmV0dXJue3RlbXBsYXRlUmVmOnQucm93RGVmLnRlbXBsYXRlLGNvbnRleHQ6eyRpbXBsaWNpdDp0LmRhdGF9LGluZGV4OmV9fV9yZW5kZXJSb3codCxlLG4sbz17fSl7Y29uc3QgaT10LnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGUudGVtcGxhdGUsbyxuKTtyZXR1cm4gdGhpcy5fcmVuZGVyQ2VsbFRlbXBsYXRlRm9ySXRlbShlLG8pLGl9X3JlbmRlckNlbGxUZW1wbGF0ZUZvckl0ZW0odCxlKXtmb3IobGV0IG4gb2YgdGhpcy5fZ2V0Q2VsbFRlbXBsYXRlcyh0KSlMJC5tb3N0UmVjZW50Q2VsbE91dGxldCYmTCQubW9zdFJlY2VudENlbGxPdXRsZXQuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KG4sZSk7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X3VwZGF0ZVJvd0luZGV4Q29udGV4dCgpe2NvbnN0IHQ9dGhpcy5fcm93T3V0bGV0LnZpZXdDb250YWluZXI7Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXtjb25zdCBvPXQuZ2V0KGUpLmNvbnRleHQ7by5jb3VudD1uLG8uZmlyc3Q9MD09PWUsby5sYXN0PWU9PT1uLTEsby5ldmVuPWUlMj09MCxvLm9kZD0hby5ldmVuLHRoaXMubXVsdGlUZW1wbGF0ZURhdGFSb3dzPyhvLmRhdGFJbmRleD10aGlzLl9yZW5kZXJSb3dzW2VdLmRhdGFJbmRleCxvLnJlbmRlckluZGV4PWUpOm8uaW5kZXg9dGhpcy5fcmVuZGVyUm93c1tlXS5kYXRhSW5kZXh9fV9nZXRDZWxsVGVtcGxhdGVzKHQpe3JldHVybiB0JiZ0LmNvbHVtbnM/QXJyYXkuZnJvbSh0LmNvbHVtbnMsKGU9Pntjb25zdCBuPXRoaXMuX2NvbHVtbkRlZnNCeU5hbWUuZ2V0KGUpO2lmKCFuJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgWSQoZSk7cmV0dXJuIHQuZXh0cmFjdENlbGxUZW1wbGF0ZShuKX0pKTpbXX1fYXBwbHlOYXRpdmVUYWJsZVNlY3Rpb25zKCl7Y29uc3QgdD10aGlzLl9kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZT1be3RhZzoidGhlYWQiLG91dGxldHM6W3RoaXMuX2hlYWRlclJvd091dGxldF19LHt0YWc6InRib2R5IixvdXRsZXRzOlt0aGlzLl9yb3dPdXRsZXQsdGhpcy5fbm9EYXRhUm93T3V0bGV0XX0se3RhZzoidGZvb3QiLG91dGxldHM6W3RoaXMuX2Zvb3RlclJvd091dGxldF19XTtmb3IoY29uc3QgbiBvZiBlKXtjb25zdCBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQobi50YWcpO2Uuc2V0QXR0cmlidXRlKCJyb2xlIiwicm93Z3JvdXAiKTtmb3IoY29uc3QgdCBvZiBuLm91dGxldHMpZS5hcHBlbmRDaGlsZCh0LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7dC5hcHBlbmRDaGlsZChlKX10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodCl9X2ZvcmNlUmVuZGVyRGF0YVJvd3MoKXt0aGlzLl9kYXRhRGlmZmVyLmRpZmYoW10pLHRoaXMuX3Jvd091dGxldC52aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5yZW5kZXJSb3dzKCl9X2NoZWNrU3RpY2t5U3RhdGVzKCl7Y29uc3QgdD0odCxlKT0+dHx8ZS5oYXNTdGlja3lDaGFuZ2VkKCk7dGhpcy5faGVhZGVyUm93RGVmcy5yZWR1Y2UodCwhMSkmJnRoaXMudXBkYXRlU3RpY2t5SGVhZGVyUm93U3R5bGVzKCksdGhpcy5fZm9vdGVyUm93RGVmcy5yZWR1Y2UodCwhMSkmJnRoaXMudXBkYXRlU3RpY2t5Rm9vdGVyUm93U3R5bGVzKCksQXJyYXkuZnJvbSh0aGlzLl9jb2x1bW5EZWZzQnlOYW1lLnZhbHVlcygpKS5yZWR1Y2UodCwhMSkmJih0aGlzLl9zdGlja3lDb2x1bW5TdHlsZXNOZWVkUmVzZXQ9ITAsdGhpcy51cGRhdGVTdGlja3lDb2x1bW5TdHlsZXMoKSl9X3NldHVwU3RpY2t5U3R5bGVyKCl7dGhpcy5fc3RpY2t5U3R5bGVyPW5ldyBXJCh0aGlzLl9pc05hdGl2ZUh0bWxUYWJsZSx0aGlzLnN0aWNreUNzc0NsYXNzLHRoaXMuX2Rpcj90aGlzLl9kaXIudmFsdWU6Imx0ciIsdGhpcy5fY29hbGVzY2VkU3R5bGVTY2hlZHVsZXIsdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyLHRoaXMubmVlZHNQb3NpdGlvblN0aWNreU9uRWxlbWVudCx0aGlzLl9zdGlja3lQb3NpdGlvbmluZ0xpc3RlbmVyKSwodGhpcy5fZGlyP3RoaXMuX2Rpci5jaGFuZ2U6RXQoKSkucGlwZShJZSh0aGlzLl9vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLl9zdGlja3lTdHlsZXIuZGlyZWN0aW9uPXQsdGhpcy51cGRhdGVTdGlja3lDb2x1bW5TdHlsZXMoKX0pKX1fZ2V0T3duRGVmcyh0KXtyZXR1cm4gdC5maWx0ZXIoKHQ9PiF0Ll90YWJsZXx8dC5fdGFibGU9PT10aGlzKSl9X3VwZGF0ZU5vRGF0YVJvdygpe2NvbnN0IHQ9dGhpcy5fY3VzdG9tTm9EYXRhUm93fHx0aGlzLl9ub0RhdGFSb3c7aWYodCl7Y29uc3QgZT0wPT09dGhpcy5fcm93T3V0bGV0LnZpZXdDb250YWluZXIubGVuZ3RoO2lmKGUhPT10aGlzLl9pc1Nob3dpbmdOb0RhdGFSb3cpe2NvbnN0IG49dGhpcy5fbm9EYXRhUm93T3V0bGV0LnZpZXdDb250YWluZXI7ZT9uLmNyZWF0ZUVtYmVkZGVkVmlldyh0LnRlbXBsYXRlUmVmKTpuLmNsZWFyKCksdGhpcy5faXNTaG93aW5nTm9EYXRhUm93PWV9fX19ZnVuY3Rpb24gZTAodCxlKXtyZXR1cm4gdC5jb25jYXQoQXJyYXkuZnJvbShlKSl9Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqL3QwLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx0MCkoU20oSGcpLFNtKFVnKSxTbShoZyksTmEoInJvbGUiKSxTbShISSw4KSxTbShaXyksU20od3opLFNtKGFGKSxTbShFJCksU20odUYpLFNtKHEkLDEyKSl9LHQwLsm1Y21wPXRvKHt0eXBlOnQwLHNlbGVjdG9yczpbWyJjZGstdGFibGUiXSxbInRhYmxlIiwiY2RrLXRhYmxlIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uIHQoZSxuLG8pe2lmKDEmZSYmKCRoKG8sVSQsNSksJGgobyxPJCw1KSwkaChvLEYkLDUpLCRoKG8seiQsNSksJGgobyxIJCw1KSksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi5fbm9EYXRhUm93PXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLl9jb250ZW50Q29sdW1uRGVmcz10KSxKaCh0PXRiKCkpJiYobi5fY29udGVudFJvd0RlZnM9dCksSmgodD10YigpKSYmKG4uX2NvbnRlbnRIZWFkZXJSb3dEZWZzPXQpLEpoKHQ9dGIoKSkmJihuLl9jb250ZW50Rm9vdGVyUm93RGVmcz10KX19LHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoUWgoWCQsNyksUWgoSyQsNyksUWgoSiQsNyksUWgoUSQsNykpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4uX3Jvd091dGxldD10LmZpcnN0KSxKaCh0PXRiKCkpJiYobi5faGVhZGVyUm93T3V0bGV0PXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLl9mb290ZXJSb3dPdXRsZXQ9dC5maXJzdCksSmgodD10YigpKSYmKG4uX25vRGF0YVJvd091dGxldD10LmZpcnN0KX19LGhvc3RBdHRyczpbMSwiY2RrLXRhYmxlIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmcHUoImNkay10YWJsZS1maXhlZC1sYXlvdXQiLG4uZml4ZWRMYXlvdXQpfSxpbnB1dHM6e3RyYWNrQnk6InRyYWNrQnkiLGRhdGFTb3VyY2U6ImRhdGFTb3VyY2UiLG11bHRpVGVtcGxhdGVEYXRhUm93czoibXVsdGlUZW1wbGF0ZURhdGFSb3dzIixmaXhlZExheW91dDoiZml4ZWRMYXlvdXQifSxvdXRwdXRzOntjb250ZW50Q2hhbmdlZDoiY29udGVudENoYW5nZWQifSxleHBvcnRBczpbImNka1RhYmxlIl0sZmVhdHVyZXM6W3BnKFt7cHJvdmlkZTp5JCx1c2VFeGlzdGluZzp0MH0se3Byb3ZpZGU6YUYsdXNlQ2xhc3M6ZUZ9LHtwcm92aWRlOkUkLHVzZUNsYXNzOlIkfSx7cHJvdmlkZTpxJCx1c2VWYWx1ZTpudWxsfV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6WyJjYXB0aW9uIiwiY29sZ3JvdXAsIGNvbCJdLGRlY2xzOjYsdmFyczowLGNvbnN0czpbWyJoZWFkZXJSb3dPdXRsZXQiLCIiXSxbInJvd091dGxldCIsIiJdLFsibm9EYXRhUm93T3V0bGV0IiwiIl0sWyJmb290ZXJSb3dPdXRsZXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFptKGYkKSxYbSgwKSxYbSgxLDEpLEltKDIsMCksSW0oMywxKSxJbSg0LDIpLEltKDUsMykpfSxkaXJlY3RpdmVzOltLJCxYJCxRJCxKJF0sc3R5bGVzOlsiLmNkay10YWJsZS1maXhlZC1sYXlvdXR7dGFibGUtbGF5b3V0OmZpeGVkfVxuIl0sZW5jYXBzdWxhdGlvbjoyfSksdDAuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpIZ30se3R5cGU6VWd9LHt0eXBlOmhnfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6amEsYXJnczpbInJvbGUiXX1dfSx7dHlwZTpISSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19LHt0eXBlOnd6fSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbYUZdfV19LHt0eXBlOlIkLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W0UkXX1dfSx7dHlwZTp1Rn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpFcn0se3R5cGU6a3IsYXJnczpbcSRdfV19XSx0MC5wcm9wRGVjb3JhdG9ycz17dHJhY2tCeTpbe3R5cGU6eHl9XSxkYXRhU291cmNlOlt7dHlwZTp4eX1dLG11bHRpVGVtcGxhdGVEYXRhUm93czpbe3R5cGU6eHl9XSxmaXhlZExheW91dDpbe3R5cGU6eHl9XSxjb250ZW50Q2hhbmdlZDpbe3R5cGU6T3l9XSxfcm93T3V0bGV0Olt7dHlwZTpaYSxhcmdzOltYJCx7c3RhdGljOiEwfV19XSxfaGVhZGVyUm93T3V0bGV0Olt7dHlwZTpaYSxhcmdzOltLJCx7c3RhdGljOiEwfV19XSxfZm9vdGVyUm93T3V0bGV0Olt7dHlwZTpaYSxhcmdzOltKJCx7c3RhdGljOiEwfV19XSxfbm9EYXRhUm93T3V0bGV0Olt7dHlwZTpaYSxhcmdzOltRJCx7c3RhdGljOiEwfV19XSxfY29udGVudENvbHVtbkRlZnM6W3t0eXBlOllhLGFyZ3M6W08kLHtkZXNjZW5kYW50czohMH1dfV0sX2NvbnRlbnRSb3dEZWZzOlt7dHlwZTpZYSxhcmdzOltGJCx7ZGVzY2VuZGFudHM6ITB9XX1dLF9jb250ZW50SGVhZGVyUm93RGVmczpbe3R5cGU6WWEsYXJnczpbeiQse2Rlc2NlbmRhbnRzOiEwfV19XSxfY29udGVudEZvb3RlclJvd0RlZnM6W3t0eXBlOllhLGFyZ3M6W0gkLHtkZXNjZW5kYW50czohMH1dfV0sX25vRGF0YVJvdzpbe3R5cGU6cWEsYXJnczpbVSRdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgodDAsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoiY2RrLXRhYmxlLCB0YWJsZVtjZGstdGFibGVdIixleHBvcnRBczoiY2RrVGFibGUiLHRlbXBsYXRlOiQkLGhvc3Q6e2NsYXNzOiJjZGstdGFibGUiLCJbY2xhc3MuY2RrLXRhYmxlLWZpeGVkLWxheW91dF0iOiJmaXhlZExheW91dCJ9LGVuY2Fwc3VsYXRpb246SG4uTm9uZSxjaGFuZ2VEZXRlY3Rpb246em4uRGVmYXVsdCxwcm92aWRlcnM6W3twcm92aWRlOnkkLHVzZUV4aXN0aW5nOnQwfSx7cHJvdmlkZTphRix1c2VDbGFzczplRn0se3Byb3ZpZGU6RSQsdXNlQ2xhc3M6UiR9LHtwcm92aWRlOnEkLHVzZVZhbHVlOm51bGx9XSxzdHlsZXM6WyIuY2RrLXRhYmxlLWZpeGVkLWxheW91dHt0YWJsZS1sYXlvdXQ6Zml4ZWR9XG4iXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkhnfSx7dHlwZTpVZ30se3R5cGU6aGd9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpqYSxhcmdzOlsicm9sZSJdfV19LHt0eXBlOkhJLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX0se3R5cGU6d3p9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOlthRl19XX0se3R5cGU6UiQsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbRSRdfV19LHt0eXBlOnVGfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOkVyfSx7dHlwZTprcixhcmdzOltxJF19XX1dfSkse2NvbnRlbnRDaGFuZ2VkOlt7dHlwZTpPeX1dLHRyYWNrQnk6W3t0eXBlOnh5fV0sZGF0YVNvdXJjZTpbe3R5cGU6eHl9XSxtdWx0aVRlbXBsYXRlRGF0YVJvd3M6W3t0eXBlOnh5fV0sZml4ZWRMYXlvdXQ6W3t0eXBlOnh5fV0sX3Jvd091dGxldDpbe3R5cGU6WmEsYXJnczpbWCQse3N0YXRpYzohMH1dfV0sX2hlYWRlclJvd091dGxldDpbe3R5cGU6WmEsYXJnczpbSyQse3N0YXRpYzohMH1dfV0sX2Zvb3RlclJvd091dGxldDpbe3R5cGU6WmEsYXJnczpbSiQse3N0YXRpYzohMH1dfV0sX25vRGF0YVJvd091dGxldDpbe3R5cGU6WmEsYXJnczpbUSQse3N0YXRpYzohMH1dfV0sX2NvbnRlbnRDb2x1bW5EZWZzOlt7dHlwZTpZYSxhcmdzOltPJCx7ZGVzY2VuZGFudHM6ITB9XX1dLF9jb250ZW50Um93RGVmczpbe3R5cGU6WWEsYXJnczpbRiQse2Rlc2NlbmRhbnRzOiEwfV19XSxfY29udGVudEhlYWRlclJvd0RlZnM6W3t0eXBlOllhLGFyZ3M6W3okLHtkZXNjZW5kYW50czohMH1dfV0sX2NvbnRlbnRGb290ZXJSb3dEZWZzOlt7dHlwZTpZYSxhcmdzOltIJCx7ZGVzY2VuZGFudHM6ITB9XX1dLF9ub0RhdGFSb3c6W3t0eXBlOnFhLGFyZ3M6W1UkXX1dfSk7Y2xhc3MgbjB7Y29uc3RydWN0b3IodCxlKXt0aGlzLl90YWJsZT10LHRoaXMuX29wdGlvbnM9ZSx0aGlzLmp1c3RpZnk9InN0YXJ0Iix0aGlzLl9vcHRpb25zPWV8fHt9fWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuX25hbWV9c2V0IG5hbWUodCl7dGhpcy5fbmFtZT10LHRoaXMuX3N5bmNDb2x1bW5EZWZOYW1lKCl9bmdPbkluaXQoKXtpZih0aGlzLl9zeW5jQ29sdW1uRGVmTmFtZSgpLHZvaWQgMD09PXRoaXMuaGVhZGVyVGV4dCYmKHRoaXMuaGVhZGVyVGV4dD10aGlzLl9jcmVhdGVEZWZhdWx0SGVhZGVyVGV4dCgpKSx0aGlzLmRhdGFBY2Nlc3Nvcnx8KHRoaXMuZGF0YUFjY2Vzc29yPXRoaXMuX29wdGlvbnMuZGVmYXVsdERhdGFBY2Nlc3Nvcnx8KCh0LGUpPT50W2VdKSksdGhpcy5fdGFibGUpdGhpcy5jb2x1bW5EZWYuY2VsbD10aGlzLmNlbGwsdGhpcy5jb2x1bW5EZWYuaGVhZGVyQ2VsbD10aGlzLmhlYWRlckNlbGwsdGhpcy5fdGFibGUuYWRkQ29sdW1uRGVmKHRoaXMuY29sdW1uRGVmKTtlbHNlIGlmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpdGhyb3coZnVuY3Rpb24gdCgpe3JldHVybiBFcnJvcigiVGV4dCBjb2x1bW4gY291bGQgbm90IGZpbmQgYSBwYXJlbnQgdGFibGUgZm9yIHJlZ2lzdHJhdGlvbi4iKX0pKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl90YWJsZSYmdGhpcy5fdGFibGUucmVtb3ZlQ29sdW1uRGVmKHRoaXMuY29sdW1uRGVmKX1fY3JlYXRlRGVmYXVsdEhlYWRlclRleHQoKXtjb25zdCB0PXRoaXMubmFtZTtpZighdCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93KGZ1bmN0aW9uIGUoKXtyZXR1cm4gRXJyb3IoIlRhYmxlIHRleHQgY29sdW1uIG11c3QgaGF2ZSBhIG5hbWUuIil9KSgpO3JldHVybiB0aGlzLl9vcHRpb25zJiZ0aGlzLl9vcHRpb25zLmRlZmF1bHRIZWFkZXJUZXh0VHJhbnNmb3JtP3RoaXMuX29wdGlvbnMuZGVmYXVsdEhlYWRlclRleHRUcmFuc2Zvcm0odCk6dFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSl9X3N5bmNDb2x1bW5EZWZOYW1lKCl7dGhpcy5jb2x1bW5EZWYmJih0aGlzLmNvbHVtbkRlZi5uYW1lPXRoaXMubmFtZSl9fW4wLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxuMCkoU20odDAsOCksU20oXyQsOCkpfSxuMC7JtWNtcD10byh7dHlwZTpuMCxzZWxlY3RvcnM6W1siY2RrLXRleHQtY29sdW1uIl1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoUWgoTyQsNyksUWgoQyQsNyksUWgoTSQsNykpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4uY29sdW1uRGVmPXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLmNlbGw9dC5maXJzdCksSmgodD10YigpKSYmKG4uaGVhZGVyQ2VsbD10LmZpcnN0KX19LGlucHV0czp7anVzdGlmeToianVzdGlmeSIsbmFtZToibmFtZSIsaGVhZGVyVGV4dDoiaGVhZGVyVGV4dCIsZGF0YUFjY2Vzc29yOiJkYXRhQWNjZXNzb3IifSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1siY2RrQ29sdW1uRGVmIiwiIl0sWyJjZGstaGVhZGVyLWNlbGwiLCIiLDMsInRleHQtYWxpZ24iLDQsImNka0hlYWRlckNlbGxEZWYiXSxbImNkay1jZWxsIiwiIiwzLCJ0ZXh0LWFsaWduIiw0LCJjZGtDZWxsRGVmIl0sWyJjZGstaGVhZGVyLWNlbGwiLCIiXSxbImNkay1jZWxsIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihObSgwLDApLFFwKDEsZyQsMiwzLCJ0aCIsMSksUXAoMixoJCwyLDMsInRkIiwyKSx6bSgpKX0sZGlyZWN0aXZlczpbTyQsTSQsQyQsdyQsUyRdLGVuY2Fwc3VsYXRpb246Mn0pLG4wLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6dDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltfJF19XX1dLG4wLnByb3BEZWNvcmF0b3JzPXtuYW1lOlt7dHlwZTp4eX1dLGhlYWRlclRleHQ6W3t0eXBlOnh5fV0sZGF0YUFjY2Vzc29yOlt7dHlwZTp4eX1dLGp1c3RpZnk6W3t0eXBlOnh5fV0sY29sdW1uRGVmOlt7dHlwZTpaYSxhcmdzOltPJCx7c3RhdGljOiEwfV19XSxjZWxsOlt7dHlwZTpaYSxhcmdzOltDJCx7c3RhdGljOiEwfV19XSxoZWFkZXJDZWxsOlt7dHlwZTpaYSxhcmdzOltNJCx7c3RhdGljOiEwfV19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChuMCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJjZGstdGV4dC1jb2x1bW4iLHRlbXBsYXRlOidcbiAgICA8bmctY29udGFpbmVyIGNka0NvbHVtbkRlZj5cbiAgICAgIDx0aCBjZGstaGVhZGVyLWNlbGwgKmNka0hlYWRlckNlbGxEZWYgW3N0eWxlLnRleHQtYWxpZ25dPSJqdXN0aWZ5Ij5cbiAgICAgICAge3toZWFkZXJUZXh0fX1cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgY2RrLWNlbGwgKmNka0NlbGxEZWY9ImxldCBkYXRhIiBbc3R5bGUudGV4dC1hbGlnbl09Imp1c3RpZnkiPlxuICAgICAgICB7e2RhdGFBY2Nlc3NvcihkYXRhLCBuYW1lKX19XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAnLGVuY2Fwc3VsYXRpb246SG4uTm9uZSxjaGFuZ2VEZXRlY3Rpb246em4uRGVmYXVsdH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnQwLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbXyRdfV19XX0pLHtqdXN0aWZ5Olt7dHlwZTp4eX1dLG5hbWU6W3t0eXBlOnh5fV0saGVhZGVyVGV4dDpbe3R5cGU6eHl9XSxkYXRhQWNjZXNzb3I6W3t0eXBlOnh5fV0sY29sdW1uRGVmOlt7dHlwZTpaYSxhcmdzOltPJCx7c3RhdGljOiEwfV19XSxjZWxsOlt7dHlwZTpaYSxhcmdzOltDJCx7c3RhdGljOiEwfV19XSxoZWFkZXJDZWxsOlt7dHlwZTpaYSxhcmdzOltNJCx7c3RhdGljOiEwfV19XX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgbzA9W3QwLEYkLEMkLEwkLE0kLHYkLE8kLFMkLGokLHckLGskLEIkLHokLFYkLEgkLFgkLEskLEokLG4wLFUkLFokLFEkXTtjbGFzcyBpMHt9aTAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGkwKX0saTAuybVtb2Q9YW8oe3R5cGU6aTB9KSxpMC7JtWluaj12bih7aW1wb3J0czpbW19GXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGkwLFt7dHlwZTpBeSxhcmdzOlt7ZXhwb3J0czpvMCxkZWNsYXJhdGlvbnM6bzAsaW1wb3J0czpbX0ZdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oaTAse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVyblt0MCxGJCxDJCxMJCxNJCx2JCxPJCxTJCxqJCx3JCxrJCxCJCx6JCxWJCxIJCxYJCxLJCxKJCxuMCxVJCxaJCxRJF19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bX0ZdfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW3QwLEYkLEMkLEwkLE0kLHYkLE8kLFMkLGokLHckLGskLEIkLHokLFYkLEgkLFgkLEskLEokLG4wLFUkLFokLFEkXX19KTtjb25zdCBhMD1bW1siY2FwdGlvbiJdXSxbWyJjb2xncm91cCJdLFsiY29sIl1dXTtmdW5jdGlvbiByMCh0LGUpe2lmKDEmdCYmKFJtKDAsInRoIiwzKSxrdSgxKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oKTtkdSgidGV4dC1hbGlnbiIsdC5qdXN0aWZ5KSxyYygxKSxEdSgiICIsdC5oZWFkZXJUZXh0LCIgIil9fWZ1bmN0aW9uIHMwKHQsZSl7aWYoMSZ0JiYoUm0oMCwidGQiLDQpLGt1KDEpLEFtKCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPVltKCk7ZHUoInRleHQtYWxpZ24iLG4uanVzdGlmeSkscmMoMSksRHUoIiAiLG4uZGF0YUFjY2Vzc29yKHQsbi5uYW1lKSwiICIpfX1jbGFzcyBsMHt9bDAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGwwKX0sbDAuybVkaXI9bG8oe3R5cGU6bDAsc2VsZWN0b3JzOltbIm1hdC10YWJsZSIsInJlY3ljbGVSb3dzIiwiIl0sWyJ0YWJsZSIsIm1hdC10YWJsZSIsIiIsInJlY3ljbGVSb3dzIiwiIl1dLGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6YUYsdXNlQ2xhc3M6bkZ9XSldfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChsMCxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJtYXQtdGFibGVbcmVjeWNsZVJvd3NdLCB0YWJsZVttYXQtdGFibGVdW3JlY3ljbGVSb3dzXSIscHJvdmlkZXJzOlt7cHJvdmlkZTphRix1c2VDbGFzczpuRn1dfV19XSxudWxsLG51bGwpO2NsYXNzIGMwIGV4dGVuZHMgdDB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3RpY2t5Q3NzQ2xhc3M9Im1hdC10YWJsZS1zdGlja3kiLHRoaXMubmVlZHNQb3NpdGlvblN0aWNreU9uRWxlbWVudD0hMX19YzAuybVmYWM9KGZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uIGUobil7cmV0dXJuKHR8fCh0PUFhKGMwKSkpKG58fGMwKX19KSgpLGMwLsm1Y21wPXRvKHt0eXBlOmMwLHNlbGVjdG9yczpbWyJtYXQtdGFibGUiXSxbInRhYmxlIiwibWF0LXRhYmxlIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LXRhYmxlIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmcHUoIm1hdC10YWJsZS1maXhlZC1sYXlvdXQiLG4uZml4ZWRMYXlvdXQpfSxleHBvcnRBczpbIm1hdFRhYmxlIl0sZmVhdHVyZXM6W3BnKFt7cHJvdmlkZTphRix1c2VDbGFzczplRn0se3Byb3ZpZGU6dDAsdXNlRXhpc3Rpbmc6YzB9LHtwcm92aWRlOnkkLHVzZUV4aXN0aW5nOmMwfSx7cHJvdmlkZTpFJCx1c2VDbGFzczpSJH0se3Byb3ZpZGU6cSQsdXNlVmFsdWU6bnVsbH1dKSx4cF0sbmdDb250ZW50U2VsZWN0b3JzOlsiY2FwdGlvbiIsImNvbGdyb3VwLCBjb2wiXSxkZWNsczo2LHZhcnM6MCxjb25zdHM6W1siaGVhZGVyUm93T3V0bGV0IiwiIl0sWyJyb3dPdXRsZXQiLCIiXSxbIm5vRGF0YVJvd091dGxldCIsIiJdLFsiZm9vdGVyUm93T3V0bGV0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihabShhMCksWG0oMCksWG0oMSwxKSxJbSgyLDApLEltKDMsMSksSW0oNCwyKSxJbSg1LDMpKX0sZGlyZWN0aXZlczpbSyQsWCQsUSQsSiRdLHN0eWxlczpbJ21hdC10YWJsZXtkaXNwbGF5OmJsb2NrfW1hdC1oZWFkZXItcm93e21pbi1oZWlnaHQ6NTZweH1tYXQtcm93LG1hdC1mb290ZXItcm93e21pbi1oZWlnaHQ6NDhweH1tYXQtcm93LG1hdC1oZWFkZXItcm93LG1hdC1mb290ZXItcm93e2Rpc3BsYXk6ZmxleDtib3JkZXItd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjFweDtib3JkZXItc3R5bGU6c29saWQ7YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveH1tYXQtcm93OjphZnRlcixtYXQtaGVhZGVyLXJvdzo6YWZ0ZXIsbWF0LWZvb3Rlci1yb3c6OmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi1oZWlnaHQ6aW5oZXJpdDtjb250ZW50OiIifW1hdC1jZWxsOmZpcnN0LW9mLXR5cGUsbWF0LWhlYWRlci1jZWxsOmZpcnN0LW9mLXR5cGUsbWF0LWZvb3Rlci1jZWxsOmZpcnN0LW9mLXR5cGV7cGFkZGluZy1sZWZ0OjI0cHh9W2Rpcj1ydGxdIG1hdC1jZWxsOmZpcnN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpLFtkaXI9cnRsXSBtYXQtaGVhZGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSksW2Rpcj1ydGxdIG1hdC1mb290ZXItY2VsbDpmaXJzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjI0cHh9bWF0LWNlbGw6bGFzdC1vZi10eXBlLG1hdC1oZWFkZXItY2VsbDpsYXN0LW9mLXR5cGUsbWF0LWZvb3Rlci1jZWxsOmxhc3Qtb2YtdHlwZXtwYWRkaW5nLXJpZ2h0OjI0cHh9W2Rpcj1ydGxdIG1hdC1jZWxsOmxhc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSksW2Rpcj1ydGxdIG1hdC1oZWFkZXItY2VsbDpsYXN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpLFtkaXI9cnRsXSBtYXQtZm9vdGVyLWNlbGw6bGFzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKXtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjI0cHh9bWF0LWNlbGwsbWF0LWhlYWRlci1jZWxsLG1hdC1mb290ZXItY2VsbHtmbGV4OjE7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtvdmVyZmxvdzpoaWRkZW47d29yZC13cmFwOmJyZWFrLXdvcmQ7bWluLWhlaWdodDppbmhlcml0fXRhYmxlLm1hdC10YWJsZXtib3JkZXItc3BhY2luZzowfXRyLm1hdC1oZWFkZXItcm93e2hlaWdodDo1NnB4fXRyLm1hdC1yb3csdHIubWF0LWZvb3Rlci1yb3d7aGVpZ2h0OjQ4cHh9dGgubWF0LWhlYWRlci1jZWxse3RleHQtYWxpZ246bGVmdH1bZGlyPXJ0bF0gdGgubWF0LWhlYWRlci1jZWxse3RleHQtYWxpZ246cmlnaHR9dGgubWF0LWhlYWRlci1jZWxsLHRkLm1hdC1jZWxsLHRkLm1hdC1mb290ZXItY2VsbHtwYWRkaW5nOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHg7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZH10aC5tYXQtaGVhZGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZSx0ZC5tYXQtY2VsbDpmaXJzdC1vZi10eXBlLHRkLm1hdC1mb290ZXItY2VsbDpmaXJzdC1vZi10eXBle3BhZGRpbmctbGVmdDoyNHB4fVtkaXI9cnRsXSB0aC5tYXQtaGVhZGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSksW2Rpcj1ydGxdIHRkLm1hdC1jZWxsOmZpcnN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpLFtkaXI9cnRsXSB0ZC5tYXQtZm9vdGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoyNHB4fXRoLm1hdC1oZWFkZXItY2VsbDpsYXN0LW9mLXR5cGUsdGQubWF0LWNlbGw6bGFzdC1vZi10eXBlLHRkLm1hdC1mb290ZXItY2VsbDpsYXN0LW9mLXR5cGV7cGFkZGluZy1yaWdodDoyNHB4fVtkaXI9cnRsXSB0aC5tYXQtaGVhZGVyLWNlbGw6bGFzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKSxbZGlyPXJ0bF0gdGQubWF0LWNlbGw6bGFzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKSxbZGlyPXJ0bF0gdGQubWF0LWZvb3Rlci1jZWxsOmxhc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSl7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoyNHB4fS5tYXQtdGFibGUtc3RpY2t5e3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5ICFpbXBvcnRhbnQ7cG9zaXRpb246c3RpY2t5ICFpbXBvcnRhbnR9Lm1hdC10YWJsZS1maXhlZC1sYXlvdXR7dGFibGUtbGF5b3V0OmZpeGVkfVxuJ10sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChjMCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJtYXQtdGFibGUsIHRhYmxlW21hdC10YWJsZV0iLGV4cG9ydEFzOiJtYXRUYWJsZSIsdGVtcGxhdGU6JCQsaG9zdDp7Y2xhc3M6Im1hdC10YWJsZSIsIltjbGFzcy5tYXQtdGFibGUtZml4ZWQtbGF5b3V0XSI6ImZpeGVkTGF5b3V0In0scHJvdmlkZXJzOlt7cHJvdmlkZTphRix1c2VDbGFzczplRn0se3Byb3ZpZGU6dDAsdXNlRXhpc3Rpbmc6YzB9LHtwcm92aWRlOnkkLHVzZUV4aXN0aW5nOmMwfSx7cHJvdmlkZTpFJCx1c2VDbGFzczpSJH0se3Byb3ZpZGU6cSQsdXNlVmFsdWU6bnVsbH1dLGVuY2Fwc3VsYXRpb246SG4uTm9uZSxjaGFuZ2VEZXRlY3Rpb246em4uRGVmYXVsdCxzdHlsZXM6WydtYXQtdGFibGV7ZGlzcGxheTpibG9ja31tYXQtaGVhZGVyLXJvd3ttaW4taGVpZ2h0OjU2cHh9bWF0LXJvdyxtYXQtZm9vdGVyLXJvd3ttaW4taGVpZ2h0OjQ4cHh9bWF0LXJvdyxtYXQtaGVhZGVyLXJvdyxtYXQtZm9vdGVyLXJvd3tkaXNwbGF5OmZsZXg7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3h9bWF0LXJvdzo6YWZ0ZXIsbWF0LWhlYWRlci1yb3c6OmFmdGVyLG1hdC1mb290ZXItcm93OjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jazttaW4taGVpZ2h0OmluaGVyaXQ7Y29udGVudDoiIn1tYXQtY2VsbDpmaXJzdC1vZi10eXBlLG1hdC1oZWFkZXItY2VsbDpmaXJzdC1vZi10eXBlLG1hdC1mb290ZXItY2VsbDpmaXJzdC1vZi10eXBle3BhZGRpbmctbGVmdDoyNHB4fVtkaXI9cnRsXSBtYXQtY2VsbDpmaXJzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKSxbZGlyPXJ0bF0gbWF0LWhlYWRlci1jZWxsOmZpcnN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpLFtkaXI9cnRsXSBtYXQtZm9vdGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoyNHB4fW1hdC1jZWxsOmxhc3Qtb2YtdHlwZSxtYXQtaGVhZGVyLWNlbGw6bGFzdC1vZi10eXBlLG1hdC1mb290ZXItY2VsbDpsYXN0LW9mLXR5cGV7cGFkZGluZy1yaWdodDoyNHB4fVtkaXI9cnRsXSBtYXQtY2VsbDpsYXN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpLFtkaXI9cnRsXSBtYXQtaGVhZGVyLWNlbGw6bGFzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKSxbZGlyPXJ0bF0gbWF0LWZvb3Rlci1jZWxsOmxhc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSl7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoyNHB4fW1hdC1jZWxsLG1hdC1oZWFkZXItY2VsbCxtYXQtZm9vdGVyLWNlbGx7ZmxleDoxO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3dvcmQtd3JhcDpicmVhay13b3JkO21pbi1oZWlnaHQ6aW5oZXJpdH10YWJsZS5tYXQtdGFibGV7Ym9yZGVyLXNwYWNpbmc6MH10ci5tYXQtaGVhZGVyLXJvd3toZWlnaHQ6NTZweH10ci5tYXQtcm93LHRyLm1hdC1mb290ZXItcm93e2hlaWdodDo0OHB4fXRoLm1hdC1oZWFkZXItY2VsbHt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIHRoLm1hdC1oZWFkZXItY2VsbHt0ZXh0LWFsaWduOnJpZ2h0fXRoLm1hdC1oZWFkZXItY2VsbCx0ZC5tYXQtY2VsbCx0ZC5tYXQtZm9vdGVyLWNlbGx7cGFkZGluZzowO2JvcmRlci1ib3R0b20td2lkdGg6MXB4O2JvcmRlci1ib3R0b20tc3R5bGU6c29saWR9dGgubWF0LWhlYWRlci1jZWxsOmZpcnN0LW9mLXR5cGUsdGQubWF0LWNlbGw6Zmlyc3Qtb2YtdHlwZSx0ZC5tYXQtZm9vdGVyLWNlbGw6Zmlyc3Qtb2YtdHlwZXtwYWRkaW5nLWxlZnQ6MjRweH1bZGlyPXJ0bF0gdGgubWF0LWhlYWRlci1jZWxsOmZpcnN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpLFtkaXI9cnRsXSB0ZC5tYXQtY2VsbDpmaXJzdC1vZi10eXBlOm5vdCg6b25seS1vZi10eXBlKSxbZGlyPXJ0bF0gdGQubWF0LWZvb3Rlci1jZWxsOmZpcnN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MjRweH10aC5tYXQtaGVhZGVyLWNlbGw6bGFzdC1vZi10eXBlLHRkLm1hdC1jZWxsOmxhc3Qtb2YtdHlwZSx0ZC5tYXQtZm9vdGVyLWNlbGw6bGFzdC1vZi10eXBle3BhZGRpbmctcmlnaHQ6MjRweH1bZGlyPXJ0bF0gdGgubWF0LWhlYWRlci1jZWxsOmxhc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSksW2Rpcj1ydGxdIHRkLm1hdC1jZWxsOmxhc3Qtb2YtdHlwZTpub3QoOm9ubHktb2YtdHlwZSksW2Rpcj1ydGxdIHRkLm1hdC1mb290ZXItY2VsbDpsYXN0LW9mLXR5cGU6bm90KDpvbmx5LW9mLXR5cGUpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MjRweH0ubWF0LXRhYmxlLXN0aWNreXtwb3NpdGlvbjotd2Via2l0LXN0aWNreSAhaW1wb3J0YW50O3Bvc2l0aW9uOnN0aWNreSAhaW1wb3J0YW50fS5tYXQtdGFibGUtZml4ZWQtbGF5b3V0e3RhYmxlLWxheW91dDpmaXhlZH1cbiddfV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgZDAgZXh0ZW5kcyBDJHt9ZDAuybVmYWM9KGZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uIGUobil7cmV0dXJuKHR8fCh0PUFhKGQwKSkpKG58fGQwKX19KSgpLGQwLsm1ZGlyPWxvKHt0eXBlOmQwLHNlbGVjdG9yczpbWyIiLCJtYXRDZWxsRGVmIiwiIl1dLGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6QyQsdXNlRXhpc3Rpbmc6ZDB9XSkseHBdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChkMCxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbbWF0Q2VsbERlZl0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6QyQsdXNlRXhpc3Rpbmc6ZDB9XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBwMCBleHRlbmRzIE0ke31wMC7JtWZhYz0oZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4odHx8KHQ9QWEocDApKSkobnx8cDApfX0pKCkscDAuybVkaXI9bG8oe3R5cGU6cDAsc2VsZWN0b3JzOltbIiIsIm1hdEhlYWRlckNlbGxEZWYiLCIiXV0sZmVhdHVyZXM6W3BnKFt7cHJvdmlkZTpNJCx1c2VFeGlzdGluZzpwMH1dKSx4cF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHAwLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6IlttYXRIZWFkZXJDZWxsRGVmXSIscHJvdmlkZXJzOlt7cHJvdmlkZTpNJCx1c2VFeGlzdGluZzpwMH1dfV19XSxudWxsLG51bGwpO2NsYXNzIG0wIGV4dGVuZHMgdiR7fW0wLsm1ZmFjPShmdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbiBlKG4pe3JldHVybih0fHwodD1BYShtMCkpKShufHxtMCl9fSkoKSxtMC7JtWRpcj1sbyh7dHlwZTptMCxzZWxlY3RvcnM6W1siIiwibWF0Rm9vdGVyQ2VsbERlZiIsIiJdXSxmZWF0dXJlczpbcGcoW3twcm92aWRlOnYkLHVzZUV4aXN0aW5nOm0wfV0pLHhwXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgobTAsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW21hdEZvb3RlckNlbGxEZWZdIixwcm92aWRlcnM6W3twcm92aWRlOnYkLHVzZUV4aXN0aW5nOm0wfV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgdTAgZXh0ZW5kcyBPJHtnZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfXNldCBuYW1lKHQpe3RoaXMuX3NldE5hbWVJbnB1dCh0KX1fdXBkYXRlQ29sdW1uQ3NzQ2xhc3NOYW1lKCl7c3VwZXIuX3VwZGF0ZUNvbHVtbkNzc0NsYXNzTmFtZSgpLHRoaXMuX2NvbHVtbkNzc0NsYXNzTmFtZS5wdXNoKGBtYXQtY29sdW1uLSR7dGhpcy5jc3NDbGFzc0ZyaWVuZGx5TmFtZX1gKX19dTAuybVmYWM9KGZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uIGUobil7cmV0dXJuKHR8fCh0PUFhKHUwKSkpKG58fHUwKX19KSgpLHUwLsm1ZGlyPWxvKHt0eXBlOnUwLHNlbGVjdG9yczpbWyIiLCJtYXRDb2x1bW5EZWYiLCIiXV0saW5wdXRzOntzdGlja3k6InN0aWNreSIsbmFtZTpbIm1hdENvbHVtbkRlZiIsIm5hbWUiXX0sZmVhdHVyZXM6W3BnKFt7cHJvdmlkZTpPJCx1c2VFeGlzdGluZzp1MH0se3Byb3ZpZGU6Ik1BVF9TT1JUX0hFQURFUl9DT0xVTU5fREVGIix1c2VFeGlzdGluZzp1MH1dKSx4cF19KSx1MC5wcm9wRGVjb3JhdG9ycz17bmFtZTpbe3R5cGU6eHksYXJnczpbIm1hdENvbHVtbkRlZiJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgodTAsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW21hdENvbHVtbkRlZl0iLGlucHV0czpbInN0aWNreSJdLHByb3ZpZGVyczpbe3Byb3ZpZGU6TyQsdXNlRXhpc3Rpbmc6dTB9LHtwcm92aWRlOiJNQVRfU09SVF9IRUFERVJfQ09MVU1OX0RFRiIsdXNlRXhpc3Rpbmc6dTB9XX1dfV0sbnVsbCx7bmFtZTpbe3R5cGU6eHksYXJnczpbIm1hdENvbHVtbkRlZiJdfV19KTtjbGFzcyBmMCBleHRlbmRzIHcke31mMC7JtWZhYz0oZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4odHx8KHQ9QWEoZjApKSkobnx8ZjApfX0pKCksZjAuybVkaXI9bG8oe3R5cGU6ZjAsc2VsZWN0b3JzOltbIm1hdC1oZWFkZXItY2VsbCJdLFsidGgiLCJtYXQtaGVhZGVyLWNlbGwiLCIiXV0saG9zdEF0dHJzOlsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwibWF0LWhlYWRlci1jZWxsIl0sZmVhdHVyZXM6W3hwXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoZjAsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoibWF0LWhlYWRlci1jZWxsLCB0aFttYXQtaGVhZGVyLWNlbGxdIixob3N0OntjbGFzczoibWF0LWhlYWRlci1jZWxsIixyb2xlOiJjb2x1bW5oZWFkZXIifX1dfV0sbnVsbCxudWxsKTtjbGFzcyBnMCBleHRlbmRzIGske31nMC7JtWZhYz0oZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4odHx8KHQ9QWEoZzApKSkobnx8ZzApfX0pKCksZzAuybVkaXI9bG8oe3R5cGU6ZzAsc2VsZWN0b3JzOltbIm1hdC1mb290ZXItY2VsbCJdLFsidGQiLCJtYXQtZm9vdGVyLWNlbGwiLCIiXV0saG9zdEF0dHJzOlsicm9sZSIsImdyaWRjZWxsIiwxLCJtYXQtZm9vdGVyLWNlbGwiXSxmZWF0dXJlczpbeHBdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChnMCxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJtYXQtZm9vdGVyLWNlbGwsIHRkW21hdC1mb290ZXItY2VsbF0iLGhvc3Q6e2NsYXNzOiJtYXQtZm9vdGVyLWNlbGwiLHJvbGU6ImdyaWRjZWxsIn19XX1dLG51bGwsbnVsbCk7Y2xhc3MgaDAgZXh0ZW5kcyBTJHt9aDAuybVmYWM9KGZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uIGUobil7cmV0dXJuKHR8fCh0PUFhKGgwKSkpKG58fGgwKX19KSgpLGgwLsm1ZGlyPWxvKHt0eXBlOmgwLHNlbGVjdG9yczpbWyJtYXQtY2VsbCJdLFsidGQiLCJtYXQtY2VsbCIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwiZ3JpZGNlbGwiLDEsIm1hdC1jZWxsIl0sZmVhdHVyZXM6W3hwXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoaDAsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoibWF0LWNlbGwsIHRkW21hdC1jZWxsXSIsaG9zdDp7Y2xhc3M6Im1hdC1jZWxsIixyb2xlOiJncmlkY2VsbCJ9fV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY2xhc3MgYjAgZXh0ZW5kcyB6JHt9YjAuybVmYWM9KGZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uIGUobil7cmV0dXJuKHR8fCh0PUFhKGIwKSkpKG58fGIwKX19KSgpLGIwLsm1ZGlyPWxvKHt0eXBlOmIwLHNlbGVjdG9yczpbWyIiLCJtYXRIZWFkZXJSb3dEZWYiLCIiXV0saW5wdXRzOntjb2x1bW5zOlsibWF0SGVhZGVyUm93RGVmIiwiY29sdW1ucyJdLHN0aWNreTpbIm1hdEhlYWRlclJvd0RlZlN0aWNreSIsInN0aWNreSJdfSxmZWF0dXJlczpbcGcoW3twcm92aWRlOnokLHVzZUV4aXN0aW5nOmIwfV0pLHhwXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoYjAsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6eiQsdXNlRXhpc3Rpbmc6YjB9XSxpbnB1dHM6WyJjb2x1bW5zOiBtYXRIZWFkZXJSb3dEZWYiLCJzdGlja3k6IG1hdEhlYWRlclJvd0RlZlN0aWNreSJdfV19XSxudWxsLG51bGwpO2NsYXNzIHkwIGV4dGVuZHMgSCR7fXkwLsm1ZmFjPShmdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbiBlKG4pe3JldHVybih0fHwodD1BYSh5MCkpKShufHx5MCl9fSkoKSx5MC7JtWRpcj1sbyh7dHlwZTp5MCxzZWxlY3RvcnM6W1siIiwibWF0Rm9vdGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbIm1hdEZvb3RlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJtYXRGb290ZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W3BnKFt7cHJvdmlkZTpIJCx1c2VFeGlzdGluZzp5MH1dKSx4cF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHkwLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6IlttYXRGb290ZXJSb3dEZWZdIixwcm92aWRlcnM6W3twcm92aWRlOkgkLHVzZUV4aXN0aW5nOnkwfV0saW5wdXRzOlsiY29sdW1uczogbWF0Rm9vdGVyUm93RGVmIiwic3RpY2t5OiBtYXRGb290ZXJSb3dEZWZTdGlja3kiXX1dfV0sbnVsbCxudWxsKTtjbGFzcyBfMCBleHRlbmRzIEYke31fMC7JtWZhYz0oZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4odHx8KHQ9QWEoXzApKSkobnx8XzApfX0pKCksXzAuybVkaXI9bG8oe3R5cGU6XzAsc2VsZWN0b3JzOltbIiIsIm1hdFJvd0RlZiIsIiJdXSxpbnB1dHM6e2NvbHVtbnM6WyJtYXRSb3dEZWZDb2x1bW5zIiwiY29sdW1ucyJdLHdoZW46WyJtYXRSb3dEZWZXaGVuIiwid2hlbiJdfSxmZWF0dXJlczpbcGcoW3twcm92aWRlOkYkLHVzZUV4aXN0aW5nOl8wfV0pLHhwXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoXzAsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW21hdFJvd0RlZl0iLHByb3ZpZGVyczpbe3Byb3ZpZGU6RiQsdXNlRXhpc3Rpbmc6XzB9XSxpbnB1dHM6WyJjb2x1bW5zOiBtYXRSb3dEZWZDb2x1bW5zIiwid2hlbjogbWF0Um93RGVmV2hlbiJdfV19XSxudWxsLG51bGwpO2NsYXNzIEMwIGV4dGVuZHMgQiR7fUMwLsm1ZmFjPShmdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbiBlKG4pe3JldHVybih0fHwodD1BYShDMCkpKShufHxDMCl9fSkoKSxDMC7JtWNtcD10byh7dHlwZTpDMCxzZWxlY3RvcnM6W1sibWF0LWhlYWRlci1yb3ciXSxbInRyIiwibWF0LWhlYWRlci1yb3ciLCIiXV0saG9zdEF0dHJzOlsicm9sZSIsInJvdyIsMSwibWF0LWhlYWRlci1yb3ciXSxleHBvcnRBczpbIm1hdEhlYWRlclJvdyJdLGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6QiQsdXNlRXhpc3Rpbmc6QzB9XSkseHBdLGRlY2xzOjEsdmFyczowLGNvbnN0czpbWyJjZGtDZWxsT3V0bGV0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJkltKDAsMCl9LGRpcmVjdGl2ZXM6W0wkXSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEMwLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im1hdC1oZWFkZXItcm93LCB0clttYXQtaGVhZGVyLXJvd10iLHRlbXBsYXRlOkEkLGhvc3Q6e2NsYXNzOiJtYXQtaGVhZGVyLXJvdyIscm9sZToicm93In0sY2hhbmdlRGV0ZWN0aW9uOnpuLkRlZmF1bHQsZW5jYXBzdWxhdGlvbjpIbi5Ob25lLGV4cG9ydEFzOiJtYXRIZWFkZXJSb3ciLHByb3ZpZGVyczpbe3Byb3ZpZGU6QiQsdXNlRXhpc3Rpbmc6QzB9XX1dfV0sbnVsbCxudWxsKTtjbGFzcyBNMCBleHRlbmRzIFYke31NMC7JtWZhYz0oZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4odHx8KHQ9QWEoTTApKSkobnx8TTApfX0pKCksTTAuybVjbXA9dG8oe3R5cGU6TTAsc2VsZWN0b3JzOltbIm1hdC1mb290ZXItcm93Il0sWyJ0ciIsIm1hdC1mb290ZXItcm93IiwiIl1dLGhvc3RBdHRyczpbInJvbGUiLCJyb3ciLDEsIm1hdC1mb290ZXItcm93Il0sZXhwb3J0QXM6WyJtYXRGb290ZXJSb3ciXSxmZWF0dXJlczpbcGcoW3twcm92aWRlOlYkLHVzZUV4aXN0aW5nOk0wfV0pLHhwXSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1siY2RrQ2VsbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZJbSgwLDApfSxkaXJlY3RpdmVzOltMJF0sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChNMCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJtYXQtZm9vdGVyLXJvdywgdHJbbWF0LWZvb3Rlci1yb3ddIix0ZW1wbGF0ZTpBJCxob3N0OntjbGFzczoibWF0LWZvb3Rlci1yb3ciLHJvbGU6InJvdyJ9LGNoYW5nZURldGVjdGlvbjp6bi5EZWZhdWx0LGVuY2Fwc3VsYXRpb246SG4uTm9uZSxleHBvcnRBczoibWF0Rm9vdGVyUm93Iixwcm92aWRlcnM6W3twcm92aWRlOlYkLHVzZUV4aXN0aW5nOk0wfV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgdjAgZXh0ZW5kcyBqJHt9djAuybVmYWM9KGZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uIGUobil7cmV0dXJuKHR8fCh0PUFhKHYwKSkpKG58fHYwKX19KSgpLHYwLsm1Y21wPXRvKHt0eXBlOnYwLHNlbGVjdG9yczpbWyJtYXQtcm93Il0sWyJ0ciIsIm1hdC1yb3ciLCIiXV0saG9zdEF0dHJzOlsicm9sZSIsInJvdyIsMSwibWF0LXJvdyJdLGV4cG9ydEFzOlsibWF0Um93Il0sZmVhdHVyZXM6W3BnKFt7cHJvdmlkZTpqJCx1c2VFeGlzdGluZzp2MH1dKSx4cF0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka0NlbGxPdXRsZXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmSW0oMCwwKX0sZGlyZWN0aXZlczpbTCRdLGVuY2Fwc3VsYXRpb246Mn0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgodjAsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLHRlbXBsYXRlOkEkLGhvc3Q6e2NsYXNzOiJtYXQtcm93Iixyb2xlOiJyb3cifSxjaGFuZ2VEZXRlY3Rpb246em4uRGVmYXVsdCxlbmNhcHN1bGF0aW9uOkhuLk5vbmUsZXhwb3J0QXM6Im1hdFJvdyIscHJvdmlkZXJzOlt7cHJvdmlkZTpqJCx1c2VFeGlzdGluZzp2MH1dfV19XSxudWxsLG51bGwpO2NsYXNzIHgwIGV4dGVuZHMgVSR7fXgwLsm1ZmFjPShmdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbiBlKG4pe3JldHVybih0fHwodD1BYSh4MCkpKShufHx4MCl9fSkoKSx4MC7JtWRpcj1sbyh7dHlwZTp4MCxzZWxlY3RvcnM6W1sibmctdGVtcGxhdGUiLCJtYXROb0RhdGFSb3ciLCIiXV0sZmVhdHVyZXM6W3BnKFt7cHJvdmlkZTpVJCx1c2VFeGlzdGluZzp4MH1dKSx4cF19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHgwLFt7dHlwZTpDeSxhcmdzOlt7c2VsZWN0b3I6Im5nLXRlbXBsYXRlW21hdE5vRGF0YVJvd10iLHByb3ZpZGVyczpbe3Byb3ZpZGU6VSQsdXNlRXhpc3Rpbmc6eDB9XX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIE8wIGV4dGVuZHMgbjB7fU8wLsm1ZmFjPShmdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbiBlKG4pe3JldHVybih0fHwodD1BYShPMCkpKShufHxPMCl9fSkoKSxPMC7JtWNtcD10byh7dHlwZTpPMCxzZWxlY3RvcnM6W1sibWF0LXRleHQtY29sdW1uIl1dLGZlYXR1cmVzOlt4cF0sZGVjbHM6Myx2YXJzOjAsY29uc3RzOltbIm1hdENvbHVtbkRlZiIsIiJdLFsibWF0LWhlYWRlci1jZWxsIiwiIiwzLCJ0ZXh0LWFsaWduIiw0LCJtYXRIZWFkZXJDZWxsRGVmIl0sWyJtYXQtY2VsbCIsIiIsMywidGV4dC1hbGlnbiIsNCwibWF0Q2VsbERlZiJdLFsibWF0LWhlYWRlci1jZWxsIiwiIl0sWyJtYXQtY2VsbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoTm0oMCwwKSxRcCgxLHIwLDIsMywidGgiLDEpLFFwKDIsczAsMiwzLCJ0ZCIsMiksem0oKSl9LGRpcmVjdGl2ZXM6W3UwLHAwLGQwLGYwLGgwXSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKE8wLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im1hdC10ZXh0LWNvbHVtbiIsdGVtcGxhdGU6J1xuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbc3R5bGUudGV4dC1hbGlnbl09Imp1c3RpZnkiPlxuICAgICAgICB7e2hlYWRlclRleHR9fVxuICAgICAgPC90aD5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGRhdGEiIFtzdHlsZS50ZXh0LWFsaWduXT0ianVzdGlmeSI+XG4gICAgICAgIHt7ZGF0YUFjY2Vzc29yKGRhdGEsIG5hbWUpfX1cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICcsZW5jYXBzdWxhdGlvbjpIbi5Ob25lLGNoYW5nZURldGVjdGlvbjp6bi5EZWZhdWx0fV19XSxudWxsLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgUDA9W2MwLGwwLHAwLGIwLHUwLGQwLF8wLG0wLHkwLGYwLGgwLGcwLEMwLHYwLE0wLHgwLE8wXTtjbGFzcyB3MHt9dzAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHcwKX0sdzAuybVtb2Q9YW8oe3R5cGU6dzB9KSx3MC7JtWluaj12bih7aW1wb3J0czpbW2kwLFhJXSxYSV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHcwLFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbaTAsWEldLGV4cG9ydHM6W1hJLFAwXSxkZWNsYXJhdGlvbnM6UDB9XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyh3MCx7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW2MwLGwwLHAwLGIwLHUwLGQwLF8wLG0wLHkwLGYwLGgwLGcwLEMwLHYwLE0wLHgwLE8wXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltpMCxYSV19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bWEksYzAsbDAscDAsYjAsdTAsZDAsXzAsbTAseTAsZjAsaDAsZzAsQzAsdjAsTTAseDAsTzBdfX0pO2NsYXNzIGswIGV4dGVuZHMgUUh7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLl9yZW5kZXJEYXRhPW5ldyBGKFtdKSx0aGlzLl9maWx0ZXI9bmV3IEYoIiIpLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXM9bmV3IEksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj1udWxsLHRoaXMuc29ydGluZ0RhdGFBY2Nlc3Nvcj0odCxlKT0+e2NvbnN0IG49dFtlXTtpZihDeihuKSl7Y29uc3QgdD1OdW1iZXIobik7cmV0dXJuIHQ8OTAwNzE5OTI1NDc0MDk5MT90Om59cmV0dXJuIG59LHRoaXMuc29ydERhdGE9KHQsZSk9Pntjb25zdCBuPWUuYWN0aXZlLG89ZS5kaXJlY3Rpb247cmV0dXJuIG4mJiIiIT1vP3Quc29ydCgoKHQsZSk9PntsZXQgaT10aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3IodCxuKSxhPXRoaXMuc29ydGluZ0RhdGFBY2Nlc3NvcihlLG4pO2NvbnN0IHI9dHlwZW9mIGkscz10eXBlb2YgYTtyIT09cyYmKCJudW1iZXIiPT09ciYmKGkrPSIiKSwibnVtYmVyIj09PXMmJihhKz0iIikpO2xldCBsPTA7cmV0dXJuIG51bGwhPWkmJm51bGwhPWE/aT5hP2w9MTppPGEmJihsPS0xKTpudWxsIT1pP2w9MTpudWxsIT1hJiYobD0tMSksbCooImFzYyI9PW8/MTotMSl9KSk6dH0sdGhpcy5maWx0ZXJQcmVkaWNhdGU9KHQsZSk9Pntjb25zdCBuPU9iamVjdC5rZXlzKHQpLnJlZHVjZSgoKGUsbik9PmUrdFtuXSsi4pesIiksIiIpLnRvTG93ZXJDYXNlKCksbz1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpO3JldHVybi0xIT1uLmluZGV4T2Yobyl9LHRoaXMuX2RhdGE9bmV3IEYodCksdGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCl9Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5fZGF0YS52YWx1ZX1zZXQgZGF0YSh0KXt0aGlzLl9kYXRhLm5leHQodCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fZmlsdGVyRGF0YSh0KX1nZXQgZmlsdGVyKCl7cmV0dXJuIHRoaXMuX2ZpbHRlci52YWx1ZX1zZXQgZmlsdGVyKHQpe3RoaXMuX2ZpbHRlci5uZXh0KHQpLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb258fHRoaXMuX2ZpbHRlckRhdGEodGhpcy5kYXRhKX1nZXQgc29ydCgpe3JldHVybiB0aGlzLl9zb3J0fXNldCBzb3J0KHQpe3RoaXMuX3NvcnQ9dCx0aGlzLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKX1nZXQgcGFnaW5hdG9yKCl7cmV0dXJuIHRoaXMuX3BhZ2luYXRvcn1zZXQgcGFnaW5hdG9yKHQpe3RoaXMuX3BhZ2luYXRvcj10LHRoaXMuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpfV91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKXt2YXIgdDtjb25zdCBlPXRoaXMuX3NvcnQ/cmUodGhpcy5fc29ydC5zb3J0Q2hhbmdlLHRoaXMuX3NvcnQuaW5pdGlhbGl6ZWQpOkV0KG51bGwpLG49dGhpcy5fcGFnaW5hdG9yP3JlKHRoaXMuX3BhZ2luYXRvci5wYWdlLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXMsdGhpcy5fcGFnaW5hdG9yLmluaXRpYWxpemVkKTpFdChudWxsKSxvPVd0KFt0aGlzLl9kYXRhLHRoaXMuX2ZpbHRlcl0pLnBpcGUoSXQoKChbdF0pPT50aGlzLl9maWx0ZXJEYXRhKHQpKSkpLGk9V3QoW28sZV0pLnBpcGUoSXQoKChbdF0pPT50aGlzLl9vcmRlckRhdGEodCkpKSksYT1XdChbaSxuXSkucGlwZShJdCgoKFt0XSk9PnRoaXMuX3BhZ2VEYXRhKHQpKSkpO251bGw9PT0odD10aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9uKXx8dm9pZCAwPT09dHx8dC51bnN1YnNjcmliZSgpLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb249YS5zdWJzY3JpYmUoKHQ9PnRoaXMuX3JlbmRlckRhdGEubmV4dCh0KSkpfV9maWx0ZXJEYXRhKHQpe3JldHVybiB0aGlzLmZpbHRlcmVkRGF0YT1udWxsPT10aGlzLmZpbHRlcnx8IiI9PT10aGlzLmZpbHRlcj90OnQuZmlsdGVyKCh0PT50aGlzLmZpbHRlclByZWRpY2F0ZSh0LHRoaXMuZmlsdGVyKSkpLHRoaXMucGFnaW5hdG9yJiZ0aGlzLl91cGRhdGVQYWdpbmF0b3IodGhpcy5maWx0ZXJlZERhdGEubGVuZ3RoKSx0aGlzLmZpbHRlcmVkRGF0YX1fb3JkZXJEYXRhKHQpe3JldHVybiB0aGlzLnNvcnQ/dGhpcy5zb3J0RGF0YSh0LnNsaWNlKCksdGhpcy5zb3J0KTp0fV9wYWdlRGF0YSh0KXtpZighdGhpcy5wYWdpbmF0b3IpcmV0dXJuIHQ7Y29uc3QgZT10aGlzLnBhZ2luYXRvci5wYWdlSW5kZXgqdGhpcy5wYWdpbmF0b3IucGFnZVNpemU7cmV0dXJuIHQuc2xpY2UoZSxlK3RoaXMucGFnaW5hdG9yLnBhZ2VTaXplKX1fdXBkYXRlUGFnaW5hdG9yKHQpe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57Y29uc3QgZT10aGlzLnBhZ2luYXRvcjtpZihlJiYoZS5sZW5ndGg9dCxlLnBhZ2VJbmRleD4wKSl7Y29uc3QgdD1NYXRoLmNlaWwoZS5sZW5ndGgvZS5wYWdlU2l6ZSktMXx8MCxuPU1hdGgubWluKGUucGFnZUluZGV4LHQpO24hPT1lLnBhZ2VJbmRleCYmKGUucGFnZUluZGV4PW4sdGhpcy5faW50ZXJuYWxQYWdlQ2hhbmdlcy5uZXh0KCkpfX0pKX1jb25uZWN0KCl7cmV0dXJuIHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb258fHRoaXMuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpLHRoaXMuX3JlbmRlckRhdGF9ZGlzY29ubmVjdCgpe3ZhciB0O251bGw9PT0odD10aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9uKXx8dm9pZCAwPT09dHx8dC51bnN1YnNjcmliZSgpLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb249bnVsbH19Y2xhc3MgUzAgZXh0ZW5kcyBrMHt9Y29uc3QgRDA9WyJwYW5lbCJdO2Z1bmN0aW9uIEUwKHQsZSl7aWYoMSZ0JiYoUm0oMCwiZGl2IiwwLDEpLFhtKDIpLEFtKCkpLDImdCl7Y29uc3QgdD1lLmlkLG49WW0oKTtEbSgiaWQiLG4uaWQpKCJuZ0NsYXNzIixuLl9jbGFzc0xpc3QpLGpwKCJhcmlhLWxhYmVsIixuLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsbi5fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieSh0KSl9fWxldCBSMD0wO2NsYXNzIEEwe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLm9wdGlvbj1lfX1jb25zdCBUMD1RSShjbGFzc3t9KSxOMD1uZXcgR2EoIm1hdC1hdXRvY29tcGxldGUtZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiB6MCgpe3JldHVybnthdXRvQWN0aXZlRmlyc3RPcHRpb246ITF9fX0pO2NsYXNzIEkwIGV4dGVuZHMgVDB7Y29uc3RydWN0b3IodCxlLG4sbyl7c3VwZXIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9hY3RpdmVPcHRpb25DaGFuZ2VzPW0uRU1QVFksdGhpcy5zaG93UGFuZWw9ITEsdGhpcy5faXNPcGVuPSExLHRoaXMuZGlzcGxheVdpdGg9bnVsbCx0aGlzLm9wdGlvblNlbGVjdGVkPW5ldyBMaCx0aGlzLm9wZW5lZD1uZXcgTGgsdGhpcy5jbG9zZWQ9bmV3IExoLHRoaXMub3B0aW9uQWN0aXZhdGVkPW5ldyBMaCx0aGlzLl9jbGFzc0xpc3Q9e30sdGhpcy5pZD0ibWF0LWF1dG9jb21wbGV0ZS0iK1IwKyssdGhpcy5pbmVydEdyb3Vwcz0obnVsbD09bz92b2lkIDA6by5TQUZBUkkpfHwhMSx0aGlzLl9hdXRvQWN0aXZlRmlyc3RPcHRpb249ISFuLmF1dG9BY3RpdmVGaXJzdE9wdGlvbn1nZXQgaXNPcGVuKCl7cmV0dXJuIHRoaXMuX2lzT3BlbiYmdGhpcy5zaG93UGFuZWx9Z2V0IGF1dG9BY3RpdmVGaXJzdE9wdGlvbigpe3JldHVybiB0aGlzLl9hdXRvQWN0aXZlRmlyc3RPcHRpb259c2V0IGF1dG9BY3RpdmVGaXJzdE9wdGlvbih0KXt0aGlzLl9hdXRvQWN0aXZlRmlyc3RPcHRpb249eXoodCl9c2V0IGNsYXNzTGlzdCh0KXt0aGlzLl9jbGFzc0xpc3Q9dCYmdC5sZW5ndGg/KGZ1bmN0aW9uIGUodCxuPS9ccysvKXtjb25zdCBvPVtdO2lmKG51bGwhPXQpe2NvbnN0IGU9QXJyYXkuaXNBcnJheSh0KT90OmAke3R9YC5zcGxpdChuKTtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPWAke3R9YC50cmltKCk7ZSYmby5wdXNoKGUpfX1yZXR1cm4gb30pKHQpLnJlZHVjZSgoKHQsZSk9Pih0W2VdPSEwLHQpKSx7fSk6e30sdGhpcy5fc2V0VmlzaWJpbGl0eUNsYXNzZXModGhpcy5fY2xhc3NMaXN0KSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lPSIifW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2tleU1hbmFnZXI9bmV3IHRJKHRoaXMub3B0aW9ucykud2l0aFdyYXAoKSx0aGlzLl9hY3RpdmVPcHRpb25DaGFuZ2VzPXRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnN1YnNjcmliZSgodD0+e3RoaXMub3B0aW9uQWN0aXZhdGVkLmVtaXQoe3NvdXJjZTp0aGlzLG9wdGlvbjp0aGlzLm9wdGlvbnMudG9BcnJheSgpW3RdfHxudWxsfSl9KSksdGhpcy5fc2V0VmlzaWJpbGl0eSgpfW5nT25EZXN0cm95KCl7dGhpcy5fYWN0aXZlT3B0aW9uQ2hhbmdlcy51bnN1YnNjcmliZSgpfV9zZXRTY3JvbGxUb3AodCl7dGhpcy5wYW5lbCYmKHRoaXMucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A9dCl9X2dldFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLnBhbmVsP3RoaXMucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A6MH1fc2V0VmlzaWJpbGl0eSgpe3RoaXMuc2hvd1BhbmVsPSEhdGhpcy5vcHRpb25zLmxlbmd0aCx0aGlzLl9zZXRWaXNpYmlsaXR5Q2xhc3Nlcyh0aGlzLl9jbGFzc0xpc3QpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9lbWl0U2VsZWN0RXZlbnQodCl7Y29uc3QgZT1uZXcgQTAodGhpcyx0KTt0aGlzLm9wdGlvblNlbGVjdGVkLmVtaXQoZSl9X2dldFBhbmVsQXJpYUxhYmVsbGVkYnkodCl7cmV0dXJuIHRoaXMuYXJpYUxhYmVsP251bGw6dGhpcy5hcmlhTGFiZWxsZWRieT8odD90KyIgIjoiIikrdGhpcy5hcmlhTGFiZWxsZWRieTp0fV9zZXRWaXNpYmlsaXR5Q2xhc3Nlcyh0KXt0W3RoaXMuX3Zpc2libGVDbGFzc109dGhpcy5zaG93UGFuZWwsdFt0aGlzLl9oaWRkZW5DbGFzc109IXRoaXMuc2hvd1BhbmVsfX1JMC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8STApKFNtKFVnKSxTbShoZyksU20oTjApLFNtKHd6KSl9LEkwLsm1ZGlyPWxvKHt0eXBlOkkwLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoUWgoWGcsNyksUWgoRDAsNSkpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4udGVtcGxhdGU9dC5maXJzdCksSmgodD10YigpKSYmKG4ucGFuZWw9dC5maXJzdCl9fSxpbnB1dHM6e2Rpc3BsYXlXaXRoOiJkaXNwbGF5V2l0aCIsYXV0b0FjdGl2ZUZpcnN0T3B0aW9uOiJhdXRvQWN0aXZlRmlyc3RPcHRpb24iLGNsYXNzTGlzdDpbImNsYXNzIiwiY2xhc3NMaXN0Il0sYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxwYW5lbFdpZHRoOiJwYW5lbFdpZHRoIn0sb3V0cHV0czp7b3B0aW9uU2VsZWN0ZWQ6Im9wdGlvblNlbGVjdGVkIixvcGVuZWQ6Im9wZW5lZCIsY2xvc2VkOiJjbG9zZWQiLG9wdGlvbkFjdGl2YXRlZDoib3B0aW9uQWN0aXZhdGVkIn0sZmVhdHVyZXM6W3hwXX0pLEkwLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VWd9LHt0eXBlOmhnfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbTjBdfV19LHt0eXBlOnd6fV0sSTAucHJvcERlY29yYXRvcnM9e3RlbXBsYXRlOlt7dHlwZTpaYSxhcmdzOltYZyx7c3RhdGljOiEwfV19XSxwYW5lbDpbe3R5cGU6WmEsYXJnczpbInBhbmVsIl19XSxhcmlhTGFiZWw6W3t0eXBlOnh5LGFyZ3M6WyJhcmlhLWxhYmVsIl19XSxhcmlhTGFiZWxsZWRieTpbe3R5cGU6eHksYXJnczpbImFyaWEtbGFiZWxsZWRieSJdfV0sZGlzcGxheVdpdGg6W3t0eXBlOnh5fV0sYXV0b0FjdGl2ZUZpcnN0T3B0aW9uOlt7dHlwZTp4eX1dLHBhbmVsV2lkdGg6W3t0eXBlOnh5fV0sb3B0aW9uU2VsZWN0ZWQ6W3t0eXBlOk95fV0sb3BlbmVkOlt7dHlwZTpPeX1dLGNsb3NlZDpbe3R5cGU6T3l9XSxvcHRpb25BY3RpdmF0ZWQ6W3t0eXBlOk95fV0sY2xhc3NMaXN0Olt7dHlwZTp4eSxhcmdzOlsiY2xhc3MiXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEkwLFt7dHlwZTpDeX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpVZ30se3R5cGU6aGd9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltOMF19XX0se3R5cGU6d3p9XX0pLHtkaXNwbGF5V2l0aDpbe3R5cGU6eHl9XSxvcHRpb25TZWxlY3RlZDpbe3R5cGU6T3l9XSxvcGVuZWQ6W3t0eXBlOk95fV0sY2xvc2VkOlt7dHlwZTpPeX1dLG9wdGlvbkFjdGl2YXRlZDpbe3R5cGU6T3l9XSxhdXRvQWN0aXZlRmlyc3RPcHRpb246W3t0eXBlOnh5fV0sY2xhc3NMaXN0Olt7dHlwZTp4eSxhcmdzOlsiY2xhc3MiXX1dLHRlbXBsYXRlOlt7dHlwZTpaYSxhcmdzOltYZyx7c3RhdGljOiEwfV19XSxwYW5lbDpbe3R5cGU6WmEsYXJnczpbInBhbmVsIl19XSxhcmlhTGFiZWw6W3t0eXBlOnh5LGFyZ3M6WyJhcmlhLWxhYmVsIl19XSxhcmlhTGFiZWxsZWRieTpbe3R5cGU6eHksYXJnczpbImFyaWEtbGFiZWxsZWRieSJdfV0scGFuZWxXaWR0aDpbe3R5cGU6eHl9XX0pO2NsYXNzIEgwIGV4dGVuZHMgSTB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3Zpc2libGVDbGFzcz0ibWF0LWF1dG9jb21wbGV0ZS12aXNpYmxlIix0aGlzLl9oaWRkZW5DbGFzcz0ibWF0LWF1dG9jb21wbGV0ZS1oaWRkZW4ifX1IMC7JtWZhYz0oZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4odHx8KHQ9QWEoSDApKSkobnx8SDApfX0pKCksSDAuybVjbXA9dG8oe3R5cGU6SDAsc2VsZWN0b3JzOltbIm1hdC1hdXRvY29tcGxldGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYoJGgobyx6SCw1KSwkaChvLEJILDUpKSwyJmUpe2xldCB0O0poKHQ9dGIoKSkmJihuLm9wdGlvbkdyb3Vwcz10KSxKaCh0PXRiKCkpJiYobi5vcHRpb25zPXQpfX0saG9zdEF0dHJzOlsxLCJtYXQtYXV0b2NvbXBsZXRlIl0saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZXhwb3J0QXM6WyJtYXRBdXRvY29tcGxldGUiXSxmZWF0dXJlczpbcGcoW3twcm92aWRlOlJILHVzZUV4aXN0aW5nOkgwfV0pLHhwXSxuZ0NvbnRlbnRTZWxlY3RvcnM6WyIqIl0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbInJvbGUiLCJsaXN0Ym94IiwxLCJtYXQtYXV0b2NvbXBsZXRlLXBhbmVsIiwzLCJpZCIsIm5nQ2xhc3MiXSxbInBhbmVsIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihabSgpLFFwKDAsRTAsMyw0LCJuZy10ZW1wbGF0ZSIpKX0sZGlyZWN0aXZlczpbYU1dLHN0eWxlczpbIi5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse21pbi13aWR0aDoxMTJweDttYXgtd2lkdGg6MjgwcHg7b3ZlcmZsb3c6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDt2aXNpYmlsaXR5OmhpZGRlbjttYXgtd2lkdGg6bm9uZTttYXgtaGVpZ2h0OjI1NnB4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4fS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsLm1hdC1hdXRvY29tcGxldGUtdmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS1oaWRkZW57dmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwtYWJvdmUgLm1hdC1hdXRvY29tcGxldGUtcGFuZWx7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweH0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LWRpdmlkZXItaG9yaXpvbnRhbHttYXJnaW4tdG9wOi0xcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtvdXRsaW5lOnNvbGlkIDFweH1tYXQtYXV0b2NvbXBsZXRle2Rpc3BsYXk6bm9uZX1cbiJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLEgwLnByb3BEZWNvcmF0b3JzPXtvcHRpb25Hcm91cHM6W3t0eXBlOllhLGFyZ3M6W3pILHtkZXNjZW5kYW50czohMH1dfV0sb3B0aW9uczpbe3R5cGU6WWEsYXJnczpbQkgse2Rlc2NlbmRhbnRzOiEwfV19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChIMCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJtYXQtYXV0b2NvbXBsZXRlIix0ZW1wbGF0ZTonPG5nLXRlbXBsYXRlIGxldC1mb3JtRmllbGRJZD0iaWQiPlxuICA8ZGl2IGNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLXBhbmVsIlxuICAgICAgIHJvbGU9Imxpc3Rib3giXG4gICAgICAgW2lkXT0iaWQiXG4gICAgICAgW2F0dHIuYXJpYS1sYWJlbF09ImFyaWFMYWJlbCB8fCBudWxsIlxuICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09Il9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KGZvcm1GaWVsZElkKSJcbiAgICAgICBbbmdDbGFzc109Il9jbGFzc0xpc3QiXG4gICAgICAgI3BhbmVsPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuJyxlbmNhcHN1bGF0aW9uOkhuLk5vbmUsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaCxleHBvcnRBczoibWF0QXV0b2NvbXBsZXRlIixpbnB1dHM6WyJkaXNhYmxlUmlwcGxlIl0saG9zdDp7Y2xhc3M6Im1hdC1hdXRvY29tcGxldGUifSxwcm92aWRlcnM6W3twcm92aWRlOlJILHVzZUV4aXN0aW5nOkgwfV0sc3R5bGVzOlsiLm1hdC1hdXRvY29tcGxldGUtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3Zpc2liaWxpdHk6aGlkZGVuO21heC13aWR0aDpub25lO21heC1oZWlnaHQ6MjU2cHg7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHh9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS12aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtYXV0b2NvbXBsZXRlLWhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC1hYm92ZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4fS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtZGl2aWRlci1ob3Jpem9udGFse21hcmdpbi10b3A6LTFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse291dGxpbmU6c29saWQgMXB4fW1hdC1hdXRvY29tcGxldGV7ZGlzcGxheTpub25lfVxuIl19XX1dLG51bGwse29wdGlvbkdyb3Vwczpbe3R5cGU6WWEsYXJnczpbekgse2Rlc2NlbmRhbnRzOiEwfV19XSxvcHRpb25zOlt7dHlwZTpZYSxhcmdzOltCSCx7ZGVzY2VuZGFudHM6ITB9XX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBGMHtjb25zdHJ1Y3Rvcih0KXt0aGlzLmVsZW1lbnRSZWY9dH19RjAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEYwKShTbShoZykpfSxGMC7JtWRpcj1sbyh7dHlwZTpGMH0pLEYwLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6aGd9XSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEYwLFt7dHlwZTpDeX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpoZ31dfSksbnVsbCk7Y2xhc3MgTDAgZXh0ZW5kcyBGMHt9TDAuybVmYWM9KGZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uIGUobil7cmV0dXJuKHR8fCh0PUFhKEwwKSkpKG58fEwwKX19KSgpLEwwLsm1ZGlyPWxvKHt0eXBlOkwwLHNlbGVjdG9yczpbWyIiLCJtYXRBdXRvY29tcGxldGVPcmlnaW4iLCIiXV0sZXhwb3J0QXM6WyJtYXRBdXRvY29tcGxldGVPcmlnaW4iXSxmZWF0dXJlczpbeHBdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChMMCxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbbWF0QXV0b2NvbXBsZXRlT3JpZ2luXSIsZXhwb3J0QXM6Im1hdEF1dG9jb21wbGV0ZU9yaWdpbiJ9XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBCMD1uZXcgR2EoIm1hdC1hdXRvY29tcGxldGUtc2Nyb2xsLXN0cmF0ZWd5IiksVjA9e3Byb3ZpZGU6QjAsZGVwczpbcExdLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gajAodCl7cmV0dXJuKCk9PnQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fSxVMD17cHJvdmlkZTpJVix1c2VFeGlzdGluZzpxZSgoKCk9PlcwKSksbXVsdGk6ITB9O2NsYXNzIEcwe2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyxsLGMsZCl7dGhpcy5fZWxlbWVudD10LHRoaXMuX292ZXJsYXk9ZSx0aGlzLl92aWV3Q29udGFpbmVyUmVmPW4sdGhpcy5fem9uZT1vLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fZGlyPXIsdGhpcy5fZm9ybUZpZWxkPXMsdGhpcy5fZG9jdW1lbnQ9bCx0aGlzLl92aWV3cG9ydFJ1bGVyPWMsdGhpcy5fZGVmYXVsdHM9ZCx0aGlzLl9jb21wb25lbnREZXN0cm95ZWQ9ITEsdGhpcy5fYXV0b2NvbXBsZXRlRGlzYWJsZWQ9ITEsdGhpcy5fbWFudWFsbHlGbG9hdGluZ0xhYmVsPSExLHRoaXMuX3ZpZXdwb3J0U3Vic2NyaXB0aW9uPW0uRU1QVFksdGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzPSEwLHRoaXMuX2Nsb3NlS2V5RXZlbnRTdHJlYW09bmV3IEksdGhpcy5fd2luZG93Qmx1ckhhbmRsZXI9KCk9Pnt0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9dGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudHx8dGhpcy5wYW5lbE9wZW59LHRoaXMuX29uQ2hhbmdlPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMucG9zaXRpb249ImF1dG8iLHRoaXMuYXV0b2NvbXBsZXRlQXR0cmlidXRlPSJvZmYiLHRoaXMuX292ZXJsYXlBdHRhY2hlZD0hMSx0aGlzLm9wdGlvblNlbGVjdGlvbnM9UXQoKCgpPT50aGlzLmF1dG9jb21wbGV0ZSYmdGhpcy5hdXRvY29tcGxldGUub3B0aW9ucz9yZSguLi50aGlzLmF1dG9jb21wbGV0ZS5vcHRpb25zLm1hcCgodD0+dC5vblNlbGVjdGlvbkNoYW5nZSkpKTp0aGlzLl96b25lLm9uU3RhYmxlLnBpcGUoYmUoMSksemUoKCgpPT50aGlzLm9wdGlvblNlbGVjdGlvbnMpKSkpKSx0aGlzLl9zY3JvbGxTdHJhdGVneT1hfWdldCBhdXRvY29tcGxldGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLl9hdXRvY29tcGxldGVEaXNhYmxlZH1zZXQgYXV0b2NvbXBsZXRlRGlzYWJsZWQodCl7dGhpcy5fYXV0b2NvbXBsZXRlRGlzYWJsZWQ9eXoodCl9bmdBZnRlclZpZXdJbml0KCl7Y29uc3QgdD10aGlzLl9nZXRXaW5kb3coKTt2b2lkIDAhPT10JiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgoKT0+dC5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl93aW5kb3dCbHVySGFuZGxlcikpKX1uZ09uQ2hhbmdlcyh0KXt0LnBvc2l0aW9uJiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiYodGhpcy5fc2V0U3RyYXRlZ3lQb3NpdGlvbnModGhpcy5fcG9zaXRpb25TdHJhdGVneSksdGhpcy5wYW5lbE9wZW4mJnRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSl9bmdPbkRlc3Ryb3koKXtjb25zdCB0PXRoaXMuX2dldFdpbmRvdygpO3ZvaWQgMCE9PXQmJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fd2luZG93Qmx1ckhhbmRsZXIpLHRoaXMuX3ZpZXdwb3J0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY29tcG9uZW50RGVzdHJveWVkPSEwLHRoaXMuX2Rlc3Ryb3lQYW5lbCgpLHRoaXMuX2Nsb3NlS2V5RXZlbnRTdHJlYW0uY29tcGxldGUoKX1nZXQgcGFuZWxPcGVuKCl7cmV0dXJuIHRoaXMuX292ZXJsYXlBdHRhY2hlZCYmdGhpcy5hdXRvY29tcGxldGUuc2hvd1BhbmVsfW9wZW5QYW5lbCgpe3RoaXMuX2F0dGFjaE92ZXJsYXkoKSx0aGlzLl9mbG9hdExhYmVsKCl9Y2xvc2VQYW5lbCgpe3RoaXMuX3Jlc2V0TGFiZWwoKSx0aGlzLl9vdmVybGF5QXR0YWNoZWQmJih0aGlzLnBhbmVsT3BlbiYmdGhpcy5hdXRvY29tcGxldGUuY2xvc2VkLmVtaXQoKSx0aGlzLmF1dG9jb21wbGV0ZS5faXNPcGVuPXRoaXMuX292ZXJsYXlBdHRhY2hlZD0hMSx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkmJih0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpLHRoaXMuX2NvbXBvbmVudERlc3Ryb3llZHx8dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpKX11cGRhdGVQb3NpdGlvbigpe3RoaXMuX292ZXJsYXlBdHRhY2hlZCYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfWdldCBwYW5lbENsb3NpbmdBY3Rpb25zKCl7cmV0dXJuIHJlKHRoaXMub3B0aW9uU2VsZWN0aW9ucyx0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci50YWJPdXQucGlwZShjZSgoKCk9PnRoaXMuX292ZXJsYXlBdHRhY2hlZCkpKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLHRoaXMuX2dldE91dHNpZGVDbGlja1N0cmVhbSgpLHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi5kZXRhY2htZW50cygpLnBpcGUoY2UoKCgpPT50aGlzLl9vdmVybGF5QXR0YWNoZWQpKSk6RXQoKSkucGlwZShJdCgodD0+dCBpbnN0YW5jZW9mIEZIP3Q6bnVsbCkpKX1nZXQgYWN0aXZlT3B0aW9uKCl7cmV0dXJuIHRoaXMuYXV0b2NvbXBsZXRlJiZ0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlcj90aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci5hY3RpdmVJdGVtOm51bGx9X2dldE91dHNpZGVDbGlja1N0cmVhbSgpe3JldHVybiByZShvZSh0aGlzLl9kb2N1bWVudCwiY2xpY2siKSxvZSh0aGlzLl9kb2N1bWVudCwiYXV4Y2xpY2siKSxvZSh0aGlzLl9kb2N1bWVudCwidG91Y2hlbmQiKSkucGlwZShjZSgodD0+e2NvbnN0IGU9THoodCksbj10aGlzLl9mb3JtRmllbGQ/dGhpcy5fZm9ybUZpZWxkLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ6bnVsbCxvPXRoaXMuY29ubmVjdGVkVG8/dGhpcy5jb25uZWN0ZWRUby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ6bnVsbDtyZXR1cm4gdGhpcy5fb3ZlcmxheUF0dGFjaGVkJiZlIT09dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50JiYoIW58fCFuLmNvbnRhaW5zKGUpKSYmKCFvfHwhby5jb250YWlucyhlKSkmJiEhdGhpcy5fb3ZlcmxheVJlZiYmIXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuY29udGFpbnMoZSl9KSkpfXdyaXRlVmFsdWUodCl7UHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oKCgpPT50aGlzLl9zZXRUcmlnZ2VyVmFsdWUodCkpKX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMuX29uQ2hhbmdlPXR9cmVnaXN0ZXJPblRvdWNoZWQodCl7dGhpcy5fb25Ub3VjaGVkPXR9c2V0RGlzYWJsZWRTdGF0ZSh0KXt0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQ9dH1faGFuZGxlS2V5ZG93bih0KXtjb25zdCBlPXQua2V5Q29kZTtpZihlIT09dXp8fGJ6KHQpfHx0LnByZXZlbnREZWZhdWx0KCksdGhpcy5hY3RpdmVPcHRpb24mJmU9PT1teiYmdGhpcy5wYW5lbE9wZW4pdGhpcy5hY3RpdmVPcHRpb24uX3NlbGVjdFZpYUludGVyYWN0aW9uKCksdGhpcy5fcmVzZXRBY3RpdmVJdGVtKCksdC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgaWYodGhpcy5hdXRvY29tcGxldGUpe2NvbnN0IG49dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSxvPWU9PT1nenx8ZT09PWh6O3RoaXMucGFuZWxPcGVufHw5PT09ZT90aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci5vbktleWRvd24odCk6byYmdGhpcy5fY2FuT3BlbigpJiZ0aGlzLm9wZW5QYW5lbCgpLChvfHx0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci5hY3RpdmVJdGVtIT09bikmJnRoaXMuX3Njcm9sbFRvT3B0aW9uKHRoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleHx8MCl9fV9oYW5kbGVJbnB1dCh0KXtsZXQgZT10LnRhcmdldCxuPWUudmFsdWU7Im51bWJlciI9PT1lLnR5cGUmJihuPSIiPT1uP251bGw6cGFyc2VGbG9hdChuKSksdGhpcy5fcHJldmlvdXNWYWx1ZSE9PW4mJih0aGlzLl9wcmV2aW91c1ZhbHVlPW4sdGhpcy5fb25DaGFuZ2UobiksdGhpcy5fY2FuT3BlbigpJiZ0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dC50YXJnZXQmJnRoaXMub3BlblBhbmVsKCkpfV9oYW5kbGVGb2N1cygpe3RoaXMuX2Nhbk9wZW5Pbk5leHRGb2N1cz90aGlzLl9jYW5PcGVuKCkmJih0aGlzLl9wcmV2aW91c1ZhbHVlPXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSx0aGlzLl9hdHRhY2hPdmVybGF5KCksdGhpcy5fZmxvYXRMYWJlbCghMCkpOnRoaXMuX2Nhbk9wZW5Pbk5leHRGb2N1cz0hMH1fZmxvYXRMYWJlbCh0PSExKXt0aGlzLl9mb3JtRmllbGQmJiJhdXRvIj09PXRoaXMuX2Zvcm1GaWVsZC5mbG9hdExhYmVsJiYodD90aGlzLl9mb3JtRmllbGQuX2FuaW1hdGVBbmRMb2NrTGFiZWwoKTp0aGlzLl9mb3JtRmllbGQuZmxvYXRMYWJlbD0iYWx3YXlzIix0aGlzLl9tYW51YWxseUZsb2F0aW5nTGFiZWw9ITApfV9yZXNldExhYmVsKCl7dGhpcy5fbWFudWFsbHlGbG9hdGluZ0xhYmVsJiYodGhpcy5fZm9ybUZpZWxkLmZsb2F0TGFiZWw9ImF1dG8iLHRoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbD0hMSl9X3N1YnNjcmliZVRvQ2xvc2luZ0FjdGlvbnMoKXtyZXR1cm4gcmUodGhpcy5fem9uZS5vblN0YWJsZS5waXBlKGJlKDEpKSx0aGlzLmF1dG9jb21wbGV0ZS5vcHRpb25zLmNoYW5nZXMucGlwZShGZSgoKCk9PnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kucmVhcHBseUxhc3RQb3NpdGlvbigpKSksQ2UoMCkpKS5waXBlKHplKCgoKT0+e2NvbnN0IHQ9dGhpcy5wYW5lbE9wZW47cmV0dXJuIHRoaXMuX3Jlc2V0QWN0aXZlSXRlbSgpLHRoaXMuYXV0b2NvbXBsZXRlLl9zZXRWaXNpYmlsaXR5KCksdGhpcy5wYW5lbE9wZW4mJih0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCksdCE9PXRoaXMucGFuZWxPcGVuJiZ0aGlzLmF1dG9jb21wbGV0ZS5vcGVuZWQuZW1pdCgpKSx0aGlzLnBhbmVsQ2xvc2luZ0FjdGlvbnN9KSksYmUoMSkpLnN1YnNjcmliZSgodD0+dGhpcy5fc2V0VmFsdWVBbmRDbG9zZSh0KSkpfV9kZXN0cm95UGFuZWwoKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5jbG9zZVBhbmVsKCksdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKX1fc2V0VHJpZ2dlclZhbHVlKHQpe2NvbnN0IGU9dGhpcy5hdXRvY29tcGxldGUmJnRoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoP3RoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoKHQpOnQsbj1udWxsIT1lP2U6IiI7dGhpcy5fZm9ybUZpZWxkP3RoaXMuX2Zvcm1GaWVsZC5fY29udHJvbC52YWx1ZT1uOnRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZT1uLHRoaXMuX3ByZXZpb3VzVmFsdWU9bn1fc2V0VmFsdWVBbmRDbG9zZSh0KXt0JiZ0LnNvdXJjZSYmKHRoaXMuX2NsZWFyUHJldmlvdXNTZWxlY3RlZE9wdGlvbih0LnNvdXJjZSksdGhpcy5fc2V0VHJpZ2dlclZhbHVlKHQuc291cmNlLnZhbHVlKSx0aGlzLl9vbkNoYW5nZSh0LnNvdXJjZS52YWx1ZSksdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5hdXRvY29tcGxldGUuX2VtaXRTZWxlY3RFdmVudCh0LnNvdXJjZSkpLHRoaXMuY2xvc2VQYW5lbCgpfV9jbGVhclByZXZpb3VzU2VsZWN0ZWRPcHRpb24odCl7dGhpcy5hdXRvY29tcGxldGUub3B0aW9ucy5mb3JFYWNoKChlPT57ZSE9PXQmJmUuc2VsZWN0ZWQmJmUuZGVzZWxlY3QoKX0pKX1fYXR0YWNoT3ZlcmxheSgpe3ZhciB0O2lmKCF0aGlzLmF1dG9jb21wbGV0ZSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpKXRocm93KGZ1bmN0aW9uIGUoKXtyZXR1cm4gRXJyb3IoIkF0dGVtcHRpbmcgdG8gb3BlbiBhbiB1bmRlZmluZWQgaW5zdGFuY2Ugb2YgYG1hdC1hdXRvY29tcGxldGVgLiBNYWtlIHN1cmUgdGhhdCB0aGUgaWQgcGFzc2VkIHRvIHRoZSBgbWF0QXV0b2NvbXBsZXRlYCBpcyBjb3JyZWN0IGFuZCB0aGF0IHlvdSdyZSBhdHRlbXB0aW5nIHRvIG9wZW4gaXQgYWZ0ZXIgdGhlIG5nQWZ0ZXJDb250ZW50SW5pdCBob29rLiIpfSkoKTtsZXQgbj10aGlzLl9vdmVybGF5UmVmO24/KHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuc2V0T3JpZ2luKHRoaXMuX2dldENvbm5lY3RlZEVsZW1lbnQoKSksbi51cGRhdGVTaXplKHt3aWR0aDp0aGlzLl9nZXRQYW5lbFdpZHRoKCl9KSk6KHRoaXMuX3BvcnRhbD1uZXcgeEYodGhpcy5hdXRvY29tcGxldGUudGVtcGxhdGUsdGhpcy5fdmlld0NvbnRhaW5lclJlZix7aWQ6bnVsbD09PSh0PXRoaXMuX2Zvcm1GaWVsZCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZ2V0TGFiZWxJZCgpfSksbj10aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9nZXRPdmVybGF5Q29uZmlnKCkpLHRoaXMuX292ZXJsYXlSZWY9bixuLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoKHQ9PnsodC5rZXlDb2RlPT09dXomJiFieih0KXx8dC5rZXlDb2RlPT09Z3omJmJ6KHQsImFsdEtleSIpKSYmKHRoaXMuX3Jlc2V0QWN0aXZlSXRlbSgpLHRoaXMuX2Nsb3NlS2V5RXZlbnRTdHJlYW0ubmV4dCgpLHQuc3RvcFByb3BhZ2F0aW9uKCksdC5wcmV2ZW50RGVmYXVsdCgpKX0pKSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLnBhbmVsT3BlbiYmbiYmbi51cGRhdGVTaXplKHt3aWR0aDp0aGlzLl9nZXRQYW5lbFdpZHRoKCl9KX0pKSksbiYmIW4uaGFzQXR0YWNoZWQoKSYmKG4uYXR0YWNoKHRoaXMuX3BvcnRhbCksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fc3Vic2NyaWJlVG9DbG9zaW5nQWN0aW9ucygpKTtjb25zdCBvPXRoaXMucGFuZWxPcGVuO3RoaXMuYXV0b2NvbXBsZXRlLl9zZXRWaXNpYmlsaXR5KCksdGhpcy5hdXRvY29tcGxldGUuX2lzT3Blbj10aGlzLl9vdmVybGF5QXR0YWNoZWQ9ITAsdGhpcy5wYW5lbE9wZW4mJm8hPT10aGlzLnBhbmVsT3BlbiYmdGhpcy5hdXRvY29tcGxldGUub3BlbmVkLmVtaXQoKX1fZ2V0T3ZlcmxheUNvbmZpZygpe3ZhciB0O3JldHVybiBuZXcgVkYoe3Bvc2l0aW9uU3RyYXRlZ3k6dGhpcy5fZ2V0T3ZlcmxheVBvc2l0aW9uKCksc2Nyb2xsU3RyYXRlZ3k6dGhpcy5fc2Nyb2xsU3RyYXRlZ3koKSx3aWR0aDp0aGlzLl9nZXRQYW5lbFdpZHRoKCksZGlyZWN0aW9uOnRoaXMuX2RpcixwYW5lbENsYXNzOm51bGw9PT0odD10aGlzLl9kZWZhdWx0cyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQub3ZlcmxheVBhbmVsQ2xhc3N9KX1fZ2V0T3ZlcmxheVBvc2l0aW9uKCl7Y29uc3QgdD10aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkpLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoITEpLndpdGhQdXNoKCExKTtyZXR1cm4gdGhpcy5fc2V0U3RyYXRlZ3lQb3NpdGlvbnModCksdGhpcy5fcG9zaXRpb25TdHJhdGVneT10LHR9X3NldFN0cmF0ZWd5UG9zaXRpb25zKHQpe2NvbnN0IGU9W3tvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJ0b3AifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJ0b3AifV0sbj10aGlzLl9hYm92ZUNsYXNzLG89W3tvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJib3R0b20iLHBhbmVsQ2xhc3M6bn0se29yaWdpblg6ImVuZCIsb3JpZ2luWToidG9wIixvdmVybGF5WDoiZW5kIixvdmVybGF5WToiYm90dG9tIixwYW5lbENsYXNzOm59XTtsZXQgaTtpPSJhYm92ZSI9PT10aGlzLnBvc2l0aW9uP286ImJlbG93Ij09PXRoaXMucG9zaXRpb24/ZTpbLi4uZSwuLi5vXSx0LndpdGhQb3NpdGlvbnMoaSl9X2dldENvbm5lY3RlZEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5jb25uZWN0ZWRUbz90aGlzLmNvbm5lY3RlZFRvLmVsZW1lbnRSZWY6dGhpcy5fZm9ybUZpZWxkP3RoaXMuX2Zvcm1GaWVsZC5nZXRDb25uZWN0ZWRPdmVybGF5T3JpZ2luKCk6dGhpcy5fZWxlbWVudH1fZ2V0UGFuZWxXaWR0aCgpe3JldHVybiB0aGlzLmF1dG9jb21wbGV0ZS5wYW5lbFdpZHRofHx0aGlzLl9nZXRIb3N0V2lkdGgoKX1fZ2V0SG9zdFdpZHRoKCl7cmV0dXJuIHRoaXMuX2dldENvbm5lY3RlZEVsZW1lbnQoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofV9yZXNldEFjdGl2ZUl0ZW0oKXtjb25zdCB0PXRoaXMuYXV0b2NvbXBsZXRlO3QuYXV0b0FjdGl2ZUZpcnN0T3B0aW9uP3QuX2tleU1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCk6dC5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKX1fY2FuT3Blbigpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O3JldHVybiF0LnJlYWRPbmx5JiYhdC5kaXNhYmxlZCYmIXRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkfV9nZXRXaW5kb3coKXt2YXIgdDtyZXR1cm4obnVsbD09PSh0PXRoaXMuX2RvY3VtZW50KXx8dm9pZCAwPT09dD92b2lkIDA6dC5kZWZhdWx0Vmlldyl8fHdpbmRvd31fc2Nyb2xsVG9PcHRpb24odCl7Y29uc3QgZT10aGlzLmF1dG9jb21wbGV0ZSxuPVZIKHQsZS5vcHRpb25zLGUub3B0aW9uR3JvdXBzKTtpZigwPT09dCYmMT09PW4pZS5fc2V0U2Nyb2xsVG9wKDApO2Vsc2UgaWYoZS5wYW5lbCl7Y29uc3Qgbj1lLm9wdGlvbnMudG9BcnJheSgpW3RdO2lmKG4pe2NvbnN0IHQ9bi5fZ2V0SG9zdEVsZW1lbnQoKSxvPWpIKHQub2Zmc2V0VG9wLHQub2Zmc2V0SGVpZ2h0LGUuX2dldFNjcm9sbFRvcCgpLGUucGFuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQpO2UuX3NldFNjcm9sbFRvcChvKX19fX1HMC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RzApKFNtKGhnKSxTbShwTCksU20oZWgpLFNtKGFfKSxTbShVZyksU20oQjApLFNtKEhJLDgpLFNtKFJWLDkpLFNtKFpfLDgpLFNtKHVGKSxTbShOMCw4KSl9LEcwLsm1ZGlyPWxvKHt0eXBlOkcwLGlucHV0czp7cG9zaXRpb246WyJtYXRBdXRvY29tcGxldGVQb3NpdGlvbiIsInBvc2l0aW9uIl0sYXV0b2NvbXBsZXRlQXR0cmlidXRlOlsiYXV0b2NvbXBsZXRlIiwiYXV0b2NvbXBsZXRlQXR0cmlidXRlIl0sYXV0b2NvbXBsZXRlRGlzYWJsZWQ6WyJtYXRBdXRvY29tcGxldGVEaXNhYmxlZCIsImF1dG9jb21wbGV0ZURpc2FibGVkIl0sYXV0b2NvbXBsZXRlOlsibWF0QXV0b2NvbXBsZXRlIiwiYXV0b2NvbXBsZXRlIl0sY29ubmVjdGVkVG86WyJtYXRBdXRvY29tcGxldGVDb25uZWN0ZWRUbyIsImNvbm5lY3RlZFRvIl19LGZlYXR1cmVzOltCb119KSxHMC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTpwTH0se3R5cGU6ZWh9LHt0eXBlOmFffSx7dHlwZTpVZ30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W0IwXX1dfSx7dHlwZTpISSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTpBVixkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbUlZdfSx7dHlwZTpScn1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1pfXX1dfSx7dHlwZTp1Rn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltOMF19XX1dLEcwLnByb3BEZWNvcmF0b3JzPXthdXRvY29tcGxldGU6W3t0eXBlOnh5LGFyZ3M6WyJtYXRBdXRvY29tcGxldGUiXX1dLHBvc2l0aW9uOlt7dHlwZTp4eSxhcmdzOlsibWF0QXV0b2NvbXBsZXRlUG9zaXRpb24iXX1dLGNvbm5lY3RlZFRvOlt7dHlwZTp4eSxhcmdzOlsibWF0QXV0b2NvbXBsZXRlQ29ubmVjdGVkVG8iXX1dLGF1dG9jb21wbGV0ZUF0dHJpYnV0ZTpbe3R5cGU6eHksYXJnczpbImF1dG9jb21wbGV0ZSJdfV0sYXV0b2NvbXBsZXRlRGlzYWJsZWQ6W3t0eXBlOnh5LGFyZ3M6WyJtYXRBdXRvY29tcGxldGVEaXNhYmxlZCJdfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoRzAsW3t0eXBlOkN5fV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfSx7dHlwZTpwTH0se3R5cGU6ZWh9LHt0eXBlOmFffSx7dHlwZTpVZ30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W0IwXX1dfSx7dHlwZTpISSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTpBVixkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbUlZdfSx7dHlwZTpScn1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1pfXX1dfSx7dHlwZTp1Rn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltOMF19XX1dfSkse3Bvc2l0aW9uOlt7dHlwZTp4eSxhcmdzOlsibWF0QXV0b2NvbXBsZXRlUG9zaXRpb24iXX1dLGF1dG9jb21wbGV0ZUF0dHJpYnV0ZTpbe3R5cGU6eHksYXJnczpbImF1dG9jb21wbGV0ZSJdfV0sYXV0b2NvbXBsZXRlRGlzYWJsZWQ6W3t0eXBlOnh5LGFyZ3M6WyJtYXRBdXRvY29tcGxldGVEaXNhYmxlZCJdfV0sYXV0b2NvbXBsZXRlOlt7dHlwZTp4eSxhcmdzOlsibWF0QXV0b2NvbXBsZXRlIl19XSxjb25uZWN0ZWRUbzpbe3R5cGU6eHksYXJnczpbIm1hdEF1dG9jb21wbGV0ZUNvbm5lY3RlZFRvIl19XX0pO2NsYXNzIFcwIGV4dGVuZHMgRzB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Fib3ZlQ2xhc3M9Im1hdC1hdXRvY29tcGxldGUtcGFuZWwtYWJvdmUifX1XMC7JtWZhYz0oZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4odHx8KHQ9QWEoVzApKSkobnx8VzApfX0pKCksVzAuybVkaXI9bG8oe3R5cGU6VzAsc2VsZWN0b3JzOltbImlucHV0IiwibWF0QXV0b2NvbXBsZXRlIiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdEF1dG9jb21wbGV0ZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1hdXRvY29tcGxldGUtdHJpZ2dlciJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJlZtKCJmb2N1c2luIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9oYW5kbGVGb2N1cygpfSkpKCJibHVyIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vblRvdWNoZWQoKX0pKSgiaW5wdXQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9oYW5kbGVJbnB1dChlKX0pKSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2hhbmRsZUtleWRvd24oZSl9KSksMiZlJiZqcCgiYXV0b2NvbXBsZXRlIixuLmF1dG9jb21wbGV0ZUF0dHJpYnV0ZSkoInJvbGUiLG4uYXV0b2NvbXBsZXRlRGlzYWJsZWQ/bnVsbDoiY29tYm9ib3giKSgiYXJpYS1hdXRvY29tcGxldGUiLG4uYXV0b2NvbXBsZXRlRGlzYWJsZWQ/bnVsbDoibGlzdCIpKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLG4ucGFuZWxPcGVuJiZuLmFjdGl2ZU9wdGlvbj9uLmFjdGl2ZU9wdGlvbi5pZDpudWxsKSgiYXJpYS1leHBhbmRlZCIsbi5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOm4ucGFuZWxPcGVuLnRvU3RyaW5nKCkpKCJhcmlhLW93bnMiLG4uYXV0b2NvbXBsZXRlRGlzYWJsZWR8fCFuLnBhbmVsT3Blbnx8bnVsbD09bi5hdXRvY29tcGxldGU/bnVsbDpuLmF1dG9jb21wbGV0ZS5pZCkoImFyaWEtaGFzcG9wdXAiLCFuLmF1dG9jb21wbGV0ZURpc2FibGVkKX0sZXhwb3J0QXM6WyJtYXRBdXRvY29tcGxldGVUcmlnZ2VyIl0sZmVhdHVyZXM6W3BnKFtVMF0pLHhwXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoVzAsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiaW5wdXRbbWF0QXV0b2NvbXBsZXRlXSwgdGV4dGFyZWFbbWF0QXV0b2NvbXBsZXRlXSIsaG9zdDp7Y2xhc3M6Im1hdC1hdXRvY29tcGxldGUtdHJpZ2dlciIsIlthdHRyLmF1dG9jb21wbGV0ZV0iOiJhdXRvY29tcGxldGVBdHRyaWJ1dGUiLCJbYXR0ci5yb2xlXSI6J2F1dG9jb21wbGV0ZURpc2FibGVkID8gbnVsbCA6ICJjb21ib2JveCInLCJbYXR0ci5hcmlhLWF1dG9jb21wbGV0ZV0iOidhdXRvY29tcGxldGVEaXNhYmxlZCA/IG51bGwgOiAibGlzdCInLCJbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdIjoiKHBhbmVsT3BlbiAmJiBhY3RpdmVPcHRpb24pID8gYWN0aXZlT3B0aW9uLmlkIDogbnVsbCIsIlthdHRyLmFyaWEtZXhwYW5kZWRdIjoiYXV0b2NvbXBsZXRlRGlzYWJsZWQgPyBudWxsIDogcGFuZWxPcGVuLnRvU3RyaW5nKCkiLCJbYXR0ci5hcmlhLW93bnNdIjoiKGF1dG9jb21wbGV0ZURpc2FibGVkIHx8ICFwYW5lbE9wZW4pID8gbnVsbCA6IGF1dG9jb21wbGV0ZT8uaWQiLCJbYXR0ci5hcmlhLWhhc3BvcHVwXSI6IiFhdXRvY29tcGxldGVEaXNhYmxlZCIsIihmb2N1c2luKSI6Il9oYW5kbGVGb2N1cygpIiwiKGJsdXIpIjoiX29uVG91Y2hlZCgpIiwiKGlucHV0KSI6Il9oYW5kbGVJbnB1dCgkZXZlbnQpIiwiKGtleWRvd24pIjoiX2hhbmRsZUtleWRvd24oJGV2ZW50KSJ9LGV4cG9ydEFzOiJtYXRBdXRvY29tcGxldGVUcmlnZ2VyIixwcm92aWRlcnM6W1UwXX1dfV0sbnVsbCxudWxsKTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovCmNsYXNzIFkwe31ZMC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WTApfSxZMC7JtW1vZD1hbyh7dHlwZTpZMH0pLFkwLsm1aW5qPXZuKHtwcm92aWRlcnM6W1YwXSxpbXBvcnRzOltbeUwsVUgsWEksV01dLHlGLFVILFhJXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoWTAsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOlt5TCxVSCxYSSxXTV0sZXhwb3J0czpbSDAsVzAsTDAseUYsVUgsWEldLGRlY2xhcmF0aW9uczpbSDAsVzAsTDBdLHByb3ZpZGVyczpbVjBdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oWTAse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltIMCxXMCxMMF19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5beUwsVUgsWEksV01dfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW0gwLFcwLEwwLHlGLFVILFhJXX19KTtjbGFzcyBxMHtjb25zdHJ1Y3Rvcigpe3RoaXMudmFsdWU9IiIsdGhpcy5wbGFjZWhvbGRlcj0iIn1vbklucHV0S2V5VXAodCl7IkVudGVyIj09PXQua2V5JiZ0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXIuY2xvc2VQYW5lbCgpfX1mdW5jdGlvbiBaMCh0LGUpe2lmKDEmdCYmKHFpKCksVG0oMCwiY2lyY2xlIiwzKSksMiZ0KXtjb25zdCB0PVltKCk7ZHUoImFuaW1hdGlvbi1uYW1lIiwibWF0LXByb2dyZXNzLXNwaW5uZXItc3Ryb2tlLXJvdGF0ZS0iK3QuX3NwaW5uZXJBbmltYXRpb25MYWJlbCkoInN0cm9rZS1kYXNob2Zmc2V0Iix0Ll9nZXRTdHJva2VEYXNoT2Zmc2V0KCksInB4IikoInN0cm9rZS1kYXNoYXJyYXkiLHQuX2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKSwicHgiKSgic3Ryb2tlLXdpZHRoIix0Ll9nZXRDaXJjbGVTdHJva2VXaWR0aCgpLCIlIiksanAoInIiLHQuX2dldENpcmNsZVJhZGl1cygpKX19ZnVuY3Rpb24gWDAodCxlKXtpZigxJnQmJihxaSgpLFRtKDAsImNpcmNsZSIsMykpLDImdCl7Y29uc3QgdD1ZbSgpO2R1KCJzdHJva2UtZGFzaG9mZnNldCIsdC5fZ2V0U3Ryb2tlRGFzaE9mZnNldCgpLCJweCIpKCJzdHJva2UtZGFzaGFycmF5Iix0Ll9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCksInB4IikoInN0cm9rZS13aWR0aCIsdC5fZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKSwiJSIpLGpwKCJyIix0Ll9nZXRDaXJjbGVSYWRpdXMoKSl9fWZ1bmN0aW9uIEswKHQsZSl7aWYoMSZ0JiYocWkoKSxUbSgwLCJjaXJjbGUiLDMpKSwyJnQpe2NvbnN0IHQ9WW0oKTtkdSgiYW5pbWF0aW9uLW5hbWUiLCJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLSIrdC5fc3Bpbm5lckFuaW1hdGlvbkxhYmVsKSgic3Ryb2tlLWRhc2hvZmZzZXQiLHQuX2dldFN0cm9rZURhc2hPZmZzZXQoKSwicHgiKSgic3Ryb2tlLWRhc2hhcnJheSIsdC5fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpLCJweCIpKCJzdHJva2Utd2lkdGgiLHQuX2dldENpcmNsZVN0cm9rZVdpZHRoKCksIiUiKSxqcCgiciIsdC5fZ2V0Q2lyY2xlUmFkaXVzKCkpfX1mdW5jdGlvbiBKMCh0LGUpe2lmKDEmdCYmKHFpKCksVG0oMCwiY2lyY2xlIiwzKSksMiZ0KXtjb25zdCB0PVltKCk7ZHUoInN0cm9rZS1kYXNob2Zmc2V0Iix0Ll9nZXRTdHJva2VEYXNoT2Zmc2V0KCksInB4IikoInN0cm9rZS1kYXNoYXJyYXkiLHQuX2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKSwicHgiKSgic3Ryb2tlLXdpZHRoIix0Ll9nZXRDaXJjbGVTdHJva2VXaWR0aCgpLCIlIiksanAoInIiLHQuX2dldENpcmNsZVJhZGl1cygpKX19cTAuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHEwKX0scTAuybVjbXA9dG8oe3R5cGU6cTAsc2VsZWN0b3JzOltbInRiLWZpbHRlci1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmUWgoVzAsNSksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi5hdXRvY29tcGxldGVUcmlnZ2VyPXQuZmlyc3QpfX0saW5wdXRzOnt2YWx1ZToidmFsdWUiLG1hdEF1dG9jb21wbGV0ZToibWF0QXV0b2NvbXBsZXRlIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIifSxkZWNsczoyLHZhcnM6NCxjb25zdHM6W1sic3ZnSWNvbiIsInNlYXJjaF8yNHB4Il0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywicGxhY2Vob2xkZXIiLCJtYXRBdXRvY29tcGxldGUiLCJtYXRBdXRvY29tcGxldGVEaXNhYmxlZCIsInZhbHVlIiwia2V5dXAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFRtKDAsIm1hdC1pY29uIiwwKSxSbSgxLCJpbnB1dCIsMSksVm0oImtleXVwIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbklucHV0S2V5VXAoZSl9KSksQW0oKSksMiZlJiYocmMoMSksRG0oInBsYWNlaG9sZGVyIixuLnBsYWNlaG9sZGVyKSgibWF0QXV0b2NvbXBsZXRlIixuLm1hdEF1dG9jb21wbGV0ZSkoIm1hdEF1dG9jb21wbGV0ZURpc2FibGVkIiwhbi5tYXRBdXRvY29tcGxldGUpKCJ2YWx1ZSIsbi52YWx1ZSkpfSxkaXJlY3RpdmVzOltEVyxXMF0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjEzcHh9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3I7Y29sb3I6Y3VycmVudENvbG9yO2ZvbnQ6aW5oZXJpdDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7cGFkZGluZzowO2ZsZXgtZ3JvdzoxfSddfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChxMCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJ0Yi1maWx0ZXItaW5wdXQiLHRlbXBsYXRlOidcbiAgICA8bWF0LWljb24gc3ZnSWNvbj0ic2VhcmNoXzI0cHgiPjwvbWF0LWljb24+XG5cbiAgICBceDNjIS0tIE5vdGU6IHRvIGFsbG93IGZhbHN5IFwnbWF0QXV0b2NvbXBsZXRlXCcgdmFsdWVzLCB3ZSBuZWVkIFwnbWF0QXV0b2NvbXBsZXRlRGlzYWJsZWRcJ1xuICAgIHRvIHByZXZlbnQgcnVudGltZSBlcnJvcnMuIC0tXHgzZVxuICAgIDxpbnB1dFxuICAgICAgdHlwZT0idGV4dCJcbiAgICAgIGF1dG9jb21wbGV0ZT0ib2ZmIlxuICAgICAgW3BsYWNlaG9sZGVyXT0icGxhY2Vob2xkZXIiXG4gICAgICBbbWF0QXV0b2NvbXBsZXRlXT0ibWF0QXV0b2NvbXBsZXRlIlxuICAgICAgW21hdEF1dG9jb21wbGV0ZURpc2FibGVkXT0iIW1hdEF1dG9jb21wbGV0ZSJcbiAgICAgIFt2YWx1ZV09InZhbHVlIlxuICAgICAgKGtleXVwKT0ib25JbnB1dEtleVVwKCRldmVudCkiXG4gICAgLz5cbiAgJyxzdHlsZVVybHM6WyJmaWx0ZXJfaW5wdXRfY29tcG9uZW50LmNzcyJdfV19XSxudWxsLHt2YWx1ZTpbe3R5cGU6eHl9XSxtYXRBdXRvY29tcGxldGU6W3t0eXBlOnh5fV0scGxhY2Vob2xkZXI6W3t0eXBlOnh5fV0sYXV0b2NvbXBsZXRlVHJpZ2dlcjpbe3R5cGU6WmEsYXJnczpbVzBdfV19KTtjb25zdCBRMD0iLm1hdC1wcm9ncmVzcy1zcGlubmVye2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBzdmd7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpO3RvcDowO2xlZnQ6MDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGV7ZmlsbDp0cmFuc3BhcmVudDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnN0cm9rZS1kYXNob2Zmc2V0IDIyNW1zIGxpbmVhcn0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xle3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2U6Q2FudmFzVGV4dH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBzdmd7YW5pbWF0aW9uOm1hdC1wcm9ncmVzcy1zcGlubmVyLWxpbmVhci1yb3RhdGUgMjAwMG1zIGxpbmVhciBpbmZpbml0ZX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBzdmd7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWFuaW1hdGlvblttb2RlPWluZGV0ZXJtaW5hdGVdIGNpcmNsZXt0cmFuc2l0aW9uLXByb3BlcnR5OnN0cm9rZTthbmltYXRpb24tZHVyYXRpb246NDAwMG1zO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gY2lyY2xle3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1mYWxsYmFjay1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBzdmd7YW5pbWF0aW9uOm1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtZmFsbGJhY2sgMTAwMDBtcyBjdWJpYy1iZXppZXIoMC44NywgMC4wMywgMC4zMywgMSkgaW5maW5pdGV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1mYWxsYmFjay1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBjaXJjbGV7dHJhbnNpdGlvbi1wcm9wZXJ0eTpzdHJva2V9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gY2lyY2xle3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX1Aa2V5ZnJhbWVzIG1hdC1wcm9ncmVzcy1zcGlubmVyLWxpbmVhci1yb3RhdGV7MCV7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0xMDAle3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLTEwMHswJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSgwKX0xMi41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgwKX0xMi41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyl9MjUle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSg3Mi41ZGVnKX0yNS4wMDAxJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTM3LjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9MzcuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKX01MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKX01MC4wMDAxJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfTYyLjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9NjIuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDI1MS41ZGVnKX03NSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDI1MS41ZGVnKX03NS4wMDAxJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9ODcuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTg3LjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgzNDEuNWRlZyl9MTAwJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtZmFsbGJhY2t7MCV7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0yNSV7dHJhbnNmb3JtOnJvdGF0ZSgxMTcwZGVnKX01MCV7dHJhbnNmb3JtOnJvdGF0ZSgyMzQwZGVnKX03NSV7dHJhbnNmb3JtOnJvdGF0ZSgzNTEwZGVnKX0xMDAle3RyYW5zZm9ybTpyb3RhdGUoNDY4MGRlZyl9fVxuIiwkMD1KSShjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9lbGVtZW50UmVmPXR9fSwicHJpbWFyeSIpLHQxPW5ldyBHYSgibWF0LXByb2dyZXNzLXNwaW5uZXItZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBlMSgpe3JldHVybntkaWFtZXRlcjoxMDB9fX0pO2NsYXNzIG4xIGV4dGVuZHMgJDB7Y29uc3RydWN0b3IodCxlLG4sbyxpKXtzdXBlcih0KSx0aGlzLl9kb2N1bWVudD1uLHRoaXMuX2RpYW1ldGVyPTEwMCx0aGlzLl92YWx1ZT0wLHRoaXMuX2ZhbGxiYWNrQW5pbWF0aW9uPSExLHRoaXMubW9kZT0iZGV0ZXJtaW5hdGUiO2NvbnN0IGE9bjEuX2RpYW1ldGVyczt0aGlzLl9zcGlubmVyQW5pbWF0aW9uTGFiZWw9dGhpcy5fZ2V0U3Bpbm5lckFuaW1hdGlvbkxhYmVsKCksYS5oYXMobi5oZWFkKXx8YS5zZXQobi5oZWFkLG5ldyBTZXQoWzEwMF0pKSx0aGlzLl9mYWxsYmFja0FuaW1hdGlvbj1lLkVER0V8fGUuVFJJREVOVCx0aGlzLl9ub29wQW5pbWF0aW9ucz0iTm9vcEFuaW1hdGlvbnMiPT09byYmISFpJiYhaS5fZm9yY2VBbmltYXRpb25zLGkmJihpLmRpYW1ldGVyJiYodGhpcy5kaWFtZXRlcj1pLmRpYW1ldGVyKSxpLnN0cm9rZVdpZHRoJiYodGhpcy5zdHJva2VXaWR0aD1pLnN0cm9rZVdpZHRoKSl9Z2V0IGRpYW1ldGVyKCl7cmV0dXJuIHRoaXMuX2RpYW1ldGVyfXNldCBkaWFtZXRlcih0KXt0aGlzLl9kaWFtZXRlcj1feih0KSx0aGlzLl9zcGlubmVyQW5pbWF0aW9uTGFiZWw9dGhpcy5fZ2V0U3Bpbm5lckFuaW1hdGlvbkxhYmVsKCksIXRoaXMuX2ZhbGxiYWNrQW5pbWF0aW9uJiZ0aGlzLl9zdHlsZVJvb3QmJnRoaXMuX2F0dGFjaFN0eWxlTm9kZSgpfWdldCBzdHJva2VXaWR0aCgpe3JldHVybiB0aGlzLl9zdHJva2VXaWR0aHx8dGhpcy5kaWFtZXRlci8xMH1zZXQgc3Ryb2tlV2lkdGgodCl7dGhpcy5fc3Ryb2tlV2lkdGg9X3oodCl9Z2V0IHZhbHVlKCl7cmV0dXJuImRldGVybWluYXRlIj09PXRoaXMubW9kZT90aGlzLl92YWx1ZTowfXNldCB2YWx1ZSh0KXt0aGlzLl92YWx1ZT1NYXRoLm1heCgwLE1hdGgubWluKDEwMCxfeih0KSkpfW5nT25Jbml0KCl7Y29uc3QgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fc3R5bGVSb290PUh6KHQpfHx0aGlzLl9kb2N1bWVudC5oZWFkLHRoaXMuX2F0dGFjaFN0eWxlTm9kZSgpLHQuY2xhc3NMaXN0LmFkZChgbWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZSR7dGhpcy5fZmFsbGJhY2tBbmltYXRpb24/Ii1mYWxsYmFjayI6IiJ9LWFuaW1hdGlvbmApfV9nZXRDaXJjbGVSYWRpdXMoKXtyZXR1cm4odGhpcy5kaWFtZXRlci0xMCkvMn1fZ2V0Vmlld0JveCgpe2NvbnN0IHQ9Mip0aGlzLl9nZXRDaXJjbGVSYWRpdXMoKSt0aGlzLnN0cm9rZVdpZHRoO3JldHVybmAwIDAgJHt0fSAke3R9YH1fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpe3JldHVybiAyKk1hdGguUEkqdGhpcy5fZ2V0Q2lyY2xlUmFkaXVzKCl9X2dldFN0cm9rZURhc2hPZmZzZXQoKXtyZXR1cm4iZGV0ZXJtaW5hdGUiPT09dGhpcy5tb2RlP3RoaXMuX2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKSooMTAwLXRoaXMuX3ZhbHVlKS8xMDA6dGhpcy5fZmFsbGJhY2tBbmltYXRpb24mJiJpbmRldGVybWluYXRlIj09PXRoaXMubW9kZT8uMip0aGlzLl9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCk6bnVsbH1fZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKXtyZXR1cm4gdGhpcy5zdHJva2VXaWR0aC90aGlzLmRpYW1ldGVyKjEwMH1fYXR0YWNoU3R5bGVOb2RlKCl7Y29uc3QgdD10aGlzLl9zdHlsZVJvb3QsZT10aGlzLl9kaWFtZXRlcixuPW4xLl9kaWFtZXRlcnM7bGV0IG89bi5nZXQodCk7aWYoIW98fCFvLmhhcyhlKSl7Y29uc3QgaT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kuc2V0QXR0cmlidXRlKCJtYXQtc3Bpbm5lci1hbmltYXRpb24iLHRoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbCksaS50ZXh0Q29udGVudD10aGlzLl9nZXRBbmltYXRpb25UZXh0KCksdC5hcHBlbmRDaGlsZChpKSxvfHwobz1uZXcgU2V0LG4uc2V0KHQsbykpLG8uYWRkKGUpfX1fZ2V0QW5pbWF0aW9uVGV4dCgpe2NvbnN0IHQ9dGhpcy5fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpO3JldHVybiJcbiBAa2V5ZnJhbWVzIG1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtRElBTUVURVIge1xuICAgIDAlICAgICAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZSgwKTsgfVxuICAgIDEyLjUlICAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwKTsgfVxuICAgIDEyLjUwMDElICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSg3Mi41ZGVnKTsgfVxuICAgIDI1JSAgICAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyk7IH1cblxuICAgIDI1LjAwMDElICAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOyB9XG4gICAgMzcuNSUgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7IH1cbiAgICAzNy41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMTYxLjVkZWcpOyB9XG4gICAgNTAlICAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyk7IH1cblxuICAgIDUwLjAwMDElICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7IH1cbiAgICA2Mi41JSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTsgfVxuICAgIDYyLjUwMDElICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyk7IH1cbiAgICA3NSUgICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDI1MS41ZGVnKTsgfVxuXG4gICAgNzUuMDAwMSUgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOyB9XG4gICAgODcuNSUgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsgfVxuICAgIDg3LjUwMDElICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgzNDEuNWRlZyk7IH1cbiAgICAxMDAlICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDM0MS41ZGVnKTsgfVxuICB9XG4iLnJlcGxhY2UoL1NUQVJUX1ZBTFVFL2csIiIrLjk1KnQpLnJlcGxhY2UoL0VORF9WQUxVRS9nLCIiKy4yKnQpLnJlcGxhY2UoL0RJQU1FVEVSL2csYCR7dGhpcy5fc3Bpbm5lckFuaW1hdGlvbkxhYmVsfWApfV9nZXRTcGlubmVyQW5pbWF0aW9uTGFiZWwoKXtyZXR1cm4gdGhpcy5kaWFtZXRlci50b1N0cmluZygpLnJlcGxhY2UoIi4iLCJfIil9fW4xLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxuMSkoU20oaGcpLFNtKHd6KSxTbShaXyw4KSxTbShWUCw4KSxTbSh0MSkpfSxuMS7JtWNtcD10byh7dHlwZTpuMSxzZWxlY3RvcnM6W1sibWF0LXByb2dyZXNzLXNwaW5uZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsInByb2dyZXNzYmFyIiwidGFiaW5kZXgiLCItMSIsMSwibWF0LXByb2dyZXNzLXNwaW5uZXIiXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmKGpwKCJhcmlhLXZhbHVlbWluIiwiZGV0ZXJtaW5hdGUiPT09bi5tb2RlPzA6bnVsbCkoImFyaWEtdmFsdWVtYXgiLCJkZXRlcm1pbmF0ZSI9PT1uLm1vZGU/MTAwOm51bGwpKCJhcmlhLXZhbHVlbm93IiwiZGV0ZXJtaW5hdGUiPT09bi5tb2RlP24udmFsdWU6bnVsbCkoIm1vZGUiLG4ubW9kZSksZHUoIndpZHRoIixuLmRpYW1ldGVyLCJweCIpKCJoZWlnaHQiLG4uZGlhbWV0ZXIsInB4IikscHUoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixuLl9ub29wQW5pbWF0aW9ucykpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsbW9kZToibW9kZSIsZGlhbWV0ZXI6ImRpYW1ldGVyIixzdHJva2VXaWR0aDoic3Ryb2tlV2lkdGgiLHZhbHVlOiJ2YWx1ZSJ9LGV4cG9ydEFzOlsibWF0UHJvZ3Jlc3NTcGlubmVyIl0sZmVhdHVyZXM6W3hwXSxkZWNsczozLHZhcnM6OCxjb25zdHM6W1sicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiLCJmb2N1c2FibGUiLCJmYWxzZSIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMywibmdTd2l0Y2giXSxbImN4IiwiNTAlIiwiY3kiLCI1MCUiLDMsImFuaW1hdGlvbi1uYW1lIiwic3Ryb2tlLWRhc2hvZmZzZXQiLCJzdHJva2UtZGFzaGFycmF5Iiwic3Ryb2tlLXdpZHRoIiw0LCJuZ1N3aXRjaENhc2UiXSxbImN4IiwiNTAlIiwiY3kiLCI1MCUiLDMsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS13aWR0aCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjeCIsIjUwJSIsImN5IiwiNTAlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihxaSgpLFJtKDAsInN2ZyIsMCksUXAoMSxaMCwxLDksImNpcmNsZSIsMSksUXAoMixYMCwxLDcsImNpcmNsZSIsMiksQW0oKSksMiZlJiYoZHUoIndpZHRoIixuLmRpYW1ldGVyLCJweCIpKCJoZWlnaHQiLG4uZGlhbWV0ZXIsInB4IiksRG0oIm5nU3dpdGNoIiwiaW5kZXRlcm1pbmF0ZSI9PT1uLm1vZGUpLGpwKCJ2aWV3Qm94IixuLl9nZXRWaWV3Qm94KCkpLHJjKDEpLERtKCJuZ1N3aXRjaENhc2UiLCEwKSxyYygxKSxEbSgibmdTd2l0Y2hDYXNlIiwhMSkpfSxkaXJlY3RpdmVzOltmTSxnTV0sc3R5bGVzOltRMF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbjEuX2RpYW1ldGVycz1uZXcgV2Vha01hcCxuMS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTp3en0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltaX119XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltWUF19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W3QxXX1dfV0sbjEucHJvcERlY29yYXRvcnM9e2RpYW1ldGVyOlt7dHlwZTp4eX1dLHN0cm9rZVdpZHRoOlt7dHlwZTp4eX1dLG1vZGU6W3t0eXBlOnh5fV0sdmFsdWU6W3t0eXBlOnh5fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgobjEsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWF0LXByb2dyZXNzLXNwaW5uZXIiLGV4cG9ydEFzOiJtYXRQcm9ncmVzc1NwaW5uZXIiLGhvc3Q6e3JvbGU6InByb2dyZXNzYmFyIixjbGFzczoibWF0LXByb2dyZXNzLXNwaW5uZXIiLHRhYmluZGV4OiItMSIsIltjbGFzcy5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZV0iOiJfbm9vcEFuaW1hdGlvbnMiLCJbc3R5bGUud2lkdGgucHhdIjoiZGlhbWV0ZXIiLCJbc3R5bGUuaGVpZ2h0LnB4XSI6ImRpYW1ldGVyIiwiW2F0dHIuYXJpYS12YWx1ZW1pbl0iOidtb2RlID09PSAiZGV0ZXJtaW5hdGUiID8gMCA6IG51bGwnLCJbYXR0ci5hcmlhLXZhbHVlbWF4XSI6J21vZGUgPT09ICJkZXRlcm1pbmF0ZSIgPyAxMDAgOiBudWxsJywiW2F0dHIuYXJpYS12YWx1ZW5vd10iOidtb2RlID09PSAiZGV0ZXJtaW5hdGUiID8gdmFsdWUgOiBudWxsJywiW2F0dHIubW9kZV0iOiJtb2RlIn0saW5wdXRzOlsiY29sb3IiXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBwcmVzZXJ2ZUFzcGVjdFJhdGlvIG9mIHhNaWRZTWlkIG1lZXQgYXMgdGhlIGNlbnRlciBvZiB0aGUgdmlld3BvcnQgaXMgdGhlIGNpcmNsZVwnc1xuICBjZW50ZXIuIFRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZSB3aWxsIHJlbWFpbiBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxuICBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIFNWRy4gYGZvY3VzYWJsZT0iZmFsc2UiYCBwcmV2ZW50cyBJRSBmcm9tIGFsbG93aW5nIHRoZSB1c2VyIHRvXG4gIHRhYiBpbnRvIHRoZSBTVkcgZWxlbWVudC5cbi0tXHgzZVxuXHgzYyEtLVxuICBBbGwgY2hpbGRyZW4gbmVlZCB0byBiZSBoaWRkZW4gZm9yIHNjcmVlbiByZWFkZXJzIGluIG9yZGVyIHRvIHN1cHBvcnQgQ2hyb21lVm94LlxuICBNb3JlIGNvbnRleHQgaW4gdGhlIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy8yMjE2NS5cbi0tXHgzZVxuPHN2Z1xuICBbc3R5bGUud2lkdGgucHhdPSJkaWFtZXRlciJcbiAgW3N0eWxlLmhlaWdodC5weF09ImRpYW1ldGVyIlxuICBbYXR0ci52aWV3Qm94XT0iX2dldFZpZXdCb3goKSJcbiAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgZm9jdXNhYmxlPSJmYWxzZSJcbiAgW25nU3dpdGNoXT0ibW9kZSA9PT0gXCdpbmRldGVybWluYXRlXCciXG4gIGFyaWEtaGlkZGVuPSJ0cnVlIj5cblxuICBceDNjIS0tXG4gICAgVGVjaG5pY2FsbHkgd2UgY2FuIHJldXNlIHRoZSBzYW1lIGBjaXJjbGVgIGVsZW1lbnQsIGhvd2V2ZXIgU2FmYXJpIGhhcyBhbiBpc3N1ZSB0aGF0IGJyZWFrc1xuICAgIHRoZSBTVkcgcmVuZGVyaW5nIGluIGRldGVybWluYXRlIG1vZGUsIGFmdGVyIHN3aXRjaGluZyBiZXR3ZWVuIGluZGV0ZXJtaW5hdGUgYW5kIGRldGVybWluYXRlLlxuICAgIFVzaW5nIGEgZGlmZmVyZW50IGVsZW1lbnQgYXZvaWRzIHRoZSBpc3N1ZS4gQW4gYWx0ZXJuYXRpdmUgdG8gdGhpcyBpcyBhZGRpbmcgYGRpc3BsYXk6IG5vbmVgXG4gICAgZm9yIGEgc3BsaXQgc2Vjb25kIGFuZCB0aGVuIHJlbW92aW5nIGl0IHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gbW9kZXMsIGJ1dCBpdFwncyBoYXJkIHRvIGtub3dcbiAgICBmb3IgaG93IGxvbmcgdG8gaGlkZSB0aGUgZWxlbWVudCBhbmQgaXQgY2FuIGNhdXNlIHRoZSBVSSB0byBibGluay5cbiAgLS1ceDNlXG4gIDxjaXJjbGVcbiAgICAqbmdTd2l0Y2hDYXNlPSJ0cnVlIlxuICAgIGN4PSI1MCUiXG4gICAgY3k9IjUwJSJcbiAgICBbYXR0ci5yXT0iX2dldENpcmNsZVJhZGl1cygpIlxuICAgIFtzdHlsZS5hbmltYXRpb24tbmFtZV09IlwnbWF0LXByb2dyZXNzLXNwaW5uZXItc3Ryb2tlLXJvdGF0ZS1cJyArIF9zcGlubmVyQW5pbWF0aW9uTGFiZWwiXG4gICAgW3N0eWxlLnN0cm9rZS1kYXNob2Zmc2V0LnB4XT0iX2dldFN0cm9rZURhc2hPZmZzZXQoKSJcbiAgICBbc3R5bGUuc3Ryb2tlLWRhc2hhcnJheS5weF09Il9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCkiXG4gICAgW3N0eWxlLnN0cm9rZS13aWR0aC4lXT0iX2dldENpcmNsZVN0cm9rZVdpZHRoKCkiPjwvY2lyY2xlPlxuXG4gIDxjaXJjbGVcbiAgICAqbmdTd2l0Y2hDYXNlPSJmYWxzZSJcbiAgICBjeD0iNTAlIlxuICAgIGN5PSI1MCUiXG4gICAgW2F0dHIucl09Il9nZXRDaXJjbGVSYWRpdXMoKSJcbiAgICBbc3R5bGUuc3Ryb2tlLWRhc2hvZmZzZXQucHhdPSJfZ2V0U3Ryb2tlRGFzaE9mZnNldCgpIlxuICAgIFtzdHlsZS5zdHJva2UtZGFzaGFycmF5LnB4XT0iX2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKSJcbiAgICBbc3R5bGUuc3Ryb2tlLXdpZHRoLiVdPSJfZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKSI+PC9jaXJjbGU+XG48L3N2Zz5cbicsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaCxlbmNhcHN1bGF0aW9uOkhuLk5vbmUsc3R5bGVzOlsiLm1hdC1wcm9ncmVzcy1zcGlubmVye2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBzdmd7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpO3RvcDowO2xlZnQ6MDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGV7ZmlsbDp0cmFuc3BhcmVudDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnN0cm9rZS1kYXNob2Zmc2V0IDIyNW1zIGxpbmVhcn0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xle3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2U6Q2FudmFzVGV4dH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBzdmd7YW5pbWF0aW9uOm1hdC1wcm9ncmVzcy1zcGlubmVyLWxpbmVhci1yb3RhdGUgMjAwMG1zIGxpbmVhciBpbmZpbml0ZX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBzdmd7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWFuaW1hdGlvblttb2RlPWluZGV0ZXJtaW5hdGVdIGNpcmNsZXt0cmFuc2l0aW9uLXByb3BlcnR5OnN0cm9rZTthbmltYXRpb24tZHVyYXRpb246NDAwMG1zO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gY2lyY2xle3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1mYWxsYmFjay1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBzdmd7YW5pbWF0aW9uOm1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtZmFsbGJhY2sgMTAwMDBtcyBjdWJpYy1iZXppZXIoMC44NywgMC4wMywgMC4zMywgMSkgaW5maW5pdGV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1mYWxsYmFjay1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBjaXJjbGV7dHJhbnNpdGlvbi1wcm9wZXJ0eTpzdHJva2V9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gY2lyY2xle3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX1Aa2V5ZnJhbWVzIG1hdC1wcm9ncmVzcy1zcGlubmVyLWxpbmVhci1yb3RhdGV7MCV7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0xMDAle3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLTEwMHswJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSgwKX0xMi41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgwKX0xMi41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyl9MjUle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSg3Mi41ZGVnKX0yNS4wMDAxJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTM3LjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9MzcuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKX01MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKX01MC4wMDAxJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfTYyLjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9NjIuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDI1MS41ZGVnKX03NSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDI1MS41ZGVnKX03NS4wMDAxJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9ODcuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTg3LjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgzNDEuNWRlZyl9MTAwJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtZmFsbGJhY2t7MCV7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0yNSV7dHJhbnNmb3JtOnJvdGF0ZSgxMTcwZGVnKX01MCV7dHJhbnNmb3JtOnJvdGF0ZSgyMzQwZGVnKX03NSV7dHJhbnNmb3JtOnJvdGF0ZSgzNTEwZGVnKX0xMDAle3RyYW5zZm9ybTpyb3RhdGUoNDY4MGRlZyl9fVxuIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpoZ30se3R5cGU6d3p9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbWl9dfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbVlBdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOlt0MV19XX1dfSkse21vZGU6W3t0eXBlOnh5fV0sZGlhbWV0ZXI6W3t0eXBlOnh5fV0sc3Ryb2tlV2lkdGg6W3t0eXBlOnh5fV0sdmFsdWU6W3t0eXBlOnh5fV19KTtjbGFzcyBvMSBleHRlbmRzIG4xe2NvbnN0cnVjdG9yKHQsZSxuLG8saSl7c3VwZXIodCxlLG4sbyxpKSx0aGlzLm1vZGU9ImluZGV0ZXJtaW5hdGUifX1vMS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bzEpKFNtKGhnKSxTbSh3eiksU20oWl8sOCksU20oVlAsOCksU20odDEpKX0sbzEuybVjbXA9dG8oe3R5cGU6bzEsc2VsZWN0b3JzOltbIm1hdC1zcGlubmVyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJwcm9ncmVzc2JhciIsIm1vZGUiLCJpbmRldGVybWluYXRlIiwxLCJtYXQtc3Bpbm5lciIsIm1hdC1wcm9ncmVzcy1zcGlubmVyIl0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmKGR1KCJ3aWR0aCIsbi5kaWFtZXRlciwicHgiKSgiaGVpZ2h0IixuLmRpYW1ldGVyLCJweCIpLHB1KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsbi5fbm9vcEFuaW1hdGlvbnMpKX0saW5wdXRzOntjb2xvcjoiY29sb3IifSxmZWF0dXJlczpbeHBdLGRlY2xzOjMsdmFyczo4LGNvbnN0czpbWyJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQgbWVldCIsImZvY3VzYWJsZSIsImZhbHNlIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwzLCJuZ1N3aXRjaCJdLFsiY3giLCI1MCUiLCJjeSIsIjUwJSIsMywiYW5pbWF0aW9uLW5hbWUiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2Utd2lkdGgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY3giLCI1MCUiLCJjeSIsIjUwJSIsMywic3Ryb2tlLWRhc2hvZmZzZXQiLCJzdHJva2UtZGFzaGFycmF5Iiwic3Ryb2tlLXdpZHRoIiw0LCJuZ1N3aXRjaENhc2UiXSxbImN4IiwiNTAlIiwiY3kiLCI1MCUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHFpKCksUm0oMCwic3ZnIiwwKSxRcCgxLEswLDEsOSwiY2lyY2xlIiwxKSxRcCgyLEowLDEsNywiY2lyY2xlIiwyKSxBbSgpKSwyJmUmJihkdSgid2lkdGgiLG4uZGlhbWV0ZXIsInB4IikoImhlaWdodCIsbi5kaWFtZXRlciwicHgiKSxEbSgibmdTd2l0Y2giLCJpbmRldGVybWluYXRlIj09PW4ubW9kZSksanAoInZpZXdCb3giLG4uX2dldFZpZXdCb3goKSkscmMoMSksRG0oIm5nU3dpdGNoQ2FzZSIsITApLHJjKDEpLERtKCJuZ1N3aXRjaENhc2UiLCExKSl9LGRpcmVjdGl2ZXM6W2ZNLGdNXSxzdHlsZXM6W1EwXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxvMS5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTp3en0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltaX119XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltWUF19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W3QxXX1dfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChvMSxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJtYXQtc3Bpbm5lciIsaG9zdDp7cm9sZToicHJvZ3Jlc3NiYXIiLG1vZGU6ImluZGV0ZXJtaW5hdGUiLGNsYXNzOiJtYXQtc3Bpbm5lciBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciIsIltjbGFzcy5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZV0iOiJfbm9vcEFuaW1hdGlvbnMiLCJbc3R5bGUud2lkdGgucHhdIjoiZGlhbWV0ZXIiLCJbc3R5bGUuaGVpZ2h0LnB4XSI6ImRpYW1ldGVyIn0saW5wdXRzOlsiY29sb3IiXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBwcmVzZXJ2ZUFzcGVjdFJhdGlvIG9mIHhNaWRZTWlkIG1lZXQgYXMgdGhlIGNlbnRlciBvZiB0aGUgdmlld3BvcnQgaXMgdGhlIGNpcmNsZVwnc1xuICBjZW50ZXIuIFRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZSB3aWxsIHJlbWFpbiBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxuICBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIFNWRy4gYGZvY3VzYWJsZT0iZmFsc2UiYCBwcmV2ZW50cyBJRSBmcm9tIGFsbG93aW5nIHRoZSB1c2VyIHRvXG4gIHRhYiBpbnRvIHRoZSBTVkcgZWxlbWVudC5cbi0tXHgzZVxuXHgzYyEtLVxuICBBbGwgY2hpbGRyZW4gbmVlZCB0byBiZSBoaWRkZW4gZm9yIHNjcmVlbiByZWFkZXJzIGluIG9yZGVyIHRvIHN1cHBvcnQgQ2hyb21lVm94LlxuICBNb3JlIGNvbnRleHQgaW4gdGhlIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy8yMjE2NS5cbi0tXHgzZVxuPHN2Z1xuICBbc3R5bGUud2lkdGgucHhdPSJkaWFtZXRlciJcbiAgW3N0eWxlLmhlaWdodC5weF09ImRpYW1ldGVyIlxuICBbYXR0ci52aWV3Qm94XT0iX2dldFZpZXdCb3goKSJcbiAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgZm9jdXNhYmxlPSJmYWxzZSJcbiAgW25nU3dpdGNoXT0ibW9kZSA9PT0gXCdpbmRldGVybWluYXRlXCciXG4gIGFyaWEtaGlkZGVuPSJ0cnVlIj5cblxuICBceDNjIS0tXG4gICAgVGVjaG5pY2FsbHkgd2UgY2FuIHJldXNlIHRoZSBzYW1lIGBjaXJjbGVgIGVsZW1lbnQsIGhvd2V2ZXIgU2FmYXJpIGhhcyBhbiBpc3N1ZSB0aGF0IGJyZWFrc1xuICAgIHRoZSBTVkcgcmVuZGVyaW5nIGluIGRldGVybWluYXRlIG1vZGUsIGFmdGVyIHN3aXRjaGluZyBiZXR3ZWVuIGluZGV0ZXJtaW5hdGUgYW5kIGRldGVybWluYXRlLlxuICAgIFVzaW5nIGEgZGlmZmVyZW50IGVsZW1lbnQgYXZvaWRzIHRoZSBpc3N1ZS4gQW4gYWx0ZXJuYXRpdmUgdG8gdGhpcyBpcyBhZGRpbmcgYGRpc3BsYXk6IG5vbmVgXG4gICAgZm9yIGEgc3BsaXQgc2Vjb25kIGFuZCB0aGVuIHJlbW92aW5nIGl0IHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gbW9kZXMsIGJ1dCBpdFwncyBoYXJkIHRvIGtub3dcbiAgICBmb3IgaG93IGxvbmcgdG8gaGlkZSB0aGUgZWxlbWVudCBhbmQgaXQgY2FuIGNhdXNlIHRoZSBVSSB0byBibGluay5cbiAgLS1ceDNlXG4gIDxjaXJjbGVcbiAgICAqbmdTd2l0Y2hDYXNlPSJ0cnVlIlxuICAgIGN4PSI1MCUiXG4gICAgY3k9IjUwJSJcbiAgICBbYXR0ci5yXT0iX2dldENpcmNsZVJhZGl1cygpIlxuICAgIFtzdHlsZS5hbmltYXRpb24tbmFtZV09IlwnbWF0LXByb2dyZXNzLXNwaW5uZXItc3Ryb2tlLXJvdGF0ZS1cJyArIF9zcGlubmVyQW5pbWF0aW9uTGFiZWwiXG4gICAgW3N0eWxlLnN0cm9rZS1kYXNob2Zmc2V0LnB4XT0iX2dldFN0cm9rZURhc2hPZmZzZXQoKSJcbiAgICBbc3R5bGUuc3Ryb2tlLWRhc2hhcnJheS5weF09Il9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCkiXG4gICAgW3N0eWxlLnN0cm9rZS13aWR0aC4lXT0iX2dldENpcmNsZVN0cm9rZVdpZHRoKCkiPjwvY2lyY2xlPlxuXG4gIDxjaXJjbGVcbiAgICAqbmdTd2l0Y2hDYXNlPSJmYWxzZSJcbiAgICBjeD0iNTAlIlxuICAgIGN5PSI1MCUiXG4gICAgW2F0dHIucl09Il9nZXRDaXJjbGVSYWRpdXMoKSJcbiAgICBbc3R5bGUuc3Ryb2tlLWRhc2hvZmZzZXQucHhdPSJfZ2V0U3Ryb2tlRGFzaE9mZnNldCgpIlxuICAgIFtzdHlsZS5zdHJva2UtZGFzaGFycmF5LnB4XT0iX2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKSJcbiAgICBbc3R5bGUuc3Ryb2tlLXdpZHRoLiVdPSJfZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKSI+PC9jaXJjbGU+XG48L3N2Zz5cbicsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaCxlbmNhcHN1bGF0aW9uOkhuLk5vbmUsc3R5bGVzOlsiLm1hdC1wcm9ncmVzcy1zcGlubmVye2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBzdmd7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpO3RvcDowO2xlZnQ6MDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGV7ZmlsbDp0cmFuc3BhcmVudDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnN0cm9rZS1kYXNob2Zmc2V0IDIyNW1zIGxpbmVhcn0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xle3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2U6Q2FudmFzVGV4dH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBzdmd7YW5pbWF0aW9uOm1hdC1wcm9ncmVzcy1zcGlubmVyLWxpbmVhci1yb3RhdGUgMjAwMG1zIGxpbmVhciBpbmZpbml0ZX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBzdmd7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWFuaW1hdGlvblttb2RlPWluZGV0ZXJtaW5hdGVdIGNpcmNsZXt0cmFuc2l0aW9uLXByb3BlcnR5OnN0cm9rZTthbmltYXRpb24tZHVyYXRpb246NDAwMG1zO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gY2lyY2xle3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1mYWxsYmFjay1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBzdmd7YW5pbWF0aW9uOm1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtZmFsbGJhY2sgMTAwMDBtcyBjdWJpYy1iZXppZXIoMC44NywgMC4wMywgMC4zMywgMSkgaW5maW5pdGV9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXByb2dyZXNzLXNwaW5uZXItaW5kZXRlcm1pbmF0ZS1mYWxsYmFjay1hbmltYXRpb25bbW9kZT1pbmRldGVybWluYXRlXSBjaXJjbGV7dHJhbnNpdGlvbi1wcm9wZXJ0eTpzdHJva2V9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtZmFsbGJhY2stYW5pbWF0aW9uW21vZGU9aW5kZXRlcm1pbmF0ZV0gY2lyY2xle3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX1Aa2V5ZnJhbWVzIG1hdC1wcm9ncmVzcy1zcGlubmVyLWxpbmVhci1yb3RhdGV7MCV7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0xMDAle3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLTEwMHswJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSgwKX0xMi41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgwKX0xMi41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyl9MjUle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSg3Mi41ZGVnKX0yNS4wMDAxJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTM3LjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9MzcuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKX01MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKX01MC4wMDAxJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfTYyLjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9NjIuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDI1MS41ZGVnKX03NSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDI1MS41ZGVnKX03NS4wMDAxJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9ODcuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTg3LjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgzNDEuNWRlZyl9MTAwJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtZmFsbGJhY2t7MCV7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0yNSV7dHJhbnNmb3JtOnJvdGF0ZSgxMTcwZGVnKX01MCV7dHJhbnNmb3JtOnJvdGF0ZSgyMzQwZGVnKX03NSV7dHJhbnNmb3JtOnJvdGF0ZSgzNTEwZGVnKX0xMDAle3RyYW5zZm9ybTpyb3RhdGUoNDY4MGRlZyl9fVxuIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpoZ30se3R5cGU6d3p9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbWl9dfV19LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbVlBdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOlt0MV19XX1dfSksbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBpMXt9aTEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGkxKX0saTEuybVtb2Q9YW8oe3R5cGU6aTF9KSxpMS7JtWluaj12bih7aW1wb3J0czpbW1hJLFdNXSxYSV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGkxLFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbWEksV01dLGV4cG9ydHM6W24xLG8xLFhJXSxkZWNsYXJhdGlvbnM6W24xLG8xXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKGkxLHtkZWNsYXJhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm5bbjEsbzFdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1hJLFdNXX0sZXhwb3J0czpmdW5jdGlvbigpe3JldHVybltuMSxvMSxYSV19fSk7Y29uc3QgYTE9WyJyZWdleFN0cmluZ0lucHV0Il07ZnVuY3Rpb24gcjEodCxlKXtpZigxJnQmJihObSgwKSxSbSgxLCJsaSIsMjIpLGt1KDIpLEFtKCksem0oKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0O3JjKDEpLERtKCJ0aXRsZSIsdC5uYW1lKSxyYygxKSxTdSh0Lm5hbWUpfX1mdW5jdGlvbiBzMSh0LGUpe2lmKDEmdCYmKFJtKDAsImxpIiwyMyksUm0oMSwiZW0iKSxrdSgyKSxBaCgzLCJudW1iZXIiKSxBbSgpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgpLiRpbXBsaWNpdDtyYygyKSxEdSgiYW5kICIsVGgoMywxLHQucnVucy5sZW5ndGgtNSksIiBtb3JlIil9fWZ1bmN0aW9uIGwxKHQsZSl7MSZ0JiYoUm0oMCwibGkiLDI0KSxSbSgxLCJlbSIpLGt1KDIsIk5vIHJ1bnMgYXJlIGluIHRoZSBncm91cCIpLEFtKCksQW0oKSl9Y29uc3QgYzE9ZnVuY3Rpb24odCl7cmV0dXJue2JvcmRlckNvbG9yOnR9fSxkMT1mdW5jdGlvbih0KXtyZXR1cm57YmFja2dyb3VuZENvbG9yOnR9fTtmdW5jdGlvbiBwMSh0LGUpe2lmKDEmdCYmKFJtKDAsInVsIiwxNiksUm0oMSwibGkiKSxSbSgyLCJsYWJlbCIpLFRtKDMsInNwYW4iLDE3KSxSbSg0LCJjb2RlIiwxOCksa3UoNSksQW0oKSxBbSgpLFJtKDYsInVsIiksUXAoNyxyMSwzLDIsIm5nLWNvbnRhaW5lciIsMTkpLEFoKDgsInNsaWNlIiksUXAoOSxzMSw0LDMsImxpIiwyMCksUXAoMTAsbDEsMywwLCJsaSIsMjEpLEFtKCksQW0oKSxBbSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7RG0oIm5nU3R5bGUiLE1oKDExLGMxLHQuY29sb3IpKSxyYygzKSxEbSgibmdTdHlsZSIsTWgoMTMsZDEsdC5jb2xvcikpLHJjKDEpLERtKCJ0aXRsZSIsdC5ncm91cElkKSxyYygxKSxTdSh0Lmdyb3VwSWQpLHJjKDIpLERtKCJuZ0Zvck9mIix6aCg4LDcsdC5ydW5zLDAsNSkpLHJjKDIpLERtKCJuZ0lmIix0LnJ1bnMubGVuZ3RoPjUpLHJjKDEpLERtKCJuZ0lmIiwwPT09dC5ydW5zLmxlbmd0aCl9fWZ1bmN0aW9uIG0xKHQsZSl7aWYoMSZ0JiYoUm0oMCwiZGl2IiwxNCksUXAoMSxwMSwxMSwxNSwidWwiLDE1KSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oMik7cmMoMSksRG0oIm5nRm9yT2YiLHQuY29sb3JSdW5QYWlyTGlzdCl9fWZ1bmN0aW9uIHUxKHQsZSl7aWYoMSZ0JiYoUm0oMCwiZGl2IiwyNSksa3UoMSwiIFRoZXJlIGFyZSBubyBydW5zIG1hdGNoaW5nIHRoZSByZWdleCwgIiksUm0oMiwiY29kZSIpLGt1KDMpLEFtKCksa3UoNCwiLiBQbGVhc2UgY2hlY2sgaWYgeW91ciByZWdleCBzdHJpbmcgaXMgY29ycmVjdC4gIiksQW0oKSksMiZ0KXtjb25zdCB0PVltKDIpO3JjKDMpLER1KCIvIix0LnJlZ2V4U3RyaW5nLCIvIil9fWZ1bmN0aW9uIGYxKHQsZSl7aWYoMSZ0JiYoUm0oMCwiZGl2IiwxMCksUm0oMSwiaDQiKSxrdSgyLCJDb2xvciBncm91cCBwcmV2aWV3IiksQW0oKSxSbSgzLCJkaXYiLDExKSxRcCg0LG0xLDIsMSwiZGl2IiwxMiksUXAoNSx1MSw1LDEsIm5nLXRlbXBsYXRlIixudWxsLDEzLGliKSxBbSgpLEFtKCkpLDImdCl7Y29uc3QgdD0kcCg2KSxlPVltKCk7cmMoNCksRG0oIm5nSWYiLGUuY29sb3JSdW5QYWlyTGlzdC5sZW5ndGgpKCJuZ0lmRWxzZSIsdCl9fWNsYXNzIGcxe2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5kaWFsb2dSZWY9dCx0aGlzLmhvc3RFbFJlZj1lLHRoaXMub25TYXZlPW5ldyBMaCx0aGlzLnJlZ2V4SW5wdXRPbkNoYW5nZT1uZXcgTGgsdGhpcy50aW1lT3V0SWQ9MH1yZXNldEZvY3VzKCl7dGhpcy5ob3N0RWxSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8dGhpcy5yZWdleFN0cmluZ0lucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1vbkVudGVyKHQpe3RoaXMub25TYXZlQ2xpY2sodCksdGhpcy5kaWFsb2dSZWYuY2xvc2UoKX1vblNhdmVDbGljayh0KXt0aGlzLm9uU2F2ZS5lbWl0KHQpfWZpbGxFeGFtcGxlKHQpe3RoaXMucmVnZXhTdHJpbmc9dCx0aGlzLnJlZ2V4SW5wdXRDaGFuZ2UodCl9cmVnZXhJbnB1dENoYW5nZSh0KXt0aGlzLnJlZ2V4SW5wdXRPbkNoYW5nZS5lbWl0KHQpfWhhbmRsZUZvY3VzT3V0KCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZU91dElkKSx0aGlzLnRpbWVPdXRJZD1zZXRUaW1lb3V0KHRoaXMucmVzZXRGb2N1cy5iaW5kKHRoaXMpLDApfX1nMS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZzEpKFNtKFhHKSxTbShoZykpfSxnMS7JtWNtcD10byh7dHlwZTpnMSxzZWxlY3RvcnM6W1sicmVnZXgtZWRpdC1kaWFsb2ctY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiZRaChhMSw3KSwyJmUpe2xldCB0O0poKHQ9dGIoKSkmJihuLnJlZ2V4U3RyaW5nSW5wdXQ9dC5maXJzdCl9fSxpbnB1dHM6e3JlZ2V4U3RyaW5nOiJyZWdleFN0cmluZyIsY29sb3JSdW5QYWlyTGlzdDoiY29sb3JSdW5QYWlyTGlzdCJ9LG91dHB1dHM6e29uU2F2ZToib25TYXZlIixyZWdleElucHV0T25DaGFuZ2U6InJlZ2V4SW5wdXRPbkNoYW5nZSJ9LGRlY2xzOjMwLHZhcnM6Mixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiQ29sb3IgUnVucyBieSBSZWdleCBRdWVyeSIpOiRsb2NhbGl6ZWA6Q29sb3IgUnVucyBieSBSZWdleCBRdWVyeeKQnzE1ZWQ5ZjZmZDJkNDkwNmE0ODAzZmMxMjU1ZGUzYzVkYjJjNTY1MzDikJ85MDg4OTg1MTEzOTYwMzEyODA4OkNvbG9yIFJ1bnMgYnkgUmVnZXggUXVlcnlgLFtbMSwicmVnZXgtZWRpdC1kaWFsb2ciLDMsImZvY3Vzb3V0Il0sWyJtYXQtZGlhbG9nLXRpdGxlIiwiIl0sWyJtYXRJbnB1dCIsIiIsImFyaWEtbGFiZWwiLHQsImNka0ZvY3VzSW5pdGlhbCIsIiIsMywidmFsdWUiLCJrZXlkb3duLmVudGVyIiwiaW5wdXQiXSxbInJlZ2V4U3RyaW5nSW5wdXQiLCIiXSxbMSwiZXhhbXBsZS1kZXRhaWxzIl0sWzMsImNsaWNrIl0sWyJjbGFzcyIsImdyb3VwLWNvbnRhaW5lciIsNCwibmdJZiJdLFsibWF0LWRpYWxvZy1hY3Rpb25zIiwiIiwiYWxpZ24iLCJlbmQiXSxbIm1hdC1idXR0b24iLCIiLCJtYXQtZGlhbG9nLWNsb3NlIiwiIl0sWyJtYXQtcmFpc2VkLWJ1dHRvbiIsIiIsImNvbG9yIiwicHJpbWFyeSIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiLDMsImNsaWNrIl0sWzEsImdyb3VwLWNvbnRhaW5lciJdLFsxLCJncm91cGluZy1wcmV2aWV3Il0sWyJjbGFzcyIsIm1hdGNoLWNvbnRhaW5lciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJlbXB0eSIsIiJdLFsxLCJtYXRjaC1jb250YWluZXIiXSxbImNsYXNzIiwiZ3JvdXAiLDMsIm5nU3R5bGUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJncm91cCIsMywibmdTdHlsZSJdLFsxLCJjb2xvci1zd2F0Y2giLDMsIm5nU3R5bGUiXSxbMSwiZ3JvdXAtaWQiLDMsInRpdGxlIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJtb3JlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLW1hdGNoIiw0LCJuZ0lmIl0sWzMsInRpdGxlIl0sWzEsIm1vcmUiXSxbMSwibm8tbWF0Y2giXSxbMSwid2FybmluZyJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSl7Y29uc3QgdD1IbSgpO1JtKDAsImRpdiIsMCksVm0oImZvY3Vzb3V0IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLmhhbmRsZUZvY3VzT3V0KCl9KSksUm0oMSwiaDEiLDEpLGt1KDIsIkNvbG9yIHJ1bnMgYnkgcmVnZXgiKSxBbSgpLFJtKDMsIm1hdC1kaWFsb2ctY29udGVudCIpLFJtKDQsInAiKSxrdSg1LCJFbnRlciBhIHJlZ2V4IHdpdGggY2FwdHVyaW5nIGdyb3VwcyB0byBtYXRjaCBhZ2FpbnN0IHJ1biBuYW1lczoiKSxBbSgpLFJtKDYsIm1hdC1mb3JtLWZpZWxkIiksUm0oNywiaW5wdXQiLDIsMyksVm0oImtleWRvd24uZW50ZXIiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uRW50ZXIoZS50YXJnZXQudmFsdWUpfSkpKCJpbnB1dCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ucmVnZXhJbnB1dENoYW5nZShlLnRhcmdldC52YWx1ZSl9KSksQW0oKSxBbSgpLEFtKCksUm0oOSwiZGl2Iiw0KSxSbSgxMCwicCIpLGt1KDExLCcgRWFjaCBtYXRjaGluZyBydW4gd2lsbCBiZSBhc3NpZ25lZCBhIGNvbG9yIGJhc2VkIG9uIHRoZSAia2V5IiBmb3JtZWQgYnkgaXRzIG1hdGNoZXMgdG8gdGhlIGNhcHR1cmluZyBncm91cHMuICcpLFRtKDEyLCJiciIpLFJtKDEzLCJidXR0b24iLDUpLFZtKCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5maWxsRXhhbXBsZSgiKHRyYWlufGV2YWwpIil9KSksa3UoMTQsIiBUcnkgIiksUm0oMTUsImNvZGUiKSxrdSgxNiwiKHRyYWlufGV2YWwpIiksQW0oKSxBbSgpLGt1KDE3LCIgdG8gYXNzaWduIGFsbCBydW5zIGNvbnRhaW5pbmcgIiksUm0oMTgsImNvZGUiKSxrdSgxOSwidHJhaW4iKSxBbSgpLGt1KDIwLCIgdG8gb25lIGNvbG9yIGFuZCBhbGwgcnVucyBjb250YWluaW5nICIpLFJtKDIxLCJjb2RlIiksa3UoMjIsImV2YWwiKSxBbSgpLGt1KDIzLCIgdG8gYW5vdGhlciBjb2xvci4gIiksQW0oKSxBbSgpLFFwKDI0LGYxLDcsMiwiZGl2Iiw2KSxSbSgyNSwiZGl2Iiw3KSxSbSgyNiwiYnV0dG9uIiw4KSxrdSgyNywiQ2FuY2VsIiksQW0oKSxSbSgyOCwiYnV0dG9uIiw5KSxWbSgiY2xpY2siLChmdW5jdGlvbiBlKCl7aGkodCk7Y29uc3Qgbz0kcCg4KTtyZXR1cm4gbi5vblNhdmVDbGljayhvLnZhbHVlKX0pKSxrdSgyOSwiIFNhdmUgIiksQW0oKSxBbSgpLEFtKCl9MiZlJiYocmMoNyksS20oInZhbHVlIixuLnJlZ2V4U3RyaW5nKSxyYygxNyksRG0oIm5nSWYiLG4ucmVnZXhTdHJpbmcpKX0sZGlyZWN0aXZlczpbclcsc1csQVYsTFksZE0sbFcsWEgsYVcsbE0sQ01dLHBpcGVzOltVTSxGTV0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7cGFkZGluZzowO2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y29sb3I6IzE5NzZkMn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5leGFtcGxlLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNDJhNWY1fS5leGFtcGxlLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTp2aXNpdGVke2NvbG9yOiM3YjFmYTJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdOnZpc2l0ZWQsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5leGFtcGxlLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTp2aXNpdGVke2NvbG9yOiNiYTY4Yzh9Lmdyb3VwLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjEwcHggMH0uZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjEwcHh9Lmdyb3VwLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6LjllbX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Lmdyb3VwaW5nLXByZXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjttYXgtaGVpZ2h0OjUwdmg7b3ZlcmZsb3cteTphdXRvO3BhZGRpbmc6MjBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBpbmctcHJldmlld1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cGluZy1wcmV2aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Lm1hdGNoLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6ZmxleC1zdGFydDtkaXNwbGF5OmdyaWQ7ZmxleC13cmFwOndyYXA7Z2FwOjEwcHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLCBtaW5tYXgoNTAlLCAxZnIpKX0uY29sb3Itc3dhdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjUwJTtib3gtc2hhZG93OjAgMCAycHggIzAwMDtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTVweDt3aWR0aDoxNXB4fXVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaXN0LXN0eWxlLXR5cGU6bm9uZTtwYWRkaW5nOjB9bWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czozcHg7bWFyZ2luOjA7cGFkZGluZzoxMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpncmlkO2dhcDoxMHB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczptYXgtY29udGVudCBhdXRvO3BhZGRpbmc6NXB4IDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV0gICAuZ3JvdXAtaWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOTVlbTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6LjllbX0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgdWxbX25nY29udGVudC0lQ09NUCVdICAgbGlbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm1vcmVbX25nY29udGVudC0lQ09NUCVdLCAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm5vLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO21hcmdpbi10b3A6NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICAubW9yZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICAubW9yZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1tYXRjaFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tbWF0Y2hbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChnMSxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJyZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiJyZWdleF9lZGl0X2RpYWxvZy5uZy5odG1sIixzdHlsZVVybHM6WyJyZWdleF9lZGl0X2RpYWxvZ19jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlhHfSx7dHlwZTpoZ31dfSkse3JlZ2V4U3RyaW5nOlt7dHlwZTp4eX1dLGNvbG9yUnVuUGFpckxpc3Q6W3t0eXBlOnh5fV0sb25TYXZlOlt7dHlwZTpPeX1dLHJlZ2V4SW5wdXRPbkNoYW5nZTpbe3R5cGU6T3l9XSxyZWdleFN0cmluZ0lucHV0Olt7dHlwZTpaYSxhcmdzOlsicmVnZXhTdHJpbmdJbnB1dCIse3N0YXRpYzohMH1dfV19KTtjbGFzcyBoMXtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5zdG9yZT10LHRoaXMuZGlhbG9nUmVmPWUsdGhpcy50ZW50YXRpdmVSZWdleFN0cmluZyQ9bmV3IEksdGhpcy5ncm91cEJ5UmVnZXhTdHJpbmckPVF0KCgoKT0+cmUodGhpcy5zdG9yZS5zZWxlY3QoTU4pLnBpcGUoYmUoMSkpLHRoaXMudGVudGF0aXZlUmVnZXhTdHJpbmckKSkpLnBpcGUoTmUoIiIpKSx0aGlzLmNvbG9yUnVuUGFpckxpc3QkPVF0KCgoKT0+dGhpcy5ncm91cEJ5UmVnZXhTdHJpbmckLnBpcGUoZ2UoNTAwKSxjZSgodD0+e3RyeXtjb25zdCBlPW5ldyBSZWdFeHAodCk7cmV0dXJuIEJvb2xlYW4oZSl9Y2F0Y2godCl7cmV0dXJuITF9fSkpLGZlKHRoaXMuYWxsUnVucyQsdGhpcy5ydW5JZFRvRWlkJCx0aGlzLnN0b3JlLnNlbGVjdChBTiksdGhpcy5zdG9yZS5zZWxlY3QoSkQpKSxJdCgoKFt0LGUsbixvLGldKT0+e2NvbnN0IGE9bk4oe2tleTp0Ti5SRUdFWCxyZWdleFN0cmluZzp0fSxlLG4pLHI9bmV3IE1hcCxzPVtdO2Zvcihjb25zdFt0LGVdb2YgT2JqZWN0LmVudHJpZXMoYS5tYXRjaGVzKSl7bGV0IG49ci5nZXQodCk7aWYoIW4pe2NvbnN0IGU9by5jb2xvcnNbci5zaXplJW8uY29sb3JzLmxlbmd0aF07bj1pP2UuZGFya0hleDplLmxpZ2h0SGV4LHIuc2V0KHQsbil9cy5wdXNoKHtncm91cElkOnQsY29sb3I6bixydW5zOmV9KX1yZXR1cm4gc30pKSkpKS5waXBlKE5lKFtdKSksdGhpcy5leHBlcmltZW50SWRzPW4uZXhwZXJpbWVudElkcyx0aGlzLnJ1bklkVG9FaWQkPVd0KHRoaXMuZXhwZXJpbWVudElkcy5tYXAoKHQ9PnRoaXMuc3RvcmUuc2VsZWN0KGNOLHtleHBlcmltZW50SWQ6dH0pLnBpcGUoSXQoKGU9Pih7ZXhwZXJpbWVudElkOnQscnVuSWRzOmV9KSkpKSkpKS5waXBlKEl0KCh0PT57Y29uc3QgZT17fTtmb3IoY29uc3R7cnVuSWRzOm4sZXhwZXJpbWVudElkOm99b2YgdClmb3IoY29uc3QgdCBvZiBuKWVbdF09bztyZXR1cm4gZX0pKSksdGhpcy5hbGxSdW5zJD1XdCh0aGlzLmV4cGVyaW1lbnRJZHMubWFwKCh0PT50aGlzLnN0b3JlLnNlbGVjdChsTix7ZXhwZXJpbWVudElkOnR9KSkpKS5waXBlKEl0KCh0PT50LmZsYXQoKSkpKX1vblJlZ2V4SW5wdXRPbkNoYW5nZSh0KXt0aGlzLnRlbnRhdGl2ZVJlZ2V4U3RyaW5nJC5uZXh0KHQpfW9uU2F2ZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKEdSKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxncm91cEJ5OntrZXk6dE4uUkVHRVgscmVnZXhTdHJpbmc6dH19KSl9fWZ1bmN0aW9uIGIxKHQsZSl7MSZ0JiZUbSgwLCJtYXQtaWNvbiIsMTEpfWZ1bmN0aW9uIHkxKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiYnV0dG9uIiwxMCksVm0oImNsaWNrIiwoZnVuY3Rpb24gZSgpe2hpKHQpO2NvbnN0IG49WW0oKTtyZXR1cm4gbi5vbkdyb3VwQnlDaGFuZ2UuZW1pdCh7a2V5Om4uR3JvdXBCeUtleS5FWFBFUklNRU5UfSl9KSksUm0oMSwic3BhbiIpLFFwKDIsYjEsMSwwLCJtYXQtaWNvbiIsNyksQW0oKSxSbSgzLCJsYWJlbCIpLGt1KDQsIkV4cGVyaW1lbnQiKSxBbSgpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PVltKCk7anAoImFyaWEtY2hlY2tlZCIsdC5zZWxlY3RlZEdyb3VwQnkua2V5PT09dC5Hcm91cEJ5S2V5LkVYUEVSSU1FTlQpLHJjKDIpLERtKCJuZ0lmIix0LnNlbGVjdGVkR3JvdXBCeS5rZXk9PT10Lkdyb3VwQnlLZXkuRVhQRVJJTUVOVCl9fWZ1bmN0aW9uIF8xKHQsZSl7MSZ0JiZUbSgwLCJtYXQtaWNvbiIsMTEpfWZ1bmN0aW9uIEMxKHQsZSl7MSZ0JiZUbSgwLCJtYXQtaWNvbiIsMTEpfWZ1bmN0aW9uIE0xKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiYnV0dG9uIiwxMiksVm0oImNsaWNrIiwoZnVuY3Rpb24gZSgpe3JldHVybiBoaSh0KSxZbSgpLm9uR3JvdXBCeVJlZ2V4Q2xpY2soKX0pKSxSbSgxLCJzcGFuIiksUXAoMixDMSwxLDAsIm1hdC1pY29uIiw3KSxBbSgpLFJtKDMsImxhYmVsIiksa3UoNCwiUmVnZXgiKSxBbSgpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PVltKCk7anAoImFyaWEtY2hlY2tlZCIsdC5zZWxlY3RlZEdyb3VwQnkua2V5PT09dC5Hcm91cEJ5S2V5LlJFR0VYKSxyYygyKSxEbSgibmdJZiIsdC5zZWxlY3RlZEdyb3VwQnkua2V5PT09dC5Hcm91cEJ5S2V5LlJFR0VYKX19ZnVuY3Rpb24gdjEodCxlKXtpZigxJnQmJihSbSgwLCJsYWJlbCIpLGt1KDEpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgyKTtyYygxKSxTdSh0LnJlZ2V4U3RyaW5nKX19ZnVuY3Rpb24geDEodCxlKXsxJnQmJihSbSgwLCJsYWJlbCIsMTcpLGt1KDEsIihub25lIHNldCkiKSxBbSgpKX1mdW5jdGlvbiBPMSh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsImJ1dHRvbiIsMTMpLFZtKCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaGkodCksWW0oKS5vblJlZ2V4U3RyaW5nRWRpdCgpfSkpLFJtKDEsInNwYW4iKSxUbSgyLCJtYXQtaWNvbiIsMTQpLEFtKCksUXAoMyx2MSwyLDEsImxhYmVsIiwxNSksUXAoNCx4MSwyLDAsImxhYmVsIiwxNiksQW0oKX1pZigyJnQpe2NvbnN0IHQ9WW0oKTtyYygzKSxEbSgibmdJZiIsdC5yZWdleFN0cmluZykscmMoMSksRG0oIm5nSWYiLCF0LnJlZ2V4U3RyaW5nKX19aDEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGgxKShTbShJdyksU20oWEcpLFNtKEpHKSl9LGgxLsm1Y21wPXRvKHt0eXBlOmgxLHNlbGVjdG9yczpbWyJyZWdleC1lZGl0LWRpYWxvZyJdXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJyZWdleFN0cmluZyIsImNvbG9yUnVuUGFpckxpc3QiLCJvblNhdmUiLCJyZWdleElucHV0T25DaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsInJlZ2V4LWVkaXQtZGlhbG9nLWNvbXBvbmVudCIsMCksVm0oIm9uU2F2ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25TYXZlKGUpfSkpKCJyZWdleElucHV0T25DaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uUmVnZXhJbnB1dE9uQ2hhbmdlKGUpfSkpLEFoKDEsImFzeW5jIiksQWgoMiwiYXN5bmMiKSxBbSgpKSwyJmUmJkRtKCJyZWdleFN0cmluZyIsVGgoMSwyLG4uZ3JvdXBCeVJlZ2V4U3RyaW5nJCkpKCJjb2xvclJ1blBhaXJMaXN0IixUaCgyLDQsbi5jb2xvclJ1blBhaXJMaXN0JCkpfSxkaXJlY3RpdmVzOltnMV0scGlwZXM6W3dNXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdLCByZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9Il19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGgxLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InJlZ2V4LWVkaXQtZGlhbG9nIix0ZW1wbGF0ZTonPHJlZ2V4LWVkaXQtZGlhbG9nLWNvbXBvbmVudFxuICAgIFtyZWdleFN0cmluZ109Imdyb3VwQnlSZWdleFN0cmluZyQgfCBhc3luYyJcbiAgICBbY29sb3JSdW5QYWlyTGlzdF09ImNvbG9yUnVuUGFpckxpc3QkIHwgYXN5bmMiXG4gICAgKG9uU2F2ZSk9Im9uU2F2ZSgkZXZlbnQpIlxuICAgIChyZWdleElucHV0T25DaGFuZ2UpPSJvblJlZ2V4SW5wdXRPbkNoYW5nZSgkZXZlbnQpIlxuICA+PC9yZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnQ+JyxzdHlsZXM6WyJcbiAgICAgIDpob3N0LFxuICAgICAgcmVnZXgtZWRpdC1kaWFsb2ctY29tcG9uZW50IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG4gICAgIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd30se3R5cGU6WEd9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltKR119XX1dfSksbnVsbCk7Y2xhc3MgUDF7Y29uc3RydWN0b3IodCl7dGhpcy5kaWFsb2c9dCx0aGlzLkdyb3VwQnlLZXk9dE4sdGhpcy5vbkdyb3VwQnlDaGFuZ2U9bmV3IExofW9uUmVnZXhTdHJpbmdFZGl0KCl7dGhpcy5kaWFsb2cub3BlbihoMSx7bWF4SGVpZ2h0OiI5NXZoIixtYXhXaWR0aDoiODB2dyIsZGF0YTp7ZXhwZXJpbWVudElkczp0aGlzLmV4cGVyaW1lbnRJZHN9fSl9b25Hcm91cEJ5UmVnZXhDbGljaygpe3RoaXMucmVnZXhTdHJpbmc/dGhpcy5vbkdyb3VwQnlDaGFuZ2UuZW1pdCh7a2V5OnROLlJFR0VYLHJlZ2V4U3RyaW5nOnRoaXMucmVnZXhTdHJpbmd9KTp0aGlzLm9uUmVnZXhTdHJpbmdFZGl0KCl9fVAxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxQMSkoU20ob1cpKX0sUDEuybVjbXA9dG8oe3R5cGU6UDEsc2VsZWN0b3JzOltbInJ1bnMtZ3JvdXAtbWVudS1idXR0b24tY29tcG9uZW50Il1dLGlucHV0czp7c2hvd0V4cGVyaW1lbnRzR3JvdXBCeToic2hvd0V4cGVyaW1lbnRzR3JvdXBCeSIsZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIscmVnZXhTdHJpbmc6InJlZ2V4U3RyaW5nIixzZWxlY3RlZEdyb3VwQnk6InNlbGVjdGVkR3JvdXBCeSIsc2hvd0dyb3VwQnlSZWdleDoic2hvd0dyb3VwQnlSZWdleCJ9LG91dHB1dHM6e29uR3JvdXBCeUNoYW5nZToib25Hcm91cEJ5Q2hhbmdlIn0sZGVjbHM6MTQsdmFyczo2LGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0aXRsZSIsIkNvbG9yIHJ1bnMgYnkuLi4iLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIl0sWyJzdmdJY29uIiwicGFsZXR0ZV8yNHB4Il0sWzEsInJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSJdLFsiZ3JvdXBCeU1lbnUiLCJtYXRNZW51Il0sWzEsImxhYmVsIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtcmFkaW8iLCJkYXRhLXZhbHVlIiwiZXhwZXJpbWVudCIsMywiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsImRhdGEtdmFsdWUiLCJydW4iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZG9uZV8yNHB4Iiw0LCJuZ0lmIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtcmFkaW8iLCJkYXRhLXZhbHVlIiwicmVnZXgiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtIiwiZGF0YS12YWx1ZSIsInJlZ2V4LWVkaXQiLCJjbGFzcyIsImRpc3BsYXktcmVnZXgtc3RyaW5nIiwzLCJjbGljayIsNCwibmdJZiJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInJvbGUiLCJtZW51aXRlbXJhZGlvIiwiZGF0YS12YWx1ZSIsImV4cGVyaW1lbnQiLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZG9uZV8yNHB4Il0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtcmFkaW8iLCJkYXRhLXZhbHVlIiwicmVnZXgiLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtIiwiZGF0YS12YWx1ZSIsInJlZ2V4LWVkaXQiLDEsImRpc3BsYXktcmVnZXgtc3RyaW5nIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImVkaXRfMjRweCJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vbmUtc2V0LXN0cmluZyIsNCwibmdJZiJdLFsxLCJub25lLXNldC1zdHJpbmciXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsImJ1dHRvbiIsMCksVG0oMSwibWF0LWljb24iLDEpLEFtKCksUm0oMiwibWF0LW1lbnUiLDIsMyksUm0oNCwiZGl2Iiw0KSxrdSg1LCJDb2xvciBydW5zIGJ5IiksQW0oKSxRcCg2LHkxLDUsMiwiYnV0dG9uIiw1KSxSbSg3LCJidXR0b24iLDYpLFZtKCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkdyb3VwQnlDaGFuZ2UuZW1pdCh7a2V5Om4uR3JvdXBCeUtleS5SVU59KX0pKSxSbSg4LCJzcGFuIiksUXAoOSxfMSwxLDAsIm1hdC1pY29uIiw3KSxBbSgpLFJtKDEwLCJsYWJlbCIpLGt1KDExLCJSdW4iKSxBbSgpLEFtKCksUXAoMTIsTTEsNSwyLCJidXR0b24iLDgpLFFwKDEzLE8xLDUsMiwiYnV0dG9uIiw5KSxBbSgpKSwyJmUmJihEbSgibWF0TWVudVRyaWdnZXJGb3IiLCRwKDMpKSxyYyg2KSxEbSgibmdJZiIsbi5zaG93RXhwZXJpbWVudHNHcm91cEJ5KSxyYygxKSxqcCgiYXJpYS1jaGVja2VkIixuLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1uLkdyb3VwQnlLZXkuUlVOKSxyYygyKSxEbSgibmdJZiIsbi5zZWxlY3RlZEdyb3VwQnkua2V5PT09bi5Hcm91cEJ5S2V5LlJVTikscmMoMyksRG0oIm5nSWYiLG4uc2hvd0dyb3VwQnlSZWdleCkscmMoMSksRG0oIm5nSWYiLG4uc2hvd0dyb3VwQnlSZWdleCkpfSxkaXJlY3RpdmVzOltYSCxlWSxEVyxLVyxkTSxXV10sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5e2ZvbnQtc2l6ZToxNnB4fSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAubGFiZWx7Y29sb3I6IzYxNjE2MTtmb250LXNpemU6LjllbTttYXJnaW46MTBweCAwO3BhZGRpbmc6MCAxNnB4O3BvaW50ZXItZXZlbnRzOm5vbmV9ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IGJ1dHRvbntkaXNwbGF5OmdyaWQ7Z2FwOjJweCAxMHB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczoyMHB4IGF1dG99ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IG1hdC1pY29ue2hlaWdodDoyMHB4O3dpZHRoOjIwcHh9ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5kaXNwbGF5LXJlZ2V4LXN0cmluZ3twYWRkaW5nLWxlZnQ6NDBweH0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgLmRpc3BsYXktcmVnZXgtc3RyaW5nIC5ub25lLXNldC1zdHJpbmd7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAgIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgLmRpc3BsYXktcmVnZXgtc3RyaW5nIC5ub25lLXNldC1zdHJpbmcsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgICAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZ3tjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoUDEsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoicnVucy1ncm91cC1tZW51LWJ1dHRvbi1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiJydW5zX2dyb3VwX21lbnVfYnV0dG9uX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyJydW5zX2dyb3VwX21lbnVfYnV0dG9uX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6b1d9XX0pLHtzaG93RXhwZXJpbWVudHNHcm91cEJ5Olt7dHlwZTp4eX1dLGV4cGVyaW1lbnRJZHM6W3t0eXBlOnh5fV0scmVnZXhTdHJpbmc6W3t0eXBlOnh5fV0sc2VsZWN0ZWRHcm91cEJ5Olt7dHlwZTp4eX1dLHNob3dHcm91cEJ5UmVnZXg6W3t0eXBlOnh5fV0sb25Hcm91cEJ5Q2hhbmdlOlt7dHlwZTpPeX1dfSk7Y2xhc3MgdzF7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuc2hvd0dyb3VwQnlSZWdleCQ9dGhpcy5zdG9yZS5zZWxlY3QobkUpLHRoaXMuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSQ9dGhpcy5zdG9yZS5zZWxlY3QoRVMpLnBpcGUoSXQoKHQ9PnQuaGFzKFprLkNPTVBBUkVfRVhQRVJJTUVOVCkpKSksdGhpcy5zZWxlY3RlZEdyb3VwQnkkPXRoaXMuc3RvcmUuc2VsZWN0KGZOKSx0aGlzLmdyb3VwQnlSZWdleFN0cmluZyQ9dGhpcy5zdG9yZS5zZWxlY3QoTU4pfW9uR3JvdXBCeUNoYW5nZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKEdSKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxncm91cEJ5OnR9KSl9fXcxLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx3MSkoU20oSXcpKX0sdzEuybVjbXA9dG8oe3R5cGU6dzEsc2VsZWN0b3JzOltbInJ1bnMtZ3JvdXAtbWVudS1idXR0b24iXV0saW5wdXRzOntleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIn0sZGVjbHM6NSx2YXJzOjEzLGNvbnN0czpbWzMsInJlZ2V4U3RyaW5nIiwic2VsZWN0ZWRHcm91cEJ5Iiwic2hvd0dyb3VwQnlSZWdleCIsInNob3dFeHBlcmltZW50c0dyb3VwQnkiLCJleHBlcmltZW50SWRzIiwib25Hcm91cEJ5Q2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJydW5zLWdyb3VwLW1lbnUtYnV0dG9uLWNvbXBvbmVudCIsMCksVm0oIm9uR3JvdXBCeUNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25Hcm91cEJ5Q2hhbmdlKGUpfSkpLEFoKDEsImFzeW5jIiksQWgoMiwiYXN5bmMiKSxBaCgzLCJhc3luYyIpLEFoKDQsImFzeW5jIiksQW0oKSksMiZlJiZEbSgicmVnZXhTdHJpbmciLFRoKDEsNSxuLmdyb3VwQnlSZWdleFN0cmluZyQpKSgic2VsZWN0ZWRHcm91cEJ5IixUaCgyLDcsbi5zZWxlY3RlZEdyb3VwQnkkKSkoInNob3dHcm91cEJ5UmVnZXgiLFRoKDMsOSxuLnNob3dHcm91cEJ5UmVnZXgkKSkoInNob3dFeHBlcmltZW50c0dyb3VwQnkiLFRoKDQsMTEsbi5zaG93RXhwZXJpbWVudHNHcm91cEJ5JCkpKCJleHBlcmltZW50SWRzIixuLmV4cGVyaW1lbnRJZHMpfSxkaXJlY3RpdmVzOltQMV0scGlwZXM6W3dNXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHcxLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InJ1bnMtZ3JvdXAtbWVudS1idXR0b24iLHRlbXBsYXRlOidcbiAgICA8cnVucy1ncm91cC1tZW51LWJ1dHRvbi1jb21wb25lbnRcbiAgICAgIFtyZWdleFN0cmluZ109Imdyb3VwQnlSZWdleFN0cmluZyQgfCBhc3luYyJcbiAgICAgIFtzZWxlY3RlZEdyb3VwQnldPSJzZWxlY3RlZEdyb3VwQnkkIHwgYXN5bmMiXG4gICAgICBbc2hvd0dyb3VwQnlSZWdleF09InNob3dHcm91cEJ5UmVnZXgkIHwgYXN5bmMiXG4gICAgICBbc2hvd0V4cGVyaW1lbnRzR3JvdXBCeV09InNob3dFeHBlcmltZW50c0dyb3VwQnkkIHwgYXN5bmMiXG4gICAgICBbZXhwZXJpbWVudElkc109ImV4cGVyaW1lbnRJZHMiXG4gICAgICAob25Hcm91cEJ5Q2hhbmdlKT0ib25Hcm91cEJ5Q2hhbmdlKCRldmVudCkiXG4gICAgPjwvcnVucy1ncm91cC1tZW51LWJ1dHRvbi1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fV19KSx7ZXhwZXJpbWVudElkczpbe3R5cGU6eHl9XX0pO2NvbnN0IGsxPVsiY29udGFpbmVyIl07dmFyIFMxOyEoZnVuY3Rpb24odCl7dFt0Lk5PTkU9MF09Ik5PTkUiLHRbdC5MRUZUPTFdPSJMRUZUIix0W3QuUklHSFQ9Ml09IlJJR0hUIn0pKFMxfHwoUzE9e30pKTtjbGFzcyBEMXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmNoYW5nZURldGVjdG9yPXQsdGhpcy50aWNrQ291bnQ9MjAsdGhpcy52YWx1ZT1uZXcgTGgsdGhpcy5Qb3NpdGlvbj1TMSx0aGlzLmFjdGl2ZVRodW1iPVMxLk5PTkUsdGhpcy5vZmZzZXRYRnJvbU9yaWdpbk9mQWN0aXZlVGh1bWI9MCx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IEl9Z2V0VGh1bWJQb3NpdGlvbih0KXtjb25zdCBlPXRoaXMuZ2V0Q2xpcHBlZFZhbHVlKHQpLG49dGhpcy5tYXgtdGhpcy5taW47cmV0dXJuIG48PTA/IjUwJSI6KGUtdGhpcy5taW4pL24qMTAwKyIlIn1nZXRUcmFja1dpZHRoKCl7Y29uc3QgdD10aGlzLm1heC10aGlzLm1pbjtyZXR1cm4gdDw9MD8iMCUiOih0aGlzLmdldENsaXBwZWRWYWx1ZSh0aGlzLnVwcGVyVmFsdWUpLXRoaXMuZ2V0Q2xpcHBlZFZhbHVlKHRoaXMubG93ZXJWYWx1ZSkpL3QqMTAwKyIlIn1nZXRDbGlwcGVkVmFsdWUodCl7cmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHQsdGhpcy5taW4pLHRoaXMubWF4KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9bmdPbkluaXQoKXtvZShkb2N1bWVudCwibW91c2Vtb3ZlIix7cGFzc2l2ZTohMH0pLnBpcGUoSWUodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5oYW5kbGVNb3VzZU1vdmUodCl9KSksb2UoZG9jdW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShJZSh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLmhhbmRsZU1vdXNlT3V0KHQpfSkpfWhhbmRsZU1vdXNlRG93bih0LGUpe3RoaXMuYWN0aXZlVGh1bWI9ZSx0aGlzLm9mZnNldFhGcm9tT3JpZ2luT2ZBY3RpdmVUaHVtYj02LXQub2Zmc2V0WH1jYWxjdWxhdGVWYWx1ZUZyb21Nb3VzZUV2ZW50KHQpe2NvbnN0e2xlZnQ6ZSxyaWdodDpufT10aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89dC5jbGllbnRYLWUrdGhpcy5vZmZzZXRYRnJvbU9yaWdpbk9mQWN0aXZlVGh1bWI7bGV0IGk7aWYobnVsbCE9PXRoaXMudGlja0NvdW50JiZ0aGlzLnRpY2tDb3VudD4wKXtjb25zdCB0PShuLWUpL3RoaXMudGlja0NvdW50O2k9TWF0aC5yb3VuZChvL3QpKnQvKG4tZSl9ZWxzZSBpPW8vKG4tZSk7Y29uc3QgYT10aGlzLmdldENsaXBwZWRWYWx1ZSh0aGlzLm1pbisodGhpcy5tYXgtdGhpcy5taW4pKmkpO3JldHVybiBOdW1iZXIoYS50b0ZpeGVkKDEwKSl9aGFuZGxlTW91c2VNb3ZlKHQpe2lmKHRoaXMuYWN0aXZlVGh1bWI9PT1TMS5OT05FKXJldHVybjtjb25zdCBlPXRoaXMuY2FsY3VsYXRlVmFsdWVGcm9tTW91c2VFdmVudCh0KTtsZXQgbj1bdGhpcy5sb3dlclZhbHVlLHRoaXMudXBwZXJWYWx1ZV07dGhpcy5hY3RpdmVUaHVtYj09PVMxLkxFRlQ/KGU+dGhpcy51cHBlclZhbHVlJiYodGhpcy5hY3RpdmVUaHVtYj1TMS5SSUdIVCksbj1bZSx0aGlzLnVwcGVyVmFsdWVdKTooZTx0aGlzLmxvd2VyVmFsdWUmJih0aGlzLmFjdGl2ZVRodW1iPVMxLkxFRlQpLG49W3RoaXMubG93ZXJWYWx1ZSxlXSksdGhpcy5tYXliZU5vdGlmeU5leHRWYWx1ZShuKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfW1heWJlTm90aWZ5TmV4dFZhbHVlKHQpe2NvbnN0W2Usbl09dC5zb3J0KCgodCxlKT0+dC1lKSk7dGhpcy5sb3dlclZhbHVlPT09ZSYmdGhpcy51cHBlclZhbHVlPT09bnx8dGhpcy52YWx1ZS5lbWl0KHtsb3dlclZhbHVlOmUsdXBwZXJWYWx1ZTpufSl9aGFuZGxlTW91c2VPdXQodCl7dGhpcy5hY3RpdmVUaHVtYiE9PVMxLk5PTkUmJih0aGlzLmFjdGl2ZVRodW1iPVMxLk5PTkUsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9aGFuZGxlSW5wdXRDaGFuZ2UodCxlKXtjb25zdCBuPXRoaXMuZ2V0Q2xpcHBlZFZhbHVlKE51bWJlcih0LnRhcmdldC52YWx1ZSkpO2lmKGlzTmFOKG4pKXJldHVybjtsZXQgbz1bdGhpcy5sb3dlclZhbHVlLHRoaXMudXBwZXJWYWx1ZV07bz1lPT09UzEuTEVGVD9bbix0aGlzLnVwcGVyVmFsdWVdOlt0aGlzLmxvd2VyVmFsdWUsbl0sdGhpcy5tYXliZU5vdGlmeU5leHRWYWx1ZShvKX1pc1RodW1iQWN0aXZlKHQpe3JldHVybiB0aGlzLmFjdGl2ZVRodW1iPT09dH19RDEuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEQxKShTbShVZykpfSxEMS7JtWNtcD10byh7dHlwZTpEMSxzZWxlY3RvcnM6W1sidGItcmFuZ2UtaW5wdXQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJlFoKGsxLDcsaGcpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4uY29udGFpbmVyPXQuZmlyc3QpfX0saW5wdXRzOnttaW46Im1pbiIsbWF4OiJtYXgiLGxvd2VyVmFsdWU6Imxvd2VyVmFsdWUiLHVwcGVyVmFsdWU6InVwcGVyVmFsdWUiLHRpY2tDb3VudDoidGlja0NvdW50In0sb3V0cHV0czp7dmFsdWU6InZhbHVlIn0sZGVjbHM6OCx2YXJzOjE0LGNvbnN0czpbWyJ0eXBlIiwibnVtYmVyIiwxLCJsb3dlci1pbnB1dCIsMywidmFsdWUiLCJjaGFuZ2UiXSxbInR5cGUiLCJudW1iZXIiLDEsInVwcGVyLWlucHV0IiwzLCJ2YWx1ZSIsImNoYW5nZSJdLFsxLCJjb250YWluZXIiXSxbImNvbnRhaW5lciIsIiJdLFsxLCJzbGlkZXItdHJhY2siXSxbMSwic2xpZGVyLXRyYWNrLWZpbGwiXSxbMSwidGh1bWIiLDMsIm1vdXNlZG93biJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiaW5wdXQiLDApLFZtKCJjaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmhhbmRsZUlucHV0Q2hhbmdlKGUsbi5Qb3NpdGlvbi5MRUZUKX0pKSxBbSgpLFJtKDEsImlucHV0IiwxKSxWbSgiY2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5oYW5kbGVJbnB1dENoYW5nZShlLG4uUG9zaXRpb24uUklHSFQpfSkpLEFtKCksUm0oMiwic3BhbiIsMiwzKSxUbSg0LCJzcGFuIiw0KSxUbSg1LCJzcGFuIiw1KSxSbSg2LCJzcGFuIiw2KSxWbSgibW91c2Vkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5oYW5kbGVNb3VzZURvd24oZSxuLlBvc2l0aW9uLkxFRlQpfSkpLEFtKCksUm0oNywic3BhbiIsNiksVm0oIm1vdXNlZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uaGFuZGxlTW91c2VEb3duKGUsbi5Qb3NpdGlvbi5SSUdIVCl9KSksQW0oKSxBbSgpKSwyJmUmJihEbSgidmFsdWUiLG4ubG93ZXJWYWx1ZSkscmMoMSksRG0oInZhbHVlIixuLnVwcGVyVmFsdWUpLHJjKDQpLGR1KCJsZWZ0IixuLmdldFRodW1iUG9zaXRpb24obi5sb3dlclZhbHVlKSkoIndpZHRoIixuLmdldFRyYWNrV2lkdGgoKSkscmMoMSksZHUoImxlZnQiLG4uZ2V0VGh1bWJQb3NpdGlvbihuLmxvd2VyVmFsdWUpKSxwdSgiYWN0aXZlIixuLmlzVGh1bWJBY3RpdmUobi5Qb3NpdGlvbi5MRUZUKSkscmMoMSksZHUoImxlZnQiLG4uZ2V0VGh1bWJQb3NpdGlvbihuLnVwcGVyVmFsdWUpKSxwdSgiYWN0aXZlIixuLmlzVGh1bWJBY3RpdmUobi5Qb3NpdGlvbi5SSUdIVCkpKX0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtZ3JpZDtncmlkLWdhcDoxMHB4O2dyaWQtdGVtcGxhdGUtYXJlYXM6Imxvd2VyLWlucHV0IHVwcGVyLWlucHV0IiAic2xpZGVyIHNsaWRlciI7Zm9udC1zaXplOjA7bWluLXdpZHRoOjEwMHB4O3BhZGRpbmc6NnB4fWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLXN0eWxlOnNvbGlkO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlfS5sb3dlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOmxvd2VyLWlucHV0fS51cHBlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnVwcGVyLWlucHV0O2p1c3RpZnktc2VsZjpmbGV4LWVuZH0uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6c2xpZGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTJweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9LnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4yNik7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjMpfS5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjJweH0udGh1bWJbX25nY29udGVudC0lQ09NUCVde2JveC1zYWRob3c6MCAwIDAgMXB4IHJnYmEoMCwwLDAsLjI2KTtib3JkZXItcmFkaXVzOjEwMCU7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEycHg7bWFyZ2luLWxlZnQ6LTZweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZTt3aWR0aDoxMnB4O3dpbGwtY2hhbmdlOnRyYW5zZm9ybX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVde2JveC1zYWRob3c6MCAwIDAgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjMpfS50aHVtYi5hY3RpdmVbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTpzY2FsZSgxLjIpfS5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV0sIC50aHVtYltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZjU3YzAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50aHVtYltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50aHVtYltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZWY2YzAwfSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChEMSxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJ0Yi1yYW5nZS1pbnB1dCIsdGVtcGxhdGVVcmw6Ii4vcmFuZ2VfaW5wdXRfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vcmFuZ2VfaW5wdXRfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpVZ31dfSkse2NvbnRhaW5lcjpbe3R5cGU6WmEsYXJnczpbImNvbnRhaW5lciIse3N0YXRpYzohMCxyZWFkOmhnfV19XSxtaW46W3t0eXBlOnh5fV0sbWF4Olt7dHlwZTp4eX1dLGxvd2VyVmFsdWU6W3t0eXBlOnh5fV0sdXBwZXJWYWx1ZTpbe3R5cGU6eHl9XSx0aWNrQ291bnQ6W3t0eXBlOnh5fV0sdmFsdWU6W3t0eXBlOk95fV19KTtjb25zdCBFMT1bImRpYWxvZ1BvcHVwIl0sUjE9WyJodWVTbGlkZXIiXSxBMT1bImFscGhhU2xpZGVyIl07ZnVuY3Rpb24gVDEodCxlKXtpZigxJnQmJlRtKDAsImRpdiIpLDImdCl7Y29uc3QgdD1ZbSgpO0F1KCJhcnJvdyBhcnJvdy0iLHQuY3BVc2VQb3NpdGlvbiwiIiksZHUoInRvcCIsdC5hcnJvd1RvcCwicHgiKX19ZnVuY3Rpb24gTjEodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJkaXYiLDI2KSxWbSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLm9uQ29sb3JDaGFuZ2Uobil9KSkoImRyYWdTdGFydCIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaGkodCksWW0oKS5vbkRyYWdTdGFydCgic2F0dXJhdGlvbi1saWdodG5lc3MiKX0pKSgiZHJhZ0VuZCIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaGkodCksWW0oKS5vbkRyYWdFbmQoInNhdHVyYXRpb24tbGlnaHRuZXNzIil9KSksVG0oMSwiZGl2IiwxMyksQW0oKX1pZigyJnQpe2NvbnN0IHQ9WW0oKTtkdSgiYmFja2dyb3VuZC1jb2xvciIsdC5odWVTbGlkZXJDb2xvciksRG0oInJnWCIsMSkoInJnWSIsMSkscmMoMSksZHUoInRvcCIsbnVsbD09dC5zbGlkZXI/bnVsbDp0LnNsaWRlci52LCJweCIpKCJsZWZ0IixudWxsPT10LnNsaWRlcj9udWxsOnQuc2xpZGVyLnMsInB4Iil9fWZ1bmN0aW9uIHoxKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiYnV0dG9uIiwyNyksVm0oImNsaWNrIiwoZnVuY3Rpb24gZShuKXtoaSh0KTtjb25zdCBvPVltKCk7cmV0dXJuIG8ub25BZGRQcmVzZXRDb2xvcihuLG8uc2VsZWN0ZWRDb2xvcil9KSksa3UoMSksQW0oKX1pZigyJnQpe2NvbnN0IHQ9WW0oKTtmdSh0LmNwQWRkQ29sb3JCdXR0b25DbGFzcyksRG0oImRpc2FibGVkIix0LmNwUHJlc2V0Q29sb3JzJiZ0LmNwUHJlc2V0Q29sb3JzLmxlbmd0aD49dC5jcE1heFByZXNldENvbG9yc0xlbmd0aCkscmMoMSksRHUoIiAiLHQuY3BBZGRDb2xvckJ1dHRvblRleHQsIiAiKX19ZnVuY3Rpb24gSTEodCxlKXsxJnQmJlRtKDAsImRpdiIsMjgpfWZ1bmN0aW9uIEgxKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiaW5wdXQiLDM0KSxWbSgia2V5dXAuZW50ZXIiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgyKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKDIpLm9uQWxwaGFJbnB1dChuKX0pKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgyKTtEbSgicmciLDEpKCJ2YWx1ZSIsbnVsbD09dC5jbXlrVGV4dD9udWxsOnQuY215a1RleHQuYSl9fWZ1bmN0aW9uIEYxKHQsZSl7MSZ0JiYoUm0oMCwiZGl2Iiksa3UoMSwiQSIpLEFtKCkpfWZ1bmN0aW9uIEwxKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiZGl2IiwyOSksUm0oMSwiZGl2IiwzMCksUm0oMiwiaW5wdXQiLDMxKSxWbSgia2V5dXAuZW50ZXIiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLm9uQWNjZXB0Q29sb3Iobil9KSkoIm5ld1ZhbHVlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oKS5vbkN5YW5JbnB1dChuKX0pKSxBbSgpLFJtKDMsImlucHV0IiwzMSksVm0oImtleXVwLmVudGVyIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKCkub25NYWdlbnRhSW5wdXQobil9KSksQW0oKSxSbSg0LCJpbnB1dCIsMzEpLFZtKCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKCkub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLm9uWWVsbG93SW5wdXQobil9KSksQW0oKSxSbSg1LCJpbnB1dCIsMzEpLFZtKCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKCkub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLm9uQmxhY2tJbnB1dChuKX0pKSxBbSgpLFFwKDYsSDEsMSwyLCJpbnB1dCIsMzIpLEFtKCksUm0oNywiZGl2IiwzMCksUm0oOCwiZGl2Iiksa3UoOSwiQyIpLEFtKCksUm0oMTAsImRpdiIpLGt1KDExLCJNIiksQW0oKSxSbSgxMiwiZGl2Iiksa3UoMTMsIlkiKSxBbSgpLFJtKDE0LCJkaXYiKSxrdSgxNSwiSyIpLEFtKCksUXAoMTYsRjEsMiwwLCJkaXYiLDMzKSxBbSgpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PVltKCk7ZHUoImRpc3BsYXkiLDMhPT10LmZvcm1hdD8ibm9uZSI6ImJsb2NrIikscmMoMiksRG0oInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09dC5jbXlrVGV4dD9udWxsOnQuY215a1RleHQuYykscmMoMSksRG0oInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09dC5jbXlrVGV4dD9udWxsOnQuY215a1RleHQubSkscmMoMSksRG0oInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09dC5jbXlrVGV4dD9udWxsOnQuY215a1RleHQueSkscmMoMSksRG0oInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09dC5jbXlrVGV4dD9udWxsOnQuY215a1RleHQuaykscmMoMSksRG0oIm5nSWYiLCJkaXNhYmxlZCIhPT10LmNwQWxwaGFDaGFubmVsKSxyYygxMCksRG0oIm5nSWYiLCJkaXNhYmxlZCIhPT10LmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gQjEodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJpbnB1dCIsMzQpLFZtKCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKDIpLm9uQWNjZXB0Q29sb3Iobil9KSkoIm5ld1ZhbHVlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oMikub25BbHBoYUlucHV0KG4pfSkpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PVltKDIpO0RtKCJyZyIsMSkoInZhbHVlIixudWxsPT10LmhzbGFUZXh0P251bGw6dC5oc2xhVGV4dC5hKX19ZnVuY3Rpb24gVjEodCxlKXsxJnQmJihSbSgwLCJkaXYiKSxrdSgxLCJBIiksQW0oKSl9ZnVuY3Rpb24gajEodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJkaXYiLDM1KSxSbSgxLCJkaXYiLDMwKSxSbSgyLCJpbnB1dCIsMzYpLFZtKCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKCkub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLm9uSHVlSW5wdXQobil9KSksQW0oKSxSbSgzLCJpbnB1dCIsMzEpLFZtKCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKCkub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLm9uU2F0dXJhdGlvbklucHV0KG4pfSkpLEFtKCksUm0oNCwiaW5wdXQiLDMxKSxWbSgia2V5dXAuZW50ZXIiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLm9uQWNjZXB0Q29sb3Iobil9KSkoIm5ld1ZhbHVlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oKS5vbkxpZ2h0bmVzc0lucHV0KG4pfSkpLEFtKCksUXAoNSxCMSwxLDIsImlucHV0IiwzMiksQW0oKSxSbSg2LCJkaXYiLDMwKSxSbSg3LCJkaXYiKSxrdSg4LCJIIiksQW0oKSxSbSg5LCJkaXYiKSxrdSgxMCwiUyIpLEFtKCksUm0oMTEsImRpdiIpLGt1KDEyLCJMIiksQW0oKSxRcCgxMyxWMSwyLDAsImRpdiIsMzMpLEFtKCksQW0oKX1pZigyJnQpe2NvbnN0IHQ9WW0oKTtkdSgiZGlzcGxheSIsMiE9PXQuZm9ybWF0PyJub25lIjoiYmxvY2siKSxyYygyKSxEbSgicmciLDM2MCkoInZhbHVlIixudWxsPT10LmhzbGFUZXh0P251bGw6dC5oc2xhVGV4dC5oKSxyYygxKSxEbSgicmciLDEwMCkoInZhbHVlIixudWxsPT10LmhzbGFUZXh0P251bGw6dC5oc2xhVGV4dC5zKSxyYygxKSxEbSgicmciLDEwMCkoInZhbHVlIixudWxsPT10LmhzbGFUZXh0P251bGw6dC5oc2xhVGV4dC5sKSxyYygxKSxEbSgibmdJZiIsImRpc2FibGVkIiE9PXQuY3BBbHBoYUNoYW5uZWwpLHJjKDgpLERtKCJuZ0lmIiwiZGlzYWJsZWQiIT09dC5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIFUxKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiaW5wdXQiLDM0KSxWbSgia2V5dXAuZW50ZXIiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgyKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKDIpLm9uQWxwaGFJbnB1dChuKX0pKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgyKTtEbSgicmciLDEpKCJ2YWx1ZSIsbnVsbD09dC5yZ2JhVGV4dD9udWxsOnQucmdiYVRleHQuYSl9fWZ1bmN0aW9uIEcxKHQsZSl7MSZ0JiYoUm0oMCwiZGl2Iiksa3UoMSwiQSIpLEFtKCkpfWZ1bmN0aW9uIFcxKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiZGl2IiwzNyksUm0oMSwiZGl2IiwzMCksUm0oMiwiaW5wdXQiLDM4KSxWbSgia2V5dXAuZW50ZXIiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLm9uQWNjZXB0Q29sb3Iobil9KSkoIm5ld1ZhbHVlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oKS5vblJlZElucHV0KG4pfSkpLEFtKCksUm0oMywiaW5wdXQiLDM4KSxWbSgia2V5dXAuZW50ZXIiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLm9uQWNjZXB0Q29sb3Iobil9KSkoIm5ld1ZhbHVlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oKS5vbkdyZWVuSW5wdXQobil9KSksQW0oKSxSbSg0LCJpbnB1dCIsMzgpLFZtKCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKCkub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLm9uQmx1ZUlucHV0KG4pfSkpLEFtKCksUXAoNSxVMSwxLDIsImlucHV0IiwzMiksQW0oKSxSbSg2LCJkaXYiLDMwKSxSbSg3LCJkaXYiKSxrdSg4LCJSIiksQW0oKSxSbSg5LCJkaXYiKSxrdSgxMCwiRyIpLEFtKCksUm0oMTEsImRpdiIpLGt1KDEyLCJCIiksQW0oKSxRcCgxMyxHMSwyLDAsImRpdiIsMzMpLEFtKCksQW0oKX1pZigyJnQpe2NvbnN0IHQ9WW0oKTtkdSgiZGlzcGxheSIsMSE9PXQuZm9ybWF0PyJub25lIjoiYmxvY2siKSxyYygyKSxEbSgicmciLDI1NSkoInZhbHVlIixudWxsPT10LnJnYmFUZXh0P251bGw6dC5yZ2JhVGV4dC5yKSxyYygxKSxEbSgicmciLDI1NSkoInZhbHVlIixudWxsPT10LnJnYmFUZXh0P251bGw6dC5yZ2JhVGV4dC5nKSxyYygxKSxEbSgicmciLDI1NSkoInZhbHVlIixudWxsPT10LnJnYmFUZXh0P251bGw6dC5yZ2JhVGV4dC5iKSxyYygxKSxEbSgibmdJZiIsImRpc2FibGVkIiE9PXQuY3BBbHBoYUNoYW5uZWwpLHJjKDgpLERtKCJuZ0lmIiwiZGlzYWJsZWQiIT09dC5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIFkxKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiaW5wdXQiLDM0KSxWbSgia2V5dXAuZW50ZXIiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgyKS5vbkFjY2VwdENvbG9yKG4pfSkpKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKDIpLm9uQWxwaGFJbnB1dChuKX0pKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgyKTtEbSgicmciLDEpKCJ2YWx1ZSIsdC5oZXhBbHBoYSl9fWZ1bmN0aW9uIHExKHQsZSl7MSZ0JiYoUm0oMCwiZGl2Iiksa3UoMSwiQSIpLEFtKCkpfWZ1bmN0aW9uIFoxKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiZGl2IiwzOSksUm0oMSwiZGl2IiwzMCksUm0oMiwiaW5wdXQiLDQwKSxWbSgiYmx1ciIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaGkodCksWW0oKS5vbkhleElucHV0KG51bGwpfSkpKCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKCkub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLm9uSGV4SW5wdXQobil9KSksQW0oKSxRcCgzLFkxLDEsMiwiaW5wdXQiLDMyKSxBbSgpLFJtKDQsImRpdiIsMzApLFJtKDUsImRpdiIpLGt1KDYsIkhleCIpLEFtKCksUXAoNyxxMSwyLDAsImRpdiIsMzMpLEFtKCksQW0oKX1pZigyJnQpe2NvbnN0IHQ9WW0oKTtkdSgiZGlzcGxheSIsMCE9PXQuZm9ybWF0PyJub25lIjoiYmxvY2siKSxwdSgiaGV4LWFscGhhIiwiZm9yY2VkIj09PXQuY3BBbHBoYUNoYW5uZWwpLHJjKDIpLERtKCJ2YWx1ZSIsdC5oZXhUZXh0KSxyYygxKSxEbSgibmdJZiIsImZvcmNlZCI9PT10LmNwQWxwaGFDaGFubmVsKSxyYyg0KSxEbSgibmdJZiIsImZvcmNlZCI9PT10LmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gWDEodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJpbnB1dCIsMzQpLFZtKCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKDIpLm9uQWNjZXB0Q29sb3Iobil9KSkoIm5ld1ZhbHVlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oMikub25BbHBoYUlucHV0KG4pfSkpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PVltKDIpO0RtKCJyZyIsMSkoInZhbHVlIixudWxsPT10LmhzbGFUZXh0P251bGw6dC5oc2xhVGV4dC5hKX19ZnVuY3Rpb24gSzEodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJkaXYiLDQxKSxSbSgxLCJkaXYiLDMwKSxSbSgyLCJpbnB1dCIsMzEpLFZtKCJrZXl1cC5lbnRlciIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKCkub25BY2NlcHRDb2xvcihuKX0pKSgibmV3VmFsdWUiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLm9uVmFsdWVJbnB1dChuKX0pKSxBbSgpLFFwKDMsWDEsMSwyLCJpbnB1dCIsMzIpLEFtKCksUm0oNCwiZGl2IiwzMCksUm0oNSwiZGl2Iiksa3UoNiwiViIpLEFtKCksUm0oNywiZGl2Iiksa3UoOCwiQSIpLEFtKCksQW0oKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgpO3JjKDIpLERtKCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PXQuaHNsYVRleHQ/bnVsbDp0LmhzbGFUZXh0LmwpLHJjKDEpLERtKCJuZ0lmIiwiZGlzYWJsZWQiIT09dC5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIEoxKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiZGl2Iiw0MiksUm0oMSwic3BhbiIsNDMpLFZtKCJjbGljayIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaGkodCksWW0oKS5vbkZvcm1hdFRvZ2dsZSgtMSl9KSksQW0oKSxSbSgyLCJzcGFuIiw0MyksVm0oImNsaWNrIiwoZnVuY3Rpb24gZSgpe3JldHVybiBoaSh0KSxZbSgpLm9uRm9ybWF0VG9nZ2xlKDEpfSkpLEFtKCksQW0oKX19ZnVuY3Rpb24gUTEodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJzcGFuIiw1MCksVm0oImNsaWNrIiwoZnVuY3Rpb24gZShuKXtoaSh0KTtjb25zdCBvPVltKCkuJGltcGxpY2l0O3JldHVybiBZbSgzKS5vblJlbW92ZVByZXNldENvbG9yKG4sbyl9KSksQW0oKX0yJnQmJmZ1KFltKDQpLmNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcyl9ZnVuY3Rpb24gJDEodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJkaXYiLDQ4KSxWbSgiY2xpY2siLChmdW5jdGlvbiBlKCl7Y29uc3Qgbj1oaSh0KS4kaW1wbGljaXQ7cmV0dXJuIFltKDMpLnNldENvbG9yRnJvbVN0cmluZyhuKX0pKSxRcCgxLFExLDEsMywic3BhbiIsNDkpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49WW0oMyk7ZHUoImJhY2tncm91bmQtY29sb3IiLHQpLHJjKDEpLERtKCJuZ0lmIixuLmNwQWRkQ29sb3JCdXR0b24pfX1mdW5jdGlvbiB0Myh0LGUpe2lmKDEmdCYmKFJtKDAsImRpdiIpLFFwKDEsJDEsMiwzLCJkaXYiLDQ3KSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oMik7ZnUodC5jcFByZXNldENvbG9yc0NsYXNzKSxyYygxKSxEbSgibmdGb3JPZiIsdC5jcFByZXNldENvbG9ycyl9fWZ1bmN0aW9uIGUzKHQsZSl7aWYoMSZ0JiYoUm0oMCwiZGl2Iiksa3UoMSksQW0oKSksMiZ0KXtjb25zdCB0PVltKDIpO2Z1KHQuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcykscmMoMSksU3UodC5jcFByZXNldEVtcHR5TWVzc2FnZSl9fWZ1bmN0aW9uIG4zKHQsZSl7aWYoMSZ0JiYoUm0oMCwiZGl2Iiw0NCksVG0oMSwiaHIiKSxSbSgyLCJkaXYiLDQ1KSxrdSgzKSxBbSgpLFFwKDQsdDMsMiw0LCJkaXYiLDQ2KSxRcCg1LGUzLDIsNCwiZGl2Iiw0NiksQW0oKSksMiZ0KXtjb25zdCB0PVltKCk7cmMoMyksU3UodC5jcFByZXNldExhYmVsKSxyYygxKSxEbSgibmdJZiIsbnVsbD09dC5jcFByZXNldENvbG9ycz9udWxsOnQuY3BQcmVzZXRDb2xvcnMubGVuZ3RoKSxyYygxKSxEbSgibmdJZiIsIShudWxsIT10LmNwUHJlc2V0Q29sb3JzJiZ0LmNwUHJlc2V0Q29sb3JzLmxlbmd0aCkmJnQuY3BBZGRDb2xvckJ1dHRvbil9fWZ1bmN0aW9uIG8zKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiYnV0dG9uIiw1MyksVm0oImNsaWNrIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oMikub25DYW5jZWxDb2xvcihuKX0pKSxrdSgxKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgyKTtmdSh0LmNwQ2FuY2VsQnV0dG9uQ2xhc3MpLHJjKDEpLFN1KHQuY3BDYW5jZWxCdXR0b25UZXh0KX19ZnVuY3Rpb24gaTModCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJidXR0b24iLDUzKSxWbSgiY2xpY2siLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgyKS5vbkFjY2VwdENvbG9yKG4pfSkpLGt1KDEpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PVltKDIpO2Z1KHQuY3BPS0J1dHRvbkNsYXNzKSxyYygxKSxTdSh0LmNwT0tCdXR0b25UZXh0KX19ZnVuY3Rpb24gYTModCxlKXtpZigxJnQmJihSbSgwLCJkaXYiLDUxKSxRcCgxLG8zLDIsNCwiYnV0dG9uIiw1MiksUXAoMixpMywyLDQsImJ1dHRvbiIsNTIpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgpO3JjKDEpLERtKCJuZ0lmIix0LmNwQ2FuY2VsQnV0dG9uKSxyYygxKSxEbSgibmdJZiIsdC5jcE9LQnV0dG9uKX19dmFyIHIzOyEoZnVuY3Rpb24odCl7dFt0LkhFWD0wXT0iSEVYIix0W3QuUkdCQT0xXT0iUkdCQSIsdFt0LkhTTEE9Ml09IkhTTEEiLHRbdC5DTVlLPTNdPSJDTVlLIn0pKHIzfHwocjM9e30pKTtjbGFzcyBzM3tjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9bix0aGlzLmE9b319Y2xhc3MgbDN7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5oPXQsdGhpcy5zPWUsdGhpcy52PW4sdGhpcy5hPW99fWNsYXNzIGMze2NvbnN0cnVjdG9yKHQsZSxuLG8pe3RoaXMuaD10LHRoaXMucz1lLHRoaXMubD1uLHRoaXMuYT1vfX1jbGFzcyBkM3tjb25zdHJ1Y3Rvcih0LGUsbixvLGk9MSl7dGhpcy5jPXQsdGhpcy5tPWUsdGhpcy55PW4sdGhpcy5rPW8sdGhpcy5hPWl9fWNsYXNzIHAze2NvbnN0cnVjdG9yKCl7dGhpcy5uZXdWYWx1ZT1uZXcgTGh9aW5wdXRDaGFuZ2UodCl7Y29uc3QgZT10LnRhcmdldC52YWx1ZTtpZih2b2lkIDA9PT10aGlzLnJnKXRoaXMubmV3VmFsdWUuZW1pdChlKTtlbHNle2NvbnN0IHQ9cGFyc2VGbG9hdChlKTt0aGlzLm5ld1ZhbHVlLmVtaXQoe3Y6dCxyZzp0aGlzLnJnfSl9fX1wMy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cDMpfSxwMy7JtWRpcj1sbyh7dHlwZTpwMyxzZWxlY3RvcnM6W1siIiwidGV4dCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmVm0oImlucHV0IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5pbnB1dENoYW5nZShlKX0pKX0saW5wdXRzOntyZzoicmciLHRleHQ6InRleHQifSxvdXRwdXRzOntuZXdWYWx1ZToibmV3VmFsdWUifX0pLHAzLnByb3BEZWNvcmF0b3JzPXtyZzpbe3R5cGU6eHl9XSx0ZXh0Olt7dHlwZTp4eX1dLG5ld1ZhbHVlOlt7dHlwZTpPeX1dLGlucHV0Q2hhbmdlOlt7dHlwZTp3eSxhcmdzOlsiaW5wdXQiLFsiJGV2ZW50Il1dfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgocDMsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW3RleHRdIn1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSx7bmV3VmFsdWU6W3t0eXBlOk95fV0saW5wdXRDaGFuZ2U6W3t0eXBlOnd5LGFyZ3M6WyJpbnB1dCIsWyIkZXZlbnQiXV19XSxyZzpbe3R5cGU6eHl9XSx0ZXh0Olt7dHlwZTp4eX1dfSk7Y2xhc3MgbTN7Y29uc3RydWN0b3IodCl7dGhpcy5lbFJlZj10LHRoaXMuZHJhZ0VuZD1uZXcgTGgsdGhpcy5kcmFnU3RhcnQ9bmV3IExoLHRoaXMubmV3VmFsdWU9bmV3IExoLHRoaXMubGlzdGVuZXJNb3ZlPXQ9PnRoaXMubW92ZSh0KSx0aGlzLmxpc3RlbmVyU3RvcD0oKT0+dGhpcy5zdG9wKCl9bW91c2VEb3duKHQpe3RoaXMuc3RhcnQodCl9dG91Y2hTdGFydCh0KXt0aGlzLnN0YXJ0KHQpfW1vdmUodCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2V0Q3Vyc29yKHQpfXN0YXJ0KHQpe3RoaXMuc2V0Q3Vyc29yKHQpLHQuc3RvcFByb3BhZ2F0aW9uKCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5saXN0ZW5lclN0b3ApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLmxpc3RlbmVyU3RvcCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLmxpc3RlbmVyTW92ZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLmxpc3RlbmVyTW92ZSksdGhpcy5kcmFnU3RhcnQuZW1pdCgpfXN0b3AoKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmxpc3RlbmVyU3RvcCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSx0aGlzLmRyYWdFbmQuZW1pdCgpfWdldFgodCl7Y29uc3QgZT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuKHZvaWQgMCE9PXQucGFnZVg/dC5wYWdlWDp0LnRvdWNoZXNbMF0ucGFnZVgpLWUubGVmdC13aW5kb3cucGFnZVhPZmZzZXR9Z2V0WSh0KXtjb25zdCBlPXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4odm9pZCAwIT09dC5wYWdlWT90LnBhZ2VZOnQudG91Y2hlc1swXS5wYWdlWSktZS50b3Atd2luZG93LnBhZ2VZT2Zmc2V0fXNldEN1cnNvcih0KXtjb25zdCBlPXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCxuPXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQsbz1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuZ2V0WCh0KSxlKSksaT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuZ2V0WSh0KSxuKSk7dm9pZCAwIT09dGhpcy5yZ1gmJnZvaWQgMCE9PXRoaXMucmdZP3RoaXMubmV3VmFsdWUuZW1pdCh7czpvL2UsdjoxLWkvbixyZ1g6dGhpcy5yZ1gscmdZOnRoaXMucmdZfSk6dm9pZCAwPT09dGhpcy5yZ1gmJnZvaWQgMCE9PXRoaXMucmdZP3RoaXMubmV3VmFsdWUuZW1pdCh7djppL24scmdZOnRoaXMucmdZfSk6dm9pZCAwIT09dGhpcy5yZ1gmJnZvaWQgMD09PXRoaXMucmdZJiZ0aGlzLm5ld1ZhbHVlLmVtaXQoe3Y6by9lLHJnWDp0aGlzLnJnWH0pfX1tMy7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bTMpKFNtKGhnKSl9LG0zLsm1ZGlyPWxvKHt0eXBlOm0zLHNlbGVjdG9yczpbWyIiLCJzbGlkZXIiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJlZtKCJtb3VzZWRvd24iLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm1vdXNlRG93bihlKX0pKSgidG91Y2hzdGFydCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4udG91Y2hTdGFydChlKX0pKX0saW5wdXRzOntyZ1g6InJnWCIscmdZOiJyZ1kiLHNsaWRlcjoic2xpZGVyIn0sb3V0cHV0czp7ZHJhZ0VuZDoiZHJhZ0VuZCIsZHJhZ1N0YXJ0OiJkcmFnU3RhcnQiLG5ld1ZhbHVlOiJuZXdWYWx1ZSJ9fSksbTMuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpoZ31dLG0zLnByb3BEZWNvcmF0b3JzPXtyZ1g6W3t0eXBlOnh5fV0scmdZOlt7dHlwZTp4eX1dLHNsaWRlcjpbe3R5cGU6eHl9XSxkcmFnRW5kOlt7dHlwZTpPeX1dLGRyYWdTdGFydDpbe3R5cGU6T3l9XSxuZXdWYWx1ZTpbe3R5cGU6T3l9XSxtb3VzZURvd246W3t0eXBlOnd5LGFyZ3M6WyJtb3VzZWRvd24iLFsiJGV2ZW50Il1dfV0sdG91Y2hTdGFydDpbe3R5cGU6d3ksYXJnczpbInRvdWNoc3RhcnQiLFsiJGV2ZW50Il1dfV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgobTMsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW3NsaWRlcl0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9XX0pLHtkcmFnRW5kOlt7dHlwZTpPeX1dLGRyYWdTdGFydDpbe3R5cGU6T3l9XSxuZXdWYWx1ZTpbe3R5cGU6T3l9XSxtb3VzZURvd246W3t0eXBlOnd5LGFyZ3M6WyJtb3VzZWRvd24iLFsiJGV2ZW50Il1dfV0sdG91Y2hTdGFydDpbe3R5cGU6d3ksYXJnczpbInRvdWNoc3RhcnQiLFsiJGV2ZW50Il1dfV0scmdYOlt7dHlwZTp4eX1dLHJnWTpbe3R5cGU6eHl9XSxzbGlkZXI6W3t0eXBlOnh5fV19KTtjbGFzcyB1M3tjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLmg9dCx0aGlzLnM9ZSx0aGlzLnY9bix0aGlzLmE9b319Y2xhc3MgZjN7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5oPXQsdGhpcy5zPWUsdGhpcy52PW4sdGhpcy5hPW99fWNsYXNzIGcze2NvbnN0cnVjdG9yKCl7dGhpcy5hY3RpdmU9bnVsbH1zZXRBY3RpdmUodCl7dGhpcy5hY3RpdmUmJnRoaXMuYWN0aXZlIT09dCYmImlubGluZSIhPT10aGlzLmFjdGl2ZS5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMuYWN0aXZlLmNsb3NlRGlhbG9nKCksdGhpcy5hY3RpdmU9dH1oc3ZhMmhzbGEodCl7Y29uc3QgZT10Lmgsbj10LnMsbz10LnYsaT10LmE7aWYoMD09PW8pcmV0dXJuIG5ldyBjMyhlLDAsMCxpKTtpZigwPT09biYmMT09PW8pcmV0dXJuIG5ldyBjMyhlLDEsMSxpKTt7Y29uc3QgdD1vKigyLW4pLzI7cmV0dXJuIG5ldyBjMyhlLG8qbi8oMS1NYXRoLmFicygyKnQtMSkpLHQsaSl9fWhzbGEyaHN2YSh0KXtjb25zdCBlPU1hdGgubWluKHQuaCwxKSxuPU1hdGgubWluKHQucywxKSxvPU1hdGgubWluKHQubCwxKSxpPU1hdGgubWluKHQuYSwxKTtpZigwPT09bylyZXR1cm4gbmV3IGwzKGUsMCwwLGkpO3tjb25zdCB0PW8rbiooMS1NYXRoLmFicygyKm8tMSkpLzI7cmV0dXJuIG5ldyBsMyhlLDIqKHQtbykvdCx0LGkpfX1oc3ZhVG9SZ2JhKHQpe2xldCBlLG4sbztjb25zdCBpPXQuaCxhPXQucyxyPXQudixzPXQuYSxsPU1hdGguZmxvb3IoNippKSxjPTYqaS1sLGQ9ciooMS1hKSxwPXIqKDEtYyphKSxtPXIqKDEtKDEtYykqYSk7c3dpdGNoKGwlNil7Y2FzZSAwOmU9cixuPW0sbz1kO2JyZWFrO2Nhc2UgMTplPXAsbj1yLG89ZDticmVhaztjYXNlIDI6ZT1kLG49cixvPW07YnJlYWs7Y2FzZSAzOmU9ZCxuPXAsbz1yO2JyZWFrO2Nhc2UgNDplPW0sbj1kLG89cjticmVhaztjYXNlIDU6ZT1yLG49ZCxvPXA7YnJlYWs7ZGVmYXVsdDplPTAsbj0wLG89MH1yZXR1cm4gbmV3IHMzKGUsbixvLHMpfWNteWtUb1JnYih0KXtyZXR1cm4gbmV3IHMzKCgxLXQuYykqKDEtdC5rKSwoMS10Lm0pKigxLXQuayksKDEtdC55KSooMS10LmspLHQuYSl9cmdiYVRvQ215ayh0KXtjb25zdCBlPTEtTWF0aC5tYXgodC5yLHQuZyx0LmIpO3JldHVybiAxPT09ZT9uZXcgZDMoMCwwLDAsMSx0LmEpOm5ldyBkMygoMS10LnItZSkvKDEtZSksKDEtdC5nLWUpLygxLWUpLCgxLXQuYi1lKS8oMS1lKSxlLHQuYSl9cmdiYVRvSHN2YSh0KXtsZXQgZSxuO2NvbnN0IG89TWF0aC5taW4odC5yLDEpLGk9TWF0aC5taW4odC5nLDEpLGE9TWF0aC5taW4odC5iLDEpLHI9TWF0aC5taW4odC5hLDEpLHM9TWF0aC5tYXgobyxpLGEpLGw9TWF0aC5taW4obyxpLGEpLGM9cyxkPXMtbDtpZihuPTA9PT1zPzA6ZC9zLHM9PT1sKWU9MDtlbHNle3N3aXRjaChzKXtjYXNlIG86ZT0oaS1hKS9kKyhpPGE/NjowKTticmVhaztjYXNlIGk6ZT0oYS1vKS9kKzI7YnJlYWs7Y2FzZSBhOmU9KG8taSkvZCs0O2JyZWFrO2RlZmF1bHQ6ZT0wfWUvPTZ9cmV0dXJuIG5ldyBsMyhlLG4sYyxyKX1yZ2JhVG9IZXgodCxlKXtsZXQgbj0iIyIrKDE8PDI0fHQucjw8MTZ8dC5nPDw4fHQuYikudG9TdHJpbmcoMTYpLnN1YnN0cigxKTtyZXR1cm4gZSYmKG4rPSgyNTZ8TWF0aC5yb3VuZCgyNTUqdC5hKSkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSksbn1ub3JtYWxpemVDTVlLKHQpe3JldHVybiBuZXcgZDModC5jLzEwMCx0Lm0vMTAwLHQueS8xMDAsdC5rLzEwMCx0LmEpfWRlbm9ybWFsaXplQ01ZSyh0KXtyZXR1cm4gbmV3IGQzKE1hdGguZmxvb3IoMTAwKnQuYyksTWF0aC5mbG9vcigxMDAqdC5tKSxNYXRoLmZsb29yKDEwMCp0LnkpLE1hdGguZmxvb3IoMTAwKnQuayksdC5hKX1kZW5vcm1hbGl6ZVJHQkEodCl7cmV0dXJuIG5ldyBzMyhNYXRoLnJvdW5kKDI1NSp0LnIpLE1hdGgucm91bmQoMjU1KnQuZyksTWF0aC5yb3VuZCgyNTUqdC5iKSx0LmEpfXN0cmluZ1RvSHN2YSh0PSIiLGU9ITEpe2xldCBuPW51bGw7dD0odHx8IiIpLnRvTG93ZXJDYXNlKCk7Y29uc3Qgbz1be3JlOi8ocmdiKWE/XChccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pXHMqJT8sXHMqKFxkezEsM30pXHMqJT8oPzosXHMqKFxkKyg/OlwuXGQrKT8pXHMqKT9cKS8scGFyc2U6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzMyhwYXJzZUludCh0WzJdLDEwKS8yNTUscGFyc2VJbnQodFszXSwxMCkvMjU1LHBhcnNlSW50KHRbNF0sMTApLzI1NSxpc05hTihwYXJzZUZsb2F0KHRbNV0pKT8xOnBhcnNlRmxvYXQodFs1XSkpfX0se3JlOi8oaHNsKWE/XChccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pJVxzKixccyooXGR7MSwzfSklXHMqKD86LFxzKihcZCsoPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYzMocGFyc2VJbnQodFsyXSwxMCkvMzYwLHBhcnNlSW50KHRbM10sMTApLzEwMCxwYXJzZUludCh0WzRdLDEwKS8xMDAsaXNOYU4ocGFyc2VGbG9hdCh0WzVdKSk/MTpwYXJzZUZsb2F0KHRbNV0pKX19XTtvLnB1c2goZT97cmU6LyMoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pPyQvLHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgczMocGFyc2VJbnQodFsxXSwxNikvMjU1LHBhcnNlSW50KHRbMl0sMTYpLzI1NSxwYXJzZUludCh0WzNdLDE2KS8yNTUscGFyc2VJbnQodFs0XXx8IkZGIiwxNikvMjU1KX19OntyZTovIyhbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KSQvLHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgczMocGFyc2VJbnQodFsxXSwxNikvMjU1LHBhcnNlSW50KHRbMl0sMTYpLzI1NSxwYXJzZUludCh0WzNdLDE2KS8yNTUsMSl9fSksby5wdXNoKHtyZTovIyhbYS1mQS1GMC05XSkoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKSQvLHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgczMocGFyc2VJbnQodFsxXSt0WzFdLDE2KS8yNTUscGFyc2VJbnQodFsyXSt0WzJdLDE2KS8yNTUscGFyc2VJbnQodFszXSt0WzNdLDE2KS8yNTUsMSl9fSk7Zm9yKGNvbnN0IGUgaW4gbylpZihvLmhhc093blByb3BlcnR5KGUpKXtjb25zdCBpPW9bZV0sYT1pLnJlLmV4ZWModCkscj1hJiZpLnBhcnNlKGEpO2lmKHIpcmV0dXJuIHIgaW5zdGFuY2VvZiBzMz9uPXRoaXMucmdiYVRvSHN2YShyKTpyIGluc3RhbmNlb2YgYzMmJihuPXRoaXMuaHNsYTJoc3ZhKHIpKSxufXJldHVybiBufW91dHB1dEZvcm1hdCh0LGUsbil7c3dpdGNoKCJhdXRvIj09PWUmJihlPXQuYTwxPyJyZ2JhIjoiaGV4IiksZSl7Y2FzZSJoc2xhIjpjb25zdCBlPXRoaXMuaHN2YTJoc2xhKHQpLG89bmV3IGMzKE1hdGgucm91bmQoMzYwKmUuaCksTWF0aC5yb3VuZCgxMDAqZS5zKSxNYXRoLnJvdW5kKDEwMCplLmwpLE1hdGgucm91bmQoMTAwKmUuYSkvMTAwKTtyZXR1cm4gdC5hPDF8fCJhbHdheXMiPT09bj8iaHNsYSgiK28uaCsiLCIrby5zKyIlLCIrby5sKyIlLCIrby5hKyIpIjoiaHNsKCIrby5oKyIsIitvLnMrIiUsIitvLmwrIiUpIjtjYXNlInJnYmEiOmNvbnN0IGk9dGhpcy5kZW5vcm1hbGl6ZVJHQkEodGhpcy5oc3ZhVG9SZ2JhKHQpKTtyZXR1cm4gdC5hPDF8fCJhbHdheXMiPT09bj8icmdiYSgiK2kucisiLCIraS5nKyIsIitpLmIrIiwiK01hdGgucm91bmQoMTAwKmkuYSkvMTAwKyIpIjoicmdiKCIraS5yKyIsIitpLmcrIiwiK2kuYisiKSI7ZGVmYXVsdDpjb25zdCBhPSJhbHdheXMiPT09bnx8ImZvcmNlZCI9PT1uO3JldHVybiB0aGlzLnJnYmFUb0hleCh0aGlzLmRlbm9ybWFsaXplUkdCQSh0aGlzLmhzdmFUb1JnYmEodCkpLGEpfX19ZzMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGczKX0sZzMuybVwcm92PU1uKHt0b2tlbjpnMyxmYWN0b3J5OmczLsm1ZmFjfSksZzMuY3RvclBhcmFtZXRlcnM9KCk9PltdLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoZzMsW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxudWxsKTtjbGFzcyBoM3tjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5lbFJlZj10LHRoaXMuY2RSZWY9ZSx0aGlzLnNlcnZpY2U9bix0aGlzLmlzSUUxMD0hMSx0aGlzLmRpYWxvZ0Fycm93U2l6ZT0xMCx0aGlzLmRpYWxvZ0Fycm93T2Zmc2V0PTE1LHRoaXMuZGlhbG9nSW5wdXRGaWVsZHM9W3IzLkhFWCxyMy5SR0JBLHIzLkhTTEEscjMuQ01ZS10sdGhpcy51c2VSb290Vmlld0NvbnRhaW5lcj0hMX1oYW5kbGVFc2ModCl7dGhpcy5zaG93JiYicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMub25DYW5jZWxDb2xvcih0KX1oYW5kbGVFbnRlcih0KXt0aGlzLnNob3cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5vbkFjY2VwdENvbG9yKHQpfW5nT25Jbml0KCl7dGhpcy5zbGlkZXI9bmV3IHUzKDAsMCwwLDApLHRoaXMuc2xpZGVyRGltTWF4PW5ldyBmMyh0aGlzLmh1ZVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDAsdGhpcy5jcFdpZHRoLDEzMCx0aGlzLmFscGhhU2xpZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDE0MCksdGhpcy5mb3JtYXQ9dGhpcy5jcENteWtFbmFibGVkP3IzLkNNWUs6InJnYmEiPT09dGhpcy5jcE91dHB1dEZvcm1hdD9yMy5SR0JBOiJoc2xhIj09PXRoaXMuY3BPdXRwdXRGb3JtYXQ/cjMuSFNMQTpyMy5IRVgsdGhpcy5saXN0ZW5lck1vdXNlRG93bj10PT57dGhpcy5vbk1vdXNlRG93bih0KX0sdGhpcy5saXN0ZW5lclJlc2l6ZT0oKT0+e3RoaXMub25SZXNpemUoKX0sdGhpcy5vcGVuRGlhbG9nKHRoaXMuaW5pdGlhbENvbG9yLCExKX1uZ09uRGVzdHJveSgpe3RoaXMuY2xvc2VEaWFsb2coKX1uZ0FmdGVyVmlld0luaXQoKXsyMzA9PT10aGlzLmNwV2lkdGgmJiJpbmxpbmUiIT09dGhpcy5jcERpYWxvZ0Rpc3BsYXl8fCh0aGlzLnNsaWRlckRpbU1heD1uZXcgZjModGhpcy5odWVTbGlkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MTQwLHRoaXMuY3BXaWR0aCwxMzAsdGhpcy5hbHBoYVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDApLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEpLHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX1vcGVuRGlhbG9nKHQsZT0hMCl7dGhpcy5zZXJ2aWNlLnNldEFjdGl2ZSh0aGlzKSx0aGlzLndpZHRofHwodGhpcy5jcFdpZHRoPXRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKSx0aGlzLmhlaWdodHx8KHRoaXMuaGVpZ2h0PTMyMCksdGhpcy5zZXRJbml0aWFsQ29sb3IodCksdGhpcy5zZXRDb2xvckZyb21TdHJpbmcodCxlKSx0aGlzLm9wZW5Db2xvclBpY2tlcigpfWNsb3NlRGlhbG9nKCl7dGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9c2V0dXBEaWFsb2codCxlLG4sbyxpLGEscixzLGwsYyxkLHAsbSx1LGYsZyxoLGIseSxfLEMsTSx2LHgsTyxQLHcsayxTLEQsRSxSLEEsVCxOLHope3RoaXMuc2V0SW5pdGlhbENvbG9yKG4pLHRoaXMuc2V0Q29sb3JNb2RlKHMpLHRoaXMuaXNJRTEwPTEwPT09KGZ1bmN0aW9uIEkoKXtsZXQgdD0iIjsidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmKHQ9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKTtjb25zdCBlPXQuaW5kZXhPZigibXNpZSAiKTtyZXR1cm4gZT4wJiZwYXJzZUludCh0LnN1YnN0cmluZyhlKzUsdC5pbmRleE9mKCIuIixlKSksMTApfSkoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlPXQsdGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmPWUsdGhpcy5jcERpc2FibGVJbnB1dD1wLHRoaXMuY3BDbXlrRW5hYmxlZD1sLHRoaXMuY3BBbHBoYUNoYW5uZWw9Yyx0aGlzLmNwT3V0cHV0Rm9ybWF0PWQsdGhpcy5jcERpYWxvZ0Rpc3BsYXk9YSx0aGlzLmNwSWdub3JlZEVsZW1lbnRzPW0sdGhpcy5jcFNhdmVDbGlja091dHNpZGU9dSx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGU9Zix0aGlzLnVzZVJvb3RWaWV3Q29udGFpbmVyPWcsdGhpcy53aWR0aD10aGlzLmNwV2lkdGg9cGFyc2VJbnQobywxMCksdGhpcy5oZWlnaHQ9dGhpcy5jcEhlaWdodD1wYXJzZUludChpLDEwKSx0aGlzLmNwUG9zaXRpb249aCx0aGlzLmNwUG9zaXRpb25PZmZzZXQ9cGFyc2VJbnQoYiwxMCksdGhpcy5jcE9LQnV0dG9uPVAsdGhpcy5jcE9LQnV0dG9uVGV4dD1rLHRoaXMuY3BPS0J1dHRvbkNsYXNzPXcsdGhpcy5jcENhbmNlbEJ1dHRvbj1TLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0PUUsdGhpcy5jcENhbmNlbEJ1dHRvbkNsYXNzPUQsdGhpcy5mYWxsYmFja0NvbG9yPXJ8fCIjZmZmIix0aGlzLnNldFByZXNldENvbmZpZyhfLEMpLHRoaXMuY3BQcmVzZXRDb2xvcnNDbGFzcz1NLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg9dix0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlPXgsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzPU8sdGhpcy5jcEFkZENvbG9yQnV0dG9uPVIsdGhpcy5jcEFkZENvbG9yQnV0dG9uVGV4dD1ULHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzPUEsdGhpcy5jcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3M9Tix0aGlzLmNwVHJpZ2dlckVsZW1lbnQ9eix5fHwodGhpcy5kaWFsb2dBcnJvd09mZnNldD0wKSwiaW5saW5lIj09PWEmJih0aGlzLmRpYWxvZ0Fycm93U2l6ZT0wLHRoaXMuZGlhbG9nQXJyb3dPZmZzZXQ9MCksImhleCI9PT1kJiYiYWx3YXlzIiE9PWMmJiJmb3JjZWQiIT09YyYmKHRoaXMuY3BBbHBoYUNoYW5uZWw9ImRpc2FibGVkIil9c2V0Q29sb3JNb2RlKHQpe3N3aXRjaCh0LnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKSl7Y2FzZSIxIjpjYXNlIkMiOmNhc2UiQ09MT1IiOnRoaXMuY3BDb2xvck1vZGU9MTticmVhaztjYXNlIjIiOmNhc2UiRyI6Y2FzZSJHUkFZU0NBTEUiOnRoaXMuY3BDb2xvck1vZGU9MjticmVhaztjYXNlIjMiOmNhc2UiUCI6Y2FzZSJQUkVTRVRTIjp0aGlzLmNwQ29sb3JNb2RlPTM7YnJlYWs7ZGVmYXVsdDp0aGlzLmNwQ29sb3JNb2RlPTF9fXNldEluaXRpYWxDb2xvcih0KXt0aGlzLmluaXRpYWxDb2xvcj10fXNldFByZXNldENvbmZpZyh0LGUpe3RoaXMuY3BQcmVzZXRMYWJlbD10LHRoaXMuY3BQcmVzZXRDb2xvcnM9ZX1zZXRDb2xvckZyb21TdHJpbmcodCxlPSEwLG49ITApe2xldCBvOyJhbHdheXMiPT09dGhpcy5jcEFscGhhQ2hhbm5lbHx8ImZvcmNlZCI9PT10aGlzLmNwQWxwaGFDaGFubmVsPyhvPXRoaXMuc2VydmljZS5zdHJpbmdUb0hzdmEodCwhMCksb3x8dGhpcy5oc3ZhfHwobz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKHQsITEpKSk6bz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKHQsITEpLG98fHRoaXMuaHN2YXx8KG89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YSh0aGlzLmZhbGxiYWNrQ29sb3IsITEpKSxvJiYodGhpcy5oc3ZhPW8sdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLCJoZXgiPT09dGhpcy5jcE91dHB1dEZvcm1hdCYmImRpc2FibGVkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwmJih0aGlzLmhzdmEuYT0xKSx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKGUsbikpfW9uUmVzaXplKCl7ImZpeGVkIj09PXRoaXMucG9zaXRpb24/dGhpcy5zZXREaWFsb2dQb3NpdGlvbigpOiJpbmxpbmUiIT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMuY2xvc2VDb2xvclBpY2tlcigpfW9uRHJhZ0VuZCh0KXt0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckRyYWdFbmQoe3NsaWRlcjp0LGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkRyYWdTdGFydCh0KXt0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckRyYWdTdGFydCh7c2xpZGVyOnQsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uTW91c2VEb3duKHQpeyF0aGlzLnNob3d8fHRoaXMuaXNJRTEwfHwicG9wdXAiIT09dGhpcy5jcERpYWxvZ0Rpc3BsYXl8fHQudGFyZ2V0PT09dGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR8fHRoaXMuaXNEZXNjZW5kYW50KHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCx0LnRhcmdldCl8fHRoaXMuaXNEZXNjZW5kYW50KHRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHQudGFyZ2V0KXx8MCE9PXRoaXMuY3BJZ25vcmVkRWxlbWVudHMuZmlsdGVyKChlPT5lPT09dC50YXJnZXQpKS5sZW5ndGh8fCh0aGlzLmNwU2F2ZUNsaWNrT3V0c2lkZT90aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yU2VsZWN0ZWQodGhpcy5vdXRwdXRDb2xvcik6KHRoaXMuaHN2YT1udWxsLHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKHRoaXMuaW5pdGlhbENvbG9yLCExKSx0aGlzLmNwQ215a0VuYWJsZWQmJnRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY215a0NoYW5nZWQodGhpcy5jbXlrQ29sb3IpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDaGFuZ2VkKHRoaXMuaW5pdGlhbENvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2FuY2VsZWQoKSksdGhpcy5jcENsb3NlQ2xpY2tPdXRzaWRlJiZ0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKSl9b25BY2NlcHRDb2xvcih0KXt0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub3V0cHV0Q29sb3ImJnRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKSwicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMuY2xvc2VDb2xvclBpY2tlcigpfW9uQ2FuY2VsQ29sb3IodCl7dGhpcy5oc3ZhPW51bGwsdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2FuY2VsZWQoKSx0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0aGlzLmluaXRpYWxDb2xvciwhMCksInBvcHVwIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiYodGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLmluaXRpYWxDb2xvciwhMCksdGhpcy5jbG9zZUNvbG9yUGlja2VyKCkpfW9uRm9ybWF0VG9nZ2xlKHQpe2NvbnN0IGU9dGhpcy5kaWFsb2dJbnB1dEZpZWxkcy5sZW5ndGgtKHRoaXMuY3BDbXlrRW5hYmxlZD8wOjEpLG49KCh0aGlzLmRpYWxvZ0lucHV0RmllbGRzLmluZGV4T2YodGhpcy5mb3JtYXQpK3QpJWUrZSklZTt0aGlzLmZvcm1hdD10aGlzLmRpYWxvZ0lucHV0RmllbGRzW25dfW9uQ29sb3JDaGFuZ2UodCl7dGhpcy5oc3ZhLnM9dC5zL3QucmdYLHRoaXMuaHN2YS52PXQudi90LnJnWSx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zbGlkZXJDaGFuZ2VkKHtzbGlkZXI6ImxpZ2h0bmVzcyIsdmFsdWU6dGhpcy5oc3ZhLnYsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJzYXR1cmF0aW9uIix2YWx1ZTp0aGlzLmhzdmEucyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25IdWVDaGFuZ2UodCl7dGhpcy5oc3ZhLmg9dC52L3QucmdYLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zbGlkZXJDaGFuZ2VkKHtzbGlkZXI6Imh1ZSIsdmFsdWU6dGhpcy5oc3ZhLmgsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uVmFsdWVDaGFuZ2UodCl7dGhpcy5oc3ZhLnY9dC52L3QucmdYLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoidmFsdWUiLHZhbHVlOnRoaXMuaHN2YS52LGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkFscGhhQ2hhbmdlKHQpe3RoaXMuaHN2YS5hPXQudi90LnJnWCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zbGlkZXJDaGFuZ2VkKHtzbGlkZXI6ImFscGhhIix2YWx1ZTp0aGlzLmhzdmEuYSxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25IZXhJbnB1dCh0KXtpZihudWxsPT09dCl0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCk7ZWxzZXt0JiYiIyIhPT10WzBdJiYodD0iIyIrdCk7bGV0IGU9L14jKFthLWYwLTldezN9fFthLWYwLTldezZ9KSQvZ2k7ImFsd2F5cyI9PT10aGlzLmNwQWxwaGFDaGFubmVsJiYoZT0vXiMoW2EtZjAtOV17M318W2EtZjAtOV17Nn18W2EtZjAtOV17OH0pJC9naSk7Y29uc3Qgbj1lLnRlc3QodCk7biYmKHQubGVuZ3RoPDUmJih0PSIjIit0LnN1YnN0cmluZygxKS5zcGxpdCgiIikubWFwKCh0PT50K3QpKS5qb2luKCIiKSksImZvcmNlZCI9PT10aGlzLmNwQWxwaGFDaGFubmVsJiYodCs9TWF0aC5yb3VuZCgyNTUqdGhpcy5oc3ZhLmEpLnRvU3RyaW5nKDE2KSksdGhpcy5zZXRDb2xvckZyb21TdHJpbmcodCwhMCwhMSkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiaGV4Iix2YWxpZDpuLHZhbHVlOnQsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfX1vblJlZElucHV0KHQpe2NvbnN0IGU9dGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEodGhpcy5oc3ZhKSxuPSFpc05hTih0LnYpJiZ0LnY+PTAmJnQudjw9dC5yZztuJiYoZS5yPXQudi90LnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UucmdiYVRvSHN2YShlKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6InJlZCIsdmFsaWQ6bix2YWx1ZTplLnIsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQmx1ZUlucHV0KHQpe2NvbnN0IGU9dGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEodGhpcy5oc3ZhKSxuPSFpc05hTih0LnYpJiZ0LnY+PTAmJnQudjw9dC5yZztuJiYoZS5iPXQudi90LnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UucmdiYVRvSHN2YShlKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImJsdWUiLHZhbGlkOm4sdmFsdWU6ZS5iLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkdyZWVuSW5wdXQodCl7Y29uc3QgZT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLG49IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnO24mJihlLmc9dC52L3QucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGUpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiZ3JlZW4iLHZhbGlkOm4sdmFsdWU6ZS5nLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkh1ZUlucHV0KHQpe2NvbnN0IGU9IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnO2UmJih0aGlzLmhzdmEuaD10LnYvdC5yZyx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6Imh1ZSIsdmFsaWQ6ZSx2YWx1ZTp0aGlzLmhzdmEuaCxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25WYWx1ZUlucHV0KHQpe2NvbnN0IGU9IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnO2UmJih0aGlzLmhzdmEudj10LnYvdC5yZyx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoidmFsdWUiLHZhbGlkOmUsdmFsdWU6dGhpcy5oc3ZhLnYsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQWxwaGFJbnB1dCh0KXtjb25zdCBlPSFpc05hTih0LnYpJiZ0LnY+PTAmJnQudjw9dC5yZztlJiYodGhpcy5oc3ZhLmE9dC52L3QucmcsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImFscGhhIix2YWxpZDplLHZhbHVlOnRoaXMuaHN2YS5hLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkxpZ2h0bmVzc0lucHV0KHQpe2NvbnN0IGU9dGhpcy5zZXJ2aWNlLmhzdmEyaHNsYSh0aGlzLmhzdmEpLG49IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnO24mJihlLmw9dC52L3QucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5oc2xhMmhzdmEoZSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJsaWdodG5lc3MiLHZhbGlkOm4sdmFsdWU6ZS5sLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblNhdHVyYXRpb25JbnB1dCh0KXtjb25zdCBlPXRoaXMuc2VydmljZS5oc3ZhMmhzbGEodGhpcy5oc3ZhKSxuPSFpc05hTih0LnYpJiZ0LnY+PTAmJnQudjw9dC5yZztuJiYoZS5zPXQudi90LnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UuaHNsYTJoc3ZhKGUpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoic2F0dXJhdGlvbiIsdmFsaWQ6bix2YWx1ZTplLnMsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQ3lhbklucHV0KHQpeyFpc05hTih0LnYpJiZ0LnY+PTAmJnQudjw9dC5yZyYmKHRoaXMuY215ay5jPXQudix0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCExLCEwLCEwKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJjeWFuIix2YWxpZDohMCx2YWx1ZTp0aGlzLmNteWsuYyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25NYWdlbnRhSW5wdXQodCl7IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnJiYodGhpcy5jbXlrLm09dC52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6Im1hZ2VudGEiLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5tLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblllbGxvd0lucHV0KHQpeyFpc05hTih0LnYpJiZ0LnY+PTAmJnQudjw9dC5yZyYmKHRoaXMuY215ay55PXQudix0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCExLCEwLCEwKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJ5ZWxsb3ciLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay55LGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkJsYWNrSW5wdXQodCl7IWlzTmFOKHQudikmJnQudj49MCYmdC52PD10LnJnJiYodGhpcy5jbXlrLms9dC52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImJsYWNrIix2YWxpZDohMCx2YWx1ZTp0aGlzLmNteWsuayxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BZGRQcmVzZXRDb2xvcih0LGUpe3Quc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5jcFByZXNldENvbG9ycy5maWx0ZXIoKHQ9PnQ9PT1lKSkubGVuZ3RofHwodGhpcy5jcFByZXNldENvbG9ycz10aGlzLmNwUHJlc2V0Q29sb3JzLmNvbmNhdChlKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5jcFByZXNldENvbG9ycykpfW9uUmVtb3ZlUHJlc2V0Q29sb3IodCxlKXt0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY3BQcmVzZXRDb2xvcnM9dGhpcy5jcFByZXNldENvbG9ycy5maWx0ZXIoKHQ9PnQhPT1lKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5wcmVzZXRDb2xvcnNDaGFuZ2VkKHRoaXMuY3BQcmVzZXRDb2xvcnMpfW9wZW5Db2xvclBpY2tlcigpe3RoaXMuc2hvd3x8KHRoaXMuc2hvdz0hMCx0aGlzLmhpZGRlbj0hMCxzZXRUaW1lb3V0KCgoKT0+e3RoaXMuaGlkZGVuPSExLHRoaXMuc2V0RGlhbG9nUG9zaXRpb24oKSx0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKX0pLDApLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc3RhdGVDaGFuZ2VkKCEwKSx0aGlzLmlzSUUxMHx8KGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5saXN0ZW5lck1vdXNlRG93biksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5saXN0ZW5lck1vdXNlRG93bikpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMubGlzdGVuZXJSZXNpemUpKX1jbG9zZUNvbG9yUGlja2VyKCl7dGhpcy5zaG93JiYodGhpcy5zaG93PSExLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc3RhdGVDaGFuZ2VkKCExKSx0aGlzLmlzSUUxMHx8KGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5saXN0ZW5lck1vdXNlRG93biksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5saXN0ZW5lck1vdXNlRG93bikpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMubGlzdGVuZXJSZXNpemUpLHRoaXMuY2RSZWYuZGVzdHJveWVkfHx0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKSl9dXBkYXRlQ29sb3JQaWNrZXIodD0hMCxlPSEwLG49ITEpe2lmKHRoaXMuc2xpZGVyRGltTWF4KXtsZXQgbyxpLGE7Mj09PXRoaXMuY3BDb2xvck1vZGUmJih0aGlzLmhzdmEucz0wKTtjb25zdCByPXRoaXMub3V0cHV0Q29sb3I7aWYoaT10aGlzLnNlcnZpY2UuaHN2YTJoc2xhKHRoaXMuaHN2YSksdGhpcy5jcENteWtFbmFibGVkPyhuPyhhPXRoaXMuc2VydmljZS5jbXlrVG9SZ2IodGhpcy5zZXJ2aWNlLm5vcm1hbGl6ZUNNWUsodGhpcy5jbXlrKSksdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGEpKTooYT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHRoaXMuY215az10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVDTVlLKHRoaXMuc2VydmljZS5yZ2JhVG9DbXlrKGEpKSksYT10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVSR0JBKGEpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCk6YT10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVSR0JBKHRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKHRoaXMuaHN2YSkpLG89dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplUkdCQSh0aGlzLnNlcnZpY2UuaHN2YVRvUmdiYShuZXcgbDModGhpcy5zbGlkZXJIfHx0aGlzLmhzdmEuaCwxLDEsMSkpKSxlJiYodGhpcy5oc2xhVGV4dD1uZXcgYzMoTWF0aC5yb3VuZCgzNjAqaS5oKSxNYXRoLnJvdW5kKDEwMCppLnMpLE1hdGgucm91bmQoMTAwKmkubCksTWF0aC5yb3VuZCgxMDAqaS5hKS8xMDApLHRoaXMucmdiYVRleHQ9bmV3IHMzKGEucixhLmcsYS5iLE1hdGgucm91bmQoMTAwKmEuYSkvMTAwKSx0aGlzLmNwQ215a0VuYWJsZWQmJih0aGlzLmNteWtUZXh0PW5ldyBkMyh0aGlzLmNteWsuYyx0aGlzLmNteWsubSx0aGlzLmNteWsueSx0aGlzLmNteWsuayxNYXRoLnJvdW5kKDEwMCp0aGlzLmNteWsuYSkvMTAwKSksdGhpcy5oZXhUZXh0PXRoaXMuc2VydmljZS5yZ2JhVG9IZXgoYSwiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwpLHRoaXMuaGV4QWxwaGE9dGhpcy5yZ2JhVGV4dC5hKSwiYXV0byI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0JiZ0aGlzLmZvcm1hdCE9PXIzLlJHQkEmJnRoaXMuZm9ybWF0IT09cjMuQ01ZSyYmdGhpcy5oc3ZhLmE8MSYmKHRoaXMuZm9ybWF0PXRoaXMuaHN2YS5hPDE/cjMuUkdCQTpyMy5IRVgpLHRoaXMuaHVlU2xpZGVyQ29sb3I9InJnYigiK28ucisiLCIrby5nKyIsIitvLmIrIikiLHRoaXMuYWxwaGFTbGlkZXJDb2xvcj0icmdiKCIrYS5yKyIsIithLmcrIiwiK2EuYisiKSIsdGhpcy5vdXRwdXRDb2xvcj10aGlzLnNlcnZpY2Uub3V0cHV0Rm9ybWF0KHRoaXMuaHN2YSx0aGlzLmNwT3V0cHV0Rm9ybWF0LHRoaXMuY3BBbHBoYUNoYW5uZWwpLHRoaXMuc2VsZWN0ZWRDb2xvcj10aGlzLnNlcnZpY2Uub3V0cHV0Rm9ybWF0KHRoaXMuaHN2YSwicmdiYSIsbnVsbCksdGhpcy5mb3JtYXQhPT1yMy5DTVlLKXRoaXMuY215a0NvbG9yPSIiO2Vsc2UgaWYoImFsd2F5cyI9PT10aGlzLmNwQWxwaGFDaGFubmVsfHwiZW5hYmxlZCI9PT10aGlzLmNwQWxwaGFDaGFubmVsfHwiZm9yY2VkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwpe2NvbnN0IHQ9TWF0aC5yb3VuZCgxMDAqdGhpcy5jbXlrLmEpLzEwMDt0aGlzLmNteWtDb2xvcj1gY215a2EoJHt0aGlzLmNteWsuY30sJHt0aGlzLmNteWsubX0sJHt0aGlzLmNteWsueX0sJHt0aGlzLmNteWsua30sJHt0fSlgfWVsc2UgdGhpcy5jbXlrQ29sb3I9YGNteWsoJHt0aGlzLmNteWsuY30sJHt0aGlzLmNteWsubX0sJHt0aGlzLmNteWsueX0sJHt0aGlzLmNteWsua30pYDt0aGlzLnNsaWRlcj1uZXcgdTMoKHRoaXMuc2xpZGVySHx8dGhpcy5oc3ZhLmgpKnRoaXMuc2xpZGVyRGltTWF4LmgtOCx0aGlzLmhzdmEucyp0aGlzLnNsaWRlckRpbU1heC5zLTgsKDEtdGhpcy5oc3ZhLnYpKnRoaXMuc2xpZGVyRGltTWF4LnYtOCx0aGlzLmhzdmEuYSp0aGlzLnNsaWRlckRpbU1heC5hLTgpLHQmJnIhPT10aGlzLm91dHB1dENvbG9yJiYodGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLm91dHB1dENvbG9yKSl9fXNldERpYWxvZ1Bvc2l0aW9uKCl7aWYoImlubGluZSI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSl0aGlzLnBvc2l0aW9uPSJyZWxhdGl2ZSI7ZWxzZXtsZXQgdCxlPSJzdGF0aWMiLG49IiIsbz1udWxsLGk9bnVsbCxhPXRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGU7Y29uc3Qgcj10aGlzLmRpYWxvZ0VsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7Zm9yKDtudWxsIT09YSYmIkhUTUwiIT09YS50YWdOYW1lOyl7aWYodD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKSxlPXQuZ2V0UHJvcGVydHlWYWx1ZSgicG9zaXRpb24iKSxuPXQuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksInN0YXRpYyIhPT1lJiZudWxsPT09byYmKG89YSksbiYmIm5vbmUiIT09biYmbnVsbD09PWkmJihpPWEpLCJmaXhlZCI9PT1lKXtvPWk7YnJlYWt9YT1hLnBhcmVudE5vZGV9Y29uc3Qgcz10aGlzLmNyZWF0ZURpYWxvZ0JveCh0aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiZml4ZWQiIT09ZSk7aWYodGhpcy51c2VSb290Vmlld0NvbnRhaW5lcnx8ImZpeGVkIj09PWUmJighb3x8byBpbnN0YW5jZW9mIEhUTUxVbmtub3duRWxlbWVudCkpdGhpcy50b3A9cy50b3AsdGhpcy5sZWZ0PXMubGVmdDtlbHNle251bGw9PT1vJiYobz1hKTtjb25zdCB0PXRoaXMuY3JlYXRlRGlhbG9nQm94KG8sImZpeGVkIiE9PWUpO3RoaXMudG9wPXMudG9wLXQudG9wLHRoaXMubGVmdD1zLmxlZnQtdC5sZWZ0fSJmaXhlZCI9PT1lJiYodGhpcy5wb3NpdGlvbj0iZml4ZWQiKTtsZXQgbD10aGlzLmNwUG9zaXRpb247ImF1dG8iPT09dGhpcy5jcFBvc2l0aW9uJiYobD0oZnVuY3Rpb24gYyh0LGUpe2xldCBuPSJyaWdodCIsbz0iYm90dG9tIjtjb25zdHtoZWlnaHQ6aSx3aWR0aDphfT10LHt0b3A6cixsZWZ0OnN9PWUsbD1yK2UuaGVpZ2h0LGM9cytlLndpZHRoLGQ9ci1pPDAscD1sK2k+KHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCksbT1zLWE8MCx1PWMrYT4od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCk7cmV0dXJuIHAmJihvPSJ0b3AiKSxkJiYobz0iYm90dG9tIiksbSYmKG49InJpZ2h0IiksdSYmKG49ImxlZnQiKSxkJiZwJiZtJiZ1P1sibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0ucmVkdWNlKCgoZSxuKT0+dFtlXT50W25dP2U6bikpOm0mJnU/ZD8iYm90dG9tIjpwfHxyPmw/InRvcCI6ImJvdHRvbSI6ZCYmcD9tPyJyaWdodCI6dXx8cz5jPyJsZWZ0IjoicmlnaHQiOmAke299LSR7bn1gfSkodGhpcy5kaWFsb2dFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5jcFRyaWdnZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSwidG9wIj09PWw/KHRoaXMuYXJyb3dUb3A9ci0xLHRoaXMudG9wLT1yK3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpzLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJib3R0b20iPT09bD8odGhpcy50b3ArPXMuaGVpZ2h0K3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpzLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtbGVmdCI9PT1sfHwibGVmdC10b3AiPT09bD8odGhpcy50b3AtPXItcy5oZWlnaHQrcy5oZWlnaHQqdGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtcmlnaHQiPT09bHx8InJpZ2h0LXRvcCI9PT1sPyh0aGlzLnRvcC09ci1zLmhlaWdodCtzLmhlaWdodCp0aGlzLmNwUG9zaXRpb25PZmZzZXQvMTAwLHRoaXMubGVmdCs9cy53aWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJsZWZ0Ij09PWx8fCJib3R0b20tbGVmdCI9PT1sfHwibGVmdC1ib3R0b20iPT09bD8odGhpcy50b3ArPXMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yKToodGhpcy50b3ArPXMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQrPXMud2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMiksdGhpcy5jcFVzZVBvc2l0aW9uPWx9fWlzRGVzY2VuZGFudCh0LGUpe2xldCBuPWUucGFyZW50Tm9kZTtmb3IoO251bGwhPT1uOyl7aWYobj09PXQpcmV0dXJuITA7bj1uLnBhcmVudE5vZGV9cmV0dXJuITF9Y3JlYXRlRGlhbG9nQm94KHQsZSl7cmV0dXJue3RvcDp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCsoZT93aW5kb3cucGFnZVlPZmZzZXQ6MCksbGVmdDp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQrKGU/d2luZG93LnBhZ2VYT2Zmc2V0OjApLHdpZHRoOnQub2Zmc2V0V2lkdGgsaGVpZ2h0OnQub2Zmc2V0SGVpZ2h0fX19aDMuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGgzKShTbShoZyksU20oVWcpLFNtKGczKSl9LGgzLsm1Y21wPXRvKHt0eXBlOmgzLHNlbGVjdG9yczpbWyJjb2xvci1waWNrZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihRaChFMSw3KSxRaChSMSw3KSxRaChBMSw3KSksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi5kaWFsb2dFbGVtZW50PXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLmh1ZVNsaWRlcj10LmZpcnN0KSxKaCh0PXRiKCkpJiYobi5hbHBoYVNsaWRlcj10LmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZWbSgia2V5dXAuZXNjIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5oYW5kbGVFc2MoZSl9KSwhMSxpbCkoImtleXVwLmVudGVyIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5oYW5kbGVFbnRlcihlKX0pLCExLGlsKX0sZGVjbHM6MjgsdmFyczo0Nyxjb25zdHM6W1sxLCJjb2xvci1waWNrZXIiLDMsImNsaWNrIl0sWyJkaWFsb2dQb3B1cCIsIiJdLFszLCJjbGFzcyIsInRvcCIsNCwibmdJZiJdLFsiY2xhc3MiLCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIsMywic2xpZGVyIiwicmdYIiwicmdZIiwiYmFja2dyb3VuZC1jb2xvciIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCIsNCwibmdJZiJdLFsxLCJodWUtYWxwaGEiLCJib3giXSxbMSwibGVmdCJdLFsxLCJzZWxlY3RlZC1jb2xvci1iYWNrZ3JvdW5kIl0sWzEsInNlbGVjdGVkLWNvbG9yIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGFzcyIsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwicmlnaHQiXSxbInN0eWxlIiwiaGVpZ2h0OiAxNnB4OyIsNCwibmdJZiJdLFsxLCJodWUiLDMsInNsaWRlciIsInJnWCIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCJdLFsiaHVlU2xpZGVyIiwiIl0sWzEsImN1cnNvciJdLFsxLCJ2YWx1ZSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJ2YWx1ZVNsaWRlciIsIiJdLFsxLCJhbHBoYSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJhbHBoYVNsaWRlciIsIiJdLFsiY2xhc3MiLCJjbXlrLXRleHQiLDMsImRpc3BsYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaHNsYS10ZXh0IiwzLCJkaXNwbGF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInJnYmEtdGV4dCIsMywiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJoZXgtdGV4dCIsMywiaGV4LWFscGhhIiwiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJ2YWx1ZS10ZXh0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInR5cGUtcG9saWN5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXNldC1hcmVhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJ1dHRvbi1hcmVhIiw0LCJuZ0lmIl0sWzEsInNhdHVyYXRpb24tbGlnaHRuZXNzIiwzLCJzbGlkZXIiLCJyZ1giLCJyZ1kiLCJuZXdWYWx1ZSIsImRyYWdTdGFydCIsImRyYWdFbmQiXSxbInR5cGUiLCJidXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMiwiaGVpZ2h0IiwiMTZweCJdLFsxLCJjbXlrLXRleHQiXSxbMSwiYm94Il0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKiIsIm1pbiIsIjAiLCJtYXgiLCIxMDAiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/IiwibWluIiwiMCIsIm1heCIsIjEiLCJzdGVwIiwiMC4xIiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/IiwibWluIiwiMCIsIm1heCIsIjEiLCJzdGVwIiwiMC4xIiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwiaHNsYS10ZXh0Il0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKiIsIm1pbiIsIjAiLCJtYXgiLCIzNjAiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsxLCJyZ2JhLXRleHQiXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjI1NSIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsImhleC10ZXh0Il0sWzMsInRleHQiLCJ2YWx1ZSIsImJsdXIiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsInZhbHVlLXRleHQiXSxbMSwidHlwZS1wb2xpY3kiXSxbMSwidHlwZS1wb2xpY3ktYXJyb3ciLDMsImNsaWNrIl0sWzEsInByZXNldC1hcmVhIl0sWzEsInByZXNldC1sYWJlbCJdLFszLCJjbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJwcmVzZXQtY29sb3IiLDMsImJhY2tncm91bmRDb2xvciIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwicHJlc2V0LWNvbG9yIiwzLCJjbGljayJdLFszLCJjbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsImJ1dHRvbi1hcmVhIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiZGl2IiwwLDEpLFZtKCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCl9KSksUXAoMixUMSwxLDUsImRpdiIsMiksUXAoMyxOMSwyLDgsImRpdiIsMyksUm0oNCwiZGl2Iiw0KSxSbSg1LCJkaXYiLDUpLFRtKDYsImRpdiIsNiksVG0oNywiZGl2Iiw3KSxRcCg4LHoxLDIsNSwiYnV0dG9uIiw4KSxBbSgpLFJtKDksImRpdiIsOSksUXAoMTAsSTEsMSwwLCJkaXYiLDEwKSxSbSgxMSwiZGl2IiwxMSwxMiksVm0oIm5ld1ZhbHVlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkh1ZUNoYW5nZShlKX0pKSgiZHJhZ1N0YXJ0IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uRHJhZ1N0YXJ0KCJodWUiKX0pKSgiZHJhZ0VuZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkRyYWdFbmQoImh1ZSIpfSkpLFRtKDEzLCJkaXYiLDEzKSxBbSgpLFJtKDE0LCJkaXYiLDE0LDE1KSxWbSgibmV3VmFsdWUiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uVmFsdWVDaGFuZ2UoZSl9KSkoImRyYWdTdGFydCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkRyYWdTdGFydCgidmFsdWUiKX0pKSgiZHJhZ0VuZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkRyYWdFbmQoInZhbHVlIil9KSksVG0oMTYsImRpdiIsMTMpLEFtKCksUm0oMTcsImRpdiIsMTYsMTcpLFZtKCJuZXdWYWx1ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25BbHBoYUNoYW5nZShlKX0pKSgiZHJhZ1N0YXJ0IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uRHJhZ1N0YXJ0KCJhbHBoYSIpfSkpKCJkcmFnRW5kIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uRHJhZ0VuZCgiYWxwaGEiKX0pKSxUbSgxOSwiZGl2IiwxMyksQW0oKSxBbSgpLEFtKCksUXAoMjAsTDEsMTcsMTIsImRpdiIsMTgpLFFwKDIxLGoxLDE0LDEwLCJkaXYiLDE5KSxRcCgyMixXMSwxNCwxMCwiZGl2IiwyMCksUXAoMjMsWjEsOCw3LCJkaXYiLDIxKSxRcCgyNCxLMSw5LDMsImRpdiIsMjIpLFFwKDI1LEoxLDMsMCwiZGl2IiwyMyksUXAoMjYsbjMsNiwzLCJkaXYiLDI0KSxRcCgyNyxhMywzLDIsImRpdiIsMjUpLEFtKCkpLDImZSYmKGR1KCJkaXNwbGF5IixuLnNob3c/ImJsb2NrIjoibm9uZSIpKCJ2aXNpYmlsaXR5IixuLmhpZGRlbj8iaGlkZGVuIjoidmlzaWJsZSIpKCJ0b3AiLG4udG9wLCJweCIpKCJsZWZ0IixuLmxlZnQsInB4IikoInBvc2l0aW9uIixuLnBvc2l0aW9uKSgiaGVpZ2h0IixuLmNwSGVpZ2h0LCJweCIpKCJ3aWR0aCIsbi5jcFdpZHRoLCJweCIpLHB1KCJvcGVuIixuLnNob3cpLHJjKDIpLERtKCJuZ0lmIiwicG9wdXAiPT1uLmNwRGlhbG9nRGlzcGxheSkscmMoMSksRG0oIm5nSWYiLDE9PT0obi5jcENvbG9yTW9kZXx8MSkpLHJjKDQpLGR1KCJiYWNrZ3JvdW5kLWNvbG9yIixuLnNlbGVjdGVkQ29sb3IpLHJjKDEpLERtKCJuZ0lmIixuLmNwQWRkQ29sb3JCdXR0b24pLHJjKDIpLERtKCJuZ0lmIiwiZGlzYWJsZWQiPT09bi5jcEFscGhhQ2hhbm5lbCkscmMoMSksZHUoImRpc3BsYXkiLDE9PT0obi5jcENvbG9yTW9kZXx8MSk/ImJsb2NrIjoibm9uZSIpLERtKCJyZ1giLDEpLHJjKDIpLGR1KCJsZWZ0IixudWxsPT1uLnNsaWRlcj9udWxsOm4uc2xpZGVyLmgsInB4IikscmMoMSksZHUoImRpc3BsYXkiLDI9PT0obi5jcENvbG9yTW9kZXx8MSk/ImJsb2NrIjoibm9uZSIpLERtKCJyZ1giLDEpLHJjKDIpLGR1KCJyaWdodCIsbnVsbD09bi5zbGlkZXI/bnVsbDpuLnNsaWRlci52LCJweCIpLHJjKDEpLGR1KCJkaXNwbGF5IiwiZGlzYWJsZWQiPT09bi5jcEFscGhhQ2hhbm5lbD8ibm9uZSI6ImJsb2NrIikoImJhY2tncm91bmQtY29sb3IiLG4uYWxwaGFTbGlkZXJDb2xvciksRG0oInJnWCIsMSkscmMoMiksZHUoImxlZnQiLG51bGw9PW4uc2xpZGVyP251bGw6bi5zbGlkZXIuYSwicHgiKSxyYygxKSxEbSgibmdJZiIsIW4uY3BEaXNhYmxlSW5wdXQmJjE9PT0obi5jcENvbG9yTW9kZXx8MSkpLHJjKDEpLERtKCJuZ0lmIiwhbi5jcERpc2FibGVJbnB1dCYmMT09PShuLmNwQ29sb3JNb2RlfHwxKSkscmMoMSksRG0oIm5nSWYiLCFuLmNwRGlzYWJsZUlucHV0JiYxPT09KG4uY3BDb2xvck1vZGV8fDEpKSxyYygxKSxEbSgibmdJZiIsIW4uY3BEaXNhYmxlSW5wdXQmJjE9PT0obi5jcENvbG9yTW9kZXx8MSkpLHJjKDEpLERtKCJuZ0lmIiwhbi5jcERpc2FibGVJbnB1dCYmMj09PShuLmNwQ29sb3JNb2RlfHwxKSkscmMoMSksRG0oIm5nSWYiLCFuLmNwRGlzYWJsZUlucHV0JiYxPT09KG4uY3BDb2xvck1vZGV8fDEpKSxyYygxKSxEbSgibmdJZiIsKG51bGw9PW4uY3BQcmVzZXRDb2xvcnM/bnVsbDpuLmNwUHJlc2V0Q29sb3JzLmxlbmd0aCl8fG4uY3BBZGRDb2xvckJ1dHRvbikscmMoMSksRG0oIm5nSWYiLG4uY3BPS0J1dHRvbnx8bi5jcENhbmNlbEJ1dHRvbikpfSxkaXJlY3RpdmVzOltkTSxtMyxwMyxsTV0sc3R5bGVzOlsnLmNvbG9yLXBpY2tlcnstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICM3Nzc7Y3Vyc29yOmRlZmF1bHQ7aGVpZ2h0OmF1dG87cG9zaXRpb246YWJzb2x1dGU7dXNlci1zZWxlY3Q6bm9uZTt3aWR0aDoyMzBweDt6LWluZGV4OjEwMDB9LmNvbG9yLXBpY2tlciAqe2JveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LXNpemU6MTFweDttYXJnaW46MH0uY29sb3ItcGlja2VyIGlucHV0e2NvbG9yOiMwMDA7Zm9udC1zaXplOjEzcHg7aGVpZ2h0OjI2cHg7bWluLXdpZHRoOjA7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MH0uY29sb3ItcGlja2VyIGlucHV0Oi1tb3otc3VibWl0LWludmFsaWQsLmNvbG9yLXBpY2tlciBpbnB1dDotbW96LXVpLWludmFsaWQsLmNvbG9yLXBpY2tlciBpbnB1dDppbnZhbGlke2JveC1zaGFkb3c6bm9uZX0uY29sb3ItcGlja2VyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLC5jb2xvci1waWNrZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9LmNvbG9yLXBpY2tlciAuYXJyb3d7Ym9yZGVyLXN0eWxlOnNvbGlkO2hlaWdodDowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjA7ei1pbmRleDo5OTk5OTl9LmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctdG9we2JvcmRlci1jb2xvcjojNzc3IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O2JvcmRlci13aWR0aDoxMHB4IDVweDtsZWZ0OjhweH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b217Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICM3Nzc7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2xlZnQ6OHB4O3RvcDotMjBweH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LXRvcCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3AtbGVmdHtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzc3Nztib3JkZXItd2lkdGg6NXB4IDEwcHg7Ym90dG9tOjhweDtyaWdodDotMjFweH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodC10b3AsLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctdG9wLXJpZ2h0e2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCAjNzc3IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O2JvcmRlci13aWR0aDo1cHggMTBweDtib3R0b206OHB4O2xlZnQ6LTIwcHh9LmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctYm90dG9tLWxlZnQsLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctbGVmdCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LWJvdHRvbXtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzc3Nztib3JkZXItd2lkdGg6NXB4IDEwcHg7cmlnaHQ6LTIxcHg7dG9wOjhweH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b20tcmlnaHQsLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctcmlnaHQsLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctcmlnaHQtYm90dG9te2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCAjNzc3IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O2JvcmRlci13aWR0aDo1cHggMTBweDtsZWZ0Oi0yMHB4O3RvcDo4cHh9LmNvbG9yLXBpY2tlciAuY3Vyc29ye2JvcmRlcjoycHggc29saWQgIzIyMjtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6ZGVmYXVsdDtoZWlnaHQ6MTZweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxNnB4fS5jb2xvci1waWNrZXIgLmJveHtkaXNwbGF5OmZsZXg7cGFkZGluZzo0cHggOHB4fS5jb2xvci1waWNrZXIgLmxlZnR7cGFkZGluZzoxNnB4IDhweDtwb3NpdGlvbjpyZWxhdGl2ZX0uY29sb3ItcGlja2VyIC5yaWdodHtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6MTJweCA4cHh9LmNvbG9yLXBpY2tlciAuYnV0dG9uLWFyZWF7cGFkZGluZzowIDE2cHggMTZweDt0ZXh0LWFsaWduOnJpZ2h0fS5jb2xvci1waWNrZXIgLmJ1dHRvbi1hcmVhIGJ1dHRvbnttYXJnaW4tbGVmdDo4cHh9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWF7cGFkZGluZzo0cHggMTVweH0uY29sb3ItcGlja2VyIC5wcmVzZXQtYXJlYSAucHJlc2V0LWxhYmVse2NvbG9yOiM1NTU7Zm9udC1zaXplOjExcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6NHB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxMDAlfS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtY29sb3J7Ym9yZGVyOjFweCBzb2xpZCAjYTlhOWE5O2JvcmRlci1yYWRpdXM6MjUlO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxOHB4O21hcmdpbjo0cHggNnB4IDhweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxOHB4fS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtZW1wdHktbWVzc2FnZXtmb250LXN0eWxlOml0YWxpYzttYXJnaW4tYm90dG9tOjhweDttYXJnaW4tdG9wOjRweDttaW4taGVpZ2h0OjE4cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmNvbG9yLXBpY2tlciAuaGV4LXRleHR7Zm9udC1zaXplOjExcHg7cGFkZGluZzo0cHggOHB4O3dpZHRoOjEwMCV9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveHtwYWRkaW5nOjAgMjRweCA4cHggOHB4fS5jb2xvci1waWNrZXIgLmhleC10ZXh0IC5ib3ggZGl2e2NsZWFyOmxlZnQ7Y29sb3I6IzU1NTtmbGV4OjEgMSBhdXRvO2Zsb2F0OmxlZnQ7dGV4dC1hbGlnbjpjZW50ZXJ9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveCBpbnB1dHtib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7ZmxleDoxIDEgYXV0bztwYWRkaW5nOjFweH0uY29sb3ItcGlja2VyIC5oZXgtYWxwaGEgLmJveCBkaXY6Zmlyc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaGV4LWFscGhhIC5ib3ggaW5wdXQ6Zmlyc3QtY2hpbGR7ZmxleC1ncm93OjM7bWFyZ2luLXJpZ2h0OjhweH0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0e2ZvbnQtc2l6ZToxMXB4O3BhZGRpbmc6NHB4IDhweDt3aWR0aDoxMDAlfS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCAuYm94e3BhZGRpbmc6MCAyNHB4IDhweCA4cHh9LmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94e3BhZGRpbmc6MCA4cHggOHB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGRpdiwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQgLmJveCBkaXYsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggZGl2LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBkaXZ7Y29sb3I6IzU1NTtmbGV4OjEgMSBhdXRvO21hcmdpbi1yaWdodDo4cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGRpdjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowfS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBpbnB1dHtib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7ZmxleDoxO2Zsb2F0OmxlZnQ7bWFyZ2luOjAgOHB4IDAgMDtwYWRkaW5nOjFweH0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxkLC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGlucHV0Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZHttYXJnaW4tcmlnaHQ6MH0uY29sb3ItcGlja2VyIC5odWUtYWxwaGF7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206M3B4fS5jb2xvci1waWNrZXIgLmh1ZXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd2tVRldiQ0NBQUFBRnhKUkVGVWFON3Qwa0VLZzBBUUFNRTJ4ODMvbjJxdTVxQ2dEMWlEaENvWWRwbmJRQzliYlkxcVZPL2p2YzZrM2FkOTFzNy83RjEvY3NnUHJ1anVRMTdCRFlTRnNCQVd3Z0poSVN5RUJjSkNXQWdMaElXd0VCWUlpMmY3QXIvMVRDZ0ZIMlg5QUFBQUFFbEZUa1N1UW1DQyIpO2RpcmVjdGlvbjpsdHJ9LmNvbG9yLXBpY2tlciAuaHVlLC5jb2xvci1waWNrZXIgLnZhbHVle2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O3dpZHRoOjEwMCV9LmNvbG9yLXBpY2tlciAudmFsdWV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBUUNBWUFBQUQwNklZbkFBQUNUa2xFUVZSNDJ1M1NZVWNyQUJoQTRVMlNrbVJKTW1XU0prbEtKaVdaWnBLVUpKc2tLVW1hVEZJbUtaT1V6TXlTcEdSbWxpUk5KaWxKU3BLU0pFdG1TcElwbVdtU2RPNzM2LzZEK3g3T1AzZ1VDb1dDdjFjcWxTUWxKWkdjbkV4S1NncXBxYW1rcGFXUm5wNU9Sa1lHbVptWnFGUXFzckt5eU03T0ppY25oOXpjWE5ScU5YbDVlZVRuNTZQUmFDZ29LS0N3c0pDaW9pSzBXaTNGeGNXVWxKUlFXbHBLV1ZrWjVlWGxWRlJVVUZsWmlVNm5vNnFxaXVycWFtcHFhcWl0cmFXdXJnNjlYazk5ZlQwR2d3R2owVWhEUXdPTmpZMDBOVFhSM054TVMwc0xyYTJ0dExXMTBkN2Vqc2xrd213MjA5SFJRV2RuSjExZFhYUjNkOVBUMDBOdmJ5OTlmWDMwOS9jek1EREE0T0FnRm91Rm9hRWhyRllydzhQRGpJeU1NRG82eXRqWUdEYWJqZkh4Y1NZbUpwaWNuR1JxYWdxNzNjNzA5RFF6TXpQTXpzNHlOemZIL1B3OERvY0RwOU9KeStYQzdYYXpzTERBNHVJaVMwdExMQzh2czdLeXd1cnFLbXRyYTNnOEhyeGVMejZmRDcvZnovcjZPaHNiRzJ4dWJySzF0Y1gyOWphQlFJQ2RuUjJDd1NDN3U3dnM3ZTJ4djcvUHdjRUJoNGVISEIwZGNYeDh6TW5KQ2FlbnA1eWRuWEYrZnM3RnhRV1hsNWRjWFYxeGZYM056YzBOdDdlMzNOM2RFUXFGdUwrLzUrSGhnWEE0VENRUzRmSHhrYWVuSjU2Zm4zbDVlZUgxOVpWb05NcmIyeHZ2Nys5OGZId1FpOFdJeCtOOGZuNlNTQ1Q0K3ZyaSsvdWJuNThmZm45LytWY0tnU1d3QkpiQUVsZ0NTMkFKTElFbHNBU1d3QkpZQWt0Z0NTeUJKYkFFbHNBU1dBSkxZQWtzZ1NXd0JKYkFFbGdDUzJBSkxJRWxzUDQvV0g4QW1KNVo2akhTNGg4QUFBQUFTVVZPUks1Q1lJST0iKTtkaXJlY3Rpb246cnRsfS5jb2xvci1waWNrZXIgLmFscGhhe2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZQUFBQVFDQVlBQUFEMDZJWW5BQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3WVFsWk1hM2dBQUFXVkpSRUZVYU43dG1FR082akFRUkNzT0FySGdCcHlBSllHamNHb2N4QW00QTJJSHBtb1dFMGVCSCtlem1GbE52VTA2c2hKM1c2VkVlbFdNVVFBSUlGOWY2cVpwaW1zQTFMWXRTMnVGNTEvdTI3WVZBRlpWUlVrRW9HSGRQVi9zSWNiSUVJSWtVZEkvOVhhN25leXY2MStTV0ZVVkFWQ1NjdDAwVFduMmZ2NnUzK0VjZmQzdFh6eS8wK25FVXUrU1Bqby9rcXpybWlRcFNjTjZ2OThYZXdmQTgvbE1raUxKMld4R1NVb3BjVDZmTTZVME5YOS9mcmZiamV2MVd0ZnJsWmZMaFlmRFFRSEcvQUlPbG5Hd2pJTmxIQ3hqSEN6allKbS9USldkQ3dxdUpYc2VGRnpHd0ROTmVpS01PSlRPOHhRZERRYWVCMjkrSzllZmVMYUJvOUo3dmR2dEpqMVJqRkZqZml2N3F2OTV0angvN2xlU1FnaDkzZTFmZk1lSXA2TytZUWpoby9ONzkxdDFYVk9TU0k3Ti8vSys0L0dveFdMQngrUEI1L09wNVhMSisvM09sSkpXcXhVM204M292djVpR2Y4S2pZTmxIQ3hqSEN6allCa0h5NWdmNWd1c3ZRVTdVMzdqVEFBQUFBQkpSVTVFcmtKZ2dnPT0iKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlO2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2RpcmVjdGlvbjpsdHI7aGVpZ2h0OjE2cHg7d2lkdGg6MTAwJX0uY29sb3ItcGlja2VyIC50eXBlLXBvbGljeXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCSUFBQUFnQ0FZQUFBQWZmQ2p4QUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFDZXdBQUFuc0IwMUNPM0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBSUFTVVJCVkVpSjdaWTlheFJSRklhZnN4TVN0ckxRSnBBZ3BCRmhpK0M5dzFZU28wMEk2UlovZzl2WnBCZi9RT3I0R3lSZ2tTS05TckFhZHNacVFHd0NrdUFXeVJaSnN5U3d2aFo3Ti92aHpyZ2JMSDNMZDg1OTdqbHp6NTB6Sm9reXhYSDhEcURWYXIwcWk2djhCYkl0cVNHcEVjZnhkbG1zRldYa3ZYOEFmQVZXZzNVS1BFblQ5R0t1ak16c0FGZ1pzVmFDTjFWVFFkNzdYVW5yZ0Uxa3YrNjkzNTI2OFdScHpybkhadllSV0M3WXZDM3BSWlpsM3dvenF0VnFpeUg5SWdqQXNwa2QxR3ExeFVKUXRWcmRCOVpLSUFPdGhkZy9RYzY1TFVrN3dOSU1vQ1ZKTzg2NXJZRmhrcWpYNi9kN3ZWNEdQSndCTXFvZlVSUzVKRWs2RllCZXIvZWVZYi9NbzlXd0ZuUE92UWJlQXZmdUFBSzRCTjRzQUp0QUcvZ0pJRWxtTnVpSnliYTNFR05tWmlQZVp1RVZtVmVsbC9ZLzZOK0N6RG4zQVhoRU9PbzdIdi8zQmVBejhJelFrTVBuSmJ1UHgxd0MreVlKNy8wbllJUDVTLzBGSEtkcCtyd0NFRVhSUy9yZjVIbDFHdGIyTTBpU3BDT3BDWnpQQVRtWDFFeVNwSE1MQXNpeTdNak1Eb0hyR1NEWFpuYVlaZG5Sd0JoN0o5MXV0d21jekFBNkNiRzNHZ1BsZVg0anFVSC9hMUNrdHFSR251YzNoU0NBTUIzMmdLc3BrQ3RnYjNLQ1FNbWtqZVA0V05KVGhyTk5admFsMVdwdFRJc3Y3SnRRNHRtSWRSYThxU29FcFdsNllXWk5vQU4wekt4Wk5QZWhwTFNCWnYydCtRMENKOWxMbkFSUUxBQUFBQUJKUlU1RXJrSmdnZz09Iik7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTo4cHggMTZweDtoZWlnaHQ6MjRweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMnB4O3RvcDoyMThweDt3aWR0aDoxNnB4fS5jb2xvci1waWNrZXIgLnR5cGUtcG9saWN5IC50eXBlLXBvbGljeS1hcnJvd3tkaXNwbGF5OmJsb2NrO2hlaWdodDo1MCU7d2lkdGg6MTAwJX0uY29sb3ItcGlja2VyIC5zZWxlY3RlZC1jb2xvcntib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7Ym9yZGVyLXJhZGl1czo1MCU7aGVpZ2h0OjQwcHg7bGVmdDo4cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE2cHg7d2lkdGg6NDBweH0uY29sb3ItcGlja2VyIC5zZWxlY3RlZC1jb2xvci1iYWNrZ3JvdW5ke2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNnQUFBQW9DQVlBQUFDTS9yaHRBQUFBaDBsRVFWUllSKzJXMFFsQU1RZ0Q2MHpkZndPZHFhOFRtSS93UU1yNUswSTViWkxJekxPYTJudDM3VlZWYmQrZER4NW9iZ0NDM0tCTHdKMmZmNFBuVmlka2YrdWNJaHc4MEhRYUNMbzNETUgzQ1JLM2lGc21BV1ZsNmhQTkR3dDhFdk5FNXErWXVFWGNNZ2tvblZNNlNkeUNvRXZBblo4djFIang4MTdNaWxteFNVQjVyZExKRHljWmdVQVpVY2gvQUFBQUFFbEZUa1N1UW1DQyIpO2JvcmRlci1yYWRpdXM6NTAlO2hlaWdodDo0MHB4O3dpZHRoOjQwcHh9LmNvbG9yLXBpY2tlciAuc2F0dXJhdGlvbi1saWdodG5lc3N7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBT1lBQUFDQ0NBWUFBQUJTRDdUM0FBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0QUlXRHdrc1BXUjZsZ0FBSUFCSlJFRlVlTnJ0blZ1VDQ3Z1JyQUhOK1AvL09yLzYxWTV3T05aN21aMXUzWEFlTE1qSlpHWlZnZEtzZmM1eFIzUzBSSUlVVytDSHpDcGMyTWNZbzdYR3YzZXg3VWlaZDU3cmp5enp2K3YrMzNYL1IvKzNyL2Y3dlIzODZZK1R2S05jZi93ZGhUTFBjdjlxVTJ3WmQ3NHV0aDB0MTgyMWprSVpMUGNzSS82bldhNFh2dXRxdVUwWjg1bW54ODBTL1p6Z3BuTG5PdEhOdDcvb2Z4MVRLWGNTTnpOLzdxYk1RM2p1N3JOUW1NWVlkLzRzMmo5YWErUCtnR2FNY1pyYjFNL3RkcnZmNy9kMnY5OVA5L3Q5M08vM2NidmR4dTEyRzlmcmRWd3VsM0UrbjhjLy8vblArMisvL1hiNjZhZWZ4bC8vK3RmeDV6Ly8yWUs1QWwycmd2ZjRVc2JwZEdyQjUyYkF2QXJYcHV6am1pcUFWU0d6NWVEbUdZWHpoYkFabUNybm16ZGRwVVUrOFkxZEFPWWVYQ3REVXdWd1Y3WUNHSDZ1QW15TWNaOWw1dmtVYUJQR01VWjcvSjV3Lzc5Mi9mdnY5WHE5MzI2M2RyL2ZUeFBFQ2VNRThuSzVqTS9Qei9IVFR6L2R2MzM3ZHZybGwxL0dQLzd4ai9HM3YvMXQvT1V2ZndrVnN3b25namRPcDlQekgzVTNEM3ptV0duWlZYbjRqQ3FzN3dDMkJLUDQvOHRBemtac29XeDZYcnFlSFp5bXZwNEFCQ0JKaFRRd0tmRFQ4Z3pyWkNJcWk1QWhpQUNqQmZFQjJyUDgvWDYzTU03ZjYvVjZ2OS92N1hhN2JZQzgzVzdqY3Jsc1ZISXE1ZmZ2MzArLy9mYmIrT1dYWDhaUFAvMDAvdjczdjQrZmYvNzVKU3ZiZXUrYkwyV01NYUZiQWxwQk5NODVRWCtjdDZxb1Nxa1BBd3VRbEJWS3FHTkZTVU9BQTNCbXU3Z0M1aE5PZDE1blN3dkFPVVc3QzRnaVVDVjhTZ241TDloTkZJcVRzcDBHeEkweXNpb3lqQWprWS90R0pWRXB6K2Z6K09XWFgrN2Z2MzgvL2Y3NzcrUGJ0Mi9qMTE5L0hULy8vUFA0OWRkZng4ZkhSd3JtVGpWNzc5RVh1MnB4Mnhoand0ZEpaUWNBV1FJUExQSVNzTUphU3dpRDhneklLcndTeUFURTVqNW5BYlI1YzFkQlV3QmxzRVdXMGg2THFpWXNxRlBBUXhDeVJaM3dPU0FSeG1sWE1YNWs2NHBRZnZ2MjdmNzUrZGsrUGo1T0h4OGY0L3YzNytQYnQyL2p0OTkrRzkrK2ZSc2ZIeC9qY3JtVUZMTzMxZ1lEV2JseFJJcy9UcWZUN291c3hKc0F4WEEyR2M3VEE5WGRnZmRvSGJGc2o3NlgyKzFXQXJnSTFhZ2VHd0EzcXVwcW9Ic21jYkk2RnU5M3F1Z2dGYTlkN0xlRHRnS2ZBRkhCSitORUJ5SWtjSjVLZXJ2ZFRtaGhHY2dKSlNaNXZuLy9maitmeisxOFBwOCtQei9INStmbm1HRCsvdnZ2NC92MzcrUGo0Mk44Zm42TzIrMVdzN0pqalA2d3JhTUk1RTRSWjh4MnZWNVRTd2txdW90VjcvZDdUejZIRldzRC9xTmNkdzBDUTNxLzMyMWM2ODZUd0RWSWRidXk3M3pObGRoU0hiOEkya2xaem5tK0luQlM0VTZuMDMwMmFCRnNMaEhEQUtKVkpWZ2xmSTlqaHZ1NTNXNTNzTEFOWU54QWlEQTZNQ2VVSHg4ZjkrdjEyaTZYUzd0Y0xxY1pXNTdQNXllWTgvZno4M09jeitmbnNTbVlVeWtuV0VHODVXQnN0OXN0elNMeU1kZnI5UWkwOGlZMTVVWjBMbERHTGhSM281eksyajdPUFVURDBFK25VM3RrN1hiLzE2TkZiaGxvQU11WTF6akxVT08zQktlSURlK1o4czMvSjRnRm80VE01alBtdVJnMjhmb1VLS1ZTd28xNlRnQTVucHl3Y1dMSGdZbC9QejgvNzMvNjA1L2FiNy85MW02M1c3dGNMaWUwc1pqNG1hbzVnVHlmejg4RTBmMStqOEVjWXp3VFBFRzJjcWp5ZkhORjBNOGZ1cUVpYU9WblJ6WlpRTmg1ZndReUhnL0hER2ZKbzg5UTF6Yi9xdXU1WEM2NzczSTJYS2ZUcWQvdjkrZDN3dXFXdmEvWVRkVWRFVjNmaEl2L1ZpeXBzNllFM3gzcjQzSzViSlFTNjZ6YXhWR0ZzdmQrLy9qNGFGKy9mbTNmdjM5dnQ5dXRmZjM2dGYzKysrL3RkcnVkdm4zN1p1TkxCYWFDTWdVekMrclpSaUZvd3hVdUpJOFlNcWNDcDlPcHE1dmFnYVlVNmxHSkExWFFxZWpjaHc2Q2owR3c1bllCckd3MDFBMk8yMDZuMDRCR291Tk55VGZwL0Z3RWxoVWV5Nm5YcklLdzdRUVdkZHh1TjJsZEw1Zkw4MzlnU1BGOGFodS9KdkJPNDhDUFN1cU1mOFZwOS9QNTNMNTgrZEx1OTNzN244L3RmcjgvMzkvdjkvYjUrVGtoUEozUDU2bVE0MzYvaisvZnYrL2lTZ2J6ZXIwK0FaeC81Kzg4YnY2T01kYTZTNXo2a2QyMWZZQzlkeHY3Y0lKSjJkOUFPUzMwZlBNenlIaVRNOEI0REY2WFVsWUhwNEtRVzNXKzF0NzdNTkIxdkdIeFdxN1hhN3ZmNzgreTUvTjVBK0gxZXQyOXh1UDVkYll0eWFSdTRBa3NiUHE2OTM2ZmpSelhSeEJiUHIvYitiMTgrZktsalRIYUJCQmZuOC9uMC8xK0gxKytmQm5uOHptMHNCOGZINXU0Y3I1R3VCaE1WazBFRW45UnNjdGdWaE0raXhsSnRNQTIzUjhCNnl5c0FzdEJPZ0ZYSUtLQ01JZ1RvTXFORXUyZllNSDd6dGM3MzJkUUtrQ2oxeXRBWnRZMEt4OHBJcjhHR0orQVQzVisySGlyaGwrK2ZCbVh5Mld6NzN3K2IxN1A4cCtmbjgvdFV3R1ZsZVZrVHlVYjY4RGtmYXlXWTR6eE5SaWhVNEVwTEpQWlZySyt1N0o0L21nZktxZUxXOVgyUkVXbEl0TDFkaXluYkREYjMralhnWWpRcW4wcnJ4V2MrTmtJTFA3Rjd4SWJNdng3dlY1M3g0MHhubGJXSkYxMlpTYWcvTjBwVzZ0K1p6bU9NekhqYWpLd0Rmb25kNzh6WVRkZnExOHVwOTd6cjJxOHYzSWlvQnByUnRCbDBFWjlvZzVXQlJHT2RPSGpJalhGN1VvdEZiZ09Xblh6SUp5ell2akc1SVlnc21NT3hIa3o4T3NNU3JWTldlcTVUOERhT2NiRXYxT2Q1cmJzOWFPN1l2TWV0NjNFa0YrK2ZNRXhxK01SbDQvTDViTFpOLytleitmblo2S2F6dU1xWFNRVk81c3BKWGZsSEFJemVzL3hKc2Vja1JKaURNb2c5ZDZWZlJycVhNcjZLcFZWMjdqUndKYWNHb3ZPQU0xek1kUU1ud0sxQXViSzYza2RDQ2h2STFDN2cwejluZi9EK1h6ZTJWajhIN0d4NFA5ZHVRbHNZQ3JxeU44WHFHM0htLzEwT2ozancvbitjcmxzdHVNK2pQbW14VDJkVHVQejgzUHp0MnBuMVhzRUhYL2JuUGFWcVZtaDB4d090MG82WExMQUhlUFVVMjAzd0hmY3JzcEN3bVYzVHJ5QjVzME1zZWVnOTd4L0J3ekNqQmxiQitwUkFQbGEwQlZRdVQ2VjZRSGRCbGozZDBLRzE0N2IrRHF4UWVVeW1ETzQzVzRkUWFyK1RJandtQWQwejgvaDY1dmYwL3lMdjNQYjVYTHBydS95ZERvOXM3RVQwSStQajZkS0s5VlVFSWVLV1FXUEFPcko4TEtkNHZFK3Q5MVkzZTdVRmxXYXRnMlZ3Sm5iK0hQbXR2bS9zZks1OS9PYVdGM3gvZVAxVVBIdkE1RERZRHBZWGZiMGRydjFWMkRrQmt4dHcvdEVXVlZsWFdkQzlwRllzNS9qZmg5ZFMvMTZ2VzdzNmxURytUZnFzeFNKSHhrWFhxL1hkcjFldTRMc2ZENlAzdnNUM043N0RrTCt6UG01alNkS0w0elIzQXhRZDZySGtMa1lsU293c3JxN3puenU2d1N3ZHNNSk9YbUE1ZkJjanh0Z01HQllIbHI1em9raHRzTUNUZ1hMUU9XNFhDNmRFeUVNcHJMOG1BUXpYUmdkdWl4Mnlaem9yeGtZc0RuM2hCMVZlTUxHc1hzVnRnbDJwVzhTM3N2azB2dzdSNGhOYUh2djRjQUNsNUhGendJSDBLYzZ6dTRYakRQUi9qcEFWeFd6TzFYazJERGIzdlRjeGVHVTFpV1pIa21JRFd6aVdLdmlyQ0o0RHJhdnM2SUovR0c2Y1RxV2RYRHkrZkFyUURWVmtMcWtWakFvWklJVGRtbUlxWHdxYTk1TjMrTUdZb1pRZFJWTk81M1kxeFJraE8xNnZZN2V1NTA3Q2E5bEpuYkdweE9lbVFoU3cvQVFzbW1wNXpVOUJpVThHNnd2WDc2TTYvVTZQajQrZG8wQno0Q3BnaWtuVFVlRHF3bEtCbWczdTRPVmpyWjFBK3JBY2dhZWpXcTZlSkN2Q1lGRE9OU3dPZ0hYNEVRUnc4bHhiekRPZEVLNmdaM0hrMWIrOGcybzFKRnRLWHl2L2ZFZFRYdVdqV1hkQVppQnA2QURlRHJDRmlpbTdCNlpGbmVlSTdHdm0vUE1rVURYNjdXN3hJOGIwRDcvdjhkQTlxZk41b2FDZjc0V1pqSDBtZjFjbWZZMVkwSlVGbVZyVFd1OHV6a05jTHRFajd1NUZYQlRrZkM2R09BNXE4WU14TzhLVnZGNnNBVkdkY3JVYnNLT0RjUUtrTE1PTWRtbHh1bTY0MllyUG0yNkFsaFpXMVlCMVIrcnJHc3dFOFRhWUFXZVVNeGRmK1dqd1N2WjJFZjN5dE95Zm41K1BwVlBBYXFPbjQzTXROQnF2bWpqeGJqTTRsWmpaWTRncU5NSTVrdGFXL3NZS053Uys5bEZRekdpaG1NQ0tQYTcrWjBWNkViMEdSbW9idHBYOEpsald1NUZNTE41amE2aEc5a3dRZ1pxZjUrMU5INVV4emtGUmVDZFdoSjhYZGxHVWt4TzdIUmxZUm00bVZPNDNXN3RlcjEyVFBKRXcvcm1FTjNMNVNLSElXWmc5bXorcFVvS09ZcTViSlRKZFgyZ21lMVVjeE1aUUZhRVFJbEhjdDMyTStZMUJ6R2tHdXpmaXlBTjl6K3VncGxaMXN5bUNyRENZWWtHeERUcEk5UnpCeTBySHllRFVDMW5XYWVVYUQ5bjR4a055WU1CRFp0elozQisrZkpsWTIxWEZET2NBUkpsYWJPeWlTM3VDcExJOWpyWmpDRGthVnZjQ0Nqd29nbktTaFdkelhaV2xaTXZWVGdEOExwcWxDTHJxZ2JjQitxWXdyZ0tZcFQwY2NDcWJLeUNWYWxrRWFibi9GeW5vZ0NyUEtmcWY1MXhKN3NHQjJaWGNabXhvU096dGp4MzAwRFppN2EwLzJBSVIwVWxCYWc5U3VEdzZLY0F6bGFCN3ZIWnZXcGpLOTBkeXJxNmJLeURVWlFiUjBCMDViaUxRa0hJY1NVbWdJSytTd3VxZ0hDbm9pbzJSUVUxeWorQm5CeTlwcGhWS0xHeUM3WnpGSzFweFdLK0U4SWhWQ1dMTi91THRuVVU0YXlvWUxvYUFOejhGZHRhU3ZZNHBWMEJFVzJsczYxY3pxbGxCS3BUeUtnTUFocloxY2RjMVJST3RQbXZXTmtkY0taN1pLeGFXamlQTEpNcHA3T1pLeEErcnFHL29KTGp4ZjBwbkpscUxvRFpvM2d5VTBtS0d5czJ0YUtlY2ovZDFDK3JKU3BsQnFsVHlBcWdSK0Q4S2pLbG1STDJndFVjQWRDdHNMK2lqQ05UMW9xcXFrSDJPSEViRzVzREZuVWc1QWEreUxvdTJWVTFwdGoxUzJaUXF2MU9SWk45SVd6UmZnYVJCeEtvQkU4VVd5cWxKRnRySWMwQXhOalNqZWQ5OUNUWS9YRGZTekN6NU0wSVpvVkVzV25QRk5Uc2w4b29WQzFUemJHZ3FGWk5EU2dWd0tLKzFzR0RNS3F4WkNXR1ZNRHlzaUVyMWpWU1FKVVl3ajVpSE9sVGhkSHQ0NFNRZzlDTitubDhEOTBOTUlnQWRncjQ2SnFSaVI5STh2UmRGdmJyMTdtL3l4VU1Lak5MTWlWVUFEd3UyQ1dHaGhpK0Y1NVRXTTlNOWNvZ3ptczFkbk00dU9GL0xBRVlXZGNxbk03eUZteXEzSWZ3bU9ST2Q3WTFpRld0T2pvWThUbzQxbVRWNUl5c2dGRnVSenNiV0ZHYk5JSUpDRHYxZE9vNGxaRzdqV0J3UkZ0VlRLdVd5ZUNCeUpLT2FuOG9aM2VwOVhkZE5sMHREdWF5d0x6OWNYUFllREFBMFNwa0JPOXNiVmNUT1ZXbGRQdjR1eXpFa3p4SHRqdm9uSG9Ta0ZFV05vbzFkOERoY1FwdXRkMnBwTm9uNEJ6b0FpSjFoQkZRZzBkVnRkYkdISERRV3VzaG1ORVF1a0xNMlFPMUcyWThiZ1RYcUZoY0JKajdFalBnY1B0czhVUzhxUHBQQi9kWHpuT2g1WjQzOHR6SDVlYzZRZ3JPS3JSUmZLbXlzQm1VREIrUGhZYWJNbFZQRVIrR0NTSVRUenI3YW0ydEFySDNiZ2NFelBKbStjcjVqSjRObkhORkRWckZYY0k1TGU5azVKbncrYmVkYlYrRmZSelpJSGFPT2FPc0xZMC83VUdzNThEanJHd0tNSU1GSUd6T0VXMS9qR3NkQXRDTjZoRUFJNGhCZTlZWGVSUk9CU1ZQQVZQQXF2SU01Yng1aFZLV0FNUDZ6QlJ5M2llc2NyaWRWZEZCaW5CeFhEbkcyR1JZMlhiQ3ZwMWxodkd0TzlCeHU1aDkwOFhRdTQybG5TQXJNRmRpek1pbTh1d1JDeFBHbm5PUzhsd3BuYk9pRHFUQWpzclJOL1Bjb0FTY0NiYUFDcVZNNDB5bG5qalRCcytid1dsQUcyMy9VS2Jka2l3S1dJUVBHeldhY3pwb1NseFBFajgyMmNOV2twUzdGeXpzRHJxcGZncEczamFodzJ2Z2JhU1FBeHVMV1pZdDdKenlOZThKb1pwTkFjdkRGT2R3MHdxWVQ5QUsxclp6L0RkYlNsTFBwMHJ5SXhnUUpsSzlBWmxFcTdJT1hwb2hnOVBJaHJDbmc4OEpzT3hpVjRaV0FZZmc0c2lreC84a3kyWjlsODYydXF3cmZzY0lIOCt1Z1RtVkd5aWRkZVZZVWdFTW40R1p6ZzE0RXdJc2g5c3gyY0tLaVdYUmV1T0U1Z3pHT1FnZGxSS1ZWZGxldnFiMjc5WHEwUW5zdHMyVkRhQk8wY29lenNydVd0SEFwdTZzS0c0SUJoTjBhR1Uya0xyTUtHUlROM0htYkNEd0tWMTR6dmtNRURHNFFmWlZzcFZsYU5VMm1oYzVURVozTjFoL3pxVGhldUxwVzA1WldUR1ZqYjNkYm5ObXhLWkJuTjhKcWlkYVZMS0FPeUFSTkxTK01CNTRaMitWYXFvTUxLcm9WQmxuZ2VmblRQQWNvSE5XQ1N2bGZBOENJMEhFbUJOQm5CbFh5TXJ6VTdBN1dWbTk0UFBxUTJnbXFLeCtXREdzbnZpbG1jU09CSnFPSzFuWXlBSXp1QXllc3EzVWRTSzNLZldjWUtEOTVIbWZZT1UzcXNlcjJDdFlFVUErRnBmcWROdmdQQlpVQmhEckdPTlJWbFFzaDhyTGNhVUN5a0hHME9PVXdUbExCcnNoNXNvRU1HZXppMUU0SFJWdDFpY3A1d1pFRlhkaWJDa0c4WTh2WDc1c2JPNEUwaW9tOXoraGpTaU9meTNEaHBYSXRwVmhFK1VHUWR2b1dqdENobXJHSGY0WUF6S2dCTm5HdHVKeEZDZUdkaFVBZlFMTEs4a0JZQVA2Z3ZGSlphak1HM1hreWN5OEt1QzBxNEV5eW13dHdkeGR2Mk0wbUlCdEswTEtuZjY0MGowMEF1cTRnVWtkV0dsaHMyMnFKYzZkWkNzTDE5b3hubFRKRzRTWVZSSUdwRDhUUEZCdU02T0VsYlMxcGxkaWQ0bUdBeU42Wkl1cGJDNWJYSk45ZmRwYlRoU3hMVWFJOElHMVhJWUJ4VzNUanM2S1Fvc0tjeGZ4Y1FtZG53UkdNMTBHbkZjQ3kyWFl1bkxNeUFrZGdrNG1lUGljenNMeWd0aGNCdXQ2Z29PcVM3WVZGWEFETGphb3NCNnM2b2ZjWldBWlNJUllxU1VraXpZd3R0WWFiM3ZVT1E5dzJIUnhJSWc4V3dSVmVFNjh4aTRVdEwzelJwaHhwbHp3dVpyY3FZQ3ExSTNqUEk1ZG5KSXlnRW9oTWJQcVZKU3pyd3p4QkpUczV6TitSZVVTZ3hpa1BRVkYzSlZCZU5ReGJIRU5yRU1OdkVkRlpWVjlsSDkrT1JHRXNOWlFweVROYzRDM0FHN1hGNG5nenErRHJPMnpidWFhT1hnZGFGY2RrRW90b1NGQlZYMnFKMEM4T1daZUc0S0dscGdoQTBYZlRPUENxVjJxcXdRMjZRV2ZGMlBNTGhJMncxbFZBYTJhUHNZZDB6YTI1TVFSd2djWk42dVFEQ2krWnhpRDRYRU0ya1p4T1Q0MUZuWm5hUmxjcFpvdXpsUnFxZGJRVldvcFFvU0I1OFJWNTBsQk5ySGkvQXdYUzVMcndEVmxwWTNGYzNCeWlZR2M1MlRyaXN0NmtPWGR3SW5BUXRKcHA1UWNoeWFxdVlPVjdTdStmeFZNYVYzZGMwUkUyUzZtVVkwZ0x0MnBNY1lxcktJUTl3MmwxZ3BRVU10UVljbW1idDVEVE54ZGhuVUNqUXF0Yks5U1VTenZyQzBtbWhoRTFlMkZTMitveHlweS9aQVN1dGttdGp4M3ZjQkMyNFBYNjVuYnFrQkNSaGZqUzlrSVlQbmVlOGNNYWdWT2hJLzNUMWZBbWR0QVdac0Nzd1RKQ2tRVk5hMHFXS1NLUE9wSEFVaEQ5RHJiVmN5b1lrd3FodmgxN3ZZQWF5WExReUtHWWR4bFVERnA0OTRyQlhSallnTzE3RERZZXROSVVqL2V6cDZTMGxubHBFd3NXbUpNa093c0tYZVpLRUFqSUhuMEVRSklTYVJCY082VU1JTno3cC9iRWpqbnc0ZnQreG1EdmtzeFg0RzJySXJpczdxYWVLd0FGTVAyT2k3bjRjcml1Wnd0cFNVd3BmTHhTbk9SU3JJcXVzYzVaRmFYeXNxUldqaVoyRHlBV0VJTDM1dFZTb1FFbEZBQ2pPZUdHU0U3QUhFUWdkby9MU3ZDT2dHQnZreHNtRGJ2bFMzRnA1dmhhQjJUQUdxUktyS0tNcmhMVnBhR3pFVmpaME9ReERoYUNUQStReVJSMWQxNWFRenJKbnRMM1JpYnNpcGpHNmpsZ0w0eXFiUzBzTllnMWU4NHZoYkJWckVsSzY0Q1VjV1lYRGZLeGhwSXV4aVZKWlV4c2JNeS91UkJLVE5SUTRrUTNMZFJZTFMwckpqUlBsVFBxWTZnZEpzRURjK2FRWEFuK0hnc05VQ2JSdUYwT2owenduQTdiV0RrYmhPNUVuczAwcWVRaFMxbGFCTWw1TS9jQWF4c0xGOHJLeXFsK1RmN0VMTEVHdS9peGlpbWRDdm8wVGpmcGpLd2FnZ2VuNGVoNXY3TG9rTEtiTHV5dkhoY1pHOGRoR3JFRHg3SGc5M1pwcEpGN3FCcU8zaVZ2ZVhFRFFOSW56ZW9lOFlxNmVQYVpCWjJKdmlNM1cyVUFHb3Rla1JDQUdxNEVrRjFYM0RPblIxMXlSc0JMMXRSYTBQVmNaaU5GWFoyYzM0RnNrdm9tSW5RUTZsenBKb1piSnhrNDNOd0tKRkJxdUpTc3JCeUh5ZHhLT25UeFFBU0JtUzNqK0pNbnNIU2xhM0VjNks5VldvSlZuOXpmandPTTdocVlBQXFKUXdFMmEzbkE0OEoyUUdlZ1JrcFpOaXZTWSt5czNFa0tkNG9KSXdzdklIbDNjV2dMdDVrNE5INk9tdExXZHB1ck9rd0VNdXBZYzdlTXREUmhPY0kydWk1SmhWSXpYekx5dG8vR0FQdVpveW84d2tvZHVWZ0pnbEN0N09oR2JnSUQ0TXE0c2krNjN6VVMxRnVGRlhGbHF5YWoyZW1IbExNY0JxWXUwRk11UjI4QmJCN2xPeFJNU2lDUVhGaENLdXdraForcFlEaUdTZ2JzS0tWOE1pU1JzdUhTSVdNOXJrbFJpSWxaWnVxWGpzUUs4b29ZSk1ncTNKS1dWa2hIYmhzVnhGVXp0aE9XUGtZaWpjYng1NElLc1NkVCt1THIzY3JHS3lvWWdGaUdSOWlCazRrZmxvVVgrSklsUVJRcWFibXBnbmhxdHBRcGI2UlZRMVdINURuclM0aEVvR1pxYWVyUTJkaEZiejhYZVB4U2htRGJvNzBlSVNqb29yTzJ2SzhTSlhJNFNVbUVVNHpXS0R6VUR0V1RZdzd4WGxiU1RFajRGUmc3ektuS29HUkFMdjBHczlUZ2MxQnBDeXdHWlJRQXRxVnoyeHJCY0FNekVwZlp3RlNhMkc1VzBRQkZqU01hcFdBRUZhM0hjR043Q3hEekVDeUlrSjk3cXdycVdOVFdWbzg3NlBQc2pQa2oyd3Zncm9NNWxMWktNRVRLVnFsL0N2bldWRmlGYS9TekpVUXdrb1pzcjY3WTZ2bFNSVjMvMnRtTlRPWTN2bmF4WXdNdW9QS3FkelIxdzdJcUh5bWxQeGFBVGhmVTdLbzJaWFlqNEFZSkhMK2tOZEt3UlFZRVNUUmE1ZnNVWi9yVkMxVE1UeVdWeVlvcU50dXphSHNNeXYydHZvYXJ4ZGZxd1lnVTFheEZvL2NucWwxRkdzcUsrdUFST1Y4Qlg0R1U4V2NaVEFUaTJxN1FjeWkwTzBWK0doV0JNTlJVa244SDFTc1dWRTVCeTNHaTBFQ3FVZUpvQmZBdERhNGFta2RYRzM3QUdQNUdnZWI4NHA3VWF6cG9LUnpkRnplUThIa29IR3hwckt5L0hwbTV0MTJwNDdKNnhUWURFejd1SU5FWFN1eFlYdkZza1lBYyt5U3hIOXNmNWZ0S3pVNklid1ZCY1VHZzVlNUZNQ0VYU0VyWlIwd0dheVYxOXdvTTlndVBqVHFKZFZUcVI0dUU0bkpuTGxkV1ZrRUNDWkxkMlZMRit4dGFtZXg3SXBpcmlTRFVwdnJwbjlscndHTUNIeXBwTUgrcHM2TElMc3VGR1VqMVhFT1hpcWJxU0hQVUtuQ2xwV1Y2OGtxdFVSVk5EWTRUTmFvY3lrb1llVFU1bmdHRVFhL1MxRG5uRTRBZVhNY0tqSFBBbUZWakNCRU5hZXlMVk5IZnIzcHg4eFVzdEo5NGhJcGZINEhLRS9lRGFBcks2bFN5VlZGYmR0MWd4VElWazNwcHBWbEZYaTRwRWhWQlRPYnF1b2hVODVNTFhuMWlhaHZVa0hKalNDTWMwMXRMRnZlVlZCeDBEb2RNNmpmdEN1N0RPdEl6WXhyYzBxcDFKR1AyYXlZRnoyR2I2SHZNck84Y25HdFY2R2ptM3VJbVNmRDJHcFdLNnVvd2JaR014RktRQ28xcE9NdGNNWEZwUnN0K2hYR29Bb21GM3NTVEJHZ1RnbGJCS1d3c1EzdFpxYVlTcDBaMUNpbVJEV0ZjQ0pVUFlKMDBCSTVGa0tZTm9pZnVReG1OODhTV1ZYV0xNYVVxcXFnQzBCbVFKUjZzazN1OU5DZjZqWUxYeEFmcXNZRWdWTEFoUlkyQXRndGZsWk5GbUZ5aHhkckxrQWRXbGs0RDg4TTJpeEh5ZXBJZGhNSHJHL2lSMVpHdHEwTUdwYkRiUlBZT1hlU1kxTTZOeTRac3R2R1NrdEsrWGJGUEFUajJEMzcxc2FQRXNBTVhoWHJzWjBrbS9YU3RraGhNeUJmc2E2dVhGWmUyVkNlK1lNcjErR0tnd3JReU5ZcTFWUnJCK0VpekFvdzZOc2ROS2N5VkVrWWVNNzN5czZxNGtBSHA2QmlGa2xUa0lyVkM1b1lWN3V6d09HQ3o0VUowU3RxMmxXTUp5NHd0YitSZXRMNnRaRmljbkptQnc1VWpDdlhYTVpWSlgyTVFrYmYrWE41RVdkNzhWejgvSkVzTVpUQmlLTnpzbTFpbkxSVVE3NEg0TmlkYXFJNjhqNXNBRmd4Y1J2ZUM3aWVMSlhmUVl4alpaMkNzaVdGZXdaWEptQklsWjF0ZHRyWDRoU3VhdGVLc28vUlpPdE9LVzJubXExb1R6ZUs2ZFJXQVd1Mk5SVmI0aHEwU1htMUd2dHVnSHJicjVJWHFtU2t0ZzVDdURFMk1TbFB3c1k1a05FMldwM0FxaVpiV1ZMQXhpQkYrMmlCWmJ1Tmo2TUI2cnNNTEM3Rnlhc2FZRHlvN0trb1B5RXR3M3BFTVhmUHZ4QUppMmpBUVFnanJ6MHJMSVpTV1psSW9OaHdkNXhLNEFSOW1ZTmpXQWFMcm51SW1KZUJWTjl6Qk9ST2JWdmJyK21UVGZGU0VKTFNSbkhvN2hFSm9JaThNRnFqeG12Z21GNVVSWno0ekxGZ1paOEN0dTJYN2dnVmNjS205Z1Z4SXNPSHF4WGdOTUtuRldaWW5mMWRCbk9oYXlYcTE3UXdGbFdXMDllTkt5VkpGbVhxYU9OR0E1YUNlZ01iSjNVVWtHWTFpYzNuS1dnanE4cWZWWUdRRzFnUnQ2cnM2MmE2SGlxcVVPcWRlc0s1Tm1YNG5Hb2ZKb2lFMWQwZEY5bFZWa3ZUMS9rRUVhYUNvWU93RnBjVmNvTE0rNzY2OVB4QzlyV3FrdEgwc1dVWWxkMFZDcHVCWi9zdFZSY0dneTlXWDIrVTFRdGhpOVN6QXFTeHpac3krT2lGekJZbnlTR1Y2R2t1NDRyRDhCQ09aQlYzQnZENStBS1JITndNRXNCNkV6SG5KcGtUQWVpVWxFR2tjRUNlQjZHRFpUcDVZRUpUbHZkcmtueFlqVGxsTWtmTnRYd0RqTTd1VmpLNUpYVVVuNDNycnFwSzJqeXRheEhXME01RzhEQzhydEhNWXM3S1NnZHVWUU1HVFlGcUZ2VlM2cmtEM3NESjQ2YWZkWUZ3b3ExMUFPS0NCTGh2d29VZ2M4SUdBTnljUjZrblpyZEpQZHN1eG55amZkM0ZvdlRsUk1kRWR0T2w1Q01WNUVIc1hRQmlzN1RPd3ZJRFphR2oyVm5wYmg3Y3BLNjNWd1lFTUx3cWJqenlsNjk5c2F3RkZrRjF5cWpVVTMxSGZDNnNXMVpGVkZ1WFZYVmd6OWtlRWF3MHlzMWxXZm0rYXpRQVFTV0EraEtZVmZzWmpQbmNBY1VCOW9JYXl5L1VaWFJOY2tER2ppNzdHc1didkJvNnRQcldQcU95VmtCVXErSU5lcXB6TmRZcy91MGlmaDVxbXBxSVcrMzNKVlNVY3dZNzBLTDRVOWxZZFU2bGp0U2xzN2xtZmk5ZzNZemVRZlZrYUdGYVYzT0RDbmFEMk44d3NFREZrbEUzUnpNM1pnaGRZa1dIc3N6cTcwRkllY25La1ZrdDhlek16UnE5YmtHdUtvalJMQlZTb2QzWTF5UHFLZ1lXN0pSUVRQVnl5NXhJWUxqT2d4Z1Q1MlJLSlVZMWRPcklpUmQ0ZnV0UXgvQTVBY1NtRWp6MHZGV3JrTHp2YldBdTlIT1diR2d4RmsxVk5UcG5CS2s2VGd3aXNJL0hjeFlYUDF1QVdPNzJVTEZsQlRxK2FTdTJWVFVzNmhyeE0yQ0YraEVvcjFWSUE5Wm1GVWFhYjFsU1NnWnNWczRzeHpIbFZMb0pIcjlINERoT05Ua0kxWEMwL3dpWTJOb1dBRzVSbG5IRm5xNm9MY2NwUWRkTXVKL08xN0pWQTVPSExpMEJxQ3p0cTdZMSsrdWNDZDk4cUxJOE1JSEJWL2NLanhRVG1lM2hGQlMzTXlDcW5Ec3V5bTJvODBIanZGRlR0clVSbU5hR0pzbVZhaEltalRzVVhLdFFaVEFWczdNdnY4LytmelVyWkFYY0xKNk00a29lNlhQMGI2U21XV05EenlVcFE4YmwrTHRXeDR0dXFaMzZjUllWM3l1VnhQTnd2SWlxaVFDU211N3NyZ1R6UjZua3locENhclh3RnkxdkdkNWlQMmNZMDZsRnI1TmpoaGcxWTYrTkIyOGZ0Yks4M3M4cmY3a0xKYkt3REZQYkxnMjVhMEFkWkpFaXFyNXBoaXhLTURsUlV0Y3NzcTFocmlMcUdvSCt6ZU5nVm05T2VtanNFVFY4SmRGME5IbmtJRnhXWTFPQjRZcnA3cnRXSjdOZ0FBQVBYa2xFUVZRM29OczVucGx5VmY4dTJGb0x1MUpySHZlYVpXUWpxQWtzaHRGYTJnenNTRzNacGtidmczSGFmRjlzbFBQbGxkakZsSzgwR3lzbThNcjRNUGhuZU5XRU5QR2pBSXBtaWxUUEFUZFRSVFhsQ0JZSFlBUXVQd0EzNnhJcFd0R040cTNZMk1oaUdzVXB1U1NubEVKUkQ4UG9yQzdDRllWdytGNTFxVGhnYWJ4c1R4V3pDR1kwWlNzYjNsZnFBeTBPUE5qTnk4eGlRUUtzSFlGUTJIQlpWdlZiQnVxM20xb1dLYWpxYW9uc002dVpVcjZDalhXTlowbDVFM2gzalVSbWE2a1AzTUpJaXkxTG0ra2FoUXE0MU4yaVpqYTVzanRsTFlOWkhackg2cVVHbTR2TWJEcDZSdzJDRm12dXlGa3JCY0N5TXRGcUJhRUNtc0hvSzlCWjJMQS9sSmNScVNhRHFuYVdiclpkR2F6M0RMZ0l2QmxuNHdvR3p0YnlKR3FzbHd4a2hoSHJUalRZRlhDdE9vS1M4dUxkb2ZWZEFiT3lsR1U2bmxZcFhXWnRzNG5YQnE2V3hKaXRNTm9rSFVKbmJuSnBsUW0rYUdwWTJhNUdNVjJRRDFoUnViQlBGS2R1bWY1T0hrTEh6MEY5bHVFNWtqQmpSYTBuRkU1Q1VHcUh3MzJNbWpaNnhrZ0lOVm5TbloxVlpTdEsycUtsUmFMbFFnSzd1VHE3SkZYSndNKzNTT0VLeWhaTkkrdEowSTVxTVl5OWsycUpEN2RWV2RxS1hhMENLTlIwQ2NqZytCMklZdTJmY0JaSlprTUZnTTExcjBYOTJ3aWxnaEZHZ3pWbmV4bHFCN3hMOW1TMjlTaVlVVlkyblhPWmpOQlJzeURzUVBSV1c1aHJaNFhjZEM0SFZXUmJqZ0pyNHNGb2ZLNVN6alE3cmhJMVVlYmRQZEViajZzcUl2VFpRWjV2YTA4ckFCc0FXMFV4ZVd5dEFrN0EyS0o5WnB4ekNpb0IyNFhGdFlBZVhZeHI2YW5TcWhMZ3BwRXFXYkd3THVuVGdyVitJaldsTDI5bGphQWw0RVFNR3NFcnA0YXBlWmlxdXdSWExYQXFPQ2VydTMybW15ZGM2b1dUU1dwRkFHZHplVEI4UlRIVk1FdGxNOTBDYmJRQ1loUGpxM2VnWXIxRkdkWUlRaml1REdaNXpaL0F6b2JLR095THh0aTZjNFJ3dHYyYW55V2xMSUNubExoeEpSWHQ2QTVlYkRCV0ZOT05ieFdaMmQwMm1udTRTOVlFQ3BlcHBWMXpTV1JCV3hIWXpWSXYxQ1hTb3V3cXFYM2pCQkJEWmRZUWJwVFFXNFpRbFM4cjVrSDRzdVNSbWcyKyszSk4xMHgxUGFBbUVrbXRZbEVkZUdwSkVNNmtPdUNxQ1IyMm9TdWpqNUlWMkhkVDB6ajVwckxLVGpYRkFQamRRbHlxN3hJQnhBUVA1eU1jekc0VnhBS3cwbjZpbFoyUUJjZTJwTHVsa3V4eHFub0l6RmZncXlxamlsOVMxVk53QnJGbWV5ZW9wczh5T2paVXliWmRmUzhDdWFUSUp1bXpzNXRPRGFOdExwRkRRL1BjSkd3ZUxobWVMMW5CMEtxaVVEU2NzaVVWRDg5RGkzSHRyS3RTVUx3M1JMaXlnWkQrN3NGOEpUT2JnWXNyR3ZETlVGUkdsMWl5MExsMVlrVWMyYUpZTW9nOTIwSThxVzZZRENnMU1xazBKSEpGS1hrYmdiUnJlSStxcFlOT1pIclZjRFViYTdwanNwaFNKTnRLNnVwZ1JOQVZvT1MwbXVnQmVONGJJWmdIaHVQWi9zMUVOYVg2S3NWcitZTnJoMU5iN2lwUjBQRTV6Yk5SZWdDYnJIUlV3NllmMDdkTEJKbDFmOEtCOWFzMlYxbk5xQXNsNjJMQkJoZWh3YWxlcmtIbUIxSkZJRVpLU0V1c2RsNUpRajFuSmxIWFNDRjM0MmdKOUNZR3JYZWxrbkpJWHFWUDhzRCtxdHBsQ1IzWEgycWZLcTB5Z01wK0tuVmtLeE5sWjhtMllrSWxWTWlDblhVd2w3cXpuQktTdlF6M20zUHQ2b1FiWE81YjVGaXhDaC9mSHhVUVcvQUVjSzZ6Q05xS1FuTDlzeXdxbUt1d3ZxU1l6VC9hUFZOTnBWeWh2UlcyMWFxY2lDc2pkV3ZCd0lMVXZoNVZ5Q3piV29DMXBKako2ODBDV3NsK3VkS0I2VDVSd0cxbWxvaG5scGJnNDdpejVVOWhhMEZHdG1STEZZQnRPOTl5OTdBcDB6K1pEVEFvZzZrU0xac01IZy9JRmtrZ3A2Q3B2VTJVMGNZVlNkbm1randCZE9tWGJ4VFdOV3p1SWJpcE1pb1Z4RWNrWkVvYWhTT2l5Mk0zSzBqY0MxTGhWRHdhcUcwWnZrY1dxQ25yRzRHSXh5a3JxbGJXZHc2TFF5QmFaUjhIbUxSSWhRV3NIc3dENDJaWFZMTmtmOWwrRmxXMEhWUTJsd0ZzQy9aMUZkemxRUjBLYVBmbytGZGZ1Ky9kd1ZSSUN1MUNHUjdBRUlpQWhjK0FaVUYwa09CYVB4bVVxZzRpNjR2UW5VNG5GRFlKOU56KzFmVlh2ZUg5cW1yK2tQSUx4OG9LY1JWL0JGYnhiRTBKTVQwa1NENHc2TC9sTlk4b2NzcWFnVmRVM0EzTWp4aHhjR3VxenNQSDRpcnBhb3cxcTZPeXJWanZwOU5wYzU5RTkxTGxkYm9ZVnpKV2RpbVdmQVcyU05FS2NEYVgyRm1CTExBL3VLeGxtaGg2MTNJczFVUlFBcGJLZnR0d3hMMDJxNk9ueDVwUXhTYlBvakFnK3Y1aEFuTjZMSFZSRFhJc3ZLdFJqaVMwcUpVeVpUQVhWYkFLODJFbEZKV2FRZFZvcVVDMVVudDdCVmFUUXVkTTZTdXFleGpRSk40KzBpY2F4di91dGJLdjgzRVRiVDhIOGdqY09LeE9KbWJVYTZPT1ZYaHQzZEZZNnJIdjlYb056RkxjZUVBMW84K3BLbTBMQUhQSFoycllLakZxMGhmWkZpeHNxSEpnRDNlRDVuK1Uwa2IxbUZqWGtuMmx2TVNTT3NORS9DZElBS0YwU3l0cTZ1ck9IVU41Z3dnNEdab3NnYm1nZ001dWNyYTJxclMySWcxY2JpQkJjeFl6Z3pVRE5MQ3ZMOEdiWlhOcDZPUnkzTG1TK0trODN6UklBSzZBMWlvS2EySTlOYXBJdWlVRmRmQzk3NjZQRlpVdHFVcjZLYldrK3paVTFhL1pySVhFenRyalRPZno3aHdLemlDZVhJYXJhSHRiWklNeisycEdnYXpDbXc0cVdBRnZFZGhvZFlwMFhxMHBWN0cxWVdZV2JPNHFoR3E0MitaOEJZdHJMV3ZsdU5QcFpBZWFGRlMxdnViUGdiZ3hzcWNwbkFhc3pCb3ZLYUZvRFE4Qkd0amZVT2w0TkFHMm5tUVYwNGZlSmd1bXZYMmZzclFFV1pnaEwwSm5WZFlrbjNET1pJZVJOODZScVBXQ21zdkdWcUVNUm53eFFBeHdTOEVNWW8zSXptWTIrQkNjTHA0TUtpdXl1aEltYW1sYlpGY05vTmw3dHArUkhkMThaalFJUkt5WGRGUmhOOTgvaHlLcXdYV05vN08xd2lhWG9ITjEwOFJFWlpXRXE2Z3JuSWZqemVnOGpkUmYxWEVMNGtrWGE1YkJqS3hvS2FsakJqZUhsVnhRNEdheWNwVzRsRE9BS3RuVHhIQXRPZnpPdFp3SEFNN3NxVlhrVjZ5dTZrYXAxbkhrWEtxV0YvNFhIcWplbk5LcUJqcFIzbDFjaDNFamcxK0VzZ2RRaHNkRzBCNEZNOXNXQVZXcHVBeWl3VFBsZVp4dDlWeVpWUzJxWGZSZVdxVEFpbHByOUFwb1dUanh5bWl0N053VjRKVHJpWnlPQTlCMGs3SEZmVUxvdXJtS1lIVm5SUXZxR0w1SE1IZHFGY1IycVdwbWNLNmVUd3gyZGlwV3J2aURpbHIrZktXcTNPV1JXZEhLd0E0ZXU4d2pjaGJlUnpGaWxxampaTjN1ZkNwZmtKMC9zY1ZwbllrNkwwUEk3N2x4ZFdDWjg3V2lXbTdCL0FHcXVRU251akdLc0I4Q0ptaUpxOHExcEtJVld5cU9pVEs2NnIxOEJOOHI3NC9BRTcxZmRDM3lQUzJNeGRPcG5FMXRsVnhEOUptVk9vZ2dOK3I0UGpBWFZGUGEzRWc1alZKR0ZWVUdOb2xIMjBHVnJVQjdCT3lTV3E2V3FZUWRXUjkycGNGTVlNd2NrYlNnQ0tDcUQ2N0RpaVd1MWc4TVFDOUJ5ZmNGcVcxTCtqTDcxNHFOQ3V6bm9TeHQwZGEyZ3RXTjFHOEYwQkswTk4wbnVpbWVsVUY5ZElkQWZqTzQ0VVQzQ2pRTG9VZUxISkZUTzNnbXBSdUlJT3Z3QlFDYnFOZW8zcXRaOWlGNnhWSzEzR1JsbzR6cWltcStDR2RUaVIxdVJZOG9xZ0UwMmhaQmE3OWtaWFBNcXV4UkhLbGEyc2FaV040bVJxWlVqMHZMQ0toa2pLbnFPUUhOdVNaVkpvS3ZBcVMxd3BFcXV2V0RDMUIyeXB3ckNQc1JNRVBWVE9ETUxKTUR2NnFlS1h3aTJKWVY1U3E0cUt5dmdHc0hDTGl1ajJqUjU5VjhnTXFTSjJGSlpSWEVIVlJIajNzRlByY3Q2T3BxbFcxR3BhdFFkdDBHdndmTTZuNjNJbnNHVkZoSkdhQnFncXFJVjZJc1hsbFpneVNQcTRSM2JudDN3aTVjditjTjJ5cVFMVzFUOTVLWVZzV1d0S2s0Y0I5VzUzV1FRZmxRWVI2V2w0SGFKWmp2VkUwRDV5dnErUktnWkNzNXFkQkVQNXNEOTRjQXZRTGxTZ05hU01BdEh4ODhCdU5RNDF6ZEZzWDMwektiY3MwTUxEL2loa3BRemwwd2lUcUtMVGZiS21DbXlZSUNuSzBJYmFpZUM0Q0c5aVN5TFE3Y0lNR1F3YXU2VEtvcTYwQXBsM1dONDBMWnBjYTFDS0tLOVZReXlJRW44dzBGOEY2Q0wyaDhvM2l4R3dDN3M3RVd6Q09xbWNBcFl4WUQ0anNBelZTMHNsMnQ5OHBBN3ZyS29waENWU29uYllwZ0g2bXZTbjI0cFRCVjRzZHRWM0J0TXE1azgyeStJQUR2VUowdUFsa0NWVHhJYVBtK1VOdS9xa1Y0RjFUekhYQ0dyWElBcUl0Qkt5cHFLOTlWdEFPVnM2NE80T2JYN3BITFZDcFlIY1Jtd3ZMUjdUdllBS0JCTjU4TEdWekR1RnoraFFiV2duY1F5Q1pBaytWYnNQU291ZjkzMjYxaVpnbWZDcHdSYkF2cW1TcXJpVTJQd2hqYW9PeVlxdEllZ1ZYVmlUc215dGE2Ykd5U3BZM2d5UnJwSXlBZWFXRER4dHBzWHdLeWFsTURLTlA3WUJYTXFFc2tVc2kydUM4Rk5BUHhBS1RWZlQxbzZWek0wRTBqRisxcldjVXVIdmR5Zzd2Z29GcGxYOEhwdkhwTUNPTVJVUEh6WmtJbnNxbEZLTlgvRUlPNTJFMFN4U3pPd29iMlZtUkxXNUQxWElVMHJiZ00xQXpXZ3lDN2ZlOEc3eFVBSy90YUVCYXQ3bHVxdHlQN0Vtc2FKUU9qNUYrbXJuWmZDdVlDZkJVQVd3U2h5ZDZwTVkvdkFIRzFVcU9ZcGJJL2d5NVQwQ01LbStVTzNnRnVDODVkZ2ZEVmVndVBEZklUcklCTHNMcmNnZGgzQ0ZnRlpqYUtKNEl2M0Y4QU5FcXZ1eFIxdFZLT2dMb0NhMWp4Ym9CQWtqNnY3ai9pY0ZiQTdmNHJmUm5RRExSVmlHMTNpMHZxQlFyWVZxQmJBRFpUMFpwaUhvU3p2UXBvcEtJRlMzc0UxSGZCV2xIWGQwSDdMbkFycXZvdWdNdGxqSEJnWm5oM0Vvei9CS2pMTUw0WjJBcTAraEVKcjlqYVZVQmJ2TnpDSVVpcm9DN0FXbW1GdzRvNUFLM010QjVWeXBaTVNGZ3MwNUp5R1Z3bHdCcXNFR0FBYTJaVTFDalVleFhHc0U0cktyaWlsQnZGek9LS28zQXVBcm9FNlFGUVUzdThZcE5Yd1M1aysxVFp0NVVyd291TjRLaVVFdytrM1pXRHAxUlhITlJxWGIyMVRzMzk5NDV5WlNnM1ZuWkZOUTlDRjNYZVp5cjVEZ0JYS2l3Q01hMk14ZVREWVhnUDFGc2Y5UU5LWmMwazgxUkprM3I2RVEzckNtQlZ5TEw3NUVqWjFwSVZESG9GdGlPQUhvQjBCZFRWeWxxQnNLS0tTK0FlQlhKVkxZK0NYQVN1R3ZPL0F1cTdHdUVqRGZHS2cxb0thMXovZG1taTlJOVNVR05obDBBdGZ1bEhBYXdvWXJuU2ttTlhBVnVHRWhyRVZYdlVGK0E1Q3QyUHFOT2pEZXR5bmE0Q21lVW9sbWVYTE40QXE3QzVTajEwUTd5amdsK3Q2Q054U1JIbUk1WCtDcHdyZVlCM1FmZHFuYTRxMjFLZEJ1YzRHb1pzbjQ5Wk9PaVZpbndIcUs5V3pqdmdld2VFaDJBVTUrdnR4WjlDZDlXcWtoNDlWMThFNW9qNnZWeW4wUlN0QXlHSU81ZWRYUktkNUIwVkdWWHEyeXIzeFlwKzVVdCtDNFFKNFAxTjMzOXBRTWpSZWpqNHZiL0RjcjZyUWMzTy8wcmptdFpwZVlDQmlDSGZDZW1SYk5oYksvcE5VUGMzd2ZLeTVmMkQ3T2xMMy91UGh2ZS9vVTRUMEY4ZitWTk0ydnlvaXYwaksrS0hRZmRIcSswYm5jejRvejczLytZNkxiS3cxby81QjdlT2YxUmwvMGR1OUI5dG4vOWJ2cmYvait2MGg2dHRuMnRwL3IvNDgxOXk0L3p2NTM5MXV2enpmd0RpZno2cGhUMU1QZ0FBQUFCSlJVNUVya0pnZ2c9PSIpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ZGlyZWN0aW9uOmx0cjtoZWlnaHQ6MTMwcHg7dG91Y2gtYWN0aW9uOm1hbmlwdWxhdGlvbjt3aWR0aDoxMDAlfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3N7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZTttYXJnaW46M3B4IC0zcHg7cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzOmRpc2FibGVke2NvbG9yOiM5OTk7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6ZGlzYWJsZWQ6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNvbG9yLXBpY2tlciAuY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzc3tiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czo1MCU7Ym94LXNoYWRvdzoxcHggMXB4IDVweCAjMzMzO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwcHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTVweDt0ZXh0LWFsaWduOmNlbnRlcjt0b3A6LTVweDt3aWR0aDoxMHB4fS5jb2xvci1waWNrZXIgLmNwLXJlbW92ZS1jb2xvci1idXR0b24tY2xhc3M6YmVmb3Jle2JvdHRvbTozLjVweDtjb250ZW50OiJ4IjtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MTBweDtwb3NpdGlvbjpyZWxhdGl2ZX0nXSxlbmNhcHN1bGF0aW9uOjJ9KSxoMy5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTpVZ30se3R5cGU6ZzN9XSxoMy5wcm9wRGVjb3JhdG9ycz17ZGlhbG9nRWxlbWVudDpbe3R5cGU6WmEsYXJnczpbImRpYWxvZ1BvcHVwIix7c3RhdGljOiEwfV19XSxodWVTbGlkZXI6W3t0eXBlOlphLGFyZ3M6WyJodWVTbGlkZXIiLHtzdGF0aWM6ITB9XX1dLGFscGhhU2xpZGVyOlt7dHlwZTpaYSxhcmdzOlsiYWxwaGFTbGlkZXIiLHtzdGF0aWM6ITB9XX1dLGhhbmRsZUVzYzpbe3R5cGU6d3ksYXJnczpbImRvY3VtZW50OmtleXVwLmVzYyIsWyIkZXZlbnQiXV19XSxoYW5kbGVFbnRlcjpbe3R5cGU6d3ksYXJnczpbImRvY3VtZW50OmtleXVwLmVudGVyIixbIiRldmVudCJdXX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGgzLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6ImNvbG9yLXBpY2tlciIsdGVtcGxhdGU6JzxkaXYgI2RpYWxvZ1BvcHVwIGNsYXNzPSJjb2xvci1waWNrZXIiIFtjbGFzcy5vcGVuXT0ic2hvdyIgW3N0eWxlLmRpc3BsYXldPSIhc2hvdyA/IFwnbm9uZVwnIDogXCdibG9ja1wnIiBbc3R5bGUudmlzaWJpbGl0eV09ImhpZGRlbiA/IFwnaGlkZGVuXCcgOiBcJ3Zpc2libGVcJyIgW3N0eWxlLnRvcC5weF09InRvcCIgW3N0eWxlLmxlZnQucHhdPSJsZWZ0IiBbc3R5bGUucG9zaXRpb25dPSJwb3NpdGlvbiIgW3N0eWxlLmhlaWdodC5weF09ImNwSGVpZ2h0IiBbc3R5bGUud2lkdGgucHhdPSJjcFdpZHRoIiAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiPlxuICA8ZGl2ICpuZ0lmPSJjcERpYWxvZ0Rpc3BsYXk9PVwncG9wdXBcJyIgY2xhc3M9ImFycm93IGFycm93LXt7Y3BVc2VQb3NpdGlvbn19IiBbc3R5bGUudG9wLnB4XT0iYXJyb3dUb3AiPjwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9IihjcENvbG9yTW9kZSB8fMKgMSkgPT09IDEiIGNsYXNzPSJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIgW3NsaWRlcl0gW3JnWF09IjEiIFtyZ1ldPSIxIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09Imh1ZVNsaWRlckNvbG9yIiAobmV3VmFsdWUpPSJvbkNvbG9yQ2hhbmdlKCRldmVudCkiIChkcmFnU3RhcnQpPSJvbkRyYWdTdGFydChcJ3NhdHVyYXRpb24tbGlnaHRuZXNzXCcpIiAoZHJhZ0VuZCk9Im9uRHJhZ0VuZChcJ3NhdHVyYXRpb24tbGlnaHRuZXNzXCcpIj5cbiAgICA8ZGl2IGNsYXNzPSJjdXJzb3IiIFtzdHlsZS50b3AucHhdPSJzbGlkZXI/LnYiIFtzdHlsZS5sZWZ0LnB4XT0ic2xpZGVyPy5zIj48L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz0iaHVlLWFscGhhIGJveCI+XG4gICAgPGRpdiBjbGFzcz0ibGVmdCI+XG4gICAgICA8ZGl2IGNsYXNzPSJzZWxlY3RlZC1jb2xvci1iYWNrZ3JvdW5kIj48L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz0ic2VsZWN0ZWQtY29sb3IiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0ic2VsZWN0ZWRDb2xvciI+PC9kaXY+XG5cbiAgICAgIDxidXR0b24gKm5nSWY9ImNwQWRkQ29sb3JCdXR0b24iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Int7Y3BBZGRDb2xvckJ1dHRvbkNsYXNzfX0iIFtkaXNhYmxlZF09ImNwUHJlc2V0Q29sb3JzICYmIGNwUHJlc2V0Q29sb3JzLmxlbmd0aCA+PSBjcE1heFByZXNldENvbG9yc0xlbmd0aCIgKGNsaWNrKT0ib25BZGRQcmVzZXRDb2xvcigkZXZlbnQsIHNlbGVjdGVkQ29sb3IpIj5cbiAgICAgICAge3tjcEFkZENvbG9yQnV0dG9uVGV4dH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9InJpZ2h0Ij5cbiAgICAgIDxkaXYgKm5nSWY9ImNwQWxwaGFDaGFubmVsPT09XCdkaXNhYmxlZFwnIiBzdHlsZT0iaGVpZ2h0OiAxNnB4OyI+PC9kaXY+XG5cbiAgICAgIDxkaXYgI2h1ZVNsaWRlciBjbGFzcz0iaHVlIiBbc2xpZGVyXSBbcmdYXT0iMSIgW3N0eWxlLmRpc3BsYXldPSIoY3BDb2xvck1vZGUgfHzCoDEpID09PSAxID8gXCdibG9ja1wnIDogXCdub25lXCciIChuZXdWYWx1ZSk9Im9uSHVlQ2hhbmdlKCRldmVudCkiIChkcmFnU3RhcnQpPSJvbkRyYWdTdGFydChcJ2h1ZVwnKSIgKGRyYWdFbmQpPSJvbkRyYWdFbmQoXCdodWVcJykiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJjdXJzb3IiIFtzdHlsZS5sZWZ0LnB4XT0ic2xpZGVyPy5oIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICN2YWx1ZVNsaWRlciBjbGFzcz0idmFsdWUiIFtzbGlkZXJdIFtyZ1hdPSIxIiBbc3R5bGUuZGlzcGxheV09IihjcENvbG9yTW9kZSB8fMKgMSkgPT09IDIgPyBcJ2Jsb2NrXCc6IFwnbm9uZVwnIiAobmV3VmFsdWUpPSJvblZhbHVlQ2hhbmdlKCRldmVudCkiIChkcmFnU3RhcnQpPSJvbkRyYWdTdGFydChcJ3ZhbHVlXCcpIiAoZHJhZ0VuZCk9Im9uRHJhZ0VuZChcJ3ZhbHVlXCcpIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iY3Vyc29yIiBbc3R5bGUucmlnaHQucHhdPSJzbGlkZXI/LnYiPjwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgI2FscGhhU2xpZGVyIGNsYXNzPSJhbHBoYSIgW3NsaWRlcl0gW3JnWF09IjEiIFtzdHlsZS5kaXNwbGF5XT0iY3BBbHBoYUNoYW5uZWwgPT09IFwnZGlzYWJsZWRcJyA/IFwnbm9uZVwnIDogXCdibG9ja1wnIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09ImFscGhhU2xpZGVyQ29sb3IiIChuZXdWYWx1ZSk9Im9uQWxwaGFDaGFuZ2UoJGV2ZW50KSIgKGRyYWdTdGFydCk9Im9uRHJhZ1N0YXJ0KFwnYWxwaGFcJykiIChkcmFnRW5kKT0ib25EcmFnRW5kKFwnYWxwaGFcJykiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJjdXJzb3IiIFtzdHlsZS5sZWZ0LnB4XT0ic2xpZGVyPy5hIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPSIhY3BEaXNhYmxlSW5wdXQgJiYgKGNwQ29sb3JNb2RlIHx8wqAxKSA9PT0gMSIgY2xhc3M9ImNteWstdGV4dCIgW3N0eWxlLmRpc3BsYXldPSJmb3JtYXQgIT09IDMgPyBcJ25vbmVcJyA6IFwnYmxvY2tcJyI+XG4gICAgPGRpdiBjbGFzcz0iYm94Ij5cbiAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKiIgbWluPSIwIiBtYXg9IjEwMCIgW3RleHRdIFtyZ109IjEwMCIgW3ZhbHVlXT0iY215a1RleHQ/LmMiIChrZXl1cC5lbnRlcik9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSIgKG5ld1ZhbHVlKT0ib25DeWFuSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKiIgbWluPSIwIiBtYXg9IjEwMCIgW3RleHRdIFtyZ109IjEwMCIgW3ZhbHVlXT0iY215a1RleHQ/Lm0iIChrZXl1cC5lbnRlcik9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSIgKG5ld1ZhbHVlKT0ib25NYWdlbnRhSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKiIgbWluPSIwIiBtYXg9IjEwMCIgW3RleHRdIFtyZ109IjEwMCIgW3ZhbHVlXT0iY215a1RleHQ/LnkiIChrZXl1cC5lbnRlcik9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSIgKG5ld1ZhbHVlKT0ib25ZZWxsb3dJbnB1dCgkZXZlbnQpIiAvPlxuICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0qIiBtaW49IjAiIG1heD0iMTAwIiBbdGV4dF0gW3JnXT0iMTAwIiBbdmFsdWVdPSJjbXlrVGV4dD8uayIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkJsYWNrSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCAqbmdJZj0iY3BBbHBoYUNoYW5uZWwhPT1cJ2Rpc2FibGVkXCciIHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0rKFtcXC4sXVswLTldezEsMn0pPyIgbWluPSIwIiBtYXg9IjEiIHN0ZXA9IjAuMSIgW3RleHRdIFtyZ109IjEiIFt2YWx1ZV09ImNteWtUZXh0Py5hIiAoa2V5dXAuZW50ZXIpPSJvbkFjY2VwdENvbG9yKCRldmVudCkiIChuZXdWYWx1ZSk9Im9uQWxwaGFJbnB1dCgkZXZlbnQpIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgIDxkaXYgY2xhc3M9ImJveCI+XG4gICAgICA8ZGl2PkM8L2Rpdj48ZGl2Pk08L2Rpdj48ZGl2Plk8L2Rpdj48ZGl2Pks8L2Rpdj48ZGl2ICpuZ0lmPSJjcEFscGhhQ2hhbm5lbCE9PVwnZGlzYWJsZWRcJyIgPkE8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj0iIWNwRGlzYWJsZUlucHV0ICYmIChjcENvbG9yTW9kZSB8fMKgMSkgPT09IDEgIiBjbGFzcz0iaHNsYS10ZXh0IiBbc3R5bGUuZGlzcGxheV09ImZvcm1hdCAhPT0gMiA/IFwnbm9uZVwnIDogXCdibG9ja1wnIj5cbiAgICA8ZGl2IGNsYXNzPSJib3giPlxuICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0qIiBtaW49IjAiIG1heD0iMzYwIiBbdGV4dF0gW3JnXT0iMzYwIiBbdmFsdWVdPSJoc2xhVGV4dD8uaCIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkh1ZUlucHV0KCRldmVudCkiIC8+XG4gICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBwYXR0ZXJuPSJbMC05XSoiIG1pbj0iMCIgbWF4PSIxMDAiIFt0ZXh0XSBbcmddPSIxMDAiIFt2YWx1ZV09ImhzbGFUZXh0Py5zIiAoa2V5dXAuZW50ZXIpPSJvbkFjY2VwdENvbG9yKCRldmVudCkiIChuZXdWYWx1ZSk9Im9uU2F0dXJhdGlvbklucHV0KCRldmVudCkiIC8+XG4gICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBwYXR0ZXJuPSJbMC05XSoiIG1pbj0iMCIgbWF4PSIxMDAiIFt0ZXh0XSBbcmddPSIxMDAiIFt2YWx1ZV09ImhzbGFUZXh0Py5sIiAoa2V5dXAuZW50ZXIpPSJvbkFjY2VwdENvbG9yKCRldmVudCkiIChuZXdWYWx1ZSk9Im9uTGlnaHRuZXNzSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCAqbmdJZj0iY3BBbHBoYUNoYW5uZWwhPT1cJ2Rpc2FibGVkXCciIHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0rKFtcXC4sXVswLTldezEsMn0pPyIgbWluPSIwIiBtYXg9IjEiIHN0ZXA9IjAuMSIgW3RleHRdIFtyZ109IjEiIFt2YWx1ZV09ImhzbGFUZXh0Py5hIiAoa2V5dXAuZW50ZXIpPSJvbkFjY2VwdENvbG9yKCRldmVudCkiIChuZXdWYWx1ZSk9Im9uQWxwaGFJbnB1dCgkZXZlbnQpIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz0iYm94Ij5cbiAgICAgIDxkaXY+SDwvZGl2PjxkaXY+UzwvZGl2PjxkaXY+TDwvZGl2PjxkaXYgKm5nSWY9ImNwQWxwaGFDaGFubmVsIT09XCdkaXNhYmxlZFwnIj5BPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9IiFjcERpc2FibGVJbnB1dCAmJiAoY3BDb2xvck1vZGUgfHzCoDEpID09PSAxICIgW3N0eWxlLmRpc3BsYXldPSJmb3JtYXQgIT09IDEgPyBcJ25vbmVcJyA6IFwnYmxvY2tcJyIgY2xhc3M9InJnYmEtdGV4dCI+XG4gICAgPGRpdiBjbGFzcz0iYm94Ij5cbiAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKiIgbWluPSIwIiBtYXg9IjI1NSIgW3RleHRdIFtyZ109IjI1NSIgW3ZhbHVlXT0icmdiYVRleHQ/LnIiIChrZXl1cC5lbnRlcik9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSIgKG5ld1ZhbHVlKT0ib25SZWRJbnB1dCgkZXZlbnQpIiAvPlxuICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0qIiBtaW49IjAiIG1heD0iMjU1IiBbdGV4dF0gW3JnXT0iMjU1IiBbdmFsdWVdPSJyZ2JhVGV4dD8uZyIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkdyZWVuSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKiIgbWluPSIwIiBtYXg9IjI1NSIgW3RleHRdIFtyZ109IjI1NSIgW3ZhbHVlXT0icmdiYVRleHQ/LmIiIChrZXl1cC5lbnRlcik9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSIgKG5ld1ZhbHVlKT0ib25CbHVlSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCAqbmdJZj0iY3BBbHBoYUNoYW5uZWwhPT1cJ2Rpc2FibGVkXCciIHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0rKFtcXC4sXVswLTldezEsMn0pPyIgbWluPSIwIiBtYXg9IjEiIHN0ZXA9IjAuMSIgW3RleHRdIFtyZ109IjEiIFt2YWx1ZV09InJnYmFUZXh0Py5hIiAoa2V5dXAuZW50ZXIpPSJvbkFjY2VwdENvbG9yKCRldmVudCkiIChuZXdWYWx1ZSk9Im9uQWxwaGFJbnB1dCgkZXZlbnQpIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz0iYm94Ij5cbiAgICAgIDxkaXY+UjwvZGl2PjxkaXY+RzwvZGl2PjxkaXY+QjwvZGl2PjxkaXYgKm5nSWY9ImNwQWxwaGFDaGFubmVsIT09XCdkaXNhYmxlZFwnIiA+QTwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPSIhY3BEaXNhYmxlSW5wdXQgJiYgKGNwQ29sb3JNb2RlIHx8wqAxKSA9PT0gMSIgY2xhc3M9ImhleC10ZXh0IiBbY2xhc3MuaGV4LWFscGhhXT0iY3BBbHBoYUNoYW5uZWw9PT1cJ2ZvcmNlZFwnIlxuICAgIFtzdHlsZS5kaXNwbGF5XT0iZm9ybWF0ICE9PSAwID8gXCdub25lXCcgOiBcJ2Jsb2NrXCciPlxuICAgIDxkaXYgY2xhc3M9ImJveCI+XG4gICAgICA8aW5wdXQgW3RleHRdIFt2YWx1ZV09ImhleFRleHQiIChibHVyKT0ib25IZXhJbnB1dChudWxsKSIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkhleElucHV0KCRldmVudCkiLz5cbiAgICAgIDxpbnB1dCAqbmdJZj0iY3BBbHBoYUNoYW5uZWw9PT1cJ2ZvcmNlZFwnIiB0eXBlPSJudW1iZXIiIHBhdHRlcm49IlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT8iIG1pbj0iMCIgbWF4PSIxIiBzdGVwPSIwLjEiIFt0ZXh0XSBbcmddPSIxIiBbdmFsdWVdPSJoZXhBbHBoYSIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkFscGhhSW5wdXQoJGV2ZW50KSIvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz0iYm94Ij5cbiAgICAgIDxkaXY+SGV4PC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjcEFscGhhQ2hhbm5lbD09PVwnZm9yY2VkXCciPkE8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj0iIWNwRGlzYWJsZUlucHV0ICYmIChjcENvbG9yTW9kZSB8fMKgMSkgPT09IDIiIGNsYXNzPSJ2YWx1ZS10ZXh0Ij5cbiAgICA8ZGl2IGNsYXNzPSJib3giPlxuICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0qIiBtaW49IjAiIG1heD0iMTAwIiBbdGV4dF0gW3JnXT0iMTAwIiBbdmFsdWVdPSJoc2xhVGV4dD8ubCIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvblZhbHVlSW5wdXQoJGV2ZW50KSIgLz5cbiAgICAgIDxpbnB1dCAqbmdJZj0iY3BBbHBoYUNoYW5uZWwhPT1cJ2Rpc2FibGVkXCciIHR5cGU9Im51bWJlciIgcGF0dGVybj0iWzAtOV0rKFtcXC4sXVswLTldezEsMn0pPyIgbWluPSIwIiBtYXg9IjEiIHN0ZXA9IjAuMSIgIFt0ZXh0XSBbcmddPSIxIiBbdmFsdWVdPSJoc2xhVGV4dD8uYSIgKGtleXVwLmVudGVyKT0ib25BY2NlcHRDb2xvcigkZXZlbnQpIiAobmV3VmFsdWUpPSJvbkFscGhhSW5wdXQoJGV2ZW50KSIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9ImJveCI+XG4gICAgICA8ZGl2PlY8L2Rpdj48ZGl2PkE8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj0iIWNwRGlzYWJsZUlucHV0ICYmIChjcENvbG9yTW9kZSB8fMKgMSkgPT09IDEiIGNsYXNzPSJ0eXBlLXBvbGljeSI+XG4gICAgPHNwYW4gY2xhc3M9InR5cGUtcG9saWN5LWFycm93IiAoY2xpY2spPSJvbkZvcm1hdFRvZ2dsZSgtMSkiPjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz0idHlwZS1wb2xpY3ktYXJyb3ciIChjbGljayk9Im9uRm9ybWF0VG9nZ2xlKDEpIj48L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9ImNwUHJlc2V0Q29sb3JzPy5sZW5ndGggfHwgY3BBZGRDb2xvckJ1dHRvbiIgY2xhc3M9InByZXNldC1hcmVhIj5cbiAgICA8aHI+XG5cbiAgICA8ZGl2IGNsYXNzPSJwcmVzZXQtbGFiZWwiPnt7Y3BQcmVzZXRMYWJlbH19PC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPSJjcFByZXNldENvbG9ycz8ubGVuZ3RoIiBjbGFzcz0ie3tjcFByZXNldENvbG9yc0NsYXNzfX0iPlxuICAgICAgPGRpdiAqbmdGb3I9ImxldCBjb2xvciBvZiBjcFByZXNldENvbG9ycyIgY2xhc3M9InByZXNldC1jb2xvciIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09ImNvbG9yIiAoY2xpY2spPSJzZXRDb2xvckZyb21TdHJpbmcoY29sb3IpIj5cbiAgICAgICAgPHNwYW4gKm5nSWY9ImNwQWRkQ29sb3JCdXR0b24iIGNsYXNzPSJ7e2NwUmVtb3ZlQ29sb3JCdXR0b25DbGFzc319IiAoY2xpY2spPSJvblJlbW92ZVByZXNldENvbG9yKCRldmVudCwgY29sb3IpIj48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9IiFjcFByZXNldENvbG9ycz8ubGVuZ3RoICYmIGNwQWRkQ29sb3JCdXR0b24iIGNsYXNzPSJ7e2NwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3N9fSI+e3tjcFByZXNldEVtcHR5TWVzc2FnZX19PC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9ImNwT0tCdXR0b24gfHwgY3BDYW5jZWxCdXR0b24iIGNsYXNzPSJidXR0b24tYXJlYSI+XG4gICAgPGJ1dHRvbiAqbmdJZj0iY3BDYW5jZWxCdXR0b24iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Int7Y3BDYW5jZWxCdXR0b25DbGFzc319IiAoY2xpY2spPSJvbkNhbmNlbENvbG9yKCRldmVudCkiPnt7Y3BDYW5jZWxCdXR0b25UZXh0fX08L2J1dHRvbj5cblxuICAgIDxidXR0b24gKm5nSWY9ImNwT0tCdXR0b24iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Int7Y3BPS0J1dHRvbkNsYXNzfX0iIChjbGljayk9Im9uQWNjZXB0Q29sb3IoJGV2ZW50KSI+e3tjcE9LQnV0dG9uVGV4dH19PC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGVuY2Fwc3VsYXRpb246SG4uTm9uZSxzdHlsZXM6WycuY29sb3ItcGlja2Vyey1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgIzc3NztjdXJzb3I6ZGVmYXVsdDtoZWlnaHQ6YXV0bztwb3NpdGlvbjphYnNvbHV0ZTt1c2VyLXNlbGVjdDpub25lO3dpZHRoOjIzMHB4O3otaW5kZXg6MTAwMH0uY29sb3ItcGlja2VyICp7Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtc2l6ZToxMXB4O21hcmdpbjowfS5jb2xvci1waWNrZXIgaW5wdXR7Y29sb3I6IzAwMDtmb250LXNpemU6MTNweDtoZWlnaHQ6MjZweDttaW4td2lkdGg6MDt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDowfS5jb2xvci1waWNrZXIgaW5wdXQ6LW1vei1zdWJtaXQtaW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0Oi1tb3otdWktaW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0OmludmFsaWR7Ym94LXNoYWRvdzpub25lfS5jb2xvci1waWNrZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sLmNvbG9yLXBpY2tlciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH0uY29sb3ItcGlja2VyIC5hcnJvd3tib3JkZXItc3R5bGU6c29saWQ7aGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MDt6LWluZGV4Ojk5OTk5OX0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3B7Ym9yZGVyLWNvbG9yOiM3NzcgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2xlZnQ6OHB4fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbXtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzc3Nztib3JkZXItd2lkdGg6MTBweCA1cHg7bGVmdDo4cHg7dG9wOi0yMHB4fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtdG9wLC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXRvcC1sZWZ0e2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjNzc3O2JvcmRlci13aWR0aDo1cHggMTBweDtib3R0b206OHB4O3JpZ2h0Oi0yMXB4fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXJpZ2h0LXRvcCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3AtcmlnaHR7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50ICM3NzcgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2JvdHRvbTo4cHg7bGVmdDotMjBweH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b20tbGVmdCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtYm90dG9te2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjNzc3O2JvcmRlci13aWR0aDo1cHggMTBweDtyaWdodDotMjFweDt0b3A6OHB4fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbS1yaWdodCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodC1ib3R0b217Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50ICM3NzcgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2xlZnQ6LTIwcHg7dG9wOjhweH0uY29sb3ItcGlja2VyIC5jdXJzb3J7Ym9yZGVyOjJweCBzb2xpZCAjMjIyO2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpkZWZhdWx0O2hlaWdodDoxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjE2cHh9LmNvbG9yLXBpY2tlciAuYm94e2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjRweCA4cHh9LmNvbG9yLXBpY2tlciAubGVmdHtwYWRkaW5nOjE2cHggOHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5jb2xvci1waWNrZXIgLnJpZ2h0e2ZsZXg6MSAxIGF1dG87cGFkZGluZzoxMnB4IDhweH0uY29sb3ItcGlja2VyIC5idXR0b24tYXJlYXtwYWRkaW5nOjAgMTZweCAxNnB4O3RleHQtYWxpZ246cmlnaHR9LmNvbG9yLXBpY2tlciAuYnV0dG9uLWFyZWEgYnV0dG9ue21hcmdpbi1sZWZ0OjhweH0uY29sb3ItcGlja2VyIC5wcmVzZXQtYXJlYXtwYWRkaW5nOjRweCAxNXB4fS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtbGFiZWx7Y29sb3I6IzU1NTtmb250LXNpemU6MTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzo0cHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCV9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1jb2xvcntib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7Ym9yZGVyLXJhZGl1czoyNSU7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjE4cHg7bWFyZ2luOjRweCA2cHggOHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjE4cHh9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1lbXB0eS1tZXNzYWdle2ZvbnQtc3R5bGU6aXRhbGljO21hcmdpbi1ib3R0b206OHB4O21hcmdpbi10b3A6NHB4O21pbi1oZWlnaHQ6MThweDt0ZXh0LWFsaWduOmNlbnRlcn0uY29sb3ItcGlja2VyIC5oZXgtdGV4dHtmb250LXNpemU6MTFweDtwYWRkaW5nOjRweCA4cHg7d2lkdGg6MTAwJX0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94e3BhZGRpbmc6MCAyNHB4IDhweCA4cHh9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveCBkaXZ7Y2xlYXI6bGVmdDtjb2xvcjojNTU1O2ZsZXg6MSAxIGF1dG87ZmxvYXQ6bGVmdDt0ZXh0LWFsaWduOmNlbnRlcn0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94IGlucHV0e2JvcmRlcjoxcHggc29saWQgI2E5YTlhOTtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6MXB4fS5jb2xvci1waWNrZXIgLmhleC1hbHBoYSAuYm94IGRpdjpmaXJzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oZXgtYWxwaGEgLmJveCBpbnB1dDpmaXJzdC1jaGlsZHtmbGV4LWdyb3c6MzttYXJnaW4tcmlnaHQ6OHB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHR7Zm9udC1zaXplOjExcHg7cGFkZGluZzo0cHggOHB4O3dpZHRoOjEwMCV9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3h7cGFkZGluZzowIDI0cHggOHB4IDhweH0uY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3h7cGFkZGluZzowIDhweCA4cHh9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggZGl2LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGRpdiwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXYsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGRpdntjb2xvcjojNTU1O2ZsZXg6MSAxIGF1dG87bWFyZ2luLXJpZ2h0OjhweDt0ZXh0LWFsaWduOmNlbnRlcn0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjB9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGlucHV0e2JvcmRlcjoxcHggc29saWQgI2E5YTlhOTtmbGV4OjE7ZmxvYXQ6bGVmdDttYXJnaW46MCA4cHggMCAwO3BhZGRpbmc6MXB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGlucHV0Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxkLC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowfS5jb2xvci1waWNrZXIgLmh1ZS1hbHBoYXthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbTozcHh9LmNvbG9yLXBpY2tlciAuaHVle2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZQUFBQVFDQVlBQUFEMDZJWW5BQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3a1VGV2JDQ0FBQUFGeEpSRUZVYU43dDBrRUtnMEFRQU1FMng4My9uMnF1NXFDZ0QxaURoQ29ZZHBuYlFDOWJiWTFxVk8vanZjNmszYWQ5MXM3LzdGMS9jc2dQcnVqdVExN0JEWVNGc0JBV3dnSmhJU3lFQmNKQ1dBZ0xoSVd3RUJZSWkyZjdBci8xVENnRkgyWDlBQUFBQUVsRlRrU3VRbUNDIik7ZGlyZWN0aW9uOmx0cn0uY29sb3ItcGlja2VyIC5odWUsLmNvbG9yLXBpY2tlciAudmFsdWV7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6MTZweDttYXJnaW4tYm90dG9tOjE2cHg7d2lkdGg6MTAwJX0uY29sb3ItcGlja2VyIC52YWx1ZXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQ1RrbEVRVlI0MnUzU1lVY3JBQmhBNFUyU2ttUkpNbVdTSmtsS0ppV1pacEtVSkpza0tVbWFURkltS1pPVXpNeVNwR1JtbGlSTkppbEpTcEtTSkV0bVNwSXBtV21TZE83MzYvNkQreDdPUDNnVUNvV0N2MWNxbFNRbEpaR2NuRXhLU2dxcHFhbWtwYVdSbnA1T1JrWUdtWm1acUZRcXNyS3l5TTdPSmljbmg5emNYTlJxTlhsNWVlVG41NlBSYUNnb0tLQ3dzSkNpb2lLMFdpM0Z4Y1dVbEpSUVdscEtXVmtaNWVYbFZGUlVVRmxaaVU2bm82cXFpdXJxYW1wcWFxaXRyYVd1cmc2OVhrOTlmVDBHZ3dHajBVaERRd09OalkwME5UWFIzTnhNUzBzTHJhMnR0TFcxMGQ3ZWpzbGt3bXcyMDlIUlFXZG5KMTFkWFhSM2Q5UFQwME52Ynk5OWZYMzA5L2N6TUREQTRPQWdGb3VGb2FFaHJGWXJ3OFBEakl5TU1EbzZ5dGpZR0RhYmpmSHhjU1ltSnBpY25HUnFhZ3E3M2M3MDlEUXpNelBNenM0eU56ZkgvUHc4RG9jRHA5T0p5K1hDN1hhenNMREE0dUlpUzB0TExDOHZzN0t5d3VycUttdHJhM2c4SHJ4ZUx6NmZENy9mei9yNk9oc2JHMnh1YnJLMXRjWDI5amFCUUlDZG5SMkN3U0M3dTd2czdlMnh2Ny9Qd2NFQmg0ZUhIQjBkY1h4OHpNbkpDYWVucDV5ZG5YRitmczdGeFFXWGw1ZGNYVjF4ZlgzTnpjME50N2UzM04zZEVRcUZ1TCsvNStIaGdYQTRUQ1FTNGZIeGthZW5KNTZmbjNsNWVlSDE5WlZvTk1yYjJ4dnY3Kzk4Zkh3UWk4V0l4K044Zm42U1NDVDQrdnJpKy91Ym41OGZmbjkvK1ZjS2dTV3dCSmJBRWxnQ1MyQUpMSUVsc0FTV3dCSllBa3RnQ1N5QkpiQUVsc0FTV0FKTFlBa3NnU1d3QkpiQUVsZ0NTMkFKTElFbHNQNC9XSDhBbUo1WjZqSFM0aDhBQUFBQVNVVk9SSzVDWUlJPSIpO2RpcmVjdGlvbjpydGx9LmNvbG9yLXBpY2tlciAuYWxwaGF7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBUUNBWUFBQUQwNklZbkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0QUlXRHdZUWxaTWEzZ0FBQVdWSlJFRlVhTjd0bUVHTzZqQVFSQ3NPQXJIZ0JweUFKWUdqY0dvY3hBbTRBMklIcG1vV0UwZUJIK2V6bUZsTnZVMDZzaEozVzZWRWVsV01VUUFJSUY5ZjZxWnBpbXNBMUxZdFMydUY1MS91MjdZVkFGWlZSVWtFb0dIZFBWL3NJY2JJRUlJa1VkSS85WGE3bmV5djYxK1NXRlVWQVZDU2N0MDBUV24yZnY2dTMrRWNmZDN0WHp5LzArbkVVdStTUGpvL2txenJtaVFwU2NONnY5OFhld2ZBOC9sTWtpTEoyV3hHU1VvcGNUNmZNNlUwTlg5L2ZyZmJqZXYxV3RmcmxaZkxoWWZEUVFIRy9BSU9sbkd3aklObEhDeGpIQ3pqWUptL1RKV2RDd3F1SlhzZUZGekd3RE5OZWlLTU9KVE84eFFkRFFhZUIyOStLOWVmZUxhQm85Sjd2ZHZ0SmoxUmpGRmpmaXY3cXY5NXRqeC83bGVTUWdoOTNlMWZmTWVJcDZPK1lRamhvL043OTF0MVhWT1NTSTdOLy9LKzQvR294V0xCeCtQQjUvT3A1WExKKy8zT2xKSldxeFUzbTgzb3Z2NWlHZjhLallObEhDeGpIQ3pqWUJrSHk1Z2Y1Z3VzdlFVN1UzN2pUQUFBQUFCSlJVNUVya0pnZ2c9PSIpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ZGlyZWN0aW9uOmx0cjtoZWlnaHQ6MTZweDt3aWR0aDoxMDAlfS5jb2xvci1waWNrZXIgLnR5cGUtcG9saWN5e2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJJQUFBQWdDQVlBQUFBZmZDanhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQUNld0FBQW5zQjAxQ08zQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFJQVNVUkJWRWlKN1pZOWF4UlJGSWFmc3hNU3RyTFFKcEFncEJGaGkrQzl3MVlTbzAwSTZSWi9nOXZacEJmL1FPcjRHeVJna1NLTlNyQWFkc1pxUUd3Q2t1QVd5UlpKc3lTd3ZoWjdOL3ZoenJnYkxIM0xkODU5N2pseno1MHpKb2t5eFhIOERxRFZhcjBxaTZ2OEJiSXRxU0dwRWNmeGRsbXNGV1hrdlg4QWZBVldnM1VLUEVuVDlHS3VqTXpzQUZnWnNWYUNOMVZUUWQ3N1hVbnJnRTFrdis2OTM1MjY4V1JwenJuSFp2WVJXQzdZdkMzcFJaWmwzd296cXRWcWl5SDlJZ2pBc3BrZDFHcTF4VUpRdFZyZEI5WktJQU90aGRnL1FjNjVMVWs3d05JTW9DVkpPODY1cllGaGtxalg2L2Q3dlY0R1BKd0JNcW9mVVJTNUpFazZGWUJlci9lZVliL01vOVd3Rm5QT3ZRYmVBdmZ1QUFLNEJONHNBSnRBRy9nSklFbG1OdWlKeWJhM0VHTm1aaVBlWnVFVm1WZWxsL1kvNk4rQ3pEbjNBWGhFT09vN0h2LzNCZUF6OEl6UWtNUG5KYnVQeDF3Qyt5WUo3LzBuWUlQNVMvMEZIS2RwK3J3Q0VFWFJTL3JmNUhsMUd0YjJNMGlTcENPcENaelBBVG1YMUV5U3BITUxBc2l5N01qTURvSHJHU0RYWm5hWVpkblJ3Qmg3SjkxdXR3bWN6QUE2Q2JHM0dnUGxlWDRqcVVIL2ExQ2t0cVJHbnVjM2hTQ0FNQjMyZ0tzcGtDdGdiM0tDUU1ta2plUDRXTkpUaHJOTlp2YWwxV3B0VElzdjdKdFE0dG1JZFJhOHFTb0VwV2w2WVdaTm9BTjB6S3haTlBlaHBMU0JadjJ0K1EwQ0o5bExuQVJRTEFBQUFBQkpSVTVFcmtKZ2dnPT0iKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjhweCAxNnB4O2hlaWdodDoyNHB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEycHg7dG9wOjIxOHB4O3dpZHRoOjE2cHh9LmNvbG9yLXBpY2tlciAudHlwZS1wb2xpY3kgLnR5cGUtcG9saWN5LWFycm93e2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjUwJTt3aWR0aDoxMDAlfS5jb2xvci1waWNrZXIgLnNlbGVjdGVkLWNvbG9ye2JvcmRlcjoxcHggc29saWQgI2E5YTlhOTtib3JkZXItcmFkaXVzOjUwJTtoZWlnaHQ6NDBweDtsZWZ0OjhweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTZweDt3aWR0aDo0MHB4fS5jb2xvci1waWNrZXIgLnNlbGVjdGVkLWNvbG9yLWJhY2tncm91bmR7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ2dBQUFBb0NBWUFBQUNNL3JodEFBQUFoMGxFUVZSWVIrMlcwUWxBTVFnRDYwemRmd09kcWE4VG1JL3dRTXI1SzBJNWJaTEl6TE9hMm50MzdWVlZiZCtkRHg1b2JnQ0MzS0JMd0oyZmY0UG5WaWRrZit1Y0lodzgwSFFhQ0xvM0RNSDNDUkszaUZzbUFXVmw2aFBORHd0OEV2TkU1cStZdUVYY01na29uVk02U2R5Q29FdkFuWjh2MUhqeDgxN01pbG14U1VCNXJkTEpEeWNaZ1VBWlVjaC9BQUFBQUVsRlRrU3VRbUNDIik7Ym9yZGVyLXJhZGl1czo1MCU7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweH0uY29sb3ItcGlja2VyIC5zYXR1cmF0aW9uLWxpZ2h0bmVzc3tiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFPWUFBQUNDQ0FZQUFBQlNEN1QzQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd2tzUFdSNmxnQUFJQUJKUkVGVWVOcnRuVnVUNDdnUnJBSE4rUC8vT3IvNjFZNXdPTlo3bVoxdTNYQWVMTWpKWkdaVmdkS3NmYzV4UjNTMFJJSVVXK0NIekNwYzJNY1lvN1hHdjNleDdVaVpkNTdyanl6enYrdiszM1gvUi8rM3IvZjd2UjM4NlkrVHZLTmNmL3dkaFRMUGN2OXFVMndaZDc0dXRoMHQxODIxamtJWkxQY3NJLzZuV2E0WHZ1dHF1VTBaODVtbng4MFMvWnpncG5Mbk90SE50Ny9vZngxVEtYY1NOek4vN3FiTVEzanU3ck5RbU1ZWWQvNHMyajlhYStQK2dHYU1jWnJiMU0vdGRydmY3L2Qydjk5UDkvdDkzTy8zY2J2ZHh1MTJHOWZyZFZ3dWwzRStuOGMvLy9uUCsyKy8vWGI2NmFlZnhsLy8rdGZ4NXovLzJZSzVBbDJyZ3ZmNFVzYnBkR3JCNTJiQXZBclhwdXpqbWlxQVZTR3o1ZURtR1lYemhiQVptQ3JubXpkZHBVVSs4WTFkQU9ZZVhDdERVd1Z3VjdZQ0dINnVBbXlNY1o5bDV2a1VhQlBHTVVaNy9KNXcvNzkyL2Z2djlYcTkzMjYzZHIvZlR4UEVDZU1FOG5LNWpNL1B6L0hUVHovZHYzMzdkdnJsbDEvR1AvN3hqL0czdi8xdC9PVXZmd2tWc3dvbmdqZE9wOVB6SDNVM0Qzem1XR25aVlhuNGpDcXM3d0MyQktQNC84dEF6a1pzb1d4NlhycWVIWnltdnA0QUJDQkpoVFF3S2ZEVDhnenJaQ0lxaTVBaGlBQ2pCZkVCMnJQOC9YNjNNTTdmNi9WNnY5L3Y3WGE3YllDODNXN2pjcmxzVkhJcTVmZnYzMCsvL2ZiYitPV1hYOFpQUC8wMC92NzN2NCtmZi83NUpTdmJldStiTDJXTU1hRmJBbHBCTk04NVFYK2N0NnFvU3FrUEF3dVFsQlZLcUdORlNVT0FBM0JtdTdnQzVoTk9kMTVuU3d2QU9VVzdDNGdpVUNWOFNnbjVMOWhORklxVHNwMEd4STB5c2lveWpBamtZL3RHSlZFcHorZnorT1dYWCs3ZnYzOC8vZjc3NytQYnQyL2oxMTkvSFQvLy9QUDQ5ZGRmeDhmSFJ3cm1UalY3NzlFWHUycHgyeGhqd3RkSlpRY0FXUUlQTFBJU3NNSmFTd2lEOGd6SUtyd1N5QVRFNWo1bkFiUjVjMWRCVXdCbHNFV1cwaDZMcWlZc3FGUEFReEN5Ulozd09TQVJ4bWxYTVg1azY0cFFmdnYyN2Y3NStkaytQajVPSHg4ZjQvdjM3K1BidDIvanQ5OStHOSsrZlJzZkh4L2pjcm1VRkxPMzFnWURXYmx4UklzL1RxZlQ3b3VzeEpzQXhYQTJHYzdUQTlYZGdmZG9IYkZzajc2WDIrMVdBcmdJMWFnZUd3QTNxdXBxb0hzbWNiSTZGdTkzcXVnZ0ZhOWQ3TGVEdGdLZkFGSEJKK05FQnlJa2NKNUtlcnZkVG1oaEdjZ0pKU1o1dm4vL2ZqK2Z6KzE4UHA4K1B6L0g1K2ZubUdEKy92dnY0L3YzNytQajQyTjhmbjZPMisxV3M3SmpqUDZ3cmFNSTVFNFJaOHgydlY1VFN3a3F1b3RWNy9kN1R6NkhGV3NEL3FOY2R3MENRM3EvMzIxYzY4NlR3RFZJZGJ1eTczek5sZGhTSGI4STJrbFp6bm0rSW5CUzRVNm4wMzAyYUJGc0xoSERBS0pWSlZnbGZJOWpodnU1M1c1M3NMQU5ZTnhBaURBNk1DZVVIeDhmOSt2MTJpNlhTN3RjTHFjWlc1N1A1eWVZOC9mejgzT2N6K2Zuc1NtWVV5a25XRUc4NVdCc3Q5c3R6U0x5TWRmcjlRaTA4aVkxNVVaMExsREdMaFIzbzV6SzJqN09QVVREMEUrblUzdGs3WGIvMTZORmJobG9BTXVZMXpqTFVPTzNCS2VJRGUrWjhzMy9KNGdGbzRUTTVqUG11UmcyOGZvVUtLVlN3bzE2VGdBNW5weXdjV0xIZ1lsL1B6OC83My82MDUvYWI3LzkxbTYzVzd0Y0xpZTBzWmo0bWFvNWdUeWZ6ODhFMGYxK2o4RWNZendUUEVHMmNxanlmSE5GME04ZnVxRWlhT1ZuUnpaWlFOaDVmd1F5SGcvSERHZkpvODlRMXpiL3F1dTVYQzY3NzNJMlhLZlRxZC92OStkM3d1cVd2YS9ZVGRVZEVWM2ZoSXYvVml5cHM2WUUzeDNyNDNLNWJKUVM2NnpheFZHRnN2ZCsvL2o0YUYrL2ZtM2Z2Mzl2dDl1dGZmMzZ0ZjMrKysvdGRydWR2bjM3WnVOTEJhYUNNZ1V6QytyWlJpRm93eFV1Skk4WU1xY0NwOU9wcTV2YWdhWVU2bEdKQTFYUXFlamNodzZDajBHdzVuWUJyR3cwMUEyTzIwNm4wNEJHb3VOTnlUZnAvRndFbGhVZXk2blhySUt3N1FRV2RkeHVOMmxkTDVmTDgzOWdTUEY4YWh1L0p2Qk80OENQU3VxTWY4VnA5L1A1M0w1OCtkTHU5M3M3bjgvdGZyOC8zOS92OS9iNStUa2hQSjNQNTZtUTQzNi9qKy9mdisvaVNnYnplcjArQVp4LzUrODhidjZPTWRhNlM1ejZrZDIxZllDOWR4djdjSUpKMmQ5QU9TMzBmUE16eUhpVE04QjRERjZYVWxZSHA0S1FXM1crMXQ3N01OQjF2R0h4V3E3WGE3dmY3OCt5NS9ONUErSDFldDI5eHVQNWRiWXR5YVJ1NEFrc2JQcTY5MzZmalJ6WFJ4QmJQci9iK2IxOCtmS2xqVEhhQkJCZm44L24wLzErSDErK2ZCbm44em0wc0I4Zkg1dTRjcjVHdUJoTVZrMEVFbjlSc2N0Z1ZoTStpeGxKdE1BMjNSOEI2eXlzQXN0Qk9nRlhJS0tDTUlnVG9NcU5FdTJmWU1IN3p0YzczMmRRS2tDajF5dEFadFkwS3g4cElyOEdHSitBVDNWKzJIaXJobCsrZkJtWHkyV3o3M3crYjE3UDhwK2ZuOC90VXdHVmxlVmtUeVViNjhEa2ZheVdZNHp4TlJpaFU0RXBMSlBaVnJLK3U3SjQvbWdmS3FlTFc5WDJSRVdsSXRMMWRpeW5iRERiMytqWGdZalFxbjBycnhXYytOa0lMUDdGN3hJYk12eDd2VjUzeDQweG5sYldKRjEyWlNhZy9OMHBXNnQrWnptT016SGphakt3RGZvbmQ3OHpZVGRmcTE4dXA5N3pyMnE4djNJaW9CcHJSdEJsMEVaOW9nNVdCUkdPZE9IaklqWEY3VW90RmJnT1duWHpJSnl6WXZqRzVJWWdzbU1PeEhrejhPc01TclZOV2VxNVQ4RGFPY2JFdjFPZDVyYnM5YU83WXZNZXQ2M0VrRisrZk1FeHErTVJsNC9MNWJMWk4vK2V6K2ZuWjZLYXp1TXFYU1FWTzVzcEpYZmxIQUl6ZXMveEpzZWNrUkppRE1vZzlkNlZmUnJxWE1yNktwVlYyN2pSd0phY0dvdk9BTTF6TWRRTW53SzFBdWJLNjNrZENDaHZJMUM3ZzB6OW5mL0QrWHplMlZqOEg3R3g0UDlkdVFsc1lDcnF5TjhYcUczSG0vMTBPajNqdy9uK2NybHN0dU0ralBtbXhUMmRUdVB6ODNQenQycG4xWHNFSFgvYm5QYVZxVm1oMHh3T3QwbzZYTExBSGVQVVUyMDN3SGZjcnNwQ3dtVjNUcnlCNXMwTXNlZWc5N3gvQnd6Q2pCbGJCK3BSQVBsYTBCVlF1VDZWNlFIZEJsajNkMEtHMTQ3YitEcXhRZVV5bURPNDNXNGRRYXIrVElqd21BZDB6OC9oNjV2ZjAveUx2M1BiNVhMcHJ1L3lkRG85czdFVDBJK1BqNmRLSzlWVUVJZUtXUVdQQU9ySjhMS2Q0dkUrdDkxWTNlN1VGbFdhdGcyVndKbmIrSFBtdHZtL3NmSzU5L09hV0YzeC9lUDFVUEh2QTVERFlEcFlYZmIwZHJ2MVYyRGtCa3h0dy90RVdWVmxYV2RDOXBGWXM1L2pmaDlkUy8xNnZXN3M2bFRHK1RmcXN4U0pIeGtYWHEvWGRyMWV1NExzZkQ2UDN2c1QzTjc3RGtMK3pQbTVqU2RLTDR6UjNBeFFkNnJIa0xrWWxTb3dzcnE3em56dTZ3U3dkc01KT1htQTVmQmNqeHRnTUdCWUhscjV6b2todHNNQ1RnWExRT1c0WEM2ZEV5RU1wckw4bUFRelhSZ2R1aXgyeVp6b3J4a1lzRG4zaEIxVmVNTEdzWHNWdGdsMnBXOFMzc3ZrMHZ3N1I0aE5hSHZ2NGNBQ2w1SEZ6d0lIMEtjNnp1NFhqRFBSL2pwQVZ4V3pPMVhrMkREYjN2VGN4ZUdVMWlXWkhrbUlEV3ppV0t2aXJDSjREcmF2czZJSi9HRzZjVHFXZFhEeStmQXJRRFZWa0xxa1ZqQW9aSUlUZG1tSXFYd3FhOTVOMytNR1lvWlFkUlZOTzUzWTF4UmtoTzE2dlk3ZXU1MDdDYTlsSm5iR3B4T2VtUWhTdy9BUXNtbXA1elU5QmlVOEc2d3ZYNzZNNi9VNlBqNCtkbzBCejRDcGdpa25UVWVEcXdsS0JtZzN1NE9WanJaMUErckFjZ2FlaldxNmVKQ3ZDWUZET05Td09nSFg0RVFSdzhseGJ6RE9kRUs2Z1ozSGsxYis4ZzJvMUpGdEtYeXYvZkVkVFh1V2pXWGRBWmlCcDZBRGVEckNGaWltN0I2WkZuZWVJN0d2bS9QTWtVRFg2N1c3eEk4YjBENy92OGRBOXFmTjVvYUNmNzRXWmpIMG1mMWNtZlkxWTBKVUZtVnJUV3U4dXprTmNMdEVqN3U1RlhCVGtmQzZHT0E1cThZTXhPOEtWdkY2c0FWR2RjclVic0tPRGNRS2tMTU9NZG1seHVtNjQyWXJQbTI2QWxoWlcxWUIxUityckdzd0U4VGFZQVdlVU14ZGYrV2p3U3ZaMkVmM3l0T3lmbjUrUHBWUEFhcU9uNDNNdE5CcXZtamp4YmpNNGxaalpZNGdxTk1JNWt0YVcvc1lLTndTKzlsRlF6R2lobU1DS1BhNytaMFY2RWIwR1Jtb2J0cFg4SmxqV3U1Rk1MTjVqYTZoRzlrd1FnWnFmNSsxTkg1VXh6a0ZSZUNkV2hKOFhkbEdVa3hPN0hSbFlSbTRtVk80M1c3dGVyMTJUUEpFdy9ybUVOM0w1U0tISVdaZzlteitwVW9LT1lxNWJKVEpkWDJnbWUxVWN4TVpRRmFFUUlsSGN0MzJNK1kxQnpHa0d1emZpeUFOOXordWdwbFoxc3ltQ3JEQ1lZa0d4RFRwSTlSekJ5MHJIeWVEVUMxbldhZVVhRDluNHhrTnlZTUJEWnR6WjNCKytmSmxZMjFYRkRPY0FSSmxhYk95aVMzdUNwTEk5anJaakNEa2FWdmNDQ2p3b2duS1NoV2R6WFpXbFpNdlZUZ0Q4THBxbENMcnFnYmNCK3FZd3JnS1lwVDBjY0NxYkt5Q1ZhbGtFYWJuL0Z5bm9nQ3JQS2ZxZjUxeEo3c0dCMlpYY1pteG9TT3p0angzMDBEWmk3YTAvMkFJUjBVbEJhZzlTdUR3NktjQXpsYUI3dkhadldwaks5MGR5cnE2Ykt5RFVaUWJSMEIwNWJpTFFrSEljU1VtZ0lLK1N3dXFnSENub2lvMlJRVTF5aitCbkJ5OXBwaFZLTEd5QzdaekZLMXB4V0srRThJaFZDV0xOL3VMdG5VVTRheW9ZTG9hQU56OEZkdGFTdlk0cFYwQkVXMmxzNjFjenFsbEJLcFR5S2dNQWhyWjFjZGMxUlJPdFBtdldOa2RjS1o3Wkt4YVdqaVBMSk1wcDdPWkt4QStycUcvb0pManhmMHBuSmxxTG9EWm8zZ3lVMG1LR3lzMnRhS2Vjai9kMUMrckpTcGxCcWxUeUFxZ1IrRDhLaktsbVJMMmd0VWNBZEN0c0wraWpDTlQxb3FxcWtIMk9IRWJHNXNERm5VZzVBYSt5TG91MlZVMXB0ajFTMlpRcXYxT1JaTjlJV3pSZmdhUkJ4S29CRThVV3lxbEpGdHJJYzBBeE5qU2plZDk5Q1RZL1hEZlN6Q3o1TTBJWm9WRXNXblBGTlRzbDhvb1ZDMVR6YkdncUZaTkRTZ1Z3S0srMXNHRE1LcXhaQ1dHVk1EeXNpRXIxalZTUUpVWXdqNWlIT2xUaGRIdDQ0U1FnOUNOK25sOEQ5ME5NSWdBZGdyNDZKcVJpUjlJOHZSZEZ2YnIxN20veXhVTUtqTkxNaVZVQUR3dTJDV0doaGkrRjU1VFdNOU05Y29nem1zMWRuTTR1T0YvTEFFWVdkY3FuTTd5Rm15cTNJZndtT1JPZDdZMWlGV3RPam9ZOFRvNDFtVFY1SXlzZ0ZGdVJ6c2JXRkdiTklJSkNEdjFkT280bFpHN2pXQndSRnRWVEt1V3llQ0J5SktPYW44b1ozZXA5WGRkTmwwdER1YXl3THo5Y1hQWWVEQUEwU3BrQk85c2JWY1RPVldsZFB2NHV5ekVrenhIdGp2b25Ib1NrRkVXTm9vMWQ4RGhjUXB1dGQycHBOb240QnpvQWlKMWhCRlFnMGRWdGRiR0hIRFFXdXNobU5FUXVrTE0yUU8xRzJZOGJnVFhxRmhjQkpqN0VqUGdjUHRzOFVTOHFQcFBCL2RYem5PaDVaNDM4dHpINWVjNlFnck9LclJSZktteXNCbVVEQitQaFlhYk1sVlBFUitHQ1NJVFR6cjdhbTJ0QXJIM2JnY0V6UEptK2NyNWpKNE5uSE5GRFZyRlhjSTVMZTlrNUpudytiZWRiVitGZlJ6WklIYU9PYU9zTFkwLzdVR3M1OERqckd3S01JTUZJR3pPRVcxL2pHc2RBdENONmhFQUk0aEJlOVlYZVJST0JTVlBBVlBBcXZJTTVieDVoVktXQU1QNnpCUnkzaWVzY3JpZFZkRkJpbkJ4WERuRzJHUlkyWGJDdnAxbGh2R3RPOUJ4dTVoOTA4WFF1NDJsblNBck1GZGl6TWltOHV3UkN4UEdubk9TOGx3cG5iT2lEcVRBanNyUk4vUGNvQVNjQ2JhQUNxVk00MHlsbmpqVEJzK2J3V2xBRzIzL1VLYmRraXdLV0lRUEd6V2FjenBvU2x4UEVqODIyY05Xa3BTN0Z5enNEcnFwZmdwRzNqYWh3MnZnYmFTUUF4dUxXWll0N0p6eU5lOEpvWnBOQWN2REZPZHcwd3FZVDlBSzFyWnovRGRiU2xMUHAwcnlJeGdRSmxLOUFabEVxN0lPWHBvaGc5UElockNuZzg4SnNPeGlWNFpXQVlmZzRzaWt4LzhreTJaOWw4NjJ1cXdyZnNjSUg4K3VnVG1WR3lpZGRlVllVZ0VNbjRHWnpnMTRFd0lzaDlzeDJjS0tpV1hSZXVPRTVnekdPUWdkbFJLVlZkbGV2cWIyNzlYcTBRbnN0czJWRGFCTzBjb2V6c3J1V3RIQXB1NnNLRzRJQmhOMGFHVTJrTHJNS0dSVE4zSG1iQ0R3S1YxNHp2a01FREc0UWZaVnNwVmxhTlUybWhjNVRFWjNOMWgvenFUaGV1THBXMDVaV1RHVmpiM2Ribk5teEtaQm5OOEpxaWRhVkxLQU95QVJOTFMrTUI1NFoyK1ZhcW9NTEtyb1ZCbG5nZWZuVFBBY29ITldDU3ZsZkE4Q0kwSEVtQk5CbkJsWHlNcnpVN0E3V1ZtOTRQUHFRMmdtcUt4K1dER3NudmlsbWNTT0JKcU9LMW5ZeUFJenVBeWVzcTNVZFNLM0tmV2NZS0Q5NUhtZllPVTNxc2VyMkN0WUVVQStGcGZxZE52Z1BCWlVCaERyR09OUlZsUXNoOHJMY2FVQ3lrSEcwT09Vd1RsTEJyc2g1c29FTUdlemkxRTRIUlZ0MWljcDV3WkVGWGRpYkNrRzhZOHZYNzVzYk80RTBpb205eitoalNpT2Z5M0RocFhJdHBWaEUrVUdRZHZvV2p0Q2htckdIZjRZQXpLZ0JObkd0dUp4RkNlR2RoVUFmUUxMSzhrQllBUDZndkZKWmFqTUczWGt5Y3k4S3VDMHE0RXl5bXd0d2R4ZHYyTTBtSUJ0SzBMS25mNjQwajAwQXVxNGdVa2RXR2xoczIycUpjNmRaQ3NMMTlveG5sVEpHNFNZVlJJR3BEOFRQRkJ1TTZPRWxiUzFwbGRpZDRtR0F5TjZaSXVwYkM1YlhKTjlmZHBiVGhTeExVYUk4SUcxWElZQnhXM1RqczZLUW9zS2N4ZnhjUW1kbndSR00xMEduRmNDeTJYWXVuTE15QWtkZ2s0bWVQaWN6c0x5Z3RoY0J1dDZnb09xUzdZVkZYQURMamFvc0I2czZvZmNaV0FaU0lSWXFTVWtpell3dHRZYWIzdlVPUTl3MkhSeElJZzhXd1JWZUU2OHhpNFV0TDN6UnBoeHBsend1WnJjcVlDcTFJM2pQSTVkbkpJeWdFb2hNYlBxVkpTenJ3enhCSlRzNXpOK1JlVVNneGlrUFFWRjNKVkJlTlF4YkhFTnJFTU52RWRGWlZWOWxIOStPUkdFc05aUXB5VE5jNEMzQUc3WEY0bmd6cStEck8yemJ1YWFPWGdkYUZjZGtFb3RvU0ZCVlgycUowQzhPV1plRzRLR2xwZ2hBMFhmVE9QQ3FWMnFxd1EyNlFXZkYyUE1MaEkydzFsVkFhMmFQc1lkMHphMjVNUVJ3Z2NaTjZ1UURDaStaeGlENFhFTTJrWnhPVDQxRm5abmFSbGNwWm91emxScXFkYlFWV29wUW9TQjU4UlY1MGxCTnJIaS9Bd1hTNUxyd0RWbHBZM0ZjM0J5aVlHYzUyVHJpc3Q2a09YZHdJbkFRdEpwcDVRY2h5YXF1WU9WN1N1K2Z4Vk1hVjNkYzBSRTJTNm1VWTBnTHQycE1jWXFyS0lROXcybDFncFFVTXRRWWNtbWJ0NURUTnhkaG5VQ2pRcXRiSzlTVVN6dnJDMG1taGhFMWUyRlMyK294eXB5L1pBU3V0a210angzdmNCQzI0UFg2NW5icWtCQ1JoZmpTOWtJWVBuZWU4Y01hZ1ZPaEkvM1QxZkFtZHRBV1pzQ3N3VEpDa1FWTmEwcVdLU0tQT3BIQVVoRDlEcmJWY3lvWWt3cWh2aDE3dllBYXlYTFF5S0dZZHhsVURGcDQ5NHJCWFJqWWdPMTdERFlldE5JVWovZXpwNlMwbG5scEV3c1dtSk1rT3dzS1hlWktFQWpJSG4wRVFKSVNhUkJjTzZVTUlOejdwL2JFampudzRmdCt4bUR2a3N4WDRHMnJJcmlzN3FhZUt3QUZNUDJPaTduNGNyaXVad3RwU1V3cGZMeFNuT1JTcklxdXNjNVpGYVh5c3FSV2ppWjJEeUFXRUlMMzV0VlNvUUVsRkFDak9lR0dTRTdBSEVRZ2RvL0xTdkNPZ0dCdmt4c21EYnZsUzNGcDV2aGFCMlRBR3FSS3JLS01yaExWcGFHekVWalowT1F4RGhhQ1RBK1F5UlIxZDE1YVF6ckpudEwzUmlic2lwakc2amxnTDR5cWJTMHNOWWcxZTg0dmhiQlZyRWxLNjRDVWNXWVhEZkt4aHBJdXhpVkpaVXhzYk15L3VSQktUTlJRNGtRM0xkUllMUzBySmpSUGxUUHFZNmdkSnNFRGMrYVFYQW4rSGdzTlVDYlJ1RjBPajB6d25BN2JXRGtiaE81RW5zMDBxZVFoUzFsYUJNbDVNL2NBYXhzTEY4ckt5cWwrVGY3RUxMRUd1L2l4aWltZEN2bzBUamZwakt3YWdnZW40ZWg1djdMb2tMS2JMdXl2SGhjWkc4ZGhHckVEeDdIZzkzWnBwSkY3cUJxTzNpVnZlWEVEUU5Jbnplb2U4WXE2ZVBhWkJaMkp2aU0zVzJVQUdvdGVrUkNBR3E0RWtGMVgzRE9uUjExeVJzQkwxdFJhMFBWY1ppTkZYWjJjMzRGc2t2b21JblFRNmx6cEpvWmJKeGs0M053S0pGQnF1SlNzckJ5SHlkeEtPblR4UUFTQm1TM2orSk1uc0hTbGEzRWM2SzlWV29KVm45emZqd09NN2hxWUFBcUpRd0UyYTNuQTQ4SjJRR2VnUmtwWk5pdlNZK3lzM0VrS2Q0b0pJd3N2SUhsM2NXZ0x0NWs0Tkg2T210TFdkcHVyT2t3RU11cFljN2VNdERSaE9jSTJ1aTVKaFZJelh6THl0by9HQVB1Wm95bzh3a29kdVZnSmdsQ3Q3T2hHYmdJRDRNcTRzaSs2M3pVUzFGdUZGWEZscXlhajJlbUhsTE1jQnFZdTBGTXVSMjhCYkI3bE94Uk1TaUNRWEZoQ0t1d2toWitwWURpR1NnYnNLS1Y4TWlTUnN1SFNJV005cmtsUmlJbFpadXFYanNRSzhvb1lKTWdxM0pLV1ZraEhiaHNWeEZVenRoT1dQa1lpamNieDU0SUtzU2RUK3VMcjNjckdLeW9ZZ0ZpR1I5aUJrNGtmbG9VWCtKSWxRUlFxYWJtcGduaHF0cFFwYjZSVlExV0g1RG5yUzRoRW9HWnFhZXJRMmRoRmJ6OFhlUHhTaG1EYm83MGVJU2pvb3JPMnZLOFNKWEk0U1VtRVU0eldLRHpVRHRXVFl3N3hYbGJTVEVqNEZSZzd6S25Lb0dSQUx2MEdzOVRnYzFCcEN5d0daUlFBdHFWejJ4ckJjQU16RXBmWndGU2EyRzVXMFFCRmpTTWFwV0FFRmEzSGNHTjdDeER6RUN5SWtKOTdxd3JxV05UV1ZvODc2UFBzalBrajJ3dmdyb001bExaS01FVEtWcWwvQ3ZuV1ZGaUZhL1N6SlVRd2tvWnNyNjdZNnZsU1JWMy8ydG1OVE9ZM3ZuYXhZd011b1BLcWR6UjF3N0lxSHltbFB4YUFUaGZVN0tvMlpYWWo0QVlKSEwra05kS3dSUVlFU1RSYTVmc1VaL3JWQzFUTVR5V1Z5WW9xTnR1emFIc015djJ0dm9hcnhkZnF3WWdVMWF4Rm8vY25xbDFGR3NxSyt1QVJPVjhCWDRHVThXY1pUQVRpMnE3UWN5aTBPMFYrR2hXQk1OUlVrbjhIMVNzV1ZFNUJ5M0dpMEVDcVVlSm9CZkF0RGE0YW1rZFhHMzdBR1A1R2dlYjg0cDdVYXpwb0tSemRGemVROEhrb0hHeHByS3kvSHBtNXQxMnA0N0o2eFRZREV6N3VJTkVYU3V4WVh2RnNrWUFjK3lTeEg5c2Y1ZnRLelU2SWJ3VkJjVUdnNWU1Rk1DRVhTRXJaUjB3R2F5VjE5d29NOWd1UGpUcUpkVlRxUjR1RTRuSm5MbGRXVmtFQ0NaTGQyVkxGK3h0YW1leDdJcGlyaVNEVXB2cnBuOWxyd0dNQ0h5cHBNSCtwczZMSUxzdUZHVWoxWEVPWGlxYnFTSFBVS25DbHBXVjY4a3F0VVJWTkRZNFROYW9jeWtvWWVUVTVuZ0dFUWEvUzFEbm5FNEFlWE1jS2pIUEFtRlZqQ0JFTmFleUxWTkhmcjNweDh4VXN0Sjk0aElwZkg0SEtFL2VEYUFySzZsU3lWVkZiZHQxZ3hUSVZrM3BwcFZsRlhpNHBFaFZCVE9icXVvaFU4NU1MWG4xaWFodlVrSEpqU0NNYzAxdExGdmVWVkJ4MERvZE02amZ0Q3U3RE90SXpZeHJjMHFwMUpHUDJheVlGejJHYjZIdk1yTzhjbkd0VjZHam0zdUltU2ZEMkdwV0s2dW93YlpHTXhGS1FDbzFwT010Y01YRnBSc3QraFhHb0FvbUYzc1NUQkdnVGdsYkJLV3dzUTN0WnFhWVNwMFoxQ2ltUkRXRmNDSlVQWUowMEJJNUZrS1lOb2lmdVF4bU44OFNXVlhXTE1hVXFxcWdDMEJtUUpSNnNrM3U5TkNmNmpZTFh4QWZxc1lFZ1ZMQWhSWTJBdGd0ZmxaTkZtRnloeGRyTGtBZFdsazREODhNMml4SHllcElkaE1IckcvaVIxWkd0cTBNR3BiRGJSUFlPWGVTWTFNNk55NFpzdHZHU2t0SytYYkZQQVRqMkQzNzFzYVBFc0FNWGhYcnNaMGttL1hTdGtoaE15QmZzYTZ1WEZaZTJWQ2UrWU1yMStHS2d3clF5TllxMVZSckIrRWl6QW93Nk5zZE5LY3lWRWtZZU03M3lzNnE0a0FIcDZCaUZrbFRrSXJWQzVvWVY3dXp3T0dDejRVSjBTdHEybFdNSnk0d3RiK1JldEw2dFpGaWNuSm1CdzVVakN2WFhNWlZKWDJNUWtiZitYTjVFV2Q3OFZ6OC9KRXNNWlRCaUtOenNtMWluTFJVUTc0SDROaWRhcUk2OGo1c0FGZ3hjUnZlQzdpZUxKWGZRWXhqWloyQ3NpV0Zld1pYSm1CSWxaMXRkdHJYNGhTdWF0ZUtzby9SWk90T0tXMm5tcTFvVHplSzZkUldBV3UyTlJWYjRocTBTWG0xR3Z0dWdIcmJyNUlYcW1Ta3RnNUN1REUyTVNsUHdzWTVrTkUyV3AzQXFpWmJXVkxBeGlCRisyaUJaYnVOajZNQjZyc01MQzdGeWFzYVlEeW83S2tvUHlFdHczcEVNWGZQdnhBSmkyakFRUWdqcnowckxJWlNXWmxJb05od2Q1eEs0QVI5bVlOaldBYUxybnVJbUplQlZOOXpCT1JPYlZ2YnIrbVRUZkZTRUpMU1JuSG83aEVKb0lpOE1GcWp4bXZnbUY1VVJaejR6TEZnWlo4Q3R1Mlg3Z2dWY2NLbTlnVnhJc09IcXhYZ05NS25GV1pZbmYxZEJuT2hheVhxMTdRd0ZsV1cwOWVOS3lWSkZtWHFhT05HQTVhQ2VnTWJKM1VVa0dZMWljM25LV2dqcThxZlZZR1FHMWdSdDZyczYyYTZIaXFxVU9xZGVzSzVObVg0bkdvZkpvaUUxZDBkRjlsVlZrdlQxL2tFRWFhQ29ZT3dGcGNWY29MTSs3NjY5UHhDOXJXcWt0SDBzV1VZbGQwVkNwdUJaL3N0VlJjR2d5OVdYMitVMVF0aGk5U3pBcVN4elpzeStPaUZ6QllueVNHVjZHa3U0NHJEOEJDT1pCVjNCdkQ1K0FLUkhOd01Fc0I2RXpIbkpwa1RBZWlVbEVHa2NFQ2VCNkdEWlRwNVlFSlRsdmRya254WWpUbGxNa2ZOdFh3RGpNN3VWaks1SlhVVW40M3JycXBLMmp5dGF4SFcwTTVHOERDOHJ0SE1ZczdLU2dkdVZRTUdUWUZxRnZWUzZya0Qzc0RKNDZhZmRZRndvcTExQU9LQ0JMaHZ3b1VnYzhJR0FOeWNSNmtuWnJkSlBkc3V4bnlqZmQzRm92VGxSTWRFZHRPbDVDTVY1RUhzWFFCaXM3VE93dklEWmFHajJWbnBiaDdjcEs2M1Z3WUVNTHdxYmp6eWw2OTlzYXdGRmtGMXlxalVVMzFIZkM2c1cxWkZWRnVYVlhWZ3o5a2VFYXcweXMxbFdmbSthelFBUVNXQStoS1lWZnNaalBuY0FjVUI5b0lheXkvVVpYUk5ja0RHamk3N0dzV2J2Qm82dFByV1BxT3lWa0JVcStJTmVxcHpOZFlzL3UwaWZoNXFtcHFJVyszM0pWU1Vjd1k3MEtMNFU5bFlkVTZsanRTbHM3bG1maTlnM1l6ZVFmVmthR0ZhVjNPRENuYUQyTjh3c0VERmtsRTNSek0zWmdoZFlrV0hzc3pxNzBGSWVjbktrVmt0OGV6TXpScTlia0d1S29qUkxCVlNvZDNZMXlQcUtnWVc3SlJRVFBWeXk1eElZTGpPZ3hnVDUyUktKVVkxZE9ySWlSZDRmdXRReC9BNUFjU21FanowdkZXcmtMenZiV0F1OUhPV2JHZ3hGazFWTlRwbkJLazZUZ3dpc0kvSGN4WVhQMXVBV083MlVMRmxCVHErYVN1MlZUVXM2aHJ4TTJDRitoRW9yMVZJQTlabUZVYWFiMWxTU2dac1ZzNHN4ekhsVkxvSkhyOUg0RGhPTlRrSTFYQzAvd2lZMk5vV0FHNVJsbkhGbnE2b0xjY3BRZGRNdUovTzE3SlZBNU9ITGkwQnFDenRxN1kxKyt1Y0NkOThxTEk4TUlIQlYvY0tqeFFUbWUzaEZCUzNNeUNxbkRzdXltMm84MEhqdkZGVHRyVVJtTmFHSnNtVmFoSW1qVHNVWEt0UVpUQVZzN012djgvK2Z6VXJaQVhjTEo2TTRrb2U2WFAwYjZTbVdXTkR6eVVwUThibCtMdFd4NHR1cVozNmNSWVYzeXVWeFBOd3ZJaXFpUUNTbXU3c3JnVHpSNm5reWhwQ2FyWHdGeTF2R2Q1aVAyY1kwNmxGcjVOamhoZzFZNitOQjI4ZnRiSzgzczhyZjdrTEpiS3dERlBiTGcyNWEwQWRaSkVpcXI1cGhpeEtNRGxSVXRjc3NxMWhyaUxxR29IK3plTmdWbTlPZW1qc0VUVjhKZEYwTkhua0lGeFdZMU9CNFlycDdydFdKN05nQUFBUFhrbEVRVlEzb05zNW5wbHlWZjh1MkZvTHUxSnJIdmVhWldRanFBa3NodEZhMmd6c1NHM1pwa2J2ZzNIYWZGOXNsUFBsbGRqRmxLODBHeXNtOE1yNE1QaG5lTldFTlBHakFJcG1pbFRQQVRkVFJUWGxDQllIWUFRdVB3QTM2eElwV3RHTjRxM1kyTWhpR3NVcHVTU25sRUpSRDhQb3JDN0NGWVZ3K0Y1MXFUaGdhYnhzVHhXekNHWTBaU3NiM2xmcUF5ME9QTmpOeTh4aVFRS3NIWUZRMkhCWlZ2VmJCdXEzbTFvV0thanFhb25zTTZ1WlVyNkNqWFdOWjBsNUUzaDNqVVJtYTZrUDNNSklpeTFMbStrYWhRcTQxTjJpWmphNXNqdGxMWU5aSFpySDZxVUdtNHZNYkRwNlJ3MkNGbXZ1eUZrckJjQ3lNdEZxQmFFQ21zSG9LOUJaMkxBL2xKY1JxU2FEcW5hV2JyWmRHYXozRExnSXZCbG40d29HenRieUpHcXNsd3hraGhIclRqVFlGWEN0T29LUzh1TGRvZlZkQWJPeWxHVTZubFlwWFdadHM0blhCcTZXeEppdE1Ob2tIVUpuYm5KcGxRbSthR3BZMmE1R01WMlFEMWhSdWJCUEZLZHVtZjVPSGtMSHowRjlsdUU1a2pCalJhMG5GRTVDVUdxSHczMk1talo2eGtnSU5WblNuWjFWWlN0SzJxS2xSYUxsUWdLN3VUcTdKRlhKd00rM1NPRUt5aFpOSSt0SjBJNXFNWXk5azJxSkQ3ZFZXZHFLWGEwQ0tOUjBDY2pnK0IySVl1MmZjQlpKWmtNRmdNMTFyMFg5MndpbGdoRkdnelZuZXhscUI3eEw5bVMyOVNpWVVWWTJuWE9aak5CUnN5RHNRUFJXVzVoclo0WGNkQzRIVldSYmpnSnI0c0ZvZks1U3pqUTdyaEkxVWViZFBkRWJqNnNxSXZUWlFaNXZhMDhyQUJzQVcwVXhlV3l0QWs3QTJLSjlacHh6Q2lvQjI0WEZ0WUFlWFl4cjZhblNxaExncHBFcVdiR3dMdW5UZ3JWK0lqV2xMMjlsamFBbDRFUU1Hc0VycDRhcGVaaXF1d1JYTFhBcU9DZXJ1MzJtbXlkYzZvV1RTV3BGQUdkemVUQjhSVEhWTUV0bE05MENiYlFDWWhQanEzZWdZcjFGR2RZSVFqaXVER1o1elovQXpvYktHT3lMeHRpNmM0Und0djJhbnlXbExJQ25sTGh4SlJYdDZBNWViREJXRk5PTmJ4V1oyZDAybW51NFM5WUVDcGVwcFYxelNXUkJXeEhZelZJdjFDWFNvdXdxcVgzakJCQkRaZFlRYnBUUVc0WlFsUzhyNWtINHN1U1JtZzIrKzNKTjEweDFQYUFtRWttdFlsRWRlR3BKRU02a091Q3FDUjIyb1N1amo1SVYySGRUMHpqNXByTEtUalhGQVBqZFFseXE3eElCeEFRUDV5TWN6RzRWeEFLdzBuNmlsWjJRQmNlMnBMdWxrdXh4cW5vSXpGZmdxeXFqaWw5UzFWTndCckZtZXllb3BzOHlPalpVeWJaZGZTOEN1YVRJSnVtenM1dE9EYU50THBGRFEvUGNKR3dlTGhtZUwxbkIwS3FpVURTY3NpVVZEODlEaTNIdHJLdFNVTHczUkxpeWdaRCs3c0Y4SlRPYmdZc3JHdkROVUZSR2wxaXkwTGwxWWtVYzJhSllNb2c5MjBJOHFXNllEQ2cxTXFrMEpISkZLWGtiZ2JScmVJK3FwWU5PWkhyVmNEVWJhN3Bqc3BoU0pOdEs2dXBnUk5BVm9PUzBtdWdCZU40YklaZ0hodVBaL3MxRU5hWDZLc1ZyK1lOcmgxTmI3aXBSMFBFNXpiTlJlZ0NickhSVXc2WWYwN2RMQkpsMWY4S0I5YXMyVjFuTnFBc2w2MkxCQmhlaHdhbGVya0htQjFKRklFWktTRXVzZGw1SlFqMW5KbEhYU0NGMzQyZ0o5Q1lHclhlbGtuSklYcVZQOHNEK3F0cGxDUjNYSDJxZktxMHlnTXArS25Wa0t4TmxaOG0yWWtJbFZNaUNuWFV3bDdxem5CS1N2UXozbTNQdDZvUWJYTzViNUZpeENoL2ZIeFVRVy9BRWNLNnpDTnFLUW5MOXN5d3FtS3V3dnFTWXpUL2FQVk5OcFZ5aHZSVzIxYXFjaUNzamRXdkJ3SUxVdmg1VnlDemJXb0MxcEpqSjY4MENXc2wrdWRLQjZUNVJ3RzFtbG9obmxwYmc0N2l6NVU5aGEwRkd0bVJMRllCdE85OXk5N0FwMHorWkRUQW9nNmtTTFpzTUhnL0lGa2tncDZDcHZVMlUwY1lWU2RubWtqd0JkT21YYnhUV05XenVJYmlwTWlvVnhFY2taRW9haFNPaXkyTTNLMGpjQzFMaFZEd2FxRzBadmtjV3FDbnJHNEdJeHlrcnFsYldkdzZMUXlCYVpSOEhtTFJJaFFXc0hzd0Q0MlpYVkxOa2Y5bCtGbFcwSFZRMmx3RnNDL1oxRmR6bFFSMEthUGZvK0ZkZnUrL2R3VlJJQ3UxQ0dSN0FFSWlBaGMrQVpVRjBrT0JhUHhtVXFnNGk2NHZRblU0bkZEWUo5TnorMWZWWHZlSDlxbXIra1BJTHg4b0tjUlYvQkZieGJFMEpNVDBrU0Q0dzZML2xOWThvY3NxYWdWZFUzQTNNanhoeGNHdXF6c1BINGlycGFvdzFxNk95clZqdnA5TnBjNTlFOTFMbGRib1lWekpXZGltV2ZBVzJTTkVLY0RhWDJGbUJMTEEvdUt4bG1oaDYxM0lzMVVSUUFwYktmdHR3eEwwMnE2T254NXBReFNiUG9qQWcrdjVoQW5ONkxIVlJEWElzdkt0UmppUzBxSlV5WlRBWFZiQUs4MkVsRkpXYVFkVm9xVUMxVW50N0JWYVRRdWRNNlN1cWV4alFKTjQrMGljYXh2L3V0Ykt2ODNFVGJUOEg4Z2pjT0t4T0ptYlVhNk9PVlhodDNkRlk2ckh2OVhvTnpGTGNlRUExbzgrcEttMExBSFBIWjJyWUtqRnEwaGZaRml4c3FISmdEM2VENW4rVTBrYjFtRmpYa24ybHZNU1NPc05FL0NkSUFLRjBTeXRxNnVyT0hVTjVnd2c0R1pvc2dibWdnTTV1Y3JhMnFyUzJJZzFjYmlCQmN4WXpnelVETkxDdkw4R2JaWE5wNk9SeTNMbVMrS2s4M3pSSUFLNkExaW9LYTJJOU5hcEl1aVVGZGZDOTc2NlBGWlV0cVVyNktiV2srelpVMWEvWnJJWEV6dHJqVE9mejdod0t6aUNlWElhcmFIdGJaSU16KzJwR2dhekNtdzRxV0FGdkVkaG9kWXAwWHEwcFY3RzFZV1lXYk80cWhHcTQyK1o4Qll0ckxXdmx1TlBwWkFlYUZGUzF2dWJQZ2JneHNxY3BuQWFzekJvdkthRm9EUThCR3RqZlVPbDROQUcybm1RVjA0ZmVKZ3VtdlgyZnNyUUVXWmdoTDBKblZkWWtuM0RPWkllUk44NlJxUFdDbXN2R1ZxRU1Sbnd4UUF4d1M4RU1ZbzNJem1ZMitCQ2NMcDRNS2l1eXVoSW1hbWxiWkZjTm9ObDd0cCtSSGQxOFpqUUlSS3lYZEZSaE45OC9oeUtxd1hXTm83TzF3aWFYb0hOMTA4UkVaWldFcTZncm5JZmp6ZWc4amRSZjFYRUw0a2tYYTViQmpLeG9LYWxqQmplSGxWeFE0R2F5Y3BXNGxET0FLdG5UeEhBdE9mek90WndIQU03c3FWWGtWNnl1NmthcDFuSGtYS3FXRi80WEhxamVuTktxQmpwUjNsMWNoM0VqZzErRXNnZFFoc2RHMEI0Rk05c1dBVldwdUF5aXdUUGxlWnh0OVZ5WlZTMnFYZlJlV3FUQWlscHI5QXBvV1RqeHltaXQ3TndWNEpUcmlaeU9BOUIwazdIRmZVTG91cm1LWUhWblJRdnFHTDVITUhkcUZjUjJxV3BtY0s2ZVR3eDJkaXBXcnZpRGlscitmS1dxM09XUldkSEt3QTRldTh3amNoYmVSekZpbHFqalpOM3VmQ3Bma0owL3NjVnBuWWs2TDBQSTc3bHhkV0NaODdXaVdtN0IvQUdxdVFTbnVqR0tzQjhDSm1pSnE4cTFwS0lWV3lxT2lUSzY2cjE4Qk44cjc0L0FFNzFmZEMzeVBTMk14ZE9wbkUxdGxWeEQ5Sm1WT29nZ04rcjRQakFYVkZQYTNFZzVqVkpHRlZVR05vbEgyMEdWclVCN0JPeVNXcTZXcVlRZFdSOTJwY0ZNWU13Y2tiU2dDS0NxRDY3RGlpV3UxZzhNUUM5QnlmY0ZxVzFMK2pMNzE0cU5DdXpub1N4dDBkYTJndFdOMUc4RjBCSzBOTjBudWltZWxVRjlkSWRBZmpPNDRVVDNDalFMb1VlTEhKRlRPM2dtcFJ1SUlPdndCUUNicU5lbzNxdFo5aUY2eFZLMTNHUmxvNHpxaW1xK0NHZFRpUjF1Ulk4b3FnRTAyaFpCYTc5a1pYUE1xdXhSSEtsYTJzYVpXTjRtUnFaVWowdkxDS2hraktucU9RSE51U1pWSm9LdkFxUzF3cEVxdXZXREMxQjJ5cHdyQ1BzUk1FUFZUT0RNTEpNRHY2cWVLWHdpMkpZVjVTcTRxS3l2Z0dzSENMaXVqMmpSNTlWOGdNcVNKMkZKWlJYRUhWUkhqM3NGUHJjdDZPcHFsVzFHcGF0UWR0MEd2d2ZNNm42M0luc0dWRmhKR2FCcWdxcUlWNklzWGxsWmd5U1BxNFIzYm50M3dpNWN2K2NOMnlxUUxXMVQ5NUtZVnNXV3RLazRjQjlXNTNXUVFmbFFZUjZXbDRIYUpaanZWRTBENXl2cStSS2daQ3M1cWRCRVA1c0Q5NGNBdlFMbFNnTmFTTUF0SHg4OEJ1TlE0MXpkRnNYMzB6S2JjczBNTEQvaWhrcFF6bDB3aVRxS0xUZmJLbUNteVlJQ25LMEliYWllQzRDRzlpU3lMUTdjSU1HUXdhdTZUS29xNjBBcGwzV040MExacGNhMUNLS0s5VlF5eUlFbjh3MEY4RjZDTDJoOG8zaXhHd0M3czdFV3pDT3FtY0FwWXhZRDRqc0F6VlMwc2wydDk4cEE3dnJLb3BoQ1ZTb25iWXBnSDZtdlNuMjRwVEJWNHNkdFYzQnRNcTVrODJ5K0lBRHZVSjB1QWxrQ1ZUeElhUG0rVU51L3FrVjRGMVR6SFhDR3JYSUFxSXRCS3lwcUs5OVZ0QU9WczY0TzRPYlg3cEhMVkNwWUhjUm13dkxSN1R2WUFLQkJONThMR1Z6RHVGeitoUWJXZ25jUXlDWkFrK1Zic1BTb3VmOTMyNjFpWmdtZkNwd1JiQXZxbVNxcmlVMlB3aGphb095WXF0SWVnVlhWaVRzbXl0YTZiR3lTcFkzZ3lScnBJeUFlYVdERHh0cHNYd0t5YWxNREtOUDdZQlhNcUVza1VzaTJ1QzhGTkFQeEFLVFZmVDFvNlZ6TTBFMGpGKzFyV2NVdUh2ZHlnN3Znb0ZwbFg4SHB2SHBNQ09NUlVQSHpaa0luc3FsRktOWC9FSU81MkUwU3hTek93b2IyVm1STFc1RDFYSVUwcmJnTTFBeldneUM3ZmU4Rzd4VUFLL3RhRUJhdDdsdXF0eVA3RW1zYUpRT2o1Rittcm5aZkN1WUNmQlVBV3dTaHlkNnBNWS92QUhHMVVxT1lwYkkvZ3k1VDBDTUttK1VPM2dGdUM4NWRnZkRWZWd1UERmSVRySUJMc0xyY2dkaDNDRmdGWmphS0o0SXYzRjhBTkVxdnV4UjF0VktPZ0xvQ2Exanhib0JBa2o2djdqL2ljRmJBN2Y0cmZSblFETFJWaUcxM2kwdnFCUXJZVnFCYkFEWlQwWnBpSG9TenZRcG9wS0lGUzNzRTFIZkJXbEhYZDBIN0xuQXJxdm91Z010bGpIQmdabmgzRW96L0JLakxNTDRaMkFxMCtoRUpyOWphVlVCYnZOekNJVWlyb0M3QVdtbUZ3NG81QUszTXRCNVZ5cFpNU0ZnczA1SnlHVndsd0Jxc0VHQUFhMlpVMUNqVWV4WEdzRTRyS3JpaWxCdkZ6T0tLbzNBdUFyb0U2UUZRVTN1OFlwTlh3UzVrKzFUWnQ1VXJ3b3VONEtpVUV3K2szWldEcDFSWEhOUnFYYjIxVHMzOTk0NXlaU2czVm5aRk5ROUNGM1hlWnlyNURnQlhLaXdDTWEyTXhlVERZWGdQMUZzZjlRTktaYzBrODFSSmszcjZFUTNyQ21CVnlMTDc1RWpaMXBJVkRIb0Z0aU9BSG9CMEJkVFZ5bHFCc0tLS1MrQWVCWEpWTFkrQ1hBU3VHdk8vQXVxN0d1RWpEZkdLZzFvS2Exei9kbW1pOUk5U1VHTmhsMEF0ZnVsSEFhd29Zcm5Ta21OWEFWdUdFaHJFVlh2VUYrQTVDdDJQcU5PakRldHluYTRDbWVVb2xtZVhMTjRBcTdDNVNqMTBRN3lqZ2wrdDZDTnhTUkhtSTVYK0Nwd3JlWUIzUWZkcW5hNHEyMUtkQnVjNEdvWnNuNDlaT09pVmlud0hxSzlXemp2Z2V3ZUVoMkFVNSt2dHhaOUNkOVdxa2g0OVYxOEU1b2o2dlZ5bjBSU3RBeUdJTzVlZFhSS2Q1QjBWR1ZYcTJ5cjN4WXArNVV0K0M0UUo0UDFOMzM5cFFNalJlamo0dmIvRGNyNnJRYzNPLzByam10WnBlWUNCaUNIZkNlbVJiTmhiSy9wTlVQYzN3Zkt5NWYyRDdPbEwzL3VQaHZlL29VNFQwRjhmK1ZOTTJ2eW9pdjBqSytLSFFmZEhxKzBibmN6NG96NzMvK1k2TGJLdzFvLzVCN2VPZjFSbC8wZHU5Qjl0bi85YnZyZi9qK3YwaDZ0dG4ydHAvci80ODE5eTQvenY1MzkxdXZ6emZ3RGlmejZwaFQxTVBnQUFBQUJKUlU1RXJrSmdnZz09Iik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtkaXJlY3Rpb246bHRyO2hlaWdodDoxMzBweDt0b3VjaC1hY3Rpb246bWFuaXB1bGF0aW9uO3dpZHRoOjEwMCV9LmNvbG9yLXBpY2tlciAuY3AtYWRkLWNvbG9yLWJ1dHRvbi1jbGFzc3tiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lO21hcmdpbjozcHggLTNweDtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGV9LmNvbG9yLXBpY2tlciAuY3AtYWRkLWNvbG9yLWJ1dHRvbi1jbGFzczpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6ZGlzYWJsZWR7Y29sb3I6Izk5OTtjdXJzb3I6bm90LWFsbG93ZWR9LmNvbG9yLXBpY2tlciAuY3AtYWRkLWNvbG9yLWJ1dHRvbi1jbGFzczpkaXNhYmxlZDpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZX0uY29sb3ItcGlja2VyIC5jcC1yZW1vdmUtY29sb3ItYnV0dG9uLWNsYXNze2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjUwJTtib3gtc2hhZG93OjFweCAxcHggNXB4ICMzMzM7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTBweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotNXB4O3RleHQtYWxpZ246Y2VudGVyO3RvcDotNXB4O3dpZHRoOjEwcHh9LmNvbG9yLXBpY2tlciAuY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzczpiZWZvcmV7Ym90dG9tOjMuNXB4O2NvbnRlbnQ6IngiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZToxMHB4O3Bvc2l0aW9uOnJlbGF0aXZlfSddfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9LHt0eXBlOlVnfSx7dHlwZTpnM31dfSkse2hhbmRsZUVzYzpbe3R5cGU6d3ksYXJnczpbImRvY3VtZW50OmtleXVwLmVzYyIsWyIkZXZlbnQiXV19XSxoYW5kbGVFbnRlcjpbe3R5cGU6d3ksYXJnczpbImRvY3VtZW50OmtleXVwLmVudGVyIixbIiRldmVudCJdXX1dLGRpYWxvZ0VsZW1lbnQ6W3t0eXBlOlphLGFyZ3M6WyJkaWFsb2dQb3B1cCIse3N0YXRpYzohMH1dfV0saHVlU2xpZGVyOlt7dHlwZTpaYSxhcmdzOlsiaHVlU2xpZGVyIix7c3RhdGljOiEwfV19XSxhbHBoYVNsaWRlcjpbe3R5cGU6WmEsYXJnczpbImFscGhhU2xpZGVyIix7c3RhdGljOiEwfV19XX0pO2NsYXNzIGIze2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhKXt0aGlzLmluamVjdG9yPXQsdGhpcy5jZnI9ZSx0aGlzLmFwcFJlZj1uLHRoaXMudmNSZWY9byx0aGlzLmVsUmVmPWksdGhpcy5fc2VydmljZT1hLHRoaXMuZGlhbG9nQ3JlYXRlZD0hMSx0aGlzLmlnbm9yZUNoYW5nZXM9ITEsdGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMSx0aGlzLmNwV2lkdGg9IjIzMHB4Iix0aGlzLmNwSGVpZ2h0PSJhdXRvIix0aGlzLmNwVG9nZ2xlPSExLHRoaXMuY3BEaXNhYmxlZD0hMSx0aGlzLmNwSWdub3JlZEVsZW1lbnRzPVtdLHRoaXMuY3BGYWxsYmFja0NvbG9yPSIiLHRoaXMuY3BDb2xvck1vZGU9ImNvbG9yIix0aGlzLmNwQ215a0VuYWJsZWQ9ITEsdGhpcy5jcE91dHB1dEZvcm1hdD0iYXV0byIsdGhpcy5jcEFscGhhQ2hhbm5lbD0iZW5hYmxlZCIsdGhpcy5jcERpc2FibGVJbnB1dD0hMSx0aGlzLmNwRGlhbG9nRGlzcGxheT0icG9wdXAiLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlPSEwLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZT0hMCx0aGlzLmNwVXNlUm9vdFZpZXdDb250YWluZXI9ITEsdGhpcy5jcFBvc2l0aW9uPSJhdXRvIix0aGlzLmNwUG9zaXRpb25PZmZzZXQ9IjAlIix0aGlzLmNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3c9ITEsdGhpcy5jcE9LQnV0dG9uPSExLHRoaXMuY3BPS0J1dHRvblRleHQ9Ik9LIix0aGlzLmNwT0tCdXR0b25DbGFzcz0iY3Atb2stYnV0dG9uLWNsYXNzIix0aGlzLmNwQ2FuY2VsQnV0dG9uPSExLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0PSJDYW5jZWwiLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcz0iY3AtY2FuY2VsLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcFByZXNldExhYmVsPSJQcmVzZXQgY29sb3JzIix0aGlzLmNwUHJlc2V0Q29sb3JzQ2xhc3M9ImNwLXByZXNldC1jb2xvcnMtY2xhc3MiLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg9Nix0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlPSJObyBjb2xvcnMgYWRkZWQiLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcz0icHJlc2V0LWVtcHR5LW1lc3NhZ2UiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbj0hMSx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0PSJBZGQgY29sb3IiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzPSJjcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzIix0aGlzLmNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcz0iY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcElucHV0Q2hhbmdlPW5ldyBMaCghMCksdGhpcy5jcFRvZ2dsZUNoYW5nZT1uZXcgTGgoITApLHRoaXMuY3BTbGlkZXJDaGFuZ2U9bmV3IExoKCEwKSx0aGlzLmNwU2xpZGVyRHJhZ0VuZD1uZXcgTGgoITApLHRoaXMuY3BTbGlkZXJEcmFnU3RhcnQ9bmV3IExoKCEwKSx0aGlzLmNvbG9yUGlja2VyT3Blbj1uZXcgTGgoITApLHRoaXMuY29sb3JQaWNrZXJDbG9zZT1uZXcgTGgoITApLHRoaXMuY29sb3JQaWNrZXJDYW5jZWw9bmV3IExoKCEwKSx0aGlzLmNvbG9yUGlja2VyU2VsZWN0PW5ldyBMaCghMCksdGhpcy5jb2xvclBpY2tlckNoYW5nZT1uZXcgTGgoITEpLHRoaXMuY3BDbXlrQ29sb3JDaGFuZ2U9bmV3IExoKCEwKSx0aGlzLmNwUHJlc2V0Q29sb3JzQ2hhbmdlPW5ldyBMaCghMCl9aGFuZGxlQ2xpY2soKXt0aGlzLmlucHV0Rm9jdXMoKX1oYW5kbGVGb2N1cygpe3RoaXMuaW5wdXRGb2N1cygpfWhhbmRsZUlucHV0KHQpe3RoaXMuaW5wdXRDaGFuZ2UodCl9bmdPbkRlc3Ryb3koKXtudWxsIT10aGlzLmNtcFJlZiYmKHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWYmJnRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5jbXBSZWYuaG9zdFZpZXcpLHRoaXMuY21wUmVmLmRlc3Ryb3koKSx0aGlzLmNtcFJlZj1udWxsLHRoaXMuZGlhbG9nPW51bGwpfW5nT25DaGFuZ2VzKHQpe3QuY3BUb2dnbGUmJiF0aGlzLmNwRGlzYWJsZWQmJih0LmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZT90aGlzLm9wZW5EaWFsb2coKTp0LmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZXx8dGhpcy5jbG9zZURpYWxvZygpKSx0LmNvbG9yUGlja2VyJiYodGhpcy5kaWFsb2cmJiF0aGlzLmlnbm9yZUNoYW5nZXMmJigiaW5saW5lIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmRpYWxvZy5zZXRJbml0aWFsQ29sb3IodC5jb2xvclBpY2tlci5jdXJyZW50VmFsdWUpLHRoaXMuZGlhbG9nLnNldENvbG9yRnJvbVN0cmluZyh0LmNvbG9yUGlja2VyLmN1cnJlbnRWYWx1ZSwhMSksdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyJiYiaW5saW5lIiE9PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCkpLHRoaXMuaWdub3JlQ2hhbmdlcz0hMSksKHQuY3BQcmVzZXRMYWJlbHx8dC5jcFByZXNldENvbG9ycykmJnRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5zZXRQcmVzZXRDb25maWcodGhpcy5jcFByZXNldExhYmVsLHRoaXMuY3BQcmVzZXRDb2xvcnMpfW9wZW5EaWFsb2coKXtpZih0aGlzLmRpYWxvZ0NyZWF0ZWQpdGhpcy5kaWFsb2cmJnRoaXMuZGlhbG9nLm9wZW5EaWFsb2codGhpcy5jb2xvclBpY2tlcik7ZWxzZXtsZXQgdD10aGlzLnZjUmVmO2lmKHRoaXMuZGlhbG9nQ3JlYXRlZD0hMCx0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmPSExLHRoaXMuY3BVc2VSb290Vmlld0NvbnRhaW5lciYmImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSl7Y29uc3QgZT10aGlzLmluamVjdG9yLmdldCh0aGlzLmFwcFJlZi5jb21wb25lbnRUeXBlc1swXSxycC5OVUxMKTtlIT09cnAuTlVMTD8odD1lLnZjUmVmfHxlLnZpZXdDb250YWluZXJSZWZ8fHRoaXMudmNSZWYsdD09PXRoaXMudmNSZWYmJmNvbnNvbGUud2FybigiWW91IGFyZSB1c2luZyBjcFVzZVJvb3RWaWV3Q29udGFpbmVyLCBidXQgdGhlIHJvb3QgY29tcG9uZW50IGlzIG5vdCBleHBvc2luZyB2aWV3Q29udGFpbmVyUmVmIVBsZWFzZSBleHBvc2UgaXQgYnkgYWRkaW5nICdwdWJsaWMgdmNSZWY6IFZpZXdDb250YWluZXJSZWYnIHRvIHRoZSBjb25zdHJ1Y3Rvci4iKSk6dGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMH1jb25zdCBlPXRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGgzKTtpZih0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmKXRoaXMuY21wUmVmPWUuY3JlYXRlKHRoaXMuaW5qZWN0b3IpLHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcodGhpcy5jbXBSZWYuaG9zdFZpZXcpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jbXBSZWYuaG9zdFZpZXcucm9vdE5vZGVzWzBdKTtlbHNle2NvbnN0IG49d20uZnJvbVJlc29sdmVkUHJvdmlkZXJzKFtdLHQucGFyZW50SW5qZWN0b3IpO3RoaXMuY21wUmVmPXQuY3JlYXRlQ29tcG9uZW50KGUsMCxuLFtdKX10aGlzLmNtcFJlZi5pbnN0YW5jZS5zZXR1cERpYWxvZyh0aGlzLHRoaXMuZWxSZWYsdGhpcy5jb2xvclBpY2tlcix0aGlzLmNwV2lkdGgsdGhpcy5jcEhlaWdodCx0aGlzLmNwRGlhbG9nRGlzcGxheSx0aGlzLmNwRmFsbGJhY2tDb2xvcix0aGlzLmNwQ29sb3JNb2RlLHRoaXMuY3BDbXlrRW5hYmxlZCx0aGlzLmNwQWxwaGFDaGFubmVsLHRoaXMuY3BPdXRwdXRGb3JtYXQsdGhpcy5jcERpc2FibGVJbnB1dCx0aGlzLmNwSWdub3JlZEVsZW1lbnRzLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZSx0aGlzLmNwVXNlUm9vdFZpZXdDb250YWluZXIsdGhpcy5jcFBvc2l0aW9uLHRoaXMuY3BQb3NpdGlvbk9mZnNldCx0aGlzLmNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3csdGhpcy5jcFByZXNldExhYmVsLHRoaXMuY3BQcmVzZXRDb2xvcnMsdGhpcy5jcFByZXNldENvbG9yc0NsYXNzLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGgsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZSx0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3MsdGhpcy5jcE9LQnV0dG9uLHRoaXMuY3BPS0J1dHRvbkNsYXNzLHRoaXMuY3BPS0J1dHRvblRleHQsdGhpcy5jcENhbmNlbEJ1dHRvbix0aGlzLmNwQ2FuY2VsQnV0dG9uQ2xhc3MsdGhpcy5jcENhbmNlbEJ1dHRvblRleHQsdGhpcy5jcEFkZENvbG9yQnV0dG9uLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzLHRoaXMuY3BBZGRDb2xvckJ1dHRvblRleHQsdGhpcy5jcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3MsdGhpcy5lbFJlZiksdGhpcy5kaWFsb2c9dGhpcy5jbXBSZWYuaW5zdGFuY2UsdGhpcy52Y1JlZiE9PXQmJnRoaXMuY21wUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKX19Y2xvc2VEaWFsb2coKXt0aGlzLmRpYWxvZyYmInBvcHVwIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmRpYWxvZy5jbG9zZURpYWxvZygpfWNteWtDaGFuZ2VkKHQpe3RoaXMuY3BDbXlrQ29sb3JDaGFuZ2UuZW1pdCh0KX1zdGF0ZUNoYW5nZWQodCl7dGhpcy5jcFRvZ2dsZUNoYW5nZS5lbWl0KHQpLHQ/dGhpcy5jb2xvclBpY2tlck9wZW4uZW1pdCh0aGlzLmNvbG9yUGlja2VyKTp0aGlzLmNvbG9yUGlja2VyQ2xvc2UuZW1pdCh0aGlzLmNvbG9yUGlja2VyKX1jb2xvckNoYW5nZWQodCxlPSEwKXt0aGlzLmlnbm9yZUNoYW5nZXM9ZSx0aGlzLmNvbG9yUGlja2VyQ2hhbmdlLmVtaXQodCl9Y29sb3JTZWxlY3RlZCh0KXt0aGlzLmNvbG9yUGlja2VyU2VsZWN0LmVtaXQodCl9Y29sb3JDYW5jZWxlZCgpe3RoaXMuY29sb3JQaWNrZXJDYW5jZWwuZW1pdCgpfWlucHV0Rm9jdXMoKXtjb25zdCB0PXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCxlPXRoaXMuY3BJZ25vcmVkRWxlbWVudHMuZmlsdGVyKChlPT5lPT09dCkpO3RoaXMuY3BEaXNhYmxlZHx8ZS5sZW5ndGh8fCgidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiZ0PT09ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD90aGlzLm9wZW5EaWFsb2coKTp0aGlzLmRpYWxvZyYmdGhpcy5kaWFsb2cuc2hvdz90aGlzLmNsb3NlRGlhbG9nKCk6dGhpcy5vcGVuRGlhbG9nKCkpfWlucHV0Q2hhbmdlKHQpe3RoaXMuZGlhbG9nP3RoaXMuZGlhbG9nLnNldENvbG9yRnJvbVN0cmluZyh0LnRhcmdldC52YWx1ZSwhMCk6KHRoaXMuY29sb3JQaWNrZXI9dC50YXJnZXQudmFsdWUsdGhpcy5jb2xvclBpY2tlckNoYW5nZS5lbWl0KHRoaXMuY29sb3JQaWNrZXIpKX1pbnB1dENoYW5nZWQodCl7dGhpcy5jcElucHV0Q2hhbmdlLmVtaXQodCl9c2xpZGVyQ2hhbmdlZCh0KXt0aGlzLmNwU2xpZGVyQ2hhbmdlLmVtaXQodCl9c2xpZGVyRHJhZ0VuZCh0KXt0aGlzLmNwU2xpZGVyRHJhZ0VuZC5lbWl0KHQpfXNsaWRlckRyYWdTdGFydCh0KXt0aGlzLmNwU2xpZGVyRHJhZ1N0YXJ0LmVtaXQodCl9cHJlc2V0Q29sb3JzQ2hhbmdlZCh0KXt0aGlzLmNwUHJlc2V0Q29sb3JzQ2hhbmdlLmVtaXQodCl9fWIzLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxiMykoU20ocnApLFNtKHVnKSxTbShPXyksU20oZWgpLFNtKGhnKSxTbShnMykpfSxiMy7JtWRpcj1sbyh7dHlwZTpiMyxzZWxlY3RvcnM6W1siIiwiY29sb3JQaWNrZXIiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJlZtKCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5oYW5kbGVDbGljaygpfSkpKCJmb2N1cyIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5oYW5kbGVGb2N1cygpfSkpKCJpbnB1dCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uaGFuZGxlSW5wdXQoZSl9KSl9LGlucHV0czp7Y3BXaWR0aDoiY3BXaWR0aCIsY3BIZWlnaHQ6ImNwSGVpZ2h0IixjcFRvZ2dsZToiY3BUb2dnbGUiLGNwRGlzYWJsZWQ6ImNwRGlzYWJsZWQiLGNwSWdub3JlZEVsZW1lbnRzOiJjcElnbm9yZWRFbGVtZW50cyIsY3BGYWxsYmFja0NvbG9yOiJjcEZhbGxiYWNrQ29sb3IiLGNwQ29sb3JNb2RlOiJjcENvbG9yTW9kZSIsY3BDbXlrRW5hYmxlZDoiY3BDbXlrRW5hYmxlZCIsY3BPdXRwdXRGb3JtYXQ6ImNwT3V0cHV0Rm9ybWF0IixjcEFscGhhQ2hhbm5lbDoiY3BBbHBoYUNoYW5uZWwiLGNwRGlzYWJsZUlucHV0OiJjcERpc2FibGVJbnB1dCIsY3BEaWFsb2dEaXNwbGF5OiJjcERpYWxvZ0Rpc3BsYXkiLGNwU2F2ZUNsaWNrT3V0c2lkZToiY3BTYXZlQ2xpY2tPdXRzaWRlIixjcENsb3NlQ2xpY2tPdXRzaWRlOiJjcENsb3NlQ2xpY2tPdXRzaWRlIixjcFVzZVJvb3RWaWV3Q29udGFpbmVyOiJjcFVzZVJvb3RWaWV3Q29udGFpbmVyIixjcFBvc2l0aW9uOiJjcFBvc2l0aW9uIixjcFBvc2l0aW9uT2Zmc2V0OiJjcFBvc2l0aW9uT2Zmc2V0IixjcFBvc2l0aW9uUmVsYXRpdmVUb0Fycm93OiJjcFBvc2l0aW9uUmVsYXRpdmVUb0Fycm93IixjcE9LQnV0dG9uOiJjcE9LQnV0dG9uIixjcE9LQnV0dG9uVGV4dDoiY3BPS0J1dHRvblRleHQiLGNwT0tCdXR0b25DbGFzczoiY3BPS0J1dHRvbkNsYXNzIixjcENhbmNlbEJ1dHRvbjoiY3BDYW5jZWxCdXR0b24iLGNwQ2FuY2VsQnV0dG9uVGV4dDoiY3BDYW5jZWxCdXR0b25UZXh0IixjcENhbmNlbEJ1dHRvbkNsYXNzOiJjcENhbmNlbEJ1dHRvbkNsYXNzIixjcFByZXNldExhYmVsOiJjcFByZXNldExhYmVsIixjcFByZXNldENvbG9yc0NsYXNzOiJjcFByZXNldENvbG9yc0NsYXNzIixjcE1heFByZXNldENvbG9yc0xlbmd0aDoiY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGgiLGNwUHJlc2V0RW1wdHlNZXNzYWdlOiJjcFByZXNldEVtcHR5TWVzc2FnZSIsY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzczoiY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcyIsY3BBZGRDb2xvckJ1dHRvbjoiY3BBZGRDb2xvckJ1dHRvbiIsY3BBZGRDb2xvckJ1dHRvblRleHQ6ImNwQWRkQ29sb3JCdXR0b25UZXh0IixjcEFkZENvbG9yQnV0dG9uQ2xhc3M6ImNwQWRkQ29sb3JCdXR0b25DbGFzcyIsY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzOiJjcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3MiLGNvbG9yUGlja2VyOiJjb2xvclBpY2tlciIsY3BQcmVzZXRDb2xvcnM6ImNwUHJlc2V0Q29sb3JzIn0sb3V0cHV0czp7Y3BJbnB1dENoYW5nZToiY3BJbnB1dENoYW5nZSIsY3BUb2dnbGVDaGFuZ2U6ImNwVG9nZ2xlQ2hhbmdlIixjcFNsaWRlckNoYW5nZToiY3BTbGlkZXJDaGFuZ2UiLGNwU2xpZGVyRHJhZ0VuZDoiY3BTbGlkZXJEcmFnRW5kIixjcFNsaWRlckRyYWdTdGFydDoiY3BTbGlkZXJEcmFnU3RhcnQiLGNvbG9yUGlja2VyT3BlbjoiY29sb3JQaWNrZXJPcGVuIixjb2xvclBpY2tlckNsb3NlOiJjb2xvclBpY2tlckNsb3NlIixjb2xvclBpY2tlckNhbmNlbDoiY29sb3JQaWNrZXJDYW5jZWwiLGNvbG9yUGlja2VyU2VsZWN0OiJjb2xvclBpY2tlclNlbGVjdCIsY29sb3JQaWNrZXJDaGFuZ2U6ImNvbG9yUGlja2VyQ2hhbmdlIixjcENteWtDb2xvckNoYW5nZToiY3BDbXlrQ29sb3JDaGFuZ2UiLGNwUHJlc2V0Q29sb3JzQ2hhbmdlOiJjcFByZXNldENvbG9yc0NoYW5nZSJ9LGV4cG9ydEFzOlsibmd4Q29sb3JQaWNrZXIiXSxmZWF0dXJlczpbQm9dfSksYjMuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpycH0se3R5cGU6dWd9LHt0eXBlOk9ffSx7dHlwZTplaH0se3R5cGU6aGd9LHt0eXBlOmczfV0sYjMucHJvcERlY29yYXRvcnM9e2NvbG9yUGlja2VyOlt7dHlwZTp4eX1dLGNwV2lkdGg6W3t0eXBlOnh5fV0sY3BIZWlnaHQ6W3t0eXBlOnh5fV0sY3BUb2dnbGU6W3t0eXBlOnh5fV0sY3BEaXNhYmxlZDpbe3R5cGU6eHl9XSxjcElnbm9yZWRFbGVtZW50czpbe3R5cGU6eHl9XSxjcEZhbGxiYWNrQ29sb3I6W3t0eXBlOnh5fV0sY3BDb2xvck1vZGU6W3t0eXBlOnh5fV0sY3BDbXlrRW5hYmxlZDpbe3R5cGU6eHl9XSxjcE91dHB1dEZvcm1hdDpbe3R5cGU6eHl9XSxjcEFscGhhQ2hhbm5lbDpbe3R5cGU6eHl9XSxjcERpc2FibGVJbnB1dDpbe3R5cGU6eHl9XSxjcERpYWxvZ0Rpc3BsYXk6W3t0eXBlOnh5fV0sY3BTYXZlQ2xpY2tPdXRzaWRlOlt7dHlwZTp4eX1dLGNwQ2xvc2VDbGlja091dHNpZGU6W3t0eXBlOnh5fV0sY3BVc2VSb290Vmlld0NvbnRhaW5lcjpbe3R5cGU6eHl9XSxjcFBvc2l0aW9uOlt7dHlwZTp4eX1dLGNwUG9zaXRpb25PZmZzZXQ6W3t0eXBlOnh5fV0sY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdzpbe3R5cGU6eHl9XSxjcE9LQnV0dG9uOlt7dHlwZTp4eX1dLGNwT0tCdXR0b25UZXh0Olt7dHlwZTp4eX1dLGNwT0tCdXR0b25DbGFzczpbe3R5cGU6eHl9XSxjcENhbmNlbEJ1dHRvbjpbe3R5cGU6eHl9XSxjcENhbmNlbEJ1dHRvblRleHQ6W3t0eXBlOnh5fV0sY3BDYW5jZWxCdXR0b25DbGFzczpbe3R5cGU6eHl9XSxjcFByZXNldExhYmVsOlt7dHlwZTp4eX1dLGNwUHJlc2V0Q29sb3JzOlt7dHlwZTp4eX1dLGNwUHJlc2V0Q29sb3JzQ2xhc3M6W3t0eXBlOnh5fV0sY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg6W3t0eXBlOnh5fV0sY3BQcmVzZXRFbXB0eU1lc3NhZ2U6W3t0eXBlOnh5fV0sY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzczpbe3R5cGU6eHl9XSxjcEFkZENvbG9yQnV0dG9uOlt7dHlwZTp4eX1dLGNwQWRkQ29sb3JCdXR0b25UZXh0Olt7dHlwZTp4eX1dLGNwQWRkQ29sb3JCdXR0b25DbGFzczpbe3R5cGU6eHl9XSxjcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3M6W3t0eXBlOnh5fV0sY3BJbnB1dENoYW5nZTpbe3R5cGU6T3l9XSxjcFRvZ2dsZUNoYW5nZTpbe3R5cGU6T3l9XSxjcFNsaWRlckNoYW5nZTpbe3R5cGU6T3l9XSxjcFNsaWRlckRyYWdFbmQ6W3t0eXBlOk95fV0sY3BTbGlkZXJEcmFnU3RhcnQ6W3t0eXBlOk95fV0sY29sb3JQaWNrZXJPcGVuOlt7dHlwZTpPeX1dLGNvbG9yUGlja2VyQ2xvc2U6W3t0eXBlOk95fV0sY29sb3JQaWNrZXJDYW5jZWw6W3t0eXBlOk95fV0sY29sb3JQaWNrZXJTZWxlY3Q6W3t0eXBlOk95fV0sY29sb3JQaWNrZXJDaGFuZ2U6W3t0eXBlOk95fV0sY3BDbXlrQ29sb3JDaGFuZ2U6W3t0eXBlOk95fV0sY3BQcmVzZXRDb2xvcnNDaGFuZ2U6W3t0eXBlOk95fV0saGFuZGxlQ2xpY2s6W3t0eXBlOnd5LGFyZ3M6WyJjbGljayJdfV0saGFuZGxlRm9jdXM6W3t0eXBlOnd5LGFyZ3M6WyJmb2N1cyJdfV0saGFuZGxlSW5wdXQ6W3t0eXBlOnd5LGFyZ3M6WyJpbnB1dCIsWyIkZXZlbnQiXV19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChiMyxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbY29sb3JQaWNrZXJdIixleHBvcnRBczoibmd4Q29sb3JQaWNrZXIifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6cnB9LHt0eXBlOnVnfSx7dHlwZTpPX30se3R5cGU6ZWh9LHt0eXBlOmhnfSx7dHlwZTpnM31dfSkse2NwV2lkdGg6W3t0eXBlOnh5fV0sY3BIZWlnaHQ6W3t0eXBlOnh5fV0sY3BUb2dnbGU6W3t0eXBlOnh5fV0sY3BEaXNhYmxlZDpbe3R5cGU6eHl9XSxjcElnbm9yZWRFbGVtZW50czpbe3R5cGU6eHl9XSxjcEZhbGxiYWNrQ29sb3I6W3t0eXBlOnh5fV0sY3BDb2xvck1vZGU6W3t0eXBlOnh5fV0sY3BDbXlrRW5hYmxlZDpbe3R5cGU6eHl9XSxjcE91dHB1dEZvcm1hdDpbe3R5cGU6eHl9XSxjcEFscGhhQ2hhbm5lbDpbe3R5cGU6eHl9XSxjcERpc2FibGVJbnB1dDpbe3R5cGU6eHl9XSxjcERpYWxvZ0Rpc3BsYXk6W3t0eXBlOnh5fV0sY3BTYXZlQ2xpY2tPdXRzaWRlOlt7dHlwZTp4eX1dLGNwQ2xvc2VDbGlja091dHNpZGU6W3t0eXBlOnh5fV0sY3BVc2VSb290Vmlld0NvbnRhaW5lcjpbe3R5cGU6eHl9XSxjcFBvc2l0aW9uOlt7dHlwZTp4eX1dLGNwUG9zaXRpb25PZmZzZXQ6W3t0eXBlOnh5fV0sY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdzpbe3R5cGU6eHl9XSxjcE9LQnV0dG9uOlt7dHlwZTp4eX1dLGNwT0tCdXR0b25UZXh0Olt7dHlwZTp4eX1dLGNwT0tCdXR0b25DbGFzczpbe3R5cGU6eHl9XSxjcENhbmNlbEJ1dHRvbjpbe3R5cGU6eHl9XSxjcENhbmNlbEJ1dHRvblRleHQ6W3t0eXBlOnh5fV0sY3BDYW5jZWxCdXR0b25DbGFzczpbe3R5cGU6eHl9XSxjcFByZXNldExhYmVsOlt7dHlwZTp4eX1dLGNwUHJlc2V0Q29sb3JzQ2xhc3M6W3t0eXBlOnh5fV0sY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg6W3t0eXBlOnh5fV0sY3BQcmVzZXRFbXB0eU1lc3NhZ2U6W3t0eXBlOnh5fV0sY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzczpbe3R5cGU6eHl9XSxjcEFkZENvbG9yQnV0dG9uOlt7dHlwZTp4eX1dLGNwQWRkQ29sb3JCdXR0b25UZXh0Olt7dHlwZTp4eX1dLGNwQWRkQ29sb3JCdXR0b25DbGFzczpbe3R5cGU6eHl9XSxjcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3M6W3t0eXBlOnh5fV0sY3BJbnB1dENoYW5nZTpbe3R5cGU6T3l9XSxjcFRvZ2dsZUNoYW5nZTpbe3R5cGU6T3l9XSxjcFNsaWRlckNoYW5nZTpbe3R5cGU6T3l9XSxjcFNsaWRlckRyYWdFbmQ6W3t0eXBlOk95fV0sY3BTbGlkZXJEcmFnU3RhcnQ6W3t0eXBlOk95fV0sY29sb3JQaWNrZXJPcGVuOlt7dHlwZTpPeX1dLGNvbG9yUGlja2VyQ2xvc2U6W3t0eXBlOk95fV0sY29sb3JQaWNrZXJDYW5jZWw6W3t0eXBlOk95fV0sY29sb3JQaWNrZXJTZWxlY3Q6W3t0eXBlOk95fV0sY29sb3JQaWNrZXJDaGFuZ2U6W3t0eXBlOk95fV0sY3BDbXlrQ29sb3JDaGFuZ2U6W3t0eXBlOk95fV0sY3BQcmVzZXRDb2xvcnNDaGFuZ2U6W3t0eXBlOk95fV0saGFuZGxlQ2xpY2s6W3t0eXBlOnd5LGFyZ3M6WyJjbGljayJdfV0saGFuZGxlRm9jdXM6W3t0eXBlOnd5LGFyZ3M6WyJmb2N1cyJdfV0saGFuZGxlSW5wdXQ6W3t0eXBlOnd5LGFyZ3M6WyJpbnB1dCIsWyIkZXZlbnQiXV19XSxjb2xvclBpY2tlcjpbe3R5cGU6eHl9XSxjcFByZXNldENvbG9yczpbe3R5cGU6eHl9XX0pO2NsYXNzIHkze315My7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8eTMpfSx5My7JtW1vZD1hbyh7dHlwZTp5M30pLHkzLsm1aW5qPXZuKHtwcm92aWRlcnM6W2czXSxpbXBvcnRzOltbV01dXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoeTMsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltXTV0sZXhwb3J0czpbYjNdLHByb3ZpZGVyczpbZzNdLGRlY2xhcmF0aW9uczpbaDMsYjMscDMsbTNdLGVudHJ5Q29tcG9uZW50czpbaDNdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oeTMse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltoMyxiMyxwMyxtM119LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bV01dfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW2IzXX19KTtjb25zdCBfMz1bImZpbHRlciJdO2Z1bmN0aW9uIEMzKHQsZSl7MSZ0JiZJbSgwKX1mdW5jdGlvbiBNMyh0LGUpezEmdCYmSW0oMCl9Y29uc3QgdjM9ZnVuY3Rpb24odCl7cmV0dXJue2l0ZW06dH19O2Z1bmN0aW9uIHgzKHQsZSl7aWYoMSZ0JiYoTm0oMCksUXAoMSxNMywxLDAsIm5nLWNvbnRhaW5lciIsMTIpLHptKCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdDtZbSgpO2NvbnN0IG49JHAoMTQpO3JjKDEpLERtKCJuZ1RlbXBsYXRlT3V0bGV0IixuKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLE1oKDIsdjMsdCkpfX1mdW5jdGlvbiBPMyh0LGUpezEmdCYmKFJtKDAsImRpdiIsMTMpLFRtKDEsIm1hdC1zcGlubmVyIiwxNCksQW0oKSl9ZnVuY3Rpb24gUDModCxlKXsxJnQmJihSbSgwLCJkaXYiLDE1KSxrdSgxLCJObyBSdW5zIiksQW0oKSl9ZnVuY3Rpb24gdzModCxlKXtpZigxJnQmJihSbSgwLCJkaXYiLDE1KSxSbSgxLCJzcGFuIiksa3UoMiwnTm8gcnVucyBtYXRjaCAiJyksUm0oMywiY29kZSIpLGt1KDQpLEFtKCksa3UoNSwnIicpLEFtKCksQW0oKSksMiZ0KXtjb25zdCB0PVltKCk7cmMoNCksU3UodC5yZWdleEZpbHRlcil9fWNvbnN0IGszPWZ1bmN0aW9uKCl7cmV0dXJuWzUsMTAsMjBdfTtmdW5jdGlvbiBTMyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsIm1hdC1wYWdpbmF0b3IiLDE2KSxWbSgicGFnZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKCkub25QYWdpbmF0aW9uQ2hhbmdlLmVtaXQobil9KSksQW0oKX1pZigyJnQpe2NvbnN0IHQ9WW0oKTtEbSgicGFnZVNpemVPcHRpb25zIixDaCg0LGszKSkoInBhZ2VJbmRleCIsdC5wYWdpbmF0aW9uT3B0aW9uLnBhZ2VJbmRleCkoInBhZ2VTaXplIix0LnBhZ2luYXRpb25PcHRpb24ucGFnZVNpemUpKCJsZW5ndGgiLHQuZmlsdGVyZWRJdGVtc0xlbmd0aCl9fWZ1bmN0aW9uIEQzKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwibWF0LWNoZWNrYm94IiwyNiksVm0oImNoYW5nZSIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaGkodCksWW0oMykuaGFuZGxlUGFnZVRvZ2dsZSgpfSkpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PVltKDMpO0RtKCJjaGVja2VkIix0LmFsbFBhZ2VJdGVtc1NlbGVjdGVkKCkpKCJpbmRldGVybWluYXRlIiwhdC5hbGxQYWdlSXRlbXNTZWxlY3RlZCgpJiZ0LnNvbWVQYWdlSXRlbXNTZWxlY3RlZCgpKX19Y29uc3QgRTM9ZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6dH19O2Z1bmN0aW9uIFIzKHQsZSl7aWYoMSZ0JiYoUm0oMCwic3BhbiIsMjcpLGt1KDEsIkV4cGVyaW1lbnQiKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oMyk7RG0oIm1hdC1zb3J0LWhlYWRlciIsTWgoMSxFMyx0LlNvcnRUeXBlLkVYUEVSSU1FTlRfTkFNRSkpfX1mdW5jdGlvbiBBMyh0LGUpe2lmKDEmdCYmKFJtKDAsInNwYW4iLDI3KSxrdSgxLCJSdW4iKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oMyk7RG0oIm1hdC1zb3J0LWhlYWRlciIsTWgoMSxFMyx0LlNvcnRUeXBlLlJVTl9OQU1FKSl9fWZ1bmN0aW9uIFQzKHQsZSl7MSZ0JiZUbSgwLCJydW5zLWdyb3VwLW1lbnUtYnV0dG9uIiwyOSksMiZ0JiZEbSgiZXhwZXJpbWVudElkcyIsWW0oNCkuZXhwZXJpbWVudElkcyl9ZnVuY3Rpb24gTjModCxlKXtpZigxJnQmJihSbSgwLCJzcGFuIiksUXAoMSxUMywxLDEsInJ1bnMtZ3JvdXAtbWVudS1idXR0b24iLDI4KSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oMyk7cmMoMSksRG0oIm5nSWYiLHQuc2hvd0dyb3VwQ29udHJvbCl9fWNvbnN0IHozPWZ1bmN0aW9uKHQpe3JldHVyblsiY29sdW1uIix0XX07ZnVuY3Rpb24gSTModCxlKXtpZigxJnQmJihSbSgwLCJzcGFuIiwyMSksTm0oMSwyMiksUXAoMixEMywxLDIsIm1hdC1jaGVja2JveCIsMjMpLFFwKDMsUjMsMiwzLCJzcGFuIiwyNCksUXAoNCxBMywyLDMsInNwYW4iLDI0KSxRcCg1LE4zLDIsMSwic3BhbiIsMjUpLHptKCksQW0oKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49WW0oMik7RG0oIm5nQ2xhc3MiLE1oKDYsejMsInRiLWNvbHVtbi0iK3QpKSxyYygxKSxEbSgibmdTd2l0Y2giLHQpLHJjKDEpLERtKCJuZ1N3aXRjaENhc2UiLG4uUnVuc1RhYmxlQ29sdW1uLkNIRUNLQk9YKSxyYygxKSxEbSgibmdTd2l0Y2hDYXNlIixuLlJ1bnNUYWJsZUNvbHVtbi5FWFBFUklNRU5UX05BTUUpLHJjKDEpLERtKCJuZ1N3aXRjaENhc2UiLG4uUnVuc1RhYmxlQ29sdW1uLlJVTl9OQU1FKSxyYygxKSxEbSgibmdTd2l0Y2hDYXNlIixuLlJ1bnNUYWJsZUNvbHVtbi5SVU5fQ09MT1IpfX1mdW5jdGlvbiBIMyh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO05tKDApLFJtKDEsImRpdiIsMzgpLFZtKCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCl9KSksUm0oMiwidGItcmFuZ2UtaW5wdXQiLDM5KSxWbSgidmFsdWUiLChmdW5jdGlvbiBlKG4pe2hpKHQpO2NvbnN0IG89WW0oMikuJGltcGxpY2l0O3JldHVybiBZbSgyKS5oYW5kbGVIcGFyYW1JbnRlcnZhbENoYW5nZWQobyxuKX0pKSxBbSgpLEFtKCksem0oKX1pZigyJnQpe2NvbnN0IHQ9WW0oMikuJGltcGxpY2l0O3JjKDIpLERtKCJtaW4iLHQuZmlsdGVyLm1pblZhbHVlKSgibWF4Iix0LmZpbHRlci5tYXhWYWx1ZSkoImxvd2VyVmFsdWUiLHQuZmlsdGVyLmZpbHRlckxvd2VyVmFsdWUpKCJ1cHBlclZhbHVlIix0LmZpbHRlci5maWx0ZXJVcHBlclZhbHVlKX19ZnVuY3Rpb24gRjModCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJkaXYiLDQxKSxWbSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpfSkpLFJtKDEsIm1hdC1jaGVja2JveCIsMzcpLFZtKCJjaGFuZ2UiLChmdW5jdGlvbiBlKCl7Y29uc3Qgbj1oaSh0KS4kaW1wbGljaXQsbz1ZbSgzKS4kaW1wbGljaXQ7cmV0dXJuIFltKDIpLmhhbmRsZUhwYXJhbURpc2NyZXRlQ2hhbmdlZChvLG4pfSkpLFJtKDIsInNwYW4iKSxrdSgzKSxBbSgpLEFtKCksQW0oKX1pZigyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1ZbSgzKS4kaW1wbGljaXQ7cmMoMSksRG0oImNoZWNrZWQiLG4uZmlsdGVyLmZpbHRlclZhbHVlcy5pbmNsdWRlcyh0KSkscmMoMiksU3UodCl9fWZ1bmN0aW9uIEwzKHQsZSl7aWYoMSZ0JiYoTm0oMCksUXAoMSxGMyw0LDIsImRpdiIsNDApLHptKCkpLDImdCl7Y29uc3QgdD1ZbSgyKS4kaW1wbGljaXQ7cmMoMSksRG0oIm5nRm9yT2YiLHQuZmlsdGVyLnBvc3NpYmxlVmFsdWVzKX19ZnVuY3Rpb24gQjModCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtObSgwKSxSbSgxLCJidXR0b24iLDMzKSxWbSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpfSkpLFRtKDIsIm1hdC1pY29uIiwzNCksQW0oKSxSbSgzLCJtYXQtbWVudSIsbnVsbCwzNSksUm0oNSwiZGl2IiwzNiksVm0oImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKX0pKSxSbSg2LCJtYXQtY2hlY2tib3giLDM3KSxWbSgiY2hhbmdlIiwoZnVuY3Rpb24gZSgpe2hpKHQpO2NvbnN0IG49WW0oKS4kaW1wbGljaXQ7cmV0dXJuIFltKDIpLmhhbmRsZUhwYXJhbUluY2x1ZGVVbmRlZmluZWRUb2dnbGVkKG4pfSkpLFJtKDcsInNwYW4iKSxrdSg4LCIoc2hvdyBlbXB0eSB2YWx1ZSkiKSxBbSgpLEFtKCksQW0oKSxRcCg5LEgzLDMsNCwibmctY29udGFpbmVyIiwzMiksUXAoMTAsTDMsMiwxLCJuZy1jb250YWluZXIiLDMyKSxBbSgpLHptKCl9aWYoMiZ0KXtjb25zdCB0PSRwKDQpLGU9WW0oKS4kaW1wbGljaXQsbj1ZbSgyKTtyYygxKSxEbSgibWF0TWVudVRyaWdnZXJGb3IiLHQpLGpwKCJhcmlhLWxhYmVsIiwiRmlsdGVyIGhwYXJhbSAiKyhlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKSxyYyg1KSxEbSgiY2hlY2tlZCIsZS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCkscmMoMyksRG0oIm5nSWYiLGUuZmlsdGVyLnR5cGU9PT1uLkRvbWFpblR5cGUuSU5URVJWQUwpLHJjKDEpLERtKCJuZ0lmIixlLmZpbHRlci50eXBlPT09bi5Eb21haW5UeXBlLkRJU0NSRVRFKX19Y29uc3QgVjM9ZnVuY3Rpb24odCxlKXtyZXR1cm57dHlwZTp0LG5hbWU6ZX19O2Z1bmN0aW9uIGozKHQsZSl7aWYoMSZ0JiYoUm0oMCwic3BhbiIsMzApLFJtKDEsInNwYW4iLDMxKSxrdSgyKSxBbSgpLFFwKDMsQjMsMTEsNSwibmctY29udGFpbmVyIiwzMiksQW0oKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49WW0oMik7RG0oIm1hdC1zb3J0LWhlYWRlciIsdmgoMyxWMyxuLlNvcnRUeXBlLkhQQVJBTSx0Lm5hbWUpKSxyYygyKSxTdSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpLHJjKDEpLERtKCJuZ0lmIix0LmZpbHRlcil9fWZ1bmN0aW9uIFUzKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Tm0oMCksUm0oMSwiYnV0dG9uIiwzMyksVm0oImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKX0pKSxUbSgyLCJtYXQtaWNvbiIsMzQpLEFtKCksUm0oMywibWF0LW1lbnUiLG51bGwsMzUpLFJtKDUsImRpdiIsMzYpLFZtKCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCl9KSksUm0oNiwibWF0LWNoZWNrYm94IiwzNyksVm0oImNoYW5nZSIsKGZ1bmN0aW9uIGUoKXtoaSh0KTtjb25zdCBuPVltKCkuJGltcGxpY2l0O3JldHVybiBZbSgyKS5oYW5kbGVNZXRyaWNJbmNsdWRlVW5kZWZpbmVkQ2hhbmdlZChuKX0pKSxSbSg3LCJzcGFuIiksa3UoOCwiKHNob3cgZW1wdHkgdmFsdWUpIiksQW0oKSxBbSgpLEFtKCksUm0oOSwiZGl2IiwzOCksVm0oImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKX0pKSxSbSgxMCwidGItcmFuZ2UtaW5wdXQiLDM5KSxWbSgidmFsdWUiLChmdW5jdGlvbiBlKG4pe2hpKHQpO2NvbnN0IG89WW0oKS4kaW1wbGljaXQ7cmV0dXJuIFltKDIpLmhhbmRsZU1ldHJpY0ZpbHRlckNoYW5nZWQobyxuKX0pKSxBbSgpLEFtKCksQW0oKSx6bSgpfWlmKDImdCl7Y29uc3QgdD0kcCg0KSxlPVltKCkuJGltcGxpY2l0O3JjKDEpLERtKCJtYXRNZW51VHJpZ2dlckZvciIsdCksanAoImFyaWEtbGFiZWwiLCJGaWx0ZXIgbWV0cmljICIrKGUuZGlzcGxheU5hbWV8fGUudGFnKSkscmMoNSksRG0oImNoZWNrZWQiLGUuZmlsdGVyLmluY2x1ZGVVbmRlZmluZWQpLHJjKDQpLERtKCJtaW4iLGUuZmlsdGVyLm1pblZhbHVlKSgibWF4IixlLmZpbHRlci5tYXhWYWx1ZSkoImxvd2VyVmFsdWUiLGUuZmlsdGVyLmZpbHRlckxvd2VyVmFsdWUpKCJ1cHBlclZhbHVlIixlLmZpbHRlci5maWx0ZXJVcHBlclZhbHVlKX19Y29uc3QgRzM9ZnVuY3Rpb24odCxlKXtyZXR1cm57dHlwZTp0LHRhZzplfX07ZnVuY3Rpb24gVzModCxlKXtpZigxJnQmJihSbSgwLCJzcGFuIiwzMCksUm0oMSwic3BhbiIsMzEpLGt1KDIpLEFtKCksUXAoMyxVMywxMSw3LCJuZy1jb250YWluZXIiLDMyKSxBbSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1ZbSgyKTtEbSgibWF0LXNvcnQtaGVhZGVyIix2aCgzLEczLG4uU29ydFR5cGUuTUVUUklDLHQudGFnKSkscmMoMiksU3UodC5kaXNwbGF5TmFtZXx8dC50YWcpLHJjKDEpLERtKCJuZ0lmIix0LmZpbHRlcil9fWZ1bmN0aW9uIFkzKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiZGl2IiwxNyksUm0oMSwiZGl2IiwxOCksVm0oIm1hdFNvcnRDaGFuZ2UiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLmhhbmRsZVNvcnRDaGFuZ2Uobil9KSksUXAoMixJMyw2LDgsInNwYW4iLDE5KSxRcCgzLGozLDQsNiwic3BhbiIsMjApLFFwKDQsVzMsNCw2LCJzcGFuIiwyMCksQW0oKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgpO3JjKDEpLERtKCJtYXRTb3J0QWN0aXZlIix0LnNvcnRPcHRpb24uY29sdW1uKSxyYygxKSxEbSgibmdGb3JPZiIsdC5jb2x1bW5zKSxyYygxKSxEbSgibmdGb3JPZiIsdC5ocGFyYW1Db2x1bW5zKSgibmdGb3JUcmFja0J5Iix0LnRyYWNrQnlIcGFyYW1Db2x1bW4pLHJjKDEpLERtKCJuZ0Zvck9mIix0Lm1ldHJpY0NvbHVtbnMpKCJuZ0ZvclRyYWNrQnkiLHQudHJhY2tCeU1ldHJpY0NvbHVtbil9fWZ1bmN0aW9uIHEzKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwic3BhbiIpLFJtKDEsIm1hdC1jaGVja2JveCIsMzcpLFZtKCJjaGFuZ2UiLChmdW5jdGlvbiBlKCl7aGkodCk7Y29uc3Qgbj1ZbSgyKS5pdGVtO3JldHVybiBZbSgpLm9uU2VsZWN0aW9uVG9nZ2xlLmVtaXQobil9KSksQW0oKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgyKS5pdGVtO3JjKDEpLERtKCJjaGVja2VkIix0LnNlbGVjdGVkKX19ZnVuY3Rpb24gWjModCxlKXtpZigxJnQmJihSbSgwLCJzcGFuIiwzMSksa3UoMSksQW0oKSksMiZ0KXtjb25zdCB0PVltKDIpLml0ZW07anAoInRpdGxlIix0LmV4cGVyaW1lbnROYW1lKSxyYygxKSxTdSh0LmV4cGVyaW1lbnRBbGlhcyl9fWZ1bmN0aW9uIFgzKHQsZSl7aWYoMSZ0JiYoUm0oMCwic3BhbiIsMzEpLGt1KDEpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgyKS5pdGVtO3JjKDEpLFN1KHQucnVuLm5hbWUpfX1jb25zdCBLMz1mdW5jdGlvbih0KXtyZXR1cm57InJ1bi1jb2xvci1zd2F0Y2giOiEwLCJuby1jb2xvciI6dH19O2Z1bmN0aW9uIEozKHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwic3BhbiIpLFJtKDEsImJ1dHRvbiIsNDcpLFZtKCJjb2xvclBpY2tlckNoYW5nZSIsKGZ1bmN0aW9uIGUobil7aGkodCk7Y29uc3Qgbz1ZbSgyKS5pdGVtO3JldHVybiBZbSgpLm9uUnVuQ29sb3JDaGFuZ2UuZW1pdCh7cnVuSWQ6by5ydW4uaWQsbmV3Q29sb3I6bn0pfSkpLEFtKCksQW0oKX1pZigyJnQpe2NvbnN0IHQ9WW0oMikuaXRlbTtyYygxKSxkdSgiYmFja2dyb3VuZCIsdC5ydW5Db2xvciksRG0oIm5nQ2xhc3MiLE1oKDgsSzMsIXQucnVuQ29sb3IpKSgiY29sb3JQaWNrZXIiLHQucnVuQ29sb3IpKCJjcERpYWxvZ0Rpc3BsYXkiLCJwb3B1cCIpKCJjcFBvc2l0aW9uT2Zmc2V0IiwtMjApKCJjcFVzZVJvb3RWaWV3Q29udGFpbmVyIiwhMCkoImNwT3V0cHV0Rm9ybWF0IiwiaGV4Iil9fWZ1bmN0aW9uIFEzKHQsZSl7aWYoMSZ0JiYoUm0oMCwic3BhbiIsNDUpLE5tKDEsMjIpLFFwKDIscTMsMiwxLCJzcGFuIiwyNSksUXAoMyxaMywyLDIsInNwYW4iLDQ2KSxRcCg0LFgzLDIsMSwic3BhbiIsNDYpLFFwKDUsSjMsMiwxMCwic3BhbiIsMjUpLHptKCksQW0oKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49WW0oMik7RG0oIm5nQ2xhc3MiLE1oKDYsejMsInRiLWNvbHVtbi0iK3QpKSxyYygxKSxEbSgibmdTd2l0Y2giLHQpLHJjKDEpLERtKCJuZ1N3aXRjaENhc2UiLG4uUnVuc1RhYmxlQ29sdW1uLkNIRUNLQk9YKSxyYygxKSxEbSgibmdTd2l0Y2hDYXNlIixuLlJ1bnNUYWJsZUNvbHVtbi5FWFBFUklNRU5UX05BTUUpLHJjKDEpLERtKCJuZ1N3aXRjaENhc2UiLG4uUnVuc1RhYmxlQ29sdW1uLlJVTl9OQU1FKSxyYygxKSxEbSgibmdTd2l0Y2hDYXNlIixuLlJ1bnNUYWJsZUNvbHVtbi5SVU5fQ09MT1IpfX1mdW5jdGlvbiAkMyh0LGUpe2lmKDEmdCYmKFJtKDAsInNwYW4iLDQ4KSxrdSgxKSxBbSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1ZbSgpLml0ZW07cmMoMSksU3Uobi5ocGFyYW1zLmdldCh0Lm5hbWUpKX19ZnVuY3Rpb24gdDIodCxlKXtpZigxJnQmJihSbSgwLCJzcGFuIiw0OCksa3UoMSksQW0oKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49WW0oKS5pdGVtO3JjKDEpLFN1KG4ubWV0cmljcy5nZXQodC50YWcpKX19ZnVuY3Rpb24gZTIodCxlKXtpZigxJnQmJihSbSgwLCJkaXYiLDQyKSxRcCgxLFEzLDYsOCwic3BhbiIsNDMpLFFwKDIsJDMsMiwxLCJzcGFuIiw0NCksUXAoMyx0MiwyLDEsInNwYW4iLDQ0KSxBbSgpKSwyJnQpe2NvbnN0IHQ9ZS5pdGVtLG49WW0oKTtqcCgiZGF0YS1pZCIsdC5ydW4uaWQpLHJjKDEpLERtKCJuZ0Zvck9mIixuLmNvbHVtbnMpLHJjKDEpLERtKCJuZ0Zvck9mIixuLmhwYXJhbUNvbHVtbnMpLHJjKDEpLERtKCJuZ0Zvck9mIixuLm1ldHJpY0NvbHVtbnMpfX1jbGFzcyBuMiBleHRlbmRzIFpRe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLml0ZW1zUGVyUGFnZUxhYmVsPSJTaG93IHJ1bnM6In19bjIuybVmYWM9KGZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uIGUobil7cmV0dXJuKHR8fCh0PUFhKG4yKSkpKG58fG4yKX19KSgpLG4yLsm1cHJvdj1Nbih7dG9rZW46bjIsZmFjdG9yeTpuMi7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgobjIsW3t0eXBlOmltfV0sbnVsbCxudWxsKTtjbGFzcyBvMntjb25zdHJ1Y3Rvcigpe3RoaXMuZGF0YVNvdXJjZT1uZXcgUzAsdGhpcy5Eb21haW5UeXBlPVpSLHRoaXMuUnVuc1RhYmxlQ29sdW1uPXZRLHRoaXMuU29ydFR5cGU9JFQsdGhpcy5vblJlZ2V4RmlsdGVyQ2hhbmdlPW5ldyBMaCx0aGlzLm9uU2VsZWN0aW9uVG9nZ2xlPW5ldyBMaCx0aGlzLm9uUGFnZVNlbGVjdGlvblRvZ2dsZT1uZXcgTGgsdGhpcy5vblBhZ2luYXRpb25DaGFuZ2U9bmV3IExoLHRoaXMub25Tb3J0Q2hhbmdlPW5ldyBMaCx0aGlzLm9uUnVuQ29sb3JDaGFuZ2U9bmV3IExoLHRoaXMub25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQ9bmV3IExoLHRoaXMub25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQ9bmV3IExoLHRoaXMub25NZXRyaWNGaWx0ZXJDaGFuZ2VkPW5ldyBMaH1uZ09uQ2hhbmdlcygpe3RoaXMuZGF0YVNvdXJjZS5kYXRhPXRoaXMucGFnZUl0ZW1zfWdldEhwYXJhbUNvbHVtbklkKHQpe3JldHVybmBoOiR7dC5uYW1lfWB9Z2V0TWV0cmljQ29sdW1uSWQodCl7cmV0dXJuYG06JHt0LnRhZ31gfWdldENvbHVtbklkcygpe3JldHVyblsuLi50aGlzLmNvbHVtbnMsLi4udGhpcy5ocGFyYW1Db2x1bW5zLm1hcCh0aGlzLmdldEhwYXJhbUNvbHVtbklkKSwuLi50aGlzLm1ldHJpY0NvbHVtbnMubWFwKHRoaXMuZ2V0TWV0cmljQ29sdW1uSWQpXX1hbGxQYWdlSXRlbXNTZWxlY3RlZCgpe3JldHVybiBCb29sZWFuKHRoaXMucGFnZUl0ZW1zLmxlbmd0aCkmJnRoaXMucGFnZUl0ZW1zLmV2ZXJ5KCh0PT50LnNlbGVjdGVkKSl9c29tZVBhZ2VJdGVtc1NlbGVjdGVkKCl7cmV0dXJuIHRoaXMucGFnZUl0ZW1zLnNvbWUoKHQ9PnQuc2VsZWN0ZWQpKX1oYW5kbGVQYWdlVG9nZ2xlKCl7dGhpcy5vblBhZ2VTZWxlY3Rpb25Ub2dnbGUuZW1pdCh7aXRlbXM6dGhpcy5wYWdlSXRlbXN9KX1oYW5kbGVTb3J0Q2hhbmdlKHQpe2xldCBlO3N3aXRjaCh0LmRpcmVjdGlvbil7Y2FzZSJhc2MiOmU9Rk4uQVNDO2JyZWFrO2Nhc2UiZGVzYyI6ZT1GTi5ERVNDO2JyZWFrO2RlZmF1bHQ6ZT1GTi5VTlNFVH10aGlzLm9uU29ydENoYW5nZS5lbWl0KHtrZXk6dC5hY3RpdmUsZGlyZWN0aW9uOmV9KX1vbkZpbHRlcktleVVwKHQpe3RoaXMub25SZWdleEZpbHRlckNoYW5nZS5lbWl0KHQudGFyZ2V0LnZhbHVlKX10YWJsZVRyYWNrQnkodCxlKXtyZXR1cm4gZS5ydW4uaWR9aGFuZGxlSHBhcmFtSW5jbHVkZVVuZGVmaW5lZFRvZ2dsZWQodCl7Y29uc3R7bmFtZTplLGZpbHRlcjpufT10O2lmKCFuKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTtuLnR5cGU9PT1aUi5ESVNDUkVURT90aGlzLm9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkLmVtaXQoe2hwYXJhbU5hbWU6ZSxpbmNsdWRlVW5kZWZpbmVkOiFuLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyVmFsdWVzOm4uZmlsdGVyVmFsdWVzfSk6dGhpcy5vbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZC5lbWl0KHtuYW1lOmUsaW5jbHVkZVVuZGVmaW5lZDohbi5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlckxvd2VyVmFsdWU6bi5maWx0ZXJMb3dlclZhbHVlLGZpbHRlclVwcGVyVmFsdWU6bi5maWx0ZXJVcHBlclZhbHVlfSl9aGFuZGxlSHBhcmFtSW50ZXJ2YWxDaGFuZ2VkKHQsZSl7Y29uc3R7bmFtZTpuLGZpbHRlcjpvfT10O2lmKCFvKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTt0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6bixpbmNsdWRlVW5kZWZpbmVkOm8uaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOmUubG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmUudXBwZXJWYWx1ZX0pfWhhbmRsZUhwYXJhbURpc2NyZXRlQ2hhbmdlZCh0LGUpe2NvbnN0e25hbWU6bixmaWx0ZXI6b309dDtpZighbyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiByZXF1aXJlIGZpbHRlciB0byBleGlzdCBmb3IgaXQgdG8gY2hhbmdlIik7aWYoby50eXBlIT09WlIuRElTQ1JFVEUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFyaWFudCBlcnJvcjogZXhwZWN0ZWQgZGlzY3JldGUgZG9tYWluIGZvciAke259YCk7Y29uc3QgaT1uZXcgU2V0KFsuLi5vLmZpbHRlclZhbHVlc10pO2kuaGFzKGUpP2kuZGVsZXRlKGUpOmkuYWRkKGUpLHRoaXMub25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQuZW1pdCh7aHBhcmFtTmFtZTpuLGluY2x1ZGVVbmRlZmluZWQ6by5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlclZhbHVlczpbLi4uaV19KX1oYW5kbGVNZXRyaWNJbmNsdWRlVW5kZWZpbmVkQ2hhbmdlZCh0KXtpZighdC5maWx0ZXIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO3RoaXMub25NZXRyaWNGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6dC50YWcsaW5jbHVkZVVuZGVmaW5lZDohdC5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOnQuZmlsdGVyLmZpbHRlckxvd2VyVmFsdWUsZmlsdGVyVXBwZXJWYWx1ZTp0LmZpbHRlci5maWx0ZXJVcHBlclZhbHVlfSl9aGFuZGxlTWV0cmljRmlsdGVyQ2hhbmdlZCh0LGUpe2lmKCF0LmZpbHRlcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiByZXF1aXJlIGZpbHRlciB0byBleGlzdCBmb3IgaXQgdG8gY2hhbmdlIik7dGhpcy5vbk1ldHJpY0ZpbHRlckNoYW5nZWQuZW1pdCh7bmFtZTp0LnRhZyxpbmNsdWRlVW5kZWZpbmVkOnQuZmlsdGVyLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyTG93ZXJWYWx1ZTplLmxvd2VyVmFsdWUsZmlsdGVyVXBwZXJWYWx1ZTplLnVwcGVyVmFsdWV9KX10cmFja0J5SHBhcmFtQ29sdW1uKHQpe3JldHVybiB0Lm5hbWV9dHJhY2tCeU1ldHJpY0NvbHVtbih0KXtyZXR1cm4gdC50YWd9fW8yLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxvMil9LG8yLsm1Y21wPXRvKHt0eXBlOm8yLHNlbGVjdG9yczpbWyJydW5zLXRhYmxlLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFFoKF8zLDcsaGcpLFFoKHQkLDcpLFFoKGEkLDcpKSwyJmUpe2xldCB0O0poKHQ9dGIoKSkmJihuLmZpbHRlcj10LmZpcnN0KSxKaCh0PXRiKCkpJiYobi5wYWdpbmF0b3I9dC5maXJzdCksSmgodD10YigpKSYmKG4uc29ydD10LmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJnB1KCJmbGV4LWxheW91dCIsbi51c2VGbGV4aWJsZUxheW91dCl9LGlucHV0czp7ZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIsc2hvd0V4cGVyaW1lbnROYW1lOiJzaG93RXhwZXJpbWVudE5hbWUiLGNvbHVtbnM6ImNvbHVtbnMiLGhwYXJhbUNvbHVtbnM6ImhwYXJhbUNvbHVtbnMiLG1ldHJpY0NvbHVtbnM6Im1ldHJpY0NvbHVtbnMiLGFsbEl0ZW1zTGVuZ3RoOiJhbGxJdGVtc0xlbmd0aCIsZmlsdGVyZWRJdGVtc0xlbmd0aDoiZmlsdGVyZWRJdGVtc0xlbmd0aCIsdXNlRmxleGlibGVMYXlvdXQ6InVzZUZsZXhpYmxlTGF5b3V0Iix1c2VQYWdpbmF0aW9uOiJ1c2VQYWdpbmF0aW9uIixzaG93R3JvdXBDb250cm9sOiJzaG93R3JvdXBDb250cm9sIixwYWdlSXRlbXM6InBhZ2VJdGVtcyIsbG9hZGluZzoibG9hZGluZyIsbnVtU2VsZWN0ZWRJdGVtczoibnVtU2VsZWN0ZWRJdGVtcyIsc29ydE9wdGlvbjoic29ydE9wdGlvbiIscGFnaW5hdGlvbk9wdGlvbjoicGFnaW5hdGlvbk9wdGlvbiIscmVnZXhGaWx0ZXI6InJlZ2V4RmlsdGVyIn0sb3V0cHV0czp7b25SZWdleEZpbHRlckNoYW5nZToib25SZWdleEZpbHRlckNoYW5nZSIsb25TZWxlY3Rpb25Ub2dnbGU6Im9uU2VsZWN0aW9uVG9nZ2xlIixvblBhZ2VTZWxlY3Rpb25Ub2dnbGU6Im9uUGFnZVNlbGVjdGlvblRvZ2dsZSIsb25QYWdpbmF0aW9uQ2hhbmdlOiJvblBhZ2luYXRpb25DaGFuZ2UiLG9uU29ydENoYW5nZToib25Tb3J0Q2hhbmdlIixvblJ1bkNvbG9yQ2hhbmdlOiJvblJ1bkNvbG9yQ2hhbmdlIixvbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZDoib25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQiLG9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkOiJvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZCIsb25NZXRyaWNGaWx0ZXJDaGFuZ2VkOiJvbk1ldHJpY0ZpbHRlckNoYW5nZWQifSxmZWF0dXJlczpbcGcoW3twcm92aWRlOlpRLHVzZUNsYXNzOm4yfV0pLEJvXSxkZWNsczoxNSx2YXJzOjcsY29uc3RzOltbMSwiZmlsdGVyLXJvdyJdLFsicGxhY2Vob2xkZXIiLCJGaWx0ZXIgcnVucyAocmVnZXgpIiwxLCJydW4tZmlsdGVyIiwzLCJrZXl1cCJdLFsxLCJ0YWJsZS1jb250YWluZXIiXSxbInJvbGUiLCJ0YWJsZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJyb2xlIiwicm93Z3JvdXAiLDEsInJvd3MiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJjbGFzcyIsImxvYWRpbmciLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tcnVucyIsNCwibmdJZiJdLFsic2hvd0ZpcnN0TGFzdEJ1dHRvbnMiLCIiLDMsInBhZ2VTaXplT3B0aW9ucyIsInBhZ2VJbmRleCIsInBhZ2VTaXplIiwibGVuZ3RoIiwicGFnZSIsNCwibmdJZiJdLFsiaGVhZGVyIiwiIl0sWyJyb3ciLCIiXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsImxvYWRpbmciXSxbIm1vZGUiLCJpbmRldGVybWluYXRlIiwiZGlhbWV0ZXIiLCIyOCJdLFsxLCJuby1ydW5zIl0sWyJzaG93Rmlyc3RMYXN0QnV0dG9ucyIsIiIsMywicGFnZVNpemVPcHRpb25zIiwicGFnZUluZGV4IiwicGFnZVNpemUiLCJsZW5ndGgiLCJwYWdlIl0sWyJyb2xlIiwicm93Z3JvdXAiLDEsImhlYWRlciJdLFsibWF0U29ydCIsIiIsInJvbGUiLCJyb3ciLDMsIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0Q2hhbmdlIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImNvbHVtbiIsMywibWF0LXNvcnQtaGVhZGVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDMsIm5nQ2xhc3MiXSxbMywibmdTd2l0Y2giXSxbMywiY2hlY2tlZCIsImluZGV0ZXJtaW5hdGUiLCJjaGFuZ2UiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJtYXQtc29ydC1oZWFkZXIiLDQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbMywiY2hlY2tlZCIsImluZGV0ZXJtaW5hdGUiLCJjaGFuZ2UiXSxbMywibWF0LXNvcnQtaGVhZGVyIl0sWzMsImV4cGVyaW1lbnRJZHMiLDQsIm5nSWYiXSxbMywiZXhwZXJpbWVudElkcyJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiY29sdW1uIiwzLCJtYXQtc29ydC1oZWFkZXIiXSxbMSwibmFtZSJdLFs0LCJuZ0lmIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIiwiY2xpY2siXSxbInN2Z0ljb24iLCJmaWx0ZXJfYWx0XzI0cHgiXSxbImZpbHRlck1lbnUiLCJtYXRNZW51Il0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtY2hlY2tib3giLCJkaXNhYmxlUmlwcGxlIiwiIiwxLCJmaWx0ZXItbWVudS1jaGVja2JveC1yb3ciLDMsImNsaWNrIl0sWzMsImNoZWNrZWQiLCJjaGFuZ2UiXSxbImRpc2FibGVSaXBwbGUiLCIiLCJtYXQtbWVudS1pdGVtIiwiIiwxLCJyYW5nZS1pbnB1dC1jb250YWluZXIiLDMsImNsaWNrIl0sWzMsIm1pbiIsIm1heCIsImxvd2VyVmFsdWUiLCJ1cHBlclZhbHVlIiwidmFsdWUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJjbGFzcyIsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsInJvbGUiLCJtZW51aXRlbWNoZWNrYm94IiwzLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtY2hlY2tib3giLDEsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsMywiY2xpY2siXSxbInJvbGUiLCJyb3ciXSxbInJvbGUiLCJjZWxsIiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInJvbGUiLCJjZWxsIiwiY2xhc3MiLCJjb2x1bW4iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsImNlbGwiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwibmFtZSIsNCwibmdTd2l0Y2hDYXNlIl0sWzMsIm5nQ2xhc3MiLCJjb2xvclBpY2tlciIsImNwRGlhbG9nRGlzcGxheSIsImNwUG9zaXRpb25PZmZzZXQiLCJjcFVzZVJvb3RWaWV3Q29udGFpbmVyIiwiY3BPdXRwdXRGb3JtYXQiLCJjb2xvclBpY2tlckNoYW5nZSJdLFsicm9sZSIsImNlbGwiLDEsImNvbHVtbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoUm0oMCwiZGl2IiwwKSxSbSgxLCJ0Yi1maWx0ZXItaW5wdXQiLDEpLFZtKCJrZXl1cCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25GaWx0ZXJLZXlVcChlKX0pKSxBbSgpLEFtKCksUm0oMiwiZGl2IiwyKSxSbSgzLCJkaXYiLDMpLFFwKDQsQzMsMSwwLCJuZy1jb250YWluZXIiLDQpLFJtKDUsImRpdiIsNSksUXAoNix4MywyLDQsIm5nLWNvbnRhaW5lciIsNiksQW0oKSxBbSgpLFFwKDcsTzMsMiwwLCJkaXYiLDcpLFFwKDgsUDMsMiwwLCJkaXYiLDgpLFFwKDksdzMsNiwxLCJkaXYiLDgpLEFtKCksUXAoMTAsUzMsMSw1LCJtYXQtcGFnaW5hdG9yIiw5KSxRcCgxMSxZMyw1LDYsIm5nLXRlbXBsYXRlIixudWxsLDEwLGliKSxRcCgxMyxlMiw0LDQsIm5nLXRlbXBsYXRlIixudWxsLDExLGliKSksMiZlKXtjb25zdCB0PSRwKDEyKTtyYyg0KSxEbSgibmdUZW1wbGF0ZU91dGxldCIsdCkscmMoMiksRG0oIm5nRm9yT2YiLG4ucGFnZUl0ZW1zKSgibmdGb3JUcmFja0J5IixuLnRhYmxlVHJhY2tCeSkscmMoMSksRG0oIm5nSWYiLG4ubG9hZGluZykscmMoMSksRG0oIm5nSWYiLCFuLmxvYWRpbmcmJjA9PT1uLmFsbEl0ZW1zTGVuZ3RoKSxyYygxKSxEbSgibmdJZiIsIW4ubG9hZGluZyYmbi5hbGxJdGVtc0xlbmd0aD4wJiYwPT09bi5maWx0ZXJlZEl0ZW1zTGVuZ3RoKSxyYygxKSxEbSgibmdJZiIsbi51c2VQYWdpbmF0aW9uKX19LGRpcmVjdGl2ZXM6W3EwLE1NLGxNLGRNLG8xLHQkLGEkLGFNLGZNLGdNLE9ZLG0kLHcxLFhILGVZLERXLEtXLFdXLEQxLGIzXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Zm9udC1zaXplOjEzcHg7b3ZlcmZsb3c6aGlkZGVufS5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4Om5vbmV9LnRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Y29udGFpbjpsYXlvdXQgcGFpbnQ7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3cteDphdXRvO292ZXJmbG93LXk6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sc2Nyb2xsLXBvc2l0aW9ufS5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICAubmFtZVtfbmdjb250ZW50LSVDT01QJV17d29yZC1icmVhazpicmVhay13b3JkO292ZXJmbG93LXdyYXA6YnJlYWstd29yZH0uZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdICAgbWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjtwYWRkaW5nLWJvdHRvbToxMnB4fWJvZHkuZGFyay1tb2RlICAgLmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OnRhYmxlO3dpZHRoOjEwMCV9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1jb2x1bW5oZWFkZXJdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1jb2x1bW5oZWFkZXJdW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgW3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9Y29sdW1uaGVhZGVyXVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOnN0cmljdDtkaXNwbGF5OnRhYmxlLXJvdztoZWlnaHQ6NDNweH1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6dGFibGUtY2VsbDtwYWRkaW5nOjVweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgW3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIFtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV06Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OjI0cHh9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV06bGFzdC1jaGlsZHtwYWRkaW5nLXJpZ2h0OjI0cHh9W3JvbGU9cm93Z3JvdXBdW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OnRhYmxlLXJvdy1ncm91cH1bcm9sZT1yb3dncm91cF0uaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OnRhYmxlLWhlYWRlci1ncm91cH0ubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0sIC5uby1ydW5zW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubm8tcnVuc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5uby1ydW5zW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5zZWxlY3QtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxMnB4O3BhZGRpbmctdG9wOjEycHh9LnNlbGVjdC1hbGwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0sIC5zZWxlY3QtYWxsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246bGVmdH0uc2VsZWN0LWFsbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NTAwO3BhZGRpbmc6MCA0cHh9LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMTZweCAwIDIxcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICB0Yi1maWx0ZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxfS50Yi1jb2x1bW4tY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdLCAudGItY29sdW1uLXJ1bl9jb2xvcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MjBweH0udGItY29sdW1uLXJ1bl9jb2xvcltfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LnJ1bi1jb2xvci1zd2F0Y2hbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6MTAwJTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweDtvdXRsaW5lOm5vbmV9LnJ1bi1jb2xvci1zd2F0Y2gubm8tY29sb3JbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojYzZjYWQxO2JvcmRlci13aWR0aDoycHh9LnJhbmdlLWlucHV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmF1dG99W19uZ2hvc3QtJUNPTVAlXSAgICAgbWF0LXBhZ2luYXRvciBtYXQtZm9ybS1maWVsZHttYXJnaW46MH0uZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVse2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTthbGlnbi1pdGVtczpjZW50ZXJ9LmZpbHRlci1tZW51LWNoZWNrYm94LXJvd1tfbmdjb250ZW50LSVDT01QJV0gICBtYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbCAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcnttYXJnaW4tbGVmdDowfS5maWx0ZXItbWVudS1jaGVja2JveC1yb3dbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgbGFiZWwgLm1hdC1jaGVja2JveC1sYWJlbHtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc31ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChvMixbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJydW5zLXRhYmxlLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6InJ1bnNfdGFibGVfY29tcG9uZW50Lm5nLmh0bWwiLGhvc3Q6eyJbY2xhc3MuZmxleC1sYXlvdXRdIjoidXNlRmxleGlibGVMYXlvdXQifSxzdHlsZVVybHM6WyJydW5zX3RhYmxlX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6WlEsdXNlQ2xhc3M6bjJ9XX1dfV0sbnVsbCx7ZXhwZXJpbWVudElkczpbe3R5cGU6eHl9XSxzaG93RXhwZXJpbWVudE5hbWU6W3t0eXBlOnh5fV0sY29sdW1uczpbe3R5cGU6eHl9XSxocGFyYW1Db2x1bW5zOlt7dHlwZTp4eX1dLG1ldHJpY0NvbHVtbnM6W3t0eXBlOnh5fV0sYWxsSXRlbXNMZW5ndGg6W3t0eXBlOnh5fV0sZmlsdGVyZWRJdGVtc0xlbmd0aDpbe3R5cGU6eHl9XSx1c2VGbGV4aWJsZUxheW91dDpbe3R5cGU6eHl9XSx1c2VQYWdpbmF0aW9uOlt7dHlwZTp4eX1dLHNob3dHcm91cENvbnRyb2w6W3t0eXBlOnh5fV0scGFnZUl0ZW1zOlt7dHlwZTp4eX1dLGxvYWRpbmc6W3t0eXBlOnh5fV0sbnVtU2VsZWN0ZWRJdGVtczpbe3R5cGU6eHl9XSxzb3J0T3B0aW9uOlt7dHlwZTp4eX1dLHBhZ2luYXRpb25PcHRpb246W3t0eXBlOnh5fV0scmVnZXhGaWx0ZXI6W3t0eXBlOnh5fV0sb25SZWdleEZpbHRlckNoYW5nZTpbe3R5cGU6T3l9XSxvblNlbGVjdGlvblRvZ2dsZTpbe3R5cGU6T3l9XSxvblBhZ2VTZWxlY3Rpb25Ub2dnbGU6W3t0eXBlOk95fV0sb25QYWdpbmF0aW9uQ2hhbmdlOlt7dHlwZTpPeX1dLG9uU29ydENoYW5nZTpbe3R5cGU6T3l9XSxvblJ1bkNvbG9yQ2hhbmdlOlt7dHlwZTpPeX1dLG9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkOlt7dHlwZTpPeX1dLG9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkOlt7dHlwZTpPeX1dLG9uTWV0cmljRmlsdGVyQ2hhbmdlZDpbe3R5cGU6T3l9XSxmaWx0ZXI6W3t0eXBlOlphLGFyZ3M6WyJmaWx0ZXIiLHtzdGF0aWM6ITAscmVhZDpoZ31dfV0scGFnaW5hdG9yOlt7dHlwZTpaYSxhcmdzOlt0JCx7c3RhdGljOiEwfV19XSxzb3J0Olt7dHlwZTpaYSxhcmdzOlthJCx7c3RhdGljOiEwfV19XX0pO2NvbnN0IGkyPVp3KHBOLCh0PT50LnN0YXRlPT09eUUuTE9BRElORykpO2Z1bmN0aW9uIGEyKHQsZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSAkVC5FWFBFUklNRU5UX05BTUU6cmV0dXJuW3QuZXhwZXJpbWVudEFsaWFzLHQucnVuLm5hbWUsdC5ydW4uaWRdO2Nhc2UgJFQuUlVOX05BTUU6cmV0dXJuW3QucnVuLm5hbWUsdC5leHBlcmltZW50QWxpYXMsdC5ydW4uaWRdO2Nhc2UgJFQuSFBBUkFNOnJldHVyblt0LmhwYXJhbXMuZ2V0KGUubmFtZSksdC5ydW4ubmFtZSx0LmV4cGVyaW1lbnRBbGlhcyx0LnJ1bi5pZF07Y2FzZSAkVC5NRVRSSUM6cmV0dXJuW3QubWV0cmljcy5nZXQoZS50YWcpLHQucnVuLm5hbWUsdC5leHBlcmltZW50QWxpYXMsdC5ydW4uaWRdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkOiAke2V9YCl9fWZ1bmN0aW9uIHIyKHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/dC5pbmNsdWRlVW5kZWZpbmVkOnQudHlwZT09PVpSLkRJU0NSRVRFP3QuZmlsdGVyVmFsdWVzLmluY2x1ZGVzKGUpOnQudHlwZT09PVpSLklOVEVSVkFMJiZ0LmZpbHRlckxvd2VyVmFsdWU8PWUmJmU8PXQuZmlsdGVyVXBwZXJWYWx1ZX1jbGFzcyBzMntjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5sb2FkaW5nJD1udWxsLHRoaXMuaHBhcmFtQ29sdW1ucyQ9RXQoW10pLHRoaXMubWV0cmljQ29sdW1ucyQ9RXQoW10pLHRoaXMudXNlRmxleGlibGVMYXlvdXQ9ITEsdGhpcy51c2VQYWdpbmF0aW9uPSExLHRoaXMuY29sdW1ucz1bdlEuUlVOX05BTUVdLHRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzPSExLHRoaXMuc29ydE9wdGlvbiQ9dGhpcy5zdG9yZS5zZWxlY3QoeU4pLHRoaXMucGFnaW5hdGlvbk9wdGlvbiQ9dGhpcy5zdG9yZS5zZWxlY3QoYk4pLHRoaXMucmVnZXhGaWx0ZXIkPXRoaXMuc3RvcmUuc2VsZWN0KGdOKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IEl9aXNFeHBlcmltZW50TmFtZVZpc2libGUoKXtyZXR1cm4gdGhpcy5jb2x1bW5zLnNvbWUoKHQ9PnQ9PT12US5FWFBFUklNRU5UX05BTUUpKX1uZ09uSW5pdCgpe2NvbnN0IHQ9V3QodGhpcy5leHBlcmltZW50SWRzLm1hcCgodD0+dGhpcy5nZXRSdW5UYWJsZUl0ZW1zRm9yRXhwZXJpbWVudCh0KSkpKS5waXBlKEl0KCh0PT5bXS5jb25jYXQoLi4udCkpKSk7dGhpcy5hbGxVbnNvcnRlZFJ1blRhYmxlSXRlbXMkPXQucGlwZShJZSh0aGlzLm5nVW5zdWJzY3JpYmUpLEFlKDEpKSx0aGlzLmFsbEl0ZW1zTGVuZ3RoJD10aGlzLmFsbFVuc29ydGVkUnVuVGFibGVJdGVtcyQucGlwZShJdCgodD0+dC5sZW5ndGgpKSk7Y29uc3QgZT10aGlzLmdldEZpbHRlcmVkSXRlbXMkKHRoaXMuYWxsVW5zb3J0ZWRSdW5UYWJsZUl0ZW1zJCkucGlwZShJZSh0aGlzLm5nVW5zdWJzY3JpYmUpLEFlKDEpKTt0aGlzLmZpbHRlcmVkSXRlbXNMZW5ndGgkPWUucGlwZShJdCgodD0+dC5sZW5ndGgpKSksdGhpcy5wYWdlSXRlbXMkPXRoaXMuc29ydGVkQW5kU2xpY2VkSXRlbXMkKGUpLHRoaXMubnVtU2VsZWN0ZWRJdGVtcyQ9dGhpcy5hbGxVbnNvcnRlZFJ1blRhYmxlSXRlbXMkLnBpcGUoSXQoKHQ9PnQucmVkdWNlKCgodCxlKT0+dCtOdW1iZXIoZS5zZWxlY3RlZCkpLDApKSkpO2NvbnN0IG49dGhpcy5leHBlcmltZW50SWRzLm1hcCgodD0+dGhpcy5zdG9yZS5zZWxlY3QoaTIse2V4cGVyaW1lbnRJZDp0fSkpKTtpZih0aGlzLmxvYWRpbmckPVd0KG4pLnBpcGUoSXQoKHQ9PnQuc29tZSgodD0+dCkpKSkpLHRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzKXtjb25zdCB0PXRoaXMuc3RvcmUuc2VsZWN0KFNRLHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc30pO3RoaXMuaHBhcmFtQ29sdW1ucyQ9V3QoW3RoaXMuc3RvcmUuc2VsZWN0KFBRLHRoaXMuZXhwZXJpbWVudElkcyksdF0pLnBpcGUoSXQoKChbdCx7aHBhcmFtczplfV0pPT5lLm1hcCgoKHtuYW1lOmUsZGlzcGxheU5hbWU6bn0pPT57Y29uc3Qgbz10LmdldChlKTtpZighbyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YXJpYW50IGVycm9yOiBhIGZpbHRlciBmb3IgJHtlfSBtdXN0IGV4aXN0IHdoZW4gdGhlIGhwYXJhbSBleGlzdHNgKTtyZXR1cm57ZGlzcGxheU5hbWU6bixuYW1lOmUsZmlsdGVyOm99fSkpKSkpLHRoaXMubWV0cmljQ29sdW1ucyQ9V3QoW3RoaXMuc3RvcmUuc2VsZWN0KGtRLHRoaXMuZXhwZXJpbWVudElkcyksdF0pLnBpcGUoSXQoKChbdCx7bWV0cmljczplfV0pPT5lLm1hcCgoKHt0YWc6ZSxkaXNwbGF5TmFtZTpufSk9Pntjb25zdCBvPXQuZ2V0KGUpO2lmKCFvKXRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGEgZmlsdGVyIGZvciAke2V9IG11c3QgZXhpc3Qgd2hlbiB0aGUgbWV0cmljIGV4aXN0c2ApO3JldHVybntkaXNwbGF5TmFtZTpuLHRhZzplLGZpbHRlcjpvfX0pKSkpKX10aGlzLmNvbHVtbnMuaW5jbHVkZXModlEuQ0hFQ0tCT1gpJiZ0aGlzLnN0b3JlLnNlbGVjdChOUykucGlwZShJZSh0aGlzLm5nVW5zdWJzY3JpYmUpLHplKCgoKT0+dC5waXBlKGNlKCh0PT50Lmxlbmd0aD41MDApKSxiZSgxKSkpKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2gobHooe2xvY2FsaXplZE1lc3NhZ2U6IlRoZSBudW1iZXIgb2YgcnVucyBleGNlZWRzIDUwMC4gTmV3IHJ1bnMgYXJlIHVuc2VsZWN0ZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIn0pKX0pKSx0aGlzLnNob3dHcm91cENvbnRyb2wkPXRoaXMuc3RvcmUuc2VsZWN0KGVFKS5waXBlKEl0KCh0PT50JiZ0aGlzLmNvbHVtbnMuaW5jbHVkZXModlEuUlVOX0NPTE9SKSkpKSx0aGlzLnN0b3JlLmRpc3BhdGNoKFVSKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc30pKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9Z2V0RmlsdGVyZWRJdGVtcyQodCl7cmV0dXJuIFd0KFt0LHRoaXMuc3RvcmUuc2VsZWN0KGdOKV0pLnBpcGUoSXQoKChbdCxlXSk9PntpZighZSlyZXR1cm4gdDtjb25zdCBuPXRoaXMuY29sdW1ucy5pbmNsdWRlcyh2US5FWFBFUklNRU5UX05BTUUpO3JldHVybiB0LmZpbHRlcigodD0+VE4oe3J1bk5hbWU6dC5ydW4ubmFtZSxleHBlcmltZW50QWxpYXM6dC5leHBlcmltZW50QWxpYXMsZXhwZXJpbWVudE5hbWU6dC5leHBlcmltZW50TmFtZX0sZSxuKSkpfSkpLHplKCh0PT50aGlzLnNob3dIcGFyYW1zQW5kTWV0cmljcz9XdCh0aGlzLnN0b3JlLnNlbGVjdChQUSx0aGlzLmV4cGVyaW1lbnRJZHMpLHRoaXMuc3RvcmUuc2VsZWN0KGtRLHRoaXMuZXhwZXJpbWVudElkcykpLnBpcGUoSXQoKChbZSxuXSk9PnQuZmlsdGVyKCgoe2hwYXJhbXM6dCxtZXRyaWNzOm99KT0+Wy4uLmUuZW50cmllcygpXS5ldmVyeSgoKFtlLG5dKT0+cjIobix0LmdldChlKSkpKSYmWy4uLm4uZW50cmllcygpXS5ldmVyeSgoKFt0LGVdKT0+cjIoZSxvLmdldCh0KSkpKSkpKSkpOkV0KHQpKSkpfXNvcnRlZEFuZFNsaWNlZEl0ZW1zJCh0KXtjb25zdCBlPVd0KFt0LHRoaXMuc3RvcmUuc2VsZWN0KHlOKV0pLnBpcGUoSXQoKChbdCxlXSk9PihmdW5jdGlvbiBuKHQsZSl7Y29uc3Qgbj1lLmtleSxvPVsuLi50XTtyZXR1cm4gbnVsbD09PW58fGUuZGlyZWN0aW9uPT09Rk4uVU5TRVR8fG8uc29ydCgoKHQsbyk9Pntjb25zdCBpPWEyKHQsbiksYT1hMihvLG4pO2lmKGkubGVuZ3RoIT09YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGEgZ2l2ZW4gc29ydCBzaG91bGQgcmVzdWx0IGluIHNhbWUgbnVtYmVyIG9mIGl0ZW1zOiAke2V9YCk7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0Kyspe2NvbnN0IG49aVt0XSxvPWFbdF07aWYobiE9PW8pe2lmKHZvaWQgMD09PW58fHZvaWQgMD09PW8pcmV0dXJuIHZvaWQgMD09PW8/LTE6MTtpZih0eXBlb2YgbiE9dHlwZW9mIG8pdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29tcGFyZSB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzOiAke3R5cGVvZiBufSB2cy4gJHt0eXBlb2Ygb31gKTtyZXR1cm4gbjxvPT0oZS5kaXJlY3Rpb249PT1GTi5BU0MpPy0xOjF9fXJldHVybiAwfSkpLG99KSh0LGUpKSkpO3JldHVybiBXdChbZSx0aGlzLnN0b3JlLnNlbGVjdChiTildKS5waXBlKEl0KCgoW3QsZV0pPT57aWYoIXRoaXMudXNlUGFnaW5hdGlvbilyZXR1cm4gdC5zbGljZSgpO2NvbnN0e3BhZ2VTaXplOm4scGFnZUluZGV4Om99PWU7cmV0dXJuIHQuc2xpY2UobypuLChvKzEpKm4pfSkpLE5lKFtdKSl9Z2V0UnVuVGFibGVJdGVtc0ZvckV4cGVyaW1lbnQodCl7cmV0dXJuIFd0KFt0aGlzLnN0b3JlLnNlbGVjdChsTix7ZXhwZXJpbWVudElkOnR9KSx0aGlzLnN0b3JlLnNlbGVjdCh1QSx7ZXhwZXJpbWVudElkOnR9KSx0aGlzLnN0b3JlLnNlbGVjdChOTiksdGhpcy5zdG9yZS5zZWxlY3Qoek4pLHRoaXMuc3RvcmUuc2VsZWN0KHpTKV0pLnBpcGUoSXQoKChbZSxuLG8saSxhXSk9PmUubWFwKChlPT57Y29uc3Qgcj1uZXcgTWFwOyhlLmhwYXJhbXN8fFtdKS5mb3JFYWNoKCh0PT57ci5zZXQodC5uYW1lLHQudmFsdWUpfSkpO2NvbnN0IHM9bmV3IE1hcDtyZXR1cm4oZS5tZXRyaWNzfHxbXSkuZm9yRWFjaCgodD0+e3Muc2V0KHQudGFnLHQudmFsdWUpfSkpLHtydW46ZSxleHBlcmltZW50TmFtZToobnVsbD09bj92b2lkIDA6bi5uYW1lKXx8IiIsZXhwZXJpbWVudEFsaWFzOmFbdF0sc2VsZWN0ZWQ6Qm9vbGVhbihvJiZvLmdldChlLmlkKSkscnVuQ29sb3I6aVtlLmlkXSxocGFyYW1zOnIsbWV0cmljczpzfX0pKSkpKX1vblJ1blNlbGVjdGlvblRvZ2dsZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKEhSKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxydW5JZDp0LnJ1bi5pZH0pKX1vblBhZ2VTZWxlY3Rpb25Ub2dnbGUodCl7Y29uc3R7aXRlbXM6ZX09dCxuPWUubWFwKCgoe3J1bjp0fSk9PnQuaWQpKTt0aGlzLnN0b3JlLmRpc3BhdGNoKEZSKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxydW5JZHM6bn0pKX1vblBhZ2luYXRpb25DaGFuZ2UodCl7aWYoIXRoaXMudXNlUGFnaW5hdGlvbil0aHJvdyBuZXcgRXJyb3IoIlBhZ2luYXRpb24gZXZlbnRzIGNhbm5vdCBiZSBkaXNwYXRjaGVkIHdoZW4gcGFnaW5hdGlvbiBpcyBkaXNhYmxlZCIpO2NvbnN0e3BhZ2VJbmRleDplLHBhZ2VTaXplOm59PXQ7dGhpcy5zdG9yZS5kaXNwYXRjaChMUih7cGFnZUluZGV4OmUscGFnZVNpemU6bn0pKX1vblNvcnRDaGFuZ2UodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChCUih0KSl9b25SZWdleEZpbHRlckNoYW5nZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKFZSKHtyZWdleFN0cmluZzp0fSkpfW9uUnVuQ29sb3JDaGFuZ2Uoe3J1bklkOnQsbmV3Q29sb3I6ZX0pe3RoaXMuc3RvcmUuZGlzcGF0Y2goalIoe3J1bklkOnQsbmV3Q29sb3I6ZX0pKX1vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZCh0KXtjb25zdHtocGFyYW1OYW1lOmUsZmlsdGVyVmFsdWVzOm4saW5jbHVkZVVuZGVmaW5lZDpvfT10O3RoaXMuc3RvcmUuZGlzcGF0Y2goS1Ioe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGhwYXJhbU5hbWU6ZSxmaWx0ZXJWYWx1ZXM6bixpbmNsdWRlVW5kZWZpbmVkOm99KSl9b25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQodCl7Y29uc3R7bmFtZTplLGZpbHRlckxvd2VyVmFsdWU6bixmaWx0ZXJVcHBlclZhbHVlOm8saW5jbHVkZVVuZGVmaW5lZDppfT10O3RoaXMuc3RvcmUuZGlzcGF0Y2goSlIoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGhwYXJhbU5hbWU6ZSxmaWx0ZXJMb3dlclZhbHVlOm4sZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6aX0pKX1vbk1ldHJpY0ZpbHRlckNoYW5nZWQodCl7Y29uc3R7bmFtZTplLGluY2x1ZGVVbmRlZmluZWQ6bixmaWx0ZXJMb3dlclZhbHVlOm8sZmlsdGVyVXBwZXJWYWx1ZTppfT10O3RoaXMuc3RvcmUuZGlzcGF0Y2goUVIoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLG1ldHJpY1RhZzplLGluY2x1ZGVVbmRlZmluZWQ6bixmaWx0ZXJMb3dlclZhbHVlOm8sZmlsdGVyVXBwZXJWYWx1ZTppfSkpfX1zMi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8czIpKFNtKEl3KSl9LHMyLsm1Y21wPXRvKHt0eXBlOnMyLHNlbGVjdG9yczpbWyJydW5zLXRhYmxlIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJnB1KCJmbGV4LWxheW91dCIsbi51c2VGbGV4aWJsZUxheW91dCl9LGlucHV0czp7dXNlRmxleGlibGVMYXlvdXQ6InVzZUZsZXhpYmxlTGF5b3V0Iix1c2VQYWdpbmF0aW9uOiJ1c2VQYWdpbmF0aW9uIixjb2x1bW5zOiJjb2x1bW5zIixleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixzaG93SHBhcmFtc0FuZE1ldHJpY3M6InNob3dIcGFyYW1zQW5kTWV0cmljcyJ9LGRlY2xzOjEyLHZhcnM6MzgsY29uc3RzOltbMywiZXhwZXJpbWVudElkcyIsInVzZUZsZXhpYmxlTGF5b3V0IiwibnVtU2VsZWN0ZWRJdGVtcyIsImNvbHVtbnMiLCJocGFyYW1Db2x1bW5zIiwibWV0cmljQ29sdW1ucyIsInNob3dFeHBlcmltZW50TmFtZSIsInBhZ2VJdGVtcyIsImZpbHRlcmVkSXRlbXNMZW5ndGgiLCJhbGxJdGVtc0xlbmd0aCIsImxvYWRpbmciLCJwYWdpbmF0aW9uT3B0aW9uIiwicmVnZXhGaWx0ZXIiLCJzaG93R3JvdXBDb250cm9sIiwic29ydE9wdGlvbiIsInVzZVBhZ2luYXRpb24iLCJvblNlbGVjdGlvblRvZ2dsZSIsIm9uUGFnZVNlbGVjdGlvblRvZ2dsZSIsIm9uUGFnaW5hdGlvbkNoYW5nZSIsIm9uUmVnZXhGaWx0ZXJDaGFuZ2UiLCJvblNvcnRDaGFuZ2UiLCJvblJ1bkNvbG9yQ2hhbmdlIiwib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLCJvbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZCIsIm9uTWV0cmljRmlsdGVyQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwicnVucy10YWJsZS1jb21wb25lbnQiLDApLFZtKCJvblNlbGVjdGlvblRvZ2dsZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25SdW5TZWxlY3Rpb25Ub2dnbGUoZSl9KSkoIm9uUGFnZVNlbGVjdGlvblRvZ2dsZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25QYWdlU2VsZWN0aW9uVG9nZ2xlKGUpfSkpKCJvblBhZ2luYXRpb25DaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uUGFnaW5hdGlvbkNoYW5nZShlKX0pKSgib25SZWdleEZpbHRlckNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25SZWdleEZpbHRlckNoYW5nZShlKX0pKSgib25Tb3J0Q2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblNvcnRDaGFuZ2UoZSl9KSkoIm9uUnVuQ29sb3JDaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uUnVuQ29sb3JDaGFuZ2UoZSl9KSkoIm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZChlKX0pKSgib25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkKGUpfSkpKCJvbk1ldHJpY0ZpbHRlckNoYW5nZWQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uTWV0cmljRmlsdGVyQ2hhbmdlZChlKX0pKSxBaCgxLCJhc3luYyIpLEFoKDIsImFzeW5jIiksQWgoMywiYXN5bmMiKSxBaCg0LCJhc3luYyIpLEFoKDUsImFzeW5jIiksQWgoNiwiYXN5bmMiKSxBaCg3LCJhc3luYyIpLEFoKDgsImFzeW5jIiksQWgoOSwiYXN5bmMiKSxBaCgxMCwiYXN5bmMiKSxBaCgxMSwiYXN5bmMiKSxBbSgpKSwyJmUmJkRtKCJleHBlcmltZW50SWRzIixuLmV4cGVyaW1lbnRJZHMpKCJ1c2VGbGV4aWJsZUxheW91dCIsbi51c2VGbGV4aWJsZUxheW91dCkoIm51bVNlbGVjdGVkSXRlbXMiLFRoKDEsMTYsbi5udW1TZWxlY3RlZEl0ZW1zJCkpKCJjb2x1bW5zIixuLmNvbHVtbnMpKCJocGFyYW1Db2x1bW5zIixUaCgyLDE4LG4uaHBhcmFtQ29sdW1ucyQpKSgibWV0cmljQ29sdW1ucyIsVGgoMywyMCxuLm1ldHJpY0NvbHVtbnMkKSkoInNob3dFeHBlcmltZW50TmFtZSIsbi5pc0V4cGVyaW1lbnROYW1lVmlzaWJsZSgpKSgicGFnZUl0ZW1zIixUaCg0LDIyLG4ucGFnZUl0ZW1zJCkpKCJmaWx0ZXJlZEl0ZW1zTGVuZ3RoIixUaCg1LDI0LG4uZmlsdGVyZWRJdGVtc0xlbmd0aCQpKSgiYWxsSXRlbXNMZW5ndGgiLFRoKDYsMjYsbi5hbGxJdGVtc0xlbmd0aCQpKSgibG9hZGluZyIsVGgoNywyOCxuLmxvYWRpbmckKSkoInBhZ2luYXRpb25PcHRpb24iLFRoKDgsMzAsbi5wYWdpbmF0aW9uT3B0aW9uJCkpKCJyZWdleEZpbHRlciIsVGgoOSwzMixuLnJlZ2V4RmlsdGVyJCkpKCJzaG93R3JvdXBDb250cm9sIixUaCgxMCwzNCxuLnNob3dHcm91cENvbnRyb2wkKSkoInNvcnRPcHRpb24iLFRoKDExLDM2LG4uc29ydE9wdGlvbiQpKSgidXNlUGFnaW5hdGlvbiIsbi51c2VQYWdpbmF0aW9uKX0sZGlyZWN0aXZlczpbbzJdLHBpcGVzOlt3TV0sc3R5bGVzOlsiLmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB9XG5cbiAgICAgIC5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICAgPiBydW5zLXRhYmxlLWNvbXBvbmVudFtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoczIsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoicnVucy10YWJsZSIsdGVtcGxhdGU6J1xuICAgIDxydW5zLXRhYmxlLWNvbXBvbmVudFxuICAgICAgW2V4cGVyaW1lbnRJZHNdPSJleHBlcmltZW50SWRzIlxuICAgICAgW3VzZUZsZXhpYmxlTGF5b3V0XT0idXNlRmxleGlibGVMYXlvdXQiXG4gICAgICBbbnVtU2VsZWN0ZWRJdGVtc109Im51bVNlbGVjdGVkSXRlbXMkIHwgYXN5bmMiXG4gICAgICBbY29sdW1uc109ImNvbHVtbnMiXG4gICAgICBbaHBhcmFtQ29sdW1uc109ImhwYXJhbUNvbHVtbnMkIHwgYXN5bmMiXG4gICAgICBbbWV0cmljQ29sdW1uc109Im1ldHJpY0NvbHVtbnMkIHwgYXN5bmMiXG4gICAgICBbc2hvd0V4cGVyaW1lbnROYW1lXT0iaXNFeHBlcmltZW50TmFtZVZpc2libGUoKSJcbiAgICAgIFtwYWdlSXRlbXNdPSJwYWdlSXRlbXMkIHwgYXN5bmMiXG4gICAgICBbZmlsdGVyZWRJdGVtc0xlbmd0aF09ImZpbHRlcmVkSXRlbXNMZW5ndGgkIHwgYXN5bmMiXG4gICAgICBbYWxsSXRlbXNMZW5ndGhdPSJhbGxJdGVtc0xlbmd0aCQgfCBhc3luYyJcbiAgICAgIFtsb2FkaW5nXT0ibG9hZGluZyQgfCBhc3luYyJcbiAgICAgIFtwYWdpbmF0aW9uT3B0aW9uXT0icGFnaW5hdGlvbk9wdGlvbiQgfCBhc3luYyJcbiAgICAgIFtyZWdleEZpbHRlcl09InJlZ2V4RmlsdGVyJCB8IGFzeW5jIlxuICAgICAgW3Nob3dHcm91cENvbnRyb2xdPSJzaG93R3JvdXBDb250cm9sJCB8IGFzeW5jIlxuICAgICAgW3NvcnRPcHRpb25dPSJzb3J0T3B0aW9uJCB8IGFzeW5jIlxuICAgICAgW3VzZVBhZ2luYXRpb25dPSJ1c2VQYWdpbmF0aW9uIlxuICAgICAgKG9uU2VsZWN0aW9uVG9nZ2xlKT0ib25SdW5TZWxlY3Rpb25Ub2dnbGUoJGV2ZW50KSJcbiAgICAgIChvblBhZ2VTZWxlY3Rpb25Ub2dnbGUpPSJvblBhZ2VTZWxlY3Rpb25Ub2dnbGUoJGV2ZW50KSJcbiAgICAgIChvblBhZ2luYXRpb25DaGFuZ2UpPSJvblBhZ2luYXRpb25DaGFuZ2UoJGV2ZW50KSJcbiAgICAgIChvblJlZ2V4RmlsdGVyQ2hhbmdlKT0ib25SZWdleEZpbHRlckNoYW5nZSgkZXZlbnQpIlxuICAgICAgKG9uU29ydENoYW5nZSk9Im9uU29ydENoYW5nZSgkZXZlbnQpIlxuICAgICAgKG9uUnVuQ29sb3JDaGFuZ2UpPSJvblJ1bkNvbG9yQ2hhbmdlKCRldmVudCkiXG4gICAgICAob25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQpPSJvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZCgkZXZlbnQpIlxuICAgICAgKG9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkKT0ib25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQoJGV2ZW50KSJcbiAgICAgIChvbk1ldHJpY0ZpbHRlckNoYW5nZWQpPSJvbk1ldHJpY0ZpbHRlckNoYW5nZWQoJGV2ZW50KSJcbiAgICA+PC9ydW5zLXRhYmxlLWNvbXBvbmVudD5cbiAgJyxob3N0OnsiW2NsYXNzLmZsZXgtbGF5b3V0XSI6InVzZUZsZXhpYmxlTGF5b3V0In0sc3R5bGVzOlsiXG4gICAgICA6aG9zdC5mbGV4LWxheW91dCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LmZsZXgtbGF5b3V0ID4gcnVucy10YWJsZS1jb21wb25lbnQge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICAiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLHt1c2VGbGV4aWJsZUxheW91dDpbe3R5cGU6eHl9XSx1c2VQYWdpbmF0aW9uOlt7dHlwZTp4eX1dLGNvbHVtbnM6W3t0eXBlOnh5fV0sZXhwZXJpbWVudElkczpbe3R5cGU6eHl9XSxzaG93SHBhcmFtc0FuZE1ldHJpY3M6W3t0eXBlOnh5fV19KTtjbGFzcyBsMnt9bDIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGwyKX0sbDIuybVjbXA9dG8oe3R5cGU6bDIsc2VsZWN0b3JzOltbInJ1bnMtc2VsZWN0b3ItY29tcG9uZW50Il1dLGlucHV0czp7ZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIsc2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MiLGNvbHVtbnM6ImNvbHVtbnMifSxkZWNsczoxLHZhcnM6NCxjb25zdHM6W1szLCJ1c2VGbGV4aWJsZUxheW91dCIsImNvbHVtbnMiLCJleHBlcmltZW50SWRzIiwic2hvd0hwYXJhbXNBbmRNZXRyaWNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJlRtKDAsInJ1bnMtdGFibGUiLDApLDImZSYmRG0oInVzZUZsZXhpYmxlTGF5b3V0IiwhMCkoImNvbHVtbnMiLG4uY29sdW1ucykoImV4cGVyaW1lbnRJZHMiLG4uZXhwZXJpbWVudElkcykoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsbi5zaG93SHBhcmFtc0FuZE1ldHJpY3MpfSxkaXJlY3RpdmVzOltzMl0sc3R5bGVzOlsicnVucy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGwyLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InJ1bnMtc2VsZWN0b3ItY29tcG9uZW50Iix0ZW1wbGF0ZTonXG4gICAgPHJ1bnMtdGFibGVcbiAgICAgIFt1c2VGbGV4aWJsZUxheW91dF09InRydWUiXG4gICAgICBbY29sdW1uc109ImNvbHVtbnMiXG4gICAgICBbZXhwZXJpbWVudElkc109ImV4cGVyaW1lbnRJZHMiXG4gICAgICBbc2hvd0hwYXJhbXNBbmRNZXRyaWNzXT0ic2hvd0hwYXJhbXNBbmRNZXRyaWNzIlxuICAgID48L3J1bnMtdGFibGU+XG4gICcsc3R5bGVzOlsiXG4gICAgICBydW5zLXRhYmxlIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuICAgICJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwse2V4cGVyaW1lbnRJZHM6W3t0eXBlOnh5fV0sc2hvd0hwYXJhbXNBbmRNZXRyaWNzOlt7dHlwZTp4eX1dLGNvbHVtbnM6W3t0eXBlOnh5fV19KTtjbGFzcyBjMntjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5leHBlcmltZW50SWRzJD10aGlzLnN0b3JlLnNlbGVjdChUUykucGlwZShJdCgodD0+bnVsbCE9dD90OltdKSkpLHRoaXMuY29sdW1ucyQ9dGhpcy5zdG9yZS5zZWxlY3QoVFMpLnBpcGUoSXQoKHQ9Plt2US5DSEVDS0JPWCx2US5SVU5fTkFNRSx0JiZ0Lmxlbmd0aD4xP3ZRLkVYUEVSSU1FTlRfTkFNRTpudWxsLHZRLlJVTl9DT0xPUl0uZmlsdGVyKCh0PT5udWxsIT09dCkpKSkpfX1jMi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8YzIpKFNtKEl3KSl9LGMyLsm1Y21wPXRvKHt0eXBlOmMyLHNlbGVjdG9yczpbWyJydW5zLXNlbGVjdG9yIl1dLGlucHV0czp7c2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MifSxkZWNsczozLHZhcnM6Nyxjb25zdHM6W1szLCJleHBlcmltZW50SWRzIiwiY29sdW1ucyIsInNob3dIcGFyYW1zQW5kTWV0cmljcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVG0oMCwicnVucy1zZWxlY3Rvci1jb21wb25lbnQiLDApLEFoKDEsImFzeW5jIiksQWgoMiwiYXN5bmMiKSksMiZlJiZEbSgiZXhwZXJpbWVudElkcyIsVGgoMSwzLG4uZXhwZXJpbWVudElkcyQpKSgiY29sdW1ucyIsVGgoMiw1LG4uY29sdW1ucyQpKSgic2hvd0hwYXJhbXNBbmRNZXRyaWNzIixuLnNob3dIcGFyYW1zQW5kTWV0cmljcyl9LGRpcmVjdGl2ZXM6W2wyXSxwaXBlczpbd01dLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoYzIsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoicnVucy1zZWxlY3RvciIsdGVtcGxhdGU6J1xuICAgIDxydW5zLXNlbGVjdG9yLWNvbXBvbmVudFxuICAgICAgW2V4cGVyaW1lbnRJZHNdPSJleHBlcmltZW50SWRzJCB8IGFzeW5jIlxuICAgICAgW2NvbHVtbnNdPSJjb2x1bW5zJCB8IGFzeW5jIlxuICAgICAgW3Nob3dIcGFyYW1zQW5kTWV0cmljc109InNob3dIcGFyYW1zQW5kTWV0cmljcyJcbiAgICA+PC9ydW5zLXNlbGVjdG9yLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLHtzaG93SHBhcmFtc0FuZE1ldHJpY3M6W3t0eXBlOnh5fV19KTtjb25zdCBkMj1uZXcgV2Vha01hcDtjbGFzcyBwMntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucm9vdD10LHRoaXMuYnVmZmVyPWUsdGhpcy5kZXN0cm95ZWRUYXJnZXRzPW5ldyBXZWFrU2V0fWluaXRpYWxpemUodCl7dGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcnx8KHRoaXMuaW50ZXJzZWN0aW9uQ2FsbGJhY2s9dCx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcih0aGlzLm9uQ2FyZEludGVyc2VjdGlvbi5iaW5kKHRoaXMpLHt0aHJlc2hvbGQ6MCxyb290OnRoaXMucm9vdCxyb290TWFyZ2luOnRoaXMuYnVmZmVyfSkpfWFkZCh0KXt0aGlzLmVuc3VyZUluaXRpYWxpemVkKCkmJnRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0KX13aWxsRGVzdHJveSh0KXt0aGlzLmVuc3VyZUluaXRpYWxpemVkKCkmJnRoaXMuZGVzdHJveWVkVGFyZ2V0cy5hZGQodCl9ZW5zdXJlSW5pdGlhbGl6ZWQoKXtpZighdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcil0aHJvdyBuZXcgRXJyb3IoIkNhcmRPYnNlcnZlciBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UiKTtyZXR1cm4hMH1vbkNhcmRJbnRlcnNlY3Rpb24odCl7dC5zb3J0KCgodCxlKT0+dC50aW1lLWUudGltZSkpO2NvbnN0IGU9bmV3IFNldCxuPW5ldyBTZXQ7Zm9yKGNvbnN0e2lzSW50ZXJzZWN0aW5nOm8sdGFyZ2V0Oml9b2YgdClvPyhlLmFkZChpKSxuLmRlbGV0ZShpKSk6KGUuZGVsZXRlKGkpLG4uYWRkKGkpKSx0aGlzLmRlc3Ryb3llZFRhcmdldHMuaGFzKGkpJiYhbyYmKHRoaXMuZGVzdHJveWVkVGFyZ2V0cy5kZWxldGUoaSksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci51bm9ic2VydmUoaSkpO3RoaXMuaW50ZXJzZWN0aW9uQ2FsbGJhY2soZSxuKX1vbkNhcmRJbnRlcnNlY3Rpb25Gb3JUZXN0KHQpe3RoaXMub25DYXJkSW50ZXJzZWN0aW9uKHQpfX1jbGFzcyBtMntjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuaG9zdD10LHRoaXMuc3RvcmU9ZX1vbkNhcmRJbnRlcnNlY3Rpb24odCxlKXtjb25zdCBuPVsuLi50XS5tYXAoKHQ9Pntjb25zdCBlPWQyLmdldCh0KTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkEgQ2FyZE9ic2VydmVyIGVsZW1lbnQgbXVzdCBoYXZlIGFuIGFzc29jaWF0ZWQgZWxlbWVudCBpZCBhbmQgY2FyZCBpZC4iKTtyZXR1cm57ZWxlbWVudElkOmUuZWxlbWVudElkLGNhcmRJZDplLmNhcmRJZH19KSksbz1bLi4uZV0ubWFwKCh0PT57Y29uc3QgZT1kMi5nZXQodCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDplLmVsZW1lbnRJZCxjYXJkSWQ6ZS5jYXJkSWR9fSkpO3RoaXMuc3RvcmUuZGlzcGF0Y2goJEUoe2VudGVyZWRDYXJkczpuLGV4aXRlZENhcmRzOm99KSl9bmdPbkluaXQoKXtjb25zdCB0PXRoaXMuaG9zdC5uYXRpdmVFbGVtZW50O2QyLnNldCh0LHtlbGVtZW50SWQ6KGhRKyssU3ltYm9sKGhRKSksY2FyZElkOnRoaXMuY2FyZElkfSksdGhpcy5jYXJkT2JzZXJ2ZXJ8fCh0aGlzLmNhcmRPYnNlcnZlcj1uZXcgcDIpLHRoaXMuY2FyZE9ic2VydmVyLmluaXRpYWxpemUodGhpcy5vbkNhcmRJbnRlcnNlY3Rpb24uYmluZCh0aGlzKSksdGhpcy5jYXJkT2JzZXJ2ZXIuYWRkKHQpfW5nT25EZXN0cm95KCl7dGhpcy5jYXJkT2JzZXJ2ZXImJnRoaXMuY2FyZE9ic2VydmVyLndpbGxEZXN0cm95KHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50KX1ob3N0Rm9yVGVzdCgpe3JldHVybiB0aGlzLmhvc3R9fW0yLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxtMikoU20oaGcpLFNtKEl3KSl9LG0yLsm1ZGlyPWxvKHt0eXBlOm0yLHNlbGVjdG9yczpbWyIiLCJjYXJkTGF6eUxvYWRlciIsIiJdXSxpbnB1dHM6e2NhcmRJZDpbImNhcmRMYXp5TG9hZGVyIiwiY2FyZElkIl0sY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgobTIsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW2NhcmRMYXp5TG9hZGVyXSJ9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpoZ30se3R5cGU6SXd9XX0pLHtjYXJkSWQ6W3t0eXBlOnh5LGFyZ3M6WyJjYXJkTGF6eUxvYWRlciJdfV0sY2FyZE9ic2VydmVyOlt7dHlwZTp4eX1dfSk7Y29uc3QgdTI9Ii9zY2FsYXJfc3VtbWFyeSI7ZnVuY3Rpb24gZjIodCxlKXtsZXQgbj10O3JldHVybiBlJiZ0LnN0YXJ0c1dpdGgoZSsiLyIpJiYobj10LnNsaWNlKGUubGVuZ3RoKzEpKSxuLmVuZHNXaXRoKHUyKSYmKG49bi5zbGljZSgwLC11Mi5sZW5ndGgpKSxufHx0fWZ1bmN0aW9uIGcyKHQsZSl7bGV0IG49MCxvPTA7Zm9yKDs7KXtpZihuPT09dC5sZW5ndGgpcmV0dXJuIG89PT1lLmxlbmd0aD8wOi0xO2lmKG89PT1lLmxlbmd0aClyZXR1cm4gMTtpZihiMih0W25dKSYmYjIoZVtvXSkpe2NvbnN0IGk9bixhPW87bj1oMih0LG4rMSksbz1oMihlLG8rMSk7Y29uc3Qgcj1OdW1iZXIodC5zbGljZShpLG4pKSxzPU51bWJlcihlLnNsaWNlKGEsbykpO2lmKHI8cylyZXR1cm4tMTtpZihyPnMpcmV0dXJuIDF9ZWxzZXtpZih5Mih0W25dKSl7aWYoIXkyKGVbb10pKXJldHVybi0xfWVsc2V7aWYoeTIoZVtvXSkpcmV0dXJuIDE7aWYodFtuXTxlW29dKXJldHVybi0xO2lmKHRbbl0+ZVtvXSlyZXR1cm4gMX1uKyssbysrfX19ZnVuY3Rpb24gaDIodCxlKXtsZXQgbjshKGZ1bmN0aW9uKHQpe3RbdC5OQVRVUkFMPTBdPSJOQVRVUkFMIix0W3QuUkVBTD0xXT0iUkVBTCIsdFt0LkVYUE9ORU5UX1NJR049Ml09IkVYUE9ORU5UX1NJR04iLHRbdC5FWFBPTkVOVD0zXT0iRVhQT05FTlQifSkobnx8KG49e30pKTtsZXQgbz1uLk5BVFVSQUwsaT1lO2Zvcig7aTx0Lmxlbmd0aDtpKyspaWYobz09PW4uTkFUVVJBTCl7aWYoIi4iPT09dFtpXSlvPW4uUkVBTDtlbHNlIGlmKCJlIj09PXRbaV18fCJFIj09PXRbaV0pbz1uLkVYUE9ORU5UX1NJR047ZWxzZSBpZighYjIodFtpXSkpYnJlYWt9ZWxzZSBpZihvPT09bi5SRUFMKXtpZigiZSI9PT10W2ldfHwiRSI9PT10W2ldKW89bi5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIWIyKHRbaV0pKWJyZWFrfWVsc2UgaWYobz09PW4uRVhQT05FTlRfU0lHTil7aWYoIWIyKHRbaV0pJiYiKyIhPT10W2ldJiYiLSIhPT10W2ldKWJyZWFrO289bi5FWFBPTkVOVH1lbHNlIGlmKG89PT1uLkVYUE9ORU5UJiYhYjIodFtpXSkpYnJlYWs7cmV0dXJuIGl9ZnVuY3Rpb24gYjIodCl7cmV0dXJuIjAiPD10JiZ0PD0iOSJ9ZnVuY3Rpb24geTIodCl7cmV0dXJuIi8iPT09dHx8YjIodCl9ZnVuY3Rpb24gXzIodCxlKXsxJnQmJlRtKDAsIm1hdC1pY29uIiw3KX1mdW5jdGlvbiBDMih0LGUpe2lmKDEmdCYmKFJtKDAsIm1hdC1vcHRpb24iLDgpLGt1KDEpLEFtKCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdDtEbSgidmFsdWUiLHQpLGpwKCJ0aXRsZSIsdCkscmMoMSksU3UodCl9fWZ1bmN0aW9uIE0yKHQsZSl7aWYoMSZ0JiYoUm0oMCwiZGl2Iiw5KSxSbSgxLCJlbSIpLGt1KDIpLEFoKDMsIm51bWJlciIpLEFtKCksQW0oKSksMiZ0KXtjb25zdCB0PVltKCk7cmMoMiksRHUoImFuZCAiLFRoKDMsMSx0LmNvbXBsZXRpb25zLmxlbmd0aC0yNSksIiBtb3JlIHRhZ3MgbWF0Y2hlZCIpfX1jbGFzcyB2Mntjb25zdHJ1Y3Rvcigpe3RoaXMub25SZWdleEZpbHRlclZhbHVlQ2hhbmdlPW5ldyBMaH1vbkNvbXBsZXRpb25BY2NlcHRlZCh0KXt0aGlzLm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KChmdW5jdGlvbiBlKHQpe3JldHVybiB0LnJlcGxhY2UoQkwsIlxcJCYiKX0pKHQpKX19djIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHYyKX0sdjIuybVjbXA9dG8oe3R5cGU6djIsc2VsZWN0b3JzOltbIm1ldHJpY3MtdGFnLWZpbHRlci1jb21wb25lbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmcHUoInZhbGlkIixuLmlzUmVnZXhGaWx0ZXJWYWxpZCl9LGlucHV0czp7cmVnZXhGaWx0ZXJWYWx1ZToicmVnZXhGaWx0ZXJWYWx1ZSIsaXNSZWdleEZpbHRlclZhbGlkOiJpc1JlZ2V4RmlsdGVyVmFsaWQiLGNvbXBsZXRpb25zOiJjb21wbGV0aW9ucyJ9LG91dHB1dHM6e29uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZToib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIn0sZGVjbHM6Nyx2YXJzOjUsY29uc3RzOltbMSwidGFnLWZpbHRlciJdLFsicGxhY2Vob2xkZXIiLCJGaWx0ZXIgdGFncyAocmVnZXgpIiwzLCJ2YWx1ZSIsIm1hdEF1dG9jb21wbGV0ZSIsImlucHV0Il0sWyJzdmdJY29uIiwiZXJyb3JfMjRweCIsImNsYXNzIiwiZXJyb3ItaWNvbiIsInRpdGxlIiwiSW52YWxpZCByZWdleCBmaWx0ZXIuIFRoZSByZXN1bHQgbWF5IGJlIHN0YWxlLiIsNCwibmdJZiJdLFsxLCJ0YWctb3B0aW9ucyIsMywib3B0aW9uU2VsZWN0ZWQiXSxbImZpbHRlck1hdGNoZXMiLCJtYXRBdXRvY29tcGxldGUiXSxbImNsYXNzIiwib3B0aW9uIiwzLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsImFuZC1tb3JlIiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiZXJyb3JfMjRweCIsInRpdGxlIiwiSW52YWxpZCByZWdleCBmaWx0ZXIuIFRoZSByZXN1bHQgbWF5IGJlIHN0YWxlLiIsMSwiZXJyb3ItaWNvbiJdLFsxLCJvcHRpb24iLDMsInZhbHVlIl0sWzEsImFuZC1tb3JlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihSbSgwLCJkaXYiLDApLFJtKDEsInRiLWZpbHRlci1pbnB1dCIsMSksVm0oImlucHV0IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChlLnRhcmdldC52YWx1ZSl9KSksQW0oKSxRcCgyLF8yLDEsMCwibWF0LWljb24iLDIpLEFtKCksUm0oMywibWF0LWF1dG9jb21wbGV0ZSIsMyw0KSxWbSgib3B0aW9uU2VsZWN0ZWQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uQ29tcGxldGlvbkFjY2VwdGVkKGUub3B0aW9uLnZhbHVlKX0pKSxRcCg1LEMyLDIsMywibWF0LW9wdGlvbiIsNSksUXAoNixNMiw0LDMsImRpdiIsNiksQW0oKSksMiZlKXtjb25zdCB0PSRwKDQpO3JjKDEpLERtKCJ2YWx1ZSIsbi5yZWdleEZpbHRlclZhbHVlKSgibWF0QXV0b2NvbXBsZXRlIix0KSxyYygxKSxEbSgibmdJZiIsIW4uaXNSZWdleEZpbHRlclZhbGlkKSxyYygzKSxEbSgibmdGb3JPZiIsbnVsbD09bi5jb21wbGV0aW9ucz9udWxsOm4uY29tcGxldGlvbnMuc2xpY2UoMCwyNSkpLHJjKDEpLERtKCJuZ0lmIiwobnVsbD09bi5jb21wbGV0aW9ucz9udWxsOm4uY29tcGxldGlvbnMubGVuZ3RoKT4yNSl9fSxkaXJlY3RpdmVzOltxMCxkTSxIMCxsTSxEVyxCSF0scGlwZXM6W0ZNXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0udGFnLWZpbHRlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfXRiLWZpbHRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjF9W19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojMjEyMTIxfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojZmZmfVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCl7Y29sb3I6I2M2MjgyOH1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpICAgLmVycm9yLWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNjNjI4Mjg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH0gIC50YWctb3B0aW9ucyAub3B0aW9uLCAgIC50YWctb3B0aW9ucyAuYW5kLW1vcmV7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsOy13ZWJraXQtbGluZS1jbGFtcDozO2Rpc3BsYXk6LXdlYmtpdC1ib3g7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS40O3BhZGRpbmc6OHB4IDE2cHh9ICAudGFnLW9wdGlvbnMgLmFuZC1tb3Jle2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgICAudGFnLW9wdGlvbnMgLmFuZC1tb3JlLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAgIC50YWctb3B0aW9ucyAuYW5kLW1vcmV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHYyLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtdGFnLWZpbHRlci1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiJmaWx0ZXJfaW5wdXRfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbImZpbHRlcl9pbnB1dF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sbnVsbCx7cmVnZXhGaWx0ZXJWYWx1ZTpbe3R5cGU6eHl9XSxpc1JlZ2V4RmlsdGVyVmFsaWQ6W3t0eXBlOlB5LGFyZ3M6WyJjbGFzcy52YWxpZCJdfSx7dHlwZTp4eX1dLGNvbXBsZXRpb25zOlt7dHlwZTp4eX1dLG9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZTpbe3R5cGU6T3l9XX0pO2NsYXNzIHgye2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLnRhZ0ZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoQlQpLHRoaXMuaXNUYWdGaWx0ZXJSZWdleFZhbGlkJD10aGlzLnRhZ0ZpbHRlciQucGlwZShJdCgodD0+e3RyeXtyZXR1cm4gbmV3IFJlZ0V4cCh0KSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KSkpLHRoaXMuY29tcGxldGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KE1UKS5waXBlKGZlKHRoaXMuc3RvcmUuc2VsZWN0KHFUKSksSXQoKChbdCxlXSk9PnQuZmlsdGVyKCgoe3BsdWdpbjp0fSk9PiFlLnNpemV8fGUuaGFzKHQpKSkubWFwKCgoe3RhZzp0fSk9PnQpKSkpLEl0KCh0PT5bLi4ubmV3IFNldCh0KV0pKSxJdCgodD0+dC5zb3J0KGcyKSkpLGZlKHRoaXMuc3RvcmUuc2VsZWN0KEJUKSksSXQoKChbdCxlXSk9Pnt0cnl7cmV0dXJuW3QsbmV3IFJlZ0V4cChlLCJpIildfWNhdGNoKGUpe3JldHVyblt0LG51bGxdfX0pKSxjZSgoKFssdF0pPT5udWxsIT09dCkpLEl0KCgoW3QsZV0pPT50LmZpbHRlcigodD0+ZS50ZXN0KHQpKSkpKSl9b25UYWdGaWx0ZXJDaGFuZ2UodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChlUih7dGFnRmlsdGVyOnR9KSl9fXgyLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx4MikoU20oSXcpKX0seDIuybVjbXA9dG8oe3R5cGU6eDIsc2VsZWN0b3JzOltbIm1ldHJpY3MtdGFnLWZpbHRlciJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJyZWdleEZpbHRlclZhbHVlIiwiaXNSZWdleEZpbHRlclZhbGlkIiwiY29tcGxldGlvbnMiLCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsIm1ldHJpY3MtdGFnLWZpbHRlci1jb21wb25lbnQiLDApLFZtKCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uVGFnRmlsdGVyQ2hhbmdlKGUpfSkpLEFoKDEsImFzeW5jIiksQWgoMiwiYXN5bmMiKSxBaCgzLCJhc3luYyIpLEFtKCkpLDImZSYmRG0oInJlZ2V4RmlsdGVyVmFsdWUiLFRoKDEsMyxuLnRhZ0ZpbHRlciQpKSgiaXNSZWdleEZpbHRlclZhbGlkIixUaCgyLDUsbi5pc1RhZ0ZpbHRlclJlZ2V4VmFsaWQkKSkoImNvbXBsZXRpb25zIixUaCgzLDcsbi5jb21wbGV0aW9ucyQpKX0sZGlyZWN0aXZlczpbdjJdLHBpcGVzOlt3TV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh4Mixbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJtZXRyaWNzLXRhZy1maWx0ZXIiLHRlbXBsYXRlOidcbiAgICA8bWV0cmljcy10YWctZmlsdGVyLWNvbXBvbmVudFxuICAgICAgW3JlZ2V4RmlsdGVyVmFsdWVdPSJ0YWdGaWx0ZXIkIHwgYXN5bmMiXG4gICAgICBbaXNSZWdleEZpbHRlclZhbGlkXT0iaXNUYWdGaWx0ZXJSZWdleFZhbGlkJCB8IGFzeW5jIlxuICAgICAgW2NvbXBsZXRpb25zXT0iY29tcGxldGlvbnMkIHwgYXN5bmMiXG4gICAgICAob25SZWdleEZpbHRlclZhbHVlQ2hhbmdlKT0ib25UYWdGaWx0ZXJDaGFuZ2UoJGV2ZW50KSJcbiAgICA+PC9tZXRyaWNzLXRhZy1maWx0ZXItY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd31dfSksbnVsbCk7Y29uc3QgTzI9WyJidXR0b24iXSxQMj1uZXcgR2EoIk1BVF9CVVRUT05fVE9HR0xFX0RFRkFVTFRfT1BUSU9OUyIpLHcyPW5ldyBHYSgiTWF0QnV0dG9uVG9nZ2xlR3JvdXAiKSxrMj17cHJvdmlkZTpJVix1c2VFeGlzdGluZzpxZSgoKCk9PkUyKSksbXVsdGk6ITB9O2xldCBTMj0wO2NsYXNzIEQye2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLnZhbHVlPWV9fWNsYXNzIEUye2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3I9dCx0aGlzLl92ZXJ0aWNhbD0hMSx0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX25hbWU9Im1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLSIrUzIrKyx0aGlzLnZhbHVlQ2hhbmdlPW5ldyBMaCx0aGlzLmNoYW5nZT1uZXcgTGgsdGhpcy5hcHBlYXJhbmNlPWUmJmUuYXBwZWFyYW5jZT9lLmFwcGVhcmFuY2U6InN0YW5kYXJkIn1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfXNldCBuYW1lKHQpe3RoaXMuX25hbWU9dCx0aGlzLl9idXR0b25Ub2dnbGVzJiZ0aGlzLl9idXR0b25Ub2dnbGVzLmZvckVhY2goKHQ9Pnt0Lm5hbWU9dGhpcy5fbmFtZSx0Ll9tYXJrRm9yQ2hlY2soKX0pKX1nZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9c2V0IHZlcnRpY2FsKHQpe3RoaXMuX3ZlcnRpY2FsPXl6KHQpfWdldCB2YWx1ZSgpe2NvbnN0IHQ9dGhpcy5fc2VsZWN0aW9uTW9kZWw/dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQ6W107cmV0dXJuIHRoaXMubXVsdGlwbGU/dC5tYXAoKHQ9PnQudmFsdWUpKTp0WzBdP3RbMF0udmFsdWU6dm9pZCAwfXNldCB2YWx1ZSh0KXt0aGlzLl9zZXRTZWxlY3Rpb25CeVZhbHVlKHQpLHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKX1nZXQgc2VsZWN0ZWQoKXtjb25zdCB0PXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP3Q6dFswXXx8bnVsbH1nZXQgbXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5fbXVsdGlwbGV9c2V0IG11bHRpcGxlKHQpe3RoaXMuX211bHRpcGxlPXl6KHQpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5fZGlzYWJsZWQ9eXoodCksdGhpcy5fYnV0dG9uVG9nZ2xlcyYmdGhpcy5fYnV0dG9uVG9nZ2xlcy5mb3JFYWNoKCh0PT50Ll9tYXJrRm9yQ2hlY2soKSkpfW5nT25Jbml0KCl7dGhpcy5fc2VsZWN0aW9uTW9kZWw9bmV3IG9GKHRoaXMubXVsdGlwbGUsdm9pZCAwLCExKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoLi4udGhpcy5fYnV0dG9uVG9nZ2xlcy5maWx0ZXIoKHQ9PnQuY2hlY2tlZCkpKX13cml0ZVZhbHVlKHQpe3RoaXMudmFsdWU9dCx0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49dH1yZWdpc3Rlck9uVG91Y2hlZCh0KXt0aGlzLl9vblRvdWNoZWQ9dH1zZXREaXNhYmxlZFN0YXRlKHQpe3RoaXMuZGlzYWJsZWQ9dH1fZW1pdENoYW5nZUV2ZW50KCl7Y29uc3QgdD10aGlzLnNlbGVjdGVkLGU9QXJyYXkuaXNBcnJheSh0KT90W3QubGVuZ3RoLTFdOnQsbj1uZXcgRDIoZSx0aGlzLnZhbHVlKTt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKG4udmFsdWUpLHRoaXMuY2hhbmdlLmVtaXQobil9X3N5bmNCdXR0b25Ub2dnbGUodCxlLG49ITEsbz0hMSl7dGhpcy5tdWx0aXBsZXx8IXRoaXMuc2VsZWN0ZWR8fHQuY2hlY2tlZHx8KHRoaXMuc2VsZWN0ZWQuY2hlY2tlZD0hMSksdGhpcy5fc2VsZWN0aW9uTW9kZWw/ZT90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QodCk6dGhpcy5fc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QodCk6bz0hMCxvP1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT50aGlzLl91cGRhdGVNb2RlbFZhbHVlKG4pKSk6dGhpcy5fdXBkYXRlTW9kZWxWYWx1ZShuKX1faXNTZWxlY3RlZCh0KXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwmJnRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQodCl9X2lzUHJlY2hlY2tlZCh0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmF3VmFsdWUmJih0aGlzLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHRoaXMuX3Jhd1ZhbHVlKT90aGlzLl9yYXdWYWx1ZS5zb21lKChlPT5udWxsIT10LnZhbHVlJiZlPT09dC52YWx1ZSkpOnQudmFsdWU9PT10aGlzLl9yYXdWYWx1ZSl9X3NldFNlbGVjdGlvbkJ5VmFsdWUodCl7aWYodGhpcy5fcmF3VmFsdWU9dCx0aGlzLl9idXR0b25Ub2dnbGVzKWlmKHRoaXMubXVsdGlwbGUmJnQpe2lmKCFBcnJheS5pc0FycmF5KHQpJiYoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkpdGhyb3cgRXJyb3IoIlZhbHVlIG11c3QgYmUgYW4gYXJyYXkgaW4gbXVsdGlwbGUtc2VsZWN0aW9uIG1vZGUuIik7dGhpcy5fY2xlYXJTZWxlY3Rpb24oKSx0LmZvckVhY2goKHQ9PnRoaXMuX3NlbGVjdFZhbHVlKHQpKSl9ZWxzZSB0aGlzLl9jbGVhclNlbGVjdGlvbigpLHRoaXMuX3NlbGVjdFZhbHVlKHQpfV9jbGVhclNlbGVjdGlvbigpe3RoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCksdGhpcy5fYnV0dG9uVG9nZ2xlcy5mb3JFYWNoKCh0PT50LmNoZWNrZWQ9ITEpKX1fc2VsZWN0VmFsdWUodCl7Y29uc3QgZT10aGlzLl9idXR0b25Ub2dnbGVzLmZpbmQoKGU9Pm51bGwhPWUudmFsdWUmJmUudmFsdWU9PT10KSk7ZSYmKGUuY2hlY2tlZD0hMCx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoZSkpfV91cGRhdGVNb2RlbFZhbHVlKHQpe3QmJnRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpLHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKX19RTIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEUyKShTbShVZyksU20oUDIsOCkpfSxFMi7JtWRpcj1sbyh7dHlwZTpFMixzZWxlY3RvcnM6W1sibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24gdChlLG4sbyl7aWYoMSZlJiYkaChvLEEyLDUpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4uX2J1dHRvblRvZ2dsZXM9dCl9fSxob3N0QXR0cnM6WyJyb2xlIiwiZ3JvdXAiLDEsIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIl0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmKGpwKCJhcmlhLWRpc2FibGVkIixuLmRpc2FibGVkKSxwdSgibWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwiLG4udmVydGljYWwpKCJtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIiwic3RhbmRhcmQiPT09bi5hcHBlYXJhbmNlKSl9LGlucHV0czp7YXBwZWFyYW5jZToiYXBwZWFyYW5jZSIsbmFtZToibmFtZSIsdmVydGljYWw6InZlcnRpY2FsIix2YWx1ZToidmFsdWUiLG11bHRpcGxlOiJtdWx0aXBsZSIsZGlzYWJsZWQ6ImRpc2FibGVkIn0sb3V0cHV0czp7dmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixjaGFuZ2U6ImNoYW5nZSJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uVG9nZ2xlR3JvdXAiXSxmZWF0dXJlczpbcGcoW2syLHtwcm92aWRlOncyLHVzZUV4aXN0aW5nOkUyfV0pXX0pLEUyLmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6VWd9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbUDJdfV19XSxFMi5wcm9wRGVjb3JhdG9ycz17X2J1dHRvblRvZ2dsZXM6W3t0eXBlOllhLGFyZ3M6W3FlKCgoKT0+QTIpKSx7ZGVzY2VuZGFudHM6ITB9XX1dLGFwcGVhcmFuY2U6W3t0eXBlOnh5fV0sbmFtZTpbe3R5cGU6eHl9XSx2ZXJ0aWNhbDpbe3R5cGU6eHl9XSx2YWx1ZTpbe3R5cGU6eHl9XSx2YWx1ZUNoYW5nZTpbe3R5cGU6T3l9XSxtdWx0aXBsZTpbe3R5cGU6eHl9XSxkaXNhYmxlZDpbe3R5cGU6eHl9XSxjaGFuZ2U6W3t0eXBlOk95fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoRTIsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAiLHByb3ZpZGVyczpbazIse3Byb3ZpZGU6dzIsdXNlRXhpc3Rpbmc6RTJ9XSxob3N0Ontyb2xlOiJncm91cCIsY2xhc3M6Im1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIiwiW2F0dHIuYXJpYS1kaXNhYmxlZF0iOiJkaXNhYmxlZCIsIltjbGFzcy5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbF0iOiJ2ZXJ0aWNhbCIsIltjbGFzcy5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkXSI6J2FwcGVhcmFuY2UgPT09ICJzdGFuZGFyZCInfSxleHBvcnRBczoibWF0QnV0dG9uVG9nZ2xlR3JvdXAifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6VWd9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbUDJdfV19XX0pLHt2YWx1ZUNoYW5nZTpbe3R5cGU6T3l9XSxjaGFuZ2U6W3t0eXBlOk95fV0sYXBwZWFyYW5jZTpbe3R5cGU6eHl9XSxuYW1lOlt7dHlwZTp4eX1dLHZlcnRpY2FsOlt7dHlwZTp4eX1dLHZhbHVlOlt7dHlwZTp4eX1dLG11bHRpcGxlOlt7dHlwZTp4eX1dLGRpc2FibGVkOlt7dHlwZTp4eX1dLF9idXR0b25Ub2dnbGVzOlt7dHlwZTpZYSxhcmdzOltxZSgoKCk9PkEyKSkse2Rlc2NlbmRhbnRzOiEwfV19XX0pO2NvbnN0IFIyPVFJKGNsYXNze30pO2NsYXNzIEEyIGV4dGVuZHMgUjJ7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9lbGVtZW50UmVmPW4sdGhpcy5fZm9jdXNNb25pdG9yPW8sdGhpcy5faXNTaW5nbGVTZWxlY3Rvcj0hMSx0aGlzLl9jaGVja2VkPSExLHRoaXMuYXJpYUxhYmVsbGVkYnk9bnVsbCx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLmNoYW5nZT1uZXcgTGg7Y29uc3Qgcj1OdW1iZXIoaSk7dGhpcy50YWJJbmRleD1yfHwwPT09cj9yOm51bGwsdGhpcy5idXR0b25Ub2dnbGVHcm91cD10LHRoaXMuYXBwZWFyYW5jZT1hJiZhLmFwcGVhcmFuY2U/YS5hcHBlYXJhbmNlOiJzdGFuZGFyZCJ9Z2V0IGJ1dHRvbklkKCl7cmV0dXJuYCR7dGhpcy5pZH0tYnV0dG9uYH1nZXQgYXBwZWFyYW5jZSgpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwP3RoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuYXBwZWFyYW5jZTp0aGlzLl9hcHBlYXJhbmNlfXNldCBhcHBlYXJhbmNlKHQpe3RoaXMuX2FwcGVhcmFuY2U9dH1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwP3RoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX2lzU2VsZWN0ZWQodGhpcyk6dGhpcy5fY2hlY2tlZH1zZXQgY2hlY2tlZCh0KXtjb25zdCBlPXl6KHQpO2UhPT10aGlzLl9jaGVja2VkJiYodGhpcy5fY2hlY2tlZD1lLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAmJnRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX3N5bmNCdXR0b25Ub2dnbGUodGhpcyx0aGlzLl9jaGVja2VkKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiZ0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLmRpc2FibGVkfXNldCBkaXNhYmxlZCh0KXt0aGlzLl9kaXNhYmxlZD15eih0KX1uZ09uSW5pdCgpe2NvbnN0IHQ9dGhpcy5idXR0b25Ub2dnbGVHcm91cDt0aGlzLl9pc1NpbmdsZVNlbGVjdG9yPXQmJiF0Lm11bHRpcGxlLHRoaXMuaWQ9dGhpcy5pZHx8Im1hdC1idXR0b24tdG9nZ2xlLSIrUzIrKyx0aGlzLl9pc1NpbmdsZVNlbGVjdG9yJiYodGhpcy5uYW1lPXQubmFtZSksdCYmKHQuX2lzUHJlY2hlY2tlZCh0aGlzKT90aGlzLmNoZWNrZWQ9ITA6dC5faXNTZWxlY3RlZCh0aGlzKSE9PXRoaXMuX2NoZWNrZWQmJnQuX3N5bmNCdXR0b25Ub2dnbGUodGhpcyx0aGlzLl9jaGVja2VkKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCl9bmdPbkRlc3Ryb3koKXtjb25zdCB0PXRoaXMuYnV0dG9uVG9nZ2xlR3JvdXA7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLHQmJnQuX2lzU2VsZWN0ZWQodGhpcykmJnQuX3N5bmNCdXR0b25Ub2dnbGUodGhpcywhMSwhMSwhMCl9Zm9jdXModCl7dGhpcy5fYnV0dG9uRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKHQpfV9vbkJ1dHRvbkNsaWNrKCl7Y29uc3QgdD0hIXRoaXMuX2lzU2luZ2xlU2VsZWN0b3J8fCF0aGlzLl9jaGVja2VkO3QhPT10aGlzLl9jaGVja2VkJiYodGhpcy5fY2hlY2tlZD10LHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAmJih0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLl9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsdGhpcy5fY2hlY2tlZCwhMCksdGhpcy5idXR0b25Ub2dnbGVHcm91cC5fb25Ub3VjaGVkKCkpKSx0aGlzLmNoYW5nZS5lbWl0KG5ldyBEMih0aGlzLHRoaXMudmFsdWUpKX1fbWFya0ZvckNoZWNrKCl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9fUEyLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxBMikoU20odzIsOCksU20oVWcpLFNtKGhnKSxTbShTSSksTmEoInRhYmluZGV4IiksU20oUDIsOCkpfSxBMi7JtWNtcD10byh7dHlwZTpBMixzZWxlY3RvcnM6W1sibWF0LWJ1dHRvbi10b2dnbGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJlFoKE8yLDUpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4uX2J1dHRvbkVsZW1lbnQ9dC5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZSJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZWbSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uZm9jdXMoKX0pKSwyJmUmJihqcCgiYXJpYS1sYWJlbCIsbnVsbCkoImFyaWEtbGFiZWxsZWRieSIsbnVsbCkoImlkIixuLmlkKSgibmFtZSIsbnVsbCkscHUoIm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUiLCFuLmJ1dHRvblRvZ2dsZUdyb3VwKSgibWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCIsbi5jaGVja2VkKSgibWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQiLG4uZGlzYWJsZWQpKCJtYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIiwic3RhbmRhcmQiPT09bi5hcHBlYXJhbmNlKSl9LGlucHV0czp7ZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLHRhYkluZGV4OiJ0YWJJbmRleCIsYXBwZWFyYW5jZToiYXBwZWFyYW5jZSIsY2hlY2tlZDoiY2hlY2tlZCIsZGlzYWJsZWQ6ImRpc2FibGVkIixpZDoiaWQiLG5hbWU6Im5hbWUiLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSx2YWx1ZToidmFsdWUifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uVG9nZ2xlIl0sZmVhdHVyZXM6W3hwXSxuZ0NvbnRlbnRTZWxlY3RvcnM6WyIqIl0sZGVjbHM6Nix2YXJzOjksY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsIm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbiIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsImlkIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiYnV0dG9uIiwiIl0sWzEsIm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQiXSxbMSwibWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZS1yaXBwbGUiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoWm0oKSxSbSgwLCJidXR0b24iLDAsMSksVm0oImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vbkJ1dHRvbkNsaWNrKCl9KSksUm0oMiwic3BhbiIsMiksWG0oMyksQW0oKSxBbSgpLFRtKDQsInNwYW4iLDMpLFRtKDUsInNwYW4iLDQpKSwyJmUpe2NvbnN0IHQ9JHAoMSk7RG0oImlkIixuLmJ1dHRvbklkKSgiZGlzYWJsZWQiLG4uZGlzYWJsZWR8fG51bGwpLGpwKCJ0YWJpbmRleCIsbi5kaXNhYmxlZD8tMTpuLnRhYkluZGV4KSgiYXJpYS1wcmVzc2VkIixuLmNoZWNrZWQpKCJuYW1lIixuLm5hbWV8fG51bGwpKCJhcmlhLWxhYmVsIixuLmFyaWFMYWJlbCkoImFyaWEtbGFiZWxsZWRieSIsbi5hcmlhTGFiZWxsZWRieSkscmMoNSksRG0oIm1hdFJpcHBsZVRyaWdnZXIiLHQpKCJtYXRSaXBwbGVEaXNhYmxlZCIsbi5kaXNhYmxlUmlwcGxlfHxuLmRpc2FibGVkKX19LGRpcmVjdGl2ZXM6W2tIXSxzdHlsZXM6WyIubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXB7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjtib3JkZXItcmFkaXVzOjJweDstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlci1yYWRpdXM6NHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke291dGxpbmU6MH0ubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWx7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtkaXNwbGF5OmJsb2NrfS5tYXQtYnV0dG9uLXRvZ2dsZXt3aGl0ZS1zcGFjZTpub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfS5tYXQtYnV0dG9uLXRvZ2dsZS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouNX0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkKTpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4wNH0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkKSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQpIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjV9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkKTpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtkaXNwbGF5Om5vbmV9fS5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e3BhZGRpbmc6MCAxMnB4fS5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50Pip7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JvcmRlci1yYWRpdXM6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO29wYWNpdHk6MDt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtib3JkZXItYm90dG9tOnNvbGlkIDM2cHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi41O2hlaWdodDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtib3JkZXItYm90dG9tOnNvbGlkIDUwMHB4fS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbntib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlO2N1cnNvcjpwb2ludGVyfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLXRvZ2dsZS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9XG4iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxBMi5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOkUyLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOlt3Ml19XX0se3R5cGU6VWd9LHt0eXBlOmhnfSx7dHlwZTpTSX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmphLGFyZ3M6WyJ0YWJpbmRleCJdfV19LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpTcn0se3R5cGU6a3IsYXJnczpbUDJdfV19XSxBMi5wcm9wRGVjb3JhdG9ycz17YXJpYUxhYmVsOlt7dHlwZTp4eSxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sYXJpYUxhYmVsbGVkYnk6W3t0eXBlOnh5LGFyZ3M6WyJhcmlhLWxhYmVsbGVkYnkiXX1dLF9idXR0b25FbGVtZW50Olt7dHlwZTpaYSxhcmdzOlsiYnV0dG9uIl19XSxpZDpbe3R5cGU6eHl9XSxuYW1lOlt7dHlwZTp4eX1dLHZhbHVlOlt7dHlwZTp4eX1dLHRhYkluZGV4Olt7dHlwZTp4eX1dLGFwcGVhcmFuY2U6W3t0eXBlOnh5fV0sY2hlY2tlZDpbe3R5cGU6eHl9XSxkaXNhYmxlZDpbe3R5cGU6eHl9XSxjaGFuZ2U6W3t0eXBlOk95fV19LCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoQTIsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWF0LWJ1dHRvbi10b2dnbGUiLHRlbXBsYXRlOic8YnV0dG9uICNidXR0b24gY2xhc3M9Im1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbiBtYXQtZm9jdXMtaW5kaWNhdG9yIlxuICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgIFtpZF09ImJ1dHRvbklkIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09ImRpc2FibGVkID8gLTEgOiB0YWJJbmRleCJcbiAgICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT0iY2hlY2tlZCJcbiAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQgfHwgbnVsbCJcbiAgICAgICAgW2F0dHIubmFtZV09Im5hbWUgfHwgbnVsbCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09ImFyaWFMYWJlbCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT0iYXJpYUxhYmVsbGVkYnkiXG4gICAgICAgIChjbGljayk9Il9vbkJ1dHRvbkNsaWNrKCkiPlxuICA8c3BhbiBjbGFzcz0ibWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L3NwYW4+XG48L2J1dHRvbj5cblxuPHNwYW4gY2xhc3M9Im1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXkiPjwvc3Bhbj5cbjxzcGFuIGNsYXNzPSJtYXQtYnV0dG9uLXRvZ2dsZS1yaXBwbGUiIG1hdFJpcHBsZVxuICAgICBbbWF0UmlwcGxlVHJpZ2dlcl09ImJ1dHRvbiJcbiAgICAgW21hdFJpcHBsZURpc2FibGVkXT0idGhpcy5kaXNhYmxlUmlwcGxlIHx8IHRoaXMuZGlzYWJsZWQiPlxuPC9zcGFuPlxuJyxlbmNhcHN1bGF0aW9uOkhuLk5vbmUsZXhwb3J0QXM6Im1hdEJ1dHRvblRvZ2dsZSIsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaCxpbnB1dHM6WyJkaXNhYmxlUmlwcGxlIl0saG9zdDp7IltjbGFzcy5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lXSI6IiFidXR0b25Ub2dnbGVHcm91cCIsIltjbGFzcy5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkXSI6ImNoZWNrZWQiLCJbY2xhc3MubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbY2xhc3MubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZF0iOidhcHBlYXJhbmNlID09PSAic3RhbmRhcmQiJyxjbGFzczoibWF0LWJ1dHRvbi10b2dnbGUiLCJbYXR0ci5hcmlhLWxhYmVsXSI6Im51bGwiLCJbYXR0ci5hcmlhLWxhYmVsbGVkYnldIjoibnVsbCIsIlthdHRyLmlkXSI6ImlkIiwiW2F0dHIubmFtZV0iOiJudWxsIiwiKGZvY3VzKSI6ImZvY3VzKCkiLHJvbGU6InByZXNlbnRhdGlvbiJ9LHN0eWxlczpbIi5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1mbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3Vwe291dGxpbmU6c29saWQgMXB4fS5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmR7Ym9yZGVyLXJhZGl1czo0cHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmR7b3V0bGluZTowfS5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Lm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e2Rpc3BsYXk6YmxvY2t9Lm1hdC1idXR0b24tdG9nZ2xle3doaXRlLXNwYWNlOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1pY29uIHN2Z3t2ZXJ0aWNhbC1hbGlnbjp0b3B9Lm1hdC1idXR0b24tdG9nZ2xlLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi41fS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdCgubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQpOmhvdmVyIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQpIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCkgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouNX1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdCgubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQpOmhvdmVyIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2Rpc3BsYXk6bm9uZX19Lm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7cGFkZGluZzowIDEycHh9Lm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQ+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7Ym9yZGVyLXJhZGl1czppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTowO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JvcmRlci1ib3R0b206c29saWQgMzZweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjU7aGVpZ2h0OjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JvcmRlci1ib3R0b206c29saWQgNTAwcHh9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtYnV0dG9uLXRvZ2dsZS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtjb2xvcjppbmhlcml0O3BhZGRpbmc6MDttYXJnaW46MDtmb250OmluaGVyaXQ7b3V0bGluZTpub25lO3dpZHRoOjEwMCU7Y3Vyc29yOnBvaW50ZXJ9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkIC5tYXQtYnV0dG9uLXRvZ2dsZS1idXR0b257Y3Vyc29yOmRlZmF1bHR9Lm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH1cbiJdfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6RTIsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W3cyXX1dfSx7dHlwZTpVZ30se3R5cGU6aGd9LHt0eXBlOlNJfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6amEsYXJnczpbInRhYmluZGV4Il19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltQMl19XX1dfSkse2FyaWFMYWJlbGxlZGJ5Olt7dHlwZTp4eSxhcmdzOlsiYXJpYS1sYWJlbGxlZGJ5Il19XSxjaGFuZ2U6W3t0eXBlOk95fV0sdGFiSW5kZXg6W3t0eXBlOnh5fV0sYXBwZWFyYW5jZTpbe3R5cGU6eHl9XSxjaGVja2VkOlt7dHlwZTp4eX1dLGRpc2FibGVkOlt7dHlwZTp4eX1dLGlkOlt7dHlwZTp4eX1dLG5hbWU6W3t0eXBlOnh5fV0sYXJpYUxhYmVsOlt7dHlwZTp4eSxhcmdzOlsiYXJpYS1sYWJlbCJdfV0sX2J1dHRvbkVsZW1lbnQ6W3t0eXBlOlphLGFyZ3M6WyJidXR0b24iXX1dLHZhbHVlOlt7dHlwZTp4eX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBUMnt9ZnVuY3Rpb24gTjIodCxlKXtpZigxJnQmJihSbSgwLCJzcGFuIiwyKSxrdSgxKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oKTtyYygxKSxTdSh0LmZpcnN0VGV4dFBhcnQoKSl9fVQyLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxUMil9LFQyLsm1bW9kPWFvKHt0eXBlOlQyfSksVDIuybVpbmo9dm4oe2ltcG9ydHM6W1tYSSxTSF0sWEldfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChUMixbe3R5cGU6QXksYXJnczpbe2ltcG9ydHM6W1hJLFNIXSxleHBvcnRzOltYSSxFMixBMl0sZGVjbGFyYXRpb25zOltFMixBMl19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhUMix7ZGVjbGFyYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW0UyLEEyXX0saW1wb3J0czpmdW5jdGlvbigpe3JldHVybltYSSxTSF19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bWEksRTIsQTJdfX0pO2NsYXNzIHoye3BhcnNlVmFsdWUoKXtjb25zdCB0PXRoaXMudmFsdWUubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PXQ/e2ZpcnN0OiIiLHNlY29uZDp0aGlzLnZhbHVlfTp7Zmlyc3Q6dGhpcy52YWx1ZS5zbGljZSgwLHQpLHNlY29uZDp0aGlzLnZhbHVlLnNsaWNlKHQpfX1maXJzdFRleHRQYXJ0KCl7cmV0dXJuIHRoaXMucGFyc2VWYWx1ZSgpLmZpcnN0fXNlY29uZFRleHRQYXJ0KCl7cmV0dXJuIHRoaXMucGFyc2VWYWx1ZSgpLnNlY29uZH19ZnVuY3Rpb24gSTIodCxlLG4pe3JldHVybiBlfHxuP1tuLGU/ZS5uYW1lOiIuLi4iXS5maWx0ZXIoQm9vbGVhbikuam9pbigiLyIpOnR9ZnVuY3Rpb24gSDIodCxlLG4pe3ZhciBvLGksYSxyO3JldHVybiB0LnN0YXJ0LnN0ZXA8PWUmJnQuZW5kJiZuPD10LmVuZC5zdGVwfHxlPD10LnN0YXJ0LnN0ZXAmJnQuc3RhcnQuc3RlcDw9bnx8dC5lbmQmJmU8PShudWxsPT09KG89dC5lbmQpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnN0ZXApJiYobnVsbD09PShpPXQuZW5kKXx8dm9pZCAwPT09aT92b2lkIDA6aS5zdGVwKTw9bj97c3RhcnRTdGVwOnQuc3RhcnQuc3RlcCxlbmRTdGVwOm51bGwhPT0ocj1udWxsPT09KGE9dC5lbmQpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnN0ZXApJiZ2b2lkIDAhPT1yP3I6bnVsbCxjbGlwcGVkOiExfTpuPD10LnN0YXJ0LnN0ZXA/e3N0YXJ0U3RlcDpuLGVuZFN0ZXA6bnVsbCxjbGlwcGVkOiEwfTp7c3RhcnRTdGVwOmUsZW5kU3RlcDpudWxsLGNsaXBwZWQ6ITB9fXoyLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx6Mil9LHoyLsm1Y21wPXRvKHt0eXBlOnoyLHNlbGVjdG9yczpbWyJ0Yi10cnVuY2F0ZWQtcGF0aCJdXSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSJ9LGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWyJjbGFzcyIsImZpcnN0LXRleHQtcGFydCIsNCwibmdJZiJdLFsxLCJzZWNvbmQtdGV4dC1wYXJ0Il0sWzEsImZpcnN0LXRleHQtcGFydCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUXAoMCxOMiwyLDEsInNwYW4iLDApLFJtKDEsInNwYW4iLDEpLGt1KDIpLEFtKCkpLDImZSYmKERtKCJuZ0lmIixuLmZpcnN0VGV4dFBhcnQoKS5sZW5ndGg+MCkscmMoMiksU3Uobi5zZWNvbmRUZXh0UGFydCgpKSl9LGRpcmVjdGl2ZXM6W2RNXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7d2hpdGUtc3BhY2U6bm93cmFwfS5maXJzdC10ZXh0LXBhcnRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxIDRjaDttYXgtd2lkdGg6bWF4LWNvbnRlbnR9LmZpcnN0LXRleHQtcGFydFtfbmdjb250ZW50LSVDT01QJV0sIC5zZWNvbmQtdGV4dC1wYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30iXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoejIsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoidGItdHJ1bmNhdGVkLXBhdGgiLHRlbXBsYXRlOidcbiAgICA8c3BhbiAqbmdJZj0iZmlyc3RUZXh0UGFydCgpLmxlbmd0aCA+IDAiIGNsYXNzPSJmaXJzdC10ZXh0LXBhcnQiPnt7XG4gICAgICBmaXJzdFRleHRQYXJ0KClcbiAgICB9fTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz0ic2Vjb25kLXRleHQtcGFydCI+e3sgc2Vjb25kVGV4dFBhcnQoKSB9fTwvc3Bhbj5cbiAgJyxzdHlsZVVybHM6WyJ0cnVuY2F0ZWRfcGF0aF9jb21wb25lbnQuY3NzIl19XX1dLG51bGwse3ZhbHVlOlt7dHlwZTp4eX1dfSk7Y2xhc3MgRjJ7fUYyLsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxGMil9LEYyLsm1Y21wPXRvKHt0eXBlOkYyLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lLWNvbXBvbmVudCJdXSxpbnB1dHM6e25hbWU6Im5hbWUifSxkZWNsczoxLHZhcnM6MSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZrdSgwKSwyJmUmJlN1KG4ubmFtZSl9LHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEYyLFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6ImNhcmQtcnVuLW5hbWUtY29tcG9uZW50Iix0ZW1wbGF0ZToie3sgbmFtZSB9fSIsc3R5bGVVcmxzOlsicnVuX25hbWVfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwse25hbWU6W3t0eXBlOnh5fV19KTtjbGFzcyBMMntjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXR9bmdPbkluaXQoKXt0aGlzLm5hbWUkPVd0KFt0aGlzLnN0b3JlLnNlbGVjdChzTix7cnVuSWQ6dGhpcy5ydW5JZH0pLHRoaXMuc3RvcmUuc2VsZWN0KHJOLHtydW5JZDp0aGlzLnJ1bklkfSksdGhpcy5zdG9yZS5zZWxlY3QoelMpXSkucGlwZShJdCgoKFt0LGUsbl0pPT5JMih0aGlzLnJ1bklkLHQsZT9uW2VdOm51bGwpKSkpfX1mdW5jdGlvbiBCMih0LGUpe2lmKDEmdCYmKFJtKDAsInNwYW4iLDE3KSxrdSgxKSxBaCgyLCJudW1iZXIiKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oKTtyYygxKSxEdSgiU3RlcCAiLFRoKDIsMSx0LnN0ZXBWYWx1ZXNbdC5zdGVwSW5kZXhdKSwiIil9fWZ1bmN0aW9uIFYyKHQsZSl7aWYoMSZ0JiYoUm0oMCwic3BhbiIsMTgpLGt1KDEpLEFoKDIsIm51bWJlciIpLEFoKDMsIm51bWJlciIpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgpO3JjKDEpLEV1KCJTYW1wbGUgIixUaCgyLDIsdC5zYW1wbGUrMSksIi8iLFRoKDMsNCx0Lm51bVNhbXBsZSksIiIpfX1mdW5jdGlvbiBqMih0LGUpezEmdCYmVG0oMCwibWF0LXNwaW5uZXIiLDE5KX1MMi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TDIpKFNtKEl3KSl9LEwyLsm1Y21wPXRvKHt0eXBlOkwyLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lIl1dLGlucHV0czp7cnVuSWQ6InJ1bklkIn0sZGVjbHM6Myx2YXJzOjYsY29uc3RzOltbMywibmFtZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVG0oMCwiY2FyZC1ydW4tbmFtZS1jb21wb25lbnQiLDApLEFoKDEsImFzeW5jIiksQWgoMiwiYXN5bmMiKSksMiZlJiYoRG0oIm5hbWUiLFRoKDEsMixuLm5hbWUkKSksanAoInRpdGxlIixUaCgyLDQsbi5uYW1lJCkpKX0sZGlyZWN0aXZlczpbRjJdLHBpcGVzOlt3TV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChMMixbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJjYXJkLXJ1bi1uYW1lIix0ZW1wbGF0ZTonXG4gICAgPGNhcmQtcnVuLW5hbWUtY29tcG9uZW50XG4gICAgICBbbmFtZV09Im5hbWUkIHwgYXN5bmMiXG4gICAgICBbYXR0ci50aXRsZV09Im5hbWUkIHwgYXN5bmMiXG4gICAgPjwvY2FyZC1ydW4tbmFtZS1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fV19KSx7cnVuSWQ6W3t0eXBlOnh5fV19KTtjb25zdCBVMj1mdW5jdGlvbih0KXtyZXR1cm57ZmlsdGVyOnR9fTtmdW5jdGlvbiBHMih0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO05tKDApLFJtKDEsImRpdiIsMjApLFJtKDIsIm1hdC1zbGlkZXIiLDIxKSxWbSgiaW5wdXQiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLm9uU2xpZGVySW5wdXQobil9KSksQW0oKSxBbSgpLFJtKDMsImRpdiIsMjIpLFRtKDQsImltZyIsMjMpLEFtKCksem0oKX1pZigyJnQpe2NvbnN0IHQ9WW0oKTtyYygyKSxEbSgiZGlzYWJsZWQiLHQuc3RlcFZhbHVlcy5sZW5ndGg8PTEpKCJtaW4iLDApKCJtYXgiLHQuc3RlcFZhbHVlcy5sZW5ndGgtMSkoInN0ZXAiLDEpKCJ0aWNrSW50ZXJ2YWwiLDEpKCJ2YWx1ZSIsdC5zdGVwSW5kZXgpLHJjKDIpLEptKCJhbHQiLCJJbWFnZSBhdCBzdGVwICIsdC5zdGVwVmFsdWVzW3Quc3RlcEluZGV4XSwiIiksS20oInNyYyIsdC5pbWFnZVVybCxUcyksRG0oIm5nU3R5bGUiLE1oKDksVTIsdC5jc3NGaWx0ZXIoKSkpfX1mdW5jdGlvbiBXMih0LGUpezEmdCYmKFJtKDAsImRpdiIsMjUpLGt1KDEsIiBEYXRhIGZhaWxlZCB0byBsb2FkLiAiKSxBbSgpKX1mdW5jdGlvbiBZMih0LGUpe2lmKDEmdCYmUXAoMCxXMiwyLDAsImRpdiIsMjQpLDImdCl7Y29uc3QgdD1ZbSgpO0RtKCJuZ0lmIix0LmxvYWRTdGF0ZT09PXQuRGF0YUxvYWRTdGF0ZS5GQUlMRUQpfX1jb25zdCBxMj1mdW5jdGlvbih0KXtyZXR1cm57YmFja2dyb3VuZENvbG9yOnR9fTtjbGFzcyBaMntjb25zdHJ1Y3Rvcigpe3RoaXMuRGF0YUxvYWRTdGF0ZT15RSx0aGlzLm9uQWN0dWFsU2l6ZVRvZ2dsZT1uZXcgTGgsdGhpcy5zdGVwSW5kZXhDaGFuZ2U9bmV3IExoLHRoaXMub25QaW5DbGlja2VkPW5ldyBMaH1jc3NGaWx0ZXIoKXtyZXR1cm5gY29udHJhc3QoJHt0aGlzLmNvbnRyYXN0SW5NaWxsaS8xMH0lKSBicmlnaHRuZXNzKCR7dGhpcy5icmlnaHRuZXNzSW5NaWxsaS8xZTN9KWB9b25TbGlkZXJJbnB1dCh0KXt0aGlzLnN0ZXBJbmRleENoYW5nZS5lbWl0KHQudmFsdWUpfX1aMi7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WjIpfSxaMi7JtWNtcD10byh7dHlwZTpaMixzZWxlY3RvcnM6W1siaW1hZ2UtY2FyZC1jb21wb25lbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezImZSYmcHUoImFjdHVhbC1zaXplIixuLnNob3dBY3R1YWxTaXplKX0saW5wdXRzOntsb2FkU3RhdGU6ImxvYWRTdGF0ZSIsdGl0bGU6InRpdGxlIix0YWc6InRhZyIscnVuSWQ6InJ1bklkIixzYW1wbGU6InNhbXBsZSIsbnVtU2FtcGxlOiJudW1TYW1wbGUiLGltYWdlVXJsOiJpbWFnZVVybCIsc3RlcEluZGV4OiJzdGVwSW5kZXgiLHN0ZXBWYWx1ZXM6InN0ZXBWYWx1ZXMiLGJyaWdodG5lc3NJbk1pbGxpOiJicmlnaHRuZXNzSW5NaWxsaSIsY29udHJhc3RJbk1pbGxpOiJjb250cmFzdEluTWlsbGkiLHNob3dBY3R1YWxTaXplOiJzaG93QWN0dWFsU2l6ZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSIsYWxsb3dUb2dnbGVBY3R1YWxTaXplOiJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLGlzUGlubmVkOiJpc1Bpbm5lZCJ9LG91dHB1dHM6e29uQWN0dWFsU2l6ZVRvZ2dsZToib25BY3R1YWxTaXplVG9nZ2xlIixzdGVwSW5kZXhDaGFuZ2U6InN0ZXBJbmRleENoYW5nZSIsb25QaW5DbGlja2VkOiJvblBpbkNsaWNrZWQifSxkZWNsczoxOSx2YXJzOjE0LGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIlBpbiBjYXJkIik6JGxvY2FsaXplYDpBIGJ1dHRvbiB0byBwaW4gYSBjYXJkLuKQn2U2NjVkYzcxMmJkNWYxOGQ0ZGZhM2EyOWUxMjVkNTY1Y2M1MWUyZjbikJ83Mjg0NjA2NDI2MjM0Mzc1MzQ0OlBpbiBjYXJkYCxlPSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJUb2dnbGUgYWN0dWFsIGltYWdlIHNpemUiKTokbG9jYWxpemVgOkEgYnV0dG9uIG9uIGFuIGltYWdlIGNhcmQgdGhhdCB0b2dnbGVzIGFjdHVhbCBpbWFnZSBzaXplLuKQnzNjYTA1ZWYzYTZlM2EzNzA2NWY1ZTBmNjljNWQ1YTIxNzhkOTA3OTHikJ83NjM1MTAxOTM2NjY0Nzg5MTQwOlRvZ2dsZSBhY3R1YWwgaW1hZ2Ugc2l6ZWAsW1sxLCJoZWFkaW5nIl0sWzEsImxpbmUiXSxbMSwidGFnIiwzLCJ0aXRsZSIsInZhbHVlIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiVG9nZ2xlIGFjdHVhbCBpbWFnZSBzaXplIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzdmdJY29uIiwiaW1hZ2Vfc2VhcmNoXzI0cHgiXSxbMSwicnVuIl0sWzEsImRvdCIsMywibmdTdHlsZSJdLFsxLCJydW4tdGV4dCIsMywicnVuSWQiXSxbMSwibWV0YWRhdGEiXSxbImNsYXNzIiwic3RlcCIsNCwibmdJZiJdLFsiY2xhc3MiLCJzYW1wbGUiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZyIsImRpYW1ldGVyIiwiMTgiLDQsIm5nSWYiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0ltYWdlRGF0YSIsIiJdLFsxLCJzdGVwIl0sWzEsInNhbXBsZSJdLFsiZGlhbWV0ZXIiLCIxOCIsMSwibG9hZGluZyJdLFsxLCJzbGlkZXItcm93Il0sWyJjb2xvciIsInByaW1hcnkiLDEsInN0ZXAtc2xpZGVyIiwzLCJkaXNhYmxlZCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ0aWNrSW50ZXJ2YWwiLCJ2YWx1ZSIsImlucHV0Il0sWzEsImltZy1jb250YWluZXIiXSxbMywiYWx0Iiwic3JjIiwibmdTdHlsZSJdLFsiY2xhc3MiLCJlbXB0eS1tZXNzYWdlIiw0LCJuZ0lmIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihSbSgwLCJkaXYiLDApLFJtKDEsImRpdiIsMSksVG0oMiwidGItdHJ1bmNhdGVkLXBhdGgiLDIpLFJtKDMsInNwYW4iLDMpLFJtKDQsImJ1dHRvbiIsNCksVm0oImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUGluQ2xpY2tlZC5lbWl0KCFuLmlzUGlubmVkKX0pKSxUbSg1LCJtYXQtaWNvbiIsNSksQW0oKSxSbSg2LCJidXR0b24iLDYpLFZtKCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkFjdHVhbFNpemVUb2dnbGUuZW1pdCgpfSkpLFRtKDcsIm1hdC1pY29uIiw3KSxBbSgpLEFtKCksQW0oKSxSbSg4LCJkaXYiLDEpLFJtKDksInNwYW4iLDgpLFRtKDEwLCJzcGFuIiw5KSxUbSgxMSwiY2FyZC1ydW4tbmFtZSIsMTApLEFtKCksUm0oMTIsImRpdiIsMTEpLFFwKDEzLEIyLDMsMywic3BhbiIsMTIpLFFwKDE0LFYyLDQsNiwic3BhbiIsMTMpLFFwKDE1LGoyLDEsMCwibWF0LXNwaW5uZXIiLDE0KSxBbSgpLEFtKCksQW0oKSxRcCgxNixHMiw1LDExLCJuZy1jb250YWluZXIiLDE1KSxRcCgxNyxZMiwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDE2LGliKSksMiZlKXtjb25zdCB0PSRwKDE4KTtyYygyKSxLbSgidGl0bGUiLG4udGFnKSxLbSgidmFsdWUiLG4udGl0bGUpLHJjKDIpLGpwKCJ0aXRsZSIsbi5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIikscmMoMSksRG0oInN2Z0ljb24iLG4uaXNQaW5uZWQ/ImtlZXBfMjRweCI6ImtlZXBfb3V0bGluZV8yNHB4IikscmMoMSksRG0oImRpc2FibGVkIiwhbi5hbGxvd1RvZ2dsZUFjdHVhbFNpemUpLHJjKDQpLERtKCJuZ1N0eWxlIixNaCgxMixxMixuLnJ1bkNvbG9yU2NhbGUobi5ydW5JZCkpKSxyYygxKSxEbSgicnVuSWQiLG4ucnVuSWQpLHJjKDIpLERtKCJuZ0lmIixudWxsIT09bi5zdGVwSW5kZXgmJm4uc3RlcEluZGV4PG4uc3RlcFZhbHVlcy5sZW5ndGgpLHJjKDEpLERtKCJuZ0lmIixuLm51bVNhbXBsZT4xKSxyYygxKSxEbSgibmdJZiIsbi5sb2FkU3RhdGU9PT1uLkRhdGFMb2FkU3RhdGUuTE9BRElORykscmMoMSksRG0oIm5nSWYiLG51bGwhPT1uLnN0ZXBJbmRleCYmbi5zdGVwSW5kZXg8bi5zdGVwVmFsdWVzLmxlbmd0aCkoIm5nSWZFbHNlIix0KX19LGRpcmVjdGl2ZXM6W3oyLFhILERXLENNLEwyLGRNLG8xLFJYXSxwaXBlczpbRk1dLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fS5hY3R1YWwtc2l6ZVtfbmdob3N0LSVDT01QJV17aGVpZ2h0OmF1dG99LmhlYWRpbmdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0ubGluZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIG1heC1jb250ZW50fS5tZXRhZGF0YVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo1cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO21heC13aWR0aDoxNzVweDt0ZXh0LWFsaWduOmVuZH0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59LnBpbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxOHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVde2FsaWduLXNlbGY6YmFzZWxpbmU7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LnJ1bltfbmdjb250ZW50LSVDT01QJV0gICAuZG90W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4Om5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTNweDtoZWlnaHQ6MTNweDtib3JkZXItcmFkaXVzOjUwJTttYXJnaW4tcmlnaHQ6NHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVdICAgLnJ1bi10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczttYXgtd2lkdGg6MTIwcHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV0sIC5zYW1wbGVbX25nY29udGVudC0lQ09NUCVdLCAuc3RlcFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6MTNweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnJ1bltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNhbXBsZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zYW1wbGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnN0ZXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aGl0ZS1zcGFjZTpub3dyYXA7anVzdGlmeS1zZWxmOmZsZXgtZW5kO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLXJpZ2h0Oi0xMnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmltZy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxIDA7b3ZlcmZsb3cteTphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlfS5pbWctY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGltZ1tfbmdjb250ZW50LSVDT01QJV17aW1hZ2UtcmVuZGVyaW5nOi1tb3otY3Jpc3AtZWRnZXM7aW1hZ2UtcmVuZGVyaW5nOnBpeGVsYXRlZH0uYWN0dWFsLXNpemVbX25naG9zdC0lQ09NUCVdICAgLmltZy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG87ZmxleDpub25lfVtfbmdob3N0LSVDT01QJV06bm90KC5hY3R1YWwtc2l6ZSkgICBpbWdbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO21heC1oZWlnaHQ6MTAwJTttYXgtd2lkdGg6MTAwJTt3aWR0aDphdXRvO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y29udGFpbn0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MjRweH0uc3RlcC1zbGlkZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MX1bX25naG9zdC0lQ09NUCVdICAgICAubWF0LXNsaWRlci1taW4tdmFsdWUgLm1hdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjFlbTtmb250LXNpemU6MTNweH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoWjIsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoiaW1hZ2UtY2FyZC1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiJpbWFnZV9jYXJkX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyJpbWFnZV9jYXJkX2NvbXBvbmVudC5jc3MiXSxob3N0OnsiW2NsYXNzLmFjdHVhbC1zaXplXSI6InNob3dBY3R1YWxTaXplIn0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sbnVsbCx7bG9hZFN0YXRlOlt7dHlwZTp4eX1dLHRpdGxlOlt7dHlwZTp4eX1dLHRhZzpbe3R5cGU6eHl9XSxydW5JZDpbe3R5cGU6eHl9XSxzYW1wbGU6W3t0eXBlOnh5fV0sbnVtU2FtcGxlOlt7dHlwZTp4eX1dLGltYWdlVXJsOlt7dHlwZTp4eX1dLHN0ZXBJbmRleDpbe3R5cGU6eHl9XSxzdGVwVmFsdWVzOlt7dHlwZTp4eX1dLGJyaWdodG5lc3NJbk1pbGxpOlt7dHlwZTp4eX1dLGNvbnRyYXN0SW5NaWxsaTpbe3R5cGU6eHl9XSxzaG93QWN0dWFsU2l6ZTpbe3R5cGU6eHl9XSxydW5Db2xvclNjYWxlOlt7dHlwZTp4eX1dLGFsbG93VG9nZ2xlQWN0dWFsU2l6ZTpbe3R5cGU6eHl9XSxpc1Bpbm5lZDpbe3R5cGU6eHl9XSxvbkFjdHVhbFNpemVUb2dnbGU6W3t0eXBlOk95fV0sc3RlcEluZGV4Q2hhbmdlOlt7dHlwZTpPeX1dLG9uUGluQ2xpY2tlZDpbe3R5cGU6T3l9XX0pO2NsYXNzIFgye2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zdG9yZT10LHRoaXMuZGF0YVNvdXJjZT1lLHRoaXMuZnVsbFdpZHRoQ2hhbmdlZD1uZXcgTGgsdGhpcy5waW5TdGF0ZUNoYW5nZWQ9bmV3IExoLHRoaXMuYnJpZ2h0bmVzc0luTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KEhUKSx0aGlzLmNvbnRyYXN0SW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3QoRlQpLHRoaXMuYWN0dWFsU2l6ZUdsb2JhbFNldHRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KExUKSx0aGlzLnNob3dBY3R1YWxTaXplPSExLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hMSx0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZVN1YmplY3Q9bmV3IEYodGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IEl9b25TdGVwSW5kZXhDaGFuZ2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2godFIoe2NhcmRJZDp0aGlzLmNhcmRJZCxzdGVwSW5kZXg6dH0pKX1pc0ltYWdlQ2FyZE1ldGFkYXRhKHQpe2NvbnN0e3BsdWdpbjplfT10O3JldHVybiBlPT09aEEuSU1BR0VTfW9uQWN0dWFsU2l6ZVRvZ2dsZSgpe3RoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlU3ViamVjdC5uZXh0KHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCl9bmdPbkluaXQoKXtXdChbdGhpcy5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQsdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVTdWJqZWN0XSkucGlwZShJZSh0aGlzLm5nVW5zdWJzY3JpYmUpLEZlKCgoW3QsZV0pPT57dGhpcy5zaG93QWN0dWFsU2l6ZT10fHxlLHRoaXMuZnVsbFdpZHRoQ2hhbmdlZC5lbWl0KHRoaXMuc2hvd0FjdHVhbFNpemUpfSkpKS5zdWJzY3JpYmUoKCgpPT57fSkpO2NvbnN0IHQ9dGhpcy5zdG9yZS5zZWxlY3QoeVQsdGhpcy5jYXJkSWQpLnBpcGUoSWUodGhpcy5uZ1Vuc3Vic2NyaWJlKSxjZSgodD0+ISF0JiZ0aGlzLmlzSW1hZ2VDYXJkTWV0YWRhdGEodCkpKSxJdCgodD0+dCkpLEFlKDEpKSxlPVd0KFt0LHRoaXMuc3RvcmUuc2VsZWN0KGhULHRoaXMuY2FyZElkKV0pLnBpcGUoSWUodGhpcy5uZ1Vuc3Vic2NyaWJlKSxJdCgoKFt0LGVdKT0+e2NvbnN0IG49dC5ydW5JZDtyZXR1cm4gZSYmZS5oYXNPd25Qcm9wZXJ0eShuKT9lW25dOltdfSkpLE1lKCgodCxlKT0+dC5sZW5ndGg9PT1lLmxlbmd0aCYmMD09PXQubGVuZ3RofHx0PT09ZSkpLEFlKDEpKTt0aGlzLnN0ZXBJbmRleCQ9dGhpcy5zdG9yZS5zZWxlY3QodlQsdGhpcy5jYXJkSWQpLHRoaXMubG9hZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdChnVCx0aGlzLmNhcmRJZCk7Y29uc3Qgbj1XdChbZSx0aGlzLnN0ZXBJbmRleCRdKS5waXBlKEl0KCgoW3QsZV0pPT5udWxsIT09ZSYmdFtlXT90W2VdOm51bGwpKSk7dGhpcy50YWckPXQucGlwZShJdCgodD0+dC50YWcpKSksdGhpcy50aXRsZSQ9dGhpcy50YWckLnBpcGUoSXQoKHQ9PmYyKHQsdGhpcy5ncm91cE5hbWUpKSkpLHRoaXMucnVuSWQkPXQucGlwZShJdCgodD0+dC5ydW5JZCkpKSx0aGlzLnNhbXBsZSQ9dC5waXBlKEl0KCh0PT50LnNhbXBsZSkpKSx0aGlzLm51bVNhbXBsZSQ9dC5waXBlKEl0KCh0PT50Lm51bVNhbXBsZSkpKSx0aGlzLmltYWdlVXJsJD1uLnBpcGUoSXQoKHQ9PnQ/dGhpcy5kYXRhU291cmNlLmltYWdlVXJsKHQuaW1hZ2VJZCk6bnVsbCkpKSx0aGlzLnN0ZXBWYWx1ZXMkPWUucGlwZShJdCgodD0+dC5tYXAoKHQ9PnQuc3RlcCkpKSkpLHRoaXMuaXNQaW5uZWQkPXRoaXMuc3RvcmUuc2VsZWN0KHdULHRoaXMuY2FyZElkKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXZhciBLMixKMixRMjtmdW5jdGlvbiAkMih0LGUpezEmdCYmKFJtKDAsInNwYW4iKSxrdSgxLCJzY2FsYXIiKSxBbSgpKX1mdW5jdGlvbiB0NSh0LGUpezEmdCYmKFJtKDAsInNwYW4iKSxrdSgxLCJoaXN0b2dyYW0iKSxBbSgpKX1mdW5jdGlvbiBlNSh0LGUpezEmdCYmKFJtKDAsInNwYW4iKSxrdSgxLCJ1bmtub3duIiksQW0oKSl9ZnVuY3Rpb24gbjUodCxlKXtpZigxJnQmJihObSgwLDEzKSxRcCgxLCQyLDIsMCwic3BhbiIsMTQpLFFwKDIsdDUsMiwwLCJzcGFuIiwxNCksUXAoMyxlNSwyLDAsInNwYW4iLDE1KSx6bSgpKSwyJnQpe2NvbnN0IHQ9WW0oMik7RG0oIm5nU3dpdGNoIix0LmNhcmRNZXRhZGF0YS5wbHVnaW4pLHJjKDEpLERtKCJuZ1N3aXRjaENhc2UiLHQuUGx1Z2luVHlwZS5TQ0FMQVJTKSxyYygxKSxEbSgibmdTd2l0Y2hDYXNlIix0LlBsdWdpblR5cGUuSElTVE9HUkFNUyl9fWZ1bmN0aW9uIG81KHQsZSl7MSZ0JiZJbSgwKX1mdW5jdGlvbiBpNSh0LGUpe2lmKDEmdCYmKFJtKDAsIm9wdGlvbiIsMTYpLGt1KDEpLEFtKCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdDtEbSgidmFsdWUiLHQuaWQpLHJjKDEpLFN1KHQubmFtZSl9fWZ1bmN0aW9uIGE1KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Tm0oMCksUm0oMSwiaDIiKSxRcCgyLG41LDQsMywibmctdGVtcGxhdGUiLG51bGwsMixpYiksUm0oNCwic3BhbiIpLGt1KDUsIkRvd25sb2FkwqAiKSxBbSgpLFFwKDYsbzUsMSwwLCJuZy1jb250YWluZXIiLDMpLFJtKDcsInNwYW4iKSxrdSg4LCLCoGRhdGEgZm9ywqAiKSxBbSgpLFJtKDksImNvZGUiLDQpLGt1KDEwKSxBbSgpLEFtKCksUm0oMTEsIm1hdC1kaWFsb2ctY29udGVudCIpLFJtKDEyLCJtYXQtZm9ybS1maWVsZCIsNSksUm0oMTMsIm1hdC1sYWJlbCIpLGt1KDE0LCJTZWxlY3QgYSBydW4gdG8gZG93bmxvYWQgYSBkYXRhIGZvciBhIHNlcmllcyIpLEFtKCksUm0oMTUsInNlbGVjdCIsNiksVm0oImNoYW5nZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKCkucnVuU2VsZWN0ZWQuZW1pdChuLnRhcmdldC52YWx1ZSl9KSksUm0oMTYsIm9wdGlvbiIsNyksa3UoMTcsIi0iKSxBbSgpLFFwKDE4LGk1LDIsMiwib3B0aW9uIiw4KSxBbSgpLEFtKCksUm0oMTksImRpdiIsOSksUm0oMjAsInNwYW4iKSxrdSgyMSwiRG93bmxvYWQgYXPigKYiKSxBbSgpLGt1KDIyLCLCoCIpLFJtKDIzLCJhIiwxMCksa3UoMjQsIkpTT04iKSxBbSgpLFJtKDI1LCJhIiwxMCksa3UoMjYsIkNTViIpLEFtKCksQW0oKSxBbSgpLFJtKDI3LCJtYXQtZGlhbG9nLWFjdGlvbnMiLDExKSxSbSgyOCwiYnV0dG9uIiwxMiksa3UoMjksIkNsb3NlIiksQW0oKSxBbSgpLHptKCl9aWYoMiZ0KXtjb25zdCB0PSRwKDMpLGU9WW0oKTtyYyg2KSxEbSgibmdUZW1wbGF0ZU91dGxldCIsdCkscmMoMyksRG0oInRpdGxlIixlLmNhcmRNZXRhZGF0YS50YWcpLHJjKDEpLFN1KGUuY2FyZE1ldGFkYXRhLnRhZykscmMoNSksRG0oInZhbHVlIixlLnNlbGVjdGVkUnVuSWR8fCIiKSxyYygxKSxEbSgidmFsdWUiLCIiKSxyYygyKSxEbSgibmdGb3JPZiIsZS5ydW5zKSxyYyg1KSxEbSgiZGlzYWJsZWQiLCFlLmRvd25sb2FkVXJsSnNvbikoImRvd25sb2FkIixlLmdldERvd25sb2FkTmFtZSgianNvbiIpKSxqcCgiaHJlZiIsZS5kb3dubG9hZFVybEpzb24sVHMpLHJjKDIpLERtKCJkaXNhYmxlZCIsIWUuZG93bmxvYWRVcmxDc3YpKCJkb3dubG9hZCIsZS5nZXREb3dubG9hZE5hbWUoImNzdiIpKSxqcCgiaHJlZiIsZS5kb3dubG9hZFVybENzdixUcyl9fWZ1bmN0aW9uIHI1KHQsZSl7MSZ0JiZrdSgwLCJMb2FkaW5nLi4uIil9WDIuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFgyKShTbShJdyksU20oUEEpKX0sWDIuybVjbXA9dG8oe3R5cGU6WDIsc2VsZWN0b3JzOltbImltYWdlLWNhcmQiXV0saW5wdXRzOntjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUifSxvdXRwdXRzOntmdWxsV2lkdGhDaGFuZ2VkOiJmdWxsV2lkdGhDaGFuZ2VkIixwaW5TdGF0ZUNoYW5nZWQ6InBpblN0YXRlQ2hhbmdlZCJ9LGRlY2xzOjE0LHZhcnM6NDEsY29uc3RzOltbMywibG9hZFN0YXRlIiwidGl0bGUiLCJ0YWciLCJydW5JZCIsInNhbXBsZSIsIm51bVNhbXBsZSIsImltYWdlVXJsIiwic3RlcEluZGV4Iiwic3RlcFZhbHVlcyIsImJyaWdodG5lc3NJbk1pbGxpIiwiY29udHJhc3RJbk1pbGxpIiwicnVuQ29sb3JTY2FsZSIsInNob3dBY3R1YWxTaXplIiwiYWxsb3dUb2dnbGVBY3R1YWxTaXplIiwiaXNQaW5uZWQiLCJzdGVwSW5kZXhDaGFuZ2UiLCJvbkFjdHVhbFNpemVUb2dnbGUiLCJvblBpbkNsaWNrZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsImltYWdlLWNhcmQtY29tcG9uZW50IiwwKSxWbSgic3RlcEluZGV4Q2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblN0ZXBJbmRleENoYW5nZWQoZSl9KSkoIm9uQWN0dWFsU2l6ZVRvZ2dsZSIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkFjdHVhbFNpemVUb2dnbGUoKX0pKSgib25QaW5DbGlja2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5waW5TdGF0ZUNoYW5nZWQuZW1pdChlKX0pKSxBaCgxLCJhc3luYyIpLEFoKDIsImFzeW5jIiksQWgoMywiYXN5bmMiKSxBaCg0LCJhc3luYyIpLEFoKDUsImFzeW5jIiksQWgoNiwiYXN5bmMiKSxBaCg3LCJhc3luYyIpLEFoKDgsImFzeW5jIiksQWgoOSwiYXN5bmMiKSxBaCgxMCwiYXN5bmMiKSxBaCgxMSwiYXN5bmMiKSxBaCgxMiwiYXN5bmMiKSxBaCgxMywiYXN5bmMiKSxBbSgpKSwyJmUmJkRtKCJsb2FkU3RhdGUiLFRoKDEsMTUsbi5sb2FkU3RhdGUkKSkoInRpdGxlIixUaCgyLDE3LG4udGl0bGUkKSkoInRhZyIsVGgoMywxOSxuLnRhZyQpKSgicnVuSWQiLFRoKDQsMjEsbi5ydW5JZCQpKSgic2FtcGxlIixUaCg1LDIzLG4uc2FtcGxlJCkpKCJudW1TYW1wbGUiLFRoKDYsMjUsbi5udW1TYW1wbGUkKSkoImltYWdlVXJsIixUaCg3LDI3LG4uaW1hZ2VVcmwkKSkoInN0ZXBJbmRleCIsVGgoOCwyOSxuLnN0ZXBJbmRleCQpKSgic3RlcFZhbHVlcyIsVGgoOSwzMSxuLnN0ZXBWYWx1ZXMkKSkoImJyaWdodG5lc3NJbk1pbGxpIixUaCgxMCwzMyxuLmJyaWdodG5lc3NJbk1pbGxpJCkpKCJjb250cmFzdEluTWlsbGkiLFRoKDExLDM1LG4uY29udHJhc3RJbk1pbGxpJCkpKCJydW5Db2xvclNjYWxlIixuLnJ1bkNvbG9yU2NhbGUpKCJzaG93QWN0dWFsU2l6ZSIsbi5zaG93QWN0dWFsU2l6ZSkoImFsbG93VG9nZ2xlQWN0dWFsU2l6ZSIsITE9PT1UaCgxMiwzNyxuLmFjdHVhbFNpemVHbG9iYWxTZXR0aW5nJCkpKCJpc1Bpbm5lZCIsVGgoMTMsMzksbi5pc1Bpbm5lZCQpKX0sZGlyZWN0aXZlczpbWjJdLHBpcGVzOlt3TV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChYMixbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJpbWFnZS1jYXJkIix0ZW1wbGF0ZTonXG4gICAgPGltYWdlLWNhcmQtY29tcG9uZW50XG4gICAgICBbbG9hZFN0YXRlXT0ibG9hZFN0YXRlJCB8IGFzeW5jIlxuICAgICAgW3RpdGxlXT0idGl0bGUkIHwgYXN5bmMiXG4gICAgICBbdGFnXT0idGFnJCB8IGFzeW5jIlxuICAgICAgW3J1bklkXT0icnVuSWQkIHwgYXN5bmMiXG4gICAgICBbc2FtcGxlXT0ic2FtcGxlJCB8IGFzeW5jIlxuICAgICAgW251bVNhbXBsZV09Im51bVNhbXBsZSQgfCBhc3luYyJcbiAgICAgIFtpbWFnZVVybF09ImltYWdlVXJsJCB8IGFzeW5jIlxuICAgICAgW3N0ZXBJbmRleF09InN0ZXBJbmRleCQgfCBhc3luYyJcbiAgICAgIFtzdGVwVmFsdWVzXT0ic3RlcFZhbHVlcyQgfCBhc3luYyJcbiAgICAgIChzdGVwSW5kZXhDaGFuZ2UpPSJvblN0ZXBJbmRleENoYW5nZWQoJGV2ZW50KSJcbiAgICAgIFticmlnaHRuZXNzSW5NaWxsaV09ImJyaWdodG5lc3NJbk1pbGxpJCB8IGFzeW5jIlxuICAgICAgW2NvbnRyYXN0SW5NaWxsaV09ImNvbnRyYXN0SW5NaWxsaSQgfCBhc3luYyJcbiAgICAgIFtydW5Db2xvclNjYWxlXT0icnVuQ29sb3JTY2FsZSJcbiAgICAgIFtzaG93QWN0dWFsU2l6ZV09InNob3dBY3R1YWxTaXplIlxuICAgICAgW2FsbG93VG9nZ2xlQWN0dWFsU2l6ZV09IihhY3R1YWxTaXplR2xvYmFsU2V0dGluZyQgfCBhc3luYykgPT09IGZhbHNlIlxuICAgICAgW2lzUGlubmVkXT0iaXNQaW5uZWQkIHwgYXN5bmMiXG4gICAgICAob25BY3R1YWxTaXplVG9nZ2xlKT0ib25BY3R1YWxTaXplVG9nZ2xlKCkiXG4gICAgICAob25QaW5DbGlja2VkKT0icGluU3RhdGVDaGFuZ2VkLmVtaXQoJGV2ZW50KSJcbiAgICA+PC9pbWFnZS1jYXJkLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9LHt0eXBlOlBBfV19KSx7Y2FyZElkOlt7dHlwZTp4eX1dLGdyb3VwTmFtZTpbe3R5cGU6eHl9XSxydW5Db2xvclNjYWxlOlt7dHlwZTp4eX1dLGZ1bGxXaWR0aENoYW5nZWQ6W3t0eXBlOk95fV0scGluU3RhdGVDaGFuZ2VkOlt7dHlwZTpPeX1dfSksKGZ1bmN0aW9uKHQpe3RbdC5TVkc9MF09IlNWRyIsdFt0LldFQkdMPTFdPSJXRUJHTCJ9KShLMnx8KEsyPXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5MSU5FQVI9MF09IkxJTkVBUiIsdFt0LkxPRzEwPTFdPSJMT0cxMCIsdFt0LlRJTUU9Ml09IlRJTUUifSkoSjJ8fChKMj17fSkpO2NsYXNzIHM1e2NvbnN0cnVjdG9yKCl7dGhpcy5ydW5TZWxlY3RlZD1uZXcgTGgsdGhpcy5QbHVnaW5UeXBlPWhBfWdldERvd25sb2FkTmFtZSh0KXtjb25zdCBlPXRoaXMucnVucy5maW5kKCh0PT50LmlkPT09dGhpcy5zZWxlY3RlZFJ1bklkKSk7cmV0dXJuIGU/YCR7ZS5uYW1lfS4ke3R9YDoiIn19czUuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHM1KX0sczUuybVjbXA9dG8oe3R5cGU6czUsc2VsZWN0b3JzOltbImRhdGFfZG93bmxvYWRfZGlhbG9nX2NvbXBvbmVudCJdXSxpbnB1dHM6e2NhcmRNZXRhZGF0YToiY2FyZE1ldGFkYXRhIixydW5zOiJydW5zIixzZWxlY3RlZFJ1bklkOiJzZWxlY3RlZFJ1bklkIixkb3dubG9hZFVybENzdjoiZG93bmxvYWRVcmxDc3YiLGRvd25sb2FkVXJsSnNvbjoiZG93bmxvYWRVcmxKc29uIn0sb3V0cHV0czp7cnVuU2VsZWN0ZWQ6InJ1blNlbGVjdGVkIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0NhcmRNZXRhZGF0YSIsIiJdLFsiZGF0YU5hbWUiLCIiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJ0YWctbmFtZSIsMywidGl0bGUiXSxbImFwcGVhcmFuY2UiLCJmaWxsIiwxLCJydW4tc2VsZWN0b3IiXSxbIm1hdE5hdGl2ZUNvbnRyb2wiLCIiLCJuYW1lIiwicnVuIiwiY2RrRm9jdXNJbml0aWFsIiwiIiwicmVxdWlyZWQiLCIiLDMsInZhbHVlIiwiY2hhbmdlIl0sWyJzZWxlY3RlZCIsIiIsMywidmFsdWUiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJkb3dubG9hZC1jb250cm9scyJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwzLCJkaXNhYmxlZCIsImRvd25sb2FkIl0sWyJhbGlnbiIsImVuZCJdLFsibWF0LWJ1dHRvbiIsIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzQsIk5nU3dpdGNoRGVmYXVsdCJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoUXAoMCxhNSwzMCwxMiwibmctY29udGFpbmVyIiwwKSxRcCgxLHI1LDEsMCwibmctdGVtcGxhdGUiLG51bGwsMSxpYikpLDImZSl7Y29uc3QgdD0kcCgyKTtEbSgibmdJZiIsbi5jYXJkTWV0YWRhdGEpKCJuZ0lmRWxzZSIsdCl9fSxkaXJlY3RpdmVzOltkTSxNTSxzVyxBVix2VixMWSxJVSxCVSxsTSxLSCxsVyxYSCxhVyxmTSxnTV0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9aDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxLjI1ZW07b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS5ydW4tc2VsZWN0b3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOWVtO3dpZHRoOjEwMCV9LmRvd25sb2FkLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6LjllbX0uZG93bmxvYWQtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjNweCAxMHB4IDNweCAwfSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChzNSxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJkYXRhX2Rvd25sb2FkX2RpYWxvZ19jb21wb25lbnQiLHRlbXBsYXRlVXJsOiJkYXRhX2Rvd25sb2FkX2RpYWxvZ19jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiZGF0YV9kb3dubG9hZF9kaWFsb2dfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwse2NhcmRNZXRhZGF0YTpbe3R5cGU6eHl9XSxydW5zOlt7dHlwZTp4eX1dLHNlbGVjdGVkUnVuSWQ6W3t0eXBlOnh5fV0sZG93bmxvYWRVcmxDc3Y6W3t0eXBlOnh5fV0sZG93bmxvYWRVcmxKc29uOlt7dHlwZTp4eX1dLHJ1blNlbGVjdGVkOlt7dHlwZTpPeX1dfSk7Y2xhc3MgbDV7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuc2VsZWN0ZWRSdW5JZCQ9bmV3IEYobnVsbCksdGhpcy5jYXJkTWV0YWRhdGEkPXQuc2VsZWN0KHlULG4uY2FyZElkKS5waXBlKGNlKCh0PT5Cb29sZWFuKHQpKSkpLHRoaXMuZG93bmxvYWRVcmxDc3YkPVd0KFt0LnNlbGVjdCh5VCxuLmNhcmRJZCksdGhpcy5zZWxlY3RlZFJ1bklkJF0pLnBpcGUoSXQoKChbdCxuXSk9PnQmJm4/ZS5kb3dubG9hZFVybCh0LnBsdWdpbix0LnRhZyxuLCJjc3YiKTpudWxsKSksTmUobnVsbCkpLHRoaXMuZG93bmxvYWRVcmxKc29uJD1XdChbdC5zZWxlY3QoeVQsbi5jYXJkSWQpLHRoaXMuc2VsZWN0ZWRSdW5JZCRdKS5waXBlKEl0KCgoW3Qsbl0pPT50JiZuP2UuZG93bmxvYWRVcmwodC5wbHVnaW4sdC50YWcsbiwianNvbiIpOm51bGwpKSxOZShudWxsKSksdGhpcy5ydW5zJD1XdChbdC5zZWxlY3QoZE4pLHQuc2VsZWN0KGhULG4uY2FyZElkKV0pLnBpcGUoSXQoKChbdCxlXSk9PmU/T2JqZWN0LmtleXMoZSkubWFwKChlPT50LmdldChlKSkpLmZpbHRlcihCb29sZWFuKTpbXSkpKX19ZnVuY3Rpb24gYzUodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gZDUodCl7cmV0dXJuIDE9PT10Lmxlbmd0aCYmKHQ9KGZ1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIGM1KHQoZSksbil9fSkodCkpLHtsZWZ0OmZ1bmN0aW9uKGUsbixvLGkpe2ZvcihudWxsPT1vJiYobz0wKSxudWxsPT1pJiYoaT1lLmxlbmd0aCk7bzxpOyl7dmFyIGE9bytpPj4+MTt0KGVbYV0sbik8MD9vPWErMTppPWF9cmV0dXJuIG99LHJpZ2h0OmZ1bmN0aW9uKGUsbixvLGkpe2ZvcihudWxsPT1vJiYobz0wKSxudWxsPT1pJiYoaT1lLmxlbmd0aCk7bzxpOyl7dmFyIGE9bytpPj4+MTt0KGVbYV0sbik+MD9pPWE6bz1hKzF9cmV0dXJuIG99fX1sNS7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bDUpKFNtKEl3KSxTbShQQSksU20oSkcpKX0sbDUuybVjbXA9dG8oe3R5cGU6bDUsc2VsZWN0b3JzOltbImRhdGFfZG93bmxvYWRfZGlhbG9nIl1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJjYXJkTWV0YWRhdGEiLCJydW5zIiwic2VsZWN0ZWRSdW5JZCIsImRvd25sb2FkVXJsQ3N2IiwiZG93bmxvYWRVcmxKc29uIiwicnVuU2VsZWN0ZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsImRhdGFfZG93bmxvYWRfZGlhbG9nX2NvbXBvbmVudCIsMCksVm0oInJ1blNlbGVjdGVkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5zZWxlY3RlZFJ1bklkJC5uZXh0KGUpfSkpLEFoKDEsImFzeW5jIiksQWgoMiwiYXN5bmMiKSxBaCgzLCJhc3luYyIpLEFoKDQsImFzeW5jIiksQWgoNSwiYXN5bmMiKSxBbSgpKSwyJmUmJkRtKCJjYXJkTWV0YWRhdGEiLFRoKDEsNSxuLmNhcmRNZXRhZGF0YSQpKSgicnVucyIsVGgoMiw3LG4ucnVucyQpKSgic2VsZWN0ZWRSdW5JZCIsVGgoMyw5LG4uc2VsZWN0ZWRSdW5JZCQpKSgiZG93bmxvYWRVcmxDc3YiLFRoKDQsMTEsbi5kb3dubG9hZFVybENzdiQpKSgiZG93bmxvYWRVcmxKc29uIixUaCg1LDEzLG4uZG93bmxvYWRVcmxKc29uJCkpfSxkaXJlY3RpdmVzOltzNV0scGlwZXM6W3dNXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGw1LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6ImRhdGFfZG93bmxvYWRfZGlhbG9nIix0ZW1wbGF0ZTonPGRhdGFfZG93bmxvYWRfZGlhbG9nX2NvbXBvbmVudFxuICAgIFtjYXJkTWV0YWRhdGFdPSJjYXJkTWV0YWRhdGEkIHwgYXN5bmMiXG4gICAgW3J1bnNdPSJydW5zJCB8IGFzeW5jIlxuICAgIFtzZWxlY3RlZFJ1bklkXT0ic2VsZWN0ZWRSdW5JZCQgfCBhc3luYyJcbiAgICBbZG93bmxvYWRVcmxDc3ZdPSJkb3dubG9hZFVybENzdiQgfCBhc3luYyJcbiAgICBbZG93bmxvYWRVcmxKc29uXT0iZG93bmxvYWRVcmxKc29uJCB8IGFzeW5jIlxuICAgIChydW5TZWxlY3RlZCk9InNlbGVjdGVkUnVuSWQkLm5leHQoJGV2ZW50KSJcbiAgPjwvZGF0YV9kb3dubG9hZF9kaWFsb2dfY29tcG9uZW50PicsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fSx7dHlwZTpQQX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W0pHXX1dfV19KSxudWxsKSwoZnVuY3Rpb24odCl7dFt0Lk9SSUdJTkFMPTBdPSJPUklHSU5BTCIsdFt0LkRFUklWRUQ9MV09IkRFUklWRUQifSkoUTJ8fChRMj17fSkpO3ZhciBwNT1kNShjNSkucmlnaHQ7ZnVuY3Rpb24gbTUodCxlKXt2YXIgbixvLGksYT10Lmxlbmd0aCxyPS0xO2lmKG51bGw9PWUpe2Zvcig7KytyPGE7KWlmKG51bGwhPShuPXRbcl0pJiZuPj1uKWZvcihvPWk9bjsrK3I8YTspbnVsbCE9KG49dFtyXSkmJihvPm4mJihvPW4pLGk8biYmKGk9bikpfWVsc2UgZm9yKDsrK3I8YTspaWYobnVsbCE9KG49ZSh0W3JdLHIsdCkpJiZuPj1uKWZvcihvPWk9bjsrK3I8YTspbnVsbCE9KG49ZSh0W3JdLHIsdCkpJiYobz5uJiYobz1uKSxpPG4mJihpPW4pKTtyZXR1cm5bbyxpXX12YXIgdTU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIGY1KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBnNSh0KXtyZXR1cm4gdH1mdW5jdGlvbiBoNSh0LGUsbil7dD0rdCxlPStlLG49KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8oZT10LHQ9MCwxKTppPDM/MTorbjtmb3IodmFyIG89LTEsaT0wfE1hdGgubWF4KDAsTWF0aC5jZWlsKChlLXQpL24pKSxhPW5ldyBBcnJheShpKTsrK288aTspYVtvXT10K28qbjtyZXR1cm4gYX12YXIgYjU9TWF0aC5zcXJ0KDUwKSx5NT1NYXRoLnNxcnQoMTApLF81PU1hdGguc3FydCgyKTtmdW5jdGlvbiBDNSh0LGUsbil7dmFyIG8saSxhLHIscz0tMTtpZihuPStuLCh0PSt0KT09KGU9K2UpJiZuPjApcmV0dXJuW3RdO2lmKChvPWU8dCkmJihpPXQsdD1lLGU9aSksMD09PShyPU01KHQsZSxuKSl8fCFpc0Zpbml0ZShyKSlyZXR1cm5bXTtpZihyPjApZm9yKHQ9TWF0aC5jZWlsKHQvciksZT1NYXRoLmZsb29yKGUvciksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwoZS10KzEpKTsrK3M8aTspYVtzXT0odCtzKSpyO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0KnIpLGU9TWF0aC5jZWlsKGUqciksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwodC1lKzEpKTsrK3M8aTspYVtzXT0odC1zKS9yO3JldHVybiBvJiZhLnJldmVyc2UoKSxhfWZ1bmN0aW9uIE01KHQsZSxuKXt2YXIgbz0oZS10KS9NYXRoLm1heCgwLG4pLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhvKS9NYXRoLkxOMTApLGE9by9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8oYT49YjU/MTA6YT49eTU/NTphPj1fNT8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKGE+PWI1PzEwOmE+PXk1PzU6YT49XzU/MjoxKX1mdW5jdGlvbiB2NSh0LGUsbil7dmFyIG89TWF0aC5hYnMoZS10KS9NYXRoLm1heCgwLG4pLGk9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhvKS9NYXRoLkxOMTApKSxhPW8vaTtyZXR1cm4gYT49YjU/aSo9MTA6YT49eTU/aSo9NTphPj1fNSYmKGkqPTIpLGU8dD8taTppfWZ1bmN0aW9uIHg1KHQpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKSsxfWZ1bmN0aW9uIE81KCl7dmFyIHQ9ZzUsZT1tNSxuPXg1O2Z1bmN0aW9uIG8obyl7dmFyIGksYSxyPW8ubGVuZ3RoLHM9bmV3IEFycmF5KHIpO2ZvcihpPTA7aTxyOysraSlzW2ldPXQob1tpXSxpLG8pO3ZhciBsPWUocyksYz1sWzBdLGQ9bFsxXSxwPW4ocyxjLGQpO0FycmF5LmlzQXJyYXkocCl8fChwPXY1KGMsZCxwKSxwPWg1KE1hdGguY2VpbChjL3ApKnAsZCxwKSk7Zm9yKHZhciBtPXAubGVuZ3RoO3BbMF08PWM7KXAuc2hpZnQoKSwtLW07Zm9yKDtwW20tMV0+ZDspcC5wb3AoKSwtLW07dmFyIHUsZj1uZXcgQXJyYXkobSsxKTtmb3IoaT0wO2k8PW07KytpKSh1PWZbaV09W10pLngwPWk+MD9wW2ktMV06Yyx1LngxPWk8bT9wW2ldOmQ7Zm9yKGk9MDtpPHI7KytpKWM8PShhPXNbaV0pJiZhPD1kJiZmW3A1KHAsYSwwLG0pXS5wdXNoKG9baV0pO3JldHVybiBmfXJldHVybiBvLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZjUoZSksbyk6dH0sby5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmNShbdFswXSx0WzFdXSksbyk6ZX0sby50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9mNSh1NS5jYWxsKHQpKTpmNSh0KSxvKTpufSxvfXZhciBQNT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gdzUodCl7cmV0dXJuIHR9dmFyIGs1PTFlLTY7ZnVuY3Rpb24gUzUodCl7cmV0dXJuInRyYW5zbGF0ZSgiKyh0Ky41KSsiLDApIn1mdW5jdGlvbiBENSh0KXtyZXR1cm4idHJhbnNsYXRlKDAsIisodCsuNSkrIikifWZ1bmN0aW9uIEU1KHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4rdChlKX19ZnVuY3Rpb24gUjUodCl7dmFyIGU9TWF0aC5tYXgoMCx0LmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIHQucm91bmQoKSYmKGU9TWF0aC5yb3VuZChlKSksZnVuY3Rpb24obil7cmV0dXJuK3QobikrZX19ZnVuY3Rpb24gQTUoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gVDUodCxlKXt2YXIgbj1bXSxvPW51bGwsaT1udWxsLGE9NixyPTYscz0zLGw9MT09PXR8fDQ9PT10Py0xOjEsYz00PT09dHx8Mj09PXQ/IngiOiJ5IixkPTE9PT10fHwzPT09dD9TNTpENTtmdW5jdGlvbiBwKHApe3ZhciBtPW51bGw9PW8/ZS50aWNrcz9lLnRpY2tzLmFwcGx5KGUsbik6ZS5kb21haW4oKTpvLHU9bnVsbD09aT9lLnRpY2tGb3JtYXQ/ZS50aWNrRm9ybWF0LmFwcGx5KGUsbik6dzU6aSxmPU1hdGgubWF4KGEsMCkrcyxnPWUucmFuZ2UoKSxoPStnWzBdKy41LGI9K2dbZy5sZW5ndGgtMV0rLjUseT0oZS5iYW5kd2lkdGg/UjU6RTUpKGUuY29weSgpKSxfPXAuc2VsZWN0aW9uP3Auc2VsZWN0aW9uKCk6cCxDPV8uc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLE09Xy5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShtLGUpLm9yZGVyKCksdj1NLmV4aXQoKSx4PU0uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxPPU0uc2VsZWN0KCJsaW5lIiksUD1NLnNlbGVjdCgidGV4dCIpO0M9Qy5tZXJnZShDLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpKSxNPU0ubWVyZ2UoeCksTz1PLm1lcmdlKHguYXBwZW5kKCJsaW5lIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikuYXR0cihjKyIyIixsKmEpKSxQPVAubWVyZ2UoeC5hcHBlbmQoInRleHQiKS5hdHRyKCJmaWxsIiwiY3VycmVudENvbG9yIikuYXR0cihjLGwqZikuYXR0cigiZHkiLDE9PT10PyIwZW0iOjM9PT10PyIwLjcxZW0iOiIwLjMyZW0iKSkscCE9PV8mJihDPUMudHJhbnNpdGlvbihwKSxNPU0udHJhbnNpdGlvbihwKSxPPU8udHJhbnNpdGlvbihwKSxQPVAudHJhbnNpdGlvbihwKSx2PXYudHJhbnNpdGlvbihwKS5hdHRyKCJvcGFjaXR5IixrNSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9eSh0KSk/ZCh0KTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSkseC5hdHRyKCJvcGFjaXR5IixrNSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gZChlJiZpc0Zpbml0ZShlPWUodCkpP2U6eSh0KSl9KSkpLHYucmVtb3ZlKCksQy5hdHRyKCJkIiw0PT09dHx8Mj09dD9yPyJNIitsKnIrIiwiK2grIkgwLjVWIitiKyJIIitsKnI6Ik0wLjUsIitoKyJWIitiOnI/Ik0iK2grIiwiK2wqcisiVjAuNUgiK2IrIlYiK2wqcjoiTSIraCsiLDAuNUgiK2IpLE0uYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGQoeSh0KSl9KSksTy5hdHRyKGMrIjIiLGwqYSksUC5hdHRyKGMsbCpmKS50ZXh0KHUpLF8uZmlsdGVyKEE1KS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIiwyPT09dD8ic3RhcnQiOjQ9PT10PyJlbmQiOiJtaWRkbGUiKSxfLmVhY2goKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9eX0pKX1yZXR1cm4gcC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHApOmV9LHAudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gbj1QNS5jYWxsKGFyZ3VtZW50cykscH0scC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/W106UDUuY2FsbCh0KSxwKTpuLnNsaWNlKCl9LHAudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1udWxsPT10P251bGw6UDUuY2FsbCh0KSxwKTpvJiZvLnNsaWNlKCl9LHAudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHApOml9LHAudGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9cj0rdCxwKTphfSxwLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QscCk6YX0scC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LHApOnJ9LHAudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QscCk6c30scH1mdW5jdGlvbiBONSh0KXtyZXR1cm4gVDUoMix0KX1mdW5jdGlvbiB6NSh0KXtyZXR1cm4gVDUoMyx0KX12YXIgSTU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gSDUoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxvPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIG98fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtvW3RdPVtdfXJldHVybiBuZXcgRjUobyl9ZnVuY3Rpb24gRjUodCl7dGhpcy5fPXR9ZnVuY3Rpb24gTDUodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixvPXQuaW5kZXhPZigiLiIpO2lmKG8+PTAmJihuPXQuc2xpY2UobysxKSx0PXQuc2xpY2UoMCxvKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIEI1KHQsZSl7Zm9yKHZhciBuLG89MCxpPXQubGVuZ3RoO288aTsrK28paWYoKG49dFtvXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gVjUodCxlLG4pe2Zvcih2YXIgbz0wLGk9dC5sZW5ndGg7bzxpOysrbylpZih0W29dLm5hbWU9PT1lKXt0W29dPUk1LHQ9dC5zbGljZSgwLG8pLmNvbmNhdCh0LnNsaWNlKG8rMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1GNS5wcm90b3R5cGU9SDUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGNSxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLG89dGhpcy5fLGk9TDUodCsiIixvKSxhPS0xLHI9aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8cjspaWYobj0odD1pW2FdKS50eXBlKW9bbl09VjUob1tuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIG8pb1tuXT1WNShvW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrYTxyOylpZigobj0odD1pW2FdKS50eXBlKSYmKG49QjUob1tuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgRjUodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLG8saT1uZXcgQXJyYXkobiksYT0wO2E8bjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPTAsbj0obz10aGlzLl9bdF0pLmxlbmd0aDthPG47KythKW9bYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciBvPXRoaXMuX1t0XSxpPTAsYT1vLmxlbmd0aDtpPGE7KytpKW9baV0udmFsdWUuYXBwbHkoZSxuKX19O3ZhciBqNT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsVTU9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOmo1LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gRzUodCl7dmFyIGU9dCs9IiIsbj1lLmluZGV4T2YoIjoiKTtyZXR1cm4gbj49MCYmInhtbG5zIiE9PShlPXQuc2xpY2UoMCxuKSkmJih0PXQuc2xpY2UobisxKSksVTUuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOlU1W2VdLGxvY2FsOnR9OnR9ZnVuY3Rpb24gVzUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1qNSYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09ajU/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIFk1KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIHE1KHQpe3ZhciBlPUc1KHQpO3JldHVybihlLmxvY2FsP1k1Olc1KShlKX1mdW5jdGlvbiBaNSgpe31mdW5jdGlvbiBYNSh0KXtyZXR1cm4gbnVsbD09dD9aNTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fWZ1bmN0aW9uIEs1KCl7cmV0dXJuW119ZnVuY3Rpb24gSjUodCl7cmV0dXJuIG51bGw9PXQ/SzU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX1mdW5jdGlvbiBRNSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX1mdW5jdGlvbiAkNSh0KXtyZXR1cm4gbmV3IEFycmF5KHQubGVuZ3RoKX1mdW5jdGlvbiB0NCh0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX1mdW5jdGlvbiBlNCh0LGUsbixvLGksYSl7Zm9yKHZhciByLHM9MCxsPWUubGVuZ3RoLGM9YS5sZW5ndGg7czxjOysrcykocj1lW3NdKT8oci5fX2RhdGFfXz1hW3NdLG9bc109cik6bltzXT1uZXcgdDQodCxhW3NdKTtmb3IoO3M8bDsrK3MpKHI9ZVtzXSkmJihpW3NdPXIpfWZ1bmN0aW9uIG40KHQsZSxuLG8saSxhLHIpe3ZhciBzLGwsYyxkPXt9LHA9ZS5sZW5ndGgsbT1hLmxlbmd0aCx1PW5ldyBBcnJheShwKTtmb3Iocz0wO3M8cDsrK3MpKGw9ZVtzXSkmJih1W3NdPWM9IiQiK3IuY2FsbChsLGwuX19kYXRhX18scyxlKSxjIGluIGQ/aVtzXT1sOmRbY109bCk7Zm9yKHM9MDtzPG07KytzKShsPWRbYz0iJCIrci5jYWxsKHQsYVtzXSxzLGEpXSk/KG9bc109bCxsLl9fZGF0YV9fPWFbc10sZFtjXT1udWxsKTpuW3NdPW5ldyB0NCh0LGFbc10pO2ZvcihzPTA7czxwOysrcykobD1lW3NdKSYmZFt1W3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIG80KHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIGk0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBhNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIHI0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24gczQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gbDQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fWZ1bmN0aW9uIGM0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbil9fWZ1bmN0aW9uIGQ0KHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld31mdW5jdGlvbiBwNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBtNCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fWZ1bmN0aW9uIHU0KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1vP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG8sbil9fWZ1bmN0aW9uIGY0KHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8ZDQodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gZzQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIGg0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBiNCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX1mdW5jdGlvbiB5NCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gXzQodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgQzQodCl9ZnVuY3Rpb24gQzQodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPXk0KHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gTTQodCxlKXtmb3IodmFyIG49XzQodCksbz0tMSxpPWUubGVuZ3RoOysrbzxpOyluLmFkZChlW29dKX1mdW5jdGlvbiB2NCh0LGUpe2Zvcih2YXIgbj1fNCh0KSxvPS0xLGk9ZS5sZW5ndGg7KytvPGk7KW4ucmVtb3ZlKGVbb10pfWZ1bmN0aW9uIHg0KHQpe3JldHVybiBmdW5jdGlvbigpe000KHRoaXMsdCl9fWZ1bmN0aW9uIE80KHQpe3JldHVybiBmdW5jdGlvbigpe3Y0KHRoaXMsdCl9fWZ1bmN0aW9uIFA0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP000OnY0KSh0aGlzLHQpfX1mdW5jdGlvbiB3NCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gazQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBTNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gRDQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBFNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBSNCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIEE0KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIFQ0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gTjQoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiB6NCgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIEk0KCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITEpLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBINCgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCEwKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9dDQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0NCxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxDNC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciBGND17fSxMND1udWxsO2Z1bmN0aW9uIEI0KHQsZSxuKXtyZXR1cm4gdD1WNCh0LGUsbiksZnVuY3Rpb24oZSl7dmFyIG49ZS5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIFY0KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIGk9TDQ7TDQ9bzt0cnl7dC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLG4pfWZpbmFsbHl7TDQ9aX19fWZ1bmN0aW9uIGo0KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSkpfWZ1bmN0aW9uIFU0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4sbz0wLGk9LTEsYT1lLmxlbmd0aDtvPGE7KytvKW49ZVtvXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytpXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLmNhcHR1cmUpOysraT9lLmxlbmd0aD1pOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBHNCh0LGUsbil7dmFyIG89RjQuaGFzT3duUHJvcGVydHkodC50eXBlKT9CNDpWNDtyZXR1cm4gZnVuY3Rpb24oaSxhLHIpe3ZhciBzLGw9dGhpcy5fX29uLGM9byhlLGEscik7aWYobClmb3IodmFyIGQ9MCxwPWwubGVuZ3RoO2Q8cDsrK2QpaWYoKHM9bFtkXSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9YyxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsYyxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOmMsY2FwdHVyZTpufSxsP2wucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiBXNCh0LGUsbil7dmFyIG89ZDQodCksaT1vLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBpP2k9bmV3IGkoZSxuKTooaT1vLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KGkuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksaS5kZXRhaWw9bi5kZXRhaWwpOmkuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gWTQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gVzQodGhpcyx0LGUpfX1mdW5jdGlvbiBxNCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBXNCh0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fChGND17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIFo0PVtudWxsXTtmdW5jdGlvbiBYNCh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiBLNCgpe3JldHVybiBuZXcgWDQoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxaNCl9ZnVuY3Rpb24gSjQodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBYNChbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IFg0KFtbdF1dLFo0KX1mdW5jdGlvbiBRNCgpe2Zvcih2YXIgdCxlPUw0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uICQ0KHQsZSl7dmFyIG49dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYobi5jcmVhdGVTVkdQb2ludCl7dmFyIG89bi5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBvLng9ZS5jbGllbnRYLG8ueT1lLmNsaWVudFksWyhvPW8ubWF0cml4VHJhbnNmb3JtKHQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxvLnldfXZhciBpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2UuY2xpZW50WC1pLmxlZnQtdC5jbGllbnRMZWZ0LGUuY2xpZW50WS1pLnRvcC10LmNsaWVudFRvcF19ZnVuY3Rpb24gdDYodCl7dmFyIGU9UTQoKTtyZXR1cm4gZS5jaGFuZ2VkVG91Y2hlcyYmKGU9ZS5jaGFuZ2VkVG91Y2hlc1swXSksJDQodCxlKX1mdW5jdGlvbiBlNigpe0w0LnByZXZlbnREZWZhdWx0KCksTDQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gbjYodCl7dmFyIGU9dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1KNCh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLGU2LCEwKTsib25zZWxlY3RzdGFydCJpbiBlP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLGU2LCEwKTooZS5fX25vc2VsZWN0PWUuc3R5bGUuTW96VXNlclNlbGVjdCxlLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiBvNih0LGUpe3ZhciBuPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG89SjQodCkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtlJiYoby5vbigiY2xpY2suZHJhZyIsZTYsITApLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7by5vbigiY2xpY2suZHJhZyIsbnVsbCl9KSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gbj9vLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKToobi5zdHlsZS5Nb3pVc2VyU2VsZWN0PW4uX19ub3NlbGVjdCxkZWxldGUgbi5fX25vc2VsZWN0KX1mdW5jdGlvbiBpNih0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gYTYodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIG8gaW4gZSluW29dPWVbb107cmV0dXJuIG59ZnVuY3Rpb24gcjYoKXt9WDQucHJvdG90eXBlPUs0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6WDQsc2VsZWN0OmZ1bmN0aW9uIHM2KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1YNSh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLG89bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxyLHM9ZVtpXSxsPXMubGVuZ3RoLGM9b1tpXT1uZXcgQXJyYXkobCksZD0wO2Q8bDsrK2QpKGE9c1tkXSkmJihyPXQuY2FsbChhLGEuX19kYXRhX18sZCxzKSkmJigiX19kYXRhX18iaW4gYSYmKHIuX19kYXRhX189YS5fX2RhdGFfXyksY1tkXT1yKTtyZXR1cm4gbmV3IFg0KG8sdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbiBsNih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9SjUodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxvPVtdLGk9W10sYT0wO2E8bjsrK2EpZm9yKHZhciByLHM9ZVthXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKShyPXNbY10pJiYoby5wdXNoKHQuY2FsbChyLHIuX19kYXRhX18sYyxzKSksaS5wdXNoKHIpKTtyZXR1cm4gbmV3IFg0KG8saSl9LGZpbHRlcjpmdW5jdGlvbiBjNih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9UTUodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxvPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEscj1lW2ldLHM9ci5sZW5ndGgsbD1vW2ldPVtdLGM9MDtjPHM7KytjKShhPXJbY10pJiZ0LmNhbGwoYSxhLl9fZGF0YV9fLGMscikmJmwucHVzaChhKTtyZXR1cm4gbmV3IFg0KG8sdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24gZDYodCxlKXtpZighdClyZXR1cm4gZj1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGQ9LTEsdGhpcy5lYWNoKChmdW5jdGlvbih0KXtmWysrZF09dH0pKSxmO3ZhciBuPWU/bjQ6ZTQsbz10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD0oZnVuY3Rpb24gYSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KSh0KSk7Zm9yKHZhciByPWkubGVuZ3RoLHM9bmV3IEFycmF5KHIpLGw9bmV3IEFycmF5KHIpLGM9bmV3IEFycmF5KHIpLGQ9MDtkPHI7KytkKXt2YXIgcD1vW2RdLG09aVtkXSx1PW0ubGVuZ3RoLGY9dC5jYWxsKHAscCYmcC5fX2RhdGFfXyxkLG8pLGc9Zi5sZW5ndGgsaD1sW2RdPW5ldyBBcnJheShnKSxiPXNbZF09bmV3IEFycmF5KGcpO24ocCxtLGgsYixjW2RdPW5ldyBBcnJheSh1KSxmLGUpO2Zvcih2YXIgeSxfLEM9MCxNPTA7QzxnOysrQylpZih5PWhbQ10pe2ZvcihDPj1NJiYoTT1DKzEpOyEoXz1iW01dKSYmKytNPGc7KTt5Ll9uZXh0PV98fG51bGx9fXJldHVybihzPW5ldyBYNChzLG8pKS5fZW50ZXI9bCxzLl9leGl0PWMsc30sZW50ZXI6ZnVuY3Rpb24gcDYoKXtyZXR1cm4gbmV3IFg0KHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKCQ1KSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbiBtNigpe3JldHVybiBuZXcgWDQodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcCgkNSksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24gdTYodCxlLG4pe3ZhciBvPXRoaXMuZW50ZXIoKSxpPXRoaXMsYT10aGlzLmV4aXQoKTtyZXR1cm4gbz0iZnVuY3Rpb24iPT10eXBlb2YgdD90KG8pOm8uYXBwZW5kKHQrIiIpLG51bGwhPWUmJihpPWUoaSkpLG51bGw9PW4/YS5yZW1vdmUoKTpuKGEpLG8mJmk/by5tZXJnZShpKS5vcmRlcigpOml9LG1lcmdlOmZ1bmN0aW9uIGY2KHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMsbz1lLmxlbmd0aCxpPU1hdGgubWluKG8sbi5sZW5ndGgpLGE9bmV3IEFycmF5KG8pLHI9MDtyPGk7KytyKWZvcih2YXIgcyxsPWVbcl0sYz1uW3JdLGQ9bC5sZW5ndGgscD1hW3JdPW5ldyBBcnJheShkKSxtPTA7bTxkOysrbSkocz1sW21dfHxjW21dKSYmKHBbbV09cyk7Zm9yKDtyPG87KytyKWFbcl09ZVtyXTtyZXR1cm4gbmV3IFg0KGEsdGhpcy5fcGFyZW50cyl9LG9yZGVyOmZ1bmN0aW9uIGc2KCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLG49dC5sZW5ndGg7KytlPG47KWZvcih2YXIgbyxpPXRbZV0sYT1pLmxlbmd0aC0xLHI9aVthXTstLWE+PTA7KShvPWlbYV0pJiYociYmNF5vLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpJiZyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG8scikscj1vKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbiBoNih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIGUmJm4/dChlLl9fZGF0YV9fLG4uX19kYXRhX18pOiFlLSFufXR8fCh0PW80KTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLG89bi5sZW5ndGgsaT1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2Epe2Zvcih2YXIgcixzPW5bYV0sbD1zLmxlbmd0aCxjPWlbYV09bmV3IEFycmF5KGwpLGQ9MDtkPGw7KytkKShyPXNbZF0pJiYoY1tkXT1yKTtjLnNvcnQoZSl9cmV0dXJuIG5ldyBYNChpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24gYjYoKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uIHk2KCl7dmFyIHQ9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxlPS0xO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7dFsrK2VdPXRoaXN9KSksdH0sbm9kZTpmdW5jdGlvbiBfNigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIG89dFtlXSxpPTAsYT1vLmxlbmd0aDtpPGE7KytpKXt2YXIgcj1vW2ldO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24gQzYoKXt2YXIgdD0wO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7Kyt0fSkpLHR9LGVtcHR5OmZ1bmN0aW9uIE02KCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uIHY2KHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLG89ZS5sZW5ndGg7bjxvOysrbilmb3IodmFyIGksYT1lW25dLHI9MCxzPWEubGVuZ3RoO3I8czsrK3IpKGk9YVtyXSkmJnQuY2FsbChpLGkuX19kYXRhX18scixhKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbiB4Nih0LGUpe3ZhciBuPUc1KHQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIG89dGhpcy5ub2RlKCk7cmV0dXJuIG4ubG9jYWw/by5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOm8uZ2V0QXR0cmlidXRlKG4pfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/bi5sb2NhbD9hNDppNDoiZnVuY3Rpb24iPT10eXBlb2YgZT9uLmxvY2FsP2M0Omw0Om4ubG9jYWw/czQ6cjQpKG4sZSkpfSxzdHlsZTpmdW5jdGlvbiBPNih0LGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/cDQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dTQ6bTQpKHQsZSxudWxsPT1uPyIiOm4pKTpmNCh0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24gUDYodCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9nNDoiZnVuY3Rpb24iPT10eXBlb2YgZT9iNDpoNCkodCxlKSk6dGhpcy5ub2RlKClbdF19LGNsYXNzZWQ6ZnVuY3Rpb24gdzYodCxlKXt2YXIgbj15NCh0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbz1fNCh0aGlzLm5vZGUoKSksaT0tMSxhPW4ubGVuZ3RoOysraTxhOylpZighby5jb250YWlucyhuW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9QNDplP3g0Ok80KShuLGUpKX0sdGV4dDpmdW5jdGlvbiBrNih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD93NDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/UzQ6azQpKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbiBTNih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9ENDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/UjQ6RTQpKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uIEQ2KCl7cmV0dXJuIHRoaXMuZWFjaChBNCl9LGxvd2VyOmZ1bmN0aW9uIEU2KCl7cmV0dXJuIHRoaXMuZWFjaChUNCl9LGFwcGVuZDpmdW5jdGlvbiBSNih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnE1KHQpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSl9LGluc2VydDpmdW5jdGlvbiBBNih0LGUpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cTUodCksbz1udWxsPT1lP040OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6WDUoZSk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KSl9LHJlbW92ZTpmdW5jdGlvbiBUNigpe3JldHVybiB0aGlzLmVhY2goejQpfSxjbG9uZTpmdW5jdGlvbiBONih0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD9INDpJNCl9LGRhdHVtOmZ1bmN0aW9uIHo2KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24gSTYodCxlLG4pe3ZhciBvLGksYT1qNCh0KyIiKSxyPWEubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKHM9ZT9HNDpVNCxudWxsPT1uJiYobj0hMSksbz0wO288cjsrK28pdGhpcy5lYWNoKHMoYVtvXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciBsLGM9MCxkPXMubGVuZ3RoO2M8ZDsrK2MpZm9yKG89MCxsPXNbY107bzxyOysrbylpZigoaT1hW29dKS50eXBlPT09bC50eXBlJiZpLm5hbWU9PT1sLm5hbWUpcmV0dXJuIGwudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uIEg2KHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/cTQ6WTQpKHQsZSkpfX07dmFyIEY2PS43LEw2PTEvRjYsQjY9IlxccyooWystXT9cXGQrKVxccyoiLFY2PSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLGo2PSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixVNj0vXiMoWzAtOWEtZl17Myw4fSkkLyxHNj1uZXcgUmVnRXhwKCJecmdiXFwoIitbQjYsQjYsQjZdKyJcXCkkIiksVzY9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2o2LGo2LGo2XSsiXFwpJCIpLFk2PW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbQjYsQjYsQjYsVjZdKyJcXCkkIikscTY9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tqNixqNixqNixWNl0rIlxcKSQiKSxaNj1uZXcgUmVnRXhwKCJeaHNsXFwoIitbVjYsajYsajZdKyJcXCkkIiksWDY9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tWNixqNixqNixWNl0rIlxcKSQiKSxLNj17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBKNigpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIFE2KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gJDYodCl7dmFyIGUsbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9VTYuZXhlYyh0KSk/KG49ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09bj90NyhlKTozPT09bj9uZXcgaTcoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1uP2U3KGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP2U3KGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9RzYuZXhlYyh0KSk/bmV3IGk3KGVbMV0sZVsyXSxlWzNdLDEpOihlPVc2LmV4ZWModCkpP25ldyBpNygyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1ZNi5leGVjKHQpKT9lNyhlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1xNi5leGVjKHQpKT9lNygyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1aNi5leGVjKHQpKT9sNyhlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPVg2LmV4ZWModCkpP2w3KGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6SzYuaGFzT3duUHJvcGVydHkodCk/dDcoSzZbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBpNyhOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIHQ3KHQpe3JldHVybiBuZXcgaTcodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIGU3KHQsZSxuLG8pe3JldHVybiBvPD0wJiYodD1lPW49TmFOKSxuZXcgaTcodCxlLG4sbyl9ZnVuY3Rpb24gbjcodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiByNnx8KHQ9JDYodCkpLHQ/bmV3IGk3KCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBpN31mdW5jdGlvbiBvNyh0LGUsbixvKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/bjcodCk6bmV3IGk3KHQsZSxuLG51bGw9PW8/MTpvKX1mdW5jdGlvbiBpNyh0LGUsbixvKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K299ZnVuY3Rpb24gYTcoKXtyZXR1cm4iIyIrczcodGhpcy5yKStzNyh0aGlzLmcpK3M3KHRoaXMuYil9ZnVuY3Rpb24gcjcoKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiBzNyh0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIGw3KHQsZSxuLG8pe3JldHVybiBvPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgcDcodCxlLG4sbyl9ZnVuY3Rpb24gYzcodCl7aWYodCBpbnN0YW5jZW9mIHA3KXJldHVybiBuZXcgcDcodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgcjZ8fCh0PSQ2KHQpKSwhdClyZXR1cm4gbmV3IHA3O2lmKHQgaW5zdGFuY2VvZiBwNylyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUsbz10LmIvMjU1LGk9TWF0aC5taW4oZSxuLG8pLGE9TWF0aC5tYXgoZSxuLG8pLHI9TmFOLHM9YS1pLGw9KGEraSkvMjtyZXR1cm4gcz8ocj1lPT09YT8obi1vKS9zKzYqKG48byk6bj09PWE/KG8tZSkvcysyOihlLW4pL3MrNCxzLz1sPC41P2EraToyLWEtaSxyKj02MCk6cz1sPjAmJmw8MT8wOnIsbmV3IHA3KHIscyxsLHQub3BhY2l0eSl9ZnVuY3Rpb24gZDcodCxlLG4sbyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2M3KHQpOm5ldyBwNyh0LGUsbixudWxsPT1vPzE6byl9ZnVuY3Rpb24gcDcodCxlLG4sbyl7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStvfWZ1bmN0aW9uIG03KHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1pNihyNiwkNix7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpKNixmb3JtYXRIZXg6SjYsZm9ybWF0SHNsOmZ1bmN0aW9uIHU3KCl7cmV0dXJuIGM3KHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6UTYsdG9TdHJpbmc6UTZ9KSxpNihpNyxvNyxhNihyNix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9MNjpNYXRoLnBvdyhMNix0KSxuZXcgaTcodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/RjY6TWF0aC5wb3coRjYsdCksbmV3IGk3KHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6YTcsZm9ybWF0SGV4OmE3LGZvcm1hdFJnYjpyNyx0b1N0cmluZzpyN30pKSxpNihwNyxkNyxhNihyNix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9MNjpNYXRoLnBvdyhMNix0KSxuZXcgcDcodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9GNjpNYXRoLnBvdyhGNix0KSxuZXcgcDcodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwsbz1uKyhuPC41P246MS1uKSplLGk9MipuLW87cmV0dXJuIG5ldyBpNyhtNyh0Pj0yNDA/dC0yNDA6dCsxMjAsaSxvKSxtNyh0LGksbyksbTcodDwxMjA/dCsyNDA6dC0xMjAsaSxvKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisxMDAqKHRoaXMuc3x8MCkrIiUsICIrMTAwKih0aGlzLmx8fDApKyIlIisoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKTt2YXIgZjc9TWF0aC5QSS8xODAsZzc9MTgwL01hdGguUEksaDc9Ljk2NDIyLGI3PS44MjUyMSx5Nz00LzI5LF83PTYvMjksQzc9MypfNypfNztmdW5jdGlvbiBNNyh0KXtpZih0IGluc3RhbmNlb2YgdjcpcmV0dXJuIG5ldyB2Nyh0LmwsdC5hLHQuYix0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBENylyZXR1cm4gRTcodCk7dCBpbnN0YW5jZW9mIGk3fHwodD1uNyh0KSk7dmFyIGUsbixvPXc3KHQuciksaT13Nyh0LmcpLGE9dzcodC5iKSxyPXg3KCguMjIyNTA0NSpvKy43MTY4Nzg2KmkrLjA2MDYxNjkqYSkvMSk7cmV0dXJuIG89PT1pJiZpPT09YT9lPW49cjooZT14NygoLjQzNjA3NDcqbysuMzg1MDY0OSppKy4xNDMwODA0KmEpL2g3KSxuPXg3KCguMDEzOTMyMipvKy4wOTcxMDQ1KmkrLjcxNDE3MzMqYSkvYjcpKSxuZXcgdjcoMTE2KnItMTYsNTAwKihlLXIpLDIwMCooci1uKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIHY3KHQsZSxuLG8pe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0rb31mdW5jdGlvbiB4Nyh0KXtyZXR1cm4gdD4uMDA4ODU2NDUxNjc5MDM1NjMxP01hdGgucG93KHQsMS8zKTp0L0M3K3k3fWZ1bmN0aW9uIE83KHQpe3JldHVybiB0Pl83P3QqdCp0OkM3Kih0LXk3KX1mdW5jdGlvbiBQNyh0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIHc3KHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIGs3KHQpe2lmKHQgaW5zdGFuY2VvZiBENylyZXR1cm4gbmV3IEQ3KHQuaCx0LmMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIHY3fHwodD1NNyh0KSksMD09PXQuYSYmMD09PXQuYilyZXR1cm4gbmV3IEQ3KE5hTiwwPHQubCYmdC5sPDEwMD8wOk5hTix0LmwsdC5vcGFjaXR5KTt2YXIgZT1NYXRoLmF0YW4yKHQuYix0LmEpKmc3O3JldHVybiBuZXcgRDcoZTwwP2UrMzYwOmUsTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYiksdC5sLHQub3BhY2l0eSl9ZnVuY3Rpb24gUzcodCxlLG4sbyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2s3KHQpOm5ldyBENyh0LGUsbixudWxsPT1vPzE6byl9ZnVuY3Rpb24gRDcodCxlLG4sbyl7dGhpcy5oPSt0LHRoaXMuYz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStvfWZ1bmN0aW9uIEU3KHQpe2lmKGlzTmFOKHQuaCkpcmV0dXJuIG5ldyB2Nyh0LmwsMCwwLHQub3BhY2l0eSk7dmFyIGU9dC5oKmY3O3JldHVybiBuZXcgdjcodC5sLE1hdGguY29zKGUpKnQuYyxNYXRoLnNpbihlKSp0LmMsdC5vcGFjaXR5KX1mdW5jdGlvbiBSNyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gQTcodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX1mdW5jdGlvbiBUNyh0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9BNyh0LG4+MTgwfHxuPC0xODA/bi0zNjAqTWF0aC5yb3VuZChuLzM2MCk6bik6UjcoaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBONyh0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9BNyh0LG4pOlI3KGlzTmFOKHQpP2U6dCl9aTYodjcsKGZ1bmN0aW9uIHo3KHQsZSxuLG8pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9NNyh0KTpuZXcgdjcodCxlLG4sbnVsbD09bz8xOm8pfSksYTYocjYse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdjcodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB2Nyh0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAsbj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgaTcoUDcoMy4xMzM4NTYxKihlPWg3Kk83KGUpKS0xLjYxNjg2NjcqKHQ9MSpPNyh0KSktLjQ5MDYxNDYqKG49YjcqTzcobikpKSxQNygtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0Km4pLFA3KC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqbiksdGhpcy5vcGFjaXR5KX19KSksaTYoRDcsUzcsYTYocjYse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRDcodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBENyh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBFNyh0aGlzKS5yZ2IoKX19KSk7dmFyIEk3PShmdW5jdGlvbiB0KGUpe3ZhciBuPShmdW5jdGlvbiBvKHQpe3JldHVybiAxPT0odD0rdCk/Tjc6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbi1lPyhmdW5jdGlvbiBvKHQsZSxuKXtyZXR1cm4gdD1NYXRoLnBvdyh0LG4pLGU9TWF0aC5wb3coZSxuKS10LG49MS9uLGZ1bmN0aW9uKG8pe3JldHVybiBNYXRoLnBvdyh0K28qZSxuKX19KShlLG4sdCk6UjcoaXNOYU4oZSk/bjplKX19KShlKTtmdW5jdGlvbiBpKHQsZSl7dmFyIG89bigodD1vNyh0KSkuciwoZT1vNyhlKSkuciksaT1uKHQuZyxlLmcpLGE9bih0LmIsZS5iKSxyPU43KHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPW8oZSksdC5nPWkoZSksdC5iPWEoZSksdC5vcGFjaXR5PXIoZSksdCsiIn19cmV0dXJuIGkuZ2FtbWE9dCxpfSkoMSksSDc9KGZ1bmN0aW9uIEw3KHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbixvLGk9ZS5sZW5ndGgsYT1uZXcgQXJyYXkoaSkscj1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPGk7KytuKW89bzcoZVtuXSksYVtuXT1vLnJ8fDAscltuXT1vLmd8fDAsc1tuXT1vLmJ8fDA7cmV0dXJuIGE9dChhKSxyPXQocikscz10KHMpLG8ub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiBvLnI9YSh0KSxvLmc9cih0KSxvLmI9cyh0KSxvKyIifX19KSgoZnVuY3Rpb24gRjcodCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIG89bjw9MD9uPTA6bj49MT8obj0xLGUtMSk6TWF0aC5mbG9vcihuKmUpLGk9dFtvXSxhPXRbbysxXTtyZXR1cm4oZnVuY3Rpb24gcih0LGUsbixvLGkpe3ZhciBhPXQqdCxyPWEqdDtyZXR1cm4oKDEtMyp0KzMqYS1yKSplKyg0LTYqYSszKnIpKm4rKDErMyp0KzMqYS0zKnIpKm8rcippKS82fSkoKG4tby9lKSplLG8+MD90W28tMV06MippLWEsaSxhLG88ZS0xP3RbbysyXToyKmEtaSl9fSkpO2Z1bmN0aW9uIEI3KHQsZSl7ZXx8KGU9W10pO3ZhciBuLG89dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxpPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG49MDtuPG87KytuKWlbbl09dFtuXSooMS1hKStlW25dKmE7cmV0dXJuIGl9fWZ1bmN0aW9uIFY3KHQsZSl7dmFyIG4sbz1lP2UubGVuZ3RoOjAsaT10P01hdGgubWluKG8sdC5sZW5ndGgpOjAsYT1uZXcgQXJyYXkoaSkscj1uZXcgQXJyYXkobyk7Zm9yKG49MDtuPGk7KytuKWFbbl09WjcodFtuXSxlW25dKTtmb3IoO248bzsrK24pcltuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3Iobj0wO248aTsrK24pcltuXT1hW25dKHQpO3JldHVybiByfX1mdW5jdGlvbiBqNyh0LGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obyl7cmV0dXJuIG4uc2V0VGltZSh0KigxLW8pK2Uqbyksbn19ZnVuY3Rpb24gVTcodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19ZnVuY3Rpb24gRzcodCxlKXt2YXIgbixvPXt9LGk9e307Zm9yKG4gaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKW4gaW4gdD9vW25dPVo3KHRbbl0sZVtuXSk6aVtuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3IobiBpbiBvKWlbbl09b1tuXSh0KTtyZXR1cm4gaX19dmFyIFc3PS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxZNz1uZXcgUmVnRXhwKFc3LnNvdXJjZSwiZyIpO2Z1bmN0aW9uIHE3KHQsZSl7dmFyIG4sbyxpLGE9VzcubGFzdEluZGV4PVk3Lmxhc3RJbmRleD0wLHI9LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1XNy5leGVjKHQpKSYmKG89WTcuZXhlYyhlKSk7KShpPW8uaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW3JdP3Nbcl0rPWk6c1srK3JdPWkpLChuPW5bMF0pPT09KG89b1swXSk/c1tyXT9zW3JdKz1vOnNbKytyXT1vOihzWysrcl09bnVsbCxsLnB1c2goe2k6cix4OlU3KG4sbyl9KSksYT1ZNy5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tyXT9zW3JdKz1pOnNbKytyXT1pKSxzLmxlbmd0aDwyP2xbMF0/KGZ1bmN0aW9uIGModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0pKGxbMF0ueCk6KGZ1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkoZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLG89MDtvPGU7KytvKXNbKG49bFtvXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gWjcodCxlKXt2YXIgbixvPXR5cGVvZiBlO3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PT1vP1I3KGUpOigibnVtYmVyIj09PW8/VTc6InN0cmluZyI9PT1vPyhuPSQ2KGUpKT8oZT1uLEk3KTpxNzplIGluc3RhbmNlb2YgJDY/STc6ZSBpbnN0YW5jZW9mIERhdGU/ajc6KGZ1bmN0aW9uIGkodCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfSkoZSk/Qjc6QXJyYXkuaXNBcnJheShlKT9WNzoiZnVuY3Rpb24iIT10eXBlb2YgZS52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZ3x8aXNOYU4oZSk/Rzc6VTcpKHQsZSl9ZnVuY3Rpb24gWDcodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKHQqKDEtbikrZSpuKX19dmFyIEs3LEo3LFE3LCQ3LHQ4PTE4MC9NYXRoLlBJLGU4PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIG44KHQsZSxuLG8saSxhKXt2YXIgcixzLGw7cmV0dXJuKHI9TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPXIsZS89ciksKGw9dCpuK2UqbykmJihuLT10Kmwsby09ZSpsKSwocz1NYXRoLnNxcnQobipuK28qbykpJiYobi89cyxvLz1zLGwvPXMpLHQqbzxlKm4mJih0PS10LGU9LWUsbD0tbCxyPS1yKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6YSxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKnQ4LHNrZXdYOk1hdGguYXRhbihsKSp0OCxzY2FsZVg6cixzY2FsZVk6c319ZnVuY3Rpb24gbzgodCxlLG4sbyl7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKGEscil7dmFyIHM9W10sbD1bXTtyZXR1cm4gYT10KGEpLHI9dChyKSwoZnVuY3Rpb24gYyh0LG8saSxhLHIscyl7aWYodCE9PWl8fG8hPT1hKXt2YXIgbD1yLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLG4pO3MucHVzaCh7aTpsLTQseDpVNyh0LGkpfSx7aTpsLTIseDpVNyhvLGEpfSl9ZWxzZShpfHxhKSYmci5wdXNoKCJ0cmFuc2xhdGUoIitpK2UrYStuKX0pKGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksci50cmFuc2xhdGVYLHIudHJhbnNsYXRlWSxzLGwpLChmdW5jdGlvbiBkKHQsZSxuLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6bi5wdXNoKGkobikrInJvdGF0ZSgiLG51bGwsbyktMix4OlU3KHQsZSl9KSk6ZSYmbi5wdXNoKGkobikrInJvdGF0ZSgiK2Urbyl9KShhLnJvdGF0ZSxyLnJvdGF0ZSxzLGwpLChmdW5jdGlvbiBwKHQsZSxuLGEpe3QhPT1lP2EucHVzaCh7aTpuLnB1c2goaShuKSsic2tld1goIixudWxsLG8pLTIseDpVNyh0LGUpfSk6ZSYmbi5wdXNoKGkobikrInNrZXdYKCIrZStvKX0pKGEuc2tld1gsci5za2V3WCxzLGwpLChmdW5jdGlvbiBtKHQsZSxuLG8sYSxyKXtpZih0IT09bnx8ZSE9PW8pe3ZhciBzPWEucHVzaChpKGEpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtyLnB1c2goe2k6cy00LHg6VTcodCxuKX0se2k6cy0yLHg6VTcoZSxvKX0pfWVsc2UgMT09PW4mJjE9PT1vfHxhLnB1c2goaShhKSsic2NhbGUoIituKyIsIitvKyIpIil9KShhLnNjYWxlWCxhLnNjYWxlWSxyLnNjYWxlWCxyLnNjYWxlWSxzLGwpLGE9cj1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLG89bC5sZW5ndGg7KytuPG87KXNbKGU9bFtuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIGk4LGE4LHI4PW84KChmdW5jdGlvbiBzOCh0KXtyZXR1cm4ibm9uZSI9PT10P2U4OihLN3x8KEs3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLEo3PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxRNz1kb2N1bWVudC5kZWZhdWx0VmlldyksSzcuc3R5bGUudHJhbnNmb3JtPXQsdD1RNy5nZXRDb21wdXRlZFN0eWxlKEo3LmFwcGVuZENoaWxkKEs3KSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxKNy5yZW1vdmVDaGlsZChLNyksbjgoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLGw4PW84KChmdW5jdGlvbiBjOCh0KXtyZXR1cm4gbnVsbD09dD9lODooJDd8fCgkNz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSwkNy5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9JDcudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/bjgoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6ZTgpfSksIiwgIiwiKSIsIikiKSxkOD0oZnVuY3Rpb24gcDgodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIG89dCgoZT1kNyhlKSkuaCwobj1kNyhuKSkuaCksaT1ONyhlLnMsbi5zKSxhPU43KGUubCxuLmwpLHI9TjcoZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9byh0KSxlLnM9aSh0KSxlLmw9YSh0KSxlLm9wYWNpdHk9cih0KSxlKyIifX19KShUNyksbTg9KGZ1bmN0aW9uIHU4KHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBvPXQoKGU9UzcoZSkpLmgsKG49UzcobikpLmgpLGk9TjcoZS5jLG4uYyksYT1ONyhlLmwsbi5sKSxyPU43KGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPW8odCksZS5jPWkodCksZS5sPWEodCksZS5vcGFjaXR5PXIodCksZSsiIn19fSkoVDcpLGY4PTAsZzg9MCxoOD0wLGI4PTAseTg9MCxfOD0wLEM4PSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLE04PSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIHY4KCl7cmV0dXJuIHk4fHwoTTgoeDgpLHk4PUM4Lm5vdygpK184KX1mdW5jdGlvbiB4OCgpe3k4PTB9ZnVuY3Rpb24gTzgoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIFA4KHQsZSxuKXt2YXIgbz1uZXcgTzg7cmV0dXJuIG8ucmVzdGFydCh0LGUsbiksb31mdW5jdGlvbiB3OCgpe3k4PShiOD1DOC5ub3coKSkrXzgsZjg9Zzg9MDt0cnl7IShmdW5jdGlvbiB0KCl7djgoKSwrK2Y4O2Zvcih2YXIgdCxlPWk4O2U7KSh0PXk4LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1mOH0pKCl9ZmluYWxseXtmOD0wLChmdW5jdGlvbiBlKCl7Zm9yKHZhciB0LGUsbj1pOCxvPTEvMDtuOyluLl9jYWxsPyhvPm4uX3RpbWUmJihvPW4uX3RpbWUpLHQ9bixuPW4uX25leHQpOihlPW4uX25leHQsbi5fbmV4dD1udWxsLG49dD90Ll9uZXh0PWU6aTg9ZSk7YTg9dCxTOChvKX0pKCkseTg9MH19ZnVuY3Rpb24gazgoKXt2YXIgdD1DOC5ub3coKSxlPXQtYjg7ZT4xZTMmJihfOC09ZSxiOD10KX1mdW5jdGlvbiBTOCh0KXtmOHx8KGc4JiYoZzg9Y2xlYXJUaW1lb3V0KGc4KSksdC15OD4yND8odDwxLzAmJihnOD1zZXRUaW1lb3V0KHc4LHQtQzgubm93KCktXzgpKSxoOCYmKGg4PWNsZWFySW50ZXJ2YWwoaDgpKSk6KGg4fHwoYjg9Qzgubm93KCksaDg9c2V0SW50ZXJ2YWwoazgsMWUzKSksZjg9MSxNOCh3OCkpKX1mdW5jdGlvbiBEOCh0LGUsbil7dmFyIG89bmV3IE84O3JldHVybiBvLnJlc3RhcnQoKGZ1bmN0aW9uKG4pe28uc3RvcCgpLHQobitlKX0pLGU9bnVsbD09ZT8wOitlLG4pLG99TzgucHJvdG90eXBlPVA4LnByb3RvdHlwZT17Y29uc3RydWN0b3I6TzgscmVzdGFydDpmdW5jdGlvbih0LGUsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtuPShudWxsPT1uP3Y4KCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fGE4PT09dGhpc3x8KGE4P2E4Ll9uZXh0PXRoaXM6aTg9dGhpcyxhOD10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1uLFM4KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFM4KCkpfX07dmFyIEU4PUg1KCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLFI4PVtdO2Z1bmN0aW9uIEE4KHQsZSxuLG8saSxhKXt2YXIgcj10Ll9fdHJhbnNpdGlvbjtpZihyKXtpZihuIGluIHIpcmV0dXJufWVsc2UgdC5fX3RyYW5zaXRpb249e307IShmdW5jdGlvbiBzKHQsZSxuKXt2YXIgbyxpPXQuX190cmFuc2l0aW9uO2Z1bmN0aW9uIGEobCl7dmFyIGMsZCxwLG07aWYoMSE9PW4uc3RhdGUpcmV0dXJuIHMoKTtmb3IoYyBpbiBpKWlmKChtPWlbY10pLm5hbWU9PT1uLm5hbWUpe2lmKDM9PT1tLnN0YXRlKXJldHVybiBEOChhKTs0PT09bS5zdGF0ZT8obS5zdGF0ZT02LG0udGltZXIuc3RvcCgpLG0ub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sbS5pbmRleCxtLmdyb3VwKSxkZWxldGUgaVtjXSk6K2M8ZSYmKG0uc3RhdGU9NixtLnRpbWVyLnN0b3AoKSxtLm9uLmNhbGwoImNhbmNlbCIsdCx0Ll9fZGF0YV9fLG0uaW5kZXgsbS5ncm91cCksZGVsZXRlIGlbY10pfWlmKEQ4KChmdW5jdGlvbigpezM9PT1uLnN0YXRlJiYobi5zdGF0ZT00LG4udGltZXIucmVzdGFydChyLG4uZGVsYXksbi50aW1lKSxyKGwpKX0pKSxuLnN0YXRlPTIsbi5vbi5jYWxsKCJzdGFydCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksMj09PW4uc3RhdGUpe2ZvcihuLnN0YXRlPTMsbz1uZXcgQXJyYXkocD1uLnR3ZWVuLmxlbmd0aCksYz0wLGQ9LTE7YzxwOysrYykobT1uLnR3ZWVuW2NdLnZhbHVlLmNhbGwodCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkpJiYob1srK2RdPW0pO28ubGVuZ3RoPWQrMX19ZnVuY3Rpb24gcihlKXtmb3IodmFyIGk9ZTxuLmR1cmF0aW9uP24uZWFzZS5jYWxsKG51bGwsZS9uLmR1cmF0aW9uKToobi50aW1lci5yZXN0YXJ0KHMpLG4uc3RhdGU9NSwxKSxhPS0xLHI9by5sZW5ndGg7KythPHI7KW9bYV0uY2FsbCh0LGkpOzU9PT1uLnN0YXRlJiYobi5vbi5jYWxsKCJlbmQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLHMoKSl9ZnVuY3Rpb24gcygpe2Zvcih2YXIgbyBpbiBuLnN0YXRlPTYsbi50aW1lci5zdG9wKCksZGVsZXRlIGlbZV0saSlyZXR1cm47ZGVsZXRlIHQuX190cmFuc2l0aW9ufWlbZV09bixuLnRpbWVyPVA4KChmdW5jdGlvbiBsKHQpe24uc3RhdGU9MSxuLnRpbWVyLnJlc3RhcnQoYSxuLmRlbGF5LG4udGltZSksbi5kZWxheTw9dCYmYSh0LW4uZGVsYXkpfSksMCxuLnRpbWUpfSkodCxuLHtuYW1lOmUsaW5kZXg6byxncm91cDppLG9uOkU4LHR3ZWVuOlI4LHRpbWU6YS50aW1lLGRlbGF5OmEuZGVsYXksZHVyYXRpb246YS5kdXJhdGlvbixlYXNlOmEuZWFzZSx0aW1lcjpudWxsLHN0YXRlOjB9KX1mdW5jdGlvbiBUOCh0LGUpe3ZhciBuPXo4KHQsZSk7aWYobi5zdGF0ZT4wKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIG59ZnVuY3Rpb24gTjgodCxlKXt2YXIgbj16OCh0LGUpO2lmKG4uc3RhdGU+Myl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gbn1mdW5jdGlvbiB6OCh0LGUpe3ZhciBuPXQuX190cmFuc2l0aW9uO2lmKCFufHwhKG49bltlXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBufWZ1bmN0aW9uIEk4KHQsZSl7dmFyIG4sbyxpLGE9dC5fX3RyYW5zaXRpb24scj0hMDtpZihhKXtmb3IoaSBpbiBlPW51bGw9PWU/bnVsbDplKyIiLGEpKG49YVtpXSkubmFtZT09PWU/KG89bi5zdGF0ZT4yJiZuLnN0YXRlPDUsbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLG4ub24uY2FsbChvPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSBhW2ldKTpyPSExO3ImJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gSDgodCxlKXt2YXIgbixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPU44KHRoaXMsdCksYT1pLnR3ZWVuO2lmKGEhPT1uKWZvcih2YXIgcj0wLHM9KG89bj1hKS5sZW5ndGg7cjxzOysrcilpZihvW3JdLm5hbWU9PT1lKXsobz1vLnNsaWNlKCkpLnNwbGljZShyLDEpO2JyZWFrfWkudHdlZW49b319ZnVuY3Rpb24gRjgodCxlLG4pe3ZhciBvLGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPU44KHRoaXMsdCkscj1hLnR3ZWVuO2lmKHIhPT1vKXtpPShvPXIpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOmUsdmFsdWU6bn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT1lKXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1hLnR3ZWVuPWl9fWZ1bmN0aW9uIEw4KHQsZSxuKXt2YXIgbz10Ll9pZDtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PU44KHRoaXMsbyk7KHQudmFsdWV8fCh0LnZhbHVlPXt9KSlbZV09bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSksZnVuY3Rpb24odCl7cmV0dXJuIHo4KHQsbykudmFsdWVbZV19fWZ1bmN0aW9uIEI4KHQsZSl7dmFyIG47cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgZT9VNzplIGluc3RhbmNlb2YgJDY/STc6KG49JDYoZSkpPyhlPW4sSTcpOnE3KSh0LGUpfWZ1bmN0aW9uIFY4KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBqOCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIFU4KHQsZSxuKXt2YXIgbyxpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gcj09PWE/bnVsbDpyPT09bz9pOmk9ZShvPXIsbil9fWZ1bmN0aW9uIEc4KHQsZSxuKXt2YXIgbyxpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIHI9PT1hP251bGw6cj09PW8/aTppPWUobz1yLG4pfX1mdW5jdGlvbiBXOCh0LGUsbil7dmFyIG8saSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciByLHMsbD1uKHRoaXMpO2lmKG51bGwhPWwpcmV0dXJuKHI9dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09KHM9bCsiIik/bnVsbDpyPT09byYmcz09PWk/YTooaT1zLGE9ZShvPXIsbCkpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBZOCh0LGUsbil7dmFyIG8saSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciByLHMsbD1uKHRoaXMpO2lmKG51bGwhPWwpcmV0dXJuKHI9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PShzPWwrIiIpP251bGw6cj09PW8mJnM9PT1pP2E6KGk9cyxhPWUobz1yLGwpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIHE4KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKHQsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBaOCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIFg4KHQsZSl7dmFyIG4sbztmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1vJiYobj0obz1pKSYmWjgodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIEs4KHQsZSl7dmFyIG4sbztmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1vJiYobj0obz1pKSYmcTgodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIEo4KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7VDgodGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFE4KHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtUOCh0aGlzLHQpLmRlbGF5PWV9fWZ1bmN0aW9uICQ4KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7TjgodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHQ5KHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtOOCh0aGlzLHQpLmR1cmF0aW9uPWV9fWZ1bmN0aW9uIGU5KHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe044KHRoaXMsdCkuZWFzZT1lfX1mdW5jdGlvbiBuOSh0LGUsbil7dmFyIG8saSxhPShmdW5jdGlvbiByKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pKX0pKGUpP1Q4Ok44O3JldHVybiBmdW5jdGlvbigpe3ZhciByPWEodGhpcyx0KSxzPXIub247cyE9PW8mJihpPShvPXMpLmNvcHkoKSkub24oZSxuKSxyLm9uPWl9fXZhciBvOT1LNC5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gaTkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gYTkodCxlLG4pe3JldHVybiBmdW5jdGlvbihvKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZS5jYWxsKHRoaXMsbyksbil9fWZ1bmN0aW9uIHI5KHQsZSxuKXt2YXIgbyxpO2Z1bmN0aW9uIGEoKXt2YXIgYT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihvPShpPWEpJiZhOSh0LGEsbikpLG99cmV0dXJuIGEuX3ZhbHVlPWUsYX1mdW5jdGlvbiBzOSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy50ZXh0Q29udGVudD10LmNhbGwodGhpcyxlKX19ZnVuY3Rpb24gbDkodCl7dmFyIGUsbjtmdW5jdGlvbiBvKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYoZT0obj1vKSYmczkobykpLGV9cmV0dXJuIG8uX3ZhbHVlPXQsb312YXIgYzk9MDtmdW5jdGlvbiBkOSh0LGUsbixvKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWUsdGhpcy5fbmFtZT1uLHRoaXMuX2lkPW99ZnVuY3Rpb24gcDkoKXtyZXR1cm4rK2M5fXZhciBtOT1LNC5wcm90b3R5cGU7ZDkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkOSxzZWxlY3Q6ZnVuY3Rpb24gdTkodCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1YNSh0KSk7Zm9yKHZhciBvPXRoaXMuX2dyb3VwcyxpPW8ubGVuZ3RoLGE9bmV3IEFycmF5KGkpLHI9MDtyPGk7KytyKWZvcih2YXIgcyxsLGM9b1tyXSxkPWMubGVuZ3RoLHA9YVtyXT1uZXcgQXJyYXkoZCksbT0wO208ZDsrK20pKHM9Y1ttXSkmJihsPXQuY2FsbChzLHMuX19kYXRhX18sbSxjKSkmJigiX19kYXRhX18iaW4gcyYmKGwuX19kYXRhX189cy5fX2RhdGFfXykscFttXT1sLEE4KHBbbV0sZSxuLG0scCx6OChzLG4pKSk7cmV0dXJuIG5ldyBkOShhLHRoaXMuX3BhcmVudHMsZSxuKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIGY5KHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9SjUodCkpO2Zvcih2YXIgbz10aGlzLl9ncm91cHMsaT1vLmxlbmd0aCxhPVtdLHI9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsLGM9b1tzXSxkPWMubGVuZ3RoLHA9MDtwPGQ7KytwKWlmKGw9Y1twXSl7Zm9yKHZhciBtLHU9dC5jYWxsKGwsbC5fX2RhdGFfXyxwLGMpLGY9ejgobCxuKSxnPTAsaD11Lmxlbmd0aDtnPGg7KytnKShtPXVbZ10pJiZBOChtLGUsbixnLHUsZik7YS5wdXNoKHUpLHIucHVzaChsKX1yZXR1cm4gbmV3IGQ5KGEscixlLG4pfSxmaWx0ZXI6ZnVuY3Rpb24gZzkodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVE1KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsbz1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLHI9ZVtpXSxzPXIubGVuZ3RoLGw9b1tpXT1bXSxjPTA7YzxzOysrYykoYT1yW2NdKSYmdC5jYWxsKGEsYS5fX2RhdGFfXyxjLHIpJiZsLnB1c2goYSk7cmV0dXJuIG5ldyBkOShvLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uIGg5KHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMsbz1lLmxlbmd0aCxpPU1hdGgubWluKG8sbi5sZW5ndGgpLGE9bmV3IEFycmF5KG8pLHI9MDtyPGk7KytyKWZvcih2YXIgcyxsPWVbcl0sYz1uW3JdLGQ9bC5sZW5ndGgscD1hW3JdPW5ldyBBcnJheShkKSxtPTA7bTxkOysrbSkocz1sW21dfHxjW21dKSYmKHBbbV09cyk7Zm9yKDtyPG87KytyKWFbcl09ZVtyXTtyZXR1cm4gbmV3IGQ5KGEsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uIGI5KCl7cmV0dXJuIG5ldyBvOSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24geTkoKXtmb3IodmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkLG49cDkoKSxvPXRoaXMuX2dyb3VwcyxpPW8ubGVuZ3RoLGE9MDthPGk7KythKWZvcih2YXIgcixzPW9bYV0sbD1zLmxlbmd0aCxjPTA7YzxsOysrYylpZihyPXNbY10pe3ZhciBkPXo4KHIsZSk7QTgocix0LG4sYyxzLHt0aW1lOmQudGltZStkLmRlbGF5K2QuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpkLmR1cmF0aW9uLGVhc2U6ZC5lYXNlfSl9cmV0dXJuIG5ldyBkOShvLHRoaXMuX3BhcmVudHMsdCxuKX0sY2FsbDptOS5jYWxsLG5vZGVzOm05Lm5vZGVzLG5vZGU6bTkubm9kZSxzaXplOm05LnNpemUsZW1wdHk6bTkuZW1wdHksZWFjaDptOS5lYWNoLG9uOmZ1bmN0aW9uIF85KHQsZSl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj96OCh0aGlzLm5vZGUoKSxuKS5vbi5vbih0KTp0aGlzLmVhY2gobjkobix0LGUpKX0sYXR0cjpmdW5jdGlvbiBDOSh0LGUpe3ZhciBuPUc1KHQpLG89InRyYW5zZm9ybSI9PT1uP2w4OkI4O3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlPyhuLmxvY2FsP1k4Olc4KShuLG8sTDgodGhpcywiYXR0ci4iK3QsZSkpOm51bGw9PWU/KG4ubG9jYWw/ajg6VjgpKG4pOihuLmxvY2FsP0c4OlU4KShuLG8sZSkpfSxhdHRyVHdlZW46ZnVuY3Rpb24gTTkodCxlKXt2YXIgbj0iYXR0ci4iK3Q7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3ZhciBvPUc1KHQpO3JldHVybiB0aGlzLnR3ZWVuKG4sKG8ubG9jYWw/WDg6SzgpKG8sZSkpfSxzdHlsZTpmdW5jdGlvbiB2OSh0LGUsbil7dmFyIG89InRyYW5zZm9ybSI9PSh0Kz0iIik/cjg6Qjg7cmV0dXJuIG51bGw9PWU/dGhpcy5zdHlsZVR3ZWVuKHQsKGZ1bmN0aW9uIGkodCxlKXt2YXIgbixvLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9ZjQodGhpcyx0KSxyPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGY0KHRoaXMsdCkpO3JldHVybiBhPT09cj9udWxsOmE9PT1uJiZyPT09bz9pOmk9ZShuPWEsbz1yKX19KSh0LG8pKS5vbigiZW5kLnN0eWxlLiIrdCxpOSh0KSk6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dGhpcy5zdHlsZVR3ZWVuKHQsKGZ1bmN0aW9uIHIodCxlLG4pe3ZhciBvLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1mNCh0aGlzLHQpLHM9bih0aGlzKSxsPXMrIiI7cmV0dXJuIG51bGw9PXMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGw9cz1mNCh0aGlzLHQpKSxyPT09bD9udWxsOnI9PT1vJiZsPT09aT9hOihpPWwsYT1lKG89cixzKSl9fSkodCxvLEw4KHRoaXMsInN0eWxlLiIrdCxlKSkpLmVhY2goKGZ1bmN0aW9uIGEodCxlKXt2YXIgbixvLGksYSxyPSJzdHlsZS4iK2Uscz0iZW5kLiIrcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1OOCh0aGlzLHQpLGM9bC5vbixkPW51bGw9PWwudmFsdWVbcl0/YXx8KGE9aTkoZSkpOnZvaWQgMDtjPT09biYmaT09PWR8fChvPShuPWMpLmNvcHkoKSkub24ocyxpPWQpLGwub249b319KSh0aGlzLl9pZCx0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsKGZ1bmN0aW9uIHModCxlLG4pe3ZhciBvLGksYT1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciByPWY0KHRoaXMsdCk7cmV0dXJuIHI9PT1hP251bGw6cj09PW8/aTppPWUobz1yLG4pfX0pKHQsbyxlKSxuKS5vbigiZW5kLnN0eWxlLiIrdCxudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbiB4OSh0LGUsbil7dmFyIG89InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG89dGhpcy50d2VlbihvKSkmJm8uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obyxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obyxyOSh0LGUsbnVsbD09bj8iIjpuKSl9LHRleHQ6ZnVuY3Rpb24gTzkodCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0PyhmdW5jdGlvbiBlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fSkoTDgodGhpcywidGV4dCIsdCkpOihmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KShudWxsPT10PyIiOnQrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uIFA5KHQpe3ZhciBlPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZSxsOSh0KSl9LHJlbW92ZTpmdW5jdGlvbiB3OSgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBuIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtuIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19KSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbiBrOSh0LGUpe3ZhciBuPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBvLGk9ejgodGhpcy5ub2RlKCksbikudHdlZW4sYT0wLHI9aS5sZW5ndGg7YTxyOysrYSlpZigobz1pW2FdKS5uYW1lPT09dClyZXR1cm4gby52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP0g4OkY4KShuLHQsZSkpfSxkZWxheTpmdW5jdGlvbiBTOSh0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P0o4OlE4KShlLHQpKTp6OCh0aGlzLm5vZGUoKSxlKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24gRDkodCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD8kODp0OSkoZSx0KSk6ejgodGhpcy5ub2RlKCksZSkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24gRTkodCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU5KGUsdCkpOno4KHRoaXMubm9kZSgpLGUpLmVhc2V9LGVuZDpmdW5jdGlvbiBSOSgpe3ZhciB0LGUsbj10aGlzLG89bi5faWQsaT1uLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGEscil7dmFyIHM9e3ZhbHVlOnJ9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1pJiZhKCl9fTtuLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG49TjgodGhpcyxvKSxpPW4ub247aSE9PXQmJigoZT0odD1pKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2gocyksZS5fLmludGVycnVwdC5wdXNoKHMpLGUuXy5lbmQucHVzaChsKSksbi5vbj1lfSkpfSkpfX07dmFyIEE5PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlvbiBUOSh0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn19O2Z1bmN0aW9uIE45KHQsZSl7Zm9yKHZhciBuOyEobj10Ll9fdHJhbnNpdGlvbil8fCEobj1uW2VdKTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIEE5LnRpbWU9djgoKSxBOTtyZXR1cm4gbn1mdW5jdGlvbiB6OSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gSTkodCxlLG4pe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPWUsdGhpcy5zZWxlY3Rpb249bn1mdW5jdGlvbiBIOSgpe0w0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIEY5KCl7TDQucHJldmVudERlZmF1bHQoKSxMNC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1LNC5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uIEw5KHQpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7STgodGhpcyx0KX0pKX0sSzQucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rpb24gQjkodCl7dmFyIGUsbjt0IGluc3RhbmNlb2YgZDk/KGU9dC5faWQsdD10Ll9uYW1lKTooZT1wOSgpLChuPUE5KS50aW1lPXY4KCksdD1udWxsPT10P251bGw6dCsiIik7Zm9yKHZhciBvPXRoaXMuX2dyb3VwcyxpPW8ubGVuZ3RoLGE9MDthPGk7KythKWZvcih2YXIgcixzPW9bYV0sbD1zLmxlbmd0aCxjPTA7YzxsOysrYykocj1zW2NdKSYmQTgocix0LGUsYyxzLG58fE45KHIsZSkpO3JldHVybiBuZXcgZDkobyx0aGlzLl9wYXJlbnRzLHQsZSl9O3ZhciBWOT17bmFtZToiZHJhZyJ9LGo5PXtuYW1lOiJzcGFjZSJ9LFU5PXtuYW1lOiJoYW5kbGUifSxHOT17bmFtZToiY2VudGVyIn07ZnVuY3Rpb24gVzkodCl7cmV0dXJuWyt0WzBdLCt0WzFdXX1mdW5jdGlvbiBZOSh0KXtyZXR1cm5bVzkodFswXSksVzkodFsxXSldfWZ1bmN0aW9uIHE5KHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4oZnVuY3Rpb24gbih0LGUsbyl7YXJndW1lbnRzLmxlbmd0aDwzJiYobz1lLGU9UTQoKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBpLGE9MCxyPWU/ZS5sZW5ndGg6MDthPHI7KythKWlmKChpPWVbYV0pLmlkZW50aWZpZXI9PT1vKXJldHVybiAkNCh0LGkpO3JldHVybiBudWxsfSkoZSxMNC50b3VjaGVzLHQpfX12YXIgWjk9e25hbWU6IngiLGhhbmRsZXM6WyJ3IiwiZSJdLm1hcChldHQpLGlucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQ/bnVsbDpbWyt0WzBdLGVbMF1bMV1dLFsrdFsxXSxlWzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMF0sdFsxXVswXV19fSxYOT17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKGV0dCksaW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD9udWxsOltbZVswXVswXSwrdFswXV0sW2VbMV1bMF0sK3RbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVsxXSx0WzFdWzFdXX19LEs5PXtvdmVybGF5OiJjcm9zc2hhaXIiLHNlbGVjdGlvbjoibW92ZSIsbjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxKOT17ZToidyIsdzoiZSIsbnc6Im5lIixuZToibnciLHNlOiJzdyIsc3c6InNlIn0sUTk9e246InMiLHM6Im4iLG53OiJzdyIsbmU6InNlIixzZToibmUiLHN3OiJudyJ9LCQ5PXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LHR0dD17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBldHQodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gbnR0KCl7cmV0dXJuIUw0LmN0cmxLZXkmJiFMNC5idXR0b259ZnVuY3Rpb24gb3R0KCl7dmFyIHQ9dGhpcy5vd25lclNWR0VsZW1lbnR8fHRoaXM7cmV0dXJuIHQuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/W1sodD10LnZpZXdCb3guYmFzZVZhbCkueCx0LnldLFt0LngrdC53aWR0aCx0LnkrdC5oZWlnaHRdXTpbWzAsMF0sW3Qud2lkdGguYmFzZVZhbC52YWx1ZSx0LmhlaWdodC5iYXNlVmFsLnZhbHVlXV19ZnVuY3Rpb24gaXR0KCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIGF0dCh0KXtmb3IoOyF0Ll9fYnJ1c2g7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdC5fX2JydXNofWZ1bmN0aW9uIHJ0dCh0KXtyZXR1cm4gdFswXVswXT09PXRbMV1bMF18fHRbMF1bMV09PT10WzFdWzFdfXZhciBzdHQ9TWF0aC5QSSxsdHQ9MipzdHQsY3R0PTFlLTYsZHR0PWx0dC1jdHQ7ZnVuY3Rpb24gcHR0KCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gbXR0KCl7cmV0dXJuIG5ldyBwdHR9cHR0LnByb3RvdHlwZT1tdHQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpwdHQsbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLG8pe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K24pKyIsIisodGhpcy5feTE9K28pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLG8saSxhKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtuKyIsIisgK28rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LGFyY1RvOmZ1bmN0aW9uKHQsZSxuLG8saSl7dmFyIGE9dGhpcy5feDEscj10aGlzLl95MSxzPShuPStuKS0odD0rdCksbD0obz0rbyktKGU9K2UpLGM9YS10LGQ9ci1lLHA9YypjK2QqZDtpZigoaT0raSk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZSBpZihwPmN0dClpZihNYXRoLmFicyhkKnMtbCpjKT5jdHQmJmkpe3ZhciBtPW4tYSx1PW8tcixmPXMqcytsKmwsZz1tKm0rdSp1LGg9TWF0aC5zcXJ0KGYpLGI9TWF0aC5zcXJ0KHApLHk9aSpNYXRoLnRhbigoc3R0LU1hdGguYWNvcygoZitwLWcpLygyKmgqYikpKS8yKSxfPXkvYixDPXkvaDtNYXRoLmFicyhfLTEpPmN0dCYmKHRoaXMuXys9IkwiKyh0K18qYykrIiwiKyhlK18qZCkpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyhkKm0+Yyp1KSsiLCIrKHRoaXMuX3gxPXQrQypzKSsiLCIrKHRoaXMuX3kxPWUrQypsKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpfSxhcmM6ZnVuY3Rpb24odCxlLG4sbyxpLGEpe3Q9K3QsZT0rZSxhPSEhYTt2YXIgcj0obj0rbikqTWF0aC5jb3Mobykscz1uKk1hdGguc2luKG8pLGw9dCtyLGM9ZStzLGQ9MV5hLHA9YT9vLWk6aS1vO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIituKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+Y3R0fHxNYXRoLmFicyh0aGlzLl95MS1jKT5jdHQpJiYodGhpcy5fKz0iTCIrbCsiLCIrYyksbiYmKHA8MCYmKHA9cCVsdHQrbHR0KSxwPmR0dD90aGlzLl8rPSJBIituKyIsIituKyIsMCwxLCIrZCsiLCIrKHQtcikrIiwiKyhlLXMpKyJBIituKyIsIituKyIsMCwxLCIrZCsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6cD5jdHQmJih0aGlzLl8rPSJBIituKyIsIituKyIsMCwiKyArKHA+PXN0dCkrIiwiK2QrIiwiKyh0aGlzLl94MT10K24qTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9ZStuKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsZSxuLG8pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArbisidiIrICtvKyJoIistbisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciB1dHQ9IiQiO2Z1bmN0aW9uIGZ0dCgpe31mdW5jdGlvbiBndHQodCxlKXt2YXIgbj1uZXcgZnR0O2lmKHQgaW5zdGFuY2VvZiBmdHQpdC5lYWNoKChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgbyxpPS0xLGE9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysraTxhOyluLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8YTspbi5zZXQoZShvPXRbaV0saSx0KSxvKX1lbHNlIGlmKHQpZm9yKHZhciByIGluIHQpbi5zZXQocix0W3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBodHQoKXt9ZnR0LnByb3RvdHlwZT1ndHQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmdHQsaGFzOmZ1bmN0aW9uKHQpe3JldHVybiB1dHQrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbdXR0K3RdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1t1dHQrdF09ZSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dXR0K3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PXV0dCYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09dXR0JiZ0LnB1c2goZS5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT11dHQmJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT11dHQmJnQucHVzaCh7a2V5OmUuc2xpY2UoMSksdmFsdWU6dGhpc1tlXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09dXR0JiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYodFswXT09PXV0dClyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09dXR0JiZ0KHRoaXNbZV0sZS5zbGljZSgxKSx0aGlzKX19O3ZhciBidHQ9Z3R0LnByb3RvdHlwZTtmdW5jdGlvbiB5dHQodCxlKXtpZigobj0odD1lP3QudG9FeHBvbmVudGlhbChlLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIG4sbz10LnNsaWNlKDAsbik7cmV0dXJuW28ubGVuZ3RoPjE/b1swXStvLnNsaWNlKDIpOm8sK3Quc2xpY2UobisxKV19ZnVuY3Rpb24gX3R0KHQpe3JldHVybih0PXl0dChNYXRoLmFicyh0KSkpP3RbMV06TmFOfWh0dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmh0dCxoYXM6YnR0LmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbdXR0Kyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOmJ0dC5yZW1vdmUsY2xlYXI6YnR0LmNsZWFyLHZhbHVlczpidHQua2V5cyxzaXplOmJ0dC5zaXplLGVtcHR5OmJ0dC5lbXB0eSxlYWNoOmJ0dC5lYWNofTt2YXIgQ3R0LE10dD0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiB2dHQodCl7aWYoIShlPU10dC5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3JldHVybiBuZXcgeHR0KHtmaWxsOmVbMV0sYWxpZ246ZVsyXSxzaWduOmVbM10sc3ltYm9sOmVbNF0semVybzplWzVdLHdpZHRoOmVbNl0sY29tbWE6ZVs3XSxwcmVjaXNpb246ZVs4XSYmZVs4XS5zbGljZSgxKSx0cmltOmVbOV0sdHlwZTplWzEwXX0pfWZ1bmN0aW9uIHh0dCh0KXt0aGlzLmZpbGw9dm9pZCAwPT09dC5maWxsPyIgIjp0LmZpbGwrIiIsdGhpcy5hbGlnbj12b2lkIDA9PT10LmFsaWduPyI+Ijp0LmFsaWduKyIiLHRoaXMuc2lnbj12b2lkIDA9PT10LnNpZ24/Ii0iOnQuc2lnbisiIix0aGlzLnN5bWJvbD12b2lkIDA9PT10LnN5bWJvbD8iIjp0LnN5bWJvbCsiIix0aGlzLnplcm89ISF0Lnplcm8sdGhpcy53aWR0aD12b2lkIDA9PT10LndpZHRoP3ZvaWQgMDordC53aWR0aCx0aGlzLmNvbW1hPSEhdC5jb21tYSx0aGlzLnByZWNpc2lvbj12b2lkIDA9PT10LnByZWNpc2lvbj92b2lkIDA6K3QucHJlY2lzaW9uLHRoaXMudHJpbT0hIXQudHJpbSx0aGlzLnR5cGU9dm9pZCAwPT09dC50eXBlPyIiOnQudHlwZSsiIn1mdW5jdGlvbiBPdHQodCxlKXt2YXIgbj15dHQodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgbz1uWzBdLGk9blsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrbzpvLmxlbmd0aD5pKzE/by5zbGljZSgwLGkrMSkrIi4iK28uc2xpY2UoaSsxKTpvK25ldyBBcnJheShpLW8ubGVuZ3RoKzIpLmpvaW4oIjAiKX12dHQucHJvdG90eXBlPXh0dC5wcm90b3R5cGUseHR0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O3ZhciBQdHQ9eyIlIjpmdW5jdGlvbih0LGUpe3JldHVybigxMDAqdCkudG9GaXhlZChlKX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gdCsiIn0sZDpmdW5jdGlvbiB3dHQodCl7cmV0dXJuIE1hdGguYWJzKHQ9TWF0aC5yb3VuZCh0KSk+PTFlMjE/dC50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOnQudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9FeHBvbmVudGlhbChlKX0sZjpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRml4ZWQoZSl9LGc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b1ByZWNpc2lvbihlKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LGUpe3JldHVybiBPdHQoMTAwKnQsZSl9LHI6T3R0LHM6ZnVuY3Rpb24ga3R0KHQsZSl7dmFyIG49eXR0KHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIG89blswXSxpPW5bMV0sYT1pLShDdHQ9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKSsxLHI9by5sZW5ndGg7cmV0dXJuIGE9PT1yP286YT5yP28rbmV3IEFycmF5KGEtcisxKS5qb2luKCIwIik6YT4wP28uc2xpY2UoMCxhKSsiLiIrby5zbGljZShhKToiMC4iK25ldyBBcnJheSgxLWEpLmpvaW4oIjAiKSt5dHQodCxNYXRoLm1heCgwLGUrYS0xKSlbMF19LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX07ZnVuY3Rpb24gU3R0KHQpe3JldHVybiB0fXZhciBEdHQsRXR0LFJ0dCxBdHQ9QXJyYXkucHJvdG90eXBlLm1hcCxUdHQ9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCLCtSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIE50dCh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UodCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGUpLmRvbWFpbih0KX1yZXR1cm4gdGhpc30hKGZ1bmN0aW9uIHp0dCh0KXtEdHQ9KGZ1bmN0aW9uIGUodCl7dmFyIGU9dm9pZCAwPT09dC5ncm91cGluZ3x8dm9pZCAwPT09dC50aG91c2FuZHM/U3R0OihmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4sbyl7Zm9yKHZhciBpPW4ubGVuZ3RoLGE9W10scj0wLHM9dFswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5vJiYocz1NYXRoLm1heCgxLG8tbCkpLGEucHVzaChuLnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+bykpOylzPXRbcj0ocisxKSV0Lmxlbmd0aF07cmV0dXJuIGEucmV2ZXJzZSgpLmpvaW4oZSl9fSkoQXR0LmNhbGwodC5ncm91cGluZyxOdW1iZXIpLHQudGhvdXNhbmRzKyIiKSxvPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVswXSsiIixpPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVsxXSsiIixhPXZvaWQgMD09PXQuZGVjaW1hbD8iLiI6dC5kZWNpbWFsKyIiLHI9dm9pZCAwPT09dC5udW1lcmFscz9TdHQ6KGZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1swLTldL2csKGZ1bmN0aW9uKGUpe3JldHVybiB0WytlXX0pKX19KShBdHQuY2FsbCh0Lm51bWVyYWxzLFN0cmluZykpLGw9dm9pZCAwPT09dC5wZXJjZW50PyIlIjp0LnBlcmNlbnQrIiIsYz12b2lkIDA9PT10Lm1pbnVzPyItIjp0Lm1pbnVzKyIiLGQ9dm9pZCAwPT09dC5uYW4/Ik5hTiI6dC5uYW4rIiI7ZnVuY3Rpb24gcCh0KXt2YXIgbj0odD12dHQodCkpLmZpbGwscz10LmFsaWduLHA9dC5zaWduLG09dC5zeW1ib2wsdT10Lnplcm8sZj10LndpZHRoLGc9dC5jb21tYSxoPXQucHJlY2lzaW9uLGI9dC50cmltLHk9dC50eXBlOyJuIj09PXk/KGc9ITAseT0iZyIpOlB0dFt5XXx8KHZvaWQgMD09PWgmJihoPTEyKSxiPSEwLHk9ImciKSwodXx8IjAiPT09biYmIj0iPT09cykmJih1PSEwLG49IjAiLHM9Ij0iKTt2YXIgXz0iJCI9PT1tP286IiMiPT09bSYmL1tib3hYXS8udGVzdCh5KT8iMCIreS50b0xvd2VyQ2FzZSgpOiIiLEM9IiQiPT09bT9pOi9bJXBdLy50ZXN0KHkpP2w6IiIsTT1QdHRbeV0sdj0vW2RlZmdwcnMlXS8udGVzdCh5KTtmdW5jdGlvbiB4KHQpe3ZhciBvLGksbCxtPV8seD1DO2lmKCJjIj09PXkpeD1NKHQpK3gsdD0iIjtlbHNle3ZhciBPPSh0PSt0KTwwfHwxL3Q8MDtpZih0PWlzTmFOKHQpP2Q6TShNYXRoLmFicyh0KSxoKSxiJiYodD0oZnVuY3Rpb24gUCh0KXt0OmZvcih2YXIgZSxuPXQubGVuZ3RoLG89MSxpPS0xO288bjsrK28pc3dpdGNoKHRbb10pe2Nhc2UiLiI6aT1lPW87YnJlYWs7Y2FzZSIwIjowPT09aSYmKGk9byksZT1vO2JyZWFrO2RlZmF1bHQ6aWYoISt0W29dKWJyZWFrIHQ7aT4wJiYoaT0wKX1yZXR1cm4gaT4wP3Quc2xpY2UoMCxpKSt0LnNsaWNlKGUrMSk6dH0pKHQpKSxPJiYwPT0rdCYmIisiIT09cCYmKE89ITEpLG09KE8/IigiPT09cD9wOmM6Ii0iPT09cHx8IigiPT09cD8iIjpwKSttLHg9KCJzIj09PXk/VHR0WzgrQ3R0LzNdOiIiKSt4KyhPJiYiKCI9PT1wPyIpIjoiIiksdilmb3Iobz0tMSxpPXQubGVuZ3RoOysrbzxpOylpZig0OD4obD10LmNoYXJDb2RlQXQobykpfHxsPjU3KXt4PSg0Nj09PWw/YSt0LnNsaWNlKG8rMSk6dC5zbGljZShvKSkreCx0PXQuc2xpY2UoMCxvKTticmVha319ZyYmIXUmJih0PWUodCwxLzApKTt2YXIgdz1tLmxlbmd0aCt0Lmxlbmd0aCt4Lmxlbmd0aCxrPXc8Zj9uZXcgQXJyYXkoZi13KzEpLmpvaW4obik6IiI7c3dpdGNoKGcmJnUmJih0PWUoayt0LGsubGVuZ3RoP2YteC5sZW5ndGg6MS8wKSxrPSIiKSxzKXtjYXNlIjwiOnQ9bSt0K3grazticmVhaztjYXNlIj0iOnQ9bStrK3QreDticmVhaztjYXNlIl4iOnQ9ay5zbGljZSgwLHc9ay5sZW5ndGg+PjEpK20rdCt4K2suc2xpY2Uodyk7YnJlYWs7ZGVmYXVsdDp0PWsrbSt0K3h9cmV0dXJuIHIodCl9cmV0dXJuIGg9dm9pZCAwPT09aD82Oi9bZ3Byc10vLnRlc3QoeSk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxoKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxoKSkseC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0KyIifSx4fXJldHVybntmb3JtYXQ6cCxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24gbSh0LGUpe3ZhciBuPXAoKCh0PXZ0dCh0KSkudHlwZT0iZiIsdCkpLG89MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoX3R0KGUpLzMpKSksaT1NYXRoLnBvdygxMCwtbyksYT1UdHRbOCtvLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbihpKnQpK2F9fX19KSh0KSxFdHQ9RHR0LmZvcm1hdCxSdHQ9RHR0LmZvcm1hdFByZWZpeH0pKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KTt2YXIgSXR0PUFycmF5LnByb3RvdHlwZSxIdHQ9SXR0Lm1hcCxGdHQ9SXR0LnNsaWNlLEx0dD17bmFtZToiaW1wbGljaXQifTtmdW5jdGlvbiBCdHQoKXt2YXIgdD1ndHQoKSxlPVtdLG49W10sbz1MdHQ7ZnVuY3Rpb24gaShpKXt2YXIgYT1pKyIiLHI9dC5nZXQoYSk7aWYoIXIpe2lmKG8hPT1MdHQpcmV0dXJuIG87dC5zZXQoYSxyPWUucHVzaChpKSl9cmV0dXJuIG5bKHItMSklbi5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W10sdD1ndHQoKTtmb3IodmFyIG8sYSxyPS0xLHM9bi5sZW5ndGg7KytyPHM7KXQuaGFzKGE9KG89bltyXSkrIiIpfHx0LnNldChhLGUucHVzaChvKSk7cmV0dXJuIGl9LGkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49RnR0LmNhbGwodCksaSk6bi5zbGljZSgpfSxpLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxpKTpvfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnR0KGUsbikudW5rbm93bihvKX0sTnR0LmFwcGx5KGksYXJndW1lbnRzKSxpfWZ1bmN0aW9uIFZ0dCgpe3ZhciB0LGUsbj1CdHQoKS51bmtub3duKHZvaWQgMCksbz1uLmRvbWFpbixpPW4ucmFuZ2UsYT1bMCwxXSxyPSExLHM9MCxsPTAsYz0uNTtmdW5jdGlvbiBkKCl7dmFyIG49bygpLmxlbmd0aCxkPWFbMV08YVswXSxwPWFbZC0wXSxtPWFbMS1kXTt0PShtLXApL01hdGgubWF4KDEsbi1zKzIqbCksciYmKHQ9TWF0aC5mbG9vcih0KSkscCs9KG0tcC10KihuLXMpKSpjLGU9dCooMS1zKSxyJiYocD1NYXRoLnJvdW5kKHApLGU9TWF0aC5yb3VuZChlKSk7dmFyIHU9aDUobikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gcCt0KmV9KSk7cmV0dXJuIGkoZD91LnJldmVyc2UoKTp1KX1yZXR1cm4gZGVsZXRlIG4udW5rbm93bixuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obyh0KSxkKCkpOm8oKX0sbi5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1bK3RbMF0sK3RbMV1dLGQoKSk6YS5zbGljZSgpfSxuLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGE9Wyt0WzBdLCt0WzFdXSxyPSEwLGQoKX0sbi5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sbi5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG4ucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ISF0LGQoKSk6cn0sbi5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPU1hdGgubWluKDEsbD0rdCksZCgpKTpzfSxuLnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLHQpLGQoKSk6c30sbi5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K3QsZCgpKTpsfSxuLmFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksZCgpKTpjfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVnR0KG8oKSxhKS5yb3VuZChyKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSxOdHQuYXBwbHkoZCgpLGFyZ3VtZW50cyl9ZnVuY3Rpb24ganR0KHQpe3ZhciBlPXQuY29weTtyZXR1cm4gdC5wYWRkaW5nPXQucGFkZGluZ091dGVyLGRlbGV0ZSB0LnBhZGRpbmdJbm5lcixkZWxldGUgdC5wYWRkaW5nT3V0ZXIsdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGp0dChlKCkpfSx0fWZ1bmN0aW9uIFV0dCgpe3JldHVybiBqdHQoVnR0LmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uIEd0dCh0KXtyZXR1cm4rdH12YXIgV3R0PVswLDFdO2Z1bmN0aW9uIFl0dCh0KXtyZXR1cm4gdH1mdW5jdGlvbiBxdHQodCxlKXtyZXR1cm4oZS09dD0rdCk/ZnVuY3Rpb24obil7cmV0dXJuKG4tdCkvZX06KGZ1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSkoaXNOYU4oZSk/TmFOOi41KX1mdW5jdGlvbiBadHQodCl7dmFyIGUsbj10WzBdLG89dFt0Lmxlbmd0aC0xXTtyZXR1cm4gbj5vJiYoZT1uLG49byxvPWUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChuLE1hdGgubWluKG8sdCkpfX1mdW5jdGlvbiBYdHQodCxlLG4pe3ZhciBvPXRbMF0saT10WzFdLGE9ZVswXSxyPWVbMV07cmV0dXJuIGk8bz8obz1xdHQoaSxvKSxhPW4ocixhKSk6KG89cXR0KG8saSksYT1uKGEscikpLGZ1bmN0aW9uKHQpe3JldHVybiBhKG8odCkpfX1mdW5jdGlvbiBLdHQodCxlLG4pe3ZhciBvPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKS0xLGk9bmV3IEFycmF5KG8pLGE9bmV3IEFycmF5KG8pLHI9LTE7Zm9yKHRbb108dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpOysrcjxvOylpW3JdPXF0dCh0W3JdLHRbcisxXSksYVtyXT1uKGVbcl0sZVtyKzFdKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49cDUodCxlLDEsbyktMTtyZXR1cm4gYVtuXShpW25dKGUpKX19ZnVuY3Rpb24gSnR0KHQsZSl7cmV0dXJuIGUuZG9tYWluKHQuZG9tYWluKCkpLnJhbmdlKHQucmFuZ2UoKSkuaW50ZXJwb2xhdGUodC5pbnRlcnBvbGF0ZSgpKS5jbGFtcCh0LmNsYW1wKCkpLnVua25vd24odC51bmtub3duKCkpfWZ1bmN0aW9uIFF0dCgpe3ZhciB0LGUsbixvLGksYSxyPVd0dCxzPVd0dCxsPVo3LGM9WXR0O2Z1bmN0aW9uIGQoKXtyZXR1cm4gbz1NYXRoLm1pbihyLmxlbmd0aCxzLmxlbmd0aCk+Mj9LdHQ6WHR0LGk9YT1udWxsLHB9ZnVuY3Rpb24gcChlKXtyZXR1cm4gaXNOYU4oZT0rZSk/bjooaXx8KGk9byhyLm1hcCh0KSxzLGwpKSkodChjKGUpKSl9cmV0dXJuIHAuaW52ZXJ0PWZ1bmN0aW9uKG4pe3JldHVybiBjKGUoKGF8fChhPW8ocyxyLm1hcCh0KSxVNykpKShuKSkpfSxwLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1IdHQuY2FsbCh0LEd0dCksYz09PVl0dHx8KGM9WnR0KHIpKSxkKCkpOnIuc2xpY2UoKX0scC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1GdHQuY2FsbCh0KSxkKCkpOnMuc2xpY2UoKX0scC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBzPUZ0dC5jYWxsKHQpLGw9WDcsZCgpfSxwLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQ/WnR0KHIpOll0dCxwKTpjIT09WXR0fSxwLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsZCgpKTpsfSxwLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxwKTpufSxmdW5jdGlvbihuLG8pe3JldHVybiB0PW4sZT1vLGQoKX19ZnVuY3Rpb24gJHR0KHQsZSl7cmV0dXJuIFF0dCgpKHQsZSl9ZnVuY3Rpb24gdGV0KHQpe3ZhciBlPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuPWUoKTtyZXR1cm4gQzUoblswXSxuW24ubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCl9LHQudGlja0Zvcm1hdD1mdW5jdGlvbih0LG4pe3ZhciBvPWUoKTtyZXR1cm4oZnVuY3Rpb24gaSh0LGUsbixvKXt2YXIgaSxhPXY1KHQsZSxuKTtzd2l0Y2goKG89dnR0KG51bGw9PW8/IixmIjpvKSkudHlwZSl7Y2FzZSJzIjp2YXIgcj1NYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyhlKSk7cmV0dXJuIG51bGwhPW8ucHJlY2lzaW9ufHxpc05hTihpPShmdW5jdGlvbiBzKHQsZSl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoX3R0KGUpLzMpKSktX3R0KE1hdGguYWJzKHQpKSl9KShhLHIpKXx8KG8ucHJlY2lzaW9uPWkpLFJ0dChvLHIpO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPW8ucHJlY2lzaW9ufHxpc05hTihpPShmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsX3R0KGUpLV90dCh0KSkrMX0pKGEsTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpKSl8fChvLnByZWNpc2lvbj1pLSgiZSI9PT1vLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9by5wcmVjaXNpb258fGlzTmFOKGk9KGZ1bmN0aW9uIGModCl7cmV0dXJuIE1hdGgubWF4KDAsLV90dChNYXRoLmFicyh0KSkpfSkoYSkpfHwoby5wcmVjaXNpb249aS0yKigiJSI9PT1vLnR5cGUpKX1yZXR1cm4gRXR0KG8pfSkob1swXSxvW28ubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCxuKX0sdC5uaWNlPWZ1bmN0aW9uKG4pe251bGw9PW4mJihuPTEwKTt2YXIgbyxpPWUoKSxhPTAscj1pLmxlbmd0aC0xLHM9aVthXSxsPWlbcl07cmV0dXJuIGw8cyYmKG89cyxzPWwsbD1vLG89YSxhPXIscj1vKSwobz1NNShzLGwsbikpPjA/bz1NNShzPU1hdGguZmxvb3Iocy9vKSpvLGw9TWF0aC5jZWlsKGwvbykqbyxuKTpvPDAmJihvPU01KHM9TWF0aC5jZWlsKHMqbykvbyxsPU1hdGguZmxvb3IobCpvKS9vLG4pKSxvPjA/KGlbYV09TWF0aC5mbG9vcihzL28pKm8saVtyXT1NYXRoLmNlaWwobC9vKSpvLGUoaSkpOm88MCYmKGlbYV09TWF0aC5jZWlsKHMqbykvbyxpW3JdPU1hdGguZmxvb3IobCpvKS9vLGUoaSkpLHR9LHR9ZnVuY3Rpb24gZWV0KCl7dmFyIHQ9JHR0KFl0dCxZdHQpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSnR0KHQsZWV0KCkpfSxOdHQuYXBwbHkodCxhcmd1bWVudHMpLHRldCh0KX1mdW5jdGlvbiBuZXQodCxlKXt2YXIgbixvPTAsaT0odD10LnNsaWNlKCkpLmxlbmd0aC0xLGE9dFtvXSxyPXRbaV07cmV0dXJuIHI8YSYmKG49byxvPWksaT1uLG49YSxhPXIscj1uKSx0W29dPWUuZmxvb3IoYSksdFtpXT1lLmNlaWwociksdH1mdW5jdGlvbiBvZXQodCl7cmV0dXJuIE1hdGgubG9nKHQpfWZ1bmN0aW9uIGlldCh0KXtyZXR1cm4gTWF0aC5leHAodCl9ZnVuY3Rpb24gYWV0KHQpe3JldHVybi1NYXRoLmxvZygtdCl9ZnVuY3Rpb24gcmV0KHQpe3JldHVybi1NYXRoLmV4cCgtdCl9ZnVuY3Rpb24gc2V0KHQpe3JldHVybiBpc0Zpbml0ZSh0KT8rKCIxZSIrdCk6dDwwPzA6dH1mdW5jdGlvbiBjZXQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi10KC1lKX19ZnVuY3Rpb24gZGV0KHQpe3ZhciBlLG4sbz10KG9ldCxpZXQpLGk9by5kb21haW4sYT0xMDtmdW5jdGlvbiByKCl7cmV0dXJuIGU9KGZ1bmN0aW9uIHIodCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5sb2coZSkvdH0pfSkoYSksbj0oZnVuY3Rpb24gcyh0KXtyZXR1cm4gMTA9PT10P3NldDp0PT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyh0LGUpfX0pKGEpLGkoKVswXTwwPyhlPWNldChlKSxuPWNldChuKSx0KGFldCxyZXQpKTp0KG9ldCxpZXQpLG99cmV0dXJuIG8uYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxyKCkpOmF9LG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpKHQpLHIoKSk6aSgpfSxvLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBvLHI9aSgpLHM9clswXSxsPXJbci5sZW5ndGgtMV07KG89bDxzKSYmKG09cyxzPWwsbD1tKTt2YXIgYyxkLHAsbT1lKHMpLHU9ZShsKSxmPW51bGw9PXQ/MTA6K3QsZz1bXTtpZighKGElMSkmJnUtbTxmKXtpZihtPU1hdGgucm91bmQobSktMSx1PU1hdGgucm91bmQodSkrMSxzPjApe2Zvcig7bTx1OysrbSlmb3IoZD0xLGM9bihtKTtkPGE7KytkKWlmKCEoKHA9YypkKTxzKSl7aWYocD5sKWJyZWFrO2cucHVzaChwKX19ZWxzZSBmb3IoO208dTsrK20pZm9yKGQ9YS0xLGM9bihtKTtkPj0xOy0tZClpZighKChwPWMqZCk8cykpe2lmKHA+bClicmVhaztnLnB1c2gocCl9fWVsc2UgZz1DNShtLHUsTWF0aC5taW4odS1tLGYpKS5tYXAobik7cmV0dXJuIG8/Zy5yZXZlcnNlKCk6Z30sby50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsaSl7aWYobnVsbD09aSYmKGk9MTA9PT1hPyIuMGUiOiIsIiksImZ1bmN0aW9uIiE9dHlwZW9mIGkmJihpPUV0dChpKSksdD09PTEvMClyZXR1cm4gaTtudWxsPT10JiYodD0xMCk7dmFyIHI9TWF0aC5tYXgoMSxhKnQvby50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBvPXQvbihNYXRoLnJvdW5kKGUodCkpKTtyZXR1cm4gbyphPGEtLjUmJihvKj1hKSxvPD1yP2kodCk6IiJ9fSxvLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gaShuZXQoaSgpLHtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmZsb29yKGUodCkpKX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmNlaWwoZSh0KSkpfX0pKX0sb31mdW5jdGlvbiBwZXQoKXt2YXIgdD1kZXQoUXR0KCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSnR0KHQscGV0KCkpLmJhc2UodC5iYXNlKCkpfSxOdHQuYXBwbHkodCxhcmd1bWVudHMpLHR9dmFyIG1ldD1uZXcgRGF0ZSx1ZXQ9bmV3IERhdGU7ZnVuY3Rpb24gZmV0KHQsZSxuLG8pe2Z1bmN0aW9uIGkoZSl7cmV0dXJuIHQoZT0wPT09YXJndW1lbnRzLmxlbmd0aD9uZXcgRGF0ZTpuZXcgRGF0ZSgrZSkpLGV9cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZSgrZSkpLGV9LGkuY2VpbD1mdW5jdGlvbihuKXtyZXR1cm4gdChuPW5ldyBEYXRlKG4tMSkpLGUobiwxKSx0KG4pLG59LGkucm91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9aSh0KSxuPWkuY2VpbCh0KTtyZXR1cm4gdC1lPG4tdD9lOm59LGkub2Zmc2V0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodD1uZXcgRGF0ZSgrdCksbnVsbD09bj8xOk1hdGguZmxvb3IobikpLHR9LGkucmFuZ2U9ZnVuY3Rpb24obixvLGEpe3ZhciByLHM9W107aWYobj1pLmNlaWwobiksYT1udWxsPT1hPzE6TWF0aC5mbG9vcihhKSwhKG48byYmYT4wKSlyZXR1cm4gcztkb3tzLnB1c2gocj1uZXcgRGF0ZSgrbikpLGUobixhKSx0KG4pfXdoaWxlKHI8biYmbjxvKTtyZXR1cm4gc30saS5maWx0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGZldCgoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQsbyl7aWYodD49dClpZihvPDApZm9yKDsrK288PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLW8+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLG8pe3JldHVybiBtZXQuc2V0VGltZSgrZSksdWV0LnNldFRpbWUoK28pLHQobWV0KSx0KHVldCksTWF0aC5mbG9vcihuKG1ldCx1ZXQpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKG8/ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX12YXIgZ2V0PWZldCgoZnVuY3Rpb24oKXt9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSkpO2dldC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2ZldCgoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS90KSp0KX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0VGltZSgrZStuKnQpfSksKGZ1bmN0aW9uKGUsbil7cmV0dXJuKG4tZSkvdH0pKTpnZXQ6bnVsbH07dmFyIGhldD1nZXQsYmV0PTFlMyx5ZXQ9NmU0LF9ldD0zNmU1LENldD04NjRlNSxNZXQ9NjA0OGU1LHZldD1mZXQoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCkpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqYmV0KX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2JldH0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSkseGV0PWZldCgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS10LmdldFNlY29uZHMoKSpiZXQpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqeWV0KX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL3lldH0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9KSksT2V0PWZldCgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS10LmdldFNlY29uZHMoKSpiZXQtdC5nZXRNaW51dGVzKCkqeWV0KX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKl9ldCl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9fZXR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pKSxQZXQ9ZmV0KChmdW5jdGlvbih0KXt0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqeWV0KS9DZXR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpLTF9KSk7ZnVuY3Rpb24gd2V0KHQpe3JldHVybiBmZXQoKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKnlldCkvTWV0fSkpfXZhciBrZXQ9d2V0KDApLERldD13ZXQoMSk7d2V0KDIpLHdldCgzKTt2YXIgRWV0PXdldCg0KTt3ZXQoNSksd2V0KDYpO3ZhciBSZXQ9ZmV0KChmdW5jdGlvbih0KXt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSksQWV0PWZldCgoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7QWV0LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/ZmV0KChmdW5jdGlvbihlKXtlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRGdWxsWWVhcigpL3QpKnQpLGUuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrbip0KX0pKTpudWxsfTt2YXIgVGV0PUFldCxOZXQ9ZmV0KChmdW5jdGlvbih0KXt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvQ2V0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSkpO2Z1bmN0aW9uIHpldCh0KXtyZXR1cm4gZmV0KChmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9NZXR9KSl9dmFyIElldD16ZXQoMCksSGV0PXpldCgxKTt6ZXQoMiksemV0KDMpO3ZhciBGZXQ9emV0KDQpO3pldCg1KSx6ZXQoNik7dmFyIExldD1mZXQoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSkpO0xldC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP2ZldCgoZnVuY3Rpb24oZSl7ZS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0VVRDRnVsbFllYXIoKS90KSp0KSxlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK24qdCl9KSk6bnVsbH07dmFyIEJldD1MZXQ7ZnVuY3Rpb24gVmV0KHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpO3JldHVybiBlLnNldEZ1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUodC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKX1mdW5jdGlvbiBqZXQodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gVWV0KHQsZSxuKXtyZXR1cm57eTp0LG06ZSxkOm4sSDowLE06MCxTOjAsTDowfX12YXIgR2V0LFdldCxZZXQ9eyItIjoiIixfOiIgIiwwOiIwIn0scWV0PS9eXHMqXGQrLyxaZXQ9L14lLyxYZXQ9L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uIEtldCh0LGUsbil7dmFyIG89dDwwPyItIjoiIixpPShvPy10OnQpKyIiLGE9aS5sZW5ndGg7cmV0dXJuIG8rKGE8bj9uZXcgQXJyYXkobi1hKzEpLmpvaW4oZSkraTppKX1mdW5jdGlvbiBKZXQodCl7cmV0dXJuIHQucmVwbGFjZShYZXQsIlxcJCYiKX1mdW5jdGlvbiBRZXQodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKEpldCkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uICRldCh0KXtmb3IodmFyIGU9e30sbj0tMSxvPXQubGVuZ3RoOysrbjxvOyllW3Rbbl0udG9Mb3dlckNhc2UoKV09bjtyZXR1cm4gZX1mdW5jdGlvbiB0bnQodCxlLG4pe3ZhciBvPXFldC5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gbz8odC53PStvWzBdLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVudCh0LGUsbil7dmFyIG89cWV0LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiBvPyh0LnU9K29bMF0sbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbm50KHQsZSxuKXt2YXIgbz1xZXQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIG8/KHQuVT0rb1swXSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvbnQodCxlLG4pe3ZhciBvPXFldC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gbz8odC5WPStvWzBdLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGludCh0LGUsbil7dmFyIG89cWV0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBvPyh0Llc9K29bMF0sbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYW50KHQsZSxuKXt2YXIgbz1xZXQuZXhlYyhlLnNsaWNlKG4sbis0KSk7cmV0dXJuIG8/KHQueT0rb1swXSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBybnQodCxlLG4pe3ZhciBvPXFldC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gbz8odC55PStvWzBdKygrb1swXT42OD8xOTAwOjJlMyksbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc250KHQsZSxuKXt2YXIgbz0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIG8/KHQuWj1vWzFdPzA6LShvWzJdKyhvWzNdfHwiMDAiKSksbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbG50KHQsZSxuKXt2YXIgbz1xZXQuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIG8/KHQucT0zKm9bMF0tMyxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBjbnQodCxlLG4pe3ZhciBvPXFldC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gbz8odC5tPW9bMF0tMSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBkbnQodCxlLG4pe3ZhciBvPXFldC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gbz8odC5kPStvWzBdLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHBudCh0LGUsbil7dmFyIG89cWV0LmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiBvPyh0Lm09MCx0LmQ9K29bMF0sbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbW50KHQsZSxuKXt2YXIgbz1xZXQuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIG8/KHQuSD0rb1swXSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB1bnQodCxlLG4pe3ZhciBvPXFldC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gbz8odC5NPStvWzBdLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGZudCh0LGUsbil7dmFyIG89cWV0LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBvPyh0LlM9K29bMF0sbitvWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZ250KHQsZSxuKXt2YXIgbz1xZXQuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIG8/KHQuTD0rb1swXSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBobnQodCxlLG4pe3ZhciBvPXFldC5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gbz8odC5MPU1hdGguZmxvb3Iob1swXS8xZTMpLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGJudCh0LGUsbil7dmFyIG89WmV0LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiBvP24rb1swXS5sZW5ndGg6LTF9ZnVuY3Rpb24geW50KHQsZSxuKXt2YXIgbz1xZXQuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gbz8odC5RPStvWzBdLG4rb1swXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIF9udCh0LGUsbil7dmFyIG89cWV0LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIG8/KHQucz0rb1swXSxuK29bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBDbnQodCxlKXtyZXR1cm4gS2V0KHQuZ2V0RGF0ZSgpLGUsMil9ZnVuY3Rpb24gTW50KHQsZSl7cmV0dXJuIEtldCh0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiB2bnQodCxlKXtyZXR1cm4gS2V0KHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiB4bnQodCxlKXtyZXR1cm4gS2V0KDErUGV0LmNvdW50KFRldCh0KSx0KSxlLDMpfWZ1bmN0aW9uIE9udCh0LGUpe3JldHVybiBLZXQodC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIFBudCh0LGUpe3JldHVybiBPbnQodCxlKSsiMDAwIn1mdW5jdGlvbiB3bnQodCxlKXtyZXR1cm4gS2V0KHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24ga250KHQsZSl7cmV0dXJuIEtldCh0LmdldE1pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIFNudCh0LGUpe3JldHVybiBLZXQodC5nZXRTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBEbnQodCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIEVudCh0LGUpe3JldHVybiBLZXQoa2V0LmNvdW50KFRldCh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gUm50KHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIGU+PTR8fDA9PT1lP0VldCh0KTpFZXQuY2VpbCh0KX1mdW5jdGlvbiBBbnQodCxlKXtyZXR1cm4gdD1SbnQodCksS2V0KEVldC5jb3VudChUZXQodCksdCkrKDQ9PT1UZXQodCkuZ2V0RGF5KCkpLGUsMil9ZnVuY3Rpb24gVG50KHQpe3JldHVybiB0LmdldERheSgpfWZ1bmN0aW9uIE5udCh0LGUpe3JldHVybiBLZXQoRGV0LmNvdW50KFRldCh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gem50KHQsZSl7cmV0dXJuIEtldCh0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gSW50KHQsZSl7cmV0dXJuIEtldCgodD1SbnQodCkpLmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gSG50KHQsZSl7cmV0dXJuIEtldCh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gRm50KHQsZSl7dmFyIG49dC5nZXREYXkoKTtyZXR1cm4gS2V0KCh0PW4+PTR8fDA9PT1uP0VldCh0KTpFZXQuY2VpbCh0KSkuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBMbnQodCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihlPjA/Ii0iOihlKj0tMSwiKyIpKStLZXQoZS82MHwwLCIwIiwyKStLZXQoZSU2MCwiMCIsMil9ZnVuY3Rpb24gQm50KHQsZSl7cmV0dXJuIEtldCh0LmdldFVUQ0RhdGUoKSxlLDIpfWZ1bmN0aW9uIFZudCh0LGUpe3JldHVybiBLZXQodC5nZXRVVENIb3VycygpLGUsMil9ZnVuY3Rpb24gam50KHQsZSl7cmV0dXJuIEtldCh0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gVW50KHQsZSl7cmV0dXJuIEtldCgxK05ldC5jb3VudChCZXQodCksdCksZSwzKX1mdW5jdGlvbiBHbnQodCxlKXtyZXR1cm4gS2V0KHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBXbnQodCxlKXtyZXR1cm4gR250KHQsZSkrIjAwMCJ9ZnVuY3Rpb24gWW50KHQsZSl7cmV0dXJuIEtldCh0LmdldFVUQ01vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIHFudCh0LGUpe3JldHVybiBLZXQodC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBabnQodCxlKXtyZXR1cm4gS2V0KHQuZ2V0VVRDU2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gWG50KHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBLbnQodCxlKXtyZXR1cm4gS2V0KElldC5jb3VudChCZXQodCktMSx0KSxlLDIpfWZ1bmN0aW9uIEpudCh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiBlPj00fHwwPT09ZT9GZXQodCk6RmV0LmNlaWwodCl9ZnVuY3Rpb24gUW50KHQsZSl7cmV0dXJuIHQ9Sm50KHQpLEtldChGZXQuY291bnQoQmV0KHQpLHQpKyg0PT09QmV0KHQpLmdldFVUQ0RheSgpKSxlLDIpfWZ1bmN0aW9uICRudCh0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiB0b3QodCxlKXtyZXR1cm4gS2V0KEhldC5jb3VudChCZXQodCktMSx0KSxlLDIpfWZ1bmN0aW9uIGVvdCh0LGUpe3JldHVybiBLZXQodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIG5vdCh0LGUpe3JldHVybiBLZXQoKHQ9Sm50KHQpKS5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIG9vdCh0LGUpe3JldHVybiBLZXQodC5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIGlvdCh0LGUpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIEtldCgodD1uPj00fHwwPT09bj9GZXQodCk6RmV0LmNlaWwodCkpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gYW90KCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiByb3QoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gc290KHQpe3JldHVybit0fWZ1bmN0aW9uIGxvdCh0KXtyZXR1cm4gTWF0aC5mbG9vcigrdC8xZTMpfSEoZnVuY3Rpb24gY290KHQpe0dldD0oZnVuY3Rpb24gZSh0KXt2YXIgZT10LmRhdGVUaW1lLG49dC5kYXRlLG89dC50aW1lLGk9dC5wZXJpb2RzLGE9dC5kYXlzLHI9dC5zaG9ydERheXMscz10Lm1vbnRocyxsPXQuc2hvcnRNb250aHMsYz1RZXQoaSksZD0kZXQoaSkscD1RZXQoYSksbT0kZXQoYSksdT1RZXQociksZj0kZXQociksZz1RZXQocyksaD0kZXQocyksYj1RZXQobCkseT0kZXQobCksXz17YTpmdW5jdGlvbiBDKHQpe3JldHVybiByW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uIE0odCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24gdih0KXtyZXR1cm4gbFt0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uIHgodCl7cmV0dXJuIHNbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6Q250LGU6Q250LGY6UG50LGc6SW50LEc6Rm50LEg6TW50LEk6dm50LGo6eG50LEw6T250LG06d250LE06a250LHA6ZnVuY3Rpb24gTyh0KXtyZXR1cm4gaVsrKHQuZ2V0SG91cnMoKT49MTIpXX0scTpmdW5jdGlvbiBQKHQpe3JldHVybiAxK35+KHQuZ2V0TW9udGgoKS8zKX0sUTpzb3Qsczpsb3QsUzpTbnQsdTpEbnQsVTpFbnQsVjpBbnQsdzpUbnQsVzpObnQseDpudWxsLFg6bnVsbCx5OnpudCxZOkhudCxaOkxudCwiJSI6cm90fSx3PXthOmZ1bmN0aW9uIGsodCl7cmV0dXJuIHJbdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24gUyh0KXtyZXR1cm4gYVt0LmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbiBEKHQpe3JldHVybiBsW3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24gRSh0KXtyZXR1cm4gc1t0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpCbnQsZTpCbnQsZjpXbnQsZzpub3QsRzppb3QsSDpWbnQsSTpqbnQsajpVbnQsTDpHbnQsbTpZbnQsTTpxbnQscDpmdW5jdGlvbiBSKHQpe3JldHVybiBpWysodC5nZXRVVENIb3VycygpPj0xMildfSxxOmZ1bmN0aW9uIEEodCl7cmV0dXJuIDErfn4odC5nZXRVVENNb250aCgpLzMpfSxROnNvdCxzOmxvdCxTOlpudCx1OlhudCxVOktudCxWOlFudCx3OiRudCxXOnRvdCx4Om51bGwsWDpudWxsLHk6ZW90LFk6b290LFo6YW90LCIlIjpyb3R9LFQ9e2E6ZnVuY3Rpb24gTih0LGUsbil7dmFyIG89dS5leGVjKGUuc2xpY2UobikpO3JldHVybiBvPyh0Lnc9ZltvWzBdLnRvTG93ZXJDYXNlKCldLG4rb1swXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uIHoodCxlLG4pe3ZhciBvPXAuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gbz8odC53PW1bb1swXS50b0xvd2VyQ2FzZSgpXSxuK29bMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbiBJKHQsZSxuKXt2YXIgbz1iLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIG8/KHQubT15W29bMF0udG9Mb3dlckNhc2UoKV0sbitvWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24gSCh0LGUsbil7dmFyIG89Zy5leGVjKGUuc2xpY2UobikpO3JldHVybiBvPyh0Lm09aFtvWzBdLnRvTG93ZXJDYXNlKCldLG4rb1swXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uIEYodCxuLG8pe3JldHVybiBHKHQsZSxuLG8pfSxkOmRudCxlOmRudCxmOmhudCxnOnJudCxHOmFudCxIOm1udCxJOm1udCxqOnBudCxMOmdudCxtOmNudCxNOnVudCxwOmZ1bmN0aW9uIEwodCxlLG4pe3ZhciBvPWMuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gbz8odC5wPWRbb1swXS50b0xvd2VyQ2FzZSgpXSxuK29bMF0ubGVuZ3RoKTotMX0scTpsbnQsUTp5bnQsczpfbnQsUzpmbnQsdTplbnQsVTpubnQsVjpvbnQsdzp0bnQsVzppbnQseDpmdW5jdGlvbiBCKHQsZSxvKXtyZXR1cm4gRyh0LG4sZSxvKX0sWDpmdW5jdGlvbiBWKHQsZSxuKXtyZXR1cm4gRyh0LG8sZSxuKX0seTpybnQsWTphbnQsWjpzbnQsIiUiOmJudH07ZnVuY3Rpb24gaih0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgbyxpLGEscj1bXSxzPS0xLGw9MCxjPXQubGVuZ3RoO2ZvcihuIGluc3RhbmNlb2YgRGF0ZXx8KG49bmV3IERhdGUoK24pKTsrK3M8YzspMzc9PT10LmNoYXJDb2RlQXQocykmJihyLnB1c2godC5zbGljZShsLHMpKSxudWxsIT0oaT1ZZXRbbz10LmNoYXJBdCgrK3MpXSk/bz10LmNoYXJBdCgrK3MpOmk9ImUiPT09bz8iICI6IjAiLChhPWVbb10pJiYobz1hKG4saSkpLHIucHVzaChvKSxsPXMrMSk7cmV0dXJuIHIucHVzaCh0LnNsaWNlKGwscykpLHIuam9pbigiIil9fWZ1bmN0aW9uIFUodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIG8saSxhPVVldCgxOTAwLHZvaWQgMCwxKTtpZihHKGEsdCxuKz0iIiwwKSE9bi5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gYSlyZXR1cm4gbmV3IERhdGUoYS5RKTtpZigicyJpbiBhKXJldHVybiBuZXcgRGF0ZSgxZTMqYS5zKygiTCJpbiBhP2EuTDowKSk7aWYoZSYmISgiWiJpbiBhKSYmKGEuWj0wKSwicCJpbiBhJiYoYS5IPWEuSCUxMisxMiphLnApLHZvaWQgMD09PWEubSYmKGEubT0icSJpbiBhP2EucTowKSwiViJpbiBhKXtpZihhLlY8MXx8YS5WPjUzKXJldHVybiBudWxsOyJ3ImluIGF8fChhLnc9MSksIloiaW4gYT8oaT0obz1qZXQoVWV0KGEueSwwLDEpKSkuZ2V0VVRDRGF5KCksbz1pPjR8fDA9PT1pP0hldC5jZWlsKG8pOkhldChvKSxvPU5ldC5vZmZzZXQobyw3KihhLlYtMSkpLGEueT1vLmdldFVUQ0Z1bGxZZWFyKCksYS5tPW8uZ2V0VVRDTW9udGgoKSxhLmQ9by5nZXRVVENEYXRlKCkrKGEudys2KSU3KTooaT0obz1WZXQoVWV0KGEueSwwLDEpKSkuZ2V0RGF5KCksbz1pPjR8fDA9PT1pP0RldC5jZWlsKG8pOkRldChvKSxvPVBldC5vZmZzZXQobyw3KihhLlYtMSkpLGEueT1vLmdldEZ1bGxZZWFyKCksYS5tPW8uZ2V0TW9udGgoKSxhLmQ9by5nZXREYXRlKCkrKGEudys2KSU3KX1lbHNlKCJXImluIGF8fCJVImluIGEpJiYoInciaW4gYXx8KGEudz0idSJpbiBhP2EudSU3OiJXImluIGE/MTowKSxpPSJaImluIGE/amV0KFVldChhLnksMCwxKSkuZ2V0VVRDRGF5KCk6VmV0KFVldChhLnksMCwxKSkuZ2V0RGF5KCksYS5tPTAsYS5kPSJXImluIGE/KGEudys2KSU3KzcqYS5XLShpKzUpJTc6YS53KzcqYS5VLShpKzYpJTcpO3JldHVybiJaImluIGE/KGEuSCs9YS5aLzEwMHwwLGEuTSs9YS5aJTEwMCxqZXQoYSkpOlZldChhKX19ZnVuY3Rpb24gRyh0LGUsbixvKXtmb3IodmFyIGksYSxyPTAscz1lLmxlbmd0aCxsPW4ubGVuZ3RoO3I8czspe2lmKG8+PWwpcmV0dXJuLTE7aWYoMzc9PT0oaT1lLmNoYXJDb2RlQXQocisrKSkpe2lmKGk9ZS5jaGFyQXQocisrKSwhKGE9VFtpIGluIFlldD9lLmNoYXJBdChyKyspOmldKXx8KG89YSh0LG4sbykpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1uLmNoYXJDb2RlQXQobysrKSlyZXR1cm4tMX1yZXR1cm4gb31yZXR1cm4gXy54PWoobixfKSxfLlg9aihvLF8pLF8uYz1qKGUsXyksdy54PWoobix3KSx3Llg9aihvLHcpLHcuYz1qKGUsdykse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1qKHQrPSIiLF8pO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPVUodCs9IiIsITEpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1qKHQrPSIiLHcpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y1BhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPVUodCs9IiIsITApO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9fX0pKHQpLFdldD1HZXQuZm9ybWF0fSkoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgZG90PTMxNTM2ZTY7ZnVuY3Rpb24gcG90KHQpe3JldHVybiBuZXcgRGF0ZSh0KX1mdW5jdGlvbiBtb3QodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gdW90KHQsZSxuLG8saSxhLHIscyxsKXt2YXIgYz0kdHQoWXR0LFl0dCksZD1jLmludmVydCxwPWMuZG9tYWluLG09bCgiLiVMIiksdT1sKCI6JVMiKSxmPWwoIiVJOiVNIiksZz1sKCIlSSAlcCIpLGg9bCgiJWEgJWQiKSxiPWwoIiViICVkIikseT1sKCIlQiIpLF89bCgiJVkiKSxDPVtbciwxLDFlM10sW3IsNSw1ZTNdLFtyLDE1LDE1ZTNdLFtyLDMwLDNlNF0sW2EsMSw2ZTRdLFthLDUsM2U1XSxbYSwxNSw5ZTVdLFthLDMwLDE4ZTVdLFtpLDEsMzZlNV0sW2ksMywxMDhlNV0sW2ksNiwyMTZlNV0sW2ksMTIsNDMyZTVdLFtvLDEsODY0ZTVdLFtvLDIsMTcyOGU1XSxbbiwxLDYwNDhlNV0sW2UsMSwyNTkyZTZdLFtlLDMsNzc3NmU2XSxbdCwxLGRvdF1dO2Z1bmN0aW9uIE0ocyl7cmV0dXJuKHIocyk8cz9tOmEocyk8cz91Omkocyk8cz9mOm8ocyk8cz9nOmUocyk8cz9uKHMpPHM/aDpiOnQocyk8cz95Ol8pKHMpfWZ1bmN0aW9uIHYoZSxuLG8saSl7aWYobnVsbD09ZSYmKGU9MTApLCJudW1iZXIiPT10eXBlb2YgZSl7dmFyIGE9TWF0aC5hYnMoby1uKS9lLHI9ZDUoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzJdfSkpLnJpZ2h0KEMsYSk7cj09PUMubGVuZ3RoPyhpPXY1KG4vZG90LG8vZG90LGUpLGU9dCk6cj8oaT0ocj1DW2EvQ1tyLTFdWzJdPENbcl1bMl0vYT9yLTE6cl0pWzFdLGU9clswXSk6KGk9TWF0aC5tYXgodjUobixvLGUpLDEpLGU9cyl9cmV0dXJuIG51bGw9PWk/ZTplLmV2ZXJ5KGkpfXJldHVybiBjLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IERhdGUoZCh0KSl9LGMuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3AoSHR0LmNhbGwodCxtb3QpKTpwKCkubWFwKHBvdCl9LGMudGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgbixvPXAoKSxpPW9bMF0sYT1vW28ubGVuZ3RoLTFdLHI9YTxpO3JldHVybiByJiYobj1pLGk9YSxhPW4pLG49KG49dih0LGksYSxlKSk/bi5yYW5nZShpLGErMSk6W10scj9uLnJldmVyc2UoKTpufSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09ZT9NOmwoZSl9LGMubmljZT1mdW5jdGlvbih0LGUpe3ZhciBuPXAoKTtyZXR1cm4odD12KHQsblswXSxuW24ubGVuZ3RoLTFdLGUpKT9wKG5ldChuLHQpKTpjfSxjLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSnR0KGMsdW90KHQsZSxuLG8saSxhLHIscyxsKSl9LGN9ZnVuY3Rpb24gZm90KCl7cmV0dXJuIE50dC5hcHBseSh1b3QoVGV0LFJldCxrZXQsUGV0LE9ldCx4ZXQsdmV0LGhldCxXZXQpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIGdvdCh0KXtmb3IodmFyIGU9dC5sZW5ndGgvNnwwLG49bmV3IEFycmF5KGUpLG89MDtvPGU7KW5bb109IiMiK3Quc2xpY2UoNipvLDYqKytvKTtyZXR1cm4gbn1mdW5jdGlvbiBob3QodCl7cmV0dXJuIEg3KHRbdC5sZW5ndGgtMV0pfXZhciBib3Q9aG90KG5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcChnb3QpKSx5b3Q9aG90KG5ldyBBcnJheSgzKS5jb25jYXQoImYwZjBmMGJkYmRiZDYzNjM2MyIsImY3ZjdmN2NjY2NjYzk2OTY5NjUyNTI1MiIsImY3ZjdmN2NjY2NjYzk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNTAwMDAwMCIpLm1hcChnb3QpKSxfb3Q9aG90KG5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcChnb3QpKTtmdW5jdGlvbiBDb3QodCl7cmV0dXJuIGZ1bmN0aW9uIGUoKXtyZXR1cm4gdH19ZnVuY3Rpb24gTW90KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiB2b3QodCl7cmV0dXJuIG5ldyBNb3QodCl9ZnVuY3Rpb24geG90KHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIE9vdCh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBQb3QoKXt2YXIgdD14b3QsZT1Pb3Qsbj1Db3QoITApLG89bnVsbCxpPXZvdCxhPW51bGw7ZnVuY3Rpb24gcihyKXt2YXIgcyxsLGMsZD1yLmxlbmd0aCxwPSExO2ZvcihudWxsPT1vJiYoYT1pKGM9bXR0KCkpKSxzPTA7czw9ZDsrK3MpIShzPGQmJm4obD1yW3NdLHMscikpPT09cCYmKChwPSFwKT9hLmxpbmVTdGFydCgpOmEubGluZUVuZCgpKSxwJiZhLnBvaW50KCt0KGwscyxyKSwrZShsLHMscikpO2lmKGMpcmV0dXJuIGE9bnVsbCxjKyIifHxudWxsfXJldHVybiByLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpDb3QoK2UpLHIpOnR9LHIueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkNvdCgrdCkscik6ZX0sci5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Q290KCEhdCkscik6bn0sci5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG51bGwhPW8mJihhPWkobykpLHIpOml9LHIuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9vPWE9bnVsbDphPWkobz10KSxyKTpvfSxyfWZ1bmN0aW9uIHdvdCh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQuX3gxK3QuX2sqKHQuX3gyLXQuX3gwKSx0Ll95MSt0Ll9rKih0Ll95Mi10Ll95MCksdC5feDIrdC5fayoodC5feDEtZSksdC5feTIrdC5fayoodC5feTEtbiksdC5feDIsdC5feTIpfWZ1bmN0aW9uIGtvdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9ZnVuY3Rpb24gU290KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9TW90LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpfX19LGtvdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6d290KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT10LHRoaXMuX3kxPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDp3b3QodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19LFNvdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mil9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItdCxvPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4rbypvLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OiEoZnVuY3Rpb24gaSh0LGUsbil7dmFyIG89dC5feDEsaT10Ll95MSxhPXQuX3gyLHI9dC5feTI7aWYodC5fbDAxX2E+MWUtMTIpe3ZhciBzPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGw9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO289KG8qcy10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9sLGk9KGkqcy10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9sfWlmKHQuX2wyM19hPjFlLTEyKXt2YXIgYz0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSxkPTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTthPShhKmMrdC5feDEqdC5fbDIzXzJhLWUqdC5fbDEyXzJhKS9kLHI9KHIqYyt0Ll95MSp0Ll9sMjNfMmEtbip0Ll9sMTJfMmEpL2R9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG8saSxhLHIsdC5feDIsdC5feTIpfSkodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgRG90PShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IFNvdCh0LGUpOm5ldyBrb3QodCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KSguNSk7Y29uc3QgRW90PTFlNCxSb3Q9LjAwMSxBb3Q9RXR0KCIuMn5lIiksVG90PUV0dCgiLjR+ciIpLE5vdD1FdHQoIix+Iik7ZnVuY3Rpb24gem90KHQpe2lmKDA9PT10KXJldHVybiIwIjtjb25zdCBlPU1hdGguYWJzKHQpO3JldHVybiBlPj1Fb3R8fGU8Um90P0FvdCh0KTpUb3QodCl9Y29uc3QgSW90PXtmb3JtYXRUaWNrOnpvdCxmb3JtYXRTaG9ydDp6b3QsZm9ybWF0UmVhZGFibGUodCl7Y29uc3QgZT1NYXRoLmFicyh0KTtyZXR1cm4gZT49RW90fHxlPFJvdD9Bb3QodCk6Tm90KHQpfSxmb3JtYXRMb25nOk5vdH0sSG90PW5ldyBJbnRsLk51bWJlckZvcm1hdCh2b2lkIDAse21heGltdW1GcmFjdGlvbkRpZ2l0czozfSk7ZnVuY3Rpb24gRm90KHQpe3JldHVybiBIb3QuZm9ybWF0KHQpfWNvbnN0IExvdD17Zm9ybWF0VGljazpGb3QsZm9ybWF0U2hvcnQ6Rm90LGZvcm1hdFJlYWRhYmxlOkZvdCxmb3JtYXRMb25nOkZvdH0sQm90PUV0dCgiMC4zfnMiKSxWb3Q9RXR0KCIsLjN+ZiIpO2Z1bmN0aW9uIGpvdCh0KXtjb25zdCBlPU1hdGguYWJzKHQpO3JldHVybiBlPj1Fb3R8fGU8Um90P0JvdCh0KTpWb3QodCl9Y29uc3QgVW90PXtmb3JtYXRUaWNrOmpvdCxmb3JtYXRTaG9ydDpqb3QsZm9ybWF0UmVhZGFibGU6am90LGZvcm1hdExvbmc6am90fSxHb3Q9MzZlNSxXb3Q9ODY0ZTUsWW90PTMxNTM2ZTYscW90PUV0dCgiLjR+Iik7ZnVuY3Rpb24gWm90KHQpe2lmKDA9PT10KXJldHVybiIwIjtsZXQgZT1NYXRoLnNpZ24odCk+MD8iIjoiLSI7Y29uc3Qgbj1NYXRoLmFicyh0KTtyZXR1cm4gZSs9bjwxZTM/YCR7cW90KG4pfSBtc2A6bjw2ZTQ/YCR7cW90KG4vMWUzKX0gc2VjYDpuPEdvdD9gJHtxb3Qobi82ZTQpfSBtaW5gOm48V290P2Ake3FvdChuL0dvdCl9IGhyYDpuPFlvdD9gJHtxb3Qobi9Xb3QpfSBkYXlgOmAke3FvdChuL1lvdCl9IHlyYCxlfWNvbnN0IFhvdD17Zm9ybWF0VGljazpab3QsZm9ybWF0U2hvcnQ6Wm90LGZvcm1hdFJlYWRhYmxlOlpvdCxmb3JtYXRMb25nOlpvdH0sS290PWZvdCgpLnRpY2tGb3JtYXQoKTtsZXQgSm90O2NvbnN0IFFvdD17Zm9ybWF0VGljazp0PT5Lb3QobmV3IERhdGUodCkpLGZvcm1hdFNob3J0OnQ9Pm5ldyBEYXRlKHQpLnRvTG9jYWxlU3RyaW5nKEpvdCx7eWVhcjoibnVtZXJpYyIsbW9udGg6InNob3J0IixkYXk6Im51bWVyaWMiLGhvdXI6Im51bWVyaWMiLG1pbnV0ZToibnVtZXJpYyIsc2Vjb25kOiJudW1lcmljIn0pLGZvcm1hdFJlYWRhYmxlOnQ9Pm5ldyBEYXRlKHQpLnRvTG9jYWxlU3RyaW5nKEpvdCx7eWVhcjoibnVtZXJpYyIsbW9udGg6InNob3J0IixkYXk6Im51bWVyaWMiLGhvdXI6Im51bWVyaWMiLG1pbnV0ZToibnVtZXJpYyIsc2Vjb25kOiJudW1lcmljIix0aW1lWm9uZU5hbWU6InNob3J0In0pLGZvcm1hdExvbmc6dD0+bmV3IERhdGUodCkudG9Mb2NhbGVTdHJpbmcoSm90LHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9O2Z1bmN0aW9uICRvdCh0KXtzd2l0Y2godCl7Y2FzZSBKMi5MSU5FQVI6cmV0dXJuIG5ldyB0aXQ7Y2FzZSBKMi5MT0cxMDpyZXR1cm4gbmV3IGVpdDtjYXNlIEoyLlRJTUU6cmV0dXJuIG5ldyBuaXQ7ZGVmYXVsdDp0aHJvdyBuZXcgUmFuZ2VFcnJvcihgU2NhbGVUeXBlICR7dH0gbm90IHN1cHBvcnRlZC5gKX19Y2xhc3MgdGl0e2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPUlvdH10cmFuc2Zvcm0odCxlLG4pe2NvbnN0W28saV09dCxhPWktbyxbcixzXT1lO3JldHVybiAwPT09YT9yOihzLXIpL2EqKG4tbykrcn1mb3J3YXJkKHQsZSxuKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0odCxlLG4pfXJldmVyc2UodCxlLG4pe3JldHVybiB0aGlzLnRyYW5zZm9ybShlLHQsbil9bmljZURvbWFpbih0KXtsZXRbZSxuXT10O2lmKG48ZSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgaW5wdXQ6IG1pbiBpcyBsYXJnZXIgdGhhbiBtYXgiKTtpZihuPT09ZSlyZXR1cm4gMD09PWU/Wy0xLDFdOmU8MD9bMiplLDBdOlswLDIqZV07Y29uc3Qgbz1lZXQoKSxpPS4wNSoobi1lK051bWJlci5FUFNJTE9OKSxbYSxyXT1vLmRvbWFpbihbZS1pLG4raV0pLm5pY2UoKS5kb21haW4oKTtyZXR1cm5bYSxyXX10aWNrcyh0LGUpe3JldHVybiBlZXQoKS5kb21haW4odCkudGlja3MoZSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fWNsYXNzIGVpdHtjb25zdHJ1Y3Rvcigpe3RoaXMuZGVmYXVsdEZvcm1hdHRlcj1Jb3R9dHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmxvZzEwKHQ+MD90Ok51bWJlci5NSU5fVkFMVUUpfXVudHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmV4cCh0L01hdGguTE9HMTBFKX1mb3J3YXJkKHQsZSxuKXtpZihuPD0wKXJldHVybiBlWzBdO2NvbnN0W28saV09dCxbYSxyXT1lLHM9dGhpcy50cmFuc2Zvcm0obyksbD10aGlzLnRyYW5zZm9ybShpKS1zLGM9ci1hO3JldHVybiBuPXRoaXMudHJhbnNmb3JtKG4pLGMvKGwrTnVtYmVyLkVQU0lMT04pKihuLXMpK2F9cmV2ZXJzZSh0LGUsbil7Y29uc3RbbyxpXT10LFthLHJdPWUscz10aGlzLnRyYW5zZm9ybShvKSxsPXRoaXMudHJhbnNmb3JtKGkpO3JldHVybiB0aGlzLnVudHJhbnNmb3JtKChsLXMpLyhyLWErTnVtYmVyLkVQU0lMT04pKihuLWEpK3MpfW5pY2VEb21haW4odCl7Y29uc3RbZSxuXT10O2lmKGU+bil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgaW5wdXQ6IG1pbiBpcyBsYXJnZXIgdGhhbiBtYXgiKTtjb25zdCBvPU1hdGgubWF4KGUsTnVtYmVyLk1JTl9WQUxVRSksaT1NYXRoLm1heChuLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBuPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLC41Km8pLDIqaV19dGlja3ModCxlKXtjb25zdCBuPXRbMF08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzBdLG89dFsxXTw9MD9OdW1iZXIuTUlOX1ZBTFVFOnRbMV0saT1wZXQoKS5kb21haW4oW24sb10pLnRpY2tzKGUpO3JldHVybiBpLmxlbmd0aD9pOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19Y2xhc3Mgbml0e2NvbnN0cnVjdG9yKCl7dGhpcy5zY2FsZT1mb3QoKSx0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9UW90fWZvcndhcmQodCxlLG4pe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShlKShuKX1yZXZlcnNlKHQsZSxuKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkuaW52ZXJ0KG4pLmdldFRpbWUoKX1uaWNlRG9tYWluKHQpe2NvbnN0W2Usbl09dGhpcy5zY2FsZS5kb21haW4odCkubmljZSgpLmRvbWFpbigpO3JldHVybltlLmdldFRpbWUoKSxuLmdldFRpbWUoKV19dGlja3ModCxlKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkudGlja3MoZSkubWFwKCh0PT50LmdldFRpbWUoKSkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX1jb25zdCBvaXQ9Qm9vbGVhbihzZWxmLmhhc093blByb3BlcnR5KCJkb2N1bWVudCIpJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCJ3ZWJnbDIiKSk7ZnVuY3Rpb24gaWl0KCl7cmV0dXJuIHNlbGYuaGFzT3duUHJvcGVydHkoIk9mZnNjcmVlbkNhbnZhcyIpfWZ1bmN0aW9uIGFpdCh0LGUpe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXSE9PWVbbl0pcmV0dXJuITE7cmV0dXJuITB9Y2xhc3Mgcml0e2NvbnN0cnVjdG9yKCl7dGhpcy54U2NhbGU9JG90KEoyLkxJTkVBUiksdGhpcy55U2NhbGU9JG90KEoyLkxJTkVBUiksdGhpcy5kb21Db250YWluZXJSZWN0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMubGFzdFVwZGF0ZWQ9MCx0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfX1nZXRVcGRhdGVJZGVudGlmaWVyKCl7cmV0dXJuIHRoaXMubGFzdFVwZGF0ZWR9dXBkYXRlSWRlbnRpZmllcigpe3RoaXMubGFzdFVwZGF0ZWQrK31pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMH1zZXRYU2NhbGUodCl7dGhpcy54U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXRZU2NhbGUodCl7dGhpcy55U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1nZXRDdXJyZW50Vmlld0JveFJlY3QoKXtyZXR1cm4gdGhpcy5jdXJyZW50Vmlld0JveFJlY3R9c2V0Vmlld0JveFJlY3QodCl7dGhpcy5jdXJyZW50Vmlld0JveFJlY3Q9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXREb21Db250YWluZXJSZWN0KHQpe3RoaXMuZG9tQ29udGFpbmVyUmVjdD10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXRyYW5zZm9ybURhdGFUb1VpQ29vcmQodCxlKXtjb25zdCBuPXQsbz0oZnVuY3Rpb24gaSh0KXtyZXR1cm57eDpbdC54LHQueCt0LndpZHRoXSx5Olt0LnksdC55K3QuaGVpZ2h0XX19KSh0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdCk7cmV0dXJuW3RoaXMueFNjYWxlLmZvcndhcmQoby54LFtuLngsbi54K24ud2lkdGhdLGVbMF0pLHRoaXMueVNjYWxlLmZvcndhcmQoby55LHRoaXMuaXNZQXhpc1BvaW50ZWREb3duKCk/W24ueStuLmhlaWdodCxuLnldOltuLnksbi55K24uaGVpZ2h0XSxlWzFdKV19fWZ1bmN0aW9uIHNpdCh0LGUsbixvKXtjb25zdHtjb2xvcjppLHZpc2libGU6YSxvcGFjaXR5OnJ9PW87bGV0IHM9dDtpZihzKXtpZighYSlyZXR1cm4gcy5zdHlsZS5kaXNwbGF5PSJub25lIixzfWVsc2V7aWYoIWEpcmV0dXJuIG51bGw7cz1lKCl9cmV0dXJuIHM9bihzKSxzLnN0eWxlLmRpc3BsYXk9IiIscy5zdHlsZS5zdHJva2U9aSxzLnN0eWxlLm9wYWNpdHk9U3RyaW5nKG51bGwhPXI/cjoxKSxzfWNsYXNzIGxpdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN2Zz10fWZsdXNoKCl7fW9uUmVzaXplKHQpe31kZXN0cm95T2JqZWN0KHQpe3RoaXMuc3ZnLnJlbW92ZUNoaWxkKHQuZG9tKX1zZXRVc2VEYXJrTW9kZSh0KXt9Y3JlYXRlUGF0aERTdHJpbmcodCl7aWYoIXQubGVuZ3RoKXJldHVybiIiO2NvbnN0IGU9bmV3IEFycmF5KHQubGVuZ3RoLzIpO2VbMF09YE0ke3RbMF19LCR7dFsxXX1gO2ZvcihsZXQgbj0xO248dC5sZW5ndGgvMjtuKyspZVtuXT1gTCR7dFsyKm5dfSwke3RbMipuKzFdfWA7cmV0dXJuIGUuam9pbigiIil9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxuKXtjb25zdCBvPXNpdChudWxsPT10P3ZvaWQgMDp0LmRvbSwoKCk9Pntjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7dC5zdHlsZS5maWxsPSJub25lIjtjb25zdCBuPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoZSk7cmV0dXJuIHQuc2V0QXR0cmlidXRlKCJkIixuKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZCh0KSx0fSksKG49PntpZighKG51bGw9PXQ/dm9pZCAwOnQuZGF0YSl8fCFhaXQoZSxudWxsPT10P3ZvaWQgMDp0LmRhdGEpKXtjb25zdCB0PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoZSk7bi5zZXRBdHRyaWJ1dGUoImQiLHQpfXJldHVybiBufSksbik7cmV0dXJuIG51bGw9PT1vP251bGw6KG8uc3R5bGUuc3Ryb2tlV2lkdGg9U3RyaW5nKG4ud2lkdGgpLHtkb206byxkYXRhOmV9KX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxuKXtjb25zdHtzaXplOm8sY29sb3I6aX09bixhPW8qTWF0aC5zcXJ0KDMpLzIscj1uZXcgRmxvYXQzMkFycmF5KFtlLngtby8yLGUueSthLzMsZS54K28vMixlLnkrYS8zLGUueCxlLnktMiphLzNdKSxzPXNpdChudWxsPT10P3ZvaWQgMDp0LmRvbSwoKCk9Pntjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7dC5jbGFzc0xpc3QuYWRkKCJ0cmlhbmdsZSIpLHQuc3R5bGUuZmlsbD0ibm9uZSI7Y29uc3QgZT10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKHIpO3JldHVybiB0LnNldEF0dHJpYnV0ZSgiZCIsZSsiWiIpLHRoaXMuc3ZnLmFwcGVuZENoaWxkKHQpLHR9KSwodD0+e2NvbnN0IGU9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhyKTtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoImQiLGUrIloiKSx0fSksbik7cmV0dXJuIG51bGw9PT1zP251bGw6KHMuc3R5bGUuZmlsbD1pLHtkb206cyxkYXRhOnJ9KX1jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0LGUsbil7Y29uc3R7Y29sb3I6byxyYWRpdXM6aX09bixhPXNpdChudWxsPT10P3ZvaWQgMDp0LmRvbSwoKCk9Pntjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjaXJjbGUiKTtyZXR1cm4gdC5zdHlsZS5maWxsPW8sdC5zZXRBdHRyaWJ1dGUoImN4IixTdHJpbmcoZS54KSksdC5zZXRBdHRyaWJ1dGUoImN5IixTdHJpbmcoZS55KSksdC5zZXRBdHRyaWJ1dGUoInIiLFN0cmluZyhpKSksdGhpcy5zdmcuYXBwZW5kQ2hpbGQodCksdH0pLCh0PT4odC5zdHlsZS5maWxsPW8sdC5zZXRBdHRyaWJ1dGUoImN4IixTdHJpbmcoZS54KSksdC5zZXRBdHRyaWJ1dGUoImN5IixTdHJpbmcoZS55KSksdC5zZXRBdHRyaWJ1dGUoInIiLFN0cmluZyhpKSksdCkpLG4pO3JldHVybiBudWxsPT09YT9udWxsOntkb206YSxkYXRhOmV9fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxuLG8pe2lmKGUueSE9PW4ueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7Y29uc3R7YWx0aXR1ZGU6aSxjb2xvcjphfT1vLHI9Mi9NYXRoLnNxcnQoMykqaSxzPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1yLzIsZS55K2kvMixlLngsZS55LWkvMixuLngsbi55LWkvMixuLngrci8yLG4ueStpLzJdKSxsPXNpdChudWxsPT10P3ZvaWQgMDp0LmRvbSwoKCk9Pntjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7dC5jbGFzc0xpc3QuYWRkKCJ0cmFwZXpvaWQiKSx0LnN0eWxlLmZpbGw9Im5vbmUiO2NvbnN0IGU9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhzKTtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoImQiLGUrIloiKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZCh0KSx0fSksKHQ9Pntjb25zdCBlPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcocyk7cmV0dXJuIHQuc2V0QXR0cmlidXRlKCJkIixlKyJaIiksdH0pLG8pO3JldHVybiBudWxsPT09bD9udWxsOihsLnN0eWxlLmZpbGw9YSx7ZG9tOmwsZGF0YTpzfSl9fQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgMjAxMC0yMDIxIFRocmVlLmpzIEF1dGhvcnMKICAgICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKICAgICAqL2NvbnN0IGNpdD0xMDAsZGl0PTMwMSxwaXQ9MzAyLG1pdD0zMDYsdWl0PTFlMyxmaXQ9MTAwMSxnaXQ9MTAwMixoaXQ9MTAwMyxiaXQ9MTAwNix5aXQ9MTAwOCxfaXQ9MTAwOSxDaXQ9MTAxMixNaXQ9MTAxNCx2aXQ9MTAxNSx4aXQ9MTAxNixPaXQ9MTAyMCxQaXQ9MTAyMix3aXQ9MTAyMyxraXQ9MTAyNixTaXQ9MTAyNyxEaXQ9MjMwMCxFaXQ9MjMwMSxSaXQ9MjMwMixBaXQ9MjQwMCxUaXQ9MjQwMSxOaXQ9MjQwMix6aXQ9M2UzLElpdD0zMDAxLEhpdD0zMDA3LEZpdD0zMDAyLExpdD03NjgwLEJpdD0zNTA0NCxWaXQ9MzUwNDgsaml0PSIzMDAgZXMiO2NsYXNzIFVpdHthZGRFdmVudExpc3RlbmVyKHQsZSl7dm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzJiYodGhpcy5fbGlzdGVuZXJzPXt9KTtjb25zdCBuPXRoaXMuX2xpc3RlbmVyczt2b2lkIDA9PT1uW3RdJiYoblt0XT1bXSksLTE9PT1uW3RdLmluZGV4T2YoZSkmJm5bdF0ucHVzaChlKX1oYXNFdmVudExpc3RlbmVyKHQsZSl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybiExO2NvbnN0IG49dGhpcy5fbGlzdGVuZXJzO3JldHVybiB2b2lkIDAhPT1uW3RdJiYtMSE9PW5bdF0uaW5kZXhPZihlKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsZSl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybjtjb25zdCBuPXRoaXMuX2xpc3RlbmVyc1t0XTtpZih2b2lkIDAhPT1uKXtjb25zdCB0PW4uaW5kZXhPZihlKTstMSE9PXQmJm4uc3BsaWNlKHQsMSl9fWRpc3BhdGNoRXZlbnQodCl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybjtjb25zdCBlPXRoaXMuX2xpc3RlbmVyc1t0LnR5cGVdO2lmKHZvaWQgMCE9PWUpe3QudGFyZ2V0PXRoaXM7Y29uc3Qgbj1lLnNsaWNlKDApO2ZvcihsZXQgZT0wLG89bi5sZW5ndGg7ZTxvO2UrKyluW2VdLmNhbGwodGhpcyx0KTt0LnRhcmdldD1udWxsfX19Y29uc3QgR2l0PVtdO2ZvcihsZXQgdD0wO3Q8MjU2O3QrKylHaXRbdF09KHQ8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KTtjb25zdCBXaXQ9TWF0aC5QSS8xODAsWWl0PTE4MC9NYXRoLlBJO2Z1bmN0aW9uIHFpdCgpe2NvbnN0IHQ9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsZT00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCxuPTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLG89NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDA7cmV0dXJuKEdpdFsyNTUmdF0rR2l0W3Q+PjgmMjU1XStHaXRbdD4+MTYmMjU1XStHaXRbdD4+MjQmMjU1XSsiLSIrR2l0WzI1NSZlXStHaXRbZT4+OCYyNTVdKyItIitHaXRbZT4+MTYmMTV8NjRdK0dpdFtlPj4yNCYyNTVdKyItIitHaXRbNjMmbnwxMjhdK0dpdFtuPj44JjI1NV0rIi0iK0dpdFtuPj4xNiYyNTVdK0dpdFtuPj4yNCYyNTVdK0dpdFsyNTUmb10rR2l0W28+PjgmMjU1XStHaXRbbz4+MTYmMjU1XStHaXRbbz4+MjQmMjU1XSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBaaXQodCxlLG4pe3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKG4sdCkpfWZ1bmN0aW9uIFhpdCh0LGUsbil7cmV0dXJuKDEtbikqdCtuKmV9ZnVuY3Rpb24gS2l0KHQpe3JldHVybiAwPT0odCZ0LTEpJiYwIT09dH1mdW5jdGlvbiBKaXQodCl7cmV0dXJuIE1hdGgucG93KDIsTWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMikpfWNsYXNzIFFpdHtjb25zdHJ1Y3Rvcih0PTAsZT0wKXt0aGlzLng9dCx0aGlzLnk9ZX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy54fXNldCB3aWR0aCh0KXt0aGlzLng9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMueX1zZXQgaGVpZ2h0KHQpe3RoaXMueT10fXNldCh0LGUpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnkpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzfWFkZCh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9ZGl2aWRlKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfWFwcGx5TWF0cml4Myh0KXtjb25zdCBlPXRoaXMueCxuPXRoaXMueSxvPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1vWzBdKmUrb1szXSpuK29bNl0sdGhpcy55PW9bMV0qZStvWzRdKm4rb1s3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtjb25zdCBuPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKG58fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxuKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55fWNyb3NzKHQpe3JldHVybiB0aGlzLngqdC55LXRoaXMueSp0Lnh9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1hbmdsZSgpe3JldHVybiBNYXRoLmF0YW4yKC10aGlzLnksLXRoaXMueCkrTWF0aC5QSX1kaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VUb1NxdWFyZWQodCl7Y29uc3QgZT10aGlzLngtdC54LG49dGhpcy55LXQueTtyZXR1cm4gZSplK24qbn1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsbil7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKm4sdGhpcy55PXQueSsoZS55LXQueSkqbix0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMueCx0W2UrMV09dGhpcy55LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil7cmV0dXJuIHZvaWQgMCE9PW4mJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzfXJvdGF0ZUFyb3VuZCh0LGUpe2NvbnN0IG49TWF0aC5jb3MoZSksbz1NYXRoLnNpbihlKSxpPXRoaXMueC10LngsYT10aGlzLnktdC55O3JldHVybiB0aGlzLng9aSpuLWEqbyt0LngsdGhpcy55PWkqbythKm4rdC55LHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXN9fVFpdC5wcm90b3R5cGUuaXNWZWN0b3IyPSEwO2NsYXNzICRpdHtjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMSwwLDAsMCwxXSxhcmd1bWVudHMubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9c2V0KHQsZSxuLG8saSxhLHIscyxsKXtjb25zdCBjPXRoaXMuZWxlbWVudHM7cmV0dXJuIGNbMF09dCxjWzFdPW8sY1syXT1yLGNbM109ZSxjWzRdPWksY1s1XT1zLGNbNl09bixjWzddPWEsY1s4XT1sLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO3JldHVybiBlWzBdPW5bMF0sZVsxXT1uWzFdLGVbMl09blsyXSxlWzNdPW5bM10sZVs0XT1uWzRdLGVbNV09bls1XSxlWzZdPW5bNl0sZVs3XT1uWzddLGVbOF09bls4XSx0aGlzfWV4dHJhY3RCYXNpcyh0LGUsbil7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMSksbi5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDIpLHRoaXN9c2V0RnJvbU1hdHJpeDQodCl7Y29uc3QgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChlWzBdLGVbNF0sZVs4XSxlWzFdLGVbNV0sZVs5XSxlWzJdLGVbNl0sZVsxMF0pLHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQsZSl7Y29uc3Qgbj10LmVsZW1lbnRzLG89ZS5lbGVtZW50cyxpPXRoaXMuZWxlbWVudHMsYT1uWzBdLHI9blszXSxzPW5bNl0sbD1uWzFdLGM9bls0XSxkPW5bN10scD1uWzJdLG09bls1XSx1PW5bOF0sZj1vWzBdLGc9b1szXSxoPW9bNl0sYj1vWzFdLHk9b1s0XSxfPW9bN10sQz1vWzJdLE09b1s1XSx2PW9bOF07cmV0dXJuIGlbMF09YSpmK3IqYitzKkMsaVszXT1hKmcrcip5K3MqTSxpWzZdPWEqaCtyKl8rcyp2LGlbMV09bCpmK2MqYitkKkMsaVs0XT1sKmcrYyp5K2QqTSxpWzddPWwqaCtjKl8rZCp2LGlbMl09cCpmK20qYit1KkMsaVs1XT1wKmcrbSp5K3UqTSxpWzhdPXAqaCttKl8rdSp2LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzO3JldHVybiBlWzBdKj10LGVbM10qPXQsZVs2XSo9dCxlWzFdKj10LGVbNF0qPXQsZVs3XSo9dCxlWzJdKj10LGVbNV0qPXQsZVs4XSo9dCx0aGlzfWRldGVybWluYW50KCl7Y29uc3QgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxuPXRbMV0sbz10WzJdLGk9dFszXSxhPXRbNF0scj10WzVdLHM9dFs2XSxsPXRbN10sYz10WzhdO3JldHVybiBlKmEqYy1lKnIqbC1uKmkqYytuKnIqcytvKmkqbC1vKmEqc31pbnZlcnQoKXtjb25zdCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLG49dFsxXSxvPXRbMl0saT10WzNdLGE9dFs0XSxyPXRbNV0scz10WzZdLGw9dFs3XSxjPXRbOF0sZD1jKmEtcipsLHA9cipzLWMqaSxtPWwqaS1hKnMsdT1lKmQrbipwK28qbTtpZigwPT09dSlyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDApO2NvbnN0IGY9MS91O3JldHVybiB0WzBdPWQqZix0WzFdPShvKmwtYypuKSpmLHRbMl09KHIqbi1vKmEpKmYsdFszXT1wKmYsdFs0XT0oYyplLW8qcykqZix0WzVdPShvKmktciplKSpmLHRbNl09bSpmLHRbN109KG4qcy1sKmUpKmYsdFs4XT0oYSplLW4qaSkqZix0aGlzfXRyYW5zcG9zZSgpe2xldCB0O2NvbnN0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdD1lWzFdLGVbMV09ZVszXSxlWzNdPXQsdD1lWzJdLGVbMl09ZVs2XSxlWzZdPXQsdD1lWzVdLGVbNV09ZVs3XSxlWzddPXQsdGhpc31nZXROb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeDQodCkuaW52ZXJ0KCkudHJhbnNwb3NlKCl9dHJhbnNwb3NlSW50b0FycmF5KHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVszXSx0WzJdPWVbNl0sdFszXT1lWzFdLHRbNF09ZVs0XSx0WzVdPWVbN10sdFs2XT1lWzJdLHRbN109ZVs1XSx0WzhdPWVbOF0sdGhpc31zZXRVdlRyYW5zZm9ybSh0LGUsbixvLGksYSxyKXtjb25zdCBzPU1hdGguY29zKGkpLGw9TWF0aC5zaW4oaSk7cmV0dXJuIHRoaXMuc2V0KG4qcyxuKmwsLW4qKHMqYStsKnIpK2ErdCwtbypsLG8qcywtbyooLWwqYStzKnIpK3IrZSwwLDAsMSksdGhpc31zY2FsZSh0LGUpe2NvbnN0IG49dGhpcy5lbGVtZW50cztyZXR1cm4gblswXSo9dCxuWzNdKj10LG5bNl0qPXQsblsxXSo9ZSxuWzRdKj1lLG5bN10qPWUsdGhpc31yb3RhdGUodCl7Y29uc3QgZT1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpLG89dGhpcy5lbGVtZW50cyxpPW9bMF0sYT1vWzNdLHI9b1s2XSxzPW9bMV0sbD1vWzRdLGM9b1s3XTtyZXR1cm4gb1swXT1lKmkrbipzLG9bM109ZSphK24qbCxvWzZdPWUqcituKmMsb1sxXT0tbippK2UqcyxvWzRdPS1uKmErZSpsLG9bN109LW4qcitlKmMsdGhpc310cmFuc2xhdGUodCxlKXtjb25zdCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0rPXQqblsyXSxuWzNdKz10Km5bNV0sbls2XSs9dCpuWzhdLG5bMV0rPWUqblsyXSxuWzRdKz1lKm5bNV0sbls3XSs9ZSpuWzhdLHRoaXN9ZXF1YWxzKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHM7Zm9yKGxldCB0PTA7dDw5O3QrKylpZihlW3RdIT09blt0XSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxlPTApe2ZvcihsZXQgbj0wO248OTtuKyspdGhpcy5lbGVtZW50c1tuXT10W24rZV07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7Y29uc3Qgbj10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPW5bMF0sdFtlKzFdPW5bMV0sdFtlKzJdPW5bMl0sdFtlKzNdPW5bM10sdFtlKzRdPW5bNF0sdFtlKzVdPW5bNV0sdFtlKzZdPW5bNl0sdFtlKzddPW5bN10sdFtlKzhdPW5bOF0sdH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX1sZXQgdGF0OyRpdC5wcm90b3R5cGUuaXNNYXRyaXgzPSEwO2NsYXNzIGVhdHtzdGF0aWMgZ2V0RGF0YVVSTCh0KXtpZigvXmRhdGE6L2kudGVzdCh0LnNyYykpcmV0dXJuIHQuc3JjO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQpcmV0dXJuIHQuc3JjO2xldCBlO2lmKHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCllPXQ7ZWxzZXt2b2lkIDA9PT10YXQmJih0YXQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIikpLHRhdC53aWR0aD10LndpZHRoLHRhdC5oZWlnaHQ9dC5oZWlnaHQ7Y29uc3Qgbj10YXQuZ2V0Q29udGV4dCgiMmQiKTt0IGluc3RhbmNlb2YgSW1hZ2VEYXRhP24ucHV0SW1hZ2VEYXRhKHQsMCwwKTpuLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxlPXRhdH1yZXR1cm4gZS53aWR0aD4yMDQ4fHxlLmhlaWdodD4yMDQ4Pyhjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMuZ2V0RGF0YVVSTDogSW1hZ2UgY29udmVydGVkIHRvIGpwZyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyIsdCksZS50b0RhdGFVUkwoImltYWdlL2pwZWciLC42KSk6ZS50b0RhdGFVUkwoImltYWdlL3BuZyIpfX1sZXQgbmF0PTA7Y2xhc3Mgb2F0IGV4dGVuZHMgVWl0e2NvbnN0cnVjdG9yKHQ9b2F0LkRFRkFVTFRfSU1BR0UsZT1vYXQuREVGQVVMVF9NQVBQSU5HLG49MTAwMSxvPTEwMDEsaT0xMDA2LGE9MTAwOCxyPTEwMjMscz0xMDA5LGw9MSxjPTNlMyl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpuYXQrK30pLHRoaXMudXVpZD1xaXQoKSx0aGlzLm5hbWU9IiIsdGhpcy5pbWFnZT10LHRoaXMubWlwbWFwcz1bXSx0aGlzLm1hcHBpbmc9ZSx0aGlzLndyYXBTPW4sdGhpcy53cmFwVD1vLHRoaXMubWFnRmlsdGVyPWksdGhpcy5taW5GaWx0ZXI9YSx0aGlzLmFuaXNvdHJvcHk9bCx0aGlzLmZvcm1hdD1yLHRoaXMuaW50ZXJuYWxGb3JtYXQ9bnVsbCx0aGlzLnR5cGU9cyx0aGlzLm9mZnNldD1uZXcgUWl0KDAsMCksdGhpcy5yZXBlYXQ9bmV3IFFpdCgxLDEpLHRoaXMuY2VudGVyPW5ldyBRaXQoMCwwKSx0aGlzLnJvdGF0aW9uPTAsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSEwLHRoaXMubWF0cml4PW5ldyAkaXQsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITAsdGhpcy5wcmVtdWx0aXBseUFscGhhPSExLHRoaXMuZmxpcFk9ITAsdGhpcy51bnBhY2tBbGlnbm1lbnQ9NCx0aGlzLmVuY29kaW5nPWMsdGhpcy52ZXJzaW9uPTAsdGhpcy5vblVwZGF0ZT1udWxsLHRoaXMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSExfXVwZGF0ZU1hdHJpeCgpe3RoaXMubWF0cml4LnNldFV2VHJhbnNmb3JtKHRoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueSx0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnksdGhpcy5yb3RhdGlvbix0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnkpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5pbWFnZT10LmltYWdlLHRoaXMubWlwbWFwcz10Lm1pcG1hcHMuc2xpY2UoMCksdGhpcy5tYXBwaW5nPXQubWFwcGluZyx0aGlzLndyYXBTPXQud3JhcFMsdGhpcy53cmFwVD10LndyYXBULHRoaXMubWFnRmlsdGVyPXQubWFnRmlsdGVyLHRoaXMubWluRmlsdGVyPXQubWluRmlsdGVyLHRoaXMuYW5pc290cm9weT10LmFuaXNvdHJvcHksdGhpcy5mb3JtYXQ9dC5mb3JtYXQsdGhpcy5pbnRlcm5hbEZvcm1hdD10LmludGVybmFsRm9ybWF0LHRoaXMudHlwZT10LnR5cGUsdGhpcy5vZmZzZXQuY29weSh0Lm9mZnNldCksdGhpcy5yZXBlYXQuY29weSh0LnJlcGVhdCksdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5nZW5lcmF0ZU1pcG1hcHM9dC5nZW5lcmF0ZU1pcG1hcHMsdGhpcy5wcmVtdWx0aXBseUFscGhhPXQucHJlbXVsdGlwbHlBbHBoYSx0aGlzLmZsaXBZPXQuZmxpcFksdGhpcy51bnBhY2tBbGlnbm1lbnQ9dC51bnBhY2tBbGlnbm1lbnQsdGhpcy5lbmNvZGluZz10LmVuY29kaW5nLHRoaXN9dG9KU09OKHQpe2NvbnN0IGU9dm9pZCAwPT09dHx8InN0cmluZyI9PXR5cGVvZiB0O2lmKCFlJiZ2b2lkIDAhPT10LnRleHR1cmVzW3RoaXMudXVpZF0pcmV0dXJuIHQudGV4dHVyZXNbdGhpcy51dWlkXTtjb25zdCBuPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih2b2lkIDAhPT10aGlzLmltYWdlKXtjb25zdCBvPXRoaXMuaW1hZ2U7aWYodm9pZCAwPT09by51dWlkJiYoby51dWlkPXFpdCgpKSwhZSYmdm9pZCAwPT09dC5pbWFnZXNbby51dWlkXSl7bGV0IGU7aWYoQXJyYXkuaXNBcnJheShvKSl7ZT1bXTtmb3IobGV0IHQ9MCxuPW8ubGVuZ3RoO3Q8bjt0KyspZS5wdXNoKGlhdChvW3RdLmlzRGF0YVRleHR1cmU/b1t0XS5pbWFnZTpvW3RdKSl9ZWxzZSBlPWlhdChvKTt0LmltYWdlc1tvLnV1aWRdPXt1dWlkOm8udXVpZCx1cmw6ZX19bi5pbWFnZT1vLnV1aWR9cmV0dXJuIGV8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09biksbn1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKDMwMCE9PXRoaXMubWFwcGluZylyZXR1cm4gdDtpZih0LmFwcGx5TWF0cml4Myh0aGlzLm1hdHJpeCksdC54PDB8fHQueD4xKXN3aXRjaCh0aGlzLndyYXBTKXtjYXNlIHVpdDp0Lng9dC54LU1hdGguZmxvb3IodC54KTticmVhaztjYXNlIGZpdDp0Lng9dC54PDA/MDoxO2JyZWFrO2Nhc2UgZ2l0OnQueD0xPT09TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpP01hdGguY2VpbCh0LngpLXQueDp0LngtTWF0aC5mbG9vcih0LngpfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSB1aXQ6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWs7Y2FzZSBmaXQ6dC55PXQueTwwPzA6MTticmVhaztjYXNlIGdpdDp0Lnk9MT09PU1hdGguYWJzKE1hdGguZmxvb3IodC55KSUyKT9NYXRoLmNlaWwodC55KS10Lnk6dC55LU1hdGguZmxvb3IodC55KX1yZXR1cm4gdGhpcy5mbGlwWSYmKHQueT0xLXQueSksdH1zZXQgbmVlZHNVcGRhdGUodCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK319ZnVuY3Rpb24gaWF0KHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTEltYWdlRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBJbWFnZUJpdG1hcCYmdCBpbnN0YW5jZW9mIEltYWdlQml0bWFwP2VhdC5nZXREYXRhVVJMKHQpOnQuZGF0YT97ZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LmRhdGEpLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0LHR5cGU6dC5kYXRhLmNvbnN0cnVjdG9yLm5hbWV9Oihjb25zb2xlLndhcm4oIlRIUkVFLlRleHR1cmU6IFVuYWJsZSB0byBzZXJpYWxpemUgVGV4dHVyZS4iKSx7fSl9b2F0LkRFRkFVTFRfSU1BR0U9dm9pZCAwLG9hdC5ERUZBVUxUX01BUFBJTkc9MzAwLG9hdC5wcm90b3R5cGUuaXNUZXh0dXJlPSEwO2NsYXNzIGFhdHtjb25zdHJ1Y3Rvcih0PTAsZT0wLG49MCxvPTEpe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1uLHRoaXMudz1vfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnp9c2V0IHdpZHRoKHQpe3RoaXMuej10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy53fXNldCBoZWlnaHQodCl7dGhpcy53PXR9c2V0KHQsZSxuLG8pe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9bix0aGlzLnc9byx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpcy53PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRXKHQpe3JldHVybiB0aGlzLnc9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztjYXNlIDM6dGhpcy53PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56LHRoaXMudyl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpcy53PXZvaWQgMCE9PXQudz90Lnc6MSx0aGlzfWFkZCh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMudys9dC53LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpcy53Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzLnc9dC53K2Uudyx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzLncrPXQudyplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcy53LT10LncsdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzLnctPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXMudz10LnctZS53LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMudyo9dC53LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXMudyo9dCx0aGlzfWFwcGx5TWF0cml4NCh0KXtjb25zdCBlPXRoaXMueCxuPXRoaXMueSxvPXRoaXMueixpPXRoaXMudyxhPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1hWzBdKmUrYVs0XSpuK2FbOF0qbythWzEyXSppLHRoaXMueT1hWzFdKmUrYVs1XSpuK2FbOV0qbythWzEzXSppLHRoaXMuej1hWzJdKmUrYVs2XSpuK2FbMTBdKm8rYVsxNF0qaSx0aGlzLnc9YVszXSplK2FbN10qbithWzExXSpvK2FbMTVdKmksdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1zZXRBeGlzQW5nbGVGcm9tUXVhdGVybmlvbih0KXt0aGlzLnc9MipNYXRoLmFjb3ModC53KTtjb25zdCBlPU1hdGguc3FydCgxLXQudyp0LncpO3JldHVybiBlPDFlLTQ/KHRoaXMueD0xLHRoaXMueT0wLHRoaXMuej0wKToodGhpcy54PXQueC9lLHRoaXMueT10LnkvZSx0aGlzLno9dC56L2UpLHRoaXN9c2V0QXhpc0FuZ2xlRnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCBlLG4sbyxpO2NvbnN0IGE9LjAxLHI9LjEscz10LmVsZW1lbnRzLGw9c1swXSxjPXNbNF0sZD1zWzhdLHA9c1sxXSxtPXNbNV0sdT1zWzldLGY9c1syXSxnPXNbNl0saD1zWzEwXTtpZihNYXRoLmFicyhjLXApPGEmJk1hdGguYWJzKGQtZik8YSYmTWF0aC5hYnModS1nKTxhKXtpZihNYXRoLmFicyhjK3ApPHImJk1hdGguYWJzKGQrZik8ciYmTWF0aC5hYnModStnKTxyJiZNYXRoLmFicyhsK20raC0zKTxyKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO2U9TWF0aC5QSTtjb25zdCB0PShsKzEpLzIscz0obSsxKS8yLGI9KGgrMSkvMix5PShjK3ApLzQsXz0oZCtmKS80LEM9KHUrZykvNDtyZXR1cm4gdD5zJiZ0PmI/dDxhPyhuPTAsbz0uNzA3MTA2NzgxLGk9LjcwNzEwNjc4MSk6KG49TWF0aC5zcXJ0KHQpLG89eS9uLGk9Xy9uKTpzPmI/czxhPyhuPS43MDcxMDY3ODEsbz0wLGk9LjcwNzEwNjc4MSk6KG89TWF0aC5zcXJ0KHMpLG49eS9vLGk9Qy9vKTpiPGE/KG49LjcwNzEwNjc4MSxvPS43MDcxMDY3ODEsaT0wKTooaT1NYXRoLnNxcnQoYiksbj1fL2ksbz1DL2kpLHRoaXMuc2V0KG4sbyxpLGUpLHRoaXN9bGV0IGI9TWF0aC5zcXJ0KChnLXUpKihnLXUpKyhkLWYpKihkLWYpKyhwLWMpKihwLWMpKTtyZXR1cm4gTWF0aC5hYnMoYik8LjAwMSYmKGI9MSksdGhpcy54PShnLXUpL2IsdGhpcy55PShkLWYpL2IsdGhpcy56PShwLWMpL2IsdGhpcy53PU1hdGguYWNvcygobCttK2gtMSkvMiksdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1pbih0aGlzLncsdC53KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpcy53PU1hdGgubWF4KHRoaXMudyx0LncpLHRoaXN9Y2xhbXAodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihlLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihlLnksdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQueixNYXRoLm1pbihlLnosdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQudyxNYXRoLm1pbihlLncsdGhpcy53KSksdGhpc31jbGFtcFNjYWxhcih0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMudykpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtjb25zdCBuPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKG58fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxuKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz1NYXRoLmZsb29yKHRoaXMudyksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXMudz1NYXRoLmNlaWwodGhpcy53KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXMudz1NYXRoLnJvdW5kKHRoaXMudyksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9dGhpcy53PDA/TWF0aC5jZWlsKHRoaXMudyk6TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXMudz0tdGhpcy53LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQueit0aGlzLncqdC53fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLnd9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpcy53Kz0odC53LXRoaXMudykqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxuKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqbix0aGlzLnk9dC55KyhlLnktdC55KSpuLHRoaXMuej10LnorKGUuei10LnopKm4sdGhpcy53PXQudysoZS53LXQudykqbix0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMueiYmdC53PT09dGhpcy53fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpcy56PXRbZSsyXSx0aGlzLnc9dFtlKzNdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0W2UrM109dGhpcy53LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil7cmV0dXJuIHZvaWQgMCE9PW4mJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXMudz10LmdldFcoZSksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpcy53PU1hdGgucmFuZG9tKCksdGhpc319YWF0LnByb3RvdHlwZS5pc1ZlY3RvcjQ9ITA7Y2xhc3MgcmF0IGV4dGVuZHMgVWl0e2NvbnN0cnVjdG9yKHQsZSxuPXt9KXtzdXBlcigpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9MSx0aGlzLnNjaXNzb3I9bmV3IGFhdCgwLDAsdCxlKSx0aGlzLnNjaXNzb3JUZXN0PSExLHRoaXMudmlld3BvcnQ9bmV3IGFhdCgwLDAsdCxlKSx0aGlzLnRleHR1cmU9bmV3IG9hdCh2b2lkIDAsbi5tYXBwaW5nLG4ud3JhcFMsbi53cmFwVCxuLm1hZ0ZpbHRlcixuLm1pbkZpbHRlcixuLmZvcm1hdCxuLnR5cGUsbi5hbmlzb3Ryb3B5LG4uZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmltYWdlPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOjF9LHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9dm9pZCAwIT09bi5nZW5lcmF0ZU1pcG1hcHMmJm4uZ2VuZXJhdGVNaXBtYXBzLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9dm9pZCAwIT09bi5taW5GaWx0ZXI/bi5taW5GaWx0ZXI6Yml0LHRoaXMuZGVwdGhCdWZmZXI9dm9pZCAwPT09bi5kZXB0aEJ1ZmZlcnx8bi5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dm9pZCAwIT09bi5zdGVuY2lsQnVmZmVyJiZuLnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dm9pZCAwIT09bi5kZXB0aFRleHR1cmU/bi5kZXB0aFRleHR1cmU6bnVsbH1zZXRUZXh0dXJlKHQpe3QuaW1hZ2U9e3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LGRlcHRoOnRoaXMuZGVwdGh9LHRoaXMudGV4dHVyZT10fXNldFNpemUodCxlLG49MSl7dGhpcy53aWR0aD09PXQmJnRoaXMuaGVpZ2h0PT09ZSYmdGhpcy5kZXB0aD09PW58fCh0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLmRlcHRoPW4sdGhpcy50ZXh0dXJlLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlLmltYWdlLmhlaWdodD1lLHRoaXMudGV4dHVyZS5pbWFnZS5kZXB0aD1uLHRoaXMuZGlzcG9zZSgpKSx0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxlKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LGUpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5jb3B5KHQudmlld3BvcnQpLHRoaXMudGV4dHVyZT10LnRleHR1cmUuY2xvbmUoKSx0aGlzLnRleHR1cmUuaW1hZ2U9ey4uLnRoaXMudGV4dHVyZS5pbWFnZX0sdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX1yYXQucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJUYXJnZXQ9ITAsY2xhc3MgZXh0ZW5kcyByYXR7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKHQsZSk7Y29uc3Qgbz10aGlzLnRleHR1cmU7dGhpcy50ZXh0dXJlPVtdO2ZvcihsZXQgdD0wO3Q8bjt0KyspdGhpcy50ZXh0dXJlW3RdPW8uY2xvbmUoKX1zZXRTaXplKHQsZSxuPTEpe2lmKHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PWV8fHRoaXMuZGVwdGghPT1uKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLmRlcHRoPW47Zm9yKGxldCBvPTAsaT10aGlzLnRleHR1cmUubGVuZ3RoO288aTtvKyspdGhpcy50ZXh0dXJlW29dLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlW29dLmltYWdlLmhlaWdodD1lLHRoaXMudGV4dHVyZVtvXS5pbWFnZS5kZXB0aD1uO3RoaXMuZGlzcG9zZSgpfXJldHVybiB0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxlKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LGUpLHRoaXN9Y29weSh0KXt0aGlzLmRpc3Bvc2UoKSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzLnRleHR1cmUubGVuZ3RoPTA7Zm9yKGxldCBlPTAsbj10LnRleHR1cmUubGVuZ3RoO2U8bjtlKyspdGhpcy50ZXh0dXJlW2VdPXQudGV4dHVyZVtlXS5jbG9uZSgpO3JldHVybiB0aGlzfX0ucHJvdG90eXBlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9ITA7Y2xhc3Mgc2F0IGV4dGVuZHMgcmF0e2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcih0LGUsbiksdGhpcy5zYW1wbGVzPTR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weS5jYWxsKHRoaXMsdCksdGhpcy5zYW1wbGVzPXQuc2FtcGxlcyx0aGlzfX1zYXQucHJvdG90eXBlLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD0hMDtjbGFzcyBsYXR7Y29uc3RydWN0b3IodD0wLGU9MCxuPTAsbz0xKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9bix0aGlzLl93PW99c3RhdGljIHNsZXJwKHQsZSxuLG8pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IFN0YXRpYyAuc2xlcnAoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgcW0uc2xlcnBRdWF0ZXJuaW9ucyggcWEsIHFiLCB0ICkgaW5zdGVhZC4iKSxuLnNsZXJwUXVhdGVybmlvbnModCxlLG8pfXN0YXRpYyBzbGVycEZsYXQodCxlLG4sbyxpLGEscil7bGV0IHM9bltvKzBdLGw9bltvKzFdLGM9bltvKzJdLGQ9bltvKzNdO2NvbnN0IHA9aVthKzBdLG09aVthKzFdLHU9aVthKzJdLGY9aVthKzNdO2lmKDA9PT1yKXJldHVybiB0W2UrMF09cyx0W2UrMV09bCx0W2UrMl09Yyx2b2lkKHRbZSszXT1kKTtpZigxPT09cilyZXR1cm4gdFtlKzBdPXAsdFtlKzFdPW0sdFtlKzJdPXUsdm9pZCh0W2UrM109Zik7aWYoZCE9PWZ8fHMhPT1wfHxsIT09bXx8YyE9PXUpe2xldCB0PTEtcjtjb25zdCBlPXMqcCtsKm0rYyp1K2QqZixuPWU+PTA/MTotMSxvPTEtZSplO2lmKG8+TnVtYmVyLkVQU0lMT04pe2NvbnN0IGk9TWF0aC5zcXJ0KG8pLGE9TWF0aC5hdGFuMihpLGUqbik7dD1NYXRoLnNpbih0KmEpL2kscj1NYXRoLnNpbihyKmEpL2l9Y29uc3QgaT1yKm47aWYocz1zKnQrcCppLGw9bCp0K20qaSxjPWMqdCt1KmksZD1kKnQrZippLHQ9PT0xLXIpe2NvbnN0IHQ9MS9NYXRoLnNxcnQocypzK2wqbCtjKmMrZCpkKTtzKj10LGwqPXQsYyo9dCxkKj10fX10W2VdPXMsdFtlKzFdPWwsdFtlKzJdPWMsdFtlKzNdPWR9c3RhdGljIG11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQsZSxuLG8saSxhKXtjb25zdCByPW5bb10scz1uW28rMV0sbD1uW28rMl0sYz1uW28rM10sZD1pW2FdLHA9aVthKzFdLG09aVthKzJdLHU9aVthKzNdO3JldHVybiB0W2VdPXIqdStjKmQrcyptLWwqcCx0W2UrMV09cyp1K2MqcCtsKmQtciptLHRbZSsyXT1sKnUrYyptK3IqcC1zKmQsdFtlKzNdPWMqdS1yKmQtcypwLWwqbSx0fWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB3KCl7cmV0dXJuIHRoaXMuX3d9c2V0IHcodCl7dGhpcy5fdz10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxlLG4sbyl7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1uLHRoaXMuX3c9byx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl93KX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQueCx0aGlzLl95PXQueSx0aGlzLl96PXQueix0aGlzLl93PXQudyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tRXVsZXIodCxlKXtpZighdHx8IXQuaXNFdWxlcil0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2NvbnN0IG49dC5feCxvPXQuX3ksaT10Ll96LGE9dC5fb3JkZXIscj1NYXRoLmNvcyxzPU1hdGguc2luLGw9cihuLzIpLGM9cihvLzIpLGQ9cihpLzIpLHA9cyhuLzIpLG09cyhvLzIpLHU9cyhpLzIpO3N3aXRjaChhKXtjYXNlIlhZWiI6dGhpcy5feD1wKmMqZCtsKm0qdSx0aGlzLl95PWwqbSpkLXAqYyp1LHRoaXMuX3o9bCpjKnUrcCptKmQsdGhpcy5fdz1sKmMqZC1wKm0qdTticmVhaztjYXNlIllYWiI6dGhpcy5feD1wKmMqZCtsKm0qdSx0aGlzLl95PWwqbSpkLXAqYyp1LHRoaXMuX3o9bCpjKnUtcCptKmQsdGhpcy5fdz1sKmMqZCtwKm0qdTticmVhaztjYXNlIlpYWSI6dGhpcy5feD1wKmMqZC1sKm0qdSx0aGlzLl95PWwqbSpkK3AqYyp1LHRoaXMuX3o9bCpjKnUrcCptKmQsdGhpcy5fdz1sKmMqZC1wKm0qdTticmVhaztjYXNlIlpZWCI6dGhpcy5feD1wKmMqZC1sKm0qdSx0aGlzLl95PWwqbSpkK3AqYyp1LHRoaXMuX3o9bCpjKnUtcCptKmQsdGhpcy5fdz1sKmMqZCtwKm0qdTticmVhaztjYXNlIllaWCI6dGhpcy5feD1wKmMqZCtsKm0qdSx0aGlzLl95PWwqbSpkK3AqYyp1LHRoaXMuX3o9bCpjKnUtcCptKmQsdGhpcy5fdz1sKmMqZC1wKm0qdTticmVhaztjYXNlIlhaWSI6dGhpcy5feD1wKmMqZC1sKm0qdSx0aGlzLl95PWwqbSpkLXAqYyp1LHRoaXMuX3o9bCpjKnUrcCptKmQsdGhpcy5fdz1sKmMqZCtwKm0qdTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrYSl9cmV0dXJuITEhPT1lJiZ0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tQXhpc0FuZ2xlKHQsZSl7Y29uc3Qgbj1lLzIsbz1NYXRoLnNpbihuKTtyZXR1cm4gdGhpcy5feD10Lngqbyx0aGlzLl95PXQueSpvLHRoaXMuX3o9dC56Km8sdGhpcy5fdz1NYXRoLmNvcyhuKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCl7Y29uc3QgZT10LmVsZW1lbnRzLG49ZVswXSxvPWVbNF0saT1lWzhdLGE9ZVsxXSxyPWVbNV0scz1lWzldLGw9ZVsyXSxjPWVbNl0sZD1lWzEwXSxwPW4rcitkO2lmKHA+MCl7Y29uc3QgdD0uNS9NYXRoLnNxcnQocCsxKTt0aGlzLl93PS4yNS90LHRoaXMuX3g9KGMtcykqdCx0aGlzLl95PShpLWwpKnQsdGhpcy5fej0oYS1vKSp0fWVsc2UgaWYobj5yJiZuPmQpe2NvbnN0IHQ9MipNYXRoLnNxcnQoMStuLXItZCk7dGhpcy5fdz0oYy1zKS90LHRoaXMuX3g9LjI1KnQsdGhpcy5feT0obythKS90LHRoaXMuX3o9KGkrbCkvdH1lbHNlIGlmKHI+ZCl7Y29uc3QgdD0yKk1hdGguc3FydCgxK3Itbi1kKTt0aGlzLl93PShpLWwpL3QsdGhpcy5feD0obythKS90LHRoaXMuX3k9LjI1KnQsdGhpcy5fej0ocytjKS90fWVsc2V7Y29uc3QgdD0yKk1hdGguc3FydCgxK2Qtbi1yKTt0aGlzLl93PShhLW8pL3QsdGhpcy5feD0oaStsKS90LHRoaXMuX3k9KHMrYykvdCx0aGlzLl96PS4yNSp0fXJldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tVW5pdFZlY3RvcnModCxlKXtsZXQgbj10LmRvdChlKSsxO3JldHVybiBuPE51bWJlci5FUFNJTE9OPyhuPTAsTWF0aC5hYnModC54KT5NYXRoLmFicyh0LnopPyh0aGlzLl94PS10LnksdGhpcy5feT10LngsdGhpcy5fej0wLHRoaXMuX3c9bik6KHRoaXMuX3g9MCx0aGlzLl95PS10LnosdGhpcy5fej10LnksdGhpcy5fdz1uKSk6KHRoaXMuX3g9dC55KmUuei10LnoqZS55LHRoaXMuX3k9dC56KmUueC10LngqZS56LHRoaXMuX3o9dC54KmUueS10LnkqZS54LHRoaXMuX3c9biksdGhpcy5ub3JtYWxpemUoKX1hbmdsZVRvKHQpe3JldHVybiAyKk1hdGguYWNvcyhNYXRoLmFicyhaaXQodGhpcy5kb3QodCksLTEsMSkpKX1yb3RhdGVUb3dhcmRzKHQsZSl7Y29uc3Qgbj10aGlzLmFuZ2xlVG8odCk7aWYoMD09PW4pcmV0dXJuIHRoaXM7Y29uc3Qgbz1NYXRoLm1pbigxLGUvbik7cmV0dXJuIHRoaXMuc2xlcnAodCxvKSx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDAsMCwwLDEpfWludmVydCgpe3JldHVybiB0aGlzLmNvbmp1Z2F0ZSgpfWNvbmp1Z2F0ZSgpe3JldHVybiB0aGlzLl94Kj0tMSx0aGlzLl95Kj0tMSx0aGlzLl96Kj0tMSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMuX3gqdC5feCt0aGlzLl95KnQuX3krdGhpcy5feip0Ll96K3RoaXMuX3cqdC5fd31sZW5ndGhTcSgpe3JldHVybiB0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3d9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfW5vcm1hbGl6ZSgpe2xldCB0PXRoaXMubGVuZ3RoKCk7cmV0dXJuIDA9PT10Pyh0aGlzLl94PTAsdGhpcy5feT0wLHRoaXMuX3o9MCx0aGlzLl93PTEpOih0PTEvdCx0aGlzLl94PXRoaXMuX3gqdCx0aGlzLl95PXRoaXMuX3kqdCx0aGlzLl96PXRoaXMuX3oqdCx0aGlzLl93PXRoaXMuX3cqdCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCxlKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHRoaXMpfW11bHRpcGx5UXVhdGVybmlvbnModCxlKXtjb25zdCBuPXQuX3gsbz10Ll95LGk9dC5feixhPXQuX3cscj1lLl94LHM9ZS5feSxsPWUuX3osYz1lLl93O3JldHVybiB0aGlzLl94PW4qYythKnIrbypsLWkqcyx0aGlzLl95PW8qYythKnMraSpyLW4qbCx0aGlzLl96PWkqYythKmwrbipzLW8qcix0aGlzLl93PWEqYy1uKnItbypzLWkqbCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycCh0LGUpe2lmKDA9PT1lKXJldHVybiB0aGlzO2lmKDE9PT1lKXJldHVybiB0aGlzLmNvcHkodCk7Y29uc3Qgbj10aGlzLl94LG89dGhpcy5feSxpPXRoaXMuX3osYT10aGlzLl93O2xldCByPWEqdC5fdytuKnQuX3grbyp0Ll95K2kqdC5fejtpZihyPDA/KHRoaXMuX3c9LXQuX3csdGhpcy5feD0tdC5feCx0aGlzLl95PS10Ll95LHRoaXMuX3o9LXQuX3oscj0tcik6dGhpcy5jb3B5KHQpLHI+PTEpcmV0dXJuIHRoaXMuX3c9YSx0aGlzLl94PW4sdGhpcy5feT1vLHRoaXMuX3o9aSx0aGlzO2NvbnN0IHM9MS1yKnI7aWYoczw9TnVtYmVyLkVQU0lMT04pe2NvbnN0IHQ9MS1lO3JldHVybiB0aGlzLl93PXQqYStlKnRoaXMuX3csdGhpcy5feD10Km4rZSp0aGlzLl94LHRoaXMuX3k9dCpvK2UqdGhpcy5feSx0aGlzLl96PXQqaStlKnRoaXMuX3osdGhpcy5ub3JtYWxpemUoKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jb25zdCBsPU1hdGguc3FydChzKSxjPU1hdGguYXRhbjIobCxyKSxkPU1hdGguc2luKCgxLWUpKmMpL2wscD1NYXRoLnNpbihlKmMpL2w7cmV0dXJuIHRoaXMuX3c9YSpkK3RoaXMuX3cqcCx0aGlzLl94PW4qZCt0aGlzLl94KnAsdGhpcy5feT1vKmQrdGhpcy5feSpwLHRoaXMuX3o9aSpkK3RoaXMuX3oqcCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycFF1YXRlcm5pb25zKHQsZSxuKXt0aGlzLmNvcHkodCkuc2xlcnAoZSxuKX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX3c9PT10aGlzLl93fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMuX3g9dFtlXSx0aGlzLl95PXRbZSsxXSx0aGlzLl96PXRbZSsyXSx0aGlzLl93PXRbZSszXSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLl94LHRbZSsxXT10aGlzLl95LHRbZSsyXT10aGlzLl96LHRbZSszXT10aGlzLl93LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLl94PXQuZ2V0WChlKSx0aGlzLl95PXQuZ2V0WShlKSx0aGlzLl96PXQuZ2V0WihlKSx0aGlzLl93PXQuZ2V0VyhlKSx0aGlzfV9vbkNoYW5nZSh0KXtyZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaz10LHRoaXN9X29uQ2hhbmdlQ2FsbGJhY2soKXt9fWxhdC5wcm90b3R5cGUuaXNRdWF0ZXJuaW9uPSEwO2NsYXNzIGNhdHtjb25zdHJ1Y3Rvcih0PTAsZT0wLG49MCl7dGhpcy54PXQsdGhpcy55PWUsdGhpcy56PW59c2V0KHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49dGhpcy56KSx0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9bix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztjYXNlIDI6dGhpcy56PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzfWFkZCh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXMuej10LnorZS56LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzLnorPXQueiplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpcy56PXQuei1lLnosdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnModCxlKSk6KHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMpfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzfW11bHRpcGx5VmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54KmUueCx0aGlzLnk9dC55KmUueSx0aGlzLno9dC56KmUueix0aGlzfWFwcGx5RXVsZXIodCl7cmV0dXJuIHQmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmFwcGx5RXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpLHRoaXMuYXBwbHlRdWF0ZXJuaW9uKHBhdC5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQsZSl7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKHBhdC5zZXRGcm9tQXhpc0FuZ2xlKHQsZSkpfWFwcGx5TWF0cml4Myh0KXtjb25zdCBlPXRoaXMueCxuPXRoaXMueSxvPXRoaXMueixpPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1pWzBdKmUraVszXSpuK2lbNl0qbyx0aGlzLnk9aVsxXSplK2lbNF0qbitpWzddKm8sdGhpcy56PWlbMl0qZStpWzVdKm4raVs4XSpvLHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXgzKHQpLm5vcm1hbGl6ZSgpfWFwcGx5TWF0cml4NCh0KXtjb25zdCBlPXRoaXMueCxuPXRoaXMueSxvPXRoaXMueixpPXQuZWxlbWVudHMsYT0xLyhpWzNdKmUraVs3XSpuK2lbMTFdKm8raVsxNV0pO3JldHVybiB0aGlzLng9KGlbMF0qZStpWzRdKm4raVs4XSpvK2lbMTJdKSphLHRoaXMueT0oaVsxXSplK2lbNV0qbitpWzldKm8raVsxM10pKmEsdGhpcy56PShpWzJdKmUraVs2XSpuK2lbMTBdKm8raVsxNF0pKmEsdGhpc31hcHBseVF1YXRlcm5pb24odCl7Y29uc3QgZT10aGlzLngsbj10aGlzLnksbz10aGlzLnosaT10LngsYT10Lnkscj10Lnoscz10LncsbD1zKmUrYSpvLXIqbixjPXMqbityKmUtaSpvLGQ9cypvK2kqbi1hKmUscD0taSplLWEqbi1yKm87cmV0dXJuIHRoaXMueD1sKnMrcCotaStjKi1yLWQqLWEsdGhpcy55PWMqcytwKi1hK2QqLWktbCotcix0aGlzLno9ZCpzK3AqLXIrbCotYS1jKi1pLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtjb25zdCBlPXRoaXMueCxuPXRoaXMueSxvPXRoaXMueixpPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1pWzBdKmUraVs0XSpuK2lbOF0qbyx0aGlzLnk9aVsxXSplK2lbNV0qbitpWzldKm8sdGhpcy56PWlbMl0qZStpWzZdKm4raVsxMF0qbyx0aGlzLm5vcm1hbGl6ZSgpfWRpdmlkZSh0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpcy56Lz10LnosdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2NvbnN0IG49dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIobnx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzLno9LXRoaXMueix0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55K3RoaXMueip0Lnp9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnp9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueil9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpcy56Kz0odC56LXRoaXMueikqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxuKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqbix0aGlzLnk9dC55KyhlLnktdC55KSpuLHRoaXMuej10LnorKGUuei10LnopKm4sdGhpc31jcm9zcyh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5jcm9zcygpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmNyb3NzVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5jcm9zc1ZlY3RvcnModCxlKSk6dGhpcy5jcm9zc1ZlY3RvcnModGhpcyx0KX1jcm9zc1ZlY3RvcnModCxlKXtjb25zdCBuPXQueCxvPXQueSxpPXQueixhPWUueCxyPWUueSxzPWUuejtyZXR1cm4gdGhpcy54PW8qcy1pKnIsdGhpcy55PWkqYS1uKnMsdGhpcy56PW4qci1vKmEsdGhpc31wcm9qZWN0T25WZWN0b3IodCl7Y29uc3QgZT10Lmxlbmd0aFNxKCk7aWYoMD09PWUpcmV0dXJuIHRoaXMuc2V0KDAsMCwwKTtjb25zdCBuPXQuZG90KHRoaXMpL2U7cmV0dXJuIHRoaXMuY29weSh0KS5tdWx0aXBseVNjYWxhcihuKX1wcm9qZWN0T25QbGFuZSh0KXtyZXR1cm4gZGF0LmNvcHkodGhpcykucHJvamVjdE9uVmVjdG9yKHQpLHRoaXMuc3ViKGRhdCl9cmVmbGVjdCh0KXtyZXR1cm4gdGhpcy5zdWIoZGF0LmNvcHkodCkubXVsdGlwbHlTY2FsYXIoMip0aGlzLmRvdCh0KSkpfWFuZ2xlVG8odCl7Y29uc3QgZT1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYoMD09PWUpcmV0dXJuIE1hdGguUEkvMjtjb25zdCBuPXRoaXMuZG90KHQpL2U7cmV0dXJuIE1hdGguYWNvcyhaaXQobiwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2NvbnN0IGU9dGhpcy54LXQueCxuPXRoaXMueS10Lnksbz10aGlzLnotdC56O3JldHVybiBlKmUrbipuK28qb31tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KStNYXRoLmFicyh0aGlzLnotdC56KX1zZXRGcm9tU3BoZXJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21TcGhlcmljYWxDb29yZHModC5yYWRpdXMsdC5waGksdC50aGV0YSl9c2V0RnJvbVNwaGVyaWNhbENvb3Jkcyh0LGUsbil7Y29uc3Qgbz1NYXRoLnNpbihlKSp0O3JldHVybiB0aGlzLng9bypNYXRoLnNpbihuKSx0aGlzLnk9TWF0aC5jb3MoZSkqdCx0aGlzLno9bypNYXRoLmNvcyhuKSx0aGlzfXNldEZyb21DeWxpbmRyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHModC5yYWRpdXMsdC50aGV0YSx0LnkpfXNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LGUsbil7cmV0dXJuIHRoaXMueD10Kk1hdGguc2luKGUpLHRoaXMueT1uLHRoaXMuej10Kk1hdGguY29zKGUpLHRoaXN9c2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQpe2NvbnN0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWVbMTJdLHRoaXMueT1lWzEzXSx0aGlzLno9ZVsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7Y29uc3QgZT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxuPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLG89dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIHRoaXMueD1lLHRoaXMueT1uLHRoaXMuej1vLHRoaXN9c2V0RnJvbU1hdHJpeENvbHVtbih0LGUpe3JldHVybiB0aGlzLmZyb21BcnJheSh0LmVsZW1lbnRzLDQqZSl9c2V0RnJvbU1hdHJpeDNDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cywzKmUpfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMuen1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXMuej10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil7cmV0dXJuIHZvaWQgMCE9PW4mJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXN9fWNhdC5wcm90b3R5cGUuaXNWZWN0b3IzPSEwO2NvbnN0IGRhdD1uZXcgY2F0LHBhdD1uZXcgbGF0O2NsYXNzIG1hdHtjb25zdHJ1Y3Rvcih0PW5ldyBjYXQoMS8wLDEvMCwxLzApLGU9bmV3IGNhdCgtMS8wLC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KGUpLHRoaXN9c2V0RnJvbUFycmF5KHQpe2xldCBlPTEvMCxuPTEvMCxvPTEvMCxpPS0xLzAsYT0tMS8wLHI9LTEvMDtmb3IobGV0IHM9MCxsPXQubGVuZ3RoO3M8bDtzKz0zKXtjb25zdCBsPXRbc10sYz10W3MrMV0sZD10W3MrMl07bDxlJiYoZT1sKSxjPG4mJihuPWMpLGQ8byYmKG89ZCksbD5pJiYoaT1sKSxjPmEmJihhPWMpLGQ+ciYmKHI9ZCl9cmV0dXJuIHRoaXMubWluLnNldChlLG4sbyksdGhpcy5tYXguc2V0KGksYSxyKSx0aGlzfXNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCl7bGV0IGU9MS8wLG49MS8wLG89MS8wLGk9LTEvMCxhPS0xLzAscj0tMS8wO2ZvcihsZXQgcz0wLGw9dC5jb3VudDtzPGw7cysrKXtjb25zdCBsPXQuZ2V0WChzKSxjPXQuZ2V0WShzKSxkPXQuZ2V0WihzKTtsPGUmJihlPWwpLGM8biYmKG49YyksZDxvJiYobz1kKSxsPmkmJihpPWwpLGM+YSYmKGE9YyksZD5yJiYocj1kKX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsbixvKSx0aGlzLm1heC5zZXQoaSxhLHIpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtlXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxlKXtjb25zdCBuPWZhdC5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKC41KTtyZXR1cm4gdGhpcy5taW4uY29weSh0KS5zdWIobiksdGhpcy5tYXguY29weSh0KS5hZGQobiksdGhpc31zZXRGcm9tT2JqZWN0KHQpe3JldHVybiB0aGlzLm1ha2VFbXB0eSgpLHRoaXMuZXhwYW5kQnlPYmplY3QodCl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5taW4uY29weSh0Lm1pbiksdGhpcy5tYXguY29weSh0Lm1heCksdGhpc31tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5taW4ueD10aGlzLm1pbi55PXRoaXMubWluLno9MS8wLHRoaXMubWF4Lng9dGhpcy5tYXgueT10aGlzLm1heC56PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fHx0aGlzLm1heC56PHRoaXMubWluLnp9Z2V0Q2VudGVyKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9ZXhwYW5kQnlPYmplY3QodCl7dC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMSk7Y29uc3QgZT10Lmdlb21ldHJ5O3ZvaWQgMCE9PWUmJihudWxsPT09ZS5ib3VuZGluZ0JveCYmZS5jb21wdXRlQm91bmRpbmdCb3goKSxnYXQuY29weShlLmJvdW5kaW5nQm94KSxnYXQuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMudW5pb24oZ2F0KSk7Y29uc3Qgbj10LmNoaWxkcmVuO2ZvcihsZXQgdD0wLGU9bi5sZW5ndGg7dDxlO3QrKyl0aGlzLmV4cGFuZEJ5T2JqZWN0KG5bdF0pO3JldHVybiB0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueXx8dC56PHRoaXMubWluLnp8fHQuej50aGlzLm1heC56KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueSYmdGhpcy5taW4uejw9dC5taW4ueiYmdC5tYXguejw9dGhpcy5tYXguen1nZXRQYXJhbWV0ZXIodCxlKXtyZXR1cm4gZS5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpLCh0LnotdGhpcy5taW4ueikvKHRoaXMubWF4LnotdGhpcy5taW4ueikpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4Lnl8fHQubWF4Lno8dGhpcy5taW4uenx8dC5taW4uej50aGlzLm1heC56KX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmNsYW1wUG9pbnQodC5jZW50ZXIsZmF0KSxmYXQuZGlzdGFuY2VUb1NxdWFyZWQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31pbnRlcnNlY3RzUGxhbmUodCl7bGV0IGUsbjtyZXR1cm4gdC5ub3JtYWwueD4wPyhlPXQubm9ybWFsLngqdGhpcy5taW4ueCxuPXQubm9ybWFsLngqdGhpcy5tYXgueCk6KGU9dC5ub3JtYWwueCp0aGlzLm1heC54LG49dC5ub3JtYWwueCp0aGlzLm1pbi54KSx0Lm5vcm1hbC55PjA/KGUrPXQubm9ybWFsLnkqdGhpcy5taW4ueSxuKz10Lm5vcm1hbC55KnRoaXMubWF4LnkpOihlKz10Lm5vcm1hbC55KnRoaXMubWF4Lnksbis9dC5ub3JtYWwueSp0aGlzLm1pbi55KSx0Lm5vcm1hbC56PjA/KGUrPXQubm9ybWFsLnoqdGhpcy5taW4ueixuKz10Lm5vcm1hbC56KnRoaXMubWF4LnopOihlKz10Lm5vcm1hbC56KnRoaXMubWF4Lnosbis9dC5ub3JtYWwueip0aGlzLm1pbi56KSxlPD0tdC5jb25zdGFudCYmbj49LXQuY29uc3RhbnR9aW50ZXJzZWN0c1RyaWFuZ2xlKHQpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiExO3RoaXMuZ2V0Q2VudGVyKHZhdCkseGF0LnN1YlZlY3RvcnModGhpcy5tYXgsdmF0KSxoYXQuc3ViVmVjdG9ycyh0LmEsdmF0KSxiYXQuc3ViVmVjdG9ycyh0LmIsdmF0KSx5YXQuc3ViVmVjdG9ycyh0LmMsdmF0KSxfYXQuc3ViVmVjdG9ycyhiYXQsaGF0KSxDYXQuc3ViVmVjdG9ycyh5YXQsYmF0KSxNYXQuc3ViVmVjdG9ycyhoYXQseWF0KTtsZXQgZT1bMCwtX2F0LnosX2F0LnksMCwtQ2F0LnosQ2F0LnksMCwtTWF0LnosTWF0LnksX2F0LnosMCwtX2F0LngsQ2F0LnosMCwtQ2F0LngsTWF0LnosMCwtTWF0LngsLV9hdC55LF9hdC54LDAsLUNhdC55LENhdC54LDAsLU1hdC55LE1hdC54LDBdO3JldHVybiEhd2F0KGUsaGF0LGJhdCx5YXQseGF0KSYmKGU9WzEsMCwwLDAsMSwwLDAsMCwxXSwhIXdhdChlLGhhdCxiYXQseWF0LHhhdCkmJihPYXQuY3Jvc3NWZWN0b3JzKF9hdCxDYXQpLGU9W09hdC54LE9hdC55LE9hdC56XSx3YXQoZSxoYXQsYmF0LHlhdCx4YXQpKSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gZmF0LmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1nZXRCb3VuZGluZ1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5nZXRDZW50ZXIodC5jZW50ZXIpLHQucmFkaXVzPS41KnRoaXMuZ2V0U2l6ZShmYXQpLmxlbmd0aCgpLHR9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKXx8KHVhdFswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSx1YXRbMV0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksdWF0WzJdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLHVhdFszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx1YXRbNF0uc2V0KHRoaXMubWF4LngsdGhpcy5taW4ueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksdWF0WzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLHVhdFs2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSx1YXRbN10uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRGcm9tUG9pbnRzKHVhdCkpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX1tYXQucHJvdG90eXBlLmlzQm94Mz0hMDtjb25zdCB1YXQ9W25ldyBjYXQsbmV3IGNhdCxuZXcgY2F0LG5ldyBjYXQsbmV3IGNhdCxuZXcgY2F0LG5ldyBjYXQsbmV3IGNhdF0sZmF0PW5ldyBjYXQsZ2F0PW5ldyBtYXQsaGF0PW5ldyBjYXQsYmF0PW5ldyBjYXQseWF0PW5ldyBjYXQsX2F0PW5ldyBjYXQsQ2F0PW5ldyBjYXQsTWF0PW5ldyBjYXQsdmF0PW5ldyBjYXQseGF0PW5ldyBjYXQsT2F0PW5ldyBjYXQsUGF0PW5ldyBjYXQ7ZnVuY3Rpb24gd2F0KHQsZSxuLG8saSl7Zm9yKGxldCBhPTAscj10Lmxlbmd0aC0zO2E8PXI7YSs9Myl7UGF0LmZyb21BcnJheSh0LGEpO2NvbnN0IHI9aS54Kk1hdGguYWJzKFBhdC54KStpLnkqTWF0aC5hYnMoUGF0LnkpK2kueipNYXRoLmFicyhQYXQueikscz1lLmRvdChQYXQpLGw9bi5kb3QoUGF0KSxjPW8uZG90KFBhdCk7aWYoTWF0aC5tYXgoLU1hdGgubWF4KHMsbCxjKSxNYXRoLm1pbihzLGwsYykpPnIpcmV0dXJuITF9cmV0dXJuITB9Y29uc3Qga2F0PW5ldyBtYXQsU2F0PW5ldyBjYXQsRGF0PW5ldyBjYXQsRWF0PW5ldyBjYXQ7Y2xhc3MgUmF0e2NvbnN0cnVjdG9yKHQ9bmV3IGNhdCxlPS0xKXt0aGlzLmNlbnRlcj10LHRoaXMucmFkaXVzPWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodCksdGhpcy5yYWRpdXM9ZSx0aGlzfXNldEZyb21Qb2ludHModCxlKXtjb25zdCBuPXRoaXMuY2VudGVyO3ZvaWQgMCE9PWU/bi5jb3B5KGUpOmthdC5zZXRGcm9tUG9pbnRzKHQpLmdldENlbnRlcihuKTtsZXQgbz0wO2ZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKylvPU1hdGgubWF4KG8sbi5kaXN0YW5jZVRvU3F1YXJlZCh0W2VdKSk7cmV0dXJuIHRoaXMucmFkaXVzPU1hdGguc3FydChvKSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodC5jZW50ZXIpLHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLnJhZGl1czwwfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLmNlbnRlci5zZXQoMCwwLDApLHRoaXMucmFkaXVzPS0xLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4gdC5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmNlbnRlcik8PXRoaXMucmFkaXVzKnRoaXMucmFkaXVzfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gdC5kaXN0YW5jZVRvKHRoaXMuY2VudGVyKS10aGlzLnJhZGl1c31pbnRlcnNlY3RzU3BoZXJlKHQpe2NvbnN0IGU9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9ZSplfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxlKXtjb25zdCBuPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHQpO3JldHVybiBlLmNvcHkodCksbj50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyYmKGUuc3ViKHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKSxlLm11bHRpcGx5U2NhbGFyKHRoaXMucmFkaXVzKS5hZGQodGhpcy5jZW50ZXIpKSxlfWdldEJvdW5kaW5nQm94KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT8odC5tYWtlRW1wdHkoKSx0KToodC5zZXQodGhpcy5jZW50ZXIsdGhpcy5jZW50ZXIpLHQuZXhwYW5kQnlTY2FsYXIodGhpcy5yYWRpdXMpLHQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMucmFkaXVzPXRoaXMucmFkaXVzKnQuZ2V0TWF4U2NhbGVPbkF4aXMoKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYWRkKHQpLHRoaXN9ZXhwYW5kQnlQb2ludCh0KXtFYXQuc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtjb25zdCBlPUVhdC5sZW5ndGhTcSgpO2lmKGU+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMpe2NvbnN0IHQ9TWF0aC5zcXJ0KGUpLG49LjUqKHQtdGhpcy5yYWRpdXMpO3RoaXMuY2VudGVyLmFkZChFYXQubXVsdGlwbHlTY2FsYXIobi90KSksdGhpcy5yYWRpdXMrPW59cmV0dXJuIHRoaXN9dW5pb24odCl7cmV0dXJuIERhdC5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0LnJhZGl1cyksdGhpcy5leHBhbmRCeVBvaW50KFNhdC5jb3B5KHQuY2VudGVyKS5hZGQoRGF0KSksdGhpcy5leHBhbmRCeVBvaW50KFNhdC5jb3B5KHQuY2VudGVyKS5zdWIoRGF0KSksdGhpc31lcXVhbHModCl7cmV0dXJuIHQuY2VudGVyLmVxdWFscyh0aGlzLmNlbnRlcikmJnQucmFkaXVzPT09dGhpcy5yYWRpdXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fWNvbnN0IEFhdD1uZXcgY2F0LFRhdD1uZXcgY2F0LE5hdD1uZXcgY2F0LHphdD1uZXcgY2F0LElhdD1uZXcgY2F0LEhhdD1uZXcgY2F0LEZhdD1uZXcgY2F0O2NsYXNzIExhdHtjb25zdHJ1Y3Rvcih0PW5ldyBjYXQsZT1uZXcgY2F0KDAsMCwtMSkpe3RoaXMub3JpZ2luPXQsdGhpcy5kaXJlY3Rpb249ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0KSx0aGlzLmRpcmVjdGlvbi5jb3B5KGUpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0Lm9yaWdpbiksdGhpcy5kaXJlY3Rpb24uY29weSh0LmRpcmVjdGlvbiksdGhpc31hdCh0LGUpe3JldHVybiBlLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLm9yaWdpbil9bG9va0F0KHQpe3JldHVybiB0aGlzLmRpcmVjdGlvbi5jb3B5KHQpLnN1Yih0aGlzLm9yaWdpbikubm9ybWFsaXplKCksdGhpc31yZWNhc3QodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodGhpcy5hdCh0LEFhdCkpLHRoaXN9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUpe2Uuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKTtjb25zdCBuPWUuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gbjwwP2UuY29weSh0aGlzLm9yaWdpbik6ZS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihuKS5hZGQodGhpcy5vcmlnaW4pfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodCkpfWRpc3RhbmNlU3FUb1BvaW50KHQpe2NvbnN0IGU9QWF0LnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbikuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gZTwwP3RoaXMub3JpZ2luLmRpc3RhbmNlVG9TcXVhcmVkKHQpOihBYXQuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoZSkuYWRkKHRoaXMub3JpZ2luKSxBYXQuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlU3FUb1NlZ21lbnQodCxlLG4sbyl7VGF0LmNvcHkodCkuYWRkKGUpLm11bHRpcGx5U2NhbGFyKC41KSxOYXQuY29weShlKS5zdWIodCkubm9ybWFsaXplKCksemF0LmNvcHkodGhpcy5vcmlnaW4pLnN1YihUYXQpO2NvbnN0IGk9LjUqdC5kaXN0YW5jZVRvKGUpLGE9LXRoaXMuZGlyZWN0aW9uLmRvdChOYXQpLHI9emF0LmRvdCh0aGlzLmRpcmVjdGlvbikscz0temF0LmRvdChOYXQpLGw9emF0Lmxlbmd0aFNxKCksYz1NYXRoLmFicygxLWEqYSk7bGV0IGQscCxtLHU7aWYoYz4wKWlmKGQ9YSpzLXIscD1hKnItcyx1PWkqYyxkPj0wKWlmKHA+PS11KWlmKHA8PXUpe2NvbnN0IHQ9MS9jO2QqPXQscCo9dCxtPWQqKGQrYSpwKzIqcikrcCooYSpkK3ArMipzKStsfWVsc2UgcD1pLGQ9TWF0aC5tYXgoMCwtKGEqcCtyKSksbT0tZCpkK3AqKHArMipzKStsO2Vsc2UgcD0taSxkPU1hdGgubWF4KDAsLShhKnArcikpLG09LWQqZCtwKihwKzIqcykrbDtlbHNlIHA8PS11PyhkPU1hdGgubWF4KDAsLSgtYSppK3IpKSxwPWQ+MD8taTpNYXRoLm1pbihNYXRoLm1heCgtaSwtcyksaSksbT0tZCpkK3AqKHArMipzKStsKTpwPD11PyhkPTAscD1NYXRoLm1pbihNYXRoLm1heCgtaSwtcyksaSksbT1wKihwKzIqcykrbCk6KGQ9TWF0aC5tYXgoMCwtKGEqaStyKSkscD1kPjA/aTpNYXRoLm1pbihNYXRoLm1heCgtaSwtcyksaSksbT0tZCpkK3AqKHArMipzKStsKTtlbHNlIHA9YT4wPy1pOmksZD1NYXRoLm1heCgwLC0oYSpwK3IpKSxtPS1kKmQrcCoocCsyKnMpK2w7cmV0dXJuIG4mJm4uY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoZCkuYWRkKHRoaXMub3JpZ2luKSxvJiZvLmNvcHkoTmF0KS5tdWx0aXBseVNjYWxhcihwKS5hZGQoVGF0KSxtfWludGVyc2VjdFNwaGVyZSh0LGUpe0FhdC5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMub3JpZ2luKTtjb25zdCBuPUFhdC5kb3QodGhpcy5kaXJlY3Rpb24pLG89QWF0LmRvdChBYXQpLW4qbixpPXQucmFkaXVzKnQucmFkaXVzO2lmKG8+aSlyZXR1cm4gbnVsbDtjb25zdCBhPU1hdGguc3FydChpLW8pLHI9bi1hLHM9bithO3JldHVybiByPDAmJnM8MD9udWxsOnRoaXMuYXQocjwwP3M6cixlKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9ZGlzdGFuY2VUb1BsYW5lKHQpe2NvbnN0IGU9dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKTtpZigwPT09ZSlyZXR1cm4gMD09PXQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKT8wOm51bGw7Y29uc3Qgbj0tKHRoaXMub3JpZ2luLmRvdCh0Lm5vcm1hbCkrdC5jb25zdGFudCkvZTtyZXR1cm4gbj49MD9uOm51bGx9aW50ZXJzZWN0UGxhbmUodCxlKXtjb25zdCBuPXRoaXMuZGlzdGFuY2VUb1BsYW5lKHQpO3JldHVybiBudWxsPT09bj9udWxsOnRoaXMuYXQobixlKX1pbnRlcnNlY3RzUGxhbmUodCl7Y29uc3QgZT10LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik7cmV0dXJuIDA9PT1lfHx0Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pKmU8MH1pbnRlcnNlY3RCb3godCxlKXtsZXQgbixvLGksYSxyLHM7Y29uc3QgbD0xL3RoaXMuZGlyZWN0aW9uLngsYz0xL3RoaXMuZGlyZWN0aW9uLnksZD0xL3RoaXMuZGlyZWN0aW9uLnoscD10aGlzLm9yaWdpbjtyZXR1cm4gbD49MD8obj0odC5taW4ueC1wLngpKmwsbz0odC5tYXgueC1wLngpKmwpOihuPSh0Lm1heC54LXAueCkqbCxvPSh0Lm1pbi54LXAueCkqbCksYz49MD8oaT0odC5taW4ueS1wLnkpKmMsYT0odC5tYXgueS1wLnkpKmMpOihpPSh0Lm1heC55LXAueSkqYyxhPSh0Lm1pbi55LXAueSkqYyksbj5hfHxpPm8/bnVsbDooKGk+bnx8biE9bikmJihuPWkpLChhPG98fG8hPW8pJiYobz1hKSxkPj0wPyhyPSh0Lm1pbi56LXAueikqZCxzPSh0Lm1heC56LXAueikqZCk6KHI9KHQubWF4LnotcC56KSpkLHM9KHQubWluLnotcC56KSpkKSxuPnN8fHI+bz9udWxsOigocj5ufHxuIT1uKSYmKG49ciksKHM8b3x8byE9bykmJihvPXMpLG88MD9udWxsOnRoaXMuYXQobj49MD9uOm8sZSkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiBudWxsIT09dGhpcy5pbnRlcnNlY3RCb3godCxBYXQpfWludGVyc2VjdFRyaWFuZ2xlKHQsZSxuLG8saSl7SWF0LnN1YlZlY3RvcnMoZSx0KSxIYXQuc3ViVmVjdG9ycyhuLHQpLEZhdC5jcm9zc1ZlY3RvcnMoSWF0LEhhdCk7bGV0IGEscj10aGlzLmRpcmVjdGlvbi5kb3QoRmF0KTtpZihyPjApe2lmKG8pcmV0dXJuIG51bGw7YT0xfWVsc2V7aWYoIShyPDApKXJldHVybiBudWxsO2E9LTEscj0tcn16YXQuc3ViVmVjdG9ycyh0aGlzLm9yaWdpbix0KTtjb25zdCBzPWEqdGhpcy5kaXJlY3Rpb24uZG90KEhhdC5jcm9zc1ZlY3RvcnMoemF0LEhhdCkpO2lmKHM8MClyZXR1cm4gbnVsbDtjb25zdCBsPWEqdGhpcy5kaXJlY3Rpb24uZG90KElhdC5jcm9zcyh6YXQpKTtpZihsPDApcmV0dXJuIG51bGw7aWYocytsPnIpcmV0dXJuIG51bGw7Y29uc3QgYz0tYSp6YXQuZG90KEZhdCk7cmV0dXJuIGM8MD9udWxsOnRoaXMuYXQoYy9yLGkpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KHQpLHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSYmdC5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19Y2xhc3MgQmF0e2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsbixvLGksYSxyLHMsbCxjLGQscCxtLHUsZixnKXtjb25zdCBoPXRoaXMuZWxlbWVudHM7cmV0dXJuIGhbMF09dCxoWzRdPWUsaFs4XT1uLGhbMTJdPW8saFsxXT1pLGhbNV09YSxoWzldPXIsaFsxM109cyxoWzJdPWwsaFs2XT1jLGhbMTBdPWQsaFsxNF09cCxoWzNdPW0saFs3XT11LGhbMTFdPWYsaFsxNV09Zyx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IEJhdCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfWNvcHkodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gZVswXT1uWzBdLGVbMV09blsxXSxlWzJdPW5bMl0sZVszXT1uWzNdLGVbNF09bls0XSxlWzVdPW5bNV0sZVs2XT1uWzZdLGVbN109bls3XSxlWzhdPW5bOF0sZVs5XT1uWzldLGVbMTBdPW5bMTBdLGVbMTFdPW5bMTFdLGVbMTJdPW5bMTJdLGVbMTNdPW5bMTNdLGVbMTRdPW5bMTRdLGVbMTVdPW5bMTVdLHRoaXN9Y29weVBvc2l0aW9uKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHM7cmV0dXJuIGVbMTJdPW5bMTJdLGVbMTNdPW5bMTNdLGVbMTRdPW5bMTRdLHRoaXN9c2V0RnJvbU1hdHJpeDModCl7Y29uc3QgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChlWzBdLGVbM10sZVs2XSwwLGVbMV0sZVs0XSxlWzddLDAsZVsyXSxlWzVdLGVbOF0sMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RCYXNpcyh0LGUsbil7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDApLGUuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpLG4uc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpLHRoaXN9bWFrZUJhc2lzKHQsZSxuKXtyZXR1cm4gdGhpcy5zZXQodC54LGUueCxuLngsMCx0LnksZS55LG4ueSwwLHQueixlLnosbi56LDAsMCwwLDAsMSksdGhpc31leHRyYWN0Um90YXRpb24odCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cyxvPTEvVmF0LnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxpPTEvVmF0LnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxhPTEvVmF0LnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gZVswXT1uWzBdKm8sZVsxXT1uWzFdKm8sZVsyXT1uWzJdKm8sZVszXT0wLGVbNF09bls0XSppLGVbNV09bls1XSppLGVbNl09bls2XSppLGVbN109MCxlWzhdPW5bOF0qYSxlWzldPW5bOV0qYSxlWzEwXT1uWzEwXSphLGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21FdWxlcih0KXt0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC54LG89dC55LGk9dC56LGE9TWF0aC5jb3Mobikscj1NYXRoLnNpbihuKSxzPU1hdGguY29zKG8pLGw9TWF0aC5zaW4obyksYz1NYXRoLmNvcyhpKSxkPU1hdGguc2luKGkpO2lmKCJYWVoiPT09dC5vcmRlcil7Y29uc3QgdD1hKmMsbj1hKmQsbz1yKmMsaT1yKmQ7ZVswXT1zKmMsZVs0XT0tcypkLGVbOF09bCxlWzFdPW4rbypsLGVbNV09dC1pKmwsZVs5XT0tcipzLGVbMl09aS10KmwsZVs2XT1vK24qbCxlWzEwXT1hKnN9ZWxzZSBpZigiWVhaIj09PXQub3JkZXIpe2NvbnN0IHQ9cypjLG49cypkLG89bCpjLGk9bCpkO2VbMF09dCtpKnIsZVs0XT1vKnItbixlWzhdPWEqbCxlWzFdPWEqZCxlWzVdPWEqYyxlWzldPS1yLGVbMl09bipyLW8sZVs2XT1pK3QqcixlWzEwXT1hKnN9ZWxzZSBpZigiWlhZIj09PXQub3JkZXIpe2NvbnN0IHQ9cypjLG49cypkLG89bCpjLGk9bCpkO2VbMF09dC1pKnIsZVs0XT0tYSpkLGVbOF09bytuKnIsZVsxXT1uK28qcixlWzVdPWEqYyxlWzldPWktdCpyLGVbMl09LWEqbCxlWzZdPXIsZVsxMF09YSpzfWVsc2UgaWYoIlpZWCI9PT10Lm9yZGVyKXtjb25zdCB0PWEqYyxuPWEqZCxvPXIqYyxpPXIqZDtlWzBdPXMqYyxlWzRdPW8qbC1uLGVbOF09dCpsK2ksZVsxXT1zKmQsZVs1XT1pKmwrdCxlWzldPW4qbC1vLGVbMl09LWwsZVs2XT1yKnMsZVsxMF09YSpzfWVsc2UgaWYoIllaWCI9PT10Lm9yZGVyKXtjb25zdCB0PWEqcyxuPWEqbCxvPXIqcyxpPXIqbDtlWzBdPXMqYyxlWzRdPWktdCpkLGVbOF09bypkK24sZVsxXT1kLGVbNV09YSpjLGVbOV09LXIqYyxlWzJdPS1sKmMsZVs2XT1uKmQrbyxlWzEwXT10LWkqZH1lbHNlIGlmKCJYWlkiPT09dC5vcmRlcil7Y29uc3QgdD1hKnMsbj1hKmwsbz1yKnMsaT1yKmw7ZVswXT1zKmMsZVs0XT0tZCxlWzhdPWwqYyxlWzFdPXQqZCtpLGVbNV09YSpjLGVbOV09bipkLW8sZVsyXT1vKmQtbixlWzZdPXIqYyxlWzEwXT1pKmQrdH1yZXR1cm4gZVszXT0wLGVbN109MCxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5jb21wb3NlKFVhdCx0LEdhdCl9bG9va0F0KHQsZSxuKXtjb25zdCBvPXRoaXMuZWxlbWVudHM7cmV0dXJuIHFhdC5zdWJWZWN0b3JzKHQsZSksMD09PXFhdC5sZW5ndGhTcSgpJiYocWF0Lno9MSkscWF0Lm5vcm1hbGl6ZSgpLFdhdC5jcm9zc1ZlY3RvcnMobixxYXQpLDA9PT1XYXQubGVuZ3RoU3EoKSYmKDE9PT1NYXRoLmFicyhuLnopP3FhdC54Kz0xZS00OnFhdC56Kz0xZS00LHFhdC5ub3JtYWxpemUoKSxXYXQuY3Jvc3NWZWN0b3JzKG4scWF0KSksV2F0Lm5vcm1hbGl6ZSgpLFlhdC5jcm9zc1ZlY3RvcnMocWF0LFdhdCksb1swXT1XYXQueCxvWzRdPVlhdC54LG9bOF09cWF0Lngsb1sxXT1XYXQueSxvWzVdPVlhdC55LG9bOV09cWF0Lnksb1syXT1XYXQueixvWzZdPVlhdC56LG9bMTBdPXFhdC56LHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseU1hdHJpY2VzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5TWF0cmljZXModCxlKSk6dGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtjb25zdCBuPXQuZWxlbWVudHMsbz1lLmVsZW1lbnRzLGk9dGhpcy5lbGVtZW50cyxhPW5bMF0scj1uWzRdLHM9bls4XSxsPW5bMTJdLGM9blsxXSxkPW5bNV0scD1uWzldLG09blsxM10sdT1uWzJdLGY9bls2XSxnPW5bMTBdLGg9blsxNF0sYj1uWzNdLHk9bls3XSxfPW5bMTFdLEM9blsxNV0sTT1vWzBdLHY9b1s0XSx4PW9bOF0sTz1vWzEyXSxQPW9bMV0sdz1vWzVdLGs9b1s5XSxTPW9bMTNdLEQ9b1syXSxFPW9bNl0sUj1vWzEwXSxBPW9bMTRdLFQ9b1szXSxOPW9bN10sej1vWzExXSxJPW9bMTVdO3JldHVybiBpWzBdPWEqTStyKlArcypEK2wqVCxpWzRdPWEqdityKncrcypFK2wqTixpWzhdPWEqeCtyKmsrcypSK2wqeixpWzEyXT1hKk8rcipTK3MqQStsKkksaVsxXT1jKk0rZCpQK3AqRCttKlQsaVs1XT1jKnYrZCp3K3AqRSttKk4saVs5XT1jKngrZCprK3AqUittKnosaVsxM109YypPK2QqUytwKkErbSpJLGlbMl09dSpNK2YqUCtnKkQraCpULGlbNl09dSp2K2YqdytnKkUraCpOLGlbMTBdPXUqeCtmKmsrZypSK2gqeixpWzE0XT11Kk8rZipTK2cqQStoKkksaVszXT1iKk0reSpQK18qRCtDKlQsaVs3XT1iKnYreSp3K18qRStDKk4saVsxMV09Yip4K3kqaytfKlIrQyp6LGlbMTVdPWIqTyt5KlMrXypBK0MqSSx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzRdKj10LGVbOF0qPXQsZVsxMl0qPXQsZVsxXSo9dCxlWzVdKj10LGVbOV0qPXQsZVsxM10qPXQsZVsyXSo9dCxlWzZdKj10LGVbMTBdKj10LGVbMTRdKj10LGVbM10qPXQsZVs3XSo9dCxlWzExXSo9dCxlWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7Y29uc3QgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxuPXRbNF0sbz10WzhdLGk9dFsxMl0sYT10WzFdLHI9dFs1XSxzPXRbOV0sbD10WzEzXSxjPXRbMl0sZD10WzZdLHA9dFsxMF0sbT10WzE0XTtyZXR1cm4gdFszXSooK2kqcypkLW8qbCpkLWkqcipwK24qbCpwK28qciptLW4qcyptKSt0WzddKigrZSpzKm0tZSpsKnAraSphKnAtbyphKm0rbypsKmMtaSpzKmMpK3RbMTFdKigrZSpsKmQtZSpyKm0taSphKmQrbiphKm0raSpyKmMtbipsKmMpK3RbMTVdKigtbypyKmMtZSpzKmQrZSpyKnArbyphKmQtbiphKnArbipzKmMpfXRyYW5zcG9zZSgpe2NvbnN0IHQ9dGhpcy5lbGVtZW50cztsZXQgZTtyZXR1cm4gZT10WzFdLHRbMV09dFs0XSx0WzRdPWUsZT10WzJdLHRbMl09dFs4XSx0WzhdPWUsZT10WzZdLHRbNl09dFs5XSx0WzldPWUsZT10WzNdLHRbM109dFsxMl0sdFsxMl09ZSxlPXRbN10sdFs3XT10WzEzXSx0WzEzXT1lLGU9dFsxMV0sdFsxMV09dFsxNF0sdFsxNF09ZSx0aGlzfXNldFBvc2l0aW9uKHQsZSxuKXtjb25zdCBvPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQuaXNWZWN0b3IzPyhvWzEyXT10Lngsb1sxM109dC55LG9bMTRdPXQueik6KG9bMTJdPXQsb1sxM109ZSxvWzE0XT1uKSx0aGlzfWludmVydCgpe2NvbnN0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0sbj10WzFdLG89dFsyXSxpPXRbM10sYT10WzRdLHI9dFs1XSxzPXRbNl0sbD10WzddLGM9dFs4XSxkPXRbOV0scD10WzEwXSxtPXRbMTFdLHU9dFsxMl0sZj10WzEzXSxnPXRbMTRdLGg9dFsxNV0sYj1kKmcqbC1mKnAqbCtmKnMqbS1yKmcqbS1kKnMqaCtyKnAqaCx5PXUqcCpsLWMqZypsLXUqcyptK2EqZyptK2MqcypoLWEqcCpoLF89YypmKmwtdSpkKmwrdSpyKm0tYSpmKm0tYypyKmgrYSpkKmgsQz11KmQqcy1jKmYqcy11KnIqcCthKmYqcCtjKnIqZy1hKmQqZyxNPWUqYituKnkrbypfK2kqQztpZigwPT09TSlyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCk7Y29uc3Qgdj0xL007cmV0dXJuIHRbMF09Yip2LHRbMV09KGYqcCppLWQqZyppLWYqbyptK24qZyptK2QqbypoLW4qcCpoKSp2LHRbMl09KHIqZyppLWYqcyppK2YqbypsLW4qZypsLXIqbypoK24qcypoKSp2LHRbM109KGQqcyppLXIqcCppLWQqbypsK24qcCpsK3IqbyptLW4qcyptKSp2LHRbNF09eSp2LHRbNV09KGMqZyppLXUqcCppK3UqbyptLWUqZyptLWMqbypoK2UqcCpoKSp2LHRbNl09KHUqcyppLWEqZyppLXUqbypsK2UqZypsK2EqbypoLWUqcypoKSp2LHRbN109KGEqcCppLWMqcyppK2MqbypsLWUqcCpsLWEqbyptK2UqcyptKSp2LHRbOF09Xyp2LHRbOV09KHUqZCppLWMqZippLXUqbiptK2UqZiptK2MqbipoLWUqZCpoKSp2LHRbMTBdPShhKmYqaS11KnIqaSt1Km4qbC1lKmYqbC1hKm4qaCtlKnIqaCkqdix0WzExXT0oYypyKmktYSpkKmktYypuKmwrZSpkKmwrYSpuKm0tZSpyKm0pKnYsdFsxMl09Qyp2LHRbMTNdPShjKmYqby11KmQqbyt1Km4qcC1lKmYqcC1jKm4qZytlKmQqZykqdix0WzE0XT0odSpyKm8tYSpmKm8tdSpuKnMrZSpmKnMrYSpuKmctZSpyKmcpKnYsdFsxNV09KGEqZCpvLWMqcipvK2MqbipzLWUqZCpzLWEqbipwK2UqcipwKSp2LHRoaXN9c2NhbGUodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLG49dC54LG89dC55LGk9dC56O3JldHVybiBlWzBdKj1uLGVbNF0qPW8sZVs4XSo9aSxlWzFdKj1uLGVbNV0qPW8sZVs5XSo9aSxlWzJdKj1uLGVbNl0qPW8sZVsxMF0qPWksZVszXSo9bixlWzddKj1vLGVbMTFdKj1pLHRoaXN9Z2V0TWF4U2NhbGVPbkF4aXMoKXtjb25zdCB0PXRoaXMuZWxlbWVudHM7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSx0WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSx0WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdKSl9bWFrZVRyYW5zbGF0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsdCwwLDEsMCxlLDAsMCwxLG4sMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25YKHQpe2NvbnN0IGU9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLGUsLW4sMCwwLG4sZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWSh0KXtjb25zdCBlPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsMCxuLDAsMCwxLDAsMCwtbiwwLGUsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbloodCl7Y29uc3QgZT1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLC1uLDAsMCxuLGUsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25BeGlzKHQsZSl7Y29uc3Qgbj1NYXRoLmNvcyhlKSxvPU1hdGguc2luKGUpLGk9MS1uLGE9dC54LHI9dC55LHM9dC56LGw9aSphLGM9aSpyO3JldHVybiB0aGlzLnNldChsKmErbixsKnItbypzLGwqcytvKnIsMCxsKnIrbypzLGMqcituLGMqcy1vKmEsMCxsKnMtbypyLGMqcytvKmEsaSpzKnMrbiwwLDAsMCwwLDEpLHRoaXN9bWFrZVNjYWxlKHQsZSxuKXtyZXR1cm4gdGhpcy5zZXQodCwwLDAsMCwwLGUsMCwwLDAsMCxuLDAsMCwwLDAsMSksdGhpc31tYWtlU2hlYXIodCxlLG4sbyxpLGEpe3JldHVybiB0aGlzLnNldCgxLG4saSwwLHQsMSxhLDAsZSxvLDEsMCwwLDAsMCwxKSx0aGlzfWNvbXBvc2UodCxlLG4pe2NvbnN0IG89dGhpcy5lbGVtZW50cyxpPWUuX3gsYT1lLl95LHI9ZS5feixzPWUuX3csbD1pK2ksYz1hK2EsZD1yK3IscD1pKmwsbT1pKmMsdT1pKmQsZj1hKmMsZz1hKmQsaD1yKmQsYj1zKmwseT1zKmMsXz1zKmQsQz1uLngsTT1uLnksdj1uLno7cmV0dXJuIG9bMF09KDEtKGYraCkpKkMsb1sxXT0obStfKSpDLG9bMl09KHUteSkqQyxvWzNdPTAsb1s0XT0obS1fKSpNLG9bNV09KDEtKHAraCkpKk0sb1s2XT0oZytiKSpNLG9bN109MCxvWzhdPSh1K3kpKnYsb1s5XT0oZy1iKSp2LG9bMTBdPSgxLShwK2YpKSp2LG9bMTFdPTAsb1sxMl09dC54LG9bMTNdPXQueSxvWzE0XT10Lnosb1sxNV09MSx0aGlzfWRlY29tcG9zZSh0LGUsbil7Y29uc3Qgbz10aGlzLmVsZW1lbnRzO2xldCBpPVZhdC5zZXQob1swXSxvWzFdLG9bMl0pLmxlbmd0aCgpO2NvbnN0IGE9VmF0LnNldChvWzRdLG9bNV0sb1s2XSkubGVuZ3RoKCkscj1WYXQuc2V0KG9bOF0sb1s5XSxvWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihpPS1pKSx0Lng9b1sxMl0sdC55PW9bMTNdLHQuej1vWzE0XSxqYXQuY29weSh0aGlzKTtjb25zdCBzPTEvaSxsPTEvYSxjPTEvcjtyZXR1cm4gamF0LmVsZW1lbnRzWzBdKj1zLGphdC5lbGVtZW50c1sxXSo9cyxqYXQuZWxlbWVudHNbMl0qPXMsamF0LmVsZW1lbnRzWzRdKj1sLGphdC5lbGVtZW50c1s1XSo9bCxqYXQuZWxlbWVudHNbNl0qPWwsamF0LmVsZW1lbnRzWzhdKj1jLGphdC5lbGVtZW50c1s5XSo9YyxqYXQuZWxlbWVudHNbMTBdKj1jLGUuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGphdCksbi54PWksbi55PWEsbi56PXIsdGhpc31tYWtlUGVyc3BlY3RpdmUodCxlLG4sbyxpLGEpe3ZvaWQgMD09PWEmJmNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLiIpO2NvbnN0IHI9dGhpcy5lbGVtZW50cyxzPTIqaS8obi1vKSxsPShlK3QpLyhlLXQpLGM9KG4rbykvKG4tbyksZD0tKGEraSkvKGEtaSkscD0tMiphKmkvKGEtaSk7cmV0dXJuIHJbMF09MippLyhlLXQpLHJbNF09MCxyWzhdPWwsclsxMl09MCxyWzFdPTAscls1XT1zLHJbOV09YyxyWzEzXT0wLHJbMl09MCxyWzZdPTAsclsxMF09ZCxyWzE0XT1wLHJbM109MCxyWzddPTAsclsxMV09LTEsclsxNV09MCx0aGlzfW1ha2VPcnRob2dyYXBoaWModCxlLG4sbyxpLGEpe2NvbnN0IHI9dGhpcy5lbGVtZW50cyxzPTEvKGUtdCksbD0xLyhuLW8pLGM9MS8oYS1pKSxkPShlK3QpKnMscD0obitvKSpsLG09KGEraSkqYztyZXR1cm4gclswXT0yKnMscls0XT0wLHJbOF09MCxyWzEyXT0tZCxyWzFdPTAscls1XT0yKmwscls5XT0wLHJbMTNdPS1wLHJbMl09MCxyWzZdPTAsclsxMF09LTIqYyxyWzE0XT0tbSxyWzNdPTAscls3XT0wLHJbMTFdPTAsclsxNV09MSx0aGlzfWVxdWFscyh0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgdD0wO3Q8MTY7dCsrKWlmKGVbdF0hPT1uW3RdKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LGU9MCl7Zm9yKGxldCBuPTA7bjwxNjtuKyspdGhpcy5lbGVtZW50c1tuXT10W24rZV07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7Y29uc3Qgbj10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPW5bMF0sdFtlKzFdPW5bMV0sdFtlKzJdPW5bMl0sdFtlKzNdPW5bM10sdFtlKzRdPW5bNF0sdFtlKzVdPW5bNV0sdFtlKzZdPW5bNl0sdFtlKzddPW5bN10sdFtlKzhdPW5bOF0sdFtlKzldPW5bOV0sdFtlKzEwXT1uWzEwXSx0W2UrMTFdPW5bMTFdLHRbZSsxMl09blsxMl0sdFtlKzEzXT1uWzEzXSx0W2UrMTRdPW5bMTRdLHRbZSsxNV09blsxNV0sdH19QmF0LnByb3RvdHlwZS5pc01hdHJpeDQ9ITA7Y29uc3QgVmF0PW5ldyBjYXQsamF0PW5ldyBCYXQsVWF0PW5ldyBjYXQoMCwwLDApLEdhdD1uZXcgY2F0KDEsMSwxKSxXYXQ9bmV3IGNhdCxZYXQ9bmV3IGNhdCxxYXQ9bmV3IGNhdCxaYXQ9bmV3IEJhdCxYYXQ9bmV3IGxhdDtjbGFzcyBLYXR7Y29uc3RydWN0b3IodD0wLGU9MCxuPTAsbz1LYXQuRGVmYXVsdE9yZGVyKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9bix0aGlzLl9vcmRlcj1vfWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCBvcmRlcigpe3JldHVybiB0aGlzLl9vcmRlcn1zZXQgb3JkZXIodCl7dGhpcy5fb3JkZXI9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQsZSxuLG89dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9bix0aGlzLl9vcmRlcj1vLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96LHRoaXMuX29yZGVyKX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQuX3gsdGhpcy5feT10Ll95LHRoaXMuX3o9dC5feix0aGlzLl9vcmRlcj10Ll9vcmRlcix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCxlPXRoaXMuX29yZGVyLG49ITApe2NvbnN0IG89dC5lbGVtZW50cyxpPW9bMF0sYT1vWzRdLHI9b1s4XSxzPW9bMV0sbD1vWzVdLGM9b1s5XSxkPW9bMl0scD1vWzZdLG09b1sxMF07c3dpdGNoKGUpe2Nhc2UiWFlaIjp0aGlzLl95PU1hdGguYXNpbihaaXQociwtMSwxKSksTWF0aC5hYnMocik8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtYyxtKSx0aGlzLl96PU1hdGguYXRhbjIoLWEsaSkpOih0aGlzLl94PU1hdGguYXRhbjIocCxsKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PU1hdGguYXNpbigtWml0KGMsLTEsMSkpLE1hdGguYWJzKGMpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIocixtKSx0aGlzLl96PU1hdGguYXRhbjIocyxsKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtZCxpKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihaaXQocCwtMSwxKSksTWF0aC5hYnMocCk8Ljk5OTk5OTk/KHRoaXMuX3k9TWF0aC5hdGFuMigtZCxtKSx0aGlzLl96PU1hdGguYXRhbjIoLWEsbCkpOih0aGlzLl95PTAsdGhpcy5fej1NYXRoLmF0YW4yKHMsaSkpO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl95PU1hdGguYXNpbigtWml0KGQsLTEsMSkpLE1hdGguYWJzKGQpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIocCxtKSx0aGlzLl96PU1hdGguYXRhbjIocyxpKSk6KHRoaXMuX3g9MCx0aGlzLl96PU1hdGguYXRhbjIoLWEsbCkpO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl96PU1hdGguYXNpbihaaXQocywtMSwxKSksTWF0aC5hYnMocyk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtYyxsKSx0aGlzLl95PU1hdGguYXRhbjIoLWQsaSkpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKHIsbSkpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtWml0KGEsLTEsMSkpLE1hdGguYWJzKGEpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIocCxsKSx0aGlzLl95PU1hdGguYXRhbjIocixpKSk6KHRoaXMuX3g9TWF0aC5hdGFuMigtYyxtKSx0aGlzLl95PTApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5FdWxlcjogLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrZSl9cmV0dXJuIHRoaXMuX29yZGVyPWUsITA9PT1uJiZ0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUXVhdGVybmlvbih0LGUsbil7cmV0dXJuIFphdC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KSx0aGlzLnNldEZyb21Sb3RhdGlvbk1hdHJpeChaYXQsZSxuKX1zZXRGcm9tVmVjdG9yMyh0LGU9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLnNldCh0LngsdC55LHQueixlKX1yZW9yZGVyKHQpe3JldHVybiBYYXQuc2V0RnJvbUV1bGVyKHRoaXMpLHRoaXMuc2V0RnJvbVF1YXRlcm5pb24oWGF0LHQpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fb3JkZXI9PT10aGlzLl9vcmRlcn1mcm9tQXJyYXkodCl7cmV0dXJuIHRoaXMuX3g9dFswXSx0aGlzLl95PXRbMV0sdGhpcy5fej10WzJdLHZvaWQgMCE9PXRbM10mJih0aGlzLl9vcmRlcj10WzNdKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLl94LHRbZSsxXT10aGlzLl95LHRbZSsyXT10aGlzLl96LHRbZSszXT10aGlzLl9vcmRlcix0fXRvVmVjdG9yMyh0KXtyZXR1cm4gdD90LnNldCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feik6bmV3IGNhdCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feil9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319S2F0LnByb3RvdHlwZS5pc0V1bGVyPSEwLEthdC5EZWZhdWx0T3JkZXI9IlhZWiIsS2F0LlJvdGF0aW9uT3JkZXJzPVsiWFlaIiwiWVpYIiwiWlhZIiwiWFpZIiwiWVhaIiwiWllYIl07Y2xhc3MgSmF0e2NvbnN0cnVjdG9yKCl7dGhpcy5tYXNrPTF9c2V0KHQpe3RoaXMubWFzaz0xPDx0fDB9ZW5hYmxlKHQpe3RoaXMubWFza3w9MTw8dHwwfWVuYWJsZUFsbCgpe3RoaXMubWFzaz0tMX10b2dnbGUodCl7dGhpcy5tYXNrXj0xPDx0fDB9ZGlzYWJsZSh0KXt0aGlzLm1hc2smPX4oMTw8dHwwKX1kaXNhYmxlQWxsKCl7dGhpcy5tYXNrPTB9dGVzdCh0KXtyZXR1cm4gMCE9KHRoaXMubWFzayZ0Lm1hc2spfX1sZXQgUWF0PTA7Y29uc3QgJGF0PW5ldyBjYXQsdHJ0PW5ldyBsYXQsZXJ0PW5ldyBCYXQsbnJ0PW5ldyBjYXQsb3J0PW5ldyBjYXQsaXJ0PW5ldyBjYXQsYXJ0PW5ldyBsYXQscnJ0PW5ldyBjYXQoMSwwLDApLHNydD1uZXcgY2F0KDAsMSwwKSxscnQ9bmV3IGNhdCgwLDAsMSksY3J0PXt0eXBlOiJhZGRlZCJ9LGRydD17dHlwZToicmVtb3ZlZCJ9O2NsYXNzIHBydCBleHRlbmRzIFVpdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6UWF0Kyt9KSx0aGlzLnV1aWQ9cWl0KCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPXBydC5EZWZhdWx0VXAuY2xvbmUoKTtjb25zdCB0PW5ldyBjYXQsZT1uZXcgS2F0LG49bmV3IGxhdCxvPW5ldyBjYXQoMSwxLDEpO2UuX29uQ2hhbmdlKChmdW5jdGlvbiBpKCl7bi5zZXRGcm9tRXVsZXIoZSwhMSl9KSksbi5fb25DaGFuZ2UoKGZ1bmN0aW9uIGEoKXtlLnNldEZyb21RdWF0ZXJuaW9uKG4sdm9pZCAwLCExKX0pKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtwb3NpdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6dH0scm90YXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmV9LHF1YXRlcm5pb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOm59LHNjYWxlOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpvfSxtb2RlbFZpZXdNYXRyaXg6e3ZhbHVlOm5ldyBCYXR9LG5vcm1hbE1hdHJpeDp7dmFsdWU6bmV3ICRpdH19KSx0aGlzLm1hdHJpeD1uZXcgQmF0LHRoaXMubWF0cml4V29ybGQ9bmV3IEJhdCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9cHJ0LkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0aGlzLmxheWVycz1uZXcgSmF0LHRoaXMudmlzaWJsZT0hMCx0aGlzLmNhc3RTaGFkb3c9ITEsdGhpcy5yZWNlaXZlU2hhZG93PSExLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMCx0aGlzLnJlbmRlck9yZGVyPTAsdGhpcy5hbmltYXRpb25zPVtdLHRoaXMudXNlckRhdGE9e319b25CZWZvcmVSZW5kZXIoKXt9b25BZnRlclJlbmRlcigpe31hcHBseU1hdHJpeDQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMubWF0cml4LnByZW11bHRpcGx5KHQpLHRoaXMubWF0cml4LmRlY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKX1hcHBseVF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh0KSx0aGlzfXNldFJvdGF0aW9uRnJvbUF4aXNBbmdsZSh0LGUpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKHQsZSl9c2V0Um90YXRpb25Gcm9tRXVsZXIodCl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlcih0LCEwKX1zZXRSb3RhdGlvbkZyb21NYXRyaXgodCl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KX1zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3RoaXMucXVhdGVybmlvbi5jb3B5KHQpfXJvdGF0ZU9uQXhpcyh0LGUpe3JldHVybiB0cnQuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5tdWx0aXBseSh0cnQpLHRoaXN9cm90YXRlT25Xb3JsZEF4aXModCxlKXtyZXR1cm4gdHJ0LnNldEZyb21BeGlzQW5nbGUodCxlKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodHJ0KSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKHJydCx0KX1yb3RhdGVZKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhzcnQsdCl9cm90YXRlWih0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMobHJ0LHQpfXRyYW5zbGF0ZU9uQXhpcyh0LGUpe3JldHVybiAkYXQuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZCgkYXQubXVsdGlwbHlTY2FsYXIoZSkpLHRoaXN9dHJhbnNsYXRlWCh0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMocnJ0LHQpfXRyYW5zbGF0ZVkodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKHNydCx0KX10cmFuc2xhdGVaKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhscnQsdCl9bG9jYWxUb1dvcmxkKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKX13b3JsZFRvTG9jYWwodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KGVydC5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpKX1sb29rQXQodCxlLG4pe3QuaXNWZWN0b3IzP25ydC5jb3B5KHQpOm5ydC5zZXQodCxlLG4pO2NvbnN0IG89dGhpcy5wYXJlbnQ7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksb3J0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmlzQ2FtZXJhfHx0aGlzLmlzTGlnaHQ/ZXJ0Lmxvb2tBdChvcnQsbnJ0LHRoaXMudXApOmVydC5sb29rQXQobnJ0LG9ydCx0aGlzLnVwKSx0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KGVydCksbyYmKGVydC5leHRyYWN0Um90YXRpb24oby5tYXRyaXhXb3JsZCksdHJ0LnNldEZyb21Sb3RhdGlvbk1hdHJpeChlcnQpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh0cnQuaW52ZXJ0KCkpKX1hZGQodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXRoaXMuYWRkKGFyZ3VtZW50c1t0XSk7cmV0dXJuIHRoaXN9cmV0dXJuIHQ9PT10aGlzPyhjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLHQpLHRoaXMpOih0JiZ0LmlzT2JqZWN0M0Q/KG51bGwhPT10LnBhcmVudCYmdC5wYXJlbnQucmVtb3ZlKHQpLHQucGFyZW50PXRoaXMsdGhpcy5jaGlsZHJlbi5wdXNoKHQpLHQuZGlzcGF0Y2hFdmVudChjcnQpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuT2JqZWN0M0QuIix0KSx0aGlzKX1yZW1vdmUodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXRoaXMucmVtb3ZlKGFyZ3VtZW50c1t0XSk7cmV0dXJuIHRoaXN9Y29uc3QgZT10aGlzLmNoaWxkcmVuLmluZGV4T2YodCk7cmV0dXJuLTEhPT1lJiYodC5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuLnNwbGljZShlLDEpLHQuZGlzcGF0Y2hFdmVudChkcnQpKSx0aGlzfXJlbW92ZUZyb21QYXJlbnQoKXtjb25zdCB0PXRoaXMucGFyZW50O3JldHVybiBudWxsIT09dCYmdC5yZW1vdmUodGhpcyksdGhpc31jbGVhcigpe2ZvcihsZXQgdD0wO3Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7dCsrKXtjb25zdCBlPXRoaXMuY2hpbGRyZW5bdF07ZS5wYXJlbnQ9bnVsbCxlLmRpc3BhdGNoRXZlbnQoZHJ0KX1yZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzfWF0dGFjaCh0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksZXJ0LmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksbnVsbCE9PXQucGFyZW50JiYodC5wYXJlbnQudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLGVydC5tdWx0aXBseSh0LnBhcmVudC5tYXRyaXhXb3JsZCkpLHQuYXBwbHlNYXRyaXg0KGVydCksdGhpcy5hZGQodCksdC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCksdGhpc31nZXRPYmplY3RCeUlkKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoImlkIix0KX1nZXRPYmplY3RCeU5hbWUodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgibmFtZSIsdCl9Z2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpe2lmKHRoaXNbdF09PT1lKXJldHVybiB0aGlzO2ZvcihsZXQgbj0wLG89dGhpcy5jaGlsZHJlbi5sZW5ndGg7bjxvO24rKyl7Y29uc3Qgbz10aGlzLmNoaWxkcmVuW25dLmdldE9iamVjdEJ5UHJvcGVydHkodCxlKTtpZih2b2lkIDAhPT1vKXJldHVybiBvfX1nZXRXb3JsZFBvc2l0aW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKX1nZXRXb3JsZFF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKG9ydCx0LGlydCksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShvcnQsYXJ0LHQpLHR9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7Y29uc3QgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldChlWzhdLGVbOV0sZVsxMF0pLm5vcm1hbGl6ZSgpfXJheWNhc3QoKXt9dHJhdmVyc2UodCl7dCh0aGlzKTtjb25zdCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsbz1lLmxlbmd0aDtuPG87bisrKWVbbl0udHJhdmVyc2UodCl9dHJhdmVyc2VWaXNpYmxlKHQpe2lmKCExPT09dGhpcy52aXNpYmxlKXJldHVybjt0KHRoaXMpO2NvbnN0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG49MCxvPWUubGVuZ3RoO248bztuKyspZVtuXS50cmF2ZXJzZVZpc2libGUodCl9dHJhdmVyc2VBbmNlc3RvcnModCl7Y29uc3QgZT10aGlzLnBhcmVudDtudWxsIT09ZSYmKHQoZSksZS50cmF2ZXJzZUFuY2VzdG9ycyh0KSl9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9dXBkYXRlTWF0cml4V29ybGQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLCh0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fHQpJiYobnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdD0hMCk7Y29uc3QgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLG89ZS5sZW5ndGg7bjxvO24rKyllW25dLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7Y29uc3Qgbj10aGlzLnBhcmVudDtpZighMD09PXQmJm51bGwhPT1uJiZuLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksbnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSwhMD09PWUpe2NvbnN0IHQ9dGhpcy5jaGlsZHJlbjtmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspdFtlXS51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCl9fXRvSlNPTih0KXtjb25zdCBlPXZvaWQgMD09PXR8fCJzdHJpbmciPT10eXBlb2YgdCxuPXt9O2UmJih0PXtnZW9tZXRyaWVzOnt9LG1hdGVyaWFsczp7fSx0ZXh0dXJlczp7fSxpbWFnZXM6e30sc2hhcGVzOnt9LHNrZWxldG9uczp7fSxhbmltYXRpb25zOnt9fSxuLm1ldGFkYXRhPXt2ZXJzaW9uOjQuNSx0eXBlOiJPYmplY3QiLGdlbmVyYXRvcjoiT2JqZWN0M0QudG9KU09OIn0pO2NvbnN0IG89e307ZnVuY3Rpb24gaShlLG4pe3JldHVybiB2b2lkIDA9PT1lW24udXVpZF0mJihlW24udXVpZF09bi50b0pTT04odCkpLG4udXVpZH1pZihvLnV1aWQ9dGhpcy51dWlkLG8udHlwZT10aGlzLnR5cGUsIiIhPT10aGlzLm5hbWUmJihvLm5hbWU9dGhpcy5uYW1lKSwhMD09PXRoaXMuY2FzdFNoYWRvdyYmKG8uY2FzdFNoYWRvdz0hMCksITA9PT10aGlzLnJlY2VpdmVTaGFkb3cmJihvLnJlY2VpdmVTaGFkb3c9ITApLCExPT09dGhpcy52aXNpYmxlJiYoby52aXNpYmxlPSExKSwhMT09PXRoaXMuZnJ1c3R1bUN1bGxlZCYmKG8uZnJ1c3R1bUN1bGxlZD0hMSksMCE9PXRoaXMucmVuZGVyT3JkZXImJihvLnJlbmRlck9yZGVyPXRoaXMucmVuZGVyT3JkZXIpLCJ7fSIhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSYmKG8udXNlckRhdGE9dGhpcy51c2VyRGF0YSksby5sYXllcnM9dGhpcy5sYXllcnMubWFzayxvLm1hdHJpeD10aGlzLm1hdHJpeC50b0FycmF5KCksITE9PT10aGlzLm1hdHJpeEF1dG9VcGRhdGUmJihvLm1hdHJpeEF1dG9VcGRhdGU9ITEpLHRoaXMuaXNJbnN0YW5jZWRNZXNoJiYoby50eXBlPSJJbnN0YW5jZWRNZXNoIixvLmNvdW50PXRoaXMuY291bnQsby5pbnN0YW5jZU1hdHJpeD10aGlzLmluc3RhbmNlTWF0cml4LnRvSlNPTigpLG51bGwhPT10aGlzLmluc3RhbmNlQ29sb3ImJihvLmluc3RhbmNlQ29sb3I9dGhpcy5pbnN0YW5jZUNvbG9yLnRvSlNPTigpKSksdGhpcy5pc1NjZW5lKXRoaXMuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZC5pc0NvbG9yP28uYmFja2dyb3VuZD10aGlzLmJhY2tncm91bmQudG9KU09OKCk6dGhpcy5iYWNrZ3JvdW5kLmlzVGV4dHVyZSYmKG8uYmFja2dyb3VuZD10aGlzLmJhY2tncm91bmQudG9KU09OKHQpLnV1aWQpKSx0aGlzLmVudmlyb25tZW50JiZ0aGlzLmVudmlyb25tZW50LmlzVGV4dHVyZSYmKG8uZW52aXJvbm1lbnQ9dGhpcy5lbnZpcm9ubWVudC50b0pTT04odCkudXVpZCk7ZWxzZSBpZih0aGlzLmlzTWVzaHx8dGhpcy5pc0xpbmV8fHRoaXMuaXNQb2ludHMpe28uZ2VvbWV0cnk9aSh0Lmdlb21ldHJpZXMsdGhpcy5nZW9tZXRyeSk7Y29uc3QgZT10aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7aWYodm9pZCAwIT09ZSYmdm9pZCAwIT09ZS5zaGFwZXMpe2NvbnN0IG49ZS5zaGFwZXM7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGU9MCxvPW4ubGVuZ3RoO2U8bztlKyspaSh0LnNoYXBlcyxuW2VdKTtlbHNlIGkodC5zaGFwZXMsbil9fWlmKHRoaXMuaXNTa2lubmVkTWVzaCYmKG8uYmluZE1vZGU9dGhpcy5iaW5kTW9kZSxvLmJpbmRNYXRyaXg9dGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKSx2b2lkIDAhPT10aGlzLnNrZWxldG9uJiYoaSh0LnNrZWxldG9ucyx0aGlzLnNrZWxldG9uKSxvLnNrZWxldG9uPXRoaXMuc2tlbGV0b24udXVpZCkpLHZvaWQgMCE9PXRoaXMubWF0ZXJpYWwpaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7Y29uc3QgZT1bXTtmb3IobGV0IG49MCxvPXRoaXMubWF0ZXJpYWwubGVuZ3RoO248bztuKyspZS5wdXNoKGkodC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbFtuXSkpO28ubWF0ZXJpYWw9ZX1lbHNlIG8ubWF0ZXJpYWw9aSh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsKTtpZih0aGlzLmNoaWxkcmVuLmxlbmd0aD4wKXtvLmNoaWxkcmVuPVtdO2ZvcihsZXQgZT0wO2U8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZSsrKW8uY2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2VdLnRvSlNPTih0KS5vYmplY3QpfWlmKHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg+MCl7by5hbmltYXRpb25zPVtdO2ZvcihsZXQgZT0wO2U8dGhpcy5hbmltYXRpb25zLmxlbmd0aDtlKyspby5hbmltYXRpb25zLnB1c2goaSh0LmFuaW1hdGlvbnMsdGhpcy5hbmltYXRpb25zW2VdKSl9aWYoZSl7Y29uc3QgZT1hKHQuZ2VvbWV0cmllcyksbz1hKHQubWF0ZXJpYWxzKSxpPWEodC50ZXh0dXJlcykscj1hKHQuaW1hZ2VzKSxzPWEodC5zaGFwZXMpLGw9YSh0LnNrZWxldG9ucyksYz1hKHQuYW5pbWF0aW9ucyk7ZS5sZW5ndGg+MCYmKG4uZ2VvbWV0cmllcz1lKSxvLmxlbmd0aD4wJiYobi5tYXRlcmlhbHM9byksaS5sZW5ndGg+MCYmKG4udGV4dHVyZXM9aSksci5sZW5ndGg+MCYmKG4uaW1hZ2VzPXIpLHMubGVuZ3RoPjAmJihuLnNoYXBlcz1zKSxsLmxlbmd0aD4wJiYobi5za2VsZXRvbnM9bCksYy5sZW5ndGg+MCYmKG4uYW5pbWF0aW9ucz1jKX1yZXR1cm4gbi5vYmplY3Q9byxuO2Z1bmN0aW9uIGEodCl7Y29uc3QgZT1bXTtmb3IoY29uc3QgbiBpbiB0KXtjb25zdCBvPXRbbl07ZGVsZXRlIG8ubWV0YWRhdGEsZS5wdXNoKG8pfXJldHVybiBlfX1jbG9uZSh0KXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyx0KX1jb3B5KHQsZT0hMCl7aWYodGhpcy5uYW1lPXQubmFtZSx0aGlzLnVwLmNvcHkodC51cCksdGhpcy5wb3NpdGlvbi5jb3B5KHQucG9zaXRpb24pLHRoaXMucm90YXRpb24ub3JkZXI9dC5yb3RhdGlvbi5vcmRlcix0aGlzLnF1YXRlcm5pb24uY29weSh0LnF1YXRlcm5pb24pLHRoaXMuc2NhbGUuY29weSh0LnNjYWxlKSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCksdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9dC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlLHRoaXMubGF5ZXJzLm1hc2s9dC5sYXllcnMubWFzayx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMuY2FzdFNoYWRvdz10LmNhc3RTaGFkb3csdGhpcy5yZWNlaXZlU2hhZG93PXQucmVjZWl2ZVNoYWRvdyx0aGlzLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkLHRoaXMucmVuZGVyT3JkZXI9dC5yZW5kZXJPcmRlcix0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLCEwPT09ZSlmb3IobGV0IGU9MDtlPHQuY2hpbGRyZW4ubGVuZ3RoO2UrKyl0aGlzLmFkZCh0LmNoaWxkcmVuW2VdLmNsb25lKCkpO3JldHVybiB0aGlzfX1wcnQuRGVmYXVsdFVwPW5ldyBjYXQoMCwxLDApLHBydC5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZT0hMCxwcnQucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7Y29uc3QgbXJ0PW5ldyBjYXQsdXJ0PW5ldyBjYXQsZnJ0PW5ldyBjYXQsZ3J0PW5ldyBjYXQsaHJ0PW5ldyBjYXQsYnJ0PW5ldyBjYXQseXJ0PW5ldyBjYXQsX3J0PW5ldyBjYXQsQ3J0PW5ldyBjYXQsTXJ0PW5ldyBjYXQ7Y2xhc3MgdnJ0e2NvbnN0cnVjdG9yKHQ9bmV3IGNhdCxlPW5ldyBjYXQsbj1uZXcgY2F0KXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1zdGF0aWMgZ2V0Tm9ybWFsKHQsZSxuLG8pe28uc3ViVmVjdG9ycyhuLGUpLG1ydC5zdWJWZWN0b3JzKHQsZSksby5jcm9zcyhtcnQpO2NvbnN0IGk9by5sZW5ndGhTcSgpO3JldHVybiBpPjA/by5tdWx0aXBseVNjYWxhcigxL01hdGguc3FydChpKSk6by5zZXQoMCwwLDApfXN0YXRpYyBnZXRCYXJ5Y29vcmQodCxlLG4sbyxpKXttcnQuc3ViVmVjdG9ycyhvLGUpLHVydC5zdWJWZWN0b3JzKG4sZSksZnJ0LnN1YlZlY3RvcnModCxlKTtjb25zdCBhPW1ydC5kb3QobXJ0KSxyPW1ydC5kb3QodXJ0KSxzPW1ydC5kb3QoZnJ0KSxsPXVydC5kb3QodXJ0KSxjPXVydC5kb3QoZnJ0KSxkPWEqbC1yKnI7aWYoMD09PWQpcmV0dXJuIGkuc2V0KC0yLC0xLC0xKTtjb25zdCBwPTEvZCxtPShsKnMtcipjKSpwLHU9KGEqYy1yKnMpKnA7cmV0dXJuIGkuc2V0KDEtbS11LHUsbSl9c3RhdGljIGNvbnRhaW5zUG9pbnQodCxlLG4sbyl7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQsZSxuLG8sZ3J0KSxncnQueD49MCYmZ3J0Lnk+PTAmJmdydC54K2dydC55PD0xfXN0YXRpYyBnZXRVVih0LGUsbixvLGksYSxyLHMpe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LGUsbixvLGdydCkscy5zZXQoMCwwKSxzLmFkZFNjYWxlZFZlY3RvcihpLGdydC54KSxzLmFkZFNjYWxlZFZlY3RvcihhLGdydC55KSxzLmFkZFNjYWxlZFZlY3RvcihyLGdydC56KSxzfXN0YXRpYyBpc0Zyb250RmFjaW5nKHQsZSxuLG8pe3JldHVybiBtcnQuc3ViVmVjdG9ycyhuLGUpLHVydC5zdWJWZWN0b3JzKHQsZSksbXJ0LmNyb3NzKHVydCkuZG90KG8pPDB9c2V0KHQsZSxuKXtyZXR1cm4gdGhpcy5hLmNvcHkodCksdGhpcy5iLmNvcHkoZSksdGhpcy5jLmNvcHkobiksdGhpc31zZXRGcm9tUG9pbnRzQW5kSW5kaWNlcyh0LGUsbixvKXtyZXR1cm4gdGhpcy5hLmNvcHkodFtlXSksdGhpcy5iLmNvcHkodFtuXSksdGhpcy5jLmNvcHkodFtvXSksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmEuY29weSh0LmEpLHRoaXMuYi5jb3B5KHQuYiksdGhpcy5jLmNvcHkodC5jKSx0aGlzfWdldEFyZWEoKXtyZXR1cm4gbXJ0LnN1YlZlY3RvcnModGhpcy5jLHRoaXMuYiksdXJ0LnN1YlZlY3RvcnModGhpcy5hLHRoaXMuYiksLjUqbXJ0LmNyb3NzKHVydCkubGVuZ3RoKCl9Z2V0TWlkcG9pbnQodCl7cmV0dXJuIHQuYWRkVmVjdG9ycyh0aGlzLmEsdGhpcy5iKS5hZGQodGhpcy5jKS5tdWx0aXBseVNjYWxhcigxLzMpfWdldE5vcm1hbCh0KXtyZXR1cm4gdnJ0LmdldE5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1nZXRQbGFuZSh0KXtyZXR1cm4gdC5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfWdldEJhcnljb29yZCh0LGUpe3JldHVybiB2cnQuZ2V0QmFyeWNvb3JkKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSl9Z2V0VVYodCxlLG4sbyxpKXtyZXR1cm4gdnJ0LmdldFVWKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSxuLG8saSl9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4gdnJ0LmNvbnRhaW5zUG9pbnQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyl9aXNGcm9udEZhY2luZyh0KXtyZXR1cm4gdnJ0LmlzRnJvbnRGYWNpbmcodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzVHJpYW5nbGUodGhpcyl9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUpe2NvbnN0IG49dGhpcy5hLG89dGhpcy5iLGk9dGhpcy5jO2xldCBhLHI7aHJ0LnN1YlZlY3RvcnMobyxuKSxicnQuc3ViVmVjdG9ycyhpLG4pLF9ydC5zdWJWZWN0b3JzKHQsbik7Y29uc3Qgcz1ocnQuZG90KF9ydCksbD1icnQuZG90KF9ydCk7aWYoczw9MCYmbDw9MClyZXR1cm4gZS5jb3B5KG4pO0NydC5zdWJWZWN0b3JzKHQsbyk7Y29uc3QgYz1ocnQuZG90KENydCksZD1icnQuZG90KENydCk7aWYoYz49MCYmZDw9YylyZXR1cm4gZS5jb3B5KG8pO2NvbnN0IHA9cypkLWMqbDtpZihwPD0wJiZzPj0wJiZjPD0wKXJldHVybiBhPXMvKHMtYyksZS5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihocnQsYSk7TXJ0LnN1YlZlY3RvcnModCxpKTtjb25zdCBtPWhydC5kb3QoTXJ0KSx1PWJydC5kb3QoTXJ0KTtpZih1Pj0wJiZtPD11KXJldHVybiBlLmNvcHkoaSk7Y29uc3QgZj1tKmwtcyp1O2lmKGY8PTAmJmw+PTAmJnU8PTApcmV0dXJuIHI9bC8obC11KSxlLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKGJydCxyKTtjb25zdCBnPWMqdS1tKmQ7aWYoZzw9MCYmZC1jPj0wJiZtLXU+PTApcmV0dXJuIHlydC5zdWJWZWN0b3JzKGksbykscj0oZC1jKS8oZC1jKyhtLXUpKSxlLmNvcHkobykuYWRkU2NhbGVkVmVjdG9yKHlydCxyKTtjb25zdCBoPTEvKGcrZitwKTtyZXR1cm4gYT1mKmgscj1wKmgsZS5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihocnQsYSkuYWRkU2NhbGVkVmVjdG9yKGJydCxyKX1lcXVhbHModCl7cmV0dXJuIHQuYS5lcXVhbHModGhpcy5hKSYmdC5iLmVxdWFscyh0aGlzLmIpJiZ0LmMuZXF1YWxzKHRoaXMuYyl9fWxldCB4cnQ9MDtjbGFzcyBPcnQgZXh0ZW5kcyBVaXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOnhydCsrfSksdGhpcy51dWlkPXFpdCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPTEsdGhpcy5zaWRlPTAsdGhpcy52ZXJ0ZXhDb2xvcnM9ITEsdGhpcy5vcGFjaXR5PTEsdGhpcy50cmFuc3BhcmVudD0hMSx0aGlzLmJsZW5kU3JjPTIwNCx0aGlzLmJsZW5kRHN0PTIwNSx0aGlzLmJsZW5kRXF1YXRpb249Y2l0LHRoaXMuYmxlbmRTcmNBbHBoYT1udWxsLHRoaXMuYmxlbmREc3RBbHBoYT1udWxsLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPW51bGwsdGhpcy5kZXB0aEZ1bmM9Myx0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPTUxOSx0aGlzLnN0ZW5jaWxSZWY9MCx0aGlzLnN0ZW5jaWxGdW5jTWFzaz0yNTUsdGhpcy5zdGVuY2lsRmFpbD1MaXQsdGhpcy5zdGVuY2lsWkZhaWw9TGl0LHRoaXMuc3RlbmNpbFpQYXNzPUxpdCx0aGlzLnN0ZW5jaWxXcml0ZT0hMSx0aGlzLmNsaXBwaW5nUGxhbmVzPW51bGwsdGhpcy5jbGlwSW50ZXJzZWN0aW9uPSExLHRoaXMuY2xpcFNoYWRvd3M9ITEsdGhpcy5zaGFkb3dTaWRlPW51bGwsdGhpcy5jb2xvcldyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRlc3Q9MCx0aGlzLmFscGhhVG9Db3ZlcmFnZT0hMSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT0hMSx0aGlzLnZpc2libGU9ITAsdGhpcy50b25lTWFwcGVkPSEwLHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTB9b25CdWlsZCgpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHZvaWQgMCE9PXQpZm9yKGNvbnN0IGUgaW4gdCl7Y29uc3Qgbj10W2VdO2lmKHZvaWQgMD09PW4pe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6ICciK2UrIicgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4iKTtjb250aW51ZX1pZigic2hhZGluZyI9PT1lKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPTE9PT1uO2NvbnRpbnVlfWNvbnN0IG89dGhpc1tlXTt2b2lkIDAhPT1vP28mJm8uaXNDb2xvcj9vLnNldChuKTpvJiZvLmlzVmVjdG9yMyYmbiYmbi5pc1ZlY3RvcjM/by5jb3B5KG4pOnRoaXNbZV09bjpjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6ICciK2UrIicgaXMgbm90IGEgcHJvcGVydHkgb2YgdGhpcyBtYXRlcmlhbC4iKX19dG9KU09OKHQpe2NvbnN0IGU9dm9pZCAwPT09dHx8InN0cmluZyI9PXR5cGVvZiB0O2UmJih0PXt0ZXh0dXJlczp7fSxpbWFnZXM6e319KTtjb25zdCBuPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiTWF0ZXJpYWwiLGdlbmVyYXRvcjoiTWF0ZXJpYWwudG9KU09OIn19O2Z1bmN0aW9uIG8odCl7Y29uc3QgZT1bXTtmb3IoY29uc3QgbiBpbiB0KXtjb25zdCBvPXRbbl07ZGVsZXRlIG8ubWV0YWRhdGEsZS5wdXNoKG8pfXJldHVybiBlfWlmKG4udXVpZD10aGlzLnV1aWQsbi50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKG4ubmFtZT10aGlzLm5hbWUpLHRoaXMuY29sb3ImJnRoaXMuY29sb3IuaXNDb2xvciYmKG4uY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5yb3VnaG5lc3MmJihuLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyksdm9pZCAwIT09dGhpcy5tZXRhbG5lc3MmJihuLm1ldGFsbmVzcz10aGlzLm1ldGFsbmVzcyksdGhpcy5zaGVlbiYmdGhpcy5zaGVlbi5pc0NvbG9yJiYobi5zaGVlbj10aGlzLnNoZWVuLmdldEhleCgpKSx0aGlzLmVtaXNzaXZlJiZ0aGlzLmVtaXNzaXZlLmlzQ29sb3ImJihuLmVtaXNzaXZlPXRoaXMuZW1pc3NpdmUuZ2V0SGV4KCkpLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJjEhPT10aGlzLmVtaXNzaXZlSW50ZW5zaXR5JiYobi5lbWlzc2l2ZUludGVuc2l0eT10aGlzLmVtaXNzaXZlSW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyJiZ0aGlzLnNwZWN1bGFyLmlzQ29sb3ImJihuLnNwZWN1bGFyPXRoaXMuc3BlY3VsYXIuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc3BlY3VsYXJJbnRlbnNpdHkmJihuLnNwZWN1bGFySW50ZW5zaXR5PXRoaXMuc3BlY3VsYXJJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXJUaW50JiZ0aGlzLnNwZWN1bGFyVGludC5pc0NvbG9yJiYobi5zcGVjdWxhclRpbnQ9dGhpcy5zcGVjdWxhclRpbnQuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2hpbmluZXNzJiYobi5zaGluaW5lc3M9dGhpcy5zaGluaW5lc3MpLHZvaWQgMCE9PXRoaXMuY2xlYXJjb2F0JiYobi5jbGVhcmNvYXQ9dGhpcy5jbGVhcmNvYXQpLHZvaWQgMCE9PXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzJiYobi5jbGVhcmNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MpLHRoaXMuY2xlYXJjb2F0TWFwJiZ0aGlzLmNsZWFyY29hdE1hcC5pc1RleHR1cmUmJihuLmNsZWFyY29hdE1hcD10aGlzLmNsZWFyY29hdE1hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJnRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKG4uY2xlYXJjb2F0Um91Z2huZXNzTWFwPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCYmdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAuaXNUZXh0dXJlJiYobi5jbGVhcmNvYXROb3JtYWxNYXA9dGhpcy5jbGVhcmNvYXROb3JtYWxNYXAudG9KU09OKHQpLnV1aWQsbi5jbGVhcmNvYXROb3JtYWxTY2FsZT10aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5tYXAmJnRoaXMubWFwLmlzVGV4dHVyZSYmKG4ubWFwPXRoaXMubWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1hdGNhcCYmdGhpcy5tYXRjYXAuaXNUZXh0dXJlJiYobi5tYXRjYXA9dGhpcy5tYXRjYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYWxwaGFNYXAmJnRoaXMuYWxwaGFNYXAuaXNUZXh0dXJlJiYobi5hbHBoYU1hcD10aGlzLmFscGhhTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmxpZ2h0TWFwJiZ0aGlzLmxpZ2h0TWFwLmlzVGV4dHVyZSYmKG4ubGlnaHRNYXA9dGhpcy5saWdodE1hcC50b0pTT04odCkudXVpZCxuLmxpZ2h0TWFwSW50ZW5zaXR5PXRoaXMubGlnaHRNYXBJbnRlbnNpdHkpLHRoaXMuYW9NYXAmJnRoaXMuYW9NYXAuaXNUZXh0dXJlJiYobi5hb01hcD10aGlzLmFvTWFwLnRvSlNPTih0KS51dWlkLG4uYW9NYXBJbnRlbnNpdHk9dGhpcy5hb01hcEludGVuc2l0eSksdGhpcy5idW1wTWFwJiZ0aGlzLmJ1bXBNYXAuaXNUZXh0dXJlJiYobi5idW1wTWFwPXRoaXMuYnVtcE1hcC50b0pTT04odCkudXVpZCxuLmJ1bXBTY2FsZT10aGlzLmJ1bXBTY2FsZSksdGhpcy5ub3JtYWxNYXAmJnRoaXMubm9ybWFsTWFwLmlzVGV4dHVyZSYmKG4ubm9ybWFsTWFwPXRoaXMubm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLG4ubm9ybWFsTWFwVHlwZT10aGlzLm5vcm1hbE1hcFR5cGUsbi5ub3JtYWxTY2FsZT10aGlzLm5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5kaXNwbGFjZW1lbnRNYXAmJnRoaXMuZGlzcGxhY2VtZW50TWFwLmlzVGV4dHVyZSYmKG4uZGlzcGxhY2VtZW50TWFwPXRoaXMuZGlzcGxhY2VtZW50TWFwLnRvSlNPTih0KS51dWlkLG4uZGlzcGxhY2VtZW50U2NhbGU9dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSxuLmRpc3BsYWNlbWVudEJpYXM9dGhpcy5kaXNwbGFjZW1lbnRCaWFzKSx0aGlzLnJvdWdobmVzc01hcCYmdGhpcy5yb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYobi5yb3VnaG5lc3NNYXA9dGhpcy5yb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWV0YWxuZXNzTWFwJiZ0aGlzLm1ldGFsbmVzc01hcC5pc1RleHR1cmUmJihuLm1ldGFsbmVzc01hcD10aGlzLm1ldGFsbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5lbWlzc2l2ZU1hcCYmdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1cmUmJihuLmVtaXNzaXZlTWFwPXRoaXMuZW1pc3NpdmVNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJNYXAmJnRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhck1hcD10aGlzLnNwZWN1bGFyTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZ0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLmlzVGV4dHVyZSYmKG4uc3BlY3VsYXJJbnRlbnNpdHlNYXA9dGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhclRpbnRNYXAmJnRoaXMuc3BlY3VsYXJUaW50TWFwLmlzVGV4dHVyZSYmKG4uc3BlY3VsYXJUaW50TWFwPXRoaXMuc3BlY3VsYXJUaW50TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVudk1hcCYmdGhpcy5lbnZNYXAuaXNUZXh0dXJlJiYobi5lbnZNYXA9dGhpcy5lbnZNYXAudG9KU09OKHQpLnV1aWQsdm9pZCAwIT09dGhpcy5jb21iaW5lJiYobi5jb21iaW5lPXRoaXMuY29tYmluZSkpLHZvaWQgMCE9PXRoaXMuZW52TWFwSW50ZW5zaXR5JiYobi5lbnZNYXBJbnRlbnNpdHk9dGhpcy5lbnZNYXBJbnRlbnNpdHkpLHZvaWQgMCE9PXRoaXMucmVmbGVjdGl2aXR5JiYobi5yZWZsZWN0aXZpdHk9dGhpcy5yZWZsZWN0aXZpdHkpLHZvaWQgMCE9PXRoaXMucmVmcmFjdGlvblJhdGlvJiYobi5yZWZyYWN0aW9uUmF0aW89dGhpcy5yZWZyYWN0aW9uUmF0aW8pLHRoaXMuZ3JhZGllbnRNYXAmJnRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlJiYobi5ncmFkaWVudE1hcD10aGlzLmdyYWRpZW50TWFwLnRvSlNPTih0KS51dWlkKSx2b2lkIDAhPT10aGlzLnRyYW5zbWlzc2lvbiYmKG4udHJhbnNtaXNzaW9uPXRoaXMudHJhbnNtaXNzaW9uKSx0aGlzLnRyYW5zbWlzc2lvbk1hcCYmdGhpcy50cmFuc21pc3Npb25NYXAuaXNUZXh0dXJlJiYobi50cmFuc21pc3Npb25NYXA9dGhpcy50cmFuc21pc3Npb25NYXAudG9KU09OKHQpLnV1aWQpLHZvaWQgMCE9PXRoaXMudGhpY2tuZXNzJiYobi50aGlja25lc3M9dGhpcy50aGlja25lc3MpLHRoaXMudGhpY2tuZXNzTWFwJiZ0aGlzLnRoaWNrbmVzc01hcC5pc1RleHR1cmUmJihuLnRoaWNrbmVzc01hcD10aGlzLnRoaWNrbmVzc01hcC50b0pTT04odCkudXVpZCksdm9pZCAwIT09dGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlJiYobi5hdHRlbnVhdGlvbkRpc3RhbmNlPXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSksdm9pZCAwIT09dGhpcy5hdHRlbnVhdGlvblRpbnQmJihuLmF0dGVudWF0aW9uVGludD10aGlzLmF0dGVudWF0aW9uVGludC5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zaXplJiYobi5zaXplPXRoaXMuc2l6ZSksbnVsbCE9PXRoaXMuc2hhZG93U2lkZSYmKG4uc2hhZG93U2lkZT10aGlzLnNoYWRvd1NpZGUpLHZvaWQgMCE9PXRoaXMuc2l6ZUF0dGVudWF0aW9uJiYobi5zaXplQXR0ZW51YXRpb249dGhpcy5zaXplQXR0ZW51YXRpb24pLDEhPT10aGlzLmJsZW5kaW5nJiYobi5ibGVuZGluZz10aGlzLmJsZW5kaW5nKSwwIT09dGhpcy5zaWRlJiYobi5zaWRlPXRoaXMuc2lkZSksdGhpcy52ZXJ0ZXhDb2xvcnMmJihuLnZlcnRleENvbG9ycz0hMCksdGhpcy5vcGFjaXR5PDEmJihuLm9wYWNpdHk9dGhpcy5vcGFjaXR5KSwhMD09PXRoaXMudHJhbnNwYXJlbnQmJihuLnRyYW5zcGFyZW50PXRoaXMudHJhbnNwYXJlbnQpLG4uZGVwdGhGdW5jPXRoaXMuZGVwdGhGdW5jLG4uZGVwdGhUZXN0PXRoaXMuZGVwdGhUZXN0LG4uZGVwdGhXcml0ZT10aGlzLmRlcHRoV3JpdGUsbi5jb2xvcldyaXRlPXRoaXMuY29sb3JXcml0ZSxuLnN0ZW5jaWxXcml0ZT10aGlzLnN0ZW5jaWxXcml0ZSxuLnN0ZW5jaWxXcml0ZU1hc2s9dGhpcy5zdGVuY2lsV3JpdGVNYXNrLG4uc3RlbmNpbEZ1bmM9dGhpcy5zdGVuY2lsRnVuYyxuLnN0ZW5jaWxSZWY9dGhpcy5zdGVuY2lsUmVmLG4uc3RlbmNpbEZ1bmNNYXNrPXRoaXMuc3RlbmNpbEZ1bmNNYXNrLG4uc3RlbmNpbEZhaWw9dGhpcy5zdGVuY2lsRmFpbCxuLnN0ZW5jaWxaRmFpbD10aGlzLnN0ZW5jaWxaRmFpbCxuLnN0ZW5jaWxaUGFzcz10aGlzLnN0ZW5jaWxaUGFzcyx0aGlzLnJvdGF0aW9uJiYwIT09dGhpcy5yb3RhdGlvbiYmKG4ucm90YXRpb249dGhpcy5yb3RhdGlvbiksITA9PT10aGlzLnBvbHlnb25PZmZzZXQmJihuLnBvbHlnb25PZmZzZXQ9ITApLDAhPT10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3ImJihuLnBvbHlnb25PZmZzZXRGYWN0b3I9dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yKSwwIT09dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMmJihuLnBvbHlnb25PZmZzZXRVbml0cz10aGlzLnBvbHlnb25PZmZzZXRVbml0cyksdGhpcy5saW5ld2lkdGgmJjEhPT10aGlzLmxpbmV3aWR0aCYmKG4ubGluZXdpZHRoPXRoaXMubGluZXdpZHRoKSx2b2lkIDAhPT10aGlzLmRhc2hTaXplJiYobi5kYXNoU2l6ZT10aGlzLmRhc2hTaXplKSx2b2lkIDAhPT10aGlzLmdhcFNpemUmJihuLmdhcFNpemU9dGhpcy5nYXBTaXplKSx2b2lkIDAhPT10aGlzLnNjYWxlJiYobi5zY2FsZT10aGlzLnNjYWxlKSwhMD09PXRoaXMuZGl0aGVyaW5nJiYobi5kaXRoZXJpbmc9ITApLHRoaXMuYWxwaGFUZXN0PjAmJihuLmFscGhhVGVzdD10aGlzLmFscGhhVGVzdCksITA9PT10aGlzLmFscGhhVG9Db3ZlcmFnZSYmKG4uYWxwaGFUb0NvdmVyYWdlPXRoaXMuYWxwaGFUb0NvdmVyYWdlKSwhMD09PXRoaXMucHJlbXVsdGlwbGllZEFscGhhJiYobi5wcmVtdWx0aXBsaWVkQWxwaGE9dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpLCEwPT09dGhpcy53aXJlZnJhbWUmJihuLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSksdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg+MSYmKG4ud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKSwicm91bmQiIT09dGhpcy53aXJlZnJhbWVMaW5lY2FwJiYobi53aXJlZnJhbWVMaW5lY2FwPXRoaXMud2lyZWZyYW1lTGluZWNhcCksInJvdW5kIiE9PXRoaXMud2lyZWZyYW1lTGluZWpvaW4mJihuLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWpvaW4pLCEwPT09dGhpcy5mbGF0U2hhZGluZyYmKG4uZmxhdFNoYWRpbmc9dGhpcy5mbGF0U2hhZGluZyksITE9PT10aGlzLnZpc2libGUmJihuLnZpc2libGU9ITEpLCExPT09dGhpcy50b25lTWFwcGVkJiYobi50b25lTWFwcGVkPSExKSwie30iIT09SlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkmJihuLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLGUpe2NvbnN0IGU9byh0LnRleHR1cmVzKSxpPW8odC5pbWFnZXMpO2UubGVuZ3RoPjAmJihuLnRleHR1cmVzPWUpLGkubGVuZ3RoPjAmJihuLmltYWdlcz1pKX1yZXR1cm4gbn1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMubmFtZT10Lm5hbWUsdGhpcy5mb2c9dC5mb2csdGhpcy5ibGVuZGluZz10LmJsZW5kaW5nLHRoaXMuc2lkZT10LnNpZGUsdGhpcy52ZXJ0ZXhDb2xvcnM9dC52ZXJ0ZXhDb2xvcnMsdGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLnRyYW5zcGFyZW50PXQudHJhbnNwYXJlbnQsdGhpcy5ibGVuZFNyYz10LmJsZW5kU3JjLHRoaXMuYmxlbmREc3Q9dC5ibGVuZERzdCx0aGlzLmJsZW5kRXF1YXRpb249dC5ibGVuZEVxdWF0aW9uLHRoaXMuYmxlbmRTcmNBbHBoYT10LmJsZW5kU3JjQWxwaGEsdGhpcy5ibGVuZERzdEFscGhhPXQuYmxlbmREc3RBbHBoYSx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT10LmJsZW5kRXF1YXRpb25BbHBoYSx0aGlzLmRlcHRoRnVuYz10LmRlcHRoRnVuYyx0aGlzLmRlcHRoVGVzdD10LmRlcHRoVGVzdCx0aGlzLmRlcHRoV3JpdGU9dC5kZXB0aFdyaXRlLHRoaXMuc3RlbmNpbFdyaXRlTWFzaz10LnN0ZW5jaWxXcml0ZU1hc2ssdGhpcy5zdGVuY2lsRnVuYz10LnN0ZW5jaWxGdW5jLHRoaXMuc3RlbmNpbFJlZj10LnN0ZW5jaWxSZWYsdGhpcy5zdGVuY2lsRnVuY01hc2s9dC5zdGVuY2lsRnVuY01hc2ssdGhpcy5zdGVuY2lsRmFpbD10LnN0ZW5jaWxGYWlsLHRoaXMuc3RlbmNpbFpGYWlsPXQuc3RlbmNpbFpGYWlsLHRoaXMuc3RlbmNpbFpQYXNzPXQuc3RlbmNpbFpQYXNzLHRoaXMuc3RlbmNpbFdyaXRlPXQuc3RlbmNpbFdyaXRlO2NvbnN0IGU9dC5jbGlwcGluZ1BsYW5lcztsZXQgbj1udWxsO2lmKG51bGwhPT1lKXtjb25zdCB0PWUubGVuZ3RoO249bmV3IEFycmF5KHQpO2ZvcihsZXQgbz0wO28hPT10OysrbyluW29dPWVbb10uY2xvbmUoKX1yZXR1cm4gdGhpcy5jbGlwcGluZ1BsYW5lcz1uLHRoaXMuY2xpcEludGVyc2VjdGlvbj10LmNsaXBJbnRlcnNlY3Rpb24sdGhpcy5jbGlwU2hhZG93cz10LmNsaXBTaGFkb3dzLHRoaXMuc2hhZG93U2lkZT10LnNoYWRvd1NpZGUsdGhpcy5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSx0aGlzLnByZWNpc2lvbj10LnByZWNpc2lvbix0aGlzLnBvbHlnb25PZmZzZXQ9dC5wb2x5Z29uT2Zmc2V0LHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IsdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMsdGhpcy5kaXRoZXJpbmc9dC5kaXRoZXJpbmcsdGhpcy5hbHBoYVRlc3Q9dC5hbHBoYVRlc3QsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEsdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLnRvbmVNYXBwZWQ9dC50b25lTWFwcGVkLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfX1PcnQucHJvdG90eXBlLmlzTWF0ZXJpYWw9ITA7Y29uc3QgUHJ0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9LHdydD17aDowLHM6MCxsOjB9LGtydD17aDowLHM6MCxsOjB9O2Z1bmN0aW9uIFNydCh0LGUsbil7cmV0dXJuIG48MCYmKG4rPTEpLG4+MSYmKG4tPTEpLG48MS82P3QrNiooZS10KSpuOm48LjU/ZTpuPDIvMz90KzYqKGUtdCkqKDIvMy1uKTp0fWZ1bmN0aW9uIERydCh0KXtyZXR1cm4gdDwuMDQwNDU/LjA3NzM5OTM4MDgqdDpNYXRoLnBvdyguOTQ3ODY3Mjk4Nip0Ky4wNTIxMzI3MDE0LDIuNCl9ZnVuY3Rpb24gRXJ0KHQpe3JldHVybiB0PC4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwuNDE2NjYpLS4wNTV9Y2xhc3MgUnJ0e2NvbnN0cnVjdG9yKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09ZSYmdm9pZCAwPT09bj90aGlzLnNldCh0KTp0aGlzLnNldFJHQih0LGUsbil9c2V0KHQpe3JldHVybiB0JiZ0LmlzQ29sb3I/dGhpcy5jb3B5KHQpOiJudW1iZXIiPT10eXBlb2YgdD90aGlzLnNldEhleCh0KToic3RyaW5nIj09dHlwZW9mIHQmJnRoaXMuc2V0U3R5bGUodCksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMucj10LHRoaXMuZz10LHRoaXMuYj10LHRoaXN9c2V0SGV4KHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksdGhpcy5yPSh0Pj4xNiYyNTUpLzI1NSx0aGlzLmc9KHQ+PjgmMjU1KS8yNTUsdGhpcy5iPSgyNTUmdCkvMjU1LHRoaXN9c2V0UkdCKHQsZSxuKXtyZXR1cm4gdGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPW4sdGhpc31zZXRIU0wodCxlLG4pe2lmKHQ9KGZ1bmN0aW9uIG8odCxlKXtyZXR1cm4odCVlK2UpJWV9KSh0LDEpLGU9Wml0KGUsMCwxKSxuPVppdChuLDAsMSksMD09PWUpdGhpcy5yPXRoaXMuZz10aGlzLmI9bjtlbHNle2NvbnN0IG89bjw9LjU/biooMStlKTpuK2UtbiplLGk9MipuLW87dGhpcy5yPVNydChpLG8sdCsxLzMpLHRoaXMuZz1TcnQoaSxvLHQpLHRoaXMuYj1TcnQoaSxvLHQtMS8zKX1yZXR1cm4gdGhpc31zZXRTdHlsZSh0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMCE9PWUmJnBhcnNlRmxvYXQoZSk8MSYmY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICIrdCsiIHdpbGwgYmUgaWdub3JlZC4iKX1sZXQgbjtpZihuPS9eKCg/OnJnYnxoc2wpYT8pXCgoW15cKV0qKVwpLy5leGVjKHQpKXtsZXQgdDtjb25zdCBvPW5bMl07c3dpdGNoKG5bMV0pe2Nhc2UicmdiIjpjYXNlInJnYmEiOmlmKHQ9L15ccyooXGQrKVxzKixccyooXGQrKVxzKixccyooXGQrKVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhvKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDI1NSxwYXJzZUludCh0WzFdLDEwKSkvMjU1LHRoaXMuZz1NYXRoLm1pbigyNTUscGFyc2VJbnQodFsyXSwxMCkpLzI1NSx0aGlzLmI9TWF0aC5taW4oMjU1LHBhcnNlSW50KHRbM10sMTApKS8yNTUsZSh0WzRdKSx0aGlzO2lmKHQ9L15ccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhvKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDEwMCxwYXJzZUludCh0WzFdLDEwKSkvMTAwLHRoaXMuZz1NYXRoLm1pbigxMDAscGFyc2VJbnQodFsyXSwxMCkpLzEwMCx0aGlzLmI9TWF0aC5taW4oMTAwLHBhcnNlSW50KHRbM10sMTApKS8xMDAsZSh0WzRdKSx0aGlzO2JyZWFrO2Nhc2UiaHNsIjpjYXNlImhzbGEiOmlmKHQ9L15ccyooXGQqXC4/XGQrKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMobykpe2NvbnN0IG49cGFyc2VGbG9hdCh0WzFdKS8zNjAsbz1wYXJzZUludCh0WzJdLDEwKS8xMDAsaT1wYXJzZUludCh0WzNdLDEwKS8xMDA7cmV0dXJuIGUodFs0XSksdGhpcy5zZXRIU0wobixvLGkpfX19ZWxzZSBpZihuPS9eXCMoW0EtRmEtZlxkXSspJC8uZXhlYyh0KSl7Y29uc3QgdD1uWzFdLGU9dC5sZW5ndGg7aWYoMz09PWUpcmV0dXJuIHRoaXMucj1wYXJzZUludCh0LmNoYXJBdCgwKSt0LmNoYXJBdCgwKSwxNikvMjU1LHRoaXMuZz1wYXJzZUludCh0LmNoYXJBdCgxKSt0LmNoYXJBdCgxKSwxNikvMjU1LHRoaXMuYj1wYXJzZUludCh0LmNoYXJBdCgyKSt0LmNoYXJBdCgyKSwxNikvMjU1LHRoaXM7aWYoNj09PWUpcmV0dXJuIHRoaXMucj1wYXJzZUludCh0LmNoYXJBdCgwKSt0LmNoYXJBdCgxKSwxNikvMjU1LHRoaXMuZz1wYXJzZUludCh0LmNoYXJBdCgyKSt0LmNoYXJBdCgzKSwxNikvMjU1LHRoaXMuYj1wYXJzZUludCh0LmNoYXJBdCg0KSt0LmNoYXJBdCg1KSwxNikvMjU1LHRoaXN9cmV0dXJuIHQmJnQubGVuZ3RoPjA/dGhpcy5zZXRDb2xvck5hbWUodCk6dGhpc31zZXRDb2xvck5hbWUodCl7Y29uc3QgZT1QcnRbdC50b0xvd2VyQ2FzZSgpXTtyZXR1cm4gdm9pZCAwIT09ZT90aGlzLnNldEhleChlKTpjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBVbmtub3duIGNvbG9yICIrdCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnIsdGhpcy5nLHRoaXMuYil9Y29weSh0KXtyZXR1cm4gdGhpcy5yPXQucix0aGlzLmc9dC5nLHRoaXMuYj10LmIsdGhpc31jb3B5R2FtbWFUb0xpbmVhcih0LGU9Mil7cmV0dXJuIHRoaXMucj1NYXRoLnBvdyh0LnIsZSksdGhpcy5nPU1hdGgucG93KHQuZyxlKSx0aGlzLmI9TWF0aC5wb3codC5iLGUpLHRoaXN9Y29weUxpbmVhclRvR2FtbWEodCxlPTIpe2NvbnN0IG49ZT4wPzEvZToxO3JldHVybiB0aGlzLnI9TWF0aC5wb3codC5yLG4pLHRoaXMuZz1NYXRoLnBvdyh0LmcsbiksdGhpcy5iPU1hdGgucG93KHQuYixuKSx0aGlzfWNvbnZlcnRHYW1tYVRvTGluZWFyKHQpe3JldHVybiB0aGlzLmNvcHlHYW1tYVRvTGluZWFyKHRoaXMsdCksdGhpc31jb252ZXJ0TGluZWFyVG9HYW1tYSh0KXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9HYW1tYSh0aGlzLHQpLHRoaXN9Y29weVNSR0JUb0xpbmVhcih0KXtyZXR1cm4gdGhpcy5yPURydCh0LnIpLHRoaXMuZz1EcnQodC5nKSx0aGlzLmI9RHJ0KHQuYiksdGhpc31jb3B5TGluZWFyVG9TUkdCKHQpe3JldHVybiB0aGlzLnI9RXJ0KHQuciksdGhpcy5nPUVydCh0LmcpLHRoaXMuYj1FcnQodC5iKSx0aGlzfWNvbnZlcnRTUkdCVG9MaW5lYXIoKXtyZXR1cm4gdGhpcy5jb3B5U1JHQlRvTGluZWFyKHRoaXMpLHRoaXN9Y29udmVydExpbmVhclRvU1JHQigpe3JldHVybiB0aGlzLmNvcHlMaW5lYXJUb1NSR0IodGhpcyksdGhpc31nZXRIZXgoKXtyZXR1cm4gMjU1KnRoaXMucjw8MTZeMjU1KnRoaXMuZzw8OF4yNTUqdGhpcy5iPDwwfWdldEhleFN0cmluZygpe3JldHVybigiMDAwMDAwIit0aGlzLmdldEhleCgpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpfWdldEhTTCh0KXtjb25zdCBlPXRoaXMucixuPXRoaXMuZyxvPXRoaXMuYixpPU1hdGgubWF4KGUsbixvKSxhPU1hdGgubWluKGUsbixvKTtsZXQgcixzO2NvbnN0IGw9KGEraSkvMjtpZihhPT09aSlyPTAscz0wO2Vsc2V7Y29uc3QgdD1pLWE7c3dpdGNoKHM9bDw9LjU/dC8oaSthKTp0LygyLWktYSksaSl7Y2FzZSBlOnI9KG4tbykvdCsobjxvPzY6MCk7YnJlYWs7Y2FzZSBuOnI9KG8tZSkvdCsyO2JyZWFrO2Nhc2UgbzpyPShlLW4pL3QrNH1yLz02fXJldHVybiB0Lmg9cix0LnM9cyx0Lmw9bCx0fWdldFN0eWxlKCl7cmV0dXJuInJnYigiKygyNTUqdGhpcy5yfDApKyIsIisoMjU1KnRoaXMuZ3wwKSsiLCIrKDI1NSp0aGlzLmJ8MCkrIikifW9mZnNldEhTTCh0LGUsbil7cmV0dXJuIHRoaXMuZ2V0SFNMKHdydCksd3J0LmgrPXQsd3J0LnMrPWUsd3J0LmwrPW4sdGhpcy5zZXRIU0wod3J0Lmgsd3J0LnMsd3J0LmwpLHRoaXN9YWRkKHQpe3JldHVybiB0aGlzLnIrPXQucix0aGlzLmcrPXQuZyx0aGlzLmIrPXQuYix0aGlzfWFkZENvbG9ycyh0LGUpe3JldHVybiB0aGlzLnI9dC5yK2Uucix0aGlzLmc9dC5nK2UuZyx0aGlzLmI9dC5iK2UuYix0aGlzfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy5yKz10LHRoaXMuZys9dCx0aGlzLmIrPXQsdGhpc31zdWIodCl7cmV0dXJuIHRoaXMucj1NYXRoLm1heCgwLHRoaXMuci10LnIpLHRoaXMuZz1NYXRoLm1heCgwLHRoaXMuZy10LmcpLHRoaXMuYj1NYXRoLm1heCgwLHRoaXMuYi10LmIpLHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMucio9dC5yLHRoaXMuZyo9dC5nLHRoaXMuYio9dC5iLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMucio9dCx0aGlzLmcqPXQsdGhpcy5iKj10LHRoaXN9bGVycCh0LGUpe3JldHVybiB0aGlzLnIrPSh0LnItdGhpcy5yKSplLHRoaXMuZys9KHQuZy10aGlzLmcpKmUsdGhpcy5iKz0odC5iLXRoaXMuYikqZSx0aGlzfWxlcnBDb2xvcnModCxlLG4pe3JldHVybiB0aGlzLnI9dC5yKyhlLnItdC5yKSpuLHRoaXMuZz10LmcrKGUuZy10LmcpKm4sdGhpcy5iPXQuYisoZS5iLXQuYikqbix0aGlzfWxlcnBIU0wodCxlKXt0aGlzLmdldEhTTCh3cnQpLHQuZ2V0SFNMKGtydCk7Y29uc3Qgbj1YaXQod3J0Lmgsa3J0LmgsZSksbz1YaXQod3J0LnMsa3J0LnMsZSksaT1YaXQod3J0Lmwsa3J0LmwsZSk7cmV0dXJuIHRoaXMuc2V0SFNMKG4sbyxpKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5yPT09dGhpcy5yJiZ0Lmc9PT10aGlzLmcmJnQuYj09PXRoaXMuYn1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLnI9dFtlXSx0aGlzLmc9dFtlKzFdLHRoaXMuYj10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLnIsdFtlKzFdPXRoaXMuZyx0W2UrMl09dGhpcy5iLHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLnI9dC5nZXRYKGUpLHRoaXMuZz10LmdldFkoZSksdGhpcy5iPXQuZ2V0WihlKSwhMD09PXQubm9ybWFsaXplZCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX1ScnQuTkFNRVM9UHJ0LFJydC5wcm90b3R5cGUuaXNDb2xvcj0hMCxScnQucHJvdG90eXBlLnI9MSxScnQucHJvdG90eXBlLmc9MSxScnQucHJvdG90eXBlLmI9MTtjbGFzcyBBcnQgZXh0ZW5kcyBPcnR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBScnQoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9MCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fUFydC5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0hMDtjb25zdCBUcnQ9bmV3IGNhdCxOcnQ9bmV3IFFpdDtjbGFzcyB6cnR7Y29uc3RydWN0b3IodCxlLG4pe2lmKEFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4iKTt0aGlzLm5hbWU9IiIsdGhpcy5hcnJheT10LHRoaXMuaXRlbVNpemU9ZSx0aGlzLmNvdW50PXZvaWQgMCE9PXQ/dC5sZW5ndGgvZTowLHRoaXMubm9ybWFsaXplZD0hMD09PW4sdGhpcy51c2FnZT1CaXQsdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQsZSxuKXt0Kj10aGlzLml0ZW1TaXplLG4qPWUuaXRlbVNpemU7Zm9yKGxldCBvPTAsaT10aGlzLml0ZW1TaXplO288aTtvKyspdGhpcy5hcnJheVt0K29dPWUuYXJyYXlbbitvXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2NvbnN0IGU9dGhpcy5hcnJheTtsZXQgbj0wO2ZvcihsZXQgbz0wLGk9dC5sZW5ndGg7bzxpO28rKyl7bGV0IGk9dFtvXTt2b2lkIDA9PT1pJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIsbyksaT1uZXcgUnJ0KSxlW24rK109aS5yLGVbbisrXT1pLmcsZVtuKytdPWkuYn1yZXR1cm4gdGhpc31jb3B5VmVjdG9yMnNBcnJheSh0KXtjb25zdCBlPXRoaXMuYXJyYXk7bGV0IG49MDtmb3IobGV0IG89MCxpPXQubGVuZ3RoO288aTtvKyspe2xldCBpPXRbb107dm9pZCAwPT09aSYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLG8pLGk9bmV3IFFpdCksZVtuKytdPWkueCxlW24rK109aS55fXJldHVybiB0aGlzfWNvcHlWZWN0b3Izc0FycmF5KHQpe2NvbnN0IGU9dGhpcy5hcnJheTtsZXQgbj0wO2ZvcihsZXQgbz0wLGk9dC5sZW5ndGg7bzxpO28rKyl7bGV0IGk9dFtvXTt2b2lkIDA9PT1pJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjNzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsbyksaT1uZXcgY2F0KSxlW24rK109aS54LGVbbisrXT1pLnksZVtuKytdPWkuen1yZXR1cm4gdGhpc31jb3B5VmVjdG9yNHNBcnJheSh0KXtjb25zdCBlPXRoaXMuYXJyYXk7bGV0IG49MDtmb3IobGV0IG89MCxpPXQubGVuZ3RoO288aTtvKyspe2xldCBpPXRbb107dm9pZCAwPT09aSYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3I0c0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLG8pLGk9bmV3IGFhdCksZVtuKytdPWkueCxlW24rK109aS55LGVbbisrXT1pLnosZVtuKytdPWkud31yZXR1cm4gdGhpc31hcHBseU1hdHJpeDModCl7aWYoMj09PXRoaXMuaXRlbVNpemUpZm9yKGxldCBlPTAsbj10aGlzLmNvdW50O2U8bjtlKyspTnJ0LmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxOcnQuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFkoZSxOcnQueCxOcnQueSk7ZWxzZSBpZigzPT09dGhpcy5pdGVtU2l6ZSlmb3IobGV0IGU9MCxuPXRoaXMuY291bnQ7ZTxuO2UrKylUcnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0aGlzLGUpLFRydC5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWVooZSxUcnQueCxUcnQueSxUcnQueik7cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgZT0wLG49dGhpcy5jb3VudDtlPG47ZSsrKVRydC54PXRoaXMuZ2V0WChlKSxUcnQueT10aGlzLmdldFkoZSksVHJ0Lno9dGhpcy5nZXRaKGUpLFRydC5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxUcnQueCxUcnQueSxUcnQueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCBlPTAsbj10aGlzLmNvdW50O2U8bjtlKyspVHJ0Lng9dGhpcy5nZXRYKGUpLFRydC55PXRoaXMuZ2V0WShlKSxUcnQuej10aGlzLmdldFooZSksVHJ0LmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKGUsVHJ0LngsVHJ0LnksVHJ0LnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IGU9MCxuPXRoaXMuY291bnQ7ZTxuO2UrKylUcnQueD10aGlzLmdldFgoZSksVHJ0Lnk9dGhpcy5nZXRZKGUpLFRydC56PXRoaXMuZ2V0WihlKSxUcnQudHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXMuc2V0WFlaKGUsVHJ0LngsVHJ0LnksVHJ0LnopO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31nZXRYKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZV19c2V0WCh0LGUpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZV09ZSx0aGlzfWdldFkodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdfXNldFkodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMV09ZSx0aGlzfWdldFoodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdfXNldFoodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMl09ZSx0aGlzfWdldFcodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdfXNldFcodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrM109ZSx0aGlzfXNldFhZKHQsZSxuKXtyZXR1cm4gdGhpcy5hcnJheVswKyh0Kj10aGlzLml0ZW1TaXplKV09ZSx0aGlzLmFycmF5W3QrMV09bix0aGlzfXNldFhZWih0LGUsbixvKXtyZXR1cm4gdGhpcy5hcnJheVswKyh0Kj10aGlzLml0ZW1TaXplKV09ZSx0aGlzLmFycmF5W3QrMV09bix0aGlzLmFycmF5W3QrMl09byx0aGlzfXNldFhZWlcodCxlLG4sbyxpKXtyZXR1cm4gdGhpcy5hcnJheVswKyh0Kj10aGlzLml0ZW1TaXplKV09ZSx0aGlzLmFycmF5W3QrMV09bix0aGlzLmFycmF5W3QrMl09byx0aGlzLmFycmF5W3QrM109aSx0aGlzfW9uVXBsb2FkKHQpe3JldHVybiB0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9dCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuYXJyYXksdGhpcy5pdGVtU2l6ZSkuY29weSh0aGlzKX10b0pTT04oKXtjb25zdCB0PXtpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpLG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfTtyZXR1cm4iIiE9PXRoaXMubmFtZSYmKHQubmFtZT10aGlzLm5hbWUpLHRoaXMudXNhZ2UhPT1CaXQmJih0LnVzYWdlPXRoaXMudXNhZ2UpLDA9PT10aGlzLnVwZGF0ZVJhbmdlLm9mZnNldCYmLTE9PT10aGlzLnVwZGF0ZVJhbmdlLmNvdW50fHwodC51cGRhdGVSYW5nZT10aGlzLnVwZGF0ZVJhbmdlKSx0fX16cnQucHJvdG90eXBlLmlzQnVmZmVyQXR0cmlidXRlPSEwO2NsYXNzIElydCBleHRlbmRzIHpydHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLGUsbil9fWNsYXNzIEhydCBleHRlbmRzIHpydHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIobmV3IFVpbnQzMkFycmF5KHQpLGUsbil9fShjbGFzcyBleHRlbmRzIHpydHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLGUsbil9fSkucHJvdG90eXBlLmlzRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZT0hMDtjbGFzcyBGcnQgZXh0ZW5kcyB6cnR7Y29uc3RydWN0b3IodCxlLG4pe3N1cGVyKG5ldyBGbG9hdDMyQXJyYXkodCksZSxuKX19ZnVuY3Rpb24gTHJ0KHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4tMS8wO2xldCBlPXRbMF07Zm9yKGxldCBuPTEsbz10Lmxlbmd0aDtuPG87KytuKXRbbl0+ZSYmKGU9dFtuXSk7cmV0dXJuIGV9bGV0IEJydD0wO2NvbnN0IFZydD1uZXcgQmF0LGpydD1uZXcgcHJ0LFVydD1uZXcgY2F0LEdydD1uZXcgbWF0LFdydD1uZXcgbWF0LFlydD1uZXcgY2F0O2NsYXNzIHFydCBleHRlbmRzIFVpdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6QnJ0Kyt9KSx0aGlzLnV1aWQ9cWl0KCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1nZXRJbmRleCgpe3JldHVybiB0aGlzLmluZGV4fXNldEluZGV4KHQpe3JldHVybiB0aGlzLmluZGV4PUFycmF5LmlzQXJyYXkodCk/bmV3KExydCh0KT42NTUzNT9IcnQ6SXJ0KSh0LDEpOnQsdGhpc31nZXRBdHRyaWJ1dGUodCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XX1zZXRBdHRyaWJ1dGUodCxlKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdPWUsdGhpc31kZWxldGVBdHRyaWJ1dGUodCl7cmV0dXJuIGRlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbdF0sdGhpc31oYXNBdHRyaWJ1dGUodCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuYXR0cmlidXRlc1t0XX1hZGRHcm91cCh0LGUsbj0wKXt0aGlzLmdyb3Vwcy5wdXNoKHtzdGFydDp0LGNvdW50OmUsbWF0ZXJpYWxJbmRleDpufSl9Y2xlYXJHcm91cHMoKXt0aGlzLmdyb3Vwcz1bXX1zZXREcmF3UmFuZ2UodCxlKXt0aGlzLmRyYXdSYW5nZS5zdGFydD10LHRoaXMuZHJhd1JhbmdlLmNvdW50PWV9YXBwbHlNYXRyaXg0KHQpe2NvbnN0IGU9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO3ZvaWQgMCE9PWUmJihlLmFwcGx5TWF0cml4NCh0KSxlLm5lZWRzVXBkYXRlPSEwKTtjb25zdCBuPXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7aWYodm9pZCAwIT09bil7Y29uc3QgZT0obmV3ICRpdCkuZ2V0Tm9ybWFsTWF0cml4KHQpO24uYXBwbHlOb3JtYWxNYXRyaXgoZSksbi5uZWVkc1VwZGF0ZT0hMH1jb25zdCBvPXRoaXMuYXR0cmlidXRlcy50YW5nZW50O3JldHVybiB2b2lkIDAhPT1vJiYoby50cmFuc2Zvcm1EaXJlY3Rpb24odCksby5uZWVkc1VwZGF0ZT0hMCksbnVsbCE9PXRoaXMuYm91bmRpbmdCb3gmJnRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksbnVsbCE9PXRoaXMuYm91bmRpbmdTcGhlcmUmJnRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksdGhpc31hcHBseVF1YXRlcm5pb24odCl7cmV0dXJuIFZydC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KSx0aGlzLmFwcGx5TWF0cml4NChWcnQpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gVnJ0Lm1ha2VSb3RhdGlvblgodCksdGhpcy5hcHBseU1hdHJpeDQoVnJ0KSx0aGlzfXJvdGF0ZVkodCl7cmV0dXJuIFZydC5tYWtlUm90YXRpb25ZKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFZydCksdGhpc31yb3RhdGVaKHQpe3JldHVybiBWcnQubWFrZVJvdGF0aW9uWih0KSx0aGlzLmFwcGx5TWF0cml4NChWcnQpLHRoaXN9dHJhbnNsYXRlKHQsZSxuKXtyZXR1cm4gVnJ0Lm1ha2VUcmFuc2xhdGlvbih0LGUsbiksdGhpcy5hcHBseU1hdHJpeDQoVnJ0KSx0aGlzfXNjYWxlKHQsZSxuKXtyZXR1cm4gVnJ0Lm1ha2VTY2FsZSh0LGUsbiksdGhpcy5hcHBseU1hdHJpeDQoVnJ0KSx0aGlzfWxvb2tBdCh0KXtyZXR1cm4ganJ0Lmxvb2tBdCh0KSxqcnQudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoanJ0Lm1hdHJpeCksdGhpc31jZW50ZXIoKXtyZXR1cm4gdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSx0aGlzLmJvdW5kaW5nQm94LmdldENlbnRlcihVcnQpLm5lZ2F0ZSgpLHRoaXMudHJhbnNsYXRlKFVydC54LFVydC55LFVydC56KSx0aGlzfXNldEZyb21Qb2ludHModCl7Y29uc3QgZT1bXTtmb3IobGV0IG49MCxvPXQubGVuZ3RoO248bztuKyspe2NvbnN0IG89dFtuXTtlLnB1c2goby54LG8ueSxvLnp8fDApfXJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBGcnQoZSwzKSksdGhpc31jb21wdXRlQm91bmRpbmdCb3goKXtudWxsPT09dGhpcy5ib3VuZGluZ0JveCYmKHRoaXMuYm91bmRpbmdCb3g9bmV3IG1hdCk7Y29uc3QgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24sZT10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBib3guIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx2b2lkIHRoaXMuYm91bmRpbmdCb3guc2V0KG5ldyBjYXQoLTEvMCwtMS8wLC0xLzApLG5ldyBjYXQoMS8wLDEvMCwxLzApKTtpZih2b2lkIDAhPT10KXtpZih0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspR3J0LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVt0XSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oWXJ0LmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5taW4sR3J0Lm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KFlydCksWXJ0LmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5tYXgsR3J0Lm1heCksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KFlydCkpOih0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoR3J0Lm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KEdydC5tYXgpKX1lbHNlIHRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogQ29tcHV0ZWQgbWluL21heCBoYXZlIE5hTiB2YWx1ZXMuIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9Y29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl7bnVsbD09PXRoaXMuYm91bmRpbmdTcGhlcmUmJih0aGlzLmJvdW5kaW5nU3BoZXJlPW5ldyBSYXQpO2NvbnN0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLGU9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXJldHVybiBjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgc3BoZXJlLiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdm9pZCB0aGlzLmJvdW5kaW5nU3BoZXJlLnNldChuZXcgY2F0LDEvMCk7aWYodCl7Y29uc3Qgbj10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtpZihHcnQuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KSxlKWZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKylXcnQuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShlW3RdKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhZcnQuYWRkVmVjdG9ycyhHcnQubWluLFdydC5taW4pLEdydC5leHBhbmRCeVBvaW50KFlydCksWXJ0LmFkZFZlY3RvcnMoR3J0Lm1heCxXcnQubWF4KSxHcnQuZXhwYW5kQnlQb2ludChZcnQpKTooR3J0LmV4cGFuZEJ5UG9pbnQoV3J0Lm1pbiksR3J0LmV4cGFuZEJ5UG9pbnQoV3J0Lm1heCkpO0dydC5nZXRDZW50ZXIobik7bGV0IG89MDtmb3IobGV0IGU9MCxpPXQuY291bnQ7ZTxpO2UrKylZcnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLG89TWF0aC5tYXgobyxuLmRpc3RhbmNlVG9TcXVhcmVkKFlydCkpO2lmKGUpZm9yKGxldCBpPTAsYT1lLmxlbmd0aDtpPGE7aSsrKXtjb25zdCBhPWVbaV0scj10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2ZvcihsZXQgZT0wLGk9YS5jb3VudDtlPGk7ZSsrKVlydC5mcm9tQnVmZmVyQXR0cmlidXRlKGEsZSksciYmKFVydC5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSksWXJ0LmFkZChVcnQpKSxvPU1hdGgubWF4KG8sbi5kaXN0YW5jZVRvU3F1YXJlZChZcnQpKX10aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cz1NYXRoLnNxcnQobyksaXNOYU4odGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXMpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogQ29tcHV0ZWQgcmFkaXVzIGlzIE5hTi4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX19Y29tcHV0ZUZhY2VOb3JtYWxzKCl7fWNvbXB1dGVUYW5nZW50cygpe2NvbnN0IHQ9dGhpcy5pbmRleCxlPXRoaXMuYXR0cmlidXRlcztpZihudWxsPT09dHx8dm9pZCAwPT09ZS5wb3NpdGlvbnx8dm9pZCAwPT09ZS5ub3JtYWx8fHZvaWQgMD09PWUudXYpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlVGFuZ2VudHMoKSBmYWlsZWQuIE1pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlcyAoaW5kZXgsIHBvc2l0aW9uLCBub3JtYWwgb3IgdXYpIik7Y29uc3Qgbj10LmFycmF5LG89ZS5wb3NpdGlvbi5hcnJheSxpPWUubm9ybWFsLmFycmF5LGE9ZS51di5hcnJheSxyPW8ubGVuZ3RoLzM7dm9pZCAwPT09ZS50YW5nZW50JiZ0aGlzLnNldEF0dHJpYnV0ZSgidGFuZ2VudCIsbmV3IHpydChuZXcgRmxvYXQzMkFycmF5KDQqciksNCkpO2NvbnN0IHM9ZS50YW5nZW50LmFycmF5LGw9W10sYz1bXTtmb3IobGV0IHQ9MDt0PHI7dCsrKWxbdF09bmV3IGNhdCxjW3RdPW5ldyBjYXQ7Y29uc3QgZD1uZXcgY2F0LHA9bmV3IGNhdCxtPW5ldyBjYXQsdT1uZXcgUWl0LGY9bmV3IFFpdCxnPW5ldyBRaXQsaD1uZXcgY2F0LGI9bmV3IGNhdDtmdW5jdGlvbiB5KHQsZSxuKXtkLmZyb21BcnJheShvLDMqdCkscC5mcm9tQXJyYXkobywzKmUpLG0uZnJvbUFycmF5KG8sMypuKSx1LmZyb21BcnJheShhLDIqdCksZi5mcm9tQXJyYXkoYSwyKmUpLGcuZnJvbUFycmF5KGEsMipuKSxwLnN1YihkKSxtLnN1YihkKSxmLnN1Yih1KSxnLnN1Yih1KTtjb25zdCBpPTEvKGYueCpnLnktZy54KmYueSk7aXNGaW5pdGUoaSkmJihoLmNvcHkocCkubXVsdGlwbHlTY2FsYXIoZy55KS5hZGRTY2FsZWRWZWN0b3IobSwtZi55KS5tdWx0aXBseVNjYWxhcihpKSxiLmNvcHkobSkubXVsdGlwbHlTY2FsYXIoZi54KS5hZGRTY2FsZWRWZWN0b3IocCwtZy54KS5tdWx0aXBseVNjYWxhcihpKSxsW3RdLmFkZChoKSxsW2VdLmFkZChoKSxsW25dLmFkZChoKSxjW3RdLmFkZChiKSxjW2VdLmFkZChiKSxjW25dLmFkZChiKSl9bGV0IF89dGhpcy5ncm91cHM7MD09PV8ubGVuZ3RoJiYoXz1be3N0YXJ0OjAsY291bnQ6bi5sZW5ndGh9XSk7Zm9yKGxldCB0PTAsZT1fLmxlbmd0aDt0PGU7Kyt0KXtjb25zdCBlPV9bdF0sbz1lLnN0YXJ0O2ZvcihsZXQgdD1vLGk9bytlLmNvdW50O3Q8aTt0Kz0zKXkoblt0KzBdLG5bdCsxXSxuW3QrMl0pfWNvbnN0IEM9bmV3IGNhdCxNPW5ldyBjYXQsdj1uZXcgY2F0LHg9bmV3IGNhdDtmdW5jdGlvbiBPKHQpe3YuZnJvbUFycmF5KGksMyp0KSx4LmNvcHkodik7Y29uc3QgZT1sW3RdO0MuY29weShlKSxDLnN1Yih2Lm11bHRpcGx5U2NhbGFyKHYuZG90KGUpKSkubm9ybWFsaXplKCksTS5jcm9zc1ZlY3RvcnMoeCxlKTtjb25zdCBuPU0uZG90KGNbdF0pPDA/LTE6MTtzWzQqdF09Qy54LHNbNCp0KzFdPUMueSxzWzQqdCsyXT1DLnosc1s0KnQrM109bn1mb3IobGV0IHQ9MCxlPV8ubGVuZ3RoO3Q8ZTsrK3Qpe2NvbnN0IGU9X1t0XSxvPWUuc3RhcnQ7Zm9yKGxldCB0PW8saT1vK2UuY291bnQ7dDxpO3QrPTMpTyhuW3QrMF0pLE8oblt0KzFdKSxPKG5bdCsyXSl9fWNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCl7Y29uc3QgdD10aGlzLmluZGV4LGU9dGhpcy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7aWYodm9pZCAwIT09ZSl7bGV0IG49dGhpcy5nZXRBdHRyaWJ1dGUoIm5vcm1hbCIpO2lmKHZvaWQgMD09PW4pbj1uZXcgenJ0KG5ldyBGbG9hdDMyQXJyYXkoMyplLmNvdW50KSwzKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuKTtlbHNlIGZvcihsZXQgdD0wLGU9bi5jb3VudDt0PGU7dCsrKW4uc2V0WFlaKHQsMCwwLDApO2NvbnN0IG89bmV3IGNhdCxpPW5ldyBjYXQsYT1uZXcgY2F0LHI9bmV3IGNhdCxzPW5ldyBjYXQsbD1uZXcgY2F0LGM9bmV3IGNhdCxkPW5ldyBjYXQ7aWYodClmb3IobGV0IHA9MCxtPXQuY291bnQ7cDxtO3ArPTMpe2NvbnN0IG09dC5nZXRYKHArMCksdT10LmdldFgocCsxKSxmPXQuZ2V0WChwKzIpO28uZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLG0pLGkuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHUpLGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGYpLGMuc3ViVmVjdG9ycyhhLGkpLGQuc3ViVmVjdG9ycyhvLGkpLGMuY3Jvc3MoZCksci5mcm9tQnVmZmVyQXR0cmlidXRlKG4sbSkscy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdSksbC5mcm9tQnVmZmVyQXR0cmlidXRlKG4sZiksci5hZGQoYykscy5hZGQoYyksbC5hZGQoYyksbi5zZXRYWVoobSxyLngsci55LHIueiksbi5zZXRYWVoodSxzLngscy55LHMueiksbi5zZXRYWVooZixsLngsbC55LGwueil9ZWxzZSBmb3IobGV0IHQ9MCxyPWUuY291bnQ7dDxyO3QrPTMpby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCswKSxpLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0KzEpLGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQrMiksYy5zdWJWZWN0b3JzKGEsaSksZC5zdWJWZWN0b3JzKG8saSksYy5jcm9zcyhkKSxuLnNldFhZWih0KzAsYy54LGMueSxjLnopLG4uc2V0WFlaKHQrMSxjLngsYy55LGMueiksbi5zZXRYWVoodCsyLGMueCxjLnksYy56KTt0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKSxuLm5lZWRzVXBkYXRlPSEwfX1tZXJnZSh0LGUpe2lmKCF0fHwhdC5pc0J1ZmZlckdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IGdlb21ldHJ5IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeS4iLHQpO3ZvaWQgMD09PWUmJihlPTAsY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBPdmVyd3JpdGluZyBvcmlnaW5hbCBnZW9tZXRyeSwgc3RhcnRpbmcgYXQgb2Zmc2V0PTAuIFVzZSBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcygpIGZvciBsb3NzbGVzcyBtZXJnZS4iKSk7Y29uc3Qgbj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGNvbnN0IG8gaW4gbil7aWYodm9pZCAwPT09dC5hdHRyaWJ1dGVzW29dKWNvbnRpbnVlO2NvbnN0IGk9bltvXS5hcnJheSxhPXQuYXR0cmlidXRlc1tvXSxyPWEuYXJyYXkscz1hLml0ZW1TaXplKmUsbD1NYXRoLm1pbihyLmxlbmd0aCxpLmxlbmd0aC1zKTtmb3IobGV0IHQ9MCxlPXM7dDxsO3QrKyxlKyspaVtlXT1yW3RdfXJldHVybiB0aGlzfW5vcm1hbGl6ZU5vcm1hbHMoKXtjb25zdCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCBlPTAsbj10LmNvdW50O2U8bjtlKyspWXJ0LmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKSxZcnQubm9ybWFsaXplKCksdC5zZXRYWVooZSxZcnQueCxZcnQueSxZcnQueil9dG9Ob25JbmRleGVkKCl7ZnVuY3Rpb24gdCh0LGUpe2NvbnN0IG49dC5hcnJheSxvPXQuaXRlbVNpemUsaT10Lm5vcm1hbGl6ZWQsYT1uZXcgbi5jb25zdHJ1Y3RvcihlLmxlbmd0aCpvKTtsZXQgcj0wLHM9MDtmb3IobGV0IGk9MCxsPWUubGVuZ3RoO2k8bDtpKyspe3I9dC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP2VbaV0qdC5kYXRhLnN0cmlkZSt0Lm9mZnNldDplW2ldKm87Zm9yKGxldCB0PTA7dDxvO3QrKylhW3MrK109bltyKytdfXJldHVybiBuZXcgenJ0KGEsbyxpKX1pZihudWxsPT09dGhpcy5pbmRleClyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS50b05vbkluZGV4ZWQoKTogQnVmZmVyR2VvbWV0cnkgaXMgYWxyZWFkeSBub24taW5kZXhlZC4iKSx0aGlzO2NvbnN0IGU9bmV3IHFydCxuPXRoaXMuaW5kZXguYXJyYXksbz10aGlzLmF0dHJpYnV0ZXM7Zm9yKGNvbnN0IGkgaW4gbyl7Y29uc3QgYT10KG9baV0sbik7ZS5zZXRBdHRyaWJ1dGUoaSxhKX1jb25zdCBpPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2Zvcihjb25zdCBvIGluIGkpe2NvbnN0IGE9W10scj1pW29dO2ZvcihsZXQgZT0wLG89ci5sZW5ndGg7ZTxvO2UrKyl7Y29uc3Qgbz10KHJbZV0sbik7YS5wdXNoKG8pfWUubW9ycGhBdHRyaWJ1dGVzW29dPWF9ZS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2NvbnN0IGE9dGhpcy5ncm91cHM7Zm9yKGxldCB0PTAsbj1hLmxlbmd0aDt0PG47dCsrKXtjb25zdCBuPWFbdF07ZS5hZGRHcm91cChuLnN0YXJ0LG4uY291bnQsbi5tYXRlcmlhbEluZGV4KX1yZXR1cm4gZX10b0pTT04oKXtjb25zdCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQnVmZmVyR2VvbWV0cnkiLGdlbmVyYXRvcjoiQnVmZmVyR2VvbWV0cnkudG9KU09OIn19O2lmKHQudXVpZD10aGlzLnV1aWQsdC50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKHQubmFtZT10aGlzLm5hbWUpLE9iamVjdC5rZXlzKHRoaXMudXNlckRhdGEpLmxlbmd0aD4wJiYodC51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSx2b2lkIDAhPT10aGlzLnBhcmFtZXRlcnMpe2NvbnN0IGU9dGhpcy5wYXJhbWV0ZXJzO2Zvcihjb25zdCBuIGluIGUpdm9pZCAwIT09ZVtuXSYmKHRbbl09ZVtuXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtjb25zdCBlPXRoaXMuaW5kZXg7bnVsbCE9PWUmJih0LmRhdGEuaW5kZXg9e3R5cGU6ZS5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuYXJyYXkpfSk7Y29uc3Qgbj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGNvbnN0IGUgaW4gbil0LmRhdGEuYXR0cmlidXRlc1tlXT1uW2VdLnRvSlNPTih0LmRhdGEpO2NvbnN0IG89e307bGV0IGk9ITE7Zm9yKGNvbnN0IGUgaW4gdGhpcy5tb3JwaEF0dHJpYnV0ZXMpe2NvbnN0IG49dGhpcy5tb3JwaEF0dHJpYnV0ZXNbZV0sYT1bXTtmb3IobGV0IGU9MCxvPW4ubGVuZ3RoO2U8bztlKyspYS5wdXNoKG5bZV0udG9KU09OKHQuZGF0YSkpO2EubGVuZ3RoPjAmJihvW2VdPWEsaT0hMCl9aSYmKHQuZGF0YS5tb3JwaEF0dHJpYnV0ZXM9byx0LmRhdGEubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZSk7Y29uc3QgYT10aGlzLmdyb3VwczthLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGEpKSk7Y29uc3Qgcj10aGlzLmJvdW5kaW5nU3BoZXJlO3JldHVybiBudWxsIT09ciYmKHQuZGF0YS5ib3VuZGluZ1NwaGVyZT17Y2VudGVyOnIuY2VudGVyLnRvQXJyYXkoKSxyYWRpdXM6ci5yYWRpdXN9KSx0fWNsb25lKCl7cmV0dXJuKG5ldyBxcnQpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGw7Y29uc3QgZT17fTt0aGlzLm5hbWU9dC5uYW1lO2NvbnN0IG49dC5pbmRleDtudWxsIT09biYmdGhpcy5zZXRJbmRleChuLmNsb25lKGUpKTtjb25zdCBvPXQuYXR0cmlidXRlcztmb3IoY29uc3QgdCBpbiBvKXRoaXMuc2V0QXR0cmlidXRlKHQsb1t0XS5jbG9uZShlKSk7Y29uc3QgaT10Lm1vcnBoQXR0cmlidXRlcztmb3IoY29uc3QgdCBpbiBpKXtjb25zdCBuPVtdLG89aVt0XTtmb3IobGV0IHQ9MCxpPW8ubGVuZ3RoO3Q8aTt0Kyspbi5wdXNoKG9bdF0uY2xvbmUoZSkpO3RoaXMubW9ycGhBdHRyaWJ1dGVzW3RdPW59dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT10Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2NvbnN0IGE9dC5ncm91cHM7Zm9yKGxldCB0PTAsZT1hLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPWFbdF07dGhpcy5hZGRHcm91cChlLnN0YXJ0LGUuY291bnQsZS5tYXRlcmlhbEluZGV4KX1jb25zdCByPXQuYm91bmRpbmdCb3g7bnVsbCE9PXImJih0aGlzLmJvdW5kaW5nQm94PXIuY2xvbmUoKSk7Y29uc3Qgcz10LmJvdW5kaW5nU3BoZXJlO3JldHVybiBudWxsIT09cyYmKHRoaXMuYm91bmRpbmdTcGhlcmU9cy5jbG9uZSgpKSx0aGlzLmRyYXdSYW5nZS5zdGFydD10LmRyYXdSYW5nZS5zdGFydCx0aGlzLmRyYXdSYW5nZS5jb3VudD10LmRyYXdSYW5nZS5jb3VudCx0aGlzLnVzZXJEYXRhPXQudXNlckRhdGEsdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX1xcnQucHJvdG90eXBlLmlzQnVmZmVyR2VvbWV0cnk9ITA7Y29uc3QgWnJ0PW5ldyBCYXQsWHJ0PW5ldyBMYXQsS3J0PW5ldyBSYXQsSnJ0PW5ldyBjYXQsUXJ0PW5ldyBjYXQsJHJ0PW5ldyBjYXQsdHN0PW5ldyBjYXQsZXN0PW5ldyBjYXQsbnN0PW5ldyBjYXQsb3N0PW5ldyBjYXQsaXN0PW5ldyBjYXQsYXN0PW5ldyBjYXQscnN0PW5ldyBRaXQsc3N0PW5ldyBRaXQsbHN0PW5ldyBRaXQsY3N0PW5ldyBjYXQsZHN0PW5ldyBjYXQ7Y2xhc3MgcHN0IGV4dGVuZHMgcHJ0e2NvbnN0cnVjdG9yKHQ9bmV3IHFydCxlPW5ldyBBcnQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx2b2lkIDAhPT10Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyYmKHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPXQubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnNsaWNlKCkpLHZvaWQgMCE9PXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5JiYodGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9T2JqZWN0LmFzc2lnbih7fSx0Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeSkpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc311cGRhdGVNb3JwaFRhcmdldHMoKXtjb25zdCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtjb25zdCBlPXQubW9ycGhBdHRyaWJ1dGVzLG49T2JqZWN0LmtleXMoZSk7aWYobi5sZW5ndGg+MCl7Y29uc3QgdD1lW25bMF1dO2lmKHZvaWQgMCE9PXQpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10W2VdLm5hbWV8fFN0cmluZyhlKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W25dPWV9fX19ZWxzZXtjb25zdCBlPXQubW9ycGhUYXJnZXRzO3ZvaWQgMCE9PWUmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2gudXBkYXRlTW9ycGhUYXJnZXRzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19cmF5Y2FzdCh0LGUpe2NvbnN0IG49dGhpcy5nZW9tZXRyeSxvPXRoaXMubWF0ZXJpYWwsaT10aGlzLm1hdHJpeFdvcmxkO2lmKHZvaWQgMD09PW8pcmV0dXJuO2lmKG51bGw9PT1uLmJvdW5kaW5nU3BoZXJlJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLEtydC5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLEtydC5hcHBseU1hdHJpeDQoaSksITE9PT10LnJheS5pbnRlcnNlY3RzU3BoZXJlKEtydCkpcmV0dXJuO2lmKFpydC5jb3B5KGkpLmludmVydCgpLFhydC5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoWnJ0KSxudWxsIT09bi5ib3VuZGluZ0JveCYmITE9PT1YcnQuaW50ZXJzZWN0c0JveChuLmJvdW5kaW5nQm94KSlyZXR1cm47bGV0IGE7aWYobi5pc0J1ZmZlckdlb21ldHJ5KXtjb25zdCBpPW4uaW5kZXgscj1uLmF0dHJpYnV0ZXMucG9zaXRpb24scz1uLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixsPW4ubW9ycGhUYXJnZXRzUmVsYXRpdmUsYz1uLmF0dHJpYnV0ZXMudXYsZD1uLmF0dHJpYnV0ZXMudXYyLHA9bi5ncm91cHMsbT1uLmRyYXdSYW5nZTtpZihudWxsIT09aSlpZihBcnJheS5pc0FycmF5KG8pKWZvcihsZXQgbj0wLHU9cC5sZW5ndGg7bjx1O24rKyl7Y29uc3QgdT1wW25dLGY9b1t1Lm1hdGVyaWFsSW5kZXhdO2ZvcihsZXQgbj1NYXRoLm1heCh1LnN0YXJ0LG0uc3RhcnQpLG89TWF0aC5taW4odS5zdGFydCt1LmNvdW50LG0uc3RhcnQrbS5jb3VudCk7bjxvO24rPTMpe2NvbnN0IG89aS5nZXRYKG4pLHA9aS5nZXRYKG4rMSksbT1pLmdldFgobisyKTthPW1zdCh0aGlzLGYsdCxYcnQscixzLGwsYyxkLG8scCxtKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcihuLzMpLGEuZmFjZS5tYXRlcmlhbEluZGV4PXUubWF0ZXJpYWxJbmRleCxlLnB1c2goYSkpfX1lbHNlIGZvcihsZXQgbj1NYXRoLm1heCgwLG0uc3RhcnQpLHA9TWF0aC5taW4oaS5jb3VudCxtLnN0YXJ0K20uY291bnQpO248cDtuKz0zKXtjb25zdCBwPWkuZ2V0WChuKSxtPWkuZ2V0WChuKzEpLHU9aS5nZXRYKG4rMik7YT1tc3QodGhpcyxvLHQsWHJ0LHIscyxsLGMsZCxwLG0sdSksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3Iobi8zKSxlLnB1c2goYSkpfWVsc2UgaWYodm9pZCAwIT09cilpZihBcnJheS5pc0FycmF5KG8pKWZvcihsZXQgbj0wLGk9cC5sZW5ndGg7bjxpO24rKyl7Y29uc3QgaT1wW25dLHU9b1tpLm1hdGVyaWFsSW5kZXhdO2ZvcihsZXQgbj1NYXRoLm1heChpLnN0YXJ0LG0uc3RhcnQpLG89TWF0aC5taW4oaS5zdGFydCtpLmNvdW50LG0uc3RhcnQrbS5jb3VudCk7bjxvO24rPTMpYT1tc3QodGhpcyx1LHQsWHJ0LHIscyxsLGMsZCxuLG4rMSxuKzIpLGEmJihhLmZhY2VJbmRleD1NYXRoLmZsb29yKG4vMyksYS5mYWNlLm1hdGVyaWFsSW5kZXg9aS5tYXRlcmlhbEluZGV4LGUucHVzaChhKSl9ZWxzZSBmb3IobGV0IG49TWF0aC5tYXgoMCxtLnN0YXJ0KSxpPU1hdGgubWluKHIuY291bnQsbS5zdGFydCttLmNvdW50KTtuPGk7bis9MylhPW1zdCh0aGlzLG8sdCxYcnQscixzLGwsYyxkLG4sbisxLG4rMiksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3Iobi8zKSxlLnB1c2goYSkpfWVsc2Ugbi5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX1mdW5jdGlvbiBtc3QodCxlLG4sbyxpLGEscixzLGwsYyxkLHApe0pydC5mcm9tQnVmZmVyQXR0cmlidXRlKGksYyksUXJ0LmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxkKSwkcnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLHApO2NvbnN0IG09dC5tb3JwaFRhcmdldEluZmx1ZW5jZXM7aWYoYSYmbSl7b3N0LnNldCgwLDAsMCksaXN0LnNldCgwLDAsMCksYXN0LnNldCgwLDAsMCk7Zm9yKGxldCB0PTAsZT1hLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPW1bdF0sbj1hW3RdOzAhPT1lJiYodHN0LmZyb21CdWZmZXJBdHRyaWJ1dGUobixjKSxlc3QuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLGQpLG5zdC5mcm9tQnVmZmVyQXR0cmlidXRlKG4scCkscj8ob3N0LmFkZFNjYWxlZFZlY3Rvcih0c3QsZSksaXN0LmFkZFNjYWxlZFZlY3Rvcihlc3QsZSksYXN0LmFkZFNjYWxlZFZlY3Rvcihuc3QsZSkpOihvc3QuYWRkU2NhbGVkVmVjdG9yKHRzdC5zdWIoSnJ0KSxlKSxpc3QuYWRkU2NhbGVkVmVjdG9yKGVzdC5zdWIoUXJ0KSxlKSxhc3QuYWRkU2NhbGVkVmVjdG9yKG5zdC5zdWIoJHJ0KSxlKSkpfUpydC5hZGQob3N0KSxRcnQuYWRkKGlzdCksJHJ0LmFkZChhc3QpfXQuaXNTa2lubmVkTWVzaCYmKHQuYm9uZVRyYW5zZm9ybShjLEpydCksdC5ib25lVHJhbnNmb3JtKGQsUXJ0KSx0LmJvbmVUcmFuc2Zvcm0ocCwkcnQpKTtjb25zdCB1PShmdW5jdGlvbiBmKHQsZSxuLG8saSxhLHIscyl7bGV0IGw7aWYobD0xPT09ZS5zaWRlP28uaW50ZXJzZWN0VHJpYW5nbGUocixhLGksITAscyk6by5pbnRlcnNlY3RUcmlhbmdsZShpLGEsciwyIT09ZS5zaWRlLHMpLG51bGw9PT1sKXJldHVybiBudWxsO2RzdC5jb3B5KHMpLGRzdC5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCk7Y29uc3QgYz1uLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhkc3QpO3JldHVybiBjPG4ubmVhcnx8Yz5uLmZhcj9udWxsOntkaXN0YW5jZTpjLHBvaW50OmRzdC5jbG9uZSgpLG9iamVjdDp0fX0pKHQsZSxuLG8sSnJ0LFFydCwkcnQsY3N0KTtpZih1KXtzJiYocnN0LmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxzc3QuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLGQpLGxzdC5mcm9tQnVmZmVyQXR0cmlidXRlKHMscCksdS51dj12cnQuZ2V0VVYoY3N0LEpydCxRcnQsJHJ0LHJzdCxzc3QsbHN0LG5ldyBRaXQpKSxsJiYocnN0LmZyb21CdWZmZXJBdHRyaWJ1dGUobCxjKSxzc3QuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLGQpLGxzdC5mcm9tQnVmZmVyQXR0cmlidXRlKGwscCksdS51djI9dnJ0LmdldFVWKGNzdCxKcnQsUXJ0LCRydCxyc3Qsc3N0LGxzdCxuZXcgUWl0KSk7Y29uc3QgdD17YTpjLGI6ZCxjOnAsbm9ybWFsOm5ldyBjYXQsbWF0ZXJpYWxJbmRleDowfTt2cnQuZ2V0Tm9ybWFsKEpydCxRcnQsJHJ0LHQubm9ybWFsKSx1LmZhY2U9dH1yZXR1cm4gdX1wc3QucHJvdG90eXBlLmlzTWVzaD0hMDtjbGFzcyB1c3QgZXh0ZW5kcyBxcnR7Y29uc3RydWN0b3IodD0xLGU9MSxuPTEsbz0xLGk9MSxhPTEpe3N1cGVyKCksdGhpcy50eXBlPSJCb3hHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOm4sd2lkdGhTZWdtZW50czpvLGhlaWdodFNlZ21lbnRzOmksZGVwdGhTZWdtZW50czphfTtjb25zdCByPXRoaXM7bz1NYXRoLmZsb29yKG8pLGk9TWF0aC5mbG9vcihpKSxhPU1hdGguZmxvb3IoYSk7Y29uc3Qgcz1bXSxsPVtdLGM9W10sZD1bXTtsZXQgcD0wLG09MDtmdW5jdGlvbiB1KHQsZSxuLG8saSxhLHUsZixnLGgsYil7Y29uc3QgeT1hL2csXz11L2gsQz1hLzIsTT11LzIsdj1mLzIseD1nKzEsTz1oKzE7bGV0IFA9MCx3PTA7Y29uc3Qgaz1uZXcgY2F0O2ZvcihsZXQgYT0wO2E8TzthKyspe2NvbnN0IHI9YSpfLU07Zm9yKGxldCBzPTA7czx4O3MrKylrW3RdPShzKnktQykqbyxrW2VdPXIqaSxrW25dPXYsbC5wdXNoKGsueCxrLnksay56KSxrW3RdPTAsa1tlXT0wLGtbbl09Zj4wPzE6LTEsYy5wdXNoKGsueCxrLnksay56KSxkLnB1c2gocy9nKSxkLnB1c2goMS1hL2gpLFArPTF9Zm9yKGxldCB0PTA7dDxoO3QrKylmb3IobGV0IGU9MDtlPGc7ZSsrKXtjb25zdCBuPXArZSt4Kih0KzEpLG89cCsoZSsxKSt4Kih0KzEpLGk9cCsoZSsxKSt4KnQ7cy5wdXNoKHArZSt4KnQsbixpKSxzLnB1c2gobixvLGkpLHcrPTZ9ci5hZGRHcm91cChtLHcsYiksbSs9dyxwKz1QfXUoInoiLCJ5IiwieCIsLTEsLTEsbixlLHQsYSxpLDApLHUoInoiLCJ5IiwieCIsMSwtMSxuLGUsLXQsYSxpLDEpLHUoIngiLCJ6IiwieSIsMSwxLHQsbixlLG8sYSwyKSx1KCJ4IiwieiIsInkiLDEsLTEsdCxuLC1lLG8sYSwzKSx1KCJ4IiwieSIsInoiLDEsLTEsdCxlLG4sbyxpLDQpLHUoIngiLCJ5IiwieiIsLTEsLTEsdCxlLC1uLG8saSw1KSx0aGlzLnNldEluZGV4KHMpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEZydChsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgRnJ0KGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEZydChkLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyB1c3QodC53aWR0aCx0LmhlaWdodCx0LmRlcHRoLHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzLHQuZGVwdGhTZWdtZW50cyl9fWZ1bmN0aW9uIGZzdCh0KXtjb25zdCBlPXt9O2Zvcihjb25zdCBuIGluIHQpe2Vbbl09e307Zm9yKGNvbnN0IG8gaW4gdFtuXSl7Y29uc3QgaT10W25dW29dO2Vbbl1bb109aSYmKGkuaXNDb2xvcnx8aS5pc01hdHJpeDN8fGkuaXNNYXRyaXg0fHxpLmlzVmVjdG9yMnx8aS5pc1ZlY3RvcjN8fGkuaXNWZWN0b3I0fHxpLmlzVGV4dHVyZXx8aS5pc1F1YXRlcm5pb24pP2kuY2xvbmUoKTpBcnJheS5pc0FycmF5KGkpP2kuc2xpY2UoKTppfX1yZXR1cm4gZX1mdW5jdGlvbiBnc3QodCl7Y29uc3QgZT17fTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7Y29uc3Qgbz1mc3QodFtuXSk7Zm9yKGNvbnN0IHQgaW4gbyllW3RdPW9bdF19cmV0dXJuIGV9Y29uc3QgaHN0PXtjbG9uZTpmc3QsbWVyZ2U6Z3N0fTtjbGFzcyBic3QgZXh0ZW5kcyBPcnR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYWRlck1hdGVyaWFsIix0aGlzLmRlZmluZXM9e30sdGhpcy51bmlmb3Jtcz17fSx0aGlzLnZlcnRleFNoYWRlcj0idm9pZCBtYWluKCkge1xuXHRnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG59Iix0aGlzLmZyYWdtZW50U2hhZGVyPSJ2b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDEuMCwgMC4wLCAwLjAsIDEuMCApO1xufSIsdGhpcy5saW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMubGlnaHRzPSExLHRoaXMuY2xpcHBpbmc9ITEsdGhpcy5leHRlbnNpb25zPXtkZXJpdmF0aXZlczohMSxmcmFnRGVwdGg6ITEsZHJhd0J1ZmZlcnM6ITEsc2hhZGVyVGV4dHVyZUxPRDohMX0sdGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzPXtjb2xvcjpbMSwxLDFdLHV2OlswLDBdLHV2MjpbMCwwXX0sdGhpcy5pbmRleDBBdHRyaWJ1dGVOYW1lPXZvaWQgMCx0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSx0aGlzLmdsc2xWZXJzaW9uPW51bGwsdm9pZCAwIT09dCYmKHZvaWQgMCE9PXQuYXR0cmlidXRlcyYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXModCkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyLHRoaXMudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyLHRoaXMudW5pZm9ybXM9ZnN0KHQudW5pZm9ybXMpLHRoaXMuZGVmaW5lcz1PYmplY3QuYXNzaWduKHt9LHQuZGVmaW5lcyksdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy5saWdodHM9dC5saWdodHMsdGhpcy5jbGlwcGluZz10LmNsaXBwaW5nLHRoaXMuZXh0ZW5zaW9ucz1PYmplY3QuYXNzaWduKHt9LHQuZXh0ZW5zaW9ucyksdGhpcy5nbHNsVmVyc2lvbj10Lmdsc2xWZXJzaW9uLHRoaXN9dG9KU09OKHQpe2NvbnN0IGU9c3VwZXIudG9KU09OKHQpO2UuZ2xzbFZlcnNpb249dGhpcy5nbHNsVmVyc2lvbixlLnVuaWZvcm1zPXt9O2Zvcihjb25zdCBuIGluIHRoaXMudW5pZm9ybXMpe2NvbnN0IG89dGhpcy51bmlmb3Jtc1tuXS52YWx1ZTtlLnVuaWZvcm1zW25dPW8mJm8uaXNUZXh0dXJlP3t0eXBlOiJ0Iix2YWx1ZTpvLnRvSlNPTih0KS51dWlkfTpvJiZvLmlzQ29sb3I/e3R5cGU6ImMiLHZhbHVlOm8uZ2V0SGV4KCl9Om8mJm8uaXNWZWN0b3IyP3t0eXBlOiJ2MiIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNWZWN0b3IzP3t0eXBlOiJ2MyIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNWZWN0b3I0P3t0eXBlOiJ2NCIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNNYXRyaXgzP3t0eXBlOiJtMyIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNNYXRyaXg0P3t0eXBlOiJtNCIsdmFsdWU6by50b0FycmF5KCl9Ont2YWx1ZTpvfX1PYmplY3Qua2V5cyh0aGlzLmRlZmluZXMpLmxlbmd0aD4wJiYoZS5kZWZpbmVzPXRoaXMuZGVmaW5lcyksZS52ZXJ0ZXhTaGFkZXI9dGhpcy52ZXJ0ZXhTaGFkZXIsZS5mcmFnbWVudFNoYWRlcj10aGlzLmZyYWdtZW50U2hhZGVyO2NvbnN0IG49e307Zm9yKGNvbnN0IHQgaW4gdGhpcy5leHRlbnNpb25zKSEwPT09dGhpcy5leHRlbnNpb25zW3RdJiYoblt0XT0hMCk7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmxlbmd0aD4wJiYoZS5leHRlbnNpb25zPW4pLGV9fWJzdC5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDtjbGFzcyB5c3QgZXh0ZW5kcyBwcnR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQ2FtZXJhIix0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZT1uZXcgQmF0LHRoaXMucHJvamVjdGlvbk1hdHJpeD1uZXcgQmF0LHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2U9bmV3IEJhdH1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHQubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLnByb2plY3Rpb25NYXRyaXguY29weSh0LnByb2plY3Rpb25NYXRyaXgpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0LnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKSx0aGlzfWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2NvbnN0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoLWVbOF0sLWVbOV0sLWVbMTBdKS5ub3JtYWxpemUoKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7c3VwZXIudXBkYXRlV29ybGRNYXRyaXgodCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX15c3QucHJvdG90eXBlLmlzQ2FtZXJhPSEwO2NsYXNzIF9zdCBleHRlbmRzIHlzdHtjb25zdHJ1Y3Rvcih0PTUwLGU9MSxuPS4xLG89MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiLHRoaXMuZm92PXQsdGhpcy56b29tPTEsdGhpcy5uZWFyPW4sdGhpcy5mYXI9byx0aGlzLmZvY3VzPTEwLHRoaXMuYXNwZWN0PWUsdGhpcy52aWV3PW51bGwsdGhpcy5maWxtR2F1Z2U9MzUsdGhpcy5maWxtT2Zmc2V0PTAsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5mb3Y9dC5mb3YsdGhpcy56b29tPXQuem9vbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzLmFzcGVjdD10LmFzcGVjdCx0aGlzLnZpZXc9bnVsbD09PXQudmlldz9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzLmZpbG1HYXVnZT10LmZpbG1HYXVnZSx0aGlzLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0LHRoaXN9c2V0Rm9jYWxMZW5ndGgodCl7Y29uc3QgZT0uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90O3RoaXMuZm92PTIqWWl0Kk1hdGguYXRhbihlKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRGb2NhbExlbmd0aCgpe2NvbnN0IHQ9TWF0aC50YW4oLjUqV2l0KnRoaXMuZm92KTtyZXR1cm4uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90fWdldEVmZmVjdGl2ZUZPVigpe3JldHVybiAyKllpdCpNYXRoLmF0YW4oTWF0aC50YW4oLjUqV2l0KnRoaXMuZm92KS90aGlzLnpvb20pfWdldEZpbG1XaWR0aCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZSpNYXRoLm1pbih0aGlzLmFzcGVjdCwxKX1nZXRGaWxtSGVpZ2h0KCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlL01hdGgubWF4KHRoaXMuYXNwZWN0LDEpfXNldFZpZXdPZmZzZXQodCxlLG4sbyxpLGEpe3RoaXMuYXNwZWN0PXQvZSxudWxsPT09dGhpcy52aWV3JiYodGhpcy52aWV3PXtlbmFibGVkOiEwLGZ1bGxXaWR0aDoxLGZ1bGxIZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHdpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLnZpZXcuZW5hYmxlZD0hMCx0aGlzLnZpZXcuZnVsbFdpZHRoPXQsdGhpcy52aWV3LmZ1bGxIZWlnaHQ9ZSx0aGlzLnZpZXcub2Zmc2V0WD1uLHRoaXMudmlldy5vZmZzZXRZPW8sdGhpcy52aWV3LndpZHRoPWksdGhpcy52aWV3LmhlaWdodD1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNsZWFyVmlld09mZnNldCgpe251bGwhPT10aGlzLnZpZXcmJih0aGlzLnZpZXcuZW5hYmxlZD0hMSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9dXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpe2NvbnN0IHQ9dGhpcy5uZWFyO2xldCBlPXQqTWF0aC50YW4oLjUqV2l0KnRoaXMuZm92KS90aGlzLnpvb20sbj0yKmUsbz10aGlzLmFzcGVjdCpuLGk9LS41Km87Y29uc3QgYT10aGlzLnZpZXc7aWYobnVsbCE9PXRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe2NvbnN0IHQ9YS5mdWxsV2lkdGgscj1hLmZ1bGxIZWlnaHQ7aSs9YS5vZmZzZXRYKm8vdCxlLT1hLm9mZnNldFkqbi9yLG8qPWEud2lkdGgvdCxuKj1hLmhlaWdodC9yfWNvbnN0IHI9dGhpcy5maWxtT2Zmc2V0OzAhPT1yJiYoaSs9dCpyL3RoaXMuZ2V0RmlsbVdpZHRoKCkpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoaSxpK28sZSxlLW4sdCx0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2NvbnN0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC5mb3Y9dGhpcy5mb3YsZS5vYmplY3Quem9vbT10aGlzLnpvb20sZS5vYmplY3QubmVhcj10aGlzLm5lYXIsZS5vYmplY3QuZmFyPXRoaXMuZmFyLGUub2JqZWN0LmZvY3VzPXRoaXMuZm9jdXMsZS5vYmplY3QuYXNwZWN0PXRoaXMuYXNwZWN0LG51bGwhPT10aGlzLnZpZXcmJihlLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksZS5vYmplY3QuZmlsbUdhdWdlPXRoaXMuZmlsbUdhdWdlLGUub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0LGV9fV9zdC5wcm90b3R5cGUuaXNQZXJzcGVjdGl2ZUNhbWVyYT0hMDtjb25zdCBDc3Q9OTA7Y2xhc3MgTXN0IGV4dGVuZHMgcHJ0e2NvbnN0cnVjdG9yKHQsZSxuKXtpZihzdXBlcigpLHRoaXMudHlwZT0iQ3ViZUNhbWVyYSIsITAhPT1uLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkN1YmVDYW1lcmE6IFRoZSBjb25zdHJ1Y3RvciBub3cgZXhwZWN0cyBhbiBpbnN0YW5jZSBvZiBXZWJHTEN1YmVSZW5kZXJUYXJnZXQgYXMgdGhpcmQgcGFyYW1ldGVyLiIpO3RoaXMucmVuZGVyVGFyZ2V0PW47Y29uc3Qgbz1uZXcgX3N0KENzdCwxLHQsZSk7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwtMSwwKSxvLmxvb2tBdChuZXcgY2F0KDEsMCwwKSksdGhpcy5hZGQobyk7Y29uc3QgaT1uZXcgX3N0KENzdCwxLHQsZSk7aS5sYXllcnM9dGhpcy5sYXllcnMsaS51cC5zZXQoMCwtMSwwKSxpLmxvb2tBdChuZXcgY2F0KC0xLDAsMCkpLHRoaXMuYWRkKGkpO2NvbnN0IGE9bmV3IF9zdChDc3QsMSx0LGUpO2EubGF5ZXJzPXRoaXMubGF5ZXJzLGEudXAuc2V0KDAsMCwxKSxhLmxvb2tBdChuZXcgY2F0KDAsMSwwKSksdGhpcy5hZGQoYSk7Y29uc3Qgcj1uZXcgX3N0KENzdCwxLHQsZSk7ci5sYXllcnM9dGhpcy5sYXllcnMsci51cC5zZXQoMCwwLC0xKSxyLmxvb2tBdChuZXcgY2F0KDAsLTEsMCkpLHRoaXMuYWRkKHIpO2NvbnN0IHM9bmV3IF9zdChDc3QsMSx0LGUpO3MubGF5ZXJzPXRoaXMubGF5ZXJzLHMudXAuc2V0KDAsLTEsMCkscy5sb29rQXQobmV3IGNhdCgwLDAsMSkpLHRoaXMuYWRkKHMpO2NvbnN0IGw9bmV3IF9zdChDc3QsMSx0LGUpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3IGNhdCgwLDAsLTEpKSx0aGlzLmFkZChsKX11cGRhdGUodCxlKXtudWxsPT09dGhpcy5wYXJlbnQmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTtjb25zdCBuPXRoaXMucmVuZGVyVGFyZ2V0LFtvLGksYSxyLHMsbF09dGhpcy5jaGlsZHJlbixjPXQueHIuZW5hYmxlZCxkPXQuZ2V0UmVuZGVyVGFyZ2V0KCk7dC54ci5lbmFibGVkPSExO2NvbnN0IHA9bi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcztuLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPSExLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMCksdC5yZW5kZXIoZSxvKSx0LnNldFJlbmRlclRhcmdldChuLDEpLHQucmVuZGVyKGUsaSksdC5zZXRSZW5kZXJUYXJnZXQobiwyKSx0LnJlbmRlcihlLGEpLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMyksdC5yZW5kZXIoZSxyKSx0LnNldFJlbmRlclRhcmdldChuLDQpLHQucmVuZGVyKGUscyksbi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1wLHQuc2V0UmVuZGVyVGFyZ2V0KG4sNSksdC5yZW5kZXIoZSxsKSx0LnNldFJlbmRlclRhcmdldChkKSx0LnhyLmVuYWJsZWQ9Y319Y2xhc3MgdnN0IGV4dGVuZHMgb2F0e2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyxsLGMpe3N1cGVyKHQ9dm9pZCAwIT09dD90OltdLGU9dm9pZCAwIT09ZT9lOmRpdCxuLG8saSxhLHI9dm9pZCAwIT09cj9yOlBpdCxzLGwsYyksdGhpcy5mbGlwWT0hMX1nZXQgaW1hZ2VzKCl7cmV0dXJuIHRoaXMuaW1hZ2V9c2V0IGltYWdlcyh0KXt0aGlzLmltYWdlPXR9fXZzdC5wcm90b3R5cGUuaXNDdWJlVGV4dHVyZT0hMDtjbGFzcyB4c3QgZXh0ZW5kcyByYXR7Y29uc3RydWN0b3IodCxlLG4pe051bWJlci5pc0ludGVnZXIoZSkmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldDogY29uc3RydWN0b3Igc2lnbmF0dXJlIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKSIpLGU9biksc3VwZXIodCx0LGUpLHRoaXMudGV4dHVyZT1uZXcgdnN0KHZvaWQgMCwoZT1lfHx7fSkubWFwcGluZyxlLndyYXBTLGUud3JhcFQsZS5tYWdGaWx0ZXIsZS5taW5GaWx0ZXIsZS5mb3JtYXQsZS50eXBlLGUuYW5pc290cm9weSxlLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9dm9pZCAwIT09ZS5nZW5lcmF0ZU1pcG1hcHMmJmUuZ2VuZXJhdGVNaXBtYXBzLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9dm9pZCAwIT09ZS5taW5GaWx0ZXI/ZS5taW5GaWx0ZXI6Yml0LHRoaXMudGV4dHVyZS5fbmVlZHNGbGlwRW52TWFwPSExfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQsZSl7dGhpcy50ZXh0dXJlLnR5cGU9ZS50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9d2l0LHRoaXMudGV4dHVyZS5lbmNvZGluZz1lLmVuY29kaW5nLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLm1pbkZpbHRlcix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUubWFnRmlsdGVyO2NvbnN0IG49bmV3IHVzdCg1LDUsNSksbz1uZXcgYnN0KHtuYW1lOiJDdWJlbWFwRnJvbUVxdWlyZWN0Iix1bmlmb3Jtczpmc3Qoe3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19KSx2ZXJ0ZXhTaGFkZXI6IlxuXG5cdFx0XHRcdHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG5cblx0XHRcdFx0dmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHtcblxuXHRcdFx0XHRcdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0XHR2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXG5cdFx0XHRcdFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0XHRcdFx0XHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cblx0XHRcdFx0fVxuXHRcdFx0IixmcmFnbWVudFNoYWRlcjoiXG5cblx0XHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xuXG5cdFx0XHRcdHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG5cblx0XHRcdFx0I2luY2x1ZGUgPGNvbW1vbj5cblxuXHRcdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHR2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTtcblxuXHRcdFx0XHR9XG5cdFx0XHQiLHNpZGU6MSxibGVuZGluZzowfSk7by51bmlmb3Jtcy50RXF1aXJlY3QudmFsdWU9ZTtjb25zdCBpPW5ldyBwc3QobixvKSxhPWUubWluRmlsdGVyO3JldHVybiBlLm1pbkZpbHRlcj09PXlpdCYmKGUubWluRmlsdGVyPWJpdCksbmV3IE1zdCgxLDEwLHRoaXMpLnVwZGF0ZSh0LGkpLGUubWluRmlsdGVyPWEsaS5nZW9tZXRyeS5kaXNwb3NlKCksaS5tYXRlcmlhbC5kaXNwb3NlKCksdGhpc31jbGVhcih0LGUsbixvKXtjb25zdCBpPXQuZ2V0UmVuZGVyVGFyZ2V0KCk7Zm9yKGxldCBpPTA7aTw2O2krKyl0LnNldFJlbmRlclRhcmdldCh0aGlzLGkpLHQuY2xlYXIoZSxuLG8pO3Quc2V0UmVuZGVyVGFyZ2V0KGkpfX14c3QucHJvdG90eXBlLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PSEwO2NvbnN0IE9zdD1uZXcgY2F0LFBzdD1uZXcgY2F0LHdzdD1uZXcgJGl0O2NsYXNzIGtzdHtjb25zdHJ1Y3Rvcih0PW5ldyBjYXQoMSwwLDApLGU9MCl7dGhpcy5ub3JtYWw9dCx0aGlzLmNvbnN0YW50PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1lLHRoaXN9c2V0Q29tcG9uZW50cyh0LGUsbixvKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQsZSxuKSx0aGlzLmNvbnN0YW50PW8sdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LWUuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LGUsbil7Y29uc3Qgbz1Pc3Quc3ViVmVjdG9ycyhuLGUpLmNyb3NzKFBzdC5zdWJWZWN0b3JzKHQsZSkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KG8sdCksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQubm9ybWFsKSx0aGlzLmNvbnN0YW50PXQuY29uc3RhbnQsdGhpc31ub3JtYWxpemUoKXtjb25zdCB0PTEvdGhpcy5ub3JtYWwubGVuZ3RoKCk7cmV0dXJuIHRoaXMubm9ybWFsLm11bHRpcGx5U2NhbGFyKHQpLHRoaXMuY29uc3RhbnQqPXQsdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy5jb25zdGFudCo9LTEsdGhpcy5ub3JtYWwubmVnYXRlKCksdGhpc31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHRoaXMubm9ybWFsLmRvdCh0KSt0aGlzLmNvbnN0YW50fWRpc3RhbmNlVG9TcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuY2VudGVyKS10LnJhZGl1c31wcm9qZWN0UG9pbnQodCxlKXtyZXR1cm4gZS5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5kaXN0YW5jZVRvUG9pbnQodCkpLmFkZCh0KX1pbnRlcnNlY3RMaW5lKHQsZSl7Y29uc3Qgbj10LmRlbHRhKE9zdCksbz10aGlzLm5vcm1hbC5kb3Qobik7aWYoMD09PW8pcmV0dXJuIDA9PT10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KT9lLmNvcHkodC5zdGFydCk6bnVsbDtjb25zdCBpPS0odC5zdGFydC5kb3QodGhpcy5ub3JtYWwpK3RoaXMuY29uc3RhbnQpL287cmV0dXJuIGk8MHx8aT4xP251bGw6ZS5jb3B5KG4pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0LnN0YXJ0KX1pbnRlcnNlY3RzTGluZSh0KXtjb25zdCBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLG49dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiBlPDAmJm4+MHx8bjwwJiZlPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQsZSl7Y29uc3Qgbj1lfHx3c3QuZ2V0Tm9ybWFsTWF0cml4KHQpLG89dGhpcy5jb3BsYW5hclBvaW50KE9zdCkuYXBwbHlNYXRyaXg0KHQpLGk9dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKG4pLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLmNvbnN0YW50PS1vLmRvdChpKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jb25zdGFudC09dC5kb3QodGhpcy5ub3JtYWwpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpJiZ0LmNvbnN0YW50PT09dGhpcy5jb25zdGFudH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19a3N0LnByb3RvdHlwZS5pc1BsYW5lPSEwO2NvbnN0IFNzdD1uZXcgUmF0LERzdD1uZXcgY2F0O2NsYXNzIEVzdHtjb25zdHJ1Y3Rvcih0PW5ldyBrc3QsZT1uZXcga3N0LG49bmV3IGtzdCxvPW5ldyBrc3QsaT1uZXcga3N0LGE9bmV3IGtzdCl7dGhpcy5wbGFuZXM9W3QsZSxuLG8saSxhXX1zZXQodCxlLG4sbyxpLGEpe2NvbnN0IHI9dGhpcy5wbGFuZXM7cmV0dXJuIHJbMF0uY29weSh0KSxyWzFdLmNvcHkoZSksclsyXS5jb3B5KG4pLHJbM10uY29weShvKSxyWzRdLmNvcHkoaSkscls1XS5jb3B5KGEpLHRoaXN9Y29weSh0KXtjb25zdCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgbj0wO248NjtuKyspZVtuXS5jb3B5KHQucGxhbmVzW25dKTtyZXR1cm4gdGhpc31zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KXtjb25zdCBlPXRoaXMucGxhbmVzLG49dC5lbGVtZW50cyxvPW5bMF0saT1uWzFdLGE9blsyXSxyPW5bM10scz1uWzRdLGw9bls1XSxjPW5bNl0sZD1uWzddLHA9bls4XSxtPW5bOV0sdT1uWzEwXSxmPW5bMTFdLGc9blsxMl0saD1uWzEzXSxiPW5bMTRdLHk9blsxNV07cmV0dXJuIGVbMF0uc2V0Q29tcG9uZW50cyhyLW8sZC1zLGYtcCx5LWcpLm5vcm1hbGl6ZSgpLGVbMV0uc2V0Q29tcG9uZW50cyhyK28sZCtzLGYrcCx5K2cpLm5vcm1hbGl6ZSgpLGVbMl0uc2V0Q29tcG9uZW50cyhyK2ksZCtsLGYrbSx5K2gpLm5vcm1hbGl6ZSgpLGVbM10uc2V0Q29tcG9uZW50cyhyLWksZC1sLGYtbSx5LWgpLm5vcm1hbGl6ZSgpLGVbNF0uc2V0Q29tcG9uZW50cyhyLWEsZC1jLGYtdSx5LWIpLm5vcm1hbGl6ZSgpLGVbNV0uc2V0Q29tcG9uZW50cyhyK2EsZCtjLGYrdSx5K2IpLm5vcm1hbGl6ZSgpLHRoaXN9aW50ZXJzZWN0c09iamVjdCh0KXtjb25zdCBlPXQuZ2VvbWV0cnk7cmV0dXJuIG51bGw9PT1lLmJvdW5kaW5nU3BoZXJlJiZlLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLFNzdC5jb3B5KGUuYm91bmRpbmdTcGhlcmUpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoU3N0KX1pbnRlcnNlY3RzU3ByaXRlKHQpe3JldHVybiBTc3QuY2VudGVyLnNldCgwLDAsMCksU3N0LnJhZGl1cz0uNzA3MTA2NzgxMTg2NTQ3NixTc3QuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShTc3QpfWludGVyc2VjdHNTcGhlcmUodCl7Y29uc3QgZT10aGlzLnBsYW5lcyxuPXQuY2VudGVyLG89LXQucmFkaXVzO2ZvcihsZXQgdD0wO3Q8Njt0KyspaWYoZVt0XS5kaXN0YW5jZVRvUG9pbnQobik8bylyZXR1cm4hMTtyZXR1cm4hMH1pbnRlcnNlY3RzQm94KHQpe2NvbnN0IGU9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKyl7Y29uc3Qgbz1lW25dO2lmKERzdC54PW8ubm9ybWFsLng+MD90Lm1heC54OnQubWluLngsRHN0Lnk9by5ub3JtYWwueT4wP3QubWF4Lnk6dC5taW4ueSxEc3Quej1vLm5vcm1hbC56PjA/dC5tYXguejp0Lm1pbi56LG8uZGlzdGFuY2VUb1BvaW50KERzdCk8MClyZXR1cm4hMX1yZXR1cm4hMH1jb250YWluc1BvaW50KHQpe2NvbnN0IGU9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKylpZihlW25dLmRpc3RhbmNlVG9Qb2ludCh0KTwwKXJldHVybiExO3JldHVybiEwfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX1mdW5jdGlvbiBSc3QoKXtsZXQgdD1udWxsLGU9ITEsbj1udWxsLG89bnVsbDtmdW5jdGlvbiBpKGUsYSl7bihlLGEpLG89dC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaSl9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7ITAhPT1lJiZudWxsIT09biYmKG89dC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaSksZT0hMCl9LHN0b3A6ZnVuY3Rpb24oKXt0LmNhbmNlbEFuaW1hdGlvbkZyYW1lKG8pLGU9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24odCl7bj10fSxzZXRDb250ZXh0OmZ1bmN0aW9uKGUpe3Q9ZX19fWZ1bmN0aW9uIEFzdCh0LGUpe2NvbnN0IG49ZS5pc1dlYkdMMixvPW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYodD10LmRhdGEpLG8uZ2V0KHQpfSxyZW1vdmU6ZnVuY3Rpb24gYShlKXtlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihlPWUuZGF0YSk7Y29uc3Qgbj1vLmdldChlKTtuJiYodC5kZWxldGVCdWZmZXIobi5idWZmZXIpLG8uZGVsZXRlKGUpKX0sdXBkYXRlOmZ1bmN0aW9uIHIoZSxpKXtpZihlLmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnN0IHQ9by5nZXQoZSk7cmV0dXJuIHZvaWQoKCF0fHx0LnZlcnNpb248ZS52ZXJzaW9uKSYmby5zZXQoZSx7YnVmZmVyOmUuYnVmZmVyLHR5cGU6ZS50eXBlLGJ5dGVzUGVyRWxlbWVudDplLmVsZW1lbnRTaXplLHZlcnNpb246ZS52ZXJzaW9ufSkpfWUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGU9ZS5kYXRhKTtjb25zdCBhPW8uZ2V0KGUpO3ZvaWQgMD09PWE/by5zZXQoZSwoZnVuY3Rpb24gcihlLG8pe2NvbnN0IGk9ZS5hcnJheSxhPWUudXNhZ2Uscj10LmNyZWF0ZUJ1ZmZlcigpO3QuYmluZEJ1ZmZlcihvLHIpLHQuYnVmZmVyRGF0YShvLGksYSksZS5vblVwbG9hZENhbGxiYWNrKCk7bGV0IHM9NTEyNjtyZXR1cm4gaSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheT9zPTUxMjY6aSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheT9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQXR0cmlidXRlczogVW5zdXBwb3J0ZWQgZGF0YSBidWZmZXIgZm9ybWF0OiBGbG9hdDY0QXJyYXkuIik6aSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5P2UuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlP24/cz01MTMxOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVc2FnZSBvZiBGbG9hdDE2QnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIFdlYkdMMi4iKTpzPTUxMjM6aSBpbnN0YW5jZW9mIEludDE2QXJyYXk/cz01MTIyOmkgaW5zdGFuY2VvZiBVaW50MzJBcnJheT9zPTUxMjU6aSBpbnN0YW5jZW9mIEludDMyQXJyYXk/cz01MTI0OmkgaW5zdGFuY2VvZiBJbnQ4QXJyYXk/cz01MTIwOihpIGluc3RhbmNlb2YgVWludDhBcnJheXx8aSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSYmKHM9NTEyMSkse2J1ZmZlcjpyLHR5cGU6cyxieXRlc1BlckVsZW1lbnQ6aS5CWVRFU19QRVJfRUxFTUVOVCx2ZXJzaW9uOmUudmVyc2lvbn19KShlLGkpKTphLnZlcnNpb248ZS52ZXJzaW9uJiYoKGZ1bmN0aW9uIHMoZSxvLGkpe2NvbnN0IGE9by5hcnJheSxyPW8udXBkYXRlUmFuZ2U7dC5iaW5kQnVmZmVyKGksZSksLTE9PT1yLmNvdW50P3QuYnVmZmVyU3ViRGF0YShpLDAsYSk6KG4/dC5idWZmZXJTdWJEYXRhKGksci5vZmZzZXQqYS5CWVRFU19QRVJfRUxFTUVOVCxhLHIub2Zmc2V0LHIuY291bnQpOnQuYnVmZmVyU3ViRGF0YShpLHIub2Zmc2V0KmEuQllURVNfUEVSX0VMRU1FTlQsYS5zdWJhcnJheShyLm9mZnNldCxyLm9mZnNldCtyLmNvdW50KSksci5jb3VudD0tMSl9KShhLmJ1ZmZlcixlLGkpLGEudmVyc2lvbj1lLnZlcnNpb24pfX19Y2xhc3MgVHN0IGV4dGVuZHMgcXJ0e2NvbnN0cnVjdG9yKHQ9MSxlPTEsbj0xLG89MSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBsYW5lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSx3aWR0aFNlZ21lbnRzOm4saGVpZ2h0U2VnbWVudHM6b307Y29uc3QgaT10LzIsYT1lLzIscj1NYXRoLmZsb29yKG4pLHM9TWF0aC5mbG9vcihvKSxsPXIrMSxjPXMrMSxkPXQvcixwPWUvcyxtPVtdLHU9W10sZj1bXSxnPVtdO2ZvcihsZXQgdD0wO3Q8Yzt0Kyspe2NvbnN0IGU9dCpwLWE7Zm9yKGxldCBuPTA7bjxsO24rKyl1LnB1c2gobipkLWksLWUsMCksZi5wdXNoKDAsMCwxKSxnLnB1c2gobi9yKSxnLnB1c2goMS10L3MpfWZvcihsZXQgdD0wO3Q8czt0KyspZm9yKGxldCBlPTA7ZTxyO2UrKyl7Y29uc3Qgbj1lK2wqKHQrMSksbz1lKzErbCoodCsxKSxpPWUrMStsKnQ7bS5wdXNoKGUrbCp0LG4saSksbS5wdXNoKG4sbyxpKX10aGlzLnNldEluZGV4KG0pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEZydCh1LDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgRnJ0KGYsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEZydChnLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBUc3QodC53aWR0aCx0LmhlaWdodCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyl9fWNvbnN0IE5zdD17YWxwaGFtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0ZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdlV2ICkuZztcbiNlbmRpZiIsYWxwaGFtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDtcbiNlbmRpZiIsYWxwaGF0ZXN0X2ZyYWdtZW50OiIjaWZkZWYgQUxQSEFURVNUXG5cdGlmICggZGlmZnVzZUNvbG9yLmEgPCBBTFBIQVRFU1QgKSBkaXNjYXJkO1xuI2VuZGlmIixhb21hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BT01BUFxuXHRmbG9hdCBhbWJpZW50T2NjbHVzaW9uID0gKCB0ZXh0dXJlMkQoIGFvTWFwLCB2VXYyICkuciAtIDEuMCApICogYW9NYXBJbnRlbnNpdHkgKyAxLjA7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBhbWJpZW50T2NjbHVzaW9uO1xuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEIClcblx0XHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciAqPSBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGRvdE5WLCBhbWJpZW50T2NjbHVzaW9uLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsYW9tYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BT01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhb01hcDtcblx0dW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTtcbiNlbmRpZiIsYmVnaW5fdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkID0gdmVjMyggcG9zaXRpb24gKTsiLGJlZ2lubm9ybWFsX3ZlcnRleDoidmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTtcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApO1xuI2VuZGlmIixic2RmczoidmVjMiBpbnRlZ3JhdGVTcGVjdWxhckJSREYoIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGNvbnN0IHZlYzQgYzAgPSB2ZWM0KCAtIDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAwLjAyMiApO1xuXHRjb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTtcblx0dmVjNCByID0gcm91Z2huZXNzICogYzAgKyBjMTtcblx0ZmxvYXQgYTAwNCA9IG1pbiggci54ICogci54LCBleHAyKCAtIDkuMjggKiBkb3ROViApICkgKiByLnggKyByLnk7XG5cdHJldHVybiB2ZWMyKCAtMS4wNCwgMS4wNCApICogYTAwNCArIHIuenc7XG59XG5mbG9hdCBwdW5jdHVhbExpZ2h0SW50ZW5zaXR5VG9JcnJhZGlhbmNlRmFjdG9yKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHtcbiNpZiBkZWZpbmVkICggUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyApXG5cdGZsb2F0IGRpc3RhbmNlRmFsbG9mZiA9IDEuMCAvIG1heCggcG93KCBsaWdodERpc3RhbmNlLCBkZWNheUV4cG9uZW50ICksIDAuMDEgKTtcblx0aWYoIGN1dG9mZkRpc3RhbmNlID4gMC4wICkge1xuXHRcdGRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xuXHR9XG5cdHJldHVybiBkaXN0YW5jZUZhbGxvZmY7XG4jZWxzZVxuXHRpZiggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgJiYgZGVjYXlFeHBvbmVudCA+IDAuMCApIHtcblx0XHRyZXR1cm4gcG93KCBzYXR1cmF0ZSggLWxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7XG5cdH1cblx0cmV0dXJuIDEuMDtcbiNlbmRpZlxufVxudmVjMyBCUkRGX0RpZmZ1c2VfTGFtYmVydCggY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IgKSB7XG5cdHJldHVybiBSRUNJUFJPQ0FMX1BJICogZGlmZnVzZUNvbG9yO1xufVxudmVjMyBGX1NjaGxpY2soIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIHZlYzMgZjkwLCBjb25zdCBpbiBmbG9hdCBkb3RWSCApIHtcblx0ZmxvYXQgZnJlc25lbCA9IGV4cDIoICggLTUuNTU0NzMgKiBkb3RWSCAtIDYuOTgzMTYgKSAqIGRvdFZIICk7XG5cdHJldHVybiAoIGY5MCAtIGYwICkgKiBmcmVzbmVsICsgZjA7XG59XG52ZWMzIEZfU2NobGlja19Sb3VnaG5lc3NEZXBlbmRlbnQoIGNvbnN0IGluIHZlYzMgRjAsIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGZyZXNuZWwgPSBleHAyKCAoIC01LjU1NDczICogZG90TlYgLSA2Ljk4MzE2ICkgKiBkb3ROViApO1xuXHR2ZWMzIEZyID0gbWF4KCB2ZWMzKCAxLjAgLSByb3VnaG5lc3MgKSwgRjAgKSAtIEYwO1xuXHRyZXR1cm4gRnIgKiBmcmVzbmVsICsgRjA7XG59XG5mbG9hdCBHX0dHWF9TbWl0aCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25zdCBpbiBmbG9hdCBkb3ROViApIHtcblx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xuXHRmbG9hdCBnbCA9IGRvdE5MICsgc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdGZsb2F0IGd2ID0gZG90TlYgKyBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0cmV0dXJuIDEuMCAvICggZ2wgKiBndiApO1xufVxuZmxvYXQgR19HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGd2ID0gZG90TkwgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0ZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xuXHRyZXR1cm4gMC41IC8gbWF4KCBndiArIGdsLCBFUFNJTE9OICk7XG59XG5mbG9hdCBEX0dHWCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGRlbm9tID0gcG93MiggZG90TkggKSAqICggYTIgLSAxLjAgKSArIDEuMDtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfR0dYKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGluY2lkZW50TGlnaHQsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIHZlYzMgZjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7XG5cdHZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24gKyB2aWV3RGlyICk7XG5cdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RMSCA9IHNhdHVyYXRlKCBkb3QoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBmMCwgZjkwLCBkb3RMSCApO1xuXHRmbG9hdCBHID0gR19HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XG5cdGZsb2F0IEQgPSBEX0dHWCggYWxwaGEsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBHICogRCApO1xufVxudmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGNvbnN0IGZsb2F0IExVVF9TSVpFID0gNjQuMDtcblx0Y29uc3QgZmxvYXQgTFVUX1NDQUxFID0gKCBMVVRfU0laRSAtIDEuMCApIC8gTFVUX1NJWkU7XG5cdGNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggTiwgViApICk7XG5cdHZlYzIgdXYgPSB2ZWMyKCByb3VnaG5lc3MsIHNxcnQoIDEuMCAtIGRvdE5WICkgKTtcblx0dXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xuXHRyZXR1cm4gdXY7XG59XG5mbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtcblx0ZmxvYXQgbCA9IGxlbmd0aCggZiApO1xuXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAgKSwgMC4wICk7XG59XG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcblx0ZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7XG5cdGZsb2F0IHkgPSBhYnMoIHggKTtcblx0ZmxvYXQgYSA9IDAuODU0Mzk4NSArICggMC40OTY1MTU1ICsgMC4wMTQ1MjA2ICogeSApICogeTtcblx0ZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTtcblx0ZmxvYXQgdiA9IGEgLyBiO1xuXHRmbG9hdCB0aGV0YV9zaW50aGV0YSA9ICggeCA+IDAuMCApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCBtYXgoIDEuMCAtIHggKiB4LCAxZS03ICkgKSAtIHY7XG5cdHJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTtcbn1cbnZlYzMgTFRDX0V2YWx1YXRlKCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gdmVjMyBQLCBjb25zdCBpbiBtYXQzIG1JbnYsIGNvbnN0IGluIHZlYzMgcmVjdENvb3Jkc1sgNCBdICkge1xuXHR2ZWMzIHYxID0gcmVjdENvb3Jkc1sgMSBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIGxpZ2h0Tm9ybWFsID0gY3Jvc3MoIHYxLCB2MiApO1xuXHRpZiggZG90KCBsaWdodE5vcm1hbCwgUCAtIHJlY3RDb29yZHNbIDAgXSApIDwgMC4wICkgcmV0dXJuIHZlYzMoIDAuMCApO1xuXHR2ZWMzIFQxLCBUMjtcblx0VDEgPSBub3JtYWxpemUoIFYgLSBOICogZG90KCBWLCBOICkgKTtcblx0VDIgPSAtIGNyb3NzKCBOLCBUMSApO1xuXHRtYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApO1xuXHR2ZWMzIGNvb3Jkc1sgNCBdO1xuXHRjb29yZHNbIDAgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMCBdIC0gUCApO1xuXHRjb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApO1xuXHRjb29yZHNbIDIgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMiBdIC0gUCApO1xuXHRjb29yZHNbIDMgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMyBdIC0gUCApO1xuXHRjb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTtcblx0Y29vcmRzWyAxIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMSBdICk7XG5cdGNvb3Jkc1sgMiBdID0gbm9ybWFsaXplKCBjb29yZHNbIDIgXSApO1xuXHRjb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTtcblx0dmVjMyB2ZWN0b3JGb3JtRmFjdG9yID0gdmVjMyggMC4wICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDAgXSwgY29vcmRzWyAxIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAyIF0sIGNvb3Jkc1sgMyBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDMgXSwgY29vcmRzWyAwIF0gKTtcblx0ZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7XG5cdHJldHVybiB2ZWMzKCByZXN1bHQgKTtcbn1cbnZlYzMgQlJERl9TcGVjdWxhcl9HR1hfRW52aXJvbm1lbnQoIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdHZlYzIgYnJkZiA9IGludGVncmF0ZVNwZWN1bGFyQlJERiggZG90TlYsIHJvdWdobmVzcyApO1xuXHRyZXR1cm4gc3BlY3VsYXJDb2xvciAqIGJyZGYueCArIGJyZGYueTtcbn1cbnZvaWQgQlJERl9TcGVjdWxhcl9NdWx0aXNjYXR0ZXJpbmdfRW52aXJvbm1lbnQoIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBpbm91dCB2ZWMzIHNpbmdsZVNjYXR0ZXIsIGlub3V0IHZlYzMgbXVsdGlTY2F0dGVyICkge1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdHZlYzMgRiA9IEZfU2NobGlja19Sb3VnaG5lc3NEZXBlbmRlbnQoIHNwZWN1bGFyQ29sb3IsIGRvdE5WLCByb3VnaG5lc3MgKTtcblx0dmVjMiBicmRmID0gaW50ZWdyYXRlU3BlY3VsYXJCUkRGKCBkb3ROViwgcm91Z2huZXNzICk7XG5cdHZlYzMgRnNzRXNzID0gRiAqIGJyZGYueCArIGJyZGYueTtcblx0ZmxvYXQgRXNzID0gYnJkZi54ICsgYnJkZi55O1xuXHRmbG9hdCBFbXMgPSAxLjAgLSBFc3M7XG5cdHZlYzMgRmF2ZyA9IHNwZWN1bGFyQ29sb3IgKyAoIDEuMCAtIHNwZWN1bGFyQ29sb3IgKSAqIDAuMDQ3NjE5O1x0dmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7XG5cdHNpbmdsZVNjYXR0ZXIgKz0gRnNzRXNzO1xuXHRtdWx0aVNjYXR0ZXIgKz0gRm1zICogRW1zO1xufVxuZmxvYXQgR19CbGlublBob25nX0ltcGxpY2l0KCApIHtcblx0cmV0dXJuIDAuMjU7XG59XG5mbG9hdCBEX0JsaW5uUGhvbmcoIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcywgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7XG5cdHJldHVybiBSRUNJUFJPQ0FMX1BJICogKCBzaGluaW5lc3MgKiAwLjUgKyAxLjAgKSAqIHBvdyggZG90TkgsIHNoaW5pbmVzcyApO1xufVxudmVjMyBCUkRGX1NwZWN1bGFyX0JsaW5uUGhvbmcoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgaW5jaWRlbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MgKSB7XG5cdHZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24gKyBnZW9tZXRyeS52aWV3RGlyICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90TEggPSBzYXR1cmF0ZSggZG90KCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiwgaGFsZkRpciApICk7XG5cdHZlYzMgRiA9IEZfU2NobGljayggc3BlY3VsYXJDb2xvciwgdmVjMyggMS4wICksIGRvdExIICk7XG5cdGZsb2F0IEcgPSBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICk7XG5cdGZsb2F0IEQgPSBEX0JsaW5uUGhvbmcoIHNoaW5pbmVzcywgZG90TkggKTtcblx0cmV0dXJuIEYgKiAoIEcgKiBEICk7XG59XG5mbG9hdCBHR1hSb3VnaG5lc3NUb0JsaW5uRXhwb25lbnQoIGNvbnN0IGluIGZsb2F0IGdneFJvdWdobmVzcyApIHtcblx0cmV0dXJuICggMi4wIC8gcG93MiggZ2d4Um91Z2huZXNzICsgMC4wMDAxICkgLSAyLjAgKTtcbn1cbmZsb2F0IEJsaW5uRXhwb25lbnRUb0dHWFJvdWdobmVzcyggY29uc3QgaW4gZmxvYXQgYmxpbm5FeHBvbmVudCApIHtcblx0cmV0dXJuIHNxcnQoIDIuMCAvICggYmxpbm5FeHBvbmVudCArIDIuMCApICk7XG59XG4jaWYgZGVmaW5lZCggVVNFX1NIRUVOIClcbmZsb2F0IERfQ2hhcmxpZShmbG9hdCByb3VnaG5lc3MsIGZsb2F0IE5vSCkge1xuXHRmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIHJvdWdobmVzcztcblx0ZmxvYXQgY29zMmggPSBOb0ggKiBOb0g7XG5cdGZsb2F0IHNpbjJoID0gbWF4KDEuMCAtIGNvczJoLCAwLjAwNzgxMjUpO1x0cmV0dXJuICgyLjAgKyBpbnZBbHBoYSkgKiBwb3coc2luMmgsIGludkFscGhhICogMC41KSAvICgyLjAgKiBQSSk7XG59XG5mbG9hdCBWX05ldWJlbHQoZmxvYXQgTm9WLCBmbG9hdCBOb0wpIHtcblx0cmV0dXJuIHNhdHVyYXRlKDEuMCAvICg0LjAgKiAoTm9MICsgTm9WIC0gTm9MICogTm9WKSkpO1xufVxudmVjMyBCUkRGX1NwZWN1bGFyX1NoZWVuKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIHZlYzMgTCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgdmVjMyBzcGVjdWxhckNvbG9yICkge1xuXHR2ZWMzIE4gPSBnZW9tZXRyeS5ub3JtYWw7XG5cdHZlYzMgViA9IGdlb21ldHJ5LnZpZXdEaXI7XG5cdHZlYzMgSCA9IG5vcm1hbGl6ZSggViArIEwgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBOLCBIICkgKTtcblx0cmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBEX0NoYXJsaWUoIHJvdWdobmVzcywgZG90TkggKSAqIFZfTmV1YmVsdCggZG90KE4sIFYpLCBkb3QoTiwgTCkgKTtcbn1cbiNlbmRpZiIsYnVtcG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0JVTVBNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtcblx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XG5cdHZlYzIgZEhkeHlfZndkKCkge1xuXHRcdHZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcblx0XHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XG5cdFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xuXHRcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsO1xuXHRcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xuXHRcdHJldHVybiB2ZWMyKCBkQngsIGRCeSApO1xuXHR9XG5cdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHksIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApO1xuXHRcdHZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZOID0gc3VyZl9ub3JtO1xuXHRcdHZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTtcblx0XHR2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7XG5cdFx0ZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247XG5cdFx0dmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApO1xuXHR9XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZlYzQgcGxhbmU7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xuXHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRpZiAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgZGlzY2FyZDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjaWYgVU5JT05fQ0xJUFBJTkdfUExBTkVTIDwgTlVNX0NMSVBQSU5HX1BMQU5FU1xuXHRcdGJvb2wgY2xpcHBlZCA9IHRydWU7XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpIDwgTlVNX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcblx0XHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRcdGNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0XHRpZiAoIGNsaXBwZWQgKSBkaXNjYXJkO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjtcblx0dW5pZm9ybSB2ZWM0IGNsaXBwaW5nUGxhbmVzWyBOVU1fQ0xJUFBJTkdfUExBTkVTIF07XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uO1xuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dkNsaXBQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWYiLGNvbG9yX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0ZGlmZnVzZUNvbG9yICo9IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdGRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yO1xuI2VuZGlmIixjb2xvcl9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SIClcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dkNvbG9yID0gdmVjNCggMS4wICk7XG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXG5cdHZDb2xvciA9IHZlYzMoIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvciAqPSBjb2xvcjtcbiNlbmRpZlxuI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SXG5cdHZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7XG4jZW5kaWYiLGNvbW1vbjoiI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5M1xuI2RlZmluZSBQSTIgNi4yODMxODUzMDcxNzk1ODZcbiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDg5NjZcbiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NjE4Mzc5MDdcbiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NDMwOTE4OTUzNVxuI2RlZmluZSBFUFNJTE9OIDFlLTZcbiNpZm5kZWYgc2F0dXJhdGVcbiNkZWZpbmUgc2F0dXJhdGUoYSkgY2xhbXAoIGEsIDAuMCwgMS4wIClcbiNlbmRpZlxuI2RlZmluZSB3aGl0ZUNvbXBsZW1lbnQoYSkgKCAxLjAgLSBzYXR1cmF0ZSggYSApIClcbmZsb2F0IHBvdzIoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4Kng7IH1cbmZsb2F0IHBvdzMoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4KngqeDsgfVxuZmxvYXQgcG93NCggY29uc3QgaW4gZmxvYXQgeCApIHsgZmxvYXQgeDIgPSB4Kng7IHJldHVybiB4Mip4MjsgfVxuZmxvYXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAuMzMzMyApICk7IH1cbmhpZ2hwIGZsb2F0IHJhbmQoIGNvbnN0IGluIHZlYzIgdXYgKSB7XG5cdGNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1Mztcblx0aGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCggZHQsIFBJICk7XG5cdHJldHVybiBmcmFjdChzaW4oc24pICogYyk7XG59XG4jaWZkZWYgSElHSF9QUkVDSVNJT05cblx0ZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkgeyByZXR1cm4gbGVuZ3RoKCB2ICk7IH1cbiNlbHNlXG5cdGZsb2F0IG1heDMoIHZlYzMgdiApIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfVxuXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7XG5cdFx0ZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4MyggYWJzKCB2ICkgKTtcblx0XHRyZXR1cm4gbGVuZ3RoKCB2IC8gbWF4Q29tcG9uZW50ICkgKiBtYXhDb21wb25lbnQ7XG5cdH1cbiNlbmRpZlxuc3RydWN0IEluY2lkZW50TGlnaHQge1xuXHR2ZWMzIGNvbG9yO1xuXHR2ZWMzIGRpcmVjdGlvbjtcblx0Ym9vbCB2aXNpYmxlO1xufTtcbnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7XG5cdHZlYzMgZGlyZWN0RGlmZnVzZTtcblx0dmVjMyBkaXJlY3RTcGVjdWxhcjtcblx0dmVjMyBpbmRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgaW5kaXJlY3RTcGVjdWxhcjtcbn07XG5zdHJ1Y3QgR2VvbWV0cmljQ29udGV4dCB7XG5cdHZlYzMgcG9zaXRpb247XG5cdHZlYzMgbm9ybWFsO1xuXHR2ZWMzIHZpZXdEaXI7XG4jaWZkZWYgQ0xFQVJDT0FUXG5cdHZlYzMgY2xlYXJjb2F0Tm9ybWFsO1xuI2VuZGlmXG59O1xudmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHtcblx0cmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7XG59XG52ZWMzIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHtcblx0cmV0dXJuIG5vcm1hbGl6ZSggKCB2ZWM0KCBkaXIsIDAuMCApICogbWF0cml4ICkueHl6ICk7XG59XG52ZWMzIHByb2plY3RPblBsYW5lKGluIHZlYzMgcG9pbnQsIGluIHZlYzMgcG9pbnRPblBsYW5lLCBpbiB2ZWMzIHBsYW5lTm9ybWFsICkge1xuXHRmbG9hdCBkaXN0YW5jZSA9IGRvdCggcGxhbmVOb3JtYWwsIHBvaW50IC0gcG9pbnRPblBsYW5lICk7XG5cdHJldHVybiAtIGRpc3RhbmNlICogcGxhbmVOb3JtYWwgKyBwb2ludDtcbn1cbmZsb2F0IHNpZGVPZlBsYW5lKCBpbiB2ZWMzIHBvaW50LCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0cmV0dXJuIHNpZ24oIGRvdCggcG9pbnQgLSBwb2ludE9uUGxhbmUsIHBsYW5lTm9ybWFsICkgKTtcbn1cbnZlYzMgbGluZVBsYW5lSW50ZXJzZWN0KCBpbiB2ZWMzIHBvaW50T25MaW5lLCBpbiB2ZWMzIGxpbmVEaXJlY3Rpb24sIGluIHZlYzMgcG9pbnRPblBsYW5lLCBpbiB2ZWMzIHBsYW5lTm9ybWFsICkge1xuXHRyZXR1cm4gbGluZURpcmVjdGlvbiAqICggZG90KCBwbGFuZU5vcm1hbCwgcG9pbnRPblBsYW5lIC0gcG9pbnRPbkxpbmUgKSAvIGRvdCggcGxhbmVOb3JtYWwsIGxpbmVEaXJlY3Rpb24gKSApICsgcG9pbnRPbkxpbmU7XG59XG5tYXQzIHRyYW5zcG9zZU1hdDMoIGNvbnN0IGluIG1hdDMgbSApIHtcblx0bWF0MyB0bXA7XG5cdHRtcFsgMCBdID0gdmVjMyggbVsgMCBdLngsIG1bIDEgXS54LCBtWyAyIF0ueCApO1xuXHR0bXBbIDEgXSA9IHZlYzMoIG1bIDAgXS55LCBtWyAxIF0ueSwgbVsgMiBdLnkgKTtcblx0dG1wWyAyIF0gPSB2ZWMzKCBtWyAwIF0ueiwgbVsgMSBdLnosIG1bIDIgXS56ICk7XG5cdHJldHVybiB0bXA7XG59XG5mbG9hdCBsaW5lYXJUb1JlbGF0aXZlTHVtaW5hbmNlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkge1xuXHR2ZWMzIHdlaWdodHMgPSB2ZWMzKCAwLjIxMjYsIDAuNzE1MiwgMC4wNzIyICk7XG5cdHJldHVybiBkb3QoIHdlaWdodHMsIGNvbG9yLnJnYiApO1xufVxuYm9vbCBpc1BlcnNwZWN0aXZlTWF0cml4KCBtYXQ0IG0gKSB7XG5cdHJldHVybiBtWyAyIF1bIDMgXSA9PSAtIDEuMDtcbn1cbnZlYzIgZXF1aXJlY3RVdiggaW4gdmVjMyBkaXIgKSB7XG5cdGZsb2F0IHUgPSBhdGFuKCBkaXIueiwgZGlyLnggKSAqIFJFQ0lQUk9DQUxfUEkyICsgMC41O1xuXHRmbG9hdCB2ID0gYXNpbiggY2xhbXAoIGRpci55LCAtIDEuMCwgMS4wICkgKSAqIFJFQ0lQUk9DQUxfUEkgKyAwLjU7XG5cdHJldHVybiB2ZWMyKCB1LCB2ICk7XG59IixjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6IiNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWXG5cdCNkZWZpbmUgY3ViZVVWX21heE1pcExldmVsIDguMFxuXHQjZGVmaW5lIGN1YmVVVl9taW5NaXBMZXZlbCA0LjBcblx0I2RlZmluZSBjdWJlVVZfbWF4VGlsZVNpemUgMjU2LjBcblx0I2RlZmluZSBjdWJlVVZfbWluVGlsZVNpemUgMTYuMFxuXHRmbG9hdCBnZXRGYWNlKCB2ZWMzIGRpcmVjdGlvbiApIHtcblx0XHR2ZWMzIGFic0RpcmVjdGlvbiA9IGFicyggZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgZmFjZSA9IC0gMS4wO1xuXHRcdGlmICggYWJzRGlyZWN0aW9uLnggPiBhYnNEaXJlY3Rpb24ueiApIHtcblx0XHRcdGlmICggYWJzRGlyZWN0aW9uLnggPiBhYnNEaXJlY3Rpb24ueSApXG5cdFx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueCA+IDAuMCA/IDAuMCA6IDMuMDtcblx0XHRcdGVsc2Vcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIGFic0RpcmVjdGlvbi56ID4gYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnogPiAwLjAgPyAyLjAgOiA1LjA7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDtcblx0XHR9XG5cdFx0cmV0dXJuIGZhY2U7XG5cdH1cblx0dmVjMiBnZXRVViggdmVjMyBkaXJlY3Rpb24sIGZsb2F0IGZhY2UgKSB7XG5cdFx0dmVjMiB1djtcblx0XHRpZiAoIGZhY2UgPT0gMC4wICkge1xuXHRcdFx0dXYgPSB2ZWMyKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgLSBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApO1xuXHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xuXHRcdFx0dXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueiApO1xuXHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXHRcdFx0dXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApO1xuXHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXHRcdFx0dXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR1diA9IHZlYzIoIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueiApO1xuXHRcdH1cblx0XHRyZXR1cm4gMC41ICogKCB1diArIDEuMCApO1xuXHR9XG5cdHZlYzMgYmlsaW5lYXJDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBtaXBJbnQgKSB7XG5cdFx0ZmxvYXQgZmFjZSA9IGdldEZhY2UoIGRpcmVjdGlvbiApO1xuXHRcdGZsb2F0IGZpbHRlckludCA9IG1heCggY3ViZVVWX21pbk1pcExldmVsIC0gbWlwSW50LCAwLjAgKTtcblx0XHRtaXBJbnQgPSBtYXgoIG1pcEludCwgY3ViZVVWX21pbk1pcExldmVsICk7XG5cdFx0ZmxvYXQgZmFjZVNpemUgPSBleHAyKCBtaXBJbnQgKTtcblx0XHRmbG9hdCB0ZXhlbFNpemUgPSAxLjAgLyAoIDMuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZSApO1xuXHRcdHZlYzIgdXYgPSBnZXRVViggZGlyZWN0aW9uLCBmYWNlICkgKiAoIGZhY2VTaXplIC0gMS4wICk7XG5cdFx0dmVjMiBmID0gZnJhY3QoIHV2ICk7XG5cdFx0dXYgKz0gMC41IC0gZjtcblx0XHRpZiAoIGZhY2UgPiAyLjAgKSB7XG5cdFx0XHR1di55ICs9IGZhY2VTaXplO1xuXHRcdFx0ZmFjZSAtPSAzLjA7XG5cdFx0fVxuXHRcdHV2LnggKz0gZmFjZSAqIGZhY2VTaXplO1xuXHRcdGlmICggbWlwSW50IDwgY3ViZVVWX21heE1pcExldmVsICkge1xuXHRcdFx0dXYueSArPSAyLjAgKiBjdWJlVVZfbWF4VGlsZVNpemU7XG5cdFx0fVxuXHRcdHV2LnkgKz0gZmlsdGVySW50ICogMi4wICogY3ViZVVWX21pblRpbGVTaXplO1xuXHRcdHV2LnggKz0gMy4wICogbWF4KCAwLjAsIGN1YmVVVl9tYXhUaWxlU2l6ZSAtIDIuMCAqIGZhY2VTaXplICk7XG5cdFx0dXYgKj0gdGV4ZWxTaXplO1xuXHRcdHZlYzMgdGwgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCB0ZXh0dXJlMkQoIGVudk1hcCwgdXYgKSApLnJnYjtcblx0XHR1di54ICs9IHRleGVsU2l6ZTtcblx0XHR2ZWMzIHRyID0gZW52TWFwVGV4ZWxUb0xpbmVhciggdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkgKS5yZ2I7XG5cdFx0dXYueSArPSB0ZXhlbFNpemU7XG5cdFx0dmVjMyBiciA9IGVudk1hcFRleGVsVG9MaW5lYXIoIHRleHR1cmUyRCggZW52TWFwLCB1diApICkucmdiO1xuXHRcdHV2LnggLT0gdGV4ZWxTaXplO1xuXHRcdHZlYzMgYmwgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCB0ZXh0dXJlMkQoIGVudk1hcCwgdXYgKSApLnJnYjtcblx0XHR2ZWMzIHRtID0gbWl4KCB0bCwgdHIsIGYueCApO1xuXHRcdHZlYzMgYm0gPSBtaXgoIGJsLCBiciwgZi54ICk7XG5cdFx0cmV0dXJuIG1peCggdG0sIGJtLCBmLnkgKTtcblx0fVxuXHQjZGVmaW5lIHIwIDEuMFxuXHQjZGVmaW5lIHYwIDAuMzM5XG5cdCNkZWZpbmUgbTAgLSAyLjBcblx0I2RlZmluZSByMSAwLjhcblx0I2RlZmluZSB2MSAwLjI3NlxuXHQjZGVmaW5lIG0xIC0gMS4wXG5cdCNkZWZpbmUgcjQgMC40XG5cdCNkZWZpbmUgdjQgMC4wNDZcblx0I2RlZmluZSBtNCAyLjBcblx0I2RlZmluZSByNSAwLjMwNVxuXHQjZGVmaW5lIHY1IDAuMDE2XG5cdCNkZWZpbmUgbTUgMy4wXG5cdCNkZWZpbmUgcjYgMC4yMVxuXHQjZGVmaW5lIHY2IDAuMDAzOFxuXHQjZGVmaW5lIG02IDQuMFxuXHRmbG9hdCByb3VnaG5lc3NUb01pcCggZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdGZsb2F0IG1pcCA9IDAuMDtcblx0XHRpZiAoIHJvdWdobmVzcyA+PSByMSApIHtcblx0XHRcdG1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDtcblx0XHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7XG5cdFx0XHRtaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7XG5cdFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkge1xuXHRcdFx0bWlwID0gKCByNCAtIHJvdWdobmVzcyApICogKCBtNSAtIG00ICkgLyAoIHI0IC0gcjUgKSArIG00O1xuXHRcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNiApIHtcblx0XHRcdG1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7XHRcdH1cblx0XHRyZXR1cm4gbWlwO1xuXHR9XG5cdHZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHtcblx0XHRmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7XG5cdFx0ZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTtcblx0XHRmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7XG5cdFx0dmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApO1xuXHRcdGlmICggbWlwRiA9PSAwLjAgKSB7XG5cdFx0XHRyZXR1cm4gdmVjNCggY29sb3IwLCAxLjAgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApO1xuXHRcdFx0cmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7XG5cdFx0fVxuXHR9XG4jZW5kaWYiLGRlZmF1bHRub3JtYWxfdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsO1xuI2lmZGVmIFVTRV9JTlNUQU5DSU5HXG5cdG1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7XG5cdHRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzMoIGRvdCggbVsgMCBdLCBtWyAwIF0gKSwgZG90KCBtWyAxIF0sIG1bIDEgXSApLCBkb3QoIG1bIDIgXSwgbVsgMiBdICkgKTtcblx0dHJhbnNmb3JtZWROb3JtYWwgPSBtICogdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7XG4jaWZkZWYgRkxJUF9TSURFRFxuXHR0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIHRyYW5zZm9ybWVkVGFuZ2VudCA9ICggbW9kZWxWaWV3TWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBGTElQX1NJREVEXG5cdFx0dHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzO1xuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfdmVydGV4OiIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHR0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxuXHR2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTtcblx0ZW1pc3NpdmVDb2xvci5yZ2IgPSBlbWlzc2l2ZU1hcFRleGVsVG9MaW5lYXIoIGVtaXNzaXZlQ29sb3IgKS5yZ2I7XG5cdHRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjtcbiNlbmRpZiIsZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZU1hcDtcbiNlbmRpZiIsZW5jb2RpbmdzX2ZyYWdtZW50OiJnbF9GcmFnQ29sb3IgPSBsaW5lYXJUb091dHB1dFRleGVsKCBnbF9GcmFnQ29sb3IgKTsiLGVuY29kaW5nc19wYXJzX2ZyYWdtZW50OiJcbnZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2YWx1ZTtcbn1cbnZlYzQgR2FtbWFUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgZ2FtbWFGYWN0b3IgKSB7XG5cdHJldHVybiB2ZWM0KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggZ2FtbWFGYWN0b3IgKSApLCB2YWx1ZS5hICk7XG59XG52ZWM0IExpbmVhclRvR2FtbWEoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IGdhbW1hRmFjdG9yICkge1xuXHRyZXR1cm4gdmVjNCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIDEuMCAvIGdhbW1hRmFjdG9yICkgKSwgdmFsdWUuYSApO1xufVxudmVjNCBzUkdCVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2ZWM0KCBtaXgoIHBvdyggdmFsdWUucmdiICogMC45NDc4NjcyOTg2ICsgdmVjMyggMC4wNTIxMzI3MDE0ICksIHZlYzMoIDIuNCApICksIHZhbHVlLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyggbGVzc1RoYW5FcXVhbCggdmFsdWUucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHZhbHVlLmEgKTtcbn1cbnZlYzQgTGluZWFyVG9zUkdCKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7XG59XG52ZWM0IFJHQkVUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAqIGV4cDIoIHZhbHVlLmEgKiAyNTUuMCAtIDEyOC4wICksIDEuMCApO1xufVxudmVjNCBMaW5lYXJUb1JHQkUoIGluIHZlYzQgdmFsdWUgKSB7XG5cdGZsb2F0IG1heENvbXBvbmVudCA9IG1heCggbWF4KCB2YWx1ZS5yLCB2YWx1ZS5nICksIHZhbHVlLmIgKTtcblx0ZmxvYXQgZkV4cCA9IGNsYW1wKCBjZWlsKCBsb2cyKCBtYXhDb21wb25lbnQgKSApLCAtMTI4LjAsIDEyNy4wICk7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgLyBleHAyKCBmRXhwICksICggZkV4cCArIDEyOC4wICkgLyAyNTUuMCApO1xufVxudmVjNCBSR0JNVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogdmFsdWUuYSAqIG1heFJhbmdlLCAxLjAgKTtcbn1cbnZlYzQgTGluZWFyVG9SR0JNKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBtYXhSYW5nZSApIHtcblx0ZmxvYXQgbWF4UkdCID0gbWF4KCB2YWx1ZS5yLCBtYXgoIHZhbHVlLmcsIHZhbHVlLmIgKSApO1xuXHRmbG9hdCBNID0gY2xhbXAoIG1heFJHQiAvIG1heFJhbmdlLCAwLjAsIDEuMCApO1xuXHRNID0gY2VpbCggTSAqIDI1NS4wICkgLyAyNTUuMDtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAvICggTSAqIG1heFJhbmdlICksIE0gKTtcbn1cbnZlYzQgUkdCRFRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBtYXhSYW5nZSApIHtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAqICggKCBtYXhSYW5nZSAvIDI1NS4wICkgLyB2YWx1ZS5hICksIDEuMCApO1xufVxudmVjNCBMaW5lYXJUb1JHQkQoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRmbG9hdCBtYXhSR0IgPSBtYXgoIHZhbHVlLnIsIG1heCggdmFsdWUuZywgdmFsdWUuYiApICk7XG5cdGZsb2F0IEQgPSBtYXgoIG1heFJhbmdlIC8gbWF4UkdCLCAxLjAgKTtcblx0RCA9IGNsYW1wKCBmbG9vciggRCApIC8gMjU1LjAsIDAuMCwgMS4wICk7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgKiAoIEQgKiAoIDI1NS4wIC8gbWF4UmFuZ2UgKSApLCBEICk7XG59XG5jb25zdCBtYXQzIGNMb2dMdXZNID0gbWF0MyggMC4yMjA5LCAwLjMzOTAsIDAuNDE4NCwgMC4xMTM4LCAwLjY3ODAsIDAuNzMxOSwgMC4wMTAyLCAwLjExMzAsIDAuMjk2OSApO1xudmVjNCBMaW5lYXJUb0xvZ0x1diggaW4gdmVjNCB2YWx1ZSApIHtcblx0dmVjMyBYcF9ZX1hZWnAgPSBjTG9nTHV2TSAqIHZhbHVlLnJnYjtcblx0WHBfWV9YWVpwID0gbWF4KCBYcF9ZX1hZWnAsIHZlYzMoIDFlLTYsIDFlLTYsIDFlLTYgKSApO1xuXHR2ZWM0IHZSZXN1bHQ7XG5cdHZSZXN1bHQueHkgPSBYcF9ZX1hZWnAueHkgLyBYcF9ZX1hZWnAuejtcblx0ZmxvYXQgTGUgPSAyLjAgKiBsb2cyKFhwX1lfWFlacC55KSArIDEyNy4wO1xuXHR2UmVzdWx0LncgPSBmcmFjdCggTGUgKTtcblx0dlJlc3VsdC56ID0gKCBMZSAtICggZmxvb3IoIHZSZXN1bHQudyAqIDI1NS4wICkgKSAvIDI1NS4wICkgLyAyNTUuMDtcblx0cmV0dXJuIHZSZXN1bHQ7XG59XG5jb25zdCBtYXQzIGNMb2dMdXZJbnZlcnNlTSA9IG1hdDMoIDYuMDAxNCwgLTIuNzAwOCwgLTEuNzk5NiwgLTEuMzMyMCwgMy4xMDI5LCAtNS43NzIxLCAwLjMwMDgsIC0xLjA4ODIsIDUuNjI2OCApO1xudmVjNCBMb2dMdXZUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0ZmxvYXQgTGUgPSB2YWx1ZS56ICogMjU1LjAgKyB2YWx1ZS53O1xuXHR2ZWMzIFhwX1lfWFlacDtcblx0WHBfWV9YWVpwLnkgPSBleHAyKCAoIExlIC0gMTI3LjAgKSAvIDIuMCApO1xuXHRYcF9ZX1hZWnAueiA9IFhwX1lfWFlacC55IC8gdmFsdWUueTtcblx0WHBfWV9YWVpwLnggPSB2YWx1ZS54ICogWHBfWV9YWVpwLno7XG5cdHZlYzMgdlJHQiA9IGNMb2dMdXZJbnZlcnNlTSAqIFhwX1lfWFlacC5yZ2I7XG5cdHJldHVybiB2ZWM0KCBtYXgoIHZSR0IsIDAuMCApLCAxLjAgKTtcbn0iLGVudm1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmZGVmIEVOVl9XT1JMRFBPU1xuXHRcdHZlYzMgY2FtZXJhVG9GcmFnO1xuXHRcdGlmICggaXNPcnRob2dyYXBoaWMgKSB7XG5cdFx0XHRjYW1lcmFUb0ZyYWcgPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjYW1lcmFUb0ZyYWcgPSBub3JtYWxpemUoIHZXb3JsZFBvc2l0aW9uIC0gY2FtZXJhUG9zaXRpb24gKTtcblx0XHR9XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZlYzMgcmVmbGVjdFZlYyA9IHJlZnJhY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApO1xuXHRcdCNlbmRpZlxuXHQjZWxzZVxuXHRcdHZlYzMgcmVmbGVjdFZlYyA9IHZSZWZsZWN0O1xuXHQjZW5kaWZcblx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdHZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIDAuMCApO1xuXHQjZWxzZVxuXHRcdHZlYzQgZW52Q29sb3IgPSB2ZWM0KCAwLjAgKTtcblx0I2VuZGlmXG5cdCNpZm5kZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHRcdGVudkNvbG9yID0gZW52TWFwVGV4ZWxUb0xpbmVhciggZW52Q29sb3IgKTtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFlcblx0XHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBvdXRnb2luZ0xpZ2h0ICogZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19NSVggKVxuXHRcdG91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfQUREIClcblx0XHRvdXRnb2luZ0xpZ2h0ICs9IGVudkNvbG9yLnh5eiAqIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHk7XG5cdCNlbmRpZlxuI2VuZGlmIixlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdHVuaWZvcm0gZmxvYXQgZW52TWFwSW50ZW5zaXR5O1xuXHR1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7XG5cdHVuaWZvcm0gaW50IG1heE1pcExldmVsO1xuXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0I2VuZGlmXG5cdFxuI2VuZGlmIixlbnZtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0dW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7XG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHxkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHRcblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQIClcblx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRlJBQ1RJT05cblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2VuZGlmXG5cdHZlYzMgZ2V0TGlnaHRQcm9iZUluZGlyZWN0SXJyYWRpYW5jZSggY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gaW50IG1heE1JUExldmVsICkge1xuXHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBnZW9tZXRyeS5ub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdFx0dmVjMyBxdWVyeVZlYyA9IHZlYzMoIGZsaXBFbnZNYXAgKiB3b3JsZE5vcm1hbC54LCB3b3JsZE5vcm1hbC55eiApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVMb2RFWFQoIGVudk1hcCwgcXVlcnlWZWMsIGZsb2F0KCBtYXhNSVBMZXZlbCApICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgcXVlcnlWZWMsIGZsb2F0KCBtYXhNSVBMZXZlbCApICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgd29ybGROb3JtYWwsIDEuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdmVjNCggMC4wICk7XG5cdFx0I2VuZGlmXG5cdFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHR9XG5cdGZsb2F0IGdldFNwZWN1bGFyTUlQTGV2ZWwoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gaW50IG1heE1JUExldmVsICkge1xuXHRcdGZsb2F0IG1heE1JUExldmVsU2NhbGFyID0gZmxvYXQoIG1heE1JUExldmVsICk7XG5cdFx0ZmxvYXQgc2lnbWEgPSBQSSAqIHJvdWdobmVzcyAqIHJvdWdobmVzcyAvICggMS4wICsgcm91Z2huZXNzICk7XG5cdFx0ZmxvYXQgZGVzaXJlZE1JUExldmVsID0gbWF4TUlQTGV2ZWxTY2FsYXIgKyBsb2cyKCBzaWdtYSApO1xuXHRcdHJldHVybiBjbGFtcCggZGVzaXJlZE1JUExldmVsLCAwLjAsIG1heE1JUExldmVsU2NhbGFyICk7XG5cdH1cblx0dmVjMyBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBpbnQgbWF4TUlQTGV2ZWwgKSB7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZlYzMgcmVmbGVjdFZlYyA9IHJlZmxlY3QoIC12aWV3RGlyLCBub3JtYWwgKTtcblx0XHRcdHJlZmxlY3RWZWMgPSBub3JtYWxpemUoIG1peCggcmVmbGVjdFZlYywgbm9ybWFsLCByb3VnaG5lc3MgKiByb3VnaG5lc3MpICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZlYzMgcmVmbGVjdFZlYyA9IHJlZnJhY3QoIC12aWV3RGlyLCBub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApO1xuXHRcdCNlbmRpZlxuXHRcdHJlZmxlY3RWZWMgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7XG5cdFx0ZmxvYXQgc3BlY3VsYXJNSVBMZXZlbCA9IGdldFNwZWN1bGFyTUlQTGV2ZWwoIHJvdWdobmVzcywgbWF4TUlQTGV2ZWwgKTtcblx0XHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdFx0dmVjMyBxdWVyeVJlZmxlY3RWZWMgPSB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICk7XG5cdFx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZUxvZEVYVCggZW52TWFwLCBxdWVyeVJlZmxlY3RWZWMsIHNwZWN1bGFyTUlQTGV2ZWwgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCBxdWVyeVJlZmxlY3RWZWMsIHNwZWN1bGFyTUlQTGV2ZWwgKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiID0gZW52TWFwVGV4ZWxUb0xpbmVhciggZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCByb3VnaG5lc3MgKTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHR9XG4jZW5kaWYiLGVudm1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xuXHQjZWxzZVxuXHRcdHZlYzMgY2FtZXJhVG9WZXJ0ZXg7XG5cdFx0aWYgKCBpc09ydGhvZ3JhcGhpYyApIHtcblx0XHRcdGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTtcblx0XHR9XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZSZWZsZWN0ID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWYiLGZvZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdGZvZ0RlcHRoID0gLSBtdlBvc2l0aW9uLno7XG4jZW5kaWYiLGZvZ19wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9GT0dcblx0dmFyeWluZyBmbG9hdCBmb2dEZXB0aDtcbiNlbmRpZiIsZm9nX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0ZPR1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0XHRmbG9hdCBmb2dGYWN0b3IgPSAxLjAgLSBleHAoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiBmb2dEZXB0aCAqIGZvZ0RlcHRoICk7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgZm9nRmFjdG9yID0gc21vb3Roc3RlcCggZm9nTmVhciwgZm9nRmFyLCBmb2dEZXB0aCApO1xuXHQjZW5kaWZcblx0Z2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZm9nQ29sb3IsIGZvZ0ZhY3RvciApO1xuI2VuZGlmIixmb2dfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9GT0dcblx0dW5pZm9ybSB2ZWMzIGZvZ0NvbG9yO1xuXHR2YXJ5aW5nIGZsb2F0IGZvZ0RlcHRoO1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dOZWFyO1xuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRmFyO1xuXHQjZW5kaWZcbiNlbmRpZiIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDtcbiNlbmRpZlxudmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkge1xuXHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApO1xuXHR2ZWMyIGNvb3JkID0gdmVjMiggZG90TkwgKiAwLjUgKyAwLjUsIDAuMCApO1xuXHQjaWZkZWYgVVNFX0dSQURJRU5UTUFQXG5cdFx0cmV0dXJuIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkucmdiO1xuXHQjZWxzZVxuXHRcdHJldHVybiAoIGNvb3JkLnggPCAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7XG5cdCNlbmRpZlxufSIsbGlnaHRtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBQSSAqIGxpZ2h0TWFwVGV4ZWxUb0xpbmVhciggbGlnaHRNYXBUZXhlbCApLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuI2VuZGlmIixsaWdodG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5O1xuI2VuZGlmIixsaWdodHNfbGFtYmVydF92ZXJ0ZXg6InZlYzMgZGlmZnVzZSA9IHZlYzMoIDEuMCApO1xuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gbXZQb3NpdGlvbi54eXo7XG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5nZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCAtbXZQb3NpdGlvbi54eXogKTtcbkdlb21ldHJpY0NvbnRleHQgYmFja0dlb21ldHJ5O1xuYmFja0dlb21ldHJ5LnBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247XG5iYWNrR2VvbWV0cnkubm9ybWFsID0gLWdlb21ldHJ5Lm5vcm1hbDtcbmJhY2tHZW9tZXRyeS52aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjtcbnZMaWdodEZyb250ID0gdmVjMyggMC4wICk7XG52SW5kaXJlY3RGcm9udCA9IHZlYzMoIDAuMCApO1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2TGlnaHRCYWNrID0gdmVjMyggMC4wICk7XG5cdHZJbmRpcmVjdEJhY2sgPSB2ZWMzKCAwLjAgKTtcbiNlbmRpZlxuSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDtcbmZsb2F0IGRvdE5MO1xudmVjMyBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG52SW5kaXJlY3RGcm9udCArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xudkluZGlyZWN0RnJvbnQgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5ICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZJbmRpcmVjdEJhY2sgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0dkluZGlyZWN0QmFjayArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgYmFja0dlb21ldHJ5ICk7XG4jZW5kaWZcbiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0UG9pbnREaXJlY3RMaWdodElycmFkaWFuY2UoIHBvaW50TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IFBJICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLWRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0U3BvdERpcmVjdExpZ2h0SXJyYWRpYW5jZSggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBQSSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdHZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC1kb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SXJyYWRpYW5jZSggZGlyZWN0aW9uYWxMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gUEkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjZW5kaWZcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgTlVNX0hFTUlfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHtcblx0XHR2SW5kaXJlY3RGcm9udCArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5ICk7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkluZGlyZWN0QmFjayArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGJhY2tHZW9tZXRyeSApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWYiLGxpZ2h0c19wYXJzX2JlZ2luOiJ1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdztcbnVuaWZvcm0gdmVjMyBhbWJpZW50TGlnaHRDb2xvcjtcbnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07XG52ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkge1xuXHRmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56O1xuXHR2ZWMzIHJlc3VsdCA9IHNoQ29lZmZpY2llbnRzWyAwIF0gKiAwLjg4NjIyNztcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDMgXSAqIDIuMCAqIDAuNTExNjY0ICogeDtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNiBdICogKCAwLjc0MzEyNSAqIHogKiB6IC0gMC4yNDc3MDggKTtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7XG5cdHJldHVybiByZXN1bHQ7XG59XG52ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSApIHtcblx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGdlb21ldHJ5Lm5vcm1hbCwgdmlld01hdHJpeCApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBzaEdldElycmFkaWFuY2VBdCggd29ybGROb3JtYWwsIGxpZ2h0UHJvYmUgKTtcblx0cmV0dXJuIGlycmFkaWFuY2U7XG59XG52ZWMzIGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgYW1iaWVudExpZ2h0Q29sb3IgKSB7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGFtYmllbnRMaWdodENvbG9yO1xuXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRpcnJhZGlhbmNlICo9IFBJO1xuXHQjZW5kaWZcblx0cmV0dXJuIGlycmFkaWFuY2U7XG59XG4jaWYgTlVNX0RJUl9MSUdIVFMgPiAwXG5cdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0IHtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIGNvbG9yO1xuXHR9O1xuXHR1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodHNbIE5VTV9ESVJfTElHSFRTIF07XG5cdHZvaWQgZ2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQgKSB7XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSBkaXJlY3Rpb25hbExpZ2h0LmNvbG9yO1xuXHRcdGRpcmVjdExpZ2h0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbmFsTGlnaHQuZGlyZWN0aW9uO1xuXHRcdGRpcmVjdExpZ2h0LnZpc2libGUgPSB0cnVlO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMFxuXHRzdHJ1Y3QgUG9pbnRMaWdodCB7XG5cdFx0dmVjMyBwb3NpdGlvbjtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdGZsb2F0IGRpc3RhbmNlO1xuXHRcdGZsb2F0IGRlY2F5O1xuXHR9O1xuXHR1bmlmb3JtIFBvaW50TGlnaHQgcG9pbnRMaWdodHNbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRQb2ludERpcmVjdExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gUG9pbnRMaWdodCBwb2ludExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBwb2ludExpZ2h0LnBvc2l0aW9uIC0gZ2VvbWV0cnkucG9zaXRpb247XG5cdFx0ZGlyZWN0TGlnaHQuZGlyZWN0aW9uID0gbm9ybWFsaXplKCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yID0gcG9pbnRMaWdodC5jb2xvcjtcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBwdW5jdHVhbExpZ2h0SW50ZW5zaXR5VG9JcnJhZGlhbmNlRmFjdG9yKCBsaWdodERpc3RhbmNlLCBwb2ludExpZ2h0LmRpc3RhbmNlLCBwb2ludExpZ2h0LmRlY2F5ICk7XG5cdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSA9ICggZGlyZWN0TGlnaHQuY29sb3IgIT0gdmVjMyggMC4wICkgKTtcblx0fVxuI2VuZGlmXG4jaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHRzdHJ1Y3QgU3BvdExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdFx0ZmxvYXQgY29uZUNvcztcblx0XHRmbG9hdCBwZW51bWJyYUNvcztcblx0fTtcblx0dW5pZm9ybSBTcG90TGlnaHQgc3BvdExpZ2h0c1sgTlVNX1NQT1RfTElHSFRTIF07XG5cdHZvaWQgZ2V0U3BvdERpcmVjdExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gU3BvdExpZ2h0IHNwb3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQgKSB7XG5cdFx0dmVjMyBsVmVjdG9yID0gc3BvdExpZ2h0LnBvc2l0aW9uIC0gZ2VvbWV0cnkucG9zaXRpb247XG5cdFx0ZGlyZWN0TGlnaHQuZGlyZWN0aW9uID0gbm9ybWFsaXplKCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xuXHRcdGZsb2F0IGFuZ2xlQ29zID0gZG90KCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRpZiAoIGFuZ2xlQ29zID4gc3BvdExpZ2h0LmNvbmVDb3MgKSB7XG5cdFx0XHRmbG9hdCBzcG90RWZmZWN0ID0gc21vb3Roc3RlcCggc3BvdExpZ2h0LmNvbmVDb3MsIHNwb3RMaWdodC5wZW51bWJyYUNvcywgYW5nbGVDb3MgKTtcblx0XHRcdGRpcmVjdExpZ2h0LmNvbG9yID0gc3BvdExpZ2h0LmNvbG9yO1xuXHRcdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gc3BvdEVmZmVjdCAqIHB1bmN0dWFsTGlnaHRJbnRlbnNpdHlUb0lycmFkaWFuY2VGYWN0b3IoIGxpZ2h0RGlzdGFuY2UsIHNwb3RMaWdodC5kaXN0YW5jZSwgc3BvdExpZ2h0LmRlY2F5ICk7XG5cdFx0XHRkaXJlY3RMaWdodC52aXNpYmxlID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTtcblx0XHRcdGRpcmVjdExpZ2h0LnZpc2libGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHRzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7XG5cdFx0dmVjMyBjb2xvcjtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodDtcblx0fTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgbHRjXzE7XHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjtcblx0dW5pZm9ybSBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHRzWyBOVU1fUkVDVF9BUkVBX0xJR0hUUyBdO1xuI2VuZGlmXG4jaWYgTlVNX0hFTUlfTElHSFRTID4gMFxuXHRzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIHNreUNvbG9yO1xuXHRcdHZlYzMgZ3JvdW5kQ29sb3I7XG5cdH07XG5cdHVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdO1xuXHR2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnkgKSB7XG5cdFx0ZmxvYXQgZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgaGVtaUxpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGZsb2F0IGhlbWlEaWZmdXNlV2VpZ2h0ID0gMC41ICogZG90TkwgKyAwLjU7XG5cdFx0dmVjMyBpcnJhZGlhbmNlID0gbWl4KCBoZW1pTGlnaHQuZ3JvdW5kQ29sb3IsIGhlbWlMaWdodC5za3lDb2xvciwgaGVtaURpZmZ1c2VXZWlnaHQgKTtcblx0XHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5cdFx0cmV0dXJuIGlycmFkaWFuY2U7XG5cdH1cbiNlbmRpZiIsbGlnaHRzX3Rvb25fZnJhZ21lbnQ6IlRvb25NYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7IixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OiJ2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbnN0cnVjdCBUb29uTWF0ZXJpYWwge1xuXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcbn07XG52b2lkIFJFX0RpcmVjdF9Ub29uKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1Rvb24oIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2VfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG4jZGVmaW5lIFJFX0RpcmVjdFx0XHRcdFx0UkVfRGlyZWN0X1Rvb25cbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9Ub29uXG4jZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsIClcdCgwKSIsbGlnaHRzX3Bob25nX2ZyYWdtZW50OiJCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiO1xubWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IHNwZWN1bGFyO1xubWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgPSBzaGluaW5lc3M7XG5tYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDsiLGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50OiJ2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbnN0cnVjdCBCbGlublBob25nTWF0ZXJpYWwge1xuXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcblx0dmVjMyBzcGVjdWxhckNvbG9yO1xuXHRmbG9hdCBzcGVjdWxhclNoaW5pbmVzcztcblx0ZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDtcbn07XG52b2lkIFJFX0RpcmVjdF9CbGlublBob25nKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfU3BlY3VsYXJfQmxpbm5QaG9uZyggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2VfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG4jZGVmaW5lIFJFX0RpcmVjdFx0XHRcdFx0UkVfRGlyZWN0X0JsaW5uUGhvbmdcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nXG4jZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsIClcdCgwKSIsbGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50OiJQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYiAqICggMS4wIC0gbWV0YWxuZXNzRmFjdG9yICk7XG52ZWMzIGR4eSA9IG1heCggYWJzKCBkRmR4KCBnZW9tZXRyeU5vcm1hbCApICksIGFicyggZEZkeSggZ2VvbWV0cnlOb3JtYWwgKSApICk7XG5mbG9hdCBnZW9tZXRyeVJvdWdobmVzcyA9IG1heCggbWF4KCBkeHkueCwgZHh5LnkgKSwgZHh5LnogKTtcbm1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzID0gbWF4KCByb3VnaG5lc3NGYWN0b3IsIDAuMDUyNSApO21hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICs9IGdlb21ldHJ5Um91Z2huZXNzO1xubWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgPSBtaW4oIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzLCAxLjAgKTtcbiNpZmRlZiBSRUZMRUNUSVZJVFlcblx0I2lmZGVmIFNQRUNVTEFSXG5cdFx0dmVjMyBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHZlYzMoIHNwZWN1bGFySW50ZW5zaXR5ICk7XG5cdFx0dmVjMyBzcGVjdWxhclRpbnRGYWN0b3IgPSBzcGVjdWxhclRpbnQ7XG5cdFx0I2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUFxuXHRcdFx0c3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTtcblx0XHQjZW5kaWZcblx0XHQjaWZkZWYgVVNFX1NQRUNVTEFSVElOVE1BUFxuXHRcdFx0c3BlY3VsYXJUaW50RmFjdG9yICo9IHNwZWN1bGFyVGludE1hcFRleGVsVG9MaW5lYXIoIHRleHR1cmUyRCggc3BlY3VsYXJUaW50TWFwLCB2VXYgKSApLnJnYjtcblx0XHQjZW5kaWZcblx0XHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yRjkwID0gbWl4KCBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgdmVjMyggMS4wICksIG1ldGFsbmVzc0ZhY3RvciApO1xuXHQjZWxzZVxuXHRcdHZlYzMgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSB2ZWMzKCAxLjAgKTtcblx0XHR2ZWMzIHNwZWN1bGFyVGludEZhY3RvciA9IHZlYzMoIDEuMCApO1xuXHRcdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3JGOTAgPSB2ZWMzKCAxLjAgKTtcblx0I2VuZGlmXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIG1pbiggdmVjMyggTUFYSU1VTV9TUEVDVUxBUl9DT0VGRklDSUVOVCAqIHBvdzIoIHJlZmxlY3Rpdml0eSApICkgKiBzcGVjdWxhclRpbnRGYWN0b3IsIHZlYzMoIDEuMCApICkgKiBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG4jZWxzZVxuXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xuXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yRjkwID0gdmVjMyggMS4wICk7XG4jZW5kaWZcbiNpZmRlZiBDTEVBUkNPQVRcblx0bWF0ZXJpYWwuY2xlYXJjb2F0ID0gY2xlYXJjb2F0O1xuXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBjbGVhcmNvYXRSb3VnaG5lc3M7XG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXG5cdFx0bWF0ZXJpYWwuY2xlYXJjb2F0ICo9IHRleHR1cmUyRCggY2xlYXJjb2F0TWFwLCB2VXYgKS54O1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQXG5cdFx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICo9IHRleHR1cmUyRCggY2xlYXJjb2F0Um91Z2huZXNzTWFwLCB2VXYgKS55O1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuY2xlYXJjb2F0ID0gc2F0dXJhdGUoIG1hdGVyaWFsLmNsZWFyY29hdCApO1x0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWF4KCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDAuMDUyNSApO1xuXHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAxLjAgKTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9TSEVFTlxuXHRtYXRlcmlhbC5zaGVlbkNvbG9yID0gc2hlZW47XG4jZW5kaWYiLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiJzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xuXHRmbG9hdCBzcGVjdWxhclJvdWdobmVzcztcblx0dmVjMyBzcGVjdWxhckNvbG9yO1xuXHR2ZWMzIHNwZWN1bGFyQ29sb3JGOTA7XG4jaWZkZWYgQ0xFQVJDT0FUXG5cdGZsb2F0IGNsZWFyY29hdDtcblx0ZmxvYXQgY2xlYXJjb2F0Um91Z2huZXNzO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1NIRUVOXG5cdHZlYzMgc2hlZW5Db2xvcjtcbiNlbmRpZlxufTtcbiNkZWZpbmUgTUFYSU1VTV9TUEVDVUxBUl9DT0VGRklDSUVOVCAwLjE2XG4jZGVmaW5lIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgMC4wNFxuZmxvYXQgY2xlYXJjb2F0REhSQXBwcm94KCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5MICkge1xuXHRyZXR1cm4gREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCArICggMS4wIC0gREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApICogKCBwb3coIDEuMCAtIGRvdE5MLCA1LjAgKSAqIHBvdyggMS4wIC0gcm91Z2huZXNzLCAyLjAgKSApO1xufVxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHR2b2lkIFJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbCggY29uc3QgaW4gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0XHR2ZWMzIG5vcm1hbCA9IGdlb21ldHJ5Lm5vcm1hbDtcblx0XHR2ZWMzIHZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xuXHRcdHZlYzMgcG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHR2ZWMzIGxpZ2h0UG9zID0gcmVjdEFyZWFMaWdodC5wb3NpdGlvbjtcblx0XHR2ZWMzIGhhbGZXaWR0aCA9IHJlY3RBcmVhTGlnaHQuaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodCA9IHJlY3RBcmVhTGlnaHQuaGFsZkhlaWdodDtcblx0XHR2ZWMzIGxpZ2h0Q29sb3IgPSByZWN0QXJlYUxpZ2h0LmNvbG9yO1xuXHRcdGZsb2F0IHJvdWdobmVzcyA9IG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzO1xuXHRcdHZlYzMgcmVjdENvb3Jkc1sgNCBdO1xuXHRcdHJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcdFx0cmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0dmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcblx0XHR2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTtcblx0XHR2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTtcblx0XHRtYXQzIG1JbnYgPSBtYXQzKFxuXHRcdFx0dmVjMyggdDEueCwgMCwgdDEueSApLFxuXHRcdFx0dmVjMyggICAgMCwgMSwgICAgMCApLFxuXHRcdFx0dmVjMyggdDEueiwgMCwgdDEudyApXG5cdFx0KTtcblx0XHR2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTtcblx0fVxuI2VuZGlmXG52b2lkIFJFX0RpcmVjdF9QaHlzaWNhbCggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRpcnJhZGlhbmNlICo9IFBJO1xuXHQjZW5kaWZcblx0I2lmZGVmIENMRUFSQ09BVFxuXHRcdGZsb2F0IGNjRG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdFx0dmVjMyBjY0lycmFkaWFuY2UgPSBjY0RvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRjY0lycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5cdFx0ZmxvYXQgY2xlYXJjb2F0REhSID0gbWF0ZXJpYWwuY2xlYXJjb2F0ICogY2xlYXJjb2F0REhSQXBwcm94KCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIGNjRG90TkwgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBjY0lycmFkaWFuY2UgKiBtYXRlcmlhbC5jbGVhcmNvYXQgKiBCUkRGX1NwZWN1bGFyX0dHWCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgdmVjMyggREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApLCB2ZWMzKCAxLjAgKSwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgY2xlYXJjb2F0REhSID0gMC4wO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9TSEVFTlxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9ICggMS4wIC0gY2xlYXJjb2F0REhSICkgKiBpcnJhZGlhbmNlICogQlJERl9TcGVjdWxhcl9TaGVlbihcblx0XHRcdG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzLFxuXHRcdFx0ZGlyZWN0TGlnaHQuZGlyZWN0aW9uLFxuXHRcdFx0Z2VvbWV0cnksXG5cdFx0XHRtYXRlcmlhbC5zaGVlbkNvbG9yXG5cdFx0KTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSAoIDEuMCAtIGNsZWFyY29hdERIUiApICogaXJyYWRpYW5jZSAqIEJSREZfU3BlY3VsYXJfR0dYKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yRjkwLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyk7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9ICggMS4wIC0gY2xlYXJjb2F0REhSICkgKiBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxudm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7XG5cdCNpZmRlZiBDTEVBUkNPQVRcblx0XHRmbG9hdCBjY0RvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogbWF0ZXJpYWwuY2xlYXJjb2F0ICogQlJERl9TcGVjdWxhcl9HR1hfRW52aXJvbm1lbnQoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgdmVjMyggREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0XHRmbG9hdCBjY0RvdE5MID0gY2NEb3ROVjtcblx0XHRmbG9hdCBjbGVhcmNvYXRESFIgPSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBjbGVhcmNvYXRESFJBcHByb3goIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgY2NEb3ROTCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGNsZWFyY29hdERIUiA9IDAuMDtcblx0I2VuZGlmXG5cdGZsb2F0IGNsZWFyY29hdEludiA9IDEuMCAtIGNsZWFyY29hdERIUjtcblx0dmVjMyBzaW5nbGVTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7XG5cdHZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7XG5cdHZlYzMgY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlID0gaXJyYWRpYW5jZSAqIFJFQ0lQUk9DQUxfUEk7XG5cdEJSREZfU3BlY3VsYXJfTXVsdGlzY2F0dGVyaW5nX0Vudmlyb25tZW50KCBnZW9tZXRyeSwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MsIHNpbmdsZVNjYXR0ZXJpbmcsIG11bHRpU2NhdHRlcmluZyApO1xuXHR2ZWMzIGRpZmZ1c2UgPSBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiAoIDEuMCAtICggc2luZ2xlU2NhdHRlcmluZyArIG11bHRpU2NhdHRlcmluZyApICk7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gY2xlYXJjb2F0SW52ICogcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IG11bHRpU2NhdHRlcmluZyAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGRpZmZ1c2UgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XG59XG4jZGVmaW5lIFJFX0RpcmVjdFx0XHRcdFx0UkVfRGlyZWN0X1BoeXNpY2FsXG4jZGVmaW5lIFJFX0RpcmVjdF9SZWN0QXJlYVx0XHRSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbFxuI2RlZmluZSBSRV9JbmRpcmVjdFNwZWN1bGFyXHRcdFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWxcbmZsb2F0IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IGFtYmllbnRPY2NsdXNpb24sIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0cmV0dXJuIHNhdHVyYXRlKCBwb3coIGRvdE5WICsgYW1iaWVudE9jY2x1c2lvbiwgZXhwMiggLSAxNi4wICogcm91Z2huZXNzIC0gMS4wICkgKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24gKTtcbn0iLGxpZ2h0c19mcmFnbWVudF9iZWdpbjoiXG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSAtIHZWaWV3UG9zaXRpb247XG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWw7XG5nZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7XG4jaWZkZWYgQ0xFQVJDT0FUXG5cdGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCA9IGNsZWFyY29hdE5vcm1hbDtcbiNlbmRpZlxuSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDtcbiNpZiAoIE5VTV9QT0lOVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0UG9pbnRMaWdodCBwb2ludExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRzWyBpIF07XG5cdFx0Z2V0UG9pbnREaXJlY3RMaWdodElycmFkaWFuY2UoIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgKVxuXHRcdHBvaW50TGlnaHRTaGFkb3cgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhciApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fU1BPVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0U3BvdExpZ2h0IHNwb3RMaWdodDtcblx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93O1xuXHQjZW5kaWZcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0c3BvdExpZ2h0ID0gc3BvdExpZ2h0c1sgaSBdO1xuXHRcdGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIHNwb3RMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIClcblx0XHRzcG90TGlnaHRTaGFkb3cgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmICggTlVNX0RJUl9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0RGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0RGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93O1xuXHQjZW5kaWZcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRnZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SXJyYWRpYW5jZSggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fRElSX0xJR0hUX1NIQURPV1MgKVxuXHRcdGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmICggTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0X1JlY3RBcmVhIClcblx0UmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkge1xuXHRcdHJlY3RBcmVhTGlnaHQgPSByZWN0QXJlYUxpZ2h0c1sgaSBdO1xuXHRcdFJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHR2ZWMzIGlibElycmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0aXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkgKTtcblx0I2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApXG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHtcblx0XHRcdGlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeSApO1xuXHRcdH1cblx0XHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxuXHR2ZWMzIHJhZGlhbmNlID0gdmVjMyggMC4wICk7XG5cdHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTtcbiNlbmRpZiIsbGlnaHRzX2ZyYWdtZW50X21hcHM6IiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFx0dmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7XG5cdFx0dmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsVG9MaW5lYXIoIGxpZ2h0TWFwVGV4ZWwgKS5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcblx0XHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRcdGxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTtcblx0XHQjZW5kaWZcblx0XHRpcnJhZGlhbmNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTtcblx0I2VuZGlmXG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKSAmJiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRpYmxJcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJbmRpcmVjdElycmFkaWFuY2UoIGdlb21ldHJ5LCBtYXhNaXBMZXZlbCApO1xuXHQjZW5kaWZcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcblx0cmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUluZGlyZWN0UmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MsIG1heE1pcExldmVsICk7XG5cdCNpZmRlZiBDTEVBUkNPQVRcblx0XHRjbGVhcmNvYXRSYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIG1heE1pcExldmVsICk7XG5cdCNlbmRpZlxuI2VuZGlmIixsaWdodHNfZnJhZ21lbnRfZW5kOiIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0UkVfSW5kaXJlY3REaWZmdXNlKCBpcnJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcblx0UkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApXG5cdGdsX0ZyYWdEZXB0aEVYVCA9IHZJc1BlcnNwZWN0aXZlID09IDAuMCA/IGdsX0ZyYWdDb29yZC56IDogbG9nMiggdkZyYWdEZXB0aCApICogbG9nRGVwdGhCdWZGQyAqIDAuNTtcbiNlbmRpZiIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxuXHR1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7XG5cdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcblx0dmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTtcbiNlbmRpZiIsbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcblx0I2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFRcblx0XHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdFx0dmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTtcblx0I2Vsc2Vcblx0XHR1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7XG5cdCNlbmRpZlxuI2VuZGlmIixsb2dkZXB0aGJ1Zl92ZXJ0ZXg6IiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcblx0I2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFRcblx0XHR2RnJhZ0RlcHRoID0gMS4wICsgZ2xfUG9zaXRpb24udztcblx0XHR2SXNQZXJzcGVjdGl2ZSA9IGZsb2F0KCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKTtcblx0I2Vsc2Vcblx0XHRpZiAoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApIHtcblx0XHRcdGdsX1Bvc2l0aW9uLnogPSBsb2cyKCBtYXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSApICogbG9nRGVwdGhCdWZGQyAtIDEuMDtcblx0XHRcdGdsX1Bvc2l0aW9uLnogKj0gZ2xfUG9zaXRpb24udztcblx0XHR9XG5cdCNlbmRpZlxuI2VuZGlmIixtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTUFQXG5cdHZlYzQgdGV4ZWxDb2xvciA9IHRleHR1cmUyRCggbWFwLCB2VXYgKTtcblx0dGV4ZWxDb2xvciA9IG1hcFRleGVsVG9MaW5lYXIoIHRleGVsQ29sb3IgKTtcblx0ZGlmZnVzZUNvbG9yICo9IHRleGVsQ29sb3I7XG4jZW5kaWYiLG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWYiLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKVxuXHR2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9NQVBcblx0dmVjNCBtYXBUZXhlbCA9IHRleHR1cmUyRCggbWFwLCB1diApO1xuXHRkaWZmdXNlQ29sb3IgKj0gbWFwVGV4ZWxUb0xpbmVhciggbWFwVGV4ZWwgKTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB1diApLmc7XG4jZW5kaWYiLG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApXG5cdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixtZXRhbG5lc3NtYXBfZnJhZ21lbnQ6ImZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzcztcbiNpZmRlZiBVU0VfTUVUQUxORVNTTUFQXG5cdHZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7XG5cdG1ldGFsbmVzc0ZhY3RvciAqPSB0ZXhlbE1ldGFsbmVzcy5iO1xuI2VuZGlmIixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xuI2VuZGlmIixtb3JwaG5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdG9iamVjdE5vcm1hbCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7XG5cdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcblx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xuXHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcbiNlbmRpZiIsbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xuXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgOCBdO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XG5cdCNlbmRpZlxuI2VuZGlmIixtb3JwaHRhcmdldF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHRyYW5zZm9ybWVkICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xuXHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG5cdCNpZm5kZWYgVVNFX01PUlBITk9STUFMU1xuXHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xuXHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdO1xuXHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNiBdO1xuXHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdO1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiJmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDtcbiNpZmRlZiBGTEFUX1NIQURFRFxuXHR2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCBjcm9zcyggZmR4LCBmZHkgKSApO1xuI2Vsc2Vcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIHZOb3JtYWwgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2ZWMzIHRhbmdlbnQgPSBub3JtYWxpemUoIHZUYW5nZW50ICk7XG5cdFx0dmVjMyBiaXRhbmdlbnQgPSBub3JtYWxpemUoIHZCaXRhbmdlbnQgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247XG5cdFx0XHRiaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uO1xuXHRcdCNlbmRpZlxuXHRcdCNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKVxuXHRcdFx0bWF0MyB2VEJOID0gbWF0MyggdGFuZ2VudCwgYml0YW5nZW50LCBub3JtYWwgKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWZcbnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7Iixub3JtYWxfZnJhZ21lbnRfbWFwczoiI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHRub3JtYWwgPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xuXHQjaWZkZWYgRkxJUF9TSURFRFxuXHRcdG5vcm1hbCA9IC0gbm9ybWFsO1xuXHQjZW5kaWZcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHRub3JtYWwgPSBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xuI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdG1hcE4ueHkgKj0gbm9ybWFsU2NhbGU7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTtcblx0I2Vsc2Vcblx0XHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLXZWaWV3UG9zaXRpb24sIG5vcm1hbCwgbWFwTiwgZmFjZURpcmVjdGlvbiApO1xuXHQjZW5kaWZcbiNlbGlmIGRlZmluZWQoIFVTRV9CVU1QTUFQIClcblx0bm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLXZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCksIGZhY2VEaXJlY3Rpb24gKTtcbiNlbmRpZiIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlO1xuI2VuZGlmXG4jaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7XG4jZW5kaWZcbiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApXG5cdHZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZlYzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzMgbWFwTiwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHtcblx0XHR2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApO1xuXHRcdHZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7XG5cdFx0dmVjMiBzdDAgPSBkRmR4KCB2VXYuc3QgKTtcblx0XHR2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApO1xuXHRcdHZlYzMgTiA9IHN1cmZfbm9ybTtcblx0XHR2ZWMzIHExcGVycCA9IGNyb3NzKCBxMSwgTiApO1xuXHRcdHZlYzMgcTBwZXJwID0gY3Jvc3MoIE4sIHEwICk7XG5cdFx0dmVjMyBUID0gcTFwZXJwICogc3QwLnggKyBxMHBlcnAgKiBzdDEueDtcblx0XHR2ZWMzIEIgPSBxMXBlcnAgKiBzdDAueSArIHEwcGVycCAqIHN0MS55O1xuXHRcdGZsb2F0IGRldCA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7XG5cdFx0ZmxvYXQgc2NhbGUgPSAoIGRldCA9PSAwLjAgKSA/IDAuMCA6IGZhY2VEaXJlY3Rpb24gKiBpbnZlcnNlc3FydCggZGV0ICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggVCAqICggbWFwTi54ICogc2NhbGUgKSArIEIgKiAoIG1hcE4ueSAqIHNjYWxlICkgKyBOICogbWFwTi56ICk7XG5cdH1cbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjoiI2lmZGVmIENMRUFSQ09BVFxuXHR2ZWMzIGNsZWFyY29hdE5vcm1hbCA9IGdlb21ldHJ5Tm9ybWFsO1xuI2VuZGlmIixjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM6IiNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUFxuXHR2ZWMzIGNsZWFyY29hdE1hcE4gPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xuXHRjbGVhcmNvYXRNYXBOLnh5ICo9IGNsZWFyY29hdE5vcm1hbFNjYWxlO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHRjbGVhcmNvYXROb3JtYWwgPSBub3JtYWxpemUoIHZUQk4gKiBjbGVhcmNvYXRNYXBOICk7XG5cdCNlbHNlXG5cdFx0Y2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOLCBmYWNlRGlyZWN0aW9uICk7XG5cdCNlbmRpZlxuI2VuZGlmIixjbGVhcmNvYXRfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0TWFwO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Um91Z2huZXNzTWFwO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Tm9ybWFsTWFwO1xuXHR1bmlmb3JtIHZlYzIgY2xlYXJjb2F0Tm9ybWFsU2NhbGU7XG4jZW5kaWYiLHBhY2tpbmc6InZlYzMgcGFja05vcm1hbFRvUkdCKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHtcblx0cmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7XG59XG52ZWMzIHVucGFja1JHQlRvTm9ybWFsKCBjb25zdCBpbiB2ZWMzIHJnYiApIHtcblx0cmV0dXJuIDIuMCAqIHJnYi54eXogLSAxLjA7XG59XG5jb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuO1xuY29uc3QgdmVjMyBQYWNrRmFjdG9ycyA9IHZlYzMoIDI1Ni4gKiAyNTYuICogMjU2LiwgMjU2LiAqIDI1Ni4sIDI1Ni4gKTtcbmNvbnN0IHZlYzQgVW5wYWNrRmFjdG9ycyA9IFVucGFja0Rvd25zY2FsZSAvIHZlYzQoIFBhY2tGYWN0b3JzLCAxLiApO1xuY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47XG52ZWM0IHBhY2tEZXB0aFRvUkdCQSggY29uc3QgaW4gZmxvYXQgdiApIHtcblx0dmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7XG5cdHIueXp3IC09IHIueHl6ICogU2hpZnRSaWdodDg7XHRyZXR1cm4gciAqIFBhY2tVcHNjYWxlO1xufVxuZmxvYXQgdW5wYWNrUkdCQVRvRGVwdGgoIGNvbnN0IGluIHZlYzQgdiApIHtcblx0cmV0dXJuIGRvdCggdiwgVW5wYWNrRmFjdG9ycyApO1xufVxudmVjNCBwYWNrMkhhbGZUb1JHQkEoIHZlYzIgdiApIHtcblx0dmVjNCByID0gdmVjNCggdi54LCBmcmFjdCggdi54ICogMjU1LjAgKSwgdi55LCBmcmFjdCggdi55ICogMjU1LjAgKSk7XG5cdHJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53KTtcbn1cbnZlYzIgdW5wYWNrUkdCQVRvMkhhbGYoIHZlYzQgdiApIHtcblx0cmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7XG59XG5mbG9hdCB2aWV3WlRvT3J0aG9ncmFwaGljRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7XG59XG5mbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiBsaW5lYXJDbGlwWiAqICggbmVhciAtIGZhciApIC0gbmVhcjtcbn1cbmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCggbmVhciArIHZpZXdaICkgKiBmYXIgKSAvICgoIGZhciAtIG5lYXIgKSAqIHZpZXdaICk7XG59XG5mbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICggbmVhciAqIGZhciApIC8gKCAoIGZhciAtIG5lYXIgKSAqIGludkNsaXBaIC0gZmFyICk7XG59IixwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OiIjaWZkZWYgUFJFTVVMVElQTElFRF9BTFBIQVxuXHRnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hO1xuI2VuZGlmIixwcm9qZWN0X3ZlcnRleDoidmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuI2lmZGVmIFVTRV9JTlNUQU5DSU5HXG5cdG12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247XG4jZW5kaWZcbm12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiBtdlBvc2l0aW9uO1xuZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjsiLGRpdGhlcmluZ19mcmFnbWVudDoiI2lmZGVmIERJVEhFUklOR1xuXHRnbF9GcmFnQ29sb3IucmdiID0gZGl0aGVyaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7XG4jZW5kaWYiLGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50OiIjaWZkZWYgRElUSEVSSU5HXG5cdHZlYzMgZGl0aGVyaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRcdGZsb2F0IGdyaWRfcG9zaXRpb24gPSByYW5kKCBnbF9GcmFnQ29vcmQueHkgKTtcblx0XHR2ZWMzIGRpdGhlcl9zaGlmdF9SR0IgPSB2ZWMzKCAwLjI1IC8gMjU1LjAsIC0wLjI1IC8gMjU1LjAsIDAuMjUgLyAyNTUuMCApO1xuXHRcdGRpdGhlcl9zaGlmdF9SR0IgPSBtaXgoIDIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIC0yLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCBncmlkX3Bvc2l0aW9uICk7XG5cdFx0cmV0dXJuIGNvbG9yICsgZGl0aGVyX3NoaWZ0X1JHQjtcblx0fVxuI2VuZGlmIixyb3VnaG5lc3NtYXBfZnJhZ21lbnQ6ImZsb2F0IHJvdWdobmVzc0ZhY3RvciA9IHJvdWdobmVzcztcbiNpZmRlZiBVU0VfUk9VR0hORVNTTUFQXG5cdHZlYzQgdGV4ZWxSb3VnaG5lc3MgPSB0ZXh0dXJlMkQoIHJvdWdobmVzc01hcCwgdlV2ICk7XG5cdHJvdWdobmVzc0ZhY3RvciAqPSB0ZXhlbFJvdWdobmVzcy5nO1xuI2VuZGlmIixyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgcm91Z2huZXNzTWFwO1xuI2VuZGlmIixzaGFkb3dtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcG90U2hhZG93TWFwWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHBvaW50U2hhZG93TWFwWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYU5lYXI7XG5cdFx0XHRmbG9hdCBzaGFkb3dDYW1lcmFGYXI7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHRmbG9hdCB0ZXh0dXJlMkRDb21wYXJlKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkge1xuXHRcdHJldHVybiBzdGVwKCBjb21wYXJlLCB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBkZXB0aHMsIHV2ICkgKSApO1xuXHR9XG5cdHZlYzIgdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2ICkge1xuXHRcdHJldHVybiB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3csIHV2ICkgKTtcblx0fVxuXHRmbG9hdCBWU01TaGFkb3cgKHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKXtcblx0XHRmbG9hdCBvY2NsdXNpb24gPSAxLjA7XG5cdFx0dmVjMiBkaXN0cmlidXRpb24gPSB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNoYWRvdywgdXYgKTtcblx0XHRmbG9hdCBoYXJkX3NoYWRvdyA9IHN0ZXAoIGNvbXBhcmUgLCBkaXN0cmlidXRpb24ueCApO1xuXHRcdGlmIChoYXJkX3NoYWRvdyAhPSAxLjAgKSB7XG5cdFx0XHRmbG9hdCBkaXN0YW5jZSA9IGNvbXBhcmUgLSBkaXN0cmlidXRpb24ueCA7XG5cdFx0XHRmbG9hdCB2YXJpYW5jZSA9IG1heCggMC4wMDAwMCwgZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSApO1xuXHRcdFx0ZmxvYXQgc29mdG5lc3NfcHJvYmFiaWxpdHkgPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIGRpc3RhbmNlICogZGlzdGFuY2UgKTtcdFx0XHRzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IGNsYW1wKCAoIHNvZnRuZXNzX3Byb2JhYmlsaXR5IC0gMC4zICkgLyAoIDAuOTUgLSAwLjMgKSwgMC4wLCAxLjAgKTtcdFx0XHRvY2NsdXNpb24gPSBjbGFtcCggbWF4KCBoYXJkX3NoYWRvdywgc29mdG5lc3NfcHJvYmFiaWxpdHkgKSwgMC4wLCAxLjAgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9jY2x1c2lvbjtcblx0fVxuXHRmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkge1xuXHRcdGZsb2F0IHNoYWRvdyA9IDEuMDtcblx0XHRzaGFkb3dDb29yZC54eXogLz0gc2hhZG93Q29vcmQudztcblx0XHRzaGFkb3dDb29yZC56ICs9IHNoYWRvd0JpYXM7XG5cdFx0YnZlYzQgaW5GcnVzdHVtVmVjID0gYnZlYzQgKCBzaGFkb3dDb29yZC54ID49IDAuMCwgc2hhZG93Q29vcmQueCA8PSAxLjAsIHNoYWRvd0Nvb3JkLnkgPj0gMC4wLCBzaGFkb3dDb29yZC55IDw9IDEuMCApO1xuXHRcdGJvb2wgaW5GcnVzdHVtID0gYWxsKCBpbkZydXN0dW1WZWMgKTtcblx0XHRidmVjMiBmcnVzdHVtVGVzdFZlYyA9IGJ2ZWMyKCBpbkZydXN0dW0sIHNoYWRvd0Nvb3JkLnogPD0gMS4wICk7XG5cdFx0Ym9vbCBmcnVzdHVtVGVzdCA9IGFsbCggZnJ1c3R1bVRlc3RWZWMgKTtcblx0XHRpZiAoIGZydXN0dW1UZXN0ICkge1xuXHRcdCNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR4MSA9ICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTEgPSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgyID0gZHgwIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHkyID0gZHkwIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHgzID0gZHgxIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHkzID0gZHkxIC8gMi4wO1xuXHRcdFx0c2hhZG93ID0gKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApXG5cdFx0XHQpICogKCAxLjAgLyAxNy4wICk7XG5cdFx0I2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBkeCA9IHRleGVsU2l6ZS54O1xuXHRcdFx0ZmxvYXQgZHkgPSB0ZXhlbFNpemUueTtcblx0XHRcdHZlYzIgdXYgPSBzaGFkb3dDb29yZC54eTtcblx0XHRcdHZlYzIgZiA9IGZyYWN0KCB1diAqIHNoYWRvd01hcFNpemUgKyAwLjUgKTtcblx0XHRcdHV2IC09IGYgKiB0ZXhlbFNpemU7XG5cdFx0XHRzaGFkb3cgPSAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYsIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB0ZXhlbFNpemUsIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHQgZi54ICkgK1xuXHRcdFx0XHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnggKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHQgZi55ICkgK1xuXHRcdFx0XHRtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnkgKSArXG5cdFx0XHRcdG1peCggbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHRcdCAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdFx0ICBmLnggKSxcblx0XHRcdFx0XHQgbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdFx0ICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSxcblx0XHRcdFx0XHRcdCAgZi54ICksXG5cdFx0XHRcdFx0IGYueSApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKVxuXHRcdFx0c2hhZG93ID0gVlNNU2hhZG93KCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHNoYWRvdyA9IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTtcblx0XHQjZW5kaWZcblx0XHR9XG5cdFx0cmV0dXJuIHNoYWRvdztcblx0fVxuXHR2ZWMyIGN1YmVUb1VWKCB2ZWMzIHYsIGZsb2F0IHRleGVsU2l6ZVkgKSB7XG5cdFx0dmVjMyBhYnNWID0gYWJzKCB2ICk7XG5cdFx0ZmxvYXQgc2NhbGVUb0N1YmUgPSAxLjAgLyBtYXgoIGFic1YueCwgbWF4KCBhYnNWLnksIGFic1YueiApICk7XG5cdFx0YWJzViAqPSBzY2FsZVRvQ3ViZTtcblx0XHR2ICo9IHNjYWxlVG9DdWJlICogKCAxLjAgLSAyLjAgKiB0ZXhlbFNpemVZICk7XG5cdFx0dmVjMiBwbGFuYXIgPSB2Lnh5O1xuXHRcdGZsb2F0IGFsbW9zdEFUZXhlbCA9IDEuNSAqIHRleGVsU2l6ZVk7XG5cdFx0ZmxvYXQgYWxtb3N0T25lID0gMS4wIC0gYWxtb3N0QVRleGVsO1xuXHRcdGlmICggYWJzVi56ID49IGFsbW9zdE9uZSApIHtcblx0XHRcdGlmICggdi56ID4gMC4wIClcblx0XHRcdFx0cGxhbmFyLnggPSA0LjAgLSB2Lng7XG5cdFx0fSBlbHNlIGlmICggYWJzVi54ID49IGFsbW9zdE9uZSApIHtcblx0XHRcdGZsb2F0IHNpZ25YID0gc2lnbiggdi54ICk7XG5cdFx0XHRwbGFuYXIueCA9IHYueiAqIHNpZ25YICsgMi4wICogc2lnblg7XG5cdFx0fSBlbHNlIGlmICggYWJzVi55ID49IGFsbW9zdE9uZSApIHtcblx0XHRcdGZsb2F0IHNpZ25ZID0gc2lnbiggdi55ICk7XG5cdFx0XHRwbGFuYXIueCA9IHYueCArIDIuMCAqIHNpZ25ZICsgMi4wO1xuXHRcdFx0cGxhbmFyLnkgPSB2LnogKiBzaWduWSAtIDIuMDtcblx0XHR9XG5cdFx0cmV0dXJuIHZlYzIoIDAuMTI1LCAwLjI1ICkgKiBwbGFuYXIgKyB2ZWMyKCAwLjM3NSwgMC43NSApO1xuXHR9XG5cdGZsb2F0IGdldFBvaW50U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCwgZmxvYXQgc2hhZG93Q2FtZXJhTmVhciwgZmxvYXQgc2hhZG93Q2FtZXJhRmFyICkge1xuXHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7XG5cdFx0dmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7XG5cdFx0ZmxvYXQgZHAgPSAoIGxlbmd0aCggbGlnaHRUb1Bvc2l0aW9uICkgLSBzaGFkb3dDYW1lcmFOZWFyICkgLyAoIHNoYWRvd0NhbWVyYUZhciAtIHNoYWRvd0NhbWVyYU5lYXIgKTtcdFx0ZHAgKz0gc2hhZG93Qmlhcztcblx0XHR2ZWMzIGJkM0QgPSBub3JtYWxpemUoIGxpZ2h0VG9Qb3NpdGlvbiApO1xuXHRcdCNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApXG5cdFx0XHR2ZWMyIG9mZnNldCA9IHZlYzIoIC0gMSwgMSApICogc2hhZG93UmFkaXVzICogdGV4ZWxTaXplLnk7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKVxuXHRcdFx0KSAqICggMS4wIC8gOS4wICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHJldHVybiB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWYiLHNoYWRvd21hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBtYXQ0IHNwb3RTaGFkb3dNYXRyaXhbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBTcG90TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYU5lYXI7XG5cdFx0XHRmbG9hdCBzaGFkb3dDYW1lcmFGYXI7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuI2VuZGlmIixzaGFkb3dtYXBfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHR2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdCNlbmRpZlxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSA9IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBzcG90TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApO1xuXHRcdHZTcG90U2hhZG93Q29vcmRbIGkgXSA9IHNwb3RTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogcG9pbnRMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dlBvaW50U2hhZG93Q29vcmRbIGkgXSA9IHBvaW50U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuI2VuZGlmIixzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ6ImZsb2F0IGdldFNoYWRvd01hc2soKSB7XG5cdGZsb2F0IHNoYWRvdyA9IDEuMDtcblx0I2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcblx0RGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c3BvdExpZ2h0ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0UG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHBvaW50TGlnaHQgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYUZhciApIDogMS4wO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG5cdCNlbmRpZlxuXHQjZW5kaWZcblx0cmV0dXJuIHNoYWRvdztcbn0iLHNraW5iYXNlX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IGJvbmVNYXRYID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnggKTtcblx0bWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7XG5cdG1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApO1xuXHRtYXQ0IGJvbmVNYXRXID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LncgKTtcbiNlbmRpZiIsc2tpbm5pbmdfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXg7XG5cdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTtcblx0I2lmZGVmIEJPTkVfVEVYVFVSRVxuXHRcdHVuaWZvcm0gaGlnaHAgc2FtcGxlcjJEIGJvbmVUZXh0dXJlO1xuXHRcdHVuaWZvcm0gaW50IGJvbmVUZXh0dXJlU2l6ZTtcblx0XHRtYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7XG5cdFx0XHRmbG9hdCBqID0gaSAqIDQuMDtcblx0XHRcdGZsb2F0IHggPSBtb2QoIGosIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApO1xuXHRcdFx0ZmxvYXQgeSA9IGZsb29yKCBqIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcblx0XHRcdGZsb2F0IGR5ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0eSA9IGR5ICogKCB5ICsgMC41ICk7XG5cdFx0XHR2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYyID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAxLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYzID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAyLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7XG5cdFx0XHRtYXQ0IGJvbmUgPSBtYXQ0KCB2MSwgdjIsIHYzLCB2NCApO1xuXHRcdFx0cmV0dXJuIGJvbmU7XG5cdFx0fVxuXHQjZWxzZVxuXHRcdHVuaWZvcm0gbWF0NCBib25lTWF0cmljZXNbIE1BWF9CT05FUyBdO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdG1hdDQgYm9uZSA9IGJvbmVNYXRyaWNlc1sgaW50KGkpIF07XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbmRpZlxuI2VuZGlmIixza2lubmluZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dmVjNCBza2luVmVydGV4ID0gYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcblx0dmVjNCBza2lubmVkID0gdmVjNCggMC4wICk7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54O1xuXHRza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTtcblx0c2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53O1xuXHR0cmFuc2Zvcm1lZCA9ICggYmluZE1hdHJpeEludmVyc2UgKiBza2lubmVkICkueHl6O1xuI2VuZGlmIixza2lubm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnkgKiBib25lTWF0WTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0Wjtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0Vztcblx0c2tpbk1hdHJpeCA9IGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbk1hdHJpeCAqIGJpbmRNYXRyaXg7XG5cdG9iamVjdE5vcm1hbCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6O1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHRvYmplY3RUYW5nZW50ID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6O1xuXHQjZW5kaWZcbiNlbmRpZiIsc3BlY3VsYXJtYXBfZnJhZ21lbnQ6ImZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG4jaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHZlYzQgdGV4ZWxTcGVjdWxhciA9IHRleHR1cmUyRCggc3BlY3VsYXJNYXAsIHZVdiApO1xuXHRzcGVjdWxhclN0cmVuZ3RoID0gdGV4ZWxTcGVjdWxhci5yO1xuI2Vsc2Vcblx0c3BlY3VsYXJTdHJlbmd0aCA9IDEuMDtcbiNlbmRpZiIsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9TUEVDVUxBUk1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDtcbiNlbmRpZiIsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBUT05FX01BUFBJTkcgKVxuXHRnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZiIsdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiI2lmbmRlZiBzYXR1cmF0ZVxuI2RlZmluZSBzYXR1cmF0ZShhKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxuI2VuZGlmXG51bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG52ZWMzIExpbmVhclRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRyZXR1cm4gdG9uZU1hcHBpbmdFeHBvc3VyZSAqIGNvbG9yO1xufVxudmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRyZXR1cm4gc2F0dXJhdGUoIGNvbG9yIC8gKCB2ZWMzKCAxLjAgKSArIGNvbG9yICkgKTtcbn1cbnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdGNvbG9yID0gbWF4KCB2ZWMzKCAwLjAgKSwgY29sb3IgLSAwLjAwNCApO1xuXHRyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApO1xufVxudmVjMyBSUlRBbmRPRFRGaXQoIHZlYzMgdiApIHtcblx0dmVjMyBhID0gdiAqICggdiArIDAuMDI0NTc4NiApIC0gMC4wMDAwOTA1Mzc7XG5cdHZlYzMgYiA9IHYgKiAoIDAuOTgzNzI5ICogdiArIDAuNDMyOTUxMCApICsgMC4yMzgwODE7XG5cdHJldHVybiBhIC8gYjtcbn1cbnZlYzMgQUNFU0ZpbG1pY1RvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb25zdCBtYXQzIEFDRVNJbnB1dE1hdCA9IG1hdDMoXG5cdFx0dmVjMyggMC41OTcxOSwgMC4wNzYwMCwgMC4wMjg0MCApLFx0XHR2ZWMzKCAwLjM1NDU4LCAwLjkwODM0LCAwLjEzMzgzICksXG5cdFx0dmVjMyggMC4wNDgyMywgMC4wMTU2NiwgMC44Mzc3NyApXG5cdCk7XG5cdGNvbnN0IG1hdDMgQUNFU091dHB1dE1hdCA9IG1hdDMoXG5cdFx0dmVjMyggIDEuNjA0NzUsIC0wLjEwMjA4LCAtMC4wMDMyNyApLFx0XHR2ZWMzKCAtMC41MzEwOCwgIDEuMTA4MTMsIC0wLjA3Mjc2ICksXG5cdFx0dmVjMyggLTAuMDczNjcsIC0wLjAwNjA1LCAgMS4wNzYwMiApXG5cdCk7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmUgLyAwLjY7XG5cdGNvbG9yID0gQUNFU0lucHV0TWF0ICogY29sb3I7XG5cdGNvbG9yID0gUlJUQW5kT0RURml0KCBjb2xvciApO1xuXHRjb2xvciA9IEFDRVNPdXRwdXRNYXQgKiBjb2xvcjtcblx0cmV0dXJuIHNhdHVyYXRlKCBjb2xvciApO1xufVxudmVjMyBDdXN0b21Ub25lTWFwcGluZyggdmVjMyBjb2xvciApIHsgcmV0dXJuIGNvbG9yOyB9Iix0cmFuc21pc3Npb25fZnJhZ21lbnQ6IiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdGZsb2F0IHRyYW5zbWlzc2lvbkZhY3RvciA9IHRyYW5zbWlzc2lvbjtcblx0ZmxvYXQgdGhpY2tuZXNzRmFjdG9yID0gdGhpY2tuZXNzO1xuXHQjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUFxuXHRcdHRyYW5zbWlzc2lvbkZhY3RvciAqPSB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvbk1hcCwgdlV2ICkucjtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfVEhJQ0tORVNTTUFQXG5cdFx0dGhpY2tuZXNzRmFjdG9yICo9IHRleHR1cmUyRCggdGhpY2tuZXNzTWFwLCB2VXYgKS5nO1xuXHQjZW5kaWZcblx0dmVjMyBwb3MgPSB2V29ybGRQb3NpdGlvbi54eXogLyB2V29ybGRQb3NpdGlvbi53O1xuXHR2ZWMzIHYgPSBub3JtYWxpemUoIGNhbWVyYVBvc2l0aW9uIC0gcG9zICk7XG5cdHZlYzMgbiA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRmbG9hdCBpb3IgPSAoIDEuMCArIDAuNCAqIHJlZmxlY3Rpdml0eSApIC8gKCAxLjAgLSAwLjQgKiByZWZsZWN0aXZpdHkgKTtcblx0dmVjMyB0cmFuc21pc3Npb24gPSB0cmFuc21pc3Npb25GYWN0b3IgKiBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKFxuXHRcdG4sIHYsIHJvdWdobmVzc0ZhY3RvciwgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLFxuXHRcdHBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLFxuXHRcdGF0dGVudWF0aW9uVGludCwgYXR0ZW51YXRpb25EaXN0YW5jZSApO1xuXHR0b3RhbERpZmZ1c2UgPSBtaXgoIHRvdGFsRGlmZnVzZSwgdHJhbnNtaXNzaW9uLCB0cmFuc21pc3Npb25GYWN0b3IgKTtcbiNlbmRpZiIsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uTWFwO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9USElDS05FU1NNQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCB0aGlja25lc3NNYXA7XG5cdCNlbmRpZlxuXHR1bmlmb3JtIHZlYzIgdHJhbnNtaXNzaW9uU2FtcGxlclNpemU7XG5cdHVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvblNhbXBsZXJNYXA7XG5cdHVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDtcblx0dW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7XG5cdHZhcnlpbmcgdmVjNCB2V29ybGRQb3NpdGlvbjtcblx0dmVjMyBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkodmVjMyBuLCB2ZWMzIHYsIGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgaW9yLCBtYXQ0IG1vZGVsTWF0cml4KSB7XG5cdFx0dmVjMyByZWZyYWN0aW9uVmVjdG9yID0gcmVmcmFjdCgtdiwgbm9ybWFsaXplKG4pLCAxLjAgLyBpb3IpO1xuXHRcdHZlYzMgbW9kZWxTY2FsZTtcblx0XHRtb2RlbFNjYWxlLnggPSBsZW5ndGgodmVjMyhtb2RlbE1hdHJpeFswXS54eXopKTtcblx0XHRtb2RlbFNjYWxlLnkgPSBsZW5ndGgodmVjMyhtb2RlbE1hdHJpeFsxXS54eXopKTtcblx0XHRtb2RlbFNjYWxlLnogPSBsZW5ndGgodmVjMyhtb2RlbE1hdHJpeFsyXS54eXopKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKHJlZnJhY3Rpb25WZWN0b3IpICogdGhpY2tuZXNzICogbW9kZWxTY2FsZTtcblx0fVxuXHRmbG9hdCBhcHBseUlvclRvUm91Z2huZXNzKGZsb2F0IHJvdWdobmVzcywgZmxvYXQgaW9yKSB7XG5cdFx0cmV0dXJuIHJvdWdobmVzcyAqIGNsYW1wKGlvciAqIDIuMCAtIDIuMCwgMC4wLCAxLjApO1xuXHR9XG5cdHZlYzMgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKHZlYzIgZnJhZ0Nvb3JkLCBmbG9hdCByb3VnaG5lc3MsIGZsb2F0IGlvcikge1xuXHRcdGZsb2F0IGZyYW1lYnVmZmVyTG9kID0gbG9nMih0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54KSAqIGFwcGx5SW9yVG9Sb3VnaG5lc3Mocm91Z2huZXNzLCBpb3IpO1xuXHRcdHJldHVybiB0ZXh0dXJlMkRMb2RFWFQodHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCkucmdiO1xuXHR9XG5cdHZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbih2ZWMzIHJhZGlhbmNlLCBmbG9hdCB0cmFuc21pc3Npb25EaXN0YW5jZSwgdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlKSB7XG5cdFx0aWYgKGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wKSB7XG5cdFx0XHRyZXR1cm4gcmFkaWFuY2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZlYzMgYXR0ZW51YXRpb25Db2VmZmljaWVudCA9IC1sb2coYXR0ZW51YXRpb25Db2xvcikgLyBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHRcdFx0dmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKC1hdHRlbnVhdGlvbkNvZWZmaWNpZW50ICogdHJhbnNtaXNzaW9uRGlzdGFuY2UpO1x0XHRcdHJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7XG5cdFx0fVxuXHR9XG5cdHZlYzMgZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbih2ZWMzIG4sIHZlYzMgdiwgZmxvYXQgcGVyY2VwdHVhbFJvdWdobmVzcywgdmVjMyBiYXNlQ29sb3IsIHZlYzMgc3BlY3VsYXJDb2xvcixcblx0XHR2ZWMzIHBvc2l0aW9uLCBtYXQ0IG1vZGVsTWF0cml4LCBtYXQ0IHZpZXdNYXRyaXgsIG1hdDQgcHJvak1hdHJpeCwgZmxvYXQgaW9yLCBmbG9hdCB0aGlja25lc3MsXG5cdFx0dmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlKSB7XG5cdFx0dmVjMyB0cmFuc21pc3Npb25SYXkgPSBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkobiwgdiwgdGhpY2tuZXNzLCBpb3IsIG1vZGVsTWF0cml4KTtcblx0XHR2ZWMzIHJlZnJhY3RlZFJheUV4aXQgPSBwb3NpdGlvbiArIHRyYW5zbWlzc2lvblJheTtcblx0XHR2ZWM0IG5kY1BvcyA9IHByb2pNYXRyaXggKiB2aWV3TWF0cml4ICogdmVjNChyZWZyYWN0ZWRSYXlFeGl0LCAxLjApO1xuXHRcdHZlYzIgcmVmcmFjdGlvbkNvb3JkcyA9IG5kY1Bvcy54eSAvIG5kY1Bvcy53O1xuXHRcdHJlZnJhY3Rpb25Db29yZHMgKz0gMS4wO1xuXHRcdHJlZnJhY3Rpb25Db29yZHMgLz0gMi4wO1xuXHRcdHZlYzMgdHJhbnNtaXR0ZWRMaWdodCA9IGdldFRyYW5zbWlzc2lvblNhbXBsZShyZWZyYWN0aW9uQ29vcmRzLCBwZXJjZXB0dWFsUm91Z2huZXNzLCBpb3IpO1xuXHRcdHZlYzMgYXR0ZW51YXRlZENvbG9yID0gYXBwbHlWb2x1bWVBdHRlbnVhdGlvbih0cmFuc21pdHRlZExpZ2h0LCBsZW5ndGgodHJhbnNtaXNzaW9uUmF5KSwgYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSk7XG5cdFx0cmV0dXJuICgxLjAgLSBzcGVjdWxhckNvbG9yKSAqIGF0dGVudWF0ZWRDb2xvciAqIGJhc2VDb2xvcjtcblx0fVxuI2VuZGlmIix1dl9wYXJzX2ZyYWdtZW50OiIjaWYgKCBkZWZpbmVkKCBVU0VfVVYgKSAmJiAhIGRlZmluZWQoIFVWU19WRVJURVhfT05MWSApIClcblx0dmFyeWluZyB2ZWMyIHZVdjtcbiNlbmRpZiIsdXZfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfVVZcblx0I2lmZGVmIFVWU19WRVJURVhfT05MWVxuXHRcdHZlYzIgdlV2O1xuXHQjZWxzZVxuXHRcdHZhcnlpbmcgdmVjMiB2VXY7XG5cdCNlbmRpZlxuXHR1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XG4jZW5kaWYiLHV2X3ZlcnRleDoiI2lmZGVmIFVTRV9VVlxuXHR2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xuI2VuZGlmIix1djJfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdHZhcnlpbmcgdmVjMiB2VXYyO1xuI2VuZGlmIix1djJfcGFyc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHRhdHRyaWJ1dGUgdmVjMiB1djI7XG5cdHZhcnlpbmcgdmVjMiB2VXYyO1xuXHR1bmlmb3JtIG1hdDMgdXYyVHJhbnNmb3JtO1xuI2VuZGlmIix1djJfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dlV2MiA9ICggdXYyVHJhbnNmb3JtICogdmVjMyggdXYyLCAxICkgKS54eTtcbiNlbmRpZiIsd29ybGRwb3NfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIERJU1RBTkNFICkgfHwgZGVmaW5lZCAoIFVTRV9TSEFET1dNQVAgKSB8fCBkZWZpbmVkICggVVNFX1RSQU5TTUlTU0lPTiApXG5cdHZlYzQgd29ybGRQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcblx0I2lmZGVmIFVTRV9JTlNUQU5DSU5HXG5cdFx0d29ybGRQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogd29ybGRQb3NpdGlvbjtcblx0I2VuZGlmXG5cdHdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247XG4jZW5kaWYiLGJhY2tncm91bmRfZnJhZzoidW5pZm9ybSBzYW1wbGVyMkQgdDJEO1xudmFyeWluZyB2ZWMyIHZVdjtcbnZvaWQgbWFpbigpIHtcblx0dmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCggdDJELCB2VXYgKTtcblx0Z2xfRnJhZ0NvbG9yID0gbWFwVGV4ZWxUb0xpbmVhciggdGV4Q29sb3IgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxufSIsYmFja2dyb3VuZF92ZXJ0OiJ2YXJ5aW5nIHZlYzIgdlV2O1xudW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xudm9pZCBtYWluKCkge1xuXHR2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xuXHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLnh5LCAxLjAsIDEuMCApO1xufSIsY3ViZV9mcmFnOiIjaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdHZlYzMgdlJlZmxlY3QgPSB2V29ybGREaXJlY3Rpb247XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdGdsX0ZyYWdDb2xvciA9IGVudkNvbG9yO1xuXHRnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5O1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG59IixjdWJlX3ZlcnQ6InZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdGdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlvbi53O1xufSIsZGVwdGhfZnJhZzoiI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xuXHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXG5cdFx0ZGlmZnVzZUNvbG9yLmEgPSBvcGFjaXR5O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdGZsb2F0IGZyYWdDb29yZFogPSAwLjUgKiB2SGlnaFByZWNpc2lvblpXWzBdIC8gdkhpZ2hQcmVjaXNpb25aV1sxXSArIDAuNTtcblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIDEuMCAtIGZyYWdDb29yZFogKSwgb3BhY2l0eSApO1xuXHQjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDFcblx0XHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTtcblx0I2VuZGlmXG59IixkZXB0aF92ZXJ0OiIjaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52YXJ5aW5nIHZlYzIgdkhpZ2hQcmVjaXNpb25aVztcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0XHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZIaWdoUHJlY2lzaW9uWlcgPSBnbF9Qb3NpdGlvbi56dztcbn0iLGRpc3RhbmNlUkdCQV9mcmFnOiIjZGVmaW5lIERJU1RBTkNFXG51bmlmb3JtIHZlYzMgcmVmZXJlbmNlUG9zaXRpb247XG51bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTtcbnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7XG52YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluICgpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7XG5cdGRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTtcblx0ZGlzdCA9IHNhdHVyYXRlKCBkaXN0ICk7XG5cdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApO1xufSIsZGlzdGFuY2VSR0JBX3ZlcnQ6IiNkZWZpbmUgRElTVEFOQ0VcbnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0XHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG59IixlcXVpcmVjdF9mcmFnOiJ1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7XG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApO1xuXHR2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7XG5cdHZlYzQgdGV4Q29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTtcblx0Z2xfRnJhZ0NvbG9yID0gbWFwVGV4ZWxUb0xpbmVhciggdGV4Q29sb3IgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxufSIsZXF1aXJlY3RfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cbn0iLGxpbmVkYXNoZWRfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG51bmlmb3JtIGZsb2F0IGRhc2hTaXplO1xudW5pZm9ybSBmbG9hdCB0b3RhbFNpemU7XG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0aWYgKCBtb2QoIHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApID4gZGFzaFNpemUgKSB7XG5cdFx0ZGlzY2FyZDtcblx0fVxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cbn0iLGxpbmVkYXNoZWRfdmVydDoidW5pZm9ybSBmbG9hdCBzY2FsZTtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7XG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdHZMaW5lRGlzdGFuY2UgPSBzY2FsZSAqIGxpbmVEaXN0YW5jZTtcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixtZXNoYmFzaWNfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0I2lmZGVmIFVTRV9MSUdIVE1BUFxuXHRcblx0XHR2ZWM0IGxpZ2h0TWFwVGV4ZWw9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBUZXhlbFRvTGluZWFyKCBsaWdodE1hcFRleGVsICkucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZlYzMoIDEuMCApO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gZGlmZnVzZUNvbG9yLnJnYjtcblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlO1xuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaGJhc2ljX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2lmIGRlZmluZWQgKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9TS0lOTklORyApXG5cdFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hsYW1iZXJ0X2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZMaWdodEZyb250O1xudmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250O1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjaztcblx0dmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9EaWZmdXNlX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2TGlnaHRGcm9udCA6IHZMaWdodEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9IHZMaWdodEZyb250O1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0RpZmZ1c2VfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApICogZ2V0U2hhZG93TWFzaygpO1xuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNobGFtYmVydF92ZXJ0OiIjZGVmaW5lIExBTUJFUlRcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcbnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XG5cdHZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2htYXRjYXBfZnJhZzoiI2RlZmluZSBNQVRDQVBcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgbWF0Y2FwO1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHR2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTtcblx0dmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApO1xuXHR2ZWMzIHkgPSBjcm9zcyggdmlld0RpciwgeCApO1xuXHR2ZWMyIHV2ID0gdmVjMiggZG90KCB4LCBub3JtYWwgKSwgZG90KCB5LCBub3JtYWwgKSApICogMC40OTUgKyAwLjU7XG5cdCNpZmRlZiBVU0VfTUFUQ0FQXG5cdFx0dmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApO1xuXHRcdG1hdGNhcENvbG9yID0gbWF0Y2FwVGV4ZWxUb0xpbmVhciggbWF0Y2FwQ29sb3IgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggMS4wICk7XG5cdCNlbmRpZlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiO1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaG1hdGNhcF92ZXJ0OiIjZGVmaW5lIE1BVENBUFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2lmbmRlZiBGTEFUX1NIQURFRFxuXHRcdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5cdFx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0XHR2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7XG5cdFx0XHR2Qml0YW5nZW50ID0gbm9ybWFsaXplKCBjcm9zcyggdk5vcm1hbCwgdlRhbmdlbnQgKSAqIHRhbmdlbnQudyApO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbn0iLG1lc2h0b29uX2ZyYWc6IiNkZWZpbmUgVE9PTlxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Z3JhZGllbnRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaHRvb25fdmVydDoiI2RlZmluZSBUT09OXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuI2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaHBob25nX2ZyYWc6IiNkZWZpbmUgUEhPTkdcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSB2ZWMzIHNwZWN1bGFyO1xudW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19waG9uZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaHBob25nX3ZlcnQ6IiNkZWZpbmUgUEhPTkdcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuI2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hwaHlzaWNhbF9mcmFnOiIjZGVmaW5lIFNUQU5EQVJEXG4jaWZkZWYgUEhZU0lDQUxcblx0I2RlZmluZSBSRUZMRUNUSVZJVFlcblx0I2RlZmluZSBDTEVBUkNPQVRcblx0I2RlZmluZSBTUEVDVUxBUlxuI2VuZGlmXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzO1xudW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuXHR1bmlmb3JtIGZsb2F0IHRyYW5zbWlzc2lvbjtcblx0dW5pZm9ybSBmbG9hdCB0aGlja25lc3M7XG5cdHVuaWZvcm0gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZTtcblx0dW5pZm9ybSB2ZWMzIGF0dGVudWF0aW9uVGludDtcbiNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJVklUWVxuXHR1bmlmb3JtIGZsb2F0IHJlZmxlY3Rpdml0eTtcbiNlbmRpZlxuI2lmZGVmIFNQRUNVTEFSXG5cdHVuaWZvcm0gZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHk7XG5cdHVuaWZvcm0gdmVjMyBzcGVjdWxhclRpbnQ7XG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckludGVuc2l0eU1hcDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJUSU5UTUFQXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJUaW50TWFwO1xuXHQjZW5kaWZcbiNlbmRpZlxuI2lmZGVmIENMRUFSQ09BVFxuXHR1bmlmb3JtIGZsb2F0IGNsZWFyY29hdDtcblx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbiNpZmRlZiBVU0VfU0hFRU5cblx0dW5pZm9ybSB2ZWMzIHNoZWVuO1xuI2VuZGlmXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcblx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgdG90YWxEaWZmdXNlID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcblx0dmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyO1xuXHQjaW5jbHVkZSA8dHJhbnNtaXNzaW9uX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB0b3RhbERpZmZ1c2UgKyB0b3RhbFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaHBoeXNpY2FsX3ZlcnQ6IiNkZWZpbmUgU1RBTkRBUkRcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZlxuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cblx0dmFyeWluZyB2ZWM0IHZXb3JsZFBvc2l0aW9uO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dlRhbmdlbnQgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkVGFuZ2VudCApO1xuXHRcdHZCaXRhbmdlbnQgPSBub3JtYWxpemUoIGNyb3NzKCB2Tm9ybWFsLCB2VGFuZ2VudCApICogdGFuZ2VudC53ICk7XG5cdCNlbmRpZlxuI2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cblx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uO1xuI2VuZGlmXG59Iixub3JtYWxfZnJhZzoiI2RlZmluZSBOT1JNQUxcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggcGFja05vcm1hbFRvUkdCKCBub3JtYWwgKSwgb3BhY2l0eSApO1xufSIsbm9ybWFsX3ZlcnQ6IiNkZWZpbmUgTk9STUFMXG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNlbmRpZlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dlRhbmdlbnQgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkVGFuZ2VudCApO1xuXHRcdHZCaXRhbmdlbnQgPSBub3JtYWxpemUoIGNyb3NzKCB2Tm9ybWFsLCB2VGFuZ2VudCApICogdGFuZ2VudC53ICk7XG5cdCNlbmRpZlxuI2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWZcbn0iLHBvaW50c19mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cbn0iLHBvaW50c192ZXJ0OiJ1bmlmb3JtIGZsb2F0IHNpemU7XG51bmlmb3JtIGZsb2F0IHNjYWxlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdGdsX1BvaW50U2l6ZSA9IHNpemU7XG5cdCNpZmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OXG5cdFx0Ym9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApO1xuXHRcdGlmICggaXNQZXJzcGVjdGl2ZSApIGdsX1BvaW50U2l6ZSAqPSAoIHNjYWxlIC8gLSBtdlBvc2l0aW9uLnogKTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLHNoYWRvd19mcmFnOiJ1bmlmb3JtIHZlYzMgY29sb3I7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvciwgb3BhY2l0eSAqICggMS4wIC0gZ2V0U2hhZG93TWFzaygpICkgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxufSIsc2hhZG93X3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsc3ByaXRlX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cbn0iLHNwcml0ZV92ZXJ0OiJ1bmlmb3JtIGZsb2F0IHJvdGF0aW9uO1xudW5pZm9ybSB2ZWMyIGNlbnRlcjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0dmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cdHZlYzIgc2NhbGU7XG5cdHNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueCwgbW9kZWxNYXRyaXhbIDAgXS55LCBtb2RlbE1hdHJpeFsgMCBdLnogKSApO1xuXHRzY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLngsIG1vZGVsTWF0cml4WyAxIF0ueSwgbW9kZWxNYXRyaXhbIDEgXS56ICkgKTtcblx0I2lmbmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OXG5cdFx0Ym9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApO1xuXHRcdGlmICggaXNQZXJzcGVjdGl2ZSApIHNjYWxlICo9IC0gbXZQb3NpdGlvbi56O1xuXHQjZW5kaWZcblx0dmVjMiBhbGlnbmVkUG9zaXRpb24gPSAoIHBvc2l0aW9uLnh5IC0gKCBjZW50ZXIgLSB2ZWMyKCAwLjUgKSApICkgKiBzY2FsZTtcblx0dmVjMiByb3RhdGVkUG9zaXRpb247XG5cdHJvdGF0ZWRQb3NpdGlvbi54ID0gY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggLSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcblx0cm90YXRlZFBvc2l0aW9uLnkgPSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xuXHRtdlBvc2l0aW9uLnh5ICs9IHJvdGF0ZWRQb3NpdGlvbjtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSJ9LHpzdD17Y29tbW9uOntkaWZmdXNlOnt2YWx1ZTpuZXcgUnJ0KDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3ICRpdH0sdXYyVHJhbnNmb3JtOnt2YWx1ZTpuZXcgJGl0fSxhbHBoYU1hcDp7dmFsdWU6bnVsbH19LHNwZWN1bGFybWFwOntzcGVjdWxhck1hcDp7dmFsdWU6bnVsbH19LGVudm1hcDp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxyZWZyYWN0aW9uUmF0aW86e3ZhbHVlOi45OH0sbWF4TWlwTGV2ZWw6e3ZhbHVlOjB9fSxhb21hcDp7YW9NYXA6e3ZhbHVlOm51bGx9LGFvTWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sbGlnaHRtYXA6e2xpZ2h0TWFwOnt2YWx1ZTpudWxsfSxsaWdodE1hcEludGVuc2l0eTp7dmFsdWU6MX19LGVtaXNzaXZlbWFwOntlbWlzc2l2ZU1hcDp7dmFsdWU6bnVsbH19LGJ1bXBtYXA6e2J1bXBNYXA6e3ZhbHVlOm51bGx9LGJ1bXBTY2FsZTp7dmFsdWU6MX19LG5vcm1hbG1hcDp7bm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxub3JtYWxTY2FsZTp7dmFsdWU6bmV3IFFpdCgxLDEpfX0sZGlzcGxhY2VtZW50bWFwOntkaXNwbGFjZW1lbnRNYXA6e3ZhbHVlOm51bGx9LGRpc3BsYWNlbWVudFNjYWxlOnt2YWx1ZToxfSxkaXNwbGFjZW1lbnRCaWFzOnt2YWx1ZTowfX0scm91Z2huZXNzbWFwOntyb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxtZXRhbG5lc3NtYXA6e21ldGFsbmVzc01hcDp7dmFsdWU6bnVsbH19LGdyYWRpZW50bWFwOntncmFkaWVudE1hcDp7dmFsdWU6bnVsbH19LGZvZzp7Zm9nRGVuc2l0eTp7dmFsdWU6MjVlLTV9LGZvZ05lYXI6e3ZhbHVlOjF9LGZvZ0Zhcjp7dmFsdWU6MmUzfSxmb2dDb2xvcjp7dmFsdWU6bmV3IFJydCgxNjc3NzIxNSl9fSxsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sbGlnaHRQcm9iZTp7dmFsdWU6W119LGRpcmVjdGlvbmFsTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sY29sb3I6e319fSxkaXJlY3Rpb25hbExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sZGlyZWN0aW9uYWxTaGFkb3dNYXA6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHNwb3RMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRpcmVjdGlvbjp7fSxkaXN0YW5jZTp7fSxjb25lQ29zOnt9LHBlbnVtYnJhQ29zOnt9LGRlY2F5Ont9fX0sc3BvdExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sc3BvdFNoYWRvd01hcDp7dmFsdWU6W119LHNwb3RTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxwb2ludExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGVjYXk6e30sZGlzdGFuY2U6e319fSxwb2ludExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9LHNoYWRvd0NhbWVyYU5lYXI6e30sc2hhZG93Q2FtZXJhRmFyOnt9fX0scG9pbnRTaGFkb3dNYXA6e3ZhbHVlOltdfSxwb2ludFNoYWRvd01hdHJpeDp7dmFsdWU6W119LGhlbWlzcGhlcmVMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxza3lDb2xvcjp7fSxncm91bmRDb2xvcjp7fX19LHJlY3RBcmVhTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSx3aWR0aDp7fSxoZWlnaHQ6e319fSxsdGNfMTp7dmFsdWU6bnVsbH0sbHRjXzI6e3ZhbHVlOm51bGx9fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBScnQoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyAkaXR9fSxzcHJpdGU6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBScnQoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBRaXQoLjUsLjUpfSxyb3RhdGlvbjp7dmFsdWU6MH0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyAkaXR9fX0sSXN0PXtiYXNpYzp7dW5pZm9ybXM6Z3N0KFt6c3QuY29tbW9uLHpzdC5zcGVjdWxhcm1hcCx6c3QuZW52bWFwLHpzdC5hb21hcCx6c3QubGlnaHRtYXAsenN0LmZvZ10pLHZlcnRleFNoYWRlcjpOc3QubWVzaGJhc2ljX3ZlcnQsZnJhZ21lbnRTaGFkZXI6TnN0Lm1lc2hiYXNpY19mcmFnfSxsYW1iZXJ0Ont1bmlmb3Jtczpnc3QoW3pzdC5jb21tb24senN0LnNwZWN1bGFybWFwLHpzdC5lbnZtYXAsenN0LmFvbWFwLHpzdC5saWdodG1hcCx6c3QuZW1pc3NpdmVtYXAsenN0LmZvZyx6c3QubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IFJydCgwKX19XSksdmVydGV4U2hhZGVyOk5zdC5tZXNobGFtYmVydF92ZXJ0LGZyYWdtZW50U2hhZGVyOk5zdC5tZXNobGFtYmVydF9mcmFnfSxwaG9uZzp7dW5pZm9ybXM6Z3N0KFt6c3QuY29tbW9uLHpzdC5zcGVjdWxhcm1hcCx6c3QuZW52bWFwLHpzdC5hb21hcCx6c3QubGlnaHRtYXAsenN0LmVtaXNzaXZlbWFwLHpzdC5idW1wbWFwLHpzdC5ub3JtYWxtYXAsenN0LmRpc3BsYWNlbWVudG1hcCx6c3QuZm9nLHpzdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgUnJ0KDApfSxzcGVjdWxhcjp7dmFsdWU6bmV3IFJydCgxMTE4NDgxKX0sc2hpbmluZXNzOnt2YWx1ZTozMH19XSksdmVydGV4U2hhZGVyOk5zdC5tZXNocGhvbmdfdmVydCxmcmFnbWVudFNoYWRlcjpOc3QubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3Jtczpnc3QoW3pzdC5jb21tb24senN0LmVudm1hcCx6c3QuYW9tYXAsenN0LmxpZ2h0bWFwLHpzdC5lbWlzc2l2ZW1hcCx6c3QuYnVtcG1hcCx6c3Qubm9ybWFsbWFwLHpzdC5kaXNwbGFjZW1lbnRtYXAsenN0LnJvdWdobmVzc21hcCx6c3QubWV0YWxuZXNzbWFwLHpzdC5mb2csenN0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBScnQoMCl9LHJvdWdobmVzczp7dmFsdWU6MX0sbWV0YWxuZXNzOnt2YWx1ZTowfSxlbnZNYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpOc3QubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6TnN0Lm1lc2hwaHlzaWNhbF9mcmFnfSx0b29uOnt1bmlmb3Jtczpnc3QoW3pzdC5jb21tb24senN0LmFvbWFwLHpzdC5saWdodG1hcCx6c3QuZW1pc3NpdmVtYXAsenN0LmJ1bXBtYXAsenN0Lm5vcm1hbG1hcCx6c3QuZGlzcGxhY2VtZW50bWFwLHpzdC5ncmFkaWVudG1hcCx6c3QuZm9nLHpzdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgUnJ0KDApfX1dKSx2ZXJ0ZXhTaGFkZXI6TnN0Lm1lc2h0b29uX3ZlcnQsZnJhZ21lbnRTaGFkZXI6TnN0Lm1lc2h0b29uX2ZyYWd9LG1hdGNhcDp7dW5pZm9ybXM6Z3N0KFt6c3QuY29tbW9uLHpzdC5idW1wbWFwLHpzdC5ub3JtYWxtYXAsenN0LmRpc3BsYWNlbWVudG1hcCx6c3QuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpOc3QubWVzaG1hdGNhcF92ZXJ0LGZyYWdtZW50U2hhZGVyOk5zdC5tZXNobWF0Y2FwX2ZyYWd9LHBvaW50czp7dW5pZm9ybXM6Z3N0KFt6c3QucG9pbnRzLHpzdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6TnN0LnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOk5zdC5wb2ludHNfZnJhZ30sZGFzaGVkOnt1bmlmb3Jtczpnc3QoW3pzdC5jb21tb24senN0LmZvZyx7c2NhbGU6e3ZhbHVlOjF9LGRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpOc3QubGluZWRhc2hlZF92ZXJ0LGZyYWdtZW50U2hhZGVyOk5zdC5saW5lZGFzaGVkX2ZyYWd9LGRlcHRoOnt1bmlmb3Jtczpnc3QoW3pzdC5jb21tb24senN0LmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpOc3QuZGVwdGhfdmVydCxmcmFnbWVudFNoYWRlcjpOc3QuZGVwdGhfZnJhZ30sbm9ybWFsOnt1bmlmb3Jtczpnc3QoW3pzdC5jb21tb24senN0LmJ1bXBtYXAsenN0Lm5vcm1hbG1hcCx6c3QuZGlzcGxhY2VtZW50bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6TnN0Lm5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOk5zdC5ub3JtYWxfZnJhZ30sc3ByaXRlOnt1bmlmb3Jtczpnc3QoW3pzdC5zcHJpdGUsenN0LmZvZ10pLHZlcnRleFNoYWRlcjpOc3Quc3ByaXRlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6TnN0LnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyAkaXR9LHQyRDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpOc3QuYmFja2dyb3VuZF92ZXJ0LGZyYWdtZW50U2hhZGVyOk5zdC5iYWNrZ3JvdW5kX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOmdzdChbenN0LmVudm1hcCx7b3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOk5zdC5jdWJlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6TnN0LmN1YmVfZnJhZ30sZXF1aXJlY3Q6e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6TnN0LmVxdWlyZWN0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6TnN0LmVxdWlyZWN0X2ZyYWd9LGRpc3RhbmNlUkdCQTp7dW5pZm9ybXM6Z3N0KFt6c3QuY29tbW9uLHpzdC5kaXNwbGFjZW1lbnRtYXAse3JlZmVyZW5jZVBvc2l0aW9uOnt2YWx1ZTpuZXcgY2F0fSxuZWFyRGlzdGFuY2U6e3ZhbHVlOjF9LGZhckRpc3RhbmNlOnt2YWx1ZToxZTN9fV0pLHZlcnRleFNoYWRlcjpOc3QuZGlzdGFuY2VSR0JBX3ZlcnQsZnJhZ21lbnRTaGFkZXI6TnN0LmRpc3RhbmNlUkdCQV9mcmFnfSxzaGFkb3c6e3VuaWZvcm1zOmdzdChbenN0LmxpZ2h0cyx6c3QuZm9nLHtjb2xvcjp7dmFsdWU6bmV3IFJydCgwKX0sb3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOk5zdC5zaGFkb3dfdmVydCxmcmFnbWVudFNoYWRlcjpOc3Quc2hhZG93X2ZyYWd9fTtmdW5jdGlvbiBIc3QodCxlLG4sbyxpKXtjb25zdCBhPW5ldyBScnQoMCk7bGV0IHIscyxsPTAsYz1udWxsLGQ9MCxwPW51bGw7ZnVuY3Rpb24gbSh0LGUpe24uYnVmZmVycy5jb2xvci5zZXRDbGVhcih0LnIsdC5nLHQuYixlLGkpfXJldHVybntnZXRDbGVhckNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldENsZWFyQ29sb3I6ZnVuY3Rpb24odCxlPTEpe2Euc2V0KHQpLGw9ZSxtKGEsbCl9LGdldENsZWFyQWxwaGE6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sc2V0Q2xlYXJBbHBoYTpmdW5jdGlvbih0KXtsPXQsbShhLGwpfSxyZW5kZXI6ZnVuY3Rpb24gdShuLGkpe2xldCB1PSExLGY9ITA9PT1pLmlzU2NlbmU/aS5iYWNrZ3JvdW5kOm51bGw7ZiYmZi5pc1RleHR1cmUmJihmPWUuZ2V0KGYpKTtjb25zdCBnPXQueHIsaD1nLmdldFNlc3Npb24mJmcuZ2V0U2Vzc2lvbigpO2gmJiJhZGRpdGl2ZSI9PT1oLmVudmlyb25tZW50QmxlbmRNb2RlJiYoZj1udWxsKSxudWxsPT09Zj9tKGEsbCk6ZiYmZi5pc0NvbG9yJiYobShmLDEpLHU9ITApLCh0LmF1dG9DbGVhcnx8dSkmJnQuY2xlYXIodC5hdXRvQ2xlYXJDb2xvcix0LmF1dG9DbGVhckRlcHRoLHQuYXV0b0NsZWFyU3RlbmNpbCksZiYmKGYuaXNDdWJlVGV4dHVyZXx8Zi5tYXBwaW5nPT09bWl0KT8odm9pZCAwPT09cyYmKHM9bmV3IHBzdChuZXcgdXN0KDEsMSwxKSxuZXcgYnN0KHtuYW1lOiJCYWNrZ3JvdW5kQ3ViZU1hdGVyaWFsIix1bmlmb3Jtczpmc3QoSXN0LmN1YmUudW5pZm9ybXMpLHZlcnRleFNoYWRlcjpJc3QuY3ViZS52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6SXN0LmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZToxLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSxzLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgibm9ybWFsIikscy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoInV2Iikscy5vbkJlZm9yZVJlbmRlcj1mdW5jdGlvbih0LGUsbil7dGhpcy5tYXRyaXhXb3JsZC5jb3B5UG9zaXRpb24obi5tYXRyaXhXb3JsZCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLm1hdGVyaWFsLCJlbnZNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5lbnZNYXAudmFsdWV9fSksby51cGRhdGUocykpLHMubWF0ZXJpYWwudW5pZm9ybXMuZW52TWFwLnZhbHVlPWYscy5tYXRlcmlhbC51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPWYuaXNDdWJlVGV4dHVyZSYmITE9PT1mLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT8tMToxLGM9PT1mJiZkPT09Zi52ZXJzaW9uJiZwPT09dC50b25lTWFwcGluZ3x8KHMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsYz1mLGQ9Zi52ZXJzaW9uLHA9dC50b25lTWFwcGluZyksbi51bnNoaWZ0KHMscy5nZW9tZXRyeSxzLm1hdGVyaWFsLDAsMCxudWxsKSk6ZiYmZi5pc1RleHR1cmUmJih2b2lkIDA9PT1yJiYocj1uZXcgcHN0KG5ldyBUc3QoMiwyKSxuZXcgYnN0KHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOmZzdChJc3QuYmFja2dyb3VuZC51bmlmb3JtcyksdmVydGV4U2hhZGVyOklzdC5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpJc3QuYmFja2dyb3VuZC5mcmFnbWVudFNoYWRlcixzaWRlOjAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLHIuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLG8udXBkYXRlKHIpKSxyLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT1mLCEwPT09Zi5tYXRyaXhBdXRvVXBkYXRlJiZmLnVwZGF0ZU1hdHJpeCgpLHIubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weShmLm1hdHJpeCksYz09PWYmJmQ9PT1mLnZlcnNpb24mJnA9PT10LnRvbmVNYXBwaW5nfHwoci5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCxjPWYsZD1mLnZlcnNpb24scD10LnRvbmVNYXBwaW5nKSxuLnVuc2hpZnQocixyLmdlb21ldHJ5LHIubWF0ZXJpYWwsMCwwLG51bGwpKX19fWZ1bmN0aW9uIEZzdCh0LGUsbixvKXtjb25zdCBpPXQuZ2V0UGFyYW1ldGVyKDM0OTIxKSxhPW8uaXNXZWJHTDI/bnVsbDplLmdldCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxyPW8uaXNXZWJHTDJ8fG51bGwhPT1hLHM9e30sbD1tKG51bGwpO2xldCBjPWw7ZnVuY3Rpb24gZChlKXtyZXR1cm4gby5pc1dlYkdMMj90LmJpbmRWZXJ0ZXhBcnJheShlKTphLmJpbmRWZXJ0ZXhBcnJheU9FUyhlKX1mdW5jdGlvbiBwKGUpe3JldHVybiBvLmlzV2ViR0wyP3QuZGVsZXRlVmVydGV4QXJyYXkoZSk6YS5kZWxldGVWZXJ0ZXhBcnJheU9FUyhlKX1mdW5jdGlvbiBtKHQpe2NvbnN0IGU9W10sbj1bXSxvPVtdO2ZvcihsZXQgdD0wO3Q8aTt0KyspZVt0XT0wLG5bdF09MCxvW3RdPTA7cmV0dXJue2dlb21ldHJ5Om51bGwscHJvZ3JhbTpudWxsLHdpcmVmcmFtZTohMSxuZXdBdHRyaWJ1dGVzOmUsZW5hYmxlZEF0dHJpYnV0ZXM6bixhdHRyaWJ1dGVEaXZpc29yczpvLG9iamVjdDp0LGF0dHJpYnV0ZXM6e30saW5kZXg6bnVsbH19ZnVuY3Rpb24gdSgpe2NvbnN0IHQ9Yy5uZXdBdHRyaWJ1dGVzO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl0W2VdPTB9ZnVuY3Rpb24gZih0KXtnKHQsMCl9ZnVuY3Rpb24gZyhuLGkpe2NvbnN0IGE9Yy5lbmFibGVkQXR0cmlidXRlcyxyPWMuYXR0cmlidXRlRGl2aXNvcnM7Yy5uZXdBdHRyaWJ1dGVzW25dPTEsMD09PWFbbl0mJih0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG4pLGFbbl09MSkscltuXSE9PWkmJigoby5pc1dlYkdMMj90OmUuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpW28uaXNXZWJHTDI/InZlcnRleEF0dHJpYkRpdmlzb3IiOiJ2ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiXShuLGkpLHJbbl09aSl9ZnVuY3Rpb24gaCgpe2NvbnN0IGU9Yy5uZXdBdHRyaWJ1dGVzLG49Yy5lbmFibGVkQXR0cmlidXRlcztmb3IobGV0IG89MCxpPW4ubGVuZ3RoO288aTtvKyspbltvXSE9PWVbb10mJih0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShvKSxuW29dPTApfWZ1bmN0aW9uIGIoZSxuLGksYSxyLHMpeyEwIT09by5pc1dlYkdMMnx8NTEyNCE9PWkmJjUxMjUhPT1pP3QudmVydGV4QXR0cmliUG9pbnRlcihlLG4saSxhLHIscyk6dC52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLG4saSxyLHMpfWZ1bmN0aW9uIHkoKXtfKCksYyE9PWwmJihjPWwsZChjLm9iamVjdCkpfWZ1bmN0aW9uIF8oKXtsLmdlb21ldHJ5PW51bGwsbC5wcm9ncmFtPW51bGwsbC53aXJlZnJhbWU9ITF9cmV0dXJue3NldHVwOmZ1bmN0aW9uIEMoaSxsLHAseSxfKXtsZXQgQz0hMTtpZihyKXtjb25zdCBlPShmdW5jdGlvbiBNKGUsbixpKXtjb25zdCByPSEwPT09aS53aXJlZnJhbWU7bGV0IGw9c1tlLmlkXTt2b2lkIDA9PT1sJiYobD17fSxzW2UuaWRdPWwpO2xldCBjPWxbbi5pZF07dm9pZCAwPT09YyYmKGM9e30sbFtuLmlkXT1jKTtsZXQgZD1jW3JdO3JldHVybiB2b2lkIDA9PT1kJiYoZD1tKChmdW5jdGlvbiBwKCl7cmV0dXJuIG8uaXNXZWJHTDI/dC5jcmVhdGVWZXJ0ZXhBcnJheSgpOmEuY3JlYXRlVmVydGV4QXJyYXlPRVMoKX0pKCkpLGNbcl09ZCksZH0pKHkscCxsKTtjIT09ZSYmKGM9ZSxkKGMub2JqZWN0KSksQz0oZnVuY3Rpb24gdih0LGUpe2NvbnN0IG49Yy5hdHRyaWJ1dGVzLG89dC5hdHRyaWJ1dGVzO2xldCBpPTA7Zm9yKGNvbnN0IHQgaW4gbyl7Y29uc3QgZT1uW3RdLGE9b1t0XTtpZih2b2lkIDA9PT1lKXJldHVybiEwO2lmKGUuYXR0cmlidXRlIT09YSlyZXR1cm4hMDtpZihlLmRhdGEhPT1hLmRhdGEpcmV0dXJuITA7aSsrfXJldHVybiBjLmF0dHJpYnV0ZXNOdW0hPT1pfHxjLmluZGV4IT09ZX0pKHksXyksQyYmKGZ1bmN0aW9uIHgodCxlKXtjb25zdCBuPXt9LG89dC5hdHRyaWJ1dGVzO2xldCBpPTA7Zm9yKGNvbnN0IHQgaW4gbyl7Y29uc3QgZT1vW3RdLGE9e307YS5hdHRyaWJ1dGU9ZSxlLmRhdGEmJihhLmRhdGE9ZS5kYXRhKSxuW3RdPWEsaSsrfWMuYXR0cmlidXRlcz1uLGMuYXR0cmlidXRlc051bT1pLGMuaW5kZXg9ZX0pKHksXyl9ZWxzZXtjb25zdCB0PSEwPT09bC53aXJlZnJhbWU7Yy5nZW9tZXRyeT09PXkuaWQmJmMucHJvZ3JhbT09PXAuaWQmJmMud2lyZWZyYW1lPT09dHx8KGMuZ2VvbWV0cnk9eS5pZCxjLnByb2dyYW09cC5pZCxjLndpcmVmcmFtZT10LEM9ITApfSEwPT09aS5pc0luc3RhbmNlZE1lc2gmJihDPSEwKSxudWxsIT09XyYmbi51cGRhdGUoXywzNDk2MyksQyYmKChmdW5jdGlvbiBPKGksYSxyLHMpe2lmKCExPT09by5pc1dlYkdMMiYmKGkuaXNJbnN0YW5jZWRNZXNofHxzLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpJiZudWxsPT09ZS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlyZXR1cm47dSgpO2NvbnN0IGw9cy5hdHRyaWJ1dGVzLGM9ci5nZXRBdHRyaWJ1dGVzKCksZD1hLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM7Zm9yKGNvbnN0IGUgaW4gYyl7Y29uc3Qgbz1jW2VdO2lmKG8+PTApe2NvbnN0IGE9bFtlXTtpZih2b2lkIDAhPT1hKXtjb25zdCBlPWEubm9ybWFsaXplZCxpPWEuaXRlbVNpemUscj1uLmdldChhKTtpZih2b2lkIDA9PT1yKWNvbnRpbnVlO2NvbnN0IGw9ci5idWZmZXIsYz1yLnR5cGUsZD1yLmJ5dGVzUGVyRWxlbWVudDtpZihhLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe2NvbnN0IG49YS5kYXRhLHI9bi5zdHJpZGUscD1hLm9mZnNldDtuJiZuLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI/KGcobyxuLm1lc2hQZXJBdHRyaWJ1dGUpLHZvaWQgMD09PXMuX21heEluc3RhbmNlQ291bnQmJihzLl9tYXhJbnN0YW5jZUNvdW50PW4ubWVzaFBlckF0dHJpYnV0ZSpuLmNvdW50KSk6ZihvKSx0LmJpbmRCdWZmZXIoMzQ5NjIsbCksYihvLGksYyxlLHIqZCxwKmQpfWVsc2UgYS5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT8oZyhvLGEubWVzaFBlckF0dHJpYnV0ZSksdm9pZCAwPT09cy5fbWF4SW5zdGFuY2VDb3VudCYmKHMuX21heEluc3RhbmNlQ291bnQ9YS5tZXNoUGVyQXR0cmlidXRlKmEuY291bnQpKTpmKG8pLHQuYmluZEJ1ZmZlcigzNDk2MixsKSxiKG8saSxjLGUsMCwwKX1lbHNlIGlmKCJpbnN0YW5jZU1hdHJpeCI9PT1lKXtjb25zdCBlPW4uZ2V0KGkuaW5zdGFuY2VNYXRyaXgpO2lmKHZvaWQgMD09PWUpY29udGludWU7Y29uc3QgYT1lLmJ1ZmZlcixyPWUudHlwZTtnKG8rMCwxKSxnKG8rMSwxKSxnKG8rMiwxKSxnKG8rMywxKSx0LmJpbmRCdWZmZXIoMzQ5NjIsYSksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG8rMCw0LHIsITEsNjQsMCksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG8rMSw0LHIsITEsNjQsMTYpLHQudmVydGV4QXR0cmliUG9pbnRlcihvKzIsNCxyLCExLDY0LDMyKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIobyszLDQsciwhMSw2NCw0OCl9ZWxzZSBpZigiaW5zdGFuY2VDb2xvciI9PT1lKXtjb25zdCBlPW4uZ2V0KGkuaW5zdGFuY2VDb2xvcik7aWYodm9pZCAwPT09ZSljb250aW51ZTtjb25zdCBhPWUuYnVmZmVyLHI9ZS50eXBlO2cobywxKSx0LmJpbmRCdWZmZXIoMzQ5NjIsYSksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG8sMyxyLCExLDEyLDApfWVsc2UgaWYodm9pZCAwIT09ZCl7Y29uc3Qgbj1kW2VdO2lmKHZvaWQgMCE9PW4pc3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDI6dC52ZXJ0ZXhBdHRyaWIyZnYobyxuKTticmVhaztjYXNlIDM6dC52ZXJ0ZXhBdHRyaWIzZnYobyxuKTticmVhaztjYXNlIDQ6dC52ZXJ0ZXhBdHRyaWI0ZnYobyxuKTticmVhaztkZWZhdWx0OnQudmVydGV4QXR0cmliMWZ2KG8sbil9fX19aCgpfSkoaSxsLHAseSksbnVsbCE9PV8mJnQuYmluZEJ1ZmZlcigzNDk2MyxuLmdldChfKS5idWZmZXIpKX0scmVzZXQ6eSxyZXNldERlZmF1bHRTdGF0ZTpfLGRpc3Bvc2U6ZnVuY3Rpb24gTSgpe3koKTtmb3IoY29uc3QgdCBpbiBzKXtjb25zdCBlPXNbdF07Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1lW3RdO2Zvcihjb25zdCB0IGluIG4pcChuW3RdLm9iamVjdCksZGVsZXRlIG5bdF07ZGVsZXRlIGVbdF19ZGVsZXRlIHNbdF19fSxyZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeTpmdW5jdGlvbiB2KHQpe2lmKHZvaWQgMD09PXNbdC5pZF0pcmV0dXJuO2NvbnN0IGU9c1t0LmlkXTtmb3IoY29uc3QgdCBpbiBlKXtjb25zdCBuPWVbdF07Zm9yKGNvbnN0IHQgaW4gbilwKG5bdF0ub2JqZWN0KSxkZWxldGUgblt0XTtkZWxldGUgZVt0XX1kZWxldGUgc1t0LmlkXX0scmVsZWFzZVN0YXRlc09mUHJvZ3JhbTpmdW5jdGlvbiB4KHQpe2Zvcihjb25zdCBlIGluIHMpe2NvbnN0IG49c1tlXTtpZih2b2lkIDA9PT1uW3QuaWRdKWNvbnRpbnVlO2NvbnN0IG89blt0LmlkXTtmb3IoY29uc3QgdCBpbiBvKXAob1t0XS5vYmplY3QpLGRlbGV0ZSBvW3RdO2RlbGV0ZSBuW3QuaWRdfX0saW5pdEF0dHJpYnV0ZXM6dSxlbmFibGVBdHRyaWJ1dGU6ZixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpofX1mdW5jdGlvbiBMc3QodCxlLG4sbyl7Y29uc3QgaT1vLmlzV2ViR0wyO2xldCBhO3RoaXMuc2V0TW9kZT1mdW5jdGlvbiByKHQpe2E9dH0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24gcyhlLG8pe3QuZHJhd0FycmF5cyhhLGUsbyksbi51cGRhdGUobyxhLDEpfSx0aGlzLnJlbmRlckluc3RhbmNlcz1mdW5jdGlvbiBsKG8scixzKXtpZigwPT09cylyZXR1cm47bGV0IGwsYztpZihpKWw9dCxjPSJkcmF3QXJyYXlzSW5zdGFuY2VkIjtlbHNlIGlmKGw9ZS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxjPSJkcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLG51bGw9PT1sKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO2xbY10oYSxvLHIscyksbi51cGRhdGUocixhLHMpfX1mdW5jdGlvbiBCc3QodCxlLG4pe2xldCBvO2Z1bmN0aW9uIGkoZSl7aWYoImhpZ2hwIj09PWUpe2lmKHQuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMzLDM2MzM4KS5wcmVjaXNpb24+MCYmdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzIsMzYzMzgpLnByZWNpc2lvbj4wKXJldHVybiJoaWdocCI7ZT0ibWVkaXVtcCJ9cmV0dXJuIm1lZGl1bXAiPT09ZSYmdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzcpLnByZWNpc2lvbj4wJiZ0LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzNykucHJlY2lzaW9uPjA/Im1lZGl1bXAiOiJsb3dwIn1jb25zdCBhPSJ1bmRlZmluZWQiIT10eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCYmdCBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fCJ1bmRlZmluZWQiIT10eXBlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQmJnQgaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dDtsZXQgcj12b2lkIDAhPT1uLnByZWNpc2lvbj9uLnByZWNpc2lvbjoiaGlnaHAiO2NvbnN0IHM9aShyKTtzIT09ciYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjoiLHIsIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixzLCJpbnN0ZWFkLiIpLHI9cyk7Y29uc3QgbD1hfHxlLmhhcygiV0VCR0xfZHJhd19idWZmZXJzIiksYz0hMD09PW4ubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixkPXQuZ2V0UGFyYW1ldGVyKDM0OTMwKSxwPXQuZ2V0UGFyYW1ldGVyKDM1NjYwKSxtPXQuZ2V0UGFyYW1ldGVyKDMzNzkpLHU9dC5nZXRQYXJhbWV0ZXIoMzQwNzYpLGY9dC5nZXRQYXJhbWV0ZXIoMzQ5MjEpLGc9dC5nZXRQYXJhbWV0ZXIoMzYzNDcpLGg9dC5nZXRQYXJhbWV0ZXIoMzYzNDgpLGI9dC5nZXRQYXJhbWV0ZXIoMzYzNDkpLHk9cD4wLF89YXx8ZS5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iik7cmV0dXJue2lzV2ViR0wyOmEsZHJhd0J1ZmZlcnM6bCxnZXRNYXhBbmlzb3Ryb3B5OmZ1bmN0aW9uIEMoKXtpZih2b2lkIDAhPT1vKXJldHVybiBvO2lmKCEwPT09ZS5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKXtjb25zdCBuPWUuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtvPXQuZ2V0UGFyYW1ldGVyKG4uTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKX1lbHNlIG89MDtyZXR1cm4gb30sZ2V0TWF4UHJlY2lzaW9uOmkscHJlY2lzaW9uOnIsbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpjLG1heFRleHR1cmVzOmQsbWF4VmVydGV4VGV4dHVyZXM6cCxtYXhUZXh0dXJlU2l6ZTptLG1heEN1YmVtYXBTaXplOnUsbWF4QXR0cmlidXRlczpmLG1heFZlcnRleFVuaWZvcm1zOmcsbWF4VmFyeWluZ3M6aCxtYXhGcmFnbWVudFVuaWZvcm1zOmIsdmVydGV4VGV4dHVyZXM6eSxmbG9hdEZyYWdtZW50VGV4dHVyZXM6XyxmbG9hdFZlcnRleFRleHR1cmVzOnkmJl8sbWF4U2FtcGxlczphP3QuZ2V0UGFyYW1ldGVyKDM2MTgzKTowfX1mdW5jdGlvbiBWc3QodCl7Y29uc3QgZT10aGlzO2xldCBuPW51bGwsbz0wLGk9ITEsYT0hMTtjb25zdCByPW5ldyBrc3Qscz1uZXcgJGl0LGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09biYmKGwudmFsdWU9bixsLm5lZWRzVXBkYXRlPW8+MCksZS5udW1QbGFuZXM9byxlLm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIGQodCxuLG8saSl7Y29uc3QgYT1udWxsIT09dD90Lmxlbmd0aDowO2xldCBjPW51bGw7aWYoMCE9PWEpe2lmKGM9bC52YWx1ZSwhMCE9PWl8fG51bGw9PT1jKXtjb25zdCBlPW8rNCphLGk9bi5tYXRyaXhXb3JsZEludmVyc2U7cy5nZXROb3JtYWxNYXRyaXgoaSksKG51bGw9PT1jfHxjLmxlbmd0aDxlKSYmKGM9bmV3IEZsb2F0MzJBcnJheShlKSk7Zm9yKGxldCBlPTAsbj1vO2UhPT1hOysrZSxuKz00KXIuY29weSh0W2VdKS5hcHBseU1hdHJpeDQoaSxzKSxyLm5vcm1hbC50b0FycmF5KGMsbiksY1tuKzNdPXIuY29uc3RhbnR9bC52YWx1ZT1jLGwubmVlZHNVcGRhdGU9ITB9cmV0dXJuIGUubnVtUGxhbmVzPWEsZS5udW1JbnRlcnNlY3Rpb249MCxjfXRoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24odCxlLGEpe2NvbnN0IHI9MCE9PXQubGVuZ3RofHxlfHwwIT09b3x8aTtyZXR1cm4gaT1lLG49ZCh0LGEsMCksbz10Lmxlbmd0aCxyfSx0aGlzLmJlZ2luU2hhZG93cz1mdW5jdGlvbigpe2E9ITAsZChudWxsKX0sdGhpcy5lbmRTaGFkb3dzPWZ1bmN0aW9uKCl7YT0hMSxjKCl9LHRoaXMuc2V0U3RhdGU9ZnVuY3Rpb24oZSxyLHMpe2NvbnN0IHA9ZS5jbGlwcGluZ1BsYW5lcyxtPWUuY2xpcEludGVyc2VjdGlvbix1PWUuY2xpcFNoYWRvd3MsZj10LmdldChlKTtpZighaXx8bnVsbD09PXB8fDA9PT1wLmxlbmd0aHx8YSYmIXUpYT9kKG51bGwpOmMoKTtlbHNle2NvbnN0IHQ9YT8wOm8sZT00KnQ7bGV0IGk9Zi5jbGlwcGluZ1N0YXRlfHxudWxsO2wudmFsdWU9aSxpPWQocCxyLGUscyk7Zm9yKGxldCB0PTA7dCE9PWU7Kyt0KWlbdF09blt0XTtmLmNsaXBwaW5nU3RhdGU9aSx0aGlzLm51bUludGVyc2VjdGlvbj1tP3RoaXMubnVtUGxhbmVzOjAsdGhpcy5udW1QbGFuZXMrPXR9fX1mdW5jdGlvbiBqc3QodCl7bGV0IGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gbih0LGUpe3JldHVybiAzMDM9PT1lP3QubWFwcGluZz1kaXQ6MzA0PT09ZSYmKHQubWFwcGluZz1waXQpLHR9ZnVuY3Rpb24gbyh0KXtjb25zdCBuPXQudGFyZ2V0O24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyk7Y29uc3QgaT1lLmdldChuKTt2b2lkIDAhPT1pJiYoZS5kZWxldGUobiksaS5kaXNwb3NlKCkpfXJldHVybntnZXQ6ZnVuY3Rpb24gaShhKXtpZihhJiZhLmlzVGV4dHVyZSYmITE9PT1hLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSl7Y29uc3QgaT1hLm1hcHBpbmc7aWYoMzAzPT09aXx8MzA0PT09aSl7aWYoZS5oYXMoYSkpcmV0dXJuIG4oZS5nZXQoYSkudGV4dHVyZSxhLm1hcHBpbmcpO3tjb25zdCBpPWEuaW1hZ2U7aWYoaSYmaS5oZWlnaHQ+MCl7Y29uc3Qgcj10LmdldFJlbmRlclRhcmdldCgpLHM9bmV3IHhzdChpLmhlaWdodC8yKTtyZXR1cm4gcy5mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSh0LGEpLGUuc2V0KGEscyksdC5zZXRSZW5kZXJUYXJnZXQociksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxuKHMudGV4dHVyZSxhLm1hcHBpbmcpfXJldHVybiBudWxsfX19cmV0dXJuIGF9LGRpc3Bvc2U6ZnVuY3Rpb24gYSgpe2U9bmV3IFdlYWtNYXB9fX1Jc3QucGh5c2ljYWw9e3VuaWZvcm1zOmdzdChbSXN0LnN0YW5kYXJkLnVuaWZvcm1zLHtjbGVhcmNvYXQ6e3ZhbHVlOjB9LGNsZWFyY29hdE1hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Um91Z2huZXNzOnt2YWx1ZTowfSxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9LGNsZWFyY29hdE5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgUWl0KDEsMSl9LGNsZWFyY29hdE5vcm1hbE1hcDp7dmFsdWU6bnVsbH0sc2hlZW46e3ZhbHVlOm5ldyBScnQoMCl9LHRyYW5zbWlzc2lvbjp7dmFsdWU6MH0sdHJhbnNtaXNzaW9uTWFwOnt2YWx1ZTpudWxsfSx0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTp7dmFsdWU6bmV3IFFpdH0sdHJhbnNtaXNzaW9uU2FtcGxlck1hcDp7dmFsdWU6bnVsbH0sdGhpY2tuZXNzOnt2YWx1ZTowfSx0aGlja25lc3NNYXA6e3ZhbHVlOm51bGx9LGF0dGVudWF0aW9uRGlzdGFuY2U6e3ZhbHVlOjB9LGF0dGVudWF0aW9uVGludDp7dmFsdWU6bmV3IFJydCgwKX0sc3BlY3VsYXJJbnRlbnNpdHk6e3ZhbHVlOjB9LHNwZWN1bGFySW50ZW5zaXR5TWFwOnt2YWx1ZTpudWxsfSxzcGVjdWxhclRpbnQ6e3ZhbHVlOm5ldyBScnQoMSwxLDEpfSxzcGVjdWxhclRpbnRNYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpOc3QubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6TnN0Lm1lc2hwaHlzaWNhbF9mcmFnfTtjbGFzcyBVc3QgZXh0ZW5kcyB5c3R7Y29uc3RydWN0b3IodD0tMSxlPTEsbj0xLG89LTEsaT0uMSxhPTJlMyl7c3VwZXIoKSx0aGlzLnR5cGU9Ik9ydGhvZ3JhcGhpY0NhbWVyYSIsdGhpcy56b29tPTEsdGhpcy52aWV3PW51bGwsdGhpcy5sZWZ0PXQsdGhpcy5yaWdodD1lLHRoaXMudG9wPW4sdGhpcy5ib3R0b209byx0aGlzLm5lYXI9aSx0aGlzLmZhcj1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLHRoaXMubGVmdD10LmxlZnQsdGhpcy5yaWdodD10LnJpZ2h0LHRoaXMudG9wPXQudG9wLHRoaXMuYm90dG9tPXQuYm90dG9tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy56b29tPXQuem9vbSx0aGlzLnZpZXc9bnVsbD09PXQudmlldz9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzfXNldFZpZXdPZmZzZXQodCxlLG4sbyxpLGEpe251bGw9PT10aGlzLnZpZXcmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1lLHRoaXMudmlldy5vZmZzZXRYPW4sdGhpcy52aWV3Lm9mZnNldFk9byx0aGlzLnZpZXcud2lkdGg9aSx0aGlzLnZpZXcuaGVpZ2h0PWEsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7bnVsbCE9PXRoaXMudmlldyYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7Y29uc3QgdD0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksZT0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksbj0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIsbz0odGhpcy50b3ArdGhpcy5ib3R0b20pLzI7bGV0IGk9bi10LGE9bit0LHI9bytlLHM9by1lO2lmKG51bGwhPT10aGlzLnZpZXcmJnRoaXMudmlldy5lbmFibGVkKXtjb25zdCB0PSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvdGhpcy52aWV3LmZ1bGxXaWR0aC90aGlzLnpvb20sZT0odGhpcy50b3AtdGhpcy5ib3R0b20pL3RoaXMudmlldy5mdWxsSGVpZ2h0L3RoaXMuem9vbTtpKz10KnRoaXMudmlldy5vZmZzZXRYLGE9aSt0KnRoaXMudmlldy53aWR0aCxyLT1lKnRoaXMudmlldy5vZmZzZXRZLHM9ci1lKnRoaXMudmlldy5oZWlnaHR9dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VPcnRob2dyYXBoaWMoaSxhLHIscyx0aGlzLm5lYXIsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfXRvSlNPTih0KXtjb25zdCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Quem9vbT10aGlzLnpvb20sZS5vYmplY3QubGVmdD10aGlzLmxlZnQsZS5vYmplY3QucmlnaHQ9dGhpcy5yaWdodCxlLm9iamVjdC50b3A9dGhpcy50b3AsZS5vYmplY3QuYm90dG9tPXRoaXMuYm90dG9tLGUub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLGUub2JqZWN0LmZhcj10aGlzLmZhcixudWxsIT09dGhpcy52aWV3JiYoZS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLGV9fVVzdC5wcm90b3R5cGUuaXNPcnRob2dyYXBoaWNDYW1lcmE9ITA7Y2xhc3MgR3N0IGV4dGVuZHMgYnN0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudHlwZT0iUmF3U2hhZGVyTWF0ZXJpYWwifX1Hc3QucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITA7Y29uc3QgV3N0PU1hdGgucG93KDIsOCksWXN0PVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSxxc3Q9NStZc3QubGVuZ3RoLFpzdD17W3ppdF06MCxbSWl0XToxLFtGaXRdOjIsMzAwNDozLDMwMDU6NCwzMDA2OjUsW0hpdF06Nn0sWHN0PW5ldyBBcnQoe3NpZGU6MSxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pLEtzdD1uZXcgcHN0KG5ldyB1c3QsWHN0KSxKc3Q9bmV3IFVzdCx7X2xvZFBsYW5lczpRc3QsX3NpemVMb2RzOiRzdCxfc2lnbWFzOnRsdH09Y2x0KCksZWx0PW5ldyBScnQ7bGV0IG5sdD1udWxsO2NvbnN0IG9sdD0oMStNYXRoLnNxcnQoNSkpLzIsaWx0PTEvb2x0LGFsdD1bbmV3IGNhdCgxLDEsMSksbmV3IGNhdCgtMSwxLDEpLG5ldyBjYXQoMSwxLC0xKSxuZXcgY2F0KC0xLDEsLTEpLG5ldyBjYXQoMCxvbHQsaWx0KSxuZXcgY2F0KDAsb2x0LC1pbHQpLG5ldyBjYXQoaWx0LDAsb2x0KSxuZXcgY2F0KC1pbHQsMCxvbHQpLG5ldyBjYXQob2x0LGlsdCwwKSxuZXcgY2F0KC1vbHQsaWx0LDApXTtmdW5jdGlvbiBybHQodCl7Y29uc3QgZT1NYXRoLm1heCh0LnIsdC5nLHQuYiksbj1NYXRoLm1pbihNYXRoLm1heChNYXRoLmNlaWwoTWF0aC5sb2cyKGUpKSwtMTI4KSwxMjcpO3JldHVybiB0Lm11bHRpcGx5U2NhbGFyKE1hdGgucG93KDIsLW4pKSwobisxMjgpLzI1NX1jbGFzcyBzbHR7Y29uc3RydWN0b3IodCl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1udWxsLHRoaXMuX2JsdXJNYXRlcmlhbD0oZnVuY3Rpb24gZSh0KXtjb25zdCBlPW5ldyBGbG9hdDMyQXJyYXkodCksbj1uZXcgY2F0KDAsMSwwKTtyZXR1cm4gbmV3IEdzdCh7bmFtZToiU3BoZXJpY2FsR2F1c3NpYW5CbHVyIixkZWZpbmVzOntuOnR9LHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHNhbXBsZXM6e3ZhbHVlOjF9LHdlaWdodHM6e3ZhbHVlOmV9LGxhdGl0dWRpbmFsOnt2YWx1ZTohMX0sZFRoZXRhOnt2YWx1ZTowfSxtaXBJbnQ6e3ZhbHVlOjB9LHBvbGVBeGlzOnt2YWx1ZTpufSxpbnB1dEVuY29kaW5nOnt2YWx1ZTpac3RbM2UzXX0sb3V0cHV0RW5jb2Rpbmc6e3ZhbHVlOlpzdFszZTNdfX0sdmVydGV4U2hhZGVyOiJcblxuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXHRcdGF0dHJpYnV0ZSB2ZWMyIHV2O1xuXHRcdGF0dHJpYnV0ZSBmbG9hdCBmYWNlSW5kZXg7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdC8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb25cblx0XHR2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcblxuXHRcdFx0dXYgPSAyLjAgKiB1diAtIDEuMDtcblxuXHRcdFx0dmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XG5cblx0XHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLXUsIDEsIC12ICkgcG9zIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC0xLCB2LCAtdSApIG5lZyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXJlY3Rpb247XG5cblx0XHR9XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXG5cdFx0fVxuXHQiLGZyYWdtZW50U2hhZGVyOiJcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdFx0XHR1bmlmb3JtIGludCBzYW1wbGVzO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCB3ZWlnaHRzWyBuIF07XG5cdFx0XHR1bmlmb3JtIGJvb2wgbGF0aXR1ZGluYWw7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IGRUaGV0YTtcblx0XHRcdHVuaWZvcm0gZmxvYXQgbWlwSW50O1xuXHRcdFx0dW5pZm9ybSB2ZWMzIHBvbGVBeGlzO1xuXG5cdFx0XHRcblxuXHRcdHVuaWZvcm0gaW50IGlucHV0RW5jb2Rpbmc7XG5cdFx0dW5pZm9ybSBpbnQgb3V0cHV0RW5jb2Rpbmc7XG5cblx0XHQjaW5jbHVkZSA8ZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ+XG5cblx0XHR2ZWM0IGlucHV0VGV4ZWxUb0xpbmVhciggdmVjNCB2YWx1ZSApIHtcblxuXHRcdFx0aWYgKCBpbnB1dEVuY29kaW5nID09IDAgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDEgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHNSR0JUb0xpbmVhciggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSAyICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JFVG9MaW5lYXIoIHZhbHVlICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gMyApIHtcblxuXHRcdFx0XHRyZXR1cm4gUkdCTVRvTGluZWFyKCB2YWx1ZSwgNy4wICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gNCApIHtcblxuXHRcdFx0XHRyZXR1cm4gUkdCTVRvTGluZWFyKCB2YWx1ZSwgMTYuMCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDUgKSB7XG5cblx0XHRcdFx0cmV0dXJuIFJHQkRUb0xpbmVhciggdmFsdWUsIDI1Ni4wICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0cmV0dXJuIEdhbW1hVG9MaW5lYXIoIHZhbHVlLCAyLjIgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0dmVjNCBsaW5lYXJUb091dHB1dFRleGVsKCB2ZWM0IHZhbHVlICkge1xuXG5cdFx0XHRpZiAoIG91dHB1dEVuY29kaW5nID09IDAgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSAxICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb3NSR0IoIHZhbHVlICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDIgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvUkdCRSggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMyApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JNKCB2YWx1ZSwgNy4wICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvUkdCTSggdmFsdWUsIDE2LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gNSApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JEKCB2YWx1ZSwgMjU2LjAgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9HYW1tYSggdmFsdWUsIDIuMiApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHR2ZWM0IGVudk1hcFRleGVsVG9MaW5lYXIoIHZlYzQgY29sb3IgKSB7XG5cblx0XHRcdHJldHVybiBpbnB1dFRleGVsVG9MaW5lYXIoIGNvbG9yICk7XG5cblx0XHR9XG5cdFxuXG5cdFx0XHQjZGVmaW5lIEVOVk1BUF9UWVBFX0NVQkVfVVZcblx0XHRcdCNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG5cblx0XHRcdHZlYzMgZ2V0U2FtcGxlKCBmbG9hdCB0aGV0YSwgdmVjMyBheGlzICkge1xuXG5cdFx0XHRcdGZsb2F0IGNvc1RoZXRhID0gY29zKCB0aGV0YSApO1xuXHRcdFx0XHQvLyBSb2RyaWd1ZXMnIGF4aXMtYW5nbGUgcm90YXRpb25cblx0XHRcdFx0dmVjMyBzYW1wbGVEaXJlY3Rpb24gPSB2T3V0cHV0RGlyZWN0aW9uICogY29zVGhldGFcblx0XHRcdFx0XHQrIGNyb3NzKCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiBzaW4oIHRoZXRhIClcblx0XHRcdFx0XHQrIGF4aXMgKiBkb3QoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqICggMS4wIC0gY29zVGhldGEgKTtcblxuXHRcdFx0XHRyZXR1cm4gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyZWN0aW9uLCBtaXBJbnQgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0dmVjMyBheGlzID0gbGF0aXR1ZGluYWwgPyBwb2xlQXhpcyA6IGNyb3NzKCBwb2xlQXhpcywgdk91dHB1dERpcmVjdGlvbiApO1xuXG5cdFx0XHRcdGlmICggYWxsKCBlcXVhbCggYXhpcywgdmVjMyggMC4wICkgKSApICkge1xuXG5cdFx0XHRcdFx0YXhpcyA9IHZlYzMoIHZPdXRwdXREaXJlY3Rpb24ueiwgMC4wLCAtIHZPdXRwdXREaXJlY3Rpb24ueCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRheGlzID0gbm9ybWFsaXplKCBheGlzICk7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgMCBdICogZ2V0U2FtcGxlKCAwLjAsIGF4aXMgKTtcblxuXHRcdFx0XHRmb3IgKCBpbnQgaSA9IDE7IGkgPCBuOyBpKysgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGkgPj0gc2FtcGxlcyApIHtcblxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmbG9hdCB0aGV0YSA9IGRUaGV0YSAqIGZsb2F0KCBpICk7XG5cdFx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIC0xLjAgKiB0aGV0YSwgYXhpcyApO1xuXHRcdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCB0aGV0YSwgYXhpcyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSBsaW5lYXJUb091dHB1dFRleGVsKCBnbF9GcmFnQ29sb3IgKTtcblxuXHRcdFx0fVxuXHRcdCIsYmxlbmRpbmc6MCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfSkoMjApLHRoaXMuX2VxdWlyZWN0U2hhZGVyPW51bGwsdGhpcy5fY3ViZW1hcFNoYWRlcj1udWxsLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9ibHVyTWF0ZXJpYWwpfWZyb21TY2VuZSh0LGU9MCxuPS4xLG89MTAwKXtubHQ9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7Y29uc3QgaT10aGlzLl9hbGxvY2F0ZVRhcmdldHMoKTtyZXR1cm4gdGhpcy5fc2NlbmVUb0N1YmVVVih0LG4sbyxpKSxlPjAmJnRoaXMuX2JsdXIoaSwwLDAsZSksdGhpcy5fYXBwbHlQTVJFTShpKSx0aGlzLl9jbGVhbnVwKGkpLGl9ZnJvbUVxdWlyZWN0YW5ndWxhcih0KXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCl9ZnJvbUN1YmVtYXAodCl7cmV0dXJuIHRoaXMuX2Zyb21UZXh0dXJlKHQpfWNvbXBpbGVDdWJlbWFwU2hhZGVyKCl7bnVsbD09PXRoaXMuX2N1YmVtYXBTaGFkZXImJih0aGlzLl9jdWJlbWFwU2hhZGVyPXVsdCgpLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9jdWJlbWFwU2hhZGVyKSl9Y29tcGlsZUVxdWlyZWN0YW5ndWxhclNoYWRlcigpe251bGw9PT10aGlzLl9lcXVpcmVjdFNoYWRlciYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPW1sdCgpLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9lcXVpcmVjdFNoYWRlcikpfWRpc3Bvc2UoKXt0aGlzLl9ibHVyTWF0ZXJpYWwuZGlzcG9zZSgpLG51bGwhPT10aGlzLl9jdWJlbWFwU2hhZGVyJiZ0aGlzLl9jdWJlbWFwU2hhZGVyLmRpc3Bvc2UoKSxudWxsIT09dGhpcy5fZXF1aXJlY3RTaGFkZXImJnRoaXMuX2VxdWlyZWN0U2hhZGVyLmRpc3Bvc2UoKTtmb3IobGV0IHQ9MDt0PFFzdC5sZW5ndGg7dCsrKVFzdFt0XS5kaXNwb3NlKCl9X2NsZWFudXAodCl7dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQuZGlzcG9zZSgpLHRoaXMuX3JlbmRlcmVyLnNldFJlbmRlclRhcmdldChubHQpLHQuc2Npc3NvclRlc3Q9ITEscGx0KHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpfV9mcm9tVGV4dHVyZSh0KXtubHQ9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7Y29uc3QgZT10aGlzLl9hbGxvY2F0ZVRhcmdldHModCk7cmV0dXJuIHRoaXMuX3RleHR1cmVUb0N1YmVVVih0LGUpLHRoaXMuX2FwcGx5UE1SRU0oZSksdGhpcy5fY2xlYW51cChlKSxlfV9hbGxvY2F0ZVRhcmdldHModCl7Y29uc3QgZT17bWFnRmlsdGVyOmhpdCxtaW5GaWx0ZXI6aGl0LGdlbmVyYXRlTWlwbWFwczohMSx0eXBlOl9pdCxmb3JtYXQ6MTAyMyxlbmNvZGluZzpsbHQodCk/dC5lbmNvZGluZzpGaXQsZGVwdGhCdWZmZXI6ITF9LG49ZGx0KGUpO3JldHVybiBuLmRlcHRoQnVmZmVyPSF0LHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0PWRsdChlKSxufV9jb21waWxlTWF0ZXJpYWwodCl7Y29uc3QgZT1uZXcgcHN0KFFzdFswXSx0KTt0aGlzLl9yZW5kZXJlci5jb21waWxlKGUsSnN0KX1fc2NlbmVUb0N1YmVVVih0LGUsbixvKXtjb25zdCBpPW5ldyBfc3QoOTAsMSxlLG4pLGE9WzEsLTEsMSwxLDEsMV0scj1bMSwxLDEsLTEsLTEsLTFdLHM9dGhpcy5fcmVuZGVyZXIsbD1zLmF1dG9DbGVhcixjPXMub3V0cHV0RW5jb2RpbmcsZD1zLnRvbmVNYXBwaW5nO3MuZ2V0Q2xlYXJDb2xvcihlbHQpLHMudG9uZU1hcHBpbmc9MCxzLm91dHB1dEVuY29kaW5nPXppdCxzLmF1dG9DbGVhcj0hMTtsZXQgcD0hMTtjb25zdCBtPXQuYmFja2dyb3VuZDtpZihtKXtpZihtLmlzQ29sb3Ipe1hzdC5jb2xvci5jb3B5KG0pLmNvbnZlcnRTUkdCVG9MaW5lYXIoKSx0LmJhY2tncm91bmQ9bnVsbDtjb25zdCBlPXJsdChYc3QuY29sb3IpO1hzdC5vcGFjaXR5PWUscD0hMH19ZWxzZXtYc3QuY29sb3IuY29weShlbHQpLmNvbnZlcnRTUkdCVG9MaW5lYXIoKTtjb25zdCB0PXJsdChYc3QuY29sb3IpO1hzdC5vcGFjaXR5PXQscD0hMH1mb3IobGV0IGU9MDtlPDY7ZSsrKXtjb25zdCBuPWUlMzswPT1uPyhpLnVwLnNldCgwLGFbZV0sMCksaS5sb29rQXQocltlXSwwLDApKToxPT1uPyhpLnVwLnNldCgwLDAsYVtlXSksaS5sb29rQXQoMCxyW2VdLDApKTooaS51cC5zZXQoMCxhW2VdLDApLGkubG9va0F0KDAsMCxyW2VdKSkscGx0KG8sbipXc3QsZT4yP1dzdDowLFdzdCxXc3QpLHMuc2V0UmVuZGVyVGFyZ2V0KG8pLHAmJnMucmVuZGVyKEtzdCxpKSxzLnJlbmRlcih0LGkpfXMudG9uZU1hcHBpbmc9ZCxzLm91dHB1dEVuY29kaW5nPWMscy5hdXRvQ2xlYXI9bH1fdGV4dHVyZVRvQ3ViZVVWKHQsZSl7Y29uc3Qgbj10aGlzLl9yZW5kZXJlcjt0LmlzQ3ViZVRleHR1cmU/bnVsbD09dGhpcy5fY3ViZW1hcFNoYWRlciYmKHRoaXMuX2N1YmVtYXBTaGFkZXI9dWx0KCkpOm51bGw9PXRoaXMuX2VxdWlyZWN0U2hhZGVyJiYodGhpcy5fZXF1aXJlY3RTaGFkZXI9bWx0KCkpO2NvbnN0IG89dC5pc0N1YmVUZXh0dXJlP3RoaXMuX2N1YmVtYXBTaGFkZXI6dGhpcy5fZXF1aXJlY3RTaGFkZXIsaT1uZXcgcHN0KFFzdFswXSxvKSxhPW8udW5pZm9ybXM7YS5lbnZNYXAudmFsdWU9dCx0LmlzQ3ViZVRleHR1cmV8fGEudGV4ZWxTaXplLnZhbHVlLnNldCgxL3QuaW1hZ2Uud2lkdGgsMS90LmltYWdlLmhlaWdodCksYS5pbnB1dEVuY29kaW5nLnZhbHVlPVpzdFt0LmVuY29kaW5nXSxhLm91dHB1dEVuY29kaW5nLnZhbHVlPVpzdFtlLnRleHR1cmUuZW5jb2RpbmddLHBsdChlLDAsMCwzKldzdCwyKldzdCksbi5zZXRSZW5kZXJUYXJnZXQoZSksbi5yZW5kZXIoaSxKc3QpfV9hcHBseVBNUkVNKHQpe2NvbnN0IGU9dGhpcy5fcmVuZGVyZXIsbj1lLmF1dG9DbGVhcjtlLmF1dG9DbGVhcj0hMTtmb3IobGV0IGU9MTtlPHFzdDtlKyspe2NvbnN0IG49TWF0aC5zcXJ0KHRsdFtlXSp0bHRbZV0tdGx0W2UtMV0qdGx0W2UtMV0pO3RoaXMuX2JsdXIodCxlLTEsZSxuLGFsdFsoZS0xKSVhbHQubGVuZ3RoXSl9ZS5hdXRvQ2xlYXI9bn1fYmx1cih0LGUsbixvLGkpe2NvbnN0IGE9dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ7dGhpcy5faGFsZkJsdXIodCxhLGUsbixvLCJsYXRpdHVkaW5hbCIsaSksdGhpcy5faGFsZkJsdXIoYSx0LG4sbixvLCJsb25naXR1ZGluYWwiLGkpfV9oYWxmQmx1cih0LGUsbixvLGksYSxyKXtjb25zdCBzPXRoaXMuX3JlbmRlcmVyLGw9dGhpcy5fYmx1ck1hdGVyaWFsOyJsYXRpdHVkaW5hbCIhPT1hJiYibG9uZ2l0dWRpbmFsIiE9PWEmJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtjb25zdCBjPW5ldyBwc3QoUXN0W29dLGwpLGQ9bC51bmlmb3JtcyxwPSRzdFtuXS0xLG09aXNGaW5pdGUoaSk/TWF0aC5QSS8oMipwKToyKk1hdGguUEkvMzksdT1pL20sZj1pc0Zpbml0ZShpKT8xK01hdGguZmxvb3IoMyp1KToyMDtmPjIwJiZjb25zb2xlLndhcm4oYHNpZ21hUmFkaWFucywgJHtpfSwgaXMgdG9vIGxhcmdlIGFuZCB3aWxsIGNsaXAsIGFzIGl0IHJlcXVlc3RlZCAke2Z9IHNhbXBsZXMgd2hlbiB0aGUgbWF4aW11bSBpcyBzZXQgdG8gMjBgKTtjb25zdCBnPVtdO2xldCBoPTA7Zm9yKGxldCB0PTA7dDwyMDsrK3Qpe2NvbnN0IGU9dC91LG49TWF0aC5leHAoLWUqZS8yKTtnLnB1c2gobiksMD09dD9oKz1uOnQ8ZiYmKGgrPTIqbil9Zm9yKGxldCB0PTA7dDxnLmxlbmd0aDt0KyspZ1t0XT1nW3RdL2g7ZC5lbnZNYXAudmFsdWU9dC50ZXh0dXJlLGQuc2FtcGxlcy52YWx1ZT1mLGQud2VpZ2h0cy52YWx1ZT1nLGQubGF0aXR1ZGluYWwudmFsdWU9ImxhdGl0dWRpbmFsIj09PWEsciYmKGQucG9sZUF4aXMudmFsdWU9ciksZC5kVGhldGEudmFsdWU9bSxkLm1pcEludC52YWx1ZT04LW4sZC5pbnB1dEVuY29kaW5nLnZhbHVlPVpzdFt0LnRleHR1cmUuZW5jb2RpbmddLGQub3V0cHV0RW5jb2RpbmcudmFsdWU9WnN0W3QudGV4dHVyZS5lbmNvZGluZ107Y29uc3QgYj0kc3Rbb107cGx0KGUsMypNYXRoLm1heCgwLFdzdC0yKmIpLCgwPT09bz8wOjIqV3N0KSsyKmIqKG8+ND9vLTgrNDowKSwzKmIsMipiKSxzLnNldFJlbmRlclRhcmdldChlKSxzLnJlbmRlcihjLEpzdCl9fWZ1bmN0aW9uIGxsdCh0KXtyZXR1cm4gdm9pZCAwIT09dCYmdC50eXBlPT09X2l0JiYodC5lbmNvZGluZz09PXppdHx8dC5lbmNvZGluZz09PUlpdHx8dC5lbmNvZGluZz09PUhpdCl9ZnVuY3Rpb24gY2x0KCl7Y29uc3QgdD1bXSxlPVtdLG49W107bGV0IG89ODtmb3IobGV0IGk9MDtpPHFzdDtpKyspe2NvbnN0IGE9TWF0aC5wb3coMixvKTtlLnB1c2goYSk7bGV0IHI9MS9hO2k+ND9yPVlzdFtpLTgrNC0xXTowPT1pJiYocj0wKSxuLnB1c2gocik7Y29uc3Qgcz0xLyhhLTEpLGw9LXMvMixjPTErcy8yLGQ9W2wsbCxjLGwsYyxjLGwsbCxjLGMsbCxjXSxwPTYsbT02LHU9MyxmPTIsZz0xLGg9bmV3IEZsb2F0MzJBcnJheSh1Km0qcCksYj1uZXcgRmxvYXQzMkFycmF5KGYqbSpwKSx5PW5ldyBGbG9hdDMyQXJyYXkoZyptKnApO2ZvcihsZXQgdD0wO3Q8cDt0Kyspe2NvbnN0IGU9dCUzKjIvMy0xLG49dD4yPzA6LTE7aC5zZXQoW2UsbiwwLGUrMi8zLG4sMCxlKzIvMyxuKzEsMCxlLG4sMCxlKzIvMyxuKzEsMCxlLG4rMSwwXSx1Km0qdCksYi5zZXQoZCxmKm0qdCkseS5zZXQoW3QsdCx0LHQsdCx0XSxnKm0qdCl9Y29uc3QgXz1uZXcgcXJ0O18uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHpydChoLHUpKSxfLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB6cnQoYixmKSksXy5zZXRBdHRyaWJ1dGUoImZhY2VJbmRleCIsbmV3IHpydCh5LGcpKSx0LnB1c2goXyksbz40JiZvLS19cmV0dXJue19sb2RQbGFuZXM6dCxfc2l6ZUxvZHM6ZSxfc2lnbWFzOm59fWZ1bmN0aW9uIGRsdCh0KXtjb25zdCBlPW5ldyByYXQoMypXc3QsMypXc3QsdCk7cmV0dXJuIGUudGV4dHVyZS5tYXBwaW5nPW1pdCxlLnRleHR1cmUubmFtZT0iUE1SRU0uY3ViZVV2IixlLnNjaXNzb3JUZXN0PSEwLGV9ZnVuY3Rpb24gcGx0KHQsZSxuLG8saSl7dC52aWV3cG9ydC5zZXQoZSxuLG8saSksdC5zY2lzc29yLnNldChlLG4sbyxpKX1mdW5jdGlvbiBtbHQoKXtjb25zdCB0PW5ldyBRaXQoMSwxKTtyZXR1cm4gbmV3IEdzdCh7bmFtZToiRXF1aXJlY3Rhbmd1bGFyVG9DdWJlVVYiLHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHRleGVsU2l6ZTp7dmFsdWU6dH0saW5wdXRFbmNvZGluZzp7dmFsdWU6WnN0WzNlM119LG91dHB1dEVuY29kaW5nOnt2YWx1ZTpac3RbM2UzXX19LHZlcnRleFNoYWRlcjoiXG5cblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblx0XHRhdHRyaWJ1dGUgdmVjMiB1djtcblx0XHRhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4O1xuXG5cdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHQvLyBSSCBjb29yZGluYXRlIHN5c3RlbTsgUE1SRU0gZmFjZS1pbmRleGluZyBjb252ZW50aW9uXG5cdFx0dmVjMyBnZXREaXJlY3Rpb24oIHZlYzIgdXYsIGZsb2F0IGZhY2UgKSB7XG5cblx0XHRcdHV2ID0gMi4wICogdXYgLSAxLjA7XG5cblx0XHRcdHZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApO1xuXG5cdFx0XHRpZiAoIGZhY2UgPT0gMC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7IC8vICggMSwgdiwgdSApIHBvcyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi54ICo9IC0xLjA7IC8vICggLXUsIHYsIDEgKSBwb3MgelxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHpcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uO1xuXG5cdFx0fVxuXG5cdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHR2T3V0cHV0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKCB1diwgZmFjZUluZGV4ICk7XG5cdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblxuXHRcdH1cblx0IixmcmFnbWVudFNoYWRlcjoiXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHRcdFx0dW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTtcblxuXHRcdFx0XG5cblx0XHR1bmlmb3JtIGludCBpbnB1dEVuY29kaW5nO1xuXHRcdHVuaWZvcm0gaW50IG91dHB1dEVuY29kaW5nO1xuXG5cdFx0I2luY2x1ZGUgPGVuY29kaW5nc19wYXJzX2ZyYWdtZW50PlxuXG5cdFx0dmVjNCBpbnB1dFRleGVsVG9MaW5lYXIoIHZlYzQgdmFsdWUgKSB7XG5cblx0XHRcdGlmICggaW5wdXRFbmNvZGluZyA9PSAwICkge1xuXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSAxICkge1xuXG5cdFx0XHRcdHJldHVybiBzUkdCVG9MaW5lYXIoIHZhbHVlICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gMiApIHtcblxuXHRcdFx0XHRyZXR1cm4gUkdCRVRvTGluZWFyKCB2YWx1ZSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDMgKSB7XG5cblx0XHRcdFx0cmV0dXJuIFJHQk1Ub0xpbmVhciggdmFsdWUsIDcuMCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIFJHQk1Ub0xpbmVhciggdmFsdWUsIDE2LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSA1ICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JEVG9MaW5lYXIoIHZhbHVlLCAyNTYuMCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHJldHVybiBHYW1tYVRvTGluZWFyKCB2YWx1ZSwgMi4yICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHZlYzQgbGluZWFyVG9PdXRwdXRUZXhlbCggdmVjNCB2YWx1ZSApIHtcblxuXHRcdFx0aWYgKCBvdXRwdXRFbmNvZGluZyA9PSAwICkge1xuXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMSApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9zUkdCKCB2YWx1ZSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSAyICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb1JHQkUoIHZhbHVlICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDMgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvUkdCTSggdmFsdWUsIDcuMCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSA0ICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb1JHQk0oIHZhbHVlLCAxNi4wICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDUgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvUkdCRCggdmFsdWUsIDI1Ni4wICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvR2FtbWEoIHZhbHVlLCAyLjIgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0dmVjNCBlbnZNYXBUZXhlbFRvTGluZWFyKCB2ZWM0IGNvbG9yICkge1xuXG5cdFx0XHRyZXR1cm4gaW5wdXRUZXhlbFRvTGluZWFyKCBjb2xvciApO1xuXG5cdFx0fVxuXHRcblxuXHRcdFx0I2luY2x1ZGUgPGNvbW1vbj5cblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXG5cdFx0XHRcdHZlYzMgb3V0cHV0RGlyZWN0aW9uID0gbm9ybWFsaXplKCB2T3V0cHV0RGlyZWN0aW9uICk7XG5cdFx0XHRcdHZlYzIgdXYgPSBlcXVpcmVjdFV2KCBvdXRwdXREaXJlY3Rpb24gKTtcblxuXHRcdFx0XHR2ZWMyIGYgPSBmcmFjdCggdXYgLyB0ZXhlbFNpemUgLSAwLjUgKTtcblx0XHRcdFx0dXYgLT0gZiAqIHRleGVsU2l6ZTtcblx0XHRcdFx0dmVjMyB0bCA9IGVudk1hcFRleGVsVG9MaW5lYXIoIHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKSApLnJnYjtcblx0XHRcdFx0dXYueCArPSB0ZXhlbFNpemUueDtcblx0XHRcdFx0dmVjMyB0ciA9IGVudk1hcFRleGVsVG9MaW5lYXIoIHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKSApLnJnYjtcblx0XHRcdFx0dXYueSArPSB0ZXhlbFNpemUueTtcblx0XHRcdFx0dmVjMyBiciA9IGVudk1hcFRleGVsVG9MaW5lYXIoIHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKSApLnJnYjtcblx0XHRcdFx0dXYueCAtPSB0ZXhlbFNpemUueDtcblx0XHRcdFx0dmVjMyBibCA9IGVudk1hcFRleGVsVG9MaW5lYXIoIHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKSApLnJnYjtcblxuXHRcdFx0XHR2ZWMzIHRtID0gbWl4KCB0bCwgdHIsIGYueCApO1xuXHRcdFx0XHR2ZWMzIGJtID0gbWl4KCBibCwgYnIsIGYueCApO1xuXHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCB0bSwgYm0sIGYueSApO1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApO1xuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gdWx0KCl7cmV0dXJuIG5ldyBHc3Qoe25hbWU6IkN1YmVtYXBUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0saW5wdXRFbmNvZGluZzp7dmFsdWU6WnN0WzNlM119LG91dHB1dEVuY29kaW5nOnt2YWx1ZTpac3RbM2UzXX19LHZlcnRleFNoYWRlcjoiXG5cblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblx0XHRhdHRyaWJ1dGUgdmVjMiB1djtcblx0XHRhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4O1xuXG5cdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHQvLyBSSCBjb29yZGluYXRlIHN5c3RlbTsgUE1SRU0gZmFjZS1pbmRleGluZyBjb252ZW50aW9uXG5cdFx0dmVjMyBnZXREaXJlY3Rpb24oIHZlYzIgdXYsIGZsb2F0IGZhY2UgKSB7XG5cblx0XHRcdHV2ID0gMi4wICogdXYgLSAxLjA7XG5cblx0XHRcdHZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApO1xuXG5cdFx0XHRpZiAoIGZhY2UgPT0gMC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7IC8vICggMSwgdiwgdSApIHBvcyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi54ICo9IC0xLjA7IC8vICggLXUsIHYsIDEgKSBwb3MgelxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHpcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uO1xuXG5cdFx0fVxuXG5cdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHR2T3V0cHV0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKCB1diwgZmFjZUluZGV4ICk7XG5cdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblxuXHRcdH1cblx0IixmcmFnbWVudFNoYWRlcjoiXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdFx0dW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7XG5cblx0XHRcdFxuXG5cdFx0dW5pZm9ybSBpbnQgaW5wdXRFbmNvZGluZztcblx0XHR1bmlmb3JtIGludCBvdXRwdXRFbmNvZGluZztcblxuXHRcdCNpbmNsdWRlIDxlbmNvZGluZ3NfcGFyc19mcmFnbWVudD5cblxuXHRcdHZlYzQgaW5wdXRUZXhlbFRvTGluZWFyKCB2ZWM0IHZhbHVlICkge1xuXG5cdFx0XHRpZiAoIGlucHV0RW5jb2RpbmcgPT0gMCApIHtcblxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gMSApIHtcblxuXHRcdFx0XHRyZXR1cm4gc1JHQlRvTGluZWFyKCB2YWx1ZSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBpbnB1dEVuY29kaW5nID09IDIgKSB7XG5cblx0XHRcdFx0cmV0dXJuIFJHQkVUb0xpbmVhciggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSAzICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JNVG9MaW5lYXIoIHZhbHVlLCA3LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaW5wdXRFbmNvZGluZyA9PSA0ICkge1xuXG5cdFx0XHRcdHJldHVybiBSR0JNVG9MaW5lYXIoIHZhbHVlLCAxNi4wICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGlucHV0RW5jb2RpbmcgPT0gNSApIHtcblxuXHRcdFx0XHRyZXR1cm4gUkdCRFRvTGluZWFyKCB2YWx1ZSwgMjU2LjAgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRyZXR1cm4gR2FtbWFUb0xpbmVhciggdmFsdWUsIDIuMiApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHR2ZWM0IGxpbmVhclRvT3V0cHV0VGV4ZWwoIHZlYzQgdmFsdWUgKSB7XG5cblx0XHRcdGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMCApIHtcblxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRcdH0gZWxzZSBpZiAoIG91dHB1dEVuY29kaW5nID09IDEgKSB7XG5cblx0XHRcdFx0cmV0dXJuIExpbmVhclRvc1JHQiggdmFsdWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gMiApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JFKCB2YWx1ZSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSAzICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb1JHQk0oIHZhbHVlLCA3LjAgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggb3V0cHV0RW5jb2RpbmcgPT0gNCApIHtcblxuXHRcdFx0XHRyZXR1cm4gTGluZWFyVG9SR0JNKCB2YWx1ZSwgMTYuMCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBvdXRwdXRFbmNvZGluZyA9PSA1ICkge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb1JHQkQoIHZhbHVlLCAyNTYuMCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdHJldHVybiBMaW5lYXJUb0dhbW1hKCB2YWx1ZSwgMi4yICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHZlYzQgZW52TWFwVGV4ZWxUb0xpbmVhciggdmVjNCBjb2xvciApIHtcblxuXHRcdFx0cmV0dXJuIGlucHV0VGV4ZWxUb0xpbmVhciggY29sb3IgKTtcblxuXHRcdH1cblx0XG5cblx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiA9IGVudk1hcFRleGVsVG9MaW5lYXIoIHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIC0gdk91dHB1dERpcmVjdGlvbi54LCB2T3V0cHV0RGlyZWN0aW9uLnl6ICkgKSApLnJnYjtcblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gbGluZWFyVG9PdXRwdXRUZXhlbCggZ2xfRnJhZ0NvbG9yICk7XG5cblx0XHRcdH1cblx0XHQiLGJsZW5kaW5nOjAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBmbHQodCl7bGV0IGU9bmV3IFdlYWtNYXAsbj1udWxsO2Z1bmN0aW9uIG8odCl7Y29uc3Qgbj10LnRhcmdldDtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG8pO2NvbnN0IGk9ZS5nZXQobik7dm9pZCAwIT09aSYmKGkuZGVsZXRlKG4pLGkuZGlzcG9zZSgpKX1yZXR1cm57Z2V0OmZ1bmN0aW9uIGkoYSl7aWYoYSYmYS5pc1RleHR1cmUmJiExPT09YS5pc1JlbmRlclRhcmdldFRleHR1cmUpe2NvbnN0IGk9YS5tYXBwaW5nLHI9MzAzPT09aXx8MzA0PT09aSxzPWk9PT1kaXR8fGk9PT1waXQ7aWYocnx8cyl7aWYoZS5oYXMoYSkpcmV0dXJuIGUuZ2V0KGEpLnRleHR1cmU7e2NvbnN0IGk9YS5pbWFnZTtpZihyJiZpJiZpLmhlaWdodD4wfHxzJiZpJiYoZnVuY3Rpb24gcih0KXtsZXQgZT0wO2ZvcihsZXQgbj0wO248NjtuKyspdm9pZCAwIT09dFtuXSYmZSsrO3JldHVybiA2PT09ZX0pKGkpKXtjb25zdCBpPXQuZ2V0UmVuZGVyVGFyZ2V0KCk7bnVsbD09PW4mJihuPW5ldyBzbHQodCkpO2NvbnN0IHM9cj9uLmZyb21FcXVpcmVjdGFuZ3VsYXIoYSk6bi5mcm9tQ3ViZW1hcChhKTtyZXR1cm4gZS5zZXQoYSxzKSx0LnNldFJlbmRlclRhcmdldChpKSxhLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG8pLHMudGV4dHVyZX1yZXR1cm4gbnVsbH19fXJldHVybiBhfSxkaXNwb3NlOmZ1bmN0aW9uIGEoKXtlPW5ldyBXZWFrTWFwLG51bGwhPT1uJiYobi5kaXNwb3NlKCksbj1udWxsKX19fWZ1bmN0aW9uIGdsdCh0KXtjb25zdCBlPXt9O2Z1bmN0aW9uIG4obil7aWYodm9pZCAwIT09ZVtuXSlyZXR1cm4gZVtuXTtsZXQgbztzd2l0Y2gobil7Y2FzZSJXRUJHTF9kZXB0aF90ZXh0dXJlIjpvPXQuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZXB0aF90ZXh0dXJlIil8fHQuZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHx0LmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2RlcHRoX3RleHR1cmUiKTticmVhaztjYXNlIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyI6bz10LmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fHQuZ2V0RXh0ZW5zaW9uKCJNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fHQuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyI6bz10LmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8dC5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHx0LmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiOm89dC5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfHx0LmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpO2JyZWFrO2RlZmF1bHQ6bz10LmdldEV4dGVuc2lvbihuKX1yZXR1cm4gZVtuXT1vLG99cmV0dXJue2hhczpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PW4odCl9LGluaXQ6ZnVuY3Rpb24odCl7dC5pc1dlYkdMMj9uKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik6KG4oIldFQkdMX2RlcHRoX3RleHR1cmUiKSxuKCJPRVNfdGV4dHVyZV9mbG9hdCIpLG4oIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxuKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpLG4oIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpLG4oIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKSxuKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLG4oIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSksbigiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIiksbigiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Iil9LGdldDpmdW5jdGlvbih0KXtjb25zdCBlPW4odCk7cmV0dXJuIG51bGw9PT1lJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrdCsiIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLiIpLGV9fX1mdW5jdGlvbiBobHQodCxlLG4sbyl7Y29uc3QgaT17fSxhPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHIodCl7Y29uc3Qgcz10LnRhcmdldDtudWxsIT09cy5pbmRleCYmZS5yZW1vdmUocy5pbmRleCk7Zm9yKGNvbnN0IHQgaW4gcy5hdHRyaWJ1dGVzKWUucmVtb3ZlKHMuYXR0cmlidXRlc1t0XSk7cy5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixyKSxkZWxldGUgaVtzLmlkXTtjb25zdCBsPWEuZ2V0KHMpO2wmJihlLnJlbW92ZShsKSxhLmRlbGV0ZShzKSksby5yZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeShzKSwhMD09PXMuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSYmZGVsZXRlIHMuX21heEluc3RhbmNlQ291bnQsbi5tZW1vcnkuZ2VvbWV0cmllcy0tfWZ1bmN0aW9uIHModCl7Y29uc3Qgbj1bXSxvPXQuaW5kZXgsaT10LmF0dHJpYnV0ZXMucG9zaXRpb247bGV0IHI9MDtpZihudWxsIT09byl7Y29uc3QgdD1vLmFycmF5O3I9by52ZXJzaW9uO2ZvcihsZXQgZT0wLG89dC5sZW5ndGg7ZTxvO2UrPTMpe2NvbnN0IG89dFtlKzBdLGk9dFtlKzFdLGE9dFtlKzJdO24ucHVzaChvLGksaSxhLGEsbyl9fWVsc2V7cj1pLnZlcnNpb247Zm9yKGxldCB0PTAsZT1pLmFycmF5Lmxlbmd0aC8zLTE7dDxlO3QrPTMpe2NvbnN0IGU9dCswLG89dCsxLGk9dCsyO24ucHVzaChlLG8sbyxpLGksZSl9fWNvbnN0IHM9bmV3KExydChuKT42NTUzNT9IcnQ6SXJ0KShuLDEpO3MudmVyc2lvbj1yO2NvbnN0IGw9YS5nZXQodCk7bCYmZS5yZW1vdmUobCksYS5zZXQodCxzKX1yZXR1cm57Z2V0OmZ1bmN0aW9uIGwodCxlKXtyZXR1cm4hMD09PWlbZS5pZF18fChlLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHIpLGlbZS5pZF09ITAsbi5tZW1vcnkuZ2VvbWV0cmllcysrKSxlfSx1cGRhdGU6ZnVuY3Rpb24gYyh0KXtjb25zdCBuPXQuYXR0cmlidXRlcztmb3IoY29uc3QgdCBpbiBuKWUudXBkYXRlKG5bdF0sMzQ5NjIpO2NvbnN0IG89dC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGNvbnN0IHQgaW4gbyl7Y29uc3Qgbj1vW3RdO2ZvcihsZXQgdD0wLG89bi5sZW5ndGg7dDxvO3QrKyllLnVwZGF0ZShuW3RdLDM0OTYyKX19LGdldFdpcmVmcmFtZUF0dHJpYnV0ZTpmdW5jdGlvbiBkKHQpe2NvbnN0IGU9YS5nZXQodCk7aWYoZSl7Y29uc3Qgbj10LmluZGV4O251bGwhPT1uJiZlLnZlcnNpb248bi52ZXJzaW9uJiZzKHQpfWVsc2Ugcyh0KTtyZXR1cm4gYS5nZXQodCl9fX1mdW5jdGlvbiBibHQodCxlLG4sbyl7Y29uc3QgaT1vLmlzV2ViR0wyO2xldCBhLHIsczt0aGlzLnNldE1vZGU9ZnVuY3Rpb24gbCh0KXthPXR9LHRoaXMuc2V0SW5kZXg9ZnVuY3Rpb24gYyh0KXtyPXQudHlwZSxzPXQuYnl0ZXNQZXJFbGVtZW50fSx0aGlzLnJlbmRlcj1mdW5jdGlvbiBkKGUsbyl7dC5kcmF3RWxlbWVudHMoYSxvLHIsZSpzKSxuLnVwZGF0ZShvLGEsMSl9LHRoaXMucmVuZGVySW5zdGFuY2VzPWZ1bmN0aW9uIHAobyxsLGMpe2lmKDA9PT1jKXJldHVybjtsZXQgZCxwO2lmKGkpZD10LHA9ImRyYXdFbGVtZW50c0luc3RhbmNlZCI7ZWxzZSBpZihkPWUuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikscD0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLG51bGw9PT1kKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5kZXhlZEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTtkW3BdKGEsbCxyLG8qcyxjKSxuLnVwZGF0ZShsLGEsYyl9fWZ1bmN0aW9uIHlsdCh0KXtjb25zdCBlPXtmcmFtZTowLGNhbGxzOjAsdHJpYW5nbGVzOjAscG9pbnRzOjAsbGluZXM6MH07cmV0dXJue21lbW9yeTp7Z2VvbWV0cmllczowLHRleHR1cmVzOjB9LHJlbmRlcjplLHByb2dyYW1zOm51bGwsYXV0b1Jlc2V0OiEwLHJlc2V0OmZ1bmN0aW9uIG4oKXtlLmZyYW1lKyssZS5jYWxscz0wLGUudHJpYW5nbGVzPTAsZS5wb2ludHM9MCxlLmxpbmVzPTB9LHVwZGF0ZTpmdW5jdGlvbiBvKHQsbixpKXtzd2l0Y2goZS5jYWxscysrLG4pe2Nhc2UgNDplLnRyaWFuZ2xlcys9aSoodC8zKTticmVhaztjYXNlIDE6ZS5saW5lcys9aSoodC8yKTticmVhaztjYXNlIDM6ZS5saW5lcys9aSoodC0xKTticmVhaztjYXNlIDI6ZS5saW5lcys9aSp0O2JyZWFrO2Nhc2UgMDplLnBvaW50cys9aSp0O2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZToiLG4pfX19fWZ1bmN0aW9uIF9sdCh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gQ2x0KHQsZSl7cmV0dXJuIE1hdGguYWJzKGVbMV0pLU1hdGguYWJzKHRbMV0pfWZ1bmN0aW9uIE1sdCh0KXtjb25zdCBlPXt9LG49bmV3IEZsb2F0MzJBcnJheSg4KSxvPVtdO2ZvcihsZXQgdD0wO3Q8ODt0Kyspb1t0XT1bdCwwXTtyZXR1cm57dXBkYXRlOmZ1bmN0aW9uIGkoYSxyLHMsbCl7Y29uc3QgYz1hLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyxkPXZvaWQgMD09PWM/MDpjLmxlbmd0aDtsZXQgcD1lW3IuaWRdO2lmKHZvaWQgMD09PXB8fHAubGVuZ3RoIT09ZCl7cD1bXTtmb3IobGV0IHQ9MDt0PGQ7dCsrKXBbdF09W3QsMF07ZVtyLmlkXT1wfWZvcihsZXQgdD0wO3Q8ZDt0Kyspe2NvbnN0IGU9cFt0XTtlWzBdPXQsZVsxXT1jW3RdfXAuc29ydChDbHQpO2ZvcihsZXQgdD0wO3Q8ODt0KyspdDxkJiZwW3RdWzFdPyhvW3RdWzBdPXBbdF1bMF0sb1t0XVsxXT1wW3RdWzFdKToob1t0XVswXT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUixvW3RdWzFdPTApO28uc29ydChfbHQpO2NvbnN0IG09ci5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sdT1yLm1vcnBoQXR0cmlidXRlcy5ub3JtYWw7bGV0IGY9MDtmb3IobGV0IHQ9MDt0PDg7dCsrKXtjb25zdCBlPW9bdF0saT1lWzBdLGE9ZVsxXTtpIT09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVImJmE/KG0mJnIuZ2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrdCkhPT1tW2ldJiZyLnNldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK3QsbVtpXSksdSYmci5nZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIit0KSE9PXVbaV0mJnIuc2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrdCx1W2ldKSxuW3RdPWEsZis9YSk6KG0mJiEwPT09ci5oYXNBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0Iit0KSYmci5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0Iit0KSx1JiYhMD09PXIuaGFzQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrdCkmJnIuZGVsZXRlQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrdCksblt0XT0wKX1jb25zdCBnPXIubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLWY7bC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKHQsIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIsZyksbC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKHQsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsbil9fX1mdW5jdGlvbiB2bHQodCxlLG4sbyl7bGV0IGk9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gYSh0KXtjb25zdCBlPXQudGFyZ2V0O2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSksbi5yZW1vdmUoZS5pbnN0YW5jZU1hdHJpeCksbnVsbCE9PWUuaW5zdGFuY2VDb2xvciYmbi5yZW1vdmUoZS5pbnN0YW5jZUNvbG9yKX1yZXR1cm57dXBkYXRlOmZ1bmN0aW9uIHIodCl7Y29uc3Qgcj1vLnJlbmRlci5mcmFtZSxzPWUuZ2V0KHQsdC5nZW9tZXRyeSk7cmV0dXJuIGkuZ2V0KHMpIT09ciYmKGUudXBkYXRlKHMpLGkuc2V0KHMscikpLHQuaXNJbnN0YW5jZWRNZXNoJiYoITE9PT10Lmhhc0V2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpJiZ0LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLG4udXBkYXRlKHQuaW5zdGFuY2VNYXRyaXgsMzQ5NjIpLG51bGwhPT10Lmluc3RhbmNlQ29sb3ImJm4udXBkYXRlKHQuaW5zdGFuY2VDb2xvciwzNDk2MikpLHN9LGRpc3Bvc2U6ZnVuY3Rpb24gcygpe2k9bmV3IFdlYWtNYXB9fX1jbGFzcyB4bHQgZXh0ZW5kcyBvYXR7Y29uc3RydWN0b3IodD1udWxsLGU9MSxuPTEsbz0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6bixkZXB0aDpvfSx0aGlzLm1hZ0ZpbHRlcj1oaXQsdGhpcy5taW5GaWx0ZXI9aGl0LHRoaXMud3JhcFI9Zml0LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MSx0aGlzLm5lZWRzVXBkYXRlPSEwfX14bHQucHJvdG90eXBlLmlzRGF0YVRleHR1cmUyREFycmF5PSEwO2NsYXNzIE9sdCBleHRlbmRzIG9hdHtjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLG49MSxvPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDpuLGRlcHRoOm99LHRoaXMubWFnRmlsdGVyPWhpdCx0aGlzLm1pbkZpbHRlcj1oaXQsdGhpcy53cmFwUj1maXQsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xLHRoaXMubmVlZHNVcGRhdGU9ITB9fU9sdC5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZTNEPSEwO2NvbnN0IFBsdD1uZXcgb2F0LHdsdD1uZXcgeGx0LGtsdD1uZXcgT2x0LFNsdD1uZXcgdnN0LERsdD1bXSxFbHQ9W10sUmx0PW5ldyBGbG9hdDMyQXJyYXkoMTYpLEFsdD1uZXcgRmxvYXQzMkFycmF5KDkpLFRsdD1uZXcgRmxvYXQzMkFycmF5KDQpO2Z1bmN0aW9uIE5sdCh0LGUsbil7Y29uc3Qgbz10WzBdO2lmKG88PTB8fG8+MClyZXR1cm4gdDtjb25zdCBpPWUqbjtsZXQgYT1EbHRbaV07aWYodm9pZCAwPT09YSYmKGE9bmV3IEZsb2F0MzJBcnJheShpKSxEbHRbaV09YSksMCE9PWUpe28udG9BcnJheShhLDApO2ZvcihsZXQgbz0xLGk9MDtvIT09ZTsrK28paSs9bix0W29dLnRvQXJyYXkoYSxpKX1yZXR1cm4gYX1mdW5jdGlvbiB6bHQodCxlKXtpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgbj0wLG89dC5sZW5ndGg7bjxvO24rKylpZih0W25dIT09ZVtuXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBJbHQodCxlKXtmb3IobGV0IG49MCxvPWUubGVuZ3RoO248bztuKyspdFtuXT1lW25dfWZ1bmN0aW9uIEhsdCh0LGUpe2xldCBuPUVsdFtlXTt2b2lkIDA9PT1uJiYobj1uZXcgSW50MzJBcnJheShlKSxFbHRbZV09bik7Zm9yKGxldCBvPTA7byE9PWU7KytvKW5bb109dC5hbGxvY2F0ZVRleHR1cmVVbml0KCk7cmV0dXJuIG59ZnVuY3Rpb24gRmx0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO25bMF0hPT1lJiYodC51bmlmb3JtMWYodGhpcy5hZGRyLGUpLG5bMF09ZSl9ZnVuY3Rpb24gTGx0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PWUueCluWzBdPT09ZS54JiZuWzFdPT09ZS55fHwodC51bmlmb3JtMmYodGhpcy5hZGRyLGUueCxlLnkpLG5bMF09ZS54LG5bMV09ZS55KTtlbHNle2lmKHpsdChuLGUpKXJldHVybjt0LnVuaWZvcm0yZnYodGhpcy5hZGRyLGUpLElsdChuLGUpfX1mdW5jdGlvbiBCbHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09ZS54KW5bMF09PT1lLngmJm5bMV09PT1lLnkmJm5bMl09PT1lLnp8fCh0LnVuaWZvcm0zZih0aGlzLmFkZHIsZS54LGUueSxlLnopLG5bMF09ZS54LG5bMV09ZS55LG5bMl09ZS56KTtlbHNlIGlmKHZvaWQgMCE9PWUuciluWzBdPT09ZS5yJiZuWzFdPT09ZS5nJiZuWzJdPT09ZS5ifHwodC51bmlmb3JtM2YodGhpcy5hZGRyLGUucixlLmcsZS5iKSxuWzBdPWUucixuWzFdPWUuZyxuWzJdPWUuYik7ZWxzZXtpZih6bHQobixlKSlyZXR1cm47dC51bmlmb3JtM2Z2KHRoaXMuYWRkcixlKSxJbHQobixlKX19ZnVuY3Rpb24gVmx0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PWUueCluWzBdPT09ZS54JiZuWzFdPT09ZS55JiZuWzJdPT09ZS56JiZuWzNdPT09ZS53fHwodC51bmlmb3JtNGYodGhpcy5hZGRyLGUueCxlLnksZS56LGUudyksblswXT1lLngsblsxXT1lLnksblsyXT1lLnosblszXT1lLncpO2Vsc2V7aWYoemx0KG4sZSkpcmV0dXJuO3QudW5pZm9ybTRmdih0aGlzLmFkZHIsZSksSWx0KG4sZSl9fWZ1bmN0aW9uIGpsdCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZSxvPWUuZWxlbWVudHM7aWYodm9pZCAwPT09byl7aWYoemx0KG4sZSkpcmV0dXJuO3QudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsZSksSWx0KG4sZSl9ZWxzZXtpZih6bHQobixvKSlyZXR1cm47VGx0LnNldChvKSx0LnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLFRsdCksSWx0KG4sbyl9fWZ1bmN0aW9uIFVsdCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZSxvPWUuZWxlbWVudHM7aWYodm9pZCAwPT09byl7aWYoemx0KG4sZSkpcmV0dXJuO3QudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsZSksSWx0KG4sZSl9ZWxzZXtpZih6bHQobixvKSlyZXR1cm47QWx0LnNldChvKSx0LnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLEFsdCksSWx0KG4sbyl9fWZ1bmN0aW9uIEdsdCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZSxvPWUuZWxlbWVudHM7aWYodm9pZCAwPT09byl7aWYoemx0KG4sZSkpcmV0dXJuO3QudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsZSksSWx0KG4sZSl9ZWxzZXtpZih6bHQobixvKSlyZXR1cm47Umx0LnNldChvKSx0LnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLFJsdCksSWx0KG4sbyl9fWZ1bmN0aW9uIFdsdCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZTtuWzBdIT09ZSYmKHQudW5pZm9ybTFpKHRoaXMuYWRkcixlKSxuWzBdPWUpfWZ1bmN0aW9uIFlsdCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZTt6bHQobixlKXx8KHQudW5pZm9ybTJpdih0aGlzLmFkZHIsZSksSWx0KG4sZSkpfWZ1bmN0aW9uIHFsdCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZTt6bHQobixlKXx8KHQudW5pZm9ybTNpdih0aGlzLmFkZHIsZSksSWx0KG4sZSkpfWZ1bmN0aW9uIFpsdCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZTt6bHQobixlKXx8KHQudW5pZm9ybTRpdih0aGlzLmFkZHIsZSksSWx0KG4sZSkpfWZ1bmN0aW9uIFhsdCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZTtuWzBdIT09ZSYmKHQudW5pZm9ybTF1aSh0aGlzLmFkZHIsZSksblswXT1lKX1mdW5jdGlvbiBLbHQodCxlKXtjb25zdCBuPXRoaXMuY2FjaGU7emx0KG4sZSl8fCh0LnVuaWZvcm0ydWl2KHRoaXMuYWRkcixlKSxJbHQobixlKSl9ZnVuY3Rpb24gSmx0KHQsZSl7Y29uc3Qgbj10aGlzLmNhY2hlO3psdChuLGUpfHwodC51bmlmb3JtM3Vpdih0aGlzLmFkZHIsZSksSWx0KG4sZSkpfWZ1bmN0aW9uIFFsdCh0LGUpe2NvbnN0IG49dGhpcy5jYWNoZTt6bHQobixlKXx8KHQudW5pZm9ybTR1aXYodGhpcy5hZGRyLGUpLElsdChuLGUpKX1mdW5jdGlvbiAkbHQodCxlLG4pe2NvbnN0IG89dGhpcy5jYWNoZSxpPW4uYWxsb2NhdGVUZXh0dXJlVW5pdCgpO29bMF0hPT1pJiYodC51bmlmb3JtMWkodGhpcy5hZGRyLGkpLG9bMF09aSksbi5zYWZlU2V0VGV4dHVyZTJEKGV8fFBsdCxpKX1mdW5jdGlvbiB0Y3QodCxlLG4pe2NvbnN0IG89dGhpcy5jYWNoZSxpPW4uYWxsb2NhdGVUZXh0dXJlVW5pdCgpO29bMF0hPT1pJiYodC51bmlmb3JtMWkodGhpcy5hZGRyLGkpLG9bMF09aSksbi5zZXRUZXh0dXJlM0QoZXx8a2x0LGkpfWZ1bmN0aW9uIGVjdCh0LGUsbil7Y29uc3Qgbz10aGlzLmNhY2hlLGk9bi5hbGxvY2F0ZVRleHR1cmVVbml0KCk7b1swXSE9PWkmJih0LnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksb1swXT1pKSxuLnNhZmVTZXRUZXh0dXJlQ3ViZShlfHxTbHQsaSl9ZnVuY3Rpb24gbmN0KHQsZSxuKXtjb25zdCBvPXRoaXMuY2FjaGUsaT1uLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtvWzBdIT09aSYmKHQudW5pZm9ybTFpKHRoaXMuYWRkcixpKSxvWzBdPWkpLG4uc2V0VGV4dHVyZTJEQXJyYXkoZXx8d2x0LGkpfWZ1bmN0aW9uIG9jdCh0LGUpe3QudW5pZm9ybTFmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gaWN0KHQsZSl7Y29uc3Qgbj1ObHQoZSx0aGlzLnNpemUsMik7dC51bmlmb3JtMmZ2KHRoaXMuYWRkcixuKX1mdW5jdGlvbiBhY3QodCxlKXtjb25zdCBuPU5sdChlLHRoaXMuc2l6ZSwzKTt0LnVuaWZvcm0zZnYodGhpcy5hZGRyLG4pfWZ1bmN0aW9uIHJjdCh0LGUpe2NvbnN0IG49Tmx0KGUsdGhpcy5zaXplLDQpO3QudW5pZm9ybTRmdih0aGlzLmFkZHIsbil9ZnVuY3Rpb24gc2N0KHQsZSl7Y29uc3Qgbj1ObHQoZSx0aGlzLnNpemUsNCk7dC51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxuKX1mdW5jdGlvbiBsY3QodCxlKXtjb25zdCBuPU5sdChlLHRoaXMuc2l6ZSw5KTt0LnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLG4pfWZ1bmN0aW9uIGNjdCh0LGUpe2NvbnN0IG49Tmx0KGUsdGhpcy5zaXplLDE2KTt0LnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLG4pfWZ1bmN0aW9uIGRjdCh0LGUpe3QudW5pZm9ybTFpdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gcGN0KHQsZSl7dC51bmlmb3JtMml2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBtY3QodCxlKXt0LnVuaWZvcm0zaXYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIHVjdCh0LGUpe3QudW5pZm9ybTRpdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gZmN0KHQsZSl7dC51bmlmb3JtMXVpdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gZ2N0KHQsZSl7dC51bmlmb3JtMnVpdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gaGN0KHQsZSl7dC51bmlmb3JtM3Vpdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gYmN0KHQsZSl7dC51bmlmb3JtNHVpdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24geWN0KHQsZSxuKXtjb25zdCBvPWUubGVuZ3RoLGk9SGx0KG4sbyk7dC51bmlmb3JtMWl2KHRoaXMuYWRkcixpKTtmb3IobGV0IHQ9MDt0IT09bzsrK3Qpbi5zYWZlU2V0VGV4dHVyZTJEKGVbdF18fFBsdCxpW3RdKX1mdW5jdGlvbiBfY3QodCxlLG4pe2NvbnN0IG89ZS5sZW5ndGgsaT1IbHQobixvKTt0LnVuaWZvcm0xaXYodGhpcy5hZGRyLGkpO2ZvcihsZXQgdD0wO3QhPT1vOysrdCluLnNhZmVTZXRUZXh0dXJlQ3ViZShlW3RdfHxTbHQsaVt0XSl9ZnVuY3Rpb24gQ2N0KHQsZSxuKXt0aGlzLmlkPXQsdGhpcy5hZGRyPW4sdGhpcy5jYWNoZT1bXSx0aGlzLnNldFZhbHVlPShmdW5jdGlvbiBvKHQpe3N3aXRjaCh0KXtjYXNlIDUxMjY6cmV0dXJuIEZsdDtjYXNlIDM1NjY0OnJldHVybiBMbHQ7Y2FzZSAzNTY2NTpyZXR1cm4gQmx0O2Nhc2UgMzU2NjY6cmV0dXJuIFZsdDtjYXNlIDM1Njc0OnJldHVybiBqbHQ7Y2FzZSAzNTY3NTpyZXR1cm4gVWx0O2Nhc2UgMzU2NzY6cmV0dXJuIEdsdDtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gV2x0O2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gWWx0O2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gcWx0O2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gWmx0O2Nhc2UgNTEyNTpyZXR1cm4gWGx0O2Nhc2UgMzYyOTQ6cmV0dXJuIEtsdDtjYXNlIDM2Mjk1OnJldHVybiBKbHQ7Y2FzZSAzNjI5NjpyZXR1cm4gUWx0O2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gJGx0O2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiB0Y3Q7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gZWN0O2Nhc2UgMzYyODk6Y2FzZSAzNjMwMzpjYXNlIDM2MzExOmNhc2UgMzYyOTI6cmV0dXJuIG5jdH19KShlLnR5cGUpfWZ1bmN0aW9uIE1jdCh0LGUsbil7dGhpcy5pZD10LHRoaXMuYWRkcj1uLHRoaXMuY2FjaGU9W10sdGhpcy5zaXplPWUuc2l6ZSx0aGlzLnNldFZhbHVlPShmdW5jdGlvbiBvKHQpe3N3aXRjaCh0KXtjYXNlIDUxMjY6cmV0dXJuIG9jdDtjYXNlIDM1NjY0OnJldHVybiBpY3Q7Y2FzZSAzNTY2NTpyZXR1cm4gYWN0O2Nhc2UgMzU2NjY6cmV0dXJuIHJjdDtjYXNlIDM1Njc0OnJldHVybiBzY3Q7Y2FzZSAzNTY3NTpyZXR1cm4gbGN0O2Nhc2UgMzU2NzY6cmV0dXJuIGNjdDtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gZGN0O2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gcGN0O2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gbWN0O2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gdWN0O2Nhc2UgNTEyNTpyZXR1cm4gZmN0O2Nhc2UgMzYyOTQ6cmV0dXJuIGdjdDtjYXNlIDM2Mjk1OnJldHVybiBoY3Q7Y2FzZSAzNjI5NjpyZXR1cm4gYmN0O2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4geWN0O2Nhc2UgMzU2ODA6Y2FzZSAzNjMwMDpjYXNlIDM2MzA4OmNhc2UgMzYyOTM6cmV0dXJuIF9jdH19KShlLnR5cGUpfWZ1bmN0aW9uIHZjdCh0KXt0aGlzLmlkPXQsdGhpcy5zZXE9W10sdGhpcy5tYXA9e319TWN0LnByb3RvdHlwZS51cGRhdGVDYWNoZT1mdW5jdGlvbih0KXtjb25zdCBlPXRoaXMuY2FjaGU7dCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmZS5sZW5ndGghPT10Lmxlbmd0aCYmKHRoaXMuY2FjaGU9bmV3IEZsb2F0MzJBcnJheSh0Lmxlbmd0aCkpLElsdChlLHQpfSx2Y3QucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSxuKXtjb25zdCBvPXRoaXMuc2VxO2ZvcihsZXQgaT0wLGE9by5sZW5ndGg7aSE9PWE7KytpKXtjb25zdCBhPW9baV07YS5zZXRWYWx1ZSh0LGVbYS5pZF0sbil9fTtjb25zdCB4Y3Q9LyhcdyspKFxdKT8oXFt8XC4pPy9nO2Z1bmN0aW9uIE9jdCh0LGUpe3Quc2VxLnB1c2goZSksdC5tYXBbZS5pZF09ZX1mdW5jdGlvbiBQY3QodCxlLG4pe2NvbnN0IG89dC5uYW1lLGk9by5sZW5ndGg7Zm9yKHhjdC5sYXN0SW5kZXg9MDs7KXtjb25zdCBhPXhjdC5leGVjKG8pLHI9eGN0Lmxhc3RJbmRleDtsZXQgcz1hWzFdO2NvbnN0IGw9YVszXTtpZigiXSI9PT1hWzJdJiYoc3w9MCksdm9pZCAwPT09bHx8IlsiPT09bCYmcisyPT09aSl7T2N0KG4sdm9pZCAwPT09bD9uZXcgQ2N0KHMsdCxlKTpuZXcgTWN0KHMsdCxlKSk7YnJlYWt9e2xldCB0PW4ubWFwW3NdO3ZvaWQgMD09PXQmJih0PW5ldyB2Y3QocyksT2N0KG4sdCkpLG49dH19fWZ1bmN0aW9uIHdjdCh0LGUpe3RoaXMuc2VxPVtdLHRoaXMubWFwPXt9O2NvbnN0IG49dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsMzU3MTgpO2ZvcihsZXQgbz0wO288bjsrK28pe2NvbnN0IG49dC5nZXRBY3RpdmVVbmlmb3JtKGUsbyk7UGN0KG4sdC5nZXRVbmlmb3JtTG9jYXRpb24oZSxuLm5hbWUpLHRoaXMpfX1mdW5jdGlvbiBrY3QodCxlLG4pe2NvbnN0IG89dC5jcmVhdGVTaGFkZXIoZSk7cmV0dXJuIHQuc2hhZGVyU291cmNlKG8sbiksdC5jb21waWxlU2hhZGVyKG8pLG99d2N0LnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUsbixvKXtjb25zdCBpPXRoaXMubWFwW2VdO3ZvaWQgMCE9PWkmJmkuc2V0VmFsdWUodCxuLG8pfSx3Y3QucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKHQsZSxuKXtjb25zdCBvPWVbbl07dm9pZCAwIT09byYmdGhpcy5zZXRWYWx1ZSh0LG4sbyl9LHdjdC51cGxvYWQ9ZnVuY3Rpb24odCxlLG4sbyl7Zm9yKGxldCBpPTAsYT1lLmxlbmd0aDtpIT09YTsrK2kpe2NvbnN0IGE9ZVtpXSxyPW5bYS5pZF07ITEhPT1yLm5lZWRzVXBkYXRlJiZhLnNldFZhbHVlKHQsci52YWx1ZSxvKX19LHdjdC5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24odCxlKXtjb25zdCBuPVtdO2ZvcihsZXQgbz0wLGk9dC5sZW5ndGg7byE9PWk7KytvKXtjb25zdCBpPXRbb107aS5pZCBpbiBlJiZuLnB1c2goaSl9cmV0dXJuIG59O2xldCBTY3Q9MDtmdW5jdGlvbiBEY3QodCl7c3dpdGNoKHQpe2Nhc2Ugeml0OnJldHVyblsiTGluZWFyIiwiKCB2YWx1ZSApIl07Y2FzZSBJaXQ6cmV0dXJuWyJzUkdCIiwiKCB2YWx1ZSApIl07Y2FzZSBGaXQ6cmV0dXJuWyJSR0JFIiwiKCB2YWx1ZSApIl07Y2FzZSAzMDA0OnJldHVyblsiUkdCTSIsIiggdmFsdWUsIDcuMCApIl07Y2FzZSAzMDA1OnJldHVyblsiUkdCTSIsIiggdmFsdWUsIDE2LjAgKSJdO2Nhc2UgMzAwNjpyZXR1cm5bIlJHQkQiLCIoIHZhbHVlLCAyNTYuMCApIl07Y2FzZSBIaXQ6cmV0dXJuWyJHYW1tYSIsIiggdmFsdWUsIGZsb2F0KCBHQU1NQV9GQUNUT1IgKSApIl07Y2FzZSAzMDAzOnJldHVyblsiTG9nTHV2IiwiKCB2YWx1ZSApIl07ZGVmYXVsdDpyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIGVuY29kaW5nOiIsdCksWyJMaW5lYXIiLCIoIHZhbHVlICkiXX19ZnVuY3Rpb24gRWN0KHQsZSxuKXtjb25zdCBvPXQuZ2V0U2hhZGVyUGFyYW1ldGVyKGUsMzU3MTMpLGk9dC5nZXRTaGFkZXJJbmZvTG9nKGUpLnRyaW0oKTtyZXR1cm4gbyYmIiI9PT1pPyIiOiJUSFJFRS5XZWJHTFNoYWRlcjogZ2wuZ2V0U2hhZGVySW5mb0xvZygpICIrbisiXG4iK2krKGZ1bmN0aW9uIGEodCl7Y29uc3QgZT10LnNwbGl0KCJcbiIpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF09dCsxKyI6ICIrZVt0XTtyZXR1cm4gZS5qb2luKCJcbiIpfSkodC5nZXRTaGFkZXJTb3VyY2UoZSkpfWZ1bmN0aW9uIFJjdCh0LGUpe2NvbnN0IG49RGN0KGUpO3JldHVybiJ2ZWM0ICIrdCsiKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gIituWzBdKyJUb0xpbmVhciIrblsxXSsiOyB9In1mdW5jdGlvbiBBY3QodCxlKXtjb25zdCBuPURjdChlKTtyZXR1cm4idmVjNCAiK3QrIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuIExpbmVhclRvIituWzBdK25bMV0rIjsgfSJ9ZnVuY3Rpb24gVGN0KHQsZSl7bGV0IG47c3dpdGNoKGUpe2Nhc2UgMTpuPSJMaW5lYXIiO2JyZWFrO2Nhc2UgMjpuPSJSZWluaGFyZCI7YnJlYWs7Y2FzZSAzOm49Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7Y2FzZSA0Om49IkFDRVNGaWxtaWMiO2JyZWFrO2Nhc2UgNTpuPSJDdXN0b20iO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiIsZSksbj0iTGluZWFyIn1yZXR1cm4idmVjMyAiK3QrIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrbisiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIE5jdCh0KXtyZXR1cm4iIiE9PXR9ZnVuY3Rpb24gemN0KHQsZSl7cmV0dXJuIHQucmVwbGFjZSgvTlVNX0RJUl9MSUdIVFMvZyxlLm51bURpckxpZ2h0cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRTL2csZS5udW1TcG90TGlnaHRzKS5yZXBsYWNlKC9OVU1fUkVDVF9BUkVBX0xJR0hUUy9nLGUubnVtUmVjdEFyZWFMaWdodHMpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVFMvZyxlLm51bVBvaW50TGlnaHRzKS5yZXBsYWNlKC9OVU1fSEVNSV9MSUdIVFMvZyxlLm51bUhlbWlMaWdodHMpLnJlcGxhY2UoL05VTV9ESVJfTElHSFRfU0hBRE9XUy9nLGUubnVtRGlyTGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVF9TSEFET1dTL2csZS5udW1TcG90TGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRfU0hBRE9XUy9nLGUubnVtUG9pbnRMaWdodFNoYWRvd3MpfWZ1bmN0aW9uIEljdCh0LGUpe3JldHVybiB0LnJlcGxhY2UoL05VTV9DTElQUElOR19QTEFORVMvZyxlLm51bUNsaXBwaW5nUGxhbmVzKS5yZXBsYWNlKC9VTklPTl9DTElQUElOR19QTEFORVMvZyxlLm51bUNsaXBwaW5nUGxhbmVzLWUubnVtQ2xpcEludGVyc2VjdGlvbil9Y29uc3QgSGN0PS9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuL10rKT4vZ207ZnVuY3Rpb24gRmN0KHQpe3JldHVybiB0LnJlcGxhY2UoSGN0LExjdCl9ZnVuY3Rpb24gTGN0KHQsZSl7Y29uc3Qgbj1Oc3RbZV07aWYodm9pZCAwPT09bil0aHJvdyBuZXcgRXJyb3IoIkNhbiBub3QgcmVzb2x2ZSAjaW5jbHVkZSA8IitlKyI+Iik7cmV0dXJuIEZjdChuKX1jb25zdCBCY3Q9LyNwcmFnbWEgdW5yb2xsX2xvb3BbXHNdKz9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyxWY3Q9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBqY3QodCl7cmV0dXJuIHQucmVwbGFjZShWY3QsR2N0KS5yZXBsYWNlKEJjdCxVY3QpfWZ1bmN0aW9uIFVjdCh0LGUsbixvKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksR2N0KDAsZSxuLG8pfWZ1bmN0aW9uIEdjdCh0LGUsbixvKXtsZXQgaT0iIjtmb3IobGV0IHQ9cGFyc2VJbnQoZSk7dDxwYXJzZUludChuKTt0KyspaSs9by5yZXBsYWNlKC9cW1xzKmlccypcXS9nLCJbICIrdCsiIF0iKS5yZXBsYWNlKC9VTlJPTExFRF9MT09QX0lOREVYL2csdCk7cmV0dXJuIGl9ZnVuY3Rpb24gV2N0KHQpe2xldCBlPSJwcmVjaXNpb24gIit0LnByZWNpc2lvbisiIGZsb2F0O1xucHJlY2lzaW9uICIrdC5wcmVjaXNpb24rIiBpbnQ7IjtyZXR1cm4iaGlnaHAiPT09dC5wcmVjaXNpb24/ZSs9IlxuI2RlZmluZSBISUdIX1BSRUNJU0lPTiI6Im1lZGl1bXAiPT09dC5wcmVjaXNpb24/ZSs9IlxuI2RlZmluZSBNRURJVU1fUFJFQ0lTSU9OIjoibG93cCI9PT10LnByZWNpc2lvbiYmKGUrPSJcbiNkZWZpbmUgTE9XX1BSRUNJU0lPTiIpLGV9ZnVuY3Rpb24gWWN0KHQsZSxuLG8pe2NvbnN0IGk9dC5nZXRDb250ZXh0KCksYT1uLmRlZmluZXM7bGV0IHI9bi52ZXJ0ZXhTaGFkZXIscz1uLmZyYWdtZW50U2hhZGVyO2NvbnN0IGw9KGZ1bmN0aW9uIGModCl7bGV0IGU9IlNIQURPV01BUF9UWVBFX0JBU0lDIjtyZXR1cm4gMT09PXQuc2hhZG93TWFwVHlwZT9lPSJTSEFET1dNQVBfVFlQRV9QQ0YiOjI9PT10LnNoYWRvd01hcFR5cGU/ZT0iU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQiOjM9PT10LnNoYWRvd01hcFR5cGUmJihlPSJTSEFET1dNQVBfVFlQRV9WU00iKSxlfSkobiksZD0oZnVuY3Rpb24gcCh0KXtsZXQgZT0iRU5WTUFQX1RZUEVfQ1VCRSI7aWYodC5lbnZNYXApc3dpdGNoKHQuZW52TWFwTW9kZSl7Y2FzZSBkaXQ6Y2FzZSBwaXQ6ZT0iRU5WTUFQX1RZUEVfQ1VCRSI7YnJlYWs7Y2FzZSBtaXQ6Y2FzZSAzMDc6ZT0iRU5WTUFQX1RZUEVfQ1VCRV9VViJ9cmV0dXJuIGV9KShuKSxtPShmdW5jdGlvbiB1KHQpe2xldCBlPSJFTlZNQVBfTU9ERV9SRUZMRUNUSU9OIjtpZih0LmVudk1hcClzd2l0Y2godC5lbnZNYXBNb2RlKXtjYXNlIHBpdDpjYXNlIDMwNzplPSJFTlZNQVBfTU9ERV9SRUZSQUNUSU9OIn1yZXR1cm4gZX0pKG4pLGY9KGZ1bmN0aW9uIGcodCl7bGV0IGU9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZih0LmVudk1hcClzd2l0Y2godC5jb21iaW5lKXtjYXNlIDA6ZT0iRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZIjticmVhaztjYXNlIDE6ZT0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSAyOmU9IkVOVk1BUF9CTEVORElOR19BREQifXJldHVybiBlfSkobiksaD10LmdhbW1hRmFjdG9yPjA/dC5nYW1tYUZhY3RvcjoxLGI9bi5pc1dlYkdMMj8iIjooZnVuY3Rpb24geSh0KXtyZXR1cm5bdC5leHRlbnNpb25EZXJpdmF0aXZlc3x8dC5lbnZNYXBDdWJlVVZ8fHQuYnVtcE1hcHx8dC50YW5nZW50U3BhY2VOb3JtYWxNYXB8fHQuY2xlYXJjb2F0Tm9ybWFsTWFwfHx0LmZsYXRTaGFkaW5nfHwicGh5c2ljYWwiPT09dC5zaGFkZXJJRD8iI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGUiOiIiLCh0LmV4dGVuc2lvbkZyYWdEZXB0aHx8dC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyKSYmdC5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2V4dGVuc2lvbiBHTF9FWFRfZnJhZ19kZXB0aCA6IGVuYWJsZSI6IiIsdC5leHRlbnNpb25EcmF3QnVmZmVycyYmdC5yZW5kZXJlckV4dGVuc2lvbkRyYXdCdWZmZXJzPyIjZXh0ZW5zaW9uIEdMX0VYVF9kcmF3X2J1ZmZlcnMgOiByZXF1aXJlIjoiIiwodC5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHx0LmVudk1hcHx8dC50cmFuc21pc3Npb24+MCkmJnQucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIoTmN0KS5qb2luKCJcbiIpfSkobiksXz0oZnVuY3Rpb24gQyh0KXtjb25zdCBlPVtdO2Zvcihjb25zdCBuIGluIHQpe2NvbnN0IG89dFtuXTshMSE9PW8mJmUucHVzaCgiI2RlZmluZSAiK24rIiAiK28pfXJldHVybiBlLmpvaW4oIlxuIil9KShhKSxNPWkuY3JlYXRlUHJvZ3JhbSgpO2xldCB2LHgsTz1uLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK24uZ2xzbFZlcnNpb24rIlxuIjoiIjtuLmlzUmF3U2hhZGVyTWF0ZXJpYWw/KHY9W19dLmZpbHRlcihOY3QpLmpvaW4oIlxuIiksdi5sZW5ndGg+MCYmKHYrPSJcbiIpLHg9W2IsX10uZmlsdGVyKE5jdCkuam9pbigiXG4iKSx4Lmxlbmd0aD4wJiYoeCs9IlxuIikpOih2PVtXY3QobiksIiNkZWZpbmUgU0hBREVSX05BTUUgIituLnNoYWRlck5hbWUsXyxuLmluc3RhbmNpbmc/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkciOiIiLG4uaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HX0NPTE9SIjoiIixuLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVkVSVEVYX1RFWFRVUkVTIjoiIiwiI2RlZmluZSBHQU1NQV9GQUNUT1IgIitoLCIjZGVmaW5lIE1BWF9CT05FUyAiK24ubWF4Qm9uZXMsbi51c2VGb2cmJm4uZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLG4udXNlRm9nJiZuLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLG4ubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLG4uZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLG4uZW52TWFwPyIjZGVmaW5lICIrbToiIixuLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsbi5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLG4uZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixuLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLG4ubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLG4ubm9ybWFsTWFwJiZuLm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsbi5ub3JtYWxNYXAmJm4udGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLG4uY2xlYXJjb2F0TWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAiOiIiLG4uY2xlYXJjb2F0Um91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQIjoiIixuLmNsZWFyY29hdE5vcm1hbE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsbi5kaXNwbGFjZW1lbnRNYXAmJm4uc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBVU0VfRElTUExBQ0VNRU5UTUFQIjoiIixuLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsbi5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLG4uc3BlY3VsYXJUaW50TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUlRJTlRNQVAiOiIiLG4ucm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAiOiIiLG4ubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLG4uYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIixuLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixuLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixuLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixuLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixuLnZlcnRleENvbG9ycz8iI2RlZmluZSBVU0VfQ09MT1IiOiIiLG4udmVydGV4QWxwaGFzPyIjZGVmaW5lIFVTRV9DT0xPUl9BTFBIQSI6IiIsbi52ZXJ0ZXhVdnM/IiNkZWZpbmUgVVNFX1VWIjoiIixuLnV2c1ZlcnRleE9ubHk/IiNkZWZpbmUgVVZTX1ZFUlRFWF9PTkxZIjoiIixuLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixuLnNraW5uaW5nPyIjZGVmaW5lIFVTRV9TS0lOTklORyI6IiIsbi51c2VWZXJ0ZXhUZXh0dXJlPyIjZGVmaW5lIEJPTkVfVEVYVFVSRSI6IiIsbi5tb3JwaFRhcmdldHM/IiNkZWZpbmUgVVNFX01PUlBIVEFSR0VUUyI6IiIsbi5tb3JwaE5vcm1hbHMmJiExPT09bi5mbGF0U2hhZGluZz8iI2RlZmluZSBVU0VfTU9SUEhOT1JNQUxTIjoiIixuLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsbi5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsbi5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLG4uc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsbi5zaXplQXR0ZW51YXRpb24/IiNkZWZpbmUgVVNFX1NJWkVBVFRFTlVBVElPTiI6IiIsbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HIiwiXHRhdHRyaWJ1dGUgbWF0NCBpbnN0YW5jZU1hdHJpeDsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IiLCJcdGF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlQ29sb3I7IiwiI2VuZGlmIiwiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgbm9ybWFsOyIsImF0dHJpYnV0ZSB2ZWMyIHV2OyIsIiNpZmRlZiBVU0VfVEFOR0VOVCIsIlx0YXR0cmlidXRlIHZlYzQgdGFuZ2VudDsiLCIjZW5kaWYiLCIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkiLCJcdGF0dHJpYnV0ZSB2ZWM0IGNvbG9yOyIsIiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIiwiXHRhdHRyaWJ1dGUgdmVjMyBjb2xvcjsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX01PUlBIVEFSR0VUUyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQwOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQxOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIlx0I2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIlx0I2Vsc2UiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ3OyIsIlx0I2VuZGlmIiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9TS0lOTklORyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbkluZGV4OyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsiLCIjZW5kaWYiLCJcbiJdLmZpbHRlcihOY3QpLmpvaW4oIlxuIikseD1bYixXY3QobiksIiNkZWZpbmUgU0hBREVSX05BTUUgIituLnNoYWRlck5hbWUsXyxuLmFscGhhVGVzdD8iI2RlZmluZSBBTFBIQVRFU1QgIituLmFscGhhVGVzdCsobi5hbHBoYVRlc3QlMT8iIjoiLjAiKToiIiwiI2RlZmluZSBHQU1NQV9GQUNUT1IgIitoLG4udXNlRm9nJiZuLmZvZz8iI2RlZmluZSBVU0VfRk9HIjoiIixuLnVzZUZvZyYmbi5mb2dFeHAyPyIjZGVmaW5lIEZPR19FWFAyIjoiIixuLm1hcD8iI2RlZmluZSBVU0VfTUFQIjoiIixuLm1hdGNhcD8iI2RlZmluZSBVU0VfTUFUQ0FQIjoiIixuLmVudk1hcD8iI2RlZmluZSBVU0VfRU5WTUFQIjoiIixuLmVudk1hcD8iI2RlZmluZSAiK2Q6IiIsbi5lbnZNYXA/IiNkZWZpbmUgIittOiIiLG4uZW52TWFwPyIjZGVmaW5lICIrZjoiIixuLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsbi5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLG4uZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixuLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLG4ubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLG4ubm9ybWFsTWFwJiZuLm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsbi5ub3JtYWxNYXAmJm4udGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLG4uY2xlYXJjb2F0TWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAiOiIiLG4uY2xlYXJjb2F0Um91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQIjoiIixuLmNsZWFyY29hdE5vcm1hbE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsbi5zcGVjdWxhck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAiOiIiLG4uc3BlY3VsYXJJbnRlbnNpdHlNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQIjoiIixuLnNwZWN1bGFyVGludE1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJUSU5UTUFQIjoiIixuLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixuLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixuLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsbi5zaGVlbj8iI2RlZmluZSBVU0VfU0hFRU4iOiIiLG4udHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLG4udHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLG4udGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLG4udmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLG4udmVydGV4Q29sb3JzfHxuLmluc3RhbmNpbmdDb2xvcj8iI2RlZmluZSBVU0VfQ09MT1IiOiIiLG4udmVydGV4QWxwaGFzPyIjZGVmaW5lIFVTRV9DT0xPUl9BTFBIQSI6IiIsbi52ZXJ0ZXhVdnM/IiNkZWZpbmUgVVNFX1VWIjoiIixuLnV2c1ZlcnRleE9ubHk/IiNkZWZpbmUgVVZTX1ZFUlRFWF9PTkxZIjoiIixuLmdyYWRpZW50TWFwPyIjZGVmaW5lIFVTRV9HUkFESUVOVE1BUCI6IiIsbi5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsbi5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLG4uZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLG4uc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixuLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitsOiIiLG4ucHJlbXVsdGlwbGllZEFscGhhPyIjZGVmaW5lIFBSRU1VTFRJUExJRURfQUxQSEEiOiIiLG4ucGh5c2ljYWxseUNvcnJlY3RMaWdodHM/IiNkZWZpbmUgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyI6IiIsbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLChuLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fG4uZW52TWFwKSYmbi5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q/IiNkZWZpbmUgVEVYVFVSRV9MT0RfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsInVuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsiLDAhPT1uLnRvbmVNYXBwaW5nPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsMCE9PW4udG9uZU1hcHBpbmc/TnN0LnRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiIsMCE9PW4udG9uZU1hcHBpbmc/VGN0KCJ0b25lTWFwcGluZyIsbi50b25lTWFwcGluZyk6IiIsbi5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixOc3QuZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQsbi5tYXA/UmN0KCJtYXBUZXhlbFRvTGluZWFyIixuLm1hcEVuY29kaW5nKToiIixuLm1hdGNhcD9SY3QoIm1hdGNhcFRleGVsVG9MaW5lYXIiLG4ubWF0Y2FwRW5jb2RpbmcpOiIiLG4uZW52TWFwP1JjdCgiZW52TWFwVGV4ZWxUb0xpbmVhciIsbi5lbnZNYXBFbmNvZGluZyk6IiIsbi5lbWlzc2l2ZU1hcD9SY3QoImVtaXNzaXZlTWFwVGV4ZWxUb0xpbmVhciIsbi5lbWlzc2l2ZU1hcEVuY29kaW5nKToiIixuLnNwZWN1bGFyVGludE1hcD9SY3QoInNwZWN1bGFyVGludE1hcFRleGVsVG9MaW5lYXIiLG4uc3BlY3VsYXJUaW50TWFwRW5jb2RpbmcpOiIiLG4ubGlnaHRNYXA/UmN0KCJsaWdodE1hcFRleGVsVG9MaW5lYXIiLG4ubGlnaHRNYXBFbmNvZGluZyk6IiIsQWN0KCJsaW5lYXJUb091dHB1dFRleGVsIixuLm91dHB1dEVuY29kaW5nKSxuLmRlcHRoUGFja2luZz8iI2RlZmluZSBERVBUSF9QQUNLSU5HICIrbi5kZXB0aFBhY2tpbmc6IiIsIlxuIl0uZmlsdGVyKE5jdCkuam9pbigiXG4iKSkscj1GY3Qocikscj16Y3QocixuKSxyPUljdChyLG4pLHM9RmN0KHMpLHM9emN0KHMsbikscz1JY3QocyxuKSxyPWpjdChyKSxzPWpjdChzKSxuLmlzV2ViR0wyJiYhMCE9PW4uaXNSYXdTaGFkZXJNYXRlcmlhbCYmKE89IiN2ZXJzaW9uIDMwMCBlc1xuIix2PVsiI2RlZmluZSBhdHRyaWJ1dGUgaW4iLCIjZGVmaW5lIHZhcnlpbmcgb3V0IiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSJdLmpvaW4oIlxuIikrIlxuIit2LHg9WyIjZGVmaW5lIHZhcnlpbmcgaW4iLG4uZ2xzbFZlcnNpb249PT1qaXQ/IiI6Im91dCBoaWdocCB2ZWM0IHBjX2ZyYWdDb2xvcjsiLG4uZ2xzbFZlcnNpb249PT1qaXQ/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmVDdWJlIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2oiLCIjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qTG9kRVhUIHRleHR1cmVQcm9qTG9kIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qR3JhZEVYVCB0ZXh0dXJlUHJvakdyYWQiLCIjZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oIlxuIikrIlxuIit4KTtjb25zdCBQPU8reCtzLHc9a2N0KGksMzU2MzMsTyt2K3IpLGs9a2N0KGksMzU2MzIsUCk7aWYoaS5hdHRhY2hTaGFkZXIoTSx3KSxpLmF0dGFjaFNoYWRlcihNLGspLHZvaWQgMCE9PW4uaW5kZXgwQXR0cmlidXRlTmFtZT9pLmJpbmRBdHRyaWJMb2NhdGlvbihNLDAsbi5pbmRleDBBdHRyaWJ1dGVOYW1lKTohMD09PW4ubW9ycGhUYXJnZXRzJiZpLmJpbmRBdHRyaWJMb2NhdGlvbihNLDAsInBvc2l0aW9uIiksaS5saW5rUHJvZ3JhbShNKSx0LmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKXtjb25zdCB0PWkuZ2V0UHJvZ3JhbUluZm9Mb2coTSkudHJpbSgpLGU9aS5nZXRTaGFkZXJJbmZvTG9nKHcpLnRyaW0oKSxuPWkuZ2V0U2hhZGVySW5mb0xvZyhrKS50cmltKCk7bGV0IG89ITAsYT0hMDtpZighMT09PWkuZ2V0UHJvZ3JhbVBhcmFtZXRlcihNLDM1NzE0KSl7bz0hMTtjb25zdCBlPUVjdChpLHcsInZlcnRleCIpLG49RWN0KGksaywiZnJhZ21lbnQiKTtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFByb2dyYW06IHNoYWRlciBlcnJvcjogIixpLmdldEVycm9yKCksIjM1NzE1IixpLmdldFByb2dyYW1QYXJhbWV0ZXIoTSwzNTcxNSksImdsLmdldFByb2dyYW1JbmZvTG9nIix0LGUsbil9ZWxzZSIiIT09dD9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKSIsdCk6IiIhPT1lJiYiIiE9PW58fChhPSExKTthJiYodGhpcy5kaWFnbm9zdGljcz17cnVubmFibGU6byxwcm9ncmFtTG9nOnQsdmVydGV4U2hhZGVyOntsb2c6ZSxwcmVmaXg6dn0sZnJhZ21lbnRTaGFkZXI6e2xvZzpuLHByZWZpeDp4fX0pfWxldCBTLEQ7cmV0dXJuIGkuZGVsZXRlU2hhZGVyKHcpLGkuZGVsZXRlU2hhZGVyKGspLHRoaXMuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09UyYmKFM9bmV3IHdjdChpLE0pKSxTfSx0aGlzLmdldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09RCYmKEQ9KGZ1bmN0aW9uIHQoZSxuKXtjb25zdCBvPXt9LGk9ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKG4sMzU3MjEpO2ZvcihsZXQgdD0wO3Q8aTt0Kyspe2NvbnN0IGk9ZS5nZXRBY3RpdmVBdHRyaWIobix0KS5uYW1lO29baV09ZS5nZXRBdHRyaWJMb2NhdGlvbihuLGkpfXJldHVybiBvfSkoaSxNKSksRH0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7by5yZWxlYXNlU3RhdGVzT2ZQcm9ncmFtKHRoaXMpLGkuZGVsZXRlUHJvZ3JhbShNKSx0aGlzLnByb2dyYW09dm9pZCAwfSx0aGlzLm5hbWU9bi5zaGFkZXJOYW1lLHRoaXMuaWQ9U2N0KyssdGhpcy5jYWNoZUtleT1lLHRoaXMudXNlZFRpbWVzPTEsdGhpcy5wcm9ncmFtPU0sdGhpcy52ZXJ0ZXhTaGFkZXI9dyx0aGlzLmZyYWdtZW50U2hhZGVyPWssdGhpc31mdW5jdGlvbiBxY3QodCxlLG4sbyxpLGEscil7Y29uc3Qgcz1bXSxsPWkuaXNXZWJHTDIsYz1pLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIsZD1pLmZsb2F0VmVydGV4VGV4dHVyZXMscD1pLm1heFZlcnRleFVuaWZvcm1zLG09aS52ZXJ0ZXhUZXh0dXJlcztsZXQgdT1pLnByZWNpc2lvbjtjb25zdCBmPXtNZXNoRGVwdGhNYXRlcmlhbDoiZGVwdGgiLE1lc2hEaXN0YW5jZU1hdGVyaWFsOiJkaXN0YW5jZVJHQkEiLE1lc2hOb3JtYWxNYXRlcmlhbDoibm9ybWFsIixNZXNoQmFzaWNNYXRlcmlhbDoiYmFzaWMiLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ImxhbWJlcnQiLE1lc2hQaG9uZ01hdGVyaWFsOiJwaG9uZyIsTWVzaFRvb25NYXRlcmlhbDoidG9vbiIsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoUGh5c2ljYWxNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hNYXRjYXBNYXRlcmlhbDoibWF0Y2FwIixMaW5lQmFzaWNNYXRlcmlhbDoiYmFzaWMiLExpbmVEYXNoZWRNYXRlcmlhbDoiZGFzaGVkIixQb2ludHNNYXRlcmlhbDoicG9pbnRzIixTaGFkb3dNYXRlcmlhbDoic2hhZG93IixTcHJpdGVNYXRlcmlhbDoic3ByaXRlIn0sZz1bInByZWNpc2lvbiIsImlzV2ViR0wyIiwic3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyIsIm91dHB1dEVuY29kaW5nIiwiaW5zdGFuY2luZyIsImluc3RhbmNpbmdDb2xvciIsIm1hcCIsIm1hcEVuY29kaW5nIiwibWF0Y2FwIiwibWF0Y2FwRW5jb2RpbmciLCJlbnZNYXAiLCJlbnZNYXBNb2RlIiwiZW52TWFwRW5jb2RpbmciLCJlbnZNYXBDdWJlVVYiLCJsaWdodE1hcCIsImxpZ2h0TWFwRW5jb2RpbmciLCJhb01hcCIsImVtaXNzaXZlTWFwIiwiZW1pc3NpdmVNYXBFbmNvZGluZyIsImJ1bXBNYXAiLCJub3JtYWxNYXAiLCJvYmplY3RTcGFjZU5vcm1hbE1hcCIsInRhbmdlbnRTcGFjZU5vcm1hbE1hcCIsImNsZWFyY29hdE1hcCIsImNsZWFyY29hdFJvdWdobmVzc01hcCIsImNsZWFyY29hdE5vcm1hbE1hcCIsImRpc3BsYWNlbWVudE1hcCIsInNwZWN1bGFyTWFwIiwic3BlY3VsYXJJbnRlbnNpdHlNYXAiLCJzcGVjdWxhclRpbnRNYXAiLCJzcGVjdWxhclRpbnRNYXBFbmNvZGluZyIsInJvdWdobmVzc01hcCIsIm1ldGFsbmVzc01hcCIsImdyYWRpZW50TWFwIiwiYWxwaGFNYXAiLCJjb21iaW5lIiwidmVydGV4Q29sb3JzIiwidmVydGV4QWxwaGFzIiwidmVydGV4VGFuZ2VudHMiLCJ2ZXJ0ZXhVdnMiLCJ1dnNWZXJ0ZXhPbmx5IiwiZm9nIiwidXNlRm9nIiwiZm9nRXhwMiIsImZsYXRTaGFkaW5nIiwic2l6ZUF0dGVudWF0aW9uIiwibG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciIsInNraW5uaW5nIiwibWF4Qm9uZXMiLCJ1c2VWZXJ0ZXhUZXh0dXJlIiwibW9ycGhUYXJnZXRzIiwibW9ycGhOb3JtYWxzIiwicHJlbXVsdGlwbGllZEFscGhhIiwibnVtRGlyTGlnaHRzIiwibnVtUG9pbnRMaWdodHMiLCJudW1TcG90TGlnaHRzIiwibnVtSGVtaUxpZ2h0cyIsIm51bVJlY3RBcmVhTGlnaHRzIiwibnVtRGlyTGlnaHRTaGFkb3dzIiwibnVtUG9pbnRMaWdodFNoYWRvd3MiLCJudW1TcG90TGlnaHRTaGFkb3dzIiwic2hhZG93TWFwRW5hYmxlZCIsInNoYWRvd01hcFR5cGUiLCJ0b25lTWFwcGluZyIsInBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzIiwiYWxwaGFUZXN0IiwiZG91YmxlU2lkZWQiLCJmbGlwU2lkZWQiLCJudW1DbGlwcGluZ1BsYW5lcyIsIm51bUNsaXBJbnRlcnNlY3Rpb24iLCJkZXB0aFBhY2tpbmciLCJkaXRoZXJpbmciLCJzaGVlbiIsInRyYW5zbWlzc2lvbiIsInRyYW5zbWlzc2lvbk1hcCIsInRoaWNrbmVzc01hcCJdO2Z1bmN0aW9uIGgodCl7bGV0IGU7cmV0dXJuIHQmJnQuaXNUZXh0dXJlP2U9dC5lbmNvZGluZzp0JiZ0LmlzV2ViR0xSZW5kZXJUYXJnZXQ/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtcy5nZXRUZXh0dXJlRW5jb2RpbmdGcm9tTWFwOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLGU9dC50ZXh0dXJlLmVuY29kaW5nKTplPXppdCxlfXJldHVybntnZXRQYXJhbWV0ZXJzOmZ1bmN0aW9uIGIoYSxzLGcseSxfKXtjb25zdCBDPXkuZm9nLE09KGEuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9uOmUpLmdldChhLmVudk1hcHx8KGEuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD95LmVudmlyb25tZW50Om51bGwpKSx2PWZbYS50eXBlXSx4PV8uaXNTa2lubmVkTWVzaD8oZnVuY3Rpb24gTyh0KXtjb25zdCBlPXQuc2tlbGV0b24uYm9uZXM7aWYoZClyZXR1cm4gMTAyNDt7Y29uc3QgdD1NYXRoLmZsb29yKChwLTIwKS80KSxuPU1hdGgubWluKHQsZS5sZW5ndGgpO3JldHVybiBuPGUubGVuZ3RoPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFNrZWxldG9uIGhhcyAiK2UubGVuZ3RoKyIgYm9uZXMuIFRoaXMgR1BVIHN1cHBvcnRzICIrbisiLiIpLDApOm59fSkoXyk6MDtsZXQgUCx3O2lmKG51bGwhPT1hLnByZWNpc2lvbiYmKHU9aS5nZXRNYXhQcmVjaXNpb24oYS5wcmVjaXNpb24pLHUhPT1hLnByZWNpc2lvbiYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW0uZ2V0UGFyYW1ldGVyczoiLGEucHJlY2lzaW9uLCJub3Qgc3VwcG9ydGVkLCB1c2luZyIsdSwiaW5zdGVhZC4iKSksdil7Y29uc3QgdD1Jc3Rbdl07UD10LnZlcnRleFNoYWRlcix3PXQuZnJhZ21lbnRTaGFkZXJ9ZWxzZSBQPWEudmVydGV4U2hhZGVyLHc9YS5mcmFnbWVudFNoYWRlcjtjb25zdCBrPXQuZ2V0UmVuZGVyVGFyZ2V0KCk7cmV0dXJue2lzV2ViR0wyOmwsc2hhZGVySUQ6dixzaGFkZXJOYW1lOmEudHlwZSx2ZXJ0ZXhTaGFkZXI6UCxmcmFnbWVudFNoYWRlcjp3LGRlZmluZXM6YS5kZWZpbmVzLGlzUmF3U2hhZGVyTWF0ZXJpYWw6ITA9PT1hLmlzUmF3U2hhZGVyTWF0ZXJpYWwsZ2xzbFZlcnNpb246YS5nbHNsVmVyc2lvbixwcmVjaXNpb246dSxpbnN0YW5jaW5nOiEwPT09Xy5pc0luc3RhbmNlZE1lc2gsaW5zdGFuY2luZ0NvbG9yOiEwPT09Xy5pc0luc3RhbmNlZE1lc2gmJm51bGwhPT1fLmluc3RhbmNlQ29sb3Isc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlczptLG91dHB1dEVuY29kaW5nOm51bGwhPT1rP2goay50ZXh0dXJlKTp0Lm91dHB1dEVuY29kaW5nLG1hcDohIWEubWFwLG1hcEVuY29kaW5nOmgoYS5tYXApLG1hdGNhcDohIWEubWF0Y2FwLG1hdGNhcEVuY29kaW5nOmgoYS5tYXRjYXApLGVudk1hcDohIU0sZW52TWFwTW9kZTpNJiZNLm1hcHBpbmcsZW52TWFwRW5jb2Rpbmc6aChNKSxlbnZNYXBDdWJlVVY6ISFNJiYoTS5tYXBwaW5nPT09bWl0fHwzMDc9PT1NLm1hcHBpbmcpLGxpZ2h0TWFwOiEhYS5saWdodE1hcCxsaWdodE1hcEVuY29kaW5nOmgoYS5saWdodE1hcCksYW9NYXA6ISFhLmFvTWFwLGVtaXNzaXZlTWFwOiEhYS5lbWlzc2l2ZU1hcCxlbWlzc2l2ZU1hcEVuY29kaW5nOmgoYS5lbWlzc2l2ZU1hcCksYnVtcE1hcDohIWEuYnVtcE1hcCxub3JtYWxNYXA6ISFhLm5vcm1hbE1hcCxvYmplY3RTcGFjZU5vcm1hbE1hcDoxPT09YS5ub3JtYWxNYXBUeXBlLHRhbmdlbnRTcGFjZU5vcm1hbE1hcDowPT09YS5ub3JtYWxNYXBUeXBlLGNsZWFyY29hdE1hcDohIWEuY2xlYXJjb2F0TWFwLGNsZWFyY29hdFJvdWdobmVzc01hcDohIWEuY2xlYXJjb2F0Um91Z2huZXNzTWFwLGNsZWFyY29hdE5vcm1hbE1hcDohIWEuY2xlYXJjb2F0Tm9ybWFsTWFwLGRpc3BsYWNlbWVudE1hcDohIWEuZGlzcGxhY2VtZW50TWFwLHJvdWdobmVzc01hcDohIWEucm91Z2huZXNzTWFwLG1ldGFsbmVzc01hcDohIWEubWV0YWxuZXNzTWFwLHNwZWN1bGFyTWFwOiEhYS5zcGVjdWxhck1hcCxzcGVjdWxhckludGVuc2l0eU1hcDohIWEuc3BlY3VsYXJJbnRlbnNpdHlNYXAsc3BlY3VsYXJUaW50TWFwOiEhYS5zcGVjdWxhclRpbnRNYXAsc3BlY3VsYXJUaW50TWFwRW5jb2Rpbmc6aChhLnNwZWN1bGFyVGludE1hcCksYWxwaGFNYXA6ISFhLmFscGhhTWFwLGdyYWRpZW50TWFwOiEhYS5ncmFkaWVudE1hcCxzaGVlbjohIWEuc2hlZW4sdHJhbnNtaXNzaW9uOiEhYS50cmFuc21pc3Npb24sdHJhbnNtaXNzaW9uTWFwOiEhYS50cmFuc21pc3Npb25NYXAsdGhpY2tuZXNzTWFwOiEhYS50aGlja25lc3NNYXAsY29tYmluZTphLmNvbWJpbmUsdmVydGV4VGFuZ2VudHM6ISFhLm5vcm1hbE1hcCYmISFfLmdlb21ldHJ5JiYhIV8uZ2VvbWV0cnkuYXR0cmlidXRlcy50YW5nZW50LHZlcnRleENvbG9yczphLnZlcnRleENvbG9ycyx2ZXJ0ZXhBbHBoYXM6ITA9PT1hLnZlcnRleENvbG9ycyYmISFfLmdlb21ldHJ5JiYhIV8uZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvciYmND09PV8uZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZSx2ZXJ0ZXhVdnM6ISEoYS5tYXB8fGEuYnVtcE1hcHx8YS5ub3JtYWxNYXB8fGEuc3BlY3VsYXJNYXB8fGEuYWxwaGFNYXB8fGEuZW1pc3NpdmVNYXB8fGEucm91Z2huZXNzTWFwfHxhLm1ldGFsbmVzc01hcHx8YS5jbGVhcmNvYXRNYXB8fGEuY2xlYXJjb2F0Um91Z2huZXNzTWFwfHxhLmNsZWFyY29hdE5vcm1hbE1hcHx8YS5kaXNwbGFjZW1lbnRNYXB8fGEudHJhbnNtaXNzaW9uTWFwfHxhLnRoaWNrbmVzc01hcHx8YS5zcGVjdWxhckludGVuc2l0eU1hcHx8YS5zcGVjdWxhclRpbnRNYXApLHV2c1ZlcnRleE9ubHk6IShhLm1hcHx8YS5idW1wTWFwfHxhLm5vcm1hbE1hcHx8YS5zcGVjdWxhck1hcHx8YS5hbHBoYU1hcHx8YS5lbWlzc2l2ZU1hcHx8YS5yb3VnaG5lc3NNYXB8fGEubWV0YWxuZXNzTWFwfHxhLmNsZWFyY29hdE5vcm1hbE1hcHx8YS50cmFuc21pc3Npb258fGEudHJhbnNtaXNzaW9uTWFwfHxhLnRoaWNrbmVzc01hcHx8YS5zcGVjdWxhckludGVuc2l0eU1hcHx8YS5zcGVjdWxhclRpbnRNYXB8fCFhLmRpc3BsYWNlbWVudE1hcCksZm9nOiEhQyx1c2VGb2c6YS5mb2csZm9nRXhwMjpDJiZDLmlzRm9nRXhwMixmbGF0U2hhZGluZzohIWEuZmxhdFNoYWRpbmcsc2l6ZUF0dGVudWF0aW9uOmEuc2l6ZUF0dGVudWF0aW9uLGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6Yyxza2lubmluZzohMD09PV8uaXNTa2lubmVkTWVzaCYmeD4wLG1heEJvbmVzOngsdXNlVmVydGV4VGV4dHVyZTpkLG1vcnBoVGFyZ2V0czohIV8uZ2VvbWV0cnkmJiEhXy5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhXy5nZW9tZXRyeSYmISFfLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbnVtRGlyTGlnaHRzOnMuZGlyZWN0aW9uYWwubGVuZ3RoLG51bVBvaW50TGlnaHRzOnMucG9pbnQubGVuZ3RoLG51bVNwb3RMaWdodHM6cy5zcG90Lmxlbmd0aCxudW1SZWN0QXJlYUxpZ2h0czpzLnJlY3RBcmVhLmxlbmd0aCxudW1IZW1pTGlnaHRzOnMuaGVtaS5sZW5ndGgsbnVtRGlyTGlnaHRTaGFkb3dzOnMuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoLG51bVBvaW50TGlnaHRTaGFkb3dzOnMucG9pbnRTaGFkb3dNYXAubGVuZ3RoLG51bVNwb3RMaWdodFNoYWRvd3M6cy5zcG90U2hhZG93TWFwLmxlbmd0aCxudW1DbGlwcGluZ1BsYW5lczpyLm51bVBsYW5lcyxudW1DbGlwSW50ZXJzZWN0aW9uOnIubnVtSW50ZXJzZWN0aW9uLGRpdGhlcmluZzphLmRpdGhlcmluZyxzaGFkb3dNYXBFbmFibGVkOnQuc2hhZG93TWFwLmVuYWJsZWQmJmcubGVuZ3RoPjAsc2hhZG93TWFwVHlwZTp0LnNoYWRvd01hcC50eXBlLHRvbmVNYXBwaW5nOmEudG9uZU1hcHBlZD90LnRvbmVNYXBwaW5nOjAscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6dC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6YS5wcmVtdWx0aXBsaWVkQWxwaGEsYWxwaGFUZXN0OmEuYWxwaGFUZXN0LGRvdWJsZVNpZGVkOjI9PT1hLnNpZGUsZmxpcFNpZGVkOjE9PT1hLnNpZGUsZGVwdGhQYWNraW5nOnZvaWQgMCE9PWEuZGVwdGhQYWNraW5nJiZhLmRlcHRoUGFja2luZyxpbmRleDBBdHRyaWJ1dGVOYW1lOmEuaW5kZXgwQXR0cmlidXRlTmFtZSxleHRlbnNpb25EZXJpdmF0aXZlczphLmV4dGVuc2lvbnMmJmEuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcyxleHRlbnNpb25GcmFnRGVwdGg6YS5leHRlbnNpb25zJiZhLmV4dGVuc2lvbnMuZnJhZ0RlcHRoLGV4dGVuc2lvbkRyYXdCdWZmZXJzOmEuZXh0ZW5zaW9ucyYmYS5leHRlbnNpb25zLmRyYXdCdWZmZXJzLGV4dGVuc2lvblNoYWRlclRleHR1cmVMT0Q6YS5leHRlbnNpb25zJiZhLmV4dGVuc2lvbnMuc2hhZGVyVGV4dHVyZUxPRCxyZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aDpsfHxvLmhhcygiRVhUX2ZyYWdfZGVwdGgiKSxyZW5kZXJlckV4dGVuc2lvbkRyYXdCdWZmZXJzOmx8fG8uaGFzKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKSxyZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q6bHx8by5oYXMoIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSxjdXN0b21Qcm9ncmFtQ2FjaGVLZXk6YS5jdXN0b21Qcm9ncmFtQ2FjaGVLZXkoKX19LGdldFByb2dyYW1DYWNoZUtleTpmdW5jdGlvbiB5KGUpe2NvbnN0IG49W107aWYoZS5zaGFkZXJJRD9uLnB1c2goZS5zaGFkZXJJRCk6KG4ucHVzaChlLmZyYWdtZW50U2hhZGVyKSxuLnB1c2goZS52ZXJ0ZXhTaGFkZXIpKSx2b2lkIDAhPT1lLmRlZmluZXMpZm9yKGNvbnN0IHQgaW4gZS5kZWZpbmVzKW4ucHVzaCh0KSxuLnB1c2goZS5kZWZpbmVzW3RdKTtpZighMT09PWUuaXNSYXdTaGFkZXJNYXRlcmlhbCl7Zm9yKGxldCB0PTA7dDxnLmxlbmd0aDt0Kyspbi5wdXNoKGVbZ1t0XV0pO24ucHVzaCh0Lm91dHB1dEVuY29kaW5nKSxuLnB1c2godC5nYW1tYUZhY3Rvcil9cmV0dXJuIG4ucHVzaChlLmN1c3RvbVByb2dyYW1DYWNoZUtleSksbi5qb2luKCl9LGdldFVuaWZvcm1zOmZ1bmN0aW9uIF8odCl7Y29uc3QgZT1mW3QudHlwZV07bGV0IG47cmV0dXJuIG49ZT9oc3QuY2xvbmUoSXN0W2VdLnVuaWZvcm1zKTp0LnVuaWZvcm1zLG59LGFjcXVpcmVQcm9ncmFtOmZ1bmN0aW9uIEMoZSxuKXtsZXQgbztmb3IobGV0IHQ9MCxlPXMubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9c1t0XTtpZihlLmNhY2hlS2V5PT09bil7bz1lLCsrby51c2VkVGltZXM7YnJlYWt9fXJldHVybiB2b2lkIDA9PT1vJiYobz1uZXcgWWN0KHQsbixlLGEpLHMucHVzaChvKSksb30scmVsZWFzZVByb2dyYW06ZnVuY3Rpb24gTSh0KXtpZigwPT0tLXQudXNlZFRpbWVzKXtjb25zdCBlPXMuaW5kZXhPZih0KTtzW2VdPXNbcy5sZW5ndGgtMV0scy5wb3AoKSx0LmRlc3Ryb3koKX19LHByb2dyYW1zOnN9fWZ1bmN0aW9uIFpjdCgpe2xldCB0PW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24gZShuKXtsZXQgbz10LmdldChuKTtyZXR1cm4gdm9pZCAwPT09byYmKG89e30sdC5zZXQobixvKSksb30scmVtb3ZlOmZ1bmN0aW9uIG4oZSl7dC5kZWxldGUoZSl9LHVwZGF0ZTpmdW5jdGlvbiBvKGUsbixpKXt0LmdldChlKVtuXT1pfSxkaXNwb3NlOmZ1bmN0aW9uIGkoKXt0PW5ldyBXZWFrTWFwfX19ZnVuY3Rpb24gWGN0KHQsZSl7cmV0dXJuIHQuZ3JvdXBPcmRlciE9PWUuZ3JvdXBPcmRlcj90Lmdyb3VwT3JkZXItZS5ncm91cE9yZGVyOnQucmVuZGVyT3JkZXIhPT1lLnJlbmRlck9yZGVyP3QucmVuZGVyT3JkZXItZS5yZW5kZXJPcmRlcjp0LnByb2dyYW0hPT1lLnByb2dyYW0/dC5wcm9ncmFtLmlkLWUucHJvZ3JhbS5pZDp0Lm1hdGVyaWFsLmlkIT09ZS5tYXRlcmlhbC5pZD90Lm1hdGVyaWFsLmlkLWUubWF0ZXJpYWwuaWQ6dC56IT09ZS56P3Quei1lLno6dC5pZC1lLmlkfWZ1bmN0aW9uIEtjdCh0LGUpe3JldHVybiB0Lmdyb3VwT3JkZXIhPT1lLmdyb3VwT3JkZXI/dC5ncm91cE9yZGVyLWUuZ3JvdXBPcmRlcjp0LnJlbmRlck9yZGVyIT09ZS5yZW5kZXJPcmRlcj90LnJlbmRlck9yZGVyLWUucmVuZGVyT3JkZXI6dC56IT09ZS56P2Uuei10Lno6dC5pZC1lLmlkfWZ1bmN0aW9uIEpjdCh0KXtjb25zdCBlPVtdO2xldCBuPTA7Y29uc3Qgbz1bXSxpPVtdLGE9W10scj17aWQ6LTF9O2Z1bmN0aW9uIHMobyxpLGEscyxsLGMpe2xldCBkPWVbbl07Y29uc3QgcD10LmdldChhKTtyZXR1cm4gdm9pZCAwPT09ZD8oZD17aWQ6by5pZCxvYmplY3Q6byxnZW9tZXRyeTppLG1hdGVyaWFsOmEscHJvZ3JhbTpwLnByb2dyYW18fHIsZ3JvdXBPcmRlcjpzLHJlbmRlck9yZGVyOm8ucmVuZGVyT3JkZXIsejpsLGdyb3VwOmN9LGVbbl09ZCk6KGQuaWQ9by5pZCxkLm9iamVjdD1vLGQuZ2VvbWV0cnk9aSxkLm1hdGVyaWFsPWEsZC5wcm9ncmFtPXAucHJvZ3JhbXx8cixkLmdyb3VwT3JkZXI9cyxkLnJlbmRlck9yZGVyPW8ucmVuZGVyT3JkZXIsZC56PWwsZC5ncm91cD1jKSxuKyssZH1yZXR1cm57b3BhcXVlOm8sdHJhbnNtaXNzaXZlOmksdHJhbnNwYXJlbnQ6YSxpbml0OmZ1bmN0aW9uIGwoKXtuPTAsby5sZW5ndGg9MCxpLmxlbmd0aD0wLGEubGVuZ3RoPTB9LHB1c2g6ZnVuY3Rpb24gYyh0LGUsbixyLGwsZCl7Y29uc3QgcD1zKHQsZSxuLHIsbCxkKTtuLnRyYW5zbWlzc2lvbj4wP2kucHVzaChwKTohMD09PW4udHJhbnNwYXJlbnQ/YS5wdXNoKHApOm8ucHVzaChwKX0sdW5zaGlmdDpmdW5jdGlvbiBkKHQsZSxuLHIsbCxjKXtjb25zdCBkPXModCxlLG4scixsLGMpO24udHJhbnNtaXNzaW9uPjA/aS51bnNoaWZ0KGQpOiEwPT09bi50cmFuc3BhcmVudD9hLnVuc2hpZnQoZCk6by51bnNoaWZ0KGQpfSxmaW5pc2g6ZnVuY3Rpb24gcCgpe2ZvcihsZXQgdD1uLG89ZS5sZW5ndGg7dDxvO3QrKyl7Y29uc3Qgbj1lW3RdO2lmKG51bGw9PT1uLmlkKWJyZWFrO24uaWQ9bnVsbCxuLm9iamVjdD1udWxsLG4uZ2VvbWV0cnk9bnVsbCxuLm1hdGVyaWFsPW51bGwsbi5wcm9ncmFtPW51bGwsbi5ncm91cD1udWxsfX0sc29ydDpmdW5jdGlvbiBtKHQsZSl7by5sZW5ndGg+MSYmby5zb3J0KHR8fFhjdCksaS5sZW5ndGg+MSYmaS5zb3J0KGV8fEtjdCksYS5sZW5ndGg+MSYmYS5zb3J0KGV8fEtjdCl9fX1mdW5jdGlvbiBRY3QodCl7bGV0IGU9bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbiBuKG8saSl7bGV0IGE7cmV0dXJuITE9PT1lLmhhcyhvKT8oYT1uZXcgSmN0KHQpLGUuc2V0KG8sW2FdKSk6aT49ZS5nZXQobykubGVuZ3RoPyhhPW5ldyBKY3QodCksZS5nZXQobykucHVzaChhKSk6YT1lLmdldChvKVtpXSxhfSxkaXNwb3NlOmZ1bmN0aW9uIG8oKXtlPW5ldyBXZWFrTWFwfX19ZnVuY3Rpb24gJGN0KCl7Y29uc3QgdD17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGUpe2lmKHZvaWQgMCE9PXRbZS5pZF0pcmV0dXJuIHRbZS5pZF07bGV0IG47c3dpdGNoKGUudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjpuPXtkaXJlY3Rpb246bmV3IGNhdCxjb2xvcjpuZXcgUnJ0fTticmVhaztjYXNlIlNwb3RMaWdodCI6bj17cG9zaXRpb246bmV3IGNhdCxkaXJlY3Rpb246bmV3IGNhdCxjb2xvcjpuZXcgUnJ0LGRpc3RhbmNlOjAsY29uZUNvczowLHBlbnVtYnJhQ29zOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpuPXtwb3NpdGlvbjpuZXcgY2F0LGNvbG9yOm5ldyBScnQsZGlzdGFuY2U6MCxkZWNheTowfTticmVhaztjYXNlIkhlbWlzcGhlcmVMaWdodCI6bj17ZGlyZWN0aW9uOm5ldyBjYXQsc2t5Q29sb3I6bmV3IFJydCxncm91bmRDb2xvcjpuZXcgUnJ0fTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOm49e2NvbG9yOm5ldyBScnQscG9zaXRpb246bmV3IGNhdCxoYWxmV2lkdGg6bmV3IGNhdCxoYWxmSGVpZ2h0Om5ldyBjYXR9fXJldHVybiB0W2UuaWRdPW4sbn19fWxldCB0ZHQ9MDtmdW5jdGlvbiBlZHQodCxlKXtyZXR1cm4oZS5jYXN0U2hhZG93PzE6MCktKHQuY2FzdFNoYWRvdz8xOjApfWZ1bmN0aW9uIG5kdCh0LGUpe2NvbnN0IG49bmV3ICRjdCxvPShmdW5jdGlvbiBpKCl7Y29uc3QgdD17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGUpe2lmKHZvaWQgMCE9PXRbZS5pZF0pcmV0dXJuIHRbZS5pZF07bGV0IG47c3dpdGNoKGUudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjpjYXNlIlNwb3RMaWdodCI6bj17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBRaXR9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6bj17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBRaXQsc2hhZG93Q2FtZXJhTmVhcjoxLHNoYWRvd0NhbWVyYUZhcjoxZTN9fXJldHVybiB0W2UuaWRdPW4sbn19fSkoKSxhPXt2ZXJzaW9uOjAsaGFzaDp7ZGlyZWN0aW9uYWxMZW5ndGg6LTEscG9pbnRMZW5ndGg6LTEsc3BvdExlbmd0aDotMSxyZWN0QXJlYUxlbmd0aDotMSxoZW1pTGVuZ3RoOi0xLG51bURpcmVjdGlvbmFsU2hhZG93czotMSxudW1Qb2ludFNoYWRvd3M6LTEsbnVtU3BvdFNoYWRvd3M6LTF9LGFtYmllbnQ6WzAsMCwwXSxwcm9iZTpbXSxkaXJlY3Rpb25hbDpbXSxkaXJlY3Rpb25hbFNoYWRvdzpbXSxkaXJlY3Rpb25hbFNoYWRvd01hcDpbXSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDpbXSxzcG90OltdLHNwb3RTaGFkb3c6W10sc3BvdFNoYWRvd01hcDpbXSxzcG90U2hhZG93TWF0cml4OltdLHJlY3RBcmVhOltdLHJlY3RBcmVhTFRDMTpudWxsLHJlY3RBcmVhTFRDMjpudWxsLHBvaW50OltdLHBvaW50U2hhZG93OltdLHBvaW50U2hhZG93TWFwOltdLHBvaW50U2hhZG93TWF0cml4OltdLGhlbWk6W119O2ZvcihsZXQgdD0wO3Q8OTt0KyspYS5wcm9iZS5wdXNoKG5ldyBjYXQpO2NvbnN0IHI9bmV3IGNhdCxzPW5ldyBCYXQsbD1uZXcgQmF0O3JldHVybntzZXR1cDpmdW5jdGlvbiBjKGkpe2xldCByPTAscz0wLGw9MDtmb3IobGV0IHQ9MDt0PDk7dCsrKWEucHJvYmVbdF0uc2V0KDAsMCwwKTtsZXQgYz0wLGQ9MCxwPTAsbT0wLHU9MCxmPTAsZz0wLGg9MDtpLnNvcnQoZWR0KTtmb3IobGV0IHQ9MCxlPWkubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9aVt0XSxiPWUuY29sb3IseT1lLmludGVuc2l0eSxfPWUuZGlzdGFuY2UsQz1lLnNoYWRvdyYmZS5zaGFkb3cubWFwP2Uuc2hhZG93Lm1hcC50ZXh0dXJlOm51bGw7aWYoZS5pc0FtYmllbnRMaWdodClyKz1iLnIqeSxzKz1iLmcqeSxsKz1iLmIqeTtlbHNlIGlmKGUuaXNMaWdodFByb2JlKWZvcihsZXQgdD0wO3Q8OTt0KyspYS5wcm9iZVt0XS5hZGRTY2FsZWRWZWN0b3IoZS5zaC5jb2VmZmljaWVudHNbdF0seSk7ZWxzZSBpZihlLmlzRGlyZWN0aW9uYWxMaWdodCl7Y29uc3QgdD1uLmdldChlKTtpZih0LmNvbG9yLmNvcHkoZS5jb2xvcikubXVsdGlwbHlTY2FsYXIoZS5pbnRlbnNpdHkpLGUuY2FzdFNoYWRvdyl7Y29uc3QgdD1lLnNoYWRvdyxuPW8uZ2V0KGUpO24uc2hhZG93Qmlhcz10LmJpYXMsbi5zaGFkb3dOb3JtYWxCaWFzPXQubm9ybWFsQmlhcyxuLnNoYWRvd1JhZGl1cz10LnJhZGl1cyxuLnNoYWRvd01hcFNpemU9dC5tYXBTaXplLGEuZGlyZWN0aW9uYWxTaGFkb3dbY109bixhLmRpcmVjdGlvbmFsU2hhZG93TWFwW2NdPUMsYS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeFtjXT1lLnNoYWRvdy5tYXRyaXgsZisrfWEuZGlyZWN0aW9uYWxbY109dCxjKyt9ZWxzZSBpZihlLmlzU3BvdExpZ2h0KXtjb25zdCB0PW4uZ2V0KGUpO2lmKHQucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUubWF0cml4V29ybGQpLHQuY29sb3IuY29weShiKS5tdWx0aXBseVNjYWxhcih5KSx0LmRpc3RhbmNlPV8sdC5jb25lQ29zPU1hdGguY29zKGUuYW5nbGUpLHQucGVudW1icmFDb3M9TWF0aC5jb3MoZS5hbmdsZSooMS1lLnBlbnVtYnJhKSksdC5kZWNheT1lLmRlY2F5LGUuY2FzdFNoYWRvdyl7Y29uc3QgdD1lLnNoYWRvdyxuPW8uZ2V0KGUpO24uc2hhZG93Qmlhcz10LmJpYXMsbi5zaGFkb3dOb3JtYWxCaWFzPXQubm9ybWFsQmlhcyxuLnNoYWRvd1JhZGl1cz10LnJhZGl1cyxuLnNoYWRvd01hcFNpemU9dC5tYXBTaXplLGEuc3BvdFNoYWRvd1twXT1uLGEuc3BvdFNoYWRvd01hcFtwXT1DLGEuc3BvdFNoYWRvd01hdHJpeFtwXT1lLnNoYWRvdy5tYXRyaXgsaCsrfWEuc3BvdFtwXT10LHArK31lbHNlIGlmKGUuaXNSZWN0QXJlYUxpZ2h0KXtjb25zdCB0PW4uZ2V0KGUpO3QuY29sb3IuY29weShiKS5tdWx0aXBseVNjYWxhcih5KSx0LmhhbGZXaWR0aC5zZXQoLjUqZS53aWR0aCwwLDApLHQuaGFsZkhlaWdodC5zZXQoMCwuNSplLmhlaWdodCwwKSxhLnJlY3RBcmVhW21dPXQsbSsrfWVsc2UgaWYoZS5pc1BvaW50TGlnaHQpe2NvbnN0IHQ9bi5nZXQoZSk7aWYodC5jb2xvci5jb3B5KGUuY29sb3IpLm11bHRpcGx5U2NhbGFyKGUuaW50ZW5zaXR5KSx0LmRpc3RhbmNlPWUuZGlzdGFuY2UsdC5kZWNheT1lLmRlY2F5LGUuY2FzdFNoYWRvdyl7Y29uc3QgdD1lLnNoYWRvdyxuPW8uZ2V0KGUpO24uc2hhZG93Qmlhcz10LmJpYXMsbi5zaGFkb3dOb3JtYWxCaWFzPXQubm9ybWFsQmlhcyxuLnNoYWRvd1JhZGl1cz10LnJhZGl1cyxuLnNoYWRvd01hcFNpemU9dC5tYXBTaXplLG4uc2hhZG93Q2FtZXJhTmVhcj10LmNhbWVyYS5uZWFyLG4uc2hhZG93Q2FtZXJhRmFyPXQuY2FtZXJhLmZhcixhLnBvaW50U2hhZG93W2RdPW4sYS5wb2ludFNoYWRvd01hcFtkXT1DLGEucG9pbnRTaGFkb3dNYXRyaXhbZF09ZS5zaGFkb3cubWF0cml4LGcrK31hLnBvaW50W2RdPXQsZCsrfWVsc2UgaWYoZS5pc0hlbWlzcGhlcmVMaWdodCl7Y29uc3QgdD1uLmdldChlKTt0LnNreUNvbG9yLmNvcHkoZS5jb2xvcikubXVsdGlwbHlTY2FsYXIoeSksdC5ncm91bmRDb2xvci5jb3B5KGUuZ3JvdW5kQ29sb3IpLm11bHRpcGx5U2NhbGFyKHkpLGEuaGVtaVt1XT10LHUrK319bT4wJiYoZS5pc1dlYkdMMnx8ITA9PT10LmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik/KGEucmVjdEFyZWFMVEMxPXpzdC5MVENfRkxPQVRfMSxhLnJlY3RBcmVhTFRDMj16c3QuTFRDX0ZMT0FUXzIpOiEwPT09dC5oYXMoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik/KGEucmVjdEFyZWFMVEMxPXpzdC5MVENfSEFMRl8xLGEucmVjdEFyZWFMVEMyPXpzdC5MVENfSEFMRl8yKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVbmFibGUgdG8gdXNlIFJlY3RBcmVhTGlnaHQuIE1pc3NpbmcgV2ViR0wgZXh0ZW5zaW9ucy4iKSksYS5hbWJpZW50WzBdPXIsYS5hbWJpZW50WzFdPXMsYS5hbWJpZW50WzJdPWw7Y29uc3QgYj1hLmhhc2g7Yi5kaXJlY3Rpb25hbExlbmd0aD09PWMmJmIucG9pbnRMZW5ndGg9PT1kJiZiLnNwb3RMZW5ndGg9PT1wJiZiLnJlY3RBcmVhTGVuZ3RoPT09bSYmYi5oZW1pTGVuZ3RoPT09dSYmYi5udW1EaXJlY3Rpb25hbFNoYWRvd3M9PT1mJiZiLm51bVBvaW50U2hhZG93cz09PWcmJmIubnVtU3BvdFNoYWRvd3M9PT1ofHwoYS5kaXJlY3Rpb25hbC5sZW5ndGg9YyxhLnNwb3QubGVuZ3RoPXAsYS5yZWN0QXJlYS5sZW5ndGg9bSxhLnBvaW50Lmxlbmd0aD1kLGEuaGVtaS5sZW5ndGg9dSxhLmRpcmVjdGlvbmFsU2hhZG93Lmxlbmd0aD1mLGEuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoPWYsYS5wb2ludFNoYWRvdy5sZW5ndGg9ZyxhLnBvaW50U2hhZG93TWFwLmxlbmd0aD1nLGEuc3BvdFNoYWRvdy5sZW5ndGg9aCxhLnNwb3RTaGFkb3dNYXAubGVuZ3RoPWgsYS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC5sZW5ndGg9ZixhLnBvaW50U2hhZG93TWF0cml4Lmxlbmd0aD1nLGEuc3BvdFNoYWRvd01hdHJpeC5sZW5ndGg9aCxiLmRpcmVjdGlvbmFsTGVuZ3RoPWMsYi5wb2ludExlbmd0aD1kLGIuc3BvdExlbmd0aD1wLGIucmVjdEFyZWFMZW5ndGg9bSxiLmhlbWlMZW5ndGg9dSxiLm51bURpcmVjdGlvbmFsU2hhZG93cz1mLGIubnVtUG9pbnRTaGFkb3dzPWcsYi5udW1TcG90U2hhZG93cz1oLGEudmVyc2lvbj10ZHQrKyl9LHNldHVwVmlldzpmdW5jdGlvbiBkKHQsZSl7bGV0IG49MCxvPTAsaT0wLGM9MCxkPTA7Y29uc3QgcD1lLm1hdHJpeFdvcmxkSW52ZXJzZTtmb3IobGV0IGU9MCxtPXQubGVuZ3RoO2U8bTtlKyspe2NvbnN0IG09dFtlXTtpZihtLmlzRGlyZWN0aW9uYWxMaWdodCl7Y29uc3QgdD1hLmRpcmVjdGlvbmFsW25dO3QuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihtLm1hdHJpeFdvcmxkKSxyLnNldEZyb21NYXRyaXhQb3NpdGlvbihtLnRhcmdldC5tYXRyaXhXb3JsZCksdC5kaXJlY3Rpb24uc3ViKHIpLHQuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihwKSxuKyt9ZWxzZSBpZihtLmlzU3BvdExpZ2h0KXtjb25zdCB0PWEuc3BvdFtpXTt0LnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihtLm1hdHJpeFdvcmxkKSx0LnBvc2l0aW9uLmFwcGx5TWF0cml4NChwKSx0LmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24obS5tYXRyaXhXb3JsZCksci5zZXRGcm9tTWF0cml4UG9zaXRpb24obS50YXJnZXQubWF0cml4V29ybGQpLHQuZGlyZWN0aW9uLnN1YihyKSx0LmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24ocCksaSsrfWVsc2UgaWYobS5pc1JlY3RBcmVhTGlnaHQpe2NvbnN0IHQ9YS5yZWN0QXJlYVtjXTt0LnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihtLm1hdHJpeFdvcmxkKSx0LnBvc2l0aW9uLmFwcGx5TWF0cml4NChwKSxsLmlkZW50aXR5KCkscy5jb3B5KG0ubWF0cml4V29ybGQpLHMucHJlbXVsdGlwbHkocCksbC5leHRyYWN0Um90YXRpb24ocyksdC5oYWxmV2lkdGguc2V0KC41Km0ud2lkdGgsMCwwKSx0LmhhbGZIZWlnaHQuc2V0KDAsLjUqbS5oZWlnaHQsMCksdC5oYWxmV2lkdGguYXBwbHlNYXRyaXg0KGwpLHQuaGFsZkhlaWdodC5hcHBseU1hdHJpeDQobCksYysrfWVsc2UgaWYobS5pc1BvaW50TGlnaHQpe2NvbnN0IHQ9YS5wb2ludFtvXTt0LnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihtLm1hdHJpeFdvcmxkKSx0LnBvc2l0aW9uLmFwcGx5TWF0cml4NChwKSxvKyt9ZWxzZSBpZihtLmlzSGVtaXNwaGVyZUxpZ2h0KXtjb25zdCB0PWEuaGVtaVtkXTt0LmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24obS5tYXRyaXhXb3JsZCksdC5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHApLHQuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLGQrK319fSxzdGF0ZTphfX1mdW5jdGlvbiBvZHQodCxlKXtjb25zdCBuPW5ldyBuZHQodCxlKSxvPVtdLGk9W107cmV0dXJue2luaXQ6ZnVuY3Rpb24gYSgpe28ubGVuZ3RoPTAsaS5sZW5ndGg9MH0sc3RhdGU6e2xpZ2h0c0FycmF5Om8sc2hhZG93c0FycmF5OmksbGlnaHRzOm59LHNldHVwTGlnaHRzOmZ1bmN0aW9uIHIoKXtuLnNldHVwKG8pfSxzZXR1cExpZ2h0c1ZpZXc6ZnVuY3Rpb24gcyh0KXtuLnNldHVwVmlldyhvLHQpfSxwdXNoTGlnaHQ6ZnVuY3Rpb24gbCh0KXtvLnB1c2godCl9LHB1c2hTaGFkb3c6ZnVuY3Rpb24gYyh0KXtpLnB1c2godCl9fX1mdW5jdGlvbiBpZHQodCxlKXtsZXQgbj1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uIG8oaSxhPTApe2xldCByO3JldHVybiExPT09bi5oYXMoaSk/KHI9bmV3IG9kdCh0LGUpLG4uc2V0KGksW3JdKSk6YT49bi5nZXQoaSkubGVuZ3RoPyhyPW5ldyBvZHQodCxlKSxuLmdldChpKS5wdXNoKHIpKTpyPW4uZ2V0KGkpW2FdLHJ9LGRpc3Bvc2U6ZnVuY3Rpb24gaSgpe249bmV3IFdlYWtNYXB9fX1jbGFzcyBhZHQgZXh0ZW5kcyBPcnR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hEZXB0aE1hdGVyaWFsIix0aGlzLmRlcHRoUGFja2luZz0zMjAwLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlcHRoUGFja2luZz10LmRlcHRoUGFja2luZyx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpc319YWR0LnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsPSEwO2NsYXNzIHJkdCBleHRlbmRzIE9ydHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiLHRoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3IGNhdCx0aGlzLm5lYXJEaXN0YW5jZT0xLHRoaXMuZmFyRGlzdGFuY2U9MWUzLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5yZWZlcmVuY2VQb3NpdGlvbi5jb3B5KHQucmVmZXJlbmNlUG9zaXRpb24pLHRoaXMubmVhckRpc3RhbmNlPXQubmVhckRpc3RhbmNlLHRoaXMuZmFyRGlzdGFuY2U9dC5mYXJEaXN0YW5jZSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpc319ZnVuY3Rpb24gc2R0KHQsZSxuKXtsZXQgbz1uZXcgRXN0O2NvbnN0IGk9bmV3IFFpdCxhPW5ldyBRaXQscj1uZXcgYWF0LHM9bmV3IGFkdCh7ZGVwdGhQYWNraW5nOjMyMDF9KSxsPW5ldyByZHQsYz17fSxkPW4ubWF4VGV4dHVyZVNpemUscD17MDoxLDE6MCwyOjJ9LG09bmV3IGJzdCh7ZGVmaW5lczp7U0FNUExFX1JBVEU6Mi84LEhBTEZfU0FNUExFX1JBVEU6MS84fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBRaXR9LHJhZGl1czp7dmFsdWU6NH19LHZlcnRleFNoYWRlcjoidm9pZCBtYWluKCkge1xuXHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbn0iLGZyYWdtZW50U2hhZGVyOiJ1bmlmb3JtIHNhbXBsZXIyRCBzaGFkb3dfcGFzcztcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xudW5pZm9ybSBmbG9hdCByYWRpdXM7XG4jaW5jbHVkZSA8cGFja2luZz5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgbWVhbiA9IDAuMDtcblx0ZmxvYXQgc3F1YXJlZF9tZWFuID0gMC4wO1xuXHRmbG9hdCBkZXB0aCA9IHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSApIC8gcmVzb2x1dGlvbiApICk7XG5cdGZvciAoIGZsb2F0IGkgPSAtMS4wOyBpIDwgMS4wIDsgaSArPSBTQU1QTEVfUkFURSkge1xuXHRcdCNpZmRlZiBIT1JJWk9OVEFMX1BBU1Ncblx0XHRcdHZlYzIgZGlzdHJpYnV0aW9uID0gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggaSwgMC4wICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApO1xuXHRcdFx0bWVhbiArPSBkaXN0cmlidXRpb24ueDtcblx0XHRcdHNxdWFyZWRfbWVhbiArPSBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICsgZGlzdHJpYnV0aW9uLnggKiBkaXN0cmlidXRpb24ueDtcblx0XHQjZWxzZVxuXHRcdFx0ZmxvYXQgZGVwdGggPSB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAwLjAsIGkgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7XG5cdFx0XHRtZWFuICs9IGRlcHRoO1xuXHRcdFx0c3F1YXJlZF9tZWFuICs9IGRlcHRoICogZGVwdGg7XG5cdFx0I2VuZGlmXG5cdH1cblx0bWVhbiA9IG1lYW4gKiBIQUxGX1NBTVBMRV9SQVRFO1xuXHRzcXVhcmVkX21lYW4gPSBzcXVhcmVkX21lYW4gKiBIQUxGX1NBTVBMRV9SQVRFO1xuXHRmbG9hdCBzdGRfZGV2ID0gc3FydCggc3F1YXJlZF9tZWFuIC0gbWVhbiAqIG1lYW4gKTtcblx0Z2xfRnJhZ0NvbG9yID0gcGFjazJIYWxmVG9SR0JBKCB2ZWMyKCBtZWFuLCBzdGRfZGV2ICkgKTtcbn0ifSksdT1tLmNsb25lKCk7dS5kZWZpbmVzLkhPUklaT05UQUxfUEFTUz0xO2NvbnN0IGY9bmV3IHFydDtmLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB6cnQobmV3IEZsb2F0MzJBcnJheShbLTEsLTEsLjUsMywtMSwuNSwtMSwzLC41XSksMykpO2NvbnN0IGc9bmV3IHBzdChmLG0pLGg9dGhpcztmdW5jdGlvbiBiKG4sbyl7Y29uc3QgaT1lLnVwZGF0ZShnKTttLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPW4ubWFwLnRleHR1cmUsbS51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPW4ubWFwU2l6ZSxtLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1uLnJhZGl1cyx0LnNldFJlbmRlclRhcmdldChuLm1hcFBhc3MpLHQuY2xlYXIoKSx0LnJlbmRlckJ1ZmZlckRpcmVjdChvLG51bGwsaSxtLGcsbnVsbCksdS51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1uLm1hcFBhc3MudGV4dHVyZSx1LnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9bi5tYXBTaXplLHUudW5pZm9ybXMucmFkaXVzLnZhbHVlPW4ucmFkaXVzLHQuc2V0UmVuZGVyVGFyZ2V0KG4ubWFwKSx0LmNsZWFyKCksdC5yZW5kZXJCdWZmZXJEaXJlY3QobyxudWxsLGksdSxnLG51bGwpfWZ1bmN0aW9uIHkoZSxuLG8saSxhLHIsZCl7bGV0IG09bnVsbDtjb25zdCB1PSEwPT09aS5pc1BvaW50TGlnaHQ/ZS5jdXN0b21EaXN0YW5jZU1hdGVyaWFsOmUuY3VzdG9tRGVwdGhNYXRlcmlhbDtpZihtPXZvaWQgMCE9PXU/dTohMD09PWkuaXNQb2ludExpZ2h0P2w6cyx0LmxvY2FsQ2xpcHBpbmdFbmFibGVkJiYhMD09PW8uY2xpcFNoYWRvd3MmJjAhPT1vLmNsaXBwaW5nUGxhbmVzLmxlbmd0aCl7Y29uc3QgdD1tLnV1aWQsZT1vLnV1aWQ7bGV0IG49Y1t0XTt2b2lkIDA9PT1uJiYobj17fSxjW3RdPW4pO2xldCBpPW5bZV07dm9pZCAwPT09aSYmKGk9bS5jbG9uZSgpLG5bZV09aSksbT1pfXJldHVybiBtLnZpc2libGU9by52aXNpYmxlLG0ud2lyZWZyYW1lPW8ud2lyZWZyYW1lLG0uc2lkZT0zPT09ZD9udWxsIT09by5zaGFkb3dTaWRlP28uc2hhZG93U2lkZTpvLnNpZGU6bnVsbCE9PW8uc2hhZG93U2lkZT9vLnNoYWRvd1NpZGU6cFtvLnNpZGVdLG0uY2xpcFNoYWRvd3M9by5jbGlwU2hhZG93cyxtLmNsaXBwaW5nUGxhbmVzPW8uY2xpcHBpbmdQbGFuZXMsbS5jbGlwSW50ZXJzZWN0aW9uPW8uY2xpcEludGVyc2VjdGlvbixtLndpcmVmcmFtZUxpbmV3aWR0aD1vLndpcmVmcmFtZUxpbmV3aWR0aCxtLmxpbmV3aWR0aD1vLmxpbmV3aWR0aCwhMD09PWkuaXNQb2ludExpZ2h0JiYhMD09PW0uaXNNZXNoRGlzdGFuY2VNYXRlcmlhbCYmKG0ucmVmZXJlbmNlUG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGkubWF0cml4V29ybGQpLG0ubmVhckRpc3RhbmNlPWEsbS5mYXJEaXN0YW5jZT1yKSxtfWZ1bmN0aW9uIF8obixpLGEscixzKXtpZighMT09PW4udmlzaWJsZSlyZXR1cm47aWYobi5sYXllcnMudGVzdChpLmxheWVycykmJihuLmlzTWVzaHx8bi5pc0xpbmV8fG4uaXNQb2ludHMpJiYobi5jYXN0U2hhZG93fHxuLnJlY2VpdmVTaGFkb3cmJjM9PT1zKSYmKCFuLmZydXN0dW1DdWxsZWR8fG8uaW50ZXJzZWN0c09iamVjdChuKSkpe24ubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoYS5tYXRyaXhXb3JsZEludmVyc2Usbi5tYXRyaXhXb3JsZCk7Y29uc3Qgbz1lLnVwZGF0ZShuKSxpPW4ubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheShpKSl7Y29uc3QgZT1vLmdyb3Vwcztmb3IobGV0IGw9MCxjPWUubGVuZ3RoO2w8YztsKyspe2NvbnN0IGM9ZVtsXSxkPWlbYy5tYXRlcmlhbEluZGV4XTtpZihkJiZkLnZpc2libGUpe2NvbnN0IGU9eShuLDAsZCxyLGEubmVhcixhLmZhcixzKTt0LnJlbmRlckJ1ZmZlckRpcmVjdChhLG51bGwsbyxlLG4sYyl9fX1lbHNlIGlmKGkudmlzaWJsZSl7Y29uc3QgZT15KG4sMCxpLHIsYS5uZWFyLGEuZmFyLHMpO3QucmVuZGVyQnVmZmVyRGlyZWN0KGEsbnVsbCxvLGUsbixudWxsKX19Y29uc3QgbD1uLmNoaWxkcmVuO2ZvcihsZXQgdD0wLGU9bC5sZW5ndGg7dDxlO3QrKylfKGxbdF0saSxhLHIscyl9dGhpcy5lbmFibGVkPSExLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMudHlwZT0xLHRoaXMucmVuZGVyPWZ1bmN0aW9uKGUsbixzKXtpZighMT09PWguZW5hYmxlZClyZXR1cm47aWYoITE9PT1oLmF1dG9VcGRhdGUmJiExPT09aC5uZWVkc1VwZGF0ZSlyZXR1cm47aWYoMD09PWUubGVuZ3RoKXJldHVybjtjb25zdCBsPXQuZ2V0UmVuZGVyVGFyZ2V0KCksYz10LmdldEFjdGl2ZUN1YmVGYWNlKCkscD10LmdldEFjdGl2ZU1pcG1hcExldmVsKCksbT10LnN0YXRlO20uc2V0QmxlbmRpbmcoMCksbS5idWZmZXJzLmNvbG9yLnNldENsZWFyKDEsMSwxLDEpLG0uYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxtLnNldFNjaXNzb3JUZXN0KCExKTtmb3IobGV0IGw9MCxjPWUubGVuZ3RoO2w8YztsKyspe2NvbnN0IGM9ZVtsXSxwPWMuc2hhZG93O2lmKHZvaWQgMD09PXApe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xTaGFkb3dNYXA6IixjLCJoYXMgbm8gc2hhZG93LiIpO2NvbnRpbnVlfWlmKCExPT09cC5hdXRvVXBkYXRlJiYhMT09PXAubmVlZHNVcGRhdGUpY29udGludWU7aS5jb3B5KHAubWFwU2l6ZSk7Y29uc3QgdT1wLmdldEZyYW1lRXh0ZW50cygpO2lmKGkubXVsdGlwbHkodSksYS5jb3B5KHAubWFwU2l6ZSksKGkueD5kfHxpLnk+ZCkmJihpLng+ZCYmKGEueD1NYXRoLmZsb29yKGQvdS54KSxpLng9YS54KnUueCxwLm1hcFNpemUueD1hLngpLGkueT5kJiYoYS55PU1hdGguZmxvb3IoZC91LnkpLGkueT1hLnkqdS55LHAubWFwU2l6ZS55PWEueSkpLG51bGw9PT1wLm1hcCYmIXAuaXNQb2ludExpZ2h0U2hhZG93JiYzPT09dGhpcy50eXBlKXtjb25zdCB0PXttaW5GaWx0ZXI6Yml0LG1hZ0ZpbHRlcjpiaXQsZm9ybWF0OndpdH07cC5tYXA9bmV3IHJhdChpLngsaS55LHQpLHAubWFwLnRleHR1cmUubmFtZT1jLm5hbWUrIi5zaGFkb3dNYXAiLHAubWFwUGFzcz1uZXcgcmF0KGkueCxpLnksdCkscC5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfW51bGw9PT1wLm1hcCYmKHAubWFwPW5ldyByYXQoaS54LGkueSx7bWluRmlsdGVyOmhpdCxtYWdGaWx0ZXI6aGl0LGZvcm1hdDp3aXR9KSxwLm1hcC50ZXh0dXJlLm5hbWU9Yy5uYW1lKyIuc2hhZG93TWFwIixwLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHQuc2V0UmVuZGVyVGFyZ2V0KHAubWFwKSx0LmNsZWFyKCk7Y29uc3QgZj1wLmdldFZpZXdwb3J0Q291bnQoKTtmb3IobGV0IHQ9MDt0PGY7dCsrKXtjb25zdCBlPXAuZ2V0Vmlld3BvcnQodCk7ci5zZXQoYS54KmUueCxhLnkqZS55LGEueCplLnosYS55KmUudyksbS52aWV3cG9ydChyKSxwLnVwZGF0ZU1hdHJpY2VzKGMsdCksbz1wLmdldEZydXN0dW0oKSxfKG4scyxwLmNhbWVyYSxjLHRoaXMudHlwZSl9cC5pc1BvaW50TGlnaHRTaGFkb3d8fDMhPT10aGlzLnR5cGV8fGIocCxzKSxwLm5lZWRzVXBkYXRlPSExfWgubmVlZHNVcGRhdGU9ITEsdC5zZXRSZW5kZXJUYXJnZXQobCxjLHApfX1mdW5jdGlvbiBsZHQodCxlLG4pe2NvbnN0IG89bi5pc1dlYkdMMixpPW5ldyhmdW5jdGlvbiBhKCl7bGV0IGU9ITE7Y29uc3Qgbj1uZXcgYWF0O2xldCBvPW51bGw7Y29uc3QgaT1uZXcgYWF0KDAsMCwwLDApO3JldHVybntzZXRNYXNrOmZ1bmN0aW9uKG4pe289PT1ufHxlfHwodC5jb2xvck1hc2sobixuLG4sbiksbz1uKX0sc2V0TG9ja2VkOmZ1bmN0aW9uKHQpe2U9dH0sc2V0Q2xlYXI6ZnVuY3Rpb24oZSxvLGEscixzKXshMD09PXMmJihlKj1yLG8qPXIsYSo9ciksbi5zZXQoZSxvLGEsciksITE9PT1pLmVxdWFscyhuKSYmKHQuY2xlYXJDb2xvcihlLG8sYSxyKSxpLmNvcHkobikpfSxyZXNldDpmdW5jdGlvbigpe2U9ITEsbz1udWxsLGkuc2V0KC0xLDAsMCwwKX19fSkscj1uZXcoZnVuY3Rpb24gcygpe2xldCBlPSExLG49bnVsbCxvPW51bGwsaT1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKHQpe3Q/QigyOTI5KTpWKDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKG8pe249PT1vfHxlfHwodC5kZXB0aE1hc2sobyksbj1vKX0sc2V0RnVuYzpmdW5jdGlvbihlKXtpZihvIT09ZSl7aWYoZSlzd2l0Y2goZSl7Y2FzZSAwOnQuZGVwdGhGdW5jKDUxMik7YnJlYWs7Y2FzZSAxOnQuZGVwdGhGdW5jKDUxOSk7YnJlYWs7Y2FzZSAyOnQuZGVwdGhGdW5jKDUxMyk7YnJlYWs7Y2FzZSAzOnQuZGVwdGhGdW5jKDUxNSk7YnJlYWs7Y2FzZSA0OnQuZGVwdGhGdW5jKDUxNCk7YnJlYWs7Y2FzZSA1OnQuZGVwdGhGdW5jKDUxOCk7YnJlYWs7Y2FzZSA2OnQuZGVwdGhGdW5jKDUxNik7YnJlYWs7Y2FzZSA3OnQuZGVwdGhGdW5jKDUxNyk7YnJlYWs7ZGVmYXVsdDp0LmRlcHRoRnVuYyg1MTUpfWVsc2UgdC5kZXB0aEZ1bmMoNTE1KTtvPWV9fSxzZXRMb2NrZWQ6ZnVuY3Rpb24odCl7ZT10fSxzZXRDbGVhcjpmdW5jdGlvbihlKXtpIT09ZSYmKHQuY2xlYXJEZXB0aChlKSxpPWUpfSxyZXNldDpmdW5jdGlvbigpe2U9ITEsbj1udWxsLG89bnVsbCxpPW51bGx9fX0pLGw9bmV3KGZ1bmN0aW9uIGMoKXtsZXQgZT0hMSxuPW51bGwsbz1udWxsLGk9bnVsbCxhPW51bGwscj1udWxsLHM9bnVsbCxsPW51bGwsYz1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKHQpe2V8fCh0P0IoMjk2MCk6VigyOTYwKSl9LHNldE1hc2s6ZnVuY3Rpb24obyl7bj09PW98fGV8fCh0LnN0ZW5jaWxNYXNrKG8pLG49byl9LHNldEZ1bmM6ZnVuY3Rpb24oZSxuLHIpe289PT1lJiZpPT09biYmYT09PXJ8fCh0LnN0ZW5jaWxGdW5jKGUsbixyKSxvPWUsaT1uLGE9cil9LHNldE9wOmZ1bmN0aW9uKGUsbixvKXtyPT09ZSYmcz09PW4mJmw9PT1vfHwodC5zdGVuY2lsT3AoZSxuLG8pLHI9ZSxzPW4sbD1vKX0sc2V0TG9ja2VkOmZ1bmN0aW9uKHQpe2U9dH0sc2V0Q2xlYXI6ZnVuY3Rpb24oZSl7YyE9PWUmJih0LmNsZWFyU3RlbmNpbChlKSxjPWUpfSxyZXNldDpmdW5jdGlvbigpe2U9ITEsbj1udWxsLG89bnVsbCxpPW51bGwsYT1udWxsLHI9bnVsbCxzPW51bGwsbD1udWxsLGM9bnVsbH19fSk7bGV0IGQ9e30scD1udWxsLG09e30sdT1udWxsLGY9ITEsZz1udWxsLGg9bnVsbCxiPW51bGwseT1udWxsLF89bnVsbCxDPW51bGwsTT1udWxsLHY9ITEseD1udWxsLE89bnVsbCxQPW51bGwsdz1udWxsLGs9bnVsbDtjb25zdCBTPXQuZ2V0UGFyYW1ldGVyKDM1NjYxKTtsZXQgRD0hMSxFPTA7Y29uc3QgUj10LmdldFBhcmFtZXRlcig3OTM4KTstMSE9PVIuaW5kZXhPZigiV2ViR0wiKT8oRT1wYXJzZUZsb2F0KC9eV2ViR0wgKFxkKS8uZXhlYyhSKVsxXSksRD1FPj0xKTotMSE9PVIuaW5kZXhPZigiT3BlbkdMIEVTIikmJihFPXBhcnNlRmxvYXQoL15PcGVuR0wgRVMgKFxkKS8uZXhlYyhSKVsxXSksRD1FPj0yKTtsZXQgQT1udWxsLFQ9e307Y29uc3QgTj10LmdldFBhcmFtZXRlcigzMDg4KSx6PXQuZ2V0UGFyYW1ldGVyKDI5NzgpLEk9KG5ldyBhYXQpLmZyb21BcnJheShOKSxIPShuZXcgYWF0KS5mcm9tQXJyYXkoeik7ZnVuY3Rpb24gRihlLG4sbyl7Y29uc3QgaT1uZXcgVWludDhBcnJheSg0KSxhPXQuY3JlYXRlVGV4dHVyZSgpO3QuYmluZFRleHR1cmUoZSxhKSx0LnRleFBhcmFtZXRlcmkoZSwxMDI0MSw5NzI4KSx0LnRleFBhcmFtZXRlcmkoZSwxMDI0MCw5NzI4KTtmb3IobGV0IGU9MDtlPG87ZSsrKXQudGV4SW1hZ2UyRChuK2UsMCw2NDA4LDEsMSwwLDY0MDgsNTEyMSxpKTtyZXR1cm4gYX1jb25zdCBMPXt9O2Z1bmN0aW9uIEIoZSl7ITAhPT1kW2VdJiYodC5lbmFibGUoZSksZFtlXT0hMCl9ZnVuY3Rpb24gVihlKXshMSE9PWRbZV0mJih0LmRpc2FibGUoZSksZFtlXT0hMSl9TFszNTUzXT1GKDM1NTMsMzU1MywxKSxMWzM0MDY3XT1GKDM0MDY3LDM0MDY5LDYpLGkuc2V0Q2xlYXIoMCwwLDAsMSksci5zZXRDbGVhcigxKSxsLnNldENsZWFyKDApLEIoMjkyOSksci5zZXRGdW5jKDMpLFcoITEpLFkoMSksQigyODg0KSxHKDApO2NvbnN0IGo9e1tjaXRdOjMyNzc0LDEwMTozMjc3OCwxMDI6MzI3Nzl9O2lmKG8palsxMDNdPTMyNzc1LGpbMTA0XT0zMjc3NjtlbHNle2NvbnN0IHQ9ZS5nZXQoIkVYVF9ibGVuZF9taW5tYXgiKTtudWxsIT09dCYmKGpbMTAzXT10Lk1JTl9FWFQsalsxMDRdPXQuTUFYX0VYVCl9Y29uc3QgVT17MjAwOjAsMjAxOjEsMjAyOjc2OCwyMDQ6NzcwLDIxMDo3NzYsMjA4Ojc3NCwyMDY6NzcyLDIwMzo3NjksMjA1Ojc3MSwyMDk6Nzc1LDIwNzo3NzN9O2Z1bmN0aW9uIEcoZSxuLG8saSxhLHIscyxsKXtpZigwIT09ZSl7aWYoITE9PT1mJiYoQigzMDQyKSxmPSEwKSw1PT09ZSlhPWF8fG4scj1yfHxvLHM9c3x8aSxuPT09aCYmYT09PV98fCh0LmJsZW5kRXF1YXRpb25TZXBhcmF0ZShqW25dLGpbYV0pLGg9bixfPWEpLG89PT1iJiZpPT09eSYmcj09PUMmJnM9PT1NfHwodC5ibGVuZEZ1bmNTZXBhcmF0ZShVW29dLFVbaV0sVVtyXSxVW3NdKSxiPW8seT1pLEM9cixNPXMpLGc9ZSx2PW51bGw7ZWxzZSBpZihlIT09Z3x8bCE9PXYpe2lmKGg9PT1jaXQmJl89PT1jaXR8fCh0LmJsZW5kRXF1YXRpb24oMzI3NzQpLGg9Y2l0LF89Y2l0KSxsKXN3aXRjaChlKXtjYXNlIDE6dC5ibGVuZEZ1bmNTZXBhcmF0ZSgxLDc3MSwxLDc3MSk7YnJlYWs7Y2FzZSAyOnQuYmxlbmRGdW5jKDEsMSk7YnJlYWs7Y2FzZSAzOnQuYmxlbmRGdW5jU2VwYXJhdGUoMCwwLDc2OSw3NzEpO2JyZWFrO2Nhc2UgNDp0LmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY4LDAsNzcwKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsZSl9ZWxzZSBzd2l0Y2goZSl7Y2FzZSAxOnQuYmxlbmRGdW5jU2VwYXJhdGUoNzcwLDc3MSwxLDc3MSk7YnJlYWs7Y2FzZSAyOnQuYmxlbmRGdW5jKDc3MCwxKTticmVhaztjYXNlIDM6dC5ibGVuZEZ1bmMoMCw3NjkpO2JyZWFrO2Nhc2UgNDp0LmJsZW5kRnVuYygwLDc2OCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAiLGUpfWI9bnVsbCx5PW51bGwsQz1udWxsLE09bnVsbCxnPWUsdj1sfX1lbHNlITA9PT1mJiYoVigzMDQyKSxmPSExKX1mdW5jdGlvbiBXKGUpe3ghPT1lJiYodC5mcm9udEZhY2UoZT8yMzA0OjIzMDUpLHg9ZSl9ZnVuY3Rpb24gWShlKXswIT09ZT8oQigyODg0KSxlIT09TyYmdC5jdWxsRmFjZSgxPT09ZT8xMDI5OjI9PT1lPzEwMjg6MTAzMikpOlYoMjg4NCksTz1lfWZ1bmN0aW9uIHEoZSxuLG8pe2U/KEIoMzI4MjMpLHc9PT1uJiZrPT09b3x8KHQucG9seWdvbk9mZnNldChuLG8pLHc9bixrPW8pKTpWKDMyODIzKX1mdW5jdGlvbiBaKGUpe3ZvaWQgMD09PWUmJihlPTMzOTg0K1MtMSksQSE9PWUmJih0LmFjdGl2ZVRleHR1cmUoZSksQT1lKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6aSxkZXB0aDpyLHN0ZW5jaWw6bH0sZW5hYmxlOkIsZGlzYWJsZTpWLGJpbmRGcmFtZWJ1ZmZlcjpmdW5jdGlvbiBYKGUsbil7cmV0dXJuIG51bGw9PT1uJiZudWxsIT09cCYmKG49cCksbVtlXSE9PW4mJih0LmJpbmRGcmFtZWJ1ZmZlcihlLG4pLG1bZV09bixvJiYoMzYwMDk9PT1lJiYobVszNjE2MF09biksMzYxNjA9PT1lJiYobVszNjAwOV09bikpLCEwKX0sYmluZFhSRnJhbWVidWZmZXI6ZnVuY3Rpb24gSyhlKXtlIT09cCYmKHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLGUpLHA9ZSl9LHVzZVByb2dyYW06ZnVuY3Rpb24gSihlKXtyZXR1cm4gdSE9PWUmJih0LnVzZVByb2dyYW0oZSksdT1lLCEwKX0sc2V0QmxlbmRpbmc6RyxzZXRNYXRlcmlhbDpmdW5jdGlvbiBRKHQsZSl7Mj09PXQuc2lkZT9WKDI4ODQpOkIoMjg4NCk7bGV0IG49MT09PXQuc2lkZTtlJiYobj0hbiksVyhuKSwxPT09dC5ibGVuZGluZyYmITE9PT10LnRyYW5zcGFyZW50P0coMCk6Ryh0LmJsZW5kaW5nLHQuYmxlbmRFcXVhdGlvbix0LmJsZW5kU3JjLHQuYmxlbmREc3QsdC5ibGVuZEVxdWF0aW9uQWxwaGEsdC5ibGVuZFNyY0FscGhhLHQuYmxlbmREc3RBbHBoYSx0LnByZW11bHRpcGxpZWRBbHBoYSksci5zZXRGdW5jKHQuZGVwdGhGdW5jKSxyLnNldFRlc3QodC5kZXB0aFRlc3QpLHIuc2V0TWFzayh0LmRlcHRoV3JpdGUpLGkuc2V0TWFzayh0LmNvbG9yV3JpdGUpO2NvbnN0IG89dC5zdGVuY2lsV3JpdGU7bC5zZXRUZXN0KG8pLG8mJihsLnNldE1hc2sodC5zdGVuY2lsV3JpdGVNYXNrKSxsLnNldEZ1bmModC5zdGVuY2lsRnVuYyx0LnN0ZW5jaWxSZWYsdC5zdGVuY2lsRnVuY01hc2spLGwuc2V0T3AodC5zdGVuY2lsRmFpbCx0LnN0ZW5jaWxaRmFpbCx0LnN0ZW5jaWxaUGFzcykpLHEodC5wb2x5Z29uT2Zmc2V0LHQucG9seWdvbk9mZnNldEZhY3Rvcix0LnBvbHlnb25PZmZzZXRVbml0cyksITA9PT10LmFscGhhVG9Db3ZlcmFnZT9CKDMyOTI2KTpWKDMyOTI2KX0sc2V0RmxpcFNpZGVkOlcsc2V0Q3VsbEZhY2U6WSxzZXRMaW5lV2lkdGg6ZnVuY3Rpb24gJChlKXtlIT09UCYmKEQmJnQubGluZVdpZHRoKGUpLFA9ZSl9LHNldFBvbHlnb25PZmZzZXQ6cSxzZXRTY2lzc29yVGVzdDpmdW5jdGlvbiB0dCh0KXt0P0IoMzA4OSk6VigzMDg5KX0sYWN0aXZlVGV4dHVyZTpaLGJpbmRUZXh0dXJlOmZ1bmN0aW9uIGV0KGUsbil7bnVsbD09PUEmJlooKTtsZXQgbz1UW0FdO3ZvaWQgMD09PW8mJihvPXt0eXBlOnZvaWQgMCx0ZXh0dXJlOnZvaWQgMH0sVFtBXT1vKSxvLnR5cGU9PT1lJiZvLnRleHR1cmU9PT1ufHwodC5iaW5kVGV4dHVyZShlLG58fExbZV0pLG8udHlwZT1lLG8udGV4dHVyZT1uKX0sdW5iaW5kVGV4dHVyZTpmdW5jdGlvbiBudCgpe2NvbnN0IGU9VFtBXTt2b2lkIDAhPT1lJiZ2b2lkIDAhPT1lLnR5cGUmJih0LmJpbmRUZXh0dXJlKGUudHlwZSxudWxsKSxlLnR5cGU9dm9pZCAwLGUudGV4dHVyZT12b2lkIDApfSxjb21wcmVzc2VkVGV4SW1hZ2UyRDpmdW5jdGlvbiBvdCgpe3RyeXt0LmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KHQsYXJndW1lbnRzKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdCl9fSx0ZXhJbWFnZTJEOmZ1bmN0aW9uIGl0KCl7dHJ5e3QudGV4SW1hZ2UyRC5hcHBseSh0LGFyZ3VtZW50cyl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLHQpfX0sdGV4SW1hZ2UzRDpmdW5jdGlvbiBhdCgpe3RyeXt0LnRleEltYWdlM0QuYXBwbHkodCxhcmd1bWVudHMpfWNhdGNoKHQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix0KX19LHNjaXNzb3I6ZnVuY3Rpb24gcnQoZSl7ITE9PT1JLmVxdWFscyhlKSYmKHQuc2Npc3NvcihlLngsZS55LGUueixlLncpLEkuY29weShlKSl9LHZpZXdwb3J0OmZ1bmN0aW9uIHN0KGUpeyExPT09SC5lcXVhbHMoZSkmJih0LnZpZXdwb3J0KGUueCxlLnksZS56LGUudyksSC5jb3B5KGUpKX0scmVzZXQ6ZnVuY3Rpb24gbHQoKXt0LmRpc2FibGUoMzA0MiksdC5kaXNhYmxlKDI4ODQpLHQuZGlzYWJsZSgyOTI5KSx0LmRpc2FibGUoMzI4MjMpLHQuZGlzYWJsZSgzMDg5KSx0LmRpc2FibGUoMjk2MCksdC5kaXNhYmxlKDMyOTI2KSx0LmJsZW5kRXF1YXRpb24oMzI3NzQpLHQuYmxlbmRGdW5jKDEsMCksdC5ibGVuZEZ1bmNTZXBhcmF0ZSgxLDAsMSwwKSx0LmNvbG9yTWFzayghMCwhMCwhMCwhMCksdC5jbGVhckNvbG9yKDAsMCwwLDApLHQuZGVwdGhNYXNrKCEwKSx0LmRlcHRoRnVuYyg1MTMpLHQuY2xlYXJEZXB0aCgxKSx0LnN0ZW5jaWxNYXNrKDQyOTQ5NjcyOTUpLHQuc3RlbmNpbEZ1bmMoNTE5LDAsNDI5NDk2NzI5NSksdC5zdGVuY2lsT3AoNzY4MCw3NjgwLDc2ODApLHQuY2xlYXJTdGVuY2lsKDApLHQuY3VsbEZhY2UoMTAyOSksdC5mcm9udEZhY2UoMjMwNSksdC5wb2x5Z29uT2Zmc2V0KDAsMCksdC5hY3RpdmVUZXh0dXJlKDMzOTg0KSx0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSwhMD09PW8mJih0LmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxudWxsKSx0LmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSksdC51c2VQcm9ncmFtKG51bGwpLHQubGluZVdpZHRoKDEpLHQuc2Npc3NvcigwLDAsdC5jYW52YXMud2lkdGgsdC5jYW52YXMuaGVpZ2h0KSx0LnZpZXdwb3J0KDAsMCx0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHQpLGQ9e30sQT1udWxsLFQ9e30scD1udWxsLG09e30sdT1udWxsLGY9ITEsZz1udWxsLGg9bnVsbCxiPW51bGwseT1udWxsLF89bnVsbCxDPW51bGwsTT1udWxsLHY9ITEseD1udWxsLE89bnVsbCxQPW51bGwsdz1udWxsLGs9bnVsbCxJLnNldCgwLDAsdC5jYW52YXMud2lkdGgsdC5jYW52YXMuaGVpZ2h0KSxILnNldCgwLDAsdC5jYW52YXMud2lkdGgsdC5jYW52YXMuaGVpZ2h0KSxpLnJlc2V0KCksci5yZXNldCgpLGwucmVzZXQoKX19fWZ1bmN0aW9uIGNkdCh0LGUsbixvLGksYSxyKXtjb25zdCBzPWkuaXNXZWJHTDIsbD1pLm1heFRleHR1cmVzLGM9aS5tYXhDdWJlbWFwU2l6ZSxkPWkubWF4VGV4dHVyZVNpemUscD1pLm1heFNhbXBsZXMsbT1uZXcgV2Vha01hcDtsZXQgdSxmPSExO3RyeXtmPSJ1bmRlZmluZWQiIT10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzJiZudWxsIT09bmV3IE9mZnNjcmVlbkNhbnZhcygxLDEpLmdldENvbnRleHQoIjJkIil9Y2F0Y2godCl7fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZj9uZXcgT2Zmc2NyZWVuQ2FudmFzKHQsZSk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIil9ZnVuY3Rpb24gaCh0LGUsbixvKXtsZXQgaT0xO2lmKCh0LndpZHRoPm98fHQuaGVpZ2h0Pm8pJiYoaT1vL01hdGgubWF4KHQud2lkdGgsdC5oZWlnaHQpKSxpPDF8fCEwPT09ZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHwidW5kZWZpbmVkIiE9dHlwZW9mIEltYWdlQml0bWFwJiZ0IGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApe2NvbnN0IG89ZT9KaXQ6TWF0aC5mbG9vcixhPW8oaSp0LndpZHRoKSxyPW8oaSp0LmhlaWdodCk7dm9pZCAwPT09dSYmKHU9ZyhhLHIpKTtjb25zdCBzPW4/ZyhhLHIpOnU7cmV0dXJuIHMud2lkdGg9YSxzLmhlaWdodD1yLHMuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UodCwwLDAsYSxyKSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK3Qud2lkdGgrIngiK3QuaGVpZ2h0KyIpIHRvICgiK2ErIngiK3IrIikuIiksc31yZXR1cm4iZGF0YSJpbiB0JiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEltYWdlIGluIERhdGFUZXh0dXJlIGlzIHRvbyBiaWcgKCIrdC53aWR0aCsieCIrdC5oZWlnaHQrIikuIiksdH1yZXR1cm4gdH1mdW5jdGlvbiBiKHQpe3JldHVybiBLaXQodC53aWR0aCkmJktpdCh0LmhlaWdodCl9ZnVuY3Rpb24geSh0LGUpe3JldHVybiB0LmdlbmVyYXRlTWlwbWFwcyYmZSYmdC5taW5GaWx0ZXIhPT1oaXQmJnQubWluRmlsdGVyIT09Yml0fWZ1bmN0aW9uIF8oZSxuLGksYSxyPTEpe3QuZ2VuZXJhdGVNaXBtYXAoZSksby5nZXQobikuX19tYXhNaXBMZXZlbD1NYXRoLmxvZzIoTWF0aC5tYXgoaSxhLHIpKX1mdW5jdGlvbiBDKG4sbyxpKXtpZighMT09PXMpcmV0dXJuIG87aWYobnVsbCE9PW4pe2lmKHZvaWQgMCE9PXRbbl0pcmV0dXJuIHRbbl07Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIHVzZSBub24tZXhpc3RpbmcgV2ViR0wgaW50ZXJuYWwgZm9ybWF0ICciK24rIiciKX1sZXQgYT1vO3JldHVybiA2NDAzPT09byYmKDUxMjY9PT1pJiYoYT0zMzMyNiksNTEzMT09PWkmJihhPTMzMzI1KSw1MTIxPT09aSYmKGE9MzMzMjEpKSw2NDA3PT09byYmKDUxMjY9PT1pJiYoYT0zNDgzNyksNTEzMT09PWkmJihhPTM0ODQzKSw1MTIxPT09aSYmKGE9MzI4NDkpKSw2NDA4PT09byYmKDUxMjY9PT1pJiYoYT0zNDgzNiksNTEzMT09PWkmJihhPTM0ODQyKSw1MTIxPT09aSYmKGE9MzI4NTYpKSwzMzMyNSE9PWEmJjMzMzI2IT09YSYmMzQ4NDIhPT1hJiYzNDgzNiE9PWF8fGUuZ2V0KCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IiksYX1mdW5jdGlvbiBNKHQpe3JldHVybiB0PT09aGl0fHwxMDA0PT09dHx8MTAwNT09PXQ/OTcyODo5NzI5fWZ1bmN0aW9uIHYoZSl7Y29uc3Qgbj1lLnRhcmdldDtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHYpLChmdW5jdGlvbiBpKGUpe2NvbnN0IG49by5nZXQoZSk7dm9pZCAwIT09bi5fX3dlYmdsSW5pdCYmKHQuZGVsZXRlVGV4dHVyZShuLl9fd2ViZ2xUZXh0dXJlKSxvLnJlbW92ZShlKSl9KShuKSxuLmlzVmlkZW9UZXh0dXJlJiZtLmRlbGV0ZShuKSxyLm1lbW9yeS50ZXh0dXJlcy0tfWZ1bmN0aW9uIHgoZSl7Y29uc3Qgbj1lLnRhcmdldDtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHgpLChmdW5jdGlvbiBpKGUpe2NvbnN0IG49ZS50ZXh0dXJlLGk9by5nZXQoZSksYT1vLmdldChuKTtpZihlKXtpZih2b2lkIDAhPT1hLl9fd2ViZ2xUZXh0dXJlJiYodC5kZWxldGVUZXh0dXJlKGEuX193ZWJnbFRleHR1cmUpLHIubWVtb3J5LnRleHR1cmVzLS0pLGUuZGVwdGhUZXh0dXJlJiZlLmRlcHRoVGV4dHVyZS5kaXNwb3NlKCksZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldClmb3IobGV0IGU9MDtlPDY7ZSsrKXQuZGVsZXRlRnJhbWVidWZmZXIoaS5fX3dlYmdsRnJhbWVidWZmZXJbZV0pLGkuX193ZWJnbERlcHRoYnVmZmVyJiZ0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihpLl9fd2ViZ2xEZXB0aGJ1ZmZlcltlXSk7ZWxzZSB0LmRlbGV0ZUZyYW1lYnVmZmVyKGkuX193ZWJnbEZyYW1lYnVmZmVyKSxpLl9fd2ViZ2xEZXB0aGJ1ZmZlciYmdC5kZWxldGVSZW5kZXJidWZmZXIoaS5fX3dlYmdsRGVwdGhidWZmZXIpLGkuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyJiZ0LmRlbGV0ZUZyYW1lYnVmZmVyKGkuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxpLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciYmdC5kZWxldGVSZW5kZXJidWZmZXIoaS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpLGkuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyJiZ0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihpLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcik7aWYoZS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKWZvcihsZXQgZT0wLGk9bi5sZW5ndGg7ZTxpO2UrKyl7Y29uc3QgaT1vLmdldChuW2VdKTtpLl9fd2ViZ2xUZXh0dXJlJiYodC5kZWxldGVUZXh0dXJlKGkuX193ZWJnbFRleHR1cmUpLHIubWVtb3J5LnRleHR1cmVzLS0pLG8ucmVtb3ZlKG5bZV0pfW8ucmVtb3ZlKG4pLG8ucmVtb3ZlKGUpfX0pKG4pfWxldCBPPTA7ZnVuY3Rpb24gUCh0LGUpe2NvbnN0IGk9by5nZXQodCk7aWYodC5pc1ZpZGVvVGV4dHVyZSYmKGZ1bmN0aW9uIGEodCl7Y29uc3QgZT1yLnJlbmRlci5mcmFtZTttLmdldCh0KSE9PWUmJihtLnNldCh0LGUpLHQudXBkYXRlKCkpfSkodCksdC52ZXJzaW9uPjAmJmkuX192ZXJzaW9uIT09dC52ZXJzaW9uKXtjb25zdCBuPXQuaW1hZ2U7aWYodm9pZCAwPT09biljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCIpO2Vsc2V7aWYoITEhPT1uLmNvbXBsZXRlKXJldHVybiB2b2lkIFIoaSx0LGUpO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgaW5jb21wbGV0ZSIpfX1uLmFjdGl2ZVRleHR1cmUoMzM5ODQrZSksbi5iaW5kVGV4dHVyZSgzNTUzLGkuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIHcoZSxpKXtjb25zdCByPW8uZ2V0KGUpO2UudmVyc2lvbj4wJiZyLl9fdmVyc2lvbiE9PWUudmVyc2lvbj8oZnVuY3Rpb24gbChlLG8saSl7aWYoNiE9PW8uaW1hZ2UubGVuZ3RoKXJldHVybjtFKGUsbyksbi5hY3RpdmVUZXh0dXJlKDMzOTg0K2kpLG4uYmluZFRleHR1cmUoMzQwNjcsZS5fX3dlYmdsVGV4dHVyZSksdC5waXhlbFN0b3JlaSgzNzQ0MCxvLmZsaXBZKSx0LnBpeGVsU3RvcmVpKDM3NDQxLG8ucHJlbXVsdGlwbHlBbHBoYSksdC5waXhlbFN0b3JlaSgzMzE3LG8udW5wYWNrQWxpZ25tZW50KSx0LnBpeGVsU3RvcmVpKDM3NDQzLDApO2NvbnN0IHI9byYmKG8uaXNDb21wcmVzc2VkVGV4dHVyZXx8by5pbWFnZVswXS5pc0NvbXByZXNzZWRUZXh0dXJlKSxsPW8uaW1hZ2VbMF0mJm8uaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSxkPVtdO2ZvcihsZXQgdD0wO3Q8Njt0KyspZFt0XT1yfHxsP2w/by5pbWFnZVt0XS5pbWFnZTpvLmltYWdlW3RdOmgoby5pbWFnZVt0XSwhMSwhMCxjKTtjb25zdCBwPWRbMF0sbT1iKHApfHxzLHU9YS5jb252ZXJ0KG8uZm9ybWF0KSxmPWEuY29udmVydChvLnR5cGUpLGc9QyhvLmludGVybmFsRm9ybWF0LHUsZik7bGV0IE07aWYoRCgzNDA2NyxvLG0pLHIpe2ZvcihsZXQgdD0wO3Q8Njt0Kyspe009ZFt0XS5taXBtYXBzO2ZvcihsZXQgZT0wO2U8TS5sZW5ndGg7ZSsrKXtjb25zdCBpPU1bZV07by5mb3JtYXQhPT13aXQmJm8uZm9ybWF0IT09UGl0P251bGwhPT11P24uY29tcHJlc3NlZFRleEltYWdlMkQoMzQwNjkrdCxlLGcsaS53aWR0aCxpLmhlaWdodCwwLGkuZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAuc2V0VGV4dHVyZUN1YmUoKSIpOm4udGV4SW1hZ2UyRCgzNDA2OSt0LGUsZyxpLndpZHRoLGkuaGVpZ2h0LDAsdSxmLGkuZGF0YSl9fWUuX19tYXhNaXBMZXZlbD1NLmxlbmd0aC0xfWVsc2V7TT1vLm1pcG1hcHM7Zm9yKGxldCB0PTA7dDw2O3QrKylpZihsKXtuLnRleEltYWdlMkQoMzQwNjkrdCwwLGcsZFt0XS53aWR0aCxkW3RdLmhlaWdodCwwLHUsZixkW3RdLmRhdGEpO2ZvcihsZXQgZT0wO2U8TS5sZW5ndGg7ZSsrKXtjb25zdCBvPU1bZV0uaW1hZ2VbdF0uaW1hZ2U7bi50ZXhJbWFnZTJEKDM0MDY5K3QsZSsxLGcsby53aWR0aCxvLmhlaWdodCwwLHUsZixvLmRhdGEpfX1lbHNle24udGV4SW1hZ2UyRCgzNDA2OSt0LDAsZyx1LGYsZFt0XSk7Zm9yKGxldCBlPTA7ZTxNLmxlbmd0aDtlKyspbi50ZXhJbWFnZTJEKDM0MDY5K3QsZSsxLGcsdSxmLE1bZV0uaW1hZ2VbdF0pfWUuX19tYXhNaXBMZXZlbD1NLmxlbmd0aH15KG8sbSkmJl8oMzQwNjcsbyxwLndpZHRoLHAuaGVpZ2h0KSxlLl9fdmVyc2lvbj1vLnZlcnNpb24sby5vblVwZGF0ZSYmby5vblVwZGF0ZShvKX0pKHIsZSxpKToobi5hY3RpdmVUZXh0dXJlKDMzOTg0K2kpLG4uYmluZFRleHR1cmUoMzQwNjcsci5fX3dlYmdsVGV4dHVyZSkpfWNvbnN0IGs9e1t1aXRdOjEwNDk3LFtmaXRdOjMzMDcxLFtnaXRdOjMzNjQ4fSxTPXtbaGl0XTo5NzI4LDEwMDQ6OTk4NCwxMDA1Ojk5ODYsW2JpdF06OTcyOSwxMDA3Ojk5ODUsW3lpdF06OTk4N307ZnVuY3Rpb24gRChuLGEscil7aWYocj8odC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDIsa1thLndyYXBTXSksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDMsa1thLndyYXBUXSksMzI4NzkhPT1uJiYzNTg2NiE9PW58fHQudGV4UGFyYW1ldGVyaShuLDMyODgyLGtbYS53cmFwUl0pLHQudGV4UGFyYW1ldGVyaShuLDEwMjQwLFNbYS5tYWdGaWx0ZXJdKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MSxTW2EubWluRmlsdGVyXSkpOih0LnRleFBhcmFtZXRlcmkobiwxMDI0MiwzMzA3MSksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDMsMzMwNzEpLDMyODc5IT09biYmMzU4NjYhPT1ufHx0LnRleFBhcmFtZXRlcmkobiwzMjg4MiwzMzA3MSksYS53cmFwUz09PWZpdCYmYS53cmFwVD09PWZpdHx8Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQwLE0oYS5tYWdGaWx0ZXIpKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MSxNKGEubWluRmlsdGVyKSksYS5taW5GaWx0ZXIhPT1oaXQmJmEubWluRmlsdGVyIT09Yml0JiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4iKSksITA9PT1lLmhhcygiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikpe2NvbnN0IHI9ZS5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2lmKGEudHlwZT09PXZpdCYmITE9PT1lLmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpcmV0dXJuO2lmKCExPT09cyYmYS50eXBlPT09eGl0JiYhMT09PWUuaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKXJldHVybjsoYS5hbmlzb3Ryb3B5PjF8fG8uZ2V0KGEpLl9fY3VycmVudEFuaXNvdHJvcHkpJiYodC50ZXhQYXJhbWV0ZXJmKG4sci5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbihhLmFuaXNvdHJvcHksaS5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxvLmdldChhKS5fX2N1cnJlbnRBbmlzb3Ryb3B5PWEuYW5pc290cm9weSl9fWZ1bmN0aW9uIEUoZSxuKXt2b2lkIDA9PT1lLl9fd2ViZ2xJbml0JiYoZS5fX3dlYmdsSW5pdD0hMCxuLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHYpLGUuX193ZWJnbFRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksci5tZW1vcnkudGV4dHVyZXMrKyl9ZnVuY3Rpb24gUihlLG8saSl7bGV0IHI9MzU1MztvLmlzRGF0YVRleHR1cmUyREFycmF5JiYocj0zNTg2Niksby5pc0RhdGFUZXh0dXJlM0QmJihyPTMyODc5KSxFKGUsbyksbi5hY3RpdmVUZXh0dXJlKDMzOTg0K2kpLG4uYmluZFRleHR1cmUocixlLl9fd2ViZ2xUZXh0dXJlKSx0LnBpeGVsU3RvcmVpKDM3NDQwLG8uZmxpcFkpLHQucGl4ZWxTdG9yZWkoMzc0NDEsby5wcmVtdWx0aXBseUFscGhhKSx0LnBpeGVsU3RvcmVpKDMzMTcsby51bnBhY2tBbGlnbm1lbnQpLHQucGl4ZWxTdG9yZWkoMzc0NDMsMCk7Y29uc3QgbD0oZnVuY3Rpb24gYyh0KXtyZXR1cm4hcyYmKHQud3JhcFMhPT1maXR8fHQud3JhcFQhPT1maXR8fHQubWluRmlsdGVyIT09aGl0JiZ0Lm1pbkZpbHRlciE9PWJpdCl9KShvKSYmITE9PT1iKG8uaW1hZ2UpLHA9aChvLmltYWdlLGwsITEsZCksbT1iKHApfHxzLHU9YS5jb252ZXJ0KG8uZm9ybWF0KTtsZXQgZixnPWEuY29udmVydChvLnR5cGUpLE09QyhvLmludGVybmFsRm9ybWF0LHUsZyk7RChyLG8sbSk7Y29uc3Qgdj1vLm1pcG1hcHM7aWYoby5pc0RlcHRoVGV4dHVyZSlNPTY0MDIscz9NPW8udHlwZT09PXZpdD8zNjAxMjpvLnR5cGU9PT1NaXQ/MzMxOTA6by50eXBlPT09T2l0PzM1MDU2OjMzMTg5Om8udHlwZT09PXZpdCYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksby5mb3JtYXQ9PT1raXQmJjY0MDI9PT1NJiZvLnR5cGUhPT1DaXQmJm8udHlwZSE9PU1pdCYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLG8udHlwZT1DaXQsZz1hLmNvbnZlcnQoby50eXBlKSksby5mb3JtYXQ9PT1TaXQmJjY0MDI9PT1NJiYoTT0zNDA0MSxvLnR5cGUhPT1PaXQmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksby50eXBlPU9pdCxnPWEuY29udmVydChvLnR5cGUpKSksbi50ZXhJbWFnZTJEKDM1NTMsMCxNLHAud2lkdGgscC5oZWlnaHQsMCx1LGcsbnVsbCk7ZWxzZSBpZihvLmlzRGF0YVRleHR1cmUpaWYodi5sZW5ndGg+MCYmbSl7Zm9yKGxldCB0PTAsZT12Lmxlbmd0aDt0PGU7dCsrKWY9dlt0XSxuLnRleEltYWdlMkQoMzU1Myx0LE0sZi53aWR0aCxmLmhlaWdodCwwLHUsZyxmLmRhdGEpO28uZ2VuZXJhdGVNaXBtYXBzPSExLGUuX19tYXhNaXBMZXZlbD12Lmxlbmd0aC0xfWVsc2Ugbi50ZXhJbWFnZTJEKDM1NTMsMCxNLHAud2lkdGgscC5oZWlnaHQsMCx1LGcscC5kYXRhKSxlLl9fbWF4TWlwTGV2ZWw9MDtlbHNlIGlmKG8uaXNDb21wcmVzc2VkVGV4dHVyZSl7Zm9yKGxldCB0PTAsZT12Lmxlbmd0aDt0PGU7dCsrKWY9dlt0XSxvLmZvcm1hdCE9PXdpdCYmby5mb3JtYXQhPT1QaXQ/bnVsbCE9PXU/bi5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNTUzLHQsTSxmLndpZHRoLGYuaGVpZ2h0LDAsZi5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC51cGxvYWRUZXh0dXJlKCkiKTpuLnRleEltYWdlMkQoMzU1Myx0LE0sZi53aWR0aCxmLmhlaWdodCwwLHUsZyxmLmRhdGEpO2UuX19tYXhNaXBMZXZlbD12Lmxlbmd0aC0xfWVsc2UgaWYoby5pc0RhdGFUZXh0dXJlMkRBcnJheSluLnRleEltYWdlM0QoMzU4NjYsMCxNLHAud2lkdGgscC5oZWlnaHQscC5kZXB0aCwwLHUsZyxwLmRhdGEpLGUuX19tYXhNaXBMZXZlbD0wO2Vsc2UgaWYoby5pc0RhdGFUZXh0dXJlM0Qpbi50ZXhJbWFnZTNEKDMyODc5LDAsTSxwLndpZHRoLHAuaGVpZ2h0LHAuZGVwdGgsMCx1LGcscC5kYXRhKSxlLl9fbWF4TWlwTGV2ZWw9MDtlbHNlIGlmKHYubGVuZ3RoPjAmJm0pe2ZvcihsZXQgdD0wLGU9di5sZW5ndGg7dDxlO3QrKylmPXZbdF0sbi50ZXhJbWFnZTJEKDM1NTMsdCxNLHUsZyxmKTtvLmdlbmVyYXRlTWlwbWFwcz0hMSxlLl9fbWF4TWlwTGV2ZWw9di5sZW5ndGgtMX1lbHNlIG4udGV4SW1hZ2UyRCgzNTUzLDAsTSx1LGcscCksZS5fX21heE1pcExldmVsPTA7eShvLG0pJiZfKHIsbyxwLndpZHRoLHAuaGVpZ2h0KSxlLl9fdmVyc2lvbj1vLnZlcnNpb24sby5vblVwZGF0ZSYmby5vblVwZGF0ZShvKX1mdW5jdGlvbiBBKGUsaSxyLHMsbCl7Y29uc3QgYz1hLmNvbnZlcnQoci5mb3JtYXQpLGQ9YS5jb252ZXJ0KHIudHlwZSkscD1DKHIuaW50ZXJuYWxGb3JtYXQsYyxkKTszMjg3OT09PWx8fDM1ODY2PT09bD9uLnRleEltYWdlM0QobCwwLHAsaS53aWR0aCxpLmhlaWdodCxpLmRlcHRoLDAsYyxkLG51bGwpOm4udGV4SW1hZ2UyRChsLDAscCxpLndpZHRoLGkuaGVpZ2h0LDAsYyxkLG51bGwpLG4uYmluZEZyYW1lYnVmZmVyKDM2MTYwLGUpLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAscyxsLG8uZ2V0KHIpLl9fd2ViZ2xUZXh0dXJlLDApLG4uYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWZ1bmN0aW9uIFQoZSxuLG8pe2lmKHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxlKSxuLmRlcHRoQnVmZmVyJiYhbi5zdGVuY2lsQnVmZmVyKXtsZXQgaT0zMzE4OTtpZihvKXtjb25zdCBlPW4uZGVwdGhUZXh0dXJlO2UmJmUuaXNEZXB0aFRleHR1cmUmJihlLnR5cGU9PT12aXQ/aT0zNjAxMjplLnR5cGU9PT1NaXQmJihpPTMzMTkwKSk7Y29uc3Qgbz1OKG4pO3QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLG8saSxuLndpZHRoLG4uaGVpZ2h0KX1lbHNlIHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxpLG4ud2lkdGgsbi5oZWlnaHQpO3QuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwOTYsMzYxNjEsZSl9ZWxzZSBpZihuLmRlcHRoQnVmZmVyJiZuLnN0ZW5jaWxCdWZmZXIpe2lmKG8pe2NvbnN0IGU9TihuKTt0LnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxlLDM1MDU2LG4ud2lkdGgsbi5oZWlnaHQpfWVsc2UgdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLDM0MDQxLG4ud2lkdGgsbi5oZWlnaHQpO3QuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzMzMDYsMzYxNjEsZSl9ZWxzZXtjb25zdCBlPSEwPT09bi5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzP24udGV4dHVyZVswXTpuLnRleHR1cmUsaT1hLmNvbnZlcnQoZS5mb3JtYXQpLHI9YS5jb252ZXJ0KGUudHlwZSkscz1DKGUuaW50ZXJuYWxGb3JtYXQsaSxyKTtpZihvKXtjb25zdCBlPU4obik7dC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsZSxzLG4ud2lkdGgsbi5oZWlnaHQpfWVsc2UgdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLHMsbi53aWR0aCxuLmhlaWdodCl9dC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIE4odCl7cmV0dXJuIHMmJnQuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0P01hdGgubWluKHAsdC5zYW1wbGVzKTowfWxldCB6PSExLEk9ITE7dGhpcy5hbGxvY2F0ZVRleHR1cmVVbml0PWZ1bmN0aW9uIEgoKXtjb25zdCB0PU87cmV0dXJuIHQ+PWwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAiK3QrIiB0ZXh0dXJlIHVuaXRzIHdoaWxlIHRoaXMgR1BVIHN1cHBvcnRzIG9ubHkgIitsKSxPKz0xLHR9LHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9ZnVuY3Rpb24gRigpe089MH0sdGhpcy5zZXRUZXh0dXJlMkQ9UCx0aGlzLnNldFRleHR1cmUyREFycmF5PWZ1bmN0aW9uIEwodCxlKXtjb25zdCBpPW8uZ2V0KHQpO3QudmVyc2lvbj4wJiZpLl9fdmVyc2lvbiE9PXQudmVyc2lvbj9SKGksdCxlKToobi5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLG4uYmluZFRleHR1cmUoMzU4NjYsaS5fX3dlYmdsVGV4dHVyZSkpfSx0aGlzLnNldFRleHR1cmUzRD1mdW5jdGlvbiBCKHQsZSl7Y29uc3QgaT1vLmdldCh0KTt0LnZlcnNpb24+MCYmaS5fX3ZlcnNpb24hPT10LnZlcnNpb24/UihpLHQsZSk6KG4uYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSxuLmJpbmRUZXh0dXJlKDMyODc5LGkuX193ZWJnbFRleHR1cmUpKX0sdGhpcy5zZXRUZXh0dXJlQ3ViZT13LHRoaXMuc2V0dXBSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24gVihlKXtjb25zdCBsPWUudGV4dHVyZSxjPW8uZ2V0KGUpLGQ9by5nZXQobCk7ZS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIix4KSwhMCE9PWUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyYmKGQuX193ZWJnbFRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksZC5fX3ZlcnNpb249bC52ZXJzaW9uLHIubWVtb3J5LnRleHR1cmVzKyspO2NvbnN0IHA9ITA9PT1lLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0LG09ITA9PT1lLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMsdT0hMD09PWUuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0LGY9bC5pc0RhdGFUZXh0dXJlM0R8fGwuaXNEYXRhVGV4dHVyZTJEQXJyYXksZz1iKGUpfHxzO2lmKCFzfHxsLmZvcm1hdCE9PVBpdHx8bC50eXBlIT09dml0JiZsLnR5cGUhPT14aXR8fChsLmZvcm1hdD13aXQsY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBSZW5kZXJpbmcgdG8gdGV4dHVyZXMgd2l0aCBSR0IgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuIFVzaW5nIFJHQkEgZm9ybWF0IGluc3RlYWQuIikpLHApe2MuX193ZWJnbEZyYW1lYnVmZmVyPVtdO2ZvcihsZXQgZT0wO2U8NjtlKyspYy5fX3dlYmdsRnJhbWVidWZmZXJbZV09dC5jcmVhdGVGcmFtZWJ1ZmZlcigpfWVsc2UgaWYoYy5fX3dlYmdsRnJhbWVidWZmZXI9dC5jcmVhdGVGcmFtZWJ1ZmZlcigpLG0paWYoaS5kcmF3QnVmZmVycyl7Y29uc3Qgbj1lLnRleHR1cmU7Zm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKXtjb25zdCBpPW8uZ2V0KG5bZV0pO3ZvaWQgMD09PWkuX193ZWJnbFRleHR1cmUmJihpLl9fd2ViZ2xUZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLHIubWVtb3J5LnRleHR1cmVzKyspfX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMiBvciBXRUJHTF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uLiIpO2Vsc2UgaWYodSlpZihzKXtjLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksYy5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXI9dC5jcmVhdGVSZW5kZXJidWZmZXIoKSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsYy5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2NvbnN0IG89YS5jb252ZXJ0KGwuZm9ybWF0KSxpPWEuY29udmVydChsLnR5cGUpLHI9QyhsLmludGVybmFsRm9ybWF0LG8saSkscz1OKGUpO3QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHMscixlLndpZHRoLGUuaGVpZ2h0KSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxjLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksdC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxjLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLGUuZGVwdGhCdWZmZXImJihjLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcj10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLFQoYy5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIsZSwhMCkpLG4uYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7aWYocCl7bi5iaW5kVGV4dHVyZSgzNDA2NyxkLl9fd2ViZ2xUZXh0dXJlKSxEKDM0MDY3LGwsZyk7Zm9yKGxldCB0PTA7dDw2O3QrKylBKGMuX193ZWJnbEZyYW1lYnVmZmVyW3RdLGUsbCwzNjA2NCwzNDA2OSt0KTt5KGwsZykmJl8oMzQwNjcsbCxlLndpZHRoLGUuaGVpZ2h0KSxuLmJpbmRUZXh0dXJlKDM0MDY3LG51bGwpfWVsc2UgaWYobSl7Y29uc3QgdD1lLnRleHR1cmU7Zm9yKGxldCBpPTAsYT10Lmxlbmd0aDtpPGE7aSsrKXtjb25zdCBhPXRbaV0scj1vLmdldChhKTtuLmJpbmRUZXh0dXJlKDM1NTMsci5fX3dlYmdsVGV4dHVyZSksRCgzNTUzLGEsZyksQShjLl9fd2ViZ2xGcmFtZWJ1ZmZlcixlLGEsMzYwNjQraSwzNTUzKSx5KGEsZykmJl8oMzU1MyxhLGUud2lkdGgsZS5oZWlnaHQpfW4uYmluZFRleHR1cmUoMzU1MyxudWxsKX1lbHNle2xldCB0PTM1NTM7ZiYmKHM/dD1sLmlzRGF0YVRleHR1cmUzRD8zMjg3OTozNTg2Njpjb25zb2xlLndhcm4oIlRIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheSBvbmx5IHN1cHBvcnRlZCB3aXRoIFdlYkdMMi4iKSksbi5iaW5kVGV4dHVyZSh0LGQuX193ZWJnbFRleHR1cmUpLEQodCxsLGcpLEEoYy5fX3dlYmdsRnJhbWVidWZmZXIsZSxsLDM2MDY0LHQpLHkobCxnKSYmXyh0LGwsZS53aWR0aCxlLmhlaWdodCxlLmRlcHRoKSxuLmJpbmRUZXh0dXJlKHQsbnVsbCl9ZS5kZXB0aEJ1ZmZlciYmKGZ1bmN0aW9uIGgoZSl7Y29uc3QgaT1vLmdldChlKSxhPSEwPT09ZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldDtpZihlLmRlcHRoVGV4dHVyZSl7aWYoYSl0aHJvdyBuZXcgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7IShmdW5jdGlvbiByKGUsaSl7aWYoaSYmaS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihuLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxlKSwhaS5kZXB0aFRleHR1cmV8fCFpLmRlcHRoVGV4dHVyZS5pc0RlcHRoVGV4dHVyZSl0aHJvdyBuZXcgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTtvLmdldChpLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUmJmkuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPT09aS53aWR0aCYmaS5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PT09aS5oZWlnaHR8fChpLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD1pLndpZHRoLGkuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD1pLmhlaWdodCxpLmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0hMCksUChpLmRlcHRoVGV4dHVyZSwwKTtjb25zdCBhPW8uZ2V0KGkuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZTtpZihpLmRlcHRoVGV4dHVyZS5mb3JtYXQ9PT1raXQpdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLGEsMCk7ZWxzZXtpZihpLmRlcHRoVGV4dHVyZS5mb3JtYXQhPT1TaXQpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKTt0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsYSwwKX19KShpLl9fd2ViZ2xGcmFtZWJ1ZmZlcixlKX1lbHNlIGlmKGEpe2kuX193ZWJnbERlcHRoYnVmZmVyPVtdO2ZvcihsZXQgbz0wO288NjtvKyspbi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsaS5fX3dlYmdsRnJhbWVidWZmZXJbb10pLGkuX193ZWJnbERlcHRoYnVmZmVyW29dPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCksVChpLl9fd2ViZ2xEZXB0aGJ1ZmZlcltvXSxlLCExKX1lbHNlIG4uYmluZEZyYW1lYnVmZmVyKDM2MTYwLGkuX193ZWJnbEZyYW1lYnVmZmVyKSxpLl9fd2ViZ2xEZXB0aGJ1ZmZlcj10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLFQoaS5fX3dlYmdsRGVwdGhidWZmZXIsZSwhMSk7bi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9KShlKX0sdGhpcy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXA9ZnVuY3Rpb24gaih0KXtjb25zdCBlPWIodCl8fHMsaT0hMD09PXQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz90LnRleHR1cmU6W3QudGV4dHVyZV07Zm9yKGxldCBhPTAscj1pLmxlbmd0aDthPHI7YSsrKXtjb25zdCByPWlbYV07aWYoeShyLGUpKXtjb25zdCBlPXQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/MzQwNjc6MzU1MyxpPW8uZ2V0KHIpLl9fd2ViZ2xUZXh0dXJlO24uYmluZFRleHR1cmUoZSxpKSxfKGUscix0LndpZHRoLHQuaGVpZ2h0KSxuLmJpbmRUZXh0dXJlKGUsbnVsbCl9fX0sdGhpcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldD1mdW5jdGlvbiBVKGUpe2lmKGUuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KWlmKHMpe2NvbnN0IGk9ZS53aWR0aCxhPWUuaGVpZ2h0O2xldCByPTE2Mzg0O2UuZGVwdGhCdWZmZXImJihyfD0yNTYpLGUuc3RlbmNpbEJ1ZmZlciYmKHJ8PTEwMjQpO2NvbnN0IHM9by5nZXQoZSk7bi5iaW5kRnJhbWVidWZmZXIoMzYwMDgscy5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLG4uYmluZEZyYW1lYnVmZmVyKDM2MDA5LHMuX193ZWJnbEZyYW1lYnVmZmVyKSx0LmJsaXRGcmFtZWJ1ZmZlcigwLDAsaSxhLDAsMCxpLGEsciw5NzI4KSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxzLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcil9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKX0sdGhpcy5zYWZlU2V0VGV4dHVyZTJEPWZ1bmN0aW9uIEcodCxlKXt0JiZ0LmlzV2ViR0xSZW5kZXJUYXJnZXQmJighMT09PXomJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSx6PSEwKSx0PXQudGV4dHVyZSksUCh0LGUpfSx0aGlzLnNhZmVTZXRUZXh0dXJlQ3ViZT1mdW5jdGlvbiBXKHQsZSl7dCYmdC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmKCExPT09SSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmU6IGRvbid0IHVzZSBjdWJlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxJPSEwKSx0PXQudGV4dHVyZSksdyh0LGUpfX1mdW5jdGlvbiBkZHQodCxlLG4pe2NvbnN0IG89bi5pc1dlYkdMMjtyZXR1cm57Y29udmVydDpmdW5jdGlvbiBpKHQpe2xldCBuO2lmKHQ9PT1faXQpcmV0dXJuIDUxMjE7aWYoMTAxNz09PXQpcmV0dXJuIDMyODE5O2lmKDEwMTg9PT10KXJldHVybiAzMjgyMDtpZigxMDE5PT09dClyZXR1cm4gMzM2MzU7aWYoMTAxMD09PXQpcmV0dXJuIDUxMjA7aWYoMTAxMT09PXQpcmV0dXJuIDUxMjI7aWYodD09PUNpdClyZXR1cm4gNTEyMztpZigxMDEzPT09dClyZXR1cm4gNTEyNDtpZih0PT09TWl0KXJldHVybiA1MTI1O2lmKHQ9PT12aXQpcmV0dXJuIDUxMjY7aWYodD09PXhpdClyZXR1cm4gbz81MTMxOihuPWUuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksbnVsbCE9PW4/bi5IQUxGX0ZMT0FUX09FUzpudWxsKTtpZigxMDIxPT09dClyZXR1cm4gNjQwNjtpZih0PT09UGl0KXJldHVybiA2NDA3O2lmKHQ9PT13aXQpcmV0dXJuIDY0MDg7aWYoMTAyND09PXQpcmV0dXJuIDY0MDk7aWYoMTAyNT09PXQpcmV0dXJuIDY0MTA7aWYodD09PWtpdClyZXR1cm4gNjQwMjtpZih0PT09U2l0KXJldHVybiAzNDA0MTtpZigxMDI4PT09dClyZXR1cm4gNjQwMztpZigxMDI5PT09dClyZXR1cm4gMzYyNDQ7aWYoMTAzMD09PXQpcmV0dXJuIDMzMzE5O2lmKDEwMzE9PT10KXJldHVybiAzMzMyMDtpZigxMDMyPT09dClyZXR1cm4gMzYyNDg7aWYoMTAzMz09PXQpcmV0dXJuIDM2MjQ5O2lmKDMzNzc2PT09dHx8MzM3Nzc9PT10fHwzMzc3OD09PXR8fDMzNzc5PT09dCl7aWYobj1lLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKSxudWxsPT09bilyZXR1cm4gbnVsbDtpZigzMzc3Nj09PXQpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZigzMzc3Nz09PXQpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7aWYoMzM3Nzg9PT10KXJldHVybiBuLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO2lmKDMzNzc5PT09dClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1pZigzNTg0MD09PXR8fDM1ODQxPT09dHx8MzU4NDI9PT10fHwzNTg0Mz09PXQpe2lmKG49ZS5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLG51bGw9PT1uKXJldHVybiBudWxsO2lmKDM1ODQwPT09dClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HO2lmKDM1ODQxPT09dClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO2lmKDM1ODQyPT09dClyZXR1cm4gbi5DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRztpZigzNTg0Mz09PXQpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUd9aWYoMzYxOTY9PT10KXJldHVybiBuPWUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSIpLG51bGwhPT1uP24uQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDpudWxsO2lmKCgzNzQ5Mj09PXR8fDM3NDk2PT09dCkmJihuPWUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIiksbnVsbCE9PW4pKXtpZigzNzQ5Mj09PXQpcmV0dXJuIG4uQ09NUFJFU1NFRF9SR0I4X0VUQzI7aWYoMzc0OTY9PT10KXJldHVybiBuLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9cmV0dXJuIDM3ODA4PT09dHx8Mzc4MDk9PT10fHwzNzgxMD09PXR8fDM3ODExPT09dHx8Mzc4MTI9PT10fHwzNzgxMz09PXR8fDM3ODE0PT09dHx8Mzc4MTU9PT10fHwzNzgxNj09PXR8fDM3ODE3PT09dHx8Mzc4MTg9PT10fHwzNzgxOT09PXR8fDM3ODIwPT09dHx8Mzc4MjE9PT10fHwzNzg0MD09PXR8fDM3ODQxPT09dHx8Mzc4NDI9PT10fHwzNzg0Mz09PXR8fDM3ODQ0PT09dHx8Mzc4NDU9PT10fHwzNzg0Nj09PXR8fDM3ODQ3PT09dHx8Mzc4NDg9PT10fHwzNzg0OT09PXR8fDM3ODUwPT09dHx8Mzc4NTE9PT10fHwzNzg1Mj09PXR8fDM3ODUzPT09dD8obj1lLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKSxudWxsIT09bj90Om51bGwpOjM2NDkyPT09dD8obj1lLmdldCgiRVhUX3RleHR1cmVfY29tcHJlc3Npb25fYnB0YyIpLG51bGwhPT1uP3Q6bnVsbCk6dD09PU9pdD9vPzM0MDQyOihuPWUuZ2V0KCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksbnVsbCE9PW4/bi5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTDpudWxsKTp2b2lkIDB9fX1yZHQucHJvdG90eXBlLmlzTWVzaERpc3RhbmNlTWF0ZXJpYWw9ITA7Y2xhc3MgcGR0IGV4dGVuZHMgX3N0e2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5jYW1lcmFzPXR9fXBkdC5wcm90b3R5cGUuaXNBcnJheUNhbWVyYT0hMDtjbGFzcyBtZHQgZXh0ZW5kcyBwcnR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iR3JvdXAifX1tZHQucHJvdG90eXBlLmlzR3JvdXA9ITA7Y29uc3QgdWR0PXt0eXBlOiJtb3ZlIn07Y2xhc3MgZmR0e2NvbnN0cnVjdG9yKCl7dGhpcy5fdGFyZ2V0UmF5PW51bGwsdGhpcy5fZ3JpcD1udWxsLHRoaXMuX2hhbmQ9bnVsbH1nZXRIYW5kU3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2hhbmQmJih0aGlzLl9oYW5kPW5ldyBtZHQsdGhpcy5faGFuZC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2hhbmQudmlzaWJsZT0hMSx0aGlzLl9oYW5kLmpvaW50cz17fSx0aGlzLl9oYW5kLmlucHV0U3RhdGU9e3BpbmNoaW5nOiExfSksdGhpcy5faGFuZH1nZXRUYXJnZXRSYXlTcGFjZSgpe3JldHVybiBudWxsPT09dGhpcy5fdGFyZ2V0UmF5JiYodGhpcy5fdGFyZ2V0UmF5PW5ldyBtZHQsdGhpcy5fdGFyZ2V0UmF5Lm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEsdGhpcy5fdGFyZ2V0UmF5Lmhhc0xpbmVhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5saW5lYXJWZWxvY2l0eT1uZXcgY2F0LHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eT1uZXcgY2F0KSx0aGlzLl90YXJnZXRSYXl9Z2V0R3JpcFNwYWNlKCl7cmV0dXJuIG51bGw9PT10aGlzLl9ncmlwJiYodGhpcy5fZ3JpcD1uZXcgbWR0LHRoaXMuX2dyaXAubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9ncmlwLnZpc2libGU9ITEsdGhpcy5fZ3JpcC5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmxpbmVhclZlbG9jaXR5PW5ldyBjYXQsdGhpcy5fZ3JpcC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5hbmd1bGFyVmVsb2NpdHk9bmV3IGNhdCksdGhpcy5fZ3JpcH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiBudWxsIT09dGhpcy5fdGFyZ2V0UmF5JiZ0aGlzLl90YXJnZXRSYXkuZGlzcGF0Y2hFdmVudCh0KSxudWxsIT09dGhpcy5fZ3JpcCYmdGhpcy5fZ3JpcC5kaXNwYXRjaEV2ZW50KHQpLG51bGwhPT10aGlzLl9oYW5kJiZ0aGlzLl9oYW5kLmRpc3BhdGNoRXZlbnQodCksdGhpc31kaXNjb25uZWN0KHQpe3JldHVybiB0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTp0fSksbnVsbCE9PXRoaXMuX3RhcmdldFJheSYmKHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExKSxudWxsIT09dGhpcy5fZ3JpcCYmKHRoaXMuX2dyaXAudmlzaWJsZT0hMSksbnVsbCE9PXRoaXMuX2hhbmQmJih0aGlzLl9oYW5kLnZpc2libGU9ITEpLHRoaXN9dXBkYXRlKHQsZSxuKXtsZXQgbz1udWxsLGk9bnVsbCxhPW51bGw7Y29uc3Qgcj10aGlzLl90YXJnZXRSYXkscz10aGlzLl9ncmlwLGw9dGhpcy5faGFuZDtpZih0JiYidmlzaWJsZS1ibHVycmVkIiE9PWUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUpaWYobnVsbCE9PXImJihvPWUuZ2V0UG9zZSh0LnRhcmdldFJheVNwYWNlLG4pLG51bGwhPT1vJiYoci5tYXRyaXguZnJvbUFycmF5KG8udHJhbnNmb3JtLm1hdHJpeCksci5tYXRyaXguZGVjb21wb3NlKHIucG9zaXRpb24sci5yb3RhdGlvbixyLnNjYWxlKSxvLmxpbmVhclZlbG9jaXR5PyhyLmhhc0xpbmVhclZlbG9jaXR5PSEwLHIubGluZWFyVmVsb2NpdHkuY29weShvLmxpbmVhclZlbG9jaXR5KSk6ci5oYXNMaW5lYXJWZWxvY2l0eT0hMSxvLmFuZ3VsYXJWZWxvY2l0eT8oci5oYXNBbmd1bGFyVmVsb2NpdHk9ITAsci5hbmd1bGFyVmVsb2NpdHkuY29weShvLmFuZ3VsYXJWZWxvY2l0eSkpOnIuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuZGlzcGF0Y2hFdmVudCh1ZHQpKSksbCYmdC5oYW5kKXthPSEwO2Zvcihjb25zdCBvIG9mIHQuaGFuZC52YWx1ZXMoKSl7Y29uc3QgdD1lLmdldEpvaW50UG9zZShvLG4pO2lmKHZvaWQgMD09PWwuam9pbnRzW28uam9pbnROYW1lXSl7Y29uc3QgdD1uZXcgbWR0O3QubWF0cml4QXV0b1VwZGF0ZT0hMSx0LnZpc2libGU9ITEsbC5qb2ludHNbby5qb2ludE5hbWVdPXQsbC5hZGQodCl9Y29uc3QgaT1sLmpvaW50c1tvLmpvaW50TmFtZV07bnVsbCE9PXQmJihpLm1hdHJpeC5mcm9tQXJyYXkodC50cmFuc2Zvcm0ubWF0cml4KSxpLm1hdHJpeC5kZWNvbXBvc2UoaS5wb3NpdGlvbixpLnJvdGF0aW9uLGkuc2NhbGUpLGkuam9pbnRSYWRpdXM9dC5yYWRpdXMpLGkudmlzaWJsZT1udWxsIT09dH1jb25zdCBvPWwuam9pbnRzWyJpbmRleC1maW5nZXItdGlwIl0ucG9zaXRpb24uZGlzdGFuY2VUbyhsLmpvaW50c1sidGh1bWItdGlwIl0ucG9zaXRpb24pLGk9LjAyLHI9LjAwNTtsLmlucHV0U3RhdGUucGluY2hpbmcmJm8+aStyPyhsLmlucHV0U3RhdGUucGluY2hpbmc9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaGVuZCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSk6IWwuaW5wdXRTdGF0ZS5waW5jaGluZyYmbzw9aS1yJiYobC5pbnB1dFN0YXRlLnBpbmNoaW5nPSEwLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hzdGFydCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSl9ZWxzZSBudWxsIT09cyYmdC5ncmlwU3BhY2UmJihpPWUuZ2V0UG9zZSh0LmdyaXBTcGFjZSxuKSxudWxsIT09aSYmKHMubWF0cml4LmZyb21BcnJheShpLnRyYW5zZm9ybS5tYXRyaXgpLHMubWF0cml4LmRlY29tcG9zZShzLnBvc2l0aW9uLHMucm90YXRpb24scy5zY2FsZSksaS5saW5lYXJWZWxvY2l0eT8ocy5oYXNMaW5lYXJWZWxvY2l0eT0hMCxzLmxpbmVhclZlbG9jaXR5LmNvcHkoaS5saW5lYXJWZWxvY2l0eSkpOnMuaGFzTGluZWFyVmVsb2NpdHk9ITEsaS5hbmd1bGFyVmVsb2NpdHk/KHMuaGFzQW5ndWxhclZlbG9jaXR5PSEwLHMuYW5ndWxhclZlbG9jaXR5LmNvcHkoaS5hbmd1bGFyVmVsb2NpdHkpKTpzLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSkpO3JldHVybiBudWxsIT09ciYmKHIudmlzaWJsZT1udWxsIT09byksbnVsbCE9PXMmJihzLnZpc2libGU9bnVsbCE9PWkpLG51bGwhPT1sJiYobC52aXNpYmxlPW51bGwhPT1hKSx0aGlzfX1jbGFzcyBnZHQgZXh0ZW5kcyBVaXR7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpO2NvbnN0IG49dGhpcyxvPXQuc3RhdGU7bGV0IGk9bnVsbCxhPTEscj1udWxsLHM9ImxvY2FsLWZsb29yIixsPW51bGwsYz1udWxsLGQ9bnVsbCxwPW51bGwsbT1udWxsO2NvbnN0IHU9W10sZj1uZXcgTWFwLGc9bmV3IF9zdDtnLmxheWVycy5lbmFibGUoMSksZy52aWV3cG9ydD1uZXcgYWF0O2NvbnN0IGg9bmV3IF9zdDtoLmxheWVycy5lbmFibGUoMiksaC52aWV3cG9ydD1uZXcgYWF0O2NvbnN0IGI9W2csaF0seT1uZXcgcGR0O3kubGF5ZXJzLmVuYWJsZSgxKSx5LmxheWVycy5lbmFibGUoMik7bGV0IF89bnVsbCxDPW51bGw7ZnVuY3Rpb24gTSh0KXtjb25zdCBlPWYuZ2V0KHQuaW5wdXRTb3VyY2UpO2UmJmUuZGlzcGF0Y2hFdmVudCh7dHlwZTp0LnR5cGUsZGF0YTp0LmlucHV0U291cmNlfSl9ZnVuY3Rpb24gdigpe2YuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LmRpc2Nvbm5lY3QoZSl9KSksZi5jbGVhcigpLF89bnVsbCxDPW51bGwsby5iaW5kWFJGcmFtZWJ1ZmZlcihudWxsKSx0LnNldFJlbmRlclRhcmdldCh0LmdldFJlbmRlclRhcmdldCgpKSxTLnN0b3AoKSxuLmlzUHJlc2VudGluZz0hMSxuLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlc3Npb25lbmQifSl9ZnVuY3Rpb24geCh0KXtjb25zdCBlPWkuaW5wdXRTb3VyY2VzO2ZvcihsZXQgdD0wO3Q8dS5sZW5ndGg7dCsrKWYuc2V0KGVbdF0sdVt0XSk7Zm9yKGxldCBlPTA7ZTx0LnJlbW92ZWQubGVuZ3RoO2UrKyl7Y29uc3Qgbj10LnJlbW92ZWRbZV0sbz1mLmdldChuKTtvJiYoby5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNjb25uZWN0ZWQiLGRhdGE6bn0pLGYuZGVsZXRlKG4pKX1mb3IobGV0IGU9MDtlPHQuYWRkZWQubGVuZ3RoO2UrKyl7Y29uc3Qgbj10LmFkZGVkW2VdLG89Zi5nZXQobik7byYmby5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjb25uZWN0ZWQiLGRhdGE6bn0pfX10aGlzLmNhbWVyYUF1dG9VcGRhdGU9ITAsdGhpcy5lbmFibGVkPSExLHRoaXMuaXNQcmVzZW50aW5nPSExLHRoaXMuZ2V0Q29udHJvbGxlcj1mdW5jdGlvbih0KXtsZXQgZT11W3RdO3JldHVybiB2b2lkIDA9PT1lJiYoZT1uZXcgZmR0LHVbdF09ZSksZS5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKHQpe2xldCBlPXVbdF07cmV0dXJuIHZvaWQgMD09PWUmJihlPW5ldyBmZHQsdVt0XT1lKSxlLmdldEdyaXBTcGFjZSgpfSx0aGlzLmdldEhhbmQ9ZnVuY3Rpb24odCl7bGV0IGU9dVt0XTtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bmV3IGZkdCx1W3RdPWUpLGUuZ2V0SGFuZFNwYWNlKCl9LHRoaXMuc2V0RnJhbWVidWZmZXJTY2FsZUZhY3Rvcj1mdW5jdGlvbih0KXthPXQsITA9PT1uLmlzUHJlc2VudGluZyYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgZnJhbWVidWZmZXIgc2NhbGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5zZXRSZWZlcmVuY2VTcGFjZVR5cGU9ZnVuY3Rpb24odCl7cz10LCEwPT09bi5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIHJlZmVyZW5jZSBzcGFjZSB0eXBlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuZ2V0UmVmZXJlbmNlU3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gcn0sdGhpcy5nZXRTZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGl9LHRoaXMuc2V0U2Vzc2lvbj1hc3luYyBmdW5jdGlvbih0KXtpZihpPXQsbnVsbCE9PWkpe2kuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0IixNKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixNKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVuZCIsTSksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplIixNKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsTSksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplZW5kIixNKSxpLmFkZEV2ZW50TGlzdGVuZXIoImVuZCIsdiksaS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dHNvdXJjZXNjaGFuZ2UiLHgpO2NvbnN0IHQ9ZS5nZXRDb250ZXh0QXR0cmlidXRlcygpO2lmKCEwIT09dC54ckNvbXBhdGlibGUmJmF3YWl0IGUubWFrZVhSQ29tcGF0aWJsZSgpLHZvaWQgMD09PWkucmVuZGVyU3RhdGUubGF5ZXJzKW09bmV3IFhSV2ViR0xMYXllcihpLGUse2FudGlhbGlhczp0LmFudGlhbGlhcyxhbHBoYTp0LmFscGhhLGRlcHRoOnQuZGVwdGgsc3RlbmNpbDp0LnN0ZW5jaWwsZnJhbWVidWZmZXJTY2FsZUZhY3RvcjphfSksaS51cGRhdGVSZW5kZXJTdGF0ZSh7YmFzZUxheWVyOm19KTtlbHNle2xldCBuPTA7aWYodC5hbnRpYWxpYXMpbT1uZXcgWFJXZWJHTExheWVyKGksZSx7YW50aWFsaWFzOiEwLGFscGhhOnQuYWxwaGEsZGVwdGg6dC5kZXB0aCxzdGVuY2lsOnQuc3RlbmNpbCxmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yOmF9KSxpLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W21dfSk7ZWxzZXt0LmRlcHRoJiYobj10LnN0ZW5jaWw/MzQwNDE6NjQwMik7Y29uc3Qgbz17Y29sb3JGb3JtYXQ6dC5hbHBoYT82NDA4OjY0MDcsZGVwdGhGb3JtYXQ6bixzY2FsZUZhY3RvcjphfTtjPW5ldyBYUldlYkdMQmluZGluZyhpLGUpLHA9Yy5jcmVhdGVQcm9qZWN0aW9uTGF5ZXIobyksZD1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksaS51cGRhdGVSZW5kZXJTdGF0ZSh7bGF5ZXJzOltwXX0pfX1yPWF3YWl0IGkucmVxdWVzdFJlZmVyZW5jZVNwYWNlKHMpLFMuc2V0Q29udGV4dChpKSxTLnN0YXJ0KCksbi5pc1ByZXNlbnRpbmc9ITAsbi5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uc3RhcnQifSl9fTtjb25zdCBPPW5ldyBjYXQsUD1uZXcgY2F0O2Z1bmN0aW9uIHcodCxlKXtudWxsPT09ZT90Lm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXgpOnQubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyhlLm1hdHJpeFdvcmxkLHQubWF0cml4KSx0Lm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHQubWF0cml4V29ybGQpLmludmVydCgpfXRoaXMudXBkYXRlQ2FtZXJhPWZ1bmN0aW9uKHQpe2lmKG51bGw9PT1pKXJldHVybjt5Lm5lYXI9aC5uZWFyPWcubmVhcj10Lm5lYXIseS5mYXI9aC5mYXI9Zy5mYXI9dC5mYXIsXz09PXkubmVhciYmQz09PXkuZmFyfHwoaS51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOnkubmVhcixkZXB0aEZhcjp5LmZhcn0pLF89eS5uZWFyLEM9eS5mYXIpO2NvbnN0IGU9dC5wYXJlbnQsbj15LmNhbWVyYXM7dyh5LGUpO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXcoblt0XSxlKTt5Lm1hdHJpeFdvcmxkLmRlY29tcG9zZSh5LnBvc2l0aW9uLHkucXVhdGVybmlvbix5LnNjYWxlKSx0LnBvc2l0aW9uLmNvcHkoeS5wb3NpdGlvbiksdC5xdWF0ZXJuaW9uLmNvcHkoeS5xdWF0ZXJuaW9uKSx0LnNjYWxlLmNvcHkoeS5zY2FsZSksdC5tYXRyaXguY29weSh5Lm1hdHJpeCksdC5tYXRyaXhXb3JsZC5jb3B5KHkubWF0cml4V29ybGQpO2NvbnN0IG89dC5jaGlsZHJlbjtmb3IobGV0IHQ9MCxlPW8ubGVuZ3RoO3Q8ZTt0Kyspb1t0XS51cGRhdGVNYXRyaXhXb3JsZCghMCk7Mj09PW4ubGVuZ3RoPyhmdW5jdGlvbiBhKHQsZSxuKXtPLnNldEZyb21NYXRyaXhQb3NpdGlvbihlLm1hdHJpeFdvcmxkKSxQLnNldEZyb21NYXRyaXhQb3NpdGlvbihuLm1hdHJpeFdvcmxkKTtjb25zdCBvPU8uZGlzdGFuY2VUbyhQKSxpPWUucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxhPW4ucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxyPWlbMTRdLyhpWzEwXS0xKSxzPWlbMTRdLyhpWzEwXSsxKSxsPShpWzldKzEpL2lbNV0sYz0oaVs5XS0xKS9pWzVdLGQ9KGlbOF0tMSkvaVswXSxwPShhWzhdKzEpL2FbMF0sbT1yKmQsdT1yKnAsZj1vLygtZCtwKSxnPWYqLWQ7ZS5tYXRyaXhXb3JsZC5kZWNvbXBvc2UodC5wb3NpdGlvbix0LnF1YXRlcm5pb24sdC5zY2FsZSksdC50cmFuc2xhdGVYKGcpLHQudHJhbnNsYXRlWihmKSx0Lm1hdHJpeFdvcmxkLmNvbXBvc2UodC5wb3NpdGlvbix0LnF1YXRlcm5pb24sdC5zY2FsZSksdC5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtjb25zdCBoPXIrZixiPXMrZjt0LnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKG0tZyx1KyhvLWcpLGwqcy9iKmgsYypzL2IqaCxoLGIpfSkoeSxnLGgpOnkucHJvamVjdGlvbk1hdHJpeC5jb3B5KGcucHJvamVjdGlvbk1hdHJpeCl9LHRoaXMuZ2V0Q2FtZXJhPWZ1bmN0aW9uKCl7cmV0dXJuIHl9LHRoaXMuZ2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT1wP3AuZml4ZWRGb3ZlYXRpb246bnVsbCE9PW0/bS5maXhlZEZvdmVhdGlvbjp2b2lkIDB9LHRoaXMuc2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKHQpe251bGwhPT1wJiYocC5maXhlZEZvdmVhdGlvbj10KSxudWxsIT09bSYmdm9pZCAwIT09bS5maXhlZEZvdmVhdGlvbiYmKG0uZml4ZWRGb3ZlYXRpb249dCl9O2xldCBrPW51bGw7Y29uc3QgUz1uZXcgUnN0O1Muc2V0QW5pbWF0aW9uTG9vcCgoZnVuY3Rpb24gRCh0LG4pe2lmKGw9bi5nZXRWaWV3ZXJQb3NlKHIpLG51bGwhPT1sKXtjb25zdCB0PWwudmlld3M7bnVsbCE9PW0mJm8uYmluZFhSRnJhbWVidWZmZXIobS5mcmFtZWJ1ZmZlcik7bGV0IG49ITE7dC5sZW5ndGghPT15LmNhbWVyYXMubGVuZ3RoJiYoeS5jYW1lcmFzLmxlbmd0aD0wLG49ITApO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtjb25zdCBhPXRbaV07bGV0IHI9bnVsbDtpZihudWxsIT09bSlyPW0uZ2V0Vmlld3BvcnQoYSk7ZWxzZXtjb25zdCB0PWMuZ2V0Vmlld1N1YkltYWdlKHAsYSk7by5iaW5kWFJGcmFtZWJ1ZmZlcihkKSx2b2lkIDAhPT10LmRlcHRoU3RlbmNpbFRleHR1cmUmJmUuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwOTYsMzU1Myx0LmRlcHRoU3RlbmNpbFRleHR1cmUsMCksZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNTUzLHQuY29sb3JUZXh0dXJlLDApLHI9dC52aWV3cG9ydH1jb25zdCBzPWJbaV07cy5tYXRyaXguZnJvbUFycmF5KGEudHJhbnNmb3JtLm1hdHJpeCkscy5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheShhLnByb2plY3Rpb25NYXRyaXgpLHMudmlld3BvcnQuc2V0KHIueCxyLnksci53aWR0aCxyLmhlaWdodCksMD09PWkmJnkubWF0cml4LmNvcHkocy5tYXRyaXgpLCEwPT09biYmeS5jYW1lcmFzLnB1c2gocyl9fWNvbnN0IGE9aS5pbnB1dFNvdXJjZXM7Zm9yKGxldCB0PTA7dDx1Lmxlbmd0aDt0KyspdVt0XS51cGRhdGUoYVt0XSxuLHIpO2smJmsodCxuKX0pKSx0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24odCl7az10fSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fX1mdW5jdGlvbiBoZHQodCl7ZnVuY3Rpb24gZShlLG4pe2Uub3BhY2l0eS52YWx1ZT1uLm9wYWNpdHksbi5jb2xvciYmZS5kaWZmdXNlLnZhbHVlLmNvcHkobi5jb2xvciksbi5lbWlzc2l2ZSYmZS5lbWlzc2l2ZS52YWx1ZS5jb3B5KG4uZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKG4uZW1pc3NpdmVJbnRlbnNpdHkpLG4ubWFwJiYoZS5tYXAudmFsdWU9bi5tYXApLG4uYWxwaGFNYXAmJihlLmFscGhhTWFwLnZhbHVlPW4uYWxwaGFNYXApLG4uc3BlY3VsYXJNYXAmJihlLnNwZWN1bGFyTWFwLnZhbHVlPW4uc3BlY3VsYXJNYXApO2NvbnN0IG89dC5nZXQobikuZW52TWFwO2lmKG8pe2UuZW52TWFwLnZhbHVlPW8sZS5mbGlwRW52TWFwLnZhbHVlPW8uaXNDdWJlVGV4dHVyZSYmITE9PT1vLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT8tMToxLGUucmVmbGVjdGl2aXR5LnZhbHVlPW4ucmVmbGVjdGl2aXR5LGUucmVmcmFjdGlvblJhdGlvLnZhbHVlPW4ucmVmcmFjdGlvblJhdGlvO2NvbnN0IGk9dC5nZXQobykuX19tYXhNaXBMZXZlbDt2b2lkIDAhPT1pJiYoZS5tYXhNaXBMZXZlbC52YWx1ZT1pKX1sZXQgaSxhO24ubGlnaHRNYXAmJihlLmxpZ2h0TWFwLnZhbHVlPW4ubGlnaHRNYXAsZS5saWdodE1hcEludGVuc2l0eS52YWx1ZT1uLmxpZ2h0TWFwSW50ZW5zaXR5KSxuLmFvTWFwJiYoZS5hb01hcC52YWx1ZT1uLmFvTWFwLGUuYW9NYXBJbnRlbnNpdHkudmFsdWU9bi5hb01hcEludGVuc2l0eSksbi5tYXA/aT1uLm1hcDpuLnNwZWN1bGFyTWFwP2k9bi5zcGVjdWxhck1hcDpuLmRpc3BsYWNlbWVudE1hcD9pPW4uZGlzcGxhY2VtZW50TWFwOm4ubm9ybWFsTWFwP2k9bi5ub3JtYWxNYXA6bi5idW1wTWFwP2k9bi5idW1wTWFwOm4ucm91Z2huZXNzTWFwP2k9bi5yb3VnaG5lc3NNYXA6bi5tZXRhbG5lc3NNYXA/aT1uLm1ldGFsbmVzc01hcDpuLmFscGhhTWFwP2k9bi5hbHBoYU1hcDpuLmVtaXNzaXZlTWFwP2k9bi5lbWlzc2l2ZU1hcDpuLmNsZWFyY29hdE1hcD9pPW4uY2xlYXJjb2F0TWFwOm4uY2xlYXJjb2F0Tm9ybWFsTWFwP2k9bi5jbGVhcmNvYXROb3JtYWxNYXA6bi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/aT1uLmNsZWFyY29hdFJvdWdobmVzc01hcDpuLnNwZWN1bGFySW50ZW5zaXR5TWFwP2k9bi5zcGVjdWxhckludGVuc2l0eU1hcDpuLnNwZWN1bGFyVGludE1hcCYmKGk9bi5zcGVjdWxhclRpbnRNYXApLHZvaWQgMCE9PWkmJihpLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihpPWkudGV4dHVyZSksITA9PT1pLm1hdHJpeEF1dG9VcGRhdGUmJmkudXBkYXRlTWF0cml4KCksZS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KGkubWF0cml4KSksbi5hb01hcD9hPW4uYW9NYXA6bi5saWdodE1hcCYmKGE9bi5saWdodE1hcCksdm9pZCAwIT09YSYmKGEuaXNXZWJHTFJlbmRlclRhcmdldCYmKGE9YS50ZXh0dXJlKSwhMD09PWEubWF0cml4QXV0b1VwZGF0ZSYmYS51cGRhdGVNYXRyaXgoKSxlLnV2MlRyYW5zZm9ybS52YWx1ZS5jb3B5KGEubWF0cml4KSl9ZnVuY3Rpb24gbihlLG4pe2Uucm91Z2huZXNzLnZhbHVlPW4ucm91Z2huZXNzLGUubWV0YWxuZXNzLnZhbHVlPW4ubWV0YWxuZXNzLG4ucm91Z2huZXNzTWFwJiYoZS5yb3VnaG5lc3NNYXAudmFsdWU9bi5yb3VnaG5lc3NNYXApLG4ubWV0YWxuZXNzTWFwJiYoZS5tZXRhbG5lc3NNYXAudmFsdWU9bi5tZXRhbG5lc3NNYXApLG4uZW1pc3NpdmVNYXAmJihlLmVtaXNzaXZlTWFwLnZhbHVlPW4uZW1pc3NpdmVNYXApLG4uYnVtcE1hcCYmKGUuYnVtcE1hcC52YWx1ZT1uLmJ1bXBNYXAsZS5idW1wU2NhbGUudmFsdWU9bi5idW1wU2NhbGUsMT09PW4uc2lkZSYmKGUuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLG4ubm9ybWFsTWFwJiYoZS5ub3JtYWxNYXAudmFsdWU9bi5ub3JtYWxNYXAsZS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KG4ubm9ybWFsU2NhbGUpLDE9PT1uLnNpZGUmJmUubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLG4uZGlzcGxhY2VtZW50TWFwJiYoZS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9bi5kaXNwbGFjZW1lbnRNYXAsZS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1uLmRpc3BsYWNlbWVudFNjYWxlLGUuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1uLmRpc3BsYWNlbWVudEJpYXMpLHQuZ2V0KG4pLmVudk1hcCYmKGUuZW52TWFwSW50ZW5zaXR5LnZhbHVlPW4uZW52TWFwSW50ZW5zaXR5KX1yZXR1cm57cmVmcmVzaEZvZ1VuaWZvcm1zOmZ1bmN0aW9uIG8odCxlKXt0LmZvZ0NvbG9yLnZhbHVlLmNvcHkoZS5jb2xvciksZS5pc0ZvZz8odC5mb2dOZWFyLnZhbHVlPWUubmVhcix0LmZvZ0Zhci52YWx1ZT1lLmZhcik6ZS5pc0ZvZ0V4cDImJih0LmZvZ0RlbnNpdHkudmFsdWU9ZS5kZW5zaXR5KX0scmVmcmVzaE1hdGVyaWFsVW5pZm9ybXM6ZnVuY3Rpb24gaSh0LG8sYSxyLHMpe28uaXNNZXNoQmFzaWNNYXRlcmlhbD9lKHQsbyk6by5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KGUodCxvKSwoZnVuY3Rpb24gbCh0LGUpe2UuZW1pc3NpdmVNYXAmJih0LmVtaXNzaXZlTWFwLnZhbHVlPWUuZW1pc3NpdmVNYXApfSkodCxvKSk6by5pc01lc2hUb29uTWF0ZXJpYWw/KGUodCxvKSwoZnVuY3Rpb24gYyh0LGUpe2UuZ3JhZGllbnRNYXAmJih0LmdyYWRpZW50TWFwLnZhbHVlPWUuZ3JhZGllbnRNYXApLGUuZW1pc3NpdmVNYXAmJih0LmVtaXNzaXZlTWFwLnZhbHVlPWUuZW1pc3NpdmVNYXApLGUuYnVtcE1hcCYmKHQuYnVtcE1hcC52YWx1ZT1lLmJ1bXBNYXAsdC5idW1wU2NhbGUudmFsdWU9ZS5idW1wU2NhbGUsMT09PWUuc2lkZSYmKHQuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLGUubm9ybWFsTWFwJiYodC5ub3JtYWxNYXAudmFsdWU9ZS5ub3JtYWxNYXAsdC5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGUubm9ybWFsU2NhbGUpLDE9PT1lLnNpZGUmJnQubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLGUuZGlzcGxhY2VtZW50TWFwJiYodC5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZS5kaXNwbGFjZW1lbnRNYXAsdC5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1lLmRpc3BsYWNlbWVudFNjYWxlLHQuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lLmRpc3BsYWNlbWVudEJpYXMpfSkodCxvKSk6by5pc01lc2hQaG9uZ01hdGVyaWFsPyhlKHQsbyksKGZ1bmN0aW9uIGQodCxlKXt0LnNwZWN1bGFyLnZhbHVlLmNvcHkoZS5zcGVjdWxhciksdC5zaGluaW5lc3MudmFsdWU9TWF0aC5tYXgoZS5zaGluaW5lc3MsMWUtNCksZS5lbWlzc2l2ZU1hcCYmKHQuZW1pc3NpdmVNYXAudmFsdWU9ZS5lbWlzc2l2ZU1hcCksZS5idW1wTWFwJiYodC5idW1wTWFwLnZhbHVlPWUuYnVtcE1hcCx0LmJ1bXBTY2FsZS52YWx1ZT1lLmJ1bXBTY2FsZSwxPT09ZS5zaWRlJiYodC5idW1wU2NhbGUudmFsdWUqPS0xKSksZS5ub3JtYWxNYXAmJih0Lm5vcm1hbE1hcC52YWx1ZT1lLm5vcm1hbE1hcCx0Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoZS5ub3JtYWxTY2FsZSksMT09PWUuc2lkZSYmdC5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSksZS5kaXNwbGFjZW1lbnRNYXAmJih0LmRpc3BsYWNlbWVudE1hcC52YWx1ZT1lLmRpc3BsYWNlbWVudE1hcCx0LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWUuZGlzcGxhY2VtZW50U2NhbGUsdC5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWUuZGlzcGxhY2VtZW50Qmlhcyl9KSh0LG8pKTpvLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGUodCxvKSxvLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/KGZ1bmN0aW9uIHAodCxlLG8pe24odCxlKSx0LnJlZmxlY3Rpdml0eS52YWx1ZT1lLnJlZmxlY3Rpdml0eSx0LmNsZWFyY29hdC52YWx1ZT1lLmNsZWFyY29hdCx0LmNsZWFyY29hdFJvdWdobmVzcy52YWx1ZT1lLmNsZWFyY29hdFJvdWdobmVzcyxlLnNoZWVuJiZ0LnNoZWVuLnZhbHVlLmNvcHkoZS5zaGVlbiksZS5jbGVhcmNvYXRNYXAmJih0LmNsZWFyY29hdE1hcC52YWx1ZT1lLmNsZWFyY29hdE1hcCksZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJih0LmNsZWFyY29hdFJvdWdobmVzc01hcC52YWx1ZT1lLmNsZWFyY29hdFJvdWdobmVzc01hcCksZS5jbGVhcmNvYXROb3JtYWxNYXAmJih0LmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoZS5jbGVhcmNvYXROb3JtYWxTY2FsZSksdC5jbGVhcmNvYXROb3JtYWxNYXAudmFsdWU9ZS5jbGVhcmNvYXROb3JtYWxNYXAsMT09PWUuc2lkZSYmdC5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSksdC50cmFuc21pc3Npb24udmFsdWU9ZS50cmFuc21pc3Npb24sZS50cmFuc21pc3Npb25NYXAmJih0LnRyYW5zbWlzc2lvbk1hcC52YWx1ZT1lLnRyYW5zbWlzc2lvbk1hcCksZS50cmFuc21pc3Npb24+MCYmKHQudHJhbnNtaXNzaW9uU2FtcGxlck1hcC52YWx1ZT1vLnRleHR1cmUsdC50cmFuc21pc3Npb25TYW1wbGVyU2l6ZS52YWx1ZS5zZXQoby53aWR0aCxvLmhlaWdodCkpLHQudGhpY2tuZXNzLnZhbHVlPWUudGhpY2tuZXNzLGUudGhpY2tuZXNzTWFwJiYodC50aGlja25lc3NNYXAudmFsdWU9ZS50aGlja25lc3NNYXApLHQuYXR0ZW51YXRpb25EaXN0YW5jZS52YWx1ZT1lLmF0dGVudWF0aW9uRGlzdGFuY2UsdC5hdHRlbnVhdGlvblRpbnQudmFsdWUuY29weShlLmF0dGVudWF0aW9uVGludCksdC5zcGVjdWxhckludGVuc2l0eS52YWx1ZT1lLnNwZWN1bGFySW50ZW5zaXR5LHQuc3BlY3VsYXJUaW50LnZhbHVlLmNvcHkoZS5zcGVjdWxhclRpbnQpLGUuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJih0LnNwZWN1bGFySW50ZW5zaXR5TWFwLnZhbHVlPWUuc3BlY3VsYXJJbnRlbnNpdHlNYXApLGUuc3BlY3VsYXJUaW50TWFwJiYodC5zcGVjdWxhclRpbnRNYXAudmFsdWU9ZS5zcGVjdWxhclRpbnRNYXApfSkodCxvLHMpOm4odCxvKSk6by5pc01lc2hNYXRjYXBNYXRlcmlhbD8oZSh0LG8pLChmdW5jdGlvbiBtKHQsZSl7ZS5tYXRjYXAmJih0Lm1hdGNhcC52YWx1ZT1lLm1hdGNhcCksZS5idW1wTWFwJiYodC5idW1wTWFwLnZhbHVlPWUuYnVtcE1hcCx0LmJ1bXBTY2FsZS52YWx1ZT1lLmJ1bXBTY2FsZSwxPT09ZS5zaWRlJiYodC5idW1wU2NhbGUudmFsdWUqPS0xKSksZS5ub3JtYWxNYXAmJih0Lm5vcm1hbE1hcC52YWx1ZT1lLm5vcm1hbE1hcCx0Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoZS5ub3JtYWxTY2FsZSksMT09PWUuc2lkZSYmdC5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSksZS5kaXNwbGFjZW1lbnRNYXAmJih0LmRpc3BsYWNlbWVudE1hcC52YWx1ZT1lLmRpc3BsYWNlbWVudE1hcCx0LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWUuZGlzcGxhY2VtZW50U2NhbGUsdC5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWUuZGlzcGxhY2VtZW50Qmlhcyl9KSh0LG8pKTpvLmlzTWVzaERlcHRoTWF0ZXJpYWw/KGUodCxvKSwoZnVuY3Rpb24gdSh0LGUpe2UuZGlzcGxhY2VtZW50TWFwJiYodC5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZS5kaXNwbGFjZW1lbnRNYXAsdC5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1lLmRpc3BsYWNlbWVudFNjYWxlLHQuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lLmRpc3BsYWNlbWVudEJpYXMpfSkodCxvKSk6by5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhlKHQsbyksKGZ1bmN0aW9uIGYodCxlKXtlLmRpc3BsYWNlbWVudE1hcCYmKHQuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWUuZGlzcGxhY2VtZW50TWFwLHQuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9ZS5kaXNwbGFjZW1lbnRTY2FsZSx0LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9ZS5kaXNwbGFjZW1lbnRCaWFzKSx0LnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoZS5yZWZlcmVuY2VQb3NpdGlvbiksdC5uZWFyRGlzdGFuY2UudmFsdWU9ZS5uZWFyRGlzdGFuY2UsdC5mYXJEaXN0YW5jZS52YWx1ZT1lLmZhckRpc3RhbmNlfSkodCxvKSk6by5pc01lc2hOb3JtYWxNYXRlcmlhbD8oZSh0LG8pLChmdW5jdGlvbiBnKHQsZSl7ZS5idW1wTWFwJiYodC5idW1wTWFwLnZhbHVlPWUuYnVtcE1hcCx0LmJ1bXBTY2FsZS52YWx1ZT1lLmJ1bXBTY2FsZSwxPT09ZS5zaWRlJiYodC5idW1wU2NhbGUudmFsdWUqPS0xKSksZS5ub3JtYWxNYXAmJih0Lm5vcm1hbE1hcC52YWx1ZT1lLm5vcm1hbE1hcCx0Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoZS5ub3JtYWxTY2FsZSksMT09PWUuc2lkZSYmdC5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSksZS5kaXNwbGFjZW1lbnRNYXAmJih0LmRpc3BsYWNlbWVudE1hcC52YWx1ZT1lLmRpc3BsYWNlbWVudE1hcCx0LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWUuZGlzcGxhY2VtZW50U2NhbGUsdC5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWUuZGlzcGxhY2VtZW50Qmlhcyl9KSh0LG8pKTpvLmlzTGluZUJhc2ljTWF0ZXJpYWw/KChmdW5jdGlvbiBoKHQsZSl7dC5kaWZmdXNlLnZhbHVlLmNvcHkoZS5jb2xvciksdC5vcGFjaXR5LnZhbHVlPWUub3BhY2l0eX0pKHQsbyksby5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmKGZ1bmN0aW9uIGIodCxlKXt0LmRhc2hTaXplLnZhbHVlPWUuZGFzaFNpemUsdC50b3RhbFNpemUudmFsdWU9ZS5kYXNoU2l6ZStlLmdhcFNpemUsdC5zY2FsZS52YWx1ZT1lLnNjYWxlfSkodCxvKSk6by5pc1BvaW50c01hdGVyaWFsPyhmdW5jdGlvbiB5KHQsZSxuLG8pe2xldCBpO3QuZGlmZnVzZS52YWx1ZS5jb3B5KGUuY29sb3IpLHQub3BhY2l0eS52YWx1ZT1lLm9wYWNpdHksdC5zaXplLnZhbHVlPWUuc2l6ZSpuLHQuc2NhbGUudmFsdWU9LjUqbyxlLm1hcCYmKHQubWFwLnZhbHVlPWUubWFwKSxlLmFscGhhTWFwJiYodC5hbHBoYU1hcC52YWx1ZT1lLmFscGhhTWFwKSxlLm1hcD9pPWUubWFwOmUuYWxwaGFNYXAmJihpPWUuYWxwaGFNYXApLHZvaWQgMCE9PWkmJighMD09PWkubWF0cml4QXV0b1VwZGF0ZSYmaS51cGRhdGVNYXRyaXgoKSx0LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoaS5tYXRyaXgpKX0pKHQsbyxhLHIpOm8uaXNTcHJpdGVNYXRlcmlhbD8oZnVuY3Rpb24gXyh0LGUpe2xldCBuO3QuZGlmZnVzZS52YWx1ZS5jb3B5KGUuY29sb3IpLHQub3BhY2l0eS52YWx1ZT1lLm9wYWNpdHksdC5yb3RhdGlvbi52YWx1ZT1lLnJvdGF0aW9uLGUubWFwJiYodC5tYXAudmFsdWU9ZS5tYXApLGUuYWxwaGFNYXAmJih0LmFscGhhTWFwLnZhbHVlPWUuYWxwaGFNYXApLGUubWFwP249ZS5tYXA6ZS5hbHBoYU1hcCYmKG49ZS5hbHBoYU1hcCksdm9pZCAwIT09biYmKCEwPT09bi5tYXRyaXhBdXRvVXBkYXRlJiZuLnVwZGF0ZU1hdHJpeCgpLHQudXZUcmFuc2Zvcm0udmFsdWUuY29weShuLm1hdHJpeCkpfSkodCxvKTpvLmlzU2hhZG93TWF0ZXJpYWw/KHQuY29sb3IudmFsdWUuY29weShvLmNvbG9yKSx0Lm9wYWNpdHkudmFsdWU9by5vcGFjaXR5KTpvLmlzU2hhZGVyTWF0ZXJpYWwmJihvLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSl9fX1mdW5jdGlvbiBiZHQodD17fSl7Y29uc3QgZT12b2lkIDAhPT10LmNhbnZhcz90LmNhbnZhczooZnVuY3Rpb24gbigpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7cmV0dXJuIHQuc3R5bGUuZGlzcGxheT0iYmxvY2siLHR9KSgpLG89dm9pZCAwIT09dC5jb250ZXh0P3QuY29udGV4dDpudWxsLGk9dm9pZCAwIT09dC5hbHBoYSYmdC5hbHBoYSxhPXZvaWQgMD09PXQuZGVwdGh8fHQuZGVwdGgscj12b2lkIDA9PT10LnN0ZW5jaWx8fHQuc3RlbmNpbCxzPXZvaWQgMCE9PXQuYW50aWFsaWFzJiZ0LmFudGlhbGlhcyxsPXZvaWQgMD09PXQucHJlbXVsdGlwbGllZEFscGhhfHx0LnByZW11bHRpcGxpZWRBbHBoYSxjPXZvaWQgMCE9PXQucHJlc2VydmVEcmF3aW5nQnVmZmVyJiZ0LnByZXNlcnZlRHJhd2luZ0J1ZmZlcixkPXZvaWQgMCE9PXQucG93ZXJQcmVmZXJlbmNlP3QucG93ZXJQcmVmZXJlbmNlOiJkZWZhdWx0IixwPXZvaWQgMCE9PXQuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCYmdC5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0O2xldCBtPW51bGwsdT1udWxsO2NvbnN0IGY9W10sZz1bXTt0aGlzLmRvbUVsZW1lbnQ9ZSx0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMH0sdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5hdXRvQ2xlYXJDb2xvcj0hMCx0aGlzLmF1dG9DbGVhckRlcHRoPSEwLHRoaXMuYXV0b0NsZWFyU3RlbmNpbD0hMCx0aGlzLnNvcnRPYmplY3RzPSEwLHRoaXMuY2xpcHBpbmdQbGFuZXM9W10sdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMSx0aGlzLmdhbW1hRmFjdG9yPTIsdGhpcy5vdXRwdXRFbmNvZGluZz16aXQsdGhpcy5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz0hMSx0aGlzLnRvbmVNYXBwaW5nPTAsdGhpcy50b25lTWFwcGluZ0V4cG9zdXJlPTE7Y29uc3QgaD10aGlzO2xldCBiPSExLHk9MCxfPTAsQz1udWxsLE09LTEsdj1udWxsO2NvbnN0IHg9bmV3IGFhdCxPPW5ldyBhYXQ7bGV0IFA9bnVsbCx3PWUud2lkdGgsaz1lLmhlaWdodCxTPTEsRD1udWxsLEU9bnVsbDtjb25zdCBSPW5ldyBhYXQoMCwwLHcsayksQT1uZXcgYWF0KDAsMCx3LGspO2xldCBUPSExO2NvbnN0IE49W10sej1uZXcgRXN0O2xldCBJPSExLEg9ITEsRj1udWxsO2NvbnN0IEw9bmV3IEJhdCxCPW5ldyBjYXQsVj17YmFja2dyb3VuZDpudWxsLGZvZzpudWxsLGVudmlyb25tZW50Om51bGwsb3ZlcnJpZGVNYXRlcmlhbDpudWxsLGlzU2NlbmU6ITB9O2Z1bmN0aW9uIGooKXtyZXR1cm4gbnVsbD09PUM/UzoxfWxldCBVLEcsVyxZLHEsWixYLEssSixRLCQsdHQsZXQsbnQsb3QsaXQsYXQscnQsc3QsbHQsY3QsZHQscHQsbXQ9bztmdW5jdGlvbiB1dCh0LG4pe2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtjb25zdCBpPWUuZ2V0Q29udGV4dCh0W29dLG4pO2lmKG51bGwhPT1pKXJldHVybiBpfXJldHVybiBudWxsfXRyeXtjb25zdCB0PXthbHBoYTppLGRlcHRoOmEsc3RlbmNpbDpyLGFudGlhbGlhczpzLHByZW11bHRpcGxpZWRBbHBoYTpsLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpjLHBvd2VyUHJlZmVyZW5jZTpkLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6cH07aWYoZS5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixodCwhMSksZS5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsYnQsITEpLG51bGw9PT1tdCl7Y29uc3QgZT1bIndlYmdsMiIsIndlYmdsIiwiZXhwZXJpbWVudGFsLXdlYmdsIl07aWYoITA9PT1oLmlzV2ViR0wxUmVuZGVyZXImJmUuc2hpZnQoKSxtdD11dChlLHQpLG51bGw9PT1tdCl0aHJvdyB1dChlKT9uZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0ZXMuIik6bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0LiIpfXZvaWQgMD09PW10LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCYmKG10LmdldFNoYWRlclByZWNpc2lvbkZvcm1hdD1mdW5jdGlvbigpe3JldHVybntyYW5nZU1pbjoxLHJhbmdlTWF4OjEscHJlY2lzaW9uOjF9fSl9Y2F0Y2godCl7dGhyb3cgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIit0Lm1lc3NhZ2UpLHR9ZnVuY3Rpb24gZnQoKXtVPW5ldyBnbHQobXQpLEc9bmV3IEJzdChtdCxVLHQpLFUuaW5pdChHKSxkdD1uZXcgZGR0KG10LFUsRyksVz1uZXcgbGR0KG10LFUsRyksTlswXT0xMDI5LFk9bmV3IHlsdChtdCkscT1uZXcgWmN0LFo9bmV3IGNkdChtdCxVLFcscSxHLGR0LFkpLFg9bmV3IGpzdChoKSxLPW5ldyBmbHQoaCksSj1uZXcgQXN0KG10LEcpLHB0PW5ldyBGc3QobXQsVSxKLEcpLFE9bmV3IGhsdChtdCxKLFkscHQpLCQ9bmV3IHZsdChtdCxRLEosWSksc3Q9bmV3IE1sdChtdCksaXQ9bmV3IFZzdChxKSx0dD1uZXcgcWN0KGgsWCxLLFUsRyxwdCxpdCksZXQ9bmV3IGhkdChxKSxudD1uZXcgUWN0KHEpLG90PW5ldyBpZHQoVSxHKSxydD1uZXcgSHN0KGgsWCxXLCQsbCksYXQ9bmV3IHNkdChoLCQsRyksbHQ9bmV3IExzdChtdCxVLFksRyksY3Q9bmV3IGJsdChtdCxVLFksRyksWS5wcm9ncmFtcz10dC5wcm9ncmFtcyxoLmNhcGFiaWxpdGllcz1HLGguZXh0ZW5zaW9ucz1VLGgucHJvcGVydGllcz1xLGgucmVuZGVyTGlzdHM9bnQsaC5zaGFkb3dNYXA9YXQsaC5zdGF0ZT1XLGguaW5mbz1ZfWZ0KCk7Y29uc3QgZ3Q9bmV3IGdkdChoLG10KTtmdW5jdGlvbiBodCh0KXt0LnByZXZlbnREZWZhdWx0KCksY29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgTG9zdC4iKSxiPSEwfWZ1bmN0aW9uIGJ0KCl7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuIiksYj0hMTtjb25zdCB0PVkuYXV0b1Jlc2V0LGU9YXQuZW5hYmxlZCxuPWF0LmF1dG9VcGRhdGUsbz1hdC5uZWVkc1VwZGF0ZSxpPWF0LnR5cGU7ZnQoKSxZLmF1dG9SZXNldD10LGF0LmVuYWJsZWQ9ZSxhdC5hdXRvVXBkYXRlPW4sYXQubmVlZHNVcGRhdGU9byxhdC50eXBlPWl9ZnVuY3Rpb24geXQodCl7Y29uc3QgZT10LnRhcmdldDtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHl0KSwoZnVuY3Rpb24gbih0KXsoZnVuY3Rpb24gZSh0KXtjb25zdCBlPXEuZ2V0KHQpLnByb2dyYW1zO3ZvaWQgMCE9PWUmJmUuZm9yRWFjaCgoZnVuY3Rpb24odCl7dHQucmVsZWFzZVByb2dyYW0odCl9KSl9KSh0KSxxLnJlbW92ZSh0KX0pKGUpfXRoaXMueHI9Z3QsdGhpcy5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG10fSx0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG10LmdldENvbnRleHRBdHRyaWJ1dGVzKCl9LHRoaXMuZm9yY2VDb250ZXh0TG9zcz1mdW5jdGlvbigpe2NvbnN0IHQ9VS5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO3QmJnQubG9zZUNvbnRleHQoKX0sdGhpcy5mb3JjZUNvbnRleHRSZXN0b3JlPWZ1bmN0aW9uKCl7Y29uc3QgdD1VLmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7dCYmdC5yZXN0b3JlQ29udGV4dCgpfSx0aGlzLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXtyZXR1cm4gU30sdGhpcy5zZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJihTPXQsdGhpcy5zZXRTaXplKHcsaywhMSkpfSx0aGlzLmdldFNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2V0KHcsayl9LHRoaXMuc2V0U2l6ZT1mdW5jdGlvbih0LG4sbyl7Z3QuaXNQcmVzZW50aW5nP2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ2FuJ3QgY2hhbmdlIHNpemUgd2hpbGUgVlIgZGV2aWNlIGlzIHByZXNlbnRpbmcuIik6KHc9dCxrPW4sZS53aWR0aD1NYXRoLmZsb29yKHQqUyksZS5oZWlnaHQ9TWF0aC5mbG9vcihuKlMpLCExIT09byYmKGUuc3R5bGUud2lkdGg9dCsicHgiLGUuc3R5bGUuaGVpZ2h0PW4rInB4IiksdGhpcy5zZXRWaWV3cG9ydCgwLDAsdCxuKSl9LHRoaXMuZ2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2V0KHcqUyxrKlMpLmZsb29yKCl9LHRoaXMuc2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24odCxuLG8pe3c9dCxrPW4sUz1vLGUud2lkdGg9TWF0aC5mbG9vcih0Km8pLGUuaGVpZ2h0PU1hdGguZmxvb3IobipvKSx0aGlzLnNldFZpZXdwb3J0KDAsMCx0LG4pfSx0aGlzLmdldEN1cnJlbnRWaWV3cG9ydD1mdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KHgpfSx0aGlzLmdldFZpZXdwb3J0PWZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoUil9LHRoaXMuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24odCxlLG4sbyl7dC5pc1ZlY3RvcjQ/Ui5zZXQodC54LHQueSx0LnosdC53KTpSLnNldCh0LGUsbixvKSxXLnZpZXdwb3J0KHguY29weShSKS5tdWx0aXBseVNjYWxhcihTKS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoQSl9LHRoaXMuc2V0U2Npc3Nvcj1mdW5jdGlvbih0LGUsbixvKXt0LmlzVmVjdG9yND9BLnNldCh0LngsdC55LHQueix0LncpOkEuc2V0KHQsZSxuLG8pLFcuc2Npc3NvcihPLmNvcHkoQSkubXVsdGlwbHlTY2FsYXIoUykuZmxvb3IoKSl9LHRoaXMuZ2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gVH0sdGhpcy5zZXRTY2lzc29yVGVzdD1mdW5jdGlvbih0KXtXLnNldFNjaXNzb3JUZXN0KFQ9dCl9LHRoaXMuc2V0T3BhcXVlU29ydD1mdW5jdGlvbih0KXtEPXR9LHRoaXMuc2V0VHJhbnNwYXJlbnRTb3J0PWZ1bmN0aW9uKHQpe0U9dH0sdGhpcy5nZXRDbGVhckNvbG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkocnQuZ2V0Q2xlYXJDb2xvcigpKX0sdGhpcy5zZXRDbGVhckNvbG9yPWZ1bmN0aW9uKCl7cnQuc2V0Q2xlYXJDb2xvci5hcHBseShydCxhcmd1bWVudHMpfSx0aGlzLmdldENsZWFyQWxwaGE9ZnVuY3Rpb24oKXtyZXR1cm4gcnQuZ2V0Q2xlYXJBbHBoYSgpfSx0aGlzLnNldENsZWFyQWxwaGE9ZnVuY3Rpb24oKXtydC5zZXRDbGVhckFscGhhLmFwcGx5KHJ0LGFyZ3VtZW50cyl9LHRoaXMuY2xlYXI9ZnVuY3Rpb24odCxlLG4pe2xldCBvPTA7KHZvaWQgMD09PXR8fHQpJiYob3w9MTYzODQpLCh2b2lkIDA9PT1lfHxlKSYmKG98PTI1NiksKHZvaWQgMD09PW58fG4pJiYob3w9MTAyNCksbXQuY2xlYXIobyl9LHRoaXMuY2xlYXJDb2xvcj1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITAsITEsITEpfSx0aGlzLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCEwLCExKX0sdGhpcy5jbGVhclN0ZW5jaWw9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCExLCEwKX0sdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixodCwhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsYnQsITEpLG50LmRpc3Bvc2UoKSxvdC5kaXNwb3NlKCkscS5kaXNwb3NlKCksWC5kaXNwb3NlKCksSy5kaXNwb3NlKCksJC5kaXNwb3NlKCkscHQuZGlzcG9zZSgpLGd0LmRpc3Bvc2UoKSxndC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLEN0KSxndC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIixNdCksRiYmKEYuZGlzcG9zZSgpLEY9bnVsbCksdnQuc3RvcCgpfSx0aGlzLnJlbmRlckJ1ZmZlckltbWVkaWF0ZT1mdW5jdGlvbih0LGUpe3B0LmluaXRBdHRyaWJ1dGVzKCk7Y29uc3Qgbj1xLmdldCh0KTt0Lmhhc1Bvc2l0aW9ucyYmIW4ucG9zaXRpb24mJihuLnBvc2l0aW9uPW10LmNyZWF0ZUJ1ZmZlcigpKSx0Lmhhc05vcm1hbHMmJiFuLm5vcm1hbCYmKG4ubm9ybWFsPW10LmNyZWF0ZUJ1ZmZlcigpKSx0Lmhhc1V2cyYmIW4udXYmJihuLnV2PW10LmNyZWF0ZUJ1ZmZlcigpKSx0Lmhhc0NvbG9ycyYmIW4uY29sb3ImJihuLmNvbG9yPW10LmNyZWF0ZUJ1ZmZlcigpKTtjb25zdCBvPWUuZ2V0QXR0cmlidXRlcygpO3QuaGFzUG9zaXRpb25zJiYobXQuYmluZEJ1ZmZlcigzNDk2MixuLnBvc2l0aW9uKSxtdC5idWZmZXJEYXRhKDM0OTYyLHQucG9zaXRpb25BcnJheSwzNTA0OCkscHQuZW5hYmxlQXR0cmlidXRlKG8ucG9zaXRpb24pLG10LnZlcnRleEF0dHJpYlBvaW50ZXIoby5wb3NpdGlvbiwzLDUxMjYsITEsMCwwKSksdC5oYXNOb3JtYWxzJiYobXQuYmluZEJ1ZmZlcigzNDk2MixuLm5vcm1hbCksbXQuYnVmZmVyRGF0YSgzNDk2Mix0Lm5vcm1hbEFycmF5LDM1MDQ4KSxwdC5lbmFibGVBdHRyaWJ1dGUoby5ub3JtYWwpLG10LnZlcnRleEF0dHJpYlBvaW50ZXIoby5ub3JtYWwsMyw1MTI2LCExLDAsMCkpLHQuaGFzVXZzJiYobXQuYmluZEJ1ZmZlcigzNDk2MixuLnV2KSxtdC5idWZmZXJEYXRhKDM0OTYyLHQudXZBcnJheSwzNTA0OCkscHQuZW5hYmxlQXR0cmlidXRlKG8udXYpLG10LnZlcnRleEF0dHJpYlBvaW50ZXIoby51diwyLDUxMjYsITEsMCwwKSksdC5oYXNDb2xvcnMmJihtdC5iaW5kQnVmZmVyKDM0OTYyLG4uY29sb3IpLG10LmJ1ZmZlckRhdGEoMzQ5NjIsdC5jb2xvckFycmF5LDM1MDQ4KSxwdC5lbmFibGVBdHRyaWJ1dGUoby5jb2xvciksbXQudmVydGV4QXR0cmliUG9pbnRlcihvLmNvbG9yLDMsNTEyNiwhMSwwLDApKSxwdC5kaXNhYmxlVW51c2VkQXR0cmlidXRlcygpLG10LmRyYXdBcnJheXMoNCwwLHQuY291bnQpLHQuY291bnQ9MH0sdGhpcy5yZW5kZXJCdWZmZXJEaXJlY3Q9ZnVuY3Rpb24odCxlLG4sbyxpLGEpe251bGw9PT1lJiYoZT1WKTtjb25zdCByPWkuaXNNZXNoJiZpLm1hdHJpeFdvcmxkLmRldGVybWluYW50KCk8MCxzPVN0KHQsZSxvLGkpO1cuc2V0TWF0ZXJpYWwobyxyKTtsZXQgbD1uLmluZGV4O2NvbnN0IGM9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGw9PT1sKXtpZih2b2lkIDA9PT1jfHwwPT09Yy5jb3VudClyZXR1cm59ZWxzZSBpZigwPT09bC5jb3VudClyZXR1cm47bGV0IGQscD0xOyEwPT09by53aXJlZnJhbWUmJihsPVEuZ2V0V2lyZWZyYW1lQXR0cmlidXRlKG4pLHA9Miksdm9pZCAwPT09bi5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24mJnZvaWQgMD09PW4ubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbHx8c3QudXBkYXRlKGksbixvLHMpLHB0LnNldHVwKGksbyxzLG4sbCk7bGV0IG09bHQ7bnVsbCE9PWwmJihkPUouZ2V0KGwpLG09Y3QsbS5zZXRJbmRleChkKSk7Y29uc3QgdT1udWxsIT09bD9sLmNvdW50OmMuY291bnQsZj1uLmRyYXdSYW5nZS5zdGFydCpwLGc9bi5kcmF3UmFuZ2UuY291bnQqcCxoPW51bGwhPT1hP2Euc3RhcnQqcDowLGI9bnVsbCE9PWE/YS5jb3VudCpwOjEvMCx5PU1hdGgubWF4KGYsaCksXz1NYXRoLm1pbih1LGYrZyxoK2IpLTEsQz1NYXRoLm1heCgwLF8teSsxKTtpZigwIT09Qyl7aWYoaS5pc01lc2gpITA9PT1vLndpcmVmcmFtZT8oVy5zZXRMaW5lV2lkdGgoby53aXJlZnJhbWVMaW5ld2lkdGgqaigpKSxtLnNldE1vZGUoMSkpOm0uc2V0TW9kZSg0KTtlbHNlIGlmKGkuaXNMaW5lKXtsZXQgdD1vLmxpbmV3aWR0aDt2b2lkIDA9PT10JiYodD0xKSxXLnNldExpbmVXaWR0aCh0KmooKSksbS5zZXRNb2RlKGkuaXNMaW5lU2VnbWVudHM/MTppLmlzTGluZUxvb3A/MjozKX1lbHNlIGkuaXNQb2ludHM/bS5zZXRNb2RlKDApOmkuaXNTcHJpdGUmJm0uc2V0TW9kZSg0KTtpZihpLmlzSW5zdGFuY2VkTWVzaCltLnJlbmRlckluc3RhbmNlcyh5LEMsaS5jb3VudCk7ZWxzZSBpZihuLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpe2NvbnN0IHQ9TWF0aC5taW4obi5pbnN0YW5jZUNvdW50LG4uX21heEluc3RhbmNlQ291bnQpO20ucmVuZGVySW5zdGFuY2VzKHksQyx0KX1lbHNlIG0ucmVuZGVyKHksQyl9fSx0aGlzLmNvbXBpbGU9ZnVuY3Rpb24odCxlKXt1PW90LmdldCh0KSx1LmluaXQoKSxnLnB1c2godSksdC50cmF2ZXJzZVZpc2libGUoKGZ1bmN0aW9uKHQpe3QuaXNMaWdodCYmdC5sYXllcnMudGVzdChlLmxheWVycykmJih1LnB1c2hMaWdodCh0KSx0LmNhc3RTaGFkb3cmJnUucHVzaFNoYWRvdyh0KSl9KSksdS5zZXR1cExpZ2h0cygpLHQudHJhdmVyc2UoKGZ1bmN0aW9uKGUpe2NvbnN0IG49ZS5tYXRlcmlhbDtpZihuKWlmKEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBvPTA7bzxuLmxlbmd0aDtvKyspd3QobltvXSx0LGUpO2Vsc2Ugd3Qobix0LGUpfSkpLGcucG9wKCksdT1udWxsfTtsZXQgX3Q9bnVsbDtmdW5jdGlvbiBDdCgpe3Z0LnN0b3AoKX1mdW5jdGlvbiBNdCgpe3Z0LnN0YXJ0KCl9Y29uc3QgdnQ9bmV3IFJzdDtmdW5jdGlvbiB4dCh0LGUsbixvKXtpZighMT09PXQudmlzaWJsZSlyZXR1cm47aWYodC5sYXllcnMudGVzdChlLmxheWVycykpaWYodC5pc0dyb3VwKW49dC5yZW5kZXJPcmRlcjtlbHNlIGlmKHQuaXNMT0QpITA9PT10LmF1dG9VcGRhdGUmJnQudXBkYXRlKGUpO2Vsc2UgaWYodC5pc0xpZ2h0KXUucHVzaExpZ2h0KHQpLHQuY2FzdFNoYWRvdyYmdS5wdXNoU2hhZG93KHQpO2Vsc2UgaWYodC5pc1Nwcml0ZSl7aWYoIXQuZnJ1c3R1bUN1bGxlZHx8ei5pbnRlcnNlY3RzU3ByaXRlKHQpKXtvJiZCLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoTCk7Y29uc3QgZT0kLnVwZGF0ZSh0KSxpPXQubWF0ZXJpYWw7aS52aXNpYmxlJiZtLnB1c2godCxlLGksbixCLnosbnVsbCl9fWVsc2UgaWYodC5pc0ltbWVkaWF0ZVJlbmRlck9iamVjdClvJiZCLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoTCksbS5wdXNoKHQsbnVsbCx0Lm1hdGVyaWFsLG4sQi56LG51bGwpO2Vsc2UgaWYoKHQuaXNNZXNofHx0LmlzTGluZXx8dC5pc1BvaW50cykmJih0LmlzU2tpbm5lZE1lc2gmJnQuc2tlbGV0b24uZnJhbWUhPT1ZLnJlbmRlci5mcmFtZSYmKHQuc2tlbGV0b24udXBkYXRlKCksdC5za2VsZXRvbi5mcmFtZT1ZLnJlbmRlci5mcmFtZSksIXQuZnJ1c3R1bUN1bGxlZHx8ei5pbnRlcnNlY3RzT2JqZWN0KHQpKSl7byYmQi5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KEwpO2NvbnN0IGU9JC51cGRhdGUodCksaT10Lm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoaSkpe2NvbnN0IG89ZS5ncm91cHM7Zm9yKGxldCBhPTAscj1vLmxlbmd0aDthPHI7YSsrKXtjb25zdCByPW9bYV0scz1pW3IubWF0ZXJpYWxJbmRleF07cyYmcy52aXNpYmxlJiZtLnB1c2godCxlLHMsbixCLnoscil9fWVsc2UgaS52aXNpYmxlJiZtLnB1c2godCxlLGksbixCLnosbnVsbCl9Y29uc3QgaT10LmNoaWxkcmVuO2ZvcihsZXQgdD0wLGE9aS5sZW5ndGg7dDxhO3QrKyl4dChpW3RdLGUsbixvKX1mdW5jdGlvbiBPdCh0LGUsbil7Y29uc3Qgbz0hMD09PWUuaXNTY2VuZT9lLm92ZXJyaWRlTWF0ZXJpYWw6bnVsbDtpZihuLmlzQXJyYXlDYW1lcmEpe2NvbnN0IGk9bi5jYW1lcmFzO2ZvcihsZXQgbj0wLGE9aS5sZW5ndGg7bjxhO24rKyl7Y29uc3QgYT1pW25dO1cudmlld3BvcnQoeC5jb3B5KGEudmlld3BvcnQpKSx1LnNldHVwTGlnaHRzVmlldyhhKTtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspe2NvbnN0IGk9dFtuXSxyPWkub2JqZWN0LHM9aS5nZW9tZXRyeSxsPW51bGw9PT1vP2kubWF0ZXJpYWw6byxjPWkuZ3JvdXA7ci5sYXllcnMudGVzdChhLmxheWVycykmJlB0KHIsZSxhLHMsbCxjKX19fWVsc2UgZm9yKGxldCBpPTAsYT10Lmxlbmd0aDtpPGE7aSsrKXtjb25zdCBhPXRbaV07UHQoYS5vYmplY3QsZSxuLGEuZ2VvbWV0cnksbnVsbD09PW8/YS5tYXRlcmlhbDpvLGEuZ3JvdXApfX1mdW5jdGlvbiBQdCh0LGUsbixvLGksYSl7aWYodC5vbkJlZm9yZVJlbmRlcihoLGUsbixvLGksYSksdC5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhuLm1hdHJpeFdvcmxkSW52ZXJzZSx0Lm1hdHJpeFdvcmxkKSx0Lm5vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgodC5tb2RlbFZpZXdNYXRyaXgpLHQuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3Qpe2NvbnN0IG89U3QobixlLGksdCk7Vy5zZXRNYXRlcmlhbChpKSxwdC5yZXNldCgpLChmdW5jdGlvbiByKHQsZSl7dC5yZW5kZXIoKGZ1bmN0aW9uKHQpe2gucmVuZGVyQnVmZmVySW1tZWRpYXRlKHQsZSl9KSl9KSh0LG8pfWVsc2UhMD09PWkudHJhbnNwYXJlbnQmJjI9PT1pLnNpZGU/KGkuc2lkZT0xLGkubmVlZHNVcGRhdGU9ITAsaC5yZW5kZXJCdWZmZXJEaXJlY3QobixlLG8saSx0LGEpLGkuc2lkZT0wLGkubmVlZHNVcGRhdGU9ITAsaC5yZW5kZXJCdWZmZXJEaXJlY3QobixlLG8saSx0LGEpLGkuc2lkZT0yKTpoLnJlbmRlckJ1ZmZlckRpcmVjdChuLGUsbyxpLHQsYSk7dC5vbkFmdGVyUmVuZGVyKGgsZSxuLG8saSxhKX1mdW5jdGlvbiB3dCh0LGUsbil7ITAhPT1lLmlzU2NlbmUmJihlPVYpO2NvbnN0IG89cS5nZXQodCksaT11LnN0YXRlLmxpZ2h0cyxhPWkuc3RhdGUudmVyc2lvbixyPXR0LmdldFBhcmFtZXRlcnModCxpLnN0YXRlLHUuc3RhdGUuc2hhZG93c0FycmF5LGUsbikscz10dC5nZXRQcm9ncmFtQ2FjaGVLZXkocik7bGV0IGw9by5wcm9ncmFtcztvLmVudmlyb25tZW50PXQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9lLmVudmlyb25tZW50Om51bGwsby5mb2c9ZS5mb2csby5lbnZNYXA9KHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9LOlgpLmdldCh0LmVudk1hcHx8by5lbnZpcm9ubWVudCksdm9pZCAwPT09bCYmKHQuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIseXQpLGw9bmV3IE1hcCxvLnByb2dyYW1zPWwpO2xldCBjPWwuZ2V0KHMpO2lmKHZvaWQgMCE9PWMpe2lmKG8uY3VycmVudFByb2dyYW09PT1jJiZvLmxpZ2h0c1N0YXRlVmVyc2lvbj09PWEpcmV0dXJuIGt0KHQsciksY31lbHNlIHIudW5pZm9ybXM9dHQuZ2V0VW5pZm9ybXModCksdC5vbkJ1aWxkKHIsaCksdC5vbkJlZm9yZUNvbXBpbGUocixoKSxjPXR0LmFjcXVpcmVQcm9ncmFtKHIscyksbC5zZXQocyxjKSxvLnVuaWZvcm1zPXIudW5pZm9ybXM7Y29uc3QgZD1vLnVuaWZvcm1zOyh0LmlzU2hhZGVyTWF0ZXJpYWx8fHQuaXNSYXdTaGFkZXJNYXRlcmlhbCkmJiEwIT09dC5jbGlwcGluZ3x8KGQuY2xpcHBpbmdQbGFuZXM9aXQudW5pZm9ybSksa3QodCxyKSxvLm5lZWRzTGlnaHRzPShmdW5jdGlvbiBwKHQpe3JldHVybiB0LmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8dC5pc01lc2hUb29uTWF0ZXJpYWx8fHQuaXNNZXNoUGhvbmdNYXRlcmlhbHx8dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHx0LmlzU2hhZG93TWF0ZXJpYWx8fHQuaXNTaGFkZXJNYXRlcmlhbCYmITA9PT10LmxpZ2h0c30pKHQpLG8ubGlnaHRzU3RhdGVWZXJzaW9uPWEsby5uZWVkc0xpZ2h0cyYmKGQuYW1iaWVudExpZ2h0Q29sb3IudmFsdWU9aS5zdGF0ZS5hbWJpZW50LGQubGlnaHRQcm9iZS52YWx1ZT1pLnN0YXRlLnByb2JlLGQuZGlyZWN0aW9uYWxMaWdodHMudmFsdWU9aS5zdGF0ZS5kaXJlY3Rpb25hbCxkLmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzLnZhbHVlPWkuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3csZC5zcG90TGlnaHRzLnZhbHVlPWkuc3RhdGUuc3BvdCxkLnNwb3RMaWdodFNoYWRvd3MudmFsdWU9aS5zdGF0ZS5zcG90U2hhZG93LGQucmVjdEFyZWFMaWdodHMudmFsdWU9aS5zdGF0ZS5yZWN0QXJlYSxkLmx0Y18xLnZhbHVlPWkuc3RhdGUucmVjdEFyZWFMVEMxLGQubHRjXzIudmFsdWU9aS5zdGF0ZS5yZWN0QXJlYUxUQzIsZC5wb2ludExpZ2h0cy52YWx1ZT1pLnN0YXRlLnBvaW50LGQucG9pbnRMaWdodFNoYWRvd3MudmFsdWU9aS5zdGF0ZS5wb2ludFNoYWRvdyxkLmhlbWlzcGhlcmVMaWdodHMudmFsdWU9aS5zdGF0ZS5oZW1pLGQuZGlyZWN0aW9uYWxTaGFkb3dNYXAudmFsdWU9aS5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hcCxkLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LnZhbHVlPWkuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsZC5zcG90U2hhZG93TWFwLnZhbHVlPWkuc3RhdGUuc3BvdFNoYWRvd01hcCxkLnNwb3RTaGFkb3dNYXRyaXgudmFsdWU9aS5zdGF0ZS5zcG90U2hhZG93TWF0cml4LGQucG9pbnRTaGFkb3dNYXAudmFsdWU9aS5zdGF0ZS5wb2ludFNoYWRvd01hcCxkLnBvaW50U2hhZG93TWF0cml4LnZhbHVlPWkuc3RhdGUucG9pbnRTaGFkb3dNYXRyaXgpO2NvbnN0IG09Yy5nZXRVbmlmb3JtcygpLGY9d2N0LnNlcVdpdGhWYWx1ZShtLnNlcSxkKTtyZXR1cm4gby5jdXJyZW50UHJvZ3JhbT1jLG8udW5pZm9ybXNMaXN0PWYsY31mdW5jdGlvbiBrdCh0LGUpe2NvbnN0IG49cS5nZXQodCk7bi5vdXRwdXRFbmNvZGluZz1lLm91dHB1dEVuY29kaW5nLG4uaW5zdGFuY2luZz1lLmluc3RhbmNpbmcsbi5za2lubmluZz1lLnNraW5uaW5nLG4ubW9ycGhUYXJnZXRzPWUubW9ycGhUYXJnZXRzLG4ubW9ycGhOb3JtYWxzPWUubW9ycGhOb3JtYWxzLG4ubnVtQ2xpcHBpbmdQbGFuZXM9ZS5udW1DbGlwcGluZ1BsYW5lcyxuLm51bUludGVyc2VjdGlvbj1lLm51bUNsaXBJbnRlcnNlY3Rpb24sbi52ZXJ0ZXhBbHBoYXM9ZS52ZXJ0ZXhBbHBoYXMsbi52ZXJ0ZXhUYW5nZW50cz1lLnZlcnRleFRhbmdlbnRzfWZ1bmN0aW9uIFN0KHQsZSxuLG8peyEwIT09ZS5pc1NjZW5lJiYoZT1WKSxaLnJlc2V0VGV4dHVyZVVuaXRzKCk7Y29uc3QgaT1lLmZvZyxhPW51bGw9PT1DP2gub3V0cHV0RW5jb2Rpbmc6Qy50ZXh0dXJlLmVuY29kaW5nLHI9KG4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9LOlgpLmdldChuLmVudk1hcHx8KG4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9lLmVudmlyb25tZW50Om51bGwpKSxzPSEwPT09bi52ZXJ0ZXhDb2xvcnMmJiEhby5nZW9tZXRyeSYmISFvLmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3ImJjQ9PT1vLmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IuaXRlbVNpemUsbD0hIW8uZ2VvbWV0cnkmJiEhby5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRhbmdlbnQsYz0hIW8uZ2VvbWV0cnkmJiEhby5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sZD0hIW8uZ2VvbWV0cnkmJiEhby5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLHA9cS5nZXQobiksbT11LnN0YXRlLmxpZ2h0czshMCE9PUl8fCEwIT09SCYmdD09PXZ8fGl0LnNldFN0YXRlKG4sdCx0PT09diYmbi5pZD09PU0pO2xldCBmPSExO24udmVyc2lvbj09PXAuX192ZXJzaW9uP3AubmVlZHNMaWdodHMmJnAubGlnaHRzU3RhdGVWZXJzaW9uIT09bS5zdGF0ZS52ZXJzaW9ufHxwLm91dHB1dEVuY29kaW5nIT09YXx8by5pc0luc3RhbmNlZE1lc2gmJiExPT09cC5pbnN0YW5jaW5nP2Y9ITA6by5pc0luc3RhbmNlZE1lc2h8fCEwIT09cC5pbnN0YW5jaW5nP28uaXNTa2lubmVkTWVzaCYmITE9PT1wLnNraW5uaW5nP2Y9ITA6by5pc1NraW5uZWRNZXNofHwhMCE9PXAuc2tpbm5pbmc/cC5lbnZNYXAhPT1yfHxuLmZvZyYmcC5mb2chPT1pP2Y9ITA6dm9pZCAwPT09cC5udW1DbGlwcGluZ1BsYW5lc3x8cC5udW1DbGlwcGluZ1BsYW5lcz09PWl0Lm51bVBsYW5lcyYmcC5udW1JbnRlcnNlY3Rpb249PT1pdC5udW1JbnRlcnNlY3Rpb24/KHAudmVydGV4QWxwaGFzIT09c3x8cC52ZXJ0ZXhUYW5nZW50cyE9PWx8fHAubW9ycGhUYXJnZXRzIT09Y3x8cC5tb3JwaE5vcm1hbHMhPT1kKSYmKGY9ITApOmY9ITA6Zj0hMDpmPSEwOihmPSEwLHAuX192ZXJzaW9uPW4udmVyc2lvbik7bGV0IGc9cC5jdXJyZW50UHJvZ3JhbTshMD09PWYmJihnPXd0KG4sZSxvKSk7bGV0IGI9ITEseT0hMSxfPSExO2NvbnN0IHg9Zy5nZXRVbmlmb3JtcygpLE89cC51bmlmb3JtcztpZihXLnVzZVByb2dyYW0oZy5wcm9ncmFtKSYmKGI9ITAseT0hMCxfPSEwKSxuLmlkIT09TSYmKE09bi5pZCx5PSEwKSxifHx2IT09dCl7aWYoeC5zZXRWYWx1ZShtdCwicHJvamVjdGlvbk1hdHJpeCIsdC5wcm9qZWN0aW9uTWF0cml4KSxHLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJnguc2V0VmFsdWUobXQsImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKHQuZmFyKzEpL01hdGguTE4yKSksdiE9PXQmJih2PXQseT0hMCxfPSEwKSxuLmlzU2hhZGVyTWF0ZXJpYWx8fG4uaXNNZXNoUGhvbmdNYXRlcmlhbHx8bi5pc01lc2hUb29uTWF0ZXJpYWx8fG4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8bi5lbnZNYXApe2NvbnN0IGU9eC5tYXAuY2FtZXJhUG9zaXRpb247dm9pZCAwIT09ZSYmZS5zZXRWYWx1ZShtdCxCLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSl9KG4uaXNNZXNoUGhvbmdNYXRlcmlhbHx8bi5pc01lc2hUb29uTWF0ZXJpYWx8fG4uaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxuLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fG4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8bi5pc1NoYWRlck1hdGVyaWFsKSYmeC5zZXRWYWx1ZShtdCwiaXNPcnRob2dyYXBoaWMiLCEwPT09dC5pc09ydGhvZ3JhcGhpY0NhbWVyYSksKG4uaXNNZXNoUGhvbmdNYXRlcmlhbHx8bi5pc01lc2hUb29uTWF0ZXJpYWx8fG4uaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxuLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fG4uaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8bi5pc1NoYWRlck1hdGVyaWFsfHxuLmlzU2hhZG93TWF0ZXJpYWx8fG8uaXNTa2lubmVkTWVzaCkmJnguc2V0VmFsdWUobXQsInZpZXdNYXRyaXgiLHQubWF0cml4V29ybGRJbnZlcnNlKX1pZihvLmlzU2tpbm5lZE1lc2gpe3guc2V0T3B0aW9uYWwobXQsbywiYmluZE1hdHJpeCIpLHguc2V0T3B0aW9uYWwobXQsbywiYmluZE1hdHJpeEludmVyc2UiKTtjb25zdCB0PW8uc2tlbGV0b247dCYmKEcuZmxvYXRWZXJ0ZXhUZXh0dXJlcz8obnVsbD09PXQuYm9uZVRleHR1cmUmJnQuY29tcHV0ZUJvbmVUZXh0dXJlKCkseC5zZXRWYWx1ZShtdCwiYm9uZVRleHR1cmUiLHQuYm9uZVRleHR1cmUsWikseC5zZXRWYWx1ZShtdCwiYm9uZVRleHR1cmVTaXplIix0LmJvbmVUZXh0dXJlU2l6ZSkpOnguc2V0T3B0aW9uYWwobXQsdCwiYm9uZU1hdHJpY2VzIikpfXJldHVybih5fHxwLnJlY2VpdmVTaGFkb3chPT1vLnJlY2VpdmVTaGFkb3cpJiYocC5yZWNlaXZlU2hhZG93PW8ucmVjZWl2ZVNoYWRvdyx4LnNldFZhbHVlKG10LCJyZWNlaXZlU2hhZG93IixvLnJlY2VpdmVTaGFkb3cpKSx5JiYoeC5zZXRWYWx1ZShtdCwidG9uZU1hcHBpbmdFeHBvc3VyZSIsaC50b25lTWFwcGluZ0V4cG9zdXJlKSxwLm5lZWRzTGlnaHRzJiYoZnVuY3Rpb24gUCh0LGUpe3QuYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9ZSx0LmxpZ2h0UHJvYmUubmVlZHNVcGRhdGU9ZSx0LmRpcmVjdGlvbmFsTGlnaHRzLm5lZWRzVXBkYXRlPWUsdC5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1lLHQucG9pbnRMaWdodHMubmVlZHNVcGRhdGU9ZSx0LnBvaW50TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPWUsdC5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPWUsdC5zcG90TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPWUsdC5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1lLHQuaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1lfSkoTyxfKSxpJiZuLmZvZyYmZXQucmVmcmVzaEZvZ1VuaWZvcm1zKE8saSksZXQucmVmcmVzaE1hdGVyaWFsVW5pZm9ybXMoTyxuLFMsayxGKSx3Y3QudXBsb2FkKG10LHAudW5pZm9ybXNMaXN0LE8sWikpLG4uaXNTaGFkZXJNYXRlcmlhbCYmITA9PT1uLnVuaWZvcm1zTmVlZFVwZGF0ZSYmKHdjdC51cGxvYWQobXQscC51bmlmb3Jtc0xpc3QsTyxaKSxuLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSksbi5pc1Nwcml0ZU1hdGVyaWFsJiZ4LnNldFZhbHVlKG10LCJjZW50ZXIiLG8uY2VudGVyKSx4LnNldFZhbHVlKG10LCJtb2RlbFZpZXdNYXRyaXgiLG8ubW9kZWxWaWV3TWF0cml4KSx4LnNldFZhbHVlKG10LCJub3JtYWxNYXRyaXgiLG8ubm9ybWFsTWF0cml4KSx4LnNldFZhbHVlKG10LCJtb2RlbE1hdHJpeCIsby5tYXRyaXhXb3JsZCksZ312dC5zZXRBbmltYXRpb25Mb29wKChmdW5jdGlvbiBEdCh0KXtfdCYmX3QodCl9KSksInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJnZ0LnNldENvbnRleHQod2luZG93KSx0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24odCl7X3Q9dCxndC5zZXRBbmltYXRpb25Mb29wKHQpLG51bGw9PT10P3Z0LnN0b3AoKTp2dC5zdGFydCgpfSxndC5hZGRFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLEN0KSxndC5hZGRFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIixNdCksdGhpcy5yZW5kZXI9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT1lJiYhMCE9PWUuaXNDYW1lcmEpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXI6IGNhbWVyYSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQ2FtZXJhLiIpO2lmKCEwPT09YilyZXR1cm47ITA9PT10LmF1dG9VcGRhdGUmJnQudXBkYXRlTWF0cml4V29ybGQoKSxudWxsPT09ZS5wYXJlbnQmJmUudXBkYXRlTWF0cml4V29ybGQoKSwhMD09PWd0LmVuYWJsZWQmJiEwPT09Z3QuaXNQcmVzZW50aW5nJiYoITA9PT1ndC5jYW1lcmFBdXRvVXBkYXRlJiZndC51cGRhdGVDYW1lcmEoZSksZT1ndC5nZXRDYW1lcmEoKSksITA9PT10LmlzU2NlbmUmJnQub25CZWZvcmVSZW5kZXIoaCx0LGUsQyksdT1vdC5nZXQodCxnLmxlbmd0aCksdS5pbml0KCksZy5wdXNoKHUpLEwubXVsdGlwbHlNYXRyaWNlcyhlLnByb2plY3Rpb25NYXRyaXgsZS5tYXRyaXhXb3JsZEludmVyc2UpLHouc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoTCksSD10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLEk9aXQuaW5pdCh0aGlzLmNsaXBwaW5nUGxhbmVzLEgsZSksbT1udC5nZXQodCxmLmxlbmd0aCksbS5pbml0KCksZi5wdXNoKG0pLHh0KHQsZSwwLGguc29ydE9iamVjdHMpLG0uZmluaXNoKCksITA9PT1oLnNvcnRPYmplY3RzJiZtLnNvcnQoRCxFKSwhMD09PUkmJml0LmJlZ2luU2hhZG93cygpLGF0LnJlbmRlcih1LnN0YXRlLnNoYWRvd3NBcnJheSx0LGUpLHUuc2V0dXBMaWdodHMoKSx1LnNldHVwTGlnaHRzVmlldyhlKSwhMD09PUkmJml0LmVuZFNoYWRvd3MoKSwhMD09PXRoaXMuaW5mby5hdXRvUmVzZXQmJnRoaXMuaW5mby5yZXNldCgpLHJ0LnJlbmRlcihtLHQpO2NvbnN0IG49bS5vcGFxdWUsbz1tLnRyYW5zbWlzc2l2ZSxpPW0udHJhbnNwYXJlbnQ7bi5sZW5ndGg+MCYmT3Qobix0LGUpLG8ubGVuZ3RoPjAmJihmdW5jdGlvbiBhKHQsZSxuLG8pe251bGw9PT1GJiYoRj1uZXcoITA9PT1zJiYhMD09PUcuaXNXZWJHTDI/c2F0OnJhdCkoMTAyNCwxMDI0LHtnZW5lcmF0ZU1pcG1hcHM6ITAsdHlwZTpudWxsIT09ZHQuY29udmVydCh4aXQpP3hpdDpfaXQsbWluRmlsdGVyOnlpdCxtYWdGaWx0ZXI6aGl0LHdyYXBTOmZpdCx3cmFwVDpmaXR9KSk7Y29uc3QgaT1oLmdldFJlbmRlclRhcmdldCgpO2guc2V0UmVuZGVyVGFyZ2V0KEYpLGguY2xlYXIoKTtjb25zdCBhPWgudG9uZU1hcHBpbmc7aC50b25lTWFwcGluZz0wLE90KHQsbixvKSxoLnRvbmVNYXBwaW5nPWEsWi51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChGKSxaLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChGKSxoLnNldFJlbmRlclRhcmdldChpKSxPdChlLG4sbyl9KShuLG8sdCxlKSxpLmxlbmd0aD4wJiZPdChpLHQsZSksbnVsbCE9PUMmJihaLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KEMpLFoudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKEMpKSwhMD09PXQuaXNTY2VuZSYmdC5vbkFmdGVyUmVuZGVyKGgsdCxlKSxXLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksVy5idWZmZXJzLmRlcHRoLnNldE1hc2soITApLFcuYnVmZmVycy5jb2xvci5zZXRNYXNrKCEwKSxXLnNldFBvbHlnb25PZmZzZXQoITEpLHB0LnJlc2V0RGVmYXVsdFN0YXRlKCksTT0tMSx2PW51bGwsZy5wb3AoKSx1PWcubGVuZ3RoPjA/Z1tnLmxlbmd0aC0xXTpudWxsLGYucG9wKCksbT1mLmxlbmd0aD4wP2ZbZi5sZW5ndGgtMV06bnVsbH0sdGhpcy5nZXRBY3RpdmVDdWJlRmFjZT1mdW5jdGlvbigpe3JldHVybiB5fSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIF99LHRoaXMuZ2V0UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIEN9LHRoaXMuc2V0UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKHQsZT0wLG49MCl7Qz10LHk9ZSxfPW4sdCYmdm9pZCAwPT09cS5nZXQodCkuX193ZWJnbEZyYW1lYnVmZmVyJiZaLnNldHVwUmVuZGVyVGFyZ2V0KHQpO2xldCBvPW51bGwsaT0hMSxhPSExO2lmKHQpe2NvbnN0IG49dC50ZXh0dXJlOyhuLmlzRGF0YVRleHR1cmUzRHx8bi5pc0RhdGFUZXh0dXJlMkRBcnJheSkmJihhPSEwKTtjb25zdCByPXEuZ2V0KHQpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjt0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PyhvPXJbZV0saT0hMCk6bz10LmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD9xLmdldCh0KS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI6cix4LmNvcHkodC52aWV3cG9ydCksTy5jb3B5KHQuc2Npc3NvciksUD10LnNjaXNzb3JUZXN0fWVsc2UgeC5jb3B5KFIpLm11bHRpcGx5U2NhbGFyKFMpLmZsb29yKCksTy5jb3B5KEEpLm11bHRpcGx5U2NhbGFyKFMpLmZsb29yKCksUD1UO2lmKFcuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG8pJiZHLmRyYXdCdWZmZXJzKXtsZXQgZT0hMTtpZih0KWlmKHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyl7Y29uc3Qgbj10LnRleHR1cmU7aWYoTi5sZW5ndGghPT1uLmxlbmd0aHx8MzYwNjQhPT1OWzBdKXtmb3IobGV0IHQ9MCxlPW4ubGVuZ3RoO3Q8ZTt0KyspTlt0XT0zNjA2NCt0O04ubGVuZ3RoPW4ubGVuZ3RoLGU9ITB9fWVsc2UgMT09PU4ubGVuZ3RoJiYzNjA2ND09PU5bMF18fChOWzBdPTM2MDY0LE4ubGVuZ3RoPTEsZT0hMCk7ZWxzZSAxPT09Ti5sZW5ndGgmJjEwMjk9PT1OWzBdfHwoTlswXT0xMDI5LE4ubGVuZ3RoPTEsZT0hMCk7ZSYmKEcuaXNXZWJHTDI/bXQuZHJhd0J1ZmZlcnMoTik6VS5nZXQoIldFQkdMX2RyYXdfYnVmZmVycyIpLmRyYXdCdWZmZXJzV0VCR0woTikpfWlmKFcudmlld3BvcnQoeCksVy5zY2lzc29yKE8pLFcuc2V0U2Npc3NvclRlc3QoUCksaSl7Y29uc3Qgbz1xLmdldCh0LnRleHR1cmUpO210LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDY0LDM0MDY5K2Usby5fX3dlYmdsVGV4dHVyZSxuKX1lbHNlIGlmKGEpe2NvbnN0IG89cS5nZXQodC50ZXh0dXJlKTttdC5mcmFtZWJ1ZmZlclRleHR1cmVMYXllcigzNjE2MCwzNjA2NCxvLl9fd2ViZ2xUZXh0dXJlLG58fDAsZXx8MCl9fSx0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24odCxlLG4sbyxpLGEscil7aWYoIXR8fCF0LmlzV2ViR0xSZW5kZXJUYXJnZXQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO2xldCBzPXEuZ2V0KHQpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZih0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZ2b2lkIDAhPT1yJiYocz1zW3JdKSxzKXtXLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxzKTt0cnl7Y29uc3Qgcj10LnRleHR1cmUscz1yLmZvcm1hdCxsPXIudHlwZTtpZihzIT09d2l0JiZkdC5jb252ZXJ0KHMpIT09bXQuZ2V0UGFyYW1ldGVyKDM1NzM5KSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gUkdCQSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGZvcm1hdC4iKTtjb25zdCBjPWw9PT14aXQmJihVLmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Iil8fEcuaXNXZWJHTDImJlUuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IikpO2lmKCEobD09PV9pdHx8ZHQuY29udmVydChsKT09PW10LmdldFBhcmFtZXRlcigzNTczOCl8fGw9PT12aXQmJihHLmlzV2ViR0wyfHxVLmhhcygiT0VTX3RleHR1cmVfZmxvYXQiKXx8VS5oYXMoIldFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKXx8YykpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLiIpOzM2MDUzPT09bXQuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCk/ZT49MCYmZTw9dC53aWR0aC1vJiZuPj0wJiZuPD10LmhlaWdodC1pJiZtdC5yZWFkUGl4ZWxzKGUsbixvLGksZHQuY29udmVydChzKSxkdC5jb252ZXJ0KGwpLGEpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4iKX1maW5hbGx5e2NvbnN0IHQ9bnVsbCE9PUM/cS5nZXQoQykuX193ZWJnbEZyYW1lYnVmZmVyOm51bGw7Vy5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdCl9fX0sdGhpcy5jb3B5RnJhbWVidWZmZXJUb1RleHR1cmU9ZnVuY3Rpb24odCxlLG49MCl7Y29uc3Qgbz1NYXRoLnBvdygyLC1uKSxpPU1hdGguZmxvb3IoZS5pbWFnZS53aWR0aCpvKSxhPU1hdGguZmxvb3IoZS5pbWFnZS5oZWlnaHQqbyk7bGV0IHI9ZHQuY29udmVydChlLmZvcm1hdCk7Ry5pc1dlYkdMMiYmKDY0MDc9PT1yJiYocj0zMjg0OSksNjQwOD09PXImJihyPTMyODU2KSksWi5zZXRUZXh0dXJlMkQoZSwwKSxtdC5jb3B5VGV4SW1hZ2UyRCgzNTUzLG4scix0LngsdC55LGksYSwwKSxXLnVuYmluZFRleHR1cmUoKX0sdGhpcy5jb3B5VGV4dHVyZVRvVGV4dHVyZT1mdW5jdGlvbih0LGUsbixvPTApe2NvbnN0IGk9ZS5pbWFnZS53aWR0aCxhPWUuaW1hZ2UuaGVpZ2h0LHI9ZHQuY29udmVydChuLmZvcm1hdCkscz1kdC5jb252ZXJ0KG4udHlwZSk7Wi5zZXRUZXh0dXJlMkQobiwwKSxtdC5waXhlbFN0b3JlaSgzNzQ0MCxuLmZsaXBZKSxtdC5waXhlbFN0b3JlaSgzNzQ0MSxuLnByZW11bHRpcGx5QWxwaGEpLG10LnBpeGVsU3RvcmVpKDMzMTcsbi51bnBhY2tBbGlnbm1lbnQpLGUuaXNEYXRhVGV4dHVyZT9tdC50ZXhTdWJJbWFnZTJEKDM1NTMsbyx0LngsdC55LGksYSxyLHMsZS5pbWFnZS5kYXRhKTplLmlzQ29tcHJlc3NlZFRleHR1cmU/bXQuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoMzU1MyxvLHQueCx0LnksZS5taXBtYXBzWzBdLndpZHRoLGUubWlwbWFwc1swXS5oZWlnaHQscixlLm1pcG1hcHNbMF0uZGF0YSk6bXQudGV4U3ViSW1hZ2UyRCgzNTUzLG8sdC54LHQueSxyLHMsZS5pbWFnZSksMD09PW8mJm4uZ2VuZXJhdGVNaXBtYXBzJiZtdC5nZW5lcmF0ZU1pcG1hcCgzNTUzKSxXLnVuYmluZFRleHR1cmUoKX0sdGhpcy5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEPWZ1bmN0aW9uKHQsZSxuLG8saT0wKXtpZihoLmlzV2ViR0wxUmVuZGVyZXIpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7Y29uc3QgYT10Lm1heC54LXQubWluLngrMSxyPXQubWF4LnktdC5taW4ueSsxLHM9dC5tYXguei10Lm1pbi56KzEsbD1kdC5jb252ZXJ0KG8uZm9ybWF0KSxjPWR0LmNvbnZlcnQoby50eXBlKTtsZXQgZDtpZihvLmlzRGF0YVRleHR1cmUzRClaLnNldFRleHR1cmUzRChvLDApLGQ9MzI4Nzk7ZWxzZXtpZighby5pc0RhdGFUZXh0dXJlMkRBcnJheSlyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogb25seSBzdXBwb3J0cyBUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkuIik7Wi5zZXRUZXh0dXJlMkRBcnJheShvLDApLGQ9MzU4NjZ9bXQucGl4ZWxTdG9yZWkoMzc0NDAsby5mbGlwWSksbXQucGl4ZWxTdG9yZWkoMzc0NDEsby5wcmVtdWx0aXBseUFscGhhKSxtdC5waXhlbFN0b3JlaSgzMzE3LG8udW5wYWNrQWxpZ25tZW50KTtjb25zdCBwPW10LmdldFBhcmFtZXRlcigzMzE0KSxtPW10LmdldFBhcmFtZXRlcigzMjg3OCksdT1tdC5nZXRQYXJhbWV0ZXIoMzMxNiksZj1tdC5nZXRQYXJhbWV0ZXIoMzMxNSksZz1tdC5nZXRQYXJhbWV0ZXIoMzI4NzcpLGI9bi5pc0NvbXByZXNzZWRUZXh0dXJlP24ubWlwbWFwc1swXTpuLmltYWdlO210LnBpeGVsU3RvcmVpKDMzMTQsYi53aWR0aCksbXQucGl4ZWxTdG9yZWkoMzI4NzgsYi5oZWlnaHQpLG10LnBpeGVsU3RvcmVpKDMzMTYsdC5taW4ueCksbXQucGl4ZWxTdG9yZWkoMzMxNSx0Lm1pbi55KSxtdC5waXhlbFN0b3JlaSgzMjg3Nyx0Lm1pbi56KSxuLmlzRGF0YVRleHR1cmV8fG4uaXNEYXRhVGV4dHVyZTNEP210LnRleFN1YkltYWdlM0QoZCxpLGUueCxlLnksZS56LGEscixzLGwsYyxiLmRhdGEpOm4uaXNDb21wcmVzc2VkVGV4dHVyZT8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IHVudGVzdGVkIHN1cHBvcnQgZm9yIGNvbXByZXNzZWQgc3JjVGV4dHVyZS4iKSxtdC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChkLGksZS54LGUueSxlLnosYSxyLHMsbCxiLmRhdGEpKTptdC50ZXhTdWJJbWFnZTNEKGQsaSxlLngsZS55LGUueixhLHIscyxsLGMsYiksbXQucGl4ZWxTdG9yZWkoMzMxNCxwKSxtdC5waXhlbFN0b3JlaSgzMjg3OCxtKSxtdC5waXhlbFN0b3JlaSgzMzE2LHUpLG10LnBpeGVsU3RvcmVpKDMzMTUsZiksbXQucGl4ZWxTdG9yZWkoMzI4NzcsZyksMD09PWkmJm8uZ2VuZXJhdGVNaXBtYXBzJiZtdC5nZW5lcmF0ZU1pcG1hcChkKSxXLnVuYmluZFRleHR1cmUoKX0sdGhpcy5pbml0VGV4dHVyZT1mdW5jdGlvbih0KXtaLnNldFRleHR1cmUyRCh0LDApLFcudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXt5PTAsXz0wLEM9bnVsbCxXLnJlc2V0KCkscHQucmVzZXQoKX0sInVuZGVmaW5lZCIhPXR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX18mJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfShjbGFzcyBleHRlbmRzIGJkdHt9KS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDtjbGFzcyB5ZHQgZXh0ZW5kcyBwcnR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCwidW5kZWZpbmVkIiE9dHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksbnVsbCE9PXQuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksbnVsbCE9PXQuZW52aXJvbm1lbnQmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksbnVsbCE9PXQuZm9nJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksbnVsbCE9PXQub3ZlcnJpZGVNYXRlcmlhbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2NvbnN0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBudWxsIT09dGhpcy5mb2cmJihlLm9iamVjdC5mb2c9dGhpcy5mb2cudG9KU09OKCkpLGV9fXlkdC5wcm90b3R5cGUuaXNTY2VuZT0hMDtjbGFzcyBfZHR7Y29uc3RydWN0b3IodCxlKXt0aGlzLmFycmF5PXQsdGhpcy5zdHJpZGU9ZSx0aGlzLmNvdW50PXZvaWQgMCE9PXQ/dC5sZW5ndGgvZTowLHRoaXMudXNhZ2U9Qml0LHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9cWl0KCl9b25VcGxvYWRDYWxsYmFjaygpe31zZXQgbmVlZHNVcGRhdGUodCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK31zZXRVc2FnZSh0KXtyZXR1cm4gdGhpcy51c2FnZT10LHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLmNvdW50PXQuY291bnQsdGhpcy5zdHJpZGU9dC5zdHJpZGUsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQsZSxuKXt0Kj10aGlzLnN0cmlkZSxuKj1lLnN0cmlkZTtmb3IobGV0IG89MCxpPXRoaXMuc3RyaWRlO288aTtvKyspdGhpcy5hcnJheVt0K29dPWUuYXJyYXlbbitvXTtyZXR1cm4gdGhpc31zZXQodCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9Y2xvbmUodCl7dm9pZCAwPT09dC5hcnJheUJ1ZmZlcnMmJih0LmFycmF5QnVmZmVycz17fSksdm9pZCAwPT09dGhpcy5hcnJheS5idWZmZXIuX3V1aWQmJih0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD1xaXQoKSksdm9pZCAwPT09dC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdJiYodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdPXRoaXMuYXJyYXkuc2xpY2UoMCkuYnVmZmVyKTtjb25zdCBlPW5ldyB0aGlzLmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSksbj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihlLHRoaXMuc3RyaWRlKTtyZXR1cm4gbi5zZXRVc2FnZSh0aGlzLnVzYWdlKSxufW9uVXBsb2FkKHQpe3JldHVybiB0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9dCx0aGlzfXRvSlNPTih0KXtyZXR1cm4gdm9pZCAwPT09dC5hcnJheUJ1ZmZlcnMmJih0LmFycmF5QnVmZmVycz17fSksdm9pZCAwPT09dGhpcy5hcnJheS5idWZmZXIuX3V1aWQmJih0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD1xaXQoKSksdm9pZCAwPT09dC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdJiYodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5LmJ1ZmZlcikpKSx7dXVpZDp0aGlzLnV1aWQsYnVmZmVyOnRoaXMuYXJyYXkuYnVmZmVyLl91dWlkLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLHN0cmlkZTp0aGlzLnN0cmlkZX19fV9kdC5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlcj0hMDtjb25zdCBDZHQ9bmV3IGNhdDtjbGFzcyBNZHR7Y29uc3RydWN0b3IodCxlLG4sbz0hMSl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT10LHRoaXMuaXRlbVNpemU9ZSx0aGlzLm9mZnNldD1uLHRoaXMubm9ybWFsaXplZD0hMD09PW99Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuZGF0YS5jb3VudH1nZXQgYXJyYXkoKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5fXNldCBuZWVkc1VwZGF0ZSh0KXt0aGlzLmRhdGEubmVlZHNVcGRhdGU9dH1hcHBseU1hdHJpeDQodCl7Zm9yKGxldCBlPTAsbj10aGlzLmRhdGEuY291bnQ7ZTxuO2UrKylDZHQueD10aGlzLmdldFgoZSksQ2R0Lnk9dGhpcy5nZXRZKGUpLENkdC56PXRoaXMuZ2V0WihlKSxDZHQuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsQ2R0LngsQ2R0LnksQ2R0LnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgZT0wLG49dGhpcy5jb3VudDtlPG47ZSsrKUNkdC54PXRoaXMuZ2V0WChlKSxDZHQueT10aGlzLmdldFkoZSksQ2R0Lno9dGhpcy5nZXRaKGUpLENkdC5hcHBseU5vcm1hbE1hdHJpeCh0KSx0aGlzLnNldFhZWihlLENkdC54LENkdC55LENkdC56KTtyZXR1cm4gdGhpc310cmFuc2Zvcm1EaXJlY3Rpb24odCl7Zm9yKGxldCBlPTAsbj10aGlzLmNvdW50O2U8bjtlKyspQ2R0Lng9dGhpcy5nZXRYKGUpLENkdC55PXRoaXMuZ2V0WShlKSxDZHQuej10aGlzLmdldFooZSksQ2R0LnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLENkdC54LENkdC55LENkdC56KTtyZXR1cm4gdGhpc31zZXRYKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXRdPWUsdGhpc31zZXRZKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV09ZSx0aGlzfXNldFoodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsyXT1lLHRoaXN9c2V0Vyh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzNdPWUsdGhpc31nZXRYKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XX1nZXRZKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdfWdldFoodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl19Z2V0Vyh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXX1zZXRYWSh0LGUsbil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVsodD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQpKzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09bix0aGlzfXNldFhZWih0LGUsbixvKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5Wyh0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCkrMF09ZSx0aGlzLmRhdGEuYXJyYXlbdCsxXT1uLHRoaXMuZGF0YS5hcnJheVt0KzJdPW8sdGhpc31zZXRYWVpXKHQsZSxuLG8saSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVsodD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQpKzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09bix0aGlzLmRhdGEuYXJyYXlbdCsyXT1vLHRoaXMuZGF0YS5hcnJheVt0KzNdPWksdGhpc31jbG9uZSh0KXtpZih2b2lkIDA9PT10KXtjb25zb2xlLmxvZygiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUuY2xvbmUoKTogQ2xvbmluZyBhbiBpbnRlcmxhdmVkIGJ1ZmZlciBhdHRyaWJ1dGUgd2lsbCBkZWludGVybGVhdmUgYnVmZmVyIGRhdGEuIik7Y29uc3QgdD1bXTtmb3IobGV0IGU9MDtlPHRoaXMuY291bnQ7ZSsrKXtjb25zdCBuPWUqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IGU9MDtlPHRoaXMuaXRlbVNpemU7ZSsrKXQucHVzaCh0aGlzLmRhdGEuYXJyYXlbbitlXSl9cmV0dXJuIG5ldyB6cnQobmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodCksdGhpcy5pdGVtU2l6ZSx0aGlzLm5vcm1hbGl6ZWQpfXJldHVybiB2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVycyYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0mJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLmNsb25lKHQpKSxuZXcgTWR0KHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSx0aGlzLml0ZW1TaXplLHRoaXMub2Zmc2V0LHRoaXMubm9ybWFsaXplZCl9dG9KU09OKHQpe2lmKHZvaWQgMD09PXQpe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2NvbnN0IHQ9W107Zm9yKGxldCBlPTA7ZTx0aGlzLmNvdW50O2UrKyl7Y29uc3Qgbj1lKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBlPTA7ZTx0aGlzLml0ZW1TaXplO2UrKyl0LnB1c2godGhpcy5kYXRhLmFycmF5W24rZV0pfXJldHVybntpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OnQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fXJldHVybiB2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVycyYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0mJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLnRvSlNPTih0KSkse2lzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6ITAsaXRlbVNpemU6dGhpcy5pdGVtU2l6ZSxkYXRhOnRoaXMuZGF0YS51dWlkLG9mZnNldDp0aGlzLm9mZnNldCxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19fU1kdC5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT0hMDtjbGFzcyB2ZHQgZXh0ZW5kcyBPcnR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBScnQoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMucm90YXRpb249MCx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLnRyYW5zcGFyZW50PSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24sdGhpc319bGV0IHhkdDt2ZHQucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7Y29uc3QgT2R0PW5ldyBjYXQsUGR0PW5ldyBjYXQsd2R0PW5ldyBjYXQsa2R0PW5ldyBRaXQsU2R0PW5ldyBRaXQsRGR0PW5ldyBCYXQsRWR0PW5ldyBjYXQsUmR0PW5ldyBjYXQsQWR0PW5ldyBjYXQsVGR0PW5ldyBRaXQsTmR0PW5ldyBRaXQsemR0PW5ldyBRaXQ7ZnVuY3Rpb24gSWR0KHQsZSxuLG8saSxhKXtrZHQuc3ViVmVjdG9ycyh0LG4pLmFkZFNjYWxhciguNSkubXVsdGlwbHkobyksdm9pZCAwIT09aT8oU2R0Lng9YSprZHQueC1pKmtkdC55LFNkdC55PWkqa2R0LngrYSprZHQueSk6U2R0LmNvcHkoa2R0KSx0LmNvcHkoZSksdC54Kz1TZHQueCx0LnkrPVNkdC55LHQuYXBwbHlNYXRyaXg0KERkdCl9KGNsYXNzIGV4dGVuZHMgcHJ0e2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLHZvaWQgMD09PXhkdCl7eGR0PW5ldyBxcnQ7Y29uc3QgdD1uZXcgRmxvYXQzMkFycmF5KFstLjUsLS41LDAsMCwwLC41LC0uNSwwLDEsMCwuNSwuNSwwLDEsMSwtLjUsLjUsMCwwLDFdKSxlPW5ldyBfZHQodCw1KTt4ZHQuc2V0SW5kZXgoWzAsMSwyLDAsMiwzXSkseGR0LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBNZHQoZSwzLDAsITEpKSx4ZHQuc2V0QXR0cmlidXRlKCJ1diIsbmV3IE1kdChlLDIsMywhMSkpfXRoaXMuZ2VvbWV0cnk9eGR0LHRoaXMubWF0ZXJpYWw9dm9pZCAwIT09dD90Om5ldyB2ZHQsdGhpcy5jZW50ZXI9bmV3IFFpdCguNSwuNSl9cmF5Y2FzdCh0LGUpe251bGw9PT10LmNhbWVyYSYmY29uc29sZS5lcnJvcignVEhSRUUuU3ByaXRlOiAiUmF5Y2FzdGVyLmNhbWVyYSIgbmVlZHMgdG8gYmUgc2V0IGluIG9yZGVyIHRvIHJheWNhc3QgYWdhaW5zdCBzcHJpdGVzLicpLFBkdC5zZXRGcm9tTWF0cml4U2NhbGUodGhpcy5tYXRyaXhXb3JsZCksRGR0LmNvcHkodC5jYW1lcmEubWF0cml4V29ybGQpLHRoaXMubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXModC5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLHRoaXMubWF0cml4V29ybGQpLHdkdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tb2RlbFZpZXdNYXRyaXgpLHQuY2FtZXJhLmlzUGVyc3BlY3RpdmVDYW1lcmEmJiExPT09dGhpcy5tYXRlcmlhbC5zaXplQXR0ZW51YXRpb24mJlBkdC5tdWx0aXBseVNjYWxhcigtd2R0LnopO2NvbnN0IG49dGhpcy5tYXRlcmlhbC5yb3RhdGlvbjtsZXQgbyxpOzAhPT1uJiYoaT1NYXRoLmNvcyhuKSxvPU1hdGguc2luKG4pKTtjb25zdCBhPXRoaXMuY2VudGVyO0lkdChFZHQuc2V0KC0uNSwtLjUsMCksd2R0LGEsUGR0LG8saSksSWR0KFJkdC5zZXQoLjUsLS41LDApLHdkdCxhLFBkdCxvLGkpLElkdChBZHQuc2V0KC41LC41LDApLHdkdCxhLFBkdCxvLGkpLFRkdC5zZXQoMCwwKSxOZHQuc2V0KDEsMCksemR0LnNldCgxLDEpO2xldCByPXQucmF5LmludGVyc2VjdFRyaWFuZ2xlKEVkdCxSZHQsQWR0LCExLE9kdCk7aWYobnVsbD09PXImJihJZHQoUmR0LnNldCgtLjUsLjUsMCksd2R0LGEsUGR0LG8saSksTmR0LnNldCgwLDEpLHI9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoRWR0LEFkdCxSZHQsITEsT2R0KSxudWxsPT09cikpcmV0dXJuO2NvbnN0IHM9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oT2R0KTtzPHQubmVhcnx8cz50LmZhcnx8ZS5wdXNoKHtkaXN0YW5jZTpzLHBvaW50Ok9kdC5jbG9uZSgpLHV2OnZydC5nZXRVVihPZHQsRWR0LFJkdCxBZHQsVGR0LE5kdCx6ZHQsbmV3IFFpdCksZmFjZTpudWxsLG9iamVjdDp0aGlzfSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx2b2lkIDAhPT10LmNlbnRlciYmdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXN9fSkucHJvdG90eXBlLmlzU3ByaXRlPSEwO2NvbnN0IEhkdD1uZXcgY2F0LEZkdD1uZXcgYWF0LExkdD1uZXcgYWF0LEJkdD1uZXcgY2F0LFZkdD1uZXcgQmF0O2NsYXNzIGpkdCBleHRlbmRzIHBzdHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJTa2lubmVkTWVzaCIsdGhpcy5iaW5kTW9kZT0iYXR0YWNoZWQiLHRoaXMuYmluZE1hdHJpeD1uZXcgQmF0LHRoaXMuYmluZE1hdHJpeEludmVyc2U9bmV3IEJhdH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYmluZE1vZGU9dC5iaW5kTW9kZSx0aGlzLmJpbmRNYXRyaXguY29weSh0LmJpbmRNYXRyaXgpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0LmJpbmRNYXRyaXhJbnZlcnNlKSx0aGlzLnNrZWxldG9uPXQuc2tlbGV0b24sdGhpc31iaW5kKHQsZSl7dGhpcy5za2VsZXRvbj10LHZvaWQgMD09PWUmJih0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKSx0aGlzLnNrZWxldG9uLmNhbGN1bGF0ZUludmVyc2VzKCksZT10aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmJpbmRNYXRyaXguY29weShlKSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkoZSkuaW52ZXJ0KCl9cG9zZSgpe3RoaXMuc2tlbGV0b24ucG9zZSgpfW5vcm1hbGl6ZVNraW5XZWlnaHRzKCl7Y29uc3QgdD1uZXcgYWF0LGU9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7Zm9yKGxldCBuPTAsbz1lLmNvdW50O248bztuKyspe3QueD1lLmdldFgobiksdC55PWUuZ2V0WShuKSx0Lno9ZS5nZXRaKG4pLHQudz1lLmdldFcobik7Y29uc3Qgbz0xL3QubWFuaGF0dGFuTGVuZ3RoKCk7byE9PTEvMD90Lm11bHRpcGx5U2NhbGFyKG8pOnQuc2V0KDEsMCwwLDApLGUuc2V0WFlaVyhuLHQueCx0LnksdC56LHQudyl9fXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLCJhdHRhY2hlZCI9PT10aGlzLmJpbmRNb2RlP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKToiZGV0YWNoZWQiPT09dGhpcy5iaW5kTW9kZT90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5iaW5kTWF0cml4KS5pbnZlcnQoKTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9Ym9uZVRyYW5zZm9ybSh0LGUpe2NvbnN0IG49dGhpcy5za2VsZXRvbixvPXRoaXMuZ2VvbWV0cnk7RmR0LmZyb21CdWZmZXJBdHRyaWJ1dGUoby5hdHRyaWJ1dGVzLnNraW5JbmRleCx0KSxMZHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLmF0dHJpYnV0ZXMuc2tpbldlaWdodCx0KSxIZHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLmF0dHJpYnV0ZXMucG9zaXRpb24sdCkuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeCksZS5zZXQoMCwwLDApO2ZvcihsZXQgdD0wO3Q8NDt0Kyspe2NvbnN0IG89TGR0LmdldENvbXBvbmVudCh0KTtpZigwIT09byl7Y29uc3QgaT1GZHQuZ2V0Q29tcG9uZW50KHQpO1ZkdC5tdWx0aXBseU1hdHJpY2VzKG4uYm9uZXNbaV0ubWF0cml4V29ybGQsbi5ib25lSW52ZXJzZXNbaV0pLGUuYWRkU2NhbGVkVmVjdG9yKEJkdC5jb3B5KEhkdCkuYXBwbHlNYXRyaXg0KFZkdCksbyl9fXJldHVybiBlLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXhJbnZlcnNlKX19amR0LnByb3RvdHlwZS5pc1NraW5uZWRNZXNoPSEwLGNsYXNzIGV4dGVuZHMgcHJ0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkJvbmUifX0ucHJvdG90eXBlLmlzQm9uZT0hMCxjbGFzcyBleHRlbmRzIG9hdHtjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLG49MSxvLGksYSxyLHMsbD0xMDAzLGM9MTAwMyxkLHApe3N1cGVyKG51bGwsYSxyLHMsbCxjLG8saSxkLHApLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDpufSx0aGlzLm1hZ0ZpbHRlcj1sLHRoaXMubWluRmlsdGVyPWMsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xLHRoaXMubmVlZHNVcGRhdGU9ITB9fS5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZT0hMDtjb25zdCBVZHQ9bmV3IEJhdCxHZHQ9bmV3IEJhdCxXZHQ9W10sWWR0PW5ldyBwc3Q7KGNsYXNzIGV4dGVuZHMgcHN0e2NvbnN0cnVjdG9yKHQsZSxuKXtzdXBlcih0LGUpLHRoaXMuaW5zdGFuY2VNYXRyaXg9bmV3IHpydChuZXcgRmxvYXQzMkFycmF5KDE2Km4pLDE2KSx0aGlzLmluc3RhbmNlQ29sb3I9bnVsbCx0aGlzLmNvdW50PW4sdGhpcy5mcnVzdHVtQ3VsbGVkPSExfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5pbnN0YW5jZU1hdHJpeC5jb3B5KHQuaW5zdGFuY2VNYXRyaXgpLG51bGwhPT10Lmluc3RhbmNlQ29sb3ImJih0aGlzLmluc3RhbmNlQ29sb3I9dC5pbnN0YW5jZUNvbG9yLmNsb25lKCkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzfWdldENvbG9yQXQodCxlKXtlLmZyb21BcnJheSh0aGlzLmluc3RhbmNlQ29sb3IuYXJyYXksMyp0KX1nZXRNYXRyaXhBdCh0LGUpe2UuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VNYXRyaXguYXJyYXksMTYqdCl9cmF5Y2FzdCh0LGUpe2NvbnN0IG49dGhpcy5tYXRyaXhXb3JsZCxvPXRoaXMuY291bnQ7aWYoWWR0Lmdlb21ldHJ5PXRoaXMuZ2VvbWV0cnksWWR0Lm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsdm9pZCAwIT09WWR0Lm1hdGVyaWFsKWZvcihsZXQgaT0wO2k8bztpKyspe3RoaXMuZ2V0TWF0cml4QXQoaSxVZHQpLEdkdC5tdWx0aXBseU1hdHJpY2VzKG4sVWR0KSxZZHQubWF0cml4V29ybGQ9R2R0LFlkdC5yYXljYXN0KHQsV2R0KTtmb3IobGV0IHQ9MCxuPVdkdC5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj1XZHRbdF07bi5pbnN0YW5jZUlkPWksbi5vYmplY3Q9dGhpcyxlLnB1c2gobil9V2R0Lmxlbmd0aD0wfX1zZXRDb2xvckF0KHQsZSl7bnVsbD09PXRoaXMuaW5zdGFuY2VDb2xvciYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcgenJ0KG5ldyBGbG9hdDMyQXJyYXkoMyp0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50KSwzKSksZS50b0FycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSwzKnQpfXNldE1hdHJpeEF0KHQsZSl7ZS50b0FycmF5KHRoaXMuaW5zdGFuY2VNYXRyaXguYXJyYXksMTYqdCl9dXBkYXRlTW9ycGhUYXJnZXRzKCl7fWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fSkucHJvdG90eXBlLmlzSW5zdGFuY2VkTWVzaD0hMDtjbGFzcyBxZHQgZXh0ZW5kcyBPcnR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBScnQoMTY3NzcyMTUpLHRoaXMubGluZXdpZHRoPTEsdGhpcy5saW5lY2FwPSJyb3VuZCIsdGhpcy5saW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubGluZXdpZHRoPXQubGluZXdpZHRoLHRoaXMubGluZWNhcD10LmxpbmVjYXAsdGhpcy5saW5lam9pbj10LmxpbmVqb2luLHRoaXN9fXFkdC5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbD0hMDtjb25zdCBaZHQ9bmV3IGNhdCxYZHQ9bmV3IGNhdCxLZHQ9bmV3IEJhdCxKZHQ9bmV3IExhdCxRZHQ9bmV3IFJhdDtjbGFzcyAkZHQgZXh0ZW5kcyBwcnR7Y29uc3RydWN0b3IodD1uZXcgcXJ0LGU9bmV3IHFkdCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmUiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31jb21wdXRlTGluZURpc3RhbmNlcygpe2NvbnN0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYobnVsbD09PXQuaW5kZXgpe2NvbnN0IGU9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLG49WzBdO2ZvcihsZXQgdD0xLG89ZS5jb3VudDt0PG87dCsrKVpkdC5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdC0xKSxYZHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQpLG5bdF09blt0LTFdLG5bdF0rPVpkdC5kaXN0YW5jZVRvKFhkdCk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IEZydChuLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSB0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfXJheWNhc3QodCxlKXtjb25zdCBuPXRoaXMuZ2VvbWV0cnksbz10aGlzLm1hdHJpeFdvcmxkLGk9dC5wYXJhbXMuTGluZS50aHJlc2hvbGQsYT1uLmRyYXdSYW5nZTtpZihudWxsPT09bi5ib3VuZGluZ1NwaGVyZSYmbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxRZHQuY29weShuLmJvdW5kaW5nU3BoZXJlKSxRZHQuYXBwbHlNYXRyaXg0KG8pLFFkdC5yYWRpdXMrPWksITE9PT10LnJheS5pbnRlcnNlY3RzU3BoZXJlKFFkdCkpcmV0dXJuO0tkdC5jb3B5KG8pLmludmVydCgpLEpkdC5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoS2R0KTtjb25zdCByPWkvKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMykscz1yKnIsbD1uZXcgY2F0LGM9bmV3IGNhdCxkPW5ldyBjYXQscD1uZXcgY2F0LG09dGhpcy5pc0xpbmVTZWdtZW50cz8yOjE7aWYobi5pc0J1ZmZlckdlb21ldHJ5KXtjb25zdCBvPW4uaW5kZXgsaT1uLmF0dHJpYnV0ZXMucG9zaXRpb247aWYobnVsbCE9PW8pZm9yKGxldCBuPU1hdGgubWF4KDAsYS5zdGFydCkscj1NYXRoLm1pbihvLmNvdW50LGEuc3RhcnQrYS5jb3VudCktMTtuPHI7bis9bSl7Y29uc3QgYT1vLmdldFgobikscj1vLmdldFgobisxKTtpZihsLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxhKSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxyKSxKZHQuZGlzdGFuY2VTcVRvU2VnbWVudChsLGMscCxkKT5zKWNvbnRpbnVlO3AuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2NvbnN0IG09dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8ocCk7bTx0Lm5lYXJ8fG0+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6bSxwb2ludDpkLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4Om4sZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSl9ZWxzZSBmb3IobGV0IG49TWF0aC5tYXgoMCxhLnN0YXJ0KSxvPU1hdGgubWluKGkuY291bnQsYS5zdGFydCthLmNvdW50KS0xO248bztuKz1tKXtpZihsLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxuKSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxuKzEpLEpkdC5kaXN0YW5jZVNxVG9TZWdtZW50KGwsYyxwLGQpPnMpY29udGludWU7cC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7Y29uc3Qgbz10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhwKTtvPHQubmVhcnx8bz50LmZhcnx8ZS5wdXNoKHtkaXN0YW5jZTpvLHBvaW50OmQuY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6bixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX19ZWxzZSBuLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7Y29uc3QgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7Y29uc3QgZT10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKGUpO2lmKG4ubGVuZ3RoPjApe2NvbnN0IHQ9ZVtuWzBdXTtpZih2b2lkIDAhPT10KXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dFtlXS5uYW1lfHxTdHJpbmcoZSk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtuXT1lfX19fWVsc2V7Y29uc3QgZT10Lm1vcnBoVGFyZ2V0czt2b2lkIDAhPT1lJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19JGR0LnByb3RvdHlwZS5pc0xpbmU9ITA7Y29uc3QgdHB0PW5ldyBjYXQsZXB0PW5ldyBjYXQ7Y2xhc3MgbnB0IGV4dGVuZHMgJGR0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkxpbmVTZWdtZW50cyJ9Y29tcHV0ZUxpbmVEaXN0YW5jZXMoKXtjb25zdCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKG51bGw9PT10LmluZGV4KXtjb25zdCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixuPVtdO2ZvcihsZXQgdD0wLG89ZS5jb3VudDt0PG87dCs9Mil0cHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQpLGVwdC5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCsxKSxuW3RdPTA9PT10PzA6blt0LTFdLG5bdCsxXT1uW3RdK3RwdC5kaXN0YW5jZVRvKGVwdCk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IEZydChuLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc319bnB0LnByb3RvdHlwZS5pc0xpbmVTZWdtZW50cz0hMCxjbGFzcyBleHRlbmRzICRkdHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJMaW5lTG9vcCJ9fS5wcm90b3R5cGUuaXNMaW5lTG9vcD0hMDtjbGFzcyBvcHQgZXh0ZW5kcyBPcnR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvaW50c01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBScnQoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuc2l6ZT0xLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fW9wdC5wcm90b3R5cGUuaXNQb2ludHNNYXRlcmlhbD0hMDtjb25zdCBpcHQ9bmV3IEJhdCxhcHQ9bmV3IExhdCxycHQ9bmV3IFJhdCxzcHQ9bmV3IGNhdDtmdW5jdGlvbiBscHQodCxlLG4sbyxpLGEscil7Y29uc3Qgcz1hcHQuZGlzdGFuY2VTcVRvUG9pbnQodCk7aWYoczxuKXtjb25zdCBuPW5ldyBjYXQ7YXB0LmNsb3Nlc3RQb2ludFRvUG9pbnQodCxuKSxuLmFwcGx5TWF0cml4NChvKTtjb25zdCBsPWkucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKG4pO2lmKGw8aS5uZWFyfHxsPmkuZmFyKXJldHVybjthLnB1c2goe2Rpc3RhbmNlOmwsZGlzdGFuY2VUb1JheTpNYXRoLnNxcnQocykscG9pbnQ6bixpbmRleDplLGZhY2U6bnVsbCxvYmplY3Q6cn0pfX0oY2xhc3MgZXh0ZW5kcyBwcnR7Y29uc3RydWN0b3IodD1uZXcgcXJ0LGU9bmV3IG9wdCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvaW50cyIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXJheWNhc3QodCxlKXtjb25zdCBuPXRoaXMuZ2VvbWV0cnksbz10aGlzLm1hdHJpeFdvcmxkLGk9dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxhPW4uZHJhd1JhbmdlO2lmKG51bGw9PT1uLmJvdW5kaW5nU3BoZXJlJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHJwdC5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLHJwdC5hcHBseU1hdHJpeDQobykscnB0LnJhZGl1cys9aSwhMT09PXQucmF5LmludGVyc2VjdHNTcGhlcmUocnB0KSlyZXR1cm47aXB0LmNvcHkobykuaW52ZXJ0KCksYXB0LmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChpcHQpO2NvbnN0IHI9aS8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxzPXIqcjtpZihuLmlzQnVmZmVyR2VvbWV0cnkpe2NvbnN0IGk9bi5pbmRleCxyPW4uYXR0cmlidXRlcy5wb3NpdGlvbjtpZihudWxsIT09aSlmb3IobGV0IG49TWF0aC5tYXgoMCxhLnN0YXJ0KSxsPU1hdGgubWluKGkuY291bnQsYS5zdGFydCthLmNvdW50KTtuPGw7bisrKXtjb25zdCBhPWkuZ2V0WChuKTtzcHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGEpLGxwdChzcHQsYSxzLG8sdCxlLHRoaXMpfWVsc2UgZm9yKGxldCBuPU1hdGgubWF4KDAsYS5zdGFydCksaT1NYXRoLm1pbihyLmNvdW50LGEuc3RhcnQrYS5jb3VudCk7bjxpO24rKylzcHQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLG4pLGxwdChzcHQsbixzLG8sdCxlLHRoaXMpfWVsc2UgY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2NvbnN0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2NvbnN0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhlKTtpZihuLmxlbmd0aD4wKXtjb25zdCB0PWVbblswXV07aWYodm9pZCAwIT09dCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXRbZV0ubmFtZXx8U3RyaW5nKGUpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbbl09ZX19fX1lbHNle2NvbnN0IGU9dC5tb3JwaFRhcmdldHM7dm9pZCAwIT09ZSYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19KS5wcm90b3R5cGUuaXNQb2ludHM9ITAsY2xhc3MgZXh0ZW5kcyBvYXR7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzLGwpe3N1cGVyKHQsZSxuLG8saSxhLHIscyxsKSx0aGlzLmZvcm1hdD12b2lkIDAhPT1yP3I6UGl0LHRoaXMubWluRmlsdGVyPXZvaWQgMCE9PWE/YTpiaXQsdGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09aT9pOmJpdCx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMTtjb25zdCBjPXRoaXM7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdCYmdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKChmdW5jdGlvbiBlKCl7Yy5uZWVkc1VwZGF0ZT0hMCx0LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soZSl9KSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5pbWFnZSkuY29weSh0aGlzKX11cGRhdGUoKXtjb25zdCB0PXRoaXMuaW1hZ2U7MD09InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdCYmdC5yZWFkeVN0YXRlPj10LkhBVkVfQ1VSUkVOVF9EQVRBJiYodGhpcy5uZWVkc1VwZGF0ZT0hMCl9fS5wcm90b3R5cGUuaXNWaWRlb1RleHR1cmU9ITAsY2xhc3MgZXh0ZW5kcyBvYXR7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscixzLGwsYyxkLHApe3N1cGVyKG51bGwsYSxyLHMsbCxjLG8saSxkLHApLHRoaXMuaW1hZ2U9e3dpZHRoOmUsaGVpZ2h0Om59LHRoaXMubWlwbWFwcz10LHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fS5wcm90b3R5cGUuaXNDb21wcmVzc2VkVGV4dHVyZT0hMCxjbGFzcyBleHRlbmRzIG9hdHtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSxyLHMsbCl7c3VwZXIodCxlLG4sbyxpLGEscixzLGwpLHRoaXMubmVlZHNVcGRhdGU9ITB9fS5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwLGNsYXNzIGV4dGVuZHMgb2F0e2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyxsLGMpe2lmKChjPXZvaWQgMCE9PWM/YzpraXQpIT09a2l0JiZjIT09U2l0KXRocm93IG5ldyBFcnJvcigiRGVwdGhUZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5EZXB0aFN0ZW5jaWxGb3JtYXQiKTt2b2lkIDA9PT1uJiZjPT09a2l0JiYobj1DaXQpLHZvaWQgMD09PW4mJmM9PT1TaXQmJihuPU9pdCksc3VwZXIobnVsbCxvLGksYSxyLHMsYyxuLGwpLHRoaXMuaW1hZ2U9e3dpZHRoOnQsaGVpZ2h0OmV9LHRoaXMubWFnRmlsdGVyPXZvaWQgMCE9PXI/cjpoaXQsdGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09cz9zOmhpdCx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX0ucHJvdG90eXBlLmlzRGVwdGhUZXh0dXJlPSEwO2NsYXNzIGNwdCBleHRlbmRzIHFydHtjb25zdHJ1Y3Rvcih0PTEsZT04LG49MCxvPTIqTWF0aC5QSSl7c3VwZXIoKSx0aGlzLnR5cGU9IkNpcmNsZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHNlZ21lbnRzOmUsdGhldGFTdGFydDpuLHRoZXRhTGVuZ3RoOm99LGU9TWF0aC5tYXgoMyxlKTtjb25zdCBpPVtdLGE9W10scj1bXSxzPVtdLGw9bmV3IGNhdCxjPW5ldyBRaXQ7YS5wdXNoKDAsMCwwKSxyLnB1c2goMCwwLDEpLHMucHVzaCguNSwuNSk7Zm9yKGxldCBpPTAsZD0zO2k8PWU7aSsrLGQrPTMpe2NvbnN0IHA9bitpL2UqbztsLng9dCpNYXRoLmNvcyhwKSxsLnk9dCpNYXRoLnNpbihwKSxhLnB1c2gobC54LGwueSxsLnopLHIucHVzaCgwLDAsMSksYy54PShhW2RdL3QrMSkvMixjLnk9KGFbZCsxXS90KzEpLzIscy5wdXNoKGMueCxjLnkpfWZvcihsZXQgdD0xO3Q8PWU7dCsrKWkucHVzaCh0LHQrMSwwKTt0aGlzLnNldEluZGV4KGkpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEZydChhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgRnJ0KHIsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEZydChzLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBjcHQodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fW5ldyBjYXQsbmV3IGNhdCxuZXcgY2F0LG5ldyB2cnQ7Y2xhc3MgZHB0e2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPSJDdXJ2ZSIsdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwfWdldFBvaW50KCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3VydmU6IC5nZXRQb2ludCgpIG5vdCBpbXBsZW1lbnRlZC4iKSxudWxsfWdldFBvaW50QXQodCxlKXtjb25zdCBuPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0UG9pbnQobixlKX1nZXRQb2ludHModD01KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKWUucHVzaCh0aGlzLmdldFBvaW50KG4vdCkpO3JldHVybiBlfWdldFNwYWNlZFBvaW50cyh0PTUpe2NvbnN0IGU9W107Zm9yKGxldCBuPTA7bjw9dDtuKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnRBdChuL3QpKTtyZXR1cm4gZX1nZXRMZW5ndGgoKXtjb25zdCB0PXRoaXMuZ2V0TGVuZ3RocygpO3JldHVybiB0W3QubGVuZ3RoLTFdfWdldExlbmd0aHModD10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyl7aWYodGhpcy5jYWNoZUFyY0xlbmd0aHMmJnRoaXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aD09PXQrMSYmIXRoaXMubmVlZHNVcGRhdGUpcmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzO3RoaXMubmVlZHNVcGRhdGU9ITE7Y29uc3QgZT1bXTtsZXQgbixvPXRoaXMuZ2V0UG9pbnQoMCksaT0wO2UucHVzaCgwKTtmb3IobGV0IGE9MTthPD10O2ErKyluPXRoaXMuZ2V0UG9pbnQoYS90KSxpKz1uLmRpc3RhbmNlVG8obyksZS5wdXNoKGkpLG89bjtyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM9ZSxlfXVwZGF0ZUFyY0xlbmd0aHMoKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuZ2V0TGVuZ3RocygpfWdldFV0b1RtYXBwaW5nKHQsZSl7Y29uc3Qgbj10aGlzLmdldExlbmd0aHMoKTtsZXQgbz0wO2NvbnN0IGk9bi5sZW5ndGg7bGV0IGE7YT1lfHx0Km5baS0xXTtsZXQgcixzPTAsbD1pLTE7Zm9yKDtzPD1sOylpZihvPU1hdGguZmxvb3IocysobC1zKS8yKSxyPW5bb10tYSxyPDApcz1vKzE7ZWxzZXtpZighKHI+MCkpe2w9bzticmVha31sPW8tMX1pZihvPWwsbltvXT09PWEpcmV0dXJuIG8vKGktMSk7Y29uc3QgYz1uW29dO3JldHVybihvKyhhLWMpLyhuW28rMV0tYykpLyhpLTEpfWdldFRhbmdlbnQodCxlKXtjb25zdCBuPTFlLTQ7bGV0IG89dC1uLGk9dCtuO288MCYmKG89MCksaT4xJiYoaT0xKTtjb25zdCBhPXRoaXMuZ2V0UG9pbnQobykscj10aGlzLmdldFBvaW50KGkpLHM9ZXx8KGEuaXNWZWN0b3IyP25ldyBRaXQ6bmV3IGNhdCk7cmV0dXJuIHMuY29weShyKS5zdWIoYSkubm9ybWFsaXplKCksc31nZXRUYW5nZW50QXQodCxlKXtjb25zdCBuPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0VGFuZ2VudChuLGUpfWNvbXB1dGVGcmVuZXRGcmFtZXModCxlKXtjb25zdCBuPW5ldyBjYXQsbz1bXSxpPVtdLGE9W10scj1uZXcgY2F0LHM9bmV3IEJhdDtmb3IobGV0IGU9MDtlPD10O2UrKylvW2VdPXRoaXMuZ2V0VGFuZ2VudEF0KGUvdCxuZXcgY2F0KSxvW2VdLm5vcm1hbGl6ZSgpO2lbMF09bmV3IGNhdCxhWzBdPW5ldyBjYXQ7bGV0IGw9TnVtYmVyLk1BWF9WQUxVRTtjb25zdCBjPU1hdGguYWJzKG9bMF0ueCksZD1NYXRoLmFicyhvWzBdLnkpLHA9TWF0aC5hYnMob1swXS56KTtjPD1sJiYobD1jLG4uc2V0KDEsMCwwKSksZDw9bCYmKGw9ZCxuLnNldCgwLDEsMCkpLHA8PWwmJm4uc2V0KDAsMCwxKSxyLmNyb3NzVmVjdG9ycyhvWzBdLG4pLm5vcm1hbGl6ZSgpLGlbMF0uY3Jvc3NWZWN0b3JzKG9bMF0sciksYVswXS5jcm9zc1ZlY3RvcnMob1swXSxpWzBdKTtmb3IobGV0IGU9MTtlPD10O2UrKyl7aWYoaVtlXT1pW2UtMV0uY2xvbmUoKSxhW2VdPWFbZS0xXS5jbG9uZSgpLHIuY3Jvc3NWZWN0b3JzKG9bZS0xXSxvW2VdKSxyLmxlbmd0aCgpPk51bWJlci5FUFNJTE9OKXtyLm5vcm1hbGl6ZSgpO2NvbnN0IHQ9TWF0aC5hY29zKFppdChvW2UtMV0uZG90KG9bZV0pLC0xLDEpKTtpW2VdLmFwcGx5TWF0cml4NChzLm1ha2VSb3RhdGlvbkF4aXMocix0KSl9YVtlXS5jcm9zc1ZlY3RvcnMob1tlXSxpW2VdKX1pZighMD09PWUpe2xldCBlPU1hdGguYWNvcyhaaXQoaVswXS5kb3QoaVt0XSksLTEsMSkpO2UvPXQsb1swXS5kb3Qoci5jcm9zc1ZlY3RvcnMoaVswXSxpW3RdKSk+MCYmKGU9LWUpO2ZvcihsZXQgbj0xO248PXQ7bisrKWlbbl0uYXBwbHlNYXRyaXg0KHMubWFrZVJvdGF0aW9uQXhpcyhvW25dLGUqbikpLGFbbl0uY3Jvc3NWZWN0b3JzKG9bbl0saVtuXSl9cmV0dXJue3RhbmdlbnRzOm8sbm9ybWFsczppLGJpbm9ybWFsczphfX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfXRvSlNPTigpe2NvbnN0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJDdXJ2ZSIsZ2VuZXJhdG9yOiJDdXJ2ZS50b0pTT04ifX07cmV0dXJuIHQuYXJjTGVuZ3RoRGl2aXNpb25zPXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zLHQudHlwZT10aGlzLnR5cGUsdH1mcm9tSlNPTih0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc319Y2xhc3MgcHB0IGV4dGVuZHMgZHB0e2NvbnN0cnVjdG9yKHQ9MCxlPTAsbj0xLG89MSxpPTAsYT0yKk1hdGguUEkscj0hMSxzPTApe3N1cGVyKCksdGhpcy50eXBlPSJFbGxpcHNlQ3VydmUiLHRoaXMuYVg9dCx0aGlzLmFZPWUsdGhpcy54UmFkaXVzPW4sdGhpcy55UmFkaXVzPW8sdGhpcy5hU3RhcnRBbmdsZT1pLHRoaXMuYUVuZEFuZ2xlPWEsdGhpcy5hQ2xvY2t3aXNlPXIsdGhpcy5hUm90YXRpb249c31nZXRQb2ludCh0LGUpe2NvbnN0IG49ZXx8bmV3IFFpdCxvPTIqTWF0aC5QSTtsZXQgaT10aGlzLmFFbmRBbmdsZS10aGlzLmFTdGFydEFuZ2xlO2NvbnN0IGE9TWF0aC5hYnMoaSk8TnVtYmVyLkVQU0lMT047Zm9yKDtpPDA7KWkrPW87Zm9yKDtpPm87KWktPW87aTxOdW1iZXIuRVBTSUxPTiYmKGk9YT8wOm8pLCEwIT09dGhpcy5hQ2xvY2t3aXNlfHxhfHwoaT09PW8/aT0tbzppLT1vKTtjb25zdCByPXRoaXMuYVN0YXJ0QW5nbGUrdCppO2xldCBzPXRoaXMuYVgrdGhpcy54UmFkaXVzKk1hdGguY29zKHIpLGw9dGhpcy5hWSt0aGlzLnlSYWRpdXMqTWF0aC5zaW4ocik7aWYoMCE9PXRoaXMuYVJvdGF0aW9uKXtjb25zdCB0PU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxlPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxuPXMtdGhpcy5hWCxvPWwtdGhpcy5hWTtzPW4qdC1vKmUrdGhpcy5hWCxsPW4qZStvKnQrdGhpcy5hWX1yZXR1cm4gbi5zZXQocyxsKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9dG9KU09OKCl7Y29uc3QgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5hWD10aGlzLmFYLHQuYVk9dGhpcy5hWSx0LnhSYWRpdXM9dGhpcy54UmFkaXVzLHQueVJhZGl1cz10aGlzLnlSYWRpdXMsdC5hU3RhcnRBbmdsZT10aGlzLmFTdGFydEFuZ2xlLHQuYUVuZEFuZ2xlPXRoaXMuYUVuZEFuZ2xlLHQuYUNsb2Nrd2lzZT10aGlzLmFDbG9ja3dpc2UsdC5hUm90YXRpb249dGhpcy5hUm90YXRpb24sdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc319cHB0LnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDtjbGFzcyBtcHQgZXh0ZW5kcyBwcHR7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEpe3N1cGVyKHQsZSxuLG4sbyxpLGEpLHRoaXMudHlwZT0iQXJjQ3VydmUifX1mdW5jdGlvbiB1cHQoKXtsZXQgdD0wLGU9MCxuPTAsbz0wO2Z1bmN0aW9uIGkoaSxhLHIscyl7dD1pLGU9cixuPS0zKmkrMyphLTIqci1zLG89MippLTIqYStyK3N9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKHQsZSxuLG8sYSl7aShlLG4sYSoobi10KSxhKihvLWUpKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKHQsZSxuLG8sYSxyLHMpe2xldCBsPShlLXQpL2EtKG4tdCkvKGErcikrKG4tZSkvcixjPShuLWUpL3ItKG8tZSkvKHIrcykrKG8tbikvcztsKj1yLGMqPXIsaShlLG4sbCxjKX0sY2FsYzpmdW5jdGlvbihpKXtjb25zdCBhPWkqaTtyZXR1cm4gdCtlKmkrbiphK28qKGEqaSl9fX1tcHQucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7Y29uc3QgZnB0PW5ldyBjYXQsZ3B0PW5ldyB1cHQsaHB0PW5ldyB1cHQsYnB0PW5ldyB1cHQ7Y2xhc3MgeXB0IGV4dGVuZHMgZHB0e2NvbnN0cnVjdG9yKHQ9W10sZT0hMSxuPSJjZW50cmlwZXRhbCIsbz0uNSl7c3VwZXIoKSx0aGlzLnR5cGU9IkNhdG11bGxSb21DdXJ2ZTMiLHRoaXMucG9pbnRzPXQsdGhpcy5jbG9zZWQ9ZSx0aGlzLmN1cnZlVHlwZT1uLHRoaXMudGVuc2lvbj1vfWdldFBvaW50KHQsZT1uZXcgY2F0KXtjb25zdCBuPWUsbz10aGlzLnBvaW50cyxpPW8ubGVuZ3RoLGE9KGktKHRoaXMuY2xvc2VkPzA6MSkpKnQ7bGV0IHIscyxsPU1hdGguZmxvb3IoYSksYz1hLWw7dGhpcy5jbG9zZWQ/bCs9bD4wPzA6KE1hdGguZmxvb3IoTWF0aC5hYnMobCkvaSkrMSkqaTowPT09YyYmbD09PWktMSYmKGw9aS0yLGM9MSksdGhpcy5jbG9zZWR8fGw+MD9yPW9bKGwtMSklaV06KGZwdC5zdWJWZWN0b3JzKG9bMF0sb1sxXSkuYWRkKG9bMF0pLHI9ZnB0KTtjb25zdCBkPW9bbCVpXSxwPW9bKGwrMSklaV07aWYodGhpcy5jbG9zZWR8fGwrMjxpP3M9b1sobCsyKSVpXTooZnB0LnN1YlZlY3RvcnMob1tpLTFdLG9baS0yXSkuYWRkKG9baS0xXSkscz1mcHQpLCJjZW50cmlwZXRhbCI9PT10aGlzLmN1cnZlVHlwZXx8ImNob3JkYWwiPT09dGhpcy5jdXJ2ZVR5cGUpe2NvbnN0IHQ9ImNob3JkYWwiPT09dGhpcy5jdXJ2ZVR5cGU/LjU6LjI1O2xldCBlPU1hdGgucG93KHIuZGlzdGFuY2VUb1NxdWFyZWQoZCksdCksbj1NYXRoLnBvdyhkLmRpc3RhbmNlVG9TcXVhcmVkKHApLHQpLG89TWF0aC5wb3cocC5kaXN0YW5jZVRvU3F1YXJlZChzKSx0KTtuPDFlLTQmJihuPTEpLGU8MWUtNCYmKGU9biksbzwxZS00JiYobz1uKSxncHQuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKHIueCxkLngscC54LHMueCxlLG4sbyksaHB0LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShyLnksZC55LHAueSxzLnksZSxuLG8pLGJwdC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oci56LGQueixwLnoscy56LGUsbixvKX1lbHNlImNhdG11bGxyb20iPT09dGhpcy5jdXJ2ZVR5cGUmJihncHQuaW5pdENhdG11bGxSb20oci54LGQueCxwLngscy54LHRoaXMudGVuc2lvbiksaHB0LmluaXRDYXRtdWxsUm9tKHIueSxkLnkscC55LHMueSx0aGlzLnRlbnNpb24pLGJwdC5pbml0Q2F0bXVsbFJvbShyLnosZC56LHAueixzLnosdGhpcy50ZW5zaW9uKSk7cmV0dXJuIG4uc2V0KGdwdC5jYWxjKGMpLGhwdC5jYWxjKGMpLGJwdC5jYWxjKGMpKSxufWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxuPXQucG9pbnRzLmxlbmd0aDtlPG47ZSsrKXRoaXMucG9pbnRzLnB1c2godC5wb2ludHNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc310b0pTT04oKXtjb25zdCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgZT0wLG49dGhpcy5wb2ludHMubGVuZ3RoO2U8bjtlKyspdC5wb2ludHMucHVzaCh0aGlzLnBvaW50c1tlXS50b0FycmF5KCkpO3JldHVybiB0LmNsb3NlZD10aGlzLmNsb3NlZCx0LmN1cnZlVHlwZT10aGlzLmN1cnZlVHlwZSx0LnRlbnNpb249dGhpcy50ZW5zaW9uLHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsbj10LnBvaW50cy5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgbj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKChuZXcgY2F0KS5mcm9tQXJyYXkobikpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9fWZ1bmN0aW9uIF9wdCh0LGUsbixvLGkpe2NvbnN0IGE9LjUqKG8tZSkscj0uNSooaS1uKSxzPXQqdDtyZXR1cm4oMipuLTIqbythK3IpKih0KnMpKygtMypuKzMqby0yKmEtcikqcythKnQrbn1mdW5jdGlvbiBDcHQodCxlLG4sbyl7cmV0dXJuKGZ1bmN0aW9uIGkodCxlKXtjb25zdCBuPTEtdDtyZXR1cm4gbipuKmV9KSh0LGUpKyhmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIDIqKDEtdCkqdCplfSkodCxuKSsoZnVuY3Rpb24gcih0LGUpe3JldHVybiB0KnQqZX0pKHQsbyl9ZnVuY3Rpb24gTXB0KHQsZSxuLG8saSl7cmV0dXJuKGZ1bmN0aW9uIGEodCxlKXtjb25zdCBuPTEtdDtyZXR1cm4gbipuKm4qZX0pKHQsZSkrKGZ1bmN0aW9uIHIodCxlKXtjb25zdCBuPTEtdDtyZXR1cm4gMypuKm4qdCplfSkodCxuKSsoZnVuY3Rpb24gcyh0LGUpe3JldHVybiAzKigxLXQpKnQqdCplfSkodCxvKSsoZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0KnQqdCplfSkodCxpKX15cHQucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDtjbGFzcyB2cHQgZXh0ZW5kcyBkcHR7Y29uc3RydWN0b3IodD1uZXcgUWl0LGU9bmV3IFFpdCxuPW5ldyBRaXQsbz1uZXcgUWl0KXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPW4sdGhpcy52Mz1vfWdldFBvaW50KHQsZT1uZXcgUWl0KXtjb25zdCBuPWUsbz10aGlzLnYwLGk9dGhpcy52MSxhPXRoaXMudjIscj10aGlzLnYzO3JldHVybiBuLnNldChNcHQodCxvLngsaS54LGEueCxyLngpLE1wdCh0LG8ueSxpLnksYS55LHIueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtjb25zdCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fXZwdC5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlPSEwO2NsYXNzIHhwdCBleHRlbmRzIGRwdHtjb25zdHJ1Y3Rvcih0PW5ldyBjYXQsZT1uZXcgY2F0LG49bmV3IGNhdCxvPW5ldyBjYXQpe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPW4sdGhpcy52Mz1vfWdldFBvaW50KHQsZT1uZXcgY2F0KXtjb25zdCBuPWUsbz10aGlzLnYwLGk9dGhpcy52MSxhPXRoaXMudjIscj10aGlzLnYzO3JldHVybiBuLnNldChNcHQodCxvLngsaS54LGEueCxyLngpLE1wdCh0LG8ueSxpLnksYS55LHIueSksTXB0KHQsby56LGkueixhLnosci56KSksbn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2NvbnN0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319eHB0LnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmUzPSEwO2NsYXNzIE9wdCBleHRlbmRzIGRwdHtjb25zdHJ1Y3Rvcih0PW5ldyBRaXQsZT1uZXcgUWl0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlIix0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgUWl0KXtjb25zdCBuPWU7cmV0dXJuIDE9PT10P24uY29weSh0aGlzLnYyKToobi5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSxuLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnYxKSksbn1nZXRQb2ludEF0KHQsZSl7cmV0dXJuIHRoaXMuZ2V0UG9pbnQodCxlKX1nZXRUYW5nZW50KHQsZSl7Y29uc3Qgbj1lfHxuZXcgUWl0O3JldHVybiBuLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLm5vcm1hbGl6ZSgpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7Y29uc3QgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fU9wdC5wcm90b3R5cGUuaXNMaW5lQ3VydmU9ITA7Y2xhc3MgUHB0IGV4dGVuZHMgZHB0e2NvbnN0cnVjdG9yKHQ9bmV3IFFpdCxlPW5ldyBRaXQsbj1uZXcgUWl0KXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1ufWdldFBvaW50KHQsZT1uZXcgUWl0KXtjb25zdCBuPWUsbz10aGlzLnYwLGk9dGhpcy52MSxhPXRoaXMudjI7cmV0dXJuIG4uc2V0KENwdCh0LG8ueCxpLngsYS54KSxDcHQodCxvLnksaS55LGEueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2NvbnN0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fVBwdC5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZT0hMDtjbGFzcyB3cHQgZXh0ZW5kcyBkcHR7Y29uc3RydWN0b3IodD1uZXcgY2F0LGU9bmV3IGNhdCxuPW5ldyBjYXQpe3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1ufWdldFBvaW50KHQsZT1uZXcgY2F0KXtjb25zdCBuPWUsbz10aGlzLnYwLGk9dGhpcy52MSxhPXRoaXMudjI7cmV0dXJuIG4uc2V0KENwdCh0LG8ueCxpLngsYS54KSxDcHQodCxvLnksaS55LGEueSksQ3B0KHQsby56LGkueixhLnopKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtjb25zdCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX13cHQucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzPSEwO2NsYXNzIGtwdCBleHRlbmRzIGRwdHtjb25zdHJ1Y3Rvcih0PVtdKXtzdXBlcigpLHRoaXMudHlwZT0iU3BsaW5lQ3VydmUiLHRoaXMucG9pbnRzPXR9Z2V0UG9pbnQodCxlPW5ldyBRaXQpe2NvbnN0IG49ZSxvPXRoaXMucG9pbnRzLGk9KG8ubGVuZ3RoLTEpKnQsYT1NYXRoLmZsb29yKGkpLHI9aS1hLHM9b1swPT09YT9hOmEtMV0sbD1vW2FdLGM9b1thPm8ubGVuZ3RoLTI/by5sZW5ndGgtMTphKzFdLGQ9b1thPm8ubGVuZ3RoLTM/by5sZW5ndGgtMTphKzJdO3JldHVybiBuLnNldChfcHQocixzLngsbC54LGMueCxkLngpLF9wdChyLHMueSxsLnksYy55LGQueSkpLG59Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLG49dC5wb2ludHMubGVuZ3RoO2U8bjtlKyspdGhpcy5wb2ludHMucHVzaCh0LnBvaW50c1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc310b0pTT04oKXtjb25zdCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgZT0wLG49dGhpcy5wb2ludHMubGVuZ3RoO2U8bjtlKyspdC5wb2ludHMucHVzaCh0aGlzLnBvaW50c1tlXS50b0FycmF5KCkpO3JldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLG49dC5wb2ludHMubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaCgobmV3IFFpdCkuZnJvbUFycmF5KG4pKX1yZXR1cm4gdGhpc319a3B0LnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3ZhciBTcHQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6bXB0LENhdG11bGxSb21DdXJ2ZTM6eXB0LEN1YmljQmV6aWVyQ3VydmU6dnB0LEN1YmljQmV6aWVyQ3VydmUzOnhwdCxFbGxpcHNlQ3VydmU6cHB0LExpbmVDdXJ2ZTpPcHQsTGluZUN1cnZlMzpjbGFzcyBleHRlbmRzIGRwdHtjb25zdHJ1Y3Rvcih0PW5ldyBjYXQsZT1uZXcgY2F0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlMyIsdGhpcy5pc0xpbmVDdXJ2ZTM9ITAsdGhpcy52MT10LHRoaXMudjI9ZX1nZXRQb2ludCh0LGU9bmV3IGNhdCl7Y29uc3Qgbj1lO3JldHVybiAxPT09dD9uLmNvcHkodGhpcy52Mik6KG4uY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksbi5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLG59Z2V0UG9pbnRBdCh0LGUpe3JldHVybiB0aGlzLmdldFBvaW50KHQsZSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7Y29uc3QgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTpQcHQsUXVhZHJhdGljQmV6aWVyQ3VydmUzOndwdCxTcGxpbmVDdXJ2ZTprcHR9KTtmdW5jdGlvbiBEcHQodCxlLG4sbyxpKXtsZXQgYSxyO2lmKGk9PT0oZnVuY3Rpb24gcyh0LGUsbixvKXtsZXQgaT0wO2ZvcihsZXQgYT1lLHI9bi1vO2E8bjthKz1vKWkrPSh0W3JdLXRbYV0pKih0W2ErMV0rdFtyKzFdKSxyPWE7cmV0dXJuIGl9KSh0LGUsbixvKT4wKWZvcihhPWU7YTxuO2ErPW8pcj1LcHQoYSx0W2FdLHRbYSsxXSxyKTtlbHNlIGZvcihhPW4tbzthPj1lO2EtPW8pcj1LcHQoYSx0W2FdLHRbYSsxXSxyKTtyZXR1cm4gciYmR3B0KHIsci5uZXh0KSYmKEpwdChyKSxyPXIubmV4dCkscn1mdW5jdGlvbiBFcHQodCxlKXtpZighdClyZXR1cm4gdDtlfHwoZT10KTtsZXQgbixvPXQ7ZG97aWYobj0hMSxvLnN0ZWluZXJ8fCFHcHQobyxvLm5leHQpJiYwIT09VXB0KG8ucHJldixvLG8ubmV4dCkpbz1vLm5leHQ7ZWxzZXtpZihKcHQobyksbz1lPW8ucHJldixvPT09by5uZXh0KWJyZWFrO249ITB9fXdoaWxlKG58fG8hPT1lKTtyZXR1cm4gZX1mdW5jdGlvbiBScHQodCxlLG4sbyxpLGEscil7aWYoIXQpcmV0dXJuOyFyJiZhJiYoZnVuY3Rpb24gcyh0LGUsbixvKXtsZXQgaT10O2Rve251bGw9PT1pLnomJihpLno9THB0KGkueCxpLnksZSxuLG8pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dH13aGlsZShpIT09dCk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCwoZnVuY3Rpb24gYSh0KXtsZXQgZSxuLG8saSxhLHIscyxsLGM9MTtkb3tmb3Iobj10LHQ9bnVsbCxhPW51bGwscj0wO247KXtmb3IocisrLG89bixzPTAsZT0wO2U8YyYmKHMrKyxvPW8ubmV4dFosbyk7ZSsrKTtmb3IobD1jO3M+MHx8bD4wJiZvOykwIT09cyYmKDA9PT1sfHwhb3x8bi56PD1vLnopPyhpPW4sbj1uLm5leHRaLHMtLSk6KGk9byxvPW8ubmV4dFosbC0tKSxhP2EubmV4dFo9aTp0PWksaS5wcmV2Wj1hLGE9aTtuPW99YS5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUocj4xKX0pKGkpfSkodCxvLGksYSk7bGV0IGwsYyxkPXQ7Zm9yKDt0LnByZXYhPT10Lm5leHQ7KWlmKGw9dC5wcmV2LGM9dC5uZXh0LGE/VHB0KHQsbyxpLGEpOkFwdCh0KSllLnB1c2gobC5pL24pLGUucHVzaCh0LmkvbiksZS5wdXNoKGMuaS9uKSxKcHQodCksdD1jLm5leHQsZD1jLm5leHQ7ZWxzZSBpZigodD1jKT09PWQpe3I/MT09PXI/UnB0KHQ9TnB0KEVwdCh0KSxlLG4pLGUsbixvLGksYSwyKToyPT09ciYmenB0KHQsZSxuLG8saSxhKTpScHQoRXB0KHQpLGUsbixvLGksYSwxKTticmVha319ZnVuY3Rpb24gQXB0KHQpe2NvbnN0IGU9dC5wcmV2LG49dCxvPXQubmV4dDtpZihVcHQoZSxuLG8pPj0wKXJldHVybiExO2xldCBpPXQubmV4dC5uZXh0O2Zvcig7aSE9PXQucHJldjspe2lmKFZwdChlLngsZS55LG4ueCxuLnksby54LG8ueSxpLngsaS55KSYmVXB0KGkucHJldixpLGkubmV4dCk+PTApcmV0dXJuITE7aT1pLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gVHB0KHQsZSxuLG8pe2NvbnN0IGk9dC5wcmV2LGE9dCxyPXQubmV4dDtpZihVcHQoaSxhLHIpPj0wKXJldHVybiExO2NvbnN0IHM9aS54PmEueD9pLng+ci54P2kueDpyLng6YS54PnIueD9hLng6ci54LGw9aS55PmEueT9pLnk+ci55P2kueTpyLnk6YS55PnIueT9hLnk6ci55LGM9THB0KGkueDxhLng/aS54PHIueD9pLng6ci54OmEueDxyLng/YS54OnIueCxpLnk8YS55P2kueTxyLnk/aS55OnIueTphLnk8ci55P2EueTpyLnksZSxuLG8pLGQ9THB0KHMsbCxlLG4sbyk7bGV0IHA9dC5wcmV2WixtPXQubmV4dFo7Zm9yKDtwJiZwLno+PWMmJm0mJm0uejw9ZDspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJlZwdChpLngsaS55LGEueCxhLnksci54LHIueSxwLngscC55KSYmVXB0KHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7aWYocD1wLnByZXZaLG0hPT10LnByZXYmJm0hPT10Lm5leHQmJlZwdChpLngsaS55LGEueCxhLnksci54LHIueSxtLngsbS55KSYmVXB0KG0ucHJldixtLG0ubmV4dCk+PTApcmV0dXJuITE7bT1tLm5leHRafWZvcig7cCYmcC56Pj1jOyl7aWYocCE9PXQucHJldiYmcCE9PXQubmV4dCYmVnB0KGkueCxpLnksYS54LGEueSxyLngsci55LHAueCxwLnkpJiZVcHQocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtwPXAucHJldlp9Zm9yKDttJiZtLno8PWQ7KXtpZihtIT09dC5wcmV2JiZtIT09dC5uZXh0JiZWcHQoaS54LGkueSxhLngsYS55LHIueCxyLnksbS54LG0ueSkmJlVwdChtLnByZXYsbSxtLm5leHQpPj0wKXJldHVybiExO209bS5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiBOcHQodCxlLG4pe2xldCBvPXQ7ZG97Y29uc3QgaT1vLnByZXYsYT1vLm5leHQubmV4dDshR3B0KGksYSkmJldwdChpLG8sby5uZXh0LGEpJiZacHQoaSxhKSYmWnB0KGEsaSkmJihlLnB1c2goaS5pL24pLGUucHVzaChvLmkvbiksZS5wdXNoKGEuaS9uKSxKcHQobyksSnB0KG8ubmV4dCksbz10PWEpLG89by5uZXh0fXdoaWxlKG8hPT10KTtyZXR1cm4gRXB0KG8pfWZ1bmN0aW9uIHpwdCh0LGUsbixvLGksYSl7bGV0IHI9dDtkb3tsZXQgdD1yLm5leHQubmV4dDtmb3IoO3QhPT1yLnByZXY7KXtpZihyLmkhPT10LmkmJmpwdChyLHQpKXtsZXQgcz1YcHQocix0KTtyZXR1cm4gcj1FcHQocixyLm5leHQpLHM9RXB0KHMscy5uZXh0KSxScHQocixlLG4sbyxpLGEpLHZvaWQgUnB0KHMsZSxuLG8saSxhKX10PXQubmV4dH1yPXIubmV4dH13aGlsZShyIT09dCl9ZnVuY3Rpb24gSXB0KHQsZSl7cmV0dXJuIHQueC1lLnh9ZnVuY3Rpb24gSHB0KHQsZSl7aWYoZT0oZnVuY3Rpb24gbih0LGUpe2xldCBuPWU7Y29uc3Qgbz10LngsaT10Lnk7bGV0IGEscj0tMS8wO2Rve2lmKGk8PW4ueSYmaT49bi5uZXh0LnkmJm4ubmV4dC55IT09bi55KXtjb25zdCB0PW4ueCsoaS1uLnkpKihuLm5leHQueC1uLngpLyhuLm5leHQueS1uLnkpO2lmKHQ8PW8mJnQ+cil7aWYocj10LHQ9PT1vKXtpZihpPT09bi55KXJldHVybiBuO2lmKGk9PT1uLm5leHQueSlyZXR1cm4gbi5uZXh0fWE9bi54PG4ubmV4dC54P246bi5uZXh0fX1uPW4ubmV4dH13aGlsZShuIT09ZSk7aWYoIWEpcmV0dXJuIG51bGw7aWYobz09PXIpcmV0dXJuIGE7Y29uc3Qgcz1hLGw9YS54LGM9YS55O2xldCBkLHA9MS8wO249YTtkb3tvPj1uLngmJm4ueD49bCYmbyE9PW4ueCYmVnB0KGk8Yz9vOnIsaSxsLGMsaTxjP3I6byxpLG4ueCxuLnkpJiYoZD1NYXRoLmFicyhpLW4ueSkvKG8tbi54KSxacHQobix0KSYmKGQ8cHx8ZD09PXAmJihuLng+YS54fHxuLng9PT1hLngmJkZwdChhLG4pKSkmJihhPW4scD1kKSksbj1uLm5leHR9d2hpbGUobiE9PXMpO3JldHVybiBhfSkodCxlKSl7Y29uc3Qgbj1YcHQoZSx0KTtFcHQoZSxlLm5leHQpLEVwdChuLG4ubmV4dCl9fWZ1bmN0aW9uIEZwdCh0LGUpe3JldHVybiBVcHQodC5wcmV2LHQsZS5wcmV2KTwwJiZVcHQoZS5uZXh0LHQsdC5uZXh0KTwwfWZ1bmN0aW9uIExwdCh0LGUsbixvLGkpe3JldHVybih0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQ9MzI3NjcqKHQtbikqaSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGU9MzI3NjcqKGUtbykqaSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSl8ZTw8MSkpPDwxfWZ1bmN0aW9uIEJwdCh0KXtsZXQgZT10LG49dDtkb3soZS54PG4ueHx8ZS54PT09bi54JiZlLnk8bi55KSYmKG49ZSksZT1lLm5leHR9d2hpbGUoZSE9PXQpO3JldHVybiBufWZ1bmN0aW9uIFZwdCh0LGUsbixvLGksYSxyLHMpe3JldHVybihpLXIpKihlLXMpLSh0LXIpKihhLXMpPj0wJiYodC1yKSooby1zKS0obi1yKSooZS1zKT49MCYmKG4tcikqKGEtcyktKGktcikqKG8tcyk+PTB9ZnVuY3Rpb24ganB0KHQsZSl7cmV0dXJuIHQubmV4dC5pIT09ZS5pJiZ0LnByZXYuaSE9PWUuaSYmIShmdW5jdGlvbiBuKHQsZSl7bGV0IG49dDtkb3tpZihuLmkhPT10LmkmJm4ubmV4dC5pIT09dC5pJiZuLmkhPT1lLmkmJm4ubmV4dC5pIT09ZS5pJiZXcHQobixuLm5leHQsdCxlKSlyZXR1cm4hMDtuPW4ubmV4dH13aGlsZShuIT09dCk7cmV0dXJuITF9KSh0LGUpJiYoWnB0KHQsZSkmJlpwdChlLHQpJiYoZnVuY3Rpb24gbyh0LGUpe2xldCBuPXQsbz0hMTtjb25zdCBpPSh0LngrZS54KS8yLGE9KHQueStlLnkpLzI7ZG97bi55PmEhPW4ubmV4dC55PmEmJm4ubmV4dC55IT09bi55JiZpPChuLm5leHQueC1uLngpKihhLW4ueSkvKG4ubmV4dC55LW4ueSkrbi54JiYobz0hbyksbj1uLm5leHR9d2hpbGUobiE9PXQpO3JldHVybiBvfSkodCxlKSYmKFVwdCh0LnByZXYsdCxlLnByZXYpfHxVcHQodCxlLnByZXYsZSkpfHxHcHQodCxlKSYmVXB0KHQucHJldix0LHQubmV4dCk+MCYmVXB0KGUucHJldixlLGUubmV4dCk+MCl9ZnVuY3Rpb24gVXB0KHQsZSxuKXtyZXR1cm4oZS55LXQueSkqKG4ueC1lLngpLShlLngtdC54KSoobi55LWUueSl9ZnVuY3Rpb24gR3B0KHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIFdwdCh0LGUsbixvKXtjb25zdCBpPXFwdChVcHQodCxlLG4pKSxhPXFwdChVcHQodCxlLG8pKSxyPXFwdChVcHQobixvLHQpKSxzPXFwdChVcHQobixvLGUpKTtyZXR1cm4gaSE9PWEmJnIhPT1zfHwhKDAhPT1pfHwhWXB0KHQsbixlKSl8fCEoMCE9PWF8fCFZcHQodCxvLGUpKXx8ISgwIT09cnx8IVlwdChuLHQsbykpfHwhKDAhPT1zfHwhWXB0KG4sZSxvKSl9ZnVuY3Rpb24gWXB0KHQsZSxuKXtyZXR1cm4gZS54PD1NYXRoLm1heCh0Lngsbi54KSYmZS54Pj1NYXRoLm1pbih0Lngsbi54KSYmZS55PD1NYXRoLm1heCh0Lnksbi55KSYmZS55Pj1NYXRoLm1pbih0Lnksbi55KX1mdW5jdGlvbiBxcHQodCl7cmV0dXJuIHQ+MD8xOnQ8MD8tMTowfWZ1bmN0aW9uIFpwdCh0LGUpe3JldHVybiBVcHQodC5wcmV2LHQsdC5uZXh0KTwwP1VwdCh0LGUsdC5uZXh0KT49MCYmVXB0KHQsdC5wcmV2LGUpPj0wOlVwdCh0LGUsdC5wcmV2KTwwfHxVcHQodCx0Lm5leHQsZSk8MH1mdW5jdGlvbiBYcHQodCxlKXtjb25zdCBuPW5ldyBRcHQodC5pLHQueCx0LnkpLG89bmV3IFFwdChlLmksZS54LGUueSksaT10Lm5leHQsYT1lLnByZXY7cmV0dXJuIHQubmV4dD1lLGUucHJldj10LG4ubmV4dD1pLGkucHJldj1uLG8ubmV4dD1uLG4ucHJldj1vLGEubmV4dD1vLG8ucHJldj1hLG99ZnVuY3Rpb24gS3B0KHQsZSxuLG8pe2NvbnN0IGk9bmV3IFFwdCh0LGUsbik7cmV0dXJuIG8/KGkubmV4dD1vLm5leHQsaS5wcmV2PW8sby5uZXh0LnByZXY9aSxvLm5leHQ9aSk6KGkucHJldj1pLGkubmV4dD1pKSxpfWZ1bmN0aW9uIEpwdCh0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIFFwdCh0LGUsbil7dGhpcy5pPXQsdGhpcy54PWUsdGhpcy55PW4sdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9Y2xhc3MgJHB0e3N0YXRpYyBhcmVhKHQpe2NvbnN0IGU9dC5sZW5ndGg7bGV0IG49MDtmb3IobGV0IG89ZS0xLGk9MDtpPGU7bz1pKyspbis9dFtvXS54KnRbaV0ueS10W2ldLngqdFtvXS55O3JldHVybi41Km59c3RhdGljIGlzQ2xvY2tXaXNlKHQpe3JldHVybiAkcHQuYXJlYSh0KTwwfXN0YXRpYyB0cmlhbmd1bGF0ZVNoYXBlKHQsZSl7Y29uc3Qgbj1bXSxvPVtdLGk9W107dG10KHQpLGVtdChuLHQpO2xldCBhPXQubGVuZ3RoO2UuZm9yRWFjaCh0bXQpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKW8ucHVzaChhKSxhKz1lW3RdLmxlbmd0aCxlbXQobixlW3RdKTtjb25zdCByPShmdW5jdGlvbih0LGUsbj0yKXtjb25zdCBvPWUmJmUubGVuZ3RoLGk9bz9lWzBdKm46dC5sZW5ndGg7bGV0IGE9RHB0KHQsMCxpLG4sITApO2NvbnN0IHI9W107aWYoIWF8fGEubmV4dD09PWEucHJldilyZXR1cm4gcjtsZXQgcyxsLGMsZCxwLG0sdTtpZihvJiYoYT0oZnVuY3Rpb24gZih0LGUsbixvKXtjb25zdCBpPVtdO2xldCBhLHIscyxsLGM7Zm9yKGE9MCxyPWUubGVuZ3RoO2E8cjthKyspcz1lW2FdKm8sbD1hPHItMT9lW2ErMV0qbzp0Lmxlbmd0aCxjPURwdCh0LHMsbCxvLCExKSxjPT09Yy5uZXh0JiYoYy5zdGVpbmVyPSEwKSxpLnB1c2goQnB0KGMpKTtmb3IoaS5zb3J0KElwdCksYT0wO2E8aS5sZW5ndGg7YSsrKUhwdChpW2FdLG4pLG49RXB0KG4sbi5uZXh0KTtyZXR1cm4gbn0pKHQsZSxhLG4pKSx0Lmxlbmd0aD44MCpuKXtzPWM9dFswXSxsPWQ9dFsxXTtmb3IobGV0IGU9bjtlPGk7ZSs9bilwPXRbZV0sbT10W2UrMV0scDxzJiYocz1wKSxtPGwmJihsPW0pLHA+YyYmKGM9cCksbT5kJiYoZD1tKTt1PU1hdGgubWF4KGMtcyxkLWwpLHU9MCE9PXU/MS91OjB9cmV0dXJuIFJwdChhLHIsbixzLGwsdSkscn0pKG4sbyk7Zm9yKGxldCB0PTA7dDxyLmxlbmd0aDt0Kz0zKWkucHVzaChyLnNsaWNlKHQsdCszKSk7cmV0dXJuIGl9fWZ1bmN0aW9uIHRtdCh0KXtjb25zdCBlPXQubGVuZ3RoO2U+MiYmdFtlLTFdLmVxdWFscyh0WzBdKSYmdC5wb3AoKX1mdW5jdGlvbiBlbXQodCxlKXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0LnB1c2goZVtuXS54KSx0LnB1c2goZVtuXS55KX1jbGFzcyBubXQgZXh0ZW5kcyBxcnR7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMudHlwZT0iRXh0cnVkZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3NoYXBlczp0LG9wdGlvbnM6ZX0sdD1BcnJheS5pc0FycmF5KHQpP3Q6W3RdO2NvbnN0IG49dGhpcyxvPVtdLGk9W107Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKWEodFtlXSk7ZnVuY3Rpb24gYSh0KXtjb25zdCBhPVtdLHI9dm9pZCAwIT09ZS5jdXJ2ZVNlZ21lbnRzP2UuY3VydmVTZWdtZW50czoxMixzPXZvaWQgMCE9PWUuc3RlcHM/ZS5zdGVwczoxO2xldCBsPXZvaWQgMCE9PWUuZGVwdGg/ZS5kZXB0aDoxMDAsYz12b2lkIDA9PT1lLmJldmVsRW5hYmxlZHx8ZS5iZXZlbEVuYWJsZWQsZD12b2lkIDAhPT1lLmJldmVsVGhpY2tuZXNzP2UuYmV2ZWxUaGlja25lc3M6NixwPXZvaWQgMCE9PWUuYmV2ZWxTaXplP2UuYmV2ZWxTaXplOmQtMixtPXZvaWQgMCE9PWUuYmV2ZWxPZmZzZXQ/ZS5iZXZlbE9mZnNldDowLHU9dm9pZCAwIT09ZS5iZXZlbFNlZ21lbnRzP2UuYmV2ZWxTZWdtZW50czozO2NvbnN0IGY9ZS5leHRydWRlUGF0aCxnPXZvaWQgMCE9PWUuVVZHZW5lcmF0b3I/ZS5VVkdlbmVyYXRvcjpvbXQ7dm9pZCAwIT09ZS5hbW91bnQmJihjb25zb2xlLndhcm4oIlRIUkVFLkV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTogYW1vdW50IGhhcyBiZWVuIHJlbmFtZWQgdG8gZGVwdGguIiksbD1lLmFtb3VudCk7bGV0IGgsYix5LF8sQyxNPSExO2YmJihoPWYuZ2V0U3BhY2VkUG9pbnRzKHMpLE09ITAsYz0hMSxiPWYuY29tcHV0ZUZyZW5ldEZyYW1lcyhzLCExKSx5PW5ldyBjYXQsXz1uZXcgY2F0LEM9bmV3IGNhdCksY3x8KHU9MCxkPTAscD0wLG09MCk7Y29uc3Qgdj10LmV4dHJhY3RQb2ludHMocik7bGV0IHg9di5zaGFwZTtjb25zdCBPPXYuaG9sZXM7aWYoISRwdC5pc0Nsb2NrV2lzZSh4KSl7eD14LnJldmVyc2UoKTtmb3IobGV0IHQ9MCxlPU8ubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9T1t0XTskcHQuaXNDbG9ja1dpc2UoZSkmJihPW3RdPWUucmV2ZXJzZSgpKX19Y29uc3QgUD0kcHQudHJpYW5ndWxhdGVTaGFwZSh4LE8pLHc9eDtmb3IobGV0IHQ9MCxlPU8ubGVuZ3RoO3Q8ZTt0KyspeD14LmNvbmNhdChPW3RdKTtmdW5jdGlvbiBrKHQsZSxuKXtyZXR1cm4gZXx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKSxlLmNsb25lKCkubXVsdGlwbHlTY2FsYXIobikuYWRkKHQpfWNvbnN0IFM9eC5sZW5ndGgsRD1QLmxlbmd0aDtmdW5jdGlvbiBFKHQsZSxuKXtsZXQgbyxpLGE7Y29uc3Qgcj10LngtZS54LHM9dC55LWUueSxsPW4ueC10LngsYz1uLnktdC55LGQ9cipyK3MqcztpZihNYXRoLmFicyhyKmMtcypsKT5OdW1iZXIuRVBTSUxPTil7Y29uc3QgcD1NYXRoLnNxcnQoZCksbT1NYXRoLnNxcnQobCpsK2MqYyksdT1lLngtcy9wLGY9ZS55K3IvcCxnPSgobi54LWMvbS11KSpjLShuLnkrbC9tLWYpKmwpLyhyKmMtcypsKTtvPXUrcipnLXQueCxpPWYrcypnLXQueTtjb25zdCBoPW8qbytpKmk7aWYoaDw9MilyZXR1cm4gbmV3IFFpdChvLGkpO2E9TWF0aC5zcXJ0KGgvMil9ZWxzZXtsZXQgdD0hMTtyPk51bWJlci5FUFNJTE9OP2w+TnVtYmVyLkVQU0lMT04mJih0PSEwKTpyPC1OdW1iZXIuRVBTSUxPTj9sPC1OdW1iZXIuRVBTSUxPTiYmKHQ9ITApOk1hdGguc2lnbihzKT09PU1hdGguc2lnbihjKSYmKHQ9ITApLHQ/KG89LXMsaT1yLGE9TWF0aC5zcXJ0KGQpKToobz1yLGk9cyxhPU1hdGguc3FydChkLzIpKX1yZXR1cm4gbmV3IFFpdChvL2EsaS9hKX1jb25zdCBSPVtdO2ZvcihsZXQgdD0wLGU9dy5sZW5ndGgsbj1lLTEsbz10KzE7dDxlO3QrKyxuKyssbysrKW49PT1lJiYobj0wKSxvPT09ZSYmKG89MCksUlt0XT1FKHdbdF0sd1tuXSx3W29dKTtjb25zdCBBPVtdO2xldCBULE49Ui5jb25jYXQoKTtmb3IobGV0IHQ9MCxlPU8ubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9T1t0XTtUPVtdO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGgsbz1uLTEsaT10KzE7dDxuO3QrKyxvKyssaSsrKW89PT1uJiYobz0wKSxpPT09biYmKGk9MCksVFt0XT1FKGVbdF0sZVtvXSxlW2ldKTtBLnB1c2goVCksTj1OLmNvbmNhdChUKX1mb3IobGV0IHQ9MDt0PHU7dCsrKXtjb25zdCBlPXQvdSxuPWQqTWF0aC5jb3MoZSpNYXRoLlBJLzIpLG89cCpNYXRoLnNpbihlKk1hdGguUEkvMikrbTtmb3IobGV0IHQ9MCxlPXcubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9ayh3W3RdLFJbdF0sbyk7SChlLngsZS55LC1uKX1mb3IobGV0IHQ9MCxlPU8ubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9T1t0XTtUPUFbdF07Zm9yKGxldCB0PTAsaT1lLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPWsoZVt0XSxUW3RdLG8pO0goaS54LGkueSwtbil9fX1jb25zdCB6PXArbTtmb3IobGV0IHQ9MDt0PFM7dCsrKXtjb25zdCBlPWM/ayh4W3RdLE5bdF0seik6eFt0XTtNPyhfLmNvcHkoYi5ub3JtYWxzWzBdKS5tdWx0aXBseVNjYWxhcihlLngpLHkuY29weShiLmJpbm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIoZS55KSxDLmNvcHkoaFswXSkuYWRkKF8pLmFkZCh5KSxIKEMueCxDLnksQy56KSk6SChlLngsZS55LDApfWZvcihsZXQgdD0xO3Q8PXM7dCsrKWZvcihsZXQgZT0wO2U8UztlKyspe2NvbnN0IG49Yz9rKHhbZV0sTltlXSx6KTp4W2VdO00/KF8uY29weShiLm5vcm1hbHNbdF0pLm11bHRpcGx5U2NhbGFyKG4ueCkseS5jb3B5KGIuYmlub3JtYWxzW3RdKS5tdWx0aXBseVNjYWxhcihuLnkpLEMuY29weShoW3RdKS5hZGQoXykuYWRkKHkpLEgoQy54LEMueSxDLnopKTpIKG4ueCxuLnksbC9zKnQpfWZvcihsZXQgdD11LTE7dD49MDt0LS0pe2NvbnN0IGU9dC91LG49ZCpNYXRoLmNvcyhlKk1hdGguUEkvMiksbz1wKk1hdGguc2luKGUqTWF0aC5QSS8yKSttO2ZvcihsZXQgdD0wLGU9dy5sZW5ndGg7dDxlO3QrKyl7Y29uc3QgZT1rKHdbdF0sUlt0XSxvKTtIKGUueCxlLnksbCtuKX1mb3IobGV0IHQ9MCxlPU8ubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9T1t0XTtUPUFbdF07Zm9yKGxldCB0PTAsaT1lLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPWsoZVt0XSxUW3RdLG8pO00/SChpLngsaS55K2hbcy0xXS55LGhbcy0xXS54K24pOkgoaS54LGkueSxsK24pfX19ZnVuY3Rpb24gSSh0LGUpe2xldCBuPXQubGVuZ3RoO2Zvcig7LS1uPj0wOyl7Y29uc3Qgbz1uO2xldCBpPW4tMTtpPDAmJihpPXQubGVuZ3RoLTEpO2ZvcihsZXQgdD0wLG49cysyKnU7dDxuO3QrKyl7Y29uc3Qgbj1TKnQsYT1TKih0KzEpO0woZStvK24sZStpK24sZStpK2EsZStvK2EpfX19ZnVuY3Rpb24gSCh0LGUsbil7YS5wdXNoKHQpLGEucHVzaChlKSxhLnB1c2gobil9ZnVuY3Rpb24gRih0LGUsaSl7Qih0KSxCKGUpLEIoaSk7Y29uc3QgYT1vLmxlbmd0aC8zLHI9Zy5nZW5lcmF0ZVRvcFVWKG4sbyxhLTMsYS0yLGEtMSk7VihyWzBdKSxWKHJbMV0pLFYoclsyXSl9ZnVuY3Rpb24gTCh0LGUsaSxhKXtCKHQpLEIoZSksQihhKSxCKGUpLEIoaSksQihhKTtjb25zdCByPW8ubGVuZ3RoLzMscz1nLmdlbmVyYXRlU2lkZVdhbGxVVihuLG8sci02LHItMyxyLTIsci0xKTtWKHNbMF0pLFYoc1sxXSksVihzWzNdKSxWKHNbMV0pLFYoc1syXSksVihzWzNdKX1mdW5jdGlvbiBCKHQpe28ucHVzaChhWzMqdCswXSksby5wdXNoKGFbMyp0KzFdKSxvLnB1c2goYVszKnQrMl0pfWZ1bmN0aW9uIFYodCl7aS5wdXNoKHQueCksaS5wdXNoKHQueSl9IShmdW5jdGlvbiBqKCl7Y29uc3QgdD1vLmxlbmd0aC8zO2lmKGMpe2xldCB0PTAsZT1TKnQ7Zm9yKGxldCB0PTA7dDxEO3QrKyl7Y29uc3Qgbj1QW3RdO0YoblsyXStlLG5bMV0rZSxuWzBdK2UpfXQ9cysyKnUsZT1TKnQ7Zm9yKGxldCB0PTA7dDxEO3QrKyl7Y29uc3Qgbj1QW3RdO0YoblswXStlLG5bMV0rZSxuWzJdK2UpfX1lbHNle2ZvcihsZXQgdD0wO3Q8RDt0Kyspe2NvbnN0IGU9UFt0XTtGKGVbMl0sZVsxXSxlWzBdKX1mb3IobGV0IHQ9MDt0PEQ7dCsrKXtjb25zdCBlPVBbdF07RihlWzBdK1MqcyxlWzFdK1MqcyxlWzJdK1Mqcyl9fW4uYWRkR3JvdXAodCxvLmxlbmd0aC8zLXQsMCl9KSgpLChmdW5jdGlvbiBVKCl7Y29uc3QgdD1vLmxlbmd0aC8zO2xldCBlPTA7SSh3LGUpLGUrPXcubGVuZ3RoO2ZvcihsZXQgdD0wLG49Ty5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj1PW3RdO0kobixlKSxlKz1uLmxlbmd0aH1uLmFkZEdyb3VwKHQsby5sZW5ndGgvMy10LDEpfSkoKX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBGcnQobywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgRnJ0KGksMikpLHRoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKX10b0pTT04oKXtjb25zdCB0PXN1cGVyLnRvSlNPTigpO3JldHVybihmdW5jdGlvbiBlKHQsbixvKXtpZihvLnNoYXBlcz1bXSxBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKylvLnNoYXBlcy5wdXNoKHRbZV0udXVpZCk7ZWxzZSBvLnNoYXBlcy5wdXNoKHQudXVpZCk7cmV0dXJuIHZvaWQgMCE9PW4uZXh0cnVkZVBhdGgmJihvLm9wdGlvbnMuZXh0cnVkZVBhdGg9bi5leHRydWRlUGF0aC50b0pTT04oKSksb30pKHRoaXMucGFyYW1ldGVycy5zaGFwZXMsdGhpcy5wYXJhbWV0ZXJzLm9wdGlvbnMsdCl9c3RhdGljIGZyb21KU09OKHQsZSl7Y29uc3Qgbj1bXTtmb3IobGV0IG89MCxpPXQuc2hhcGVzLmxlbmd0aDtvPGk7bysrKW4ucHVzaChlW3Quc2hhcGVzW29dXSk7Y29uc3Qgbz10Lm9wdGlvbnMuZXh0cnVkZVBhdGg7cmV0dXJuIHZvaWQgMCE9PW8mJih0Lm9wdGlvbnMuZXh0cnVkZVBhdGg9KG5ldyBTcHRbby50eXBlXSkuZnJvbUpTT04obykpLG5ldyBubXQobix0Lm9wdGlvbnMpfX1jb25zdCBvbXQ9e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24odCxlLG4sbyxpKXtjb25zdCBhPWVbMypvXSxyPWVbMypvKzFdLHM9ZVszKmldLGw9ZVszKmkrMV07cmV0dXJuW25ldyBRaXQoZVszKm5dLGVbMypuKzFdKSxuZXcgUWl0KGEsciksbmV3IFFpdChzLGwpXX0sZ2VuZXJhdGVTaWRlV2FsbFVWOmZ1bmN0aW9uKHQsZSxuLG8saSxhKXtjb25zdCByPWVbMypuXSxzPWVbMypuKzFdLGw9ZVszKm4rMl0sYz1lWzMqb10sZD1lWzMqbysxXSxwPWVbMypvKzJdLG09ZVszKmldLHU9ZVszKmkrMV0sZj1lWzMqaSsyXSxnPWVbMyphXSxoPWVbMyphKzFdLGI9ZVszKmErMl07cmV0dXJuIE1hdGguYWJzKHMtZCk8TWF0aC5hYnMoci1jKT9bbmV3IFFpdChyLDEtbCksbmV3IFFpdChjLDEtcCksbmV3IFFpdChtLDEtZiksbmV3IFFpdChnLDEtYildOltuZXcgUWl0KHMsMS1sKSxuZXcgUWl0KGQsMS1wKSxuZXcgUWl0KHUsMS1mKSxuZXcgUWl0KGgsMS1iKV19fTtjbGFzcyBpbXQgZXh0ZW5kcyBxcnR7Y29uc3RydWN0b3IodCxlPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOmV9O2NvbnN0IG49W10sbz1bXSxpPVtdLGE9W107bGV0IHI9MCxzPTA7aWYoITE9PT1BcnJheS5pc0FycmF5KHQpKWwodCk7ZWxzZSBmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylsKHRbZV0pLHRoaXMuYWRkR3JvdXAocixzLGUpLHIrPXMscz0wO2Z1bmN0aW9uIGwodCl7Y29uc3Qgcj1vLmxlbmd0aC8zLGw9dC5leHRyYWN0UG9pbnRzKGUpO2xldCBjPWwuc2hhcGU7Y29uc3QgZD1sLmhvbGVzOyExPT09JHB0LmlzQ2xvY2tXaXNlKGMpJiYoYz1jLnJldmVyc2UoKSk7Zm9yKGxldCB0PTAsZT1kLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPWRbdF07ITA9PT0kcHQuaXNDbG9ja1dpc2UoZSkmJihkW3RdPWUucmV2ZXJzZSgpKX1jb25zdCBwPSRwdC50cmlhbmd1bGF0ZVNoYXBlKGMsZCk7Zm9yKGxldCB0PTAsZT1kLmxlbmd0aDt0PGU7dCsrKWM9Yy5jb25jYXQoZFt0XSk7Zm9yKGxldCB0PTAsZT1jLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPWNbdF07by5wdXNoKGUueCxlLnksMCksaS5wdXNoKDAsMCwxKSxhLnB1c2goZS54LGUueSl9Zm9yKGxldCB0PTAsZT1wLmxlbmd0aDt0PGU7dCsrKXtjb25zdCBlPXBbdF07bi5wdXNoKGVbMF0rcixlWzFdK3IsZVsyXStyKSxzKz0zfX10aGlzLnNldEluZGV4KG4pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEZydChvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgRnJ0KGksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEZydChhLDIpKX10b0pTT04oKXtjb25zdCB0PXN1cGVyLnRvSlNPTigpO3JldHVybihmdW5jdGlvbiBlKHQsbil7aWYobi5zaGFwZXM9W10sQXJyYXkuaXNBcnJheSh0KSlmb3IobGV0IGU9MCxvPXQubGVuZ3RoO2U8bztlKyspbi5zaGFwZXMucHVzaCh0W2VdLnV1aWQpO2Vsc2Ugbi5zaGFwZXMucHVzaCh0LnV1aWQpO3JldHVybiBufSkodGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyx0KX1zdGF0aWMgZnJvbUpTT04odCxlKXtjb25zdCBuPVtdO2ZvcihsZXQgbz0wLGk9dC5zaGFwZXMubGVuZ3RoO288aTtvKyspbi5wdXNoKGVbdC5zaGFwZXNbb11dKTtyZXR1cm4gbmV3IGltdChuLHQuY3VydmVTZWdtZW50cyl9fShjbGFzcyBleHRlbmRzIE9ydHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IFJydCgwKSx0aGlzLnRyYW5zcGFyZW50PSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXN9fSkucHJvdG90eXBlLmlzU2hhZG93TWF0ZXJpYWw9ITA7Y2xhc3MgYW10IGV4dGVuZHMgT3J0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgUnJ0KDE2Nzc3MjE1KSx0aGlzLnJvdWdobmVzcz0xLHRoaXMubWV0YWxuZXNzPTAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgUnJ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IFFpdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMucm91Z2huZXNzTWFwPW51bGwsdGhpcy5tZXRhbG5lc3NNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmVudk1hcEludGVuc2l0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzLHRoaXMubWV0YWxuZXNzPXQubWV0YWxuZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMucm91Z2huZXNzTWFwPXQucm91Z2huZXNzTWFwLHRoaXMubWV0YWxuZXNzTWFwPXQubWV0YWxuZXNzTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmVudk1hcEludGVuc2l0eT10LmVudk1hcEludGVuc2l0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319YW10LnByb3RvdHlwZS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgYW10e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy50eXBlPSJNZXNoUGh5c2ljYWxNYXRlcmlhbCIsdGhpcy5jbGVhcmNvYXQ9MCx0aGlzLmNsZWFyY29hdE1hcD1udWxsLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzPTAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9bnVsbCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlPW5ldyBRaXQoMSwxKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD1udWxsLHRoaXMucmVmbGVjdGl2aXR5PS41LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpb3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMSsuNCp0aGlzLnJlZmxlY3Rpdml0eSkvKDEtLjQqdGhpcy5yZWZsZWN0aXZpdHkpfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5yZWZsZWN0aXZpdHk9Wml0KDIuNSoodC0xKS8odCsxKSwwLDEpfX0pLHRoaXMuc2hlZW49bnVsbCx0aGlzLnRyYW5zbWlzc2lvbj0wLHRoaXMudHJhbnNtaXNzaW9uTWFwPW51bGwsdGhpcy50aGlja25lc3M9LjAxLHRoaXMudGhpY2tuZXNzTWFwPW51bGwsdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlPTAsdGhpcy5hdHRlbnVhdGlvblRpbnQ9bmV3IFJydCgxLDEsMSksdGhpcy5zcGVjdWxhckludGVuc2l0eT0xLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXA9bnVsbCx0aGlzLnNwZWN1bGFyVGludD1uZXcgUnJ0KDEsMSwxKSx0aGlzLnNwZWN1bGFyVGludE1hcD1udWxsLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQsdGhpcy5jbGVhcmNvYXRNYXA9dC5jbGVhcmNvYXRNYXAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9dC5jbGVhcmNvYXROb3JtYWxNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS5jb3B5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMuc2hlZW49dC5zaGVlbj8odGhpcy5zaGVlbnx8bmV3IFJydCkuY29weSh0LnNoZWVuKTpudWxsLHRoaXMudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uLHRoaXMudHJhbnNtaXNzaW9uTWFwPXQudHJhbnNtaXNzaW9uTWFwLHRoaXMudGhpY2tuZXNzPXQudGhpY2tuZXNzLHRoaXMudGhpY2tuZXNzTWFwPXQudGhpY2tuZXNzTWFwLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UsdGhpcy5hdHRlbnVhdGlvblRpbnQuY29weSh0LmF0dGVudWF0aW9uVGludCksdGhpcy5zcGVjdWxhckludGVuc2l0eT10LnNwZWN1bGFySW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dC5zcGVjdWxhckludGVuc2l0eU1hcCx0aGlzLnNwZWN1bGFyVGludC5jb3B5KHQuc3BlY3VsYXJUaW50KSx0aGlzLnNwZWN1bGFyVGludE1hcD10LnNwZWN1bGFyVGludE1hcCx0aGlzfX0ucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBPcnR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hQaG9uZ01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBScnQoMTY3NzcyMTUpLHRoaXMuc3BlY3VsYXI9bmV3IFJydCgxMTE4NDgxKSx0aGlzLnNoaW5pbmVzcz0zMCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBScnQoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPTAsdGhpcy5ub3JtYWxTY2FsZT1uZXcgUWl0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT0wLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5zcGVjdWxhci5jb3B5KHQuc3BlY3VsYXIpLHRoaXMuc2hpbmluZXNzPXQuc2hpbmluZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hQaG9uZ01hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgT3J0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtUT09OOiIifSx0aGlzLnR5cGU9Ik1lc2hUb29uTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IFJydCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IFJydCgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBRaXQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5ncmFkaWVudE1hcD10LmdyYWRpZW50TWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX0ucHJvdG90eXBlLmlzTWVzaFRvb25NYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIE9ydHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaE5vcm1hbE1hdGVyaWFsIix0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPTAsdGhpcy5ub3JtYWxTY2FsZT1uZXcgUWl0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIE9ydHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaExhbWJlcnRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgUnJ0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBScnQoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPTAsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX0ucHJvdG90eXBlLmlzTWVzaExhbWJlcnRNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIE9ydHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17TUFUQ0FQOiIifSx0aGlzLnR5cGU9Ik1lc2hNYXRjYXBNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgUnJ0KDE2Nzc3MjE1KSx0aGlzLm1hdGNhcD1udWxsLHRoaXMubWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IFFpdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIHFkdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fS5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7Y29uc3Qgcm10PXthcnJheVNsaWNlOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gcm10LmlzVHlwZWRBcnJheSh0KT9uZXcgdC5jb25zdHJ1Y3Rvcih0LnN1YmFycmF5KGUsdm9pZCAwIT09bj9uOnQubGVuZ3RoKSk6dC5zbGljZShlLG4pfSxjb252ZXJ0QXJyYXk6ZnVuY3Rpb24odCxlLG4pe3JldHVybiF0fHwhbiYmdC5jb25zdHJ1Y3Rvcj09PWU/dDoibnVtYmVyIj09dHlwZW9mIGUuQllURVNfUEVSX0VMRU1FTlQ/bmV3IGUodCk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCl9LGlzVHlwZWRBcnJheTpmdW5jdGlvbih0KXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBEYXRhVmlldyl9LGdldEtleWZyYW1lT3JkZXI6ZnVuY3Rpb24odCl7Y29uc3QgZT10Lmxlbmd0aCxuPW5ldyBBcnJheShlKTtmb3IobGV0IHQ9MDt0IT09ZTsrK3Qpblt0XT10O3JldHVybiBuLnNvcnQoKGZ1bmN0aW9uIG8oZSxuKXtyZXR1cm4gdFtlXS10W25dfSkpLG59LHNvcnRlZEFycmF5OmZ1bmN0aW9uKHQsZSxuKXtjb25zdCBvPXQubGVuZ3RoLGk9bmV3IHQuY29uc3RydWN0b3Iobyk7Zm9yKGxldCBhPTAscj0wO3IhPT1vOysrYSl7Y29uc3Qgbz1uW2FdKmU7Zm9yKGxldCBuPTA7biE9PWU7KytuKWlbcisrXT10W28rbl19cmV0dXJuIGl9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKHQsZSxuLG8pe2xldCBpPTEsYT10WzBdO2Zvcig7dm9pZCAwIT09YSYmdm9pZCAwPT09YVtvXTspYT10W2krK107aWYodm9pZCAwPT09YSlyZXR1cm47bGV0IHI9YVtvXTtpZih2b2lkIDAhPT1yKWlmKEFycmF5LmlzQXJyYXkocikpZG97cj1hW29dLHZvaWQgMCE9PXImJihlLnB1c2goYS50aW1lKSxuLnB1c2guYXBwbHkobixyKSksYT10W2krK119d2hpbGUodm9pZCAwIT09YSk7ZWxzZSBpZih2b2lkIDAhPT1yLnRvQXJyYXkpZG97cj1hW29dLHZvaWQgMCE9PXImJihlLnB1c2goYS50aW1lKSxyLnRvQXJyYXkobixuLmxlbmd0aCkpLGE9dFtpKytdfXdoaWxlKHZvaWQgMCE9PWEpO2Vsc2UgZG97cj1hW29dLHZvaWQgMCE9PXImJihlLnB1c2goYS50aW1lKSxuLnB1c2gocikpLGE9dFtpKytdfXdoaWxlKHZvaWQgMCE9PWEpfSxzdWJjbGlwOmZ1bmN0aW9uKHQsZSxuLG8saT0zMCl7Y29uc3QgYT10LmNsb25lKCk7YS5uYW1lPWU7Y29uc3Qgcj1bXTtmb3IobGV0IHQ9MDt0PGEudHJhY2tzLmxlbmd0aDsrK3Qpe2NvbnN0IGU9YS50cmFja3NbdF0scz1lLmdldFZhbHVlU2l6ZSgpLGw9W10sYz1bXTtmb3IobGV0IHQ9MDt0PGUudGltZXMubGVuZ3RoOysrdCl7Y29uc3QgYT1lLnRpbWVzW3RdKmk7aWYoIShhPG58fGE+PW8pKXtsLnB1c2goZS50aW1lc1t0XSk7Zm9yKGxldCBuPTA7bjxzOysrbiljLnB1c2goZS52YWx1ZXNbdCpzK25dKX19MCE9PWwubGVuZ3RoJiYoZS50aW1lcz1ybXQuY29udmVydEFycmF5KGwsZS50aW1lcy5jb25zdHJ1Y3RvciksZS52YWx1ZXM9cm10LmNvbnZlcnRBcnJheShjLGUudmFsdWVzLmNvbnN0cnVjdG9yKSxyLnB1c2goZSkpfWEudHJhY2tzPXI7bGV0IHM9MS8wO2ZvcihsZXQgdD0wO3Q8YS50cmFja3MubGVuZ3RoOysrdClzPmEudHJhY2tzW3RdLnRpbWVzWzBdJiYocz1hLnRyYWNrc1t0XS50aW1lc1swXSk7Zm9yKGxldCB0PTA7dDxhLnRyYWNrcy5sZW5ndGg7Kyt0KWEudHJhY2tzW3RdLnNoaWZ0KC0xKnMpO3JldHVybiBhLnJlc2V0RHVyYXRpb24oKSxhfSxtYWtlQ2xpcEFkZGl0aXZlOmZ1bmN0aW9uKHQsZT0wLG49dCxvPTMwKXtvPD0wJiYobz0zMCk7Y29uc3QgaT1uLnRyYWNrcy5sZW5ndGgsYT1lL287Zm9yKGxldCBlPTA7ZTxpOysrZSl7Y29uc3Qgbz1uLnRyYWNrc1tlXSxpPW8uVmFsdWVUeXBlTmFtZTtpZigiYm9vbCI9PT1pfHwic3RyaW5nIj09PWkpY29udGludWU7Y29uc3Qgcj10LnRyYWNrcy5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lPT09by5uYW1lJiZ0LlZhbHVlVHlwZU5hbWU9PT1pfSkpO2lmKHZvaWQgMD09PXIpY29udGludWU7bGV0IHM9MDtjb25zdCBsPW8uZ2V0VmFsdWVTaXplKCk7by5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKHM9bC8zKTtsZXQgYz0wO2NvbnN0IGQ9ci5nZXRWYWx1ZVNpemUoKTtyLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYoYz1kLzMpO2NvbnN0IHA9by50aW1lcy5sZW5ndGgtMTtsZXQgbTtpZihhPD1vLnRpbWVzWzBdKW09cm10LmFycmF5U2xpY2Uoby52YWx1ZXMscyxsLXMpO2Vsc2UgaWYoYT49by50aW1lc1twXSl7Y29uc3QgdD1wKmwrczttPXJtdC5hcnJheVNsaWNlKG8udmFsdWVzLHQsdCtsLXMpfWVsc2V7Y29uc3QgdD1vLmNyZWF0ZUludGVycG9sYW50KCksZT1zLG49bC1zO3QuZXZhbHVhdGUoYSksbT1ybXQuYXJyYXlTbGljZSh0LnJlc3VsdEJ1ZmZlcixlLG4pfSJxdWF0ZXJuaW9uIj09PWkmJihuZXcgbGF0KS5mcm9tQXJyYXkobSkubm9ybWFsaXplKCkuY29uanVnYXRlKCkudG9BcnJheShtKTtjb25zdCB1PXIudGltZXMubGVuZ3RoO2ZvcihsZXQgdD0wO3Q8dTsrK3Qpe2NvbnN0IGU9dCpkK2M7aWYoInF1YXRlcm5pb24iPT09aSlsYXQubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQoci52YWx1ZXMsZSxtLDAsci52YWx1ZXMsZSk7ZWxzZXtjb25zdCB0PWQtMipjO2ZvcihsZXQgbj0wO248dDsrK24pci52YWx1ZXNbZStuXS09bVtuXX19fXJldHVybiB0LmJsZW5kTW9kZT0yNTAxLHR9fTtjbGFzcyBzbXR7Y29uc3RydWN0b3IodCxlLG4sbyl7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPXZvaWQgMCE9PW8/bzpuZXcgZS5jb25zdHJ1Y3RvcihuKSx0aGlzLnNhbXBsZVZhbHVlcz1lLHRoaXMudmFsdWVTaXplPW4sdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17fX1ldmFsdWF0ZSh0KXtjb25zdCBlPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zO2xldCBuPXRoaXMuX2NhY2hlZEluZGV4LG89ZVtuXSxpPWVbbi0xXTt0OntlOntsZXQgYTtuOntvOmlmKCEodDxvKSl7Zm9yKGxldCBhPW4rMjs7KXtpZih2b2lkIDA9PT1vKXtpZih0PGkpYnJlYWsgbztyZXR1cm4gbj1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1uLHRoaXMuYWZ0ZXJFbmRfKG4tMSx0LGkpfWlmKG49PT1hKWJyZWFrO2lmKGk9byxvPWVbKytuXSx0PG8pYnJlYWsgZX1hPWUubGVuZ3RoO2JyZWFrIG59aWYodD49aSlicmVhayB0O3tjb25zdCByPWVbMV07dDxyJiYobj0yLGk9cik7Zm9yKGxldCBhPW4tMjs7KXtpZih2b2lkIDA9PT1pKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxvKTtpZihuPT09YSlicmVhaztpZihvPWksaT1lWy0tbi0xXSx0Pj1pKWJyZWFrIGV9YT1uLG49MH19Zm9yKDtuPGE7KXtjb25zdCBvPW4rYT4+PjE7dDxlW29dP2E9bzpuPW8rMX1pZihvPWVbbl0saT1lW24tMV0sdm9pZCAwPT09aSlyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQsbyk7aWYodm9pZCAwPT09bylyZXR1cm4gbj1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1uLHRoaXMuYWZ0ZXJFbmRfKG4tMSxpLHQpfXRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5pbnRlcnZhbENoYW5nZWRfKG4saSxvKX1yZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZV8obixpLHQsbyl9Z2V0U2V0dGluZ3NfKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N8fHRoaXMuRGVmYXVsdFNldHRpbmdzX31jb3B5U2FtcGxlVmFsdWVfKHQpe2NvbnN0IGU9dGhpcy5yZXN1bHRCdWZmZXIsbj10aGlzLnNhbXBsZVZhbHVlcyxvPXRoaXMudmFsdWVTaXplLGk9dCpvO2ZvcihsZXQgdD0wO3QhPT1vOysrdCllW3RdPW5baSt0XTtyZXR1cm4gZX1pbnRlcnBvbGF0ZV8oKXt0aHJvdyBuZXcgRXJyb3IoImNhbGwgdG8gYWJzdHJhY3QgbWV0aG9kIil9aW50ZXJ2YWxDaGFuZ2VkXygpe319c210LnByb3RvdHlwZS5iZWZvcmVTdGFydF89c210LnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfLHNtdC5wcm90b3R5cGUuYWZ0ZXJFbmRfPXNtdC5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXztjbGFzcyBsbXQgZXh0ZW5kcyBzbXR7Y29uc3RydWN0b3IodCxlLG4sbyl7c3VwZXIodCxlLG4sbyksdGhpcy5fd2VpZ2h0UHJldj0tMCx0aGlzLl9vZmZzZXRQcmV2PS0wLHRoaXMuX3dlaWdodE5leHQ9LTAsdGhpcy5fb2Zmc2V0TmV4dD0tMCx0aGlzLkRlZmF1bHRTZXR0aW5nc189e2VuZGluZ1N0YXJ0OkFpdCxlbmRpbmdFbmQ6QWl0fX1pbnRlcnZhbENoYW5nZWRfKHQsZSxuKXtjb25zdCBvPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zO2xldCBpPXQtMixhPXQrMSxyPW9baV0scz1vW2FdO2lmKHZvaWQgMD09PXIpc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nU3RhcnQpe2Nhc2UgVGl0Omk9dCxyPTIqZS1uO2JyZWFrO2Nhc2UgTml0Omk9by5sZW5ndGgtMixyPWUrb1tpXS1vW2krMV07YnJlYWs7ZGVmYXVsdDppPXQscj1ufWlmKHZvaWQgMD09PXMpc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nRW5kKXtjYXNlIFRpdDphPXQscz0yKm4tZTticmVhaztjYXNlIE5pdDphPTEscz1uK29bMV0tb1swXTticmVhaztkZWZhdWx0OmE9dC0xLHM9ZX1jb25zdCBsPS41KihuLWUpLGM9dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1sLyhlLXIpLHRoaXMuX3dlaWdodE5leHQ9bC8ocy1uKSx0aGlzLl9vZmZzZXRQcmV2PWkqYyx0aGlzLl9vZmZzZXROZXh0PWEqY31pbnRlcnBvbGF0ZV8odCxlLG4sbyl7Y29uc3QgaT10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHI9dGhpcy52YWx1ZVNpemUscz10KnIsbD1zLXIsYz10aGlzLl9vZmZzZXRQcmV2LGQ9dGhpcy5fb2Zmc2V0TmV4dCxwPXRoaXMuX3dlaWdodFByZXYsbT10aGlzLl93ZWlnaHROZXh0LHU9KG4tZSkvKG8tZSksZj11KnUsZz1mKnUsaD0tcCpnKzIqcCpmLXAqdSxiPSgxK3ApKmcrKC0xLjUtMipwKSpmKygtLjUrcCkqdSsxLHk9KC0xLW0pKmcrKDEuNSttKSpmKy41KnUsXz1tKmctbSpmO2ZvcihsZXQgdD0wO3QhPT1yOysrdClpW3RdPWgqYVtjK3RdK2IqYVtsK3RdK3kqYVtzK3RdK18qYVtkK3RdO3JldHVybiBpfX1jbGFzcyBjbXQgZXh0ZW5kcyBzbXR7Y29uc3RydWN0b3IodCxlLG4sbyl7c3VwZXIodCxlLG4sbyl9aW50ZXJwb2xhdGVfKHQsZSxuLG8pe2NvbnN0IGk9dGhpcy5yZXN1bHRCdWZmZXIsYT10aGlzLnNhbXBsZVZhbHVlcyxyPXRoaXMudmFsdWVTaXplLHM9dCpyLGw9cy1yLGM9KG4tZSkvKG8tZSksZD0xLWM7Zm9yKGxldCB0PTA7dCE9PXI7Kyt0KWlbdF09YVtsK3RdKmQrYVtzK3RdKmM7cmV0dXJuIGl9fWNsYXNzIGRtdCBleHRlbmRzIHNtdHtjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcih0LGUsbixvKX1pbnRlcnBvbGF0ZV8odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX1jbGFzcyBwbXR7Y29uc3RydWN0b3IodCxlLG4sbyl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYodm9pZCAwPT09ZXx8MD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1ybXQuY29udmVydEFycmF5KGUsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9cm10LmNvbnZlcnRBcnJheShuLHRoaXMuVmFsdWVCdWZmZXJUeXBlKSx0aGlzLnNldEludGVycG9sYXRpb24ob3x8dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil9c3RhdGljIHRvSlNPTih0KXtjb25zdCBlPXQuY29uc3RydWN0b3I7bGV0IG47aWYoZS50b0pTT04hPT10aGlzLnRvSlNPTiluPWUudG9KU09OKHQpO2Vsc2V7bj17bmFtZTp0Lm5hbWUsdGltZXM6cm10LmNvbnZlcnRBcnJheSh0LnRpbWVzLEFycmF5KSx2YWx1ZXM6cm10LmNvbnZlcnRBcnJheSh0LnZhbHVlcyxBcnJheSl9O2NvbnN0IGU9dC5nZXRJbnRlcnBvbGF0aW9uKCk7ZSE9PXQuRGVmYXVsdEludGVycG9sYXRpb24mJihuLmludGVycG9sYXRpb249ZSl9cmV0dXJuIG4udHlwZT10LlZhbHVlVHlwZU5hbWUsbn1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSh0KXtyZXR1cm4gbmV3IGRtdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgY210KHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGgodCl7cmV0dXJuIG5ldyBsbXQodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfXNldEludGVycG9sYXRpb24odCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgRGl0OmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTticmVhaztjYXNlIEVpdDplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyO2JyZWFrO2Nhc2UgUml0OmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09ZSl7Y29uc3QgZT0idW5zdXBwb3J0ZWQgaW50ZXJwb2xhdGlvbiBmb3IgIit0aGlzLlZhbHVlVHlwZU5hbWUrIiBrZXlmcmFtZSB0cmFjayBuYW1lZCAiK3RoaXMubmFtZTtpZih2b2lkIDA9PT10aGlzLmNyZWF0ZUludGVycG9sYW50KXtpZih0PT09dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil0aHJvdyBuZXcgRXJyb3IoZSk7dGhpcy5zZXRJbnRlcnBvbGF0aW9uKHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLktleWZyYW1lVHJhY2s6IixlKSx0aGlzfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYW50PWUsdGhpc31nZXRJbnRlcnBvbGF0aW9uKCl7c3dpdGNoKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQpe2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTpyZXR1cm4gRGl0O2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6cmV0dXJuIEVpdDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnJldHVybiBSaXR9fWdldFZhbHVlU2l6ZSgpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvdGhpcy50aW1lcy5sZW5ndGh9c2hpZnQodCl7aWYoMCE9PXQpe2NvbnN0IGU9dGhpcy50aW1lcztmb3IobGV0IG49MCxvPWUubGVuZ3RoO24hPT1vOysrbillW25dKz10fXJldHVybiB0aGlzfXNjYWxlKHQpe2lmKDEhPT10KXtjb25zdCBlPXRoaXMudGltZXM7Zm9yKGxldCBuPTAsbz1lLmxlbmd0aDtuIT09bzsrK24pZVtuXSo9dH1yZXR1cm4gdGhpc310cmltKHQsZSl7Y29uc3Qgbj10aGlzLnRpbWVzLG89bi5sZW5ndGg7bGV0IGk9MCxhPW8tMTtmb3IoO2khPT1vJiZuW2ldPHQ7KSsraTtmb3IoOy0xIT09YSYmblthXT5lOyktLWE7aWYoKythLDAhPT1pfHxhIT09byl7aT49YSYmKGE9TWF0aC5tYXgoYSwxKSxpPWEtMSk7Y29uc3QgdD10aGlzLmdldFZhbHVlU2l6ZSgpO3RoaXMudGltZXM9cm10LmFycmF5U2xpY2UobixpLGEpLHRoaXMudmFsdWVzPXJtdC5hcnJheVNsaWNlKHRoaXMudmFsdWVzLGkqdCxhKnQpfXJldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITA7Y29uc3QgZT10aGlzLmdldFZhbHVlU2l6ZSgpO2UtTWF0aC5mbG9vcihlKSE9MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IEludmFsaWQgdmFsdWUgc2l6ZSBpbiB0cmFjay4iLHRoaXMpLHQ9ITEpO2NvbnN0IG49dGhpcy50aW1lcyxvPXRoaXMudmFsdWVzLGk9bi5sZW5ndGg7MD09PWkmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBhPW51bGw7Zm9yKGxldCBlPTA7ZSE9PWk7ZSsrKXtjb25zdCBvPW5bZV07aWYoIm51bWJlciI9PXR5cGVvZiBvJiZpc05hTihvKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLGUsbyksdD0hMTticmVha31pZihudWxsIT09YSYmYT5vKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4iLHRoaXMsZSxvLGEpLHQ9ITE7YnJlYWt9YT1vfWlmKHZvaWQgMCE9PW8mJnJtdC5pc1R5cGVkQXJyYXkobykpZm9yKGxldCBlPTAsbj1vLmxlbmd0aDtlIT09bjsrK2Upe2NvbnN0IG49b1tlXTtpZihpc05hTihuKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxlLG4pLHQ9ITE7YnJlYWt9fXJldHVybiB0fW9wdGltaXplKCl7Y29uc3QgdD1ybXQuYXJyYXlTbGljZSh0aGlzLnRpbWVzKSxlPXJtdC5hcnJheVNsaWNlKHRoaXMudmFsdWVzKSxuPXRoaXMuZ2V0VmFsdWVTaXplKCksbz10aGlzLmdldEludGVycG9sYXRpb24oKT09PVJpdCxpPXQubGVuZ3RoLTE7bGV0IGE9MTtmb3IobGV0IHI9MTtyPGk7KytyKXtsZXQgaT0hMTtjb25zdCBzPXRbcl07aWYocyE9PXRbcisxXSYmKDEhPT1yfHxzIT09dFswXSkpaWYobylpPSEwO2Vsc2V7Y29uc3QgdD1yKm4sbz10LW4sYT10K247Zm9yKGxldCByPTA7ciE9PW47KytyKXtjb25zdCBuPWVbdCtyXTtpZihuIT09ZVtvK3JdfHxuIT09ZVthK3JdKXtpPSEwO2JyZWFrfX19aWYoaSl7aWYociE9PWEpe3RbYV09dFtyXTtjb25zdCBvPXIqbixpPWEqbjtmb3IobGV0IHQ9MDt0IT09bjsrK3QpZVtpK3RdPWVbbyt0XX0rK2F9fWlmKGk+MCl7dFthXT10W2ldO2ZvcihsZXQgdD1pKm4sbz1hKm4scj0wO3IhPT1uOysrcillW28rcl09ZVt0K3JdOysrYX1yZXR1cm4gYSE9PXQubGVuZ3RoPyh0aGlzLnRpbWVzPXJtdC5hcnJheVNsaWNlKHQsMCxhKSx0aGlzLnZhbHVlcz1ybXQuYXJyYXlTbGljZShlLDAsYSpuKSk6KHRoaXMudGltZXM9dCx0aGlzLnZhbHVlcz1lKSx0aGlzfWNsb25lKCl7Y29uc3QgdD1ybXQuYXJyYXlTbGljZSh0aGlzLnRpbWVzLDApLGU9cm10LmFycmF5U2xpY2UodGhpcy52YWx1ZXMsMCksbj1uZXcoMCx0aGlzLmNvbnN0cnVjdG9yKSh0aGlzLm5hbWUsdCxlKTtyZXR1cm4gbi5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50LG59fXBtdC5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5LHBtdC5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUZsb2F0MzJBcnJheSxwbXQucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPUVpdDtjbGFzcyBtbXQgZXh0ZW5kcyBwbXR7fW1tdC5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0iYm9vbCIsbW10LnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXksbW10LnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1EaXQsbW10LnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI9dm9pZCAwLG1tdC5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDtjbGFzcyB1bXQgZXh0ZW5kcyBwbXR7fXVtdC5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0iY29sb3IiO2NsYXNzIGZtdCBleHRlbmRzIHBtdHt9Zm10LnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJudW1iZXIiO2NsYXNzIGdtdCBleHRlbmRzIHNtdHtjb25zdHJ1Y3Rvcih0LGUsbixvKXtzdXBlcih0LGUsbixvKX1pbnRlcnBvbGF0ZV8odCxlLG4sbyl7Y29uc3QgaT10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHI9dGhpcy52YWx1ZVNpemUscz0obi1lKS8oby1lKTtsZXQgbD10KnI7Zm9yKGxldCB0PWwrcjtsIT09dDtsKz00KWxhdC5zbGVycEZsYXQoaSwwLGEsbC1yLGEsbCxzKTtyZXR1cm4gaX19Y2xhc3MgaG10IGV4dGVuZHMgcG10e0ludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcih0KXtyZXR1cm4gbmV3IGdtdCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9fWhtdC5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0icXVhdGVybmlvbiIsaG10LnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1FaXQsaG10LnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO2NsYXNzIGJtdCBleHRlbmRzIHBtdHt9Ym10LnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJzdHJpbmciLGJtdC5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5LGJtdC5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249RGl0LGJtdC5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMCxibXQucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7Y2xhc3MgeW10IGV4dGVuZHMgcG10e315bXQucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InZlY3RvciI7Y2xhc3MgX210e2NvbnN0cnVjdG9yKHQsZT0tMSxuLG89MjUwMCl7dGhpcy5uYW1lPXQsdGhpcy50cmFja3M9bix0aGlzLmR1cmF0aW9uPWUsdGhpcy5ibGVuZE1vZGU9byx0aGlzLnV1aWQ9cWl0KCksdGhpcy5kdXJhdGlvbjwwJiZ0aGlzLnJlc2V0RHVyYXRpb24oKX1zdGF0aWMgcGFyc2UodCl7Y29uc3QgZT1bXSxuPXQudHJhY2tzLG89MS8odC5mcHN8fDEpO2ZvcihsZXQgdD0wLGk9bi5sZW5ndGg7dCE9PWk7Kyt0KWUucHVzaChDbXQoblt0XSkuc2NhbGUobykpO2NvbnN0IGk9bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24sZSx0LmJsZW5kTW9kZSk7cmV0dXJuIGkudXVpZD10LnV1aWQsaX1zdGF0aWMgdG9KU09OKHQpe2NvbnN0IGU9W10sbj10LnRyYWNrcyxvPXtuYW1lOnQubmFtZSxkdXJhdGlvbjp0LmR1cmF0aW9uLHRyYWNrczplLHV1aWQ6dC51dWlkLGJsZW5kTW9kZTp0LmJsZW5kTW9kZX07Zm9yKGxldCB0PTAsbz1uLmxlbmd0aDt0IT09bzsrK3QpZS5wdXNoKHBtdC50b0pTT04oblt0XSkpO3JldHVybiBvfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LGUsbixvKXtjb25zdCBpPWUubGVuZ3RoLGE9W107Zm9yKGxldCB0PTA7dDxpO3QrKyl7bGV0IHI9W10scz1bXTtyLnB1c2goKHQraS0xKSVpLHQsKHQrMSklaSkscy5wdXNoKDAsMSwwKTtjb25zdCBsPXJtdC5nZXRLZXlmcmFtZU9yZGVyKHIpO3I9cm10LnNvcnRlZEFycmF5KHIsMSxsKSxzPXJtdC5zb3J0ZWRBcnJheShzLDEsbCksb3x8MCE9PXJbMF18fChyLnB1c2goaSkscy5wdXNoKHNbMF0pKSxhLnB1c2gobmV3IGZtdCgiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1siK2VbdF0ubmFtZSsiXSIscixzKS5zY2FsZSgxL24pKX1yZXR1cm4gbmV3IHRoaXModCwtMSxhKX1zdGF0aWMgZmluZEJ5TmFtZSh0LGUpe2xldCBuPXQ7aWYoIUFycmF5LmlzQXJyYXkodCkpe2NvbnN0IGU9dDtuPWUuZ2VvbWV0cnkmJmUuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8ZS5hbmltYXRpb25zfWZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKWlmKG5bdF0ubmFtZT09PWUpcmV0dXJuIG5bdF07cmV0dXJuIG51bGx9c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKHQsZSxuKXtjb25zdCBvPXt9LGk9L14oW1x3LV0qPykoW1xkXSspJC87Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXRbZV0sYT1uLm5hbWUubWF0Y2goaSk7aWYoYSYmYS5sZW5ndGg+MSl7Y29uc3QgdD1hWzFdO2xldCBlPW9bdF07ZXx8KG9bdF09ZT1bXSksZS5wdXNoKG4pfX1jb25zdCBhPVtdO2Zvcihjb25zdCB0IGluIG8pYS5wdXNoKHRoaXMuQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UodCxvW3RdLGUsbikpO3JldHVybiBhfXN0YXRpYyBwYXJzZUFuaW1hdGlvbih0LGUpe2lmKCF0KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25DbGlwOiBObyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhLiIpLG51bGw7Y29uc3Qgbj1mdW5jdGlvbih0LGUsbixvLGkpe2lmKDAhPT1uLmxlbmd0aCl7Y29uc3QgYT1bXSxyPVtdO3JtdC5mbGF0dGVuSlNPTihuLGEscixvKSwwIT09YS5sZW5ndGgmJmkucHVzaChuZXcgdChlLGEscikpfX0sbz1bXSxpPXQubmFtZXx8ImRlZmF1bHQiLGE9dC5mcHN8fDMwLHI9dC5ibGVuZE1vZGU7bGV0IHM9dC5sZW5ndGh8fC0xO2NvbnN0IGw9dC5oaWVyYXJjaHl8fFtdO2ZvcihsZXQgdD0wO3Q8bC5sZW5ndGg7dCsrKXtjb25zdCBpPWxbdF0ua2V5cztpZihpJiYwIT09aS5sZW5ndGgpaWYoaVswXS5tb3JwaFRhcmdldHMpe2NvbnN0IHQ9e307bGV0IGU7Zm9yKGU9MDtlPGkubGVuZ3RoO2UrKylpZihpW2VdLm1vcnBoVGFyZ2V0cylmb3IobGV0IG49MDtuPGlbZV0ubW9ycGhUYXJnZXRzLmxlbmd0aDtuKyspdFtpW2VdLm1vcnBoVGFyZ2V0c1tuXV09LTE7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3QgdD1bXSxhPVtdO2ZvcihsZXQgbz0wO28hPT1pW2VdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7KytvKXtjb25zdCBvPWlbZV07dC5wdXNoKG8udGltZSksYS5wdXNoKG8ubW9ycGhUYXJnZXQ9PT1uPzE6MCl9by5wdXNoKG5ldyBmbXQoIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK24rIl0iLHQsYSkpfXM9dC5sZW5ndGgqKGF8fDEpfWVsc2V7Y29uc3QgYT0iLmJvbmVzWyIrZVt0XS5uYW1lKyJdIjtuKHltdCxhKyIucG9zaXRpb24iLGksInBvcyIsbyksbihobXQsYSsiLnF1YXRlcm5pb24iLGksInJvdCIsbyksbih5bXQsYSsiLnNjYWxlIixpLCJzY2wiLG8pfX1yZXR1cm4gMD09PW8ubGVuZ3RoP251bGw6bmV3IHRoaXMoaSxzLG8scil9cmVzZXREdXJhdGlvbigpe2xldCB0PTA7Zm9yKGxldCBlPTAsbj10aGlzLnRyYWNrcy5sZW5ndGg7ZSE9PW47KytlKXtjb25zdCBuPXRoaXMudHJhY2tzW2VdO3Q9TWF0aC5tYXgodCxuLnRpbWVzW24udGltZXMubGVuZ3RoLTFdKX1yZXR1cm4gdGhpcy5kdXJhdGlvbj10LHRoaXN9dHJpbSgpe2ZvcihsZXQgdD0wO3Q8dGhpcy50cmFja3MubGVuZ3RoO3QrKyl0aGlzLnRyYWNrc1t0XS50cmltKDAsdGhpcy5kdXJhdGlvbik7cmV0dXJuIHRoaXN9dmFsaWRhdGUoKXtsZXQgdD0hMDtmb3IobGV0IGU9MDtlPHRoaXMudHJhY2tzLmxlbmd0aDtlKyspdD10JiZ0aGlzLnRyYWNrc1tlXS52YWxpZGF0ZSgpO3JldHVybiB0fW9wdGltaXplKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLm9wdGltaXplKCk7cmV0dXJuIHRoaXN9Y2xvbmUoKXtjb25zdCB0PVtdO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0LnB1c2godGhpcy50cmFja3NbZV0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19ZnVuY3Rpb24gQ210KHQpe2lmKHZvaWQgMD09PXQudHlwZSl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIHR5cGUgdW5kZWZpbmVkLCBjYW4gbm90IHBhcnNlIik7Y29uc3QgZT0oZnVuY3Rpb24gbih0KXtzd2l0Y2godC50b0xvd2VyQ2FzZSgpKXtjYXNlInNjYWxhciI6Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQiOmNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOnJldHVybiBmbXQ7Y2FzZSJ2ZWN0b3IiOmNhc2UidmVjdG9yMiI6Y2FzZSJ2ZWN0b3IzIjpjYXNlInZlY3RvcjQiOnJldHVybiB5bXQ7Y2FzZSJjb2xvciI6cmV0dXJuIHVtdDtjYXNlInF1YXRlcm5pb24iOnJldHVybiBobXQ7Y2FzZSJib29sIjpjYXNlImJvb2xlYW4iOnJldHVybiBtbXQ7Y2FzZSJzdHJpbmciOnJldHVybiBibXR9dGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBVbnN1cHBvcnRlZCB0eXBlTmFtZTogIit0KX0pKHQudHlwZSk7aWYodm9pZCAwPT09dC50aW1lcyl7Y29uc3QgZT1bXSxuPVtdO3JtdC5mbGF0dGVuSlNPTih0LmtleXMsZSxuLCJ2YWx1ZSIpLHQudGltZXM9ZSx0LnZhbHVlcz1ufXJldHVybiB2b2lkIDAhPT1lLnBhcnNlP2UucGFyc2UodCk6bmV3IGUodC5uYW1lLHQudGltZXMsdC52YWx1ZXMsdC5pbnRlcnBvbGF0aW9uKX1jb25zdCBNbXQ9e2VuYWJsZWQ6ITEsZmlsZXM6e30sYWRkOmZ1bmN0aW9uKHQsZSl7ITEhPT10aGlzLmVuYWJsZWQmJih0aGlzLmZpbGVzW3RdPWUpfSxnZXQ6ZnVuY3Rpb24odCl7aWYoITEhPT10aGlzLmVuYWJsZWQpcmV0dXJuIHRoaXMuZmlsZXNbdF19LHJlbW92ZTpmdW5jdGlvbih0KXtkZWxldGUgdGhpcy5maWxlc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmZpbGVzPXt9fX0sdm10PW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsbil7Y29uc3Qgbz10aGlzO2xldCBpLGE9ITEscj0wLHM9MDtjb25zdCBsPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9ZSx0aGlzLm9uRXJyb3I9bix0aGlzLml0ZW1TdGFydD1mdW5jdGlvbih0KXtzKyssITE9PT1hJiZ2b2lkIDAhPT1vLm9uU3RhcnQmJm8ub25TdGFydCh0LHIscyksYT0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKHQpe3IrKyx2b2lkIDAhPT1vLm9uUHJvZ3Jlc3MmJm8ub25Qcm9ncmVzcyh0LHIscykscj09PXMmJihhPSExLHZvaWQgMCE9PW8ub25Mb2FkJiZvLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24odCl7dm9pZCAwIT09by5vbkVycm9yJiZvLm9uRXJyb3IodCl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbih0KXtyZXR1cm4gaT9pKHQpOnR9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGk9dCx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbC5wdXNoKHQsZSksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKHQpe2NvbnN0IGU9bC5pbmRleE9mKHQpO3JldHVybi0xIT09ZSYmbC5zcGxpY2UoZSwyKSx0aGlzfSx0aGlzLmdldEhhbmRsZXI9ZnVuY3Rpb24odCl7Zm9yKGxldCBlPTAsbj1sLmxlbmd0aDtlPG47ZSs9Mil7Y29uc3Qgbj1sW2VdLG89bFtlKzFdO2lmKG4uZ2xvYmFsJiYobi5sYXN0SW5kZXg9MCksbi50ZXN0KHQpKXJldHVybiBvfXJldHVybiBudWxsfX19O2NsYXNzIHhtdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09dD90OnZtdCx0aGlzLmNyb3NzT3JpZ2luPSJhbm9ueW1vdXMiLHRoaXMud2l0aENyZWRlbnRpYWxzPSExLHRoaXMucGF0aD0iIix0aGlzLnJlc291cmNlUGF0aD0iIix0aGlzLnJlcXVlc3RIZWFkZXI9e319bG9hZCgpe31sb2FkQXN5bmModCxlKXtjb25zdCBuPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihvLGkpe24ubG9hZCh0LG8sZSxpKX0pKX1wYXJzZSgpe31zZXRDcm9zc09yaWdpbih0KXtyZXR1cm4gdGhpcy5jcm9zc09yaWdpbj10LHRoaXN9c2V0V2l0aENyZWRlbnRpYWxzKHQpe3JldHVybiB0aGlzLndpdGhDcmVkZW50aWFscz10LHRoaXN9c2V0UGF0aCh0KXtyZXR1cm4gdGhpcy5wYXRoPXQsdGhpc31zZXRSZXNvdXJjZVBhdGgodCl7cmV0dXJuIHRoaXMucmVzb3VyY2VQYXRoPXQsdGhpc31zZXRSZXF1ZXN0SGVhZGVyKHQpe3JldHVybiB0aGlzLnJlcXVlc3RIZWFkZXI9dCx0aGlzfX1jb25zdCBPbXQ9e307Y2xhc3MgUG10IGV4dGVuZHMgeG10e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLG4sbyl7dm9pZCAwPT09dCYmKHQ9IiIpLHZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7Y29uc3QgaT10aGlzLGE9TW10LmdldCh0KTtpZih2b2lkIDAhPT1hKXJldHVybiBpLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZSYmZShhKSxpLm1hbmFnZXIuaXRlbUVuZCh0KX0pLDApLGE7aWYodm9pZCAwIT09T210W3RdKXJldHVybiB2b2lkIE9tdFt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOm4sb25FcnJvcjpvfSk7Y29uc3Qgcj10Lm1hdGNoKC9eZGF0YTooLio/KSg7YmFzZTY0KT8sKC4qKSQvKTtsZXQgcztpZihyKXtjb25zdCBuPXJbMV0sYT0hIXJbMl07bGV0IHM9clszXTtzPWRlY29kZVVSSUNvbXBvbmVudChzKSxhJiYocz1hdG9iKHMpKTt0cnl7bGV0IG87Y29uc3QgYT0odGhpcy5yZXNwb25zZVR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpO3N3aXRjaChhKXtjYXNlImFycmF5YnVmZmVyIjpjYXNlImJsb2IiOmNvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkocy5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8cy5sZW5ndGg7ZSsrKXRbZV09cy5jaGFyQ29kZUF0KGUpO289ImJsb2IiPT09YT9uZXcgQmxvYihbdC5idWZmZXJdLHt0eXBlOm59KTp0LmJ1ZmZlcjticmVhaztjYXNlImRvY3VtZW50Ijpjb25zdCBlPW5ldyBET01QYXJzZXI7bz1lLnBhcnNlRnJvbVN0cmluZyhzLG4pO2JyZWFrO2Nhc2UianNvbiI6bz1KU09OLnBhcnNlKHMpO2JyZWFrO2RlZmF1bHQ6bz1zfXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZSYmZShvKSxpLm1hbmFnZXIuaXRlbUVuZCh0KX0pLDApfWNhdGNoKGUpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7byYmbyhlKSxpLm1hbmFnZXIuaXRlbUVycm9yKHQpLGkubWFuYWdlci5pdGVtRW5kKHQpfSksMCl9fWVsc2V7T210W3RdPVtdLE9tdFt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOm4sb25FcnJvcjpvfSkscz1uZXcgWE1MSHR0cFJlcXVlc3Qscy5vcGVuKCJHRVQiLHQsITApLHMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsKGZ1bmN0aW9uKGUpe2NvbnN0IG49dGhpcy5yZXNwb25zZSxvPU9tdFt0XTtpZihkZWxldGUgT210W3RdLDIwMD09PXRoaXMuc3RhdHVzfHwwPT09dGhpcy5zdGF0dXMpezA9PT10aGlzLnN0YXR1cyYmY29uc29sZS53YXJuKCJUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVkLiIpLE1tdC5hZGQodCxuKTtmb3IobGV0IHQ9MCxlPW8ubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9b1t0XTtlLm9uTG9hZCYmZS5vbkxvYWQobil9aS5tYW5hZ2VyLml0ZW1FbmQodCl9ZWxzZXtmb3IobGV0IHQ9MCxuPW8ubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49b1t0XTtuLm9uRXJyb3ImJm4ub25FcnJvcihlKX1pLm1hbmFnZXIuaXRlbUVycm9yKHQpLGkubWFuYWdlci5pdGVtRW5kKHQpfX0pLCExKSxzLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIiwoZnVuY3Rpb24oZSl7Y29uc3Qgbj1PbXRbdF07Zm9yKGxldCB0PTAsbz1uLmxlbmd0aDt0PG87dCsrKXtjb25zdCBvPW5bdF07by5vblByb2dyZXNzJiZvLm9uUHJvZ3Jlc3MoZSl9fSksITEpLHMuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLChmdW5jdGlvbihlKXtjb25zdCBuPU9tdFt0XTtkZWxldGUgT210W3RdO2ZvcihsZXQgdD0wLG89bi5sZW5ndGg7dDxvO3QrKyl7Y29uc3Qgbz1uW3RdO28ub25FcnJvciYmby5vbkVycm9yKGUpfWkubWFuYWdlci5pdGVtRXJyb3IodCksaS5tYW5hZ2VyLml0ZW1FbmQodCl9KSwhMSkscy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKGZ1bmN0aW9uKGUpe2NvbnN0IG49T210W3RdO2RlbGV0ZSBPbXRbdF07Zm9yKGxldCB0PTAsbz1uLmxlbmd0aDt0PG87dCsrKXtjb25zdCBvPW5bdF07by5vbkVycm9yJiZvLm9uRXJyb3IoZSl9aS5tYW5hZ2VyLml0ZW1FcnJvcih0KSxpLm1hbmFnZXIuaXRlbUVuZCh0KX0pLCExKSx2b2lkIDAhPT10aGlzLnJlc3BvbnNlVHlwZSYmKHMucmVzcG9uc2VUeXBlPXRoaXMucmVzcG9uc2VUeXBlKSx2b2lkIDAhPT10aGlzLndpdGhDcmVkZW50aWFscyYmKHMud2l0aENyZWRlbnRpYWxzPXRoaXMud2l0aENyZWRlbnRpYWxzKSxzLm92ZXJyaWRlTWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlwZSh2b2lkIDAhPT10aGlzLm1pbWVUeXBlP3RoaXMubWltZVR5cGU6InRleHQvcGxhaW4iKTtmb3IoY29uc3QgdCBpbiB0aGlzLnJlcXVlc3RIZWFkZXIpcy5zZXRSZXF1ZXN0SGVhZGVyKHQsdGhpcy5yZXF1ZXN0SGVhZGVyW3RdKTtzLnNlbmQobnVsbCl9cmV0dXJuIGkubWFuYWdlci5pdGVtU3RhcnQodCksc31zZXRSZXNwb25zZVR5cGUodCl7cmV0dXJuIHRoaXMucmVzcG9uc2VUeXBlPXQsdGhpc31zZXRNaW1lVHlwZSh0KXtyZXR1cm4gdGhpcy5taW1lVHlwZT10LHRoaXN9fWNsYXNzIHdtdCBleHRlbmRzIHhtdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxuLG8pe3ZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7Y29uc3QgaT10aGlzLGE9TW10LmdldCh0KTtpZih2b2lkIDAhPT1hKXJldHVybiBpLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZSYmZShhKSxpLm1hbmFnZXIuaXRlbUVuZCh0KX0pLDApLGE7Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJpbWciKTtmdW5jdGlvbiBzKCl7ci5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzLCExKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixsLCExKSxNbXQuYWRkKHQsdGhpcyksZSYmZSh0aGlzKSxpLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiBsKGUpe3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIscywhMSksci5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsbCwhMSksbyYmbyhlKSxpLm1hbmFnZXIuaXRlbUVycm9yKHQpLGkubWFuYWdlci5pdGVtRW5kKHQpfXJldHVybiByLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHMsITEpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGwsITEpLCJkYXRhOiIhPT10LnN1YnN0cigwLDUpJiZ2b2lkIDAhPT10aGlzLmNyb3NzT3JpZ2luJiYoci5jcm9zc09yaWdpbj10aGlzLmNyb3NzT3JpZ2luKSxpLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHIuc3JjPXQscn19Y2xhc3Mga210IGV4dGVuZHMgeG10e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLG4sbyl7Y29uc3QgaT1uZXcgdnN0LGE9bmV3IHdtdCh0aGlzLm1hbmFnZXIpO2Euc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksYS5zZXRQYXRoKHRoaXMucGF0aCk7bGV0IHI9MDtmdW5jdGlvbiBzKG4pe2EubG9hZCh0W25dLChmdW5jdGlvbih0KXtpLmltYWdlc1tuXT10LHIrKyw2PT09ciYmKGkubmVlZHNVcGRhdGU9ITAsZSYmZShpKSl9KSx2b2lkIDAsbyl9Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDsrK2UpcyhlKTtyZXR1cm4gaX19Y2xhc3MgU210IGV4dGVuZHMgeG10e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLG4sbyl7Y29uc3QgaT1uZXcgb2F0LGE9bmV3IHdtdCh0aGlzLm1hbmFnZXIpO3JldHVybiBhLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLGEuc2V0UGF0aCh0aGlzLnBhdGgpLGEubG9hZCh0LChmdW5jdGlvbihuKXtpLmltYWdlPW47Y29uc3Qgbz10LnNlYXJjaCgvXC5qcGU/ZygkfFw/KS9pKT4wfHwwPT09dC5zZWFyY2goL15kYXRhXDppbWFnZVwvanBlZy8pO2kuZm9ybWF0PW8/UGl0OndpdCxpLm5lZWRzVXBkYXRlPSEwLHZvaWQgMCE9PWUmJmUoaSl9KSxuLG8pLGl9fWNsYXNzIERtdCBleHRlbmRzIGRwdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDdXJ2ZVBhdGgiLHRoaXMuY3VydmVzPVtdLHRoaXMuYXV0b0Nsb3NlPSExfWFkZCh0KXt0aGlzLmN1cnZlcy5wdXNoKHQpfWNsb3NlUGF0aCgpe2NvbnN0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCksZT10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMoZSl8fHRoaXMuY3VydmVzLnB1c2gobmV3IE9wdChlLHQpKX1nZXRQb2ludCh0KXtjb25zdCBlPXQqdGhpcy5nZXRMZW5ndGgoKSxuPXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7bGV0IG89MDtmb3IoO288bi5sZW5ndGg7KXtpZihuW29dPj1lKXtjb25zdCB0PW5bb10tZSxpPXRoaXMuY3VydmVzW29dLGE9aS5nZXRMZW5ndGgoKTtyZXR1cm4gaS5nZXRQb2ludEF0KDA9PT1hPzA6MS10L2EpfW8rK31yZXR1cm4gbnVsbH1nZXRMZW5ndGgoKXtjb25zdCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfWdldEN1cnZlTGVuZ3Rocygpe2lmKHRoaXMuY2FjaGVMZW5ndGhzJiZ0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGg9PT10aGlzLmN1cnZlcy5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO2NvbnN0IHQ9W107bGV0IGU9MDtmb3IobGV0IG49MCxvPXRoaXMuY3VydmVzLmxlbmd0aDtuPG87bisrKWUrPXRoaXMuY3VydmVzW25dLmdldExlbmd0aCgpLHQucHVzaChlKTtyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM9dCx0fWdldFNwYWNlZFBvaW50cyh0PTQwKXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKWUucHVzaCh0aGlzLmdldFBvaW50KG4vdCkpO3JldHVybiB0aGlzLmF1dG9DbG9zZSYmZS5wdXNoKGVbMF0pLGV9Z2V0UG9pbnRzKHQ9MTIpe2NvbnN0IGU9W107bGV0IG47Zm9yKGxldCBvPTAsaT10aGlzLmN1cnZlcztvPGkubGVuZ3RoO28rKyl7Y29uc3QgYT1pW29dLHI9YS5nZXRQb2ludHMoYSYmYS5pc0VsbGlwc2VDdXJ2ZT8yKnQ6YSYmKGEuaXNMaW5lQ3VydmV8fGEuaXNMaW5lQ3VydmUzKT8xOmEmJmEuaXNTcGxpbmVDdXJ2ZT90KmEucG9pbnRzLmxlbmd0aDp0KTtmb3IobGV0IHQ9MDt0PHIubGVuZ3RoO3QrKyl7Y29uc3Qgbz1yW3RdO24mJm4uZXF1YWxzKG8pfHwoZS5wdXNoKG8pLG49byl9fXJldHVybiB0aGlzLmF1dG9DbG9zZSYmZS5sZW5ndGg+MSYmIWVbZS5sZW5ndGgtMV0uZXF1YWxzKGVbMF0pJiZlLnB1c2goZVswXSksZX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5jdXJ2ZXM9W107Zm9yKGxldCBlPTAsbj10LmN1cnZlcy5sZW5ndGg7ZTxuO2UrKyl0aGlzLmN1cnZlcy5wdXNoKHQuY3VydmVzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzLmF1dG9DbG9zZT10LmF1dG9DbG9zZSx0aGlzfXRvSlNPTigpe2NvbnN0IHQ9c3VwZXIudG9KU09OKCk7dC5hdXRvQ2xvc2U9dGhpcy5hdXRvQ2xvc2UsdC5jdXJ2ZXM9W107Zm9yKGxldCBlPTAsbj10aGlzLmN1cnZlcy5sZW5ndGg7ZTxuO2UrKyl0LmN1cnZlcy5wdXNoKHRoaXMuY3VydmVzW2VdLnRvSlNPTigpKTtyZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLmF1dG9DbG9zZT10LmF1dG9DbG9zZSx0aGlzLmN1cnZlcz1bXTtmb3IobGV0IGU9MCxuPXQuY3VydmVzLmxlbmd0aDtlPG47ZSsrKXtjb25zdCBuPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2goKG5ldyBTcHRbbi50eXBlXSkuZnJvbUpTT04obikpfXJldHVybiB0aGlzfX1jbGFzcyBFbXQgZXh0ZW5kcyBEbXR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBhdGgiLHRoaXMuY3VycmVudFBvaW50PW5ldyBRaXQsdCYmdGhpcy5zZXRGcm9tUG9pbnRzKHQpfXNldEZyb21Qb2ludHModCl7dGhpcy5tb3ZlVG8odFswXS54LHRbMF0ueSk7Zm9yKGxldCBlPTEsbj10Lmxlbmd0aDtlPG47ZSsrKXRoaXMubGluZVRvKHRbZV0ueCx0W2VdLnkpO3JldHVybiB0aGlzfW1vdmVUbyh0LGUpe3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5zZXQodCxlKSx0aGlzfWxpbmVUbyh0LGUpe2NvbnN0IG49bmV3IE9wdCh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBRaXQodCxlKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobiksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQsZSxuLG8pe2NvbnN0IGk9bmV3IFBwdCh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBRaXQodCxlKSxuZXcgUWl0KG4sbykpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKGkpLHRoaXMuY3VycmVudFBvaW50LnNldChuLG8pLHRoaXN9YmV6aWVyQ3VydmVUbyh0LGUsbixvLGksYSl7Y29uc3Qgcj1uZXcgdnB0KHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IFFpdCh0LGUpLG5ldyBRaXQobixvKSxuZXcgUWl0KGksYSkpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKHIpLHRoaXMuY3VycmVudFBvaW50LnNldChpLGEpLHRoaXN9c3BsaW5lVGhydSh0KXtjb25zdCBlPVt0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpXS5jb25jYXQodCksbj1uZXcga3B0KGUpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKG4pLHRoaXMuY3VycmVudFBvaW50LmNvcHkodFt0Lmxlbmd0aC0xXSksdGhpc31hcmModCxlLG4sbyxpLGEpe3JldHVybiB0aGlzLmFic2FyYyh0K3RoaXMuY3VycmVudFBvaW50LngsZSt0aGlzLmN1cnJlbnRQb2ludC55LG4sbyxpLGEpLHRoaXN9YWJzYXJjKHQsZSxuLG8saSxhKXtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQsZSxuLG4sbyxpLGEpLHRoaXN9ZWxsaXBzZSh0LGUsbixvLGksYSxyLHMpe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCt0aGlzLmN1cnJlbnRQb2ludC54LGUrdGhpcy5jdXJyZW50UG9pbnQueSxuLG8saSxhLHIscyksdGhpc31hYnNlbGxpcHNlKHQsZSxuLG8saSxhLHIscyl7Y29uc3QgbD1uZXcgcHB0KHQsZSxuLG8saSxhLHIscyk7aWYodGhpcy5jdXJ2ZXMubGVuZ3RoPjApe2NvbnN0IHQ9bC5nZXRQb2ludCgwKTt0LmVxdWFscyh0aGlzLmN1cnJlbnRQb2ludCl8fHRoaXMubGluZVRvKHQueCx0LnkpfXRoaXMuY3VydmVzLnB1c2gobCk7Y29uc3QgYz1sLmdldFBvaW50KDEpO3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KGMpLHRoaXN9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHQuY3VycmVudFBvaW50KSx0aGlzfXRvSlNPTigpe2NvbnN0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuY3VycmVudFBvaW50PXRoaXMuY3VycmVudFBvaW50LnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLmN1cnJlbnRQb2ludC5mcm9tQXJyYXkodC5jdXJyZW50UG9pbnQpLHRoaXN9fWNsYXNzIFJtdCBleHRlbmRzIEVtdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnV1aWQ9cWl0KCksdGhpcy50eXBlPSJTaGFwZSIsdGhpcy5ob2xlcz1bXX1nZXRQb2ludHNIb2xlcyh0KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wLG89dGhpcy5ob2xlcy5sZW5ndGg7bjxvO24rKyllW25dPXRoaXMuaG9sZXNbbl0uZ2V0UG9pbnRzKHQpO3JldHVybiBlfWV4dHJhY3RQb2ludHModCl7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKHQpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXModCl9fWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLG49dC5ob2xlcy5sZW5ndGg7ZTxuO2UrKyl0aGlzLmhvbGVzLnB1c2godC5ob2xlc1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc310b0pTT04oKXtjb25zdCB0PXN1cGVyLnRvSlNPTigpO3QudXVpZD10aGlzLnV1aWQsdC5ob2xlcz1bXTtmb3IobGV0IGU9MCxuPXRoaXMuaG9sZXMubGVuZ3RoO2U8bjtlKyspdC5ob2xlcy5wdXNoKHRoaXMuaG9sZXNbZV0udG9KU09OKCkpO3JldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMudXVpZD10LnV1aWQsdGhpcy5ob2xlcz1bXTtmb3IobGV0IGU9MCxuPXQuaG9sZXMubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dC5ob2xlc1tlXTt0aGlzLmhvbGVzLnB1c2goKG5ldyBFbXQpLmZyb21KU09OKG4pKX1yZXR1cm4gdGhpc319Y2xhc3MgQW10IGV4dGVuZHMgcHJ0e2NvbnN0cnVjdG9yKHQsZT0xKXtzdXBlcigpLHRoaXMudHlwZT0iTGlnaHQiLHRoaXMuY29sb3I9bmV3IFJydCh0KSx0aGlzLmludGVuc2l0eT1lfWRpc3Bvc2UoKXt9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHksdGhpc310b0pTT04odCl7Y29uc3QgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LmNvbG9yPXRoaXMuY29sb3IuZ2V0SGV4KCksZS5vYmplY3QuaW50ZW5zaXR5PXRoaXMuaW50ZW5zaXR5LHZvaWQgMCE9PXRoaXMuZ3JvdW5kQ29sb3ImJihlLm9iamVjdC5ncm91bmRDb2xvcj10aGlzLmdyb3VuZENvbG9yLmdldEhleCgpKSx2b2lkIDAhPT10aGlzLmRpc3RhbmNlJiYoZS5vYmplY3QuZGlzdGFuY2U9dGhpcy5kaXN0YW5jZSksdm9pZCAwIT09dGhpcy5hbmdsZSYmKGUub2JqZWN0LmFuZ2xlPXRoaXMuYW5nbGUpLHZvaWQgMCE9PXRoaXMuZGVjYXkmJihlLm9iamVjdC5kZWNheT10aGlzLmRlY2F5KSx2b2lkIDAhPT10aGlzLnBlbnVtYnJhJiYoZS5vYmplY3QucGVudW1icmE9dGhpcy5wZW51bWJyYSksdm9pZCAwIT09dGhpcy5zaGFkb3cmJihlLm9iamVjdC5zaGFkb3c9dGhpcy5zaGFkb3cudG9KU09OKCkpLGV9fUFtdC5wcm90b3R5cGUuaXNMaWdodD0hMCxjbGFzcyBleHRlbmRzIEFtdHtjb25zdHJ1Y3Rvcih0LGUsbil7c3VwZXIodCxuKSx0aGlzLnR5cGU9IkhlbWlzcGhlcmVMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KHBydC5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgUnJ0KGUpfWNvcHkodCl7cmV0dXJuIEFtdC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5ncm91bmRDb2xvci5jb3B5KHQuZ3JvdW5kQ29sb3IpLHRoaXN9fS5wcm90b3R5cGUuaXNIZW1pc3BoZXJlTGlnaHQ9ITA7Y29uc3QgVG10PW5ldyBCYXQsTm10PW5ldyBjYXQsem10PW5ldyBjYXQ7Y2xhc3MgSW10e2NvbnN0cnVjdG9yKHQpe3RoaXMuY2FtZXJhPXQsdGhpcy5iaWFzPTAsdGhpcy5ub3JtYWxCaWFzPTAsdGhpcy5yYWRpdXM9MSx0aGlzLm1hcFNpemU9bmV3IFFpdCg1MTIsNTEyKSx0aGlzLm1hcD1udWxsLHRoaXMubWFwUGFzcz1udWxsLHRoaXMubWF0cml4PW5ldyBCYXQsdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy5fZnJ1c3R1bT1uZXcgRXN0LHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgUWl0KDEsMSksdGhpcy5fdmlld3BvcnRDb3VudD0xLHRoaXMuX3ZpZXdwb3J0cz1bbmV3IGFhdCgwLDAsMSwxKV19Z2V0Vmlld3BvcnRDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cG9ydENvdW50fWdldEZydXN0dW0oKXtyZXR1cm4gdGhpcy5fZnJ1c3R1bX11cGRhdGVNYXRyaWNlcyh0KXtjb25zdCBlPXRoaXMuY2FtZXJhLG49dGhpcy5tYXRyaXg7Tm10LnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxlLnBvc2l0aW9uLmNvcHkoTm10KSx6bXQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQudGFyZ2V0Lm1hdHJpeFdvcmxkKSxlLmxvb2tBdCh6bXQpLGUudXBkYXRlTWF0cml4V29ybGQoKSxUbXQubXVsdGlwbHlNYXRyaWNlcyhlLnByb2plY3Rpb25NYXRyaXgsZS5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMuX2ZydXN0dW0uc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoVG10KSxuLnNldCguNSwwLDAsLjUsMCwuNSwwLC41LDAsMCwuNSwuNSwwLDAsMCwxKSxuLm11bHRpcGx5KGUucHJvamVjdGlvbk1hdHJpeCksbi5tdWx0aXBseShlLm1hdHJpeFdvcmxkSW52ZXJzZSl9Z2V0Vmlld3BvcnQodCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0c1t0XX1nZXRGcmFtZUV4dGVudHMoKXtyZXR1cm4gdGhpcy5fZnJhbWVFeHRlbnRzfWRpc3Bvc2UoKXt0aGlzLm1hcCYmdGhpcy5tYXAuZGlzcG9zZSgpLHRoaXMubWFwUGFzcyYmdGhpcy5tYXBQYXNzLmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiB0aGlzLmNhbWVyYT10LmNhbWVyYS5jbG9uZSgpLHRoaXMuYmlhcz10LmJpYXMsdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpcy5tYXBTaXplLmNvcHkodC5tYXBTaXplKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfXRvSlNPTigpe2NvbnN0IHQ9e307cmV0dXJuIDAhPT10aGlzLmJpYXMmJih0LmJpYXM9dGhpcy5iaWFzKSwwIT09dGhpcy5ub3JtYWxCaWFzJiYodC5ub3JtYWxCaWFzPXRoaXMubm9ybWFsQmlhcyksMSE9PXRoaXMucmFkaXVzJiYodC5yYWRpdXM9dGhpcy5yYWRpdXMpLDUxMj09PXRoaXMubWFwU2l6ZS54JiY1MTI9PT10aGlzLm1hcFNpemUueXx8KHQubWFwU2l6ZT10aGlzLm1hcFNpemUudG9BcnJheSgpKSx0LmNhbWVyYT10aGlzLmNhbWVyYS50b0pTT04oITEpLm9iamVjdCxkZWxldGUgdC5jYW1lcmEubWF0cml4LHR9fWNsYXNzIEhtdCBleHRlbmRzIEltdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBfc3QoNTAsMSwuNSw1MDApKSx0aGlzLmZvY3VzPTF9dXBkYXRlTWF0cmljZXModCl7Y29uc3QgZT10aGlzLmNhbWVyYSxuPTIqWWl0KnQuYW5nbGUqdGhpcy5mb2N1cyxvPXRoaXMubWFwU2l6ZS53aWR0aC90aGlzLm1hcFNpemUuaGVpZ2h0LGk9dC5kaXN0YW5jZXx8ZS5mYXI7bj09PWUuZm92JiZvPT09ZS5hc3BlY3QmJmk9PT1lLmZhcnx8KGUuZm92PW4sZS5hc3BlY3Q9byxlLmZhcj1pLGUudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxzdXBlci51cGRhdGVNYXRyaWNlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzfX1IbXQucHJvdG90eXBlLmlzU3BvdExpZ2h0U2hhZG93PSEwLGNsYXNzIGV4dGVuZHMgQW10e2NvbnN0cnVjdG9yKHQsZSxuPTAsbz1NYXRoLlBJLzMsaT0wLGE9MSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlNwb3RMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KHBydC5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IHBydCx0aGlzLmRpc3RhbmNlPW4sdGhpcy5hbmdsZT1vLHRoaXMucGVudW1icmE9aSx0aGlzLmRlY2F5PWEsdGhpcy5zaGFkb3c9bmV3IEhtdH1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC9NYXRoLlBJfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5hbmdsZT10LmFuZ2xlLHRoaXMucGVudW1icmE9dC5wZW51bWJyYSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fS5wcm90b3R5cGUuaXNTcG90TGlnaHQ9ITA7Y29uc3QgRm10PW5ldyBCYXQsTG10PW5ldyBjYXQsQm10PW5ldyBjYXQ7Y2xhc3MgVm10IGV4dGVuZHMgSW10e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IF9zdCg5MCwxLC41LDUwMCkpLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgUWl0KDQsMiksdGhpcy5fdmlld3BvcnRDb3VudD02LHRoaXMuX3ZpZXdwb3J0cz1bbmV3IGFhdCgyLDEsMSwxKSxuZXcgYWF0KDAsMSwxLDEpLG5ldyBhYXQoMywxLDEsMSksbmV3IGFhdCgxLDEsMSwxKSxuZXcgYWF0KDMsMCwxLDEpLG5ldyBhYXQoMSwwLDEsMSldLHRoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgY2F0KDEsMCwwKSxuZXcgY2F0KC0xLDAsMCksbmV3IGNhdCgwLDAsMSksbmV3IGNhdCgwLDAsLTEpLG5ldyBjYXQoMCwxLDApLG5ldyBjYXQoMCwtMSwwKV0sdGhpcy5fY3ViZVVwcz1bbmV3IGNhdCgwLDEsMCksbmV3IGNhdCgwLDEsMCksbmV3IGNhdCgwLDEsMCksbmV3IGNhdCgwLDEsMCksbmV3IGNhdCgwLDAsMSksbmV3IGNhdCgwLDAsLTEpXX11cGRhdGVNYXRyaWNlcyh0LGU9MCl7Y29uc3Qgbj10aGlzLmNhbWVyYSxvPXRoaXMubWF0cml4LGk9dC5kaXN0YW5jZXx8bi5mYXI7aSE9PW4uZmFyJiYobi5mYXI9aSxuLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksTG10LnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxuLnBvc2l0aW9uLmNvcHkoTG10KSxCbXQuY29weShuLnBvc2l0aW9uKSxCbXQuYWRkKHRoaXMuX2N1YmVEaXJlY3Rpb25zW2VdKSxuLnVwLmNvcHkodGhpcy5fY3ViZVVwc1tlXSksbi5sb29rQXQoQm10KSxuLnVwZGF0ZU1hdHJpeFdvcmxkKCksby5tYWtlVHJhbnNsYXRpb24oLUxtdC54LC1MbXQueSwtTG10LnopLEZtdC5tdWx0aXBseU1hdHJpY2VzKG4ucHJvamVjdGlvbk1hdHJpeCxuLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChGbXQpfX1WbXQucHJvdG90eXBlLmlzUG9pbnRMaWdodFNoYWRvdz0hMCxjbGFzcyBleHRlbmRzIEFtdHtjb25zdHJ1Y3Rvcih0LGUsbj0wLG89MSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlBvaW50TGlnaHQiLHRoaXMuZGlzdGFuY2U9bix0aGlzLmRlY2F5PW8sdGhpcy5zaGFkb3c9bmV3IFZtdH1nZXQgcG93ZXIoKXtyZXR1cm4gNCp0aGlzLmludGVuc2l0eSpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10Lyg0Kk1hdGguUEkpfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319LnByb3RvdHlwZS5pc1BvaW50TGlnaHQ9ITA7Y2xhc3Mgam10IGV4dGVuZHMgSW10e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFVzdCgtNSw1LDUsLTUsLjUsNTAwKSl9fWptdC5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0U2hhZG93PSEwLGNsYXNzIGV4dGVuZHMgQW10e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkRpcmVjdGlvbmFsTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShwcnQuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMudGFyZ2V0PW5ldyBwcnQsdGhpcy5zaGFkb3c9bmV3IGptdH1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fS5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0PSEwLGNsYXNzIGV4dGVuZHMgQW10e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkFtYmllbnRMaWdodCJ9fS5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHQ9ITAsY2xhc3MgZXh0ZW5kcyBBbXR7Y29uc3RydWN0b3IodCxlLG49MTAsbz0xMCl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlJlY3RBcmVhTGlnaHQiLHRoaXMud2lkdGg9bix0aGlzLmhlaWdodD1vfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXN9dG9KU09OKHQpe2NvbnN0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC53aWR0aD10aGlzLndpZHRoLGUub2JqZWN0LmhlaWdodD10aGlzLmhlaWdodCxlfX0ucHJvdG90eXBlLmlzUmVjdEFyZWFMaWdodD0hMDtjbGFzcyBVbXR7Y29uc3RydWN0b3IoKXt0aGlzLmNvZWZmaWNpZW50cz1bXTtmb3IobGV0IHQ9MDt0PDk7dCsrKXRoaXMuY29lZmZpY2llbnRzLnB1c2gobmV3IGNhdCl9c2V0KHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uY29weSh0W2VdKTtyZXR1cm4gdGhpc316ZXJvKCl7Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50c1t0XS5zZXQoMCwwLDApO3JldHVybiB0aGlzfWdldEF0KHQsZSl7Y29uc3Qgbj10Lngsbz10LnksaT10LnosYT10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KGFbMF0pLm11bHRpcGx5U2NhbGFyKC4yODIwOTUpLGUuYWRkU2NhbGVkVmVjdG9yKGFbMV0sLjQ4ODYwMypvKSxlLmFkZFNjYWxlZFZlY3RvcihhWzJdLC40ODg2MDMqaSksZS5hZGRTY2FsZWRWZWN0b3IoYVszXSwuNDg4NjAzKm4pLGUuYWRkU2NhbGVkVmVjdG9yKGFbNF0sbipvKjEuMDkyNTQ4KSxlLmFkZFNjYWxlZFZlY3RvcihhWzVdLG8qaSoxLjA5MjU0OCksZS5hZGRTY2FsZWRWZWN0b3IoYVs2XSwuMzE1MzkyKigzKmkqaS0xKSksZS5hZGRTY2FsZWRWZWN0b3IoYVs3XSxuKmkqMS4wOTI1NDgpLGUuYWRkU2NhbGVkVmVjdG9yKGFbOF0sLjU0NjI3NCoobipuLW8qbykpLGV9Z2V0SXJyYWRpYW5jZUF0KHQsZSl7Y29uc3Qgbj10Lngsbz10LnksaT10LnosYT10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KGFbMF0pLm11bHRpcGx5U2NhbGFyKC44ODYyMjcpLGUuYWRkU2NhbGVkVmVjdG9yKGFbMV0sMS4wMjMzMjgqbyksZS5hZGRTY2FsZWRWZWN0b3IoYVsyXSwxLjAyMzMyOCppKSxlLmFkZFNjYWxlZFZlY3RvcihhWzNdLDEuMDIzMzI4Km4pLGUuYWRkU2NhbGVkVmVjdG9yKGFbNF0sLjg1ODA4NipuKm8pLGUuYWRkU2NhbGVkVmVjdG9yKGFbNV0sLjg1ODA4NipvKmkpLGUuYWRkU2NhbGVkVmVjdG9yKGFbNl0sLjc0MzEyNSppKmktLjI0NzcwOCksZS5hZGRTY2FsZWRWZWN0b3IoYVs3XSwuODU4MDg2Km4qaSksZS5hZGRTY2FsZWRWZWN0b3IoYVs4XSwuNDI5MDQzKihuKm4tbypvKSksZX1hZGQodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5hZGQodC5jb2VmZmljaWVudHNbZV0pO3JldHVybiB0aGlzfWFkZFNjYWxlZFNIKHQsZSl7Zm9yKGxldCBuPTA7bjw5O24rKyl0aGlzLmNvZWZmaWNpZW50c1tuXS5hZGRTY2FsZWRWZWN0b3IodC5jb2VmZmljaWVudHNbbl0sZSk7cmV0dXJuIHRoaXN9c2NhbGUodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5tdWx0aXBseVNjYWxhcih0KTtyZXR1cm4gdGhpc31sZXJwKHQsZSl7Zm9yKGxldCBuPTA7bjw5O24rKyl0aGlzLmNvZWZmaWNpZW50c1tuXS5sZXJwKHQuY29lZmZpY2llbnRzW25dLGUpO3JldHVybiB0aGlzfWVxdWFscyh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKWlmKCF0aGlzLmNvZWZmaWNpZW50c1tlXS5lcXVhbHModC5jb2VmZmljaWVudHNbZV0pKXJldHVybiExO3JldHVybiEwfWNvcHkodCl7cmV0dXJuIHRoaXMuc2V0KHQuY29lZmZpY2llbnRzKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1mcm9tQXJyYXkodCxlPTApe2NvbnN0IG49dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCBvPTA7bzw5O28rKyluW29dLmZyb21BcnJheSh0LGUrMypvKTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtjb25zdCBuPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgbz0wO288OTtvKyspbltvXS50b0FycmF5KHQsZSszKm8pO3JldHVybiB0fXN0YXRpYyBnZXRCYXNpc0F0KHQsZSl7Y29uc3Qgbj10Lngsbz10LnksaT10Lno7ZVswXT0uMjgyMDk1LGVbMV09LjQ4ODYwMypvLGVbMl09LjQ4ODYwMyppLGVbM109LjQ4ODYwMypuLGVbNF09MS4wOTI1NDgqbipvLGVbNV09MS4wOTI1NDgqbyppLGVbNl09LjMxNTM5MiooMyppKmktMSksZVs3XT0xLjA5MjU0OCpuKmksZVs4XT0uNTQ2Mjc0KihuKm4tbypvKX19VW10LnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7Y2xhc3MgR210IGV4dGVuZHMgQW10e2NvbnN0cnVjdG9yKHQ9bmV3IFVtdCxlPTEpe3N1cGVyKHZvaWQgMCxlKSx0aGlzLnNoPXR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnNoLmNvcHkodC5zaCksdGhpc31mcm9tSlNPTih0KXtyZXR1cm4gdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHksdGhpcy5zaC5mcm9tQXJyYXkodC5zaCksdGhpc310b0pTT04odCl7Y29uc3QgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LnNoPXRoaXMuc2gudG9BcnJheSgpLGV9fWxldCBXbXQ7R210LnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITAsY2xhc3MgZXh0ZW5kcyBxcnR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5zdGFuY2VDb3VudD0xLzB9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlQ291bnQ9dC5pbnN0YW5jZUNvdW50LHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9dG9KU09OKCl7Y29uc3QgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fS5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMCxjbGFzcyBleHRlbmRzIHpydHtjb25zdHJ1Y3Rvcih0LGUsbixvPTEpeyJudW1iZXIiPT10eXBlb2YgbiYmKG89bixuPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxzdXBlcih0LGUsbiksdGhpcy5tZXNoUGVyQXR0cmlidXRlPW99Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9dG9KU09OKCl7Y29uc3QgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSx0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwLHR9fS5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU9ITAsY2xhc3MgZXh0ZW5kcyB4bXR7Y29uc3RydWN0b3IodCl7c3VwZXIodCksInVuZGVmaW5lZCI9PXR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogY3JlYXRlSW1hZ2VCaXRtYXAoKSBub3Qgc3VwcG9ydGVkLiIpLCJ1bmRlZmluZWQiPT10eXBlb2YgZmV0Y2gmJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGZldGNoKCkgbm90IHN1cHBvcnRlZC4iKSx0aGlzLm9wdGlvbnM9e3ByZW11bHRpcGx5QWxwaGE6Im5vbmUifX1zZXRPcHRpb25zKHQpe3JldHVybiB0aGlzLm9wdGlvbnM9dCx0aGlzfWxvYWQodCxlLG4sbyl7dm9pZCAwPT09dCYmKHQ9IiIpLHZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7Y29uc3QgaT10aGlzLGE9TW10LmdldCh0KTtpZih2b2lkIDAhPT1hKXJldHVybiBpLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZSYmZShhKSxpLm1hbmFnZXIuaXRlbUVuZCh0KX0pLDApLGE7Y29uc3Qgcj17fTtyLmNyZWRlbnRpYWxzPSJhbm9ueW1vdXMiPT09dGhpcy5jcm9zc09yaWdpbj8ic2FtZS1vcmlnaW4iOiJpbmNsdWRlIixyLmhlYWRlcnM9dGhpcy5yZXF1ZXN0SGVhZGVyLGZldGNoKHQscikudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuYmxvYigpfSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBjcmVhdGVJbWFnZUJpdG1hcCh0LE9iamVjdC5hc3NpZ24oaS5vcHRpb25zLHtjb2xvclNwYWNlQ29udmVyc2lvbjoibm9uZSJ9KSl9KSkudGhlbigoZnVuY3Rpb24obil7TW10LmFkZCh0LG4pLGUmJmUobiksaS5tYW5hZ2VyLml0ZW1FbmQodCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe28mJm8oZSksaS5tYW5hZ2VyLml0ZW1FcnJvcih0KSxpLm1hbmFnZXIuaXRlbUVuZCh0KX0pKSxpLm1hbmFnZXIuaXRlbVN0YXJ0KHQpfX0ucHJvdG90eXBlLmlzSW1hZ2VCaXRtYXBMb2FkZXI9ITA7Y2xhc3MgWW10IGV4dGVuZHMgeG10e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLG4sbyl7Y29uc3QgaT10aGlzLGE9bmV3IFBtdCh0aGlzLm1hbmFnZXIpO2Euc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLGEuc2V0UGF0aCh0aGlzLnBhdGgpLGEuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGEuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxhLmxvYWQodCwoZnVuY3Rpb24obil7dHJ5e2NvbnN0IHQ9bi5zbGljZSgwKTsodm9pZCAwPT09V210JiYoV210PW5ldyh3aW5kb3cuQXVkaW9Db250ZXh0fHx3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSksV210KS5kZWNvZGVBdWRpb0RhdGEodCwoZnVuY3Rpb24odCl7ZSh0KX0pKX1jYXRjaChlKXtvP28oZSk6Y29uc29sZS5lcnJvcihlKSxpLm1hbmFnZXIuaXRlbUVycm9yKHQpfX0pLG4sbyl9fShjbGFzcyBleHRlbmRzIEdtdHtjb25zdHJ1Y3Rvcih0LGUsbj0xKXtzdXBlcih2b2lkIDAsbik7Y29uc3Qgbz0obmV3IFJydCkuc2V0KHQpLGk9KG5ldyBScnQpLnNldChlKSxhPW5ldyBjYXQoby5yLG8uZyxvLmIpLHI9bmV3IGNhdChpLnIsaS5nLGkuYikscz1NYXRoLnNxcnQoTWF0aC5QSSksbD1zKk1hdGguc3FydCguNzUpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLmNvcHkoYSkuYWRkKHIpLm11bHRpcGx5U2NhbGFyKHMpLHRoaXMuc2guY29lZmZpY2llbnRzWzFdLmNvcHkoYSkuc3ViKHIpLm11bHRpcGx5U2NhbGFyKGwpfX0pLnByb3RvdHlwZS5pc0hlbWlzcGhlcmVMaWdodFByb2JlPSEwLGNsYXNzIGV4dGVuZHMgR210e2NvbnN0cnVjdG9yKHQsZT0xKXtzdXBlcih2b2lkIDAsZSk7Y29uc3Qgbj0obmV3IFJydCkuc2V0KHQpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLnNldChuLnIsbi5nLG4uYikubXVsdGlwbHlTY2FsYXIoMipNYXRoLnNxcnQoTWF0aC5QSSkpfX0ucHJvdG90eXBlLmlzQW1iaWVudExpZ2h0UHJvYmU9ITA7Y2xhc3MgcW10e2NvbnN0cnVjdG9yKHQsZSxuKXtsZXQgbyxpLGE7c3dpdGNoKHRoaXMuYmluZGluZz10LHRoaXMudmFsdWVTaXplPW4sZSl7Y2FzZSJxdWF0ZXJuaW9uIjpvPXRoaXMuX3NsZXJwLGk9dGhpcy5fc2xlcnBBZGRpdGl2ZSxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoNipuKSx0aGlzLl93b3JrSW5kZXg9NTticmVhaztjYXNlInN0cmluZyI6Y2FzZSJib29sIjpvPXRoaXMuX3NlbGVjdCxpPXRoaXMuX3NlbGVjdCxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcix0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkoNSpuKTticmVhaztkZWZhdWx0Om89dGhpcy5fbGVycCxpPXRoaXMuX2xlcnBBZGRpdGl2ZSxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoNSpuKX10aGlzLl9taXhCdWZmZXJSZWdpb249byx0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZT1pLHRoaXMuX3NldElkZW50aXR5PWEsdGhpcy5fb3JpZ0luZGV4PTMsdGhpcy5fYWRkSW5kZXg9NCx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHRoaXMudXNlQ291bnQ9MCx0aGlzLnJlZmVyZW5jZUNvdW50PTB9YWNjdW11bGF0ZSh0LGUpe2NvbnN0IG49dGhpcy5idWZmZXIsbz10aGlzLnZhbHVlU2l6ZSxpPXQqbytvO2xldCBhPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZigwPT09YSl7Zm9yKGxldCB0PTA7dCE9PW87Kyt0KW5baSt0XT1uW3RdO2E9ZX1lbHNlIGErPWUsdGhpcy5fbWl4QnVmZmVyUmVnaW9uKG4saSwwLGUvYSxvKTt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9YX1hY2N1bXVsYXRlQWRkaXRpdmUodCl7Y29uc3QgZT10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplLG89bip0aGlzLl9hZGRJbmRleDswPT09dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUoZSxvLDAsdCxuKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH1hcHBseSh0KXtjb25zdCBlPXRoaXMudmFsdWVTaXplLG49dGhpcy5idWZmZXIsbz10KmUrZSxpPXRoaXMuY3VtdWxhdGl2ZVdlaWdodCxhPXRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlLHI9dGhpcy5iaW5kaW5nO3RoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTAsaTwxJiZ0aGlzLl9taXhCdWZmZXJSZWdpb24obixvLGUqdGhpcy5fb3JpZ0luZGV4LDEtaSxlKSxhPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKG4sbyx0aGlzLl9hZGRJbmRleCplLDEsZSk7Zm9yKGxldCB0PWUsaT1lK2U7dCE9PWk7Kyt0KWlmKG5bdF0hPT1uW3QrZV0pe3Iuc2V0VmFsdWUobixvKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtjb25zdCB0PXRoaXMuYnVmZmVyLGU9dGhpcy52YWx1ZVNpemUsbj1lKnRoaXMuX29yaWdJbmRleDt0aGlzLmJpbmRpbmcuZ2V0VmFsdWUodCxuKTtmb3IobGV0IG89ZSxpPW47byE9PWk7KytvKXRbb109dFtuK28lZV07dGhpcy5fc2V0SWRlbnRpdHkoKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wfXJlc3RvcmVPcmlnaW5hbFN0YXRlKCl7dGhpcy5iaW5kaW5nLnNldFZhbHVlKHRoaXMuYnVmZmVyLDMqdGhpcy52YWx1ZVNpemUpfV9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYygpe2NvbnN0IHQ9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUsZT10K3RoaXMudmFsdWVTaXplO2ZvcihsZXQgbj10O248ZTtuKyspdGhpcy5idWZmZXJbbl09MH1fc2V0QWRkaXRpdmVJZGVudGl0eVF1YXRlcm5pb24oKXt0aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYygpLHRoaXMuYnVmZmVyW3RoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplKzNdPTF9X3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcigpe2NvbnN0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLGU9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPTA7bjx0aGlzLnZhbHVlU2l6ZTtuKyspdGhpcy5idWZmZXJbZStuXT10aGlzLmJ1ZmZlclt0K25dfV9zZWxlY3QodCxlLG4sbyxpKXtpZihvPj0uNSlmb3IobGV0IG89MDtvIT09aTsrK28pdFtlK29dPXRbbitvXX1fc2xlcnAodCxlLG4sbyl7bGF0LnNsZXJwRmxhdCh0LGUsdCxlLHQsbixvKX1fc2xlcnBBZGRpdGl2ZSh0LGUsbixvLGkpe2NvbnN0IGE9dGhpcy5fd29ya0luZGV4Kmk7bGF0Lm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQsYSx0LGUsdCxuKSxsYXQuc2xlcnBGbGF0KHQsZSx0LGUsdCxhLG8pfV9sZXJwKHQsZSxuLG8saSl7Y29uc3QgYT0xLW87Zm9yKGxldCByPTA7ciE9PWk7KytyKXtjb25zdCBpPWUrcjt0W2ldPXRbaV0qYSt0W24rcl0qb319X2xlcnBBZGRpdGl2ZSh0LGUsbixvLGkpe2ZvcihsZXQgYT0wO2EhPT1pOysrYSl7Y29uc3QgaT1lK2E7dFtpXT10W2ldK3RbbithXSpvfX19Y29uc3QgWm10PW5ldyBSZWdFeHAoIltcXFtcXF1cXC46XFwvXSIsImciKSxYbXQ9IlteXFxbXFxdXFwuOlxcL10iLEttdD0iW14iKyJcXFtcXF1cXC46XFwvIi5yZXBsYWNlKCJcXC4iLCIiKSsiXSIsSm10PS8oKD86V0MrW1wvOl0pKikvLnNvdXJjZS5yZXBsYWNlKCJXQyIsWG10KSxRbXQ9LyhXQ09EKyk/Ly5zb3VyY2UucmVwbGFjZSgiV0NPRCIsS210KSwkbXQ9Lyg/OlwuKFdDKykoPzpcWyguKylcXSk/KT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsWG10KSx0dXQ9L1wuKFdDKykoPzpcWyguKylcXSk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLFhtdCksZXV0PW5ldyBSZWdFeHAoIl4iK0ptdCtRbXQrJG10K3R1dCsiJCIpLG51dD1bIm1hdGVyaWFsIiwibWF0ZXJpYWxzIiwiYm9uZXMiXTtjbGFzcyBvdXR7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMucGF0aD1lLHRoaXMucGFyc2VkUGF0aD1ufHxvdXQucGFyc2VUcmFja05hbWUoZSksdGhpcy5ub2RlPW91dC5maW5kTm9kZSh0LHRoaXMucGFyc2VkUGF0aC5ub2RlTmFtZSl8fHQsdGhpcy5yb290Tm9kZT10LHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9c3RhdGljIGNyZWF0ZSh0LGUsbil7cmV0dXJuIHQmJnQuaXNBbmltYXRpb25PYmplY3RHcm91cD9uZXcgb3V0LkNvbXBvc2l0ZSh0LGUsbik6bmV3IG91dCh0LGUsbil9c3RhdGljIHNhbml0aXplTm9kZU5hbWUodCl7cmV0dXJuIHQucmVwbGFjZSgvXHMvZywiXyIpLnJlcGxhY2UoWm10LCIiKX1zdGF0aWMgcGFyc2VUcmFja05hbWUodCl7Y29uc3QgZT1ldXQuZXhlYyh0KTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIit0KTtjb25zdCBuPXtub2RlTmFtZTplWzJdLG9iamVjdE5hbWU6ZVszXSxvYmplY3RJbmRleDplWzRdLHByb3BlcnR5TmFtZTplWzVdLHByb3BlcnR5SW5kZXg6ZVs2XX0sbz1uLm5vZGVOYW1lJiZuLm5vZGVOYW1lLmxhc3RJbmRleE9mKCIuIik7aWYodm9pZCAwIT09byYmLTEhPT1vKXtjb25zdCB0PW4ubm9kZU5hbWUuc3Vic3RyaW5nKG8rMSk7LTEhPT1udXQuaW5kZXhPZih0KSYmKG4ubm9kZU5hbWU9bi5ub2RlTmFtZS5zdWJzdHJpbmcoMCxvKSxuLm9iamVjdE5hbWU9dCl9aWYobnVsbD09PW4ucHJvcGVydHlOYW1lfHwwPT09bi5wcm9wZXJ0eU5hbWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiUHJvcGVydHlCaW5kaW5nOiBjYW4gbm90IHBhcnNlIHByb3BlcnR5TmFtZSBmcm9tIHRyYWNrTmFtZTogIit0KTtyZXR1cm4gbn1zdGF0aWMgZmluZE5vZGUodCxlKXtpZighZXx8IiI9PT1lfHwiLiI9PT1lfHwtMT09PWV8fGU9PT10Lm5hbWV8fGU9PT10LnV1aWQpcmV0dXJuIHQ7aWYodC5za2VsZXRvbil7Y29uc3Qgbj10LnNrZWxldG9uLmdldEJvbmVCeU5hbWUoZSk7aWYodm9pZCAwIT09bilyZXR1cm4gbn1pZih0LmNoaWxkcmVuKXtjb25zdCBuPWZ1bmN0aW9uKHQpe2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtjb25zdCBpPXRbb107aWYoaS5uYW1lPT09ZXx8aS51dWlkPT09ZSlyZXR1cm4gaTtjb25zdCBhPW4oaS5jaGlsZHJlbik7aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sbz1uKHQuY2hpbGRyZW4pO2lmKG8pcmV0dXJuIG99cmV0dXJuIG51bGx9X2dldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9zZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fZ2V0VmFsdWVfZGlyZWN0KHQsZSl7dFtlXT10aGlzLm5vZGVbdGhpcy5wcm9wZXJ0eU5hbWVdfV9nZXRWYWx1ZV9hcnJheSh0LGUpe2NvbnN0IG49dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgbz0wLGk9bi5sZW5ndGg7byE9PWk7KytvKXRbZSsrXT1uW29dfV9nZXRWYWx1ZV9hcnJheUVsZW1lbnQodCxlKXt0W2VdPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdfV9nZXRWYWx1ZV90b0FycmF5KHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LnRvQXJyYXkodCxlKX1fc2V0VmFsdWVfZGlyZWN0KHQsZSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbZV19X3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSh0LGUpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W2VdLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LGUpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W2VdLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5KHQsZSl7Y29uc3Qgbj10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCBvPTAsaT1uLmxlbmd0aDtvIT09aTsrK28pbltvXT10W2UrK119X3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlKHQsZSl7Y29uc3Qgbj10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCBvPTAsaT1uLmxlbmd0aDtvIT09aTsrK28pbltvXT10W2UrK107dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxlKXtjb25zdCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IG89MCxpPW4ubGVuZ3RoO28hPT1pOysrbyluW29dPXRbZSsrXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnQodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W2VdfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W2VdLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5KHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LGUpfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsZSksdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LGUpLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X2dldFZhbHVlX3VuYm91bmQodCxlKXt0aGlzLmJpbmQoKSx0aGlzLmdldFZhbHVlKHQsZSl9X3NldFZhbHVlX3VuYm91bmQodCxlKXt0aGlzLmJpbmQoKSx0aGlzLnNldFZhbHVlKHQsZSl9YmluZCgpe2xldCB0PXRoaXMubm9kZTtjb25zdCBlPXRoaXMucGFyc2VkUGF0aCxuPWUub2JqZWN0TmFtZSxvPWUucHJvcGVydHlOYW1lO2xldCBpPWUucHJvcGVydHlJbmRleDtpZih0fHwodD1vdXQuZmluZE5vZGUodGhpcy5yb290Tm9kZSxlLm5vZGVOYW1lKXx8dGhpcy5yb290Tm9kZSx0aGlzLm5vZGU9dCksdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmF2YWlsYWJsZSx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYXZhaWxhYmxlLCF0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIit0aGlzLnBhdGgrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIpO2lmKG4pe2xldCBvPWUub2JqZWN0SW5kZXg7c3dpdGNoKG4pe2Nhc2UibWF0ZXJpYWxzIjppZighdC5tYXRlcmlhbClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLHRoaXMpO2lmKCF0Lm1hdGVyaWFsLm1hdGVyaWFscylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7dD10Lm1hdGVyaWFsLm1hdGVyaWFsczticmVhaztjYXNlImJvbmVzIjppZighdC5za2VsZXRvbilyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBib25lcyBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBza2VsZXRvbi4iLHRoaXMpO3Q9dC5za2VsZXRvbi5ib25lcztmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdLm5hbWU9PT1vKXtvPWU7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih2b2lkIDA9PT10W25dKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG9iamVjdE5hbWUgb2Ygbm9kZSB1bmRlZmluZWQuIix0aGlzKTt0PXRbbl19aWYodm9pZCAwIT09byl7aWYodm9pZCAwPT09dFtvXSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQuIix0aGlzLHQpO3Q9dFtvXX19Y29uc3QgYT10W29dO2lmKHZvaWQgMD09PWEpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIHByb3BlcnR5IGZvciB0cmFjazogIitlLm5vZGVOYW1lKyIuIitvKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iLHQpO2xldCByPXRoaXMuVmVyc2lvbmluZy5Ob25lO3RoaXMudGFyZ2V0T2JqZWN0PXQsdm9pZCAwIT09dC5uZWVkc1VwZGF0ZT9yPXRoaXMuVmVyc2lvbmluZy5OZWVkc1VwZGF0ZTp2b2lkIDAhPT10Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUmJihyPXRoaXMuVmVyc2lvbmluZy5NYXRyaXhXb3JsZE5lZWRzVXBkYXRlKTtsZXQgcz10aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZih2b2lkIDAhPT1pKXtpZigibW9ycGhUYXJnZXRJbmZsdWVuY2VzIj09PW8pe2lmKCF0Lmdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5LiIsdGhpcyk7aWYoIXQuZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgb24gVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIsdGhpcyk7aWYoIXQuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy4iLHRoaXMpO3ZvaWQgMCE9PXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2ldJiYoaT10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtpXSl9cz10aGlzLkJpbmRpbmdUeXBlLkFycmF5RWxlbWVudCx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSx0aGlzLnByb3BlcnR5SW5kZXg9aX1lbHNlIHZvaWQgMCE9PWEuZnJvbUFycmF5JiZ2b2lkIDAhPT1hLnRvQXJyYXk/KHM9dGhpcy5CaW5kaW5nVHlwZS5IYXNGcm9tVG9BcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSk6QXJyYXkuaXNBcnJheShhKT8ocz10aGlzLkJpbmRpbmdUeXBlLkVudGlyZUFycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hKTp0aGlzLnByb3BlcnR5TmFtZT1vO3RoaXMuZ2V0VmFsdWU9dGhpcy5HZXR0ZXJCeUJpbmRpbmdUeXBlW3NdLHRoaXMuc2V0VmFsdWU9dGhpcy5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZ1tzXVtyXX11bmJpbmQoKXt0aGlzLm5vZGU9bnVsbCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfX1vdXQuQ29tcG9zaXRlPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxuKXtjb25zdCBvPW58fG91dC5wYXJzZVRyYWNrTmFtZShlKTt0aGlzLl90YXJnZXRHcm91cD10LHRoaXMuX2JpbmRpbmdzPXQuc3Vic2NyaWJlXyhlLG8pfWdldFZhbHVlKHQsZSl7dGhpcy5iaW5kKCk7Y29uc3Qgbj10aGlzLl9iaW5kaW5nc1t0aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c19dO3ZvaWQgMCE9PW4mJm4uZ2V0VmFsdWUodCxlKX1zZXRWYWx1ZSh0LGUpe2NvbnN0IG49dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBvPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPW4ubGVuZ3RoO28hPT1pOysrbyluW29dLnNldFZhbHVlKHQsZSl9YmluZCgpe2NvbnN0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxuPXQubGVuZ3RoO2UhPT1uOysrZSl0W2VdLmJpbmQoKX11bmJpbmQoKXtjb25zdCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgZT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbj10Lmxlbmd0aDtlIT09bjsrK2UpdFtlXS51bmJpbmQoKX19LG91dC5wcm90b3R5cGUuQmluZGluZ1R5cGU9e0RpcmVjdDowLEVudGlyZUFycmF5OjEsQXJyYXlFbGVtZW50OjIsSGFzRnJvbVRvQXJyYXk6M30sb3V0LnByb3RvdHlwZS5WZXJzaW9uaW5nPXtOb25lOjAsTmVlZHNVcGRhdGU6MSxNYXRyaXhXb3JsZE5lZWRzVXBkYXRlOjJ9LG91dC5wcm90b3R5cGUuR2V0dGVyQnlCaW5kaW5nVHlwZT1bb3V0LnByb3RvdHlwZS5fZ2V0VmFsdWVfZGlyZWN0LG91dC5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5LG91dC5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5RWxlbWVudCxvdXQucHJvdG90eXBlLl9nZXRWYWx1ZV90b0FycmF5XSxvdXQucHJvdG90eXBlLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nPVtbb3V0LnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0LG91dC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSxvdXQucHJvdG90eXBlLl9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW291dC5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5LG91dC5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlLG91dC5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtvdXQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnQsb3V0LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlLG91dC5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbb3V0LnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5LG91dC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSxvdXQucHJvdG90eXBlLl9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV1dO2NsYXNzIGl1dHtjb25zdHJ1Y3Rvcih0LGUsbj1udWxsLG89ZS5ibGVuZE1vZGUpe3RoaXMuX21peGVyPXQsdGhpcy5fY2xpcD1lLHRoaXMuX2xvY2FsUm9vdD1uLHRoaXMuYmxlbmRNb2RlPW87Y29uc3QgaT1lLnRyYWNrcyxhPWkubGVuZ3RoLHI9bmV3IEFycmF5KGEpLHM9e2VuZGluZ1N0YXJ0OkFpdCxlbmRpbmdFbmQ6QWl0fTtmb3IobGV0IHQ9MDt0IT09YTsrK3Qpe2NvbnN0IGU9aVt0XS5jcmVhdGVJbnRlcnBvbGFudChudWxsKTtyW3RdPWUsZS5zZXR0aW5ncz1zfXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M9cyx0aGlzLl9pbnRlcnBvbGFudHM9cix0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzPW5ldyBBcnJheShhKSx0aGlzLl9jYWNoZUluZGV4PW51bGwsdGhpcy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PW51bGwsdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLmxvb3A9MjIwMSx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MSx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9MSx0aGlzLndlaWdodD0xLHRoaXMuX2VmZmVjdGl2ZVdlaWdodD0xLHRoaXMucmVwZXRpdGlvbnM9MS8wLHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLmNsYW1wV2hlbkZpbmlzaGVkPSExLHRoaXMuemVyb1Nsb3BlQXRTdGFydD0hMCx0aGlzLnplcm9TbG9wZUF0RW5kPSEwfXBsYXkoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2FjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXN9c3RvcCgpe3JldHVybiB0aGlzLl9taXhlci5fZGVhY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzLnJlc2V0KCl9cmVzZXQoKXtyZXR1cm4gdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMudGltZT0wLHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnN0b3BGYWRpbmcoKS5zdG9wV2FycGluZygpfWlzUnVubmluZygpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLnBhdXNlZCYmMCE9PXRoaXMudGltZVNjYWxlJiZudWxsPT09dGhpcy5fc3RhcnRUaW1lJiZ0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9aXNTY2hlZHVsZWQoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfXN0YXJ0QXQodCl7cmV0dXJuIHRoaXMuX3N0YXJ0VGltZT10LHRoaXN9c2V0TG9vcCh0LGUpe3JldHVybiB0aGlzLmxvb3A9dCx0aGlzLnJlcGV0aXRpb25zPWUsdGhpc31zZXRFZmZlY3RpdmVXZWlnaHQodCl7cmV0dXJuIHRoaXMud2VpZ2h0PXQsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD90OjAsdGhpcy5zdG9wRmFkaW5nKCl9Z2V0RWZmZWN0aXZlV2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodH1mYWRlSW4odCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMCwxKX1mYWRlT3V0KHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDEsMCl9Y3Jvc3NGYWRlRnJvbSh0LGUsbil7aWYodC5mYWRlT3V0KGUpLHRoaXMuZmFkZUluKGUpLG4pe2NvbnN0IG49dGhpcy5fY2xpcC5kdXJhdGlvbixvPXQuX2NsaXAuZHVyYXRpb24saT1uL287dC53YXJwKDEsby9uLGUpLHRoaXMud2FycChpLDEsZSl9cmV0dXJuIHRoaXN9Y3Jvc3NGYWRlVG8odCxlLG4pe3JldHVybiB0LmNyb3NzRmFkZUZyb20odGhpcyxlLG4pfXN0b3BGYWRpbmcoKXtjb25zdCB0PXRoaXMuX3dlaWdodEludGVycG9sYW50O3JldHVybiBudWxsIT09dCYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfXNldEVmZmVjdGl2ZVRpbWVTY2FsZSh0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dCx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy5wYXVzZWQ/MDp0LHRoaXMuc3RvcFdhcnBpbmcoKX1nZXRFZmZlY3RpdmVUaW1lU2NhbGUoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfXNldER1cmF0aW9uKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10aGlzLl9jbGlwLmR1cmF0aW9uL3QsdGhpcy5zdG9wV2FycGluZygpfXN5bmNXaXRoKHQpe3JldHVybiB0aGlzLnRpbWU9dC50aW1lLHRoaXMudGltZVNjYWxlPXQudGltZVNjYWxlLHRoaXMuc3RvcFdhcnBpbmcoKX1oYWx0KHQpe3JldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLDAsdCl9d2FycCh0LGUsbil7Y29uc3Qgbz10aGlzLl9taXhlcixpPW8udGltZSxhPXRoaXMudGltZVNjYWxlO2xldCByPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O251bGw9PT1yJiYocj1vLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9cik7Y29uc3Qgcz1yLnBhcmFtZXRlclBvc2l0aW9ucyxsPXIuc2FtcGxlVmFsdWVzO3JldHVybiBzWzBdPWksc1sxXT1pK24sbFswXT10L2EsbFsxXT1lL2EsdGhpc31zdG9wV2FycGluZygpe2NvbnN0IHQ9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7cmV0dXJuIG51bGwhPT10JiYodGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9Z2V0TWl4ZXIoKXtyZXR1cm4gdGhpcy5fbWl4ZXJ9Z2V0Q2xpcCgpe3JldHVybiB0aGlzLl9jbGlwfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fbG9jYWxSb290fHx0aGlzLl9taXhlci5fcm9vdH1fdXBkYXRlKHQsZSxuLG8pe2lmKCF0aGlzLmVuYWJsZWQpcmV0dXJuIHZvaWQgdGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2NvbnN0IGk9dGhpcy5fc3RhcnRUaW1lO2lmKG51bGwhPT1pKXtjb25zdCBvPSh0LWkpKm47aWYobzwwfHwwPT09bilyZXR1cm47dGhpcy5fc3RhcnRUaW1lPW51bGwsZT1uKm99ZSo9dGhpcy5fdXBkYXRlVGltZVNjYWxlKHQpO2NvbnN0IGE9dGhpcy5fdXBkYXRlVGltZShlKSxyPXRoaXMuX3VwZGF0ZVdlaWdodCh0KTtpZihyPjApe2NvbnN0IHQ9dGhpcy5faW50ZXJwb2xhbnRzLGU9dGhpcy5fcHJvcGVydHlCaW5kaW5ncztzd2l0Y2godGhpcy5ibGVuZE1vZGUpe2Nhc2UgMjUwMTpmb3IobGV0IG49MCxvPXQubGVuZ3RoO24hPT1vOysrbil0W25dLmV2YWx1YXRlKGEpLGVbbl0uYWNjdW11bGF0ZUFkZGl0aXZlKHIpO2JyZWFrO2Nhc2UgMjUwMDpkZWZhdWx0OmZvcihsZXQgbj0wLGk9dC5sZW5ndGg7biE9PWk7KytuKXRbbl0uZXZhbHVhdGUoYSksZVtuXS5hY2N1bXVsYXRlKG8scil9fX1fdXBkYXRlV2VpZ2h0KHQpe2xldCBlPTA7aWYodGhpcy5lbmFibGVkKXtlPXRoaXMud2VpZ2h0O2NvbnN0IG49dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobnVsbCE9PW4pe2NvbnN0IG89bi5ldmFsdWF0ZSh0KVswXTtlKj1vLHQ+bi5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BGYWRpbmcoKSwwPT09byYmKHRoaXMuZW5hYmxlZD0hMSkpfX1yZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PWUsZX1fdXBkYXRlVGltZVNjYWxlKHQpe2xldCBlPTA7aWYoIXRoaXMucGF1c2VkKXtlPXRoaXMudGltZVNjYWxlO2NvbnN0IG49dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7bnVsbCE9PW4mJihlKj1uLmV2YWx1YXRlKHQpWzBdLHQ+bi5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BXYXJwaW5nKCksMD09PWU/dGhpcy5wYXVzZWQ9ITA6dGhpcy50aW1lU2NhbGU9ZSkpfXJldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9ZSxlfV91cGRhdGVUaW1lKHQpe2NvbnN0IGU9dGhpcy5fY2xpcC5kdXJhdGlvbixuPXRoaXMubG9vcDtsZXQgbz10aGlzLnRpbWUrdCxpPXRoaXMuX2xvb3BDb3VudDtjb25zdCBhPTIyMDI9PT1uO2lmKDA9PT10KXJldHVybi0xPT09aT9vOmEmJjE9PSgxJmkpP2UtbzpvO2lmKDIyMDA9PT1uKXstMT09PWkmJih0aGlzLl9sb29wQ291bnQ9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLCEwLCExKSk7dDp7aWYobz49ZSlvPWU7ZWxzZXtpZighKG88MCkpe3RoaXMudGltZT1vO2JyZWFrIHR9bz0wfXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLHRoaXMudGltZT1vLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dDwwPy0xOjF9KX19ZWxzZXtpZigtMT09PWkmJih0Pj0wPyhpPTAsdGhpcy5fc2V0RW5kaW5ncyghMCwwPT09dGhpcy5yZXBldGl0aW9ucyxhKSk6dGhpcy5fc2V0RW5kaW5ncygwPT09dGhpcy5yZXBldGl0aW9ucywhMCxhKSksbz49ZXx8bzwwKXtjb25zdCBuPU1hdGguZmxvb3Ioby9lKTtvLT1lKm4saSs9TWF0aC5hYnMobik7Y29uc3Qgcj10aGlzLnJlcGV0aXRpb25zLWk7aWYocjw9MCl0aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSxvPXQ+MD9lOjAsdGhpcy50aW1lPW8sdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PjA/MTotMX0pO2Vsc2V7aWYoMT09PXIpe2NvbnN0IGU9dDwwO3RoaXMuX3NldEVuZGluZ3MoZSwhZSxhKX1lbHNlIHRoaXMuX3NldEVuZGluZ3MoITEsITEsYSk7dGhpcy5fbG9vcENvdW50PWksdGhpcy50aW1lPW8sdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToibG9vcCIsYWN0aW9uOnRoaXMsbG9vcERlbHRhOm59KX19ZWxzZSB0aGlzLnRpbWU9bztpZihhJiYxPT0oMSZpKSlyZXR1cm4gZS1vfXJldHVybiBvfV9zZXRFbmRpbmdzKHQsZSxuKXtjb25zdCBvPXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M7bj8oby5lbmRpbmdTdGFydD1UaXQsby5lbmRpbmdFbmQ9VGl0KTooby5lbmRpbmdTdGFydD10P3RoaXMuemVyb1Nsb3BlQXRTdGFydD9UaXQ6QWl0Ok5pdCxvLmVuZGluZ0VuZD1lP3RoaXMuemVyb1Nsb3BlQXRFbmQ/VGl0OkFpdDpOaXQpfV9zY2hlZHVsZUZhZGluZyh0LGUsbil7Y29uc3Qgbz10aGlzLl9taXhlcixpPW8udGltZTtsZXQgYT10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtudWxsPT09YSYmKGE9by5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpLHRoaXMuX3dlaWdodEludGVycG9sYW50PWEpO2NvbnN0IHI9YS5wYXJhbWV0ZXJQb3NpdGlvbnMscz1hLnNhbXBsZVZhbHVlcztyZXR1cm4gclswXT1pLHNbMF09ZSxyWzFdPWkrdCxzWzFdPW4sdGhpc319KGNsYXNzIGV4dGVuZHMgVWl0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fcm9vdD10LHRoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCksdGhpcy5fYWNjdUluZGV4PTAsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MX1fYmluZEFjdGlvbih0LGUpe2NvbnN0IG49dC5fbG9jYWxSb290fHx0aGlzLl9yb290LG89dC5fY2xpcC50cmFja3MsaT1vLmxlbmd0aCxhPXQuX3Byb3BlcnR5QmluZGluZ3Mscj10Ll9pbnRlcnBvbGFudHMscz1uLnV1aWQsbD10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWU7bGV0IGM9bFtzXTt2b2lkIDA9PT1jJiYoYz17fSxsW3NdPWMpO2ZvcihsZXQgdD0wO3QhPT1pOysrdCl7Y29uc3QgaT1vW3RdLGw9aS5uYW1lO2xldCBkPWNbbF07aWYodm9pZCAwIT09ZClhW3RdPWQ7ZWxzZXtpZihkPWFbdF0sdm9pZCAwIT09ZCl7bnVsbD09PWQuX2NhY2hlSW5kZXgmJigrK2QucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGQscyxsKSk7Y29udGludWV9ZD1uZXcgcW10KG91dC5jcmVhdGUobixsLGUmJmUuX3Byb3BlcnR5QmluZGluZ3NbdF0uYmluZGluZy5wYXJzZWRQYXRoKSxpLlZhbHVlVHlwZU5hbWUsaS5nZXRWYWx1ZVNpemUoKSksKytkLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhkLHMsbCksYVt0XT1kfXJbdF0ucmVzdWx0QnVmZmVyPWQuYnVmZmVyfX1fYWN0aXZhdGVBY3Rpb24odCl7aWYoIXRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtpZihudWxsPT09dC5fY2FjaGVJbmRleCl7Y29uc3QgZT0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLG49dC5fY2xpcC51dWlkLG89dGhpcy5fYWN0aW9uc0J5Q2xpcFtuXTt0aGlzLl9iaW5kQWN0aW9uKHQsbyYmby5rbm93bkFjdGlvbnNbMF0pLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHQsbixlKX1jb25zdCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0IT09bjsrK3Qpe2NvbnN0IG49ZVt0XTswPT1uLnVzZUNvdW50KysmJih0aGlzLl9sZW5kQmluZGluZyhuKSxuLnNhdmVPcmlnaW5hbFN0YXRlKCkpfXRoaXMuX2xlbmRBY3Rpb24odCl9fV9kZWFjdGl2YXRlQWN0aW9uKHQpe2lmKHRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtjb25zdCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0IT09bjsrK3Qpe2NvbnN0IG49ZVt0XTswPT0tLW4udXNlQ291bnQmJihuLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fdGFrZUJhY2tCaW5kaW5nKG4pKX10aGlzLl90YWtlQmFja0FjdGlvbih0KX19X2luaXRNZW1vcnlNYW5hZ2VyKCl7dGhpcy5fYWN0aW9ucz1bXSx0aGlzLl9uQWN0aXZlQWN0aW9ucz0wLHRoaXMuX2FjdGlvbnNCeUNsaXA9e30sdGhpcy5fYmluZGluZ3M9W10sdGhpcy5fbkFjdGl2ZUJpbmRpbmdzPTAsdGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lPXt9LHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHM9W10sdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHM9MDtjb25zdCB0PXRoaXM7dGhpcy5zdGF0cz17YWN0aW9uczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2FjdGlvbnMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUFjdGlvbnN9fSxiaW5kaW5nczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2JpbmRpbmdzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVCaW5kaW5nc319LGNvbnRyb2xJbnRlcnBvbGFudHM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9jb250cm9sSW50ZXJwb2xhbnRzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzfX19fV9pc0FjdGl2ZUFjdGlvbih0KXtjb25zdCBlPXQuX2NhY2hlSW5kZXg7cmV0dXJuIG51bGwhPT1lJiZlPHRoaXMuX25BY3RpdmVBY3Rpb25zfV9hZGRJbmFjdGl2ZUFjdGlvbih0LGUsbil7Y29uc3Qgbz10aGlzLl9hY3Rpb25zLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcDtsZXQgYT1pW2VdO2lmKHZvaWQgMD09PWEpYT17a25vd25BY3Rpb25zOlt0XSxhY3Rpb25CeVJvb3Q6e319LHQuX2J5Q2xpcENhY2hlSW5kZXg9MCxpW2VdPWE7ZWxzZXtjb25zdCBlPWEua25vd25BY3Rpb25zO3QuX2J5Q2xpcENhY2hlSW5kZXg9ZS5sZW5ndGgsZS5wdXNoKHQpfXQuX2NhY2hlSW5kZXg9by5sZW5ndGgsby5wdXNoKHQpLGEuYWN0aW9uQnlSb290W25dPXR9X3JlbW92ZUluYWN0aXZlQWN0aW9uKHQpe2NvbnN0IGU9dGhpcy5fYWN0aW9ucyxuPWVbZS5sZW5ndGgtMV0sbz10Ll9jYWNoZUluZGV4O24uX2NhY2hlSW5kZXg9byxlW29dPW4sZS5wb3AoKSx0Ll9jYWNoZUluZGV4PW51bGw7Y29uc3QgaT10Ll9jbGlwLnV1aWQsYT10aGlzLl9hY3Rpb25zQnlDbGlwLHI9YVtpXSxzPXIua25vd25BY3Rpb25zLGw9c1tzLmxlbmd0aC0xXSxjPXQuX2J5Q2xpcENhY2hlSW5kZXg7bC5fYnlDbGlwQ2FjaGVJbmRleD1jLHNbY109bCxzLnBvcCgpLHQuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxkZWxldGUgci5hY3Rpb25CeVJvb3RbKHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZF0sMD09PXMubGVuZ3RoJiZkZWxldGUgYVtpXSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpe2NvbnN0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3QhPT1uOysrdCl7Y29uc3Qgbj1lW3RdOzA9PS0tbi5yZWZlcmVuY2VDb3VudCYmdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKG4pfX1fbGVuZEFjdGlvbih0KXtjb25zdCBlPXRoaXMuX2FjdGlvbnMsbj10Ll9jYWNoZUluZGV4LG89dGhpcy5fbkFjdGl2ZUFjdGlvbnMrKyxpPWVbb107dC5fY2FjaGVJbmRleD1vLGVbb109dCxpLl9jYWNoZUluZGV4PW4sZVtuXT1pfV90YWtlQmFja0FjdGlvbih0KXtjb25zdCBlPXRoaXMuX2FjdGlvbnMsbj10Ll9jYWNoZUluZGV4LG89LS10aGlzLl9uQWN0aXZlQWN0aW9ucyxpPWVbb107dC5fY2FjaGVJbmRleD1vLGVbb109dCxpLl9jYWNoZUluZGV4PW4sZVtuXT1pfV9hZGRJbmFjdGl2ZUJpbmRpbmcodCxlLG4pe2NvbnN0IG89dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLGk9dGhpcy5fYmluZGluZ3M7bGV0IGE9b1tlXTt2b2lkIDA9PT1hJiYoYT17fSxvW2VdPWEpLGFbbl09dCx0Ll9jYWNoZUluZGV4PWkubGVuZ3RoLGkucHVzaCh0KX1fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKHQpe2NvbnN0IGU9dGhpcy5fYmluZGluZ3Msbj10LmJpbmRpbmcsbz1uLnJvb3ROb2RlLnV1aWQsaT1uLnBhdGgsYT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscj1hW29dLHM9ZVtlLmxlbmd0aC0xXSxsPXQuX2NhY2hlSW5kZXg7cy5fY2FjaGVJbmRleD1sLGVbbF09cyxlLnBvcCgpLGRlbGV0ZSByW2ldLDA9PT1PYmplY3Qua2V5cyhyKS5sZW5ndGgmJmRlbGV0ZSBhW29dfV9sZW5kQmluZGluZyh0KXtjb25zdCBlPXRoaXMuX2JpbmRpbmdzLG49dC5fY2FjaGVJbmRleCxvPXRoaXMuX25BY3RpdmVCaW5kaW5ncysrLGk9ZVtvXTt0Ll9jYWNoZUluZGV4PW8sZVtvXT10LGkuX2NhY2hlSW5kZXg9bixlW25dPWl9X3Rha2VCYWNrQmluZGluZyh0KXtjb25zdCBlPXRoaXMuX2JpbmRpbmdzLG49dC5fY2FjaGVJbmRleCxvPS0tdGhpcy5fbkFjdGl2ZUJpbmRpbmdzLGk9ZVtvXTt0Ll9jYWNoZUluZGV4PW8sZVtvXT10LGkuX2NhY2hlSW5kZXg9bixlW25dPWl9X2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKXtjb25zdCB0PXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsZT10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cysrO2xldCBuPXRbZV07cmV0dXJuIHZvaWQgMD09PW4mJihuPW5ldyBjbXQobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksbi5fX2NhY2hlSW5kZXg9ZSx0W2VdPW4pLG59X3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpe2NvbnN0IGU9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxuPXQuX19jYWNoZUluZGV4LG89LS10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyxpPWVbb107dC5fX2NhY2hlSW5kZXg9byxlW29dPXQsaS5fX2NhY2hlSW5kZXg9bixlW25dPWl9Y2xpcEFjdGlvbih0LGUsbil7Y29uc3Qgbz1lfHx0aGlzLl9yb290LGk9by51dWlkO2xldCBhPSJzdHJpbmciPT10eXBlb2YgdD9fbXQuZmluZEJ5TmFtZShvLHQpOnQ7Y29uc3Qgcj1udWxsIT09YT9hLnV1aWQ6dCxzPXRoaXMuX2FjdGlvbnNCeUNsaXBbcl07bGV0IGw9bnVsbDtpZih2b2lkIDA9PT1uJiYobj1udWxsIT09YT9hLmJsZW5kTW9kZToyNTAwKSx2b2lkIDAhPT1zKXtjb25zdCB0PXMuYWN0aW9uQnlSb290W2ldO2lmKHZvaWQgMCE9PXQmJnQuYmxlbmRNb2RlPT09bilyZXR1cm4gdDtsPXMua25vd25BY3Rpb25zWzBdLG51bGw9PT1hJiYoYT1sLl9jbGlwKX1pZihudWxsPT09YSlyZXR1cm4gbnVsbDtjb25zdCBjPW5ldyBpdXQodGhpcyxhLGUsbik7cmV0dXJuIHRoaXMuX2JpbmRBY3Rpb24oYyxsKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbihjLHIsaSksY31leGlzdGluZ0FjdGlvbih0LGUpe2NvbnN0IG49ZXx8dGhpcy5fcm9vdCxvPW4udXVpZCxpPSJzdHJpbmciPT10eXBlb2YgdD9fbXQuZmluZEJ5TmFtZShuLHQpOnQsYT10aGlzLl9hY3Rpb25zQnlDbGlwW2k/aS51dWlkOnRdO3JldHVybiB2b2lkIDAhPT1hJiZhLmFjdGlvbkJ5Um9vdFtvXXx8bnVsbH1zdG9wQWxsQWN0aW9uKCl7Y29uc3QgdD10aGlzLl9hY3Rpb25zO2ZvcihsZXQgZT10aGlzLl9uQWN0aXZlQWN0aW9ucy0xO2U+PTA7LS1lKXRbZV0uc3RvcCgpO3JldHVybiB0aGlzfXVwZGF0ZSh0KXtjb25zdCBlPXRoaXMuX2FjdGlvbnMsbj10aGlzLl9uQWN0aXZlQWN0aW9ucyxvPXRoaXMudGltZSs9dCo9dGhpcy50aW1lU2NhbGUsaT1NYXRoLnNpZ24odCksYT10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCByPTA7ciE9PW47KytyKWVbcl0uX3VwZGF0ZShvLHQsaSxhKTtjb25zdCByPXRoaXMuX2JpbmRpbmdzLHM9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihsZXQgdD0wO3QhPT1zOysrdClyW3RdLmFwcGx5KGEpO3JldHVybiB0aGlzfXNldFRpbWUodCl7dGhpcy50aW1lPTA7Zm9yKGxldCB0PTA7dDx0aGlzLl9hY3Rpb25zLmxlbmd0aDt0KyspdGhpcy5fYWN0aW9uc1t0XS50aW1lPTA7cmV0dXJuIHRoaXMudXBkYXRlKHQpfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdH11bmNhY2hlQ2xpcCh0KXtjb25zdCBlPXRoaXMuX2FjdGlvbnMsbj10LnV1aWQsbz10aGlzLl9hY3Rpb25zQnlDbGlwLGk9b1tuXTtpZih2b2lkIDAhPT1pKXtjb25zdCB0PWkua25vd25BY3Rpb25zO2ZvcihsZXQgbj0wLG89dC5sZW5ndGg7biE9PW87KytuKXtjb25zdCBvPXRbbl07dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihvKTtjb25zdCBpPW8uX2NhY2hlSW5kZXgsYT1lW2UubGVuZ3RoLTFdO28uX2NhY2hlSW5kZXg9bnVsbCxvLl9ieUNsaXBDYWNoZUluZGV4PW51bGwsYS5fY2FjaGVJbmRleD1pLGVbaV09YSxlLnBvcCgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24obyl9ZGVsZXRlIG9bbl19fXVuY2FjaGVSb290KHQpe2NvbnN0IGU9dC51dWlkLG49dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IoY29uc3QgdCBpbiBuKXtjb25zdCBvPW5bdF0uYWN0aW9uQnlSb290W2VdO3ZvaWQgMCE9PW8mJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKG8pLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKG8pKX1jb25zdCBvPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZVtlXTtpZih2b2lkIDAhPT1vKWZvcihjb25zdCB0IGluIG8pe2NvbnN0IGU9b1t0XTtlLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKGUpfX11bmNhY2hlQWN0aW9uKHQsZSl7Y29uc3Qgbj10aGlzLmV4aXN0aW5nQWN0aW9uKHQsZSk7bnVsbCE9PW4mJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKG4pLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKG4pKX19KS5wcm90b3R5cGUuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXI9bmV3IEZsb2F0MzJBcnJheSgxKSxjbGFzcyBleHRlbmRzIF9kdHtjb25zdHJ1Y3Rvcih0LGUsbj0xKXtzdXBlcih0LGUpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1ufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfWNsb25lKHQpe2NvbnN0IGU9c3VwZXIuY2xvbmUodCk7cmV0dXJuIGUubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsZX10b0pTT04odCl7Y29uc3QgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMCxlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9fS5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMCxjbGFzcyBleHRlbmRzIHBydHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMubWF0ZXJpYWw9dCx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe30sdGhpcy5oYXNQb3NpdGlvbnM9ITEsdGhpcy5oYXNOb3JtYWxzPSExLHRoaXMuaGFzQ29sb3JzPSExLHRoaXMuaGFzVXZzPSExLHRoaXMucG9zaXRpb25BcnJheT1udWxsLHRoaXMubm9ybWFsQXJyYXk9bnVsbCx0aGlzLmNvbG9yQXJyYXk9bnVsbCx0aGlzLnV2QXJyYXk9bnVsbCx0aGlzLmNvdW50PTB9fS5wcm90b3R5cGUuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3Q9ITA7Y29uc3QgYXV0PW5ldyBjYXQscnV0PW5ldyBCYXQsc3V0PW5ldyBCYXQ7ZnVuY3Rpb24gbHV0KHQpe2NvbnN0IGU9W107dCYmdC5pc0JvbmUmJmUucHVzaCh0KTtmb3IobGV0IG49MDtuPHQuY2hpbGRyZW4ubGVuZ3RoO24rKyllLnB1c2guYXBwbHkoZSxsdXQodC5jaGlsZHJlbltuXSkpO3JldHVybiBlfWNvbnN0IGN1dD1uZXcgRmxvYXQzMkFycmF5KDEpO2Z1bmN0aW9uIGR1dCh0LGUsbil7aWYoMT09PW4pcmV0dXJuIG5ldyBScnQoZSk7Y29uc3Qgbz1kNyhlKTtpZighbyl0aHJvdyBuZXcgRXJyb3IoYGQzIGZhaWxlZCB0byByZWNvZ25pemUgdGhlIGNvbG9yOiAke2V9YCk7cmV0dXJuIG5ldyBScnQoZDgobyx0KSgxLW4pKX12YXIgcHV0LG11dCx1dXQsZnV0O2Z1bmN0aW9uIGd1dCh0LGUpe2NvbnN0IG49ZS5sZW5ndGgvMjtsZXQgbz10LmF0dHJpYnV0ZXMucG9zaXRpb247byYmby5jb3VudD09PTMqbnx8KG89bmV3IHpydChuZXcgRmxvYXQzMkFycmF5KDMqbiksMyksdC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixvKSk7Y29uc3QgaT1vLmFycmF5O2ZvcihsZXQgdD0wO3Q8bjt0KyspaVszKnRdPWVbMip0XSxpWzMqdCsxXT1lWzIqdCsxXTtvLm5lZWRzVXBkYXRlPSEwLHQuc2V0RHJhd1JhbmdlKDAsMypuKSx0LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfWZ1bmN0aW9uIGh1dCh0LGUsbil7Y29uc3Qgbz1NYXRoLm1heChlLmxlbmd0aC8yLTEsMCksaT0yKm8qMyxhPTMqaTtsZXQgcj10LmF0dHJpYnV0ZXMucG9zaXRpb247ciYmci5jb3VudD09PWl8fChyPW5ldyB6cnQobmV3IEZsb2F0MzJBcnJheShhKSwzKSx0LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLHIpKTtjb25zdCBzPXIuYXJyYXk7Zm9yKGxldCB0PTA7dDxvO3QrKyl7Y29uc3RbbyxpLGEscl09W2VbMip0XSxlWzIqdCsxXSxlWzIqdCsyXSxlWzIqdCszXV0sbD1uZXcgUWl0KG8saSksYz1uZXcgUWl0KGEsciksZD1uZXcgUWl0KGEtbyxyLWkpLHA9bmV3IFFpdCgtZC55LGQueCkuc2V0TGVuZ3RoKG4vMiksbT1sLmNsb25lKCkuYWRkKHApLHU9bC5jbG9uZSgpLnN1YihwKSxmPWMuY2xvbmUoKS5hZGQocCksZz1jLmNsb25lKCkuc3ViKHApLGg9W20ueCxtLnksMCx1LngsdS55LDAsZi54LGYueSwwLGYueCxmLnksMCx1LngsdS55LDAsZy54LGcueSwwXTtzLnNldChoLHQqaC5sZW5ndGgpfXIubmVlZHNVcGRhdGU9ITAsdC5zZXREcmF3UmFuZ2UoMCxhKSx0LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfWZ1bmN0aW9uIGJ1dCh0LGUsbixvKXtjb25zdHt2aXNpYmxlOmksY29sb3I6YSxvcGFjaXR5OnJ9PW87aWYoQXJyYXkuaXNBcnJheShlLm1hdGVyaWFsKSl0aHJvdyBuZXcgRXJyb3IoIkludmFyaWFudCBlcnJvcjogb25seSBleHBlY3Qgb25lIG1hdGVyaWFsIG9uIGFuIG9iamVjdCIpO2NvbnN0IHM9ZS5tYXRlcmlhbDtpZihzLnZpc2libGUhPT1pJiYocy52aXNpYmxlPWkscy5uZWVkc1VwZGF0ZT0hMCksIWkpcmV0dXJuITE7Y29uc3QgbD1kdXQodCxhLG51bGwhPXI/cjoxKSxjPW4oZS5nZW9tZXRyeSk7cmV0dXJuIGUuZ2VvbWV0cnkhPT1jJiYoZS5nZW9tZXRyeT1jKSxzLmNvbG9yLmVxdWFscyhsKXx8KHMuY29sb3Iuc2V0KGwpLHMubmVlZHNVcGRhdGU9ITApLCEwfW5ldyBJbnQzMkFycmF5KGN1dC5idWZmZXIpLGRwdC5jcmVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gY29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGRwdC5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZSx0fSxFbXQucHJvdG90eXBlLmZyb21Qb2ludHM9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuIiksdGhpcy5zZXRGcm9tUG9pbnRzKHQpfSxjbGFzcyBleHRlbmRzIG5wdHtjb25zdHJ1Y3Rvcih0PTEwLGU9MTAsbj00NDczOTI0LG89ODk0Nzg0OCl7bj1uZXcgUnJ0KG4pLG89bmV3IFJydChvKTtjb25zdCBpPWUvMixhPXQvZSxyPXQvMixzPVtdLGw9W107Zm9yKGxldCB0PTAsYz0wLGQ9LXI7dDw9ZTt0KyssZCs9YSl7cy5wdXNoKC1yLDAsZCxyLDAsZCkscy5wdXNoKGQsMCwtcixkLDAscik7Y29uc3QgZT10PT09aT9uOm87ZS50b0FycmF5KGwsYyksYys9MyxlLnRvQXJyYXkobCxjKSxjKz0zLGUudG9BcnJheShsLGMpLGMrPTMsZS50b0FycmF5KGwsYyksYys9M31jb25zdCBjPW5ldyBxcnQ7Yy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgRnJ0KHMsMykpLGMuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IEZydChsLDMpKSxzdXBlcihjLG5ldyBxZHQoe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSkpLHRoaXMudHlwZT0iR3JpZEhlbHBlciJ9fS5wcm90b3R5cGUuc2V0Q29sb3JzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuR3JpZEhlbHBlcjogc2V0Q29sb3JzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCwgcGFzcyB0aGVtIGluIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkLiIpfSxjbGFzcyBleHRlbmRzIG5wdHtjb25zdHJ1Y3Rvcih0KXtjb25zdCBlPWx1dCh0KSxuPW5ldyBxcnQsbz1bXSxpPVtdLGE9bmV3IFJydCgwLDAsMSkscj1uZXcgUnJ0KDAsMSwwKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdO24ucGFyZW50JiZuLnBhcmVudC5pc0JvbmUmJihvLnB1c2goMCwwLDApLG8ucHVzaCgwLDAsMCksaS5wdXNoKGEucixhLmcsYS5iKSxpLnB1c2goci5yLHIuZyxyLmIpKX1uLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBGcnQobywzKSksbi5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgRnJ0KGksMykpLHN1cGVyKG4sbmV3IHFkdCh7dmVydGV4Q29sb3JzOiEwLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLHRvbmVNYXBwZWQ6ITEsdHJhbnNwYXJlbnQ6ITB9KSksdGhpcy50eXBlPSJTa2VsZXRvbkhlbHBlciIsdGhpcy5pc1NrZWxldG9uSGVscGVyPSEwLHRoaXMucm9vdD10LHRoaXMuYm9uZXM9ZSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMX11cGRhdGVNYXRyaXhXb3JsZCh0KXtjb25zdCBlPXRoaXMuYm9uZXMsbj10aGlzLmdlb21ldHJ5LG89bi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7c3V0LmNvcHkodGhpcy5yb290Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtmb3IobGV0IHQ9MCxuPTA7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IGk9ZVt0XTtpLnBhcmVudCYmaS5wYXJlbnQuaXNCb25lJiYocnV0Lm11bHRpcGx5TWF0cmljZXMoc3V0LGkubWF0cml4V29ybGQpLGF1dC5zZXRGcm9tTWF0cml4UG9zaXRpb24ocnV0KSxvLnNldFhZWihuLGF1dC54LGF1dC55LGF1dC56KSxydXQubXVsdGlwbHlNYXRyaWNlcyhzdXQsaS5wYXJlbnQubWF0cml4V29ybGQpLGF1dC5zZXRGcm9tTWF0cml4UG9zaXRpb24ocnV0KSxvLnNldFhZWihuKzEsYXV0LngsYXV0LnksYXV0LnopLG4rPTIpfW4uZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwLHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfX0ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNrZWxldG9uSGVscGVyOiB1cGRhdGUoKSBubyBsb25nZXIgbmVlZHMgdG8gYmUgY2FsbGVkLiIpfSx4bXQucHJvdG90eXBlLmV4dHJhY3RVcmxCYXNlPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxvYWRlcjogLmV4dHJhY3RVcmxCYXNlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkxvYWRlclV0aWxzLmV4dHJhY3RVcmxCYXNlKCkgaW5zdGVhZC4iKSxjbGFzc3tzdGF0aWMgZGVjb2RlVGV4dCh0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFRleHREZWNvZGVyKXJldHVybihuZXcgVGV4dERlY29kZXIpLmRlY29kZSh0KTtsZXQgZT0iIjtmb3IobGV0IG49MCxvPXQubGVuZ3RoO248bztuKyspZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W25dKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfWNhdGNoKHQpe3JldHVybiBlfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7Y29uc3QgZT10Lmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1lPyIuLyI6dC5zdWJzdHIoMCxlKzEpfX0uZXh0cmFjdFVybEJhc2UodCl9LHhtdC5IYW5kbGVycz17YWRkOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5hZGQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuYWRkSGFuZGxlcigpIGluc3RlYWQuIil9LGdldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuZ2V0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmdldEhhbmRsZXIoKSBpbnN0ZWFkLiIpfX0sbWF0LnByb3RvdHlwZS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmNlbnRlcigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldENlbnRlcigpLiIpLHRoaXMuZ2V0Q2VudGVyKHQpfSxtYXQucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfSxtYXQucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3godCl9LG1hdC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25TcGhlcmU9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uU3BoZXJlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1NwaGVyZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZSh0KX0sbWF0LnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZSh0KX0sUmF0LnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfSxFc3QucHJvdG90eXBlLnNldEZyb21NYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRnJ1c3R1bTogLnNldEZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCgpLiIpLHRoaXMuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgodCl9LCRpdC5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheSh0LGUpfSwkaXQucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDModGhpcyl9LCRpdC5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSwkaXQucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSx0LmFwcGx5TWF0cml4Myh0aGlzKX0sJGl0LnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSwkaXQucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weSh0KS5pbnZlcnQoKX0sQmF0LnByb3RvdHlwZS5leHRyYWN0UG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKHQpfSxCYXQucHJvdG90eXBlLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKSx0aGlzLnRvQXJyYXkodCxlKX0sQmF0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRQb3NpdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSwobmV3IGNhdCkuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDMpfSxCYXQucHJvdG90eXBlLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb249ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbigpLiIpLHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl9LEJhdC5wcm90b3R5cGUubXVsdGlwbHlUb0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlUb0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sQmF0LnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLHQuYXBwbHlNYXRyaXg0KHRoaXMpfSxCYXQucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yND1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3I0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDQodGhpcyl9LEJhdC5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxCYXQucHJvdG90eXBlLnJvdGF0ZUF4aXM9ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnRyYW5zZm9ybURpcmVjdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSx0LnRyYW5zZm9ybURpcmVjdGlvbih0aGlzKX0sQmF0LnByb3RvdHlwZS5jcm9zc1ZlY3Rvcj1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSx0LmFwcGx5TWF0cml4NCh0aGlzKX0sQmF0LnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sQmF0LnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxCYXQucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LEJhdC5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sQmF0LnByb3RvdHlwZS5yb3RhdGVCeUF4aXM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQnlBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sQmF0LnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksdC5hcHBseU1hdHJpeDQodGhpcyl9LEJhdC5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sQmF0LnByb3RvdHlwZS5tYWtlRnJ1c3R1bT1mdW5jdGlvbih0LGUsbixvLGksYSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VGcnVzdHVtKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5tYWtlUGVyc3BlY3RpdmUoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkgaW5zdGVhZC4iKSx0aGlzLm1ha2VQZXJzcGVjdGl2ZSh0LGUsbyxuLGksYSl9LEJhdC5wcm90b3R5cGUuZ2V0SW52ZXJzZT1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KHQpLmludmVydCgpfSxrc3QucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uTGluZT1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzTGluZSh0KX0sbGF0LnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBpcyBub3cgdmVjdG9yLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApIGluc3RlYWQuIiksdC5hcHBseVF1YXRlcm5pb24odGhpcyl9LGxhdC5wcm90b3R5cGUuaW52ZXJzZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5pbnZlcnNlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBpbnZlcnQoKS4iKSx0aGlzLmludmVydCgpfSxMYXQucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveCh0KX0sTGF0LnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblBsYW5lPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uUGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzUGxhbmUoKS4iKSx0aGlzLmludGVyc2VjdHNQbGFuZSh0KX0sTGF0LnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUodCl9LHZydC5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4iKSx0aGlzLmdldEFyZWEoKX0sdnJ0LnByb3RvdHlwZS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLHRoaXMuZ2V0QmFyeWNvb3JkKHQsZSl9LHZydC5wcm90b3R5cGUubWlkcG9pbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5taWRwb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE1pZHBvaW50KCkuIiksdGhpcy5nZXRNaWRwb2ludCh0KX0sdnJ0LnByb3RvdHlwZW5vcm1hbD1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLHRoaXMuZ2V0Tm9ybWFsKHQpfSx2cnQucHJvdG90eXBlLnBsYW5lPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAucGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRQbGFuZSgpLiIpLHRoaXMuZ2V0UGxhbmUodCl9LHZydC5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24odCxlLG4sbyxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLHZydC5nZXRCYXJ5Y29vcmQodCxlLG4sbyxpKX0sdnJ0Lm5vcm1hbD1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLHZydC5nZXROb3JtYWwodCxlLG4sbyl9LFJtdC5wcm90b3R5cGUuZXh0cmFjdEFsbFBvaW50cz1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJhY3RBbGxQb2ludHMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmV4dHJhY3RQb2ludHMoKSBpbnN0ZWFkLiIpLHRoaXMuZXh0cmFjdFBvaW50cyh0KX0sUm10LnByb3RvdHlwZS5leHRydWRlPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBubXQodGhpcyx0KX0sUm10LnByb3RvdHlwZS5tYWtlR2VvbWV0cnk9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IGltdCh0aGlzLHQpfSxRaXQucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsbil9LFFpdC5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8odCl9LFFpdC5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9LGNhdC5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXgoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgaW5zdGVhZC4iKX0sY2F0LnByb3RvdHlwZS5zZXRFdWxlckZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVF1YXRlcm5pb24oKSBpbnN0ZWFkLiIpfSxjYXQucHJvdG90eXBlLmdldFBvc2l0aW9uRnJvbU1hdHJpeD1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4UG9zaXRpb24odCl9LGNhdC5wcm90b3R5cGUuZ2V0U2NhbGVGcm9tTWF0cml4PWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRTY2FsZUZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4U2NhbGUoKS4iKSx0aGlzLnNldEZyb21NYXRyaXhTY2FsZSh0KX0sY2F0LnByb3RvdHlwZS5nZXRDb2x1bW5Gcm9tTWF0cml4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldENvbHVtbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4Q29sdW1uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKGUsdCl9LGNhdC5wcm90b3R5cGUuYXBwbHlQcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hcHBseVByb2plY3Rpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmFwcGx5TWF0cml4NCggbSApIGluc3RlYWQuIiksdGhpcy5hcHBseU1hdHJpeDQodCl9LGNhdC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxuKX0sY2F0LnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyh0KX0sY2F0LnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sYWF0LnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLG4pfSxhYXQucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfSxwcnQucHJvdG90eXBlLmdldENoaWxkQnlOYW1lPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0Q2hpbGRCeU5hbWUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRPYmplY3RCeU5hbWUoKS4iKSx0aGlzLmdldE9iamVjdEJ5TmFtZSh0KX0scHJ0LnByb3RvdHlwZS5yZW5kZXJEZXB0aD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfSxwcnQucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC50cmFuc2xhdGVPbkF4aXMoIGF4aXMsIGRpc3RhbmNlICkgaW5zdGVhZC4iKSx0aGlzLnRyYW5zbGF0ZU9uQXhpcyhlLHQpfSxwcnQucHJvdG90eXBlLmdldFdvcmxkUm90YXRpb249ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkUm90YXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuT2JqZWN0M0QuZ2V0V29ybGRRdWF0ZXJuaW9uKCB0YXJnZXQgKSBpbnN0ZWFkLiIpfSxwcnQucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NCh0KX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMocHJ0LnByb3RvdHlwZSx7ZXVsZXJPcmRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcn0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcj10fX0sdXNlUXVhdGVybmlvbjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX19fSkscHN0LnByb3RvdHlwZS5zZXREcmF3TW9kZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5zZXREcmF3TW9kZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIFRyYW5zZm9ybSB5b3VyIGdlb21ldHJ5IHZpYSBCdWZmZXJHZW9tZXRyeVV0aWxzLnRvVHJpYW5nbGVzRHJhd01vZGUoKSBpZiBuZWNlc3NhcnkuIil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHBzdC5wcm90b3R5cGUse2RyYXdNb2RlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLmRyYXdNb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIiksMH0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLmRyYXdNb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIFRyYW5zZm9ybSB5b3VyIGdlb21ldHJ5IHZpYSBCdWZmZXJHZW9tZXRyeVV0aWxzLnRvVHJpYW5nbGVzRHJhd01vZGUoKSBpZiBuZWNlc3NhcnkuIil9fX0pLGpkdC5wcm90b3R5cGUuaW5pdEJvbmVzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2tpbm5lZE1lc2g6IGluaXRCb25lcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LF9zdC5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbih0LGUpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx2b2lkIDAhPT1lJiYodGhpcy5maWxtR2F1Z2U9ZSksdGhpcy5zZXRGb2NhbExlbmd0aCh0KX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQW10LnByb3RvdHlwZSx7b25seVNoYWRvdzp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLm9ubHlTaGFkb3cgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHNoYWRvd0NhbWVyYUZvdjp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGb3YgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZvdi4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZm92PXR9fSxzaGFkb3dDYW1lcmFMZWZ0OntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUxlZnQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmxlZnQuIiksdGhpcy5zaGFkb3cuY2FtZXJhLmxlZnQ9dH19LHNoYWRvd0NhbWVyYVJpZ2h0OntzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVJpZ2h0IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5yaWdodC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEucmlnaHQ9dH19LHNoYWRvd0NhbWVyYVRvcDp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFUb3AgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnRvcC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEudG9wPXR9fSxzaGFkb3dDYW1lcmFCb3R0b206e3NldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhQm90dG9tIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5ib3R0b20uIiksdGhpcy5zaGFkb3cuY2FtZXJhLmJvdHRvbT10fX0sc2hhZG93Q2FtZXJhTmVhcjp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFOZWFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5uZWFyLiIpLHRoaXMuc2hhZG93LmNhbWVyYS5uZWFyPXR9fSxzaGFkb3dDYW1lcmFGYXI6e3NldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRmFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLmZhcj10fX0sc2hhZG93Q2FtZXJhVmlzaWJsZTp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVZpc2libGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5DYW1lcmFIZWxwZXIoIGxpZ2h0LnNoYWRvdy5jYW1lcmEgKSBpbnN0ZWFkLiIpfX0sc2hhZG93Qmlhczp7c2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dCaWFzIGlzIG5vdyAuc2hhZG93LmJpYXMuIiksdGhpcy5zaGFkb3cuYmlhcz10fX0sc2hhZG93RGFya25lc3M6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dEYXJrbmVzcyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93TWFwV2lkdGg6e3NldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93TWFwV2lkdGggaXMgbm93IC5zaGFkb3cubWFwU2l6ZS53aWR0aC4iKSx0aGlzLnNoYWRvdy5tYXBTaXplLndpZHRoPXR9fSxzaGFkb3dNYXBIZWlnaHQ6e3NldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93TWFwSGVpZ2h0IGlzIG5vdyAuc2hhZG93Lm1hcFNpemUuaGVpZ2h0LiIpLHRoaXMuc2hhZG93Lm1hcFNpemUuaGVpZ2h0PXR9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHpydC5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAubGVuZ3RoIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuY291bnQgaW5zdGVhZC4iKSx0aGlzLmFycmF5Lmxlbmd0aH19LGR5bmFtaWM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmR5bmFtaWMgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC51c2FnZSBpbnN0ZWFkLiIpLHRoaXMudXNhZ2U9PT1WaXR9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShWaXQpfX19KSx6cnQucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0RHluYW1pYygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0VXNhZ2UoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0VXNhZ2UoITA9PT10P1ZpdDpCaXQpLHRoaXN9LHpydC5wcm90b3R5cGUuY29weUluZGljZXNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmNvcHlJbmRpY2VzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSx6cnQucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0scXJ0LnByb3RvdHlwZS5hZGRJbmRleD1mdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkSW5kZXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRJbmRleCgpLiIpLHRoaXMuc2V0SW5kZXgodCl9LHFydC5wcm90b3R5cGUuYWRkQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRBdHRyaWJ1dGUoKS4iKSxlJiZlLmlzQnVmZmVyQXR0cmlidXRlfHxlJiZlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/ImluZGV4Ij09PXQ/KGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkuYWRkQXR0cmlidXRlOiBVc2UgLnNldEluZGV4KCkgZm9yIGluZGV4IGF0dHJpYnV0ZS4iKSx0aGlzLnNldEluZGV4KGUpLHRoaXMpOnRoaXMuc2V0QXR0cmlidXRlKHQsZSk6KGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRBdHRyaWJ1dGUoKSBub3cgZXhwZWN0cyAoIG5hbWUsIGF0dHJpYnV0ZSApLiIpLHRoaXMuc2V0QXR0cmlidXRlKHQsbmV3IHpydChhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpfSxxcnQucHJvdG90eXBlLmFkZERyYXdDYWxsPWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDAhPT1uJiZjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBubyBsb25nZXIgc3VwcG9ydHMgaW5kZXhPZmZzZXQuIiksY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZERyYXdDYWxsKCkgaXMgbm93IC5hZGRHcm91cCgpLiIpLHRoaXMuYWRkR3JvdXAodCxlKX0scXJ0LnByb3RvdHlwZS5jbGVhckRyYXdDYWxscz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jbGVhckRyYXdDYWxscygpIGlzIG5vdyAuY2xlYXJHcm91cHMoKS4iKSx0aGlzLmNsZWFyR3JvdXBzKCl9LHFydC5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxxcnQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLnJlbW92ZUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmRlbGV0ZUF0dHJpYnV0ZSgpLiIpLHRoaXMuZGVsZXRlQXR0cmlidXRlKHQpfSxxcnQucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NCh0KX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMocXJ0LnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSksX2R0LnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0RHluYW1pYygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0VXNhZ2UoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0VXNhZ2UoITA9PT10P1ZpdDpCaXQpLHRoaXN9LF9kdC5wcm90b3R5cGUuc2V0QXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLnNldEFycmF5IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBCdWZmZXJHZW9tZXRyeSAuc2V0QXR0cmlidXRlIHRvIHJlcGxhY2UvcmVzaXplIGF0dHJpYnV0ZSBidWZmZXJzIil9LG5tdC5wcm90b3R5cGUuZ2V0QXJyYXlzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuZ2V0QXJyYXlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sbm10LnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxubXQucHJvdG90eXBlLmFkZFNoYXBlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuYWRkU2hhcGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSx5ZHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TY2VuZTogLmRpc3Bvc2UoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPcnQucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBScnR9fSxzaGFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPTE9PT10fX0sc3RlbmNpbE1hc2s6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4iKSx0aGlzLnN0ZW5jaWxGdW5jTWFzaz10fX0sdmVydGV4VGFuZ2VudHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGJzdC5wcm90b3R5cGUse2Rlcml2YXRpdmVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlc30sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuIFNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIiksdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzPXR9fX0pLGJkdC5wcm90b3R5cGUuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24odCxlLG4sbyl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY2xlYXJUYXJnZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGFuZCAuY2xlYXIoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0UmVuZGVyVGFyZ2V0KHQpLHRoaXMuY2xlYXIoZSxuLG8pfSxiZHQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYW5pbWF0ZSgpIGlzIG5vdyAuc2V0QW5pbWF0aW9uTG9vcCgpLiIpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcCh0KX0sYmR0LnByb3RvdHlwZS5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgpLiIpLHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCl9LGJkdC5wcm90b3R5cGUuZ2V0TWF4QW5pc290cm9weT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLiIpLHRoaXMuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKX0sYmR0LnByb3RvdHlwZS5nZXRQcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0UHJlY2lzaW9uKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMucHJlY2lzaW9uLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnByZWNpc2lvbn0sYmR0LnByb3RvdHlwZS5yZXNldEdMU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLiIpLHRoaXMuc3RhdGUucmVzZXQoKX0sYmR0LnByb3RvdHlwZS5zdXBwb3J0c0Zsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iil9LGJkdC5wcm90b3R5cGUuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXQnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpfSxiZHQucHJvdG90eXBlLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfSxiZHQucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9LGJkdC5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil9LGJkdC5wcm90b3R5cGUuc3VwcG9ydHNCbGVuZE1pbk1heD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0JsZW5kTWluTWF4KCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0VYVF9ibGVuZF9taW5tYXgnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfSxiZHQucHJvdG90eXBlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzfSxiZHQucHJvdG90eXBlLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpfSxiZHQucHJvdG90eXBlLmVuYWJsZVNjaXNzb3JUZXN0PWZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLiIpLHRoaXMuc2V0U2Npc3NvclRlc3QodCl9LGJkdC5wcm90b3R5cGUuaW5pdE1hdGVyaWFsPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuaW5pdE1hdGVyaWFsKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYmR0LnByb3RvdHlwZS5hZGRQcmVQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQcmVQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxiZHQucHJvdG90eXBlLmFkZFBvc3RQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQb3N0UGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYmR0LnByb3RvdHlwZS51cGRhdGVTaGFkb3dNYXA9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC51cGRhdGVTaGFkb3dNYXAoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxiZHQucHJvdG90eXBlLnNldEZhY2VDdWxsaW5nPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0RmFjZUN1bGxpbmcoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxiZHQucHJvdG90eXBlLmFsbG9jVGV4dHVyZVVuaXQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYmR0LnByb3RvdHlwZS5zZXRUZXh0dXJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGJkdC5wcm90b3R5cGUuc2V0VGV4dHVyZTJEPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZTJEKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYmR0LnByb3RvdHlwZS5zZXRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYmR0LnByb3RvdHlwZS5nZXRBY3RpdmVNaXBNYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRBY3RpdmVNaXBNYXBMZXZlbCgpIGlzIG5vdyAuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKS4iKSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGJkdC5wcm90b3R5cGUse3NoYWRvd01hcEVuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5lbmFibGVkfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwRW5hYmxlZCBpcyBub3cgLnNoYWRvd01hcC5lbmFibGVkLiIpLHRoaXMuc2hhZG93TWFwLmVuYWJsZWQ9dH19LHNoYWRvd01hcFR5cGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC50eXBlfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwVHlwZSBpcyBub3cgLnNoYWRvd01hcC50eXBlLiIpLHRoaXMuc2hhZG93TWFwLnR5cGU9dH19LHNoYWRvd01hcEN1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0sY29udGV4dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNvbnRleHQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5nZXRDb250ZXh0KCkgaW5zdGVhZC4iKSx0aGlzLmdldENvbnRleHQoKX19LHZyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudnIgaGFzIGJlZW4gcmVuYW1lZCB0byAueHIiKSx0aGlzLnhyfX0sZ2FtbWFJbnB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpfX0sZ2FtbWFPdXRwdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSx0aGlzLm91dHB1dEVuY29kaW5nPSEwPT09dD9JaXQ6eml0fX0sdG9uZU1hcHBpbmdXaGl0ZVBvaW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIiksMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHNkdC5wcm90b3R5cGUse2N1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJSZXZlcnNlU2lkZWQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyU2luZ2xlU2lkZWQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMocmF0LnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIiksdGhpcy50ZXh0dXJlLndyYXBTPXR9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBUIGlzIG5vdyAudGV4dHVyZS53cmFwVC4iKSx0aGlzLnRleHR1cmUud3JhcFQ9dH19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9dH19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9dH19LGFuaXNvdHJvcHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weX0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LiIpLHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5PXR9fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKSx0aGlzLnRleHR1cmUub2Zmc2V0PXR9fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKSx0aGlzLnRleHR1cmUucmVwZWF0PXR9fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdH0sc2V0OmZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKSx0aGlzLnRleHR1cmUuZm9ybWF0PXR9fSx0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGV9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4iKSx0aGlzLnRleHR1cmUudHlwZT10fX0sZ2VuZXJhdGVNaXBtYXBzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIiksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz10fX19KSxjbGFzcyBleHRlbmRzIHBydHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKCEwPT09dGhpcy5pc1BsYXlpbmcpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO2lmKCExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTt0aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7Y29uc3QgZT10aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7cmV0dXJuIGUuYnVmZmVyPXRoaXMuYnVmZmVyLGUubG9vcD10aGlzLmxvb3AsZS5sb29wU3RhcnQ9dGhpcy5sb29wU3RhcnQsZS5sb29wRW5kPXRoaXMubG9vcEVuZCxlLm9uZW5kZWQ9dGhpcy5vbkVuZGVkLmJpbmQodGhpcyksZS5zdGFydCh0aGlzLl9zdGFydGVkQXQsdGhpcy5fcHJvZ3Jlc3MrdGhpcy5vZmZzZXQsdGhpcy5kdXJhdGlvbiksdGhpcy5pc1BsYXlpbmc9ITAsdGhpcy5zb3VyY2U9ZSx0aGlzLnNldERldHVuZSh0aGlzLmRldHVuZSksdGhpcy5zZXRQbGF5YmFja1JhdGUodGhpcy5wbGF5YmFja1JhdGUpLHRoaXMuY29ubmVjdCgpfXBhdXNlKCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiYodGhpcy5fcHJvZ3Jlc3MrPU1hdGgubWF4KHRoaXMuY29udGV4dC5jdXJyZW50VGltZS10aGlzLl9zdGFydGVkQXQsMCkqdGhpcy5wbGF5YmFja1JhdGUsITA9PT10aGlzLmxvb3AmJih0aGlzLl9wcm9ncmVzcz10aGlzLl9wcm9ncmVzcyUodGhpcy5kdXJhdGlvbnx8dGhpcy5idWZmZXIuZHVyYXRpb24pKSx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9c3RvcCgpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHRoaXMuX3Byb2dyZXNzPTAsdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9Y29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PGU7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmNvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5jb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSEwLHRoaXN9ZGlzY29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PGU7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSExLHRoaXN9Z2V0RmlsdGVycygpe3JldHVybiB0aGlzLmZpbHRlcnN9c2V0RmlsdGVycyh0KXtyZXR1cm4gdHx8KHQ9W10pLCEwPT09dGhpcy5fY29ubmVjdGVkPyh0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXMuY29ubmVjdCgpKTp0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXN9c2V0RGV0dW5lKHQpe2lmKHRoaXMuZGV0dW5lPXQsdm9pZCAwIT09dGhpcy5zb3VyY2UuZGV0dW5lKXJldHVybiEwPT09dGhpcy5pc1BsYXlpbmcmJnRoaXMuc291cmNlLmRldHVuZS5zZXRUYXJnZXRBdFRpbWUodGhpcy5kZXR1bmUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc31nZXREZXR1bmUoKXtyZXR1cm4gdGhpcy5kZXR1bmV9Z2V0RmlsdGVyKCl7cmV0dXJuIHRoaXMuZ2V0RmlsdGVycygpWzBdfXNldEZpbHRlcih0KXtyZXR1cm4gdGhpcy5zZXRGaWx0ZXJzKHQ/W3RdOltdKX1zZXRQbGF5YmFja1JhdGUodCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9dCwhMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMucGxheWJhY2tSYXRlLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXM7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKX1nZXRQbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9b25FbmRlZCgpe3RoaXMuaXNQbGF5aW5nPSExfWdldExvb3AoKXtyZXR1cm4hMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sPyhjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpLCExKTp0aGlzLmxvb3B9c2V0TG9vcCh0KXtpZighMSE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB0aGlzLmxvb3A9dCwhMD09PXRoaXMuaXNQbGF5aW5nJiYodGhpcy5zb3VyY2UubG9vcD10aGlzLmxvb3ApLHRoaXM7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKX1zZXRMb29wU3RhcnQodCl7cmV0dXJuIHRoaXMubG9vcFN0YXJ0PXQsdGhpc31zZXRMb29wRW5kKHQpe3JldHVybiB0aGlzLmxvb3BFbmQ9dCx0aGlzfWdldFZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9fS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4iKTtjb25zdCBlPXRoaXM7cmV0dXJuKG5ldyBZbXQpLmxvYWQodCwoZnVuY3Rpb24odCl7ZS5zZXRCdWZmZXIodCl9KSksdGhpc30sTXN0LnByb3RvdHlwZS51cGRhdGVDdWJlTWFwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLnVwZGF0ZUN1YmVNYXAoKSBpcyBub3cgLnVwZGF0ZSgpLiIpLHRoaXMudXBkYXRlKHQsZSl9LE1zdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcih0LGUsbixvKX0sZWF0LmNyb3NzT3JpZ2luPXZvaWQgMCxlYXQubG9hZFRleHR1cmU9ZnVuY3Rpb24odCxlLG4sbyl7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5UZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtjb25zdCBpPW5ldyBTbXQ7aS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtjb25zdCBhPWkubG9hZCh0LG4sdm9pZCAwLG8pO3JldHVybiBlJiYoYS5tYXBwaW5nPWUpLGF9LGVhdC5sb2FkVGV4dHVyZUN1YmU9ZnVuY3Rpb24odCxlLG4sbyl7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ3ViZVRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLiIpO2NvbnN0IGk9bmV3IGttdDtpLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2NvbnN0IGE9aS5sb2FkKHQsbix2b2lkIDAsbyk7cmV0dXJuIGUmJihhLm1hcHBpbmc9ZSksYX0sZWF0LmxvYWRDb21wcmVzc2VkVGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX0sZWF0LmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfSwidW5kZWZpbmVkIiE9dHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246IjEzMSJ9fSkpLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPSIxMzEiKSwoZnVuY3Rpb24odCl7dFt0LkNJUkNMRT0wXT0iQ0lSQ0xFIix0W3QuTElORT0xXT0iTElORSIsdFt0LlRSSUFOR0xFPTJdPSJUUklBTkdMRSIsdFt0LlRSQVBFWk9JRD0zXT0iVFJBUEVaT0lEIn0pKHB1dHx8KHB1dD17fSkpO2NsYXNzIHl1dHtjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5zY2VuZT1uZXcgeWR0LHRoaXMuYmFja2dyb3VuZENvbG9yPSIjZmZmIixpaXQoKSYmdCBpbnN0YW5jZW9mIE9mZnNjcmVlbkNhbnZhcyYmKHQuc3R5bGU9dC5zdHlsZXx8e30pLG8mJnQuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsbyksdGhpcy5yZW5kZXJlcj1uZXcgYmR0KHtjYW52YXM6dCxjb250ZXh0OnQuZ2V0Q29udGV4dCgid2ViZ2wyIix7YW50aWFsaWFzOiEwLHByZWNpc2lvbjoiaGlnaHAiLGFscGhhOiEwfSl9KSx0aGlzLnJlbmRlcmVyLnNldFBpeGVsUmF0aW8obil9b25SZXNpemUodCl7dGhpcy5yZW5kZXJlci5zZXRTaXplKHQud2lkdGgsdC5oZWlnaHQpfWRlc3Ryb3lPYmplY3QodCl7Y29uc3QgZT10Lm9iajNkO2lmKHRoaXMuc2NlbmUucmVtb3ZlKGUpLGUgaW5zdGFuY2VvZiBwc3Qpe2UuZ2VvbWV0cnkuZGlzcG9zZSgpO2NvbnN0IHQ9QXJyYXkuaXNBcnJheShlLm1hdGVyaWFsKT9lLm1hdGVyaWFsOltlLm1hdGVyaWFsXTtmb3IoY29uc3QgZSBvZiB0KWUuZGlzcG9zZSgpfX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLmJhY2tncm91bmRDb2xvcj10PyIjMzAzMDMwIjoiI2ZmZiJ9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxuKXt2YXIgbztpZighdCYmIW4udmlzaWJsZSlyZXR1cm4gbnVsbDtjb25zdHt2aXNpYmxlOmksd2lkdGg6YX09bjtpZighdCl7Y29uc3QgdD1kdXQodGhpcy5iYWNrZ3JvdW5kQ29sb3Isbi5jb2xvcixudWxsIT09KG89bi5vcGFjaXR5KSYmdm9pZCAwIT09bz9vOjEpLHI9bmV3IHFydCxzPW5ldyBxZHQoe2NvbG9yOnR9KSxsPW5ldyBwc3QocixzKTtyZXR1cm4gcy52aXNpYmxlPWksaHV0KHIsZSxhKSx0aGlzLnNjZW5lLmFkZChsKSx7dHlwZTpwdXQuTElORSxkYXRhOmUsb2JqM2Q6bCx3aWR0aDphfX1jb25zdHtkYXRhOnIsb2JqM2Q6cyx3aWR0aDpsfT10O3JldHVybiBidXQodGhpcy5iYWNrZ3JvdW5kQ29sb3IscywodD0+KGE9PT1sJiZyJiZhaXQocixlKXx8aHV0KHQsZSxhKSx0KSksbik/e3R5cGU6cHV0LkxJTkUsZGF0YTplLG9iajNkOnMsd2lkdGg6YX06dH1jcmVhdGVNZXNoKHQsZSl7aWYoIWUudmlzaWJsZSlyZXR1cm4gbnVsbDtjb25zdHt2aXNpYmxlOm4sY29sb3I6byxvcGFjaXR5Oml9PWUsYT1kdXQodGhpcy5iYWNrZ3JvdW5kQ29sb3IsbyxudWxsIT1pP2k6MSkscj1uZXcgQXJ0KHtjb2xvcjphLHZpc2libGU6bn0pO3JldHVybiBuZXcgcHN0KHQscil9Y3JlYXRlT3JVcGRhdGVUcmlhbmdsZU9iamVjdCh0LGUsbil7Y29uc3R7c2l6ZTpvfT1uLGk9bypNYXRoLnNxcnQoMykvMixhPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1vLzIsZS55LWkvMyxlLngrby8yLGUueS1pLzMsZS54LGUueSsyKmkvM10pO2lmKCF0KXtjb25zdCB0PW5ldyBxcnQ7Z3V0KHQsYSk7Y29uc3Qgbz10aGlzLmNyZWF0ZU1lc2godCxuKTtyZXR1cm4gbnVsbD09PW8/bnVsbDoodGhpcy5zY2VuZS5hZGQobykse3R5cGU6cHV0LlRSSUFOR0xFLGRhdGE6ZSxvYmozZDpvfSl9cmV0dXJuIGJ1dCh0aGlzLmJhY2tncm91bmRDb2xvcix0Lm9iajNkLCh0PT4oZ3V0KHQsYSksdCkpLG4pP3t0eXBlOnB1dC5UUklBTkdMRSxkYXRhOmUsb2JqM2Q6dC5vYmozZH06dH1jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0LGUsbil7Y29uc3R7cmFkaXVzOm99PW4saT1uZXcgY3B0KG4ucmFkaXVzKTtpZighdCl7Y29uc3QgdD10aGlzLmNyZWF0ZU1lc2goaSxuKTtyZXR1cm4gbnVsbD09PXQ/bnVsbDoodC5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx0aGlzLnNjZW5lLmFkZCh0KSx7dHlwZTpwdXQuQ0lSQ0xFLGRhdGE6e2xvYzplLHJhZGl1czpvfSxvYmozZDp0fSl9cmV0dXJuIGJ1dCh0aGlzLmJhY2tncm91bmRDb2xvcix0Lm9iajNkLCgoKT0+aSksbik/KHQub2JqM2QucG9zaXRpb24uc2V0KGUueCxlLnksMCkse3R5cGU6cHV0LkNJUkNMRSxkYXRhOntsb2M6ZSxyYWRpdXM6b30sb2JqM2Q6dC5vYmozZH0pOnR9Y3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodCxlLG4sbyl7aWYoZS55IT09bi55KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnB1dCBlcnJvcjogc3RhcnQueSAhPSBlbmQueS4iKTtjb25zdHthbHRpdHVkZTppfT1vLGE9Mi9NYXRoLnNxcnQoMykqaSxyPW5ldyBSbXQoW25ldyBRaXQoZS54LWEvMixlLnktaS8yKSxuZXcgUWl0KGUueCxlLnkraS8yKSxuZXcgUWl0KG4ueCxuLnkraS8yKSxuZXcgUWl0KG4ueCthLzIsbi55LWkvMildKTtyLmF1dG9DbG9zZT0hMDtjb25zdCBzPW5ldyBpbXQocik7aWYoIXQpe2NvbnN0IHQ9dGhpcy5jcmVhdGVNZXNoKHMsbyk7cmV0dXJuIG51bGw9PT10P251bGw6KHRoaXMuc2NlbmUuYWRkKHQpLHt0eXBlOnB1dC5UUkFQRVpPSUQsZGF0YTpbZSxuXSxvYmozZDp0fSl9cmV0dXJuIGJ1dCh0aGlzLmJhY2tncm91bmRDb2xvcix0Lm9iajNkLCgoKT0+cyksbyk/e3R5cGU6cHV0LlRSQVBFWk9JRCxkYXRhOltlLG5dLG9iajNkOnQub2JqM2R9OnR9Zmx1c2goKXt0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnNjZW5lLHRoaXMuY29vcmRpbmF0b3IuZ2V0Q2FtZXJhKCkpfX1jbGFzcyBfdXR7Y29uc3RydWN0b3IodCxlKXt0aGlzLnJlbmRlckNhY2hlPXQsdGhpcy5yZW5kZXJlcj1lfXNldExpbmUodCxlLG4pe2NvbnN0IG89dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLG4pO28mJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxvKX1zZXRUcmlhbmdsZSh0LGUsbil7Y29uc3Qgbz10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlVHJpYW5nbGVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLG4pO28mJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxvKX1zZXRDaXJjbGUodCxlLG4pe2NvbnN0IG89dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0aGlzLnJlbmRlckNhY2hlLmdldEZyb21QcmV2aW91c0ZyYW1lKHQpLGUsbik7byYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LG8pfXNldFRyYXBlem9pZCh0LGUsbixvKXtjb25zdCBpPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLG4sbyk7aSYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LGkpfX1jbGFzcyBDdXR7Y29uc3RydWN0b3IoKXt0aGlzLnByZXZGcmFtZUNhY2hlPW5ldyBNYXAsdGhpcy5jdXJyRnJhbWVDYWNoZT1uZXcgTWFwfWdldEZyb21QcmV2aW91c0ZyYW1lKHQpe2NvbnN0IGU9dGhpcy5wcmV2RnJhbWVDYWNoZS5nZXQodCk7cmV0dXJuIG51bGwhPWU/ZTpudWxsfXNldFRvQ3VycmVudEZyYW1lKHQsZSl7dGhpcy5jdXJyRnJhbWVDYWNoZS5zZXQodCxlKX1maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpe2NvbnN0IHQ9W107Zm9yKGNvbnN0W2Usbl1vZiB0aGlzLnByZXZGcmFtZUNhY2hlLmVudHJpZXMoKSl0aGlzLmN1cnJGcmFtZUNhY2hlLmhhcyhlKXx8dC5wdXNoKG4pO3JldHVybiB0aGlzLnByZXZGcmFtZUNhY2hlPXRoaXMuY3VyckZyYW1lQ2FjaGUsdGhpcy5jdXJyRnJhbWVDYWNoZT1uZXcgTWFwLHR9fSEoZnVuY3Rpb24odCl7dFt0Lk5VTUJFUj0wXT0iTlVNQkVSIix0W3QuTkFOPTFdPSJOQU4ifSkobXV0fHwobXV0PXt9KSk7Y2xhc3MgTXV0IGV4dGVuZHMgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5yYXdTZXJpZXNEYXRhPVtdLHRoaXMuc2VyaWVzPVtdLHRoaXMucGFpbnREaXJ0eT0hMCx0aGlzLnJlbmRlckNhY2hlPW5ldyBDdXQsdGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj1udWxsLHRoaXMubGF5b3V0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsPXQuZ2V0TWV0YWRhdGFNYXAsdGhpcy5jb29yZGluYXRvcj10LmNvb3JkaW5hdG9yLHRoaXMucmVuZGVyZXI9dC5yZW5kZXJlcix0aGlzLnBhaW50QnJ1c2g9bmV3IF91dCh0aGlzLnJlbmRlckNhY2hlLHRoaXMucmVuZGVyZXIpfXNldExheW91dFJlY3QodCl7dGhpcy5sYXlvdXQueD09PXQueCYmdGhpcy5sYXlvdXQud2lkdGg9PT10LndpZHRoJiZ0aGlzLmxheW91dC55PT09dC55JiZ0aGlzLmxheW91dC5oZWlnaHQ9PT10LmhlaWdodHx8KHRoaXMucGFpbnREaXJ0eT0hMCksdGhpcy5sYXlvdXQ9dH1nZXRMYXlvdXRSZWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0fWdldE1ldGFkYXRhTWFwKCl7cmV0dXJuIHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsKCl9bWFya0FzUGFpbnREaXJ0eSgpe3RoaXMucGFpbnREaXJ0eT0hMH1yZW5kZXIoKXtpZih0aGlzLnRyYW5zZm9ybUNvb3JkaW5hdGVzSWZTdGFsZSgpLHRoaXMucGFpbnREaXJ0eSl7dGhpcy5yZWRyYXcoKTtmb3IoY29uc3QgdCBvZiB0aGlzLnJlbmRlckNhY2hlLmZpbmFsaXplRnJhbWVBbmRHZXRSZW1vdmVkKCkpdGhpcy5yZW5kZXJlci5kZXN0cm95T2JqZWN0KHQpO3RoaXMucGFpbnREaXJ0eT0hMX19aXNDb29yZGluYXRlVXBkYXRlZCgpe3JldHVybiB0aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSE9PXRoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXJ9Y2xlYXJDb29yZGluYXRlSWRlbnRpZmllcigpe3RoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXI9bnVsbH1zZXREYXRhKHQpe3RoaXMuY2xlYXJDb29yZGluYXRlSWRlbnRpZmllcigpLHRoaXMucmF3U2VyaWVzRGF0YT10fXRyYW5zZm9ybUNvb3JkaW5hdGVzSWZTdGFsZSgpe2lmKCF0aGlzLmlzQ29vcmRpbmF0ZVVwZGF0ZWQoKSlyZXR1cm47Y29uc3QgdD10aGlzLmdldExheW91dFJlY3QoKTt0aGlzLnNlcmllcz1uZXcgQXJyYXkodGhpcy5yYXdTZXJpZXNEYXRhLmxlbmd0aCk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJhd1Nlcmllc0RhdGEubGVuZ3RoO2UrKyl7Y29uc3Qgbj10aGlzLnJhd1Nlcmllc0RhdGFbZV07dGhpcy5zZXJpZXNbZV09e2lkOm4uaWQscG9seWxpbmU6bmV3IEZsb2F0MzJBcnJheSgyKm4ucG9pbnRzLmxlbmd0aCl9O2ZvcihsZXQgbz0wO288bi5wb2ludHMubGVuZ3RoO28rKyl7Y29uc3RbaSxhXT10aGlzLmNvb3JkaW5hdG9yLnRyYW5zZm9ybURhdGFUb1VpQ29vcmQodCxbbi5wb2ludHNbb10ueCxuLnBvaW50c1tvXS55XSk7dGhpcy5zZXJpZXNbZV0ucG9seWxpbmVbMipvXT1pLHRoaXMuc2VyaWVzW2VdLnBvbHlsaW5lWzIqbysxXT1hfX10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPXRoaXMuY29vcmRpbmF0b3IuZ2V0VXBkYXRlSWRlbnRpZmllcigpLHRoaXMubWFya0FzUGFpbnREaXJ0eSgpfX17cmVjb3JkUGFydGl0aW9uKHQsZSxuKXtyZXR1cm4gdD97dHlwZTptdXQuTlVNQkVSLHBvbHlsaW5lOmV9Ont0eXBlOm11dC5OQU4scG9seWxpbmU6ZS5tYXAoKCh0LGUpPT5pc05hTih0KT9lJTI9PTA/bi54Om4ueTp0KSl9fXBhcnRpdGlvblBvbHlsaW5lKHQpe2NvbnN0IGU9W107bGV0IG49MCxvPSExO2NvbnN0IGk9dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHRoaXMuZ2V0TGF5b3V0UmVjdCgpLFswLDBdKSxhPXt4OmlbMF0seTppWzFdfTtsZXQgcj1udWxsO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSs9Mil7Y29uc3QgYT10W2ldLHM9dFtpKzFdLGw9aXNOYU4oYSl8fGlzTmFOKHMpO2whPT1vJiZuIT09aSYmKGUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighbyx0LnNsaWNlKG4saSksbnVsbD09PXI/e3g6YSx5OnN9OnIpKSxuPWkpLGx8fChyPXt4OmEseTpzfSksbz1sfXJldHVybiBuIT09dC5sZW5ndGgtMSYmZS5wdXNoKHRoaXMucmVjb3JkUGFydGl0aW9uKCFvLHQuc2xpY2Uobix0Lmxlbmd0aCksbnVsbCE9cj9yOmEpKSxlfXJlZHJhdygpe3ZhciB0LGUsbjtmb3IoY29uc3QgbyBvZiB0aGlzLnNlcmllcyl7Y29uc3QgaT10aGlzLmdldE1ldGFkYXRhTWFwKClbby5pZF07aWYoIWkpY29udGludWU7aWYoby5wb2x5bGluZS5sZW5ndGglMiE9MCl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBoYXZlIG9kZCBsZW5ndGgtZWQgcG9seWxpbmU6ICR7by5wb2x5bGluZS5sZW5ndGh9YCk7Y29uc3QgYT10aGlzLnBhcnRpdGlvblBvbHlsaW5lKG8ucG9seWxpbmUpO2Zvcihjb25zdFtyLHt0eXBlOnMscG9seWxpbmU6bH1db2YgYS5lbnRyaWVzKCkpaWYocz09PW11dC5OVU1CRVIpMj09PWwubGVuZ3RoP3RoaXMucGFpbnRCcnVzaC5zZXRDaXJjbGUoSlNPTi5zdHJpbmdpZnkoWyJjaXJjbGUiLG8uaWQscl0pLHt4OmxbMF0seTpsWzFdfSx7Y29sb3I6aS5jb2xvcix2aXNpYmxlOmkudmlzaWJsZSxvcGFjaXR5Om51bGwhPT0odD1pLm9wYWNpdHkpJiZ2b2lkIDAhPT10P3Q6MSxyYWRpdXM6NH0pOnRoaXMucGFpbnRCcnVzaC5zZXRMaW5lKEpTT04uc3RyaW5naWZ5KFsibGluZSIsby5pZCxyXSksbCx7Y29sb3I6aS5jb2xvcix2aXNpYmxlOmkudmlzaWJsZSxvcGFjaXR5Om51bGwhPT0oZT1pLm9wYWNpdHkpJiZ2b2lkIDAhPT1lP2U6MSx3aWR0aDoyfSk7ZWxzZSBpZighaS5hdXgpZm9yKGxldCB0PTA7dDxsLmxlbmd0aDt0Kz0yKXRoaXMucGFpbnRCcnVzaC5zZXRUcmlhbmdsZShKU09OLnN0cmluZ2lmeShbIk5hTiIsby5pZCxsW3RdLGxbdCsxXV0pLHt4OmxbdF0seTpsW3QrMV19LHtjb2xvcjppLmNvbG9yLHZpc2libGU6aS52aXNpYmxlLG9wYWNpdHk6bnVsbCE9PShuPWkub3BhY2l0eSkmJnZvaWQgMCE9PW4/bjoxLHNpemU6MTJ9KX19fWNsYXNzIHZ1dCBleHRlbmRzIHJpdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jYW1lcmE9bmV3IFVzdCgwLDFlMywxZTMsMCwwLDEwMCl9aXNZQXhpc1BvaW50ZWREb3duKCl7cmV0dXJuITF9c2V0RG9tQ29udGFpbmVyUmVjdCh0KXtzdXBlci5zZXREb21Db250YWluZXJSZWN0KHQpLHRoaXMuY2FtZXJhLmxlZnQ9dC54LHRoaXMuY2FtZXJhLnJpZ2h0PXQueCt0LndpZHRoLHRoaXMuY2FtZXJhLnRvcD10LnkrdC5oZWlnaHQsdGhpcy5jYW1lcmEuYm90dG9tPXQueSx0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Z2V0Q2FtZXJhKCl7cmV0dXJuIHRoaXMuY2FtZXJhfX1jbGFzcyB4dXR7Y29uc3RydWN0b3IodCl7c3dpdGNoKHRoaXMubWV0YWRhdGFNYXA9e30sdGhpcy5zaG91bGRSZXBhaW50PSExLHRoaXMuY2FsbGJhY2tzPXQuY2FsbGJhY2tzLHQudHlwZSl7Y2FzZSBLMi5TVkc6dGhpcy5jb29yZGluYXRvcj1uZXcgcml0LHRoaXMucmVuZGVyZXI9bmV3IGxpdCh0LmNvbnRhaW5lcik7YnJlYWs7Y2FzZSBLMi5XRUJHTDp7Y29uc3QgZT1uZXcgdnV0O3RoaXMuY29vcmRpbmF0b3I9ZSx0aGlzLnJlbmRlcmVyPW5ldyB5dXQodC5jb250YWluZXIsZSx0LmRldmljZVBpeGVsUmF0aW8sdC5jYWxsYmFja3Mub25Db250ZXh0TG9zdCk7YnJlYWt9fXRoaXMucmVuZGVyZXIuc2V0VXNlRGFya01vZGUodC51c2VEYXJrTW9kZSksdGhpcy5zZXJpZXNMaW5lVmlldz1uZXcgTXV0KHtyZW5kZXJlcjp0aGlzLnJlbmRlcmVyLGNvb3JkaW5hdG9yOnRoaXMuY29vcmRpbmF0b3IsZ2V0TWV0YWRhdGFNYXA6KCk9PnRoaXMubWV0YWRhdGFNYXB9KSx0aGlzLnJlc2l6ZSh0LmRvbURpbWVuc2lvbil9ZGlzcG9zZSgpe31zZXRYU2NhbGVUeXBlKHQpe3RoaXMuY29vcmRpbmF0b3Iuc2V0WFNjYWxlKCRvdCh0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRZU2NhbGVUeXBlKHQpe3RoaXMuY29vcmRpbmF0b3Iuc2V0WVNjYWxlKCRvdCh0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1yZXNpemUodCl7dGhpcy5jb29yZGluYXRvci5zZXREb21Db250YWluZXJSZWN0KE9iamVjdC5hc3NpZ24oe3g6MCx5OjB9LHQpKSx0aGlzLnJlbmRlcmVyLm9uUmVzaXplKE9iamVjdC5hc3NpZ24oe3g6MCx5OjB9LHQpKSx0aGlzLnNlcmllc0xpbmVWaWV3LnNldExheW91dFJlY3QoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHt4OjAseTowfSkpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0TWV0YWRhdGEodCl7bGV0IGU9ITE7T2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoKFt0LG5dKT0+e2NvbnN0IG89dGhpcy5tZXRhZGF0YU1hcFt0XTtvJiZuLmNvbG9yPT09by5jb2xvciYmbi52aXNpYmxlPT09by52aXNpYmxlJiZuLm9wYWNpdHk9PT1vLm9wYWNpdHl8fChlPSEwKSx0aGlzLm1ldGFkYXRhTWFwW3RdPW59KSksZSYmdGhpcy5zZXJpZXNMaW5lVmlldy5tYXJrQXNQYWludERpcnR5KCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRWaWV3Qm94KHQpe3RoaXMuY29vcmRpbmF0b3Iuc2V0Vmlld0JveFJlY3Qoe3g6dC54WzBdLHdpZHRoOnQueFsxXS10LnhbMF0seTp0LnlbMF0saGVpZ2h0OnQueVsxXS10LnlbMF19KSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldERhdGEodCl7dGhpcy5zZXJpZXNMaW5lVmlldy5zZXREYXRhKHQpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0VXNlRGFya01vZGUodCl7dGhpcy5yZW5kZXJlci5zZXRVc2VEYXJrTW9kZSh0KSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNjaGVkdWxlUmVwYWludCgpe3RoaXMuc2hvdWxkUmVwYWludHx8KHRoaXMuc2hvdWxkUmVwYWludD0hMCxzZWxmLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9Pnt0aGlzLnJlcGFpbnQoKSx0aGlzLnNob3VsZFJlcGFpbnQ9ITF9KSkpfXJlcGFpbnQoKXt0aGlzLnNlcmllc0xpbmVWaWV3LnJlbmRlcigpLHRoaXMucmVuZGVyZXIuZmx1c2goKSx0aGlzLmNhbGxiYWNrcy5vbkRyYXdFbmQoKX19ZnVuY3Rpb24gT3V0KHQpe2lmKHQuaW5jbHVkZXMoIi8iKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiV29ya2VyIGZhY3Rvcnkgb25seSBhbGxvd3MgZmlsZSBuYW1lIGFuZCBubyByZXNvdXJjZSBwYXRoLiIpO3JldHVybiBuZXcgV29ya2VyKHQpfSEoZnVuY3Rpb24odCl7dFt0LlNFUklFU19EQVRBX1VQREFURUQ9MF09IlNFUklFU19EQVRBX1VQREFURUQiLHRbdC5TRVJJRVNfTUVUQURBVEFfQ0hBTkdFRD0xXT0iU0VSSUVTX01FVEFEQVRBX0NIQU5HRUQiLHRbdC5TQ0FMRV9VUERBVEVEPTJdPSJTQ0FMRV9VUERBVEVEIix0W3QuVklFV19CT1hfVVBEQVRFRD0zXT0iVklFV19CT1hfVVBEQVRFRCIsdFt0LklOSVQ9NF09IklOSVQiLHRbdC5ET01fUkVTSVpFRD01XT0iRE9NX1JFU0laRUQiLHRbdC5EQVJLX01PREVfVVBEQVRFRD02XT0iREFSS19NT0RFX1VQREFURUQifSkodXV0fHwodXV0PXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5PTl9SRURSQVdfRU5EPTBdPSJPTl9SRURSQVdfRU5EIix0W3QuT05fQ09OVEVYVF9MT1NUPTFdPSJPTl9DT05URVhUX0xPU1QifSkoZnV0fHwoZnV0PXt9KSk7Y2xhc3MgUHV0e2NvbnN0cnVjdG9yKHQpe2lmKHRoaXMuY2FsbGJhY2tzPXQuY2FsbGJhY2tzLHQudHlwZSE9PUsyLldFQkdMKXRocm93IG5ldyBSYW5nZUVycm9yKGBDYW5ub3QgdXNlIG5vbiBXRUJHTCByZW5kZXJlciBmb3IgdGhlIG9mZnNjcmVlbiBsaW5lIGNoYXJ0LiBSZWNlaXZlZCAke0syW3QudHlwZV19IGApO2NvbnN0IGU9bmV3IE1lc3NhZ2VDaGFubmVsO2UucG9ydDEub25tZXNzYWdlPXQ9Pnt0aGlzLm9uTWVzc2FnZUZyb21Xb3JrZXIodC5kYXRhKX0sdGhpcy50eE1lc3NhZ2VQb3J0PWUucG9ydDE7Y29uc3Qgbj10LmNvbnRhaW5lci50cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbigpO3RoaXMud29ya2VySW5zdGFuY2U9UHV0LndvcmtlclBvb2wuZ2V0TmV4dCgpO2NvbnN0IG89e3R5cGU6dXV0LklOSVQsY2FudmFzOm4sZGV2aWNlUGl4ZWxSYXRpbzp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxkaW06dC5kb21EaW1lbnNpb24scmVuZGVyZXJUeXBlOnQudHlwZSx1c2VEYXJrTW9kZTp0LnVzZURhcmtNb2RlfTt0aGlzLndvcmtlckluc3RhbmNlLnBvc3RNZXNzYWdlKG8sW24sZS5wb3J0Ml0pfWRpc3Bvc2UoKXt0aGlzLndvcmtlckluc3RhbmNlLmZyZWUoKSx0aGlzLnR4TWVzc2FnZVBvcnQuY2xvc2UoKX1zZXRYU2NhbGVUeXBlKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6dXV0LlNDQUxFX1VQREFURUQsYXhpczoieCIsc2NhbGVUeXBlOnR9KX1zZXRZU2NhbGVUeXBlKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6dXV0LlNDQUxFX1VQREFURUQsYXhpczoieSIsc2NhbGVUeXBlOnR9KX1yZXNpemUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTp1dXQuRE9NX1JFU0laRUQsZGltOnR9KX1zZXRNZXRhZGF0YSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOnV1dC5TRVJJRVNfTUVUQURBVEFfQ0hBTkdFRCxtZXRhZGF0YTp0fSl9c2V0Vmlld0JveCh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOnV1dC5WSUVXX0JPWF9VUERBVEVELGV4dGVudDp0fSl9c2V0RGF0YSh0KXtjb25zdCBlPShmdW5jdGlvbiBuKHQpe2NvbnN0IGU9dC5yZWR1Y2UoKCh0LGUpPT50K2UucG9pbnRzLmxlbmd0aCksMCk7bGV0IG49MDtjb25zdCBvPW5ldyBGbG9hdDY0QXJyYXkoMiplKSxpPVtdO2Zvcihjb25zdCBlIG9mIHQpe2kucHVzaCh7aWQ6ZS5pZCxsZW5ndGg6ZS5wb2ludHMubGVuZ3RofSk7Zm9yKGxldCB0PTA7dDxlLnBvaW50cy5sZW5ndGg7dCsrKW9bbisrXT1lLnBvaW50c1t0XS54LG9bbisrXT1lLnBvaW50c1t0XS55fXJldHVybntpZHNBbmRMZW5ndGhzOmksZmxhdHRlbmVkU2VyaWVzOm8uYnVmZmVyfX0pKHQpO3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6dXV0LlNFUklFU19EQVRBX1VQREFURUQsY29tcGFjdERhdGFTZXJpZXM6ZX0sW2UuZmxhdHRlbmVkU2VyaWVzXSl9c2V0VXNlRGFya01vZGUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTp1dXQuREFSS19NT0RFX1VQREFURUQsdXNlRGFya01vZGU6dH0pfXNlbmRNZXNzYWdlKHQsZSl7ZT90aGlzLnR4TWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UodCxlKTp0aGlzLnR4TWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UodCl9b25NZXNzYWdlRnJvbVdvcmtlcih0KXtzd2l0Y2godC50eXBlKXtjYXNlIGZ1dC5PTl9SRURSQVdfRU5EOnRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpO2JyZWFrO2Nhc2UgZnV0Lk9OX0NPTlRFWFRfTE9TVDp0aGlzLmNhbGxiYWNrcy5vbkNvbnRleHRMb3N0KCl9fX1mdW5jdGlvbiB3dXQodCxlKXtyZXR1cm4ieCI9PT1lP1swLHQud2lkdGhdOlt0LmhlaWdodCwwXX1mdW5jdGlvbiBrdXQodCxlKXtjb25zdCBuPU1hdGguZmxvb3IodC81MCk7cmV0dXJuIE1hdGgubWluKG4sZSl9ZnVuY3Rpb24gU3V0KHQsZSl7aWYoMSZ0JiYocWkoKSxUbSgwLCJsaW5lIiwyKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49WW0oKTtwdSgiemVybyIsMD09PXQpLGpwKCJ4MSIsbi5nZXREb21YKHQpKSgieDIiLG4uZ2V0RG9tWCh0KSkoInkyIixuLmRvbURpbS5oZWlnaHQpfX1mdW5jdGlvbiBEdXQodCxlKXtpZigxJnQmJihxaSgpLFRtKDAsImxpbmUiLDMpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1ZbSgpO3B1KCJ6ZXJvIiwwPT09dCksanAoInkxIixuLmdldERvbVkodCkpKCJ4MiIsbi5kb21EaW0ud2lkdGgpKCJ5MiIsbi5nZXREb21ZKHQpKX19UHV0LndvcmtlclBvb2w9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZT0xMCxuPU91dCl7dGhpcy53b3JrZXJSZXNvdXJjZVBhdGg9dCx0aGlzLm1heFBvb2xTaXplPWUsdGhpcy53b3JrZXJGYWN0b3J5PW4sdGhpcy53b3JrZXJzPVtdfWdldE5leHQoKXtsZXQgdDtpZih0aGlzLndvcmtlcnMuZXZlcnkoKCh7YWN0aXZlQ291bnQ6dH0pPT50PjApKSYmdGhpcy53b3JrZXJzLmxlbmd0aDx0aGlzLm1heFBvb2xTaXplKXtjb25zdCBlPXRoaXMud29ya2VyRmFjdG9yeSh0aGlzLndvcmtlclJlc291cmNlUGF0aCk7dD17YWN0aXZlQ291bnQ6MCxwb3N0TWVzc2FnZToodCxuKT0+e2UucG9zdE1lc3NhZ2UodCxuKX0sZnJlZTooKT0+e3QuYWN0aXZlQ291bnQ9TWF0aC5tYXgodC5hY3RpdmVDb3VudC0xLDApfX0sdGhpcy53b3JrZXJzLnB1c2godCl9ZWxzZXtjb25zdCBlPXRoaXMud29ya2Vycy5tYXAoKCh7YWN0aXZlQ291bnQ6dH0pPT50KSksbj1lLmluZGV4T2YoTWF0aC5taW4oLi4uZSkpO3Q9dGhpcy53b3JrZXJzW25dfXJldHVybiB0LmFjdGl2ZUNvdW50KyssdH19KCJjaGFydF93b3JrZXIuanM/X2ZpbGVfaGFzaD0yNTMzODA2NSIpO2NsYXNzIEV1dHtnZXREb21YKHQpe3JldHVybiB0aGlzLnhTY2FsZS5mb3J3YXJkKHRoaXMudmlld0V4dGVudC54LHd1dCh0aGlzLmRvbURpbSwieCIpLHQpfWdldERvbVkodCl7cmV0dXJuIHRoaXMueVNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50Lnksd3V0KHRoaXMuZG9tRGltLCJ5IiksdCl9Z2V0WFRpY2tzKCl7cmV0dXJuIHRoaXMueFNjYWxlLnRpY2tzKHRoaXMudmlld0V4dGVudC54LGt1dCh0aGlzLmRvbURpbS53aWR0aCx0aGlzLnhHcmlkQ291bnQpKX1nZXRZVGlja3MoKXtyZXR1cm4gdGhpcy55U2NhbGUudGlja3ModGhpcy52aWV3RXh0ZW50Lnksa3V0KHRoaXMuZG9tRGltLmhlaWdodCx0aGlzLnlHcmlkQ291bnQpKX19ZnVuY3Rpb24gUnV0KHQsZSxuLG8saSxhKXtsZXQgcjtzd2l0Y2godC5kZWx0YU1vZGUpe2Nhc2UgV2hlZWxFdmVudC5ET01fREVMVEFfUElYRUw6cj0xO2JyZWFrO2Nhc2UgV2hlZWxFdmVudC5ET01fREVMVEFfTElORTpyPTg7YnJlYWs7Y2FzZSBXaGVlbEV2ZW50LkRPTV9ERUxUQV9QQUdFOnI9MjA7YnJlYWs7ZGVmYXVsdDpyPTEsY29uc29sZS53YXJuKGBVbmtub3duIFdoZWVsRXZlbnQgZGVsdGFNb2RlOiAke3QuZGVsdGFNb2RlfS5gKX1jb25zdCBzPXQuZGVsdGFZKnIsbD1zPDA/TWF0aC5tYXgocypvLC0uOTUpOnMqbyx7d2lkdGg6YyxoZWlnaHQ6ZH09bixwPVtpLnJldmVyc2UoZS54LFswLGNdLC10Lm9mZnNldFgqbCksaS5yZXZlcnNlKGUueCxbMCxjXSxjKyhjLXQub2Zmc2V0WCkqbCldLG09W2EucmV2ZXJzZShlLnksW2QsMF0sLXQub2Zmc2V0WSpsKSxhLnJldmVyc2UoZS55LFtkLDBdLGQrKGQtdC5vZmZzZXRZKSpsKV07cmV0dXJue3g6cFsxXTxwWzBdP1twWzFdLHBbMF1dOnAseTptWzFdPG1bMF0/W21bMV0sbVswXV06bX19RXV0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxFdXQpfSxFdXQuybVjbXA9dG8oe3R5cGU6RXV0LHNlbGVjdG9yczpbWyJsaW5lLWNoYXJ0LWdyaWQtdmlldyJdXSxpbnB1dHM6e3ZpZXdFeHRlbnQ6InZpZXdFeHRlbnQiLHhTY2FsZToieFNjYWxlIix4R3JpZENvdW50OiJ4R3JpZENvdW50Iix5U2NhbGU6InlTY2FsZSIseUdyaWRDb3VudDoieUdyaWRDb3VudCIsZG9tRGltOiJkb21EaW0ifSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1sieTEiLCIwIiwzLCJ6ZXJvIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIngxIiwiMCIsMywiemVybyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ5MSIsIjAiXSxbIngxIiwiMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYocWkoKSxSbSgwLCJzdmciKSxRcCgxLFN1dCwxLDUsImxpbmUiLDApLFFwKDIsRHV0LDEsNSwibGluZSIsMSksQW0oKSksMiZlJiYocmMoMSksRG0oIm5nRm9yT2YiLG4uZ2V0WFRpY2tzKCkpLHJjKDEpLERtKCJuZ0Zvck9mIixuLmdldFlUaWNrcygpKSl9LGRpcmVjdGl2ZXM6W2xNXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgc3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIGxpbmVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgc3Ryb2tlOiAjY2NjO1xuICAgICAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgICAgIH1cblxuICAgICAgLnplcm9bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgc3Ryb2tlOiAjYWFhO1xuICAgICAgICBzdHJva2Utd2lkdGg6IDEuNXB4O1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChFdXQsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibGluZS1jaGFydC1ncmlkLXZpZXciLHRlbXBsYXRlOic8c3ZnPlxuICAgIDxsaW5lXG4gICAgICAqbmdGb3I9ImxldCB0aWNrIG9mIGdldFhUaWNrcygpIlxuICAgICAgW2NsYXNzLnplcm9dPSJ0aWNrID09PSAwIlxuICAgICAgW2F0dHIueDFdPSJnZXREb21YKHRpY2spIlxuICAgICAgeTE9IjAiXG4gICAgICBbYXR0ci54Ml09ImdldERvbVgodGljaykiXG4gICAgICBbYXR0ci55Ml09ImRvbURpbS5oZWlnaHQiXG4gICAgPjwvbGluZT5cbiAgICA8bGluZVxuICAgICAgKm5nRm9yPSJsZXQgdGljayBvZiBnZXRZVGlja3MoKSJcbiAgICAgIFtjbGFzcy56ZXJvXT0idGljayA9PT0gMCJcbiAgICAgIHgxPSIwIlxuICAgICAgW2F0dHIueTFdPSJnZXREb21ZKHRpY2spIlxuICAgICAgW2F0dHIueDJdPSJkb21EaW0ud2lkdGgiXG4gICAgICBbYXR0ci55Ml09ImdldERvbVkodGljaykiXG4gICAgPjwvbGluZT5cbiAgPC9zdmc+JyxzdHlsZXM6WyJcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgc3ZnIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgbGluZSB7XG4gICAgICAgIHN0cm9rZTogI2NjYztcbiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gICAgICB9XG5cbiAgICAgIC56ZXJvIHtcbiAgICAgICAgc3Ryb2tlOiAjYWFhO1xuICAgICAgICBzdHJva2Utd2lkdGg6IDEuNXB4O1xuICAgICAgfVxuICAgICJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwse3ZpZXdFeHRlbnQ6W3t0eXBlOnh5fV0seFNjYWxlOlt7dHlwZTp4eX1dLHhHcmlkQ291bnQ6W3t0eXBlOnh5fV0seVNjYWxlOlt7dHlwZTp4eX1dLHlHcmlkQ291bnQ6W3t0eXBlOnh5fV0sZG9tRGltOlt7dHlwZTp4eX1dfSk7Y29uc3QgQXV0PVsiZG90cyJdO2Z1bmN0aW9uIFR1dCh0LGUpe2lmKDEmdCYmKHFpKCksVG0oMCwiY2lyY2xlIiwxMikpLDImdCl7Y29uc3QgdD1ZbSgpLiRpbXBsaWNpdCxlPVltKDIpO2pwKCJjeCIsZS5nZXREb21YKHQucG9pbnQueCkpKCJjeSIsZS5nZXREb21ZKHQucG9pbnQueSkpKCJmaWxsIix0Lm1ldGFkYXRhLmNvbG9yKX19ZnVuY3Rpb24gTnV0KHQsZSl7aWYoMSZ0JiYocWkoKSxObSgwKSxRcCgxLFR1dCwxLDMsImNpcmNsZSIsMTEpLHptKCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPVltKDIpO3JjKDEpLERtKCJuZ0lmIixuLnNob3VsZFJlbmRlclRvb2x0aXBQb2ludCh0LnBvaW50KSl9fWZ1bmN0aW9uIHp1dCh0LGUpe2lmKDEmdCYmKHFpKCksTm0oMCksUXAoMSxOdXQsMiwxLCJuZy1jb250YWluZXIiLDEwKSx6bSgpKSwyJnQpe2NvbnN0IHQ9WW0oKTtyYygxKSxEbSgibmdGb3JPZiIsdC5jdXJzb3JlZERhdGEpKCJuZ0ZvclRyYWNrQnkiLHQudHJhY2tCeVNlcmllc05hbWUpfX1mdW5jdGlvbiBJdXQodCxlKXtpZigxJnQmJihxaSgpLFRtKDAsInJlY3QiLDEzKSksMiZ0KXtjb25zdCB0PVltKCk7anAoIngiLHQuem9vbUJveEluVWlDb29yZGluYXRlLngpKCJ3aWR0aCIsdC56b29tQm94SW5VaUNvb3JkaW5hdGUud2lkdGgpKCJ5Iix0Lnpvb21Cb3hJblVpQ29vcmRpbmF0ZS55KSgiaGVpZ2h0Iix0Lnpvb21Cb3hJblVpQ29vcmRpbmF0ZS5oZWlnaHQpfX1jb25zdCBIdXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZGF0YTp0LGN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQ6ZX19O2Z1bmN0aW9uIEZ1dCh0LGUpe2lmKDEmdCYmKFJtKDAsImRpdiIsMTQpLEltKDEsMTUpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgpLGU9JHAoMTEpO3JjKDEpLERtKCJuZ1RlbXBsYXRlT3V0bGV0Iix0LnRvb2x0aXBUZW1wbGF0ZT90LnRvb2x0aXBUZW1wbGF0ZTplKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLHZoKDIsSHV0LHQuY3Vyc29yZWREYXRhLHQuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZCkpfX1mdW5jdGlvbiBMdXQodCxlKXtpZigxJnQmJihObSgwKSxSbSgxLCJ0ciIsMTcpLFJtKDIsInRkIiwxOCksVG0oMywic3BhbiIpLEFtKCksUm0oNCwidGQiLDE5KSxrdSg1KSxBbSgpLFJtKDYsInRkIiksa3UoNyksQW0oKSxSbSg4LCJ0ZCIpLGt1KDkpLEFtKCksQW0oKSx6bSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7cmMoMyksZHUoImJhY2tncm91bmQtY29sb3IiLHQubWV0YWRhdGEuY29sb3IpLHJjKDIpLFN1KHQubWV0YWRhdGEuZGlzcGxheU5hbWUpLHJjKDIpLFN1KHQucG9pbnQueSkscmMoMiksU3UodC5wb2ludC54KX19ZnVuY3Rpb24gQnV0KHQsZSl7aWYoMSZ0JiYoUm0oMCwidGFibGUiKSxSbSgxLCJ0aGVhZCIpLFJtKDIsInRyIiksVG0oMywidGgiLDE2KSxSbSg0LCJ0aCIpLGt1KDUsIk5hbWUiKSxBbSgpLFJtKDYsInRoIiksa3UoNywiWSIpLEFtKCksUm0oOCwidGgiKSxrdSg5LCJYIiksQW0oKSxBbSgpLEFtKCksUm0oMTAsInRib2R5IiksUXAoMTEsTHV0LDEwLDUsIm5nLWNvbnRhaW5lciIsMTApLEFtKCksQW0oKSksMiZ0KXtjb25zdCB0PWUuZGF0YSxuPVltKCk7cmMoMTEpLERtKCJuZ0Zvck9mIix0KSgibmdGb3JUcmFja0J5IixuLnRyYWNrQnlTZXJpZXNOYW1lKX19dmFyIFZ1dDtmdW5jdGlvbiBqdXQodCl7cmV0dXJuIHQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9IShmdW5jdGlvbih0KXt0W3QuTk9ORT0wXT0iTk9ORSIsdFt0LkRSQUdfWk9PTUlORz0xXT0iRFJBR19aT09NSU5HIix0W3QuU0NST0xMX1pPT01JTkc9Ml09IlNDUk9MTF9aT09NSU5HIix0W3QuUEFOTklORz0zXT0iUEFOTklORyJ9KShWdXR8fChWdXQ9e30pKTtjbGFzcyBVdXR7Y29uc3RydWN0b3IodCxlKXt0aGlzLmNoYW5nZURldGVjdG9yPXQsdGhpcy5zY3JvbGxTdHJhdGVneT1lLHRoaXMub25WaWV3RXh0ZW50Q2hhbmdlPW5ldyBMaCx0aGlzLm9uVmlld0V4dGVudFJlc2V0PW5ldyBMaCx0aGlzLkludGVyYWN0aW9uU3RhdGU9VnV0LHRoaXMuc3RhdGU9VnV0Lk5PTkUsdGhpcy5zcGVjaWFsS2V5UHJlc3NlZD0hMSx0aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZT17eDowLHdpZHRoOjAsaGVpZ2h0OjAseTowfSx0aGlzLnRvb2x0aXBQb3NpdGlvbnM9W3tvZmZzZXRZOjUsb3JpZ2luWDoic3RhcnQiLG92ZXJsYXlYOiJzdGFydCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WToidG9wIn0se29mZnNldFk6NSxvcmlnaW5YOiJlbmQiLG92ZXJsYXlYOiJlbmQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVk6InRvcCJ9LHtvZmZzZXRZOi0xNSxvcmlnaW5YOiJzdGFydCIsb3ZlcmxheVg6InN0YXJ0IixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlZOiJib3R0b20ifSx7b2Zmc2V0WTotMTUsb3JpZ2luWDoiZW5kIixvdmVybGF5WDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlZOiJib3R0b20ifSx7b2Zmc2V0WDo1LG9yaWdpblg6ImVuZCIsb3ZlcmxheVg6InN0YXJ0IixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlZOiJ0b3AifSx7b2Zmc2V0WDotNSxvcmlnaW5YOiJzdGFydCIsb3ZlcmxheVg6ImVuZCIsb3JpZ2luWToidG9wIixvdmVybGF5WToidG9wIn1dLHRoaXMuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZD1udWxsLHRoaXMuY3Vyc29yZWREYXRhPVtdLHRoaXMudG9vbHRpcERpc3BsYXlBdHRhY2hlZD0hMSx0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5kcmFnU3RhcnRDb29yZD1udWxsLHRoaXMuaXNDdXJzb3JJbnNpZGU9ITEsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJfW5nQWZ0ZXJWaWV3SW5pdCgpe29lKHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJkYmxjbGljayIse3Bhc3NpdmU6ITB9KS5waXBlKEllKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLm9uVmlld0V4dGVudFJlc2V0LmVtaXQoKSx0aGlzLnN0YXRlPVZ1dC5OT05FLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSksb2Uod2luZG93LCJrZXlkb3duIix7cGFzc2l2ZTohMH0pLnBpcGUoSWUodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCh0PT57Y29uc3QgZT10aGlzLnNob3VsZFBhbih0KTtlIT09dGhpcy5zcGVjaWFsS2V5UHJlc3NlZCYmKHRoaXMuc3BlY2lhbEtleVByZXNzZWQ9ZSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX0pKSxvZSh3aW5kb3csImtleXVwIix7cGFzc2l2ZTohMH0pLnBpcGUoSWUodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCh0PT57Y29uc3QgZT10aGlzLnNob3VsZFBhbih0KTtlIT09dGhpcy5zcGVjaWFsS2V5UHJlc3NlZCYmKHRoaXMuc3BlY2lhbEtleVByZXNzZWQ9ZSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX0pKSxvZSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2Vkb3duIix7cGFzc2l2ZTohMH0pLnBpcGUoSWUodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCh0PT57Y29uc3QgZT10aGlzLnN0YXRlLG49dGhpcy5zaG91bGRQYW4odCk/VnV0LlBBTk5JTkc6VnV0LkRSQUdfWk9PTUlORztlPT09VnV0Lk5PTkUmJm49PT1WdXQuRFJBR19aT09NSU5HJiYodGhpcy5kcmFnU3RhcnRDb29yZD17eDp0Lm9mZnNldFgseTp0Lm9mZnNldFl9LHRoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4OnQub2Zmc2V0WCx3aWR0aDowLHk6dC5vZmZzZXRZLGhlaWdodDowfSksZSE9PW4mJih0aGlzLnN0YXRlPW4sdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSksb2UodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShJZSh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHQ9Pntjb25zdCBlPSh0LmJ1dHRvbnMmZ1EuTEVGVCk9PT1nUS5MRUZUO3RoaXMuZHJhZ1N0YXJ0Q29vcmQ9bnVsbDtjb25zdCBuPXRoaXMuem9vbUJveEluVWlDb29yZGluYXRlO2lmKCFlJiZ0aGlzLnN0YXRlPT09VnV0LkRSQUdfWk9PTUlORyYmbi53aWR0aD4wJiZuLmhlaWdodD4wKXtjb25zdCB0PXRoaXMuZ2V0RGF0YVgobi54KSxlPXRoaXMuZ2V0RGF0YVgobi54K24ud2lkdGgpLG89dGhpcy5nZXREYXRhWShuLnkrbi5oZWlnaHQpLGk9dGhpcy5nZXREYXRhWShuLnkpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W3QsZV0seTpbbyxpXX19KX10aGlzLnN0YXRlIT09VnV0Lk5PTkUmJih0aGlzLnN0YXRlPVZ1dC5OT05FLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSkpLG9lKHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJtb3VzZWVudGVyIix7cGFzc2l2ZTohMH0pLnBpcGUoSWUodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5pc0N1cnNvckluc2lkZT0hMCx0aGlzLnVwZGF0ZVRvb2x0aXAodCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX0pKSxvZSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIse3Bhc3NpdmU6ITB9KS5waXBlKEllKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgodD0+e3RoaXMuZHJhZ1N0YXJ0Q29vcmQ9bnVsbCx0aGlzLmlzQ3Vyc29ySW5zaWRlPSExLHRoaXMudXBkYXRlVG9vbHRpcCh0KSx0aGlzLnN0YXRlPVZ1dC5OT05FLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSksb2UodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlbW92ZSIse3Bhc3NpdmU6ITB9KS5waXBlKEllKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgodD0+e3N3aXRjaCh0aGlzLnN0YXRlKXtjYXNlIFZ1dC5TQ1JPTExfWk9PTUlORzp0aGlzLnN0YXRlPVZ1dC5OT05FLHRoaXMudXBkYXRlVG9vbHRpcCh0KSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO2JyZWFrO2Nhc2UgVnV0Lk5PTkU6dGhpcy51cGRhdGVUb29sdGlwKHQpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7YnJlYWs7Y2FzZSBWdXQuUEFOTklORzp7Y29uc3QgZT0tdC5tb3ZlbWVudFgsbj0tdC5tb3ZlbWVudFkse3dpZHRoOm8saGVpZ2h0Oml9PXRoaXMuZG9tRGltLGE9dGhpcy5nZXREYXRhWChlKSxyPXRoaXMuZ2V0RGF0YVgobytlKSxzPXRoaXMuZ2V0RGF0YVkoaStuKSxsPXRoaXMuZ2V0RGF0YVkobik7dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdCh7ZGF0YUV4dGVudDp7eDpbYSxyXSx5OltzLGxdfX0pO2JyZWFrfWNhc2UgVnV0LkRSQUdfWk9PTUlORzp7aWYoIXRoaXMuZHJhZ1N0YXJ0Q29vcmQpYnJlYWs7Y29uc3QgZT1bdGhpcy5kcmFnU3RhcnRDb29yZC54LHQub2Zmc2V0WF0sbj1bdGhpcy5kcmFnU3RhcnRDb29yZC55LHQub2Zmc2V0WV07dGhpcy56b29tQm94SW5VaUNvb3JkaW5hdGU9e3g6TWF0aC5taW4oLi4uZSksd2lkdGg6TWF0aC5tYXgoLi4uZSktTWF0aC5taW4oLi4uZSkseTpNYXRoLm1pbiguLi5uKSxoZWlnaHQ6TWF0aC5tYXgoLi4ubiktTWF0aC5taW4oLi4ubil9fXRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9fSkpLG9lKHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJ3aGVlbCIse3Bhc3NpdmU6ITF9KS5waXBlKEllKHRoaXMubmdVbnN1YnNjcmliZSksemUoKHQ9Pntjb25zdCBlPSF0LmN0cmxLZXkmJiF0LnNoaWZ0S2V5JiZ0LmFsdEtleTtyZXR1cm4gdGhpcy5zaG93Wm9vbUluc3RydWN0aW9uPSFlLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksZT8odC5wcmV2ZW50RGVmYXVsdCgpLEV0KHQpKTphZSgzZTMpLnBpcGUoRmUoKCgpPT57dGhpcy5zaG93Wm9vbUluc3RydWN0aW9uPSExLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSksSXQoKCgpPT5udWxsKSkpfSkpLGNlKCh0PT5Cb29sZWFuKHQpKSkpLnN1YnNjcmliZSgodD0+e3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6UnV0KHQsdGhpcy52aWV3RXh0ZW50LHRoaXMuZG9tRGltLC4wMSx0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSl9KSx0aGlzLnN0YXRlIT09VnV0LlNDUk9MTF9aT09NSU5HJiYodGhpcy5zdGF0ZT1WdXQuU0NST0xMX1pPT01JTkcsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSl9bmdPbkNoYW5nZXMoKXt0aGlzLnVwZGF0ZUN1cnNvcmVkRGF0YUFuZFRvb2x0aXBWaXNpYmlsaXR5KCl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfXNob3VsZFBhbih0KXtjb25zdCBlPXQuc2hpZnRLZXl8fHQuYWx0S2V5O2lmKHQgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50KXJldHVybiBlO2NvbnN0IG49KHQuYnV0dG9ucyZnUS5MRUZUKT09PWdRLkxFRlQsbz0odC5idXR0b25zJmdRLk1JRERMRSk9PT1nUS5NSURETEU7cmV0dXJuISghbiYmIW8pJiYobyYmIW58fGUpfXRyYWNrQnlTZXJpZXNOYW1lKHQsZSl7cmV0dXJuIGUuaWR9Z2V0RG9tWCh0KXtyZXR1cm4gdGhpcy54U2NhbGUuZm9yd2FyZCh0aGlzLnZpZXdFeHRlbnQueCx3dXQodGhpcy5kb21EaW0sIngiKSx0KX1nZXREYXRhWCh0KXtyZXR1cm4gdGhpcy54U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueCx3dXQodGhpcy5kb21EaW0sIngiKSx0KX1nZXREb21ZKHQpe3JldHVybiB0aGlzLnlTY2FsZS5mb3J3YXJkKHRoaXMudmlld0V4dGVudC55LHd1dCh0aGlzLmRvbURpbSwieSIpLHQpfWdldERhdGFZKHQpe3JldHVybiB0aGlzLnlTY2FsZS5yZXZlcnNlKHRoaXMudmlld0V4dGVudC55LHd1dCh0aGlzLmRvbURpbSwieSIpLHQpfXNob3VsZFJlbmRlclRvb2x0aXBQb2ludCh0KXtyZXR1cm4gbnVsbCE9PXQmJiFpc05hTih0LngpJiYhaXNOYU4odC55KX11cGRhdGVUb29sdGlwKHQpe3RoaXMuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZD17eDp0aGlzLmdldERhdGFYKHQub2Zmc2V0WCkseTp0aGlzLmdldERhdGFZKHQub2Zmc2V0WSl9LHRoaXMudXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKX1vblRvb2x0aXBEaXNwbGF5RGV0YWNoZWQoKXt0aGlzLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQ9ITF9dXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKXtjb25zdCB0PXRoaXMuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZDtpZihudWxsPT09dClyZXR1cm4gdGhpcy5jdXJzb3JlZERhdGE9W10sdm9pZCh0aGlzLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQ9ITEpO3RoaXMuY3Vyc29yZWREYXRhPXRoaXMuaXNDdXJzb3JJbnNpZGU/dGhpcy5zZXJpZXNEYXRhLm1hcCgodD0+KHtzZXJpZXNEYXR1bTp0LG1ldGFkYXRhOnRoaXMuc2VyaWVzTWV0YWRhdGFNYXBbdC5pZF19KSkpLmZpbHRlcigoKHttZXRhZGF0YTp0fSk9PnQmJnQudmlzaWJsZSYmIUJvb2xlYW4odC5hdXgpKSkubWFwKCgoe3Nlcmllc0RhdHVtOmUsbWV0YWRhdGE6bn0pPT57Y29uc3Qgbz0oZnVuY3Rpb24gaSh0LGUpe2NvbnN0IG49TWF0aC5taW4ocDUodC5tYXAoKCh7eDp0fSk9PnQpKSxlKSx0Lmxlbmd0aC0xKSxvPU1hdGgubWF4KDAsbi0xKTtyZXR1cm4gTWF0aC5hYnModFtvXS54LWUpLU1hdGguYWJzKHRbbl0ueC1lKTw9MD9vOm59KShlLnBvaW50cyx0LngpO3JldHVybntpZDplLmlkLGNsb3Nlc3RQb2ludEluZGV4Om8scG9pbnQ6ZS5wb2ludHNbb10sbWV0YWRhdGE6bn19KSkuZmlsdGVyKCh0PT50KSk6W10sdGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPUJvb2xlYW4odGhpcy5jdXJzb3JlZERhdGEubGVuZ3RoKX19ZnVuY3Rpb24gR3V0KHQsZSxuLG8pe3JldHVybnttYWpvcjpbXSxtaW5vcjp0LnRpY2tzKG8sbikubWFwKCh0PT4oe3ZhbHVlOnQsdGlja0Zvcm1hdHRlZFN0cmluZzplLmZvcm1hdFRpY2sodCl9KSkpfX1VdXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFV1dCkoU20oVWcpLFNtKExGKSl9LFV1dC7JtWNtcD10byh7dHlwZTpVdXQsc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFFoKEF1dCw3LGhnKSxRaChnTCw1KSksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi5kb3RzQ29udGFpbmVyPXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLm92ZXJsYXk9dC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZwdSgic2hvdy16b29tLWluc3RydWN0aW9uIixuLnNob3dab29tSW5zdHJ1Y3Rpb24pfSxpbnB1dHM6e3Nlcmllc0RhdGE6InNlcmllc0RhdGEiLHNlcmllc01ldGFkYXRhTWFwOiJzZXJpZXNNZXRhZGF0YU1hcCIsdmlld0V4dGVudDoidmlld0V4dGVudCIseFNjYWxlOiJ4U2NhbGUiLHlTY2FsZToieVNjYWxlIixkb21EaW06ImRvbURpbSIsdG9vbHRpcE9yaWdpbkVsOiJ0b29sdGlwT3JpZ2luRWwiLHRvb2x0aXBUZW1wbGF0ZToidG9vbHRpcFRlbXBsYXRlIn0sb3V0cHV0czp7b25WaWV3RXh0ZW50Q2hhbmdlOiJvblZpZXdFeHRlbnRDaGFuZ2UiLG9uVmlld0V4dGVudFJlc2V0OiJvblZpZXdFeHRlbnRSZXNldCJ9LGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6TEYsdXNlRmFjdG9yeTpqdXQsZGVwczpbcExdfV0pLEJvXSxkZWNsczoxMix2YXJzOjE1LGNvbnN0czpbWzEsImRvdHMiXSxbImRvdHMiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJ6b29tLWJveCIsNCwibmdJZiJdLFsxLCJ6b29tLWluc3RydWN0aW9uIl0sWzEsImluc3RydWN0aW9uLWNvbnRlbnQiXSxbImNka092ZXJsYXlPcmlnaW4iLCIiLDEsInRvb2x0aXAtb3JpZ2luIl0sWyJ0b29sdGlwT3JpZ2luIiwiY2RrT3ZlcmxheU9yaWdpbiJdLFsiY2RrQ29ubmVjdGVkT3ZlcmxheSIsIiIsMywiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiIsImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIiwiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSIsImNka0Nvbm5lY3RlZE92ZXJsYXlMb2NrUG9zaXRpb24iLCJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUdyb3dBZnRlck9wZW4iLCJkZXRhY2giXSxbImRlZmF1bHRUb29sdGlwIiwiIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiciIsIjQiLDQsIm5nSWYiXSxbInIiLCI0Il0sWzEsInpvb20tYm94Il0sWzEsInRvb2x0aXAtY29udGFpbmVyIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJjaXJjbGUtaGVhZGVyIl0sWzEsInRvb2x0aXAtcm93Il0sWzEsInRvb2x0aXAtcm93LWNpcmNsZSJdLFsxLCJuYW1lIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihxaSgpLFJtKDAsInN2ZyIsMCwxKSxRcCgyLHp1dCwyLDIsIm5nLWNvbnRhaW5lciIsMiksUXAoMyxJdXQsMSw0LCJyZWN0IiwzKSxBbSgpLFppKCksUm0oNCwiZGl2Iiw0KSxSbSg1LCJzcGFuIiw1KSxrdSg2LCJBbHQgKyBTY3JvbGwgdG8gWm9vbSIpLEFtKCksQW0oKSxUbSg3LCJkaXYiLDYsNyksUXAoOSxGdXQsMiw1LCJuZy10ZW1wbGF0ZSIsOCksVm0oImRldGFjaCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblRvb2x0aXBEaXNwbGF5RGV0YWNoZWQoKX0pKSxRcCgxMCxCdXQsMTIsMiwibmctdGVtcGxhdGUiLG51bGwsOSxpYikpLDImZSYmKHB1KCJwYW5uYWJsZSIsbi5zcGVjaWFsS2V5UHJlc3NlZCkoImRyYWdnYWJsZSIsbi5zdGF0ZT09PW4uSW50ZXJhY3Rpb25TdGF0ZS5OT05FfHxuLnN0YXRlPT09bi5JbnRlcmFjdGlvblN0YXRlLkRSQUdfWk9PTUlORykoInBhbm5pbmciLG4uc3RhdGU9PT1uLkludGVyYWN0aW9uU3RhdGUuUEFOTklORykscmMoMiksRG0oIm5nSWYiLG4uc3RhdGU9PT1uLkludGVyYWN0aW9uU3RhdGUuTk9ORSkscmMoMSksRG0oIm5nSWYiLG4uc3RhdGU9PT1uLkludGVyYWN0aW9uU3RhdGUuRFJBR19aT09NSU5HKSxyYyg2KSxEbSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiIsbi50b29sdGlwT3JpZ2luRWwpKCJjZGtDb25uZWN0ZWRPdmVybGF5T3BlbiIsbi50b29sdGlwRGlzcGxheUF0dGFjaGVkJiZuLnN0YXRlPT09bi5JbnRlcmFjdGlvblN0YXRlLk5PTkUpKCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIixuLnRvb2x0aXBQb3NpdGlvbnMpKCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLG4uc2Nyb2xsU3RyYXRlZ3kpKCJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwhMSkoImNka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnMiLCEwKSgiY2RrQ29ubmVjdGVkT3ZlcmxheUdyb3dBZnRlck9wZW4iLCEwKSl9LGRpcmVjdGl2ZXM6W2RNLGZMLGdMLGxNLE1NXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZTt1c2VyLXNlbGVjdDpub25lfS5kb3RzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5kb3RzLmRyYWdnYWJsZVtfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOmNyb3NzaGFpcn0uZG90cy5wYW5uYWJsZVtfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOmdyYWJ9LmRvdHMucGFubmluZ1tfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOmdyYWJiaW5nfS50b29sdGlwLXJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjYpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMHB4O3dpZHRoOjEwcHh9LnRvb2x0aXAtb3JpZ2luW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH0udG9vbHRpcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuODUpO2JvcmRlci1yYWRpdXM6NHB4O2NvbG9yOiNmZmY7Y29udGFpbjpwYWludCBzdHlsZSBsYXlvdXQ7Zm9udC1zaXplOi45ZW07b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjVweDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjEwMCV9dGhbX25nY29udGVudC0lQ09NUCVdLCB0ZFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggNXB4O3RleHQtYWxpZ246bGVmdH10aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NTAwO3BhZGRpbmctYm90dG9tOjVweH0uem9vbS1ib3hbX25nY29udGVudC0lQ09NUCVde2ZpbGwtb3BhY2l0eTouMDM7ZmlsbDojMDAwO3N0cm9rZTojY2NjfS56b29tLWluc3RydWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bGVmdDowO29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjEwcHg7dHJhbnNpdGlvbjpvcGFjaXR5IC41czt6LWluZGV4OjF9Lmluc3RydWN0aW9uLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNik7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6I2ZmZjtwYWRkaW5nOjVweCAxMHB4O3VzZXItc2VsZWN0Om5vbmV9LnNob3ctem9vbS1pbnN0cnVjdGlvbltfbmdob3N0LSVDT01QJV0gICAuem9vbS1pbnN0cnVjdGlvbltfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChVdXQsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibGluZS1jaGFydC1pbnRlcmFjdGl2ZS12aWV3Iix0ZW1wbGF0ZVVybDoiLi9saW5lX2NoYXJ0X2ludGVyYWN0aXZlX3ZpZXcubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9saW5lX2NoYXJ0X2ludGVyYWN0aXZlX3ZpZXcuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOkxGLHVzZUZhY3Rvcnk6anV0LGRlcHM6W3BMXX1dfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6VWd9LHt0eXBlOkxGfV19KSx7ZG90c0NvbnRhaW5lcjpbe3R5cGU6WmEsYXJnczpbImRvdHMiLHtzdGF0aWM6ITAscmVhZDpoZ31dfV0sb3ZlcmxheTpbe3R5cGU6WmEsYXJnczpbZ0xdfV0sc2VyaWVzRGF0YTpbe3R5cGU6eHl9XSxzZXJpZXNNZXRhZGF0YU1hcDpbe3R5cGU6eHl9XSx2aWV3RXh0ZW50Olt7dHlwZTp4eX1dLHhTY2FsZTpbe3R5cGU6eHl9XSx5U2NhbGU6W3t0eXBlOnh5fV0sZG9tRGltOlt7dHlwZTp4eX1dLHRvb2x0aXBPcmlnaW5FbDpbe3R5cGU6eHl9XSx0b29sdGlwVGVtcGxhdGU6W3t0eXBlOnh5fV0sb25WaWV3RXh0ZW50Q2hhbmdlOlt7dHlwZTpPeX1dLG9uVmlld0V4dGVudFJlc2V0Olt7dHlwZTpPeX1dLHNob3dab29tSW5zdHJ1Y3Rpb246W3t0eXBlOlB5LGFyZ3M6WyJjbGFzcy5zaG93LXpvb20taW5zdHJ1Y3Rpb24iXX1dfSk7Y29uc3QgV3V0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIik7ZnVuY3Rpb24gWXV0KHQsZSl7aWYoMSZ0JiYocWkoKSxSbSgwLCJnIiwxNyksUm0oMSwidGV4dCIpLGt1KDIpLEFtKCksUm0oMywidGl0bGUiKSxrdSg0KSxBbSgpLEFtKCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdCxuPVltKCk7cmMoMSksZHUoImZvbnQiLG4uYXhpc0ZvbnQpLGpwKCJ4IixuLnRleHRYUG9zaXRpb24odC52YWx1ZSkpKCJ5IixuLnRleHRZUG9zaXRpb24odC52YWx1ZSkpLHJjKDEpLER1KCIgIix0LnRpY2tGb3JtYXR0ZWRTdHJpbmcsIiAiKSxyYygyKSxTdShuLmdldEZvcm1hdHRlcigpLmZvcm1hdExvbmcodC52YWx1ZSkpfX1mdW5jdGlvbiBxdXQodCxlKXtpZigxJnQmJihSbSgwLCJzcGFuIiwyMCksUm0oMSwic3BhbiIpLGt1KDIpLEFtKCksQW0oKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49ZS5pbmRleCxvPWUubGFzdCxpPVltKDIpO2R1KCJsZWZ0IixpLmdldE1ham9yWFBvc2l0aW9uKHQpLCJweCIpKCJ3aWR0aCIsaS5nZXRNYWpvcldpZHRoU3RyaW5nKHQsbyxpLm1ham9yVGlja3NbbisxXSkpKCJib3R0b20iLGkuZ2V0TWFqb3JZUG9zaXRpb24odCksInB4IikoImhlaWdodCIsaS5nZXRNYWpvckhlaWdodFN0cmluZyh0LG8saS5tYWpvclRpY2tzW24rMV0pKSgiZm9udCIsaS5heGlzRm9udCkscHUoIm1ham9yLWxhYmVsIiwhMCkoImxhc3QiLG8pLERtKCJ0aXRsZSIsaS5nZXRGb3JtYXR0ZXIoKS5mb3JtYXRMb25nKHQuc3RhcnQpKSxyYygyKSxTdSh0LnRpY2tGb3JtYXR0ZWRTdHJpbmcpfX1mdW5jdGlvbiBadXQodCxlKXtpZigxJnQmJihSbSgwLCJkaXYiLDE4KSxRcCgxLHF1dCwzLDE2LCJzcGFuIiwxOSksQW0oKSksMiZ0KXtjb25zdCB0PVltKCk7cmMoMSksRG0oIm5nRm9yT2YiLHQubWFqb3JUaWNrcykoIm5nRm9yVHJhY2tCeSIsdC50cmFja0J5TWFqb3JUaWNrKX19Y2xhc3MgWHV0e2NvbnN0cnVjdG9yKCl7dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2U9bmV3IExoLHRoaXMuZWRpdE1lbnVPcGVuZWQ9ITEsdGhpcy5tYWpvclRpY2tzPVtdLHRoaXMubWlub3JUaWNrcz1bXX1uZ09uQ2hhbmdlcygpe2xldCB0PW51bGw7Y29uc3QgZT1rdXQoIngiPT09dGhpcy5heGlzP3RoaXMuZG9tRGltLndpZHRoOnRoaXMuZG9tRGltLmhlaWdodCx0aGlzLmdyaWRDb3VudCk7dD10aGlzLnNjYWxlIGluc3RhbmNlb2YgdGl0PyhmdW5jdGlvbiBuKHQsZSxvLGkpe2NvbnN0W2Escl09aSxzPU1hdGguYWJzKHItYSk7aWYocz4uMDAxKXJldHVybiBHdXQodCxlLG8saSk7Y29uc3QgbD10LnRpY2tzKFthLHJdLG8pLGM9dC50aWNrcyhbYSxyXSwyKSxkPVtdO2xldCBwPShmdW5jdGlvbiBtKHQpe2NvbnN0IGU9dC50b0V4cG9uZW50aWFsKCkuc3BsaXQoImUtIiwyKTtyZXR1cm4gMj09PWUubGVuZ3RoP051bWJlcihlWzFdKS0xOjB9KShzKTtzPDEmJmMuZXZlcnkoKHQ9Pntjb25zdCBlPU1hdGguYWJzKHQpO3JldHVybiBlPj0wJiZlPDF9KSkmJihwKz0xKTtjb25zdCB1PW5ldyBNYXA7Zm9yKGNvbnN0IHQgb2YgYyl7Y29uc3RbbixvPSIiXT1TdHJpbmcodCkuc3BsaXQoIi4iLDIpLGk9TnVtYmVyKG4rIi4iK28uc2xpY2UoMCxwKSk7dS5zZXQoaSx7c3RhcnQ6aSx0aWNrRm9ybWF0dGVkU3RyaW5nOjA9PT1pPyLigJQiOmUuZm9ybWF0UmVhZGFibGUoaSl9KX1jb25zdCBmPTEwKk1hdGgucG93KDEwLC1wKTtmb3IoY29uc3QgdCBvZiBsKWZvcihjb25zdCBuIG9mWy4uLnUua2V5cygpXS5yZXZlcnNlKCkpe2NvbnN0IG89dC1uO2lmKG8+PTAmJm88Zil7aWYoMD09PW4pZC5wdXNoKHt2YWx1ZTp0LHRpY2tGb3JtYXR0ZWRTdHJpbmc6ZS5mb3JtYXRUaWNrKHQpfSk7ZWxzZXtjb25zdCBlPVN0cmluZyh0KS5zbGljZShTdHJpbmcobikubGVuZ3RoKTtkLnB1c2goe3ZhbHVlOnQsdGlja0Zvcm1hdHRlZFN0cmluZzpg4oCmJHtlfHwiMCJ9YH0pfWJyZWFrfX1yZXR1cm57bWFqb3I6QXJyYXkuZnJvbSh1LnZhbHVlcygpKSxtaW5vcjpkfX0pKHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxlLHRoaXMuYXhpc0V4dGVudCk6dGhpcy5zY2FsZSBpbnN0YW5jZW9mIG5pdD8oZnVuY3Rpb24gbyh0LGUsbixpKXtjb25zdFthLHJdPWk7bGV0IHM9dC50aWNrcyhpLDIpO2lmKHItYT49ODY0ZTV8fHMubGVuZ3RoPjIpcmV0dXJuIEd1dCh0LGUsbixpKTtjb25zdCBsPXQudGlja3MoaSxuKTtyZXR1cm57bWFqb3I6cy5tYXAoKHQ9Pih7c3RhcnQ6dCx0aWNrRm9ybWF0dGVkU3RyaW5nOmUuZm9ybWF0U2hvcnQodCl9KSkpLG1pbm9yOmwubWFwKCh0PT4oe3ZhbHVlOnQsdGlja0Zvcm1hdHRlZFN0cmluZzplLmZvcm1hdFRpY2sodCl9KSkpfX0pKHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxlLHRoaXMuYXhpc0V4dGVudCk6R3V0KHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxlLHRoaXMuYXhpc0V4dGVudCksdGhpcy5tYWpvclRpY2tzPXQubWFqb3IsdGhpcy5taW5vclRpY2tzPShmdW5jdGlvbiBpKHQsZSxuLG8sYT01KXtpZighdC5sZW5ndGh8fCFXdXQpcmV0dXJuIHQ7Y29uc3Qgcj0ieCI9PT1uPzE6LTE7bGV0IHM9bnVsbDtyZXR1cm4gdC5maWx0ZXIoKHQ9Pntjb25zdCBpPWUodCk7V3V0LmZvbnQ9bztjb25zdCBsPVd1dC5tZWFzdXJlVGV4dCh0LnRpY2tGb3JtYXR0ZWRTdHJpbmcpLGM9IngiPT09bj9sLndpZHRoOmwuYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQtbC5hY3R1YWxCb3VuZGluZ0JveERlc2NlbnQ7cmV0dXJuIG51bGw9PT1zPyEoaStyKmM8MHx8KHM9aStyKmMsMCkpOiEocioocytyKmEtaSk+MHx8KHM9aStyKmMsMCkpfSkpfSkodC5taW5vciwodD0+dGhpcy5nZXREb21Qb3ModC52YWx1ZSkpLHRoaXMuYXhpcywiMTFweCBSb2JvdG8sIHNhbnMtc2VyaWYiKX1nZXRGb3JtYXR0ZXIoKXt2YXIgdDtyZXR1cm4gbnVsbCE9PSh0PXRoaXMuY3VzdG9tRm9ybWF0dGVyKSYmdm9pZCAwIT09dD90OnRoaXMuc2NhbGUuZGVmYXVsdEZvcm1hdHRlcn10cmFja0J5TWlub3JUaWNrKHQpe3JldHVybiB0LnZhbHVlfXRyYWNrQnlNYWpvclRpY2sodCl7cmV0dXJuIHQuc3RhcnR9Z2V0RG9tUG9zKHQpe3JldHVybiB0aGlzLnNjYWxlLmZvcndhcmQodGhpcy5heGlzRXh0ZW50LHd1dCh0aGlzLmRvbURpbSx0aGlzLmF4aXMpLHQpfXRleHRYUG9zaXRpb24odCl7cmV0dXJuIngiPT09dGhpcy5heGlzP1N0cmluZyh0aGlzLmdldERvbVBvcyh0KSk6IjEwMCUifXRleHRZUG9zaXRpb24odCl7cmV0dXJuIngiPT09dGhpcy5heGlzPyIiOlN0cmluZyh0aGlzLmdldERvbVBvcyh0KSl9Z2V0TWFqb3JYUG9zaXRpb24odCl7cmV0dXJuInkiPT09dGhpcy5heGlzPzA6TWF0aC5taW4odGhpcy5kb21EaW0ud2lkdGgsTWF0aC5tYXgoMCx0aGlzLmdldERvbVBvcyh0LnN0YXJ0KSkpfWdldE1ham9yV2lkdGhTdHJpbmcodCxlLG4pe3JldHVybiJ5Ij09PXRoaXMuYXhpcz8iIjooZXx8IW4/dGhpcy5kb21EaW0ud2lkdGg6dGhpcy5nZXRNYWpvclhQb3NpdGlvbihuKSktdGhpcy5nZXRNYWpvclhQb3NpdGlvbih0KSsicHgifWdldE1ham9yWVBvc2l0aW9uKHQpe3JldHVybiJ4Ij09PXRoaXMuYXhpcz8wOnRoaXMuZG9tRGltLmhlaWdodC1NYXRoLm1pbih0aGlzLmRvbURpbS5oZWlnaHQsTWF0aC5tYXgoMCx0aGlzLmdldERvbVBvcyh0LnN0YXJ0KSkpfWdldE1ham9ySGVpZ2h0U3RyaW5nKHQsZSxuKXtyZXR1cm4ieCI9PT10aGlzLmF4aXM/IiI6KGV8fCFuP3RoaXMuZG9tRGltLmhlaWdodDp0aGlzLmdldE1ham9yWVBvc2l0aW9uKG4pKS10aGlzLmdldE1ham9yWVBvc2l0aW9uKHQpKyJweCJ9a2V5ZG93blByZXZlbnRDbG9zZSh0KXsiRXNjYXBlIiE9PXQua2V5JiZ0LnN0b3BQcm9wYWdhdGlvbigpfWV4dGVudENoYW5nZWQodCxlKXtsZXQgbj1OdW1iZXIodCksbz1OdW1iZXIoZSk7aWYobzxuKXtjb25zdCB0PW47bj1vLG89dH1OdW1iZXIuaXNGaW5pdGUobikmJk51bWJlci5pc0Zpbml0ZShvKSYmdGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdChbbixvXSl9b25BeGlzVXBkYXRlTWVudU9wZW4odCxlLG4pe3QudmFsdWU9U3RyaW5nKG5bMF0pLGUudmFsdWU9U3RyaW5nKG5bMV0pLHQuZm9jdXMoKX1zZXRFZGl0TWVudU9wZW5lZCh0KXt0aGlzLmVkaXRNZW51T3BlbmVkPXR9fVh1dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WHV0KX0sWHV0Lsm1Y21wPXRvKHt0eXBlOlh1dCxzZWxlY3RvcnM6W1sibGluZS1jaGFydC1heGlzIl1dLGlucHV0czp7YXhpc0V4dGVudDoiYXhpc0V4dGVudCIsYXhpczoiYXhpcyIsc2NhbGU6InNjYWxlIixncmlkQ291bnQ6ImdyaWRDb3VudCIsZG9tRGltOiJkb21EaW0iLGN1c3RvbUZvcm1hdHRlcjoiY3VzdG9tRm9ybWF0dGVyIn0sb3V0cHV0czp7b25WaWV3RXh0ZW50Q2hhbmdlOiJvblZpZXdFeHRlbnRDaGFuZ2UifSxmZWF0dXJlczpbQm9dLGRlY2xzOjI2LHZhcnM6MTMsY29uc3RzOltbMSwibGluZSJdLFsxLCJtaW5vciJdLFsxLCJ0aWNrcyJdLFsiY2xhc3MiLCJtaW5vci10aWNrLWxhYmVsIiw0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInRpdGxlIiwiQ2xpY2sgdG8gbWFudWFsbHkgc2V0IG1pbiAmIG1heCB2YWx1ZXMiLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIiwibWVudU9wZW5lZCIsIm1lbnVDbG9zZWQiXSxbIm1hdE1lbnVUcmlnZ2VyIiwibWF0TWVudVRyaWdnZXIiXSxbInN2Z0ljb24iLCJlZGl0XzI0cHgiXSxbImNsYXNzIiwibWFqb3IgdGlja3MiLDQsIm5nSWYiXSxbInhQb3NpdGlvbiIsImJlZm9yZSIsMywieVBvc2l0aW9uIl0sWyJtYW51YWxDb250cm9sIiwibWF0TWVudSJdLFsxLCJleHRlbnQtZWRpdC1pbnB1dCIsMywiY2xpY2siLCJrZXlkb3duIl0sWyJ0eXBlIiwibnVtYmVyIiwzLCJ2YWx1ZSJdLFsibWluSW5wdXQiLCIiXSxbIm1heElucHV0IiwiIl0sWzEsImV4dGVudC1lZGl0LWNvbnRyb2wiLDMsImtleWRvd24iXSxbIm1hdC1yYWlzZWQtYnV0dG9uIiwiIiwiY29sb3IiLCJwcmltYXJ5IiwxLCJleHRlbnQtZWRpdC1jaGFuZ2UiLDMsImNsaWNrIl0sWyJtYXQtc3Ryb2tlZC1idXR0b24iLCIiLDEsImV4dGVudC1lZGl0LWNhbmNlbCIsMywiY2xpY2siXSxbMSwibWlub3ItdGljay1sYWJlbCJdLFsxLCJtYWpvciIsInRpY2tzIl0sWzMsIm1ham9yLWxhYmVsIiwibGFzdCIsImxlZnQiLCJ3aWR0aCIsImJvdHRvbSIsImhlaWdodCIsImZvbnQiLCJ0aXRsZSIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzMsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUpe2NvbnN0IHQ9SG0oKTtSbSgwLCJkaXYiKSxUbSgxLCJkaXYiLDApLFJtKDIsImRpdiIsMSkscWkoKSxSbSgzLCJzdmciLDIpLFFwKDQsWXV0LDUsNiwiZyIsMyksQW0oKSxaaSgpLFJtKDUsImJ1dHRvbiIsNCw1KSxWbSgibWVudU9wZW5lZCIsKGZ1bmN0aW9uIGUoKXtoaSh0KTtjb25zdCBvPSRwKDE1KSxpPSRwKDIwKTtyZXR1cm4gbi5vbkF4aXNVcGRhdGVNZW51T3BlbihvLGksbi5heGlzRXh0ZW50KSxuLnNldEVkaXRNZW51T3BlbmVkKCEwKX0pKSgibWVudUNsb3NlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5zZXRFZGl0TWVudU9wZW5lZCghMSl9KSksVG0oNywibWF0LWljb24iLDYpLEFtKCksQW0oKSxRcCg4LFp1dCwyLDIsImRpdiIsNyksQW0oKSxSbSg5LCJtYXQtbWVudSIsOCw5KSxSbSgxMSwiZGl2IiwxMCksVm0oImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKX0pKSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ua2V5ZG93blByZXZlbnRDbG9zZShlKX0pKSxSbSgxMiwibGFiZWwiKSxrdSgxMywibWluIiksQW0oKSxUbSgxNCwiaW5wdXQiLDExLDEyKSxBbSgpLFJtKDE2LCJkaXYiLDEwKSxWbSgiY2xpY2siLChmdW5jdGlvbiB0KGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpfSkpKCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5rZXlkb3duUHJldmVudENsb3NlKGUpfSkpLFJtKDE3LCJsYWJlbCIpLGt1KDE4LCJtYXgiKSxBbSgpLFRtKDE5LCJpbnB1dCIsMTEsMTMpLEFtKCksUm0oMjEsImRpdiIsMTQpLFZtKCJrZXlkb3duIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5rZXlkb3duUHJldmVudENsb3NlKGUpfSkpLFJtKDIyLCJidXR0b24iLDE1KSxWbSgiY2xpY2siLChmdW5jdGlvbiBlKCl7aGkodCk7Y29uc3Qgbz0kcCgxNSksaT0kcCgyMCksYT0kcCg2KTtyZXR1cm4gbi5leHRlbnRDaGFuZ2VkKG8udmFsdWUsaS52YWx1ZSksYS5jbG9zZU1lbnUoKX0pKSxrdSgyMywiIENoYW5nZSAiKSxBbSgpLFJtKDI0LCJidXR0b24iLDE2KSxWbSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIGhpKHQpLCRwKDYpLmNsb3NlTWVudSgpfSkpLGt1KDI1LCIgQ2FuY2VsICIpLEFtKCksQW0oKSxBbSgpfWlmKDImZSl7Y29uc3QgdD0kcCgxMCk7ZnUobi5heGlzKyItYXhpcyBheGlzIikscmMoNCksRG0oIm5nRm9yT2YiLG4ubWlub3JUaWNrcykoIm5nRm9yVHJhY2tCeSIsbi50cmFja0J5TWlub3JUaWNrKSxyYygxKSxwdSgiZXh0ZW50LWVkaXQtYnV0dG9uIiwhMCkoImV4dGVudC1lZGl0LW1lbnUtb3BlbmVkIixuLmVkaXRNZW51T3BlbmVkKSxEbSgibWF0TWVudVRyaWdnZXJGb3IiLHQpLHJjKDMpLERtKCJuZ0lmIixuLm1ham9yVGlja3MubGVuZ3RoKSxyYygxKSxEbSgieVBvc2l0aW9uIiwieSI9PT1uLmF4aXM/ImFib3ZlIjoiYmVsb3ciKSxyYyg1KSxEbSgidmFsdWUiLG4uYXhpc0V4dGVudFswXSkscmMoNSksRG0oInZhbHVlIixuLmF4aXNFeHRlbnRbMV0pfX0sZGlyZWN0aXZlczpbbE0sWEgsZVksRFcsZE0sS1ddLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbn0ubWFqb3ItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcjtmb250LXNpemU6MTFweDt1c2VyLXNlbGVjdDpub25lfS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0ubWFqb3JbX25nY29udGVudC0lQ09NUCVdLCAubWlub3JbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAwO292ZXJmbG93OmhpZGRlbn0ubGluZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojYWFhO2ZsZXg6MCAwIDFweDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH0udGlja3NbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17ZmxleC1kaXJlY3Rpb246Y29sdW1ufS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLmxpbmVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206M3B4fS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6dGV4dC1iZWZvcmUtZWRnZTt0ZXh0LWFuY2hvcjptaWRkbGV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAudGlja3NbX25nY29udGVudC0lQ09NUCVdey13ZWJraXQtbWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwMDAwIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsICMwMDAwIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDAwMCAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCAjMDAwMCAxMDAlKX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDo1cHh9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTpjZW50cmFsO3RleHQtYW5jaG9yOmVuZH0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrc1tfbmdjb250ZW50LSVDT01QJV17LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMwMDAwIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsICMwMDAwIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzAwMDAgMCUsICMwMDAgMTAlLCAjMDAwIDkwJSwgIzAwMDAgMTAwJSl9LmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlO2Rpc3BsYXk6bm9uZTtmb250LXNpemU6MDtoZWlnaHQ6MjRweDtsaW5lLWhlaWdodDoyNHB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjVweDt0b3A6NXB4O3dpZHRoOjI0cHh9LmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjE2cHg7d2lkdGg6MTZweDtsaW5lLWhlaWdodDoxNnB4fS5leHRlbnQtZWRpdC1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2NvbHVtbi1nYXA6NXB4O2Rpc3BsYXk6Z3JpZDtmb250LXNpemU6MTJweDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MzBweCBtaW5tYXgoYXV0bywgMTAwcHgpO2hlaWdodDozMHB4O21hcmdpbjoxMHB4IDIwcHh9LmV4dGVudC1lZGl0LWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2NvbG9yOmluaGVyaXR9LmV4dGVudC1lZGl0LWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO21hcmdpbjoxMHB4IDIwcHh9LmV4dGVudC1lZGl0LWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtoZWlnaHQ6MzBweDtsaW5lLWhlaWdodDoxLjQ7bWFyZ2luLWxlZnQ6NXB4O3BhZGRpbmc6MCAxMHB4fS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciAgIC5leHRlbnQtZWRpdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAuZXh0ZW50LWVkaXQtbWVudS1vcGVuZWRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5pdGlhbH0ubWFqb3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtjb250YWluOnN0cmljdH0ubWFqb3JbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7d2hpdGUtc3BhY2U6bm93cmFwfS5tYWpvcltfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWxbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjOWU5ZTllO3BhZGRpbmc6MCA1cHh9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWwubGFzdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjOWU5ZTllfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOWU5ZTllO2hlaWdodDoxMDAlO3BhZGRpbmc6NXB4IDA7d2lkdGg6MTAwJX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbC5sYXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjOWU5ZTllfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcn0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoWHV0LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6ImxpbmUtY2hhcnQtYXhpcyIsdGVtcGxhdGVVcmw6ImxpbmVfY2hhcnRfYXhpc192aWV3Lm5nLmh0bWwiLHN0eWxlVXJsczpbImxpbmVfY2hhcnRfYXhpc192aWV3LmNzcyJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwse2F4aXNFeHRlbnQ6W3t0eXBlOnh5fV0sYXhpczpbe3R5cGU6eHl9XSxzY2FsZTpbe3R5cGU6eHl9XSxncmlkQ291bnQ6W3t0eXBlOnh5fV0sZG9tRGltOlt7dHlwZTp4eX1dLGN1c3RvbUZvcm1hdHRlcjpbe3R5cGU6eHl9XSxvblZpZXdFeHRlbnRDaGFuZ2U6W3t0eXBlOk95fV19KTtjb25zdCBLdXQ9WyJzZXJpZXNWaWV3Il0sSnV0PVsieEF4aXMiXSxRdXQ9WyJ5QXhpcyJdLCR1dD1bImNoYXJ0RWwiXTtmdW5jdGlvbiB0ZnQodCxlKXtpZigxJnQmJlRtKDAsImxpbmUtY2hhcnQtZ3JpZC12aWV3IiwxNSksMiZ0KXtjb25zdCB0PVltKCk7RG0oInZpZXdFeHRlbnQiLHQudmlld0JveCkoInhTY2FsZSIsdC54U2NhbGUpKCJ5U2NhbGUiLHQueVNjYWxlKSgieEdyaWRDb3VudCIsdC5YX0dSSURfQ09VTlQpKCJ5R3JpZENvdW50Iix0LllfR1JJRF9DT1VOVCkoImRvbURpbSIsdC5kb21EaW1lbnNpb25zLm1haW4pfX1mdW5jdGlvbiBlZnQodCxlKXsxJnQmJihxaSgpLFRtKDAsInN2ZyIsbnVsbCwxNikpfWZ1bmN0aW9uIG5mdCh0LGUpezEmdCYmVG0oMCwiY2FudmFzIixudWxsLDE2KX1mdW5jdGlvbiBvZnQodCxlKXtpZigxJnQmJihObSgwKSxRcCgxLGVmdCwyLDAsInN2ZyIsNSksUXAoMixuZnQsMiwwLCJjYW52YXMiLDUpLHptKCkpLDImdCl7Y29uc3QgdD1ZbSgpO3JjKDEpLERtKCJuZ0lmIix0LmdldFJlbmRlcmVyVHlwZSgpPT09dC5SZW5kZXJlclR5cGUuU1ZHKSxyYygxKSxEbSgibmdJZiIsdC5nZXRSZW5kZXJlclR5cGUoKT09PXQuUmVuZGVyZXJUeXBlLldFQkdMKX19ZnVuY3Rpb24gaWZ0KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwibGluZS1jaGFydC1pbnRlcmFjdGl2ZS12aWV3IiwxNyksVm0oIm9uVmlld0V4dGVudENoYW5nZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKCkub25WaWV3Qm94Q2hhbmdlZChuKX0pKSgib25WaWV3RXh0ZW50UmVzZXQiLChmdW5jdGlvbiBlKCl7cmV0dXJuIGhpKHQpLFltKCkudmlld0JveFJlc2V0KCl9KSksQW0oKX1pZigyJnQpe2NvbnN0IHQ9WW0oKSxlPSRwKDEpO0RtKCJzZXJpZXNEYXRhIix0LnNlcmllc0RhdGEpKCJzZXJpZXNNZXRhZGF0YU1hcCIsdC5zZXJpZXNNZXRhZGF0YU1hcCkoInZpZXdFeHRlbnQiLHQudmlld0JveCkoInhTY2FsZSIsdC54U2NhbGUpKCJ5U2NhbGUiLHQueVNjYWxlKSgidG9vbHRpcE9yaWdpbkVsIixlKSgiZG9tRGltIix0LmRvbURpbWVuc2lvbnMubWFpbikoInRvb2x0aXBUZW1wbGF0ZSIsdC50b29sdGlwVGVtcGxhdGUpfX1jb25zdCBhZnQ9ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJue3hTY2FsZTp0LHlTY2FsZTplLGRvbURpbWVuc2lvbjpuLHZpZXdFeHRlbnQ6b319O2Z1bmN0aW9uIHJmdCh0LGUpe2lmKDEmdCYmKFJtKDAsImRpdiIsMTgpLEltKDEsMTkpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgpO3JjKDEpLERtKCJuZ1RlbXBsYXRlT3V0bGV0Iix0LmN1c3RvbVZpc1RlbXBsYXRlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLE9oKDIsYWZ0LHQueFNjYWxlLHQueVNjYWxlLHQuZG9tRGltZW5zaW9ucy5tYWluLHQudmlld0JveCkpfX1mdW5jdGlvbiBzZnQodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJsaW5lLWNoYXJ0LWF4aXMiLDIwKSxWbSgib25WaWV3RXh0ZW50Q2hhbmdlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oKS5vblZpZXdCb3hDaGFuZ2VkRnJvbUF4aXMobiwieSIpfSkpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PVltKCk7RG0oImF4aXNFeHRlbnQiLHQudmlld0JveC55KSgiY3VzdG9tRm9ybWF0dGVyIix0LmN1c3RvbVlGb3JtYXR0ZXIpKCJkb21EaW0iLHQuZG9tRGltZW5zaW9ucy55QXhpcykoImdyaWRDb3VudCIsdC5ZX0dSSURfQ09VTlQpKCJzY2FsZSIsdC55U2NhbGUpfX1mdW5jdGlvbiBsZnQodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJsaW5lLWNoYXJ0LWF4aXMiLDIxKSxWbSgib25WaWV3RXh0ZW50Q2hhbmdlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oKS5vblZpZXdCb3hDaGFuZ2VkRnJvbUF4aXMobiwieCIpfSkpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PVltKCk7RG0oImF4aXNFeHRlbnQiLHQudmlld0JveC54KSgiY3VzdG9tRm9ybWF0dGVyIix0LmN1c3RvbVhGb3JtYXR0ZXIpKCJkb21EaW0iLHQuZG9tRGltZW5zaW9ucy54QXhpcykoImdyaWRDb3VudCIsdC5YX0dSSURfQ09VTlQpKCJzY2FsZSIsdC54U2NhbGUpfX1jb25zdCBjZnQ9ZnVuY3Rpb24odCxlLG4sbyxpKXtyZXR1cm57eFNjYWxlOnQseVNjYWxlOmUsZG9tRGltZW5zaW9uOm4sdmlld0V4dGVudDpvLGZvcm1hdHRlcjppfX07ZnVuY3Rpb24gZGZ0KHQsZSl7aWYoMSZ0JiYoUm0oMCwiZGl2IiwxOCksSW0oMSwxOSksQW0oKSksMiZ0KXtjb25zdCB0PVltKCk7cmMoMSksRG0oIm5nVGVtcGxhdGVPdXRsZXQiLHQuY3VzdG9tWEF4aXNUZW1wbGF0ZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixQaCgyLGNmdCx0LnhTY2FsZSx0LnlTY2FsZSx0LmRvbURpbWVuc2lvbnMueEF4aXMsdC52aWV3Qm94LHQuY3VzdG9tWEZvcm1hdHRlcnx8dC54U2NhbGUuZGVmYXVsdEZvcm1hdHRlcikpfX1mdW5jdGlvbiBwZnQodCxlKXsxJnQmJihSbSgwLCJkaXYiLDIyKSxUbSgxLCJzcGFuIiwyMyksQW0oKSl9Y29uc3QgbWZ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJue2NvbnRhaW5lcjohMCwiZGFyay1tb2RlIjp0LCJsaW5lLW9ubHktbW9kZSI6ZX19LHVmdD17eDpbMCwxXSx5OlswLDFdfTtjbGFzcyBmZnR7Y29uc3RydWN0b3IodCl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj10LHRoaXMuUmVuZGVyZXJUeXBlPUsyLHRoaXMudXNlRGFya01vZGU9ITEsdGhpcy5wcmVmZXJyZWRSZW5kZXJlclR5cGU9SzIuV0VCR0wsdGhpcy54U2NhbGVUeXBlPUoyLkxJTkVBUix0aGlzLnlTY2FsZVR5cGU9SjIuTElORUFSLHRoaXMubGluZU9ubHk9ITEsdGhpcy5vblZpZXdCb3hPdmVycmlkZGVuPW5ldyBCKDEpLHRoaXMuaWdub3JlWU91dGxpZXJzPSExLHRoaXMuWV9HUklEX0NPVU5UPTYsdGhpcy5YX0dSSURfQ09VTlQ9MTAsdGhpcy54U2NhbGU9JG90KHRoaXMueFNjYWxlVHlwZSksdGhpcy55U2NhbGU9JG90KHRoaXMueFNjYWxlVHlwZSksdGhpcy52aWV3Qm94PXVmdCx0aGlzLmRvbURpbWVuc2lvbnM9e21haW46e3dpZHRoOjAsaGVpZ2h0OjB9LHhBeGlzOnt3aWR0aDowLGhlaWdodDowfSx5QXhpczp7d2lkdGg6MCxoZWlnaHQ6MH19LHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSEwLHRoaXMubGluZUNoYXJ0PW51bGwsdGhpcy5pc0RhdGFVcGRhdGVkPSExLHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITEsdGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWQ9ITEsdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuPSExLHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSExLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLnNjYWxlVXBkYXRlZD0hMCx0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3Q9ITF9bmdPbkluaXQoKXt0aGlzLm9uVmlld0JveE92ZXJyaWRkZW4ubmV4dCh0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4pfW5nT25DaGFuZ2VzKHQpe3QueFNjYWxlVHlwZSYmKHRoaXMueFNjYWxlPSRvdCh0aGlzLnhTY2FsZVR5cGUpLHRoaXMuc2NhbGVVcGRhdGVkPSEwKSx0LnlTY2FsZVR5cGUmJih0aGlzLnlTY2FsZT0kb3QodGhpcy55U2NhbGVUeXBlKSx0aGlzLnNjYWxlVXBkYXRlZD0hMCksdC5zZXJpZXNEYXRhJiYodGhpcy5pc0RhdGFVcGRhdGVkPSEwKSx0LmZpeGVkVmlld0JveCYmKHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSEwKSx0LnNlcmllc01ldGFkYXRhTWFwJiYodGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMCksdC51c2VEYXJrTW9kZSYmKHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSEwKSx0aGlzLnNjYWxlVXBkYXRlZCYmdGhpcy5zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKCExKSx0aGlzLmlzVmlld0JveENoYW5nZWQ9dGhpcy5pc1ZpZXdCb3hDaGFuZ2VkfHx0aGlzLnNjYWxlVXBkYXRlZHx8IXRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbiYmdGhpcy5zaG91bGRVcGRhdGVEZWZhdWx0Vmlld0JveCh0KSx0aGlzLnVwZGF0ZUxpbmVDaGFydCgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuaW5pdGlhbGl6ZUNoYXJ0KCksdGhpcy51cGRhdGVMaW5lQ2hhcnQoKSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKX1yZWNvdmVyUmVuZGVyZXJJZk5lZWRlZCgpe3RoaXMuaXNSZW5kZXJpbmdDb250ZXh0TG9zdCYmIXRoaXMuZGlzYWJsZVVwZGF0ZSYmKHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSExLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSEwLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuaW5pdGlhbGl6ZUNoYXJ0KCksdGhpcy5zY2FsZVVwZGF0ZWQ9ITAsdGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMCx0aGlzLmlzRGF0YVVwZGF0ZWQ9ITAsdGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITAsdGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWQ9ITAsdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPSEwLHRoaXMuaXNSZW5kZXJpbmdDb250ZXh0TG9zdD0hMSl9b25WaWV3UmVzaXplKCl7dGhpcy5saW5lQ2hhcnQmJih0aGlzLnJlYWRBbmRVcGRhdGVEb21EaW1lbnNpb25zKCksdGhpcy5saW5lQ2hhcnQucmVzaXplKHRoaXMuZG9tRGltZW5zaW9ucy5tYWluKSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSl9c2hvdWxkVXBkYXRlRGVmYXVsdFZpZXdCb3godCl7aWYodC54U2NhbGVUeXBlfHx0LnlTY2FsZVR5cGV8fHQuaWdub3JlWU91dGxpZXJzKXJldHVybiEwO2lmKHQuc2VyaWVzRGF0YSlyZXR1cm4hMDtjb25zdCBlPXQuc2VyaWVzTWV0YWRhdGFNYXA7aWYoZSl7Y29uc3QgdD1lLnByZXZpb3VzVmFsdWU7aWYoT2JqZWN0LmtleXModGhpcy5zZXJpZXNNZXRhZGF0YU1hcCkubGVuZ3RoIT09T2JqZWN0LmtleXMobnVsbCE9dD90Ont9KS5sZW5ndGgpcmV0dXJuITA7Zm9yKGNvbnN0W2Usbl1vZiBPYmplY3QuZW50cmllcyh0aGlzLnNlcmllc01ldGFkYXRhTWFwKSl7Y29uc3Qgbz10JiZ0W2VdO2lmKCFvfHxuLnZpc2libGUhPT1vLnZpc2libGUpcmV0dXJuITB9fXJldHVybiExfW9uQ29udGV4dExvc3QoKXt0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3Q9ITAsdGhpcy5saW5lQ2hhcnQmJih0aGlzLmxpbmVDaGFydC5kaXNwb3NlKCksdGhpcy5saW5lQ2hhcnQ9bnVsbCl9dHJpZ2dlckNvbnRleHRMb3N0Rm9yVGVzdCgpe3RoaXMub25Db250ZXh0TG9zdCgpfWdldExpbmVDaGFydEZvclRlc3QoKXtyZXR1cm4gdGhpcy5saW5lQ2hhcnR9aW5pdGlhbGl6ZUNoYXJ0KCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKTtjb25zdCB0PXRoaXMuZ2V0UmVuZGVyZXJUeXBlKCksZT17b25EcmF3RW5kOigpPT57fSxvbkNvbnRleHRMb3N0OnRoaXMub25Db250ZXh0TG9zdC5iaW5kKHRoaXMpfTtsZXQgbj1udWxsO3N3aXRjaCh0aGlzLnJlYWRBbmRVcGRhdGVEb21EaW1lbnNpb25zKCksdCl7Y2FzZSBLMi5TVkc6bj17dHlwZTpLMi5TVkcsY29udGFpbmVyOnRoaXMuY2hhcnRFbC5uYXRpdmVFbGVtZW50LGNhbGxiYWNrczplLGRvbURpbWVuc2lvbjp0aGlzLmRvbURpbWVuc2lvbnMubWFpbix1c2VEYXJrTW9kZTp0aGlzLnVzZURhcmtNb2RlfTticmVhaztjYXNlIEsyLldFQkdMOm49e3R5cGU6SzIuV0VCR0wsY29udGFpbmVyOnRoaXMuY2hhcnRFbC5uYXRpdmVFbGVtZW50LGRldmljZVBpeGVsUmF0aW86d2luZG93LmRldmljZVBpeGVsUmF0aW8sY2FsbGJhY2tzOmUsZG9tRGltZW5zaW9uOnRoaXMuZG9tRGltZW5zaW9ucy5tYWluLHVzZURhcmtNb2RlOnRoaXMudXNlRGFya01vZGV9O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGA8bGluZS1jaGFydD4gZG9lcyBub3QgeWV0IHN1cHBvcnQgcmVuZGVyZXJUeXBlOiAke3R9YCl9Y29uc3Qgbz10IT09SzIuU1ZHJiZpaXQoKTt0aGlzLmxpbmVDaGFydD1uZXcobz9QdXQ6eHV0KShuKX1uZ09uRGVzdHJveSgpe3RoaXMubGluZUNoYXJ0JiZ0aGlzLmxpbmVDaGFydC5kaXNwb3NlKCl9Z2V0UmVuZGVyZXJUeXBlKCl7cmV0dXJuKGZ1bmN0aW9uIHQoZSl7c3dpdGNoKGUpe2Nhc2UgSzIuU1ZHOnJldHVybiBLMi5TVkc7Y2FzZSBLMi5XRUJHTDpyZXR1cm4oZnVuY3Rpb24gdCgpe3JldHVybiBvaXR9KSgpP0syLldFQkdMOksyLlNWRztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biByZW5kZXJlclR5cGU6ICR7ZX1gKX19KSh0aGlzLnByZWZlcnJlZFJlbmRlcmVyVHlwZSl9cmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKXt0aGlzLmRvbURpbWVuc2lvbnM9e21haW46e3dpZHRoOnRoaXMuc2VyaWVzVmlldy5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLGhlaWdodDp0aGlzLnNlcmllc1ZpZXcubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9LHhBeGlzOnt3aWR0aDp0aGlzLnhBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgsaGVpZ2h0OnRoaXMueEF4aXMubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9LHlBeGlzOnt3aWR0aDp0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgsaGVpZ2h0OnRoaXMueUF4aXMubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9fX11cGRhdGVMaW5lQ2hhcnQoKXt2YXIgdCxlO2lmKHRoaXMucmVjb3ZlclJlbmRlcmVySWZOZWVkZWQoKSx0aGlzLmxpbmVDaGFydCYmIXRoaXMuZGlzYWJsZVVwZGF0ZSl7aWYodGhpcy5zY2FsZVVwZGF0ZWQmJih0aGlzLnNjYWxlVXBkYXRlZD0hMSx0aGlzLmxpbmVDaGFydC5zZXRYU2NhbGVUeXBlKHRoaXMueFNjYWxlVHlwZSksdGhpcy5saW5lQ2hhcnQuc2V0WVNjYWxlVHlwZSh0aGlzLnlTY2FsZVR5cGUpKSx0aGlzLmlzTWV0YWRhdGFVcGRhdGVkJiYodGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMSx0aGlzLmxpbmVDaGFydC5zZXRNZXRhZGF0YSh0aGlzLnNlcmllc01ldGFkYXRhTWFwKSksdGhpcy5pc0RhdGFVcGRhdGVkJiYodGhpcy5pc0RhdGFVcGRhdGVkPSExLHRoaXMubGluZUNoYXJ0LnNldERhdGEodGhpcy5zZXJpZXNEYXRhKSksdGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQmJih0aGlzLnVzZURhcmtNb2RlVXBkYXRlZD0hMSx0aGlzLmxpbmVDaGFydC5zZXRVc2VEYXJrTW9kZSh0aGlzLnVzZURhcmtNb2RlKSksIXRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbiYmdGhpcy5maXhlZFZpZXdCb3gpdGhpcy52aWV3Qm94PXRoaXMuZml4ZWRWaWV3Qm94O2Vsc2UgaWYoIXRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbiYmdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkKXtjb25zdCBuPShmdW5jdGlvbiBvKHQsZSxuLGksYSl7bGV0IHI9bnVsbCxzPW51bGwsbD1bXTtmb3IoY29uc3R7aWQ6bixwb2ludHM6b31vZiB0KXtjb25zdCB0PWVbbl07aWYodCYmIXQuYXV4JiZ0LnZpc2libGUpZm9yKGxldCB0PTA7dDxvLmxlbmd0aDt0Kyspe2NvbnN0e3g6ZSx5Om59PW9bdF07aShlKSYmKHI9bnVsbD09PXJ8fGU8cj9lOnIscz1udWxsPT09c3x8ZT5zP2U6cyksYShuKSYmbC5wdXNoKG4pfX1sLnNvcnQoYzUpO2xldCBjPWxbMF0sZD1sW2wubGVuZ3RoLTFdO3JldHVybiBuJiZsLmxlbmd0aD4yJiYoYz1sW01hdGguY2VpbCguMDUqKGwubGVuZ3RoLTEpKV0sZD1sW01hdGguZmxvb3IoLjk1KihsLmxlbmd0aC0xKSldKSx7eDpudWxsIT09ciYmbnVsbCE9PXM/W3Isc106dm9pZCAwLHk6dm9pZCAwIT09YyYmdm9pZCAwIT09ZD9bYyxkXTp2b2lkIDB9fSkodGhpcy5zZXJpZXNEYXRhLHRoaXMuc2VyaWVzTWV0YWRhdGFNYXAsdGhpcy5pZ25vcmVZT3V0bGllcnMsdGhpcy54U2NhbGUuaXNTYWZlTnVtYmVyLHRoaXMueVNjYWxlLmlzU2FmZU51bWJlcik7dGhpcy52aWV3Qm94PXt4OnRoaXMueFNjYWxlLm5pY2VEb21haW4obnVsbCE9PSh0PW4ueCkmJnZvaWQgMCE9PXQ/dDp1ZnQueCkseTp0aGlzLnlTY2FsZS5uaWNlRG9tYWluKG51bGwhPT0oZT1uLnkpJiZ2b2lkIDAhPT1lP2U6dWZ0LnkpfX0odGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWR8fHRoaXMuaXNWaWV3Qm94Q2hhbmdlZCkmJih0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMSx0aGlzLmlzVmlld0JveENoYW5nZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0Vmlld0JveCh0aGlzLnZpZXdCb3gpKX19b25WaWV3Qm94Q2hhbmdlZCh7ZGF0YUV4dGVudDp0fSl7dGhpcy5zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKCEwKSx0aGlzLmlzVmlld0JveENoYW5nZWQ9ITAsdGhpcy52aWV3Qm94PXQsdGhpcy51cGRhdGVMaW5lQ2hhcnQoKX12aWV3Qm94UmVzZXQoKXt0aGlzLnNldElzVmlld0JveE92ZXJyaWRkZW4oITEpLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUxpbmVDaGFydCgpfXNldElzVmlld0JveE92ZXJyaWRkZW4odCl7Y29uc3QgZT10aGlzLmlzVmlld0JveE92ZXJyaWRkZW47dGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuPXQsZSE9PXQmJnRoaXMub25WaWV3Qm94T3ZlcnJpZGRlbi5uZXh0KHQpfWdldElzVmlld0JveE92ZXJyaWRkZW4oKXtyZXR1cm4gdGhpcy5vblZpZXdCb3hPdmVycmlkZGVufW9uVmlld0JveENoYW5nZWRGcm9tQXhpcyh0LGUpe2NvbnN0IG49T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMudmlld0JveCkse1tlXTp0fSk7dGhpcy5vblZpZXdCb3hDaGFuZ2VkKHtkYXRhRXh0ZW50Om59KX19ZmZ0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxmZnQpKFNtKFVnKSl9LGZmdC7JtWNtcD10byh7dHlwZTpmZnQsc2VsZWN0b3JzOltbImxpbmUtY2hhcnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihRaChLdXQsNyxoZyksUWgoSnV0LDcsaGcpLFFoKFF1dCw3LGhnKSxRaCgkdXQsNSxoZykpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4uc2VyaWVzVmlldz10LmZpcnN0KSxKaCh0PXRiKCkpJiYobi54QXhpcz10LmZpcnN0KSxKaCh0PXRiKCkpJiYobi55QXhpcz10LmZpcnN0KSxKaCh0PXRiKCkpJiYobi5jaGFydEVsPXQuZmlyc3QpfX0saW5wdXRzOntjdXN0b21WaXNUZW1wbGF0ZToiY3VzdG9tVmlzVGVtcGxhdGUiLGN1c3RvbVhBeGlzVGVtcGxhdGU6ImN1c3RvbVhBeGlzVGVtcGxhdGUiLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSIscHJlZmVycmVkUmVuZGVyZXJUeXBlOiJwcmVmZXJyZWRSZW5kZXJlclR5cGUiLHNlcmllc0RhdGE6InNlcmllc0RhdGEiLGZpeGVkVmlld0JveDoiZml4ZWRWaWV3Qm94IixzZXJpZXNNZXRhZGF0YU1hcDoic2VyaWVzTWV0YWRhdGFNYXAiLHhTY2FsZVR5cGU6InhTY2FsZVR5cGUiLHlTY2FsZVR5cGU6InlTY2FsZVR5cGUiLGN1c3RvbVhGb3JtYXR0ZXI6ImN1c3RvbVhGb3JtYXR0ZXIiLGN1c3RvbVlGb3JtYXR0ZXI6ImN1c3RvbVlGb3JtYXR0ZXIiLHRvb2x0aXBUZW1wbGF0ZToidG9vbHRpcFRlbXBsYXRlIixsaW5lT25seToibGluZU9ubHkiLGRpc2FibGVVcGRhdGU6ImRpc2FibGVVcGRhdGUiLGlnbm9yZVlPdXRsaWVyczoiaWdub3JlWU91dGxpZXJzIn0sZmVhdHVyZXM6W0JvXSxkZWNsczoxNix2YXJzOjEzLGNvbnN0czpbWyJkZXRlY3RSZXNpemUiLCIiLCJjZGtPdmVybGF5T3JpZ2luIiwiIiwzLCJuZ0NsYXNzIiwicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLCJvblJlc2l6ZSJdLFsib3ZlcmxheVRhcmdldCIsImNka092ZXJsYXlPcmlnaW4iXSxbMSwic2VyaWVzLXZpZXciXSxbInNlcmllc1ZpZXciLCIiXSxbMywidmlld0V4dGVudCIsInhTY2FsZSIsInlTY2FsZSIsInhHcmlkQ291bnQiLCJ5R3JpZENvdW50IiwiZG9tRGltIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywic2VyaWVzRGF0YSIsInNlcmllc01ldGFkYXRhTWFwIiwidmlld0V4dGVudCIsInhTY2FsZSIsInlTY2FsZSIsInRvb2x0aXBPcmlnaW5FbCIsImRvbURpbSIsInRvb2x0aXBUZW1wbGF0ZSIsIm9uVmlld0V4dGVudENoYW5nZSIsIm9uVmlld0V4dGVudFJlc2V0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImN1c3RvbS12aXMiLDQsIm5nSWYiXSxbMSwieS1heGlzIl0sWyJ5QXhpcyIsIiJdLFsiYXhpcyIsInkiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSIsNCwibmdJZiJdLFsxLCJ4LWF4aXMiXSxbInhBeGlzIiwiIl0sWyJheGlzIiwieCIsMywiYXhpc0V4dGVudCIsImN1c3RvbUZvcm1hdHRlciIsImRvbURpbSIsImdyaWRDb3VudCIsInNjYWxlIiwib25WaWV3RXh0ZW50Q2hhbmdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRvdCIsNCwibmdJZiJdLFszLCJ2aWV3RXh0ZW50IiwieFNjYWxlIiwieVNjYWxlIiwieEdyaWRDb3VudCIsInlHcmlkQ291bnQiLCJkb21EaW0iXSxbImNoYXJ0RWwiLCIiXSxbMywic2VyaWVzRGF0YSIsInNlcmllc01ldGFkYXRhTWFwIiwidmlld0V4dGVudCIsInhTY2FsZSIsInlTY2FsZSIsInRvb2x0aXBPcmlnaW5FbCIsImRvbURpbSIsInRvb2x0aXBUZW1wbGF0ZSIsIm9uVmlld0V4dGVudENoYW5nZSIsIm9uVmlld0V4dGVudFJlc2V0Il0sWzEsImN1c3RvbS12aXMiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWyJheGlzIiwieSIsMywiYXhpc0V4dGVudCIsImN1c3RvbUZvcm1hdHRlciIsImRvbURpbSIsImdyaWRDb3VudCIsInNjYWxlIiwib25WaWV3RXh0ZW50Q2hhbmdlIl0sWyJheGlzIiwieCIsMywiYXhpc0V4dGVudCIsImN1c3RvbUZvcm1hdHRlciIsImRvbURpbSIsImdyaWRDb3VudCIsInNjYWxlIiwib25WaWV3RXh0ZW50Q2hhbmdlIl0sWzEsImRvdCJdLFsxLCJyZWN0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJkaXYiLDAsMSksVm0oIm9uUmVzaXplIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uVmlld1Jlc2l6ZSgpfSkpLFJtKDIsImRpdiIsMiwzKSxRcCg0LHRmdCwxLDYsImxpbmUtY2hhcnQtZ3JpZC12aWV3Iiw0KSxRcCg1LG9mdCwzLDIsIm5nLWNvbnRhaW5lciIsNSksUXAoNixpZnQsMSw4LCJsaW5lLWNoYXJ0LWludGVyYWN0aXZlLXZpZXciLDYpLFFwKDcscmZ0LDIsNywiZGl2Iiw3KSxBbSgpLFJtKDgsImRpdiIsOCw5KSxRcCgxMCxzZnQsMSw1LCJsaW5lLWNoYXJ0LWF4aXMiLDEwKSxBbSgpLFJtKDExLCJkaXYiLDExLDEyKSxRcCgxMyxsZnQsMSw1LCJsaW5lLWNoYXJ0LWF4aXMiLDEzKSxRcCgxNCxkZnQsMiw4LCJkaXYiLDcpLEFtKCksUXAoMTUscGZ0LDIsMCwiZGl2IiwxNCksQW0oKSksMiZlJiYoRG0oIm5nQ2xhc3MiLHZoKDEwLG1mdCxuLnVzZURhcmtNb2RlLG4ubGluZU9ubHkpKSgicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLDApLHJjKDQpLERtKCJuZ0lmIiwhbi5saW5lT25seSkscmMoMSksRG0oIm5nSWYiLG4uc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50KSxyYygxKSxEbSgibmdJZiIsIW4ubGluZU9ubHkpLHJjKDEpLERtKCJuZ0lmIixuLmN1c3RvbVZpc1RlbXBsYXRlKSxyYygzKSxEbSgibmdJZiIsIW4ubGluZU9ubHkpLHJjKDMpLERtKCJuZ0lmIiwhbi5saW5lT25seSkscmMoMSksRG0oIm5nSWYiLG4uY3VzdG9tWEF4aXNUZW1wbGF0ZSkscmMoMSksRG0oIm5nSWYiLCFuLmxpbmVPbmx5KSl9LGRpcmVjdGl2ZXM6W29KLGZMLGFNLGRNLEV1dCxVdXQsTU0sWHV0XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6aW5oZXJpdDtkaXNwbGF5OmdyaWQ7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCU7Z3JpZC10ZW1wbGF0ZS1hcmVhczoieWF4aXMgc2VyaWVzIiAiZG90IHhheGlzIjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6NTBweCAxZnI7Z3JpZC1hdXRvLXJvd3M6MWZyIDMwcHh9LmNvbnRhaW5lci5kYXJrLW1vZGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9LmNvbnRhaW5lci5saW5lLW9ubHktbW9kZVtfbmdjb250ZW50LSVDT01QJV17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjAgMWZyO2dyaWQtYXV0by1yb3dzOjFmciAwfS5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnNlcmllcztwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59LnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jdXN0b20tdmlzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNhbnZhc1tfbmdjb250ZW50LSVDT01QJV0sIC5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBzdmdbX25nY29udGVudC0lQ09NUCVdLCAuc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgbGluZS1jaGFydC1ncmlkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCAuc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgbGluZS1jaGFydC1pbnRlcmFjdGl2ZS12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJX0uc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAuY3VzdG9tLXZpc1tfbmdjb250ZW50LSVDT01QJV0sIC55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2xlZnQ6MDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJTstd2Via2l0LW1hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDAwMCAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCAjMDAwMCAxMDAlKTttYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzAwMDAgMCUsICMwMDAgMTAlLCAjMDAwIDkwJSwgIzAwMDAgMTAwJSl9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWF4aXNbX25nY29udGVudC0lQ09NUCVdLCAueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmUtY2hhcnQtYXhpc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnhheGlzO3Bvc2l0aW9uOnJlbGF0aXZlfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp5YXhpc30uZG90W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2Rpc3BsYXk6ZmxleDtncmlkLWFyZWE6ZG90O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZG90W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MXB4O3dpZHRoOjFweDtiYWNrZ3JvdW5kLWNvbG9yOiNhYWF9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGZmdCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJsaW5lLWNoYXJ0Iix0ZW1wbGF0ZVVybDoibGluZV9jaGFydF9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsibGluZV9jaGFydF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlVnfV19KSx7c2VyaWVzVmlldzpbe3R5cGU6WmEsYXJnczpbInNlcmllc1ZpZXciLHtzdGF0aWM6ITAscmVhZDpoZ31dfV0seEF4aXM6W3t0eXBlOlphLGFyZ3M6WyJ4QXhpcyIse3N0YXRpYzohMCxyZWFkOmhnfV19XSx5QXhpczpbe3R5cGU6WmEsYXJnczpbInlBeGlzIix7c3RhdGljOiEwLHJlYWQ6aGd9XX1dLGNoYXJ0RWw6W3t0eXBlOlphLGFyZ3M6WyJjaGFydEVsIix7c3RhdGljOiExLHJlYWQ6aGd9XX1dLGN1c3RvbVZpc1RlbXBsYXRlOlt7dHlwZTp4eX1dLGN1c3RvbVhBeGlzVGVtcGxhdGU6W3t0eXBlOnh5fV0sdXNlRGFya01vZGU6W3t0eXBlOnh5fV0scHJlZmVycmVkUmVuZGVyZXJUeXBlOlt7dHlwZTp4eX1dLHNlcmllc0RhdGE6W3t0eXBlOnh5fV0sZml4ZWRWaWV3Qm94Olt7dHlwZTp4eX1dLHNlcmllc01ldGFkYXRhTWFwOlt7dHlwZTp4eX1dLHhTY2FsZVR5cGU6W3t0eXBlOnh5fV0seVNjYWxlVHlwZTpbe3R5cGU6eHl9XSxjdXN0b21YRm9ybWF0dGVyOlt7dHlwZTp4eX1dLGN1c3RvbVlGb3JtYXR0ZXI6W3t0eXBlOnh5fV0sdG9vbHRpcFRlbXBsYXRlOlt7dHlwZTp4eX1dLGxpbmVPbmx5Olt7dHlwZTp4eX1dLGRpc2FibGVVcGRhdGU6W3t0eXBlOnh5fV0saWdub3JlWU91dGxpZXJzOlt7dHlwZTp4eX1dfSk7Y2xhc3MgZ2Z0e31nZnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGdmdCl9LGdmdC7JtWNtcD10byh7dHlwZTpnZnQsc2VsZWN0b3JzOltbInZpcy1zZWxlY3RlZC10aW1lLWNsaXBwZWQiXV0saW5wdXRzOntzZWxlY3RlZFRpbWU6InNlbGVjdGVkVGltZSJ9LGRlY2xzOjEsdmFyczowLGNvbnN0czpbWyJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkxpbmtlZCBzdGVwIGlzIG5vdCBmb3VuZCBpbiB0aGlzIHZpc3VhbGl6YXRpb24uIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmVG0oMCwibWF0LWljb24iLDApfSxkaXJlY3RpdmVzOltEV10sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojZDMyZjJmO2hlaWdodDoxZW07bGluZS1oZWlnaHQ6MDt3aWR0aDoxZW19Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOiNkMzJmMmZ9W19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChnZnQsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoidmlzLXNlbGVjdGVkLXRpbWUtY2xpcHBlZCIsdGVtcGxhdGU6J1xuICAgIDxtYXQtaWNvblxuICAgICAgc3ZnSWNvbj0iaW5mb19vdXRsaW5lXzI0cHgiXG4gICAgICB0aXRsZT0iTGlua2VkIHN0ZXAgaXMgbm90IGZvdW5kIGluIHRoaXMgdmlzdWFsaXphdGlvbi4gV2UgaGlnaGxpZ2h0ZWQgdGhlIGNsb3Nlc3Qgc3RlcCBmb3IgeW91LiJcbiAgICA+PC9tYXQtaWNvbj5cbiAgJyxzdHlsZVVybHM6WyJ2aXNfc2VsZWN0ZWRfdGltZV9jbGlwcGVkX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSxudWxsLHtzZWxlY3RlZFRpbWU6W3t0eXBlOnh5fV19KTtjbGFzcyBoZnR7fWZ1bmN0aW9uIGJmdCh0LGUpezEmdCYmVG0oMCwidmlzLXNlbGVjdGVkLXRpbWUtY2xpcHBlZCIpfWZ1bmN0aW9uIHlmdCh0LGUpezEmdCYmVG0oMCwibWF0LXNwaW5uZXIiLDIzKX1mdW5jdGlvbiBfZnQodCxlKXsxJnQmJihSbSgwLCJ0aCIpLGt1KDEsIlNtb290aGVkIiksQW0oKSl9ZnVuY3Rpb24gQ2Z0KHQsZSl7aWYoMSZ0JiYoUm0oMCwidGQiKSxrdSgxKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oKS4kaW1wbGljaXQsZT1ZbSgyKTtyYygxKSxEdSgiICIsZS52YWx1ZUZvcm1hdHRlci5mb3JtYXRTaG9ydCh0LnBvaW50LnkpLCIgIil9fWZ1bmN0aW9uIE1mdCh0LGUpe2lmKDEmdCYmKE5tKDApLFJtKDEsInRyIiwyNyksUm0oMiwidGQiLDI4KSxUbSgzLCJzcGFuIiksQW0oKSxSbSg0LCJ0ZCIsMSksa3UoNSksQW0oKSxRcCg2LENmdCwyLDEsInRkIiwzKSxSbSg3LCJ0ZCIpLGt1KDgpLEFtKCksUm0oOSwidGQiKSxrdSgxMCksQW0oKSxSbSgxMSwidGQiKSxrdSgxMiksQWgoMTMsImRhdGUiKSxBbSgpLFJtKDE0LCJ0ZCIpLGt1KDE1KSxBbSgpLEFtKCksem0oKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49WW0oMik7cmMoMSkscHUoImNsb3Nlc3QiLHQubWV0YWRhdGEuY2xvc2VzdCkscmMoMiksZHUoImJhY2tncm91bmQtY29sb3IiLHQubWV0YWRhdGEuY29sb3IpLHJjKDIpLFN1KHQubWV0YWRhdGEuZGlzcGxheU5hbWUpLHJjKDEpLERtKCJuZ0lmIixuLnNtb290aGluZ0VuYWJsZWQpLHJjKDIpLFN1KG4udmFsdWVGb3JtYXR0ZXIuZm9ybWF0U2hvcnQodC5wb2ludC52YWx1ZSkpLHJjKDIpLFN1KG4uc3RlcEZvcm1hdHRlci5mb3JtYXRTaG9ydCh0LnBvaW50LnN0ZXApKSxyYygyKSxTdShOaCgxMywxMCx0LnBvaW50LndhbGxUaW1lLCJzaG9ydCIpKSxyYygzKSxEdSgiICIsbi5yZWxhdGl2ZVhGb3JtYXR0ZXIuZm9ybWF0UmVhZGFibGUodC5wb2ludC5yZWxhdGl2ZVRpbWVJbk1zKSwiICIpfX1mdW5jdGlvbiB2ZnQodCxlKXtpZigxJnQmJihSbSgwLCJ0YWJsZSIsMjQpLFJtKDEsInRoZWFkIiksUm0oMiwidHIiKSxUbSgzLCJ0aCIsMjUpLFJtKDQsInRoIiksa3UoNSwiUnVuIiksQW0oKSxRcCg2LF9mdCwyLDAsInRoIiwzKSxSbSg3LCJ0aCIpLGt1KDgsIlZhbHVlIiksQW0oKSxSbSg5LCJ0aCIpLGt1KDEwLCJTdGVwIiksQW0oKSxSbSgxMSwidGgiKSxrdSgxMiwiVGltZSIpLEFtKCksUm0oMTMsInRoIiksa3UoMTQsIlJlbGF0aXZlIiksQW0oKSxBbSgpLEFtKCksUm0oMTUsInRib2R5IiksUXAoMTYsTWZ0LDE2LDEzLCJuZy1jb250YWluZXIiLDI2KSxBbSgpLEFtKCkpLDImdCl7Y29uc3QgdD1lLmRhdGEsbj1lLmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQsbz1ZbSgpO3JjKDYpLERtKCJuZ0lmIixvLnNtb290aGluZ0VuYWJsZWQpLHJjKDEwKSxEbSgibmdGb3JPZiIsby5nZXRDdXJzb3JBd2FyZVRvb2x0aXBEYXRhKHQsbikpKCJuZ0ZvclRyYWNrQnkiLG8udHJhY2tCeVRvb2x0aXBEYXR1bSl9fWhmdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aGZ0KX0saGZ0Lsm1Y21wPXRvKHt0eXBlOmhmdCxzZWxlY3RvcnM6W1sibGlua2VkLXRpbWUtZm9iIl1dLGlucHV0czp7c3RlcDoic3RlcCJ9LGRlY2xzOjMsdmFyczozLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJzcGFuIiksa3UoMSksQWgoMiwibnVtYmVyIiksQW0oKSksMiZlJiYocmMoMSksU3UoVGgoMiwxLG4uc3RlcCkpKX0scGlwZXM6W0ZNXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrfXNwYW5bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItcmFkaXVzOjI1cHg7Y29sb3I6aW5oZXJpdDtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MTFweDtwYWRkaW5nOjJweCA1cHh9c3Bhbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIsIHNwYW5bX25nY29udGVudC0lQ09NUCVdOmFjdGl2ZXtib3JkZXItY29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2JvcmRlci1jb2xvcjojOGU5OGEzfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVdOmhvdmVyLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciwgYm9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV06YWN0aXZlLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXTphY3RpdmV7Ym9yZGVyLWNvbG9yOiNlZWV9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGhmdCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJsaW5rZWQtdGltZS1mb2IiLHRlbXBsYXRlOiI8c3Bhbj57eyBzdGVwIHwgbnVtYmVyIH19PC9zcGFuPiIsc3R5bGVVcmxzOlsibGlua2VkX3RpbWVfZm9iX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSxudWxsLHtzdGVwOlt7dHlwZTp4eX1dfSk7Y29uc3QgeGZ0PWZ1bmN0aW9uKHQpe3JldHVyblswLHRdfSxPZnQ9ZnVuY3Rpb24oKXtyZXR1cm57Im91dC1vZi1zZWxlY3RlZC10aW1lIjohMCxlbmQ6ITAscmFuZ2U6ITB9fTtmdW5jdGlvbiBQZnQodCxlKXtpZigxJnQmJlRtKDAsImRpdiIsMjkpLDImdCl7Y29uc3QgdD1ZbSgyKSxlPXQudmlld0V4dGVudCxuPXQuZG9tRGltZW5zaW9uLG89dC54U2NhbGUsaT1ZbSgpO2R1KCJsZWZ0IixvLmZvcndhcmQoZS54LE1oKDMseGZ0LG4ud2lkdGgpLGkuc2VsZWN0ZWRUaW1lLmVuZFN0ZXApKyJweCIpLERtKCJuZ0NsYXNzIixDaCg1LE9mdCkpfX1jb25zdCB3ZnQ9ZnVuY3Rpb24odCl7cmV0dXJuW3QsMF19LGtmdD1mdW5jdGlvbih0KXtyZXR1cm57Im91dC1vZi1zZWxlY3RlZC10aW1lIjohMCxzdGFydDohMCxyYW5nZTp0fX07ZnVuY3Rpb24gU2Z0KHQsZSl7aWYoMSZ0JiYoTm0oMCksVG0oMSwiZGl2IiwyOSksUXAoMixQZnQsMSw2LCJkaXYiLDMwKSx6bSgpKSwyJnQpe2NvbnN0IHQ9WW0oKSxlPXQudmlld0V4dGVudCxuPXQuZG9tRGltZW5zaW9uLG89dC54U2NhbGUsaT1ZbSgpO3JjKDEpLGR1KCJyaWdodCIsby5mb3J3YXJkKGUueCxNaCg0LHdmdCxuLndpZHRoKSxpLnNlbGVjdGVkVGltZS5zdGFydFN0ZXApKyJweCIpLERtKCJuZ0NsYXNzIixNaCg2LGtmdCwhIWkuc2VsZWN0ZWRUaW1lLmVuZFN0ZXApKSxyYygxKSxEbSgibmdJZiIsaS5zZWxlY3RlZFRpbWUuZW5kU3RlcCl9fWZ1bmN0aW9uIERmdCh0LGUpezEmdCYmUXAoMCxTZnQsMyw4LCJuZy1jb250YWluZXIiLDMpLDImdCYmRG0oIm5nSWYiLFltKCkuc2VsZWN0ZWRUaW1lKX1mdW5jdGlvbiBFZnQodCxlKXtpZigxJnQmJihSbSgwLCJkaXYiLDMxKSxUbSgxLCJsaW5rZWQtdGltZS1mb2IiLDMyKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oMiksZT10LnZpZXdFeHRlbnQsbj10LmRvbURpbWVuc2lvbixvPXQueFNjYWxlLGk9WW0oKTtkdSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby5mb3J3YXJkKGUueCxNaCgzLHhmdCxuLndpZHRoKSxpLnNlbGVjdGVkVGltZS5lbmRTdGVwKSsicHgsIDApIikscmMoMSksRG0oInN0ZXAiLGkuc2VsZWN0ZWRUaW1lLmVuZFN0ZXApfX1mdW5jdGlvbiBSZnQodCxlKXtpZigxJnQmJihObSgwKSxSbSgxLCJkaXYiLDMxKSxUbSgyLCJsaW5rZWQtdGltZS1mb2IiLDMyKSxBbSgpLFFwKDMsRWZ0LDIsNSwiZGl2IiwzMyksem0oKSksMiZ0KXtjb25zdCB0PVltKCksZT10LnZpZXdFeHRlbnQsbj10LmRvbURpbWVuc2lvbixvPXQueFNjYWxlLGk9WW0oKTtyYygxKSxkdSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby5mb3J3YXJkKGUueCxNaCg0LHhmdCxuLndpZHRoKSxpLnNlbGVjdGVkVGltZS5zdGFydFN0ZXApKyJweCwgMCkiKSxyYygxKSxEbSgic3RlcCIsaS5zZWxlY3RlZFRpbWUuc3RhcnRTdGVwKSxyYygxKSxEbSgibmdJZiIsaS5zZWxlY3RlZFRpbWUuZW5kU3RlcCl9fWZ1bmN0aW9uIEFmdCh0LGUpezEmdCYmUXAoMCxSZnQsNCw2LCJuZy1jb250YWluZXIiLDMpLDImdCYmRG0oIm5nSWYiLFltKCkuc2VsZWN0ZWRUaW1lKX1jbGFzcyBUZnR7Y29uc3RydWN0b3IodCxlKXt0aGlzLnJlZj10LHRoaXMuZGlhbG9nPWUsdGhpcy5EYXRhTG9hZFN0YXRlPXlFLHRoaXMuUmVuZGVyZXJUeXBlPUsyLHRoaXMuU2NhbGVUeXBlPUoyLHRoaXMub25GdWxsU2l6ZVRvZ2dsZT1uZXcgTGgsdGhpcy5vblBpbkNsaWNrZWQ9bmV3IExoLHRoaXMueVNjYWxlVHlwZT1KMi5MSU5FQVIsdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuPSExLHRoaXMucmVsYXRpdmVYRm9ybWF0dGVyPVhvdCx0aGlzLnZhbHVlRm9ybWF0dGVyPUlvdCx0aGlzLnN0ZXBGb3JtYXR0ZXI9TG90fXRvZ2dsZVlTY2FsZVR5cGUoKXt0aGlzLnlTY2FsZVR5cGU9dGhpcy55U2NhbGVUeXBlPT09SjIuTElORUFSP0oyLkxPRzEwOkoyLkxJTkVBUn1yZXNldERvbWFpbigpe3RoaXMubGluZUNoYXJ0JiZ0aGlzLmxpbmVDaGFydC52aWV3Qm94UmVzZXQoKX10cmFja0J5VG9vbHRpcERhdHVtKHQsZSl7cmV0dXJuIGUuaWR9Z2V0Q3VzdG9tWEZvcm1hdHRlcigpe3N3aXRjaCh0aGlzLnhBeGlzVHlwZSl7Y2FzZSB5QS5SRUxBVElWRTpyZXR1cm4gWG90O2Nhc2UgeUEuU1RFUDpyZXR1cm4gVW90O2Nhc2UgeUEuV0FMTF9USU1FOmRlZmF1bHQ6cmV0dXJufX1nZXRDdXJzb3JBd2FyZVRvb2x0aXBEYXRhKHQsZSl7Y29uc3Qgbj10Lm1hcCgodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHttZXRhZGF0YTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5tZXRhZGF0YSkse2Nsb3Nlc3Q6ITEsZGlzdFNxVG9DdXJzb3I6TWF0aC5oeXBvdCh0LnBvaW50LngtZS54LHQucG9pbnQueS1lLnkpfSl9KSkpO2xldCBvPTEvMCxpPTA7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0Kyspbz5uW3RdLm1ldGFkYXRhLmRpc3RTcVRvQ3Vyc29yJiYobz1uW3RdLm1ldGFkYXRhLmRpc3RTcVRvQ3Vyc29yLGk9dCk7c3dpdGNoKG4ubGVuZ3RoJiYobltpXS5tZXRhZGF0YS5jbG9zZXN0PSEwKSx0aGlzLnRvb2x0aXBTb3J0KXtjYXNlIGJBLkRFRkFVTFQ6cmV0dXJuIG47Y2FzZSBiQS5BU0NFTkRJTkc6cmV0dXJuIG4uc29ydCgoKHQsZSk9PnQucG9pbnQueS1lLnBvaW50LnkpKTtjYXNlIGJBLkRFU0NFTkRJTkc6cmV0dXJuIG4uc29ydCgoKHQsZSk9PmUucG9pbnQueS10LnBvaW50LnkpKTtjYXNlIGJBLk5FQVJFU1Q6cmV0dXJuIG4uc29ydCgoKHQsZSk9PnQubWV0YWRhdGEuZGlzdFNxVG9DdXJzb3ItZS5tZXRhZGF0YS5kaXN0U3FUb0N1cnNvcikpfX1vcGVuRGF0YURvd25sb2FkRGlhbG9nKCl7dGhpcy5kaWFsb2cub3Blbih0aGlzLkRhdGFEb3dubG9hZENvbXBvbmVudCx7ZGF0YTp7Y2FyZElkOnRoaXMuY2FyZElkfX0pfX1UZnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFRmdCkoU20oaGcpLFNtKG9XKSl9LFRmdC7JtWNtcD10byh7dHlwZTpUZnQsc2VsZWN0b3JzOltbInNjYWxhci1jYXJkLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmUWgoZmZ0LDUpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4ubGluZUNoYXJ0PXQuZmlyc3QpfX0saW5wdXRzOntjYXJkSWQ6ImNhcmRJZCIsY2hhcnRNZXRhZGF0YU1hcDoiY2hhcnRNZXRhZGF0YU1hcCIsRGF0YURvd25sb2FkQ29tcG9uZW50OiJEYXRhRG93bmxvYWRDb21wb25lbnQiLGRhdGFTZXJpZXM6ImRhdGFTZXJpZXMiLGlnbm9yZU91dGxpZXJzOiJpZ25vcmVPdXRsaWVycyIsaXNDYXJkVmlzaWJsZToiaXNDYXJkVmlzaWJsZSIsaXNQaW5uZWQ6ImlzUGlubmVkIixsb2FkU3RhdGU6ImxvYWRTdGF0ZSIsc2hvd0Z1bGxTaXplOiJzaG93RnVsbFNpemUiLHNtb290aGluZ0VuYWJsZWQ6InNtb290aGluZ0VuYWJsZWQiLHRhZzoidGFnIix0aXRsZToidGl0bGUiLHRvb2x0aXBTb3J0OiJ0b29sdGlwU29ydCIseEF4aXNUeXBlOiJ4QXhpc1R5cGUiLHhTY2FsZVR5cGU6InhTY2FsZVR5cGUiLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSIsc2VsZWN0ZWRUaW1lOiJzZWxlY3RlZFRpbWUifSxvdXRwdXRzOntvbkZ1bGxTaXplVG9nZ2xlOiJvbkZ1bGxTaXplVG9nZ2xlIixvblBpbkNsaWNrZWQ6Im9uUGluQ2xpY2tlZCJ9LGRlY2xzOjM0LHZhcnM6MjYsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZSxuLG8saTtyZXR1cm4gdD0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiRml0IGxpbmUgY2hhcnQgZG9tYWlucyB0byBkYXRhIik6JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHJlc2V0cyBsaW5lIGNoYXJ0IGRvbWFpbiB0byB0aGUgZGF0YeKQn2U2OGE1NTI5NDFhYjQyN2E5OWU3NDM3ZTA4NDQzZjMwYWM3MWNjZDbikJ8zODMwNjQ2NTIxMDU4MjY4NTU4OkZpdCBsaW5lIGNoYXJ0IGRvbWFpbnMgdG8gZGF0YWAsZT0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiUGluIGNhcmQiKTokbG9jYWxpemVgOkEgYnV0dG9uIHRvIHBpbiBhIGNhcmQu4pCfZTY2NWRjNzEyYmQ1ZjE4ZDRkZmEzYTI5ZTEyNWQ1NjVjYzUxZTJmNuKQnzcyODQ2MDY0MjYyMzQzNzUzNDQ6UGluIGNhcmRgLG49InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIlRvZ2dsZSBmdWxsIHNpemUgbW9kZSIpOiRsb2NhbGl6ZWA6QSBidXR0b24gb24gbGluZSBjaGFydCB0aGF0IHRvZ2dsZXMgZnVsbCBzaXplIG1vZGUu4pCfZmM4Zjc2N2QwYjlmOTMwMTg3YTFiYWUzNDQ3N2FkMjg3MzZlY2UzM+KQnzkxNTcyMTU2MzYzODkyNjU5NzpUb2dnbGUgZnVsbCBzaXplIG1vZGVgLG89InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIk1vcmUgbGluZSBjaGFydCBvcHRpb25zIik6JGxvY2FsaXplYDpBbiBvdmVyZmxvdyBtZW51IGJ1dHRvbiB0aGF0IG9wZW5zIG1vcmUgbGluZSBjaGFydCBvcHRpb25z4pCfYjI2MGZhYjk0NmEzMDc3Y2UyMGZkMjhlMzM2OTc5ZjU4NjcyMGU4ZOKQnzg3ODA1Mzc0MDIxMDMzNjQzNTpNb3JlIGxpbmUgY2hhcnQgb3B0aW9uc2AsaT0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiVG9nZ2xlIFktYXhpcyBsb2cgc2NhbGUgb24gbGluZSBjaGFydCIpOiRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCB0b2dnbGVzIGxvZyBzY2FsZSBvbiB5LWF4aXMgb24gYSBsaW5lIGNoYXJ04pCfZmU5MWY5NmFiOWIzYmFjYTVhNDg5MTNmMmIwZmFlODQ0ODNkOTNlM+KQnzMzNzQ2NDU2MjA2Mzg4ODM5MjY6VG9nZ2xlIFktYXhpcyBsb2cgc2NhbGUgb24gbGluZSBjaGFydGAsW1sxLCJoZWFkaW5nIl0sWzEsIm5hbWUiXSxbMSwidGFnIiwzLCJ0aXRsZSIsInZhbHVlIl0sWzQsIm5nSWYiXSxbMSwiY29udHJvbHMiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiZGlzYWJsZWQiLCJ0aXRsZSIsImNsaWNrIl0sWyJzdmdJY29uIiwic2V0dGluZ3Nfb3ZlcnNjYW5fMjRweCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwxLCJwaW4tYnV0dG9uIiwzLCJjbGljayJdLFszLCJzdmdJY29uIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixuLCJ0aXRsZSIsIlRvZ2dsZSBmdWxsIHNpemUgbW9kZSIsMywiY2xpY2siXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLG8sInRpdGxlIiwiTW9yZSBsaW5lIGNoYXJ0IG9wdGlvbnMiLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIl0sWyJzdmdJY29uIiwibW9yZV92ZXJ0XzI0cHgiXSxbIm1lbnUiLCJtYXRNZW51Il0sWyJtYXQtbWVudS1pdGVtIiwiIiwiYXJpYS1sYWJlbCIsaSwzLCJjbGljayJdLFsic3ZnSWNvbiIsImxpbmVfd2VpZ2h0XzI0cHgiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJhcmlhLWxhYmVsIiwiT3BlbiBkaWFsb2cgdG8gZG93bmxvYWQgZGF0YSIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJnZXRfYXBwXzI0cHgiXSxbMSwiY2hhcnQtY29udGFpbmVyIl0sWyJkaWFtZXRlciIsIjE4Iiw0LCJuZ0lmIl0sWzMsImRpc2FibGVVcGRhdGUiLCJwcmVmZXJyZWRSZW5kZXJlclR5cGUiLCJzZXJpZXNEYXRhIiwic2VyaWVzTWV0YWRhdGFNYXAiLCJ4U2NhbGVUeXBlIiwieVNjYWxlVHlwZSIsImN1c3RvbVhGb3JtYXR0ZXIiLCJpZ25vcmVZT3V0bGllcnMiLCJ0b29sdGlwVGVtcGxhdGUiLCJ1c2VEYXJrTW9kZSIsImN1c3RvbVZpc1RlbXBsYXRlIiwiY3VzdG9tWEF4aXNUZW1wbGF0ZSIsIm9uVmlld0JveE92ZXJyaWRkZW4iXSxbInRvb2x0aXAiLCIiXSxbImxpbmVDaGFydEN1c3RvbVZpcyIsIiJdLFsibGluZUNoYXJ0Q3VzdG9tWEF4aXNWaXMiLCIiXSxbImRpYW1ldGVyIiwiMTgiXSxbMSwidG9vbHRpcCJdLFsxLCJjaXJjbGUtaGVhZGVyIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJ0b29sdGlwLXJvdyJdLFsxLCJ0b29sdGlwLXJvdy1jaXJjbGUiXSxbMywibmdDbGFzcyJdLFszLCJuZ0NsYXNzIiwibGVmdCIsNCwibmdJZiJdLFsxLCJsaW5rZWQtdGltZS1mb2ItY29udGFpbmVyIl0sWzEsInNlbGVjdGVkLXRpbWUtZm9iIiwzLCJzdGVwIl0sWyJjbGFzcyIsImxpbmtlZC10aW1lLWZvYi1jb250YWluZXIiLDMsInRyYW5zZm9ybSIsNCwibmdJZiJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFJtKDAsImRpdiIsMCksUm0oMSwic3BhbiIsMSksVG0oMiwidGItdHJ1bmNhdGVkLXBhdGgiLDIpLFFwKDMsYmZ0LDEsMCwidmlzLXNlbGVjdGVkLXRpbWUtY2xpcHBlZCIsMyksQW0oKSxSbSg0LCJzcGFuIiw0KSxSbSg1LCJidXR0b24iLDUpLFZtKCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5yZXNldERvbWFpbigpfSkpLEFoKDYsImFzeW5jIiksQWgoNywiYXN5bmMiKSxUbSg4LCJtYXQtaWNvbiIsNiksQW0oKSxSbSg5LCJidXR0b24iLDcpLFZtKCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblBpbkNsaWNrZWQuZW1pdCghbi5pc1Bpbm5lZCl9KSksVG0oMTAsIm1hdC1pY29uIiw4KSxBbSgpLFJtKDExLCJidXR0b24iLDkpLFZtKCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkZ1bGxTaXplVG9nZ2xlLmVtaXQoKX0pKSxUbSgxMiwibWF0LWljb24iLDgpLEFtKCksUm0oMTMsImJ1dHRvbiIsMTApLFRtKDE0LCJtYXQtaWNvbiIsMTEpLEFtKCksUm0oMTUsIm1hdC1tZW51IixudWxsLDEyKSxSbSgxNywiYnV0dG9uIiwxMyksVm0oImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnRvZ2dsZVlTY2FsZVR5cGUoKX0pKSxUbSgxOCwibWF0LWljb24iLDE0KSxSbSgxOSwic3BhbiIpLGt1KDIwLCJUb2dnbGUgWS1heGlzIGxvZyBzY2FsZSIpLEFtKCksQW0oKSxSbSgyMSwiYnV0dG9uIiwxNSksVm0oImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9wZW5EYXRhRG93bmxvYWREaWFsb2coKX0pKSxUbSgyMiwibWF0LWljb24iLDE2KSxSbSgyMywic3BhbiIpLGt1KDI0LCJEb3dubG9hZCBkYXRhIiksQW0oKSxBbSgpLEFtKCksQW0oKSxBbSgpLFJtKDI1LCJkaXYiLDE3KSxRcCgyNix5ZnQsMSwwLCJtYXQtc3Bpbm5lciIsMTgpLFJtKDI3LCJsaW5lLWNoYXJ0IiwxOSksVm0oIm9uVmlld0JveE92ZXJyaWRkZW4iLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmlzVmlld0JveE92ZXJyaWRkZW49ZX0pKSxBbSgpLFFwKDI4LHZmdCwxNywzLCJuZy10ZW1wbGF0ZSIsbnVsbCwyMCxpYiksQW0oKSxRcCgzMCxEZnQsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwyMSxpYiksUXAoMzIsQWZ0LDEsMSwibmctdGVtcGxhdGUiLG51bGwsMjIsaWIpKSwyJmUpe2NvbnN0IHQ9JHAoMTYpLGU9JHAoMjkpLG89JHAoMzEpLGk9JHAoMzMpO3JjKDIpLEttKCJ0aXRsZSIsbi50YWcpLEttKCJ2YWx1ZSIsbi50aXRsZSkscmMoMSksRG0oIm5nSWYiLG4uc2VsZWN0ZWRUaW1lJiZuLnNlbGVjdGVkVGltZS5jbGlwcGVkKSxyYygyKSxEbSgiZGlzYWJsZWQiLCFuLmxpbmVDaGFydHx8IVRoKDYsMjIsbi5saW5lQ2hhcnQuZ2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpKSkoInRpdGxlIixuLmxpbmVDaGFydCYmVGgoNywyNCxuLmxpbmVDaGFydC5nZXRJc1ZpZXdCb3hPdmVycmlkZGVuKCkpPyJMaW5lIGNoYXJ0IGlzIGFscmVhZHkgZml0dGVkIHRvIGRhdGEuIFdoZW4gZGF0YSB1cGRhdGVzLCB0aGUgbGluZSBjaGFydCB3aWxsIGF1dG8gZml0IHRvIGl0cyBkb21haW4uIjoiRml0IGxpbmUgY2hhcnQgZG9tYWlucyB0byBkYXRhIikscmMoNCksanAoInRpdGxlIixuLmlzUGlubmVkPyJVbnBpbiBjYXJkIjoiUGluIGNhcmQiKSxyYygxKSxEbSgic3ZnSWNvbiIsbi5pc1Bpbm5lZD8ia2VlcF8yNHB4Ijoia2VlcF9vdXRsaW5lXzI0cHgiKSxyYygyKSxEbSgic3ZnSWNvbiIsbi5zaG93RnVsbFNpemU/ImZ1bGxzY3JlZW5fZXhpdF8yNHB4IjoiZnVsbHNjcmVlbl8yNHB4IikscmMoMSksRG0oIm1hdE1lbnVUcmlnZ2VyRm9yIix0KSxyYygxMyksRG0oIm5nSWYiLG4ubG9hZFN0YXRlPT09bi5EYXRhTG9hZFN0YXRlLkxPQURJTkcpLHJjKDEpLERtKCJkaXNhYmxlVXBkYXRlIiwhbi5pc0NhcmRWaXNpYmxlKSgicHJlZmVycmVkUmVuZGVyZXJUeXBlIixuLlJlbmRlcmVyVHlwZS5XRUJHTCkoInNlcmllc0RhdGEiLG4uZGF0YVNlcmllcykoInNlcmllc01ldGFkYXRhTWFwIixuLmNoYXJ0TWV0YWRhdGFNYXApKCJ4U2NhbGVUeXBlIixuLnhTY2FsZVR5cGUpKCJ5U2NhbGVUeXBlIixuLnlTY2FsZVR5cGUpKCJjdXN0b21YRm9ybWF0dGVyIixuLmdldEN1c3RvbVhGb3JtYXR0ZXIoKSkoImlnbm9yZVlPdXRsaWVycyIsbi5pZ25vcmVPdXRsaWVycykoInRvb2x0aXBUZW1wbGF0ZSIsZSkoInVzZURhcmtNb2RlIixuLnVzZURhcmtNb2RlKSgiY3VzdG9tVmlzVGVtcGxhdGUiLG8pKCJjdXN0b21YQXhpc1RlbXBsYXRlIixpKX19LGRpcmVjdGl2ZXM6W3oyLGRNLFhILERXLGVZLEtXLFdXLGZmdCxnZnQsbzEsbE0sYU0saGZ0XSxwaXBlczpbd00sUk1dLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZToxNHB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206NHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpncmlkO2dhcDo1cHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gYXV0b30uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV0gICB2aXMtc2VsZWN0ZWQtdGltZS1jbGlwcGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MS4yZW07bGluZS1oZWlnaHQ6MH0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59LnBpbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxOHB4fS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aGl0ZS1zcGFjZTpub3dyYXA7ZmxleC1zaHJpbms6MDttYXJnaW4tcmlnaHQ6LTEycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uY2hhcnQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4OjF9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBtYXQtc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTFweDt0b3A6MTFweH0uY2hhcnQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmUtY2hhcnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCV9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1zcGFjaW5nOjRweDtmb250LXNpemU6MTNweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLXJvd1tfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLXJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMHB4O3dpZHRoOjEwcHh9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLmNsb3Nlc3RbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ZmZjtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5vdXQtb2Ytc2VsZWN0ZWQtdGltZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjAgZGFzaGVkIGN1cnJlbnRDb2xvcjtoZWlnaHQ6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZX0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodC13aWR0aDoycHg7bWFyZ2luLWxlZnQ6LTFweH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnQucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2xlZnQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuZW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdC13aWR0aDoycHg7bWFyZ2luLXJpZ2h0Oi0xcHg7cmlnaHQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQpfS5saW5rZWQtdGltZS1mb2ItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9bGlua2VkLXRpbWUtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoVGZ0LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InNjYWxhci1jYXJkLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6InNjYWxhcl9jYXJkX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyJzY2FsYXJfY2FyZF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfSx7dHlwZTpvV31dfSkse2NhcmRJZDpbe3R5cGU6eHl9XSxjaGFydE1ldGFkYXRhTWFwOlt7dHlwZTp4eX1dLERhdGFEb3dubG9hZENvbXBvbmVudDpbe3R5cGU6eHl9XSxkYXRhU2VyaWVzOlt7dHlwZTp4eX1dLGlnbm9yZU91dGxpZXJzOlt7dHlwZTp4eX1dLGlzQ2FyZFZpc2libGU6W3t0eXBlOnh5fV0saXNQaW5uZWQ6W3t0eXBlOnh5fV0sbG9hZFN0YXRlOlt7dHlwZTp4eX1dLHNob3dGdWxsU2l6ZTpbe3R5cGU6eHl9XSxzbW9vdGhpbmdFbmFibGVkOlt7dHlwZTp4eX1dLHRhZzpbe3R5cGU6eHl9XSx0aXRsZTpbe3R5cGU6eHl9XSx0b29sdGlwU29ydDpbe3R5cGU6eHl9XSx4QXhpc1R5cGU6W3t0eXBlOnh5fV0seFNjYWxlVHlwZTpbe3R5cGU6eHl9XSx1c2VEYXJrTW9kZTpbe3R5cGU6eHl9XSxzZWxlY3RlZFRpbWU6W3t0eXBlOnh5fV0sb25GdWxsU2l6ZVRvZ2dsZTpbe3R5cGU6T3l9XSxvblBpbkNsaWNrZWQ6W3t0eXBlOk95fV0sbGluZUNoYXJ0Olt7dHlwZTpaYSxhcmdzOltmZnRdfV19KTtjbGFzcyBOZnR7Y29uc3RydWN0b3IodCxlKXt0aGlzLnJlZj10LHRoaXMuY2RrU2Nyb2xsYWJsZT1lLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlPW5ldyBMaCx0aGlzLm5nVW5zdWJzY3JpYmUkPW5ldyBJLHRoaXMub25FdmVudCQ9bmV3IEl9bmdPbkluaXQoKXtjb25zdCB0PW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigodD0+e3RoaXMub25FdmVudCQubmV4dCh0KX0pLHtyb290OnRoaXMuY2RrU2Nyb2xsYWJsZT90aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ6bnVsbCxyb290TWFyZ2luOnRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYXJnaW59KTt0Lm9ic2VydmUodGhpcy5yZWYubmF0aXZlRWxlbWVudCksdGhpcy5uZ1Vuc3Vic2NyaWJlJC5zdWJzY3JpYmUoKCgpPT57dC51bm9ic2VydmUodGhpcy5yZWYubmF0aXZlRWxlbWVudCl9KSksdGhpcy5vbkV2ZW50JC5waXBlKEllKHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKHQ9Pntjb25zdCBlPXQuc2xpY2UoLTEpWzBdO3RoaXMub25WaXNpYmlsaXR5Q2hhbmdlLmVtaXQoe3Zpc2libGU6ZS5pc0ludGVyc2VjdGluZ30pfSkpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlJC5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlJC5jb21wbGV0ZSgpfXdhaXRGb3JFdmVudEZvclRlc3RPbmx5KCl7cmV0dXJuIG5ldyBQcm9taXNlKCh0PT50aGlzLm9uRXZlbnQkLnBpcGUoYmUoMSkpLnN1YnNjcmliZSgoKCk9Pnt0KCl9KSkpKX19ZnVuY3Rpb24gemZ0KHQsZSl7cmV0dXJuIHQubGVuZ3RoPT09ZS5sZW5ndGgmJnQuZXZlcnkoKCh0LG4pPT57Y29uc3Qgbz1lW25dLGk9dC5wb2ludHMsYT1vLnBvaW50cztyZXR1cm4gdC5ydW5JZD09PW8ucnVuSWQmJmkubGVuZ3RoPT09YS5sZW5ndGgmJmkuZXZlcnkoKCh0LGUpPT57Y29uc3Qgbj1hW2VdO3JldHVybiB0Lng9PT1uLngmJnQueT09PW4ueX0pKX0pKX1OZnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fE5mdCkoU20oaGcpLFNtKG1GLDgpKX0sTmZ0Lsm1ZGlyPWxvKHt0eXBlOk5mdCxzZWxlY3RvcnM6W1siIiwib2JzZXJ2ZUludGVyc2VjdGlvbiIsIiJdXSxpbnB1dHM6e2ludGVyc2VjdGlvbk9ic2VydmVyTWFyZ2luOiJpbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbiJ9LG91dHB1dHM6e29uVmlzaWJpbGl0eUNoYW5nZToib25WaXNpYmlsaXR5Q2hhbmdlIn19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKE5mdCxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJbb2JzZXJ2ZUludGVyc2VjdGlvbl0ifV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9LHt0eXBlOm1GLGRlY29yYXRvcnM6W3t0eXBlOlNyfV19XX0pLHtpbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbjpbe3R5cGU6eHl9XSxvblZpc2liaWxpdHlDaGFuZ2U6W3t0eXBlOk95fV19KTtjbGFzcyBJZnR7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuRGF0YURvd25sb2FkQ29tcG9uZW50PWw1LHRoaXMuZnVsbFdpZHRoQ2hhbmdlZD1uZXcgTGgsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgTGgsdGhpcy5waW5TdGF0ZUNoYW5nZWQ9bmV3IExoLHRoaXMuaXNWaXNpYmxlPSExLHRoaXMudXNlRGFya01vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KEpEKSx0aGlzLmlnbm9yZU91dGxpZXJzJD10aGlzLnN0b3JlLnNlbGVjdChBVCksdGhpcy50b29sdGlwU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoUlQpLHRoaXMueEF4aXNUeXBlJD10aGlzLnN0b3JlLnNlbGVjdChUVCksdGhpcy54U2NhbGVUeXBlJD10aGlzLnN0b3JlLnNlbGVjdChUVCkucGlwZShJdCgodD0+e3N3aXRjaCh0KXtjYXNlIHlBLlNURVA6Y2FzZSB5QS5SRUxBVElWRTpyZXR1cm4gSjIuTElORUFSO2Nhc2UgeUEuV0FMTF9USU1FOnJldHVybiBKMi5USU1FO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHhBeGlzVHlwZSBmb3IgbGluZSBjaGFydC4gJHt0fWApfX0pKSksdGhpcy5zY2FsYXJTbW9vdGhpbmckPXRoaXMuc3RvcmUuc2VsZWN0KHpUKSx0aGlzLnNtb290aGluZ0VuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KHpUKS5waXBlKEl0KCh0PT50PjApKSksdGhpcy5zaG93RnVsbFNpemU9ITEsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJfW9uVmlzaWJpbGl0eUNoYW5nZSh7dmlzaWJsZTp0fSl7dGhpcy5pc1Zpc2libGU9dH1pc1NjYWxhckNhcmRNZXRhZGF0YSh0KXtjb25zdHtwbHVnaW46ZX09dDtyZXR1cm4gZT09PWhBLlNDQUxBUlN9b25GdWxsU2l6ZVRvZ2dsZSgpe3RoaXMuc2hvd0Z1bGxTaXplPSF0aGlzLnNob3dGdWxsU2l6ZSx0aGlzLmZ1bGxXaWR0aENoYW5nZWQuZW1pdCh0aGlzLnNob3dGdWxsU2l6ZSksdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZC5lbWl0KHRoaXMuc2hvd0Z1bGxTaXplKX1uZ09uSW5pdCgpe2NvbnN0IHQ9dGhpcy5zdG9yZS5zZWxlY3QoeVQsdGhpcy5jYXJkSWQpLnBpcGUoY2UoKHQ9PiEhdCYmdGhpcy5pc1NjYWxhckNhcmRNZXRhZGF0YSh0KSkpLEl0KCh0PT50KSkpO2Z1bmN0aW9uIGUodCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KFsic21vb3RoZWQiLHRdKX1jb25zdCBuPXRoaXMuc3RvcmUuc2VsZWN0KGhULHRoaXMuY2FyZElkKS5waXBlKEllKHRoaXMubmdVbnN1YnNjcmliZSksY2UoKHQ9PkJvb2xlYW4odCkpKSxJdCgodD0+dCkpLEFlKDEpKS5waXBlKGZlKHRoaXMuc3RvcmUuc2VsZWN0KFRUKSksSXQoKChbdCxlXSk9Pk9iamVjdC5rZXlzKHQpLm1hcCgobj0+KHtydW5JZDpuLHBvaW50czp0aGlzLnN0ZXBTZXJpZXNUb0xpbmVTZXJpZXModFtuXSxlKX0pKSkpKSxNZSh6ZnQpKS5waXBlKGZlKHRoaXMuc3RvcmUuc2VsZWN0KElUKSksSWUodGhpcy5uZ1Vuc3Vic2NyaWJlKSxJdCgoKFt0LGVdKT0+ZT8oZnVuY3Rpb24gbih0KXt2YXIgZTtjb25zdCBuPVtdO2Zvcihjb25zdCBvIG9mIHQpe2NvbnN0IHQ9W107bGV0IGk9TnVtYmVyLmlzRmluaXRlKG51bGw9PT0oZT1vLnBvaW50c1swXSl8fHZvaWQgMD09PWU/dm9pZCAwOmUueCk/by5wb2ludHNbMF0ueDotMS8wLGE9W107Zm9yKGNvbnN0IGUgb2Ygby5wb2ludHMpTnVtYmVyLmlzRmluaXRlKGUueCk/KGUueDxpJiYodC5wdXNoKHtzZXJpZXNJZDpKU09OLnN0cmluZ2lmeShbby5ydW5JZCx0Lmxlbmd0aF0pLHJ1bklkOm8ucnVuSWQscG9pbnRzOmF9KSxhPVtdKSxhLnB1c2goZSksaT1lLngpOmEucHVzaChlKTt0LnB1c2goe3Nlcmllc0lkOkpTT04uc3RyaW5naWZ5KFtvLnJ1bklkLHQubGVuZ3RoXSkscnVuSWQ6by5ydW5JZCxwb2ludHM6YX0pO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKW4ucHVzaChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdFtlXSkse3BhcnRpdGlvbkluZGV4OmUscGFydGl0aW9uU2l6ZTp0Lmxlbmd0aH0pKX1yZXR1cm4gbn0pKHQpOnQubWFwKCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3Nlcmllc0lkOnQucnVuSWQscGFydGl0aW9uSW5kZXg6MCxwYXJ0aXRpb25TaXplOjF9KSkpKSksSXQoKHQ9PnQubWFwKCh0PT57dmFyIGU7Y29uc3Qgbj1udWxsPT09KGU9dC5wb2ludHNbMF0pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLndhbGxUaW1lO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BvaW50czp0LnBvaW50cy5tYXAoKHQ9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7cmVsYXRpdmVUaW1lSW5Nczp0LndhbGxUaW1lLW59KSkpfSl9KSkpKSxmZSh0aGlzLnN0b3JlLnNlbGVjdChUVCkpLEl0KCgoW3QsZV0pPT50Lm1hcCgodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtwb2ludHM6dC5wb2ludHMubWFwKCh0PT57bGV0IG47c3dpdGNoKGUpe2Nhc2UgeUEuUkVMQVRJVkU6bj10LnJlbGF0aXZlVGltZUluTXM7YnJlYWs7Y2FzZSB5QS5XQUxMX1RJTUU6bj10LndhbGxUaW1lO2JyZWFrO2Nhc2UgeUEuU1RFUDpkZWZhdWx0Om49dC5zdGVwfXJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3g6bn0pfSkpfSkpKSkpLEFlKDEpKTt0aGlzLmRhdGFTZXJpZXMkPW4ucGlwZShmZSh0aGlzLnN0b3JlLnNlbGVjdCh6VCkpLHplKCgoW3Qsbl0pPT57Y29uc3Qgbz10Lm1hcCgoKHtzZXJpZXNJZDp0LHBvaW50czplfSk9Pih7aWQ6dCxwb2ludHM6ZX0pKSk7cmV0dXJuIG48PTA/RXQobyk6Q3QoKGZ1bmN0aW9uIGkodCxlKXt2YXIgbjtyZXR1cm4gZ0EodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtOdW1iZXIuaXNGaW5pdGUoZSl8fChlPTApLGU9TWF0aC5tYXgoMCxNYXRoLm1pbihlLDEpKTtjb25zdCBvPVtdO2Zvcihjb25zdCBpIG9mIHQpe2NvbnN0IHQ9bnVsbD09PShuPWkucG9pbnRzWzBdKXx8dm9pZCAwPT09bj92b2lkIDA6bi55O2lmKGkucG9pbnRzLmV2ZXJ5KChlPT5lLnk9PXQpKSl7by5wdXNoKGkpO2NvbnRpbnVlfWxldCBhPWkucG9pbnRzLmxlbmd0aD4wPzA6TmFOLHI9MDtjb25zdCBzPWkucG9pbnRzLm1hcCgodD0+e2NvbnN0IG49dC55O2lmKE51bWJlci5pc0Zpbml0ZShuKSl7YT1hKmUrKDEtZSkqbixyKys7Y29uc3Qgbz0xPT09ZT8xOjEtTWF0aC5wb3coZSxyKTtyZXR1cm57eDp0LngseTphL299fXJldHVybnt4OnQueCx5Om59fSkpO28ucHVzaCh7aWQ6aS5pZCxwb2ludHM6c30pfXJldHVybiBvfSkpfSkobyxuKSkucGlwZShJdCgodD0+e2NvbnN0IG49by5tYXAoKChuLG8pPT4oe2lkOmUobi5pZCkscG9pbnRzOnRbb10ucG9pbnRzLm1hcCgoKHt5OnR9LGUpPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbi5wb2ludHNbZV0pLHt5OnR9KSkpfSkpKTtyZXR1cm5bLi4ubywuLi5uXX0pKSl9KSksTmUoW10pKSx0aGlzLnNlbGVjdGVkVGltZSQ9V3QoW24sdGhpcy5zdG9yZS5zZWxlY3QoWVQpLHRoaXMuc3RvcmUuc2VsZWN0KFRUKV0pLnBpcGUoSXQoKChbdCxlLG5dKT0+e2lmKG4hPT15QS5TVEVQfHwhZSlyZXR1cm4gbnVsbDtsZXQgbz0xLzAsaT0tMS8wO2Zvcihjb25zdHtwb2ludHM6ZX1vZiB0KWZvcihjb25zdCB0IG9mIGUpbz1vPnQueD90Lng6byxpPWk8dC54P3QueDppO3JldHVybiBIMihlLG8saSl9KSkpLHRoaXMuY2hhcnRNZXRhZGF0YU1hcCQ9bi5waXBlKHplKCh0PT5XdCh0Lm1hcCgodD0+dGhpcy5nZXRSdW5EaXNwbGF5TmFtZSh0LnJ1bklkKS5waXBlKEl0KChlPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2Rpc3BsYXlOYW1lOmV9KSkpKSkpKSkpLGZlKHRoaXMuc3RvcmUuc2VsZWN0KE5OKSx0aGlzLnN0b3JlLnNlbGVjdCh6TiksdGhpcy5zdG9yZS5zZWxlY3QoelQpKSxnZSgwKSxJdCgoKFt0LG4sbyxpXSk9Pnt2YXIgYTtjb25zdCByPXt9LHM9aT4wO2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0e3Nlcmllc0lkOnQscnVuSWQ6aSxkaXNwbGF5TmFtZTpzLHBhcnRpdGlvbkluZGV4OmwscGFydGl0aW9uU2l6ZTpjfT1lO3JbdF09e3R5cGU6UTIuT1JJR0lOQUwsaWQ6dCxkaXNwbGF5TmFtZTpjPjE/YCR7c306ICR7bH1gOnMsdmlzaWJsZTpCb29sZWFuKG4mJm4uZ2V0KGkpKSxjb2xvcjpudWxsIT09KGE9b1tpXSkmJnZvaWQgMCE9PWE/YToiI2ZmZiIsYXV4OiExLG9wYWNpdHk6MX19aWYoIXMpcmV0dXJuIHI7Zm9yKGNvbnN0W3Qsbl1vZiBPYmplY3QuZW50cmllcyhyKSl7Y29uc3Qgbz1lKHQpO3Jbb109T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4pLHtpZDpvLHR5cGU6UTIuREVSSVZFRCxhdXg6ITEsb3JpZ2luYWxTZXJpZXNJZDp0fSksbi5hdXg9ITAsbi5vcGFjaXR5PS4yNX1yZXR1cm4gcn0pKSxOZSh7fSkpLHRoaXMubG9hZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdChnVCx0aGlzLmNhcmRJZCksdGhpcy50YWckPXQucGlwZShJdCgodD0+dC50YWcpKSksdGhpcy50aXRsZSQ9dGhpcy50YWckLnBpcGUoSXQoKHQ9PmYyKHQsdGhpcy5ncm91cE5hbWUpKSkpLHRoaXMuaXNQaW5uZWQkPXRoaXMuc3RvcmUuc2VsZWN0KHdULHRoaXMuY2FyZElkKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9Z2V0UnVuRGlzcGxheU5hbWUodCl7cmV0dXJuIFd0KFt0aGlzLnN0b3JlLnNlbGVjdChyTix7cnVuSWQ6dH0pLHRoaXMuc3RvcmUuc2VsZWN0KHpTKSx0aGlzLnN0b3JlLnNlbGVjdChzTix7cnVuSWQ6dH0pXSkucGlwZShJdCgoKFtlLG4sb10pPT5JMih0LG8sZT9uW2VdOm51bGwpKSkpfXN0ZXBTZXJpZXNUb0xpbmVTZXJpZXModCxlKXtjb25zdCBuPWU9PT15QS5TVEVQO3JldHVybiB0Lm1hcCgodD0+e2NvbnN0IGU9MWUzKnQud2FsbFRpbWU7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7eDpuP3Quc3RlcDplLHk6dC52YWx1ZSx3YWxsVGltZTplLHJlbGF0aXZlVGltZUluTXM6MH0pfSkpfX1mdW5jdGlvbiBIZnQodCxlLG4pe2NvbnN0IG89W10se2xlZnQ6aSxyaWdodDphfT1lLHI9KGEtaSkvbjtsZXQgcz0wLGw9MDtmb3IobGV0IGU9MDtlPG47ZSsrKXtjb25zdCBhPWkrZSpyLGM9YStyLGQ9ZT09PW4tMTtsZXQgcD1sO2ZvcihsPTA7czx0Lmxlbmd0aDspe2NvbnN0IGU9dFtzXSxuPUZmdChlLGEsYywhZCk7aWYocCs9bi5jdXJyLGwrPW4ubmV4dCxlLngrZS5keD5jKWJyZWFrO3MrK31vLnB1c2goe3g6YSxkeDpyLHk6cH0pfXJldHVybiBvfWZ1bmN0aW9uIEZmdCh0LGUsbixvKXtjb25zdCBpPXQueCxhPXQueCt0LmR4O2lmKGk+bnx8YTxlKXJldHVybntjdXJyOjAsbmV4dDowfTtpZigwPT09dC5keClyZXR1cm4gbyYmYT09PW4/e2N1cnI6LjUqdC55LG5leHQ6LjUqdC55fTp7Y3Vycjp0LnksbmV4dDowfTtjb25zdCByPU1hdGgubWluKGEsbiktTWF0aC5tYXgoaSxlKTtyZXR1cm57Y3Vycjp0Lnkqci90LmR4LG5leHQ6MH19SWZ0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxJZnQpKFNtKEl3KSl9LElmdC7JtWNtcD10byh7dHlwZTpJZnQsc2VsZWN0b3JzOltbInNjYWxhci1jYXJkIl1dLGlucHV0czp7RGF0YURvd25sb2FkQ29tcG9uZW50OiJEYXRhRG93bmxvYWRDb21wb25lbnQiLGNhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSJ9LG91dHB1dHM6e2Z1bGxXaWR0aENoYW5nZWQ6ImZ1bGxXaWR0aENoYW5nZWQiLGZ1bGxIZWlnaHRDaGFuZ2VkOiJmdWxsSGVpZ2h0Q2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczoxNCx2YXJzOjQzLGNvbnN0czpbWyJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiIiwzLCJjYXJkSWQiLCJjaGFydE1ldGFkYXRhTWFwIiwiRGF0YURvd25sb2FkQ29tcG9uZW50IiwiZGF0YVNlcmllcyIsImlnbm9yZU91dGxpZXJzIiwiaXNDYXJkVmlzaWJsZSIsImlzUGlubmVkIiwibG9hZFN0YXRlIiwic2hvd0Z1bGxTaXplIiwic21vb3RoaW5nRW5hYmxlZCIsInRhZyIsInRpdGxlIiwidG9vbHRpcFNvcnQiLCJ4QXhpc1R5cGUiLCJ4U2NhbGVUeXBlIiwidXNlRGFya01vZGUiLCJzZWxlY3RlZFRpbWUiLCJvbkZ1bGxTaXplVG9nZ2xlIiwib25QaW5DbGlja2VkIiwib25WaXNpYmlsaXR5Q2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJzY2FsYXItY2FyZC1jb21wb25lbnQiLDApLFZtKCJvbkZ1bGxTaXplVG9nZ2xlIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uRnVsbFNpemVUb2dnbGUoKX0pKSgib25QaW5DbGlja2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5waW5TdGF0ZUNoYW5nZWQuZW1pdChlKX0pKSgib25WaXNpYmlsaXR5Q2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblZpc2liaWxpdHlDaGFuZ2UoZSl9KSksQWgoMSwiYXN5bmMiKSxBaCgyLCJhc3luYyIpLEFoKDMsImFzeW5jIiksQWgoNCwiYXN5bmMiKSxBaCg1LCJhc3luYyIpLEFoKDYsImFzeW5jIiksQWgoNywiYXN5bmMiKSxBaCg4LCJhc3luYyIpLEFoKDksImFzeW5jIiksQWgoMTAsImFzeW5jIiksQWgoMTEsImFzeW5jIiksQWgoMTIsImFzeW5jIiksQWgoMTMsImFzeW5jIiksQW0oKSksMiZlJiZEbSgiY2FyZElkIixuLmNhcmRJZCkoImNoYXJ0TWV0YWRhdGFNYXAiLFRoKDEsMTcsbi5jaGFydE1ldGFkYXRhTWFwJCkpKCJEYXRhRG93bmxvYWRDb21wb25lbnQiLG4uRGF0YURvd25sb2FkQ29tcG9uZW50KSgiZGF0YVNlcmllcyIsVGgoMiwxOSxuLmRhdGFTZXJpZXMkKSkoImlnbm9yZU91dGxpZXJzIixUaCgzLDIxLG4uaWdub3JlT3V0bGllcnMkKSkoImlzQ2FyZFZpc2libGUiLG4uaXNWaXNpYmxlKSgiaXNQaW5uZWQiLFRoKDQsMjMsbi5pc1Bpbm5lZCQpKSgibG9hZFN0YXRlIixUaCg1LDI1LG4ubG9hZFN0YXRlJCkpKCJzaG93RnVsbFNpemUiLG4uc2hvd0Z1bGxTaXplKSgic21vb3RoaW5nRW5hYmxlZCIsVGgoNiwyNyxuLnNtb290aGluZ0VuYWJsZWQkKSkoInRhZyIsVGgoNywyOSxuLnRhZyQpKSgidGl0bGUiLFRoKDgsMzEsbi50aXRsZSQpKSgidG9vbHRpcFNvcnQiLFRoKDksMzMsbi50b29sdGlwU29ydCQpKSgieEF4aXNUeXBlIixUaCgxMCwzNSxuLnhBeGlzVHlwZSQpKSgieFNjYWxlVHlwZSIsVGgoMTEsMzcsbi54U2NhbGVUeXBlJCkpKCJ1c2VEYXJrTW9kZSIsVGgoMTIsMzksbi51c2VEYXJrTW9kZSQpKSgic2VsZWN0ZWRUaW1lIixUaCgxMyw0MSxuLnNlbGVjdGVkVGltZSQpKX0sZGlyZWN0aXZlczpbVGZ0LE5mdF0scGlwZXM6W3dNXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoSWZ0LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InNjYWxhci1jYXJkIix0ZW1wbGF0ZTonXG4gICAgPHNjYWxhci1jYXJkLWNvbXBvbmVudFxuICAgICAgW2NhcmRJZF09ImNhcmRJZCJcbiAgICAgIFtjaGFydE1ldGFkYXRhTWFwXT0iY2hhcnRNZXRhZGF0YU1hcCQgfCBhc3luYyJcbiAgICAgIFtEYXRhRG93bmxvYWRDb21wb25lbnRdPSJEYXRhRG93bmxvYWRDb21wb25lbnQiXG4gICAgICBbZGF0YVNlcmllc109ImRhdGFTZXJpZXMkIHwgYXN5bmMiXG4gICAgICBbaWdub3JlT3V0bGllcnNdPSJpZ25vcmVPdXRsaWVycyQgfCBhc3luYyJcbiAgICAgIFtpc0NhcmRWaXNpYmxlXT0iaXNWaXNpYmxlIlxuICAgICAgW2lzUGlubmVkXT0iaXNQaW5uZWQkIHwgYXN5bmMiXG4gICAgICBbbG9hZFN0YXRlXT0ibG9hZFN0YXRlJCB8IGFzeW5jIlxuICAgICAgW3Nob3dGdWxsU2l6ZV09InNob3dGdWxsU2l6ZSJcbiAgICAgIFtzbW9vdGhpbmdFbmFibGVkXT0ic21vb3RoaW5nRW5hYmxlZCQgfCBhc3luYyJcbiAgICAgIFt0YWddPSJ0YWckIHwgYXN5bmMiXG4gICAgICBbdGl0bGVdPSJ0aXRsZSQgfCBhc3luYyJcbiAgICAgIFt0b29sdGlwU29ydF09InRvb2x0aXBTb3J0JCB8IGFzeW5jIlxuICAgICAgW3hBeGlzVHlwZV09InhBeGlzVHlwZSQgfCBhc3luYyJcbiAgICAgIFt4U2NhbGVUeXBlXT0ieFNjYWxlVHlwZSQgfCBhc3luYyJcbiAgICAgIFt1c2VEYXJrTW9kZV09InVzZURhcmtNb2RlJCB8IGFzeW5jIlxuICAgICAgW3NlbGVjdGVkVGltZV09InNlbGVjdGVkVGltZSQgfCBhc3luYyJcbiAgICAgIChvbkZ1bGxTaXplVG9nZ2xlKT0ib25GdWxsU2l6ZVRvZ2dsZSgpIlxuICAgICAgKG9uUGluQ2xpY2tlZCk9InBpblN0YXRlQ2hhbmdlZC5lbWl0KCRldmVudCkiXG4gICAgICBvYnNlcnZlSW50ZXJzZWN0aW9uXG4gICAgICAob25WaXNpYmlsaXR5Q2hhbmdlKT0ib25WaXNpYmlsaXR5Q2hhbmdlKCRldmVudCkiXG4gICAgPjwvc2NhbGFyLWNhcmQtY29tcG9uZW50PlxuICAnLHN0eWxlczpbIlxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuICAgICJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd31dfSkse0RhdGFEb3dubG9hZENvbXBvbmVudDpbe3R5cGU6eHl9XSxjYXJkSWQ6W3t0eXBlOnh5fV0sZ3JvdXBOYW1lOlt7dHlwZTp4eX1dLGZ1bGxXaWR0aENoYW5nZWQ6W3t0eXBlOk95fV0sZnVsbEhlaWdodENoYW5nZWQ6W3t0eXBlOk95fV0scGluU3RhdGVDaGFuZ2VkOlt7dHlwZTpPeX1dfSk7Y29uc3QgTGZ0PVsibWFpbiJdLEJmdD1bInhBeGlzIl0sVmZ0PVsieUF4aXMiXSxqZnQ9WyJjb250ZW50Il0sVWZ0PVsiaGlzdG9ncmFtcyJdO2Z1bmN0aW9uIEdmdCh0LGUpe2lmKDEmdCYmKHFpKCksUm0oMCwiZyIpLFJtKDEsInRleHQiKSxrdSgyKSxBbSgpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgpO2R1KCJ0cmFuc2Zvcm0iLHQuZ2V0Q3NzVHJhbnNsYXRlUHgodC50b29sdGlwRGF0YS54QXhpcy5wb3NpdGlvbiw5KSkscmMoMiksU3UodC50b29sdGlwRGF0YS54QXhpcy5sYWJlbCl9fWZ1bmN0aW9uIFdmdCh0LGUpe2lmKDEmdCYmKHFpKCksUm0oMCwiZyIpLFJtKDEsInRleHQiKSxrdSgyKSxBbSgpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgpO2R1KCJ0cmFuc2Zvcm0iLHQuZ2V0R3JvdXBUcmFuc2Zvcm0odC50b29sdGlwRGF0YS5jbG9zZXN0RGF0dW0pKSxyYygxKSxqcCgieSIsdC50b29sdGlwRGF0YS55QXhpcy5wb3NpdGlvbikscmMoMSksRHUoIiAiLHQudG9vbHRpcERhdGEueUF4aXMubGFiZWwsIiAiKX19ZnVuY3Rpb24gWWZ0KHQsZSl7aWYoMSZ0JiYoUm0oMCwiZGl2IiwxNiksVG0oMSwibGlua2VkLXRpbWUtZm9iIiwxNyksQW0oKSksMiZ0KXtjb25zdCB0PVltKDIpO2R1KCJ0cmFuc2Zvcm0iLHQuZ2V0Q3NzVHJhbnNsYXRlUHgoMCx0LnNjYWxlcy50ZW1wb3JhbFNjYWxlKHQubGlua2VkVGltZS5lbmRTdGVwKSkpLHJjKDEpLERtKCJzdGVwIix0LmxpbmtlZFRpbWUuZW5kU3RlcCl9fWZ1bmN0aW9uIHFmdCh0LGUpe2lmKDEmdCYmKHFpKCksWmkoKSxObSgwKSxSbSgxLCJkaXYiLDE2KSxUbSgyLCJsaW5rZWQtdGltZS1mb2IiLDE3KSxBbSgpLFFwKDMsWWZ0LDIsMywiZGl2IiwxOCksem0oKSksMiZ0KXtjb25zdCB0PVltKCk7cmMoMSksZHUoInRyYW5zZm9ybSIsdC5nZXRDc3NUcmFuc2xhdGVQeCgwLHQuc2NhbGVzLnRlbXBvcmFsU2NhbGUodC5saW5rZWRUaW1lLnN0YXJ0U3RlcCkpKSxyYygxKSxEbSgic3RlcCIsdC5saW5rZWRUaW1lLnN0YXJ0U3RlcCkscmMoMSksRG0oIm5nSWYiLHQubGlua2VkVGltZS5lbmRTdGVwKX19ZnVuY3Rpb24gWmZ0KHQsZSl7aWYoMSZ0JiYocWkoKSxSbSgwLCJnIiksVG0oMSwibGluZSIsMTkpLEFtKCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdDtkdSgidHJhbnNmb3JtIixZbSgpLmdldENzc1RyYW5zbGF0ZVB4KDAsdCkpfX1mdW5jdGlvbiBYZnQodCxlKXsxJnQmJihxaSgpLFRtKDAsImxpbmUiLDIyKSl9ZnVuY3Rpb24gS2Z0KHQsZSl7aWYoMSZ0JiYocWkoKSxUbSgwLCJjaXJjbGUiLDIzKSksMiZ0KXtjb25zdCB0PVltKCkuJGltcGxpY2l0LGU9WW0oKTtkdSgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4KGUuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUuZ2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKHQsZS50b29sdGlwRGF0YS54UG9zaXRpb25JbkJpbkNvb3JkKSkueCxlLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChlLmdldENsb3Nlc3RCaW5Gcm9tQmluQ29vcmRpbmF0ZSh0LGUudG9vbHRpcERhdGEueFBvc2l0aW9uSW5CaW5Db29yZCkpLnkpKX19ZnVuY3Rpb24gSmZ0KHQsZSl7aWYoMSZ0JiYocWkoKSxSbSgwLCJnIiksUXAoMSxYZnQsMSwwLCJsaW5lIiwyMCksVG0oMiwicGF0aCIpLFFwKDMsS2Z0LDEsMiwiY2lyY2xlIiwyMSksQW0oKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49WW0oKTtkdSgidHJhbnNmb3JtIixuLmdldEdyb3VwVHJhbnNmb3JtKHQpKSgiY29sb3IiLG4uZ2V0SGlzdG9ncmFtRmlsbCh0KSkscHUoImhpc3RvZ3JhbSIsITApKCJuby1jb2xvciIsIW4uaXNEYXR1bUluTGlua2VkVGltZVJhbmdlKHQpKSxyYygxKSxEbSgibmdJZiIsbi5tb2RlPT09bi5IaXN0b2dyYW1Nb2RlLk9GRlNFVCkscmMoMSksanAoImQiLG4uZ2V0SGlzdG9ncmFtUGF0aCh0KSkscmMoMSksRG0oIm5nSWYiLG4udG9vbHRpcERhdGEpfX1mdW5jdGlvbiBRZnQodCxlKXtpZigxJnQmJihxaSgpLFRtKDAsImNpcmNsZSIsMjMpKSwyJnQpe2NvbnN0IHQ9WW0oMik7anAoImN4Iix0LmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudCh0LnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLngpKCJjeSIsdC5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQodC50b29sdGlwRGF0YS5jbG9zZXN0QmluKS55KX19ZnVuY3Rpb24gJGZ0KHQsZSl7aWYoMSZ0JiYocWkoKSxSbSgwLCJnIiw0KSxSbSgxLCJnIiksVG0oMiwicGF0aCIpLFFwKDMsUWZ0LDEsMiwiY2lyY2xlIiwyNCksQW0oKSxSbSg0LCJnIiwyNSksUm0oNSwidGV4dCIsMjYpLGt1KDYpLEFtKCksQW0oKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oKTtyYygxKSxkdSgidHJhbnNmb3JtIix0LmdldEdyb3VwVHJhbnNmb3JtKHQudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSkscmMoMSksanAoImQiLHQuZ2V0SGlzdG9ncmFtUGF0aCh0LnRvb2x0aXBEYXRhLmNsb3Nlc3REYXR1bSkpLHJjKDEpLERtKCJuZ0lmIix0LnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLHJjKDEpLGR1KCJ0cmFuc2Zvcm0iLHQuZ2V0Q3NzVHJhbnNsYXRlUHgodC50b29sdGlwRGF0YS52YWx1ZS5wb3NpdGlvbi54LHQudG9vbHRpcERhdGEudmFsdWUucG9zaXRpb24ueSkpLHJjKDIpLFN1KHQudG9vbHRpcERhdGEudmFsdWUubGFiZWwpfX1jbGFzcyB0Z3R7Y29uc3RydWN0b3IodCl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj10LHRoaXMubW9kZT1wRS5PRkZTRVQsdGhpcy50aW1lUHJvcGVydHk9ZEUuU1RFUCx0aGlzLmxpbmtlZFRpbWU9bnVsbCx0aGlzLkhpc3RvZ3JhbU1vZGU9cEUsdGhpcy5UaW1lUHJvcGVydHk9ZEUsdGhpcy50b29sdGlwRGF0YT1udWxsLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgSSx0aGlzLmxheW91dD17aGlzdG9ncmFtSGVpZ2h0OjAsY29udGVudENsaWVudFJlY3Q6e2hlaWdodDowLHdpZHRoOjB9fSx0aGlzLnNjYWxlcz1udWxsLHRoaXMuZm9ybWF0dGVycz17YmluTnVtYmVyOkV0dCgiLjN+cyIpLGNvdW50OkV0dCgiLjNuIiksd2FsbFRpbWU6V2V0KCIlbS8lZCAlWCIpLHN0ZXA6RXR0KCIuMGYiKSxyZWxhdGl2ZTp0PT5FdHQoIi4xciIpKHQvMzZlNSkrImgifSx0aGlzLmRvbVZpc2libGU9ITF9bmdPbkNoYW5nZXMoKXt0aGlzLnVwZGF0ZUNoYXJ0SWZWaXNpYmxlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe29lKHRoaXMubWFpbi5uYXRpdmVFbGVtZW50LCJtb3VzZW1vdmUiLHtwYXNzaXZlOiEwfSkucGlwZShJZSh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHQ9PnRoaXMub25Nb3VzZU1vdmUodCkpKX1nZXRDc3NUcmFuc2xhdGVQeCh0LGUpe3JldHVybmB0cmFuc2xhdGUoJHt0fXB4LCAke2V9cHgpYH1nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUodCxlKXtpZighdC5iaW5zLmxlbmd0aClyZXR1cm57eDowLGR4OjAseTowfTtjb25zdCBuPXQuYmluc1swXSxvPXQuYmlucy5zbGljZSgtMSlbMF07cmV0dXJuIGU8bi54P246ZT49by54K28uZHg/bzp0LmJpbnMuZmluZCgodD0+dC54PD1lJiZlPHQueCt0LmR4KSl9Z2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KHQpe3JldHVybiB0aGlzLnNjYWxlcz97eDp0aGlzLnNjYWxlcy5iaW5TY2FsZShvZ3QodCkpLHk6dGhpcy5zY2FsZXMuY291bnRTY2FsZSh0LnkpfTp7eDowLHk6MH19Z2V0SGlzdG9ncmFtUGF0aCh0KXtpZighdGhpcy5zY2FsZXN8fCF0LmJpbnMubGVuZ3RoKXJldHVybiIiO2NvbnN0IGU9dGhpcy5zY2FsZXMuYmluU2NhbGUsbj10aGlzLnNjYWxlcy5jb3VudFNjYWxlLG89dC5iaW5zWzBdLGk9dC5iaW5zLnNsaWNlKC0xKVswXSxhPVtgTSR7ZShvZ3QobykpfSwke24oMCl9YF07Zm9yKGNvbnN0IG8gb2YgdC5iaW5zKWEucHVzaChgTCR7ZShvZ3QobykpfSwke24oby55KX1gKTtyZXR1cm4gYS5wdXNoKGBMJHtlKG9ndChpKSl9LCR7bigwKX1gKSxhLmpvaW4oIiIpfXRyYWNrQnlXYWxsVGltZSh0KXtyZXR1cm4gdC53YWxsVGltZX1nZXRHcm91cFRyYW5zZm9ybSh0KXtyZXR1cm4gdGhpcy5zY2FsZXMmJnRoaXMubW9kZSE9PXBFLk9WRVJMQVk/dGhpcy5nZXRDc3NUcmFuc2xhdGVQeCgwLHRoaXMuc2NhbGVzLnRlbXBvcmFsU2NhbGUodGhpcy5nZXRUaW1lVmFsdWUodCkpKToiIn1pc0xpbmtlZFRpbWVFbmFibGVkKHQpe3JldHVybiBCb29sZWFuKHRoaXMubW9kZT09PXBFLk9GRlNFVCYmdGhpcy50aW1lUHJvcGVydHk9PT1kRS5TVEVQJiZ0aGlzLnNjYWxlcyYmdCl9aXNEYXR1bUluTGlua2VkVGltZVJhbmdlKHQpe3JldHVybiF0aGlzLmlzTGlua2VkVGltZUVuYWJsZWQodGhpcy5saW5rZWRUaW1lKXx8KG51bGw9PT10aGlzLmxpbmtlZFRpbWUuZW5kU3RlcD90aGlzLmxpbmtlZFRpbWUuc3RhcnRTdGVwPT09dC5zdGVwOnRoaXMubGlua2VkVGltZS5zdGFydFN0ZXA8PXQuc3RlcCYmdGhpcy5saW5rZWRUaW1lLmVuZFN0ZXA+PXQuc3RlcCl9Z2V0SGlzdG9ncmFtRmlsbCh0KXtyZXR1cm4gdGhpcy5zY2FsZXM/dGhpcy5zY2FsZXMuZDNDb2xvclNjYWxlKHRoaXMuZ2V0VGltZVZhbHVlKHQpKToiIn1nZXRHcmlkVGlja1lMb2NzKCl7aWYoIXRoaXMuc2NhbGVzfHx0aGlzLm1vZGU9PT1wRS5PRkZTRVQpcmV0dXJuW107Y29uc3QgdD10aGlzLnNjYWxlcy5jb3VudFNjYWxlO3JldHVybiB0LnRpY2tzKCkubWFwKChlPT50KGUpKSl9b25SZXNpemUoKXt0aGlzLnVwZGF0ZUNsaWVudFJlY3RzKCksdGhpcy51cGRhdGVDaGFydElmVmlzaWJsZSgpfW9uVmlzaWJpbGl0eUNoYW5nZSh7dmlzaWJsZTp0fSl7dGhpcy5kb21WaXNpYmxlPXQsdCYmKHRoaXMudXBkYXRlQ2xpZW50UmVjdHMoKSx0aGlzLnVwZGF0ZUNoYXJ0SWZWaXNpYmxlKCkpfWdldFRpbWVWYWx1ZSh0KXtzd2l0Y2godGhpcy50aW1lUHJvcGVydHkpe2Nhc2UgZEUuV0FMTF9USU1FOnJldHVybiB0LndhbGxUaW1lO2Nhc2UgZEUuU1RFUDpyZXR1cm4gdC5zdGVwO2Nhc2UgZEUuUkVMQVRJVkU6cmV0dXJuIHQud2FsbFRpbWUtdGhpcy5kYXRhWzBdLndhbGxUaW1lfX11cGRhdGVDbGllbnRSZWN0cygpe3RoaXMuY29udGVudCYmKHRoaXMubGF5b3V0LmNvbnRlbnRDbGllbnRSZWN0PXRoaXMuY29udGVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMubGF5b3V0Lmhpc3RvZ3JhbUhlaWdodD10aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdC5oZWlnaHQvMi41KX11cGRhdGVDaGFydElmVmlzaWJsZSgpe3RoaXMuZG9tVmlzaWJsZSYmKHRoaXMuc2NhbGVzPXRoaXMuY29tcHV0ZVNjYWxlcyh0aGlzLmRhdGEpLHRoaXMucmVuZGVyWEF4aXMoKSx0aGlzLnJlbmRlcllBeGlzKCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCkpfWNvbXB1dGVTY2FsZXModCl7Y29uc3R7d2lkdGg6ZSxoZWlnaHQ6bn09dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3Qse21pbjpvLG1heDppfT1uZ3QodCwodD0+KGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gdC5yZWR1Y2UoKCh0LGUpPT5NYXRoLm1pbih0LG4oZSkpKSwxLzApfSkodC5iaW5zLCh0PT50LngpKSksKHQ9PmVndCh0LmJpbnMsKCh7eDp0LGR4OmV9KT0+dCtlKSkpKSxhPWVndCh0LCh0PT5lZ3QodC5iaW5zLCgoe3k6dH0pPT50KSkpKSxyPWVldCgpLmRvbWFpbihbbyxpXSkubmljZSgpLHM9dGhpcy5tb2RlIT09cEUuT1ZFUkxBWSYmdGhpcy50aW1lUHJvcGVydHk9PWRFLldBTExfVElNRT9mb3QoKTplZXQoKSxsPXQubWFwKCh0PT50aGlzLmdldFRpbWVWYWx1ZSh0KSkpLHttaW46YyxtYXg6ZH09bmd0KGwsKHQ9PnQpKSxwPVtjLGRdO3MuZG9tYWluKHApO2NvbnN0IG09ZWV0KCk7bS5kb21haW4oWzAsYV0pO2NvbnN0IHU9UzcodGhpcy5jb2xvcnx8IiMwMDAiKSxmPWVldCgpO3JldHVybiBmLmRvbWFpbihwKSxyLnJhbmdlKFswLGVdKSxmLnJhbmdlKFt1LmJyaWdodGVyKCksdS5kYXJrZXIoKV0pLGYuaW50ZXJwb2xhdGUobTgpLHRoaXMubW9kZT09PXBFLk9WRVJMQVk/KHMucmFuZ2UoW24sbl0pLG0ucmFuZ2UoW24sMF0pKToocy5yYW5nZShbbi0odGhpcy5tb2RlPT09cEUuT0ZGU0VUP24tdGhpcy5sYXlvdXQuaGlzdG9ncmFtSGVpZ2h0OjApLG5dKSxtLnJhbmdlKFswLC10aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHRdKSkse2JpblNjYWxlOnIsZDNDb2xvclNjYWxlOmYsY291bnRTY2FsZTptLHRlbXBvcmFsU2NhbGU6c319cmVuZGVyWEF4aXMoKXtpZighdGhpcy5zY2FsZXMpcmV0dXJuO2NvbnN0e3dpZHRoOnR9PXRoaXMubGF5b3V0LmNvbnRlbnRDbGllbnRSZWN0LGU9ejUodGhpcy5zY2FsZXMuYmluU2NhbGUpLnRpY2tzKE1hdGgubWF4KDIsdC8yMCkpO2UudGlja0Zvcm1hdCh0aGlzLmZvcm1hdHRlcnMuYmluTnVtYmVyKSxlKEo0KHRoaXMueEF4aXMubmF0aXZlRWxlbWVudCkpfWdldFlBeGlzRm9ybWF0dGVyKCl7aWYodGhpcy5tb2RlPT09cEUuT1ZFUkxBWSlyZXR1cm4gdGhpcy5mb3JtYXR0ZXJzLmNvdW50O3N3aXRjaCh0aGlzLnRpbWVQcm9wZXJ0eSl7Y2FzZSBkRS5XQUxMX1RJTUU6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy53YWxsVGltZTtjYXNlIGRFLlNURVA6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy5zdGVwO2Nhc2UgZEUuUkVMQVRJVkU6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy5yZWxhdGl2ZTtkZWZhdWx0OnRocm93IFJhbmdlRXJyb3IoYFkgYXhpcyBmb3JtYXR0ZXIgZm9yICR7dGhpcy50aW1lUHJvcGVydHl9IG11c3QgYmUgaW1wbGVtZW50ZWRgKX19cmVuZGVyWUF4aXMoKXtpZighdGhpcy5zY2FsZXMpcmV0dXJuO2NvbnN0IHQ9dGhpcy5tb2RlPT09cEUuT1ZFUkxBWT90aGlzLnNjYWxlcy5jb3VudFNjYWxlOnRoaXMuc2NhbGVzLnRlbXBvcmFsU2NhbGUse2hlaWdodDplfT10aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdCxuPU41KHQpLnRpY2tzKE1hdGgubWF4KDIsZS8xNSkpO24udGlja0Zvcm1hdCh0aGlzLmdldFlBeGlzRm9ybWF0dGVyKCkpLG4oSjQodGhpcy55QXhpcy5uYXRpdmVFbGVtZW50KSl9ZmluZENsb3Nlc3REYXR1bUluZGV4KHQpe2xldCBlPXQudGFyZ2V0LG49ZTtmb3IoO2UmJmUhPT10aGlzLmhpc3RvZ3JhbXMubmF0aXZlRWxlbWVudDspbj1lLGU9ZS5wYXJlbnRFbGVtZW50O3JldHVybiBlP0FycmF5LmZyb20oZS5jaGlsZHJlbikuaW5kZXhPZihuKTotMX1vbk1vdXNlTW92ZUZvclRlc3RPbmx5KHQpe3JldHVybiB0aGlzLm9uTW91c2VNb3ZlKHQpfW9uTW91c2VNb3ZlKHQpe2lmKCF0aGlzLnNjYWxlcylyZXR1cm47Y29uc3QgZT10Lm9mZnNldFgsbj10Lm9mZnNldFksbz10aGlzLmZpbmRDbG9zZXN0RGF0dW1JbmRleCh0KTtpZihvPDApcmV0dXJuO2NvbnN0IGk9dGhpcy5zY2FsZXMuYmluU2NhbGUuaW52ZXJ0KGUpLGE9dGhpcy5kYXRhW29dLHI9dGhpcy5nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUoYSxpKTt0aGlzLnRvb2x0aXBEYXRhPXt2YWx1ZTp7cG9zaXRpb246e3g6ZSx5Om59LGxhYmVsOnRoaXMubW9kZT09PXBFLk9GRlNFVD90aGlzLmZvcm1hdHRlcnMuY291bnQoci55KTpgU3RlcDogJHt0aGlzLmZvcm1hdHRlcnMuc3RlcChhLnN0ZXApfWB9LHhBeGlzOntwb3NpdGlvbjp0aGlzLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChyKS54LGxhYmVsOnRoaXMuZm9ybWF0dGVycy5iaW5OdW1iZXIob2d0KHIpKX0seUF4aXM6e3Bvc2l0aW9uOnRoaXMuc2NhbGVzLmNvdW50U2NhbGUodGhpcy5tb2RlPT09cEUuT0ZGU0VUPzA6ci55KSxsYWJlbDp0aGlzLm1vZGU9PT1wRS5PRkZTRVQ/dGhpcy5nZXRZQXhpc0Zvcm1hdHRlcigpKHRoaXMuZ2V0VGltZVZhbHVlKGEpKTp0aGlzLmZvcm1hdHRlcnMuYmluTnVtYmVyKHIueSl9LHhQb3NpdGlvbkluQmluQ29vcmQ6aSxjbG9zZXN0RGF0dW06YSxjbG9zZXN0QmluOnJ9LHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpfX1mdW5jdGlvbiBlZ3QodCxlKXtyZXR1cm4gdC5yZWR1Y2UoKCh0LG4pPT5NYXRoLm1heCh0LGUobikpKSwtMS8wKX1mdW5jdGlvbiBuZ3QodCxlLG4pe258fChuPWUpO2xldCBvPTEvMCxpPS0xLzA7Zm9yKGNvbnN0IGEgb2YgdClvPU1hdGgubWluKG8sZShhKSksaT1NYXRoLm1heChpLG4oYSkpO3JldHVybnttaW46byxtYXg6aX19ZnVuY3Rpb24gb2d0KHQpe3JldHVybiB0LngrLjUqdC5keH1mdW5jdGlvbiBpZ3QodCxlKXsxJnQmJlRtKDAsInZpcy1zZWxlY3RlZC10aW1lLWNsaXBwZWQiKX1mdW5jdGlvbiBhZ3QodCxlKXsxJnQmJihSbSgwLCJzcGFuIiwxNCksVG0oMSwibWF0LXNwaW5uZXIiLDE1KSxBbSgpKX10Z3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHRndCkoU20oVWcpKX0sdGd0Lsm1Y21wPXRvKHt0eXBlOnRndCxzZWxlY3RvcnM6W1sidGItaGlzdG9ncmFtIl1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoUWgoTGZ0LDUpLFFoKEJmdCw1KSxRaChWZnQsNSksUWgoamZ0LDUpLFFoKFVmdCw1KSksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi5tYWluPXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLnhBeGlzPXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLnlBeGlzPXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLmNvbnRlbnQ9dC5maXJzdCksSmgodD10YigpKSYmKG4uaGlzdG9ncmFtcz10LmZpcnN0KX19LGlucHV0czp7bW9kZToibW9kZSIsdGltZVByb3BlcnR5OiJ0aW1lUHJvcGVydHkiLGNvbG9yOiJjb2xvciIsZGF0YToiZGF0YSIsbGlua2VkVGltZToibGlua2VkVGltZSJ9LGZlYXR1cmVzOltCb10sZGVjbHM6MjIsdmFyczoxNyxjb25zdHM6W1siZGV0ZWN0UmVzaXplIiwiIiwib2JzZXJ2ZUludGVyc2VjdGlvbiIsIiIsMywib25SZXNpemUiLCJvblZpc2liaWxpdHlDaGFuZ2UiXSxbIm1haW4iLCIiXSxbMSwiYXhpcyIsIngtYXhpcyJdLFsieEF4aXMiLCIiXSxbMSwidG9vbHRpcCJdLFszLCJ0cmFuc2Zvcm0iLDQsIm5nSWYiXSxbMSwiYXhpcyIsInktYXhpcyJdLFsieUF4aXMiLCIiXSxbNCwibmdJZiJdLFsxLCJjb250ZW50Il0sWyJjb250ZW50IiwiIl0sWzEsImdyaWQiXSxbMywidHJhbnNmb3JtIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImhpc3RvZ3JhbXMiLCIiXSxbMywidHJhbnNmb3JtIiwiaGlzdG9ncmFtIiwibm8tY29sb3IiLCJjb2xvciIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJjbGFzcyIsInRvb2x0aXAiLDQsIm5nSWYiXSxbMSwibGlua2VkLXRpbWUiXSxbMSwibGlua2VkLXRpbWUtZm9iIiwzLCJzdGVwIl0sWyJjbGFzcyIsImxpbmtlZC10aW1lIiwzLCJ0cmFuc2Zvcm0iLDQsIm5nSWYiXSxbIngyIiwiMTAwJSIsMSwidGljayJdLFsiY2xhc3MiLCJiYXNlbGluZSIsIngyIiwiMTAwJSIsNCwibmdJZiJdLFsiciIsIjIiLDMsInRyYW5zZm9ybSIsNCwibmdJZiJdLFsieDIiLCIxMDAlIiwxLCJiYXNlbGluZSJdLFsiciIsIjIiXSxbInIiLCIyIiw0LCJuZ0lmIl0sWzEsInZhbHVlLWxhYmVsIl0sWyJ4IiwiMyIsInkiLCItMyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiZGl2IiwwLDEpLFZtKCJvblJlc2l6ZSIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblJlc2l6ZSgpfSkpKCJvblZpc2liaWxpdHlDaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uVmlzaWJpbGl0eUNoYW5nZShlKX0pKSxxaSgpLFJtKDIsInN2ZyIsMiksVG0oMywiZyIsbnVsbCwzKSxSbSg1LCJnIiw0KSxRcCg2LEdmdCwzLDMsImciLDUpLEFtKCksQW0oKSxaaSgpLFJtKDcsImRpdiIsNikscWkoKSxSbSg4LCJzdmciKSxUbSg5LCJnIixudWxsLDcpLFJtKDExLCJnIiw0KSxRcCgxMixXZnQsMyw0LCJnIiw1KSxBbSgpLEFtKCksUXAoMTMscWZ0LDQsNCwibmctY29udGFpbmVyIiw4KSxBbSgpLFJtKDE0LCJzdmciLDksMTApLFJtKDE2LCJnIiwxMSksUXAoMTcsWmZ0LDIsMiwiZyIsMTIpLEFtKCksUm0oMTgsImciLG51bGwsMTMpLFFwKDIwLEpmdCw0LDExLCJnIiwxNCksQW0oKSxRcCgyMSwkZnQsNyw3LCJnIiwxNSksQW0oKSxBbSgpKSwyJmUmJihmdSgibWFpbiAiK24ubW9kZSsiICIrbi50aW1lUHJvcGVydHkpLHJjKDYpLERtKCJuZ0lmIixuLnRvb2x0aXBEYXRhKSxyYyg1KSxkdSgidHJhbnNmb3JtIixuLmdldENzc1RyYW5zbGF0ZVB4KDksMCkpLHJjKDEpLERtKCJuZ0lmIixuLnRvb2x0aXBEYXRhKSxyYygxKSxEbSgibmdJZiIsbi5pc0xpbmtlZFRpbWVFbmFibGVkKG4ubGlua2VkVGltZSkpLHJjKDQpLERtKCJuZ0Zvck9mIixuLmdldEdyaWRUaWNrWUxvY3MoKSkscmMoMSkscHUoImhpc3RvZ3JhbXMiLCEwKSgibGlua2VkLXRpbWUtZW5hYmxlZCIsbi5saW5rZWRUaW1lKSgibGlua2VkLXRpbWUtc2luZ2xlLXN0ZXAiLG4ubGlua2VkVGltZSYmIW4ubGlua2VkVGltZS5lbmRTdGVwKSxyYygyKSxEbSgibmdGb3JPZiIsbi5kYXRhKSgibmdGb3JUcmFja0J5IixuLnRyYWNrQnlXYWxsVGltZSkscmMoMSksRG0oIm5nSWYiLG4udG9vbHRpcERhdGEpKX0sZGlyZWN0aXZlczpbb0osTmZ0LGRNLGxNLGhmdF0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXSwgLm1haW5bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9W19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxMHB4fS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1hcmVhczoiY29udGVudCB5LWF4aXMiICJ4LWF4aXMgLiI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciA1MHB4O2dyaWQtdGVtcGxhdGUtcm93czoxZnIgMzBweH0ubWFpbi53YWxsX3RpbWVbX25nY29udGVudC0lQ09NUCVde2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgNzVweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0sIC5iYXNlbGluZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzAwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5iYXNlbGluZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5iYXNlbGluZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn0ubGlua2VkLXRpbWUtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkO2ZvbnQtc2l6ZToxMHB4fS5saW5rZWQtdGltZS1mb2JbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV0sIC5saW5rZWQtdGltZS1mb2JbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17ZmlsbDpjdXJyZW50Q29sb3J9LmxpbmtlZC10aW1lLWZvYltfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2RvbWluYW50LWJhc2VsaW5lOmlkZW9ncmFwaGljO3RleHQtYW5jaG9yOnN0YXJ0fS5saW5rZWQtdGltZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bGVmdDo5cHg7dG9wOjA7aGVpZ2h0OjEwMCU7cmlnaHQ6MH0ubGlua2VkLXRpbWVbX25nY29udGVudC0lQ09NUCVdICAgLmxpbmtlZC10aW1lLWZvYltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9LmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgIHtjb2xvcjojNjE2MTYxO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAge2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmRvbWFpbiwgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayB0ZXh0e2Rpc3BsYXk6bm9uZX0uYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrOm50aC1jaGlsZCgybisxKSB0ZXh0e2Rpc3BsYXk6aW5pdGlhbH1zdmdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6dmlzaWJsZVBhaW50ZWR9c3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmVbX25nY29udGVudC0lQ09NUCVdLCBzdmdbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSwgc3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lfXN2Z1tfbmdjb250ZW50LSVDT01QJV0gICBnW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOngtYXhpc30ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTpoYW5naW5nO3RleHQtYW5jaG9yOm1pZGRsZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6eS1heGlzOy13ZWJraXQtbWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjMDAwMCAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCAjMDAwMCAxMDAlKTttYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMwMDAwIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsICMwMDAwIDEwMCUpfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2RvbWluYW50LWJhc2VsaW5lOm1pZGRsZTt0ZXh0LWFuY2hvcjpzdGFydH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudGlja1tfbmdjb250ZW50LSVDT01QJV0sIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2sgbGluZXtzdHJva2U6I2RkZH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudGlja1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6IzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmUsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2sgbGluZXtzdHJva2U6IzU1NX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOmNvbnRlbnR9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVde3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWRhc2hhcnJheToyfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0sIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde2ZpbGw6Y3VycmVudENvbG9yO3N0cm9rZS1vcGFjaXR5Oi42O3N0cm9rZS13aWR0aDoxcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWx0ZXI6ZHJvcC1zaGFkb3coMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuNikpO3N0cm9rZTojZmZmO3dpbGwtY2hhbmdlOnRyYW5zZm9ybX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVde3N0cm9rZS1vcGFjaXR5Oi4xO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlOmN1cnJlbnRDb2xvcjt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlOmN1cnJlbnRDb2xvcjtmaWxsOnRyYW5zcGFyZW50fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyMjEsMjIxLDIyMSwuNCkgIWltcG9ydGFudH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tY29sb3JbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlLW9wYWNpdHk6LjJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDUxLDUxLDUxLC40KSAhaW1wb3J0YW50fS5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXNbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6IzU1NX0ub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zLmxpbmtlZC10aW1lLXNpbmdsZS1zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtfbmdjb250ZW50LSVDT01QJV06bm90KC5uby1jb2xvcikgICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6IzAwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zLmxpbmtlZC10aW1lLXNpbmdsZS1zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtfbmdjb250ZW50LSVDT01QJV06bm90KC5uby1jb2xvcikgICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtcy5saW5rZWQtdGltZS1zaW5nbGUtc3RlcFtfbmdjb250ZW50LSVDT01QJV0gICBbX25nY29udGVudC0lQ09NUCVdOm5vdCgubm8tY29sb3IpICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiNmZmZ9Lm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVdICAgLngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7ZGlzcGxheTpub25lfS5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde2ZpbGwtb3BhY2l0eTowO3N0cm9rZTpjdXJyZW50Q29sb3J9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0ubWFpbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAubWFpbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgodGd0LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InRiLWhpc3RvZ3JhbSIsdGVtcGxhdGVVcmw6Imhpc3RvZ3JhbV9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiaGlzdG9ncmFtX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6VWd9XX0pLHttYWluOlt7dHlwZTpaYSxhcmdzOlsibWFpbiJdfV0seEF4aXM6W3t0eXBlOlphLGFyZ3M6WyJ4QXhpcyJdfV0seUF4aXM6W3t0eXBlOlphLGFyZ3M6WyJ5QXhpcyJdfV0sY29udGVudDpbe3R5cGU6WmEsYXJnczpbImNvbnRlbnQiXX1dLGhpc3RvZ3JhbXM6W3t0eXBlOlphLGFyZ3M6WyJoaXN0b2dyYW1zIl19XSxtb2RlOlt7dHlwZTp4eX1dLHRpbWVQcm9wZXJ0eTpbe3R5cGU6eHl9XSxjb2xvcjpbe3R5cGU6eHl9XSxkYXRhOlt7dHlwZTp4eX1dLGxpbmtlZFRpbWU6W3t0eXBlOnh5fV19KTtjb25zdCByZ3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm57c3RhcnRTdGVwOnQsZW5kU3RlcDplfX07ZnVuY3Rpb24gc2d0KHQsZSl7aWYoMSZ0JiZUbSgwLCJ0Yi1oaXN0b2dyYW0iLDE2KSwyJnQpe2NvbnN0IHQ9WW0oKTtEbSgiZGF0YSIsdC5kYXRhKSgibW9kZSIsdC5tb2RlKSgidGltZVByb3BlcnR5Iix0LnRpbWVQcm9wZXJ0eSh0LnhBeGlzVHlwZSkpKCJjb2xvciIsdC5ydW5Db2xvclNjYWxlKHQucnVuSWQpKSgibGlua2VkVGltZSIsdC5zZWxlY3RlZFRpbWU/dmgoNSxyZ3QsdC5zZWxlY3RlZFRpbWUuc3RhcnRTdGVwLHQuc2VsZWN0ZWRUaW1lLmVuZFN0ZXApOm51bGwpfX1mdW5jdGlvbiBsZ3QodCxlKXsxJnQmJihSbSgwLCJkaXYiLDE4KSxrdSgxLCIgRGF0YSBmYWlsZWQgdG8gbG9hZC4gIiksQW0oKSl9ZnVuY3Rpb24gY2d0KHQsZSl7aWYoMSZ0JiZRcCgwLGxndCwyLDAsImRpdiIsMTcpLDImdCl7Y29uc3QgdD1ZbSgpO0RtKCJuZ0lmIix0LmxvYWRTdGF0ZT09PXQuRGF0YUxvYWRTdGF0ZS5GQUlMRUQpfX1jb25zdCBkZ3Q9ZnVuY3Rpb24odCl7cmV0dXJue2JhY2tncm91bmRDb2xvcjp0fX07Y2xhc3MgcGd0e2NvbnN0cnVjdG9yKCl7dGhpcy5EYXRhTG9hZFN0YXRlPXlFLHRoaXMub25GdWxsU2l6ZVRvZ2dsZT1uZXcgTGgsdGhpcy5vblBpbkNsaWNrZWQ9bmV3IExofXRpbWVQcm9wZXJ0eSh0KXtzd2l0Y2godCl7Y2FzZSB5QS5TVEVQOnJldHVybiBkRS5TVEVQO2Nhc2UgeUEuV0FMTF9USU1FOnJldHVybiBkRS5XQUxMX1RJTUU7Y2FzZSB5QS5SRUxBVElWRTpyZXR1cm4gZEUuUkVMQVRJVkU7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeEF4aXNUeXBlIGZvciBoaXN0b2dyYW0gdGltZSBwcm9wZXJ0eS4iKX19fXBndC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cGd0KX0scGd0Lsm1Y21wPXRvKHt0eXBlOnBndCxzZWxlY3RvcnM6W1siaGlzdG9ncmFtLWNhcmQtY29tcG9uZW50Il1dLGlucHV0czp7bG9hZFN0YXRlOiJsb2FkU3RhdGUiLHRpdGxlOiJ0aXRsZSIsdGFnOiJ0YWciLHJ1bklkOiJydW5JZCIsZGF0YToiZGF0YSIsbW9kZToibW9kZSIseEF4aXNUeXBlOiJ4QXhpc1R5cGUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUiLHNob3dGdWxsU2l6ZToic2hvd0Z1bGxTaXplIixpc1Bpbm5lZDoiaXNQaW5uZWQiLHNlbGVjdGVkVGltZToic2VsZWN0ZWRUaW1lIn0sb3V0cHV0czp7b25GdWxsU2l6ZVRvZ2dsZToib25GdWxsU2l6ZVRvZ2dsZSIsb25QaW5DbGlja2VkOiJvblBpbkNsaWNrZWQifSxkZWNsczoxNix2YXJzOjEzLGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIlBpbiBjYXJkIik6JGxvY2FsaXplYDpBIGJ1dHRvbiB0byBwaW4gYSBjYXJkLuKQn2U2NjVkYzcxMmJkNWYxOGQ0ZGZhM2EyOWUxMjVkNTY1Y2M1MWUyZjbikJ83Mjg0NjA2NDI2MjM0Mzc1MzQ0OlBpbiBjYXJkYCxlPSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJUb2dnbGUgZnVsbCBzaXplIG1vZGUiKTokbG9jYWxpemVgOkEgYnV0dG9uIG9uIGEgaGlzdG9ncmFtIGNhcmQgdGhhdCB0b2dnbGVzIGZ1bGwgc2l6ZSBtb2RlLuKQn2ZjOGY3NjdkMGI5ZjkzMDE4N2ExYmFlMzQ0NzdhZDI4NzM2ZWNlMzPikJ85MTU3MjE1NjM2Mzg5MjY1OTc6VG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlYCxbWzEsImhlYWRpbmciXSxbMSwidGFnIl0sWzMsInRpdGxlIiwidmFsdWUiXSxbNCwibmdJZiJdLFsxLCJydW4iXSxbMSwiZG90IiwzLCJuZ1N0eWxlIl0sWzEsInJ1bi10ZXh0IiwzLCJydW5JZCJdLFsxLCJjb250cm9scyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwxLCJwaW4tYnV0dG9uIiwzLCJjbGljayJdLFszLCJzdmdJY29uIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLCJ0aXRsZSIsIlRvZ2dsZSBmdWxsIHNpemUgbW9kZSIsMywiY2xpY2siXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFszLCJkYXRhIiwibW9kZSIsInRpbWVQcm9wZXJ0eSIsImNvbG9yIiwibGlua2VkVGltZSIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0RhdGEiLCIiXSxbMSwic3Bpbm5lciJdLFsiZGlhbWV0ZXIiLCIxOCJdLFszLCJkYXRhIiwibW9kZSIsInRpbWVQcm9wZXJ0eSIsImNvbG9yIiwibGlua2VkVGltZSJdLFsiY2xhc3MiLCJlbXB0eS1tZXNzYWdlIiw0LCJuZ0lmIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihSbSgwLCJkaXYiLDApLFJtKDEsImRpdiIsMSksVG0oMiwidGItdHJ1bmNhdGVkLXBhdGgiLDIpLFFwKDMsaWd0LDEsMCwidmlzLXNlbGVjdGVkLXRpbWUtY2xpcHBlZCIsMyksQW0oKSxSbSg0LCJkaXYiLDQpLFRtKDUsInNwYW4iLDUpLFRtKDYsImNhcmQtcnVuLW5hbWUiLDYpLEFtKCksUm0oNywic3BhbiIsNyksUm0oOCwiYnV0dG9uIiw4KSxWbSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25QaW5DbGlja2VkLmVtaXQoIW4uaXNQaW5uZWQpfSkpLFRtKDksIm1hdC1pY29uIiw5KSxBbSgpLFJtKDEwLCJidXR0b24iLDEwKSxWbSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25GdWxsU2l6ZVRvZ2dsZS5lbWl0KCl9KSksVG0oMTEsIm1hdC1pY29uIiw5KSxBbSgpLEFtKCksUXAoMTIsYWd0LDIsMCwic3BhbiIsMTEpLEFtKCksUXAoMTMsc2d0LDEsOCwidGItaGlzdG9ncmFtIiwxMiksUXAoMTQsY2d0LDEsMSwibmctdGVtcGxhdGUiLG51bGwsMTMsaWIpKSwyJmUpe2NvbnN0IHQ9JHAoMTUpO3JjKDIpLERtKCJ0aXRsZSIsbi50YWcpKCJ2YWx1ZSIsbi50aXRsZSkscmMoMSksRG0oIm5nSWYiLG4uc2VsZWN0ZWRUaW1lJiZuLnNlbGVjdGVkVGltZS5jbGlwcGVkKSxyYygyKSxEbSgibmdTdHlsZSIsTWgoMTEsZGd0LG4ucnVuQ29sb3JTY2FsZShuLnJ1bklkKSkpLHJjKDEpLERtKCJydW5JZCIsbi5ydW5JZCkscmMoMiksanAoInRpdGxlIixuLmlzUGlubmVkPyJVbnBpbiBjYXJkIjoiUGluIGNhcmQiKSxyYygxKSxEbSgic3ZnSWNvbiIsbi5pc1Bpbm5lZD8ia2VlcF8yNHB4Ijoia2VlcF9vdXRsaW5lXzI0cHgiKSxyYygyKSxEbSgic3ZnSWNvbiIsbi5zaG93RnVsbFNpemU/ImZ1bGxzY3JlZW5fZXhpdF8yNHB4IjoiZnVsbHNjcmVlbl8yNHB4IikscmMoMSksRG0oIm5nSWYiLG4ubG9hZFN0YXRlPT09bi5EYXRhTG9hZFN0YXRlLkxPQURJTkcpLHJjKDEpLERtKCJuZ0lmIixuLmRhdGEmJm4uZGF0YS5sZW5ndGgpKCJuZ0lmRWxzZSIsdCl9fSxkaXJlY3RpdmVzOlt6MixkTSxDTSxMMixYSCxEVyxnZnQsbzEsdGd0XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWFyZWFzOiJ0YWcgY29udHJvbHMiICJydW4gc3Bpbm5lciI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2ZvbnQtc2l6ZToxNHB4O21hcmdpbi1ib3R0b206NHB4fS50YWdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOjVweDtncmlkLWFyZWE6dGFnO292ZXJmbG93OmhpZGRlbn0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHZpcy1zZWxlY3RlZC10aW1lLWNsaXBwZWRbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjB9LnBpbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxOHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpydW47ZGlzcGxheTpmbGV4O3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXNpemU6MTNweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kb3RbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2JvcmRlci1yYWRpdXM6NTAlO21hcmdpbi1yaWdodDo0cHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV0gICAucnVuLXRleHRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO21heC13aWR0aDoxMjBweH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2dyaWQtYXJlYTpjb250cm9scztqdXN0aWZ5LXNlbGY6ZmxleC1lbmQ7ZmxleC1zaHJpbms6MDttYXJnaW4tcmlnaHQ6LTEycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2dyaWQtYXJlYTpzcGlubmVyO2hlaWdodDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9bWF0LXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3RvcDowO3JpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGV9dGItaGlzdG9ncmFtW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW59LmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MWVtO2ZvbnQtc2l6ZToxM3B4fSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChwZ3QsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoiaGlzdG9ncmFtLWNhcmQtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiaGlzdG9ncmFtX2NhcmRfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbImhpc3RvZ3JhbV9jYXJkX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSxudWxsLHtsb2FkU3RhdGU6W3t0eXBlOnh5fV0sdGl0bGU6W3t0eXBlOnh5fV0sdGFnOlt7dHlwZTp4eX1dLHJ1bklkOlt7dHlwZTp4eX1dLGRhdGE6W3t0eXBlOnh5fV0sbW9kZTpbe3R5cGU6eHl9XSx4QXhpc1R5cGU6W3t0eXBlOnh5fV0scnVuQ29sb3JTY2FsZTpbe3R5cGU6eHl9XSxzaG93RnVsbFNpemU6W3t0eXBlOnh5fV0saXNQaW5uZWQ6W3t0eXBlOnh5fV0sc2VsZWN0ZWRUaW1lOlt7dHlwZTp4eX1dLG9uRnVsbFNpemVUb2dnbGU6W3t0eXBlOk95fV0sb25QaW5DbGlja2VkOlt7dHlwZTpPeX1dfSk7Y2xhc3MgbWd0e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IExoLHRoaXMuZnVsbEhlaWdodENoYW5nZWQ9bmV3IExoLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBMaCx0aGlzLm1vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KE5UKSx0aGlzLnhBeGlzVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QoVFQpLHRoaXMuc2hvd0Z1bGxTaXplPSExfWlzSGlzdG9ncmFtQ2FyZE1ldGFkYXRhKHQpe2NvbnN0e3BsdWdpbjplfT10O3JldHVybiBlPT09aEEuSElTVE9HUkFNU31vbkZ1bGxTaXplVG9nZ2xlKCl7dGhpcy5zaG93RnVsbFNpemU9IXRoaXMuc2hvd0Z1bGxTaXplLHRoaXMuZnVsbFdpZHRoQ2hhbmdlZC5lbWl0KHRoaXMuc2hvd0Z1bGxTaXplKSx0aGlzLmZ1bGxIZWlnaHRDaGFuZ2VkLmVtaXQodGhpcy5zaG93RnVsbFNpemUpfW5nT25Jbml0KCl7Y29uc3QgdD10aGlzLnN0b3JlLnNlbGVjdCh5VCx0aGlzLmNhcmRJZCkucGlwZShjZSgodD0+ISF0JiZ0aGlzLmlzSGlzdG9ncmFtQ2FyZE1ldGFkYXRhKHQpKSksSXQoKHQ9PnQpKSksZT1XdChbdCx0aGlzLnN0b3JlLnNlbGVjdChoVCx0aGlzLmNhcmRJZCldKTt0aGlzLmRhdGEkPWUucGlwZShJdCgoKFt0LGVdKT0+e2NvbnN0IG49dC5ydW5JZDtyZXR1cm4gZSYmZS5oYXNPd25Qcm9wZXJ0eShuKT8oZnVuY3Rpb24gbyh0LGU9MzApe2lmKCF0Lmxlbmd0aHx8ZTwxKXJldHVybltdO2NvbnN0IG49KGZ1bmN0aW9uIG8odCl7bGV0IGU9bnVsbCxuPW51bGw7Zm9yKGNvbnN0e2JpbnM6b31vZiB0KXtpZighby5sZW5ndGgpY29udGludWU7Y29uc3QgdD1vW28ubGVuZ3RoLTFdLGk9b1swXS54LGE9dC54K3QuZHg7KG51bGw9PT1lfHxpPGUpJiYoZT1pKSwobnVsbD09PW58fGE+bikmJihuPWEpfXJldHVybiBudWxsPT09ZXx8bnVsbD09PW4/bnVsbDp7bGVmdDplLHJpZ2h0Om59fSkodCk7cmV0dXJuIG4mJm4ubGVmdD09PW4ucmlnaHQmJihuLnJpZ2h0PTEuMSpuLnJpZ2h0KzEsbi5sZWZ0PW4ubGVmdC8xLjEtMSksdC5tYXAoKHQ9Pih7c3RlcDp0LnN0ZXAsd2FsbFRpbWU6dC53YWxsVGltZSxiaW5zOm4/SGZ0KHQuYmlucyxuLGUpOltdfSkpKX0pKGVbbl0ubWFwKCh0PT57Y29uc3R7d2FsbFRpbWU6ZSxzdGVwOm59PXQ7cmV0dXJue3dhbGxUaW1lOmUsc3RlcDpuLGJpbnM6dC5iaW5zLm1hcCgodD0+KHt4OnQubWluLGR4OnQubWF4LXQubWluLHk6dC5jb3VudH0pKSl9fSkpKTpbXX0pKSksdGhpcy5zZWxlY3RlZFRpbWUkPXRoaXMuc3RvcmUuc2VsZWN0KFlUKS5waXBlKGZlKHRoaXMuZGF0YSQpLEl0KCgoW3QsZV0pPT57aWYoIXQpcmV0dXJuIG51bGw7bGV0IG49MS8wLG89LTEvMDtmb3IoY29uc3QgdCBvZiBlKW49TWF0aC5taW4odC5zdGVwLG4pLG89TWF0aC5tYXgodC5zdGVwLG8pO3JldHVybiBIMih0LG4sbyl9KSkpLHRoaXMubG9hZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdChnVCx0aGlzLmNhcmRJZCksdGhpcy50YWckPXQucGlwZShJdCgodD0+dC50YWcpKSksdGhpcy50aXRsZSQ9dGhpcy50YWckLnBpcGUoSXQoKHQ9PmYyKHQsdGhpcy5ncm91cE5hbWUpKSkpLHRoaXMucnVuSWQkPXQucGlwZShJdCgodD0+dC5ydW5JZCkpKSx0aGlzLmlzUGlubmVkJD10aGlzLnN0b3JlLnNlbGVjdCh3VCx0aGlzLmNhcmRJZCl9fWZ1bmN0aW9uIHVndCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsImltYWdlLWNhcmQiLDYpLFZtKCJmdWxsV2lkdGhDaGFuZ2VkIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oMikub25GdWxsV2lkdGhDaGFuZ2VkKG4pfSkpKCJwaW5TdGF0ZUNoYW5nZWQiLChmdW5jdGlvbiBlKCl7cmV0dXJuIGhpKHQpLFltKDIpLm9uUGluU3RhdGVDaGFuZ2VkKCl9KSksQW0oKX1pZigyJnQpe2NvbnN0IHQ9WW0oMik7RG0oImNhcmRJZCIsdC5jYXJkSWQpKCJncm91cE5hbWUiLHQuZ3JvdXBOYW1lKSgicnVuQ29sb3JTY2FsZSIsdC5ydW5Db2xvclNjYWxlKX19ZnVuY3Rpb24gZmd0KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwic2NhbGFyLWNhcmQiLDcpLFZtKCJmdWxsV2lkdGhDaGFuZ2VkIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oMikub25GdWxsV2lkdGhDaGFuZ2VkKG4pfSkpKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKDIpLm9uRnVsbEhlaWdodENoYW5nZWQobil9KSkoInBpblN0YXRlQ2hhbmdlZCIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaGkodCksWW0oMikub25QaW5TdGF0ZUNoYW5nZWQoKX0pKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgyKTtEbSgiY2FyZElkIix0LmNhcmRJZCkoImdyb3VwTmFtZSIsdC5ncm91cE5hbWUpfX1mdW5jdGlvbiBnZ3QodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJoaXN0b2dyYW0tY2FyZCIsOCksVm0oImZ1bGxXaWR0aENoYW5nZWQiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgyKS5vbkZ1bGxXaWR0aENoYW5nZWQobil9KSkoImZ1bGxIZWlnaHRDaGFuZ2VkIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oMikub25GdWxsSGVpZ2h0Q2hhbmdlZChuKX0pKSgicGluU3RhdGVDaGFuZ2VkIiwoZnVuY3Rpb24gZSgpe3JldHVybiBoaSh0KSxZbSgyKS5vblBpblN0YXRlQ2hhbmdlZCgpfSkpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PVltKDIpO0RtKCJjYXJkSWQiLHQuY2FyZElkKSgiZ3JvdXBOYW1lIix0Lmdyb3VwTmFtZSkoInJ1bkNvbG9yU2NhbGUiLHQucnVuQ29sb3JTY2FsZSl9fWZ1bmN0aW9uIGhndCh0LGUpe2lmKDEmdCYmKFJtKDAsImRpdiIpLGt1KDEpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgyKTtyYygxKSxEdSgiUGxhY2Vob2xkZXIgZXJyb3IgZm9yOiAiLHQuY2FyZElkLCIiKX19ZnVuY3Rpb24gYmd0KHQsZSl7aWYoMSZ0JiYoTm0oMCwxKSxRcCgxLHVndCwxLDMsImltYWdlLWNhcmQiLDIpLFFwKDIsZmd0LDEsMiwic2NhbGFyLWNhcmQiLDMpLFFwKDMsZ2d0LDEsMywiaGlzdG9ncmFtLWNhcmQiLDQpLFFwKDQsaGd0LDIsMSwiZGl2Iiw1KSx6bSgpKSwyJnQpe2NvbnN0IHQ9WW0oKTtEbSgibmdTd2l0Y2giLHQucGx1Z2luVHlwZSkscmMoMSksRG0oIm5nU3dpdGNoQ2FzZSIsdC5QbHVnaW5UeXBlLklNQUdFUykscmMoMSksRG0oIm5nU3dpdGNoQ2FzZSIsdC5QbHVnaW5UeXBlLlNDQUxBUlMpLHJjKDEpLERtKCJuZ1N3aXRjaENhc2UiLHQuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKX19bWd0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxtZ3QpKFNtKEl3KSl9LG1ndC7JtWNtcD10byh7dHlwZTptZ3Qsc2VsZWN0b3JzOltbImhpc3RvZ3JhbS1jYXJkIl1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIsZnVsbEhlaWdodENoYW5nZWQ6ImZ1bGxIZWlnaHRDaGFuZ2VkIixwaW5TdGF0ZUNoYW5nZWQ6InBpblN0YXRlQ2hhbmdlZCJ9LGRlY2xzOjEwLHZhcnM6MjksY29uc3RzOltbMywibG9hZFN0YXRlIiwidGl0bGUiLCJ0YWciLCJydW5JZCIsImRhdGEiLCJtb2RlIiwieEF4aXNUeXBlIiwicnVuQ29sb3JTY2FsZSIsInNob3dGdWxsU2l6ZSIsImlzUGlubmVkIiwic2VsZWN0ZWRUaW1lIiwib25GdWxsU2l6ZVRvZ2dsZSIsIm9uUGluQ2xpY2tlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiaGlzdG9ncmFtLWNhcmQtY29tcG9uZW50IiwwKSxWbSgib25GdWxsU2l6ZVRvZ2dsZSIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkZ1bGxTaXplVG9nZ2xlKCl9KSkoIm9uUGluQ2xpY2tlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ucGluU3RhdGVDaGFuZ2VkLmVtaXQoZSl9KSksQWgoMSwiYXN5bmMiKSxBaCgyLCJhc3luYyIpLEFoKDMsImFzeW5jIiksQWgoNCwiYXN5bmMiKSxBaCg1LCJhc3luYyIpLEFoKDYsImFzeW5jIiksQWgoNywiYXN5bmMiKSxBaCg4LCJhc3luYyIpLEFoKDksImFzeW5jIiksQW0oKSksMiZlJiZEbSgibG9hZFN0YXRlIixUaCgxLDExLG4ubG9hZFN0YXRlJCkpKCJ0aXRsZSIsVGgoMiwxMyxuLnRpdGxlJCkpKCJ0YWciLFRoKDMsMTUsbi50YWckKSkoInJ1bklkIixUaCg0LDE3LG4ucnVuSWQkKSkoImRhdGEiLFRoKDUsMTksbi5kYXRhJCkpKCJtb2RlIixUaCg2LDIxLG4ubW9kZSQpKSgieEF4aXNUeXBlIixUaCg3LDIzLG4ueEF4aXNUeXBlJCkpKCJydW5Db2xvclNjYWxlIixuLnJ1bkNvbG9yU2NhbGUpKCJzaG93RnVsbFNpemUiLG4uc2hvd0Z1bGxTaXplKSgiaXNQaW5uZWQiLFRoKDgsMjUsbi5pc1Bpbm5lZCQpKSgic2VsZWN0ZWRUaW1lIixUaCg5LDI3LG4uc2VsZWN0ZWRUaW1lJCkpfSxkaXJlY3RpdmVzOltwZ3RdLHBpcGVzOlt3TV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKG1ndCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJoaXN0b2dyYW0tY2FyZCIsdGVtcGxhdGU6J1xuICAgIDxoaXN0b2dyYW0tY2FyZC1jb21wb25lbnRcbiAgICAgIFtsb2FkU3RhdGVdPSJsb2FkU3RhdGUkIHwgYXN5bmMiXG4gICAgICBbdGl0bGVdPSJ0aXRsZSQgfCBhc3luYyJcbiAgICAgIFt0YWddPSJ0YWckIHwgYXN5bmMiXG4gICAgICBbcnVuSWRdPSJydW5JZCQgfCBhc3luYyJcbiAgICAgIFtkYXRhXT0iZGF0YSQgfCBhc3luYyJcbiAgICAgIFttb2RlXT0ibW9kZSQgfCBhc3luYyJcbiAgICAgIFt4QXhpc1R5cGVdPSJ4QXhpc1R5cGUkIHwgYXN5bmMiXG4gICAgICBbcnVuQ29sb3JTY2FsZV09InJ1bkNvbG9yU2NhbGUiXG4gICAgICBbc2hvd0Z1bGxTaXplXT0ic2hvd0Z1bGxTaXplIlxuICAgICAgW2lzUGlubmVkXT0iaXNQaW5uZWQkIHwgYXN5bmMiXG4gICAgICBbc2VsZWN0ZWRUaW1lXT0ic2VsZWN0ZWRUaW1lJCB8IGFzeW5jIlxuICAgICAgKG9uRnVsbFNpemVUb2dnbGUpPSJvbkZ1bGxTaXplVG9nZ2xlKCkiXG4gICAgICAob25QaW5DbGlja2VkKT0icGluU3RhdGVDaGFuZ2VkLmVtaXQoJGV2ZW50KSJcbiAgICA+PC9oaXN0b2dyYW0tY2FyZC1jb21wb25lbnQ+XG4gICcsc3R5bGVzOlsiXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9XG4gICAgIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fV19KSx7Y2FyZElkOlt7dHlwZTp4eX1dLGdyb3VwTmFtZTpbe3R5cGU6eHl9XSxydW5Db2xvclNjYWxlOlt7dHlwZTp4eX1dLGZ1bGxXaWR0aENoYW5nZWQ6W3t0eXBlOk95fV0sZnVsbEhlaWdodENoYW5nZWQ6W3t0eXBlOk95fV0scGluU3RhdGVDaGFuZ2VkOlt7dHlwZTpPeX1dfSk7Y2xhc3MgeWd0e2NvbnN0cnVjdG9yKCl7dGhpcy5QbHVnaW5UeXBlPWhBLHRoaXMuZnVsbFdpZHRoQ2hhbmdlZD1uZXcgTGgsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgTGgsdGhpcy5waW5TdGF0ZUNoYW5nZWQ9bmV3IExofW9uRnVsbFdpZHRoQ2hhbmdlZCh0KXt0aGlzLmZ1bGxXaWR0aENoYW5nZWQuZW1pdCh0KX1vbkZ1bGxIZWlnaHRDaGFuZ2VkKHQpe3RoaXMuZnVsbEhlaWdodENoYW5nZWQuZW1pdCh0KX1vblBpblN0YXRlQ2hhbmdlZCgpe3RoaXMucGluU3RhdGVDaGFuZ2VkLmVtaXQoKX19eWd0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx5Z3QpfSx5Z3QuybVjbXA9dG8oe3R5cGU6eWd0LHNlbGVjdG9yczpbWyJjYXJkLXZpZXctY29tcG9uZW50Il1dLGlucHV0czp7aXNFdmVyVmlzaWJsZToiaXNFdmVyVmlzaWJsZSIsY2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixwbHVnaW5UeXBlOiJwbHVnaW5UeXBlIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIsZnVsbEhlaWdodENoYW5nZWQ6ImZ1bGxIZWlnaHRDaGFuZ2VkIixwaW5TdGF0ZUNoYW5nZWQ6InBpblN0YXRlQ2hhbmdlZCJ9LGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWzMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwicGluU3RhdGVDaGFuZ2VkIiw0LCJuZ1N3aXRjaENhc2UiXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwiZnVsbFdpZHRoQ2hhbmdlZCIsImZ1bGxIZWlnaHRDaGFuZ2VkIiwicGluU3RhdGVDaGFuZ2VkIiw0LCJuZ1N3aXRjaENhc2UiXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicnVuQ29sb3JTY2FsZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJmdWxsSGVpZ2h0Q2hhbmdlZCIsInBpblN0YXRlQ2hhbmdlZCIsNCwibmdTd2l0Y2hDYXNlIl0sWzQsIm5nU3dpdGNoRGVmYXVsdCJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwiZnVsbFdpZHRoQ2hhbmdlZCIsInBpblN0YXRlQ2hhbmdlZCJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicnVuQ29sb3JTY2FsZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJmdWxsSGVpZ2h0Q2hhbmdlZCIsInBpblN0YXRlQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZRcCgwLGJndCw1LDQsIm5nLWNvbnRhaW5lciIsMCksMiZlJiZEbSgibmdJZiIsbi5pc0V2ZXJWaXNpYmxlKX0sZGlyZWN0aXZlczpbZE0sZk0sZ00saE0sWDIsSWZ0LG1ndF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh5Z3QsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoiY2FyZC12aWV3LWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6ImNhcmRfdmlld19jb21wb25lbnQubmcuaHRtbCIsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sbnVsbCx7aXNFdmVyVmlzaWJsZTpbe3R5cGU6eHl9XSxjYXJkSWQ6W3t0eXBlOnh5fV0sZ3JvdXBOYW1lOlt7dHlwZTp4eX1dLHBsdWdpblR5cGU6W3t0eXBlOnh5fV0scnVuQ29sb3JTY2FsZTpbe3R5cGU6eHl9XSxmdWxsV2lkdGhDaGFuZ2VkOlt7dHlwZTpPeX1dLGZ1bGxIZWlnaHRDaGFuZ2VkOlt7dHlwZTpPeX1dLHBpblN0YXRlQ2hhbmdlZDpbe3R5cGU6T3l9XX0pO2NsYXNzIF9ndHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5pc0V2ZXJWaXNpYmxlPSExLHRoaXMuc2hvd0Z1bGxXaWR0aD0hMSx0aGlzLnNob3dGdWxsSGVpZ2h0PSExLHRoaXMucnVuQ29sb3JTY2FsZSQ9dGhpcy5zdG9yZS5zZWxlY3Qoek4pLnBpcGUoQmUoMzUwLHZvaWQgMCx7bGVhZGluZzohMCx0cmFpbGluZzohMH0pLEl0KCh0PT5lPT50Lmhhc093blByb3BlcnR5KGUpP3RbZV06IiNmZmYiKSkpfW9uVmlzaWJpbGl0eUNoYW5nZSh7dmlzaWJsZTp0fSl7dGhpcy5pc0V2ZXJWaXNpYmxlPXRoaXMuaXNFdmVyVmlzaWJsZXx8dH1vbkZ1bGxXaWR0aENoYW5nZWQodCl7dGhpcy5zaG93RnVsbFdpZHRoPXR9b25GdWxsSGVpZ2h0Q2hhbmdlZCh0KXt0aGlzLnNob3dGdWxsSGVpZ2h0PXR9b25QaW5TdGF0ZUNoYW5nZWQoKXt0aGlzLnN0b3JlLnNlbGVjdCh3VCx0aGlzLmNhcmRJZCkucGlwZShiZSgxKSxWZSh0aGlzLnN0b3JlLnNlbGVjdChTVCkpKS5zdWJzY3JpYmUoKChbdCxlXSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKG9SKHtjYXJkSWQ6dGhpcy5jYXJkSWQsY2FuQ3JlYXRlTmV3UGluczplLHdhc1Bpbm5lZDp0fSkpfSkpfX1mdW5jdGlvbiBDZ3QodCxlKXsxJnQmJkltKDApfWZ1bmN0aW9uIE1ndCh0LGUpe2lmKDEmdCYmVG0oMCwiY2FyZC12aWV3Iiw0KSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1ZbSgpO0RtKCJjYXJkSWQiLHQuY2FyZElkKSgiZ3JvdXBOYW1lIixuLmdyb3VwTmFtZSkoInBsdWdpblR5cGUiLHQucGx1Z2luKSgiY2FyZE9ic2VydmVyIixuLmNhcmRPYnNlcnZlcikoImNhcmRMYXp5TG9hZGVyIix0LmNhcmRJZCl9fWZ1bmN0aW9uIHZndCh0LGUpezEmdCYmSW0oMCl9ZnVuY3Rpb24geGd0KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiYnV0dG9uIiwxMyksVm0oImNsaWNrIiwoZnVuY3Rpb24gZShuKXtoaSh0KTtjb25zdCBvPVltKDMpO3JldHVybiBvLmhhbmRsZVBhZ2VDaGFuZ2Uoby5wYWdlSW5kZXgtMSxuLnRhcmdldCl9KSksa3UoMSwiIFByZXZpb3VzICIpLEFtKCl9MiZ0JiZEbSgiZGlzYWJsZWQiLDA9PT1ZbSgzKS5wYWdlSW5kZXgpfWZ1bmN0aW9uIE9ndCh0LGUpezEmdCYmVG0oMCwibWF0LWljb24iLDE3KX1mdW5jdGlvbiBQZ3QodCxlKXsxJnQmJlRtKDAsIm1hdC1pY29uIiwxOCl9ZnVuY3Rpb24gd2d0KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiYnV0dG9uIiwxNCksVm0oImNsaWNrIiwoZnVuY3Rpb24gZSgpe3JldHVybiBoaSh0KSxZbSgzKS5ncm91cEV4cGFuc2lvblRvZ2dsZWQuZW1pdCgpfSkpLFFwKDEsT2d0LDEsMCwibWF0LWljb24iLDE1KSxRcCgyLFBndCwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDE2LGliKSxBbSgpfWlmKDImdCl7Y29uc3QgdD0kcCgzKSxlPVltKDMpO3JjKDEpLERtKCJuZ0lmIixlLmlzR3JvdXBFeHBhbmRlZCkoIm5nSWZFbHNlIix0KX19ZnVuY3Rpb24ga2d0KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwic3BhbiIsMjEpLFJtKDEsImlucHV0IiwyMiksVm0oImlucHV0IiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oNCkub25QYWdpbmF0aW9uSW5wdXRDaGFuZ2Uobil9KSkoImNoYW5nZSIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKDQpLm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlKG4pfSkpLEFtKCksa3UoMiksQW0oKX1pZigyJnQpe2NvbnN0IHQ9WW0oNCk7cmMoMSksRG0oInZhbHVlIix0LnBhZ2VJbmRleCsxKSgibWF4Iix0Lm51bVBhZ2VzKSxyYygxKSxEdSgiIG9mICIsdC5udW1QYWdlcywiIil9fWZ1bmN0aW9uIFNndCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsInNwYW4iKSxRcCgxLGtndCwzLDMsInNwYW4iLDE5KSxSbSgyLCJidXR0b24iLDIwKSxWbSgiY2xpY2siLChmdW5jdGlvbiBlKG4pe2hpKHQpO2NvbnN0IG89WW0oMyk7cmV0dXJuIG8uaGFuZGxlUGFnZUNoYW5nZShvLnBhZ2VJbmRleCsxLG4udGFyZ2V0KX0pKSxrdSgzLCIgTmV4dCAiKSxBbSgpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PVltKDIpLmlzQm90dG9tQ29udHJvbCxlPVltKCk7cmMoMSksRG0oIm5nSWYiLGUuc2hvd1BhZ2luYXRpb25JbnB1dCh0KSkscmMoMSksRG0oImRpc2FibGVkIixlLnBhZ2VJbmRleCsxPj1lLm51bVBhZ2VzKX19ZnVuY3Rpb24gRGd0KHQsZSl7aWYoMSZ0JiYoUm0oMCwiZGl2Iiw2KSxSbSgxLCJzcGFuIiw3KSxRcCgyLHhndCwyLDEsImJ1dHRvbiIsOCksQW0oKSxSbSgzLCJzcGFuIiw5KSxRcCg0LHdndCw0LDIsImJ1dHRvbiIsMTApLEFtKCksUm0oNSwic3BhbiIsMTEpLFFwKDYsU2d0LDQsMiwic3BhbiIsMTIpLEFtKCksQW0oKSksMiZ0KXtjb25zdCB0PVltKCkuaXNCb3R0b21Db250cm9sLGU9WW0oKTtyYygyKSxEbSgibmdJZiIsZS5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKSxyYygyKSxEbSgibmdJZiIsZS5zaG93RXhwYW5kKHQpKSxyYygyKSxEbSgibmdJZiIsZS5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKX19ZnVuY3Rpb24gRWd0KHQsZSl7aWYoMSZ0JiZRcCgwLERndCw3LDMsImRpdiIsNSksMiZ0KXtjb25zdCB0PWUuaXNCb3R0b21Db250cm9sLG49WW0oKTtEbSgibmdJZiIsbi5zaG93UGFnaW5hdGlvbkNvbnRyb2xzfHxuLnNob3dFeHBhbmQodCkpfX1fZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fF9ndCkoU20oSXcpKX0sX2d0Lsm1Y21wPXRvKHt0eXBlOl9ndCxzZWxlY3RvcnM6W1siY2FyZC12aWV3Il1dLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJnB1KCJmdWxsLXdpZHRoIixuLnNob3dGdWxsV2lkdGgpKCJmdWxsLWhlaWdodCIsbi5zaG93RnVsbEhlaWdodCl9LGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixwbHVnaW5UeXBlOiJwbHVnaW5UeXBlIn0sZGVjbHM6Mix2YXJzOjcsY29uc3RzOltbIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiLCJpbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbiIsIjIwMHB4IDIwMHB4IDIwMHB4IDIwMHB4IiwzLCJpc0V2ZXJWaXNpYmxlIiwiY2FyZElkIiwiZ3JvdXBOYW1lIiwicGx1Z2luVHlwZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLCJvblZpc2liaWxpdHlDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsImNhcmQtdmlldy1jb21wb25lbnQiLDApLFZtKCJmdWxsV2lkdGhDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkZ1bGxXaWR0aENoYW5nZWQoZSl9KSkoImZ1bGxIZWlnaHRDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkZ1bGxIZWlnaHRDaGFuZ2VkKGUpfSkpKCJwaW5TdGF0ZUNoYW5nZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25QaW5TdGF0ZUNoYW5nZWQoKX0pKSgib25WaXNpYmlsaXR5Q2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblZpc2liaWxpdHlDaGFuZ2UoZSl9KSksQWgoMSwiYXN5bmMiKSxBbSgpKSwyJmUmJkRtKCJpc0V2ZXJWaXNpYmxlIixuLmlzRXZlclZpc2libGUpKCJjYXJkSWQiLG4uY2FyZElkKSgiZ3JvdXBOYW1lIixuLmdyb3VwTmFtZSkoInBsdWdpblR5cGUiLG4ucGx1Z2luVHlwZSkoInJ1bkNvbG9yU2NhbGUiLFRoKDEsNSxuLnJ1bkNvbG9yU2NhbGUkKSl9LGRpcmVjdGl2ZXM6W3lndCxOZnRdLHBpcGVzOlt3TV0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoX2d0LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6ImNhcmQtdmlldyIsdGVtcGxhdGU6J1xuICAgIDxjYXJkLXZpZXctY29tcG9uZW50XG4gICAgICBbaXNFdmVyVmlzaWJsZV09ImlzRXZlclZpc2libGUiXG4gICAgICBbY2FyZElkXT0iY2FyZElkIlxuICAgICAgW2dyb3VwTmFtZV09Imdyb3VwTmFtZSJcbiAgICAgIFtwbHVnaW5UeXBlXT0icGx1Z2luVHlwZSJcbiAgICAgIFtydW5Db2xvclNjYWxlXT0icnVuQ29sb3JTY2FsZSQgfCBhc3luYyJcbiAgICAgIChmdWxsV2lkdGhDaGFuZ2VkKT0ib25GdWxsV2lkdGhDaGFuZ2VkKCRldmVudCkiXG4gICAgICAoZnVsbEhlaWdodENoYW5nZWQpPSJvbkZ1bGxIZWlnaHRDaGFuZ2VkKCRldmVudCkiXG4gICAgICAocGluU3RhdGVDaGFuZ2VkKT0ib25QaW5TdGF0ZUNoYW5nZWQoKSJcbiAgICAgIG9ic2VydmVJbnRlcnNlY3Rpb25cbiAgICAgIGludGVyc2VjdGlvbk9ic2VydmVyTWFyZ2luPSIyMDBweCAyMDBweCAyMDBweCAyMDBweCJcbiAgICAgIChvblZpc2liaWxpdHlDaGFuZ2UpPSJvblZpc2liaWxpdHlDaGFuZ2UoJGV2ZW50KSJcbiAgICA+XG4gICAgPC9jYXJkLXZpZXctY29tcG9uZW50PlxuICAnLHN0eWxlVXJsczpbImNhcmRfdmlld19jb250YWluZXIuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fV19KSx7Y2FyZElkOlt7dHlwZTp4eX1dLGdyb3VwTmFtZTpbe3R5cGU6eHl9XSxwbHVnaW5UeXBlOlt7dHlwZTp4eX1dLHNob3dGdWxsV2lkdGg6W3t0eXBlOlB5LGFyZ3M6WyJjbGFzcy5mdWxsLXdpZHRoIl19XSxzaG93RnVsbEhlaWdodDpbe3R5cGU6UHksYXJnczpbImNsYXNzLmZ1bGwtaGVpZ2h0Il19XX0pO2NvbnN0IFJndD1mdW5jdGlvbigpe3JldHVybntpc0JvdHRvbUNvbnRyb2w6ITF9fSxBZ3Q9ZnVuY3Rpb24oKXtyZXR1cm57aXNCb3R0b21Db250cm9sOiEwfX07Y2xhc3MgVGd0e2NvbnN0cnVjdG9yKHQpe3RoaXMuY2RrU2Nyb2xsYWJsZT10LHRoaXMuUGx1Z2luVHlwZT1oQSx0aGlzLnBhZ2VJbmRleENoYW5nZWQ9bmV3IExoLHRoaXMuZ3JvdXBFeHBhbnNpb25Ub2dnbGVkPW5ldyBMaH1zaG93RXhwYW5kKHQpe3JldHVybiEhdCYmdGhpcy5pc0dyb3VwRXhwYW5kYWJsZX1zaG93UGFnaW5hdGlvbklucHV0KHQpe3JldHVybiB0fWhhbmRsZVBhZ2VDaGFuZ2UodCxlKXtjb25zdCBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO3NldFRpbWVvdXQoKCgpPT57dGhpcy5zY3JvbGxUb0tlZXBUYXJnZXRQb3NpdGlvbihlLG4pfSksMCksdGhpcy5wYWdlSW5kZXhDaGFuZ2VkLmVtaXQodCl9c2Nyb2xsVG9LZWVwVGFyZ2V0UG9zaXRpb24odCxlKXt2YXIgbjtjb25zdCBvPW51bGw9PT0obj10aGlzLmNka1Njcm9sbGFibGUpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O28mJm8uc2Nyb2xsVG8oMCx0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1lK28uc2Nyb2xsVG9wKX10cmFja0J5Q2FyZHModCxlKXtyZXR1cm4gZS5jYXJkSWR9b25QYWdpbmF0aW9uSW5wdXRDaGFuZ2UodCl7Y29uc3QgZT10LnRhcmdldDtpZigiaW5wdXQiPT09dC50eXBlJiYiIj09PWUudmFsdWUpcmV0dXJuO2NvbnN0IG49TnVtYmVyKGUudmFsdWUpLTEsbz1NYXRoLm1pbihNYXRoLm1heCgwLG4pLHRoaXMubnVtUGFnZXMtMSk7ZS52YWx1ZSE9PVN0cmluZyhvKzEpJiYoZS52YWx1ZT1TdHJpbmcobysxKSksdGhpcy5oYW5kbGVQYWdlQ2hhbmdlKG8sZSl9fVRndC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VGd0KShTbShtRiw4KSl9LFRndC7JtWNtcD10byh7dHlwZTpUZ3Qsc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncmlkLWNvbXBvbmVudCJdXSxpbnB1dHM6e2lzR3JvdXBFeHBhbmRhYmxlOiJpc0dyb3VwRXhwYW5kYWJsZSIsaXNHcm91cEV4cGFuZGVkOiJpc0dyb3VwRXhwYW5kZWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixwYWdlSW5kZXg6InBhZ2VJbmRleCIsbnVtUGFnZXM6Im51bVBhZ2VzIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIixjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciIsc2hvd1BhZ2luYXRpb25Db250cm9sczoic2hvd1BhZ2luYXRpb25Db250cm9scyJ9LG91dHB1dHM6e3BhZ2VJbmRleENoYW5nZWQ6InBhZ2VJbmRleENoYW5nZWQiLGdyb3VwRXhwYW5zaW9uVG9nZ2xlZDoiZ3JvdXBFeHBhbnNpb25Ub2dnbGVkIn0sZGVjbHM6Nix2YXJzOjgsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZSxuO3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJQcmV2aW91cyBwYWdlIik6JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHNldHMgYSBncm91cCB0byB0aGUgcHJldmlvdXMgcGFnZS7ikJ81NzVlNzgyZmQyN2YyZWU3MGEwMzRhNzc1ZWZlOWFkMTYyNDcyMjUw4pCfMzYyOTk2MDU0NDg3NTM2MDA0NjpQcmV2aW91cyBwYWdlYCxlPSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJFeHBhbmQgZ3JvdXAiKTokbG9jYWxpemVgOkEgYnV0dG9uIHRoYXQgYWxsb3dzIHVzZXIgdG8gZXhwYW5kIGEgdGFnIGdyb3VwLuKQn2ZmYWExMTQ3MWI4NzhhNmRmZmUyZTY4YzZmMzcwNjRhOWUwNzQ4NTPikJ81Mzg2MDU0MzI1Mjc0Nzc5MjU4OkV4cGFuZCBncm91cGAsbj0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiTmV4dCBwYWdlIik6JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHNldHMgYSBncm91cCB0byB0aGUgbmV4dCBwYWdlLuKQn2NlM2NlZmIxY2QwMDk5YWE1MDAzZGRhMTZlYzllYjIxZmQ4YmE3ODnikJ8zMzM3MzAxNjk0MjEwMjg3NTk1Ok5leHQgcGFnZWAsW1s0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiY2FyZC1ncmlkIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInBsdWdpblR5cGUiLCJjYXJkT2JzZXJ2ZXIiLCJjYXJkTGF6eUxvYWRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJncm91cENvbnRyb2xzIiwiIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInBsdWdpblR5cGUiLCJjYXJkT2JzZXJ2ZXIiLCJjYXJkTGF6eUxvYWRlciJdLFsiY2xhc3MiLCJncm91cC1jb250cm9scyIsNCwibmdJZiJdLFsxLCJncm91cC1jb250cm9scyJdLFsxLCJwcmV2LWNvbnRhaW5lciJdLFsiY2xhc3MiLCJwcmV2IHBhZ2luYXRpb24tYnV0dG9uIiwibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJleHBhbmQtY29udGFpbmVyIl0sWyJjbGFzcyIsImV4cGFuZC1ncm91cC1idXR0b24iLCJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImlucHV0LWFuZC1uZXh0LWNvbnRhaW5lciJdLFs0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwxLCJwcmV2IiwicGFnaW5hdGlvbi1idXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsMSwiZXhwYW5kLWdyb3VwLWJ1dHRvbiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJleHBhbmRfbGVzc18yNHB4Iiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImV4cGFuZE1vcmUiLCIiXSxbInN2Z0ljb24iLCJleHBhbmRfbGVzc18yNHB4Il0sWyJzdmdJY29uIiwiZXhwYW5kX21vcmVfMjRweCJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWlucHV0Iiw0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsbiwxLCJuZXh0IiwicGFnaW5hdGlvbi1idXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMSwicGFnaW5hdGlvbi1pbnB1dCJdLFsidHlwZSIsIm51bWJlciIsIm1pbiIsIjEiLDMsInZhbHVlIiwibWF4IiwiaW5wdXQiLCJjaGFuZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihRcCgwLENndCwxLDAsIm5nLWNvbnRhaW5lciIsMCksUm0oMSwiZGl2IiwxKSxRcCgyLE1ndCwxLDUsImNhcmQtdmlldyIsMiksQW0oKSxRcCgzLHZndCwxLDAsIm5nLWNvbnRhaW5lciIsMCksUXAoNCxFZ3QsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwzLGliKSksMiZlKXtjb25zdCB0PSRwKDUpO0RtKCJuZ1RlbXBsYXRlT3V0bGV0Iix0KSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLENoKDYsUmd0KSkscmMoMiksRG0oIm5nRm9yT2YiLG4uY2FyZElkc1dpdGhNZXRhZGF0YSkoIm5nRm9yVHJhY2tCeSIsbi50cmFja0J5Q2FyZHMpLHJjKDEpLERtKCJuZ1RlbXBsYXRlT3V0bGV0Iix0KSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLENoKDcsQWd0KSl9fSxkaXJlY3RpdmVzOltNTSxsTSxfZ3QsbTIsZE0sWEgsRFddLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17Y29udGFpbjpjb250ZW50fS5jYXJkLWdyaWRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDMzNXB4LCBhdXRvKSk7Z2FwOjE2cHg7cGFkZGluZzoxNnB4fWNhcmQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb250YWluOnN0cmljdDtoZWlnaHQ6MTAwJTttaW4taGVpZ2h0OjMyMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIGNhcmQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIGNhcmQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWNhcmQtdmlldy5mdWxsLXdpZHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmxheW91dCBwYWludDtncmlkLWNvbHVtbi1zdGFydDoxO2dyaWQtY29sdW1uLWVuZDotMX1jYXJkLXZpZXcuZnVsbC1oZWlnaHRbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6NDgwcHh9Lmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2Rpc3BsYXk6Z3JpZDthbGlnbi1pdGVtczpjZW50ZXI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnIgMWZyO2dhcDoxNnB4O3BhZGRpbmc6MCAxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Lmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1vZi10eXBle3BhZGRpbmctdG9wOjE2cHh9Lmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LW9mLXR5cGV7cGFkZGluZy1ib3R0b206MTZweH0ucHJldi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktc2VsZjpmbGV4LXN0YXJ0fS5leHBhbmQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtqdXN0aWZ5LXNlbGY6Y2VudGVyfS5pbnB1dC1hbmQtbmV4dC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktc2VsZjpmbGV4LWVuZH0ucGFnaW5hdGlvbi1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjE2cHh9LnBhZ2luYXRpb24taW5wdXRbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXR9LmV4cGFuZC1ncm91cC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAucGFnaW5hdGlvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtZ3JvdXAtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4cGFuZC1ncm91cC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5wYWdpbmF0aW9uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5wYWdpbmF0aW9uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmV4cGFuZC1ncm91cC1idXR0b25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVkLCAucGFnaW5hdGlvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVke2NvbG9yOiM3NTc1NzV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmV4cGFuZC1ncm91cC1idXR0b25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVkLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06ZGlzYWJsZWR7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAucGFnaW5hdGlvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVkLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucGFnaW5hdGlvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVke2NvbG9yOiM2MTYxNjF9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFRndCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL2NhcmRfZ3JpZF9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9jYXJkX2dyaWRfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTptRixkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfV19KSx7aXNHcm91cEV4cGFuZGFibGU6W3t0eXBlOnh5fV0saXNHcm91cEV4cGFuZGVkOlt7dHlwZTp4eX1dLGdyb3VwTmFtZTpbe3R5cGU6eHl9XSxwYWdlSW5kZXg6W3t0eXBlOnh5fV0sbnVtUGFnZXM6W3t0eXBlOnh5fV0sY2FyZElkc1dpdGhNZXRhZGF0YTpbe3R5cGU6eHl9XSxjYXJkT2JzZXJ2ZXI6W3t0eXBlOnh5fV0sc2hvd1BhZ2luYXRpb25Db250cm9sczpbe3R5cGU6eHl9XSxwYWdlSW5kZXhDaGFuZ2VkOlt7dHlwZTpPeX1dLGdyb3VwRXhwYW5zaW9uVG9nZ2xlZDpbe3R5cGU6T3l9XX0pO2NsYXNzIE5ndHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5ncm91cE5hbWU9bnVsbCx0aGlzLmdyb3VwTmFtZSQ9bmV3IEYobnVsbCksdGhpcy5wYWdlSW5kZXgkPW5ldyBGKDApLHRoaXMuaXRlbXMkPW5ldyBGKFtdKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IEksdGhpcy5udW1QYWdlcyQ9V3QoW3RoaXMuaXRlbXMkLHRoaXMuc3RvcmUuc2VsZWN0KFJOKV0pLnBpcGUoSXQoKChbdCxlXSk9Pk1hdGguY2VpbCh0Lmxlbmd0aC9lKSkpKSx0aGlzLmlzR3JvdXBFeHBhbmRlZCQ9dGhpcy5ncm91cE5hbWUkLnBpcGUoemUoKHQ9Pm51bGwhPT10P3RoaXMuc3RvcmUuc2VsZWN0KFZULHQpOkV0KCEwKSkpKSx0aGlzLnNob3dQYWdpbmF0aW9uQ29udHJvbHMkPVd0KFt0aGlzLm51bVBhZ2VzJCx0aGlzLnN0b3JlLnNlbGVjdChSTiksdGhpcy5pc0dyb3VwRXhwYW5kZWQkXSkucGlwZShJdCgoKFt0LGUsbl0pPT4hKHQ8PTEpJiYoZTw9M3x8bikpKSksdGhpcy5pc0dyb3VwRXhwYW5kYWJsZSQ9V3QoW3RoaXMuaXRlbXMkLHRoaXMuc3RvcmUuc2VsZWN0KFJOKV0pLnBpcGUoSXQoKChbdCxlXSk9PiEobnVsbD09PXRoaXMuZ3JvdXBOYW1lfHxlPD0zfHx0Lmxlbmd0aDw9MykpKSksdGhpcy5ub3JtYWxpemVkUGFnZUluZGV4JD1XdChbdGhpcy5wYWdlSW5kZXgkLHRoaXMubnVtUGFnZXMkXSkucGlwZShJZSh0aGlzLm5nVW5zdWJzY3JpYmUpLEZlKCgoW3QsZV0pPT57MCE9PWUmJih0Pj1lP3RoaXMucGFnZUluZGV4JC5uZXh0KGUtMSk6dDwwJiZ0aGlzLnBhZ2VJbmRleCQubmV4dCgwKSl9KSksSXQoKChbdCxlXSk9Pk1hdGgubWluKE1hdGgubWF4KHQsMCksZS0xKSkpLEFlKDEpKSx0aGlzLnBhZ2VkSXRlbXMkPVd0KFt0aGlzLml0ZW1zJCx0aGlzLnN0b3JlLnNlbGVjdChSTiksdGhpcy5ub3JtYWxpemVkUGFnZUluZGV4JCx0aGlzLmlzR3JvdXBFeHBhbmRlZCRdKS5waXBlKEl0KCgoW3QsZSxuLG9dKT0+e2NvbnN0IGk9ZSpuLGE9ZSpuK01hdGgubWluKG8/ZTozLGUpO3JldHVybiB0LnNsaWNlKGksYSl9KSkpfW5nT25DaGFuZ2VzKHQpe3QuY2FyZElkc1dpdGhNZXRhZGF0YSYmdGhpcy5pdGVtcyQubmV4dCh0aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEpLHQuZ3JvdXBOYW1lJiZ0aGlzLmdyb3VwTmFtZSQubmV4dCh0aGlzLmdyb3VwTmFtZSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW9uUGFnZUluZGV4Q2hhbmdlZCh0KXt0aGlzLnBhZ2VJbmRleCQubmV4dCh0KX1vbkdyb3VwRXhwYW5zaW9uVG9nZ2xlZCgpe2lmKG51bGw9PT10aGlzLmdyb3VwTmFtZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiBleHBhbnNpb24gY2Fubm90IGJlIHRvZ2dsZWQgd2hlbiBncm91cE5hbWUgaXMgbnVsbCIpO3RoaXMuc3RvcmUuZGlzcGF0Y2goblIoe3RhZ0dyb3VwOnRoaXMuZ3JvdXBOYW1lfSkpfX1mdW5jdGlvbiB6Z3QodCxlKXtpZigxJnQmJihSbSgwLCJzcGFuIiw4KSxrdSgxKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oKTtyYygxKSxEdSgiIix0LmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoLCIgY2FyZHMiKX19ZnVuY3Rpb24gSWd0KHQsZSl7MSZ0JiYoUm0oMCwic3BhbiIsOSksa3UoMSwiTmV3IGNhcmQgcGlubmVkIiksQW0oKSksMiZ0JiZqcCgiZGF0YS1pZCIsZS4kaW1wbGljaXQpfWZ1bmN0aW9uIEhndCh0LGUpe2lmKDEmdCYmVG0oMCwibWV0cmljcy1jYXJkLWdyaWQiLDEwKSwyJnQpe2NvbnN0IHQ9WW0oKTtEbSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsdC5jYXJkSWRzV2l0aE1ldGFkYXRhKSgiY2FyZE9ic2VydmVyIix0LmNhcmRPYnNlcnZlcil9fWZ1bmN0aW9uIEZndCh0LGUpezEmdCYmKFJtKDAsImRpdiIsMTEpLGt1KDEsIlBpbiBjYXJkcyBmb3IgYSBxdWljayB2aWV3IGFuZCBjb21wYXJpc29uIiksQW0oKSl9Tmd0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxOZ3QpKFNtKEl3KSl9LE5ndC7JtWNtcD10byh7dHlwZTpOZ3Qsc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncmlkIl1dLGlucHV0czp7Z3JvdXBOYW1lOiJncm91cE5hbWUiLGNhcmRJZHNXaXRoTWV0YWRhdGE6ImNhcmRJZHNXaXRoTWV0YWRhdGEiLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZmVhdHVyZXM6W0JvXSxkZWNsczo3LHZhcnM6MjAsY29uc3RzOltbMywiaXNHcm91cEV4cGFuZGFibGUiLCJpc0dyb3VwRXhwYW5kZWQiLCJncm91cE5hbWUiLCJwYWdlSW5kZXgiLCJudW1QYWdlcyIsInNob3dQYWdpbmF0aW9uQ29udHJvbHMiLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIiwicGFnZUluZGV4Q2hhbmdlZCIsImdyb3VwRXhwYW5zaW9uVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwibWV0cmljcy1jYXJkLWdyaWQtY29tcG9uZW50IiwwKSxWbSgicGFnZUluZGV4Q2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25QYWdlSW5kZXhDaGFuZ2VkKGUpfSkpKCJncm91cEV4cGFuc2lvblRvZ2dsZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25Hcm91cEV4cGFuc2lvblRvZ2dsZWQoKX0pKSxBaCgxLCJhc3luYyIpLEFoKDIsImFzeW5jIiksQWgoMywiYXN5bmMiKSxBaCg0LCJhc3luYyIpLEFoKDUsImFzeW5jIiksQWgoNiwiYXN5bmMiKSxBbSgpKSwyJmUmJkRtKCJpc0dyb3VwRXhwYW5kYWJsZSIsVGgoMSw4LG4uaXNHcm91cEV4cGFuZGFibGUkKSkoImlzR3JvdXBFeHBhbmRlZCIsVGgoMiwxMCxuLmlzR3JvdXBFeHBhbmRlZCQpKSgiZ3JvdXBOYW1lIixuLmdyb3VwTmFtZSkoInBhZ2VJbmRleCIsVGgoMywxMixuLm5vcm1hbGl6ZWRQYWdlSW5kZXgkKSkoIm51bVBhZ2VzIixUaCg0LDE0LG4ubnVtUGFnZXMkKSkoInNob3dQYWdpbmF0aW9uQ29udHJvbHMiLFRoKDUsMTYsbi5zaG93UGFnaW5hdGlvbkNvbnRyb2xzJCkpKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixUaCg2LDE4LG4ucGFnZWRJdGVtcyQpKSgiY2FyZE9ic2VydmVyIixuLmNhcmRPYnNlcnZlcil9LGRpcmVjdGl2ZXM6W1RndF0scGlwZXM6W3dNXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKE5ndCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJtZXRyaWNzLWNhcmQtZ3JpZCIsdGVtcGxhdGU6J1xuICAgIDxtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnRcbiAgICAgIFtpc0dyb3VwRXhwYW5kYWJsZV09ImlzR3JvdXBFeHBhbmRhYmxlJCB8IGFzeW5jIlxuICAgICAgW2lzR3JvdXBFeHBhbmRlZF09ImlzR3JvdXBFeHBhbmRlZCQgfCBhc3luYyJcbiAgICAgIFtncm91cE5hbWVdPSJncm91cE5hbWUiXG4gICAgICBbcGFnZUluZGV4XT0ibm9ybWFsaXplZFBhZ2VJbmRleCQgfCBhc3luYyJcbiAgICAgIFtudW1QYWdlc109Im51bVBhZ2VzJCB8IGFzeW5jIlxuICAgICAgW3Nob3dQYWdpbmF0aW9uQ29udHJvbHNdPSJzaG93UGFnaW5hdGlvbkNvbnRyb2xzJCB8IGFzeW5jIlxuICAgICAgW2NhcmRJZHNXaXRoTWV0YWRhdGFdPSJwYWdlZEl0ZW1zJCB8IGFzeW5jIlxuICAgICAgW2NhcmRPYnNlcnZlcl09ImNhcmRPYnNlcnZlciJcbiAgICAgIChwYWdlSW5kZXhDaGFuZ2VkKT0ib25QYWdlSW5kZXhDaGFuZ2VkKCRldmVudCkiXG4gICAgICAoZ3JvdXBFeHBhbnNpb25Ub2dnbGVkKT0ib25Hcm91cEV4cGFuc2lvblRvZ2dsZWQoKSJcbiAgICA+XG4gICAgPC9tZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fV19KSx7Z3JvdXBOYW1lOlt7dHlwZTp4eX1dLGNhcmRJZHNXaXRoTWV0YWRhdGE6W3t0eXBlOnh5fV0sY2FyZE9ic2VydmVyOlt7dHlwZTp4eX1dfSk7Y2xhc3MgTGd0e31MZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fExndCl9LExndC7JtWNtcD10byh7dHlwZTpMZ3Qsc2VsZWN0b3JzOltbIm1ldHJpY3MtcGlubmVkLXZpZXctY29tcG9uZW50Il1dLGlucHV0czp7Y2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIiLGNhcmRJZHNXaXRoTWV0YWRhdGE6ImNhcmRJZHNXaXRoTWV0YWRhdGEiLG5ld0NhcmRQaW5uZWRJZHM6Im5ld0NhcmRQaW5uZWRJZHMifSxkZWNsczoxMCx2YXJzOjQsY29uc3RzOltbMSwiZ3JvdXAtdG9vbGJhciJdLFsic3ZnSWNvbiIsImtlZXBfMjRweCJdLFsxLCJncm91cC10ZXh0Il0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIl0sWyJjbGFzcyIsImdyb3VwLWNhcmQtY291bnQiLDQsIm5nSWYiXSxbImNsYXNzIiwibmV3LWNhcmQtcGlubmVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJlbXB0eVBpbm5lZFZpZXciLCIiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdLFsxLCJuZXctY2FyZC1waW5uZWQiXSxbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciJdLFsxLCJlbXB0eS1tZXNzYWdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihSbSgwLCJkaXYiLDApLFRtKDEsIm1hdC1pY29uIiwxKSxSbSgyLCJzcGFuIiwyKSxSbSgzLCJzcGFuIiwzKSxrdSg0LCJQaW5uZWQiKSxBbSgpLFFwKDUsemd0LDIsMSwic3BhbiIsNCksUXAoNixJZ3QsMiwxLCJzcGFuIiw1KSxBbSgpLEFtKCksUXAoNyxIZ3QsMSwyLCJtZXRyaWNzLWNhcmQtZ3JpZCIsNiksUXAoOCxGZ3QsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw3LGliKSksMiZlKXtjb25zdCB0PSRwKDkpO3JjKDUpLERtKCJuZ0lmIixuLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoPjEpLHJjKDEpLERtKCJuZ0Zvck9mIixuLm5ld0NhcmRQaW5uZWRJZHMpLHJjKDEpLERtKCJuZ0lmIixuLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoKSgibmdJZkVsc2UiLHQpfX0sZGlyZWN0aXZlczpbRFcsZE0sbE0sTmd0XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXg6bm9uZTtoZWlnaHQ6NDJweDttYXJnaW4tYm90dG9tOi0xcHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDAsMCwwLC4xNSl9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgyNTUsMjU1LDI1NSwuMTUpfW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZsZXg6bm9uZTttYXJnaW4tcmlnaHQ6NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5ncm91cC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Z2FwOjZweH0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEzcHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzoxNnB4O3RleHQtYWxpZ246Y2VudGVyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5uZXctY2FyZC1waW5uZWRbX25nY29udGVudC0lQ09NUCVde2FuaW1hdGlvbjpwaW5uZWQtdmlldy1mYWRlLW91dCAzcyBsaW5lYXI7YmFja2dyb3VuZDojZjQ0MzM2O2JvcmRlci1yYWRpdXM6NXB4O2NvbG9yOiNmZmY7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjEzcHg7b3BhY2l0eTowO3BhZGRpbmc6M3B4IDVweH1Aa2V5ZnJhbWVzIHBpbm5lZC12aWV3LWZhZGUtb3V0e2Zyb217b3BhY2l0eToxfTY2JXtvcGFjaXR5Oi45OX10b3tvcGFjaXR5OjB9fSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChMZ3QsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljcy1waW5uZWQtdmlldy1jb21wb25lbnQiLHRlbXBsYXRlOidcbiAgICA8ZGl2IGNsYXNzPSJncm91cC10b29sYmFyIj5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPSJrZWVwXzI0cHgiPjwvbWF0LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz0iZ3JvdXAtdGV4dCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPSJncm91cC10aXRsZSIgYXJpYS1yb2xlPSJoZWFkaW5nIiBhcmlhLWxldmVsPSIzIlxuICAgICAgICAgID5QaW5uZWQ8L3NwYW5cbiAgICAgICAgPlxuICAgICAgICA8c3BhbiAqbmdJZj0iY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGggPiAxIiBjbGFzcz0iZ3JvdXAtY2FyZC1jb3VudCJcbiAgICAgICAgICA+e3sgY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGggfX0gY2FyZHM8L3NwYW5cbiAgICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICpuZ0Zvcj0ibGV0IGlkIG9mIG5ld0NhcmRQaW5uZWRJZHMiXG4gICAgICAgICAgW2F0dHIuZGF0YS1pZF09ImlkIlxuICAgICAgICAgIGNsYXNzPSJuZXctY2FyZC1waW5uZWQiXG4gICAgICAgICAgPk5ldyBjYXJkIHBpbm5lZDwvc3BhblxuICAgICAgICA+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPG1ldHJpY3MtY2FyZC1ncmlkXG4gICAgICAqbmdJZj0iY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGg7IGVsc2UgZW1wdHlQaW5uZWRWaWV3IlxuICAgICAgW2NhcmRJZHNXaXRoTWV0YWRhdGFdPSJjYXJkSWRzV2l0aE1ldGFkYXRhIlxuICAgICAgW2NhcmRPYnNlcnZlcl09ImNhcmRPYnNlcnZlciJcbiAgICA+PC9tZXRyaWNzLWNhcmQtZ3JpZD5cbiAgICA8bmctdGVtcGxhdGUgI2VtcHR5UGlubmVkVmlldz5cbiAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LW1lc3NhZ2UiPlBpbiBjYXJkcyBmb3IgYSBxdWljayB2aWV3IGFuZCBjb21wYXJpc29uPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgJyxzdHlsZVVybHM6WyJwaW5uZWRfdmlld19jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sbnVsbCx7Y2FyZE9ic2VydmVyOlt7dHlwZTp4eX1dLGNhcmRJZHNXaXRoTWV0YWRhdGE6W3t0eXBlOnh5fV0sbmV3Q2FyZFBpbm5lZElkczpbe3R5cGU6eHl9XX0pO2NsYXNzIEJndHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhJD10aGlzLnN0b3JlLnNlbGVjdChQVCkucGlwZShOZShbXSkpLHRoaXMubmV3Q2FyZFBpbm5lZElkcyQ9dGhpcy5zdG9yZS5zZWxlY3QoUFQpLnBpcGUoVGUoMSksSXQoKHQ9PnQubWFwKCh0PT50LmNhcmRJZCkpKSksRGUoKSxJdCgoKFt0LGVdKT0+e2NvbnN0IG49bmV3IFNldCh0KSxvPW5ldyBTZXQoZSk7Zm9yKGNvbnN0IHQgb2YgbylpZighbi5oYXModCkpcmV0dXJuIERhdGUubm93KCk7cmV0dXJuIG51bGx9KSksTmUobnVsbCksRGUoKSxJdCgoKFt0LGVdKT0+bnVsbD09PXQmJm51bGw9PT1lP251bGw6bnVsbD09PWU/W3RdOltlXSkpLGNlKCh0PT5udWxsIT09dCkpLEl0KCh0PT5bdFswXV0pKSl9fUJndC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Qmd0KShTbShJdykpfSxCZ3QuybVjbXA9dG8oe3R5cGU6Qmd0LHNlbGVjdG9yczpbWyJtZXRyaWNzLXBpbm5lZC12aWV3Il1dLGlucHV0czp7Y2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxkZWNsczozLHZhcnM6Nyxjb25zdHM6W1szLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwibmV3Q2FyZFBpbm5lZElkcyIsImNhcmRPYnNlcnZlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVG0oMCwibWV0cmljcy1waW5uZWQtdmlldy1jb21wb25lbnQiLDApLEFoKDEsImFzeW5jIiksQWgoMiwiYXN5bmMiKSksMiZlJiZEbSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsVGgoMSwzLG4uY2FyZElkc1dpdGhNZXRhZGF0YSQpKSgibmV3Q2FyZFBpbm5lZElkcyIsVGgoMiw1LG4ubmV3Q2FyZFBpbm5lZElkcyQpKSgiY2FyZE9ic2VydmVyIixuLmNhcmRPYnNlcnZlcil9LGRpcmVjdGl2ZXM6W0xndF0scGlwZXM6W3dNXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEJndCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJtZXRyaWNzLXBpbm5lZC12aWV3Iix0ZW1wbGF0ZTonXG4gICAgPG1ldHJpY3MtcGlubmVkLXZpZXctY29tcG9uZW50XG4gICAgICBbY2FyZElkc1dpdGhNZXRhZGF0YV09ImNhcmRJZHNXaXRoTWV0YWRhdGEkIHwgYXN5bmMiXG4gICAgICBbbmV3Q2FyZFBpbm5lZElkc109Im5ld0NhcmRQaW5uZWRJZHMkIHwgYXN5bmMiXG4gICAgICBbY2FyZE9ic2VydmVyXT0iY2FyZE9ic2VydmVyIlxuICAgID48L21ldHJpY3MtcGlubmVkLXZpZXctY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd31dfSkse2NhcmRPYnNlcnZlcjpbe3R5cGU6eHl9XX0pO2NvbnN0IFZndD1adyhNVCxOTiwoKHQsZSk9PnQuZmlsdGVyKCh0PT4heEEodC5wbHVnaW4pfHxCb29sZWFuKGUmJmUuZ2V0KHQucnVuSWQpKSkpKSksamd0PVp3KFZndCwodD0+dC5zb3J0KCgodCxlKT0+ZzIodC50YWcsZS50YWcpKSkpKTtmdW5jdGlvbiBVZ3QodCxlKXtpZigxJnQmJihSbSgwLCJzcGFuIiw2KSxrdSgxKSxBaCgyLCJudW1iZXIiKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oKS4kaW1wbGljaXQ7cmMoMSksRHUoIiIsVGgoMiwxLHQuaXRlbXMubGVuZ3RoKSwiIGNhcmRzIil9fWZ1bmN0aW9uIEdndCh0LGUpe2lmKDEmdCYmKFJtKDAsImRpdiIsMSksUm0oMSwiZGl2IiwyKSxSbSgyLCJzcGFuIiksUm0oMywic3BhbiIsMyksa3UoNCksQW0oKSxRcCg1LFVndCwzLDMsInNwYW4iLDQpLEFtKCksQW0oKSxUbSg2LCJtZXRyaWNzLWNhcmQtZ3JpZCIsNSksQW0oKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49WW0oKTtyYygzKSxLbSgidGl0bGUiLHQuZ3JvdXBOYW1lKSxyYygxKSxTdSh0Lmdyb3VwTmFtZSkscmMoMSksRG0oIm5nSWYiLHQuaXRlbXMubGVuZ3RoPjEpLHJjKDEpLERtKCJjYXJkSWRzV2l0aE1ldGFkYXRhIix0Lml0ZW1zKSgiY2FyZE9ic2VydmVyIixuLmNhcmRPYnNlcnZlcikoImdyb3VwTmFtZSIsdC5ncm91cE5hbWUpfX1jbGFzcyBXZ3R7Y29uc3RydWN0b3IoKXt0aGlzLlBsdWdpblR5cGU9aEF9dHJhY2tCeUdyb3VwKHQsZSl7cmV0dXJuIGUuZ3JvdXBOYW1lfX1XZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFdndCl9LFdndC7JtWNtcD10byh7dHlwZTpXZ3Qsc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncm91cHMtY29tcG9uZW50Il1dLGlucHV0czp7Y2FyZEdyb3VwczoiY2FyZEdyb3VwcyIsY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxkZWNsczoxLHZhcnM6Mixjb25zdHM6W1siY2xhc3MiLCJjYXJkLWdyb3VwIiw0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwiY2FyZC1ncm91cCJdLFsxLCJncm91cC10b29sYmFyIl0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIiwzLCJ0aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiLCJncm91cE5hbWUiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZRcCgwLEdndCw3LDYsImRpdiIsMCksMiZlJiZEbSgibmdGb3JPZiIsbi5jYXJkR3JvdXBzKSgibmdGb3JUcmFja0J5IixuLnRyYWNrQnlHcm91cCl9LGRpcmVjdGl2ZXM6W2xNLGRNLE5ndF0scGlwZXM6W0ZNXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXg6bm9uZTtoZWlnaHQ6NDJweDttYXJnaW4tYm90dG9tOi0xcHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDAsMCwwLC4xNSl9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgyNTUsMjU1LDI1NSwuMTUpfVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjt0b3A6LTFweH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0uY2FyZC1ncm91cFtfbmdjb250ZW50LSVDT01QJV06Zmlyc3Qtb2YtdHlwZSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOm5vbmV9Lmdyb3VwLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjE2MTYxO21hcmdpbi1sZWZ0OjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoV2d0LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtY2FyZC1ncm91cHMtY29tcG9uZW50Iix0ZW1wbGF0ZTonXG4gICAgPGRpdlxuICAgICAgKm5nRm9yPSJsZXQgZ3JvdXAgb2YgY2FyZEdyb3VwczsgdHJhY2tCeTogdHJhY2tCeUdyb3VwIlxuICAgICAgY2xhc3M9ImNhcmQtZ3JvdXAiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz0iZ3JvdXAtdG9vbGJhciI+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz0iZ3JvdXAtdGl0bGUiXG4gICAgICAgICAgICBhcmlhLXJvbGU9ImhlYWRpbmciXG4gICAgICAgICAgICBhcmlhLWxldmVsPSIzIlxuICAgICAgICAgICAgdGl0bGU9Int7IGdyb3VwLmdyb3VwTmFtZSB9fSJcbiAgICAgICAgICAgID57eyBncm91cC5ncm91cE5hbWUgfX08L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9Imdyb3VwLml0ZW1zLmxlbmd0aCA+IDEiIGNsYXNzPSJncm91cC1jYXJkLWNvdW50IlxuICAgICAgICAgICAgPnt7IGdyb3VwLml0ZW1zLmxlbmd0aCB8IG51bWJlciB9fSBjYXJkczwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8bWV0cmljcy1jYXJkLWdyaWRcbiAgICAgICAgW2NhcmRJZHNXaXRoTWV0YWRhdGFdPSJncm91cC5pdGVtcyJcbiAgICAgICAgW2NhcmRPYnNlcnZlcl09ImNhcmRPYnNlcnZlciJcbiAgICAgICAgW2dyb3VwTmFtZV09Imdyb3VwLmdyb3VwTmFtZSJcbiAgICAgID48L21ldHJpY3MtY2FyZC1ncmlkPlxuICAgIDwvZGl2PlxuICAnLHN0eWxlVXJsczpbImNhcmRfZ3JvdXBzX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSxudWxsLHtjYXJkR3JvdXBzOlt7dHlwZTp4eX1dLGNhcmRPYnNlcnZlcjpbe3R5cGU6eHl9XX0pO2NsYXNzIFlndHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5jYXJkR3JvdXBzJD10aGlzLnN0b3JlLnNlbGVjdChqZ3QpLnBpcGUoZmUodGhpcy5zdG9yZS5zZWxlY3QocVQpKSxJdCgoKFt0LGVdKT0+ZS5zaXplP3QuZmlsdGVyKCh0PT5lLmhhcyh0LnBsdWdpbikpKTp0KSksSXQoKHQ9PihmdW5jdGlvbiBlKHQpe2NvbnN0IGU9bmV3IE1hcCxuPXQuc2xpY2UoKS5zb3J0KCgodCxlKT0+ZzIodC50YWcsZS50YWcpKSk7Zm9yKGNvbnN0IHQgb2Ygbil7Y29uc3Qgbj10LnRhZy5zcGxpdCgiLyIsMSlbMF07ZS5oYXMobil8fGUuc2V0KG4se2dyb3VwTmFtZTpuLGl0ZW1zOltdfSksZS5nZXQobikuaXRlbXMucHVzaCh0KX1yZXR1cm5bLi4uZS52YWx1ZXMoKV19KSh0KSkpKX19ZnVuY3Rpb24gcWd0KHQsZSl7aWYoMSZ0JiYoUm0oMCwic3BhbiIpLGt1KDEpLEFtKCkpLDImdCl7Y29uc3QgdD1ZbSgpO3JjKDEpLER1KCIgYW5kICIsdC5nZXRQbHVnaW5UeXBlRmlsdGVyU3RyaW5nKHQucGx1Z2luVHlwZXMpLCIgdmlzdWFsaXphdGlvbiBmaWx0ZXIiKX19WWd0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxZZ3QpKFNtKEl3KSl9LFlndC7JtWNtcD10byh7dHlwZTpZZ3Qsc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncm91cHMiXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjIsdmFyczo0LGNvbnN0czpbWzMsImNhcmRHcm91cHMiLCJjYXJkT2JzZXJ2ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFRtKDAsIm1ldHJpY3MtY2FyZC1ncm91cHMtY29tcG9uZW50IiwwKSxBaCgxLCJhc3luYyIpKSwyJmUmJkRtKCJjYXJkR3JvdXBzIixUaCgxLDIsbi5jYXJkR3JvdXBzJCkpKCJjYXJkT2JzZXJ2ZXIiLG4uY2FyZE9ic2VydmVyKX0sZGlyZWN0aXZlczpbV2d0XSxwaXBlczpbd01dLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoWWd0LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtY2FyZC1ncm91cHMiLHRlbXBsYXRlOidcbiAgICA8bWV0cmljcy1jYXJkLWdyb3Vwcy1jb21wb25lbnRcbiAgICAgIFtjYXJkR3JvdXBzXT0iY2FyZEdyb3VwcyQgfCBhc3luYyJcbiAgICAgIFtjYXJkT2JzZXJ2ZXJdPSJjYXJkT2JzZXJ2ZXIiXG4gICAgPjwvbWV0cmljcy1jYXJkLWdyb3Vwcy1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fV19KSx7Y2FyZE9ic2VydmVyOlt7dHlwZTp4eX1dfSk7Y2xhc3MgWmd0e2NvbnN0cnVjdG9yKCl7dGhpcy5QbHVnaW5UeXBlPWhBLHRoaXMubGlzdEZvcm1hdHRlcj1uZXcgSW50bC5MaXN0Rm9ybWF0KHZvaWQgMCx7c3R5bGU6ImxvbmciLHR5cGU6ImRpc2p1bmN0aW9uIn0pfWdldFBsdWdpblR5cGVGaWx0ZXJTdHJpbmcodCl7Y29uc3QgZT1bLi4udF0ubWFwKCh0PT57c3dpdGNoKHQpe2Nhc2UgaEEuU0NBTEFSUzpyZXR1cm4ic2NhbGFyIjtjYXNlIGhBLklNQUdFUzpyZXR1cm4iaW1hZ2UiO2Nhc2UgaEEuSElTVE9HUkFNUzpyZXR1cm4iaGlzdG9ncmFtIjtkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBQbGVhc2UgaW1wbGVtZW50IGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIHBsdWdpbiB0eXBlOiAke3R9YCl9fSkpO3JldHVybiB0aGlzLmxpc3RGb3JtYXR0ZXIuZm9ybWF0KGUpfX1aZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFpndCl9LFpndC7JtWNtcD10byh7dHlwZTpaZ3Qsc2VsZWN0b3JzOltbIm1ldHJpY3MtZW1wdHktdGFnLW1hdGNoLWNvbXBvbmVudCJdXSxpbnB1dHM6e3BsdWdpblR5cGVzOiJwbHVnaW5UeXBlcyIsdGFnRmlsdGVyUmVnZXg6InRhZ0ZpbHRlclJlZ2V4Iix0YWdDb3VudHM6InRhZ0NvdW50cyJ9LGRlY2xzOjYsdmFyczo1LGNvbnN0czpbWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKGt1KDAsIk5vIG1hdGNoZXMgZm9yIHRhZyBmaWx0ZXIgIiksUm0oMSwiY29kZSIpLGt1KDIpLEFtKCksUXAoMyxxZ3QsMiwxLCJzcGFuIiwwKSxrdSg0KSxBaCg1LCJudW1iZXIiKSksMiZlJiYocmMoMiksRHUoIi8iLG4udGFnRmlsdGVyUmVnZXgsIi8iKSxyYygxKSxEbSgibmdJZiIsbi5wbHVnaW5UeXBlcy5zaXplKSxyYygxKSxEdSgiIG91dCBvZiAiLFRoKDUsMyxuLnRhZ0NvdW50cyksIiB0YWdzLiIpKX0sZGlyZWN0aXZlczpbZE1dLHBpcGVzOltGTV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChaZ3QsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljcy1lbXB0eS10YWctbWF0Y2gtY29tcG9uZW50Iix0ZW1wbGF0ZTonTm8gbWF0Y2hlcyBmb3IgdGFnIGZpbHRlciA8Y29kZT4ve3sgdGFnRmlsdGVyUmVnZXggfX0vPC9jb2RlXG4gICAgPjxzcGFuICpuZ0lmPSJwbHVnaW5UeXBlcy5zaXplIj5cbiAgICAgIGFuZCB7eyBnZXRQbHVnaW5UeXBlRmlsdGVyU3RyaW5nKHBsdWdpblR5cGVzKSB9fSB2aXN1YWxpemF0aW9uXG4gICAgICBmaWx0ZXI8L3NwYW5cbiAgICA+XG4gICAgb3V0IG9mIHt7IHRhZ0NvdW50cyB8IG51bWJlciB9fSB0YWdzLicsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sbnVsbCx7cGx1Z2luVHlwZXM6W3t0eXBlOnh5fV0sdGFnRmlsdGVyUmVnZXg6W3t0eXBlOnh5fV0sdGFnQ291bnRzOlt7dHlwZTp4eX1dfSk7Y2xhc3MgWGd0e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLnBsdWdpblR5cGVzJD10aGlzLnN0b3JlLnNlbGVjdChxVCksdGhpcy50YWdGaWx0ZXJSZWdleCQ9dGhpcy5zdG9yZS5zZWxlY3QoQlQpLHRoaXMudGFnQ291bnRzJD10aGlzLnN0b3JlLnNlbGVjdChqZ3QpLnBpcGUoSXQoKHQ9Pm5ldyBTZXQodC5tYXAoKCh7dGFnOnR9KT0+dCkpKS5zaXplKSkpfX1mdW5jdGlvbiBLZ3QodCxlKXtpZigxJnQmJihSbSgwLCJzcGFuIiw2KSxrdSgxKSxBaCgyLCJudW1iZXIiKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oKTtyYygxKSxEdSgiIixUaCgyLDEsdC5jYXJkSWRzV2l0aE1ldGFkYXRhLmxlbmd0aCksIiBjYXJkcyIpfX1mdW5jdGlvbiBKZ3QodCxlKXsxJnQmJlRtKDAsIm1ldHJpY3MtZW1wdHktdGFnLW1hdGNoIiw3KX1YZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFhndCkoU20oSXcpKX0sWGd0Lsm1Y21wPXRvKHt0eXBlOlhndCxzZWxlY3RvcnM6W1sibWV0cmljcy1lbXB0eS10YWctbWF0Y2giXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywicGx1Z2luVHlwZXMiLCJ0YWdGaWx0ZXJSZWdleCIsInRhZ0NvdW50cyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVG0oMCwibWV0cmljcy1lbXB0eS10YWctbWF0Y2gtY29tcG9uZW50IiwwKSxBaCgxLCJhc3luYyIpLEFoKDIsImFzeW5jIiksQWgoMywiYXN5bmMiKSksMiZlJiZEbSgicGx1Z2luVHlwZXMiLFRoKDEsMyxuLnBsdWdpblR5cGVzJCkpKCJ0YWdGaWx0ZXJSZWdleCIsVGgoMiw1LG4udGFnRmlsdGVyUmVnZXgkKSkoInRhZ0NvdW50cyIsVGgoMyw3LG4udGFnQ291bnRzJCkpfSxkaXJlY3RpdmVzOltaZ3RdLHBpcGVzOlt3TV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChYZ3QsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljcy1lbXB0eS10YWctbWF0Y2giLHRlbXBsYXRlOidcbiAgICA8bWV0cmljcy1lbXB0eS10YWctbWF0Y2gtY29tcG9uZW50XG4gICAgICBbcGx1Z2luVHlwZXNdPSJwbHVnaW5UeXBlcyQgfCBhc3luYyJcbiAgICAgIFt0YWdGaWx0ZXJSZWdleF09InRhZ0ZpbHRlclJlZ2V4JCB8IGFzeW5jIlxuICAgICAgW3RhZ0NvdW50c109InRhZ0NvdW50cyQgfCBhc3luYyJcbiAgICA+PC9tZXRyaWNzLWVtcHR5LXRhZy1tYXRjaC1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fV19KSxudWxsKTtjbGFzcyBRZ3R7fVFndC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UWd0KX0sUWd0Lsm1Y21wPXRvKHt0eXBlOlFndCxzZWxlY3RvcnM6W1sibWV0cmljcy1maWx0ZXJlZC12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e2lzRW1wdHlNYXRjaDoiaXNFbXB0eU1hdGNoIixjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciIsY2FyZElkc1dpdGhNZXRhZGF0YToiY2FyZElkc1dpdGhNZXRhZGF0YSJ9LGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWzEsImdyb3VwLXRvb2xiYXIiXSxbMSwiZ3JvdXAtdGV4dCJdLFsiYXJpYS1yb2xlIiwiaGVhZGluZyIsImFyaWEtbGV2ZWwiLCIzIiwxLCJncm91cC10aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIndhcm4iLDQsIm5nSWYiXSxbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciJdLFsxLCJncm91cC1jYXJkLWNvdW50Il0sWzEsIndhcm4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsImRpdiIsMCksUm0oMSwic3BhbiIsMSksUm0oMiwic3BhbiIsMiksa3UoMywiVGFncyBtYXRjaGluZyBmaWx0ZXIiKSxBbSgpLFFwKDQsS2d0LDMsMywic3BhbiIsMyksQW0oKSxBbSgpLFFwKDUsSmd0LDEsMCwibWV0cmljcy1lbXB0eS10YWctbWF0Y2giLDQpLFRtKDYsIm1ldHJpY3MtY2FyZC1ncmlkIiw1KSksMiZlJiYocmMoNCksRG0oIm5nSWYiLG4uY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGg+MSkscmMoMSksRG0oIm5nSWYiLG4uaXNFbXB0eU1hdGNoKSxyYygxKSxEbSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsbi5jYXJkSWRzV2l0aE1ldGFkYXRhKSgiY2FyZE9ic2VydmVyIixuLmNhcmRPYnNlcnZlcikpfSxkaXJlY3RpdmVzOltkTSxOZ3QsWGd0XSxwaXBlczpbRk1dLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleDpub25lO2hlaWdodDo0MnB4O21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxO2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMCwwLDAsLjE1KX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDI1NSwyNTUsMjU1LC4xNSl9Lmdyb3VwLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZX0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjE7bWFyZ2luLWxlZnQ6NnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfW1ldHJpY3MtZW1wdHktdGFnLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtc3R5bGU6aXRhbGljO3BhZGRpbmc6MTZweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmJsb2NrfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1ldHJpY3MtZW1wdHktdGFnLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWV0cmljcy1lbXB0eS10YWctbWF0Y2hbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChRZ3QsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljcy1maWx0ZXJlZC12aWV3LWNvbXBvbmVudCIsdGVtcGxhdGU6J1xuICAgIDxkaXYgY2xhc3M9Imdyb3VwLXRvb2xiYXIiPlxuICAgICAgPHNwYW4gY2xhc3M9Imdyb3VwLXRleHQiPlxuICAgICAgICA8c3BhbiBjbGFzcz0iZ3JvdXAtdGl0bGUiIGFyaWEtcm9sZT0iaGVhZGluZyIgYXJpYS1sZXZlbD0iMyJcbiAgICAgICAgICA+VGFncyBtYXRjaGluZyBmaWx0ZXI8L3NwYW5cbiAgICAgICAgPlxuICAgICAgICA8c3BhbiAqbmdJZj0iY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGggPiAxIiBjbGFzcz0iZ3JvdXAtY2FyZC1jb3VudCJcbiAgICAgICAgICA+e3sgY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGggfCBudW1iZXIgfX0gY2FyZHM8L3NwYW5cbiAgICAgICAgPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaFxuICAgICAgKm5nSWY9ImlzRW1wdHlNYXRjaCJcbiAgICAgIGNsYXNzPSJ3YXJuIlxuICAgID48L21ldHJpY3MtZW1wdHktdGFnLW1hdGNoPlxuICAgIDxtZXRyaWNzLWNhcmQtZ3JpZFxuICAgICAgW2NhcmRJZHNXaXRoTWV0YWRhdGFdPSJjYXJkSWRzV2l0aE1ldGFkYXRhIlxuICAgICAgW2NhcmRPYnNlcnZlcl09ImNhcmRPYnNlcnZlciJcbiAgICA+PC9tZXRyaWNzLWNhcmQtZ3JpZD5cbiAgJyxzdHlsZVVybHM6WyJmaWx0ZXJlZF92aWV3X2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSxudWxsLHtpc0VtcHR5TWF0Y2g6W3t0eXBlOnh5fV0sY2FyZE9ic2VydmVyOlt7dHlwZTp4eX1dLGNhcmRJZHNXaXRoTWV0YWRhdGE6W3t0eXBlOnh5fV19KTtjbGFzcyAkZ3R7Y29uc3RydWN0b3IodCl7dGhpcy5zdG9yZT10LHRoaXMuY2FyZElkc1dpdGhNZXRhZGF0YSQ9dGhpcy5zdG9yZS5zZWxlY3Qoamd0KS5waXBlKGZlKHRoaXMuc3RvcmUuc2VsZWN0KHFUKSksSXQoKChbdCxlXSk9PmUuc2l6ZT90LmZpbHRlcigodD0+ZS5oYXModC5wbHVnaW4pKSk6dCkpLGZlKHRoaXMuc3RvcmUuc2VsZWN0KEJUKSksZ2UoMjAwKSxJdCgoKFt0LGVdKT0+e3RyeXtyZXR1cm57Y2FyZExpc3Q6dCxyZWdleDpuZXcgUmVnRXhwKGUsImkiKX19Y2F0Y2goZSl7cmV0dXJue2NhcmRMaXN0OnQscmVnZXg6bnVsbH19fSkpLGNlKCgoe3JlZ2V4OnR9KT0+bnVsbCE9PXQpKSxJdCgoKHtjYXJkTGlzdDp0LHJlZ2V4OmV9KT0+dC5maWx0ZXIoKCh7dGFnOnR9KT0+ZS50ZXN0KHQpKSkpKSxNZSgoKHQsZSk9PnQubGVuZ3RoPT09ZS5sZW5ndGgmJnQuZXZlcnkoKCh0LG4pPT50LmNhcmRJZD09PWVbbl0uY2FyZElkKSkpKSxFZSgpLE5lKFtdKSksdGhpcy5pc0VtcHR5TWF0Y2gkPXRoaXMuY2FyZElkc1dpdGhNZXRhZGF0YSQucGlwZShmZSh0aGlzLnN0b3JlLnNlbGVjdChqZ3QpKSxJdCgoKFt0LGVdKT0+Qm9vbGVhbihlLmxlbmd0aCkmJjA9PT10Lmxlbmd0aCkpKX19ZnVuY3Rpb24gdGh0KHQsZSl7aWYoMSZ0JiYoUm0oMCwibWF0LW9wdGlvbiIsMiksa3UoMSksQW0oKSksMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0O0RtKCJ2YWx1ZSIsdC52YWx1ZSkoImRpc2FibGVkIix0LmRpc2FibGVkKSxyYygxKSxEdSgiICIsdC5kaXNwbGF5VGV4dCwiICIpfX0kZ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fCRndCkoU20oSXcpKX0sJGd0Lsm1Y21wPXRvKHt0eXBlOiRndCxzZWxlY3RvcnM6W1sibWV0cmljcy1maWx0ZXJlZC12aWV3Il1dLGlucHV0czp7Y2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxkZWNsczozLHZhcnM6Nyxjb25zdHM6W1szLCJpc0VtcHR5TWF0Y2giLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihUbSgwLCJtZXRyaWNzLWZpbHRlcmVkLXZpZXctY29tcG9uZW50IiwwKSxBaCgxLCJhc3luYyIpLEFoKDIsImFzeW5jIikpLDImZSYmRG0oImlzRW1wdHlNYXRjaCIsVGgoMSwzLG4uaXNFbXB0eU1hdGNoJCkpKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixUaCgyLDUsbi5jYXJkSWRzV2l0aE1ldGFkYXRhJCkpKCJjYXJkT2JzZXJ2ZXIiLG4uY2FyZE9ic2VydmVyKX0sZGlyZWN0aXZlczpbUWd0XSxwaXBlczpbd01dLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoJGd0LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtZmlsdGVyZWQtdmlldyIsdGVtcGxhdGU6J1xuICAgIDxtZXRyaWNzLWZpbHRlcmVkLXZpZXctY29tcG9uZW50XG4gICAgICBbaXNFbXB0eU1hdGNoXT0iaXNFbXB0eU1hdGNoJCB8IGFzeW5jIlxuICAgICAgW2NhcmRJZHNXaXRoTWV0YWRhdGFdPSJjYXJkSWRzV2l0aE1ldGFkYXRhJCB8IGFzeW5jIlxuICAgICAgW2NhcmRPYnNlcnZlcl09ImNhcmRPYnNlcnZlciJcbiAgICA+PC9tZXRyaWNzLWZpbHRlcmVkLXZpZXctY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd31dfSkse2NhcmRPYnNlcnZlcjpbe3R5cGU6eHl9XX0pO2NsYXNzIGVodHtjb25zdHJ1Y3Rvcigpe3RoaXMudmFsdWU9IiIsdGhpcy5vcHRpb25zPVtdLHRoaXMuc2VsZWN0aW9uQ2hhbmdlPW5ldyBMaH19ZnVuY3Rpb24gbmh0KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwibWF0LXNsaWRlciIsMjYpLFZtKCJpbnB1dCIsKGZ1bmN0aW9uIGUobil7cmV0dXJuIGhpKHQpLFltKDIpLm9uU3RlcFN0YXJ0Q2hhbmdlZChuLnZhbHVlKX0pKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgyKTtEbSgiZGlzYWJsZWQiLCF0LnNlbGVjdFRpbWVFbmFibGVkKSgibWluIix0LnN0ZXBNaW5NYXgubWluKSgibWF4Iix0LnN0ZXBNaW5NYXgubWF4KSgic3RlcCIsMSkoInZhbHVlIixudWxsPT10LnNlbGVjdGVkVGltZT9udWxsOnQuc2VsZWN0ZWRUaW1lLnN0YXJ0LnN0ZXApKCJ0aHVtYkxhYmVsIiwhMCl9fWZ1bmN0aW9uIG9odCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsInRiLXJhbmdlLWlucHV0IiwyNyksVm0oInZhbHVlIiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oMikub25TdGVwUmFuZ2VDaGFuZ2VkKG4pfSkpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PVltKDIpO0RtKCJtaW4iLHQuc3RlcE1pbk1heC5taW4pKCJtYXgiLHQuc3RlcE1pbk1heC5tYXgpKCJsb3dlclZhbHVlIixudWxsPT10LnNlbGVjdGVkVGltZT9udWxsOnQuc2VsZWN0ZWRUaW1lLnN0YXJ0LnN0ZXApKCJ1cHBlclZhbHVlIixudWxsPT10LnNlbGVjdGVkVGltZXx8bnVsbD09dC5zZWxlY3RlZFRpbWUuZW5kP251bGw6dC5zZWxlY3RlZFRpbWUuZW5kLnN0ZXApLGpwKCJkaXNhYmxlZCIsIXQuc2VsZWN0VGltZUVuYWJsZWQpfX1mdW5jdGlvbiBpaHQodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJkaXYiLDIxKSxSbSgxLCJsYWJlbCIpLGt1KDIsIkxpbmsgdmlzdWFsaXphdGlvbiBieSBzdGVwIiksQW0oKSxSbSgzLCJkaXYiLDIyKSxSbSg0LCJkaXYiKSxSbSg1LCJtYXQtY2hlY2tib3giLDE1KSxWbSgiY2hhbmdlIiwoZnVuY3Rpb24gZSgpe3JldHVybiBoaSh0KSxZbSgpLnNlbGVjdFRpbWVFbmFibGVUb2dnbGVkLmVtaXQoKX0pKSxrdSg2LCJFbmFibGVkIiksQW0oKSxBbSgpLFJtKDcsImRpdiIpLFJtKDgsIm1hdC1jaGVja2JveCIsMTUpLFZtKCJjaGFuZ2UiLChmdW5jdGlvbiBlKCl7cmV0dXJuIGhpKHQpLFltKCkudXNlUmFuZ2VTZWxlY3RUaW1lVG9nZ2xlZC5lbWl0KCl9KSksa3UoOSwiVXNlIHJhbmdlIiksQW0oKSxBbSgpLFJtKDEwLCJkaXYiLDIzKSxRcCgxMSxuaHQsMSw2LCJtYXQtc2xpZGVyIiwyNCksUXAoMTIsb2h0LDEsNSwibmctdGVtcGxhdGUiLG51bGwsMjUsaWIpLEFtKCksQW0oKSxBbSgpfWlmKDImdCl7Y29uc3QgdD0kcCgxMyksZT1ZbSgpO3JjKDUpLERtKCJjaGVja2VkIixlLnNlbGVjdFRpbWVFbmFibGVkKSxyYygzKSxEbSgiY2hlY2tlZCIsZS51c2VSYW5nZVNlbGVjdFRpbWUpLHJjKDMpLERtKCJuZ0lmIiwhZS51c2VSYW5nZVNlbGVjdFRpbWUpKCJuZ0lmRWxzZSIsdCl9fWZ1bmN0aW9uIGFodCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsInNlY3Rpb24iLDI4KSxSbSgxLCJoMyIsMSksa3UoMiwiSW1hZ2VzIiksQW0oKSxSbSgzLCJkaXYiLDI5KSxSbSg0LCJkaXYiLDMwKSxrdSg1LCJCcmlnaHRuZXNzIiksQW0oKSxSbSg2LCJkaXYiLDkpLFJtKDcsIm1hdC1zbGlkZXIiLDMxKSxWbSgiaW5wdXQiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLmltYWdlQnJpZ2h0bmVzc1NsaWRlckNoYW5nZWQkLmVtaXQobi52YWx1ZSl9KSksQW0oKSxSbSg4LCJidXR0b24iLDMyKSxWbSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIGhpKHQpLFltKCkuaW1hZ2VCcmlnaHRuZXNzUmVzZXQuZW1pdCgpfSkpLFRtKDksIm1hdC1pY29uIiwzMyksQW0oKSxBbSgpLEFtKCksUm0oMTAsImRpdiIsMzQpLFJtKDExLCJkaXYiLDM1KSxrdSgxMiwiQ29udHJhc3QiKSxBbSgpLFJtKDEzLCJkaXYiLDkpLFJtKDE0LCJtYXQtc2xpZGVyIiwzNiksVm0oImlucHV0IiwoZnVuY3Rpb24gZShuKXtyZXR1cm4gaGkodCksWW0oKS5pbWFnZUNvbnRyYXN0U2xpZGVyQ2hhbmdlZCQuZW1pdChuLnZhbHVlKX0pKSxBbSgpLFJtKDE1LCJidXR0b24iLDM3KSxWbSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIGhpKHQpLFltKCkuaW1hZ2VDb250cmFzdFJlc2V0LmVtaXQoKX0pKSxUbSgxNiwibWF0LWljb24iLDMzKSxBbSgpLEFtKCksQW0oKSxSbSgxNywiZGl2IiwzOCksUm0oMTgsIm1hdC1jaGVja2JveCIsMTUpLFZtKCJjaGFuZ2UiLChmdW5jdGlvbiBlKG4pe3JldHVybiBoaSh0KSxZbSgpLmltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkLmVtaXQobi5jaGVja2VkKX0pKSxrdSgxOSwiU2hvdyBhY3R1YWwgaW1hZ2Ugc2l6ZSIpLEFtKCksQW0oKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgpO3JjKDcpLERtKCJtYXgiLDJlMykoIm1pbiIsMCkoInN0ZXAiLDEwKSgidmFsdWUiLHQuaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSkoInRodW1iTGFiZWwiLCEwKSgiZGlzcGxheVdpdGgiLHQuZm9ybWF0TWlsbGlUb1plcm90aCkscmMoNyksRG0oIm1heCIsNWUzKSgibWluIiwwKSgic3RlcCIsMTApKCJ2YWx1ZSIsdC5pbWFnZUNvbnRyYXN0SW5NaWxsaSkoInRodW1iTGFiZWwiLCEwKSgiZGlzcGxheVdpdGgiLHQuZm9ybWF0TWlsbGlUb1plcm90aCkscmMoNCksRG0oImNoZWNrZWQiLHQuaW1hZ2VTaG93QWN0dWFsU2l6ZSl9fWVodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8ZWh0KX0sZWh0Lsm1Y21wPXRvKHt0eXBlOmVodCxzZWxlY3RvcnM6W1sidGItZHJvcGRvd24iXV0saW5wdXRzOnt2YWx1ZToidmFsdWUiLG9wdGlvbnM6Im9wdGlvbnMifSxvdXRwdXRzOntzZWxlY3Rpb25DaGFuZ2U6InNlbGVjdGlvbkNoYW5nZSJ9LGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWzMsInZhbHVlIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiwiZGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSIsImRpc2FibGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJtYXQtc2VsZWN0IiwwKSxWbSgic2VsZWN0aW9uQ2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5zZWxlY3Rpb25DaGFuZ2UuZW1pdChlLnZhbHVlKX0pKSxRcCgxLHRodCwyLDMsIm1hdC1vcHRpb24iLDEpLEFtKCkpLDImZSYmKERtKCJ2YWx1ZSIsbi52YWx1ZSkscmMoMSksRG0oIm5nRm9yT2YiLG4ub3B0aW9ucykpfSxkaXJlY3RpdmVzOltBRyxsTSxCSF0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9bWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjOGU5OGEzO2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjZweH1tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLXN0eWxlOmF1dG99ICAubWF0LXNlbGVjdC1wYW5lbHttYXgtd2lkdGg6NzB2d30gIG1hdC1vcHRpb24ubWF0LW9wdGlvbntoZWlnaHQ6YXV0b30gIC5tYXQtb3B0aW9uLXRleHR7d2hpdGUtc3BhY2U6bm9ybWFsO3dvcmQtYnJlYWs6YnJlYWstYWxsfSddfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChlaHQsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoidGItZHJvcGRvd24iLHRlbXBsYXRlOidcbiAgICA8bWF0LXNlbGVjdFxuICAgICAgW3ZhbHVlXT0idmFsdWUiXG4gICAgICAoc2VsZWN0aW9uQ2hhbmdlKT0ic2VsZWN0aW9uQ2hhbmdlLmVtaXQoJGV2ZW50LnZhbHVlKSJcbiAgICA+XG4gICAgICA8bWF0LW9wdGlvblxuICAgICAgICAqbmdGb3I9ImxldCBvcHRpb24gb2Ygb3B0aW9ucyJcbiAgICAgICAgW3ZhbHVlXT0ib3B0aW9uLnZhbHVlIlxuICAgICAgICBbZGlzYWJsZWRdPSJvcHRpb24uZGlzYWJsZWQiXG4gICAgICA+XG4gICAgICAgIHt7IG9wdGlvbi5kaXNwbGF5VGV4dCB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbiAgJyxzdHlsZVVybHM6WyJkcm9wZG93bl9jb21wb25lbnQuY3NzIl19XX1dLG51bGwse3ZhbHVlOlt7dHlwZTp4eX1dLG9wdGlvbnM6W3t0eXBlOnh5fV0sc2VsZWN0aW9uQ2hhbmdlOlt7dHlwZTpPeX1dfSk7Y2xhc3Mgcmh0e2NvbnN0cnVjdG9yKHQpe3RoaXMubG9jYWxlPXQsdGhpcy5zZWxlY3RUaW1lRW5hYmxlVG9nZ2xlZD1uZXcgTGgsdGhpcy51c2VSYW5nZVNlbGVjdFRpbWVUb2dnbGVkPW5ldyBMaCx0aGlzLnNlbGVjdFRpbWVDaGFuZ2VkPW5ldyBMaCx0aGlzLlRvb2x0aXBTb3J0RHJvcGRvd25PcHRpb25zPVt7dmFsdWU6YkEuREVGQVVMVCxkaXNwbGF5VGV4dDoiRGVmYXVsdCJ9LHt2YWx1ZTpiQS5BU0NFTkRJTkcsZGlzcGxheVRleHQ6IkFzY2VuZGluZyJ9LHt2YWx1ZTpiQS5ERVNDRU5ESU5HLGRpc3BsYXlUZXh0OiJEZXNjZW5kaW5nIn0se3ZhbHVlOmJBLk5FQVJFU1QsZGlzcGxheVRleHQ6Ik5lYXJlc3QifV0sdGhpcy50b29sdGlwU29ydENoYW5nZWQ9bmV3IExoLHRoaXMuaWdub3JlT3V0bGllcnNDaGFuZ2VkPW5ldyBMaCx0aGlzLlhBeGlzVHlwZT15QSx0aGlzLlhBeGlzVHlwZURyb3Bkb3duT3B0aW9ucz1be3ZhbHVlOnlBLlNURVAsZGlzcGxheVRleHQ6IlN0ZXAifSx7dmFsdWU6eUEuUkVMQVRJVkUsZGlzcGxheVRleHQ6IlJlbGF0aXZlIn0se3ZhbHVlOnlBLldBTExfVElNRSxkaXNwbGF5VGV4dDoiV2FsbCJ9XSx0aGlzLnhBeGlzVHlwZUNoYW5nZWQ9bmV3IExoLHRoaXMuSGlzdG9ncmFtTW9kZURyb3Bkb3duT3B0aW9ucz1be3ZhbHVlOnBFLk9GRlNFVCxkaXNwbGF5VGV4dDoiT2Zmc2V0In0se3ZhbHVlOnBFLk9WRVJMQVksZGlzcGxheVRleHQ6Ik92ZXJsYXkifV0sdGhpcy5oaXN0b2dyYW1Nb2RlQ2hhbmdlZD1uZXcgTGgsdGhpcy5NQVhfU01PT1RISU5HX1ZBTFVFPS45OTksdGhpcy5NQVhfU01PT1RISU5HX1NMSURFUl9WQUxVRT0uOTksdGhpcy5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQ9bmV3IExoLHRoaXMuc2NhbGFyU21vb3RoaW5nQ2hhbmdlZD10aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJC5waXBlKGRlKDI1MCkpLHRoaXMuc2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQ9bmV3IExoLHRoaXMuaW1hZ2VCcmlnaHRuZXNzU2xpZGVyQ2hhbmdlZCQ9bmV3IExoLHRoaXMuaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQ9dGhpcy5pbWFnZUJyaWdodG5lc3NTbGlkZXJDaGFuZ2VkJC5waXBlKGRlKDI1MCkpLHRoaXMuaW1hZ2VCcmlnaHRuZXNzUmVzZXQ9bmV3IExoLHRoaXMuaW1hZ2VDb250cmFzdFNsaWRlckNoYW5nZWQkPW5ldyBMaCx0aGlzLmltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZD10aGlzLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJC5waXBlKGRlKDI1MCkpLHRoaXMuaW1hZ2VDb250cmFzdFJlc2V0PW5ldyBMaCx0aGlzLmltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkPW5ldyBMaH1vblNjYWxhclNtb290aGluZ0lucHV0KHQpe2NvbnN0IGU9dC50YXJnZXQ7aWYoIWUudmFsdWUpcmV0dXJuO2NvbnN0IG49TWF0aC5taW4oTWF0aC5tYXgoMCxwYXJzZUZsb2F0KGUudmFsdWUpKSwuOTk5KTtuIT09cGFyc2VGbG9hdChlLnZhbHVlKSYmKGUudmFsdWU9U3RyaW5nKG4pKSx0aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJC5lbWl0KG4pfWZvcm1hdE1pbGxpVG9aZXJvdGgodCl7cmV0dXJuIFFDKHQvMWUzLHRoaXMubG9jYWxlfHwiZW4tVVMiLCIxLjAtMiIpfW9uU3RlcFN0YXJ0Q2hhbmdlZCh0KXt0aGlzLnNlbGVjdFRpbWVDaGFuZ2VkLmVtaXQoe3N0YXJ0OntzdGVwOnR9LGVuZDpudWxsfSl9b25TdGVwUmFuZ2VDaGFuZ2VkKHtsb3dlclZhbHVlOnQsdXBwZXJWYWx1ZTplfSl7dGhpcy5zZWxlY3RUaW1lQ2hhbmdlZC5lbWl0KHtzdGFydDp7c3RlcDp0fSxlbmQ6e3N0ZXA6ZX19KX19cmh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxyaHQpKFNtKFd5KSl9LHJodC7JtWNtcD10byh7dHlwZTpyaHQsc2VsZWN0b3JzOltbIm1ldHJpY3MtZGFzaGJvYXJkLXNldHRpbmdzLWNvbXBvbmVudCJdXSxpbnB1dHM6e2lzTGlua2VkVGltZUZlYXR1cmVFbmFibGVkOiJpc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCIsc2VsZWN0VGltZUVuYWJsZWQ6InNlbGVjdFRpbWVFbmFibGVkIix1c2VSYW5nZVNlbGVjdFRpbWU6InVzZVJhbmdlU2VsZWN0VGltZSIsc2VsZWN0ZWRUaW1lOiJzZWxlY3RlZFRpbWUiLHN0ZXBNaW5NYXg6InN0ZXBNaW5NYXgiLGlzSW1hZ2VTdXBwb3J0RW5hYmxlZDoiaXNJbWFnZVN1cHBvcnRFbmFibGVkIix0b29sdGlwU29ydDoidG9vbHRpcFNvcnQiLGlnbm9yZU91dGxpZXJzOiJpZ25vcmVPdXRsaWVycyIseEF4aXNUeXBlOiJ4QXhpc1R5cGUiLGhpc3RvZ3JhbU1vZGU6Imhpc3RvZ3JhbU1vZGUiLHNjYWxhclNtb290aGluZzoic2NhbGFyU21vb3RoaW5nIixzY2FsYXJQYXJ0aXRpb25YOiJzY2FsYXJQYXJ0aXRpb25YIixpbWFnZUJyaWdodG5lc3NJbk1pbGxpOiJpbWFnZUJyaWdodG5lc3NJbk1pbGxpIixpbWFnZUNvbnRyYXN0SW5NaWxsaToiaW1hZ2VDb250cmFzdEluTWlsbGkiLGltYWdlU2hvd0FjdHVhbFNpemU6ImltYWdlU2hvd0FjdHVhbFNpemUifSxvdXRwdXRzOntzZWxlY3RUaW1lRW5hYmxlVG9nZ2xlZDoic2VsZWN0VGltZUVuYWJsZVRvZ2dsZWQiLHVzZVJhbmdlU2VsZWN0VGltZVRvZ2dsZWQ6InVzZVJhbmdlU2VsZWN0VGltZVRvZ2dsZWQiLHNlbGVjdFRpbWVDaGFuZ2VkOiJzZWxlY3RUaW1lQ2hhbmdlZCIsdG9vbHRpcFNvcnRDaGFuZ2VkOiJ0b29sdGlwU29ydENoYW5nZWQiLGlnbm9yZU91dGxpZXJzQ2hhbmdlZDoiaWdub3JlT3V0bGllcnNDaGFuZ2VkIix4QXhpc1R5cGVDaGFuZ2VkOiJ4QXhpc1R5cGVDaGFuZ2VkIixoaXN0b2dyYW1Nb2RlQ2hhbmdlZDoiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLHNjYWxhclNtb290aGluZ0NoYW5nZWQ6InNjYWxhclNtb290aGluZ0NoYW5nZWQiLHNjYWxhclBhcnRpdGlvblhUb2dnbGVkOiJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQ6ImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIixpbWFnZUJyaWdodG5lc3NSZXNldDoiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLGltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZDoiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIixpbWFnZUNvbnRyYXN0UmVzZXQ6ImltYWdlQ29udHJhc3RSZXNldCIsaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ6ImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIn0sZGVjbHM6MzYsdmFyczoxNyxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJSZXNldCBicmlnaHRuZXNzIik6JGxvY2FsaXplYDpBIGJ1dHRvbiB0byByZXNldCB0aGUgaW1hZ2UgYnJpZ2h0bmVzcyBzZXR0aW5n4pCfYzQ4MmIzYTQ3ZWEwOTc1ZmE4YmUwMWFmYjNmYmVjOWI3NjYyOGJkN+KQnzExODkxNjE4NTcyNDAzNzgzOTU6UmVzZXQgYnJpZ2h0bmVzc2AsZT0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiUmVzZXQgY29udHJhc3QiKTokbG9jYWxpemVgOkEgYnV0dG9uIHRvIHJlc2V0IHRoZSBpbWFnZSBjb250cmFzdCBzZXR0aW5n4pCfZWQ3MTJhOGI5MjcwNDFiZTE1MjUyYjI5ZWI1MjFlYmIxMzc0YmFkOOKQnzUzNzA3MDMzNDI5MjM2MTE5NTU6UmVzZXQgY29udHJhc3RgLFtbMSwiZ2VuZXJhbCJdLFsxLCJzZWN0aW9uLXRpdGxlIl0sWzEsImNvbnRyb2wtcm93IiwieC1heGlzLXR5cGUiXSxbImlkIiwieC1heGlzLXR5cGUtbGFiZWwiLDEsImNvbnRyb2wtbmFtZSJdLFszLCJ2YWx1ZSIsIm9wdGlvbnMiLCJzZWxlY3Rpb25DaGFuZ2UiXSxbImNsYXNzIiwiY29udHJvbC1yb3cgbGlua2VkLXRpbWUiLDQsIm5nSWYiXSxbMSwic2NhbGFycyJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtc21vb3RoaW5nIl0sWyJpZCIsInNjYWxhcnMtc21vb3RoaW5nLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbMSwic2xpZGVyLXJvdyJdLFsiYXJpYS1sYWJlbGxlZGJ5Iiwic2NhbGFycy1zbW9vdGhpbmctbGFiZWwiLCJjb2xvciIsInByaW1hcnkiLDMsIm1heCIsIm1pbiIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJpbnB1dCJdLFsiYXJpYS1sYWJlbGxlZGJ5Iiwic2NhbGFycy1zbW9vdGhpbmctbGFiZWwiLCJ0eXBlIiwibnVtYmVyIiwibWluIiwiMCIsInN0ZXAiLCIwLjAwMSIsMSwic2xpZGVyLWlucHV0IiwzLCJtYXgiLCJ2YWx1ZSIsImlucHV0Il0sWzEsImNvbnRyb2wtcm93IiwidG9vbHRpcC1zb3J0Il0sWzEsImNvbnRyb2wtbmFtZSJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtaWdub3JlLW91dGxpZXJzIl0sWzMsImNoZWNrZWQiLCJjaGFuZ2UiXSxbMSwiY29udHJvbC1yb3ciLCJzY2FsYXJzLXBhcnRpdGlvbi14Il0sWyJzdmdJY29uIiwiaGVscF9vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIk5vbi1tb25vdG9uaWMgc3RlcHMgY2FuIG9jY3VyIHdoZW4gcmV1c2luZyBhIGxvZ2RpciB3aXRoIG11bHRpcGxlIHN1bW1hcnkgd3JpdGVycyBhbmQgb3ZlcmxhcHBpbmcgc3RlcHMuIExpbmUgY2hhcnRzLCB3aXRob3V0IHRoaXMgb3B0aW9uIGVuYWJsZWQsIGNhbiBhcHBlYXIgemlnIHphZ2dlZC4gVGhpcyBpcyBjb21tb24gd2hlbiByZXN0YXJ0aW5nIGZyb20gYSBjaGVja3BvaW50LlxuXG5XaGVuIGVuYWJsZWQsIGEgbm9uLW1vbm90b25pYyB0aW1lIHNlcmllcyBjb21wb3NlZCBvZiBOIG1vbm90b25pYyBwaWVjZXMgd2lsbCBiZSBzaG93biBhcyBOIG1vbm90b25pYyBsaW5lcy4iLDEsImluZm8iXSxbMSwiSGlzdG9ncmFtcyJdLFsxLCJjb250cm9sLXJvdyIsImhpc3RvZ3JhbS1tb2RlIl0sWyJjbGFzcyIsImltYWdlIiw0LCJuZ0lmIl0sWzEsImNvbnRyb2wtcm93IiwibGlua2VkLXRpbWUiXSxbMSwiY29udHJvbHMiXSxbMSwic3RlcC1zZWxlY3RvciJdLFsiY29sb3IiLCJwcmltYXJ5IiwzLCJkaXNhYmxlZCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJpbnB1dCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJyYW5nZSIsIiJdLFsiY29sb3IiLCJwcmltYXJ5IiwzLCJkaXNhYmxlZCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJpbnB1dCJdLFszLCJtaW4iLCJtYXgiLCJsb3dlclZhbHVlIiwidXBwZXJWYWx1ZSIsInZhbHVlIl0sWzEsImltYWdlIl0sWzEsImNvbnRyb2wtcm93IiwiaW1hZ2UtYnJpZ2h0bmVzcyJdLFsiaWQiLCJpbWFnZS1icmlnaHRuZXNzLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbImFyaWEtbGFiZWxsZWRieSIsImltYWdlLWJyaWdodG5lc3MtbGFiZWwiLCJjb2xvciIsInByaW1hcnkiLDMsIm1heCIsIm1pbiIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJkaXNwbGF5V2l0aCIsImlucHV0Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LCJ0aXRsZSIsIlJlc2V0IGJyaWdodG5lc3MiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc19iYWNrdXBfcmVzdG9yZV8yNHB4Il0sWzEsImNvbnRyb2wtcm93IiwiaW1hZ2UtY29udHJhc3QiXSxbImlkIiwiaW1hZ2UtY29uc3RyYXN0LWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbImFyaWEtbGFiZWxsZWRieSIsImltYWdlLWNvbnN0cmFzdC1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImRpc3BsYXlXaXRoIiwiaW5wdXQiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiUmVzZXQgY29udHJhc3QiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbMSwiY29udHJvbC1yb3ciLCJpbWFnZS1zaG93LWFjdHVhbC1zaXplIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwic2VjdGlvbiIsMCksUm0oMSwiaDMiLDEpLGt1KDIsIkdlbmVyYWwiKSxBbSgpLFJtKDMsImRpdiIsMiksUm0oNCwiZGl2IiwzKSxrdSg1LCJIb3Jpem9udGFsIEF4aXMiKSxBbSgpLFJtKDYsInRiLWRyb3Bkb3duIiw0KSxWbSgic2VsZWN0aW9uQ2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi54QXhpc1R5cGVDaGFuZ2VkLmVtaXQoZSl9KSksQW0oKSxBbSgpLFFwKDcsaWh0LDE0LDQsImRpdiIsNSksQW0oKSxSbSg4LCJzZWN0aW9uIiw2KSxSbSg5LCJoMyIsMSksa3UoMTAsIlNjYWxhcnMiKSxBbSgpLFJtKDExLCJkaXYiLDcpLFJtKDEyLCJkaXYiLDgpLGt1KDEzLCJTbW9vdGhpbmciKSxBbSgpLFJtKDE0LCJkaXYiLDkpLFJtKDE1LCJtYXQtc2xpZGVyIiwxMCksVm0oImlucHV0IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQuZW1pdChlLnZhbHVlKX0pKSxBbSgpLFJtKDE2LCJpbnB1dCIsMTEpLFZtKCJpbnB1dCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25TY2FsYXJTbW9vdGhpbmdJbnB1dChlKX0pKSxBbSgpLEFtKCksQW0oKSxSbSgxNywiZGl2IiwxMiksUm0oMTgsImRpdiIsMTMpLGt1KDE5LCJUb29sdGlwIHNvcnRpbmcgbWV0aG9kIiksQW0oKSxSbSgyMCwidGItZHJvcGRvd24iLDQpLFZtKCJzZWxlY3Rpb25DaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLnRvb2x0aXBTb3J0Q2hhbmdlZC5lbWl0KGUpfSkpLEFtKCksQW0oKSxSbSgyMSwiZGl2IiwxNCksUm0oMjIsIm1hdC1jaGVja2JveCIsMTUpLFZtKCJjaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmlnbm9yZU91dGxpZXJzQ2hhbmdlZC5lbWl0KGUuY2hlY2tlZCl9KSksa3UoMjMsIklnbm9yZSBvdXRsaWVycyBpbiBjaGFydCBzY2FsaW5nIiksQW0oKSxBbSgpLFJtKDI0LCJkaXYiLDE2KSxSbSgyNSwibWF0LWNoZWNrYm94IiwxNSksVm0oImNoYW5nZSIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5zY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZC5lbWl0KCl9KSksa3UoMjYsIlBhcnRpdGlvbiBub24tbW9ub3RvbmljIFggYXhpcyIpLEFtKCksVG0oMjcsIm1hdC1pY29uIiwxNyksQW0oKSxBbSgpLFJtKDI4LCJzZWN0aW9uIiwxOCksUm0oMjksImgzIiwxKSxrdSgzMCwiSGlzdG9ncmFtcyIpLEFtKCksUm0oMzEsImRpdiIsMTkpLFJtKDMyLCJkaXYiLDEzKSxrdSgzMywiTW9kZSIpLEFtKCksUm0oMzQsInRiLWRyb3Bkb3duIiw0KSxWbSgic2VsZWN0aW9uQ2hhbmdlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5oaXN0b2dyYW1Nb2RlQ2hhbmdlZC5lbWl0KGUpfSkpLEFtKCksQW0oKSxBbSgpLFFwKDM1LGFodCwyMCwxMywic2VjdGlvbiIsMjApKSwyJmUmJihyYyg2KSxEbSgidmFsdWUiLG4ueEF4aXNUeXBlKSgib3B0aW9ucyIsbi5YQXhpc1R5cGVEcm9wZG93bk9wdGlvbnMpLHJjKDEpLERtKCJuZ0lmIixuLmlzTGlua2VkVGltZUZlYXR1cmVFbmFibGVkJiZuLnhBeGlzVHlwZT09bi5YQXhpc1R5cGUuU1RFUCkscmMoOCksRG0oIm1heCIsbi5NQVhfU01PT1RISU5HX1NMSURFUl9WQUxVRSkoIm1pbiIsMCkoInN0ZXAiLC4wMSkoInZhbHVlIixuLnNjYWxhclNtb290aGluZykoInRodW1iTGFiZWwiLCEwKSxyYygxKSxEbSgibWF4IixuLk1BWF9TTU9PVEhJTkdfVkFMVUUpKCJ2YWx1ZSIsbi5zY2FsYXJTbW9vdGhpbmcpLHJjKDQpLERtKCJ2YWx1ZSIsbi50b29sdGlwU29ydCkoIm9wdGlvbnMiLG4uVG9vbHRpcFNvcnREcm9wZG93bk9wdGlvbnMpLHJjKDIpLERtKCJjaGVja2VkIixuLmlnbm9yZU91dGxpZXJzKSxyYygzKSxEbSgiY2hlY2tlZCIsbi5zY2FsYXJQYXJ0aXRpb25YKSxyYyg5KSxEbSgidmFsdWUiLG4uaGlzdG9ncmFtTW9kZSkoIm9wdGlvbnMiLG4uSGlzdG9ncmFtTW9kZURyb3Bkb3duT3B0aW9ucykscmMoMSksRG0oIm5nSWYiLG4uaXNJbWFnZVN1cHBvcnRFbmFibGVkKSl9LGRpcmVjdGl2ZXM6W2VodCxkTSxSWCxPWSxEVyxEMSxYSF0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZToxMnB4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO3BhZGRpbmc6MTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBzZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uc2VjdGlvbi10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzIxMjEyMTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0Om5vcm1hbDttYXJnaW46MCAwIDEycHggMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2VjdGlvbi10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zZWN0aW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRyb2wtcm93W19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1ib3R0b206MTJweH0uY29udHJvbC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjhweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MjhweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAucmVzZXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDo2cHh9LnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlcjoxcHggc29saWQgIzhlOThhMztib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MTAwJTttYXJnaW4tbGVmdDoxMnB4O3BhZGRpbmc6MCA0cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zbGlkZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNDI1MDY2fS5zY2FsYXJzLXNtb290aGluZ1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4Om5vbmU7d2lkdGg6NWVtfS5zY2FsYXJzLXBhcnRpdGlvbi14W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4fS5zY2FsYXJzLXBhcnRpdGlvbi14W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTVweDttYXJnaW4tbGVmdDo1cHg7d2lkdGg6MTVweH1tYXQtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjE7bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tcmlnaHQ6LThweH10Yi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30ubGlua2VkLXRpbWVbX25nY29udGVudC0lQ09NUCVdICAgLnN0ZXAtc2VsZWN0b3JbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MCAxMHB4fS5saW5rZWQtdGltZVtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmxpbmtlZC10aW1lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRiLXJhbmdlLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5saW5rZWQtdGltZVtfbmdjb250ZW50LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6NXB4fSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChyaHQsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoic2V0dGluZ3Nfdmlld19jb21wb25lbnQubmcuaHRtbCIsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaCxzdHlsZVVybHM6WyJzZXR0aW5nc192aWV3X2NvbXBvbmVudC5jc3MiXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltXeV19XX1dfSkse2lzTGlua2VkVGltZUZlYXR1cmVFbmFibGVkOlt7dHlwZTp4eX1dLHNlbGVjdFRpbWVFbmFibGVkOlt7dHlwZTp4eX1dLHVzZVJhbmdlU2VsZWN0VGltZTpbe3R5cGU6eHl9XSxzZWxlY3RlZFRpbWU6W3t0eXBlOnh5fV0sc3RlcE1pbk1heDpbe3R5cGU6eHl9XSxzZWxlY3RUaW1lRW5hYmxlVG9nZ2xlZDpbe3R5cGU6T3l9XSx1c2VSYW5nZVNlbGVjdFRpbWVUb2dnbGVkOlt7dHlwZTpPeX1dLHNlbGVjdFRpbWVDaGFuZ2VkOlt7dHlwZTpPeX1dLGlzSW1hZ2VTdXBwb3J0RW5hYmxlZDpbe3R5cGU6eHl9XSx0b29sdGlwU29ydDpbe3R5cGU6eHl9XSx0b29sdGlwU29ydENoYW5nZWQ6W3t0eXBlOk95fV0saWdub3JlT3V0bGllcnM6W3t0eXBlOnh5fV0saWdub3JlT3V0bGllcnNDaGFuZ2VkOlt7dHlwZTpPeX1dLHhBeGlzVHlwZTpbe3R5cGU6eHl9XSx4QXhpc1R5cGVDaGFuZ2VkOlt7dHlwZTpPeX1dLGhpc3RvZ3JhbU1vZGU6W3t0eXBlOnh5fV0saGlzdG9ncmFtTW9kZUNoYW5nZWQ6W3t0eXBlOk95fV0sc2NhbGFyU21vb3RoaW5nOlt7dHlwZTp4eX1dLHNjYWxhclNtb290aGluZ0NoYW5nZWQ6W3t0eXBlOk95fV0sc2NhbGFyUGFydGl0aW9uWDpbe3R5cGU6eHl9XSxzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZDpbe3R5cGU6T3l9XSxpbWFnZUJyaWdodG5lc3NJbk1pbGxpOlt7dHlwZTp4eX1dLGltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkOlt7dHlwZTpPeX1dLGltYWdlQnJpZ2h0bmVzc1Jlc2V0Olt7dHlwZTpPeX1dLGltYWdlQ29udHJhc3RJbk1pbGxpOlt7dHlwZTp4eX1dLGltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZDpbe3R5cGU6T3l9XSxpbWFnZUNvbnRyYXN0UmVzZXQ6W3t0eXBlOk95fV0saW1hZ2VTaG93QWN0dWFsU2l6ZTpbe3R5cGU6eHl9XSxpbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZDpbe3R5cGU6T3l9XX0pO2NsYXNzIHNodHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5pc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoaUUpLHRoaXMuc2VsZWN0VGltZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGpUKSx0aGlzLnVzZVJhbmdlU2VsZWN0VGltZSQ9dGhpcy5zdG9yZS5zZWxlY3QoVVQpLHRoaXMuc2VsZWN0ZWRUaW1lJD10aGlzLnN0b3JlLnNlbGVjdChXVCksdGhpcy5zdGVwTWluTWF4JD10aGlzLnN0b3JlLnNlbGVjdChHVCksdGhpcy5pc0ltYWdlU3VwcG9ydEVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KHFEKS5waXBlKGNlKEJvb2xlYW4pLGJlKDEpLFZlKHRoaXMuc3RvcmUuc2VsZWN0KG9FKSksSXQoKChbLHRdKT0+dCkpKSx0aGlzLnRvb2x0aXBTb3J0JD10aGlzLnN0b3JlLnNlbGVjdChSVCksdGhpcy5pZ25vcmVPdXRsaWVycyQ9dGhpcy5zdG9yZS5zZWxlY3QoQVQpLHRoaXMueEF4aXNUeXBlJD10aGlzLnN0b3JlLnNlbGVjdChUVCksdGhpcy5oaXN0b2dyYW1Nb2RlJD10aGlzLnN0b3JlLnNlbGVjdChOVCksdGhpcy5zY2FsYXJTbW9vdGhpbmckPXRoaXMuc3RvcmUuc2VsZWN0KHpUKSx0aGlzLnNjYWxhclBhcnRpdGlvblgkPXRoaXMuc3RvcmUuc2VsZWN0KElUKSx0aGlzLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KEhUKSx0aGlzLmltYWdlQ29udHJhc3RJbk1pbGxpJD10aGlzLnN0b3JlLnNlbGVjdChGVCksdGhpcy5pbWFnZVNob3dBY3R1YWxTaXplJD10aGlzLnN0b3JlLnNlbGVjdChMVCl9b25Ub29sdGlwU29ydENoYW5nZWQodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChMRSh7c29ydDp0fSkpfW9uSWdub3JlT3V0bGllcnNDaGFuZ2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChCRSgpKX1vblhBeGlzVHlwZUNoYW5nZWQodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChWRSh7eEF4aXNUeXBlOnR9KSl9b25IaXN0b2dyYW1Nb2RlQ2hhbmdlZCh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKFhFKHtoaXN0b2dyYW1Nb2RlOnR9KSl9b25TY2FsYXJTbW9vdGhpbmdDaGFuZ2VkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goakUoe3Ntb290aGluZzp0fSkpfW9uU2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFVFKCkpfW9uSW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChHRSh7YnJpZ2h0bmVzc0luTWlsbGk6dH0pKX1vbkltYWdlQnJpZ2h0bmVzc1Jlc2V0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaChZRSgpKX1vbkltYWdlQ29udHJhc3RSZXNldCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2gocUUoKSl9b25JbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChXRSh7Y29udHJhc3RJbk1pbGxpOnR9KSl9b25JbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goWkUoKSl9b25TZWxlY3RUaW1lRW5hYmxlVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2gobFIoKSl9b25Vc2VSYW5nZVNlbGVjdFRpbWVUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChjUigpKX1vblNlbGVjdFRpbWVDaGFuZ2VkKHQpe3ZhciBlO3RoaXMuc3RvcmUuZGlzcGF0Y2goclIoe3N0YXJ0U3RlcDp0LnN0YXJ0LnN0ZXAsZW5kU3RlcDpudWxsPT09KGU9dC5lbmQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN0ZXB9KSl9fXNodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8c2h0KShTbShJdykpfSxzaHQuybVjbXA9dG8oe3R5cGU6c2h0LHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncyJdXSxkZWNsczoxNix2YXJzOjQ1LGNvbnN0czpbWzMsImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCIsInRvb2x0aXBTb3J0IiwiaWdub3JlT3V0bGllcnMiLCJ4QXhpc1R5cGUiLCJoaXN0b2dyYW1Nb2RlIiwic2NhbGFyU21vb3RoaW5nIiwic2NhbGFyUGFydGl0aW9uWCIsImltYWdlQnJpZ2h0bmVzc0luTWlsbGkiLCJpbWFnZUNvbnRyYXN0SW5NaWxsaSIsImltYWdlU2hvd0FjdHVhbFNpemUiLCJpc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCIsInNlbGVjdFRpbWVFbmFibGVkIiwic2VsZWN0ZWRUaW1lIiwidXNlUmFuZ2VTZWxlY3RUaW1lIiwic3RlcE1pbk1heCIsInRvb2x0aXBTb3J0Q2hhbmdlZCIsImlnbm9yZU91dGxpZXJzQ2hhbmdlZCIsInhBeGlzVHlwZUNoYW5nZWQiLCJoaXN0b2dyYW1Nb2RlQ2hhbmdlZCIsInNjYWxhclNtb290aGluZ0NoYW5nZWQiLCJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIiwiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLCJpbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQiLCJpbWFnZUNvbnRyYXN0UmVzZXQiLCJpbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCIsInNlbGVjdFRpbWVFbmFibGVUb2dnbGVkIiwidXNlUmFuZ2VTZWxlY3RUaW1lVG9nZ2xlZCIsInNlbGVjdFRpbWVDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncy1jb21wb25lbnQiLDApLFZtKCJ0b29sdGlwU29ydENoYW5nZWQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uVG9vbHRpcFNvcnRDaGFuZ2VkKGUpfSkpKCJpZ25vcmVPdXRsaWVyc0NoYW5nZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25JZ25vcmVPdXRsaWVyc0NoYW5nZWQoKX0pKSgieEF4aXNUeXBlQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25YQXhpc1R5cGVDaGFuZ2VkKGUpfSkpKCJoaXN0b2dyYW1Nb2RlQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25IaXN0b2dyYW1Nb2RlQ2hhbmdlZChlKX0pKSgic2NhbGFyU21vb3RoaW5nQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25TY2FsYXJTbW9vdGhpbmdDaGFuZ2VkKGUpfSkpKCJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblNjYWxhclBhcnRpdGlvblhUb2dnbGVkKCl9KSkoImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vbkltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkKGUpfSkpKCJpbWFnZUJyaWdodG5lc3NSZXNldCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkltYWdlQnJpZ2h0bmVzc1Jlc2V0KCl9KSkoImltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25JbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQoZSl9KSkoImltYWdlQ29udHJhc3RSZXNldCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkltYWdlQ29udHJhc3RSZXNldCgpfSkpKCJpbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkKCl9KSkoInNlbGVjdFRpbWVFbmFibGVUb2dnbGVkIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uU2VsZWN0VGltZUVuYWJsZVRvZ2dsZWQoKX0pKSgidXNlUmFuZ2VTZWxlY3RUaW1lVG9nZ2xlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblVzZVJhbmdlU2VsZWN0VGltZVRvZ2dsZWQoKX0pKSgic2VsZWN0VGltZUNoYW5nZWQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uU2VsZWN0VGltZUNoYW5nZWQoZSl9KSksQWgoMSwiYXN5bmMiKSxBaCgyLCJhc3luYyIpLEFoKDMsImFzeW5jIiksQWgoNCwiYXN5bmMiKSxBaCg1LCJhc3luYyIpLEFoKDYsImFzeW5jIiksQWgoNywiYXN5bmMiKSxBaCg4LCJhc3luYyIpLEFoKDksImFzeW5jIiksQWgoMTAsImFzeW5jIiksQWgoMTEsImFzeW5jIiksQWgoMTIsImFzeW5jIiksQWgoMTMsImFzeW5jIiksQWgoMTQsImFzeW5jIiksQWgoMTUsImFzeW5jIiksQW0oKSksMiZlJiZEbSgiaXNJbWFnZVN1cHBvcnRFbmFibGVkIixUaCgxLDE1LG4uaXNJbWFnZVN1cHBvcnRFbmFibGVkJCkpKCJ0b29sdGlwU29ydCIsVGgoMiwxNyxuLnRvb2x0aXBTb3J0JCkpKCJpZ25vcmVPdXRsaWVycyIsVGgoMywxOSxuLmlnbm9yZU91dGxpZXJzJCkpKCJ4QXhpc1R5cGUiLFRoKDQsMjEsbi54QXhpc1R5cGUkKSkoImhpc3RvZ3JhbU1vZGUiLFRoKDUsMjMsbi5oaXN0b2dyYW1Nb2RlJCkpKCJzY2FsYXJTbW9vdGhpbmciLFRoKDYsMjUsbi5zY2FsYXJTbW9vdGhpbmckKSkoInNjYWxhclBhcnRpdGlvblgiLFRoKDcsMjcsbi5zY2FsYXJQYXJ0aXRpb25YJCkpKCJpbWFnZUJyaWdodG5lc3NJbk1pbGxpIixUaCg4LDI5LG4uaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSQpKSgiaW1hZ2VDb250cmFzdEluTWlsbGkiLFRoKDksMzEsbi5pbWFnZUNvbnRyYXN0SW5NaWxsaSQpKSgiaW1hZ2VTaG93QWN0dWFsU2l6ZSIsVGgoMTAsMzMsbi5pbWFnZVNob3dBY3R1YWxTaXplJCkpKCJpc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCIsVGgoMTEsMzUsbi5pc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCQpKSgic2VsZWN0VGltZUVuYWJsZWQiLFRoKDEyLDM3LG4uc2VsZWN0VGltZUVuYWJsZWQkKSkoInNlbGVjdGVkVGltZSIsVGgoMTMsMzksbi5zZWxlY3RlZFRpbWUkKSkoInVzZVJhbmdlU2VsZWN0VGltZSIsVGgoMTQsNDEsbi51c2VSYW5nZVNlbGVjdFRpbWUkKSkoInN0ZXBNaW5NYXgiLFRoKDE1LDQzLG4uc3RlcE1pbk1heCQpKX0sZGlyZWN0aXZlczpbcmh0XSxwaXBlczpbd01dLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoc2h0LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtZGFzaGJvYXJkLXNldHRpbmdzIix0ZW1wbGF0ZTonXG4gICAgPG1ldHJpY3MtZGFzaGJvYXJkLXNldHRpbmdzLWNvbXBvbmVudFxuICAgICAgW2lzSW1hZ2VTdXBwb3J0RW5hYmxlZF09ImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCQgfCBhc3luYyJcbiAgICAgIFt0b29sdGlwU29ydF09InRvb2x0aXBTb3J0JCB8IGFzeW5jIlxuICAgICAgKHRvb2x0aXBTb3J0Q2hhbmdlZCk9Im9uVG9vbHRpcFNvcnRDaGFuZ2VkKCRldmVudCkiXG4gICAgICBbaWdub3JlT3V0bGllcnNdPSJpZ25vcmVPdXRsaWVycyQgfCBhc3luYyJcbiAgICAgIChpZ25vcmVPdXRsaWVyc0NoYW5nZWQpPSJvbklnbm9yZU91dGxpZXJzQ2hhbmdlZCgpIlxuICAgICAgW3hBeGlzVHlwZV09InhBeGlzVHlwZSQgfCBhc3luYyJcbiAgICAgICh4QXhpc1R5cGVDaGFuZ2VkKT0ib25YQXhpc1R5cGVDaGFuZ2VkKCRldmVudCkiXG4gICAgICBbaGlzdG9ncmFtTW9kZV09Imhpc3RvZ3JhbU1vZGUkIHwgYXN5bmMiXG4gICAgICAoaGlzdG9ncmFtTW9kZUNoYW5nZWQpPSJvbkhpc3RvZ3JhbU1vZGVDaGFuZ2VkKCRldmVudCkiXG4gICAgICBbc2NhbGFyU21vb3RoaW5nXT0ic2NhbGFyU21vb3RoaW5nJCB8IGFzeW5jIlxuICAgICAgKHNjYWxhclNtb290aGluZ0NoYW5nZWQpPSJvblNjYWxhclNtb290aGluZ0NoYW5nZWQoJGV2ZW50KSJcbiAgICAgIFtzY2FsYXJQYXJ0aXRpb25YXT0ic2NhbGFyUGFydGl0aW9uWCQgfCBhc3luYyJcbiAgICAgIChzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCk9Im9uU2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQoKSJcbiAgICAgIFtpbWFnZUJyaWdodG5lc3NJbk1pbGxpXT0iaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSQgfCBhc3luYyJcbiAgICAgIChpbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZCk9Im9uSW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQoJGV2ZW50KSJcbiAgICAgIChpbWFnZUJyaWdodG5lc3NSZXNldCk9Im9uSW1hZ2VCcmlnaHRuZXNzUmVzZXQoKSJcbiAgICAgIFtpbWFnZUNvbnRyYXN0SW5NaWxsaV09ImltYWdlQ29udHJhc3RJbk1pbGxpJCB8IGFzeW5jIlxuICAgICAgKGltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZCk9Im9uSW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkKCRldmVudCkiXG4gICAgICAoaW1hZ2VDb250cmFzdFJlc2V0KT0ib25JbWFnZUNvbnRyYXN0UmVzZXQoKSJcbiAgICAgIFtpbWFnZVNob3dBY3R1YWxTaXplXT0iaW1hZ2VTaG93QWN0dWFsU2l6ZSQgfCBhc3luYyJcbiAgICAgIChpbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCk9Im9uSW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQoKSJcbiAgICAgIFtpc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZF09ImlzTGlua2VkVGltZUZlYXR1cmVFbmFibGVkJCB8IGFzeW5jIlxuICAgICAgW3NlbGVjdFRpbWVFbmFibGVkXT0ic2VsZWN0VGltZUVuYWJsZWQkIHwgYXN5bmMiXG4gICAgICBbc2VsZWN0ZWRUaW1lXT0ic2VsZWN0ZWRUaW1lJCB8IGFzeW5jIlxuICAgICAgW3VzZVJhbmdlU2VsZWN0VGltZV09InVzZVJhbmdlU2VsZWN0VGltZSQgfCBhc3luYyJcbiAgICAgIFtzdGVwTWluTWF4XT0ic3RlcE1pbk1heCQgfCBhc3luYyJcbiAgICAgIChzZWxlY3RUaW1lRW5hYmxlVG9nZ2xlZCk9Im9uU2VsZWN0VGltZUVuYWJsZVRvZ2dsZWQoKSJcbiAgICAgICh1c2VSYW5nZVNlbGVjdFRpbWVUb2dnbGVkKT0ib25Vc2VSYW5nZVNlbGVjdFRpbWVUb2dnbGVkKCkiXG4gICAgICAoc2VsZWN0VGltZUNoYW5nZWQpPSJvblNlbGVjdFRpbWVDaGFuZ2VkKCRldmVudCkiXG4gICAgPlxuICAgIDwvbWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MtY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd31dfSksbnVsbCk7Y2xhc3MgbGh0e31mdW5jdGlvbiBjaHQodCxlKXsxJnQmJlRtKDAsIm1ldHJpY3MtZmlsdGVyZWQtdmlldyIsOSksMiZ0JiZEbSgiY2FyZE9ic2VydmVyIixZbSgpLmNhcmRPYnNlcnZlcil9ZnVuY3Rpb24gZGh0KHQsZSl7MSZ0JiYoUm0oMCwiZGl2IiwxMiksVG0oMSwibWF0LXNwaW5uZXIiLDEzKSxBbSgpKX1mdW5jdGlvbiBwaHQodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJkaXYiLDE0KSxSbSgxLCJkaXYiLDE1KSxSbSgyLCJoMiIsMTYpLGt1KDMsIlNldHRpbmdzIiksQW0oKSxSbSg0LCJidXR0b24iLDE3KSxWbSgiY2xpY2siLChmdW5jdGlvbiBlKCl7cmV0dXJuIGhpKHQpLFltKCkub25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZC5lbWl0KCl9KSksVG0oNSwibWF0LWljb24iLDE4KSxBbSgpLEFtKCksVG0oNiwibWV0cmljcy1kYXNoYm9hcmQtcmlnaHQtcGFuZSIpLEFtKCl9fWxodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bGh0KX0sbGh0Lsm1Y21wPXRvKHt0eXBlOmxodCxzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQtcmlnaHQtcGFuZSJdXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZUbSgwLCJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncyIpfSxkaXJlY3RpdmVzOltzaHRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgobGh0LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtZGFzaGJvYXJkLXJpZ2h0LXBhbmUiLHRlbXBsYXRlOiI8bWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3M+PC9tZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncz4iLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwsbnVsbCk7Y29uc3QgbWh0PWZ1bmN0aW9uKHQpe3JldHVybntjaGVja2VkOnQsInNldHRpbmdzLWJ1dHRvbiI6ITB9fTtjbGFzcyB1aHR7Y29uc3RydWN0b3IodCl7dGhpcy5ob3N0PXQsdGhpcy5vblNldHRpbmdzQnV0dG9uQ2xpY2tlZD1uZXcgTGgsdGhpcy5vbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkPW5ldyBMaCx0aGlzLm9uUGx1Z2luVHlwZVRvZ2dsZWQ9bmV3IExoLHRoaXMub25QbHVnaW5UeXBlQWxsVG9nZ2xlZD1uZXcgTGgsdGhpcy5QbHVnaW5UeXBlPWhBLHRoaXMuY2FyZE9ic2VydmVyPW5ldyBwMih0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwiNjAwcHggMHB4IDYwMHB4IDBweCIpfX11aHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHVodCkoU20oaGcpKX0sdWh0Lsm1Y21wPXRvKHt0eXBlOnVodCxzZWxlY3RvcnM6W1sibWV0cmljcy1tYWluLXZpZXctY29tcG9uZW50Il1dLGlucHV0czp7c2hvd0ZpbHRlcmVkVmlldzoic2hvd0ZpbHRlcmVkVmlldyIsaXNTaWRlcGFuZU9wZW46ImlzU2lkZXBhbmVPcGVuIixmaWx0ZXJlZFBsdWdpblR5cGVzOiJmaWx0ZXJlZFBsdWdpblR5cGVzIixpbml0aWFsVGFnc0xvYWRpbmc6ImluaXRpYWxUYWdzTG9hZGluZyJ9LG91dHB1dHM6e29uU2V0dGluZ3NCdXR0b25DbGlja2VkOiJvblNldHRpbmdzQnV0dG9uQ2xpY2tlZCIsb25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZDoib25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCIsb25QbHVnaW5UeXBlVG9nZ2xlZDoib25QbHVnaW5UeXBlVG9nZ2xlZCIsb25QbHVnaW5UeXBlQWxsVG9nZ2xlZDoib25QbHVnaW5UeXBlQWxsVG9nZ2xlZCJ9LGRlY2xzOjIyLHZhcnM6MjEsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZTtyZXR1cm4gdD0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiVG9nZ2xlIHNldHRpbmdzIHNpZGUgcGFuZSIpOiRsb2NhbGl6ZWA6TGFiZWwgb24gYSB0b29sYmFyIGJ1dHRvbiB0byB0b2dnbGUgdGhlIHNldHRpbmdzIHNpZGUgcGFuZS7ikJ9kMzUxNmRiNmJiZTY4NjBhNTViZWFiNjZlNDk2OWRhYzYyNWI4ZDcy4pCfNzY1OTI4NTQ0NTU4MDgzODkyNTpUb2dnbGUgc2V0dGluZ3Mgc2lkZSBwYW5lYCxlPSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJDbG9zZSBzaWRlIHBhbmUiKTokbG9jYWxpemVgOkxhYmVsIG9uIGEgYnV0dG9uIHRvIGNsb3NlIHRoZSBzZXR0aW5ncyBzaWRlIHBhbmUu4pCfMDQ1MjFkYzBiNmE2NWNmNWMzODI5NDRjOWE4YjRiODQ0YTNlOTU5OOKQnzgxNTY3NjY5OTc3NDcxNjU4NzE6Q2xvc2Ugc2lkZSBwYW5lYCxbWzEsInRvb2xiYXIiXSxbIm11bHRpcGxlIiwiIiwiYXBwZWFyYW5jZSIsInN0YW5kYXJkIiwxLCJmaWx0ZXItdmlldyJdLFszLCJjaGVja2VkIiwiY2xpY2siXSxbMSwicmlnaHQtaXRlbXMiXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywibmdDbGFzcyIsImNsaWNrIl0sWyJzdmdJY29uIiwic2V0dGluZ3NfMjRweCJdLFsxLCJzcGxpdC1jb250ZW50Il0sWyJjZGtTY3JvbGxhYmxlIiwiIl0sWzMsImNhcmRPYnNlcnZlciIsNCwibmdJZiJdLFszLCJjYXJkT2JzZXJ2ZXIiXSxbImNsYXNzIiwibG9hZGluZy1jb250YWluZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2lkZWJhciIsNCwibmdJZiJdLFsxLCJsb2FkaW5nLWNvbnRhaW5lciJdLFsiZGlhbWV0ZXIiLCIzNiJdLFsxLCJzaWRlYmFyIl0sWzEsImhlYWRlciJdLFsxLCJ0aXRsZSJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwzLCJjbGljayJdLFsic3ZnSWNvbiIsImNsb3NlXzI0cHgiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJkaXYiLDApLFRtKDEsIm1ldHJpY3MtdGFnLWZpbHRlciIpLFJtKDIsIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIiwxKSxSbSgzLCJtYXQtYnV0dG9uLXRvZ2dsZSIsMiksVm0oImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQuZW1pdCgpfSkpLGt1KDQsIiBBbGwgIiksQW0oKSxSbSg1LCJtYXQtYnV0dG9uLXRvZ2dsZSIsMiksVm0oImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUGx1Z2luVHlwZVRvZ2dsZWQuZW1pdChuLlBsdWdpblR5cGUuU0NBTEFSUyl9KSksa3UoNiwiIFNjYWxhcnMgIiksQW0oKSxSbSg3LCJtYXQtYnV0dG9uLXRvZ2dsZSIsMiksVm0oImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUGx1Z2luVHlwZVRvZ2dsZWQuZW1pdChuLlBsdWdpblR5cGUuSU1BR0VTKX0pKSxrdSg4LCIgSW1hZ2UgIiksQW0oKSxSbSg5LCJtYXQtYnV0dG9uLXRvZ2dsZSIsMiksVm0oImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUGx1Z2luVHlwZVRvZ2dsZWQuZW1pdChuLlBsdWdpblR5cGUuSElTVE9HUkFNUyl9KSksa3UoMTAsIiBIaXN0b2dyYW0gIiksQW0oKSxBbSgpLFJtKDExLCJkaXYiLDMpLFJtKDEyLCJidXR0b24iLDQpLFZtKCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblNldHRpbmdzQnV0dG9uQ2xpY2tlZC5lbWl0KCl9KSksVG0oMTMsIm1hdC1pY29uIiw1KSxrdSgxNCwiIFNldHRpbmdzICIpLEFtKCksQW0oKSxBbSgpLFJtKDE1LCJkaXYiLDYpLFJtKDE2LCJkaXYiLDcpLFFwKDE3LGNodCwxLDEsIm1ldHJpY3MtZmlsdGVyZWQtdmlldyIsOCksVG0oMTgsIm1ldHJpY3MtcGlubmVkLXZpZXciLDkpLFFwKDE5LGRodCwyLDAsImRpdiIsMTApLFRtKDIwLCJtZXRyaWNzLWNhcmQtZ3JvdXBzIiw5KSxBbSgpLFFwKDIxLHBodCw3LDAsImRpdiIsMTEpLEFtKCkpLDImZSYmKHJjKDMpLERtKCJjaGVja2VkIiwwPT09bi5maWx0ZXJlZFBsdWdpblR5cGVzLnNpemUpLHJjKDIpLERtKCJjaGVja2VkIixuLmZpbHRlcmVkUGx1Z2luVHlwZXMuaGFzKG4uUGx1Z2luVHlwZS5TQ0FMQVJTKSkscmMoMiksRG0oImNoZWNrZWQiLG4uZmlsdGVyZWRQbHVnaW5UeXBlcy5oYXMobi5QbHVnaW5UeXBlLklNQUdFUykpLHJjKDIpLERtKCJjaGVja2VkIixuLmZpbHRlcmVkUGx1Z2luVHlwZXMuaGFzKG4uUGx1Z2luVHlwZS5ISVNUT0dSQU1TKSkscmMoMyksRG0oIm5nQ2xhc3MiLE1oKDE5LG1odCxuLmlzU2lkZXBhbmVPcGVuKSksanAoImFyaWEtcHJlc3NlZCIsbi5pc1NpZGVwYW5lT3BlbikscmMoNCkscHUoIm1haW4iLCEwKSgiZmlsdGVyLXZpZXciLG4uc2hvd0ZpbHRlcmVkVmlldykscmMoMSksRG0oIm5nSWYiLG4uc2hvd0ZpbHRlcmVkVmlldykscmMoMSksZHUoImRpc3BsYXkiLG4uc2hvd0ZpbHRlcmVkVmlldz8ibm9uZSI6IiIpLERtKCJjYXJkT2JzZXJ2ZXIiLG4uY2FyZE9ic2VydmVyKSxyYygxKSxEbSgibmdJZiIsbi5pbml0aWFsVGFnc0xvYWRpbmcpLHJjKDEpLGR1KCJkaXNwbGF5IixuLnNob3dGaWx0ZXJlZFZpZXc/Im5vbmUiOiIiKSxEbSgiY2FyZE9ic2VydmVyIixuLmNhcmRPYnNlcnZlcikscmMoMSksRG0oIm5nSWYiLG4uaXNTaWRlcGFuZU9wZW4pKX0sZGlyZWN0aXZlczpbeDIsRTIsQTIsWEgsYU0sRFcsbUYsZE0sQmd0LFlndCwkZ3QsbzEsbGh0XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCV9LnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZmxleDpub25lO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0udG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLXRhZy1maWx0ZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxIDEwMHB4fS50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yaWdodC1pdGVtc1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWI7bWFyZ2luLWxlZnQ6MTZweDtwYWRkaW5nLWxlZnQ6MTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICAucmlnaHQtaXRlbXNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICAucmlnaHQtaXRlbXNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9LmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MjVweDtmb250LXNpemU6MTJweH0uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgICAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtsaW5lLWhlaWdodDoyNXB4fS5zcGxpdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7b3ZlcmZsb3cteTphdXRvO2ZsZXg6MX0ubWFpbltfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOnN0cmljdDtvdmVyZmxvdy14OmhpZGRlbjtvdmVyZmxvdy15OmF1dG87d2lsbC1jaGFuZ2U6dHJhbnNmb3JtLHNjcm9sbC1wb3NpdGlvbn0ubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjVmNmY3O2ZsZXg6MSAxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojM2EzYTNhfS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtZmlsdGVyZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLXBpbm5lZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5tYWluLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59Lm1haW4uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmNvbnRlbnQ7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sc2Nyb2xsLXBvc2l0aW9ufS5sb2FkaW5nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoyMHB4IDB9LnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6MCAwIDI1MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtoZWlnaHQ6NDJweDtwYWRkaW5nOjAgMTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0Om5vcm1hbDttYXJnaW46MH1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtkaXNwbGF5OmlubGluZS1mbGV4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfVtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uLmNoZWNrZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItY29sb3I6I2UwZTBlMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uLmNoZWNrZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzIxMjEyMX1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtYnV0dG9uLXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9W19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDo0cHh9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHVodCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJtZXRyaWNzLW1haW4tdmlldy1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiJtYWluX3ZpZXdfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIm1haW5fdmlld19jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfV19KSx7c2hvd0ZpbHRlcmVkVmlldzpbe3R5cGU6eHl9XSxpc1NpZGVwYW5lT3Blbjpbe3R5cGU6eHl9XSxmaWx0ZXJlZFBsdWdpblR5cGVzOlt7dHlwZTp4eX1dLGluaXRpYWxUYWdzTG9hZGluZzpbe3R5cGU6eHl9XSxvblNldHRpbmdzQnV0dG9uQ2xpY2tlZDpbe3R5cGU6T3l9XSxvbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkOlt7dHlwZTpPeX1dLG9uUGx1Z2luVHlwZVRvZ2dsZWQ6W3t0eXBlOk95fV0sb25QbHVnaW5UeXBlQWxsVG9nZ2xlZDpbe3R5cGU6T3l9XX0pO2NsYXNzIGZodHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5pc1NpZGVwYW5lT3BlbiQ9dGhpcy5zdG9yZS5zZWxlY3QoWFQpLHRoaXMuaW5pdGlhbFRhZ3NMb2FkaW5nJD10aGlzLnN0b3JlLnNlbGVjdCh1VCkucGlwZShIZSgodD0+bnVsbD09PXQubGFzdExvYWRlZFRpbWVJbk1zKSwhMCksSXQoKHQ9PnQuc3RhdGU9PT15RS5MT0FESU5HJiZudWxsPT09dC5sYXN0TG9hZGVkVGltZUluTXMpKSksdGhpcy5zaG93RmlsdGVyZWRWaWV3JD10aGlzLnN0b3JlLnNlbGVjdChCVCkucGlwZShJdCgodD0+dC5sZW5ndGg+MCkpKSx0aGlzLmZpbHRlcmVkUGx1Z2luVHlwZXMkPXRoaXMuc3RvcmUuc2VsZWN0KHFUKX1vblNldHRpbmdzQnV0dG9uQ2xpY2tlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goekUoKSl9b25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goTkUoKSl9b25QbHVnaW5WaXNpYmlsaXR5VG9nZ2xlZCh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKGlSKHtwbHVnaW46dH0pKX1vblNob3dBbGxQbHVnaW5zKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChhUigpKX19Zmh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxmaHQpKFNtKEl3KSl9LGZodC7JtWNtcD10byh7dHlwZTpmaHQsc2VsZWN0b3JzOltbIm1ldHJpY3MtbWFpbi12aWV3Il1dLGRlY2xzOjUsdmFyczoxMixjb25zdHM6W1szLCJzaG93RmlsdGVyZWRWaWV3IiwiaXNTaWRlcGFuZU9wZW4iLCJpbml0aWFsVGFnc0xvYWRpbmciLCJmaWx0ZXJlZFBsdWdpblR5cGVzIiwib25TZXR0aW5nc0J1dHRvbkNsaWNrZWQiLCJvbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkIiwib25QbHVnaW5UeXBlVG9nZ2xlZCIsIm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsIm1ldHJpY3MtbWFpbi12aWV3LWNvbXBvbmVudCIsMCksVm0oIm9uU2V0dGluZ3NCdXR0b25DbGlja2VkIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uU2V0dGluZ3NCdXR0b25DbGlja2VkKCl9KSkoIm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCgpfSkpKCJvblBsdWdpblR5cGVUb2dnbGVkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblBsdWdpblZpc2liaWxpdHlUb2dnbGVkKGUpfSkpKCJvblBsdWdpblR5cGVBbGxUb2dnbGVkIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uU2hvd0FsbFBsdWdpbnMoKX0pKSxBaCgxLCJhc3luYyIpLEFoKDIsImFzeW5jIiksQWgoMywiYXN5bmMiKSxBaCg0LCJhc3luYyIpLEFtKCkpLDImZSYmRG0oInNob3dGaWx0ZXJlZFZpZXciLFRoKDEsNCxuLnNob3dGaWx0ZXJlZFZpZXckKSkoImlzU2lkZXBhbmVPcGVuIixUaCgyLDYsbi5pc1NpZGVwYW5lT3BlbiQpKSgiaW5pdGlhbFRhZ3NMb2FkaW5nIixUaCgzLDgsbi5pbml0aWFsVGFnc0xvYWRpbmckKSkoImZpbHRlcmVkUGx1Z2luVHlwZXMiLFRoKDQsMTAsbi5maWx0ZXJlZFBsdWdpblR5cGVzJCkpfSxkaXJlY3RpdmVzOlt1aHRdLHBpcGVzOlt3TV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChmaHQsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljcy1tYWluLXZpZXciLHRlbXBsYXRlOidcbiAgICA8bWV0cmljcy1tYWluLXZpZXctY29tcG9uZW50XG4gICAgICBbc2hvd0ZpbHRlcmVkVmlld109InNob3dGaWx0ZXJlZFZpZXckIHwgYXN5bmMiXG4gICAgICBbaXNTaWRlcGFuZU9wZW5dPSJpc1NpZGVwYW5lT3BlbiQgfCBhc3luYyJcbiAgICAgIFtpbml0aWFsVGFnc0xvYWRpbmddPSJpbml0aWFsVGFnc0xvYWRpbmckIHwgYXN5bmMiXG4gICAgICBbZmlsdGVyZWRQbHVnaW5UeXBlc109ImZpbHRlcmVkUGx1Z2luVHlwZXMkIHwgYXN5bmMiXG4gICAgICAob25TZXR0aW5nc0J1dHRvbkNsaWNrZWQpPSJvblNldHRpbmdzQnV0dG9uQ2xpY2tlZCgpIlxuICAgICAgKG9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQpPSJvbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkKCkiXG4gICAgICAob25QbHVnaW5UeXBlVG9nZ2xlZCk9Im9uUGx1Z2luVmlzaWJpbGl0eVRvZ2dsZWQoJGV2ZW50KSJcbiAgICAgIChvblBsdWdpblR5cGVBbGxUb2dnbGVkKT0ib25TaG93QWxsUGx1Z2lucygpIlxuICAgID48L21ldHJpY3MtbWFpbi12aWV3LWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLG51bGwpO2NvbnN0IGdodD1uZXcgR2EoIltNZXRyaWNzXSBNRVRSSUNTX1Byb21vIE1lc3NhZ2UgQ29tcG9uZW50Iik7ZnVuY3Rpb24gaGh0KHQsZSl7MSZ0JiYoTm0oMCksWG0oMSksem0oKSl9Y2xhc3MgYmh0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy52aWV3Q29udGFpbmVyUmVmPXQsdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZX1uZ09uSW5pdCgpe2lmKHRoaXMuY3VzdG9taXphYmxlQ29tcG9uZW50KXtjb25zdCB0PXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuY3VzdG9taXphYmxlQ29tcG9uZW50LmNvbnN0cnVjdG9yKTt0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHQpfX19Ymh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxiaHQpKFNtKGVoKSxTbSh1ZykpfSxiaHQuybVjbXA9dG8oe3R5cGU6Ymh0LHNlbGVjdG9yczpbWyJ0Yi1jdXN0b21pemF0aW9uIl1dLGlucHV0czp7Y3VzdG9taXphYmxlQ29tcG9uZW50OiJjdXN0b21pemFibGVDb21wb25lbnQifSxuZ0NvbnRlbnRTZWxlY3RvcnM6WyIqIl0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoWm0oKSxRcCgwLGhodCwyLDAsIm5nLWNvbnRhaW5lciIsMCkpLDImZSYmRG0oIm5nSWYiLCFuLmN1c3RvbWl6YWJsZUNvbXBvbmVudCl9LGRpcmVjdGl2ZXM6W2RNXSxlbmNhcHN1bGF0aW9uOjJ9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGJodCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJ0Yi1jdXN0b21pemF0aW9uIix0ZW1wbGF0ZTonXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iIWN1c3RvbWl6YWJsZUNvbXBvbmVudCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICd9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTplaH0se3R5cGU6dWd9XX0pLHtjdXN0b21pemFibGVDb21wb25lbnQ6W3t0eXBlOnh5fV19KTtjbGFzcyB5aHR7Y29uc3RydWN0b3IodCl7dGhpcy5jdXN0b21Qcm9tb01lc3NhZ2U9dCx0aGlzLm9uRGlzbWlzcz1uZXcgTGgsdGhpcy5vbkdvVG9TY2FsYXJzPW5ldyBMaH19eWh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx5aHQpKFNtKGdodCw4KSl9LHlodC7JtWNtcD10byh7dHlwZTp5aHQsc2VsZWN0b3JzOltbIm1ldHJpY3MtcHJvbW8tbm90aWNlLWNvbXBvbmVudCJdXSxvdXRwdXRzOntvbkRpc21pc3M6Im9uRGlzbWlzcyIsb25Hb1RvU2NhbGFyczoib25Hb1RvU2NhbGFycyJ9LGRlY2xzOjcsdmFyczoxLGNvbnN0czpbWzEsIm1lc3NhZ2UiLDMsImN1c3RvbWl6YWJsZUNvbXBvbmVudCJdLFsxLCJnby10by1zY2FsYXJzIiwzLCJjbGljayJdLFsxLCJkaXNtaXNzIiwzLCJjbGljayJdLFsiaW5saW5lIiwiIiwic3ZnSWNvbiIsImNsb3NlXzI0cHgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsInRiLWN1c3RvbWl6YXRpb24iLDApLGt1KDEsIiBXZWxjb21lIHRvIG5ldyBkZWZhdWx0IGV4cGVyaWVuY2Ugb2YgVGVuc29yQm9hcmQuIFRpbWUgU2VyaWVzIGxldHMgeW91IHZpZXcgYWxsIHZpc3VhbGl6YXRpb25zIGF0IG9uY2UsIHB1dCB0aGVtIHNpZGUtYnktc2lkZSB3aXRoIHBpbnMsIGFuZCBjdXN0b21pemUgY29sb3JzLiBTY2FsYXJzIGFuZCBvdGhlciBwbHVnaW5zIGFyZSBzdGlsbCBhdmFpbGFibGUuICIpLFJtKDIsImJ1dHRvbiIsMSksVm0oImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uR29Ub1NjYWxhcnMuZW1pdCgpfSkpLGt1KDMsIiBHbyB0byBTY2FsYXJzIHBsdWdpbiIpLEFtKCksa3UoNCwiLlxuIiksQW0oKSxSbSg1LCJidXR0b24iLDIpLFZtKCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkRpc21pc3MuZW1pdCgpfSkpLFRtKDYsIm1hdC1pY29uIiwzKSxBbSgpKSwyJmUmJkRtKCJjdXN0b21pemFibGVDb21wb25lbnQiLG4uY3VzdG9tUHJvbW9NZXNzYWdlKX0sZGlyZWN0aXZlczpbYmh0LERXXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MTRweDtnYXA6NXB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2xpbmUtaGVpZ2h0OjIwcHg7cGFkZGluZzo1cHggMTBweH1idXR0b25bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7Y29sb3I6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7cGFkZGluZzowfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX10Yi1jdXN0b21pemF0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzE5NzZkMn0uZGlzbWlzc1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24tc2VsZjpiYXNlbGluZTtmbGV4Om5vbmU7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoeWh0LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpY3MtcHJvbW8tbm90aWNlLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Im1ldHJpY3NfcHJvbW9fbm90aWNlX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyJtZXRyaWNzX3Byb21vX25vdGljZV9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlFhLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltnaHRdfV19XX0pLHtvbkRpc21pc3M6W3t0eXBlOk95fV0sb25Hb1RvU2NhbGFyczpbe3R5cGU6T3l9XX0pO2NsYXNzIF9odHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXR9b25EaXNtaXNzKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChkUigpKX1vbkdvVG9TY2FsYXJzKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChwUigpKX19ZnVuY3Rpb24gQ2h0KHQsZSl7MSZ0JiZUbSgwLCJtZXRyaWNzLXByb21vLW5vdGljZSIsMyl9X2h0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxfaHQpKFNtKEl3KSl9LF9odC7JtWNtcD10byh7dHlwZTpfaHQsc2VsZWN0b3JzOltbIm1ldHJpY3MtcHJvbW8tbm90aWNlIl1dLGRlY2xzOjEsdmFyczowLGNvbnN0czpbWzMsIm9uRGlzbWlzcyIsIm9uR29Ub1NjYWxhcnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsIm1ldHJpY3MtcHJvbW8tbm90aWNlLWNvbXBvbmVudCIsMCksVm0oIm9uRGlzbWlzcyIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkRpc21pc3MoKX0pKSgib25Hb1RvU2NhbGFycyIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkdvVG9TY2FsYXJzKCl9KSksQW0oKSl9LGRpcmVjdGl2ZXM6W3lodF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChfaHQsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljcy1wcm9tby1ub3RpY2UiLHRlbXBsYXRlOic8bWV0cmljcy1wcm9tby1ub3RpY2UtY29tcG9uZW50XG4gICAgKG9uRGlzbWlzcyk9Im9uRGlzbWlzcygpIlxuICAgIChvbkdvVG9TY2FsYXJzKT0ib25Hb1RvU2NhbGFycygpIlxuICA+PC9tZXRyaWNzLXByb21vLW5vdGljZS1jb21wb25lbnQ+JyxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLG51bGwpO2NsYXNzIE1odHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5pc0J1dHRlckJhckVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGFFKS5waXBlKGZlKHRoaXMuc3RvcmUuc2VsZWN0KFpUKSksSXQoKChbdCxlXSk9PnQmJmUpKSl9fU1odC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8TWh0KShTbShJdykpfSxNaHQuybVjbXA9dG8oe3R5cGU6TWh0LHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZCJdXSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1siY2xhc3MiLCJub3RpY2UiLDQsIm5nSWYiXSxbInNpZGViYXIiLCIiXSxbIm1haW4iLCIiXSxbMSwibm90aWNlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihRcCgwLENodCwxLDAsIm1ldHJpY3MtcHJvbW8tbm90aWNlIiwwKSxBaCgxLCJhc3luYyIpLFJtKDIsInRiLWRhc2hib2FyZC1sYXlvdXQiKSxUbSgzLCJydW5zLXNlbGVjdG9yIiwxKSxUbSg0LCJtZXRyaWNzLW1haW4tdmlldyIsMiksQW0oKSksMiZlJiZEbSgibmdJZiIsVGgoMSwxLG4uaXNCdXR0ZXJCYXJFbmFibGVkJCkpfSxkaXJlY3RpdmVzOltkTSxNUSxjMixmaHQsX2h0XSxwaXBlczpbd01dLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtvdmVyZmxvdzpoaWRkZW59Lm5vdGljZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNDUsMTU3LC44NSk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ZmZWIzYjtjb2xvcjojMjEyMTIxO2Rpc3BsYXk6YmxvY2s7ZmxleDowIDB9dGItZGFzaGJvYXJkLWxheW91dFtfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDE7b3ZlcmZsb3c6aGlkZGVufW5hdltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1yaWdodDoxcHggc29saWQgI2ViZWJlYjtmbGV4Om5vbmU7d2lkdGg6MzQwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbmF2W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzA7Ym9yZGVyLXJpZ2h0LWNvbG9yOiM1NTV9bWV0cmljcy1tYWluLXZpZXdbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxfSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChNaHQsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljcy1kYXNoYm9hcmQiLHRlbXBsYXRlOidcbiAgICA8bWV0cmljcy1wcm9tby1ub3RpY2VcbiAgICAgICpuZ0lmPSJpc0J1dHRlckJhckVuYWJsZWQkIHwgYXN5bmMiXG4gICAgICBjbGFzcz0ibm90aWNlIlxuICAgID48L21ldHJpY3MtcHJvbW8tbm90aWNlPlxuICAgIDx0Yi1kYXNoYm9hcmQtbGF5b3V0PlxuICAgICAgPHJ1bnMtc2VsZWN0b3Igc2lkZWJhcj48L3J1bnMtc2VsZWN0b3I+XG4gICAgICA8bWV0cmljcy1tYWluLXZpZXcgbWFpbj48L21ldHJpY3MtbWFpbi12aWV3PlxuICAgIDwvdGItZGFzaGJvYXJkLWxheW91dD5cbiAgJyxzdHlsZVVybHM6WyJtZXRyaWNzX2NvbnRhaW5lci5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLG51bGwpO2NsYXNzIHZodHt9dmh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx2aHQpfSx2aHQuybVtb2Q9YW8oe3R5cGU6dmh0fSksdmh0Lsm1aW5qPXZuKHtpbXBvcnRzOltbV00sRVcsSkhdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgodmh0LFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltNUV0sZXhwb3J0czpbTVFdLGltcG9ydHM6W1dNLEVXLEpIXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKHZodCx7ZGVjbGFyYXRpb25zOltNUV0saW1wb3J0czpbV00sRVcsSkhdLGV4cG9ydHM6W01RXX0pO2NsYXNzIHhodHt9eGh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx4aHQpfSx4aHQuybVtb2Q9YW8oe3R5cGU6eGh0fSkseGh0Lsm1aW5qPXZuKHtpbXBvcnRzOltbV01dXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoeGh0LFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbV01dLGRlY2xhcmF0aW9uczpbYmh0XSxleHBvcnRzOltiaHRdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oeGh0LHtkZWNsYXJhdGlvbnM6W2JodF0saW1wb3J0czpbV01dLGV4cG9ydHM6W2JodF19KTtjbGFzcyBPaHR7fU9odC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8T2h0KX0sT2h0Lsm1bW9kPWFvKHt0eXBlOk9odH0pLE9odC7JtWluaj12bih7aW1wb3J0czpbW1dNLFkwLEVXXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKE9odCxbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbcTBdLGV4cG9ydHM6W3EwXSxpbXBvcnRzOltXTSxZMCxFV119XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhPaHQse2RlY2xhcmF0aW9uczpbcTBdLGltcG9ydHM6W1dNLFkwLEVXXSxleHBvcnRzOltxMF19KTtjbGFzcyBQaHR7fVBodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UGh0KX0sUGh0Lsm1bW9kPWFvKHt0eXBlOlBodH0pLFBodC7JtWluaj12bih7aW1wb3J0czpbW1dNXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFBodCxbe3R5cGU6QXksYXJnczpbe2ltcG9ydHM6W1dNXSxleHBvcnRzOltEMV0sZGVjbGFyYXRpb25zOltEMV19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhQaHQse2RlY2xhcmF0aW9uczpbRDFdLGltcG9ydHM6W1dNXSxleHBvcnRzOltEMV19KTtjbGFzcyB3aHR7fXdodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8d2h0KX0sd2h0Lsm1bW9kPWFvKHt0eXBlOndodH0pLHdodC7JtWluaj12bih7aW1wb3J0czpbW3kzLFdNLE9odCxUVixKSCxTWSxkVyxCWSxFVyxvWSxlJCxpMSx1JCx3MCxQaHQsSkxdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgod2h0LFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbeTMsV00sT2h0LFRWLEpILFNZLGRXLEJZLEVXLG9ZLGUkLGkxLHUkLHcwLFBodCxKTF0sZXhwb3J0czpbczJdLGVudHJ5Q29tcG9uZW50czpbaDFdLGRlY2xhcmF0aW9uczpbZzEsaDEsUDEsdzEsbzIsczJdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8od2h0LHtkZWNsYXJhdGlvbnM6W2cxLGgxLFAxLHcxLG8yLHMyXSxpbXBvcnRzOlt5MyxXTSxPaHQsVFYsSkgsU1ksZFcsQlksRVcsb1ksZSQsaTEsdSQsdzAsUGh0LEpMXSxleHBvcnRzOltzMl19KTtjbGFzcyBraHR7fWtodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8a2h0KX0sa2h0Lsm1bW9kPWFvKHt0eXBlOmtodH0pLGtodC7JtWluaj12bih7aW1wb3J0czpbW1dNLHdodF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChraHQsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltXTSx3aHRdLGV4cG9ydHM6W2MyXSxkZWNsYXJhdGlvbnM6W2wyLGMyXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKGtodCx7ZGVjbGFyYXRpb25zOltsMixjMl0saW1wb3J0czpbV00sd2h0XSxleHBvcnRzOltjMl19KTtjbGFzcyBTaHR7fVNodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8U2h0KX0sU2h0Lsm1bW9kPWFvKHt0eXBlOlNodH0pLFNodC7JtWluaj12bih7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChTaHQsW3t0eXBlOkF5LGFyZ3M6W3tleHBvcnRzOltOZnRdLGRlY2xhcmF0aW9uczpbTmZ0XX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKFNodCx7ZGVjbGFyYXRpb25zOltOZnRdLGV4cG9ydHM6W05mdF19KTtjbGFzcyBEaHR7fURodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8RGh0KX0sRGh0Lsm1bW9kPWFvKHt0eXBlOkRodH0pLERodC7JtWluaj12bih7aW1wb3J0czpbW1dNXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKERodCxbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbaGZ0XSxleHBvcnRzOltoZnRdLGltcG9ydHM6W1dNXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKERodCx7ZGVjbGFyYXRpb25zOltoZnRdLGltcG9ydHM6W1dNXSxleHBvcnRzOltoZnRdfSk7Y2xhc3MgRWh0e31FaHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEVodCl9LEVodC7JtW1vZD1hbyh7dHlwZTpFaHR9KSxFaHQuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxWSixTaHQsRGh0XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEVodCxbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbdGd0XSxleHBvcnRzOlt0Z3RdLGltcG9ydHM6W1dNLFZKLFNodCxEaHRdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oRWh0LHtkZWNsYXJhdGlvbnM6W3RndF0saW1wb3J0czpbV00sVkosU2h0LERodF0sZXhwb3J0czpbdGd0XX0pO2NsYXNzIFJodHt9Umh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxSaHQpfSxSaHQuybVtb2Q9YW8oe3R5cGU6Umh0fSksUmh0Lsm1aW5qPXZuKHtpbXBvcnRzOltbV01dXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoUmh0LFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOlt6Ml0sZXhwb3J0czpbejJdLGltcG9ydHM6W1dNXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKFJodCx7ZGVjbGFyYXRpb25zOlt6Ml0saW1wb3J0czpbV01dLGV4cG9ydHM6W3oyXX0pO2NsYXNzIEFodHt9QWh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxBaHQpfSxBaHQuybVtb2Q9YW8oe3R5cGU6QWh0fSksQWh0Lsm1aW5qPXZuKHtpbXBvcnRzOltbV01dXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoQWh0LFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltMMixGMl0sZXhwb3J0czpbTDJdLGltcG9ydHM6W1dNXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKEFodCx7ZGVjbGFyYXRpb25zOltMMixGMl0saW1wb3J0czpbV01dLGV4cG9ydHM6W0wyXX0pO2NsYXNzIFRodHt9VGh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxUaHQpfSxUaHQuybVtb2Q9YW8oe3R5cGU6VGh0fSksVGh0Lsm1aW5qPXZuKHtpbXBvcnRzOltbV00sRVddXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoVGh0LFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltnZnRdLGV4cG9ydHM6W2dmdF0saW1wb3J0czpbV00sRVddfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oVGh0LHtkZWNsYXJhdGlvbnM6W2dmdF0saW1wb3J0czpbV00sRVddLGV4cG9ydHM6W2dmdF19KTtjbGFzcyBOaHR7fU5odC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Tmh0KX0sTmh0Lsm1bW9kPWFvKHt0eXBlOk5odH0pLE5odC7JtWluaj12bih7aW1wb3J0czpbW1dNLEVodCxKSCxFVyxpMSxBaHQsUmh0LFRodF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChOaHQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W21ndCxwZ3RdLGV4cG9ydHM6W21ndF0saW1wb3J0czpbV00sRWh0LEpILEVXLGkxLEFodCxSaHQsVGh0XX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKE5odCx7ZGVjbGFyYXRpb25zOlttZ3QscGd0XSxpbXBvcnRzOltXTSxFaHQsSkgsRVcsaTEsQWh0LFJodCxUaHRdLGV4cG9ydHM6W21ndF19KTtjbGFzcyB6aHR7fXpodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8emh0KX0semh0Lsm1bW9kPWFvKHt0eXBlOnpodH0pLHpodC7JtWluaj12bih7aW1wb3J0czpbW1dNLEpILEVXLGkxLHpYLEFodCxSaHRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoemh0LFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltYMixaMl0sZXhwb3J0czpbWDJdLGltcG9ydHM6W1dNLEpILEVXLGkxLHpYLEFodCxSaHRdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oemh0LHtkZWNsYXJhdGlvbnM6W1gyLFoyXSxpbXBvcnRzOltXTSxKSCxFVyxpMSx6WCxBaHQsUmh0XSxleHBvcnRzOltYMl19KTtjbGFzcyBJaHR7fUlodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SWh0KX0sSWh0Lsm1bW9kPWFvKHt0eXBlOklodH0pLElodC7JtWluaj12bih7aW1wb3J0czpbW1dNLHlMLEpILEVXLEJZLG9ZXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKElodCxbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbWHV0LFV1dCxFdXRdLGV4cG9ydHM6W1h1dCxVdXQsRXV0XSxpbXBvcnRzOltXTSx5TCxKSCxFVyxCWSxvWV19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhJaHQse2RlY2xhcmF0aW9uczpbWHV0LFV1dCxFdXRdLGltcG9ydHM6W1dNLHlMLEpILEVXLEJZLG9ZXSxleHBvcnRzOltYdXQsVXV0LEV1dF19KTtjbGFzcyBIaHR7fUhodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SGh0KX0sSGh0Lsm1bW9kPWFvKHt0eXBlOkhodH0pLEhodC7JtWluaj12bih7aW1wb3J0czpbW1dNLHlMLElodCxWSl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChIaHQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2ZmdF0sZXhwb3J0czpbZmZ0XSxpbXBvcnRzOltXTSx5TCxJaHQsVkpdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oSGh0LHtkZWNsYXJhdGlvbnM6W2ZmdF0saW1wb3J0czpbV00seUwsSWh0LFZKXSxleHBvcnRzOltmZnRdfSk7Y2xhc3MgRmh0e31GaHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEZodCl9LEZodC7JtW1vZD1hbyh7dHlwZTpGaHR9KSxGaHQuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxjRyxKSCxkVyxCWSxURyxlVF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChGaHQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2w1LHM1XSxleHBvcnRzOltsNV0saW1wb3J0czpbV00sY0csSkgsZFcsQlksVEcsZVRdLGVudHJ5Q29tcG9uZW50czpbbDVdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oRmh0LHtkZWNsYXJhdGlvbnM6W2w1LHM1XSxpbXBvcnRzOltXTSxjRyxKSCxkVyxCWSxURyxlVF0sZXhwb3J0czpbbDVdfSk7Y2xhc3MgTGh0e31MaHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fExodCl9LExodC7JtW1vZD1hbyh7dHlwZTpMaHR9KSxMaHQuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxGaHQsU2h0LEhodCxEaHQsSkgsRVcsb1ksaTEsVkosUmh0LFRodF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChMaHQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0lmdCxUZnRdLGV4cG9ydHM6W0lmdF0saW1wb3J0czpbV00sRmh0LFNodCxIaHQsRGh0LEpILEVXLG9ZLGkxLFZKLFJodCxUaHRdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oTGh0LHtkZWNsYXJhdGlvbnM6W0lmdCxUZnRdLGltcG9ydHM6W1dNLEZodCxTaHQsSGh0LERodCxKSCxFVyxvWSxpMSxWSixSaHQsVGh0XSxleHBvcnRzOltJZnRdfSk7Y2xhc3MgQmh0e31CaHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJodCl9LEJodC7JtW1vZD1hbyh7dHlwZTpCaHR9KSxCaHQuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSx6aHQsTGh0LE5odCxTaHRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoQmh0LFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOlttMix5Z3QsX2d0XSxleHBvcnRzOlttMixfZ3RdLGltcG9ydHM6W1dNLHpodCxMaHQsTmh0LFNodF19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhCaHQse2RlY2xhcmF0aW9uczpbbTIseWd0LF9ndF0saW1wb3J0czpbV00semh0LExodCxOaHQsU2h0XSxleHBvcnRzOlttMixfZ3RdfSk7Y2xhc3MgVmh0e31WaHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFZodCl9LFZodC7JtW1vZD1hbyh7dHlwZTpWaHR9KSxWaHQuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxUR11dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChWaHQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2VodF0sZXhwb3J0czpbZWh0XSxpbXBvcnRzOltXTSxUR119XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhWaHQse2RlY2xhcmF0aW9uczpbZWh0XSxpbXBvcnRzOltXTSxUR10sZXhwb3J0czpbZWh0XX0pO2NsYXNzIGpodHt9amh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxqaHQpfSxqaHQuybVtb2Q9YW8oe3R5cGU6amh0fSksamh0Lsm1aW5qPXZuKHtpbXBvcnRzOltbV00sVmh0LEpILFQyLFNZLEVXLFRHLHpYLHRULFBodF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChqaHQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2xodCxyaHQsc2h0XSxleHBvcnRzOltsaHRdLGltcG9ydHM6W1dNLFZodCxKSCxUMixTWSxFVyxURyx6WCx0VCxQaHRdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oamh0LHtkZWNsYXJhdGlvbnM6W2xodCxyaHQsc2h0XSxpbXBvcnRzOltXTSxWaHQsSkgsVDIsU1ksRVcsVEcselgsdFQsUGh0XSxleHBvcnRzOltsaHRdfSk7Y2xhc3MgVWh0e31VaHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFVodCl9LFVodC7JtW1vZD1hbyh7dHlwZTpVaHR9KSxVaHQuybVpbmo9dm4oe2ltcG9ydHM6W1tCaHQsV00sT2h0LFkwLEpILFQyLEVXLEJZLGkxLGpodCxfRl1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChVaHQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1RndCxOZ3QsV2d0LFlndCxaZ3QsWGd0LFFndCwkZ3QsdWh0LGZodCx2Mix4MixMZ3QsQmd0XSxleHBvcnRzOltmaHRdLGltcG9ydHM6W0JodCxXTSxPaHQsWTAsSkgsVDIsRVcsQlksaTEsamh0LF9GXX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKFVodCx7ZGVjbGFyYXRpb25zOltUZ3QsTmd0LFdndCxZZ3QsWmd0LFhndCxRZ3QsJGd0LHVodCxmaHQsdjIseDIsTGd0LEJndF0saW1wb3J0czpbQmh0LFdNLE9odCxZMCxKSCxUMixFVyxCWSxpMSxqaHQsX0ZdLGV4cG9ydHM6W2ZodF19KTtjbGFzcyBHaHR7fWZ1bmN0aW9uIFdodCgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjpvUixhbGVydEZyb21BY3Rpb246dD0+e2NvbnN0e3dhc1Bpbm5lZDplLGNhbkNyZWF0ZU5ld1BpbnM6bn09dDtyZXR1cm4gZXx8bj9udWxsOntsb2NhbGl6ZWRNZXNzYWdlOiJNYXggcGluIGxpbWl0IGV4Y2VlZGVkLiBSZW1vdmUgZXhpc3RpbmcgcGlucyBiZWZvcmUgYWRkaW5nIG1vcmUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvNDI0MiJ9fX1dfWZ1bmN0aW9uIFlodCgpe3JldHVybiBadyh6VCwodD0+KHtzY2FsYXJTbW9vdGhpbmc6dH0pKSl9ZnVuY3Rpb24gcWh0KCl7cmV0dXJuIFp3KEFULCh0PT4oe2lnbm9yZU91dGxpZXJzOnR9KSkpfWZ1bmN0aW9uIFpodCgpe3JldHVybiBadyhSVCwodD0+KHt0b29sdGlwU29ydFN0cmluZzpTdHJpbmcodCl9KSkpfWZ1bmN0aW9uIFhodCgpe3JldHVybiBadyhaVCwodD0+KHt0aW1lU2VyaWVzUHJvbW90aW9uRGlzbWlzc2VkOiF0fSkpKX1mdW5jdGlvbiBLaHQoKXtyZXR1cm4gWncoWFQsKHQ9Pih7dGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZDp0fSkpKX1HaHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEdodCl9LEdodC7JtW1vZD1hbyh7dHlwZTpHaHR9KSxHaHQuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSx4aHQsdmh0LFVodCxFVyxqaHQsa2h0XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEdodCxbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbTWh0LHlodCxfaHRdLGV4cG9ydHM6W01odF0saW1wb3J0czpbV00seGh0LHZodCxVaHQsRVcsamh0LGtodF19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhHaHQse2RlY2xhcmF0aW9uczpbTWh0LHlodCxfaHRdLGltcG9ydHM6W1dNLHhodCx2aHQsVWh0LEVXLGpodCxraHRdLGV4cG9ydHM6W01odF19KTtjbGFzcyBKaHR7fUpodC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Smh0KX0sSmh0Lsm1bW9kPWFvKHt0eXBlOkpodH0pLEpodC7JtWluaj12bih7cHJvdmlkZXJzOlt7cHJvdmlkZTptUSx1c2VGYWN0b3J5OmZRLGRlcHM6W3VRXX0se3Byb3ZpZGU6dVEsdXNlVmFsdWU6cFR9XSxpbXBvcnRzOltbV00sQlMsRVIsd3EuZm9yUGx1Z2luKF9BLE1odCksZVQsR2h0LGRrLmZvckZlYXR1cmUoZFQsclEsbVEpLFdrLmZvckZlYXR1cmUoW3BRXSksQVIucmVnaXN0ZXJBbGVydEFjdGlvbnMoV2h0KSxxUy5kZWZpbmVHbG9iYWxTZXR0aW5nKFlodCkscVMuZGVmaW5lR2xvYmFsU2V0dGluZyhxaHQpLHFTLmRlZmluZUdsb2JhbFNldHRpbmcoWmh0KSxxUy5kZWZpbmVHbG9iYWxTZXR0aW5nKFhodCkscVMuZGVmaW5lR2xvYmFsU2V0dGluZyhLaHQpXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEpodCxbe3R5cGU6QXksYXJnczpbe2ltcG9ydHM6W1dNLEJTLEVSLHdxLmZvclBsdWdpbihfQSxNaHQpLGVULEdodCxkay5mb3JGZWF0dXJlKGRULHJRLG1RKSxXay5mb3JGZWF0dXJlKFtwUV0pLEFSLnJlZ2lzdGVyQWxlcnRBY3Rpb25zKFdodCkscVMuZGVmaW5lR2xvYmFsU2V0dGluZyhZaHQpLHFTLmRlZmluZUdsb2JhbFNldHRpbmcocWh0KSxxUy5kZWZpbmVHbG9iYWxTZXR0aW5nKFpodCkscVMuZGVmaW5lR2xvYmFsU2V0dGluZyhYaHQpLHFTLmRlZmluZUdsb2JhbFNldHRpbmcoS2h0KV0scHJvdmlkZXJzOlt7cHJvdmlkZTptUSx1c2VGYWN0b3J5OmZRLGRlcHM6W3VRXX0se3Byb3ZpZGU6dVEsdXNlVmFsdWU6cFR9XSxlbnRyeUNvbXBvbmVudHM6W01odF19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhKaHQse2ltcG9ydHM6W1dNLEJTLEVSLHdxLGVULEdodCxjayxHayxBUixxUyxxUyxxUyxxUyxxU119KTtjb25zdCBRaHQ9Im5wbWkiO3ZhciAkaHQsdGJ0LGVidCxuYnQ7IShmdW5jdGlvbih0KXt0W3QuQU5EPTBdPSJBTkQifSkoJGh0fHwoJGh0PXt9KSksKGZ1bmN0aW9uKHQpe3RbdC5NRVRSSUM9MF09Ik1FVFJJQyIsdFt0Lk9QRVJBVE9SPTFdPSJPUEVSQVRPUiJ9KSh0YnR8fCh0YnQ9e30pKSwoZnVuY3Rpb24odCl7dFt0LkRFRkFVTFQ9MF09IkRFRkFVTFQiLHRbdC5FTUJFRERJTkdTPTFdPSJFTUJFRERJTkdTIn0pKGVidHx8KGVidD17fSkpLChmdW5jdGlvbih0KXt0W3QuREVTQ0VORElORz0wXT0iREVTQ0VORElORyIsdFt0LkFTQ0VORE5HPTFdPSJBU0NFTkRORyIsdFt0LlNJTUlMQVI9Ml09IlNJTUlMQVIiLHRbdC5ESVNTSU1JTEFSPTNdPSJESVNTSU1JTEFSIn0pKG5idHx8KG5idD17fSkpO2NsYXNzIG9idHt9b2J0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxvYnQpfSxvYnQuybVjbXA9dG8oe3R5cGU6b2J0LHNlbGVjdG9yczpbWyJucG1pLWluYWN0aXZlLXZpZXciXV0sZGVjbHM6Nix2YXJzOjAsY29uc3RzOltbMSwiY29udGFpbmVyIl0sWzEsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJkaXYiKSxSbSgxLCJkaXYiLDApLFJtKDIsImRpdiIsMSksa3UoMywiblBNSSBpcyBpbmFjdGl2ZSBiZWNhdXNlIG5vIGRhdGEgaXMgYXZhaWxhYmxlLiIpLEFtKCksUm0oNCwiZGl2Iiksa3UoNSwiIFRvIHVzZSB0aGUgblBNSSwgY2FsY3VsYXRlIG5QTUkgdmFsdWVzLCBhbmQgbG9nIHRoZW0gdXNpbmcgdGhlIHN1bW1hcnkgd3JpdGVyLiAiKSxBbSgpLEFtKCksQW0oKSl9LHN0eWxlczpbIi5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmb250LWZhbWlseTogUm9ib3RvO1xuICBmb250LXNpemU6IDE1cHg7XG4gIHBhZGRpbmc6IDUwcHg7XG59XG5cbi50aXRsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDEzNSU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBtYXJnaW4tYm90dG9tOiAyNXB4O1xufSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChvYnQsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1pbmFjdGl2ZS12aWV3Iix0ZW1wbGF0ZVVybDoiLi9pbmFjdGl2ZV9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9pbmFjdGl2ZV9jb21wb25lbnQuY3NzIl19XX1dLG51bGwsbnVsbCk7Y29uc3QgaWJ0PUt3KFFodCksYWJ0PVp3KGlidCwodD0+dC5wbHVnaW5EYXRhTG9hZGVkLnN0YXRlKSkscmJ0PVp3KGlidCwodD0+dC5hbm5vdGF0aW9uRGF0YSkpLHNidD1adyhpYnQsKHQ9PnQucnVuVG9NZXRyaWNzKSksbGJ0PVp3KGlidCwodD0+dC5lbWJlZGRpbmdEYXRhU2V0KSksY2J0PVp3KGlidCwodD0+dC5zZWxlY3RlZEFubm90YXRpb25zKSksZGJ0PVp3KGlidCwodD0+dC5mbGFnZ2VkQW5ub3RhdGlvbnMpKSxwYnQ9WncoaWJ0LCh0PT50LmhpZGRlbkFubm90YXRpb25zKSksbWJ0PVp3KGlidCwodD0+dC5hbm5vdGF0aW9uc1JlZ2V4KSksdWJ0PVp3KGlidCwodD0+dC5tZXRyaWNzUmVnZXgpKSxmYnQ9WncoaWJ0LCh0PT50Lm1ldHJpY0FyaXRobWV0aWMpKSxnYnQ9WncoaWJ0LCh0PT50Lm1ldHJpY0ZpbHRlcnMpKSxoYnQ9WncoaWJ0LCh0PT50LnNvcnQpKSxiYnQ9WncoaWJ0LCh0PT50LnBjRXhwYW5kZWQpKSx5YnQ9WncoaWJ0LCh0PT50LmFubm90YXRpb25zRXhwYW5kZWQpKSxfYnQ9WncoaWJ0LCh0PT50LnNpZGViYXJFeHBhbmRlZCkpLENidD1adyhpYnQsKHQ9PnQuc2hvd0NvdW50cykpLE1idD1adyhpYnQsKHQ9PnQuc2hvd0hpZGRlbkFubm90YXRpb25zKSksdmJ0PVp3KGlidCwodD0+dC52aWV3QWN0aXZlKSkseGJ0PVp3KGlidCwodD0+dC5zaWRlYmFyV2lkdGgpKSxPYnQ9WncoaWJ0LCh0PT50LmVtYmVkZGluZ3NNZXRyaWMpKSxQYnQ9WncoaWJ0LCh0PT50LmVtYmVkZGluZ3NTaWRlYmFyV2lkdGgpKSx3YnQ9WncoaWJ0LCh0PT50LmVtYmVkZGluZ3NTaWRlYmFyRXhwYW5kZWQpKSxrYnQ9SlAoIltOUE1JXSBuUE1JIExvYWRlZCIpLFNidD1KUCgiW05QTUldIG5QTUkgUGx1Z2luIERhdGEgUmVxdWVzdGVkIiksRGJ0PUpQKCJbTlBNSV0gblBNSSBQbHVnaW4gRGF0YSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxFYnQ9SlAoIltOUE1JXSBuUE1JIFBsdWdpbiBEYXRhIFJlcXVlc3QgRmFpbGVkIiksUmJ0PUpQKCJbTlBNSV0gQWRkaW5nL1JlbW92aW5nIEFubm90YXRpb25zIHRvL2Zyb20gU2VsZWN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxBYnQ9SlAoIltOUE1JXSBBbm5vdGF0aW9ucyBTZXQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxUYnQ9SlAoIltOUE1JXSBDbGVhcmluZyB0aGUgQW5ub3RhdGlvbiBTZWxlY3Rpb24iKSxOYnQ9SlAoIltOUE1JXSBBZGRpbmcvUmVtb3ZpbmcgQW5ub3RhdGlvbnMgdG8vZnJvbSBGbGFnZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksemJ0PUpQKCJbTlBNSV0gQWRkaW5nL1JlbW92aW5nIEFubm90YXRpb25zIHRvL2Zyb20gSGlkZGVuIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSWJ0PUpQKCJbTlBNSV0gQW5ub3RhdGlvbnMgUmVnZXggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEhidD1KUCgiW05QTUldIE1ldHJpY3MgUmVnZXggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEZidD1KUCgiW05QTUldIE1ldHJpYyBGaWx0ZXIgQWRkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxMYnQ9SlAoIltOUE1JXSBNZXRyaWMgRmlsdGVyIFJlbW92ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxCYnQ9SlAoIltOUE1JXSBNZXRyaWMgRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxWYnQ9SlAoIltOUE1JXSBBbm5vdGF0aW9uIFNvcnQgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGpidD1KUCgiW05QTUldIFNpbWlsYXJpdHkgU29ydCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVWJ0PUpQKCJbTlBNSV0gVG9nZ2xlIFBDIEV4cGFuZGVkIiksR2J0PUpQKCJbTlBNSV0gVG9nZ2xlIEFubm90YXRpb25zIEV4cGFuZGVkIiksV2J0PUpQKCJbTlBNSV0gVG9nZ2xlIFNpZGViYXIgRXhwYW5kZWQiKSxZYnQ9SlAoIltOUE1JXSBTaG93IENvdW50cyBUb2dnbGVkIikscWJ0PUpQKCJbTlBNSV0gU2hvdyBIaWRkZW4gQW5ub3RhdGlvbnMgVG9nZ2xlZCIpLFpidD1KUCgiW05QTUldIEVtYmVkZGluZ3MgVmlldyBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWGJ0PUpQKCJbTlBNSV0gU2lkZWJhciBXaWR0aCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksS2J0PUpQKCJbTlBNSV0gRW1iZWRkaW5ncyBTaWRlYmFyIFdpZHRoIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxKYnQ9SlAoIltOUE1JXSBUb2dnbGUgRW1iZWRkaW5ncyBTaWRlYmFyIEV4cGFuZGVkIiksUWJ0PUpQKCJbTlBNSV0gQ2hhbmdlIEVtYmVkZGluZyBEYXRhU2V0Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSk7ZnVuY3Rpb24gJGJ0KHQpe3JldHVybiB0LnN0YXJ0c1dpdGgoImNvdW50QCIpfWZ1bmN0aW9uIHR5dCh0KXtyZXR1cm4gdC5zdGFydHNXaXRoKCJuUE1JQCIpfHx0LnN0YXJ0c1dpdGgoIm5QTUlfZGlmZkAiKX1mdW5jdGlvbiBleXQodCl7cmV0dXJuIHQuc3RhcnRzV2l0aCgiblBNSUAiKX1mdW5jdGlvbiBueXQodCl7cmV0dXJuIHQuc3BsaXQoIkAiLDIpWzFdfWNvbnN0IG95dD15ayh7cGx1Z2luRGF0YUxvYWRlZDp7c3RhdGU6eUUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sYW5ub3RhdGlvbkRhdGE6e30scnVuVG9NZXRyaWNzOnt9LHNlbGVjdGVkQW5ub3RhdGlvbnM6W10sZmxhZ2dlZEFubm90YXRpb25zOltdLGhpZGRlbkFubm90YXRpb25zOltdLGFubm90YXRpb25zUmVnZXg6IiIsbWV0cmljc1JlZ2V4OiIiLG1ldHJpY0FyaXRobWV0aWM6W10sbWV0cmljRmlsdGVyczp7fSxzb3J0OnttZXRyaWM6IiIsb3JkZXI6bmJ0LkRFU0NFTkRJTkd9LHBjRXhwYW5kZWQ6ITAsYW5ub3RhdGlvbnNFeHBhbmRlZDohMCxzaWRlYmFyRXhwYW5kZWQ6ITAsc2hvd0NvdW50czohMCxzaG93SGlkZGVuQW5ub3RhdGlvbnM6ITEsc2lkZWJhcldpZHRoOjMwMCx2aWV3QWN0aXZlOmVidC5ERUZBVUxULGVtYmVkZGluZ3NNZXRyaWM6IiIsZW1iZWRkaW5nc1NpZGViYXJXaWR0aDo1MDAsZW1iZWRkaW5nc1NpZGViYXJFeHBhbmRlZDohMH0sYmsoU2J0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BsdWdpbkRhdGFMb2FkZWQ6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQucGx1Z2luRGF0YUxvYWRlZCkse3N0YXRlOnlFLkxPQURJTkd9KX0pKSksYmsoRWJ0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BsdWdpbkRhdGFMb2FkZWQ6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQucGx1Z2luRGF0YUxvYWRlZCkse3N0YXRlOnlFLkZBSUxFRH0pfSkpKSxiayhEYnQsKCh0LHthbm5vdGF0aW9uRGF0YTplLG1ldHJpY3M6bixlbWJlZGRpbmdEYXRhU2V0Om99KT0+e2NvbnN0IGk9e307Zm9yKGNvbnN0IHQgaW4gbil7aVt0XT1bXTtmb3IoY29uc3QgZSBvZiBuW3RdKXR5dChlKSYmaVt0XS5wdXNoKGUpfXJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3J1blRvTWV0cmljczppLGFubm90YXRpb25EYXRhOmUsZW1iZWRkaW5nRGF0YVNldDpvLHBsdWdpbkRhdGFMb2FkZWQ6e3N0YXRlOnlFLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX19KX0pKSxiayhSYnQsKCh0LHthbm5vdGF0aW9uczplfSk9Pntjb25zdCBuPW5ldyBTZXQoWy4uLnQuc2VsZWN0ZWRBbm5vdGF0aW9ucywuLi5lXSk7aWYobi5zaXplPT09dC5zZWxlY3RlZEFubm90YXRpb25zLmxlbmd0aClmb3IoY29uc3QgdCBvZiBlKW4uZGVsZXRlKHQpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NlbGVjdGVkQW5ub3RhdGlvbnM6Wy4uLm5dfSl9KSksYmsoQWJ0LCgodCx7YW5ub3RhdGlvbnM6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NlbGVjdGVkQW5ub3RhdGlvbnM6ZX0pKSksYmsoVGJ0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NlbGVjdGVkQW5ub3RhdGlvbnM6W119KSkpLGJrKE5idCwoKHQse2Fubm90YXRpb25zOmV9KT0+e2NvbnN0IG49bmV3IFNldChbLi4udC5mbGFnZ2VkQW5ub3RhdGlvbnMsLi4uZV0pO2lmKG4uc2l6ZT09PXQuZmxhZ2dlZEFubm90YXRpb25zLmxlbmd0aClmb3IoY29uc3QgdCBvZiBlKW4uZGVsZXRlKHQpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2ZsYWdnZWRBbm5vdGF0aW9uczpbLi4ubl0sc2VsZWN0ZWRBbm5vdGF0aW9uczpbXX0pfSkpLGJrKHpidCwoKHQse2Fubm90YXRpb25zOmV9KT0+e2NvbnN0IG49bmV3IFNldChbLi4udC5oaWRkZW5Bbm5vdGF0aW9ucywuLi5lXSk7aWYobi5zaXplPT09dC5oaWRkZW5Bbm5vdGF0aW9ucy5sZW5ndGgpZm9yKGNvbnN0IHQgb2YgZSluLmRlbGV0ZSh0KTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtoaWRkZW5Bbm5vdGF0aW9uczpbLi4ubl0sc2VsZWN0ZWRBbm5vdGF0aW9uczpbXX0pfSkpLGJrKElidCwoKHQse3JlZ2V4OmV9KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHthbm5vdGF0aW9uc1JlZ2V4OmV9KSkpLGJrKEhidCwoKHQse3JlZ2V4OmV9KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHttZXRyaWNzUmVnZXg6ZX0pKSksYmsoRmJ0LCgodCx7bWV0cmljOmV9KT0+e2lmKHQubWV0cmljRmlsdGVyc1tlXSlyZXR1cm4gdDtjb25zdCBuPVtdO3JldHVybiAwIT09dC5tZXRyaWNBcml0aG1ldGljLmxlbmd0aCYmbi5wdXNoKHtraW5kOnRidC5PUEVSQVRPUixvcGVyYXRvcjokaHQuQU5EfSksbi5wdXNoKHtraW5kOnRidC5NRVRSSUMsbWV0cmljOmV9KSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse21ldHJpY0FyaXRobWV0aWM6Wy4uLnQubWV0cmljQXJpdGhtZXRpYywuLi5uXSxtZXRyaWNGaWx0ZXJzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0Lm1ldHJpY0ZpbHRlcnMpLHtbZV06e21heDoxLG1pbjotMSxpbmNsdWRlTmFOOiExfX0pLHNvcnQ6e21ldHJpYzplLG9yZGVyOm5idC5ERVNDRU5ESU5HfX0pfSkpLGJrKExidCwoKHQse21ldHJpYzplfSk9PntpZighdC5tZXRyaWNGaWx0ZXJzW2VdKXJldHVybiB0O2xldCBuPTAsbz0wLGk9Mjtjb25zdCBhPWZBKHQubWV0cmljRmlsdGVycyxbInN5bWJvbCI9PXR5cGVvZiBlP2U6ZSsiIl0pO2Zvcihjb25zdCBvIGluIHQubWV0cmljQXJpdGhtZXRpYyl7Y29uc3QgaT10Lm1ldHJpY0FyaXRobWV0aWNbb107aS5raW5kPT09dGJ0Lk1FVFJJQyYmaS5tZXRyaWM9PT1lJiYobj1wYXJzZUludChvKSl9cmV0dXJuIDAhPT1uJiYobz1uLTEsaT1uKzEpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7bWV0cmljQXJpdGhtZXRpYzpbLi4udC5tZXRyaWNBcml0aG1ldGljLnNsaWNlKDAsbyksLi4udC5tZXRyaWNBcml0aG1ldGljLnNsaWNlKGkpXSxtZXRyaWNGaWx0ZXJzOmF9KX0pKSxiayhCYnQsKCh0LHttZXRyaWM6ZSxtYXg6bixtaW46byxpbmNsdWRlTmFOOml9KT0+dC5tZXRyaWNGaWx0ZXJzW2VdP09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7bWV0cmljRmlsdGVyczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5tZXRyaWNGaWx0ZXJzKSx7W2VdOnttYXg6bixtaW46byxpbmNsdWRlTmFOOml9fSl9KTp0KSksYmsoVmJ0LCgodCx7bWV0cmljOmV9KT0+e2NvbnN0IG49e21ldHJpYzplLG9yZGVyOm5idC5ERVNDRU5ESU5HfTtyZXR1cm4gdC5zb3J0Lm1ldHJpYz09PWUmJnQuc29ydC5vcmRlcj09PW5idC5ERVNDRU5ESU5HJiYobi5vcmRlcj1uYnQuQVNDRU5ETkcpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c29ydDpufSl9KSksYmsoamJ0LCgodCx7YW5ub3RhdGlvbjplfSk9Pntjb25zdCBuPXttZXRyaWM6ZSxvcmRlcjpuYnQuU0lNSUxBUn07cmV0dXJuIHQuc29ydC5tZXRyaWM9PT1lJiZ0LnNvcnQub3JkZXI9PT1uYnQuU0lNSUxBUiYmKG4ub3JkZXI9bmJ0LkRJU1NJTUlMQVIpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7c29ydDpufSl9KSksYmsoVWJ0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3BjRXhwYW5kZWQ6IXQucGNFeHBhbmRlZH0pKSksYmsoR2J0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2Fubm90YXRpb25zRXhwYW5kZWQ6IXQuYW5ub3RhdGlvbnNFeHBhbmRlZH0pKSksYmsoV2J0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NpZGViYXJFeHBhbmRlZDohdC5zaWRlYmFyRXhwYW5kZWR9KSkpLGJrKFlidCwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzaG93Q291bnRzOiF0LnNob3dDb3VudHN9KSkpLGJrKHFidCwodD0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtzaG93SGlkZGVuQW5ub3RhdGlvbnM6IXQuc2hvd0hpZGRlbkFubm90YXRpb25zfSkpKSxiayhaYnQsKCh0LHttZXRyaWM6ZX0pPT57bGV0IG49ZWJ0LkVNQkVERElOR1Msbz1lO3JldHVybiBlPT09dC5lbWJlZGRpbmdzTWV0cmljJiYobj1lYnQuREVGQVVMVCxvPSIiKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3ZpZXdBY3RpdmU6bixlbWJlZGRpbmdzTWV0cmljOm99KX0pKSxiayhYYnQsKCh0LHtzaWRlYmFyV2lkdGg6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse3NpZGViYXJXaWR0aDplfSkpKSxiayhLYnQsKCh0LHtzaWRlYmFyV2lkdGg6ZX0pPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2VtYmVkZGluZ3NTaWRlYmFyV2lkdGg6ZX0pKSksYmsoSmJ0LCh0PT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2VtYmVkZGluZ3NTaWRlYmFyRXhwYW5kZWQ6IXQuZW1iZWRkaW5nc1NpZGViYXJFeHBhbmRlZH0pKSksYmsoUWJ0LCgodCx7ZGF0YVNldDplfSk9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7ZW1iZWRkaW5nRGF0YVNldDplfSkpKSk7ZnVuY3Rpb24gaXl0KHQsZSl7cmV0dXJuIG95dCh0LGUpfWZ1bmN0aW9uIGF5dCh0LGUpezEmdCYmVG0oMCwibWF0LWljb24iLDcpfWZ1bmN0aW9uIHJ5dCh0LGUpe2lmKDEmdCYmKFJtKDAsIm1hdC1vcHRpb24iLDgpLGt1KDEpLEFtKCkpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdDtEbSgidmFsdWUiLHQpLHJjKDEpLFN1KHQpfX1jbGFzcyBzeXR7Y29uc3RydWN0b3IoKXt0aGlzLm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZT1uZXcgTGgsdGhpcy5vbkFkZEZpbHRlcj1uZXcgTGh9b25PcHRpb25TZWxlY3RlZCh0LGUpe3RoaXMub25BZGRGaWx0ZXIuZW1pdCh0Lm9wdGlvbi52YWx1ZSksZS52YWx1ZT0iIn19c3l0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxzeXQpfSxzeXQuybVjbXA9dG8oe3R5cGU6c3l0LHNlbGVjdG9yczpbWyJtZXRyaWMtc2VhcmNoLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZwdSgidmFsaWQiLG4uaXNSZWdleEZpbHRlclZhbGlkKX0saW5wdXRzOntjb21wbGV0aW9uczoiY29tcGxldGlvbnMiLHJlZ2V4RmlsdGVyVmFsdWU6InJlZ2V4RmlsdGVyVmFsdWUiLGlzUmVnZXhGaWx0ZXJWYWxpZDoiaXNSZWdleEZpbHRlclZhbGlkIn0sb3V0cHV0czp7b25SZWdleEZpbHRlclZhbHVlQ2hhbmdlOiJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLG9uQWRkRmlsdGVyOiJvbkFkZEZpbHRlciJ9LGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzdmdJY29uIiwic2VhcmNoXzI0cHgiXSxbIm1hdElucHV0IiwiIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwicGxhY2Vob2xkZXIiLCJBZGQgTWV0cmljIEZpbHRlciIsMywidmFsdWUiLCJtYXRBdXRvY29tcGxldGUiLCJpbnB1dCJdLFsibWF0SW5wdXQiLCIiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwiY2xhc3MiLCJlcnJvci1pY29uIiwibWF0VG9vbHRpcCIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDQsIm5nSWYiXSxbImF1dG9BY3RpdmVGaXJzdE9wdGlvbiIsIiIsMywib3B0aW9uU2VsZWN0ZWQiXSxbImZpbHRlck1hdGNoZXMiLCJtYXRBdXRvY29tcGxldGUiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsic3ZnSWNvbiIsImVycm9yXzI0cHgiLCJtYXRUb29sdGlwIiwiSW52YWxpZCByZWdleCBmaWx0ZXIuIFRoZSByZXN1bHQgbWF5IGJlIHN0YWxlLiIsMSwiZXJyb3ItaWNvbiJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlKXtjb25zdCB0PUhtKCk7VG0oMCwibWF0LWljb24iLDApLFJtKDEsImlucHV0IiwxLDIpLFZtKCJpbnB1dCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25SZWdleEZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoZS50YXJnZXQudmFsdWUpfSkpLEFtKCksUXAoMyxheXQsMSwwLCJtYXQtaWNvbiIsMyksUm0oNCwibWF0LWF1dG9jb21wbGV0ZSIsNCw1KSxWbSgib3B0aW9uU2VsZWN0ZWQiLChmdW5jdGlvbiBlKG8pe2hpKHQpO2NvbnN0IGk9JHAoMik7cmV0dXJuIG4ub25PcHRpb25TZWxlY3RlZChvLGkpfSkpLFFwKDYscnl0LDIsMiwibWF0LW9wdGlvbiIsNiksQW0oKX1pZigyJmUpe2NvbnN0IHQ9JHAoNSk7cmMoMSksRG0oInZhbHVlIixuLnJlZ2V4RmlsdGVyVmFsdWUpKCJtYXRBdXRvY29tcGxldGUiLHQpLHJjKDIpLERtKCJuZ0lmIiwhbi5pc1JlZ2V4RmlsdGVyVmFsaWQpLHJjKDMpLERtKCJuZ0Zvck9mIixuLmNvbXBsZXRpb25zKX19LGRpcmVjdGl2ZXM6W0RXLExZLFcwLGRNLEgwLGxNLEJIXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cGFkZGluZzowIDEwcHg7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOi45ZW19W19uZ2hvc3QtJUNPTVAlXTpub3QoLnZhbGlkKXtjb2xvcjojYzYyODI4fVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCkgICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17Y2FyZXQtY29sb3I6Y3VycmVudENvbG9yfSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChzeXQsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljLXNlYXJjaC1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL21ldHJpY19zZWFyY2hfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vbWV0cmljX3NlYXJjaF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sbnVsbCx7Y29tcGxldGlvbnM6W3t0eXBlOnh5fV0scmVnZXhGaWx0ZXJWYWx1ZTpbe3R5cGU6eHl9XSxpc1JlZ2V4RmlsdGVyVmFsaWQ6W3t0eXBlOlB5LGFyZ3M6WyJjbGFzcy52YWxpZCJdfSx7dHlwZTp4eX1dLG9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZTpbe3R5cGU6T3l9XSxvbkFkZEZpbHRlcjpbe3R5cGU6T3l9XX0pO2NsYXNzIGx5dHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5tZXRyaWNzUmVnZXgkPXRoaXMuc3RvcmUuc2VsZWN0KHVidCksdGhpcy5hY3RpdmVSdW5zJD10aGlzLnN0b3JlLnBpcGUoRncoTk4pKS5waXBlKEl0KCh0PT50P0FycmF5LmZyb20odC5lbnRyaWVzKCkpLmZpbHRlcigodD0+dFsxXSkpLm1hcCgodD0+dFswXSkpOltdKSkpLHRoaXMubWV0cmljc0ZvckFjdGl2ZVJ1bnMkPVd0KHRoaXMuYWN0aXZlUnVucyQsdGhpcy5zdG9yZS5zZWxlY3Qoc2J0KSkucGlwZShJdCgoKFt0LGVdKT0+e2NvbnN0IG49bmV3IFNldDtmb3IoY29uc3QgbyBvZiB0KWlmKGVbb10pZm9yKGNvbnN0IHQgb2YgZVtvXSluLmFkZCh0KTtyZXR1cm5bLi4ubl19KSkpLHRoaXMuaXNNZXRyaWNzRmlsdGVyVmFsaWQkPXRoaXMubWV0cmljc1JlZ2V4JC5waXBlKEl0KCh0PT57dHJ5e3JldHVybiBCb29sZWFuKG5ldyBSZWdFeHAodCkpfWNhdGNoKHQpe3JldHVybiExfX0pKSksdGhpcy5tZXRyaWNGaWx0ZXJLZXlzJD10aGlzLnN0b3JlLnBpcGUoRncoZ2J0KSkucGlwZShJdCgodD0+T2JqZWN0LmtleXModCkpKSksdGhpcy5jb21wbGV0aW9ucyQ9V3QodGhpcy5tZXRyaWNzRm9yQWN0aXZlUnVucyQsdGhpcy5tZXRyaWNzUmVnZXgkLHRoaXMubWV0cmljRmlsdGVyS2V5cyQpLnBpcGUoSXQoKChbdCxlLG5dKT0+e2NvbnN0IG89dC5maWx0ZXIoKHQ9PiFuLmluY2x1ZGVzKHQpKSk7dHJ5e2NvbnN0IHQ9bmV3IFJlZ0V4cChlLCJpIik7cmV0dXJuIG8uZmlsdGVyKChlPT50LnRlc3QoZSkpKS5zb3J0KCl9Y2F0Y2godCl7cmV0dXJuW119fSkpKX1vbkZpbHRlckNoYW5nZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKEhidCh7cmVnZXg6dH0pKX1vbkFkZEZpbHRlcih0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKEZidCh7bWV0cmljOnR9KSksdGhpcy5zdG9yZS5kaXNwYXRjaChIYnQoe3JlZ2V4OiIifSkpfX1mdW5jdGlvbiBjeXQodCxlLG4pe2NvbnN0IG89W1tlLC4uLm5dXTtpZighbi5sZW5ndGh8fCF0Lmxlbmd0aClyZXR1cm4iZGF0YTp0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04LCIrby5tYXAoKHQ9PnQuam9pbigiLCIpKSkuam9pbigiXG4iKTtjb25zdCBpPW4ubWFwKCh0PT5ueXQodCkpKTtmb3IoY29uc3RbbixhXW9mIHQpe2NvbnN0IHQ9YS5maWx0ZXIoKHQ9PnQucnVuPT09ZSkpO2lmKHQubGVuZ3RoKXtjb25zdCBlPVtuXTtmb3IoY29uc3QgbiBvZiBpKXtjb25zdCBvPXQuZmluZCgodD0+dC5tZXRyaWM9PT1uKSk7ZS5wdXNoKHZvaWQgMD09PW8/Im51bGwiOmAke28ublBNSVZhbHVlfWApfW8ucHVzaChlKX19cmV0dXJuImRhdGE6dGV4dC9jc3Y7Y2hhcnNldD11dGYtOCwiK28ubWFwKCh0PT50LmpvaW4oIiwiKSkpLmpvaW4oIlxuIil9bHl0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxseXQpKFNtKEl3KSl9LGx5dC7JtWNtcD10byh7dHlwZTpseXQsc2VsZWN0b3JzOltbIm5wbWktbWV0cmljLXNlYXJjaCJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJyZWdleEZpbHRlclZhbHVlIiwiY29tcGxldGlvbnMiLCJpc1JlZ2V4RmlsdGVyVmFsaWQiLCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLCJvbkFkZEZpbHRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwibWV0cmljLXNlYXJjaC1jb21wb25lbnQiLDApLFZtKCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uRmlsdGVyQ2hhbmdlKGUpfSkpKCJvbkFkZEZpbHRlciIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ub25BZGRGaWx0ZXIoZSl9KSksQWgoMSwiYXN5bmMiKSxBaCgyLCJhc3luYyIpLEFoKDMsImFzeW5jIiksQW0oKSksMiZlJiZEbSgicmVnZXhGaWx0ZXJWYWx1ZSIsVGgoMSwzLG4ubWV0cmljc1JlZ2V4JCkpKCJjb21wbGV0aW9ucyIsVGgoMiw1LG4uY29tcGxldGlvbnMkKSkoImlzUmVnZXhGaWx0ZXJWYWxpZCIsVGgoMyw3LG4uaXNNZXRyaWNzRmlsdGVyVmFsaWQkKSl9LGRpcmVjdGl2ZXM6W3N5dF0scGlwZXM6W3dNXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGx5dCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJucG1pLW1ldHJpYy1zZWFyY2giLHRlbXBsYXRlOidcbiAgICA8bWV0cmljLXNlYXJjaC1jb21wb25lbnRcbiAgICAgIFtyZWdleEZpbHRlclZhbHVlXT0ibWV0cmljc1JlZ2V4JCB8IGFzeW5jIlxuICAgICAgW2NvbXBsZXRpb25zXT0iY29tcGxldGlvbnMkIHwgYXN5bmMiXG4gICAgICBbaXNSZWdleEZpbHRlclZhbGlkXT0iaXNNZXRyaWNzRmlsdGVyVmFsaWQkIHwgYXN5bmMiXG4gICAgICAob25SZWdleEZpbHRlclZhbHVlQ2hhbmdlKT0ib25GaWx0ZXJDaGFuZ2UoJGV2ZW50KSJcbiAgICAgIChvbkFkZEZpbHRlcik9Im9uQWRkRmlsdGVyKCRldmVudCkiXG4gICAgPjwvbWV0cmljLXNlYXJjaC1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fV19KSxudWxsKTtjb25zdCBkeXQ9ZnVuY3Rpb24odCl7cmV0dXJueyJhY3RpdmUtYnV0dG9uIjp0fX07Y2xhc3MgcHl0e2Rvd25sb2FkUmVzdWx0cygpe2Zvcihjb25zdCB0IG9mIHRoaXMucnVucyl7Y29uc3QgZT1jeXQodGhpcy5mbGFnZ2VkRGF0YSx0LHRoaXMubWV0cmljcyksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7bi5zZXRBdHRyaWJ1dGUoImhyZWYiLGUpLG4uc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsYHJlcG9ydF8ke3R9LmNzdmApLG4uY2xpY2soKX19fXB5dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cHl0KX0scHl0Lsm1Y21wPXRvKHt0eXBlOnB5dCxzZWxlY3RvcnM6W1sicmVzdWx0cy1kb3dubG9hZC1jb21wb25lbnQiXV0saW5wdXRzOntudW1GbGFnZ2VkQW5ub3RhdGlvbnM6Im51bUZsYWdnZWRBbm5vdGF0aW9ucyIscnVuczoicnVucyIsZmxhZ2dlZERhdGE6ImZsYWdnZWREYXRhIixtZXRyaWNzOiJtZXRyaWNzIn0sZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsInRpdGxlIiwiRXhwb3J0IENTViByZXBvcnRzIG9mIGFsbCBmbGFnZ2VkIGFubm90YXRpb25zLiBXaWxsIGdlbmVyYXRlIG9uZSBDU1YgcGVyIGFjdGl2ZSBydW4uIiwzLCJkaXNhYmxlZCIsIm5nQ2xhc3MiLCJjbGljayJdLFsxLCJidXR0b24tY29udGVudHMiXSxbInN2Z0ljb24iLCJnZXRfYXBwXzI0cHgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsImJ1dHRvbiIsMCksVm0oImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLmRvd25sb2FkUmVzdWx0cygpfSkpLFJtKDEsInNwYW4iLDEpLFRtKDIsIm1hdC1pY29uIiwyKSxrdSgzKSxBbSgpLEFtKCkpLDImZSYmKERtKCJkaXNhYmxlZCIsMD09PW4ubnVtRmxhZ2dlZEFubm90YXRpb25zKSgibmdDbGFzcyIsTWgoMyxkeXQsbi5udW1GbGFnZ2VkQW5ub3RhdGlvbnM+MCkpLHJjKDMpLER1KCIgRmxhZ2dlZCBSb3dzICgiLG4ubnVtRmxhZ2dlZEFubm90YXRpb25zLCIpICIpKX0sZGlyZWN0aXZlczpbWEgsYU0sRFddLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5hY3RpdmUtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2NvbG9yOiNmZmZ9LmJ1dHRvbi1jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDo2cHh9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHB5dCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJyZXN1bHRzLWRvd25sb2FkLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vcmVzdWx0c19kb3dubG9hZF9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9yZXN1bHRzX2Rvd25sb2FkX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSxudWxsLHtudW1GbGFnZ2VkQW5ub3RhdGlvbnM6W3t0eXBlOnh5fV0scnVuczpbe3R5cGU6eHl9XSxmbGFnZ2VkRGF0YTpbe3R5cGU6eHl9XSxtZXRyaWNzOlt7dHlwZTp4eX1dfSk7Y2xhc3MgbXl0e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmZsYWdnZWRBbm5vdGF0aW9ucyQ9dGhpcy5zdG9yZS5zZWxlY3QoZGJ0KSx0aGlzLm51bUZsYWdnZWRBbm5vdGF0aW9ucyQ9dGhpcy5mbGFnZ2VkQW5ub3RhdGlvbnMkLnBpcGUoSXQoKHQ9PnQubGVuZ3RoKSkpLHRoaXMuYWN0aXZlUnVucyQ9dGhpcy5zdG9yZS5zZWxlY3QoTk4pLnBpcGUoSXQoKHQ9PnQ/QXJyYXkuZnJvbSh0LmVudHJpZXMoKSkuZmlsdGVyKCh0PT50WzFdKSkubWFwKCh0PT50WzBdKSk6W10pKSksdGhpcy5mbGFnZ2VkRGF0YSQ9V3QoW3RoaXMuc3RvcmUuc2VsZWN0KHJidCksdGhpcy5mbGFnZ2VkQW5ub3RhdGlvbnMkXSkucGlwZShJdCgoKFt0LGVdKT0+e2NvbnN0IG49bmV3IFNldChlKTtyZXR1cm4gT2JqZWN0LmVudHJpZXModCkuZmlsdGVyKCh0PT5uLmhhcyh0WzBdKSkpfSkpKSx0aGlzLm1ldHJpY3MkPVd0KFt0aGlzLnN0b3JlLnNlbGVjdChzYnQpLHRoaXMuYWN0aXZlUnVucyQsdGhpcy5zdG9yZS5zZWxlY3QoZ2J0KV0pLnBpcGUoSXQoKChbdCxlLG5dKT0+e2xldCBvPU9iamVjdC5rZXlzKG4pO2Zvcihjb25zdCBuIG9mIGUpdFtuXSYmKG89by5jb25jYXQodFtuXS5maWx0ZXIoKHQ9PmV5dCh0KSkpKSk7cmV0dXJuIG89Wy4uLm5ldyBTZXQobyldLG99KSkpfX1teXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG15dCkoU20oSXcpKX0sbXl0Lsm1Y21wPXRvKHt0eXBlOm15dCxzZWxlY3RvcnM6W1sibnBtaS1yZXN1bHRzLWRvd25sb2FkIl1dLGRlY2xzOjUsdmFyczoxMixjb25zdHM6W1szLCJudW1GbGFnZ2VkQW5ub3RhdGlvbnMiLCJydW5zIiwiZmxhZ2dlZERhdGEiLCJtZXRyaWNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihUbSgwLCJyZXN1bHRzLWRvd25sb2FkLWNvbXBvbmVudCIsMCksQWgoMSwiYXN5bmMiKSxBaCgyLCJhc3luYyIpLEFoKDMsImFzeW5jIiksQWgoNCwiYXN5bmMiKSksMiZlJiZEbSgibnVtRmxhZ2dlZEFubm90YXRpb25zIixUaCgxLDQsbi5udW1GbGFnZ2VkQW5ub3RhdGlvbnMkKSkoInJ1bnMiLFRoKDIsNixuLmFjdGl2ZVJ1bnMkKSkoImZsYWdnZWREYXRhIixUaCgzLDgsbi5mbGFnZ2VkRGF0YSQpKSgibWV0cmljcyIsVGgoNCwxMCxuLm1ldHJpY3MkKSl9LGRpcmVjdGl2ZXM6W3B5dF0scGlwZXM6W3dNXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKG15dCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJucG1pLXJlc3VsdHMtZG93bmxvYWQiLHRlbXBsYXRlOidcbiAgICA8cmVzdWx0cy1kb3dubG9hZC1jb21wb25lbnRcbiAgICAgIFtudW1GbGFnZ2VkQW5ub3RhdGlvbnNdPSJudW1GbGFnZ2VkQW5ub3RhdGlvbnMkIHwgYXN5bmMiXG4gICAgICBbcnVuc109ImFjdGl2ZVJ1bnMkIHwgYXN5bmMiXG4gICAgICBbZmxhZ2dlZERhdGFdPSJmbGFnZ2VkRGF0YSQgfCBhc3luYyJcbiAgICAgIFttZXRyaWNzXT0ibWV0cmljcyQgfCBhc3luYyJcbiAgICA+PC9yZXN1bHRzLWRvd25sb2FkLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLG51bGwpO2NvbnN0IHV5dD1uZXcgR2EoIk1hdENoaXBSZW1vdmUiKSxmeXQ9bmV3IEdhKCJNYXRDaGlwQXZhdGFyIiksZ3l0PW5ldyBHYSgiTWF0Q2hpcFRyYWlsaW5nSWNvbiIpLGh5dD0kSShKSShRSShjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9lbGVtZW50UmVmPXR9fSksInByaW1hcnkiKSwtMSk7Y2xhc3MgYnl0e31ieXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGJ5dCl9LGJ5dC7JtWRpcj1sbyh7dHlwZTpieXQsc2VsZWN0b3JzOltbIm1hdC1jaGlwLWF2YXRhciJdLFsiIiwibWF0Q2hpcEF2YXRhciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1jaGlwLWF2YXRhciJdLGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6Znl0LHVzZUV4aXN0aW5nOmJ5dH1dKV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGJ5dCxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJtYXQtY2hpcC1hdmF0YXIsIFttYXRDaGlwQXZhdGFyXSIsaG9zdDp7Y2xhc3M6Im1hdC1jaGlwLWF2YXRhciJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Znl0LHVzZUV4aXN0aW5nOmJ5dH1dfV19XSxudWxsLG51bGwpO2NsYXNzIHl5dHt9eXl0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx5eXQpfSx5eXQuybVkaXI9bG8oe3R5cGU6eXl0LHNlbGVjdG9yczpbWyJtYXQtY2hpcC10cmFpbGluZy1pY29uIl0sWyIiLCJtYXRDaGlwVHJhaWxpbmdJY29uIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWNoaXAtdHJhaWxpbmctaWNvbiJdLGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6Z3l0LHVzZUV4aXN0aW5nOnl5dH1dKV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHl5dCxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJtYXQtY2hpcC10cmFpbGluZy1pY29uLCBbbWF0Q2hpcFRyYWlsaW5nSWNvbl0iLGhvc3Q6e2NsYXNzOiJtYXQtY2hpcC10cmFpbGluZy1pY29uIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpneXQsdXNlRXhpc3Rpbmc6eXl0fV19XX1dLG51bGwsbnVsbCk7Y2xhc3MgX3l0IGV4dGVuZHMgaHl0e2NvbnN0cnVjdG9yKHQsZSxuLG8saSxhLHIscyl7c3VwZXIodCksdGhpcy5fbmdab25lPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9oYXNGb2N1cz0hMSx0aGlzLmNoaXBMaXN0U2VsZWN0YWJsZT0hMCx0aGlzLl9jaGlwTGlzdE11bHRpcGxlPSExLHRoaXMuX2NoaXBMaXN0RGlzYWJsZWQ9ITEsdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fc2VsZWN0YWJsZT0hMCx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9yZW1vdmFibGU9ITAsdGhpcy5fb25Gb2N1cz1uZXcgSSx0aGlzLl9vbkJsdXI9bmV3IEksdGhpcy5zZWxlY3Rpb25DaGFuZ2U9bmV3IExoLHRoaXMuZGVzdHJveWVkPW5ldyBMaCx0aGlzLnJlbW92ZWQ9bmV3IExoLHRoaXMuX2FkZEhvc3RDbGFzc05hbWUoKSx0aGlzLl9jaGlwUmlwcGxlVGFyZ2V0PWEuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5fY2hpcFJpcHBsZVRhcmdldC5jbGFzc0xpc3QuYWRkKCJtYXQtY2hpcC1yaXBwbGUiKSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY2hpcFJpcHBsZVRhcmdldCksdGhpcy5fY2hpcFJpcHBsZT1uZXcgUEgodGhpcyxlLHRoaXMuX2NoaXBSaXBwbGVUYXJnZXQsbiksdGhpcy5fY2hpcFJpcHBsZS5zZXR1cFRyaWdnZXJFdmVudHModCksdGhpcy5yaXBwbGVDb25maWc9b3x8e30sdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPSJOb29wQW5pbWF0aW9ucyI9PT1yLHRoaXMudGFiSW5kZXg9bnVsbCE9cyYmcGFyc2VJbnQocyl8fC0xfWdldCByaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHx0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZHx8ISF0aGlzLnJpcHBsZUNvbmZpZy5kaXNhYmxlZH1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWR9c2V0IHNlbGVjdGVkKHQpe2NvbnN0IGU9eXoodCk7ZSE9PXRoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9ZSx0aGlzLl9kaXNwYXRjaFNlbGVjdGlvbkNoYW5nZSgpKX1nZXQgdmFsdWUoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fdmFsdWU/dGhpcy5fdmFsdWU6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50fXNldCB2YWx1ZSh0KXt0aGlzLl92YWx1ZT10fWdldCBzZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGFibGUmJnRoaXMuY2hpcExpc3RTZWxlY3RhYmxlfXNldCBzZWxlY3RhYmxlKHQpe3RoaXMuX3NlbGVjdGFibGU9eXoodCl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2NoaXBMaXN0RGlzYWJsZWR8fHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZCh0KXt0aGlzLl9kaXNhYmxlZD15eih0KX1nZXQgcmVtb3ZhYmxlKCl7cmV0dXJuIHRoaXMuX3JlbW92YWJsZX1zZXQgcmVtb3ZhYmxlKHQpe3RoaXMuX3JlbW92YWJsZT15eih0KX1nZXQgYXJpYVNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuc2VsZWN0YWJsZSYmKHRoaXMuX2NoaXBMaXN0TXVsdGlwbGV8fHRoaXMuc2VsZWN0ZWQpP3RoaXMuc2VsZWN0ZWQudG9TdHJpbmcoKTpudWxsfV9hZGRIb3N0Q2xhc3NOYW1lKCl7Y29uc3QgdD0ibWF0LWJhc2ljLWNoaXAiLGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2UuaGFzQXR0cmlidXRlKHQpfHxlLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PXQ/ZS5jbGFzc0xpc3QuYWRkKHQpOmUuY2xhc3NMaXN0LmFkZCgibWF0LXN0YW5kYXJkLWNoaXAiKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveWVkLmVtaXQoe2NoaXA6dGhpc30pLHRoaXMuX2NoaXBSaXBwbGUuX3JlbW92ZVRyaWdnZXJFdmVudHMoKX1zZWxlY3QoKXt0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPSEwLHRoaXMuX2Rpc3BhdGNoU2VsZWN0aW9uQ2hhbmdlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWRlc2VsZWN0KCl7dGhpcy5fc2VsZWN0ZWQmJih0aGlzLl9zZWxlY3RlZD0hMSx0aGlzLl9kaXNwYXRjaFNlbGVjdGlvbkNoYW5nZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1zZWxlY3RWaWFJbnRlcmFjdGlvbigpe3RoaXMuX3NlbGVjdGVkfHwodGhpcy5fc2VsZWN0ZWQ9ITAsdGhpcy5fZGlzcGF0Y2hTZWxlY3Rpb25DaGFuZ2UoITApLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX10b2dnbGVTZWxlY3RlZCh0PSExKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWQ9IXRoaXMuc2VsZWN0ZWQsdGhpcy5fZGlzcGF0Y2hTZWxlY3Rpb25DaGFuZ2UodCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5zZWxlY3RlZH1mb2N1cygpe3RoaXMuX2hhc0ZvY3VzfHwodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5fb25Gb2N1cy5uZXh0KHtjaGlwOnRoaXN9KSksdGhpcy5faGFzRm9jdXM9ITB9cmVtb3ZlKCl7dGhpcy5yZW1vdmFibGUmJnRoaXMucmVtb3ZlZC5lbWl0KHtjaGlwOnRoaXN9KX1faGFuZGxlQ2xpY2sodCl7dGhpcy5kaXNhYmxlZD90LnByZXZlbnREZWZhdWx0KCk6dC5zdG9wUHJvcGFnYXRpb24oKX1faGFuZGxlS2V5ZG93bih0KXtpZighdGhpcy5kaXNhYmxlZClzd2l0Y2godC5rZXlDb2RlKXtjYXNlIDQ2OmNhc2UgODp0aGlzLnJlbW92ZSgpLHQucHJldmVudERlZmF1bHQoKTticmVhaztjYXNlIGZ6OnRoaXMuc2VsZWN0YWJsZSYmdGhpcy50b2dnbGVTZWxlY3RlZCghMCksdC5wcmV2ZW50RGVmYXVsdCgpfX1fYmx1cigpe3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKGJlKDEpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5fbmdab25lLnJ1bigoKCk9Pnt0aGlzLl9oYXNGb2N1cz0hMSx0aGlzLl9vbkJsdXIubmV4dCh7Y2hpcDp0aGlzfSl9KSl9KSl9X2Rpc3BhdGNoU2VsZWN0aW9uQ2hhbmdlKHQ9ITEpe3RoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoe3NvdXJjZTp0aGlzLGlzVXNlcklucHV0OnQsc2VsZWN0ZWQ6dGhpcy5fc2VsZWN0ZWR9KX19X3l0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxfeXQpKFNtKGhnKSxTbShhXyksU20od3opLFNtKHdILDgpLFNtKFVnKSxTbShaXyksU20oVlAsOCksTmEoInRhYmluZGV4IikpfSxfeXQuybVkaXI9bG8oe3R5cGU6X3l0LHNlbGVjdG9yczpbWyJtYXQtYmFzaWMtY2hpcCJdLFsiIiwibWF0LWJhc2ljLWNoaXAiLCIiXSxbIm1hdC1jaGlwIl0sWyIiLCJtYXQtY2hpcCIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbiB0KGUsbixvKXtpZigxJmUmJigkaChvLGZ5dCw1KSwkaChvLGd5dCw1KSwkaChvLHV5dCw1KSksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi5hdmF0YXI9dC5maXJzdCksSmgodD10YigpKSYmKG4udHJhaWxpbmdJY29uPXQuZmlyc3QpLEpoKHQ9dGIoKSkmJihuLnJlbW92ZUljb249dC5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwib3B0aW9uIiwxLCJtYXQtY2hpcCIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmVm0oImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlQ2xpY2soZSl9KSkoImtleWRvd24iLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9oYW5kbGVLZXlkb3duKGUpfSkpKCJmb2N1cyIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5mb2N1cygpfSkpKCJibHVyIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9ibHVyKCl9KSksMiZlJiYoanAoInRhYmluZGV4IixuLmRpc2FibGVkP251bGw6bi50YWJJbmRleCkoImRpc2FibGVkIixuLmRpc2FibGVkfHxudWxsKSgiYXJpYS1kaXNhYmxlZCIsbi5kaXNhYmxlZC50b1N0cmluZygpKSgiYXJpYS1zZWxlY3RlZCIsbi5hcmlhU2VsZWN0ZWQpLHB1KCJtYXQtY2hpcC1zZWxlY3RlZCIsbi5zZWxlY3RlZCkoIm1hdC1jaGlwLXdpdGgtYXZhdGFyIixuLmF2YXRhcikoIm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbiIsbi50cmFpbGluZ0ljb258fG4ucmVtb3ZlSWNvbikoIm1hdC1jaGlwLWRpc2FibGVkIixuLmRpc2FibGVkKSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLG4uX2FuaW1hdGlvbnNEaXNhYmxlZCkpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsdGFiSW5kZXg6InRhYkluZGV4IixzZWxlY3RlZDoic2VsZWN0ZWQiLHZhbHVlOiJ2YWx1ZSIsc2VsZWN0YWJsZToic2VsZWN0YWJsZSIsZGlzYWJsZWQ6ImRpc2FibGVkIixyZW1vdmFibGU6InJlbW92YWJsZSJ9LG91dHB1dHM6e3NlbGVjdGlvbkNoYW5nZToic2VsZWN0aW9uQ2hhbmdlIixkZXN0cm95ZWQ6ImRlc3Ryb3llZCIscmVtb3ZlZDoicmVtb3ZlZCJ9LGV4cG9ydEFzOlsibWF0Q2hpcCJdLGZlYXR1cmVzOlt4cF19KSxfeXQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpoZ30se3R5cGU6YV99LHt0eXBlOnd6fSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W3dIXX1dfSx7dHlwZTpVZ30se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W1pfXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1ZQXX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6amEsYXJnczpbInRhYmluZGV4Il19XX1dLF95dC5wcm9wRGVjb3JhdG9ycz17YXZhdGFyOlt7dHlwZTpxYSxhcmdzOltmeXRdfV0sdHJhaWxpbmdJY29uOlt7dHlwZTpxYSxhcmdzOltneXRdfV0scmVtb3ZlSWNvbjpbe3R5cGU6cWEsYXJnczpbdXl0XX1dLHNlbGVjdGVkOlt7dHlwZTp4eX1dLHZhbHVlOlt7dHlwZTp4eX1dLHNlbGVjdGFibGU6W3t0eXBlOnh5fV0sZGlzYWJsZWQ6W3t0eXBlOnh5fV0scmVtb3ZhYmxlOlt7dHlwZTp4eX1dLHNlbGVjdGlvbkNoYW5nZTpbe3R5cGU6T3l9XSxkZXN0cm95ZWQ6W3t0eXBlOk95fV0scmVtb3ZlZDpbe3R5cGU6T3l9XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChfeXQsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoibWF0LWJhc2ljLWNoaXAsIFttYXQtYmFzaWMtY2hpcF0sIG1hdC1jaGlwLCBbbWF0LWNoaXBdIixpbnB1dHM6WyJjb2xvciIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCJdLGV4cG9ydEFzOiJtYXRDaGlwIixob3N0OntjbGFzczoibWF0LWNoaXAgbWF0LWZvY3VzLWluZGljYXRvciIsIlthdHRyLnRhYmluZGV4XSI6ImRpc2FibGVkID8gbnVsbCA6IHRhYkluZGV4Iixyb2xlOiJvcHRpb24iLCJbY2xhc3MubWF0LWNoaXAtc2VsZWN0ZWRdIjoic2VsZWN0ZWQiLCJbY2xhc3MubWF0LWNoaXAtd2l0aC1hdmF0YXJdIjoiYXZhdGFyIiwiW2NsYXNzLm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbl0iOiJ0cmFpbGluZ0ljb24gfHwgcmVtb3ZlSWNvbiIsIltjbGFzcy5tYXQtY2hpcC1kaXNhYmxlZF0iOiJkaXNhYmxlZCIsIltjbGFzcy5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZV0iOiJfYW5pbWF0aW9uc0Rpc2FibGVkIiwiW2F0dHIuZGlzYWJsZWRdIjoiZGlzYWJsZWQgfHwgbnVsbCIsIlthdHRyLmFyaWEtZGlzYWJsZWRdIjoiZGlzYWJsZWQudG9TdHJpbmcoKSIsIlthdHRyLmFyaWEtc2VsZWN0ZWRdIjoiYXJpYVNlbGVjdGVkIiwiKGNsaWNrKSI6Il9oYW5kbGVDbGljaygkZXZlbnQpIiwiKGtleWRvd24pIjoiX2hhbmRsZUtleWRvd24oJGV2ZW50KSIsIihmb2N1cykiOiJmb2N1cygpIiwiKGJsdXIpIjoiX2JsdXIoKSJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9LHt0eXBlOmFffSx7dHlwZTp3en0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOlt3SF19XX0se3R5cGU6VWd9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltaX119XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltWUF19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOmphLGFyZ3M6WyJ0YWJpbmRleCJdfV19XX0pLHtzZWxlY3Rpb25DaGFuZ2U6W3t0eXBlOk95fV0sZGVzdHJveWVkOlt7dHlwZTpPeX1dLHJlbW92ZWQ6W3t0eXBlOk95fV0sc2VsZWN0ZWQ6W3t0eXBlOnh5fV0sdmFsdWU6W3t0eXBlOnh5fV0sc2VsZWN0YWJsZTpbe3R5cGU6eHl9XSxkaXNhYmxlZDpbe3R5cGU6eHl9XSxyZW1vdmFibGU6W3t0eXBlOnh5fV0sYXZhdGFyOlt7dHlwZTpxYSxhcmdzOltmeXRdfV0sdHJhaWxpbmdJY29uOlt7dHlwZTpxYSxhcmdzOltneXRdfV0scmVtb3ZlSWNvbjpbe3R5cGU6cWEsYXJnczpbdXl0XX1dfSk7Y2xhc3MgQ3l0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fcGFyZW50Q2hpcD10LCJCVVRUT04iPT09ZS5uYXRpdmVFbGVtZW50Lm5vZGVOYW1lJiZlLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0eXBlIiwiYnV0dG9uIil9X2hhbmRsZUNsaWNrKHQpe2NvbnN0IGU9dGhpcy5fcGFyZW50Q2hpcDtlLnJlbW92YWJsZSYmIWUuZGlzYWJsZWQmJmUucmVtb3ZlKCksdC5zdG9wUHJvcGFnYXRpb24oKX19Q3l0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxDeXQpKFNtKF95dCksU20oaGcpKX0sQ3l0Lsm1ZGlyPWxvKHt0eXBlOkN5dCxzZWxlY3RvcnM6W1siIiwibWF0Q2hpcFJlbW92ZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1jaGlwLXJlbW92ZSIsIm1hdC1jaGlwLXRyYWlsaW5nLWljb24iXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmVm0oImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5faGFuZGxlQ2xpY2soZSl9KSl9LGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6dXl0LHVzZUV4aXN0aW5nOkN5dH1dKV19KSxDeXQuY3RvclBhcmFtZXRlcnM9KCk9Plt7dHlwZTpfeXR9LHt0eXBlOmhnfV0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChDeXQsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoiW21hdENoaXBSZW1vdmVdIixob3N0OntjbGFzczoibWF0LWNoaXAtcmVtb3ZlIG1hdC1jaGlwLXRyYWlsaW5nLWljb24iLCIoY2xpY2spIjoiX2hhbmRsZUNsaWNrKCRldmVudCkifSxwcm92aWRlcnM6W3twcm92aWRlOnV5dCx1c2VFeGlzdGluZzpDeXR9XX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOl95dH0se3R5cGU6aGd9XX0pLG51bGwpOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KY29uc3QgTXl0PW5ldyBHYSgibWF0LWNoaXBzLWRlZmF1bHQtb3B0aW9ucyIpLHZ5dD10SChjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsbixvKXt0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI9dCx0aGlzLl9wYXJlbnRGb3JtPWUsdGhpcy5fcGFyZW50Rm9ybUdyb3VwPW4sdGhpcy5uZ0NvbnRyb2w9b319KTsKLyoqCiAgICAgKiBAbGljZW5zZQogICAgICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAgICAqCiAgICAgKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogICAgICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZQogICAgICovbGV0IHh5dD0wO2NsYXNzIE95dHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc291cmNlPXQsdGhpcy52YWx1ZT1lfX1jbGFzcyBQeXQgZXh0ZW5kcyB2eXR7Y29uc3RydWN0b3IodCxlLG4sbyxpLGEscil7c3VwZXIoYSxvLGksciksdGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fZGlyPW4sdGhpcy5jb250cm9sVHlwZT0ibWF0LWNoaXAtbGlzdCIsdGhpcy5fbGFzdERlc3Ryb3llZENoaXBJbmRleD1udWxsLHRoaXMuX2Rlc3Ryb3llZD1uZXcgSSx0aGlzLl91aWQ9Im1hdC1jaGlwLWxpc3QtIit4eXQrKyx0aGlzLl90YWJJbmRleD0wLHRoaXMuX3VzZXJUYWJJbmRleD1udWxsLHRoaXMuX29uVG91Y2hlZD0oKT0+e30sdGhpcy5fb25DaGFuZ2U9KCk9Pnt9LHRoaXMuX211bHRpcGxlPSExLHRoaXMuX2NvbXBhcmVXaXRoPSh0LGUpPT50PT09ZSx0aGlzLl9yZXF1aXJlZD0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLmFyaWFPcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIsdGhpcy5fc2VsZWN0YWJsZT0hMCx0aGlzLmNoYW5nZT1uZXcgTGgsdGhpcy52YWx1ZUNoYW5nZT1uZXcgTGgsdGhpcy5uZ0NvbnRyb2wmJih0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yPXRoaXMpfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLm11bHRpcGxlP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOnRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdfWdldCByb2xlKCl7cmV0dXJuIHRoaXMuZW1wdHk/bnVsbDoibGlzdGJveCJ9Z2V0IG11bHRpcGxlKCl7cmV0dXJuIHRoaXMuX211bHRpcGxlfXNldCBtdWx0aXBsZSh0KXt0aGlzLl9tdWx0aXBsZT15eih0KSx0aGlzLl9zeW5jQ2hpcHNTdGF0ZSgpfWdldCBjb21wYXJlV2l0aCgpe3JldHVybiB0aGlzLl9jb21wYXJlV2l0aH1zZXQgY29tcGFyZVdpdGgodCl7dGhpcy5fY29tcGFyZVdpdGg9dCx0aGlzLl9zZWxlY3Rpb25Nb2RlbCYmdGhpcy5faW5pdGlhbGl6ZVNlbGVjdGlvbigpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX1zZXQgdmFsdWUodCl7dGhpcy53cml0ZVZhbHVlKHQpLHRoaXMuX3ZhbHVlPXR9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2NoaXBJbnB1dD90aGlzLl9jaGlwSW5wdXQuaWQ6dGhpcy5fdWlkfWdldCByZXF1aXJlZCgpe3JldHVybiB0aGlzLl9yZXF1aXJlZH1zZXQgcmVxdWlyZWQodCl7dGhpcy5fcmVxdWlyZWQ9eXoodCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfWdldCBwbGFjZWhvbGRlcigpe3JldHVybiB0aGlzLl9jaGlwSW5wdXQ/dGhpcy5fY2hpcElucHV0LnBsYWNlaG9sZGVyOnRoaXMuX3BsYWNlaG9sZGVyfXNldCBwbGFjZWhvbGRlcih0KXt0aGlzLl9wbGFjZWhvbGRlcj10LHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgZm9jdXNlZCgpe3JldHVybiB0aGlzLl9jaGlwSW5wdXQmJnRoaXMuX2NoaXBJbnB1dC5mb2N1c2VkfHx0aGlzLl9oYXNGb2N1c2VkQ2hpcCgpfWdldCBlbXB0eSgpe3JldHVybighdGhpcy5fY2hpcElucHV0fHx0aGlzLl9jaGlwSW5wdXQuZW1wdHkpJiYoIXRoaXMuY2hpcHN8fDA9PT10aGlzLmNoaXBzLmxlbmd0aCl9Z2V0IHNob3VsZExhYmVsRmxvYXQoKXtyZXR1cm4hdGhpcy5lbXB0eXx8dGhpcy5mb2N1c2VkfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLm5nQ29udHJvbD8hIXRoaXMubmdDb250cm9sLmRpc2FibGVkOnRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZCh0KXt0aGlzLl9kaXNhYmxlZD15eih0KSx0aGlzLl9zeW5jQ2hpcHNTdGF0ZSgpfWdldCBzZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGFibGV9c2V0IHNlbGVjdGFibGUodCl7dGhpcy5fc2VsZWN0YWJsZT15eih0KSx0aGlzLmNoaXBzJiZ0aGlzLmNoaXBzLmZvckVhY2goKHQ9PnQuY2hpcExpc3RTZWxlY3RhYmxlPXRoaXMuX3NlbGVjdGFibGUpKX1zZXQgdGFiSW5kZXgodCl7dGhpcy5fdXNlclRhYkluZGV4PXQsdGhpcy5fdGFiSW5kZXg9dH1nZXQgY2hpcFNlbGVjdGlvbkNoYW5nZXMoKXtyZXR1cm4gcmUoLi4udGhpcy5jaGlwcy5tYXAoKHQ9PnQuc2VsZWN0aW9uQ2hhbmdlKSkpfWdldCBjaGlwRm9jdXNDaGFuZ2VzKCl7cmV0dXJuIHJlKC4uLnRoaXMuY2hpcHMubWFwKCh0PT50Ll9vbkZvY3VzKSkpfWdldCBjaGlwQmx1ckNoYW5nZXMoKXtyZXR1cm4gcmUoLi4udGhpcy5jaGlwcy5tYXAoKHQ9PnQuX29uQmx1cikpKX1nZXQgY2hpcFJlbW92ZUNoYW5nZXMoKXtyZXR1cm4gcmUoLi4udGhpcy5jaGlwcy5tYXAoKHQ9PnQuZGVzdHJveWVkKSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2tleU1hbmFnZXI9bmV3IGVJKHRoaXMuY2hpcHMpLndpdGhXcmFwKCkud2l0aFZlcnRpY2FsT3JpZW50YXRpb24oKS53aXRoSG9tZUFuZEVuZCgpLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5fZGlyP3RoaXMuX2Rpci52YWx1ZToibHRyIiksdGhpcy5fZGlyJiZ0aGlzLl9kaXIuY2hhbmdlLnBpcGUoSWUodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCh0PT50aGlzLl9rZXlNYW5hZ2VyLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odCkpKSx0aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5waXBlKEllKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLl9hbGxvd0ZvY3VzRXNjYXBlKCl9KSksdGhpcy5jaGlwcy5jaGFuZ2VzLnBpcGUoTmUobnVsbCksSWUodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMuZGlzYWJsZWQmJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57dGhpcy5fc3luY0NoaXBzU3RhdGUoKX0pKSx0aGlzLl9yZXNldENoaXBzKCksdGhpcy5faW5pdGlhbGl6ZVNlbGVjdGlvbigpLHRoaXMuX3VwZGF0ZVRhYkluZGV4KCksdGhpcy5fdXBkYXRlRm9jdXNGb3JEZXN0cm95ZWRDaGlwcygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pKX1uZ09uSW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsPW5ldyBvRih0aGlzLm11bHRpcGxlLHZvaWQgMCwhMSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW5nRG9DaGVjaygpe3RoaXMubmdDb250cm9sJiYodGhpcy51cGRhdGVFcnJvclN0YXRlKCksdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQhPT10aGlzLl9kaXNhYmxlZCYmKHRoaXMuZGlzYWJsZWQ9ISF0aGlzLm5nQ29udHJvbC5kaXNhYmxlZCkpfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX2Ryb3BTdWJzY3JpcHRpb25zKCl9cmVnaXN0ZXJJbnB1dCh0KXt0aGlzLl9jaGlwSW5wdXQ9dCx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLW1hdC1jaGlwLWlucHV0Iix0LmlkKX1zZXREZXNjcmliZWRCeUlkcyh0KXt0aGlzLl9hcmlhRGVzY3JpYmVkYnk9dC5qb2luKCIgIil9d3JpdGVWYWx1ZSh0KXt0aGlzLmNoaXBzJiZ0aGlzLl9zZXRTZWxlY3Rpb25CeVZhbHVlKHQsITEpfXJlZ2lzdGVyT25DaGFuZ2UodCl7dGhpcy5fb25DaGFuZ2U9dH1yZWdpc3Rlck9uVG91Y2hlZCh0KXt0aGlzLl9vblRvdWNoZWQ9dH1zZXREaXNhYmxlZFN0YXRlKHQpe3RoaXMuZGlzYWJsZWQ9dCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9b25Db250YWluZXJDbGljayh0KXt0aGlzLl9vcmlnaW5hdGVzRnJvbUNoaXAodCl8fHRoaXMuZm9jdXMoKX1mb2N1cyh0KXt0aGlzLmRpc2FibGVkfHx0aGlzLl9jaGlwSW5wdXQmJnRoaXMuX2NoaXBJbnB1dC5mb2N1c2VkfHwodGhpcy5jaGlwcy5sZW5ndGg+MD8odGhpcy5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpOih0aGlzLl9mb2N1c0lucHV0KHQpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSkpfV9mb2N1c0lucHV0KHQpe3RoaXMuX2NoaXBJbnB1dCYmdGhpcy5fY2hpcElucHV0LmZvY3VzKHQpfV9rZXlkb3duKHQpe2NvbnN0IGU9dC50YXJnZXQ7ZSYmZS5jbGFzc0xpc3QuY29udGFpbnMoIm1hdC1jaGlwIikmJih0aGlzLl9rZXlNYW5hZ2VyLm9uS2V5ZG93bih0KSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV91cGRhdGVUYWJJbmRleCgpe3RoaXMuX3RhYkluZGV4PXRoaXMuX3VzZXJUYWJJbmRleHx8KDA9PT10aGlzLmNoaXBzLmxlbmd0aD8tMTowKX1fdXBkYXRlRm9jdXNGb3JEZXN0cm95ZWRDaGlwcygpe2lmKG51bGwhPXRoaXMuX2xhc3REZXN0cm95ZWRDaGlwSW5kZXgpaWYodGhpcy5jaGlwcy5sZW5ndGgpe2NvbnN0IHQ9TWF0aC5taW4odGhpcy5fbGFzdERlc3Ryb3llZENoaXBJbmRleCx0aGlzLmNoaXBzLmxlbmd0aC0xKTt0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odCl9ZWxzZSB0aGlzLmZvY3VzKCk7dGhpcy5fbGFzdERlc3Ryb3llZENoaXBJbmRleD1udWxsfV9pc1ZhbGlkSW5kZXgodCl7cmV0dXJuIHQ+PTAmJnQ8dGhpcy5jaGlwcy5sZW5ndGh9X3NldFNlbGVjdGlvbkJ5VmFsdWUodCxlPSEwKXtpZih0aGlzLl9jbGVhclNlbGVjdGlvbigpLHRoaXMuY2hpcHMuZm9yRWFjaCgodD0+dC5kZXNlbGVjdCgpKSksQXJyYXkuaXNBcnJheSh0KSl0LmZvckVhY2goKHQ9PnRoaXMuX3NlbGVjdFZhbHVlKHQsZSkpKSx0aGlzLl9zb3J0VmFsdWVzKCk7ZWxzZXtjb25zdCBuPXRoaXMuX3NlbGVjdFZhbHVlKHQsZSk7biYmZSYmdGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKG4pfX1fc2VsZWN0VmFsdWUodCxlPSEwKXtjb25zdCBuPXRoaXMuY2hpcHMuZmluZCgoZT0+bnVsbCE9ZS52YWx1ZSYmdGhpcy5fY29tcGFyZVdpdGgoZS52YWx1ZSx0KSkpO3JldHVybiBuJiYoZT9uLnNlbGVjdFZpYUludGVyYWN0aW9uKCk6bi5zZWxlY3QoKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QobikpLG59X2luaXRpYWxpemVTZWxlY3Rpb24oKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgoKT0+eyh0aGlzLm5nQ29udHJvbHx8dGhpcy5fdmFsdWUpJiYodGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0aGlzLm5nQ29udHJvbD90aGlzLm5nQ29udHJvbC52YWx1ZTp0aGlzLl92YWx1ZSwhMSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX0pKX1fY2xlYXJTZWxlY3Rpb24odCl7dGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLmNoaXBzLmZvckVhY2goKGU9PntlIT09dCYmZS5kZXNlbGVjdCgpfSkpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1fc29ydFZhbHVlcygpe3RoaXMuX211bHRpcGxlJiYodGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLmNoaXBzLmZvckVhY2goKHQ9Pnt0LnNlbGVjdGVkJiZ0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QodCl9KSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1fcHJvcGFnYXRlQ2hhbmdlcyh0KXtsZXQgZT1udWxsO2U9QXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdGVkKT90aGlzLnNlbGVjdGVkLm1hcCgodD0+dC52YWx1ZSkpOnRoaXMuc2VsZWN0ZWQ/dGhpcy5zZWxlY3RlZC52YWx1ZTp0LHRoaXMuX3ZhbHVlPWUsdGhpcy5jaGFuZ2UuZW1pdChuZXcgT3l0KHRoaXMsZSkpLHRoaXMudmFsdWVDaGFuZ2UuZW1pdChlKSx0aGlzLl9vbkNoYW5nZShlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1fYmx1cigpe3RoaXMuX2hhc0ZvY3VzZWRDaGlwKCl8fHRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSksdGhpcy5kaXNhYmxlZHx8KHRoaXMuX2NoaXBJbnB1dD9zZXRUaW1lb3V0KCgoKT0+e3RoaXMuZm9jdXNlZHx8dGhpcy5fbWFya0FzVG91Y2hlZCgpfSkpOnRoaXMuX21hcmtBc1RvdWNoZWQoKSl9X21hcmtBc1RvdWNoZWQoKXt0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9X2FsbG93Rm9jdXNFc2NhcGUoKXstMSE9PXRoaXMuX3RhYkluZGV4JiYodGhpcy5fdGFiSW5kZXg9LTEsc2V0VGltZW91dCgoKCk9Pnt0aGlzLl90YWJJbmRleD10aGlzLl91c2VyVGFiSW5kZXh8fDAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSkpfV9yZXNldENoaXBzKCl7dGhpcy5fZHJvcFN1YnNjcmlwdGlvbnMoKSx0aGlzLl9saXN0ZW5Ub0NoaXBzRm9jdXMoKSx0aGlzLl9saXN0ZW5Ub0NoaXBzU2VsZWN0aW9uKCksdGhpcy5fbGlzdGVuVG9DaGlwc1JlbW92ZWQoKX1fZHJvcFN1YnNjcmlwdGlvbnMoKXt0aGlzLl9jaGlwRm9jdXNTdWJzY3JpcHRpb24mJih0aGlzLl9jaGlwRm9jdXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9jaGlwRm9jdXNTdWJzY3JpcHRpb249bnVsbCksdGhpcy5fY2hpcEJsdXJTdWJzY3JpcHRpb24mJih0aGlzLl9jaGlwQmx1clN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NoaXBCbHVyU3Vic2NyaXB0aW9uPW51bGwpLHRoaXMuX2NoaXBTZWxlY3Rpb25TdWJzY3JpcHRpb24mJih0aGlzLl9jaGlwU2VsZWN0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2hpcFNlbGVjdGlvblN1YnNjcmlwdGlvbj1udWxsKSx0aGlzLl9jaGlwUmVtb3ZlU3Vic2NyaXB0aW9uJiYodGhpcy5fY2hpcFJlbW92ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NoaXBSZW1vdmVTdWJzY3JpcHRpb249bnVsbCl9X2xpc3RlblRvQ2hpcHNTZWxlY3Rpb24oKXt0aGlzLl9jaGlwU2VsZWN0aW9uU3Vic2NyaXB0aW9uPXRoaXMuY2hpcFNlbGVjdGlvbkNoYW5nZXMuc3Vic2NyaWJlKCh0PT57dC5zb3VyY2Uuc2VsZWN0ZWQ/dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KHQuc291cmNlKTp0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdCh0LnNvdXJjZSksdGhpcy5tdWx0aXBsZXx8dGhpcy5jaGlwcy5mb3JFYWNoKCh0PT57IXRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQodCkmJnQuc2VsZWN0ZWQmJnQuZGVzZWxlY3QoKX0pKSx0LmlzVXNlcklucHV0JiZ0aGlzLl9wcm9wYWdhdGVDaGFuZ2VzKCl9KSl9X2xpc3RlblRvQ2hpcHNGb2N1cygpe3RoaXMuX2NoaXBGb2N1c1N1YnNjcmlwdGlvbj10aGlzLmNoaXBGb2N1c0NoYW5nZXMuc3Vic2NyaWJlKCh0PT57bGV0IGU9dGhpcy5jaGlwcy50b0FycmF5KCkuaW5kZXhPZih0LmNoaXApO3RoaXMuX2lzVmFsaWRJbmRleChlKSYmdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKGUpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pKSx0aGlzLl9jaGlwQmx1clN1YnNjcmlwdGlvbj10aGlzLmNoaXBCbHVyQ2hhbmdlcy5zdWJzY3JpYmUoKCgpPT57dGhpcy5fYmx1cigpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pKX1fbGlzdGVuVG9DaGlwc1JlbW92ZWQoKXt0aGlzLl9jaGlwUmVtb3ZlU3Vic2NyaXB0aW9uPXRoaXMuY2hpcFJlbW92ZUNoYW5nZXMuc3Vic2NyaWJlKCh0PT57Y29uc3QgZT10LmNoaXAsbj10aGlzLmNoaXBzLnRvQXJyYXkoKS5pbmRleE9mKHQuY2hpcCk7dGhpcy5faXNWYWxpZEluZGV4KG4pJiZlLl9oYXNGb2N1cyYmKHRoaXMuX2xhc3REZXN0cm95ZWRDaGlwSW5kZXg9bil9KSl9X29yaWdpbmF0ZXNGcm9tQ2hpcCh0KXtsZXQgZT10LnRhcmdldDtmb3IoO2UmJmUhPT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7KXtpZihlLmNsYXNzTGlzdC5jb250YWlucygibWF0LWNoaXAiKSlyZXR1cm4hMDtlPWUucGFyZW50RWxlbWVudH1yZXR1cm4hMX1faGFzRm9jdXNlZENoaXAoKXtyZXR1cm4gdGhpcy5jaGlwcyYmdGhpcy5jaGlwcy5zb21lKCh0PT50Ll9oYXNGb2N1cykpfV9zeW5jQ2hpcHNTdGF0ZSgpe3RoaXMuY2hpcHMmJnRoaXMuY2hpcHMuZm9yRWFjaCgodD0+e3QuX2NoaXBMaXN0RGlzYWJsZWQ9dGhpcy5fZGlzYWJsZWQsdC5fY2hpcExpc3RNdWx0aXBsZT10aGlzLm11bHRpcGxlfSkpfX1QeXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFB5dCkoU20oaGcpLFNtKFVnKSxTbShISSw4KSxTbShpVSw4KSxTbShQVSw4KSxTbShiSCksU20oTWosMTApKX0sUHl0Lsm1Y21wPXRvKHt0eXBlOlB5dCxzZWxlY3RvcnM6W1sibWF0LWNoaXAtbGlzdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbiB0KGUsbixvKXtpZigxJmUmJiRoKG8sX3l0LDUpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4uY2hpcHM9dCl9fSxob3N0QXR0cnM6WzEsIm1hdC1jaGlwLWxpc3QiXSxob3N0VmFyczoxNSxob3N0QmluZGluZ3M6ZnVuY3Rpb24gdChlLG4pezEmZSYmVm0oImZvY3VzIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLmZvY3VzKCl9KSkoImJsdXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2JsdXIoKX0pKSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2tleWRvd24oZSl9KSksMiZlJiYoVHUoImlkIixuLl91aWQpLGpwKCJ0YWJpbmRleCIsbi5kaXNhYmxlZD9udWxsOm4uX3RhYkluZGV4KSgiYXJpYS1kZXNjcmliZWRieSIsbi5fYXJpYURlc2NyaWJlZGJ5fHxudWxsKSgiYXJpYS1yZXF1aXJlZCIsbi5yb2xlP24ucmVxdWlyZWQ6bnVsbCkoImFyaWEtZGlzYWJsZWQiLG4uZGlzYWJsZWQudG9TdHJpbmcoKSkoImFyaWEtaW52YWxpZCIsbi5lcnJvclN0YXRlKSgiYXJpYS1tdWx0aXNlbGVjdGFibGUiLG4ubXVsdGlwbGUpKCJyb2xlIixuLnJvbGUpKCJhcmlhLW9yaWVudGF0aW9uIixuLmFyaWFPcmllbnRhdGlvbikscHUoIm1hdC1jaGlwLWxpc3QtZGlzYWJsZWQiLG4uZGlzYWJsZWQpKCJtYXQtY2hpcC1saXN0LWludmFsaWQiLG4uZXJyb3JTdGF0ZSkoIm1hdC1jaGlwLWxpc3QtcmVxdWlyZWQiLG4ucmVxdWlyZWQpKX0saW5wdXRzOnthcmlhT3JpZW50YXRpb246WyJhcmlhLW9yaWVudGF0aW9uIiwiYXJpYU9yaWVudGF0aW9uIl0sbXVsdGlwbGU6Im11bHRpcGxlIixjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgiLHZhbHVlOiJ2YWx1ZSIscmVxdWlyZWQ6InJlcXVpcmVkIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLGRpc2FibGVkOiJkaXNhYmxlZCIsc2VsZWN0YWJsZToic2VsZWN0YWJsZSIsdGFiSW5kZXg6InRhYkluZGV4IixlcnJvclN0YXRlTWF0Y2hlcjoiZXJyb3JTdGF0ZU1hdGNoZXIifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRDaGlwTGlzdCJdLGZlYXR1cmVzOltwZyhbe3Byb3ZpZGU6YlYsdXNlRXhpc3Rpbmc6UHl0fV0pLHhwXSxuZ0NvbnRlbnRTZWxlY3RvcnM6WyIqIl0sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbMSwibWF0LWNoaXAtbGlzdC13cmFwcGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihabSgpLFJtKDAsImRpdiIsMCksWG0oMSksQW0oKSl9LHN0eWxlczpbJy5tYXQtY2hpcHtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApO2JvcmRlcjpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5tYXQtc3RhbmRhcmQtY2hpcHt0cmFuc2l0aW9uOmJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtkaXNwbGF5OmlubGluZS1mbGV4O3BhZGRpbmc6N3B4IDEycHg7Ym9yZGVyLXJhZGl1czoxNnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtjdXJzb3I6ZGVmYXVsdDttaW4taGVpZ2h0OjMycHg7aGVpZ2h0OjFweH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXN0YW5kYXJkLWNoaXB7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29ue3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHh9Lm1hdC1zdGFuZGFyZC1jaGlwOjphZnRlcnt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOmluaGVyaXQ7b3BhY2l0eTowO2NvbnRlbnQ6IiI7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHkgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5tYXQtc3RhbmRhcmQtY2hpcDpob3Zlcjo6YWZ0ZXJ7b3BhY2l0eTouMTJ9Lm1hdC1zdGFuZGFyZC1jaGlwOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXN0YW5kYXJkLWNoaXA6Zm9jdXM6OmFmdGVye29wYWNpdHk6LjE2fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zdGFuZGFyZC1jaGlwe291dGxpbmU6c29saWQgMXB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zdGFuZGFyZC1jaGlwOmZvY3Vze291dGxpbmU6ZG90dGVkIDJweH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtZGlzYWJsZWQ6OmFmdGVye29wYWNpdHk6MH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtZGlzYWJsZWQgLm1hdC1jaGlwLXJlbW92ZSwubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtZGlzYWJsZWQgLm1hdC1jaGlwLXRyYWlsaW5nLWljb257Y3Vyc29yOmRlZmF1bHR9Lm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi5tYXQtY2hpcC13aXRoLWF2YXRhciwubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC1hdmF0YXJ7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowfS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb24ubWF0LWNoaXAtd2l0aC1hdmF0YXJ7cGFkZGluZy1yaWdodDo4cHg7cGFkZGluZy1sZWZ0OjB9W2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb24ubWF0LWNoaXAtd2l0aC1hdmF0YXJ7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjB9Lm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbntwYWRkaW5nLXRvcDo3cHg7cGFkZGluZy1ib3R0b206N3B4O3BhZGRpbmctcmlnaHQ6OHB4O3BhZGRpbmctbGVmdDoxMnB4fVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29ue3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDoxMnB4fS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLWF2YXRhcntwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjEycHh9W2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLWF2YXRhcntwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjEycHh9Lm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1hdmF0YXJ7d2lkdGg6MjRweDtoZWlnaHQ6MjRweDttYXJnaW4tcmlnaHQ6OHB4O21hcmdpbi1sZWZ0OjRweH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1hdmF0YXJ7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDo0cHh9Lm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUsLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29ue3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7Y3Vyc29yOnBvaW50ZXJ9Lm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUsLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29ue21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUsW2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbnttYXJnaW4tcmlnaHQ6OHB4O21hcmdpbi1sZWZ0OjB9Lm1hdC1jaGlwLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtvdmVyZmxvdzpoaWRkZW59Lm1hdC1jaGlwLWxpc3Qtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW46LTRweH0ubWF0LWNoaXAtbGlzdC13cmFwcGVyIGlucHV0Lm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtY2hpcC1saXN0LXdyYXBwZXIgLm1hdC1zdGFuZGFyZC1jaGlwe21hcmdpbjo0cHh9Lm1hdC1jaGlwLWxpc3Qtc3RhY2tlZCAubWF0LWNoaXAtbGlzdC13cmFwcGVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5tYXQtY2hpcC1saXN0LXN0YWNrZWQgLm1hdC1jaGlwLWxpc3Qtd3JhcHBlciAubWF0LXN0YW5kYXJkLWNoaXB7d2lkdGg6MTAwJX0ubWF0LWNoaXAtYXZhdGFye2JvcmRlci1yYWRpdXM6NTAlO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW47b2JqZWN0LWZpdDpjb3Zlcn1pbnB1dC5tYXQtY2hpcC1pbnB1dHt3aWR0aDoxNTBweDttYXJnaW46NHB4O2ZsZXg6MSAwIDE1MHB4fVxuJ10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksUHl0LmN0b3JQYXJhbWV0ZXJzPSgpPT5be3R5cGU6aGd9LHt0eXBlOlVnfSx7dHlwZTpISSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTppVSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTpQVSxkZWNvcmF0b3JzOlt7dHlwZTpTcn1dfSx7dHlwZTpiSH0se3R5cGU6TWosZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOkRyfV19XSxQeXQucHJvcERlY29yYXRvcnM9e2Vycm9yU3RhdGVNYXRjaGVyOlt7dHlwZTp4eX1dLG11bHRpcGxlOlt7dHlwZTp4eX1dLGNvbXBhcmVXaXRoOlt7dHlwZTp4eX1dLHZhbHVlOlt7dHlwZTp4eX1dLHJlcXVpcmVkOlt7dHlwZTp4eX1dLHBsYWNlaG9sZGVyOlt7dHlwZTp4eX1dLGRpc2FibGVkOlt7dHlwZTp4eX1dLGFyaWFPcmllbnRhdGlvbjpbe3R5cGU6eHksYXJnczpbImFyaWEtb3JpZW50YXRpb24iXX1dLHNlbGVjdGFibGU6W3t0eXBlOnh5fV0sdGFiSW5kZXg6W3t0eXBlOnh5fV0sY2hhbmdlOlt7dHlwZTpPeX1dLHZhbHVlQ2hhbmdlOlt7dHlwZTpPeX1dLGNoaXBzOlt7dHlwZTpZYSxhcmdzOltfeXQse2Rlc2NlbmRhbnRzOiEwfV19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChQeXQsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWF0LWNoaXAtbGlzdCIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9Im1hdC1jaGlwLWxpc3Qtd3JhcHBlciI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PicsZXhwb3J0QXM6Im1hdENoaXBMaXN0Iixob3N0OnsiW2F0dHIudGFiaW5kZXhdIjoiZGlzYWJsZWQgPyBudWxsIDogX3RhYkluZGV4IiwiW2F0dHIuYXJpYS1kZXNjcmliZWRieV0iOiJfYXJpYURlc2NyaWJlZGJ5IHx8IG51bGwiLCJbYXR0ci5hcmlhLXJlcXVpcmVkXSI6InJvbGUgPyByZXF1aXJlZCA6IG51bGwiLCJbYXR0ci5hcmlhLWRpc2FibGVkXSI6ImRpc2FibGVkLnRvU3RyaW5nKCkiLCJbYXR0ci5hcmlhLWludmFsaWRdIjoiZXJyb3JTdGF0ZSIsIlthdHRyLmFyaWEtbXVsdGlzZWxlY3RhYmxlXSI6Im11bHRpcGxlIiwiW2F0dHIucm9sZV0iOiJyb2xlIiwiW2NsYXNzLm1hdC1jaGlwLWxpc3QtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbY2xhc3MubWF0LWNoaXAtbGlzdC1pbnZhbGlkXSI6ImVycm9yU3RhdGUiLCJbY2xhc3MubWF0LWNoaXAtbGlzdC1yZXF1aXJlZF0iOiJyZXF1aXJlZCIsIlthdHRyLmFyaWEtb3JpZW50YXRpb25dIjoiYXJpYU9yaWVudGF0aW9uIixjbGFzczoibWF0LWNoaXAtbGlzdCIsIihmb2N1cykiOiJmb2N1cygpIiwiKGJsdXIpIjoiX2JsdXIoKSIsIihrZXlkb3duKSI6Il9rZXlkb3duKCRldmVudCkiLCJbaWRdIjoiX3VpZCJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6YlYsdXNlRXhpc3Rpbmc6UHl0fV0sZW5jYXBzdWxhdGlvbjpIbi5Ob25lLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2gsc3R5bGVzOlsnLm1hdC1jaGlwe3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCk7Ym9yZGVyOm5vbmU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9Lm1hdC1zdGFuZGFyZC1jaGlwe3RyYW5zaXRpb246Ym94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO2Rpc3BsYXk6aW5saW5lLWZsZXg7cGFkZGluZzo3cHggMTJweDtib3JkZXItcmFkaXVzOjE2cHg7YWxpZ24taXRlbXM6Y2VudGVyO2N1cnNvcjpkZWZhdWx0O21pbi1oZWlnaHQ6MzJweDtoZWlnaHQ6MXB4fS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtc3RhbmRhcmQtY2hpcHt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb257d2lkdGg6MThweDtoZWlnaHQ6MThweH0ubWF0LXN0YW5kYXJkLWNoaXA6OmFmdGVye3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtvcGFjaXR5OjA7Y29udGVudDoiIjtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Lm1hdC1zdGFuZGFyZC1jaGlwOmhvdmVyOjphZnRlcntvcGFjaXR5Oi4xMn0ubWF0LXN0YW5kYXJkLWNoaXA6Zm9jdXN7b3V0bGluZTpub25lfS5tYXQtc3RhbmRhcmQtY2hpcDpmb2N1czo6YWZ0ZXJ7b3BhY2l0eTouMTZ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXN0YW5kYXJkLWNoaXB7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXN0YW5kYXJkLWNoaXA6Zm9jdXN7b3V0bGluZTpkb3R0ZWQgMnB4fS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZDo6YWZ0ZXJ7b3BhY2l0eTowfS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZCAubWF0LWNoaXAtcmVtb3ZlLC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbntjdXJzb3I6ZGVmYXVsdH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uLm1hdC1jaGlwLXdpdGgtYXZhdGFyLC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLWF2YXRhcntwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjB9Lm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi5tYXQtY2hpcC13aXRoLWF2YXRhcntwYWRkaW5nLXJpZ2h0OjhweDtwYWRkaW5nLWxlZnQ6MH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi5tYXQtY2hpcC13aXRoLWF2YXRhcntwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6MH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29ue3BhZGRpbmctdG9wOjdweDtwYWRkaW5nLWJvdHRvbTo3cHg7cGFkZGluZy1yaWdodDo4cHg7cGFkZGluZy1sZWZ0OjEycHh9W2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb257cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjEycHh9Lm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTJweH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTJweH0ubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLWF2YXRhcnt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O21hcmdpbi1yaWdodDo4cHg7bWFyZ2luLWxlZnQ6NHB4fVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLWF2YXRhcnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjRweH0ubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZSwubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb257d2lkdGg6MThweDtoZWlnaHQ6MThweDtjdXJzb3I6cG9pbnRlcn0ubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZSwubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb257bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZSxbZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29ue21hcmdpbi1yaWdodDo4cHg7bWFyZ2luLWxlZnQ6MH0ubWF0LWNoaXAtcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0O292ZXJmbG93OmhpZGRlbn0ubWF0LWNoaXAtbGlzdC13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbjotNHB4fS5tYXQtY2hpcC1saXN0LXdyYXBwZXIgaW5wdXQubWF0LWlucHV0LWVsZW1lbnQsLm1hdC1jaGlwLWxpc3Qtd3JhcHBlciAubWF0LXN0YW5kYXJkLWNoaXB7bWFyZ2luOjRweH0ubWF0LWNoaXAtbGlzdC1zdGFja2VkIC5tYXQtY2hpcC1saXN0LXdyYXBwZXJ7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9Lm1hdC1jaGlwLWxpc3Qtc3RhY2tlZCAubWF0LWNoaXAtbGlzdC13cmFwcGVyIC5tYXQtc3RhbmRhcmQtY2hpcHt3aWR0aDoxMDAlfS5tYXQtY2hpcC1hdmF0YXJ7Ym9yZGVyLXJhZGl1czo1MCU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbjtvYmplY3QtZml0OmNvdmVyfWlucHV0Lm1hdC1jaGlwLWlucHV0e3dpZHRoOjE1MHB4O21hcmdpbjo0cHg7ZmxleDoxIDAgMTUwcHh9XG4nXX1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmhnfSx7dHlwZTpVZ30se3R5cGU6SEksZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6aVUsZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6UFUsZGVjb3JhdG9yczpbe3R5cGU6U3J9XX0se3R5cGU6Ykh9LHt0eXBlOk1qLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTpEcn1dfV19KSx7YXJpYU9yaWVudGF0aW9uOlt7dHlwZTp4eSxhcmdzOlsiYXJpYS1vcmllbnRhdGlvbiJdfV0sY2hhbmdlOlt7dHlwZTpPeX1dLHZhbHVlQ2hhbmdlOlt7dHlwZTpPeX1dLG11bHRpcGxlOlt7dHlwZTp4eX1dLGNvbXBhcmVXaXRoOlt7dHlwZTp4eX1dLHZhbHVlOlt7dHlwZTp4eX1dLHJlcXVpcmVkOlt7dHlwZTp4eX1dLHBsYWNlaG9sZGVyOlt7dHlwZTp4eX1dLGRpc2FibGVkOlt7dHlwZTp4eX1dLHNlbGVjdGFibGU6W3t0eXBlOnh5fV0sdGFiSW5kZXg6W3t0eXBlOnh5fV0sZXJyb3JTdGF0ZU1hdGNoZXI6W3t0eXBlOnh5fV0sY2hpcHM6W3t0eXBlOllhLGFyZ3M6W195dCx7ZGVzY2VuZGFudHM6ITB9XX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpsZXQgd3l0PTA7Y2xhc3Mga3l0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2RlZmF1bHRPcHRpb25zPWUsdGhpcy5mb2N1c2VkPSExLHRoaXMuX2FkZE9uQmx1cj0hMSx0aGlzLnNlcGFyYXRvcktleUNvZGVzPXRoaXMuX2RlZmF1bHRPcHRpb25zLnNlcGFyYXRvcktleUNvZGVzLHRoaXMuY2hpcEVuZD1uZXcgTGgsdGhpcy5wbGFjZWhvbGRlcj0iIix0aGlzLmlkPSJtYXQtY2hpcC1saXN0LWlucHV0LSIrd3l0KyssdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5pbnB1dEVsZW1lbnQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fXNldCBjaGlwTGlzdCh0KXt0JiYodGhpcy5fY2hpcExpc3Q9dCx0aGlzLl9jaGlwTGlzdC5yZWdpc3RlcklucHV0KHRoaXMpKX1nZXQgYWRkT25CbHVyKCl7cmV0dXJuIHRoaXMuX2FkZE9uQmx1cn1zZXQgYWRkT25CbHVyKHQpe3RoaXMuX2FkZE9uQmx1cj15eih0KX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fHRoaXMuX2NoaXBMaXN0JiZ0aGlzLl9jaGlwTGlzdC5kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5fZGlzYWJsZWQ9eXoodCl9Z2V0IGVtcHR5KCl7cmV0dXJuIXRoaXMuaW5wdXRFbGVtZW50LnZhbHVlfW5nT25DaGFuZ2VzKCl7dGhpcy5fY2hpcExpc3Quc3RhdGVDaGFuZ2VzLm5leHQoKX1uZ09uRGVzdHJveSgpe3RoaXMuY2hpcEVuZC5jb21wbGV0ZSgpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2ZvY3VzTGFzdENoaXBPbkJhY2tzcGFjZT10aGlzLmVtcHR5fV9rZXlkb3duKHQpe2lmKHQpe2lmKDkhPT10LmtleUNvZGV8fGJ6KHQsInNoaWZ0S2V5Iil8fHRoaXMuX2NoaXBMaXN0Ll9hbGxvd0ZvY3VzRXNjYXBlKCksOD09PXQua2V5Q29kZSYmdGhpcy5fZm9jdXNMYXN0Q2hpcE9uQmFja3NwYWNlKXJldHVybiB0aGlzLl9jaGlwTGlzdC5fa2V5TWFuYWdlci5zZXRMYXN0SXRlbUFjdGl2ZSgpLHZvaWQgdC5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuX2ZvY3VzTGFzdENoaXBPbkJhY2tzcGFjZT0hMX10aGlzLl9lbWl0Q2hpcEVuZCh0KX1fa2V5dXAodCl7IXRoaXMuX2ZvY3VzTGFzdENoaXBPbkJhY2tzcGFjZSYmOD09PXQua2V5Q29kZSYmdGhpcy5lbXB0eSYmKHRoaXMuX2ZvY3VzTGFzdENoaXBPbkJhY2tzcGFjZT0hMCx0LnByZXZlbnREZWZhdWx0KCkpfV9ibHVyKCl7dGhpcy5hZGRPbkJsdXImJnRoaXMuX2VtaXRDaGlwRW5kKCksdGhpcy5mb2N1c2VkPSExLHRoaXMuX2NoaXBMaXN0LmZvY3VzZWR8fHRoaXMuX2NoaXBMaXN0Ll9ibHVyKCksdGhpcy5fY2hpcExpc3Quc3RhdGVDaGFuZ2VzLm5leHQoKX1fZm9jdXMoKXt0aGlzLmZvY3VzZWQ9ITAsdGhpcy5fZm9jdXNMYXN0Q2hpcE9uQmFja3NwYWNlPXRoaXMuZW1wdHksdGhpcy5fY2hpcExpc3Quc3RhdGVDaGFuZ2VzLm5leHQoKX1fZW1pdENoaXBFbmQodCl7IXRoaXMuaW5wdXRFbGVtZW50LnZhbHVlJiZ0JiZ0aGlzLl9jaGlwTGlzdC5fa2V5ZG93bih0KSx0JiYhdGhpcy5faXNTZXBhcmF0b3JLZXkodCl8fCh0aGlzLmNoaXBFbmQuZW1pdCh7aW5wdXQ6dGhpcy5pbnB1dEVsZW1lbnQsdmFsdWU6dGhpcy5pbnB1dEVsZW1lbnQudmFsdWUsY2hpcElucHV0OnRoaXN9KSxudWxsPT10fHx0LnByZXZlbnREZWZhdWx0KCkpfV9vbklucHV0KCl7dGhpcy5fY2hpcExpc3Quc3RhdGVDaGFuZ2VzLm5leHQoKX1mb2N1cyh0KXt0aGlzLmlucHV0RWxlbWVudC5mb2N1cyh0KX1jbGVhcigpe3RoaXMuaW5wdXRFbGVtZW50LnZhbHVlPSIiLHRoaXMuX2ZvY3VzTGFzdENoaXBPbkJhY2tzcGFjZT0hMH1faXNTZXBhcmF0b3JLZXkodCl7cmV0dXJuIWJ6KHQpJiZuZXcgU2V0KHRoaXMuc2VwYXJhdG9yS2V5Q29kZXMpLmhhcyh0LmtleUNvZGUpfX1reXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGt5dCkoU20oaGcpLFNtKE15dCkpfSxreXQuybVkaXI9bG8oe3R5cGU6a3l0LHNlbGVjdG9yczpbWyJpbnB1dCIsIm1hdENoaXBJbnB1dEZvciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1jaGlwLWlucHV0IiwibWF0LWlucHV0LWVsZW1lbnQiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZWbSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX2tleWRvd24oZSl9KSkoImtleXVwIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5fa2V5dXAoZSl9KSkoImJsdXIiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2JsdXIoKX0pKSgiZm9jdXMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uX2ZvY3VzKCl9KSkoImlucHV0IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vbklucHV0KCl9KSksMiZlJiYoVHUoImlkIixuLmlkKSxqcCgiZGlzYWJsZWQiLG4uZGlzYWJsZWR8fG51bGwpKCJwbGFjZWhvbGRlciIsbi5wbGFjZWhvbGRlcnx8bnVsbCkoImFyaWEtaW52YWxpZCIsbi5fY2hpcExpc3QmJm4uX2NoaXBMaXN0Lm5nQ29udHJvbD9uLl9jaGlwTGlzdC5uZ0NvbnRyb2wuaW52YWxpZDpudWxsKSgiYXJpYS1yZXF1aXJlZCIsbi5fY2hpcExpc3QmJm4uX2NoaXBMaXN0LnJlcXVpcmVkfHxudWxsKSl9LGlucHV0czp7c2VwYXJhdG9yS2V5Q29kZXM6WyJtYXRDaGlwSW5wdXRTZXBhcmF0b3JLZXlDb2RlcyIsInNlcGFyYXRvcktleUNvZGVzIl0scGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixpZDoiaWQiLGNoaXBMaXN0OlsibWF0Q2hpcElucHV0Rm9yIiwiY2hpcExpc3QiXSxhZGRPbkJsdXI6WyJtYXRDaGlwSW5wdXRBZGRPbkJsdXIiLCJhZGRPbkJsdXIiXSxkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntjaGlwRW5kOiJtYXRDaGlwSW5wdXRUb2tlbkVuZCJ9LGV4cG9ydEFzOlsibWF0Q2hpcElucHV0IiwibWF0Q2hpcElucHV0Rm9yIl0sZmVhdHVyZXM6W0JvXX0pLGt5dC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbTXl0XX1dfV0sa3l0LnByb3BEZWNvcmF0b3JzPXtjaGlwTGlzdDpbe3R5cGU6eHksYXJnczpbIm1hdENoaXBJbnB1dEZvciJdfV0sYWRkT25CbHVyOlt7dHlwZTp4eSxhcmdzOlsibWF0Q2hpcElucHV0QWRkT25CbHVyIl19XSxzZXBhcmF0b3JLZXlDb2Rlczpbe3R5cGU6eHksYXJnczpbIm1hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzIl19XSxjaGlwRW5kOlt7dHlwZTpPeSxhcmdzOlsibWF0Q2hpcElucHV0VG9rZW5FbmQiXX1dLHBsYWNlaG9sZGVyOlt7dHlwZTp4eX1dLGlkOlt7dHlwZTp4eX1dLGRpc2FibGVkOlt7dHlwZTp4eX1dfSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGt5dCxbe3R5cGU6Q3ksYXJnczpbe3NlbGVjdG9yOiJpbnB1dFttYXRDaGlwSW5wdXRGb3JdIixleHBvcnRBczoibWF0Q2hpcElucHV0LCBtYXRDaGlwSW5wdXRGb3IiLGhvc3Q6e2NsYXNzOiJtYXQtY2hpcC1pbnB1dCBtYXQtaW5wdXQtZWxlbWVudCIsIihrZXlkb3duKSI6Il9rZXlkb3duKCRldmVudCkiLCIoa2V5dXApIjoiX2tleXVwKCRldmVudCkiLCIoYmx1cikiOiJfYmx1cigpIiwiKGZvY3VzKSI6Il9mb2N1cygpIiwiKGlucHV0KSI6Il9vbklucHV0KCkiLCJbaWRdIjoiaWQiLCJbYXR0ci5kaXNhYmxlZF0iOiJkaXNhYmxlZCB8fCBudWxsIiwiW2F0dHIucGxhY2Vob2xkZXJdIjoicGxhY2Vob2xkZXIgfHwgbnVsbCIsIlthdHRyLmFyaWEtaW52YWxpZF0iOiJfY2hpcExpc3QgJiYgX2NoaXBMaXN0Lm5nQ29udHJvbCA/IF9jaGlwTGlzdC5uZ0NvbnRyb2wuaW52YWxpZCA6IG51bGwiLCJbYXR0ci5hcmlhLXJlcXVpcmVkXSI6Il9jaGlwTGlzdCAmJiBfY2hpcExpc3QucmVxdWlyZWQgfHwgbnVsbCJ9fV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6aGd9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTprcixhcmdzOltNeXRdfV19XX0pLHtzZXBhcmF0b3JLZXlDb2Rlczpbe3R5cGU6eHksYXJnczpbIm1hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzIl19XSxjaGlwRW5kOlt7dHlwZTpPeSxhcmdzOlsibWF0Q2hpcElucHV0VG9rZW5FbmQiXX1dLHBsYWNlaG9sZGVyOlt7dHlwZTp4eX1dLGlkOlt7dHlwZTp4eX1dLGNoaXBMaXN0Olt7dHlwZTp4eSxhcmdzOlsibWF0Q2hpcElucHV0Rm9yIl19XSxhZGRPbkJsdXI6W3t0eXBlOnh5LGFyZ3M6WyJtYXRDaGlwSW5wdXRBZGRPbkJsdXIiXX1dLGRpc2FibGVkOlt7dHlwZTp4eX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBTeXQ9W1B5dCxfeXQsa3l0LEN5dCxieXQseXl0XSxEeXQ9e3NlcGFyYXRvcktleUNvZGVzOlttel19O2NsYXNzIEV5dHt9RXl0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxFeXQpfSxFeXQuybVtb2Q9YW8oe3R5cGU6RXl0fSksRXl0Lsm1aW5qPXZuKHtwcm92aWRlcnM6W2JILHtwcm92aWRlOk15dCx1c2VWYWx1ZTpEeXR9XSxpbXBvcnRzOltbWEldXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoRXl0LFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbWEldLGV4cG9ydHM6U3l0LGRlY2xhcmF0aW9uczpTeXQscHJvdmlkZXJzOltiSCx7cHJvdmlkZTpNeXQsdXNlVmFsdWU6RHl0fV19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhFeXQse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltQeXQsX3l0LGt5dCxDeXQsYnl0LHl5dF19LGltcG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bWEldfSxleHBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW1B5dCxfeXQsa3l0LEN5dCxieXQseXl0XX19KTtjb25zdCBSeXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm57ImVtYmVkZGluZy1zZWxlY3RlZCI6dCwiZW1iZWRkaW5nLXVuc2VsZWN0ZWQiOmV9fTtmdW5jdGlvbiBBeXQodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJtYXQtaWNvbiIsNSksVm0oImNsaWNrIiwoZnVuY3Rpb24gZSgpe2hpKHQpO2NvbnN0IG49WW0oKTtyZXR1cm4gbi5vblNlbGVjdC5lbWl0KG4ubWV0cmljKX0pKSxBbSgpfWlmKDImdCl7Y29uc3QgdD1ZbSgpO0RtKCJuZ0NsYXNzIix2aCgxLFJ5dCx0LmVtYmVkZGluZ3NNZXRyaWM9PT10Lm1ldHJpYyx0LmVtYmVkZGluZ3NNZXRyaWMhPT10Lm1ldHJpYykpfX1jb25zdCBUeXQ9ZnVuY3Rpb24odCl7cmV0dXJue3dpZHRoOnR9fSxOeXQ9ZnVuY3Rpb24odCl7cmV0dXJueyJ2YWx1ZS1pbnZhbGlkIjp0fX07Y2xhc3Mgenl0e2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlbW92ZT1uZXcgTGgsdGhpcy5vblNlbGVjdD1uZXcgTGgsdGhpcy5vbkZpbHRlckNoYW5nZT1uZXcgTGgsdGhpcy5mb2N1c01pbj0hMSx0aGlzLmZvY3VzTWF4PSExLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgSX1uZ09uSW5pdCgpe3RoaXMubWluRm9ybUNvbnRyb2w9bmV3ICRqKHRoaXMuZmlsdGVyVmFsdWVzLm1pbixbcVYucmVxdWlyZWQscVYubWluKC0xKSxxVi5tYXgoMSksdGhpcy5taW5WYWx1ZVZhbGlkYXRvci5iaW5kKHRoaXMpXSksdGhpcy5tYXhGb3JtQ29udHJvbD1uZXcgJGoodGhpcy5maWx0ZXJWYWx1ZXMubWF4LFtxVi5yZXF1aXJlZCxxVi5taW4oLTEpLHFWLm1heCgxKSx0aGlzLm1heFZhbHVlVmFsaWRhdG9yLmJpbmQodGhpcyldKSx0aGlzLm1pbkZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKEllKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLm1pbkZvcm1Db250cm9sLnZhbGlkJiZ0aGlzLm1heEZvcm1Db250cm9sLnZhbGlkJiZ0aGlzLm9uRmlsdGVyQ2hhbmdlLmVtaXQoe21pbjpwYXJzZUZsb2F0KHRoaXMubWluRm9ybUNvbnRyb2wudmFsdWUpLG1heDpwYXJzZUZsb2F0KHRoaXMubWF4Rm9ybUNvbnRyb2wudmFsdWUpfSl9KSksdGhpcy5tYXhGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShJZSh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5taW5Gb3JtQ29udHJvbC52YWxpZCYmdGhpcy5tYXhGb3JtQ29udHJvbC52YWxpZCYmdGhpcy5vbkZpbHRlckNoYW5nZS5lbWl0KHttaW46cGFyc2VGbG9hdCh0aGlzLm1pbkZvcm1Db250cm9sLnZhbHVlKSxtYXg6cGFyc2VGbG9hdCh0aGlzLm1heEZvcm1Db250cm9sLnZhbHVlKX0pfSkpfW5nT25DaGFuZ2VzKHQpe3RoaXMubWluRm9ybUNvbnRyb2wmJnRoaXMubWF4Rm9ybUNvbnRyb2wmJih0aGlzLm1pbkZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuZmlsdGVyVmFsdWVzLm1pbix7ZW1pdEV2ZW50OiExfSksdGhpcy5tYXhGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZpbHRlclZhbHVlcy5tYXgse2VtaXRFdmVudDohMX0pKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9bWluVmFsdWVWYWxpZGF0b3IodCl7cmV0dXJuIHRoaXMubWF4Rm9ybUNvbnRyb2wmJiJOYU4iIT09dC52YWx1ZT9pc05hTihwYXJzZUZsb2F0KHQudmFsdWUpKT97dmFsdWU6InRoZSBzdHJpbmcgeW91IGVudGVyZWQgaXMgbmVpdGhlciBOYU4gbm9yIGEgbnVtYmVyIn06cGFyc2VGbG9hdCh0LnZhbHVlKT5wYXJzZUZsb2F0KHRoaXMubWF4Rm9ybUNvbnRyb2wudmFsdWUpP3t2YWx1ZToidGhlIG51bWJlciB5b3UgZW50ZXJlZCBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4IHZhbHVlIn06bnVsbDpudWxsfW1heFZhbHVlVmFsaWRhdG9yKHQpe3JldHVybiB0aGlzLm1pbkZvcm1Db250cm9sPyJOYU4iPT09dGhpcy5taW5Gb3JtQ29udHJvbC52YWx1ZSYmIk5hTiI9PT10LnZhbHVlP251bGw6aXNOYU4ocGFyc2VGbG9hdCh0LnZhbHVlKSk/e3ZhbHVlOiJ0aGUgc3RyaW5nIHlvdSBlbnRlcmVkIGlzIG5laXRoZXIgTmFOIG5vciBhIG51bWJlciJ9OnQudmFsdWU8dGhpcy5taW5Gb3JtQ29udHJvbC52YWx1ZT97dmFsdWU6InRoZSBudW1iZXIgeW91IGVudGVyZWQgaXMgc21hbGxlciB0aGFuIHRoZSBtaW4gdmFsdWUifTpudWxsOm51bGx9Z2V0RXJyb3JEZXNjcmlwdGlvbih0KXtpZih0KXtjb25zdCBlPU9iamVjdC5rZXlzKHQpWzBdO3JldHVybiJyZXF1aXJlZCI9PT1lPyJ5b3UgZGlkIG5vdCBlbnRlciBhbnl0aGluZyI6Im1pbiI9PT1lPyJ0aGUgbnVtYmVyIG11c3QgYmUgYXQgbGVhc3QgLTEuMCI6Im1heCI9PT1lPyJ0aGUgbnVtYmVyIGlzIGJpZ2dlciB0aGFuIDEuMCI6dFtlXX1yZXR1cm4iIn19enl0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx6eXQpfSx6eXQuybVjbXA9dG8oe3R5cGU6enl0LHNlbGVjdG9yczpbWyJtZXRyaWMtYXJpdGhtZXRpYy1lbGVtZW50LWNvbXBvbmVudCJdXSxpbnB1dHM6e21ldHJpYzoibWV0cmljIixmaWx0ZXJWYWx1ZXM6ImZpbHRlclZhbHVlcyIsaGFzRW1iZWRkaW5nc0RhdGE6Imhhc0VtYmVkZGluZ3NEYXRhIixlbWJlZGRpbmdzTWV0cmljOiJlbWJlZGRpbmdzTWV0cmljIn0sb3V0cHV0czp7b25SZW1vdmU6Im9uUmVtb3ZlIixvblNlbGVjdDoib25TZWxlY3QiLG9uRmlsdGVyQ2hhbmdlOiJvbkZpbHRlckNoYW5nZSJ9LGZlYXR1cmVzOltCb10sZGVjbHM6MTAsdmFyczoyMixjb25zdHM6W1sxLCJmaWx0ZXItY2hpcCIsMywicmVtb3ZlZCJdLFsiY2xhc3MiLCJlbWJlZGRpbmdzLWJ1dHRvbiIsInN2Z0ljb24iLCJncm91cF93b3JrXzI0cHgiLDMsIm5nQ2xhc3MiLCJjbGljayIsNCwibmdJZiJdLFsxLCJtZXRyaWMtYXJpdGhtZXRpYy1lbGVtZW50LXJhbmdlIiwzLCJrZXlkb3duIl0sWyJtYXRJbnB1dCIsIiIsMSwiaW5wdXQtZmllbGQiLDMsInZhbHVlIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm5nU3R5bGUiLCJuZ0NsYXNzIiwiZm9ybUNvbnRyb2wiLCJmb2N1cyIsImZvY3Vzb3V0Il0sWyJtYXRDaGlwUmVtb3ZlIiwiIiwic3ZnSWNvbiIsImNhbmNlbF8yNHB4Il0sWyJzdmdJY29uIiwiZ3JvdXBfd29ya18yNHB4IiwxLCJlbWJlZGRpbmdzLWJ1dHRvbiIsMywibmdDbGFzcyIsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJtYXQtY2hpcCIsMCksVm0oInJlbW92ZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZW1vdmUuZW1pdChuLm1ldHJpYyl9KSksUXAoMSxBeXQsMSw0LCJtYXQtaWNvbiIsMSksa3UoMiksUm0oMywiZGl2IiwyKSxWbSgia2V5ZG93biIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCl9KSksa3UoNCwiIFsgIiksUm0oNSwiaW5wdXQiLDMpLFZtKCJmb2N1cyIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5mb2N1c01pbj0hMH0pKSgiZm9jdXNvdXQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uZm9jdXNNaW49ITF9KSksQW0oKSxrdSg2LCIgOyAiKSxSbSg3LCJpbnB1dCIsMyksVm0oImZvY3VzIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLmZvY3VzTWF4PSEwfSkpKCJmb2N1c291dCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5mb2N1c01heD0hMX0pKSxBbSgpLGt1KDgsIiBdICIpLEFtKCksVG0oOSwibWF0LWljb24iLDQpLEFtKCkpLDImZSYmKHJjKDEpLERtKCJuZ0lmIixuLmhhc0VtYmVkZGluZ3NEYXRhKSxyYygxKSxEdSgiICIsbi5tZXRyaWMsIiAiKSxyYygzKSxEbSgidmFsdWUiLG4uZmlsdGVyVmFsdWVzLm1pbikoIm1hdFRvb2x0aXAiLG4uZ2V0RXJyb3JEZXNjcmlwdGlvbihuLm1pbkZvcm1Db250cm9sLmVycm9ycykpKCJtYXRUb29sdGlwRGlzYWJsZWQiLCFuLm1pbkZvcm1Db250cm9sLmludmFsaWQpKCJuZ1N0eWxlIixNaCgxNCxUeXQsbi5mb2N1c01pbj8iMTAwcHgiOm4ubWluRm9ybUNvbnRyb2wudmFsdWUudG9TdHJpbmcoKS5sZW5ndGgrImNoIikpKCJuZ0NsYXNzIixNaCgxNixOeXQsIW4ubWluRm9ybUNvbnRyb2wudmFsaWQpKSgiZm9ybUNvbnRyb2wiLG4ubWluRm9ybUNvbnRyb2wpLHJjKDIpLERtKCJ2YWx1ZSIsbi5maWx0ZXJWYWx1ZXMubWF4KSgibWF0VG9vbHRpcCIsbi5nZXRFcnJvckRlc2NyaXB0aW9uKG4ubWF4Rm9ybUNvbnRyb2wuZXJyb3JzKSkoIm1hdFRvb2x0aXBEaXNhYmxlZCIsIW4ubWF4Rm9ybUNvbnRyb2wuaW52YWxpZCkoIm5nU3R5bGUiLE1oKDE4LFR5dCxuLmZvY3VzTWF4PyIxMDBweCI6bi5tYXhGb3JtQ29udHJvbC52YWx1ZS50b1N0cmluZygpLmxlbmd0aCsiY2giKSkoIm5nQ2xhc3MiLE1oKDIwLE55dCwhbi5tYXhGb3JtQ29udHJvbC52YWxpZCkpKCJmb3JtQ29udHJvbCIsbi5tYXhGb3JtQ29udHJvbCkpfSxkaXJlY3RpdmVzOltfeXQsZE0sVlYsRlEsQ00sYU0seGoseFUsRFcsQ3l0XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uZmlsdGVyLWNoaXBbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7bWFyZ2luLWxlZnQ6NXB4fS5tZXRyaWMtYXJpdGhtZXRpYy1lbGVtZW50LXJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2ZvbnQtc2l6ZTouOGVtO2hlaWdodDozMHB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MzBweDtwYWRkaW5nOjAgNXB4O21hcmdpbi1sZWZ0OjVweH0uaW5wdXQtZmllbGRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxLjFlbTt0cmFuc2l0aW9uOndpZHRoIDFzfS5pbnB1dC1maWVsZFtfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMik7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lfS52YWx1ZS1pbnZhbGlkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZjQ0MzM2fS5lbWJlZGRpbmctc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmNTdjMDA7b3BhY2l0eToxfS5lbWJlZGRpbmctdW5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNH0uZW1iZWRkaW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7bWFyZ2luLXJpZ2h0OjhweDtjdXJzb3I6cG9pbnRlcn0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoenl0LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im1ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9tZXRyaWNfYXJpdGhtZXRpY19lbGVtZW50X2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL21ldHJpY19hcml0aG1ldGljX2VsZW1lbnRfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwse21ldHJpYzpbe3R5cGU6eHl9XSxmaWx0ZXJWYWx1ZXM6W3t0eXBlOnh5fV0saGFzRW1iZWRkaW5nc0RhdGE6W3t0eXBlOnh5fV0sZW1iZWRkaW5nc01ldHJpYzpbe3R5cGU6eHl9XSxvblJlbW92ZTpbe3R5cGU6T3l9XSxvblNlbGVjdDpbe3R5cGU6T3l9XSxvbkZpbHRlckNoYW5nZTpbe3R5cGU6T3l9XX0pO2NsYXNzIEl5dHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5maWx0ZXJWYWx1ZXMkPXRoaXMuc3RvcmUucGlwZShGdyhnYnQpKS5waXBlKEl0KCh0PT57Y29uc3QgZT10W3RoaXMubWV0cmljXTtyZXR1cm4gZT97bWluOmUuaW5jbHVkZU5hTj8iTmFOIjp0aGlzLnJvdW5kVG9UaHJlZURlY2ltYWxQb2ludHMoZS5taW4pLG1heDplLm1heDxlLm1pbj8iTmFOIjp0aGlzLnJvdW5kVG9UaHJlZURlY2ltYWxQb2ludHMoZS5tYXgpfTp7bWluOi0xLG1heDoxfX0pKSksdGhpcy5oYXNFbWJlZGRpbmdzRGF0YSQ9dGhpcy5zdG9yZS5waXBlKEZ3KGxidCkpLnBpcGUoSXQoKHQ9PnZvaWQgMCE9PXQpKSksdGhpcy5lbWJlZGRpbmdzTWV0cmljJD10aGlzLnN0b3JlLnBpcGUoRncoT2J0KSl9cmVtb3ZlKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goTGJ0KHttZXRyaWM6dH0pKX1zZWxlY3QodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChaYnQoe21ldHJpYzp0fSkpfWZpbHRlckNoYW5nZSh0KXtjb25zdCBlPWlzTmFOKHQubWluKT8tMTp0Lm1pbixuPWlzTmFOKHQubWF4KT8tMjp0Lm1heCxvPWlzTmFOKHQubWluKTt0aGlzLnN0b3JlLmRpc3BhdGNoKEJidCh7bWV0cmljOnRoaXMubWV0cmljLG1heDpuLG1pbjplLGluY2x1ZGVOYU46b30pKX1yb3VuZFRvVGhyZWVEZWNpbWFsUG9pbnRzKHQpe3JldHVybiBNYXRoLnJvdW5kKDFlMyoodCtOdW1iZXIuRVBTSUxPTikpLzFlM319SXl0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxJeXQpKFNtKEl3KSl9LEl5dC7JtWNtcD10byh7dHlwZTpJeXQsc2VsZWN0b3JzOltbIm5wbWktbWV0cmljLWFyaXRobWV0aWMtZWxlbWVudCJdXSxpbnB1dHM6e21ldHJpYzoibWV0cmljIn0sZGVjbHM6NCx2YXJzOjEwLGNvbnN0czpbWzMsIm1ldHJpYyIsImZpbHRlclZhbHVlcyIsImhhc0VtYmVkZGluZ3NEYXRhIiwiZW1iZWRkaW5nc01ldHJpYyIsIm9uUmVtb3ZlIiwib25TZWxlY3QiLCJvbkZpbHRlckNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwibWV0cmljLWFyaXRobWV0aWMtZWxlbWVudC1jb21wb25lbnQiLDApLFZtKCJvblJlbW92ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ucmVtb3ZlKGUpfSkpKCJvblNlbGVjdCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uc2VsZWN0KGUpfSkpKCJvbkZpbHRlckNoYW5nZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uZmlsdGVyQ2hhbmdlKGUpfSkpLEFoKDEsImFzeW5jIiksQWgoMiwiYXN5bmMiKSxBaCgzLCJhc3luYyIpLEFtKCkpLDImZSYmRG0oIm1ldHJpYyIsbi5tZXRyaWMpKCJmaWx0ZXJWYWx1ZXMiLFRoKDEsNCxuLmZpbHRlclZhbHVlcyQpKSgiaGFzRW1iZWRkaW5nc0RhdGEiLFRoKDIsNixuLmhhc0VtYmVkZGluZ3NEYXRhJCkpKCJlbWJlZGRpbmdzTWV0cmljIixUaCgzLDgsbi5lbWJlZGRpbmdzTWV0cmljJCkpfSxkaXJlY3RpdmVzOlt6eXRdLHBpcGVzOlt3TV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChJeXQsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1tZXRyaWMtYXJpdGhtZXRpYy1lbGVtZW50Iix0ZW1wbGF0ZTonXG4gICAgPG1ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQtY29tcG9uZW50XG4gICAgICBbbWV0cmljXT0ibWV0cmljIlxuICAgICAgW2ZpbHRlclZhbHVlc109ImZpbHRlclZhbHVlcyQgfCBhc3luYyJcbiAgICAgIFtoYXNFbWJlZGRpbmdzRGF0YV09Imhhc0VtYmVkZGluZ3NEYXRhJCB8IGFzeW5jIlxuICAgICAgW2VtYmVkZGluZ3NNZXRyaWNdPSJlbWJlZGRpbmdzTWV0cmljJCB8IGFzeW5jIlxuICAgICAgKG9uUmVtb3ZlKT0icmVtb3ZlKCRldmVudCkiXG4gICAgICAob25TZWxlY3QpPSJzZWxlY3QoJGV2ZW50KSJcbiAgICAgIChvbkZpbHRlckNoYW5nZSk9ImZpbHRlckNoYW5nZSgkZXZlbnQpIlxuICAgID48L21ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQtY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd31dfSkse21ldHJpYzpbe3R5cGU6eHl9XX0pO2NsYXNzIEh5dHtjb25zdHJ1Y3Rvcigpe3RoaXMuT3BlcmF0b3I9JGh0fX1mdW5jdGlvbiBGeXQodCxlKXsxJnQmJlRtKDAsIm5wbWktbWV0cmljLWFyaXRobWV0aWMtZWxlbWVudCIsNCksMiZ0JiZEbSgibWV0cmljIixZbSgpLiRpbXBsaWNpdC5tZXRyaWMpfWZ1bmN0aW9uIEx5dCh0LGUpezEmdCYmVG0oMCwibnBtaS1tZXRyaWMtYXJpdGhtZXRpYy1vcGVyYXRvciIsNSksMiZ0JiZEbSgib3BlcmF0b3IiLFltKCkuJGltcGxpY2l0Lm9wZXJhdG9yKX1mdW5jdGlvbiBCeXQodCxlKXtpZigxJnQmJihSbSgwLCJkaXYiKSxRcCgxLEZ5dCwxLDEsIm5wbWktbWV0cmljLWFyaXRobWV0aWMtZWxlbWVudCIsMiksUXAoMixMeXQsMSwxLCJucG1pLW1ldHJpYy1hcml0aG1ldGljLW9wZXJhdG9yIiwzKSxBbSgpKSwyJnQpe2NvbnN0IHQ9ZS4kaW1wbGljaXQsbj1ZbSgpO3JjKDEpLERtKCJuZ0lmIix0LmtpbmQ9PT1uLkFyaXRobWV0aWNLaW5kLk1FVFJJQykscmMoMSksRG0oIm5nSWYiLHQua2luZD09PW4uQXJpdGhtZXRpY0tpbmQuT1BFUkFUT1IpfX1IeXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEh5dCl9LEh5dC7JtWNtcD10byh7dHlwZTpIeXQsc2VsZWN0b3JzOltbIm5wbWktbWV0cmljLWFyaXRobWV0aWMtb3BlcmF0b3IiXV0saW5wdXRzOntvcGVyYXRvcjoib3BlcmF0b3IifSxkZWNsczoyLHZhcnM6MSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwibWF0LWNoaXAiKSxrdSgxKSxBbSgpKSwyJmUmJihyYygxKSxEdSgiICIsbi5vcGVyYXRvcj09PW4uT3BlcmF0b3IuQU5EPyImIjoiIiwiICIpKX0sZGlyZWN0aXZlczpbX3l0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEh5dCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJucG1pLW1ldHJpYy1hcml0aG1ldGljLW9wZXJhdG9yIix0ZW1wbGF0ZToiXG4gICAgPG1hdC1jaGlwPlxuICAgICAge3sgb3BlcmF0b3IgPT09IE9wZXJhdG9yLkFORCA/ICcmJyA6ICcnIH19XG4gICAgPC9tYXQtY2hpcD5cbiAgIixjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSxudWxsLHtvcGVyYXRvcjpbe3R5cGU6eHl9XX0pO2NsYXNzIFZ5dHtjb25zdHJ1Y3Rvcigpe3RoaXMuQXJpdGhtZXRpY0tpbmQ9dGJ0fX1WeXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFZ5dCl9LFZ5dC7JtWNtcD10byh7dHlwZTpWeXQsc2VsZWN0b3JzOltbIm1ldHJpYy1hcml0aG1ldGljLWNvbXBvbmVudCJdXSxpbnB1dHM6e21ldHJpY0FyaXRobWV0aWM6Im1ldHJpY0FyaXRobWV0aWMifSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1szLCJzZWxlY3RhYmxlIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJtZXRyaWMiLDQsIm5nSWYiXSxbMywib3BlcmF0b3IiLDQsIm5nSWYiXSxbMywibWV0cmljIl0sWzMsIm9wZXJhdG9yIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJtYXQtY2hpcC1saXN0IiwwKSxRcCgxLEJ5dCwzLDIsImRpdiIsMSksQW0oKSksMiZlJiYoRG0oInNlbGVjdGFibGUiLCExKSxyYygxKSxEbSgibmdGb3JPZiIsbi5tZXRyaWNBcml0aG1ldGljKSl9LGRpcmVjdGl2ZXM6W1B5dCxsTSxkTSxJeXQsSHl0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwfSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChWeXQsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWV0cmljLWFyaXRobWV0aWMtY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9tZXRyaWNfYXJpdGhtZXRpY19jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9tZXRyaWNfYXJpdGhtZXRpY19jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sbnVsbCx7bWV0cmljQXJpdGhtZXRpYzpbe3R5cGU6eHl9XX0pO2NsYXNzIGp5dHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5tZXRyaWNBcml0aG1ldGljJD10aGlzLnN0b3JlLnBpcGUoRncoZmJ0KSl9fWp5dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8anl0KShTbShJdykpfSxqeXQuybVjbXA9dG8oe3R5cGU6anl0LHNlbGVjdG9yczpbWyJucG1pLW1ldHJpYy1hcml0aG1ldGljIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsIm1ldHJpY0FyaXRobWV0aWMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFRtKDAsIm1ldHJpYy1hcml0aG1ldGljLWNvbXBvbmVudCIsMCksQWgoMSwiYXN5bmMiKSksMiZlJiZEbSgibWV0cmljQXJpdGhtZXRpYyIsVGgoMSwxLG4ubWV0cmljQXJpdGhtZXRpYyQpKX0sZGlyZWN0aXZlczpbVnl0XSxwaXBlczpbd01dLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoanl0LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im5wbWktbWV0cmljLWFyaXRobWV0aWMiLHRlbXBsYXRlOidcbiAgICA8bWV0cmljLWFyaXRobWV0aWMtY29tcG9uZW50XG4gICAgICBbbWV0cmljQXJpdGhtZXRpY109Im1ldHJpY0FyaXRobWV0aWMkIHwgYXN5bmMiXG4gICAgPjwvbWV0cmljLWFyaXRobWV0aWMtY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd31dfSksbnVsbCk7Y2xhc3MgVXl0e31mdW5jdGlvbiBHeXQodCxlLG4pe2lmKG4pcmV0dXJuIHQ7Y29uc3Qgbz1PYmplY3QuYXNzaWduKHt9LHQpO3JldHVybiBlLmZvckVhY2goKHQ9PmRlbGV0ZSBvW3RdKSksb31VeXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFV5dCl9LFV5dC7JtWNtcD10byh7dHlwZTpVeXQsc2VsZWN0b3JzOltbIm5wbWktZGF0YS1zZWxlY3Rpb24iXV0sZGVjbHM6NCx2YXJzOjAsY29uc3RzOltbMSwiZGF0YS1zZWxlY3Rpb24iXSxbMSwibWV0cmljcy1zZWxlY3RvciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiZGl2IiwwKSxUbSgxLCJucG1pLW1ldHJpYy1zZWFyY2giLDEpLFRtKDIsIm5wbWktcmVzdWx0cy1kb3dubG9hZCIpLEFtKCksVG0oMywibnBtaS1tZXRyaWMtYXJpdGhtZXRpYyIpKX0sZGlyZWN0aXZlczpbbHl0LG15dCxqeXRdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO3BhZGRpbmc6MTBweCAyMHB4fS5kYXRhLXNlbGVjdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWV0cmljcy1zZWxlY3Rvcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDF9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFV5dCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJucG1pLWRhdGEtc2VsZWN0aW9uIix0ZW1wbGF0ZVVybDoiLi9kYXRhX3NlbGVjdGlvbl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9kYXRhX3NlbGVjdGlvbl9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sbnVsbCxudWxsKTtjb25zdCBXeXQ9WyJjaGFydCJdO2NsYXNzIFl5dHtjb25zdHJ1Y3Rvcigpe3RoaXMub25SZW1vdmU9bmV3IExoLHRoaXMub25VcGRhdGVGaWx0ZXI9bmV3IExoLHRoaXMuaGVpZ2h0PTMwMCx0aGlzLmNoYXJ0V2lkdGg9MCx0aGlzLmNoYXJ0SGVpZ2h0PTAsdGhpcy5kcmF3SGVpZ2h0PTAsdGhpcy5kcmF3V2lkdGg9MCx0aGlzLm1hcmdpbj17dG9wOjIwLHJpZ2h0OjEwLGJvdHRvbToyMCxsZWZ0OjEwfSx0aGlzLmRyYXdNYXJnaW49e3RvcDowLHJpZ2h0OjAsYm90dG9tOjIwLGxlZnQ6MjB9LHRoaXMuYnJ1c2g9KGZ1bmN0aW9uIHQoKXtyZXR1cm4oZnVuY3Rpb24gdChlKXt2YXIgbixvPW90dCxpPW50dCxhPWl0dCxyPSEwLHM9SDUoInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxsPTY7ZnVuY3Rpb24gYyh0KXt2YXIgbj10LnByb3BlcnR5KCJfX2JydXNoIixoKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbZXR0KCJvdmVybGF5IildKTtuLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJvdmVybGF5IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKCJjdXJzb3IiLEs5Lm92ZXJsYXkpLm1lcmdlKG4pLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9YXR0KHRoaXMpLmV4dGVudDtKNCh0aGlzKS5hdHRyKCJ4Iix0WzBdWzBdKS5hdHRyKCJ5Iix0WzBdWzFdKS5hdHRyKCJ3aWR0aCIsdFsxXVswXS10WzBdWzBdKS5hdHRyKCJoZWlnaHQiLHRbMV1bMV0tdFswXVsxXSl9KSksdC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5kYXRhKFtldHQoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsSzkuc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIG89dC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKGUuaGFuZGxlcywoZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0pKTtvLmV4aXQoKS5yZW1vdmUoKSxvLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIit0LnR5cGV9KSkuYXR0cigiY3Vyc29yIiwoZnVuY3Rpb24odCl7cmV0dXJuIEs5W3QudHlwZV19KSksdC5lYWNoKGQpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5vbigibW91c2Vkb3duLmJydXNoIix1KS5maWx0ZXIoYSkub24oInRvdWNoc3RhcnQuYnJ1c2giLHUpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGYpLm9uKCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsZykuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGQoKXt2YXIgdD1KNCh0aGlzKSxlPWF0dCh0aGlzKS5zZWxlY3Rpb247ZT8odC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZVswXVswXSkuYXR0cigieSIsZVswXVsxXSkuYXR0cigid2lkdGgiLGVbMV1bMF0tZVswXVswXSkuYXR0cigiaGVpZ2h0IixlWzFdWzFdLWVbMF1bMV0pLHQuc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9lWzFdWzBdLWwvMjplWzBdWzBdLWwvMn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuInMiPT09dC50eXBlWzBdP2VbMV1bMV0tbC8yOmVbMF1bMV0tbC8yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIm4iPT09dC50eXBlfHwicyI9PT10LnR5cGU/ZVsxXVswXS1lWzBdWzBdK2w6bH0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGV8fCJ3Ij09PXQudHlwZT9lWzFdWzFdLWVbMF1bMV0rbDpsfSkpKTp0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiwuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCl9ZnVuY3Rpb24gcCh0LGUsbil7dmFyIG89dC5fX2JydXNoLmVtaXR0ZXI7cmV0dXJuIW98fG4mJm8uY2xlYW4/bmV3IG0odCxlLG4pOm99ZnVuY3Rpb24gbSh0LGUsbil7dGhpcy50aGF0PXQsdGhpcy5hcmdzPWUsdGhpcy5zdGF0ZT10Ll9fYnJ1c2gsdGhpcy5hY3RpdmU9MCx0aGlzLmNsZWFuPW59ZnVuY3Rpb24gdSgpe2lmKCghbnx8TDQudG91Y2hlcykmJmkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdCxvLGEscyxsLGMsbSx1LGYsZyxoLGI9dGhpcyx5PUw0LnRhcmdldC5fX2RhdGFfXy50eXBlLF89InNlbGVjdGlvbiI9PT0ociYmTDQubWV0YUtleT95PSJvdmVybGF5Ijp5KT9WOTpyJiZMNC5hbHRLZXk/Rzk6VTksQz1lPT09WDk/bnVsbDokOVt5XSxNPWU9PT1aOT9udWxsOnR0dFt5XSx2PWF0dChiKSx4PXYuZXh0ZW50LE89di5zZWxlY3Rpb24sUD14WzBdWzBdLHc9eFswXVsxXSxrPXhbMV1bMF0sUz14WzFdWzFdLEQ9MCxFPTAsUj1DJiZNJiZyJiZMNC5zaGlmdEtleSxBPUw0LnRvdWNoZXM/cTkoTDQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcik6dDYsVD1BKGIpLE49VCx6PXAoYixhcmd1bWVudHMsITApLmJlZm9yZXN0YXJ0KCk7Im92ZXJsYXkiPT09eT8oTyYmKGY9ITApLHYuc2VsZWN0aW9uPU89W1t0PWU9PT1YOT9QOlRbMF0sYT1lPT09Wjk/dzpUWzFdXSxbbD1lPT09WDk/azp0LG09ZT09PVo5P1M6YV1dKToodD1PWzBdWzBdLGE9T1swXVsxXSxsPU9bMV1bMF0sbT1PWzFdWzFdKSxvPXQscz1hLGM9bCx1PW07dmFyIEk9SjQoYikuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksSD1JLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLEs5W3ldKTtpZihMNC50b3VjaGVzKXoubW92ZWQ9TCx6LmVuZGVkPVY7ZWxzZXt2YXIgRj1KNChMNC52aWV3KS5vbigibW91c2Vtb3ZlLmJydXNoIixMLCEwKS5vbigibW91c2V1cC5icnVzaCIsViwhMCk7ciYmRi5vbigia2V5ZG93bi5icnVzaCIsaiwhMCkub24oImtleXVwLmJydXNoIixVLCEwKSxuNihMNC52aWV3KX1IOSgpLEk4KGIpLGQuY2FsbChiKSx6LnN0YXJ0KCl9ZnVuY3Rpb24gTCgpe3ZhciB0PUEoYik7IVJ8fGd8fGh8fChNYXRoLmFicyh0WzBdLU5bMF0pPk1hdGguYWJzKHRbMV0tTlsxXSk/aD0hMDpnPSEwKSxOPXQsZj0hMCxGOSgpLEIoKX1mdW5jdGlvbiBCKCl7dmFyIGU7c3dpdGNoKEQ9TlswXS1UWzBdLEU9TlsxXS1UWzFdLF8pe2Nhc2Ugajk6Y2FzZSBWOTpDJiYoRD1NYXRoLm1heChQLXQsTWF0aC5taW4oay1sLEQpKSxvPXQrRCxjPWwrRCksTSYmKEU9TWF0aC5tYXgody1hLE1hdGgubWluKFMtbSxFKSkscz1hK0UsdT1tK0UpO2JyZWFrO2Nhc2UgVTk6QzwwPyhEPU1hdGgubWF4KFAtdCxNYXRoLm1pbihrLXQsRCkpLG89dCtELGM9bCk6Qz4wJiYoRD1NYXRoLm1heChQLWwsTWF0aC5taW4oay1sLEQpKSxvPXQsYz1sK0QpLE08MD8oRT1NYXRoLm1heCh3LWEsTWF0aC5taW4oUy1hLEUpKSxzPWErRSx1PW0pOk0+MCYmKEU9TWF0aC5tYXgody1tLE1hdGgubWluKFMtbSxFKSkscz1hLHU9bStFKTticmVhaztjYXNlIEc5OkMmJihvPU1hdGgubWF4KFAsTWF0aC5taW4oayx0LUQqQykpLGM9TWF0aC5tYXgoUCxNYXRoLm1pbihrLGwrRCpDKSkpLE0mJihzPU1hdGgubWF4KHcsTWF0aC5taW4oUyxhLUUqTSkpLHU9TWF0aC5tYXgodyxNYXRoLm1pbihTLG0rRSpNKSkpfWM8byYmKEMqPS0xLGU9dCx0PWwsbD1lLGU9byxvPWMsYz1lLHkgaW4gSjkmJkguYXR0cigiY3Vyc29yIixLOVt5PUo5W3ldXSkpLHU8cyYmKE0qPS0xLGU9YSxhPW0sbT1lLGU9cyxzPXUsdT1lLHkgaW4gUTkmJkguYXR0cigiY3Vyc29yIixLOVt5PVE5W3ldXSkpLHYuc2VsZWN0aW9uJiYoTz12LnNlbGVjdGlvbiksZyYmKG89T1swXVswXSxjPU9bMV1bMF0pLGgmJihzPU9bMF1bMV0sdT1PWzFdWzFdKSxPWzBdWzBdPT09byYmT1swXVsxXT09PXMmJk9bMV1bMF09PT1jJiZPWzFdWzFdPT09dXx8KHYuc2VsZWN0aW9uPVtbbyxzXSxbYyx1XV0sZC5jYWxsKGIpLHouYnJ1c2goKSl9ZnVuY3Rpb24gVigpe2lmKEg5KCksTDQudG91Y2hlcyl7aWYoTDQudG91Y2hlcy5sZW5ndGgpcmV0dXJuO24mJmNsZWFyVGltZW91dChuKSxuPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bj1udWxsfSksNTAwKX1lbHNlIG82KEw0LnZpZXcsZiksRi5vbigia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaCIsbnVsbCk7SS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLEguYXR0cigiY3Vyc29yIixLOS5vdmVybGF5KSx2LnNlbGVjdGlvbiYmKE89di5zZWxlY3Rpb24pLHJ0dChPKSYmKHYuc2VsZWN0aW9uPW51bGwsZC5jYWxsKGIpKSx6LmVuZCgpfWZ1bmN0aW9uIGooKXtzd2l0Y2goTDQua2V5Q29kZSl7Y2FzZSAxNjpSPUMmJk07YnJlYWs7Y2FzZSAxODpfPT09VTkmJihDJiYobD1jLUQqQyx0PW8rRCpDKSxNJiYobT11LUUqTSxhPXMrRSpNKSxfPUc5LEIoKSk7YnJlYWs7Y2FzZSAzMjpfIT09VTkmJl8hPT1HOXx8KEM8MD9sPWMtRDpDPjAmJih0PW8tRCksTTwwP209dS1FOk0+MCYmKGE9cy1FKSxfPWo5LEguYXR0cigiY3Vyc29yIixLOS5zZWxlY3Rpb24pLEIoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59RjkoKX1mdW5jdGlvbiBVKCl7c3dpdGNoKEw0LmtleUNvZGUpe2Nhc2UgMTY6UiYmKGc9aD1SPSExLEIoKSk7YnJlYWs7Y2FzZSAxODpfPT09RzkmJihDPDA/bD1jOkM+MCYmKHQ9byksTTwwP209dTpNPjAmJihhPXMpLF89VTksQigpKTticmVhaztjYXNlIDMyOl89PT1qOSYmKEw0LmFsdEtleT8oQyYmKGw9Yy1EKkMsdD1vK0QqQyksTSYmKG09dS1FKk0sYT1zK0UqTSksXz1HOSk6KEM8MD9sPWM6Qz4wJiYodD1vKSxNPDA/bT11Ok0+MCYmKGE9cyksXz1VOSksSC5hdHRyKCJjdXJzb3IiLEs5W3ldKSxCKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufUY5KCl9fWZ1bmN0aW9uIGYoKXtwKHRoaXMsYXJndW1lbnRzKS5tb3ZlZCgpfWZ1bmN0aW9uIGcoKXtwKHRoaXMsYXJndW1lbnRzKS5lbmRlZCgpfWZ1bmN0aW9uIGgoKXt2YXIgdD10aGlzLl9fYnJ1c2h8fHtzZWxlY3Rpb246bnVsbH07cmV0dXJuIHQuZXh0ZW50PVk5KG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKSx0LmRpbT1lLHR9cmV0dXJuIGMubW92ZT1mdW5jdGlvbih0LG4pe3Quc2VsZWN0aW9uP3Qub24oInN0YXJ0LmJydXNoIiwoZnVuY3Rpb24oKXtwKHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLChmdW5jdGlvbigpe3AodGhpcyxhcmd1bWVudHMpLmVuZCgpfSkpLnR3ZWVuKCJicnVzaCIsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxvPXQuX19icnVzaCxpPXAodCxhcmd1bWVudHMpLGE9by5zZWxlY3Rpb24scj1lLmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4sby5leHRlbnQpLHM9WjcoYSxyKTtmdW5jdGlvbiBsKGUpe28uc2VsZWN0aW9uPTE9PT1lJiZudWxsPT09cj9udWxsOnMoZSksZC5jYWxsKHQpLGkuYnJ1c2goKX1yZXR1cm4gbnVsbCE9PWEmJm51bGwhPT1yP2w6bCgxKX0pKTp0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxvPWFyZ3VtZW50cyxpPXQuX19icnVzaCxhPWUuaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0LG8pOm4saS5leHRlbnQpLHI9cCh0LG8pLmJlZm9yZXN0YXJ0KCk7STgodCksaS5zZWxlY3Rpb249bnVsbD09PWE/bnVsbDphLGQuY2FsbCh0KSxyLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pKX0sYy5jbGVhcj1mdW5jdGlvbih0KXtjLm1vdmUodCxudWxsKX0sbS5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nPyh0aGlzLnN0YXJ0aW5nPSExLHRoaXMuZW1pdCgic3RhcnQiKSk6dGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXshKGZ1bmN0aW9uIG4odCxlLG8saSl7dmFyIGE9TDQ7dC5zb3VyY2VFdmVudD1MNCxMND10O3RyeXtlLmFwcGx5KG8saSl9ZmluYWxseXtMND1hfX0pKG5ldyBJOShjLHQsZS5vdXRwdXQodGhpcy5zdGF0ZS5zZWxlY3Rpb24pKSxzLmFwcGx5LHMsW3QsdGhpcy50aGF0LHRoaXMuYXJnc10pfX0sYy5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp6OShZOSh0KSksYyk6b30sYy5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp6OSghIXQpLGMpOml9LGMudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ejkoISF0KSxjKTphfSxjLmhhbmRsZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K3QsYyk6bH0sYy5rZXlNb2RpZmllcnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ISF0LGMpOnJ9LGMub249ZnVuY3Rpb24oKXt2YXIgdD1zLm9uLmFwcGx5KHMsYXJndW1lbnRzKTtyZXR1cm4gdD09PXM/Yzp0fSxjfSkoWDkpfSkoKSx0aGlzLm1heEJpblNpemU9MCx0aGlzLmFyZWE9KGZ1bmN0aW9uIGUoKXt2YXIgdD14b3QsZT1udWxsLG49Q290KDApLG89T290LGk9Q290KCEwKSxhPW51bGwscj12b3Qscz1udWxsO2Z1bmN0aW9uIGwobCl7dmFyIGMsZCxwLG0sdSxmPWwubGVuZ3RoLGc9ITEsaD1uZXcgQXJyYXkoZiksYj1uZXcgQXJyYXkoZik7Zm9yKG51bGw9PWEmJihzPXIodT1tdHQoKSkpLGM9MDtjPD1mOysrYyl7aWYoIShjPGYmJmkobT1sW2NdLGMsbCkpPT09ZylpZihnPSFnKWQ9YyxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxwPWMtMTtwPj1kOy0tcClzLnBvaW50KGhbcF0sYltwXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9ZyYmKGhbY109K3QobSxjLGwpLGJbY109K24obSxjLGwpLHMucG9pbnQoZT8rZShtLGMsbCk6aFtjXSxvPytvKG0sYyxsKTpiW2NdKSl9aWYodSlyZXR1cm4gcz1udWxsLHUrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiBQb3QoKS5kZWZpbmVkKGkpLmN1cnZlKHIpLmNvbnRleHQoYSl9cmV0dXJuIGwueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkNvdCgrbiksZT1udWxsLGwpOnR9LGwueDA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpDb3QoK2UpLGwpOnR9LGwueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Q290KCt0KSxsKTplfSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpDb3QoK3QpLG89bnVsbCxsKTpufSxsLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Q290KCt0KSxsKTpufSxsLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OkNvdCgrdCksbCk6b30sbC5saW5lWDA9bC5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShuKX0sbC5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShvKX0sbC5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShuKX0sbC5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Q290KCEhdCksbCk6aX0sbC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG51bGwhPWEmJihzPXIoYSkpLGwpOnJ9LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9hPXM9bnVsbDpzPXIoYT10KSxsKTphfSxsfSkoKS54MChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54U2NhbGVOdW0oLXQubGVuZ3RoKX0uYmluZCh0aGlzKSkueDEoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueFNjYWxlTnVtKHQubGVuZ3RoKX0uYmluZCh0aGlzKSkueShmdW5jdGlvbih0KXtyZXR1cm4gdC54MD09PS0xLzA/dGhpcy5jaGFydEhlaWdodC10aGlzLmRyYXdNYXJnaW4udG9wOnRoaXMueVNjYWxlKCh0LngxK3QueDApLzIpfS5iaW5kKHRoaXMpKS5jdXJ2ZShEb3QpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudXBkYXRlRGltZW5zaW9ucygpLHRoaXMuc3ZnPUo0KHRoaXMuY2hhcnRDb250YWluZXIubmF0aXZlRWxlbWVudCkuc2VsZWN0KCJzdmciKSx0aGlzLm1haW5Db250YWluZXI9dGhpcy5zdmcuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7dGhpcy5tYXJnaW4ubGVmdH0sICR7dGhpcy5tYXJnaW4udG9wfSlgKSx0aGlzLmRyYXdDb250YWluZXI9dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3RoaXMuZHJhd01hcmdpbi5sZWZ0fSwgJHt0aGlzLmRyYXdNYXJnaW4udG9wfSlgKSx0aGlzLmRvdHNHcm91cD10aGlzLmRyYXdDb250YWluZXIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkb3RzR3JvdXAiKSx0aGlzLnlBeGlzR3JvdXA9dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiYXhpcyBheGlzLS15IiksdGhpcy54QXhpc0dyb3VwPXRoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImF4aXMgYXhpcy0teCIpLHRoaXMubWlzY0dyb3VwPXRoaXMuZHJhd0NvbnRhaW5lci5hcHBlbmQoImciKSx0aGlzLnhTY2FsZT1WdHQoKS5wYWRkaW5nKC4wNSksdGhpcy54QXhpcz16NSh0aGlzLnhTY2FsZSksdGhpcy55U2NhbGU9ZWV0KCkucmFuZ2UoW3RoaXMuZHJhd0hlaWdodCwwXSksdGhpcy55QXhpcz0oZnVuY3Rpb24gdChlKXtyZXR1cm4gVDUoNCxlKX0pKHRoaXMueVNjYWxlKSx0aGlzLnhTY2FsZU51bT1lZXQoKSx0aGlzLmluaXRpYWxpemVCcnVzaCgpLHRoaXMuZHJhd01pc2MoKSx0aGlzLnJlZHJhdygpfW5nT25DaGFuZ2VzKHQpe3RoaXMuc3ZnJiZ0aGlzLnJlZHJhdygpfXJlZHJhdygpe3RoaXMudXBkYXRlRGltZW5zaW9ucygpLHRoaXMuc2V0TWF4QmluU2l6ZSgpLHRoaXMudXBkYXRlQXhlcygpLHRoaXMuZHJhdygpfXVwZGF0ZURpbWVuc2lvbnMoKXt0aGlzLmNoYXJ0V2lkdGg9dGhpcy53aWR0aC10aGlzLm1hcmdpbi5sZWZ0LXRoaXMubWFyZ2luLnJpZ2h0LHRoaXMuZHJhd1dpZHRoPXRoaXMuY2hhcnRXaWR0aC10aGlzLmRyYXdNYXJnaW4ubGVmdC10aGlzLmRyYXdNYXJnaW4ucmlnaHQsdGhpcy5jaGFydEhlaWdodD10aGlzLmhlaWdodC10aGlzLm1hcmdpbi50b3AtdGhpcy5tYXJnaW4uYm90dG9tLHRoaXMuZHJhd0hlaWdodD10aGlzLmNoYXJ0SGVpZ2h0LXRoaXMuZHJhd01hcmdpbi50b3AtdGhpcy5kcmF3TWFyZ2luLmJvdHRvbX1zZXRNYXhCaW5TaXplKCl7T2JqZWN0LnZhbHVlcyh0aGlzLmNoYXJ0RGF0YS52aW9saW5EYXRhKS5mb3JFYWNoKCh0PT57Y29uc3QgZT10Lm1hcCgodD0+dC5sZW5ndGgpKSxuPU1hdGgubWF4KC4uLmUpO3RoaXMubWF4QmluU2l6ZT1NYXRoLm1heChuLHRoaXMubWF4QmluU2l6ZSl9KSl9dXBkYXRlQXhlcygpe3RoaXMueFNjYWxlLnJhbmdlKFswLHRoaXMuZHJhd1dpZHRoXSkuZG9tYWluKE9iamVjdC5rZXlzKHRoaXMuY2hhcnREYXRhLnZpb2xpbkRhdGEpKSx0aGlzLnlTY2FsZS5kb21haW4oW3RoaXMuY2hhcnREYXRhLmV4dHJlbWVzLm1pbix0aGlzLmNoYXJ0RGF0YS5leHRyZW1lcy5tYXhdKSx0aGlzLnhTY2FsZU51bS5yYW5nZShbMCx0aGlzLnhTY2FsZS5iYW5kd2lkdGgoKV0pLmRvbWFpbihbLXRoaXMubWF4QmluU2l6ZSx0aGlzLm1heEJpblNpemVdKX1pbml0aWFsaXplQnJ1c2goKXt0aGlzLmJydXNoLm9uKCJlbmQiLHRoaXMuYnJ1c2hNb3ZlZC5iaW5kKHRoaXMpKX1kcmF3KCl7dGhpcy5kcmF3QXhlcygpLHRoaXMuZHJhd1Bsb3QoKSx0aGlzLnJlZnJlc2hNaXNjKCksdGhpcy5yZWZyZXNoQnJ1c2goKX1kcmF3QXhlcygpe3RoaXMueUF4aXNHcm91cC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHt0aGlzLmRyYXdNYXJnaW4ubGVmdH0sXG4gICAgICAke3RoaXMuZHJhd01hcmdpbi50b3B9KWApLmNhbGwodGhpcy55QXhpcyksdGhpcy54QXhpc0dyb3VwLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3RoaXMuZHJhd01hcmdpbi5sZWZ0fSxcbiAgICAgICR7dGhpcy5kcmF3TWFyZ2luLnRvcCt0aGlzLmNoYXJ0SGVpZ2h0fSlgKS5jYWxsKHRoaXMueEF4aXMpfWRyYXdQbG90KCl7Y29uc3QgdD10aGlzLmRvdHNHcm91cC5zZWxlY3RBbGwoIi52aW9saW4tcGxvdCIpLmRhdGEoT2JqZWN0LmVudHJpZXModGhpcy5jaGFydERhdGEudmlvbGluRGF0YSkpO3QuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInZpb2xpbi1wbG90Iikuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29sb3JTY2FsZSh0WzBdKX0uYmluZCh0aGlzKSkuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybmAke3RoaXMuY29sb3JTY2FsZSh0WzBdKX0zM2B9LmJpbmQodGhpcykpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuYHRyYW5zbGF0ZSgke3RoaXMueFNjYWxlKHRbMF0pfSwgMClgfS5iaW5kKHRoaXMpKS5kYXR1bSgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMV19KSkuYXR0cigiZCIsdGhpcy5hcmVhKSx0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuYHRyYW5zbGF0ZSgke3RoaXMueFNjYWxlKHRbMF0pfSwgMClgfS5iaW5kKHRoaXMpKS5kYXR1bSgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMV19KSkuYXR0cigiZCIsdGhpcy5hcmVhKSx0LmV4aXQoKS5yZW1vdmUoKX1kcmF3TWlzYygpe3RoaXMuemVyb0xpbmU9dGhpcy5taXNjR3JvdXAuYXBwZW5kKCJsaW5lIikuc3R5bGUoInN0cm9rZSIsImJsYWNrIikuYXR0cigieDEiLDApLmF0dHIoInkxIix0aGlzLnlTY2FsZSgwKSkuYXR0cigieDIiLHRoaXMuZHJhd1dpZHRoKS5hdHRyKCJ5MiIsdGhpcy55U2NhbGUoMCkpLHRoaXMubmFuVGV4dD10aGlzLm1pc2NHcm91cC5hcHBlbmQoInRleHQiKS5zdHlsZSgiZmlsbCIsImJsYWNrIikudGV4dCgiTmFOIikuYXR0cigiZm9udC1zaXplIiwiMTBweCIpLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigieCIsLTUpLmF0dHIoInkiLHRoaXMuY2hhcnRIZWlnaHQtdGhpcy5kcmF3TWFyZ2luLnRvcCksdGhpcy5uYW5MaW5lPXRoaXMubWlzY0dyb3VwLmFwcGVuZCgibGluZSIpLnN0eWxlKCJzdHJva2UiLCJncmV5Iikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIikuYXR0cigieDEiLDApLmF0dHIoInkxIix0aGlzLmNoYXJ0SGVpZ2h0LXRoaXMuZHJhd01hcmdpbi50b3ApLmF0dHIoIngyIix0aGlzLmRyYXdXaWR0aCkuYXR0cigieTIiLHRoaXMuY2hhcnRIZWlnaHQtdGhpcy5kcmF3TWFyZ2luLnRvcCl9cmVmcmVzaE1pc2MoKXt0aGlzLnplcm9MaW5lLmF0dHIoInkxIix0aGlzLnlTY2FsZSgwKSkuYXR0cigieDIiLHRoaXMuZHJhd1dpZHRoKS5hdHRyKCJ5MiIsdGhpcy55U2NhbGUoMCkpLHRoaXMubmFuVGV4dC5hdHRyKCJ5Iix0aGlzLmNoYXJ0SGVpZ2h0LXRoaXMuZHJhd01hcmdpbi50b3ApLHRoaXMubmFuTGluZS5hdHRyKCJ5MSIsdGhpcy5kcmF3SGVpZ2h0K3RoaXMuZHJhd01hcmdpbi50b3ApLmF0dHIoIngyIix0aGlzLmRyYXdXaWR0aCkuYXR0cigieTIiLHRoaXMuZHJhd0hlaWdodCt0aGlzLmRyYXdNYXJnaW4udG9wKX1yZWZyZXNoQnJ1c2goKXt0aGlzLmJydXNoLmV4dGVudChbWzAsMF0sW3RoaXMuZHJhd1dpZHRoLHRoaXMuZHJhd0hlaWdodCt0aGlzLm1hcmdpbi50b3BdXSk7Y29uc3QgdD1bMCx0aGlzLmRyYXdIZWlnaHQrdGhpcy5tYXJnaW4udG9wXTtpZih0aGlzLmZpbHRlci5tYXg8dGhpcy5maWx0ZXIubWluKXRbMF09dGhpcy5maWx0ZXIuaW5jbHVkZU5hTj90aGlzLnlTY2FsZSh0aGlzLmNoYXJ0RGF0YS5leHRyZW1lcy5taW4pOnRbMV07ZWxzZXtpZighdGhpcy5maWx0ZXIuaW5jbHVkZU5hTil7Y29uc3QgZT1NYXRoLm1heCh0aGlzLmNoYXJ0RGF0YS5leHRyZW1lcy5taW4sdGhpcy5maWx0ZXIubWluKTt0WzFdPXRoaXMueVNjYWxlKGUpfWNvbnN0IGU9TWF0aC5taW4odGhpcy5jaGFydERhdGEuZXh0cmVtZXMubWF4LHRoaXMuZmlsdGVyLm1heCk7dFswXT10aGlzLnlTY2FsZShlKX10aGlzLmRyYXdDb250YWluZXIuY2FsbCh0aGlzLmJydXNoKS5jYWxsKHRoaXMuYnJ1c2gubW92ZSx0KX1icnVzaE1vdmVkKCl7aWYoIUw0KXJldHVybjtpZighTDQuc291cmNlRXZlbnQpcmV0dXJuO2NvbnN0IHQ9TDQuc2VsZWN0aW9uO2lmKHQpe2xldCBlPSExLG49LTIsbz10aGlzLmNoYXJ0RGF0YS5leHRyZW1lcy5taW47dFswXTw9dGhpcy5kcmF3SGVpZ2h0K3RoaXMubWFyZ2luLnRvcCYmdFsxXT49dGhpcy5kcmF3SGVpZ2h0JiYoZT0hMCksdFswXTx0aGlzLmRyYXdIZWlnaHQmJihuPXRoaXMueVNjYWxlLmludmVydCh0WzBdKSksdFsxXTx0aGlzLmRyYXdIZWlnaHQmJihvPXRoaXMueVNjYWxlLmludmVydCh0WzFdKSksdGhpcy5vblVwZGF0ZUZpbHRlci5lbWl0KHttYXg6bixtaW46byxpbmNsdWRlTmFOOmV9KX1lbHNlIHRoaXMub25VcGRhdGVGaWx0ZXIuZW1pdCh7bWF4OjEsbWluOi0xLGluY2x1ZGVOYU46ITB9KX19WXl0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxZeXQpfSxZeXQuybVjbXA9dG8oe3R5cGU6WXl0LHNlbGVjdG9yczpbWyJ2aW9saW4tZmlsdGVyLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmUWgoV3l0LDcsaGcpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4uY2hhcnRDb250YWluZXI9dC5maXJzdCl9fSxpbnB1dHM6e21ldHJpY05hbWU6Im1ldHJpY05hbWUiLGZpbHRlcjoiZmlsdGVyIixjaGFydERhdGE6ImNoYXJ0RGF0YSIsd2lkdGg6IndpZHRoIixjb2xvclNjYWxlOiJjb2xvclNjYWxlIn0sb3V0cHV0czp7b25SZW1vdmU6Im9uUmVtb3ZlIixvblVwZGF0ZUZpbHRlcjoib25VcGRhdGVGaWx0ZXIifSxmZWF0dXJlczpbQm9dLGRlY2xzOjksdmFyczoxLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJSZW1vdmUgRmlsdGVyIik6JGxvY2FsaXplYDpMYWJlbCBmb3IgYSBidXR0b24gdGhhdCByZW1vdmVzIGEgbWV0cmljIGZpbHRlci7ikJ9hNmJmYWQ1OGJiMzYzZDVjODkxZDBhNTQ3NGIxZDc3ZWY5MGEzNGRh4pCfODQ1NDk2MTc5Nzc2MjkwNzYyNDpSZW1vdmUgRmlsdGVyYCxbWzEsImNoYXJ0LWNvbnRhaW5lciJdLFsidGl0bGUiLCJTaG93cyB0aGUgblBNSSB2YWx1ZSBkaXN0cmlidXRpb24gcGVyIHJ1bi4gUmFuZ2VzIG9mIHNlbGVjdGVkIHZhbHVlcyBjYW4gYmUgbWFuaXB1bGF0ZWQgYnkgbW9kaWZ5aW5nIHRoZSBncmV5IGJveC4iLDEsImNoYXJ0LWhlYWQiXSxbMSwiY2hhcnQtaGVhZGluZyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJjbGljayJdLFsic3ZnSWNvbiIsImNsZWFyXzI0cHgiXSxbMSwiY2hhcnQiXSxbImNoYXJ0IiwiIl0sWzEsImRyYXctYXJlYSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsImRpdiIsMCksUm0oMSwiZGl2IiwxKSxSbSgyLCJkaXYiLDIpLGt1KDMpLEFtKCksUm0oNCwiYnV0dG9uIiwzKSxWbSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZW1vdmUuZW1pdCgpfSkpLFRtKDUsIm1hdC1pY29uIiw0KSxBbSgpLEFtKCksUm0oNiwiZGl2Iiw1LDYpLHFpKCksVG0oOCwic3ZnIiw3KSxBbSgpLEFtKCkpLDImZSYmKHJjKDMpLFN1KG4ubWV0cmljTmFtZSkpfSxkaXJlY3RpdmVzOltYSCxEV10sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtvdmVyZmxvdzpoaWRkZW59LmNoYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MzAwcHg7d2lkdGg6MTAwJX0uY2hhcnQtaGVhZFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uY2hhcnQtaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHg7cGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy10b3A6MTBweH0uZHJhdy1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5zdHJva2VkLWxpbmVbX25nY29udGVudC0lQ09NUCVde3N0cm9rZTpyZ2JhKDAsMCwwLC4xMik7c3Ryb2tlLWRhc2hhcnJheTozIDN9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFl5dCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJ2aW9saW4tZmlsdGVyLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vdmlvbGluX2ZpbHRlcl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi92aW9saW5fZmlsdGVyX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSxudWxsLHttZXRyaWNOYW1lOlt7dHlwZTp4eX1dLGZpbHRlcjpbe3R5cGU6eHl9XSxjaGFydERhdGE6W3t0eXBlOnh5fV0sd2lkdGg6W3t0eXBlOnh5fV0sY29sb3JTY2FsZTpbe3R5cGU6eHl9XSxvblJlbW92ZTpbe3R5cGU6T3l9XSxvblVwZGF0ZUZpbHRlcjpbe3R5cGU6T3l9XSxjaGFydENvbnRhaW5lcjpbe3R5cGU6WmEsYXJnczpbImNoYXJ0Iix7c3RhdGljOiEwLHJlYWQ6aGd9XX1dfSk7Y2xhc3MgcXl0e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLmFjdGl2ZVJ1bnMkPXRoaXMuc3RvcmUucGlwZShGdyhOTikpLnBpcGUoSXQoKHQ9PnQ/QXJyYXkuZnJvbSh0LmVudHJpZXMoKSkuZmlsdGVyKCh0PT50WzFdKSkubWFwKCh0PT50WzBdKSk6W10pKSksdGhpcy52aXNpYmxlQW5ub3RhdGlvbnMkPVd0KFt0aGlzLnN0b3JlLnNlbGVjdChyYnQpLHRoaXMuc3RvcmUuc2VsZWN0KHBidCksdGhpcy5zdG9yZS5zZWxlY3QoTWJ0KV0pLnBpcGUoSXQoKChbdCxlLG5dKT0+R3l0KHQsZSxuKSkpKSx0aGlzLmNoYXJ0V2lkdGgkPXRoaXMuc3RvcmUucGlwZShGdyh4YnQpKS5waXBlKEl0KCh0PT5NYXRoLm1heCgxNTAsdCkpKSksdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdCh6TikucGlwZShJdCgodD0+ZT0+e2lmKCF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcihgW0NvbG9yIHNjYWxlXSB1bmtub3duIHJ1bklkOiAke2V9LmApO3JldHVybiB0W2VdfSkpKX1uZ09uSW5pdCgpe3RoaXMuY2hhcnREYXRhJD1XdChbdGhpcy52aXNpYmxlQW5ub3RhdGlvbnMkLHRoaXMuYWN0aXZlUnVucyRdKS5waXBlKEl0KCgoW3QsZV0pPT4oZnVuY3Rpb24gbih0LGUsbyl7Y29uc3QgaT17fSxhPXt9LHI9bmV3IFNldChlKSxzPW55dChvKSxsPXttYXg6LTEsbWluOjF9O09iamVjdC52YWx1ZXModCkuZm9yRWFjaCgodD0+e3QuZm9yRWFjaCgodD0+e2NvbnN0IGU9dC5ydW47aWYoci5oYXMoZSkmJnQubWV0cmljPT09cylpZihudWxsPT09dC5uUE1JVmFsdWUpYVtlXT9hW2VdLnB1c2gobnVsbCk6YVtlXT1bbnVsbF07ZWxzZXtjb25zdCBuPXQublBNSVZhbHVlO2wubWF4PWwubWF4PG4/bjpsLm1heCxsLm1pbj1sLm1pbj5uP246bC5taW4saVt0LnJ1bl0/aVtlXS5wdXNoKG4pOmlbZV09W25dfX0pKX0pKTtjb25zdCBjPXt9LGQ9TzUoKS5kb21haW4oW2wubWluLGwubWF4XSkudmFsdWUoKHQ9PnQpKSxwPU81KCkuZG9tYWluKFstMS8wLDEvMF0pLnRocmVzaG9sZHMoMCkudmFsdWUoKHQ9PnQpKTtmb3IoY29uc3QgdCBvZiByKWlmKGNbdF09ZChpW3RdKSxhW3RdKXtjb25zdCBlPXAoYVt0XSk7Y1t0XS51bnNoaWZ0KGVbMF0pfXJldHVybnt2aW9saW5EYXRhOmMsZXh0cmVtZXM6bH19KSh0LGUsdGhpcy5tZXRyaWNOYW1lKSkpKX1yZW1vdmVNZXRyaWMoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKExidCh7bWV0cmljOnRoaXMubWV0cmljTmFtZX0pKX11cGRhdGVGaWx0ZXIodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChCYnQoT2JqZWN0LmFzc2lnbih7bWV0cmljOnRoaXMubWV0cmljTmFtZX0sdCkpKX19ZnVuY3Rpb24gWnl0KHQsZSl7aWYoMSZ0JiZUbSgwLCJucG1pLXZpb2xpbi1maWx0ZXIiLDgpLDImdCl7Y29uc3QgdD1lLiRpbXBsaWNpdDtEbSgibWV0cmljTmFtZSIsdFswXSkoImZpbHRlciIsdFsxXSl9fWZ1bmN0aW9uIFh5dCh0LGUpezEmdCYmKFJtKDAsImRpdiIsOSksUm0oMSwic3BhbiIsMTApLGt1KDIsIiBZb3UgY2FuIGFkZCBtb3JlIGZpbHRlcnMgYXQgdGhlIHRvcC4gIiksQW0oKSxBbSgpKX1xeXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHF5dCkoU20oSXcpKX0scXl0Lsm1Y21wPXRvKHt0eXBlOnF5dCxzZWxlY3RvcnM6W1sibnBtaS12aW9saW4tZmlsdGVyIl1dLGlucHV0czp7bWV0cmljTmFtZToibWV0cmljTmFtZSIsZmlsdGVyOiJmaWx0ZXIifSxkZWNsczo0LHZhcnM6MTEsY29uc3RzOltbMywibWV0cmljTmFtZSIsImZpbHRlciIsImNoYXJ0RGF0YSIsIndpZHRoIiwiY29sb3JTY2FsZSIsIm9uUmVtb3ZlIiwib25VcGRhdGVGaWx0ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsInZpb2xpbi1maWx0ZXItY29tcG9uZW50IiwwKSxWbSgib25SZW1vdmUiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ucmVtb3ZlTWV0cmljKCl9KSkoIm9uVXBkYXRlRmlsdGVyIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi51cGRhdGVGaWx0ZXIoZSl9KSksQWgoMSwiYXN5bmMiKSxBaCgyLCJhc3luYyIpLEFoKDMsImFzeW5jIiksQW0oKSksMiZlJiZEbSgibWV0cmljTmFtZSIsbi5tZXRyaWNOYW1lKSgiZmlsdGVyIixuLmZpbHRlcikoImNoYXJ0RGF0YSIsVGgoMSw1LG4uY2hhcnREYXRhJCkpKCJ3aWR0aCIsVGgoMiw3LG4uY2hhcnRXaWR0aCQpKSgiY29sb3JTY2FsZSIsVGgoMyw5LG4ucnVuQ29sb3JTY2FsZSQpKX0sZGlyZWN0aXZlczpbWXl0XSxwaXBlczpbd01dLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgocXl0LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im5wbWktdmlvbGluLWZpbHRlciIsdGVtcGxhdGU6J1xuICAgIDx2aW9saW4tZmlsdGVyLWNvbXBvbmVudFxuICAgICAgW21ldHJpY05hbWVdPSJtZXRyaWNOYW1lIlxuICAgICAgW2ZpbHRlcl09ImZpbHRlciJcbiAgICAgIFtjaGFydERhdGFdPSJjaGFydERhdGEkIHwgYXN5bmMiXG4gICAgICBbd2lkdGhdPSJjaGFydFdpZHRoJCB8IGFzeW5jIlxuICAgICAgW2NvbG9yU2NhbGVdPSJydW5Db2xvclNjYWxlJCB8IGFzeW5jIlxuICAgICAgKG9uUmVtb3ZlKT0icmVtb3ZlTWV0cmljKCkiXG4gICAgICAob25VcGRhdGVGaWx0ZXIpPSJ1cGRhdGVGaWx0ZXIoJGV2ZW50KSJcbiAgICA+PC92aW9saW4tZmlsdGVyLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLHttZXRyaWNOYW1lOlt7dHlwZTp4eX1dLGZpbHRlcjpbe3R5cGU6eHl9XX0pO2NsYXNzIEt5dHtjb25zdHJ1Y3Rvcigpe3RoaXMudG9nZ2xlU2lkZWJhckV4cGFuZGVkPW5ldyBMaH19S3l0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxLeXQpfSxLeXQuybVjbXA9dG8oe3R5cGU6S3l0LHNlbGVjdG9yczpbWyJ2aW9saW4tZmlsdGVycy1jb21wb25lbnQiXV0saW5wdXRzOntzaWRlYmFyRXhwYW5kZWQ6InNpZGViYXJFeHBhbmRlZCIsbWV0cmljRmlsdGVyczoibWV0cmljRmlsdGVycyJ9LG91dHB1dHM6e3RvZ2dsZVNpZGViYXJFeHBhbmRlZDoidG9nZ2xlU2lkZWJhckV4cGFuZGVkIn0sZGVjbHM6OSx2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIkV4cGFuZC9IaWRlIFNpZGViYXIiKTokbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IGV4cGFuZHMvaGlkZXMgdGhlIHNpZGViYXIu4pCfNDhjMjk5MDNjZTg4MWFiNjEwODhmOGQ0OWQ4MjcyMDM3MTZhYWVkNOKQnzQ2NTg2MDI5OTE5NzAyNjAyMTU6RXhwYW5kL0hpZGUgU2lkZWJhcmAsW1sxLCJmaWx0ZXJzLXRvb2xiYXIiXSxbMSwiZmlsdGVycy10aXRsZSJdLFsxLCJzaWRlLXRvZ2dsZSJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJjbGljayJdLFsic3ZnSWNvbiIsImNoZXZyb25fbGVmdF8yNHB4Il0sWzEsImZpbHRlcnMiXSxbMywibWV0cmljTmFtZSIsImZpbHRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsImZpbHRlcnMtaGludCIsNCwibmdJZiJdLFszLCJtZXRyaWNOYW1lIiwiZmlsdGVyIl0sWzEsImZpbHRlcnMtaGludCJdLFsxLCJmaWx0ZXJzLWhpbnQtdGV4dCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsImRpdiIsMCksUm0oMSwiaDMiLDEpLGt1KDIsIkFjdGl2ZSBGaWx0ZXJzIiksQW0oKSxSbSgzLCJkaXYiLDIpLFJtKDQsImJ1dHRvbiIsMyksVm0oImNsaWNrIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnRvZ2dsZVNpZGViYXJFeHBhbmRlZC5lbWl0KCl9KSksVG0oNSwibWF0LWljb24iLDQpLEFtKCksQW0oKSxBbSgpLFJtKDYsImRpdiIsNSksUXAoNyxaeXQsMSwyLCJucG1pLXZpb2xpbi1maWx0ZXIiLDYpLEFtKCksUXAoOCxYeXQsMywwLCJkaXYiLDcpKSwyJmUmJihyYyg3KSxEbSgibmdGb3JPZiIsbi5tZXRyaWNGaWx0ZXJzKSxyYygxKSxEbSgibmdJZiIsMD09PW4ubWV0cmljRmlsdGVycy5sZW5ndGgpKX0sZGlyZWN0aXZlczpbWEgsRFcsbE0sZE0scXl0XSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCV9LmZpbHRlcnMtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2hlaWdodDo0MnB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6MCAxMHB4fS5maWx0ZXJzLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9LnNpZGUtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6M3B4O2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjMwcHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDozMHB4fS5maWx0ZXJzW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy15OmF1dG99LmZpbHRlcnMtaGludFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDJweDtwYWRkaW5nOjAgMTZweH0uZmlsdGVycy1oaW50LXRleHRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoS3l0LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InZpb2xpbi1maWx0ZXJzLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vdmlvbGluX2ZpbHRlcnNfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vdmlvbGluX2ZpbHRlcnNfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwse3NpZGViYXJFeHBhbmRlZDpbe3R5cGU6eHl9XSxtZXRyaWNGaWx0ZXJzOlt7dHlwZTp4eX1dLHRvZ2dsZVNpZGViYXJFeHBhbmRlZDpbe3R5cGU6T3l9XX0pO2NsYXNzIEp5dHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5zaWRlYmFyRXhwYW5kZWQkPXRoaXMuc3RvcmUuc2VsZWN0KF9idCksdGhpcy5tZXRyaWNGaWx0ZXJzJD10aGlzLnN0b3JlLnNlbGVjdChnYnQpLnBpcGUoSXQoKHQ9Pk9iamVjdC5lbnRyaWVzKHQpKSkpfW9uVG9nZ2xlU2lkZWJhckV4cGFuZGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChXYnQoKSl9fWZ1bmN0aW9uIFF5dCh0LGUsbil7cmV0dXJuIHQubGVuZ3RoIT1lLmxlbmd0aD9uOmUubWFwKCgoZSxuKT0+ZS10W25dKSkubWFwKCh0PT5NYXRoLnBvdyh0LDIpKSkucmVkdWNlKCgodCxlKT0+dCtlKSwwKX1KeXQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEp5dCkoU20oSXcpKX0sSnl0Lsm1Y21wPXRvKHt0eXBlOkp5dCxzZWxlY3RvcnM6W1sibnBtaS12aW9saW4tZmlsdGVycyJdXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJzaWRlYmFyRXhwYW5kZWQiLCJtZXRyaWNGaWx0ZXJzIiwidG9nZ2xlU2lkZWJhckV4cGFuZGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJ2aW9saW4tZmlsdGVycy1jb21wb25lbnQiLDApLFZtKCJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKX0pKSxBaCgxLCJhc3luYyIpLEFoKDIsImFzeW5jIiksQW0oKSksMiZlJiZEbSgic2lkZWJhckV4cGFuZGVkIixUaCgxLDIsbi5zaWRlYmFyRXhwYW5kZWQkKSkoIm1ldHJpY0ZpbHRlcnMiLFRoKDIsNCxuLm1ldHJpY0ZpbHRlcnMkKSl9LGRpcmVjdGl2ZXM6W0t5dF0scGlwZXM6W3dNXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEp5dCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJucG1pLXZpb2xpbi1maWx0ZXJzIix0ZW1wbGF0ZTonXG4gICAgPHZpb2xpbi1maWx0ZXJzLWNvbXBvbmVudFxuICAgICAgW3NpZGViYXJFeHBhbmRlZF09InNpZGViYXJFeHBhbmRlZCQgfCBhc3luYyJcbiAgICAgIFttZXRyaWNGaWx0ZXJzXT0ibWV0cmljRmlsdGVycyQgfCBhc3luYyJcbiAgICAgICh0b2dnbGVTaWRlYmFyRXhwYW5kZWQpPSJvblRvZ2dsZVNpZGViYXJFeHBhbmRlZCgpIlxuICAgID48L3Zpb2xpbi1maWx0ZXJzLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLG51bGwpO2NvbnN0ICR5dD1bInRodW1iQ29udGFpbmVyIl0sdF90PVsidG9nZ2xlQmFyIl0sZV90PVsiaW5wdXQiXSxuX3Q9ZnVuY3Rpb24odCl7cmV0dXJue2VudGVyRHVyYXRpb246dH19LG9fdD1uZXcgR2EoIm1hdC1zbGlkZS10b2dnbGUtZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+KHtkaXNhYmxlVG9nZ2xlVmFsdWU6ITF9KX0pOwovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8KbGV0IGlfdD0wO2NvbnN0IGFfdD17cHJvdmlkZTpJVix1c2VFeGlzdGluZzpxZSgoKCk9PmxfdCkpLG11bHRpOiEwfTtjbGFzcyByX3R7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMuY2hlY2tlZD1lfX1jb25zdCBzX3Q9JEkoSkkoUUkoS0koY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZWxlbWVudFJlZj10fX0pKSkpO2NsYXNzIGxfdCBleHRlbmRzIHNfdHtjb25zdHJ1Y3Rvcih0LGUsbixvLGksYSl7c3VwZXIodCksdGhpcy5fZm9jdXNNb25pdG9yPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9bix0aGlzLmRlZmF1bHRzPWksdGhpcy5fb25DaGFuZ2U9dD0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl91bmlxdWVJZD0ibWF0LXNsaWRlLXRvZ2dsZS0iKyArK2lfdCx0aGlzLl9yZXF1aXJlZD0hMSx0aGlzLl9jaGVja2VkPSExLHRoaXMubmFtZT1udWxsLHRoaXMuaWQ9dGhpcy5fdW5pcXVlSWQsdGhpcy5sYWJlbFBvc2l0aW9uPSJhZnRlciIsdGhpcy5hcmlhTGFiZWw9bnVsbCx0aGlzLmFyaWFMYWJlbGxlZGJ5PW51bGwsdGhpcy5jaGFuZ2U9bmV3IExoLHRoaXMudG9nZ2xlQ2hhbmdlPW5ldyBMaCx0aGlzLnRhYkluZGV4PXBhcnNlSW50KG8pfHwwLHRoaXMuY29sb3I9dGhpcy5kZWZhdWx0Q29sb3I9aS5jb2xvcnx8ImFjY2VudCIsdGhpcy5fbm9vcEFuaW1hdGlvbnM9Ik5vb3BBbmltYXRpb25zIj09PWF9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfXNldCByZXF1aXJlZCh0KXt0aGlzLl9yZXF1aXJlZD15eih0KX1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLl9jaGVja2VkfXNldCBjaGVja2VkKHQpe3RoaXMuX2NoZWNrZWQ9eXoodCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IGlucHV0SWQoKXtyZXR1cm5gJHt0aGlzLmlkfHx0aGlzLl91bmlxdWVJZH0taW5wdXRgfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApLnN1YnNjcmliZSgodD0+eyJrZXlib2FyZCI9PT10fHwicHJvZ3JhbSI9PT10P3RoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk6dHx8UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9PnRoaXMuX29uVG91Y2hlZCgpKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZil9X29uQ2hhbmdlRXZlbnQodCl7dC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnRvZ2dsZUNoYW5nZS5lbWl0KCksdGhpcy5kZWZhdWx0cy5kaXNhYmxlVG9nZ2xlVmFsdWU/dGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hlY2tlZD10aGlzLmNoZWNrZWQ6KHRoaXMuY2hlY2tlZD10aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpKX1fb25JbnB1dENsaWNrKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCl9d3JpdGVWYWx1ZSh0KXt0aGlzLmNoZWNrZWQ9ISF0fXJlZ2lzdGVyT25DaGFuZ2UodCl7dGhpcy5fb25DaGFuZ2U9dH1yZWdpc3Rlck9uVG91Y2hlZCh0KXt0aGlzLl9vblRvdWNoZWQ9dH1zZXREaXNhYmxlZFN0YXRlKHQpe3RoaXMuZGlzYWJsZWQ9dCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1mb2N1cyh0LGUpe2U/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2lucHV0RWxlbWVudCxlLHQpOnRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKHQpfXRvZ2dsZSgpe3RoaXMuY2hlY2tlZD0hdGhpcy5jaGVja2VkLHRoaXMuX29uQ2hhbmdlKHRoaXMuY2hlY2tlZCl9X2VtaXRDaGFuZ2VFdmVudCgpe3RoaXMuX29uQ2hhbmdlKHRoaXMuY2hlY2tlZCksdGhpcy5jaGFuZ2UuZW1pdChuZXcgcl90KHRoaXMsdGhpcy5jaGVja2VkKSl9X29uTGFiZWxUZXh0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfX1sX3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGxfdCkoU20oaGcpLFNtKFNJKSxTbShVZyksTmEoInRhYmluZGV4IiksU20ob190KSxTbShWUCw4KSl9LGxfdC7JtWNtcD10byh7dHlwZTpsX3Qsc2VsZWN0b3JzOltbIm1hdC1zbGlkZS10b2dnbGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihRaCgkeXQsNSksUWgodF90LDUpLFFoKGVfdCw1KSksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi5fdGh1bWJFbD10LmZpcnN0KSxKaCh0PXRiKCkpJiYobi5fdGh1bWJCYXJFbD10LmZpcnN0KSxKaCh0PXRiKCkpJiYobi5faW5wdXRFbGVtZW50PXQuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtc2xpZGUtdG9nZ2xlIl0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uIHQoZSxuKXsyJmUmJihUdSgiaWQiLG4uaWQpLGpwKCJ0YWJpbmRleCIsbi5kaXNhYmxlZD9udWxsOi0xKSgiYXJpYS1sYWJlbCIsbnVsbCkoImFyaWEtbGFiZWxsZWRieSIsbnVsbCkscHUoIm1hdC1jaGVja2VkIixuLmNoZWNrZWQpKCJtYXQtZGlzYWJsZWQiLG4uZGlzYWJsZWQpKCJtYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSIsImJlZm9yZSI9PW4ubGFiZWxQb3NpdGlvbikoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixuLl9ub29wQW5pbWF0aW9ucykpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsY29sb3I6ImNvbG9yIix0YWJJbmRleDoidGFiSW5kZXgiLG5hbWU6Im5hbWUiLGlkOiJpZCIsbGFiZWxQb3NpdGlvbjoibGFiZWxQb3NpdGlvbiIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxyZXF1aXJlZDoicmVxdWlyZWQiLGNoZWNrZWQ6ImNoZWNrZWQiLGFyaWFEZXNjcmliZWRieTpbImFyaWEtZGVzY3JpYmVkYnkiLCJhcmlhRGVzY3JpYmVkYnkiXX0sb3V0cHV0czp7Y2hhbmdlOiJjaGFuZ2UiLHRvZ2dsZUNoYW5nZToidG9nZ2xlQ2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdLGZlYXR1cmVzOltwZyhbYV90XSkseHBdLG5nQ29udGVudFNlbGVjdG9yczpbIioiXSxkZWNsczoxNix2YXJzOjIwLGNvbnN0czpbWzEsIm1hdC1zbGlkZS10b2dnbGUtbGFiZWwiXSxbImxhYmVsIiwiIl0sWzEsIm1hdC1zbGlkZS10b2dnbGUtYmFyIl0sWyJ0b2dnbGVCYXIiLCIiXSxbInR5cGUiLCJjaGVja2JveCIsInJvbGUiLCJzd2l0Y2giLDEsIm1hdC1zbGlkZS10b2dnbGUtaW5wdXQiLCJjZGstdmlzdWFsbHktaGlkZGVuIiwzLCJpZCIsInJlcXVpcmVkIiwidGFiSW5kZXgiLCJjaGVja2VkIiwiZGlzYWJsZWQiLCJjaGFuZ2UiLCJjbGljayJdLFsiaW5wdXQiLCIiXSxbMSwibWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIiXSxbInRodW1iQ29udGFpbmVyIiwiIl0sWzEsIm1hdC1zbGlkZS10b2dnbGUtdGh1bWIiXSxbIm1hdC1yaXBwbGUiLCIiLDEsIm1hdC1zbGlkZS10b2dnbGUtcmlwcGxlIiwibWF0LWZvY3VzLWluZGljYXRvciIsMywibWF0UmlwcGxlVHJpZ2dlciIsIm1hdFJpcHBsZURpc2FibGVkIiwibWF0UmlwcGxlQ2VudGVyZWQiLCJtYXRSaXBwbGVSYWRpdXMiLCJtYXRSaXBwbGVBbmltYXRpb24iXSxbMSwibWF0LXJpcHBsZS1lbGVtZW50IiwibWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZSJdLFsxLCJtYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQiLDMsImNka09ic2VydmVDb250ZW50Il0sWyJsYWJlbENvbnRlbnQiLCIiXSxbMiwiZGlzcGxheSIsIm5vbmUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFptKCksUm0oMCwibGFiZWwiLDAsMSksUm0oMiwiZGl2IiwyLDMpLFJtKDQsImlucHV0Iiw0LDUpLFZtKCJjaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLl9vbkNoYW5nZUV2ZW50KGUpfSkpKCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uX29uSW5wdXRDbGljayhlKX0pKSxBbSgpLFJtKDYsImRpdiIsNiw3KSxUbSg4LCJkaXYiLDgpLFJtKDksImRpdiIsOSksVG0oMTAsImRpdiIsMTApLEFtKCksQW0oKSxBbSgpLFJtKDExLCJzcGFuIiwxMSwxMiksVm0oImNka09ic2VydmVDb250ZW50IiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLl9vbkxhYmVsVGV4dENoYW5nZSgpfSkpLFJtKDEzLCJzcGFuIiwxMyksa3UoMTQsIsKgIiksQW0oKSxYbSgxNSksQW0oKSxBbSgpKSwyJmUpe2NvbnN0IHQ9JHAoMSksZT0kcCgxMik7anAoImZvciIsbi5pbnB1dElkKSxyYygyKSxwdSgibWF0LXNsaWRlLXRvZ2dsZS1iYXItbm8tc2lkZS1tYXJnaW4iLCFlLnRleHRDb250ZW50fHwhZS50ZXh0Q29udGVudC50cmltKCkpLHJjKDIpLERtKCJpZCIsbi5pbnB1dElkKSgicmVxdWlyZWQiLG4ucmVxdWlyZWQpKCJ0YWJJbmRleCIsbi50YWJJbmRleCkoImNoZWNrZWQiLG4uY2hlY2tlZCkoImRpc2FibGVkIixuLmRpc2FibGVkKSxqcCgibmFtZSIsbi5uYW1lKSgiYXJpYS1jaGVja2VkIixuLmNoZWNrZWQudG9TdHJpbmcoKSkoImFyaWEtbGFiZWwiLG4uYXJpYUxhYmVsKSgiYXJpYS1sYWJlbGxlZGJ5IixuLmFyaWFMYWJlbGxlZGJ5KSgiYXJpYS1kZXNjcmliZWRieSIsbi5hcmlhRGVzY3JpYmVkYnkpLHJjKDUpLERtKCJtYXRSaXBwbGVUcmlnZ2VyIix0KSgibWF0UmlwcGxlRGlzYWJsZWQiLG4uZGlzYWJsZVJpcHBsZXx8bi5kaXNhYmxlZCkoIm1hdFJpcHBsZUNlbnRlcmVkIiwhMCkoIm1hdFJpcHBsZVJhZGl1cyIsMjApKCJtYXRSaXBwbGVBbmltYXRpb24iLE1oKDE4LG5fdCxuLl9ub29wQW5pbWF0aW9ucz8wOjE1MCkpfX0sZGlyZWN0aXZlczpba0gsanpdLHN0eWxlczpbIi5tYXQtc2xpZGUtdG9nZ2xle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoyNHB4O21heC13aWR0aDoxMDAlO2xpbmUtaGVpZ2h0OjI0cHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVye3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxNnB4LCAwLCAwKX1bZGlyPXJ0bF0gLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVye3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTZweCwgMCwgMCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWRpc2FibGVke29wYWNpdHk6LjM4fS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS1sYWJlbCwubWF0LXNsaWRlLXRvZ2dsZS5tYXQtZGlzYWJsZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVye2N1cnNvcjpkZWZhdWx0fS5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtkaXNwbGF5OmZsZXg7ZmxleDoxO2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXJ9Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudHt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1hdC1zbGlkZS10b2dnbGUtbGFiZWwtYmVmb3JlIC5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVse29yZGVyOjF9Lm1hdC1zbGlkZS10b2dnbGUtbGFiZWwtYmVmb3JlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntvcmRlcjoyfVtkaXI9cnRsXSAubWF0LXNsaWRlLXRvZ2dsZS1sYWJlbC1iZWZvcmUgLm1hdC1zbGlkZS10b2dnbGUtYmFyLC5tYXQtc2xpZGUtdG9nZ2xlLWJhcnttYXJnaW4tcmlnaHQ6OHB4O21hcmdpbi1sZWZ0OjB9W2Rpcj1ydGxdIC5tYXQtc2xpZGUtdG9nZ2xlLWJhciwubWF0LXNsaWRlLXRvZ2dsZS1sYWJlbC1iZWZvcmUgLm1hdC1zbGlkZS10b2dnbGUtYmFye21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH0ubWF0LXNsaWRlLXRvZ2dsZS1iYXItbm8tc2lkZS1tYXJnaW57bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MH0ubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxO3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7dG9wOi0zcHg7bGVmdDowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2l0aW9uOmFsbCA4MG1zIGxpbmVhcjt0cmFuc2l0aW9uLXByb3BlcnR5OnRyYW5zZm9ybX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVye3RyYW5zaXRpb246bm9uZX1bZGlyPXJ0bF0gLm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVye2xlZnQ6YXV0bztyaWdodDowfS5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2hlaWdodDoyMHB4O3dpZHRoOjIwcHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1zbGlkZS10b2dnbGUtYmFye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjM2cHg7aGVpZ2h0OjE0cHg7ZmxleC1zaHJpbms6MDtib3JkZXItcmFkaXVzOjhweH0ubWF0LXNsaWRlLXRvZ2dsZS1pbnB1dHtib3R0b206MDtsZWZ0OjEwcHh9W2Rpcj1ydGxdIC5tYXQtc2xpZGUtdG9nZ2xlLWlucHV0e2xlZnQ6YXV0bztyaWdodDoxMHB4fS5tYXQtc2xpZGUtdG9nZ2xlLWJhciwubWF0LXNsaWRlLXRvZ2dsZS10aHVtYnt0cmFuc2l0aW9uOmFsbCA4MG1zIGxpbmVhcjt0cmFuc2l0aW9uLXByb3BlcnR5OmJhY2tncm91bmQtY29sb3I7dHJhbnNpdGlvbi1kZWxheTo1MG1zfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIsLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie3RyYW5zaXRpb246bm9uZX0ubWF0LXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS1yaXBwbGV7cG9zaXRpb246YWJzb2x1dGU7dG9wOmNhbGMoNTAlIC0gMjBweCk7bGVmdDpjYWxjKDUwJSAtIDIwcHgpO2hlaWdodDo0MHB4O3dpZHRoOjQwcHg7ei1pbmRleDoxO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1zbGlkZS10b2dnbGUgLm1hdC1zbGlkZS10b2dnbGUtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxlKXtvcGFjaXR5Oi4xMn0ubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZXt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RyYW5zZm9ybTpub25lfS5tYXQtc2xpZGUtdG9nZ2xlLWJhcjpob3ZlciAubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5Oi4wNH0ubWF0LXNsaWRlLXRvZ2dsZTpub3QoLm1hdC1kaXNhYmxlZCkuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTouMTJ9Lm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1zbGlkZS10b2dnbGUubWF0LWRpc2FibGVkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcjpob3ZlciAubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5OjB9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LXNsaWRlLXRvZ2dsZS1iYXI6aG92ZXIgLm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGV7ZGlzcGxheTpub25lfX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JvcmRlcjoxcHggc29saWR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlLXRvZ2dsZS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7b3V0bGluZToycHggZG90dGVkO291dGxpbmUtb2Zmc2V0OjVweH1cbiJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGxfdC5jdG9yUGFyYW1ldGVycz0oKT0+W3t0eXBlOmhnfSx7dHlwZTpTSX0se3R5cGU6VWd9LHt0eXBlOlN0cmluZyxkZWNvcmF0b3JzOlt7dHlwZTpqYSxhcmdzOlsidGFiaW5kZXgiXX1dfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbb190XX1dfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6U3J9LHt0eXBlOmtyLGFyZ3M6W1ZQXX1dfV0sbF90LnByb3BEZWNvcmF0b3JzPXtfdGh1bWJFbDpbe3R5cGU6WmEsYXJnczpbInRodW1iQ29udGFpbmVyIl19XSxfdGh1bWJCYXJFbDpbe3R5cGU6WmEsYXJnczpbInRvZ2dsZUJhciJdfV0sbmFtZTpbe3R5cGU6eHl9XSxpZDpbe3R5cGU6eHl9XSxsYWJlbFBvc2l0aW9uOlt7dHlwZTp4eX1dLGFyaWFMYWJlbDpbe3R5cGU6eHksYXJnczpbImFyaWEtbGFiZWwiXX1dLGFyaWFMYWJlbGxlZGJ5Olt7dHlwZTp4eSxhcmdzOlsiYXJpYS1sYWJlbGxlZGJ5Il19XSxhcmlhRGVzY3JpYmVkYnk6W3t0eXBlOnh5LGFyZ3M6WyJhcmlhLWRlc2NyaWJlZGJ5Il19XSxyZXF1aXJlZDpbe3R5cGU6eHl9XSxjaGVja2VkOlt7dHlwZTp4eX1dLGNoYW5nZTpbe3R5cGU6T3l9XSx0b2dnbGVDaGFuZ2U6W3t0eXBlOk95fV0sX2lucHV0RWxlbWVudDpbe3R5cGU6WmEsYXJnczpbImlucHV0Il19XX0sKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChsX3QsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsZXhwb3J0QXM6Im1hdFNsaWRlVG9nZ2xlIixob3N0OntjbGFzczoibWF0LXNsaWRlLXRvZ2dsZSIsIltpZF0iOiJpZCIsIlthdHRyLnRhYmluZGV4XSI6ImRpc2FibGVkID8gbnVsbCA6IC0xIiwiW2F0dHIuYXJpYS1sYWJlbF0iOiJudWxsIiwiW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XSI6Im51bGwiLCJbY2xhc3MubWF0LWNoZWNrZWRdIjoiY2hlY2tlZCIsIltjbGFzcy5tYXQtZGlzYWJsZWRdIjoiZGlzYWJsZWQiLCJbY2xhc3MubWF0LXNsaWRlLXRvZ2dsZS1sYWJlbC1iZWZvcmVdIjonbGFiZWxQb3NpdGlvbiA9PSAiYmVmb3JlIicsIltjbGFzcy5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZV0iOiJfbm9vcEFuaW1hdGlvbnMifSx0ZW1wbGF0ZTonPGxhYmVsIFthdHRyLmZvcl09ImlucHV0SWQiIGNsYXNzPSJtYXQtc2xpZGUtdG9nZ2xlLWxhYmVsIiAjbGFiZWw+XG4gIDxkaXYgI3RvZ2dsZUJhciBjbGFzcz0ibWF0LXNsaWRlLXRvZ2dsZS1iYXIiXG4gICAgICAgW2NsYXNzLm1hdC1zbGlkZS10b2dnbGUtYmFyLW5vLXNpZGUtbWFyZ2luXT0iIWxhYmVsQ29udGVudC50ZXh0Q29udGVudCB8fCAhbGFiZWxDb250ZW50LnRleHRDb250ZW50LnRyaW0oKSI+XG5cbiAgICA8aW5wdXQgI2lucHV0IGNsYXNzPSJtYXQtc2xpZGUtdG9nZ2xlLWlucHV0IGNkay12aXN1YWxseS1oaWRkZW4iIHR5cGU9ImNoZWNrYm94IlxuICAgICAgICAgICByb2xlPSJzd2l0Y2giXG4gICAgICAgICAgIFtpZF09ImlucHV0SWQiXG4gICAgICAgICAgIFtyZXF1aXJlZF09InJlcXVpcmVkIlxuICAgICAgICAgICBbdGFiSW5kZXhdPSJ0YWJJbmRleCJcbiAgICAgICAgICAgW2NoZWNrZWRdPSJjaGVja2VkIlxuICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgW2F0dHIubmFtZV09Im5hbWUiXG4gICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09ImNoZWNrZWQudG9TdHJpbmcoKSJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09ImFyaWFMYWJlbCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT0iYXJpYUxhYmVsbGVkYnkiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPSJhcmlhRGVzY3JpYmVkYnkiXG4gICAgICAgICAgIChjaGFuZ2UpPSJfb25DaGFuZ2VFdmVudCgkZXZlbnQpIlxuICAgICAgICAgICAoY2xpY2spPSJfb25JbnB1dENsaWNrKCRldmVudCkiPlxuXG4gICAgPGRpdiBjbGFzcz0ibWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIiICN0aHVtYkNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC1zbGlkZS10b2dnbGUtdGh1bWIiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXNsaWRlLXRvZ2dsZS1yaXBwbGUgbWF0LWZvY3VzLWluZGljYXRvciIgbWF0LXJpcHBsZVxuICAgICAgICAgICBbbWF0UmlwcGxlVHJpZ2dlcl09ImxhYmVsIlxuICAgICAgICAgICBbbWF0UmlwcGxlRGlzYWJsZWRdPSJkaXNhYmxlUmlwcGxlIHx8IGRpc2FibGVkIlxuICAgICAgICAgICBbbWF0UmlwcGxlQ2VudGVyZWRdPSJ0cnVlIlxuICAgICAgICAgICBbbWF0UmlwcGxlUmFkaXVzXT0iMjAiXG4gICAgICAgICAgIFttYXRSaXBwbGVBbmltYXRpb25dPSJ7ZW50ZXJEdXJhdGlvbjogX25vb3BBbmltYXRpb25zID8gMCA6IDE1MH0iPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9Im1hdC1yaXBwbGUtZWxlbWVudCBtYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxlIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gIDwvZGl2PlxuXG4gIDxzcGFuIGNsYXNzPSJtYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQiICNsYWJlbENvbnRlbnQgKGNka09ic2VydmVDb250ZW50KT0iX29uTGFiZWxUZXh0Q2hhbmdlKCkiPlxuICAgIFx4M2MhLS0gQWRkIGFuIGludmlzaWJsZSBzcGFuIHNvIEpBV1MgY2FuIHJlYWQgdGhlIGxhYmVsIC0tXHgzZVxuICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5Om5vbmUiPiZuYnNwOzwvc3Bhbj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvc3Bhbj5cbjwvbGFiZWw+XG4nLHByb3ZpZGVyczpbYV90XSxpbnB1dHM6WyJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJjb2xvciIsInRhYkluZGV4Il0sZW5jYXBzdWxhdGlvbjpIbi5Ob25lLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2gsc3R5bGVzOlsiLm1hdC1zbGlkZS10b2dnbGV7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjI0cHg7bWF4LXdpZHRoOjEwMCU7bGluZS1oZWlnaHQ6MjRweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDE2cHgsIDAsIDApfVtkaXI9cnRsXSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xNnB4LCAwLCAwKX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtZGlzYWJsZWR7b3BhY2l0eTouMzh9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWRpc2FibGVkIC5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1zbGlkZS10b2dnbGUtbGFiZWx7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2Rpc3BsYXk6ZmxleDtmbGV4OjE7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcn0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ubWF0LXNsaWRlLXRvZ2dsZS1sYWJlbC1iZWZvcmUgLm1hdC1zbGlkZS10b2dnbGUtbGFiZWx7b3JkZXI6MX0ubWF0LXNsaWRlLXRvZ2dsZS1sYWJlbC1iZWZvcmUgLm1hdC1zbGlkZS10b2dnbGUtYmFye29yZGVyOjJ9W2Rpcj1ydGxdIC5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIsLm1hdC1zbGlkZS10b2dnbGUtYmFye21hcmdpbi1yaWdodDo4cHg7bWFyZ2luLWxlZnQ6MH1bZGlyPXJ0bF0gLm1hdC1zbGlkZS10b2dnbGUtYmFyLC5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfS5tYXQtc2xpZGUtdG9nZ2xlLWJhci1uby1zaWRlLW1hcmdpbnttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDt0b3A6LTNweDtsZWZ0OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YWxsIDgwbXMgbGluZWFyO3RyYW5zaXRpb24tcHJvcGVydHk6dHJhbnNmb3JtfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7dHJhbnNpdGlvbjpub25lfVtkaXI9cnRsXSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7bGVmdDphdXRvO3JpZ2h0OjB9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MzZweDtoZWlnaHQ6MTRweDtmbGV4LXNocmluazowO2JvcmRlci1yYWRpdXM6OHB4fS5tYXQtc2xpZGUtdG9nZ2xlLWlucHV0e2JvdHRvbTowO2xlZnQ6MTBweH1bZGlyPXJ0bF0gLm1hdC1zbGlkZS10b2dnbGUtaW5wdXR7bGVmdDphdXRvO3JpZ2h0OjEwcHh9Lm1hdC1zbGlkZS10b2dnbGUtYmFyLC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie3RyYW5zaXRpb246YWxsIDgwbXMgbGluZWFyO3RyYW5zaXRpb24tcHJvcGVydHk6YmFja2dyb3VuZC1jb2xvcjt0cmFuc2l0aW9uLWRlbGF5OjUwbXN9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhciwuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7dHJhbnNpdGlvbjpub25lfS5tYXQtc2xpZGUtdG9nZ2xlIC5tYXQtc2xpZGUtdG9nZ2xlLXJpcHBsZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6Y2FsYyg1MCUgLSAyMHB4KTtsZWZ0OmNhbGMoNTAlIC0gMjBweCk7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweDt6LWluZGV4OjE7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGUpe29wYWNpdHk6LjEyfS5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxle3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dHJhbnNmb3JtOm5vbmV9Lm1hdC1zbGlkZS10b2dnbGUtYmFyOmhvdmVyIC5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6LjA0fS5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWRpc2FibGVkKS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5Oi4xMn0ubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXNsaWRlLXRvZ2dsZS5tYXQtZGlzYWJsZWQgLm1hdC1zbGlkZS10b2dnbGUtYmFyOmhvdmVyIC5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6MH1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtc2xpZGUtdG9nZ2xlLWJhcjpob3ZlciAubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZXtkaXNwbGF5Om5vbmV9fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7Ym9yZGVyOjFweCBzb2xpZH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGUtdG9nZ2xlLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntvdXRsaW5lOjJweCBkb3R0ZWQ7b3V0bGluZS1vZmZzZXQ6NXB4fVxuIl19XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpoZ30se3R5cGU6U0l9LHt0eXBlOlVnfSx7dHlwZTpTdHJpbmcsZGVjb3JhdG9yczpbe3R5cGU6amEsYXJnczpbInRhYmluZGV4Il19XX0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOmtyLGFyZ3M6W29fdF19XX0se3R5cGU6U3RyaW5nLGRlY29yYXRvcnM6W3t0eXBlOlNyfSx7dHlwZTprcixhcmdzOltWUF19XX1dfSkse25hbWU6W3t0eXBlOnh5fV0saWQ6W3t0eXBlOnh5fV0sbGFiZWxQb3NpdGlvbjpbe3R5cGU6eHl9XSxhcmlhTGFiZWw6W3t0eXBlOnh5LGFyZ3M6WyJhcmlhLWxhYmVsIl19XSxhcmlhTGFiZWxsZWRieTpbe3R5cGU6eHksYXJnczpbImFyaWEtbGFiZWxsZWRieSJdfV0sY2hhbmdlOlt7dHlwZTpPeX1dLHRvZ2dsZUNoYW5nZTpbe3R5cGU6T3l9XSxyZXF1aXJlZDpbe3R5cGU6eHl9XSxjaGVja2VkOlt7dHlwZTp4eX1dLF90aHVtYkVsOlt7dHlwZTpaYSxhcmdzOlsidGh1bWJDb250YWluZXIiXX1dLF90aHVtYkJhckVsOlt7dHlwZTpaYSxhcmdzOlsidG9nZ2xlQmFyIl19XSxhcmlhRGVzY3JpYmVkYnk6W3t0eXBlOnh5LGFyZ3M6WyJhcmlhLWRlc2NyaWJlZGJ5Il19XSxfaW5wdXRFbGVtZW50Olt7dHlwZTpaYSxhcmdzOlsiaW5wdXQiXX1dfSk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjb25zdCBjX3Q9e3Byb3ZpZGU6R1YsdXNlRXhpc3Rpbmc6cWUoKCgpPT5kX3QpKSxtdWx0aTohMH07Y2xhc3MgZF90IGV4dGVuZHMgS1V7fWRfdC7JtWZhYz0oZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24gZShuKXtyZXR1cm4odHx8KHQ9QWEoZF90KSkpKG58fGRfdCl9fSkoKSxkX3QuybVkaXI9bG8oe3R5cGU6ZF90LHNlbGVjdG9yczpbWyJtYXQtc2xpZGUtdG9nZ2xlIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIm1hdC1zbGlkZS10b2dnbGUiLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJtYXQtc2xpZGUtdG9nZ2xlIiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGZlYXR1cmVzOltwZyhbY190XSkseHBdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChkX3QsW3t0eXBlOkN5LGFyZ3M6W3tzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSxcbiAgICAgICAgICAgICBtYXQtc2xpZGUtdG9nZ2xlW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sIG1hdC1zbGlkZS10b2dnbGVbcmVxdWlyZWRdW25nTW9kZWxdIixwcm92aWRlcnM6W2NfdF19XX1dLG51bGwsbnVsbCk7Ci8qKgogICAgICogQGxpY2Vuc2UKICAgICAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgKgogICAgICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICAgICAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2UKICAgICAqLwpjbGFzcyBwX3R7fXBfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cF90KX0scF90Lsm1bW9kPWFvKHt0eXBlOnBfdH0pLHBfdC7JtWluaj12bih7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChwX3QsW3t0eXBlOkF5LGFyZ3M6W3tleHBvcnRzOltkX3RdLGRlY2xhcmF0aW9uczpbZF90XX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKHBfdCx7ZGVjbGFyYXRpb25zOltkX3RdLGV4cG9ydHM6W2RfdF19KTtjbGFzcyBtX3R7fWZ1bmN0aW9uIHVfdCh0LGUpezEmdCYmVG0oMCwibWF0LWljb24iLDMpfW1fdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bV90KX0sbV90Lsm1bW9kPWFvKHt0eXBlOm1fdH0pLG1fdC7JtWluaj12bih7aW1wb3J0czpbW3BfdCxTSCxYSSxVel0scF90LFhJXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgobV90LFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbcF90LFNILFhJLFV6XSxleHBvcnRzOltwX3QsbF90LFhJXSxkZWNsYXJhdGlvbnM6W2xfdF19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhtX3Qse2RlY2xhcmF0aW9uczpmdW5jdGlvbigpe3JldHVybltsX3RdfSxpbXBvcnRzOmZ1bmN0aW9uKCl7cmV0dXJuW3BfdCxTSCxYSSxVel19LGV4cG9ydHM6ZnVuY3Rpb24oKXtyZXR1cm5bcF90LGxfdCxYSV19fSk7Y2xhc3MgZl90e2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U9bmV3IExofX1mX3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGZfdCl9LGZfdC7JtWNtcD10byh7dHlwZTpmX3Qsc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtc2VhcmNoLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MiZlJiZwdSgidmFsaWQiLG4uaXNSZWdleEZpbHRlclZhbGlkKX0saW5wdXRzOntyZWdleEZpbHRlclZhbHVlOiJyZWdleEZpbHRlclZhbHVlIixpc1JlZ2V4RmlsdGVyVmFsaWQ6ImlzUmVnZXhGaWx0ZXJWYWxpZCJ9LG91dHB1dHM6e29uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZToib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbInN2Z0ljb24iLCJzZWFyY2hfMjRweCJdLFsiYXV0b2NvbXBsZXRlIiwib2ZmIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgQW5ub3RhdGlvbnMiLDMsInZhbHVlIiwiaW5wdXQiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwiY2xhc3MiLCJlcnJvci1pY29uIiwibWF0VG9vbHRpcCIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDQsIm5nSWYiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwibWF0VG9vbHRpcCIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDEsImVycm9yLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFRtKDAsIm1hdC1pY29uIiwwKSxSbSgxLCJpbnB1dCIsMSksVm0oImlucHV0IiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChlLnRhcmdldC52YWx1ZSl9KSksQW0oKSxRcCgyLHVfdCwxLDAsIm1hdC1pY29uIiwyKSksMiZlJiYocmMoMSksRG0oInZhbHVlIixuLnJlZ2V4RmlsdGVyVmFsdWUpLHJjKDEpLERtKCJuZ0lmIiwhbi5pc1JlZ2V4RmlsdGVyVmFsaWQpKX0sZGlyZWN0aXZlczpbRFcsZE1dLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCl7Y29sb3I6I2M2MjgyOH1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpICAgLmVycm9yLWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNjNjI4Mjg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoZl90LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im5wbWktYW5ub3RhdGlvbnMtc2VhcmNoLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vYW5ub3RhdGlvbnNfc2VhcmNoX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL2Fubm90YXRpb25zX3NlYXJjaF9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sbnVsbCx7cmVnZXhGaWx0ZXJWYWx1ZTpbe3R5cGU6eHl9XSxvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U6W3t0eXBlOk95fV0saXNSZWdleEZpbHRlclZhbGlkOlt7dHlwZTpQeSxhcmdzOlsiY2xhc3MudmFsaWQiXX0se3R5cGU6eHl9XX0pO2NsYXNzIGdfdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5hbm5vdGF0aW9uc0ZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QobWJ0KSx0aGlzLmlzQW5ub3RhdGlvbnNGaWx0ZXJWYWxpZCQ9dGhpcy5hbm5vdGF0aW9uc0ZpbHRlciQucGlwZShJdCgodD0+e3RyeXtyZXR1cm4gbmV3IFJlZ0V4cCh0KSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KSkpfWZpbHRlckNoYW5nZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKElidCh7cmVnZXg6dH0pKX19ZnVuY3Rpb24gaF90KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Tm0oMCksUm0oMSwiYnV0dG9uIiw1KSxWbSgiY2xpY2siLChmdW5jdGlvbiBlKCl7aGkodCk7Y29uc3Qgbj1ZbSgpO3JldHVybiBuLm9uRmxhZ0Fubm90YXRpb25zLmVtaXQobi5zZWxlY3RlZEFubm90YXRpb25zKX0pKSxUbSgyLCJtYXQtaWNvbiIsNiksQW0oKSxSbSgzLCJidXR0b24iLDcpLFZtKCJjbGljayIsKGZ1bmN0aW9uIGUoKXtoaSh0KTtjb25zdCBuPVltKCk7cmV0dXJuIG4ub25IaWRlQW5ub3RhdGlvbnMuZW1pdChuLnNlbGVjdGVkQW5ub3RhdGlvbnMpfSkpLFRtKDQsIm1hdC1pY29uIiw4KSxBbSgpLHptKCl9aWYoMiZ0KXtjb25zdCB0PVltKCk7cmMoMSksRG0oImRpc2FibGVkIiwwPT09dC5zZWxlY3RlZEFubm90YXRpb25zLmxlbmd0aCkscmMoMiksRG0oImRpc2FibGVkIiwwPT09dC5zZWxlY3RlZEFubm90YXRpb25zLmxlbmd0aCl9fWZ1bmN0aW9uIGJfdCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO05tKDApLFJtKDEsIm1hdC1zbGlkZS10b2dnbGUiLDkpLFZtKCJjaGFuZ2UiLChmdW5jdGlvbiBlKCl7cmV0dXJuIGhpKHQpLFltKCkub25Ub2dnbGVTaG93Q291bnRzLmVtaXQoKX0pKSxrdSgyLCIgU2FtcGxlIENvdW50ICIpLEFtKCksUm0oMywibWF0LXNsaWRlLXRvZ2dsZSIsMTApLFZtKCJjaGFuZ2UiLChmdW5jdGlvbiBlKCl7cmV0dXJuIGhpKHQpLFltKCkub25Ub2dnbGVTaG93SGlkZGVuLmVtaXQoKX0pKSxrdSg0LCIgU2hvdyBIaWRkZW4gIiksQW0oKSxUbSg1LCJucG1pLWFubm90YXRpb25zLXNlYXJjaCIpLHptKCl9aWYoMiZ0KXtjb25zdCB0PVltKCk7cmMoMSksRG0oImNoZWNrZWQiLHQuc2hvd0NvdW50cykscmMoMiksRG0oImNoZWNrZWQiLHQuc2hvd0hpZGRlbil9fWdfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Z190KShTbShJdykpfSxnX3QuybVjbXA9dG8oe3R5cGU6Z190LHNlbGVjdG9yczpbWyJucG1pLWFubm90YXRpb25zLXNlYXJjaCJdXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJyZWdleEZpbHRlclZhbHVlIiwiaXNSZWdleEZpbHRlclZhbGlkIiwib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJucG1pLWFubm90YXRpb25zLXNlYXJjaC1jb21wb25lbnQiLDApLFZtKCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmZpbHRlckNoYW5nZShlKX0pKSxBaCgxLCJhc3luYyIpLEFoKDIsImFzeW5jIiksQW0oKSksMiZlJiZEbSgicmVnZXhGaWx0ZXJWYWx1ZSIsVGgoMSwyLG4uYW5ub3RhdGlvbnNGaWx0ZXIkKSkoImlzUmVnZXhGaWx0ZXJWYWxpZCIsVGgoMiw0LG4uaXNBbm5vdGF0aW9uc0ZpbHRlclZhbGlkJCkpfSxkaXJlY3RpdmVzOltmX3RdLHBpcGVzOlt3TV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChnX3QsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1hbm5vdGF0aW9ucy1zZWFyY2giLHRlbXBsYXRlOidcbiAgICA8bnBtaS1hbm5vdGF0aW9ucy1zZWFyY2gtY29tcG9uZW50XG4gICAgICBbcmVnZXhGaWx0ZXJWYWx1ZV09ImFubm90YXRpb25zRmlsdGVyJCB8IGFzeW5jIlxuICAgICAgW2lzUmVnZXhGaWx0ZXJWYWxpZF09ImlzQW5ub3RhdGlvbnNGaWx0ZXJWYWxpZCQgfCBhc3luYyJcbiAgICAgIChvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UpPSJmaWx0ZXJDaGFuZ2UoJGV2ZW50KSJcbiAgICA+PC9ucG1pLWFubm90YXRpb25zLXNlYXJjaC1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fV19KSxudWxsKTtjbGFzcyB5X3R7Y29uc3RydWN0b3IoKXt0aGlzLm9uRmxhZ0Fubm90YXRpb25zPW5ldyBMaCx0aGlzLm9uSGlkZUFubm90YXRpb25zPW5ldyBMaCx0aGlzLm9uVG9nZ2xlRXhwYW5kZWQ9bmV3IExoLHRoaXMub25Ub2dnbGVTaG93Q291bnRzPW5ldyBMaCx0aGlzLm9uVG9nZ2xlU2hvd0hpZGRlbj1uZXcgTGh9fXlfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8eV90KX0seV90Lsm1Y21wPXRvKHt0eXBlOnlfdCxzZWxlY3RvcnM6W1sibnBtaS1hbm5vdGF0aW9ucy1saXN0LXRvb2xiYXItY29tcG9uZW50Il1dLGlucHV0czp7bnVtQW5ub3RhdGlvbnM6Im51bUFubm90YXRpb25zIixleHBhbmRlZDoiZXhwYW5kZWQiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMiLGFubm90YXRpb25zRXhwYW5kZWQ6ImFubm90YXRpb25zRXhwYW5kZWQiLHNob3dDb3VudHM6InNob3dDb3VudHMiLHNob3dIaWRkZW46InNob3dIaWRkZW4ifSxvdXRwdXRzOntvbkZsYWdBbm5vdGF0aW9uczoib25GbGFnQW5ub3RhdGlvbnMiLG9uSGlkZUFubm90YXRpb25zOiJvbkhpZGVBbm5vdGF0aW9ucyIsb25Ub2dnbGVFeHBhbmRlZDoib25Ub2dnbGVFeHBhbmRlZCIsb25Ub2dnbGVTaG93Q291bnRzOiJvblRvZ2dsZVNob3dDb3VudHMiLG9uVG9nZ2xlU2hvd0hpZGRlbjoib25Ub2dnbGVTaG93SGlkZGVuIn0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZSxuO3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJIaWRlcy9TaG93cyB0aGUgQW5ub3RhdGlvbnMgTGlzdCIpOiRsb2NhbGl6ZWA6TGFiZWwgZm9yIGEgYnV0dG9uIHRoYXQgaGlkZXMvc2hvd3MgdGhlIGFubm90YXRpb25zIGxpc3Qu4pCfYjM2MDNiYTMzZTUzMDhkZDhjNWU4MDVlNTA4YjJmNzIzM2RmODlkNOKQnzczMzYzNzQ0MTMwNTYzNDI0OTI6SGlkZXMvU2hvd3MgdGhlIEFubm90YXRpb25zIExpc3RgLGU9InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIkZsYWcgU2VsZWN0ZWQgQW5ub3RhdGlvbnMiKTokbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IGZsYWdzIHNlbGVjdGVkIGFubm90YXRpb25zLuKQnzU2OTJhZDg4MzEwMzhhOTBjNTg2M2ExZTlhZGY5NzQ4Y2FjM2NhZDjikJ8yMjQ0MDk5ODkxMzEzMzM2NTk1OkZsYWcgU2VsZWN0ZWQgQW5ub3RhdGlvbnNgLG49InVuZGVmaW5lZCIhPXR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSYmbmdJMThuQ2xvc3VyZU1vZGU/Z29vZy5nZXRNc2coIkhpZGUgU2VsZWN0ZWQgQW5ub3RhdGlvbnMiKTokbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IGhpZGVzIHNlbGVjdGVkIGFubm90YXRpb25zLuKQnzAzNDJjZGIzMzU4ZmE4ZTNmYTI3MjIwYTgyNThhNzI4NzQzMGI3MGbikJ81NDYyODMyMzkxMDkyMDg3NDg1OkhpZGUgU2VsZWN0ZWQgQW5ub3RhdGlvbnNgLFtbMSwiYW5ub3RhdGlvbnMtdGl0bGUtY29udGFpbmVyIl0sWzEsImFubm90YXRpb25zLXRpdGxlIl0sWzQsIm5nSWYiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwiZXhwYW5kLWJ1dHRvbiIsMywiY2xpY2siXSxbMywic3ZnSWNvbiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwidGl0bGUiLCJGbGFnZ2luZyBhbm5vdGF0aW9ucyBhZGRzIHRoZW0gdG8geW91ciBpbnZlc3RpZ2F0aW9uIHJlc3VsdHMsIHdoaWNoIGNhbiBsYXRlciBiZSBleHBvcnRlZC4iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJmbGFnXzI0cHgiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLG4sInRpdGxlIiwiUmVtb3Zpbmcgbm9uLWNyaXRpY2FsIGFubm90YXRpb25zIHVuY2x1dHRlcnMgdGhlIHZpZXcuIFJlbW92ZWQgYW5ub3RhdGlvbnMgYXJlIHJlbW92ZWQgZnJvbSBhbGwgdmlzdWFsaXphdGlvbnMuIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzdmdJY29uIiwidmlzaWJpbGl0eV9vZmZfMjRweCJdLFsidGl0bGUiLCJIaWRlcyBhbmQgc2hvd3MgdGhlIHNhbXBsZSBjb3VudCB3aGVyZSBhcHBsaWNhYmxlIChob3cgbWFueSBzYW1wbGVzIGJlbG9uZyB0byBhIGNhdGVnb3J5KS4iLDEsInNob3ctdG9nZ2xlIiwzLCJjaGVja2VkIiwiY2hhbmdlIl0sWyJ0aXRsZSIsIkhpZGVzIGFuZCBzaG93cyBoaWRkZW4gYW5ub3RhdGlvbnMgaW4gYWxsIHZpc3VhbGl6YXRpb25zLiIsMSwic2hvdy10b2dnbGUiLDMsImNoZWNrZWQiLCJjaGFuZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJkaXYiLDApLFJtKDEsImgzIiwxKSxrdSgyKSxBbSgpLFFwKDMsaF90LDUsMiwibmctY29udGFpbmVyIiwyKSxBbSgpLFFwKDQsYl90LDYsMiwibmctY29udGFpbmVyIiwyKSxSbSg1LCJidXR0b24iLDMpLFZtKCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblRvZ2dsZUV4cGFuZGVkLmVtaXQoKX0pKSxUbSg2LCJtYXQtaWNvbiIsNCksQW0oKSksMiZlJiYocmMoMiksRHUoIkFubm90YXRpb25zICgiLG4ubnVtQW5ub3RhdGlvbnMsIikiKSxyYygxKSxEbSgibmdJZiIsbi5leHBhbmRlZCkscmMoMSksRG0oIm5nSWYiLG4uZXhwYW5kZWQpLHJjKDIpLERtKCJzdmdJY29uIixuLmV4cGFuZGVkPyJleHBhbmRfbGVzc18yNHB4IjoiZXhwYW5kX21vcmVfMjRweCIpKX0sZGlyZWN0aXZlczpbZE0sWEgsRFcsbF90LGdfdF0sc3R5bGVzOlsnLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1iYWRnZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweH0ubWF0LWgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1oZWFkbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3ViaGVhZGluZy0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDZbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0xW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS00W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0xW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcmFpc2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0cm9rZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mbGF0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmFiW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1taW5pLWZhYltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoZWNrYm94LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2hpcFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweH0ubWF0LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9vdGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjI4MTI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdGVwcGVyLWhvcml6b250YWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10YWItbGlua1tfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgaDZbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW5lc3RlZC10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemVbX25nY29udGVudC0lQ09NUCVde3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0e31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHt9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9W19uZ2hvc3QtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7cGFkZGluZzowIDE2cHg7d2lkdGg6MTAwJX0uYW5ub3RhdGlvbnMtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZTouOWVtO2ZvbnQtd2VpZ2h0OjUwMDtwYWRkaW5nLXJpZ2h0OjEwcHh9LmFubm90YXRpb25zLXRpdGxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6bm93cmFwO2ZsZXg6MSAxO2hlaWdodDo0MnB4fS5zaG93LXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45ZW07bWFyZ2luLXJpZ2h0Oi44ZW19J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHlfdCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJucG1pLWFubm90YXRpb25zLWxpc3QtdG9vbGJhci1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL2Fubm90YXRpb25zX2xpc3RfdG9vbGJhcl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9hbm5vdGF0aW9uc19saXN0X3Rvb2xiYXJfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwse251bUFubm90YXRpb25zOlt7dHlwZTp4eX1dLGV4cGFuZGVkOlt7dHlwZTp4eX1dLHNlbGVjdGVkQW5ub3RhdGlvbnM6W3t0eXBlOnh5fV0sYW5ub3RhdGlvbnNFeHBhbmRlZDpbe3R5cGU6eHl9XSxzaG93Q291bnRzOlt7dHlwZTp4eX1dLHNob3dIaWRkZW46W3t0eXBlOnh5fV0sb25GbGFnQW5ub3RhdGlvbnM6W3t0eXBlOk95fV0sb25IaWRlQW5ub3RhdGlvbnM6W3t0eXBlOk95fV0sb25Ub2dnbGVFeHBhbmRlZDpbe3R5cGU6T3l9XSxvblRvZ2dsZVNob3dDb3VudHM6W3t0eXBlOk95fV0sb25Ub2dnbGVTaG93SGlkZGVuOlt7dHlwZTpPeX1dfSk7Y2xhc3MgX190e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLnNlbGVjdGVkQW5ub3RhdGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KGNidCksdGhpcy5hbm5vdGF0aW9uc0V4cGFuZGVkJD10aGlzLnN0b3JlLnNlbGVjdCh5YnQpLHRoaXMuc2hvd0NvdW50cyQ9dGhpcy5zdG9yZS5zZWxlY3QoQ2J0KSx0aGlzLnNob3dIaWRkZW4kPXRoaXMuc3RvcmUuc2VsZWN0KE1idCksdGhpcy5hbm5vdGF0aW9uc0ZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QobWJ0KSx0aGlzLmlzQW5ub3RhdGlvbnNGaWx0ZXJWYWxpZCQ9dGhpcy5hbm5vdGF0aW9uc0ZpbHRlciQucGlwZShJdCgodD0+e3RyeXtyZXR1cm4gQm9vbGVhbihuZXcgUmVnRXhwKHQpKX1jYXRjaCh0KXtyZXR1cm4hMX19KSkpfWZpbHRlckNoYW5nZSh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKElidCh7cmVnZXg6dH0pKX1mbGFnQW5ub3RhdGlvbnModCl7dGhpcy5zdG9yZS5kaXNwYXRjaChOYnQoe2Fubm90YXRpb25zOnR9KSl9aGlkZUFubm90YXRpb25zKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goemJ0KHthbm5vdGF0aW9uczp0fSkpfXRvZ2dsZUV4cGFuZGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChHYnQoKSl9dG9nZ2xlU2hvd0NvdW50cygpe3RoaXMuc3RvcmUuZGlzcGF0Y2goWWJ0KCkpfXRvZ2dsZVNob3dIaWRkZW4oKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHFidCgpKX19X190Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxfX3QpKFNtKEl3KSl9LF9fdC7JtWNtcD10byh7dHlwZTpfX3Qsc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtbGlzdC10b29sYmFyIl1dLGlucHV0czp7bnVtQW5ub3RhdGlvbnM6Im51bUFubm90YXRpb25zIixleHBhbmRlZDoiZXhwYW5kZWQifSxkZWNsczo1LHZhcnM6MTQsY29uc3RzOltbMywibnVtQW5ub3RhdGlvbnMiLCJleHBhbmRlZCIsInNlbGVjdGVkQW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uc0V4cGFuZGVkIiwic2hvd0NvdW50cyIsInNob3dIaWRkZW4iLCJvbkZsYWdBbm5vdGF0aW9ucyIsIm9uSGlkZUFubm90YXRpb25zIiwib25Ub2dnbGVFeHBhbmRlZCIsIm9uVG9nZ2xlU2hvd0NvdW50cyIsIm9uVG9nZ2xlU2hvd0hpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwibnBtaS1hbm5vdGF0aW9ucy1saXN0LXRvb2xiYXItY29tcG9uZW50IiwwKSxWbSgib25GbGFnQW5ub3RhdGlvbnMiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmZsYWdBbm5vdGF0aW9ucyhlKX0pKSgib25IaWRlQW5ub3RhdGlvbnMiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmhpZGVBbm5vdGF0aW9ucyhlKX0pKSgib25Ub2dnbGVFeHBhbmRlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi50b2dnbGVFeHBhbmRlZCgpfSkpKCJvblRvZ2dsZVNob3dDb3VudHMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4udG9nZ2xlU2hvd0NvdW50cygpfSkpKCJvblRvZ2dsZVNob3dIaWRkZW4iLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4udG9nZ2xlU2hvd0hpZGRlbigpfSkpLEFoKDEsImFzeW5jIiksQWgoMiwiYXN5bmMiKSxBaCgzLCJhc3luYyIpLEFoKDQsImFzeW5jIiksQW0oKSksMiZlJiZEbSgibnVtQW5ub3RhdGlvbnMiLG4ubnVtQW5ub3RhdGlvbnMpKCJleHBhbmRlZCIsbi5leHBhbmRlZCkoInNlbGVjdGVkQW5ub3RhdGlvbnMiLFRoKDEsNixuLnNlbGVjdGVkQW5ub3RhdGlvbnMkKSkoImFubm90YXRpb25zRXhwYW5kZWQiLFRoKDIsOCxuLmFubm90YXRpb25zRXhwYW5kZWQkKSkoInNob3dDb3VudHMiLFRoKDMsMTAsbi5zaG93Q291bnRzJCkpKCJzaG93SGlkZGVuIixUaCg0LDEyLG4uc2hvd0hpZGRlbiQpKX0sZGlyZWN0aXZlczpbeV90XSxwaXBlczpbd01dLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoX190LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im5wbWktYW5ub3RhdGlvbnMtbGlzdC10b29sYmFyIix0ZW1wbGF0ZTonXG4gICAgPG5wbWktYW5ub3RhdGlvbnMtbGlzdC10b29sYmFyLWNvbXBvbmVudFxuICAgICAgW251bUFubm90YXRpb25zXT0ibnVtQW5ub3RhdGlvbnMiXG4gICAgICBbZXhwYW5kZWRdPSJleHBhbmRlZCJcbiAgICAgIFtzZWxlY3RlZEFubm90YXRpb25zXT0ic2VsZWN0ZWRBbm5vdGF0aW9ucyQgfCBhc3luYyJcbiAgICAgIFthbm5vdGF0aW9uc0V4cGFuZGVkXT0iYW5ub3RhdGlvbnNFeHBhbmRlZCQgfCBhc3luYyJcbiAgICAgIFtzaG93Q291bnRzXT0ic2hvd0NvdW50cyQgfCBhc3luYyJcbiAgICAgIFtzaG93SGlkZGVuXT0ic2hvd0hpZGRlbiQgfCBhc3luYyJcbiAgICAgIChvbkZsYWdBbm5vdGF0aW9ucyk9ImZsYWdBbm5vdGF0aW9ucygkZXZlbnQpIlxuICAgICAgKG9uSGlkZUFubm90YXRpb25zKT0iaGlkZUFubm90YXRpb25zKCRldmVudCkiXG4gICAgICAob25Ub2dnbGVFeHBhbmRlZCk9InRvZ2dsZUV4cGFuZGVkKCkiXG4gICAgICAob25Ub2dnbGVTaG93Q291bnRzKT0idG9nZ2xlU2hvd0NvdW50cygpIlxuICAgICAgKG9uVG9nZ2xlU2hvd0hpZGRlbik9InRvZ2dsZVNob3dIaWRkZW4oKSJcbiAgICA+PC9ucG1pLWFubm90YXRpb25zLWxpc3QtdG9vbGJhci1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fV19KSx7bnVtQW5ub3RhdGlvbnM6W3t0eXBlOnh5fV0sZXhwYW5kZWQ6W3t0eXBlOnh5fV19KTtjb25zdCBDX3Q9WyJnbHlwaCJdO2NsYXNzIE1fdHtuZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN2Zz1KNCh0aGlzLmdseXBoU1ZHLm5hdGl2ZUVsZW1lbnQpLHRoaXMubWFpbkNvbnRhaW5lcj10aGlzLnN2Zy5hcHBlbmQoImciKSx0aGlzLmRyYXcoKX1kcmF3KCl7ImNpcmNsZSI9PXRoaXMuc2hhcGU/dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiZmlsbCIsdGhpcy5jb2xvcikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJjeCIsNSkuYXR0cigiY3kiLDUpLmF0dHIoInIiLDUpOiJiYXIiPT10aGlzLnNoYXBlP3RoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoInJlY3QiKS5hdHRyKCJmaWxsIix0aGlzLmNvbG9yKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsMTApLmF0dHIoImhlaWdodCIsMTApOiJydW5JbmRpY2F0b3IiPT10aGlzLnNoYXBlJiZ0aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsdGhpcy5jb2xvcikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJkIiwiTSAyIDAgTCAxMCAwIEwgNyA1IEwgMTAgMTAgTCAyIDEwIFoiKX19TV90Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxNX3QpfSxNX3QuybVjbXA9dG8oe3R5cGU6TV90LHNlbGVjdG9yczpbWyJucG1pLWxlZ2VuZC1lbGVtZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiZRaChDX3QsNyxoZyksMiZlKXtsZXQgdDtKaCh0PXRiKCkpJiYobi5nbHlwaFNWRz10LmZpcnN0KX19LGlucHV0czp7dGV4dDoidGV4dCIsY29sb3I6ImNvbG9yIixzaGFwZToic2hhcGUifSxkZWNsczo0LHZhcnM6MSxjb25zdHM6W1sxLCJnbHlwaCJdLFsiZ2x5cGgiLCIiXSxbMSwibGVnZW5kLWVsZW1lbnQtdGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHFpKCksVG0oMCwic3ZnIiwwLDEpLFppKCksUm0oMiwiZGl2IiwyKSxrdSgzKSxBbSgpKSwyJmUmJihyYygzKSxTdShuLnRleHQpKX0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O3BhZGRpbmctcmlnaHQ6MTBweH0ubGVnZW5kLWVsZW1lbnQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOGVtO3BhZGRpbmctbGVmdDo1cHh9LmdseXBoW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMHB4O2hlaWdodDoxMHB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChNX3QsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1sZWdlbmQtZWxlbWVudCIsdGVtcGxhdGVVcmw6Ii4vbGVnZW5kX2VsZW1lbnRfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vbGVnZW5kX2VsZW1lbnRfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwse3RleHQ6W3t0eXBlOnh5fV0sY29sb3I6W3t0eXBlOnh5fV0sc2hhcGU6W3t0eXBlOnh5fV0sZ2x5cGhTVkc6W3t0eXBlOlphLGFyZ3M6WyJnbHlwaCIse3N0YXRpYzohMCxyZWFkOmhnfV19XX0pO2NsYXNzIHZfdHt9ZnVuY3Rpb24geF90KHQsZSl7aWYoMSZ0JiZUbSgwLCJtYXQtaWNvbiIsOCksMiZ0KXtjb25zdCB0PVltKDIpO0RtKCJzdmdJY29uIix0LnNvcnQub3JkZXI9PT10LlNvcnRPcmRlci5ERVNDRU5ESU5HPyJhcnJvd19kb3dud2FyZF8yNHB4IjoiYXJyb3dfdXB3YXJkXzI0cHgiKSgibmdDbGFzcyIsdC5zb3J0Lm9yZGVyPT09dC5Tb3J0T3JkZXIuREVTQ0VORElORz8iZG93bi1pY29uIjoidXAtaWNvbiIpfX1mdW5jdGlvbiBPX3QodCxlKXtpZigxJnQpe2NvbnN0IHQ9SG0oKTtSbSgwLCJkaXYiLDQpLFJtKDEsImRpdiIsNSksUm0oMiwiZGl2Iiw2KSxWbSgiY2xpY2siLChmdW5jdGlvbiBlKCl7Y29uc3Qgbj1oaSh0KS4kaW1wbGljaXQ7cmV0dXJuIFltKCkub25DaGFuZ2VTb3J0LmVtaXQobil9KSksa3UoMyksUXAoNCx4X3QsMSwyLCJtYXQtaWNvbiIsNyksQW0oKSxBbSgpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49WW0oKTtyYygzKSxEdSgiICIsbi5zdHJpcE1ldHJpYyh0KSwiICIpLHJjKDEpLERtKCJuZ0lmIix0PT09bi5zb3J0Lm1ldHJpYyl9fXZfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8dl90KX0sdl90Lsm1Y21wPXRvKHt0eXBlOnZfdCxzZWxlY3RvcnM6W1sibnBtaS1hbm5vdGF0aW9ucy1saXN0LWxlZ2VuZCJdXSxkZWNsczo0LHZhcnM6MCxjb25zdHM6W1sidGV4dCIsInJ1biBpbmRpY2F0b3IiLCJjb2xvciIsInJnYigwLDAsMCkiLCJzaGFwZSIsInJ1bkluZGljYXRvciJdLFsidGV4dCIsInBvc2l0aXZlIGNvcnJlbGF0aW9uIiwiY29sb3IiLCJyZ2IoMTA5LCAxNzQsIDIxMykiLCJzaGFwZSIsImJhciJdLFsidGV4dCIsIm5lZ2F0aXZlIGNvcnJlbGF0aW9uIiwiY29sb3IiLCJyZ2IoMjQ5LCAxMDUsIDc2KSIsInNoYXBlIiwiYmFyIl0sWyJ0ZXh0Iiwic2FtcGxlIGNvdW50IiwiY29sb3IiLCJyZ2IoMTUxLCAxNTEsIDE1MSkiLCJzaGFwZSIsImNpcmNsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVG0oMCwibnBtaS1sZWdlbmQtZWxlbWVudCIsMCksVG0oMSwibnBtaS1sZWdlbmQtZWxlbWVudCIsMSksVG0oMiwibnBtaS1sZWdlbmQtZWxlbWVudCIsMiksVG0oMywibnBtaS1sZWdlbmQtZWxlbWVudCIsMykpfSxkaXJlY3RpdmVzOltNX3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O3BhZGRpbmc6MCAxNnB4fSJdfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh2X3QsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1hbm5vdGF0aW9ucy1saXN0LWxlZ2VuZCIsdGVtcGxhdGVVcmw6Ii4vbGVnZW5kX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL2xlZ2VuZF9jb21wb25lbnQuY3NzIl19XX1dLG51bGwsbnVsbCk7Y2xhc3MgUF90e2NvbnN0cnVjdG9yKCl7dGhpcy5vbkNoYW5nZVNvcnQ9bmV3IExoLHRoaXMub25BbGxBbm5vdGF0aW9uc1RvZ2dsZWQ9bmV3IExoLHRoaXMuU29ydE9yZGVyPW5idH1zdHJpcE1ldHJpYyh0KXtyZXR1cm4gbnl0KHQpfX1QX3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFBfdCl9LFBfdC7JtWNtcD10byh7dHlwZTpQX3Qsc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtbGlzdC1oZWFkZXItY29tcG9uZW50Il1dLGlucHV0czp7bnVtQW5ub3RhdGlvbnM6Im51bUFubm90YXRpb25zIixzZWxlY3RlZEFubm90YXRpb25zOiJzZWxlY3RlZEFubm90YXRpb25zIixhY3RpdmVNZXRyaWNzOiJhY3RpdmVNZXRyaWNzIixzb3J0OiJzb3J0In0sb3V0cHV0czp7b25DaGFuZ2VTb3J0OiJvbkNoYW5nZVNvcnQiLG9uQWxsQW5ub3RhdGlvbnNUb2dnbGVkOiJvbkFsbEFubm90YXRpb25zVG9nZ2xlZCJ9LGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsInRvZ2dsZS1hbGwtY29udGFpbmVyIl0sWzMsImNoZWNrZWQiLCJjaGFuZ2UiXSxbMSwiYW5ub3RhdGlvbnMtaGVhZGVyLWNvbnRhaW5lcnMiXSxbImNsYXNzIiwiaGVhZGVyLWNvbHVtbiIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImhlYWRlci1jb2x1bW4iXSxbMSwiaGVhZGVyLWNvbnRhaW5lciJdLFsidGFiaW5kZXgiLCIwIiwicm9sZSIsImJ1dHRvbiIsInRpdGxlIiwiQ2hhbmdlIHRoZSBzb3J0IGJ5IGNsaWNraW5nIGFueSBvZiB0aGUgbWV0cmljcy4iLDEsImhlYWRlci1jbGlja2FibGUiLDMsImNsaWNrIl0sWyJjbGFzcyIsInNvcnQtaWNvbiIsMywic3ZnSWNvbiIsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbMSwic29ydC1pY29uIiwzLCJzdmdJY29uIiwibmdDbGFzcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiZGl2IiwwKSxSbSgxLCJtYXQtY2hlY2tib3giLDEpLFZtKCJjaGFuZ2UiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uQWxsQW5ub3RhdGlvbnNUb2dnbGVkLmVtaXQoZS5jaGVja2VkKX0pKSxBbSgpLEFtKCksUm0oMiwiZGl2IiwyKSxRcCgzLE9fdCw1LDIsImRpdiIsMyksQW0oKSksMiZlJiYocmMoMSksRG0oImNoZWNrZWQiLG4uc2VsZWN0ZWRBbm5vdGF0aW9ucy5sZW5ndGg9PT1uLm51bUFubm90YXRpb25zKSxyYygyKSxEbSgibmdGb3JPZiIsbi5hY3RpdmVNZXRyaWNzKSl9LGRpcmVjdGl2ZXM6W09ZLGxNLGRNLERXLGFNXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2hlaWdodDoyOHB4O2FsaWduLWl0ZW1zOmZsZXgtZW5kO21hcmdpbi10b3A6OHB4fS5hbm5vdGF0aW9ucy1oZWFkZXItY29udGFpbmVyc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZTouOWVtO2ZvbnQtd2VpZ2h0OjUwMDtmbGV4LWdyb3c6MX0uaGVhZGVyLWNvbHVtbltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDF9LmhlYWRlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5oZWFkZXItY2xpY2thYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7b3V0bGluZTpub25lfS50b2dnbGUtYWxsLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MTBweDt3aWR0aDo5MHB4fS5zb3J0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxNnB4fSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChQX3QsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1hbm5vdGF0aW9ucy1saXN0LWhlYWRlci1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL2hlYWRlcl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9oZWFkZXJfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwse251bUFubm90YXRpb25zOlt7dHlwZTp4eX1dLHNlbGVjdGVkQW5ub3RhdGlvbnM6W3t0eXBlOnh5fV0sYWN0aXZlTWV0cmljczpbe3R5cGU6eHl9XSxzb3J0Olt7dHlwZTp4eX1dLG9uQ2hhbmdlU29ydDpbe3R5cGU6T3l9XSxvbkFsbEFubm90YXRpb25zVG9nZ2xlZDpbe3R5cGU6T3l9XX0pO2NsYXNzIHdfdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5zZWxlY3RlZEFubm90YXRpb25zJD10aGlzLnN0b3JlLnNlbGVjdChjYnQpLHRoaXMuYW5ub3RhdGlvblNvcnQkPXRoaXMuc3RvcmUuc2VsZWN0KGhidCl9Y2hhbmdlU29ydCh0KXt0aGlzLnN0b3JlLmRpc3BhdGNoKFZidCh7bWV0cmljOnR9KSl9YWxsQW5ub3RhdGlvbnNUb2dnbGVkKHQpe3RoaXMuc3RvcmUuZGlzcGF0Y2goQWJ0KHQ/e2Fubm90YXRpb25zOk9iamVjdC5rZXlzKHRoaXMuYW5ub3RhdGlvbnMpfTp7YW5ub3RhdGlvbnM6W119KSl9fXdfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8d190KShTbShJdykpfSx3X3QuybVjbXA9dG8oe3R5cGU6d190LHNlbGVjdG9yczpbWyJucG1pLWFubm90YXRpb25zLWxpc3QtaGVhZGVyIl1dLGlucHV0czp7bnVtQW5ub3RhdGlvbnM6Im51bUFubm90YXRpb25zIixhbm5vdGF0aW9uczoiYW5ub3RhdGlvbnMiLGFjdGl2ZU1ldHJpY3M6ImFjdGl2ZU1ldHJpY3MifSxkZWNsczozLHZhcnM6OCxjb25zdHM6W1szLCJudW1Bbm5vdGF0aW9ucyIsInNlbGVjdGVkQW5ub3RhdGlvbnMiLCJzb3J0IiwiYWN0aXZlTWV0cmljcyIsIm9uQ2hhbmdlU29ydCIsIm9uQWxsQW5ub3RhdGlvbnNUb2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJucG1pLWFubm90YXRpb25zLWxpc3QtaGVhZGVyLWNvbXBvbmVudCIsMCksVm0oIm9uQ2hhbmdlU29ydCIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4uY2hhbmdlU29ydChlKX0pKSgib25BbGxBbm5vdGF0aW9uc1RvZ2dsZWQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLmFsbEFubm90YXRpb25zVG9nZ2xlZChlKX0pKSxBaCgxLCJhc3luYyIpLEFoKDIsImFzeW5jIiksQW0oKSksMiZlJiZEbSgibnVtQW5ub3RhdGlvbnMiLG4ubnVtQW5ub3RhdGlvbnMpKCJzZWxlY3RlZEFubm90YXRpb25zIixUaCgxLDQsbi5zZWxlY3RlZEFubm90YXRpb25zJCkpKCJzb3J0IixUaCgyLDYsbi5hbm5vdGF0aW9uU29ydCQpKSgiYWN0aXZlTWV0cmljcyIsbi5hY3RpdmVNZXRyaWNzKX0sZGlyZWN0aXZlczpbUF90XSxwaXBlczpbd01dLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgod190LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im5wbWktYW5ub3RhdGlvbnMtbGlzdC1oZWFkZXIiLHRlbXBsYXRlOidcbiAgICA8bnBtaS1hbm5vdGF0aW9ucy1saXN0LWhlYWRlci1jb21wb25lbnRcbiAgICAgIFtudW1Bbm5vdGF0aW9uc109Im51bUFubm90YXRpb25zIlxuICAgICAgW3NlbGVjdGVkQW5ub3RhdGlvbnNdPSJzZWxlY3RlZEFubm90YXRpb25zJCB8IGFzeW5jIlxuICAgICAgW3NvcnRdPSJhbm5vdGF0aW9uU29ydCQgfCBhc3luYyJcbiAgICAgIFthY3RpdmVNZXRyaWNzXT0iYWN0aXZlTWV0cmljcyJcbiAgICAgIChvbkNoYW5nZVNvcnQpPSJjaGFuZ2VTb3J0KCRldmVudCkiXG4gICAgICAob25BbGxBbm5vdGF0aW9uc1RvZ2dsZWQpPSJhbGxBbm5vdGF0aW9uc1RvZ2dsZWQoJGV2ZW50KSJcbiAgICA+PC9ucG1pLWFubm90YXRpb25zLWxpc3QtaGVhZGVyLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLHtudW1Bbm5vdGF0aW9uczpbe3R5cGU6eHl9XSxhbm5vdGF0aW9uczpbe3R5cGU6eHl9XSxhY3RpdmVNZXRyaWNzOlt7dHlwZTp4eX1dfSk7Y29uc3Qga190PVsiY2hhcnQiXSxTX3Q9WyJoaW50Q2xpcCJdO2Z1bmN0aW9uIERfdCh0LGUpezEmdCYmVG0oMCwibWF0LWljb24iLDEyKX1mdW5jdGlvbiBFX3QodCxlKXsxJnQmJlRtKDAsIm1hdC1pY29uIiwxMyl9ZnVuY3Rpb24gUl90KHQsZSl7aWYoMSZ0JiZUbSgwLCJtYXQtaWNvbiIsMTQpLDImdCl7Y29uc3QgdD1ZbSgpO0RtKCJzdmdJY29uIix0LnNvcnQub3JkZXI9PT10LlNvcnRPcmRlci5TSU1JTEFSPyJhcnJvd19kb3dud2FyZF8yNHB4IjoiYXJyb3dfdXB3YXJkXzI0cHgiKSgibmdDbGFzcyIsdC5zb3J0Lm9yZGVyPT09dC5Tb3J0T3JkZXIuU0lNSUxBUj8iZG93bi1pY29uIjoidXAtaWNvbiIpfX1jbGFzcyBBX3R7Y29uc3RydWN0b3IoKXt0aGlzLnNlbGVjdGVkPSExLHRoaXMub25TaG93U2ltaWxhckFubm90YXRpb25zPW5ldyBMaCx0aGlzLlNvcnRPcmRlcj1uYnQsdGhpcy53aWR0aD0xMCx0aGlzLmNoYXJ0V2lkdGg9MTAsdGhpcy5jaGFydEhlaWdodD0xMCx0aGlzLm1heERvdFJhZGl1cz0xMCx0aGlzLmNvdW50RG90T2Zmc2V0PTcwLHRoaXMuY291bnRUZXh0UGFkZGluZz0yLHRoaXMubWFyZ2luPXt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MTAwfSx0aGlzLnN0cm9rZUNvbG9yPSIjZmZmIix0aGlzLnRleHRDbGFzcz0iZGVmYXVsdC10ZXh0Iix0aGlzLnJ1bnM9W119b25SZXNpemUodCl7dGhpcy5yZWRyYXcoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN2Zz1KNCh0aGlzLmFubm90YXRpb25Db250YWluZXIubmF0aXZlRWxlbWVudCkuc2VsZWN0KCJzdmciKSx0aGlzLnhTY2FsZT1VdHQoKS5wYWRkaW5nKDApLHRoaXMueVNjYWxlPVV0dCgpLnBhZGRpbmcoMCksdGhpcy5zaXplU2NhbGU9ZWV0KCkuZG9tYWluKFswLDFdKSx0aGlzLmNvdW50U2l6ZVNjYWxlPWVldCgpLnJhbmdlKFsyLHRoaXMubWF4RG90UmFkaXVzXSksdGhpcy5tYWluQ29udGFpbmVyPXRoaXMuc3ZnLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3RoaXMubWFyZ2luLmxlZnR9LCAke3RoaXMubWFyZ2luLnRvcH0pYCksdGhpcy5iYXJzR3JvdXA9dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiZyIpLHRoaXMuY291bnREb3RzR3JvdXA9dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiZyIpLHRoaXMudGV4dHNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIiksdGhpcy5jb3VudFRleHRzR3JvdXA9dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiZyIpLHRoaXMucnVuSGludEdyb3VwPXRoaXMuc3ZnLmFwcGVuZCgiZyIpLHRoaXMucmVkcmF3KCl9bmdPbkNoYW5nZXModCl7dGhpcy5zdmcmJnRoaXMucmVkcmF3KCl9cmVkcmF3KCl7dGhpcy5zZWxlY3RlZD10aGlzLnNlbGVjdGVkQW5ub3RhdGlvbnMuaW5jbHVkZXModGhpcy5hbm5vdGF0aW9uKSx0aGlzLnVwZGF0ZURpbWVuc2lvbnMoKSx0aGlzLnNldFRleHRDbGFzcygpLHRoaXMudXBkYXRlQXhlcygpLHRoaXMuZHJhdygpfXVwZGF0ZURpbWVuc2lvbnMoKXtjb25zdCB0PW5ldyBTZXQ7dGhpcy5kYXRhLmZvckVhY2goKGU9Pnt0LmFkZChlLnJ1bil9KSksdGhpcy5ydW5zPVsuLi50XSx0aGlzLnN2Zy5zdHlsZSgiaGVpZ2h0Iix0aGlzLm51bUFjdGl2ZVJ1bnMqdGhpcy5ydW5IZWlnaHQrInB4IiksdGhpcy5jaGFydEhlaWdodD10aGlzLnJ1bnMubGVuZ3RoKnRoaXMucnVuSGVpZ2h0LXRoaXMubWFyZ2luLnRvcC10aGlzLm1hcmdpbi5ib3R0b20sdGhpcy53aWR0aD10aGlzLmFubm90YXRpb25Db250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aHx8MTAsdGhpcy5jaGFydFdpZHRoPXRoaXMud2lkdGgtdGhpcy5tYXJnaW4ubGVmdC10aGlzLm1hcmdpbi5yaWdodH1zZXRUZXh0Q2xhc3MoKXt0aGlzLnRleHRDbGFzcz0iZGVmYXVsdC10ZXh0Iix0aGlzLmZsYWdnZWRBbm5vdGF0aW9ucy5pbmNsdWRlcyh0aGlzLmFubm90YXRpb24pP3RoaXMudGV4dENsYXNzPSJmbGFnLXRleHQiOnRoaXMuaGlkZGVuQW5ub3RhdGlvbnMuaW5jbHVkZXModGhpcy5hbm5vdGF0aW9uKSYmKHRoaXMudGV4dENsYXNzPSJoaWRkZW4tdGV4dCIpfXVwZGF0ZUF4ZXMoKXt0aGlzLnhTY2FsZS5yYW5nZVJvdW5kKFswLHRoaXMuY2hhcnRXaWR0aC10aGlzLmNoYXJ0V2lkdGgvdGhpcy5hY3RpdmVNZXRyaWNzLmxlbmd0aF0pLmRvbWFpbih0aGlzLmFjdGl2ZU1ldHJpY3MubWFwKCh0PT5ueXQodCkpKSksdGhpcy55U2NhbGUucmFuZ2VSb3VuZChbMCx0aGlzLmNoYXJ0SGVpZ2h0LXRoaXMucnVuSGVpZ2h0XSkuZG9tYWluKHRoaXMucnVucyksdGhpcy5zaXplU2NhbGUucmFuZ2UoWzAsdGhpcy5jaGFydFdpZHRoL3RoaXMuYWN0aXZlTWV0cmljcy5sZW5ndGhdKSx0aGlzLmNvdW50U2l6ZVNjYWxlLmRvbWFpbihbMCx0aGlzLm1heENvdW50XSl9ZHJhdygpe3RoaXMuZHJhd1J1bkluZGljYXRvcnMoKSx0aGlzLmRyYXdSdW5IaW50VGV4dHMoKSx0aGlzLmRyYXdCYXJzKCksdGhpcy5kcmF3VGV4dHMoKSx0aGlzLnNob3dDb3VudHM/KHRoaXMuZHJhd0NvdW50RG90cygpLHRoaXMuZHJhd0NvdW50VGV4dHMoKSk6KHRoaXMuY291bnREb3RzR3JvdXAuc2VsZWN0QWxsKCIuY291bnQtZG90IikucmVtb3ZlKCksdGhpcy5jb3VudFRleHRzR3JvdXAuc2VsZWN0QWxsKCIuY291bnQtYmFja2dyb3VuZC10ZXh0IikucmVtb3ZlKCksdGhpcy5jb3VudFRleHRzR3JvdXAuc2VsZWN0QWxsKCIuY291bnQtdGV4dCIpLnJlbW92ZSgpKX1kcmF3UnVuSW5kaWNhdG9ycygpe0o0KHRoaXMuY2xpcFBhdGhFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLnNlbGVjdCgicmVjdCIpLmF0dHIoIndpZHRoIix0aGlzLm1hcmdpbi5sZWZ0LTMwKS5hdHRyKCJoZWlnaHQiLHRoaXMuY2hhcnRIZWlnaHQpO2NvbnN0IHQ9dGhpcy5ydW5IaW50R3JvdXAuc2VsZWN0QWxsKCIuaGludCIpLmRhdGEodGhpcy5ydW5zKSxlPXQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImhpbnQiKTtlLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDE1IDAgTCAxMCAxMCBMIDE1IDIwIEwgMCAyMCBaIiksZS5tZXJnZSh0KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybmB0cmFuc2xhdGUoMTAsICR7dGhpcy55U2NhbGUodCkrNX0pYH0uYmluZCh0aGlzKSkuYXR0cigiZmlsbCIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29sb3JTY2FsZSh0KX0uYmluZCh0aGlzKSksdC5leGl0KCkucmVtb3ZlKCl9ZHJhd1J1bkhpbnRUZXh0cygpe2NvbnN0IHQ9dGhpcy5ydW5IaW50R3JvdXAuc2VsZWN0QWxsKCIuaGludC10ZXh0IikuZGF0YSh0aGlzLnJ1bnMpO3QuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyNSkuYXR0cigiZm9udC1zaXplIiwiMTBweCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoImNsaXAtcGF0aCIsInVybCgjaGludC1jbGlwKSIpLm1lcmdlKHQpLmF0dHIoInkiLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnlTY2FsZSh0KSsxNX0uYmluZCh0aGlzKSkuYXR0cigiY2xhc3MiLGBoaW50LXRleHQgJHt0aGlzLnRleHRDbGFzc31gKS50ZXh0KCh0PT57dmFyIGU7cmV0dXJuKG51bGw9PT0oZT10aGlzLnJ1bklkVG9SdW5zLmdldCh0KSl8fHZvaWQgMD09PWU/dm9pZCAwOmUubmFtZSl8fCIifSkpLHQuZXhpdCgpLnJlbW92ZSgpfWRyYXdCYXJzKCl7Y29uc3QgdD10aGlzLmJhcnNHcm91cC5zZWxlY3RBbGwoIi5iYXIiKS5kYXRhKHRoaXMuZGF0YSk7dC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFyIikuYXR0cigiaGVpZ2h0IiwyMCkubWVyZ2UodCkuYXR0cigiZmlsbCIsKHQ9Pm51bGw9PT10Lm5QTUlWYWx1ZT8iIjp0Lm5QTUlWYWx1ZT49MD9ib3QodC5uUE1JVmFsdWUpOl9vdCgtMSp0Lm5QTUlWYWx1ZSkpKS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54U2NhbGUodC5tZXRyaWMpfS5iaW5kKHRoaXMpKS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy55U2NhbGUodC5ydW4pKzV9LmJpbmQodGhpcykpLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXQublBNSVZhbHVlPzA6dGhpcy5zaXplU2NhbGUoTWF0aC5hYnModC5uUE1JVmFsdWUpKX0uYmluZCh0aGlzKSksdC5leGl0KCkucmVtb3ZlKCl9ZHJhd0NvdW50RG90cygpe2NvbnN0IHQ9dGhpcy5jb3VudERvdHNHcm91cC5zZWxlY3RBbGwoIi5jb3VudC1kb3QiKS5kYXRhKHRoaXMuZGF0YSk7dC5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJjb3VudC1kb3QiKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLm1lcmdlKHQpLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dC5jb3VudFZhbHVlPyIiOnlvdCh0LmNvdW50VmFsdWUvdGhpcy5tYXhDb3VudCl9LmJpbmQodGhpcykpLmF0dHIoImN4IixmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54U2NhbGUodC5tZXRyaWMpK3RoaXMuY291bnREb3RPZmZzZXR9LmJpbmQodGhpcykpLmF0dHIoImN5IixmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy55U2NhbGUodC5ydW4pK3RoaXMucnVuSGVpZ2h0LzJ9LmJpbmQodGhpcykpLmF0dHIoInIiLGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dC5jb3VudFZhbHVlPzA6dGhpcy5jb3VudFNpemVTY2FsZSh0LmNvdW50VmFsdWUpfS5iaW5kKHRoaXMpKSx0LmV4aXQoKS5yZW1vdmUoKX1kcmF3VGV4dHMoKXtjb25zdCB0PXRoaXMudGV4dHNHcm91cC5zZWxlY3RBbGwoIi5ucG1pLWJhY2tncm91bmQtdGV4dCIpLmRhdGEodGhpcy5kYXRhKTt0LmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJucG1pLWJhY2tncm91bmQtdGV4dCIpLmF0dHIoInN0cm9rZS13aWR0aCIsMykuYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKS5hdHRyKCJzdHJva2UiLHRoaXMuc3Ryb2tlQ29sb3IpLmF0dHIoImZvbnQtc2l6ZSIsIjEzcHgiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5tZXJnZSh0KS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54U2NhbGUodC5tZXRyaWMpKzV9LmJpbmQodGhpcykpLmF0dHIoInkiLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnlTY2FsZSh0LnJ1bikrdGhpcy5ydW5IZWlnaHQvMn0uYmluZCh0aGlzKSkudGV4dCgodD0+bnVsbD09PXQublBNSVZhbHVlPyJudWxsIjpNYXRoLnJvdW5kKDFlMyoodC5uUE1JVmFsdWUrTnVtYmVyLkVQU0lMT04pKS8xZTMpKSx0LmV4aXQoKS5yZW1vdmUoKTtjb25zdCBlPXRoaXMudGV4dHNHcm91cC5zZWxlY3RBbGwoIi5ucG1pLXRleHQiKS5kYXRhKHRoaXMuZGF0YSk7ZS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnBtaS10ZXh0IikuYXR0cigiZm9udC1zaXplIiwiMTNweCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLm1lcmdlKGUpLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnhTY2FsZSh0Lm1ldHJpYykrNX0uYmluZCh0aGlzKSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueVNjYWxlKHQucnVuKSt0aGlzLnJ1bkhlaWdodC8yfS5iaW5kKHRoaXMpKS50ZXh0KCh0PT5udWxsPT09dC5uUE1JVmFsdWU/Im51bGwiOk1hdGgucm91bmQoMWUzKih0Lm5QTUlWYWx1ZStOdW1iZXIuRVBTSUxPTikpLzFlMykpLGUuZXhpdCgpLnJlbW92ZSgpfWRyYXdDb3VudFRleHRzKCl7Y29uc3QgdD10aGlzLmNvdW50VGV4dHNHcm91cC5zZWxlY3RBbGwoIi5jb3VudC1iYWNrZ3JvdW5kLXRleHQiKS5kYXRhKHRoaXMuZGF0YSk7dC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiY291bnQtYmFja2dyb3VuZC10ZXh0IikuYXR0cigic3Ryb2tlLXdpZHRoIiwzKS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLmF0dHIoInN0cm9rZSIsdGhpcy5zdHJva2VDb2xvcikuYXR0cigiZm9udC1zaXplIiwiMTBweCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLm1lcmdlKHQpLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnhTY2FsZSh0Lm1ldHJpYykrdGhpcy5jb3VudERvdE9mZnNldCt0aGlzLmNvdW50VGV4dFBhZGRpbmcrdGhpcy5tYXhEb3RSYWRpdXN9LmJpbmQodGhpcykpLmF0dHIoInkiLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnlTY2FsZSh0LnJ1bikrdGhpcy5ydW5IZWlnaHQvMn0uYmluZCh0aGlzKSkudGV4dCgodD0+bnVsbD09PXQuY291bnRWYWx1ZT8iIjpJbnRsLk51bWJlckZvcm1hdCgpLmZvcm1hdCh0LmNvdW50VmFsdWUpKSksdC5leGl0KCkucmVtb3ZlKCk7Y29uc3QgZT10aGlzLmNvdW50VGV4dHNHcm91cC5zZWxlY3RBbGwoIi5jb3VudC10ZXh0IikuZGF0YSh0aGlzLmRhdGEpO2UuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImNvdW50LXRleHQiKS5hdHRyKCJmb250LXNpemUiLCIxMHB4IikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikubWVyZ2UoZSkuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueFNjYWxlKHQubWV0cmljKSt0aGlzLmNvdW50RG90T2Zmc2V0K3RoaXMuY291bnRUZXh0UGFkZGluZyt0aGlzLm1heERvdFJhZGl1c30uYmluZCh0aGlzKSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueVNjYWxlKHQucnVuKSt0aGlzLnJ1bkhlaWdodC8yfS5iaW5kKHRoaXMpKS50ZXh0KCh0PT5udWxsPT09dC5jb3VudFZhbHVlPyIiOkludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0KHQuY291bnRWYWx1ZSkpKSxlLmV4aXQoKS5yZW1vdmUoKX1zaW1pbGFyaXR5U29ydCh0KXt0aGlzLmhhc0VtYmVkZGluZyYmKHQuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vblNob3dTaW1pbGFyQW5ub3RhdGlvbnMuZW1pdCgpKX19QV90Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxBX3QpfSxBX3QuybVjbXA9dG8oe3R5cGU6QV90LHNlbGVjdG9yczpbWyJhbm5vdGF0aW9uLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFFoKGtfdCw3LGhnKSxRaChTX3QsNyxoZykpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4uYW5ub3RhdGlvbkNvbnRhaW5lcj10LmZpcnN0KSxKaCh0PXRiKCkpJiYobi5jbGlwUGF0aEVsZW1lbnQ9dC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZWbSgicmVzaXplIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUmVzaXplKCl9KSwhMSxvbCksMiZlJiZwdSgic2VsZWN0ZWQtcm93IixuLnNlbGVjdGVkKX0saW5wdXRzOntkYXRhOiJkYXRhIixtYXhDb3VudDoibWF4Q291bnQiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMiLGZsYWdnZWRBbm5vdGF0aW9uczoiZmxhZ2dlZEFubm90YXRpb25zIixoaWRkZW5Bbm5vdGF0aW9uczoiaGlkZGVuQW5ub3RhdGlvbnMiLGFjdGl2ZU1ldHJpY3M6ImFjdGl2ZU1ldHJpY3MiLG51bUFjdGl2ZVJ1bnM6Im51bUFjdGl2ZVJ1bnMiLHNob3dDb3VudHM6InNob3dDb3VudHMiLGFubm90YXRpb246ImFubm90YXRpb24iLHJ1bkhlaWdodDoicnVuSGVpZ2h0IixoYXNFbWJlZGRpbmc6Imhhc0VtYmVkZGluZyIsc29ydDoic29ydCIsc2lkZWJhcldpZHRoOiJzaWRlYmFyV2lkdGgiLGNvbG9yU2NhbGU6ImNvbG9yU2NhbGUiLHJ1bklkVG9SdW5zOiJydW5JZFRvUnVucyJ9LG91dHB1dHM6e29uU2hvd1NpbWlsYXJBbm5vdGF0aW9uczoib25TaG93U2ltaWxhckFubm90YXRpb25zIn0sZmVhdHVyZXM6W0JvXSxkZWNsczoxNCx2YXJzOjEwLGNvbnN0czpbWzEsImFubm90YXRpb24tdGl0bGUiXSxbMSwiYW5ub3RhdGlvbi1jaGVja2JveCIsMywiY2hlY2tlZCIsImNsaWNrIl0sWzEsImFubm90YXRpb24tYnV0dG9uIiwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbImNsYXNzIiwiZmxhZ2dlZC1pY29uIiwic3ZnSWNvbiIsImZsYWdfMjRweCIsNCwibmdJZiJdLFsiY2xhc3MiLCJoaWRkZW4taWNvbiIsInN2Z0ljb24iLCJ2aXNpYmlsaXR5X29mZl8yNHB4Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFubm90YXRpb24taWNvbiIsMywic3ZnSWNvbiIsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbMSwiY2hhcnQtZGl2Il0sWyJjaGFydCIsIiJdLFsxLCJjaGFydC1zdmciXSxbImlkIiwiaGludC1jbGlwIl0sWyJoaW50Q2xpcCIsIiJdLFsieCIsIjAiLCJ5IiwiMCJdLFsic3ZnSWNvbiIsImZsYWdfMjRweCIsMSwiZmxhZ2dlZC1pY29uIl0sWyJzdmdJY29uIiwidmlzaWJpbGl0eV9vZmZfMjRweCIsMSwiaGlkZGVuLWljb24iXSxbMSwiYW5ub3RhdGlvbi1pY29uIiwzLCJzdmdJY29uIiwibmdDbGFzcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiZGl2IiwwKSxSbSgxLCJtYXQtY2hlY2tib3giLDEpLFZtKCJjbGljayIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUucHJldmVudERlZmF1bHQoKX0pKSxBbSgpLFJtKDIsImJ1dHRvbiIsMiksVm0oImNsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5zaW1pbGFyaXR5U29ydChlKX0pKSxrdSgzKSxBbSgpLFFwKDQsRF90LDEsMCwibWF0LWljb24iLDMpLFFwKDUsRV90LDEsMCwibWF0LWljb24iLDQpLFFwKDYsUl90LDEsMiwibWF0LWljb24iLDUpLEFtKCksUm0oNywiZGl2Iiw2LDcpLHFpKCksUm0oOSwic3ZnIiw4KSxSbSgxMCwiZGVmcyIpLFJtKDExLCJjbGlwUGF0aCIsOSwxMCksVG0oMTMsInJlY3QiLDExKSxBbSgpLEFtKCksQW0oKSxBbSgpKSwyJmUmJihwdSgiZmxhZ2dlZC1hbm5vdGF0aW9uIixuLmZsYWdnZWRBbm5vdGF0aW9ucy5pbmNsdWRlcyhuLmFubm90YXRpb24pKSgiaGlkZGVuLWFubm90YXRpb24iLG4uaGlkZGVuQW5ub3RhdGlvbnMuaW5jbHVkZXMobi5hbm5vdGF0aW9uKSYmIW4uZmxhZ2dlZEFubm90YXRpb25zLmluY2x1ZGVzKG4uYW5ub3RhdGlvbikpLHJjKDEpLERtKCJjaGVja2VkIixuLnNlbGVjdGVkQW5ub3RhdGlvbnMuaW5jbHVkZXMobi5hbm5vdGF0aW9uKSkscmMoMSksRG0oIm5nQ2xhc3MiLG4uaGFzRW1iZWRkaW5nPyJjbGlja2FibGUtYW5ub3RhdGlvbiI6IiIpLHJjKDEpLER1KCIgIixuLmFubm90YXRpb24sIiAiKSxyYygxKSxEbSgibmdJZiIsbi5mbGFnZ2VkQW5ub3RhdGlvbnMuaW5jbHVkZXMobi5hbm5vdGF0aW9uKSkscmMoMSksRG0oIm5nSWYiLG4uaGlkZGVuQW5ub3RhdGlvbnMuaW5jbHVkZXMobi5hbm5vdGF0aW9uKSkscmMoMSksRG0oIm5nSWYiLG4uYW5ub3RhdGlvbj09PW4uc29ydC5tZXRyaWMpKX0sZGlyZWN0aXZlczpbT1ksYU0sZE0sRFddLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudHtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjI0cHh9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSBoMXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMiwubWF0LXRpdGxlLC5tYXQtdHlwb2dyYXBoeSBoMntmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMywubWF0LXN1YmhlYWRpbmctMiwubWF0LXR5cG9ncmFwaHkgaDN7Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDQsLm1hdC1zdWJoZWFkaW5nLTEsLm1hdC10eXBvZ3JhcGh5IGg0e2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1LC5tYXQtdHlwb2dyYXBoeSBoNXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNiwubWF0LXR5cG9ncmFwaHkgaDZ7Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmcsLm1hdC1ib2R5LTJ7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5LC5tYXQtYm9keS0xLC5tYXQtdHlwb2dyYXBoeXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHkgcCwubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsLC5tYXQtY2FwdGlvbntmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNCwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTR7Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktM3tmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMntmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTF7Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b24sLm1hdC1mYWIsLm1hdC1taW5pLWZhYntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJke2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGV7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXIgLm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZSwubWF0LWNhcmQtY29udGVudHtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dCAubWF0LWNoZWNrYm94LWxhYmVse2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwe2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb24sLm1hdC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb257Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbHtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsLC5tYXQtZm9vdGVyLWNlbGx7Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5e2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCwubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b257Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHRoe2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcnt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcnttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlciwubWF0LWdyaWQtdGlsZS1mb290ZXJ7Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnR7bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b257Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2Vye2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWwsLm1hdC1zdGVwcGVyLWhvcml6b250YWx7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcntmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9ye2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXB7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWxpbmt7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXIsLm1hdC10b29sYmFyIGgxLC5tYXQtdG9vbGJhciBoMiwubWF0LXRvb2xiYXIgaDMsLm1hdC10b29sYmFyIGg0LC5tYXQtdG9vbGJhciBoNSwubWF0LXRvb2xiYXIgaDZ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0e2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb257Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb257Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtc3ViaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWx7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGU6bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWR7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50e3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1yaXBwbGUtZWxlbWVudHtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW57Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLW92ZXJsYXktY29udGFpbmVyLC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcntwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJ7cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXI6ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcntkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5le3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9we2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCwuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3h7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja3twb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5ne3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3h7cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7LyohKi99QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7LyohKi99LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcntwb3NpdGlvbjpyZWxhdGl2ZX06aG9zdHtwYWRkaW5nLXRvcDo1cHh9LmFubm90YXRpb24tdGl0bGV7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MTNweDtoZWlnaHQ6MjBweDtwYWRkaW5nOjAgMTBweDt1c2VyLXNlbGVjdDpub25lfS5zZWxlY3RlZC1yb3d7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2Rpc3BsYXk6YmxvY2t9LmZsYWdnZWQtYW5ub3RhdGlvbntjb2xvcjojZjU3YzAwfS5oaWRkZW4tYW5ub3RhdGlvbntjb2xvcjojNzU3NTc1fS5hbm5vdGF0aW9uLWNoZWNrYm94e3BhZGRpbmctcmlnaHQ6NXB4fS5mbGFnZ2VkLWljb257dHJhbnNmb3JtOnNjYWxlKDAuNil9LmhpZGRlbi1pY29ue3RyYW5zZm9ybTpzY2FsZSgwLjYpfS5hbm5vdGF0aW9uLWljb257dHJhbnNmb3JtOnNjYWxlKDAuNil9LmNoYXJ0LWRpdntib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmVifS5jaGFydC1zdmd7d2lkdGg6MTAwJTt1c2VyLXNlbGVjdDpub25lfS5kZWZhdWx0LXRleHR7ZmlsbDojMDAwfS5mbGFnLXRleHR7ZmlsbDojZjU3YzAwfS5oaWRkZW4tdGV4dHtmaWxsOiM3NTc1NzV9LmNsaWNrYWJsZS1hbm5vdGF0aW9ue2N1cnNvcjpwb2ludGVyfWJ1dHRvbnthbGw6dW5zZXR9XG4nXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEFfdCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJhbm5vdGF0aW9uLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vYW5ub3RhdGlvbl9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9hbm5vdGF0aW9uX2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNoLGVuY2Fwc3VsYXRpb246SG4uTm9uZX1dfV0sbnVsbCx7ZGF0YTpbe3R5cGU6eHl9XSxtYXhDb3VudDpbe3R5cGU6eHl9XSxzZWxlY3RlZEFubm90YXRpb25zOlt7dHlwZTp4eX1dLGZsYWdnZWRBbm5vdGF0aW9uczpbe3R5cGU6eHl9XSxoaWRkZW5Bbm5vdGF0aW9uczpbe3R5cGU6eHl9XSxhY3RpdmVNZXRyaWNzOlt7dHlwZTp4eX1dLG51bUFjdGl2ZVJ1bnM6W3t0eXBlOnh5fV0sc2hvd0NvdW50czpbe3R5cGU6eHl9XSxhbm5vdGF0aW9uOlt7dHlwZTp4eX1dLHJ1bkhlaWdodDpbe3R5cGU6eHl9XSxoYXNFbWJlZGRpbmc6W3t0eXBlOnh5fV0sc29ydDpbe3R5cGU6eHl9XSxzaWRlYmFyV2lkdGg6W3t0eXBlOnh5fV0sY29sb3JTY2FsZTpbe3R5cGU6eHl9XSxydW5JZFRvUnVuczpbe3R5cGU6eHl9XSxhbm5vdGF0aW9uQ29udGFpbmVyOlt7dHlwZTpaYSxhcmdzOlsiY2hhcnQiLHtzdGF0aWM6ITAscmVhZDpoZ31dfV0sY2xpcFBhdGhFbGVtZW50Olt7dHlwZTpaYSxhcmdzOlsiaGludENsaXAiLHtzdGF0aWM6ITAscmVhZDpoZ31dfV0sc2VsZWN0ZWQ6W3t0eXBlOlB5LGFyZ3M6WyJjbGFzcy5zZWxlY3RlZC1yb3ciXX1dLG9uUmVzaXplOlt7dHlwZTp3eSxhcmdzOlsid2luZG93OnJlc2l6ZSJdfV0sb25TaG93U2ltaWxhckFubm90YXRpb25zOlt7dHlwZTpPeX1dfSk7Y2xhc3MgVF90e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLnNvcnQkPXRoaXMuc3RvcmUuc2VsZWN0KGhidCksdGhpcy5mbGFnZ2VkQW5ub3RhdGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KGRidCksdGhpcy5oaWRkZW5Bbm5vdGF0aW9ucyQ9dGhpcy5zdG9yZS5zZWxlY3QocGJ0KSx0aGlzLnNlbGVjdGVkQW5ub3RhdGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KGNidCksdGhpcy5zaG93Q291bnRzJD10aGlzLnN0b3JlLnNlbGVjdChDYnQpLHRoaXMuc2lkZWJhcldpZHRoJD10aGlzLnN0b3JlLnNlbGVjdCh4YnQpLHRoaXMucnVuQ29sb3JTY2FsZSQ9dGhpcy5zdG9yZS5zZWxlY3Qoek4pLnBpcGUoSXQoKHQ9PmU9PntpZighdC5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoYFtDb2xvciBzY2FsZV0gdW5rbm93biBydW5JZDogJHtlfS5gKTtyZXR1cm4gdFtlXX0pKSksdGhpcy5ydW5JZFRvUnVucyQ9dGhpcy5zdG9yZS5zZWxlY3QoZE4pfXNob3dTaW1pbGFyQW5ub3RhdGlvbnMoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGpidCh7YW5ub3RhdGlvbjp0aGlzLmFubm90YXRpb259KSl9fWZ1bmN0aW9uIE5fdCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsIm5wbWktYW5ub3RhdGlvbiIsNSksVm0oImNsaWNrIiwoZnVuY3Rpb24gZShuKXtjb25zdCBvPWhpKHQpLiRpbXBsaWNpdDtyZXR1cm4gWW0oMikucm93Q2xpY2tlZChuLG8pfSkpLEFtKCl9aWYoMiZ0KXtjb25zdCB0PWUuJGltcGxpY2l0LG49WW0oMik7RG0oImRhdGEiLG4uYW5ub3RhdGlvbnNbdF0pKCJhY3RpdmVNZXRyaWNzIixuLmFjdGl2ZU1ldHJpY3MpKCJudW1BY3RpdmVSdW5zIixuLm51bUFjdGl2ZVJ1bnMpKCJtYXhDb3VudCIsbi5tYXhDb3VudCkoImFubm90YXRpb24iLHQpKCJydW5IZWlnaHQiLG4ucnVuSGVpZ2h0KSgiaGFzRW1iZWRkaW5nIixuLmVtYmVkZGluZ0RhdGEmJnZvaWQgMCE9PW4uZW1iZWRkaW5nRGF0YVt0XSl9fWZ1bmN0aW9uIHpfdCh0LGUpe2lmKDEmdCYmKE5tKDApLFRtKDEsIm5wbWktYW5ub3RhdGlvbnMtbGlzdC1sZWdlbmQiKSxUbSgyLCJucG1pLWFubm90YXRpb25zLWxpc3QtaGVhZGVyIiwyKSxSbSgzLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiLDMpLFFwKDQsTl90LDEsNywibnBtaS1hbm5vdGF0aW9uIiw0KSxBbSgpLHptKCkpLDImdCl7Y29uc3QgdD1ZbSgpO3JjKDIpLERtKCJhbm5vdGF0aW9ucyIsdC5hbm5vdGF0aW9ucykoIm51bUFubm90YXRpb25zIix0Lm51bUFubm90YXRpb25zKSgiYWN0aXZlTWV0cmljcyIsdC5hY3RpdmVNZXRyaWNzKSxyYygxKSxLbSgiaXRlbVNpemUiLHQubnVtQWN0aXZlUnVucyp0LnJ1bkhlaWdodCsyNSkscmMoMSksRG0oImNka1ZpcnR1YWxGb3JPZiIsdC5zb3J0ZWRBbm5vdGF0aW9ucyl9fVRfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VF90KShTbShJdykpfSxUX3QuybVjbXA9dG8oe3R5cGU6VF90LHNlbGVjdG9yczpbWyJucG1pLWFubm90YXRpb24iXV0saW5wdXRzOntkYXRhOiJkYXRhIixtYXhDb3VudDoibWF4Q291bnQiLGFjdGl2ZU1ldHJpY3M6ImFjdGl2ZU1ldHJpY3MiLG51bUFjdGl2ZVJ1bnM6Im51bUFjdGl2ZVJ1bnMiLGFubm90YXRpb246ImFubm90YXRpb24iLHJ1bkhlaWdodDoicnVuSGVpZ2h0IixoYXNFbWJlZGRpbmc6Imhhc0VtYmVkZGluZyJ9LGRlY2xzOjksdmFyczozMSxjb25zdHM6W1szLCJkYXRhIiwibWF4Q291bnQiLCJhY3RpdmVNZXRyaWNzIiwibnVtQWN0aXZlUnVucyIsImFubm90YXRpb24iLCJydW5IZWlnaHQiLCJoYXNFbWJlZGRpbmciLCJzb3J0Iiwic2VsZWN0ZWRBbm5vdGF0aW9ucyIsImZsYWdnZWRBbm5vdGF0aW9ucyIsImhpZGRlbkFubm90YXRpb25zIiwic2hvd0NvdW50cyIsInNpZGViYXJXaWR0aCIsImNvbG9yU2NhbGUiLCJydW5JZFRvUnVucyIsIm9uU2hvd1NpbWlsYXJBbm5vdGF0aW9ucyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiYW5ub3RhdGlvbi1jb21wb25lbnQiLDApLFZtKCJvblNob3dTaW1pbGFyQW5ub3RhdGlvbnMiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4uc2hvd1NpbWlsYXJBbm5vdGF0aW9ucygpfSkpLEFoKDEsImFzeW5jIiksQWgoMiwiYXN5bmMiKSxBaCgzLCJhc3luYyIpLEFoKDQsImFzeW5jIiksQWgoNSwiYXN5bmMiKSxBaCg2LCJhc3luYyIpLEFoKDcsImFzeW5jIiksQWgoOCwiYXN5bmMiKSxBbSgpKSwyJmUmJkRtKCJkYXRhIixuLmRhdGEpKCJtYXhDb3VudCIsbi5tYXhDb3VudCkoImFjdGl2ZU1ldHJpY3MiLG4uYWN0aXZlTWV0cmljcykoIm51bUFjdGl2ZVJ1bnMiLG4ubnVtQWN0aXZlUnVucykoImFubm90YXRpb24iLG4uYW5ub3RhdGlvbikoInJ1bkhlaWdodCIsbi5ydW5IZWlnaHQpKCJoYXNFbWJlZGRpbmciLG4uaGFzRW1iZWRkaW5nKSgic29ydCIsVGgoMSwxNSxuLnNvcnQkKSkoInNlbGVjdGVkQW5ub3RhdGlvbnMiLFRoKDIsMTcsbi5zZWxlY3RlZEFubm90YXRpb25zJCkpKCJmbGFnZ2VkQW5ub3RhdGlvbnMiLFRoKDMsMTksbi5mbGFnZ2VkQW5ub3RhdGlvbnMkKSkoImhpZGRlbkFubm90YXRpb25zIixUaCg0LDIxLG4uaGlkZGVuQW5ub3RhdGlvbnMkKSkoInNob3dDb3VudHMiLFRoKDUsMjMsbi5zaG93Q291bnRzJCkpKCJzaWRlYmFyV2lkdGgiLFRoKDYsMjUsbi5zaWRlYmFyV2lkdGgkKSkoImNvbG9yU2NhbGUiLFRoKDcsMjcsbi5ydW5Db2xvclNjYWxlJCkpKCJydW5JZFRvUnVucyIsVGgoOCwyOSxuLnJ1bklkVG9SdW5zJCkpfSxkaXJlY3RpdmVzOltBX3RdLHBpcGVzOlt3TV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChUX3QsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1hbm5vdGF0aW9uIix0ZW1wbGF0ZTonXG4gICAgPGFubm90YXRpb24tY29tcG9uZW50XG4gICAgICBbZGF0YV09ImRhdGEiXG4gICAgICBbbWF4Q291bnRdPSJtYXhDb3VudCJcbiAgICAgIFthY3RpdmVNZXRyaWNzXT0iYWN0aXZlTWV0cmljcyJcbiAgICAgIFtudW1BY3RpdmVSdW5zXT0ibnVtQWN0aXZlUnVucyJcbiAgICAgIFthbm5vdGF0aW9uXT0iYW5ub3RhdGlvbiJcbiAgICAgIFtydW5IZWlnaHRdPSJydW5IZWlnaHQiXG4gICAgICBbaGFzRW1iZWRkaW5nXT0iaGFzRW1iZWRkaW5nIlxuICAgICAgW3NvcnRdPSJzb3J0JCB8IGFzeW5jIlxuICAgICAgW3NlbGVjdGVkQW5ub3RhdGlvbnNdPSJzZWxlY3RlZEFubm90YXRpb25zJCB8IGFzeW5jIlxuICAgICAgW2ZsYWdnZWRBbm5vdGF0aW9uc109ImZsYWdnZWRBbm5vdGF0aW9ucyQgfCBhc3luYyJcbiAgICAgIFtoaWRkZW5Bbm5vdGF0aW9uc109ImhpZGRlbkFubm90YXRpb25zJCB8IGFzeW5jIlxuICAgICAgW3Nob3dDb3VudHNdPSJzaG93Q291bnRzJCB8IGFzeW5jIlxuICAgICAgW3NpZGViYXJXaWR0aF09InNpZGViYXJXaWR0aCQgfCBhc3luYyJcbiAgICAgIFtjb2xvclNjYWxlXT0icnVuQ29sb3JTY2FsZSQgfCBhc3luYyJcbiAgICAgIFtydW5JZFRvUnVuc109InJ1bklkVG9SdW5zJCB8IGFzeW5jIlxuICAgICAgKG9uU2hvd1NpbWlsYXJBbm5vdGF0aW9ucyk9InNob3dTaW1pbGFyQW5ub3RhdGlvbnMoKSJcbiAgICA+PC9hbm5vdGF0aW9uLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLHtkYXRhOlt7dHlwZTp4eX1dLG1heENvdW50Olt7dHlwZTp4eX1dLGFjdGl2ZU1ldHJpY3M6W3t0eXBlOnh5fV0sbnVtQWN0aXZlUnVuczpbe3R5cGU6eHl9XSxhbm5vdGF0aW9uOlt7dHlwZTp4eX1dLHJ1bkhlaWdodDpbe3R5cGU6eHl9XSxoYXNFbWJlZGRpbmc6W3t0eXBlOnh5fV19KTtjbGFzcyBJX3R7Y29uc3RydWN0b3IoKXt0aGlzLm9uUm93Q2xpY2s9bmV3IExoLHRoaXMucnVuSGVpZ2h0PTMwfXJvd0NsaWNrZWQodCxlKXtpZih0LnNoaWZ0S2V5KXtsZXQgdD10aGlzLnNvcnRlZEFubm90YXRpb25zLmluZGV4T2YoZSk7aWYoMD09PXRoaXMuc2VsZWN0ZWRBbm5vdGF0aW9ucy5sZW5ndGgpdGhpcy5vblJvd0NsaWNrLmVtaXQodGhpcy5zb3J0ZWRBbm5vdGF0aW9ucy5zbGljZSgwLHQrMSkpO2Vsc2V7Y29uc3QgZT10aGlzLnNvcnRlZEFubm90YXRpb25zLmluZGV4T2YodGhpcy5zZWxlY3RlZEFubm90YXRpb25zW3RoaXMuc2VsZWN0ZWRBbm5vdGF0aW9ucy5sZW5ndGgtMV0pO3RoaXMub25Sb3dDbGljay5lbWl0KGU8dD90aGlzLnNvcnRlZEFubm90YXRpb25zLnNsaWNlKGUsdCsxKTp0aGlzLnNvcnRlZEFubm90YXRpb25zLnNsaWNlKHQsZSsxKSl9fWVsc2UgdGhpcy5vblJvd0NsaWNrLmVtaXQoW2VdKX19SV90Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxJX3QpfSxJX3QuybVjbXA9dG8oe3R5cGU6SV90LHNlbGVjdG9yczpbWyJhbm5vdGF0aW9ucy1saXN0LWNvbXBvbmVudCJdXSxpbnB1dHM6e2Fubm90YXRpb25zOiJhbm5vdGF0aW9ucyIsZW1iZWRkaW5nRGF0YToiZW1iZWRkaW5nRGF0YSIsYW5ub3RhdGlvbnNFeHBhbmRlZDoiYW5ub3RhdGlvbnNFeHBhbmRlZCIsbnVtQW5ub3RhdGlvbnM6Im51bUFubm90YXRpb25zIixhbm5vdGF0aW9uU29ydDoiYW5ub3RhdGlvblNvcnQiLGFjdGl2ZU1ldHJpY3M6ImFjdGl2ZU1ldHJpY3MiLG51bUFjdGl2ZVJ1bnM6Im51bUFjdGl2ZVJ1bnMiLHNvcnRlZEFubm90YXRpb25zOiJzb3J0ZWRBbm5vdGF0aW9ucyIsc2VsZWN0ZWRBbm5vdGF0aW9uczoic2VsZWN0ZWRBbm5vdGF0aW9ucyIsbWF4Q291bnQ6Im1heENvdW50In0sb3V0cHV0czp7b25Sb3dDbGljazoib25Sb3dDbGljayJ9LGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsIm51bUFubm90YXRpb25zIiwiZXhwYW5kZWQiXSxbNCwibmdJZiJdLFszLCJhbm5vdGF0aW9ucyIsIm51bUFubm90YXRpb25zIiwiYWN0aXZlTWV0cmljcyJdLFsibWluQnVmZmVyUHgiLCIzMDAiLCJtYXhCdWZmZXJQeCIsIjYwMCIsMSwiYW5ub3RhdGlvbi1yb3dzIiwzLCJpdGVtU2l6ZSJdLFszLCJkYXRhIiwiYWN0aXZlTWV0cmljcyIsIm51bUFjdGl2ZVJ1bnMiLCJtYXhDb3VudCIsImFubm90YXRpb24iLCJydW5IZWlnaHQiLCJoYXNFbWJlZGRpbmciLCJjbGljayIsNCwiY2RrVmlydHVhbEZvciIsImNka1ZpcnR1YWxGb3JPZiJdLFszLCJkYXRhIiwiYWN0aXZlTWV0cmljcyIsIm51bUFjdGl2ZVJ1bnMiLCJtYXhDb3VudCIsImFubm90YXRpb24iLCJydW5IZWlnaHQiLCJoYXNFbWJlZGRpbmciLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoVG0oMCwibnBtaS1hbm5vdGF0aW9ucy1saXN0LXRvb2xiYXIiLDApLFFwKDEsel90LDUsNSwibmctY29udGFpbmVyIiwxKSksMiZlJiYoRG0oIm51bUFubm90YXRpb25zIixuLm51bUFubm90YXRpb25zKSgiZXhwYW5kZWQiLG4uYW5ub3RhdGlvbnNFeHBhbmRlZCkscmMoMSksRG0oIm5nSWYiLG4uYW5ub3RhdGlvbnNFeHBhbmRlZCkpfSxkaXJlY3RpdmVzOltfX3QsZE0sdl90LHdfdCxnRixkRixiRixUX3RdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDpjYWxjKDEwMCUgLSAycHgpO3dpZHRoOmNhbGMoMTAwJSAtIDJweCl9LmFubm90YXRpb24tcm93c1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjEgMTtvdmVyZmxvdy15OmF1dG99J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKElfdCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJhbm5vdGF0aW9ucy1saXN0LWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vYW5ub3RhdGlvbnNfbGlzdF9jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsiLi9hbm5vdGF0aW9uc19saXN0X2NvbXBvbmVudC5jc3MiXSxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSxudWxsLHthbm5vdGF0aW9uczpbe3R5cGU6eHl9XSxlbWJlZGRpbmdEYXRhOlt7dHlwZTp4eX1dLGFubm90YXRpb25zRXhwYW5kZWQ6W3t0eXBlOnh5fV0sbnVtQW5ub3RhdGlvbnM6W3t0eXBlOnh5fV0sYW5ub3RhdGlvblNvcnQ6W3t0eXBlOnh5fV0sYWN0aXZlTWV0cmljczpbe3R5cGU6eHl9XSxudW1BY3RpdmVSdW5zOlt7dHlwZTp4eX1dLHNvcnRlZEFubm90YXRpb25zOlt7dHlwZTp4eX1dLHNlbGVjdGVkQW5ub3RhdGlvbnM6W3t0eXBlOnh5fV0sbWF4Q291bnQ6W3t0eXBlOnh5fV0sb25Sb3dDbGljazpbe3R5cGU6T3l9XX0pO2NsYXNzIEhfdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5hbm5vdGF0aW9uc0V4cGFuZGVkJD10aGlzLnN0b3JlLnBpcGUoRncoeWJ0KSksdGhpcy5hY3RpdmVSdW5zJD10aGlzLnN0b3JlLnBpcGUoRncoTk4pKS5waXBlKEl0KCh0PT50P0FycmF5LmZyb20odC5lbnRyaWVzKCkpLmZpbHRlcigodD0+dFsxXSkpLm1hcCgodD0+dFswXSkpOltdKSkpLHRoaXMuZW1iZWRkaW5nRGF0YSQ9dGhpcy5zdG9yZS5waXBlKEZ3KGxidCkpLHRoaXMubnVtQWN0aXZlUnVucyQ9dGhpcy5hY3RpdmVSdW5zJC5waXBlKEl0KCh0PT50Lmxlbmd0aCkpKSx0aGlzLmFjdGl2ZU1ldHJpY3MkPVd0KFt0aGlzLnN0b3JlLnNlbGVjdChzYnQpLHRoaXMuYWN0aXZlUnVucyQsdGhpcy5zdG9yZS5zZWxlY3QoZ2J0KV0pLnBpcGUoSXQoKChbdCxlLG5dKT0+e2xldCBvPVtdO2Zvcihjb25zdCBuIG9mIGUpdFtuXSYmKG89by5jb25jYXQodFtuXS5maWx0ZXIoKHQ9PmV5dCh0KSkpKSk7cmV0dXJuIG89Wy4uLm5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKG4pLC4uLm9dKV0sb30pKSksdGhpcy52aXNpYmxlQW5ub3RhdGlvbnMkPVd0KFt0aGlzLnN0b3JlLnNlbGVjdChyYnQpLHRoaXMuc3RvcmUuc2VsZWN0KHBidCksdGhpcy5zdG9yZS5zZWxlY3QoTWJ0KV0pLnBpcGUoSXQoKChbdCxlLG5dKT0+R3l0KHQsZSxuKSkpKSx0aGlzLmZpbHRlcmVkQW5ub3RhdGlvbnMkPVd0KFt0aGlzLnZpc2libGVBbm5vdGF0aW9ucyQsdGhpcy5zdG9yZS5zZWxlY3QoZmJ0KSx0aGlzLnN0b3JlLnNlbGVjdChnYnQpLHRoaXMuYWN0aXZlUnVucyQsdGhpcy5hY3RpdmVNZXRyaWNzJCx0aGlzLnN0b3JlLnNlbGVjdChtYnQpXSkucGlwZShJdCgoKFt0LGUsbixvLGksYV0pPT4oZnVuY3Rpb24gcih0LGUsbixvLGksYSl7Y29uc3Qgcj17fSxzPW5ldyBTZXQoZSksbD1uZXcgU2V0KGkubWFwKCh0PT5ueXQodCkpKSksYz1uZXcgUmVnRXhwKGEsImkiKTtyZXR1cm4gT2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgodD0+e2lmKCFjLnRlc3QodFswXSkpcmV0dXJuO2xldCBlPXRbMV07ZT1lLmZpbHRlcigodD0+cy5oYXModC5ydW4pJiZsLmhhcyh0Lm1ldHJpYykpKSwoZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJuIHQuZXZlcnkoKHQ9PntpZih0LmtpbmQ9PT10YnQuT1BFUkFUT1IpcmV0dXJuITA7Y29uc3Qgbz1lW3QubWV0cmljXTtyZXR1cm4gdm9pZCAwPT09b3x8bi5zb21lKChlPT5lLm1ldHJpYz09PW55dCh0Lm1ldHJpYykmJihudWxsPT09ZS5uUE1JVmFsdWU/by5pbmNsdWRlTmFOOmUublBNSVZhbHVlPD1vLm1heCYmZS5uUE1JVmFsdWU+PW8ubWluKSkpfSkpfSkobixvLGUpJiYwIT09ZS5sZW5ndGgmJihyW3RbMF1dPWUpfSkpLHJ9KSh0LG8sZSxuLGksYSkpKSkucGlwZShFZSgpKSx0aGlzLm51bUFubm90YXRpb25zJD10aGlzLmZpbHRlcmVkQW5ub3RhdGlvbnMkLnBpcGUoSXQoKHQ9Pk9iamVjdC5rZXlzKHQpLmxlbmd0aCkpKSx0aGlzLnNvcnRlZEFubm90YXRpb25zJD1XdChbdGhpcy5maWx0ZXJlZEFubm90YXRpb25zJCx0aGlzLnN0b3JlLnBpcGUoRncoaGJ0KSksdGhpcy5lbWJlZGRpbmdEYXRhJF0pLnBpcGUoSXQoKChbdCxlLG5dKT0+KGZ1bmN0aW9uIG8odCxlLG4pe2NvbnN0IG89T2JqZWN0LmtleXModCksaT1lLm9yZGVyPT09bmJ0LkRJU1NJTUlMQVJ8fGUub3JkZXI9PT1uYnQuU0lNSUxBUjtyZXR1cm4iIj09PWUubWV0cmljfHwodm9pZCAwPT09bnx8dm9pZCAwPT09bi5wb2ludHNbZS5tZXRyaWNdKSYmaT9vOihmdW5jdGlvbiBzKHQsZSxuKXtyZXR1cm4gdC5zb3J0KG4/KHQsbik9PmVbdF0tZVtuXToodCxuKT0+ZVtuXS1lW3RdKX0pKG8saT8oZnVuY3Rpb24gYSh0LGUsbil7Y29uc3Qgbz17fTtsZXQgaT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7bi5vcmRlcj09PW5idC5TSU1JTEFSJiYoaT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksYT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO2Zvcihjb25zdCByIG9mIHQpb1tyXT1yPT09bi5tZXRyaWM/aTp2b2lkIDA9PT1lLnBvaW50c1tyXT9hOmUucG9pbnRzW3JdLnZlY3Rvcj9ReXQoZS5wb2ludHNbbi5tZXRyaWNdLnZlY3RvcixlLnBvaW50c1tyXS52ZWN0b3IsYSk6YTtyZXR1cm4gb30pKG8sbixlKTooZnVuY3Rpb24gcih0LGUsbil7Y29uc3Qgbz1ueXQobi5tZXRyaWMpLGk9e307aWYobi5vcmRlcj09PW5idC5ERVNDRU5ESU5HKWZvcihjb25zdCBuIG9mIHQpaVtuXT1NYXRoLm1heCguLi5lW25dLmZpbHRlcigodD0+dC5tZXRyaWM9PT1vKSkubWFwKCh0PT5udWxsPT09dC5uUE1JVmFsdWU/LTEvMDp0Lm5QTUlWYWx1ZSkpKTtlbHNlIGZvcihjb25zdCBuIG9mIHQpaVtuXT1NYXRoLm1pbiguLi5lW25dLmZpbHRlcigodD0+dC5tZXRyaWM9PT1vKSkubWFwKCh0PT5udWxsPT09dC5uUE1JVmFsdWU/MS8wOnQublBNSVZhbHVlKSkpO3JldHVybiBpfSkobyx0LGUpLGUub3JkZXI9PT1uYnQuQVNDRU5ETkd8fGUub3JkZXI9PT1uYnQuU0lNSUxBUil9KSh0LGUsbikpKSksdGhpcy5zZWxlY3RlZEFubm90YXRpb25zJD10aGlzLnN0b3JlLnBpcGUoRncoY2J0KSksdGhpcy5tYXhDb3VudCQ9dGhpcy5maWx0ZXJlZEFubm90YXRpb25zJC5waXBlKEl0KCh0PT57bGV0IGU9MDtyZXR1cm4gT2JqZWN0LnZhbHVlcyh0KS5mb3JFYWNoKCh0PT57dC5mb3JFYWNoKCh0PT57dC5jb3VudFZhbHVlJiYoZT1NYXRoLm1heChlLHQuY291bnRWYWx1ZSkpfSkpfSkpLGV9KSkpfXJvd0NsaWNrZWQodCl7dGhpcy5zdG9yZS5kaXNwYXRjaChSYnQoe2Fubm90YXRpb25zOnR9KSl9fUhfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8SF90KShTbShJdykpfSxIX3QuybVjbXA9dG8oe3R5cGU6SF90LHNlbGVjdG9yczpbWyJucG1pLWFubm90YXRpb25zLWxpc3QiXV0sZGVjbHM6MTAsdmFyczoyNyxjb25zdHM6W1szLCJhbm5vdGF0aW9ucyIsImVtYmVkZGluZ0RhdGEiLCJhbm5vdGF0aW9uc0V4cGFuZGVkIiwibnVtQW5ub3RhdGlvbnMiLCJhY3RpdmVNZXRyaWNzIiwibnVtQWN0aXZlUnVucyIsInNvcnRlZEFubm90YXRpb25zIiwic2VsZWN0ZWRBbm5vdGF0aW9ucyIsIm1heENvdW50Iiwib25Sb3dDbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiYW5ub3RhdGlvbnMtbGlzdC1jb21wb25lbnQiLDApLFZtKCJvblJvd0NsaWNrIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5yb3dDbGlja2VkKGUpfSkpLEFoKDEsImFzeW5jIiksQWgoMiwiYXN5bmMiKSxBaCgzLCJhc3luYyIpLEFoKDQsImFzeW5jIiksQWgoNSwiYXN5bmMiKSxBaCg2LCJhc3luYyIpLEFoKDcsImFzeW5jIiksQWgoOCwiYXN5bmMiKSxBaCg5LCJhc3luYyIpLEFtKCkpLDImZSYmRG0oImFubm90YXRpb25zIixUaCgxLDksbi5maWx0ZXJlZEFubm90YXRpb25zJCkpKCJlbWJlZGRpbmdEYXRhIixUaCgyLDExLG4uZW1iZWRkaW5nRGF0YSQpKSgiYW5ub3RhdGlvbnNFeHBhbmRlZCIsVGgoMywxMyxuLmFubm90YXRpb25zRXhwYW5kZWQkKSkoIm51bUFubm90YXRpb25zIixUaCg0LDE1LG4ubnVtQW5ub3RhdGlvbnMkKSkoImFjdGl2ZU1ldHJpY3MiLFRoKDUsMTcsbi5hY3RpdmVNZXRyaWNzJCkpKCJudW1BY3RpdmVSdW5zIixUaCg2LDE5LG4ubnVtQWN0aXZlUnVucyQpKSgic29ydGVkQW5ub3RhdGlvbnMiLFRoKDcsMjEsbi5zb3J0ZWRBbm5vdGF0aW9ucyQpKSgic2VsZWN0ZWRBbm5vdGF0aW9ucyIsVGgoOCwyMyxuLnNlbGVjdGVkQW5ub3RhdGlvbnMkKSkoIm1heENvdW50IixUaCg5LDI1LG4ubWF4Q291bnQkKSl9LGRpcmVjdGl2ZXM6W0lfdF0scGlwZXM6W3dNXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEhfdCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJucG1pLWFubm90YXRpb25zLWxpc3QiLHRlbXBsYXRlOidcbiAgICA8YW5ub3RhdGlvbnMtbGlzdC1jb21wb25lbnRcbiAgICAgIFthbm5vdGF0aW9uc109ImZpbHRlcmVkQW5ub3RhdGlvbnMkIHwgYXN5bmMiXG4gICAgICBbZW1iZWRkaW5nRGF0YV09ImVtYmVkZGluZ0RhdGEkIHwgYXN5bmMiXG4gICAgICBbYW5ub3RhdGlvbnNFeHBhbmRlZF09ImFubm90YXRpb25zRXhwYW5kZWQkIHwgYXN5bmMiXG4gICAgICBbbnVtQW5ub3RhdGlvbnNdPSJudW1Bbm5vdGF0aW9ucyQgfCBhc3luYyJcbiAgICAgIFthY3RpdmVNZXRyaWNzXT0iYWN0aXZlTWV0cmljcyQgfCBhc3luYyJcbiAgICAgIFtudW1BY3RpdmVSdW5zXT0ibnVtQWN0aXZlUnVucyQgfCBhc3luYyJcbiAgICAgIFtzb3J0ZWRBbm5vdGF0aW9uc109InNvcnRlZEFubm90YXRpb25zJCB8IGFzeW5jIlxuICAgICAgW3NlbGVjdGVkQW5ub3RhdGlvbnNdPSJzZWxlY3RlZEFubm90YXRpb25zJCB8IGFzeW5jIlxuICAgICAgW21heENvdW50XT0ibWF4Q291bnQkIHwgYXN5bmMiXG4gICAgICAob25Sb3dDbGljayk9InJvd0NsaWNrZWQoJGV2ZW50KSJcbiAgICA+PC9hbm5vdGF0aW9ucy1saXN0LWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLG51bGwpO2NvbnN0IEZfdD1bImNoYXJ0Il07Y2xhc3MgTF90e2NvbnN0cnVjdG9yKCl7dGhpcy53aWR0aD0wLHRoaXMuY2hhcnRXaWR0aD0wLHRoaXMuaGVpZ2h0PTMwMCx0aGlzLm1hcmdpbj17dG9wOjIwLHJpZ2h0OjQwLGJvdHRvbToyMCxsZWZ0OjQwfSx0aGlzLmNoYXJ0SGVpZ2h0PXRoaXMuaGVpZ2h0LXRoaXMubWFyZ2luLnRvcC10aGlzLm1hcmdpbi5ib3R0b219b25SZXNpemUodCl7dGhpcy5yZWRyYXcoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN2Zz1KNCh0aGlzLnN2Z0VsZW1lbnQubmF0aXZlRWxlbWVudCksdGhpcy5tYWluQ29udGFpbmVyPXRoaXMuc3ZnLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3RoaXMubWFyZ2luLmxlZnR9LCAke3RoaXMubWFyZ2luLnRvcH0pYCksdGhpcy5jb29yZGluYXRlc0dyb3VwPXRoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoImciKSx0aGlzLmxhYmVsc0dyb3VwPXRoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoImciKSx0aGlzLmF4aXNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIiksdGhpcy54U2NhbGU9VXR0KCkucGFkZGluZyguMSksdGhpcy55U2NhbGU9ZWV0KCkucmFuZ2UoW3RoaXMuY2hhcnRIZWlnaHQsMF0pLHRoaXMueUF4aXM9TjUodGhpcy55U2NhbGUpLHRoaXMucmVkcmF3KCl9bmdPbkNoYW5nZXModCl7dGhpcy5zdmcmJnRoaXMucmVkcmF3KCl9cmVkcmF3KCl7dGhpcy51cGRhdGVEaW1lbnNpb25zKCksdGhpcy51cGRhdGVBeGVzKCksdGhpcy5kcmF3KCl9dXBkYXRlRGltZW5zaW9ucygpe3RoaXMud2lkdGg9dGhpcy5zdmdFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGh8fDEwLHRoaXMuY2hhcnRXaWR0aD10aGlzLndpZHRoLXRoaXMubWFyZ2luLmxlZnQtdGhpcy5tYXJnaW4ucmlnaHR9dXBkYXRlQXhlcygpe3RoaXMueFNjYWxlLnJhbmdlUm91bmQoWzAsdGhpcy5jaGFydFdpZHRoXSkuZG9tYWluKHRoaXMuYWN0aXZlTWV0cmljcyksdGhpcy55U2NhbGUuZG9tYWluKFt0aGlzLmNvb3JkaW5hdGVEYXRhLmV4dHJlbWVzLm1pbix0aGlzLmNvb3JkaW5hdGVEYXRhLmV4dHJlbWVzLm1heF0pfWRyYXcoKXt0aGlzLmRyYXdBeGVzKCksdGhpcy5kcmF3QXhpc0xhYmVscygpLHRoaXMuZHJhd0Nvb3JkaW5hdGVzKCksdGhpcy5kcmF3TGFiZWxzKCl9ZHJhd0F4ZXMoKXtjb25zdCB0PXRoaXMuYXhpc0dyb3VwLnNlbGVjdEFsbCgiLmF4aXMteSIpLmRhdGEodGhpcy5hY3RpdmVNZXRyaWNzKTt0LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJheGlzLXkiKS5tZXJnZSh0KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybmB0cmFuc2xhdGUoJHt0aGlzLnhTY2FsZSh0KX0sIDApYH0uYmluZCh0aGlzKSkuY2FsbCh0aGlzLnlBeGlzKSx0LmV4aXQoKS5yZW1vdmUoKX1kcmF3QXhpc0xhYmVscygpe2NvbnN0IHQ9dGhpcy5heGlzR3JvdXAuc2VsZWN0QWxsKCIuYXhpcy1iZy10ZXh0IikuZGF0YSh0aGlzLmFjdGl2ZU1ldHJpY3MpO3QuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImF4aXMtYmctdGV4dCIpLmF0dHIoImZvbnQtc2l6ZSIsIjEzcHgiKS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIikuYXR0cigic3Ryb2tlIiwid2hpdGUiKS5tZXJnZSh0KS50ZXh0KCh0PT50KSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm5gdHJhbnNsYXRlKCR7dGhpcy54U2NhbGUodCktNX0sICR7dGhpcy55U2NhbGUodGhpcy5jb29yZGluYXRlRGF0YS5leHRyZW1lcy5taW4pfSkgcm90YXRlKC05MClgfS5iaW5kKHRoaXMpKSx0LmV4aXQoKS5yZW1vdmUoKTtjb25zdCBlPXRoaXMuYXhpc0dyb3VwLnNlbGVjdEFsbCgiLmF4aXMtdGV4dCIpLmRhdGEodGhpcy5hY3RpdmVNZXRyaWNzKTtlLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZm9udC1zaXplIiwiMTNweCIpLmF0dHIoImNsYXNzIiwiYXhpcy10ZXh0IikubWVyZ2UoZSkudGV4dCgodD0+dCkpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuYHRyYW5zbGF0ZSgke3RoaXMueFNjYWxlKHQpLTV9LCAke3RoaXMueVNjYWxlKHRoaXMuY29vcmRpbmF0ZURhdGEuZXh0cmVtZXMubWluKX0pIHJvdGF0ZSgtOTApYH0uYmluZCh0aGlzKSksZS5leGl0KCkucmVtb3ZlKCl9ZHJhd0Nvb3JkaW5hdGVzKCl7Y29uc3QgdD10aGlzLmNvb3JkaW5hdGVzR3JvdXAuc2VsZWN0QWxsKCIuY29vcmQiKS5kYXRhKHRoaXMuY29vcmRpbmF0ZURhdGEuY29vcmRpbmF0ZXMpO3QuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImNvb3JkIikuYXR0cigiZmlsbCIsIm5vbmUiKS5tZXJnZSh0KS5hdHRyKCJkIix0aGlzLnBhdGguYmluZCh0aGlzKSkuYXR0cigic3Ryb2tlIixmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb2xvclNjYWxlKHQucnVuSWQpfS5iaW5kKHRoaXMpKSx0LmV4aXQoKS5yZW1vdmUoKTtjb25zdCBlPXRoaXMuY29vcmRpbmF0ZXNHcm91cC5zZWxlY3RBbGwoIi5oaWRkZW5Db29yZCIpLmRhdGEodGhpcy5jb29yZGluYXRlRGF0YS5jb29yZGluYXRlcyk7ZS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiaGlkZGVuQ29vcmQiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxMHB4IikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCJyZ2JhKDAsIDAsIDAsIDAuMCkiKS5vbigibW91c2VvdmVyIix0aGlzLmhhbmRsZUNvb3JkaW5hdGVNb3VzZU92ZXIuYmluZCh0aGlzKSkub24oIm1vdXNlb3V0Iix0aGlzLmhhbmRsZUNvb3JkaW5hdGVNb3VzZU91dC5iaW5kKHRoaXMpKS5tZXJnZShlKS5hdHRyKCJkIix0aGlzLnBhdGguYmluZCh0aGlzKSksZS5leGl0KCkucmVtb3ZlKCl9cGF0aCh0KXtyZXR1cm4gdC52YWx1ZXMuc29ydCgoKHQsZSk9PnRoaXMuYWN0aXZlTWV0cmljcy5pbmRleE9mKHQubWV0cmljKS10aGlzLmFjdGl2ZU1ldHJpY3MuaW5kZXhPZihlLm1ldHJpYykpKSxQb3QoKSh0LnZhbHVlcy5tYXAoZnVuY3Rpb24odCl7bGV0IGU9dGhpcy55U2NhbGUodC5uUE1JVmFsdWUpO3JldHVyblt0aGlzLnhTY2FsZSh0Lm1ldHJpYyksZV19LmJpbmQodGhpcykpKX1oYW5kbGVDb29yZGluYXRlTW91c2VPdmVyKHQsZSl7dGhpcy5sYWJlbHNHcm91cC5zZWxlY3RBbGwoIi5jb29yZGluYXRlLWxhYmVsIikuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hKGUuYW5ub3RhdGlvbj09PXQuYW5ub3RhdGlvbil9KSkuc3R5bGUoIm9wYWNpdHkiLC4xKSx0aGlzLmNvb3JkaW5hdGVzR3JvdXAuc2VsZWN0QWxsKCIuY29vcmQiKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiEoZS5hbm5vdGF0aW9uPT09dC5hbm5vdGF0aW9uKX0pKS5zdHlsZSgib3BhY2l0eSIsLjEpfWhhbmRsZUNvb3JkaW5hdGVNb3VzZU91dCgpe3RoaXMubGFiZWxzR3JvdXAuc2VsZWN0QWxsKCIuY29vcmRpbmF0ZS1sYWJlbCIpLnN0eWxlKCJvcGFjaXR5IiwxKSx0aGlzLmNvb3JkaW5hdGVzR3JvdXAuc2VsZWN0QWxsKCIuY29vcmQiKS5zdHlsZSgib3BhY2l0eSIsMSl9ZHJhd0xhYmVscygpe2NvbnN0IHQ9MzAvdGhpcy54U2NhbGUuc3RlcCgpLGU9dGhpcy5jb29yZGluYXRlRGF0YS5jb29yZGluYXRlcy5sZW5ndGg8MzA/dGhpcy5jb29yZGluYXRlRGF0YS5jb29yZGluYXRlczpbXSxuPXRoaXMubGFiZWxzR3JvdXAuc2VsZWN0QWxsKCIuY29vcmRpbmF0ZS1sYWJlbCIpLmRhdGEoZSk7bi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiY29vcmRpbmF0ZS1sYWJlbCIpLmF0dHIoImZvbnQtc2l6ZSIsIjEwcHgiKS5tZXJnZShuKS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gdC5hbm5vdGF0aW9ufSkpLmF0dHIoIngiLHRoaXMueFNjYWxlKHRoaXMuYWN0aXZlTWV0cmljc1swXSkrMzApLmF0dHIoInkiLGZ1bmN0aW9uKGUpe2NvbnN0IG49dGhpcy55U2NhbGUoZS52YWx1ZXNbMF0ublBNSVZhbHVlP2UudmFsdWVzWzBdLm5QTUlWYWx1ZTowKSxvPXRoaXMueVNjYWxlKGUudmFsdWVzWzFdLm5QTUlWYWx1ZT9lLnZhbHVlc1sxXS5uUE1JVmFsdWU6MCk7cmV0dXJuKDEtdCkqbit0Km99LmJpbmQodGhpcykpLG4uZXhpdCgpLnJlbW92ZSgpfX1MX3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fExfdCl9LExfdC7JtWNtcD10byh7dHlwZTpMX3Qsc2VsZWN0b3JzOltbInBhcmFsbGVsLWNvb3JkaW5hdGVzLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmUWgoRl90LDcsaGcpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4uc3ZnRWxlbWVudD10LmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbiB0KGUsbil7MSZlJiZWbSgicmVzaXplIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblJlc2l6ZShlKX0pLCExLG9sKX0saW5wdXRzOnthY3RpdmVNZXRyaWNzOiJhY3RpdmVNZXRyaWNzIixjb29yZGluYXRlRGF0YToiY29vcmRpbmF0ZURhdGEiLHNpZGViYXJXaWR0aDoic2lkZWJhcldpZHRoIixjb2xvclNjYWxlOiJjb2xvclNjYWxlIn0sZmVhdHVyZXM6W0JvXSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sxLCJwYy1jaGFydCJdLFsiY2hhcnQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKHFpKCksVG0oMCwic3ZnIiwwLDEpKX0sc3R5bGVzOlsiLnBjLWNoYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MzAwcHg7d2lkdGg6MTAwJX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoTF90LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InBhcmFsbGVsLWNvb3JkaW5hdGVzLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vcGFyYWxsZWxfY29vcmRpbmF0ZXNfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vcGFyYWxsZWxfY29vcmRpbmF0ZXNfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwse2FjdGl2ZU1ldHJpY3M6W3t0eXBlOnh5fV0sY29vcmRpbmF0ZURhdGE6W3t0eXBlOnh5fV0sc2lkZWJhcldpZHRoOlt7dHlwZTp4eX1dLGNvbG9yU2NhbGU6W3t0eXBlOnh5fV0sc3ZnRWxlbWVudDpbe3R5cGU6WmEsYXJnczpbImNoYXJ0Iix7c3RhdGljOiEwLHJlYWQ6aGd9XX1dLG9uUmVzaXplOlt7dHlwZTp3eSxhcmdzOlsid2luZG93OnJlc2l6ZSIsWyIkZXZlbnQiXV19XX0pO2NsYXNzIEJfdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5hY3RpdmVSdW5zJD10aGlzLnN0b3JlLnBpcGUoRncoTk4pKS5waXBlKEl0KCh0PT50P0FycmF5LmZyb20odC5lbnRyaWVzKCkpLmZpbHRlcigodD0+dFsxXSkpLm1hcCgodD0+dFswXSkpOltdKSkpLHRoaXMuYWN0aXZlTWV0cmljcyQ9V3QodGhpcy5zdG9yZS5zZWxlY3Qoc2J0KSx0aGlzLmFjdGl2ZVJ1bnMkLHRoaXMuc3RvcmUuc2VsZWN0KGdidCkpLnBpcGUoSXQoKChbdCxlLG5dKT0+e2xldCBvPVtdO2Zvcihjb25zdCBuIG9mIGUpdFtuXSYmKG89by5jb25jYXQodFtuXS5maWx0ZXIoKHQ9PmV5dCh0KSkpKSk7cmV0dXJuIG89Wy4uLm5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKG4pLC4uLm9dKV0sby5tYXAoKHQ9Pm55dCh0KSkpfSkpKSx0aGlzLmNvb3JkaW5hdGVEYXRhJD1XdChbdGhpcy5zdG9yZS5zZWxlY3QocmJ0KSx0aGlzLnN0b3JlLnNlbGVjdChjYnQpLHRoaXMuYWN0aXZlUnVucyQsdGhpcy5hY3RpdmVNZXRyaWNzJF0pLnBpcGUoSXQoKChbdCxlLG4sb10pPT4oZnVuY3Rpb24gaSh0LGUsbixvKXtjb25zdCBpPVtdLGE9e21heDotMSxtaW46MX0scj1uZXcgU2V0KG4pLHM9bmV3IFNldChvKTtyZXR1cm4gMD09PXIuc2l6ZXx8MD09PXMuc2l6ZXx8MD09PU9iamVjdC5rZXlzKHQpLmxlbmd0aD97Y29vcmRpbmF0ZXM6W10sZXh0cmVtZXM6e21pbjotMSxtYXg6MX19OihlLmZvckVhY2goKGU9Pntjb25zdCBuPXt9O3RbZV0uZm9yRWFjaCgodD0+e3IuaGFzKHQucnVuKSYmcy5oYXModC5tZXRyaWMpJiYoblt0LnJ1bl0/blt0LnJ1bl0ucHVzaCh0KTpuW3QucnVuXT1bdF0sbnVsbCE9PXQublBNSVZhbHVlPyhhLm1heD1NYXRoLm1heChhLm1heCx0Lm5QTUlWYWx1ZSksYS5taW49TWF0aC5taW4oYS5taW4sdC5uUE1JVmFsdWUpKTooYS5tYXg9TWF0aC5tYXgoYS5tYXgsMCksYS5taW49TWF0aC5taW4oYS5taW4sMCkpKX0pKTtmb3IoY29uc3QgdCBvZiBPYmplY3Qua2V5cyhuKSlpLnB1c2goe2Fubm90YXRpb246ZSxydW5JZDp0LHZhbHVlczpuW3RdfSl9KSksYS5tYXg8YS5taW4mJihhLm1heD0xLGEubWluPS0xKSx7Y29vcmRpbmF0ZXM6aSxleHRyZW1lczphfSl9KSh0LGUsbixvKSkpKSx0aGlzLnNpZGViYXJXaWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QoeGJ0KSx0aGlzLnJ1bkNvbG9yU2NhbGUkPXRoaXMuc3RvcmUuc2VsZWN0KHpOKS5waXBlKEl0KCh0PT5lPT57aWYoIXQuaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKGBbQ29sb3Igc2NhbGVdIHVua25vd24gcnVuSWQ6ICR7ZX0uYCk7cmV0dXJuIHRbZV19KSkpfX1mdW5jdGlvbiBWX3QodCxlKXsxJnQmJlRtKDAsIm1hdC1pY29uIiw5KX1mdW5jdGlvbiBqX3QodCxlKXsxJnQmJlRtKDAsIm1hdC1pY29uIiwxMCl9ZnVuY3Rpb24gVV90KHQsZSl7MSZ0JiZUbSgwLCJucG1pLXBhcmFsbGVsLWNvb3JkaW5hdGVzIil9Ql90Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxCX3QpKFNtKEl3KSl9LEJfdC7JtWNtcD10byh7dHlwZTpCX3Qsc2VsZWN0b3JzOltbIm5wbWktcGFyYWxsZWwtY29vcmRpbmF0ZXMiXV0sZGVjbHM6NSx2YXJzOjEyLGNvbnN0czpbWzMsImFjdGl2ZU1ldHJpY3MiLCJjb29yZGluYXRlRGF0YSIsInNpZGViYXJXaWR0aCIsImNvbG9yU2NhbGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFRtKDAsInBhcmFsbGVsLWNvb3JkaW5hdGVzLWNvbXBvbmVudCIsMCksQWgoMSwiYXN5bmMiKSxBaCgyLCJhc3luYyIpLEFoKDMsImFzeW5jIiksQWgoNCwiYXN5bmMiKSksMiZlJiZEbSgiYWN0aXZlTWV0cmljcyIsVGgoMSw0LG4uYWN0aXZlTWV0cmljcyQpKSgiY29vcmRpbmF0ZURhdGEiLFRoKDIsNixuLmNvb3JkaW5hdGVEYXRhJCkpKCJzaWRlYmFyV2lkdGgiLFRoKDMsOCxuLnNpZGViYXJXaWR0aCQpKSgiY29sb3JTY2FsZSIsVGgoNCwxMCxuLnJ1bkNvbG9yU2NhbGUkKSl9LGRpcmVjdGl2ZXM6W0xfdF0scGlwZXM6W3dNXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEJfdCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJucG1pLXBhcmFsbGVsLWNvb3JkaW5hdGVzIix0ZW1wbGF0ZTonXG4gICAgPHBhcmFsbGVsLWNvb3JkaW5hdGVzLWNvbXBvbmVudFxuICAgICAgW2FjdGl2ZU1ldHJpY3NdPSJhY3RpdmVNZXRyaWNzJCB8IGFzeW5jIlxuICAgICAgW2Nvb3JkaW5hdGVEYXRhXT0iY29vcmRpbmF0ZURhdGEkIHwgYXN5bmMiXG4gICAgICBbc2lkZWJhcldpZHRoXT0ic2lkZWJhcldpZHRoJCB8IGFzeW5jIlxuICAgICAgW2NvbG9yU2NhbGVdPSJydW5Db2xvclNjYWxlJCB8IGFzeW5jIlxuICAgID48L3BhcmFsbGVsLWNvb3JkaW5hdGVzLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLG51bGwpO2NsYXNzIEdfdHtjb25zdHJ1Y3Rvcigpe3RoaXMub25DbGVhclNlbGVjdGVkQW5ub3RhdGlvbnM9bmV3IExoLHRoaXMub25Ub2dnbGVFeHBhbmRlZD1uZXcgTGh9fUdfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8R190KX0sR190Lsm1Y21wPXRvKHt0eXBlOkdfdCxzZWxlY3RvcnM6W1sic2VsZWN0ZWQtYW5ub3RhdGlvbnMtY29tcG9uZW50Il1dLGlucHV0czp7cGNFeHBhbmRlZDoicGNFeHBhbmRlZCIsc2VsZWN0ZWRBbm5vdGF0aW9uczoic2VsZWN0ZWRBbm5vdGF0aW9ucyJ9LG91dHB1dHM6e29uQ2xlYXJTZWxlY3RlZEFubm90YXRpb25zOiJvbkNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9ucyIsb25Ub2dnbGVFeHBhbmRlZDoib25Ub2dnbGVFeHBhbmRlZCJ9LGRlY2xzOjExLHZhcnM6NCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJDbGVhciBBbm5vdGF0aW9uIFNlbGVjdGlvbiIpOiRsb2NhbGl6ZWA6TGFiZWwgZm9yIGEgYnV0dG9uIHRoYXQgY2xlYXJzIHRoZSBhbm5vdGF0aW9uIHNlbGVjdGlvbi7ikJ8yYjUyMjg5ZjJjNGI3ZjViMTgyZWQyM2M5MTU0NzIyZWNkNDZhMmQ04pCfMjQ5NDY2MDUyMDM0MTMwODgzMDpDbGVhciBBbm5vdGF0aW9uIFNlbGVjdGlvbmAsZT0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiRXhwYW5kL0hpZGUgU2VsZWN0ZWQgQW5ub3RhdGlvbnMiKTokbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IGV4cGFuZHMgb3IgaGlkZXMgc2VsZWN0ZWQgYW5ub3RhdGlvbnMu4pCfOGY0YWQzMDVjMTllMzY1NWYzMTg5ZTNlMjY0ZTgzZmI3NmY3YmI5NeKQnzU2NzA3OTc3ODQwNzA5NTIwOTU6RXhwYW5kL0hpZGUgU2VsZWN0ZWQgQW5ub3RhdGlvbnNgLFtbMSwicGMtY29udGFpbmVyIl0sWzEsInBjLXRvb2xiYXIiXSxbMSwicGMtdGl0bGUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsInRpdGxlIiwiRGVzZWxlY3RzIGFsbCBzZWxlY3RlZCBhbm5vdGF0aW9ucy4iLDEsImNsZWFyLWJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsic3ZnSWNvbiIsImNsZWFyXzI0cHgiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsMSwiZXhwYW5kLWJ1dHRvbiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJleHBhbmRfbGVzc18yNHB4IiwiY2xhc3MiLCJleHBhbmQtbGVzcy1pY29uIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vdEV4cGFuZGVkIiwiIl0sWzQsIm5nSWYiXSxbInN2Z0ljb24iLCJleHBhbmRfbGVzc18yNHB4IiwxLCJleHBhbmQtbGVzcy1pY29uIl0sWyJzdmdJY29uIiwiZXhwYW5kX21vcmVfMjRweCIsMSwiZXhwYW5kLWljb24iXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihSbSgwLCJkaXYiLDApLFJtKDEsImRpdiIsMSksUm0oMiwiaDMiLDIpLGt1KDMsIlNlbGVjdGVkIEFubm90YXRpb25zIiksQW0oKSxSbSg0LCJidXR0b24iLDMpLFZtKCJjbGljayIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vbkNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9ucy5lbWl0KCl9KSksVG0oNSwibWF0LWljb24iLDQpLEFtKCksUm0oNiwiYnV0dG9uIiw1KSxWbSgiY2xpY2siLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25Ub2dnbGVFeHBhbmRlZC5lbWl0KCl9KSksUXAoNyxWX3QsMSwwLCJtYXQtaWNvbiIsNiksUXAoOCxqX3QsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw3LGliKSxBbSgpLEFtKCksUXAoMTAsVV90LDEsMCwibnBtaS1wYXJhbGxlbC1jb29yZGluYXRlcyIsOCksQW0oKSksMiZlKXtjb25zdCB0PSRwKDkpO3JjKDQpLERtKCJkaXNhYmxlZCIsMD09PW4uc2VsZWN0ZWRBbm5vdGF0aW9ucy5sZW5ndGgpLHJjKDMpLERtKCJuZ0lmIixuLnBjRXhwYW5kZWQpKCJuZ0lmRWxzZSIsdCkscmMoMyksRG0oIm5nSWYiLG4ucGNFeHBhbmRlZCl9fSxkaXJlY3RpdmVzOltYSCxEVyxkTSxCX3RdLHN0eWxlczpbJy5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtYmFkZ2UtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHh9Lm1hdC1oMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtaGVhZGxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDNbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN1YmhlYWRpbmctMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZ1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtYm9keS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHlbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktNFtfbmdjb250ZW50LSVDT01QJV17Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0zW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZGlzcGxheS0yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LXJhaXNlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZmxhdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZhYltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbWluaS1mYWJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGVja2JveC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNoaXBbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvb3Rlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmVbX25nY29udGVudC0lQ09NUCVde2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIzZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6LjU0MTY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2NjY2NjY3ZW0pfUBtZWRpYSBwcmludHsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjJlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV06LXdlYmtpdC1hdXRvZmlsbCArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1pbmZpeFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXVtfbmdjb250ZW50LSVDT01QJV06bm90KDpsYWJlbC1zaG93bikgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKG4rMiksIC5tYXQtZ3JpZC10aWxlLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGFiLWxpbmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg2W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtc3ViaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1uZXN0ZWQtdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXJpcHBsZS1lbGVtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjZ9LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV0sIC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3hbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplW19uZ2NvbnRlbnQtJUNPTVAlXXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHt9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7fS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWRbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5wYy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlYmViZWJ9LnBjLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDJweDtwYWRkaW5nOjAgMTZweH0ucGMtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtkaXNwbGF5OmlubGluZTtmbGV4OjEgMX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoR190LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InNlbGVjdGVkLWFubm90YXRpb25zLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vc2VsZWN0ZWRfYW5ub3RhdGlvbnNfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vc2VsZWN0ZWRfYW5ub3RhdGlvbnNfY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwse3BjRXhwYW5kZWQ6W3t0eXBlOnh5fV0sc2VsZWN0ZWRBbm5vdGF0aW9uczpbe3R5cGU6eHl9XSxvbkNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9uczpbe3R5cGU6T3l9XSxvblRvZ2dsZUV4cGFuZGVkOlt7dHlwZTpPeX1dfSk7Y2xhc3MgV190e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLnBjRXhwYW5kZWQkPXRoaXMuc3RvcmUucGlwZShGdyhiYnQpKSx0aGlzLnNlbGVjdGVkQW5ub3RhdGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KGNidCl9Y2xlYXJTZWxlY3RlZEFubm90YXRpb25zKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChUYnQoKSl9dG9nZ2xlRXhwYW5kZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFVidCgpKX19ZnVuY3Rpb24gWV90KHQsZSl7MSZ0JiYoUm0oMCwiZGl2Iiw2KSxSbSgxLCJkaXYiLDcpLFRtKDIsIm5wbWktdmlvbGluLWZpbHRlcnMiLDgpLFJtKDMsImRpdiIsOSksVG0oNCwicnVucy1zZWxlY3RvciIpLEFtKCksQW0oKSxBbSgpKSwyJnQmJmR1KCJ3aWR0aCIsWW0oKS5zaWRlYmFyV2lkdGgsInB4Iil9ZnVuY3Rpb24gcV90KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiZGl2IiwxMCksVm0oIm1vdXNlZG93biIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaGkodCksWW0oKS5yZXNpemVHcmFiYmVkLmVtaXQoKX0pKSxBbSgpfX1mdW5jdGlvbiBaX3QodCxlKXsxJnQmJihSbSgwLCJkaXYiLDExKSxUbSgxLCJucG1pLWFubm90YXRpb25zLWxpc3QiLDEyKSxUbSgyLCJucG1pLXNlbGVjdGVkLWFubm90YXRpb25zIiksQW0oKSl9ZnVuY3Rpb24gWF90KHQsZSl7MSZ0JiYoUm0oMCwiZGl2IiwxMyksa3UoMSwiWW91IG5lZWQgdG8gc2VsZWN0IGF0IGxlYXN0IG9uZSBydW4uIiksQW0oKSl9ZnVuY3Rpb24gS190KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiZGl2IiwxNCksUm0oMSwiYnV0dG9uIiwxNSksVm0oImNsaWNrIiwoZnVuY3Rpb24gZSgpe3JldHVybiBoaSh0KSxZbSgpLnRvZ2dsZVNpZGViYXJFeHBhbmRlZC5lbWl0KCl9KSksVG0oMiwibWF0LWljb24iLDE2KSxBbSgpLEFtKCl9fVdfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V190KShTbShJdykpfSxXX3QuybVjbXA9dG8oe3R5cGU6V190LHNlbGVjdG9yczpbWyJucG1pLXNlbGVjdGVkLWFubm90YXRpb25zIl1dLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWzMsInBjRXhwYW5kZWQiLCJzZWxlY3RlZEFubm90YXRpb25zIiwib25DbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMiLCJvblRvZ2dsZUV4cGFuZGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJzZWxlY3RlZC1hbm5vdGF0aW9ucy1jb21wb25lbnQiLDApLFZtKCJvbkNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9ucyIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5jbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMoKX0pKSgib25Ub2dnbGVFeHBhbmRlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi50b2dnbGVFeHBhbmRlZCgpfSkpLEFoKDEsImFzeW5jIiksQWgoMiwiYXN5bmMiKSxBbSgpKSwyJmUmJkRtKCJwY0V4cGFuZGVkIixUaCgxLDIsbi5wY0V4cGFuZGVkJCkpKCJzZWxlY3RlZEFubm90YXRpb25zIixUaCgyLDQsbi5zZWxlY3RlZEFubm90YXRpb25zJCkpfSxkaXJlY3RpdmVzOltHX3RdLHBpcGVzOlt3TV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChXX3QsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1zZWxlY3RlZC1hbm5vdGF0aW9ucyIsdGVtcGxhdGU6J1xuICAgIDxzZWxlY3RlZC1hbm5vdGF0aW9ucy1jb21wb25lbnRcbiAgICAgIFtwY0V4cGFuZGVkXT0icGNFeHBhbmRlZCQgfCBhc3luYyJcbiAgICAgIFtzZWxlY3RlZEFubm90YXRpb25zXT0ic2VsZWN0ZWRBbm5vdGF0aW9ucyQgfCBhc3luYyJcbiAgICAgIChvbkNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9ucyk9ImNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9ucygpIlxuICAgICAgKG9uVG9nZ2xlRXhwYW5kZWQpPSJ0b2dnbGVFeHBhbmRlZCgpIlxuICAgID48L3NlbGVjdGVkLWFubm90YXRpb25zLWNvbXBvbmVudD5cbiAgJyxjaGFuZ2VEZXRlY3Rpb246em4uT25QdXNofV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLG51bGwpO2NsYXNzIEpfdHtjb25zdHJ1Y3Rvcigpe3RoaXMudG9nZ2xlU2lkZWJhckV4cGFuZGVkPW5ldyBMaCx0aGlzLnJlc2l6ZVRyaWdnZXJlZD1uZXcgTGgsdGhpcy5yZXNpemVHcmFiYmVkPW5ldyBMaCx0aGlzLnJlc2l6ZVJlbGVhc2VkPW5ldyBMaH19Sl90Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxKX3QpfSxKX3QuybVjbXA9dG8oe3R5cGU6Sl90LHNlbGVjdG9yczpbWyJtYWluLWNvbXBvbmVudCJdXSxpbnB1dHM6e3J1bkFjdGl2ZToicnVuQWN0aXZlIixzaWRlYmFyRXhwYW5kZWQ6InNpZGViYXJFeHBhbmRlZCIsc2lkZWJhcldpZHRoOiJzaWRlYmFyV2lkdGgifSxvdXRwdXRzOnt0b2dnbGVTaWRlYmFyRXhwYW5kZWQ6InRvZ2dsZVNpZGViYXJFeHBhbmRlZCIscmVzaXplVHJpZ2dlcmVkOiJyZXNpemVUcmlnZ2VyZWQiLHJlc2l6ZUdyYWJiZWQ6InJlc2l6ZUdyYWJiZWQiLHJlc2l6ZVJlbGVhc2VkOiJyZXNpemVSZWxlYXNlZCJ9LGRlY2xzOjgsdmFyczo1LGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUmJm5nSTE4bkNsb3N1cmVNb2RlP2dvb2cuZ2V0TXNnKCJUb2dnbGUgU2lkZWJhciIpOiRsb2NhbGl6ZWA6TGFiZWwgZm9yIGEgYnV0dG9uIHRoYXQgdG9nZ2xlcyB0aGUgc2lkZWJhci7ikJ9mNjNiNTc5MzJkMTc5Y2NhNjJhYzlmY2FlNjNkZDdmNWU2ZmEzODlm4pCfNDQ4NTAwOTM0NzQ0NDcwNDg3ODpUb2dnbGUgU2lkZWJhcmAsW1sxLCJjb250ZW50IiwzLCJtb3VzZXVwIiwibW91c2Vtb3ZlIl0sWyJjbGFzcyIsInNpZGViYXItY29udGFpbmVyIiwzLCJ3aWR0aCIsNCwibmdJZiJdLFsiY2xhc3MiLCJncmFiYmVyIiwzLCJtb3VzZWRvd24iLDQsIm5nSWYiXSxbImNsYXNzIiwiYW5hbHlzaXMtY29udGFpbmVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vUnVuIiwiIl0sWyJjbGFzcyIsInNpZGUtdG9nZ2xlIiw0LCJuZ0lmIl0sWzEsInNpZGViYXItY29udGFpbmVyIl0sWzEsInNpZGViYXItY29udGVudHMiXSxbMSwidmlvbGluLWZpbHRlcnMiXSxbMSwicnVuLXNlbGVjdG9yIl0sWzEsImdyYWJiZXIiLDMsIm1vdXNlZG93biJdLFsxLCJhbmFseXNpcy1jb250YWluZXIiXSxbMSwiYW5ub3RhdGlvbnMtbGlzdCJdLFsxLCJub1J1biJdLFsxLCJzaWRlLXRvZ2dsZSJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJjbGljayJdLFsic3ZnSWNvbiIsImNoZXZyb25fcmlnaHRfMjRweCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFRtKDAsIm5wbWktZGF0YS1zZWxlY3Rpb24iKSxSbSgxLCJkaXYiLDApLFZtKCJtb3VzZXVwIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLnJlc2l6ZVJlbGVhc2VkLmVtaXQoKX0pKSgibW91c2Vtb3ZlIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5yZXNpemVUcmlnZ2VyZWQuZW1pdChlKX0pKSxRcCgyLFlfdCw1LDIsImRpdiIsMSksUXAoMyxxX3QsMSwwLCJkaXYiLDIpLFFwKDQsWl90LDMsMCwiZGl2IiwzKSxRcCg1LFhfdCwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDQsaWIpLEFtKCksUXAoNyxLX3QsMywwLCJkaXYiLDUpKSwyJmUpe2NvbnN0IHQ9JHAoNik7cmMoMiksRG0oIm5nSWYiLG4uc2lkZWJhckV4cGFuZGVkKSxyYygxKSxEbSgibmdJZiIsbi5zaWRlYmFyRXhwYW5kZWQpLHJjKDEpLERtKCJuZ0lmIiwhMD09PW4ucnVuQWN0aXZlKSgibmdJZkVsc2UiLHQpLHJjKDMpLERtKCJuZ0lmIiwhbi5zaWRlYmFyRXhwYW5kZWQpfX0sZGlyZWN0aXZlczpbVXl0LGRNLEp5dCxjMixIX3QsV190LFhILERXXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4OjE7bWluLWhlaWdodDowcHg7d2lkdGg6MTAwJX0uc2lkZWJhci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0uc2lkZWJhci1jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MTUwcHh9LmFuYWx5c2lzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtmbGV4OjEgMX0ucnVuLXNlbGVjdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtaGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0udmlvbGluLWZpbHRlcnNbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6MHB4O3dpZHRoOjEwMCV9LnNpZGUtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDozMHB4O2hlaWdodDozMHB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTBweDtib3R0b206MTBweDtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czozcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5ncmFiYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250ZW50OiIiO2N1cnNvcjpldy1yZXNpemU7aGVpZ2h0OjEwMCU7d2lkdGg6M3B4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0uYW5ub3RhdGlvbnMtbGlzdFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTttaW4taGVpZ2h0OjBweDtmbGV4OjEgMX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoSl90LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im1haW4tY29tcG9uZW50Iix0ZW1wbGF0ZVVybDoiLi9tYWluX2NvbXBvbmVudC5uZy5odG1sIixzdHlsZVVybHM6WyIuL21haW5fY29tcG9uZW50LmNzcyJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwse3J1bkFjdGl2ZTpbe3R5cGU6eHl9XSxzaWRlYmFyRXhwYW5kZWQ6W3t0eXBlOnh5fV0sc2lkZWJhcldpZHRoOlt7dHlwZTp4eX1dLHRvZ2dsZVNpZGViYXJFeHBhbmRlZDpbe3R5cGU6T3l9XSxyZXNpemVUcmlnZ2VyZWQ6W3t0eXBlOk95fV0scmVzaXplR3JhYmJlZDpbe3R5cGU6T3l9XSxyZXNpemVSZWxlYXNlZDpbe3R5cGU6T3l9XX0pO2NsYXNzIFFfdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5ydW5BY3RpdmUkPXRoaXMuc3RvcmUucGlwZShGdyhOTikpLnBpcGUoSXQoKHQ9PiEhdCYmWy4uLnQudmFsdWVzKCldLmluY2x1ZGVzKCEwKSkpKSx0aGlzLnNpZGViYXJFeHBhbmRlZCQ9dGhpcy5zdG9yZS5waXBlKEZ3KF9idCkpLHRoaXMuc2lkZWJhcldpZHRoJD10aGlzLnN0b3JlLnBpcGUoRncoeGJ0KSksdGhpcy5yZXNpemluZz0hMX1vblRvZ2dsZVNpZGViYXJFeHBhbmRlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goV2J0KCkpfW9uUmVzaXplVHJpZ2dlcmVkKHQpe3RoaXMucmVzaXppbmcmJnRoaXMuc3RvcmUuZGlzcGF0Y2goWGJ0KHtzaWRlYmFyV2lkdGg6dC5jbGllbnRYfSkpfW9uUmVzaXplR3JhYmJlZCgpe3RoaXMucmVzaXppbmc9ITB9b25SZXNpemVSZWxlYXNlZCgpe3RoaXMucmVzaXppbmc9ITF9fWZ1bmN0aW9uICRfdCh0LGUpezEmdCYmKFJtKDAsImRpdiIsNiksUm0oMSwiZGl2Iiw3KSxSbSgyLCJkaXYiLDgpLFRtKDMsInJ1bnMtc2VsZWN0b3IiKSxBbSgpLEFtKCksQW0oKSksMiZ0JiZkdSgid2lkdGgiLFltKCkuc2lkZWJhcldpZHRoLCJweCIpfWZ1bmN0aW9uIHRDdCh0LGUpe2lmKDEmdCl7Y29uc3QgdD1IbSgpO1JtKDAsImRpdiIsOSksVm0oIm1vdXNlZG93biIsKGZ1bmN0aW9uIGUoKXtyZXR1cm4gaGkodCksWW0oKS5yZXNpemVHcmFiYmVkLmVtaXQoKX0pKSxBbSgpfX1mdW5jdGlvbiBlQ3QodCxlKXsxJnQmJihSbSgwLCJkaXYiLDEwKSxUbSgxLCJucG1pLWFubm90YXRpb25zLWxpc3QiLDExKSxUbSgyLCJucG1pLXNlbGVjdGVkLWFubm90YXRpb25zIiksQW0oKSl9ZnVuY3Rpb24gbkN0KHQsZSl7MSZ0JiYoUm0oMCwiZGl2IiwxMiksa3UoMSwiWW91IG5lZWQgdG8gc2VsZWN0IGF0IGxlYXN0IG9uZSBydW4uIiksQW0oKSl9ZnVuY3Rpb24gb0N0KHQsZSl7aWYoMSZ0KXtjb25zdCB0PUhtKCk7Um0oMCwiZGl2IiwxMyksUm0oMSwiYnV0dG9uIiwxNCksVm0oImNsaWNrIiwoZnVuY3Rpb24gZSgpe3JldHVybiBoaSh0KSxZbSgpLnRvZ2dsZVNpZGViYXJFeHBhbmRlZC5lbWl0KCl9KSksVG0oMiwibWF0LWljb24iLDE1KSxBbSgpLEFtKCl9fVFfdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8UV90KShTbShJdykpfSxRX3QuybVjbXA9dG8oe3R5cGU6UV90LHNlbGVjdG9yczpbWyJucG1pLW1haW4iXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywicnVuQWN0aXZlIiwic2lkZWJhckV4cGFuZGVkIiwic2lkZWJhcldpZHRoIiwidG9nZ2xlU2lkZWJhckV4cGFuZGVkIiwicmVzaXplVHJpZ2dlcmVkIiwicmVzaXplR3JhYmJlZCIsInJlc2l6ZVJlbGVhc2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihSbSgwLCJtYWluLWNvbXBvbmVudCIsMCksVm0oInRvZ2dsZVNpZGViYXJFeHBhbmRlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblRvZ2dsZVNpZGViYXJFeHBhbmRlZCgpfSkpKCJyZXNpemVUcmlnZ2VyZWQiLChmdW5jdGlvbiB0KGUpe3JldHVybiBuLm9uUmVzaXplVHJpZ2dlcmVkKGUpfSkpKCJyZXNpemVHcmFiYmVkIiwoZnVuY3Rpb24gdCgpe3JldHVybiBuLm9uUmVzaXplR3JhYmJlZCgpfSkpKCJyZXNpemVSZWxlYXNlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblJlc2l6ZVJlbGVhc2VkKCl9KSksQWgoMSwiYXN5bmMiKSxBaCgyLCJhc3luYyIpLEFoKDMsImFzeW5jIiksQW0oKSksMiZlJiZEbSgicnVuQWN0aXZlIixUaCgxLDMsbi5ydW5BY3RpdmUkKSkoInNpZGViYXJFeHBhbmRlZCIsVGgoMiw1LG4uc2lkZWJhckV4cGFuZGVkJCkpKCJzaWRlYmFyV2lkdGgiLFRoKDMsNyxuLnNpZGViYXJXaWR0aCQpKX0sZGlyZWN0aXZlczpbSl90XSxwaXBlczpbd01dLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoUV90LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6Im5wbWktbWFpbiIsdGVtcGxhdGU6J1xuICAgIDxtYWluLWNvbXBvbmVudFxuICAgICAgW3J1bkFjdGl2ZV09InJ1bkFjdGl2ZSQgfCBhc3luYyJcbiAgICAgIFtzaWRlYmFyRXhwYW5kZWRdPSJzaWRlYmFyRXhwYW5kZWQkIHwgYXN5bmMiXG4gICAgICBbc2lkZWJhcldpZHRoXT0ic2lkZWJhcldpZHRoJCB8IGFzeW5jIlxuICAgICAgKHRvZ2dsZVNpZGViYXJFeHBhbmRlZCk9Im9uVG9nZ2xlU2lkZWJhckV4cGFuZGVkKCkiXG4gICAgICAocmVzaXplVHJpZ2dlcmVkKT0ib25SZXNpemVUcmlnZ2VyZWQoJGV2ZW50KSJcbiAgICAgIChyZXNpemVHcmFiYmVkKT0ib25SZXNpemVHcmFiYmVkKCkiXG4gICAgICAocmVzaXplUmVsZWFzZWQpPSJvblJlc2l6ZVJlbGVhc2VkKCkiXG4gICAgPjwvbWFpbi1jb21wb25lbnQ+XG4gICcsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fV19KSxudWxsKTtjbGFzcyBpQ3R7Y29uc3RydWN0b3IoKXt0aGlzLnRvZ2dsZVNpZGViYXJFeHBhbmRlZD1uZXcgTGgsdGhpcy5yZXNpemVUcmlnZ2VyZWQ9bmV3IExoLHRoaXMucmVzaXplR3JhYmJlZD1uZXcgTGgsdGhpcy5yZXNpemVSZWxlYXNlZD1uZXcgTGh9fWlDdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8aUN0KX0saUN0Lsm1Y21wPXRvKHt0eXBlOmlDdCxzZWxlY3RvcnM6W1siZW1iZWRkaW5ncy1jb21wb25lbnQiXV0saW5wdXRzOntydW5BY3RpdmU6InJ1bkFjdGl2ZSIsc2lkZWJhckV4cGFuZGVkOiJzaWRlYmFyRXhwYW5kZWQiLHNpZGViYXJXaWR0aDoic2lkZWJhcldpZHRoIn0sb3V0cHV0czp7dG9nZ2xlU2lkZWJhckV4cGFuZGVkOiJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLHJlc2l6ZVRyaWdnZXJlZDoicmVzaXplVHJpZ2dlcmVkIixyZXNpemVHcmFiYmVkOiJyZXNpemVHcmFiYmVkIixyZXNpemVSZWxlYXNlZDoicmVzaXplUmVsZWFzZWQifSxkZWNsczo4LHZhcnM6NSxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0idW5kZWZpbmVkIiE9dHlwZW9mIG5nSTE4bkNsb3N1cmVNb2RlJiZuZ0kxOG5DbG9zdXJlTW9kZT9nb29nLmdldE1zZygiVG9nZ2xlIFNpZGViYXIiKTokbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IHRvZ2dsZXMgdGhlIHNpZGViYXIu4pCfZjYzYjU3OTMyZDE3OWNjYTYyYWM5ZmNhZTYzZGQ3ZjVlNmZhMzg5ZuKQnzQ0ODUwMDkzNDc0NDQ3MDQ4Nzg6VG9nZ2xlIFNpZGViYXJgLFtbMSwiY29udGVudCIsMywibW91c2V1cCIsIm1vdXNlbW92ZSJdLFsiY2xhc3MiLCJzaWRlYmFyLWNvbnRhaW5lciIsMywid2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwiZ3JhYmJlciIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFuYWx5c2lzLWNvbnRhaW5lciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub1J1biIsIiJdLFsiY2xhc3MiLCJzaWRlLXRvZ2dsZSIsNCwibmdJZiJdLFsxLCJzaWRlYmFyLWNvbnRhaW5lciJdLFsxLCJzaWRlYmFyLWNvbnRlbnRzIl0sWzEsInJ1bi1zZWxlY3RvciJdLFsxLCJncmFiYmVyIiwzLCJtb3VzZWRvd24iXSxbMSwiYW5hbHlzaXMtY29udGFpbmVyIl0sWzEsImFubm90YXRpb25zLWxpc3QiXSxbMSwibm9SdW4iXSxbMSwic2lkZS10b2dnbGUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjaGV2cm9uX3JpZ2h0XzI0cHgiXV19LHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXtpZigxJmUmJihUbSgwLCJucG1pLWRhdGEtc2VsZWN0aW9uIiksUm0oMSwiZGl2IiwwKSxWbSgibW91c2V1cCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5yZXNpemVSZWxlYXNlZC5lbWl0KCl9KSkoIm1vdXNlbW92ZSIsKGZ1bmN0aW9uIHQoZSl7cmV0dXJuIG4ucmVzaXplVHJpZ2dlcmVkLmVtaXQoZSl9KSksUXAoMiwkX3QsNCwyLCJkaXYiLDEpLFFwKDMsdEN0LDEsMCwiZGl2IiwyKSxRcCg0LGVDdCwzLDAsImRpdiIsMyksUXAoNSxuQ3QsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw0LGliKSxBbSgpLFFwKDcsb0N0LDMsMCwiZGl2Iiw1KSksMiZlKXtjb25zdCB0PSRwKDYpO3JjKDIpLERtKCJuZ0lmIixuLnNpZGViYXJFeHBhbmRlZCkscmMoMSksRG0oIm5nSWYiLG4uc2lkZWJhckV4cGFuZGVkKSxyYygxKSxEbSgibmdJZiIsITA9PT1uLnJ1bkFjdGl2ZSkoIm5nSWZFbHNlIix0KSxyYygzKSxEbSgibmdJZiIsIW4uc2lkZWJhckV4cGFuZGVkKX19LGRpcmVjdGl2ZXM6W1V5dCxkTSxjMixIX3QsV190LFhILERXXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4OjE7bWluLWhlaWdodDowcHg7d2lkdGg6MTAwJX0uc2lkZWJhci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0uc2lkZWJhci1jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MTUwcHh9LmFuYWx5c2lzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtmbGV4OjEgMX0ucnVuLXNlbGVjdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtaGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uc2lkZS10b2dnbGVbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMHB4O2JvdHRvbToxMHB4O2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjNweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmdyYWJiZXJbX25nY29udGVudC0lQ09NUCVde2NvbnRlbnQ6IiI7Y3Vyc29yOmV3LXJlc2l6ZTtoZWlnaHQ6MTAwJTt3aWR0aDozcHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5hbm5vdGF0aW9ucy1saXN0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MHB4O2ZsZXg6MSAxfSddLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChpQ3QsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoiZW1iZWRkaW5ncy1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL2VtYmVkZGluZ3NfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vZW1iZWRkaW5nc19jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sbnVsbCx7cnVuQWN0aXZlOlt7dHlwZTp4eX1dLHNpZGViYXJFeHBhbmRlZDpbe3R5cGU6eHl9XSxzaWRlYmFyV2lkdGg6W3t0eXBlOnh5fV0sdG9nZ2xlU2lkZWJhckV4cGFuZGVkOlt7dHlwZTpPeX1dLHJlc2l6ZVRyaWdnZXJlZDpbe3R5cGU6T3l9XSxyZXNpemVHcmFiYmVkOlt7dHlwZTpPeX1dLHJlc2l6ZVJlbGVhc2VkOlt7dHlwZTpPeX1dfSk7Y2xhc3MgYUN0e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLnJ1bkFjdGl2ZSQ9dGhpcy5zdG9yZS5waXBlKEZ3KE5OKSkucGlwZShJdCgodD0+ISF0JiZbLi4udC52YWx1ZXMoKV0uaW5jbHVkZXMoITApKSkpLHRoaXMuc2lkZWJhckV4cGFuZGVkJD10aGlzLnN0b3JlLnBpcGUoRncod2J0KSksdGhpcy5zaWRlYmFyV2lkdGgkPXRoaXMuc3RvcmUucGlwZShGdyhQYnQpKSx0aGlzLnJlc2l6aW5nPSExfW9uVG9nZ2xlU2lkZWJhckV4cGFuZGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChKYnQoKSl9b25SZXNpemVUcmlnZ2VyZWQodCl7dGhpcy5yZXNpemluZyYmdGhpcy5zdG9yZS5kaXNwYXRjaChLYnQoe3NpZGViYXJXaWR0aDp0LmNsaWVudFh9KSl9b25SZXNpemVHcmFiYmVkKCl7dGhpcy5yZXNpemluZz0hMH1vblJlc2l6ZVJlbGVhc2VkKCl7dGhpcy5yZXNpemluZz0hMX19ZnVuY3Rpb24gckN0KHQsZSl7MSZ0JiZUbSgwLCJucG1pLWluYWN0aXZlLXZpZXciKX1mdW5jdGlvbiBzQ3QodCxlKXsxJnQmJlRtKDAsIm5wbWktbWFpbiIpfWZ1bmN0aW9uIGxDdCh0LGUpezEmdCYmVG0oMCwibnBtaS1lbWJlZGRpbmdzIil9ZnVuY3Rpb24gY0N0KHQsZSl7aWYoMSZ0JiYoUXAoMCxzQ3QsMSwwLCJucG1pLW1haW4iLDMpLFFwKDEsbEN0LDEsMCwibnBtaS1lbWJlZGRpbmdzIiwzKSksMiZ0KXtjb25zdCB0PVltKCk7RG0oIm5nSWYiLHQuYWN0aXZlVmlldz09PXQuVmlld0FjdGl2ZS5ERUZBVUxUKSxyYygxKSxEbSgibmdJZiIsdC5hY3RpdmVWaWV3PT09dC5WaWV3QWN0aXZlLkVNQkVERElOR1MpfX1hQ3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGFDdCkoU20oSXcpKX0sYUN0Lsm1Y21wPXRvKHt0eXBlOmFDdCxzZWxlY3RvcnM6W1sibnBtaS1lbWJlZGRpbmdzIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJ1bkFjdGl2ZSIsInNpZGViYXJFeHBhbmRlZCIsInNpZGViYXJXaWR0aCIsInRvZ2dsZVNpZGViYXJFeHBhbmRlZCIsInJlc2l6ZVRyaWdnZXJlZCIsInJlc2l6ZUdyYWJiZWQiLCJyZXNpemVSZWxlYXNlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiYoUm0oMCwiZW1iZWRkaW5ncy1jb21wb25lbnQiLDApLFZtKCJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKX0pKSgicmVzaXplVHJpZ2dlcmVkIiwoZnVuY3Rpb24gdChlKXtyZXR1cm4gbi5vblJlc2l6ZVRyaWdnZXJlZChlKX0pKSgicmVzaXplR3JhYmJlZCIsKGZ1bmN0aW9uIHQoKXtyZXR1cm4gbi5vblJlc2l6ZUdyYWJiZWQoKX0pKSgicmVzaXplUmVsZWFzZWQiLChmdW5jdGlvbiB0KCl7cmV0dXJuIG4ub25SZXNpemVSZWxlYXNlZCgpfSkpLEFoKDEsImFzeW5jIiksQWgoMiwiYXN5bmMiKSxBaCgzLCJhc3luYyIpLEFtKCkpLDImZSYmRG0oInJ1bkFjdGl2ZSIsVGgoMSwzLG4ucnVuQWN0aXZlJCkpKCJzaWRlYmFyRXhwYW5kZWQiLFRoKDIsNSxuLnNpZGViYXJFeHBhbmRlZCQpKSgic2lkZWJhcldpZHRoIixUaCgzLDcsbi5zaWRlYmFyV2lkdGgkKSl9LGRpcmVjdGl2ZXM6W2lDdF0scGlwZXM6W3dNXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGFDdCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJucG1pLWVtYmVkZGluZ3MiLHRlbXBsYXRlOidcbiAgICA8ZW1iZWRkaW5ncy1jb21wb25lbnRcbiAgICAgIFtydW5BY3RpdmVdPSJydW5BY3RpdmUkIHwgYXN5bmMiXG4gICAgICBbc2lkZWJhckV4cGFuZGVkXT0ic2lkZWJhckV4cGFuZGVkJCB8IGFzeW5jIlxuICAgICAgW3NpZGViYXJXaWR0aF09InNpZGViYXJXaWR0aCQgfCBhc3luYyJcbiAgICAgICh0b2dnbGVTaWRlYmFyRXhwYW5kZWQpPSJvblRvZ2dsZVNpZGViYXJFeHBhbmRlZCgpIlxuICAgICAgKHJlc2l6ZVRyaWdnZXJlZCk9Im9uUmVzaXplVHJpZ2dlcmVkKCRldmVudCkiXG4gICAgICAocmVzaXplR3JhYmJlZCk9Im9uUmVzaXplR3JhYmJlZCgpIlxuICAgICAgKHJlc2l6ZVJlbGVhc2VkKT0ib25SZXNpemVSZWxlYXNlZCgpIlxuICAgID48L2VtYmVkZGluZ3MtY29tcG9uZW50PlxuICAnLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd31dfSksbnVsbCk7Y2xhc3MgZEN0e2NvbnN0cnVjdG9yKCl7dGhpcy5WaWV3QWN0aXZlPWVidH19ZEN0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkQ3QpfSxkQ3QuybVjbXA9dG8oe3R5cGU6ZEN0LHNlbGVjdG9yczpbWyJucG1pLWNvbXBvbmVudCJdXSxpbnB1dHM6e3J1bnM6InJ1bnMiLGFjdGl2ZVZpZXc6ImFjdGl2ZVZpZXcifSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJucG1pLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImRhdGFBdmFpbGFibGUiLCIiXSxbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7aWYoMSZlJiYoUm0oMCwiZGl2IiwwKSxRcCgxLHJDdCwxLDAsIm5wbWktaW5hY3RpdmUtdmlldyIsMSksUXAoMixjQ3QsMiwyLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLGliKSxBbSgpKSwyJmUpe2NvbnN0IHQ9JHAoMyk7cmMoMSksRG0oIm5nSWYiLDA9PT1uLnJ1bnMuc2l6ZSkoIm5nSWZFbHNlIix0KX19LGRpcmVjdGl2ZXM6W2RNLG9idCxRX3QsYUN0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJX0ubnBtaS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxfSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChkQ3QsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibnBtaS1jb21wb25lbnQiLHRlbXBsYXRlVXJsOiIuL25wbWlfY29tcG9uZW50Lm5nLmh0bWwiLHN0eWxlVXJsczpbIi4vbnBtaV9jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sbnVsbCx7cnVuczpbe3R5cGU6eHl9XSxhY3RpdmVWaWV3Olt7dHlwZTp4eX1dfSk7Y2xhc3MgcEN0e2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RvcmU9dCx0aGlzLnJ1bnMkPXRoaXMuc3RvcmUucGlwZShGdyhOTikpLHRoaXMuYWN0aXZlVmlldyQ9dGhpcy5zdG9yZS5waXBlKEZ3KHZidCkpfW5nT25Jbml0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaChrYnQoKSl9fXBDdC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cEN0KShTbShJdykpfSxwQ3QuybVjbXA9dG8oe3R5cGU6cEN0LHNlbGVjdG9yczpbWyJucG1pIl1dLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWzMsInJ1bnMiLCJhY3RpdmVWaWV3Il1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihUbSgwLCJucG1pLWNvbXBvbmVudCIsMCksQWgoMSwiYXN5bmMiKSxBaCgyLCJhc3luYyIpKSwyJmUmJkRtKCJydW5zIixUaCgxLDIsbi5ydW5zJCkpKCJhY3RpdmVWaWV3IixUaCgyLDQsbi5hY3RpdmVWaWV3JCkpfSxkaXJlY3RpdmVzOltkQ3RdLHBpcGVzOlt3TV0sZW5jYXBzdWxhdGlvbjoyfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChwQ3QsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoibnBtaSIsdGVtcGxhdGU6J1xuICAgIDxucG1pLWNvbXBvbmVudFxuICAgICAgW3J1bnNdPSJydW5zJCB8IGFzeW5jIlxuICAgICAgW2FjdGl2ZVZpZXddPSJhY3RpdmVWaWV3JCB8IGFzeW5jIlxuICAgID48L25wbWktY29tcG9uZW50PlxuICAnfV19XSwoZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6SXd9XX0pLG51bGwpO3ZhciBtQ3Q9e30sdUN0PXt9LGZDdD17fSxnQ3Q9e30saEN0PVF2JiZRdi5fX3ZhbHVlc3x8ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdLG49MDtyZXR1cm4gZT9lLmNhbGwodCk6e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCYmbj49dC5sZW5ndGgmJih0PXZvaWQgMCkse3ZhbHVlOnQmJnRbbisrXSxkb25lOiF0fX19fTtmdW5jdGlvbiBiQ3QodCxlKXtyZXR1cm4gTWF0aC5mbG9vcihlKCkqdCl9ZnVuY3Rpb24geUN0KHQpe2Zvcih2YXIgZT1bXSxuPTA7bjx0O24rKyllLnB1c2godm9pZCAwKTtyZXR1cm4gZX1mdW5jdGlvbiBfQ3QodCxlKXtyZXR1cm4geUN0KHQpLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gZX0pKX1mdW5jdGlvbiBDQ3QodCl7cmV0dXJuIF9DdCh0LDApfWZ1bmN0aW9uIE1DdCh0KXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZ0N0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxnQ3QudGF1UmFuZEludD1iQ3QsZ0N0LnRhdVJhbmQ9ZnVuY3Rpb24gdkN0KHQpe3JldHVybiB0KCl9LGdDdC5ub3JtPWZ1bmN0aW9uIHhDdCh0KXt2YXIgZSxuLG89MDt0cnl7Zm9yKHZhciBpPWhDdCh0KSxhPWkubmV4dCgpOyFhLmRvbmU7YT1pLm5leHQoKSlvKz1NYXRoLnBvdyhhLnZhbHVlLDIpfWNhdGNoKHQpe2U9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2EmJiFhLmRvbmUmJihuPWkucmV0dXJuKSYmbi5jYWxsKGkpfWZpbmFsbHl7aWYoZSl0aHJvdyBlLmVycm9yfX1yZXR1cm4gTWF0aC5zcXJ0KG8pfSxnQ3QuZW1wdHk9eUN0LGdDdC5yYW5nZT1mdW5jdGlvbiBPQ3QodCl7cmV0dXJuIHlDdCh0KS5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSl9LGdDdC5maWxsZWQ9X0N0LGdDdC56ZXJvcz1DQ3QsZ0N0Lm9uZXM9ZnVuY3Rpb24gUEN0KHQpe3JldHVybiBfQ3QodCwxKX0sZ0N0LmxpbmVhcj1mdW5jdGlvbiB3Q3QodCxlLG4pe3JldHVybiB5Q3QobikubWFwKChmdW5jdGlvbihvLGkpe3JldHVybiB0K2kqKChlLXQpLyhuLTEpKX0pKX0sZ0N0LnN1bT1NQ3QsZ0N0Lm1lYW49ZnVuY3Rpb24ga0N0KHQpe3JldHVybiBNQ3QodCkvdC5sZW5ndGh9LGdDdC5tYXg9ZnVuY3Rpb24gU0N0KHQpe2Zvcih2YXIgZT0wLG49MDtuPHQubGVuZ3RoO24rKyllPXRbbl0+ZT90W25dOmU7cmV0dXJuIGV9LGdDdC5tYXgyZD1mdW5jdGlvbiBEQ3QodCl7Zm9yKHZhciBlPTAsbj0wO248dC5sZW5ndGg7bisrKWZvcih2YXIgbz0wO288dFtuXS5sZW5ndGg7bysrKWU9dFtuXVtvXT5lP3Rbbl1bb106ZTtyZXR1cm4gZX0sZ0N0LnJlamVjdGlvblNhbXBsZT1mdW5jdGlvbiBFQ3QodCxlLG4pe2Zvcih2YXIgbz1DQ3QodCksaT0wO2k8dDtpKyspZm9yKHZhciBhPSEwO2E7KXtmb3IodmFyIHI9YkN0KGUsbikscz0hMSxsPTA7bDxpO2wrKylpZihyPT09b1tsXSl7cz0hMDticmVha31zfHwoYT0hMSksb1tpXT1yfXJldHVybiBvfSxnQ3QucmVzaGFwZTJkPWZ1bmN0aW9uIFJDdCh0LGUsbil7dmFyIG89W10saT0wO2lmKHQubGVuZ3RoIT09ZSpuKXRocm93IG5ldyBFcnJvcigiQXJyYXkgZGltZW5zaW9ucyBtdXN0IG1hdGNoIGlucHV0IGxlbmd0aC4iKTtmb3IodmFyIGE9MDthPGU7YSsrKXtmb3IodmFyIHI9W10scz0wO3M8bjtzKyspci5wdXNoKHRbaV0pLGkrPTE7by5wdXNoKHIpfXJldHVybiBvfTt2YXIgQUN0PVF2JiZRdi5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKHQpe2lmKHQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgZT17fTtpZihudWxsIT10KWZvcih2YXIgbiBpbiB0KU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pO3JldHVybiBlLmRlZmF1bHQ9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZkN0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgVEN0PUFDdChnQ3QpO2Z1bmN0aW9uIE5DdCh0LGUpe3ZhciBuPWZ1bmN0aW9uKG4pe3JldHVybiBUQ3QuZW1wdHkodCkubWFwKChmdW5jdGlvbigpe3JldHVybiBUQ3QuZmlsbGVkKGUsbil9KSl9LG89W107cmV0dXJuIG8ucHVzaChuKC0xKSksby5wdXNoKG4oMS8wKSksby5wdXNoKG4oMCkpLG99ZnVuY3Rpb24gekN0KHQsZSxuLG8saSl7ZT1NYXRoLmZsb29yKGUpO3ZhciBhPXRbMF1bZV07aWYobj49dFsxXVtlXVswXSlyZXR1cm4gMDtmb3IodmFyIHI9MDtyPGEubGVuZ3RoO3IrKylpZihvPT09YVtyXSlyZXR1cm4gMDtyZXR1cm4gSUN0KHQsZSxuLG8saSl9ZnVuY3Rpb24gSUN0KHQsZSxuLG8saSl7dmFyIGE9dFswXVtlXSxyPXRbMV1bZV0scz10WzJdW2VdO2lmKG4+PXJbMF0pcmV0dXJuIDA7clswXT1uLGFbMF09byxzWzBdPWk7Zm9yKHZhciBsPTAsYz0wOzspe3ZhciBkPTIqbCsxLHA9ZCsxLG09dFswXVswXS5sZW5ndGg7aWYoZD49bSlicmVhaztpZihwPj1tKXtpZighKHJbZF0+bikpYnJlYWs7Yz1kfWVsc2UgaWYocltkXT49cltwXSl7aWYoIShuPHJbZF0pKWJyZWFrO2M9ZH1lbHNle2lmKCEobjxyW3BdKSlicmVhaztjPXB9cltsXT1yW2NdLGFbbF09YVtjXSxzW2xdPXNbY10sbD1jfXJldHVybiByW2xdPW4sYVtsXT1vLHNbbF09aSwxfWZ1bmN0aW9uIEhDdCh0LGUsbixvKXtmb3IoOzIqbysxPG47KXt2YXIgaT0yKm8rMSxhPWkrMSxyPW87aWYodFtyXTx0W2ldJiYocj1pKSxhPG4mJnRbcl08dFthXSYmKHI9YSkscj09PW8pYnJlYWs7dmFyIHM9dFtvXTt0W29dPXRbcl0sdFtyXT1zO3ZhciBsPWVbb107ZVtvXT1lW3JdLGVbcl09bCxvPXJ9fWZDdC5tYWtlSGVhcD1OQ3QsZkN0LnJlamVjdGlvblNhbXBsZT1mdW5jdGlvbiBGQ3QodCxlLG4pe2Zvcih2YXIgbz1UQ3QuemVyb3ModCksaT0wO2k8dDtpKyspe2Zvcih2YXIgYT0hMCxyPTA7YTspe3I9VEN0LnRhdVJhbmRJbnQoZSxuKTtmb3IodmFyIHM9ITEsbD0wO2w8aTtsKyspaWYocj09PW9bbF0pe3M9ITA7YnJlYWt9c3x8KGE9ITEpfW9baV09cn1yZXR1cm4gb30sZkN0LmhlYXBQdXNoPXpDdCxmQ3QudW5jaGVja2VkSGVhcFB1c2g9SUN0LGZDdC5idWlsZENhbmRpZGF0ZXM9ZnVuY3Rpb24gTEN0KHQsZSxuLG8saSl7Zm9yKHZhciBhPU5DdChlLG8pLHI9MDtyPGU7cisrKWZvcih2YXIgcz0wO3M8bjtzKyspaWYoISh0WzBdW3JdW3NdPDApKXt2YXIgbD10WzBdW3JdW3NdLGM9dFsyXVtyXVtzXSxkPVRDdC50YXVSYW5kKGkpO3pDdChhLHIsZCxsLGMpLHpDdChhLGwsZCxyLGMpLHRbMl1bcl1bc109MH1yZXR1cm4gYX0sZkN0LmRlaGVhcFNvcnQ9ZnVuY3Rpb24gQkN0KHQpe2Zvcih2YXIgZT10WzBdLG49dFsxXSxvPTA7bzxlLmxlbmd0aDtvKyspZm9yKHZhciBpPWVbb10sYT1uW29dLHI9MDtyPGkubGVuZ3RoLTE7cisrKXt2YXIgcz1pLmxlbmd0aC1yLTEsbD1hLmxlbmd0aC1yLTEsYz1pWzBdO2lbMF09aVtzXSxpW3NdPWM7dmFyIGQ9YVswXTthWzBdPWFbbF0sYVtsXT1kLEhDdChhLGksbCwwKX1yZXR1cm57aW5kaWNlczplLHdlaWdodHM6bn19LGZDdC5zbWFsbGVzdEZsYWdnZWQ9ZnVuY3Rpb24gVkN0KHQsZSl7Zm9yKHZhciBuPXRbMF1bZV0sbz10WzFdW2VdLGk9dFsyXVtlXSxhPTEvMCxyPS0xLHM9MDtzPm4ubGVuZ3RoO3MrKykxPT09aVtzXSYmb1tzXTxhJiYoYT1vW3NdLHI9cyk7cmV0dXJuIHI+PTA/KGlbcl09MCxNYXRoLmZsb29yKG5bcl0pKTotMX07dmFyIGpDdCxVQ3Q9e30sR0N0PVF2JiZRdi5fX3JlYWR8fGZ1bmN0aW9uKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiB0O3ZhciBvLGksYT1uLmNhbGwodCkscj1bXTt0cnl7Zm9yKDsodm9pZCAwPT09ZXx8ZS0tID4wKSYmIShvPWEubmV4dCgpKS5kb25lOylyLnB1c2goby52YWx1ZSl9Y2F0Y2godCl7aT17ZXJyb3I6dH19ZmluYWxseXt0cnl7byYmIW8uZG9uZSYmKG49YS5yZXR1cm4pJiZuLmNhbGwoYSl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fXJldHVybiByfSxXQ3Q9UXYmJlF2Ll9fdmFsdWVzfHxmdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl0sbj0wO3JldHVybiBlP2UuY2FsbCh0KTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiB0JiZuPj10Lmxlbmd0aCYmKHQ9dm9pZCAwKSx7dmFsdWU6dCYmdFtuKytdLGRvbmU6IXR9fX19LFlDdD1RdiYmUXYuX19pbXBvcnRTdGFyfHxmdW5jdGlvbih0KXtpZih0JiZ0Ll9fZXNNb2R1bGUpcmV0dXJuIHQ7dmFyIGU9e307aWYobnVsbCE9dClmb3IodmFyIG4gaW4gdClPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKTtyZXR1cm4gZS5kZWZhdWx0PXQsZX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFVDdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHFDdD1ZQ3QoZ0N0KSxaQ3Q9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixvKXtpZih0aGlzLmVudHJpZXM9bmV3IE1hcCx0aGlzLm5Sb3dzPTAsdGhpcy5uQ29scz0wLHQubGVuZ3RoIT09ZS5sZW5ndGh8fHQubGVuZ3RoIT09bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJyb3dzLCBjb2xzIGFuZCB2YWx1ZXMgYXJyYXlzIG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIik7dGhpcy5uUm93cz1vWzBdLHRoaXMubkNvbHM9b1sxXTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9dFtpXSxyPWVbaV07dGhpcy5jaGVja0RpbXMoYSxyKTt2YXIgcz10aGlzLm1ha2VLZXkoYSxyKTt0aGlzLmVudHJpZXMuc2V0KHMse3ZhbHVlOm5baV0scm93OmEsY29sOnJ9KX19cmV0dXJuIHQucHJvdG90eXBlLm1ha2VLZXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCsiOiIrZX0sdC5wcm90b3R5cGUuY2hlY2tEaW1zPWZ1bmN0aW9uKHQsZSl7aWYoISh0PHRoaXMublJvd3MmJmU8dGhpcy5uQ29scykpdGhyb3cgbmV3IEVycm9yKCJyb3cgYW5kL29yIGNvbCBzcGVjaWZpZWQgb3V0c2lkZSBvZiBtYXRyaXggZGltZW5zaW9ucyIpfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlLG4pe3RoaXMuY2hlY2tEaW1zKHQsZSk7dmFyIG89dGhpcy5tYWtlS2V5KHQsZSk7dGhpcy5lbnRyaWVzLmhhcyhvKT90aGlzLmVudHJpZXMuZ2V0KG8pLnZhbHVlPW46dGhpcy5lbnRyaWVzLnNldChvLHt2YWx1ZTpuLHJvdzp0LGNvbDplfSl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09biYmKG49MCksdGhpcy5jaGVja0RpbXModCxlKTt2YXIgbz10aGlzLm1ha2VLZXkodCxlKTtyZXR1cm4gdGhpcy5lbnRyaWVzLmhhcyhvKT90aGlzLmVudHJpZXMuZ2V0KG8pLnZhbHVlOm59LHQucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0hMCk7dmFyIGU9W107cmV0dXJuIHRoaXMuZW50cmllcy5mb3JFYWNoKChmdW5jdGlvbih0KXtlLnB1c2godCl9KSksdCYmZS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnJvdz09PWUucm93P3QuY29sLWUuY29sOnQucm93LWUucm93fSkpLGV9LHQucHJvdG90eXBlLmdldERpbXM9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5uUm93cyx0aGlzLm5Db2xzXX0sdC5wcm90b3R5cGUuZ2V0Um93cz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcywoZnVuY3Rpb24odCl7cmV0dXJuIEdDdCh0LDIpWzFdLnJvd30pKX0sdC5wcm90b3R5cGUuZ2V0Q29scz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcywoZnVuY3Rpb24odCl7cmV0dXJuIEdDdCh0LDIpWzFdLmNvbH0pKX0sdC5wcm90b3R5cGUuZ2V0VmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLChmdW5jdGlvbih0KXtyZXR1cm4gR0N0KHQsMilbMV0udmFsdWV9KSl9LHQucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCl7dGhpcy5lbnRyaWVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUudmFsdWUsZS5yb3csZS5jb2wpfSkpfSx0LnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24oZSl7dmFyIG49W107dGhpcy5lbnRyaWVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe24ucHVzaChlKHQudmFsdWUsdC5yb3csdC5jb2wpKX0pKTt2YXIgbz1bdGhpcy5uUm93cyx0aGlzLm5Db2xzXTtyZXR1cm4gbmV3IHQodGhpcy5nZXRSb3dzKCksdGhpcy5nZXRDb2xzKCksbixvKX0sdC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1xQ3QuZW1wdHkodGhpcy5uUm93cykubWFwKChmdW5jdGlvbigpe3JldHVybiBxQ3QuemVyb3ModC5uQ29scyl9KSk7cmV0dXJuIHRoaXMuZW50cmllcy5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3Qucm93XVt0LmNvbF09dC52YWx1ZX0pKSxlfSx0fSkoKTtVQ3QuU3BhcnNlTWF0cml4PVpDdCxVQ3QudHJhbnNwb3NlPWZ1bmN0aW9uIFhDdCh0KXt2YXIgZT1bXSxuPVtdLG89W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxpLGEpe2UucHVzaChpKSxuLnB1c2goYSksby5wdXNoKHQpfSkpLG5ldyBaQ3QobixlLG8sW3QubkNvbHMsdC5uUm93c10pfSxVQ3QuaWRlbnRpdHk9ZnVuY3Rpb24gS0N0KHQpe2Zvcih2YXIgZT1HQ3QodCwxKVswXSxuPW5ldyBaQ3QoW10sW10sW10sdCksbz0wO288ZTtvKyspbi5zZXQobyxvLDEpO3JldHVybiBufSxVQ3QucGFpcndpc2VNdWx0aXBseT1mdW5jdGlvbiBKQ3QodCxlKXtyZXR1cm4gYU10KHQsZSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCplfSkpfSxVQ3QuYWRkPWZ1bmN0aW9uIFFDdCh0LGUpe3JldHVybiBhTXQodCxlLChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSl9LFVDdC5zdWJ0cmFjdD1mdW5jdGlvbiAkQ3QodCxlKXtyZXR1cm4gYU10KHQsZSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpfSxVQ3QubWF4aW11bT1mdW5jdGlvbiB0TXQodCxlKXtyZXR1cm4gYU10KHQsZSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lP3Q6ZX0pKX0sVUN0Lm11bHRpcGx5U2NhbGFyPWZ1bmN0aW9uIGVNdCh0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQqZX0pKX0sVUN0LmVsaW1pbmF0ZVplcm9zPWZ1bmN0aW9uIG5NdCh0KXtmb3IodmFyIGU9bmV3IFNldCxuPXQuZ2V0VmFsdWVzKCksbz10LmdldFJvd3MoKSxpPXQuZ2V0Q29scygpLGE9MDthPG4ubGVuZ3RoO2ErKykwPT09blthXSYmZS5hZGQoYSk7dmFyIHI9ZnVuY3Rpb24odCxuKXtyZXR1cm4hZS5oYXMobil9LHM9bi5maWx0ZXIociksbD1vLmZpbHRlcihyKSxjPWkuZmlsdGVyKHIpO3JldHVybiBuZXcgWkN0KGwsYyxzLHQuZ2V0RGltcygpKX0sVUN0Lm5vcm1hbGl6ZT1mdW5jdGlvbiBvTXQodCxlKXt2YXIgbixvO3ZvaWQgMD09PWUmJihlPSJsMiIpO3ZhciBpPWlNdFtlXSxhPW5ldyBNYXA7dC5mb3JFYWNoKChmdW5jdGlvbih0LGUsbil7dmFyIG89YS5nZXQoZSl8fFtdO28ucHVzaChuKSxhLnNldChlLG8pfSkpO3ZhciByPW5ldyBaQ3QoW10sW10sW10sdC5nZXREaW1zKCkpLHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPWEuZ2V0KGUpLnNvcnQoKSxvPW4ubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gdC5nZXQoZSxuKX0pKSxzPWkobyksbD0wO2w8cy5sZW5ndGg7bCsrKXIuc2V0KGUsbltsXSxzW2xdKX07dHJ5e2Zvcih2YXIgbD1XQ3QoYS5rZXlzKCkpLGM9bC5uZXh0KCk7IWMuZG9uZTtjPWwubmV4dCgpKXMoYy52YWx1ZSl9Y2F0Y2godCl7bj17ZXJyb3I6dH19ZmluYWxseXt0cnl7YyYmIWMuZG9uZSYmKG89bC5yZXR1cm4pJiZvLmNhbGwobCl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiByfTt2YXIgaU10PSgoakN0PXt9KS5tYXg9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xLzAsbj0wO248dC5sZW5ndGg7bisrKWU9dFtuXT5lP3Rbbl06ZTtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0L2V9KSl9LGpDdC5sMT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPTA7bjx0Lmxlbmd0aDtuKyspZSs9dFtuXTtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0L2V9KSl9LGpDdC5sMj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPTA7bjx0Lmxlbmd0aDtuKyspZSs9TWF0aC5wb3codFtuXSwyKTtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKS9lKX0pKX0sakN0KTtmdW5jdGlvbiBhTXQodCxlLG4pe2Zvcih2YXIgbz1uZXcgU2V0LGk9W10sYT1bXSxyPVtdLHM9ZnVuY3Rpb24obyxzKXtpLnB1c2gobyksYS5wdXNoKHMpO3ZhciBsPW4odC5nZXQobyxzKSxlLmdldChvLHMpKTtyLnB1c2gobCl9LGw9dC5nZXRWYWx1ZXMoKSxjPXQuZ2V0Um93cygpLGQ9dC5nZXRDb2xzKCkscD0wO3A8bC5sZW5ndGg7cCsrKW8uYWRkKChnPWNbcF0pKyI6IisoaD1kW3BdKSkscyhnLGgpO3ZhciBtPWUuZ2V0VmFsdWVzKCksdT1lLmdldFJvd3MoKSxmPWUuZ2V0Q29scygpO2ZvcihwPTA7cDxtLmxlbmd0aDtwKyspe3ZhciBnLGg7by5oYXMoKGc9dVtwXSkrIjoiKyhoPWZbcF0pKXx8cyhnLGgpfXJldHVybiBuZXcgWkN0KGksYSxyLFt0Lm5Sb3dzLHQubkNvbHNdKX1VQ3QuZ2V0Q1NSPWZ1bmN0aW9uIHJNdCh0KXt2YXIgZT1bXTt0LmZvckVhY2goKGZ1bmN0aW9uKHQsbixvKXtlLnB1c2goe3ZhbHVlOnQscm93Om4sY29sOm99KX0pKSxlLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucm93PT09ZS5yb3c/dC5jb2wtZS5jb2w6dC5yb3ctZS5yb3d9KSk7Zm9yKHZhciBuPVtdLG89W10saT1bXSxhPS0xLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIHM9ZVtyXSxsPXMucm93LGM9cy5jb2wsZD1zLnZhbHVlO2whPT1hJiYoYT1sLGkucHVzaChyKSksbi5wdXNoKGMpLG8ucHVzaChkKX1yZXR1cm57aW5kaWNlczpuLHZhbHVlczpvLGluZHB0cjppfX07dmFyIHNNdD17fSxsTXQ9e30sY010PVF2JiZRdi5fX3JlYWR8fGZ1bmN0aW9uKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiB0O3ZhciBvLGksYT1uLmNhbGwodCkscj1bXTt0cnl7Zm9yKDsodm9pZCAwPT09ZXx8ZS0tID4wKSYmIShvPWEubmV4dCgpKS5kb25lOylyLnB1c2goby52YWx1ZSl9Y2F0Y2godCl7aT17ZXJyb3I6dH19ZmluYWxseXt0cnl7byYmIW8uZG9uZSYmKG49YS5yZXR1cm4pJiZuLmNhbGwoYSl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fXJldHVybiByfSxkTXQ9UXYmJlF2Ll9fc3ByZWFkfHxmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0PXQuY29uY2F0KGNNdChhcmd1bWVudHNbZV0pKTtyZXR1cm4gdH0scE10PVF2JiZRdi5fX3ZhbHVlc3x8ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdLG49MDtyZXR1cm4gZT9lLmNhbGwodCk6e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCYmbj49dC5sZW5ndGgmJih0PXZvaWQgMCkse3ZhbHVlOnQmJnRbbisrXSxkb25lOiF0fX19fSxtTXQ9UXYmJlF2Ll9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24odCl7aWYodCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBlPXt9O2lmKG51bGwhPXQpZm9yKHZhciBuIGluIHQpT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSk7cmV0dXJuIGUuZGVmYXVsdD10LGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShsTXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB1TXQsZk10PW1NdChnQ3QpO2Z1bmN0aW9uIGdNdCh0LGUsbixvLGkpe2lmKHZvaWQgMD09PW4mJihuPTMwKSxlLmxlbmd0aD5uKXt2YXIgYT0oZnVuY3Rpb24gcih0LGUsbil7Zm9yKHZhciBvPXRbMF0ubGVuZ3RoLGk9Zk10LnRhdVJhbmRJbnQoZS5sZW5ndGgsbiksYT1mTXQudGF1UmFuZEludChlLmxlbmd0aCxuKSxyPWVbaV0scz1lW2E9KGErPWk9PT1hPzE6MCklZS5sZW5ndGhdLGw9MCxjPWZNdC56ZXJvcyhvKSxkPTA7ZDxjLmxlbmd0aDtkKyspY1tkXT10W3JdW2RdLXRbc11bZF0sbC09Y1tkXSoodFtyXVtkXSt0W3NdW2RdKS8yO3ZhciBwPTAsbT0wLHU9Zk10Lnplcm9zKGUubGVuZ3RoKTtmb3IoZD0wO2Q8ZS5sZW5ndGg7ZCsrKXtmb3IodmFyIGY9bCxnPTA7ZzxvO2crKylmKz1jW2ddKnRbZVtkXV1bZ107MD09PWY/KHVbZF09Zk10LnRhdVJhbmRJbnQoMixuKSwwPT09dVtkXT9wKz0xOm0rPTEpOmY+MD8odVtkXT0wLHArPTEpOih1W2RdPTEsbSs9MSl9dmFyIGg9Zk10Lnplcm9zKHApLGI9Zk10Lnplcm9zKG0pO2ZvcihwPTAsbT0wLGQ9MDtkPHUubGVuZ3RoO2QrKykwPT09dVtkXT8oaFtwXT1lW2RdLHArPTEpOihiW21dPWVbZF0sbSs9MSk7cmV0dXJue2luZGljZXNMZWZ0OmgsaW5kaWNlc1JpZ2h0OmIsaHlwZXJwbGFuZTpjLG9mZnNldDpsfX0pKHQsZSxpKSxzPWEuaW5kaWNlc1JpZ2h0LGw9YS5oeXBlcnBsYW5lLGM9YS5vZmZzZXQ7cmV0dXJue2xlZnRDaGlsZDpnTXQodCxhLmluZGljZXNMZWZ0LG4sbysxLGkpLHJpZ2h0Q2hpbGQ6Z010KHQscyxuLG8rMSxpKSxpc0xlYWY6ITEsaHlwZXJwbGFuZTpsLG9mZnNldDpjfX1yZXR1cm57aW5kaWNlczplLGlzTGVhZjohMH19ZnVuY3Rpb24gaE10KHQsZSxuLG8saSxhLHIpe3ZhciBzO2lmKHQuaXNMZWFmKXJldHVybiBvW2FdWzBdPS1yLChzPWlbcl0pLnNwbGljZS5hcHBseShzLGRNdChbMCx0LmluZGljZXMubGVuZ3RoXSx0LmluZGljZXMpKSx7bm9kZU51bTphLGxlYWZOdW06cis9MX07ZVthXT10Lmh5cGVycGxhbmUsblthXT10Lm9mZnNldCxvW2FdWzBdPWErMTt2YXIgbD1hLGM9aE10KHQubGVmdENoaWxkLGUsbixvLGksYSsxLHIpO3JldHVybiByPWMubGVhZk51bSxvW2xdWzFdPShhPWMubm9kZU51bSkrMSx7bm9kZU51bTooYz1oTXQodC5yaWdodENoaWxkLGUsbixvLGksYSsxLHIpKS5ub2RlTnVtLGxlYWZOdW06Yy5sZWFmTnVtfX1mdW5jdGlvbiBiTXQodCl7cmV0dXJuIHQuaXNMZWFmPzE6MStiTXQodC5sZWZ0Q2hpbGQpK2JNdCh0LnJpZ2h0Q2hpbGQpfWZ1bmN0aW9uIHlNdCh0KXtyZXR1cm4gdC5pc0xlYWY/MTp5TXQodC5sZWZ0Q2hpbGQpK3lNdCh0LnJpZ2h0Q2hpbGQpfWZ1bmN0aW9uIF9NdCh0LGUsbixvKXtmb3IodmFyIGk9ZSxhPTA7YTxuLmxlbmd0aDthKyspaSs9dFthXSpuW2FdO3JldHVybiAwPT09aT9mTXQudGF1UmFuZEludCgyLG8pOmk+MD8wOjF9bE10LkZsYXRUcmVlPXVNdD1mdW5jdGlvbiB1TXQodCxlLG4sbyl7dGhpcy5oeXBlcnBsYW5lcz10LHRoaXMub2Zmc2V0cz1lLHRoaXMuY2hpbGRyZW49bix0aGlzLmluZGljZXM9b30sbE10Lm1ha2VGb3Jlc3Q9ZnVuY3Rpb24gQ010KHQsZSxuLG8pe3ZhciBpPU1hdGgubWF4KDEwLGUpO3JldHVybiBmTXQucmFuZ2UobikubWFwKChmdW5jdGlvbihlLG4pe3JldHVybihmdW5jdGlvbiBhKHQsZSxuLG8pe3JldHVybiB2b2lkIDA9PT1lJiYoZT0zMCksZ010KHQsZk10LnJhbmdlKHQubGVuZ3RoKSxlLG4sbyl9KSh0LGksbixvKX0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybihmdW5jdGlvbiBlKHQsbil7dmFyIG89Yk10KHQpLGk9eU10KHQpLGE9Zk10LnJhbmdlKG8pLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gZk10Lnplcm9zKHQuaHlwZXJwbGFuZT90Lmh5cGVycGxhbmUubGVuZ3RoOjApfSkpLHI9Zk10Lnplcm9zKG8pLHM9Zk10LnJhbmdlKG8pLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm5bLTEsLTFdfSkpLGw9Zk10LnJhbmdlKGkpLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gZk10LnJhbmdlKG4pLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4tMX0pKX0pKTtyZXR1cm4gaE10KHQsYSxyLHMsbCwwLDApLG5ldyB1TXQoYSxyLHMsbCl9KSh0LGkpfSkpfSxsTXQubWFrZUxlYWZBcnJheT1mdW5jdGlvbiBNTXQodCl7dmFyIGUsbjtpZih0Lmxlbmd0aD4wKXt2YXIgbz1bXTt0cnl7Zm9yKHZhciBpPXBNdCh0KSxhPWkubmV4dCgpOyFhLmRvbmU7YT1pLm5leHQoKSlvLnB1c2guYXBwbHkobyxkTXQoYS52YWx1ZS5pbmRpY2VzKSl9Y2F0Y2godCl7ZT17ZXJyb3I6dH19ZmluYWxseXt0cnl7YSYmIWEuZG9uZSYmKG49aS5yZXR1cm4pJiZuLmNhbGwoaSl9ZmluYWxseXtpZihlKXRocm93IGUuZXJyb3J9fXJldHVybiBvfXJldHVybltbLTFdXX0sbE10LnNlYXJjaEZsYXRUcmVlPWZ1bmN0aW9uIHZNdCh0LGUsbil7Zm9yKHZhciBvPTA7ZS5jaGlsZHJlbltvXVswXT4wOylvPTA9PT1fTXQoZS5oeXBlcnBsYW5lc1tvXSxlLm9mZnNldHNbb10sdCxuKT9lLmNoaWxkcmVuW29dWzBdOmUuY2hpbGRyZW5bb11bMV07cmV0dXJuIGUuaW5kaWNlc1stMSplLmNoaWxkcmVuW29dWzBdXX07dmFyIHhNdD1RdiYmUXYuX192YWx1ZXN8fGZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXSxuPTA7cmV0dXJuIGU/ZS5jYWxsKHQpOntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHQmJm4+PXQubGVuZ3RoJiYodD12b2lkIDApLHt2YWx1ZTp0JiZ0W24rK10sZG9uZTohdH19fX0sT010PVF2JiZRdi5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKHQpe2lmKHQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgZT17fTtpZihudWxsIT10KWZvcih2YXIgbiBpbiB0KU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pO3JldHVybiBlLmRlZmF1bHQ9dCxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoc010LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUE10PU9NdChmQ3QpLHdNdD1PTXQoVUN0KSxrTXQ9T010KGxNdCksU010PU9NdChnQ3QpO3NNdC5tYWtlTk5EZXNjZW50PWZ1bmN0aW9uIERNdCh0LGUpe3JldHVybiBmdW5jdGlvbiBuKG8saSxhLHIscyxsLGMsZCl7dm9pZCAwPT09ciYmKHI9MTApLHZvaWQgMD09PXMmJihzPTUwKSx2b2lkIDA9PT1sJiYobD0uMDAxKSx2b2lkIDA9PT1jJiYoYz0uNSksdm9pZCAwPT09ZCYmKGQ9ITApO2Zvcih2YXIgcD1vLmxlbmd0aCxtPVBNdC5tYWtlSGVhcChvLmxlbmd0aCxhKSx1PTA7dTxvLmxlbmd0aDt1KyspZm9yKHZhciBmPVBNdC5yZWplY3Rpb25TYW1wbGUoYSxvLmxlbmd0aCxlKSxnPTA7ZzxmLmxlbmd0aDtnKyspe3ZhciBoPXQob1t1XSxvW2ZbZ11dKTtQTXQuaGVhcFB1c2gobSx1LGgsZltnXSwxKSxQTXQuaGVhcFB1c2gobSxmW2ddLGgsdSwxKX1pZihkKWZvcih2YXIgYj0wO2I8aS5sZW5ndGg7YisrKWZvcih1PTA7dTxpW2JdLmxlbmd0aCYmIShpW2JdW3VdPDApO3UrKylmb3IoZz11KzE7ZzxpW2JdLmxlbmd0aCYmIShpW2JdW2ddPDApO2crKyloPXQob1tpW2JdW3VdXSxvW2lbYl1bZ11dKSxQTXQuaGVhcFB1c2gobSxpW2JdW3VdLGgsaVtiXVtnXSwxKSxQTXQuaGVhcFB1c2gobSxpW2JdW2ddLGgsaVtiXVt1XSwxKTtmb3IoYj0wO2I8cjtiKyspe3ZhciB5PVBNdC5idWlsZENhbmRpZGF0ZXMobSxwLGEscyxlKSxfPTA7Zm9yKHU9MDt1PHA7dSsrKWZvcihnPTA7ZzxzO2crKyl7dmFyIEM9TWF0aC5mbG9vcih5WzBdW3VdW2ddKTtpZighKEM8MHx8U010LnRhdVJhbmQoZSk8YykpZm9yKHZhciBNPTA7TTxzO00rKyl7dmFyIHY9TWF0aC5mbG9vcih5WzBdW3VdW01dKTt2PDB8fCF5WzJdW3VdW2ddJiYheVsyXVt1XVtNXXx8KGg9dChvW0NdLG9bdl0pLF8rPVBNdC5oZWFwUHVzaChtLEMsaCx2LDEpLF8rPVBNdC5oZWFwUHVzaChtLHYsaCxDLDEpKX19aWYoXzw9bCphKm8ubGVuZ3RoKWJyZWFrfXJldHVybiBQTXQuZGVoZWFwU29ydChtKX19LHNNdC5tYWtlSW5pdGlhbGl6YXRpb25zPWZ1bmN0aW9uIEVNdCh0KXtyZXR1cm57aW5pdEZyb21SYW5kb206ZnVuY3Rpb24gZShuLG8saSxhLHIpe2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKWZvcih2YXIgbD1TTXQucmVqZWN0aW9uU2FtcGxlKG4sby5sZW5ndGgsciksYz0wO2M8bC5sZW5ndGg7YysrKWlmKCEobFtjXTwwKSl7dmFyIGQ9dChvW2xbY11dLGlbc10pO1BNdC5oZWFwUHVzaChhLHMsZCxsW2NdLDEpfX0saW5pdEZyb21UcmVlOmZ1bmN0aW9uIG4oZSxvLGksYSxyKXtmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKylmb3IodmFyIGw9a010LnNlYXJjaEZsYXRUcmVlKGlbc10sZSxyKSxjPTA7YzxsLmxlbmd0aDtjKyspe2lmKGxbY108MClyZXR1cm47dmFyIGQ9dChvW2xbY11dLGlbc10pO1BNdC5oZWFwUHVzaChhLHMsZCxsW2NdLDEpfX19fSxzTXQubWFrZUluaXRpYWxpemVkTk5TZWFyY2g9ZnVuY3Rpb24gUk10KHQpe3JldHVybiBmdW5jdGlvbiBlKG4sbyxpLGEpe2Zvcih2YXIgcixzLGw9d010LmdldENTUihvKSxjPWwuaW5kaWNlcyxkPWwuaW5kcHRyLHA9MDtwPGEubGVuZ3RoO3ArKylmb3IodmFyIG09bmV3IFNldChpWzBdW3BdKTs7KXt2YXIgdT1QTXQuc21hbGxlc3RGbGFnZ2VkKGkscCk7aWYoLTE9PT11KWJyZWFrO3ZhciBmPWMuc2xpY2UoZFt1XSxkW3UrMV0pO3RyeXtmb3IodmFyIGc9eE10KGYpLGg9Zy5uZXh0KCk7IWguZG9uZTtoPWcubmV4dCgpKXt2YXIgYj1oLnZhbHVlO2lmKGIhPT11JiYtMSE9PWImJiFtLmhhcyhiKSl7dmFyIHk9dChuW2JdLGFbcF0pO1BNdC51bmNoZWNrZWRIZWFwUHVzaChpLHAseSxiLDEpLG0uYWRkKGIpfX19Y2F0Y2godCl7cj17ZXJyb3I6dH19ZmluYWxseXt0cnl7aCYmIWguZG9uZSYmKHM9Zy5yZXR1cm4pJiZzLmNhbGwoZyl9ZmluYWxseXtpZihyKXRocm93IHIuZXJyb3J9fX1yZXR1cm4gaX19LHNNdC5pbml0aWFsaXplU2VhcmNoPWZ1bmN0aW9uIEFNdCh0LGUsbixvLGksYSxyKXt2YXIgcyxsLGM9UE10Lm1ha2VIZWFwKG4ubGVuZ3RoLG8pO2lmKGkobyxlLG4sYyxyKSx0KXRyeXtmb3IodmFyIGQ9eE10KHQpLHA9ZC5uZXh0KCk7IXAuZG9uZTtwPWQubmV4dCgpKWEocC52YWx1ZSxlLG4sYyxyKX1jYXRjaCh0KXtzPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtwJiYhcC5kb25lJiYobD1kLnJldHVybikmJmwuY2FsbChkKX1maW5hbGx5e2lmKHMpdGhyb3cgcy5lcnJvcn19cmV0dXJuIGN9O2NvbnN0IFRNdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIE5NdCh0KXtyZXR1cm4gVE10LmNhbGwodCkuZW5kc1dpdGgoIkFycmF5XSIpfWZ1bmN0aW9uIHpNdCh0LGUsbil7bGV0IG89MDtjb25zdCBpPW4oZSk7Zm9yKGxldCBlPTA7ZTx0LngubGVuZ3RoO2UrKylvKz1NYXRoLmFicyh0LnlbZV0taSh0LnhbZV0pKTtyZXR1cm4gb31jb25zdCBJTXQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBITXQodCl7cmV0dXJuIElNdC5jYWxsKHQpLmVuZHNXaXRoKCJBcnJheV0iKX1mdW5jdGlvbiBGTXQodCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFITXQodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW5wdXQgbXVzdCBiZSBhbiBhcnJheSIpO2lmKDA9PT10Lmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnB1dCBtdXN0IG5vdCBiZSBlbXB0eSIpO3ZhciBuPWUuZnJvbUluZGV4LG89dm9pZCAwPT09bj8wOm4saT1lLnRvSW5kZXgsYT12b2lkIDA9PT1pP3QubGVuZ3RoOmk7aWYobzwwfHxvPj10Lmxlbmd0aHx8IU51bWJlci5pc0ludGVnZXIobykpdGhyb3cgbmV3IEVycm9yKCJmcm9tSW5kZXggbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgc21hbGxlciB0aGFuIGxlbmd0aCIpO2lmKGE8PW98fGE+dC5sZW5ndGh8fCFOdW1iZXIuaXNJbnRlZ2VyKGEpKXRocm93IG5ldyBFcnJvcigidG9JbmRleCBtdXN0IGJlIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIGZyb21JbmRleCBhbmQgYXQgbW9zdCBlcXVhbCB0byBsZW5ndGgiKTtmb3IodmFyIHI9dFtvXSxzPW8rMTtzPGE7cysrKXRbc10+ciYmKHI9dFtzXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gTE10KHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighSE10KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImlucHV0IG11c3QgYmUgYW4gYXJyYXkiKTtpZigwPT09dC5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW5wdXQgbXVzdCBub3QgYmUgZW1wdHkiKTt2YXIgbj1lLmZyb21JbmRleCxvPXZvaWQgMD09PW4/MDpuLGk9ZS50b0luZGV4LGE9dm9pZCAwPT09aT90Lmxlbmd0aDppO2lmKG88MHx8bz49dC5sZW5ndGh8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pKXRocm93IG5ldyBFcnJvcigiZnJvbUluZGV4IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHNtYWxsZXIgdGhhbiBsZW5ndGgiKTtpZihhPD1vfHxhPnQubGVuZ3RofHwhTnVtYmVyLmlzSW50ZWdlcihhKSl0aHJvdyBuZXcgRXJyb3IoInRvSW5kZXggbXVzdCBiZSBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBmcm9tSW5kZXggYW5kIGF0IG1vc3QgZXF1YWwgdG8gbGVuZ3RoIik7Zm9yKHZhciByPXRbb10scz1vKzE7czxhO3MrKyl0W3NdPHImJihyPXRbc10pO3JldHVybiByfWZ1bmN0aW9uIEJNdCh0KXt2YXIgZSxuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighSE10KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImlucHV0IG11c3QgYmUgYW4gYXJyYXkiKTtpZigwPT09dC5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW5wdXQgbXVzdCBub3QgYmUgZW1wdHkiKTtpZih2b2lkIDAhPT1uLm91dHB1dCl7aWYoIUhNdChuLm91dHB1dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigib3V0cHV0IG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IGlmIHNwZWNpZmllZCIpO2U9bi5vdXRwdXR9ZWxzZSBlPW5ldyBBcnJheSh0Lmxlbmd0aCk7dmFyIG89TE10KHQpLGk9Rk10KHQpO2lmKG89PT1pKXRocm93IG5ldyBSYW5nZUVycm9yKCJtaW5pbXVtIGFuZCBtYXhpbXVtIGlucHV0IHZhbHVlcyBhcmUgZXF1YWwuIENhbm5vdCByZXNjYWxlIGEgY29uc3RhbnQgYXJyYXkiKTt2YXIgYT1uLm1pbixyPXZvaWQgMD09PWE/bi5hdXRvTWluTWF4P286MDphLHM9bi5tYXgsbD12b2lkIDA9PT1zP24uYXV0b01pbk1heD9pOjE6cztpZihyPj1sKXRocm93IG5ldyBSYW5nZUVycm9yKCJtaW4gb3B0aW9uIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCBvcHRpb24iKTtmb3IodmFyIGM9KGwtcikvKGktbyksZD0wO2Q8dC5sZW5ndGg7ZCsrKWVbZF09KHRbZF0tbykqYytyO3JldHVybiBlfWNvbnN0IFZNdD0iICIucmVwZWF0KDIpLGpNdD0iICIucmVwZWF0KDQpO2Z1bmN0aW9uIFVNdCh0LGU9e30pe2NvbnN0e21heFJvd3M6bj0xNSxtYXhDb2x1bW5zOm89MTAsbWF4TnVtU2l6ZTppPTh9PWU7cmV0dXJuYCR7dC5jb25zdHJ1Y3Rvci5uYW1lfSB7XG4ke1ZNdH1bXG4ke2pNdH0keyhmdW5jdGlvbiBhKHQsZSxuLG8pe2NvbnN0e3Jvd3M6aSxjb2x1bW5zOmF9PXQscj1NYXRoLm1pbihpLGUpLHM9TWF0aC5taW4oYSxuKSxsPVtdO2ZvcihsZXQgZT0wO2U8cjtlKyspe2xldCBuPVtdO2ZvcihsZXQgaT0wO2k8cztpKyspbi5wdXNoKEdNdCh0LmdldChlLGkpLG8pKTtsLnB1c2goYCR7bi5qb2luKCIgIil9YCl9cmV0dXJuIHMhPT1hJiYobFtsLmxlbmd0aC0xXSs9YCAuLi4gJHthLW59IG1vcmUgY29sdW1uc2ApLHIhPT1pJiZsLnB1c2goYC4uLiAke2ktZX0gbW9yZSByb3dzYCksbC5qb2luKGBcbiR7ak10fWApfSkodCxuLG8saSl9XG4ke1ZNdH1dXG4ke1ZNdH1yb3dzOiAke3Qucm93c31cbiR7Vk10fWNvbHVtbnM6ICR7dC5jb2x1bW5zfVxufWB9ZnVuY3Rpb24gR010KHQsZSl7Y29uc3Qgbj1TdHJpbmcodCk7aWYobi5sZW5ndGg8PWUpcmV0dXJuIG4ucGFkRW5kKGUsIiAiKTtjb25zdCBvPXQudG9QcmVjaXNpb24oZS0yKTtpZihvLmxlbmd0aDw9ZSlyZXR1cm4gbztjb25zdCBpPXQudG9FeHBvbmVudGlhbChlLTIpLGE9aS5pbmRleE9mKCJlIikscj1pLnNsaWNlKGEpO3JldHVybiBpLnNsaWNlKDAsZS1yLmxlbmd0aCkrcn1mdW5jdGlvbiBXTXQodCxlLG4pe2lmKGU8MHx8ZT4obj90LnJvd3M6dC5yb3dzLTEpKXRocm93IG5ldyBSYW5nZUVycm9yKCJSb3cgaW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gWU10KHQsZSxuKXtpZihlPDB8fGU+KG4/dC5jb2x1bW5zOnQuY29sdW1ucy0xKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ29sdW1uIGluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHFNdCh0LGUpe2lmKGUudG8xREFycmF5JiYoZT1lLnRvMURBcnJheSgpKSxlLmxlbmd0aCE9PXQuY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidmVjdG9yIHNpemUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMiKTtyZXR1cm4gZX1mdW5jdGlvbiBaTXQodCxlKXtpZihlLnRvMURBcnJheSYmKGU9ZS50bzFEQXJyYXkoKSksZS5sZW5ndGghPT10LnJvd3MpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInZlY3RvciBzaXplIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiByb3dzIik7cmV0dXJuIGV9ZnVuY3Rpb24gWE10KHQsZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoInVuZXhwZWN0ZWQgdHlwZSBmb3Igcm93IGluZGljZXMiKTtpZihlLnNvbWUoKGU9PmU8MHx8ZT49dC5yb3dzKSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJvdyBpbmRpY2VzIGFyZSBvdXQgb2YgcmFuZ2UiKTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKXx8KGU9QXJyYXkuZnJvbShlKSksZX1mdW5jdGlvbiBLTXQodCxlKXtpZigib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigidW5leHBlY3RlZCB0eXBlIGZvciBjb2x1bW4gaW5kaWNlcyIpO2lmKGUuc29tZSgoZT0+ZTwwfHxlPj10LmNvbHVtbnMpKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiY29sdW1uIGluZGljZXMgYXJlIG91dCBvZiByYW5nZSIpO3JldHVybiBBcnJheS5pc0FycmF5KGUpfHwoZT1BcnJheS5mcm9tKGUpKSxlfWZ1bmN0aW9uIEpNdCh0LGUsbixvLGkpe2lmKDUhPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJleHBlY3RlZCA0IGFyZ3VtZW50cyIpO2lmKCRNdCgic3RhcnRSb3ciLGUpLCRNdCgiZW5kUm93IixuKSwkTXQoInN0YXJ0Q29sdW1uIixvKSwkTXQoImVuZENvbHVtbiIsaSksZT5ufHxvPml8fGU8MHx8ZT49dC5yb3dzfHxuPDB8fG4+PXQucm93c3x8bzwwfHxvPj10LmNvbHVtbnN8fGk8MHx8aT49dC5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJTdWJtYXRyaXggaW5kaWNlcyBhcmUgb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gUU10KHQsZT0wKXtsZXQgbj1bXTtmb3IobGV0IG89MDtvPHQ7bysrKW4ucHVzaChlKTtyZXR1cm4gbn1mdW5jdGlvbiAkTXQodCxlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0fSBtdXN0IGJlIGEgbnVtYmVyYCl9ZnVuY3Rpb24gdHZ0KHQpe2lmKHQuaXNFbXB0eSgpKXRocm93IG5ldyBFcnJvcigiRW1wdHkgbWF0cml4IGhhcyBubyBlbGVtZW50cyB0byBpbmRleCIpfWNsYXNzIGV2dHtzdGF0aWMgZnJvbTFEQXJyYXkodCxlLG4pe2lmKHQqZSE9PW4ubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJkYXRhIGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBnaXZlbiBkaW1lbnNpb25zIik7bGV0IG89bmV3IGl2dCh0LGUpO2ZvcihsZXQgaT0wO2k8dDtpKyspZm9yKGxldCB0PTA7dDxlO3QrKylvLnNldChpLHQsbltpKmUrdF0pO3JldHVybiBvfXN0YXRpYyByb3dWZWN0b3IodCl7bGV0IGU9bmV3IGl2dCgxLHQubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyllLnNldCgwLG4sdFtuXSk7cmV0dXJuIGV9c3RhdGljIGNvbHVtblZlY3Rvcih0KXtsZXQgZT1uZXcgaXZ0KHQubGVuZ3RoLDEpO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWUuc2V0KG4sMCx0W25dKTtyZXR1cm4gZX1zdGF0aWMgemVyb3ModCxlKXtyZXR1cm4gbmV3IGl2dCh0LGUpfXN0YXRpYyBvbmVzKHQsZSl7cmV0dXJuIG5ldyBpdnQodCxlKS5maWxsKDEpfXN0YXRpYyByYW5kKHQsZSxuPXt9KXtpZigib2JqZWN0IiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2NvbnN0e3JhbmRvbTpvPU1hdGgucmFuZG9tfT1uO2xldCBpPW5ldyBpdnQodCxlKTtmb3IobGV0IG49MDtuPHQ7bisrKWZvcihsZXQgdD0wO3Q8ZTt0KyspaS5zZXQobix0LG8oKSk7cmV0dXJuIGl9c3RhdGljIHJhbmRJbnQodCxlLG49e30pe2lmKCJvYmplY3QiIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Y29uc3R7bWluOm89MCxtYXg6aT0xZTMscmFuZG9tOmE9TWF0aC5yYW5kb219PW47aWYoIU51bWJlci5pc0ludGVnZXIobykpdGhyb3cgbmV3IFR5cGVFcnJvcigibWluIG11c3QgYmUgYW4gaW50ZWdlciIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIm1heCBtdXN0IGJlIGFuIGludGVnZXIiKTtpZihvPj1pKXRocm93IG5ldyBSYW5nZUVycm9yKCJtaW4gbXVzdCBiZSBzbWFsbGVyIHRoYW4gbWF4Iik7bGV0IHI9aS1vLHM9bmV3IGl2dCh0LGUpO2ZvcihsZXQgbj0wO248dDtuKyspZm9yKGxldCB0PTA7dDxlO3QrKyl7bGV0IGU9bytNYXRoLnJvdW5kKGEoKSpyKTtzLnNldChuLHQsZSl9cmV0dXJuIHN9c3RhdGljIGV5ZSh0LGUsbil7dm9pZCAwPT09ZSYmKGU9dCksdm9pZCAwPT09biYmKG49MSk7bGV0IG89TWF0aC5taW4odCxlKSxpPXRoaXMuemVyb3ModCxlKTtmb3IobGV0IHQ9MDt0PG87dCsrKWkuc2V0KHQsdCxuKTtyZXR1cm4gaX1zdGF0aWMgZGlhZyh0LGUsbil7bGV0IG89dC5sZW5ndGg7dm9pZCAwPT09ZSYmKGU9byksdm9pZCAwPT09biYmKG49ZSk7bGV0IGk9TWF0aC5taW4obyxlLG4pLGE9dGhpcy56ZXJvcyhlLG4pO2ZvcihsZXQgZT0wO2U8aTtlKyspYS5zZXQoZSxlLHRbZV0pO3JldHVybiBhfXN0YXRpYyBtaW4odCxlKXt0PXRoaXMuY2hlY2tNYXRyaXgodCksZT10aGlzLmNoZWNrTWF0cml4KGUpO2xldCBuPXQucm93cyxvPXQuY29sdW1ucyxpPW5ldyBpdnQobixvKTtmb3IobGV0IGE9MDthPG47YSsrKWZvcihsZXQgbj0wO248bztuKyspaS5zZXQoYSxuLE1hdGgubWluKHQuZ2V0KGEsbiksZS5nZXQoYSxuKSkpO3JldHVybiBpfXN0YXRpYyBtYXgodCxlKXt0PXRoaXMuY2hlY2tNYXRyaXgodCksZT10aGlzLmNoZWNrTWF0cml4KGUpO2xldCBuPXQucm93cyxvPXQuY29sdW1ucyxpPW5ldyB0aGlzKG4sbyk7Zm9yKGxldCBhPTA7YTxuO2ErKylmb3IobGV0IG49MDtuPG87bisrKWkuc2V0KGEsbixNYXRoLm1heCh0LmdldChhLG4pLGUuZ2V0KGEsbikpKTtyZXR1cm4gaX1zdGF0aWMgY2hlY2tNYXRyaXgodCl7cmV0dXJuIGV2dC5pc01hdHJpeCh0KT90Om5ldyBpdnQodCl9c3RhdGljIGlzTWF0cml4KHQpe3JldHVybiBudWxsIT10JiYiTWF0cml4Ij09PXQua2xhc3N9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5yb3dzKnRoaXMuY29sdW1uc31hcHBseSh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXQuY2FsbCh0aGlzLGUsbik7cmV0dXJuIHRoaXN9dG8xREFycmF5KCl7bGV0IHQ9W107Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0LnB1c2godGhpcy5nZXQoZSxuKSk7cmV0dXJuIHR9dG8yREFycmF5KCl7bGV0IHQ9W107Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKXt0LnB1c2goW10pO2ZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0W2VdLnB1c2godGhpcy5nZXQoZSxuKSl9cmV0dXJuIHR9dG9KU09OKCl7cmV0dXJuIHRoaXMudG8yREFycmF5KCl9aXNSb3dWZWN0b3IoKXtyZXR1cm4gMT09PXRoaXMucm93c31pc0NvbHVtblZlY3Rvcigpe3JldHVybiAxPT09dGhpcy5jb2x1bW5zfWlzVmVjdG9yKCl7cmV0dXJuIDE9PT10aGlzLnJvd3N8fDE9PT10aGlzLmNvbHVtbnN9aXNTcXVhcmUoKXtyZXR1cm4gdGhpcy5yb3dzPT09dGhpcy5jb2x1bW5zfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMucm93c3x8MD09PXRoaXMuY29sdW1uc31pc1N5bW1ldHJpYygpe2lmKHRoaXMuaXNTcXVhcmUoKSl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8PXQ7ZSsrKWlmKHRoaXMuZ2V0KHQsZSkhPT10aGlzLmdldChlLHQpKXJldHVybiExO3JldHVybiEwfXJldHVybiExfWlzRWNoZWxvbkZvcm0oKXtsZXQgdD0wLGU9MCxuPS0xLG89ITAsaT0hMTtmb3IoO3Q8dGhpcy5yb3dzJiZvOyl7Zm9yKGU9MCxpPSExO2U8dGhpcy5jb2x1bW5zJiYhMT09PWk7KTA9PT10aGlzLmdldCh0LGUpP2UrKzoxPT09dGhpcy5nZXQodCxlKSYmZT5uPyhpPSEwLG49ZSk6KG89ITEsaT0hMCk7dCsrfXJldHVybiBvfWlzUmVkdWNlZEVjaGVsb25Gb3JtKCl7bGV0IHQ9MCxlPTAsbj0tMSxvPSEwLGk9ITE7Zm9yKDt0PHRoaXMucm93cyYmbzspe2ZvcihlPTAsaT0hMTtlPHRoaXMuY29sdW1ucyYmITE9PT1pOykwPT09dGhpcy5nZXQodCxlKT9lKys6MT09PXRoaXMuZ2V0KHQsZSkmJmU+bj8oaT0hMCxuPWUpOihvPSExLGk9ITApO2ZvcihsZXQgbj1lKzE7bjx0aGlzLnJvd3M7bisrKTAhPT10aGlzLmdldCh0LG4pJiYobz0hMSk7dCsrfXJldHVybiBvfWVjaGVsb25Gb3JtKCl7bGV0IHQ9dGhpcy5jbG9uZSgpLGU9MCxuPTA7Zm9yKDtlPHQucm93cyYmbjx0LmNvbHVtbnM7KXtsZXQgbz1lO2ZvcihsZXQgaT1lO2k8dC5yb3dzO2krKyl0LmdldChpLG4pPnQuZ2V0KG8sbikmJihvPWkpO2lmKDA9PT10LmdldChvLG4pKW4rKztlbHNle3Quc3dhcFJvd3MoZSxvKTtsZXQgaT10LmdldChlLG4pO2ZvcihsZXQgbz1uO288dC5jb2x1bW5zO28rKyl0LnNldChlLG8sdC5nZXQoZSxvKS9pKTtmb3IobGV0IG89ZSsxO288dC5yb3dzO28rKyl7bGV0IGk9dC5nZXQobyxuKS90LmdldChlLG4pO3Quc2V0KG8sbiwwKTtmb3IobGV0IGE9bisxO2E8dC5jb2x1bW5zO2ErKyl0LnNldChvLGEsdC5nZXQobyxhKS10LmdldChlLGEpKmkpfWUrKyxuKyt9fXJldHVybiB0fXJlZHVjZWRFY2hlbG9uRm9ybSgpe2xldCB0PXRoaXMuZWNoZWxvbkZvcm0oKSxlPXQuY29sdW1ucyxuPXQucm93cyxvPW4tMTtmb3IoO28+PTA7KWlmKDA9PT10Lm1heFJvdyhvKSlvLS07ZWxzZXtsZXQgaT0wLGE9ITE7Zm9yKDtpPG4mJiExPT09YTspMT09PXQuZ2V0KG8saSk/YT0hMDppKys7Zm9yKGxldCBuPTA7bjxvO24rKyl7bGV0IGE9dC5nZXQobixpKTtmb3IobGV0IHI9aTtyPGU7cisrKXtsZXQgZT10LmdldChuLHIpLWEqdC5nZXQobyxyKTt0LnNldChuLHIsZSl9fW8tLX1yZXR1cm4gdH1zZXQoKXt0aHJvdyBuZXcgRXJyb3IoInNldCBtZXRob2QgaXMgdW5pbXBsZW1lbnRlZCIpfWdldCgpe3Rocm93IG5ldyBFcnJvcigiZ2V0IG1ldGhvZCBpcyB1bmltcGxlbWVudGVkIil9cmVwZWF0KHQ9e30pe2lmKCJvYmplY3QiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Y29uc3R7cm93czplPTEsY29sdW1uczpuPTF9PXQ7aWYoIU51bWJlci5pc0ludGVnZXIoZSl8fGU8PTApdGhyb3cgbmV3IFR5cGVFcnJvcigicm93cyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKG4pfHxuPD0wKXRocm93IG5ldyBUeXBlRXJyb3IoImNvbHVtbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiKTtsZXQgbz1uZXcgaXZ0KHRoaXMucm93cyplLHRoaXMuY29sdW1ucypuKTtmb3IobGV0IHQ9MDt0PGU7dCsrKWZvcihsZXQgZT0wO2U8bjtlKyspby5zZXRTdWJNYXRyaXgodGhpcyx0aGlzLnJvd3MqdCx0aGlzLmNvbHVtbnMqZSk7cmV0dXJuIG99ZmlsbCh0KXtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KGUsbix0KTtyZXR1cm4gdGhpc31uZWcoKXtyZXR1cm4gdGhpcy5tdWxTKC0xKX1nZXRSb3codCl7V010KHRoaXMsdCk7bGV0IGU9W107Zm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKWUucHVzaCh0aGlzLmdldCh0LG4pKTtyZXR1cm4gZX1nZXRSb3dWZWN0b3IodCl7cmV0dXJuIGl2dC5yb3dWZWN0b3IodGhpcy5nZXRSb3codCkpfXNldFJvdyh0LGUpe1dNdCh0aGlzLHQpLGU9cU10KHRoaXMsZSk7Zm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KHQsbixlW25dKTtyZXR1cm4gdGhpc31zd2FwUm93cyh0LGUpe1dNdCh0aGlzLHQpLFdNdCh0aGlzLGUpO2ZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl7bGV0IG89dGhpcy5nZXQodCxuKTt0aGlzLnNldCh0LG4sdGhpcy5nZXQoZSxuKSksdGhpcy5zZXQoZSxuLG8pfXJldHVybiB0aGlzfWdldENvbHVtbih0KXtZTXQodGhpcyx0KTtsZXQgZT1bXTtmb3IobGV0IG49MDtuPHRoaXMucm93cztuKyspZS5wdXNoKHRoaXMuZ2V0KG4sdCkpO3JldHVybiBlfWdldENvbHVtblZlY3Rvcih0KXtyZXR1cm4gaXZ0LmNvbHVtblZlY3Rvcih0aGlzLmdldENvbHVtbih0KSl9c2V0Q29sdW1uKHQsZSl7WU10KHRoaXMsdCksZT1aTXQodGhpcyxlKTtmb3IobGV0IG49MDtuPHRoaXMucm93cztuKyspdGhpcy5zZXQobix0LGVbbl0pO3JldHVybiB0aGlzfXN3YXBDb2x1bW5zKHQsZSl7WU10KHRoaXMsdCksWU10KHRoaXMsZSk7Zm9yKGxldCBuPTA7bjx0aGlzLnJvd3M7bisrKXtsZXQgbz10aGlzLmdldChuLHQpO3RoaXMuc2V0KG4sdCx0aGlzLmdldChuLGUpKSx0aGlzLnNldChuLGUsbyl9cmV0dXJuIHRoaXN9YWRkUm93VmVjdG9yKHQpe3Q9cU10KHRoaXMsdCk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldChlLG4sdGhpcy5nZXQoZSxuKSt0W25dKTtyZXR1cm4gdGhpc31zdWJSb3dWZWN0b3IodCl7dD1xTXQodGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KGUsbix0aGlzLmdldChlLG4pLXRbbl0pO3JldHVybiB0aGlzfW11bFJvd1ZlY3Rvcih0KXt0PXFNdCh0aGlzLHQpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQoZSxuLHRoaXMuZ2V0KGUsbikqdFtuXSk7cmV0dXJuIHRoaXN9ZGl2Um93VmVjdG9yKHQpe3Q9cU10KHRoaXMsdCk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldChlLG4sdGhpcy5nZXQoZSxuKS90W25dKTtyZXR1cm4gdGhpc31hZGRDb2x1bW5WZWN0b3IodCl7dD1aTXQodGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KGUsbix0aGlzLmdldChlLG4pK3RbZV0pO3JldHVybiB0aGlzfXN1YkNvbHVtblZlY3Rvcih0KXt0PVpNdCh0aGlzLHQpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQoZSxuLHRoaXMuZ2V0KGUsbiktdFtlXSk7cmV0dXJuIHRoaXN9bXVsQ29sdW1uVmVjdG9yKHQpe3Q9Wk10KHRoaXMsdCk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldChlLG4sdGhpcy5nZXQoZSxuKSp0W2VdKTtyZXR1cm4gdGhpc31kaXZDb2x1bW5WZWN0b3IodCl7dD1aTXQodGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KGUsbix0aGlzLmdldChlLG4pL3RbZV0pO3JldHVybiB0aGlzfW11bFJvdyh0LGUpe1dNdCh0aGlzLHQpO2ZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldCh0LG4sdGhpcy5nZXQodCxuKSplKTtyZXR1cm4gdGhpc31tdWxDb2x1bW4odCxlKXtZTXQodGhpcyx0KTtmb3IobGV0IG49MDtuPHRoaXMucm93cztuKyspdGhpcy5zZXQobix0LHRoaXMuZ2V0KG4sdCkqZSk7cmV0dXJuIHRoaXN9bWF4KCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuIE5hTjtsZXQgdD10aGlzLmdldCgwLDApO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5nZXQoZSxuKT50JiYodD10aGlzLmdldChlLG4pKTtyZXR1cm4gdH1tYXhJbmRleCgpe3R2dCh0aGlzKTtsZXQgdD10aGlzLmdldCgwLDApLGU9WzAsMF07Zm9yKGxldCBuPTA7bjx0aGlzLnJvd3M7bisrKWZvcihsZXQgbz0wO288dGhpcy5jb2x1bW5zO28rKyl0aGlzLmdldChuLG8pPnQmJih0PXRoaXMuZ2V0KG4sbyksZVswXT1uLGVbMV09byk7cmV0dXJuIGV9bWluKCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuIE5hTjtsZXQgdD10aGlzLmdldCgwLDApO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5nZXQoZSxuKTx0JiYodD10aGlzLmdldChlLG4pKTtyZXR1cm4gdH1taW5JbmRleCgpe3R2dCh0aGlzKTtsZXQgdD10aGlzLmdldCgwLDApLGU9WzAsMF07Zm9yKGxldCBuPTA7bjx0aGlzLnJvd3M7bisrKWZvcihsZXQgbz0wO288dGhpcy5jb2x1bW5zO28rKyl0aGlzLmdldChuLG8pPHQmJih0PXRoaXMuZ2V0KG4sbyksZVswXT1uLGVbMV09byk7cmV0dXJuIGV9bWF4Um93KHQpe2lmKFdNdCh0aGlzLHQpLHRoaXMuaXNFbXB0eSgpKXJldHVybiBOYU47bGV0IGU9dGhpcy5nZXQodCwwKTtmb3IobGV0IG49MTtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5nZXQodCxuKT5lJiYoZT10aGlzLmdldCh0LG4pKTtyZXR1cm4gZX1tYXhSb3dJbmRleCh0KXtXTXQodGhpcyx0KSx0dnQodGhpcyk7bGV0IGU9dGhpcy5nZXQodCwwKSxuPVt0LDBdO2ZvcihsZXQgbz0xO288dGhpcy5jb2x1bW5zO28rKyl0aGlzLmdldCh0LG8pPmUmJihlPXRoaXMuZ2V0KHQsbyksblsxXT1vKTtyZXR1cm4gbn1taW5Sb3codCl7aWYoV010KHRoaXMsdCksdGhpcy5pc0VtcHR5KCkpcmV0dXJuIE5hTjtsZXQgZT10aGlzLmdldCh0LDApO2ZvcihsZXQgbj0xO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLmdldCh0LG4pPGUmJihlPXRoaXMuZ2V0KHQsbikpO3JldHVybiBlfW1pblJvd0luZGV4KHQpe1dNdCh0aGlzLHQpLHR2dCh0aGlzKTtsZXQgZT10aGlzLmdldCh0LDApLG49W3QsMF07Zm9yKGxldCBvPTE7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuZ2V0KHQsbyk8ZSYmKGU9dGhpcy5nZXQodCxvKSxuWzFdPW8pO3JldHVybiBufW1heENvbHVtbih0KXtpZihZTXQodGhpcyx0KSx0aGlzLmlzRW1wdHkoKSlyZXR1cm4gTmFOO2xldCBlPXRoaXMuZ2V0KDAsdCk7Zm9yKGxldCBuPTE7bjx0aGlzLnJvd3M7bisrKXRoaXMuZ2V0KG4sdCk+ZSYmKGU9dGhpcy5nZXQobix0KSk7cmV0dXJuIGV9bWF4Q29sdW1uSW5kZXgodCl7WU10KHRoaXMsdCksdHZ0KHRoaXMpO2xldCBlPXRoaXMuZ2V0KDAsdCksbj1bMCx0XTtmb3IobGV0IG89MTtvPHRoaXMucm93cztvKyspdGhpcy5nZXQobyx0KT5lJiYoZT10aGlzLmdldChvLHQpLG5bMF09byk7cmV0dXJuIG59bWluQ29sdW1uKHQpe2lmKFlNdCh0aGlzLHQpLHRoaXMuaXNFbXB0eSgpKXJldHVybiBOYU47bGV0IGU9dGhpcy5nZXQoMCx0KTtmb3IobGV0IG49MTtuPHRoaXMucm93cztuKyspdGhpcy5nZXQobix0KTxlJiYoZT10aGlzLmdldChuLHQpKTtyZXR1cm4gZX1taW5Db2x1bW5JbmRleCh0KXtZTXQodGhpcyx0KSx0dnQodGhpcyk7bGV0IGU9dGhpcy5nZXQoMCx0KSxuPVswLHRdO2ZvcihsZXQgbz0xO288dGhpcy5yb3dzO28rKyl0aGlzLmdldChvLHQpPGUmJihlPXRoaXMuZ2V0KG8sdCksblswXT1vKTtyZXR1cm4gbn1kaWFnKCl7bGV0IHQ9TWF0aC5taW4odGhpcy5yb3dzLHRoaXMuY29sdW1ucyksZT1bXTtmb3IobGV0IG49MDtuPHQ7bisrKWUucHVzaCh0aGlzLmdldChuLG4pKTtyZXR1cm4gZX1ub3JtKHQ9ImZyb2Jlbml1cyIpe2xldCBlPTA7aWYoIm1heCI9PT10KXJldHVybiB0aGlzLm1heCgpO2lmKCJmcm9iZW5pdXMiPT09dCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyllKz10aGlzLmdldCh0LG4pKnRoaXMuZ2V0KHQsbik7cmV0dXJuIE1hdGguc3FydChlKX10aHJvdyBuZXcgUmFuZ2VFcnJvcihgdW5rbm93biBub3JtIHR5cGU6ICR7dH1gKX1jdW11bGF0aXZlU3VtKCl7bGV0IHQ9MDtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXQrPXRoaXMuZ2V0KGUsbiksdGhpcy5zZXQoZSxuLHQpO3JldHVybiB0aGlzfWRvdCh0KXtldnQuaXNNYXRyaXgodCkmJih0PXQudG8xREFycmF5KCkpO2xldCBlPXRoaXMudG8xREFycmF5KCk7aWYoZS5sZW5ndGghPT10Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidmVjdG9ycyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBzaXplIik7bGV0IG49MDtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyluKz1lW29dKnRbb107cmV0dXJuIG59bW11bCh0KXt0PWl2dC5jaGVja01hdHJpeCh0KTtsZXQgZT10aGlzLnJvd3Msbj10aGlzLmNvbHVtbnMsbz10LmNvbHVtbnMsaT1uZXcgaXZ0KGUsbyksYT1uZXcgRmxvYXQ2NEFycmF5KG4pO2ZvcihsZXQgcj0wO3I8bztyKyspe2ZvcihsZXQgZT0wO2U8bjtlKyspYVtlXT10LmdldChlLHIpO2ZvcihsZXQgdD0wO3Q8ZTt0Kyspe2xldCBlPTA7Zm9yKGxldCBvPTA7bzxuO28rKyllKz10aGlzLmdldCh0LG8pKmFbb107aS5zZXQodCxyLGUpfX1yZXR1cm4gaX1zdHJhc3NlbjJ4Mih0KXt0PWl2dC5jaGVja01hdHJpeCh0KTtsZXQgZT1uZXcgaXZ0KDIsMik7Y29uc3Qgbj10aGlzLmdldCgwLDApLG89dC5nZXQoMCwwKSxpPXRoaXMuZ2V0KDAsMSksYT10LmdldCgwLDEpLHI9dGhpcy5nZXQoMSwwKSxzPXQuZ2V0KDEsMCksbD10aGlzLmdldCgxLDEpLGM9dC5nZXQoMSwxKSxkPShuK2wpKihvK2MpLHA9KHIrbCkqbyxtPW4qKGEtYyksdT1sKihzLW8pLGY9KG4raSkqYyxnPW0rZixoPXArdSxiPWQtcCttKyhyLW4pKihvK2EpO3JldHVybiBlLnNldCgwLDAsZCt1LWYrKGktbCkqKHMrYykpLGUuc2V0KDAsMSxnKSxlLnNldCgxLDAsaCksZS5zZXQoMSwxLGIpLGV9c3RyYXNzZW4zeDModCl7dD1pdnQuY2hlY2tNYXRyaXgodCk7bGV0IGU9bmV3IGl2dCgzLDMpO2NvbnN0IG49dGhpcy5nZXQoMCwwKSxvPXRoaXMuZ2V0KDAsMSksaT10aGlzLmdldCgwLDIpLGE9dGhpcy5nZXQoMSwwKSxyPXRoaXMuZ2V0KDEsMSkscz10aGlzLmdldCgxLDIpLGw9dGhpcy5nZXQoMiwwKSxjPXRoaXMuZ2V0KDIsMSksZD10aGlzLmdldCgyLDIpLHA9dC5nZXQoMCwwKSxtPXQuZ2V0KDAsMSksdT10LmdldCgwLDIpLGY9dC5nZXQoMSwwKSxnPXQuZ2V0KDEsMSksaD10LmdldCgxLDIpLGI9dC5nZXQoMiwwKSx5PXQuZ2V0KDIsMSksXz10LmdldCgyLDIpLEM9KG4tYSkqKC1tK2cpLE09KC1uK2ErcikqKHAtbStnKSx2PShhK3IpKigtcCttKSx4PW4qcCxPPSgtbitsK2MpKihwLXUraCksUD0oLW4rbCkqKHUtaCksdz0obCtjKSooLXArdSksaz0oLWkrYytkKSooZytiLXkpLFM9KGktZCkqKGcteSksRD1pKmIsRT0oYytkKSooLWIreSksUj0oLWkrcitzKSooaCtiLV8pLEE9KGktcykqKGgtXyksVD0ocitzKSooLWIrXyksTj0obitvK2ktYS1yLWMtZCkqZytNK3YreCtrK0QrRSx6PXgrTyt3KyhuK28raS1yLXMtbC1jKSpoK0QrUitULEk9QytyKigtcCttK2YtZy1oLWIrXykrTSt4K0QrUitBLEg9QytNK3YreCtzKnksRj1EK1IrQStUK2EqdSxMPXgrTytQK2MqKC1wK3UrZi1nLWgtYit5KStrK1MrRCxCPWsrUytEK0UrbCptLFY9eCtPK1ArdytkKl87cmV0dXJuIGUuc2V0KDAsMCx4K0QrbypmKSxlLnNldCgwLDEsTiksZS5zZXQoMCwyLHopLGUuc2V0KDEsMCxJKSxlLnNldCgxLDEsSCksZS5zZXQoMSwyLEYpLGUuc2V0KDIsMCxMKSxlLnNldCgyLDEsQiksZS5zZXQoMiwyLFYpLGV9bW11bFN0cmFzc2VuKHQpe3Q9aXZ0LmNoZWNrTWF0cml4KHQpO2xldCBlPXRoaXMuY2xvbmUoKSxuPWUucm93cyxvPWUuY29sdW1ucyxpPXQucm93cyxhPXQuY29sdW1ucztmdW5jdGlvbiByKHQsZSxuKXtpZih0LnJvd3M9PT1lJiZ0LmNvbHVtbnM9PT1uKXJldHVybiB0O3tsZXQgbz1ldnQuemVyb3MoZSxuKTtyZXR1cm4gbz1vLnNldFN1Yk1hdHJpeCh0LDAsMCksb319byE9PWkmJmNvbnNvbGUud2FybihgTXVsdGlwbHlpbmcgJHtufSB4ICR7b30gYW5kICR7aX0geCAke2F9IG1hdHJpeDogZGltZW5zaW9ucyBkbyBub3QgbWF0Y2guYCk7bGV0IHM9TWF0aC5tYXgobixpKSxsPU1hdGgubWF4KG8sYSk7cmV0dXJuIGU9cihlLHMsbCksKGZ1bmN0aW9uIHQoZSxuLG8saSl7aWYobzw9NTEyfHxpPD01MTIpcmV0dXJuIGUubW11bChuKTtvJTI9PTEmJmklMj09MT8oZT1yKGUsbysxLGkrMSksbj1yKG4sbysxLGkrMSkpOm8lMj09MT8oZT1yKGUsbysxLGkpLG49cihuLG8rMSxpKSk6aSUyPT0xJiYoZT1yKGUsbyxpKzEpLG49cihuLG8saSsxKSk7bGV0IGE9cGFyc2VJbnQoZS5yb3dzLzIsMTApLHM9cGFyc2VJbnQoZS5jb2x1bW5zLzIsMTApLGw9ZS5zdWJNYXRyaXgoMCxhLTEsMCxzLTEpLGM9bi5zdWJNYXRyaXgoMCxhLTEsMCxzLTEpLGQ9ZS5zdWJNYXRyaXgoMCxhLTEscyxlLmNvbHVtbnMtMSkscD1uLnN1Yk1hdHJpeCgwLGEtMSxzLG4uY29sdW1ucy0xKSxtPWUuc3ViTWF0cml4KGEsZS5yb3dzLTEsMCxzLTEpLHU9bi5zdWJNYXRyaXgoYSxuLnJvd3MtMSwwLHMtMSksZj1lLnN1Yk1hdHJpeChhLGUucm93cy0xLHMsZS5jb2x1bW5zLTEpLGc9bi5zdWJNYXRyaXgoYSxuLnJvd3MtMSxzLG4uY29sdW1ucy0xKSxoPXQoZXZ0LmFkZChsLGYpLGV2dC5hZGQoYyxnKSxhLHMpLGI9dChldnQuYWRkKG0sZiksYyxhLHMpLHk9dChsLGV2dC5zdWIocCxnKSxhLHMpLF89dChmLGV2dC5zdWIodSxjKSxhLHMpLEM9dChldnQuYWRkKGwsZCksZyxhLHMpLE09dChldnQuc3ViKG0sbCksZXZ0LmFkZChjLHApLGEscyksdj10KGV2dC5zdWIoZCxmKSxldnQuYWRkKHUsZyksYSxzKSx4PWV2dC5hZGQoaCxfKTt4LnN1YihDKSx4LmFkZCh2KTtsZXQgTz1ldnQuYWRkKHksQyksUD1ldnQuYWRkKGIsXyksdz1ldnQuc3ViKGgsYik7dy5hZGQoeSksdy5hZGQoTSk7bGV0IGs9ZXZ0Lnplcm9zKDIqeC5yb3dzLDIqeC5jb2x1bW5zKTtyZXR1cm4gaz1rLnNldFN1Yk1hdHJpeCh4LDAsMCksaz1rLnNldFN1Yk1hdHJpeChPLHgucm93cywwKSxrPWsuc2V0U3ViTWF0cml4KFAsMCx4LmNvbHVtbnMpLGs9ay5zZXRTdWJNYXRyaXgodyx4LnJvd3MseC5jb2x1bW5zKSxrLnN1Yk1hdHJpeCgwLG8tMSwwLGktMSl9KShlLHQ9cih0LHMsbCkscyxsKX1zY2FsZVJvd3ModD17fSl7aWYoIm9iamVjdCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtjb25zdHttaW46ZT0wLG1heDpuPTF9PXQ7aWYoIU51bWJlci5pc0Zpbml0ZShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtaW4gbXVzdCBiZSBhIG51bWJlciIpO2lmKCFOdW1iZXIuaXNGaW5pdGUobikpdGhyb3cgbmV3IFR5cGVFcnJvcigibWF4IG11c3QgYmUgYSBudW1iZXIiKTtpZihlPj1uKXRocm93IG5ldyBSYW5nZUVycm9yKCJtaW4gbXVzdCBiZSBzbWFsbGVyIHRoYW4gbWF4Iik7bGV0IG89bmV3IGl2dCh0aGlzLnJvd3MsdGhpcy5jb2x1bW5zKTtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0Kyspe2NvbnN0IGk9dGhpcy5nZXRSb3codCk7aS5sZW5ndGg+MCYmQk10KGkse21pbjplLG1heDpuLG91dHB1dDppfSksby5zZXRSb3codCxpKX1yZXR1cm4gb31zY2FsZUNvbHVtbnModD17fSl7aWYoIm9iamVjdCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtjb25zdHttaW46ZT0wLG1heDpuPTF9PXQ7aWYoIU51bWJlci5pc0Zpbml0ZShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtaW4gbXVzdCBiZSBhIG51bWJlciIpO2lmKCFOdW1iZXIuaXNGaW5pdGUobikpdGhyb3cgbmV3IFR5cGVFcnJvcigibWF4IG11c3QgYmUgYSBudW1iZXIiKTtpZihlPj1uKXRocm93IG5ldyBSYW5nZUVycm9yKCJtaW4gbXVzdCBiZSBzbWFsbGVyIHRoYW4gbWF4Iik7bGV0IG89bmV3IGl2dCh0aGlzLnJvd3MsdGhpcy5jb2x1bW5zKTtmb3IobGV0IHQ9MDt0PHRoaXMuY29sdW1uczt0Kyspe2NvbnN0IGk9dGhpcy5nZXRDb2x1bW4odCk7aS5sZW5ndGgmJkJNdChpLHttaW46ZSxtYXg6bixvdXRwdXQ6aX0pLG8uc2V0Q29sdW1uKHQsaSl9cmV0dXJuIG99ZmxpcFJvd3MoKXtjb25zdCB0PU1hdGguY2VpbCh0aGlzLmNvbHVtbnMvMik7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgbj0wO248dDtuKyspe2xldCB0PXRoaXMuZ2V0KGUsbiksbz10aGlzLmdldChlLHRoaXMuY29sdW1ucy0xLW4pO3RoaXMuc2V0KGUsbixvKSx0aGlzLnNldChlLHRoaXMuY29sdW1ucy0xLW4sdCl9cmV0dXJuIHRoaXN9ZmxpcENvbHVtbnMoKXtjb25zdCB0PU1hdGguY2VpbCh0aGlzLnJvd3MvMik7Zm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKWZvcihsZXQgbj0wO248dDtuKyspe2xldCB0PXRoaXMuZ2V0KG4sZSksbz10aGlzLmdldCh0aGlzLnJvd3MtMS1uLGUpO3RoaXMuc2V0KG4sZSxvKSx0aGlzLnNldCh0aGlzLnJvd3MtMS1uLGUsdCl9cmV0dXJuIHRoaXN9a3JvbmVja2VyUHJvZHVjdCh0KXt0PWl2dC5jaGVja01hdHJpeCh0KTtsZXQgZT10aGlzLnJvd3Msbj10aGlzLmNvbHVtbnMsbz10LnJvd3MsaT10LmNvbHVtbnMsYT1uZXcgaXZ0KGUqbyxuKmkpO2ZvcihsZXQgcj0wO3I8ZTtyKyspZm9yKGxldCBlPTA7ZTxuO2UrKylmb3IobGV0IG49MDtuPG87bisrKWZvcihsZXQgcz0wO3M8aTtzKyspYS5zZXQobypyK24saSplK3MsdGhpcy5nZXQocixlKSp0LmdldChuLHMpKTtyZXR1cm4gYX1rcm9uZWNrZXJTdW0odCl7aWYodD1pdnQuY2hlY2tNYXRyaXgodCksIXRoaXMuaXNTcXVhcmUoKXx8IXQuaXNTcXVhcmUoKSl0aHJvdyBuZXcgRXJyb3IoIktyb25lY2tlciBTdW0gbmVlZHMgdHdvIFNxdWFyZSBNYXRyaWNlcyIpO2xldCBlPXRoaXMucm93cyxuPXQucm93cyxvPXRoaXMua3JvbmVja2VyUHJvZHVjdChpdnQuZXllKG4sbikpLGk9aXZ0LmV5ZShlLGUpLmtyb25lY2tlclByb2R1Y3QodCk7cmV0dXJuIG8uYWRkKGkpfXRyYW5zcG9zZSgpe2xldCB0PW5ldyBpdnQodGhpcy5jb2x1bW5zLHRoaXMucm93cyk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0LnNldChuLGUsdGhpcy5nZXQoZSxuKSk7cmV0dXJuIHR9c29ydFJvd3ModD1udnQpe2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKyl0aGlzLnNldFJvdyhlLHRoaXMuZ2V0Um93KGUpLnNvcnQodCkpO3JldHVybiB0aGlzfXNvcnRDb2x1bW5zKHQ9bnZ0KXtmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXRDb2x1bW4oZSx0aGlzLmdldENvbHVtbihlKS5zb3J0KHQpKTtyZXR1cm4gdGhpc31zdWJNYXRyaXgodCxlLG4sbyl7Sk10KHRoaXMsdCxlLG4sbyk7bGV0IGk9bmV3IGl2dChlLXQrMSxvLW4rMSk7Zm9yKGxldCBhPXQ7YTw9ZTthKyspZm9yKGxldCBlPW47ZTw9bztlKyspaS5zZXQoYS10LGUtbix0aGlzLmdldChhLGUpKTtyZXR1cm4gaX1zdWJNYXRyaXhSb3codCxlLG4pe2lmKHZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PW4mJihuPXRoaXMuY29sdW1ucy0xKSxlPm58fGU8MHx8ZT49dGhpcy5jb2x1bW5zfHxuPDB8fG4+PXRoaXMuY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXJndW1lbnQgb3V0IG9mIHJhbmdlIik7bGV0IG89bmV3IGl2dCh0Lmxlbmd0aCxuLWUrMSk7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspZm9yKGxldCBhPWU7YTw9bjthKyspe2lmKHRbaV08MHx8dFtpXT49dGhpcy5yb3dzKXRocm93IG5ldyBSYW5nZUVycm9yKGBSb3cgaW5kZXggb3V0IG9mIHJhbmdlOiAke3RbaV19YCk7by5zZXQoaSxhLWUsdGhpcy5nZXQodFtpXSxhKSl9cmV0dXJuIG99c3ViTWF0cml4Q29sdW1uKHQsZSxuKXtpZih2b2lkIDA9PT1lJiYoZT0wKSx2b2lkIDA9PT1uJiYobj10aGlzLnJvd3MtMSksZT5ufHxlPDB8fGU+PXRoaXMucm93c3x8bjwwfHxuPj10aGlzLnJvd3MpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkFyZ3VtZW50IG91dCBvZiByYW5nZSIpO2xldCBvPW5ldyBpdnQobi1lKzEsdC5sZW5ndGgpO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKWZvcihsZXQgYT1lO2E8PW47YSsrKXtpZih0W2ldPDB8fHRbaV0+PXRoaXMuY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ29sdW1uIGluZGV4IG91dCBvZiByYW5nZTogJHt0W2ldfWApO28uc2V0KGEtZSxpLHRoaXMuZ2V0KGEsdFtpXSkpfXJldHVybiBvfXNldFN1Yk1hdHJpeCh0LGUsbil7aWYoKHQ9aXZ0LmNoZWNrTWF0cml4KHQpKS5pc0VtcHR5KCkpcmV0dXJuIHRoaXM7Sk10KHRoaXMsZSxlK3Qucm93cy0xLG4sbit0LmNvbHVtbnMtMSk7Zm9yKGxldCBvPTA7bzx0LnJvd3M7bysrKWZvcihsZXQgaT0wO2k8dC5jb2x1bW5zO2krKyl0aGlzLnNldChlK28sbitpLHQuZ2V0KG8saSkpO3JldHVybiB0aGlzfXNlbGVjdGlvbih0LGUpe2xldCBuPShmdW5jdGlvbiBvKHQsZSxuKXtyZXR1cm57cm93OlhNdCh0LGUpLGNvbHVtbjpLTXQodCxuKX19KSh0aGlzLHQsZSksaT1uZXcgaXZ0KHQubGVuZ3RoLGUubGVuZ3RoKTtmb3IobGV0IHQ9MDt0PG4ucm93Lmxlbmd0aDt0Kyspe2xldCBlPW4ucm93W3RdO2ZvcihsZXQgbz0wO288bi5jb2x1bW4ubGVuZ3RoO28rKylpLnNldCh0LG8sdGhpcy5nZXQoZSxuLmNvbHVtbltvXSkpfXJldHVybiBpfXRyYWNlKCl7bGV0IHQ9TWF0aC5taW4odGhpcy5yb3dzLHRoaXMuY29sdW1ucyksZT0wO2ZvcihsZXQgbj0wO248dDtuKyspZSs9dGhpcy5nZXQobixuKTtyZXR1cm4gZX1jbG9uZSgpe2xldCB0PW5ldyBpdnQodGhpcy5yb3dzLHRoaXMuY29sdW1ucyk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0LnNldChlLG4sdGhpcy5nZXQoZSxuKSk7cmV0dXJuIHR9c3VtKHQpe3N3aXRjaCh0KXtjYXNlInJvdyI6cmV0dXJuKGZ1bmN0aW9uIGUodCl7bGV0IGU9UU10KHQucm93cyk7Zm9yKGxldCBuPTA7bjx0LnJvd3M7KytuKWZvcihsZXQgbz0wO288dC5jb2x1bW5zOysrbyllW25dKz10LmdldChuLG8pO3JldHVybiBlfSkodGhpcyk7Y2FzZSJjb2x1bW4iOnJldHVybihmdW5jdGlvbiBuKHQpe2xldCBlPVFNdCh0LmNvbHVtbnMpO2ZvcihsZXQgbj0wO248dC5yb3dzOysrbilmb3IobGV0IG89MDtvPHQuY29sdW1uczsrK28pZVtvXSs9dC5nZXQobixvKTtyZXR1cm4gZX0pKHRoaXMpO2Nhc2Ugdm9pZCAwOnJldHVybihmdW5jdGlvbiBvKHQpe2xldCBlPTA7Zm9yKGxldCBuPTA7bjx0LnJvd3M7bisrKWZvcihsZXQgbz0wO288dC5jb2x1bW5zO28rKyllKz10LmdldChuLG8pO3JldHVybiBlfSkodGhpcyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke3R9YCl9fXByb2R1Y3QodCl7c3dpdGNoKHQpe2Nhc2Uicm93IjpyZXR1cm4oZnVuY3Rpb24gZSh0KXtsZXQgZT1RTXQodC5yb3dzLDEpO2ZvcihsZXQgbj0wO248dC5yb3dzOysrbilmb3IobGV0IG89MDtvPHQuY29sdW1uczsrK28pZVtuXSo9dC5nZXQobixvKTtyZXR1cm4gZX0pKHRoaXMpO2Nhc2UiY29sdW1uIjpyZXR1cm4oZnVuY3Rpb24gbih0KXtsZXQgZT1RTXQodC5jb2x1bW5zLDEpO2ZvcihsZXQgbj0wO248dC5yb3dzOysrbilmb3IobGV0IG89MDtvPHQuY29sdW1uczsrK28pZVtvXSo9dC5nZXQobixvKTtyZXR1cm4gZX0pKHRoaXMpO2Nhc2Ugdm9pZCAwOnJldHVybihmdW5jdGlvbiBvKHQpe2xldCBlPTE7Zm9yKGxldCBuPTA7bjx0LnJvd3M7bisrKWZvcihsZXQgbz0wO288dC5jb2x1bW5zO28rKyllKj10LmdldChuLG8pO3JldHVybiBlfSkodGhpcyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke3R9YCl9fW1lYW4odCl7Y29uc3QgZT10aGlzLnN1bSh0KTtzd2l0Y2godCl7Y2FzZSJyb3ciOmZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKyllW3RdLz10aGlzLmNvbHVtbnM7cmV0dXJuIGU7Y2FzZSJjb2x1bW4iOmZvcihsZXQgdD0wO3Q8dGhpcy5jb2x1bW5zO3QrKyllW3RdLz10aGlzLnJvd3M7cmV0dXJuIGU7Y2FzZSB2b2lkIDA6cmV0dXJuIGUvdGhpcy5zaXplO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG9wdGlvbjogJHt0fWApfX12YXJpYW5jZSh0LGU9e30pe2lmKCJvYmplY3QiPT10eXBlb2YgdCYmKGU9dCx0PXZvaWQgMCksIm9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtjb25zdHt1bmJpYXNlZDpuPSEwLG1lYW46bz10aGlzLm1lYW4odCl9PWU7aWYoImJvb2xlYW4iIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJ1bmJpYXNlZCBtdXN0IGJlIGEgYm9vbGVhbiIpO3N3aXRjaCh0KXtjYXNlInJvdyI6aWYoIUFycmF5LmlzQXJyYXkobykpdGhyb3cgbmV3IFR5cGVFcnJvcigibWVhbiBtdXN0IGJlIGFuIGFycmF5Iik7cmV0dXJuKGZ1bmN0aW9uIGUodCxuLG8pe2NvbnN0IGk9dC5yb3dzLGE9dC5jb2x1bW5zLHI9W107Zm9yKGxldCBlPTA7ZTxpO2UrKyl7bGV0IGk9MCxzPTAsbD0wO2ZvcihsZXQgbj0wO248YTtuKyspbD10LmdldChlLG4pLW9bZV0saSs9bCxzKz1sKmw7ci5wdXNoKG4/KHMtaSppL2EpLyhhLTEpOihzLWkqaS9hKS9hKX1yZXR1cm4gcn0pKHRoaXMsbixvKTtjYXNlImNvbHVtbiI6aWYoIUFycmF5LmlzQXJyYXkobykpdGhyb3cgbmV3IFR5cGVFcnJvcigibWVhbiBtdXN0IGJlIGFuIGFycmF5Iik7cmV0dXJuKGZ1bmN0aW9uIGkodCxlLG4pe2NvbnN0IG89dC5yb3dzLGk9dC5jb2x1bW5zLGE9W107Zm9yKGxldCByPTA7cjxpO3IrKyl7bGV0IGk9MCxzPTAsbD0wO2ZvcihsZXQgZT0wO2U8bztlKyspbD10LmdldChlLHIpLW5bcl0saSs9bCxzKz1sKmw7YS5wdXNoKGU/KHMtaSppL28pLyhvLTEpOihzLWkqaS9vKS9vKX1yZXR1cm4gYX0pKHRoaXMsbixvKTtjYXNlIHZvaWQgMDppZigibnVtYmVyIiE9dHlwZW9mIG8pdGhyb3cgbmV3IFR5cGVFcnJvcigibWVhbiBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuKGZ1bmN0aW9uIGEodCxlLG4pe2NvbnN0IG89dC5yb3dzLGk9dC5jb2x1bW5zLGE9byppO2xldCByPTAscz0wLGw9MDtmb3IobGV0IGU9MDtlPG87ZSsrKWZvcihsZXQgbz0wO288aTtvKyspbD10LmdldChlLG8pLW4scis9bCxzKz1sKmw7cmV0dXJuIGU/KHMtcipyL2EpLyhhLTEpOihzLXIqci9hKS9hfSkodGhpcyxuLG8pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG9wdGlvbjogJHt0fWApfX1zdGFuZGFyZERldmlhdGlvbih0LGUpeyJvYmplY3QiPT10eXBlb2YgdCYmKGU9dCx0PXZvaWQgMCk7Y29uc3Qgbj10aGlzLnZhcmlhbmNlKHQsZSk7aWYodm9pZCAwPT09dClyZXR1cm4gTWF0aC5zcXJ0KG4pO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKW5bdF09TWF0aC5zcXJ0KG5bdF0pO3JldHVybiBufWNlbnRlcih0LGU9e30pe2lmKCJvYmplY3QiPT10eXBlb2YgdCYmKGU9dCx0PXZvaWQgMCksIm9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtjb25zdHtjZW50ZXI6bj10aGlzLm1lYW4odCl9PWU7c3dpdGNoKHQpe2Nhc2Uicm93IjppZighQXJyYXkuaXNBcnJheShuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJjZW50ZXIgbXVzdCBiZSBhbiBhcnJheSIpO3JldHVybihmdW5jdGlvbiBlKHQsbil7Zm9yKGxldCBlPTA7ZTx0LnJvd3M7ZSsrKWZvcihsZXQgbz0wO288dC5jb2x1bW5zO28rKyl0LnNldChlLG8sdC5nZXQoZSxvKS1uW2VdKX0pKHRoaXMsbiksdGhpcztjYXNlImNvbHVtbiI6aWYoIUFycmF5LmlzQXJyYXkobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2VudGVyIG11c3QgYmUgYW4gYXJyYXkiKTtyZXR1cm4oZnVuY3Rpb24gbyh0LGUpe2ZvcihsZXQgbj0wO248dC5yb3dzO24rKylmb3IobGV0IG89MDtvPHQuY29sdW1ucztvKyspdC5zZXQobixvLHQuZ2V0KG4sbyktZVtvXSl9KSh0aGlzLG4pLHRoaXM7Y2FzZSB2b2lkIDA6aWYoIm51bWJlciIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImNlbnRlciBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuKGZ1bmN0aW9uIGkodCxlKXtmb3IobGV0IG49MDtuPHQucm93cztuKyspZm9yKGxldCBvPTA7bzx0LmNvbHVtbnM7bysrKXQuc2V0KG4sbyx0LmdldChuLG8pLWUpfSkodGhpcyxuKSx0aGlzO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG9wdGlvbjogJHt0fWApfX1zY2FsZSh0LGU9e30pe2lmKCJvYmplY3QiPT10eXBlb2YgdCYmKGU9dCx0PXZvaWQgMCksIm9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtsZXQgbj1lLnNjYWxlO3N3aXRjaCh0KXtjYXNlInJvdyI6aWYodm9pZCAwPT09biluPShmdW5jdGlvbiBlKHQpe2NvbnN0IGU9W107Zm9yKGxldCBuPTA7bjx0LnJvd3M7bisrKXtsZXQgbz0wO2ZvcihsZXQgZT0wO2U8dC5jb2x1bW5zO2UrKylvKz1NYXRoLnBvdyh0LmdldChuLGUpLDIpLyh0LmNvbHVtbnMtMSk7ZS5wdXNoKE1hdGguc3FydChvKSl9cmV0dXJuIGV9KSh0aGlzKTtlbHNlIGlmKCFBcnJheS5pc0FycmF5KG4pKXRocm93IG5ldyBUeXBlRXJyb3IoInNjYWxlIG11c3QgYmUgYW4gYXJyYXkiKTtyZXR1cm4oZnVuY3Rpb24gbyh0LGUpe2ZvcihsZXQgbj0wO248dC5yb3dzO24rKylmb3IobGV0IG89MDtvPHQuY29sdW1ucztvKyspdC5zZXQobixvLHQuZ2V0KG4sbykvZVtuXSl9KSh0aGlzLG4pLHRoaXM7Y2FzZSJjb2x1bW4iOmlmKHZvaWQgMD09PW4pbj0oZnVuY3Rpb24gaSh0KXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wO248dC5jb2x1bW5zO24rKyl7bGV0IG89MDtmb3IobGV0IGU9MDtlPHQucm93cztlKyspbys9TWF0aC5wb3codC5nZXQoZSxuKSwyKS8odC5yb3dzLTEpO2UucHVzaChNYXRoLnNxcnQobykpfXJldHVybiBlfSkodGhpcyk7ZWxzZSBpZighQXJyYXkuaXNBcnJheShuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzY2FsZSBtdXN0IGJlIGFuIGFycmF5Iik7cmV0dXJuKGZ1bmN0aW9uIGEodCxlKXtmb3IobGV0IG49MDtuPHQucm93cztuKyspZm9yKGxldCBvPTA7bzx0LmNvbHVtbnM7bysrKXQuc2V0KG4sbyx0LmdldChuLG8pL2Vbb10pfSkodGhpcyxuKSx0aGlzO2Nhc2Ugdm9pZCAwOmlmKHZvaWQgMD09PW4pbj0oZnVuY3Rpb24gcih0KXtjb25zdCBlPXQuc2l6ZS0xO2xldCBuPTA7Zm9yKGxldCBvPTA7bzx0LmNvbHVtbnM7bysrKWZvcihsZXQgaT0wO2k8dC5yb3dzO2krKyluKz1NYXRoLnBvdyh0LmdldChpLG8pLDIpL2U7cmV0dXJuIE1hdGguc3FydChuKX0pKHRoaXMpO2Vsc2UgaWYoIm51bWJlciIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoInNjYWxlIG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4oZnVuY3Rpb24gcyh0LGUpe2ZvcihsZXQgbj0wO248dC5yb3dzO24rKylmb3IobGV0IG89MDtvPHQuY29sdW1ucztvKyspdC5zZXQobixvLHQuZ2V0KG4sbykvZSl9KSh0aGlzLG4pLHRoaXM7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke3R9YCl9fXRvU3RyaW5nKHQpe3JldHVybiBVTXQodGhpcyx0KX19ZnVuY3Rpb24gbnZ0KHQsZSl7cmV0dXJuIHQtZX1ldnQucHJvdG90eXBlLmtsYXNzPSJNYXRyaXgiLCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiYoZXZ0LnByb3RvdHlwZVtTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpXT1mdW5jdGlvbiBvdnQoKXtyZXR1cm4gVU10KHRoaXMpfSksZXZ0LnJhbmRvbT1ldnQucmFuZCxldnQucmFuZG9tSW50PWV2dC5yYW5kSW50LGV2dC5kaWFnb25hbD1ldnQuZGlhZyxldnQucHJvdG90eXBlLmRpYWdvbmFsPWV2dC5wcm90b3R5cGUuZGlhZyxldnQuaWRlbnRpdHk9ZXZ0LmV5ZSxldnQucHJvdG90eXBlLm5lZ2F0ZT1ldnQucHJvdG90eXBlLm5lZyxldnQucHJvdG90eXBlLnRlbnNvclByb2R1Y3Q9ZXZ0LnByb3RvdHlwZS5rcm9uZWNrZXJQcm9kdWN0O2NsYXNzIGl2dCBleHRlbmRzIGV2dHtjb25zdHJ1Y3Rvcih0LGUpe2lmKHN1cGVyKCksaXZ0LmlzTWF0cml4KHQpKXJldHVybiB0LmNsb25lKCk7aWYoTnVtYmVyLmlzSW50ZWdlcih0KSYmdD49MCl7aWYodGhpcy5kYXRhPVtdLCEoTnVtYmVyLmlzSW50ZWdlcihlKSYmZT49MCkpdGhyb3cgbmV3IFR5cGVFcnJvcigibkNvbHVtbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiKTtmb3IobGV0IG49MDtuPHQ7bisrKXRoaXMuZGF0YS5wdXNoKG5ldyBGbG9hdDY0QXJyYXkoZSkpfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBvciBhbiBhcnJheSIpO3tjb25zdCBuPXQ7aWYoIm51bWJlciIhPXR5cGVvZihlPSh0PW4ubGVuZ3RoKT9uWzBdLmxlbmd0aDowKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEYXRhIG11c3QgYmUgYSAyRCBhcnJheSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50Iik7dGhpcy5kYXRhPVtdO2ZvcihsZXQgbz0wO288dDtvKyspe2lmKG5bb10ubGVuZ3RoIT09ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5jb25zaXN0ZW50IGFycmF5IGRpbWVuc2lvbnMiKTt0aGlzLmRhdGEucHVzaChGbG9hdDY0QXJyYXkuZnJvbShuW29dKSl9fX10aGlzLnJvd3M9dCx0aGlzLmNvbHVtbnM9ZX1zZXQodCxlLG4pe3JldHVybiB0aGlzLmRhdGFbdF1bZV09bix0aGlzfWdldCh0LGUpe3JldHVybiB0aGlzLmRhdGFbdF1bZV19cmVtb3ZlUm93KHQpe3JldHVybiBXTXQodGhpcyx0KSx0aGlzLmRhdGEuc3BsaWNlKHQsMSksdGhpcy5yb3dzLT0xLHRoaXN9YWRkUm93KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXQsdD10aGlzLnJvd3MpLFdNdCh0aGlzLHQsITApLGU9RmxvYXQ2NEFycmF5LmZyb20ocU10KHRoaXMsZSkpLHRoaXMuZGF0YS5zcGxpY2UodCwwLGUpLHRoaXMucm93cys9MSx0aGlzfXJlbW92ZUNvbHVtbih0KXtZTXQodGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspe2NvbnN0IG49bmV3IEZsb2F0NjRBcnJheSh0aGlzLmNvbHVtbnMtMSk7Zm9yKGxldCBvPTA7bzx0O28rKyluW29dPXRoaXMuZGF0YVtlXVtvXTtmb3IobGV0IG89dCsxO288dGhpcy5jb2x1bW5zO28rKyluW28tMV09dGhpcy5kYXRhW2VdW29dO3RoaXMuZGF0YVtlXT1ufXJldHVybiB0aGlzLmNvbHVtbnMtPTEsdGhpc31hZGRDb2x1bW4odCxlKXt2b2lkIDA9PT1lJiYoZT10LHQ9dGhpcy5jb2x1bW5zKSxZTXQodGhpcyx0LCEwKSxlPVpNdCh0aGlzLGUpO2ZvcihsZXQgbj0wO248dGhpcy5yb3dzO24rKyl7Y29uc3Qgbz1uZXcgRmxvYXQ2NEFycmF5KHRoaXMuY29sdW1ucysxKTtsZXQgaT0wO2Zvcig7aTx0O2krKylvW2ldPXRoaXMuZGF0YVtuXVtpXTtmb3Iob1tpKytdPWVbbl07aTx0aGlzLmNvbHVtbnMrMTtpKyspb1tpXT10aGlzLmRhdGFbbl1baS0xXTt0aGlzLmRhdGFbbl09b31yZXR1cm4gdGhpcy5jb2x1bW5zKz0xLHRoaXN9fSEoZnVuY3Rpb24gYXZ0KHQsZSl7dC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlP3RoaXMuYWRkUyhlKTp0aGlzLmFkZE0oZSl9LHQucHJvdG90eXBlLmFkZFM9ZnVuY3Rpb24gdChlKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KHQsbix0aGlzLmdldCh0LG4pK2UpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5hZGRNPWZ1bmN0aW9uIHQobil7aWYobj1lLmNoZWNrTWF0cml4KG4pLHRoaXMucm93cyE9PW4ucm93c3x8dGhpcy5jb2x1bW5zIT09bi5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSx0aGlzLmdldCh0LGUpK24uZ2V0KHQsZSkpO3JldHVybiB0aGlzfSx0LmFkZD1mdW5jdGlvbiB0KG4sbyl7cmV0dXJuIG5ldyBlKG4pLmFkZChvKX0sdC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlP3RoaXMuc3ViUyhlKTp0aGlzLnN1Yk0oZSl9LHQucHJvdG90eXBlLnN1YlM9ZnVuY3Rpb24gdChlKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KHQsbix0aGlzLmdldCh0LG4pLWUpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5zdWJNPWZ1bmN0aW9uIHQobil7aWYobj1lLmNoZWNrTWF0cml4KG4pLHRoaXMucm93cyE9PW4ucm93c3x8dGhpcy5jb2x1bW5zIT09bi5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSx0aGlzLmdldCh0LGUpLW4uZ2V0KHQsZSkpO3JldHVybiB0aGlzfSx0LnN1Yj1mdW5jdGlvbiB0KG4sbyl7cmV0dXJuIG5ldyBlKG4pLnN1YihvKX0sdC5wcm90b3R5cGUuc3VidHJhY3Q9dC5wcm90b3R5cGUuc3ViLHQucHJvdG90eXBlLnN1YnRyYWN0Uz10LnByb3RvdHlwZS5zdWJTLHQucHJvdG90eXBlLnN1YnRyYWN0TT10LnByb3RvdHlwZS5zdWJNLHQuc3VidHJhY3Q9dC5zdWIsdC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlP3RoaXMubXVsUyhlKTp0aGlzLm11bE0oZSl9LHQucHJvdG90eXBlLm11bFM9ZnVuY3Rpb24gdChlKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KHQsbix0aGlzLmdldCh0LG4pKmUpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5tdWxNPWZ1bmN0aW9uIHQobil7aWYobj1lLmNoZWNrTWF0cml4KG4pLHRoaXMucm93cyE9PW4ucm93c3x8dGhpcy5jb2x1bW5zIT09bi5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSx0aGlzLmdldCh0LGUpKm4uZ2V0KHQsZSkpO3JldHVybiB0aGlzfSx0Lm11bD1mdW5jdGlvbiB0KG4sbyl7cmV0dXJuIG5ldyBlKG4pLm11bChvKX0sdC5wcm90b3R5cGUubXVsdGlwbHk9dC5wcm90b3R5cGUubXVsLHQucHJvdG90eXBlLm11bHRpcGx5Uz10LnByb3RvdHlwZS5tdWxTLHQucHJvdG90eXBlLm11bHRpcGx5TT10LnByb3RvdHlwZS5tdWxNLHQubXVsdGlwbHk9dC5tdWwsdC5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uIHQoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlP3RoaXMuZGl2UyhlKTp0aGlzLmRpdk0oZSl9LHQucHJvdG90eXBlLmRpdlM9ZnVuY3Rpb24gdChlKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KHQsbix0aGlzLmdldCh0LG4pL2UpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5kaXZNPWZ1bmN0aW9uIHQobil7aWYobj1lLmNoZWNrTWF0cml4KG4pLHRoaXMucm93cyE9PW4ucm93c3x8dGhpcy5jb2x1bW5zIT09bi5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSx0aGlzLmdldCh0LGUpL24uZ2V0KHQsZSkpO3JldHVybiB0aGlzfSx0LmRpdj1mdW5jdGlvbiB0KG4sbyl7cmV0dXJuIG5ldyBlKG4pLmRpdihvKX0sdC5wcm90b3R5cGUuZGl2aWRlPXQucHJvdG90eXBlLmRpdix0LnByb3RvdHlwZS5kaXZpZGVTPXQucHJvdG90eXBlLmRpdlMsdC5wcm90b3R5cGUuZGl2aWRlTT10LnByb3RvdHlwZS5kaXZNLHQuZGl2aWRlPXQuZGl2LHQucHJvdG90eXBlLm1vZD1mdW5jdGlvbiB0KGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzLm1vZFMoZSk6dGhpcy5tb2RNKGUpfSx0LnByb3RvdHlwZS5tb2RTPWZ1bmN0aW9uIHQoZSl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgbj0wO248dGhpcy5jb2x1bW5zO24rKyl0aGlzLnNldCh0LG4sdGhpcy5nZXQodCxuKSVlKTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUubW9kTT1mdW5jdGlvbiB0KG4pe2lmKG49ZS5jaGVja01hdHJpeChuKSx0aGlzLnJvd3MhPT1uLnJvd3N8fHRoaXMuY29sdW1ucyE9PW4uY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsIik7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsdGhpcy5nZXQodCxlKSVuLmdldCh0LGUpKTtyZXR1cm4gdGhpc30sdC5tb2Q9ZnVuY3Rpb24gdChuLG8pe3JldHVybiBuZXcgZShuKS5tb2Qobyl9LHQucHJvdG90eXBlLm1vZHVsdXM9dC5wcm90b3R5cGUubW9kLHQucHJvdG90eXBlLm1vZHVsdXNTPXQucHJvdG90eXBlLm1vZFMsdC5wcm90b3R5cGUubW9kdWx1c009dC5wcm90b3R5cGUubW9kTSx0Lm1vZHVsdXM9dC5tb2QsdC5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlP3RoaXMuYW5kUyhlKTp0aGlzLmFuZE0oZSl9LHQucHJvdG90eXBlLmFuZFM9ZnVuY3Rpb24gdChlKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBuPTA7bjx0aGlzLmNvbHVtbnM7bisrKXRoaXMuc2V0KHQsbix0aGlzLmdldCh0LG4pJmUpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5hbmRNPWZ1bmN0aW9uIHQobil7aWYobj1lLmNoZWNrTWF0cml4KG4pLHRoaXMucm93cyE9PW4ucm93c3x8dGhpcy5jb2x1bW5zIT09bi5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSx0aGlzLmdldCh0LGUpJm4uZ2V0KHQsZSkpO3JldHVybiB0aGlzfSx0LmFuZD1mdW5jdGlvbiB0KG4sbyl7cmV0dXJuIG5ldyBlKG4pLmFuZChvKX0sdC5wcm90b3R5cGUub3I9ZnVuY3Rpb24gdChlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5vclMoZSk6dGhpcy5vck0oZSl9LHQucHJvdG90eXBlLm9yUz1mdW5jdGlvbiB0KGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLHRoaXMuZ2V0KHQsbil8ZSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLm9yTT1mdW5jdGlvbiB0KG4pe2lmKG49ZS5jaGVja01hdHJpeChuKSx0aGlzLnJvd3MhPT1uLnJvd3N8fHRoaXMuY29sdW1ucyE9PW4uY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsIik7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsdGhpcy5nZXQodCxlKXxuLmdldCh0LGUpKTtyZXR1cm4gdGhpc30sdC5vcj1mdW5jdGlvbiB0KG4sbyl7cmV0dXJuIG5ldyBlKG4pLm9yKG8pfSx0LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24gdChlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy54b3JTKGUpOnRoaXMueG9yTShlKX0sdC5wcm90b3R5cGUueG9yUz1mdW5jdGlvbiB0KGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLHRoaXMuZ2V0KHQsbileZSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnhvck09ZnVuY3Rpb24gdChuKXtpZihuPWUuY2hlY2tNYXRyaXgobiksdGhpcy5yb3dzIT09bi5yb3dzfHx0aGlzLmNvbHVtbnMhPT1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLHRoaXMuZ2V0KHQsZSlebi5nZXQodCxlKSk7cmV0dXJuIHRoaXN9LHQueG9yPWZ1bmN0aW9uIHQobixvKXtyZXR1cm4gbmV3IGUobikueG9yKG8pfSx0LnByb3RvdHlwZS5sZWZ0U2hpZnQ9ZnVuY3Rpb24gdChlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5sZWZ0U2hpZnRTKGUpOnRoaXMubGVmdFNoaWZ0TShlKX0sdC5wcm90b3R5cGUubGVmdFNoaWZ0Uz1mdW5jdGlvbiB0KGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLHRoaXMuZ2V0KHQsbik8PGUpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5sZWZ0U2hpZnRNPWZ1bmN0aW9uIHQobil7aWYobj1lLmNoZWNrTWF0cml4KG4pLHRoaXMucm93cyE9PW4ucm93c3x8dGhpcy5jb2x1bW5zIT09bi5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSx0aGlzLmdldCh0LGUpPDxuLmdldCh0LGUpKTtyZXR1cm4gdGhpc30sdC5sZWZ0U2hpZnQ9ZnVuY3Rpb24gdChuLG8pe3JldHVybiBuZXcgZShuKS5sZWZ0U2hpZnQobyl9LHQucHJvdG90eXBlLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnQ9ZnVuY3Rpb24gdChlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0UyhlKTp0aGlzLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRNKGUpfSx0LnByb3RvdHlwZS5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0Uz1mdW5jdGlvbiB0KGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLHRoaXMuZ2V0KHQsbik+PmUpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0TT1mdW5jdGlvbiB0KG4pe2lmKG49ZS5jaGVja01hdHJpeChuKSx0aGlzLnJvd3MhPT1uLnJvd3N8fHRoaXMuY29sdW1ucyE9PW4uY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsIik7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsdGhpcy5nZXQodCxlKT4+bi5nZXQodCxlKSk7cmV0dXJuIHRoaXN9LHQuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdD1mdW5jdGlvbiB0KG4sbyl7cmV0dXJuIG5ldyBlKG4pLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnQobyl9LHQucHJvdG90eXBlLnJpZ2h0U2hpZnQ9ZnVuY3Rpb24gdChlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5yaWdodFNoaWZ0UyhlKTp0aGlzLnJpZ2h0U2hpZnRNKGUpfSx0LnByb3RvdHlwZS5yaWdodFNoaWZ0Uz1mdW5jdGlvbiB0KGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLHRoaXMuZ2V0KHQsbik+Pj5lKTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUucmlnaHRTaGlmdE09ZnVuY3Rpb24gdChuKXtpZihuPWUuY2hlY2tNYXRyaXgobiksdGhpcy5yb3dzIT09bi5yb3dzfHx0aGlzLmNvbHVtbnMhPT1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLHRoaXMuZ2V0KHQsZSk+Pj5uLmdldCh0LGUpKTtyZXR1cm4gdGhpc30sdC5yaWdodFNoaWZ0PWZ1bmN0aW9uIHQobixvKXtyZXR1cm4gbmV3IGUobikucmlnaHRTaGlmdChvKX0sdC5wcm90b3R5cGUuemVyb0ZpbGxSaWdodFNoaWZ0PXQucHJvdG90eXBlLnJpZ2h0U2hpZnQsdC5wcm90b3R5cGUuemVyb0ZpbGxSaWdodFNoaWZ0Uz10LnByb3RvdHlwZS5yaWdodFNoaWZ0Uyx0LnByb3RvdHlwZS56ZXJvRmlsbFJpZ2h0U2hpZnRNPXQucHJvdG90eXBlLnJpZ2h0U2hpZnRNLHQuemVyb0ZpbGxSaWdodFNoaWZ0PXQucmlnaHRTaGlmdCx0LnByb3RvdHlwZS5ub3Q9ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLH50aGlzLmdldCh0LGUpKTtyZXR1cm4gdGhpc30sdC5ub3Q9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikubm90KCl9LHQucHJvdG90eXBlLmFicz1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5hYnModGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmFicz1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5hYnMoKX0sdC5wcm90b3R5cGUuYWNvcz1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5hY29zKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5hY29zPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmFjb3MoKX0sdC5wcm90b3R5cGUuYWNvc2g9ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGguYWNvc2godGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmFjb3NoPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmFjb3NoKCl9LHQucHJvdG90eXBlLmFzaW49ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGguYXNpbih0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuYXNpbj1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5hc2luKCl9LHQucHJvdG90eXBlLmFzaW5oPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmFzaW5oKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5hc2luaD1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5hc2luaCgpfSx0LnByb3RvdHlwZS5hdGFuPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmF0YW4odGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmF0YW49ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuYXRhbigpfSx0LnByb3RvdHlwZS5hdGFuaD1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5hdGFuaCh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuYXRhbmg9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuYXRhbmgoKX0sdC5wcm90b3R5cGUuY2JydD1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5jYnJ0KHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5jYnJ0PWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmNicnQoKX0sdC5wcm90b3R5cGUuY2VpbD1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5jZWlsKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5jZWlsPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmNlaWwoKX0sdC5wcm90b3R5cGUuY2x6MzI9ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGguY2x6MzIodGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmNsejMyPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmNsejMyKCl9LHQucHJvdG90eXBlLmNvcz1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5jb3ModGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmNvcz1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5jb3MoKX0sdC5wcm90b3R5cGUuY29zaD1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5jb3NoKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5jb3NoPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmNvc2goKX0sdC5wcm90b3R5cGUuZXhwPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmV4cCh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuZXhwPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmV4cCgpfSx0LnByb3RvdHlwZS5leHBtMT1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5leHBtMSh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuZXhwbTE9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuZXhwbTEoKX0sdC5wcm90b3R5cGUuZmxvb3I9ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGguZmxvb3IodGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmZsb29yPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmZsb29yKCl9LHQucHJvdG90eXBlLmZyb3VuZD1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5mcm91bmQodGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmZyb3VuZD1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5mcm91bmQoKX0sdC5wcm90b3R5cGUubG9nPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLmxvZyh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQubG9nPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmxvZygpfSx0LnByb3RvdHlwZS5sb2cxcD1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC5sb2cxcCh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQubG9nMXA9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikubG9nMXAoKX0sdC5wcm90b3R5cGUubG9nMTA9ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGgubG9nMTAodGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LmxvZzEwPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLmxvZzEwKCl9LHQucHJvdG90eXBlLmxvZzI9ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGgubG9nMih0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQubG9nMj1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5sb2cyKCl9LHQucHJvdG90eXBlLnJvdW5kPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLnJvdW5kKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5yb3VuZD1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5yb3VuZCgpfSx0LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uIHQoKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLnNpZ24odGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LnNpZ249ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuc2lnbigpfSx0LnByb3RvdHlwZS5zaW49ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGguc2luKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC5zaW49ZnVuY3Rpb24gdChuKXtyZXR1cm4gbmV3IGUobikuc2luKCl9LHQucHJvdG90eXBlLnNpbmg9ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGguc2luaCh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuc2luaD1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5zaW5oKCl9LHQucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGguc3FydCh0aGlzLmdldCh0LGUpKSk7cmV0dXJuIHRoaXN9LHQuc3FydD1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS5zcXJ0KCl9LHQucHJvdG90eXBlLnRhbj1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC50YW4odGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LnRhbj1mdW5jdGlvbiB0KG4pe3JldHVybiBuZXcgZShuKS50YW4oKX0sdC5wcm90b3R5cGUudGFuaD1mdW5jdGlvbiB0KCl7Zm9yKGxldCB0PTA7dDx0aGlzLnJvd3M7dCsrKWZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKyl0aGlzLnNldCh0LGUsTWF0aC50YW5oKHRoaXMuZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc30sdC50YW5oPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLnRhbmgoKX0sdC5wcm90b3R5cGUudHJ1bmM9ZnVuY3Rpb24gdCgpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuY29sdW1ucztlKyspdGhpcy5zZXQodCxlLE1hdGgudHJ1bmModGhpcy5nZXQodCxlKSkpO3JldHVybiB0aGlzfSx0LnRydW5jPWZ1bmN0aW9uIHQobil7cmV0dXJuIG5ldyBlKG4pLnRydW5jKCl9LHQucG93PWZ1bmN0aW9uIHQobixvKXtyZXR1cm4gbmV3IGUobikucG93KG8pfSx0LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24gdChlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5wb3dTKGUpOnRoaXMucG93TShlKX0sdC5wcm90b3R5cGUucG93Uz1mdW5jdGlvbiB0KGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5yb3dzO3QrKylmb3IobGV0IG49MDtuPHRoaXMuY29sdW1ucztuKyspdGhpcy5zZXQodCxuLE1hdGgucG93KHRoaXMuZ2V0KHQsbiksZSkpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5wb3dNPWZ1bmN0aW9uIHQobil7aWYobj1lLmNoZWNrTWF0cml4KG4pLHRoaXMucm93cyE9PW4ucm93c3x8dGhpcy5jb2x1bW5zIT09bi5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0KHQsZSxNYXRoLnBvdyh0aGlzLmdldCh0LGUpLG4uZ2V0KHQsZSkpKTtyZXR1cm4gdGhpc319KShldnQsaXZ0KTtjbGFzcyBydnQgZXh0ZW5kcyBldnR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRhdGE9dCx0aGlzLnJvd3M9dC5sZW5ndGgsdGhpcy5jb2x1bW5zPXRbMF0ubGVuZ3RofXNldCh0LGUsbil7cmV0dXJuIHRoaXMuZGF0YVt0XVtlXT1uLHRoaXN9Z2V0KHQsZSl7cmV0dXJuIHRoaXMuZGF0YVt0XVtlXX19Y2xhc3Mgc3Z0e2NvbnN0cnVjdG9yKHQpe2xldCBlLG4sbyxpLGEscixzLGwsYyxkPSh0PXJ2dC5jaGVja01hdHJpeCh0KSkuY2xvbmUoKSxwPWQucm93cyxtPWQuY29sdW1ucyx1PW5ldyBGbG9hdDY0QXJyYXkocCksZj0xO2ZvcihlPTA7ZTxwO2UrKyl1W2VdPWU7Zm9yKGw9bmV3IEZsb2F0NjRBcnJheShwKSxuPTA7bjxtO24rKyl7Zm9yKGU9MDtlPHA7ZSsrKWxbZV09ZC5nZXQoZSxuKTtmb3IoZT0wO2U8cDtlKyspe2ZvcihjPU1hdGgubWluKGUsbiksYT0wLG89MDtvPGM7bysrKWErPWQuZ2V0KGUsbykqbFtvXTtsW2VdLT1hLGQuc2V0KGUsbixsW2VdKX1mb3IoaT1uLGU9bisxO2U8cDtlKyspTWF0aC5hYnMobFtlXSk+TWF0aC5hYnMobFtpXSkmJihpPWUpO2lmKGkhPT1uKXtmb3Iobz0wO288bTtvKyspcj1kLmdldChpLG8pLGQuc2V0KGksbyxkLmdldChuLG8pKSxkLnNldChuLG8scik7cz11W2ldLHVbaV09dVtuXSx1W25dPXMsZj0tZn1pZihuPHAmJjAhPT1kLmdldChuLG4pKWZvcihlPW4rMTtlPHA7ZSsrKWQuc2V0KGUsbixkLmdldChlLG4pL2QuZ2V0KG4sbikpfXRoaXMuTFU9ZCx0aGlzLnBpdm90VmVjdG9yPXUsdGhpcy5waXZvdFNpZ249Zn1pc1Npbmd1bGFyKCl7bGV0IHQ9dGhpcy5MVSxlPXQuY29sdW1ucztmb3IobGV0IG49MDtuPGU7bisrKWlmKDA9PT10LmdldChuLG4pKXJldHVybiEwO3JldHVybiExfXNvbHZlKHQpe3Q9aXZ0LmNoZWNrTWF0cml4KHQpO2xldCBlPXRoaXMuTFU7aWYoZS5yb3dzIT09dC5yb3dzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBtYXRyaXggZGltZW5zaW9ucyIpO2lmKHRoaXMuaXNTaW5ndWxhcigpKXRocm93IG5ldyBFcnJvcigiTFUgbWF0cml4IGlzIHNpbmd1bGFyIik7bGV0IG4sbyxpLGE9dC5jb2x1bW5zLHI9dC5zdWJNYXRyaXhSb3codGhpcy5waXZvdFZlY3RvciwwLGEtMSkscz1lLmNvbHVtbnM7Zm9yKGk9MDtpPHM7aSsrKWZvcihuPWkrMTtuPHM7bisrKWZvcihvPTA7bzxhO28rKylyLnNldChuLG8sci5nZXQobixvKS1yLmdldChpLG8pKmUuZ2V0KG4saSkpO2ZvcihpPXMtMTtpPj0wO2ktLSl7Zm9yKG89MDtvPGE7bysrKXIuc2V0KGksbyxyLmdldChpLG8pL2UuZ2V0KGksaSkpO2ZvcihuPTA7bjxpO24rKylmb3Iobz0wO288YTtvKyspci5zZXQobixvLHIuZ2V0KG4sbyktci5nZXQoaSxvKSplLmdldChuLGkpKX1yZXR1cm4gcn1nZXQgZGV0ZXJtaW5hbnQoKXtsZXQgdD10aGlzLkxVO2lmKCF0LmlzU3F1YXJlKCkpdGhyb3cgbmV3IEVycm9yKCJNYXRyaXggbXVzdCBiZSBzcXVhcmUiKTtsZXQgZT10aGlzLnBpdm90U2lnbixuPXQuY29sdW1ucztmb3IobGV0IG89MDtvPG47bysrKWUqPXQuZ2V0KG8sbyk7cmV0dXJuIGV9Z2V0IGxvd2VyVHJpYW5ndWxhck1hdHJpeCgpe2xldCB0PXRoaXMuTFUsZT10LnJvd3Msbj10LmNvbHVtbnMsbz1uZXcgaXZ0KGUsbik7Zm9yKGxldCBpPTA7aTxlO2krKylmb3IobGV0IGU9MDtlPG47ZSsrKW8uc2V0KGksZSxpPmU/dC5nZXQoaSxlKTppPT09ZT8xOjApO3JldHVybiBvfWdldCB1cHBlclRyaWFuZ3VsYXJNYXRyaXgoKXtsZXQgdD10aGlzLkxVLGU9dC5yb3dzLG49dC5jb2x1bW5zLG89bmV3IGl2dChlLG4pO2ZvcihsZXQgaT0wO2k8ZTtpKyspZm9yKGxldCBlPTA7ZTxuO2UrKylvLnNldChpLGUsaTw9ZT90LmdldChpLGUpOjApO3JldHVybiBvfWdldCBwaXZvdFBlcm11dGF0aW9uVmVjdG9yKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5waXZvdFZlY3Rvcil9fWZ1bmN0aW9uIGx2dCh0LGUpe2xldCBuPTA7cmV0dXJuIE1hdGguYWJzKHQpPk1hdGguYWJzKGUpPyhuPWUvdCxNYXRoLmFicyh0KSpNYXRoLnNxcnQoMStuKm4pKTowIT09ZT8obj10L2UsTWF0aC5hYnMoZSkqTWF0aC5zcXJ0KDErbipuKSk6MH1jbGFzcyBjdnR7Y29uc3RydWN0b3IodCl7bGV0IGUsbixvLGksYT0odD1ydnQuY2hlY2tNYXRyaXgodCkpLmNsb25lKCkscj10LnJvd3Mscz10LmNvbHVtbnMsbD1uZXcgRmxvYXQ2NEFycmF5KHMpO2ZvcihvPTA7bzxzO28rKyl7bGV0IHQ9MDtmb3IoZT1vO2U8cjtlKyspdD1sdnQodCxhLmdldChlLG8pKTtpZigwIT09dCl7Zm9yKGEuZ2V0KG8sbyk8MCYmKHQ9LXQpLGU9bztlPHI7ZSsrKWEuc2V0KGUsbyxhLmdldChlLG8pL3QpO2ZvcihhLnNldChvLG8sYS5nZXQobyxvKSsxKSxuPW8rMTtuPHM7bisrKXtmb3IoaT0wLGU9bztlPHI7ZSsrKWkrPWEuZ2V0KGUsbykqYS5nZXQoZSxuKTtmb3IoaT0taS9hLmdldChvLG8pLGU9bztlPHI7ZSsrKWEuc2V0KGUsbixhLmdldChlLG4pK2kqYS5nZXQoZSxvKSl9fWxbb109LXR9dGhpcy5RUj1hLHRoaXMuUmRpYWc9bH1zb2x2ZSh0KXt0PWl2dC5jaGVja01hdHJpeCh0KTtsZXQgZT10aGlzLlFSLG49ZS5yb3dzO2lmKHQucm93cyE9PW4pdGhyb3cgbmV3IEVycm9yKCJNYXRyaXggcm93IGRpbWVuc2lvbnMgbXVzdCBhZ3JlZSIpO2lmKCF0aGlzLmlzRnVsbFJhbmsoKSl0aHJvdyBuZXcgRXJyb3IoIk1hdHJpeCBpcyByYW5rIGRlZmljaWVudCIpO2xldCBvLGksYSxyLHM9dC5jb2x1bW5zLGw9dC5jbG9uZSgpLGM9ZS5jb2x1bW5zO2ZvcihhPTA7YTxjO2ErKylmb3IoaT0wO2k8cztpKyspe2ZvcihyPTAsbz1hO288bjtvKyspcis9ZS5nZXQobyxhKSpsLmdldChvLGkpO2ZvcihyPS1yL2UuZ2V0KGEsYSksbz1hO288bjtvKyspbC5zZXQobyxpLGwuZ2V0KG8saSkrciplLmdldChvLGEpKX1mb3IoYT1jLTE7YT49MDthLS0pe2ZvcihpPTA7aTxzO2krKylsLnNldChhLGksbC5nZXQoYSxpKS90aGlzLlJkaWFnW2FdKTtmb3Iobz0wO288YTtvKyspZm9yKGk9MDtpPHM7aSsrKWwuc2V0KG8saSxsLmdldChvLGkpLWwuZ2V0KGEsaSkqZS5nZXQobyxhKSl9cmV0dXJuIGwuc3ViTWF0cml4KDAsYy0xLDAscy0xKX1pc0Z1bGxSYW5rKCl7bGV0IHQ9dGhpcy5RUi5jb2x1bW5zO2ZvcihsZXQgZT0wO2U8dDtlKyspaWYoMD09PXRoaXMuUmRpYWdbZV0pcmV0dXJuITE7cmV0dXJuITB9Z2V0IHVwcGVyVHJpYW5ndWxhck1hdHJpeCgpe2xldCB0LGUsbj10aGlzLlFSLG89bi5jb2x1bW5zLGk9bmV3IGl2dChvLG8pO2Zvcih0PTA7dDxvO3QrKylmb3IoZT0wO2U8bztlKyspaS5zZXQodCxlLHQ8ZT9uLmdldCh0LGUpOnQ9PT1lP3RoaXMuUmRpYWdbdF06MCk7cmV0dXJuIGl9Z2V0IG9ydGhvZ29uYWxNYXRyaXgoKXtsZXQgdCxlLG4sbyxpPXRoaXMuUVIsYT1pLnJvd3Mscj1pLmNvbHVtbnMscz1uZXcgaXZ0KGEscik7Zm9yKG49ci0xO24+PTA7bi0tKXtmb3IodD0wO3Q8YTt0Kyspcy5zZXQodCxuLDApO2ZvcihzLnNldChuLG4sMSksZT1uO2U8cjtlKyspaWYoMCE9PWkuZ2V0KG4sbikpe2ZvcihvPTAsdD1uO3Q8YTt0Kyspbys9aS5nZXQodCxuKSpzLmdldCh0LGUpO2ZvcihvPS1vL2kuZ2V0KG4sbiksdD1uO3Q8YTt0Kyspcy5zZXQodCxlLHMuZ2V0KHQsZSkrbyppLmdldCh0LG4pKX19cmV0dXJuIHN9fWNsYXNzIGR2dHtjb25zdHJ1Y3Rvcih0LGU9e30pe2lmKCh0PXJ2dC5jaGVja01hdHJpeCh0KSkuaXNFbXB0eSgpKXRocm93IG5ldyBFcnJvcigiTWF0cml4IG11c3QgYmUgbm9uLWVtcHR5Iik7bGV0IG49dC5yb3dzLG89dC5jb2x1bW5zO2NvbnN0e2NvbXB1dGVMZWZ0U2luZ3VsYXJWZWN0b3JzOmk9ITAsY29tcHV0ZVJpZ2h0U2luZ3VsYXJWZWN0b3JzOmE9ITAsYXV0b1RyYW5zcG9zZTpyPSExfT1lO2xldCBzLGw9Qm9vbGVhbihpKSxjPUJvb2xlYW4oYSksZD0hMTtpZihuPG8paWYocil7cz10LnRyYW5zcG9zZSgpLG49cy5yb3dzLG89cy5jb2x1bW5zLGQ9ITA7bGV0IGU9bDtsPWMsYz1lfWVsc2Ugcz10LmNsb25lKCksY29uc29sZS53YXJuKCJDb21wdXRpbmcgU1ZEIG9uIGEgbWF0cml4IHdpdGggbW9yZSBjb2x1bW5zIHRoYW4gcm93cy4gQ29uc2lkZXIgZW5hYmxpbmcgYXV0b1RyYW5zcG9zZSIpO2Vsc2Ugcz10LmNsb25lKCk7bGV0IHA9TWF0aC5taW4obixvKSxtPU1hdGgubWluKG4rMSxvKSx1PW5ldyBGbG9hdDY0QXJyYXkobSksZj1uZXcgaXZ0KG4scCksZz1uZXcgaXZ0KG8sbyksaD1uZXcgRmxvYXQ2NEFycmF5KG8pLGI9bmV3IEZsb2F0NjRBcnJheShuKSx5PW5ldyBGbG9hdDY0QXJyYXkobSk7Zm9yKGxldCB0PTA7dDxtO3QrKyl5W3RdPXQ7bGV0IF89TWF0aC5taW4obi0xLG8pLEM9TWF0aC5tYXgoMCxNYXRoLm1pbihvLTIsbikpLE09TWF0aC5tYXgoXyxDKTtmb3IobGV0IHQ9MDt0PE07dCsrKXtpZih0PF8pe3VbdF09MDtmb3IobGV0IGU9dDtlPG47ZSsrKXVbdF09bHZ0KHVbdF0scy5nZXQoZSx0KSk7aWYoMCE9PXVbdF0pe3MuZ2V0KHQsdCk8MCYmKHVbdF09LXVbdF0pO2ZvcihsZXQgZT10O2U8bjtlKyspcy5zZXQoZSx0LHMuZ2V0KGUsdCkvdVt0XSk7cy5zZXQodCx0LHMuZ2V0KHQsdCkrMSl9dVt0XT0tdVt0XX1mb3IobGV0IGU9dCsxO2U8bztlKyspe2lmKHQ8XyYmMCE9PXVbdF0pe2xldCBvPTA7Zm9yKGxldCBpPXQ7aTxuO2krKylvKz1zLmdldChpLHQpKnMuZ2V0KGksZSk7bz0tby9zLmdldCh0LHQpO2ZvcihsZXQgaT10O2k8bjtpKyspcy5zZXQoaSxlLHMuZ2V0KGksZSkrbypzLmdldChpLHQpKX1oW2VdPXMuZ2V0KHQsZSl9aWYobCYmdDxfKWZvcihsZXQgZT10O2U8bjtlKyspZi5zZXQoZSx0LHMuZ2V0KGUsdCkpO2lmKHQ8Qyl7aFt0XT0wO2ZvcihsZXQgZT10KzE7ZTxvO2UrKyloW3RdPWx2dChoW3RdLGhbZV0pO2lmKDAhPT1oW3RdKXtoW3QrMV08MCYmKGhbdF09MC1oW3RdKTtmb3IobGV0IGU9dCsxO2U8bztlKyspaFtlXS89aFt0XTtoW3QrMV0rPTF9aWYoaFt0XT0taFt0XSx0KzE8biYmMCE9PWhbdF0pe2ZvcihsZXQgZT10KzE7ZTxuO2UrKyliW2VdPTA7Zm9yKGxldCBlPXQrMTtlPG47ZSsrKWZvcihsZXQgbj10KzE7bjxvO24rKyliW2VdKz1oW25dKnMuZ2V0KGUsbik7Zm9yKGxldCBlPXQrMTtlPG87ZSsrKXtsZXQgbz0taFtlXS9oW3QrMV07Zm9yKGxldCBpPXQrMTtpPG47aSsrKXMuc2V0KGksZSxzLmdldChpLGUpK28qYltpXSl9fWlmKGMpZm9yKGxldCBlPXQrMTtlPG87ZSsrKWcuc2V0KGUsdCxoW2VdKX19bGV0IHY9TWF0aC5taW4obyxuKzEpO2lmKF88byYmKHVbX109cy5nZXQoXyxfKSksbjx2JiYodVt2LTFdPTApLEMrMTx2JiYoaFtDXT1zLmdldChDLHYtMSkpLGhbdi0xXT0wLGwpe2ZvcihsZXQgdD1fO3Q8cDt0Kyspe2ZvcihsZXQgZT0wO2U8bjtlKyspZi5zZXQoZSx0LDApO2Yuc2V0KHQsdCwxKX1mb3IobGV0IHQ9Xy0xO3Q+PTA7dC0tKWlmKDAhPT11W3RdKXtmb3IobGV0IGU9dCsxO2U8cDtlKyspe2xldCBvPTA7Zm9yKGxldCBpPXQ7aTxuO2krKylvKz1mLmdldChpLHQpKmYuZ2V0KGksZSk7bz0tby9mLmdldCh0LHQpO2ZvcihsZXQgaT10O2k8bjtpKyspZi5zZXQoaSxlLGYuZ2V0KGksZSkrbypmLmdldChpLHQpKX1mb3IobGV0IGU9dDtlPG47ZSsrKWYuc2V0KGUsdCwtZi5nZXQoZSx0KSk7Zi5zZXQodCx0LDErZi5nZXQodCx0KSk7Zm9yKGxldCBlPTA7ZTx0LTE7ZSsrKWYuc2V0KGUsdCwwKX1lbHNle2ZvcihsZXQgZT0wO2U8bjtlKyspZi5zZXQoZSx0LDApO2Yuc2V0KHQsdCwxKX19aWYoYylmb3IobGV0IHQ9by0xO3Q+PTA7dC0tKXtpZih0PEMmJjAhPT1oW3RdKWZvcihsZXQgZT10KzE7ZTxvO2UrKyl7bGV0IG49MDtmb3IobGV0IGk9dCsxO2k8bztpKyspbis9Zy5nZXQoaSx0KSpnLmdldChpLGUpO249LW4vZy5nZXQodCsxLHQpO2ZvcihsZXQgaT10KzE7aTxvO2krKylnLnNldChpLGUsZy5nZXQoaSxlKStuKmcuZ2V0KGksdCkpfWZvcihsZXQgZT0wO2U8bztlKyspZy5zZXQoZSx0LDApO2cuc2V0KHQsdCwxKX1sZXQgeD12LTEsTz1OdW1iZXIuRVBTSUxPTjtmb3IoO3Y+MDspe2xldCB0LGU7Zm9yKHQ9di0yO3Q+PS0xJiYtMSE9PXQ7dC0tKXtjb25zdCBlPU51bWJlci5NSU5fVkFMVUUrTypNYXRoLmFicyh1W3RdK01hdGguYWJzKHVbdCsxXSkpO2lmKE1hdGguYWJzKGhbdF0pPD1lfHxOdW1iZXIuaXNOYU4oaFt0XSkpe2hbdF09MDticmVha319aWYodD09PXYtMillPTQ7ZWxzZXtsZXQgbjtmb3Iobj12LTE7bj49dCYmbiE9PXQ7bi0tKXtsZXQgZT0obiE9PXY/TWF0aC5hYnMoaFtuXSk6MCkrKG4hPT10KzE/TWF0aC5hYnMoaFtuLTFdKTowKTtpZihNYXRoLmFicyh1W25dKTw9TyplKXt1W25dPTA7YnJlYWt9fW49PT10P2U9MzpuPT09di0xP2U9MTooZT0yLHQ9bil9c3dpdGNoKHQrKyxlKXtjYXNlIDE6e2xldCBlPWhbdi0yXTtoW3YtMl09MDtmb3IobGV0IG49di0yO24+PXQ7bi0tKXtsZXQgaT1sdnQodVtuXSxlKSxhPXVbbl0vaSxyPWUvaTtpZih1W25dPWksbiE9PXQmJihlPS1yKmhbbi0xXSxoW24tMV09YSpoW24tMV0pLGMpZm9yKGxldCB0PTA7dDxvO3QrKylpPWEqZy5nZXQodCxuKStyKmcuZ2V0KHQsdi0xKSxnLnNldCh0LHYtMSwtcipnLmdldCh0LG4pK2EqZy5nZXQodCx2LTEpKSxnLnNldCh0LG4saSl9YnJlYWt9Y2FzZSAyOntsZXQgZT1oW3QtMV07aFt0LTFdPTA7Zm9yKGxldCBvPXQ7bzx2O28rKyl7bGV0IGk9bHZ0KHVbb10sZSksYT11W29dL2kscj1lL2k7aWYodVtvXT1pLGU9LXIqaFtvXSxoW29dPWEqaFtvXSxsKWZvcihsZXQgZT0wO2U8bjtlKyspaT1hKmYuZ2V0KGUsbykrcipmLmdldChlLHQtMSksZi5zZXQoZSx0LTEsLXIqZi5nZXQoZSxvKSthKmYuZ2V0KGUsdC0xKSksZi5zZXQoZSxvLGkpfWJyZWFrfWNhc2UgMzp7Y29uc3QgZT1NYXRoLm1heChNYXRoLmFicyh1W3YtMV0pLE1hdGguYWJzKHVbdi0yXSksTWF0aC5hYnMoaFt2LTJdKSxNYXRoLmFicyh1W3RdKSxNYXRoLmFicyhoW3RdKSksaT11W3YtMV0vZSxhPXVbdi0yXS9lLHI9aFt2LTJdL2Uscz11W3RdL2UsZD1oW3RdL2UscD0oKGEraSkqKGEtaSkrcipyKS8yLG09aSpyKihpKnIpO2xldCBiPTA7MD09PXAmJjA9PT1tfHwoYj1wPDA/MC1NYXRoLnNxcnQocCpwK20pOk1hdGguc3FydChwKnArbSksYj1tLyhwK2IpKTtsZXQgeT0ocytpKSoocy1pKStiLF89cypkO2ZvcihsZXQgZT10O2U8di0xO2UrKyl7bGV0IGk9bHZ0KHksXyk7MD09PWkmJihpPU51bWJlci5NSU5fVkFMVUUpO2xldCBhPXkvaSxyPV8vaTtpZihlIT09dCYmKGhbZS0xXT1pKSx5PWEqdVtlXStyKmhbZV0saFtlXT1hKmhbZV0tcip1W2VdLF89cip1W2UrMV0sdVtlKzFdPWEqdVtlKzFdLGMpZm9yKGxldCB0PTA7dDxvO3QrKylpPWEqZy5nZXQodCxlKStyKmcuZ2V0KHQsZSsxKSxnLnNldCh0LGUrMSwtcipnLmdldCh0LGUpK2EqZy5nZXQodCxlKzEpKSxnLnNldCh0LGUsaSk7aWYoaT1sdnQoeSxfKSwwPT09aSYmKGk9TnVtYmVyLk1JTl9WQUxVRSksYT15L2kscj1fL2ksdVtlXT1pLHk9YSpoW2VdK3IqdVtlKzFdLHVbZSsxXT0tcipoW2VdK2EqdVtlKzFdLF89cipoW2UrMV0saFtlKzFdPWEqaFtlKzFdLGwmJmU8bi0xKWZvcihsZXQgdD0wO3Q8bjt0KyspaT1hKmYuZ2V0KHQsZSkrcipmLmdldCh0LGUrMSksZi5zZXQodCxlKzEsLXIqZi5nZXQodCxlKSthKmYuZ2V0KHQsZSsxKSksZi5zZXQodCxlLGkpfWhbdi0yXT15O2JyZWFrfWNhc2UgNDppZih1W3RdPD0wJiYodVt0XT11W3RdPDA/LXVbdF06MCxjKSlmb3IobGV0IGU9MDtlPD14O2UrKylnLnNldChlLHQsLWcuZ2V0KGUsdCkpO2Zvcig7dDx4JiYhKHVbdF0+PXVbdCsxXSk7KXtsZXQgZT11W3RdO2lmKHVbdF09dVt0KzFdLHVbdCsxXT1lLGMmJnQ8by0xKWZvcihsZXQgbj0wO248bztuKyspZT1nLmdldChuLHQrMSksZy5zZXQobix0KzEsZy5nZXQobix0KSksZy5zZXQobix0LGUpO2lmKGwmJnQ8bi0xKWZvcihsZXQgbz0wO288bjtvKyspZT1mLmdldChvLHQrMSksZi5zZXQobyx0KzEsZi5nZXQobyx0KSksZi5zZXQobyx0LGUpO3QrK312LS19fWlmKGQpe2xldCB0PWc7Zz1mLGY9dH10aGlzLm09bix0aGlzLm49byx0aGlzLnM9dSx0aGlzLlU9Zix0aGlzLlY9Z31zb2x2ZSh0KXtsZXQgZT10LG49dGhpcy50aHJlc2hvbGQsbz10aGlzLnMubGVuZ3RoLGk9aXZ0Lnplcm9zKG8sbyk7Zm9yKGxldCB0PTA7dDxvO3QrKylNYXRoLmFicyh0aGlzLnNbdF0pPD1uP2kuc2V0KHQsdCwwKTppLnNldCh0LHQsMS90aGlzLnNbdF0pO2xldCBhPXRoaXMuVSxyPXRoaXMucmlnaHRTaW5ndWxhclZlY3RvcnMscz1yLm1tdWwoaSksbD1yLnJvd3MsYz1hLnJvd3MsZD1pdnQuemVyb3MobCxjKTtmb3IobGV0IHQ9MDt0PGw7dCsrKWZvcihsZXQgZT0wO2U8YztlKyspe2xldCBuPTA7Zm9yKGxldCBpPTA7aTxvO2krKyluKz1zLmdldCh0LGkpKmEuZ2V0KGUsaSk7ZC5zZXQodCxlLG4pfXJldHVybiBkLm1tdWwoZSl9c29sdmVGb3JEaWFnb25hbCh0KXtyZXR1cm4gdGhpcy5zb2x2ZShpdnQuZGlhZyh0KSl9aW52ZXJzZSgpe2xldCB0PXRoaXMuVixlPXRoaXMudGhyZXNob2xkLG49dC5yb3dzLG89dC5jb2x1bW5zLGk9bmV3IGl2dChuLHRoaXMucy5sZW5ndGgpO2ZvcihsZXQgYT0wO2E8bjthKyspZm9yKGxldCBuPTA7bjxvO24rKylNYXRoLmFicyh0aGlzLnNbbl0pPmUmJmkuc2V0KGEsbix0LmdldChhLG4pL3RoaXMuc1tuXSk7bGV0IGE9dGhpcy5VLHI9YS5yb3dzLHM9YS5jb2x1bW5zLGw9bmV3IGl2dChuLHIpO2ZvcihsZXQgdD0wO3Q8bjt0KyspZm9yKGxldCBlPTA7ZTxyO2UrKyl7bGV0IG49MDtmb3IobGV0IG89MDtvPHM7bysrKW4rPWkuZ2V0KHQsbykqYS5nZXQoZSxvKTtsLnNldCh0LGUsbil9cmV0dXJuIGx9Z2V0IGNvbmRpdGlvbigpe3JldHVybiB0aGlzLnNbMF0vdGhpcy5zW01hdGgubWluKHRoaXMubSx0aGlzLm4pLTFdfWdldCBub3JtMigpe3JldHVybiB0aGlzLnNbMF19Z2V0IHJhbmsoKXtsZXQgdD1NYXRoLm1heCh0aGlzLm0sdGhpcy5uKSp0aGlzLnNbMF0qTnVtYmVyLkVQU0lMT04sZT0wLG49dGhpcy5zO2ZvcihsZXQgbz0wLGk9bi5sZW5ndGg7bzxpO28rKyluW29dPnQmJmUrKztyZXR1cm4gZX1nZXQgZGlhZ29uYWwoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnMpfWdldCB0aHJlc2hvbGQoKXtyZXR1cm4gTnVtYmVyLkVQU0lMT04vMipNYXRoLm1heCh0aGlzLm0sdGhpcy5uKSp0aGlzLnNbMF19Z2V0IGxlZnRTaW5ndWxhclZlY3RvcnMoKXtyZXR1cm4gdGhpcy5VfWdldCByaWdodFNpbmd1bGFyVmVjdG9ycygpe3JldHVybiB0aGlzLlZ9Z2V0IGRpYWdvbmFsTWF0cml4KCl7cmV0dXJuIGl2dC5kaWFnKHRoaXMucyl9fWZ1bmN0aW9uIHB2dCh0LGUsbixvLGkpe2xldCBhPWl2dC5leWUoZS5sZW5ndGgsZS5sZW5ndGgsbipvKm8pO2NvbnN0IHI9aShlKTtsZXQgcz1uZXcgRmxvYXQ2NEFycmF5KHQueC5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8dC54Lmxlbmd0aDtlKyspc1tlXT1yKHQueFtlXSk7bGV0IGw9KGZ1bmN0aW9uIGModCxlLG4sbyxpKXtjb25zdCBhPW4ubGVuZ3RoLHI9dC54Lmxlbmd0aDtsZXQgcz1uZXcgQXJyYXkoYSk7Zm9yKGxldCBsPTA7bDxhO2wrKyl7c1tsXT1uZXcgQXJyYXkocik7bGV0IGE9bi5zbGljZSgpO2FbbF0rPW87bGV0IGM9aShhKTtmb3IobGV0IG49MDtuPHI7bisrKXNbbF1bbl09ZVtuXS1jKHQueFtuXSl9cmV0dXJuIG5ldyBpdnQocyl9KSh0LHMsZSxvLGkpLGQ9KGZ1bmN0aW9uIHAodCxlKXtjb25zdCBuPXQueC5sZW5ndGg7bGV0IG89bmV3IEFycmF5KG4pO2ZvcihsZXQgaT0wO2k8bjtpKyspb1tpXT1bdC55W2ldLWVbaV1dO3JldHVybiBuZXcgaXZ0KG8pfSkodCxzKSxtPShmdW5jdGlvbiB1KHQsZT0hMSl7cmV0dXJuIHQ9cnZ0LmNoZWNrTWF0cml4KHQpLGU/bmV3IGR2dCh0KS5pbnZlcnNlKCk6KGZ1bmN0aW9uIG4odCxlLG89ITEpe3JldHVybiB0PXJ2dC5jaGVja01hdHJpeCh0KSxlPXJ2dC5jaGVja01hdHJpeChlKSxvP25ldyBkdnQodCkuc29sdmUoZSk6dC5pc1NxdWFyZSgpP25ldyBzdnQodCkuc29sdmUoZSk6bmV3IGN2dCh0KS5zb2x2ZShlKX0pKHQsaXZ0LmV5ZSh0LnJvd3MpKX0pKGEuYWRkKGwubW11bChsLnRyYW5zcG9zZSgpKSkpO3JldHVybihlPShlPW5ldyBpdnQoW2VdKSkuc3ViKG0ubW11bChsKS5tbXVsKGQpLm11bChvKS50cmFuc3Bvc2UoKSkpLnRvMURBcnJheSgpfXZhciBtdnQ9JHYoT2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsZGVmYXVsdDpmdW5jdGlvbiB1dnQodCxlLG49e30pe2xldHttYXhJdGVyYXRpb25zOm89MTAwLGdyYWRpZW50RGlmZmVyZW5jZTppPS4xLGRhbXBpbmc6YT0wLGVycm9yVG9sZXJhbmNlOnI9LjAxLG1pblZhbHVlczpzLG1heFZhbHVlczpsLGluaXRpYWxWYWx1ZXM6Y309bjtpZihhPD0wKXRocm93IG5ldyBFcnJvcigiVGhlIGRhbXBpbmcgb3B0aW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIiKTtpZighdC54fHwhdC55KXRocm93IG5ldyBFcnJvcigiVGhlIGRhdGEgcGFyYW1ldGVyIG11c3QgaGF2ZSB4IGFuZCB5IGVsZW1lbnRzIik7aWYoIU5NdCh0LngpfHx0LngubGVuZ3RoPDJ8fCFOTXQodC55KXx8dC55Lmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiVGhlIGRhdGEgcGFyYW1ldGVyIGVsZW1lbnRzIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBtb3JlIHRoYW4gMiBwb2ludHMiKTtpZih0LngubGVuZ3RoIT09dC55Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBkYXRhIHBhcmFtZXRlciBlbGVtZW50cyBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZSIpO2xldCBkPWN8fG5ldyBBcnJheShlLmxlbmd0aCkuZmlsbCgxKSxwPWQubGVuZ3RoO2lmKGw9bHx8bmV3IEFycmF5KHApLmZpbGwoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLHM9c3x8bmV3IEFycmF5KHApLmZpbGwoTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpLGwubGVuZ3RoIT09cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJtaW5WYWx1ZXMgYW5kIG1heFZhbHVlcyBtdXN0IGJlIHRoZSBzYW1lIHNpemUiKTtpZighTk10KGQpKXRocm93IG5ldyBFcnJvcigiaW5pdGlhbFZhbHVlcyBtdXN0IGJlIGFuIGFycmF5Iik7bGV0IG0sdT16TXQodCxkLGUpLGY9dTw9cjtmb3IobT0wO208byYmIWY7bSsrKXtkPXB2dCh0LGQsYSxpLGUpO2ZvcihsZXQgdD0wO3Q8cDt0KyspZFt0XT1NYXRoLm1pbihNYXRoLm1heChzW3RdLGRbdF0pLGxbdF0pO2lmKHU9ek10KHQsZCxlKSxpc05hTih1KSlicmVhaztmPXU8PXJ9cmV0dXJue3BhcmFtZXRlclZhbHVlczpkLHBhcmFtZXRlckVycm9yOnUsaXRlcmF0aW9uczptfX19KSksZnZ0PVF2JiZRdi5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLGEpe2Z1bmN0aW9uIHIodCl7dHJ5e2woby5uZXh0KHQpKX1jYXRjaCh0KXthKHQpfX1mdW5jdGlvbiBzKHQpe3RyeXtsKG8udGhyb3codCkpfWNhdGNoKHQpe2EodCl9fWZ1bmN0aW9uIGwodCl7dC5kb25lP2kodC52YWx1ZSk6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodC52YWx1ZSl9KSkudGhlbihyLHMpfWwoKG89by5hcHBseSh0LGV8fFtdKSkubmV4dCgpKX0pKX0sZ3Z0PVF2JiZRdi5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24odCxlKXt2YXIgbixvLGksYSxyPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmlbMF0pdGhyb3cgaVsxXTtyZXR1cm4gaVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBhPXtuZXh0OnMoMCksdGhyb3c6cygxKSxyZXR1cm46cygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGFbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksYTtmdW5jdGlvbiBzKGEpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4oZnVuY3Rpb24gbChhKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3I7KXRyeXtpZihuPTEsbyYmKGk9MiZhWzBdP28ucmV0dXJuOmFbMF0/by50aHJvd3x8KChpPW8ucmV0dXJuKSYmaS5jYWxsKG8pLDApOm8ubmV4dCkmJiEoaT1pLmNhbGwobyxhWzFdKSkuZG9uZSlyZXR1cm4gaTtzd2l0Y2gobz0wLGkmJihhPVsyJmFbMF0saS52YWx1ZV0pLGFbMF0pe2Nhc2UgMDpjYXNlIDE6aT1hO2JyZWFrO2Nhc2UgNDpyZXR1cm4gci5sYWJlbCsrLHt2YWx1ZTphWzFdLGRvbmU6ITF9O2Nhc2UgNTpyLmxhYmVsKyssbz1hWzFdLGE9WzBdO2NvbnRpbnVlO2Nhc2UgNzphPXIub3BzLnBvcCgpLHIudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGk9KGk9ci50cnlzKS5sZW5ndGg+MCYmaVtpLmxlbmd0aC0xXSl8fDYhPT1hWzBdJiYyIT09YVswXSkpe3I9MDtjb250aW51ZX1pZigzPT09YVswXSYmKCFpfHxhWzFdPmlbMF0mJmFbMV08aVszXSkpe3IubGFiZWw9YVsxXTticmVha31pZig2PT09YVswXSYmci5sYWJlbDxpWzFdKXtyLmxhYmVsPWlbMV0saT1hO2JyZWFrfWlmKGkmJnIubGFiZWw8aVsyXSl7ci5sYWJlbD1pWzJdLHIub3BzLnB1c2goYSk7YnJlYWt9aVsyXSYmci5vcHMucG9wKCksci50cnlzLnBvcCgpO2NvbnRpbnVlfWE9ZS5jYWxsKHQscil9Y2F0Y2godCl7YT1bNix0XSxvPTB9ZmluYWxseXtuPWk9MH1pZig1JmFbMF0pdGhyb3cgYVsxXTtyZXR1cm57dmFsdWU6YVswXT9hWzFdOnZvaWQgMCxkb25lOiEwfX0pKFthLHNdKX19fSxodnQ9UXYmJlF2Ll9fcmVhZHx8ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIHQ7dmFyIG8saSxhPW4uY2FsbCh0KSxyPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1lfHxlLS0gPjApJiYhKG89YS5uZXh0KCkpLmRvbmU7KXIucHVzaChvLnZhbHVlKX1jYXRjaCh0KXtpPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtvJiYhby5kb25lJiYobj1hLnJldHVybikmJm4uY2FsbChhKX1maW5hbGx5e2lmKGkpdGhyb3cgaS5lcnJvcn19cmV0dXJuIHJ9LGJ2dD1RdiYmUXYuX19zcHJlYWR8fGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQ9dC5jb25jYXQoaHZ0KGFyZ3VtZW50c1tlXSkpO3JldHVybiB0fSx5dnQ9UXYmJlF2Ll9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24odCl7aWYodCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBlPXt9O2lmKG51bGwhPXQpZm9yKHZhciBuIGluIHQpT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSk7cmV0dXJuIGUuZGVmYXVsdD10LGV9LF92dD1RdiYmUXYuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1Q3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBDdnQ9eXZ0KGZDdCksTXZ0PXl2dChVQ3QpLHZ2dD15dnQoc010KSx4dnQ9eXZ0KGxNdCksT3Z0PXl2dChnQ3QpLFB2dD1fdnQobXZ0KSx3dnQ9MWUtNSxrdnQ9LjAwMSxTdnQ9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2b2lkIDA9PT10JiYodD17fSk7dmFyIGU9dGhpczt0aGlzLmxlYXJuaW5nUmF0ZT0xLHRoaXMubG9jYWxDb25uZWN0aXZpdHk9MSx0aGlzLm1pbkRpc3Q9LjEsdGhpcy5uQ29tcG9uZW50cz0yLHRoaXMubkVwb2Nocz0wLHRoaXMubk5laWdoYm9ycz0xNSx0aGlzLm5lZ2F0aXZlU2FtcGxlUmF0ZT01LHRoaXMucmFuZG9tPU1hdGgucmFuZG9tLHRoaXMucmVwdWxzaW9uU3RyZW5ndGg9MSx0aGlzLnNldE9wTWl4UmF0aW89MSx0aGlzLnNwcmVhZD0xLHRoaXMudHJhbnNmb3JtUXVldWVTaXplPTQsdGhpcy50YXJnZXRNZXRyaWM9ImNhdGVnb3JpY2FsIix0aGlzLnRhcmdldFdlaWdodD0uNSx0aGlzLnRhcmdldE5OZWlnaGJvcnM9dGhpcy5uTmVpZ2hib3JzLHRoaXMuZGlzdGFuY2VGbj1EdnQsdGhpcy5pc0luaXRpYWxpemVkPSExLHRoaXMucnBGb3Jlc3Q9W10sdGhpcy5lbWJlZGRpbmc9W10sdGhpcy5vcHRpbWl6YXRpb25TdGF0ZT1uZXcgUnZ0O3ZhciBuPWZ1bmN0aW9uKG4pe3ZvaWQgMCE9PXRbbl0mJihlW25dPXRbbl0pfTtuKCJkaXN0YW5jZUZuIiksbigibGVhcm5pbmdSYXRlIiksbigibG9jYWxDb25uZWN0aXZpdHkiKSxuKCJtaW5EaXN0IiksbigibkNvbXBvbmVudHMiKSxuKCJuRXBvY2hzIiksbigibk5laWdoYm9ycyIpLG4oIm5lZ2F0aXZlU2FtcGxlUmF0ZSIpLG4oInJhbmRvbSIpLG4oInJlcHVsc2lvblN0cmVuZ3RoIiksbigic2V0T3BNaXhSYXRpbyIpLG4oInNwcmVhZCIpLG4oInRyYW5zZm9ybVF1ZXVlU2l6ZSIpfXJldHVybiB0LnByb3RvdHlwZS5maXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUZpdCh0KSx0aGlzLm9wdGltaXplTGF5b3V0KCksdGhpcy5lbWJlZGRpbmd9LHQucHJvdG90eXBlLmZpdEFzeW5jPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPWZ1bmN0aW9uKCl7cmV0dXJuITB9KSxmdnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybiBndnQodGhpcywoZnVuY3Rpb24obil7c3dpdGNoKG4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pbml0aWFsaXplRml0KHQpLFs0LHRoaXMub3B0aW1pemVMYXlvdXRBc3luYyhlKV07Y2FzZSAxOnJldHVybiBuLnNlbnQoKSxbMix0aGlzLmVtYmVkZGluZ119fSkpfSkpfSx0LnByb3RvdHlwZS5zZXRTdXBlcnZpc2VkUHJvamVjdGlvbj1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLlk9dCx0aGlzLnRhcmdldE1ldHJpYz1lLnRhcmdldE1ldHJpY3x8dGhpcy50YXJnZXRNZXRyaWMsdGhpcy50YXJnZXRXZWlnaHQ9ZS50YXJnZXRXZWlnaHR8fHRoaXMudGFyZ2V0V2VpZ2h0LHRoaXMudGFyZ2V0Tk5laWdoYm9ycz1lLnRhcmdldE5OZWlnaGJvcnN8fHRoaXMudGFyZ2V0Tk5laWdoYm9yc30sdC5wcm90b3R5cGUuc2V0UHJlY29tcHV0ZWRLTk49ZnVuY3Rpb24odCxlKXt0aGlzLmtubkluZGljZXM9dCx0aGlzLmtubkRpc3RhbmNlcz1lfSx0LnByb3RvdHlwZS5pbml0aWFsaXplRml0PWZ1bmN0aW9uKHQpe2lmKHQubGVuZ3RoPD10aGlzLm5OZWlnaGJvcnMpdGhyb3cgbmV3IEVycm9yKCJOb3QgZW5vdWdoIGRhdGEgcG9pbnRzICgiK3QubGVuZ3RoKyIpIHRvIGNyZWF0ZSBuTmVpZ2hib3JzOiAiK3RoaXMubk5laWdoYm9ycysiLiAgQWRkIG1vcmUgZGF0YSBwb2ludHMgb3IgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uLiIpO2lmKHRoaXMuWD09PXQmJnRoaXMuaXNJbml0aWFsaXplZClyZXR1cm4gdGhpcy5nZXRORXBvY2hzKCk7aWYodGhpcy5YPXQsIXRoaXMua25uSW5kaWNlcyYmIXRoaXMua25uRGlzdGFuY2VzKXt2YXIgZT10aGlzLm5lYXJlc3ROZWlnaGJvcnModCk7dGhpcy5rbm5JbmRpY2VzPWUua25uSW5kaWNlcyx0aGlzLmtubkRpc3RhbmNlcz1lLmtubkRpc3RhbmNlc310aGlzLmdyYXBoPXRoaXMuZnV6enlTaW1wbGljaWFsU2V0KHQsdGhpcy5uTmVpZ2hib3JzLHRoaXMuc2V0T3BNaXhSYXRpbyksdGhpcy5tYWtlU2VhcmNoRm5zKCksdGhpcy5zZWFyY2hHcmFwaD10aGlzLm1ha2VTZWFyY2hHcmFwaCh0KSx0aGlzLnByb2Nlc3NHcmFwaEZvclN1cGVydmlzZWRQcm9qZWN0aW9uKCk7dmFyIG49dGhpcy5pbml0aWFsaXplU2ltcGxpY2lhbFNldEVtYmVkZGluZygpLG89bi50YWlsLGk9bi5lcG9jaHNQZXJTYW1wbGU7cmV0dXJuIHRoaXMub3B0aW1pemF0aW9uU3RhdGUuaGVhZD1uLmhlYWQsdGhpcy5vcHRpbWl6YXRpb25TdGF0ZS50YWlsPW8sdGhpcy5vcHRpbWl6YXRpb25TdGF0ZS5lcG9jaHNQZXJTYW1wbGU9aSx0aGlzLmluaXRpYWxpemVPcHRpbWl6YXRpb24oKSx0aGlzLnByZXBhcmVGb3JPcHRpbWl6YXRpb25Mb29wKCksdGhpcy5pc0luaXRpYWxpemVkPSEwLHRoaXMuZ2V0TkVwb2NocygpfSx0LnByb3RvdHlwZS5tYWtlU2VhcmNoRm5zPWZ1bmN0aW9uKCl7dmFyIHQ9dnZ0Lm1ha2VJbml0aWFsaXphdGlvbnModGhpcy5kaXN0YW5jZUZuKSxlPXQuaW5pdEZyb21SYW5kb207dGhpcy5pbml0RnJvbVRyZWU9dC5pbml0RnJvbVRyZWUsdGhpcy5pbml0RnJvbVJhbmRvbT1lLHRoaXMuc2VhcmNoPXZ2dC5tYWtlSW5pdGlhbGl6ZWROTlNlYXJjaCh0aGlzLmRpc3RhbmNlRm4pfSx0LnByb3RvdHlwZS5tYWtlU2VhcmNoR3JhcGg9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMua25uSW5kaWNlcyxuPXRoaXMua25uRGlzdGFuY2VzLG89bmV3IE12dC5TcGFyc2VNYXRyaXgoW10sW10sW10sW3QubGVuZ3RoLHQubGVuZ3RoXSksaT0wO2k8ZS5sZW5ndGg7aSsrKWZvcih2YXIgYT1lW2ldLHI9bltpXSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPXJbc107bD4wJiZvLnNldChpLGFbc10sbCl9dmFyIGM9TXZ0LnRyYW5zcG9zZShvKTtyZXR1cm4gTXZ0Lm1heGltdW0obyxjKX0sdC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLlg7aWYodm9pZCAwPT09bnx8MD09PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiTm8gZGF0YSBoYXMgYmVlbiBmaXQuIik7dmFyIG89TWF0aC5mbG9vcih0aGlzLm5OZWlnaGJvcnMqdGhpcy50cmFuc2Zvcm1RdWV1ZVNpemUpO289TWF0aC5taW4obi5sZW5ndGgsbyk7dmFyIGk9dnZ0LmluaXRpYWxpemVTZWFyY2godGhpcy5ycEZvcmVzdCxuLHQsbyx0aGlzLmluaXRGcm9tUmFuZG9tLHRoaXMuaW5pdEZyb21UcmVlLHRoaXMucmFuZG9tKSxhPXRoaXMuc2VhcmNoKG4sdGhpcy5zZWFyY2hHcmFwaCxpLHQpLHI9Q3Z0LmRlaGVhcFNvcnQoYSkscz1yLmluZGljZXMsbD1yLndlaWdodHM7cz1zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoMCxlLm5OZWlnaGJvcnMpfSkpLGw9bC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKDAsZS5uTmVpZ2hib3JzKX0pKTt2YXIgYz1NYXRoLm1heCgwLHRoaXMubG9jYWxDb25uZWN0aXZpdHktMSksZD10aGlzLnNtb290aEtOTkRpc3RhbmNlKGwsdGhpcy5uTmVpZ2hib3JzLGMpLHA9dGhpcy5jb21wdXRlTWVtYmVyc2hpcFN0cmVuZ3RocyhzLGwsZC5zaWdtYXMsZC5yaG9zKSxtPW5ldyBNdnQuU3BhcnNlTWF0cml4KHAucm93cyxwLmNvbHMscC52YWxzLFt0Lmxlbmd0aCxuLmxlbmd0aF0pLHU9TXZ0Lm5vcm1hbGl6ZShtLCJsMSIpLGY9TXZ0LmdldENTUih1KSxnPXQubGVuZ3RoLGg9SHZ0KE92dC5yZXNoYXBlMmQoZi5pbmRpY2VzLGcsdGhpcy5uTmVpZ2hib3JzKSxPdnQucmVzaGFwZTJkKGYudmFsdWVzLGcsdGhpcy5uTmVpZ2hib3JzKSx0aGlzLmVtYmVkZGluZyksYj10aGlzLm5FcG9jaHM/dGhpcy5uRXBvY2hzLzM6bS5uUm93czw9MWU0PzEwMDozMCx5PW0uZ2V0VmFsdWVzKCkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBlPnQ/ZTp0fSksMCk7bT1tLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQ8eS9iPzA6dH0pKSxtPU12dC5lbGltaW5hdGVaZXJvcyhtKTt2YXIgXz10aGlzLm1ha2VFcG9jaHNQZXJTYW1wbGUobS5nZXRWYWx1ZXMoKSxiKSxDPW0uZ2V0Um93cygpLE09bS5nZXRDb2xzKCk7cmV0dXJuIHRoaXMuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzKHtoZWFkRW1iZWRkaW5nOmgsdGFpbEVtYmVkZGluZzp0aGlzLmVtYmVkZGluZyxoZWFkOkMsdGFpbDpNLGN1cnJlbnRFcG9jaDowLG5FcG9jaHM6YixuVmVydGljZXM6bS5nZXREaW1zKClbMV0sZXBvY2hzUGVyU2FtcGxlOl99KSx0aGlzLnByZXBhcmVGb3JPcHRpbWl6YXRpb25Mb29wKCksdGhpcy5vcHRpbWl6ZUxheW91dCgpfSx0LnByb3RvdHlwZS5wcm9jZXNzR3JhcGhGb3JTdXBlcnZpc2VkUHJvamVjdGlvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuWTtpZih0KXtpZih0Lmxlbmd0aCE9PXRoaXMuWC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJMZW5ndGggb2YgWCBhbmQgeSBtdXN0IGJlIGVxdWFsIik7ImNhdGVnb3JpY2FsIj09PXRoaXMudGFyZ2V0TWV0cmljJiYodGhpcy5ncmFwaD10aGlzLmNhdGVnb3JpY2FsU2ltcGxpY2lhbFNldEludGVyc2VjdGlvbih0aGlzLmdyYXBoLHQsdGhpcy50YXJnZXRXZWlnaHQ8MT8xLygxLXRoaXMudGFyZ2V0V2VpZ2h0KSoyLjU6MWUxMikpfX0sdC5wcm90b3R5cGUuc3RlcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoO3JldHVybiB0PHRoaXMuZ2V0TkVwb2NocygpJiZ0aGlzLm9wdGltaXplTGF5b3V0U3RlcCh0KSx0aGlzLm9wdGltaXphdGlvblN0YXRlLmN1cnJlbnRFcG9jaH0sdC5wcm90b3R5cGUuZ2V0RW1iZWRkaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1iZWRkaW5nfSx0LnByb3RvdHlwZS5uZWFyZXN0TmVpZ2hib3JzPWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5uTmVpZ2hib3JzLG89dnZ0Lm1ha2VOTkRlc2NlbnQodGhpcy5kaXN0YW5jZUZuLHRoaXMucmFuZG9tKSxpPTUrTWF0aC5mbG9vciguNT09KGU9TWF0aC5wb3codC5sZW5ndGgsLjUpLzIwKT8wOk1hdGgucm91bmQoZSkpLGE9TWF0aC5tYXgoNSxNYXRoLmZsb29yKE1hdGgucm91bmQoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLmxvZygyKX0pKHQubGVuZ3RoKSkpKTt0aGlzLnJwRm9yZXN0PXh2dC5tYWtlRm9yZXN0KHQsbixpLHRoaXMucmFuZG9tKTt2YXIgcj1vKHQseHZ0Lm1ha2VMZWFmQXJyYXkodGhpcy5ycEZvcmVzdCksbixhKTtyZXR1cm57a25uSW5kaWNlczpyLmluZGljZXMsa25uRGlzdGFuY2VzOnIud2VpZ2h0c319LHQucHJvdG90eXBlLmZ1enp5U2ltcGxpY2lhbFNldD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09biYmKG49MSk7dmFyIG89dGhpcyxpPW8ua25uSW5kaWNlcyxhPXZvaWQgMD09PWk/W106aSxyPW8ua25uRGlzdGFuY2VzLHM9dm9pZCAwPT09cj9bXTpyLGw9dGhpcy5zbW9vdGhLTk5EaXN0YW5jZShzLGUsby5sb2NhbENvbm5lY3Rpdml0eSksYz10aGlzLmNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzKGEscyxsLnNpZ21hcyxsLnJob3MpLGQ9bmV3IE12dC5TcGFyc2VNYXRyaXgoYy5yb3dzLGMuY29scyxjLnZhbHMsW3QubGVuZ3RoLHQubGVuZ3RoXSkscD1NdnQudHJhbnNwb3NlKGQpLG09TXZ0LnBhaXJ3aXNlTXVsdGlwbHkoZCxwKSx1PU12dC5zdWJ0cmFjdChNdnQuYWRkKGQscCksbSksZj1NdnQubXVsdGlwbHlTY2FsYXIodSxuKSxnPU12dC5tdWx0aXBseVNjYWxhcihtLDEtbik7cmV0dXJuIE12dC5hZGQoZixnKX0sdC5wcm90b3R5cGUuY2F0ZWdvcmljYWxTaW1wbGljaWFsU2V0SW50ZXJzZWN0aW9uPWZ1bmN0aW9uKHQsZSxuLG8pe3ZvaWQgMD09PW8mJihvPTEpO3ZhciBpPXp2dCh0LGUsbyxuKTtyZXR1cm4gSXZ0KGk9TXZ0LmVsaW1pbmF0ZVplcm9zKGkpKX0sdC5wcm90b3R5cGUuc21vb3RoS05ORGlzdGFuY2U9ZnVuY3Rpb24odCxlLG4sbyxpKXt2b2lkIDA9PT1uJiYobj0xKSx2b2lkIDA9PT1vJiYobz02NCksdm9pZCAwPT09aSYmKGk9MSk7Zm9yKHZhciBhPU1hdGgubG9nKGUpL01hdGgubG9nKDIpKmkscj1PdnQuemVyb3ModC5sZW5ndGgpLHM9T3Z0Lnplcm9zKHQubGVuZ3RoKSxsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBjPTAsZD0xLzAscD0xLG09dFtsXSx1PW0uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdD4wfSkpO2lmKHUubGVuZ3RoPj1uKXt2YXIgZj1NYXRoLmZsb29yKG4pLGc9bi1mO2Y+MD8ocltsXT11W2YtMV0sZz53dnQmJihyW2xdKz1nKih1W2ZdLXVbZi0xXSkpKTpyW2xdPWcqdVswXX1lbHNlIHUubGVuZ3RoPjAmJihyW2xdPU92dC5tYXgodSkpO2Zvcih2YXIgaD0wO2g8bztoKyspe2Zvcih2YXIgYj0wLHk9MTt5PHRbbF0ubGVuZ3RoO3krKyl7dmFyIF89dFtsXVt5XS1yW2xdO2IrPV8+MD9NYXRoLmV4cCgtXy9wKToxfWlmKE1hdGguYWJzKGItYSk8d3Z0KWJyZWFrO2I+YT9wPShjKyhkPXApKS8yOihjPXAsZD09PTEvMD9wKj0yOnA9KGMrZCkvMil9aWYoc1tsXT1wLHJbbF0+MCl7dmFyIEM9T3Z0Lm1lYW4obSk7c1tsXTxrdnQqQyYmKHNbbF09a3Z0KkMpfWVsc2V7dmFyIE09T3Z0Lm1lYW4odC5tYXAoT3Z0Lm1lYW4pKTtzW2xdPGt2dCpNJiYoc1tsXT1rdnQqTSl9fXJldHVybntzaWdtYXM6cyxyaG9zOnJ9fSx0LnByb3RvdHlwZS5jb21wdXRlTWVtYmVyc2hpcFN0cmVuZ3Rocz1mdW5jdGlvbih0LGUsbixvKXtmb3IodmFyIGk9dC5sZW5ndGgsYT10WzBdLmxlbmd0aCxyPU92dC56ZXJvcyhpKmEpLHM9T3Z0Lnplcm9zKGkqYSksbD1PdnQuemVyb3MoaSphKSxjPTA7YzxpO2MrKylmb3IodmFyIGQ9MDtkPGE7ZCsrKXt2YXIgcD0wOy0xIT09dFtjXVtkXSYmKHA9dFtjXVtkXT09PWM/MDplW2NdW2RdLW9bY108PTA/MTpNYXRoLmV4cCgtKGVbY11bZF0tb1tjXSkvbltjXSkscltjKmErZF09YyxzW2MqYStkXT10W2NdW2RdLGxbYyphK2RdPXApfXJldHVybntyb3dzOnIsY29sczpzLHZhbHM6bH19LHQucHJvdG90eXBlLmluaXRpYWxpemVTaW1wbGljaWFsU2V0RW1iZWRkaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT10aGlzLmdldE5FcG9jaHMoKSxuPXRoaXMubkNvbXBvbmVudHMsbz10aGlzLmdyYXBoLmdldFZhbHVlcygpLGk9MCxhPTA7YTxvLmxlbmd0aDthKyspaTxvW2FdJiYoaT1vW2FdKTt2YXIgcj10aGlzLmdyYXBoLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQ8aS9lPzA6dH0pKTt0aGlzLmVtYmVkZGluZz1PdnQuemVyb3Moci5uUm93cykubWFwKChmdW5jdGlvbigpe3JldHVybiBPdnQuemVyb3MobikubWFwKChmdW5jdGlvbigpe3JldHVybiAyMCpPdnQudGF1UmFuZCh0LnJhbmRvbSktMTB9KSl9KSk7dmFyIHM9W10sbD1bXSxjPVtdLGQ9ci5nZXRBbGwoKTtmb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKXt2YXIgcD1kW2FdO3AudmFsdWUmJihzLnB1c2gocC52YWx1ZSksYy5wdXNoKHAucm93KSxsLnB1c2gocC5jb2wpKX1yZXR1cm57aGVhZDpsLHRhaWw6YyxlcG9jaHNQZXJTYW1wbGU6dGhpcy5tYWtlRXBvY2hzUGVyU2FtcGxlKHMsZSl9fSx0LnByb3RvdHlwZS5tYWtlRXBvY2hzUGVyU2FtcGxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49T3Z0LmZpbGxlZCh0Lmxlbmd0aCwtMSksbz1PdnQubWF4KHQpLGk9dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0L28qZX0pKTtyZXR1cm4gaS5mb3JFYWNoKChmdW5jdGlvbih0LG8pe3Q+MCYmKG5bb109ZS9pW29dKX0pKSxufSx0LnByb3RvdHlwZS5hc3NpZ25PcHRpbWl6YXRpb25TdGF0ZVBhcmFtZXRlcnM9ZnVuY3Rpb24odCl7T2JqZWN0LmFzc2lnbih0aGlzLm9wdGltaXphdGlvblN0YXRlLHQpfSx0LnByb3RvdHlwZS5wcmVwYXJlRm9yT3B0aW1pemF0aW9uTG9vcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LnJlcHVsc2lvblN0cmVuZ3RoLG49dC5sZWFybmluZ1JhdGUsbz10Lm5lZ2F0aXZlU2FtcGxlUmF0ZSxpPXRoaXMub3B0aW1pemF0aW9uU3RhdGUsYT1pLmVwb2Noc1BlclNhbXBsZSxyPWkuaGVhZEVtYmVkZGluZyxzPXJbMF0ubGVuZ3RoLGw9ci5sZW5ndGg9PT1pLnRhaWxFbWJlZGRpbmcubGVuZ3RoLGM9YS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0L299KSksZD1idnQoYykscD1idnQoYSk7dGhpcy5hc3NpZ25PcHRpbWl6YXRpb25TdGF0ZVBhcmFtZXRlcnMoe2Vwb2NoT2ZOZXh0U2FtcGxlOnAsZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZTpkLGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlOmMsbW92ZU90aGVyOmwsaW5pdGlhbEFscGhhOm4sYWxwaGE6bixnYW1tYTplLGRpbTpzfSl9LHQucHJvdG90eXBlLmluaXRpYWxpemVPcHRpbWl6YXRpb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVtYmVkZGluZyxlPXRoaXMuZW1iZWRkaW5nLG49dGhpcy5vcHRpbWl6YXRpb25TdGF0ZSxvPW4uaGVhZCxpPW4udGFpbCxhPW4uZXBvY2hzUGVyU2FtcGxlLHI9dGhpcy5nZXRORXBvY2hzKCkscz10aGlzLmdyYXBoLm5Db2xzLGw9TnZ0KHRoaXMuc3ByZWFkLHRoaXMubWluRGlzdCk7dGhpcy5hc3NpZ25PcHRpbWl6YXRpb25TdGF0ZVBhcmFtZXRlcnMoe2hlYWRFbWJlZGRpbmc6dCx0YWlsRW1iZWRkaW5nOmUsaGVhZDpvLHRhaWw6aSxlcG9jaHNQZXJTYW1wbGU6YSxhOmwuYSxiOmwuYixuRXBvY2hzOnIsblZlcnRpY2VzOnN9KX0sdC5wcm90b3R5cGUub3B0aW1pemVMYXlvdXRTdGVwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLm9wdGltaXphdGlvblN0YXRlLG49ZS5oZWFkLG89ZS50YWlsLGk9ZS5oZWFkRW1iZWRkaW5nLGE9ZS50YWlsRW1iZWRkaW5nLHI9ZS5lcG9jaHNQZXJTYW1wbGUscz1lLmVwb2NoT2ZOZXh0U2FtcGxlLGw9ZS5lcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlLGM9ZS5lcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSxkPWUubW92ZU90aGVyLHA9ZS5pbml0aWFsQWxwaGEsbT1lLmFscGhhLHU9ZS5nYW1tYSxmPWUuYSxnPWUuYixoPWUuZGltLGI9ZS5uRXBvY2hzLHk9ZS5uVmVydGljZXMsXz0wO188ci5sZW5ndGg7XysrKWlmKCEoc1tfXT50KSl7dmFyIEM9bltfXSxNPWlbQ10sdj1hW29bX11dLHg9VHZ0KE0sdiksTz0wO3g+MCYmKE89LTIqZipnKk1hdGgucG93KHgsZy0xKSxPLz1mKk1hdGgucG93KHgsZykrMSk7Zm9yKHZhciBQPTA7UDxoO1ArKyl7dmFyIHc9QXZ0KE8qKE1bUF0tdltQXSksNCk7TVtQXSs9dyptLGQmJih2W1BdKz0tdyptKX1zW19dKz1yW19dO2Zvcih2YXIgaz1NYXRoLmZsb29yKCh0LWxbX10pL2NbX10pLFM9MDtTPGs7UysrKXt2YXIgRD1PdnQudGF1UmFuZEludCh5LHRoaXMucmFuZG9tKSxFPWFbRF0sUj1UdnQoTSxFKSxBPTA7aWYoUj4wKUE9Mip1KmcsQS89KC4wMDErUikqKGYqTWF0aC5wb3coUixnKSsxKTtlbHNlIGlmKEM9PT1EKWNvbnRpbnVlO2ZvcihQPTA7UDxoO1ArKyl3PTQsQT4wJiYodz1BdnQoQSooTVtQXS1FW1BdKSw0KSksTVtQXSs9dyptfWxbX10rPWsqY1tfXX1yZXR1cm4gZS5hbHBoYT1wKigxLXQvYiksZS5jdXJyZW50RXBvY2grPTEsaX0sdC5wcm90b3R5cGUub3B0aW1pemVMYXlvdXRBc3luYz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB2b2lkIDA9PT10JiYodD1mdW5jdGlvbigpe3JldHVybiEwfSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sbyl7dmFyIGk9ZnVuY3Rpb24oKXtyZXR1cm4gZnZ0KGUsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgZSxhLHIscyxsO3JldHVybiBndnQodGhpcywoZnVuY3Rpb24oYyl7dHJ5e2lmKGE9KGU9dGhpcy5vcHRpbWl6YXRpb25TdGF0ZSkubkVwb2Nocyx0aGlzLmVtYmVkZGluZz10aGlzLm9wdGltaXplTGF5b3V0U3RlcChlLmN1cnJlbnRFcG9jaCkscz0hMT09PXQocj10aGlzLm9wdGltaXphdGlvblN0YXRlLmN1cnJlbnRFcG9jaCksbD1yPT09YSxzfHxsKXJldHVyblsyLG4obCldO3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIGkoKX0pLDApfWNhdGNoKHQpe28odCl9cmV0dXJuWzJdfSkpfSkpfTtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBpKCl9KSwwKX0pKX0sdC5wcm90b3R5cGUub3B0aW1pemVMYXlvdXQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0pO2Zvcih2YXIgZT0hMSxuPVtdOyFlOyl7dmFyIG89dGhpcy5vcHRpbWl6YXRpb25TdGF0ZSxpPW8ubkVwb2NocztuPXRoaXMub3B0aW1pemVMYXlvdXRTdGVwKG8uY3VycmVudEVwb2NoKTt2YXIgYT10aGlzLm9wdGltaXphdGlvblN0YXRlLmN1cnJlbnRFcG9jaCxyPSExPT09dChhKTtlPWE9PT1pfHxyfXJldHVybiBufSx0LnByb3RvdHlwZS5nZXRORXBvY2hzPWZ1bmN0aW9uKCl7aWYodGhpcy5uRXBvY2hzPjApcmV0dXJuIHRoaXMubkVwb2Noczt2YXIgdD10aGlzLmdyYXBoLm5Sb3dzO3JldHVybiB0PD0yNTAwPzUwMDp0PD01ZTM/NDAwOnQ8PTc1MDA/MzAwOjIwMH0sdH0pKCk7ZnVuY3Rpb24gRHZ0KHQsZSl7Zm9yKHZhciBuPTAsbz0wO288dC5sZW5ndGg7bysrKW4rPU1hdGgucG93KHRbb10tZVtvXSwyKTtyZXR1cm4gTWF0aC5zcXJ0KG4pfXVDdC5VTUFQPVN2dCx1Q3QuZXVjbGlkZWFuPUR2dCx1Q3QuY29zaW5lPWZ1bmN0aW9uIEV2dCh0LGUpe2Zvcih2YXIgbj0wLG89MCxpPTAsYT0wO2E8dC5sZW5ndGg7YSsrKW4rPXRbYV0qZVthXSxvKz1NYXRoLnBvdyh0W2FdLDIpLGkrPU1hdGgucG93KGVbYV0sMik7cmV0dXJuIDA9PT1vJiYwPT09aT8wOjA9PT1vfHwwPT09aT8xOjEtbi9NYXRoLnNxcnQobyppKX07dmFyIFJ2dD1mdW5jdGlvbiBSdnQoKXt0aGlzLmN1cnJlbnRFcG9jaD0wLHRoaXMuaGVhZEVtYmVkZGluZz1bXSx0aGlzLnRhaWxFbWJlZGRpbmc9W10sdGhpcy5oZWFkPVtdLHRoaXMudGFpbD1bXSx0aGlzLmVwb2Noc1BlclNhbXBsZT1bXSx0aGlzLmVwb2NoT2ZOZXh0U2FtcGxlPVtdLHRoaXMuZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZT1bXSx0aGlzLmVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlPVtdLHRoaXMubW92ZU90aGVyPSEwLHRoaXMuaW5pdGlhbEFscGhhPTEsdGhpcy5hbHBoYT0xLHRoaXMuZ2FtbWE9MSx0aGlzLmE9MS41NzY5NDM0NjAzMTEzMDc3LHRoaXMuYj0uODk1MDYwODc3OTEwOTczMyx0aGlzLmRpbT0yLHRoaXMubkVwb2Nocz01MDAsdGhpcy5uVmVydGljZXM9MH07ZnVuY3Rpb24gQXZ0KHQsZSl7cmV0dXJuIHQ+ZT9lOnQ8LWU/LWU6dH1mdW5jdGlvbiBUdnQodCxlKXtmb3IodmFyIG49MCxvPTA7bzx0Lmxlbmd0aDtvKyspbis9TWF0aC5wb3codFtvXS1lW29dLDIpO3JldHVybiBufWZ1bmN0aW9uIE52dCh0LGUpe3ZhciBuPU92dC5saW5lYXIoMCwzKnQsMzAwKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0PGU/MTp0fSkpLG89T3Z0Lnplcm9zKG4ubGVuZ3RoKS5tYXAoKGZ1bmN0aW9uKG8saSl7cmV0dXJuIG5baV0+PWU/TWF0aC5leHAoLShuW2ldLWUpL3QpOm99KSksaT1QdnQuZGVmYXVsdCh7eDpuLHk6b30sKGZ1bmN0aW9uKHQpe3ZhciBlPWh2dCh0LDIpLG49ZVswXSxvPWVbMV07cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiAxLygxK24qTWF0aC5wb3codCwyKm8pKX19KSx7ZGFtcGluZzoxLjUsaW5pdGlhbFZhbHVlczpbLjUsLjVdLGdyYWRpZW50RGlmZmVyZW5jZTouMSxtYXhJdGVyYXRpb25zOjEwMCxlcnJvclRvbGVyYW5jZTouMDF9KS5wYXJhbWV0ZXJWYWx1ZXMsYT1odnQoaSwyKTtyZXR1cm57YTphWzBdLGI6YVsxXX19ZnVuY3Rpb24genZ0KHQsZSxuLG8pe3JldHVybiB2b2lkIDA9PT1uJiYobj0xKSx2b2lkIDA9PT1vJiYobz01KSx0Lm1hcCgoZnVuY3Rpb24odCxpLGEpe3JldHVybi0xPT09ZVtpXXx8LTE9PT1lW2FdP3QqTWF0aC5leHAoLW4pOmVbaV0hPT1lW2FdP3QqTWF0aC5leHAoLW8pOnR9KSl9ZnVuY3Rpb24gSXZ0KHQpe3Q9TXZ0Lm5vcm1hbGl6ZSh0LCJtYXgiKTt2YXIgZT1NdnQudHJhbnNwb3NlKHQpLG49TXZ0LnBhaXJ3aXNlTXVsdGlwbHkoZSx0KTtyZXR1cm4gdD1NdnQuYWRkKHQsTXZ0LnN1YnRyYWN0KGUsbikpLE12dC5lbGltaW5hdGVaZXJvcyh0KX1mdW5jdGlvbiBIdnQodCxlLG4pe2Zvcih2YXIgbz1PdnQuemVyb3ModC5sZW5ndGgpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIE92dC56ZXJvcyhuWzBdLmxlbmd0aCl9KSksaT0wO2k8dC5sZW5ndGg7aSsrKWZvcih2YXIgYT0wO2E8dFswXS5sZW5ndGg7YSsrKWZvcih2YXIgcj0wO3I8blswXS5sZW5ndGg7cisrKW9baV1bcl0rPWVbaV1bYV0qblt0W2ldW2FdXVtyXTtyZXR1cm4gb31mdW5jdGlvbiBGdnQodCl7bGV0IGUsbixvPXQubGVuZ3RoO2Zvcig7bzspbj1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqby0tKSxlPXRbb10sdFtvXT10W25dLHRbbl09ZTtyZXR1cm4gdH1mdW5jdGlvbiBMdnQodCxlKXtyZXR1cm5gJHtlfS8ke3R9YH11Q3QuZmluZEFCUGFyYW1zPU52dCx1Q3QuZmFzdEludGVyc2VjdGlvbj16dnQsdUN0LnJlc2V0TG9jYWxDb25uZWN0aXZpdHk9SXZ0LHVDdC5pbml0VHJhbnNmb3JtPUh2dCxPYmplY3QuZGVmaW5lUHJvcGVydHkobUN0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxtQ3QuVU1BUD11Q3QuVU1BUDtjbGFzcyBCdnR7Y29uc3RydWN0b3IodCl7dGhpcy5odHRwPXQsdGhpcy5odHRwUGF0aFByZWZpeD0iZGF0YS9wbHVnaW4vbnBtaSJ9ZmV0Y2hEYXRhKHQpe3JldHVybiAkdCh0aGlzLmZldGNoQW5ub3RhdGlvbnModCksdGhpcy5mZXRjaE1ldHJpY3ModCksdGhpcy5mZXRjaFZhbHVlcyh0KSx0aGlzLmZldGNoRW1iZWRkaW5ncyh0KSkucGlwZShJdCgoKFt0LGUsbixvXSk9Pntjb25zdCBpPXt9LGE9e307bGV0IHIscz0wO2Zvcihjb25zdCByIG9mIE9iamVjdC5rZXlzKHQpKWZvcihjb25zdCBsIGluIHRbcl0pe2NvbnN0IGM9dFtyXVtsXTtPYmplY3Qua2V5cyhvKS5sZW5ndGgmJiFhW2NdJiZvW3JdW2xdJiZvW3JdW2xdLnNvbWUoKHQ9PjAhPT10KSkmJihhW2NdPXt2ZWN0b3I6b1tyXVtsXSxpbmRleDpzLG5hbWU6Y30scys9MSk7Y29uc3QgZD1uZXcgTWFwO2Zvcihjb25zdCB0IGluIGVbcl0pe2NvbnN0IG89ZVtyXVt0XSxpPW55dChvKTtsZXQgYT1kLmdldChpKTthfHwoYT17blBNSVZhbHVlOm51bGwsY291bnRWYWx1ZTpudWxsLGFubm90YXRpb246YyxtZXRyaWM6aSxydW46cn0sZC5zZXQoaSxhKSksJGJ0KG8pP2EuY291bnRWYWx1ZT1uW3JdW2xdW3RdOnR5dChvKSYmKGEublBNSVZhbHVlPW5bcl1bbF1bdF0pfWlbY109Wy4uLmlbY10/aVtjXTpbXSwuLi5kLnZhbHVlcygpXX1yZXR1cm4gT2JqZWN0LmtleXMoYSkubGVuZ3RoJiYocj0oZnVuY3Rpb24gbCh0KXtjb25zdCBlPU9iamVjdC5rZXlzKHQpO3JldHVybntwb2ludHM6dCxwb2ludEtleXM6ZSxzaHVmZmxlZERhdGFJbmRpY2VzOkZ2dCgobj1lLmxlbmd0aCxbLi4ubmV3IEFycmF5KG4pXS5tYXAoKCh0LGUpPT5lKSkpKSxoYXNVbWFwUnVuOiExfTt2YXIgbn0pKGEpKSx7YW5ub3RhdGlvbkRhdGE6aSxtZXRyaWNzOmUsZW1iZWRkaW5nRGF0YVNldDpyfX0pKSxwZSgodD0+dCBpbnN0YW5jZW9mIHhEJiY0MDA8PXQuc3RhdHVzJiZ0LnN0YXR1czw1MDA/RXQoe2Fubm90YXRpb25EYXRhOnt9LG1ldHJpY3M6e30sZW1iZWRkaW5nRGF0YVNldDp2b2lkIDB9KTpSdCh0KSkpKX1mZXRjaEFubm90YXRpb25zKHQpe3JldHVybiAkdCh0Lm1hcCgodD0+dGhpcy5odHRwLmdldChgL2V4cGVyaW1lbnQvJHt0fS8ke3RoaXMuaHR0cFBhdGhQcmVmaXh9L2Fubm90YXRpb25zYCkucGlwZShJdCgoZT0+KGZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHQpLm1hcCgoKFt0LG5dKT0+W0x2dCh0LGUpLG5dKSkpfSkoZSx0KSkpKSkpKS5waXBlKEl0KCh0PT57bGV0IGU9e307Zm9yKGNvbnN0IG4gb2YgdCllPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSxuKTtyZXR1cm4gZX0pKSl9ZmV0Y2hNZXRyaWNzKHQpe3JldHVybiAkdCh0Lm1hcCgodD0+dGhpcy5odHRwLmdldChgL2V4cGVyaW1lbnQvJHt0fS8ke3RoaXMuaHR0cFBhdGhQcmVmaXh9L21ldHJpY3NgKS5waXBlKEl0KChlPT4oZnVuY3Rpb24gbih0LGUpe3JldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModCkubWFwKCgoW3Qsbl0pPT5bTHZ0KHQsZSksbl0pKSl9KShlLHQpKSkpKSkpLnBpcGUoSXQoKHQ9PntsZXQgZT17fTtmb3IoY29uc3QgbiBvZiB0KWU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLG4pO3JldHVybiBlfSkpKX1mZXRjaFZhbHVlcyh0KXtyZXR1cm4gJHQodC5tYXAoKHQ9PnRoaXMuaHR0cC5nZXQoYC9leHBlcmltZW50LyR7dH0vJHt0aGlzLmh0dHBQYXRoUHJlZml4fS92YWx1ZXNgKS5waXBlKEl0KChlPT4oZnVuY3Rpb24gbih0LGUpe3JldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModCkubWFwKCgoW3Qsbl0pPT5bTHZ0KHQsZSksbl0pKSl9KShlLHQpKSkpKSkpLnBpcGUoSXQoKHQ9PntsZXQgZT17fTtmb3IoY29uc3QgbiBvZiB0KWU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLG4pO3JldHVybiBlfSkpKX1mZXRjaEVtYmVkZGluZ3ModCl7cmV0dXJuICR0KHQubWFwKCh0PT50aGlzLmh0dHAuZ2V0KGAvZXhwZXJpbWVudC8ke3R9LyR7dGhpcy5odHRwUGF0aFByZWZpeH0vZW1iZWRkaW5nc2ApLnBpcGUoSXQoKGU9PihmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh0KS5tYXAoKChbdCxuXSk9PltMdnQodCxlKSxuXSkpKX0pKGUsdCkpKSkpKSkucGlwZShJdCgodD0+e2xldCBlPXt9O2Zvcihjb25zdCBuIG9mIHQpZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSksbik7cmV0dXJuIGV9KSkpfX1CdnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fEJ2dCkodnIobEUpKX0sQnZ0Lsm1cHJvdj1Nbih7dG9rZW46QnZ0LGZhY3Rvcnk6QnZ0Lsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChCdnQsW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmxFfV19KSxudWxsKTtjbGFzcyBWdnR7fVZ2dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VnZ0KX0sVnZ0Lsm1bW9kPWFvKHt0eXBlOlZ2dH0pLFZ2dC7JtWluaj12bih7cHJvdmlkZXJzOltCdnRdLGltcG9ydHM6W1tjRV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChWdnQsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltjRV0scHJvdmlkZXJzOltCdnRdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oVnZ0LHtpbXBvcnRzOltjRV19KTtjbGFzcyBqdnR7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuYWN0aW9ucyQ9dCx0aGlzLnN0b3JlPWUsdGhpcy5kYXRhU291cmNlPW4sdGhpcy5sb2FkRGF0YSQ9TWsoKCgpPT5yZSh0aGlzLmxvYWRQbHVnaW5EYXRhKCkpLnBpcGUoSXQoKCgpPT4oe30pKSkpKSx7ZGlzcGF0Y2g6ITF9KX1sb2FkUGx1Z2luRGF0YSgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoRGsoa2J0KSxWZSh0aGlzLnN0b3JlLnNlbGVjdChhYnQpLHRoaXMuc3RvcmUuc2VsZWN0KFRTKSksY2UoKChbLHQsZV0pPT50IT09eUUuTE9BRElORyYmbnVsbCE9PWUpKSxGZSgoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goU2J0KCkpKSksWnQoKChbLCx0XSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaERhdGEodCkucGlwZShGZSgodD0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goRGJ0KHQpKX0pKSxJdCgoKCk9Pnt9KSkscGUoKCgpPT4odGhpcy5zdG9yZS5kaXNwYXRjaChFYnQoKSkscnQpKSkpKSkpfX1qdnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGp2dCkodnIoU2spLHZyKEl3KSx2cihCdnQpKX0sanZ0Lsm1cHJvdj1Nbih7dG9rZW46anZ0LGZhY3Rvcnk6anZ0Lsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChqdnQsW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOlNrfSx7dHlwZTpJd30se3R5cGU6QnZ0fV19KSxudWxsKTtjbGFzcyBVdnR7fVV2dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8VXZ0KX0sVXZ0Lsm1bW9kPWFvKHt0eXBlOlV2dH0pLFV2dC7JtWluaj12bih7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChVdnQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W29idF0sZXhwb3J0czpbb2J0XX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKFV2dCx7ZGVjbGFyYXRpb25zOltvYnRdLGV4cG9ydHM6W29idF19KTtjbGFzcyBHdnR7fUd2dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8R3Z0KX0sR3Z0Lsm1bW9kPWFvKHt0eXBlOkd2dH0pLEd2dC7JtWluaj12bih7aW1wb3J0czpbW1dNLEVXLEJZLFkwXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEd2dCxbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbc3l0LGx5dF0saW1wb3J0czpbV00sRVcsQlksWTBdLGV4cG9ydHM6W2x5dF19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhHdnQse2RlY2xhcmF0aW9uczpbc3l0LGx5dF0saW1wb3J0czpbV00sRVcsQlksWTBdLGV4cG9ydHM6W2x5dF19KTtjbGFzcyBXdnR7fVd2dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8V3Z0KX0sV3Z0Lsm1bW9kPWFvKHt0eXBlOld2dH0pLFd2dC7JtWluaj12bih7aW1wb3J0czpbW1dNLGNHLGRHLEVXLEV5dCxWUV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChXdnQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W3p5dCxJeXRdLGltcG9ydHM6W1dNLGNHLGRHLEVXLEV5dCxWUV0sZXhwb3J0czpbSXl0XX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKFd2dCx7ZGVjbGFyYXRpb25zOlt6eXQsSXl0XSxpbXBvcnRzOltXTSxjRyxkRyxFVyxFeXQsVlFdLGV4cG9ydHM6W0l5dF19KTtjbGFzcyBZdnR7fVl2dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WXZ0KX0sWXZ0Lsm1bW9kPWFvKHt0eXBlOll2dH0pLFl2dC7JtWluaj12bih7aW1wb3J0czpbW1dNLEV5dF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChZdnQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0h5dF0saW1wb3J0czpbV00sRXl0XSxleHBvcnRzOltIeXRdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oWXZ0LHtkZWNsYXJhdGlvbnM6W0h5dF0saW1wb3J0czpbV00sRXl0XSxleHBvcnRzOltIeXRdfSk7Y2xhc3MgcXZ0e31xdnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHF2dCl9LHF2dC7JtW1vZD1hbyh7dHlwZTpxdnR9KSxxdnQuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxFeXQsV3Z0LFl2dF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChxdnQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1Z5dCxqeXRdLGltcG9ydHM6W1dNLEV5dCxXdnQsWXZ0XSxleHBvcnRzOltqeXRdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8ocXZ0LHtkZWNsYXJhdGlvbnM6W1Z5dCxqeXRdLGltcG9ydHM6W1dNLEV5dCxXdnQsWXZ0XSxleHBvcnRzOltqeXRdfSk7Y2xhc3MgWnZ0e31adnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFp2dCl9LFp2dC7JtW1vZD1hbyh7dHlwZTpadnR9KSxadnQuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxFVyxKSF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChadnQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W3B5dCxteXRdLGltcG9ydHM6W1dNLEVXLEpIXSxleHBvcnRzOltteXRdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oWnZ0LHtkZWNsYXJhdGlvbnM6W3B5dCxteXRdLGltcG9ydHM6W1dNLEVXLEpIXSxleHBvcnRzOltteXRdfSk7Y2xhc3MgWHZ0e31YdnQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFh2dCl9LFh2dC7JtW1vZD1hbyh7dHlwZTpYdnR9KSxYdnQuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxHdnQscXZ0LFp2dF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChYdnQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1V5dF0saW1wb3J0czpbV00sR3Z0LHF2dCxadnRdLGV4cG9ydHM6W1V5dF19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhYdnQse2RlY2xhcmF0aW9uczpbVXl0XSxpbXBvcnRzOltXTSxHdnQscXZ0LFp2dF0sZXhwb3J0czpbVXl0XX0pO2NsYXNzIEt2dHt9S3Z0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxLdnQpfSxLdnQuybVtb2Q9YW8oe3R5cGU6S3Z0fSksS3Z0Lsm1aW5qPXZuKHtpbXBvcnRzOltbV00sY0csSkgsRVddXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoS3Z0LFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltZeXQscXl0XSxpbXBvcnRzOltXTSxjRyxKSCxFV10sZXhwb3J0czpbcXl0XX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKEt2dCx7ZGVjbGFyYXRpb25zOltZeXQscXl0XSxpbXBvcnRzOltXTSxjRyxKSCxFV10sZXhwb3J0czpbcXl0XX0pO2NsYXNzIEp2dHt9SnZ0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxKdnQpfSxKdnQuybVtb2Q9YW8oe3R5cGU6SnZ0fSksSnZ0Lsm1aW5qPXZuKHtpbXBvcnRzOltbV00sY0csRVcsSkgsS3Z0XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKEp2dCxbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbS3l0LEp5dF0saW1wb3J0czpbV00sY0csRVcsSkgsS3Z0XSxleHBvcnRzOltKeXRdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oSnZ0LHtkZWNsYXJhdGlvbnM6W0t5dCxKeXRdLGltcG9ydHM6W1dNLGNHLEVXLEpILEt2dF0sZXhwb3J0czpbSnl0XX0pO2NsYXNzIFF2dHt9UXZ0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxRdnQpfSxRdnQuybVtb2Q9YW8oe3R5cGU6UXZ0fSksUXZ0Lsm1aW5qPXZuKHtpbXBvcnRzOltbV00sY0csRVcsQlldXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoUXZ0LFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltmX3QsZ190XSxpbXBvcnRzOltXTSxjRyxFVyxCWV0sZXhwb3J0czpbZ190XX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKFF2dCx7ZGVjbGFyYXRpb25zOltmX3QsZ190XSxpbXBvcnRzOltXTSxjRyxFVyxCWV0sZXhwb3J0czpbZ190XX0pO2NsYXNzICR2dHt9JHZ0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHwkdnQpfSwkdnQuybVtb2Q9YW8oe3R5cGU6JHZ0fSksJHZ0Lsm1aW5qPXZuKHtpbXBvcnRzOltbV00sY0csRVcsSkgsbV90LFF2dF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCgkdnQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W3lfdCxfX3RdLGltcG9ydHM6W1dNLGNHLEVXLEpILG1fdCxRdnRdLGV4cG9ydHM6W19fdF19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybygkdnQse2RlY2xhcmF0aW9uczpbeV90LF9fdF0saW1wb3J0czpbV00sY0csRVcsSkgsbV90LFF2dF0sZXhwb3J0czpbX190XX0pO2NsYXNzIHR4dHt9dHh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx0eHQpfSx0eHQuybVtb2Q9YW8oe3R5cGU6dHh0fSksdHh0Lsm1aW5qPXZuKHtpbXBvcnRzOltbV00sY0csU1ksRVddXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgodHh0LFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltQX3Qsd190XSxpbXBvcnRzOltXTSxjRyxTWSxFV10sZXhwb3J0czpbd190XX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKHR4dCx7ZGVjbGFyYXRpb25zOltQX3Qsd190XSxpbXBvcnRzOltXTSxjRyxTWSxFV10sZXhwb3J0czpbd190XX0pO2NsYXNzIGV4dHt9ZXh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxleHQpfSxleHQuybVtb2Q9YW8oe3R5cGU6ZXh0fSksZXh0Lsm1aW5qPXZuKHtpbXBvcnRzOltbV01dXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoZXh0LFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltNX3RdLGltcG9ydHM6W1dNXSxleHBvcnRzOltNX3RdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oZXh0LHtkZWNsYXJhdGlvbnM6W01fdF0saW1wb3J0czpbV01dLGV4cG9ydHM6W01fdF19KTtjbGFzcyBueHR7fW54dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bnh0KX0sbnh0Lsm1bW9kPWFvKHt0eXBlOm54dH0pLG54dC7JtWluaj12bih7aW1wb3J0czpbW2V4dF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChueHQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W3ZfdF0saW1wb3J0czpbZXh0XSxleHBvcnRzOlt2X3RdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8obnh0LHtkZWNsYXJhdGlvbnM6W3ZfdF0saW1wb3J0czpbZXh0XSxleHBvcnRzOlt2X3RdfSk7Y2xhc3Mgb3h0e31veHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fG94dCl9LG94dC7JtW1vZD1hbyh7dHlwZTpveHR9KSxveHQuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxjRyxTWSxFVyxKSF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChveHQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1RfdCxBX3RdLGltcG9ydHM6W1dNLGNHLFNZLEVXLEpIXSxleHBvcnRzOltUX3RdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8ob3h0LHtkZWNsYXJhdGlvbnM6W1RfdCxBX3RdLGltcG9ydHM6W1dNLGNHLFNZLEVXLEpIXSxleHBvcnRzOltUX3RdfSk7Y2xhc3MgaXh0e31peHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGl4dCl9LGl4dC7JtW1vZD1hbyh7dHlwZTppeHR9KSxpeHQuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSwkdnQsdHh0LG54dCxfRixveHRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoaXh0LFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltJX3QsSF90XSxpbXBvcnRzOltXTSwkdnQsdHh0LG54dCxfRixveHRdLGV4cG9ydHM6W0hfdF19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhpeHQse2RlY2xhcmF0aW9uczpbSV90LEhfdF0saW1wb3J0czpbV00sJHZ0LHR4dCxueHQsX0Ysb3h0XSxleHBvcnRzOltIX3RdfSk7Y2xhc3MgYXh0e31heHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGF4dCl9LGF4dC7JtW1vZD1hbyh7dHlwZTpheHR9KSxheHQuybVpbmo9dm4oe2ltcG9ydHM6W1tXTV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChheHQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W0xfdCxCX3RdLGltcG9ydHM6W1dNXSxleHBvcnRzOltCX3RdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oYXh0LHtkZWNsYXJhdGlvbnM6W0xfdCxCX3RdLGltcG9ydHM6W1dNXSxleHBvcnRzOltCX3RdfSk7Y2xhc3Mgcnh0e31yeHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHJ4dCl9LHJ4dC7JtW1vZD1hbyh7dHlwZTpyeHR9KSxyeHQuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxFVyxKSCxheHRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgocnh0LFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltHX3QsV190XSxpbXBvcnRzOltXTSxFVyxKSCxheHRdLGV4cG9ydHM6W1dfdF19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhyeHQse2RlY2xhcmF0aW9uczpbR190LFdfdF0saW1wb3J0czpbV00sRVcsSkgsYXh0XSxleHBvcnRzOltXX3RdfSk7Y2xhc3Mgc3h0e31zeHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHN4dCl9LHN4dC7JtW1vZD1hbyh7dHlwZTpzeHR9KSxzeHQuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxjRyxTWSxFVyxraHQsWHZ0LEpILEp2dCxpeHQscnh0XV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHN4dCxbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbSl90LFFfdF0saW1wb3J0czpbV00sY0csU1ksRVcsa2h0LFh2dCxKSCxKdnQsaXh0LHJ4dF0sZXhwb3J0czpbUV90XX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKHN4dCx7ZGVjbGFyYXRpb25zOltKX3QsUV90XSxpbXBvcnRzOltXTSxjRyxTWSxFVyxraHQsWHZ0LEpILEp2dCxpeHQscnh0XSxleHBvcnRzOltRX3RdfSk7Y2xhc3MgbHh0e31seHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGx4dCl9LGx4dC7JtW1vZD1hbyh7dHlwZTpseHR9KSxseHQuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxjRyxTWSxFVyxraHQsWHZ0LEpILGl4dCxyeHRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgobHh0LFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltpQ3QsYUN0XSxpbXBvcnRzOltXTSxjRyxTWSxFVyxraHQsWHZ0LEpILGl4dCxyeHRdLGV4cG9ydHM6W2FDdF19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhseHQse2RlY2xhcmF0aW9uczpbaUN0LGFDdF0saW1wb3J0czpbV00sY0csU1ksRVcsa2h0LFh2dCxKSCxpeHQscnh0XSxleHBvcnRzOlthQ3RdfSk7Y2xhc3MgY3h0e31jeHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGN4dCl9LGN4dC7JtW1vZD1hbyh7dHlwZTpjeHR9KSxjeHQuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxVdnQsc3h0LGx4dCxWdnQsZGsuZm9yRmVhdHVyZShRaHQsaXl0KSxXay5mb3JGZWF0dXJlKFtqdnRdKSx3cS5mb3JQbHVnaW4oIm5wbWkiLHBDdCldXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoY3h0LFt7dHlwZTpBeSxhcmdzOlt7ZGVjbGFyYXRpb25zOltkQ3QscEN0XSxpbXBvcnRzOltXTSxVdnQsc3h0LGx4dCxWdnQsZGsuZm9yRmVhdHVyZShRaHQsaXl0KSxXay5mb3JGZWF0dXJlKFtqdnRdKSx3cS5mb3JQbHVnaW4oIm5wbWkiLHBDdCldLGV4cG9ydHM6W3BDdF0sZW50cnlDb21wb25lbnRzOltwQ3RdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oY3h0LHtkZWNsYXJhdGlvbnM6W2RDdCxwQ3RdLGltcG9ydHM6W1dNLFV2dCxzeHQsbHh0LFZ2dCxjayxHayx3cV0sZXhwb3J0czpbcEN0XX0pO2NsYXNzIGR4dHt9ZHh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxkeHQpfSxkeHQuybVjbXA9dG8oe3R5cGU6ZHh0LHNlbGVjdG9yczpbWyJ0ZXh0LWRhc2hib2FyZCJdXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbiB0KGUsbil7MSZlJiZrdSgwLCIgVGhpcyBpcyB0aGUgdGV4dCBkYXNoYm9hcmQgIil9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoZHh0LFt7dHlwZTpNeSxhcmdzOlt7c2VsZWN0b3I6InRleHQtZGFzaGJvYXJkIix0ZW1wbGF0ZToiIFRoaXMgaXMgdGhlIHRleHQgZGFzaGJvYXJkICIsY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sbnVsbCxudWxsKTtjbGFzcyBweHR7fXB4dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cHh0KX0scHh0Lsm1bW9kPWFvKHt0eXBlOnB4dH0pLHB4dC7JtWluaj12bih7fSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChweHQsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2R4dF0sZXhwb3J0czpbZHh0XX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKHB4dCx7ZGVjbGFyYXRpb25zOltkeHRdLGV4cG9ydHM6W2R4dF19KTtjbGFzcyBteHR7fW14dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8bXh0KX0sbXh0Lsm1cHJvdj1Nbih7dG9rZW46bXh0LGZhY3Rvcnk6bXh0Lsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChteHQsW3t0eXBlOmltfV0sbnVsbCxudWxsKTtjbGFzcyB1eHR7Y29uc3RydWN0b3IodCl7dGhpcy5odHRwPXQsdGhpcy5odHRwUGF0aFByZWZpeD0iZGF0YS9wbHVnaW4vdGV4dF92MiJ9ZmV0Y2hSdW5Ub1RhZygpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi90YWdzIikucGlwZShJdCgodD0+e2NvbnN0IGU9bmV3IE1hcDtyZXR1cm4gT2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoKFt0LG5dKT0+e2Uuc2V0KHQsbil9KSksZX0pKSl9ZmV0Y2hUZXh0RGF0YSh0LGUpe2NvbnN0IG49bmV3IFVSTFNlYXJjaFBhcmFtcyh7cnVuOnQsdGFnOmV9KTtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4K2AvdGV4dD8ke24udG9TdHJpbmcoKX1gKS5waXBlKEl0KCh0PT50Lm1hcCgodD0+KHtvcmlnaW5hbFNoYXBlOnQub3JpZ2luYWxfc2hhcGUsc3RlcDp0LnN0ZXAsc3RyaW5nQXJyYXk6dC5zdHJpbmdfYXJyYXksd2FsbFRpbWVJbk1zOjFlMyp0LndhbGxfdGltZSx0cnVuY2F0ZWQ6dC50cnVuY2F0ZWR9KSkpKSkpfX11eHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHV4dCkodnIobEUpKX0sdXh0Lsm1cHJvdj1Nbih7dG9rZW46dXh0LGZhY3Rvcnk6dXh0Lsm1ZmFjfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaCh1eHQsW3t0eXBlOmltfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOmxFfV19KSxudWxsKTtjbGFzcyBmeHR7fWZ4dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8Znh0KX0sZnh0Lsm1bW9kPWFvKHt0eXBlOmZ4dH0pLGZ4dC7JtWluaj12bih7cHJvdmlkZXJzOlt1eHQse3Byb3ZpZGU6bXh0LHVzZUV4aXN0aW5nOnV4dH1dLGltcG9ydHM6W1tjRV1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChmeHQsW3t0eXBlOkF5LGFyZ3M6W3tpbXBvcnRzOltjRV0scHJvdmlkZXJzOlt1eHQse3Byb3ZpZGU6bXh0LHVzZUV4aXN0aW5nOnV4dH1dfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oZnh0LHtpbXBvcnRzOltjRV19KTtjb25zdCBneHQ9SlAoIltUZXh0XSBUZXh0IFBsdWdpbiBMb2FkZWQiKSxoeHQ9SlAoIltUZXh0XSBSdW5zIFRvIFRhZyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxieHQ9SlAoIltUZXh0XSBUYWcgR3JvdXAgVmlzaWJpbGl0eSBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkseXh0PUpQKCJbVGV4dF0gVGV4dCBEYXRhIExvYWRlZCBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxfeHQ9InRleHQiLEN4dD1LdyhfeHQpO1p3KEN4dCwodD0+dC5ydW5Ub1RhZ3MpKTtjb25zdCBNeHQ9WncoQ3h0LCh0PT57Y29uc3QgZT1uZXcgU2V0LG49bmV3IFNldDtmb3IoY29uc3QgbyBvZiB0LnZpc2libGVSdW5UYWdzLnZhbHVlcygpKWZvcihjb25zdCB0IG9mIG8pe2NvbnN0IG89SlNPTi5zdHJpbmdpZnkodCk7ZS5oYXMobyl8fChlLmFkZChvKSxuLmFkZCh0KSl9cmV0dXJuWy4uLm5dfSkpLHZ4dD1adyhDeHQsKCh0LGUpPT57Y29uc3Qgbj10LmRhdGEuZ2V0KGUucnVuKTtyZXR1cm4gbiYmbi5nZXQoZS50YWcpfHxudWxsfSkpO2NsYXNzIHh4dHtjb25zdHJ1Y3Rvcih0LGUsbil7dGhpcy5hY3Rpb25zJD10LHRoaXMuc3RvcmU9ZSx0aGlzLmRhdGFTb3VyY2U9bix0aGlzLmxvYWRSdW5Ub1RhZ3MkPU1rKCgoKT0+dGhpcy5hY3Rpb25zJC5waXBlKERrKGd4dCksemUoKCgpPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hSdW5Ub1RhZygpLnBpcGUoRmUoKHQ9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGh4dCh7cnVuVG9UYWdzOnR9KSl9KSksSXQoKCgpPT57fSkpKSkpKSkse2Rpc3BhdGNoOiExfSksdGhpcy5sb2FkRGF0YSQ9TWsoKCgpPT5yZSh0aGlzLmFjdGlvbnMkLnBpcGUoRGsoYnh0KSx6ZSgoKHt2aXNpYmxlVGV4dENhcmRzOnR9KT0+JHQodC5tYXAoKCh7cnVuOnQsdGFnOmV9KT0+dGhpcy5zdG9yZS5zZWxlY3Qodnh0LHtydW46dCx0YWc6ZX0pLnBpcGUoKGZ1bmN0aW9uIG4odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPj0yO3JldHVybiBmdW5jdGlvbihvKXtyZXR1cm4gby5waXBlKHQ/Y2UoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxuLG8pfSkpOncsU2UoMSksbj9oZShlKTp4ZSgoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHp0fSkpKX19KSgpLEl0KChuPT4oe3J1bjp0LHRhZzplLHRleHREYXRhOm59KSkpKSkpKS5waXBlKEl0KCh0PT50LmZpbHRlcigoKHt0ZXh0RGF0YTp0fSk9Pm51bGw9PT10KSkubWFwKCgoe3J1bjp0LHRhZzplfSk9Pih7cnVuOnQsdGFnOmV9KSkpKSkpKSkpLHRoaXMuYWN0aW9ucyQucGlwZShEayh2RSx4RSksVmUodGhpcy5zdG9yZS5zZWxlY3QoTXh0KSksSXQoKChbLHRdKT0+dCkpKSkucGlwZShadCgodD0+JHQodC5tYXAoKHQ9PnRoaXMuZmV0Y2hUZXh0RGF0YSh0KSkpKSkpKSkse2Rpc3BhdGNoOiExfSl9ZmV0Y2hUZXh0RGF0YSh0KXtjb25zdHtydW46ZSx0YWc6bn09dDtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoVGV4dERhdGEoZSxuKS5waXBlKEZlKCh0PT57dGhpcy5zdG9yZS5kaXNwYXRjaCh5eHQoe3J1bjplLHRhZzpuLHN0ZXBEYXRhOnR9KSl9KSksSXQoKCgpPT57fSkpKX19eHh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHx4eHQpKHZyKFNrKSx2cihJdyksdnIobXh0KSl9LHh4dC7JtXByb3Y9TW4oe3Rva2VuOnh4dCxmYWN0b3J5Onh4dC7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoeHh0LFt7dHlwZTppbX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpTa30se3R5cGU6SXd9LHt0eXBlOm14dH1dfSksbnVsbCk7Y29uc3QgT3h0PXlrKHtydW5Ub1RhZ3M6bmV3IE1hcChbWyJydW4xIixbImEvYiIsImEvYyJdXSxbInJ1bjIiLFsiYS9iIiwiYS9kIl1dLFsicnVuMyIsWyJjIiwiYS9iIl1dXSksZGF0YTpuZXcgTWFwKFtbInJ1bjEiLG5ldyBNYXAoW1siYS9iIixbe29yaWdpbmFsU2hhcGU6WzNdLHN0ZXA6MCxzdHJpbmdBcnJheTpbWyJmb28iLCJiYXIiLCJiYXoiXV0sd2FsbFRpbWVJbk1zOjE1Nzc4NjU2ZTUsdHJ1bmNhdGVkOiExfSx7b3JpZ2luYWxTaGFwZTpbM10sc3RlcDoxLHN0cmluZ0FycmF5OltbImZvbyIsImJheiJdXSx3YWxsVGltZUluTXM6MTU3Nzg2NTYwMWUzLHRydW5jYXRlZDohMX1dXSxbImEvYyIsW3tvcmlnaW5hbFNoYXBlOlszXSxzdGVwOjAsc3RyaW5nQXJyYXk6W1siV2UgY29uZHVjdGVkIGFuIGV4cGVyaW1lbnQgYW5kIGZvdW5kIHRoZSBmb2xsb3dpbmcgZGF0YTpcblxuUG91bmRzIG9mIGNob2NvbGF0ZSB8IEhhcHBpbmVzc1xuLS0tfC0tLVxuMCB8IDFcbjEgfCA0XG4yIHwgOVxuMyB8IDE2XG40IHwgMjVcbjUgfCAzNlxuNiB8IDQ5XG43IHwgNjRcbjggfCA4MVxuOSB8IDEwMFxuMTAgfCAxMjEiXV0sd2FsbFRpbWVJbk1zOjE1Nzc4NjU2ZTUsdHJ1bmNhdGVkOiExfSx7b3JpZ2luYWxTaGFwZTpbM10sc3RlcDoxLHN0cmluZ0FycmF5OltbIsOXIiwiKiowKioiLCIqKjEqKiIsIioqMioqIiwiKiozKioiLCIqKjQqKiIsIioqNSoqIl0sWyIqKjAqKiIsIjAiLCIwIiwiMCIsIjAiLCIwIiwiMCJdLFsiKioxKioiLCIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiXSxbIioqMioqIiwiMCIsIjIiLCI0IiwiNiIsIjgiLCIxMCJdLFsiKiozKioiLCIwIiwiMyIsIjYiLCI5IiwiMTIiLCIxNSJdLFsiKio0KioiLCIwIiwiNCIsIjgiLCIxMiIsIjE2IiwiMjAiXSxbIioqNSoqIiwiMCIsIjUiLCIxMCIsIjE1IiwiMjAiLCIyNSJdXSx3YWxsVGltZUluTXM6MTU3Nzg2NTYwMWUzLHRydW5jYXRlZDohMX1dXV0pXV0pLHZpc2libGVSdW5UYWdzOm5ldyBNYXB9KTtmdW5jdGlvbiBQeHQodCxlKXtyZXR1cm4gT3h0KHQsZSl9Y2xhc3Mgd3h0e313eHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fHd4dCl9LHd4dC7JtW1vZD1hbyh7dHlwZTp3eHR9KSx3eHQuybVpbmo9dm4oe2ltcG9ydHM6W1tXTSxweHQsd3EuZm9yUGx1Z2luKCJ0ZXh0X3YyIixkeHQpLGZ4dCxkay5mb3JGZWF0dXJlKF94dCxQeHQpLFdrLmZvckZlYXR1cmUoW3h4dF0pXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHd4dCxbe3R5cGU6QXksYXJnczpbe2ltcG9ydHM6W1dNLHB4dCx3cS5mb3JQbHVnaW4oInRleHRfdjIiLGR4dCksZnh0LGRrLmZvckZlYXR1cmUoX3h0LFB4dCksV2suZm9yRmVhdHVyZShbeHh0XSldLGVudHJ5Q29tcG9uZW50czpbZHh0XX1dfV0sbnVsbCxudWxsKSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0ppdE1vZGV8fG5nSml0TW9kZSkmJnJvKHd4dCx7aW1wb3J0czpbV00scHh0LHdxLGZ4dCxjayxHa119KTtjbGFzcyBreHR7fXZhciBTeHQ7a3h0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxreHQpfSxreHQuybVtb2Q9YW8oe3R5cGU6a3h0fSksa3h0Lsm1aW5qPXZuKHtpbXBvcnRzOltbS0osSmh0LGN4dCx3eHRdXX0pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoa3h0LFt7dHlwZTpBeSxhcmdzOlt7aW1wb3J0czpbS0osSmh0LGN4dCx3eHRdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8oa3h0LHtpbXBvcnRzOltLSixKaHQsY3h0LHd4dF19KSwoZnVuY3Rpb24odCl7dC5DVVNUT01fRUxFTUVOVD0iQ1VTVE9NX0VMRU1FTlQiLHQuSUZSQU1FPSJJRlJBTUUiLHQuTkdfQ09NUE9ORU5UPSJOR19DT01QT05FTlQiLHQuTk9ORT0iTk9ORSJ9KShTeHR8fChTeHQ9e30pKTtjb25zdCBEeHQ9WyJwbHVnaW5Db250YWluZXIiXSxFeHQ9WyJuZ1BsdWdpbkNvbnRhaW5lciJdO2Z1bmN0aW9uIFJ4dCh0LGUpezEmdCYmSW0oMCl9ZnVuY3Rpb24gQXh0KHQsZSl7aWYoMSZ0JiYoTm0oMCksUXAoMSxSeHQsMSwwLCJuZy1jb250YWluZXIiLDkpLHptKCkpLDImdCl7Y29uc3QgdD1ZbSgyKSxlPSRwKDYpO3JjKDEpLERtKCJuZ1RlbXBsYXRlT3V0bGV0Iix0LmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU/dC5lbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOmUpfX1mdW5jdGlvbiBUeHQodCxlKXsxJnQmJkltKDApfWZ1bmN0aW9uIE54dCh0LGUpe2lmKDEmdCYmKE5tKDApLFFwKDEsVHh0LDEsMCwibmctY29udGFpbmVyIiw5KSx6bSgpKSwyJnQpe2NvbnN0IHQ9WW0oMiksZT0kcCg2KTtyYygxKSxEbSgibmdUZW1wbGF0ZU91dGxldCIsdC5lbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGU/dC5lbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGU6ZSl9fWZ1bmN0aW9uIHp4dCh0LGUpe2lmKDEmdCYmKE5tKDApLFJtKDEsImgzIiwxMCksa3UoMiwiIFRoZXJl4oCZcyBubyBkYXNoYm9hcmQgYnkgdGhlIG5hbWUgb2Yg4oCcIiksUm0oMywiY29kZSIpLGt1KDQpLEFtKCksa3UoNSwi4oCdLiAiKSxBbSgpLFJtKDYsInAiKSxrdSg3LCJZb3UgY2FuIHNlbGVjdCBhIGRhc2hib2FyZCBmcm9tIHRoZSBsaXN0IGFib3ZlLiIpLEFtKCksUm0oOCwicCIpLEltKDksMTEpLEFtKCksem0oKSksMiZ0KXtjb25zdCB0PVltKDIpLGU9JHAoOCk7cmMoNCksU3UodC5hY3RpdmVQbHVnaW5JZCkscmMoNSksRG0oIm5nVGVtcGxhdGVPdXRsZXQiLGUpfX1mdW5jdGlvbiBJeHQodCxlKXtpZigxJnQmJihObSgwKSxSbSgxLCJoMyIsMTIpLGt1KDIsIiBObyBkYXNoYm9hcmRzIGFyZSBhY3RpdmUgZm9yIHRoZSBjdXJyZW50IGRhdGEgc2V0LiAiKSxBbSgpLFJtKDMsInAiKSxrdSg0LCJQcm9iYWJsZSBjYXVzZXM6IiksQW0oKSxSbSg1LCJ1bCIpLFJtKDYsImxpIiksa3UoNywiWW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuIiksQW0oKSxSbSg4LCJsaSIpLGt1KDksIlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLiIpLEFtKCksQW0oKSxrdSgxMCwiIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZSAiKSxSbSgxMSwiYSIsMTMpLGt1KDEyLCJSRUFETUUiKSxBbSgpLGt1KDEzLCIgYW5kIHBlcmhhcHMgdGhlICIpLFJtKDE0LCJhIiwxNCksa3UoMTUsIlRlbnNvckJvYXJkIHR1dG9yaWFsIiksQW0oKSxrdSgxNiwiLiAiKSxSbSgxNywicCIpLGt1KDE4LCIgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUgIiksUm0oMTksImEiLDE1KSxrdSgyMCwidGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtcyIpLEFtKCksa3UoMjEsIiBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4gIiksQW0oKSxSbSgyMiwicCIpLEltKDIzLDExKSxBbSgpLHptKCkpLDImdCl7WW0oMik7Y29uc3QgdD0kcCg4KTtyYygyMyksRG0oIm5nVGVtcGxhdGVPdXRsZXQiLHQpfX1mdW5jdGlvbiBIeHQodCxlKXtpZigxJnQmJihSbSgwLCJkaXYiLDYpLFJtKDEsImRpdiIsNyksUXAoMixBeHQsMiwxLCJuZy1jb250YWluZXIiLDgpLFFwKDMsTnh0LDIsMSwibmctY29udGFpbmVyIiw4KSxRcCg0LHp4dCwxMCwyLCJuZy1jb250YWluZXIiLDgpLFFwKDUsSXh0LDI0LDEsIm5nLWNvbnRhaW5lciIsOCksQW0oKSxBbSgpKSwyJnQpe2NvbnN0IHQ9WW0oKTtEbSgibmdTd2l0Y2giLHQucGx1Z2luTG9hZFN0YXRlKSxyYygyKSxEbSgibmdTd2l0Y2hDYXNlIix0LlBsdWdpbkxvYWRTdGF0ZS5FTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORCkscmMoMSksRG0oIm5nU3dpdGNoQ2FzZSIsdC5QbHVnaW5Mb2FkU3RhdGUuRU5WSVJPTk1FTlRfRkFJTFVSRV9VTktOT1dOKSxyYygxKSxEbSgibmdTd2l0Y2hDYXNlIix0LlBsdWdpbkxvYWRTdGF0ZS5VTktOT1dOX1BMVUdJTl9JRCkscmMoMSksRG0oIm5nU3dpdGNoQ2FzZSIsdC5QbHVnaW5Mb2FkU3RhdGUuTk9fRU5BQkxFRF9QTFVHSU5TKX19ZnVuY3Rpb24gRnh0KHQsZSl7aWYoMSZ0JiYoUm0oMCwiaDMiLDE2KSxrdSgxLCJEYXRhIGNvdWxkIG5vdCBiZSBsb2FkZWQuIiksQW0oKSxSbSgyLCJwIiksa3UoMywiVGhlIFRlbnNvckJvYXJkIHNlcnZlciBtYXkgYmUgZG93biBvciBpbmFjY2Vzc2libGUuIiksQW0oKSxSbSg0LCJwIiksSW0oNSwxMSksQW0oKSksMiZ0KXtZbSgpO2NvbnN0IHQ9JHAoOCk7cmMoNSksRG0oIm5nVGVtcGxhdGVPdXRsZXQiLHQpfX1mdW5jdGlvbiBMeHQodCxlKXtpZigxJnQmJihSbSgwLCJwIiwxOSksUm0oMSwiaSIpLGt1KDIsIkxvZyBkaXJlY3Rvcnk6ICIpLFJtKDMsInNwYW4iKSxrdSg0KSxBbSgpLEFtKCksQW0oKSksMiZ0KXtjb25zdCB0PVltKDIpO3JjKDQpLFN1KHQuZGF0YUxvY2F0aW9uKX19ZnVuY3Rpb24gQnh0KHQsZSl7aWYoMSZ0JiYoUm0oMCwic3BhbiIsMTcpLGt1KDEpLEFoKDIsImRhdGUiKSxBbSgpLFFwKDMsTHh0LDUsMSwicCIsMTgpKSwyJnQpe2NvbnN0IHQ9WW0oKTtyYygxKSxEdSgiTGFzdCByZWxvYWQ6ICIsTmgoMiwyLHQubGFzdFVwZGF0ZWQsIm1lZGl1bSIpLCIiKSxyYygyKSxEbSgibmdJZiIsdC5kYXRhTG9jYXRpb24pfX1jb25zdCBWeHQ9ZnVuY3Rpb24odCl7cmV0dXJue3BsdWdpbnM6ITAsImlzLWZpcnN0LXBhcnR5LXBsdWdpbiI6dH19O3ZhciBqeHQ7IShmdW5jdGlvbih0KXt0W3QuRU5WSVJPTk1FTlRfRkFJTFVSRV9OT1RfRk9VTkQ9MF09IkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EIix0W3QuRU5WSVJPTk1FTlRfRkFJTFVSRV9VTktOT1dOPTFdPSJFTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV04iLHRbdC5OT19FTkFCTEVEX1BMVUdJTlM9Ml09Ik5PX0VOQUJMRURfUExVR0lOUyIsdFt0LlVOS05PV05fUExVR0lOX0lEPTNdPSJVTktOT1dOX1BMVUdJTl9JRCIsdFt0LkxPQURFRD00XT0iTE9BREVEIix0W3QuTE9BRElORz01XT0iTE9BRElORyJ9KShqeHR8fChqeHQ9e30pKTtjbGFzcyBVeHR7Y29uc3RydWN0b3IodCxlLG4pe3RoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPXQsdGhpcy5wbHVnaW5SZWdpc3RyeT1lLHRoaXMucGx1Z2luQXBpSG9zdD1uLHRoaXMuUGx1Z2luTG9hZFN0YXRlPWp4dCx0aGlzLkxvYWRpbmdNZWNoYW5pc21UeXBlPVN4dCx0aGlzLnBsdWdpbkluc3RhbmNlcz1uZXcgTWFwfW5nT25DaGFuZ2VzKHQpe3ZhciBlO2lmKCF0aGlzLmlzRmVhdHVyZUZsYWdzTG9hZGVkfHwhdGhpcy5hY3RpdmVLbm93blBsdWdpbnx8dGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PXlFLk5PVF9MT0FERUR8fHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT15RS5MT0FESU5HKXJldHVybjtjb25zdCBuPUJvb2xlYW4odGhpcy5hY3RpdmVLbm93blBsdWdpbiYmIXRoaXMucGx1Z2luSW5zdGFuY2VzLmhhcyh0aGlzLmFjdGl2ZUtub3duUGx1Z2luLmlkKSk7aWYodC5hY3RpdmVLbm93blBsdWdpbnx8dC5pc0ZlYXR1cmVGbGFnc0xvYWRlZHx8dC5zZXR0aW5nc0xvYWRTdGF0ZSl7Y29uc3Qgbz1udWxsPT09KGU9dC5hY3RpdmVLbm93blBsdWdpbil8fHZvaWQgMD09PWU/dm9pZCAwOmUucHJldmlvdXNWYWx1ZTtpZihvJiZvLmlkIT09dGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCYmdGhpcy5oaWRlUGx1Z2luKG8pLG4pe2NvbnN0IHQ9dGhpcy5jcmVhdGVQbHVnaW4odGhpcy5hY3RpdmVLbm93blBsdWdpbik7dCYmdGhpcy5wbHVnaW5JbnN0YW5jZXMuc2V0KHRoaXMuYWN0aXZlS25vd25QbHVnaW4uaWQsdCl9ZWxzZSB0aGlzLnNob3dQbHVnaW4odGhpcy5hY3RpdmVLbm93blBsdWdpbil9KG58fHQubGFzdFVwZGF0ZWQpJiZ0aGlzLnJlbG9hZCh0aGlzLmFjdGl2ZUtub3duUGx1Z2luLG4pfWhpZGVQbHVnaW4odCl7aWYoIXRoaXMucGx1Z2luSW5zdGFuY2VzLmhhcyh0LmlkKSlyZXR1cm47Y29uc3QgZT10aGlzLnBsdWdpbkluc3RhbmNlcy5nZXQodC5pZCk7T2JqZWN0LmFzc2lnbihlLnN0eWxlLHttYXhIZWlnaHQ6MCxvdmVyZmxvdzoiaGlkZGVuIix2aXNpYmlsaXR5OiJoaWRkZW4iLHBvc2l0aW9uOiJhYnNvbHV0ZSJ9KX1zaG93UGx1Z2luKHQpe2lmKCF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXModC5pZCkpcmV0dXJuO2NvbnN0IGU9dGhpcy5wbHVnaW5JbnN0YW5jZXMuZ2V0KHQuaWQpO09iamVjdC5hc3NpZ24oZS5zdHlsZSx7bWF4SGVpZ2h0Om51bGwsb3ZlcmZsb3c6bnVsbCx2aXNpYmlsaXR5Om51bGwscG9zaXRpb246bnVsbH0pfWNyZWF0ZVBsdWdpbih0KXtsZXQgZT1udWxsO3N3aXRjaCh0LmxvYWRpbmdfbWVjaGFuaXNtLnR5cGUpe2Nhc2UgU3h0LkNVU1RPTV9FTEVNRU5UOmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0LmxvYWRpbmdfbWVjaGFuaXNtLmVsZW1lbnRfbmFtZSksZS5yZWxvYWRPblJlYWR5PSExLGUuZmVhdHVyZUZsYWdzPXRoaXMuZmVhdHVyZUZsYWdzLHRoaXMucGx1Z2luc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGUpO2JyZWFrO2Nhc2UgU3h0LklGUkFNRTppZighdGhpcy5wbHVnaW5BcGlIb3N0KXRocm93IEVycm9yKGBJRlJBTUUtYmFzZWQgcGx1Z2lucyBub3Qgc3VwcG9ydGVkOiAke3QuaWR9YCk7ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSxlLnNldEF0dHJpYnV0ZSgic3JjIixgZGF0YS9wbHVnaW5fZW50cnkuaHRtbD9uYW1lPSR7dC5pZH1gKSx0aGlzLnBsdWdpbkFwaUhvc3QucmVnaXN0ZXJQbHVnaW5JZnJhbWUoZSx0LmlkKSx0aGlzLnBsdWdpbnNDb250YWluZXIubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChlKTticmVhaztjYXNlIFN4dC5OR19DT01QT05FTlQ6Y29uc3Qgbj10aGlzLnBsdWdpblJlZ2lzdHJ5LmdldENvbXBvbmVudCh0LmlkKTtpZihuKXtjb25zdCB0PXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KG4pO2U9dGhpcy5uZ1BsdWdpbkNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQodCkubG9jYXRpb24ubmF0aXZlRWxlbWVudH1lbHNlIGNvbnNvbGUuZXJyb3IoYE5vIHJlZ2lzdGVyZWQgQW5ndWxhciBjb21wb25lbnQgZm9yIHBsdWdpbjogJHt0LmlkfWApO2JyZWFrO2Nhc2UgU3h0Lk5PTkU6YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJVbmV4cGVjdGVkIHBsdWdpbiIpfXJldHVybiBlfXJlbG9hZCh0LGUpe2lmKCFlJiZ0LmRpc2FibGVfcmVsb2FkKXJldHVybjtjb25zdCBuPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldCh0LmlkKTtuJiZuLnJlbG9hZCYmbi5yZWxvYWQoKX19VXh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxVeHQpKFNtKHVnKSxTbSh3cSksU20oc3osOCkpfSxVeHQuybVjbXA9dG8oe3R5cGU6VXh0LHNlbGVjdG9yczpbWyJwbHVnaW5zLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24gdChlLG4pe2lmKDEmZSYmKFFoKER4dCw3LGhnKSxRaChFeHQsNyxlaCkpLDImZSl7bGV0IHQ7SmgodD10YigpKSYmKG4ucGx1Z2luc0NvbnRhaW5lcj10LmZpcnN0KSxKaCh0PXRiKCkpJiYobi5uZ1BsdWdpbkNvbnRhaW5lcj10LmZpcnN0KX19LGlucHV0czp7YWN0aXZlUGx1Z2luSWQ6ImFjdGl2ZVBsdWdpbklkIixhY3RpdmVLbm93blBsdWdpbjoiYWN0aXZlS25vd25QbHVnaW4iLHBsdWdpbkxvYWRTdGF0ZToicGx1Z2luTG9hZFN0YXRlIixkYXRhTG9jYXRpb246ImRhdGFMb2NhdGlvbiIsaXNGZWF0dXJlRmxhZ3NMb2FkZWQ6ImlzRmVhdHVyZUZsYWdzTG9hZGVkIixzZXR0aW5nc0xvYWRTdGF0ZToic2V0dGluZ3NMb2FkU3RhdGUiLGZlYXR1cmVGbGFnczoiZmVhdHVyZUZsYWdzIixsYXN0VXBkYXRlZDoibGFzdFVwZGF0ZWQiLGVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUiLGVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlIn0sZmVhdHVyZXM6W0JvXSxkZWNsczo5LHZhcnM6NCxjb25zdHM6W1szLCJuZ0NsYXNzIl0sWyJwbHVnaW5Db250YWluZXIiLCIiXSxbIm5nUGx1Z2luQ29udGFpbmVyIiwiIl0sWyJjbGFzcyIsIndhcm5pbmciLDMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWyJlbnZpcm9ubWVudEZhaWx1cmVEZWZhdWx0VGVtcGxhdGUiLCIiXSxbImRhdGVBbmREYXRhTG9jYXRpb24iLCIiXSxbMSwid2FybmluZyIsMywibmdTd2l0Y2giXSxbMSwid2FybmluZy1tZXNzYWdlIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsInVua25vd24tcGx1Z2luIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwibm8tYWN0aXZlLXBsdWdpbiJdLFsiaHJlZiIsImh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCJdLFsiaHJlZiIsImh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiXSxbImhyZWYiLCJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIl0sWzEsImVudmlyb25tZW50LW5vdC1sb2FkZWQiXSxbMSwibGFzdC1yZWxvYWQtdGltZSJdLFsiY2xhc3MiLCJkYXRhLWxvY2F0aW9uIiw0LCJuZ0lmIl0sWzEsImRhdGEtbG9jYXRpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pezEmZSYmKFJtKDAsImRpdiIsMCwxKSxJbSgyLG51bGwsMiksQW0oKSxRcCg0LEh4dCw2LDUsImRpdiIsMyksUXAoNSxGeHQsNiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCw0LGliKSxRcCg3LEJ4dCw0LDUsIm5nLXRlbXBsYXRlIixudWxsLDUsaWIpKSwyJmUmJihEbSgibmdDbGFzcyIsTWgoMixWeHQsKG51bGw9PW4uYWN0aXZlS25vd25QbHVnaW4/bnVsbDpuLmFjdGl2ZUtub3duUGx1Z2luLmxvYWRpbmdfbWVjaGFuaXNtLnR5cGUpIT09bi5Mb2FkaW5nTWVjaGFuaXNtVHlwZS5JRlJBTUUpKSxyYyg0KSxEbSgibmdJZiIsbi5wbHVnaW5Mb2FkU3RhdGUhPT1uLlBsdWdpbkxvYWRTdGF0ZS5MT0FERUQmJm4ucGx1Z2luTG9hZFN0YXRlIT09bi5QbHVnaW5Mb2FkU3RhdGUuTE9BRElORykpfSxkaXJlY3RpdmVzOlthTSxkTSxmTSxnTSxNTV0scGlwZXM6W1JNXSxzdHlsZXM6WycubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWJhZGdlLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWhlYWRsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgxW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1zdWJoZWFkaW5nLTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC10eXBvZ3JhcGh5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmdbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWJvZHktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ib2R5LTFbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtY2FwdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktM1tfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdHlwb2dyYXBoeVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWRpc3BsYXktMltfbmdjb250ZW50LSVDT01QJV17Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXR5cG9ncmFwaHlbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1kaXNwbGF5LTFbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1yYWlzZWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1pY29uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZsYXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mYWJbX25nY29udGVudC0lQ09NUCVdLCAubWF0LW1pbmktZmFiW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGVbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hlY2tib3gtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jaGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb290ZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1zdWZmaXhbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtc3VmZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3VzICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWluZml4W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaW5wdXQtc2VydmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cyArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxsICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3lbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2xbX25nY29udGVudC0lQ09NUCVdOi13ZWJraXQtYXV0b2ZpbGwgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXRbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhYmVsLXNob3duKSArIC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtZm9ybS1maWVsZC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMmVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGxbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtaW5maXhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMgKyAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWZvcm0tZmllbGQtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdFtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWlucHV0LXNlcnZlcltsYWJlbF1bX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFiZWwtc2hvd24pICsgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1mb3JtLWZpZWxkLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1hdC1ncmlkLXRpbGUtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZChuKzIpLCAubWF0LWdyaWQtdGlsZS1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXBhZ2luYXRvci1wYWdlLXNpemVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zZWxlY3QtdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAubWF0LXRhYi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBoNltfbmdjb250ZW50LSVDT01QJV17Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3Qtb3B0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGluZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LXN1YmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWxpbmVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saXN0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtbGlzdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV1bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1zdWJoZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYXQtbmVzdGVkLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1yaXBwbGUtZWxlbWVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BbX25nY29udGVudC0lQ09NUCVdLCAuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZVtfbmdjb250ZW50LSVDT01QJV17cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5ke30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkW19uZ2NvbnRlbnQtJUNPTVAlXTotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZFtfbmdjb250ZW50LSVDT01QJV06bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX1bX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmV9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnBsdWdpbnMuaXMtZmlyc3QtcGFydHktcGx1Z2luW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzA7Y29sb3I6I2ZmZn0ucGx1Z2luc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmV9Lndhcm5pbmdbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2ZmZjtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMzMDMwMzB9Lndhcm5pbmctbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzIxMjEyMTttYXJnaW46ODBweCBhdXRvIDA7bWF4LXdpZHRoOjU0MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC53YXJuaW5nLW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAud2FybmluZy1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfS5sYXN0LXJlbG9hZC10aW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXN0eWxlOml0YWxpY30ucGx1Z2luc1tfbmdjb250ZW50LSVDT01QJV0gICAgIGlmcmFtZXtib3JkZXI6MDtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFV4dCxbe3R5cGU6TXksYXJnczpbe3NlbGVjdG9yOiJwbHVnaW5zLWNvbXBvbmVudCIsdGVtcGxhdGVVcmw6Ii4vcGx1Z2luc19jb21wb25lbnQubmcuaHRtbCIsc3R5bGVVcmxzOlsicGx1Z2luc19jb21wb25lbnQuY3NzIl0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnVnfSx7dHlwZTp3cX0se3R5cGU6c3osZGVjb3JhdG9yczpbe3R5cGU6U3J9XX1dfSkse3BsdWdpbnNDb250YWluZXI6W3t0eXBlOlphLGFyZ3M6WyJwbHVnaW5Db250YWluZXIiLHtzdGF0aWM6ITAscmVhZDpoZ31dfV0sbmdQbHVnaW5Db250YWluZXI6W3t0eXBlOlphLGFyZ3M6WyJuZ1BsdWdpbkNvbnRhaW5lciIse3N0YXRpYzohMCxyZWFkOmVofV19XSxhY3RpdmVQbHVnaW5JZDpbe3R5cGU6eHl9XSxhY3RpdmVLbm93blBsdWdpbjpbe3R5cGU6eHl9XSxwbHVnaW5Mb2FkU3RhdGU6W3t0eXBlOnh5fV0sZGF0YUxvY2F0aW9uOlt7dHlwZTp4eX1dLGlzRmVhdHVyZUZsYWdzTG9hZGVkOlt7dHlwZTp4eX1dLHNldHRpbmdzTG9hZFN0YXRlOlt7dHlwZTp4eX1dLGZlYXR1cmVGbGFnczpbe3R5cGU6eHl9XSxsYXN0VXBkYXRlZDpbe3R5cGU6eHl9XSxlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOlt7dHlwZTp4eX1dLGVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZTpbe3R5cGU6eHl9XX0pO2NvbnN0IEd4dD1adyh2UixNUiwoKHQsZSk9PmUmJnRbZV0/T2JqZWN0LmFzc2lnbih7aWQ6ZX0sdFtlXSk6bnVsbCkpO2NsYXNzIFd4dHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0b3JlPXQsdGhpcy5hY3RpdmVLbm93blBsdWdpbiQ9dGhpcy5zdG9yZS5zZWxlY3QoR3h0KSx0aGlzLmFjdGl2ZVBsdWdpbklkJD10aGlzLnN0b3JlLnNlbGVjdChNUiksdGhpcy5wbHVnaW5Mb2FkU3RhdGUkPVd0KHRoaXMuYWN0aXZlS25vd25QbHVnaW4kLHRoaXMuYWN0aXZlUGx1Z2luSWQkLHRoaXMuc3RvcmUuc2VsZWN0KGJSKSkucGlwZShJdCgoKFt0LGUsbl0pPT5udWxsIT09bi5mYWlsdXJlQ29kZT9uLmZhaWx1cmVDb2RlPT09bUUuTk9UX0ZPVU5EP2p4dC5FTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORDpqeHQuRU5WSVJPTk1FTlRfRkFJTFVSRV9VTktOT1dOOm51bGwhPT10P2p4dC5MT0FERUQ6bnVsbD09PW4ubGFzdExvYWRlZFRpbWVJbk1zJiZuLnN0YXRlPT09eUUuTE9BRElORz9qeHQuTE9BRElORzplP2p4dC5VTktOT1dOX1BMVUdJTl9JRDpqeHQuTk9fRU5BQkxFRF9QTFVHSU5TKSkpLHRoaXMubGFzdExvYWRlZFRpbWVJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChDUiksdGhpcy5kYXRhTG9jYXRpb24kPXRoaXMuc3RvcmUuc2VsZWN0KHhSKS5waXBlKEl0KCh0PT50LmRhdGFfbG9jYXRpb24pKSksdGhpcy5pc0ZlYXR1cmVGbGFnc0xvYWRlZCQ9dGhpcy5zdG9yZS5zZWxlY3QocUQpLHRoaXMuZmVhdHVyZUZsYWdzJD10aGlzLnN0b3JlLnNlbGVjdChaRCksdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoU04pfX1XeHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFd4dCkoU20oSXcpKX0sV3h0Lsm1Y21wPXRvKHt0eXBlOld4dCxzZWxlY3RvcnM6W1sicGx1Z2lucyJdXSxpbnB1dHM6e2Vudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUiLGVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlIn0sZGVjbHM6OSx2YXJzOjI2LGNvbnN0czpbWzMsImFjdGl2ZUtub3duUGx1Z2luIiwiYWN0aXZlUGx1Z2luSWQiLCJkYXRhTG9jYXRpb24iLCJsYXN0VXBkYXRlZCIsInBsdWdpbkxvYWRTdGF0ZSIsImlzRmVhdHVyZUZsYWdzTG9hZGVkIiwic2V0dGluZ3NMb2FkU3RhdGUiLCJmZWF0dXJlRmxhZ3MiLCJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIiwiZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihUbSgwLCJwbHVnaW5zLWNvbXBvbmVudCIsMCksQWgoMSwiYXN5bmMiKSxBaCgyLCJhc3luYyIpLEFoKDMsImFzeW5jIiksQWgoNCwiYXN5bmMiKSxBaCg1LCJhc3luYyIpLEFoKDYsImFzeW5jIiksQWgoNywiYXN5bmMiKSxBaCg4LCJhc3luYyIpKSwyJmUmJkRtKCJhY3RpdmVLbm93blBsdWdpbiIsVGgoMSwxMCxuLmFjdGl2ZUtub3duUGx1Z2luJCkpKCJhY3RpdmVQbHVnaW5JZCIsVGgoMiwxMixuLmFjdGl2ZVBsdWdpbklkJCkpKCJkYXRhTG9jYXRpb24iLFRoKDMsMTQsbi5kYXRhTG9jYXRpb24kKSkoImxhc3RVcGRhdGVkIixUaCg0LDE2LG4ubGFzdExvYWRlZFRpbWVJbk1zJCkpKCJwbHVnaW5Mb2FkU3RhdGUiLFRoKDUsMTgsbi5wbHVnaW5Mb2FkU3RhdGUkKSkoImlzRmVhdHVyZUZsYWdzTG9hZGVkIixUaCg2LDIwLG4uaXNGZWF0dXJlRmxhZ3NMb2FkZWQkKSkoInNldHRpbmdzTG9hZFN0YXRlIixUaCg3LDIyLG4uc2V0dGluZ3NMb2FkU3RhdGUkKSkoImZlYXR1cmVGbGFncyIsVGgoOCwyNCxuLmZlYXR1cmVGbGFncyQpKSgiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsbi5lbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlKSgiZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlIixuLmVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSl9LHN0eWxlczpbInBsdWdpbnMtY29tcG9uZW50W19uZ2NvbnRlbnQtJUNPTVAlXSB7IGhlaWdodDogMTAwJTsgfSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChXeHQsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoicGx1Z2lucyIsdGVtcGxhdGU6J1xuICAgIDxwbHVnaW5zLWNvbXBvbmVudFxuICAgICAgW2FjdGl2ZUtub3duUGx1Z2luXT0iYWN0aXZlS25vd25QbHVnaW4kIHwgYXN5bmMiXG4gICAgICBbYWN0aXZlUGx1Z2luSWRdPSJhY3RpdmVQbHVnaW5JZCQgfCBhc3luYyJcbiAgICAgIFtkYXRhTG9jYXRpb25dPSJkYXRhTG9jYXRpb24kIHwgYXN5bmMiXG4gICAgICBbbGFzdFVwZGF0ZWRdPSJsYXN0TG9hZGVkVGltZUluTXMkIHwgYXN5bmMiXG4gICAgICBbcGx1Z2luTG9hZFN0YXRlXT0icGx1Z2luTG9hZFN0YXRlJCB8IGFzeW5jIlxuICAgICAgW2lzRmVhdHVyZUZsYWdzTG9hZGVkXT0iaXNGZWF0dXJlRmxhZ3NMb2FkZWQkIHwgYXN5bmMiXG4gICAgICBbc2V0dGluZ3NMb2FkU3RhdGVdPSJzZXR0aW5nc0xvYWRTdGF0ZSQgfCBhc3luYyJcbiAgICAgIFtmZWF0dXJlRmxhZ3NdPSJmZWF0dXJlRmxhZ3MkIHwgYXN5bmMiXG4gICAgICBbZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZV09ImVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUiXG4gICAgICBbZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlXT0iZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlIlxuICAgID48L3BsdWdpbnMtY29tcG9uZW50PlxuICAnLHN0eWxlczpbInBsdWdpbnMtY29tcG9uZW50IHsgaGVpZ2h0OiAxMDAlOyB9Il0sY2hhbmdlRGV0ZWN0aW9uOnpuLk9uUHVzaH1dfV0sKGZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOkl3fV19KSx7ZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZTpbe3R5cGU6eHl9XSxlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGU6W3t0eXBlOnh5fV19KTtjbGFzcyBZeHR7fVl4dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8WXh0KX0sWXh0Lsm1bW9kPWFvKHt0eXBlOll4dH0pLFl4dC7JtWluaj12bih7aW1wb3J0czpbW0VSLFdNLHdxXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKFl4dCxbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbV3h0LFV4dF0sZXhwb3J0czpbV3h0XSxpbXBvcnRzOltFUixXTSx3cV19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhZeHQse2RlY2xhcmF0aW9uczpbV3h0LFV4dF0saW1wb3J0czpbRVIsV00sd3FdLGV4cG9ydHM6W1d4dF19KSxlbyhXeHQsW1V4dF0sW3dNXSk7Y2xhc3MgcXh0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zdG9yZT10LHRoaXMuZG9jdW1lbnQ9ZSx0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZT10aGlzLm9uVmlzaWJpbGl0eUNoYW5nZUltcGwuYmluZCh0aGlzKSx0aGlzLnJlbG9hZEVuYWJsZWQkPXRoaXMuc3RvcmUucGlwZShGdyhETikpLHRoaXMucmVsb2FkUGVyaW9kSW5NcyQ9dGhpcy5zdG9yZS5waXBlKEZ3KEVOKSksdGhpcy5yZWxvYWRUaW1lcklkPW51bGwsdGhpcy5taXNzZWRBdXRvUmVsb2FkPSExfW5nT25Jbml0KCl7dGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZSksV3QodGhpcy5yZWxvYWRFbmFibGVkJC5waXBlKE1lKCkpLHRoaXMucmVsb2FkUGVyaW9kSW5NcyQucGlwZShNZSgpKSkuc3Vic2NyaWJlKCgoW3QsZV0pPT57dGhpcy5jYW5jZWxMb2FkKCksdCYmdGhpcy5sb2FkKGUpfSkpfW9uVmlzaWJpbGl0eUNoYW5nZUltcGwoKXsidmlzaWJsZSI9PT10aGlzLmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSYmdGhpcy5taXNzZWRBdXRvUmVsb2FkJiYodGhpcy5taXNzZWRBdXRvUmVsb2FkPSExLHRoaXMuc3RvcmUuZGlzcGF0Y2goeEUoKSkpfWxvYWQodCl7dGhpcy5yZWxvYWRUaW1lcklkPXNldFRpbWVvdXQoKCgpPT57InZpc2libGUiPT09dGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGU/dGhpcy5zdG9yZS5kaXNwYXRjaCh4RSgpKTp0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITAsdGhpcy5sb2FkKHQpfSksdCl9Y2FuY2VsTG9hZCgpe251bGwhPT10aGlzLnJlbG9hZFRpbWVySWQmJmNsZWFyVGltZW91dCh0aGlzLnJlbG9hZFRpbWVySWQpLHRoaXMucmVsb2FkVGltZXJJZD1udWxsfW5nT25EZXN0cm95KCl7dGhpcy5jYW5jZWxMb2FkKCksdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZSl9fXF4dC7JtWZhYz1mdW5jdGlvbiB0KGUpe3JldHVybiBuZXcoZXx8cXh0KShTbShJdyksU20oWl8pKX0scXh0Lsm1Y21wPXRvKHt0eXBlOnF4dCxzZWxlY3RvcnM6W1sicmVsb2FkZXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24gdChlLG4pe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChxeHQsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoicmVsb2FkZXIiLHRlbXBsYXRlOiIiLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLChmdW5jdGlvbigpe3JldHVyblt7dHlwZTpJd30se3R5cGU6RG9jdW1lbnQsZGVjb3JhdG9yczpbe3R5cGU6a3IsYXJnczpbWl9dfV19XX0pLG51bGwpO2NsYXNzIFp4dHt9Wnh0Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxaeHQpfSxaeHQuybVjbXA9dG8oe3R5cGU6Wnh0LHNlbGVjdG9yczpbWyJ0ZW5zb3Jib2FyZC13cmFwcGVyLWNvbXBvbmVudCJdXSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sxLCJwbHVnaW5zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uIHQoZSxuKXsxJmUmJihUbSgwLCJwbHVnaW5zIiwwKSxUbSgxLCJyZWxvYWRlciIpKX0sZGlyZWN0aXZlczpbV3h0LHF4dF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZmxleDogMSAxO1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChaeHQsW3t0eXBlOk15LGFyZ3M6W3tzZWxlY3RvcjoidGVuc29yYm9hcmQtd3JhcHBlci1jb21wb25lbnQiLHRlbXBsYXRlOidcbiAgICA8cGx1Z2lucyBjbGFzcz0icGx1Z2lucyI+PC9wbHVnaW5zPlxuICAgIDxyZWxvYWRlcj48L3JlbG9hZGVyPlxuICAnLHN0eWxlczpbIlxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIC5wbHVnaW5zIHtcbiAgICAgICAgZmxleDogMSAxO1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuICAgICJdLGNoYW5nZURldGVjdGlvbjp6bi5PblB1c2h9XX1dLG51bGwsbnVsbCk7Y2xhc3MgWHh0e31YeHQuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fFh4dCl9LFh4dC7JtXByb3Y9TW4oe3Rva2VuOlh4dCxmYWN0b3J5Olh4dC7JtWZhY30pLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZXx8bmdEZXZNb2RlKSYmaGgoWHh0LFt7dHlwZTppbX1dLG51bGwsbnVsbCk7Y29uc3QgS3h0PSJzbW9vdGhpbmciLEp4dD0icnVuQ29sb3JHcm91cCIsUXh0PSJ0YWdGaWx0ZXIiLCR4dD0icmVnZXg6IjtsZXQgdE90PWNsYXNzIGV4dGVuZHMgWHh0e2dldE1ldHJpY3NQaW5uZWRDYXJkcyh0KXtyZXR1cm4gV3QoW3Quc2VsZWN0KFBUKSx0LnNlbGVjdChrVCldKS5waXBlKEl0KCgoW3QsZV0pPT57aWYoIXQubGVuZ3RoJiYhZS5sZW5ndGgpcmV0dXJuW107Y29uc3Qgbj1bLi4udC5tYXAoKCh7cGx1Z2luOnQsdGFnOmUsc2FtcGxlOm4scnVuSWQ6b30pPT57Y29uc3QgaT17cGx1Z2luOnQsdGFnOmV9O3JldHVybiB4QSh0KSYmKGkucnVuSWQ9byksTUEodCkmJihpLnNhbXBsZT1uKSxpfSkpLC4uLmVdO3JldHVyblt7a2V5OiJwaW5uZWRDYXJkcyIsdmFsdWU6SlNPTi5zdHJpbmdpZnkobil9XX0pKSl9Z2V0RmVhdHVyZUZsYWdTdGF0ZXModCl7cmV0dXJuIFd0KFt0LnNlbGVjdCgkRCksdC5zZWxlY3QoWEQpXSkucGlwZShJdCgoKFt0LGVdKT0+e2NvbnN0IG49dC5tYXAoKHQ9Pih7a2V5Ok5BLHZhbHVlOnR9KSkpO3JldHVybiJib29sZWFuIj09dHlwZW9mIGUuZW5hYmxlZENvbG9yR3JvdXAmJm4ucHVzaCh7a2V5OklBLHZhbHVlOlN0cmluZyhlLmVuYWJsZWRDb2xvckdyb3VwKX0pLCJib29sZWFuIj09dHlwZW9mIGUuZW5hYmxlZENvbG9yR3JvdXBCeVJlZ2V4JiZuLnB1c2goe2tleTpIQSx2YWx1ZTpTdHJpbmcoZS5lbmFibGVkQ29sb3JHcm91cEJ5UmVnZXgpfSksbn0pKSl9c2VyaWFsaXplU3RhdGVUb1F1ZXJ5UGFyYW1zKHQpe3JldHVybiBXdChbdGhpcy5nZXRNZXRyaWNzUGlubmVkQ2FyZHModCksdC5zZWxlY3QoQlQpLnBpcGUoSXQoKHQ9PnQ/W3trZXk6UXh0LHZhbHVlOnR9XTpbXSkpKSx0aGlzLmdldEZlYXR1cmVGbGFnU3RhdGVzKHQpLHQuc2VsZWN0KEVUKS5waXBlKEl0KCh0PT5OdW1iZXIuaXNGaW5pdGUodC5zY2FsYXJTbW9vdGhpbmcpP1t7a2V5Okt4dCx2YWx1ZTpTdHJpbmcodC5zY2FsYXJTbW9vdGhpbmcpfV06W10pKSksdC5zZWxlY3QodU4pLnBpcGUoSXQoKHQ9PntpZighdClyZXR1cm5bXTtsZXQgZTtzd2l0Y2godC5rZXkpe2Nhc2UgdE4uRVhQRVJJTUVOVDplPSJleHBlcmltZW50IjticmVhaztjYXNlIHROLlJVTjplPSJydW4iO2JyZWFrO2Nhc2UgdE4uUkVHRVg6ZT1gcmVnZXg6JHt0LnJlZ2V4U3RyaW5nfWA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgUmFuZ2VFcnJvcigiU2VyaWFsaXphdGlvbiBub3QgaW1wbGVtZW50ZWQiKX1yZXR1cm5be2tleTpKeHQsdmFsdWU6ZX1dfSkpKV0pLnBpcGUoSXQoKHQ9PnQuZmxhdCgpKSkpfWRlc2VyaWFsaXplUXVlcnlQYXJhbXModCl7bGV0IGU9bnVsbCxuPW51bGwsbz1udWxsLGk9bnVsbDtmb3IoY29uc3R7a2V5OmEsdmFsdWU6cn1vZiB0KXN3aXRjaChhKXtjYXNlInBpbm5lZENhcmRzIjplPWVPdChyKTticmVhaztjYXNlIEt4dDpuPU51bWJlcihyKTticmVhaztjYXNlIEp4dDpzd2l0Y2gocil7Y2FzZSJleHBlcmltZW50IjppPXtrZXk6dE4uRVhQRVJJTUVOVH07YnJlYWs7Y2FzZSJydW4iOmk9e2tleTp0Ti5SVU59fWlmKHIuc3RhcnRzV2l0aCgkeHQpKXtjb25zdCB0PXIuc2xpY2UoJHh0Lmxlbmd0aCk7aT17a2V5OnROLlJFR0VYLHJlZ2V4U3RyaW5nOnR9fWJyZWFrO2Nhc2UgUXh0Om89cn1yZXR1cm57bWV0cmljczp7cGlubmVkQ2FyZHM6ZXx8W10sc21vb3RoaW5nOm4sdGFnRmlsdGVyOm99LHJ1bnM6e2dyb3VwQnk6aX19fX07ZnVuY3Rpb24gZU90KHQpe2xldCBlO3RyeXtlPUpTT04ucGFyc2UodCl9Y2F0Y2godCl7cmV0dXJuIG51bGx9aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIG51bGw7Y29uc3Qgbj1bXTtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPSJzdHJpbmciPT10eXBlb2YgdC5ydW5JZCxpPSJudW1iZXIiPT10eXBlb2YgdC5zYW1wbGUsYT0ic3RyaW5nIj09dHlwZW9mIHQudGFnLHI9ZXx8dm9pZCAwPT09dC5ydW5JZCxzPWl8fHZvaWQgMD09PXQuc2FtcGxlO2lmKCEoInN0cmluZyI9PXR5cGVvZiB0LnBsdWdpbiYmYSYmciYmcykpY29udGludWU7aWYoKG89dC5wbHVnaW4pIT09aEEuU0NBTEFSUyYmbyE9PWhBLkhJU1RPR1JBTVMmJm8hPT1oQS5JTUFHRVMpY29udGludWU7aWYoIXQudGFnKWNvbnRpbnVlO2lmKHhBKHQucGx1Z2luKSl7aWYoIXQucnVuSWQpY29udGludWV9ZWxzZSBpZih0LnJ1bklkKWNvbnRpbnVlO2lmKGkpe2lmKCFNQSh0LnBsdWdpbikpY29udGludWU7aWYoIU51bWJlci5pc0ludGVnZXIodC5zYW1wbGUpfHx0LnNhbXBsZTwwKWNvbnRpbnVlfWNvbnN0IGw9e3BsdWdpbjp0LnBsdWdpbix0YWc6dC50YWd9O2UmJihsLnJ1bklkPXQucnVuSWQpLGkmJihsLnNhbXBsZT10LnNhbXBsZSksbi5wdXNoKGwpfXZhciBvO3JldHVybiBufWZ1bmN0aW9uIG5PdCgpe3JldHVyblt7cm91dGVLaW5kOlprLkVYUEVSSU1FTlQscGF0aDoiLyIsbmdDb21wb25lbnQ6Wnh0LGRlZmF1bHRSb3V0ZTohMCxkZWVwTGlua1Byb3ZpZGVyOm5ldyB0T3R9XX1mdW5jdGlvbiBvT3QodCl7cmV0dXJuKGUsbik9Pntjb25zdCBvPXQoZSxuKTtyZXR1cm4gY29uc29sZS5ncm91cENvbGxhcHNlZChuLnR5cGUpLGNvbnNvbGUubG9nKCJwcmV2IHN0YXRlIixlKSxjb25zb2xlLmxvZygiYWN0aW9uIixuKSxjb25zb2xlLmxvZygibmV4dCBzdGF0ZSIsbyksY29uc29sZS5ncm91cEVuZCgpLG99fWZ1bmN0aW9uIGlPdCgpe3JldHVybiB5XygpP29PdDp0PT4oZSxuKT0+dChlLG4pfXRPdD0oZnVuY3Rpb24gYU90KHQsZSxuLG8pe3ZhciBpLGE9YXJndW1lbnRzLmxlbmd0aCxyPWE8Mz9lOm51bGw9PT1vP289T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLG4pOm87aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlyPVJlZmxlY3QuZGVjb3JhdGUodCxlLG4sbyk7ZWxzZSBmb3IodmFyIHM9dC5sZW5ndGgtMTtzPj0wO3MtLSkoaT10W3NdKSYmKHI9KGE8Mz9pKHIpOmE+Mz9pKGUsbixyKTppKGUsbikpfHxyKTtyZXR1cm4gYT4zJiZyJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHIpLHJ9KShbaW0oKV0sdE90KTtjb25zdCByT3Q9bmV3IEdhKCJSb290IHJlZHVjZXJzIHRva2VuIix7ZmFjdG9yeTooKT0+KHt9KX0pO2NsYXNzIHNPdHt9c090Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxzT3QpfSxzT3QuybVtb2Q9YW8oe3R5cGU6c090fSksc090Lsm1aW5qPXZuKHtwcm92aWRlcnM6W3twcm92aWRlOmJ3LHVzZUZhY3Rvcnk6aU90LG11bHRpOiEwfV0saW1wb3J0czpbW2RrLmZvclJvb3Qock90LHtydW50aW1lQ2hlY2tzOntzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eTohMCxzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdFN0YXRlU2VyaWFsaXphYmlsaXR5OiExfX0pLFdrLmZvclJvb3QoW10pXV19KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKHNPdCxbe3R5cGU6QXksYXJnczpbe2ltcG9ydHM6W2RrLmZvclJvb3Qock90LHtydW50aW1lQ2hlY2tzOntzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eTohMCxzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdFN0YXRlU2VyaWFsaXphYmlsaXR5OiExfX0pLFdrLmZvclJvb3QoW10pXSxwcm92aWRlcnM6W3twcm92aWRlOmJ3LHVzZUZhY3Rvcnk6aU90LG11bHRpOiEwfV19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhzT3Qse2ltcG9ydHM6W2xrLFVrXX0pO2NsYXNzIGxPdHt9bE90Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxsT3QpfSxsT3QuybVtb2Q9YW8oe3R5cGU6bE90fSksbE90Lsm1aW5qPXZuKHt9KSwoInVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJmhoKGxPdCxbe3R5cGU6QXksYXJnczpbe2RlY2xhcmF0aW9uczpbcXh0XSxleHBvcnRzOltxeHRdfV19XSxudWxsLG51bGwpLCgidW5kZWZpbmVkIj09dHlwZW9mIG5nSml0TW9kZXx8bmdKaXRNb2RlKSYmcm8obE90LHtkZWNsYXJhdGlvbnM6W3F4dF0sZXhwb3J0czpbcXh0XX0pO2NsYXNzIGNPdHt9Y090Lsm1ZmFjPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIG5ldyhlfHxjT3QpfSxjT3QuybVtb2Q9YW8oe3R5cGU6Y090fSksY090Lsm1aW5qPXZuKHtpbXBvcnRzOltbV00sWXh0LGxPdF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChjT3QsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W1p4dF0saW1wb3J0czpbV00sWXh0LGxPdF0sZXhwb3J0czpbWnh0XSxlbnRyeUNvbXBvbmVudHM6W1p4dF19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhjT3Qse2RlY2xhcmF0aW9uczpbWnh0XSxpbXBvcnRzOltXTSxZeHQsbE90XSxleHBvcnRzOltaeHRdfSk7Y2xhc3MgZE90e31kT3QuybVmYWM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbmV3KGV8fGRPdCl9LGRPdC7JtW1vZD1hbyh7dHlwZTpkT3QsYm9vdHN0cmFwOlthcV19KSxkT3QuybVpbmo9dm4oe2ltcG9ydHM6W1t0VCxVdixaUCxCUyxzcSxQUy5yZWdpc3RlclJvdXRlcyhuT3QpLEpMLEtMLGxxLGNPdCxFUixncSxkcSx2cSxhQSx4cSxwcSxyRCxzeixZeHQsS04sQ3Esc090LGt4dF1dfSksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlfHxuZ0Rldk1vZGUpJiZoaChkT3QsW3t0eXBlOkF5LGFyZ3M6W3tkZWNsYXJhdGlvbnM6W2FxXSxpbXBvcnRzOlt0VCxVdixaUCxCUyxzcSxQUy5yZWdpc3RlclJvdXRlcyhuT3QpLEpMLEtMLGxxLGNPdCxFUixncSxkcSx2cSxhQSx4cSxwcSxyRCxzeixZeHQsS04sQ3Esc090LGt4dF0sYm9vdHN0cmFwOlthcV19XX1dLG51bGwsbnVsbCksKCJ1bmRlZmluZWQiPT10eXBlb2YgbmdKaXRNb2RlfHxuZ0ppdE1vZGUpJiZybyhkT3Qse2RlY2xhcmF0aW9uczpbYXFdLGltcG9ydHM6W3RULFV2LFpQLEJTLHNxLFBTLEpMLEtMLGxxLGNPdCxFUixncSxkcSx2cSxhQSx4cSxwcSxyRCxzeixZeHQsS04sQ3Esc090LGt4dF19KSwibG9hZGluZyIhPT1kb2N1bWVudC5yZWFkeVN0YXRlP0Z2KCkuYm9vdHN0cmFwTW9kdWxlKGRPdCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCgoKT0+e0Z2KCkuYm9vdHN0cmFwTW9kdWxlKGRPdCl9KSksKGZ1bmN0aW9uIHBPdCgpe2lmKGJfKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGVuYWJsZSBwcm9kIG1vZGUgYWZ0ZXIgcGxhdGZvcm0gc2V0dXAuIik7KHZvaWQgMD09PXR5cGVvZiBuZ0Rldk1vZGV8fG5nRGV2TW9kZSkmJihqbi5uZ0Rldk1vZGU9ITEpLGhfPSExfQovKioKICAgICAqIEBsaWNlbnNlCiAgICAgKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgICoKICAgICAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAgICAgKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlCiAgICAgKi8pKCl9KSgpOwo=", - "headers": [ - [ - "content-type", - "application/javascript; charset=utf-8" - ] - ], - "ok": true, - "status": 200, - "status_text": "" - } - } - }, - "id": "PW2NAam_7irv", - "outputId": "38b8995a-c139-441c-e393-56c11f214655" - }, - "outputs": [], - "source": [ - "# load tensorboard in jupyter notebook\n", - "%load_ext tensorboard" + "data": { + "image/png": "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\n", + "text/plain": [ + "
" ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Let's take a look at the dataset image\n", + "import mmcv\n", + "import matplotlib.pyplot as plt\n", + "\n", + "img = mmcv.imread('ballondatasets/balloon/train/10464445726_6f1e3bbe6a_k.jpg')\n", + "plt.figure(figsize=(15, 10))\n", + "plt.imshow(mmcv.bgr2rgb(img))\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PMZvtSIl71qi" + }, + "source": [ + "After downloading the data, we need to implement a function to convert the annotation format into the COCO format. Then we can use implemented `COCODataset` to load the data and perform training and evaluation.\n", + "Let's take a look at the annotation json file.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "id": "n7rwalnPd6e1" + }, + "outputs": [], + "source": [ + "# Check the label of a single image\n", + "import mmengine\n", + "\n", + "annotation = mmengine.load('./ballondatasets/balloon/train/via_region_data.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "keLW7uqJM54Y", + "outputId": "8bdf087e-5ec0-4f8a-ee1d-5692986ac87d" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# see curves in tensorboard\n", - "# if you see please run it again\n", - "%tensorboard --logdir tutorial_exps/" + "data": { + "text/plain": [ + "{'fileref': '',\n", + " 'size': 1115004,\n", + " 'filename': '34020010494_e5cb88e1c4_k.jpg',\n", + " 'base64_img_data': '',\n", + " 'file_attributes': {},\n", + " 'regions': {'0': {'shape_attributes': {'name': 'polygon',\n", + " 'all_points_x': [1020,\n", + " 1000,\n", + " 994,\n", + " 1003,\n", + " 1023,\n", + " 1050,\n", + " 1089,\n", + " 1134,\n", + " 1190,\n", + " 1265,\n", + " 1321,\n", + " 1361,\n", + " 1403,\n", + " 1428,\n", + " 1442,\n", + " 1445,\n", + " 1441,\n", + " 1427,\n", + " 1400,\n", + " 1361,\n", + " 1316,\n", + " 1269,\n", + " 1228,\n", + " 1198,\n", + " 1207,\n", + " 1210,\n", + " 1190,\n", + " 1177,\n", + " 1172,\n", + " 1174,\n", + " 1170,\n", + " 1153,\n", + " 1127,\n", + " 1104,\n", + " 1061,\n", + " 1032,\n", + " 1020],\n", + " 'all_points_y': [963,\n", + " 899,\n", + " 841,\n", + " 787,\n", + " 738,\n", + " 700,\n", + " 663,\n", + " 638,\n", + " 621,\n", + " 619,\n", + " 643,\n", + " 672,\n", + " 720,\n", + " 765,\n", + " 800,\n", + " 860,\n", + " 896,\n", + " 942,\n", + " 990,\n", + " 1035,\n", + " 1079,\n", + " 1112,\n", + " 1129,\n", + " 1134,\n", + " 1144,\n", + " 1153,\n", + " 1166,\n", + " 1166,\n", + " 1150,\n", + " 1136,\n", + " 1129,\n", + " 1122,\n", + " 1112,\n", + " 1084,\n", + " 1037,\n", + " 989,\n", + " 963]},\n", + " 'region_attributes': {}}}}" ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The annotation is a dict, and its values looks like the following\n", + "annotation['34020010494_e5cb88e1c4_k.jpg1115004']" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QA1pFg-FeO3l" + }, + "source": [ + "According to the above observation, each single image has a corresponding annotation containing keys `filename` and `regions` that are necessary for training.\n", + "We need to read annotations of each image and convert them into COCO format as below:\n", + "\n", + "```python\n", + "{\n", + " \"images\": [image],\n", + " \"annotations\": [annotation],\n", + " \"categories\": [category]\n", + "}\n", + "\n", + "\n", + "image = {\n", + " \"id\": int,\n", + " \"width\": int,\n", + " \"height\": int,\n", + " \"file_name\": str,\n", + "}\n", + "\n", + "annotation = {\n", + " \"id\": int,\n", + " \"image_id\": int,\n", + " \"category_id\": int,\n", + " \"segmentation\": RLE or [polygon],\n", + " \"area\": float,\n", + " \"bbox\": [x,y,width,height],\n", + " \"iscrowd\": 0 or 1,\n", + "}\n", + "\n", + "categories = [{\n", + " \"id\": int,\n", + " \"name\": str,\n", + " \"supercategory\": str,\n", + "}]\n", + "```\n", + "**Note**: We only list the necessary keys for training, as shown above. For a full COCO format, please see [here](https://cocodataset.org/#format-data)." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "id": "GdSaB2ad0EdX" + }, + "outputs": [], + "source": [ + "import os.path as osp\n", + "\n", + "def convert_balloon_to_coco(ann_file, out_file, image_prefix):\n", + " data_infos = mmengine.load(ann_file)\n", + "\n", + " annotations = []\n", + " images = []\n", + " obj_count = 0\n", + " for idx, v in enumerate(mmengine.track_iter_progress(data_infos.values())):\n", + " filename = v['filename']\n", + " img_path = osp.join(image_prefix, filename)\n", + " height, width = mmcv.imread(img_path).shape[:2]\n", + "\n", + " images.append(dict(\n", + " id=idx,\n", + " file_name=filename,\n", + " height=height,\n", + " width=width))\n", + "\n", + " bboxes = []\n", + " labels = []\n", + " masks = []\n", + " for _, obj in v['regions'].items():\n", + " assert not obj['region_attributes']\n", + " obj = obj['shape_attributes']\n", + " px = obj['all_points_x']\n", + " py = obj['all_points_y']\n", + " poly = [(x + 0.5, y + 0.5) for x, y in zip(px, py)]\n", + " poly = [p for x in poly for p in x]\n", + "\n", + " x_min, y_min, x_max, y_max = (\n", + " min(px), min(py), max(px), max(py))\n", + "\n", + "\n", + " data_anno = dict(\n", + " image_id=idx,\n", + " id=obj_count,\n", + " category_id=0,\n", + " bbox=[x_min, y_min, x_max - x_min, y_max - y_min],\n", + " area=(x_max - x_min) * (y_max - y_min),\n", + " segmentation=[poly],\n", + " iscrowd=0)\n", + " annotations.append(data_anno)\n", + " obj_count += 1\n", + "\n", + " coco_format_json = dict(\n", + " images=images,\n", + " annotations=annotations,\n", + " categories=[{'id':0, 'name': 'balloon'}])\n", + " mmengine.dump(coco_format_json, out_file)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "G3xV5ktqlpFu", + "outputId": "2d97137b-34e6-42e5-c8d6-0a4fe7d2c7cf" + }, + "outputs": [ { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "MfQ-yspZLuuI" - }, - "source": [ - "## Test the Trained Detector\n", - "\n", - "After finetuning the detector, let's visualize the prediction results!" - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 61/61, 19.7 task/s, elapsed: 3s, ETA: 0s\n", + "[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 13/13, 20.1 task/s, elapsed: 1s, ETA: 0s\n" + ] + } + ], + "source": [ + "convert_balloon_to_coco(\n", + " './ballondatasets/balloon/train/via_region_data.json',\n", + " './ballondatasets/balloon/train/annotation_coco.json',\n", + " './ballondatasets/balloon/train/')\n", + "convert_balloon_to_coco(\n", + " './ballondatasets/balloon/val/via_region_data.json',\n", + " './ballondatasets/balloon/val/annotation_coco.json',\n", + " './ballondatasets/balloon/val/')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "h85AtunjRvx4" + }, + "source": [ + "Checking the label corresponding to the instance split ID after the data format conversion is complete" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "zaYkWbxORwZq", + "outputId": "02ad1ff6-f138-49af-b733-1d23c51557f5" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 854 - }, - "id": "_MuZurfGLq0p", - "outputId": "5df4dc5f-5b90-46c3-9aeb-a4d0ac13564a" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "local loads checkpoint from path: tutorial_exps/epoch_12.pth\n", - "\n", - " _pred_instances: \n", - " ignored_instances: \n", - " gt_instances: \n", - " _gt_instances: \n", - " pred_instances: \n", - ") at 0x7f8ded7a5d10>\n" - ] - } - ], - "source": [ - "import mmcv\n", - "from mmdet.apis import init_detector, inference_detector\n", - "img = mmcv.imread('./ballondatasets/balloon/train/7178882742_f090f3ce56_k.jpg',channel_order='rgb')\n", - "checkpoint_file = 'tutorial_exps/epoch_12.pth'\n", - "model = init_detector(cfg, checkpoint_file, device='cpu')\n", - "new_result = inference_detector(model, img)\n", - "print(new_result)" - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "loading annotations into memory...\n", + "Done (t=0.01s)\n", + "creating index...\n", + "index created!\n", + "Category ID: 0, Category Name: balloon\n" + ] + } + ], + "source": [ + "from pycocotools.coco import COCO\n", + "\n", + "# Path to load the COCO annotation file\n", + "annotation_file = './ballondatasets/balloon/train/annotation_coco.json'\n", + "\n", + "# Initialise the COCO object\n", + "coco = COCO(annotation_file)\n", + "\n", + "# Get all category tags and corresponding category IDs\n", + "categories = coco.loadCats(coco.getCatIds())\n", + "category_id_to_name = {cat['id']: cat['name'] for cat in categories}\n", + "\n", + "# Print all category IDs and corresponding category names\n", + "for category_id, category_name in category_id_to_name.items():\n", + " print(f\"Category ID: {category_id}, Category Name: {category_name}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PwqJOpBe-bMj" + }, + "source": [ + "### Modify the config\n", + "\n", + "In the next step, we need to modify the config for the training.\n", + "To accelerate the process, we finetune a detector using a pre-trained detector." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "id": "hamZrlnH-YDD" + }, + "outputs": [], + "source": [ + "from mmengine import Config\n", + "cfg = Config.fromfile('./configs/mask_rcnn/mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco.py')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HntziLGq-92Z" + }, + "source": [ + "Given a config that trains a Mask R-CNN on COCO dataset, we need to modify some values to use it for training on the balloon dataset." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "id": "pUbwD8uV0PR8" + }, + "outputs": [], + "source": [ + "from mmengine.runner import set_random_seed\n", + "\n", + "# Modify dataset classes and color\n", + "cfg.metainfo = {\n", + " 'classes': ('balloon', ),\n", + " 'palette': [\n", + " (220, 20, 60),\n", + " ]\n", + "}\n", + "\n", + "# Modify dataset type and path\n", + "cfg.data_root = './ballondatasets/balloon'\n", + "\n", + "cfg.train_dataloader.dataset.ann_file = 'train/annotation_coco.json'\n", + "cfg.train_dataloader.dataset.data_root = cfg.data_root\n", + "cfg.train_dataloader.dataset.data_prefix.img = 'train/'\n", + "cfg.train_dataloader.dataset.metainfo = cfg.metainfo\n", + "\n", + "cfg.val_dataloader.dataset.ann_file = 'val/annotation_coco.json'\n", + "cfg.val_dataloader.dataset.data_root = cfg.data_root\n", + "cfg.val_dataloader.dataset.data_prefix.img = 'val/'\n", + "cfg.val_dataloader.dataset.metainfo = cfg.metainfo\n", + "\n", + "cfg.test_dataloader = cfg.val_dataloader\n", + "\n", + "# Modify metric config\n", + "cfg.val_evaluator.ann_file = cfg.data_root+'/'+'val/annotation_coco.json'\n", + "cfg.test_evaluator = cfg.val_evaluator\n", + "\n", + "# Modify num classes of the model in box head and mask head\n", + "cfg.model.roi_head.bbox_head.num_classes = 1\n", + "cfg.model.roi_head.mask_head.num_classes = 1\n", + "\n", + "# We can still the pre-trained Mask RCNN model to obtain a higher performance\n", + "cfg.load_from = 'checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth'\n", + "\n", + "# Set up working dir to save files and logs.\n", + "cfg.work_dir = './tutorial_exps'\n", + "\n", + "\n", + "# We can set the evaluation interval to reduce the evaluation times\n", + "cfg.train_cfg.val_interval = 3\n", + "# We can set the checkpoint saving interval to reduce the storage cost\n", + "cfg.default_hooks.checkpoint.interval = 3\n", + "\n", + "# The original learning rate (LR) is set for 8-GPU training.\n", + "# We divide it by 8 since we only use one GPU.\n", + "cfg.optim_wrapper.optimizer.lr = 0.02 / 8\n", + "cfg.default_hooks.logger.interval = 10\n", + "\n", + "\n", + "# Set seed thus the results are more reproducible\n", + "# cfg.seed = 0\n", + "set_random_seed(0, deterministic=False)\n", + "\n", + "# We can also use tensorboard to log the training process\n", + "cfg.visualizer.vis_backends.append({\"type\":'TensorboardVisBackend'})\n", + "\n", + "#------------------------------------------------------\n", + "config=f'./configs/mask_rcnn/mask-rcnn_r50-caffe_fpn_ms-poly-3x_balloon.py'\n", + "with open(config, 'w') as f:\n", + " f.write(cfg.pretty_text)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "111W_oZV_3wa" + }, + "source": [ + "### Train a new detector\n", + "\n", + "Finally, lets initialize the dataset and detector, then train a new detector!" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "JiqDnPdAMGyg", + "outputId": "0de25679-3541-488e-eceb-5b5400f92745" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from mmengine.visualization import Visualizer\n", - "# get built visualizer\n", - "visualizer_now = Visualizer.get_current_instance()\n", - "# the dataset_meta is loaded from the checkpoint and\n", - "# then pass to the model in init_detector\n", - "visualizer_now.dataset_meta = model.dataset_meta\n", - "# show the results\n", - "visualizer_now.add_datasample(\n", - " 'new_result',\n", - " img,\n", - " data_sample=new_result,\n", - " draw_gt=False,\n", - " wait_time=0,\n", - " out_file=None,\n", - " pred_score_thr=0.5\n", - ")\n", - "visualizer_now.show()" - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "08/15 04:31:57 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - \n", + "------------------------------------------------------------\n", + "System environment:\n", + " sys.platform: linux\n", + " Python: 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0]\n", + " CUDA available: True\n", + " numpy_random_seed: 1186080067\n", + " GPU 0: Tesla T4\n", + " CUDA_HOME: /usr/local/cuda\n", + " NVCC: Cuda compilation tools, release 11.8, V11.8.89\n", + " GCC: x86_64-linux-gnu-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0\n", + " PyTorch: 2.0.1+cu118\n", + " PyTorch compiling details: PyTorch built with:\n", + " - GCC 9.3\n", + " - C++ Version: 201703\n", + " - Intel(R) oneAPI Math Kernel Library Version 2022.2-Product Build 20220804 for Intel(R) 64 architecture applications\n", + " - Intel(R) MKL-DNN v2.7.3 (Git Hash 6dbeffbae1f23cbbeae17adb7b5b13f1f37c080e)\n", + " - OpenMP 201511 (a.k.a. OpenMP 4.5)\n", + " - LAPACK is enabled (usually provided by MKL)\n", + " - NNPACK is enabled\n", + " - CPU capability usage: AVX2\n", + " - CUDA Runtime 11.8\n", + " - NVCC architecture flags: -gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_70,code=sm_70;-gencode;arch=compute_75,code=sm_75;-gencode;arch=compute_80,code=sm_80;-gencode;arch=compute_86,code=sm_86;-gencode;arch=compute_90,code=sm_90\n", + " - CuDNN 8.7\n", + " - Magma 2.6.1\n", + " - Build settings: BLAS_INFO=mkl, BUILD_TYPE=Release, CUDA_VERSION=11.8, CUDNN_VERSION=8.7.0, CXX_COMPILER=/opt/rh/devtoolset-9/root/usr/bin/c++, CXX_FLAGS= -D_GLIBCXX_USE_CXX11_ABI=0 -fabi-version=11 -Wno-deprecated -fvisibility-inlines-hidden -DUSE_PTHREADPOOL -DNDEBUG -DUSE_KINETO -DLIBKINETO_NOROCTRACER -DUSE_FBGEMM -DUSE_QNNPACK -DUSE_PYTORCH_QNNPACK -DUSE_XNNPACK -DSYMBOLICATE_MOBILE_DEBUG_HANDLE -O2 -fPIC -Wall -Wextra -Werror=return-type -Werror=non-virtual-dtor -Werror=bool-operation -Wnarrowing -Wno-missing-field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wunused-local-typedefs -Wno-unused-parameter -Wno-unused-function -Wno-unused-result -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=deprecated-declarations -Wno-stringop-overflow -Wno-psabi -Wno-error=pedantic -Wno-error=redundant-decls -Wno-error=old-style-cast -fdiagnostics-color=always -faligned-new -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping-math -Werror=format -Werror=cast-function-type -Wno-stringop-overflow, LAPACK_INFO=mkl, PERF_WITH_AVX=1, PERF_WITH_AVX2=1, PERF_WITH_AVX512=1, TORCH_DISABLE_GPU_ASSERTS=ON, TORCH_VERSION=2.0.1, USE_CUDA=ON, USE_CUDNN=ON, USE_EXCEPTION_PTR=1, USE_GFLAGS=OFF, USE_GLOG=OFF, USE_MKL=ON, USE_MKLDNN=ON, USE_MPI=OFF, USE_NCCL=1, USE_NNPACK=ON, USE_OPENMP=ON, USE_ROCM=OFF, \n", + "\n", + " TorchVision: 0.15.2+cu118\n", + " OpenCV: 4.8.0\n", + " MMEngine: 0.8.4\n", + "\n", + "Runtime environment:\n", + " cudnn_benchmark: False\n", + " dist_cfg: {'backend': 'nccl'}\n", + " mp_cfg: {'mp_start_method': 'fork', 'opencv_num_threads': 0}\n", + " seed: 1186080067\n", + " Distributed launcher: none\n", + " Distributed training: False\n", + " GPU number: 1\n", + "------------------------------------------------------------\n", + "\n", + "08/15 04:31:57 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Config:\n", + "auto_scale_lr = dict(base_batch_size=16, enable=False)\n", + "backend_args = None\n", + "data_root = './ballondatasets/balloon'\n", + "dataset_type = 'CocoDataset'\n", + "default_hooks = dict(\n", + " checkpoint=dict(interval=3, type='CheckpointHook'),\n", + " logger=dict(interval=10, type='LoggerHook'),\n", + " param_scheduler=dict(type='ParamSchedulerHook'),\n", + " sampler_seed=dict(type='DistSamplerSeedHook'),\n", + " timer=dict(type='IterTimerHook'),\n", + " visualization=dict(type='DetVisualizationHook'))\n", + "default_scope = 'mmdet'\n", + "env_cfg = dict(\n", + " cudnn_benchmark=False,\n", + " dist_cfg=dict(backend='nccl'),\n", + " mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0))\n", + "launcher = 'none'\n", + "load_from = 'checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth'\n", + "log_level = 'INFO'\n", + "log_processor = dict(by_epoch=True, type='LogProcessor', window_size=50)\n", + "metainfo = dict(\n", + " classes=('balloon', ), palette=[\n", + " (\n", + " 220,\n", + " 20,\n", + " 60,\n", + " ),\n", + " ])\n", + "model = dict(\n", + " backbone=dict(\n", + " depth=50,\n", + " frozen_stages=1,\n", + " init_cfg=dict(\n", + " checkpoint='open-mmlab://detectron2/resnet50_caffe',\n", + " type='Pretrained'),\n", + " norm_cfg=dict(requires_grad=False, type='BN'),\n", + " norm_eval=True,\n", + " num_stages=4,\n", + " out_indices=(\n", + " 0,\n", + " 1,\n", + " 2,\n", + " 3,\n", + " ),\n", + " style='caffe',\n", + " type='ResNet'),\n", + " data_preprocessor=dict(\n", + " bgr_to_rgb=False,\n", + " mean=[\n", + " 103.53,\n", + " 116.28,\n", + " 123.675,\n", + " ],\n", + " pad_mask=True,\n", + " pad_size_divisor=32,\n", + " std=[\n", + " 1.0,\n", + " 1.0,\n", + " 1.0,\n", + " ],\n", + " type='DetDataPreprocessor'),\n", + " neck=dict(\n", + " in_channels=[\n", + " 256,\n", + " 512,\n", + " 1024,\n", + " 2048,\n", + " ],\n", + " num_outs=5,\n", + " out_channels=256,\n", + " type='FPN'),\n", + " roi_head=dict(\n", + " bbox_head=dict(\n", + " bbox_coder=dict(\n", + " target_means=[\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " ],\n", + " target_stds=[\n", + " 0.1,\n", + " 0.1,\n", + " 0.2,\n", + " 0.2,\n", + " ],\n", + " type='DeltaXYWHBBoxCoder'),\n", + " fc_out_channels=1024,\n", + " in_channels=256,\n", + " loss_bbox=dict(loss_weight=1.0, type='L1Loss'),\n", + " loss_cls=dict(\n", + " loss_weight=1.0, type='CrossEntropyLoss', use_sigmoid=False),\n", + " num_classes=1,\n", + " reg_class_agnostic=False,\n", + " roi_feat_size=7,\n", + " type='Shared2FCBBoxHead'),\n", + " bbox_roi_extractor=dict(\n", + " featmap_strides=[\n", + " 4,\n", + " 8,\n", + " 16,\n", + " 32,\n", + " ],\n", + " out_channels=256,\n", + " roi_layer=dict(output_size=7, sampling_ratio=0, type='RoIAlign'),\n", + " type='SingleRoIExtractor'),\n", + " mask_head=dict(\n", + " conv_out_channels=256,\n", + " in_channels=256,\n", + " loss_mask=dict(\n", + " loss_weight=1.0, type='CrossEntropyLoss', use_mask=True),\n", + " num_classes=1,\n", + " num_convs=4,\n", + " type='FCNMaskHead'),\n", + " mask_roi_extractor=dict(\n", + " featmap_strides=[\n", + " 4,\n", + " 8,\n", + " 16,\n", + " 32,\n", + " ],\n", + " out_channels=256,\n", + " roi_layer=dict(output_size=14, sampling_ratio=0, type='RoIAlign'),\n", + " type='SingleRoIExtractor'),\n", + " type='StandardRoIHead'),\n", + " rpn_head=dict(\n", + " anchor_generator=dict(\n", + " ratios=[\n", + " 0.5,\n", + " 1.0,\n", + " 2.0,\n", + " ],\n", + " scales=[\n", + " 8,\n", + " ],\n", + " strides=[\n", + " 4,\n", + " 8,\n", + " 16,\n", + " 32,\n", + " 64,\n", + " ],\n", + " type='AnchorGenerator'),\n", + " bbox_coder=dict(\n", + " target_means=[\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " 0.0,\n", + " ],\n", + " target_stds=[\n", + " 1.0,\n", + " 1.0,\n", + " 1.0,\n", + " 1.0,\n", + " ],\n", + " type='DeltaXYWHBBoxCoder'),\n", + " feat_channels=256,\n", + " in_channels=256,\n", + " loss_bbox=dict(loss_weight=1.0, type='L1Loss'),\n", + " loss_cls=dict(\n", + " loss_weight=1.0, type='CrossEntropyLoss', use_sigmoid=True),\n", + " type='RPNHead'),\n", + " test_cfg=dict(\n", + " rcnn=dict(\n", + " mask_thr_binary=0.5,\n", + " max_per_img=100,\n", + " nms=dict(iou_threshold=0.5, type='nms'),\n", + " score_thr=0.05),\n", + " rpn=dict(\n", + " max_per_img=1000,\n", + " min_bbox_size=0,\n", + " nms=dict(iou_threshold=0.7, type='nms'),\n", + " nms_pre=1000)),\n", + " train_cfg=dict(\n", + " rcnn=dict(\n", + " assigner=dict(\n", + " ignore_iof_thr=-1,\n", + " match_low_quality=True,\n", + " min_pos_iou=0.5,\n", + " neg_iou_thr=0.5,\n", + " pos_iou_thr=0.5,\n", + " type='MaxIoUAssigner'),\n", + " debug=False,\n", + " mask_size=28,\n", + " pos_weight=-1,\n", + " sampler=dict(\n", + " add_gt_as_proposals=True,\n", + " neg_pos_ub=-1,\n", + " num=512,\n", + " pos_fraction=0.25,\n", + " type='RandomSampler')),\n", + " rpn=dict(\n", + " allowed_border=-1,\n", + " assigner=dict(\n", + " ignore_iof_thr=-1,\n", + " match_low_quality=True,\n", + " min_pos_iou=0.3,\n", + " neg_iou_thr=0.3,\n", + " pos_iou_thr=0.7,\n", + " type='MaxIoUAssigner'),\n", + " debug=False,\n", + " pos_weight=-1,\n", + " sampler=dict(\n", + " add_gt_as_proposals=False,\n", + " neg_pos_ub=-1,\n", + " num=256,\n", + " pos_fraction=0.5,\n", + " type='RandomSampler')),\n", + " rpn_proposal=dict(\n", + " max_per_img=1000,\n", + " min_bbox_size=0,\n", + " nms=dict(iou_threshold=0.7, type='nms'),\n", + " nms_pre=2000)),\n", + " type='MaskRCNN')\n", + "optim_wrapper = dict(\n", + " optimizer=dict(lr=0.0025, momentum=0.9, type='SGD', weight_decay=0.0001),\n", + " type='OptimWrapper')\n", + "param_scheduler = [\n", + " dict(\n", + " begin=0, by_epoch=False, end=500, start_factor=0.001, type='LinearLR'),\n", + " dict(\n", + " begin=0,\n", + " by_epoch=True,\n", + " end=12,\n", + " gamma=0.1,\n", + " milestones=[\n", + " 8,\n", + " 11,\n", + " ],\n", + " type='MultiStepLR'),\n", + "]\n", + "resume = False\n", + "test_cfg = dict(type='TestLoop')\n", + "test_dataloader = dict(\n", + " batch_size=1,\n", + " dataset=dict(\n", + " ann_file='val/annotation_coco.json',\n", + " backend_args=None,\n", + " data_prefix=dict(img='val/'),\n", + " data_root='./ballondatasets/balloon',\n", + " metainfo=dict(classes=('balloon', ), palette=[\n", + " (\n", + " 220,\n", + " 20,\n", + " 60,\n", + " ),\n", + " ]),\n", + " pipeline=[\n", + " dict(backend_args=None, type='LoadImageFromFile'),\n", + " dict(keep_ratio=True, scale=(\n", + " 1333,\n", + " 800,\n", + " ), type='Resize'),\n", + " dict(type='LoadAnnotations', with_bbox=True, with_mask=True),\n", + " dict(\n", + " meta_keys=(\n", + " 'img_id',\n", + " 'img_path',\n", + " 'ori_shape',\n", + " 'img_shape',\n", + " 'scale_factor',\n", + " ),\n", + " type='PackDetInputs'),\n", + " ],\n", + " test_mode=True,\n", + " type='CocoDataset'),\n", + " drop_last=False,\n", + " num_workers=2,\n", + " persistent_workers=True,\n", + " sampler=dict(shuffle=False, type='DefaultSampler'))\n", + "test_evaluator = dict(\n", + " ann_file='./ballondatasets/balloon/val/annotation_coco.json',\n", + " backend_args=None,\n", + " format_only=False,\n", + " metric=[\n", + " 'bbox',\n", + " 'segm',\n", + " ],\n", + " type='CocoMetric')\n", + "test_pipeline = [\n", + " dict(backend_args=None, type='LoadImageFromFile'),\n", + " dict(keep_ratio=True, scale=(\n", + " 1333,\n", + " 800,\n", + " ), type='Resize'),\n", + " dict(type='LoadAnnotations', with_bbox=True, with_mask=True),\n", + " dict(\n", + " meta_keys=(\n", + " 'img_id',\n", + " 'img_path',\n", + " 'ori_shape',\n", + " 'img_shape',\n", + " 'scale_factor',\n", + " ),\n", + " type='PackDetInputs'),\n", + "]\n", + "train_cfg = dict(max_epochs=12, type='EpochBasedTrainLoop', val_interval=3)\n", + "train_dataloader = dict(\n", + " batch_sampler=dict(type='AspectRatioBatchSampler'),\n", + " batch_size=2,\n", + " dataset=dict(\n", + " ann_file='train/annotation_coco.json',\n", + " backend_args=None,\n", + " data_prefix=dict(img='train/'),\n", + " data_root='./ballondatasets/balloon',\n", + " filter_cfg=dict(filter_empty_gt=True, min_size=32),\n", + " metainfo=dict(classes=('balloon', ), palette=[\n", + " (\n", + " 220,\n", + " 20,\n", + " 60,\n", + " ),\n", + " ]),\n", + " pipeline=[\n", + " dict(backend_args=None, type='LoadImageFromFile'),\n", + " dict(\n", + " poly2mask=False,\n", + " type='LoadAnnotations',\n", + " with_bbox=True,\n", + " with_mask=True),\n", + " dict(\n", + " keep_ratio=True,\n", + " scales=[\n", + " (\n", + " 1333,\n", + " 640,\n", + " ),\n", + " (\n", + " 1333,\n", + " 672,\n", + " ),\n", + " (\n", + " 1333,\n", + " 704,\n", + " ),\n", + " (\n", + " 1333,\n", + " 736,\n", + " ),\n", + " (\n", + " 1333,\n", + " 768,\n", + " ),\n", + " (\n", + " 1333,\n", + " 800,\n", + " ),\n", + " ],\n", + " type='RandomChoiceResize'),\n", + " dict(prob=0.5, type='RandomFlip'),\n", + " dict(type='PackDetInputs'),\n", + " ],\n", + " type='CocoDataset'),\n", + " num_workers=2,\n", + " persistent_workers=True,\n", + " sampler=dict(shuffle=True, type='DefaultSampler'))\n", + "train_pipeline = [\n", + " dict(backend_args=None, type='LoadImageFromFile'),\n", + " dict(\n", + " poly2mask=False,\n", + " type='LoadAnnotations',\n", + " with_bbox=True,\n", + " with_mask=True),\n", + " dict(\n", + " keep_ratio=True,\n", + " scales=[\n", + " (\n", + " 1333,\n", + " 640,\n", + " ),\n", + " (\n", + " 1333,\n", + " 672,\n", + " ),\n", + " (\n", + " 1333,\n", + " 704,\n", + " ),\n", + " (\n", + " 1333,\n", + " 736,\n", + " ),\n", + " (\n", + " 1333,\n", + " 768,\n", + " ),\n", + " (\n", + " 1333,\n", + " 800,\n", + " ),\n", + " ],\n", + " type='RandomChoiceResize'),\n", + " dict(prob=0.5, type='RandomFlip'),\n", + " dict(type='PackDetInputs'),\n", + "]\n", + "val_cfg = dict(type='ValLoop')\n", + "val_dataloader = dict(\n", + " batch_size=1,\n", + " dataset=dict(\n", + " ann_file='val/annotation_coco.json',\n", + " backend_args=None,\n", + " data_prefix=dict(img='val/'),\n", + " data_root='./ballondatasets/balloon',\n", + " metainfo=dict(classes=('balloon', ), palette=[\n", + " (\n", + " 220,\n", + " 20,\n", + " 60,\n", + " ),\n", + " ]),\n", + " pipeline=[\n", + " dict(backend_args=None, type='LoadImageFromFile'),\n", + " dict(keep_ratio=True, scale=(\n", + " 1333,\n", + " 800,\n", + " ), type='Resize'),\n", + " dict(type='LoadAnnotations', with_bbox=True, with_mask=True),\n", + " dict(\n", + " meta_keys=(\n", + " 'img_id',\n", + " 'img_path',\n", + " 'ori_shape',\n", + " 'img_shape',\n", + " 'scale_factor',\n", + " ),\n", + " type='PackDetInputs'),\n", + " ],\n", + " test_mode=True,\n", + " type='CocoDataset'),\n", + " drop_last=False,\n", + " num_workers=2,\n", + " persistent_workers=True,\n", + " sampler=dict(shuffle=False, type='DefaultSampler'))\n", + "val_evaluator = dict(\n", + " ann_file='./ballondatasets/balloon/val/annotation_coco.json',\n", + " backend_args=None,\n", + " format_only=False,\n", + " metric=[\n", + " 'bbox',\n", + " 'segm',\n", + " ],\n", + " type='CocoMetric')\n", + "vis_backends = [\n", + " dict(type='LocalVisBackend'),\n", + "]\n", + "visualizer = dict(\n", + " name='visualizer',\n", + " type='DetLocalVisualizer',\n", + " vis_backends=[\n", + " dict(type='LocalVisBackend'),\n", + " dict(type='TensorboardVisBackend'),\n", + " ])\n", + "work_dir = './tutorial_exps'\n", + "\n", + "2023-08-15 04:31:59.033157: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", + "2023-08-15 04:32:00.371943: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n", + "08/15 04:32:04 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Distributed training is not used, all SyncBatchNorm (SyncBN) layers in the model will be automatically reverted to BatchNormXd layers if they are used.\n", + "08/15 04:32:04 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Hooks will be executed in the following order:\n", + "before_run:\n", + "(VERY_HIGH ) RuntimeInfoHook \n", + "(BELOW_NORMAL) LoggerHook \n", + " -------------------- \n", + "before_train:\n", + "(VERY_HIGH ) RuntimeInfoHook \n", + "(NORMAL ) IterTimerHook \n", + "(VERY_LOW ) CheckpointHook \n", + " -------------------- \n", + "before_train_epoch:\n", + "(VERY_HIGH ) RuntimeInfoHook \n", + "(NORMAL ) IterTimerHook \n", + "(NORMAL ) DistSamplerSeedHook \n", + " -------------------- \n", + "before_train_iter:\n", + "(VERY_HIGH ) RuntimeInfoHook \n", + "(NORMAL ) IterTimerHook \n", + " -------------------- \n", + "after_train_iter:\n", + "(VERY_HIGH ) RuntimeInfoHook \n", + "(NORMAL ) IterTimerHook \n", + "(BELOW_NORMAL) LoggerHook \n", + "(LOW ) ParamSchedulerHook \n", + "(VERY_LOW ) CheckpointHook \n", + " -------------------- \n", + "after_train_epoch:\n", + "(NORMAL ) IterTimerHook \n", + "(LOW ) ParamSchedulerHook \n", + "(VERY_LOW ) CheckpointHook \n", + " -------------------- \n", + "before_val:\n", + "(VERY_HIGH ) RuntimeInfoHook \n", + " -------------------- \n", + "before_val_epoch:\n", + "(NORMAL ) IterTimerHook \n", + " -------------------- \n", + "before_val_iter:\n", + "(NORMAL ) IterTimerHook \n", + " -------------------- \n", + "after_val_iter:\n", + "(NORMAL ) IterTimerHook \n", + "(NORMAL ) DetVisualizationHook \n", + "(BELOW_NORMAL) LoggerHook \n", + " -------------------- \n", + "after_val_epoch:\n", + "(VERY_HIGH ) RuntimeInfoHook \n", + "(NORMAL ) IterTimerHook \n", + "(BELOW_NORMAL) LoggerHook \n", + "(LOW ) ParamSchedulerHook \n", + "(VERY_LOW ) CheckpointHook \n", + " -------------------- \n", + "after_val:\n", + "(VERY_HIGH ) RuntimeInfoHook \n", + " -------------------- \n", + "after_train:\n", + "(VERY_HIGH ) RuntimeInfoHook \n", + "(VERY_LOW ) CheckpointHook \n", + " -------------------- \n", + "before_test:\n", + "(VERY_HIGH ) RuntimeInfoHook \n", + " -------------------- \n", + "before_test_epoch:\n", + "(NORMAL ) IterTimerHook \n", + " -------------------- \n", + "before_test_iter:\n", + "(NORMAL ) IterTimerHook \n", + " -------------------- \n", + "after_test_iter:\n", + "(NORMAL ) IterTimerHook \n", + "(NORMAL ) DetVisualizationHook \n", + "(BELOW_NORMAL) LoggerHook \n", + " -------------------- \n", + "after_test_epoch:\n", + "(VERY_HIGH ) RuntimeInfoHook \n", + "(NORMAL ) IterTimerHook \n", + "(BELOW_NORMAL) LoggerHook \n", + " -------------------- \n", + "after_test:\n", + "(VERY_HIGH ) RuntimeInfoHook \n", + " -------------------- \n", + "after_run:\n", + "(BELOW_NORMAL) LoggerHook \n", + " -------------------- \n", + "loading annotations into memory...\n", + "Done (t=0.01s)\n", + "creating index...\n", + "index created!\n", + "loading annotations into memory...\n", + "Done (t=0.00s)\n", + "creating index...\n", + "index created!\n", + "loading annotations into memory...\n", + "Done (t=0.00s)\n", + "creating index...\n", + "index created!\n", + "08/15 04:32:05 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - load model from: open-mmlab://detectron2/resnet50_caffe\n", + "08/15 04:32:05 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Loads checkpoint by openmmlab backend from path: open-mmlab://detectron2/resnet50_caffe\n", + "Downloading: \"https://download.openmmlab.com/pretrain/third_party/resnet50_msra-5891d200.pth\" to /root/.cache/torch/hub/checkpoints/resnet50_msra-5891d200.pth\n", + "100% 89.9M/89.9M [00:12<00:00, 7.43MB/s]\n", + "08/15 04:32:19 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - The model and loaded state dict do not match exactly\n", + "\n", + "unexpected key in source state_dict: conv1.bias\n", + "\n", + "Loads checkpoint by local backend from path: checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth\n", + "The model and loaded state dict do not match exactly\n", + "\n", + "size mismatch for roi_head.bbox_head.fc_cls.weight: copying a param with shape torch.Size([81, 1024]) from checkpoint, the shape in current model is torch.Size([2, 1024]).\n", + "size mismatch for roi_head.bbox_head.fc_cls.bias: copying a param with shape torch.Size([81]) from checkpoint, the shape in current model is torch.Size([2]).\n", + "size mismatch for roi_head.bbox_head.fc_reg.weight: copying a param with shape torch.Size([320, 1024]) from checkpoint, the shape in current model is torch.Size([4, 1024]).\n", + "size mismatch for roi_head.bbox_head.fc_reg.bias: copying a param with shape torch.Size([320]) from checkpoint, the shape in current model is torch.Size([4]).\n", + "size mismatch for roi_head.mask_head.conv_logits.weight: copying a param with shape torch.Size([80, 256, 1, 1]) from checkpoint, the shape in current model is torch.Size([1, 256, 1, 1]).\n", + "size mismatch for roi_head.mask_head.conv_logits.bias: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([1]).\n", + "08/15 04:32:19 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Load checkpoint from checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth\n", + "08/15 04:32:19 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - \"FileClient\" will be deprecated in future. Please use io functions in https://mmengine.readthedocs.io/en/latest/api/fileio.html#file-io\n", + "08/15 04:32:19 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - \"HardDiskBackend\" is the alias of \"LocalBackend\" and the former will be deprecated in future.\n", + "08/15 04:32:19 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Checkpoints will be saved to /content/mmdetection/tutorial_exps.\n", + "08/15 04:32:25 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [1][10/31] lr: 4.7545e-05 eta: 0:03:33 time: 0.5898 data_time: 0.0359 memory: 3283 loss: 16.7169 loss_rpn_cls: 0.1373 loss_rpn_bbox: 0.0201 loss_cls: 0.6155 acc: 83.3984 loss_bbox: 0.3727 loss_mask: 15.5713\n", + "08/15 04:32:30 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [1][20/31] lr: 9.7595e-05 eta: 0:03:05 time: 0.5271 data_time: 0.0214 memory: 3283 loss: 10.8499 loss_rpn_cls: 0.0836 loss_rpn_bbox: 0.0148 loss_cls: 0.5401 acc: 84.6680 loss_bbox: 0.2949 loss_mask: 9.9164\n", + "08/15 04:32:35 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [1][30/31] lr: 1.4765e-04 eta: 0:03:02 time: 0.5348 data_time: 0.0180 memory: 3283 loss: 7.7485 loss_rpn_cls: 0.0823 loss_rpn_bbox: 0.0183 loss_cls: 0.4752 acc: 95.7031 loss_bbox: 0.2886 loss_mask: 6.8839\n", + "08/15 04:32:35 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-3x_balloon_20230815_043154\n", + "08/15 04:32:41 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [2][10/31] lr: 2.0270e-04 eta: 0:02:53 time: 0.5254 data_time: 0.0198 memory: 3449 loss: 5.9555 loss_rpn_cls: 0.0705 loss_rpn_bbox: 0.0176 loss_cls: 0.4270 acc: 93.2617 loss_bbox: 0.3093 loss_mask: 5.1312\n", + "08/15 04:32:46 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [2][20/31] lr: 2.5275e-04 eta: 0:02:49 time: 0.5077 data_time: 0.0126 memory: 3282 loss: 4.6321 loss_rpn_cls: 0.0661 loss_rpn_bbox: 0.0176 loss_cls: 0.3947 acc: 84.6680 loss_bbox: 0.3221 loss_mask: 3.8315\n", + "08/15 04:32:52 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [2][30/31] lr: 3.0280e-04 eta: 0:02:45 time: 0.5237 data_time: 0.0137 memory: 3283 loss: 1.8118 loss_rpn_cls: 0.0470 loss_rpn_bbox: 0.0193 loss_cls: 0.3295 acc: 85.7422 loss_bbox: 0.3360 loss_mask: 1.0801\n", + "08/15 04:32:52 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-3x_balloon_20230815_043154\n", + "08/15 04:32:57 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [3][10/31] lr: 3.5786e-04 eta: 0:02:37 time: 0.5224 data_time: 0.0146 memory: 3282 loss: 1.1179 loss_rpn_cls: 0.0411 loss_rpn_bbox: 0.0203 loss_cls: 0.2903 acc: 96.0938 loss_bbox: 0.3861 loss_mask: 0.3801\n", + "08/15 04:33:02 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [3][20/31] lr: 4.0791e-04 eta: 0:02:31 time: 0.5148 data_time: 0.0105 memory: 3283 loss: 0.9559 loss_rpn_cls: 0.0353 loss_rpn_bbox: 0.0189 loss_cls: 0.2542 acc: 95.4102 loss_bbox: 0.3753 loss_mask: 0.2723\n", + "08/15 04:33:08 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [3][30/31] lr: 4.5796e-04 eta: 0:02:27 time: 0.5319 data_time: 0.0118 memory: 3283 loss: 0.9498 loss_rpn_cls: 0.0316 loss_rpn_bbox: 0.0194 loss_cls: 0.2459 acc: 86.4258 loss_bbox: 0.4030 loss_mask: 0.2500\n", + "08/15 04:33:08 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-3x_balloon_20230815_043154\n", + "08/15 04:33:08 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Saving checkpoint at 3 epochs\n", + "08/15 04:33:20 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [3][10/13] eta: 0:00:03 time: 1.0153 data_time: 0.0759 memory: 2785 \n", + "08/15 04:33:21 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", + "Loading and preparing results...\n", + "DONE (t=0.00s)\n", + "creating index...\n", + "index created!\n", + "Running per image evaluation...\n", + "Evaluate annotation type *bbox*\n", + "DONE (t=0.16s).\n", + "Accumulating evaluation results...\n", + "DONE (t=0.06s).\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.515\n", + " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.736\n", + " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.597\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.000\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.266\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.621\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.644\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.644\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.644\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.000\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.525\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.719\n", + "08/15 04:33:21 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.515 0.736 0.597 0.000 0.266 0.621\n", + "08/15 04:33:21 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating segm...\n", + "Loading and preparing results...\n", + "DONE (t=0.04s)\n", + "creating index...\n", + "index created!\n", + "Running per image evaluation...\n", + "Evaluate annotation type *segm*\n", + "DONE (t=0.21s).\n", + "Accumulating evaluation results...\n", + "DONE (t=0.06s).\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.622\n", + " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.733\n", + " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.729\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.001\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.331\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.734\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.764\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.764\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.764\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.150\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.750\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.803\n", + "08/15 04:33:22 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - segm_mAP_copypaste: 0.622 0.733 0.729 0.001 0.331 0.734\n", + "08/15 04:33:22 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [3][13/13] coco/bbox_mAP: 0.5150 coco/bbox_mAP_50: 0.7360 coco/bbox_mAP_75: 0.5970 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2660 coco/bbox_mAP_l: 0.6210 coco/segm_mAP: 0.6220 coco/segm_mAP_50: 0.7330 coco/segm_mAP_75: 0.7290 coco/segm_mAP_s: 0.0010 coco/segm_mAP_m: 0.3310 coco/segm_mAP_l: 0.7340 data_time: 0.0597 time: 0.8604\n", + "08/15 04:33:27 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [4][10/31] lr: 5.1301e-04 eta: 0:02:22 time: 0.5251 data_time: 0.0119 memory: 3283 loss: 0.8807 loss_rpn_cls: 0.0273 loss_rpn_bbox: 0.0187 loss_cls: 0.2192 acc: 95.1172 loss_bbox: 0.4036 loss_mask: 0.2119\n", + "08/15 04:33:32 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [4][20/31] lr: 5.6306e-04 eta: 0:02:16 time: 0.5211 data_time: 0.0099 memory: 3004 loss: 0.8362 loss_rpn_cls: 0.0217 loss_rpn_bbox: 0.0173 loss_cls: 0.2001 acc: 97.4609 loss_bbox: 0.4115 loss_mask: 0.1856\n", + "08/15 04:33:38 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [4][30/31] lr: 6.1311e-04 eta: 0:02:11 time: 0.5334 data_time: 0.0108 memory: 3284 loss: 0.7356 loss_rpn_cls: 0.0198 loss_rpn_bbox: 0.0148 loss_cls: 0.1705 acc: 99.1211 loss_bbox: 0.3685 loss_mask: 0.1621\n", + "08/15 04:33:38 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-3x_balloon_20230815_043154\n", + "08/15 04:33:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [5][10/31] lr: 6.6817e-04 eta: 0:02:05 time: 0.5305 data_time: 0.0137 memory: 3283 loss: 0.6874 loss_rpn_cls: 0.0174 loss_rpn_bbox: 0.0127 loss_cls: 0.1545 acc: 95.1172 loss_bbox: 0.3607 loss_mask: 0.1421\n", + "08/15 04:33:49 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [5][20/31] lr: 7.1822e-04 eta: 0:01:59 time: 0.5216 data_time: 0.0115 memory: 3283 loss: 0.6122 loss_rpn_cls: 0.0162 loss_rpn_bbox: 0.0123 loss_cls: 0.1331 acc: 93.5547 loss_bbox: 0.3217 loss_mask: 0.1289\n", + "08/15 04:33:54 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [5][30/31] lr: 7.6827e-04 eta: 0:01:55 time: 0.5289 data_time: 0.0125 memory: 3283 loss: 0.5432 loss_rpn_cls: 0.0145 loss_rpn_bbox: 0.0122 loss_cls: 0.1175 acc: 93.7500 loss_bbox: 0.2771 loss_mask: 0.1219\n", + "08/15 04:33:55 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-3x_balloon_20230815_043154\n", + "08/15 04:34:00 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [6][10/31] lr: 8.2332e-04 eta: 0:01:49 time: 0.5335 data_time: 0.0137 memory: 3284 loss: 0.4541 loss_rpn_cls: 0.0139 loss_rpn_bbox: 0.0115 loss_cls: 0.0988 acc: 94.2383 loss_bbox: 0.2158 loss_mask: 0.1141\n", + "08/15 04:34:06 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [6][20/31] lr: 8.7337e-04 eta: 0:01:44 time: 0.5318 data_time: 0.0095 memory: 3283 loss: 0.4245 loss_rpn_cls: 0.0130 loss_rpn_bbox: 0.0122 loss_cls: 0.0944 acc: 99.4141 loss_bbox: 0.1922 loss_mask: 0.1127\n", + "08/15 04:34:11 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [6][30/31] lr: 9.2342e-04 eta: 0:01:39 time: 0.5465 data_time: 0.0102 memory: 3497 loss: 0.3810 loss_rpn_cls: 0.0133 loss_rpn_bbox: 0.0126 loss_cls: 0.0883 acc: 98.1445 loss_bbox: 0.1617 loss_mask: 0.1052\n", + "08/15 04:34:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-3x_balloon_20230815_043154\n", + "08/15 04:34:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Saving checkpoint at 6 epochs\n", + "08/15 04:34:17 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [6][10/13] eta: 0:00:01 time: 0.6382 data_time: 0.0735 memory: 1810 \n", + "08/15 04:34:18 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", + "Loading and preparing results...\n", + "DONE (t=0.00s)\n", + "creating index...\n", + "index created!\n", + "Running per image evaluation...\n", + "Evaluate annotation type *bbox*\n", + "DONE (t=0.03s).\n", + "Accumulating evaluation results...\n", + "DONE (t=0.02s).\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.709\n", + " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.854\n", + " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.799\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.000\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.474\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.795\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.776\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.776\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.776\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.000\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.733\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.833\n", + "08/15 04:34:18 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.709 0.854 0.799 0.000 0.474 0.795\n", + "08/15 04:34:18 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating segm...\n", + "Loading and preparing results...\n", + "DONE (t=0.00s)\n", + "creating index...\n", + "index created!\n", + "Running per image evaluation...\n", + "Evaluate annotation type *segm*\n", + "DONE (t=0.03s).\n", + "Accumulating evaluation results...\n", + "DONE (t=0.01s).\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.762\n", + " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.834\n", + " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.834\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.000\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.453\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.860\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.822\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.822\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.822\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.000\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.758\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.889\n", + "08/15 04:34:18 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - segm_mAP_copypaste: 0.762 0.834 0.834 0.000 0.453 0.860\n", + "08/15 04:34:18 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [6][13/13] coco/bbox_mAP: 0.7090 coco/bbox_mAP_50: 0.8540 coco/bbox_mAP_75: 0.7990 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.4740 coco/bbox_mAP_l: 0.7950 coco/segm_mAP: 0.7620 coco/segm_mAP_50: 0.8340 coco/segm_mAP_75: 0.8340 coco/segm_mAP_s: 0.0000 coco/segm_mAP_m: 0.4530 coco/segm_mAP_l: 0.8600 data_time: 0.0661 time: 0.3035\n", + "08/15 04:34:23 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [7][10/31] lr: 9.7848e-04 eta: 0:01:33 time: 0.5453 data_time: 0.0117 memory: 3283 loss: 0.3427 loss_rpn_cls: 0.0123 loss_rpn_bbox: 0.0119 loss_cls: 0.0819 acc: 98.7305 loss_bbox: 0.1376 loss_mask: 0.0989\n", + "08/15 04:34:29 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [7][20/31] lr: 1.0285e-03 eta: 0:01:28 time: 0.5473 data_time: 0.0103 memory: 3282 loss: 0.2958 loss_rpn_cls: 0.0098 loss_rpn_bbox: 0.0095 loss_cls: 0.0710 acc: 97.1680 loss_bbox: 0.1132 loss_mask: 0.0922\n", + "08/15 04:34:35 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [7][30/31] lr: 1.0786e-03 eta: 0:01:23 time: 0.5543 data_time: 0.0105 memory: 3448 loss: 0.2984 loss_rpn_cls: 0.0092 loss_rpn_bbox: 0.0104 loss_cls: 0.0723 acc: 91.1133 loss_bbox: 0.1114 loss_mask: 0.0952\n", + "08/15 04:34:35 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-3x_balloon_20230815_043154\n", + "08/15 04:34:41 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [8][10/31] lr: 1.1336e-03 eta: 0:01:17 time: 0.5499 data_time: 0.0125 memory: 3283 loss: 0.2648 loss_rpn_cls: 0.0083 loss_rpn_bbox: 0.0094 loss_cls: 0.0634 acc: 97.7539 loss_bbox: 0.0944 loss_mask: 0.0894\n", + "08/15 04:34:47 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [8][20/31] lr: 1.1837e-03 eta: 0:01:12 time: 0.5652 data_time: 0.0119 memory: 3283 loss: 0.2537 loss_rpn_cls: 0.0073 loss_rpn_bbox: 0.0086 loss_cls: 0.0605 acc: 99.2188 loss_bbox: 0.0873 loss_mask: 0.0900\n", + "08/15 04:34:52 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [8][30/31] lr: 1.2337e-03 eta: 0:01:07 time: 0.5620 data_time: 0.0117 memory: 3283 loss: 0.2575 loss_rpn_cls: 0.0073 loss_rpn_bbox: 0.0099 loss_cls: 0.0642 acc: 95.4102 loss_bbox: 0.0891 loss_mask: 0.0870\n", + "08/15 04:34:52 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-3x_balloon_20230815_043154\n", + "08/15 04:34:58 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [9][10/31] lr: 1.2888e-04 eta: 0:01:01 time: 0.5621 data_time: 0.0160 memory: 3283 loss: 0.2680 loss_rpn_cls: 0.0079 loss_rpn_bbox: 0.0108 loss_cls: 0.0709 acc: 95.8008 loss_bbox: 0.0934 loss_mask: 0.0851\n", + "08/15 04:35:04 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [9][20/31] lr: 1.3388e-04 eta: 0:00:56 time: 0.5631 data_time: 0.0150 memory: 3283 loss: 0.2295 loss_rpn_cls: 0.0063 loss_rpn_bbox: 0.0082 loss_cls: 0.0603 acc: 99.1211 loss_bbox: 0.0787 loss_mask: 0.0760\n", + "08/15 04:35:09 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [9][30/31] lr: 1.3889e-04 eta: 0:00:50 time: 0.5553 data_time: 0.0133 memory: 3091 loss: 0.2444 loss_rpn_cls: 0.0064 loss_rpn_bbox: 0.0094 loss_cls: 0.0650 acc: 96.5820 loss_bbox: 0.0847 loss_mask: 0.0789\n", + "08/15 04:35:09 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-3x_balloon_20230815_043154\n", + "08/15 04:35:09 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Saving checkpoint at 9 epochs\n", + "08/15 04:35:16 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [9][10/13] eta: 0:00:01 time: 0.5437 data_time: 0.0917 memory: 1693 \n", + "08/15 04:35:16 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", + "Loading and preparing results...\n", + "DONE (t=0.00s)\n", + "creating index...\n", + "index created!\n", + "Running per image evaluation...\n", + "Evaluate annotation type *bbox*\n", + "DONE (t=0.04s).\n", + "Accumulating evaluation results...\n", + "DONE (t=0.02s).\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.741\n", + " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.869\n", + " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.807\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.000\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.473\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.833\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.794\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.794\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.794\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.000\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.717\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.864\n", + "08/15 04:35:16 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.741 0.869 0.807 0.000 0.473 0.833\n", + "08/15 04:35:16 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating segm...\n", + "Loading and preparing results...\n", + "DONE (t=0.00s)\n", + "creating index...\n", + "index created!\n", + "Running per image evaluation...\n", + "Evaluate annotation type *segm*\n", + "DONE (t=0.04s).\n", + "Accumulating evaluation results...\n", + "DONE (t=0.02s).\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.779\n", + " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.847\n", + " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.847\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.000\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.476\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.877\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.830\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.830\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.830\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.000\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.767\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.897\n", + "08/15 04:35:16 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - segm_mAP_copypaste: 0.779 0.847 0.847 0.000 0.476 0.877\n", + "08/15 04:35:16 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [9][13/13] coco/bbox_mAP: 0.7410 coco/bbox_mAP_50: 0.8690 coco/bbox_mAP_75: 0.8070 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.4730 coco/bbox_mAP_l: 0.8330 coco/segm_mAP: 0.7790 coco/segm_mAP_50: 0.8470 coco/segm_mAP_75: 0.8470 coco/segm_mAP_s: 0.0000 coco/segm_mAP_m: 0.4760 coco/segm_mAP_l: 0.8770 data_time: 0.1157 time: 0.3601\n", + "08/15 04:35:22 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [10][10/31] lr: 1.4439e-04 eta: 0:00:44 time: 0.5374 data_time: 0.0169 memory: 3284 loss: 0.2415 loss_rpn_cls: 0.0063 loss_rpn_bbox: 0.0093 loss_cls: 0.0644 acc: 98.3398 loss_bbox: 0.0832 loss_mask: 0.0784\n", + "08/15 04:35:27 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [10][20/31] lr: 1.4940e-04 eta: 0:00:39 time: 0.5342 data_time: 0.0130 memory: 3283 loss: 0.2161 loss_rpn_cls: 0.0048 loss_rpn_bbox: 0.0080 loss_cls: 0.0573 acc: 99.4141 loss_bbox: 0.0721 loss_mask: 0.0738\n", + "08/15 04:35:33 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [10][30/31] lr: 1.5440e-04 eta: 0:00:33 time: 0.5374 data_time: 0.0129 memory: 3428 loss: 0.2210 loss_rpn_cls: 0.0054 loss_rpn_bbox: 0.0086 loss_cls: 0.0584 acc: 99.8047 loss_bbox: 0.0737 loss_mask: 0.0749\n", + "08/15 04:35:33 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-3x_balloon_20230815_043154\n", + "08/15 04:35:38 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [11][10/31] lr: 1.5991e-04 eta: 0:00:27 time: 0.5344 data_time: 0.0149 memory: 3067 loss: 0.2405 loss_rpn_cls: 0.0052 loss_rpn_bbox: 0.0099 loss_cls: 0.0639 acc: 98.8281 loss_bbox: 0.0807 loss_mask: 0.0808\n", + "08/15 04:35:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [11][20/31] lr: 1.6491e-04 eta: 0:00:22 time: 0.5326 data_time: 0.0105 memory: 3283 loss: 0.2297 loss_rpn_cls: 0.0047 loss_rpn_bbox: 0.0094 loss_cls: 0.0606 acc: 96.7773 loss_bbox: 0.0768 loss_mask: 0.0781\n", + "08/15 04:35:49 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [11][30/31] lr: 1.6992e-04 eta: 0:00:17 time: 0.5409 data_time: 0.0115 memory: 3283 loss: 0.2221 loss_rpn_cls: 0.0048 loss_rpn_bbox: 0.0092 loss_cls: 0.0595 acc: 95.3125 loss_bbox: 0.0753 loss_mask: 0.0733\n", + "08/15 04:35:50 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-3x_balloon_20230815_043154\n", + "08/15 04:35:55 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [12][10/31] lr: 1.7543e-05 eta: 0:00:11 time: 0.5311 data_time: 0.0129 memory: 3200 loss: 0.2094 loss_rpn_cls: 0.0054 loss_rpn_bbox: 0.0084 loss_cls: 0.0555 acc: 96.9727 loss_bbox: 0.0689 loss_mask: 0.0711\n", + "08/15 04:36:00 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [12][20/31] lr: 1.8043e-05 eta: 0:00:05 time: 0.5275 data_time: 0.0098 memory: 3448 loss: 0.2108 loss_rpn_cls: 0.0047 loss_rpn_bbox: 0.0089 loss_cls: 0.0560 acc: 99.5117 loss_bbox: 0.0698 loss_mask: 0.0713\n", + "08/15 04:36:06 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [12][30/31] lr: 1.8544e-05 eta: 0:00:00 time: 0.5425 data_time: 0.0111 memory: 3282 loss: 0.2048 loss_rpn_cls: 0.0043 loss_rpn_bbox: 0.0080 loss_cls: 0.0540 acc: 98.2422 loss_bbox: 0.0695 loss_mask: 0.0690\n", + "08/15 04:36:06 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: mask-rcnn_r50-caffe_fpn_ms-poly-3x_balloon_20230815_043154\n", + "08/15 04:36:06 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Saving checkpoint at 12 epochs\n", + "08/15 04:36:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [12][10/13] eta: 0:00:01 time: 0.4801 data_time: 0.0931 memory: 1589 \n", + "08/15 04:36:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", + "Loading and preparing results...\n", + "DONE (t=0.00s)\n", + "creating index...\n", + "index created!\n", + "Running per image evaluation...\n", + "Evaluate annotation type *bbox*\n", + "DONE (t=0.02s).\n", + "Accumulating evaluation results...\n", + "DONE (t=0.01s).\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.740\n", + " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.868\n", + " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.804\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.000\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.506\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.828\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.798\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.798\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.798\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.000\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.742\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.861\n", + "08/15 04:36:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.740 0.868 0.804 0.000 0.506 0.828\n", + "08/15 04:36:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating segm...\n", + "Loading and preparing results...\n", + "DONE (t=0.00s)\n", + "creating index...\n", + "index created!\n", + "Running per image evaluation...\n", + "Evaluate annotation type *segm*\n", + "DONE (t=0.02s).\n", + "Accumulating evaluation results...\n", + "DONE (t=0.01s).\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.776\n", + " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.845\n", + " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.845\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.000\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.481\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.868\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.832\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.832\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.832\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.000\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.775\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.897\n", + "08/15 04:36:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - segm_mAP_copypaste: 0.776 0.845 0.845 0.000 0.481 0.868\n", + "08/15 04:36:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [12][13/13] coco/bbox_mAP: 0.7400 coco/bbox_mAP_50: 0.8680 coco/bbox_mAP_75: 0.8040 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.5060 coco/bbox_mAP_l: 0.8280 coco/segm_mAP: 0.7760 coco/segm_mAP_50: 0.8450 coco/segm_mAP_75: 0.8450 coco/segm_mAP_s: 0.0000 coco/segm_mAP_m: 0.4810 coco/segm_mAP_l: 0.8680 data_time: 0.0903 time: 0.2892\n" + ] + } + ], + "source": [ + "!python tools/train.py {config}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_vYQF5K2NqqI" + }, + "source": [ + "### Understand the log\n", + "From the log, we can have a basic understanding on the training process and know how well the detector is trained.\n", + "\n", + "First, since the dataset we are using is small, we loaded a Mask R-CNN model and finetune it for detection. Because the original Mask R-CNN is trained on COCO dataset that contains 80 classes but KITTI Tiny dataset only have 3 classes. Therefore, the last FC layers of the pre-trained Mask R-CNN for classification and regression have different weight shape and are not used. The pre-trained weights of mask prediction layer `mask_head.conv_logits` also does not matches the current model and is not used due to similar reason.\n", + "\n", + "Third, after training, the detector is evaluated by the default COCO-style evaluation. The results show that the detector achieves 79.6 bbox AP and 81.5 mask AP on the val dataset, not bad!\n", + "\n", + " We can also check the tensorboard to see the curves." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gbLNlJR-RYYd" + }, + "outputs": [], + "source": [ + "%pip install tensorboard -i https://mirrors.ustc.edu.cn/pypi/web/simple" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "id": "PW2NAam_7irv" + }, + "outputs": [], + "source": [ + "# load tensorboard in jupyter notebook\n", + "%load_ext tensorboard" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4G9MCbL2RYYd" + }, + "outputs": [], + "source": [ + "# see curves in tensorboard\n", + "# if you see please run it again\n", + "%tensorboard --logdir tutorial_exps/" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MfQ-yspZLuuI" + }, + "source": [ + "## Test the Trained Detector\n", + "\n", + "After finetuning the detector, let's visualize the prediction results!" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "_MuZurfGLq0p", + "outputId": "4b25759c-8e22-405e-a061-3abc44e38043" + }, + "outputs": [ { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "6rzruCwFgPXm" - }, - "source": [ - "## What to Do Next?\n", - "\n", - "So far, we have learnt how to test and train Mask R-CNN. To further explore the segmentation task, you could do several other things as shown below:\n", - "\n", - "- Try cascade methods, e.g., [Cascade Mask R-CNN](https://github.com/open-mmlab/mmdetection/tree/master/configs/cascade_rcnn) and [HTC](https://github.com/open-mmlab/mmdetection/tree/master/configs/htc) in [MMDetection model zoo](https://github.com/open-mmlab/mmdetection/blob/master/docs/en/model_zoo.md). They are powerful detectors that are ranked high in many benchmarks, e.g., COCO dataset.\n", - "- Try single-stage methods, e.g., [K-Net](https://github.com/ZwwWayne/K-Net) and [Dense-RepPoints](https://github.com/justimyhxu/Dense-RepPoints). These two algorithms are based on MMDetection. Box-free instance segmentation is a new trend in the instance segmentation community.\n", - "- Try semantic segmentation. Semantic segmentation is also a popular task with wide applications. You can explore [MMSegmentation](https://github.com/open-mmlab/mmsegmentation/); we also provide a [colab tutorial](https://github.com/open-mmlab/mmsegmentation/blob/master/demo/MMSegmentation_Tutorial.ipynb) for semantic segmentation using MMSegmentation.\n" - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "Loads checkpoint by local backend from path: tutorial_exps/epoch_12.pth\n", + "\n", + " ignored_instances: \n", + " pred_instances: \n", + ") at 0x79a3a96e3130>\n" + ] } - ], - "metadata": { - "accelerator": "GPU", + ], + "source": [ + "import mmcv\n", + "from mmdet.apis import init_detector, inference_detector\n", + "img = mmcv.imread('./ballondatasets/balloon/train/7178882742_f090f3ce56_k.jpg',channel_order='rgb')\n", + "checkpoint_file = 'tutorial_exps/epoch_12.pth'\n", + "model = init_detector(cfg, checkpoint_file, device='cpu')\n", + "new_result = inference_detector(model, img)\n", + "print(new_result)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { "colab": { - "collapsed_sections": [], - "name": "tutorial_03_image_segmentation_final.ipynb", - "provenance": [], - "toc_visible": true - }, - "kernelspec": { - "display_name": "Python 3.7.12 ('mmlab2')", - "language": "python", - "name": "python3" + "base_uri": "https://localhost:8080/", + "height": 461 }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.15" - }, - "vscode": { - "interpreter": { - "hash": "8868640c17582ff5a3e06365ba2fb344ce697cf42d4745ae8b85a9738303c037" - } + "id": "7SSTauCURYYe", + "outputId": "3becb5ea-cb4e-44f6-d93d-c10194a2263b" + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" } + ], + "source": [ + "from mmengine.visualization import Visualizer\n", + "# get built visualizer\n", + "visualizer_now = Visualizer.get_current_instance()\n", + "# the dataset_meta is loaded from the checkpoint and\n", + "# then pass to the model in init_detector\n", + "visualizer_now.dataset_meta = model.dataset_meta\n", + "# show the results\n", + "visualizer_now.add_datasample(\n", + " 'new_result',\n", + " img,\n", + " data_sample=new_result,\n", + " draw_gt=False,\n", + " wait_time=0,\n", + " out_file=None,\n", + " pred_score_thr=0.5\n", + ")\n", + "visualizer_now.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6rzruCwFgPXm" + }, + "source": [ + "## What to Do Next?\n", + "\n", + "So far, we have learnt how to test and train Mask R-CNN. To further explore the segmentation task, you could do several other things as shown below:\n", + "\n", + "- Try cascade methods, e.g., [Cascade Mask R-CNN](https://github.com/open-mmlab/mmdetection/tree/master/configs/cascade_rcnn) and [HTC](https://github.com/open-mmlab/mmdetection/tree/master/configs/htc) in [MMDetection model zoo](https://github.com/open-mmlab/mmdetection/blob/master/docs/en/model_zoo.md). They are powerful detectors that are ranked high in many benchmarks, e.g., COCO dataset.\n", + "- Try single-stage methods, e.g., [K-Net](https://github.com/ZwwWayne/K-Net) and [Dense-RepPoints](https://github.com/justimyhxu/Dense-RepPoints). These two algorithms are based on MMDetection. Box-free instance segmentation is a new trend in the instance segmentation community.\n", + "- Try semantic segmentation. Semantic segmentation is also a popular task with wide applications. You can explore [MMSegmentation](https://github.com/open-mmlab/mmsegmentation/); we also provide a [colab tutorial](https://github.com/open-mmlab/mmsegmentation/blob/master/demo/MMSegmentation_Tutorial.ipynb) for semantic segmentation using MMSegmentation.\n" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" }, - "nbformat": 4, - "nbformat_minor": 0 + "vscode": { + "interpreter": { + "hash": "8868640c17582ff5a3e06365ba2fb344ce697cf42d4745ae8b85a9738303c037" + } + } + }, + "nbformat": 4, + "nbformat_minor": 1 } From 987f1f0a9a36e69456b6d75e6184707ef80b0560 Mon Sep 17 00:00:00 2001 From: zhangzhidaSunny <84485935+zhangzhidaSunny@users.noreply.github.com> Date: Thu, 17 Aug 2023 17:53:53 +0800 Subject: [PATCH 23/63] [CodeCamp2023-498] Translation into Chinese of `tracking_train_test_zh_cn.md` (#10756) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Haian Huang(深度眸) <1286304229@qq.com> --- .../user_guides/tracking_train_test_zh_cn.md | 229 ++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 docs/zh_cn/user_guides/tracking_train_test_zh_cn.md diff --git a/docs/zh_cn/user_guides/tracking_train_test_zh_cn.md b/docs/zh_cn/user_guides/tracking_train_test_zh_cn.md new file mode 100644 index 00000000000..0542b9afcb0 --- /dev/null +++ b/docs/zh_cn/user_guides/tracking_train_test_zh_cn.md @@ -0,0 +1,229 @@ +# 学习训练和测试 + +## 训练 + +本节将介绍如何在支持的数据集上训练现有模型。 +支持以下训练环境: + +- CPU +- 单 GPU +- 单节点多 GPU +- 多节点 + +您还可以使用 Slurm 管理作业。 + +重要: + +- 在训练过程中,您可以通过修改 `train_cfg` 来改变评估间隔。 + `train_cfg = dict(val_interval=10)`。这意味着每 10 个 epoch 对模型进行一次评估。 +- 所有配置文件中的默认学习率为 8 个 GPU。 + 根据[线性扩展规则](https://arxiv.org/abs/1706.02677)、 + 如果在每个 GPU 上使用不同的 GPU 或图像,则需要设置与批次大小成比例的学习率、 + 例如,8 个 GPU * 1 个图像/GPU 的学习率为 `lr=0.01`,16 个 GPU * 2 个图像/GPU 的学习率为 lr=0.04。 +- 在训练过程中,日志文件和检查点将保存到工作目录、 + 该目录由 CLI 参数 `--work-dir`指定。它默认使用 `./work_dirs/CONFIG_NAME`。 +- 如果需要混合精度训练,只需指定 CLI 参数 `--amp`。 + +#### 1.在 CPU 上训练 + +该模型默认放在 cuda 设备上。 +仅当没有 cuda 设备时,该模型才会放在 CPU 上。 +因此,如果要在 CPU 上训练模型,则需要先 `export CUDA_VISIBLE_DEVICES=-1` 以禁用 GPU 可见性。 +更多细节参见 [MMEngine](https://github.com/open-mmlab/mmengine/blob/ca282aee9e402104b644494ca491f73d93a9544f/mmengine/runner/runner.py#L849-L850). + +```shell 脚本 +CUDA_VISIBLE_DEVICES=-1 python tools/train.py ${CONFIG_FILE} [optional arguments] +``` + +在 CPU 上训练 MOT 模型 QDTrack 的示例: + +```shell 脚本 +CUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py +``` + +#### 2. 在单 GPU 上训练 + +如果您想在单 GPU 上训练模型, 您可以按照如下方法直接使用 `tools/train.py`. + +```shell 脚本 +python tools/train.py ${CONFIG_FILE} [optional arguments] +``` + +您可以使用 `export CUDA_VISIBLE_DEVICES=$GPU_ID` 命令选择GPU. + +在单 GPU 上训练 MOT 模型 QDTrack 的示例: + +```shell 脚本 +CUDA_VISIBLE_DEVICES=2 python tools/train.py configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py +``` + +#### 3. 在单节点多 GPU 上进行训练 + +我们提供了 `tools/dist_train.sh`,用于在多个 GPU 上启动训练。 +基本用法如下。 + +```shell 脚本 +bash ./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments] +``` + +如果您想在一台机器上启动多个作业、 +例如,在拥有 8 个 GPU 的机器上启动 2 个 4-GPU 训练作业、 +需要为每个作业指定不同的端口(默认为 29500),以避免通信冲突。 + +例如,可以在命令中设置端口如下。 + +```shell 脚本 +CUDA_VISIBLE_DEVICES=0,1,2,3 PORT=29500 ./tools/dist_train.sh ${CONFIG_FILE} 4 +CUDA_VISIBLE_DEVICES=4,5,6,7 PORT=29501 ./tools/dist_train.sh ${CONFIG_FILE} 4 +``` + +在单节点多 GPU 上训练 MOT 模型 QDTrack 的示例: + +```shell脚本 +bash ./tools/dist_train.sh configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py 8 +``` + +#### 4. 在多个节点上训练 + +如果使用以太网连接多台机器,只需运行以下命令即可: + +在第一台机器上 + +```shell 脚本 +NNODES=2 NODE_RANK=0 PORT=$MASTER_PORT MASTER_ADDR=$MASTER_ADDR bash tools/dist_train.sh $CONFIG $GPUS +``` + +在第二台机器上: + +```shell script +NNODES=2 NODE_RANK=1 PORT=$MASTER_PORT MASTER_ADDR=$MASTER_ADDR bash tools/dist_train.sh $CONFIG $GPUS +``` + +如果没有 InfiniBand 等高速网络,速度通常会很慢。 + +#### 5. 使用 Slurm 进行训练 + +[Slurm](https://slurm.schedmd.com/)是一个用于计算集群的优秀作业调度系统。 +在 Slurm 管理的集群上,您可以使用 `slurm_train.sh` 生成训练作业。 +它支持单节点和多节点训练。 + +基本用法如下。 + +```shell 脚本 +bash ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${WORK_DIR} ${GPUS} +``` + +使用 Slurm 训练 MOT 模型 QDTrack 的示例: + +```shell脚本 +PORT=29501 \ +GPUS_PER_NODE=8 \ +SRUN_ARGS="--quotatype=reserved" \ +bash ./tools/slurm_train.sh \ +mypartition \ +mottrack +configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py +./work_dirs/QDTrack \ +8 +``` + +## 测试 + +本节将介绍如何在支持的数据集上测试现有模型。 +支持以下测试环境: + +- CPU +- 单 GPU +- 单节点多 GPU +- 多节点 + +您还可以使用 Slurm 管理作业。 + +重要: + +- 在 MOT 中,某些算法(如 `DeepSORT`、`SORT`、`StrongSORT`)需要分别加载 `reid` 的权重和 `detector` 的权重。 + 其他算法,如`ByteTrack`、`OCSORT`和`QDTrack`则不需要。因此,我们提供了 `--checkpoint`、`--detector` 和 `--reid`来加载权重。 +- 我们提供了两种评估和测试模型的方法,即基于视频的测试和基于图像的测试。 有些算法如 `StrongSORT`, `Mask2former` 只支持基于视频的测试. 如果您的 GPU 内存无法容纳整个视频,您可以通过设置采样器类型来切换测试方式。 + 例如 + 基于视频的测试:`sampler=dict(type='DefaultSampler', shuffle=False, round_up=False)` + 基于图像的测试:`sampler=dict(type='TrackImgSampler')` +- 您可以通过修改 evaluator 中的关键字 `outfile_prefix` 来设置结果保存路径。 + 例如,`val_evaluator = dict(outfile_prefix='results/sort_mot17')`。 + 否则,将创建一个临时文件,并在评估后删除。 +- 如果您只想要格式化的结果而不需要评估,可以设置 `format_only=True`。 + 例如,`test_evaluator = dict(type='MOTChallengeMetric', metric=['HOTA', 'CLEAR', 'Identity'], outfile_prefix='sort_mot17_results', format_only=True)` + +#### 1. 在 CPU 上测试 + +模型默认在 cuda 设备上运行。 +只有在没有 cuda 设备的情况下,模型才会在 CPU 上运行。 +因此,如果要在 CPU 上测试模型,您需要 `export CUDA_VISIBLE_DEVICES=-1` 先禁用 GPU 可见性。 + +更多细节请参考[MMEngine](https://github.com/open-mmlab/mmengine/blob/ca282aee9e402104b644494ca491f73d93a9544f/mmengine/runner/runner.py#L849-L850). + +```shell 脚本 +CUDA_VISIBLE_DEVICES=-1 python tools/test_tracking.py ${CONFIG_FILE} [optional arguments] +``` + +在 CPU 上测试 MOT 模型 SORT 的示例: + +```shell 脚本 +CUDA_VISIBLE_DEVICES=-1 python tools/test_tracking.py configs/sort/sort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py --detector ${CHECKPOINT_FILE} +``` + +#### 2. 在单 GPU 上测试 + +如果您想在单 GPU 上测试模型,可以直接使用 `tools/test_tracking.py`,如下所示。 + +```shell 脚本 +python tools/test_tracking.py ${CONFIG_FILE} [optional arguments] +``` + +您可以使用 `export CUDA_VISIBLE_DEVICES=$GPU_ID` 来选择 GPU。 + +在单 GPU 上测试 MOT 模型 QDTrack 的示例: + +```shell 脚本 +CUDA_VISIBLE_DEVICES=2 python tools/test_tracking.py configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py --detector ${CHECKPOINT_FILE} +``` + +#### 3. 在单节点多 GPU 上进行测试 + +我们提供了 `tools/dist_test_tracking.sh`,用于在多个 GPU 上启动测试。 +基本用法如下。 + +```shell 脚本 +bash ./tools/dist_test_tracking.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments] +``` + +在单节点多 GPU 上测试 MOT 模型 DeepSort 的示例: + +```shell 脚本 +bash ./tools/dist_test_tracking.sh configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py 8 --detector ${CHECKPOINT_FILE} --reid ${CHECKPOINT_FILE} +``` + +#### 4. 在多个节点上测试 + +您可以在多个节点上进行测试,这与 "在多个节点上进行训练 "类似。 + +#### 5. 使用 Slurm 进行测试 + +在 Slurm 管理的集群上,您可以使用 `slurm_test_tracking.sh` 生成测试作业。 +它支持单节点和多节点测试。 + +基本用法如下。 + +```shell 脚本 +[GPUS=${GPUS}] bash tools/slurm_test_tracking.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} [optional arguments] +``` + +使用 Slurm 测试 VIS 模型 Mask2former 的示例: + +```shell 脚本 +GPUS=8 +bash tools/slurm_test_tracking.sh \ +mypartition \ +vis \ +configs/mask2former_vis/mask2former_r50_8xb2-8e_youtubevis2021.py \ +--checkpoint ${CHECKPOINT_FILE} +``` From 9e752d8d59a72905b892cd09693a0af1824deeec Mon Sep 17 00:00:00 2001 From: yeungkong <36956620+yeungkong@users.noreply.github.com> Date: Fri, 18 Aug 2023 16:33:49 +0800 Subject: [PATCH 24/63] [CodeCamp2023-495]Translation into Chinese of an English document. (#10805) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Haian Huang(深度眸) <1286304229@qq.com> --- docs/zh_cn/user_guides/tracking_config.md | 109 ++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 docs/zh_cn/user_guides/tracking_config.md diff --git a/docs/zh_cn/user_guides/tracking_config.md b/docs/zh_cn/user_guides/tracking_config.md new file mode 100644 index 00000000000..4a20da775ae --- /dev/null +++ b/docs/zh_cn/user_guides/tracking_config.md @@ -0,0 +1,109 @@ +# 学习更多与配置相关的事 + +我们用 python 文档作为我们的配置系统。你可以在 `MMDetection/configs` 底下找到所有已提供的配置文件。 + +我们把模块化和继承化设计融入我们的配置系统,这使我们很方便去进行各种实验。如果你想查看相关的配置文件,你可以跑 `python tools/misc/print_config.py /PATH/TO/CONFIG` 去看完整的详细配置。 + +## 完整配置的简要说明 + +一个完整的配置通常包含以下主要的字段: + +`model`:一个模型的基本配置,包含 `data_preprocessor`、`detector`、`motion` 之类的模块,还有 `train_cfg`、`test_cfg` 等等; + +`train_dataloader`:训练数据集的配置,通常包含 `batch_size`、 `num_workers`、 `sampler`、 `dataset` 等等; + +`val_dataloader`:验证数据集的配置,与训练数据集的配置类似; + +`test_dataloader`:测试数据集的配置,与训练数据集的配置类似; + +`val_evaluator`:验证评估器的配置,例如 `type='MOTChallengeMetrics'` 是 MOT 任务里面的测量标准; + +`test_evaluator`:测试评估器的配置,与验证评估器的配置类似; + +`train_cfg`:训练循环的配置,例如 `type='EpochBasedTrainLoop'` ; + +`val_cfg`:验证循环的配置,例如 `type='VideoValLoop'` ; + +`test_cfg`:测试循环的配置,例如 `type='VideoTestLoop'` ; + +`default_hooks`:默认鱼钩的配置,包含计时器、日志、参数调度程序、检查点、样本种子、可视化; + +`vis_backends`:可视化后端的配置,默认使用 `type='LocalVisBackend'` ; + +`visualizer`:可视化工具的配置,例如MOT任务使用 `type='TrackLocalVisualizer'` ; + +`param_scheduler`:参数调度程序的配置,通常里面设置学习率调度程序; + +`optim_wrapper`:优化器封装的配置,包含优化相关的信息,例如优化器、梯度剪裁等; + +`load_from`:加载预训练模型的路径; + +`resume`:布尔值,如果是 `True` ,会从 `load_from` 加载模型的检查点,训练会恢复至检查点的迭代次数。 + +## 通过脚本参数修改配置 + +当使用 `tools/train.py` 或 `tools/test_trackin.py` 执行任务时,可以指定 `--cfg-options` 来就地修改配置。我们举几个例子如下。有关更多详细信息,请参阅[MMEngine](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/config.html)。 + +### 更新 dict 链的配置键 + +可以按照原始配置中 `dict` 键的顺序指定配置选项,例如,设置 `--cfg-options model.detector.backbone.norm_eval=False` 会将模型主干中的所有 `BN` 模块更改为训练模式。 + +### 更新配置列表中的关键字 + +一些配置的 `dict` 关键字会以列表的形式组成,例如,测试管道中的 `test_dataloader.dataset.pipeline` 以列表形式出现,即 `[dict(type='LoadImageFromFile'), ...]`。如果你想在测试管道中将 `LoadImageFromFile` 更改为 `LoadImageFromWebcam`,可以设置 `--cfg-options test_dataloader.dataset.pipeline.0.type=LoadImageFromWebcam`。 + +### 更新列表/元组的值 + +要被更新的可能是一个列表或一个元组,例如,你可以通过指定 `--cfg options model.data_processor.mean=[0,0,0]` 来更改 `data_preprocessor` 的平均值的关键字。请注意,指定值内不允许有空格。 + +## 配置文件结构 + +`config/_base_` 下有三种基本组件类型,即数据集、模型和默认运行时间。可以用它们来轻松构建许多方法,例如 `SORT`,`DeepSORT`。由 `_base_` 中的组件组成的配置称为基元。 + +对于同一文件夹下的配置文件,建议只有一个基元配置文件。其他配置文件都应该从基元配置文件继承基本结构,这样,继承级别的最大值为 3。 + +为了便于理解,我们建议贡献者继承现有的方法。例如,如果在 `Faster R-CNN` 的基础上进行了一些修改,用户可以首先通过指定 `_base_ = ../_base_/models/faster-rcnn_r50-dc5.py` 来继承基本的 `Faster R-CNN` 结构,然后修改配置文件中的必要字段。 + +如果你正在构建一个与任何现有方法都不共享结构的全新方法,则可以在 `configs` 下创建一个新文件夹 method_name。 + +有关详细文档,请参阅[MMEngine](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/config.html)。 + +## 配置命名风格 + +我们根据以下风格去命名配置文件,建议贡献者遵从相同风格。 + +`{method}_{module}_{train_cfg}_{train_data}_{test_data}` + +`{method}`: 方法名称,例如 `sort`; + +`{module}`: 方法的基本模块,例如 `faster-rcnn_r50_fpn`; + +`{train_cfg}`: 训练配置通常包含批量大小、迭代次数等,例如 `8xb4-80e`; + +`{train_data}`: 训练数据集,例如 `mot17halftrain`; + +`{test_data}`: 测试数据集,例如 `test-mot17halfval`。 + +## 常问问题 + +### 忽略基本配置中的某些字段 + +有时候你可以设置 `_delete_=True` 去忽略基本配置中的一些字段,你可以参考[MMEngine](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/config.html)进行简单说明。 + +### 跟踪数据结构介绍 + +#### 优点和新功能 + +在 `mmdetection` 跟踪任务中,我们使用视频来组织数据集,并使用 `TrackDataSample` 来描述数据集信息。 + +基于视频组织,我们提供了 `transform UniformRefFrameSample` 来对关键帧和参考帧进行采样,并使用 `TransformBroadcaster` 进行剪辑训练。 + +在某种程度上,`TrackDataSample` 可以被视为多个 `DetDataSample` 的包装器。它包含一个 `video_data_samples`,这是一个以 `DetDataSample` 组成的列表,里面每个 `DetDataSample` 对应一个帧。此外,它的元信息包括关键帧的索引和参考帧的索引,用与剪辑训练。 + +得益于基于视频的数据组织,整个视频可以直接被测试。这种方式更简洁直观。如果你的 GPU 内存无法容纳整个视频,我们还提供基于图像的测试方法。 + +## 要做的事 + +`StrongSORT`、`Mask2Former` 等算法不支持基于视频的测试,这些算法对 GPU 内存提出了挑战,我们将来会优化这个问题。 + +现在,我们不支持像 `MOT Challenge dataset` 这样的基于视频的数据集和像 `Crowdhuman` 用于 `QDTrack` 算法这样的基于图像的数据集进行联合训练。我们将来会优化这个问题。 From b4f62a43b5277252b377a807c497fcbe5599403e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Mon, 21 Aug 2023 13:04:54 +0800 Subject: [PATCH 25/63] Improve DINO (#10809) --- configs/dino/README.md | 11 ++++++----- .../dino-4scale_r50_improved_8xb2-12e_coco.py | 18 ++++++++++++++++++ configs/dino/metafile.yml | 11 +++++++++++ 3 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 configs/dino/dino-4scale_r50_improved_8xb2-12e_coco.py diff --git a/configs/dino/README.md b/configs/dino/README.md index 54f51d598ef..d8a01bde255 100644 --- a/configs/dino/README.md +++ b/configs/dino/README.md @@ -14,11 +14,12 @@ We present DINO (DETR with Improved deNoising anchOr boxes), a state-of-the-art ## Results and Models -| Backbone | Model | Lr schd | box AP | Config | Download | -| :------: | :---------: | :-----: | :----: | :---------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| R-50 | DINO-4scale | 12e | 49.0 | [config](./dino-4scale_r50_8xb2-12e_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/dino/dino-4scale_r50_8xb2-12e_coco/dino-4scale_r50_8xb2-12e_coco_20221202_182705-55b2bba2.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/dino/dino-4scale_r50_8xb2-12e_coco/dino-4scale_r50_8xb2-12e_coco_20221202_182705.log.json) | -| Swin-L | DINO-5scale | 12e | 57.2 | [config](./dino-5scale_swin-l_8xb2-12e_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/dino/dino-5scale_swin-l_8xb2-12e_coco/dino-5scale_swin-l_8xb2-12e_coco_20230228_072924-a654145f.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/dino/dino-5scale_swin-l_8xb2-12e_coco/dino-5scale_swin-l_8xb2-12e_coco_20230228_072924.log) | -| Swin-L | DINO-5scale | 36e | 58.4 | [config](./dino-5scale_swin-l_8xb2-36e_coco.py) | [model](https://github.com/RistoranteRist/mmlab-weights/releases/download/dino-swinl/dino-5scale_swin-l_8xb2-36e_coco-5486e051.pth) \| [log](https://github.com/RistoranteRist/mmlab-weights/releases/download/dino-swinl/20230307_032359.log) | +| Backbone | Model | Lr schd | Better-Hyper | box AP | Config | Download | +| :------: | :---------: | :-----: | :----------: | :----: | :---------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| R-50 | DINO-4scale | 12e | False | 49.0 | [config](./dino-4scale_r50_8xb2-12e_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/dino/dino-4scale_r50_8xb2-12e_coco/dino-4scale_r50_8xb2-12e_coco_20221202_182705-55b2bba2.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/dino/dino-4scale_r50_8xb2-12e_coco/dino-4scale_r50_8xb2-12e_coco_20221202_182705.log.json) | +| R-50 | DINO-4scale | 12e | True | 50.1 | [config](./dino-4scale_r50_improved_8xb2-12e_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/dino/dino-4scale_r50_improved_8xb2-12e_coco/dino-4scale_r50_improved_8xb2-12e_coco_20230818_162607-6f47a913.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/dino/dino-4scale_r50_improved_8xb2-12e_coco/dino-4scale_r50_improved_8xb2-12e_coco_20230818_162607.log.json) | +| Swin-L | DINO-5scale | 12e | False | 57.2 | [config](./dino-5scale_swin-l_8xb2-12e_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/dino/dino-5scale_swin-l_8xb2-12e_coco/dino-5scale_swin-l_8xb2-12e_coco_20230228_072924-a654145f.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/dino/dino-5scale_swin-l_8xb2-12e_coco/dino-5scale_swin-l_8xb2-12e_coco_20230228_072924.log) | +| Swin-L | DINO-5scale | 36e | False | 58.4 | [config](./dino-5scale_swin-l_8xb2-36e_coco.py) | [model](https://github.com/RistoranteRist/mmlab-weights/releases/download/dino-swinl/dino-5scale_swin-l_8xb2-36e_coco-5486e051.pth) \| [log](https://github.com/RistoranteRist/mmlab-weights/releases/download/dino-swinl/20230307_032359.log) | ### NOTE diff --git a/configs/dino/dino-4scale_r50_improved_8xb2-12e_coco.py b/configs/dino/dino-4scale_r50_improved_8xb2-12e_coco.py new file mode 100644 index 00000000000..6a4a82bacc1 --- /dev/null +++ b/configs/dino/dino-4scale_r50_improved_8xb2-12e_coco.py @@ -0,0 +1,18 @@ +_base_ = ['dino-4scale_r50_8xb2-12e_coco.py'] + +# from deformable detr hyper +model = dict( + backbone=dict(frozen_stages=-1), + bbox_head=dict(loss_cls=dict(loss_weight=2.0)), + positional_encoding=dict(offset=-0.5, temperature=10000), + dn_cfg=dict(group_cfg=dict(num_dn_queries=300))) + +# optimizer +optim_wrapper = dict( + optimizer=dict(lr=0.0002), + paramwise_cfg=dict( + custom_keys={ + 'backbone': dict(lr_mult=0.1), + 'sampling_offsets': dict(lr_mult=0.1), + 'reference_points': dict(lr_mult=0.1) + })) diff --git a/configs/dino/metafile.yml b/configs/dino/metafile.yml index 7f955c01667..f276a04ef55 100644 --- a/configs/dino/metafile.yml +++ b/configs/dino/metafile.yml @@ -72,3 +72,14 @@ Models: Metrics: box AP: 58.4 Weights: https://github.com/RistoranteRist/mmlab-weights/releases/download/dino-swinl/dino-5scale_swin-l_8xb2-36e_coco-5486e051.pth + - Name: dino-4scale_r50_improved_8xb2-12e_coco + In Collection: DINO + Config: configs/dino/dino-4scale_r50_improved_8xb2-12e_coco.py + Metadata: + Epochs: 12 + Results: + - Task: Object Detection + Dataset: COCO + Metrics: + box AP: 50.1 + Weights: https://download.openmmlab.com/mmdetection/v3.0/dino/dino-4scale_r50_improved_8xb2-12e_coco/dino-4scale_r50_improved_8xb2-12e_coco_20230818_162607-6f47a913.pth From c1b86778aacee2d17bf03dfd8d6b4c8c3c4481cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Tue, 22 Aug 2023 11:45:50 +0800 Subject: [PATCH 26/63] Support CO-DETR (#10740) Co-authored-by: huanghaian --- README.md | 5 + README_zh-CN.md | 5 + mmdet/models/dense_heads/detr_head.py | 26 +- mmdet/models/dense_heads/dino_head.py | 29 +- projects/CO-DETR/README.md | 32 + projects/CO-DETR/codetr/__init__.py | 13 + projects/CO-DETR/codetr/co_atss_head.py | 153 ++ projects/CO-DETR/codetr/co_dino_head.py | 677 ++++++++ projects/CO-DETR/codetr/co_roi_head.py | 108 ++ projects/CO-DETR/codetr/codetr.py | 320 ++++ projects/CO-DETR/codetr/transformer.py | 1376 +++++++++++++++++ .../codino/co_dino_5scale_r50_8xb2_1x_coco.py | 68 + .../co_dino_5scale_r50_lsj_8xb2_1x_coco.py | 359 +++++ .../co_dino_5scale_r50_lsj_8xb2_3x_coco.py | 4 + ...dino_5scale_swin_l_16xb1_16e_o365tococo.py | 115 ++ .../co_dino_5scale_swin_l_16xb1_1x_coco.py | 31 + .../co_dino_5scale_swin_l_16xb1_3x_coco.py | 6 + ...co_dino_5scale_swin_l_lsj_16xb1_1x_coco.py | 72 + ...co_dino_5scale_swin_l_lsj_16xb1_3x_coco.py | 6 + tools/model_converters/glip_to_mmdet.py | 3 +- tools/model_converters/swinv1_to_mmdet.py | 86 ++ 21 files changed, 3486 insertions(+), 8 deletions(-) create mode 100644 projects/CO-DETR/README.md create mode 100644 projects/CO-DETR/codetr/__init__.py create mode 100644 projects/CO-DETR/codetr/co_atss_head.py create mode 100644 projects/CO-DETR/codetr/co_dino_head.py create mode 100644 projects/CO-DETR/codetr/co_roi_head.py create mode 100644 projects/CO-DETR/codetr/codetr.py create mode 100644 projects/CO-DETR/codetr/transformer.py create mode 100644 projects/CO-DETR/configs/codino/co_dino_5scale_r50_8xb2_1x_coco.py create mode 100644 projects/CO-DETR/configs/codino/co_dino_5scale_r50_lsj_8xb2_1x_coco.py create mode 100644 projects/CO-DETR/configs/codino/co_dino_5scale_r50_lsj_8xb2_3x_coco.py create mode 100644 projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_16xb1_16e_o365tococo.py create mode 100644 projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_16xb1_1x_coco.py create mode 100644 projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_16xb1_3x_coco.py create mode 100644 projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_lsj_16xb1_1x_coco.py create mode 100644 projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_lsj_16xb1_3x_coco.py create mode 100644 tools/model_converters/swinv1_to_mmdet.py diff --git a/README.md b/README.md index 89748a970d0..0b5a1d16c39 100644 --- a/README.md +++ b/README.md @@ -236,9 +236,12 @@ Results and models are available in the [model zoo](docs/en/model_zoo.md).
  • DAB-DETR (ICLR'2022)
  • DINO (ICLR'2023)
  • GLIP (CVPR'2022)
  • +
  • DDQ (CVPR'2023)
  • DiffusionDet (ArXiv'2023)
  • EfficientDet (CVPR'2020)
  • +
  • ViTDet (ECCV'2022)
  • Detic (ECCV'2022)
  • +
  • CO-DETR (ICCV'2023)
  • @@ -260,6 +263,7 @@ Results and models are available in the [model zoo](docs/en/model_zoo.md).
  • SparseInst (CVPR'2022)
  • RTMDet (ArXiv'2022)
  • BoxInst (CVPR'2021)
  • +
  • ConvNeXt-V2 (Arxiv'2023)
  • @@ -267,6 +271,7 @@ Results and models are available in the [model zoo](docs/en/model_zoo.md).
  • Panoptic FPN (CVPR'2019)
  • MaskFormer (NeurIPS'2021)
  • Mask2Former (ArXiv'2021)
  • +
  • XDecoder (CVPR'2023)
  • diff --git a/README_zh-CN.md b/README_zh-CN.md index 7f2713dec75..cd3813ade8d 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -237,9 +237,12 @@ MMDetection 是一个基于 PyTorch 的目标检测开源工具箱。它是 [Ope
  • DAB-DETR (ICLR'2022)
  • DINO (ICLR'2023)
  • GLIP (CVPR'2022)
  • +
  • DDQ (CVPR'2023)
  • DiffusionDet (ArXiv'2023)
  • EfficientDet (CVPR'2020)
  • +
  • ViTDet (ECCV'2022)
  • Detic (ECCV'2022)
  • +
  • CO-DETR (ICCV'2023)
  • @@ -261,6 +264,7 @@ MMDetection 是一个基于 PyTorch 的目标检测开源工具箱。它是 [Ope
  • SparseInst (CVPR'2022)
  • RTMDet (ArXiv'2022)
  • BoxInst (CVPR'2021)
  • +
  • ConvNeXt-V2 (Arxiv'2023)
  • @@ -268,6 +272,7 @@ MMDetection 是一个基于 PyTorch 的目标检测开源工具箱。它是 [Ope
  • Panoptic FPN (CVPR'2019)
  • MaskFormer (NeurIPS'2021)
  • Mask2Former (ArXiv'2021)
  • +
  • XDecoder (CVPR'2023)
  • diff --git a/mmdet/models/dense_heads/detr_head.py b/mmdet/models/dense_heads/detr_head.py index 42a94d1ae9c..61545ce364d 100644 --- a/mmdet/models/dense_heads/detr_head.py +++ b/mmdet/models/dense_heads/detr_head.py @@ -12,9 +12,11 @@ from mmdet.registry import MODELS, TASK_UTILS from mmdet.structures import SampleList -from mmdet.structures.bbox import bbox_cxcywh_to_xyxy, bbox_xyxy_to_cxcywh +from mmdet.structures.bbox import (bbox_cxcywh_to_xyxy, bbox_overlaps, + bbox_xyxy_to_cxcywh) from mmdet.utils import (ConfigType, InstanceList, OptInstanceList, OptMultiConfig, reduce_mean) +from ..losses import QualityFocalLoss from ..utils import multi_apply @@ -290,8 +292,26 @@ def loss_by_feat_single(self, cls_scores: Tensor, bbox_preds: Tensor, cls_scores.new_tensor([cls_avg_factor])) cls_avg_factor = max(cls_avg_factor, 1) - loss_cls = self.loss_cls( - cls_scores, labels, label_weights, avg_factor=cls_avg_factor) + if isinstance(self.loss_cls, QualityFocalLoss): + bg_class_ind = self.num_classes + pos_inds = ((labels >= 0) + & (labels < bg_class_ind)).nonzero().squeeze(1) + scores = label_weights.new_zeros(labels.shape) + pos_bbox_targets = bbox_targets[pos_inds] + pos_decode_bbox_targets = bbox_cxcywh_to_xyxy(pos_bbox_targets) + pos_bbox_pred = bbox_preds.reshape(-1, 4)[pos_inds] + pos_decode_bbox_pred = bbox_cxcywh_to_xyxy(pos_bbox_pred) + scores[pos_inds] = bbox_overlaps( + pos_decode_bbox_pred.detach(), + pos_decode_bbox_targets, + is_aligned=True) + loss_cls = self.loss_cls( + cls_scores, (labels, scores), + label_weights, + avg_factor=cls_avg_factor) + else: + loss_cls = self.loss_cls( + cls_scores, labels, label_weights, avg_factor=cls_avg_factor) # Compute the average number of gt boxes across all gpus, for # normalization purposes diff --git a/mmdet/models/dense_heads/dino_head.py b/mmdet/models/dense_heads/dino_head.py index 889ff381100..54f46d1474f 100644 --- a/mmdet/models/dense_heads/dino_head.py +++ b/mmdet/models/dense_heads/dino_head.py @@ -7,8 +7,10 @@ from mmdet.registry import MODELS from mmdet.structures import SampleList -from mmdet.structures.bbox import bbox_cxcywh_to_xyxy, bbox_xyxy_to_cxcywh +from mmdet.structures.bbox import (bbox_cxcywh_to_xyxy, bbox_overlaps, + bbox_xyxy_to_cxcywh) from mmdet.utils import InstanceList, OptInstanceList, reduce_mean +from ..losses import QualityFocalLoss from ..utils import multi_apply from .deformable_detr_head import DeformableDETRHead @@ -248,8 +250,29 @@ def _loss_dn_single(self, dn_cls_scores: Tensor, dn_bbox_preds: Tensor, cls_avg_factor = max(cls_avg_factor, 1) if len(cls_scores) > 0: - loss_cls = self.loss_cls( - cls_scores, labels, label_weights, avg_factor=cls_avg_factor) + if isinstance(self.loss_cls, QualityFocalLoss): + bg_class_ind = self.num_classes + pos_inds = ((labels >= 0) + & (labels < bg_class_ind)).nonzero().squeeze(1) + scores = label_weights.new_zeros(labels.shape) + pos_bbox_targets = bbox_targets[pos_inds] + pos_decode_bbox_targets = bbox_cxcywh_to_xyxy(pos_bbox_targets) + pos_bbox_pred = dn_bbox_preds.reshape(-1, 4)[pos_inds] + pos_decode_bbox_pred = bbox_cxcywh_to_xyxy(pos_bbox_pred) + scores[pos_inds] = bbox_overlaps( + pos_decode_bbox_pred.detach(), + pos_decode_bbox_targets, + is_aligned=True) + loss_cls = self.loss_cls( + cls_scores, (labels, scores), + weight=label_weights, + avg_factor=cls_avg_factor) + else: + loss_cls = self.loss_cls( + cls_scores, + labels, + label_weights, + avg_factor=cls_avg_factor) else: loss_cls = torch.zeros( 1, dtype=cls_scores.dtype, device=cls_scores.device) diff --git a/projects/CO-DETR/README.md b/projects/CO-DETR/README.md new file mode 100644 index 00000000000..787592ade50 --- /dev/null +++ b/projects/CO-DETR/README.md @@ -0,0 +1,32 @@ +# CO-DETR + +> [DETRs with Collaborative Hybrid Assignments Training](https://arxiv.org/abs/2211.12860) + + + +## Abstract + +In this paper, we provide the observation that too few queries assigned as positive samples in DETR with one-to-one set matching leads to sparse supervision on the encoder's output which considerably hurt the discriminative feature learning of the encoder and vice visa for attention learning in the decoder. To alleviate this, we present a novel collaborative hybrid assignments training scheme, namely Co-DETR, to learn more efficient and effective DETR-based detectors from versatile label assignment manners. This new training scheme can easily enhance the encoder's learning ability in end-to-end detectors by training the multiple parallel auxiliary heads supervised by one-to-many label assignments such as ATSS and Faster RCNN. In addition, we conduct extra customized positive queries by extracting the positive coordinates from these auxiliary heads to improve the training efficiency of positive samples in the decoder. In inference, these auxiliary heads are discarded and thus our method introduces no additional parameters and computational cost to the original detector while requiring no hand-crafted non-maximum suppression (NMS). We conduct extensive experiments to evaluate the effectiveness of the proposed approach on DETR variants, including DAB-DETR, Deformable-DETR, and DINO-Deformable-DETR. The state-of-the-art DINO-Deformable-DETR with Swin-L can be improved from 58.5% to 59.5% AP on COCO val. Surprisingly, incorporated with ViT-L backbone, we achieve 66.0% AP on COCO test-dev and 67.9% AP on LVIS val, outperforming previous methods by clear margins with much fewer model sizes. + +
    + +
    + +## Results and Models + +| Model | Backbone | Epochs | Aug | Dataset | box AP | Config | Download | +| :-------: | :------: | :----: | :--: | :---------------------------: | :----: | :--------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| Co-DINO | R50 | 12 | LSJ | COCO | 52.0 | [config](configs/codino/co_dino_5scale_r50_lsj_8xb2_1x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/codetr/co_dino_5scale_r50_lsj_8xb2_1x_coco/co_dino_5scale_r50_lsj_8xb2_1x_coco-69a72d67.pth)\\ [log](https://download.openmmlab.com/mmdetection/v3.0/codetr/co_dino_5scale_r50_lsj_8xb2_1x_coco/co_dino_5scale_r50_lsj_8xb2_1x_coco_20230818_150457.json) | +| Co-DINO\* | R50 | 12 | DETR | COCO | 52.1 | [config](configs/codino/co_dino_5scale_r50_8xb2_1x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/codetr/co_dino_5scale_r50_1x_coco-7481f903.pth) | +| Co-DINO\* | R50 | 36 | LSJ | COCO | 54.8 | [config](configs/codino/co_dino_5scale_r50_lsj_8xb2_3x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/codetr/co_dino_5scale_lsj_r50_3x_coco-fe5a6829.pth) | +| Co-DINO\* | Swin-L | 12 | DETR | COCO | 58.9 | [config](configs/codino/co_dino_5scale_swin_l_16xb1_1x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/codetr/co_dino_5scale_swin_large_1x_coco-27c13da4.pth) | +| Co-DINO\* | Swin-L | 12 | LSJ | COCO | 59.3 | [config](configs/codino/co_dino_5scale_swin_l_lsj_16xb1_1x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/codetr/co_dino_5scale_lsj_swin_large_1x_coco-3af73af2.pth) | +| Co-DINO\* | Swin-L | 36 | DETR | COCO | 60.0 | [config](configs/codino/co_dino_5scale_swin_l_16xb1_3x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/codetr/co_dino_5scale_swin_large_3x_coco-d7a6d8af.pth) | +| Co-DINO\* | Swin-L | 36 | LSJ | COCO | 60.7 | [config](configs/codino/co_dino_5scale_swin_l_lsj_16xb1_3x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/codetr/co_dino_5scale_lsj_swin_large_1x_coco-3af73af2.pth) | +| Co-DINO\* | Swin-L | 16 | DETR | Objects365 pre-trained + COCO | 64.1 | [config](configs/codino/co_dino_5scale_swin_l_16xb1_16e_o365tococo.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/codetr/co_dino_5scale_swin_large_16e_o365tococo-614254c9.pth) | + +Note + +- Models labeled * are not trained by us, but from [CO-DETR](https://github.com/Sense-X/Co-DETR) official website. +- We find that the performance is unstable and may fluctuate by about 0.3 mAP. +- If you want to save GPU memory by enabling checkpointing, please use the `pip install fairscale` command. diff --git a/projects/CO-DETR/codetr/__init__.py b/projects/CO-DETR/codetr/__init__.py new file mode 100644 index 00000000000..2ca4c02d9f7 --- /dev/null +++ b/projects/CO-DETR/codetr/__init__.py @@ -0,0 +1,13 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from .co_atss_head import CoATSSHead +from .co_dino_head import CoDINOHead +from .co_roi_head import CoStandardRoIHead +from .codetr import CoDETR +from .transformer import (CoDinoTransformer, DetrTransformerDecoderLayer, + DetrTransformerEncoder, DinoTransformerDecoder) + +__all__ = [ + 'CoDETR', 'CoDinoTransformer', 'DinoTransformerDecoder', 'CoDINOHead', + 'CoATSSHead', 'CoStandardRoIHead', 'DetrTransformerEncoder', + 'DetrTransformerDecoderLayer' +] diff --git a/projects/CO-DETR/codetr/co_atss_head.py b/projects/CO-DETR/codetr/co_atss_head.py new file mode 100644 index 00000000000..c6ae0180da7 --- /dev/null +++ b/projects/CO-DETR/codetr/co_atss_head.py @@ -0,0 +1,153 @@ +from typing import List + +import torch +from torch import Tensor + +from mmdet.models.dense_heads import ATSSHead +from mmdet.models.utils import images_to_levels, multi_apply +from mmdet.registry import MODELS +from mmdet.utils import InstanceList, OptInstanceList, reduce_mean + + +@MODELS.register_module() +class CoATSSHead(ATSSHead): + + def loss_by_feat( + self, + cls_scores: List[Tensor], + bbox_preds: List[Tensor], + centernesses: List[Tensor], + batch_gt_instances: InstanceList, + batch_img_metas: List[dict], + batch_gt_instances_ignore: OptInstanceList = None) -> dict: + """Calculate the loss based on the features extracted by the detection + head. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + Has shape (N, num_anchors * num_classes, H, W) + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_anchors * 4, H, W) + centernesses (list[Tensor]): Centerness for each scale + level with shape (N, num_anchors * 1, H, W) + batch_gt_instances (list[:obj:`InstanceData`]): Batch of + gt_instance. It usually includes ``bboxes`` and ``labels`` + attributes. + batch_img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + batch_gt_instances_ignore (list[:obj:`InstanceData`], Optional): + Batch of gt_instances_ignore. It includes ``bboxes`` attribute + data that is ignored during training and testing. + Defaults to None. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + assert len(featmap_sizes) == self.prior_generator.num_levels + + device = cls_scores[0].device + anchor_list, valid_flag_list = self.get_anchors( + featmap_sizes, batch_img_metas, device=device) + + cls_reg_targets = self.get_targets( + anchor_list, + valid_flag_list, + batch_gt_instances, + batch_img_metas, + batch_gt_instances_ignore=batch_gt_instances_ignore) + + (anchor_list, labels_list, label_weights_list, bbox_targets_list, + bbox_weights_list, avg_factor, ori_anchors, ori_labels, + ori_bbox_targets) = cls_reg_targets + + avg_factor = reduce_mean( + torch.tensor(avg_factor, dtype=torch.float, device=device)).item() + + losses_cls, losses_bbox, loss_centerness, \ + bbox_avg_factor = multi_apply( + self.loss_by_feat_single, + anchor_list, + cls_scores, + bbox_preds, + centernesses, + labels_list, + label_weights_list, + bbox_targets_list, + avg_factor=avg_factor) + + bbox_avg_factor = sum(bbox_avg_factor) + bbox_avg_factor = reduce_mean(bbox_avg_factor).clamp_(min=1).item() + losses_bbox = list(map(lambda x: x / bbox_avg_factor, losses_bbox)) + + # diff + pos_coords = (ori_anchors, ori_labels, ori_bbox_targets, 'atss') + return dict( + loss_cls=losses_cls, + loss_bbox=losses_bbox, + loss_centerness=loss_centerness, + pos_coords=pos_coords) + + def get_targets(self, + anchor_list: List[List[Tensor]], + valid_flag_list: List[List[Tensor]], + batch_gt_instances: InstanceList, + batch_img_metas: List[dict], + batch_gt_instances_ignore: OptInstanceList = None, + unmap_outputs: bool = True) -> tuple: + """Get targets for ATSS head. + + This method is almost the same as `AnchorHead.get_targets()`. Besides + returning the targets as the parent method does, it also returns the + anchors as the first element of the returned tuple. + """ + num_imgs = len(batch_img_metas) + assert len(anchor_list) == len(valid_flag_list) == num_imgs + + # anchor number of multi levels + num_level_anchors = [anchors.size(0) for anchors in anchor_list[0]] + num_level_anchors_list = [num_level_anchors] * num_imgs + + # concat all level anchors and flags to a single tensor + for i in range(num_imgs): + assert len(anchor_list[i]) == len(valid_flag_list[i]) + anchor_list[i] = torch.cat(anchor_list[i]) + valid_flag_list[i] = torch.cat(valid_flag_list[i]) + + # compute targets for each image + if batch_gt_instances_ignore is None: + batch_gt_instances_ignore = [None] * num_imgs + (all_anchors, all_labels, all_label_weights, all_bbox_targets, + all_bbox_weights, pos_inds_list, neg_inds_list, + sampling_results_list) = multi_apply( + self._get_targets_single, + anchor_list, + valid_flag_list, + num_level_anchors_list, + batch_gt_instances, + batch_img_metas, + batch_gt_instances_ignore, + unmap_outputs=unmap_outputs) + # Get `avg_factor` of all images, which calculate in `SamplingResult`. + # When using sampling method, avg_factor is usually the sum of + # positive and negative priors. When using `PseudoSampler`, + # `avg_factor` is usually equal to the number of positive priors. + avg_factor = sum( + [results.avg_factor for results in sampling_results_list]) + # split targets to a list w.r.t. multiple levels + anchors_list = images_to_levels(all_anchors, num_level_anchors) + labels_list = images_to_levels(all_labels, num_level_anchors) + label_weights_list = images_to_levels(all_label_weights, + num_level_anchors) + bbox_targets_list = images_to_levels(all_bbox_targets, + num_level_anchors) + bbox_weights_list = images_to_levels(all_bbox_weights, + num_level_anchors) + + # diff + ori_anchors = all_anchors + ori_labels = all_labels + ori_bbox_targets = all_bbox_targets + return (anchors_list, labels_list, label_weights_list, + bbox_targets_list, bbox_weights_list, avg_factor, ori_anchors, + ori_labels, ori_bbox_targets) diff --git a/projects/CO-DETR/codetr/co_dino_head.py b/projects/CO-DETR/codetr/co_dino_head.py new file mode 100644 index 00000000000..192acf97d86 --- /dev/null +++ b/projects/CO-DETR/codetr/co_dino_head.py @@ -0,0 +1,677 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import copy +from typing import List + +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import Linear +from mmcv.ops import batched_nms +from mmengine.structures import InstanceData +from torch import Tensor + +from mmdet.models import DINOHead +from mmdet.models.layers import CdnQueryGenerator +from mmdet.models.layers.transformer import inverse_sigmoid +from mmdet.models.utils import multi_apply +from mmdet.registry import MODELS +from mmdet.structures import SampleList +from mmdet.structures.bbox import (bbox_cxcywh_to_xyxy, bbox_overlaps, + bbox_xyxy_to_cxcywh) +from mmdet.utils import InstanceList, reduce_mean + + +@MODELS.register_module() +class CoDINOHead(DINOHead): + + def __init__(self, + *args, + num_query=900, + transformer=None, + in_channels=2048, + max_pos_coords=300, + dn_cfg=None, + use_zero_padding=False, + positional_encoding=dict( + type='SinePositionalEncoding', + num_feats=128, + normalize=True), + **kwargs): + self.with_box_refine = True + self.mixed_selection = True + self.in_channels = in_channels + self.max_pos_coords = max_pos_coords + self.positional_encoding = positional_encoding + self.num_query = num_query + self.use_zero_padding = use_zero_padding + + if 'two_stage_num_proposals' in transformer: + assert transformer['two_stage_num_proposals'] == num_query, \ + 'two_stage_num_proposals must be equal to num_query for DINO' + else: + transformer['two_stage_num_proposals'] = num_query + transformer['as_two_stage'] = True + if self.mixed_selection: + transformer['mixed_selection'] = self.mixed_selection + self.transformer = transformer + self.act_cfg = transformer.get('act_cfg', + dict(type='ReLU', inplace=True)) + + super().__init__(*args, **kwargs) + + self.activate = MODELS.build(self.act_cfg) + self.positional_encoding = MODELS.build(self.positional_encoding) + self.init_denoising(dn_cfg) + + def _init_layers(self): + self.transformer = MODELS.build(self.transformer) + self.embed_dims = self.transformer.embed_dims + assert hasattr(self.positional_encoding, 'num_feats') + num_feats = self.positional_encoding.num_feats + assert num_feats * 2 == self.embed_dims, 'embed_dims should' \ + f' be exactly 2 times of num_feats. Found {self.embed_dims}' \ + f' and {num_feats}.' + """Initialize classification branch and regression branch of head.""" + fc_cls = Linear(self.embed_dims, self.cls_out_channels) + reg_branch = [] + for _ in range(self.num_reg_fcs): + reg_branch.append(Linear(self.embed_dims, self.embed_dims)) + reg_branch.append(nn.ReLU()) + reg_branch.append(Linear(self.embed_dims, 4)) + reg_branch = nn.Sequential(*reg_branch) + + def _get_clones(module, N): + return nn.ModuleList([copy.deepcopy(module) for i in range(N)]) + + # last reg_branch is used to generate proposal from + # encode feature map when as_two_stage is True. + num_pred = (self.transformer.decoder.num_layers + 1) if \ + self.as_two_stage else self.transformer.decoder.num_layers + + self.cls_branches = _get_clones(fc_cls, num_pred) + self.reg_branches = _get_clones(reg_branch, num_pred) + + self.downsample = nn.Sequential( + nn.Conv2d( + self.embed_dims, + self.embed_dims, + kernel_size=3, + stride=2, + padding=1), nn.GroupNorm(32, self.embed_dims)) + + def init_denoising(self, dn_cfg): + if dn_cfg is not None: + dn_cfg['num_classes'] = self.num_classes + dn_cfg['num_matching_queries'] = self.num_query + dn_cfg['embed_dims'] = self.embed_dims + self.dn_generator = CdnQueryGenerator(**dn_cfg) + + def forward(self, + mlvl_feats, + img_metas, + dn_label_query=None, + dn_bbox_query=None, + attn_mask=None): + batch_size = mlvl_feats[0].size(0) + input_img_h, input_img_w = img_metas[0]['batch_input_shape'] + img_masks = mlvl_feats[0].new_ones( + (batch_size, input_img_h, input_img_w)) + for img_id in range(batch_size): + img_h, img_w = img_metas[img_id]['img_shape'] + img_masks[img_id, :img_h, :img_w] = 0 + + mlvl_masks = [] + mlvl_positional_encodings = [] + for feat in mlvl_feats: + mlvl_masks.append( + F.interpolate(img_masks[None], + size=feat.shape[-2:]).to(torch.bool).squeeze(0)) + mlvl_positional_encodings.append( + self.positional_encoding(mlvl_masks[-1])) + + query_embeds = None + hs, inter_references, topk_score, topk_anchor, enc_outputs = \ + self.transformer( + mlvl_feats, + mlvl_masks, + query_embeds, + mlvl_positional_encodings, + dn_label_query, + dn_bbox_query, + attn_mask, + reg_branches=self.reg_branches if self.with_box_refine else None, # noqa:E501 + cls_branches=self.cls_branches if self.as_two_stage else None # noqa:E501 + ) + outs = [] + num_level = len(mlvl_feats) + start = 0 + for lvl in range(num_level): + bs, c, h, w = mlvl_feats[lvl].shape + end = start + h * w + feat = enc_outputs[start:end].permute(1, 2, 0).contiguous() + start = end + outs.append(feat.reshape(bs, c, h, w)) + outs.append(self.downsample(outs[-1])) + + hs = hs.permute(0, 2, 1, 3) + + if dn_label_query is not None and dn_label_query.size(1) == 0: + # NOTE: If there is no target in the image, the parameters of + # label_embedding won't be used in producing loss, which raises + # RuntimeError when using distributed mode. + hs[0] += self.dn_generator.label_embedding.weight[0, 0] * 0.0 + + outputs_classes = [] + outputs_coords = [] + + for lvl in range(hs.shape[0]): + reference = inter_references[lvl] + reference = inverse_sigmoid(reference, eps=1e-3) + outputs_class = self.cls_branches[lvl](hs[lvl]) + tmp = self.reg_branches[lvl](hs[lvl]) + if reference.shape[-1] == 4: + tmp += reference + else: + assert reference.shape[-1] == 2 + tmp[..., :2] += reference + outputs_coord = tmp.sigmoid() + outputs_classes.append(outputs_class) + outputs_coords.append(outputs_coord) + + outputs_classes = torch.stack(outputs_classes) + outputs_coords = torch.stack(outputs_coords) + + return outputs_classes, outputs_coords, topk_score, topk_anchor, outs + + def predict(self, + feats: List[Tensor], + batch_data_samples: SampleList, + rescale: bool = True) -> InstanceList: + batch_img_metas = [ + data_samples.metainfo for data_samples in batch_data_samples + ] + outs = self.forward(feats, batch_img_metas) + + predictions = self.predict_by_feat( + *outs, batch_img_metas=batch_img_metas, rescale=rescale) + + return predictions + + def predict_by_feat(self, + all_cls_scores, + all_bbox_preds, + enc_cls_scores, + enc_bbox_preds, + enc_outputs, + batch_img_metas, + rescale=True): + + cls_scores = all_cls_scores[-1] + bbox_preds = all_bbox_preds[-1] + + result_list = [] + for img_id in range(len(batch_img_metas)): + cls_score = cls_scores[img_id] + bbox_pred = bbox_preds[img_id] + img_meta = batch_img_metas[img_id] + results = self._predict_by_feat_single(cls_score, bbox_pred, + img_meta, rescale) + result_list.append(results) + return result_list + + def _predict_by_feat_single(self, + cls_score: Tensor, + bbox_pred: Tensor, + img_meta: dict, + rescale: bool = True) -> InstanceData: + """Transform outputs from the last decoder layer into bbox predictions + for each image. + + Args: + cls_score (Tensor): Box score logits from the last decoder layer + for each image. Shape [num_queries, cls_out_channels]. + bbox_pred (Tensor): Sigmoid outputs from the last decoder layer + for each image, with coordinate format (cx, cy, w, h) and + shape [num_queries, 4]. + img_meta (dict): Image meta info. + rescale (bool): If True, return boxes in original image + space. Default True. + + Returns: + :obj:`InstanceData`: Detection results of each image + after the post process. + Each item usually contains following keys. + + - scores (Tensor): Classification scores, has a shape + (num_instance, ) + - labels (Tensor): Labels of bboxes, has a shape + (num_instances, ). + - bboxes (Tensor): Has a shape (num_instances, 4), + the last dimension 4 arrange as (x1, y1, x2, y2). + """ + assert len(cls_score) == len(bbox_pred) # num_queries + max_per_img = self.test_cfg.get('max_per_img', self.num_query) + score_thr = self.test_cfg.get('score_thr', 0) + with_nms = self.test_cfg.get('nms', None) + + img_shape = img_meta['img_shape'] + # exclude background + if self.loss_cls.use_sigmoid: + cls_score = cls_score.sigmoid() + scores, indexes = cls_score.view(-1).topk(max_per_img) + det_labels = indexes % self.num_classes + bbox_index = indexes // self.num_classes + bbox_pred = bbox_pred[bbox_index] + else: + scores, det_labels = F.softmax(cls_score, dim=-1)[..., :-1].max(-1) + scores, bbox_index = scores.topk(max_per_img) + bbox_pred = bbox_pred[bbox_index] + det_labels = det_labels[bbox_index] + + if score_thr > 0: + valid_mask = scores > score_thr + scores = scores[valid_mask] + bbox_pred = bbox_pred[valid_mask] + det_labels = det_labels[valid_mask] + + det_bboxes = bbox_cxcywh_to_xyxy(bbox_pred) + det_bboxes[:, 0::2] = det_bboxes[:, 0::2] * img_shape[1] + det_bboxes[:, 1::2] = det_bboxes[:, 1::2] * img_shape[0] + det_bboxes[:, 0::2].clamp_(min=0, max=img_shape[1]) + det_bboxes[:, 1::2].clamp_(min=0, max=img_shape[0]) + if rescale: + assert img_meta.get('scale_factor') is not None + det_bboxes /= det_bboxes.new_tensor( + img_meta['scale_factor']).repeat((1, 2)) + + results = InstanceData() + results.bboxes = det_bboxes + results.scores = scores + results.labels = det_labels + + if with_nms and results.bboxes.numel() > 0: + det_bboxes, keep_idxs = batched_nms(results.bboxes, results.scores, + results.labels, + self.test_cfg.nms) + results = results[keep_idxs] + results.scores = det_bboxes[:, -1] + results = results[:max_per_img] + + return results + + def loss(self, x, batch_data_samples): + assert self.dn_generator is not None, '"dn_cfg" must be set' + + batch_gt_instances = [] + batch_img_metas = [] + for data_sample in batch_data_samples: + batch_img_metas.append(data_sample.metainfo) + batch_gt_instances.append(data_sample.gt_instances) + + dn_label_query, dn_bbox_query, attn_mask, dn_meta = \ + self.dn_generator(batch_data_samples) + + outs = self(x, batch_img_metas, dn_label_query, dn_bbox_query, + attn_mask) + + loss_inputs = outs[:-1] + (batch_gt_instances, batch_img_metas, + dn_meta) + losses = self.loss_by_feat(*loss_inputs) + enc_outputs = outs[-1] + return losses, enc_outputs + + def forward_aux(self, mlvl_feats, img_metas, aux_targets, head_idx): + """Forward function. + + Args: + mlvl_feats (tuple[Tensor]): Features from the upstream + network, each is a 4D-tensor with shape + (N, C, H, W). + img_metas (list[dict]): List of image information. + + Returns: + all_cls_scores (Tensor): Outputs from the classification head, \ + shape [nb_dec, bs, num_query, cls_out_channels]. Note \ + cls_out_channels should includes background. + all_bbox_preds (Tensor): Sigmoid outputs from the regression \ + head with normalized coordinate format (cx, cy, w, h). \ + Shape [nb_dec, bs, num_query, 4]. + enc_outputs_class (Tensor): The score of each point on encode \ + feature map, has shape (N, h*w, num_class). Only when \ + as_two_stage is True it would be returned, otherwise \ + `None` would be returned. + enc_outputs_coord (Tensor): The proposal generate from the \ + encode feature map, has shape (N, h*w, 4). Only when \ + as_two_stage is True it would be returned, otherwise \ + `None` would be returned. + """ + aux_coords, aux_labels, aux_targets, aux_label_weights, \ + aux_bbox_weights, aux_feats, attn_masks = aux_targets + batch_size = mlvl_feats[0].size(0) + input_img_h, input_img_w = img_metas[0]['batch_input_shape'] + img_masks = mlvl_feats[0].new_ones( + (batch_size, input_img_h, input_img_w)) + for img_id in range(batch_size): + img_h, img_w = img_metas[img_id]['img_shape'] + img_masks[img_id, :img_h, :img_w] = 0 + + mlvl_masks = [] + mlvl_positional_encodings = [] + for feat in mlvl_feats: + mlvl_masks.append( + F.interpolate(img_masks[None], + size=feat.shape[-2:]).to(torch.bool).squeeze(0)) + mlvl_positional_encodings.append( + self.positional_encoding(mlvl_masks[-1])) + + query_embeds = None + hs, inter_references = self.transformer.forward_aux( + mlvl_feats, + mlvl_masks, + query_embeds, + mlvl_positional_encodings, + aux_coords, + pos_feats=aux_feats, + reg_branches=self.reg_branches if self.with_box_refine else None, + cls_branches=self.cls_branches if self.as_two_stage else None, + return_encoder_output=True, + attn_masks=attn_masks, + head_idx=head_idx) + + hs = hs.permute(0, 2, 1, 3) + outputs_classes = [] + outputs_coords = [] + + for lvl in range(hs.shape[0]): + reference = inter_references[lvl] + reference = inverse_sigmoid(reference, eps=1e-3) + outputs_class = self.cls_branches[lvl](hs[lvl]) + tmp = self.reg_branches[lvl](hs[lvl]) + if reference.shape[-1] == 4: + tmp += reference + else: + assert reference.shape[-1] == 2 + tmp[..., :2] += reference + outputs_coord = tmp.sigmoid() + outputs_classes.append(outputs_class) + outputs_coords.append(outputs_coord) + + outputs_classes = torch.stack(outputs_classes) + outputs_coords = torch.stack(outputs_coords) + + return outputs_classes, outputs_coords, None, None + + def loss_aux(self, + x, + pos_coords=None, + head_idx=0, + batch_data_samples=None): + batch_gt_instances = [] + batch_img_metas = [] + for data_sample in batch_data_samples: + batch_img_metas.append(data_sample.metainfo) + batch_gt_instances.append(data_sample.gt_instances) + + gt_bboxes = [b.bboxes for b in batch_gt_instances] + gt_labels = [b.labels for b in batch_gt_instances] + + aux_targets = self.get_aux_targets(pos_coords, batch_img_metas, x, + head_idx) + outs = self.forward_aux(x[:-1], batch_img_metas, aux_targets, head_idx) + outs = outs + aux_targets + if gt_labels is None: + loss_inputs = outs + (gt_bboxes, batch_img_metas) + else: + loss_inputs = outs + (gt_bboxes, gt_labels, batch_img_metas) + losses = self.loss_aux_by_feat(*loss_inputs) + return losses + + def get_aux_targets(self, pos_coords, img_metas, mlvl_feats, head_idx): + coords, labels, targets = pos_coords[:3] + head_name = pos_coords[-1] + bs, c = len(coords), mlvl_feats[0].shape[1] + max_num_coords = 0 + all_feats = [] + for i in range(bs): + label = labels[i] + feats = [ + feat[i].reshape(c, -1).transpose(1, 0) for feat in mlvl_feats + ] + feats = torch.cat(feats, dim=0) + bg_class_ind = self.num_classes + pos_inds = ((label >= 0) + & (label < bg_class_ind)).nonzero().squeeze(1) + max_num_coords = max(max_num_coords, len(pos_inds)) + all_feats.append(feats) + max_num_coords = min(self.max_pos_coords, max_num_coords) + max_num_coords = max(9, max_num_coords) + + if self.use_zero_padding: + attn_masks = [] + label_weights = coords[0].new_zeros([bs, max_num_coords]) + else: + attn_masks = None + label_weights = coords[0].new_ones([bs, max_num_coords]) + bbox_weights = coords[0].new_zeros([bs, max_num_coords, 4]) + + aux_coords, aux_labels, aux_targets, aux_feats = [], [], [], [] + + for i in range(bs): + coord, label, target = coords[i], labels[i], targets[i] + feats = all_feats[i] + if 'rcnn' in head_name: + feats = pos_coords[-2][i] + num_coords_per_point = 1 + else: + num_coords_per_point = coord.shape[0] // feats.shape[0] + feats = feats.unsqueeze(1).repeat(1, num_coords_per_point, 1) + feats = feats.reshape(feats.shape[0] * num_coords_per_point, + feats.shape[-1]) + img_meta = img_metas[i] + img_h, img_w = img_meta['img_shape'] + factor = coord.new_tensor([img_w, img_h, img_w, + img_h]).unsqueeze(0) + bg_class_ind = self.num_classes + pos_inds = ((label >= 0) + & (label < bg_class_ind)).nonzero().squeeze(1) + neg_inds = (label == bg_class_ind).nonzero().squeeze(1) + if pos_inds.shape[0] > max_num_coords: + indices = torch.randperm( + pos_inds.shape[0])[:max_num_coords].cuda() + pos_inds = pos_inds[indices] + + coord = bbox_xyxy_to_cxcywh(coord[pos_inds] / factor) + label = label[pos_inds] + target = bbox_xyxy_to_cxcywh(target[pos_inds] / factor) + feat = feats[pos_inds] + + if self.use_zero_padding: + label_weights[i][:len(label)] = 1 + bbox_weights[i][:len(label)] = 1 + attn_mask = torch.zeros([ + max_num_coords, + max_num_coords, + ]).bool().to(coord.device) + else: + bbox_weights[i][:len(label)] = 1 + + if coord.shape[0] < max_num_coords: + padding_shape = max_num_coords - coord.shape[0] + if self.use_zero_padding: + padding_coord = coord.new_zeros([padding_shape, 4]) + padding_label = label.new_ones([padding_shape + ]) * self.num_classes + padding_target = target.new_zeros([padding_shape, 4]) + padding_feat = feat.new_zeros([padding_shape, c]) + attn_mask[coord.shape[0]:, 0:coord.shape[0], ] = True + attn_mask[:, coord.shape[0]:, ] = True + else: + indices = torch.randperm( + neg_inds.shape[0])[:padding_shape].cuda() + neg_inds = neg_inds[indices] + padding_coord = bbox_xyxy_to_cxcywh(coords[i][neg_inds] / + factor) + padding_label = labels[i][neg_inds] + padding_target = bbox_xyxy_to_cxcywh(targets[i][neg_inds] / + factor) + padding_feat = feats[neg_inds] + coord = torch.cat((coord, padding_coord), dim=0) + label = torch.cat((label, padding_label), dim=0) + target = torch.cat((target, padding_target), dim=0) + feat = torch.cat((feat, padding_feat), dim=0) + if self.use_zero_padding: + attn_masks.append(attn_mask.unsqueeze(0)) + aux_coords.append(coord.unsqueeze(0)) + aux_labels.append(label.unsqueeze(0)) + aux_targets.append(target.unsqueeze(0)) + aux_feats.append(feat.unsqueeze(0)) + + if self.use_zero_padding: + attn_masks = torch.cat( + attn_masks, dim=0).unsqueeze(1).repeat(1, 8, 1, 1) + attn_masks = attn_masks.reshape(bs * 8, max_num_coords, + max_num_coords) + else: + attn_masks = None + + aux_coords = torch.cat(aux_coords, dim=0) + aux_labels = torch.cat(aux_labels, dim=0) + aux_targets = torch.cat(aux_targets, dim=0) + aux_feats = torch.cat(aux_feats, dim=0) + aux_label_weights = label_weights + aux_bbox_weights = bbox_weights + return (aux_coords, aux_labels, aux_targets, aux_label_weights, + aux_bbox_weights, aux_feats, attn_masks) + + def loss_aux_by_feat(self, + all_cls_scores, + all_bbox_preds, + enc_cls_scores, + enc_bbox_preds, + aux_coords, + aux_labels, + aux_targets, + aux_label_weights, + aux_bbox_weights, + aux_feats, + attn_masks, + gt_bboxes_list, + gt_labels_list, + img_metas, + gt_bboxes_ignore=None): + num_dec_layers = len(all_cls_scores) + all_labels = [aux_labels for _ in range(num_dec_layers)] + all_label_weights = [aux_label_weights for _ in range(num_dec_layers)] + all_bbox_targets = [aux_targets for _ in range(num_dec_layers)] + all_bbox_weights = [aux_bbox_weights for _ in range(num_dec_layers)] + img_metas_list = [img_metas for _ in range(num_dec_layers)] + all_gt_bboxes_ignore_list = [ + gt_bboxes_ignore for _ in range(num_dec_layers) + ] + + losses_cls, losses_bbox, losses_iou = multi_apply( + self._loss_aux_by_feat_single, all_cls_scores, all_bbox_preds, + all_labels, all_label_weights, all_bbox_targets, all_bbox_weights, + img_metas_list, all_gt_bboxes_ignore_list) + + loss_dict = dict() + # loss of proposal generated from encode feature map. + + # loss from the last decoder layer + loss_dict['loss_cls_aux'] = losses_cls[-1] + loss_dict['loss_bbox_aux'] = losses_bbox[-1] + loss_dict['loss_iou_aux'] = losses_iou[-1] + # loss from other decoder layers + num_dec_layer = 0 + for loss_cls_i, loss_bbox_i, loss_iou_i in zip(losses_cls[:-1], + losses_bbox[:-1], + losses_iou[:-1]): + loss_dict[f'd{num_dec_layer}.loss_cls_aux'] = loss_cls_i + loss_dict[f'd{num_dec_layer}.loss_bbox_aux'] = loss_bbox_i + loss_dict[f'd{num_dec_layer}.loss_iou_aux'] = loss_iou_i + num_dec_layer += 1 + return loss_dict + + def _loss_aux_by_feat_single(self, + cls_scores, + bbox_preds, + labels, + label_weights, + bbox_targets, + bbox_weights, + img_metas, + gt_bboxes_ignore_list=None): + num_imgs = cls_scores.size(0) + num_q = cls_scores.size(1) + + try: + labels = labels.reshape(num_imgs * num_q) + label_weights = label_weights.reshape(num_imgs * num_q) + bbox_targets = bbox_targets.reshape(num_imgs * num_q, 4) + bbox_weights = bbox_weights.reshape(num_imgs * num_q, 4) + except Exception: + return cls_scores.mean() * 0, cls_scores.mean( + ) * 0, cls_scores.mean() * 0 + + bg_class_ind = self.num_classes + num_total_pos = len( + ((labels >= 0) & (labels < bg_class_ind)).nonzero().squeeze(1)) + num_total_neg = num_imgs * num_q - num_total_pos + + # classification loss + cls_scores = cls_scores.reshape(-1, self.cls_out_channels) + # construct weighted avg_factor to match with the official DETR repo + cls_avg_factor = num_total_pos * 1.0 + \ + num_total_neg * self.bg_cls_weight + if self.sync_cls_avg_factor: + cls_avg_factor = reduce_mean( + cls_scores.new_tensor([cls_avg_factor])) + cls_avg_factor = max(cls_avg_factor, 1) + + bg_class_ind = self.num_classes + pos_inds = ((labels >= 0) + & (labels < bg_class_ind)).nonzero().squeeze(1) + scores = label_weights.new_zeros(labels.shape) + pos_bbox_targets = bbox_targets[pos_inds] + pos_decode_bbox_targets = bbox_cxcywh_to_xyxy(pos_bbox_targets) + pos_bbox_pred = bbox_preds.reshape(-1, 4)[pos_inds] + pos_decode_bbox_pred = bbox_cxcywh_to_xyxy(pos_bbox_pred) + scores[pos_inds] = bbox_overlaps( + pos_decode_bbox_pred.detach(), + pos_decode_bbox_targets, + is_aligned=True) + loss_cls = self.loss_cls( + cls_scores, (labels, scores), + weight=label_weights, + avg_factor=cls_avg_factor) + + # Compute the average number of gt boxes across all gpus, for + # normalization purposes + num_total_pos = loss_cls.new_tensor([num_total_pos]) + num_total_pos = torch.clamp(reduce_mean(num_total_pos), min=1).item() + + # construct factors used for rescale bboxes + factors = [] + for img_meta, bbox_pred in zip(img_metas, bbox_preds): + img_h, img_w = img_meta['img_shape'] + factor = bbox_pred.new_tensor([img_w, img_h, img_w, + img_h]).unsqueeze(0).repeat( + bbox_pred.size(0), 1) + factors.append(factor) + factors = torch.cat(factors, 0) + + # DETR regress the relative position of boxes (cxcywh) in the image, + # thus the learning target is normalized by the image size. So here + # we need to re-scale them for calculating IoU loss + bbox_preds = bbox_preds.reshape(-1, 4) + bboxes = bbox_cxcywh_to_xyxy(bbox_preds) * factors + bboxes_gt = bbox_cxcywh_to_xyxy(bbox_targets) * factors + + # regression IoU loss, defaultly GIoU loss + loss_iou = self.loss_iou( + bboxes, bboxes_gt, bbox_weights, avg_factor=num_total_pos) + + # regression L1 loss + loss_bbox = self.loss_bbox( + bbox_preds, bbox_targets, bbox_weights, avg_factor=num_total_pos) + return loss_cls, loss_bbox, loss_iou diff --git a/projects/CO-DETR/codetr/co_roi_head.py b/projects/CO-DETR/codetr/co_roi_head.py new file mode 100644 index 00000000000..9aafb53bedd --- /dev/null +++ b/projects/CO-DETR/codetr/co_roi_head.py @@ -0,0 +1,108 @@ +from typing import List, Tuple + +import torch +from torch import Tensor + +from mmdet.models.roi_heads import StandardRoIHead +from mmdet.models.task_modules.samplers import SamplingResult +from mmdet.models.utils import unpack_gt_instances +from mmdet.registry import MODELS +from mmdet.structures import DetDataSample +from mmdet.structures.bbox import bbox2roi +from mmdet.utils import InstanceList + + +@MODELS.register_module() +class CoStandardRoIHead(StandardRoIHead): + + def loss(self, x: Tuple[Tensor], rpn_results_list: InstanceList, + batch_data_samples: List[DetDataSample]) -> dict: + max_proposal = 2000 + + assert len(rpn_results_list) == len(batch_data_samples) + outputs = unpack_gt_instances(batch_data_samples) + batch_gt_instances, batch_gt_instances_ignore, _ = outputs + + # assign gts and sample proposals + num_imgs = len(batch_data_samples) + sampling_results = [] + for i in range(num_imgs): + # rename rpn_results.bboxes to rpn_results.priors + rpn_results = rpn_results_list[i] + rpn_results.priors = rpn_results.pop('bboxes') + + assign_result = self.bbox_assigner.assign( + rpn_results, batch_gt_instances[i], + batch_gt_instances_ignore[i]) + sampling_result = self.bbox_sampler.sample( + assign_result, + rpn_results, + batch_gt_instances[i], + feats=[lvl_feat[i][None] for lvl_feat in x]) + sampling_results.append(sampling_result) + + losses = dict() + # bbox head forward and loss + if self.with_bbox: + bbox_results = self.bbox_loss(x, sampling_results) + losses.update(bbox_results['loss_bbox']) + + bbox_targets = bbox_results['bbox_targets'] + for res in sampling_results: + max_proposal = min(max_proposal, res.bboxes.shape[0]) + ori_coords = bbox2roi([res.bboxes for res in sampling_results]) + ori_proposals, ori_labels, \ + ori_bbox_targets, ori_bbox_feats = [], [], [], [] + for i in range(num_imgs): + idx = (ori_coords[:, 0] == i).nonzero().squeeze(1) + idx = idx[:max_proposal] + ori_proposal = ori_coords[idx][:, 1:].unsqueeze(0) + ori_label = bbox_targets[0][idx].unsqueeze(0) + ori_bbox_target = bbox_targets[2][idx].unsqueeze(0) + ori_bbox_feat = bbox_results['bbox_feats'].mean(-1).mean(-1) + ori_bbox_feat = ori_bbox_feat[idx].unsqueeze(0) + ori_proposals.append(ori_proposal) + ori_labels.append(ori_label) + ori_bbox_targets.append(ori_bbox_target) + ori_bbox_feats.append(ori_bbox_feat) + ori_coords = torch.cat(ori_proposals, dim=0) + ori_labels = torch.cat(ori_labels, dim=0) + ori_bbox_targets = torch.cat(ori_bbox_targets, dim=0) + ori_bbox_feats = torch.cat(ori_bbox_feats, dim=0) + pos_coords = (ori_coords, ori_labels, ori_bbox_targets, + ori_bbox_feats, 'rcnn') + losses.update(pos_coords=pos_coords) + + return losses + + def bbox_loss(self, x: Tuple[Tensor], + sampling_results: List[SamplingResult]) -> dict: + """Perform forward propagation and loss calculation of the bbox head on + the features of the upstream network. + + Args: + x (tuple[Tensor]): List of multi-level img features. + sampling_results (list["obj:`SamplingResult`]): Sampling results. + + Returns: + dict[str, Tensor]: Usually returns a dictionary with keys: + + - `cls_score` (Tensor): Classification scores. + - `bbox_pred` (Tensor): Box energies / deltas. + - `bbox_feats` (Tensor): Extract bbox RoI features. + - `loss_bbox` (dict): A dictionary of bbox loss components. + """ + rois = bbox2roi([res.priors for res in sampling_results]) + bbox_results = self._bbox_forward(x, rois) + + bbox_loss_and_target = self.bbox_head.loss_and_target( + cls_score=bbox_results['cls_score'], + bbox_pred=bbox_results['bbox_pred'], + rois=rois, + sampling_results=sampling_results, + rcnn_train_cfg=self.train_cfg) + + bbox_results.update(loss_bbox=bbox_loss_and_target['loss_bbox']) + # diff + bbox_results.update(bbox_targets=bbox_loss_and_target['bbox_targets']) + return bbox_results diff --git a/projects/CO-DETR/codetr/codetr.py b/projects/CO-DETR/codetr/codetr.py new file mode 100644 index 00000000000..82826f64107 --- /dev/null +++ b/projects/CO-DETR/codetr/codetr.py @@ -0,0 +1,320 @@ +import copy +from typing import Tuple, Union + +import torch +import torch.nn as nn +from torch import Tensor + +from mmdet.models.detectors.base import BaseDetector +from mmdet.registry import MODELS +from mmdet.structures import OptSampleList, SampleList +from mmdet.utils import InstanceList, OptConfigType, OptMultiConfig + + +@MODELS.register_module() +class CoDETR(BaseDetector): + + def __init__( + self, + backbone, + neck=None, + query_head=None, # detr head + rpn_head=None, # two-stage rpn + roi_head=[None], # two-stage + bbox_head=[None], # one-stage + train_cfg=[None, None], + test_cfg=[None, None], + # Control whether to consider positive samples + # from the auxiliary head as additional positive queries. + with_pos_coord=True, + use_lsj=True, + eval_module='detr', + # Evaluate the Nth head. + eval_index=0, + data_preprocessor: OptConfigType = None, + init_cfg: OptMultiConfig = None): + super(CoDETR, self).__init__( + data_preprocessor=data_preprocessor, init_cfg=init_cfg) + self.with_pos_coord = with_pos_coord + self.use_lsj = use_lsj + + assert eval_module in ['detr', 'one-stage', 'two-stage'] + self.eval_module = eval_module + + self.backbone = MODELS.build(backbone) + if neck is not None: + self.neck = MODELS.build(neck) + # Module index for evaluation + self.eval_index = eval_index + head_idx = 0 + if query_head is not None: + query_head.update(train_cfg=train_cfg[head_idx] if ( + train_cfg is not None and train_cfg[head_idx] is not None + ) else None) + query_head.update(test_cfg=test_cfg[head_idx]) + self.query_head = MODELS.build(query_head) + self.query_head.init_weights() + head_idx += 1 + + if rpn_head is not None: + rpn_train_cfg = train_cfg[head_idx].rpn if ( + train_cfg is not None + and train_cfg[head_idx] is not None) else None + rpn_head_ = rpn_head.copy() + rpn_head_.update( + train_cfg=rpn_train_cfg, test_cfg=test_cfg[head_idx].rpn) + self.rpn_head = MODELS.build(rpn_head_) + self.rpn_head.init_weights() + + self.roi_head = nn.ModuleList() + for i in range(len(roi_head)): + if roi_head[i]: + rcnn_train_cfg = train_cfg[i + head_idx].rcnn if ( + train_cfg + and train_cfg[i + head_idx] is not None) else None + roi_head[i].update(train_cfg=rcnn_train_cfg) + roi_head[i].update(test_cfg=test_cfg[i + head_idx].rcnn) + self.roi_head.append(MODELS.build(roi_head[i])) + self.roi_head[-1].init_weights() + + self.bbox_head = nn.ModuleList() + for i in range(len(bbox_head)): + if bbox_head[i]: + bbox_head[i].update( + train_cfg=train_cfg[i + head_idx + len(self.roi_head)] if ( + train_cfg and train_cfg[i + head_idx + + len(self.roi_head)] is not None + ) else None) + bbox_head[i].update(test_cfg=test_cfg[i + head_idx + + len(self.roi_head)]) + self.bbox_head.append(MODELS.build(bbox_head[i])) + self.bbox_head[-1].init_weights() + + self.head_idx = head_idx + self.train_cfg = train_cfg + self.test_cfg = test_cfg + + @property + def with_rpn(self): + """bool: whether the detector has RPN""" + return hasattr(self, 'rpn_head') and self.rpn_head is not None + + @property + def with_query_head(self): + """bool: whether the detector has a RoI head""" + return hasattr(self, 'query_head') and self.query_head is not None + + @property + def with_roi_head(self): + """bool: whether the detector has a RoI head""" + return hasattr(self, 'roi_head') and self.roi_head is not None and len( + self.roi_head) > 0 + + @property + def with_shared_head(self): + """bool: whether the detector has a shared head in the RoI Head""" + return hasattr(self, 'roi_head') and self.roi_head[0].with_shared_head + + @property + def with_bbox(self): + """bool: whether the detector has a bbox head""" + return ((hasattr(self, 'roi_head') and self.roi_head is not None + and len(self.roi_head) > 0) + or (hasattr(self, 'bbox_head') and self.bbox_head is not None + and len(self.bbox_head) > 0)) + + def extract_feat(self, batch_inputs: Tensor) -> Tuple[Tensor]: + """Extract features. + + Args: + batch_inputs (Tensor): Image tensor, has shape (bs, dim, H, W). + + Returns: + tuple[Tensor]: Tuple of feature maps from neck. Each feature map + has shape (bs, dim, H, W). + """ + x = self.backbone(batch_inputs) + if self.with_neck: + x = self.neck(x) + return x + + def _forward(self, + batch_inputs: Tensor, + batch_data_samples: OptSampleList = None): + pass + + def loss(self, batch_inputs: Tensor, + batch_data_samples: SampleList) -> Union[dict, list]: + batch_input_shape = batch_data_samples[0].batch_input_shape + if self.use_lsj: + for data_samples in batch_data_samples: + img_metas = data_samples.metainfo + input_img_h, input_img_w = batch_input_shape + img_metas['img_shape'] = [input_img_h, input_img_w] + + x = self.extract_feat(batch_inputs) + + losses = dict() + + def upd_loss(losses, idx, weight=1): + new_losses = dict() + for k, v in losses.items(): + new_k = '{}{}'.format(k, idx) + if isinstance(v, list) or isinstance(v, tuple): + new_losses[new_k] = [i * weight for i in v] + else: + new_losses[new_k] = v * weight + return new_losses + + # DETR encoder and decoder forward + if self.with_query_head: + bbox_losses, x = self.query_head.loss(x, batch_data_samples) + losses.update(bbox_losses) + + # RPN forward and loss + if self.with_rpn: + proposal_cfg = self.train_cfg[self.head_idx].get( + 'rpn_proposal', self.test_cfg[self.head_idx].rpn) + + rpn_data_samples = copy.deepcopy(batch_data_samples) + # set cat_id of gt_labels to 0 in RPN + for data_sample in rpn_data_samples: + data_sample.gt_instances.labels = \ + torch.zeros_like(data_sample.gt_instances.labels) + + rpn_losses, proposal_list = self.rpn_head.loss_and_predict( + x, rpn_data_samples, proposal_cfg=proposal_cfg) + + # avoid get same name with roi_head loss + keys = rpn_losses.keys() + for key in list(keys): + if 'loss' in key and 'rpn' not in key: + rpn_losses[f'rpn_{key}'] = rpn_losses.pop(key) + + losses.update(rpn_losses) + else: + assert batch_data_samples[0].get('proposals', None) is not None + # use pre-defined proposals in InstanceData for the second stage + # to extract ROI features. + proposal_list = [ + data_sample.proposals for data_sample in batch_data_samples + ] + + positive_coords = [] + for i in range(len(self.roi_head)): + roi_losses = self.roi_head[i].loss(x, proposal_list, + batch_data_samples) + if self.with_pos_coord: + positive_coords.append(roi_losses.pop('pos_coords')) + else: + if 'pos_coords' in roi_losses.keys(): + roi_losses.pop('pos_coords') + roi_losses = upd_loss(roi_losses, idx=i) + losses.update(roi_losses) + + for i in range(len(self.bbox_head)): + bbox_losses = self.bbox_head[i].loss(x, batch_data_samples) + if self.with_pos_coord: + pos_coords = bbox_losses.pop('pos_coords') + positive_coords.append(pos_coords) + else: + if 'pos_coords' in bbox_losses.keys(): + bbox_losses.pop('pos_coords') + bbox_losses = upd_loss(bbox_losses, idx=i + len(self.roi_head)) + losses.update(bbox_losses) + + if self.with_pos_coord and len(positive_coords) > 0: + for i in range(len(positive_coords)): + bbox_losses = self.query_head.loss_aux(x, positive_coords[i], + i, batch_data_samples) + bbox_losses = upd_loss(bbox_losses, idx=i) + losses.update(bbox_losses) + + return losses + + def predict(self, + batch_inputs: Tensor, + batch_data_samples: SampleList, + rescale: bool = True) -> SampleList: + """Predict results from a batch of inputs and data samples with post- + processing. + + Args: + batch_inputs (Tensor): Inputs, has shape (bs, dim, H, W). + batch_data_samples (List[:obj:`DetDataSample`]): The batch + data samples. It usually includes information such + as `gt_instance` or `gt_panoptic_seg` or `gt_sem_seg`. + rescale (bool): Whether to rescale the results. + Defaults to True. + + Returns: + list[:obj:`DetDataSample`]: Detection results of the input images. + Each DetDataSample usually contain 'pred_instances'. And the + `pred_instances` usually contains following keys. + + - scores (Tensor): Classification scores, has a shape + (num_instance, ) + - labels (Tensor): Labels of bboxes, has a shape + (num_instances, ). + - bboxes (Tensor): Has a shape (num_instances, 4), + the last dimension 4 arrange as (x1, y1, x2, y2). + """ + assert self.eval_module in ['detr', 'one-stage', 'two-stage'] + + if self.use_lsj: + for data_samples in batch_data_samples: + img_metas = data_samples.metainfo + input_img_h, input_img_w = img_metas['batch_input_shape'] + img_metas['img_shape'] = [input_img_h, input_img_w] + + img_feats = self.extract_feat(batch_inputs) + if self.with_bbox and self.eval_module == 'one-stage': + results_list = self.predict_bbox_head( + img_feats, batch_data_samples, rescale=rescale) + elif self.with_roi_head and self.eval_module == 'two-stage': + results_list = self.predict_roi_head( + img_feats, batch_data_samples, rescale=rescale) + else: + results_list = self.predict_query_head( + img_feats, batch_data_samples, rescale=rescale) + + batch_data_samples = self.add_pred_to_datasample( + batch_data_samples, results_list) + return batch_data_samples + + def predict_query_head(self, + mlvl_feats: Tuple[Tensor], + batch_data_samples: SampleList, + rescale: bool = True) -> InstanceList: + return self.query_head.predict( + mlvl_feats, batch_data_samples=batch_data_samples, rescale=rescale) + + def predict_roi_head(self, + mlvl_feats: Tuple[Tensor], + batch_data_samples: SampleList, + rescale: bool = True) -> InstanceList: + assert self.with_bbox, 'Bbox head must be implemented.' + if self.with_query_head: + batch_img_metas = [ + data_samples.metainfo for data_samples in batch_data_samples + ] + results = self.query_head.forward(mlvl_feats, batch_img_metas) + mlvl_feats = results[-1] + rpn_results_list = self.rpn_head.predict( + mlvl_feats, batch_data_samples, rescale=False) + return self.roi_head[self.eval_index].predict( + mlvl_feats, rpn_results_list, batch_data_samples, rescale=rescale) + + def predict_bbox_head(self, + mlvl_feats: Tuple[Tensor], + batch_data_samples: SampleList, + rescale: bool = True) -> InstanceList: + assert self.with_bbox, 'Bbox head must be implemented.' + if self.with_query_head: + batch_img_metas = [ + data_samples.metainfo for data_samples in batch_data_samples + ] + results = self.query_head.forward(mlvl_feats, batch_img_metas) + mlvl_feats = results[-1] + return self.bbox_head[self.eval_index].predict( + mlvl_feats, batch_data_samples, rescale=rescale) diff --git a/projects/CO-DETR/codetr/transformer.py b/projects/CO-DETR/codetr/transformer.py new file mode 100644 index 00000000000..009f94a8bcc --- /dev/null +++ b/projects/CO-DETR/codetr/transformer.py @@ -0,0 +1,1376 @@ +import math +import warnings + +import torch +import torch.nn as nn +from mmcv.cnn import build_norm_layer +from mmcv.cnn.bricks.transformer import (BaseTransformerLayer, + TransformerLayerSequence, + build_transformer_layer_sequence) +from mmcv.ops import MultiScaleDeformableAttention +from mmengine.model import BaseModule +from mmengine.model.weight_init import xavier_init +from torch.nn.init import normal_ + +from mmdet.models.layers.transformer import inverse_sigmoid +from mmdet.registry import MODELS + +try: + from fairscale.nn.checkpoint import checkpoint_wrapper +except Exception: + checkpoint_wrapper = None + +# In order to save the cost and effort of reproduction, +# I did not refactor it into the style of mmdet 3.x DETR. + + +class Transformer(BaseModule): + """Implements the DETR transformer. + + Following the official DETR implementation, this module copy-paste + from torch.nn.Transformer with modifications: + + * positional encodings are passed in MultiheadAttention + * extra LN at the end of encoder is removed + * decoder returns a stack of activations from all decoding layers + + See `paper: End-to-End Object Detection with Transformers + `_ for details. + + Args: + encoder (`mmcv.ConfigDict` | Dict): Config of + TransformerEncoder. Defaults to None. + decoder ((`mmcv.ConfigDict` | Dict)): Config of + TransformerDecoder. Defaults to None + init_cfg (obj:`mmcv.ConfigDict`): The Config for initialization. + Defaults to None. + """ + + def __init__(self, encoder=None, decoder=None, init_cfg=None): + super(Transformer, self).__init__(init_cfg=init_cfg) + self.encoder = build_transformer_layer_sequence(encoder) + self.decoder = build_transformer_layer_sequence(decoder) + self.embed_dims = self.encoder.embed_dims + + def init_weights(self): + # follow the official DETR to init parameters + for m in self.modules(): + if hasattr(m, 'weight') and m.weight.dim() > 1: + xavier_init(m, distribution='uniform') + self._is_init = True + + def forward(self, x, mask, query_embed, pos_embed): + """Forward function for `Transformer`. + + Args: + x (Tensor): Input query with shape [bs, c, h, w] where + c = embed_dims. + mask (Tensor): The key_padding_mask used for encoder and decoder, + with shape [bs, h, w]. + query_embed (Tensor): The query embedding for decoder, with shape + [num_query, c]. + pos_embed (Tensor): The positional encoding for encoder and + decoder, with the same shape as `x`. + + Returns: + tuple[Tensor]: results of decoder containing the following tensor. + + - out_dec: Output from decoder. If return_intermediate_dec \ + is True output has shape [num_dec_layers, bs, + num_query, embed_dims], else has shape [1, bs, \ + num_query, embed_dims]. + - memory: Output results from encoder, with shape \ + [bs, embed_dims, h, w]. + """ + bs, c, h, w = x.shape + # use `view` instead of `flatten` for dynamically exporting to ONNX + x = x.view(bs, c, -1).permute(2, 0, 1) # [bs, c, h, w] -> [h*w, bs, c] + pos_embed = pos_embed.view(bs, c, -1).permute(2, 0, 1) + query_embed = query_embed.unsqueeze(1).repeat( + 1, bs, 1) # [num_query, dim] -> [num_query, bs, dim] + mask = mask.view(bs, -1) # [bs, h, w] -> [bs, h*w] + memory = self.encoder( + query=x, + key=None, + value=None, + query_pos=pos_embed, + query_key_padding_mask=mask) + target = torch.zeros_like(query_embed) + # out_dec: [num_layers, num_query, bs, dim] + out_dec = self.decoder( + query=target, + key=memory, + value=memory, + key_pos=pos_embed, + query_pos=query_embed, + key_padding_mask=mask) + out_dec = out_dec.transpose(1, 2) + memory = memory.permute(1, 2, 0).reshape(bs, c, h, w) + return out_dec, memory + + +@MODELS.register_module(force=True) +class DeformableDetrTransformerDecoder(TransformerLayerSequence): + """Implements the decoder in DETR transformer. + + Args: + return_intermediate (bool): Whether to return intermediate outputs. + coder_norm_cfg (dict): Config of last normalization layer. Default: + `LN`. + """ + + def __init__(self, *args, return_intermediate=False, **kwargs): + + super(DeformableDetrTransformerDecoder, self).__init__(*args, **kwargs) + self.return_intermediate = return_intermediate + + def forward(self, + query, + *args, + reference_points=None, + valid_ratios=None, + reg_branches=None, + **kwargs): + """Forward function for `TransformerDecoder`. + + Args: + query (Tensor): Input query with shape + `(num_query, bs, embed_dims)`. + reference_points (Tensor): The reference + points of offset. has shape + (bs, num_query, 4) when as_two_stage, + otherwise has shape ((bs, num_query, 2). + valid_ratios (Tensor): The radios of valid + points on the feature map, has shape + (bs, num_levels, 2) + reg_branch: (obj:`nn.ModuleList`): Used for + refining the regression results. Only would + be passed when with_box_refine is True, + otherwise would be passed a `None`. + + Returns: + Tensor: Results with shape [1, num_query, bs, embed_dims] when + return_intermediate is `False`, otherwise it has shape + [num_layers, num_query, bs, embed_dims]. + """ + output = query + intermediate = [] + intermediate_reference_points = [] + for lid, layer in enumerate(self.layers): + if reference_points.shape[-1] == 4: + reference_points_input = reference_points[:, :, None] * \ + torch.cat([valid_ratios, valid_ratios], -1)[:, None] + else: + assert reference_points.shape[-1] == 2 + reference_points_input = reference_points[:, :, None] * \ + valid_ratios[:, None] + output = layer( + output, + *args, + reference_points=reference_points_input, + **kwargs) + output = output.permute(1, 0, 2) + + if reg_branches is not None: + tmp = reg_branches[lid](output) + if reference_points.shape[-1] == 4: + new_reference_points = tmp + inverse_sigmoid( + reference_points) + new_reference_points = new_reference_points.sigmoid() + else: + assert reference_points.shape[-1] == 2 + new_reference_points = tmp + new_reference_points[..., :2] = tmp[ + ..., :2] + inverse_sigmoid(reference_points) + new_reference_points = new_reference_points.sigmoid() + reference_points = new_reference_points.detach() + + output = output.permute(1, 0, 2) + if self.return_intermediate: + intermediate.append(output) + intermediate_reference_points.append(reference_points) + + if self.return_intermediate: + return torch.stack(intermediate), torch.stack( + intermediate_reference_points) + + return output, reference_points + + +@MODELS.register_module(force=True) +class DeformableDetrTransformer(Transformer): + """Implements the DeformableDETR transformer. + + Args: + as_two_stage (bool): Generate query from encoder features. + Default: False. + num_feature_levels (int): Number of feature maps from FPN: + Default: 4. + two_stage_num_proposals (int): Number of proposals when set + `as_two_stage` as True. Default: 300. + """ + + def __init__(self, + as_two_stage=False, + num_feature_levels=4, + two_stage_num_proposals=300, + **kwargs): + super(DeformableDetrTransformer, self).__init__(**kwargs) + self.as_two_stage = as_two_stage + self.num_feature_levels = num_feature_levels + self.two_stage_num_proposals = two_stage_num_proposals + self.embed_dims = self.encoder.embed_dims + self.init_layers() + + def init_layers(self): + """Initialize layers of the DeformableDetrTransformer.""" + self.level_embeds = nn.Parameter( + torch.Tensor(self.num_feature_levels, self.embed_dims)) + + if self.as_two_stage: + self.enc_output = nn.Linear(self.embed_dims, self.embed_dims) + self.enc_output_norm = nn.LayerNorm(self.embed_dims) + self.pos_trans = nn.Linear(self.embed_dims * 2, + self.embed_dims * 2) + self.pos_trans_norm = nn.LayerNorm(self.embed_dims * 2) + else: + self.reference_points = nn.Linear(self.embed_dims, 2) + + def init_weights(self): + """Initialize the transformer weights.""" + for p in self.parameters(): + if p.dim() > 1: + nn.init.xavier_uniform_(p) + for m in self.modules(): + if isinstance(m, MultiScaleDeformableAttention): + m.init_weights() + if not self.as_two_stage: + xavier_init(self.reference_points, distribution='uniform', bias=0.) + normal_(self.level_embeds) + + def gen_encoder_output_proposals(self, memory, memory_padding_mask, + spatial_shapes): + """Generate proposals from encoded memory. + + Args: + memory (Tensor) : The output of encoder, + has shape (bs, num_key, embed_dim). num_key is + equal the number of points on feature map from + all level. + memory_padding_mask (Tensor): Padding mask for memory. + has shape (bs, num_key). + spatial_shapes (Tensor): The shape of all feature maps. + has shape (num_level, 2). + + Returns: + tuple: A tuple of feature map and bbox prediction. + + - output_memory (Tensor): The input of decoder, \ + has shape (bs, num_key, embed_dim). num_key is \ + equal the number of points on feature map from \ + all levels. + - output_proposals (Tensor): The normalized proposal \ + after a inverse sigmoid, has shape \ + (bs, num_keys, 4). + """ + + N, S, C = memory.shape + proposals = [] + _cur = 0 + for lvl, (H, W) in enumerate(spatial_shapes): + mask_flatten_ = memory_padding_mask[:, _cur:(_cur + H * W)].view( + N, H, W, 1) + valid_H = torch.sum(~mask_flatten_[:, :, 0, 0], 1) + valid_W = torch.sum(~mask_flatten_[:, 0, :, 0], 1) + + grid_y, grid_x = torch.meshgrid( + torch.linspace( + 0, H - 1, H, dtype=torch.float32, device=memory.device), + torch.linspace( + 0, W - 1, W, dtype=torch.float32, device=memory.device)) + grid = torch.cat([grid_x.unsqueeze(-1), grid_y.unsqueeze(-1)], -1) + + scale = torch.cat([valid_W.unsqueeze(-1), + valid_H.unsqueeze(-1)], 1).view(N, 1, 1, 2) + grid = (grid.unsqueeze(0).expand(N, -1, -1, -1) + 0.5) / scale + wh = torch.ones_like(grid) * 0.05 * (2.0**lvl) + proposal = torch.cat((grid, wh), -1).view(N, -1, 4) + proposals.append(proposal) + _cur += (H * W) + output_proposals = torch.cat(proposals, 1) + output_proposals_valid = ((output_proposals > 0.01) & + (output_proposals < 0.99)).all( + -1, keepdim=True) + output_proposals = torch.log(output_proposals / (1 - output_proposals)) + output_proposals = output_proposals.masked_fill( + memory_padding_mask.unsqueeze(-1), float('inf')) + output_proposals = output_proposals.masked_fill( + ~output_proposals_valid, float('inf')) + + output_memory = memory + output_memory = output_memory.masked_fill( + memory_padding_mask.unsqueeze(-1), float(0)) + output_memory = output_memory.masked_fill(~output_proposals_valid, + float(0)) + output_memory = self.enc_output_norm(self.enc_output(output_memory)) + return output_memory, output_proposals + + @staticmethod + def get_reference_points(spatial_shapes, valid_ratios, device): + """Get the reference points used in decoder. + + Args: + spatial_shapes (Tensor): The shape of all + feature maps, has shape (num_level, 2). + valid_ratios (Tensor): The radios of valid + points on the feature map, has shape + (bs, num_levels, 2) + device (obj:`device`): The device where + reference_points should be. + + Returns: + Tensor: reference points used in decoder, has \ + shape (bs, num_keys, num_levels, 2). + """ + reference_points_list = [] + for lvl, (H, W) in enumerate(spatial_shapes): + ref_y, ref_x = torch.meshgrid( + torch.linspace( + 0.5, H - 0.5, H, dtype=torch.float32, device=device), + torch.linspace( + 0.5, W - 0.5, W, dtype=torch.float32, device=device)) + ref_y = ref_y.reshape(-1)[None] / ( + valid_ratios[:, None, lvl, 1] * H) + ref_x = ref_x.reshape(-1)[None] / ( + valid_ratios[:, None, lvl, 0] * W) + ref = torch.stack((ref_x, ref_y), -1) + reference_points_list.append(ref) + reference_points = torch.cat(reference_points_list, 1) + reference_points = reference_points[:, :, None] * valid_ratios[:, None] + return reference_points + + def get_valid_ratio(self, mask): + """Get the valid radios of feature maps of all level.""" + _, H, W = mask.shape + valid_H = torch.sum(~mask[:, :, 0], 1) + valid_W = torch.sum(~mask[:, 0, :], 1) + valid_ratio_h = valid_H.float() / H + valid_ratio_w = valid_W.float() / W + valid_ratio = torch.stack([valid_ratio_w, valid_ratio_h], -1) + return valid_ratio + + def get_proposal_pos_embed(self, + proposals, + num_pos_feats=128, + temperature=10000): + """Get the position embedding of proposal.""" + scale = 2 * math.pi + dim_t = torch.arange( + num_pos_feats, dtype=torch.float32, device=proposals.device) + dim_t = temperature**(2 * (dim_t // 2) / num_pos_feats) + # N, L, 4 + proposals = proposals.sigmoid() * scale + # N, L, 4, 128 + pos = proposals[:, :, :, None] / dim_t + # N, L, 4, 64, 2 + pos = torch.stack((pos[:, :, :, 0::2].sin(), pos[:, :, :, 1::2].cos()), + dim=4).flatten(2) + return pos + + def forward(self, + mlvl_feats, + mlvl_masks, + query_embed, + mlvl_pos_embeds, + reg_branches=None, + cls_branches=None, + **kwargs): + """Forward function for `Transformer`. + + Args: + mlvl_feats (list(Tensor)): Input queries from + different level. Each element has shape + [bs, embed_dims, h, w]. + mlvl_masks (list(Tensor)): The key_padding_mask from + different level used for encoder and decoder, + each element has shape [bs, h, w]. + query_embed (Tensor): The query embedding for decoder, + with shape [num_query, c]. + mlvl_pos_embeds (list(Tensor)): The positional encoding + of feats from different level, has the shape + [bs, embed_dims, h, w]. + reg_branches (obj:`nn.ModuleList`): Regression heads for + feature maps from each decoder layer. Only would + be passed when + `with_box_refine` is True. Default to None. + cls_branches (obj:`nn.ModuleList`): Classification heads + for feature maps from each decoder layer. Only would + be passed when `as_two_stage` + is True. Default to None. + + + Returns: + tuple[Tensor]: results of decoder containing the following tensor. + + - inter_states: Outputs from decoder. If + return_intermediate_dec is True output has shape \ + (num_dec_layers, bs, num_query, embed_dims), else has \ + shape (1, bs, num_query, embed_dims). + - init_reference_out: The initial value of reference \ + points, has shape (bs, num_queries, 4). + - inter_references_out: The internal value of reference \ + points in decoder, has shape \ + (num_dec_layers, bs,num_query, embed_dims) + - enc_outputs_class: The classification score of \ + proposals generated from \ + encoder's feature maps, has shape \ + (batch, h*w, num_classes). \ + Only would be returned when `as_two_stage` is True, \ + otherwise None. + - enc_outputs_coord_unact: The regression results \ + generated from encoder's feature maps., has shape \ + (batch, h*w, 4). Only would \ + be returned when `as_two_stage` is True, \ + otherwise None. + """ + assert self.as_two_stage or query_embed is not None + + feat_flatten = [] + mask_flatten = [] + lvl_pos_embed_flatten = [] + spatial_shapes = [] + for lvl, (feat, mask, pos_embed) in enumerate( + zip(mlvl_feats, mlvl_masks, mlvl_pos_embeds)): + bs, c, h, w = feat.shape + spatial_shape = (h, w) + spatial_shapes.append(spatial_shape) + feat = feat.flatten(2).transpose(1, 2) + mask = mask.flatten(1) + pos_embed = pos_embed.flatten(2).transpose(1, 2) + lvl_pos_embed = pos_embed + self.level_embeds[lvl].view(1, 1, -1) + lvl_pos_embed_flatten.append(lvl_pos_embed) + feat_flatten.append(feat) + mask_flatten.append(mask) + feat_flatten = torch.cat(feat_flatten, 1) + mask_flatten = torch.cat(mask_flatten, 1) + lvl_pos_embed_flatten = torch.cat(lvl_pos_embed_flatten, 1) + spatial_shapes = torch.as_tensor( + spatial_shapes, dtype=torch.long, device=feat_flatten.device) + level_start_index = torch.cat((spatial_shapes.new_zeros( + (1, )), spatial_shapes.prod(1).cumsum(0)[:-1])) + valid_ratios = torch.stack( + [self.get_valid_ratio(m) for m in mlvl_masks], 1) + + reference_points = \ + self.get_reference_points(spatial_shapes, + valid_ratios, + device=feat.device) + + feat_flatten = feat_flatten.permute(1, 0, 2) # (H*W, bs, embed_dims) + lvl_pos_embed_flatten = lvl_pos_embed_flatten.permute( + 1, 0, 2) # (H*W, bs, embed_dims) + memory = self.encoder( + query=feat_flatten, + key=None, + value=None, + query_pos=lvl_pos_embed_flatten, + query_key_padding_mask=mask_flatten, + spatial_shapes=spatial_shapes, + reference_points=reference_points, + level_start_index=level_start_index, + valid_ratios=valid_ratios, + **kwargs) + + memory = memory.permute(1, 0, 2) + bs, _, c = memory.shape + if self.as_two_stage: + output_memory, output_proposals = \ + self.gen_encoder_output_proposals( + memory, mask_flatten, spatial_shapes) + enc_outputs_class = cls_branches[self.decoder.num_layers]( + output_memory) + enc_outputs_coord_unact = \ + reg_branches[ + self.decoder.num_layers](output_memory) + output_proposals + + topk = self.two_stage_num_proposals + # We only use the first channel in enc_outputs_class as foreground, + # the other (num_classes - 1) channels are actually not used. + # Its targets are set to be 0s, which indicates the first + # class (foreground) because we use [0, num_classes - 1] to + # indicate class labels, background class is indicated by + # num_classes (similar convention in RPN). + # See https://github.com/open-mmlab/mmdetection/blob/master/mmdet/models/dense_heads/deformable_detr_head.py#L241 # noqa + # This follows the official implementation of Deformable DETR. + topk_proposals = torch.topk( + enc_outputs_class[..., 0], topk, dim=1)[1] + topk_coords_unact = torch.gather( + enc_outputs_coord_unact, 1, + topk_proposals.unsqueeze(-1).repeat(1, 1, 4)) + topk_coords_unact = topk_coords_unact.detach() + reference_points = topk_coords_unact.sigmoid() + init_reference_out = reference_points + pos_trans_out = self.pos_trans_norm( + self.pos_trans(self.get_proposal_pos_embed(topk_coords_unact))) + query_pos, query = torch.split(pos_trans_out, c, dim=2) + else: + query_pos, query = torch.split(query_embed, c, dim=1) + query_pos = query_pos.unsqueeze(0).expand(bs, -1, -1) + query = query.unsqueeze(0).expand(bs, -1, -1) + reference_points = self.reference_points(query_pos).sigmoid() + init_reference_out = reference_points + + # decoder + query = query.permute(1, 0, 2) + memory = memory.permute(1, 0, 2) + query_pos = query_pos.permute(1, 0, 2) + inter_states, inter_references = self.decoder( + query=query, + key=None, + value=memory, + query_pos=query_pos, + key_padding_mask=mask_flatten, + reference_points=reference_points, + spatial_shapes=spatial_shapes, + level_start_index=level_start_index, + valid_ratios=valid_ratios, + reg_branches=reg_branches, + **kwargs) + + inter_references_out = inter_references + if self.as_two_stage: + return inter_states, init_reference_out,\ + inter_references_out, enc_outputs_class,\ + enc_outputs_coord_unact + return inter_states, init_reference_out, \ + inter_references_out, None, None + + +@MODELS.register_module() +class CoDeformableDetrTransformerDecoder(TransformerLayerSequence): + """Implements the decoder in DETR transformer. + + Args: + return_intermediate (bool): Whether to return intermediate outputs. + coder_norm_cfg (dict): Config of last normalization layer. Default: + `LN`. + """ + + def __init__(self, + *args, + return_intermediate=False, + look_forward_twice=False, + **kwargs): + + super(CoDeformableDetrTransformerDecoder, + self).__init__(*args, **kwargs) + self.return_intermediate = return_intermediate + self.look_forward_twice = look_forward_twice + + def forward(self, + query, + *args, + reference_points=None, + valid_ratios=None, + reg_branches=None, + **kwargs): + """Forward function for `TransformerDecoder`. + + Args: + query (Tensor): Input query with shape + `(num_query, bs, embed_dims)`. + reference_points (Tensor): The reference + points of offset. has shape + (bs, num_query, 4) when as_two_stage, + otherwise has shape ((bs, num_query, 2). + valid_ratios (Tensor): The radios of valid + points on the feature map, has shape + (bs, num_levels, 2) + reg_branch: (obj:`nn.ModuleList`): Used for + refining the regression results. Only would + be passed when with_box_refine is True, + otherwise would be passed a `None`. + + Returns: + Tensor: Results with shape [1, num_query, bs, embed_dims] when + return_intermediate is `False`, otherwise it has shape + [num_layers, num_query, bs, embed_dims]. + """ + output = query + intermediate = [] + intermediate_reference_points = [] + for lid, layer in enumerate(self.layers): + if reference_points.shape[-1] == 4: + reference_points_input = reference_points[:, :, None] * \ + torch.cat([valid_ratios, valid_ratios], -1)[:, None] + else: + assert reference_points.shape[-1] == 2 + reference_points_input = reference_points[:, :, None] * \ + valid_ratios[:, None] + output = layer( + output, + *args, + reference_points=reference_points_input, + **kwargs) + output = output.permute(1, 0, 2) + + if reg_branches is not None: + tmp = reg_branches[lid](output) + if reference_points.shape[-1] == 4: + new_reference_points = tmp + inverse_sigmoid( + reference_points) + new_reference_points = new_reference_points.sigmoid() + else: + assert reference_points.shape[-1] == 2 + new_reference_points = tmp + new_reference_points[..., :2] = tmp[ + ..., :2] + inverse_sigmoid(reference_points) + new_reference_points = new_reference_points.sigmoid() + reference_points = new_reference_points.detach() + + output = output.permute(1, 0, 2) + if self.return_intermediate: + intermediate.append(output) + intermediate_reference_points.append( + new_reference_points if self. + look_forward_twice else reference_points) + if self.return_intermediate: + return torch.stack(intermediate), torch.stack( + intermediate_reference_points) + + return output, reference_points + + +@MODELS.register_module() +class CoDeformableDetrTransformer(DeformableDetrTransformer): + + def __init__(self, + mixed_selection=True, + with_pos_coord=True, + with_coord_feat=True, + num_co_heads=1, + **kwargs): + self.mixed_selection = mixed_selection + self.with_pos_coord = with_pos_coord + self.with_coord_feat = with_coord_feat + self.num_co_heads = num_co_heads + super(CoDeformableDetrTransformer, self).__init__(**kwargs) + self._init_layers() + + def _init_layers(self): + """Initialize layers of the CoDeformableDetrTransformer.""" + if self.with_pos_coord: + if self.num_co_heads > 0: + # bug: this code should be 'self.head_pos_embed = + # nn.Embedding(self.num_co_heads, self.embed_dims)', + # we keep this bug for reproducing our results with ResNet-50. + # You can fix this bug when reproducing results with + # swin transformer. + self.head_pos_embed = nn.Embedding(self.num_co_heads, 1, 1, + self.embed_dims) + self.aux_pos_trans = nn.ModuleList() + self.aux_pos_trans_norm = nn.ModuleList() + self.pos_feats_trans = nn.ModuleList() + self.pos_feats_norm = nn.ModuleList() + for i in range(self.num_co_heads): + self.aux_pos_trans.append( + nn.Linear(self.embed_dims * 2, self.embed_dims * 2)) + self.aux_pos_trans_norm.append( + nn.LayerNorm(self.embed_dims * 2)) + if self.with_coord_feat: + self.pos_feats_trans.append( + nn.Linear(self.embed_dims, self.embed_dims)) + self.pos_feats_norm.append( + nn.LayerNorm(self.embed_dims)) + + def get_proposal_pos_embed(self, + proposals, + num_pos_feats=128, + temperature=10000): + """Get the position embedding of proposal.""" + num_pos_feats = self.embed_dims // 2 + scale = 2 * math.pi + dim_t = torch.arange( + num_pos_feats, dtype=torch.float32, device=proposals.device) + dim_t = temperature**(2 * (dim_t // 2) / num_pos_feats) + # N, L, 4 + proposals = proposals.sigmoid() * scale + # N, L, 4, 128 + pos = proposals[:, :, :, None] / dim_t + # N, L, 4, 64, 2 + pos = torch.stack((pos[:, :, :, 0::2].sin(), pos[:, :, :, 1::2].cos()), + dim=4).flatten(2) + return pos + + def forward(self, + mlvl_feats, + mlvl_masks, + query_embed, + mlvl_pos_embeds, + reg_branches=None, + cls_branches=None, + return_encoder_output=False, + attn_masks=None, + **kwargs): + """Forward function for `Transformer`. + + Args: + mlvl_feats (list(Tensor)): Input queries from + different level. Each element has shape + [bs, embed_dims, h, w]. + mlvl_masks (list(Tensor)): The key_padding_mask from + different level used for encoder and decoder, + each element has shape [bs, h, w]. + query_embed (Tensor): The query embedding for decoder, + with shape [num_query, c]. + mlvl_pos_embeds (list(Tensor)): The positional encoding + of feats from different level, has the shape + [bs, embed_dims, h, w]. + reg_branches (obj:`nn.ModuleList`): Regression heads for + feature maps from each decoder layer. Only would + be passed when + `with_box_refine` is True. Default to None. + cls_branches (obj:`nn.ModuleList`): Classification heads + for feature maps from each decoder layer. Only would + be passed when `as_two_stage` + is True. Default to None. + + + Returns: + tuple[Tensor]: results of decoder containing the following tensor. + + - inter_states: Outputs from decoder. If + return_intermediate_dec is True output has shape \ + (num_dec_layers, bs, num_query, embed_dims), else has \ + shape (1, bs, num_query, embed_dims). + - init_reference_out: The initial value of reference \ + points, has shape (bs, num_queries, 4). + - inter_references_out: The internal value of reference \ + points in decoder, has shape \ + (num_dec_layers, bs,num_query, embed_dims) + - enc_outputs_class: The classification score of \ + proposals generated from \ + encoder's feature maps, has shape \ + (batch, h*w, num_classes). \ + Only would be returned when `as_two_stage` is True, \ + otherwise None. + - enc_outputs_coord_unact: The regression results \ + generated from encoder's feature maps., has shape \ + (batch, h*w, 4). Only would \ + be returned when `as_two_stage` is True, \ + otherwise None. + """ + assert self.as_two_stage or query_embed is not None + + feat_flatten = [] + mask_flatten = [] + lvl_pos_embed_flatten = [] + spatial_shapes = [] + for lvl, (feat, mask, pos_embed) in enumerate( + zip(mlvl_feats, mlvl_masks, mlvl_pos_embeds)): + bs, c, h, w = feat.shape + spatial_shape = (h, w) + spatial_shapes.append(spatial_shape) + feat = feat.flatten(2).transpose(1, 2) + mask = mask.flatten(1) + pos_embed = pos_embed.flatten(2).transpose(1, 2) + lvl_pos_embed = pos_embed + self.level_embeds[lvl].view(1, 1, -1) + lvl_pos_embed_flatten.append(lvl_pos_embed) + feat_flatten.append(feat) + mask_flatten.append(mask) + feat_flatten = torch.cat(feat_flatten, 1) + mask_flatten = torch.cat(mask_flatten, 1) + lvl_pos_embed_flatten = torch.cat(lvl_pos_embed_flatten, 1) + spatial_shapes = torch.as_tensor( + spatial_shapes, dtype=torch.long, device=feat_flatten.device) + level_start_index = torch.cat((spatial_shapes.new_zeros( + (1, )), spatial_shapes.prod(1).cumsum(0)[:-1])) + valid_ratios = torch.stack( + [self.get_valid_ratio(m) for m in mlvl_masks], 1) + + reference_points = \ + self.get_reference_points(spatial_shapes, + valid_ratios, + device=feat.device) + + feat_flatten = feat_flatten.permute(1, 0, 2) # (H*W, bs, embed_dims) + lvl_pos_embed_flatten = lvl_pos_embed_flatten.permute( + 1, 0, 2) # (H*W, bs, embed_dims) + memory = self.encoder( + query=feat_flatten, + key=None, + value=None, + query_pos=lvl_pos_embed_flatten, + query_key_padding_mask=mask_flatten, + spatial_shapes=spatial_shapes, + reference_points=reference_points, + level_start_index=level_start_index, + valid_ratios=valid_ratios, + **kwargs) + + memory = memory.permute(1, 0, 2) + bs, _, c = memory.shape + if self.as_two_stage: + output_memory, output_proposals = \ + self.gen_encoder_output_proposals( + memory, mask_flatten, spatial_shapes) + enc_outputs_class = cls_branches[self.decoder.num_layers]( + output_memory) + enc_outputs_coord_unact = \ + reg_branches[ + self.decoder.num_layers](output_memory) + output_proposals + + topk = self.two_stage_num_proposals + topk = query_embed.shape[0] + topk_proposals = torch.topk( + enc_outputs_class[..., 0], topk, dim=1)[1] + topk_coords_unact = torch.gather( + enc_outputs_coord_unact, 1, + topk_proposals.unsqueeze(-1).repeat(1, 1, 4)) + topk_coords_unact = topk_coords_unact.detach() + reference_points = topk_coords_unact.sigmoid() + init_reference_out = reference_points + pos_trans_out = self.pos_trans_norm( + self.pos_trans(self.get_proposal_pos_embed(topk_coords_unact))) + + if not self.mixed_selection: + query_pos, query = torch.split(pos_trans_out, c, dim=2) + else: + # query_embed here is the content embed for deformable DETR + query = query_embed.unsqueeze(0).expand(bs, -1, -1) + query_pos, _ = torch.split(pos_trans_out, c, dim=2) + else: + query_pos, query = torch.split(query_embed, c, dim=1) + query_pos = query_pos.unsqueeze(0).expand(bs, -1, -1) + query = query.unsqueeze(0).expand(bs, -1, -1) + reference_points = self.reference_points(query_pos).sigmoid() + init_reference_out = reference_points + + # decoder + query = query.permute(1, 0, 2) + memory = memory.permute(1, 0, 2) + query_pos = query_pos.permute(1, 0, 2) + inter_states, inter_references = self.decoder( + query=query, + key=None, + value=memory, + query_pos=query_pos, + key_padding_mask=mask_flatten, + reference_points=reference_points, + spatial_shapes=spatial_shapes, + level_start_index=level_start_index, + valid_ratios=valid_ratios, + reg_branches=reg_branches, + attn_masks=attn_masks, + **kwargs) + + inter_references_out = inter_references + if self.as_two_stage: + if return_encoder_output: + return inter_states, init_reference_out,\ + inter_references_out, enc_outputs_class,\ + enc_outputs_coord_unact, memory + return inter_states, init_reference_out,\ + inter_references_out, enc_outputs_class,\ + enc_outputs_coord_unact + if return_encoder_output: + return inter_states, init_reference_out, \ + inter_references_out, None, None, memory + return inter_states, init_reference_out, \ + inter_references_out, None, None + + def forward_aux(self, + mlvl_feats, + mlvl_masks, + query_embed, + mlvl_pos_embeds, + pos_anchors, + pos_feats=None, + reg_branches=None, + cls_branches=None, + return_encoder_output=False, + attn_masks=None, + head_idx=0, + **kwargs): + feat_flatten = [] + mask_flatten = [] + spatial_shapes = [] + for lvl, (feat, mask, pos_embed) in enumerate( + zip(mlvl_feats, mlvl_masks, mlvl_pos_embeds)): + bs, c, h, w = feat.shape + spatial_shape = (h, w) + spatial_shapes.append(spatial_shape) + feat = feat.flatten(2).transpose(1, 2) + mask = mask.flatten(1) + feat_flatten.append(feat) + mask_flatten.append(mask) + feat_flatten = torch.cat(feat_flatten, 1) + mask_flatten = torch.cat(mask_flatten, 1) + spatial_shapes = torch.as_tensor( + spatial_shapes, dtype=torch.long, device=feat_flatten.device) + level_start_index = torch.cat((spatial_shapes.new_zeros( + (1, )), spatial_shapes.prod(1).cumsum(0)[:-1])) + valid_ratios = torch.stack( + [self.get_valid_ratio(m) for m in mlvl_masks], 1) + + feat_flatten = feat_flatten.permute(1, 0, 2) # (H*W, bs, embed_dims) + + memory = feat_flatten + memory = memory.permute(1, 0, 2) + bs, _, c = memory.shape + + topk_coords_unact = inverse_sigmoid(pos_anchors) + reference_points = pos_anchors + init_reference_out = reference_points + if self.num_co_heads > 0: + pos_trans_out = self.aux_pos_trans_norm[head_idx]( + self.aux_pos_trans[head_idx]( + self.get_proposal_pos_embed(topk_coords_unact))) + query_pos, query = torch.split(pos_trans_out, c, dim=2) + if self.with_coord_feat: + query = query + self.pos_feats_norm[head_idx]( + self.pos_feats_trans[head_idx](pos_feats)) + query_pos = query_pos + self.head_pos_embed.weight[head_idx] + + # decoder + query = query.permute(1, 0, 2) + memory = memory.permute(1, 0, 2) + query_pos = query_pos.permute(1, 0, 2) + inter_states, inter_references = self.decoder( + query=query, + key=None, + value=memory, + query_pos=query_pos, + key_padding_mask=mask_flatten, + reference_points=reference_points, + spatial_shapes=spatial_shapes, + level_start_index=level_start_index, + valid_ratios=valid_ratios, + reg_branches=reg_branches, + attn_masks=attn_masks, + **kwargs) + + inter_references_out = inter_references + return inter_states, init_reference_out, \ + inter_references_out + + +def build_MLP(input_dim, hidden_dim, output_dim, num_layers): + assert num_layers > 1, \ + f'num_layers should be greater than 1 but got {num_layers}' + h = [hidden_dim] * (num_layers - 1) + layers = list() + for n, k in zip([input_dim] + h[:-1], h): + layers.extend((nn.Linear(n, k), nn.ReLU())) + # Note that the relu func of MLP in original DETR repo is set + # 'inplace=False', however the ReLU cfg of FFN in mmdet is set + # 'inplace=True' by default. + layers.append(nn.Linear(hidden_dim, output_dim)) + return nn.Sequential(*layers) + + +@MODELS.register_module() +class DinoTransformerDecoder(DeformableDetrTransformerDecoder): + + def __init__(self, *args, **kwargs): + super(DinoTransformerDecoder, self).__init__(*args, **kwargs) + self._init_layers() + + def _init_layers(self): + self.ref_point_head = build_MLP(self.embed_dims * 2, self.embed_dims, + self.embed_dims, 2) + self.norm = nn.LayerNorm(self.embed_dims) + + @staticmethod + def gen_sineembed_for_position(pos_tensor, pos_feat): + # n_query, bs, _ = pos_tensor.size() + # sineembed_tensor = torch.zeros(n_query, bs, 256) + scale = 2 * math.pi + dim_t = torch.arange( + pos_feat, dtype=torch.float32, device=pos_tensor.device) + dim_t = 10000**(2 * (dim_t // 2) / pos_feat) + x_embed = pos_tensor[:, :, 0] * scale + y_embed = pos_tensor[:, :, 1] * scale + pos_x = x_embed[:, :, None] / dim_t + pos_y = y_embed[:, :, None] / dim_t + pos_x = torch.stack((pos_x[:, :, 0::2].sin(), pos_x[:, :, 1::2].cos()), + dim=3).flatten(2) + pos_y = torch.stack((pos_y[:, :, 0::2].sin(), pos_y[:, :, 1::2].cos()), + dim=3).flatten(2) + if pos_tensor.size(-1) == 2: + pos = torch.cat((pos_y, pos_x), dim=2) + elif pos_tensor.size(-1) == 4: + w_embed = pos_tensor[:, :, 2] * scale + pos_w = w_embed[:, :, None] / dim_t + pos_w = torch.stack( + (pos_w[:, :, 0::2].sin(), pos_w[:, :, 1::2].cos()), + dim=3).flatten(2) + + h_embed = pos_tensor[:, :, 3] * scale + pos_h = h_embed[:, :, None] / dim_t + pos_h = torch.stack( + (pos_h[:, :, 0::2].sin(), pos_h[:, :, 1::2].cos()), + dim=3).flatten(2) + + pos = torch.cat((pos_y, pos_x, pos_w, pos_h), dim=2) + else: + raise ValueError('Unknown pos_tensor shape(-1):{}'.format( + pos_tensor.size(-1))) + return pos + + def forward(self, + query, + *args, + reference_points=None, + valid_ratios=None, + reg_branches=None, + **kwargs): + output = query + intermediate = [] + intermediate_reference_points = [reference_points] + for lid, layer in enumerate(self.layers): + if reference_points.shape[-1] == 4: + reference_points_input = \ + reference_points[:, :, None] * torch.cat( + [valid_ratios, valid_ratios], -1)[:, None] + else: + assert reference_points.shape[-1] == 2 + reference_points_input = \ + reference_points[:, :, None] * valid_ratios[:, None] + + query_sine_embed = self.gen_sineembed_for_position( + reference_points_input[:, :, 0, :], self.embed_dims // 2) + query_pos = self.ref_point_head(query_sine_embed) + + query_pos = query_pos.permute(1, 0, 2) + output = layer( + output, + *args, + query_pos=query_pos, + reference_points=reference_points_input, + **kwargs) + output = output.permute(1, 0, 2) + + if reg_branches is not None: + tmp = reg_branches[lid](output) + assert reference_points.shape[-1] == 4 + new_reference_points = tmp + inverse_sigmoid( + reference_points, eps=1e-3) + new_reference_points = new_reference_points.sigmoid() + reference_points = new_reference_points.detach() + + output = output.permute(1, 0, 2) + if self.return_intermediate: + intermediate.append(self.norm(output)) + intermediate_reference_points.append(new_reference_points) + # NOTE this is for the "Look Forward Twice" module, + # in the DeformDETR, reference_points was appended. + + if self.return_intermediate: + return torch.stack(intermediate), torch.stack( + intermediate_reference_points) + + return output, reference_points + + +@MODELS.register_module() +class CoDinoTransformer(CoDeformableDetrTransformer): + + def __init__(self, *args, **kwargs): + super(CoDinoTransformer, self).__init__(*args, **kwargs) + + def init_layers(self): + """Initialize layers of the DinoTransformer.""" + self.level_embeds = nn.Parameter( + torch.Tensor(self.num_feature_levels, self.embed_dims)) + self.enc_output = nn.Linear(self.embed_dims, self.embed_dims) + self.enc_output_norm = nn.LayerNorm(self.embed_dims) + self.query_embed = nn.Embedding(self.two_stage_num_proposals, + self.embed_dims) + + def _init_layers(self): + if self.with_pos_coord: + if self.num_co_heads > 0: + self.aux_pos_trans = nn.ModuleList() + self.aux_pos_trans_norm = nn.ModuleList() + self.pos_feats_trans = nn.ModuleList() + self.pos_feats_norm = nn.ModuleList() + for i in range(self.num_co_heads): + self.aux_pos_trans.append( + nn.Linear(self.embed_dims * 2, self.embed_dims)) + self.aux_pos_trans_norm.append( + nn.LayerNorm(self.embed_dims)) + if self.with_coord_feat: + self.pos_feats_trans.append( + nn.Linear(self.embed_dims, self.embed_dims)) + self.pos_feats_norm.append( + nn.LayerNorm(self.embed_dims)) + + def init_weights(self): + super().init_weights() + nn.init.normal_(self.query_embed.weight.data) + + def forward(self, + mlvl_feats, + mlvl_masks, + query_embed, + mlvl_pos_embeds, + dn_label_query, + dn_bbox_query, + attn_mask, + reg_branches=None, + cls_branches=None, + **kwargs): + assert self.as_two_stage and query_embed is None, \ + 'as_two_stage must be True for DINO' + + feat_flatten = [] + mask_flatten = [] + lvl_pos_embed_flatten = [] + spatial_shapes = [] + for lvl, (feat, mask, pos_embed) in enumerate( + zip(mlvl_feats, mlvl_masks, mlvl_pos_embeds)): + bs, c, h, w = feat.shape + spatial_shape = (h, w) + spatial_shapes.append(spatial_shape) + feat = feat.flatten(2).transpose(1, 2) + mask = mask.flatten(1) + pos_embed = pos_embed.flatten(2).transpose(1, 2) + lvl_pos_embed = pos_embed + self.level_embeds[lvl].view(1, 1, -1) + lvl_pos_embed_flatten.append(lvl_pos_embed) + feat_flatten.append(feat) + mask_flatten.append(mask) + feat_flatten = torch.cat(feat_flatten, 1) + mask_flatten = torch.cat(mask_flatten, 1) + lvl_pos_embed_flatten = torch.cat(lvl_pos_embed_flatten, 1) + spatial_shapes = torch.as_tensor( + spatial_shapes, dtype=torch.long, device=feat_flatten.device) + level_start_index = torch.cat((spatial_shapes.new_zeros( + (1, )), spatial_shapes.prod(1).cumsum(0)[:-1])) + valid_ratios = torch.stack( + [self.get_valid_ratio(m) for m in mlvl_masks], 1) + + reference_points = self.get_reference_points( + spatial_shapes, valid_ratios, device=feat.device) + + feat_flatten = feat_flatten.permute(1, 0, 2) # (H*W, bs, embed_dims) + lvl_pos_embed_flatten = lvl_pos_embed_flatten.permute( + 1, 0, 2) # (H*W, bs, embed_dims) + memory = self.encoder( + query=feat_flatten, + key=None, + value=None, + query_pos=lvl_pos_embed_flatten, + query_key_padding_mask=mask_flatten, + spatial_shapes=spatial_shapes, + reference_points=reference_points, + level_start_index=level_start_index, + valid_ratios=valid_ratios, + **kwargs) + memory = memory.permute(1, 0, 2) + bs, _, c = memory.shape + + output_memory, output_proposals = self.gen_encoder_output_proposals( + memory, mask_flatten, spatial_shapes) + enc_outputs_class = cls_branches[self.decoder.num_layers]( + output_memory) + enc_outputs_coord_unact = reg_branches[self.decoder.num_layers]( + output_memory) + output_proposals + cls_out_features = cls_branches[self.decoder.num_layers].out_features + topk = self.two_stage_num_proposals + # NOTE In DeformDETR, enc_outputs_class[..., 0] is used for topk + topk_indices = torch.topk(enc_outputs_class.max(-1)[0], topk, dim=1)[1] + + topk_score = torch.gather( + enc_outputs_class, 1, + topk_indices.unsqueeze(-1).repeat(1, 1, cls_out_features)) + topk_coords_unact = torch.gather( + enc_outputs_coord_unact, 1, + topk_indices.unsqueeze(-1).repeat(1, 1, 4)) + topk_anchor = topk_coords_unact.sigmoid() + topk_coords_unact = topk_coords_unact.detach() + + query = self.query_embed.weight[:, None, :].repeat(1, bs, + 1).transpose(0, 1) + # NOTE the query_embed here is not spatial query as in DETR. + # It is actually content query, which is named tgt in other + # DETR-like models + if dn_label_query is not None: + query = torch.cat([dn_label_query, query], dim=1) + if dn_bbox_query is not None: + reference_points = torch.cat([dn_bbox_query, topk_coords_unact], + dim=1) + else: + reference_points = topk_coords_unact + reference_points = reference_points.sigmoid() + # decoder + query = query.permute(1, 0, 2) + memory = memory.permute(1, 0, 2) + inter_states, inter_references = self.decoder( + query=query, + key=None, + value=memory, + attn_masks=attn_mask, + key_padding_mask=mask_flatten, + reference_points=reference_points, + spatial_shapes=spatial_shapes, + level_start_index=level_start_index, + valid_ratios=valid_ratios, + reg_branches=reg_branches, + **kwargs) + + inter_references_out = inter_references + + return inter_states, inter_references_out, \ + topk_score, topk_anchor, memory + + def forward_aux(self, + mlvl_feats, + mlvl_masks, + query_embed, + mlvl_pos_embeds, + pos_anchors, + pos_feats=None, + reg_branches=None, + cls_branches=None, + return_encoder_output=False, + attn_masks=None, + head_idx=0, + **kwargs): + feat_flatten = [] + mask_flatten = [] + spatial_shapes = [] + for lvl, (feat, mask, pos_embed) in enumerate( + zip(mlvl_feats, mlvl_masks, mlvl_pos_embeds)): + bs, c, h, w = feat.shape + spatial_shape = (h, w) + spatial_shapes.append(spatial_shape) + feat = feat.flatten(2).transpose(1, 2) + mask = mask.flatten(1) + feat_flatten.append(feat) + mask_flatten.append(mask) + feat_flatten = torch.cat(feat_flatten, 1) + mask_flatten = torch.cat(mask_flatten, 1) + spatial_shapes = torch.as_tensor( + spatial_shapes, dtype=torch.long, device=feat_flatten.device) + level_start_index = torch.cat((spatial_shapes.new_zeros( + (1, )), spatial_shapes.prod(1).cumsum(0)[:-1])) + valid_ratios = torch.stack( + [self.get_valid_ratio(m) for m in mlvl_masks], 1) + + feat_flatten = feat_flatten.permute(1, 0, 2) # (H*W, bs, embed_dims) + + memory = feat_flatten + memory = memory.permute(1, 0, 2) + bs, _, c = memory.shape + + topk_coords_unact = inverse_sigmoid(pos_anchors) + reference_points = pos_anchors + if self.num_co_heads > 0: + pos_trans_out = self.aux_pos_trans_norm[head_idx]( + self.aux_pos_trans[head_idx]( + self.get_proposal_pos_embed(topk_coords_unact))) + query = pos_trans_out + if self.with_coord_feat: + query = query + self.pos_feats_norm[head_idx]( + self.pos_feats_trans[head_idx](pos_feats)) + + # decoder + query = query.permute(1, 0, 2) + memory = memory.permute(1, 0, 2) + inter_states, inter_references = self.decoder( + query=query, + key=None, + value=memory, + attn_masks=None, + key_padding_mask=mask_flatten, + reference_points=reference_points, + spatial_shapes=spatial_shapes, + level_start_index=level_start_index, + valid_ratios=valid_ratios, + reg_branches=reg_branches, + **kwargs) + + inter_references_out = inter_references + + return inter_states, inter_references_out + + +@MODELS.register_module() +class DetrTransformerEncoder(TransformerLayerSequence): + """TransformerEncoder of DETR. + + Args: + post_norm_cfg (dict): Config of last normalization layer. Default: + `LN`. Only used when `self.pre_norm` is `True` + """ + + def __init__(self, + *args, + post_norm_cfg=dict(type='LN'), + with_cp=-1, + **kwargs): + super(DetrTransformerEncoder, self).__init__(*args, **kwargs) + if post_norm_cfg is not None: + self.post_norm = build_norm_layer( + post_norm_cfg, self.embed_dims)[1] if self.pre_norm else None + else: + assert not self.pre_norm, f'Use prenorm in ' \ + f'{self.__class__.__name__},' \ + f'Please specify post_norm_cfg' + self.post_norm = None + self.with_cp = with_cp + if self.with_cp > 0: + if checkpoint_wrapper is None: + warnings.warn('If you want to reduce GPU memory usage, \ + please install fairscale by executing the \ + following command: pip install fairscale.') + return + for i in range(self.with_cp): + self.layers[i] = checkpoint_wrapper(self.layers[i]) + + +@MODELS.register_module() +class DetrTransformerDecoderLayer(BaseTransformerLayer): + """Implements decoder layer in DETR transformer. + + Args: + attn_cfgs (list[`mmcv.ConfigDict`] | list[dict] | dict )): + Configs for self_attention or cross_attention, the order + should be consistent with it in `operation_order`. If it is + a dict, it would be expand to the number of attention in + `operation_order`. + feedforward_channels (int): The hidden dimension for FFNs. + ffn_dropout (float): Probability of an element to be zeroed + in ffn. Default 0.0. + operation_order (tuple[str]): The execution order of operation + in transformer. Such as ('self_attn', 'norm', 'ffn', 'norm'). + Default:None + act_cfg (dict): The activation config for FFNs. Default: `LN` + norm_cfg (dict): Config dict for normalization layer. + Default: `LN`. + ffn_num_fcs (int): The number of fully-connected layers in FFNs. + Default:2. + """ + + def __init__(self, + attn_cfgs, + feedforward_channels, + ffn_dropout=0.0, + operation_order=None, + act_cfg=dict(type='ReLU', inplace=True), + norm_cfg=dict(type='LN'), + ffn_num_fcs=2, + **kwargs): + super(DetrTransformerDecoderLayer, self).__init__( + attn_cfgs=attn_cfgs, + feedforward_channels=feedforward_channels, + ffn_dropout=ffn_dropout, + operation_order=operation_order, + act_cfg=act_cfg, + norm_cfg=norm_cfg, + ffn_num_fcs=ffn_num_fcs, + **kwargs) + assert len(operation_order) == 6 + assert set(operation_order) == set( + ['self_attn', 'norm', 'cross_attn', 'ffn']) diff --git a/projects/CO-DETR/configs/codino/co_dino_5scale_r50_8xb2_1x_coco.py b/projects/CO-DETR/configs/codino/co_dino_5scale_r50_8xb2_1x_coco.py new file mode 100644 index 00000000000..1a413043766 --- /dev/null +++ b/projects/CO-DETR/configs/codino/co_dino_5scale_r50_8xb2_1x_coco.py @@ -0,0 +1,68 @@ +_base_ = './co_dino_5scale_r50_lsj_8xb2_1x_coco.py' + +model = dict( + use_lsj=False, data_preprocessor=dict(pad_mask=False, batch_augments=None)) + +# train_pipeline, NOTE the img_scale and the Pad's size_divisor is different +# from the default setting in mmdet. +train_pipeline = [ + dict(type='LoadImageFromFile', backend_args=_base_.backend_args), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='RandomFlip', prob=0.5), + dict( + type='RandomChoice', + transforms=[ + [ + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ], + [ + dict( + type='RandomChoiceResize', + # The radio of all image in train dataset < 7 + # follow the original implement + scales=[(400, 4200), (500, 4200), (600, 4200)], + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=(384, 600), + allow_negative_crop=True), + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ] + ]), + dict(type='PackDetInputs') +] + +train_dataloader = dict( + dataset=dict( + _delete_=True, + type=_base_.dataset_type, + data_root=_base_.data_root, + ann_file='annotations/instances_train2017.json', + data_prefix=dict(img='train2017/'), + filter_cfg=dict(filter_empty_gt=False, min_size=32), + pipeline=train_pipeline, + backend_args=_base_.backend_args)) + +test_pipeline = [ + dict(type='LoadImageFromFile', backend_args=_base_.backend_args), + dict(type='Resize', scale=(1333, 800), keep_ratio=True), + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] + +val_dataloader = dict(dataset=dict(pipeline=test_pipeline)) +test_dataloader = val_dataloader diff --git a/projects/CO-DETR/configs/codino/co_dino_5scale_r50_lsj_8xb2_1x_coco.py b/projects/CO-DETR/configs/codino/co_dino_5scale_r50_lsj_8xb2_1x_coco.py new file mode 100644 index 00000000000..876b90f89c8 --- /dev/null +++ b/projects/CO-DETR/configs/codino/co_dino_5scale_r50_lsj_8xb2_1x_coco.py @@ -0,0 +1,359 @@ +_base_ = 'mmdet::common/ssj_scp_270k_coco-instance.py' + +custom_imports = dict( + imports=['projects.CO-DETR.codetr'], allow_failed_imports=False) + +# model settings +num_dec_layer = 6 +loss_lambda = 2.0 +num_classes = 80 + +image_size = (1024, 1024) +batch_augments = [ + dict(type='BatchFixedSizePad', size=image_size, pad_mask=True) +] +model = dict( + type='CoDETR', + # If using the lsj augmentation, + # it is recommended to set it to True. + use_lsj=True, + # detr: 52.1 + # one-stage: 49.4 + # two-stage: 47.9 + eval_module='detr', # in ['detr', 'one-stage', 'two-stage'] + data_preprocessor=dict( + type='DetDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True, + pad_mask=True, + batch_augments=batch_augments), + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=False), + norm_eval=True, + style='pytorch', + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50')), + neck=dict( + type='ChannelMapper', + in_channels=[256, 512, 1024, 2048], + kernel_size=1, + out_channels=256, + act_cfg=None, + norm_cfg=dict(type='GN', num_groups=32), + num_outs=5), + query_head=dict( + type='CoDINOHead', + num_query=900, + num_classes=num_classes, + in_channels=2048, + as_two_stage=True, + dn_cfg=dict( + label_noise_scale=0.5, + box_noise_scale=1.0, + group_cfg=dict(dynamic=True, num_groups=None, num_dn_queries=100)), + transformer=dict( + type='CoDinoTransformer', + with_coord_feat=False, + num_co_heads=2, # ATSS Aux Head + Faster RCNN Aux Head + num_feature_levels=5, + encoder=dict( + type='DetrTransformerEncoder', + num_layers=6, + # number of layers that use checkpoint. + # The maximum value for the setting is num_layers. + # FairScale must be installed for it to work. + with_cp=4, + transformerlayers=dict( + type='BaseTransformerLayer', + attn_cfgs=dict( + type='MultiScaleDeformableAttention', + embed_dims=256, + num_levels=5, + dropout=0.0), + feedforward_channels=2048, + ffn_dropout=0.0, + operation_order=('self_attn', 'norm', 'ffn', 'norm'))), + decoder=dict( + type='DinoTransformerDecoder', + num_layers=6, + return_intermediate=True, + transformerlayers=dict( + type='DetrTransformerDecoderLayer', + attn_cfgs=[ + dict( + type='MultiheadAttention', + embed_dims=256, + num_heads=8, + dropout=0.0), + dict( + type='MultiScaleDeformableAttention', + embed_dims=256, + num_levels=5, + dropout=0.0), + ], + feedforward_channels=2048, + ffn_dropout=0.0, + operation_order=('self_attn', 'norm', 'cross_attn', 'norm', + 'ffn', 'norm')))), + positional_encoding=dict( + type='SinePositionalEncoding', + num_feats=128, + temperature=20, + normalize=True), + loss_cls=dict( # Different from the DINO + type='QualityFocalLoss', + use_sigmoid=True, + beta=2.0, + loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=5.0), + loss_iou=dict(type='GIoULoss', loss_weight=2.0)), + rpn_head=dict( + type='RPNHead', + in_channels=256, + feat_channels=256, + anchor_generator=dict( + type='AnchorGenerator', + octave_base_scale=4, + scales_per_octave=3, + ratios=[0.5, 1.0, 2.0], + strides=[4, 8, 16, 32, 64, 128]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0]), + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=True, + loss_weight=1.0 * num_dec_layer * loss_lambda), + loss_bbox=dict( + type='L1Loss', loss_weight=1.0 * num_dec_layer * loss_lambda)), + roi_head=[ + dict( + type='CoStandardRoIHead', + bbox_roi_extractor=dict( + type='SingleRoIExtractor', + roi_layer=dict( + type='RoIAlign', output_size=7, sampling_ratio=0), + out_channels=256, + featmap_strides=[4, 8, 16, 32, 64], + finest_scale=56), + bbox_head=dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=num_classes, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=False, + reg_decoded_bbox=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0 * num_dec_layer * loss_lambda), + loss_bbox=dict( + type='GIoULoss', + loss_weight=10.0 * num_dec_layer * loss_lambda))) + ], + bbox_head=[ + dict( + type='CoATSSHead', + num_classes=num_classes, + in_channels=256, + stacked_convs=1, + feat_channels=256, + anchor_generator=dict( + type='AnchorGenerator', + ratios=[1.0], + octave_base_scale=8, + scales_per_octave=1, + strides=[4, 8, 16, 32, 64, 128]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[0.1, 0.1, 0.2, 0.2]), + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0 * num_dec_layer * loss_lambda), + loss_bbox=dict( + type='GIoULoss', + loss_weight=2.0 * num_dec_layer * loss_lambda), + loss_centerness=dict( + type='CrossEntropyLoss', + use_sigmoid=True, + loss_weight=1.0 * num_dec_layer * loss_lambda)), + ], + # model training and testing settings + train_cfg=[ + dict( + assigner=dict( + type='HungarianAssigner', + match_costs=[ + dict(type='FocalLossCost', weight=2.0), + dict(type='BBoxL1Cost', weight=5.0, box_format='xywh'), + dict(type='IoUCost', iou_mode='giou', weight=2.0) + ])), + dict( + rpn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + allowed_border=-1, + pos_weight=-1, + debug=False), + rpn_proposal=dict( + nms_pre=4000, + max_per_img=1000, + nms=dict(type='nms', iou_threshold=0.7), + min_bbox_size=0), + rcnn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.5, + min_pos_iou=0.5, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + pos_weight=-1, + debug=False)), + dict( + assigner=dict(type='ATSSAssigner', topk=9), + allowed_border=-1, + pos_weight=-1, + debug=False) + ], + test_cfg=[ + # Deferent from the DINO, we use the NMS. + dict( + max_per_img=300, + # NMS can improve the mAP by 0.2. + nms=dict(type='soft_nms', iou_threshold=0.8)), + dict( + rpn=dict( + nms_pre=1000, + max_per_img=1000, + nms=dict(type='nms', iou_threshold=0.7), + min_bbox_size=0), + rcnn=dict( + score_thr=0.0, + nms=dict(type='nms', iou_threshold=0.5), + max_per_img=100)), + dict( + # atss bbox head: + nms_pre=1000, + min_bbox_size=0, + score_thr=0.0, + nms=dict(type='nms', iou_threshold=0.6), + max_per_img=100), + # soft-nms is also supported for rcnn testing + # e.g., nms=dict(type='soft_nms', iou_threshold=0.5, min_score=0.05) + ]) + +# LSJ + CopyPaste +load_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict( + type='RandomResize', + scale=image_size, + ratio_range=(0.1, 2.0), + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=image_size, + recompute_bbox=True, + allow_negative_crop=True), + dict(type='FilterAnnotations', min_gt_bbox_wh=(1e-2, 1e-2)), + dict(type='RandomFlip', prob=0.5), + dict(type='Pad', size=image_size, pad_val=dict(img=(114, 114, 114))), +] + +train_pipeline = [ + dict(type='CopyPaste', max_num_pasted=100), + dict(type='PackDetInputs') +] + +train_dataloader = dict( + sampler=dict(type='DefaultSampler', shuffle=True), + dataset=dict( + pipeline=train_pipeline, + dataset=dict( + filter_cfg=dict(filter_empty_gt=False), pipeline=load_pipeline))) + +# follow ViTDet +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='Resize', scale=image_size, keep_ratio=True), # diff + dict(type='Pad', size=image_size, pad_val=dict(img=(114, 114, 114))), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] + +val_dataloader = dict(dataset=dict(pipeline=test_pipeline)) +test_dataloader = val_dataloader + +optim_wrapper = dict( + _delete_=True, + type='OptimWrapper', + optimizer=dict(type='AdamW', lr=2e-4, weight_decay=0.0001), + clip_grad=dict(max_norm=0.1, norm_type=2), + paramwise_cfg=dict(custom_keys={'backbone': dict(lr_mult=0.1)})) + +val_evaluator = dict(metric='bbox') +test_evaluator = val_evaluator + +max_epochs = 12 +train_cfg = dict( + _delete_=True, + type='EpochBasedTrainLoop', + max_epochs=max_epochs, + val_interval=1) + +param_scheduler = [ + dict( + type='MultiStepLR', + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[11], + gamma=0.1) +] + +default_hooks = dict( + checkpoint=dict(by_epoch=True, interval=1, max_keep_ckpts=3)) +log_processor = dict(by_epoch=True) + +# NOTE: `auto_scale_lr` is for automatically scaling LR, +# USER SHOULD NOT CHANGE ITS VALUES. +# base_batch_size = (8 GPUs) x (2 samples per GPU) +auto_scale_lr = dict(base_batch_size=16) diff --git a/projects/CO-DETR/configs/codino/co_dino_5scale_r50_lsj_8xb2_3x_coco.py b/projects/CO-DETR/configs/codino/co_dino_5scale_r50_lsj_8xb2_3x_coco.py new file mode 100644 index 00000000000..9a9fc34f680 --- /dev/null +++ b/projects/CO-DETR/configs/codino/co_dino_5scale_r50_lsj_8xb2_3x_coco.py @@ -0,0 +1,4 @@ +_base_ = ['co_dino_5scale_r50_lsj_8xb2_1x_coco.py'] + +param_scheduler = [dict(milestones=[30])] +train_cfg = dict(max_epochs=36) diff --git a/projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_16xb1_16e_o365tococo.py b/projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_16xb1_16e_o365tococo.py new file mode 100644 index 00000000000..8fdb73269ff --- /dev/null +++ b/projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_16xb1_16e_o365tococo.py @@ -0,0 +1,115 @@ +_base_ = ['co_dino_5scale_r50_8xb2_1x_coco.py'] + +pretrained = 'https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_large_patch4_window12_384_22k.pth' # noqa +load_from = 'https://download.openmmlab.com/mmdetection/v3.0/codetr/co_dino_5scale_swin_large_22e_o365-0a33e247.pth' # noqa + +# model settings +model = dict( + backbone=dict( + _delete_=True, + type='SwinTransformer', + pretrain_img_size=384, + embed_dims=192, + depths=[2, 2, 18, 2], + num_heads=[6, 12, 24, 48], + window_size=12, + mlp_ratio=4, + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.3, + patch_norm=True, + out_indices=(0, 1, 2, 3), + # Please only add indices that would be used + # in FPN, otherwise some parameter will not be used + with_cp=True, + convert_weights=True, + init_cfg=dict(type='Pretrained', checkpoint=pretrained)), + neck=dict(in_channels=[192, 384, 768, 1536]), + query_head=dict( + dn_cfg=dict(box_noise_scale=0.4, group_cfg=dict(num_dn_queries=500)), + transformer=dict(encoder=dict(with_cp=6)))) + +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='RandomFlip', prob=0.5), + dict( + type='RandomChoice', + transforms=[ + [ + dict( + type='RandomChoiceResize', + scales=[(480, 2048), (512, 2048), (544, 2048), (576, 2048), + (608, 2048), (640, 2048), (672, 2048), (704, 2048), + (736, 2048), (768, 2048), (800, 2048), (832, 2048), + (864, 2048), (896, 2048), (928, 2048), (960, 2048), + (992, 2048), (1024, 2048), (1056, 2048), + (1088, 2048), (1120, 2048), (1152, 2048), + (1184, 2048), (1216, 2048), (1248, 2048), + (1280, 2048), (1312, 2048), (1344, 2048), + (1376, 2048), (1408, 2048), (1440, 2048), + (1472, 2048), (1504, 2048), (1536, 2048)], + keep_ratio=True) + ], + [ + dict( + type='RandomChoiceResize', + # The radio of all image in train dataset < 7 + # follow the original implement + scales=[(400, 4200), (500, 4200), (600, 4200)], + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=(384, 600), + allow_negative_crop=True), + dict( + type='RandomChoiceResize', + scales=[(480, 2048), (512, 2048), (544, 2048), (576, 2048), + (608, 2048), (640, 2048), (672, 2048), (704, 2048), + (736, 2048), (768, 2048), (800, 2048), (832, 2048), + (864, 2048), (896, 2048), (928, 2048), (960, 2048), + (992, 2048), (1024, 2048), (1056, 2048), + (1088, 2048), (1120, 2048), (1152, 2048), + (1184, 2048), (1216, 2048), (1248, 2048), + (1280, 2048), (1312, 2048), (1344, 2048), + (1376, 2048), (1408, 2048), (1440, 2048), + (1472, 2048), (1504, 2048), (1536, 2048)], + keep_ratio=True) + ] + ]), + dict(type='PackDetInputs') +] + +train_dataloader = dict( + batch_size=1, num_workers=1, dataset=dict(pipeline=train_pipeline)) + +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='Resize', scale=(2048, 1280), keep_ratio=True), + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] + +val_dataloader = dict(dataset=dict(pipeline=test_pipeline)) +test_dataloader = val_dataloader + +optim_wrapper = dict(optimizer=dict(lr=1e-4)) + +max_epochs = 16 +train_cfg = dict(max_epochs=max_epochs) + +param_scheduler = [ + dict( + type='MultiStepLR', + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[8], + gamma=0.1) +] diff --git a/projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_16xb1_1x_coco.py b/projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_16xb1_1x_coco.py new file mode 100644 index 00000000000..d4a873464d4 --- /dev/null +++ b/projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_16xb1_1x_coco.py @@ -0,0 +1,31 @@ +_base_ = ['co_dino_5scale_r50_8xb2_1x_coco.py'] + +pretrained = 'https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_large_patch4_window12_384_22k.pth' # noqa + +# model settings +model = dict( + backbone=dict( + _delete_=True, + type='SwinTransformer', + pretrain_img_size=384, + embed_dims=192, + depths=[2, 2, 18, 2], + num_heads=[6, 12, 24, 48], + window_size=12, + mlp_ratio=4, + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.3, + patch_norm=True, + out_indices=(0, 1, 2, 3), + # Please only add indices that would be used + # in FPN, otherwise some parameter will not be used + with_cp=False, + convert_weights=True, + init_cfg=dict(type='Pretrained', checkpoint=pretrained)), + neck=dict(in_channels=[192, 384, 768, 1536]), + query_head=dict(transformer=dict(encoder=dict(with_cp=6)))) + +train_dataloader = dict(batch_size=1, num_workers=1) diff --git a/projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_16xb1_3x_coco.py b/projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_16xb1_3x_coco.py new file mode 100644 index 00000000000..c2fce29b98b --- /dev/null +++ b/projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_16xb1_3x_coco.py @@ -0,0 +1,6 @@ +_base_ = ['co_dino_5scale_swin_l_16xb1_1x_coco.py'] +# model settings +model = dict(backbone=dict(drop_path_rate=0.6)) + +param_scheduler = [dict(milestones=[30])] +train_cfg = dict(max_epochs=36) diff --git a/projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_lsj_16xb1_1x_coco.py b/projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_lsj_16xb1_1x_coco.py new file mode 100644 index 00000000000..4a9b3688b8e --- /dev/null +++ b/projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_lsj_16xb1_1x_coco.py @@ -0,0 +1,72 @@ +_base_ = ['co_dino_5scale_r50_lsj_8xb2_1x_coco.py'] + +image_size = (1280, 1280) +batch_augments = [ + dict(type='BatchFixedSizePad', size=image_size, pad_mask=True) +] +pretrained = 'https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_large_patch4_window12_384_22k.pth' # noqa + +# model settings +model = dict( + data_preprocessor=dict(batch_augments=batch_augments), + backbone=dict( + _delete_=True, + type='SwinTransformer', + pretrain_img_size=384, + embed_dims=192, + depths=[2, 2, 18, 2], + num_heads=[6, 12, 24, 48], + window_size=12, + mlp_ratio=4, + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.3, + patch_norm=True, + out_indices=(0, 1, 2, 3), + # Please only add indices that would be used + # in FPN, otherwise some parameter will not be used + with_cp=False, + convert_weights=True, + init_cfg=dict(type='Pretrained', checkpoint=pretrained)), + neck=dict(in_channels=[192, 384, 768, 1536]), + query_head=dict(transformer=dict(encoder=dict(with_cp=6)))) + +load_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict( + type='RandomResize', + scale=image_size, + ratio_range=(0.1, 2.0), + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=image_size, + recompute_bbox=True, + allow_negative_crop=True), + dict(type='FilterAnnotations', min_gt_bbox_wh=(1e-2, 1e-2)), + dict(type='RandomFlip', prob=0.5), + dict(type='Pad', size=image_size, pad_val=dict(img=(114, 114, 114))), +] + +train_dataloader = dict( + batch_size=1, + num_workers=1, + dataset=dict(dataset=dict(pipeline=load_pipeline))) + +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='Resize', scale=image_size, keep_ratio=True), + dict(type='Pad', size=image_size, pad_val=dict(img=(114, 114, 114))), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] + +val_dataloader = dict(dataset=dict(pipeline=test_pipeline)) +test_dataloader = val_dataloader diff --git a/projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_lsj_16xb1_3x_coco.py b/projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_lsj_16xb1_3x_coco.py new file mode 100644 index 00000000000..0e5c00b2182 --- /dev/null +++ b/projects/CO-DETR/configs/codino/co_dino_5scale_swin_l_lsj_16xb1_3x_coco.py @@ -0,0 +1,6 @@ +_base_ = ['co_dino_5scale_swin_l_lsj_16xb1_1x_coco.py'] + +model = dict(backbone=dict(drop_path_rate=0.5)) + +param_scheduler = [dict(milestones=[30])] +train_cfg = dict(max_epochs=36) diff --git a/tools/model_converters/glip_to_mmdet.py b/tools/model_converters/glip_to_mmdet.py index 55814d6371b..255addca5bd 100644 --- a/tools/model_converters/glip_to_mmdet.py +++ b/tools/model_converters/glip_to_mmdet.py @@ -97,8 +97,7 @@ def convert(ckpt): def main(): parser = argparse.ArgumentParser( - description='Convert keys in pretrained eva ' - 'models to mmpretrain style.') + description='Convert keys to mmdet style.') parser.add_argument( 'src', default='glip_a_tiny_o365.pth', help='src model path or url') # The dst path must be a full path of the new checkpoint. diff --git a/tools/model_converters/swinv1_to_mmdet.py b/tools/model_converters/swinv1_to_mmdet.py new file mode 100644 index 00000000000..5de98f464a5 --- /dev/null +++ b/tools/model_converters/swinv1_to_mmdet.py @@ -0,0 +1,86 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import argparse +import subprocess +from collections import OrderedDict + +import torch +from mmengine.runner import CheckpointLoader + + +def swin_converter(ckpt): + + new_ckpt = OrderedDict() + + def correct_unfold_reduction_order(x): + out_channel, in_channel = x.shape + x = x.reshape(out_channel, 4, in_channel // 4) + x = x[:, [0, 2, 1, 3], :].transpose(1, + 2).reshape(out_channel, in_channel) + return x + + def correct_unfold_norm_order(x): + in_channel = x.shape[0] + x = x.reshape(4, in_channel // 4) + x = x[[0, 2, 1, 3], :].transpose(0, 1).reshape(in_channel) + return x + + for k, v in ckpt.items(): + if k.startswith('backbone.layers'): + new_v = v + if 'attn.' in k: + new_k = k.replace('attn.', 'attn.w_msa.') + elif 'mlp.' in k: + if 'mlp.fc1.' in k: + new_k = k.replace('mlp.fc1.', 'ffn.layers.0.0.') + elif 'mlp.fc2.' in k: + new_k = k.replace('mlp.fc2.', 'ffn.layers.1.') + else: + new_k = k.replace('mlp.', 'ffn.') + elif 'downsample' in k: + new_k = k + if 'reduction.' in k: + new_v = correct_unfold_reduction_order(v) + elif 'norm.' in k: + new_v = correct_unfold_norm_order(v) + else: + new_k = k + new_k = new_k.replace('layers', 'stages', 1) + elif k.startswith('backbone.patch_embed'): + new_v = v + if 'proj' in k: + new_k = k.replace('proj', 'projection') + else: + new_k = k + else: + new_v = v + new_k = k + + new_ckpt[new_k] = new_v + + return new_ckpt + + +def main(): + parser = argparse.ArgumentParser( + description='Convert keys to mmdet style.') + parser.add_argument('src', help='src model path or url') + # The dst path must be a full path of the new checkpoint. + parser.add_argument('dst', help='save path') + args = parser.parse_args() + + checkpoint = CheckpointLoader.load_checkpoint(args.src, map_location='cpu') + + if 'state_dict' in checkpoint: + state_dict = checkpoint['state_dict'] + else: + state_dict = checkpoint + torch.save(swin_converter(state_dict), args.dst) + + sha = subprocess.check_output(['sha256sum', args.dst]).decode() + final_file = args.dst.replace('.pth', '') + '-{}.pth'.format(sha[:8]) + subprocess.Popen(['mv', args.dst, final_file]) + print(f'Done!!, save to {final_file}') + + +if __name__ == '__main__': + main() From 163273f86242d234a131260c714b5243971968a9 Mon Sep 17 00:00:00 2001 From: "zhengjie.xu" Date: Wed, 23 Aug 2023 01:26:22 -0500 Subject: [PATCH 27/63] The QR code for the QQ group has been updated to 'Miao Miao' (#10826) --- README_zh-CN.md | 4 ++-- resources/miaomiao_qrcode.jpg | Bin 0 -> 225737 bytes resources/qq_group_qrcode.jpg | Bin 207584 -> 0 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 resources/miaomiao_qrcode.jpg delete mode 100644 resources/qq_group_qrcode.jpg diff --git a/README_zh-CN.md b/README_zh-CN.md index cd3813ade8d..7e1cef12712 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -448,10 +448,10 @@ MMDetection 是一款由来自不同高校和企业的研发人员共同参与 ## 欢迎加入 OpenMMLab 社区 -扫描下方的二维码可关注 OpenMMLab 团队的 [知乎官方账号](https://www.zhihu.com/people/openmmlab),加入 OpenMMLab 团队的 [官方交流 QQ 群](https://jq.qq.com/?_wv=1027&k=aCvMxdr3) +扫描下方的二维码可关注 OpenMMLab 团队的 [知乎官方账号](https://www.zhihu.com/people/openmmlab),扫描下方微信二维码添加喵喵好友,进入 MMDectection 微信交流社群。【加好友申请格式:研究方向+地区+学校/公司+姓名】
    - +
    我们会在 OpenMMLab 社区为大家 diff --git a/resources/miaomiao_qrcode.jpg b/resources/miaomiao_qrcode.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d34cbae6fd131d668b0f16bfe918993610257131 GIT binary patch literal 225737 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%0DsezltqY;>M4J< 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

    $XrM!NDsiVutG-G717Ci70+D5De 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 z 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 literal 0 HcmV?d00001 diff --git a/resources/qq_group_qrcode.jpg b/resources/qq_group_qrcode.jpg deleted file mode 100644 index 95c4bd1b56367798b632133112e6392ef637debf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207584 zcmeFZ2S8KHx+omFbPFII5l|43E=Y@wE`%bzL`AxYNR<`^1x1RWfPi$6PC$AMy$VS0 zC4lsjP(px|x7=s%eae5%`Q7KX_wK!u%v!UOS+i!oHS_gvh-1V#&`Avybrlc^2?(SH zd_Y7btGTk5y$uMYr3JbK0)b9|C`nF($bb?F@BxvqgD8F}gFuEP9KV+>Nd$kbLka?s zp80eAV0#exul0d8K@C6#p7NumU(ZzUKp-mMid;-WLOhb>Ph}EPGEmBIzl)2BrI7r& z#T3%tS|qnlA^WXN)t^E6YaO7mUlJt=*{{D){$;;O82;RE5|+Q}H_30Uk#Lj#{*<#) zzqa>R{U(kPCqXX(xcx|^z?Y1al$4B|3`pb@`%f2$(?Fjoi4CArCjf|zYFJA=(zkU-E_5MS2Ozg+F__Xwl%+FcbIk{g-O3TVCDyyoSnp;}i+B-VC z1_pzL5ikq>G#udg{~6CIU_7McIr1BQ{)u9;*_Uv=u+KxIdfj(#R;aHk*URv)O?b9DCP%G`)OGCrH}&XA4B?OL_as6 zfPZO3zYpm5@en6KbYvvJ3nM!P0)q$}f@vXpj0(UJ^n3nXa!JTjmb9w7?*7=vO@9Nz z0gO;)er_zG7;zcZ0QPQlh{e=J97HTSzUP1czDMA3cG|T*;@$X?okOC1D4UrQauWzL=^f(d7zeid&c&pZWYSL(;mI#`UZJ~v} zn5Ff-fp#|g5`&?q>?w?&p?elZPGIU|Q>5^JC9-4aYnx8 zop|$f^sJLDT_{$de(*^G(;g_4=7=sU$i-_)(cFOJsXo-d*wE5{=a7e^MZx7ox44^_ z?8~XOP3trb2~U5^byN4^qdXTU>Aa0NmsJBSmls?bpXe{-NCa^aXjceev~sAoO-}Z> z*|fQ_YSg38ah}p8l2)#*O~p;SNfh2nIiDStcqwZ6x7I`5;HTX_U6RwEw(~P&FLf9Q zvwPIvwIcFZ04Xoeejes6-GKwBw!-2Stzr%t8&mlsgI8f zlo~3E+ocP7TH@>4Ck)RH76?3lz4 zNkY^-WnKIAh;onLuZr-LedYrhf!&b>~S&P(3BU7^lyu& zSg9{dqPAeewY_7M@tIVvZ)vf1+B9GGdbmLPHI)4M$XM5OQ@SBMr=kjD89;n&exZPxGLr z9P<7?q)b`L1Ird8WkSVJwt8Q@vR2A8Rq5_A7_tL(`Mw}gd*OnH`|9VBQ8RnzAv_z_ z8HH$0rp+(o5M`)q2{agbystj71QD-29-o=NUQ3_Ne)E*-v^m4@Y?7A06`>c3(qZKG zb;lxX=bX%tty?cL9d306Jqv43;ApGp<0pa?OIR!j}?6 zyp|V&a!`W{0-wV&jmH!3KhTwI&rL2~*EcrZE_!q2EL#4p@auGvxgAOO6x7vB&i&HcfU@M6 zCCUv?&sVXNy0h7T-FVOe3DOZ`dLl+eibw=wg;X~Y$JV|~_@Xqd1&T*^^l|AmYgA#f zQZn*bk=tl6ZNyCX*bwe{A@#lwZvd|o`zE(3ga17(YhMw3Il>7MK6?W0uEjC09gK9; zqEbdpSbD`f$#J}Q$+;{OpHy5&QCu+?Ki|5yAL0?T)=wA0r>{_NisrK2hQD%yzr`G| z=zGES$`V;*%wErj(p8{NdW6qBXLQ!$vYebxaM&#mbG0j14*tO9f3HU6#=>Y;QM*gU z;U`odjv0#iz=L|}YmHT$uk&1B40_CAgbJ!dj@O>$j>~R^ua2s%=St}u8mV-OP=})? zF0Vgo`b*<6?_&5LE9@O4MKqsB4 zKRmm>n0Z2~)pw^?H(g#GKeCcr_2&CP``&`2{C@1rPkM|lvF)J!hDGGH~f^8)HN)f>i0G zuO54CwE*F*^@HlH;QYNXsA-LbrP_YC$s_Iwi?@`~Uy!Dvd;%sfU*Ebd0@0*>NBEXU z)j|aAkX9ZsE(srA#&!}x6q0y^!Zq}6YZ504{@Ohi=|kJcG}Tzpm}Lh^8KXaIQ9rmT z6^H9l+)6S@DSIo5DSH?9AsfD~-^#N?_Dee&qBFO(ud0UYDl@Mq*%Jr<;j9El!LTAm zo5`pej3pj1&%?3jOo~l!_KtWZm3Us5-Vst3pJaEzCM_{B1@zogVefc z;I!7JRF4biyYm_6bs495P$u*~^V|i;8ooF2pO&%qJUCv$RTO1ht_Ak1iKT_6l(%y0 zyoEjbrOBMcEhgl=N`>9msH~)`PLW`REVS(=2}-|7=`1!C6|7T_O+_M3w^SP}H&1pB z%<2s&2wOW@pW)IpQMU=a6T4abIzKH+QnCO)Nt+oty)ZA=YqhZbT#0JJVv6ytghMjz zM%lVD`nH@(I>mHb0%x1!WY4YJ2|E4OmAB7G-JFqsElFQcF){zB{FD+55BC*Moy5sF z2g67RVy0e?NBTwf;Ad9j1@?^2ienw`>gU^4C*?fL&ZrT^)oH9v*ynG(u8CXV9rV&T z)@)5KYY(dzxG_J=<3B~#L}0?+pL1ea&>E=c>daX6jERlBTELZ=cf*fjP1%W##OYzu z#i3%@+nHCJJE+VL++Xo5qF`JD(_zlR7gswbY~uG&ie9UBT$pgvy2=2w%p>V zjA}`2?m|OMdATOjRmTezx!s=|r8=%Wh`wFal&~1Dd0SNz_9Zz!xv5I&49*%I`;u@T zC(13*ui%{RC1z^ol{?QNn9wtb6C9WrL&Q1XJJMVWpp9#3^Xlz3bhJMw<1FCazR~WN zg}Xxpy&Rm^K|jvC7=FKB;cTu#grm=ebSu9M?EUm4AMznfN7_VF7MauP4^Y9?6{l5L zWX8Ud>{4xPqSF^5+Mttfk;y?g+PPUe?2hvrf7-x#(ka;emH2|PvYIQYq>yJa3q%UHr&8*cI1L5{?xBymU@DB8Bh(@q!4Na5nws3q~I|@-QH5`l!6#>Y|#w z_?qJ(ul)J0M#bvSnoPIDthrt;4R2BeC1yt_?Qm4-pGVS#N07W$#iOw4gzKJQfNVGi zVu z$)2g2E@BCHOG?VCLe197Paba5_He`*;k9Zv*~AIbSTGW{ag25)urO`_T;Q2n{dvtp z{(iSSXOgKdU&Z|Odd?Bd=- zx0%@&8zz0<=*hd(d4-n@5a2GcP*t~WgS|Z5m7;i`f-NJG(_XYaeQU%uX zT3I32xh|*<^Nxy4Z1t{O&XeIok23(?_ZW4M@yoP@&gbc>vRAIn2F%hZ zNX|hgX`3LK?fC#(<5=iL+pKh&y`XMlwK^yunotOlFW4f`pVQdXK8S*Qy<0h_DlR zRZyyHshMr*m*~6dq;~IJTX>W+VTh;nY}$ zMZA`B^3?Fj3sa(fonKp~wit#ii`fy9CRtJ_QpY@{v)==j`!Nl67P(Z0u2_g@kynJ? ztQ&DZHp@#W@a;}@I13#=GWZ%3Ca~M7;L=G^*K%+$5oO*K>zZcbbbWwt90l2wJQgGL zZ~LJ&k+EU>!iqMdM*X!nGH?om?Cbhyfj#=;kNcEba#r-E)gNZ=jH1Rn$!R$>oFAO# z{6^I>OIho_@XYraxEV5@+-@m^CPWru&o-0YE**Bu%T6tSdy_CwSsXK-Rx-HYH8MaY zX4VnKTU%xSR{PvJA}ED11iVP)y2ta?2=!u)8fQP3JUOU~FRwrA<=lvwp+<9UrDsj9 z#)l`lnbla(-@oN*56i3=Ux*)=ysN&sm1+FAQ0nl!Rk_;tpd0wvU)Jys*6(lD@bEug z!|@30rQjyUiQW0w&1LIU+?5hE4Nh)UL6qe^d{Q*fNdb!7H2GwyPCBLRvY0P<>&f}o zH9arGofb15TqlAO{4Zn0fyw?n`3wDWD8f$Nt!kgPYQIKsGhabI%PU-w<9fZB$)w@X zW=c&MU$yaGx5)#j+|Jz~;b2Mw{1lG|tkGQQG|mMbyV>kqfTg`%Sy=?d-tO5P-U^)O zdeG&>aCV3YDs#$DP%W(v5&qIc?KEQ+SwSCy!{F11pocsYp0@{lsnL(y8)ih%TFEWW z!R(&RH3)|KpmaB ziVbd>E%j_mq&2|$a2;%w;A(U^R^4_ z7fiS?R=b-x@hq%plcnevZ1J)AI`^qyi(!$6Xc{ld>8<^4pSRf$2J^v4{?Ou@u*(b2 z9$zRA*jefi?8JDyJ@N3!sC~8wwi$hF;x*b1=0MnsQhJT}B=dOXsi6v^k{1H<&f3Ac8?``t&?$y8Wg4GG)^UzeFE@(ygv{?dQP@ zSuLJ4>42(q5;{irZQ(X*NoF6;U1iB}F{f{QH!ymSP(L5<-gV z3-cxOK~CG=8hYg9jI+2u&!M^gwnpm$mz)!$<}l01+Kx}pbuH#@d>uQ7(VMv-$IMW1 zEBy5D@)nE^K?{E9Jkj0;K5dO{KYn1RBwCB!@lsLb(T>$dl}(*B{LFLG;n6_Dk>7^t zBO7K-pH-`*B@=5CkIBd8yo4p3Es)&RzA`DJn@UWIv6jrpY_=<@(nSGAEi; zZ<{)vO)lGGzN}*_|_zRI%%R;HZd*6xg^MV z!bo^211C5Qc^dmd5M?rNd?D8M=)eYXJ9cx-=CYQvSloPN$B7fWj9Vz`i_UCN zU!SGS`9!@57fv7X2#t{LmWko1Ch;P{H4jW-^o{I2Nq58c1bf(NB}J_TE@zdYT9z}K zMToG=&ZqAaVjuYSNnFowew0n_W0Zad#}~PvM2~GfcD2C9sz5n$(qBsY3olf%hsF%% zP2HfggvN9r?9P?Oy$9KD!LNHAP3ohs<~d$^jd9{TE=wSSsKbj1?f6{-c7|z^5w-oh zPdhjwBfsr4znX^~l9>BZ?J_qLK}}Zquwo*}cf=zd?jZN+CT$RjB9oOAGRXe(?L1-D zAzfvUPg%s#ztolC06j!N24PYTj60Kz5km)W`sJ-z$mzf0cos@->0rx9t%x`KW}Euj2oxsH(-}OzIN+PE z(BzX z9(V>>?t4^z9NUTSolaqWZrDNk{zJX;6*C@9FCI)Fs=c*sU`s*%GqgF=u?XUt?%?{` zkan-EJ@JclbXJ73!EW01M(vsLeeYIOMMFej(h0N<8u7AL-tm5}NXd8x+L_z@bhJHR z7%l69(L=psX3taa-&-i+Q%e)BstDW2bb4snH!M}WSNuRf># zxPiUt|BHs3s-N8YFE!jCo`0(0Cbode{vXtG1KsBNr<(2`X zuL1Nq#(?c&=JkUoS!_#*&r6hTq|xVI@q`)p#F;OC^1JkbweV5t>#ELGgBgr8o2BEq zC~XM;fPo-RZJ@z)`0YFv&Y+n?}_ zA=v{RxRNt>Q?6JUY@fIMG<>lxvQjrBOW8E!;zu8~E%gV_KIL-}y8`u_tT_AZ^0QKG(JJb>db5`nFJ9csAB~*Cebu&)PJ40X_KvxxU^BPk zB^tpz{(r<+5J&ze!ZL%OK}#=bQ=gYXOX_*$SEh%<)XvwD*K$v5>~I!muPc+9zu{JW zzs(*Va;cL>Fzxw2%V6T@|0ocC+G)=xF|wYI~h7f0BBSUFww9 z`|hVZ$BYheW#+Wo6im9;e522C&zS^nOc5`tv{P#|0DRnOG4JhLB>P+Q~6e8QH~eX*$t z5!eGlg!O)-5r5kxGB;-nrp!BnfBE}=Q??L*TTMbr3dzUwF^>a^3$L)-G#sbBeH$naobn8d--!HhYf}So9O&PW zN&XwMf$!c?YJvD9Qo1>5+A1q0IT=`zJ;5I*jkZFvOxyU&0cv2vtIVWB@^8#k|LwRw z;R|bv#p3WAjX7Ie8vdJdBSw~5_9ylQiU6(J&6|HAJdpky%8dVaaC&*-6IvH#Cls|T zHCbb0yLme9R`F&$d=4Rtk8{d;{2InB?4*10J`-c6T-F5RhYl7=?hMAZB&ma~`7*)G z-gYa|V?{(g_|mPc&hb|c{i^b`tUcDUDYl|DZs#!m6%N4Io;Ip~> zw4HxISNYNPe*-4?TP#BIU(8LG7HlBGox5@NGWRp?22H3}af;>?7#BQv`%Yr!b3PD- zkoM(il{&x|>xumxf=hCOPOSOdFk8MsyhsNXET1)Z&>X zgv(8Idq^twjIwyE;HyZLKN2r&+z}J<;h*E@(I+9sm=u}={X_K~{DN^y)YE4dGU9Jt ze%0q4QXW!F4^YLsKkQ!r3LEy1?jidxVs1YN@JYRp_dL>}s1f!h9JZ5XVMh|rkzCjP zrZ+-ART>Z?nDN`>Cy_g&`~F2zDIp^y#Dr38DddD|k>iw}<$Jf17kwbcBeG=2q=cJ9NrW#-O$=|X<7k;I*Fk{w}Dni#NZZs7~vQF(@uMrXCa z!!563UrDxmx{Zv`6G2zdHBNlj4yzh*d96iUsvxTrF5!c47F3MTCG5enb;Vc0y@h11 zWnGPM6At0Y1o-k1mu(2nbsoy$AmJeQecimHofp!Ts|W%atwS598P$gftaioF>+gjd zBv@TXhm02FcN-Ty;FCNr8evEiyJw)}b1=El)-I_h*vks`S1dfBk~}16X7RXJ-oxLY zNf+RClk;%&sOYaj+ZvLqo+bj8Y>ZSZlfh7j<%nP<39Na{w|zVJk5;S9VK0#?ozH+&U+Ym6aly44DlS@@ zCj_f5qYFadt~?3UWZ8@QZ%Zgc!ma?HhG zC9Oj3Kg{O(Un1NM72Oe5^FayUOs&v*mv(Hso0CVasCh$8Tab)t;97=QXZnRa`3-*W zA%8c!M(SqnKt%_srSBILG{0k=a{+!tNrZuDP>zk%qhVk~9u9b;Xwq)=!{{sJ^nTtw1ShF0JU`97O zzLhl~T0#!zp&4{>X{}uvPdhhabfU@Y4gA)j%qqnv4TIHttD4HyQcRyEC(DEsTn4f) zr?W{5ez1~0F7dG3YTwn&cwaqLHuM1Th(JX`1ksG%x=8SA--Wl_{b01&*U;J6L7JVnBlgsK&)WoR4`bP8tQ$LXtI?G^7_w3_c#aU(Rm_S5^L z(ZPqD^r2rJo>o@2*G0UWPd+6U=OjO^VG;2S5(0QZJ`O`JC#$0(aCbzXMR-RGh7Dfh zDCsM6t7kwNA{J)pjIkv;BZc{8KBYDS7GLjsz5}~g>8Ehz?I0R4C63;hgwIw>HC3-< zm$zl9t{shTwZD=o?cbxNSCrkkcjJiW$X~VtHLl1mRkVE&;b}GJE8ACGg*jj6Ylffj z&^UhV)zpYiXnL7(W)d4P0zOYYJ0Zj%1_?6F2RML-`J-t$eLy?bZvUP>t%Z08-hm(XK)F3Lbz{7XTjlT#%#!l5y;qRMKf z(DIJ@nCyNobN(p_prS$4&+1&Kced?1{W<%O3!v*%6&6B+M@?sC+OAb>l5+?;QaZ`ajBcarzU&zeQfk|__{Vp(=FN${q>k7n0p^U0Z->CJa#u3 z-0rH!yzQ32EM@LK6%)?DMk4o65g}Vr{K$d^a<}F9dGd6-a~NjKn6E<~gY~dEZkai@ zTK`GRYCO7w%D?RRJ?h*tGUz32^*Oxhb_~LuKw9q4vO+~j1Q1(0?%^n{>L{*nrWTad z9h#3rbYLFuYwsM*w6P?84^XL7mv;1EN-lT?Y16E_>`RhsezVn*wIV?HaG6ncqE}3H z-x7RkLr5ci#oN1!heG?tQtjXZRZv6-fdd<|)d;YUMMxAGo}02w?OL8PUNQ>>pq5N;I&1wNL_0#ih?$Kqs()x?hIAdsdbw zBD<3lPL=n6Iwr9Qip-u1VCdg8gOx#EK14CL_noo7RC7P(Zju5WEI*8sknh;N=R;6| zbk892B{)rUZl1|Zvm+SJf6cr!umr@K5JA=!?2t3Q27`ACS2k&Sy*dt!#ela|aYN&L z_6msg$mlx+cV@JC{#bVer+a?6L+!y$pU0=kaC!Td_AF8}Q|HzkQ4yziFPe$lJ9cNy z``014)j6-2^bS`g5<%o@r>=LvS+V;&z7oUgY=U`wbD~^Lu$@g8w$L!nu!V#en9%0?C>9OX8ePizYnC^piU{!2ZOPV#46WP z|1xVQUdxnS zpljxT2Ry|S&Hc-fbLH9{4Pocb;N!rZ^gkUFsf6ArI~|G6(1-uJmq>E1SiFJtu)G74C=6e|QS#InwsTGy4eFRtYR)PC|ncXZ`Jo_|LJ9 zf(vXSrzQRT_hBYamad33-cLD#ceSHEnZFMt$)C}a7lOqd9UPy-7AvTuU|K3pJL7D8 z&dxLSV2vZFB_iTZKioO7sOT2o8N%9o=tl$!l6*G0YQ$HF?>XzUl?)=tE%zPOaNZ_# zLcf(333(~Em0~Ph>d3wu;M)%Hb>n%52d^cv=tk}u8674M_)31tS?nsnsLngL(7V^( zSg>$55s7s5l#fV_d`)m)nJr0vW!45|F7;C!b-UWWc^X!oAxh|hDoFPwb|=U6svqsc z`)9{E8ryuPt=c4cCqkSS_}#mO_<3?iw?9EXUS=@psL-ugfk~m-jCVPwyP!R=p~G&> z2O*wTyodB0HMqdbaVq7I3mEEi~^SDidE$D0s}H){wn zY%|y+g7_xPLeSgcwzkbqk0K7|9LLNMBel*8#k8nFGw@!+=sX)uy<99d9pFT3^)_RT zfN))0gaG~>PD45w)csjwJgUhsl;QYhDxqw@_8#b|f7v1Qm=oJzKXa|}8^5n=Ht!{w zd(H;@crR1DUhfm{h4+@DoYsBxAA8(lvc6*PC*&KNP`igM0MT^~U`8TnF3a+S1-Q*y zCJY(jFw=I%(F|#z!4}z69I_~?Ee@)jHQO761hYph@y3e%M?1R%FW2#M?sW{fs zp+zltu1w;-o(yAu-s<)nxjjn`lucf4hsW#lB1a?6joS>2)Hq4hOaR}QlhpCU`-7Ly z>rDAGBcbIoA=+W6RkuAqI83g^$bv9YTglMYpp%a9FgwN*?XWw zKX?IFiwc0r&4cY+BVNS=j`=`@pS8of|JgIZ&IuPHlOXR9y_G<`qj)(^Xt)mu0}^mp z3ccpaZ8?C~&XQ5c)Y^|&@s16wLdCp;tq$|t%&!q}*y1>53D2gEN+*oe(oi}kNjltJ&SpF>DJ)0*E^T!v7>C!?N8 zPt}!`B*#mGb+wL}vv6oghhb!PaewL^edY z;@7IW7-7iaeDb^Wi4=_O-@Sv$=PvixdBMWj4a4N!Rxq#XSOIuB#Q$c5L*V!)W#&nI z$RNQhYfVqA-^1>(2I{n{S)zuN!)(&G!P;-bj*o!qA@<=cdu5T39420B%2-Tg*e zZtDs6jKfys;Q*U%KNSOz)X(SAeokRZ_6LkN$?R;L=l7*RD{1y-w1ZW91$L=wK}@de z+Tqe~Zi*-se<(D)q0DqQ^l!Bcf8<(7)l@@}R6~2OREJblBiu50RWB);_TWgDp6g9^ z-3SZ}EBl)2udt42eFHjr>Ntq7>ti56L6M#zNNuY@t2dMD^p!j#wSgE!g7YRBoMhrU zSReWnr-`aUGj15ASfq5@$6IH%&&8|(`vu&9&p0e3vU{<)_4}V7xR`hs=<`sP9U$}< zVB@r{%gtc6y@p;xd0d0a6NV)q^mN>Da~mso_HBLhT%Bn1iSOE}7nVT_m$IJV4H0~` z0);&QD|~WnU5r!lQaNo5|?YJgnG-I{^bX1nLSxZ6mhh_^I|2*mk}VuJ%ojZuQ?GbaDd4vOxUbgIWl)h^zLY#Px7YGmDzCa^E`W_N27hh zSFXc{WE~6}_4c5Vhce7S@YO4tzT>{#t1*_sM>P1vUjNfxKtxf*GPIBG>GF5@iX+B- z8A%lkUY~{~`uoj)MU1b)!Tre@ULu;YXAKTvky~1pB52$u)}l}bFDAW7mIFVDPaV71 z1Uo5{Sp{#CP!umsK8RiN-)-ryhnjf4#YMEiU(SfV2g2u0Nm)Q$48rGx?=76au75PT zof$S|6mxP$`M@U3+>iC4(e730s{z(YSDSAe1P_}@A0HlH^QsqR^X300EjGCrKERqh zz7Tc;@3;?T5&JaLeln)34+UmHK~EzURM_gK2abs#`9x?dg6`G=I5@s9*!Ft2C)t$~ z9q?ri%wrV!1QFDZCu^2$uh}@bvqMVV9u;8ac7Il!+j?8hDSyLTA++{(=Zv)b59^_c8)R_qdhwI0DVwJ$lF5%}U^2TF9lBKck3%{j_aVSg%(kXNkK2mnW{WL?e$j z>mq%go|2t#>HLoo1NiUX?1n(ru3_phm<`H?es*xkU(OW7-R?u$?p7T?=l~;A6>d`T z01NwDn17AenVXO^{+&l2uZ>)4Q5!BVLU%@5M?w-|~Q|5#MOO}!V z*W?e3BZ&Lm>um+B20mjrXYnSDM3X@?^W$X<1Ih$#)S6zP#eM9@F18r?j{ngIydJ`> z{9TPIh|XwP6?dkj0l>0g#_d`Q7naU4`;(+MI@Jyq_Pp_|HoVkI`?%e9lR$W!W~mzv zvZ6%V&3Eg{+jS8b+2I;Kf2qA4d@7U(>V~d4E(?5m#W`9}7#SczkG7=1`kc}5gqO{v zh!okUPWN))fHJnAr(mrNua0 z!-^u`143={;b?-*_UnwA$h9=)f(>zQ&hx+axEfo<~(d`GXB5?@7Msd z9~npKw-mybr$!gXZ=#+ zTnZ^3NL2VOz~^9!D24ihxZJn4S@W=4*CSskyvOBzDn<21-!HImEdTc6nb(VlzI5-X zWmn@@0s~Tm&F`^4;R_)+J%(B*4~*yye-dp8^AM%?I%6>^z^l}5?Q*WOU5MkPB-Uux zEZ@;7&+*{sQ$f{oW#kd&iVL&?QK1@U)C40dllNK_Qp)!4t(2X=4v0T127uaf63QdZ zTCSqvh>4&pa*%b{Kk9aF!Kt=VYka;C#{Fg%4TQwQba<$G{W;MuzXSU@q|mJAwdbM1`YS?kcfh$o$9UxPKvL<4-@PMV z&glz5Of^cM18mB@pTQM>TZg%Q&9G@=ag$Z`FnFJN%uuD|q|bd(uf7$pyw4k*QQy92 zr-iJF|BS!D&-(|&PuaK~jSO1>L5Nc+mK8o+ruS!p+pHz!HZ*V`lV@-H0gz{Ru)O0#uG28OGWuc6Gi%}}4)J){q z&XYLBOUy~<DtlZ`xniziD&2 zo3l6!uyU%AZ*ie<(nrp8E`a)wS~n+MqkU=WMq@NUG)rS5^!GUCcwPcqbkHbBr#{+Q z3~HP0A%Y5n1g4Khi#t@BRPP%UoC_Zzf2FiWpW?%Csd+AyJ7shM`=%>XUF!gB(A0l- zC0k?zCW|N=I`&tWCl=;$3pYi~twdk08CP(bqvvh=Z@ybH{th zc|<55@_aSf;;OZP7#${(yPjRZeMr&;pa zD}GK!hw)el(;(&~0@k1GjP$#9>x_(la;_qlL3kNH@o59gF&~(G=pnrac0e&sKp~aG z^|aWSu728XktzeSc$}wDlvl3PUKFlx%vBJPr+(!t!NR86rpL`6guYzQj4lkGw@a{E z9WCE|zsVWWerObuDcL%z`}OP}E%>j!1Bj0-FJARZ$xd$0$YZ7j>n``h6XUVm8|F0LH`r}G3{^aS`%#`k?k0OpZ2 zhiqzl;5bIrSI#UQIXxOp!Eq06OC<+QFeGQ+{$}3%D0iiqE=%!*wCg`6|?TVjbYX&%+5m&$+=l?f&f#;{) zYlz>k`Nh7mg4fk^xW>&}@5t=Gg>z&C0$2bT*=>RP#7VDcIf4sQ~jVH+CKlzLMDn0{O?9m1Xop0_9x<&`R=+~+Y z)0H>Ov9uqFEh?4K$Np-f#m7eAi~)<_?t6@G-?B;aNkGQ~4V*ni{$<^i(?$Eq?QbRN59!>fcrtx1 zKCk7<@}g?OD4iY9l>VF)AlSV#sagPKMn7_8*9i%W_uC%)wv6;=_M+KI@HE`;Fz#BA zoiCQ2zA$S(@K~xll=ZtsmO`Kfqb2=?ekhezWxe&x^0bDGc|O($VE(@Z1?T1Ev-Drx ziqkmU23V$mXN`qw8tN3eRclO(wma~VM|2N>{X|1AvRY*e>&Gs68OS=*3%N@9`W=fC zdU}o(R*#}zde=Cx9OUzl-F;rrey7A|bo5kY5%khrk;s> z&PN%`xfIKmG29S%uVarX)oZyx?TOsLb4DrtYK9HKlKe5?Z`q7^hy(S8Q0ebXm98>X zCP-{Q1MuboApU2M!9QBgn+Bxr{Mjv;ojhjCZGxf=5#)l1madcx20WmI-gSVd7W@861L zfA1Rh)7tL;JAo<0ktrfxJ@~Kb&;C|5Ww1pAEsQuHa2y(h{CS%GK|b$iHz4^V@T`}? ze+Kpv<_VZBp|3IaO4~1kp04#l4m>J4pi-m@mbcPhYw@wk6?^J&^YLWzLtSW(a|C$q z3z*B@X9Q4~lQo;F25%gKEH1}>i5%OaKS?!7Sv$~7pcy?j8`rjpSx~OgbNymQIiVOd zewR=-Qp8M$FNLgmgy4j+Lcl&}?+4wvZjP#Azaw=sn|W!DVm@wOc7UK2=wv8}Aoq`> zo1!m#{eT_0-z2e?pd((m8%u|A1Bzi6GD$JI z_^aze*EaUAGn}ZHig^yV)7_b4Q`6^VNa9b#H7K=&5WE?2EItb$epnMDV0NB8gkj?+ zqNyRs3;LR_M{;TP-uPH0`Bh+VzQ!=ddB0EgPOjbsT;Hp&A}PMwGQ_RFn5ci1pUIN= zaS%XI@0vnzgLq&EQD+XsxT+3nJ4k^y({w$4D?iHIT-k;1eBb z@LbmHX@5mu7u0ssv};qmN3wN(O?n^Q7pXU8>T{<;R>IjID~x;#clY5bFV%(i8HIu8 zijrAsB^T&Dn`35Z1~T7j)K`_M+JC3(CeMGK9GgS>`A6S5Gh&wagq3}5k53VXUHpe< zX$uvMVD=1gg{z)gPJZ^Zv3EPBIRc(M>4w@Ex(2>2VfP#YKob&?p#64=~R5EnM6f&GV8NL|X5cWq5x*%jmM) zaG_hJ;fjQcu*Th~?_IAhTD$Il3Be5j9JjsyKr$1;9zud`x4>q4QcTZ8WH&lJzW4Gb zxiiDg3G(H5yhx^ALTHt-^0Ybdz!$Gnya)R|A-=UIC-Q@okczarUoOhitB+ z-Lmbj7JE-B-Y%Jb)Go|z$5bi%TYA|NXu6MOu~{v0wm})y^or$oeuJG+up8Z{(Mf2TC@uls0zM|2hOJ2BhGC5o z;6;>z01;%q1>2)pN!5^enXqDeO`1PqT?L@$w{+6}pkVRuAyEA64o5$afw2{s@Aw=M zu=RG};ChUJHCn0Mv`_u@4tcA;y)n!~ysrwrM23uQc7B^&*4M_HX8%;H09c99g`&=n zS--ThffWX-R&wPS8;r&fD8q<1qyFOfOi18^O3^GYl`dho2=JvonLbhOx@+(O1eQOx z(NDe+O7a<->i#&(1RdR6^a1|0{2f5sqVlK4_rU=v+2ygLSVPgVY5h0lf1pY z#rBX2YvQxx=Uo4T(PT zPb@Uo1XWzV#betsXMo+qRgWcccS;8KeR6D2N@Wtw+2h3m_ig2sn}m+@gSV~NxEznB zqoktQh3?A9@_q;fgn4Dyxnz_MIItW{fw12`vmz&TlS|k@C}$!q^pe1c$var}IBxx0 z(+K9xU|g8mRQ7&#`Im%fWGg>s-Y(2L0AAm6+>}T1%z>P`@^#g8BN=TNO34xax z4mzhPS31|%9K%^{g(|NE6?zzfKRZ0$qc19&^0AF4SP?{Ejamd*>_T%rH`WRDbZfqA zURaj5erVv_(X0KL*_mgKr7z9V?`k3}g_pVXn|V+=w2mrh|2(P)WLe{fX{qXf6w4}d zF_52ZLHcu;{aCPxn<|Dx8Fq;XDjCHwHDdy>((uVu*vWnBT5DvB3s);(2f_I@RUL-9 z-cv%Z9QI|ySCf&>E!!u2AE2&8qyGmp*-BZmjS@n(gb-6v zwh$798B6wMLMY0FL|GZx+z=^NinG~BrQx~nPDS3$W75Q3NN|8c z9tGEI8I?P4eO*qyX-(+#33d$ryRQOm5ZQwxUdP44xP7QNXaIK=>Hx*=f`Ib7C?;Ih z&53j8n16*YeUMl8zm^^Gd@NWp=QCZIPxB`m1YiC**OK(p@f~us_IRm=)JG2yI~#k{ za5lz7f@$_xcpXfCV;mecqRIGh`hWTn-&c1tM%yp74vN-bp=U9K1_Le=6Cyk&K1vi%Y5IzKu-PXQurvd7LX`&1~kqm(xHsBMH&Q zw*=1eK2b{R1VY5t4?QIwqX6Y~D&M&~7;1DkQhK1^jV9X(NzCs zj`L)~@bPlhL6ygOxQ06VFWQsq{q^72(jQ)TdAAg}NHS*Vp<{L-OVB*jyy^h)`?w$7 zm6}S)-GzwZn*n;x(hJ{sy-0aML1kI{rQ^p$h%1?x5|^~FveGI))lojY4IeiO@=>4*Sb~oHGKZT{pDdT< zyzkz(&@ax4Dk#ix)GJ0@;6eTp9W=`=TtVTZJi8+~3<;eRj`2y2x zD%ZA0=YB|AFz3rbYksg!$#i_{yk%XKc`UrYQ#{SmJv!n2J@L7Hw%86ddoq>FA}Nt=r7DH#f-c`BWvx$*<1sw6 zi)ok0-Z#r?qLZGbJQGd`UefHEvcm$E2=*YUo+wU#l)4MiPFq7ig)^_H`4Sr^J(^WF ze7dW--bKVkFs+_?koOtDh+a*W`Jl_HGO%U=2X`U1IlGV__iE;cE;c{BAWAxgvhAZO z1^}EdF?R|^WnX~pm~7Hp2Z#icp%%@G>JAMSvSvp~T#_D~R$d#~-UNf~upeJ=F8DroOBnAc;Pi|2QvK0cGI z9hlxVZb<6{tM#@Ld5A(_se=#AHjT+eo1_(voWdL5TpLh=yb;BHJ9uIF=Ajt(uR~R^ zPN024r|Ky`sk$!Tohw8hg%Z@}Q*K<)aq3!q3tNS+VbgH{VcM2MGVMY>cH}Z*d3(V) zoBeVORX;o;-E{qAPbr5i^+xZ#*4DEv?LifH)+}YHO1qF&e=0X@HUf@TK34giL8rP!r=pa%Nq0K=GN5=Iz z5Xr6rMh?d!J2+qF=DWE@1+|I+JU zF|*e_3-wPnA`M@h2zM2b;a+(ObdOcTpGq8KFK1pO@STMOzecPUG9`2$|97i@}u=YJFon36@m)Aez?m*2bBATTC)@D=9CTw$13deWoIIyuSc#XHdq zxY|ML9mW8>WIU>WY_(~)0PT8=s`IkwrR+6L=;?-luQ=inUit|n9#=N-6z;ORN3kSV z=lnR=e7c!gPmKH73v;9lC7n^Ud-&)4+jsW`{&xW!=20$iME0t4)P zy=d*x02$(`3KDZO?8vIj#wh2o!Aq;s%J4^=JgB!m_CXqDRC0S>&PdP)dA&IZc4imC zU=5`@iZ>NLF%Cj-tX{4a{4v8~_BrfRg|Cxe+?9odjLHSq@-UZ@5GsjAzR^+J|YP}(U>xj3DL<_669lZagiuXSHUSyIX1 z3yte2K*0O&9daU=NHJb!+nMCc66u5EYkQ}5UzU4jVLQ`_8o~Kfe`hv&4Z45aughp) z;tP?Zd9$cAv-_s7FhWR*r<8ZE2BM%8&~_fQSa)H|r}sFraG zUml9&L*Akt#y5?ZBD1NceoqD_IkA)eg}iURtlRe%$%&PViMM^ed*@}>)d4Z0;i(mu z52H&c{ZdnHPk}#^HTyd#_E!L1f3|tkpAQQd7f>FmQ7drQ)o7Uqtk3&iYpOp#aR-+R z9Sj*B>mgsI+~z1^x7UpfQB7<&UPN@R(s*6BzNPv-No`gA?2N;mmWE zX>`E!3As(X@`*INgdudCmJA*9Gkx15j;1^lJp!0#!C$dvyoC~_-aV9;J4XS+m-28Q zN)bi0igER;z2K)msrIFV{IvRbZ|bLPy@ zUyrIAm7pEu{TYO)mM&K;z5{&G2X-MTn#-{aWd({4@Ur-R8{Xd;Yy^OgviiT| zsSYF@rf}^v0;8Npe;J@oSPjPzYiWkL+TN4ULs#0~wVsYp>`!>*j=s=%#XsJ&8ToCX z756c(2fu_SHd4>ez?LEzRTYX$)S22(SXC}1$?}dj1?X9D!B?pYe!h)S*#Ut>_jKM+ zL>F1c_LfQH+L?AUUVgzBzw}mndr%W`2!5XfWvjfj!@Z7j_MQiNmrT=DPimFl%Kj+2 zcd8~3*r9!PHb>~s6uh52Xf*3-x2wGeDy6~n!4Si;Z;U~K8x_;S;-=$_mFA)y~$1T3O_P#Hc4Sa(EvSW;k5<02w zJtdBoCiKb#D4ejKCl8!1WV2NsyL);>vA!ps<1ujec`2i?VPvlXMFEn=~16PtoO z5O9cIPj{synq7_92H(Cex{9eq*&BG?i{?5R zXRZTb2gT;U!0toIo_Nw4;F5fp;lfT>`phA4hND$&bAc(cGgpMmY}AwwEm9dNz zO-xLaHTwdFYJqiLp*iA+miU(pe%qT$WO!`h&}Hpf?W!R6xS-A3$r^n-UEuq)!P(Ft zDbWJ}*f95v7EVuv-@y)-5OB*Z6UIWW8T)FAdrISsB#Ta+e2{P}T%6?{2NJ+@^`@xl zu4+SYq!dv*^3k-SQfnc(Z!3UI^2wv#j{y(xCss7tv^eyvI<9+I?Z08&xUPrJn<8PC zVj47{#DO51>Rp2I0q5`YPb@G3c=kibE}LW@Z3s^E&v-kq4t8m85`-~O4hMcTZet&I z;Ys$Hq?s!cGO|c;pzHN(nf(kVQA_ia@S|O~xhY8vX9B-;FN-476Xls35bt$ZGUtbJ zEFfxr#W-CU0w4dCCP?>?NX|zeZK@$S+R84eI*$08-Hn7X8 zV5^c~;I0kAOm-pNzSv3p#4Ig&d_QXN9)1_1nReg~v!{~mZ8>s;4@17Hgxv}6W zR5Zu7Z6?`uKVUrUG`#vPp>HpJ=q95h3gR%Zb{8B4QOcrt3jqCeuk}2Piff4?z$wW? zr-kyr=5BRXE`Fxaq;|OIMF5UcmjbT*Qdc4EYPWmxih`>`gx;}TNI}}>SwU#l>#;uC zB(fg2PZoR-$ku+Hu-Ge<4xnc*?0UW|$?aGj|{7^#zS!^RXYg3ySF9N@(usqHy%>>r?7Cn$#*RR%!Ub+}$Kx;``bwh*9SUvLp}(eO138VDM0 zSFO?|pD?CeDPELpPh)@wLBQxum7?%XlH)vZ*NJxN zcPdWmSQXq0W_BDBS0KARKta-QOAjU72f4-O;O|ywX+0w0!)Q{W9&6#!F9{* zG8hCig$_=$4BhUx|JIdKulJYoa;p|pT?zODN7+-;n2fL7l! zt;P|rV!m7_eWvZM(ADFJn@ZB!NRi){Y0ZuXq;@;qn9eV?vqkxwn}j#h{*@WkJGF@66M^wREyHAbclvEBK*cSCl?~e>TU6j4&cL}2 zoUo*s&yFIb7(Y-Y6)lLNaqAx&sMsHGeTSQ?Q;*cUcdu@l*0!{XDr&g*l?%k$OTE9D zmgIIH$w1YMs+k2AA=|l~1`>~2YW2w;k1TGzG2Ixp!`ZiH`G18<8*myIj&X%066gr| z@f~T)E*Q}ow+*E!0UoF;j?Qjjf>>tHCBjru^)k479#EPar7+L$XA3z$@D1gxeX`qI z!R!oD*GeDW$8`OWp8{PAWCbrj(~J@F4Epc^V$K`{5rRmOJQxQ`L^3pv1Zbwnx_1`3 zi*?;y)41txxvYIVF5O39$^7IBCIdq>MGU1kVg!-<7wsfI^<;|35lcDz9Upx-Vj0i% z^7uWWWT`}^`FJVfImSUcDZ+%JPBo-hkT0}@IXh>1?{ zNwA?{mr)DwPaYMs)LN|>Tr?sa*nqHnFanP@MRjTWwuv7$bMv`{Ie+qqqoqz7ymCP@ z!DB6{ok|g`t(o7P6=u4c&@JXHb}KSlEGY=GVyICo12k8Nwcq3v*^HEf4^ohdlV^P6 z$+%ap>X6bWxba_F!>&hMzp^O&4yR*gD;eglR9zY*|1LRh}Z+sBxa2M}tksaSz3e zLa+4;bo)ONV|lvD|MkKYa~j!M;-WG>vsJ3%5t5Aj3L{=y1+lOoyoAO?V&$(Ep6t$N zKYc?cu1BKo(C3yG^@Q4>G`hjwGwiv?)(&82*vJJy2rdEI6ay0TRm{W^pU80{F4Dt3 zQC1yz9sQ8xcVG6geC?yjESmsX|s*SVIl%V-Kescn{+e%l6a|@w(zmlW3V%$ zy&pD?icR3@%f{w!(WuZWrc zY|GX^A2ZQj1F^qnvNbx(SCA}u?bV0g_X*-Q^ zPECud%IJeLmqqw@vAHrtzT6D(t|qHraZ2EZ4(`-UMGX&c!1xC4=vyJi;a8Se5JROY@&Do1Sw|b9ArUW`8cBqPo<~I>*?t6Yyt({we&=L? zMe*racAZLbky$ai>o(B4Au)f0_%wkAehzR{SHwUW>NxzLLrLix>e7etgF6J^e7~aS zs3}dN!wiVxHr4S1O?F2g3v^!Km;7AfUHSO&f(cRAZj;K<}kZ1TWWi zy>s?l9`USohRR7l^|_~(Ce?XYYuSx=ql#?$ zI_zhF>==F}dfkH}X1Od(!0uTDfMdNeza2goKY4+B-6+HNK=>~{d#$7(ws_t5*l~2E z9fVlX4BNku!AyFcI6f~>EyMof<5FX|+0gSfs6C<`w=53!r4>v_^|kxlufadRC32ov z`K;AVAv(1t_~KXY2ArZLbumFd>`Eu5Go0!9w8%wXqAzee?mDABjW>eb zJupH}9lOxSe+qL~X_c1;mf@UWWz;Nu;iv*_X(+&xUREvc3O<#CiwZDzdNFwXnbFD~ zQc$;)GQPMdpOCv`OSNKjGbC&gW1*+6_oH?t=kgHyzs$-5b z|A`nfhtUA5U|CkDUZWvU?0#u&+M$gC=J_KFhpmSUghJucPDMQ*_oWXG0R8~+I%50W z>S5GC2Zj-geMnD1-ILqLXv1(GBO=0!ALn&N`3PTpCY@?Fm9)V1~!8Z&VA(ruWu!@ z_($wqe?ClX_Dxh?`I zrfQ!zb4R=u1meiao;*j0?;oE`h+zG2K@4b+C@Kv3ZM+m6x(ji}McADp88;gG>vum~ zwz%N#UUdIdJik5bkmDm0$d*D8r=D5zkOE&ddcNv^iZ@X%K-m@)ZNegI#e0@cxW=Rx z%916rFMiI@4em47T+mbAgG)k$VLtIK>*fR)6W`^&50E19mgT(5ca;9rntL@b;qABf zcKr#+e!bkFMAPJkPlF7c)HZm`kYXB$uERV@ov^4hbzEvTWd^QtDVw$8ho{6&Wg`IG zzJUb&CWT39`5;x@)lT?FA;)-R=_|y%OUz3Fzb`Gg%^!YSMK@*a^xipNQ_@|RBw3PQ zkt&*h%K*yYa*Z9oO+4>?%&RFq1kZKOKP#YmU=>Q^cAbFJq_Dy3G^2hQS`7j(|F}4X z|88;Qzw${y5icF5>QhQ4VG%UdNkoLoOw`+PyUVG*sgL9v_nvWYk6rn;hxR5Y z&~;~;I1sVXb&%q3NNkBa6pq)gh#ux)hKT9&JlyfN^&3twokp9THubI201!zC@EKY$ z0pJz(B+#ERh%P1C;ZTqusl#jzBj`t5cU0(~)lN=&2r=3+REW6H(yBN|%i7X|`*I5I zS>?D*5KO)FnvufDdQ1u5GIRnyjIOVhAmug|dSC9A{`IWG*VkU!q=oemo2mqJ+6}9d z`d8j#AH#Y&P@D)J)N~=Ggwg0bzH@Dp-ZDVig^&)DFVf#Dz@lnT_AViLDbbVNvzFCq zl4eFP6Q&*yB|i_FKIFwAU8|?`pr909fC)#f8PY%?bt@f4Ka@-Xw|ieK1xhxwY#fJ` z+63tOWnb+b($zcsLd+xY8#RsILqR$Elh2 zoKx6S6%-yG0vt!zKz?ThRb9n)9sQdvN|zhIukd%(c$wt4s-{Ye-e4F49Kg9t&<@#7 z#+6);9UnUKC9`(jSEy9^Tb*teu3hyG4g};A@nF(<+dE3c6uHbJO18D?qRgT zOIJck+4WEQ%ZOD?iWWz#3kyoRWHIu(LM{^}=XmQNJ_;H8^>i#xf9Qh^aG-?7E3mW- zXfvG3hGWF&Gg@4?@6by?vJ*25Z$Xv8nml;?j0xp6`SSuP@78|W{=8uzeeSrnU_##& zQPI4Dwe6GQUimW6G0b3vRrfJ^GV-Xl!UoruIbulR=@3qvyi>Ip#ux~8=S1B=`C$^x zm9iQE5=$j+lQ(1-f_`5lzTY;#zmlv;hTOW2BYxY3lw;_JvHYlslYP$8LN*?+lFf69 z>0y9<=Y-neD&K|RS{VuowfQ-tUyqknhdV=6uW8%kKPu3CQH@fJVbq3E^=*(m##24`dulOL@`GRTNOX)^<>h z55LdYZY+75WdhB|7($fnYu_<`3XKd9o&9<_rO>I1O)tYZS=v1aW5T3S*4>@2rz2;t zy4G5by0ueV@^(((;ZAMEW8SdjPpK)+uXF_@rV~5ru+tz0lcVZ7AxbUrk7|fdan69O zc#F|hf+?L=oOeKwt!h`x+_VTVFeG$2LhZ?sY9Bg6KSk5QzmLlK>gDRGBg&mD%EvH9 zuH86i80Az2nsL|fL4&{d+iKd1Q%mdXf9WPoy8J*FHA4aRgBZ3qvJmSqO^KzBx}G;N=cy~D=OUXP%q6`IIQN|h$6;i zYtM;J)`&sQb5<<|i+rcY2&8cuH<}##1B`sO=&cp@Yapv~2(~!Iuy?>v!duotFqD$%bie9sf z>3w0?Y?ZwQG7m7S_8e?4gUR)an#xnHW)X?tC25&ZX4#X14$rYBA3jg-46M&n_s~w@ zC^aC)H!zB3KJ_~LCWrp^*KY-i<7Zmu69@5y*NLd5KB_gNS3}zHk{jQRz7^RK=`Te^ zcW<09qtCyaU>ee$klMLKk3-q7vLRa;`vX-DTAGoJinulnHQD#yo#(Nd)~PA!UDuw{ z;glTx*l#pD^w3oMF<#SL#=!7nzqIW68jDfcrIlxR>1z@W58YWmsvUA!=3&D7r8Kk| z5IGCq&3`;uSXiF!DP*dX$;Ea17Vq^35MEjW1CLpIk^un;cz~>2klL9e<tSLuGX zsJVC8X#`mfxHY{*7J97icB@@Dl#mc-`-2|-1EC6NR;Abw)ZJak{$amyyhW;Sie>7F zz9SvH)0{e9TJo_-1>!7C;~e<`aEFf6>_U*o0qZ&$FCd@zMJL|bJ&-^JWYE?xG%aw_ z)CU-$hz?8IVNr%Lz}h!EX90YU{Q>xyL~~3K;t+#}l3%x@5m%@kSU70t%4WcR>C77Y zo~A2CQfuO5HA)u&8w3|Q504s?t*HFmbH4YbgMm4Rq`d5Y=0kAn)yD3`r%5{J5@)V5 z+9j~9a7uvV67X3yW&9bx|2$p_(Kt@Dlmj#h&;O&JZ(fH}FX!n6{AzL64D(EyZo+g5 z85C~4`|uVHBnX7-&*ARDV2n--yH6E5$}}+a21&cu7j}E(XyIg(BKBp7 z4tX&?JF_VI`TPgx-1l71KNoa$57QQYleQ*uVEf^Y#)7THl|^G5Nw&hd;%}0-Ir4ub zugX4EE45((pqQT(WKIg`bU@l_0*6S%&ug`LSUg4+*^j>S&iPhC9fwe!d>#7(e5e&6 z^QeB$>1<~wDmQ8f2h$VFie|2`yed49_t zCW8Ded(hlfmn;KhZ#t4LTpw3zda4f!RIi& zg~^_>7{!5a?yMXu9o5;2_)G}g%O^#_n<5+5A z!jNs@V1|^>XX)$q?)?w(0}9)CfD0NCv2c$s#1Z9);@$)&OgO@a0MxZYD}sI zcUaqc3tZ&0AW32fBTlcffJbNp6ltaOons939Vy5%2|c}VEbMG z8-J=I0N}%WU5L1FHN&@l2^tb(Hx-k7_YKC*d**rXjX8D=`Q7uCy)t(AgJhsf?gO&t z65#TCr~HG^{~yHu|N7rQlrG-*JLUU*Vf`z09#dOKho{b$vfc0`A!ti^reIA}()XbndJdqK zI6d%7q1IKHI9sZ!<)?a`2%M4%{~4Omw}Lxdtu={)`t7GSA-T$dmd+`gy^G{!zmg?wSA*5d5t)4&Wn0fl@1|2qO6!n3o1mor{AIixd(SP|% zC`i1lSk%h9T`!*1Uz}T1d=htV(Rjb#Q%Xfcnq|~g zxT8w)7vo>Ek2IHLJncZ?%9v7vS{uSRU0a)$eL z#Apd;EH#Z!J}^&G3(lxxGJ0k0E_bVHA@IRULMC`vz*|&?_z%3c4M0%tIzGDZ9$;`M zNwSeyo|gOl70FHpFnsN#`+X450KiI3<5#HA@>O#g{3#Z4-s1KT-S&3X*hd{cDew|l zL%Qur&_D5@Z0<1g&C-HTN0<{KsyfE^1$a&*dijTXWUg9R_CJaHWOu_T_0Sc0tl<7@ z>XG^8#DV%DA5=I@$Ory(|MJSl%f`}+J5mQ~zsIv^>ff~yI=q4Pp})~Mev_t7WUsKc z*?y9dbF8e~os_aK!>^-Gqt=KKm zyrLw%{?fQ79X=dK)}$64=fz}&jVGmMVBzqRh^LswBg1%fA;!F4;YxE;?fv+@c1|OF zzmBCqXiZ67i?cf^7*DEVfMxe=x4W3fLBFW-w!^QULc#*b?f%KnH$|gyclqAhWzG1P ztO~UEDHMuc4s%zC`C5?eU3$Lg(BV0G*XNYfsS7j~0vndg+Db9gD^AFy0f!eW;PQ_5 zOd77`r@WuQL=Iy@Wi=!MuGXBjEiKk{&1DJ;JL&HAxxw>i3WGHHE?LBF@Rt-UyS&0; zp#R61)whz1@)5dP$#>Nch~_D@p&A;9N_3V2-0BW0&VhCeAVpRL1a<#U)ZCuxDaKKI z0-Qz!gf(#O=yCe7W-b?fzi*CHZrJSy(bQ%teHUU(Dy)&R{o&J_Xe&S#?2QbX;p61V z2%4Q)jj=|7JR35JaS-VXDu*TVG!A-!BIsVXq@erTT5JA zi+QTmGI-q$w6smx;j%pK`D^B?Ue(}^__e-=9U?QaL=ZK^D|IHgfCrB}pyuaXidAWzdl{Le zyohhxv3ySBO1Gk*NU1j|y5x%5ZhJiu^^wRSa|d1KXP+$^nOZ!Jhnn9_l6l9?mcL9X zpdxGces?#_D8X6{b;3jRl5N&HKzuCXgFfnJ27eSRvMFWn^2_VAn`!00rD^*I`4sN(eWEKDS zg~Xtv$A9Lz{i9O8_#a`FnN6tj6N#)Zoe#49=ZeKY-y-%e_LcxPF)U|6$@D*u-1oV( zOh7kMZYsifZBQ^OT0VJ1>4DOj)?<&b6|E3%zdblbjkA8UHY8MxBPEoe7b{@=bSAu^ za~2X&`K;>bp)<#3ooRbAHhaS2rnPl57ethZsAY~R9BU(i!&tW`^HXrv-Lpo)5s9pM ztzKtC5xRa<8xk(!yv;$i!&!0e%dd3L-z{I#jF{=_WwJXs1!bc>A)><-iy%m~R&sGz)ZZReG7wJ`5x9eqa zO`?v_Og~e42yu?4#D<@X{ryGdGFmg$lMh$rshn-EwI~z5FdyQK?droaXf5HJOB(OO&K2nJp z$uX*+8tzF@r7NnI98)?hD{7cfvcCBbW;=_#s1QRB&*A-a~L3$18!52 zNU-{`Gv6Pg4mdS1S~ksdyag{LUix)azb@#l1dF)3ZZ2H6`?-K#$nD?ls-z|gS#BB! zBSh3Lx=ucIDn)TsRa^3Jo1c8%DmY8cPtn;>BV%h^o6Bm933AOGPZkNamGAvO%+FkH zKB49%dWxBUx~|LQ0q23)y{yBrg%A6mwhGG@lMsZJsJD8ce`5-EPo@vo*P=DgXI#2s z8H3oU+M}*2870)KHz?67eM{lh1HO`n>8mBJZjv$ZkWgABHg5wxgd=D~_{YUxJ z{cK(uv{Y{1glKMk#U7)$PE*#&&j)CC-*F6EL><;<%cGB3D3obdPO)bW`m+vWPG76I zW4rO0+~Jj>K+1@kfI~+pF?Q)~Axvv|)V0slywJ~Zx_2{zBp$heIyhIM!l-&s-v21t zYH(}AM73BAqLQ`^Z5)GQij|hX-L1REcOVW2CW58@&+Ty@}i74D!i&Y5s8& z8>$)m==)JBRE@DQwkx7#WpQ`Hc@IQ}vVO>hKvW=7(;ma?I#nnrXk(RfD=B;Q%UNbs z?Ye6PfuWaKdi#4ncwfKzQtI*!1+t$7V)=Ev{A8)|gslK6X#GU*Qy2f`#G?o4CYC*8 zM+cSy%m{RNlZtmlMelLFR2JnC`Rmm86V&K!DRN=2ja_em6meW%!-xK>>($rlWI1YH z$>s=HT>)`%Tq^_LuOXO3)orv^AMK8KEaUb|wdIPpz^nCf@j^fJvKi3$@r#VwW!%Q; z9qyKHRW>PqepKI2odoO;2=lgO7nmMGOH{?~P=A|*_okHZzl!H}AuIqfN}-rB>dVJ> zAXr_jG6nuO(}5v#{LOS2kPPrg04l3?IFFKejh&R6dOw1)0(%P6e5_H|+iGW_Wvn%` z8tr>7z@F0lmL}PAvpgY736u9lLJV(&F616!?@cELUnQxfoIMQ}HPUIzpoEIO*I47exf4>Gyiw3T&yMC^^|@vqcm)Kl zMI{5t4|)7CYynnPJ+*uRrYQaZ)jrc|Eu^P^&SN);q>kgS60?7eY2G==q84BI!A^?) zrdGx{E5@o?Bj5t>@KgVpc+0_p2c2)Q{4ncb`g8m4%^Jrh#)$#N5lT|04u_Kb3BAfH z*~fb;_L9LEr8{fG-D};hHgnyskFOU*9b=Ep&Aa8->~_sXE;)bjX?iaSIz(;M;3RH^ z?5*YQwX{(B6gy+3>Z&eLdt3$G-Cw{&M9oZekhJ$cRAH#F{Dw~L6T zq?3avNx5v5_h}poUm8|oyyafZ?MY-_J|M5US!g^orB5td$;_t=F18j?a!p2LvKD>(A<8RsVHIhXO)+3IG~fEppT_JNoukvidge-sO+ar zRA%q%Deg-=1$PxO>0&+{31}_5)V<$F8d8s}h(&82wKBTMlDWS)KCRS>I2*LdAvcL_ zqQbdodVTigeWl$RjoB~8j-dtJua*P}t!#fh*t!^W7U9*(b8UIuM5CME!I52sYei}b zI=s-M_o<9X#yMDw+u3C0k!YVv^{XnlFKi3RLhla@s;E_13TVe}wUy6YIpM6EoxCq% z*4n&J@~{X#n9&RLx}Gd*apmVO z*0auQgW)4rm7XO8LP zq4(1i5_~x$*bjW|vhIGhZGFdOjO15!u(jRJOV=Cmy3vQm`Ji#s7WtzWpmp zkRfM*PbdH06(VZxL=ET6@bDT-S#^|nxM^9pHhY2k0W~fI4-XILJ=VjQKQjg02K z&Kbm1$1`iLJlxN1J+f^NvT+aXm;oW=AUwGv(8kJpE=|2NcYlfJUG`M+Hw(!jrevPk zusiZB;<@h&_03*)uL*!$f`vWE(&1r;!H|-mI;04&~?tT z_1xwzw8&u+8nlHGo-p!6r-;+1 z;v66t&AL7tIjEDs{aWPfch(H-`rnqeqaudcYx#*9VQ-8SJM10V zz0f-@hXC;bUt$}^W8pSB^5#Fr>jKI)Z|#0m!|izUETjNU z`8z;{d>+cccf=XvayIW`jZ%89~d6 zk{;=)lM}DLG8^e_6QeISOt5dvR2sr3aLdd&H-65i`Nqq*ExVcCiB^!`cl}}z%ZfiM zRW{laD^|eC<~?J~LQ|srdP_++?yc6FlJMb>A2aN!%UM5hi+GMZzIL)Ugv1$~L&?>y zCNjznWPICX_mVSG34z`@uvetXqJx(^?`LJV#<@?Fi=;-v&#oMrGKt4*Ztb&!9#KGj z)M#KYGh@DfF?PV0h@0>s2TxwmI2NGUiz~0zJ*6+Af9b}pawGYle*6%L`Jb>WKP(no zGbP?&r9i_28Qn?UkbA_IWKZ70rX+2N#})UR9K{0OV7hCrMR&?Ok8)%u6BR?f2_7s? zV?xylCozU)(W7H(OZVb5#T=N?d00tG6*0XD!Bc%PQ&%=~A1-`jfZLc!ZdSj2`~tr% z?t$CQ40+c%R>_uZ?)&d9)7TvU<9S=l;0-|x zo1dx<@z->e^p0DBi7Nhe?2o*?u|b}jynUtyFNf>hGymP`B!5K^{nz*D`J!pADSZmwbX;tF)nE? zXLYN>tc(uGOB@3eaV&{l)Jv$=KuRi@%%TXe%$!f(S+)+-3js@|YZ|^qLbafm-Q*Z3 zz%|0fFcfHPrkb#EV{$q8Jp38xBM1;00eD#{ZkratV8~Ghh%(v`R3LnK7(rub0eT}J z%?ZrT*oDll!Kf766r!$-hl#$i3vqQut#3o=Gz2M|YGVKpny;u;kidyU?ddgP+3NY@ z0~G0sdA&(I#TobYv={VyG-FTx?}Ee-B*@^W2b>0Er%R|g{2S;;r}q+X*!%m=_uj$! zvL@8;*ZxX(agtq@)jQH7mh)uk)*vmP;!N2Dg`_2T1X%zSlK$vGU;)MAGJIP|<0SC* z!*UsM=b7lxAJxiEGYspqMisNm$ClAD4)soJP|!jHBU;!(D(U0%Ay_KIrm*0TAiH>#e^n)9t#? zooMG^yXazVja%|Y@83zD9(WLJX|!S&&?g9IlKPeDT)%yVQI5 zGX;0tvsKC|C|Go;Mk;(q7Kcr{5Y(1r+C%UbsxTGBnsmNF*QGiB%gs=RPrN~_J%;n5 zmH?}KM@DK2{4d5f>K|I-$3Mv;_=Cg@Gj%CsrF%NTO|4^L6kLTL5PKha$}d zE1Ux>G^hY8jNO^U1*^~j{tzOv3;Egu3T3NH(e$G}hG*cJX`nIsKb0;16_CMS+hALY z;z-YgPuJ3b?k-LT$EbVAmHGlpz>op|ERjl*W3;$|BWQ5<4YU|Ofx#3bLUFEbXx_%j zjz{Y{BCs3Q@K0G9yO8q}D){z$XUiP-{G$5V&OD%2omHW8V2sM$4Mwd zBj(_XjRN{FcYN*M*ts2$-Tnq)Ty*_U3?g>w1g-={5nrXftZ2Ye_lh%OpFpTbqNf5p zKo>+D$HSZfK&c=*XCv>$=|W^L?JL^L1|f^_PTgrZ=IOGKn8XS_mz>it2t6 zOkxPQKY#1<4+*{Uv8i(c?|f`=YOvUHa!Uc}mHK2YsMz*Q=Ar=)^;}i9?(I*mt0Vj! zqE%HSVq+Tw5?*DqU*)N!wzMvda!NV3Pr_u^`fUY-O=k2?SzEy!vQuBy`z?p_WxaxG zhL)XH*>m4t{LZXNN8yv)H-cArM|gHv^cId@h_{jrYCU(lAB@hpCxQVju0F6i<&0#BW zFJR;Cnz!=jb7-MHLaB~1GNCVQ+P*REns?26pC^%RZKir`#>=p$)nfgw|1V^0d{`8l zC`2SO_jQnkoG-=TQD17rAFhn@%1QcW_i;zX&q_>QI0N&$3oR8Pj=2jJJ zN}lnQH-C^DF#ILk^0M9*GvRqxuf=qr$H1o!FGSMA{rEZ^Uv)coG@MP9bI5vkt5n-1 z?~#_?5=PTOAuJVgG%YY4Xy(=krGL{I?((>gkp`w)#TqVQN@667$3rfe29tv-QO3gW zN?JEBaf_sUEk%@&O!7bm&$J&^%yUn1WX|*GZ&j$Y{&CnoxX2-Fn}e#>Yug3Bj>7Fz zt!xJW))gy(Z{bfug6JjcCQO6l%5q7BE0?&=Izv^+&c75qTXXPK&JjD4j+eG`Z*M4d ziv`UT5xx@;&>QH?7e^c#Eu@X8!CWwwGboQJR3B-NLvpM_p%|FF06SpHrUedU-REz1 z)*jKR54$nf;YqeJX_$WM3Eu@7$%hi8-Gt98(&eGD1ek4a|rsprlO4V^t5yl6?Vag}OV@tl`4%{GZ5 z2LQt`kn{_sx)k}+_+&eh|>jrOY{Cb_bXh3A~(|CCLnSeXj_Ja-vx2cz1DVljlt+TbZoTuzev z1a|32hbCVZbXy5rV{Q;{FJRo&99dla87MeM;UUc%uohP2U>GKyuhdH-YFEwd^Sty< z^y#IDPpY+n9^p@p&0J5}?4yT0c!3n!=%~}K)1+NavOU7DtH@_c_MNI!P2b@Ye`{HR zup);NiTw7AC~SFq1R_G!# zWa6`O*q#<9Xn6U?T%Ffie#b&Yl0J)3&P-BAadB~uYeBR-rc_>NZCRQV_&BpS@p9t) zK1ZK>_JotFYs?YTDSz!K*%jB^wf7Jfe>gxX(+ek`Vz$^%lp87MWn#xW$Dvq(Ycnc*8P z(P8`pPg@-)bgc#*)2wqhN{c_bQ=rJ;e4x~*@fW&wCKaLqh|u_Z*$!f;Hhn&`GTHEj z=y==t9Tipz{%=LXuMh<11@YA7XDBoASy*{TK!o$+!JdEtrJ)t4mz|8bdo@7ikvqko z_UrS}>s?#uomGXd!OV=DaH=9-o0A>c;VR`kbvCMn`XK3RxtphlfmVd#zNM=Nj17e- zpP76uwLw6n+cHWh*cxzfg5u_ex2*5Xe#EZjiy%}_OWCS(PqBzJ}y#g}F(;Zif_7JYWRD>*|mM@WLn2B2@Z$9Px(%7koAU z>llyw8hiK>Bb6E{q}2?jte)5M$yp^gV`i)WBB5ZxIePbcd={j_sm<=N;LXT^LhimV zeq=>M0COT|u+1G5i68kYZ#ns?QtwjRCeDS--ENt5yTZ69Zh0EQ0$e^5?Y#n7sU_r2 zN|yFsv5uU7YR>9wj7jB5gQL6^UN+oaSl|;ca?!ie#x&QLO**X~E(YI9A)O=a_o6Qs zgrZ%2Msna)+cT#aKTy7OaXU1Z2x2bcuYAcjV4r)@VPN30tRu=<;fUHc_cfQ&jE(gN zDMac=N`}~=B#Yi+z#4iFx<`J9mUQ?>^{!1NTuIe^OTHYr|B9gW%#Zx)2M*DRRNBbp zja35wvEk{u;7|0fI(!a{GG za=JA>;KEFcL;`gi)Gz!EY@)HGo48yyn-b37&QjQ5?WOI_3)vP?CKn|)XNK{R8>P92 zufrU8500!wF^a7V{7DF=ce;1(NjRD8W5{>XW%3p>5!bAHl$BJLXIm ztdJ6#T*~$?JcLN(ufQk;G1rHkU0yMZomA8O>|{&|mndn$km!Ga>80>b@xauRP@IPAOhtEEgfm6*75hz#V>fZi zBI3>jhpfzgpBFa!68Wo3%I3lW=R06sas|<7?+eTmqK|avBnt zzuVJr%o%O=#)D~r2>T=u7ShI~N96zd1|PK3!%-1jrJu|W_YyCMY&9LNP|fBPx=O5F z(8R+tcg`EcjJFVQ3H+Y`qjWH7TbYycR1JV?Q4t_YYm!GCxQ~G#xQ>CnJD!XR7CDbU z#AkW`B&b-FqEjQauAb+6+{AL2zdFdd{P09gN#O=s6z*IT=}8M8XZBY zkFOvWnitek=Z6%alFDzRcLlK49JH?NLhnB|a!D=ER`0aHE?N!v{v;S#SK(sexQ;RD zqbPL%t_coz*ZFA@_^1qRN}JKCR%$_X`nC|e*AYI~Nhqp(XZ@?xxcQ!I!&b^!soi=s zXZl8`7p#H>o_?MNdCVz}*c&!IlP!?m^XCx|QA+`M{e?@&UDfbp1M8=kZK~Gg;c_2-}M5 z!Er62ix{r!-)Ojst=-pcGW*#4?-f;Ijc6<+a?uB`0g3%i4=0dt17lLdxb&zR^eWs{ zN|7f!P{jBtG z2O0#apglntH|Thf<4WD0@G%#l2H3cr5$|RqI_Xa|`Em zz4hsl;!`K@wtih3W*pwVI5qQ;qN3H0Vg5#SE)X&_4WMm=%fa!An{R{9>I6fS13K{d zLwX-2rGfR602g$q3PdtIuaOFnc`9#1cHUtP?RXdc1<~4r>Na$;>F57_N*|U0`WXA( zi8gm~Jy6J^@80E=_0V_A$FJs}k6xtO4s7MWJ$hch8=XmJ4WZdYKHkg32naSvK&j%GQ-`5B_G}664^jh~LMR@|B0ol&N{p6+t_?`(C<=;DzqM0%Hd|bh2 zGe@?FwzwCS@KLRKmKJBLQTgJ5VMR&sEQM$l6`HkR=AV!887Vx7bdC7zgA>?@0Moir zy#d$e+jHpUDCwJz8Fp25p|f6}{LV(s} ztB2KdLuOm8_TrtpoR6;`zHJgG@%FXW<*_(o4H;909=ng!g2)4Nm{VG4(ng$wI51nb zc32Hmbv#5D`K*m<)G*<;weC3gWHj=Vn&F!7Jx1ePwLkU*;OSH_z8Cp*uSx6)N~;)- zTy*6V$oxxw>gOiWA6#SW2>MH; zoraFsGv}ZK3usg8`s;BcyowCdRmfu7+bKa2wx1G<&quG)upgm(-b2%E>}-`1;%}^> zG{6@8emv>lc^yfCnZvVvc5+MuwEaGvOgv+Cs9Mb6zNyr$OVqa9}&JZh~6GI=A6B``ySk$6E4#0};!#t%?F=I|wk@jcDt0dWKhby5*aZ6UrPwGJIQPg?-C5AHc( z9yJ3gBqCi-7<}xgwJCn<9sL6huD3_BLsk#~#O&B{dZR10beJDXmI3DR(++_5(FdzZ z)s<5F4*e4F{g(u78G9p#66yjbU9DD#Sv>MB)ou} zMJb^xIx`peD72TO)p@4gn*^Z+Z*FYMW~@0C%FXcCTPY@DkM1G2-(#jT%AjPvrzC#^ zisi7nYnC>oYIJ6wTz$dyRHQpGB5ds@=W*F~O@0J<1~`i{U@Nz!UTGj$=I7-i47@Ka&A ze#L%!wtHJrRgppov@6mF4CU)eIvyD#$cdYge+0|rIYKLi8GPGsGqJ}ViM2XU0}QSS z`5z%hulT4KAMr)~#~J(pU=2EiQ$1nu$4t<2GI7LedaEaQNDz&$rhdk?*s@m*kHtjg zyfhASCHS9OQ&_07+HXD##draQLU`0q!U?3cm}`d};H}4?`fwx1-|5}AduMCf3S7D` z+_HUi`rx&~ar#SW$=XdzLj*+dnEY}`{Ot${r~~diFu~e_5I}rX3%=+ZAmh{r>2tAg zQw|acc>+>iR3yvk-P4tBt}8@bL(2}fk7%i5B>E7E3mYHljd_C}wy_Y%tPt)XL4bCE z!*S&Xu%Z0K^?J4DOMS_$nz7c{ibO}e6OJkw#fYs{+>8Totxo_B#DSHzP zXjz+!o_`=Cwdm`QB^*tDNDN(Y#R9gZl7NUzL`BQUMmE{4`7rp@v5R85)t@|LRo2D) z_0z#gJJ>27T_E33xmPUFM}ct>73W*Aqi>GC&96%8d-piCWaQZ6i1H=&`ig8(#EQlq zwP-@|K=4otY{GG6G&}}OM6Az^ z+mtk^lZyh{M0N`7|AJV=&j_YY<3Gqw266X=+cD8W)I0m9NimZ;B{chxjTpEB&da%Nk2Xs&i2N4R{2k(@FYOB5GHRV zu?NuBt@w3WxaDL7UlWd9q6|KP#A$Jm97|x4WGPJ=V5fYMVsJQJh*JwFKM6Cy-eK>^ ztY#!TP%ujqP{$##VRp!|%)MglP>v~!5=NbimGu`;BrbL)I$t^yzFM^5W6HHv7p{ky zzV`)9E&|t&{J>@kE`tM>w)Z!H1b_4g$%PaH2%HY1V~692{a4Uvw1o~Gf_aDd+XV4> zzMaS{Ok+6H#o<6yN28nDoFJ8BYtMg~)%Oj3zH@~z7K44_Eu~hI2tH(&j_}}oITr=< z+=m04kM_alwGxkxFN(c4x*geru&s%cdMF5L6SOtAL)P6TSmp7h1TjYIsnu04Oxcmf zE-smV0bR3Ch95(6Cz>3L8rmCpegDRZgfqd+eyN*`Az+>`;A~G-OMlT()mk4by4T{t z%u1Od@zxjAI-!yF?1)nluSsfWUg%5nzKZdsa=F?${sx!xu7s%Wln!imXn$Ua&*3R_ zQ23EF@D7*rK<#WoW_dC>JWwKbB)GzK7}fs?-xssu8G{g3-OQJARI}>`>9K_k`n9V-Zf|yBQy`4vh1T@(BRw z#4(F@%`%##W+30S{nNUWFPpTrKDrD^he&D4r^hb3Fq=-tiPR=$2BVxNY1R&15A#>p zIamhEym8#7RerPX#i!@e{0u-C#%R|F75x5x?^fPGVw*50H+(e(%t87LZv0|O(Qr9^ zQX_UFsM3ZBJnRhKn~d507X36PfyVqF;lYAC#vjLZfOmBIjAbTvFE z2z~bAr28{U+48L1P}aTq#$H|fQ<4-%=BrOy!bv=bH&MjNrwwR}K5inPuHxqMy?jJ>kByp?5T@`a*@ehS|G|n?i+yCWk7!QnY8c?faPJk2kxojz zCtqe4ZXU8{`rx7?I{Y_~j<=mHi|?RaMFzxA!ulP0eRR7Bn%YC5o{QUVxfzr89JRJ#wpg6Jsox>9LK$cRn{| z7xX53geBQF@5TG{^KXAR3Uj=1rDZ%|UuyQF5Wth6@lT+qVcf(u$P_`(4*N^^oE9Wq zT#@J9X{I@pVzWQbN%?N8%>w0cmyB)q_wF&Wor>X40qL=k+CU!V#KXE!Al;PW#GegT z8iY)wk-ZA9q-D;qt?YQdW?6$=<{P}uwd?5Z8vZ0nS4>4p=o=0ZgEY!OF1wsd;UtCT ziM5MwQn9T&W}5RZ%sI-d>5YirNcz~gG{1~7_JZTUZNj$m+`PmNg6$xh`pSm**!znw zM*}Oe=LcT?HmScz=^h($FzUE3K=MNY+01}t0AA-Yy_$(FrxaNP0tx5@EtyN_E!03v zHrfGRvw!e(`>2Yrv%T)2&VI@gD0bY}LGdR`WQ7M9X*${*s!^5LbIg}Bw1jjIW)M|V zFcl{MaXQi@^Ajku&DI0~1D4t>%AMaDR(zRXmm6WM zm;-c4XL)JWRT9x>cCwEuM-^AdZP3|uf6b|@%I>O8gwqGQ6T*mwCs2to8n%Ko82a)| z_7w=pmb6Z$p6d>i+gs=;T&^N|T0hXxe>?R)wMJ=OE!v*EQ8$7Ob26QYGZWiw0vj~H zyfXSE=l|XC`bbq}RNDrndn4~@{Do@VxawE!jl*lSPr4?(YctCpRy$?teaxl*sxc|c znm8cLQ|gaVdYpO&ojY(&(?i_xoZ7vlccS0#3Fj_YF1#$ra8Bc&OY;DDQ%oHhC}nwz zyUsha)_LZzS&+u^l}`6YHR?^84BpBe27A zJ$K{=eA{EPLOAS?uTH=hxAJ6>8jaT=%o7Non*W;P8I%b$tQW+S{6 z31ivnro~@GsmGAw4#@9vot$Vy*^)mA=|GGjH&8KLo-f7jhiJEd=qEsL)P zR%8XM+iz?0dn6n5F!G1gRp?yIXh+ zt{hmd?+SK3zA8+TF@^*p`Ip8G9Mzft9>vSXDbX zke2Y6x>i%!FA@tkRTfuXls8*+p=5P|`+%r7?N2*(MfR7J--o=Ncs(*7IUPRFDRvch zJKEJD*)}UhxmHsruhgzwMMYRjs0VcMZ^ms5Db7Vs3{Ne~CQabOFu0QON)G9su27~!1wrM&AwGiRT)dA!5M4kH(7rzXn zCS3z)hhY&fBFqq(KtT+ebza%|Gr0jd0S=5RuDg*W7N|+?^D)XTt`? zYOy3LgSwWZ=|{Gw-K4H(`;PX-G)5$T*p&MD_>uVAT7Cukr#E?DqkK~18}8!PfTc@B zAbU!KjFnO=_`r7g`|%|Nsd?h5)Jodi6ZI!KRwW9TYR9_su6@jrtk_CiH*)Ef6pU^I zRPdXUHYUX|CGwYHJsr&8SB5Se*+Y>wj5Q4lZC+SPH}5^ZS>h#KxF!EPT;dmRjD9I=B@R|n6S)Hsf)qgk}U4?HU`ac%^5 zt$lbFf7|=Ii!N#hqr`1a1vE#ks9z%`do!)SEe3y{jJ*=PLAwU?S0YVkTm_Iw&J-gFcteAYq=a1AuY2 zWfwz=%U1}bO!24Le@#H(MP5Kd0-Q=vpK^~Qh9Io3Xqu;BVJngMli&%Vi2hL+BQGw6 zyuN{6?-AUw!ljF`C(rD5G*fwl$`W_yap?vMNOP&L4gD`?+@3hU|6O?CaC@Wqmj~`T zDY-6M`KQ+Gd+m8aOP?MI^Akd@!-Z2!pIYOUm#^~Y*nz+RF09!sYp51Ik>g!0))NTt zaHX^imnyBS$y-n7o8{-#>3Fw#8$6d+*qdJHrd+PP@U_3N`hxSD>AfGB`0VdIISW^* zQ6J6MPO6snM!rndTaoxXRPtgtraC;R*=}e3sch==)aE+=Cc`VC1!4W}le)K-M>@8C zXh{-oM9ly(`4>??=|-fcWKT6>#wMjnaz}}ry<*>i*4@<}SVX@{li_Q|L6z*7(c-${ zi`lV`PcGXU`tLrs+{(SKn(@7q%BEH$^9(nG0o%n{99T+gE-9TE$_jB${5tPQ{->3X zAAVM_>i!7RA0BWN@Y!~}9X{*Wx>+3IlJ$KW&w3A4d7M{%*M?hrwCIjF3Xkp#Rv!-c zBeVC=L8)iD7C&?i`X>C)+^&`uR26DrtGe!9;A5&vp*Ih%VLQ)ym=~ zFAsfncxdEY{6PovVlknH=!hTceZ!bn^k4!|_&dQR;#(t};6bV$QmAW0=8ItNFMRfJ zQd(@BHXbcpk@I#`b@IzhSz(>YVdKRXp+3$Xw43>>>U~@~?KY3wxm(?>^zc|>dHK|m zc_m9M73UXNnX)rFWlKJmiSM}uL{##2?zg>AP)Hg4ZPS+zx(iJ|ziH>#Y7WZs2z(d8ec+a0`0-CElA45a@#>TT^iLEHbvUdZuX+xjCa9DF{jC zF|Wr;=CIqQ;#YfWh(vCPSnz%G=qYMoo%E2-2=kx8XUYmEgl$#T?0%>|RXf+&*WpWE zjQ#=L`wCBwC6M)Y18Z^M&nSb{*yZ2RF`|#KZD^C~4N#L?&l$N)`9luTiW!%p9C4cTBpnT4XLHS8UO^- zKfZd3{QIZE|I|8@#lIPD5*tICZE)XlI$s2+xaY!y6iC-dHy!AKv6RJSWO2TvbDXoX z+O@&8pUw|{|1c4~a7RCg)Ghjl;otngKaoq%eWpa}PS1!MHjnHdyhnv-Pcs zy|ZUBM!HUzu$mYHp8N$9xCt!;8UOwi>HYN5k=Sb=yds(K_byQX(V+BY>3WvTX-%vE2E$~l%h(G_ewXXjU-v09U0vayz!!z>7#_(d4XlM6zM{T9{JImw`s$rh% za~FNEKVhai0^G=4DXR$$NOb(pGXmwT4HZdqfUd#5lGtA;8N&iei+M2oxeCIo)ne?r z?Z^e@@2`Vx{^P?0WS;i_%-8Dt;W;ztpe;5~tI#oXLmklXA!Jv8FchHO+TU@BqGb@ zw3R4cJa#8}Zn&)#4f*{_#chV*mM%bHed^Bt@Neq_k*-~aMgcHNt2%ZgNaM}UH_oc z+JmNhYc=EQ$C4kc9@cndCRP15Y)9M0)2EmC8!T`X<_*)olkqvz{-2sRkhI5K48RjS z17&vddR%{iY0<#uDttpYAMqfx{XzbGc61rNIi4u*bE4*Ko_oj42F+s|!``|oC0;ra zAWj6OkwYv{??n! zaSVmI#cgPNI5KkS!*qxR)=t!UlxW8oXG;Ev?2lEgKc{17(mNE@{lhB8iMTuC?P`m9 zMjwQh{~oU;AeK6R#A}iB4+sW)SK z5;R1vchX8wp0G92XGZT0DM3fpoI%I?$an~ZhL>VhxamAk934W(oUO*h!N6{XC=IaY zg6pZ|F*ABke;G2O?~H=DfelHp&g3uS=yj0&p1jFn>jisQ5Vv0}d}eOMb+(MSdrVeB zYiP+u2mzf%GS&FEnMz2L`~)nS4l?&%e-4@{R&KZRiwk)l7Sy4TY;%3xCrFpAOGub2 zeOhb5=Ea-o%8>H#dk&2`Qn+P0!D|I@(4aedOX*#^iXet!w8~3m&qmX0h9^@T53TOr zDjF&%&D>sfs9Ey)hw)NMBd*VPeoRj$xV1s>$Me6c z%CuU9W+V;Zw-!_7v9nr_{Ix@N`;!MBdy6dC>MU}pu_k42$rFhMqL!A62toyf^P&XA z2xZ$;O^Q!vS-p})rWVjkY1fz|hkRrqB=(pLrIia&Cn(jWjmTi28*JCW8Z4z;)6KEc zwOV)d$VaxValh&XlTy3Ido1q-F1c2r>_by zQ-Tn-D`=o{^(y{>PRb&zds2ri-yhvF-sSW?g)yOJTk%3rU7N9B({th8sz39CG|=M~ zlLpKifLKDNbpc-MC_D-4>;L?(U{(VDJ_YX3&f<6X==bpjGCw9MVyRCcX?btNPB&S&2baYRP=pE*Et^3*$B<-BCL=DP~52f0^0S6z11 zx$!xwRtve9x%+AOnK9z;E4D)TK9&YPvPBt%D_4(d5JcJHCzweJfB(Vv)Mtr@`tLBVuxqiRnng*!VRB%VkqTKpdwocTA|r1Igg7J1qE)OEi z)OKX5-r1lwaZzXzdZ^)a1=g!h?YXY*oX}T{|40E|r`}U4|4|dc1dNhfG^> z3~9eNh7)RsGqYnm7{(EqZ(CUR<6{4=_|nd=|)BtX#LPF2UX-JN>E#Yi?WG>_wI$6Z&z)K=R+q3!%Dj z3QVm(4f*iUtE%5++9jS8jUx_#hY8>P_bhdweEdHkAJUwdT=^W_B>x5cP6e_4&nkWT zZwXOxL_iYnH2qL0<_2AT%!VXbn8jbic-4$olNV?9?>Gy``ewdz_Hb$j zN0-Y{I;8XOIk+r)N?mgD<+9wo`}RTS@(Qkp&9*&dHCRv1Knv6_@AooNz%Fc1Irj0> z)0UZs#FqH0v|lq;ivAmDfa*keIv}P0mc}kESgNe*m{#^=AAum`N9ZNIB9+p_ae0i} zEncPQbzmoFUg^t49g%y}{rft%T(GpZJRxM*4l2?6|9`0Xzk)z1xyT<8LGCav_lfHZ zn8t|(`E^HtOnKLDsLrlqG5l2DJS@nUt>qg|JUMi!Zh)1gb^XKM?qzm`7u;eWXjd=3 z_dk+_^{;L0vTAc}LP|MfY{mWZ<%ws*uKUlefWFfz+CrS9!ARcOUQ!xxAP;TX-y2aF zttq_oxyI9NBm5_kkGminfa4H|v}Z!Dq1a9B${Cu0F^?=>*lj)g%HjHr_4>wp6yho` z)A%yw`|Icf`3m9+&tF|K^Q37sa0>eUo!R}YB>r7j0Fh1B<_hD|X9LXa!NsJ}2BL@$7+IwDcsD0aD*mn0@N(C|aF>nRyU;r|U zL%)_uk!>w%tZ~*o|25_8=2MbO&OZ&)T2EPsf1{;Ez2_b4&6laoBrj-noX6q?J-hTa zv~9;S^SF6_V-xhJ`66D|Hix(8TTAs2-5Q!_ zCa02LDojqaRb8>VoN&P`r~~%R4(v!^en1Ep4e! zTL#+>1+Di#w0>p52{C;4tjBOruN2LZjKYH2G1I{KW!8CKcKHOnaW$! zyK#V=XpIvuyRnRHVnDy-YhPORO+=7;1cc%-9L$^(wVPI!#eJ zZyp?p(0zUO_S;R#95SvL!V$)UjQ|z+je@Sy5lB_JiKduu`W!OXx#7``edB7upMMgr zhl9|JNo7Hts1FDC!Wge6iP7_C_}Fm7ib8ko4L|s%+FoK)$xchvWm`|p?0N4CX6V

    +zF{+Z3TRkP>VPYUUuyQahE{;CjK*v!DJ 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 =XLq&&z z#fI9t3J8`&g&ERalrxlGc$Ho& zGv`XpuJS2tT2XeJy>;=_gwROMP50`gh=PWB%V&J5Zjw15@o%xvd*02!Q~dKqj6@uW zR`_vP;yUp5pWoK9KOc#AbYdI7_V%ogR`@Z-N0+$fM!p|<56*}|`Ox-WW$#Z$6~i}# zuzOH<_MTczjwc$2W_c96w{OBrZ{50VU|tlT|An*%X2y%eLAZ}a&75n%z+#4V^ZhD1 zYJ1wtyj@R@32C3?p@|(bDf1Ear;6D|kNM8fg@VSMhlZq>A2bSsL{2rGfm~e`7qMHp zp5{>>?m6f$s|s?hgvqh*O!&LEfri9KDbh@hYr`37MM(eG{>uiG532>NcZAlC zcCOPAO*b;g#|wvjd@_P_WlkK+tE#FM^HArGxT4N!Xvj%*-~)A@X~FaN&up)LYyw)~ z2ni^#uqeM-Of5n9GJzc%s8(A)93pDbm~xurQImwY^TEHc|0w(1Wq%=S>S{kWBAT1v zPN5&bYJPwm&B2CL%<>q;IIX)?I@x;RCxz0q)oOXQK99-I+@c;ut9>ju`H0?1v&O}2 z=$6sdQP%E~-gb1TOeQ<%r8j2Pi!Z=whHnHxrcsBMlD{r_z_YZ4eG_h39d1!}bhN3b zD!llzzNUjY{0CJfb0TayYrkZnDcA>2Jr0Y`qBc*S$gL46+G^(P5LkCp@Ij4X&TAW$ zaZj8}<2XgyrT~Mn0x%}$2AzLfM@YemkaYUdRj#1}Vr%qCb}ggu6*civ{)@5ZO|8Qa{Vj;38g!z~77gl^!58xe+x zW}sm;{yw?FF0Dna^08hH;hH^*E#2Ag?I9R`S;vJCqA@!W>h4aP%Q8CJ{FmPk=n17jf(PRwOC zyUu!_+dQcEK}c+4ygSwl^SUN)Dd`NzZ}q`LA7UN=igzaj5_JfOYuLe{yReOG*o2AMDcu)l^Zj2DM!9K)}; zXghmc%E3*|^mc4Kn4&@2Lc;m!3HH-UYHiAwaNhCrjW3HB84=Ec@6#pZ+Ew+(!lv!0 zlj)>)+*hrM(uk>pB)(F=3XI{F3y2{F1xlhvN=;ku^SYfqC^;Q5>8VMBy<`Btvu2P$ z$EQ>w7023gBBRxaqCA*it$Vf4!SM7GcU94(&UN{b zWpZBL>r4bwe8gE-SGQPR1C1;e77cbo4Jxpurf+?G@bqhzSJ#I&`Rv@i7ai=jo89=* zcm0i^FdEI&C`YpFa~uxgHg%Sj_xx17=6~pEq1I|MM(dXB)Qwks=$539!^X{)z5o>k z$pmiQ5a4$oka}2L&oi@jaJk!R$Y`i|tqS_I>DU$aF#mWScGs_S%y{*X5=*nuDf5Ps z)w3Qn;Y_?Se4GKt{G|D!UgR$sb=$u-S9f&F^tohUtGaDSWk|FXcNg&YJ_q_pKD7QF zNo5EAkTk#F%h!@IjL|+giDxSPt)?8?_D7JKQ zeJdtd^qg|A5Ne>5-~gggIlm_xmil*>dqS^%wn!A&;f?9ZhqB%7Zeq)LHz51wP1aKf z%NCT!jbYkf4Bvl|vI#8Y|6^L`fj3JFc^3*#vKgrB|Fi4<^uHT`SXEzP;7xYcTkgS8 z|D|ic8ZPZz zcwP&}WA+FPn(AM@kiR>b`sbDiP|z5AJUv`2dsc!jYP&c<)WS{bb68Ag!t$+Ih3E!T z^Et|C!KEIxaMAf?(VEfe9at&^5k9h=_p!sXhuwVbZUE(Ra49pqKf#DYtk1Ag7|T?H79D0=ZG-5?k`t9(UdeXwFr@i!fY9*(1e6Mu%Zju%yCy z>wC@yrszNYl|wY^ATDf5dA_ZcdIO5Y5s;0{&b~k2FK1%OeapxlUzNDqJLmN0$M6=P zix-8;{`o#6!UXWdP&B~IYNWD1`}2*ks$yg#Qcx4h_}kCVNsa8wQ+N15_2)Yi|NNOB zn-}}DE0BM>Q)TGR!w+8I$r(S#U?_a`P0d|fIapHuFUy$qS|QD;aO&q0=lrs`?@cV; z2HX^7^*tm{N!4GjR(WKBTXo4f0nL#5_3(}V<1uOec^>}1Fn|BA8mqlbnFAf|vqe~Y zp-!n!7_1Hb;ikUzr+B=*x>yI5_nG&^HS?1#P9Z1?dy>*bTNimHSxF(p(5fGU)W5r|;6GJ0zrL>rtte7F+K;Ai_mt$6T>!iSZyx=#!Im&y@`Xs^ zmu_L=I%g0*QY^1jN3-v|$=WthxBEpe8!iVZrax4l&RZ-C!{u{h}frrt&8|#!8$Gby_D_lv54HueAdf2%CRb3;t2p zGym@Tg8y^||L#5|kyqQVj_9CvG9!%&9OY6QtJv=eZ~`0b@ZVhq6z!k>&g69!bY(jr zU3tcME-1S?ltEJTQVxrV!HwYysoh%Onm=V?{||9d}w{N7xkKV*P^np%4FaLsUb0nlk?Q)V%>EJwhzY5tK3#9oG= ziuaY=i#MtWE!$$gI#m39pY0LwAfEnucONp`JT_Cuon^LLP%A!}nq;nNBLtqPANB_t zb-#BzGynL#!1sT9PT7^}t?oSwJX&>JP=VGU8R5wpp~Zm?czU%(E6LEn2c>#FJErw* z_HT>(4kVwvCmJ}StV%~02F)qfsr+`nL#@a8(6yLB19c~@-{aE!!Pgx4@q1mnKWLJ( zLnTWOofaO+2rIEdmXbtE{*g?edPz%VH*NGH?>+oQhf;y8b*?Ug?(tLWE$$k1_E=vr zFcy`6xX~}~UAVv1j~etW-G*M5(3jgk`#F!Z;PvqL-{mU*LoxrKSLf0FZqM!ynOh)8 zyBe=)L5AN9r-GE^VOMv)2jGyiwfdaWD~Y>Z#>fI(;HVFLN+S+7%Hcb=KsXeD*< z72V7`&%jQ5STr!fdFP)j%3l`BcJj@9uHK?(=}NkXy!r3Ny@F<)l#X_pgp1!h{5V?+;cS| z&eVK(pL4JeoZWBiW{N59dcI7K|JiPBs9nbQ`84f$ z|JOE~S~?e5leOnk3`W>qe=9fQ5FSP?jh5!+T6P4#9&c!96}lkLdrb2(R5>Oovv{gp z6O0VQ+#-Gh@T#9!zg{;}z+?UH(M1at=F5kL*!k~!!TaIi_0}M*kl)X@% zBAqOEZ0^_x-avi?;W}yzG(e?W(?sSFQYkcq((Nwm0!i0P-KUf-LT$VCClaj=?;9nh zUp9kfbBknG3jJvbDmHdpFJ6rpcQN)bYi%&oWS|2SOP6D|%5YvY9?w>1+X5V)J$EHq znD!2M`&4t6J}ta_PHOB;X|`KDPZS-F?Lf$1RalXCu)Qry2L4`{^jyVTeVF{rcS04m znZB_X7E{^!*rRgd3iEtzs1id=*MRgIt66Mszr=Jsh>@|~fF^z!uA(}{#aYbtC^y2V zWWT5J!L*iwVbjB>l?LiADu1wa{#O9kf&aSS0X@Dfaqeb9e2?o8;!V)k&+;*E>ds5q z7^u#MtKU(Hm}Xsqcj=MX7%{HBt(l`2EmJ;UFm=A>`s!xi<>xZz*P;6#aI^zo7kzgN zeo%>>av((_S<$Q;--nb12pRi67A@tN04+#O?6JgG00b?y! z#+2G~O_X13a9+&~efGU)aXyM(YSb+-S3r$ym4Xf1UzizbzQUdVFsHf4E7Iw9nRn`^GKo9G_1&ge_q7=!WTF&}Z_waj^yzwGz9uur|Mi8*);4N+xL|4t zZ+8p{h&DN#2*naGs{FhEAXARB*t^ z5+Isd!6&*Wf?(mDgt7}=sKu+*Bf+Y{^>lMD8$|SSST!e8_o{x8TPpR!L^)OAh#;|W z6I?{6PkY@pqlH%&_`daq96)8k5WNX_bj3!Kt8IIuP3fy!s!sXB7j+)xQ$MGMM^3%X zUquyAhT+G(A#q6dPwDdPc~dV=+R%+Ucv_q}Y;y~lq85Bi$bX_bi|8FPDqmc)Z~r+* z`33a&5tEv*({AUVq?+8{mR?Gm!s_Ua?r$tW2bas?HH>gz$~VRqscYDukSlCLia znmgtcK$~r9GI}yWWR{bm=!?-1Z_amEsvZlV_y>V-dq5Bok#oI%kbn5o1|rtk3d7F0 zT!GRfFa^&L`H@Zfxj5w#1a@k6nf&bL<6_C>QwHpF!fvOj9q939?D37ZyrHjl}Qm3y5|K+xL!9)iL@>KfR8-NXN>N(#iYwYBa3@fOSKpeAe!KellM2;=4S1_>%=+}8qCwG=xy+*5xrHR= z!up8tJ>zYVB0+0Sz)VsTV00}FqFyKRFs8;n<93%LHt3e2dkMu3-4B3&^`!aFN{4wR zokHJ$(G|2Jr;>ybudi3=yjBrk&{sWsQs@z4L!ROZ&ekI|FOLfDa|t%l=y|NJ&3W(Hqfc}WS^|QHlln;av>G*?+(Mje} z@eMr$Uu!WN^y1a5Mt2LxhLCf}Cc_%YXkg2V2PLPosw4k8VxNuRc`OKq{gN0->8b1( z_-J-w8m}P#6B{dr9bc?&6vR?;UQM=_w;O@lb<+N3%q@?%y?ow z_Kui!dD{2oPR$pE-KP#51tOUU|HP5t1HM7|01=i*$Y`qLuX~SL!i6jrJiL}*()!@m zFe6j(Ej*@HzOy0Lc7u<*I(*Sl=mr3LE?@qu+3`0lq5n(o{g(lrKO;A1OINr#ydn*f zgQ@b3(}P@aca-S}rWp6*pT?BCZ13J$aD#Na){_AtCfMX*@g(aM3~G(5SlwMD7^cSP z$Q?JWXnNFt2X!Ce)tWIh1-dc3L5xH+w2^wD$)4J_DLvN1Oc?-A)A|c=zvl8@6R%ZvkN;l@arDX9ZT!c4Aaor6F zFy1Kwxk^KXgdbGLU=F%$mO9@pmM(NVsk*ibU7;;G*_8x}MtXn+GuGmZJc@KdF$ZZ} zfjax2ZsQFX?1%ABKFb+Uxp`C zd79Bf97w{r_{2mCpOdoqz`Uu=psQ^P^lMV*e$4h&N)R~l&ydw^i7mibW?-D99l_sW z`3UH1-`Azwe%QtJko3uQn;I60RPpgm%ZRM^^|^Su^>}FKVpHnwM6@%KElB$XquOnL4`CHE)59IgLz}ztFxN~F z06!7J019L)CdNH`S2L2Ol~zx$jT6Wcq`uTJwVw%t<0Fpd&&sPA2ad#|cM=?^`xqhJ5V^ zoFM)XxyT)D-wRoW&?=v!7rSR(hZbpQ;cP4Je*BsD_No2*dJcTdO9|l}(n(o}eTj#a z-NBA34Kb9DOEgK{jL{lKi>f!&5ktp=VrL;^v3PGRU0mh|D+wG;ty>vy*hStnUj@(W zbe{#r62a6b)!}?%ULMPA_o*@Hd7W1@A@RIl*bU;AvdKDQqGKVA`@4(wN5^SfT zi7{5STvp`9Drxr1a?O%=18*3vbo$gh zk(V|o8F>E_Zv3y=3$Xt#!1`y=2F3IeM8wx7qE}01>5D7AbN2bIgxy7~$v5MKqwYaC zmROyXPnRd^53Ha6t|s!aTHYa4bIX^=5Yh~4|51lmrq~tTZIoN_zQ>#&b-m*{BY5x{ z^ZLu@6!tyiStkD37K-T5wodNmTzOr_@doADBr=qk(|<4i;^l$c{Zg@ZmF3m?Nv+`w zh4KgBJsl)=M!fDIiEj3(@_E0jUGrbOpI1$OVxjrAPIr=bK}l&vPV;gK>?Bx~Pp^Jr zkNE->wb^kM$EbFtMu|{7l>Agtop^<0G9cFfZKP%N&XP2_W zocY#r1NgZ%C`OVdwkIY(W=(t)Z^u*9duU*Dmd4Ij3C6u&L^-^1u7Iuu&E_<+*eCv? zula2|XJ!WacBK-d-WMq-jM=31c>ibi`!}nHILQcT3qK7uF( z{t4r0$~&mD9P-PE?5pv-F?e%JPGAMd_OOVpWWIK6tt{tn|dhb7O~pUM8U`H;L&iFL1X?1cc=eI6H;XDJ?3fXTN;2 zYt^eCs05w5?RO*2$hx3B{0py6;CX3hqjq-*txA^gGj*zed+O8j#p6z|czus;%e+Tr zI&U`l%0>2h9x2jTa;*Qc)uZ6TLe+x-ZEm_--55@uWB9V7z~3?ch9t0|S5Gt|V z%AD9=-UlXjXq(xZ$6&pGBp&>a{Y%WL@jiFZ?@h zzd1zg*)@Hpn;qu^qJrv;ey*$f{!QTTl>F1C=Noi8^LEU8T0dn`f11qkk4Ky1m&b2B z{zpXZ^|#`U+drhOd>9?QS13~CY+;_5bWh2hr^(5Ra?kb`0ndv9ZV20W{*QtI|L;m* zpZ)RGolE}#7XmNqH#(pCKst0Hhr*Wc{3pI;dMtEY81sF7o4jC+{m1wNx7_>p7(D&* zHc51r?i~UC!Ow}iDRN7WlY|1Ri`H zwdH!itB@}ykKXXgycN~CC^2W{%Ug@qo`H3_VZ8-f(EN0t*&#Q$(Dkh^=ASh~Hd~-+ z$;wy28OYlw803=rs;?f3Ww|)pRU~W)c-;b?C4!X7%agPM58d?x$=BpKaa31?vAvM9 z^PDBy>T7>4>a1`SZC8@GvGQ%STe#xFDKwrZC;sfxfea>Gc5AIY!xVbHFl@!L88WXm zowx3~oE`P*cE!E9uBif!2iH#C$qQW78%(Qmk8wbT8gYdMIpS6yBe$0U4@S9U_;sz8 z=JEu~UD{5su1iibJYE?2byK+_u*t6pIF=#uJx)m^d|B1AMy;=?YkOhNMYHg!ra@bMx~Uz8bY2HUqZ9}WcPB;( z)0xHD{qqcege?`hyg}x!=yKb6MIZl#&T!-7&6!KxX&8I@F7KgP*iD#VH79`SV(5}x zeReZKEI%Dt**a_E!Yy|(|RPP%mBxysiSudcA3iLJgV-TENZ=xAT` zWKY*1ryOALQ*Eq@_zSvVkv^#CCBRJ;M?)vQGkH*yxrB9B@3TI`X%=f%>Z{a=KNSs` zbX7BB=eJ!>pE?AliBxnv)F)YUc0V|II##-bTbG?=>JADV5#B|7ZEA!&QLkJQY{ zjNxAMs#&MN_SKy2EB2_XZI*MN@bp~f)J2UpM=trR?63Iv^47vdU7MU}5PHb{o1xZ3 zTsW!XvAp54mWC-4tgc$F7qy7<4V?A#iA~L-)nOCci()!cW_i|qT(JVa3W)m68}zI> zbQ+3FR5VV$j0_h~?Tq+UbvbZ{S;V}zA)H_feK>GL!vdfw*241)k53e{b#shniO{7#!O&`B4l9J#@_@0{qtTM From 8a5b70f54dbff1dc4702454aaf1a222156a99ed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Thu, 24 Aug 2023 09:53:17 +0800 Subject: [PATCH 28/63] Support AMP of DINO (#10827) --- mmdet/models/dense_heads/detr_head.py | 4 ++-- mmdet/models/losses/iou_loss.py | 22 +++++++++++++++++++ .../task_modules/assigners/match_cost.py | 15 +++++++++++-- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/mmdet/models/dense_heads/detr_head.py b/mmdet/models/dense_heads/detr_head.py index 61545ce364d..9daeb474005 100644 --- a/mmdet/models/dense_heads/detr_head.py +++ b/mmdet/models/dense_heads/detr_head.py @@ -445,8 +445,8 @@ def _get_targets_single(self, cls_score: Tensor, bbox_pred: Tensor, label_weights = gt_bboxes.new_ones(num_bboxes) # bbox targets - bbox_targets = torch.zeros_like(bbox_pred) - bbox_weights = torch.zeros_like(bbox_pred) + bbox_targets = torch.zeros_like(bbox_pred, dtype=gt_bboxes.dtype) + bbox_weights = torch.zeros_like(bbox_pred, dtype=gt_bboxes.dtype) bbox_weights[pos_inds] = 1.0 # DETR regress the relative position of boxes (cxcywh) in the image. diff --git a/mmdet/models/losses/iou_loss.py b/mmdet/models/losses/iou_loss.py index 1376e6ccd24..c8a2b977868 100644 --- a/mmdet/models/losses/iou_loss.py +++ b/mmdet/models/losses/iou_loss.py @@ -42,7 +42,18 @@ def iou_loss(pred: Tensor, warnings.warn('DeprecationWarning: Setting "linear=True" in ' 'iou_loss is deprecated, please use "mode=`linear`" ' 'instead.') + # avoid fp16 overflow + if pred.dtype == torch.float16: + fp16 = True + pred = pred.to(torch.float32) + else: + fp16 = False + ious = bbox_overlaps(pred, target, is_aligned=True).clamp(min=eps) + + if fp16: + ious = ious.to(torch.float16) + if mode == 'linear': loss = 1 - ious elif mode == 'square': @@ -121,7 +132,18 @@ def giou_loss(pred: Tensor, target: Tensor, eps: float = 1e-7) -> Tensor: Return: Tensor: Loss tensor. """ + # avoid fp16 overflow + if pred.dtype == torch.float16: + fp16 = True + pred = pred.to(torch.float32) + else: + fp16 = False + gious = bbox_overlaps(pred, target, mode='giou', is_aligned=True, eps=eps) + + if fp16: + gious = gious.to(torch.float16) + loss = 1 - gious return loss diff --git a/mmdet/models/task_modules/assigners/match_cost.py b/mmdet/models/task_modules/assigners/match_cost.py index 95fe89fa932..e8e0293b94e 100644 --- a/mmdet/models/task_modules/assigners/match_cost.py +++ b/mmdet/models/task_modules/assigners/match_cost.py @@ -164,8 +164,19 @@ def __call__(self, pred_bboxes = pred_instances.bboxes gt_bboxes = gt_instances.bboxes + # avoid fp16 overflow + if pred_bboxes.dtype == torch.float16: + fp16 = True + pred_bboxes = pred_bboxes.to(torch.float32) + else: + fp16 = False + overlaps = bbox_overlaps( pred_bboxes, gt_bboxes, mode=self.iou_mode, is_aligned=False) + + if fp16: + overlaps = overlaps.to(torch.float16) + # The 1 is a constant that doesn't change the matching, so omitted. iou_cost = -overlaps return iou_cost * self.weight @@ -362,10 +373,10 @@ def _binary_mask_dice_loss(self, mask_preds: Tensor, numerator = 2 * torch.einsum('nc,mc->nm', mask_preds, gt_masks) if self.naive_dice: denominator = mask_preds.sum(-1)[:, None] + \ - gt_masks.sum(-1)[None, :] + gt_masks.sum(-1)[None, :] else: denominator = mask_preds.pow(2).sum(1)[:, None] + \ - gt_masks.pow(2).sum(1)[None, :] + gt_masks.pow(2).sum(1)[None, :] loss = 1 - (numerator + self.eps) / (denominator + self.eps) return loss From 6f5971e01dc07fa1970759cafbb5dc5b6b9174a6 Mon Sep 17 00:00:00 2001 From: Range King Date: Mon, 28 Aug 2023 10:38:22 +0800 Subject: [PATCH 29/63] [CodeCamp2023-xxx] Add new configs of RTMDet (#10840) --- demo/inference_demo.ipynb | 2 +- mmdet/apis/det_inferencer.py | 12 +- .../rtmdet/rtmdet_ins_l_8xb32_300e_coco.py | 134 ++++++++++++++++++ .../rtmdet/rtmdet_ins_m_8xb32_300e_coco.py | 17 +++ .../rtmdet/rtmdet_ins_s_8xb32_300e_coco.py | 101 +++++++++++++ .../rtmdet/rtmdet_ins_tiny_8xb32_300e_coco.py | 67 +++++++++ .../rtmdet/rtmdet_ins_x_8xb16_300e_coco.py | 38 +++++ .../rtmdet/rtmdet_m_8xb32_300e_coco.py | 17 +++ .../rtmdet/rtmdet_tiny_8xb32_300e_coco.py | 64 +++++++++ .../rtmdet/rtmdet_x_8xb32_300e_coco.py | 17 +++ 10 files changed, 463 insertions(+), 6 deletions(-) create mode 100644 mmdet/configs/rtmdet/rtmdet_ins_l_8xb32_300e_coco.py create mode 100644 mmdet/configs/rtmdet/rtmdet_ins_m_8xb32_300e_coco.py create mode 100644 mmdet/configs/rtmdet/rtmdet_ins_s_8xb32_300e_coco.py create mode 100644 mmdet/configs/rtmdet/rtmdet_ins_tiny_8xb32_300e_coco.py create mode 100644 mmdet/configs/rtmdet/rtmdet_ins_x_8xb16_300e_coco.py create mode 100644 mmdet/configs/rtmdet/rtmdet_m_8xb32_300e_coco.py create mode 100644 mmdet/configs/rtmdet/rtmdet_tiny_8xb32_300e_coco.py create mode 100644 mmdet/configs/rtmdet/rtmdet_x_8xb32_300e_coco.py diff --git a/demo/inference_demo.ipynb b/demo/inference_demo.ipynb index 41cd6918a67..36df6f8433f 100644 --- a/demo/inference_demo.ipynb +++ b/demo/inference_demo.ipynb @@ -26,7 +26,7 @@ " \n", "

     
    \n", "\n", - "
    \"Open\n", + "\"Open\n", "\n", "[![PyPI](https://img.shields.io/pypi/v/mmdet)](https://pypi.org/project/mmdet)\n", "[![docs](https://img.shields.io/badge/docs-latest-blue)](https://mmdetection.readthedocs.io/en/latest/)\n", diff --git a/mmdet/apis/det_inferencer.py b/mmdet/apis/det_inferencer.py index 5c3e6b50ac0..9efbb00cbe9 100644 --- a/mmdet/apis/det_inferencer.py +++ b/mmdet/apis/det_inferencer.py @@ -2,12 +2,13 @@ import copy import os.path as osp import warnings -from typing import Dict, Iterable, List, Optional, Sequence, Union +from typing import Dict, Iterable, List, Optional, Sequence, Tuple, Union import mmcv import mmengine import numpy as np import torch.nn as nn +from mmcv.transforms import LoadImageFromFile from mmengine.dataset import Compose from mmengine.fileio import (get_file_backend, isdir, join_path, list_dir_or_file) @@ -165,21 +166,22 @@ def _init_pipeline(self, cfg: ConfigType) -> Compose: meta_key for meta_key in pipeline_cfg[-1]['meta_keys'] if meta_key != 'img_id') - load_img_idx = self._get_transform_idx(pipeline_cfg, - 'LoadImageFromFile') + load_img_idx = self._get_transform_idx( + pipeline_cfg, ('LoadImageFromFile', LoadImageFromFile)) if load_img_idx == -1: raise ValueError( 'LoadImageFromFile is not found in the test pipeline') pipeline_cfg[load_img_idx]['type'] = 'mmdet.InferencerLoader' return Compose(pipeline_cfg) - def _get_transform_idx(self, pipeline_cfg: ConfigType, name: str) -> int: + def _get_transform_idx(self, pipeline_cfg: ConfigType, + name: Union[str, Tuple[str, type]]) -> int: """Returns the index of the transform in a pipeline. If the transform is not found, returns -1. """ for i, transform in enumerate(pipeline_cfg): - if transform['type'] == name: + if transform['type'] in name: return i return -1 diff --git a/mmdet/configs/rtmdet/rtmdet_ins_l_8xb32_300e_coco.py b/mmdet/configs/rtmdet/rtmdet_ins_l_8xb32_300e_coco.py new file mode 100644 index 00000000000..302d7cda110 --- /dev/null +++ b/mmdet/configs/rtmdet/rtmdet_ins_l_8xb32_300e_coco.py @@ -0,0 +1,134 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .rtmdet_l_8xb32_300e_coco import * + +from mmcv.transforms.loading import LoadImageFromFile +from mmcv.transforms.processing import RandomResize +from mmengine.hooks.ema_hook import EMAHook +from torch.nn.modules.activation import SiLU + +from mmdet.datasets.transforms.formatting import PackDetInputs +from mmdet.datasets.transforms.loading import (FilterAnnotations, + LoadAnnotations) +from mmdet.datasets.transforms.transforms import (CachedMixUp, CachedMosaic, + Pad, RandomCrop, RandomFlip, + Resize, YOLOXHSVRandomAug) +from mmdet.engine.hooks.pipeline_switch_hook import PipelineSwitchHook +from mmdet.models.dense_heads.rtmdet_ins_head import RTMDetInsSepBNHead +from mmdet.models.layers.ema import ExpMomentumEMA +from mmdet.models.losses.dice_loss import DiceLoss +from mmdet.models.losses.gfocal_loss import QualityFocalLoss +from mmdet.models.losses.iou_loss import GIoULoss +from mmdet.models.task_modules.coders.distance_point_bbox_coder import \ + DistancePointBBoxCoder +from mmdet.models.task_modules.prior_generators.point_generator import \ + MlvlPointGenerator + +model.merge( + dict( + bbox_head=dict( + _delete_=True, + type=RTMDetInsSepBNHead, + num_classes=80, + in_channels=256, + stacked_convs=2, + share_conv=True, + pred_kernel_size=1, + feat_channels=256, + act_cfg=dict(type=SiLU, inplace=True), + norm_cfg=dict(type='SyncBN', requires_grad=True), + anchor_generator=dict( + type=MlvlPointGenerator, offset=0, strides=[8, 16, 32]), + bbox_coder=dict(type=DistancePointBBoxCoder), + loss_cls=dict( + type=QualityFocalLoss, + use_sigmoid=True, + beta=2.0, + loss_weight=1.0), + loss_bbox=dict(type=GIoULoss, loss_weight=2.0), + loss_mask=dict( + type=DiceLoss, loss_weight=2.0, eps=5e-6, reduction='mean')), + test_cfg=dict( + nms_pre=1000, + min_bbox_size=0, + score_thr=0.05, + nms=dict(type='nms', iou_threshold=0.6), + max_per_img=100, + mask_thr_binary=0.5), + )) + +train_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict( + type=LoadAnnotations, with_bbox=True, with_mask=True, poly2mask=False), + dict(type=CachedMosaic, img_scale=(640, 640), pad_val=114.0), + dict( + type=RandomResize, + scale=(1280, 1280), + ratio_range=(0.1, 2.0), + resize_type=Resize, + keep_ratio=True), + dict( + type=RandomCrop, + crop_size=(640, 640), + recompute_bbox=True, + allow_negative_crop=True), + dict(type=YOLOXHSVRandomAug), + dict(type=RandomFlip, prob=0.5), + dict(type=Pad, size=(640, 640), pad_val=dict(img=(114, 114, 114))), + dict( + type=CachedMixUp, + img_scale=(640, 640), + ratio_range=(1.0, 1.0), + max_cached_images=20, + pad_val=(114, 114, 114)), + dict(type=FilterAnnotations, min_gt_bbox_wh=(1, 1)), + dict(type=PackDetInputs) +] + +train_dataloader.update( + dict(pin_memory=True, dataset=dict(pipeline=train_pipeline))) + +train_pipeline_stage2 = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict( + type=LoadAnnotations, with_bbox=True, with_mask=True, poly2mask=False), + dict( + type=RandomResize, + scale=(640, 640), + ratio_range=(0.1, 2.0), + resize_type=Resize, + keep_ratio=True), + dict( + type=RandomCrop, + crop_size=(640, 640), + recompute_bbox=True, + allow_negative_crop=True), + dict(type=FilterAnnotations, min_gt_bbox_wh=(1, 1)), + dict(type=YOLOXHSVRandomAug), + dict(type=RandomFlip, prob=0.5), + dict(type=Pad, size=(640, 640), pad_val=dict(img=(114, 114, 114))), + dict(type=PackDetInputs) +] +custom_hooks = [ + dict( + type=EMAHook, + ema_type=ExpMomentumEMA, + momentum=0.0002, + update_buffers=True, + priority=49), + dict( + type=PipelineSwitchHook, + switch_epoch=280, + switch_pipeline=train_pipeline_stage2) +] + +val_evaluator.update(dict(metric=['bbox', 'segm'])) +test_evaluator = val_evaluator diff --git a/mmdet/configs/rtmdet/rtmdet_ins_m_8xb32_300e_coco.py b/mmdet/configs/rtmdet/rtmdet_ins_m_8xb32_300e_coco.py new file mode 100644 index 00000000000..d90be9293a1 --- /dev/null +++ b/mmdet/configs/rtmdet/rtmdet_ins_m_8xb32_300e_coco.py @@ -0,0 +1,17 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .rtmdet_ins_l_8xb32_300e_coco import * + +model.update( + dict( + backbone=dict(deepen_factor=0.67, widen_factor=0.75), + neck=dict( + in_channels=[192, 384, 768], out_channels=192, num_csp_blocks=2), + bbox_head=dict(in_channels=192, feat_channels=192))) diff --git a/mmdet/configs/rtmdet/rtmdet_ins_s_8xb32_300e_coco.py b/mmdet/configs/rtmdet/rtmdet_ins_s_8xb32_300e_coco.py new file mode 100644 index 00000000000..58b5b1aff0c --- /dev/null +++ b/mmdet/configs/rtmdet/rtmdet_ins_s_8xb32_300e_coco.py @@ -0,0 +1,101 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .rtmdet_ins_l_8xb32_300e_coco import * + +from mmcv.transforms.loading import LoadImageFromFile +from mmcv.transforms.processing import RandomResize +from mmengine.hooks.ema_hook import EMAHook + +from mmdet.datasets.transforms.formatting import PackDetInputs +from mmdet.datasets.transforms.loading import (FilterAnnotations, + LoadAnnotations) +from mmdet.datasets.transforms.transforms import (CachedMixUp, CachedMosaic, + Pad, RandomCrop, RandomFlip, + Resize, YOLOXHSVRandomAug) +from mmdet.engine.hooks.pipeline_switch_hook import PipelineSwitchHook +from mmdet.models.layers.ema import ExpMomentumEMA + +checkpoint = 'https://download.openmmlab.com/mmdetection/v3.0/rtmdet/cspnext_rsb_pretrain/cspnext-s_imagenet_600e.pth' # noqa +model.update( + dict( + backbone=dict( + deepen_factor=0.33, + widen_factor=0.5, + init_cfg=dict( + type='Pretrained', prefix='backbone.', checkpoint=checkpoint)), + neck=dict( + in_channels=[128, 256, 512], out_channels=128, num_csp_blocks=1), + bbox_head=dict(in_channels=128, feat_channels=128))) + +train_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict( + type=LoadAnnotations, with_bbox=True, with_mask=True, poly2mask=False), + dict(type=CachedMosaic, img_scale=(640, 640), pad_val=114.0), + dict( + type=RandomResize, + scale=(1280, 1280), + ratio_range=(0.5, 2.0), + resize_type=Resize, + keep_ratio=True), + dict( + type=RandomCrop, + crop_size=(640, 640), + recompute_bbox=True, + allow_negative_crop=True), + dict(type=YOLOXHSVRandomAug), + dict(type=RandomFlip, prob=0.5), + dict(type=Pad, size=(640, 640), pad_val=dict(img=(114, 114, 114))), + dict( + type=CachedMixUp, + img_scale=(640, 640), + ratio_range=(1.0, 1.0), + max_cached_images=20, + pad_val=(114, 114, 114)), + dict(type=FilterAnnotations, min_gt_bbox_wh=(1, 1)), + dict(type=PackDetInputs) +] + +train_pipeline_stage2 = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict( + type=LoadAnnotations, with_bbox=True, with_mask=True, poly2mask=False), + dict( + type=RandomResize, + scale=(640, 640), + ratio_range=(0.5, 2.0), + resize_type=Resize, + keep_ratio=True), + dict( + type=RandomCrop, + crop_size=(640, 640), + recompute_bbox=True, + allow_negative_crop=True), + dict(type=FilterAnnotations, min_gt_bbox_wh=(1, 1)), + dict(type=YOLOXHSVRandomAug), + dict(type=RandomFlip, prob=0.5), + dict(type=Pad, size=(640, 640), pad_val=dict(img=(114, 114, 114))), + dict(type=PackDetInputs) +] + +train_dataloader.update(dict(dataset=dict(pipeline=train_pipeline))) + +custom_hooks = [ + dict( + type=EMAHook, + ema_type=ExpMomentumEMA, + momentum=0.0002, + update_buffers=True, + priority=49), + dict( + type=PipelineSwitchHook, + switch_epoch=280, + switch_pipeline=train_pipeline_stage2) +] diff --git a/mmdet/configs/rtmdet/rtmdet_ins_tiny_8xb32_300e_coco.py b/mmdet/configs/rtmdet/rtmdet_ins_tiny_8xb32_300e_coco.py new file mode 100644 index 00000000000..0356b1951da --- /dev/null +++ b/mmdet/configs/rtmdet/rtmdet_ins_tiny_8xb32_300e_coco.py @@ -0,0 +1,67 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .rtmdet_ins_s_8xb32_300e_coco import * + +from mmcv.transforms.loading import LoadImageFromFile +from mmcv.transforms.processing import RandomResize + +from mmdet.datasets.transforms.formatting import PackDetInputs +from mmdet.datasets.transforms.loading import (FilterAnnotations, + LoadAnnotations) +from mmdet.datasets.transforms.transforms import (CachedMixUp, CachedMosaic, + Pad, RandomCrop, RandomFlip, + Resize, YOLOXHSVRandomAug) + +checkpoint = 'https://download.openmmlab.com/mmdetection/v3.0/rtmdet/cspnext_rsb_pretrain/cspnext-tiny_imagenet_600e.pth' # noqa + +model.update( + dict( + backbone=dict( + deepen_factor=0.167, + widen_factor=0.375, + init_cfg=dict( + type='Pretrained', prefix='backbone.', checkpoint=checkpoint)), + neck=dict( + in_channels=[96, 192, 384], out_channels=96, num_csp_blocks=1), + bbox_head=dict(in_channels=96, feat_channels=96))) + +train_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict( + type=LoadAnnotations, with_bbox=True, with_mask=True, poly2mask=False), + dict( + type=CachedMosaic, + img_scale=(640, 640), + pad_val=114.0, + max_cached_images=20, + random_pop=False), + dict( + type=RandomResize, + scale=(1280, 1280), + ratio_range=(0.5, 2.0), + resize_type=Resize, + keep_ratio=True), + dict(type=RandomCrop, crop_size=(640, 640)), + dict(type=YOLOXHSVRandomAug), + dict(type=RandomFlip, prob=0.5), + dict(type=Pad, size=(640, 640), pad_val=dict(img=(114, 114, 114))), + dict( + type=CachedMixUp, + img_scale=(640, 640), + ratio_range=(1.0, 1.0), + max_cached_images=10, + random_pop=False, + pad_val=(114, 114, 114), + prob=0.5), + dict(type=FilterAnnotations, min_gt_bbox_wh=(1, 1)), + dict(type=PackDetInputs) +] + +train_dataloader.update(dict(dataset=dict(pipeline=train_pipeline))) diff --git a/mmdet/configs/rtmdet/rtmdet_ins_x_8xb16_300e_coco.py b/mmdet/configs/rtmdet/rtmdet_ins_x_8xb16_300e_coco.py new file mode 100644 index 00000000000..555b10102f6 --- /dev/null +++ b/mmdet/configs/rtmdet/rtmdet_ins_x_8xb16_300e_coco.py @@ -0,0 +1,38 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .rtmdet_ins_l_8xb32_300e_coco import * +from mmengine.optim.scheduler.lr_scheduler import CosineAnnealingLR, LinearLR + +model.update( + dict( + backbone=dict(deepen_factor=1.33, widen_factor=1.25), + neck=dict( + in_channels=[320, 640, 1280], out_channels=320, num_csp_blocks=4), + bbox_head=dict(in_channels=320, feat_channels=320))) + +base_lr = 0.002 + +# optimizer +optim_wrapper.update(dict(optimizer=dict(lr=base_lr))) + +# learning rate +param_scheduler = [ + dict( + type=LinearLR, start_factor=1.0e-5, by_epoch=False, begin=0, end=1000), + dict( + # use cosine lr from 150 to 300 epoch + type=CosineAnnealingLR, + eta_min=base_lr * 0.05, + begin=max_epochs // 2, + end=max_epochs, + T_max=max_epochs // 2, + by_epoch=True, + convert_to_iter_based=True), +] diff --git a/mmdet/configs/rtmdet/rtmdet_m_8xb32_300e_coco.py b/mmdet/configs/rtmdet/rtmdet_m_8xb32_300e_coco.py new file mode 100644 index 00000000000..e741d8220fe --- /dev/null +++ b/mmdet/configs/rtmdet/rtmdet_m_8xb32_300e_coco.py @@ -0,0 +1,17 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .rtmdet_l_8xb32_300e_coco import * + +model.update( + dict( + backbone=dict(deepen_factor=0.67, widen_factor=0.75), + neck=dict( + in_channels=[192, 384, 768], out_channels=192, num_csp_blocks=2), + bbox_head=dict(in_channels=192, feat_channels=192))) diff --git a/mmdet/configs/rtmdet/rtmdet_tiny_8xb32_300e_coco.py b/mmdet/configs/rtmdet/rtmdet_tiny_8xb32_300e_coco.py new file mode 100644 index 00000000000..949d056f163 --- /dev/null +++ b/mmdet/configs/rtmdet/rtmdet_tiny_8xb32_300e_coco.py @@ -0,0 +1,64 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .rtmdet_s_8xb32_300e_coco import * + +from mmcv.transforms.loading import LoadImageFromFile +from mmcv.transforms.processing import RandomResize + +from mmdet.datasets.transforms.formatting import PackDetInputs +from mmdet.datasets.transforms.loading import LoadAnnotations +from mmdet.datasets.transforms.transforms import (CachedMixUp, CachedMosaic, + Pad, RandomCrop, RandomFlip, + Resize, YOLOXHSVRandomAug) + +checkpoint = 'https://download.openmmlab.com/mmdetection/v3.0/rtmdet/cspnext_rsb_pretrain/cspnext-tiny_imagenet_600e.pth' # noqa + +model.update( + dict( + backbone=dict( + deepen_factor=0.167, + widen_factor=0.375, + init_cfg=dict( + type='Pretrained', prefix='backbone.', checkpoint=checkpoint)), + neck=dict( + in_channels=[96, 192, 384], out_channels=96, num_csp_blocks=1), + bbox_head=dict(in_channels=96, feat_channels=96, exp_on_reg=False))) + +train_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=LoadAnnotations, with_bbox=True), + dict( + type=CachedMosaic, + img_scale=(640, 640), + pad_val=114.0, + max_cached_images=20, + random_pop=False), + dict( + type=RandomResize, + scale=(1280, 1280), + ratio_range=(0.5, 2.0), + resize_type=Resize, + keep_ratio=True), + dict(type=RandomCrop, crop_size=(640, 640)), + dict(type=YOLOXHSVRandomAug), + dict(type=RandomFlip, prob=0.5), + dict(type=Pad, size=(640, 640), pad_val=dict(img=(114, 114, 114))), + dict( + type=CachedMixUp, + img_scale=(640, 640), + ratio_range=(1.0, 1.0), + max_cached_images=10, + random_pop=False, + pad_val=(114, 114, 114), + prob=0.5), + dict(type=PackDetInputs) +] + +train_dataloader.update(dict(dataset=dict(pipeline=train_pipeline))) diff --git a/mmdet/configs/rtmdet/rtmdet_x_8xb32_300e_coco.py b/mmdet/configs/rtmdet/rtmdet_x_8xb32_300e_coco.py new file mode 100644 index 00000000000..04d67d0ca8f --- /dev/null +++ b/mmdet/configs/rtmdet/rtmdet_x_8xb32_300e_coco.py @@ -0,0 +1,17 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .rtmdet_l_8xb32_300e_coco import * + +model.update( + dict( + backbone=dict(deepen_factor=1.33, widen_factor=1.25), + neck=dict( + in_channels=[320, 640, 1280], out_channels=320, num_csp_blocks=4), + bbox_head=dict(in_channels=320, feat_channels=320))) From 6f9e223763a17b8ae2ab75f478906851c120aac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Mon, 28 Aug 2023 15:24:08 +0800 Subject: [PATCH 30/63] Add FrozenBN (#10845) --- mmdet/models/layers/__init__.py | 5 +- mmdet/models/layers/brick_wrappers.py | 87 +++++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 2 deletions(-) diff --git a/mmdet/models/layers/__init__.py b/mmdet/models/layers/__init__.py index 6ddaaff2b52..e3c41f64d11 100644 --- a/mmdet/models/layers/__init__.py +++ b/mmdet/models/layers/__init__.py @@ -1,7 +1,8 @@ # Copyright (c) OpenMMLab. All rights reserved. from .activations import SiLU from .bbox_nms import fast_nms, multiclass_nms -from .brick_wrappers import AdaptiveAvgPool2d, adaptive_avg_pool2d +from .brick_wrappers import (AdaptiveAvgPool2d, FrozenBatchNorm2d, + adaptive_avg_pool2d) from .conv_upsample import ConvUpsample from .csp_layer import CSPLayer from .dropblock import DropBlock @@ -60,5 +61,5 @@ 'ConditionalDetrTransformerDecoderLayer', 'DinoTransformerDecoder', 'CdnQueryGenerator', 'Mask2FormerTransformerEncoder', 'Mask2FormerTransformerDecoderLayer', 'Mask2FormerTransformerDecoder', - 'SinePositionalEncoding3D' + 'SinePositionalEncoding3D', 'FrozenBatchNorm2d' ] diff --git a/mmdet/models/layers/brick_wrappers.py b/mmdet/models/layers/brick_wrappers.py index fa0279ab60d..5ecb8499de3 100644 --- a/mmdet/models/layers/brick_wrappers.py +++ b/mmdet/models/layers/brick_wrappers.py @@ -4,6 +4,8 @@ import torch.nn.functional as F from mmcv.cnn.bricks.wrappers import NewEmptyTensorOp, obsolete_torch_version +from mmdet.registry import MODELS + if torch.__version__ == 'parrots': TORCH_VERSION = torch.__version__ else: @@ -49,3 +51,88 @@ def forward(self, x): return empty return super().forward(x) + + +# Modified from +# https://github.com/facebookresearch/detectron2/blob/main/detectron2/layers/batch_norm.py#L13 # noqa +@MODELS.register_module('FrozenBN') +class FrozenBatchNorm2d(nn.Module): + """BatchNorm2d where the batch statistics and the affine parameters are + fixed. + + It contains non-trainable buffers called + "weight" and "bias", "running_mean", "running_var", + initialized to perform identity transformation. + Args: + num_features (int): :math:`C` from an expected input of size + :math:`(N, C, H, W)`. + eps (float): a value added to the denominator for numerical stability. + Default: 1e-5 + """ + + def __init__(self, num_features, eps=1e-5, **kwargs): + super().__init__() + self.num_features = num_features + self.eps = eps + self.register_buffer('weight', torch.ones(num_features)) + self.register_buffer('bias', torch.zeros(num_features)) + self.register_buffer('running_mean', torch.zeros(num_features)) + self.register_buffer('running_var', torch.ones(num_features) - eps) + + def forward(self, x): + if x.requires_grad: + # When gradients are needed, F.batch_norm will use extra memory + # because its backward op computes gradients for weight/bias + # as well. + scale = self.weight * (self.running_var + self.eps).rsqrt() + bias = self.bias - self.running_mean * scale + scale = scale.reshape(1, -1, 1, 1) + bias = bias.reshape(1, -1, 1, 1) + out_dtype = x.dtype # may be half + return x * scale.to(out_dtype) + bias.to(out_dtype) + else: + # When gradients are not needed, F.batch_norm is a single fused op + # and provide more optimization opportunities. + return F.batch_norm( + x, + self.running_mean, + self.running_var, + self.weight, + self.bias, + training=False, + eps=self.eps, + ) + + def __repr__(self): + return 'FrozenBatchNorm2d(num_features={}, eps={})'.format( + self.num_features, self.eps) + + @classmethod + def convert_frozen_batchnorm(cls, module): + """Convert all BatchNorm/SyncBatchNorm in module into FrozenBatchNorm. + + Args: + module (torch.nn.Module): + Returns: + If module is BatchNorm/SyncBatchNorm, returns a new module. + Otherwise, in-place convert module and return it. + Similar to convert_sync_batchnorm in + https://github.com/pytorch/pytorch/blob/master/torch/nn/modules/batchnorm.py + """ + bn_module = nn.modules.batchnorm + bn_module = (bn_module.BatchNorm2d, bn_module.SyncBatchNorm) + res = module + if isinstance(module, bn_module): + res = cls(module.num_features) + if module.affine: + res.weight.data = module.weight.data.clone().detach() + res.bias.data = module.bias.data.clone().detach() + res.running_mean.data = module.running_mean.data + res.running_var.data = module.running_var.data + res.eps = module.eps + else: + for name, child in module.named_children(): + new_child = cls.convert_frozen_batchnorm(child) + if new_child is not child: + res.add_module(name, new_child) + return res From 2900de7e3ab0b762ea71daa5c1bd56bd9c5e2bd8 Mon Sep 17 00:00:00 2001 From: JohnHoward <89397553+timerring@users.noreply.github.com> Date: Tue, 29 Aug 2023 13:58:45 +0800 Subject: [PATCH 31/63] [CodeCamp2023-497] Translation into Chinese of an English document. (#10848) --- .../user_guides/tracking_analysis_tools.md | 87 +++++++ .../user_guides/tracking_dataset_prepare.md | 245 ++++++++++++++++++ 2 files changed, 332 insertions(+) create mode 100644 docs/zh_cn/user_guides/tracking_analysis_tools.md create mode 100644 docs/zh_cn/user_guides/tracking_dataset_prepare.md diff --git a/docs/zh_cn/user_guides/tracking_analysis_tools.md b/docs/zh_cn/user_guides/tracking_analysis_tools.md new file mode 100644 index 00000000000..5330af1d1fa --- /dev/null +++ b/docs/zh_cn/user_guides/tracking_analysis_tools.md @@ -0,0 +1,87 @@ +**我们在 `tools/` 目录下提供了很多有用的工具。** + +## MOT 测试时参数搜索 + +`tools/analysis_tools/mot/mot_param_search.py` 可以搜索 MOT 模型中 `tracker` 的参数。 +它与 `tools/test.py` 的使用方式相同,但配置上**有所不同**。 + +下面是修改配置的示例: + +1. 定义要记录的期望评估指标。 + + 例如,你可以将 `evaluator` 定义为: + + ```python + test_evaluator=dict(type='MOTChallengeMetrics', metric=['HOTA', 'CLEAR', 'Identity']) + ``` + + 当然,你也可以自定义 `test_evaluator` 中 `metric` 的内容。你可以自由选择 `['HOTA', 'CLEAR', 'Identity']` 中的一个或多个指标。 + +2. 定义要搜索的参数及其取值。 + + 假设你有一个 `tracker` 的配置如下: + + ```python + model=dict( + tracker=dict( + type='BaseTracker', + obj_score_thr=0.5, + match_iou_thr=0.5 + ) + ) + ``` + + 如果你想要搜索 `tracker` 的参数,只需将其值改为一个列表,如下所示: + + ```python + model=dict( + tracker=dict( + type='BaseTracker', + obj_score_thr=[0.4, 0.5, 0.6], + match_iou_thr=[0.4, 0.5, 0.6, 0.7] + ) + ) + ``` + + 然后,脚本将测试一共12种情况并且记录结果。 + +## MOT 误差可视化 + +`tools/analysis_tools/mot/mot_error_visualize.py` 可以为多目标跟踪可视化错误。 + +该脚本需要推断的结果作为输入。默认情况下,**红色**边界框表示误检(false positive),**黄色**边界框表示漏检(false negative),**蓝色**边界框表示ID切换(ID switch)。 + +``` +python tools/analysis_tools/mot/mot_error_visualize.py \ + ${CONFIG_FILE}\ + --input ${INPUT} \ + --result-dir ${RESULT_DIR} \ + [--output-dir ${OUTPUT}] \ + [--fps ${FPS}] \ + [--show] \ + [--backend ${BACKEND}] +``` + +`RESULT_DIR` 中包含了所有视频的推断结果,推断结果是一个 `txt` 文件。 + +可选参数: + +- `OUTPUT`:可视化演示的输出。如果未指定,`--show` 是必选的,用于即时显示视频。 +- `FPS`:输出视频的帧率。 +- `--show`:是否即时显示视频。 +- `BACKEND`:用于可视化边界框的后端。选项包括 `cv2` 和 `plt`。 + +## 浏览数据集 + +`tools/analysis_tools/mot/browse_dataset.py` 可以可视化训练数据集,以检查数据集配置是否正确。 + +**示例:** + +```shell +python tools/analysis_tools/browse_dataset.py ${CONFIG_FILE} [--show-interval ${SHOW_INTERVAL}] +``` + +可选参数: + +- `SHOW_INTERVAL`: 显示的间隔时间(秒)。 +- `--show`: 是否即时显示图像。 diff --git a/docs/zh_cn/user_guides/tracking_dataset_prepare.md b/docs/zh_cn/user_guides/tracking_dataset_prepare.md new file mode 100644 index 00000000000..c99f1885e05 --- /dev/null +++ b/docs/zh_cn/user_guides/tracking_dataset_prepare.md @@ -0,0 +1,245 @@ +## 数据集准备 + +本页面提供了现有基准数据集的准备说明,包括: + +- 多目标跟踪 + + - [MOT Challenge](https://motchallenge.net/) + - [CrowdHuman](https://www.crowdhuman.org/) + +- 视频实例分割 + + - [YouTube-VIS](https://youtube-vos.org/dataset/vis/) + +### 1. 下载数据集 + +请从官方网站下载数据集,并将数据集的根目录建立软链接到 `$MMDETECTION/data` 目录下。 + +#### 1.1 多目标跟踪 + +- 对于多目标跟踪任务的训练和测试,需要下载MOT Challenge数据集之一(例如MOT17、MOT20),CrowdHuman数据集可以作为补充数据集。 + +- 对于中国的用户,可以从 [OpenDataLab](https://opendatalab.com/) 上高速下载如下数据集: + + - [MOT17](https://opendatalab.com/MOT17/download) + - [MOT20](https://opendatalab.com/MOT20/download) + - [CrowdHuman](https://opendatalab.com/CrowdHuman/download) + +#### 1.2 视频实例分割 + +- 对于视频实例分割任务的训练和测试,只需要选择一个YouTube-VIS数据集(例如YouTube-VIS 2019、YouTube-VIS 2021)即可。 +- 可以从 [YouTubeVOS](https://codalab.lisn.upsaclay.fr/competitions/6064) 上下载YouTube-VIS 2019数据集。 +- 可以从 [YouTubeVOS](https://codalab.lisn.upsaclay.fr/competitions/7680) 上下载YouTube-VIS 2021数据集。 + +#### 1.3 数据结构 + +如果您的文件夹结构与以下结构不同,则可能需要在配置文件中更改相应的路径。 + +``` +mmdetection +├── mmdet +├── tools +├── configs +├── data +│ ├── coco +│ │ ├── train2017 +│ │ ├── val2017 +│ │ ├── test2017 +│ │ ├── annotations +│ │ +| ├── MOT15/MOT16/MOT17/MOT20 +| | ├── train +| | | ├── MOT17-02-DPM +| | | | ├── det +| │ │ │ ├── gt +| │ │ │ ├── img1 +| │ │ │ ├── seqinfo.ini +│ │ │ ├── ...... +| | ├── test +| | | ├── MOT17-01-DPM +| | | | ├── det +| │ │ │ ├── img1 +| │ │ │ ├── seqinfo.ini +│ │ │ ├── ...... +│ │ +│ ├── crowdhuman +│ │ ├── annotation_train.odgt +│ │ ├── annotation_val.odgt +│ │ ├── train +│ │ │ ├── Images +│ │ │ ├── CrowdHuman_train01.zip +│ │ │ ├── CrowdHuman_train02.zip +│ │ │ ├── CrowdHuman_train03.zip +│ │ ├── val +│ │ │ ├── Images +│ │ │ ├── CrowdHuman_val.zip +│ │ +``` + +### 2. 转换注释 + +在这种情况下,您需要将官方注释(Annotations)转换为COCO格式。我们提供了相应的脚本,使用方法如下: + +```shell +# MOT17 +# 其他 MOT Challenge 数据集的处理方式与 MOT17 相同。 +python ./tools/dataset_converters/mot2coco.py -i ./data/MOT17/ -o ./data/MOT17/annotations --split-train --convert-det +python ./tools/dataset_converters/mot2reid.py -i ./data/MOT17/ -o ./data/MOT17/reid --val-split 0.2 --vis-threshold 0.3 + +# CrowdHuman +python ./tools/dataset_converters/crowdhuman2coco.py -i ./data/crowdhuman -o ./data/crowdhuman/annotations + +# YouTube-VIS 2019 +python ./tools/dataset_converters/youtubevis/youtubevis2coco.py -i ./data/youtube_vis_2019 -o ./data/youtube_vis_2019/annotations --version 2019 + +# YouTube-VIS 2021 +python ./tools/dataset_converters/youtubevis/youtubevis2coco.py -i ./data/youtube_vis_2021 -o ./data/youtube_vis_2021/annotations --version 2021 + +``` + +运行这些脚本后,文件夹结构将如下所示: + +``` +mmdetection +├── mmtrack +├── tools +├── configs +├── data +│ ├── coco +│ │ ├── train2017 +│ │ ├── val2017 +│ │ ├── test2017 +│ │ ├── annotations +│ │ +| ├── MOT15/MOT16/MOT17/MOT20 +| | ├── train +| | | ├── MOT17-02-DPM +| | | | ├── det +| │ │ │ ├── gt +| │ │ │ ├── img1 +| │ │ │ ├── seqinfo.ini +│ │ │ ├── ...... +| | ├── test +| | | ├── MOT17-01-DPM +| | | | ├── det +| │ │ │ ├── img1 +| │ │ │ ├── seqinfo.ini +│ │ │ ├── ...... +| | ├── annotations +| | ├── reid +│ │ │ ├── imgs +│ │ │ ├── meta +│ │ +│ ├── crowdhuman +│ │ ├── annotation_train.odgt +│ │ ├── annotation_val.odgt +│ │ ├── train +│ │ │ ├── Images +│ │ │ ├── CrowdHuman_train01.zip +│ │ │ ├── CrowdHuman_train02.zip +│ │ │ ├── CrowdHuman_train03.zip +│ │ ├── val +│ │ │ ├── Images +│ │ │ ├── CrowdHuman_val.zip +│ │ ├── annotations +│ │ │ ├── crowdhuman_train.json +│ │ │ ├── crowdhuman_val.json +│ │ +│ ├── youtube_vis_2019 +│ │ │── train +│ │ │ │── JPEGImages +│ │ │ │── ...... +│ │ │── valid +│ │ │ │── JPEGImages +│ │ │ │── ...... +│ │ │── test +│ │ │ │── JPEGImages +│ │ │ │── ...... +│ │ │── train.json (the official annotation files) +│ │ │── valid.json (the official annotation files) +│ │ │── test.json (the official annotation files) +│ │ │── annotations (the converted annotation file) +│ │ +│ ├── youtube_vis_2021 +│ │ │── train +│ │ │ │── JPEGImages +│ │ │ │── instances.json (the official annotation files) +│ │ │ │── ...... +│ │ │── valid +│ │ │ │── JPEGImages +│ │ │ │── instances.json (the official annotation files) +│ │ │ │── ...... +│ │ │── test +│ │ │ │── JPEGImages +│ │ │ │── instances.json (the official annotation files) +│ │ │ │── ...... +│ │ │── annotations (the converted annotation file) +``` + +#### MOT15/MOT16/MOT17/MOT20中的注释和reid文件夹 + +以 MOT17 数据集为例,其他数据集的结构类似。 + +在 `data/MOT17/annotations` 文件夹中有8个JSON文件: + +`train_cocoformat.json`: 包含MOT17数据集训练集的注释信息的JSON文件。 + +`train_detections.pkl`: 包含MOT17数据集训练集的公共检测结果的Pickle文件。 + +`test_cocoformat.json`: 包含MOT17数据集测试集的注释信息的JSON文件。 + +`test_detections.pkl`: 包含MOT17数据集测试集的公共检测结果的Pickle文件。 + +`half-train_cocoformat.json`、`half-train_detections.pkl`、`half-val_cocoformat.json` 和 `half-val_detections.pkl` 与 `train_cocoformat.json` 和 `train_detections.pkl` 具有类似的含义。`half` 表示将训练集中的每个视频分成两半。前一半的视频被标记为 `half-train` 集,后一半的视频被标记为 `half-val` 集。 + +`data/MOT17/reid` 文件夹的结构如下所示: + +``` +reid +├── imgs +│ ├── MOT17-02-FRCNN_000002 +│ │ ├── 000000.jpg +│ │ ├── 000001.jpg +│ │ ├── ... +│ ├── MOT17-02-FRCNN_000003 +│ │ ├── 000000.jpg +│ │ ├── 000001.jpg +│ │ ├── ... +├── meta +│ ├── train_80.txt +│ ├── val_20.txt +``` + +`train_80.txt` 中的 `80` 表示训练数据集在整个ReID数据集中的比例为80%。而验证数据集的比例为20%。 + +关于训练,我们提供了一个注释列表 `train_80.txt`。列表中的每一行包含一个文件名及其对应的真实标签。格式如下所示: + +``` +MOT17-05-FRCNN_000110/000018.jpg 0 +MOT17-13-FRCNN_000146/000014.jpg 1 +MOT17-05-FRCNN_000088/000004.jpg 2 +MOT17-02-FRCNN_000009/000081.jpg 3 +``` + +`MOT17-05-FRCNN_000110` 表示 `MOT17-05-FRCNN` 视频中的第110个人。 + +对于验证集,注释列表 `val_20.txt` 的格式与上述相同。 + +`reid/imgs` 中的图像是通过相应的 `gt.txt` 从 `MOT17/train` 中的原始图像中裁剪而来。真实标签的值应在 `[0, num_classes - 1]` 的范围内。 + +#### CrowdHuman 中的 annotations 文件夹 + +`data/crowdhuman/annotations` 文件夹下有两个JSON文件: + +`crowdhuman_train.json`:包含 CrowdHuman 数据集训练集的注释信息的JSON文件。 +`crowdhuman_val.json`:包含 CrowdHuman 数据集验证集的注释信息的JSON文件。 + +#### youtube_vis_2019/youtube_vis2021 中的 annotations 文件夹 + +There are 3 JSON files in `data/youtube_vis_2019/annotations` or `data/youtube_vis_2021/annotations`: + +`youtube_vis_2019_train.json`/`youtube_vis_2021_train.json`:包含 youtube_vis_2019/youtube_vis2021 数据集训练集的注释信息的JSON文件。 + +`youtube_vis_2019_valid.json`/`youtube_vis_2021_valid.json`:包含 youtube_vis_2019/youtube_vis2021 数据集验证集的注释信息的JSON文件。 + +`youtube_vis_2019_test.json`/`youtube_vis_2021_test.json`:包含 youtube_vis_2019/youtube_vis2021 数据集测试集的注释信息的JSON文件。 From 3bccdaf0e989f8092ddbdb08039f0f2996e4d349 Mon Sep 17 00:00:00 2001 From: Range King Date: Fri, 1 Sep 2023 11:18:55 +0800 Subject: [PATCH 32/63] [CodeCamp2023-499] Refine the docstring and typehint of `vlfuse_helper.py` (#10867) --- mmdet/models/utils/vlfuse_helper.py | 205 ++++++++++++++++++++++------ 1 file changed, 167 insertions(+), 38 deletions(-) diff --git a/mmdet/models/utils/vlfuse_helper.py b/mmdet/models/utils/vlfuse_helper.py index d98026265e1..e33c54de749 100644 --- a/mmdet/models/utils/vlfuse_helper.py +++ b/mmdet/models/utils/vlfuse_helper.py @@ -1,5 +1,8 @@ # Copyright (c) OpenMMLab. All rights reserved. +# Modified from https://github.com/microsoft/GLIP/blob/main/maskrcnn_benchmark/utils/fuse_helper.py # noqa +# and https://github.com/microsoft/GLIP/blob/main/maskrcnn_benchmark/modeling/rpn/modeling_bert.py # noqa import math +from typing import Dict, List, Optional, Tuple import torch import torch.nn as nn @@ -9,7 +12,7 @@ from torch import Tensor try: - from transformers import BertPreTrainedModel + from transformers import BertConfig, BertPreTrainedModel from transformers.modeling_utils import apply_chunking_to_forward from transformers.models.bert.modeling_bert import \ BertAttention as HFBertAttention @@ -18,6 +21,7 @@ from transformers.models.bert.modeling_bert import \ BertOutput as HFBertOutput except ImportError: + BertConfig = None BertPreTrainedModel = object apply_chunking_to_forward = None HFBertAttention = object @@ -27,20 +31,53 @@ MAX_CLAMP_VALUE = 50000 -def permute_and_flatten(layer, N, A, C, H, W): +def permute_and_flatten(layer: Tensor, N: int, A: int, C: int, H: int, + W: int) -> Tensor: + """Permute and then flatten a tensor, + + from size (N, A, C, H, W) to (N, H * W * A, C). + + Args: + layer (Tensor): Tensor of shape (N, C, H, W). + N (int): Batch size. + A (int): Number of attention heads. + C (int): Number of channels. + H (int): Height of feature map. + W (int): Width of feature map. + + Returns: + Tensor: A Tensor of shape (N, H * W * A, C). + """ layer = layer.view(N, A, C, H, W) layer = layer.permute(0, 3, 4, 1, 2) layer = layer.reshape(N, -1, C) return layer -def clamp_values(vector): +def clamp_values(vector: Tensor) -> Tensor: + """Clamp the values of a vector to the range [-MAX_CLAMP_VALUE, + MAX_CLAMP_VALUE]. + + Args: + vector (Tensor): Tensor of shape (N, C, H, W). + + Returns: + Tensor: A Tensor of shape (N, C, H, W) with clamped values. + """ vector = torch.clamp(vector, min=-MAX_CLAMP_VALUE, max=MAX_CLAMP_VALUE) return vector class BiMultiHeadAttention(nn.Module): - """Bidirectional fusion Multi-Head Attention layer.""" + """Bidirectional fusion Multi-Head Attention layer. + + Args: + v_dim (int): The dimension of the vision input. + l_dim (int): The dimension of the language input. + embed_dim (int): The embedding dimension for the attention operation. + num_heads (int): The number of attention heads. + dropout (float, optional): The dropout probability. Defaults to 0.1. + """ def __init__(self, v_dim: int, @@ -96,7 +133,12 @@ def _reset_parameters(self): nn.init.xavier_uniform_(self.out_l_proj.weight) self.out_l_proj.bias.data.fill_(0) - def forward(self, vision: Tensor, lang: Tensor, attention_mask_l=None): + def forward( + self, + vision: Tensor, + lang: Tensor, + attention_mask_l: Optional[Tensor] = None + ) -> Tuple[Tensor, Tensor]: bsz, tgt_len, _ = vision.size() query_states = self.v_proj(vision) * self.scale @@ -204,6 +246,18 @@ class BiAttentionBlock(nn.Module): First, multi-level visual features are concat; Then the concat visual feature and lang feature are fused by attention; Finally the newly visual feature are split into multi levels. + + Args: + v_dim (int): The dimension of the visual features. + l_dim (int): The dimension of the language feature. + embed_dim (int): The embedding dimension for the attention operation. + num_heads (int): The number of attention heads. + dropout (float, optional): The dropout probability. Defaults to 0.1. + drop_path (float, optional): The drop path probability. + Defaults to 0.0. + init_values (float, optional): + The initial value for the scaling parameter. + Defaults to 1e-4. """ def __init__(self, @@ -234,10 +288,12 @@ def __init__(self, self.gamma_l = nn.Parameter( init_values * torch.ones(l_dim), requires_grad=True) - def forward(self, - visual_features: list, - lang_feature: Tensor, - attention_mask_l=None): + def forward( + self, + visual_features: Tuple[Tensor], + lang_feature: Tensor, + attention_mask_l: Optional[Tensor] = None + ) -> Tuple[List[Tensor], Tensor]: size_per_level, visual_features_flatten = [], [] for i, feat_per_level in enumerate(visual_features): @@ -264,7 +320,25 @@ def forward(self, return fusion_visual_features, new_lang_feature - def single_attention_call(self, visual, lang, attention_mask_l=None): + def single_attention_call( + self, + visual: Tensor, + lang: Tensor, + attention_mask_l: Optional[Tensor] = None + ) -> Tuple[Tensor, Tensor]: + """Perform a single attention call between the visual and language + inputs. + + Args: + visual (Tensor): The visual input tensor. + lang (Tensor): The language input tensor. + attention_mask_l (Optional[Tensor]): + An optional attention mask tensor for the language input. + + Returns: + Tuple[Tensor, Tensor]: A tuple containing the updated + visual and language tensors after the attention call. + """ visual = self.layer_norm_v(visual) lang = self.layer_norm_l(lang) delta_v, delta_l = self.attn( @@ -276,7 +350,17 @@ def single_attention_call(self, visual, lang, attention_mask_l=None): class VLFuse(nn.Module): - """Early Fusion Module.""" + """Early Fusion Module. + + Args: + v_dim (int): Dimension of visual features. + l_dim (int): Dimension of language features. + embed_dim (int): The embedding dimension for the attention operation. + num_heads (int): Number of attention heads. + dropout (float): Dropout probability. + drop_path (float): Drop path probability. + use_checkpoint (bool): Whether to use PyTorch's checkpoint function. + """ def __init__(self, v_dim: int = 256, @@ -287,7 +371,6 @@ def __init__(self, drop_path: float = 0.0, use_checkpoint: bool = False): super().__init__() - # bi-direction (text->image, image->text) self.use_checkpoint = use_checkpoint self.b_attn = BiAttentionBlock( v_dim=v_dim, @@ -298,7 +381,8 @@ def __init__(self, drop_path=drop_path, init_values=1.0 / 6.0) - def forward(self, x): + def forward(self, x: dict) -> dict: + """Forward pass of the VLFuse module.""" visual_features = x['visual'] language_dict_features = x['lang'] @@ -323,10 +407,23 @@ def forward(self, x): class BertEncoderLayer(BertPreTrainedModel): - """Modified from transformers.models.bert.modeling_bert.BertLayer.""" + """A modified version of the `BertLayer` class from the + `transformers.models.bert.modeling_bert` module. + + Args: + config (:class:`~transformers.BertConfig`): + The configuration object that + contains various parameters for the model. + clamp_min_for_underflow (bool, optional): + Whether to clamp the minimum value of the hidden states + to prevent underflow. Defaults to `False`. + clamp_max_for_overflow (bool, optional): + Whether to clamp the maximum value of the hidden states + to prevent overflow. Defaults to `False`. + """ def __init__(self, - config, + config: BertConfig, clamp_min_for_underflow: bool = False, clamp_max_for_overflow: bool = False): super().__init__(config) @@ -339,17 +436,16 @@ def __init__(self, self.intermediate = BertIntermediate(config) self.output = BertOutput(config) - def forward(self, inputs): + def forward( + self, inputs: Dict[str, Dict[str, torch.Tensor]] + ) -> Dict[str, Dict[str, torch.Tensor]]: + """Applies the BertEncoderLayer to the input features.""" language_dict_features = inputs['lang'] hidden_states = language_dict_features['hidden'] attention_mask = language_dict_features['masks'] device = hidden_states.device input_shape = hidden_states.size()[:-1] - # We can provide a self-attention mask of dimensions - # [batch_size, from_seq_length, to_seq_length] - # ourselves in which case we just need to make it - # broadcastable to all heads. extended_attention_mask = self.get_extended_attention_mask( attention_mask, input_shape, device) @@ -358,11 +454,9 @@ def forward(self, inputs): extended_attention_mask, None, output_attentions=False, - past_key_value=None, - ) + past_key_value=None) attention_output = self_attention_outputs[0] - outputs = self_attention_outputs[ - 1:] # add self attentions if we output attention weights + outputs = self_attention_outputs[1:] layer_output = apply_chunking_to_forward(self.feed_forward_chunk, self.chunk_size_feed_forward, self.seq_len_dim, @@ -379,7 +473,9 @@ def forward(self, inputs): return features_dict - def feed_forward_chunk(self, attention_output): + def feed_forward_chunk(self, attention_output: Tensor) -> Tensor: + """Applies the intermediate and output layers of the BertEncoderLayer + to a chunk of the input sequence.""" intermediate_output = self.intermediate(attention_output) layer_output = self.output(intermediate_output, attention_output) return layer_output @@ -391,10 +487,21 @@ class BertSelfAttention(nn.Module): """BERT self-attention layer from Huggingface transformers. Compared to the BertSelfAttention of Huggingface, only add the clamp. + + Args: + config (:class:`~transformers.BertConfig`): + The configuration object that + contains various parameters for the model. + clamp_min_for_underflow (bool, optional): + Whether to clamp the minimum value of the hidden states + to prevent underflow. Defaults to `False`. + clamp_max_for_overflow (bool, optional): + Whether to clamp the maximum value of the hidden states + to prevent overflow. Defaults to `False`. """ def __init__(self, - config, + config: BertConfig, clamp_min_for_underflow: bool = False, clamp_max_for_overflow: bool = False): super().__init__() @@ -429,7 +536,8 @@ def __init__(self, self.is_decoder = config.is_decoder - def transpose_for_scores(self, x): + def transpose_for_scores(self, x: Tensor) -> Tensor: + """Transpose the dimensions of `x`.""" new_x_shape = x.size()[:-1] + (self.num_attention_heads, self.attention_head_size) x = x.view(*new_x_shape) @@ -437,14 +545,16 @@ def transpose_for_scores(self, x): def forward( self, - hidden_states, - attention_mask=None, - head_mask=None, - encoder_hidden_states=None, - encoder_attention_mask=None, - past_key_value=None, - output_attentions=False, - ): + hidden_states: Tensor, + attention_mask: Optional[Tensor] = None, + head_mask: Optional[Tensor] = None, + encoder_hidden_states: Optional[Tensor] = None, + encoder_attention_mask: Optional[Tensor] = None, + past_key_value: Optional[Tuple[Tensor, Tensor]] = None, + output_attentions: bool = False, + ) -> Tuple[Tensor, ...]: + """Perform a forward pass through the BERT self-attention layer.""" + mixed_query_layer = self.query(hidden_states) # If this is instantiated as a cross-attention module, the keys @@ -557,10 +667,21 @@ class BertAttention(HFBertAttention): """BertAttention is made up of self-attention and intermediate+output. Compared to the BertAttention of Huggingface, only add the clamp. + + Args: + config (:class:`~transformers.BertConfig`): + The configuration object that + contains various parameters for the model. + clamp_min_for_underflow (bool, optional): + Whether to clamp the minimum value of the hidden states + to prevent underflow. Defaults to `False`. + clamp_max_for_overflow (bool, optional): + Whether to clamp the maximum value of the hidden states + to prevent overflow. Defaults to `False`. """ def __init__(self, - config, + config: BertConfig, clamp_min_for_underflow: bool = False, clamp_max_for_overflow: bool = False): super().__init__(config) @@ -569,8 +690,12 @@ def __init__(self, class BertIntermediate(HFBertIntermediate): + """Modified from transformers.models.bert.modeling_bert.BertIntermediate. + + Compared to the BertIntermediate of Huggingface, only add the clamp. + """ - def forward(self, hidden_states): + def forward(self, hidden_states: Tensor) -> Tensor: hidden_states = self.dense(hidden_states) hidden_states = clamp_values(hidden_states) hidden_states = self.intermediate_act_fn(hidden_states) @@ -579,8 +704,12 @@ def forward(self, hidden_states): class BertOutput(HFBertOutput): + """Modified from transformers.models.bert.modeling_bert.BertOutput. + + Compared to the BertOutput of Huggingface, only add the clamp. + """ - def forward(self, hidden_states, input_tensor): + def forward(self, hidden_states: Tensor, input_tensor: Tensor) -> Tensor: hidden_states = self.dense(hidden_states) hidden_states = self.dropout(hidden_states) hidden_states = clamp_values(hidden_states) From a9c4c0185862615ca149b077b973261a18f970d6 Mon Sep 17 00:00:00 2001 From: takuoko Date: Mon, 4 Sep 2023 18:20:11 +0900 Subject: [PATCH 33/63] [Bugfix] analyze_results (#10876) --- tools/analysis_tools/analyze_results.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tools/analysis_tools/analyze_results.py b/tools/analysis_tools/analyze_results.py index a7baba009e7..279b9546d1c 100644 --- a/tools/analysis_tools/analyze_results.py +++ b/tools/analysis_tools/analyze_results.py @@ -124,8 +124,12 @@ def _save_image_gts_results(self, if task == 'det': gt_instances = InstanceData() - gt_instances.bboxes = results[index]['gt_instances']['bboxes'] - gt_instances.labels = results[index]['gt_instances']['labels'] + gt_instances.bboxes = [ + d['bbox'] for d in data_info['gt_instances'] + ] + gt_instances.labels = [ + d['bbox_label'] for d in data_info['gt_instances'] + ] pred_instances = InstanceData() pred_instances.bboxes = results[index]['pred_instances'][ @@ -141,7 +145,9 @@ def _save_image_gts_results(self, elif task == 'seg': gt_panoptic_seg = PixelData() - gt_panoptic_seg.sem_seg = results[index]['gt_seg_map'] + gt_panoptic_seg.sem_seg = [ + d['gt_seg_map'] for d in data_info['gt_instances'] + ] pred_panoptic_seg = PixelData() pred_panoptic_seg.sem_seg = results[index][ From af816d3b148316f8b7f8db40e3ed32838e5f5a6d Mon Sep 17 00:00:00 2001 From: apatsekin Date: Mon, 4 Sep 2023 02:24:31 -0700 Subject: [PATCH 34/63] Setting scope for image reader in video_demo (#10868) --- demo/video_demo.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/demo/video_demo.py b/demo/video_demo.py index bb7cdbfd473..6fc36319ae8 100644 --- a/demo/video_demo.py +++ b/demo/video_demo.py @@ -40,7 +40,8 @@ def main(): model = init_detector(args.config, args.checkpoint, device=args.device) # build test pipeline - model.cfg.test_dataloader.dataset.pipeline[0].type = 'LoadImageFromNDArray' + model.cfg.test_dataloader.dataset.pipeline[ + 0].type = 'mmdet.LoadImageFromNDArray' test_pipeline = Compose(model.cfg.test_dataloader.dataset.pipeline) # init visualizer From 82d2a6e37f7bfff50676cdfcebca6df38ab7accb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Mon, 11 Sep 2023 13:54:08 +0800 Subject: [PATCH 35/63] Support GLIP Funetune (#10866) --- configs/glip/README.md | 31 +- ...n-l_fpn_dyhead_16xb2_ms-2x_funtune_coco.py | 14 + ...t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco.py | 155 +++++++++ ...t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco.py | 9 + ...t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco.py | 3 + ...n-t_fpn_dyhead_16xb2_ms-2x_funtune_coco.py | 3 + configs/glip/metafile.yml | 45 +++ docs/en/user_guides/inference.md | 21 +- docs/zh_cn/user_guides/inference.md | 21 +- mmdet/datasets/transforms/__init__.py | 4 +- .../datasets/transforms/transformers_glip.py | 66 ++++ mmdet/datasets/transforms/transforms.py | 1 - mmdet/models/dense_heads/atss_head.py | 2 +- .../models/dense_heads/atss_vlfusion_head.py | 321 +++++++++++++++++- mmdet/models/detectors/glip.py | 106 +++++- mmdet/models/necks/__init__.py | 4 +- mmdet/models/necks/fpn_dropblock.py | 90 +++++ .../models/task_modules/assigners/__init__.py | 4 +- .../assigners/iou2d_calculator.py | 20 ++ mmdet/models/utils/vlfuse_helper.py | 41 ++- 20 files changed, 864 insertions(+), 97 deletions(-) create mode 100644 configs/glip/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco.py create mode 100644 configs/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco.py create mode 100644 configs/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco.py create mode 100644 configs/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco.py create mode 100644 configs/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco.py create mode 100644 mmdet/datasets/transforms/transformers_glip.py create mode 100644 mmdet/models/necks/fpn_dropblock.py diff --git a/configs/glip/README.md b/configs/glip/README.md index 5f7c8d3ccb7..ebf5226b109 100644 --- a/configs/glip/README.md +++ b/configs/glip/README.md @@ -31,25 +31,34 @@ wget https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_a_mmdet-b365 python demo/image_demo.py demo/demo.jpg \ configs/glip/glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365.py \ -glip_tiny_a_mmdet-b3654169.pth \ ---texts 'bench . car .' +--weights glip_tiny_a_mmdet-b3654169.pth \ +--texts 'bench. car' ```
    - +
    ## Results and Models -| Model | Zero-shot or Funetune | COCO mAP | Pre-Train Data | Config | Download | -| :--------: | :-------------------: | :------: | :------------------------: | :---------------------------------------------------------------------: | :------------------------------------------------------------------------------------------: | -| GLIP-T (A) | Zero-shot | 43.0 | O365 | [config](glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_a_mmdet-b3654169.pth) | -| GLIP-T (B) | Zero-shot | 44.9 | O365 | [config](glip_atss_swin-t_b_fpn_dyhead_pretrain_obj365.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_b_mmdet-6dfbd102.pth) | -| GLIP-T (C) | Zero-shot | 46.7 | O365,GoldG | [config](glip_atss_swin-t_c_fpn_dyhead_pretrain_obj365-goldg.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_c_mmdet-2fc427dd.pth) | -| GLIP-T | Zero-shot | 46.4 | O365,GoldG,CC3M,SBU | [config](glip_atss_swin-t_fpn_dyhead_pretrain_obj365-goldg-cc3m-sub.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_mmdet-c24ce662.pth) | -| GLIP-L | Zero-shot | 51.3 | FourODs,GoldG,CC3M+12M,SBU | [config](glip_atss_swin-l_fpn_dyhead_pretrain_mixeddata.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_l_mmdet-abfe026b.pth) | +| Model | Zero-shot or Funetune | COCO mAP | Pre-Train Data | Config | Download | +| :--------: | :-------------------: | :------: | :------------------------: | :---------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| GLIP-T (A) | Zero-shot | 43.0 | O365 | [config](glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_a_mmdet-b3654169.pth) | +| GLIP-T (A) | Funetune | 53.1 | O365 | [config](glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230908_091856-39f01d03.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230908_091856.log.json) | +| GLIP-T (B) | Zero-shot | 44.9 | O365 | [config](glip_atss_swin-t_b_fpn_dyhead_pretrain_obj365.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_b_mmdet-6dfbd102.pth) | +| GLIP-T (B) | Funetune | 54.1 | O365 | [config](glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230909_175354-e0c0c6d7.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230909_175354.log.json) | +| GLIP-T (C) | Zero-shot | 46.7 | O365,GoldG | [config](glip_atss_swin-t_c_fpn_dyhead_pretrain_obj365-goldg.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_c_mmdet-2fc427dd.pth) | +| GLIP-T (C) | Funetune | 55.2 | O365,GoldG | [config](glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230909_175543-5fcb4b97.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230909_175543.log.json) | +| GLIP-T | Zero-shot | 46.4 | O365,GoldG,CC3M,SBU | [config](glip_atss_swin-t_fpn_dyhead_pretrain_obj365-goldg-cc3m-sub.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_mmdet-c24ce662.pth) | +| GLIP-T | Funetune | 55.2 | O365,GoldG,CC3M,SBU | [config](glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230910_125111-ad1025a0.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230910_125111.log.json) | +| GLIP-L | Zero-shot | 51.3 | FourODs,GoldG,CC3M+12M,SBU | [config](glip_atss_swin-l_fpn_dyhead_pretrain_mixeddata.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_l_mmdet-abfe026b.pth) | +| GLIP-L | Funetune | 59.4 | FourODs,GoldG,CC3M+12M,SBU | [config](glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230910_100800-e9be4274.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230910_100800.log.json) | Note: 1. The weights corresponding to the zero-shot model are adopted from the official weights and converted using the [script](../../tools/model_converters/glip_to_mmdet.py). We have not retrained the model for the time being. -2. We will soon support fine-tuning on COCO. +2. Funetune refers to fine-tuning on the COCO 2017 dataset. The L model is trained using 16 A100 GPUs, while the remaining models are trained using 16 NVIDIA GeForce 3090 GPUs. +3. Taking the GLIP-T(A) model as an example, I trained it twice using the official code, and the fine-tuning mAP were 52.5 and 52.6. Therefore, the mAP we achieved in our reproduction is higher than the official results. The main reason is that we modified the `weight_decay` parameter. +4. Our experiments revealed that training for 24 epochs leads to overfitting. Therefore, we chose the best-performing model. If users want to train on a custom dataset, it is advisable to shorten the number of epochs and save the best-performing model. +5. Due to the official absence of fine-tuning hyperparameters for the GLIP-L model, we have not yet reproduced the official accuracy. I have found that overfitting can also occur, so it may be necessary to consider custom modifications to data augmentation and model enhancement. Given the high cost of training, we have not conducted any research on this matter at the moment. +6. We noticed that there is a discrepancy between the performance evaluation of the checkpoint and the evaluation logs during training. This is because the buffers of different ranks are not the same during training, but we only saved the weights of rank 0. If you want to avoid this issue, you can add the parameter `broadcast_buffers=True` in the configuration. diff --git a/configs/glip/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco.py b/configs/glip/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco.py new file mode 100644 index 00000000000..92a85a11d57 --- /dev/null +++ b/configs/glip/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco.py @@ -0,0 +1,14 @@ +_base_ = './glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco.py' + +model = dict( + backbone=dict( + embed_dims=192, + depths=[2, 2, 18, 2], + num_heads=[6, 12, 24, 48], + window_size=12, + drop_path_rate=0.4, + ), + neck=dict(in_channels=[384, 768, 1536]), + bbox_head=dict(early_fuse=True, num_dyhead_blocks=8, use_checkpoint=True)) + +load_from = 'https://download.openmmlab.com/mmdetection/v3.0/glip/glip_l_mmdet-abfe026b.pth' # noqa diff --git a/configs/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco.py b/configs/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco.py new file mode 100644 index 00000000000..4b280657b31 --- /dev/null +++ b/configs/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco.py @@ -0,0 +1,155 @@ +_base_ = [ + '../_base_/datasets/coco_detection.py', + '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' +] +load_from = 'https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_a_mmdet-b3654169.pth' # noqa +lang_model_name = 'bert-base-uncased' + +model = dict( + type='GLIP', + data_preprocessor=dict( + type='DetDataPreprocessor', + mean=[103.53, 116.28, 123.675], + std=[57.375, 57.12, 58.395], + bgr_to_rgb=False, + pad_size_divisor=32), + backbone=dict( + type='SwinTransformer', + embed_dims=96, + depths=[2, 2, 6, 2], + num_heads=[3, 6, 12, 24], + window_size=7, + mlp_ratio=4, + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.2, + patch_norm=True, + out_indices=(1, 2, 3), + with_cp=False, + convert_weights=False), + neck=dict( + type='FPN_DropBlock', + in_channels=[192, 384, 768], + out_channels=256, + start_level=0, + relu_before_extra_convs=True, + add_extra_convs='on_output', + num_outs=5), + bbox_head=dict( + type='ATSSVLFusionHead', + lang_model_name=lang_model_name, + num_classes=80, + in_channels=256, + feat_channels=256, + anchor_generator=dict( + type='AnchorGenerator', + ratios=[1.0], + octave_base_scale=8, + scales_per_octave=1, + strides=[8, 16, 32, 64, 128], + center_offset=0.5), + bbox_coder=dict( + type='DeltaXYWHBBoxCoderForGLIP', + target_means=[.0, .0, .0, .0], + target_stds=[0.1, 0.1, 0.2, 0.2]), + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox=dict(type='GIoULoss', loss_weight=2.0), + loss_centerness=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0)), + language_model=dict(type='BertModel', name=lang_model_name), + train_cfg=dict( + assigner=dict( + type='ATSSAssigner', + topk=9, + iou_calculator=dict(type='BboxOverlaps2D_GLIP')), + allowed_border=-1, + pos_weight=-1, + debug=False), + test_cfg=dict( + nms_pre=1000, + min_bbox_size=0, + score_thr=0.05, + nms=dict(type='nms', iou_threshold=0.6), + max_per_img=100)) + +# dataset settings +train_pipeline = [ + dict( + type='LoadImageFromFile', + imdecode_backend='pillow', + backend_args=_base_.backend_args), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='GTBoxSubOne_GLIP'), + dict( + type='RandomChoiceResize', + scales=[(1333, 480), (1333, 560), (1333, 640), (1333, 720), + (1333, 800)], + keep_ratio=True, + resize_type='FixScaleResize', + backend='pillow'), + dict(type='RandomFlip_GLIP', prob=0.5), + dict(type='FilterAnnotations', min_gt_bbox_wh=(1, 1)), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor', 'flip', 'flip_direction', 'text', + 'custom_entities')) +] + +test_pipeline = [ + dict( + type='LoadImageFromFile', + backend_args=_base_.backend_args, + imdecode_backend='pillow'), + dict( + type='FixScaleResize', + scale=(800, 1333), + keep_ratio=True, + backend='pillow'), + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor', 'text', 'custom_entities')) +] + +train_dataloader = dict( + dataset=dict( + _delete_=True, + type='RepeatDataset', + times=2, + dataset=dict( + type=_base_.dataset_type, + data_root=_base_.data_root, + ann_file='annotations/instances_train2017.json', + data_prefix=dict(img='train2017/'), + filter_cfg=dict(filter_empty_gt=True, min_size=32), + pipeline=train_pipeline, + return_classes=True, + backend_args=_base_.backend_args))) + +val_dataloader = dict( + dataset=dict(pipeline=test_pipeline, return_classes=True)) +test_dataloader = val_dataloader + +# We did not adopt the official 24e optimizer strategy +# because the results indicate that the current strategy is superior. +optim_wrapper = dict( + _delete_=True, + type='OptimWrapper', + optimizer=dict( + type='AdamW', lr=0.00002, betas=(0.9, 0.999), weight_decay=0.05), + paramwise_cfg=dict( + custom_keys={ + 'absolute_pos_embed': dict(decay_mult=0.), + 'relative_position_bias_table': dict(decay_mult=0.), + 'norm': dict(decay_mult=0.) + }), + clip_grad=None) diff --git a/configs/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco.py b/configs/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco.py new file mode 100644 index 00000000000..3487de3f3a2 --- /dev/null +++ b/configs/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco.py @@ -0,0 +1,9 @@ +_base_ = './glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco.py' + +model = dict(bbox_head=dict(early_fuse=True, use_checkpoint=True)) + +load_from = 'https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_b_mmdet-6dfbd102.pth' # noqa + +optim_wrapper = dict( + optimizer=dict(lr=0.00001), + clip_grad=dict(_delete_=True, max_norm=1, norm_type=2)) diff --git a/configs/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco.py b/configs/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco.py new file mode 100644 index 00000000000..5c315e490e7 --- /dev/null +++ b/configs/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco.py @@ -0,0 +1,3 @@ +_base_ = './glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco.py' + +load_from = 'https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_c_mmdet-2fc427dd.pth' # noqa diff --git a/configs/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco.py b/configs/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco.py new file mode 100644 index 00000000000..3391272e608 --- /dev/null +++ b/configs/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco.py @@ -0,0 +1,3 @@ +_base_ = './glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco.py' + +load_from = 'https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_mmdet-c24ce662.pth' # noqa diff --git a/configs/glip/metafile.yml b/configs/glip/metafile.yml index 588d1c8d6b8..6fc245604aa 100644 --- a/configs/glip/metafile.yml +++ b/configs/glip/metafile.yml @@ -64,3 +64,48 @@ Models: Metrics: box AP: 51.3 Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_l_mmdet-abfe026b.pth + - Name: glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco + In Collection: GLIP + Config: configs/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco.py + Results: + - Task: Object Detection + Dataset: COCO + Metrics: + box AP: 53.1 + Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230908_091856-39f01d03.pth + - Name: glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco + In Collection: GLIP + Config: configs/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco.py + Results: + - Task: Object Detection + Dataset: COCO + Metrics: + box AP: 54.1 + Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230909_175354-e0c0c6d7.pth + - Name: glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco + In Collection: GLIP + Config: configs/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco.py + Results: + - Task: Object Detection + Dataset: COCO + Metrics: + box AP: 55.2 + Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230909_175543-5fcb4b97.pth + - Name: glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco + In Collection: GLIP + Config: configs/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco.py + Results: + - Task: Object Detection + Dataset: COCO + Metrics: + box AP: 55.2 + Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230910_125111-ad1025a0.pth + - Name: glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco + In Collection: GLIP + Config: configs/glip/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco.py + Results: + - Task: Object Detection + Dataset: COCO + Metrics: + box AP: 59.4 + Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230910_100800-e9be4274.pth diff --git a/docs/en/user_guides/inference.md b/docs/en/user_guides/inference.md index 3a531ede1d6..49186d23695 100644 --- a/docs/en/user_guides/inference.md +++ b/docs/en/user_guides/inference.md @@ -395,10 +395,10 @@ Demo result will be similar to this: -If users would like to detect multiple targets, please declare them in the format of `xx . xx .` after the `--texts`. +If users would like to detect multiple targets, please declare them in the format of `xx. xx` after the `--texts`. ```shell -python demo/image_demo.py demo/demo.jpg glip_tiny_a_mmdet-b3654169.pth --texts 'bench . car .' +python demo/image_demo.py demo/demo.jpg glip_tiny_a_mmdet-b3654169.pth --texts 'bench. car' ``` And the result will be like this one: @@ -438,20 +438,3 @@ python tools/test.py configs/glip/glip_atss_swin-t_fpn_dyhead_pretrain_obj365.py # 8 GPU ./tools/dist_test.sh configs/glip/glip_atss_swin-t_fpn_dyhead_pretrain_obj365.py glip_tiny_a_mmdet-b3654169.pth 8 ``` - -The result will be similar to this: - -```shell -Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.428 -Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.594 -Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.466 -Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.300 -Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.477 -Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.534 -Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.634 -Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.634 -Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.634 -Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.473 -Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.690 -Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.789 -``` diff --git a/docs/zh_cn/user_guides/inference.md b/docs/zh_cn/user_guides/inference.md index 206e3bfde59..a0fb08faeb0 100644 --- a/docs/zh_cn/user_guides/inference.md +++ b/docs/zh_cn/user_guides/inference.md @@ -393,10 +393,10 @@ demo 效果如下图所示: -如果想进行多种类型的识别,需要使用 `xx . xx .` 的格式在 `--texts` 字段后声明目标类型: +如果想进行多种类型的识别,需要使用 `xx. xx` 的格式在 `--texts` 字段后声明目标类型: ```shell -python demo/image_demo.py demo/demo.jpg glip_tiny_a_mmdet-b3654169.pth --texts 'bench . car .' +python demo/image_demo.py demo/demo.jpg glip_tiny_a_mmdet-b3654169.pth --texts 'bench. car' ``` 结果如下图所示: @@ -436,20 +436,3 @@ python tools/test.py configs/glip/glip_atss_swin-t_fpn_dyhead_pretrain_obj365.py # 8 GPU ./tools/dist_test.sh configs/glip/glip_atss_swin-t_fpn_dyhead_pretrain_obj365.py glip_tiny_a_mmdet-b3654169.pth 8 ``` - -验证结果大致如下: - -```shell -Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.428 -Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.594 -Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.466 -Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.300 -Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.477 -Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.534 -Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.634 -Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.634 -Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.634 -Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.473 -Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.690 -Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.789 -``` diff --git a/mmdet/datasets/transforms/__init__.py b/mmdet/datasets/transforms/__init__.py index b5ab3758382..1f30d6c1352 100644 --- a/mmdet/datasets/transforms/__init__.py +++ b/mmdet/datasets/transforms/__init__.py @@ -13,6 +13,7 @@ LoadEmptyAnnotations, LoadImageFromNDArray, LoadMultiChannelImageFromFiles, LoadPanopticAnnotations, LoadProposals, LoadTrackAnnotations) +from .transformers_glip import GTBoxSubOne_GLIP, RandomFlip_GLIP from .transforms import (Albu, CachedMixUp, CachedMosaic, CopyPaste, CutOut, Expand, FixScaleResize, FixShapeResize, MinIoURandomCrop, MixUp, Mosaic, Pad, @@ -37,5 +38,6 @@ 'LoadEmptyAnnotations', 'RandomOrder', 'CachedMosaic', 'CachedMixUp', 'FixShapeResize', 'ProposalBroadcaster', 'InferencerLoader', 'LoadTrackAnnotations', 'BaseFrameSample', 'UniformRefFrameSample', - 'PackTrackInputs', 'PackReIDInputs', 'FixScaleResize', 'ResizeShortestEdge' + 'PackTrackInputs', 'PackReIDInputs', 'FixScaleResize', + 'ResizeShortestEdge', 'GTBoxSubOne_GLIP', 'RandomFlip_GLIP' ] diff --git a/mmdet/datasets/transforms/transformers_glip.py b/mmdet/datasets/transforms/transformers_glip.py new file mode 100644 index 00000000000..60c4f87d1b8 --- /dev/null +++ b/mmdet/datasets/transforms/transformers_glip.py @@ -0,0 +1,66 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import mmcv +import numpy as np +from mmcv.transforms import BaseTransform + +from mmdet.registry import TRANSFORMS +from mmdet.structures.bbox import HorizontalBoxes, autocast_box_type +from .transforms import RandomFlip + + +@TRANSFORMS.register_module() +class GTBoxSubOne_GLIP(BaseTransform): + """Subtract 1 from the x2 and y2 coordinates of the gt_bboxes.""" + + def transform(self, results: dict) -> dict: + if 'gt_bboxes' in results: + gt_bboxes = results['gt_bboxes'] + if isinstance(gt_bboxes, np.ndarray): + gt_bboxes[:, 2:] -= 1 + results['gt_bboxes'] = gt_bboxes + elif isinstance(gt_bboxes, HorizontalBoxes): + gt_bboxes = results['gt_bboxes'].tensor + gt_bboxes[:, 2:] -= 1 + results['gt_bboxes'] = HorizontalBoxes(gt_bboxes) + else: + raise NotImplementedError + return results + + +@TRANSFORMS.register_module() +class RandomFlip_GLIP(RandomFlip): + """Flip the image & bboxes & masks & segs horizontally or vertically. + + When using horizontal flipping, the corresponding bbox x-coordinate needs + to be additionally subtracted by one. + """ + + @autocast_box_type() + def _flip(self, results: dict) -> None: + """Flip images, bounding boxes, and semantic segmentation map.""" + # flip image + results['img'] = mmcv.imflip( + results['img'], direction=results['flip_direction']) + + img_shape = results['img'].shape[:2] + + # flip bboxes + if results.get('gt_bboxes', None) is not None: + results['gt_bboxes'].flip_(img_shape, results['flip_direction']) + # Only change this line + if results['flip_direction'] == 'horizontal': + results['gt_bboxes'].translate_([-1, 0]) + + # TODO: check it + # flip masks + if results.get('gt_masks', None) is not None: + results['gt_masks'] = results['gt_masks'].flip( + results['flip_direction']) + + # flip segs + if results.get('gt_seg_map', None) is not None: + results['gt_seg_map'] = mmcv.imflip( + results['gt_seg_map'], direction=results['flip_direction']) + + # record homography matrix for flip + self._record_homography_matrix(results) diff --git a/mmdet/datasets/transforms/transforms.py b/mmdet/datasets/transforms/transforms.py index 97b3f636934..4ac2bf75b54 100644 --- a/mmdet/datasets/transforms/transforms.py +++ b/mmdet/datasets/transforms/transforms.py @@ -7,7 +7,6 @@ import cv2 import mmcv -import numpy import numpy as np from mmcv.image import imresize from mmcv.image.geometric import _scale_size diff --git a/mmdet/models/dense_heads/atss_head.py b/mmdet/models/dense_heads/atss_head.py index fcccc2fef92..2ce71b3eff5 100644 --- a/mmdet/models/dense_heads/atss_head.py +++ b/mmdet/models/dense_heads/atss_head.py @@ -281,7 +281,7 @@ def loss_by_feat( Returns: dict[str, Tensor]: A dictionary of loss components. """ - featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + featmap_sizes = [featmap.size()[-2:] for featmap in bbox_preds] assert len(featmap_sizes) == self.prior_generator.num_levels device = cls_scores[0].device diff --git a/mmdet/models/dense_heads/atss_vlfusion_head.py b/mmdet/models/dense_heads/atss_vlfusion_head.py index 5dadc4c4975..c5cd28b4a04 100644 --- a/mmdet/models/dense_heads/atss_vlfusion_head.py +++ b/mmdet/models/dense_heads/atss_vlfusion_head.py @@ -20,9 +20,10 @@ from mmdet.registry import MODELS from mmdet.structures.bbox import cat_boxes -from mmdet.utils import InstanceList +from mmdet.utils import InstanceList, OptInstanceList, reduce_mean from ..utils import (BertEncoderLayer, VLFuse, filter_scores_and_topk, - permute_and_flatten, select_single_mlvl) + permute_and_flatten, select_single_mlvl, + unpack_gt_instances) from ..utils.vlfuse_helper import MAX_CLAMP_VALUE from .atss_head import ATSSHead @@ -389,8 +390,9 @@ def __init__(self, use_checkpoint: bool = False, num_dyhead_blocks: int = 6, lang_model_name: str = 'bert-base-uncased', + init_cfg=None, **kwargs): - super().__init__(*args, **kwargs) + super().__init__(*args, **kwargs, init_cfg=init_cfg) self.head = VLFusionModule( in_channels=self.in_channels, feat_channels=self.feat_channels, @@ -399,6 +401,7 @@ def __init__(self, use_checkpoint=use_checkpoint, num_dyhead_blocks=num_dyhead_blocks, lang_model_name=lang_model_name) + self.text_masks = None def _init_layers(self) -> None: """No need to initialize the ATSS head layer.""" @@ -409,7 +412,309 @@ def forward(self, visual_feats: Tuple[Tensor], """Forward function.""" bbox_preds, centerness, cls_logits = self.head(visual_feats, language_feats) - return bbox_preds, centerness, cls_logits + return cls_logits, bbox_preds, centerness + + def loss(self, visual_feats: Tuple[Tensor], language_feats: dict, + batch_data_samples): + outputs = unpack_gt_instances(batch_data_samples) + (batch_gt_instances, batch_gt_instances_ignore, + batch_img_metas) = outputs + + outs = self(visual_feats, language_feats) + self.text_masks = language_feats['masks'] + loss_inputs = outs + (batch_gt_instances, batch_img_metas, + batch_gt_instances_ignore) + losses = self.loss_by_feat(*loss_inputs) + return losses + + def loss_by_feat( + self, + cls_scores: List[Tensor], + bbox_preds: List[Tensor], + centernesses: List[Tensor], + batch_gt_instances: InstanceList, + batch_img_metas: List[dict], + batch_gt_instances_ignore: OptInstanceList = None) -> dict: + """Calculate the loss based on the features extracted by the detection + head. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + Has shape (N, num_anchors * num_classes, H, W) + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_anchors * 4, H, W) + centernesses (list[Tensor]): Centerness for each scale + level with shape (N, num_anchors * 1, H, W) + batch_gt_instances (list[:obj:`InstanceData`]): Batch of + gt_instance. It usually includes ``bboxes`` and ``labels`` + attributes. + batch_img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + batch_gt_instances_ignore (list[:obj:`InstanceData`], Optional): + Batch of gt_instances_ignore. It includes ``bboxes`` attribute + data that is ignored during training and testing. + Defaults to None. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + featmap_sizes = [featmap.size()[-2:] for featmap in bbox_preds] + assert len(featmap_sizes) == self.prior_generator.num_levels + + device = cls_scores[0].device + anchor_list, valid_flag_list = self.get_anchors( + featmap_sizes, batch_img_metas, device=device) + + cls_reg_targets = self.get_targets( + anchor_list, + valid_flag_list, + batch_gt_instances, + batch_img_metas, + batch_gt_instances_ignore=batch_gt_instances_ignore) + + (anchor_list, labels_list, label_weights_list, bbox_targets_list, + bbox_weights_list, avg_factor) = cls_reg_targets + avg_factor = reduce_mean( + torch.tensor(avg_factor, dtype=torch.float, device=device)).item() + + anchors = torch.cat(anchor_list, dim=1) + labels = torch.cat(labels_list, dim=1) + label_weights = torch.cat(label_weights_list, dim=1) + bbox_targets = torch.cat(bbox_targets_list, dim=1) + cls_scores = torch.cat(cls_scores, dim=1) + + centernesses_ = [] + bbox_preds_ = [] + for bbox_pred, centerness in zip(bbox_preds, centernesses): + centernesses_.append( + centerness.permute(0, 2, 3, + 1).reshape(cls_scores.size(0), -1, 1)) + bbox_preds_.append( + bbox_pred.permute(0, 2, 3, + 1).reshape(cls_scores.size(0), -1, 4)) + bbox_preds = torch.cat(bbox_preds_, dim=1) + centernesses = torch.cat(centernesses_, dim=1) + + losses_cls, losses_bbox, loss_centerness, bbox_avg_factor = \ + self._loss_by_feat( + anchors, + cls_scores, + bbox_preds, + centernesses, + labels, + label_weights, + bbox_targets, + avg_factor=avg_factor) + + bbox_avg_factor = reduce_mean(bbox_avg_factor).clamp_(min=1).item() + losses_bbox = losses_bbox / bbox_avg_factor + return dict( + loss_cls=losses_cls, + loss_bbox=losses_bbox, + loss_centerness=loss_centerness) + + def _loss_by_feat(self, anchors: Tensor, cls_score: Tensor, + bbox_pred: Tensor, centerness: Tensor, labels: Tensor, + label_weights: Tensor, bbox_targets: Tensor, + avg_factor: float) -> dict: + """Calculate the loss of all scale level based on the features + extracted by the detection head. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + + anchors = anchors.reshape(-1, 4) + + # ===== this change ===== + pos_inds = (labels.sum(-1) > 0).reshape(-1) + + # Loss is not computed for the padded regions of the text. + assert (self.text_masks.dim() == 2) + text_mask = (self.text_masks > 0).unsqueeze(1) + text_mask = text_mask.repeat(1, cls_score.size(1), 1) + cls_score = torch.masked_select(cls_score, text_mask).contiguous() + labels = torch.masked_select(labels, text_mask) + label_weights = label_weights[..., + None].repeat(1, 1, text_mask.size(-1)) + label_weights = torch.masked_select(label_weights, text_mask) + + bbox_pred = bbox_pred.reshape(-1, 4) + centerness = centerness.reshape(-1) + bbox_targets = bbox_targets.reshape(-1, 4) + labels = labels.reshape(-1) + label_weights = label_weights.reshape(-1) + + # classification loss + loss_cls = self.loss_cls( + cls_score, labels, label_weights, avg_factor=avg_factor) + + if pos_inds.sum() > 0: + pos_bbox_targets = bbox_targets[pos_inds] + pos_bbox_pred = bbox_pred[pos_inds] + pos_anchors = anchors[pos_inds] + pos_centerness = centerness[pos_inds] + + centerness_targets = self.centerness_target( + pos_anchors, pos_bbox_targets) + + if torch.isnan(centerness_targets).any(): + print('=====Centerness includes NaN=====') + mask = ~torch.isnan(centerness_targets) + centerness_targets = centerness_targets[mask] + pos_centerness = pos_centerness[mask] + pos_anchors = pos_anchors[mask] + pos_bbox_targets = pos_bbox_targets[mask] + pos_bbox_pred = pos_bbox_pred[mask] + + if pos_bbox_targets.shape[0] == 0: + loss_bbox = bbox_pred.sum() * 0 + loss_centerness = centerness.sum() * 0 + centerness_targets = bbox_targets.new_tensor(0.) + return loss_cls, loss_bbox, loss_centerness, \ + centerness_targets.sum() + + # The decoding process takes the offset into consideration. + pos_anchors[:, 2:] += 1 + pos_decode_bbox_pred = self.bbox_coder.decode( + pos_anchors, pos_bbox_pred) + + # regression loss + loss_bbox = self.loss_bbox( + pos_decode_bbox_pred, + pos_bbox_targets, + weight=centerness_targets, + avg_factor=1.0) + + # centerness loss + loss_centerness = self.loss_centerness( + pos_centerness, centerness_targets, avg_factor=avg_factor) + else: + loss_bbox = bbox_pred.sum() * 0 + loss_centerness = centerness.sum() * 0 + centerness_targets = bbox_targets.new_tensor(0.) + + return loss_cls, loss_bbox, loss_centerness, centerness_targets.sum() + + def _get_targets_single(self, + flat_anchors: Tensor, + valid_flags: Tensor, + num_level_anchors: List[int], + gt_instances: InstanceData, + img_meta: dict, + gt_instances_ignore: Optional[InstanceData] = None, + unmap_outputs: bool = True) -> tuple: + """Compute regression, classification targets for anchors in a single + image. + + Args: + flat_anchors (Tensor): Multi-level anchors of the image, which are + concatenated into a single tensor of shape (num_anchors ,4) + valid_flags (Tensor): Multi level valid flags of the image, + which are concatenated into a single tensor of + shape (num_anchors,). + num_level_anchors (List[int]): Number of anchors of each scale + level. + gt_instances (:obj:`InstanceData`): Ground truth of instance + annotations. It usually includes ``bboxes`` and ``labels`` + attributes. + img_meta (dict): Meta information for current image. + gt_instances_ignore (:obj:`InstanceData`, optional): Instances + to be ignored during training. It includes ``bboxes`` attribute + data that is ignored during training and testing. + Defaults to None. + unmap_outputs (bool): Whether to map outputs back to the original + set of anchors. + + Returns: + tuple: N is the number of total anchors in the image. + labels (Tensor): Labels of all anchors in the image with shape + (N,). + label_weights (Tensor): Label weights of all anchor in the + image with shape (N,). + bbox_targets (Tensor): BBox targets of all anchors in the + image with shape (N, 4). + bbox_weights (Tensor): BBox weights of all anchors in the + image with shape (N, 4) + pos_inds (Tensor): Indices of positive anchor with shape + (num_pos,). + neg_inds (Tensor): Indices of negative anchor with shape + (num_neg,). + sampling_result (:obj:`SamplingResult`): Sampling results. + """ + anchors = flat_anchors + # Align the official implementation + anchors[:, 2:] -= 1 + + num_level_anchors_inside = num_level_anchors + pred_instances = InstanceData(priors=anchors) + assign_result = self.assigner.assign(pred_instances, + num_level_anchors_inside, + gt_instances, gt_instances_ignore) + + sampling_result = self.sampler.sample(assign_result, pred_instances, + gt_instances) + + num_valid_anchors = anchors.shape[0] + bbox_targets = torch.zeros_like(anchors) + bbox_weights = torch.zeros_like(anchors) + + # ===== this change ===== + labels = anchors.new_full((num_valid_anchors, self.feat_channels), + 0, + dtype=torch.float32) + label_weights = anchors.new_zeros(num_valid_anchors, dtype=torch.float) + pos_inds = sampling_result.pos_inds + neg_inds = sampling_result.neg_inds + if len(pos_inds) > 0: + if self.reg_decoded_bbox: + pos_bbox_targets = sampling_result.pos_gt_bboxes + else: + pos_bbox_targets = self.bbox_coder.encode( + sampling_result.pos_priors, sampling_result.pos_gt_bboxes) + + bbox_targets[pos_inds, :] = pos_bbox_targets + bbox_weights[pos_inds, :] = 1.0 + + # ===== this change ===== + labels[pos_inds] = gt_instances.positive_maps[ + sampling_result.pos_assigned_gt_inds] + if self.train_cfg['pos_weight'] <= 0: + label_weights[pos_inds] = 1.0 + else: + label_weights[pos_inds] = self.train_cfg['pos_weight'] + if len(neg_inds) > 0: + label_weights[neg_inds] = 1.0 + + return (anchors, labels, label_weights, bbox_targets, bbox_weights, + pos_inds, neg_inds, sampling_result) + + def centerness_target(self, anchors: Tensor, gts: Tensor) -> Tensor: + """Calculate the centerness between anchors and gts. + + Only calculate pos centerness targets, otherwise there may be nan. + + Args: + anchors (Tensor): Anchors with shape (N, 4), "xyxy" format. + gts (Tensor): Ground truth bboxes with shape (N, 4), "xyxy" format. + + Returns: + Tensor: Centerness between anchors and gts. + """ + anchors_cx = (anchors[:, 2] + anchors[:, 0]) / 2 + anchors_cy = (anchors[:, 3] + anchors[:, 1]) / 2 + l_ = anchors_cx - gts[:, 0] + t_ = anchors_cy - gts[:, 1] + r_ = gts[:, 2] - anchors_cx + b_ = gts[:, 3] - anchors_cy + + left_right = torch.stack([l_, r_], dim=1) + top_bottom = torch.stack([t_, b_], dim=1) + centerness = torch.sqrt( + (left_right.min(dim=-1)[0] / left_right.max(dim=-1)[0]) * + (top_bottom.min(dim=-1)[0] / top_bottom.max(dim=-1)[0])) + # assert not torch.isnan(centerness).any() + return centerness def predict(self, visual_feats: Tuple[Tensor], @@ -450,9 +755,9 @@ def predict(self, return predictions def predict_by_feat(self, + cls_logits: List[Tensor], bbox_preds: List[Tensor], score_factors: List[Tensor], - cls_logits: List[Tensor], batch_img_metas: Optional[List[dict]] = None, batch_token_positive_maps: Optional[List[dict]] = None, cfg: Optional[ConfigDict] = None, @@ -466,15 +771,15 @@ def predict_by_feat(self, such as CenterNess in FCOS, IoU branch in ATSS. Args: + cls_logits (list[Tensor]): Classification scores for all + scale levels, each is a 4D-tensor, has shape + (batch_size, num_priors * num_classes, H, W). bbox_preds (list[Tensor]): Box energies / deltas for all scale levels, each is a 4D-tensor, has shape (batch_size, num_priors * 4, H, W). score_factors (list[Tensor], optional): Score factor for all scale level, each is a 4D-tensor, has shape (batch_size, num_priors * 1, H, W). Defaults to None. - cls_logits (list[Tensor]): Classification scores for all - scale levels, each is a 4D-tensor, has shape - (batch_size, num_priors * num_classes, H, W). batch_img_metas (list[dict], Optional): Batch image meta info. Defaults to None. batch_token_positive_maps (list[dict], Optional): Batch token diff --git a/mmdet/models/detectors/glip.py b/mmdet/models/detectors/glip.py index 5f7212f7f40..9b96eda6112 100644 --- a/mmdet/models/detectors/glip.py +++ b/mmdet/models/detectors/glip.py @@ -2,7 +2,7 @@ import copy import re import warnings -from typing import Tuple +from typing import Tuple, Union import torch from torch import Tensor @@ -206,38 +206,41 @@ def __init__(self, self.language_model = MODELS.build(language_model) self._text_prompts = None - self._positive_maps = None + self._token_positive_maps = None self._language_dict_features = None self._entities = None + self._special_tokens = '. ' - def get_tokens_positive_and_prompts( + def get_tokens_and_prompts( self, - original_caption: str, - custom_entities: bool = False) -> Tuple[dict, str]: + original_caption: Union[str, list, tuple], + custom_entities: bool = False) -> Tuple[dict, str, list]: """Get the tokens positive and prompts for the caption.""" if isinstance(original_caption, (list, tuple)) or custom_entities: if custom_entities and isinstance(original_caption, str): - if not original_caption.endswith('.'): - original_caption = original_caption + ' . ' - original_caption = original_caption.split(' . ') + if original_caption.endswith(self._special_tokens): + original_caption = original_caption.replace( + self._special_tokens, '') + original_caption = original_caption.split(self._special_tokens) original_caption = list( filter(lambda x: len(x) > 0, original_caption)) caption_string = '' tokens_positive = [] - seperation_tokens = ' . ' - for word in original_caption: + for idx, word in enumerate(original_caption): tokens_positive.append( [[len(caption_string), len(caption_string) + len(word)]]) caption_string += word - caption_string += seperation_tokens + if idx != len(original_caption) - 1: + caption_string += self._special_tokens tokenized = self.language_model.tokenizer([caption_string], return_tensors='pt') self._entities = original_caption else: - if not original_caption.endswith('.'): - original_caption = original_caption + ' . ' + if original_caption.endswith(self._special_tokens): + original_caption = original_caption.replace( + self._special_tokens, '') tokenized = self.language_model.tokenizer([original_caption], return_tensors='pt') @@ -245,10 +248,78 @@ def get_tokens_positive_and_prompts( self._entities = noun_phrases caption_string = original_caption + return tokenized, caption_string, tokens_positive + + def get_positive_map(self, tokenized, tokens_positive): positive_map = create_positive_map(tokenized, tokens_positive) positive_map_label_to_token = create_positive_map_label_to_token( positive_map, plus=1) - return positive_map_label_to_token, caption_string + return positive_map_label_to_token, positive_map + + def get_tokens_positive_and_prompts( + self, + original_caption: Union[str, list, tuple], + custom_entities: bool = False) -> Tuple[dict, str, Tensor]: + tokenized, caption_string, tokens_positive = \ + self.get_tokens_and_prompts( + original_caption, custom_entities) + positive_map_label_to_token, positive_map = self.get_positive_map( + tokenized, tokens_positive) + return positive_map_label_to_token, caption_string, positive_map + + def loss(self, batch_inputs: Tensor, + batch_data_samples: SampleList) -> Union[dict, list]: + # TODO: Only open vocabulary tasks are supported for training now. + text_prompts = [ + data_samples.text for data_samples in batch_data_samples + ] + + gt_labels = [ + data_samples.gt_instances.labels + for data_samples in batch_data_samples + ] + + new_text_prompts = [] + positive_maps = [] + if len(set(text_prompts)) == 1: + # All the text prompts are the same, + # so there is no need to calculate them multiple times. + tokenized, caption_string, tokens_positive = \ + self.get_tokens_and_prompts( + text_prompts[0], True) + new_text_prompts = [caption_string] * len(batch_inputs) + for gt_label in gt_labels: + new_tokens_positive = [ + tokens_positive[label] for label in gt_label + ] + _, positive_map = self.get_positive_map( + tokenized, new_tokens_positive) + positive_maps.append(positive_map) + else: + for text_prompt, gt_label in zip(text_prompts, gt_labels): + tokenized, caption_string, tokens_positive = \ + self.get_tokens_and_prompts( + text_prompt, True) + new_tokens_positive = [ + tokens_positive[label] for label in gt_label + ] + _, positive_map = self.get_positive_map( + tokenized, new_tokens_positive) + positive_maps.append(positive_map) + new_text_prompts.append(caption_string) + + language_dict_features = self.language_model(new_text_prompts) + for i, data_samples in enumerate(batch_data_samples): + # .bool().float() is very important + positive_map = positive_maps[i].to( + batch_inputs.device).bool().float() + data_samples.gt_instances.positive_maps = positive_map + + visual_features = self.extract_feat(batch_inputs) + + losses = self.bbox_head.loss(visual_features, language_dict_features, + batch_data_samples) + return losses def predict(self, batch_inputs: Tensor, @@ -307,12 +378,13 @@ def predict(self, for text_prompt in text_prompts ] - self._positive_maps, text_prompts = zip( + self._token_positive_maps, text_prompts, _ = zip( *_positive_maps_and_prompts) - self._language_dict_features = self.language_model(text_prompts) + self._language_dict_features = self.language_model( + list(text_prompts)) for i, data_samples in enumerate(batch_data_samples): - data_samples.token_positive_map = self._positive_maps[i] + data_samples.token_positive_map = self._token_positive_maps[i] visual_features = self.extract_feat(batch_inputs) diff --git a/mmdet/models/necks/__init__.py b/mmdet/models/necks/__init__.py index 2194780c853..343fbfefbd8 100644 --- a/mmdet/models/necks/__init__.py +++ b/mmdet/models/necks/__init__.py @@ -8,6 +8,7 @@ from .fpg import FPG from .fpn import FPN from .fpn_carafe import FPN_CARAFE +from .fpn_dropblock import FPN_DropBlock from .hrfpn import HRFPN from .nas_fpn import NASFPN from .nasfcos_fpn import NASFCOS_FPN @@ -21,5 +22,6 @@ __all__ = [ 'FPN', 'BFP', 'ChannelMapper', 'HRFPN', 'NASFPN', 'FPN_CARAFE', 'PAFPN', 'NASFCOS_FPN', 'RFP', 'YOLOV3Neck', 'FPG', 'DilatedEncoder', - 'CTResNetNeck', 'SSDNeck', 'YOLOXPAFPN', 'DyHead', 'CSPNeXtPAFPN', 'SSH' + 'CTResNetNeck', 'SSDNeck', 'YOLOXPAFPN', 'DyHead', 'CSPNeXtPAFPN', 'SSH', + 'FPN_DropBlock' ] diff --git a/mmdet/models/necks/fpn_dropblock.py b/mmdet/models/necks/fpn_dropblock.py new file mode 100644 index 00000000000..473af924cda --- /dev/null +++ b/mmdet/models/necks/fpn_dropblock.py @@ -0,0 +1,90 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from typing import Optional, Tuple + +import torch.nn.functional as F +from torch import Tensor + +from mmdet.registry import MODELS +from .fpn import FPN + + +@MODELS.register_module() +class FPN_DropBlock(FPN): + + def __init__(self, + *args, + plugin: Optional[dict] = dict( + type='DropBlock', + drop_prob=0.3, + block_size=3, + warmup_iters=0), + **kwargs) -> None: + super().__init__(*args, **kwargs) + self.plugin = None + if plugin is not None: + self.plugin = MODELS.build(plugin) + + def forward(self, inputs: Tuple[Tensor]) -> tuple: + """Forward function. + + Args: + inputs (tuple[Tensor]): Features from the upstream network, each + is a 4D-tensor. + + Returns: + tuple: Feature maps, each is a 4D-tensor. + """ + assert len(inputs) == len(self.in_channels) + + # build laterals + laterals = [ + lateral_conv(inputs[i + self.start_level]) + for i, lateral_conv in enumerate(self.lateral_convs) + ] + + # build top-down path + used_backbone_levels = len(laterals) + for i in range(used_backbone_levels - 1, 0, -1): + # In some cases, fixing `scale factor` (e.g. 2) is preferred, but + # it cannot co-exist with `size` in `F.interpolate`. + if 'scale_factor' in self.upsample_cfg: + # fix runtime error of "+=" inplace operation in PyTorch 1.10 + laterals[i - 1] = laterals[i - 1] + F.interpolate( + laterals[i], **self.upsample_cfg) + else: + prev_shape = laterals[i - 1].shape[2:] + laterals[i - 1] = laterals[i - 1] + F.interpolate( + laterals[i], size=prev_shape, **self.upsample_cfg) + + if self.plugin is not None: + laterals[i - 1] = self.plugin(laterals[i - 1]) + + # build outputs + # part 1: from original levels + outs = [ + self.fpn_convs[i](laterals[i]) for i in range(used_backbone_levels) + ] + # part 2: add extra levels + if self.num_outs > len(outs): + # use max pool to get more levels on top of outputs + # (e.g., Faster R-CNN, Mask R-CNN) + if not self.add_extra_convs: + for i in range(self.num_outs - used_backbone_levels): + outs.append(F.max_pool2d(outs[-1], 1, stride=2)) + # add conv layers on top of original feature maps (RetinaNet) + else: + if self.add_extra_convs == 'on_input': + extra_source = inputs[self.backbone_end_level - 1] + elif self.add_extra_convs == 'on_lateral': + extra_source = laterals[-1] + elif self.add_extra_convs == 'on_output': + extra_source = outs[-1] + else: + raise NotImplementedError + outs.append(self.fpn_convs[used_backbone_levels](extra_source)) + for i in range(used_backbone_levels + 1, self.num_outs): + if self.relu_before_extra_convs: + outs.append(self.fpn_convs[i](F.relu(outs[-1]))) + else: + outs.append(self.fpn_convs[i](outs[-1])) + return tuple(outs) diff --git a/mmdet/models/task_modules/assigners/__init__.py b/mmdet/models/task_modules/assigners/__init__.py index a98b0ed499a..bd71020e56e 100644 --- a/mmdet/models/task_modules/assigners/__init__.py +++ b/mmdet/models/task_modules/assigners/__init__.py @@ -7,7 +7,7 @@ from .dynamic_soft_label_assigner import DynamicSoftLabelAssigner from .grid_assigner import GridAssigner from .hungarian_assigner import HungarianAssigner -from .iou2d_calculator import BboxOverlaps2D +from .iou2d_calculator import BboxOverlaps2D, BboxOverlaps2D_GLIP from .match_cost import (BBoxL1Cost, ClassificationCost, CrossEntropyLossCost, DiceCost, FocalLossCost, IoUCost) from .max_iou_assigner import MaxIoUAssigner @@ -26,5 +26,5 @@ 'TaskAlignedAssigner', 'TopkHungarianAssigner', 'BBoxL1Cost', 'ClassificationCost', 'CrossEntropyLossCost', 'DiceCost', 'FocalLossCost', 'IoUCost', 'BboxOverlaps2D', 'DynamicSoftLabelAssigner', - 'MultiInstanceAssigner' + 'MultiInstanceAssigner', 'BboxOverlaps2D_GLIP' ] diff --git a/mmdet/models/task_modules/assigners/iou2d_calculator.py b/mmdet/models/task_modules/assigners/iou2d_calculator.py index 0e85d1e422c..b6daa94feb4 100644 --- a/mmdet/models/task_modules/assigners/iou2d_calculator.py +++ b/mmdet/models/task_modules/assigners/iou2d_calculator.py @@ -66,3 +66,23 @@ def __repr__(self): repr_str = self.__class__.__name__ + f'(' \ f'scale={self.scale}, dtype={self.dtype})' return repr_str + + +@TASK_UTILS.register_module() +class BboxOverlaps2D_GLIP(BboxOverlaps2D): + + def __call__(self, bboxes1, bboxes2, mode='iou', is_aligned=False): + TO_REMOVE = 1 + area1 = (bboxes1[:, 2] - bboxes1[:, 0] + TO_REMOVE) * ( + bboxes1[:, 3] - bboxes1[:, 1] + TO_REMOVE) + area2 = (bboxes2[:, 2] - bboxes2[:, 0] + TO_REMOVE) * ( + bboxes2[:, 3] - bboxes2[:, 1] + TO_REMOVE) + + lt = torch.max(bboxes1[:, None, :2], bboxes2[:, :2]) # [N,M,2] + rb = torch.min(bboxes1[:, None, 2:], bboxes2[:, 2:]) # [N,M,2] + + wh = (rb - lt + TO_REMOVE).clamp(min=0) # [N,M,2] + inter = wh[:, :, 0] * wh[:, :, 1] # [N,M] + + iou = inter / (area1[:, None] + area2 - inter) + return iou diff --git a/mmdet/models/utils/vlfuse_helper.py b/mmdet/models/utils/vlfuse_helper.py index e33c54de749..f6112bf5051 100644 --- a/mmdet/models/utils/vlfuse_helper.py +++ b/mmdet/models/utils/vlfuse_helper.py @@ -2,7 +2,7 @@ # Modified from https://github.com/microsoft/GLIP/blob/main/maskrcnn_benchmark/utils/fuse_helper.py # noqa # and https://github.com/microsoft/GLIP/blob/main/maskrcnn_benchmark/modeling/rpn/modeling_bert.py # noqa import math -from typing import Dict, List, Optional, Tuple +from typing import Dict, Optional, Tuple import torch import torch.nn as nn @@ -94,7 +94,7 @@ def __init__(self, self.l_dim = l_dim assert ( - self.head_dim * self.num_heads == self.embed_dim + self.head_dim * self.num_heads == self.embed_dim ), 'embed_dim must be divisible by num_heads ' \ f'(got `embed_dim`: {self.embed_dim} ' \ f'and `num_heads`: {self.num_heads}).' @@ -288,13 +288,15 @@ def __init__(self, self.gamma_l = nn.Parameter( init_values * torch.ones(l_dim), requires_grad=True) - def forward( - self, - visual_features: Tuple[Tensor], - lang_feature: Tensor, - attention_mask_l: Optional[Tensor] = None - ) -> Tuple[List[Tensor], Tensor]: - + def forward(self, + vf0: Tensor, + vf1: Tensor, + vf2: Tensor, + vf3: Tensor, + vf4: Tensor, + lang_feature: Tensor, + attention_mask_l=None): + visual_features = [vf0, vf1, vf2, vf3, vf4] size_per_level, visual_features_flatten = [], [] for i, feat_per_level in enumerate(visual_features): bs, c, h, w = feat_per_level.shape @@ -310,15 +312,16 @@ def forward( new_v = new_v.transpose(1, 2).contiguous() start = 0 - fusion_visual_features = [] + # fvfs is mean fusion_visual_features + fvfs = [] for (h, w) in size_per_level: new_v_per_level = new_v[:, :, start:start + h * w].view(bs, -1, h, w).contiguous() - fusion_visual_features.append(new_v_per_level) + fvfs.append(new_v_per_level) start += h * w - return fusion_visual_features, new_lang_feature + return fvfs[0], fvfs[1], fvfs[2], fvfs[3], fvfs[4], new_lang_feature def single_attention_call( self, @@ -387,19 +390,23 @@ def forward(self, x: dict) -> dict: language_dict_features = x['lang'] if self.use_checkpoint: - fused_visual_features, language_features = checkpoint.checkpoint( - self.b_attn, visual_features, language_dict_features['hidden'], + # vf is mean visual_features + # checkpoint does not allow complex data structures as input, + # such as list, so we must split them. + vf0, vf1, vf2, vf3, vf4, language_features = checkpoint.checkpoint( + self.b_attn, *visual_features, + language_dict_features['hidden'], language_dict_features['masks']) else: - fused_visual_features, language_features = self.b_attn( - visual_features, language_dict_features['hidden'], + vf0, vf1, vf2, vf3, vf4, language_features = self.b_attn( + *visual_features, language_dict_features['hidden'], language_dict_features['masks']) language_dict_features['hidden'] = language_features fused_language_dict_features = language_dict_features features_dict = { - 'visual': fused_visual_features, + 'visual': [vf0, vf1, vf2, vf3, vf4], 'lang': fused_language_dict_features } From dece85858727e81ffcbdfe23f797ee73c4a2a548 Mon Sep 17 00:00:00 2001 From: RunningLeon Date: Tue, 12 Sep 2023 09:24:15 +0800 Subject: [PATCH 36/63] Update to support torch2onnx for DETR series models (#10910) --- mmdet/models/detectors/deformable_detr.py | 109 +++++++++++++-------- mmdet/models/detectors/detr.py | 37 ++++--- mmdet/models/layers/positional_encoding.py | 37 +++++-- 3 files changed, 121 insertions(+), 62 deletions(-) diff --git a/mmdet/models/detectors/deformable_detr.py b/mmdet/models/detectors/deformable_detr.py index 98ea1c767f5..acab33ba3e3 100644 --- a/mmdet/models/detectors/deformable_detr.py +++ b/mmdet/models/detectors/deformable_detr.py @@ -151,22 +151,37 @@ def pre_transformer( # construct binary masks for the transformer. assert batch_data_samples is not None batch_input_shape = batch_data_samples[0].batch_input_shape - img_shape_list = [sample.img_shape for sample in batch_data_samples] input_img_h, input_img_w = batch_input_shape - masks = mlvl_feats[0].new_ones((batch_size, input_img_h, input_img_w)) - for img_id in range(batch_size): - img_h, img_w = img_shape_list[img_id] - masks[img_id, :img_h, :img_w] = 0 - # NOTE following the official DETR repo, non-zero values representing - # ignored positions, while zero values means valid positions. - - mlvl_masks = [] - mlvl_pos_embeds = [] - for feat in mlvl_feats: - mlvl_masks.append( - F.interpolate(masks[None], - size=feat.shape[-2:]).to(torch.bool).squeeze(0)) - mlvl_pos_embeds.append(self.positional_encoding(mlvl_masks[-1])) + img_shape_list = [sample.img_shape for sample in batch_data_samples] + same_shape_flag = all([ + s[0] == input_img_h and s[1] == input_img_w for s in img_shape_list + ]) + # support torch2onnx without feeding masks + if torch.onnx.is_in_onnx_export() or same_shape_flag: + mlvl_masks = [] + mlvl_pos_embeds = [] + for feat in mlvl_feats: + mlvl_masks.append(None) + mlvl_pos_embeds.append( + self.positional_encoding(None, input=feat)) + else: + masks = mlvl_feats[0].new_ones( + (batch_size, input_img_h, input_img_w)) + for img_id in range(batch_size): + img_h, img_w = img_shape_list[img_id] + masks[img_id, :img_h, :img_w] = 0 + # NOTE following the official DETR repo, non-zero + # values representing ignored positions, while + # zero values means valid positions. + + mlvl_masks = [] + mlvl_pos_embeds = [] + for feat in mlvl_feats: + mlvl_masks.append( + F.interpolate(masks[None], size=feat.shape[-2:]).to( + torch.bool).squeeze(0)) + mlvl_pos_embeds.append( + self.positional_encoding(mlvl_masks[-1])) feat_flatten = [] lvl_pos_embed_flatten = [] @@ -175,13 +190,14 @@ def pre_transformer( for lvl, (feat, mask, pos_embed) in enumerate( zip(mlvl_feats, mlvl_masks, mlvl_pos_embeds)): batch_size, c, h, w = feat.shape + spatial_shape = torch._shape_as_tensor(feat)[2:].to(feat.device) # [bs, c, h_lvl, w_lvl] -> [bs, h_lvl*w_lvl, c] feat = feat.view(batch_size, c, -1).permute(0, 2, 1) pos_embed = pos_embed.view(batch_size, c, -1).permute(0, 2, 1) lvl_pos_embed = pos_embed + self.level_embed[lvl].view(1, 1, -1) # [bs, h_lvl, w_lvl] -> [bs, h_lvl*w_lvl] - mask = mask.flatten(1) - spatial_shape = (h, w) + if mask is not None: + mask = mask.flatten(1) feat_flatten.append(feat) lvl_pos_embed_flatten.append(lvl_pos_embed) @@ -192,17 +208,22 @@ def pre_transformer( feat_flatten = torch.cat(feat_flatten, 1) lvl_pos_embed_flatten = torch.cat(lvl_pos_embed_flatten, 1) # (bs, num_feat_points), where num_feat_points = sum_lvl(h_lvl*w_lvl) - mask_flatten = torch.cat(mask_flatten, 1) + if mask_flatten[0] is not None: + mask_flatten = torch.cat(mask_flatten, 1) + else: + mask_flatten = None - spatial_shapes = torch.as_tensor( # (num_level, 2) - spatial_shapes, - dtype=torch.long, - device=feat_flatten.device) + # (num_level, 2) + spatial_shapes = torch.cat(spatial_shapes).view(-1, 2) level_start_index = torch.cat(( spatial_shapes.new_zeros((1, )), # (num_level) spatial_shapes.prod(1).cumsum(0)[:-1])) - valid_ratios = torch.stack( # (bs, num_level, 2) - [self.get_valid_ratio(m) for m in mlvl_masks], 1) + if mlvl_masks[0] is not None: + valid_ratios = torch.stack( # (bs, num_level, 2) + [self.get_valid_ratio(m) for m in mlvl_masks], 1) + else: + valid_ratios = mlvl_feats[0].new_ones(batch_size, len(mlvl_feats), + 2) encoder_inputs_dict = dict( feat=feat_flatten, @@ -465,39 +486,49 @@ def gen_encoder_output_proposals( bs = memory.size(0) proposals = [] _cur = 0 # start index in the sequence of the current level - for lvl, (H, W) in enumerate(spatial_shapes): - mask_flatten_ = memory_mask[:, - _cur:(_cur + H * W)].view(bs, H, W, 1) - valid_H = torch.sum(~mask_flatten_[:, :, 0, 0], 1).unsqueeze(-1) - valid_W = torch.sum(~mask_flatten_[:, 0, :, 0], 1).unsqueeze(-1) - + for lvl, HW in enumerate(spatial_shapes): + H, W = HW + + if memory_mask is not None: + mask_flatten_ = memory_mask[:, _cur:(_cur + H * W)].view( + bs, H, W, 1) + valid_H = torch.sum(~mask_flatten_[:, :, 0, 0], + 1).unsqueeze(-1) + valid_W = torch.sum(~mask_flatten_[:, 0, :, 0], + 1).unsqueeze(-1) + scale = torch.cat([valid_W, valid_H], 1).view(bs, 1, 1, 2) + else: + if not isinstance(HW, torch.Tensor): + HW = memory.new_tensor(HW) + scale = HW.unsqueeze(0).flip(dims=[0, 1]).view(bs, 1, 1, 2) grid_y, grid_x = torch.meshgrid( torch.linspace( 0, H - 1, H, dtype=torch.float32, device=memory.device), torch.linspace( 0, W - 1, W, dtype=torch.float32, device=memory.device)) grid = torch.cat([grid_x.unsqueeze(-1), grid_y.unsqueeze(-1)], -1) - - scale = torch.cat([valid_W, valid_H], 1).view(bs, 1, 1, 2) grid = (grid.unsqueeze(0).expand(bs, -1, -1, -1) + 0.5) / scale wh = torch.ones_like(grid) * 0.05 * (2.0**lvl) proposal = torch.cat((grid, wh), -1).view(bs, -1, 4) proposals.append(proposal) _cur += (H * W) output_proposals = torch.cat(proposals, 1) - output_proposals_valid = ((output_proposals > 0.01) & - (output_proposals < 0.99)).all( - -1, keepdim=True) + # do not use `all` to make it exportable to onnx + output_proposals_valid = ( + (output_proposals > 0.01) & (output_proposals < 0.99)).sum( + -1, keepdim=True) == output_proposals.shape[-1] # inverse_sigmoid output_proposals = torch.log(output_proposals / (1 - output_proposals)) - output_proposals = output_proposals.masked_fill( - memory_mask.unsqueeze(-1), float('inf')) + if memory_mask is not None: + output_proposals = output_proposals.masked_fill( + memory_mask.unsqueeze(-1), float('inf')) output_proposals = output_proposals.masked_fill( ~output_proposals_valid, float('inf')) output_memory = memory - output_memory = output_memory.masked_fill( - memory_mask.unsqueeze(-1), float(0)) + if memory_mask is not None: + output_memory = output_memory.masked_fill( + memory_mask.unsqueeze(-1), float(0)) output_memory = output_memory.masked_fill(~output_proposals_valid, float(0)) output_memory = self.memory_trans_fc(output_memory) diff --git a/mmdet/models/detectors/detr.py b/mmdet/models/detectors/detr.py index 07fed2951ef..7895e9ecb4e 100644 --- a/mmdet/models/detectors/detr.py +++ b/mmdet/models/detectors/detr.py @@ -83,27 +83,36 @@ def pre_transformer( # construct binary masks which for the transformer. assert batch_data_samples is not None batch_input_shape = batch_data_samples[0].batch_input_shape - img_shape_list = [sample.img_shape for sample in batch_data_samples] - input_img_h, input_img_w = batch_input_shape - masks = feat.new_ones((batch_size, input_img_h, input_img_w)) - for img_id in range(batch_size): - img_h, img_w = img_shape_list[img_id] - masks[img_id, :img_h, :img_w] = 0 - # NOTE following the official DETR repo, non-zero values represent - # ignored positions, while zero values mean valid positions. - - masks = F.interpolate( - masks.unsqueeze(1), size=feat.shape[-2:]).to(torch.bool).squeeze(1) - # [batch_size, embed_dim, h, w] - pos_embed = self.positional_encoding(masks) + img_shape_list = [sample.img_shape for sample in batch_data_samples] + same_shape_flag = all([ + s[0] == input_img_h and s[1] == input_img_w for s in img_shape_list + ]) + if torch.onnx.is_in_onnx_export() or same_shape_flag: + masks = None + # [batch_size, embed_dim, h, w] + pos_embed = self.positional_encoding(masks, input=feat) + else: + masks = feat.new_ones((batch_size, input_img_h, input_img_w)) + for img_id in range(batch_size): + img_h, img_w = img_shape_list[img_id] + masks[img_id, :img_h, :img_w] = 0 + # NOTE following the official DETR repo, non-zero values represent + # ignored positions, while zero values mean valid positions. + + masks = F.interpolate( + masks.unsqueeze(1), + size=feat.shape[-2:]).to(torch.bool).squeeze(1) + # [batch_size, embed_dim, h, w] + pos_embed = self.positional_encoding(masks) # use `view` instead of `flatten` for dynamically exporting to ONNX # [bs, c, h, w] -> [bs, h*w, c] feat = feat.view(batch_size, feat_dim, -1).permute(0, 2, 1) pos_embed = pos_embed.view(batch_size, feat_dim, -1).permute(0, 2, 1) # [bs, h, w] -> [bs, h*w] - masks = masks.view(batch_size, -1) + if masks is not None: + masks = masks.view(batch_size, -1) # prepare transformer_inputs_dict encoder_inputs_dict = dict( diff --git a/mmdet/models/layers/positional_encoding.py b/mmdet/models/layers/positional_encoding.py index b71e8a51c26..87080d81a9f 100644 --- a/mmdet/models/layers/positional_encoding.py +++ b/mmdet/models/layers/positional_encoding.py @@ -1,5 +1,6 @@ # Copyright (c) OpenMMLab. All rights reserved. import math +from typing import Optional import torch import torch.nn as nn @@ -56,36 +57,54 @@ def __init__(self, self.eps = eps self.offset = offset - def forward(self, mask: Tensor) -> Tensor: + def forward(self, mask: Tensor, input: Optional[Tensor] = None) -> Tensor: """Forward function for `SinePositionalEncoding`. Args: mask (Tensor): ByteTensor mask. Non-zero values representing ignored positions, while zero values means valid positions for this image. Shape [bs, h, w]. + input (Tensor, optional): Input image/feature Tensor. + Shape [bs, c, h, w] Returns: pos (Tensor): Returned position embedding with shape [bs, num_feats*2, h, w]. """ - # For convenience of exporting to ONNX, it's required to convert - # `masks` from bool to int. - mask = mask.to(torch.int) - not_mask = 1 - mask # logical_not - y_embed = not_mask.cumsum(1, dtype=torch.float32) - x_embed = not_mask.cumsum(2, dtype=torch.float32) + assert not (mask is None and input is None) + + if mask is not None: + B, H, W = mask.size() + device = mask.device + # For convenience of exporting to ONNX, + # it's required to convert + # `masks` from bool to int. + mask = mask.to(torch.int) + not_mask = 1 - mask # logical_not + y_embed = not_mask.cumsum(1, dtype=torch.float32) + x_embed = not_mask.cumsum(2, dtype=torch.float32) + else: + # single image or batch image with no padding + B, _, H, W = input.shape + device = input.device + x_embed = torch.arange( + 1, W + 1, dtype=torch.float32, device=device) + x_embed = x_embed.view(1, 1, -1).repeat(B, H, 1) + y_embed = torch.arange( + 1, H + 1, dtype=torch.float32, device=device) + y_embed = y_embed.view(1, -1, 1).repeat(B, 1, W) if self.normalize: y_embed = (y_embed + self.offset) / \ (y_embed[:, -1:, :] + self.eps) * self.scale x_embed = (x_embed + self.offset) / \ (x_embed[:, :, -1:] + self.eps) * self.scale dim_t = torch.arange( - self.num_feats, dtype=torch.float32, device=mask.device) + self.num_feats, dtype=torch.float32, device=device) dim_t = self.temperature**(2 * (dim_t // 2) / self.num_feats) pos_x = x_embed[:, :, :, None] / dim_t pos_y = y_embed[:, :, :, None] / dim_t # use `view` instead of `flatten` for dynamically exporting to ONNX - B, H, W = mask.size() + pos_x = torch.stack( (pos_x[:, :, :, 0::2].sin(), pos_x[:, :, :, 1::2].cos()), dim=4).view(B, H, W, -1) From 59b0fc5af458d5636905def42b5d99feef609306 Mon Sep 17 00:00:00 2001 From: Zhao Cake Date: Tue, 12 Sep 2023 09:25:04 +0800 Subject: [PATCH 37/63] [CodeCamp2023-491]Add new configuration files for MaskRCNN algorithm in mmdetection. (#10905) --- .../_base_/models/mask_rcnn_r50_caffe_c4.py | 158 ++++++++++++++++++ .../_base_/models/mask_rcnn_r50_fpn.py | 4 +- mmdet/configs/_base_/schedules/schedule_2x.py | 33 ++++ .../configs/common/lsj_100e_coco_detection.py | 134 +++++++++++++++ .../configs/common/lsj_100e_coco_instance.py | 134 +++++++++++++++ .../configs/common/lsj_200e_coco_detection.py | 25 +++ .../configs/common/lsj_200e_coco_instance.py | 25 +++ mmdet/configs/common/ms_3x_coco.py | 130 ++++++++++++++ mmdet/configs/common/ms_3x_coco_instance.py | 136 +++++++++++++++ mmdet/configs/common/ms_90k_coco.py | 151 +++++++++++++++++ .../common/ms_poly_3x_coco_instance.py | 138 +++++++++++++++ .../common/ms_poly_90k_coco_instance.py | 153 +++++++++++++++++ mmdet/configs/common/ssj_270_coco_instance.py | 158 ++++++++++++++++++ .../common/ssj_scp_270k_coco_instance.py | 70 ++++++++ .../mask_rcnn_r101_caffe_fpn_1x_coco.py | 19 +++ ...ask_rcnn_r101_caffe_fpn_ms_poly_3x_coco.py | 28 ++++ .../mask_rcnn/mask_rcnn_r101_fpn_1x_coco.py | 18 ++ .../mask_rcnn/mask_rcnn_r101_fpn_2x_coco.py | 18 ++ ...sk_rcnn_r101_fpn_8xb8_amp_lsj_200e_coco.py | 18 ++ .../mask_rcnn_r101_fpn_ms_poly_3x_coco.py | 19 +++ ...ask_rcnn_r18_fpn_8xb8_amp_lsj_200e_coco.py | 19 +++ .../mask_rcnn_r50_caffe_c4_1x_coco.py | 13 ++ .../mask_rcnn_r50_caffe_fpn_1x_coco.py | 25 +++ .../mask_rcnn_r50_caffe_fpn_ms_1x_coco.py | 40 +++++ ...mask_rcnn_r50_caffe_fpn_ms_poly_1x_coco.py | 40 +++++ ...mask_rcnn_r50_caffe_fpn_ms_poly_2x_coco.py | 23 +++ ...mask_rcnn_r50_caffe_fpn_ms_poly_3x_coco.py | 23 +++ ...mask_rcnn_r50_caffe_fpn_poly_1x_coco_v1.py | 40 +++++ .../mask_rcnn_r50_fpn_1x_wandb_coco.py | 31 ++++ .../mask_rcnn/mask_rcnn_r50_fpn_2x_coco.py | 13 ++ ...ask_rcnn_r50_fpn_8xb8_amp_lsj_200e_coco.py | 1 + .../mask_rcnn_r50_fpn_amp_1x_coco.py | 14 ++ .../mask_rcnn_r50_fpn_ms_poly_-3x_coco.py | 11 ++ .../mask_rcnn_r50_fpn_poly_1x_coco.py | 23 +++ .../mask_rcnn_x101_32x4d_fpn_1x_coco.py | 28 ++++ .../mask_rcnn_x101_32x4d_fpn_2x_coco.py | 28 ++++ ...ask_rcnn_x101_32x4d_fpn_ms_poly_3x_coco.py | 29 ++++ .../mask_rcnn_x101_32x8d_fpn_1x_coco.py | 31 ++++ ...ask_rcnn_x101_32x8d_fpn_ms_poly_1x_coco.py | 54 ++++++ ...ask_rcnn_x101_32x8d_fpn_ms_poly_3x_coco.py | 34 ++++ .../mask_rcnn_x101_64_4d_fpn_1x_coco.py | 24 +++ .../mask_rcnn_x101_64x4d_fpn_2x_coco.py | 24 +++ ...ask_rcnn_x101_64x4d_fpn_ms_poly_3x_coco.py | 27 +++ 43 files changed, 2163 insertions(+), 1 deletion(-) create mode 100644 mmdet/configs/_base_/models/mask_rcnn_r50_caffe_c4.py create mode 100644 mmdet/configs/_base_/schedules/schedule_2x.py create mode 100644 mmdet/configs/common/lsj_100e_coco_detection.py create mode 100644 mmdet/configs/common/lsj_100e_coco_instance.py create mode 100644 mmdet/configs/common/lsj_200e_coco_detection.py create mode 100644 mmdet/configs/common/lsj_200e_coco_instance.py create mode 100644 mmdet/configs/common/ms_3x_coco.py create mode 100644 mmdet/configs/common/ms_3x_coco_instance.py create mode 100644 mmdet/configs/common/ms_90k_coco.py create mode 100644 mmdet/configs/common/ms_poly_3x_coco_instance.py create mode 100644 mmdet/configs/common/ms_poly_90k_coco_instance.py create mode 100644 mmdet/configs/common/ssj_270_coco_instance.py create mode 100644 mmdet/configs/common/ssj_scp_270k_coco_instance.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r101_caffe_fpn_1x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r101_caffe_fpn_ms_poly_3x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r101_fpn_1x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r101_fpn_2x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r101_fpn_8xb8_amp_lsj_200e_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r101_fpn_ms_poly_3x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r18_fpn_8xb8_amp_lsj_200e_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_c4_1x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_1x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_ms_1x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_ms_poly_1x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_ms_poly_2x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_ms_poly_3x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_poly_1x_coco_v1.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_1x_wandb_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_2x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_8xb8_amp_lsj_200e_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_amp_1x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_ms_poly_-3x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_poly_1x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_1x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_2x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_ms_poly_3x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_1x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_ms_poly_1x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_ms_poly_3x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_x101_64_4d_fpn_1x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_2x_coco.py create mode 100644 mmdet/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_ms_poly_3x_coco.py diff --git a/mmdet/configs/_base_/models/mask_rcnn_r50_caffe_c4.py b/mmdet/configs/_base_/models/mask_rcnn_r50_caffe_c4.py new file mode 100644 index 00000000000..3054818375f --- /dev/null +++ b/mmdet/configs/_base_/models/mask_rcnn_r50_caffe_c4.py @@ -0,0 +1,158 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmcv.ops import RoIAlign, nms +from mmengine.model.weight_init import PretrainedInit +from torch.nn import BatchNorm2d + +from mmdet.models.backbones.resnet import ResNet +from mmdet.models.data_preprocessors.data_preprocessor import \ + DetDataPreprocessor +from mmdet.models.dense_heads.rpn_head import RPNHead +from mmdet.models.detectors.mask_rcnn import MaskRCNN +from mmdet.models.layers import ResLayer +from mmdet.models.losses.cross_entropy_loss import CrossEntropyLoss +from mmdet.models.losses.smooth_l1_loss import L1Loss +from mmdet.models.roi_heads.bbox_heads.bbox_head import BBoxHead +from mmdet.models.roi_heads.mask_heads.fcn_mask_head import FCNMaskHead +from mmdet.models.roi_heads.roi_extractors.single_level_roi_extractor import \ + SingleRoIExtractor +from mmdet.models.roi_heads.standard_roi_head import StandardRoIHead +from mmdet.models.task_modules.assigners.max_iou_assigner import MaxIoUAssigner +from mmdet.models.task_modules.coders.delta_xywh_bbox_coder import \ + DeltaXYWHBBoxCoder +from mmdet.models.task_modules.prior_generators.anchor_generator import \ + AnchorGenerator +from mmdet.models.task_modules.samplers.random_sampler import RandomSampler + +# model settings +norm_cfg = dict(type=BatchNorm2d, requires_grad=False) +# model settings +model = dict( + type=MaskRCNN, + data_preprocessor=dict( + type=DetDataPreprocessor, + mean=[103.530, 116.280, 123.675], + std=[1.0, 1.0, 1.0], + bgr_to_rgb=False, + pad_mask=True, + pad_size_divisor=32), + backbone=dict( + type=ResNet, + depth=50, + num_stages=3, + strides=(1, 2, 2), + dilations=(1, 1, 1), + out_indices=(2, ), + frozen_stages=1, + norm_cfg=dict(type=BatchNorm2d, requires_grad=True), + norm_eval=True, + style='caffe', + init_cfg=dict( + type=PretrainedInit, + checkpoint='open-mmlab://detectron2/resnet50_caffe')), + rpn_head=dict( + type=RPNHead, + in_channels=1024, + feat_channels=1024, + anchor_generator=dict( + type=AnchorGenerator, + scales=[2, 4, 8, 16, 32], + ratios=[0.5, 1.0, 2.0], + strides=[16]), + bbox_coder=dict( + type=DeltaXYWHBBoxCoder, + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0]), + loss_cls=dict( + type=CrossEntropyLoss, use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type=L1Loss, loss_weight=1.0)), + roi_head=dict( + type=StandardRoIHead, + shared_head=dict( + type=ResLayer, + depth=50, + stage=3, + stride=2, + dilation=1, + style='caffe', + norm_cfg=norm_cfg, + norm_eval=True), + bbox_roi_extractor=dict( + type=SingleRoIExtractor, + roi_layer=dict(type=RoIAlign, output_size=14, sampling_ratio=0), + out_channels=1024, + featmap_strides=[16]), + bbox_head=dict( + type=BBoxHead, + with_avg_pool=True, + roi_feat_size=7, + in_channels=2048, + num_classes=80, + bbox_coder=dict( + type=DeltaXYWHBBoxCoder, + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=False, + loss_cls=dict( + type=CrossEntropyLoss, use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type=L1Loss, loss_weight=1.0)), + mask_roi_extractor=None, + mask_head=dict( + type=FCNMaskHead, + num_convs=0, + in_channels=2048, + conv_out_channels=256, + num_classes=80, + loss_mask=dict( + type=CrossEntropyLoss, use_mask=True, loss_weight=1.0))), + # model training and testing settings + train_cfg=dict( + rpn=dict( + assigner=dict( + type=MaxIoUAssigner, + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type=RandomSampler, + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + allowed_border=0, + pos_weight=-1, + debug=False), + rpn_proposal=dict( + nms_pre=12000, + max_per_img=2000, + nms=dict(type=nms, iou_threshold=0.7), + min_bbox_size=0), + rcnn=dict( + assigner=dict( + type=MaxIoUAssigner, + pos_iou_thr=0.5, + neg_iou_thr=0.5, + min_pos_iou=0.5, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type=RandomSampler, + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + mask_size=14, + pos_weight=-1, + debug=False)), + test_cfg=dict( + rpn=dict( + nms_pre=6000, + max_per_img=1000, + nms=dict(type=nms, iou_threshold=0.7), + min_bbox_size=0), + rcnn=dict( + score_thr=0.05, + nms=dict(type=nms, iou_threshold=0.5), + max_per_img=100, + mask_thr_binary=0.5))) diff --git a/mmdet/configs/_base_/models/mask_rcnn_r50_fpn.py b/mmdet/configs/_base_/models/mask_rcnn_r50_fpn.py index 96be6627d02..c8a0b031da5 100644 --- a/mmdet/configs/_base_/models/mask_rcnn_r50_fpn.py +++ b/mmdet/configs/_base_/models/mask_rcnn_r50_fpn.py @@ -1,5 +1,6 @@ # Copyright (c) OpenMMLab. All rights reserved. from mmcv.ops import RoIAlign, nms +from mmengine.model.weight_init import PretrainedInit from torch.nn import BatchNorm2d from mmdet.models.backbones.resnet import ResNet @@ -42,7 +43,8 @@ norm_cfg=dict(type=BatchNorm2d, requires_grad=True), norm_eval=True, style='pytorch', - init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50')), + init_cfg=dict( + type=PretrainedInit, checkpoint='torchvision://resnet50')), neck=dict( type=FPN, in_channels=[256, 512, 1024, 2048], diff --git a/mmdet/configs/_base_/schedules/schedule_2x.py b/mmdet/configs/_base_/schedules/schedule_2x.py new file mode 100644 index 00000000000..51ba09a4723 --- /dev/null +++ b/mmdet/configs/_base_/schedules/schedule_2x.py @@ -0,0 +1,33 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmengine.optim.optimizer.optimizer_wrapper import OptimWrapper +from mmengine.optim.scheduler.lr_scheduler import LinearLR, MultiStepLR +from mmengine.runner.loops import EpochBasedTrainLoop, TestLoop, ValLoop +from torch.optim.sgd import SGD + +# training schedule for 1x +train_cfg = dict(type=EpochBasedTrainLoop, max_epochs=24, val_interval=1) +val_cfg = dict(type=ValLoop) +test_cfg = dict(type=TestLoop) + +# learning rate +param_scheduler = [ + dict(type=LinearLR, start_factor=0.001, by_epoch=False, begin=0, end=500), + dict( + type=MultiStepLR, + begin=0, + end=24, + by_epoch=True, + milestones=[16, 22], + gamma=0.1) +] + +# optimizer +optim_wrapper = dict( + type=OptimWrapper, + optimizer=dict(type=SGD, lr=0.02, momentum=0.9, weight_decay=0.0001)) + +# Default setting for scaling LR automatically +# - `enable` means enable scaling LR automatically +# or not by default. +# - `base_batch_size` = (8 GPUs) x (2 samples per GPU). +auto_scale_lr = dict(enable=False, base_batch_size=16) diff --git a/mmdet/configs/common/lsj_100e_coco_detection.py b/mmdet/configs/common/lsj_100e_coco_detection.py new file mode 100644 index 00000000000..ea2d6bad7f5 --- /dev/null +++ b/mmdet/configs/common/lsj_100e_coco_detection.py @@ -0,0 +1,134 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .._base_.default_runtime import * + +from mmengine.dataset.sampler import DefaultSampler +from mmengine.optim import OptimWrapper +from mmengine.optim.scheduler.lr_scheduler import LinearLR, MultiStepLR +from mmengine.runner.loops import EpochBasedTrainLoop, TestLoop, ValLoop +from torch.optim import SGD + +from mmdet.datasets import CocoDataset, RepeatDataset +from mmdet.datasets.transforms.formatting import PackDetInputs +from mmdet.datasets.transforms.loading import (FilterAnnotations, + LoadAnnotations, + LoadImageFromFile) +from mmdet.datasets.transforms.transforms import (CachedMixUp, CachedMosaic, + Pad, RandomCrop, RandomFlip, + RandomResize, Resize) +from mmdet.evaluation import CocoMetric + +# dataset settings +dataset_type = CocoDataset +data_root = 'data/coco/' +image_size = (1024, 1024) + +backend_args = None + +train_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=LoadAnnotations, with_bbox=True, with_mask=True), + dict( + type=RandomResize, + scale=image_size, + ratio_range=(0.1, 2.0), + keep_ratio=True), + dict( + type=RandomCrop, + crop_type='absolute_range', + crop_size=image_size, + recompute_bbox=True, + allow_negative_crop=True), + dict(type=FilterAnnotations, min_gt_bbox_wh=(1e-2, 1e-2)), + dict(type=RandomFlip, prob=0.5), + dict(type=PackDetInputs) +] +test_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=Resize, scale=(1333, 800), keep_ratio=True), + dict(type=LoadAnnotations, with_bbox=True), + dict( + type=PackDetInputs, + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] + +# Use RepeatDataset to speed up training +train_dataloader = dict( + batch_size=2, + num_workers=2, + persistent_workers=True, + sampler=dict(type=DefaultSampler, shuffle=True), + dataset=dict( + type=RepeatDataset, + times=4, # simply change this from 2 to 16 for 50e - 400e training. + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/instances_train2017.json', + data_prefix=dict(img='train2017/'), + filter_cfg=dict(filter_empty_gt=True, min_size=32), + pipeline=train_pipeline, + backend_args=backend_args))) +val_dataloader = dict( + batch_size=1, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type=DefaultSampler, shuffle=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/instances_val2017.json', + data_prefix=dict(img='val2017/'), + test_mode=True, + pipeline=test_pipeline, + backend_args=backend_args)) +test_dataloader = val_dataloader + +val_evaluator = dict( + type=CocoMetric, + ann_file=data_root + 'annotations/instances_val2017.json', + metric=['bbox', 'segm'], + format_only=False, + backend_args=backend_args) +test_evaluator = val_evaluator + +max_epochs = 25 + +train_cfg = dict( + type=EpochBasedTrainLoop, max_epochs=max_epochs, val_interval=5) +val_cfg = dict(type=ValLoop) +test_cfg = dict(type=TestLoop) + +# optimizer assumes bs=64 +optim_wrapper = dict( + type=OptimWrapper, + optimizer=dict(type=SGD, lr=0.1, momentum=0.9, weight_decay=0.00004)) + +# learning rate +param_scheduler = [ + dict(type=LinearLR, start_factor=0.067, by_epoch=False, begin=0, end=500), + dict( + type=MultiStepLR, + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[22, 24], + gamma=0.1) +] + +# only keep latest 2 checkpoints +default_hooks.update(dict(checkpoint=dict(max_keep_ckpts=2))) + +# NOTE: `auto_scale_lr` is for automatically scaling LR, +# USER SHOULD NOT CHANGE ITS VALUES. +# base_batch_size = (32 GPUs) x (2 samples per GPU) +auto_scale_lr = dict(base_batch_size=64) diff --git a/mmdet/configs/common/lsj_100e_coco_instance.py b/mmdet/configs/common/lsj_100e_coco_instance.py new file mode 100644 index 00000000000..90104ee503b --- /dev/null +++ b/mmdet/configs/common/lsj_100e_coco_instance.py @@ -0,0 +1,134 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .._base_.default_runtime import * + +from mmengine.dataset.sampler import DefaultSampler +from mmengine.optim import OptimWrapper +from mmengine.optim.scheduler.lr_scheduler import LinearLR, MultiStepLR +from mmengine.runner.loops import EpochBasedTrainLoop, TestLoop, ValLoop +from torch.optim import SGD + +from mmdet.datasets import CocoDataset, RepeatDataset +from mmdet.datasets.transforms.formatting import PackDetInputs +from mmdet.datasets.transforms.loading import (FilterAnnotations, + LoadAnnotations, + LoadImageFromFile) +from mmdet.datasets.transforms.transforms import (CachedMixUp, CachedMosaic, + Pad, RandomCrop, RandomFlip, + RandomResize, Resize) +from mmdet.evaluation import CocoMetric + +# dataset settings +dataset_type = CocoDataset +data_root = 'data/coco/' +image_size = (1024, 1024) + +backend_args = None + +train_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=LoadAnnotations, with_bbox=True, with_mask=True), + dict( + type=RandomResize, + scale=image_size, + ratio_range=(0.1, 2.0), + keep_ratio=True), + dict( + type=RandomCrop, + crop_type='absolute_range', + crop_size=image_size, + recompute_bbox=True, + allow_negative_crop=True), + dict(type=FilterAnnotations, min_gt_bbox_wh=(1e-2, 1e-2)), + dict(type=RandomFlip, prob=0.5), + dict(type=PackDetInputs) +] +test_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=Resize, scale=(1333, 800), keep_ratio=True), + dict(type=LoadAnnotations, with_bbox=True, with_mask=True), + dict( + type=PackDetInputs, + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] + +# Use RepeatDataset to speed up training +train_dataloader = dict( + batch_size=2, + num_workers=2, + persistent_workers=True, + sampler=dict(type=DefaultSampler, shuffle=True), + dataset=dict( + type=RepeatDataset, + times=4, # simply change this from 2 to 16 for 50e - 400e training. + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/instances_train2017.json', + data_prefix=dict(img='train2017/'), + filter_cfg=dict(filter_empty_gt=True, min_size=32), + pipeline=train_pipeline, + backend_args=backend_args))) +val_dataloader = dict( + batch_size=1, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type=DefaultSampler, shuffle=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/instances_val2017.json', + data_prefix=dict(img='val2017/'), + test_mode=True, + pipeline=test_pipeline, + backend_args=backend_args)) +test_dataloader = val_dataloader + +val_evaluator = dict( + type=CocoMetric, + ann_file=data_root + 'annotations/instances_val2017.json', + metric=['bbox', 'segm'], + format_only=False, + backend_args=backend_args) +test_evaluator = val_evaluator + +max_epochs = 25 + +train_cfg = dict( + type=EpochBasedTrainLoop, max_epochs=max_epochs, val_interval=5) +val_cfg = dict(type=ValLoop) +test_cfg = dict(type=TestLoop) + +# optimizer assumes bs=64 +optim_wrapper = dict( + type=OptimWrapper, + optimizer=dict(type=SGD, lr=0.1, momentum=0.9, weight_decay=0.00004)) + +# learning rate +param_scheduler = [ + dict(type=LinearLR, start_factor=0.067, by_epoch=False, begin=0, end=500), + dict( + type=MultiStepLR, + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[22, 24], + gamma=0.1) +] + +# only keep latest 2 checkpoints +default_hooks.update(dict(checkpoint=dict(max_keep_ckpts=2))) + +# NOTE: `auto_scale_lr` is for automatically scaling LR, +# USER SHOULD NOT CHANGE ITS VALUES. +# base_batch_size = (32 GPUs) x (2 samples per GPU) +auto_scale_lr = dict(base_batch_size=64) diff --git a/mmdet/configs/common/lsj_200e_coco_detection.py b/mmdet/configs/common/lsj_200e_coco_detection.py new file mode 100644 index 00000000000..5759499e95d --- /dev/null +++ b/mmdet/configs/common/lsj_200e_coco_detection.py @@ -0,0 +1,25 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .lsj_100e_coco_detection import * + +# 8x25=200e +train_dataloader.update(dict(dataset=dict(times=8))) + +# learning rate +param_scheduler = [ + dict(type=LinearLR, start_factor=0.067, by_epoch=False, begin=0, end=1000), + dict( + type=MultiStepLR, + begin=0, + end=25, + by_epoch=True, + milestones=[22, 24], + gamma=0.1) +] diff --git a/mmdet/configs/common/lsj_200e_coco_instance.py b/mmdet/configs/common/lsj_200e_coco_instance.py new file mode 100644 index 00000000000..77c5cdd44c4 --- /dev/null +++ b/mmdet/configs/common/lsj_200e_coco_instance.py @@ -0,0 +1,25 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .lsj_100e_coco_instance import * + +# 8x25=200e +train_dataloader.update(dict(dataset=dict(times=8))) + +# learning rate +param_scheduler = [ + dict(type=LinearLR, start_factor=0.067, by_epoch=False, begin=0, end=1000), + dict( + type=MultiStepLR, + begin=0, + end=25, + by_epoch=True, + milestones=[22, 24], + gamma=0.1) +] diff --git a/mmdet/configs/common/ms_3x_coco.py b/mmdet/configs/common/ms_3x_coco.py new file mode 100644 index 00000000000..c32b24d96ae --- /dev/null +++ b/mmdet/configs/common/ms_3x_coco.py @@ -0,0 +1,130 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .._base_.default_runtime import * + +from mmcv.transforms import RandomResize +from mmengine.dataset import RepeatDataset +from mmengine.dataset.sampler import DefaultSampler +from mmengine.optim import OptimWrapper +from mmengine.optim.scheduler.lr_scheduler import LinearLR, MultiStepLR +from mmengine.runner.loops import EpochBasedTrainLoop, TestLoop, ValLoop +from torch.optim import SGD + +from mmdet.datasets import AspectRatioBatchSampler, CocoDataset +from mmdet.datasets.transforms.formatting import PackDetInputs +from mmdet.datasets.transforms.loading import (LoadAnnotations, + LoadImageFromFile) +from mmdet.datasets.transforms.transforms import RandomFlip, Resize +from mmdet.evaluation import CocoMetric + +# dataset settings +dataset_type = CocoDataset +data_root = 'data/coco/' + +# Example to use different file client +# Method 1: simply set the data root and let the file I/O module +# automatically infer from prefix (not support LMDB and Memcache yet) + +# data_root = 's3://openmmlab/datasets/detection/coco/' + +# Method 2: Use `backend_args`, `file_client_args` in versions before 3.0.0rc6 +# backend_args = dict( +# backend='petrel', +# path_mapping=dict({ +# './data/': 's3://openmmlab/datasets/detection/', +# 'data/': 's3://openmmlab/datasets/detection/' +# })) +backend_args = None + +# In mstrain 3x config, img_scale=[(1333, 640), (1333, 800)], +# multiscale_mode='range' +train_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=LoadAnnotations, with_bbox=True), + dict(type=RandomResize, scale=[(1333, 640), (1333, 800)], keep_ratio=True), + dict(type=RandomFlip, prob=0.5), + dict(type=PackDetInputs) +] +test_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=Resize, scale=(1333, 800), keep_ratio=True), + dict(type=LoadAnnotations, with_bbox=True), + dict( + type=PackDetInputs, + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] +train_dataloader = dict( + batch_size=2, + num_workers=2, + persistent_workers=True, + pin_memory=True, + sampler=dict(type=DefaultSampler, shuffle=True), + batch_sampler=dict(type=AspectRatioBatchSampler), + dataset=dict( + type=RepeatDataset, + times=3, + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/instances_train2017.json', + data_prefix=dict(img='train2017/'), + filter_cfg=dict(filter_empty_gt=True, min_size=32), + pipeline=train_pipeline, + backend_args=backend_args))) +val_dataloader = dict( + batch_size=1, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type=DefaultSampler, shuffle=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/instances_val2017.json', + data_prefix=dict(img='val2017/'), + test_mode=True, + pipeline=test_pipeline, + backend_args=backend_args)) +test_dataloader = val_dataloader + +val_evaluator = dict( + type=CocoMetric, + ann_file=data_root + 'annotations/instances_val2017.json', + metric='bbox', + backend_args=backend_args) +test_evaluator = val_evaluator + +# training schedule for 3x with `RepeatDataset` +train_cfg = dict(type=EpochBasedTrainLoop, max_iters=12, val_interval=1) +val_cfg = dict(type=ValLoop) +test_cfg = dict(type=TestLoop) + +# learning rate +param_scheduler = [ + dict(type=LinearLR, start_factor=0.001, by_epoch=False, begin=0, end=500), + dict( + type=MultiStepLR, + begin=0, + end=12, + by_epoch=False, + milestones=[9, 11], + gamma=0.1) +] + +# optimizer +optim_wrapper = dict( + type=OptimWrapper, + optimizer=dict(type=SGD, lr=0.02, momentum=0.9, weight_decay=0.0001)) +# Default setting for scaling LR automatically +# - `enable` means enable scaling LR automatically +# or not by default. +# - `base_batch_size` = (8 GPUs) x (2 samples per GPU). +auto_scale_lr = dict(enable=False, base_batch_size=16) diff --git a/mmdet/configs/common/ms_3x_coco_instance.py b/mmdet/configs/common/ms_3x_coco_instance.py new file mode 100644 index 00000000000..3c78909df80 --- /dev/null +++ b/mmdet/configs/common/ms_3x_coco_instance.py @@ -0,0 +1,136 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .._base_.default_runtime import * + +from mmcv.transforms import RandomChoiceResize +from mmengine.dataset import RepeatDataset +from mmengine.dataset.sampler import DefaultSampler, InfiniteSampler +from mmengine.optim import OptimWrapper +from mmengine.optim.scheduler.lr_scheduler import LinearLR, MultiStepLR +from mmengine.runner.loops import IterBasedTrainLoop, TestLoop, ValLoop +from torch.optim import SGD + +from mmdet.datasets import AspectRatioBatchSampler, CocoDataset +from mmdet.datasets.transforms.formatting import PackDetInputs +from mmdet.datasets.transforms.loading import (FilterAnnotations, + LoadAnnotations, + LoadImageFromFile) +from mmdet.datasets.transforms.transforms import (CachedMixUp, CachedMosaic, + Pad, RandomCrop, RandomFlip, + RandomResize, Resize) +from mmdet.evaluation import CocoMetric + +# dataset settings +dataset_type = CocoDataset +data_root = 'data/coco/' + +# Example to use different file client +# Method 1: simply set the data root and let the file I/O module +# automatically infer from prefix (not support LMDB and Memcache yet) + +# data_root = 's3://openmmlab/datasets/detection/coco/' + +# Method 2: Use `backend_args`, `file_client_args` in versions before 3.0.0rc6 +# backend_args = dict( +# backend='petrel', +# path_mapping=dict({ +# './data/': 's3://openmmlab/datasets/detection/', +# 'data/': 's3://openmmlab/datasets/detection/' +# })) +backend_args = None + +train_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=LoadAnnotations, with_bbox=True, with_mask=True), + dict( + type='RandomResize', scale=[(1333, 640), (1333, 800)], + keep_ratio=True), + dict(type=RandomFlip, prob=0.5), + dict(type=PackDetInputs) +] +test_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=Resize, scale=(1333, 800), keep_ratio=True), + dict(type=LoadAnnotations, with_bbox=True, with_mask=True), + dict( + type=PackDetInputs, + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] +train_dataloader.update( + dict( + batch_size=2, + num_workers=2, + persistent_workers=True, + sampler=dict(type=DefaultSampler, shuffle=True), + batch_sampler=dict(type=AspectRatioBatchSampler), + dataset=dict( + type=RepeatDataset, + times=3, + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/instances_train2017.json', + data_prefix=dict(img='train2017/'), + filter_cfg=dict(filter_empty_gt=True, min_size=32), + pipeline=train_pipeline, + backend_args=backend_args)))) +val_dataloader.update( + dict( + batch_size=1, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type=DefaultSampler, shuffle=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/instances_val2017.json', + data_prefix=dict(img='val2017/'), + test_mode=True, + pipeline=test_pipeline, + backend_args=backend_args))) +test_dataloader = val_dataloader + +val_evaluator.update( + dict( + type=CocoMetric, + ann_file=data_root + 'annotations/instances_val2017.json', + metric='bbox', + backend_args=backend_args)) +test_evaluator = val_evaluator + +# training schedule for 3x with `RepeatDataset` +train_cfg.update(dict(type=EpochBasedTrainLoop, max_epochs=12, val_interval=1)) +val_cfg.update(dict(type=ValLoop)) +test_cfg.update(dict(type=TestLoop)) + +# learning rate +param_scheduler = [ + dict(type=LinearLR, start_factor=0.001, by_epoch=False, begin=0, end=500), + dict( + type=MultiStepLR, + begin=0, + end=12, + by_epoch=False, + milestones=[9, 11], + gamma=0.1) +] + +# optimizer +optim_wrapper.update( + dict( + type=OptimWrapper, + optimizer=dict(type=SGD, lr=0.02, momentum=0.9, weight_decay=0.0001))) +# Default setting for scaling LR automatically +# - `enable` means enable scaling LR automatically +# or not by default. +# - `base_batch_size` = (8 GPUs) x (2 samples per GPU). +auto_scale_lr.update(dict(enable=False, base_batch_size=16)) diff --git a/mmdet/configs/common/ms_90k_coco.py b/mmdet/configs/common/ms_90k_coco.py new file mode 100644 index 00000000000..3abf1d4a4a8 --- /dev/null +++ b/mmdet/configs/common/ms_90k_coco.py @@ -0,0 +1,151 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .._base_.default_runtime import * + +from mmcv.transforms import RandomChoiceResize +from mmengine.dataset import RepeatDataset +from mmengine.dataset.sampler import DefaultSampler, InfiniteSampler +from mmengine.optim import OptimWrapper +from mmengine.optim.scheduler.lr_scheduler import LinearLR, MultiStepLR +from mmengine.runner.loops import IterBasedTrainLoop, TestLoop, ValLoop +from torch.optim import SGD + +from mmdet.datasets import AspectRatioBatchSampler, CocoDataset +from mmdet.datasets.transforms.formatting import PackDetInputs +from mmdet.datasets.transforms.loading import (FilterAnnotations, + LoadAnnotations, + LoadImageFromFile) +from mmdet.datasets.transforms.transforms import (CachedMixUp, CachedMosaic, + Pad, RandomCrop, RandomFlip, + RandomResize, Resize) +from mmdet.evaluation import CocoMetric + +# dataset settings +dataset_type = CocoDataset +data_root = 'data/coco/' +# Example to use different file client +# Method 1: simply set the data root and let the file I/O module +# automatically infer from prefix (not support LMDB and Memcache yet) + +# data_root = 's3://openmmlab/datasets/detection/coco/' + +# Method 2: Use `backend_args`, `file_client_args` in versions before 3.0.0rc6 +# backend_args = dict( +# backend='petrel', +# path_mapping=dict({ +# './data/': 's3://openmmlab/datasets/detection/', +# 'data/': 's3://openmmlab/datasets/detection/' +# })) +backend_args = None + +# Align with Detectron2 +backend = 'pillow' +train_pipeline = [ + dict( + type=LoadImageFromFile, + backend_args=backend_args, + imdecode_backend=backend), + dict(type=LoadAnnotations, with_bbox=True), + dict( + type=RandomChoiceResize, + scales=[(1333, 640), (1333, 672), (1333, 704), (1333, 736), + (1333, 768), (1333, 800)], + keep_ratio=True, + backend=backend), + dict(type=RandomFlip, prob=0.5), + dict(type=PackDetInputs) +] +test_pipeline = [ + dict( + type=LoadImageFromFile, + backend_args=backend_args, + imdecode_backend=backend), + dict(type=Resize, scale=(1333, 800), keep_ratio=True, backend=backend), + dict(type=LoadAnnotations, with_bbox=True), + dict( + type=PackDetInputs, + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] +train_dataloader.update( + dict( + batch_size=2, + num_workers=2, + persistent_workers=True, + pin_memory=True, + sampler=dict(type=InfiniteSampler, shuffle=True), + batch_sampler=dict(type=AspectRatioBatchSampler), + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/instances_train2017.json', + data_prefix=dict(img='train2017/'), + filter_cfg=dict(filter_empty_gt=True, min_size=32), + pipeline=train_pipeline, + backend_args=backend_args))) +val_dataloader.update( + dict( + batch_size=1, + num_workers=2, + persistent_workers=True, + drop_last=False, + pin_memory=True, + sampler=dict(type=DefaultSampler, shuffle=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/instances_val2017.json', + data_prefix=dict(img='val2017/'), + test_mode=True, + pipeline=test_pipeline, + backend_args=backend_args))) +test_dataloader = val_dataloader + +val_evaluator.update( + dict( + type=CocoMetric, + ann_file=data_root + 'annotations/instances_val2017.json', + metric='bbox', + format_only=False, + backend_args=backend_args)) +test_evaluator = val_evaluator + +# training schedule for 90k +max_iter = 90000 +train_cfg.update( + dict(type=IterBasedTrainLoop, max_iters=max_iter, val_interval=10000)) +val_cfg.update(dict(type=ValLoop)) +test_cfg.update(dict(type=TestLoop)) + +# learning rate +param_scheduler = [ + dict(type=LinearLR, start_factor=0.001, by_epoch=False, begin=0, end=1000), + dict( + type=MultiStepLR, + begin=0, + end=max_iter, + by_epoch=False, + milestones=[60000, 80000], + gamma=0.1) +] + +# optimizer +optim_wrapper.update( + dict( + type=OptimWrapper, + optimizer=dict(type=SGD, lr=0.02, momentum=0.9, weight_decay=0.0001))) +# Default setting for scaling LR automatically +# - `enable` means enable scaling LR automatically +# or not by default. +# - `base_batch_size` = (8 GPUs) x (2 samples per GPU). +auto_scale_lr.update(dict(enable=False, base_batch_size=16)) + +default_hooks.update(dict(checkpoint=dict(by_epoch=False, interval=10000))) +log_processor.update(dict(by_epoch=False)) diff --git a/mmdet/configs/common/ms_poly_3x_coco_instance.py b/mmdet/configs/common/ms_poly_3x_coco_instance.py new file mode 100644 index 00000000000..53913a059a4 --- /dev/null +++ b/mmdet/configs/common/ms_poly_3x_coco_instance.py @@ -0,0 +1,138 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .._base_.default_runtime import * + +from mmcv.transforms import RandomChoiceResize +from mmengine.dataset import RepeatDataset +from mmengine.dataset.sampler import DefaultSampler, InfiniteSampler +from mmengine.optim import OptimWrapper +from mmengine.optim.scheduler.lr_scheduler import LinearLR, MultiStepLR +from mmengine.runner.loops import IterBasedTrainLoop, TestLoop, ValLoop +from torch.optim import SGD + +from mmdet.datasets import AspectRatioBatchSampler, CocoDataset +from mmdet.datasets.transforms.formatting import PackDetInputs +from mmdet.datasets.transforms.loading import (FilterAnnotations, + LoadAnnotations, + LoadImageFromFile) +from mmdet.datasets.transforms.transforms import (CachedMixUp, CachedMosaic, + Pad, RandomCrop, RandomFlip, + RandomResize, Resize) +from mmdet.evaluation import CocoMetric + +# dataset settings +dataset_type = CocoDataset +data_root = 'data/coco/' +# Example to use different file client +# Method 1: simply set the data root and let the file I/O module +# automatically infer from prefix (not support LMDB and Memcache yet) + +# data_root = 's3://openmmlab/datasets/detection/coco/' + +# Method 2: Use `backend_args`, `file_client_args` in versions before 3.0.0rc6 +# backend_args = dict( +# backend='petrel', +# path_mapping=dict({ +# './data/': 's3://openmmlab/datasets/detection/', +# 'data/': 's3://openmmlab/datasets/detection/' +# })) +backend_args = None + +# In mstrain 3x config, img_scale=[(1333, 640), (1333, 800)], +# multiscale_mode='range' +train_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict( + type=LoadAnnotations, with_bbox=True, with_mask=True, poly2mask=False), + dict( + type='RandomResize', scale=[(1333, 640), (1333, 800)], + keep_ratio=True), + dict(type=RandomFlip, prob=0.5), + dict(type=PackDetInputs) +] +test_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=Resize, scale=(1333, 800), keep_ratio=True), + dict( + type=LoadAnnotations, with_bbox=True, with_mask=True, poly2mask=False), + dict( + type=PackDetInputs, + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] +train_dataloader.update( + dict( + batch_size=2, + num_workers=2, + persistent_workers=True, + pin_memory=True, + sampler=dict(type=DefaultSampler, shuffle=True), + batch_sampler=dict(type=AspectRatioBatchSampler), + dataset=dict( + type=RepeatDataset, + data_root=data_root, + ann_file='annotations/instances_train2017.json', + data_prefix=dict(img='train2017/'), + filter_cfg=dict(filter_empty_gt=True, min_size=32), + pipeline=train_pipeline, + backend_args=backend_args))) +val_dataloader.update( + dict( + batch_size=2, + num_workers=2, + persistent_workers=True, + drop_last=False, + pin_memory=True, + sampler=dict(type=DefaultSampler, shuffle=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/instances_val2017.json', + data_prefix=dict(img='val2017/'), + test_mode=True, + pipeline=test_pipeline, + backend_args=backend_args))) +test_dataloader = val_dataloader + +val_evaluator.update( + dict( + type=CocoMetric, + ann_file=data_root + 'annotations/instances_val2017.json', + metric=['bbox', 'segm'], + backend_args=backend_args)) +test_evaluator = val_evaluator + +# training schedule for 3x with `RepeatDataset` +train_cfg.update(dict(type=EpochBasedTrainLoop, max_iters=12, val_interval=1)) +val_cfg.update(dict(type=ValLoop)) +test_cfg.update(dict(type=TestLoop)) + +# learning rate +param_scheduler = [ + dict(type=LinearLR, start_factor=0.001, by_epoch=False, begin=0, end=500), + dict( + type=MultiStepLR, + begin=0, + end=12, + by_epoch=False, + milestones=[9, 11], + gamma=0.1) +] + +# optimizer +optim_wrapper.update( + dict( + type=OptimWrapper, + optimizer=dict(type=SGD, lr=0.02, momentum=0.9, weight_decay=0.0001))) +# Default setting for scaling LR automatically +# - `enable` means enable scaling LR automatically +# or not by default. +# - `base_batch_size` = (8 GPUs) x (2 samples per GPU). +auto_scale_lr.update(dict(enable=False, base_batch_size=16)) diff --git a/mmdet/configs/common/ms_poly_90k_coco_instance.py b/mmdet/configs/common/ms_poly_90k_coco_instance.py new file mode 100644 index 00000000000..52367350137 --- /dev/null +++ b/mmdet/configs/common/ms_poly_90k_coco_instance.py @@ -0,0 +1,153 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .._base_.default_runtime import * + +from mmcv.transforms import RandomChoiceResize +from mmengine.dataset import RepeatDataset +from mmengine.dataset.sampler import DefaultSampler, InfiniteSampler +from mmengine.optim import OptimWrapper +from mmengine.optim.scheduler.lr_scheduler import LinearLR, MultiStepLR +from mmengine.runner.loops import IterBasedTrainLoop, TestLoop, ValLoop +from torch.optim import SGD + +from mmdet.datasets import AspectRatioBatchSampler, CocoDataset +from mmdet.datasets.transforms.formatting import PackDetInputs +from mmdet.datasets.transforms.loading import (FilterAnnotations, + LoadAnnotations, + LoadImageFromFile) +from mmdet.datasets.transforms.transforms import (CachedMixUp, CachedMosaic, + Pad, RandomCrop, RandomFlip, + RandomResize, Resize) +from mmdet.evaluation import CocoMetric + +# dataset settings +dataset_type = CocoDataset +data_root = 'data/coco/' +# Example to use different file client +# Method 1: simply set the data root and let the file I/O module +# automatically infer from prefix (not support LMDB and Memcache yet) + +# data_root = 's3://openmmlab/datasets/detection/coco/' + +# Method 2: Use `backend_args`, `file_client_args` in versions before 3.0.0rc6 +# backend_args = dict( +# backend='petrel', +# path_mapping=dict({ +# './data/': 's3://openmmlab/datasets/detection/', +# 'data/': 's3://openmmlab/datasets/detection/' +# })) +backend_args = None + +# Align with Detectron2 +backend = 'pillow' +train_pipeline = [ + dict( + type=LoadImageFromFile, + backend_args=backend_args, + imdecode_backend=backend), + dict( + type=LoadAnnotations, with_bbox=True, with_mask=True, poly2mask=False), + dict( + type=RandomChoiceResize, + scales=[(1333, 640), (1333, 672), (1333, 704), (1333, 736), + (1333, 768), (1333, 800)], + keep_ratio=True, + backend=backend), + dict(type=RandomFlip, prob=0.5), + dict(type=PackDetInputs) +] +test_pipeline = [ + dict( + type=LoadImageFromFile, + backend_args=backend_args, + imdecode_backend=backend), + dict(type=Resize, scale=(1333, 800), keep_ratio=True, backend=backend), + dict( + type=LoadAnnotations, with_bbox=True, with_mask=True, poly2mask=False), + dict( + type=PackDetInputs, + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] +train_dataloader.update( + dict( + batch_size=2, + num_workers=2, + persistent_workers=True, + pin_memory=True, + sampler=dict(type=InfiniteSampler, shuffle=True), + batch_sampler=dict(type=AspectRatioBatchSampler), + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/instances_train2017.json', + data_prefix=dict(img='train2017/'), + filter_cfg=dict(filter_empty_gt=True, min_size=32), + pipeline=train_pipeline, + backend_args=backend_args))) +val_dataloader.update( + dict( + batch_size=1, + num_workers=2, + persistent_workers=True, + drop_last=False, + pin_memory=True, + sampler=dict(type=DefaultSampler, shuffle=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/instances_val2017.json', + data_prefix=dict(img='val2017/'), + test_mode=True, + pipeline=test_pipeline, + backend_args=backend_args))) +test_dataloader = val_dataloader + +val_evaluator.update( + dict( + type=CocoMetric, + ann_file=data_root + 'annotations/instances_val2017.json', + metric=['bbox', 'segm'], + format_only=False, + backend_args=backend_args)) +test_evaluator = val_evaluator + +# training schedule for 90k +max_iter = 90000 +train_cfg.update( + dict(type=IterBasedTrainLoop, max_iters=max_iter, val_interval=10000)) +val_cfg.update(dict(type=ValLoop)) +test_cfg.update(dict(type=TestLoop)) + +# learning rate +param_scheduler = [ + dict(type=LinearLR, start_factor=0.001, by_epoch=False, begin=0, end=1000), + dict( + type=MultiStepLR, + begin=0, + end=max_iter, + by_epoch=False, + milestones=[60000, 80000], + gamma=0.1) +] + +# optimizer +optim_wrapper.update( + dict( + type=OptimWrapper, + optimizer=dict(type=SGD, lr=0.02, momentum=0.9, weight_decay=0.0001))) +# Default setting for scaling LR automatically +# - `enable` means enable scaling LR automatically +# or not by default. +# - `base_batch_size` = (8 GPUs) x (2 samples per GPU). +auto_scale_lr.update(dict(enable=False, base_batch_size=16)) + +default_hooks.update(dict(checkpoint=dict(by_epoch=False, interval=10000))) +log_processor.update(dict(by_epoch=False)) diff --git a/mmdet/configs/common/ssj_270_coco_instance.py b/mmdet/configs/common/ssj_270_coco_instance.py new file mode 100644 index 00000000000..ee86fdad4ec --- /dev/null +++ b/mmdet/configs/common/ssj_270_coco_instance.py @@ -0,0 +1,158 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .._base_.default_runtime import * + +from mmcv.transforms import RandomChoiceResize +from mmengine.dataset import RepeatDataset +from mmengine.dataset.sampler import DefaultSampler, InfiniteSampler +from mmengine.optim import OptimWrapper +from mmengine.optim.scheduler.lr_scheduler import LinearLR, MultiStepLR +from mmengine.runner.loops import IterBasedTrainLoop, TestLoop, ValLoop +from torch.optim import SGD + +from mmdet.datasets import AspectRatioBatchSampler, CocoDataset +from mmdet.datasets.transforms.formatting import PackDetInputs +from mmdet.datasets.transforms.loading import (FilterAnnotations, + LoadAnnotations, + LoadImageFromFile) +from mmdet.datasets.transforms.transforms import (CachedMixUp, CachedMosaic, + Pad, RandomCrop, RandomFlip, + RandomResize, Resize) +from mmdet.evaluation import CocoMetric + +# dataset settings +dataset_type = CocoDataset +data_root = 'data/coco/' +# Example to use different file client +# Method 1: simply set the data root and let the file I/O module +# automatically infer from prefix (not support LMDB and Memcache yet) + +# data_root = 's3://openmmlab/datasets/detection/coco/' + +# Method 2: Use `backend_args`, `file_client_args` in versions before 3.0.0rc6 +# backend_args = dict( +# backend='petrel', +# path_mapping=dict({ +# './data/': 's3://openmmlab/datasets/detection/', +# 'data/': 's3://openmmlab/datasets/detection/' +# })) +backend_args = None + +# Standard Scale Jittering (SSJ) resizes and crops an image +# with a resize range of 0.8 to 1.25 of the original image size. +train_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=LoadAnnotations, with_bbox=True, with_mask=True), + dict( + type=RandomResize, + scale=image_size, + ratio_range=(0.8, 1.25), + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=image_size, + recompute_bbox=True, + allow_negative_crop=True), + dict(type='FilterAnnotations', min_gt_bbox_wh=(1e-2, 1e-2)), + dict(type=RandomFlip, prob=0.5), + dict(type=PackDetInputs) +] +test_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=Resize, scale=(1333, 800), keep_ratio=True), + dict(type=LoadAnnotations, with_bbox=True, with_mask=True), + dict( + type=PackDetInputs, + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] +train_dataloader.update( + dict( + batch_size=2, + num_workers=2, + persistent_workers=True, + sampler=dict(type=InfiniteSampler), + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/instances_train2017.json', + data_prefix=dict(img='train2017/'), + filter_cfg=dict(filter_empty_gt=True, min_size=32), + pipeline=train_pipeline, + backend_args=backend_args))) +val_dataloader.update( + dict( + batch_size=1, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type=DefaultSampler, shuffle=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/instances_val2017.json', + data_prefix=dict(img='val2017/'), + test_mode=True, + pipeline=test_pipeline, + backend_args=backend_args))) +test_dataloader = val_dataloader + +val_evaluator.update( + dict( + type=CocoMetric, + ann_file=data_root + 'annotations/instances_val2017.json', + metric=['bbox', 'segm'], + format_only=False, + backend_args=backend_args)) +test_evaluator = val_evaluator + +val_evaluator = dict( + type=CocoMetric, + ann_file=data_root + 'annotations/instances_val2017.json', + metric=['bbox', 'segm'], + format_only=False, + backend_args=backend_args) +test_evaluator = val_evaluator + +# The model is trained by 270k iterations with batch_size 64, +# which is roughly equivalent to 144 epochs. + +max_iter = 270000 +train_cfg.update( + dict(type=IterBasedTrainLoop, max_iters=max_iter, val_interval=10000)) +val_cfg.update(dict(type=ValLoop)) +test_cfg.update(dict(type=TestLoop)) + +# learning rate +param_scheduler = [ + dict(type=LinearLR, start_factor=0.001, by_epoch=False, begin=0, end=1000), + dict( + type=MultiStepLR, + begin=0, + end=max_iter, + by_epoch=False, + milestones=[243000, 256500, 263250], + gamma=0.1) +] + +# optimizer +optim_wrapper.update( + dict( + type=OptimWrapper, + optimizer=dict(type=SGD, lr=0.1, momentum=0.9, weight_decay=0.00004))) +# Default setting for scaling LR automatically +# - `enable` means enable scaling LR automatically +# or not by default. +# - `base_batch_size` = (8 GPUs) x (2 samples per GPU). +auto_scale_lr.update(dict(base_batch_size=64)) + +default_hooks.update(dict(checkpoint=dict(by_epoch=False, interval=10000))) +log_processor.update(dict(by_epoch=False)) diff --git a/mmdet/configs/common/ssj_scp_270k_coco_instance.py b/mmdet/configs/common/ssj_scp_270k_coco_instance.py new file mode 100644 index 00000000000..68bb1f0904f --- /dev/null +++ b/mmdet/configs/common/ssj_scp_270k_coco_instance.py @@ -0,0 +1,70 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .ssj_270_coco_instance import * + +from mmdet.datasets import MultiImageMixDataset +from mmdet.datasets.transforms import CopyPaste + +# dataset settings +dataset_type = CocoDataset +data_root = 'data/coco/' +image_size = (1024, 1024) +# Example to use different file client +# Method 1: simply set the data root and let the file I/O module +# automatically infer from prefix (not support LMDB and Memcache yet) + +# data_root = 's3://openmmlab/datasets/detection/coco/' + +# Method 2: Use `backend_args`, `file_client_args` in versions before 3.0.0rc6 +# backend_args = dict( +# backend='petrel', +# path_mapping=dict({ +# './data/': 's3://openmmlab/datasets/detection/', +# 'data/': 's3://openmmlab/datasets/detection/' +# })) +backend_args = None + +# Standard Scale Jittering (SSJ) resizes and crops an image +# with a resize range of 0.8 to 1.25 of the original image size. +load_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=LoadAnnotations, with_bbox=True, with_mask=True), + dict( + type=RandomResize, + scale=image_size, + ratio_range=(0.8, 1.25), + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=image_size, + recompute_bbox=True, + allow_negative_crop=True), + dict(type='FilterAnnotations', min_gt_bbox_wh=(1e-2, 1e-2)), + dict(type=RandomFlip, prob=0.5), + dict(type=Pad, size=image_size), +] +train_pipeline = [ + dict(type=CopyPaste, max_num_pasted=100), + dict(type=PackDetInputs) +] + +train_dataloader.update( + dict( + type=MultiImageMixDataset, + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/instances_train2017.json', + data_prefix=dict(img='train2017/'), + filter_cfg=dict(filter_empty_gt=True, min_size=32), + pipeline=load_pipeline, + backend_args=backend_args), + pipeline=train_pipeline)) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r101_caffe_fpn_1x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r101_caffe_fpn_1x_coco.py new file mode 100644 index 00000000000..2780f4afddc --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r101_caffe_fpn_1x_coco.py @@ -0,0 +1,19 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .mask_rcnn_r50_fpn_poly_1x_coco import * + +from mmengine.model.weight_init import PretrainedInit + +model = dict( + backbone=dict( + depth=101, + init_cfg=dict( + type=PretrainedInit, + checkpoint='open-mmlab://detectron2/resnet101_caffe'))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r101_caffe_fpn_ms_poly_3x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r101_caffe_fpn_ms_poly_3x_coco.py new file mode 100644 index 00000000000..8a1badfc4f0 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r101_caffe_fpn_ms_poly_3x_coco.py @@ -0,0 +1,28 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from ..common.ms_poly_3x_coco_instance import * + from .._base_.models.mask_rcnn_r50_fpn import * + +from mmengine.model.weight_init import PretrainedInit + +model = dict( + # use caffe img_norm + data_preprocessor=dict( + mean=[103.530, 116.280, 123.675], + std=[1.0, 1.0, 1.0], + bgr_to_rgb=False), + backbone=dict( + depth=101, + norm_cfg=dict(requires_grad=False), + norm_eval=True, + style='caffe', + init_cfg=dict( + type=PretrainedInit, + checkpoint='open-mmlab://detectron2/resnet101_caffe'))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r101_fpn_1x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r101_fpn_1x_coco.py new file mode 100644 index 00000000000..6770cec8eeb --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r101_fpn_1x_coco.py @@ -0,0 +1,18 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .._base_.models.mask_rcnn_r50_fpn import * + +from mmengine.model.weight_init import PretrainedInit + +model = dict( + backbone=dict( + depth=101, + init_cfg=dict( + type=PretrainedInit, checkpoint='torchvision://resnet101'))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r101_fpn_2x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r101_fpn_2x_coco.py new file mode 100644 index 00000000000..fd2aafb912c --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r101_fpn_2x_coco.py @@ -0,0 +1,18 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .mask_rcnn_r50_fpn_2x_coco import * + +from mmengine.model.weight_init import PretrainedInit + +model = dict( + backbone=dict( + depth=101, + init_cfg=dict( + type=PretrainedInit, checkpoint='torchvision://resnet101'))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r101_fpn_8xb8_amp_lsj_200e_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r101_fpn_8xb8_amp_lsj_200e_coco.py new file mode 100644 index 00000000000..665808d5dc4 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r101_fpn_8xb8_amp_lsj_200e_coco.py @@ -0,0 +1,18 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .mask_rcnn_r18_fpn_8xb8_amp_lsj_200e_coco import * + +from mmengine.model.weight_init import PretrainedInit + +model = dict( + backbone=dict( + depth=101, + init_cfg=dict( + type=PretrainedInit, checkpoint='torchvision://resnet101'))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r101_fpn_ms_poly_3x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r101_fpn_ms_poly_3x_coco.py new file mode 100644 index 00000000000..14688795963 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r101_fpn_ms_poly_3x_coco.py @@ -0,0 +1,19 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from ..common.ms_poly_3x_coco_instance import * + from .._base_.models.mask_rcnn_r50_fpn import * + +from mmengine.model.weight_init import PretrainedInit + +model = dict( + backbone=dict( + depth=101, + init_cfg=dict( + type=PretrainedInit, checkpoint='torchvision://resnet101'))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r18_fpn_8xb8_amp_lsj_200e_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r18_fpn_8xb8_amp_lsj_200e_coco.py new file mode 100644 index 00000000000..67bd86fa0e8 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r18_fpn_8xb8_amp_lsj_200e_coco.py @@ -0,0 +1,19 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .mask_rcnn_r50_fpn_8xb8_amp_lsj_200e_coco import * + +from mmengine.model.weight_init import PretrainedInit + +model = dict( + backbone=dict( + depth=18, + init_cfg=dict( + type=PretrainedInit, checkpoint='torchvision://resnet18')), + neck=dict(in_channels=[64, 128, 256, 512])) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_c4_1x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_c4_1x_coco.py new file mode 100644 index 00000000000..494e6ba593e --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_c4_1x_coco.py @@ -0,0 +1,13 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .._base_.datasets.coco_instance import * + from .._base_.default_runtime import * + from .._base_.models.mask_rcnn_r50_caffe_c4 import * + from .._base_.schedules.schedule_1x import * diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_1x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_1x_coco.py new file mode 100644 index 00000000000..6481fcfd49e --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_1x_coco.py @@ -0,0 +1,25 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .mask_rcnn_r50_fpn_1x_coco import * + +from mmengine.model.weight_init import PretrainedInit + +model = dict( + # use caffe img_norm + data_preprocessor=dict( + mean=[103.530, 116.280, 123.675], + std=[1.0, 1.0, 1.0], + bgr_to_rgb=False), + backbone=dict( + norm_cfg=dict(requires_grad=False), + style='caffe', + init_cfg=dict( + type=PretrainedInit, + checkpoint='open-mmlab://detectron2/resnet50_caffe'))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_ms_1x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_ms_1x_coco.py new file mode 100644 index 00000000000..5952ed587a4 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_ms_1x_coco.py @@ -0,0 +1,40 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .mask_rcnn_r50_fpn_1x_coco import * + +from mmcv.transforms import RandomChoiceResize +from mmengine.model.weight_init import PretrainedInit + +model = dict( + # use caffe img_norm + data_preprocessor=dict( + mean=[103.530, 116.280, 123.675], + std=[1.0, 1.0, 1.0], + bgr_to_rgb=False), + backbone=dict( + norm_cfg=dict(requires_grad=False), + style='caffe', + init_cfg=dict( + type=PretrainedInit, + checkpoint='open-mmlab://detectron2/resnet50_caffe'))) + +train_pipeline = [ + dict(type=LoadImageFromFile, backend_args={{_base_.backend_args}}), + dict(type=LoadAnnotations, with_bbox=True, with_mask=True), + dict( + type=RandomChoiceResize, + scales=[(1333, 640), (1333, 672), (1333, 704), (1333, 736), + (1333, 768), (1333, 800)], + keep_ratio=True), + dict(type=RandomFlip, prob=0.5), + dict(type=PackDetInputs), +] + +train_dataloader.update(dict(dataset=dict(pipeline=train_pipeline))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_ms_poly_1x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_ms_poly_1x_coco.py new file mode 100644 index 00000000000..d62b9ebe958 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_ms_poly_1x_coco.py @@ -0,0 +1,40 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .mask_rcnn_r50_fpn_1x_coco import * + +from mmcv.transforms import RandomChoiceResize +from mmengine.model.weight_init import PretrainedInit + +model = dict( + # use caffe img_norm + data_preprocessor=dict( + mean=[103.530, 116.280, 123.675], + std=[1.0, 1.0, 1.0], + bgr_to_rgb=False), + backbone=dict( + norm_cfg=dict(requires_grad=False), + style='caffe', + init_cfg=dict( + type=PretrainedInit, + checkpoint='open-mmlab://detectron2/resnet50_caffe'))) +train_pipeline = [ + dict(type=LoadImageFromFile, backend_args={{_base_.backend_args}}), + dict( + type=LoadAnnotations, with_bbox=True, with_mask=True, poly2mask=False), + dict( + type=RandomChoiceResize, + scales=[(1333, 640), (1333, 672), (1333, 704), (1333, 736), + (1333, 768), (1333, 800)], + keep_ratio=True), + dict(type=RandomFlip, prob=0.5), + dict(type=PackDetInputs) +] + +train_dataloader.update(dict(dataset=dict(pipeline=train_pipeline))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_ms_poly_2x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_ms_poly_2x_coco.py new file mode 100644 index 00000000000..fa41b7e00ca --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_ms_poly_2x_coco.py @@ -0,0 +1,23 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .mask_rcnn_r50_caffe_fpn_ms_poly_1x_coco import * + +train_cfg = dict(max_epochs=24) +# learning rate +param_scheduler = [ + dict(type=LinearLR, start_factor=0.001, by_epoch=False, begin=0, end=500), + dict( + type=MultiStepLR, + begin=0, + end=24, + by_epoch=True, + milestones=[16, 22], + gamma=0.1) +] diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_ms_poly_3x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_ms_poly_3x_coco.py new file mode 100644 index 00000000000..c5f9b977b2d --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_ms_poly_3x_coco.py @@ -0,0 +1,23 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .mask_rcnn_r50_caffe_fpn_ms_poly_1x_coco import * + +train_cfg = dict(max_epochs=36) +# learning rate +param_scheduler = [ + dict(type=LinearLR, start_factor=0.001, by_epoch=False, begin=0, end=500), + dict( + type=MultiStepLR, + begin=0, + end=24, + by_epoch=True, + milestones=[28, 34], + gamma=0.1) +] diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_poly_1x_coco_v1.py b/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_poly_1x_coco_v1.py new file mode 100644 index 00000000000..28ba7c77ddf --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_poly_1x_coco_v1.py @@ -0,0 +1,40 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .mask_rcnn_r50_fpn_1x_coco import * + +from mmengine.model.weight_init import PretrainedInit + +from mmdet.models.losses import SmoothL1Loss + +model = dict( + # use caffe img_norm + data_preprocessor=dict( + mean=[103.530, 116.280, 123.675], + std=[1.0, 1.0, 1.0], + bgr_to_rgb=False), + backbone=dict( + norm_cfg=dict(requires_grad=False), + style='caffe', + init_cfg=dict( + type=PretrainedInit, + checkpoint='open-mmlab://detectron2/resnet50_caffe')), + rpn_head=dict( + loss_bbox=dict(type=SmoothL1Loss, beta=1.0 / 9.0, loss_weight=1.0)), + roi_head=dict( + bbox_roi_extractor=dict( + roi_layer=dict( + type=RoIAlign, output_size=7, sampling_ratio=2, + aligned=False)), + bbox_head=dict( + loss_bbox=dict(type=SmoothL1Loss, beta=1.0, loss_weight=1.0)), + mask_roi_extractor=dict( + roi_layer=dict( + type=RoIAlign, output_size=14, sampling_ratio=2, + aligned=False)))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_1x_wandb_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_1x_wandb_coco.py new file mode 100644 index 00000000000..d2c08765412 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_1x_wandb_coco.py @@ -0,0 +1,31 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .._base_.datasets.coco_instance import * + from .._base_.default_runtime import * + from .._base_.models.mask_rcnn_r50_fpn import * + from .._base_.schedules.schedule_1x import * + +from mmengine.visualization import LocalVisBackend, WandbVisBackend + +vis_backends.update(dict(type=WandbVisBackend)) +vis_backends.update(dict(type=LocalVisBackend)) +visualizer.update(dict(vis_backends=vis_backends)) + +# MMEngine support the following two ways, users can choose +# according to convenience +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +default_hooks.update(dict(checkpoint=dict(interval=4))) + +train_cfg.update(dict(val_interval=2)) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_2x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_2x_coco.py new file mode 100644 index 00000000000..6be010b4508 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_2x_coco.py @@ -0,0 +1,13 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .._base_.datasets.coco_instance import * + from .._base_.default_runtime import * + from .._base_.models.mask_rcnn_r50_fpn import * + from .._base_.schedules.schedule_2x import * diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_8xb8_amp_lsj_200e_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_8xb8_amp_lsj_200e_coco.py new file mode 100644 index 00000000000..ef101fec61e --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_8xb8_amp_lsj_200e_coco.py @@ -0,0 +1 @@ +# Copyright (c) OpenMMLab. All rights reserved. diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_amp_1x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_amp_1x_coco.py new file mode 100644 index 00000000000..110c3c47542 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_amp_1x_coco.py @@ -0,0 +1,14 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .mask_rcnn_r50_fpn_1x_coco import * + +from mmengine.optim.optimizer.amp_optimizer_wrapper import AmpOptimWrapper + +optim_wrapper.update(dict(type=AmpOptimWrapper)) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_ms_poly_-3x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_ms_poly_-3x_coco.py new file mode 100644 index 00000000000..ff4eec6d2be --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_ms_poly_-3x_coco.py @@ -0,0 +1,11 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .._base_.models.mask_rcnn_r50_fpn import * + from ..common.ms_poly_3x_coco_instance import * diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_poly_1x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_poly_1x_coco.py new file mode 100644 index 00000000000..012e711cb96 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_r50_fpn_poly_1x_coco.py @@ -0,0 +1,23 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .._base_.datasets.coco_instance import * + from .._base_.default_runtime import * + from .._base_.models.mask_rcnn_r50_fpn import * + from .._base_.schedules.schedule_1x import * + +train_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict( + type=LoadAnnotations, with_bbox=True, with_mask=True, poly2mask=False), + dict(type=Resize, scale=(1333, 800), keep_ratio=True), + dict(type=RandomFlip, prob=0.5), + dict(type=PackDetInputs), +] +train_dataloader.update(dict(dataset=dict(pipeline=train_pipeline))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_1x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_1x_coco.py new file mode 100644 index 00000000000..5429b1bd5a6 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_1x_coco.py @@ -0,0 +1,28 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .mask_rcnn_r101_fpn_1x_coco import * + +from mmengine.model.weight_init import PretrainedInit + +from mmdet.models.backbones.resnext import ResNeXt + +model = dict( + backbone=dict( + type=ResNeXt, + depth=101, + groups=32, + base_width=4, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type=BatchNorm2d, requires_grad=True), + style='pytorch', + init_cfg=dict( + type=PretrainedInit, checkpoint='open-mmlab://resnext101_32x4d'))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_2x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_2x_coco.py new file mode 100644 index 00000000000..ebae6c1dbc3 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_2x_coco.py @@ -0,0 +1,28 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .mask_rcnn_r50_fpn_2x_coco import * + +from mmengine.model.weight_init import PretrainedInit + +from mmdet.models import ResNeXt + +model = dict( + backbone=dict( + type=ResNeXt, + depth=101, + groups=32, + base_width=4, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type=BatchNorm2d, requires_grad=True), + style='pytorch', + init_cfg=dict( + type=PretrainedInit, checkpoint='open-mmlab://resnext101_32x4d'))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_ms_poly_3x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_ms_poly_3x_coco.py new file mode 100644 index 00000000000..aff45d89f35 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_ms_poly_3x_coco.py @@ -0,0 +1,29 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from ..common.ms_poly_3x_coco_instance import * + from .._base_.models.mask_rcnn_r50_fpn import * + +from mmengine.model.weight_init import PretrainedInit + +from mmdet.models.backbones import ResNeXt + +model = dict( + backbone=dict( + type=ResNeXt, + depth=101, + groups=32, + base_width=4, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type=BatchNorm2d, requires_grad=True), + style='pytorch', + init_cfg=dict( + type=PretrainedInit, checkpoint='open-mmlab://resnext101_32x4d'))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_1x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_1x_coco.py new file mode 100644 index 00000000000..d9f2095dc2d --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_1x_coco.py @@ -0,0 +1,31 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .mask_rcnn_x101_32x4d_fpn_1x_coco import * + +model = dict( + # ResNeXt-101-32x8d model trained with Caffe2 at FB, + # so the mean and std need to be changed. + data_preprocessor=dict( + mean=[103.530, 116.280, 123.675], + std=[57.375, 57.120, 58.395], + bgr_to_rgb=False), + backbone=dict( + type=ResNeXt, + depth=101, + groups=32, + base_width=8, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type=BatchNorm2d, requires_grad=False), + style='pytorch', + init_cfg=dict( + type=PretrainedInit, + checkpoint='open-mmlab://detectron2/resnext101_32x8d'))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_ms_poly_1x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_ms_poly_1x_coco.py new file mode 100644 index 00000000000..8eded941751 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_ms_poly_1x_coco.py @@ -0,0 +1,54 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .mask_rcnn_r101_fpn_1x_coco import * + +from mmcv.transforms import RandomChoiceResize, RandomFlip +from mmcv.transforms.loading import LoadImageFromFile + +from mmdet.datasets.transforms.formatting import PackDetInputs +from mmdet.datasets.transforms.loading import LoadAnnotations +from mmdet.models.backbones import ResNeXt + +model = dict( + # ResNeXt-101-32x8d model trained with Caffe2 at FB, + # so the mean and std need to be changed. + data_preprocessor=dict( + mean=[103.530, 116.280, 123.675], + std=[57.375, 57.120, 58.395], + bgr_to_rgb=False), + backbone=dict( + type=ResNeXt, + depth=101, + groups=32, + base_width=8, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type=BatchNorm2d, requires_grad=False), + style='pytorch', + init_cfg=dict( + type=PretrainedInit, + checkpoint='open-mmlab://detectron2/resnext101_32x8d'))) + +backend_args = None +train_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict( + type=LoadAnnotations, with_bbox=True, with_mask=True, poly2mask=False), + dict( + type=RandomChoiceResize, + scales=[(1333, 640), (1333, 672), (1333, 704), (1333, 736), + (1333, 768), (1333, 800)], + keep_ratio=True), + dict(type=RandomFlip, prob=0.5), + dict(type=PackDetInputs), +] + +train_dataloader = dict(dataset=dict(pipeline=train_pipeline)) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_ms_poly_3x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_ms_poly_3x_coco.py new file mode 100644 index 00000000000..b3f584675f6 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_ms_poly_3x_coco.py @@ -0,0 +1,34 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from ..common.ms_poly_3x_coco_instance import * + from .._base_.models.mask_rcnn_r50_fpn import * + +from mmdet.models.backbones import ResNeXt + +model = dict( + # ResNeXt-101-32x8d model trained with Caffe2 at FB, + # so the mean and std need to be changed. + data_preprocessor=dict( + mean=[103.530, 116.280, 123.675], + std=[57.375, 57.120, 58.395], + bgr_to_rgb=False), + backbone=dict( + type=ResNeXt, + depth=101, + groups=32, + base_width=8, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type=BatchNorm2d, requires_grad=False), + style='pytorch', + init_cfg=dict( + type=PretrainedInit, + checkpoint='open-mmlab://detectron2/resnext101_32x8d'))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_x101_64_4d_fpn_1x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_x101_64_4d_fpn_1x_coco.py new file mode 100644 index 00000000000..8bb6f636e64 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_x101_64_4d_fpn_1x_coco.py @@ -0,0 +1,24 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .mask_rcnn_x101_32x4d_fpn_1x_coco import * + +model = dict( + backbone=dict( + type=ResNeXt, + depth=101, + groups=64, + base_width=4, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type=BatchNorm2d, requires_grad=True), + style='pytorch', + init_cfg=dict( + type=PretrainedInit, checkpoint='open-mmlab://resnext101_64x4d'))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_2x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_2x_coco.py new file mode 100644 index 00000000000..d661076dcf3 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_2x_coco.py @@ -0,0 +1,24 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .mask_rcnn_x101_32x4d_fpn_2x_coco import * + +model = dict( + backbone=dict( + type=ResNeXt, + depth=101, + groups=64, + base_width=4, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type=BatchNorm2d, requires_grad=True), + style='pytorch', + init_cfg=dict( + type=PretrainedInit, checkpoint='open-mmlab://resnext101_64x4d'))) diff --git a/mmdet/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_ms_poly_3x_coco.py b/mmdet/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_ms_poly_3x_coco.py new file mode 100644 index 00000000000..d9ab3643ec2 --- /dev/null +++ b/mmdet/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_ms_poly_3x_coco.py @@ -0,0 +1,27 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from ..common.ms_poly_3x_coco_instance import * + from .._base_.models.mask_rcnn_r50_fpn import * + +from mmdet.models.backbones import ResNeXt + +model = dict( + backbone=dict( + type=ResNeXt, + depth=101, + groups=64, + base_width=4, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type=BatchNorm2d, requires_grad=True), + style='pytorch', + init_cfg=dict( + type=PretrainedInit, checkpoint='open-mmlab://resnext101_64x4d'))) From 769c810227247cd7e8b3a7d4c2856881ab9d830c Mon Sep 17 00:00:00 2001 From: Morty-Xu <41822399+Morty-Xu@users.noreply.github.com> Date: Tue, 12 Sep 2023 09:28:08 +0800 Subject: [PATCH 38/63] [CodeCamp2023-504]Add a new script to support the WBF Co-authored-by: huanghaian --- demo/demo_multi_model.py | 212 +++++++++++++++++++++ docs/en/user_guides/useful_tools.md | 74 ++++++++ docs/zh_cn/user_guides/useful_tools.md | 74 ++++++++ mmdet/models/utils/__init__.py | 3 +- mmdet/models/utils/wbf.py | 250 +++++++++++++++++++++++++ tools/analysis_tools/fuse_results.py | 142 ++++++++++++++ 6 files changed, 754 insertions(+), 1 deletion(-) create mode 100644 demo/demo_multi_model.py create mode 100644 mmdet/models/utils/wbf.py create mode 100644 tools/analysis_tools/fuse_results.py diff --git a/demo/demo_multi_model.py b/demo/demo_multi_model.py new file mode 100644 index 00000000000..f7935de6f90 --- /dev/null +++ b/demo/demo_multi_model.py @@ -0,0 +1,212 @@ +# Copyright (c) OpenMMLab. All rights reserved. +"""Support for multi-model fusion, and currently only the Weighted Box Fusion +(WBF) fusion method is supported. + +References: https://github.com/ZFTurbo/Weighted-Boxes-Fusion + +Example: + + python demo/demo_multi_model.py demo/demo.jpg \ + ./configs/faster_rcnn/faster-rcnn_r50-caffe_fpn_1x_coco.py \ + ./configs/retinanet/retinanet_r50-caffe_fpn_1x_coco.py \ + --checkpoints \ + https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_caffe_fpn_1x_coco/faster_rcnn_r50_caffe_fpn_1x_coco_bbox_mAP-0.378_20200504_180032-c5925ee5.pth \ # noqa + https://download.openmmlab.com/mmdetection/v2.0/retinanet/retinanet_r50_caffe_fpn_1x_coco/retinanet_r50_caffe_fpn_1x_coco_20200531-f11027c5.pth \ + --weights 1 2 +""" + +import argparse +import os.path as osp + +import mmcv +import mmengine +from mmengine.fileio import isdir, join_path, list_dir_or_file +from mmengine.logging import print_log +from mmengine.structures import InstanceData + +from mmdet.apis import DetInferencer +from mmdet.models.utils import weighted_boxes_fusion +from mmdet.registry import VISUALIZERS +from mmdet.structures import DetDataSample + +IMG_EXTENSIONS = ('.jpg', '.jpeg', '.png', '.ppm', '.bmp', '.pgm', '.tif', + '.tiff', '.webp') + + +def parse_args(): + parser = argparse.ArgumentParser( + description='MMDetection multi-model inference demo') + parser.add_argument( + 'inputs', type=str, help='Input image file or folder path.') + parser.add_argument( + 'config', + type=str, + nargs='*', + help='Config file(s), support receive multiple files') + parser.add_argument( + '--checkpoints', + type=str, + nargs='*', + help='Checkpoint file(s), support receive multiple files, ' + 'remember to correspond to the above config', + ) + parser.add_argument( + '--weights', + type=float, + nargs='*', + default=None, + help='weights for each model, remember to ' + 'correspond to the above config') + parser.add_argument( + '--fusion-iou-thr', + type=float, + default=0.55, + help='IoU value for boxes to be a match in wbf') + parser.add_argument( + '--skip-box-thr', + type=float, + default=0.0, + help='exclude boxes with score lower than this variable in wbf') + parser.add_argument( + '--conf-type', + type=str, + default='avg', # avg, max, box_and_model_avg, absent_model_aware_avg + help='how to calculate confidence in weighted boxes in wbf') + parser.add_argument( + '--out-dir', + type=str, + default='outputs', + help='Output directory of images or prediction results.') + parser.add_argument( + '--device', default='cuda:0', help='Device used for inference') + parser.add_argument( + '--pred-score-thr', + type=float, + default=0.3, + help='bbox score threshold') + parser.add_argument( + '--batch-size', type=int, default=1, help='Inference batch size.') + parser.add_argument( + '--show', + action='store_true', + help='Display the image in a popup window.') + parser.add_argument( + '--no-save-vis', + action='store_true', + help='Do not save detection vis results') + parser.add_argument( + '--no-save-pred', + action='store_true', + help='Do not save detection json results') + parser.add_argument( + '--palette', + default='none', + choices=['coco', 'voc', 'citys', 'random', 'none'], + help='Color palette used for visualization') + + args = parser.parse_args() + + if args.no_save_vis and args.no_save_pred: + args.out_dir = '' + + return args + + +def main(): + args = parse_args() + + results = [] + cfg_visualizer = None + dataset_meta = None + + inputs = [] + filename_list = [] + if isdir(args.inputs): + dir = list_dir_or_file( + args.inputs, list_dir=False, suffix=IMG_EXTENSIONS) + for filename in dir: + img = mmcv.imread(join_path(args.inputs, filename)) + inputs.append(img) + filename_list.append(filename) + else: + img = mmcv.imread(args.inputs) + inputs.append(img) + img_name = osp.basename(args.inputs) + filename_list.append(img_name) + + for i, (config, + checkpoint) in enumerate(zip(args.config, args.checkpoints)): + inferencer = DetInferencer( + config, checkpoint, device=args.device, palette=args.palette) + + result_raw = inferencer( + inputs=inputs, + batch_size=args.batch_size, + no_save_vis=True, + pred_score_thr=args.pred_score_thr) + + if i == 0: + cfg_visualizer = inferencer.cfg.visualizer + dataset_meta = inferencer.model.dataset_meta + results = [{ + 'bboxes_list': [], + 'scores_list': [], + 'labels_list': [] + } for _ in range(len(result_raw['predictions']))] + + for res, raw in zip(results, result_raw['predictions']): + res['bboxes_list'].append(raw['bboxes']) + res['scores_list'].append(raw['scores']) + res['labels_list'].append(raw['labels']) + + visualizer = VISUALIZERS.build(cfg_visualizer) + visualizer.dataset_meta = dataset_meta + + for i in range(len(results)): + bboxes, scores, labels = weighted_boxes_fusion( + results[i]['bboxes_list'], + results[i]['scores_list'], + results[i]['labels_list'], + weights=args.weights, + iou_thr=args.fusion_iou_thr, + skip_box_thr=args.skip_box_thr, + conf_type=args.conf_type) + + pred_instances = InstanceData() + pred_instances.bboxes = bboxes + pred_instances.scores = scores + pred_instances.labels = labels + + fusion_result = DetDataSample(pred_instances=pred_instances) + + img_name = filename_list[i] + + if not args.no_save_pred: + out_json_path = ( + args.out_dir + '/preds/' + img_name.split('.')[0] + '.json') + mmengine.dump( + { + 'labels': labels.tolist(), + 'scores': scores.tolist(), + 'bboxes': bboxes.tolist() + }, out_json_path) + + out_file = osp.join(args.out_dir, 'vis', + img_name) if not args.no_save_vis else None + + visualizer.add_datasample( + img_name, + inputs[i][..., ::-1], + data_sample=fusion_result, + show=args.show, + draw_gt=False, + wait_time=0, + pred_score_thr=args.pred_score_thr, + out_file=out_file) + + if not args.no_save_vis: + print_log(f'results have been saved at {args.out_dir}') + + +if __name__ == '__main__': + main() diff --git a/docs/en/user_guides/useful_tools.md b/docs/en/user_guides/useful_tools.md index eb626624f6e..8a79f0c2f1b 100644 --- a/docs/en/user_guides/useful_tools.md +++ b/docs/en/user_guides/useful_tools.md @@ -111,6 +111,80 @@ python tools/analysis_tools/analyze_results.py \ --show-score-thr 0.3 ``` +## Fusing results from multiple models + +`tools/analysis_tools/fusion_results.py` can fusing predictions using Weighted Boxes Fusion(WBF) from different object detection models. (Currently support coco format only) + +**Usage** + +```shell +python tools/analysis_tools/fuse_results.py \ + ${PRED_RESULTS} \ + [--annotation ${ANNOTATION}] \ + [--weights ${WEIGHTS}] \ + [--fusion-iou-thr ${FUSION_IOU_THR}] \ + [--skip-box-thr ${SKIP_BOX_THR}] \ + [--conf-type ${CONF_TYPE}] \ + [--eval-single ${EVAL_SINGLE}] \ + [--save-fusion-results ${SAVE_FUSION_RESULTS}] \ + [--out-dir ${OUT_DIR}] +``` + +Description of all arguments: + +- `pred-results`: Paths of detection results from different models.(Currently support coco format only) +- `--annotation`: Path of ground-truth. +- `--weights`: List of weights for each model. Default: `None`, which means weight == 1 for each model. +- `--fusion-iou-thr`: IoU value for boxes to be a match。Default: `0.55`。 +- `--skip-box-thr`: The confidence threshold that needs to be excluded in the WBF algorithm. bboxes whose confidence is less than this value will be excluded.。Default: `0`。 +- `--conf-type`: How to calculate confidence in weighted boxes. + - `avg`: average value,default. + - `max`: maximum value. + - `box_and_model_avg`: box and model wise hybrid weighted average. + - `absent_model_aware_avg`: weighted average that takes into account the absent model. +- `--eval-single`: Whether evaluate every single model. Default: `False`. +- `--save-fusion-results`: Whether save fusion results. Default: `False`. +- `--out-dir`: Path of fusion results. + +**Examples**: +Assume that you have got 3 result files from corresponding models through `tools/test.py`, which paths are './faster-rcnn_r50-caffe_fpn_1x_coco.json', './retinanet_r50-caffe_fpn_1x_coco.json', './cascade-rcnn_r50-caffe_fpn_1x_coco.json' respectively. The ground-truth file path is './annotation.json'. + +1. Fusion of predictions from three models and evaluation of their effectiveness + +```shell +python tools/analysis_tools/fuse_results.py \ + ./faster-rcnn_r50-caffe_fpn_1x_coco.json \ + ./retinanet_r50-caffe_fpn_1x_coco.json \ + ./cascade-rcnn_r50-caffe_fpn_1x_coco.json \ + --annotation ./annotation.json \ + --weights 1 2 3 \ +``` + +2. Simultaneously evaluate each single model and fusion results + +```shell +python tools/analysis_tools/fuse_results.py \ + ./faster-rcnn_r50-caffe_fpn_1x_coco.json \ + ./retinanet_r50-caffe_fpn_1x_coco.json \ + ./cascade-rcnn_r50-caffe_fpn_1x_coco.json \ + --annotation ./annotation.json \ + --weights 1 2 3 \ + --eval-single +``` + +3. Fusion of prediction results from three models and save + +```shell +python tools/analysis_tools/fuse_results.py \ + ./faster-rcnn_r50-caffe_fpn_1x_coco.json \ + ./retinanet_r50-caffe_fpn_1x_coco.json \ + ./cascade-rcnn_r50-caffe_fpn_1x_coco.json \ + --annotation ./annotation.json \ + --weights 1 2 3 \ + --save-fusion-results \ + --out-dir outputs/fusion +``` + ## Visualization ### Visualize Datasets diff --git a/docs/zh_cn/user_guides/useful_tools.md b/docs/zh_cn/user_guides/useful_tools.md index 00ed06321ef..8416472c90e 100644 --- a/docs/zh_cn/user_guides/useful_tools.md +++ b/docs/zh_cn/user_guides/useful_tools.md @@ -109,6 +109,80 @@ python tools/analysis_tools/analyze_results.py \ --show-score-thr 0.3 ``` +## 多模型检测结果融合 + +`tools/analysis_tools/fuse_results.py` 可使用 Weighted Boxes Fusion(WBF) 方法将多个模型的检测结果进行融合。(当前仅支持 COCO 格式) + +**使用方法** + +```shell +python tools/analysis_tools/fuse_results.py \ + ${PRED_RESULTS} \ + [--annotation ${ANNOTATION}] \ + [--weights ${WEIGHTS}] \ + [--fusion-iou-thr ${FUSION_IOU_THR}] \ + [--skip-box-thr ${SKIP_BOX_THR}] \ + [--conf-type ${CONF_TYPE}] \ + [--eval-single ${EVAL_SINGLE}] \ + [--save-fusion-results ${SAVE_FUSION_RESULTS}] \ + [--out-dir ${OUT_DIR}] +``` + +各个参数选项的作用: + +- `pred-results`: 多模型测试结果的保存路径。(目前仅支持 json 格式) +- `--annotation`: 真实标注框的保存路径。 +- `--weights`: 模型融合权重。默认设置下,每个模型的权重均为1。 +- `--fusion-iou-thr`: 在WBF算法中,匹配成功的 IoU 阈值,默认值为`0.55`。 +- `--skip-box-thr`: WBF算法中需剔除的置信度阈值,置信度小于该值的 bbox 会被剔除,默认值为`0`。 +- `--conf-type`: 如何计算融合后 bbox 的置信度。有以下四种选项: + - `avg`: 取平均值,默认为此选项。 + - `max`: 取最大值。 + - `box_and_model_avg`: box和模型尺度的加权平均值。 + - `absent_model_aware_avg`: 考虑缺失模型的加权平均值。 +- `--eval-single`: 是否评估每个单一模型,默认值为`False`。 +- `--save-fusion-results`: 是否保存融合结果,默认值为`False`。 +- `--out-dir`: 融合结果保存的路径。 + +**样例**: +假设你已经通过 `tools/test.py` 得到了3个模型的 json 格式的结果文件,路径分别为 './faster-rcnn_r50-caffe_fpn_1x_coco.json', './retinanet_r50-caffe_fpn_1x_coco.json', './cascade-rcnn_r50-caffe_fpn_1x_coco.json',真实标注框的文件路径为'./annotation.json'。 + +1. 融合三个模型的预测结果并评估其效果 + +```shell +python tools/analysis_tools/fuse_results.py \ + ./faster-rcnn_r50-caffe_fpn_1x_coco.json \ + ./retinanet_r50-caffe_fpn_1x_coco.json \ + ./cascade-rcnn_r50-caffe_fpn_1x_coco.json \ + --annotation ./annotation.json \ + --weights 1 2 3 \ +``` + +2. 同时评估每个单一模型与融合结果 + +```shell +python tools/analysis_tools/fuse_results.py \ + ./faster-rcnn_r50-caffe_fpn_1x_coco.json \ + ./retinanet_r50-caffe_fpn_1x_coco.json \ + ./cascade-rcnn_r50-caffe_fpn_1x_coco.json \ + --annotation ./annotation.json \ + --weights 1 2 3 \ + --eval-single +``` + +3. 融合三个模型的预测结果并保存 + +```shell +python tools/analysis_tools/fuse_results.py \ + ./faster-rcnn_r50-caffe_fpn_1x_coco.json \ + ./retinanet_r50-caffe_fpn_1x_coco.json \ + ./cascade-rcnn_r50-caffe_fpn_1x_coco.json \ + --annotation ./annotation.json \ + --weights 1 2 3 \ + --save-fusion-results \ + --out-dir outputs/fusion +``` + ## 可视化 ### 可视化数据集 diff --git a/mmdet/models/utils/__init__.py b/mmdet/models/utils/__init__.py index 81bef2ccf5e..a00d9a37f33 100644 --- a/mmdet/models/utils/__init__.py +++ b/mmdet/models/utils/__init__.py @@ -19,6 +19,7 @@ from .point_sample import (get_uncertain_point_coords_with_randomness, get_uncertainty) from .vlfuse_helper import BertEncoderLayer, VLFuse, permute_and_flatten +from .wbf import weighted_boxes_fusion __all__ = [ 'gaussian_radius', 'gen_gaussian_target', 'make_divisible', @@ -32,5 +33,5 @@ 'samplelist_boxtype2tensor', 'filter_gt_instances', 'rename_loss_dict', 'reweight_loss_dict', 'relative_coordinate_maps', 'aligned_bilinear', 'unfold_wo_center', 'imrenormalize', 'VLFuse', 'permute_and_flatten', - 'BertEncoderLayer', 'align_tensor' + 'BertEncoderLayer', 'align_tensor', 'weighted_boxes_fusion' ] diff --git a/mmdet/models/utils/wbf.py b/mmdet/models/utils/wbf.py new file mode 100644 index 00000000000..b26a2c669a5 --- /dev/null +++ b/mmdet/models/utils/wbf.py @@ -0,0 +1,250 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +import warnings +from typing import Tuple + +import numpy as np +import torch +from torch import Tensor + + +# References: https://github.com/ZFTurbo/Weighted-Boxes-Fusion +def weighted_boxes_fusion( + bboxes_list: list, + scores_list: list, + labels_list: list, + weights: list = None, + iou_thr: float = 0.55, + skip_box_thr: float = 0.0, + conf_type: str = 'avg', + allows_overflow: bool = False) -> Tuple[Tensor, Tensor, Tensor]: + """weighted boxes fusion is a method for + fusing predictions from different object detection models, which utilizes + confidence scores of all proposed bounding boxes to construct averaged + boxes. + + Args: + bboxes_list(list): list of boxes predictions from each model, + each box is 4 numbers. + scores_list(list): list of scores for each model + labels_list(list): list of labels for each model + weights: list of weights for each model. + Default: None, which means weight == 1 for each model + iou_thr: IoU value for boxes to be a match + skip_box_thr: exclude boxes with score lower than this variable. + conf_type: how to calculate confidence in weighted boxes. + 'avg': average value, + 'max': maximum value, + 'box_and_model_avg': box and model wise hybrid weighted average, + 'absent_model_aware_avg': weighted average that takes into + account the absent model. + allows_overflow: false if we want confidence score not exceed 1.0. + + Returns: + bboxes(Tensor): boxes coordinates (Order of boxes: x1, y1, x2, y2). + scores(Tensor): confidence scores + labels(Tensor): boxes labels + """ + + if weights is None: + weights = np.ones(len(bboxes_list)) + if len(weights) != len(bboxes_list): + print('Warning: incorrect number of weights {}. Must be: ' + '{}. Set weights equal to 1.'.format( + len(weights), len(bboxes_list))) + weights = np.ones(len(bboxes_list)) + weights = np.array(weights) + + if conf_type not in [ + 'avg', 'max', 'box_and_model_avg', 'absent_model_aware_avg' + ]: + print('Unknown conf_type: {}. Must be "avg", ' + '"max" or "box_and_model_avg", ' + 'or "absent_model_aware_avg"'.format(conf_type)) + exit() + + filtered_boxes = prefilter_boxes(bboxes_list, scores_list, labels_list, + weights, skip_box_thr) + if len(filtered_boxes) == 0: + return torch.Tensor(), torch.Tensor(), torch.Tensor() + + overall_boxes = [] + + for label in filtered_boxes: + boxes = filtered_boxes[label] + new_boxes = [] + weighted_boxes = np.empty((0, 8)) + + # Clusterize boxes + for j in range(0, len(boxes)): + index, best_iou = find_matching_box_fast(weighted_boxes, boxes[j], + iou_thr) + + if index != -1: + new_boxes[index].append(boxes[j]) + weighted_boxes[index] = get_weighted_box( + new_boxes[index], conf_type) + else: + new_boxes.append([boxes[j].copy()]) + weighted_boxes = np.vstack((weighted_boxes, boxes[j].copy())) + + # Rescale confidence based on number of models and boxes + for i in range(len(new_boxes)): + clustered_boxes = new_boxes[i] + if conf_type == 'box_and_model_avg': + clustered_boxes = np.array(clustered_boxes) + # weighted average for boxes + weighted_boxes[i, 1] = weighted_boxes[i, 1] * len( + clustered_boxes) / weighted_boxes[i, 2] + # identify unique model index by model index column + _, idx = np.unique(clustered_boxes[:, 3], return_index=True) + # rescale by unique model weights + weighted_boxes[i, 1] = weighted_boxes[i, 1] * clustered_boxes[ + idx, 2].sum() / weights.sum() + elif conf_type == 'absent_model_aware_avg': + clustered_boxes = np.array(clustered_boxes) + # get unique model index in the cluster + models = np.unique(clustered_boxes[:, 3]).astype(int) + # create a mask to get unused model weights + mask = np.ones(len(weights), dtype=bool) + mask[models] = False + # absent model aware weighted average + weighted_boxes[ + i, 1] = weighted_boxes[i, 1] * len(clustered_boxes) / ( + weighted_boxes[i, 2] + weights[mask].sum()) + elif conf_type == 'max': + weighted_boxes[i, 1] = weighted_boxes[i, 1] / weights.max() + elif not allows_overflow: + weighted_boxes[i, 1] = weighted_boxes[i, 1] * min( + len(weights), len(clustered_boxes)) / weights.sum() + else: + weighted_boxes[i, 1] = weighted_boxes[i, 1] * len( + clustered_boxes) / weights.sum() + overall_boxes.append(weighted_boxes) + overall_boxes = np.concatenate(overall_boxes, axis=0) + overall_boxes = overall_boxes[overall_boxes[:, 1].argsort()[::-1]] + + bboxes = torch.Tensor(overall_boxes[:, 4:]) + scores = torch.Tensor(overall_boxes[:, 1]) + labels = torch.Tensor(overall_boxes[:, 0]).int() + + return bboxes, scores, labels + + +def prefilter_boxes(boxes, scores, labels, weights, thr): + + new_boxes = dict() + + for t in range(len(boxes)): + + if len(boxes[t]) != len(scores[t]): + print('Error. Length of boxes arrays not equal to ' + 'length of scores array: {} != {}'.format( + len(boxes[t]), len(scores[t]))) + exit() + + if len(boxes[t]) != len(labels[t]): + print('Error. Length of boxes arrays not equal to ' + 'length of labels array: {} != {}'.format( + len(boxes[t]), len(labels[t]))) + exit() + + for j in range(len(boxes[t])): + score = scores[t][j] + if score < thr: + continue + label = int(labels[t][j]) + box_part = boxes[t][j] + x1 = float(box_part[0]) + y1 = float(box_part[1]) + x2 = float(box_part[2]) + y2 = float(box_part[3]) + + # Box data checks + if x2 < x1: + warnings.warn('X2 < X1 value in box. Swap them.') + x1, x2 = x2, x1 + if y2 < y1: + warnings.warn('Y2 < Y1 value in box. Swap them.') + y1, y2 = y2, y1 + if (x2 - x1) * (y2 - y1) == 0.0: + warnings.warn('Zero area box skipped: {}.'.format(box_part)) + continue + + # [label, score, weight, model index, x1, y1, x2, y2] + b = [ + int(label), + float(score) * weights[t], weights[t], t, x1, y1, x2, y2 + ] + + if label not in new_boxes: + new_boxes[label] = [] + new_boxes[label].append(b) + + # Sort each list in dict by score and transform it to numpy array + for k in new_boxes: + current_boxes = np.array(new_boxes[k]) + new_boxes[k] = current_boxes[current_boxes[:, 1].argsort()[::-1]] + + return new_boxes + + +def get_weighted_box(boxes, conf_type='avg'): + + box = np.zeros(8, dtype=np.float32) + conf = 0 + conf_list = [] + w = 0 + for b in boxes: + box[4:] += (b[1] * b[4:]) + conf += b[1] + conf_list.append(b[1]) + w += b[2] + box[0] = boxes[0][0] + if conf_type in ('avg', 'box_and_model_avg', 'absent_model_aware_avg'): + box[1] = conf / len(boxes) + elif conf_type == 'max': + box[1] = np.array(conf_list).max() + box[2] = w + box[3] = -1 + box[4:] /= conf + + return box + + +def find_matching_box_fast(boxes_list, new_box, match_iou): + + def bb_iou_array(boxes, new_box): + # bb intersection over union + xA = np.maximum(boxes[:, 0], new_box[0]) + yA = np.maximum(boxes[:, 1], new_box[1]) + xB = np.minimum(boxes[:, 2], new_box[2]) + yB = np.minimum(boxes[:, 3], new_box[3]) + + interArea = np.maximum(xB - xA, 0) * np.maximum(yB - yA, 0) + + # compute the area of both the prediction and ground-truth rectangles + boxAArea = (boxes[:, 2] - boxes[:, 0]) * (boxes[:, 3] - boxes[:, 1]) + boxBArea = (new_box[2] - new_box[0]) * (new_box[3] - new_box[1]) + + iou = interArea / (boxAArea + boxBArea - interArea) + + return iou + + if boxes_list.shape[0] == 0: + return -1, match_iou + + boxes = boxes_list + + ious = bb_iou_array(boxes[:, 4:], new_box[4:]) + + ious[boxes[:, 0] != new_box[0]] = -1 + + best_idx = np.argmax(ious) + best_iou = ious[best_idx] + + if best_iou <= match_iou: + best_iou = match_iou + best_idx = -1 + + return best_idx, best_iou diff --git a/tools/analysis_tools/fuse_results.py b/tools/analysis_tools/fuse_results.py new file mode 100644 index 00000000000..1f35123cbbb --- /dev/null +++ b/tools/analysis_tools/fuse_results.py @@ -0,0 +1,142 @@ +import argparse + +from mmengine.fileio import dump, load +from mmengine.logging import print_log +from mmengine.utils import ProgressBar +from pycocotools.coco import COCO +from pycocotools.cocoeval import COCOeval + +from mmdet.models.utils import weighted_boxes_fusion + + +def parse_args(): + parser = argparse.ArgumentParser(description='Fusion image \ + prediction results using Weighted \ + Boxes Fusion from multiple models.') + parser.add_argument( + 'pred-results', + type=str, + nargs='+', + help='files of prediction results \ + from multiple models, json format.') + parser.add_argument('--annotation', type=str, help='annotation file path') + parser.add_argument( + '--weights', + type=float, + nargs='*', + default=None, + help='weights for each model, ' + 'remember to correspond to the above prediction path.') + parser.add_argument( + '--fusion-iou-thr', + type=float, + default=0.55, + help='IoU value for boxes to be a match in wbf.') + parser.add_argument( + '--skip-box-thr', + type=float, + default=0.0, + help='exclude boxes with score lower than this variable in wbf.') + parser.add_argument( + '--conf-type', + type=str, + default='avg', + help='how to calculate confidence in weighted boxes in wbf.') + parser.add_argument( + '--eval-single', + action='store_true', + help='whether evaluate each single model result.') + parser.add_argument( + '--save-fusion-results', + action='store_true', + help='whether save fusion result') + parser.add_argument( + '--out-dir', + type=str, + default='outputs', + help='Output directory of images or prediction results.') + + args = parser.parse_args() + + return args + + +def main(): + args = parse_args() + + assert len(args.models_name) == len(args.pred_results), \ + 'the quantities of model names and prediction results are not equal' + + cocoGT = COCO(args.annotation) + + predicts_raw = [] + + models_name = ['model_' + str(i) for i in range(len(args.pred_results))] + + for model_name, path in \ + zip(models_name, args.pred_results): + pred = load(path) + predicts_raw.append(pred) + + if args.eval_single: + print_log(f'Evaluate {model_name}...') + cocoDt = cocoGT.loadRes(pred) + coco_eval = COCOeval(cocoGT, cocoDt, iouType='bbox') + coco_eval.evaluate() + coco_eval.accumulate() + coco_eval.summarize() + + predict = { + str(image_id): { + 'bboxes_list': [[] for _ in range(len(predicts_raw))], + 'scores_list': [[] for _ in range(len(predicts_raw))], + 'labels_list': [[] for _ in range(len(predicts_raw))] + } + for image_id in cocoGT.getImgIds() + } + + for i, pred_single in enumerate(predicts_raw): + for pred in pred_single: + p = predict[str(pred['image_id'])] + p['bboxes_list'][i].append(pred['bbox']) + p['scores_list'][i].append(pred['score']) + p['labels_list'][i].append(pred['category_id']) + + result = [] + prog_bar = ProgressBar(len(predict)) + for image_id, res in predict.items(): + bboxes, scores, labels = weighted_boxes_fusion( + res['bboxes_list'], + res['scores_list'], + res['labels_list'], + weights=args.weights, + iou_thr=args.fusion_iou_thr, + skip_box_thr=args.skip_box_thr, + conf_type=args.conf_type) + + for bbox, score, label in zip(bboxes, scores, labels): + result.append({ + 'bbox': bbox.numpy().tolist(), + 'category_id': int(label), + 'image_id': int(image_id), + 'score': float(score) + }) + + prog_bar.update() + + if args.save_fusion_results: + out_file = args.out_dir + '/fusion_results.json' + dump(result, file=out_file) + print_log( + f'Fusion results have been saved to {out_file}.', logger='current') + + print_log('Evaluate fusion results using wbf...') + cocoDt = cocoGT.loadRes(result) + coco_eval = COCOeval(cocoGT, cocoDt, iouType='bbox') + coco_eval.evaluate() + coco_eval.accumulate() + coco_eval.summarize() + + +if __name__ == '__main__': + main() From ed65c3ba507a841bed9ae30e386433617b09b317 Mon Sep 17 00:00:00 2001 From: Markson-Young <71065224+Markson-Young@users.noreply.github.com> Date: Wed, 13 Sep 2023 09:59:05 +0800 Subject: [PATCH 39/63] [CodeCamp2023-474] Add new configuration files for DINO algorithm in mmdetection. (#10901) --- .../dino/dino-5scale_swin-l_8xb2-12e_coco.py | 1 - .../dino/dino_4scale_r50_8xb2_12e_coco.py | 190 ++++++++++++++++++ .../dino/dino_4scale_r50_8xb2_24e_coco.py | 12 ++ .../dino/dino_4scale_r50_8xb2_36e_coco.py | 12 ++ .../dino_4scale_r50_improved_8xb2_12e_coco.py | 24 +++ .../dino/dino_5scale_swin_l_8xb2_12e_coco.py | 40 ++++ .../dino/dino_5scale_swin_l_8xb2_36e_coco.py | 12 ++ 7 files changed, 290 insertions(+), 1 deletion(-) create mode 100644 mmdet/configs/dino/dino_4scale_r50_8xb2_12e_coco.py create mode 100644 mmdet/configs/dino/dino_4scale_r50_8xb2_24e_coco.py create mode 100644 mmdet/configs/dino/dino_4scale_r50_8xb2_36e_coco.py create mode 100644 mmdet/configs/dino/dino_4scale_r50_improved_8xb2_12e_coco.py create mode 100644 mmdet/configs/dino/dino_5scale_swin_l_8xb2_12e_coco.py create mode 100644 mmdet/configs/dino/dino_5scale_swin_l_8xb2_36e_coco.py diff --git a/configs/dino/dino-5scale_swin-l_8xb2-12e_coco.py b/configs/dino/dino-5scale_swin-l_8xb2-12e_coco.py index fd94e9936c7..3d39f22f509 100644 --- a/configs/dino/dino-5scale_swin-l_8xb2-12e_coco.py +++ b/configs/dino/dino-5scale_swin-l_8xb2-12e_coco.py @@ -1,6 +1,5 @@ _base_ = './dino-4scale_r50_8xb2-12e_coco.py' -fp16 = dict(loss_scale=512.) pretrained = 'https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_large_patch4_window12_384_22k.pth' # noqa num_levels = 5 model = dict( diff --git a/mmdet/configs/dino/dino_4scale_r50_8xb2_12e_coco.py b/mmdet/configs/dino/dino_4scale_r50_8xb2_12e_coco.py new file mode 100644 index 00000000000..ab8e95a9a76 --- /dev/null +++ b/mmdet/configs/dino/dino_4scale_r50_8xb2_12e_coco.py @@ -0,0 +1,190 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmcv.transforms import RandomChoice, RandomChoiceResize +from mmcv.transforms.loading import LoadImageFromFile +from mmengine.config import read_base +from mmengine.model.weight_init import PretrainedInit +from mmengine.optim.optimizer.optimizer_wrapper import OptimWrapper +from mmengine.optim.scheduler.lr_scheduler import MultiStepLR +from mmengine.runner.loops import EpochBasedTrainLoop, TestLoop, ValLoop +from torch.nn.modules.batchnorm import BatchNorm2d +from torch.nn.modules.normalization import GroupNorm +from torch.optim.adamw import AdamW + +from mmdet.datasets.transforms import (LoadAnnotations, PackDetInputs, + RandomCrop, RandomFlip, Resize) +from mmdet.models import (DINO, ChannelMapper, DetDataPreprocessor, DINOHead, + ResNet) +from mmdet.models.losses.focal_loss import FocalLoss +from mmdet.models.losses.iou_loss import GIoULoss +from mmdet.models.losses.smooth_l1_loss import L1Loss +from mmdet.models.task_modules import (BBoxL1Cost, FocalLossCost, + HungarianAssigner, IoUCost) + +with read_base(): + from .._base_.datasets.coco_detection import * + from .._base_.default_runtime import * + +model = dict( + type=DINO, + num_queries=900, # num_matching_queries + with_box_refine=True, + as_two_stage=True, + data_preprocessor=dict( + type=DetDataPreprocessor, + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True, + pad_size_divisor=1), + backbone=dict( + type=ResNet, + depth=50, + num_stages=4, + out_indices=(1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type=BatchNorm2d, requires_grad=False), + norm_eval=True, + style='pytorch', + init_cfg=dict( + type=PretrainedInit, checkpoint='torchvision://resnet50')), + neck=dict( + type=ChannelMapper, + in_channels=[512, 1024, 2048], + kernel_size=1, + out_channels=256, + act_cfg=None, + norm_cfg=dict(type=GroupNorm, num_groups=32), + num_outs=4), + encoder=dict( + num_layers=6, + layer_cfg=dict( + self_attn_cfg=dict(embed_dims=256, num_levels=4, + dropout=0.0), # 0.1 for DeformDETR + ffn_cfg=dict( + embed_dims=256, + feedforward_channels=2048, # 1024 for DeformDETR + ffn_drop=0.0))), # 0.1 for DeformDETR + decoder=dict( + num_layers=6, + return_intermediate=True, + layer_cfg=dict( + self_attn_cfg=dict(embed_dims=256, num_heads=8, + dropout=0.0), # 0.1 for DeformDETR + cross_attn_cfg=dict(embed_dims=256, num_levels=4, + dropout=0.0), # 0.1 for DeformDETR + ffn_cfg=dict( + embed_dims=256, + feedforward_channels=2048, # 1024 for DeformDETR + ffn_drop=0.0)), # 0.1 for DeformDETR + post_norm_cfg=None), + positional_encoding=dict( + num_feats=128, + normalize=True, + offset=0.0, # -0.5 for DeformDETR + temperature=20), # 10000 for DeformDETR + bbox_head=dict( + type=DINOHead, + num_classes=80, + sync_cls_avg_factor=True, + loss_cls=dict( + type=FocalLoss, + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), # 2.0 in DeformDETR + loss_bbox=dict(type=L1Loss, loss_weight=5.0), + loss_iou=dict(type=GIoULoss, loss_weight=2.0)), + dn_cfg=dict( # TODO: Move to model.train_cfg ? + label_noise_scale=0.5, + box_noise_scale=1.0, # 0.4 for DN-DETR + group_cfg=dict(dynamic=True, num_groups=None, + num_dn_queries=100)), # TODO: half num_dn_queries + # training and testing settings + train_cfg=dict( + assigner=dict( + type=HungarianAssigner, + match_costs=[ + dict(type=FocalLossCost, weight=2.0), + dict(type=BBoxL1Cost, weight=5.0, box_format='xywh'), + dict(type=IoUCost, iou_mode='giou', weight=2.0) + ])), + test_cfg=dict(max_per_img=300)) # 100 for DeformDETR + +# train_pipeline, NOTE the img_scale and the Pad's size_divisor is different +# from the default setting in mmdet. +train_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=LoadAnnotations, with_bbox=True), + dict(type=RandomFlip, prob=0.5), + dict( + type=RandomChoice, + transforms=[ + [ + dict( + type=RandomChoiceResize, + resize_type=Resize, + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ], + [ + dict( + type=RandomChoiceResize, + resize_type=Resize, + # The radio of all image in train dataset < 7 + # follow the original implement + scales=[(400, 4200), (500, 4200), (600, 4200)], + keep_ratio=True), + dict( + type=RandomCrop, + crop_type='absolute_range', + crop_size=(384, 600), + allow_negative_crop=True), + dict( + type=RandomChoiceResize, + resize_type=Resize, + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ] + ]), + dict(type=PackDetInputs) +] +train_dataloader.update( + dataset=dict( + filter_cfg=dict(filter_empty_gt=False), pipeline=train_pipeline)) + +# optimizer +optim_wrapper = dict( + type=OptimWrapper, + optimizer=dict( + type=AdamW, + lr=0.0001, # 0.0002 for DeformDETR + weight_decay=0.0001), + clip_grad=dict(max_norm=0.1, norm_type=2), + paramwise_cfg=dict(custom_keys={'backbone': dict(lr_mult=0.1)}) +) # custom_keys contains sampling_offsets and reference_points in DeformDETR # noqa + +# learning policy +max_epochs = 12 +train_cfg = dict( + type=EpochBasedTrainLoop, max_epochs=max_epochs, val_interval=1) + +val_cfg = dict(type=ValLoop) +test_cfg = dict(type=TestLoop) + +param_scheduler = [ + dict( + type=MultiStepLR, + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[11], + gamma=0.1) +] + +# NOTE: `auto_scale_lr` is for automatically scaling LR, +# USER SHOULD NOT CHANGE ITS VALUES. +# base_batch_size = (8 GPUs) x (2 samples per GPU) +auto_scale_lr = dict(base_batch_size=16) diff --git a/mmdet/configs/dino/dino_4scale_r50_8xb2_24e_coco.py b/mmdet/configs/dino/dino_4scale_r50_8xb2_24e_coco.py new file mode 100644 index 00000000000..c10cc2184de --- /dev/null +++ b/mmdet/configs/dino/dino_4scale_r50_8xb2_24e_coco.py @@ -0,0 +1,12 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmengine.config import read_base +from mmengine.runner.loops import EpochBasedTrainLoop + +with read_base(): + from .dino_4scale_r50_8xb2_12e_coco import * + +max_epochs = 24 +train_cfg.update( + dict(type=EpochBasedTrainLoop, max_epochs=max_epochs, val_interval=1)) + +param_scheduler[0].update(dict(milestones=[20])) diff --git a/mmdet/configs/dino/dino_4scale_r50_8xb2_36e_coco.py b/mmdet/configs/dino/dino_4scale_r50_8xb2_36e_coco.py new file mode 100644 index 00000000000..3779744322a --- /dev/null +++ b/mmdet/configs/dino/dino_4scale_r50_8xb2_36e_coco.py @@ -0,0 +1,12 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmengine.config import read_base +from mmengine.runner.loops import EpochBasedTrainLoop + +with read_base(): + from .dino_4scale_r50_8xb2_12e_coco import * + +max_epochs = 36 +train_cfg.update( + dict(type=EpochBasedTrainLoop, max_epochs=max_epochs, val_interval=1)) + +param_scheduler[0].update(dict(milestones=[30])) diff --git a/mmdet/configs/dino/dino_4scale_r50_improved_8xb2_12e_coco.py b/mmdet/configs/dino/dino_4scale_r50_improved_8xb2_12e_coco.py new file mode 100644 index 00000000000..43c07201079 --- /dev/null +++ b/mmdet/configs/dino/dino_4scale_r50_improved_8xb2_12e_coco.py @@ -0,0 +1,24 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmengine.config import read_base + +with read_base(): + from .dino_4scale_r50_8xb2_12e_coco import * + +# from deformable detr hyper +model.update( + dict( + backbone=dict(frozen_stages=-1), + bbox_head=dict(loss_cls=dict(loss_weight=2.0)), + positional_encoding=dict(offset=-0.5, temperature=10000), + dn_cfg=dict(group_cfg=dict(num_dn_queries=300)))) + +# optimizer +optim_wrapper.update( + dict( + optimizer=dict(lr=0.0002), + paramwise_cfg=dict( + custom_keys={ + 'backbone': dict(lr_mult=0.1), + 'sampling_offsets': dict(lr_mult=0.1), + 'reference_points': dict(lr_mult=0.1) + }))) diff --git a/mmdet/configs/dino/dino_5scale_swin_l_8xb2_12e_coco.py b/mmdet/configs/dino/dino_5scale_swin_l_8xb2_12e_coco.py new file mode 100644 index 00000000000..25aac0187ab --- /dev/null +++ b/mmdet/configs/dino/dino_5scale_swin_l_8xb2_12e_coco.py @@ -0,0 +1,40 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmengine.config import read_base +from mmengine.model.weight_init import PretrainedInit + +from mmdet.models import SwinTransformer + +with read_base(): + from .dino_4scale_r50_8xb2_12e_coco import * + +pretrained = 'https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_large_patch4_window12_384_22k.pth' # noqa +num_levels = 5 +model.merge( + dict( + num_feature_levels=num_levels, + backbone=dict( + _delete_=True, + type=SwinTransformer, + pretrain_img_size=384, + embed_dims=192, + depths=[2, 2, 18, 2], + num_heads=[6, 12, 24, 48], + window_size=12, + mlp_ratio=4, + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.2, + patch_norm=True, + out_indices=(0, 1, 2, 3), + # Please only add indices that would be used + # in FPN, otherwise some parameter will not be used + with_cp=True, + convert_weights=True, + init_cfg=dict(type=PretrainedInit, checkpoint=pretrained)), + neck=dict(in_channels=[192, 384, 768, 1536], num_outs=num_levels), + encoder=dict( + layer_cfg=dict(self_attn_cfg=dict(num_levels=num_levels))), + decoder=dict( + layer_cfg=dict(cross_attn_cfg=dict(num_levels=num_levels))))) diff --git a/mmdet/configs/dino/dino_5scale_swin_l_8xb2_36e_coco.py b/mmdet/configs/dino/dino_5scale_swin_l_8xb2_36e_coco.py new file mode 100644 index 00000000000..494acf59f1c --- /dev/null +++ b/mmdet/configs/dino/dino_5scale_swin_l_8xb2_36e_coco.py @@ -0,0 +1,12 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmengine.config import read_base +from mmengine.runner.loops import EpochBasedTrainLoop + +with read_base(): + from .dino_5scale_swin_l_8xb2_12e_coco import * + +max_epochs = 36 +train_cfg.update( + dict(type=EpochBasedTrainLoop, max_epochs=max_epochs, val_interval=1)) + +param_scheduler[0].update(dict(milestones=[27, 33])) From d45bbdad07758b701743ee079684a77fe09955f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Mon, 18 Sep 2023 13:07:30 +0800 Subject: [PATCH 40/63] Fix GLIP eval in training (#10925) --- configs/glip/README.md | 25 ++++++------ configs/glip/metafile.yml | 12 +++--- mmdet/models/detectors/glip.py | 73 +++++++++++++++------------------- 3 files changed, 51 insertions(+), 59 deletions(-) diff --git a/configs/glip/README.md b/configs/glip/README.md index ebf5226b109..bafcef9130b 100644 --- a/configs/glip/README.md +++ b/configs/glip/README.md @@ -41,18 +41,18 @@ configs/glip/glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365.py \ ## Results and Models -| Model | Zero-shot or Funetune | COCO mAP | Pre-Train Data | Config | Download | -| :--------: | :-------------------: | :------: | :------------------------: | :---------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| GLIP-T (A) | Zero-shot | 43.0 | O365 | [config](glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_a_mmdet-b3654169.pth) | -| GLIP-T (A) | Funetune | 53.1 | O365 | [config](glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230908_091856-39f01d03.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230908_091856.log.json) | -| GLIP-T (B) | Zero-shot | 44.9 | O365 | [config](glip_atss_swin-t_b_fpn_dyhead_pretrain_obj365.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_b_mmdet-6dfbd102.pth) | -| GLIP-T (B) | Funetune | 54.1 | O365 | [config](glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230909_175354-e0c0c6d7.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230909_175354.log.json) | -| GLIP-T (C) | Zero-shot | 46.7 | O365,GoldG | [config](glip_atss_swin-t_c_fpn_dyhead_pretrain_obj365-goldg.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_c_mmdet-2fc427dd.pth) | -| GLIP-T (C) | Funetune | 55.2 | O365,GoldG | [config](glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230909_175543-5fcb4b97.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230909_175543.log.json) | -| GLIP-T | Zero-shot | 46.4 | O365,GoldG,CC3M,SBU | [config](glip_atss_swin-t_fpn_dyhead_pretrain_obj365-goldg-cc3m-sub.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_mmdet-c24ce662.pth) | -| GLIP-T | Funetune | 55.2 | O365,GoldG,CC3M,SBU | [config](glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230910_125111-ad1025a0.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230910_125111.log.json) | -| GLIP-L | Zero-shot | 51.3 | FourODs,GoldG,CC3M+12M,SBU | [config](glip_atss_swin-l_fpn_dyhead_pretrain_mixeddata.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_l_mmdet-abfe026b.pth) | -| GLIP-L | Funetune | 59.4 | FourODs,GoldG,CC3M+12M,SBU | [config](glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230910_100800-e9be4274.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230910_100800.log.json) | +| Model | Zero-shot or Funetune | COCO mAP | Official COCO mAP | Pre-Train Data | Config | Download | +| :--------: | :-------------------: | :------: | ----------------: | :------------------------: | :---------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| GLIP-T (A) | Zero-shot | 43.0 | 42.9 | O365 | [config](glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_a_mmdet-b3654169.pth) | +| GLIP-T (A) | Funetune | 53.3 | 52.9 | O365 | [config](glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_180419-e6addd96.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_180419.log.json) | +| GLIP-T (B) | Zero-shot | 44.9 | 44.9 | O365 | [config](glip_atss_swin-t_b_fpn_dyhead_pretrain_obj365.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_b_mmdet-6dfbd102.pth) | +| GLIP-T (B) | Funetune | 54.1 | 53.8 | O365 | [config](glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230916_163538-650323ba.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230916_163538.log.json) | +| GLIP-T (C) | Zero-shot | 46.7 | 46.7 | O365,GoldG | [config](glip_atss_swin-t_c_fpn_dyhead_pretrain_obj365-goldg.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_c_mmdet-2fc427dd.pth) | +| GLIP-T (C) | Funetune | 55.2 | 55.1 | O365,GoldG | [config](glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_182935-4ba3fc3b.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_182935.log.json) | +| GLIP-T | Zero-shot | 46.6 | 46.6 | O365,GoldG,CC3M,SBU | [config](glip_atss_swin-t_fpn_dyhead_pretrain_obj365-goldg-cc3m-sub.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_mmdet-c24ce662.pth) | +| GLIP-T | Funetune | 55.4 | 55.2 | O365,GoldG,CC3M,SBU | [config](glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_224410-ba97be24.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_224410.log.json) | +| GLIP-L | Zero-shot | 51.3 | 51.4 | FourODs,GoldG,CC3M+12M,SBU | [config](glip_atss_swin-l_fpn_dyhead_pretrain_mixeddata.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_l_mmdet-abfe026b.pth) | +| GLIP-L | Funetune | 59.4 | | FourODs,GoldG,CC3M+12M,SBU | [config](glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230910_100800-e9be4274.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230910_100800.log.json) | Note: @@ -61,4 +61,3 @@ Note: 3. Taking the GLIP-T(A) model as an example, I trained it twice using the official code, and the fine-tuning mAP were 52.5 and 52.6. Therefore, the mAP we achieved in our reproduction is higher than the official results. The main reason is that we modified the `weight_decay` parameter. 4. Our experiments revealed that training for 24 epochs leads to overfitting. Therefore, we chose the best-performing model. If users want to train on a custom dataset, it is advisable to shorten the number of epochs and save the best-performing model. 5. Due to the official absence of fine-tuning hyperparameters for the GLIP-L model, we have not yet reproduced the official accuracy. I have found that overfitting can also occur, so it may be necessary to consider custom modifications to data augmentation and model enhancement. Given the high cost of training, we have not conducted any research on this matter at the moment. -6. We noticed that there is a discrepancy between the performance evaluation of the checkpoint and the evaluation logs during training. This is because the buffers of different ranks are not the same during training, but we only saved the weights of rank 0. If you want to avoid this issue, you can add the parameter `broadcast_buffers=True` in the configuration. diff --git a/configs/glip/metafile.yml b/configs/glip/metafile.yml index 6fc245604aa..fbbf718b9ff 100644 --- a/configs/glip/metafile.yml +++ b/configs/glip/metafile.yml @@ -71,8 +71,8 @@ Models: - Task: Object Detection Dataset: COCO Metrics: - box AP: 53.1 - Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230908_091856-39f01d03.pth + box AP: 53.3 + Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_180419-e6addd96.pth - Name: glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco In Collection: GLIP Config: configs/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco.py @@ -81,7 +81,7 @@ Models: Dataset: COCO Metrics: box AP: 54.1 - Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230909_175354-e0c0c6d7.pth + Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230916_163538-650323ba.pth - Name: glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco In Collection: GLIP Config: configs/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco.py @@ -90,7 +90,7 @@ Models: Dataset: COCO Metrics: box AP: 55.2 - Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230909_175543-5fcb4b97.pth + Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_182935-4ba3fc3b.pth - Name: glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco In Collection: GLIP Config: configs/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco.py @@ -98,8 +98,8 @@ Models: - Task: Object Detection Dataset: COCO Metrics: - box AP: 55.2 - Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230910_125111-ad1025a0.pth + box AP: 55.4 + Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_224410-ba97be24.pth - Name: glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco In Collection: GLIP Config: configs/glip/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco.py diff --git a/mmdet/models/detectors/glip.py b/mmdet/models/detectors/glip.py index 9b96eda6112..53ef5eca4e1 100644 --- a/mmdet/models/detectors/glip.py +++ b/mmdet/models/detectors/glip.py @@ -1,5 +1,4 @@ # Copyright (c) OpenMMLab. All rights reserved. -import copy import re import warnings from typing import Tuple, Union @@ -205,16 +204,12 @@ def __init__(self, init_cfg=init_cfg) self.language_model = MODELS.build(language_model) - self._text_prompts = None - self._token_positive_maps = None - self._language_dict_features = None - self._entities = None self._special_tokens = '. ' def get_tokens_and_prompts( self, original_caption: Union[str, list, tuple], - custom_entities: bool = False) -> Tuple[dict, str, list]: + custom_entities: bool = False) -> Tuple[dict, str, list, list]: """Get the tokens positive and prompts for the caption.""" if isinstance(original_caption, (list, tuple)) or custom_entities: if custom_entities and isinstance(original_caption, str): @@ -236,7 +231,7 @@ def get_tokens_and_prompts( caption_string += self._special_tokens tokenized = self.language_model.tokenizer([caption_string], return_tensors='pt') - self._entities = original_caption + entities = original_caption else: if original_caption.endswith(self._special_tokens): original_caption = original_caption.replace( @@ -245,10 +240,10 @@ def get_tokens_and_prompts( tokenized = self.language_model.tokenizer([original_caption], return_tensors='pt') tokens_positive, noun_phrases = run_ner(original_caption) - self._entities = noun_phrases + entities = noun_phrases caption_string = original_caption - return tokenized, caption_string, tokens_positive + return tokenized, caption_string, tokens_positive, entities def get_positive_map(self, tokenized, tokens_positive): positive_map = create_positive_map(tokenized, tokens_positive) @@ -259,13 +254,14 @@ def get_positive_map(self, tokenized, tokens_positive): def get_tokens_positive_and_prompts( self, original_caption: Union[str, list, tuple], - custom_entities: bool = False) -> Tuple[dict, str, Tensor]: - tokenized, caption_string, tokens_positive = \ + custom_entities: bool = False) -> Tuple[dict, str, Tensor, list]: + tokenized, caption_string, tokens_positive, entities = \ self.get_tokens_and_prompts( original_caption, custom_entities) positive_map_label_to_token, positive_map = self.get_positive_map( tokenized, tokens_positive) - return positive_map_label_to_token, caption_string, positive_map + return positive_map_label_to_token, caption_string, \ + positive_map, entities def loss(self, batch_inputs: Tensor, batch_data_samples: SampleList) -> Union[dict, list]: @@ -284,7 +280,7 @@ def loss(self, batch_inputs: Tensor, if len(set(text_prompts)) == 1: # All the text prompts are the same, # so there is no need to calculate them multiple times. - tokenized, caption_string, tokens_positive = \ + tokenized, caption_string, tokens_positive, _ = \ self.get_tokens_and_prompts( text_prompts[0], True) new_text_prompts = [caption_string] * len(batch_inputs) @@ -297,7 +293,7 @@ def loss(self, batch_inputs: Tensor, positive_maps.append(positive_map) else: for text_prompt, gt_label in zip(text_prompts, gt_labels): - tokenized, caption_string, tokens_positive = \ + tokenized, caption_string, tokens_positive, _ = \ self.get_tokens_and_prompts( text_prompt, True) new_tokens_positive = [ @@ -361,45 +357,42 @@ def predict(self, else: custom_entities = False - if text_prompts != self._text_prompts: - # avoid redundant computation - self._text_prompts = text_prompts - if len(set(text_prompts)) == 1: - # All the text prompts are the same, - # so there is no need to calculate them multiple times. - _positive_maps_and_prompts = [ - self.get_tokens_positive_and_prompts( - text_prompts[0], custom_entities) - ] * len(batch_inputs) - else: - _positive_maps_and_prompts = [ - self.get_tokens_positive_and_prompts( - text_prompt, custom_entities) - for text_prompt in text_prompts - ] + if len(set(text_prompts)) == 1: + # All the text prompts are the same, + # so there is no need to calculate them multiple times. + _positive_maps_and_prompts = [ + self.get_tokens_positive_and_prompts(text_prompts[0], + custom_entities) + ] * len(batch_inputs) + else: + _positive_maps_and_prompts = [ + self.get_tokens_positive_and_prompts(text_prompt, + custom_entities) + for text_prompt in text_prompts + ] + + token_positive_maps, text_prompts, _, entities = zip( + *_positive_maps_and_prompts) - self._token_positive_maps, text_prompts, _ = zip( - *_positive_maps_and_prompts) - self._language_dict_features = self.language_model( - list(text_prompts)) + language_dict_features = self.language_model(list(text_prompts)) for i, data_samples in enumerate(batch_data_samples): - data_samples.token_positive_map = self._token_positive_maps[i] + data_samples.token_positive_map = token_positive_maps[i] visual_features = self.extract_feat(batch_inputs) results_list = self.bbox_head.predict( visual_features, - copy.deepcopy(self._language_dict_features), + language_dict_features, batch_data_samples, rescale=rescale) - for data_sample, pred_instances in zip(batch_data_samples, - results_list): + for data_sample, pred_instances, entity in zip(batch_data_samples, + results_list, entities): if len(pred_instances) > 0: label_names = [] for labels in pred_instances.labels: - if labels >= len(self._entities): + if labels >= len(entity): warnings.warn( 'The unexpected output indicates an issue with ' 'named entity recognition. You can try ' @@ -407,7 +400,7 @@ def predict(self, 'again to see if it helps.') label_names.append('unobject') else: - label_names.append(self._entities[labels]) + label_names.append(entity[labels]) # for visualization pred_instances.label_names = label_names data_sample.pred_instances = pred_instances From 073626f310f6d269066fff1e78a8f28c9995c768 Mon Sep 17 00:00:00 2001 From: YanxingLiu <42299757+YanxingLiu@users.noreply.github.com> Date: Mon, 18 Sep 2023 13:21:10 +0800 Subject: [PATCH 41/63] Support grounding dino (#10907) Co-authored-by: YanxingLiu --- configs/grounding_dino/README.md | 52 +++ ...rounding_dino_swin-b_pretrain_mixeddata.py | 16 + ...dino_swin-t_pretrain_obj365_goldg_cap4m.py | 127 +++++++ configs/grounding_dino/metafile.yml | 40 +++ mmdet/models/dense_heads/__init__.py | 3 +- .../models/dense_heads/grounding_dino_head.py | 321 ++++++++++++++++++ mmdet/models/detectors/__init__.py | 3 +- mmdet/models/detectors/dino.py | 6 +- mmdet/models/detectors/grounding_dino.py | 309 +++++++++++++++++ mmdet/models/language_models/bert.py | 114 ++++++- mmdet/models/layers/transformer/__init__.py | 7 +- .../transformer/grounding_dino_layers.py | 255 ++++++++++++++ mmdet/models/layers/transformer/utils.py | 39 +++ mmdet/models/necks/channel_mapper.py | 12 +- mmdet/models/utils/vlfuse_helper.py | 68 +++- model-index.yml | 1 + .../groundingdino_to_mmdet.py | 213 ++++++++++++ 17 files changed, 1556 insertions(+), 30 deletions(-) create mode 100644 configs/grounding_dino/README.md create mode 100644 configs/grounding_dino/grounding_dino_swin-b_pretrain_mixeddata.py create mode 100644 configs/grounding_dino/grounding_dino_swin-t_pretrain_obj365_goldg_cap4m.py create mode 100644 configs/grounding_dino/metafile.yml create mode 100644 mmdet/models/dense_heads/grounding_dino_head.py create mode 100644 mmdet/models/detectors/grounding_dino.py create mode 100644 mmdet/models/layers/transformer/grounding_dino_layers.py create mode 100644 tools/model_converters/groundingdino_to_mmdet.py diff --git a/configs/grounding_dino/README.md b/configs/grounding_dino/README.md new file mode 100644 index 00000000000..4addc4f4d6d --- /dev/null +++ b/configs/grounding_dino/README.md @@ -0,0 +1,52 @@ +# Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection + +[GLIP: Grounded Language-Image Pre-training](https://arxiv.org/abs/2112.03857) + + + +## Abstract + +In this paper, we present an open-set object detector, called Grounding DINO, by marrying Transformer-based detector DINO with grounded pre-training, which can detect arbitrary objects with human inputs such as category names or referring expressions. The key solution of open-set object detection is introducing language to a closed-set detector for open-set concept generalization. To effectively fuse language and vision modalities, we conceptually divide a closed-set detector into three phases and propose a tight fusion solution, which includes a feature enhancer, a language-guided query selection, and a cross-modality decoder for cross-modality fusion. While previous works mainly evaluate open-set object detection on novel categories, we propose to also perform evaluations on referring expression comprehension for objects specified with attributes. Grounding DINO performs remarkably well on all three settings, including benchmarks on COCO, LVIS, ODinW, and RefCOCO/+/g. Grounding DINO achieves a 52.5 AP on the COCO detection zero-shot transfer benchmark, i.e., without any training data from COCO. It sets a new record on the ODinW zero-shot benchmark with a mean 26.1 AP. + +
    + +
    + +## Installation + +```shell +cd $MMDETROOT + +# source installation +pip install -r requirements/multimodal.txt + +# or mim installation +mim install mmdet[multimodal] +``` + +``` +cd $MMDETROOT + +wget https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/groundingdino_swint_ogc_mmdet-822d7e9d.pth + +python demo/image_demo.py \ + demo/demo.jpg \ + configs/grounding_dino/grounding_dino_swin-t_pretrain_obj365_goldg_cap4m.py \ + --weights groundingdino_swint_ogc_mmdet-822d7e9d.pth \ + --texts 'bench . car .' +``` + +
    + +
    + +## Results and Models + +| Model | backbone | COCO mAP | Pre-Train Data | Config | Download | +| :--------------: | :------: | :------: | :----------------------------------------------: | :------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------: | +| Grounding DINO-T | Swin-T | 48.5 | O365,GoldG,Cap4M | [config](grounding_dino_swin-t_pretrain_obj365_goldg_cap4m.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/groundingdino_swint_ogc_mmdet-822d7e9d.pth) | +| Grounding DINO-B | Swin-B | 56.9 | COCO,O365,GoldG,Cap4M,OpenImage,ODinW-35,RefCOCO | [config](grounding_dino_swin-b_pretrain_mixeddata.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/groundingdino_swinb_cogcoor_mmdet-55949c9c.pth) | + +Note: + +1. The weights corresponding to the zero-shot model are adopted from the official weights and converted using the [script](../../tools/model_converters/groundingdino_to_mmdet.py). We have not retrained the model for the time being. diff --git a/configs/grounding_dino/grounding_dino_swin-b_pretrain_mixeddata.py b/configs/grounding_dino/grounding_dino_swin-b_pretrain_mixeddata.py new file mode 100644 index 00000000000..92f327fef83 --- /dev/null +++ b/configs/grounding_dino/grounding_dino_swin-b_pretrain_mixeddata.py @@ -0,0 +1,16 @@ +_base_ = [ + './grounding_dino_swin-t_pretrain_obj365_goldg_cap4m.py', +] + +model = dict( + type='GroundingDINO', + backbone=dict( + pretrain_img_size=384, + embed_dims=128, + depths=[2, 2, 18, 2], + num_heads=[4, 8, 16, 32], + window_size=12, + drop_path_rate=0.3, + patch_norm=True), + neck=dict(in_channels=[256, 512, 1024]), +) diff --git a/configs/grounding_dino/grounding_dino_swin-t_pretrain_obj365_goldg_cap4m.py b/configs/grounding_dino/grounding_dino_swin-t_pretrain_obj365_goldg_cap4m.py new file mode 100644 index 00000000000..41069e29035 --- /dev/null +++ b/configs/grounding_dino/grounding_dino_swin-t_pretrain_obj365_goldg_cap4m.py @@ -0,0 +1,127 @@ +_base_ = [ + '../_base_/datasets/coco_detection.py', + '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' +] + +lang_model_name = 'bert-base-uncased' + +model = dict( + type='GroundingDINO', + num_queries=900, + with_box_refine=True, + as_two_stage=True, + data_preprocessor=dict( + type='DetDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True, + pad_mask=False, + ), + language_model=dict( + type='BertModel', + name=lang_model_name, + pad_to_max=False, + use_sub_sentence_represent=True, + special_tokens_list=['[CLS]', '[SEP]', '.', '?'], + add_pooling_layer=True, + ), + backbone=dict( + type='SwinTransformer', + embed_dims=96, + depths=[2, 2, 6, 2], + num_heads=[3, 6, 12, 24], + window_size=7, + mlp_ratio=4, + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.2, + patch_norm=True, + out_indices=(1, 2, 3), + with_cp=False, + convert_weights=False), + neck=dict( + type='ChannelMapper', + in_channels=[192, 384, 768], + kernel_size=1, + out_channels=256, + act_cfg=None, + bias=True, + norm_cfg=dict(type='GN', num_groups=32), + num_outs=4), + encoder=dict( + num_layers=6, + # visual layer config + layer_cfg=dict( + self_attn_cfg=dict(embed_dims=256, num_levels=4, dropout=0.0), + ffn_cfg=dict( + embed_dims=256, feedforward_channels=2048, ffn_drop=0.0)), + # text layer config + text_layer_cfg=dict( + self_attn_cfg=dict(num_heads=4, embed_dims=256, dropout=0.0), + ffn_cfg=dict( + embed_dims=256, feedforward_channels=1024, ffn_drop=0.0)), + # fusion layer config + fusion_layer_cfg=dict( + v_dim=256, + l_dim=256, + embed_dim=1024, + num_heads=4, + init_values=1e-4), + ), + decoder=dict( + num_layers=6, + return_intermediate=True, + layer_cfg=dict( + # query self attention layer + self_attn_cfg=dict(embed_dims=256, num_heads=8, dropout=0.0), + # cross attention layer query to text + cross_attn_text_cfg=dict(embed_dims=256, num_heads=8, dropout=0.0), + # cross attention layer query to image + cross_attn_cfg=dict(embed_dims=256, num_heads=8, dropout=0.0), + ffn_cfg=dict( + embed_dims=256, feedforward_channels=2048, ffn_drop=0.0)), + post_norm_cfg=None), + positional_encoding=dict( + num_feats=128, normalize=True, offset=0.0, temperature=20), + bbox_head=dict( + type='GroundingDINOHead', + num_classes=80, + sync_cls_avg_factor=True, + max_text_len=256, + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), # 2.0 in DeformDETR + loss_bbox=dict(type='L1Loss', loss_weight=5.0)), + dn_cfg=dict( # TODO: Move to model.train_cfg ? + label_noise_scale=0.5, + box_noise_scale=1.0, # 0.4 for DN-DETR + group_cfg=dict(dynamic=True, num_groups=None, + num_dn_queries=100)), # TODO: half num_dn_queries + # training and testing settings + train_cfg=None, + test_cfg=dict(max_per_img=300)) + +test_pipeline = [ + dict( + type='LoadImageFromFile', backend_args=None, + imdecode_backend='pillow'), + dict( + type='FixScaleResize', + scale=(800, 1333), + keep_ratio=True, + backend='pillow'), + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor', 'text', 'custom_entities')) +] + +val_dataloader = dict( + dataset=dict(pipeline=test_pipeline, return_classes=True)) +test_dataloader = val_dataloader diff --git a/configs/grounding_dino/metafile.yml b/configs/grounding_dino/metafile.yml new file mode 100644 index 00000000000..86a0858d690 --- /dev/null +++ b/configs/grounding_dino/metafile.yml @@ -0,0 +1,40 @@ +Collections: + - Name: Grounding DINO + Metadata: + Training Data: Objects365, GoldG, CC3M and COCO + Training Techniques: + - AdamW + - Multi Scale Train + - Gradient Clip + Training Resources: A100 GPUs + Architecture: + - Swin Transformer + - BERT + Paper: + URL: https://arxiv.org/abs/2303.05499 + Title: 'Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection +' + README: configs/grounding_dino/README.md + Code: + URL: + Version: v3.0.0 + +Models: + - Name: grounding_dino_swin-t_pretrain_obj365_goldg_cap4m + In Collection: Grounding DINO + Config: configs/grounding_dino/grounding_dino_swin-t_pretrain_obj365_goldg_cap4m.py + Results: + - Task: Object Detection + Dataset: COCO + Metrics: + box AP: 48.5 + Weights: https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/groundingdino_swint_ogc_mmdet-822d7e9d.pth + - Name: grounding_dino_swin-b_pretrain_mixeddata + In Collection: GLIPGrounding DINO + Config: configs/grounding_dino/grounding_dino_swin-b_pretrain_mixeddata.py + Results: + - Task: Object Detection + Dataset: COCO + Metrics: + box AP: 56.9 + Weights: https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/groundingdino_swinb_cogcoor_mmdet-55949c9c.pth diff --git a/mmdet/models/dense_heads/__init__.py b/mmdet/models/dense_heads/__init__.py index 2143d93d854..c9b55ec2a42 100644 --- a/mmdet/models/dense_heads/__init__.py +++ b/mmdet/models/dense_heads/__init__.py @@ -26,6 +26,7 @@ from .ga_retina_head import GARetinaHead from .ga_rpn_head import GARPNHead from .gfl_head import GFLHead +from .grounding_dino_head import GroundingDINOHead from .guided_anchor_head import FeatureAdaption, GuidedAnchorHead from .lad_head import LADHead from .ld_head import LDHead @@ -67,5 +68,5 @@ 'CenterNetUpdateHead', 'RTMDetHead', 'RTMDetSepBNHead', 'CondInstBboxHead', 'CondInstMaskHead', 'RTMDetInsHead', 'RTMDetInsSepBNHead', 'BoxInstBboxHead', 'BoxInstMaskHead', 'ConditionalDETRHead', 'DINOHead', - 'ATSSVLFusionHead', 'DABDETRHead', 'DDQDETRHead' + 'ATSSVLFusionHead', 'DABDETRHead', 'DDQDETRHead', 'GroundingDINOHead' ] diff --git a/mmdet/models/dense_heads/grounding_dino_head.py b/mmdet/models/dense_heads/grounding_dino_head.py new file mode 100644 index 00000000000..d3ca2baf088 --- /dev/null +++ b/mmdet/models/dense_heads/grounding_dino_head.py @@ -0,0 +1,321 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import copy +from typing import Dict, List, Optional, Tuple + +import torch +import torch.nn as nn +from mmcv.cnn import Linear +from mmengine.structures import InstanceData +from torch import Tensor + +from mmdet.registry import MODELS +from mmdet.structures import SampleList +from mmdet.structures.bbox import bbox_cxcywh_to_xyxy +from mmdet.utils import InstanceList +from ..layers import inverse_sigmoid +from .atss_vlfusion_head import convert_grounding_to_cls_scores +from .dino_head import DINOHead + + +class ContrastiveEmbed(nn.Module): + """text visual ContrastiveEmbed layer. + + Args: + max_text_len (int, optional): Maximum length of text. + """ + + def __init__(self, max_text_len=256): + super().__init__() + self.max_text_len = max_text_len + + def forward(self, visual_feat: Tensor, text_feat: Tensor, + text_token_mask: Tensor) -> Tensor: + """Forward function. + + Args: + visual_feat (Tensor): Visual features. + text_feat (Tensor): Text features. + text_token_mask (Tensor): A mask used for text feats. + + Returns: + Tensor: Classification score. + """ + res = visual_feat @ text_feat.transpose(-1, -2) + res.masked_fill_(~text_token_mask[:, None, :], float('-inf')) + + new_res = torch.full((*res.shape[:-1], self.max_text_len), + float('-inf'), + device=res.device) + new_res[..., :res.shape[-1]] = res + + return new_res + + +@MODELS.register_module() +class GroundingDINOHead(DINOHead): + """Head of the Grounding DINO: Marrying DINO with Grounded Pre-Training for + Open-Set Object Detection. + + Args: + max_text_len (int, optional): Maximum length of text. + """ + + def __init__(self, max_text_len=256, **kwargs): + + self.max_text_len = max_text_len + super().__init__(**kwargs) + + def _init_layers(self) -> None: + """Initialize classification branch and regression branch of head.""" + fc_cls = ContrastiveEmbed(self.max_text_len) + reg_branch = [] + for _ in range(self.num_reg_fcs): + reg_branch.append(Linear(self.embed_dims, self.embed_dims)) + reg_branch.append(nn.ReLU()) + reg_branch.append(Linear(self.embed_dims, 4)) + reg_branch = nn.Sequential(*reg_branch) + + # NOTE: due to the fc_cls is a contrastive embedding and don't + # have any trainable parameters,we do not need to copy it. + if self.share_pred_layer: + self.cls_branches = nn.ModuleList( + [fc_cls for _ in range(self.num_pred_layer)]) + self.reg_branches = nn.ModuleList( + [reg_branch for _ in range(self.num_pred_layer)]) + else: + self.cls_branches = nn.ModuleList( + [fc_cls for _ in range(self.num_pred_layer)]) + self.reg_branches = nn.ModuleList([ + copy.deepcopy(reg_branch) for _ in range(self.num_pred_layer) + ]) + + def forward( + self, + hidden_states: Tensor, + references: List[Tensor], + memory_text: Tensor, + text_token_mask: Tensor, + ) -> Tuple[Tensor]: + """Forward function. + + Args: + hidden_states (Tensor): Hidden states output from each decoder + layer, has shape (num_decoder_layers, bs, num_queries, dim). + references (List[Tensor]): List of the reference from the decoder. + The first reference is the `init_reference` (initial) and the + other num_decoder_layers(6) references are `inter_references` + (intermediate). The `init_reference` has shape (bs, + num_queries, 4) when `as_two_stage` of the detector is `True`, + otherwise (bs, num_queries, 2). Each `inter_reference` has + shape (bs, num_queries, 4) when `with_box_refine` of the + detector is `True`, otherwise (bs, num_queries, 2). The + coordinates are arranged as (cx, cy) when the last dimension is + 2, and (cx, cy, w, h) when it is 4. + memory_text (Tensor): Memory text. It has shape (bs, len_text, + text_embed_dims). + text_token_mask (Tensor): Text token mask. It has shape (bs, + len_text). + + Returns: + tuple[Tensor]: results of head containing the following tensor. + + - all_layers_outputs_classes (Tensor): Outputs from the + classification head, has shape (num_decoder_layers, bs, + num_queries, cls_out_channels). + - all_layers_outputs_coords (Tensor): Sigmoid outputs from the + regression head with normalized coordinate format (cx, cy, w, + h), has shape (num_decoder_layers, bs, num_queries, 4) with the + last dimension arranged as (cx, cy, w, h). + """ + all_layers_outputs_classes = [] + all_layers_outputs_coords = [] + + for layer_id in range(hidden_states.shape[0]): + reference = inverse_sigmoid(references[layer_id]) + # NOTE The last reference will not be used. + hidden_state = hidden_states[layer_id] + outputs_class = self.cls_branches[layer_id](hidden_state, + memory_text, + text_token_mask) + tmp_reg_preds = self.reg_branches[layer_id](hidden_state) + if reference.shape[-1] == 4: + # When `layer` is 0 and `as_two_stage` of the detector + # is `True`, or when `layer` is greater than 0 and + # `with_box_refine` of the detector is `True`. + tmp_reg_preds += reference + else: + # When `layer` is 0 and `as_two_stage` of the detector + # is `False`, or when `layer` is greater than 0 and + # `with_box_refine` of the detector is `False`. + assert reference.shape[-1] == 2 + tmp_reg_preds[..., :2] += reference + outputs_coord = tmp_reg_preds.sigmoid() + all_layers_outputs_classes.append(outputs_class) + all_layers_outputs_coords.append(outputs_coord) + + all_layers_outputs_classes = torch.stack(all_layers_outputs_classes) + all_layers_outputs_coords = torch.stack(all_layers_outputs_coords) + + return all_layers_outputs_classes, all_layers_outputs_coords + + def predict(self, + hidden_states: Tensor, + references: List[Tensor], + memory_text: Tensor, + text_token_mask: Tensor, + batch_data_samples: SampleList, + rescale: bool = True) -> InstanceList: + """Perform forward propagation and loss calculation of the detection + head on the queries of the upstream network. + + Args: + hidden_states (Tensor): Hidden states output from each decoder + layer, has shape (num_decoder_layers, num_queries, bs, dim). + references (List[Tensor]): List of the reference from the decoder. + The first reference is the `init_reference` (initial) and the + other num_decoder_layers(6) references are `inter_references` + (intermediate). The `init_reference` has shape (bs, + num_queries, 4) when `as_two_stage` of the detector is `True`, + otherwise (bs, num_queries, 2). Each `inter_reference` has + shape (bs, num_queries, 4) when `with_box_refine` of the + detector is `True`, otherwise (bs, num_queries, 2). The + coordinates are arranged as (cx, cy) when the last dimension is + 2, and (cx, cy, w, h) when it is 4. + memory_text (Tensor): Memory text. It has shape (bs, len_text, + text_embed_dims). + text_token_mask (Tensor): Text token mask. It has shape (bs, + len_text). + batch_data_samples (SampleList): The Data + Samples. It usually includes information such as + `gt_instance`, `gt_panoptic_seg` and `gt_sem_seg`. + rescale (bool, optional): If `True`, return boxes in original + image space. Defaults to `True`. + + Returns: + InstanceList: Detection results of each image + after the post process. + """ + batch_img_metas = [ + data_samples.metainfo for data_samples in batch_data_samples + ] + batch_token_positive_maps = [ + data_samples.token_positive_map + for data_samples in batch_data_samples + ] + + outs = self(hidden_states, references, memory_text, text_token_mask) + + predictions = self.predict_by_feat( + *outs, + batch_img_metas=batch_img_metas, + batch_token_positive_maps=batch_token_positive_maps, + rescale=rescale) + return predictions + + def predict_by_feat(self, + all_layers_cls_scores: Tensor, + all_layers_bbox_preds: Tensor, + batch_img_metas: List[Dict], + batch_token_positive_maps: Optional[List[dict]] = None, + rescale: bool = False) -> InstanceList: + """Transform a batch of output features extracted from the head into + bbox results. + + Args: + all_layers_cls_scores (Tensor): Classification scores of all + decoder layers, has shape (num_decoder_layers, bs, num_queries, + cls_out_channels). + all_layers_bbox_preds (Tensor): Regression outputs of all decoder + layers. Each is a 4D-tensor with normalized coordinate format + (cx, cy, w, h) and shape (num_decoder_layers, bs, num_queries, + 4) with the last dimension arranged as (cx, cy, w, h). + batch_img_metas (List[Dict]): _description_ + batch_token_positive_maps (list[dict], Optional): Batch token + positive map. Defaults to None. + rescale (bool): If True, return boxes in original image space. + Defaults to False. + + Returns: + list[:obj:`InstanceData`]: Object detection results of each image + after the post process. Each item usually contains following keys. + + - scores (Tensor): Classification scores, has a shape + (num_instance, ) + - labels (Tensor): Labels of bboxes, has a shape + (num_instances, ). + - bboxes (Tensor): Has a shape (num_instances, 4), + the last dimension 4 arrange as (x1, y1, x2, y2). + """ + cls_scores = all_layers_cls_scores[-1] + bbox_preds = all_layers_bbox_preds[-1] + result_list = [] + for img_id in range(len(batch_img_metas)): + cls_score = cls_scores[img_id] + bbox_pred = bbox_preds[img_id] + img_meta = batch_img_metas[img_id] + token_positive_maps = batch_token_positive_maps[img_id] + results = self._predict_by_feat_single(cls_score, bbox_pred, + token_positive_maps, + img_meta, rescale) + result_list.append(results) + return result_list + + def _predict_by_feat_single(self, + cls_score: Tensor, + bbox_pred: Tensor, + token_positive_maps: dict, + img_meta: dict, + rescale: bool = True) -> InstanceData: + """Transform a single image's features extracted from the head into + bbox results. + + Args: + cls_score (Tensor): Box score logits from the last decoder layer + for each image. Shape [num_queries, cls_out_channels]. + bbox_pred (Tensor): Sigmoid outputs from the last decoder layer + for each image, with coordinate format (cx, cy, w, h) and + shape [num_queries, 4]. + token_positive_maps (dict): Token positive map. + img_meta (dict): Image meta info. + rescale (bool, optional): If True, return boxes in original image + space. Default True. + + Returns: + :obj:`InstanceData`: Detection results of each image + after the post process. + Each item usually contains following keys. + + - scores (Tensor): Classification scores, has a shape + (num_instance, ) + - labels (Tensor): Labels of bboxes, has a shape + (num_instances, ). + - bboxes (Tensor): Has a shape (num_instances, 4), + the last dimension 4 arrange as (x1, y1, x2, y2). + """ + assert len(cls_score) == len(bbox_pred) # num_queries + max_per_img = self.test_cfg.get('max_per_img', len(cls_score)) + img_shape = img_meta['img_shape'] + + cls_score = convert_grounding_to_cls_scores( + logits=cls_score.sigmoid()[None], + positive_maps=[token_positive_maps])[0] + scores, indexes = cls_score.view(-1).topk(max_per_img) + num_classes = cls_score.shape[-1] + det_labels = indexes % num_classes + bbox_index = indexes // num_classes + bbox_pred = bbox_pred[bbox_index] + + det_bboxes = bbox_cxcywh_to_xyxy(bbox_pred) + det_bboxes[:, 0::2] = det_bboxes[:, 0::2] * img_shape[1] + det_bboxes[:, 1::2] = det_bboxes[:, 1::2] * img_shape[0] + det_bboxes[:, 0::2].clamp_(min=0, max=img_shape[1]) + det_bboxes[:, 1::2].clamp_(min=0, max=img_shape[0]) + if rescale: + assert img_meta.get('scale_factor') is not None + det_bboxes /= det_bboxes.new_tensor( + img_meta['scale_factor']).repeat((1, 2)) + results = InstanceData() + results.bboxes = det_bboxes + results.scores = scores + results.labels = det_labels + return results diff --git a/mmdet/models/detectors/__init__.py b/mmdet/models/detectors/__init__.py index bc1ff257da4..e5a06d2813c 100644 --- a/mmdet/models/detectors/__init__.py +++ b/mmdet/models/detectors/__init__.py @@ -25,6 +25,7 @@ from .gfl import GFL from .glip import GLIP from .grid_rcnn import GridRCNN +from .grounding_dino import GroundingDINO from .htc import HybridTaskCascade from .kd_one_stage import KnowledgeDistillationSingleStageDetector from .lad import LAD @@ -70,5 +71,5 @@ 'MaskFormer', 'DDOD', 'Mask2Former', 'SemiBaseDetector', 'SoftTeacher', 'RTMDet', 'Detectron2Wrapper', 'CrowdDet', 'CondInst', 'BoxInst', 'DetectionTransformer', 'ConditionalDETR', 'DINO', 'DABDETR', 'GLIP', - 'DDQDETR' + 'DDQDETR', 'GroundingDINO' ] diff --git a/mmdet/models/detectors/dino.py b/mmdet/models/detectors/dino.py index a4385462aff..ade47f531d2 100644 --- a/mmdet/models/detectors/dino.py +++ b/mmdet/models/detectors/dino.py @@ -221,7 +221,8 @@ def forward_decoder(self, spatial_shapes: Tensor, level_start_index: Tensor, valid_ratios: Tensor, - dn_mask: Optional[Tensor] = None) -> Dict: + dn_mask: Optional[Tensor] = None, + **kwargs) -> Dict: """Forward with Transformer decoder. The forward procedure of the transformer is defined as: @@ -270,7 +271,8 @@ def forward_decoder(self, spatial_shapes=spatial_shapes, level_start_index=level_start_index, valid_ratios=valid_ratios, - reg_branches=self.bbox_head.reg_branches) + reg_branches=self.bbox_head.reg_branches, + **kwargs) if len(query) == self.num_queries: # NOTE: This is to make sure label_embeding can be involved to diff --git a/mmdet/models/detectors/grounding_dino.py b/mmdet/models/detectors/grounding_dino.py new file mode 100644 index 00000000000..b2495b91cd3 --- /dev/null +++ b/mmdet/models/detectors/grounding_dino.py @@ -0,0 +1,309 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import warnings +from typing import Dict, Tuple, Union + +import torch +import torch.nn as nn +from torch import Tensor + +from mmdet.registry import MODELS +from mmdet.structures import OptSampleList +from ..layers import SinePositionalEncoding +from ..layers.transformer.grounding_dino_layers import ( + GroundingDinoTransformerDecoder, GroundingDinoTransformerEncoder) +from .dino import DINO +from .glip import (create_positive_map, create_positive_map_label_to_token, + run_ner) + + +@MODELS.register_module() +class GroundingDINO(DINO): + """Implementation of `Grounding DINO: Marrying DINO with Grounded Pre- + Training for Open-Set Object Detection. + + `_ + + Code is modified from the `official github repo + `_. + """ + + def __init__(self, language_model, *args, **kwargs) -> None: + + self.language_model_cfg = language_model + self._special_tokens = '. ' + super().__init__(*args, **kwargs) + + def _init_layers(self) -> None: + """Initialize layers except for backbone, neck and bbox_head.""" + self.positional_encoding = SinePositionalEncoding( + **self.positional_encoding) + self.encoder = GroundingDinoTransformerEncoder(**self.encoder) + self.decoder = GroundingDinoTransformerDecoder(**self.decoder) + self.embed_dims = self.encoder.embed_dims + self.query_embedding = nn.Embedding(self.num_queries, self.embed_dims) + num_feats = self.positional_encoding.num_feats + assert num_feats * 2 == self.embed_dims, \ + f'embed_dims should be exactly 2 times of num_feats. ' \ + f'Found {self.embed_dims} and {num_feats}.' + + self.level_embed = nn.Parameter( + torch.Tensor(self.num_feature_levels, self.embed_dims)) + self.memory_trans_fc = nn.Linear(self.embed_dims, self.embed_dims) + self.memory_trans_norm = nn.LayerNorm(self.embed_dims) + + # text modules + self.language_model = MODELS.build(self.language_model_cfg) + self.text_feat_map = nn.Linear( + self.language_model.language_backbone.body.language_dim, + self.embed_dims, + bias=True) + nn.init.constant_(self.text_feat_map.bias.data, 0) + nn.init.xavier_uniform_(self.text_feat_map.weight.data) + + def get_tokens_and_prompts( + self, + original_caption: Union[str, list, tuple], + custom_entities: bool = False) -> Tuple[dict, str, list]: + """Get the tokens positive and prompts for the caption.""" + if isinstance(original_caption, (list, tuple)) or custom_entities: + if custom_entities and isinstance(original_caption, str): + if original_caption.endswith(self._special_tokens): + original_caption = original_caption.replace( + self._special_tokens, '') + original_caption = original_caption.split(self._special_tokens) + original_caption = list( + filter(lambda x: len(x) > 0, original_caption)) + + caption_string = '' + tokens_positive = [] + for idx, word in enumerate(original_caption): + tokens_positive.append( + [[len(caption_string), + len(caption_string) + len(word)]]) + caption_string += word + caption_string += self._special_tokens + # NOTE: Tokenizer in Grounding DINO is different from + # that in GLIP. The tokenizer in GLIP will pad the + # caption_string to max_length, while the tokenizer + # in Grounding DINO will not. + tokenized = self.language_model.tokenizer( + [caption_string], + padding='max_length' + if self.language_model.pad_to_max else 'longest', + return_tensors='pt') + entities = original_caption + else: + if original_caption.endswith(self._special_tokens): + original_caption = original_caption.replace( + self._special_tokens, '') + # NOTE: Tokenizer in Grounding DINO is different from + # that in GLIP. The tokenizer in GLIP will pad the + # caption_string to max_length, while the tokenizer + # in Grounding DINO will not. + tokenized = self.language_model.tokenizer( + [original_caption], + padding='max_length' + if self.language_model.pad_to_max else 'longest', + return_tensors='pt') + tokens_positive, noun_phrases = run_ner(original_caption) + entities = noun_phrases + caption_string = original_caption + + return tokenized, caption_string, tokens_positive, entities + + def get_positive_map(self, tokenized, tokens_positive): + positive_map = create_positive_map(tokenized, tokens_positive) + positive_map_label_to_token = create_positive_map_label_to_token( + positive_map, plus=1) + return positive_map_label_to_token, positive_map + + def get_tokens_positive_and_prompts( + self, + original_caption: Union[str, list, tuple], + custom_entities: bool = False) -> Tuple[dict, str, Tensor, list]: + """Get the tokens positive and prompts for the caption.""" + tokenized, caption_string, tokens_positive, entities = \ + self.get_tokens_and_prompts( + original_caption, custom_entities) + positive_map_label_to_token, positive_map = self.get_positive_map( + tokenized, tokens_positive) + return positive_map_label_to_token, caption_string, \ + positive_map, entities + + def forward_transformer( + self, + img_feats: Tuple[Tensor], + text_dict: Dict, + batch_data_samples: OptSampleList = None, + ) -> Dict: + encoder_inputs_dict, decoder_inputs_dict = self.pre_transformer( + img_feats, batch_data_samples) + + encoder_outputs_dict = self.forward_encoder( + **encoder_inputs_dict, text_dict=text_dict) + + tmp_dec_in, head_inputs_dict = self.pre_decoder( + **encoder_outputs_dict, batch_data_samples=batch_data_samples) + decoder_inputs_dict.update(tmp_dec_in) + + decoder_outputs_dict = self.forward_decoder(**decoder_inputs_dict) + head_inputs_dict.update(decoder_outputs_dict) + return head_inputs_dict + + def forward_encoder(self, feat: Tensor, feat_mask: Tensor, + feat_pos: Tensor, spatial_shapes: Tensor, + level_start_index: Tensor, valid_ratios: Tensor, + text_dict: Dict) -> Dict: + text_token_mask = text_dict['text_token_mask'] + memory, memory_text = self.encoder( + query=feat, + query_pos=feat_pos, + key_padding_mask=feat_mask, # for self_attn + spatial_shapes=spatial_shapes, + level_start_index=level_start_index, + valid_ratios=valid_ratios, + # for text encoder + memory_text=text_dict['embedded'], + text_attention_mask=~text_token_mask, + position_ids=text_dict['position_ids'], + text_self_attention_masks=text_dict['masks']) + encoder_outputs_dict = dict( + memory=memory, + memory_mask=feat_mask, + spatial_shapes=spatial_shapes, + memory_text=memory_text, + text_token_mask=text_token_mask) + return encoder_outputs_dict + + def pre_decoder( + self, + memory: Tensor, + memory_mask: Tensor, + spatial_shapes: Tensor, + memory_text: Tensor, + text_token_mask: Tensor, + batch_data_samples: OptSampleList = None, + ) -> Tuple[Dict]: + bs, _, c = memory.shape + + output_memory, output_proposals = self.gen_encoder_output_proposals( + memory, memory_mask, spatial_shapes) + + enc_outputs_class = self.bbox_head.cls_branches[ + self.decoder.num_layers](output_memory, memory_text, + text_token_mask) + cls_out_features = self.bbox_head.cls_branches[ + self.decoder.num_layers].max_text_len + enc_outputs_coord_unact = self.bbox_head.reg_branches[ + self.decoder.num_layers](output_memory) + output_proposals + + # NOTE The DINO selects top-k proposals according to scores of + # multi-class classification, while DeformDETR, where the input + # is `enc_outputs_class[..., 0]` selects according to scores of + # binary classification. + topk_indices = torch.topk( + enc_outputs_class.max(-1)[0], k=self.num_queries, dim=1)[1] + + topk_score = torch.gather( + enc_outputs_class, 1, + topk_indices.unsqueeze(-1).repeat(1, 1, cls_out_features)) + topk_coords_unact = torch.gather( + enc_outputs_coord_unact, 1, + topk_indices.unsqueeze(-1).repeat(1, 1, 4)) + topk_coords = topk_coords_unact.sigmoid() + topk_coords_unact = topk_coords_unact.detach() + + query = self.query_embedding.weight[:, None, :] + query = query.repeat(1, bs, 1).transpose(0, 1) + if self.training: + dn_label_query, dn_bbox_query, dn_mask, dn_meta = \ + self.dn_query_generator(batch_data_samples) + query = torch.cat([dn_label_query, query], dim=1) + reference_points = torch.cat([dn_bbox_query, topk_coords_unact], + dim=1) + else: + reference_points = topk_coords_unact + dn_mask, dn_meta = None, None + reference_points = reference_points.sigmoid() + + decoder_inputs_dict = dict( + query=query, + memory=memory, + reference_points=reference_points, + dn_mask=dn_mask, + memory_text=memory_text, + text_attention_mask=~text_token_mask, + ) + # NOTE DINO calculates encoder losses on scores and coordinates + # of selected top-k encoder queries, while DeformDETR is of all + # encoder queries. + head_inputs_dict = dict( + enc_outputs_class=topk_score, + enc_outputs_coord=topk_coords, + dn_meta=dn_meta) if self.training else dict() + # append text_feats to head_inputs_dict + head_inputs_dict['memory_text'] = memory_text + head_inputs_dict['text_token_mask'] = text_token_mask + return decoder_inputs_dict, head_inputs_dict + + def predict(self, batch_inputs, batch_data_samples, rescale: bool = True): + text_prompts = [ + data_samples.text for data_samples in batch_data_samples + ] + if 'custom_entities' in batch_data_samples[0]: + # Assuming that the `custom_entities` flag + # inside a batch is always the same. For single image inference + custom_entities = batch_data_samples[0].custom_entities + else: + custom_entities = False + if len(text_prompts) == 1: + # All the text prompts are the same, + # so there is no need to calculate them multiple times. + _positive_maps_and_prompts = [ + self.get_tokens_positive_and_prompts(text_prompts[0], + custom_entities) + ] * len(batch_inputs) + else: + _positive_maps_and_prompts = [ + self.get_tokens_positive_and_prompts(text_prompt, + custom_entities) + for text_prompt in text_prompts + ] + token_positive_maps, text_prompts, _, entities = zip( + *_positive_maps_and_prompts) + # extract text feats + text_dict = self.language_model(list(text_prompts)) + # text feature map layer + if self.text_feat_map is not None: + text_dict['embedded'] = self.text_feat_map(text_dict['embedded']) + + for i, data_samples in enumerate(batch_data_samples): + data_samples.token_positive_map = token_positive_maps[i] + + # image feature extraction + visual_feats = self.extract_feat(batch_inputs) + + head_inputs_dict = self.forward_transformer(visual_feats, text_dict, + batch_data_samples) + results_list = self.bbox_head.predict( + **head_inputs_dict, + rescale=rescale, + batch_data_samples=batch_data_samples) + for data_sample, pred_instances, entity in zip(batch_data_samples, + results_list, entities): + if len(pred_instances) > 0: + label_names = [] + for labels in pred_instances.labels: + if labels >= len(entity): + warnings.warn( + 'The unexpected output indicates an issue with ' + 'named entity recognition. You can try ' + 'setting custom_entities=True and running ' + 'again to see if it helps.') + label_names.append('unobject') + else: + label_names.append(entity[labels]) + # for visualization + pred_instances.label_names = label_names + data_sample.pred_instances = pred_instances + return batch_data_samples diff --git a/mmdet/models/language_models/bert.py b/mmdet/models/language_models/bert.py index 86a4dc8d5d1..3a911bbc2f4 100644 --- a/mmdet/models/language_models/bert.py +++ b/mmdet/models/language_models/bert.py @@ -16,20 +16,72 @@ from mmdet.registry import MODELS +def generate_masks_with_special_tokens_and_transfer_map( + tokenized, special_tokens_list): + """Generate attention mask between each pair of special tokens + Args: + input_ids (torch.Tensor): input ids. Shape: [bs, num_token] + special_tokens_mask (list): special tokens mask. + Returns: + torch.Tensor: attention mask between each special tokens. + """ + input_ids = tokenized['input_ids'] + bs, num_token = input_ids.shape + # special_tokens_mask: + # bs, num_token. 1 for special tokens. 0 for normal tokens + special_tokens_mask = torch.zeros((bs, num_token), + device=input_ids.device).bool() + + for special_token in special_tokens_list: + special_tokens_mask |= input_ids == special_token + + # idxs: each row is a list of indices of special tokens + idxs = torch.nonzero(special_tokens_mask) + + # generate attention mask and positional ids + attention_mask = ( + torch.eye(num_token, + device=input_ids.device).bool().unsqueeze(0).repeat( + bs, 1, 1)) + position_ids = torch.zeros((bs, num_token), device=input_ids.device) + previous_col = 0 + for i in range(idxs.shape[0]): + row, col = idxs[i] + if (col == 0) or (col == num_token - 1): + attention_mask[row, col, col] = True + position_ids[row, col] = 0 + else: + attention_mask[row, previous_col + 1:col + 1, + previous_col + 1:col + 1] = True + position_ids[row, previous_col + 1:col + 1] = torch.arange( + 0, col - previous_col, device=input_ids.device) + previous_col = col + + return attention_mask, position_ids.to(torch.long) + + @MODELS.register_module() class BertModel(BaseModel): """BERT model for language embedding only encoder. Args: - name (str): name of the pretrained BERT model from HuggingFace. - Defaults to bert-base-uncased. - max_tokens (int): maximum number of tokens to be used for BERT. - Defaults to 256. - pad_to_max (bool): whether to pad the tokens to max_tokens. + name (str, optional): name of the pretrained BERT model from + HuggingFace. Defaults to bert-base-uncased. + max_tokens (int, optional): maximum number of tokens to be + used for BERT. Defaults to 256. + pad_to_max (bool, optional): whether to pad the tokens to max_tokens. Defaults to True. - num_layers_of_embedded (int): number of layers of the embedded model. - Defaults to 1. - use_checkpoint (bool): whether to use gradient checkpointing. + use_sub_sentence_represent (bool, optional): whether to use sub + sentence represent introduced in `Grounding DINO + `. Defaults to False. + special_tokens_list (list, optional): special tokens used to split + subsentence. It cannot be None when `use_sub_sentence_represent` + is True. Defaults to None. + add_pooling_layer (bool, optional): whether to adding pooling + layer in bert encoder. Defaults to False. + num_layers_of_embedded (int, optional): number of layers of + the embedded model. Defaults to 1. + use_checkpoint (bool, optional): whether to use gradient checkpointing. Defaults to False. """ @@ -37,9 +89,13 @@ def __init__(self, name: str = 'bert-base-uncased', max_tokens: int = 256, pad_to_max: bool = True, + use_sub_sentence_represent: bool = False, + special_tokens_list: list = None, + add_pooling_layer: bool = False, num_layers_of_embedded: int = 1, use_checkpoint: bool = False, **kwargs) -> None: + super().__init__(**kwargs) self.max_tokens = max_tokens self.pad_to_max = pad_to_max @@ -54,9 +110,19 @@ def __init__(self, OrderedDict([('body', BertEncoder( name, + add_pooling_layer=add_pooling_layer, num_layers_of_embedded=num_layers_of_embedded, use_checkpoint=use_checkpoint))])) + self.use_sub_sentence_represent = use_sub_sentence_represent + if self.use_sub_sentence_represent: + assert special_tokens_list is not None, \ + 'special_tokens should not be None \ + if use_sub_sentence_represent is True' + + self.special_tokens = self.tokenizer.convert_tokens_to_ids( + special_tokens_list) + def forward(self, captions: Sequence[str], **kwargs) -> dict: """Forward function.""" device = next(self.language_backbone.parameters()).device @@ -67,12 +133,29 @@ def forward(self, captions: Sequence[str], **kwargs) -> dict: return_special_tokens_mask=True, return_tensors='pt', truncation=True).to(device) + input_ids = tokenized.input_ids + if self.use_sub_sentence_represent: + attention_mask, position_ids = \ + generate_masks_with_special_tokens_and_transfer_map( + tokenized, self.special_tokens) + token_type_ids = tokenized['token_type_ids'] + + else: + attention_mask = tokenized.attention_mask + position_ids = None + token_type_ids = None tokenizer_input = { - 'input_ids': tokenized.input_ids, - 'attention_mask': tokenized.attention_mask + 'input_ids': input_ids, + 'attention_mask': attention_mask, + 'position_ids': position_ids, + 'token_type_ids': token_type_ids } language_dict_features = self.language_backbone(tokenizer_input) + if self.use_sub_sentence_represent: + language_dict_features['position_ids'] = position_ids + language_dict_features[ + 'text_token_mask'] = tokenized.attention_mask.bool() return language_dict_features @@ -82,6 +165,7 @@ class BertEncoder(nn.Module): Args: name (str): name of the pretrained BERT model from HuggingFace. Defaults to bert-base-uncased. + add_pooling_layer (bool): whether to add a pooling layer. num_layers_of_embedded (int): number of layers of the embedded model. Defaults to 1. use_checkpoint (bool): whether to use gradient checkpointing. @@ -90,6 +174,7 @@ class BertEncoder(nn.Module): def __init__(self, name: str, + add_pooling_layer: bool = False, num_layers_of_embedded: int = 1, use_checkpoint: bool = False): super().__init__() @@ -101,7 +186,7 @@ def __init__(self, config.gradient_checkpointing = use_checkpoint # only encoder self.model = HFBertModel.from_pretrained( - name, add_pooling_layer=False, config=config) + name, add_pooling_layer=add_pooling_layer, config=config) self.language_dim = config.hidden_size self.num_layers_of_embedded = num_layers_of_embedded @@ -111,6 +196,8 @@ def forward(self, x) -> dict: outputs = self.model( input_ids=x['input_ids'], attention_mask=mask, + position_ids=x['position_ids'], + token_type_ids=x['token_type_ids'], output_hidden_states=True, ) @@ -120,7 +207,10 @@ def forward(self, x) -> dict: 1).mean(1) # language embedding has shape [len(phrase), seq_len, language_dim] features = features / self.num_layers_of_embedded - embedded = features * mask.unsqueeze(-1).float() + if mask.dim() == 2: + embedded = features * mask.unsqueeze(-1).float() + else: + embedded = features results = { 'embedded': embedded, diff --git a/mmdet/models/layers/transformer/__init__.py b/mmdet/models/layers/transformer/__init__.py index 3465ef3d1a7..839d9364126 100644 --- a/mmdet/models/layers/transformer/__init__.py +++ b/mmdet/models/layers/transformer/__init__.py @@ -12,6 +12,9 @@ from .detr_layers import (DetrTransformerDecoder, DetrTransformerDecoderLayer, DetrTransformerEncoder, DetrTransformerEncoderLayer) from .dino_layers import CdnQueryGenerator, DinoTransformerDecoder +from .grounding_dino_layers import (GroundingDinoTransformerDecoder, + GroundingDinoTransformerDecoderLayer, + GroundingDinoTransformerEncoder) from .mask2former_layers import (Mask2FormerTransformerDecoder, Mask2FormerTransformerDecoderLayer, Mask2FormerTransformerEncoder) @@ -32,5 +35,7 @@ 'DDQTransformerDecoder', 'ConditionalDetrTransformerDecoder', 'ConditionalDetrTransformerDecoderLayer', 'DinoTransformerDecoder', 'CdnQueryGenerator', 'Mask2FormerTransformerEncoder', - 'Mask2FormerTransformerDecoderLayer', 'Mask2FormerTransformerDecoder' + 'Mask2FormerTransformerDecoderLayer', 'Mask2FormerTransformerDecoder', + 'GroundingDinoTransformerDecoderLayer', 'GroundingDinoTransformerEncoder', + 'GroundingDinoTransformerDecoder' ] diff --git a/mmdet/models/layers/transformer/grounding_dino_layers.py b/mmdet/models/layers/transformer/grounding_dino_layers.py new file mode 100644 index 00000000000..04de47288b3 --- /dev/null +++ b/mmdet/models/layers/transformer/grounding_dino_layers.py @@ -0,0 +1,255 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import torch +import torch.nn as nn +from mmcv.cnn import build_norm_layer +from mmcv.cnn.bricks.transformer import FFN, MultiheadAttention +from mmcv.ops import MultiScaleDeformableAttention +from mmengine.model import ModuleList +from torch import Tensor + +from mmdet.models.utils.vlfuse_helper import SingleScaleBiAttentionBlock +from mmdet.utils import ConfigType, OptConfigType +from .deformable_detr_layers import (DeformableDetrTransformerDecoderLayer, + DeformableDetrTransformerEncoder, + DeformableDetrTransformerEncoderLayer) +from .detr_layers import DetrTransformerEncoderLayer +from .dino_layers import DinoTransformerDecoder +from .utils import MLP, get_text_sine_pos_embed + + +class GroundingDinoTransformerDecoderLayer( + DeformableDetrTransformerDecoderLayer): + + def __init__(self, + cross_attn_text_cfg: OptConfigType = dict( + embed_dims=256, + num_heads=8, + dropout=0.0, + batch_first=True), + **kwargs) -> None: + """Decoder layer of Deformable DETR.""" + self.cross_attn_text_cfg = cross_attn_text_cfg + if 'batch_first' not in self.cross_attn_text_cfg: + self.cross_attn_text_cfg['batch_first'] = True + super().__init__(**kwargs) + + def _init_layers(self) -> None: + """Initialize self_attn, cross-attn, ffn, and norms.""" + self.self_attn = MultiheadAttention(**self.self_attn_cfg) + self.cross_attn_text = MultiheadAttention(**self.cross_attn_text_cfg) + self.cross_attn = MultiScaleDeformableAttention(**self.cross_attn_cfg) + self.embed_dims = self.self_attn.embed_dims + self.ffn = FFN(**self.ffn_cfg) + norms_list = [ + build_norm_layer(self.norm_cfg, self.embed_dims)[1] + for _ in range(4) + ] + self.norms = ModuleList(norms_list) + + def forward(self, + query: Tensor, + key: Tensor = None, + value: Tensor = None, + query_pos: Tensor = None, + key_pos: Tensor = None, + self_attn_mask: Tensor = None, + cross_attn_mask: Tensor = None, + key_padding_mask: Tensor = None, + memory_text: Tensor = None, + text_attention_mask: Tensor = None, + **kwargs) -> Tensor: + """Implements decoder layer in Grounding DINO transformer. + + Args: + query (Tensor): The input query, has shape (bs, num_queries, dim). + key (Tensor, optional): The input key, has shape (bs, num_keys, + dim). If `None`, the `query` will be used. Defaults to `None`. + value (Tensor, optional): The input value, has the same shape as + `key`, as in `nn.MultiheadAttention.forward`. If `None`, the + `key` will be used. Defaults to `None`. + query_pos (Tensor, optional): The positional encoding for `query`, + has the same shape as `query`. If not `None`, it will be added + to `query` before forward function. Defaults to `None`. + key_pos (Tensor, optional): The positional encoding for `key`, has + the same shape as `key`. If not `None`, it will be added to + `key` before forward function. If None, and `query_pos` has the + same shape as `key`, then `query_pos` will be used for + `key_pos`. Defaults to None. + self_attn_mask (Tensor, optional): ByteTensor mask, has shape + (num_queries, num_keys), as in `nn.MultiheadAttention.forward`. + Defaults to None. + cross_attn_mask (Tensor, optional): ByteTensor mask, has shape + (num_queries, num_keys), as in `nn.MultiheadAttention.forward`. + Defaults to None. + key_padding_mask (Tensor, optional): The `key_padding_mask` of + `self_attn` input. ByteTensor, has shape (bs, num_value). + Defaults to None. + memory_text (Tensor): Memory text. It has shape (bs, len_text, + text_embed_dims). + text_token_mask (Tensor): Text token mask. It has shape (bs, + len_text). + + Returns: + Tensor: forwarded results, has shape (bs, num_queries, dim). + """ + # self attention + query = self.self_attn( + query=query, + key=query, + value=query, + query_pos=query_pos, + key_pos=query_pos, + attn_mask=self_attn_mask, + **kwargs) + query = self.norms[0](query) + # cross attention between query and text + query = self.cross_attn_text( + query=query, + query_pos=query_pos, + key=memory_text, + value=memory_text, + key_padding_mask=text_attention_mask) + query = self.norms[1](query) + # cross attention between query and image + query = self.cross_attn( + query=query, + key=key, + value=value, + query_pos=query_pos, + key_pos=key_pos, + attn_mask=cross_attn_mask, + key_padding_mask=key_padding_mask, + **kwargs) + query = self.norms[2](query) + query = self.ffn(query) + query = self.norms[3](query) + + return query + + +class GroundingDinoTransformerEncoder(DeformableDetrTransformerEncoder): + + def __init__(self, text_layer_cfg: ConfigType, + fusion_layer_cfg: ConfigType, **kwargs) -> None: + self.text_layer_cfg = text_layer_cfg + self.fusion_layer_cfg = fusion_layer_cfg + super().__init__(**kwargs) + + def _init_layers(self) -> None: + """Initialize encoder layers.""" + self.layers = ModuleList([ + DeformableDetrTransformerEncoderLayer(**self.layer_cfg) + for _ in range(self.num_layers) + ]) + self.text_layers = ModuleList([ + DetrTransformerEncoderLayer(**self.text_layer_cfg) + for _ in range(self.num_layers) + ]) + self.fusion_layers = ModuleList([ + SingleScaleBiAttentionBlock(**self.fusion_layer_cfg) + for _ in range(self.num_layers) + ]) + self.embed_dims = self.layers[0].embed_dims + + def forward(self, + query: Tensor, + query_pos: Tensor, + key_padding_mask: Tensor, + spatial_shapes: Tensor, + level_start_index: Tensor, + valid_ratios: Tensor, + memory_text: Tensor = None, + text_attention_mask: Tensor = None, + pos_text: Tensor = None, + text_self_attention_masks: Tensor = None, + position_ids: Tensor = None): + """Forward function of Transformer encoder. + + Args: + query (Tensor): The input query, has shape (bs, num_queries, dim). + query_pos (Tensor): The positional encoding for query, has shape + (bs, num_queries, dim). + key_padding_mask (Tensor): The `key_padding_mask` of `self_attn` + input. ByteTensor, has shape (bs, num_queries). + spatial_shapes (Tensor): Spatial shapes of features in all levels, + has shape (num_levels, 2), last dimension represents (h, w). + level_start_index (Tensor): The start index of each level. + A tensor has shape (num_levels, ) and can be represented + as [0, h_0*w_0, h_0*w_0+h_1*w_1, ...]. + valid_ratios (Tensor): The ratios of the valid width and the valid + height relative to the width and the height of features in all + levels, has shape (bs, num_levels, 2). + memory_text (Tensor, optional): Memory text. It has shape (bs, + len_text, text_embed_dims). + text_attention_mask (Tensor, optional): Text token mask. It has + shape (bs,len_text). + pos_text (Tensor, optional): The positional encoding for text. + Defaults to None. + text_self_attention_masks (Tensor, optional): Text self attention + mask. Defaults to None. + position_ids (Tensor, optional): Text position ids. + Defaults to None. + """ + output = query + reference_points = self.get_encoder_reference_points( + spatial_shapes, valid_ratios, device=query.device) + if self.text_layers: + # generate pos_text + bs, n_text, _ = memory_text.shape + if pos_text is None and position_ids is None: + pos_text = ( + torch.arange(n_text, + device=memory_text.device).float().unsqueeze( + 0).unsqueeze(-1).repeat(bs, 1, 1)) + pos_text = get_text_sine_pos_embed( + pos_text, num_pos_feats=256, exchange_xy=False) + if position_ids is not None: + pos_text = get_text_sine_pos_embed( + position_ids[..., None], + num_pos_feats=256, + exchange_xy=False) + + # main process + for layer_id, layer in enumerate(self.layers): + if self.fusion_layers: + output, memory_text = self.fusion_layers[layer_id]( + visual_feature=output, + lang_feature=memory_text, + attention_mask_v=key_padding_mask, + attention_mask_l=text_attention_mask, + ) + if self.text_layers: + text_num_heads = self.text_layers[ + layer_id].self_attn_cfg.num_heads + memory_text = self.text_layers[layer_id]( + query=memory_text, + query_pos=(pos_text if pos_text is not None else None), + attn_mask=~text_self_attention_masks.repeat( + text_num_heads, 1, 1), # note we use ~ for mask here + key_padding_mask=None, + ) + output = layer( + query=output, + query_pos=query_pos, + reference_points=reference_points, + spatial_shapes=spatial_shapes, + level_start_index=level_start_index, + key_padding_mask=key_padding_mask) + return output, memory_text + + +class GroundingDinoTransformerDecoder(DinoTransformerDecoder): + + def _init_layers(self) -> None: + """Initialize decoder layers.""" + self.layers = ModuleList([ + GroundingDinoTransformerDecoderLayer(**self.layer_cfg) + for _ in range(self.num_layers) + ]) + self.embed_dims = self.layers[0].embed_dims + if self.post_norm_cfg is not None: + raise ValueError('There is not post_norm in ' + f'{self._get_name()}') + self.ref_point_head = MLP(self.embed_dims * 2, self.embed_dims, + self.embed_dims, 2) + self.norm = nn.LayerNorm(self.embed_dims) diff --git a/mmdet/models/layers/transformer/utils.py b/mmdet/models/layers/transformer/utils.py index 3ba8a824a24..6e43a172ca7 100644 --- a/mmdet/models/layers/transformer/utils.py +++ b/mmdet/models/layers/transformer/utils.py @@ -874,3 +874,42 @@ def forward(self, param_feature: Tensor, input_feature: Tensor) -> Tensor: features = self.activation(features) return features + + +def get_text_sine_pos_embed( + pos_tensor: torch.Tensor, + num_pos_feats: int = 128, + temperature: int = 10000, + exchange_xy: bool = True, +): + """generate sine position embedding from a position tensor + Args: + pos_tensor (torch.Tensor): shape: [..., n]. + num_pos_feats (int): projected shape for each float in the tensor. + temperature (int): temperature in the sine/cosine function. + exchange_xy (bool, optional): exchange pos x and pos y. For example, + input tensor is [x,y], the results will be [pos(y), pos(x)]. + Defaults to True. + Returns: + pos_embed (torch.Tensor): shape: [..., n*num_pos_feats]. + """ + scale = 2 * math.pi + dim_t = torch.arange( + num_pos_feats, dtype=torch.float32, device=pos_tensor.device) + dim_t = temperature**(2 * torch.div(dim_t, 2, rounding_mode='floor') / + num_pos_feats) + + def sine_func(x: torch.Tensor): + sin_x = x * scale / dim_t + sin_x = torch.stack((sin_x[..., 0::2].sin(), sin_x[..., 1::2].cos()), + dim=3).flatten(2) + return sin_x + + pos_res = [ + sine_func(x) + for x in pos_tensor.split([1] * pos_tensor.shape[-1], dim=-1) + ] + if exchange_xy: + pos_res[0], pos_res[1] = pos_res[1], pos_res[0] + pos_res = torch.cat(pos_res, dim=-1) + return pos_res diff --git a/mmdet/models/necks/channel_mapper.py b/mmdet/models/necks/channel_mapper.py index 9700a2b3e72..74293618f2b 100644 --- a/mmdet/models/necks/channel_mapper.py +++ b/mmdet/models/necks/channel_mapper.py @@ -1,5 +1,5 @@ # Copyright (c) OpenMMLab. All rights reserved. -from typing import List, Tuple +from typing import List, Tuple, Union import torch.nn as nn from mmcv.cnn import ConvModule @@ -27,6 +27,9 @@ class ChannelMapper(BaseModule): normalization layer. Default: None. act_cfg (:obj:`ConfigDict` or dict, optional): Config dict for activation layer in ConvModule. Default: dict(type='ReLU'). + bias (bool | str): If specified as `auto`, it will be decided by the + norm_cfg. Bias will be set as True if `norm_cfg` is None, otherwise + False. Default: "auto". num_outs (int, optional): Number of output feature maps. There would be extra_convs when num_outs larger than the length of in_channels. init_cfg (:obj:`ConfigDict` or dict or list[:obj:`ConfigDict` or dict], @@ -55,6 +58,7 @@ def __init__( conv_cfg: OptConfigType = None, norm_cfg: OptConfigType = None, act_cfg: OptConfigType = dict(type='ReLU'), + bias: Union[bool, str] = 'auto', num_outs: int = None, init_cfg: OptMultiConfig = dict( type='Xavier', layer='Conv2d', distribution='uniform') @@ -74,7 +78,8 @@ def __init__( padding=(kernel_size - 1) // 2, conv_cfg=conv_cfg, norm_cfg=norm_cfg, - act_cfg=act_cfg)) + act_cfg=act_cfg, + bias=bias)) if num_outs > len(in_channels): self.extra_convs = nn.ModuleList() for i in range(len(in_channels), num_outs): @@ -91,7 +96,8 @@ def __init__( padding=1, conv_cfg=conv_cfg, norm_cfg=norm_cfg, - act_cfg=act_cfg)) + act_cfg=act_cfg, + bias=bias)) def forward(self, inputs: Tuple[Tensor]) -> Tuple[Tensor]: """Forward function.""" diff --git a/mmdet/models/utils/vlfuse_helper.py b/mmdet/models/utils/vlfuse_helper.py index f6112bf5051..76b54de317c 100644 --- a/mmdet/models/utils/vlfuse_helper.py +++ b/mmdet/models/utils/vlfuse_helper.py @@ -94,7 +94,7 @@ def __init__(self, self.l_dim = l_dim assert ( - self.head_dim * self.num_heads == self.embed_dim + self.head_dim * self.num_heads == self.embed_dim ), 'embed_dim must be divisible by num_heads ' \ f'(got `embed_dim`: {self.embed_dim} ' \ f'and `num_heads`: {self.num_heads}).' @@ -134,10 +134,11 @@ def _reset_parameters(self): self.out_l_proj.bias.data.fill_(0) def forward( - self, - vision: Tensor, - lang: Tensor, - attention_mask_l: Optional[Tensor] = None + self, + vision: Tensor, + lang: Tensor, + attention_mask_v: Optional[Tensor] = None, + attention_mask_l: Optional[Tensor] = None, ) -> Tuple[Tensor, Tensor]: bsz, tgt_len, _ = vision.size() @@ -183,6 +184,13 @@ def forward( # Do not increase 50000, data type half has quite limited range attn_weights_l = torch.clamp(attn_weights_l, max=MAX_CLAMP_VALUE) + if attention_mask_v is not None: + attention_mask_v = ( + attention_mask_v[:, None, + None, :].repeat(1, self.num_heads, 1, + 1).flatten(0, 1)) + attn_weights_l.masked_fill_(attention_mask_v, float('-inf')) + attn_weights_l = attn_weights_l.softmax(dim=-1) if attention_mask_l is not None: @@ -324,10 +332,11 @@ def forward(self, return fvfs[0], fvfs[1], fvfs[2], fvfs[3], fvfs[4], new_lang_feature def single_attention_call( - self, - visual: Tensor, - lang: Tensor, - attention_mask_l: Optional[Tensor] = None + self, + visual: Tensor, + lang: Tensor, + attention_mask_v: Optional[Tensor] = None, + attention_mask_l: Optional[Tensor] = None, ) -> Tuple[Tensor, Tensor]: """Perform a single attention call between the visual and language inputs. @@ -335,6 +344,8 @@ def single_attention_call( Args: visual (Tensor): The visual input tensor. lang (Tensor): The language input tensor. + attention_mask_v (Optional[Tensor]): + An optional attention mask tensor for the visual input. attention_mask_l (Optional[Tensor]): An optional attention mask tensor for the language input. @@ -345,13 +356,50 @@ def single_attention_call( visual = self.layer_norm_v(visual) lang = self.layer_norm_l(lang) delta_v, delta_l = self.attn( - visual, lang, attention_mask_l=attention_mask_l) + visual, + lang, + attention_mask_v=attention_mask_v, + attention_mask_l=attention_mask_l) # visual, lang = visual + delta_v, l + delta_l visual = visual + self.drop_path(self.gamma_v * delta_v) lang = lang + self.drop_path(self.gamma_l * delta_l) return visual, lang +class SingleScaleBiAttentionBlock(BiAttentionBlock): + """This is a single-scale implementation of `BiAttentionBlock`. + + The only differenece between it and `BiAttentionBlock` is that the + `forward` function of `SingleScaleBiAttentionBlock` only accepts a single + flatten visual feature map, while the `forward` function in + `BiAttentionBlock` accepts multiple visual feature maps. + """ + + def forward(self, + visual_feature: Tensor, + lang_feature: Tensor, + attention_mask_v=None, + attention_mask_l=None): + """Single-scale forward pass. + + Args: + visual_feature (Tensor): The visual input tensor. Tensor of + shape (bs, patch_len, ch). + lang_feature (Tensor): The language input tensor. Tensor of + shape (bs, text_len, ch). + attention_mask_v (_type_, optional): Visual feature attention + mask. Defaults to None. + attention_mask_l (_type_, optional): Language feature attention + mask.Defaults to None. + """ + new_v, new_lang_feature = self.single_attention_call( + visual_feature, + lang_feature, + attention_mask_v=attention_mask_v, + attention_mask_l=attention_mask_l) + return new_v, new_lang_feature + + class VLFuse(nn.Module): """Early Fusion Module. diff --git a/model-index.yml b/model-index.yml index cbb379950e0..f1704c042cd 100644 --- a/model-index.yml +++ b/model-index.yml @@ -98,3 +98,4 @@ Import: - configs/masktrack_rcnn/metafile.yml - configs/glip/metafile.yml - configs/ddq/metafile.yml + - configs/grounding_dino/metafile.yml diff --git a/tools/model_converters/groundingdino_to_mmdet.py b/tools/model_converters/groundingdino_to_mmdet.py new file mode 100644 index 00000000000..b5896731d7b --- /dev/null +++ b/tools/model_converters/groundingdino_to_mmdet.py @@ -0,0 +1,213 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import argparse +import subprocess +from collections import OrderedDict + +import torch +from mmengine.runner import CheckpointLoader + + +def correct_unfold_reduction_order(x): + out_channel, in_channel = x.shape + x = x.reshape(out_channel, 4, in_channel // 4) + x = x[:, [0, 2, 1, 3], :].transpose(1, 2).reshape(out_channel, in_channel) + return x + + +def correct_unfold_norm_order(x): + in_channel = x.shape[0] + x = x.reshape(4, in_channel // 4) + x = x[[0, 2, 1, 3], :].transpose(0, 1).reshape(in_channel) + return x + + +def convert(ckpt): + new_ckpt = OrderedDict() + + for k, v in list(ckpt.items()): + new_v = v + # + if 'module' not in k: + # NOTE: swin-b has no module prefix and swin-t has module prefix + k = 'module.' + k + if 'module.bbox_embed' in k: + # NOTE: bbox_embed name is swin-b is different from swin-t + k = k.replace('module.bbox_embed', + 'module.transformer.decoder.bbox_embed') + + if 'module.backbone.0' in k: + new_k = k.replace('module.backbone.0', 'backbone') + if 'patch_embed.proj' in new_k: + new_k = new_k.replace('patch_embed.proj', + 'patch_embed.projection') + elif 'pos_drop' in new_k: + new_k = new_k.replace('pos_drop', 'drop_after_pos') + + if 'layers' in new_k: + new_k = new_k.replace('layers', 'stages') + if 'mlp.fc1' in new_k: + new_k = new_k.replace('mlp.fc1', 'ffn.layers.0.0') + elif 'mlp.fc2' in new_k: + new_k = new_k.replace('mlp.fc2', 'ffn.layers.1') + elif 'attn' in new_k: + new_k = new_k.replace('attn', 'attn.w_msa') + + if 'downsample' in k: + if 'reduction.' in k: + new_v = correct_unfold_reduction_order(v) + elif 'norm.' in k: + new_v = correct_unfold_norm_order(v) + + elif 'module.bert' in k: + new_k = k.replace('module.bert', + 'language_model.language_backbone.body.model') + # new_k = k.replace('module.bert', 'bert') + + elif 'module.feat_map' in k: + new_k = k.replace('module.feat_map', 'text_feat_map') + + elif 'module.input_proj' in k: + new_k = k.replace('module.input_proj', 'neck.convs') + if 'neck.convs.3' in new_k: + # extra convs for 4th scale + new_k = new_k.replace('neck.convs.3', 'neck.extra_convs.0') + if '0.weight' in new_k: + # 0.weight -> conv.weight + new_k = new_k.replace('0.weight', 'conv.weight') + if '0.bias' in new_k: + # 0.bias -> conv.bias + new_k = new_k.replace('0.bias', 'conv.bias') + if '1.weight' in new_k: + # 1.weight -> gn.weight + new_k = new_k.replace('1.weight', 'gn.weight') + if '1.bias' in new_k: + # 1.bias -> gn.bias + new_k = new_k.replace('1.bias', 'gn.bias') + + elif 'module.transformer.level_embed' in k: + # module.transformer.level_embed -> level_embed + new_k = k.replace('module.transformer.level_embed', 'level_embed') + + elif 'module.transformer.encoder' in k: + # if '.layers' in k: + new_k = k.replace('module.transformer.encoder', 'encoder') + if 'norm1' in new_k: + new_k = new_k.replace('norm1', 'norms.0') + if 'norm2' in new_k: + new_k = new_k.replace('norm2', 'norms.1') + if 'norm3' in new_k: + new_k = new_k.replace('norm3', 'norms.2') + if 'linear1' in new_k: + new_k = new_k.replace('linear1', 'ffn.layers.0.0') + if 'linear2' in new_k: + new_k = new_k.replace('linear2', 'ffn.layers.1') + + if 'text_layers' in new_k and 'self_attn' in new_k: + new_k = new_k.replace('self_attn', 'self_attn.attn') + + elif 'module.transformer.enc_output' in k: + if 'module.transformer.enc_output' in k and 'norm' not in k: + new_k = k.replace('module.transformer.enc_output', + 'memory_trans_fc') + if 'module.transformer.enc_output_norm' in k: + new_k = k.replace('module.transformer.enc_output_norm', + 'memory_trans_norm') + + elif 'module.transformer.enc_out_bbox_embed.layers' in k: + # ugly version + if 'module.transformer.enc_out_bbox_embed.layers.0' in k: + new_k = k.replace( + 'module.transformer.enc_out_bbox_embed.layers.0', + 'bbox_head.reg_branches.6.0') + if 'module.transformer.enc_out_bbox_embed.layers.1' in k: + new_k = k.replace( + 'module.transformer.enc_out_bbox_embed.layers.1', + 'bbox_head.reg_branches.6.2') + if 'module.transformer.enc_out_bbox_embed.layers.2' in k: + new_k = k.replace( + 'module.transformer.enc_out_bbox_embed.layers.2', + 'bbox_head.reg_branches.6.4') + + elif 'module.transformer.tgt_embed' in k: + new_k = k.replace('module.transformer.tgt_embed', + 'query_embedding') + + elif 'module.transformer.decoder' in k: + new_k = k.replace('module.transformer.decoder', 'decoder') + if 'norm1' in new_k: + # norm1 in official GroundingDINO is the third norm in decoder + new_k = new_k.replace('norm1', 'norms.2') + if 'catext_norm' in new_k: + # catext_norm in official GroundingDINO is the + # second norm in decoder + new_k = new_k.replace('catext_norm', 'norms.1') + if 'norm2' in new_k: + # norm2 in official GroundingDINO is the first norm in decoder + new_k = new_k.replace('norm2', 'norms.0') + if 'norm3' in new_k: + new_k = new_k.replace('norm3', 'norms.3') + if 'ca_text' in new_k: + new_k = new_k.replace('ca_text', 'cross_attn_text') + if 'in_proj_weight' in new_k: + new_k = new_k.replace('in_proj_weight', + 'attn.in_proj_weight') + if 'in_proj_bias' in new_k: + new_k = new_k.replace('in_proj_bias', 'attn.in_proj_bias') + if 'out_proj.weight' in new_k: + new_k = new_k.replace('out_proj.weight', + 'attn.out_proj.weight') + if 'out_proj.bias' in new_k: + new_k = new_k.replace('out_proj.bias', + 'attn.out_proj.bias') + if 'linear1' in new_k: + new_k = new_k.replace('linear1', 'ffn.layers.0.0') + if 'linear2' in new_k: + new_k = new_k.replace('linear2', 'ffn.layers.1') + if 'self_attn' in new_k: + new_k = new_k.replace('self_attn', 'self_attn.attn') + if 'bbox_embed' in new_k: + reg_layer_id = int(new_k.split('.')[2]) + linear_id = int(new_k.split('.')[4]) + weight_or_bias = new_k.split('.')[-1] + new_k = 'bbox_head.reg_branches.' + \ + str(reg_layer_id)+'.'+str(2*linear_id)+'.'+weight_or_bias + + else: + print('skip:', k) + continue + + new_ckpt[new_k] = new_v + return new_ckpt + + +def main(): + parser = argparse.ArgumentParser( + description='Convert keys to mmdet style.') + parser.add_argument( + 'src', + default='groundingdino_swint_ogc.pth.pth', + help='src model path or url') + # The dst path must be a full path of the new checkpoint. + parser.add_argument( + 'dst', + default='groundingdino_swint_ogc.pth_mmdet.pth', + help='save path') + args = parser.parse_args() + + checkpoint = CheckpointLoader.load_checkpoint(args.src, map_location='cpu') + + if 'model' in checkpoint: + state_dict = checkpoint['model'] + else: + state_dict = checkpoint + + weight = convert(state_dict) + torch.save(weight, args.dst) + sha = subprocess.check_output(['sha256sum', args.dst]).decode() + final_file = args.dst.replace('.pth', '') + '-{}.pth'.format(sha[:8]) + subprocess.Popen(['mv', args.dst, final_file]) + print(f'Done!!, save to {final_file}') + + +if __name__ == '__main__': + main() From ba358bc4cbbca8b2614baf70090d2370b8563872 Mon Sep 17 00:00:00 2001 From: ZhaoQiiii <102809799+ZhaoQiiii@users.noreply.github.com> Date: Mon, 18 Sep 2023 17:17:53 +0800 Subject: [PATCH 42/63] Add OpenXLab Badge (#10942) --- README.md | 1 + README_zh-CN.md | 1 + 2 files changed, 2 insertions(+) diff --git a/README.md b/README.md index 0b5a1d16c39..6070510e7d1 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ [![license](https://img.shields.io/github/license/open-mmlab/mmdetection.svg)](https://github.com/open-mmlab/mmdetection/blob/main/LICENSE) [![open issues](https://isitmaintained.com/badge/open/open-mmlab/mmdetection.svg)](https://github.com/open-mmlab/mmdetection/issues) [![issue resolution](https://isitmaintained.com/badge/resolution/open-mmlab/mmdetection.svg)](https://github.com/open-mmlab/mmdetection/issues) +[![Open in OpenXLab](https://cdn-static.openxlab.org.cn/app-center/openxlab_demo.svg)](https://openxlab.org.cn/apps?search=mmdet) [📘Documentation](https://mmdetection.readthedocs.io/en/latest/) | [🛠️Installation](https://mmdetection.readthedocs.io/en/latest/get_started.html) | diff --git a/README_zh-CN.md b/README_zh-CN.md index 7e1cef12712..6b27e6bb32b 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -25,6 +25,7 @@ [![license](https://img.shields.io/github/license/open-mmlab/mmdetection.svg)](https://github.com/open-mmlab/mmdetection/blob/main/LICENSE) [![open issues](https://isitmaintained.com/badge/open/open-mmlab/mmdetection.svg)](https://github.com/open-mmlab/mmdetection/issues) [![issue resolution](https://isitmaintained.com/badge/resolution/open-mmlab/mmdetection.svg)](https://github.com/open-mmlab/mmdetection/issues) +[![Open in OpenXLab](https://cdn-static.openxlab.org.cn/app-center/openxlab_demo.svg)](https://openxlab.org.cn/apps?search=mmdet) [📘使用文档](https://mmdetection.readthedocs.io/zh_CN/latest/) | [🛠️安装教程](https://mmdetection.readthedocs.io/zh_CN/latest/get_started.html) | From 02526bc4d741b7633ef7e7a379bc7a2fa6b1cdac Mon Sep 17 00:00:00 2001 From: Kuro Latency Date: Mon, 18 Sep 2023 17:26:47 +0800 Subject: [PATCH 43/63] Fix torch version comparison (#10934) --- .dev_scripts/gather_models.py | 4 ++-- mmdet/models/layers/normed_predictor.py | 3 ++- tools/analysis_tools/get_flops.py | 3 ++- tools/model_converters/publish_model.py | 3 ++- tools/model_converters/upgrade_ssd_version.py | 3 ++- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/.dev_scripts/gather_models.py b/.dev_scripts/gather_models.py index 588d913789b..52acdc3f960 100644 --- a/.dev_scripts/gather_models.py +++ b/.dev_scripts/gather_models.py @@ -12,7 +12,7 @@ import yaml from mmengine.config import Config from mmengine.fileio import dump -from mmengine.utils import mkdir_or_exist, scandir +from mmengine.utils import digit_version, mkdir_or_exist, scandir def ordered_yaml_dump(data, stream=None, Dumper=yaml.SafeDumper, **kwds): @@ -45,7 +45,7 @@ def process_checkpoint(in_file, out_file): # if it is necessary to remove some sensitive data in checkpoint['meta'], # add the code here. - if torch.__version__ >= '1.6': + if digit_version(torch.__version__) >= digit_version('1.6'): torch.save(checkpoint, out_file, _use_new_zipfile_serialization=False) else: torch.save(checkpoint, out_file) diff --git a/mmdet/models/layers/normed_predictor.py b/mmdet/models/layers/normed_predictor.py index 9fb40c71c42..592194b1dbb 100644 --- a/mmdet/models/layers/normed_predictor.py +++ b/mmdet/models/layers/normed_predictor.py @@ -2,6 +2,7 @@ import torch import torch.nn as nn import torch.nn.functional as F +from mmengine.utils import digit_version from torch import Tensor from mmdet.registry import MODELS @@ -91,7 +92,7 @@ def forward(self, x: Tensor) -> Tensor: if hasattr(self, 'conv2d_forward'): x_ = self.conv2d_forward(x_, weight_) else: - if torch.__version__ >= '1.8': + if digit_version(torch.__version__) >= digit_version('1.8'): x_ = self._conv_forward(x_, weight_, self.bias) else: x_ = self._conv_forward(x_, weight_) diff --git a/tools/analysis_tools/get_flops.py b/tools/analysis_tools/get_flops.py index ebd6d0f9f76..a696ddcf742 100644 --- a/tools/analysis_tools/get_flops.py +++ b/tools/analysis_tools/get_flops.py @@ -11,6 +11,7 @@ from mmengine.model import revert_sync_batchnorm from mmengine.registry import init_default_scope from mmengine.runner import Runner +from mmengine.utils import digit_version from mmdet.registry import MODELS @@ -44,7 +45,7 @@ def parse_args(): def inference(args, logger): - if str(torch.__version__) < '1.12': + if digit_version(torch.__version__) < digit_version('1.12'): logger.warning( 'Some config files, such as configs/yolact and configs/detectors,' 'may have compatibility issues with torch.jit when torch<1.12. ' diff --git a/tools/model_converters/publish_model.py b/tools/model_converters/publish_model.py index 6c64b00e30a..5d3e4111e4f 100644 --- a/tools/model_converters/publish_model.py +++ b/tools/model_converters/publish_model.py @@ -4,6 +4,7 @@ import torch from mmengine.logging import print_log +from mmengine.utils import digit_version def parse_args(): @@ -37,7 +38,7 @@ def process_checkpoint(in_file, out_file, save_keys=['meta', 'state_dict']): # if it is necessary to remove some sensitive data in checkpoint['meta'], # add the code here. - if torch.__version__ >= '1.6': + if digit_version(torch.__version__) >= digit_version('1.6'): torch.save(checkpoint, out_file, _use_new_zipfile_serialization=False) else: torch.save(checkpoint, out_file) diff --git a/tools/model_converters/upgrade_ssd_version.py b/tools/model_converters/upgrade_ssd_version.py index 48302d84000..98e96f68a37 100644 --- a/tools/model_converters/upgrade_ssd_version.py +++ b/tools/model_converters/upgrade_ssd_version.py @@ -5,6 +5,7 @@ import torch from mmengine import Config +from mmengine.utils import digit_version def parse_config(config_strings): @@ -39,7 +40,7 @@ def convert(in_file, out_file): out_state_dict[new_key] = value checkpoint['state_dict'] = out_state_dict - if torch.__version__ >= '1.6': + if digit_version(torch.__version__) >= digit_version('1.6'): torch.save(checkpoint, out_file, _use_new_zipfile_serialization=False) else: torch.save(checkpoint, out_file) From 75c2ada126476806ccfb99a2709e0bb8ab373e66 Mon Sep 17 00:00:00 2001 From: Range King Date: Mon, 18 Sep 2023 17:41:01 +0800 Subject: [PATCH 44/63] [CodeCamp2023-605] Add new configs of deformable_detr (#10936) --- .../deformable_detr_r50_16xb2_50e_coco.py | 186 ++++++++++++++++++ ...formable_detr_refine_r50_16xb2_50e_coco.py | 12 ++ ...detr_refine_twostage_r50_16xb2_50e_coco.py | 12 ++ 3 files changed, 210 insertions(+) create mode 100644 mmdet/configs/deformable_detr/deformable_detr_r50_16xb2_50e_coco.py create mode 100644 mmdet/configs/deformable_detr/deformable_detr_refine_r50_16xb2_50e_coco.py create mode 100644 mmdet/configs/deformable_detr/deformable_detr_refine_twostage_r50_16xb2_50e_coco.py diff --git a/mmdet/configs/deformable_detr/deformable_detr_r50_16xb2_50e_coco.py b/mmdet/configs/deformable_detr/deformable_detr_r50_16xb2_50e_coco.py new file mode 100644 index 00000000000..ee2a41639d8 --- /dev/null +++ b/mmdet/configs/deformable_detr/deformable_detr_r50_16xb2_50e_coco.py @@ -0,0 +1,186 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .._base_.datasets.coco_detection import * + from .._base_.default_runtime import * + +from mmcv.transforms import LoadImageFromFile, RandomChoice, RandomChoiceResize +from mmengine.optim.optimizer import OptimWrapper +from mmengine.optim.scheduler import MultiStepLR +from mmengine.runner.loops import EpochBasedTrainLoop, TestLoop, ValLoop +from torch.optim.adamw import AdamW + +from mmdet.datasets.transforms import (LoadAnnotations, PackDetInputs, + RandomCrop, RandomFlip, Resize) +from mmdet.models.backbones import ResNet +from mmdet.models.data_preprocessors import DetDataPreprocessor +from mmdet.models.dense_heads import DeformableDETRHead +from mmdet.models.detectors import DeformableDETR +from mmdet.models.losses import FocalLoss, GIoULoss, L1Loss +from mmdet.models.necks import ChannelMapper +from mmdet.models.task_modules import (BBoxL1Cost, FocalLossCost, + HungarianAssigner, IoUCost) + +model = dict( + type=DeformableDETR, + num_queries=300, + num_feature_levels=4, + with_box_refine=False, + as_two_stage=False, + data_preprocessor=dict( + type=DetDataPreprocessor, + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True, + pad_size_divisor=1), + backbone=dict( + type=ResNet, + depth=50, + num_stages=4, + out_indices=(1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=False), + norm_eval=True, + style='pytorch', + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50')), + neck=dict( + type=ChannelMapper, + in_channels=[512, 1024, 2048], + kernel_size=1, + out_channels=256, + act_cfg=None, + norm_cfg=dict(type='GN', num_groups=32), + num_outs=4), + encoder=dict( # DeformableDetrTransformerEncoder + num_layers=6, + layer_cfg=dict( # DeformableDetrTransformerEncoderLayer + self_attn_cfg=dict( # MultiScaleDeformableAttention + embed_dims=256, + batch_first=True), + ffn_cfg=dict( + embed_dims=256, feedforward_channels=1024, ffn_drop=0.1))), + decoder=dict( # DeformableDetrTransformerDecoder + num_layers=6, + return_intermediate=True, + layer_cfg=dict( # DeformableDetrTransformerDecoderLayer + self_attn_cfg=dict( # MultiheadAttention + embed_dims=256, + num_heads=8, + dropout=0.1, + batch_first=True), + cross_attn_cfg=dict( # MultiScaleDeformableAttention + embed_dims=256, + batch_first=True), + ffn_cfg=dict( + embed_dims=256, feedforward_channels=1024, ffn_drop=0.1)), + post_norm_cfg=None), + positional_encoding=dict(num_feats=128, normalize=True, offset=-0.5), + bbox_head=dict( + type=DeformableDETRHead, + num_classes=80, + sync_cls_avg_factor=True, + loss_cls=dict( + type=FocalLoss, + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=2.0), + loss_bbox=dict(type=L1Loss, loss_weight=5.0), + loss_iou=dict(type=GIoULoss, loss_weight=2.0)), + # training and testing settings + train_cfg=dict( + assigner=dict( + type=HungarianAssigner, + match_costs=[ + dict(type=FocalLossCost, weight=2.0), + dict(type=BBoxL1Cost, weight=5.0, box_format='xywh'), + dict(type=IoUCost, iou_mode='giou', weight=2.0) + ])), + test_cfg=dict(max_per_img=100)) + +# train_pipeline, NOTE the img_scale and the Pad's size_divisor is different +# from the default setting in mmdet. +train_pipeline = [ + dict(type=LoadImageFromFile, backend_args=backend_args), + dict(type=LoadAnnotations, with_bbox=True), + dict(type=RandomFlip, prob=0.5), + dict( + type=RandomChoice, + transforms=[ + [ + dict( + type=RandomChoiceResize, + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + resize_type=Resize, + keep_ratio=True) + ], + [ + dict( + type=RandomChoiceResize, + # The radio of all image in train dataset < 7 + # follow the original implement + scales=[(400, 4200), (500, 4200), (600, 4200)], + resize_type=Resize, + keep_ratio=True), + dict( + type=RandomCrop, + crop_type='absolute_range', + crop_size=(384, 600), + allow_negative_crop=True), + dict( + type=RandomChoiceResize, + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + resize_type=Resize, + keep_ratio=True) + ] + ]), + dict(type=PackDetInputs) +] +train_dataloader.update( + dict( + dataset=dict( + filter_cfg=dict(filter_empty_gt=False), pipeline=train_pipeline))) + +# optimizer +optim_wrapper = dict( + type=OptimWrapper, + optimizer=dict(type=AdamW, lr=0.0002, weight_decay=0.0001), + clip_grad=dict(max_norm=0.1, norm_type=2), + paramwise_cfg=dict( + custom_keys={ + 'backbone': dict(lr_mult=0.1), + 'sampling_offsets': dict(lr_mult=0.1), + 'reference_points': dict(lr_mult=0.1) + })) + +# learning policy +max_epochs = 50 +train_cfg = dict( + type=EpochBasedTrainLoop, max_epochs=max_epochs, val_interval=1) +val_cfg = dict(type=ValLoop) +test_cfg = dict(type=TestLoop) + +param_scheduler = [ + dict( + type=MultiStepLR, + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[40], + gamma=0.1) +] + +# NOTE: `auto_scale_lr` is for automatically scaling LR, +# USER SHOULD NOT CHANGE ITS VALUES. +# base_batch_size = (16 GPUs) x (2 samples per GPU) +auto_scale_lr = dict(base_batch_size=32) diff --git a/mmdet/configs/deformable_detr/deformable_detr_refine_r50_16xb2_50e_coco.py b/mmdet/configs/deformable_detr/deformable_detr_refine_r50_16xb2_50e_coco.py new file mode 100644 index 00000000000..4f232d61110 --- /dev/null +++ b/mmdet/configs/deformable_detr/deformable_detr_refine_r50_16xb2_50e_coco.py @@ -0,0 +1,12 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .deformable_detr_r50_16xb2_50e_coco import * + +model.update(dict(with_box_refine=True)) diff --git a/mmdet/configs/deformable_detr/deformable_detr_refine_twostage_r50_16xb2_50e_coco.py b/mmdet/configs/deformable_detr/deformable_detr_refine_twostage_r50_16xb2_50e_coco.py new file mode 100644 index 00000000000..1fac4d8c4f2 --- /dev/null +++ b/mmdet/configs/deformable_detr/deformable_detr_refine_twostage_r50_16xb2_50e_coco.py @@ -0,0 +1,12 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa +# mmcv >= 2.0.1 +# mmengine >= 0.8.0 + +from mmengine.config import read_base + +with read_base(): + from .deformable_detr_refine_r50_16xb2_50e_coco import * + +model.update(dict(as_two_stage=True)) From dfe7a57e6b5860a77c2eeef20ddd70635072758f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Mon, 18 Sep 2023 17:41:47 +0800 Subject: [PATCH 45/63] Support checkpoint_wrapper (#10943) --- .../transformer/deformable_detr_layers.py | 16 ++++++++++++++ .../models/layers/transformer/detr_layers.py | 21 +++++++++++++++++++ .../transformer/grounding_dino_layers.py | 2 +- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/mmdet/models/layers/transformer/deformable_detr_layers.py b/mmdet/models/layers/transformer/deformable_detr_layers.py index f337e7fd01b..e2d32388d6a 100644 --- a/mmdet/models/layers/transformer/deformable_detr_layers.py +++ b/mmdet/models/layers/transformer/deformable_detr_layers.py @@ -1,4 +1,5 @@ # Copyright (c) OpenMMLab. All rights reserved. +import warnings from typing import Optional, Tuple, Union import torch @@ -12,6 +13,11 @@ DetrTransformerEncoder, DetrTransformerEncoderLayer) from .utils import inverse_sigmoid +try: + from fairscale.nn.checkpoint import checkpoint_wrapper +except Exception: + checkpoint_wrapper = None + class DeformableDetrTransformerEncoder(DetrTransformerEncoder): """Transformer encoder of Deformable DETR.""" @@ -22,6 +28,16 @@ def _init_layers(self) -> None: DeformableDetrTransformerEncoderLayer(**self.layer_cfg) for _ in range(self.num_layers) ]) + + if self.num_cp > 0: + if checkpoint_wrapper is None: + warnings.warn('If you want to reduce GPU memory usage, \ + please install fairscale by executing the \ + following command: pip install fairscale.') + return + for i in range(self.num_cp): + self.layers[i] = checkpoint_wrapper(self.layers[i]) + self.embed_dims = self.layers[0].embed_dims def forward(self, query: Tensor, query_pos: Tensor, diff --git a/mmdet/models/layers/transformer/detr_layers.py b/mmdet/models/layers/transformer/detr_layers.py index 43c2ffdb631..928b07ce2df 100644 --- a/mmdet/models/layers/transformer/detr_layers.py +++ b/mmdet/models/layers/transformer/detr_layers.py @@ -1,4 +1,5 @@ # Copyright (c) OpenMMLab. All rights reserved. +import warnings from typing import Union import torch @@ -10,6 +11,11 @@ from mmdet.utils import ConfigType, OptConfigType +try: + from fairscale.nn.checkpoint import checkpoint_wrapper +except Exception: + checkpoint_wrapper = None + class DetrTransformerEncoder(BaseModule): """Encoder of DETR. @@ -18,6 +24,8 @@ class DetrTransformerEncoder(BaseModule): num_layers (int): Number of encoder layers. layer_cfg (:obj:`ConfigDict` or dict): the config of each encoder layer. All the layers will share the same config. + num_cp (int): Number of checkpointing blocks in encoder layer. + Default to -1. init_cfg (:obj:`ConfigDict` or dict, optional): the config to control the initialization. Defaults to None. """ @@ -25,11 +33,14 @@ class DetrTransformerEncoder(BaseModule): def __init__(self, num_layers: int, layer_cfg: ConfigType, + num_cp: int = -1, init_cfg: OptConfigType = None) -> None: super().__init__(init_cfg=init_cfg) self.num_layers = num_layers self.layer_cfg = layer_cfg + self.num_cp = num_cp + assert self.num_cp <= self.num_layers self._init_layers() def _init_layers(self) -> None: @@ -38,6 +49,16 @@ def _init_layers(self) -> None: DetrTransformerEncoderLayer(**self.layer_cfg) for _ in range(self.num_layers) ]) + + if self.num_cp > 0: + if checkpoint_wrapper is None: + warnings.warn('If you want to reduce GPU memory usage, \ + please install fairscale by executing the \ + following command: pip install fairscale.') + return + for i in range(self.num_cp): + self.layers[i] = checkpoint_wrapper(self.layers[i]) + self.embed_dims = self.layers[0].embed_dims def forward(self, query: Tensor, query_pos: Tensor, diff --git a/mmdet/models/layers/transformer/grounding_dino_layers.py b/mmdet/models/layers/transformer/grounding_dino_layers.py index 04de47288b3..645384bd014 100644 --- a/mmdet/models/layers/transformer/grounding_dino_layers.py +++ b/mmdet/models/layers/transformer/grounding_dino_layers.py @@ -86,7 +86,7 @@ def forward(self, Defaults to None. memory_text (Tensor): Memory text. It has shape (bs, len_text, text_embed_dims). - text_token_mask (Tensor): Text token mask. It has shape (bs, + text_attention_mask (Tensor): Text token mask. It has shape (bs, len_text). Returns: From 9915a5e16f3359e447b2920342955972f995b53b Mon Sep 17 00:00:00 2001 From: PhoenixZ810 <98592339+PhoenixZ810@users.noreply.github.com> Date: Tue, 19 Sep 2023 09:30:56 +0800 Subject: [PATCH 46/63] Support H-DINO (#10893) Co-authored-by: huanghaian --- .../dense_heads/deformable_detr_head.py | 2 +- projects/HDINO/README.md | 35 ++++ projects/HDINO/__init__.py | 4 + .../HDINO/h-dino-4scale_r50_8xb2-12e_coco.py | 168 ++++++++++++++++++ projects/HDINO/h_dino.py | 149 ++++++++++++++++ projects/HDINO/h_dino_head.py | 112 ++++++++++++ 6 files changed, 469 insertions(+), 1 deletion(-) create mode 100644 projects/HDINO/README.md create mode 100644 projects/HDINO/__init__.py create mode 100644 projects/HDINO/h-dino-4scale_r50_8xb2-12e_coco.py create mode 100644 projects/HDINO/h_dino.py create mode 100644 projects/HDINO/h_dino_head.py diff --git a/mmdet/models/dense_heads/deformable_detr_head.py b/mmdet/models/dense_heads/deformable_detr_head.py index f5b424eec1d..41dd2e9b76f 100644 --- a/mmdet/models/dense_heads/deformable_detr_head.py +++ b/mmdet/models/dense_heads/deformable_detr_head.py @@ -83,7 +83,7 @@ def init_weights(self) -> None: nn.init.constant_(m[-1].bias.data[2:], 0.0) def forward(self, hidden_states: Tensor, - references: List[Tensor]) -> Tuple[Tensor]: + references: List[Tensor]) -> Tuple[Tensor, Tensor]: """Forward function. Args: diff --git a/projects/HDINO/README.md b/projects/HDINO/README.md new file mode 100644 index 00000000000..078ca4293d8 --- /dev/null +++ b/projects/HDINO/README.md @@ -0,0 +1,35 @@ +# H-DETR + +> [DETRs with Hybrid Matching](https://arxiv.org/abs/2207.13080) + + + +## Abstract + +One-to-one set matching is a key design for DETR to establish its end-to-end capability, so that object detection does not require a hand-crafted NMS (non-maximum suppression) to remove duplicate detections. This end-to-end signature is important for the versatility of DETR, and it has been generalized to broader vision tasks. However, we note that there are few queries assigned as positive samples and the one-to-one set matching significantly reduces the training efficacy of positive samples. We propose a simple yet effective method based on a hybrid matching scheme that combines the original one-to-one matching branch with an auxiliary one-to-many matching branch during training. Our hybrid strategy has been shown to significantly improve accuracy. In inference, only the original one-to-one match branch is used, thus maintaining the end-to-end merit and the same inference efficiency of DETR. The method is named H-DETR, and it shows that a wide range of representative DETR methods can be consistently improved across a wide range of visual tasks, including DeformableDETR, PETRv2, PETR, and TransTrack, among others. + +
    + +
    + +## Results and Models + +| Backbone | Model | Lr schd | box AP | Config | Download | +| :------: | :-----------: | :-----: | :----: | :--------------------------------------------: | :------: | +| R-50 | H-DINO-4scale | 12e | 48.0 | [config](./h-dino-4scale_r50_8xb2-12e_coco.py) | | + +### NOTE + +1. We are based on `DINO` rather than `Deformable DETR` to support the `Hybrid Matching` algorithm. +2. We found that directly applying Hybrid Matching to the DINO algorithm results in a significant decrease in performance. If you have any other insights or suggestions, please feel free to comment or submit a pull request (PR). + +## Citation + +```latex +@article{jia2022detrs, + title={DETRs with Hybrid Matching}, + author={Jia, Ding and Yuan, Yuhui and He, Haodi and Wu, Xiaopei and Yu, Haojun and Lin, Weihong and Sun, Lei and Zhang, Chao and Hu, Han}, + journal={arXiv preprint arXiv:2207.13080}, + year={2022} +} +``` diff --git a/projects/HDINO/__init__.py b/projects/HDINO/__init__.py new file mode 100644 index 00000000000..f8c3478b974 --- /dev/null +++ b/projects/HDINO/__init__.py @@ -0,0 +1,4 @@ +from .h_dino import HDINO +from .h_dino_head import HybridDINOHead + +__all__ = ['HDINO', 'HybridDINOHead'] diff --git a/projects/HDINO/h-dino-4scale_r50_8xb2-12e_coco.py b/projects/HDINO/h-dino-4scale_r50_8xb2-12e_coco.py new file mode 100644 index 00000000000..7b16b48dc46 --- /dev/null +++ b/projects/HDINO/h-dino-4scale_r50_8xb2-12e_coco.py @@ -0,0 +1,168 @@ +_base_ = [ + '../../configs/_base_/datasets/coco_detection.py', + '../../configs/_base_/default_runtime.py' +] + +custom_imports = dict(imports=['projects.HDINO'], allow_failed_imports=False) + +model = dict( + type='HDINO', + num_queries=1800, # num_total_queries: 900+900 + with_box_refine=True, + as_two_stage=True, + data_preprocessor=dict( + type='DetDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True, + pad_size_divisor=1), + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=False), + norm_eval=True, + style='pytorch', + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50')), + neck=dict( + type='ChannelMapper', + in_channels=[512, 1024, 2048], + kernel_size=1, + out_channels=256, + act_cfg=None, + norm_cfg=dict(type='GN', num_groups=32), + num_outs=4), + encoder=dict( + num_layers=6, + layer_cfg=dict( + self_attn_cfg=dict(embed_dims=256, num_levels=4, + dropout=0.0), # 0.1 for DeformDETR + ffn_cfg=dict( + embed_dims=256, + feedforward_channels=2048, # 1024 for DeformDETR + ffn_drop=0.0))), # 0.1 for DeformDETR + decoder=dict( + num_layers=6, + return_intermediate=True, + layer_cfg=dict( + self_attn_cfg=dict(embed_dims=256, num_heads=8, + dropout=0.0), # 0.1 for DeformDETR + cross_attn_cfg=dict(embed_dims=256, num_levels=4, + dropout=0.0), # 0.1 for DeformDETR + ffn_cfg=dict( + embed_dims=256, + feedforward_channels=2048, # 1024 for DeformDETR + ffn_drop=0.0)), # 0.1 for DeformDETR + post_norm_cfg=None), + positional_encoding=dict( + num_feats=128, + normalize=True, + offset=0.0, # -0.5 for DeformDETR + temperature=20), # 10000 for DeformDETR + bbox_head=dict( + type='HybridDINOHead', + num_classes=80, + sync_cls_avg_factor=True, + num_query_one2one=900, + k_one2many=2, + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), # 2.0 in DeformDETR + loss_bbox=dict(type='L1Loss', loss_weight=5.0), + loss_iou=dict(type='GIoULoss', loss_weight=2.0)), + dn_cfg=dict( + label_noise_scale=0.5, + box_noise_scale=1.0, # 0.4 for DN-DETR + group_cfg=dict(dynamic=True, num_groups=None, num_dn_queries=100)), + # training and testing settings + train_cfg=dict( + assigner=dict( + type='HungarianAssigner', + match_costs=[ + dict(type='FocalLossCost', weight=2.0), + dict(type='BBoxL1Cost', weight=5.0, box_format='xywh'), + dict(type='IoUCost', iou_mode='giou', weight=2.0) + ])), + test_cfg=dict(max_per_img=300)) # 100 for DeformDETR + +# train_pipeline, NOTE the img_scale and the Pad's size_divisor is different +# from the default setting in mmdet. +train_pipeline = [ + dict(type='LoadImageFromFile', backend_args=_base_.backend_args), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='RandomFlip', prob=0.5), + dict( + type='RandomChoice', + transforms=[ + [ + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ], + [ + dict( + type='RandomChoiceResize', + # The radio of all image in train dataset < 7 + # follow the original implement + scales=[(400, 4200), (500, 4200), (600, 4200)], + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=(384, 600), + allow_negative_crop=True), + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ] + ]), + dict(type='PackDetInputs') +] +train_dataloader = dict( + dataset=dict( + filter_cfg=dict(filter_empty_gt=False), pipeline=train_pipeline)) + +# optimizer +optim_wrapper = dict( + type='OptimWrapper', + optimizer=dict( + type='AdamW', + lr=0.0001, # 0.0002 for DeformDETR + weight_decay=0.0001), + clip_grad=dict(max_norm=0.1, norm_type=2), + paramwise_cfg=dict(custom_keys={'backbone': dict(lr_mult=0.1)}) +) # custom_keys contains sampling_offsets and reference_points in DeformDETR # noqa + +# learning policy +max_epochs = 12 +train_cfg = dict( + type='EpochBasedTrainLoop', max_epochs=max_epochs, val_interval=1) + +val_cfg = dict(type='ValLoop') +test_cfg = dict(type='TestLoop') + +param_scheduler = [ + dict( + type='MultiStepLR', + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[11], + gamma=0.1) +] + +# NOTE: `auto_scale_lr` is for automatically scaling LR, +# USER SHOULD NOT CHANGE ITS VALUES. +# base_batch_size = (8 GPUs) x (2 samples per GPU) +auto_scale_lr = dict(base_batch_size=16) diff --git a/projects/HDINO/h_dino.py b/projects/HDINO/h_dino.py new file mode 100644 index 00000000000..3f9d116d878 --- /dev/null +++ b/projects/HDINO/h_dino.py @@ -0,0 +1,149 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from typing import Tuple + +import torch +from torch import Tensor, nn +from torch.nn.init import normal_ + +from mmdet.models.detectors import DINO, DeformableDETR +from mmdet.models.detectors.deformable_detr import \ + MultiScaleDeformableAttention +from mmdet.registry import MODELS +from mmdet.structures import OptSampleList +from mmdet.utils import OptConfigType + + +@MODELS.register_module() +class HDINO(DINO): + + def __init__(self, + *args, + bbox_head: OptConfigType = None, + **kwargs) -> None: + self.method = 0 + self.num_query_one2one = bbox_head['num_query_one2one'] + super(HDINO, self).__init__(*args, bbox_head=bbox_head, **kwargs) + + def _init_layers(self) -> None: + super(HDINO, self)._init_layers() + self.query_embedding = None + if self.method == 1: + self.query_map = nn.Linear(self.embed_dims, self.embed_dims) + else: + self.pos_trans_fc = nn.Linear(self.embed_dims * 2, self.embed_dims) + self.pos_trans_norm = nn.LayerNorm(self.embed_dims) + + def init_weights(self) -> None: + super(DeformableDETR, self).init_weights() + """Initialize weights for Transformer and other components.""" + for coder in self.encoder, self.decoder: + for p in coder.parameters(): + if p.dim() > 1: + nn.init.xavier_uniform_(p) + for m in self.modules(): + if isinstance(m, MultiScaleDeformableAttention): + m.init_weights() + nn.init.xavier_uniform_(self.memory_trans_fc.weight) + normal_(self.level_embed) + + if self.method == 1: + nn.init.xavier_uniform_(self.query_map.weight) + else: + nn.init.xavier_uniform_(self.pos_trans_fc.weight) + + def pre_decoder( + self, + memory: Tensor, + memory_mask: Tensor, + spatial_shapes: Tensor, + batch_data_samples: OptSampleList = None, + ) -> Tuple[dict, dict]: + + bs, _, c = memory.shape + cls_out_features = self.bbox_head.cls_branches[ + self.decoder.num_layers].out_features + + output_memory, output_proposals = self.gen_encoder_output_proposals( + memory, memory_mask, spatial_shapes) + enc_outputs_class = self.bbox_head.cls_branches[ + self.decoder.num_layers]( + output_memory) + enc_outputs_coord_unact = self.bbox_head.reg_branches[ + self.decoder.num_layers](output_memory) + output_proposals + + # NOTE The DINO selects top-k proposals according to scores of + # multi-class classification, while DeformDETR, where the input + # is `enc_outputs_class[..., 0]` selects according to scores of + # binary classification. + topk_indices = torch.topk( + enc_outputs_class.max(-1)[0], k=self.num_queries, dim=1)[1] + topk_score = torch.gather( + enc_outputs_class, 1, + topk_indices.unsqueeze(-1).repeat(1, 1, cls_out_features)) + topk_coords_unact = torch.gather( + enc_outputs_coord_unact, 1, + topk_indices.unsqueeze(-1).repeat(1, 1, 4)) + topk_coords = topk_coords_unact.sigmoid() + topk_coords_unact = topk_coords_unact.detach() + + # We only made changes here. + # ------------------------------------- + if self.method == 1: + map_memory = self.query_map(memory.detach()) + query = torch.gather( + map_memory, 1, + topk_indices.unsqueeze(-1).repeat(1, 1, self.embed_dims)) + else: + pos_trans_out = self.pos_trans_fc( + self.get_proposal_pos_embed(topk_coords_unact)) + query = self.pos_trans_norm(pos_trans_out) + # ------------------------------------- + + if self.training: + dn_label_query, dn_bbox_query, dn_mask, dn_meta = \ + self.dn_query_generator(batch_data_samples) + query = torch.cat([dn_label_query, query], dim=1) + reference_points = torch.cat([dn_bbox_query, topk_coords_unact], + dim=1) + else: + reference_points = topk_coords_unact + dn_mask, dn_meta = None, None + reference_points = reference_points.sigmoid() + + decoder_inputs_dict = dict( + query=query, + memory=memory, + reference_points=reference_points, + dn_mask=dn_mask) + # NOTE DINO calculates encoder losses on scores and coordinates + # of selected top-k encoder queries, while DeformDETR is of all + # encoder queries. + head_inputs_dict = dict( + enc_outputs_class=topk_score, + enc_outputs_coord=topk_coords, + dn_meta=dn_meta) if self.training else dict() + + # We only made changes here. + # ------------------------------------- + if self.training: + # train: num_denoising_queries + num_query_one2one + # + num_query_one2many + dn_mask = decoder_inputs_dict['dn_mask'] + num_denoising_queries = head_inputs_dict['dn_meta'][ + 'num_denoising_queries'] + num_query_one2one = num_denoising_queries + self.num_query_one2one + # dn_mask[num_query_one2one:, :num_query_one2one] = True + dn_mask[num_denoising_queries:num_query_one2one, + num_query_one2one:] = True + decoder_inputs_dict['dn_mask'] = dn_mask + else: + # test: num_query_one2one + # + num_query_one2many + query = decoder_inputs_dict['query'] + reference_points = decoder_inputs_dict['reference_points'] + num_query_one2many = self.num_queries - self.num_query_one2one + decoder_inputs_dict['query'] = query[:num_query_one2many] + decoder_inputs_dict[ + 'reference_points'] = reference_points[:num_query_one2many] + # ------------------------------------- + return decoder_inputs_dict, head_inputs_dict diff --git a/projects/HDINO/h_dino_head.py b/projects/HDINO/h_dino_head.py new file mode 100644 index 00000000000..aa1d0867f84 --- /dev/null +++ b/projects/HDINO/h_dino_head.py @@ -0,0 +1,112 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from typing import Dict, List + +from torch import Tensor + +from mmdet.models.dense_heads.dino_head import DINOHead +from mmdet.models.utils import multi_apply +from mmdet.registry import MODELS +from mmdet.utils import InstanceList, OptInstanceList + + +@MODELS.register_module() +class HybridDINOHead(DINOHead): + """Head of the Hybrid Matching.""" + + def __init__(self, + *args, + num_query_one2one: int = 900, + k_one2many: int = 2, + **kwargs) -> None: + self.num_query_one2one = num_query_one2one + self.k_one2many = k_one2many + super().__init__(*args, **kwargs) + + def loss_by_feat( + self, + all_layers_cls_scores: Tensor, + all_layers_bbox_preds: Tensor, + enc_cls_scores: Tensor, + enc_bbox_preds: Tensor, + batch_gt_instances: InstanceList, + batch_img_metas: List[dict], + dn_meta: Dict[str, int], + batch_gt_instances_ignore: OptInstanceList = None + ) -> Dict[str, Tensor]: + """Loss function. + + Args: + all_layers_cls_scores (Tensor): Classification scores of all + decoder layers, has shape (num_decoder_layers, bs, + num_queries_total, cls_out_channels), where + `num_queries_total` is the sum of `num_denoising_queries` + and `num_matching_queries`. + all_layers_bbox_preds (Tensor): Regression outputs of all decoder + layers. Each is a 4D-tensor with normalized coordinate format + (cx, cy, w, h) and has shape (num_decoder_layers, bs, + num_queries_total, 4). + enc_cls_scores (Tensor): The score of each point on encode + feature map, has shape (bs, num_feat_points, cls_out_channels). + enc_bbox_preds (Tensor): The proposal generate from the encode + feature map, has shape (bs, num_feat_points, 4) with the last + dimension arranged as (cx, cy, w, h). + batch_gt_instances (list[:obj:`InstanceData`]): Batch of + gt_instance. It usually includes ``bboxes`` and ``labels`` + attributes. + batch_img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + dn_meta (Dict[str, int]): The dictionary saves information about + group collation, including 'num_denoising_queries' and + 'num_denoising_groups'. It will be used for split outputs of + denoising and matching parts and loss calculation. + batch_gt_instances_ignore (list[:obj:`InstanceData`], optional): + Batch of gt_instances_ignore. It includes ``bboxes`` attribute + data that is ignored during training and testing. + Defaults to None. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + # train: num_denoising_queries + num_query_one2one + # + num_query_one2many + num_query_one2one = dn_meta[ + 'num_denoising_queries'] + self.num_query_one2one + outputs_classes_one2one = \ + all_layers_cls_scores[:, :, 0: num_query_one2one, :] + outputs_coords_one2one = \ + all_layers_bbox_preds[:, :, 0: num_query_one2one, :] + # hybrid-matching part + outputs_classes_one2many = \ + all_layers_cls_scores[:, :, num_query_one2one:, :] + outputs_coords_one2many = \ + all_layers_bbox_preds[:, :, num_query_one2one:, :] + + loss_dict = super(HybridDINOHead, self).loss_by_feat( + outputs_classes_one2one, outputs_coords_one2one, enc_cls_scores, + enc_bbox_preds, batch_gt_instances, batch_img_metas, dn_meta, + batch_gt_instances_ignore) + + o2m_batch_gt_instances = [] + for gt_instance in batch_gt_instances: + bboxes = gt_instance.bboxes.repeat(self.k_one2many, 1) + labels = gt_instance.labels.repeat(self.k_one2many) + new_gt_instance = gt_instance.new(bboxes=bboxes, labels=labels) + o2m_batch_gt_instances.append(new_gt_instance) + + losses_cls_o2m, losses_bbox_o2m, losses_iou_o2m = multi_apply( + self.loss_by_feat_single, + outputs_classes_one2many, + outputs_coords_one2many, + batch_gt_instances=o2m_batch_gt_instances, + batch_img_metas=batch_img_metas) + + loss_dict['loss_cls_o2m'] = losses_cls_o2m[-1] + loss_dict['loss_bbox_o2m'] = losses_bbox_o2m[-1] + loss_dict['loss_iou_o2m'] = losses_iou_o2m[-1] + for num_dec_layer, (loss_cls_i, loss_bbox_i, loss_iou_i) in \ + enumerate(zip(losses_cls_o2m[:-1], losses_bbox_o2m[:-1], + losses_iou_o2m[:-1])): + loss_dict[f'd{num_dec_layer}.loss_cls_o2m'] = loss_cls_i + loss_dict[f'd{num_dec_layer}.loss_bbox_o2m'] = loss_bbox_i + loss_dict[f'd{num_dec_layer}.loss_iou_o2m'] = loss_iou_i + return loss_dict From 6f85dfeb045faebda918fdc6fcc7625c41e0f4c2 Mon Sep 17 00:00:00 2001 From: V3Det Dataset <136440346+V3Det@users.noreply.github.com> Date: Tue, 19 Sep 2023 09:33:48 +0800 Subject: [PATCH 47/63] Support V3Det: Vast Vocabulary Visual Detection Dataset (ICCV 2023 Oral) (#10938) Co-authored-by: Yuhang Cao Co-authored-by: myownskyW7 <727032989@qq.com> Co-authored-by: Jiaqi Wang Co-authored-by: huanghaian --- configs/_base_/datasets/v3det.py | 69 + configs/v3det/README.md | 85 + ...r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py | 171 + ...inb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py | 27 + .../category_name_13204_v3det_2023_v1.txt | 13204 ++++++++++++++++ ...-twostage_r50_8xb4_sample1e-3_v3det_50e.py | 108 + ...wostage_swin_16xb2_sample1e-3_v3det_50e.py | 27 + ...no-4scale_r50_8xb2_sample1e-3_v3det_36e.py | 109 + ...-4scale_swin_16xb1_sample1e-3_v3det_36e.py | 27 + ...r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py | 72 + ...inb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py | 27 + ...r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py | 116 + ...inb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py | 27 + configs/v3det/v3det_icon.jpg | Bin 0 -> 45466 bytes mmdet/datasets/__init__.py | 3 +- mmdet/datasets/api_wrappers/__init__.py | 3 +- mmdet/datasets/api_wrappers/cocoeval_mp.py | 296 + mmdet/datasets/v3det.py | 20 + mmdet/evaluation/metrics/coco_metric.py | 13 +- mmdet/models/dense_heads/base_dense_head.py | 8 +- mmdet/models/dense_heads/fcos_head.py | 29 +- mmdet/models/losses/__init__.py | 9 +- mmdet/models/losses/cross_entropy_loss.py | 100 + mmdet/models/losses/focal_loss.py | 118 + .../assigners/max_iou_assigner.py | 84 +- requirements/runtime.txt | 1 + setup.cfg | 2 +- 27 files changed, 14738 insertions(+), 17 deletions(-) create mode 100644 configs/_base_/datasets/v3det.py create mode 100644 configs/v3det/README.md create mode 100644 configs/v3det/cascade_rcnn_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py create mode 100644 configs/v3det/cascade_rcnn_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py create mode 100644 configs/v3det/category_name_13204_v3det_2023_v1.txt create mode 100644 configs/v3det/deformable-detr-refine-twostage_r50_8xb4_sample1e-3_v3det_50e.py create mode 100644 configs/v3det/deformable-detr-refine-twostage_swin_16xb2_sample1e-3_v3det_50e.py create mode 100644 configs/v3det/dino-4scale_r50_8xb2_sample1e-3_v3det_36e.py create mode 100644 configs/v3det/dino-4scale_swin_16xb1_sample1e-3_v3det_36e.py create mode 100644 configs/v3det/faster_rcnn_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py create mode 100644 configs/v3det/faster_rcnn_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py create mode 100644 configs/v3det/fcos_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py create mode 100644 configs/v3det/fcos_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py create mode 100644 configs/v3det/v3det_icon.jpg create mode 100644 mmdet/datasets/api_wrappers/cocoeval_mp.py create mode 100644 mmdet/datasets/v3det.py diff --git a/configs/_base_/datasets/v3det.py b/configs/_base_/datasets/v3det.py new file mode 100644 index 00000000000..38ccbf864b6 --- /dev/null +++ b/configs/_base_/datasets/v3det.py @@ -0,0 +1,69 @@ +# dataset settings +dataset_type = 'V3DetDataset' +data_root = 'data/V3Det/' + +backend_args = None + +train_pipeline = [ + dict(type='LoadImageFromFile', backend_args=backend_args), + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='RandomChoiceResize', + scales=[(1333, 640), (1333, 672), (1333, 704), (1333, 736), + (1333, 768), (1333, 800)], + keep_ratio=True), + dict(type='RandomFlip', prob=0.5), + dict(type='PackDetInputs') +] +test_pipeline = [ + dict(type='LoadImageFromFile', backend_args=backend_args), + dict(type='Resize', scale=(1333, 800), keep_ratio=True), + # If you don't have a gt annotation, delete the pipeline + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] +train_dataloader = dict( + batch_size=2, + num_workers=2, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + batch_sampler=dict(type='AspectRatioBatchSampler'), + dataset=dict( + type='ClassBalancedDataset', + oversample_thr=1e-3, + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/v3det_2023_v1_train.json', + data_prefix=dict(img=''), + filter_cfg=dict(filter_empty_gt=True, min_size=4), + pipeline=train_pipeline, + backend_args=backend_args))) +val_dataloader = dict( + batch_size=1, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + ann_file='annotations/v3det_2023_v1_val.json', + data_prefix=dict(img=''), + test_mode=True, + pipeline=test_pipeline, + backend_args=backend_args)) +test_dataloader = val_dataloader + +val_evaluator = dict( + type='CocoMetric', + ann_file=data_root + 'annotations/v3det_2023_v1_val.json', + metric='bbox', + format_only=False, + backend_args=backend_args, + use_mp_eval=True, + proposal_nums=[300]) +test_evaluator = val_evaluator diff --git a/configs/v3det/README.md b/configs/v3det/README.md new file mode 100644 index 00000000000..423c35fe707 --- /dev/null +++ b/configs/v3det/README.md @@ -0,0 +1,85 @@ +

    +

    + +# V3Det: Vast Vocabulary Visual Detection Dataset + +
    + Jiaqi Wang*, + Pan Zhang*, + Tao Chu*, + Yuhang Cao*,
    + Yujie Zhou, + Tong Wu, + Bin Wang, + Conghui He, + Dahua Lin
    + (* equal contribution)
    + Accepted to ICCV 2023 (Oral) +
    +

    +

    +

    + + Paper, + Dataset
    +
    +
    +
    +

    + +
    + +
    + + + +## Abstract + +Recent advances in detecting arbitrary objects in the real world are trained and evaluated on object detection datasets with a relatively restricted vocabulary. To facilitate the development of more general visual object detection, we propose V3Det, a vast vocabulary visual detection dataset with precisely annotated bounding boxes on massive images. V3Det has several appealing properties: 1) Vast Vocabulary: It contains bounding boxes of objects from 13,204 categories on real-world images, which is 10 times larger than the existing large vocabulary object detection dataset, e.g., LVIS. 2) Hierarchical Category Organization: The vast vocabulary of V3Det is organized by a hierarchical category tree which annotates the inclusion relationship among categories, encouraging the exploration of category relationships in vast and open vocabulary object detection. 3) Rich Annotations: V3Det comprises precisely annotated objects in 243k images and professional descriptions of each category written by human experts and a powerful chatbot. By offering a vast exploration space, V3Det enables extensive benchmarks on both vast and open vocabulary object detection, leading to new observations, practices, and insights for future research. It has the potential to serve as a cornerstone dataset for developing more general visual perception systems. V3Det is available at https://v3det.openxlab.org.cn/. + +## Prepare Dataset + +Please download and prepare V3Det Dataset at [V3Det Homepage](https://v3det.openxlab.org.cn/) and [V3Det Github](https://github.com/V3Det/V3Det). + +The data includes a training set, a validation set, comprising 13,204 categories. The training set consists of 183,354 images, while the validation set has 29,821 images. The data organization is: + +``` +data/ + images/ + / + |────.png + ... + ... + annotations/ + |────v3det_2023_v1_category_tree.json # Category tree + |────category_name_13204_v3det_2023_v1.txt # Category name + |────v3det_2023_v1_train.json # Train set + |────v3det_2023_v1_val.json # Validation set +``` + +## Results and Models + +| Backbone | Model | Lr schd | box AP | Config | Download | +| :------: | :-------------: | :-----: | :----: | :----------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------: | +| R-50 | Faster R-CNN | 2x | 25.4 | [config](./faster_rcnn_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py) | [model](https://download.openxlab.org.cn/models/V3Det/V3Det/weight//faster_rcnn_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x) | +| R-50 | Cascade R-CNN | 2x | 31.6 | [config](./cascade_rcnn_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py) | [model](https://download.openxlab.org.cn/models/V3Det/V3Det/weight//cascade_rcnn_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x) | +| R-50 | FCOS | 2x | 9.4 | [config](./fcos_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py) | [model](https://download.openxlab.org.cn/models/V3Det/V3Det/weight//fcos_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x) | +| R-50 | Deformable-DETR | 50e | 34.4 | [config](./deformable-detr-refine-twostage_r50_8xb4_sample1e-3_v3det_50e.py) | [model](https://download.openxlab.org.cn/models/V3Det/V3Det/weight/Deformable_DETR_V3Det_R50) | +| R-50 | DINO | 36e | 33.5 | [config](./dino-4scale_r50_8xb2_sample1e-3_v3det_36e.py) | [model](https://download.openxlab.org.cn/models/V3Det/V3Det/weight/DINO_V3Det_R50) | +| Swin-B | Faster R-CNN | 2x | 37.6 | [config](./faster_rcnn_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py) | [model](https://download.openxlab.org.cn/models/V3Det/V3Det/weight//faster_rcnn_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x) | +| Swin-B | Cascade R-CNN | 2x | 42.5 | [config](./cascade_rcnn_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py) | [model](https://download.openxlab.org.cn/models/V3Det/V3Det/weight//cascade_rcnn_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x) | +| Swin-B | FCOS | 2x | 21.0 | [config](./fcos_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py) | [model](https://download.openxlab.org.cn/models/V3Det/V3Det/weight//fcos_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x) | +| Swin-B | Deformable-DETR | 50e | 42.5 | [config](./deformable-detr-refine-twostage_swin_16xb2_sample1e-3_v3det_50e.py) | [model](https://download.openxlab.org.cn/models/V3Det/V3Det/weight/Deformable_DETR_V3Det_SwinB) | +| Swin-B | DINO | 36e | 42.0 | [config](./dino-4scale_swin_16xb1_sample1e-3_v3det_36e.py) | [model](https://download.openxlab.org.cn/models/V3Det/V3Det/weight/DINO_V3Det_SwinB) | + +## Citation + +```latex +@inproceedings{wang2023v3det, + title = {V3Det: Vast Vocabulary Visual Detection Dataset}, + author = {Wang, Jiaqi and Zhang, Pan and Chu, Tao and Cao, Yuhang and Zhou, Yujie and Wu, Tong and Wang, Bin and He, Conghui and Lin, Dahua}, + booktitle = {The IEEE International Conference on Computer Vision (ICCV)}, + month = {October}, + year = {2023} +} +``` diff --git a/configs/v3det/cascade_rcnn_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py b/configs/v3det/cascade_rcnn_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py new file mode 100644 index 00000000000..567c31bd0e9 --- /dev/null +++ b/configs/v3det/cascade_rcnn_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py @@ -0,0 +1,171 @@ +_base_ = [ + '../_base_/models/cascade-rcnn_r50_fpn.py', '../_base_/datasets/v3det.py', + '../_base_/schedules/schedule_2x.py', '../_base_/default_runtime.py' +] +# model settings +model = dict( + rpn_head=dict( + loss_bbox=dict(_delete_=True, type='L1Loss', loss_weight=1.0)), + roi_head=dict(bbox_head=[ + dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=13204, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=True, + cls_predictor_cfg=dict( + type='NormedLinear', tempearture=50, bias=True), + loss_cls=dict( + type='CrossEntropyCustomLoss', + num_classes=13204, + use_sigmoid=True, + loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0)), + dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=13204, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.05, 0.05, 0.1, 0.1]), + reg_class_agnostic=True, + cls_predictor_cfg=dict( + type='NormedLinear', tempearture=50, bias=True), + loss_cls=dict( + type='CrossEntropyCustomLoss', + num_classes=13204, + use_sigmoid=True, + loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0)), + dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=13204, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.033, 0.033, 0.067, 0.067]), + reg_class_agnostic=True, + cls_predictor_cfg=dict( + type='NormedLinear', tempearture=50, bias=True), + loss_cls=dict( + type='CrossEntropyCustomLoss', + num_classes=13204, + use_sigmoid=True, + loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0)) + ]), + # model training and testing settings + train_cfg=dict( + rpn_proposal=dict(nms_pre=4000, max_per_img=2000), + rcnn=[ + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.5, + min_pos_iou=0.5, + match_low_quality=False, + ignore_iof_thr=-1, + perm_repeat_gt_cfg=dict(iou_thr=0.7, perm_range=0.01)), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + pos_weight=-1, + debug=False), + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.6, + neg_iou_thr=0.6, + min_pos_iou=0.6, + match_low_quality=False, + ignore_iof_thr=-1, + perm_repeat_gt_cfg=dict(iou_thr=0.7, perm_range=0.01)), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + pos_weight=-1, + debug=False), + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.7, + min_pos_iou=0.7, + match_low_quality=False, + ignore_iof_thr=-1, + perm_repeat_gt_cfg=dict(iou_thr=0.7, perm_range=0.01)), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + pos_weight=-1, + debug=False) + ]), + test_cfg=dict( + rcnn=dict( + score_thr=0.0001, + nms=dict(type='nms', iou_threshold=0.6), + max_per_img=300))) +# dataset settings +train_dataloader = dict(batch_size=4, num_workers=8) + +# training schedule for 1x +max_iter = 68760 * 2 +train_cfg = dict( + _delete_=True, + type='IterBasedTrainLoop', + max_iters=max_iter, + val_interval=max_iter) + +# learning rate +param_scheduler = [ + dict( + type='LinearLR', + start_factor=1.0 / 2048, + by_epoch=False, + begin=0, + end=5000), + dict( + type='MultiStepLR', + begin=0, + end=max_iter, + by_epoch=False, + milestones=[45840 * 2, 63030 * 2], + gamma=0.1) +] + +# optimizer +optim_wrapper = dict( + type='OptimWrapper', + optimizer=dict(_delete_=True, type='AdamW', lr=1e-4 * 1, weight_decay=0.1), + clip_grad=dict(max_norm=35, norm_type=2)) + +# Default setting for scaling LR automatically +# - `enable` means enable scaling LR automatically +# or not by default. +# - `base_batch_size` = (8 GPUs) x (2 samples per GPU). +auto_scale_lr = dict(enable=False, base_batch_size=32) + +default_hooks = dict( + checkpoint=dict(type='CheckpointHook', by_epoch=False, interval=5730 * 2)) +log_processor = dict(type='LogProcessor', window_size=50, by_epoch=False) diff --git a/configs/v3det/cascade_rcnn_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py b/configs/v3det/cascade_rcnn_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py new file mode 100644 index 00000000000..f6493323ba8 --- /dev/null +++ b/configs/v3det/cascade_rcnn_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py @@ -0,0 +1,27 @@ +_base_ = [ + './cascade_rcnn_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py', +] + +pretrained = 'https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_base_patch4_window7_224.pth' # noqa + +# model settings +model = dict( + backbone=dict( + _delete_=True, + type='SwinTransformer', + embed_dims=128, + depths=[2, 2, 18, 2], + num_heads=[4, 8, 16, 32], + window_size=7, + mlp_ratio=4, + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.3, + patch_norm=True, + out_indices=(0, 1, 2, 3), + with_cp=False, + convert_weights=True, + init_cfg=dict(type='Pretrained', checkpoint=pretrained)), + neck=dict(in_channels=[128, 256, 512, 1024])) diff --git a/configs/v3det/category_name_13204_v3det_2023_v1.txt b/configs/v3det/category_name_13204_v3det_2023_v1.txt new file mode 100644 index 00000000000..7258c9729f6 --- /dev/null +++ b/configs/v3det/category_name_13204_v3det_2023_v1.txt @@ -0,0 +1,13204 @@ +ashtray +cash machine +popper +compass +rubber band +spring +refrigerator magnet +concrete mixer +crane +generator +spray paint +pumpjack +aquarium +fishbowl +pillar box +nano aquarium +spoon lure +penfold post box +bung +cork +power plugs and sockets +socket +wall socket +electronic component +battery +capacitor +coil +resistor +solar cell +parachute +umbrella +cocktail umbrella +Aluminum alloy ladder +Wooden ladder +Bamboo ladder +Parachute Umbrella +Paper Oil Umbrella +Transparent Umbrella +birdcage +birdhouse +cage +chicken coop +rabbit hutch +bird's nest +nest +wasp's nest +whistle +gold +money +cash +paper money +coinage +bill +magnifying glass +lens +microscope +telescope +telescopic sight +rifle scopes +LED Lens +Triangular Prism +Eyeglass Lens +Cylindrical Lens +bicycle wheel rim +bobbin +ferris wheel +gear +inner tube +pulley +tire +waterwheel +wheel +fishing reel +skateboard wheel +brazier +gearshift +handwheel +hearth +hot-water bottle +radiator +roaster +solar heater +steering wheel +tandoor +direct vent fireplace +masonry oven +stop sign +crosswalk sign +billboard +crosswalk +speed bump +yard marker +signpost +fingerpost +signage +speed sign +bell +electric bell +timer +weathervane +fire alarm +bell buoy +windbell +bicycle bell +Electronic Clock +Timer +checker +chessman +chess set +Chinese Chess +Go +International Draughts or Checkers +Chinese Checkers +Aeroplane Chess +Shogi +Land Wargame +International Draughts +Reversi +Nine Men's Morris +Tic-Tac-Toe +Makruk +Sittuyin +baby bed +bed +bed pillow +bunk bed +carrycot +crib +futon +hammock +headboard +hospital bed +lilo +mattress +mattress pad +pillow +throw pillow +canopy bed +emergency sleeping bag +command module +meteorite +moon +satellite +sun +satellite dish +black hole +Earth +Mars +Mercury +Venus +Saturn +Jupiter +Uranus +Neptune +pluto +candy +brittle +chewing gum +candied apple +candy cane +chocolate +cocoa powder +white chocolate +gumdrop +lollipop +marshmallow +nougat bar +jello +conserve +aspic +tanghulu +chocolate-covered potato chips +chocolate balls +jelly babies +ribbon candy +gummy bear +weaving basket +bag +gun barrel +basin +basket +bottle +bucket +glasses case +matchbox +pot +rain barrel +wallet +purse +cask +keg +clay pot +reusable shopping bag +briefcase +laptop bag +Moisture-proof box +baby float +air cushion +breeches buoy +fire extinguisher +fireplug +hydrant +life jacket +life saver +water wings +inflatable armbands +life saving hammer +descender +escape rope +rescue whistle +fire mask +smoke detector +lifeline +fire emergency lights +air breathing apparatus +fire extinguisher cabinet +blowgun +cigar +cigarette +cigarette butt +discharge pipe +fire hose +garden hose +grab bar +meerschaum +smokestack +test tube +torpedo tube +barber's pole +peace pole +opium pipe +factory chimney +pipe tobacco +air duct +Aluminum plastic tube +single pole towel rack +double bar towel rack +Towel rack +aspirator +catheter +dental appliance +hypodermic needle +pill +plaster +stethoscope +stretcher +swab +syringe +injection +mayo scissors +thermometer +temperature gun +electrotherapy device +CT machine +medical kit +scalpel +dropper +denture +ECG machine +sphygmomanometer +CT scan +forehead mirror +Snellen chart +amulet +cross +flag +flagpole +tomb +gravestone +handstamp +mausoleum +menhir +shoulder board +shoulder patch +totem pole +decoration +trophy +mascot +tomb of the unknown soldier +cross of sacrifice +shoulder sleeve insignia +koinobori +joss paper +paper ingot +sacrificial candle +Spirit card +incense burner +Spirit Banner +firecracker +wreath +fountain +millstone +crystal +diamond +ruby +pearl +chrysoberyl +jadeite +kyanite +opal +rock crystal +amethyst +aquamarine +black opal +chrysoprase +citrine +emerald +jade +peridot +rhodolite +zircon +yellow quartz +cobaltocalcite +lake superior agate +opalite +ring stone +malachite +wine rack +high-heeled shoe +pot rack +bookcase +cabinet +dresser +clothes tree +coat hanger +coatrack +dish rack +drawer +minibar +toastrack +towel rack +wardrobe +nightstand +File cabinets +files rack +Lifting drying rack +paper shelf +Shoebox +TV cabinet +wine cabinet +tea cabinet +filing cabinet +medicine cabinet +beaker +compass (drawing tool) +detector +divider +measuring instrument +plumb bob +protractor +straightedge +vernier scale +Triangular ruler +height tester +body weight tester +Spirometry +Sebum forceps +tape measure +level gauge +total station +multimeter +oscilloscope +Signal generator +Transistor Characteristic Tracer +megger +Infrared Thermometer +Spectrum Analyzer +lcr parameter tester +IC Tester +Tablet +Speedometer +armchair +chair +conference table +desk +dinner table +dressing table +drop-leaf table +folding chair +gateleg table +highchair +lectern +pedestal table +rocking chair +couch +wheelchair +chess table +deckchair +joëlette +bean bag chair +massage chair +Computer Desk +school desks +one-legged table +tripod table +four legged table +round table +square table +bathroom sink +toilet roll holder +irrigation sprinkler +bathtub +bedpan +broom +dumpster +dustpan +faucet +flush toilet +garbage +kitchen sink +nozzle +potty seat +showerhead +sink +moppingfloor +tub +urinal +water faucet +squat toilet +pressure washer +shower +duster +stainless steel trash can +Ordinary floor drain +Floor drain for washing machine +shower head +soap dish holder +soap dish +single cup holder +double cup holder +toilet brush holder +toilet brush +board eraser +abacus +chalk +fountain pen +marker +pencil +pencil sharpener +quill +rubber eraser +tap +rollerball pen +inkstone +Portfolio +file set +business card case +zipper bag +file basket +book stand +stapler +Staple +Pencil sharpener +glue stick +glue +tape holder +pen holder +pencil case +calendar holder +ballpoint pen +desk pen +watercolor pen +correction fluid +correction tape +writing brush +raw tape +Scotch tape +Insulation Tape +folder +folding napkins +bath mat +bath towel +beach towel +beer mat +cleaning pad +cobweb +diaper +dishcloth +doily +drop cloth +dustcloth +dust cover +embroidery +floor cover +groundsheet +handkerchief +mosquito net +mousepad +paper towel +place mat +potholder +rag +scouring pad +skein +soap pad +tapestry +tarpaulin +towel +webbing +blanket +mylar +leather +silk +wool +window covering +window valance +water well +artesian well +curtain +door +doorframe +doorknob +dormer +french door +gusher +knocker +louver +lychgate +mail slot +manhole cover +oeil de boeuf +portcullis +porthole +pump well +rear-view mirror +revolving door +sliding door +starting gate +triumphal arch +well +window frame +window +stained glass +Exterior door lock +handle lock +Ball lock +electronic door lock +san pedro cactus +large-flowered cactus +ferocactus cylindraceus +cylindropuntia bigelovii +mammillaria dioica +opuntia ficus-indica +hamatocactus hamatacanthus +echinocereus pectinatus +opuntia cochenillifera +mammillaria grahamii +opuntia decumbens +echinocactus horizonthalonius +mammillaria heyderi +echinocereus santaritensis +juniperus occidentalis +echinocereus chloranthus +larix occidentalis +cedar of lebanon +carnegiea gigantea +echinocactus +golden barrel cactus +rainbow cactus +barrel cactus +chichipe +mammillaria +nopal +bamboo +adansonia digitata +ceiba pentandra +queensland bottletree +japanese beech +oak +quercus garryana +mallee +forest red gum +divi-divi +caranday +tree +leafless tree +basketball moves +bowling pin +cricketshot +croquet ball +field hockey ball +golf ball +handball +lacrosse ball +ping-pong ball +rugby ball +shot +shuttlecock +soccer +tennis ball +volleyball +floorball +pesäpallo +baseball +pingpong +badminton +tennis +bowling +puck +bandy ball +billiards +softball +hockey +lacrosse +cricket +rugby +water polo +wooden ball +basketball +American football +golf +pickle ball +match ball +lawn bowls +racquetball +sepak takraw +croquet +dodge ball +facial cleanser +baby powder +bar soap +bottlebrush +comb +condom +cream +curler +curling iron +electric toothbrush +eyebrow pencil +face powder +hairbrush +hand cream +laundry detergent +lip balm +lotion +nail polish +eyebrow pencil +perfume +razor +sanitary napkin +shaver +shaving brush +soap +toothbrush +toothpaste +toothpick +nail clipper +interdental brush +cosmetic container +electric clippers +electric curling iron +Electric shaver +manual shaver +facial cleansing brushe +facial steamer +Flosser +ear cleaner +baked oil cap +Facial mask +spray +Oil-absorbing paper +makeup remover +lipstick +Beauty egg +Epilator +Foot Patch +water castle +portable toilet +lighthouse +bell tent +cabana +campanile +cenotaph +cottage tent +covered bridge +field tent +hayloft +house +igloo +lake dwelling +mountain tent +newsstand +nissen hut +obelisk +outhouse +pillbox +pyramidal tent +ranch house +sentry box +sod house +spire +phone booth +tepee +tollbooth +umbrella tent +wall tent +yurt +palace +church +stone cabin +naveta +qubba +round barn +tobacco barn +liberty monument +partytent +barracas de piedra +tukul +gebakkraam +würstelstand +memorial gates and arches +shieling hut +icelandic turf house +wine glass +stemware +outdoor grill +contact grill +food steamer +baby bottle +bowl +cutting board +chopsticks +dishware +cup +dish +epergne +fork +glass +gravy boat +griddle +kettle +combine with bowl +mug +pan +paper plate +home plate +poacher +porringer +pressure cooker +punch bowl +runcible spoon +saucepan +soup bowl +spoon +spork +straw +tableware +tea ball +tea maker +tea pot +wok +wooden spoon +jug +gaiwan +bogrács +honey dipper +dolsot +bamboo steamer +glass goblet +sheet pan +sippy cup +springform pan +decoction device +ax +ax handle +bucksaw +cheese cutter +crosscut saw +hedge trimmer +knife +paper cutter +peeler +proverb +scissors +scythe +secateurs +sheath +sickle +snips +sword +table knife +thinning shears +throwing knife +splitting maul +pizza cutter +karambit +abrasive saw +shinai +ring knife +dagger +Butterfly Sword +Jiuhuan Dao +Machete +saber +Pak Knife +Tai Chi Knife +child and mother knife +Yuntou knife +Seedling knife +kitchen knife +Spike knife +Handguard Wolf's Fang Knife +Hook Knife +Seven-Star Sword +Meridian Zodiac Mandarin Duck Battle Axes +Wooden Sword +Hooked weapons +Arts and Crafts Knife +Paper cutter +Sword +Dagger +Swiss army knife +Nepalese curved knife +American M9 Bayonet +Butterfly Knife +payment card +academic certificate +blackboard/whiteboard +bookmark +clipboard +doorplate +drumhead +envelope +vehicle registration plate +newspaper +palette +playing card +swatter +washboard +notepaper +diploma +menu +passport +magazine +greeting card +postcard +postage stamp +book +debit card +carton +cardboard +corkboard +gift wrap +notepad +tissue +toilet paper +post-it note +visa credit card +Wireless Bound Notebook +Spiral Notebook +Leather-covered notebook +Stapled Notebook +Post-it note +ledger +carbon paper +paper airplane +paper takeout box +paper bowl +paper cup +paper bag +paper box +business card +invitation +red envelope +couplet +red paper lantern +white paper lantern +hang tag +hang flag +poster +butter paper +barbette carriage +battering ram +bomb +brass knucks +slug +cannon +crossbow +gun +halberd +holster +longbow +missile +rocket +stun gun +trident +whip +ammunition +nunchaku +tonfa +fn p90 +spear +long spear +double crescent halberd +Forked weapon +Classical Gun +Finger tiger +Meteor Hammer +Rocket Launcher +Revolver +Sniper rifle +Light machine gun +Heavy machine gun (with tripod) +AK-47 rifle +M16A4 +MP5 submachine gun +MP7 submachine gun +UZI submachine gun +PP2000 submachine gun +UMP submachine gun +Thompson submachine gun +mortar (weapon) +Mauser Kar98K carbine +95 Type Assault Rifle +M4A1 Carbine +FN SCAR +G36 Assault Rifle +FAMAS +AUG Assault Rifle +FN FNC +FN FAL Automatic Rifle +SG 550 Assault Rifle +Smoke Grenade +Explosive charge +Winchester Defender Shotgun +Remington Model 870 Shotgun +AA-12 Automatic Shotgun +KS-23 Shotgun +Pepper Spray +Shield +Laser Cannon +keychain +plumbing fitting +threading needle +anchor +anvil +awl +bodkin +candlesnuffer +carabiner +grapnel +hex nut +hook +key +lock +nail +needle +pin +pincushion +pipefitting +screw +sewing machine needle +snatch block +stickpin +thimble +tie tack +wing nut +Drawer lock +Glass cabinet lock +Chain lock +Hang lock +Number lock +Glass hinge +Corner hinge +bearing hinge +pivot hinge +hinge +drawer rail +sliding door track +latch +door suction +floor suction +floor spring +door closer +plate pin +anti-theft buckle hoist +strip clamp +bouncing ball +omnidirectional wheel +door jamb +Tee connection +female threaded elbow +ball valve +rivet nut +concrete nail +advertising nail +mirror nail +expansion bolt +self-tapping screw +safety lock buckle +safe +bicycle lock +U-lock +wheel lock +toy vehicle +rubik's cube +amphora +armillary sphere +cockhorse +die +dice cup +doll +domino +figurine +kite +lego +mannequin +pinwheel +puppet +rag doll +scarecrow +scrimshaw +sculpture +seesaw +slide +snowman +swing (seat) +teddy +water gun +statuary +plasticine +trompo +horse head mask +matryoshka doll +nerf +newton's cradle +terrestrial globe +wooden toy train +pal mickey +greek vase +doll clothes +roly-poly toy +wallace fountain +rubber duck +dreidel +wood carving +gypsum carving +root carving +jade carving +bamboo carving +nuclear carving +stone carving +ivory carving +relief carving +snow carving +ice carving +sand carving +charcoal carving +Bentley Blue +Tang Dynasty Tri-Color +Shiwan Figurine +Walnut Antique +Embroidery +Liu Li Crafts +Lacquerware +Bronze Ware +Blue Printed Fabric +Willow Plait Weaving +Corn Husk Braiding +Straw Braiding +Bamboo Braiding +Bamboo Curtain Painting +Wheat Straw Painting +Iron Painting +Gauze Sand Gold +Iron Artwork +Rocket Model +Gundam Model +House Model +Gun Model +Aircraft Model +Car model +Motorcycle model +Bicycle model +Window grille +Paper cutting +Taihu stone +Shoushan stone +Qingtian stone +Changsha stone +Balinese stone +Changbai jade +Lotus stone +Chrysanthemum Stone +Kunshan Stone +Xuan Stone +hand fan +alligator wrench +bit +bolt cutter +bottle opener +brush +cap opener +corkscrew +crowbar +drill +file +fire tongs +forceps +fore plane +funnel +grater +hammer +hammerhead +hand mower +hoe +lawn mower +lighter +matchstick +mincer +mortar +pestle +pick +pincer +pitchfork +plane +pliers +power drill +punch pliers +quern +rake +rolling pin +screwdriver +screw key +soldering iron +spade +staple gun +stirrer +tire iron +trowel +wrench +egg separator +power wrench +Bottle Opener +Weed Trimmer +Snow Blower +Hole Punch +Curtain Rod +Caulking Gun +Straight Shank Twist Drill Bit +Diamond drill bit +Hole opener +Gas stove +Cylinder +Air pump +Wire Cutter +Pointed Nose Pliers +Diagonal Pliers +Bent Nose Pliers +Pump Pliers +Combination Pliers +Locking Pliers +Flat Nose Pliers +Round Nose Pliers +Wire Stripper Pliers +Needle Nose Pliers +top cut pliers +carp pliers +pipe pliers +adjustable pliers +cable pliers +crimping pliers +hedge shears +flat-nose pliers +fishing pliers +wire cutters +cable cutters +locking pliers +hinged pliers +wide-handled pliers +bent-handled pliers +dual-ended pliers +vice grip pliers +monkey wrench +combination wrench +adjustable wrench +L-shaped wrench +socket wrench +Inner hex wrench +torque wrench +fireman's spanner +ratchet wrench +drum stick +tabla +banjo +cymbal +drum +guitar +harp +lute +piano +musical keyboard +tuning fork +shekere +pandeiro +mbira +guzheng +basset clarinet +flute +xiao +Panpipe +Xun +Sheng +Lusheng +Bawu +Guanzi +Suona +Shakuhachi +Liuqin +Pipa +Ruan +Yueqin +guqin +Guzheng +Konghou +Sanxian +Dongbula +Rawap +Yangqin +Tanggu +Bell-clapping +kang-ku +bronze drum +Da Xiao Gong +Xiaogu +Paigu +Da cha +Erhu +Banhu +Gehu +Morin Khur +Jinghu +Zhonghu +Gaohu +Violin +Viola +Cello +Double Bass +Electric Bass +Harp +Guitar +Electric Guitar +Flute +Piccolo +Clarinet +Oboe +EnglishHorn +Bassoon +Saxophone +Trumpet +Cornet +Trombone +Tuba +Piano +Organ +Piano Accordion +Electronic Keyboard +Timpani +Xylophone +Snare Drum +Triangle +Tambourine +Castanets +Maracas +Cymbals +Gong +tabor +Bangzi +Nao +Wooden fish +Bangu +Fangxiang +Bianzhong +Bianqing +Gourd mouth organ +Hulusi +Kino bamboo drum +bamboo mouth organ +Aluminum Plate Piano +Bamboo Frame +Musical pestle +lianxiang stick +sapayi +Jingang Bell +Vajra +Saam Bell +String bells +Tubular Bell +musical saw +ukulele +wiener melange +caffè mocha +frappé coffee +lemon liqueur +pimm's +cream liqueur +barley water +ice cream +ice-cream cone +sherbet +popsicle +frozen yogurt +vegetable oil +coconut oil +soy sauce +vinegar +butter +yogurt +blueberry yogurt +cheese +blue cheese +swiss cheese +beverage +home brew +ginger beer +sake +wine +white wine +blush wine +champagne +jug wine +liquor +bitters +brandy +jamaica rum +tequila +vodka +whisky +cordial +absinth +coffee liqueur +creme de cacao +creme de menthe +galliano +kummel +maraschino +ratafia +smoothie +irish coffee +cafe noir +espresso +latte +iced coffee +turkish coffee +chocolate milk +milkshake +juice +apple juice +cranberry juice +grape juice +grapefruit juice +orange juice +pineapple juice +lemonade +limeade +mulled wine +soft drink +coca-cola +pepsi +coffee +bottled water +drinking water +soda water +mineral water +seltzer +godiva liqueur +strawberry juice +melon soda +ramune +ganache +snake wine +dondurma +choc ice +diet mountain dew +lemonsoda +vimto +arabic tea +four loko +shave ice +teh tarik +grattachecca +hong kong-style milk tea +fruit yogurts +cuba libre +bingsu +canned coffee +red bull +dublin dr pepper +goji tea +mirinda +canada dry +ube ice cream +orange bitters +cream yogurt +bubble tea +skyr +vitasoy +lemon tea +masala chai +crème de cassis +fanta +skateboard truck +freeboard (skateboard) +bench (weight training) +pommelhorse +backboard +balance beam +barbell +baseball bat +boomerang +croquet mallet +crutch +cue stick +dart +discus +dumbbell +exercise bike +fishing rod +flat bench +frisbee games +goalmouth +golf club +hockey stick +horizontal bar +hula hoop +hurdle +javelin +parallelbars +polo mallet +billiard table +punching bag +quiver +racket +saddle +skateboard +ski +skibob +ski pole +sled +snorkel +snowboard +stilt +stirrup +surfboard +table-tennis table +target +tee +treadmill +stationary bicycle +trekking pole +umpire chair +yoga mat +sit-ski +table tennis racket +kettlebell +bandy stick +breakaway rim +flexible flyer sled +softball bat +Zorbing +ping-pong table +Billiard table +Strandpulling +Single track rowing machine +Double track rowing machine +Elliptical trainer +ab roller +grip strength meter +Starting pistol +Starting blocks +relay baton +high jump bar +sponge-rubber pad +timing podium +volleyball net +tennis rack +tennis net +tennis racket +football goal +football mini-goal +ping pong net +ball cart +gymnasium bench +barbell rack +Bench press +Jump rope +Tug of war rope +ribbed frame +Flat ladder +rope ladder +quincuncial piles +pull-up parallel bar +Sports ribbon +standing long jump tester +Sitting flexion tester +sit-up tester +tension band +hula-hoop +abdominal machine +mountaineering machine +climbing machine +yoga ball +Agile Reaction ball +kettle-bell +suspension training belt +ViPR Barrel +M-Pad Balance Trainer +Battle ropes +squat rack +weight plate +pull-up +rugby goal +barbell piece base +jumping box +boxer target +Boxing foot target +bounce bench +hexagonal trampoline +weight lifting neck pad +push-up stand +split parallel bars +Resistance training sticks +fitness stick +vibration trainer +kickball machine +baseball machine +Table tennis service machine +Tennis service machine +Badminton service machine +Volleyball service machine +Football shooting machine +Universal abdominal disc +Fitness handball +Gliding Discs +marker plate +Agility Ladder +yoga block +yoga wheel +silicone double ball +foam shaft +Pellet Yoga balls +fascial knife +fascia gun +ice pack +posture correction cushion +massage stick +box training bar +bend bar +Three fold cushion +dumbbell stand +Wave velocity ball rack +rehabilitation treadmill +Butterfly machine +Throwing ball +Fitness Ring +Ped-o-Pull +ladder bucket +referee's stand +training dummies +Vault +Gymnastic rings +springboard aid +walking machine +treadle machine +path roller +porsche +chevrolet +honda +classic car +bicycle handlebar +off-road vehicle +open-wheel car +bentley +bmw +hyundai +subaru +travel trailer +mitsubishi +bugatti +alfa romeo +audi +mercedes-benz +cadillac +sport utility vehicle +enduro motorcycle +maserati +food truck +microvan +general motors +lexus +mazda +lotus elise +kia motors +rolls-royce +sidecar (vehicle) +acura +recumbent bicycle +chrysler +flatland bmx +suzuki +mclaren automotive +steam car +buick +single scull +solar vehicle +escort carrier +hoverboarding +pushing cart +ambulance +amphibious vehicle +armored car +armored personnel carrier +armored vehicle +balsa raft +bassinet +beach wagon +bicycle +bicycle-built-for-two +bicycle seatpost +bloodmobile +bulldozer +bumper car +bus +taxi +cable car +camper +camper trailer +car carrier +carriage +chairlift +chariot +choo-choo +chuck wagon +compact car +coupe +covered wagon +cultivator +deck-house +delivery truck +diesel locomotive +dray +dump truck +dune buggy +fire truck +flatbed +forklift truck +freight train +garbage truck +go-kart +golf cart +half track +hand truck +harvester +horsecar +horseless carriage +jaunting car +jeep +jinrikisha +ladder truck +limber +limousine +lorry +mail car +milk float +minicar +minivan +moped +motorcycle +motor scooter +mountain bike +oxcart +palanquin +panda car +passenger train +pavior +pedicab +personnel carrier +pickup truck +police van +pony cart +raft +riding mower +roadster +school bus +scull +sedan +semitrailer +serving cart +shipping +shopping cart +shunter +snowmobile +sports sedan +steam locomotive +road roller +streetcar +subway train +sulky +switch engine +tandem trailer +tank +tank destroyer +telpher +tow truck +tractor +trail bike +trolleybus +unicycle +van +baby walker +walker +watering cart +weapons carrier +cableway vehicle +chuckwagon +self-propelled modular transporter +dolls' pram +tornado intercept vehicle +ice resurfacer +pedelec +ambulance helicopter +shunting tractors +cidomo +electric kick scooter +kite buggying +popup camper +paratransit +bmx bike +open top bus +ice cream van +ice cream cart +tall bike +panel van +steam wagon +rat bike +presidential car +steam bus +steam tractor +quad bike +tandem trike +silo truck +roadrailer +cargo trailer +amphibious excavator +armed response vehicle +kayak paddle +boxcab +d class lifeboat +drift trike +electric trike +fatbike +hook and ladder truck +hpi savage +road bicycle +flatbed truck +twike +self-balancing unicycle +box truck +construction trailer +monster truck +boat trailer +ghost bike +routemaster +mikoshi +rickshaw +Electrically tricycle +Children's tricycles +Sanitation tricycle +tricycle for the elderly +Police motorcycles +Pedal motorcycle +curved beam motorcycle +electric scooter +All Terrain Vehicle +amphibian plane +Unmanned aerial vehicle +hot air balloon +ceiling fan +tablet computer +display device +mobile device +ipad +game controller +air conditioner +android +appliance +beeper +calculator +camcorder +camera +candle +cell phone +chandelier +charger +coffee maker +computer +convector +desk phone +diaphragm +dishwasher +headphone ear pad +electric fan +electric heater +electric range +exhaust fan +floor lamp +fluorescent +gas oven +hair drier +home appliance +iron +joystick +keyboard +lamp +lens cap +loudspeaker +magnetic disk +magnetic tape +megaphone +microwave +sociable +optical disk +oven +pay-phone +photocopier +printer +radome +record player +remote +speaker +rotisserie +projection screen +sewing machine +switch +table lamp +toaster +trouser press +vacuum cleaner +washer +lcd projector +disco ball +electric kettle +butter lamp +touchpad +wheel chandelier +ati rage +sixaxis +crystal salt lamp +Maglev Crafts +rice cooker +electric frying pan +electric steamer +Micro-wave oven +induction cooker +electric thermos +water heater +electric furnace +electric coffee maker +vegetable cutter +meat grinder +Juicer +electric mixer +Noodle press machine +dumpling machine +household rice mill +tofu tofu juice machine +electric peeler +Yogurt machine +Ice shaver +ice cream machine +Water Purifier +refrigerator +range hood +ventilator +hand dryer +massager +hair dryer +humidifier +air purifier +dehumidifier +desktop fan +floor fan +carpet cleaning machine +Vacuum cleaner +Sweeping robot +electric iron +household water pump +Smoke detector +home blood pressure monitor +home blood glucose meter +electric blanket +electronic mosquito killer +TV set +radio +recorder +copier +fax machine +Landline +washing machine +Dryer +floor waxing machine +bread machine +Electric cake stand +Soymilk machine +Disinfection cabinet +stereo +mp3 +digital set top box +Wireless Walkie-Talkie +bb machine +freezer +water dispenser +wall mounted air conditioner +cabinet air conditioner +ceiling air conditioner +window air conditioner +game console +microphone +antenna +hearing aid +Battery +earphone +Ice maker +majiang machine +bath heater +Electric pressure cooker +noodle machine +Fruit and vegetable sterilizer +egg cooker +Egg beater +Bean sprouts machine +kitchen treasure +household waste disposer +Water purifier +Pipeline machine +Mite removal vacuum cleaner +steam mop +Garment steamer +shoe shine machine +shoe dryer +Electric mosquito swatter +electronic breast pump +foot tub +Thermometer +Body Fat Meter +electric sewing machine +shoe cover machine +Lint Remover +sandwich maker +popcorn machine +oxygen machine +soap dispenser +D shape handle +Wired Mouse +wireless mouse +data line +usb interface +converter +Bluetooth earphone +over-ear headphones +Bone Conduction Headphones +earphones +Headphone charging box +Flash Card +USB drive +SSD +disk +mechanical hard drive +electronic bracelet +home projector +Mixing console +Recording pen +Lavalier Mike +External screen +router +light cat +Network Interface +type-c interface +Cooling bracket +HDMI interface +PD interface +VGA interface +Chassis +graphics card +computer battery +Power Adapter +CPU +RAM +motherboard +heat sink +optical drive +numeric keypad +touch pen +Light bulb +wash lamp +energy saving lamp +flashlight +street light +post lamp +Polaroid +mirrorless camera +panoramic camera +monitor +medicinal mushroom +lingzhi mushroom +pleurotus eryngii +russula fragilis +cortinarius anserinus +hygrocybe cantharellus +mycena arcangeliana +hygrophorus olivaceoalbus +crinipellis scabella +atheniella adonis +pholiota jahnii +lactarius deterrimus +hygrocybe punicea +hygrocybe chlorophana +trametes ochracea +leucoagaricus nympharum +protostropharia semiglobata +tricholoma sulphureum +pluteus romellii +resupinatus trichotis +arrhenia retiruga +hericium cirrhatum +bisporella citrina +hygrocybe insipida +resupinatus applicatus +ganoderma lucidum +leucocoprinus brebissonii +lanzia echinophila +chroogomphus rutilus +clavulinopsis helvola +hebeloma radicosum +geoglossum fallax +hygrocybe reidii +cerioporus varius +leccinum versipelle +tubifera ferruginosa +tarzetta cupularis +psathyrella bipellis +helvella elastica +mycena stipata +agaricus dulcidulus +aureoboletus projectellus +russula emetica +gamundia striatula +rutstroemia firma +lachnella alboviolascens +ganoderma pfeifferi +geastrum fimbriatum +inocybe petiginosa +lachnum virgineum +mycena aetites +mycena meliigena +leucopaxillus giganteus +armillaria ostoyae +picipes tubaeformis +pholiota conissans +xerocomellus porosporus +russula rosea +galerina clavata +lycoperdon echinatum +conocybe arrhenii +lepiota magnispora +lepista personata +pluteus semibulbosus +gelatoporia dichroa +agaricus cupreobrunneus +helvella macropus +cortinarius decipiens +cortinarius sanguineus +clitopilus geminus +psathyrella corrugis +marasmiellus ramealis +cortinarius citrinus +hygrocybe russocoriacea +inocutis rheades +glutinoglossum glutinosum +metatrichia vesparia +neoboletus luridiformis +humaria hemisphaerica +suillellus queletii +pleurocybella porrigens +mycena capillaris +stropharia aeruginosa +lactarius torminosus +cuphophyllus fornicatus +cortinarius bolaris +typhula fistulosa +coprinopsis macrocephala +marasmius epiphylloides +phaeomarasmius erinaceus +geoglossum cookeanum +rhizomarasmius setosus +dumontinia tuberosa +parasola lactea +roridomyces roridus +russula sardonia +mycena tenerrima +clitopilus hobsonii +mitrophora semilibera +rubroboletus legaliae +agrocybe elatella +ganoderma resinaceum +gomphus clavatus +cortinarius aprinus +asterophora parasitica +tricholoma aestuans +marasmius bulliardii +mycena belliae +thelephora palmata +mycenella salicina +hygrocybe coccineocrenata +volvariella murinella +hygrophorus penarius +entoloma araneosum +marasmiellus vaillantii +melastiza cornubiensis +lycoperdon mammiforme +pseudoplectania nigrella +cortinarius purpureus +spinellus fusiger +macrolepiota mastoidea +gyroporus castaneus +coprinellus domesticus +hygrocybe conicoides +capitotricha bicolor +hygrocybe ovina +cyathus olla +marasmius cohaerens +dacrymyces capitatus +lactarius obscuratus +mycena stylobates +parasola misera +crepidotus calolepis +mycena juniperina +physarum album +flagelloscypha minutissima +pholiota scamba +marasmius limosus +trichopeziza subsulphurea +hygrocybe singeri +craterellus tubaeformis +microporus xanthopus +lysurus mokusin +auriscalpium vulgare +exsudoporus frostii +coprinopsis picacea +panaeolus papilionaceus +ganoderma applanatum +amanita vaginata +astraeus hygrometricus +annulohypoxylon thouarsianum +lycoperdon perlatum +sarcoscypha austriaca +hygrocybe flavescens +chlorophyllum rhacodes +mutinus elegans +parasola plicatilis +geastrum triplex +panellus stipticus +lichenomphalia chromacea +helvella vespertina +amanita flavoconia +cortinarius iodes +trametes hirsuta +schizophyllum commune +clathrus archeri +sarcoscypha occidentalis +aseroe rubra +leccinum scabrum +hydnellum peckii +hexagonia hydnoides +clathrus columnatus +panaeolus foenisecii +phallus indusiatus +leucocoprinus fragilissimus +entoloma hochstetteri +leratiomyces erythrocephalus +favolaschia calocera +cruentomycena viscidocruenta +ileodictyon cibarium +mycena interrupta +roridomyces austrororidus +pleurotus dryinus +pseudevernia furfuracea +laetiporus cincinnatus +brown cup +earthball +stalked puffball +false truffle +truncocolumella citrina +sarcosomataceae +truffle +coral fungus +mushroom +agaricus arvensis +false deathcap +amanita muscaria +amanita phalloides +amanita rubescens +destroying angel +chanterelle +cinnabar chanterelle +omphalotus illudens +inky cap +coprinus comatus +milkcap +marasmius oreades +pleurotus ostreatus +pholiota astragalina +pholiota aurea +pholiota destruens +pholiota flammans +nameko +pholiota squarrosa +pholiota squarrosoides +stropharia ambigua +stropharia hornemannii +stropharia rugoso-annulata +entoloma lividum +entoloma aprile +chlorophyllum molybdites +parasol mushroom +lepiota naucina +lepiota rhacodes +american parasol +lepiota rubrotincta +lepiota clypeolaria +blewits +sandy mushroom +tricholoma pessundatum +tricholoma pardinum +tricholoma vaccinum +tricholoma aurantium +pluteus aurantiorugosus +deer mushroom +volvariella bombycina +clitocybe clavipes +clitocybe dealbata +clitocybe inornata +clitocybe robusta +lepista irina +flammulina velutipes +leotia lubrica +sarcoscypha coccinea +caloscypha fulgens +urnula craterium +galiella rufa +jafnea semitosta +common morel +disciotis venosa +verpa bohemica +black morel +morchella semilibera +lorchel +helvella crispa +gyromitra +phallus ravenelii +calostoma lutescens +calostoma cinnabarina +calostoma ravenelii +puffball +earthstar +bird's-nest fungus +gastrocybe lateritia +bracket fungus +albatrellus ovinus +neolentinus ponderosus +polyporus tenuiculus +polyporus squamosus +beefsteak fungus +agaric +bolete +witches' butter +tremella reticulata +jew's-ear +hygrocybe acutoconica +hygrophorus inocybiformis +hygrophorus marzuolus +hygrophorus purpurascens +hygrophorus russula +hygrophorus sordidus +hygrophorus tennesseensis +cortinarius armillatus +cortinarius atkinsonianus +cortinarius corrugatus +cortinarius gentilis +cortinarius semisanguineus +cortinarius subfoetidus +cortinarius violaceus +gymnopilus spectabilis +gymnopilus ventricosus +armillaria caligata +armillaria ponderosa +armillaria zelleri +honey mushroom +wood ear +birch bolete +baseball uniform +knit cap +black belt (martial arts) +chef's uniform +cheerleading uniform +dog fashion +gas mask +diving mask +t-shirt +motorcycle personal protective equipment +hair accessory +side cap +galia +water shoe +abaya +anklet +apron +armband +arm guard +armor +baby & toddler shoe +back brace +balaclava +ballet tutu +bandage +baseball cap +bathing cap +batting glove +beanie +bearskin +beret +bib +biohazard suit +biretta +blindfold +boater +body armor +bolero +bonnet +boot +boxing glove +suspenders +bangle +bandeau +burqa +bustier +calpac +camail +cap +cast +catcher's mask +chanfron +chest protector +flat cap +coat +cocked hat +collar +comforter +coonskin cap +coverall +cowboy hat +cravat +crown +dashiki +diving suit +dog collar +double-breasted jacket +dress +dunce cap +earring +elbow pad +eyepatch +face veil +feather boa +fedora +fencing mask +fez +flipper +football helmet +footwear +french heel +fur +fur hat +garrison cap +gasmask +gauntlet +glengarry +glove +grass skirt +overcoat +handcuff +handwear +hat +headdress +helmet +hijab +horseshoe +insole +irons +jacket +kaffiyeh +kepi +kilt +kimono +knee pad +knit +knitwear +mask +military uniform +moccasin +mortarboard +muff +neck brace +necklace +neckpiece +tie +nightwear +nose ring +outerwear +outsole +oxygen mask +pendant earring +plus fours +porkpie +rainwear +roller bandage +rollerblade +roller skates +sailor cap +sailor suit +sandals +scarf +sealskin +sharkskin +shin guard +shirt +trunks +shower cap +ski boot +ski cap +skirt +skullcap +sleeper +sling +slipper +sock +solleret +sombrero +sou'wester +space helmet +spacesuit +spike heel +stacked heel +stockings +sunglasses +surplice +sweatband +tiara +tights +topknot +toque +turban +undergarment +uniform +vest +bracelet +watch cap +wedge heel +wimple +workwear +lei +wristband +bracelet wood +glove leather +ribbon hair accessory +surgical mask +rubber glove +bridal glove +fingerless glove +helmet liner +riding helmet +santa hat +diving helmet +guy fawkes mask +fustanella +crop top +leopard skin +sangmo +alice band +ripped jeans +n95 respirator +medical glove +hoop earring +pelerine +witch hat +toe ring +fur collar +dragoon helmet +clothing in tibet +full-face helmet +turtleneck sweater +solitaire ring +capirote +tracksuit bottoms +half zip sweater +áo dài +tin foil hat +shirt collar +maxiskirt +white sapphire engagement rings +domino mask +gymnastics leotard +wide leg jeans +chullo +sleeveless shirt +roller shoe +winklepicker +leather clothing +pillbox hat +scrunchie +down vest +open-face helmet +poodle skirt +corinthian helmet +funerary mask +sheepskin boots +bakya +ushanka +shtreimel +ghillie suit +cross necklace +peep-toe shoe +jean shorts +phulkari +slave bracelet +stahlhelm +captive bead ring +yoga pants +trumpet skirt +tiered skirt +bucket hat +nurse uniform +coconut bra +maid's uniform +hoodie +plaster mask +collar button +barong tagalog +baby bonnet +sunhat +Glasses +hair clip +headdress flower +hair comb +hair crown +Hairpin +Hair band +Eardrop +Ear Studs +Ear line +nose needle +silk scarf +long sweater chain +brooch +corsage +badge +waist chain +belt +shawl +short sleeve T-shirt +long sleeve T-shirt +dress shirts +Chiffon shirt +knit shirt +cardigan +polo shirt +thin cardigan +cashmere sweater +sweater +Hoodie +vest +camisole +undershirt +short jacket +denim jacket +windbreaker +Suit +leather jacket +cotton coat +down jacket +woolen coat +Chiffon dress +lace dress +half-circle skirt +midi skirt +Tutu +casual pants +Jeans +base layer pants +Harem pants +wide-leg pants +Capri pants +Shorts +short skirt +disposable diapers +Boxing Mouthguard +Weightlifting Belt +Compression Bandage +Buoyancy Vest +Support Belt +Posture Corrector +Wrist sweatband +Neck brace, Cervical collar +Shoulder support +Elbow pad +Ankle support +Silver bracelet +Jade pendant +Agate bracelet +Buddhist prayer bead +Gold bracelet +Calibrated watch +Electronic watch +Square ring +Wire ring +Name ring +Diamond ring +Jade stone ring +Ring with inlaid gems +Gold ring +Platinum ring +Pearl ring +Bracelet +Bulletproof Clothing +Bulletproof Helmet +egg as food +bun (food) +chicken as food +fried noodles +turkey meat +hot dog bun +california roll +sliced bread +chocolate brownie +sandwich cookies +udon +soba +instant noodles +tinapa +fried fish +duck meat +tomato soup +pierogi +salted duck egg +chicken nugget +lumpia +chinese sausage +prawn ball +kabayaki +quails as food +hyderabadi biriyani +shumai +gyūtan +soy egg +cellophane noodles +twice cooked pork +saag +pickled cucumber +kung pao chicken +fried aubergine +lemon chicken +scrambling eggs +separating eggs +onion rings +beet salad +lobster bisque +takoyaki +cockle food +peking duck +bibimbap +egg +yolk +dehydrated food +fruit cocktail +crab cocktail +shrimp cocktail +borsch +turtle soup +eggdrop soup +stew meat +tiramisu +pudding +creme caramel +apple tart +pie +pecan pie +chocolate eclair +chocolate cake +cupcake +sponge cake +jellyroll +upside-down cake +cookie +dog biscuit +macaroon +coconut macaroon +oreo +raisin cookie +fortune cookie +gingerbread man +donuts +french fritter +fritter +buckwheat cake +buttermilk pancake +blintz +potato pancake +waffle +squab +drumstick +chicken wings +barbecued wing +raw meat +chicken liver +goose liver +beef tongue +sparerib +fish steak +beefsteak +beef loin +t-bone steak +buffalo +jerky +rabbit +lamb roast +leg of lamb +cochon de lait +pork belly +bacon +sausage +black pudding +pepperoni +bread/bun +breadstick +cracker +english muffin +chapati +pita +raisin bread +rye bread +corn cake +cinnamon toast +bran muffin +cross bun +sweet rolls +bear claw +cinnamon roll +biscuit (united states) +saltine +water biscuit +pretzel +sandwich +ham sandwich +open-face sandwich +hamburger +hot dog +farfalle +noodles +orzo +spaghetti +vermicelli +macaroni +lasagna +wonton +dumplings +gruel +cold cereal +granola bar +bean curd +baked potato +chips +mashed potato +chip +corn chip +popcorn +stuffed mushroom +bass +stockfish +pickled herring +rollmops +oysters rockefeller +crab legs +alaska king crab +lobster tail +salmon +smoked salmon +scallop +sea scallop +caviar +smoked mackerel +rice +salad +fruit salad +egg yolk +boiled egg +easter egg +poached egg +omelette +fried egg +dough +beef wellington +croquette +dolmas +spring rolls +fried rice +frog legs +meatball +meat loaf +meat pie +mostaccioli +pizza +steak tartare +steak au poivre +stuffed tomato +sashimi +tempura +burrito +spaghetti squash +soup +grasshopper pie +chicken leg drumstick +chicken leg thigh +steamed rice +wheat noodle +dorayaki +tom yum +baba ghanoush +banh khot +negitoro +cold rice noodles +melon and jamón +ichigo daifuku +yudofu +kishimen +curry ramen +mille crêpe +strozzapreti +semla +red bean paste +pineapple bun +miso nikomi udon +taralli +peach bun +glutinous rice +ice cream cone +masala dosa +yaki udon +cake pop +pain au chocolat +kulich +cha siu bao +palatschinke +digestive biscuit +princess cake +panforte +red velvet cake +bakmi +macaroni soup +mapo doufu +oyakodon +chankonabe +unadon +chicken mcnuggets +unagi +zapiekanka +shashlik +lamian +kue lapis +rocky mountain oysters +salmorejo +jagdwurst +battenberg cake +monjayaki +kutsinta +texas toast +fudge cookie +smoked scallop +tompouce +syrniki +pico de gallo +cauliflower soup +chakli +windbeutel +parotta +melonpan +walnut pastry +kourabiedes +cavatelli +orecchiette +paccheri +tagliolini +agnolotti +gyūdon +beer cake +carrot soup +meal soup +zopf +egg tart +pork cutlet +spinach soup +picarones +spekkoek +poğaça +chāhan +sfiha +cavatappi +tandoor bread +stroopwafel +rum ball +murukku +éclair +canelé +puree soup +poffertjes +blackout cake +lotus seed bun +koeksister +chicken skin +barbari bread +kransekake +confit byaldi +crêpe bretonne +avocado toast +fraisier +mysore pak +sweet potato pie +wonton noodles +tangbao +malasada +malloreddus +tarta de santiago +italian beef +misua +champorado +pizzelle +vanillekipferl +buko pie +fruit tart +apam balik +karedok +omurice +chongqing noodles +gingerbread house +zhajiangmian +streuselkuchen +knife-cut noodle +bazlama +bacon and egg pie +blooming onion +bolo de rolo +boston cream doughnut +bánh tét +cemita +bánh xèo +char kway teow +cherry pie +chocolate sandwich +coconut doughnut +crispy pata +rotini +fagottini +smiley cookies +garden salad +dacquoise +fruit pies +guagua de pan +gulai ayam +taro dumpling +duck liver +pudding corn +jalebi +lanzhou beef noodles +caramel shortbread +kek lapis sarawak +khaman +kassler +roasted cauliflower +grilled zucchini +smoked turkey +sfogliatelle +smoked bacon +trout fillet +beef liver +braised beef +roulades meat +smoked spare ribs +mitarashi dango +krumkake +tea egg +okonomiyaki +weisswurst +pandebono +japchae +douhua +hiyashi chūka +chicken leg quarters +pizza al taglio +potsticker +rice and gravy +lekor +sate padang +snow skin mooncake +sopaipilla +teddy grahams +tomato omelette +mixian +vietnamese noodles +oyaki +hot dry noodles +beef chow fun +pork chop bun +bourbon biscuit +garganelli +raspberry tart +alphabet pasta +papadum +shrimp étouffée +kangkung belacan +Rice Sponge Cake +Peanut Butter +Spicy Sliced Aotus Root +Duck King +Potato Chips +Shallot pancake +Chinese Savory Pancake +Egg Pancake +Salt Crispy Chicken +Crispy Rice Cakes +Donkey Roll +Soda Crackers +Boneless Chicken Strips +Crispy Sausage Roll +Clay Oven Rolls +German Pudding Tart +Spicy and Numbing Mix +sushi +Brown Sugar Milk Taro Dessert +Purple sweet potato sticky rice cake +Pan-Fried Pork Buns +Water Chestnut Cake +Steamed Shrimp and Zucchini Dumplings +Soy Sauce Pancakes +Deep-Fried Milk +Deep-Fried Cabbage +Soy Sauce Eggs +Sour and Spicy Noodles +Copper Gong Bao +Grilled Milk Cubes +Wonton +Hand-grabbed pancake +Milk Crispy Roll +Yang Chun Noodles +Jianbing Guozi +Louisiana-style Chicken Wings +Chicken Wing Rice Bowl +Fruit Tea +Fried Vegetable Dumplings +Pan-fried Cumin Tofu +Xue Mei Niang +Stir-fried Rice Cake +Sour and Spicy Radish Slices +Sweet Potato Balls +Sweet Pancakes +Hot dry noodles +Spiced Tea Eggs +Sesame Sauce Noodle +Qie Gao +Malatang +Shrimp Scramble Egg +Wolf's tooth potato +Red bean glutinous rice cake +Chinese cruller +Frog on a stone board +Sweet dumplings +Dumpling soup +Hand-shredded abalone mushroom +Spicy and sour shredded potatoes +Yuxiang shredded pork +Dry-fried green beans and potatoes +Steamed egg with minced meat +Roasted fermented tofu +Chicken leg in teriyaki sauce +Minced meat with eggplant +Pickled mustard greens with vermicelli noodles +Hand-shredded pickled mustard greens +Clams with baby bok choy in oyster sauce +Stir-fried bean sprouts with noodles +Stir-fried large shrimps with oil +Sweet and sour spare ribs +Tofu soup +Yellow braised chicken +Stir-fried zucchini +Coca-Cola chicken wings +Red-braised lion's head +Garlic sprout king trumpet mushroom +Hand-shredded chicken +Dry-pot cauliflower +Dipping sauce stuffed huajia +Sweet and sour pork loin +Sauce abalone mushrooms +Boiled meat slices +Stir-Fried Pork with Green Bell Peppers +Garlic Flavored Pork Ribs +Oyster Sauce Lettuce +Sour Soup with Beef +Stir-fried meat and vermicelli +Minced Meat Japanese Tofu +Mushroom soup with Agaricus bisporus +Winter melon meatball soup +Salt and Pepper Shrimp +Tomato scrambled eggs +Lotus pond stir fry +Sour and spicy bok choy +Spicy diced chicken +Green pepper and preserved egg +Stir-fried string beans +Bok choy and tofu stew +Red braised pork +Roast pork +Tiger skin green pepper +Spicy and numbing hot pot +Tomato sparerib soup +Enoki mushroom and bacon roll +Pan-fried shrimp cake +Braised Beef in Soy Sauce +Twice-Cooked Pork +Stir-Fried Green Pepper, Ham, and Eggs +Stir-Fried Green Soybeans and Chinese Sausage +Stir-Fried Shiitake Mushrooms and Mustard Greens +Dry-Fried Potatoes +Steamed Pork Spareribs with Rice Flour +Stir-Fried Pumpkin +Cold Dish of Chicken Gizzard +Pan-Fried Sole Fish +Green Bell Pepper Pork +Stir-Fried Green Beans +Minced Meat and Bean Sprouts +Stir-Fried Napa Cabbage with Vinegar +Stir-Fried Broccoli and Mushrooms +Blanched Shrimp +Crab Meat and Egg Yolk Tofu +Stir-Fried Pork with Chili Peppers +Stir-Fried Chinese Leek and Dried Tofu +Braised Pork Spareribs with Potatoes +Stir-Fried Lotus Root Slices +Braised Eggplant +Hangzhou Beef with Green Pepper +Stir-fried Garlic Chives and Squid Tentacles +Stir-fried Asparagus and Eggs +Stir-fried Pig Ear with Chili Peppers +Stir-fried Water Bamboo Shoots +Stir-fried Beef with Arugula +Oil Noodle Roll with Pork Filling +Fried Egg +Thai-style Sour and Spicy Shrimp +Stir-fried Corn with Minced Pork +Pickled Pepper Duck Blood +Stir-fried Mushroom and Eggs +Stir-fried Enoki Mushrooms and Tofu +Stir-fried Loofah +Cold-mixed String Beans +Stir-fried Pork Liver +Stir-fried Pork with Garlic Chives +Stir-fried Clams in Hot and Spicy Sauce +Sour Pickled Cabbage Fish +Wood Ear Mushroom Pork Slices +Spicy Mapo Tofu +Stir-fried Garlic Chives and Eggs +Corn Braised Pork Ribs +Braised Green Beans and Eggplant +Yam Braised Duck +Pineapple Duck +Shrimp and Egg Stir-Fry +Saliva Chicken +Creamed Broccoli in Broth +Cumin-spiced Potato Slices +Satisfaction Cabbage Rolls +Golden Cake +Braised Tofu with Fresh Shrimp +Garlic French Bread +Braised Pork Ribs in Soy Sauce +Bao Dan Jian Jiao +Green Melon and Shrimp +Stir-fried Komatsuna +Curry Potato +Cold Salad Lettuce +Steamed Sea Bass +Cold mixed Spinach +Stir-fried Pork Strips with Mustard Greens and Snap Peas +Lachang Fried Holland Beans +Spicy Braised Pork Trotters +Braised Pork Trotters in Red Sauce +Steamed king crab +Spicy hairy crab +Braised shrimp +Garlic-based shrimp +Braised fish +Tomato fish +Grilled fish +Boiled fish +Steamed fish +Fish head tofu soup +Chrysanthemum fish +Fish stew with tofu +Smoked fish +Fish Head with Chopped Pepper +Braised Jinchang Fish +Stir-Fried Squid +Pan-fried small yellow croaker +Three cups of chicken +Stir-fry thousands of sheets +hot and sour soup +Chili Chicken +Meat Dumplings in Spicy Sauce +Sichuan Sausage +pea noodles +Dengying shredded chicken +yeerba +Small crispy meat +saba banana +calamansi +matoke +eastern prickly pear +red bell pepper +european pear +barbary fig +yellow pepper +iceburg lettuce +tayberry +fruit cup +elephant garlic +artocarpus integer +hardy kiwi +hamimelon +solanum lycopersicum +exocarpos cupressiformis +gomphocarpus physocarpus +hexastylis arifolia +pyracantha coccinea +rubus leucodermis +citrus trifoliata +quercus rotundifolia +rubus ulmifolius +edible fruit +potherb +greens +potato +mustard greens +bok choy +head cabbage +red cabbage +cauliflower +squash +butternut squash +turban squash +jerusalem artichoke +sprout +beet +beet green +chard +bell pepper +green pepper +hot pepper +chipotle +cayenne +onion +green onion +leek +crisphead lettuce +cos +celtuce +pea +carrot +carrot stick +celery +celeriac +chicory escarole +winter cress +gumbo +wild spinach +salsify +parsnip +radish +turnip +white turnip +spinach +taro +bunya bunya +peanut +banana peel +lemon peel +orange peel +apple +golden delicious +red delicious +jonathan +pippin +bramley's seedling +berry +bilberry +wintergreen +lingonberry +currant +gooseberry +black currant +dewberry +saskatoon +persimmon +acerola +ceriman +orange +tangelo +bitter orange +jaffa orange +lemon +lime (fruit) +grapefruit +citron +almond +jordan almond +acanthocereus tetragonus +plum +dried fruit +dried apricot +prune +raisin +fig +pineapple +passion fruit +granadilla +breadfruit +jackfruit +cocoa bean +cantaloup +winter melon +honeydew +persian melon +casaba +watermelon +cherry +capulin +morello +grape +fox grape +emperor +soursop +sweetsop +pond apple +papaw +papaya +kai apple +ackee +durian +feijoa +genip +kiwi fruit +sapodilla +sapote +tamarind +avocado +date +elderberry +guava +mombin +hog plum +jaboticaba +jujube +mamey +marang +medlar +mulberry +black olive +green olive +bosc +seckel +prickly pear +quandong +quince +pulasan +sorb +pumpkin seed +betel nut +beechnut +english walnut +brazil nut +butternut +souari nut +chestnut +coconut +groundnut +hickory nut +pine nut +sunflower seed +cumin +fennel +applesauce +criollo +coffee bean +corncob +juniper berry +pip +job's tears +castor bean +cottonseed +peach pit +cherimoya +ilama +bullock's heart +star anise +baneberry +actaea rubra +bayberry +tonka bean +algarroba +screw bean +nephthytis afzelii +ginseng +amaranth +beetroot +savoy cabbage +brussels sprout +kohlrabi +brassica rapa +rutabaga +samara +yam +sugarcane +sweet corn +dent corn +flint corn +rye +gourd +pumpkin +squash +summer squash +yellow squash +marrow +zucchini +cocozelle +cymling +winter squash +acorn squash +hubbard squash +buttercup squash +cushaw +prairie gourd +melon +muskmelon +cucumber +bottle gourd +loofah +angled loofah +balsam apple +balsam pear +kola nut +macadamia nut +cranberry +vaccinium macrocarpon +european cranberry +blueberry +european chestnut +chinese chestnut +japanese chestnut +acorn +mast +hazelnut +corylus avellana +beaked hazelnut +olive +walnut +juglans nigra +pecan +surinam cherry +rose apple +cattley guava +brazilian guava +punica granatum +banana +wild fig +mangosteen +kei apple +black mulberry +morus rubra +osage orange +shallot +carob +tamarindus indica +chickpea +soybean +lentil +yam bean +field pea +broad bean +cowpea +palm nut +coco plum +hawthorn +loquat +strawberry +garden strawberry +wild strawberry +wild apple +crab apple +damson plum +plumcot +apricot +sweet cherry +hagberry +prunus persica +nectarine +chokecherry +pear +boysenberry +loganberry +wine raspberry +red raspberry +wild raspberry +american raspberry +black raspberry +rubus parviflorus +rubus phoenicolasius +barbados cherry +carambola +citrus +bergamot +pomelo +citron +mandarin orange +tangerine +clementine +satsuma +sweet orange +ugli fruit +rangpur +citrange +kumquat +nagami +trifoliate orange +wild mango +akee +heartseed +longan +litchi +spanish lime +rambutan +cashew +mangifera indica +pistachio +japanese persimmon +diospyros virginiana +date plum +star apple +canistel +ribes rubrum +ribes nigrum +white currant +calabash +ipomoea batatas +capsicum +lycium barbarum +cherry tomato +plum tomato +ground cherry +chinese lantern plant +cape gooseberry +tomatillo +cassava +jumping bean +anise +seed +bean +nut +pod +pea pod +buckthorn berry +cubeb +linseed +cripps pink +stuffed artichoke +napa cabbage +chenopodium quinoa +tigerella +hanover tomato +totapuri +zwetschge +mirabelle plum +bramble fruit +goji +honeycrisp +blood orange +russet burbank potato +heirloom tomato +yukon gold potato +coeur de boeuf +dorsett golden +red granny smith +ataulfo +jonagold +dekopon +canary melon +dried cranberry +calabaza +chokeberry +arracacia xanthorrhiza +kettle corn +red kuri squash +green bell pepper +conference pear +rojas (manzana) +Parsley +Garlic moss +Chinese cabbage +Green vegetables +lettuce +Chinese chives +Leek +garlic sprouts +cress +bitter chrysanthemum +Glebionis coronaria +Amaranth +Toona sinensis +Chongcai +Tribute dish +Kale +shepherd's purse +fennel +Spinach +Brassica juncea +Brasenia schreberi +Nostoc +kelp +seaweed +Coriander +Brassica rapa +horseradish +radish +green onions +shallots +ginger +Jerusalem artichoke +lotus vegetable +Garlic +celtuce +Taro +Konjac +Potato +sweet potato +jicama +bamboo shoots +Burdock +Zizania +Chinese onion +Asparagus +Eleocharis dulcis +water chestnut +fernbrake greens +Lettuce +lily +lotus root +Ginger buds +bean sprouts +Chinese kale +chili +Green pepper +pepper +wax gourd +Momordica charantia +milk melon +cucumber +Gourd +snake melon +eggplant +kidney beans +Cowpea +Phaseolus vulgaris +sword bean +Green beans +Edamame +snake bean +corn +kidney bean +eyebrow beans +snake gourd +tremella +Nostoc commune +Umbilicaria esculenta Miyoshi +oyster mushroom +straw mushroom +tricholomataceae +shiitake mushroom +Dictyophora +Small oyster mushrooms +Enoki mushroom +Purple cabbage +Green chili peppers +green beans +broccoli +potherb mustard +Big Chinese cabbage +Small Chinese cabbage +Small greens +purple kale +Chives flowers +Asparagus schoberioides +Evergreen Dogwood +oilseed rape greens +Ginseng dish +okra +Fugui dish +leek sprouts +Sweet potato leaves +purple cabbage +water spinach +baby Chinese cabbage +moss dried leaves +mountain stinging dish +Portulaca oleracea +burr medic +Alfalfa +Fungus leaves +sea cabbage +ladle dish +Arhat dish +Water carrot +Bellflower Shreds +pagoda dish +Houttuynia cordata +Fresh mustard +Enoki dish +Pea sprouts +Toona sinensis bud +Radish sprouts +Buckwheat malt +Peanut sprouts +Soybean sprouts +Mung bean sprouts +broccoli +Nori vine +artichoke +Chaotian pepper +screw pepper +golden pumpkin +zucchini +Chayote +Four-sided beans +Corn tip +Hericium erinaceus +shaggy mane +Anchovy mushrooms +Tea tree mushroom +Pleurotus eryngii +Xiu Zhen Mushroom +Pork belly mushroom +Wakame +Brussels sprouts +Sprouts kale +broccoli rabe +kale +Purple-backed geranium +Bulb cabbage +Cantonese vegetable core +Heading Brussels Sprouts +Stuffed Mustard Greens +large leaf coriander +coriander leaf +rutabagas +root beets +lantern chili +Green Bean Rice +white radish +garlic +hybrid tea rose +nymphaea odorata +floribunda +julia child rose +evergreen rose +tagetes +hawaiian hibiscus +orange lily +beach moonflower +algerian iris +christmas orchid +purple passionflower +rose mary woods +cretan crocus +echeveria elegans +tulipa humilis +artichoke thistle +yellow canada lily +carolina rose +false bindweeds +moonlight cactus +woodland sunflower +chinese peony +lampranthus +rosa virginiana +myosotis scorpioides +alpine forget-me-not +torch lily +ranunculus asiaticus +rosa nitida +euryops pectinatus +hieracium canadense +flowering dogwood +lilium philadelphicum +spotted knapweed +sulfur cosmos +blue wood aster +pink evening primrose +crimson cattleya +tulipa linifolia +queen's lady's-slipper +lobster-claws +lilac hibiscus +clivia miniata +aquilegia formosa +sprenger's tulip +pink moccasin flower +pinkladies +geranium maculatum +carthamus lanatus +canada columbine +rosa moyesii +rosa pimpinellifolia +colorado blue columbine +camellia sasanqua +cosmos caudatus +hard-leaved pocket orchid +calendula officinalis +moon orchid +colt's foot +globe-flower +purple coneflower +fire lily +stemless gentian +mexican aster +alpine sea holly +great masterwort +barbeton daisy +pink-yellow dahlia +eriocapitella hupehensis +osteospermum +passion flower +desert-rose +mexican petunia +blackberry lily +delphinium parishii +oxalis purpurea +taraxia ovata +aquilegia chrysantha +tradescantia occidentalis +platanthera transversa +hydrangea macrophylla +calochortus gunnisonii +verbena stricta +ruellia humilis +panax trifolius +opuntia chlorotica +euphorbia albomarginata +venegasia carpesioides +solanum douglasii +heterotheca grandiflora +cyperus eragrostis +helminthotheca echioides +dendromecon rigida +sixalix atropurpurea +viola sempervirens +dactylorhiza sambucina +arctotheca prostrata +muilla maritima +micranthes californica +lupinus succulentus +diplacus puniceus +ipomoea indica +jaumea carnosa +carpobrotus chilensis +orchis purpurea +solanum umbelliferum +viola adunca +ranunculus auricomus +arundina graminifolia +digitalis grandiflora +malva arborea +galanthus nivalis +ranunculus californicus +hepatica americana +potentilla reptans +dianthus carthusianorum +primula clevelandii +ipheion uniflorum +leucojum aestivum +phacelia cicutaria +phlox drummondii +gagea lutea +oenothera cespitosa +erythrostemon gilliesii +nemophila heterophylla +layia glandulosa +echinocereus triglochidiatus +iris douglasiana +viola sororia +calochortus umbellatus +dudleya farinosa +calandrinia menziesii +agave utahensis +anemonoides ranunculoides +viola rotundifolia +ipomoea imperati +limonium sinuatum +viola lobata +plumbago zeylanica +zeltnera venusta +chaenactis fremontii +xylorhiza tortifolia +sphaeralcea ambigua +mentzelia involucrata +argemone albiflora +oxalis dillenii +lithophragma heterophyllum +viola glabella +viola primulifolia +erigeron glaucus +swamp rose +geraea canescens +argemone munita +scaevola plumieri +froelichia floridana +zephyranthes atamasco +borrichia frutescens +krameria lanceolata +cnidoscolus stimulosus +rhexia mariana +uvularia perfoliata +delphinium nudicaule +rosa gymnocarpa +trifolium willdenovii +lupinus nanus +pseudognaphalium californicum +triteleia laxa +eriogonum latifolium +anchusa arvensis +calochortus pulchellus +gilia tricolor +ranunculus hispidus +bidens cernua +paeonia californica +salvia columbariae +thalia geniculata +cerastium fontanum +achyrachaena mollis +asclepias fascicularis +uvularia sessilifolia +leptosiphon parviflorus +physocarpus capitatus +potentilla simplex +ceanothus herbaceus +youngia japonica +corydalis flavula +wyethia angustifolia +camissoniopsis cheiranthifolia +conicosia pugioniformis +hypericum tetrapetalum +mimosa nuttallii +narcissus poeticus +viola labradorica +solanum xanti +clarkia amoena +rosa californica +sairocarpus coulterianus +cistus salviifolius +crocanthemum scoparium +lactuca biennis +sisyrinchium angustifolium +anacamptis coriophora +aegonychon purpurocaeruleum +streptanthus glandulosus +petrorhagia dubia +triteleia ixioides +persicaria lapathifolia +mimosa quadrivalvis +rubus allegheniensis +crinum americanum +grindelia stricta +sisyrinchium bellum +linum bienne +eriophorum vaginatum +calochortus venustus +solanum emulans +epidendrum radicans +calochortus clavatus +prunus emarginata +securigera varia +sisyrinchium montanum +rhododendron columbianum +rhododendron macrophyllum +prosartes smithii +calochortus tolmiei +justicia americana +nama hispida +funastrum cynanchoides +houstonia caerulea +ipomoea pandurata +asclepias quadrifolia +clarkia concinna +silphium terebinthinaceum +houstonia longifolia +moraea sisyrinchium +malacothrix saxatilis +desmodium canadense +dactylorhiza maculata +dactylorhiza incarnata +berlandiera lyrata +calochortus weedii +sagittaria latifolia +rosa arkansana +hemerocallis fulva +coreopsis palmata +trifolium aureum +calochortus plummerae +fritillaria atropurpurea +heliopsis helianthoides +maurandya antirrhiniflora +psychotria poeppigiana +cochlospermum vitifolium +diodia virginiana +pancratium maritimum +spathoglottis plicata +ludwigia peploides +phyla lanceolata +impatiens parviflora +cnidoscolus texanus +oenothera elata +knautia arvensis +mesembryanthemum cordifolium +hippobroma longiflora +platanthera dilatata +lysimachia europaea +platanthera elegans +nothoscordum bivalve +ruellia strepens +helianthus maximiliani +heterotheca subaxillaris +rapistrum rugosum +ipomoea lacunosa +wyethia mollis +spiraea splendens +rosa woodsii +monardella odoratissima +lilium parvum +aconitum columbianum +potentilla gracilis +paeonia brownii +erythranthe primuloides +erythranthe moschata +polemonium californicum +sidalcea oregana +ipomopsis rubra +anemone berlandieri +asystasia gangetica +ruellia simplex +penstemon cobaea +veronica persica +viola bicolor +helenium bigelovii +campanula prenanthoides +penstemon rostriflorus +caladenia carnea +glossodia major +equisetum laevigatum +hydrophyllum capitatum +erythranthe alsinoides +decodon verticillatus +rosa acicularis +cirsium andersonii +geranium caespitosum +amelanchier utahensis +verbena macdougalii +orobanche minor +sabatia stellaris +kosteletzkya pentacarpos +elephantopus tomentosus +ipomoea sagittata +strophostyles umbellata +erigeron compositus +clematis occidentalis +claytonia lanceolata +cirsium muticum +dasiphora fruticosa +lactuca canadensis +viola nuttallii +centaurea stoebe +centaurea jacea +hemizonia congesta +bidens aristosa +croton glandulosus +agalinis tenuifolia +linum lewisii +clematis pitcheri +symphyotrichum chilense +convolvulus equitans +vernonia noveboracensis +gaillardia aristata +ribes nevadense +olsynium douglasii +symphyotrichum pilosum +symphyotrichum laeve +rudbeckia triloba +nuphar polysepala +symphyotrichum lanceolatum +leptospermum laevigatum +utricularia subulata +saxifraga bronchialis +echeveria gibbiflora +hyptis alata +calochortus leichtlinii +spiranthes magnicamporum +mentzelia hispida +tigridia pavonia +epilobium canum +doellingeria umbellata +emilia sonchifolia +malacothrix glabrata +acaena novae-zelandiae +fremontodendron californicum +pontederia crassipes +bauera rubioides +cylindropuntia echinocarpa +vigna luteola +lilium washingtonianum +ipomoea hederacea +opuntia humifusa +hibiscus laevis +lagurus ovatus +polygala nana +symphyotrichum divaricatum +datura wrightii +corethrogyne filaginifolia +ageratina havanensis +rhododendron maximum +iris domestica +silphium perfoliatum +lysimachia thyrsiflora +cirsium horridulum +calotropis gigantea +echinocereus reichenbachii +astragalus canadensis +nuphar variegata +murraya paniculata +duranta erecta +nymphoides indica +cosmos bipinnatus +tagetes lunulata +emilia fosbergii +ludwigia peruviana +sphagneticola trilobata +gentiana linearis +trillium cernuum +maianthemum trifolium +pedicularis densiflora +helianthus divaricatus +hepatica acutiloba +houstonia procumbens +silene flos-cuculi +ruellia caroliniensis +hypericum mutilum +polypremum procumbens +galeopsis bifida +encelia californica +calochortus monophyllus +calendula arvensis +narcissus tazetta +monardella villosa +castilleja affinis +muscari botryoides +ludwigia octovalvis +euphorbia misera +cylindropuntia ganderi +phacelia purshii +primula pauciflora +echinacea angustifolia +impatiens walleriana +geranium purpureum +spiraea alba +romulea rosea +platanthera psycodes +trifolium subterraneum +erythronium umbilicatum +dichelostemma capitatum +primula hendersonii +chaetopappa ericoides +leptosiphon bicolor +chrysogonum virginianum +eschscholzia caespitosa +cardamine californica +diplacus aurantiacus +aloe arborescens +pholistoma membranaceum +viola pedunculata +erodium botrys +nama demissa +eschscholzia parishii +eschscholzia minutiflora +salvia roemeriana +rosa rubiginosa +monoptilon bellioides +hymenocallis littoralis +trifolium hybridum +glandularia bipinnatifida +chylismia brevipes +diplacus bigelovii +brandegea bigelovii +hibiscus denudatus +trifolium depauperatum +oenothera deltoides +chaenactis stevioides +physalis crassifolia +cardamine concatenata +orchis anthropophora +oenothera triloba +gazania linearis +amsinckia menziesii +packera tampicana +hosackia gracilis +geranium lucidum +acmispon strigosus +castilleja exserta +penstemon spectabilis +lasthenia gracilis +perityle emoryi +trixis californica +calystegia macrostegia +fritillaria pudica +eriophyllum confertiflorum +lysimachia latifolia +limnanthes douglasii +eucrypta chrysanthemifolia +trillium nivale +veronica polita +phlox hoodii +oenothera drummondii +viola hastata +escobaria vivipara +calopogon tuberosus +solidago uliginosa +argentina anserina +linum pratense +hyacinthoides non-scripta +caulophyllum giganteum +maianthemum racemosum +peritoma serrulata +ficaria verna +echinocereus enneacanthus +phlox roemeriana +viola sagittata +engelmannia peristenia +matelea reticulata +bellardia trixago +geranium dissectum +verbascum virgatum +erythranthe guttata +nemophila parviflora +frasera caroliniensis +scilla siberica +alophia drummondii +thalictrum thalictroides +nemastylis geminiflora +cardamine flexuosa +calystegia soldanella +oenothera berlandieri +phlox divaricata +linum rigidum +oxalis incarnata +ribes lacustre +oenothera laciniata +senecio integerrimus +rhododendron calendulaceum +jeffersonia diphylla +potentilla indica +rhodotypos scandens +streptopus lanceolatus +echinocereus coccineus +lupinus polyphyllus +tetraneuris scaposa +aphyllon purpureum +trifolium arvense +pulsatilla nuttalliana +rosa nutkana +opuntia basilaris +tinantia anomala +phytolacca icosandra +phlox longifolia +phacelia bipinnatifida +thymophylla pentachaeta +caltha leptosepala +pinaropappus roseus +veronica filiformis +rhododendron groenlandicum +spiranthes vernalis +cirsium texanum +asphodelus fistulosus +herbertia lahue +evolvulus sericeus +silene laciniata +lygodesmia texana +pyrrhopappus pauciflorus +indigofera miniata +gaillardia aestivalis +calyptocarpus vialis +plectocephalus americanus +taraxacum erythrospermum +coreopsis basalis +bistorta bistortoides +krigia biflora +triodanis perfoliata +epilobium ciliatum +acmispon americanus +convolvulus althaeoides +serapias lingua +diplacus longiflorus +oxalis montana +commelina erecta +salvia microphylla +microsteris gracilis +cerastium glomeratum +hydrophyllum appendiculatum +vicia caroliniana +neptunia pubescens +symphyotrichum drummondii +calochortus argillosus +lonicera ciliosa +tagetes lucida +malvaviscus arboreus +pilosella caespitosa +helenium amarum +oenothera rosea +balsamorhiza sagittata +geranium sanguineum +leucocrinum montanum +toxicoscordion venenosum +castilleja applegatei +rudbeckia amplexicaulis +echinacea pallida +silene stellata +eustoma exaltatum +solanum laciniatum +tradescantia ohiensis +portulaca pilosa +camissoniopsis bistorta +sida abutifolia +leucospermum conocarpodendron +bituminaria bituminosa +phaenocoma prolifera +rhododendron canadense +neolloydia conoidea +valeriana sitchensis +aquilegia flavescens +viola pedatifida +parnassia glauca +dahlia coccinea +asclepias asperula +gilia capitata +myosotis arvensis +cirsium undulatum +spigelia marilandica +viola riviniana +asclepias variegata +erigeron foliosus +coreopsis lanceolata +vincetoxicum nigrum +lysimachia borealis +quincula lobata +kalmia microphylla +comarum palustre +pogonia ophioglossoides +silene antirrhina +potentilla norvegica +calochortus catalinae +clarkia rhomboidea +eriastrum eremicum +neptunia lutea +hydrangea quercifolia +pedicularis groenlandica +potentilla recta +calochortus splendens +geranium erianthum +peniocereus greggii +rhexia alifanus +coryphantha macromeris +leptosiphon nuttallii +asclepias lanceolata +oenothera glaucifolia +coreopsis major +ratibida pinnata +calochortus invenustus +hypericum kalmianum +silene regia +baileya multiradiata +senna covesii +helianthus grosseserratus +lysimachia quadriflora +antennaria rosea +linanthus pungens +liatris spicata +mimulus ringens +stellaria graminea +utricularia macrorhiza +phyteuma orbiculare +chimaphila menziesii +clematis drummondii +cicuta bulbifera +pediomelum argophyllum +centaurea calcitrapa +dalea purpurea +urena lobata +cyperus echinatus +sparganium erectum +lycoris radiata +carex magellanica +sibbaldiopsis tridentata +vancouveria hexandra +symphoricarpos rotundifolius +helenium flexuosum +wahlenbergia marginata +potentilla argentea +lysimachia maritima +campanulastrum americanum +persicaria amphibia +samolus repens +cirsium altissimum +etlingera elatior +carduus acanthoides +epilobium brachycarpum +eulobus californicus +phleum alpinum +commelina communis +centaurium erythraea +persicaria maculosa +rubus dalibarda +lupinus arcticus +clarkia purpurea +ruellia nudiflora +anoda cristata +milla biflora +zinnia peruviana +bartsia alpina +dicliptera brachiata +mollugo verticillata +scutellaria galericulata +centaurium pulchellum +veronica wormskjoldii +trillium undulatum +mimulus alatus +sabatia angularis +spiraea tomentosa +erythranthe lewisii +elephantopus carolinianus +calliandra eriophylla +elliottia pyroliflora +zephyranthes chlorosolen +lactuca floridana +viguiera dentata +phyla nodiflora +asclepias viridiflora +agalinis purpurea +arctotheca calendula +leontopodium nivale +nicandra physalodes +senecio flaccidus +eryngium leavenworthii +butomus umbellatus +symphyotrichum sericeum +solidago ptarmicoides +hedychium coronarium +gentiana cruciata +ferocactus histrix +pityopsis falcata +helianthus mollis +hydrolea ovata +liatris aspera +vitex agnus-castus +silphium integrifolium +vachellia farnesiana +cornus unalaschkensis +symphyotrichum novae-angliae +malva assurgentiflora +oxalis drummondii +agoseris aurantiaca +symphyotrichum puniceum +verbena officinalis +mimosa strigillosa +scorzoneroides autumnalis +habranthus tubispathus +helianthus debilis +opuntia fragilis +datura inoxia +cordia boissieri +ipomoea triloba +pavonia lasiopetala +oxalis latifolia +tridax procumbens +malvastrum coromandelianum +liatris cylindracea +cylindropuntia thurberi +neotinea ustulata +anemonastrum canadense +melochia pyramidata +palafoxia callosa +tradescantia pallida +echinops ritro +herissantia crispa +tecoma stans +echinocereus pentalophus +ipomoea cordatotriloba +verbena halei +wedelia hispida +nymphaea nouchali +zinnia elegans +ammannia coccinea +scadoxus puniceus +mecardonia procumbens +packera glabella +kerria japonica +commelina diffusa +argemone polyanthemos +geum rossii +allium stellatum +iris lacustris +hyobanche sanguinea +agrimonia gryposepala +echinops sphaerocephalus +oxalis articulata +pelargonium capitatum +anemone hortensis +asphodelus ramosus +leptospermum scoparium +crinum asiaticum +cistus monspeliensis +ophrys tenthredinifera +cascabela thevetia +lopezia racemosa +helianthus occidentalis +utricularia intermedia +gentiana algida +allowissadula holosericea +eremalche rotundifolia +anacamptis morio +goodenia ovata +dichrostachys cinerea +nephrophyllidium crista-galli +aconitum delphiniifolium +polemonium acutiflorum +funastrum heterophyllum +justicia pilosella +viola lanceolata +fuchsia boliviana +blackstonia perfoliata +sanguisorba canadensis +senecio pseudoarnica +protea caffra +nabalus trifoliolatus +passiflora vitifolia +bebbia juncea +hypochaeris glabra +himantoglossum robertianum +disphyma australe +evolvulus alsinoides +cephalanthus occidentalis +gaillardia pinnatifida +agapanthus praecox +gentiana sedifolia +scilla bifolia +thelesperma megapotamicum +abutilon fruticosum +anacamptis papilionacea +fumaria capreolata +chaenactis carphoclinia +rafinesquia neomexicana +atrichoseris platyphylla +rhexia virginica +ranunculus fascicularis +nuttallanthus canadensis +nemophila phacelioides +ophrys lutea +rhododendron lapponicum +thunbergia grandiflora +senecio inaequidens +viola macloskeyi +anaphalioides bellidioides +cleome rutidosperma +muscari armeniacum +rhodiola integrifolia +polygala rugelii +leopoldia comosa +impatiens noli-tangere +oxalis debilis +acmella repens +sagittaria lancifolia +ferocactus emoryi +stellaria pubera +erythronium oregonum +trillium flexipes +emmenanthe penduliflora +hedypnois rhagadioloides +senna armata +polygonatum multiflorum +langloisia setosissima +antigonon leptopus +ipomoea carnea +impatiens balfourii +limodorum abortivum +anacamptis pyramidalis +cardamine amara +cypripedium candidum +trifolium resupinatum +geranium sylvaticum +pediocactus simpsonii +helianthemum nummularium +salvia texana +urospermum dalechampii +brodiaea terrestris +centaurea montana +pallenis spinosa +verbena bonariensis +gentiana verna +phacelia parryi +loeseliastrum matthewsii +marshallia caespitosa +dyschoriste linearis +zephyranthes drummondii +thelesperma filifolium +phacelia grandiflora +beach rose +iris sibirica +dactylorhiza majalis +primula farinosa +orchis militaris +sabatia campestris +rosa bracteata +heliotropium indicum +montia parvifolia +trollius europaeus +cirsium neomexicanum +epilobium montanum +madia gracilis +oxalis stricta +neotinea tridentata +ixora coccinea +trifolium fragiferum +oenothera speciosa +campanula barbata +pseudocymopterus montanus +dalea candida +papaver cambricum +trifolium montanum +melampyrum arvense +silphium albiflorum +robinia neomexicana +campanula lasiocarpa +geum aleppicum +jasione montana +impatiens glandulifera +lilium bulbiferum +gymnadenia rhellicani +sida ciliaris +aster alpinus +hepatica nobilis +campanula patula +lantana camara +sonchus arvensis +clitoria ternatea +epipactis atrorubens +papaver dubium +pinguicula vulgaris +echinacea purpurea +macroptilium gibbosifolium +kallstroemia grandiflora +lactuca tatarica +pachystachys lutea +scabiosa columbaria +succisa pratensis +celmisia spectabilis +acaena anserinifolia +symphyotrichum ciliolatum +arnoglossum plantagineum +euphrasia nemorosa +psorothamnus schottii +phyteuma spicatum +erigeron acris +leucospora multifida +melampyrum nemorosum +gentianopsis ciliata +bistorta officinalis +lilium formosanum +bidens pilosa +melochia tomentosa +metrosideros fulgens +crepis capillaris +entelea arborescens +osteospermum moniliferum +thelymitra longifolia +wahlenbergia albomarginata +selliera radicans +lobelia anceps +passiflora tripartita +dendrobium cunninghamii +clematis alpina +geniostoma ligustrifolium +dimorphotheca fruticosa +gaultheria depressa +cistus creticus +ipomoea cairica +opuntia stricta +rhabdothamnus solandri +sisyrinchium rosulatum +symphyotrichum novi-belgii +pyrorchis nigricans +hesperocallis undulata +tithonia diversifolia +burchardia umbellata +oxalis obtusa +protea laurifolia +stephanomeria pauciflora +rhododendron tomentosum +callirhoe pedata +leucospermum cuneiforme +chironia baccifera +anemone coronaria +iris tenax +ruellia blechum +bahiopsis laciniata +richardia grandiflora +pulsatilla alpina +sairocarpus nuttallianus +bahiopsis parishii +chuquiraga jussieui +leucojum vernum +melanthera nivea +cirsium acaule +soldanella alpina +crocus vernus +encelia actoni +tetraneuris linearifolia +viola hirta +senecio vernalis +salvia verticillata +krigia virginica +triodanis biflora +geranium phaeum +pentaglottis sempervirens +betonica officinalis +consolida regalis +pinguicula alpina +turnera ulmifolia +ipomoea obscura +geranium pyrenaicum +dianthus superbus +potentilla canadensis +fritillaria camschatcensis +pulmonaria obscura +gagea minima +ophrys fusca +geranium pusillum +sanguisorba officinalis +brunia noduliflora +moraea gawleri +protea neriifolia +campanula latifolia +oenothera rubricaulis +rosa majalis +scabiosa ochroleuca +trifolium medium +anemone multifida +geranium palustre +cirsium heterophyllum +cota tinctoria +veronica spicata +potentilla erecta +hieracium umbellatum +inula salicina +picris hieracioides +diuris pardina +centaurea phrygia +ipomopsis longiflora +xylorhiza orcuttii +torenia crustacea +mohavea confertiflora +trichoptilium incisum +rosa spinosissima +keckiella antirrhinoides +erica abietina +gilia stellata +calycoseris wrightii +scilla forbesii +stellaria nemorum +tulipa sylvestris +chaenactis artemisiifolia +fragaria viridis +sidalcea sparsifolia +lysimachia clethroides +nymphaea candida +geranium sibiricum +euonymus verrucosus +inula britannica +eryngium planum +protea repens +ixeris chinensis +iris ruthenica +ranunculus cassubicus +amelanchier spicata +aconitum septentrionale +pterostylis pedunculata +diuris orientis +trollius asiaticus +commelina africana +drosera cistiflora +oftia africana +wachendorfia paniculata +pelargonium triste +serruria fasciflora +eriocephalus africanus +oxalis polyphylla +anemonoides altaica +carlina biebersteinii +cypripedium macranthos +trifolium lupinaster +ponerorchis cucullata +erythronium sibiricum +chicory +pot plant +calycanthus floridus +calycanthus occidentalis +purple anise +chinese magnolia +water lilly +nymphaea odorata +european white lily +lotus +blue lotus +nuphar lutea +sacred lotus +water chinquapin +peony +ranunculus bulbosus +lesser celandine +ranunculus flammula +sagebrush buttercup +mountain lily +western buttercup +ranunculus repens +aconite +aconitum napellus +wolfsbane +pheasant's-eye +alpine anemone +canada anemone +wood anemone +snowdrop anemone +anemone virginiana +rue-anemone +columbine +aquilegia canadensis +blue columbine +caltha palustris +pine hyacinth +clematis crispa +clematis lasiantha +golden clematis +scarlet clematis +leather flower +clematis vitalba +purple clematis +goldthread +rocket larkspur +eranthis hyemalis +hellebore +christmas rose +green hellebore +hepatica +false rue anemone +giant buttercup +nigella +black caraway +pasqueflower +american pasqueflower +western pasqueflower +false bugbane +globeflower +trifolium dubium +trifolium pratense +buffalo clover +sensitive plant +silk tree +calliandra +apocynum androsaemifolium +impala lily +common allamanda +natal plum +white dipladenia +chilean jasmine +frangipani +strophanthus +crape jasmine +trachelospermum jasminoides +periwinkle +myrtle +large periwinkle +anthurium +calla lily +pink calla +golden calla +dutchman's-pipe +corn cockle +pine-barren sandwort +rock sandwort +field chickweed +snow-in-summer +alpine mouse-ear +pink +dianthus barbatus +carnation +japanese pink +maiden pink +cheddar pink +button pink +cottage pink +fringed pink +lychnis +ragged robin +scarlet lychnis +mullein pink +wild pink +white campion +silene virginica +sand spurry +stellaria media +cowherb +carpobrotus edulis +livingstone daisy +amaranth +alternanthera philoxeroides +cockscomb +sweet sand verbena +yellow sand verbena +abronia maritima +abronia villosa +trailing four o'clock +four o'clock +california four o'clock +sweet four o'clock +night-blooming cactus +portulaca +rose moss +rock purslane +red maids +carolina spring beauty +spring beauty +virginia spring beauty +siskiyou lewisia +bitterroot +broad-leaved montia +toad lily +berteroa incana +bittercress +cardamine pratensis +crinkleroot +spring cress +purple cress +wallflower +bladderpod +virginian stock +chamois cress +jointed charlock +stanleya pinnata +poppy +prickly poppy +papaver rhoeas +argemone mexicana +celandine +tree poppy +california poppy +glaucium flavum +golden cup +blue poppy +welsh poppy +creamcups +matilija poppy +sanguinaria canadensis +papaver heterophyllum +stylophorum diphyllum +bleeding heart +squirrel corn +compass plant +pink-and-white everlasting +winged everlasting +plantain-leaved pussytoes +mountain everlasting +mayweed +yellow chamomile +corn chamomile +eriophyllum wallacei +greater burdock +african daisy +blue-eyed african daisy +marguerite daisy +silversword +arnica +arnica montana +aster +bushy aster +heath aster +stiff aster +new england aster +upland white aster +aromatic aster +bog aster +eastern silvery aster +late purple aster +panicled aster +rough-leaved aster +rush aster +balsamroot +daisy +bellis perennis +bidens bipinnata +tickseed sunflower +oxeye +calendula +thistle +carduus crispus +carduus nutans +carline thistle +carlina vulgaris +safflower +catananche +centaurea cyanus +knapweed +sweet sultan +centaurea nigra +centaurea scabiosa +centaurea solstitialis +camomile +corn marigold +crown daisy +chrysanthemum +golden aster +maryland golden aster +plume thistle +cirsium arvense +field thistle +woolly thistle +cirsium eriophorum +melancholy thistle +brook thistle +spear thistle +blessed thistle +tickseed +giant coreopsis +coreopsis tinctoria +cosmos +billy buttons +hawk's-beard +cynara cardunculus +florist's chrysanthemum +cape marigold +leopard's-bane +globe thistle +elephant's-foot +tassel flower +engelmannia +blue fleabane +erigeron annuus +orange daisy +spreading fleabane +philadelphia fleabane +robin's plantain +showy daisy +blue daisy +gaillardia +gazania +gazania rigens +gumweed +grindelia robusta +grindelia squarrosa +camphor daisy +sneezeweed +autumn sneezeweed +orange sneezeweed +rosilla +sunflower +helianthus angustifolius +showy sunflower +maximilian's sunflower +prairie sunflower +strawflower +heliopsis +heterotheca villosa +hawkweed +alpine coltsfoot +alpine gold +inula +inula helenium +krigia +dwarf dandelion +hawkbit +fall dandelion +edelweiss +oxeye daisy +shasta daisy +north island edelweiss +blazing star +dense blazing star +leopard plant +sticky aster +mojave aster +madia elegans +sweet false chamomile +mutisia +onopordum acanthium +butterweed +golden groundsel +butterbur +orange hawkweed +mouse-ear hawkweed +rattlesnake root +fleabane +coneflower +mexican hat +long-head coneflower +prairie coneflower +swan river everlasting +rudbeckia hirta +golden glow +sanvitalia procumbens +golden thistle +black salsify +sawwort +rosinweed +milk thistle +stokes' aster +tagetes patula +tanacetum parthenium +tanacetum vulgare +dandelion +dandelion green +russian dandelion +stemless hymenoxys +easter daisy +yellow salsify +salsify +tragopogon pratensis +scentless camomile +tussilago farfara +ursinia +cowpen daisy +ironweed +white-rayed mule's ears +xeranthemum +zinnia acerosa +little golden zinnia +mentzelia laevicaulis +harebell +campanula rapunculoides +tall bellflower +campanula aparinoides +campanula glomerata +campanula persicifolia +campanula rapunculus +campanula trachelium +tussock bellflower +arethusa +bog rose +brassavola +grass pink +calypso bulbosa +red helleborine +spreading pogonia +cypripedium reginae +yellow lady's slipper +california lady's slipper +marsh orchid +dactylorhiza fuchsii +prairie orchid +pansy orchid +odontoglossum +bee orchid +venus' slipper +indian crocus +pogonia +foxtail orchid +sobralia +hooded ladies' tresses +stelis +fly orchid +vanda +blue orchid +vanilla orchid +primula +primula vulgaris +primula elatior +auricula +pimpernel +bog pimpernel +water violet +gooseneck loosestrife +lysimachia nemorum +fringed loosestrife +moneywort +whorled loosestrife +leadwort +alopecurus pratensis +tall oat grass +timothy +bristlegrass +giant foxtail +yellow bristlegrass +setaria viridis +cattail +cat's-tail +typha angustifolia +bur reed +white bryony +cardinal flower +water lobelia +mallow +malva moschata +malva neglecta +abelmosk +flowering maple +rose mallow +althea +marsh mallow +poppy mallow +fringed poppy mallow +callirhoe involucrata +clustered poppy mallow +kenaf +rose mallow +cotton rose +rose of sharon +mahoe +flower-of-an-hour +seashore mallow +tree mallow +chaparral mallow +malope +false mallow +waxmallow +pavonia +sida rhombifolia +indian mallow +checkerbloom +sphaeralcea coccinea +african hemp +protea +banksia +cushion flower +honeyflower +waratah +bog rosemary +marsh andromeda +epigaea repens +sand myrtle +azalea +diapensia +native cranberry +love-in-winter +moneses uniflora +sarcodes sanguinea +rosita +seaside centaury +prairie gentian +persian violet +gentianella +gentiana calycosa +soapwort gentian +fringed gentian +gentianopsis detonsa +marsh pink +primrose jasmine +winter jasmine +arabian jasmine +kangaroo paw +purple loosestrife +epilobium hirsutum +evening primrose +oenothera biennis +missouri primrose +melastoma malabathricum +bird of paradise +hybrid tuberous begonia +clusia +pitch apple +hypericum androsaemum +creeping st john's wort +klammath weed +shrubby st john's wort +marsh st-john's wort +white-leaved rockrose +cistus ladanifer +helianthemum +rockrose +passiflora incarnata +jamaica honeysuckle +banana passion fruit +love-in-a-mist +viola arvensis +american dog violet +viola blanda +dog violet +two-eyed violet +viola odorata +bird's-foot violet +long-spurred violet +viola striata +viola reichenbachiana +pansy +florentine iris +german iris +japanese iris +dalmatian iris +iris verna +blue flag +iris virginica +spanish iris +freesia +blue-eyed grass +belladonna lily +hippeastrum +narcissus pseudonarcissus +jonquil +jacobean lily +star grass +hypoxis hirsuta +mountain lily +lilium canadense +madonna lily +lilium columbianum +lilium lancifolium +easter lily +coast lily +michigan lily +leopard lily +wood lily +agapanthus +yellow colicroot +hooker's onion +allium canadense +sand leek +allium schoenoprasum +round-headed leek +aloe +cape aloe +red-hot poker +fly poison +amber lily +asphodel +bloomeria crocea +brodiaea +elegant brodiaea +globe lily +cat's-ear +calochortus albus +yellow globe lily +rose globe lily +star tulip +desert mariposa tulip +yellow mariposa tulip +calochortus macrocarpus +sego lily +common camas +erythronium albidum +yellow adder's tongue +fawn lily +erythronium grandiflorum +erythronium montanum +fritillary +fritillaria biflora +stink bell +crown imperial +white fritillary +snake's head fritillary +adobe lily +fritillaria recurva +tulip +dwarf tulip +lady tulip +darwin tulip +gloriosa +lemon lily +harebell +star-of-bethlehem +ornithogalum umbellatum +chincherinchee +grape hyacinth +spring squill +false asphodel +white hellebore +dwarf-white trillium +trillium erectum +red trillium +convallaria majalis +yellow clintonia +queen's cup +lilyturf +solomon's-seal +uvularia grandiflora +bear grass +tuberose +mountain ebony +chamaecrista fasciculata +astragalus danicus +camwood +centrosema virginianum +axseed +french honeysuckle +lathyrus palustris +grass pea +winged pea +sickle alfalfa +black medick +alfalfa +sainfoin +shamrock pea +chaparral pea +bristly locust +bird's foot trefoil +english plantain +hoary plantain +fleawort +commelina +spiderwort +pickerelweed +water hyacinth +garden roses +dog rose +damask rose +sweetbrier +cherokee rose +musk rose +tea rose +japanese quince +dryas octopetala +fragaria chiloensis +fragaria virginiana +bennet +water avens +geum triflorum +herb bennet +cinquefoil +silverweed +salad burnet +sand blackberry +rubus odoratus +cape jasmine +diervilla lonicera +leycesteria formosa +linnaea borealis +american twinflower +sambucus ebulus +feverroot +wild teasel +scabious +pincushion flower +field scabious +geranium +cranesbill +wild geranium +meadow cranesbill +richardson's geranium +geranium robertianum +geranium viscosissimum +dove's foot geranium +rose geranium +apple geranium +storksbill +erodium cicutarium +musk clover +erodium texanum +oxalis +common wood sorrel +bermuda buttercup +oxalis corniculata +goatsfoot +violet wood sorrel +polygala alba +polygala lutea +tropaeolum majus +canarybird flower +dwarf buckeye +japanese snowbell +pitcher plant +common pitcher plant +sarracenia minor +sarracenia flava +tropical pitcher plant +hortensia +carpenteria +philadelphus +meadow saxifrage +western saxifrage +saxifraga oppositifolia +strawberry geranium +woodland star +lithophragma parviflorum +five-point bishop's cap +bog star +fringed grass of parnassus +foamflower +greek valerian +northern jacob's ladder +linanthus dianthiflorus +thunbergia alata +borago officinalis +anchusa +chinese forget-me-not +hound's-tongue +beggar's lice +gromwell +lithospermum canescens +virginia bluebell +forget-me-not +convolvulus +bindweed +convolvulus arvensis +scammony +morning glory (plant genus) +cypress vine +ipomoea alba +wild potato vine +ipomoea coccinea +man-of-the-earth +railroad vine +japanese morning glory +achimenes +lipstick plant +episcia +gloxinia +kohleria +african violet +cape primrose +yellow bells +nemophila menziesii +nemophila maculata +california bluebell +fiesta flower +yellow giant hyssop +agastache foeniculum +mexican hyssop +pyramid bugle +ajuga chamaepitys +wood mint +blephilia hirsuta +elsholtzia +hemp nettle +pennyroyal +leonotis leonurus +mentha aquatica +monarda +horsemint +bee balm +basil balm +mustang mint +jerusalem sage +self-heal +scutellaria lateriflora +butterwort +kitten-tails +false foxglove +shellflower +purple chinese houses +collinsia verna +common foxglove +yellow foxglove +gerardia +davidson's penstemon +penstemon whippleanus +field speedwell +veronica chamaedrys +water speedwell +veronica officinalis +thyme-leaved speedwell +kangaroo apple +horse nettle +bush violet +angel's trumpet +red angel's trumpet +day jessamine +night jasmine +datura stramonium +henbane +egyptian henbane +apple of peru +flowering tobacco +common tobacco +petunia +large white petunia +violet-flowered petunia +hybrid petunia +salpiglossis +painted tongue +butterfly flower +chalice vine +lantana +crown of thorns +spurge nettle +camellia +japonica +wild parsley +fool's parsley +water hemlock +spotted cowbane +eryngo +sea holly +water dropwort +sanicula arctopoides +european sanicle +silky dogwood +cornus canadensis +centranthus ruber +flowering shrub +lithophyte +anemopsis californica +bracken +asclepias purpurascens +showy milkweed +wax plant +silk vine +stapelia +stapelias asterias +salvia hispanica +epiphytic cactus +campanula isophylla +passiflora caerulea +clematis cultivar +abutilon megapotamicum +eruca vesicaria +glebionis coronaria +zucchini flower +siberian tiger +masai lion +net-winged insects +rugby player +circinae +eastern gray squirrel +european robin +sumatran rhinoceros +hawker dragonflies +eurasian red squirrel +great heron +stock dove +african leopard +captain america +gannets +coenagrion +eastern grey kangaroo +loggerhead sea turtle +douglas squirrel +seaduck +western gull +calidris +kemp's ridley sea turtle +mountain cottontail +mustelinae +brown pelican +veneroida +poison dart frog +common bottlenose dolphin +western tiger swallowtail +leuconotopicus +snowy owl +great egret +wholphin +north american river otter +desert cottontail +baltic gray seal +japanese macaque +aglais +stable fly +ring-billed gull +european herring gull +northern seahorse +list of dog crossbreeds +hoverfly +limecola balthica +polyommatus +fish crow +plebejus +rufous hummingbird +brown hare +collie, western australia +oecanthidae +red kangaroo +ochlodes +sandhill crane +laughing kookaburra +green iguana +greater rhea +abert's squirrel +red-bellied woodpecker +northern shoveler +butorides +savannah sparrow +double crested cormorant +common gallinule +blue winged teal +common sandpiper +eastern screech owl +list of dog crossbreeds +helarctos malayanus +eumenidae +maniola +eastern bluebird +handball player +thymelicus +cavalier king charles spaniel +european starling +gentoo penguin +zayante band-winged grasshopper +woodland salamander +beaglier +franklin s gull +khao manee +northern mockingbird +geography cone +gunfighter +kyi-leo +capuchin monkey +magyar agár +boykin spaniel +fiery skipper +cockapoo +great spangled fritillary +eastern tiger swallowtail +green-veined white +large skipper +melitaea +burmese python +black tailed jackrabbit +shrub frog +cuckoo wasp +schnoodle +common chameleon +least flycatcher +celastrina +figure skater +giant otter +western screech owl +korat +pyronia +bichon +american goldfinch +sporting lucas terrier +meadow brown +giant carp +high brown fritillary +jewel beetles +phyllobates +transylvanian hound +red-headed woodpecker +brush rabbit +pygmy rabbit +cyaniris semiargus +irish soft-coated wheaten terrier +little red flying fox +pileated woodpecker +white-headed capuchin +silvery blue +silver-washed fritillary +flower beetles +fox sparrow +marsh rice rat +box jellyfish +anaxyrus +florida redbelly turtle +clouded yellows +carolina anole +smooth greensnake +list of dog crossbreeds +soldier beetle +northern flicker +giant swallowtail +red eared slider +lulworth skipper +coton de tulear +great crested flycatcher +small pearl-bordered fritillary +dutch smoushond +colias hyale +eurasian magpie +mountain bluebird +goliath heron +bewick s wren +scrub jay +huntaway +australian silky terrier +white-fronted capuchin +protographium marcellus +pocket beagle +boat tailed grackle +german spitz +red-eyed tree frog +pararge +glen of imaal terrier +atlantic stingray +northern leopard frog +biewer terrier +wood whites +brown snake +hesperia (butterfly) +batgirl +adonis blue +issoria +basset artésien normand +longhaired whippet +miniature fox terrier +dark green fritillary +sotalia +satyrium (butterfly) +cupido (butterfly) +2000 in film +japanese spitz +antelope jackrabbit +muskox +new caledonian crow +black swallowtail +gulf fritillary +gatekeeper (butterfly) +american tree sparrow +satyr comma +small heath (butterfly) +lasiommata +weedy seadragon +toy bulldog +prague ratter +melanargia +stenella +giant freshwater stingray +squirrel tree frog +peppered moth +beauceron +coati +japanese rhinoceros beetle +semipalmated plover +steller s jay +hobomok skipper +thymelicus lineola +green heron +heath fritillary +shar pei +catwoman +longhorn beetle +clouded leopard +broadnose shark +aphantopus +northern gannet +seppala siberian sleddog +estonian hound +list of dog crossbreeds +grind rail +carterocephalus +silver-studded blue +snout moths +orange crowned warbler +kentucky warbler +pacific loon +black throated sparrow +nelson sharp tailed sparrow +palm warbler +least auklet +baird sparrow +rhinoceros auklet +lazuli bunting +slaty backed gull +anna hummingbird +painted bunting +california gull +green jay +european goldfinch +yellow headed blackbird +chestnut sided warbler +hooded warbler +bay breasted warbler +groove billed ani +prothonotary warbler +clay colored sparrow +pied kingfisher +american three toed woodpecker +gadwall +least tern +scott oriole +lincoln sparrow +worm eating warbler +cape glossy starling +white eyed vireo +elegant tern +ringed kingfisher +laysan albatross +whip poor will +red faced cormorant +northern fulmar +hooded oriole +blue grosbeak +acadian flycatcher +brandt cormorant +parakeet auklet +yellow throated vireo +yellow bellied flycatcher +crested auklet +grasshopper sparrow +clark nutcracker +swainson warbler +pomarine jaeger +gray crowned rosy finch +magnolia warbler +white breasted kingfisher +heermann gull +black tern +red cockaded woodpecker +canada warbler +tennessee warbler +black throated blue warbler +louisiana waterthrush +pelagic cormorant +long tailed jaeger +white necked raven +pine warbler +forsters tern +brewer sparrow +mangrove cuckoo +warbling vireo +blue winged warbler +le conte sparrow +henslow sparrow +nashville warbler +florida jay +tropical kingbird +caspian tern +glaucous winged gull +black and white warbler +mourning warbler +black capped vireo +green violetear +bronzed cowbird +great grey shrike +cerulean warbler +sage thrasher +ruby throated hummingbird +green kingfisher +shiny cowbird +prairie warbler +brewer blackbird +golden winged warbler +yellow billed cuckoo +artic tern +olive sided flycatcher +eastern towhee +sooty albatross +american pipit +northern waterthrush +german shorthaired +havanese +japanese chin +leonberger +sphynx +wheaten terrier +curly coated retriever +shiba dog +bichon frise +soft coated wheaten terrier +chinese crested dog +german short haired pointer +japanese spitzes +ameiurus nebulosus +crotaphytus bicinctores +rollandia rolland +anthus cervinus +rana dalmatina +hyla arborea +aquila heliaca +pelophylax perezi +pelophylax ridibundus +timon lepidus +glareola pratincola +salvadora hexalepis +coleonyx variegatus +operophtera bruceata +aneides flavipunctatus +anthornis melanura +sterna paradisaea +recurvirostra avosetta +oreta rosea +argiope appensa +pica hudsonia +circus hudsonius +larus delawarensis +falco mexicanus +crocodylus acutus +lanius ludovicianus +spirula spirula +charadrius ruficapillus +tadorna tadornoides +poliocephalus poliocephalus +tiliqua rugosa +macropus fuliginosus +aythya australis +gavicalis virescens +corvus coronoides +eolophus roseicapilla +anthochaera carunculata +larus pacificus +mniotilta varia +threskiornis spinicollis +ptilotula penicillata +cacatua sanguinea +ocyphaps lophotes +phaps chalcoptera +barnardius zonarius +phylidonyris novaehollandiae +setophaga townsendi +mola mola +gavia immer +charadrius nivosus +geitodoris heathi +diaulula sandiegensis +tegula brunnea +dirona albolineata +pycnopodia helianthoides +pododesmus macrochisma +dolomedes minor +phoebastria immutabilis +branta sandvicensis +neomonachus schauinslandi +spiza americana +acanthurus olivaceus +phocarctos hookeri +amphipsalta zelandica +autographa californica +eristalinus aeneus +ariolimax californicus +aythya fuligula +pyrrhocoris apterus +nerodia clarkii +crotaphytus collaris +microtus californicus +lampropeltis californiae +ammospermophilus harrisii +cenopis reticulatana +alectoris chukar +bombus vagans +thelacantha brevispina +acanthurus triostegus +sphyrapicus nuchalis +anser rossii +rallus limicola +melospiza lincolnii +ondatra zibethicus +triaenodon obesus +spizelloides arborea +branta hutchinsii +nathalis iole +satyrium calanus +macropus rufogriseus +ommatoiulus moreleti +phalacrocorax auritus +ocypus olens +zosterops japonicus +leptuca pugilator +haplotrema vancouverense +gallirallus philippensis +papilio palamedes +burnsius albescens +lethe portlandia +geopelia striata +streptopelia chinensis +ocypode ceratophthalmus +accipiter striatus +melanitta americana +turdus grayi +saltator coerulescens +zenaida asiatica +erynnis brizo +meliphaga lewinii +artamus leucorynchus +cracticus torquatus +varanus varius +psilorhinus morio +netta rufina +dendrocopos major +sympetrum sanguineum +megaceryle torquata +panthea furcilla +kukulcania hibernalis +phyllidia varicosa +momotus lessonii +calidris virgata +aythya collaris +nucella ostrina +anthopleura elegantissima +zebrasoma flavescens +sialia mexicana +naso lituratus +buteo brachyurus +actinemys marmorata +rhionaeschna multicolor +numenius americanus +phosphila turbulenta +orgyia leucostigma +habrodais grunus +polygonia satyrus +lon melane +papilio eurymedon +lycaena xanthoides +plebejus melissa +ammospiza nelsoni +rallus obsoletus +trigoniulus corallinus +sciurus aberti +bucephala clangula +dendrocoptes medius +haematopus finschi +patiriella regularis +petrolisthes elongatus +chalcophaps indica +eulamprus quoyii +lampropholis guichenoti +zizina labradus +francolinus pondicerianus +pseudacris crucifer +lithobates palustris +pharomachrus mocinno +stelgidopteryx ruficollis +sporophila morelleti +thraupis palmarum +psarocolius montezuma +eleutherodactylus planirostris +piaya cayana +melanerpes hoffmannii +patagioenas fasciata +setophaga coronata +catharus guttatus +urva auropunctata +corbicula fluminea +chrysaora fuscescens +mirounga angustirostris +oligocottus maculosus +platalea flavipes +patagioenas flavirostris +fejervarya limnocharis +hemidactylus platyurus +kaloula pulchra +vombatus ursinus +calyptorhynchus funereus +thraupis episcopus +cyanerpes cyaneus +campylorhynchus rufinucha +larus occidentalis +sula leucogaster +cerorhinca monocerata +aechmophorus occidentalis +grapsus tenuicrustatus +nycticorax caledonicus +chalcorana chalconota +ostracion cubicus +paroaria capitata +crithagra mozambica +hylarana latouchii +hyles euphorbiae +sylvilagus bachmani +phalacrocorax pelagicus +vireo gilvus +vireo griseus +phoebastria nigripes +pseudacris sierra +spizella pallida +kinosternon subrubrum +limacia cockerelli +perimyotis subflavus +calidris maritima +eurycea wilderae +zonotrichia atricapilla +streptopelia decaocto +chordeiles minor +calidris fuscicollis +gyrinophilus porphyriticus +desmognathus quadramaculatus +megalodacne heros +bombus lapidarius +calidris pusilla +calidris minutilla +calidris bairdii +vespula pensylvanica +chenonetta jubata +cracticus nigrogularis +cormobates leucophaea +neotamias minimus +pseudocheirus peregrinus +alligator mississippiensis +protaetia cuprea +sternula antillarum +cemophora coccinea +poecile rufescens +plestiodon laticeps +dispholidus typus +sitta pusilla +plegadis falcinellus +malaclemys terrapin +lophaetus occipitalis +cheilomenes lunata +lithobates sphenocephalus +setophaga discolor +junonia hierta +junonia orithya +hemigrapsus nudus +larus californicus +empidonax traillii +sympecma fusca +siphanta acuta +chiasmia clathrata +ixoreus naevius +calopteryx splendens +limosa fedoa +bombus hypnorum +andrena fulva +sphaerophoria scripta +anisota senatoria +phobetron pithecium +volucella bombylans +lithobates pipiens +heterocampa guttivitta +dasymutilla occidentalis +hemigrapsus oregonensis +grus grus +jynx torquilla +nicrophorus vespilloides +urocitellus beldingi +emydoidea blandingii +chlidonias niger +agalychnis callidryas +dendrobates auratus +larus michahellis +pachygrapsus marmoratus +selasphorus sasin +halcyon albiventris +chroicocephalus cirrocephalus +loxia leucoptera +treron calvus +vanellus spinosus +basiliscus vittatus +gopherus polyphemus +sceloporus torquatus +clytus arietis +haematopus ostralegus +western yellow wagtail +agrypnus murinus +pyrausta despicata +arenaria melanocephala +ophiothrix spiculata +momotus mexicanus +milvus milvus +aphantopus hyperantus +argynnis paphia +bombus pratorum +coronella austriaca +glaucidium gnoma +pica nuttalli +contia tenuis +apodemia virgulti +pagurus samuelis +tetraclita rubescens +anthopleura sola +okenia rosacea +hermissenda opalescens +aeronautes saxatalis +fissurella volcano +californiconus californicus +copsychus malabaricus +natrix tessellata +caracara plancus +spinus lawrencei +chroicocephalus ridibundus +somateria mollissima +apalone spinifera +kelletia kelletii +tegula eiseni +eurycea cirrigera +aplysia californica +pisaster giganteus +hypsypops rubicundus +pycnonotus barbatus +emys orbicularis +hyla versicolor +camptogramma bilineata +ochlodes sylvanus +gelastocoris oculatus +ardenna pacifica +phidippus johnsoni +platycercus eximius +dendragapus obscurus +chloris chloris +euphyes dion +rhionaeschna mutata +macromia taeniolata +cicindela sexguttata +etheostoma caeruleum +spatula querquedula +culaea inconstans +campostoma anomalum +amphiagrion saucium +lestes unguiculatus +nehalennia gracilis +pantala flavescens +leucorrhinia frigida +archilestes grandis +calycopis cecrops +haemorhous cassinii +poanes viator +wallengrenia egeremet +plethodon glutinosus +hemidactylium scutatum +ambystoma jeffersonianum +plegadis chihi +pholisora catullus +erynnis icelus +ambystoma texanum +pteropus poliocephalus +litoria peronii +cicindela punctulata +cicindela tranquebarica +bittacomorpha clavipes +megacyllene robiniae +chrysis angolensis +tenodera sinensis +desmocerus palliatus +thyris sepulchralis +typocerus velutinus +aeshna constricta +epiaeschna heros +lithobates catesbeianus +pantherophis vulpinus +plestiodon skiltonianus +tyrannus verticalis +speyeria aphrodite +sceloporus spinosus +polygonia progne +lethe eurydice +pompeius verna +lethe anthedon +eurytides marcellus +plathemis lydia +sympetrum vicinum +lestes inaequalis +lestes dryas +toxomerus occidentalis +thamnophis saurita +boyeria vinosa +libellula needhami +macrodiplax balteata +libellula semifasciata +enallagma geminatum +pantala hymenaea +arigomphus villosipes +semotilus atromaculatus +podiceps auritus +helmitheros vermivorum +rallus crepitans +ammophila procera +flatormenis proxima +oriolus larvatus +bicyrtes quadrifasciatus +dissosteira carolina +schizura ipomaeae +leptinotarsa juncta +psychomorpha epimenis +eristalis transversa +oncopeltus fasciatus +monobia quadridens +pyrausta orphisalis +heliomata cycladata +hellinsia homodactylus +cycloneda munda +haplotrema minimum +sphecius speciosus +vanellus vanellus +neotibicen tibicen +prosapia bicincta +leptotes cassius +zenaida aurita +tyrannus dominicensis +thraupis sayaca +turdus chiguanco +furnarius rufus +machetornis rixosa +danaus erippus +pteroglossus castanotis +crotophaga major +pionus menstruus +colaptes melanochloros +rufescent tiger heron +tachybaptus dominicus +papilio thoas +grey-cowled wood rail +cyclarhis gujanensis +psarocolius decumanus +ramphastos toco +porphyrio martinica +glaucidium brasilianum +siproeta epaphus +trachycephalus typhonius +guira guira +ciconia maguari +crotalus oreganus +harpaphe haydeniana +mareca penelope +saxicola rubicola +phrynosoma blainvillii +corvus caurinus +limenitis lorquini +painted lady +picoides dorsalis +batrachoseps attenuatus +neotamias dorsalis +aspidoscelis velox +tringa semipalmata +trachelipus rathkii +argopecten irradians +cosmia calami +osmia cornuta +poecile palustris +parus major +burnsius communis +caenurgina erechtea +celastrina ladon +aechmophorus clarkii +ramphocelus dimidiatus +galbula ruficauda +gonatodes albogularis +campephilus melanoleucos +saltator maximus +morpho helenor +eucometis penicillata +ichthyosaura alpestris +eleodes osculans +gambelia wislizenii +streptopelia orientalis +prosthemadera novaeseelandiae +chroicocephalus bulleri +cardisoma guanhumi +leucosticte tephrocotis +spatula cyanoptera +datana ministra +dryobates albolarvatus +actitis macularius +sterna forsteri +nomophila nearctica +hyla meridionalis +nyctibius griseus +catostomus commersonii +rana boylii +callophrys dumetorum +aegithalos caudatus +paraponera clavata +leptodeira septentrionalis +lycalopex culpaeus +ocypode quadrata +busarellus nigricollis +corytophanes cristatus +cacicus cela +elaenia flavogaster +turdus ignobilis +sporophila nigricollis +geothlypis philadelphia +pygochelidon cyanoleuca +tiaris olivaceus +stilpnia vitriolina +turdus fuscater +piranga flava +florisuga mellivora +gobiesox maeandricus +cadlina modesta +megachile sculpturalis +abracris flavolineata +ligia exotica +psephotus haematonotus +orthetrum villosovittatum +actinia tenebrosa +dichorda iridaria +geukensia demissa +utetheisa ornatrix +choephora fungorum +boloria bellona +pseudacris hypochondriaca +oniscus asellus +trachemys scripta +mopalia muscosa +ligia occidentalis +satyrium favonius +callophrys gryneus +callophrys niphon +acanthocephala declivis +pontia edusa +aglais urticae +pieris napi +chlorocebus pygerythrus +siproeta stelenes +strategus aloeus +scapanus latimanus +pygoscelis papua +mirounga leonina +anagrapha falcifera +doriopsilla fulva +erynnis juvenalis +trigonopeltastes delta +desmognathus fuscus +eurycea longicauda +didymops transversa +phanogomphus lividus +ladona deplanata +callophrys henrici +thorybes pylades +rhinella marina +microtus pennsylvanicus +charadrius semipalmatus +calidris mauri +dryobates pubescens +phainopepla nitens +melanerpes carolinus +chlorochroa sayi +aphonopelma iodius +menecles insertus +pantherophis guttatus +corvus ossifragus +cervus canadensis +lasiurus cinereus +clinocardium nuttallii +luxilus chrysocephalus +lepomis megalotis +lepomis cyanellus +megalographa biloba +lasionycteris noctivagans +tamiasciurus douglasii +chroicocephalus hartlaubii +cossypha caffra +zosterops virens +cinnyris chalybeus +streptopelia capicola +onychognathus morio +dolomedes scriptus +dasymutilla aureola +phyllidiella pustulosa +dryobates nuttallii +rhinella margaritifera +eurycea bislineata +apheloria virginiensis +oxythyrea funesta +pyrrhosoma nymphula +epirrhoe alternata +hypsiglena chlorophaea +chionactis occipitalis +phrynosoma platyrhinos +ambystoma gracile +dicamptodon tenebrosus +ambystoma macrodactylum +vermivora chrysoptera +poecile carolinensis +ardea herodias +anaxyrus punctatus +sylvilagus audubonii +paroaria coronata +spermestes cucullata +cecropis abyssinica +halcyon senegalensis +corvus albus +sylvia borin +baeolophus bicolor +cardellina pusilla +argia vivida +pyrisitia lisa +passerina caerulea +autochton cellus +achalarus lyciades +bombylius major +cicindela hirticollis +megarhyssa atrata +megarhyssa macrurus +euphonia laniirostris +thamnophis ordinoides +thamnophilus doliatus +sporophila corvina +engystomops pustulosus +rhinella horribilis +dacnis cayana +trogon caligatus +brotogeris jugularis +ramphastos sulfuratus +smilisca phaeota +anaxyrus boreas +poecile gambeli +enallagma civile +thamnophis hammondii +pseudotriton ruber +neovison vison +formica obscuripes +lon hobomok +lactophrys triqueter +stenopus hispidus +lophocampa argentata +phyciodes cocyta +haemulon flavolineatum +microspathodon chrysurus +bombus ternarius +larus dominicanus +anas georgica +rostanga pulchra +dirona picta +peltodoris nobilis +pomacea canaliculata +plagodis alcoolaria +sphyrapicus thyroideus +speyeria callippe +argyria lacteella +harmonia axyridis +dendraster excentricus +pisaster ochraceus +phyciodes pulchella +anthopleura xanthogrammica +polites mystic +plebejus samuelis +cicindela formosa +empidonax minimus +lestes australis +echinometra mathaei +melanerpes lewis +largus californicus +thamnophis atratus +rana draytonii +parkesia motacilla +callipepla californica +melanerpes formicivorus +ischnura cervula +dolomedes triton +necrophila americana +orienthella trilineata +archips argyrospila +megisto cymela +atta cephalotes +aulacorhynchus prasinus +trogon melanocephalus +rhynchonycteris naso +copestylum mexicanum +haemulon sciurus +chaetodon capistratus +ischnura verticalis +buteo plagiatus +caracara cheriway +buteogallus anthracinus +thamnophis elegans +haploa confusa +troglodytes pacificus +hermetia illucens +phanogomphus exilis +otospermophilus beecheyi +acrocephalus scirpaceus +crotalus pyrrhus +myiarchus cinerascens +triopha catalinae +aspidoscelis tigris +euphydryas chalcedona +haematopus bachmani +dermasterias imbricata +patiria miniata +alaus oculatus +strongylocentrotus purpuratus +lycaena hyllus +dorosoma cepedianum +geranoaetus melanoleucus +mimus saturninus +lycalopex griseus +chinavia hilaris +calephelis nemesis +brephidium exilis +pontia protodice +pugettia producta +perithemis intensa +polistes comanchus +adelpha eulalia +lithobates clamitans +copaeodes aurantiaca +zelus luridus +neoscona crucifera +leptoglossus oppositus +acronicta oblinita +calypte anna +pselliopus barberi +porpita porpita +oecophylla smaragdina +dacelo novaeguineae +anseranas semipalmata +macropus agilis +anas castanea +euploea core +anthus novaeseelandiae +cisseps fulvicollis +acanthurus coeruleus +sparisoma aurofrenatum +colaptes campestris +amazonetta brasiliensis +lagidium viscacia +petrochelidon pyrrhonota +columbina picui +chlorostilbon lucidus +patagioenas maculosa +turdus amaurochalinus +natrix helvetica +charidotella sexpunctata +cordulegaster diastatops +euphydryas phaeton +alypia octomaculata +uresiphita reversalis +podiceps major +hymenops perspicillatus +chloephaga picta +cygnus melancoryphus +phoenicopterus chilensis +turdus falcklandii +tonicella lineata +nucella lamellosa +calliostoma ligatum +diodora aspera +calypte costae +chondestes grammacus +xanthocephalus xanthocephalus +leucauge venusta +libellula cyanea +cicindela duodecimguttata +acanthocephala terminalis +adelpha californica +phidiana hiltoni +ischnura posita +polygonia interrogationis +scaphiopus holbrookii +chrysolina fastuosa +pomacanthus paru +ichthyaetus melanocephalus +alectoris rufa +emberiza calandra +aricia cramera +oenanthe oenanthe +spilostethus pandurus +falco naumanni +charadrius hiaticula +galerida cristata +circaetus gallicus +colias croceus +limosa limosa +phoenicopterus roseus +cyrtophora citricola +rhynchophorus ferrugineus +tarentola mauritanica +chroicocephalus genei +cervus nippon +nuctenea umbratica +anemonia viridis +psittacara erythrogenys +littorina obtusata +motacilla alba +crepidula fornicata +meloe violaceus +erithacus rubecula +linaria cannabina +lethe appalachia +tringa incana +ocypode gaudichaudii +grapsus grapsus +aeshna cyanea +aeshna mixta +arion ater +graphocephala fennahi +motacilla cinerea +pyronia tithonus +melanargia galathea +orgyia antiqua +plebejus argus +callophrys rubi +hipparchia semele +cordulegaster boltonii +anax imperator +libellula depressa +orthetrum coerulescens +lestes sponsa +coenagrion puella +enallagma cyathigerum +amphimallon solstitiale +sicalis flaveola +libellula pulchella +podarcis siculus +cosmopepla lintneriana +alopochen aegyptiaca +ardea intermedia +connochaetes taurinus +anax longipes +cynips douglasii +pachygrapsus crassipes +libellula axilena +bombus pascuorum +scolia hirta +leptophyes punctatissima +decticus albifrons +panulirus argus +acanthopleura granulata +argia emma +tiliqua scincoides +anthochaera chrysoptera +platycercus elegans +pseudomantis albofimbriata +diplacodes haematodes +corcorax melanorhamphos +iridomyrmex purpureus +tachycineta thalassina +scopula limboundata +tetracis cachexiata +pyromorpha dimidiata +lilioceris lilii +meloe proscarabaeus +colonus hesperus +pheucticus ludovicianus +oedemera nobilis +oreaster reticulatus +chalybion californicum +mecynogea lemniscata +cacyreus marshalli +eurydema ornata +eurydema oleracea +eremnophila aureonotata +thecadactylus rapicauda +heliconius erato +tamandua mexicana +burnsius orcus +sciurus variegatoides +trogon rufus +rhaebo haematiticus +marpesia chiron +tachycineta albilinea +trogon massena +deloyala guttata +camponotus castaneus +naphrys pulex +acanalonia bivittata +papilio zelicaon +boisea rubrolineata +libellula incesta +cacatua tenuirostris +amphibolurus muricatus +euschistus tristigmus +tachycines asynamorus +eurema daira +celithemis eponina +aliger gigas +syritta pipiens +glutophrissa drusilla +anania funebris +zachrysia provisoria +estrilda astrild +pycnonotus cafer +neotibicen lyricen +halichoerus grypus +laphria thoracica +falco rufigularis +chromodoris annae +rissa tridactyla +ardea cinerea +phalacrocorax aristotelis +tadorna tadorna +epitheca princeps +sympetrum semicinctum +arion rufus +sceliphron caementarium +pseudacris cadaverina +mythimna unipuncta +graphocephala coccinea +tramea onusta +melittia cucurbitae +papilio memnon +faunis eumeus +prionus californicus +incilius nebulifer +oxidus gracilis +argynnis hyperbius +suastus gremius +cotinis nitida +acalymma vittatum +phyllopalpus pulchellus +micrathena mitrata +epidalea calamita +calvia quatuordecimguttata +hetaerina americana +oophaga pumilio +ideopsis similis +orthetrum luzonicum +gracupica nigricollis +papilio protenor +mycalesis mineus +araneus trifolium +calopteryx virgo +estigmene acrea +ascalapha odorata +spodoptera ornithogalli +xylophanes tersa +enallagma exsulans +argia apicalis +argia nahuana +argia sedula +telebasis salva +arigomphus submedianus +leptophobia aripa +brechmorhoga mendax +dythemis velox +dythemis fugax +libellula croceipennis +bombus bimaculatus +pachydiplax longipennis +sympetrum corruptum +mermiria bivittata +pyrrhocorax pyrrhocorax +anthus petrosus +ardenna grisea +aimophila ruficeps +cepaea hortensis +chrysomela populi +hypanus americanus +aculus tetanothrix +lepas anatifera +melanospiza bicolor +melanchra adjuncta +plodia interpunctella +pluvialis apricaria +cordulegaster dorsalis +acronicta aceris +colibri coruscans +physocephala tibialis +plexippus paykulli +paonias excaecata +dendragapus fuliginosus +lepturobosca chrysocoma +amphiprion clarkii +hypolimnas misippus +oryctes nasicornis +garrulus glandarius +oedipoda caerulescens +lybius torquatus +trachyphonus vaillantii +sclerophrys gutturalis +myzinum quinquecinctum +agrotis ipsilon +zanclognatha pedipilalis +acrolophus arcanella +pseudeustrotia carneola +trithemis arteriosa +merops pusillus +hippodamia variegata +pyrausta acrionalis +ostrinia nubilalis +ardeola grayii +anhinga melanogaster +athene brama +calidris pugnax +pericrocotus speciosus +vanellus indicus +microcarbo niger +threskiornis melanocephalus +ciconia episcopus +turdoides striata +hypsipetes leucocephalus +urocissa erythroryncha +dendrocygna javanica +myophonus caeruleus +pernis ptilorhynchus +coracias benghalensis +gracupica contra +copsychus saularis +corvus macrorhynchos +merops orientalis +cinnyris asiaticus +mycteria leucocephala +elanus caeruleus +lanius schach +phoenicurus fuliginosus +oriolus xanthornus +crested serpent eagle +tringa stagnatilis +halcyon smyrnensis +rostratula benghalensis +funambulus pennantii +axis axis +sambar deer +euplexia benesimilis +digrammia gnophosaria +asterocampa clyton +hermeuptychia sosybius +lygaeus turcicus +graphocephala versuta +feniseca tarquinius +ardea alba +cicada orni +limenitis reducta +penelope obscura +coereba flaveola +falcipennis canadensis +tridacna maxima +luscinia svecica +coloradia pandora +enallagma ebrium +enallagma aspersum +merops bullockoides +euplectes orix +harrisina americana +perithemis tenera +neoscona oaxacensis +sphex ichneumoneus +plotosus lineatus +heterocampa biundata +spilosoma virginica +smerinthus jamaicensis +timandra amaturaria +eustixia pupula +epiblema otiosana +catocala amatrix +magusa divaricata +lineodes integra +doriprismatica atromarginata +hemileuca eglanterina +cicindela aurulenta +heterophleps triguttaria +macaria aemulataria +phragmatobia fuliginosa +parapediasia teterrellus +anthocharis midea +abaeis nicippe +cyllopsis gemma +masticophis taeniatus +anavitrinella pampinaria +nicrophorus orbicollis +paraulacizes irrorata +schinia rivulosa +ardenna creatopus +aphelocoma californica +trimerotropis verruculata +caenurgina crassiuscula +epiblema strenuana +pandemis limitata +tachyglossus aculeatus +halictus ligatus +pyrrhocorax graculus +schinia florida +dichromorpha viridis +sphinx chersis +micrathena sagittata +eusarca confusaria +lepus townsendii +lomographa vestaliata +calledapteryx dryopterata +acronicta fallax +amphipyra pyramidoides +besma quercivoraria +crambidia pallida +panopoda carneicosta +baileya ophthalmica +spragueia leo +homophoberia apicosa +lithobates berlandieri +oncorhynchus mykiss +nymphalis l-album +hapithus agitator +phrynosoma hernandesi +selasphorus rufus +callopistria floridensis +striacosta albicosta +hypena deceptalis +acrolophus popeanella +colius striatus +vireo plumbeus +catocala piatrix +mythimna oxygala +eucosma parmatana +hypena madefactalis +orthodes majuscula +ogdoconta cinereola +coelostathma discopunctana +jikradia olitoria +baeolophus wollweberi +porphyrio melanotus +oncorhynchus clarkii +taeniura lymma +lepidodactylus lugubris +delphinia picta +bombus rufocinctus +arothron hispidus +celithemis martha +neotamias merriami +theba pisana +ocreatus underwoodii +hemileuca maia +probole amicaria +elophila icciusalis +guinusia chabrus +ostracion meleagris +duttaphrynus melanostictus +speyeria idalia +satyrium liparops +hemaris thysbe +pluvialis fulva +papilio xuthus +misumenoides formosipes +atteva aurea +parus minor +zosterops simplex +chrysochus auratus +chauliognathus pensylvanicus +acrocephalus dumetorum +lepomis auritus +imantodes cenchoa +cucullia asteroides +aeshna tuberculifera +conocephalus brevipennis +microcrambus elegans +basiliscus basiliscus +toxomerus politus +trichordestra legitima +chilades lajus +charaxes bernardus +zizeeria karsandra +ypthima baldus +laothoe populi +aeshna juncea +cupido comyntas +dolomedes tenebrosus +agama atra +elaphria grata +stilpnia cyanicollis +lascoria ambigualis +gehyra mutilata +corvus brachyrhynchos +ambystoma mavortium +triturus cristatus +chilomycterus schoepfii +clepsis peritana +colladonus clitellarius +ranoidea moorei +phyllopteryx taeniolatus +hentzia palmarum +macaria bisignata +cyrestis thyodamas +christinus marmoratus +elophila gyralis +metcalfa pruinosa +promachus rufipes +agriphila vulgivagellus +camponotus novaeboracensis +chrysopa oculata +scoparia biplagialis +ponometia candefacta +ancyloxypha numitor +pyrausta tyralis +setophaga nigrescens +passerina amoena +melanoplus differentialis +aquila audax +anhinga rufa +cinnyris afer +ceryle rudis +trichonephila fenestrata +buphagus erythrorynchus +dicrurus adsimilis +bostrychia hagedash +oecanthus niveus +stagmomantis carolina +rivula propinqualis +phlogophora periculosa +neotamias amoenus +polygonia faunus +crotalus molossus +aspidoscelis sonorae +orthetrum sabina +polites peckius +ceratomia undulosa +sceloporus jarrovii +nedra ramosula +calidris subruficollis +sceloporus poinsettii +rabidosa rabida +myiozetetes cayanensis +lycaena gorgon +catocala ilia +attulus fasciger +gopherus morafkai +apantesis phalerata +aphelocoma coerulescens +dryocopus pileatus +lampides boeticus +neptis hylas +junonia lemonias +catocala vidua +phyllidia ocellata +morus serrator +malurus splendens +sericornis frontalis +sympetrum illotum +satyrium titus +sympetrum striolatum +pelegrina galathea +cicindela longilabris +libellula vibrans +megascops kennicottii +tringa glareola +lanius collaris +herpyllus ecclesiasticus +evergestis pallidata +herpetotheres cachinnans +ischnura senegalensis +bagrada hilaris +feltia jaculifera +scinax ruber +argia moesta +ischnura kellicotti +neoclytus acuminatus +larus fuscus +euptoieta claudia +argiope lobata +atta texana +holocnemus pluchei +epicauta pennsylvanica +pelecanus philippensis +argia translata +phalacrocorax penicillatus +chroicocephalus philadelphia +chaetura vauxi +sauromalus ater +sceloporus orcutti +pseudemys peninsularis +archilestes californicus +podarcis muralis +melozone crissalis +holcosus festivus +rhinocheilus lecontei +haematopus longirostris +dicathais orbita +haematopus fuliginosus +catherpes mexicanus +polypedates leucomystax +aeshna verticalis +eulogia ochrifrontella +hierodula patellifera +scudderia mexicana +diprion similis +pantherophis emoryi +baeolophus ridgwayi +lycomorpha pholus +tramea lacerata +leptodactylus savagei +chrysochus cobaltinus +euodice malabarica +centronyx henslowii +orthetrum pruinosum +trithemis festiva +metridium senile +graphocephala atropunctata +sceloporus uniformis +macaca fascicularis +amaurornis phoenicurus +cinnyris jugularis +neoscona domiciliorum +empidonax difficilis +tolype velleda +microcentrum retinerve +larinioides cornutus +cucullia convexipennis +parrhasius m-album +limenitis weidemeyerii +eleodes obscura +polistes apachus +bothriechis schlegelii +labidomera clivicollis +penelope purpurascens +andricus kingi +lonchura striata +gopherus berlandieri +acronicta impleta +sceloporus olivaceus +zenaida macroura +holbrookia propinqua +hypercompe scribonia +callospermophilus saturatus +thamnophis cyrtopsis +chamaeleo dilepis +stigmochelys pardalis +hyperolius marmoratus +acanthocercus atricollis +glyptemys insculpta +oxybelis aeneus +linepithema humile +cereopsis novaehollandiae +epiphyas postvittana +glycaspis brimblecombei +anser indicus +papilio garamas +leiothlypis ruficapilla +toxostoma curvirostre +hemiargus ceraunus +bombus huntii +bombus californicus +zelus renardii +thamnophis radix +lacinipolia renigera +latrodectus hesperus +varanus salvator +ameiva ameiva +leptophis ahaetulla +hamadryas feronia +ptiliogonys cinereus +urobatis halleri +chelinidea vittiger +sphaenothecus bilineatus +amazilia beryllina +empidonax occidentalis +aphelocoma woodhouseii +egretta rufescens +mantis religiosa +glena quinquelinearia +hylocharis leucotis +setophaga occidentalis +catasticta nimbice +sciurus aureogaster +geothlypis tolmiei +falco cenchroides +gryllodes sigillatus +crotalus ornatus +agnorisma badinodis +thryomanes bewickii +leptocoma zeylonica +crotaphopeltis hotamboeia +zizina otis +anisomorpha buprestoides +pentatoma rufipes +sunira bicolorago +neotibicen superbus +ixias pyrene +pipilo maculatus +argiope argentata +pacifastacus leniusculus +setophaga striata +vanellus miles +phyciodes mylitta +asterocampa leilia +orchelimum nigripes +idia aemula +orthemis ferruginea +hippotion scrofa +menura novaehollandiae +acanthiza pusilla +pica serica +anaxyrus cognatus +hagenius brevistylus +sceloporus tristichus +myadestes townsendi +anaxyrus speciosus +papilio paris +papilio polytes +pycnonotus sinensis +pycnonotus jocosus +taeniopoda eques +elymnias hypermnestra +graphium sarpedon +pseudozizeeria maha +phaedyma columella +phrynosoma mcallii +anaxyrus woodhousii +myliobatis californica +lithobates blairi +spea multiplicata +eleutherodactylus cystignathoides +ambystoma opacum +desmognathus conanti +plethodon albagula +graptemys pseudogeographica +kinosternon flavescens +sternotherus carinatus +nerodia taxispilota +ischnura denticollis +urbanus dorantes +laniarius ferrugineus +ptyonoprogne rupestris +buteo regalis +dicromantispa sayi +aspidoscelis exsanguis +gerrhonotus infernalis +holbrookia maculata +ophisaurus attenuatus +phrynosoma modestum +urocyon littoralis +harmonia conformis +sypharochiton pelliserpentis +petroica boodang +leptograpsus variegatus +wallengrenia otho +setophaga citrina +sceloporus grammicus +sceloporus cyanogenys +agkistrodon laticinctus +lepisosteus oculatus +farancia abacura +myiarchus crinitus +heterodon nasicus +hypsiglena jani +lampropeltis gentilis +regina grahamii +sistrurus tergeminus +tantilla gracilis +thamnophis marcianus +virginia valeriae +buteo albonotatus +icterus graduacauda +trogon elegans +junco phaeonotus +setophaga graciae +empidonax fulvifrons +lampornis clemenciae +calothorax lucifer +gallinago delicata +menemerus semilimbatus +zelus longipes +toxostoma rufum +apis florea +apis dorsata +tachybaptus novaehollandiae +acrocephalus australis +xylocopa tabaniformis +chrysolina bankii +cigaritis lohita +vespula alascensis +salvadora grahamiae +chondrohierax uncinatus +ictinia mississippiensis +thalasseus elegans +larus glaucoides +urocitellus richardsonii +libellula saturata +libellula forensis +spoladea recurvalis +sylvilagus nuttallii +sphyrapicus ruber +acanthosoma haemorrhoidale +sparisoma viride +graphium agamemnon +paratrechina longicornis +alisterus scapularis +regulus satrapa +geranospiza caerulescens +pantherophis alleghaniensis +dryobates borealis +melanitta deglandi +asio flammeus +gavia pacifica +ceriagrion coromandelianum +phalaropus lobatus +brachyramphus marmoratus +aeshna interrupta +dactylotum bicolor +aphonopelma chalcodes +oncometopia orbona +peridroma saucia +megapallifera mutabilis +neurothemis fulvia +hymenia perspectalis +aulostomus chinensis +ara macao +prinia inornata +motacilla tschutschensis +limosa lapponica +empidonax alnorum +carcinus maenas +vidua macroura +furnarius leucopus +zizeeria knysna +lycaena helloides +polistes dorsalis +fluvicola nengeta +melanerpes pucherani +nerodia rhombifer +thalasseus bergii +sula sula +prosotas dubiosa +nephila pilipes +zalophus wollebaeki +crotophaga ani +sula nebouxii +pteroglossus torquatus +thalurania colombica +chlosyne harrisii +phalaropus tricolor +megascops asio +leiothlypis peregrina +empidonax flaviventris +calidris himantopus +urothemis signata +marmota marmota +larus glaucescens +vireo flavifrons +myiodynastes luteiventris +leiothlypis luciae +aphelocoma wollweberi +myioborus pictus +melozone fusca +callipepla squamata +desmognathus ochrophaeus +psaltriparus minimus +dysschema howardi +trichodes ornatus +selasphorus platycercus +trigona fulviventris +panorpa nuptialis +dythemis nigrescens +sula dactylatra +sceloporus consobrinus +scincella lateralis +belenois aurota +chlorophanes spiza +dryocopus lineatus +thalassarche melanophris +spheniscus magellanicus +abudefduf troschelii +progomphus obscurus +phyllogomphoides albrighti +leucophaeus pipixcan +sitta pygmaea +passerina versicolor +acanthis flammea +archilochus alexandri +myiarchus tuberculifer +piranga bidentata +bombus sonorus +eurema mexicana +larus hyperboreus +baeolophus inornatus +abudefduf sexfasciatus +bronchocela jubata +monadenia infumata +coccothraustes vespertinus +hyla squirella +erythemis plebeja +lestes vigilax +aphylla angustifolia +erpetogomphus designatus +enallagma praevarum +phoebis sennae +hemidactylus frenatus +hydrophasianus chirurgus +lestes alacer +lerema accius +peucaea cassinii +leptotes marina +icterus pustulatus +agapornis roseicollis +pseudoleon superbus +gomphaeschna furcillata +tachopteryx thoreyi +ictidomys tridecemlineatus +polistes major +xerospermophilus tereticaudus +calamospiza melanocorys +moduza procris +junonia atlites +orsotriaena medus +microcentrum rhombifolium +enallagma basidens +incilius alvarius +megisto rubricata +orthemis discolor +columbina inca +eantis tamenund +callosamia promethea +tetracha carolina +myathropa florea +charadrius wilsonia +thorybes bathyllus +libellula auripennis +plestiodon inexpectatus +aratus pisonii +leiocephalus carinatus +baeolophus atricristatus +erythemis vesiculosa +halichoeres bivittatus +dromogomphus spoliatus +sialia sialis +sialia currucoides +enallagma hageni +platalea regia +himantopus leucocephalus +euglandina rosea +protonotaria citrea +dendronotus venustus +crassadoma gigantea +pseudacris maculata +stylurus plagiatus +hetaerina titia +recurvirostra americana +anartia amathea +amazilia violiceps +eugenes fulgens +anas diazi +egretta novaehollandiae +hirundo neoxena +ctenosaura similis +rhipidura leucophrys +plestiodon obsoletus +rasahus hamatus +carpodacus sibiricus +iambrix salsala +hirundo smithii +microcarbo africanus +ardeola ralloides +anser caerulescens +eurycea lucifuga +desmognathus monticola +glossopsitta concinna +lumbricus terrestris +ascia monuste +argia fumipennis +sternotherus odoratus +parnassius smintheus +lestes eurinus +leucorrhinia proxima +acisoma panorpoides +aeshna canadensis +somatochlora tenebrosa +gomphurus vastus +libellula flavida +agriocnemis pygmaea +tholymis tillarga +neurothemis tullia +hydrocoloeus minutus +varanus bengalensis +larus crassirostris +larus livens +melanoplus femurrubrum +phaetusa simplex +psittacara holochlorus +cyanoramphus novaezelandiae +ciccaba virgata +rana aurora +colibri cyanotus +anthracothorax prevostii +amazilia yucatanensis +heliodoxa jacula +selasphorus calliope +tockus leucomelas +mitrephanes phaeocercus +empidonax virescens +empidonax wrightii +myiarchus tyrannulus +tyrannus couchii +tyrannus crassirostris +tityra semifasciata +todirostrum cinereum +agelaius tricolor +tachycineta albiventer +petrochelidon fulva +toxostoma longirostre +lamprotornis nitens +artemisiospiza belli +falco femoralis +fundulus notatus +setophaga pitiayumi +liometopum occidentale +setophaga chrysoparia +gavia stellata +myioborus miniatus +chlorospingus flavopectus +apantesis parthenice +plestiodon fasciatus +aegolius acadicus +artemisiospiza nevadensis +leucorrhinia glacialis +leucorrhinia intacta +stylogomphus albistylus +cotinis mutabilis +ammospiza leconteii +tramea carolina +phyciodes phaon +lampropeltis holbrooki +pelecanus thagus +emberiza cia +circus approximans +plethodon serratus +spea hammondii +rhinella diptycha +mesembrinibis cayennensis +platalea alba +amazona autumnalis +sphecotheres vieilloti +plectropterus gambensis +anas superciliosa +lophonetta specularioides +anas bahamensis +cycnia collaris +erythrodiplax berenice +halysidota tessellaris +melierax canorus +buteogallus meridionalis +lagopus lagopus +hierophis viridiflavus +polistes fuscatus +spatula clypeata +bradypus variegatus +kori bustard +burhinus bistriatus +burhinus vermiculatus +charadrius collaris +austracantha minax +charadrius bicinctus +aeshna eremita +coenobita compressus +xenus cinereus +acanthodoris rhodoceras +aeolidia loui +calidris acuminata +ploceus cucullatus +nerodia fasciata +vermivora cyanoptera +platalea ajaja +brachymesia gravida +malacorhynchus membranaceus +anhinga novaehollandiae +lichmera indistincta +icterus wagleri +ammodramus savannarum +petroica macrocephala +phalacrocorax punctatus +evechinus chloroticus +cicindela repanda +geranoaetus albicaudatus +nyctidromus albicollis +leptotila verreauxi +arremonops rufivirgatus +adelpha fessonia +contopus pertinax +calonectris diomedea +bembix americana +cyanocitta stelleri +latrodectus hasselti +boissonneaua flavescens +fulica armillata +pheucticus chrysopeplus +acanthurus nigrofuscus +parkesia noveboracensis +mocis latipes +melozone aberti +cyanistes caeruleus +calocitta colliei +trogon citreolus +mareca americana +cassiculus melanicterus +littorina littorea +calocitta formosa +eupsittula canicularis +jacana spinosa +amazilia rutila +peucaea carpalis +melanerpes chrysogenys +actophilornis africanus +terpsiphone viridis +campephilus guatemalensis +chroicocephalus serranus +anolis nebulosus +phalacrocorax brasilianus +circaetus cinereus +sarkidiornis melanotos +urbanus proteus +orgyia definita +euphonia affinis +sporophila torqueola +turdus rufopalliatus +calidris alpina +corythornis cristatus +chordeiles acutipennis +lepisosteus platyrhincus +pachyramphus aglaiae +ortalis cinereiceps +ploceus velatus +burhinus capensis +cyanocompsa parellina +colobura dirce +patagioenas cayennensis +pieris canidia +abisara echerius +icterus bullockii +porphyrio poliocephalus +habia fuscicauda +eupsittula pertinax +osmoderma scabra +garrulax perspicillatus +uraeginthus angolensis +vanellus senegallus +prinia subflava +corvus albicollis +ammospermophilus leucurus +callipepla gambelii +campylorhynchus brunneicapillus +pipilo chlorurus +clogmia albipunctata +megarynchus pitangua +schistocerca lineata +barisia imbricata +rhipidura albiscapa +setophaga americana +setophaga palmarum +progne chalybea +tyrannus melancholicus +helocassis clavata +polioptila melanura +sayornis nigricans +trichius fasciatus +callopistria mollissima +ischnura ramburii +leucauge argyrobapta +manorina melanocephala +agrotis infusa +setophaga castanea +ceriagrion cerinorubellum +incilius valliceps +anthus rubescens +sarcoramphus papa +setophaga caerulescens +gavia arctica +orthosoma brunneum +dryobates villosus +poecile atricapillus +caripeta piniata +chaetodon auriga +hypena abalienalis +nerice bidentata +monochamus scutellatus +chalcoela iphitalis +zonotrichia querula +phoeniconaias minor +pluvialis squatarola +terpsiphone paradisi +vireo bellii +haliastur indus +spizella atrogularis +camptostoma imberbe +dione moneta +dryobates scalaris +basileuterus rufifrons +nisaetus cirrhatus +milvago chimachima +colaptes punctigula +merops ornatus +valanga irregularis +lepas anserifera +ranoidea caerulea +peucedramus taeniatus +dicrurus bracteatus +geopelia humeralis +platycercus adscitus +wallabia bicolor +macropus robustus +coracina novaehollandiae +pitangus sulphuratus +rostrhamus sociabilis +tyrannus savana +entomyzon cyanotis +philemon corniculatus +oriolus sagittatus +geopelia placida +scudderia septentrionalis +progne tapera +vireo cassinii +odontotaenius disjunctus +centruroides vittatus +pachycephala pectoralis +todiramphus macleayii +neochmia temporalis +parabuteo unicinctus +phrynosoma orbiculare +sceloporus siniferus +peucetia viridans +oriturus superciliosus +icterus nigrogularis +agalychnis dacnicolor +crotophaga sulcirostris +catharus ustulatus +microtia elva +ramphastos ambiguus +tersina viridis +anthracothorax nigricollis +certhiaxis cinnamomeus +jacana jacana +anser brachyrhynchus +danaus eresimus +manduca rustica +zenaida auriculata +columbina passerina +apantesis proxima +gasteracantha cancriformis +tirumala limniace +colonus sylvanus +pisaurina mira +corvus splendens +anastomus oscitans +acanthocephala femorata +papilio rutulus +melitaea phoebe +threskiornis aethiopicus +agapostemon splendens +catharus minimus +acanthis hornemanni +calidris ruficollis +calidris temminckii +haploa lecontei +phidippus audax +gallinula tenebrosa +threskiornis molucca +rhipidura fuliginosa +pluvialis dominica +sinistrofulgur sinistrum +seiurus aurocapilla +ardea cocoi +prionus laticollis +fistularia commersonii +sympetrum costiferum +argia bipunctulata +astraptes fulgerator +nymphalis californica +aglais milberti +prochoerodes lineola +diachrysia balluca +drepana arcuata +nemoria bistriaria +phaeoura quernaria +ortalis wagleri +gelochelidon nilotica +clytus ruricola +zanclus cornutus +haemorhous purpureus +cophosaurus texanus +coleomegilla maculata +xerociris wilsonii +terrapene carolina +trachemys venusta +anser fabalis +pantherophis obsoletus +thalassoma lunare +crocothemis servilia +sympetrum ambiguum +ancistrocerus antilope +urosaurus nigricaudus +epitheca petechialis +libellula quadrimaculata +gomphurus externus +cryptochiton stelleri +micrurus tener +sayornis saya +mareca strepera +dysdera crocata +thalassoma hardwicke +ischnura perparva +hydroprogne caspia +scolopendra polymorpha +cordulia shurtleffii +cordulegaster obliqua +nyctemera adversata +micronia aculeata +erebus ephesperis +asota heliconia +badumna longinqua +parnassius clodius +tringa solitaria +chlosyne ehrenbergii +patagioenas leucocephala +acris blanchardi +scoliopteryx libatrix +cicadella viridis +speyeria atlantis +protographium epidaus +papilio rogeri +battus polydamas +erynnis tristis +kricogonia lyside +triopha maculata +amblyscirtes celia +myscelia ethusa +texola elada +digrammia atrofasciata +araniella displicata +achyra rantalis +oriolus chinensis +dicrurus paradiseus +eremophila alpestris +heliocypha perforata +orthetrum triangulare +diplacodes trivialis +tadorna ferruginea +lycaena phlaeas +aquarius remigis +gonepteryx rhamni +icaricia saepiolus +catharus fuscescens +tarsiger cyanurus +otospermophilus variegatus +pieris marginalis +lycaena mariposa +erinnyis obscura +panoquina ocola +dryobates minor +pseudohermonassa bicarnea +feralia comstocki +papaipema pterisii +adalia decempunctata +anthanassa tulcis +leiothlypis celata +setophaga fusca +agrius convolvuli +boloria chariclea +biblis hyperia +caria ino +traminda aventiaria +asota caricae +creatonotos transiens +idaea aversata +zygaena filipendulae +lyssa zampa +syntomoides imaon +smerinthus ocellata +papilio anchisiades +phlogophora meticulosa +copaeodes minima +endotricha flammealis +xanthorhoe ferrugata +cabera pusaria +anthanassa texana +agrotis exclamationis +araneus diadematus +phyciodes graphica +pholcus phalangioides +polites vibex +chiomara georgina +chioides albofasciatus +amphispiza bilineata +noctua comes +autographa gamma +olla v-nigrum +biston betularia +melanerpes uropygialis +psyllobora vigintimaculata +epirrita autumnata +gallirallus australis +ourapteryx sambucaria +carcina quercana +hypsopygia costalis +junonia coenia +passer italiae +clostera apicalis +sphinx kalmiae +hippotragus equinus +aidemona azteca +pyrausta aurata +coccinella californica +leptysma marginicollis +phanaeus vindex +sistrurus miliarius +calycopis isobeon +hemiscolopendra marginata +uroctonus mordax +laphria macquarti +dendrobias mandibularis +mallophora leschenaulti +brachygastra mellifica +microstylum morosum +cicindela ocellata +timandra comae +triorla interrupta +milesia virginiensis +asterocampa celtis +endrosis sarcitrella +plectrodera scalator +mangora placida +sympetrum danae +melaenornis silens +papilio demodocus +epitheca cynosura +vanellus coronatus +celastrina lucia +anartia fatima +coccinella trifasciata +motacilla capensis +dictyophorus spumans +numenius phaeopus +ensatina eschscholtzii +lerodea eufala +falco rupicolus +anthobaphes violacea +damaliscus pygargus +urocitellus columbianus +malacosoma californica +amietia fuscigula +ypsolopha dentella +lomaspilis marginata +palpita quadristigmalis +phoenicopterus ruber +fregata magnificens +pekania pennanti +pristimantis achatinus +orthetrum caledonicum +scarus ghobban +rena dulcis +euphagus cyanocephalus +batrachoseps major +crotalus ruber +buteo platypterus +synchlora frondaria +lestes disjunctus +aeshna palmata +palpita magniferalis +clemensia albata +spilosoma congrua +lobocleta ossularia +erythrodiplax umbrata +anoplolepis gracilipes +theretra nessus +spinus spinus +erynnis propertius +chrysomya megacephala +trachymela sloanei +basiaeschna janata +macromia illinoiensis +enallagma carunculatum +enallagma divagans +sympetrum internum +limacus flavus +libellula comanche +cancer productus +semibalanus cariosus +megaceryle alcyon +xylocopa sonorina +dinocardium robustum +dorocordulia libera +enallagma traviatum +lestes rectangularis +lestes forcipatus +sympetrum obtrusum +chromagrion conditum +melanis pixe +jadera haematoloma +epitheca canis +eubaphe mendica +idia americalis +pogona barbata +bucephala albeola +ceratostoma foliatum +olivella biplicata +epiactis prolifera +neophasia menapia +hyalophora euryalus +phanogomphus spicatus +pyrausta signatalis +nannothemis bella +leucorrhinia hudsonica +argia immunda +arigomphus furcifer +erythrodiplax minuscula +trichonephila edulis +hemidactylus turcicus +solenopsis invicta +calopteryx aequabilis +epitheca spinigera +cordulegaster maculata +acanthis cabaret +scantius aegyptius +ariolimax buttoni +phigalia titea +lygaeus kalmii +mopalia lignosa +oxycarenus lavaterae +enallagma doubledayi +enallagma durum +dromogomphus spinosus +armadillidium vulgare +dendrocopos leucotos +alouatta palliata +camponotus sericeiventris +sciurus granatensis +platalea minor +menemerus bivittatus +aethopyga siparaja +pycnonotus aurigaster +lithobates sylvaticus +ensis leei +morelia spilota +euphagus carolinus +oreoscoptes montanus +herichthys cyanoguttatus +charadrius mongolus +ramphocelus passerinii +great curassow +erynnis funeralis +atlides halesus +nasua nasua +chlosyne lacinia +psittacara leucophthalmus +aratinga nenday +deroceras reticulatum +batrachoseps nigriventris +plutella xylostella +veromessor pergandei +eupeodes volucris +anolis cristatellus +argia alberta +charadra dispulsa +calcarius lapponicus +dolba hyloeus +boloria epithore +dryocopus martius +polistes instabilis +sceloporus variabilis +aspidoscelis sexlineatus +delias pasithoe +maruca vitrata +chrysodeixis eriosoma +leptoglossus clypealis +dysstroma citrata +papaipema inquaesita +nepytia canosaria +ichthyaetus ichthyaetus +charadrius leschenaultii +gallinula galeata +doris montereyensis +trithemis kirbyi +peridea basitriens +celastrina echo +sceloporus magister +passerculus sandwichensis +leptuca crenulata +satyrium saepium +boisea trivittata +icterus parisorum +zonotrichia capensis +platycryptus undatus +toxostoma redivivum +dermestes lardarius +pseudacris regilla +polites sabuleti +calephelis virginiensis +achlyodes pallida +tigrisoma mexicanum +eurema hecabe +spodoptera litura +endotricha mesenterialis +anthopleura artemisia +anas fulvigula +chilocorus stigma +ameiurus natalis +thomisus onustus +scathophaga stercoraria +metacarcinus magister +nehalennia irene +oxyopes scalaris +smilisca baudinii +faxonius virilis +lestes congener +otala lactea +cryptolaemus montrouzieri +molothrus aeneus +haemorhous mexicanus +coenagrion resolutum +enallagma vesperum +cycloneda polita +vespula germanica +exochomus quadripustulatus +kinosternon baurii +hyla femoralis +osteopilus septentrionalis +chlorochlamys chloroleucaria +papio anubis +corvus mellori +phalacrocorax sulcirostris +xanthagrion erythroneurum +spatula discors +junonia villida +aquila nipalensis +helicoverpa armigera +nyctemera baulus +vireo huttoni +belenois java +euploea tulliolus +morus bassanus +anicla infecta +chlosyne acastus +isotenes miserana +morone saxatilis +phigalia strigataria +mischocyttarus flavitarsis +ardeola bacchus +callosciurus erythraeus +elgaria multicarinata +cantareus apertus +orthosia hibisci +steatoda nobilis +euchloe ausonides +chloroceryle amazona +theristicus caudatus +amazona finschi +anthus hodgsoni +libytheana carinenta +anaxyrus quercicus +cyanopica cyanus +chloris sinica +phoenicurus auroreus +polygonia c-aureum +polygonia c-album +stellagama stellio +histrionicus histrionicus +trigonodes hyppasia +diadophis punctatus +coccinella septempunctata +thaumetopoea pityocampa +chortophaga viridifasciata +katharina tunicata +eutropis longicaudata +diaphania indica +schistocerca nitens +minuca pugnax +perina nuda +acanthocephala alata +hyla cinerea +megathura crenulata +phanogomphus militaris +orthosia cerasi +scolopax minor +callophrys eryphon +spizella breweri +orthosia incerta +megaceryle maxima +anacridium aegyptium +buteo swainsoni +scolopendra heros +anthracoceros albirostris +bucorvus leadbeateri +lophoceros alboterminatus +lophoceros nasutus +eudynamys scolopaceus +speyeria mormonia +setophaga pinus +lissachatina fulica +orthosia gothica +cercopithecus mitis +polioptila caerulea +anadenobolus monilicornis +apalone ferox +trachypithecus obscurus +hyla gratiosa +ochlodes agricola +agrius cingulata +chaetura pelagica +panchlora nivea +polistes exclamans +stelgidopteryx serripennis +dermacentor occidentalis +parantica aglea +aspidoscelis gularis +ambystoma laterale +closterotomus norwegicus +graphium doson +bombus melanopygus +empidonax hammondii +symbrenthia lilaea +calyptorhynchus banksii +hyalophora columbia +vanessa annabella +euploea mulciber +lexias pardalis +orgyia detrita +lethe confusa +zemeros flegyas +nerodia floridana +lithobates grylio +danaus genutia +parthenos sylvia +hyla chrysoscelis +dione juno +anaxyrus fowleri +achatia distincta +phyllodesma americana +procambarus clarkii +prenolepis imparis +porzana carolina +bombycilla cedrorum +satyrium californica +rhyothemis phyllis +lathrecista asiatica +ischnura heterosticta +diplacodes bipunctata +phylloscopus collybita +anaea aidea +vireo philadelphicus +emmelina monodactyla +aneides aeneus +ara ararauna +hypothymis azurea +ellychnia corrusca +obeidia tigrata +eurema blanda +cirrhitichthys aprinus +lonchura atricapilla +haliaeetus leucogaster +irediparra gallinacea +tapinoma sessile +trichiotinus texanus +otiorhynchus sulcatus +scaphiopus couchii +haliastur sphenurus +aplonis panayensis +chloroceryle americana +spinus psaltria +pecari tajacu +erinnyis ello +ortalis poliocephala +sphenarches anisodactylus +pterophorus pentadactyla +cicindela campestris +tegosa claudina +phoberia atomaris +chlidonias hybrida +dendrelaphis punctulatus +anaea andria +glyphodes onychinalis +murgantia histrionica +paragus haemorrhous +zopherus nodulosus +frontinella pyramitela +battus philenor +pieris oleracea +argia plana +erynnis baptisiae +salvator merianae +apiomerus californicus +toxomerus geminatus +plagodis phlogosaria +cladara atroliturata +anticlea vasiliata +sylvicapra grimmia +camnula pellucida +callosamia angulifera +scalopus aquaticus +pisaura mirabilis +columba guinea +anthropoides paradiseus +prinia maculosa +buteo rufofuscus +orgyia postica +promerops cafer +nectarinia famosa +oenanthe familiaris +telophorus zeylonus +dendrocygna autumnalis +xylocopa micans +syngrapha rectangula +cochlicella barbara +aramides albiventris +alouatta pigra +terathopius ecaudatus +bubo africanus +setophaga tigrina +tessellana tessellata +kleidocerys resedae +tetraopes femoratus +cysteodemus armatus +pantomorus cervinus +cycloneda sanguinea +smerinthus ophthalmica +chlosyne palla +euchromius ocellea +plagodis pulveraria +syndemis afflictana +zale minerea +endothenia hebesana +paectes oculatrix +allotria elonympha +mellilla xanthometata +cyclophora packardi +idaea degeneraria +nemoria lixaria +athetis tarda +epimecis hortaria +furcula borealis +acronicta insularis +hethemia pistasciaria +polistes aurifer +chionodes mediofuscella +cladara limitaria +merops apiaster +anas erythrorhyncha +quelea quelea +thyatira batis +cnaphalocrocis medinalis +lagonosticta senegala +corythaixoides concolor +coracias caudatus +eutrapela clemataria +charadrius dubius +gonepteryx cleopatra +boloria euphrosyne +euphydryas aurinia +pternistis capensis +muscicapa adusta +andropadus importunus +pyrops candelaria +smerinthus cerisyi +crotalus horridus +euphoria inda +bradybaena similaris +turdus olivaceus +sylvia melanocephala +thasus gigas +molothrus ater +paltothemis lineatipes +acronicta rubricoma +phylidonyris niger +brunia antica +trimerotropis pallidipennis +icaricia acmon +cynanthus latirostris +macronyx croceus +discus rotundatus +porcellio spinicornis +halictus rubicundus +mallodon dasystomus +falco vespertinus +lanius collurio +acraea serena +hirundo albigularis +bombus vosnesenskii +camponotus modoc +libellula fulva +lasiommata megera +magallana gigas +leptoptilos crumenifer +passer diffusus +haliaeetus vocifer +cornu aspersum +vanellus armatus +necrosyrtes monachus +charadrius tricollaris +chrysodeixis includens +charadra deridens +augochlora pura +acytolepis puspa +lomographa glomeraria +philoscia muscorum +zygogramma signatipennis +buteogallus urubitinga +chloropicus fuscescens +armases cinereum +ploceus ocularis +diglossa baritula +icterus abeillei +coenonympha pamphilus +dryoscopus cubla +psamatodes abydata +anthocharis sara +euphilotes bernardino +hemigrapsus sanguineus +phoeniculus purpureus +sachem +quiscalus lugubris +callophrys augustinus +phalera bucephala +charadrius marginatus +thysanoplusia orichalcea +pontia daplidice +lophophanes cristatus +idaea seriata +diplolepis polita +passer melanurus +ardea melanocephala +anthus cinnamomeus +passerina ciris +darapsa myron +merodon equestris +thyridopteryx ephemeraeformis +salticus scenicus +coccyzus americanus +amphion floridensis +typocerus zebra +butorides virescens +xanthorhoe lacustrata +pituophis catenifer +charadrius alexandrinus +mocis frugalis +ladona julia +mangora acalypha +cabera erythemaria +sciurus yucatanensis +graptemys ouachitensis +acronicta rumicis +atalantycha bilineata +dendrocygna bicolor +callospermophilus lateralis +fulica cristata +phalacrocorax capensis +elaphria versicolor +charadrius pecuarius +accipiter badius +lobophora nivigerata +centropus superciliosus +brotogeris chiriri +ancistrocerus gazella +ceratomia amyntor +hemieuxoa rudens +doxocopa laure +morrisonia confusa +zapornia flavirostra +haematopus moquini +gyps africanus +plestiodon gilberti +calidris minuta +lanius minor +plocepasser mahali +armadillidium nasatum +mesoleuca ruficillata +dryocampa rubicunda +icterus cucullatus +camponotus pennsylvanicus +zerynthia rumina +catopsilia florella +clepsis melaleucana +epilachna mexicana +acronicta superans +hyppa xylinoides +ecliptopera silaceata +anartia jatrophae +chersina angulata +trachylepis margaritifera +trachylepis striata +ophisaurus ventralis +dolichovespula arenaria +satyrium sylvinus +podargus strigoides +pachycephala rufiventris +ardea pacifica +arion subfuscus +anolis biporcatus +basiliscus plumifrons +urticina grebelnyi +clostera albosigma +neverita lewisii +campaea perlata +hyposidra talaca +carabus nemoralis +papilio helenus +phocides polybius +perispasta caeculalis +renia flavipunctalis +cheilomenes sexmaculata +scolopendra cingulata +tabanus atratus +euphyia intermediata +cactophagus spinolae +korscheltellus lupulina +hippotion celerio +catopsilia pomona +papilio demoleus +sassacus vitis +sceloporus clarkii +columba oenas +alaus lusciosus +hypomecis punctinalis +agrotis segetum +craniophora ligustri +elasmostethus interstinctus +chauliognathus marginatus +vireo olivaceus +blastobasis glandulella +ochropleura implecta +trabala vishnou +darapsa choerilus +plagodis serinaria +lophocampa caryae +euparthenos nubilis +chytonix palliatricula +milionia zonea +agrilus planipennis +condica vecors +coryphista meadii +leuconycta diphteroides +lon zabulon +hypsipetes amaurotis +orthetrum albistylum +chytolita morbidalis +cicindela trifasciata +mydas clavatus +baileya doubledayi +apamea sordens +stenomacra marginella +lycaena arota +pogonomyrmex californicus +elanus axillaris +heliopetes ericetorum +colluricincla harmonica +pardalotus striatus +orthetrum chrysis +epiblema scudderiana +scarites subterraneus +emerita talpoida +ponometia erastrioides +apiomerus spissipes +platynota idaeusalis +protodeltote albidula +rhodobaenus quinquepunctatus +cyprinus rubrofuscus +thraupis abbas +euphonia elegantissima +storeria occipitomaculata +celithemis elisa +centruroides sculpturatus +amblyomma americanum +stiretrus anchorago +phosphuga atrata +erynnis horatius +rhionaeschna californica +pogonomyrmex rugosus +peribatodes rhomboidaria +pyralis farinalis +hoplodrina ambigua +eristalis arbustorum +psyche casta +phlogophora iris +nemoria mimosaria +sphex pensylvanicus +central american agouti +lema daturaphila +scopus umbretta +polyboroides typus +philaeus chrysops +rhinichthys atratulus +lyssomanes viridis +cerma cerintha +iridopsis larvaria +pituophis deppei +sparganothis sulfureana +megaphasma denticrus +araneus bicentenarius +pasiphila rectangulata +leptopterna dolabrata +anolis limifrons +ramphocelus carbo +morrisonia latex +grallina cyanoleuca +pardalotus punctatus +eucopina tocullionana +busycon carica +euphoria sepulcralis +melanitis leda +amazilia tzacatl +euphonia hirundinacea +lonchura punctulata +callopistria cordata +aglossa pinguinalis +prasinocyma semicrocea +urbanus procne +sicalis luteola +strangalepta abbreviata +costaconvexa centrostrigaria +iridopsis defectaria +maliattha synochitis +yellow-legged tortoiseshell +speyeria cybele +argynnis adippe +bombus borealis +schistocerca americana +blepharomastix ranalis +celastrina neglecta +eumorpha vitis +canis mesomelas +hyla japonica +anomoea laticlavia +toxomerus marginatus +eueides isabella +lampropholis delicata +pycnonotus goiavier +muscicapa dauurica +agelaioides badius +argia tibialis +amorpha juglandis +campylopterus hemileucurus +oreotragus oreotragus +basileuterus culicivorus +eupithecia miserulata +eumenes fraternus +plagiodera versicolora +paraeschra georgica +eudocima phalonia +bleptina caradrinalis +cnaphalocrocis poeyalis +allagrapha aerea +tyrannus forficatus +chiasmia emersaria +metanema inatomaria +icaricia lupini +psyllobora vigintiduopunctata +satyrium behrii +eupetomena macroura +spinus magellanicus +cathartes burrovianus +setophaga cerulea +disclisioprocta stellata +hyla eximia +danaus gilippus +egretta tricolor +eudocimus albus +passerina leclancherii +volatinia jacarina +euphoria basalis +patagioenas picazuro +columbina talpacoti +dyspteris abortivaria +pseudomops septentrionalis +synchlora aerata +acrida conica +diabrotica balteata +enicospilus purgatus +lepidocolaptes angustirostris +rana luteiventris +euphoria kernii +aphonopelma hentzi +chrysoteuchia topiarius +cyligramma latona +anolis distichus +anolis equestris +lucanus elaphus +picoides arcticus +papilio canadensis +asterias rubens +dendrocygna viduata +strongylocentrotus droebachiensis +enallagma signatum +tetraopes tetrophthalmus +embernagra platensis +spilosoma lubricipeda +pyrausta laticlavia +spilosoma lutea +deilephila elpenor +pseudoips prasinana +saltator atriceps +icterus prosthemelas +xiphorhynchus flavigaster +ictinia plumbea +megascolia maculata +satyrium edwardsii +euthochtha galeator +xylocopa californica +myiopsitta monachus +apatura ilia +libellula luctuosa +stilpnia larvata +icterus pyrrhopterus +cicindela purpurea +coenonympha tullia +euphyes vestris +glaucopsyche lygdamus +erinaceus roumanicus +hypena palparia +myiozetetes similis +brachymesia furcata +roeseliana roeselii +climaciella brunnea +dichomeris flavocostella +axylia putris +lacanobia oleracea +habrosyne pyritoides +citheronia regalis +molothrus bonariensis +crocodylus moreletii +tetracis crocallata +pyrrharctia isabella +marathyssa inficita +norrisia norrisii +chlosyne gorgone +netta peposaca +tosale oviplagalis +eutropis multifasciata +hadrurus arizonensis +idaea dimidiata +misumena vatia +phyllorhynchus decurtatus +parallelia bistriaris +pococera asperatella +phimosus infuscatus +lochmaeus bilineata +balsa tristrigella +nicrophorus tomentosus +galasa nigrinodis +ariopsis felis +hasarius adansoni +hypagyrtis unipunctata +storeria dekayi +polioptila dumicola +tetanolita mynesalis +fernaldella fimetaria +virbia aurantiaca +apantesis arge +photinus pyralis +lygropia rivulalis +apoda biguttata +sicya macularia +rynchops niger +saltator aurantiirostris +exomala orientalis +cycnia tenera +zanclognatha laevigata +aspidoscelis hyperythrus +metalectra discalis +macaria pustularia +celithemis fasciata +papilio troilus +bombina variegata +achaea janata +pheosia rimosa +sporophila caerulescens +metacyrba taeniola +vaejovis carolinianus +polyphylla decemlineata +hypsopygia olinalis +homalodisca vitripennis +syrigma sibilatrix +trichoplusia ni +hesperotettix viridis +pipraeidea bonariensis +tolmomyias sulphurescens +trogon collaris +turdus leucomelas +turdus rufiventris +polygrammate hebraeicum +pantographa limata +eumyias thalassinus +allograpta obliqua +anisota virginiensis +tarache aprica +phaneroptera nana +leptoglossus phyllopus +diabrotica undecimpunctata +synanthedon acerni +lapara bombycoides +lateroligia ophiogramma +patalene olyzonaria +callimorpha dominula +taricha sierrae +sceloporus malachiticus +aegithina tiphia +lampropeltis splendida +dinopium benghalense +agapostemon virescens +polites themistocles +oreochromis mossambicus +oxychilus draparnaudi +urosalpinx cinerea +diadumene lineata +cardinalis sinuatus +adelphocoris lineolatus +lycaena heteronea +banasa euchlora +calopteryx maculata +hyla intermedia +polia nimbosa +protoboarmia porcelaria +euchlaena serrata +polistes carnifex +hemithea aestivaria +pseudothyatira cymatophoroides +lophocampa maculata +pycnonotus leucotis +apamea amputatrix +acronicta innotata +hebomoia glaucippe +hypena proboscidalis +laspeyria flexula +hofmannophila pseudospretella +anania hortulata +schizura unicornis +archips purpurana +steatoda triangulosa +papilio multicaudata +paruroctonus silvestrii +zosterops palpebrosus +coenobita clypeatus +periparus ater +anaplectoides prasina +larinus carlinae +euborellia annulipes +prionus imbricornis +sameodes cancellalis +arrhenodes minutus +platynota exasperatana +dendrocitta formosae +hieraaetus pennatus +psilopogon haemacephalus +larus cachinnans +graphisurus fasciatus +acridotheres javanicus +merops persicus +euptoieta hegesia +strangalia luteicornis +disonycha glabrata +velarifictorus micado +verrucosa arenata +syricoris lacunana +copsychus fulicatus +neoscona arabesca +cisticola juncidis +boloria selene +carterocephalus palaemon +triakis semifasciata +lucidota atra +callistethus marginatus +necrodes surinamensis +bombus nevadensis +cupha erymanthis +ptecticus trivittatus +micrathena gracilis +anthreptes malacensis +agraulis vanillae +anthidium manicatum +cecropis daurica +nematocampa resistaria +trichopoda pennipes +ctenolepisma lineata +belocaulus angustipes +thymelicus sylvestris +neotibicen canicularis +ectropis crepuscularia +egretta sacra +eurystomus orientalis +sphecodina abbottii +zelus tetracanthus +haematopus palliatus +favonius quercus +helophilus pendulus +virbia laeta +apoda y-inversum +lagria hirta +diaethria anna +isa textula +treron vernans +phyciodes tharos +euclea delphinii +pelophylax nigromaculatus +chrysoteuchia culmella +agriphila straminella +nigetia formosalis +idia lubricalis +lasiocampa quercus +diachrysia aereoides +hemaris diffinis +nyctibius jamaicensis +phoebis agarithe +asbolis capucinus +xylocopa virginica +entylia carinata +hystricia abrupta +epargyreus clarus +pachysphinx modesta +mallophora fautrix +caripeta divisata +leistes loyca +theristicus melanopis +liguus fasciatus +cosmia trapezina +ligdia adustata +drepana falcataria +perizoma alchemillata +idia rotundalis +elgaria kingii +milvago chimango +hypena bijugalis +dicymolomia julianalis +anax junius +psorophora ciliata +eristalinus taeniops +anatrytone logan +efferia aestuans +trichocnemis spiculatus +loxosceles reclusa +sitochroa palealis +pachylia ficus +cercyonis pegala +mitopus morio +crocallis elinguaria +chauliodes rastricornis +parapoynx badiusalis +pseudovadonia livida +lepomis gulosus +hemideina thoracica +antigone rubicunda +oncocera semirubella +hypena scabra +orthonama obstipata +sylvia atricapilla +pyrausta bicoloralis +bombus vancouverensis +junonia almana +crambus agitatellus +hesperia colorado +eunica monima +cicindela scutellaris +haploa clymene +tipula abdominalis +contopus cooperi +megatibicen dealbatus +sphinx poecila +cavia aperea +scolecocampa liburna +hypoprepia miniata +prunella collaris +feltia herilis +apantesis virgo +catocala ultronia +indotyphlops braminus +agama picticauda +athene cunicularia +choristoneura rosaceana +stictoleptura canadensis +icaricia icarioides +sympetrum pallipes +hypsopygia binodulalis +acronicta americana +cicindela oregona +zale lunata +watsonalla cultraria +iphiclides feisthamelii +ischnura hastata +protodeltote muscosula +noctua fimbriata +euplagia quadripunctaria +melanargia lachesis +diastictis fracturalis +aeshna grandis +watsonalla binaria +junonia hedonia +epicallima argenticinctella +anarta trifolii +xanthorhoe fluctuata +ennomos subsignaria +diacme adipaloides +bombus terricola +anomia simplex +cyrtopleura costata +hyles gallii +mellita quinquiesperforata +phrynosoma solare +doleschallia bisaltide +cepora nerissa +conocephalus fasciatus +serrognathus titanus +cyclophora linearia +ceratomia catalpae +setophaga pensylvanica +pontia occidentalis +hyles lineata +palthis angulalis +udea rubigalis +phyprosopus callitrichoides +hypena baltimoralis +haematopus unicolor +hemiphaga novaeseelandiae +alcis repandata +drepana bilineata +syrbula admirabilis +diacrisia sannio +agrotis puta +colostygia pectinataria +chloroclysta siterata +udea ferrugalis +ilexia intractata +plethodon cylindraceus +clemmys guttata +schistocerca obscura +pyrausta volupialis +eumorpha pandorus +limnaecia phragmitella +zale horrida +lithacodia musta +eudryas grata +lon taxiles +thesprotia graminis +melanoplus bivittatus +arctia caja +lucanus capreolus +ochropleura plecta +rivula sericealis +catocala grynea +anax parthenope +calopteryx haemorrhoidalis +anteos clorinde +chlorion aerarium +araneus marmoreus +ceriagrion auranticum +promachus hinei +sympecma paedisca +hypoprepia fucosa +scudderia furcata +papilio cresphontes +brachydiplax chalybea +pseudothemis zonata +agriphila tristella +colias eurytheme +pheucticus melanocephalus +aurelia labiata +peucaea ruficauda +pyrocephalus rubinus +oreothlypis superciliosa +sympetrum fonscolombii +colaptes rubiginosus +amazilia cyanocephala +bombus perplexus +holcosus undulatus +icterus gularis +calidris alba +catocala concumbens +macaria liturata +marpesia petreus +bombus auricomus +spilomyia longicornis +gymnoscelis rufifasciata +sympetrum pedemontanum +pleuroprucha insulsaria +anageshna primordialis +urola nivalis +microtheoris ophionalis +mimoschinia rufofascialis +mesoligia furuncula +monochamus notatus +pterophylla camellifolia +lacinipolia olivacea +nadata gibbosa +gluphisia septentrionis +setophaga dominica +halyomorpha halys +panopoda rufimargo +elgaria coerulea +neotamias townsendii +trichoglossus chlorolepidotus +leucania adjuta +colias philodice +bombus citrinus +conchylodes ovulalis +phymata americana +bombus fervidus +nezara viridula +brachythemis contaminata +dolichovespula maculata +erythemis simplicicollis +habrosyne scripta +tolype laricis +peridea angulosa +leptura quadrifasciata +scaphinotus angusticollis +erythemis collocata +heterocampa umbrata +cydia latiferreana +ariolimax columbianus +chlosyne nycteis +pelidnota punctata +papilio glaucus +emesis emesia +carcharodus alceae +scolia bicincta +catocala neogama +polyommatus icarus +charaxes jasius +gnophaela vermiculata +anteos maerula +cyclophora pendulinaria +dysdercus cingulatus +celastrina argiolus +reduvius personatus +brachystola magna +paravaejovis spinigerus +oecanthus nigricornis +intellagama lesueurii +mungos mungo +mycteria ibis +eulithis explanata +abudefduf vaigiensis +cosmodes elegans +spilosoma curvata +hesperia leonardus +enoplognatha ovata +scolia dubia +thalasseus sandvicensis +gryllus pennsylvanicus +xenox tigrinus +larus heermanni +ceriagrion glabrum +orthetrum chrysostigma +zerene cesonia +papilio polyxenes +ochlodes sylvanoides +orthetrum julia +borbo cinnara +gymnandrosoma punctidiscanum +talicada nyseus +delias eucharis +catocala relicta +haematopis grataria +melanoplus punctulatus +flabellinopsis iodinea +catocala cara +navanax inermis +galgula partita +halmus chalybeus +xestia smithii +malurus melanocephalus +strepera graculina +xylocopa violacea +anthidium oblongatum +chorthippus brunneus +cupido amyntula +aglais io +tylozygus bifidus +stenotus binotatus +euschistus servus +mormidea lugens +melanolestes picipes +caligavis chrysops +hypocysta metirius +argiope trifasciata +mesembrina meridiana +meconema thalassinum +pelecinus polyturator +neriene radiata +lethocerus americanus +phacellophora camtschatica +dysstroma truncata +desmia funeralis +bombus pensylvanicus +campaea margaritaria +neacoryphus bicrucis +paonias myops +dymasia dymas +erebia aethiops +parapoynx maculalis +pantherophis spiloides +trichodezia albovittata +pheosidea elegans +anoplotrupes stercorosus +caenurgia chloropha +marimatha nigrofimbria +microcarbo melanoleucos +pelecanus conspicillatus +hirundo tahitica +acharia stimulea +calpodes ethlius +nephelodes minians +sarpa salpa +chlosyne janais +phalaenostola larentioides +pseudochorthippus parallelus +hypena manalis +neoxabea bipunctata +panorpa communis +stomoxys calcitrans +monadenia fidelis +xestia c-nigrum +chalcolestes viridis +diaprepes abbreviatus +halysidota harrisii +dynastes tityus +tivela stultorum +calopteron reticulatum +chauliodes pectinicornis +autographa precationis +dendrelaphis pictus +agrotis venerabilis +anser albifrons +bombus mixtus +machimia tentoriferella +tarache quadriplaga +euclea incisa +sylvirana guentheri +aromia moschata +carpocoris purpureipennis +butorides striata +tremex columba +largus succinctus +cingilia catenaria +micrathyria hagenii +papilio rumiko +melanis cephise +rana arvalis +hippocampus histrix +physalia physalis +psammodromus algirus +aplocera plagiata +vespula vidua +orthetrum glaucum +hypsiglena ochrorhynchus +lambdina fiscellaria +lampropeltis calligaster +dicrurus macrocercus +anasaitis canosa +lampropeltis nigra +neotibicen pruinosus +acanalonia conica +limax maximus +eumorpha fasciatus +pogonomyrmex barbatus +clydonopteron sacculana +melipotis jucunda +eumorpha achemon +argiope bruennichi +euclidia glyphica +dysgonia algira +scaeva pyrastri +chilades pandava +udaspes folus +spisula solidissima +rana italica +apatelodes torrefacta +helophilus fasciatus +argyrotaenia velutinana +digrammia ocellinata +palthis asopialis +eristalis pertinax +pyrochroa coccinea +amazona viridigenalis +salamandrina perspicillata +leucophaeus atricilla +bufo spinosus +eumorpha satellitia +rumina decollata +isochaetes beutenmuelleri +petroica australis +helophilus trivittatus +pholidoptera griseoaptera +atta mexicana +datana integerrima +sciurus alleni +vanessa kershawi +danaus petilia +austrolestes leda +tyria jacobaeae +cerotoma trifurcata +corvus corone +dicromantispa interrupta +polistes metricus +euchrysops cnejus +leukoma staminea +megalopyge crispata +spilotes pullatus +echinargus isola +mauremys leprosa +delichon urbicum +hamadryas guatemalena +hamadryas amphinome +helicoverpa zea +zoropsis spinimana +hypercompe oslari +gambusia holbrooki +litoria fallax +todiramphus chloris +plantain squirrel +danaus chrysippus +phelsuma laticauda +xenocatantops humilis +stagmomantis limbata +cisthene tenuifascia +diphthera festiva +tringa ochropus +neoalcis californiaria +lacerta bilineata +triturus carnifex +setophaga petechia +pyganodon grandis +hipparchia statilinus +arenaeus cribrarius +tachina fera +agapanthia villosoviridescens +aphonopelma eutylenum +donax variabilis +leptotes pirithous +aricia agestis +calopteron terminale +elasmucha grisea +tectocoris diophthalmus +coelophora inaequalis +latrodectus geometricus +triphosa haesitata +steatoda grossa +buteo rufinus +phylloscopus trochilus +buprestis aurulenta +euthyrhynchus floridanus +cipangopaludina chinensis +psammodynastes pulverulentus +eopsaltria australis +herpetogramma licarsisalis +junonia iphita +hypselonotus punctiventris +ixobrychus minutus +anthus campestris +crocothemis erythraea +trithemis annulata +thyris maculata +mestra amymone +eristalis tenax +aplodinotus grunniens +enyo lugubris +neoconocephalus triops +chlorochroa ligata +melanchroia chephise +diploderma swinhonis +pteropus giganteus +catochrysops strabo +campylorhynchus gularis +episyrphus balteatus +antigonus erosus +anas undulata +mimus polyglottos +creatonotos gangis +dynamine postverta +regina septemvittata +operophtera brumata +adelpha iphicleola +leptotes plinius +jamides bochus +erannis defoliaria +pareuchaetes insulata +melipotis cellaris +acanthodoris lutea +ahaetulla prasina +papilio polymnestor +hapithus saltator +melanerpes aurifrons +rachiplusia ou +palpada vinetorum +diaphania hyalinata +smyrna blomfildia +utetheisa pulchella +eumomota superciliosa +romalea microptera +pyrisitia nise +syntomeida epilais +strymon istapa +rosalia funebris +bronchocela cristatella +tragelaphus angasii +leptostales pannaria +arachnis picta +euchlaena amoenaria +plethodon dorsalis +erebia epipsodea +syngamia florella +passerella iliaca +burnsius oileus +mimus gilvus +cyanocorax yucatanicus +melanitta perspicillata +loxura atymnus +saxicola caprata +eumaeus atala +bufo gargarizans +cucumaria miniata +trimeresurus stejnegeri +hexagenia limbata +ganyra josephina +lanius cristatus +phoebis philea +heliconius charithonia +deidamia inscriptum +eudyptula minor +phalacrocorax varius +petroica longipes +jamides celeno +elasmostethus cruciatus +dryas iulia +stomolophus meleagris +lophocampa annulosa +hamadryas februa +oreochromis niloticus +urania fulgens +heteronympha merope +ophraella communa +setophaga magnolia +anas gracilis +cantao ocellatus +tettigonia viridissima +quiscalus niger +hermeuptychia hermes +dicaeum hirundinaceum +neverita duplicata +lampyris noctiluca +membracis mexicana +coenonympha arcania +gomphocerippus rufus +acraea horta +motacilla aguimp +hedydipna collaris +amblyospiza albifrons +pycnonotus capensis +anthus rufulus +circus macrourus +erynnis tages +campylorhynchus zonatus +eupsittula nana +polistes canadensis +belenois creona +junonia natalica +dindymus versicolor +zizula hylax +ocybadistes walkeri +lygodactylus capensis +polistes dominula +chlosyne theona +euthystira brachyptera +plebejus idas +rhabdomys pumilio +tadorna variegata +haliaeetus albicilla +libellago lineata +ctenolepisma longicaudata +junonia terea +lanius senator +tachybaptus ruficollis +junonia oenone +illeis galbula +hemicordulia australiae +passer hispaniolensis +austroargiolestes icteromelas +arctocephalus forsteri +liolaemus tenuis +chroicocephalus maculipennis +scopula rubraria +acanthorhynchus tenuirostris +hypolimnas bolina +chalcomitra senegalensis +plecia nearctica +anthus trivialis +elseyornis melanops +acanthiza chrysorrhoa +hemicordulia tau +agrotis munda +arhodia lasiocamparia +heteropoda venatoria +hellula hydralis +acanthopagrus australis +pseudopanthera macularia +issoria lathonia +odezia atrata +daphnis nerii +lycaena dispar +phloeodes diabolicus +chalcomitra amethystina +hemidactylus mabouia +feltia subterranea +tisiphone abeona +circopetes obtusata +caligo telamonius +antigone canadensis +lichanura orcutti +destolmia lineata +mimus longicaudatus +oulactis muscosa +pyrgus malvae +hygraula nitens +emberiza cirlus +anaxyrus americanus +monochamus clamator +crypsiphona ocultaria +culladia cuneiferellus +funambulus palmarum +mythimna convecta +digrammia continuata +hesperia comma +anas flavirostris +fulica ardesiaca +myrmecia pilosula +parnassius mnemosyne +streptopelia senegalensis +geosciurus inauris +satyrium acadica +zerynthia polyxena +pieris virginiensis +spectrotrota fimbrialis +gerygone igata +todiramphus sanctus +gorsachius melanolophus +bufo bankorensis +polyommatus coridon +callizzia amorata +microcrambus biguttellus +promalactis suzukiella +dendrocitta vagabunda +sehirus cinctus +argyrotaenia quercifoliana +odorrana swinhoana +omophoita cyanipennis +nestor meridionalis +macrodiplax cora +cryphia algae +rhaphigaster nebulosa +crested porcupine +myodes glareolus +anguis veronensis +mythimna albipuncta +phoenicurus ochruros +mayaheros urophthalmus +pseudomyrmex gracilis +cyanocorax yncas +spirobranchus cariniferus +diloma aethiops +myliobatis tenuicaudatus +charadrius obscurus +libelloides coccajus +aporia crataegi +lycaena alciphron +vanellus chilensis +crematogaster scutellaris +lycaena virgaureae +rutpela maculata +palpopleura lucia +aythya nyroca +erebia ligea +corvus cornix +poecile hudsonicus +colletes inaequalis +glaucopsyche alexis +phalaenophana pyramusalis +cupido argiades +parnassius apollo +monticola solitarius +merops philippinus +euphydryas editha +americoliva sayana +poecilocoris lewisi +streptopelia semitorquata +argopecten gibbus +psilopogon nuchalis +empusa pennata +dicrurus leucophaeus +polyommatus bellargus +pelargopsis capensis +melanolophia imitata +chimarocephala pacifica +gomphurus fraternus +cypherotylus californicus +phalanta phalantha +comostola laesaria +sphrageidus similis +colotois pennaria +tachycineta bicolor +nymphalis polychloros +agonopterix alstroemeriana +marpissa muscosa +chlidonias leucopterus +henricia leviuscula +ennomos magnaria +copivaleria grotei +tringa erythropus +evasterias troschelii +iphiclides podalirius +hamearis lucina +spilostethus saxatilis +geometra papilionaria +amata phegea +mylothris agathina +arctocephalus pusillus +araschnia levana +osmia bicornis +lytrosis unitaria +dysstroma hersiliata +horisme intestinata +speyeria aglaja +melitaea athalia +melitaea didyma +boloria dia +oiceoptoma thoracicum +zonocerus elegans +bicyclus safitza +papilio bianor +euthalia aconthea +appias libythea +accipiter trivirgatus +spodoptera mauritia +scolypopa australis +polistes chinensis +lasiommata maera +tangara gyrola +anaxyrus terrestris +polydrusus formosus +myiodynastes maculatus +knulliana cincta +acridotheres cristatellus +anthrenus verbasci +adela reaumurella +carpocoris mediterraneus +alouatta seniculus +anthus spinoletta +ariadne ariadne +papilio clytia +cacomantis flabelliformis +andrena cineraria +acraea terpsicore +melanerpes rubricapillus +coccinella transversalis +bubo bubo +graphosoma italicum +leptosia nina +castalius rosimon +hemaris fuciformis +phoenicurus phoenicurus +minois dryas +araneus quadratus +sympetrum vulgatum +coenonympha glycerion +cominella adspersa +aythya novaeseelandiae +proxys punctulatus +erythrodiplax funerea +ampittia dioscorides +motacilla citreola +pareronia hippia +rhyothemis variegata +acanthacris ruficornis +valanga nigricornis +cimbex americanus +gryllus bimaculatus +henosepilachna vigintioctopunctata +ploceus capensis +milax gagates +loxigilla noctis +notocrypta curvifascia +iris oratoria +tuberolachnus salignus +polygyra cereolus +petrophila jaliscalis +saxicola torquatus +halictus tripartitus +bombus terrestris +papilio dardanus +ameles spallanzania +erebia medusa +zeuzera pyrina +ellida caniplaga +anthocharis cardamines +potamarcha congener +brintesia circe +megacopta cribraria +pararge aegeria +paralabrax clathratus +patania ruralis +malacosoma neustria +euthrix potatoria +saturnia pyri +sphinx pinastri +eilema sororcula +eilema lurideola +xestia xanthographa +orthetrum cancellatum +rhinella arenarum +timarcha tenebricosa +eurema brigitta +banasa dimidiata +chlosyne gabbii +vasates quadripedes +coreus marginatus +eupeodes corollae +setophaga virens +periplaneta fuliginosa +tubuca arcuata +sterna striata +nyctemera annulata +anatis ocellata +porcellio scaber +cercopis vulnerata +testudo hermanni +cinclus cinclus +bufotes viridis +cantharis rustica +remiz pendulinus +scaeva affinis +papilio machaon +buccinum undatum +varanus nebulosus +aspidimorpha miliaris +lytta magister +dioprosopa clavata +litoria ewingii +apis cerana +trypoxylus dichotomus +evania appendigaster +eristalis flavipes +agelastica alni +serpula columbiana +zosterops lateralis +kaniska canace +pangrapta decoralis +lacinipolia laudabilis +spodiopsar cineraceus +rhagium mordax +calliteara pudibunda +trichonephila clavata +tripudia quadrifera +xanthorhoe montanata +deilephila porcellus +regulus ignicapilla +cyrtepistomus castaneus +bulia deducta +pyrausta inornatalis +cassida rubiginosa +halictus poeyi +sturnus unicolor +aphomia sociella +zeugomantispa minuta +chrysopilus thoracicus +leucauge argyra +lethe europa +colocasia propinquilinea +hypsoropha hormos +daimio tethys +camponotus planatus +geranoaetus polyosoma +pagurus granosimanus +bombus impatiens +helminthoglypta tudiculata +opisthograptis luteolata +apamea monoglypha +acrida cinerea +arctia villica +phosphila miselioides +mechanitis polymnia +spragueia guttata +melitaea cinxia +rainieria antennaepes +ponometia semiflava +eudryas unio +euodynerus foraminatus +halyzia sedecimguttata +megalopyge opercularis +cyanocorax chrysops +glenoides texanaria +leuconycta lepidula +dysphania militaris +xylotrechus colonus +platycnemis pennipes +mimas tiliae +anolis sagrei +euclidia cuspidea +epipaschia superatalis +artace cribrarius +prionoxystus robiniae +cisthene plumbea +prolimacodes badia +lithacodes fasciola +synema globosum +oebalus pugnax +dioctria hyalipennis +elliptio complanata +pyronia bathseba +acontia trabealis +cantharis livida +mergellus albellus +poecile montanus +apogeshna stenialis +girella nigricans +sternula albifrons +rallus aquaticus +nemophora degeerella +zygaena transalpina +catocala micronympha +melanolophia canadaria +macrurocampa marthesia +acronicta insita +clepsis persicana +trithemis pallidinervis +ictinogomphus rapax +raphia frater +erthesina fullo +megachile xylocopoides +graptopsaltria nigrofuscata +aurelia aurita +dolomedes albineus +pyronia cecilia +carabus coriaceus +thalassoma pavo +coris julis +graphosoma semipunctatum +andrena wilkella +crocidosema plebejana +diplodus sargus +peridea ferruginea +poecilanthrax lucifer +zygaena lonicerae +scotopteryx chenopodiata +diplodus vulgaris +eueretagrotis perattentus +anthophora californica +hylaeus modestus +ardea purpurea +serranus scriba +panulirus interruptus +eumarozia malachitana +amazona albifrons +maniola jurtina +brenthis daphne +volucella pellucens +opilio canestrinii +plusiodonta compressipalpis +harrisimemna trisignata +hylephila phyleus +sphex nudus +amata huebneri +rhagonycha fulva +oblada melanura +crambus perlella +acleris forsskaleana +philanthus gibbosus +orientus ishidae +calotes versicolor +arctia plantaginis +idaea biselata +parasa chloris +lithosia quadra +eilema depressa +ostrea edulis +panthea acronyctoides +arta statalis +analeptura lineola +chrysomela scripta +meconema meridionale +hestina assimilis +aeshna umbrosa +octopus vulgaris +idaea demissaria +velella velella +sphinx ligustri +pomatias elegans +lestes barbarus +morimus asper +luxilus cornutus +forpus conspicillatus +isogona tenuis +leiobunum vittatum +trithemis aurora +polypedates megacephalus +meghimatium bilineatum +copera marginipes +bombus griseocollis +melissodes bimaculatus +schizura concinna +heliopetes laviana +pachliopta aristolochiae +sabella spallanzanii +hileithia magualis +leptoglossus occidentalis +ocyptamus fuscipennis +pacarina puella +cameraria ohridella +rhetus arcius +bolitotherus cornutus +catocala maestosa +platynota flavedana +ischnura elegans +squalius cephalus +parapoynx allionealis +satyrium spini +catocala lineella +euchaetes egle +rupornis magnirostris +propylea quatuordecimpunctata +neurothemis fluctuans +chrysochraon dispar +anthophora urbana +geothlypis formosa +volucella inanis +argynnis pandora +schinia arcigera +stictoleptura rubra +eutamias sibiricus +megatibicen resh +eratigena duellica +chlorostilbon canivetii +polycera atra +apantesis virguncula +moodna ostrinella +lymantria monacha +paectes abrostoloides +notocrypta paralysos +numenius madagascariensis +orectolobus maculatus +momotus aequatorialis +leptoglossus zonatus +acrocephalus arundinaceus +philesturnus rufusater +cuerna costalis +pseudochorthippus curtipennis +leucoma salicis +pycnoscelus surinamensis +chauliognathus basalis +cyprinodon variegatus +littoraria irrorata +myodocha serripes +tropidacris cristata +augochloropsis metallica +euchroma giganteum +herpetogramma bipunctalis +pyrisitia proterpia +scolia nobilitata +cerastipsocus venosus +elaphidion mucronatum +repipta taurus +onychogomphus forcipatus +aculepeira ceropegia +cicindela hybrida +orthetrum brunneum +samea baccatalis +ixobrychus sinensis +streptopelia tranquebarica +parapoynx diminutalis +cochlicopa lubrica +elophila obliteralis +palpita vitrealis +tanaecia pelea +catopsilia pyranthe +carpocoris fuscispinus +neogobius melanostomus +lamprosema victoriae +anticarsia gemmatalis +junonia genoveva +trypocopris vernalis +eristalis dimidiata +cepaea nemoralis +acronicta vinnula +ischnura aurora +vanessa indica +cordylus niger +orthodera ministralis +heliophorus epicles +exaireta spinigera +phrynops hilarii +lepomis microlophus +tangara arthus +camponotus floridanus +euodynerus hidalgo +melacoryphus lateralis +pachodynerus erynnis +platynota rostrana +vanessa carye +boana rosenbergi +eristalis stipator +emarginea percara +vanessa braziliensis +hyalymenus tarsatus +lycorma delicatula +saxicola maurus +artamus cyanopterus +digitonthophagus gazella +phrissogonus laticostata +herpetogramma phaeopteralis +condica videns +conocephalus melaenus +chroicocephalus novaehollandiae +hemideina crassidens +oligosoma polychroma +phaulacridium marginale +leucinodes cordalis +trite auricoma +austrolestes colensonis +xanthocnemis zealandica +vanessa gonerilla +latrodectus katipo +falco novaeseelandiae +ninox novaeseelandiae +prionoplus reticularis +nyssus coloripes +chloroclystis filata +clitarchus hookeri +trigonospila brevifacies +rhapsa scotosialis +orocrambus flexuosellus +eriophora pustulosa +orthodera novaezealandiae +woodworthia maculata +declana floccosa +palaemon affinis +alcithoe arabica +pseudocoremia suavis +vanessa itea +hypoblemum griseum +miomantis caffra +helpis minitabunda +trite planiceps +dasypodia cymatodes +sphenodon punctatus +aenetus virescens +isactinia olivacea +steatoda capensis +teleogryllus commodus +forsterygion lapillum +opodiphthera eucalypti +perna canaliculus +struthiolaria papulosa +spatula rhynchotis +hippocampus abdominalis +melangyna novaezelandiae +coccinella undecimpunctata +micromus tasmaniae +chloroclystis inductata +ichneutica mutans +uraba lugens +anthothoe albocincta +caedicia simplex +polistes humilis +epyaxa rosearia +sidymella trapezia +ceratosoma amoenum +gymnothorax prasinus +arianta arbustorum +gazella gazella +vespula squamosa +dorcus parallelipipedus +megatibicen auletes +burhinus grallarius +tetragonisca angustula +idaea tacturata +lithobates septentrionalis +chrysomus icterocephalus +dryadula phaetusa +chrysolina americana +aedes vexans +tirumala septentrionis +certhia brachydactyla +melipotis indomita +stilpnochlora couloniana +triodia sylvina +argopecten ventricosus +mocis marcida +diastema tigris +meuschenia freycineti +sepia apama +pseudagrion microcephalum +sepia officinalis +melipotis acontioides +amyna stricta +eubolina impartialis +clepsis virescana +sparganothoides lentiginosana +agrotis porphyricollis +tetractenos glaber +elaphria festivoides +galeruca tanaceti +halone sejuncta +vireo flavoviridis +achyra affinitalis +melanodes anthracitaria +pantydia sparsa +endotricha pyrosalis +nacoleia rhoeoalis +myzomela sanguinolenta +callocephalon fimbriatum +neoponera villosa +rhyothemis graphiptera +prosotas nora +polistes bellicosus +aplysia vaccaria +heterodontus portusjacksoni +thylacodes squamigerus +samea multiplicalis +trimerotropis maritima +emberiza rustica +clanga clanga +tringa brevipes +galeopterus variegatus +gastrina cristaria +vespa affinis +didymoctenia exsuperata +chloraspilates bicoloraria +proteuxoa hypochalchis +megaustenia imperator +stenurella melanura +lygaeus equestris +xanthogaleruca luteola +laevicaulis alte +camponotus niveosetosus +thalassoma lucasanum +crematogaster peringueyi +camponotus fulvopilosus +argiope australis +acraea issoria +delias hyparete +neptis sappho +limenitis populi +aptera fusca +anas poecilorhyncha +gonocerus acuteangulatus +cisticola exilis +archimantis latistyla +aelia acuminata +diaulula odonoghuei +gasteracantha kuhli +valgus hemipterus +cheiracanthium mildei +cyclophora nanaria +adversaeschna brevistyla +hynobius leechii +bombina orientalis +pholodes sinistraria +rana latastei +salamandra lanzai +papilio anactus +norape ovina +selenisa sueroides +micrommata virescens +eburia quadrigeminata +bodianus diplotaenia +phrynoidis asper +tetrastes bonasia +lactura subfervens +isturgia dislocaria +sander vitreus +falco berigora +talpa europaea +papilio aegeus +taeniopygia bichenovii +bradypodion damaranum +glaphyria sesquistrialis +pelopidas mathias +maliattha concinnimacula +stethophyma grossum +pseudocaranx georgianus +upeneichthys lineatus +lucanus cervus +prionus coriarius +stauropus fagi +nepa cinerea +chortophaga australior +anthene emolus +hypolycaena erylus +cigaritis vulcanus +scorpis lineolata +riptortus pedestris +zamenis longissimus +zootoca vivipara +gryllus campestris +oligoria maculata +phaulacridium vittatum +deraeocoris ruber +omocestus rufipes +cerambyx scopolii +chrysomela vigintipunctata +clytra laeviuscula +trichodes apiarius +massylaea vermiculata +miltochrista miniata +thyanta custator +cupido minimus +pyrochroa serraticornis +abraxas sylvata +ematurga atomaria +siona lineata +acrida ungarica +icterus pectoralis +pyrausta purpuralis +tetrao tetrix +girella tricuspidata +samea ecclesialis +coenagrion pulchellum +arta olivalis +lestes virens +dendrocopos syriacus +erythromma viridulum +erythromma najas +limax cinereoniger +gomphus vulgatissimus +cordulia aenea +brenthis ino +enoplosus armatus +girella zebra +thecla betulae +sympetrum flaveolum +sympetrum meridionale +panurus biarmicus +decticus verrucivorus +conocephalus fuscus +callithrix penicillata +lullula arborea +melanitis phedima +macrothylacia rubi +orthetrum testaceum +nisitrus vittatus +helix lucorum +lycaena tityrus +pyrgus malvoides +tyta luctuosa +rhodometra sacraria +hentzia mitrata +philanthus triangulum +calophasia lunula +phyllopertha horticola +cantharis fusca +stegasta bosqueella +aiolopus strepens +ancistrocerus adiabatus +corizus hyoscyami +anthropoides virgo +anas zonorhyncha +dolycoris baccarum +picus canus +lycaena hippothoe +scopula immorata +nyctemera amicus +cyclochila australasiae +athyma selenophora +synaphe punctalis +ceratosoma brevicaudatum +macroglossum stellatarum +eooxylides tharis +polyommatus amandus +carpodacus erythrinus +tropidacris collaris +acrolophus texanella +leiobunum rotundum +malachius bipustulatus +gekko chinensis +atolmis rubricollis +phyllobius pomaceus +anisota stigma +callistege mi +omocestus viridulus +ormenoides venusta +gastrophysa viridula +bombus flavifrons +metria amella +tettigonia cantans +isodontia mexicana +cenopis pettitana +ctenoplusia oxygramma +trichodes alvearius +picromerus bidens +excultanus excultus +hystrix africaeaustralis +nola cereella +scythris trivinctella +deltote pygarga +microcanthus strigatus +oedemera femorata +idaea rusticata +colias interior +macaria alternata +phaneroptera falcata +elaphria chalcedonia +colocasia coryli +harpalus rufipes +leucania diatrecta +volucella zonaria +trichiotinus assimilis +microtheoris vibicalis +halictus scabiosae +carabus granulatus +euphaea decorata +parupeneus spilurus +potanthus omaha +agrionoptera insignis +ruspolia nitidula +megisba malaya +duberria lutrix +palomena prasina +donax gouldii +pezotettix giornae +hippocampus whitei +appias lyncida +lebadea martha +ypthima huebneri +vespa velutina +tilodon sexfasciatus +cheilodactylus nigripes +petrophila bifascialis +icterus chrysater +psaltoda plaga +monacanthus chinensis +leucania incognita +nososticta solida +octopus tetricus +austroagrion watsoni +nola desmotes +pictilabrus laticlavius +pelecanus crispus +neurothemis taiwanensis +trachinops taeniatus +microcarbo pygmaeus +geitoneura klugii +epidesmia tryxaria +eurois occulta +peribalus strictus +acontia lucida +tessaratoma papillosa +microhyla fissipes +philenora aspectalella +platycephalus fuscus +rhagium inquisitor +trachurus novaezelandiae +euploea midamus +maliattha amorpha +rhyparochromus vulgaris +jamides alecto +hypselonotus interruptus +cheilodactylus vestitus +notolabrus gymnogenis +agriocnemis femina +dicotylichthys punctulatus +idiodes apicata +nacaduba kurava +latropiscis purpurissatus +scorpaena jacksoniensis +ophthalmolepis lineolata +dinolestes lewini +orectolobus halei +anoplocapros inermis +cheilodactylus fuscus +ostorhinchus limenus +phycodurus eques +pseudolabrus guentheri +meuschenia trachylepis +hypoplectrodes maccullochi +brachaluteres jacksonianus +enneapterygius atrogulare +trygonorrhina fasciata +achoerodus viridis +atypichthys strigatus +eupetrichthys angustipes +parma microlepis +schuettea scalaripinnis +trygonoptera testacea +mecaenichthys immaculatus +macaca cyclopis +kurixalus idiootocus +buergeria robusta +pteraeolidia ianthina +aphelodoris varia +strix uralensis +iduna caligata +bradypodion pumilum +austrolestes analis +dira clytus +pseudagrion pilidorsum +calotes calotes +cyanistes cyanus +thaumetopoea processionea +afrogecko porphyreus +nannodiplax rubra +matrona cyanoptera +euphaea formosa +sclerophrys pantherina +heliophorus ila +tinamus major +nocturnal curassow +agouti paca +blue whistling thrush +presbytis thomasi +bronze-tailed peacock-pheasant +leopardus pardalis +mazama americana +black-fronted duiker +philander opossum +myrmecophaga tridactyla +funisciurus carruthersi +bat-eared fox +crested partridge +meleagris ocellata +larry bird +macaca nemestrina +musophaga rossae +proechimys +francolinus nobilis +conepatus semistriatus +gambian pouched rat +mazama temama +francolinus africanus +crab-eating fox +cephalophus silvicultor +black agouti +myiophoneus glaucinus +grey-headed dove +ictonyx striatus +myoprocta pratti +lariscus insignis +manis javanica +sciurus sp +white-bellied bustard +l'hoest's monkey +unstriped ground squirrel +great argus +streptopelia lugens +white-tailed mongoose +lophura inornata +crestless fireback +tambourine dove +blue ground dove +siberian blue robin +virginia opossum +mainland serow +canis adustus +marbled cat +oryx beisa +hystrix brachyura +silver-eared mesia +white-eyed slaty flycatcher +moustached grass warbler +nanger granti +charming thicket rat +protoxerus stangeri +buff-crested bustard +link rat +scrub hare +acryllium vulturinum +momotus momota +günther's dik-dik +niltava sumatrana +common tapeti +mazama gouazoubira +african palm civet +northern white-crowned shrike +masked palm civet +banded linsang +collocalia linchi +atherurus africanus +deer mice +dendrocitta occipitalis +herpestes semitorquatus +peeper +bottom-feeder +hatchling +pup +wolf pup +puppy +bear cub +tiger cub +suckling +arcella +difflugia +paramecium +stentor +red algae +cryptomonad +gregarine +leather carp +mirror carp +tench +dace +common shiner +golden shiner +roach +scardinius erythrophthalmus +minnow +gudgeon +carassius auratus +crucian carp +electric eel +hog sucker +redhorse +fundulus heteroclitus +striped killifish +rivulus +flagfish +swordtail +guppy +gambusia affinis +platy +mollie +reef squirrelfish +holocentrus ascensionis +soldierfish +john dory +boarfish +cornetfish +stickleback +gasterosteus aculeatus +seahorse +snipefish +shrimpfish +trumpetfish +lancelet +sea lamprey +myxine glutinosa +eptatretus +placoderm +cow shark +porbeagle +mako +shortfin mako +great white shark +basking shark +thresher +carpet shark +nurse shark +sand tiger +whale shark +cat shark +bull shark +sandbar shark +blacktip shark +dusky shark +lemon shark +blue shark +soupfin shark +smoothhound +whitetip shark +spiny dogfish +smooth hammerhead +shovelhead +angel shark +electric ray +smalltooth sawfish +guitarfish +roughtail stingray +butterfly ray +aetobatus narinari +cownose ray +manta +skate +fledgling +nestling +bird of passage +archaeopteryx +carinate +struthio camelus +cassowary +electromagnetic unit +rhea +moa +alauda arvensis +anthus pratensis +chaffinch +fringilla montifringilla +carduelis carduelis +linnet +siskin +redpoll +spinus pinus +house finch +common canary +serin +loxia curvirostra +pyrrhula pyrrhula +dark eyed junco +pooecetes gramineus +white-throated sparrow +white-crowned sparrow +spizella passerina +melospiza melodia +swamp sparrow +passerina cyanea +emberiza hortulana +emberiza schoeniclus +emberiza citrinella +yellow-breasted bunting +plectrophenax nivalis +banana quit +passer domesticus +tree sparrow +evening grosbeak +hawfinch +pine grosbeak +cardinalis cardinalis +pyrrhuloxia +chewink +green tailed towhee +ploceus philippinus +whydah +java sparrow +avadavat +zebra finch +lyrebird +arkansas kingbird +tyrannus vociferans +eastern kingbird +gray kingbird +pewee +phoebe +vermillion flycatcher +cock of the rock +bellbird +umbrella bird +ant thrush +ant shrike +spotted antbird +scissortail +muscicapa striata +missel thrush +song thrush +fieldfare +redwing +ring ouzel +american robin +clay-colored robin +hermit thrush +veery +wood thrush +luscinia megarhynchos +thrush nightingale +stonechat +whinchat +solitaire +redstart +wheatear +bluebird +bluethroat +gnatcatcher +regulus regulus +gold-crowned kinglet +ruby-crowned kinglet +blackcap +sylvia communis +sylvia curruca +acrocephalus schoenobaenus +wren warbler +orthotomus sutorius +parula warbler +wilson warbler +setophaga ruticilla +cape may warbler +yellow warbler +audubon's warbler +myrtle warbler +blackpoll +icteria virens +ovenbird +water thrush +common yellowthroat +riflebird +baltimore oriole +bullock's oriole +orchard oriole +lark +cacique +dolichonyx oryzivorus +quiscalus quiscula +rusty blackbird +red-winged blackbird +oriolus oriolus +common starling +rose-colored starling +crested myna +hill myna +american crow +corvus corax +corvus frugilegus +jackdaw +chough +perisoreus canadensis +american magpie +butcherbird +currawong +gymnorhina tibicen +winter wren +house wren +long-billed marsh wren +sedge wren +rock wren +carolina wren +cactus wren +blue mockingbird +gray catbird +brown thrasher +acanthisitta chloris +certhia americana +certhia familiaris +wall creeper +sitta canadensis +black capped chickadee +tufted titmouse +carolina chickadee +blue tit +bushtit +chamaea fasciata +auriparus flaviceps +barn swallow +cliff swallow +tree swallow +house martin +riparia riparia +purple martin +wood swallow +scarlet tanager +western tanager +piranga rubra +hepatic tanager +lanius excubitor +lanius borealis +white-rumped shrike +loggerhead shrike +black-fronted bush shrike +satin bowerbird +great bowerbird +cinclus mexicanus +red-eyed vireo +solitary vireo +blue headed vireo +waxwing +accipiter gentilis +cooper's hawk +buteonine +redtail +buteo lagopus +buteo lineatus +buteo buteo +pernis apivorus +milvus migrans +swallow-tailed kite +elanus leucurus +circus aeruginosus +circus pygargus +circus cyaneus +harrier eagle +peregrine +gyrfalcon +falco tinnunculus +sparrow hawk +pigeon hawk +hobby +audubon's caracara +eaglet +golden eagle +tawny eagle +haliaeetus leucocephalus +kamchatkan sea eagle +fishing eagle +pandion haliaetus +griffon vulture +gypaetus barbatus +neophron percnopterus +black vulture +sagittarius serpentarius +turkey vulture +vultur gryphus +gymnogyps californianus +king vulture +athene noctua +great horned owl +great grey owl +strix aluco +strix varia +screech owl +spotted owl +oriental scops owl +hoot owl +hawk owl +asio otus +laughing owl +barn owl +european fire salamander +spotted salamander +alpine salamander +common newt +notophthalmus viridescens +taricha granulosa +california newt +eft +mole salamander +ambystoma tigrinum +axolotl +waterdog +hellbender +giant salamander +olm +pacific giant salamander +plethodon cinereus +plethodon vehiculum +dusky salamander +aneides lugubris +slender salamander +shasta salamander +limestone salamander +amphiuma +siren +wood-frog +bullfrog +green frog +goliath frog +pickerel frog +tarahumara frog +rana temporaria +robber frog +barking frog +tailed frog +bufo +bufo bufo +natterjack +american toad +eurasian green toad +yosemite toad +texas toad +southwestern toad +western toad +midwife toad +fire-bellied toad +western spadefoot +plains spadefoot +spring peeper +hyla arenicolor +acris crepitans +eastern cricket frog +chorus frog +lowland burrowing treefrog +western narrow-mouthed toad +gastrophryne carolinensis +sheep frog +surinam toad +xenopus laevis +caecilian +green turtle +ridley +hawksbill sea turtle +leatherback turtle +snapping turtle +diamondback terrapin +pseudemys rubriventris +box turtle +painted turtle +tortoise +soft-shelled turtle +tuatara +flying gecko +banded gecko +amblyrhynchus cristatus +dipsosaurus dorsalis +chuckwalla +callisaurus draconoides +fringe-toed lizard +earless lizard +collared lizard +leopard lizard +sceloporus occidentalis +sceloporus undulatus +sagebrush lizard +side-blotched lizard +tree lizard +horned lizard +basilisk +worm lizard +night lizard +western skink +mountain skink +racerunner +plateau striped whiptail +chihuahuan spotted whiptail +western whiptail +checkered whiptail +teju +caiman lizard +agama +frilled lizard +alligator lizard +anguis fragilis +glass lizard +legless lizard +lanthanotus borneensis +venomous lizard +sand lizard +green lizard +african chameleon +horned chameleon +komodo dragon +crocodylus niloticus +asian crocodile +false gavial +american alligator +chinese alligator +spectacled caiman +gavial +stegosaurus +edmontonia +pachycephalosaur +protoceratops +triceratops +styracosaur +psittacosaur +ornithopod +hadrosaur +apatosaur +barosaur +diplodocus +coelophysis +tyrannosaurus +allosaur +ornithomimid +oviraptorid +velociraptor +deinonychus +utahraptor +pelycosaur +dimetrodon +pterodactyl +ichthyosaur +plesiosaur +hoop snake +carphophis amoenus +ringneck snake +hognose snake +leaf-nosed snake +green snake +blue racer +horseshoe whipsnake +masticophis lateralis +sonoran whipsnake +black rat snake +chicken snake +indian rat snake +glossy snake +gopher snake +pine snake +common kingsnake +milk snake +garter snake +tropidoclonion lineatum +sonora semiannulata +eastern ground snake +nerodia sipedon +water moccasin +viperine grass snake +red-bellied snake +banded sand snake +black-headed snake +vine snake +sonoran lyre snake +western blind snake +eastern indigo snake +boa constrictor +rubber boa +rosy boa +carpet snake +reticulated python +indian python +rock python +amethystine python +eastern coral snake +western coral snake +coral snake +australian coral snake +copperhead +indian cobra +hamadryad +ringhals +black mamba +green mamba +death adder +notechis scutatus +pseudechis porphyriacus +banded krait +taipan +vipera berus +puff adder +gaboon viper +horned viper +agkistrodon piscivorus +crotalus adamanteus +canebrake rattlesnake +crotalus viridis +crotalus cerastes +western diamondback +rock rattlesnake +tiger rattlesnake +crotalus scutulatus +speckled rattlesnake +sistrurus catenatus +ground rattler +fer-de-lance +trilobite +chelicera +scorpion +book scorpion +whip-scorpion +vinegarroon +spider +black and gold garden spider +barn spider +comb-footed spider +latrodectus mactans +tarantula +wolf spider +european wolf spider +tick +hard tick +ixodes pacificus +ixodes scapularis +ixodes ricinus +wood tick +soft tick +mite +spider mite +myriapod +tardigrade +centipede +scutigera coleoptrata +millipede +sea spider +merostomata +horseshoe crab +eurypterid +tongue worm +plymouth rock +cornish +cochin +jungle cock +chick +cock +brood hen +rhode island red +orpington +turkey cock +ocellated turkey +blackcock +greyhen +red grouse +capercaillie +spruce grouse +sage grouse +ruffed grouse +sharp-tailed grouse +greater prairie chicken +lesser prairie chicken +heath hen +piping guan +chachalaca +mallee fowl +alectura lathami +maleo +phasianus colchicus +afropavo +golden pheasant +colinus virginianus +monal +peachick +peacock +peahen +blue peafowl +green peafowl +california quail +perdix perdix +red-legged partridge +greek partridge +mountain quail +guinea hen +hoatzin +dodo +pouter pigeon +rock dove +band-tailed pigeon +columba palumbus +streptopelia turtur +ringdove +australian turtledove +mourning dove +fairy swallow +roller +carrier pigeon +painted sandgrouse +pin-tailed sandgrouse +pallas's sandgrouse +african grey +macaw +nestor notabilis +cacatua galerita +pink cockatoo +lovebird +varied lorikeet +rainbow lorikeet +carolina parakeet +lovebird +psittacula krameri +cuculus canorus +black billed cuckoo +roadrunner +crow pheasant +pheasant coucal +coracias garrulus +ground roller +kingfisher +eurasian kingfisher +belted kingfisher +bee eater +hornbill +upupa epops +wood hoopoe +tody +tree swift +archilochus colubris +thornbill +european goatsucker +whippoorwill +nighthawk +poorwill +frogmouth +oilbird +green woodpecker +downy woodpecker +yellow-shafted flicker +colaptes chrysoides +red-shafted flicker +yellow-bellied sapsucker +wryneck +piculet +barbet +puffbird +honey guide +jacamar +toucan +toucanet +resplendent quetzel +anas rubripes +greenwing +bluewing +garganey +american widgeon +anas acuta +sheldrake +oxyura jamaicensis +bufflehead +barrow's goldeneye +canvasback +aythya ferina +aythya americana +scaup +wood drake +aix galericulata +muscovy duck +eider +common scoter +clangula hyemalis +mergus merganser +american merganser +mergus serrator +smew +lophodytes cucullatus +gosling +greylag +snow goose +common brant goose +branta canadensis +branta leucopsis +coscoroba +cygnet +mute swan +whooper +whistling swan +bewick's swan +cygnus buccinator +cygnus atratus +horned screamer +chaja +echidna +platypus +didelphis marsupialis +rabbit-eared bandicoot +macropus giganteus +common wallaby +hare wallaby +nail-tailed wallaby +rock wallaby +pademelon +tree wallaby +potoroo +bettong +cuscus +trichosurus vulpecula +phascolarctos cinereus +wombat +native cat +thylacine +tasmanian devil +pouched mouse +numbat +calf +starnose mole +golden mole +american shrew mole +common shrew +masked shrew +short-tailed shrew +water shrew +least shrew +hedgehog +tailless tenrec +otter shrew +scallop shell +oyster shell +sponge (animal) +glass sponge +venus's flower basket +medusa +jellyfish +scyphozoan +chrysaora quinquecirrha +hydra +portuguese man-of-war +apolemia +anthozoan +actinia +gorgonian +sea feather +sea fan +stony coral +brain coral +staghorn coral +mushroom coral +ctenophore +beroe +worm +arrowworm +planarian +liver fluke +schistosome +echinococcus +ribbon worm +rotifer +nematode +pinworm +hookworm +annelid +earthworm +polychaete +lugworm +sea mouse +bloodworm +leech +medicinal leech +horseleech +molluscs +ormer +scorpion shell +conch +giant conch +lymnaeidae +edible snail +garden snail +brown snail +slug +nerita +bleeding tooth +neritina +whelk +moon shell +periwinkle +limpet +common limpet +keyhole limpet +river limpet +sea slug +sea hare +hermissenda crassicornis +physa +cowrie +money cowrie +tiger cowrie +chiton +clam +seashell +soft-shell clam +littleneck +cherrystone +geoduck +japanese oyster +virginia oyster +pearl oyster +saddle oyster +ark shell +blood clam +freshwater mussel +bay scallop +chambered nautilus +octopus +paper nautilus +decapod +crab +stone crab +cancer irroratus +cancer borealis +swimming crab +ovalipes ocellatus +fiddler crab +pea crab +king crab +spider crab +european spider crab +giant crab +lobster +american lobster +cape lobster +norway lobster +spiny lobster +crayfish +hermit crab +shrimp +krill +opossum shrimp +squilla +woodlouse +sea louse +amphipod +skeleton shrimp +whale louse +daphnia +fairy shrimp +brine shrimp +tadpole shrimp +copepod +cyclops +white stork +black stork +adjutant bird +marabou +saddlebill +mycteria americana +shoebill +wood ibis +sacred ibis +common spoonbill +roseate spoonbill +flamingo +great blue heron +little blue heron +egretta thula +egretta garzetta +great white heron +american egret +bubulcus ibis +nycticorax nycticorax +nyctanassa violacea +cochlearius cochlearius +american bittern +european bittern +least bittern +grus americana +courlan +limpkin +crested cariama +chunga +weka +crake +florida gallinule +moorhen +purple gallinule +european gallinule +notornis +fulica americana +old world coot +great bustard +plain turkey +plain wanderer +trumpeter +brazilian trumpeter +piping plover +charadrius vociferus +dotterel +golden plover +lapwing +arenaria interpres +black turnstone +surfbird +actitis hypoleucos +spotted sandpiper +red-backed sandpiper +tringa nebularia +tringa totanus +yellowlegs +calidris melanotos +knot +calidris ferruginea +sanderling +upland sandpiper +ruff +tattler +woodcock +snipe +curlew +hudsonian godwit +black-necked stilt +himantopus himantopus +stilt +banded stilt +avocet +oystercatcher +northern phalarope +wilson's phalarope +pratincole +cream-colored courser +crocodile bird +mew +larus marinus +laughing gull +ivory gull +kittiwake +sterna hirundo +skimmer +parasitic jaeger +great skua +razorbill +little auk +great auk +black guillemot +pigeon guillemot +common murre +thick-billed murre +atlantic puffin +horned puffin +tufted puffin +grebe +white pelican +frigatebird +solan +booby +anhinga anhinga +tropic bird +adelie +king penguin +emperor penguin +jackass penguin +rock hopper +black-footed albatross +white-chinned petrel +giant petrel +manx shearwater +storm petrel +right whale +bowhead +blue whale +finback +sei whale +balaenoptera acutorostrata +humpback +eschrichtius robustus +sperm whale +pygmy sperm whale +beaked whale +common dolphins +tursiops truncatus +pacific bottlenose dolphin +phocoena phocoena +vaquita +grampus +killer whale +pilot whale +river dolphin +narwhal +white whale +trichechus manatus +dugong +steller's sea cow +crabeater seal +guadalupe fur seal +fur seal +otaria byronia +zalophus californianus +australian sea lion +steller sea lion +harbor seal +harp seal +elephant seal +bearded seal +hooded seal +atlantic walrus +pacific walrus +orycteropus afer +chihuahua +maltese dog +blenheim spaniel +papillon +toy terrier +rhodesian ridgeback +afghan hound +basset +bloodhound +bluetick +foxhound +plott hound +borzoi +irish wolfhound +italian greyhound +ibizan hound +norwegian elkhound +otterhound +saluki +scottish deerhound +weimaraner +staffordshire bullterrier +american pit bull terrier +bedlington terrier +border terrier +kerry blue terrier +irish terrier +norfolk terrier +norwich terrier +yorkshire terrier +toy manchester +smooth-haired fox terrier +wire hair fox terrier +lakeland terrier +sealyham terrier +airedale +cairn terrier +australian terrier +dandie dinmont +boston bull +schnauzer +scottish terrier +tibetan terrier +skye terrier +west highland white terrier +flat-coated retriever +curly-coated retriever +golden retriever +labrador retriever +chesapeake bay retriever +pointer +english setter +irish setter +gordon setter +field spaniel +english springer +welsh springer spaniel +english cocker spaniel +sussex spaniel +water spaniel +kuvasz +schipperke +belgian sheepdog +kelpy +komondor +old english sheepdog +border collie +bouvier des flandres +rottweiler +german shepherd +miniature pinscher +sennenhunde +boxer +tibetan mastiff +english bulldog +saint bernard +eskimo dog +alaskan malamute +siberian husky +dalmatian +affenpinscher +basenji +pug +great pyrenees +samoyed +pomeranian +chow +keeshond +griffon +pembroke welsh corgi +cardigan +poodle +mexican hairless +timber wolf +canis lupus tundrarum +red wolf +coydog +dingo +cuon alpinus +crab-eating dog +raccoon dog +lycaon pictus +striped hyena +brown hyena +crocuta crocuta +aardwolf +reynard +black fox +silver fox +red fox +kit fox +blue fox +urocyon cinereoargenteus +kitten +tortoiseshell +persian cat +angora +blue point siamese +sand cat +felis silvestris +puma concolor +jaguarundi +leptailurus serval +leopard cat +leopardus wiedii +manul +common lynx +canada lynx +bobcat +spotted lynx +caracal +panther +snow leopard +panthera onca +lionet +bengal tiger +liger +tiglon +cheetah +saber-toothed tiger +syrian bear +grizzly bear +kodiak bear +cinnamon bear +asiatic black bear +polar bear +sloth bear +large civet +small civet +binturong +cryptoprocta +fossa +fanaloka +genet +hemigalus derbyanus +indian mongoose +ichneumon +slender-tailed meerkat +suricate +pteropus hypomelanus +harpy +cynopterus sphinx +mouse-eared bat +macrotus +phyllostomus hastatus +horseshoe bat +false vampire +big-eared bat +lasiurus borealis +brown bat +little brown bat +cave myotis +big brown bat +serotine +pallid bat +pipistrelle +long-eared bat +freetail +tadarida brasiliensis +mastiff bat +vampire bat +insect +social insect +gallfly +scorpion fly +hanging fly +springtail +beetle +tiger beetle +ladybug +adalia bipunctata +mexican bean beetle +hippodamia convergens +vedalia +ground beetle +bombardier beetle +calosoma +searcher +firefly +sawyer +pine sawyer +leaf beetle +flea beetle +leptinotarsa decemlineata +carpet beetle +buffalo carpet beetle +black carpet beetle +clerid beetle +bee beetle +dung beetle +scarab +dorbeetle +june beetle +green june beetle +popillia japonica +oriental beetle +rhinoceros beetle +cockchafer +macrodactylus subspinosus +cetonia aurata +stag beetle +elaterid beetle +click beetle +wireworm +water beetle +whirligig beetle +deathwatch beetle +weevil +snout beetle +boll weevil +blister beetle +oil beetle +spanish fly +bark beetle +spruce bark beetle +rove beetle +darkling beetle +flour beetle +seed beetle +pea weevil +bean weevil +rice weevil +asian longhorned beetle +web spinner +louse +body louse +bird louse +flea +pulex irritans +dog flea +cat flea +chigoe +sticktight +gall midge +hessian fly +tsetse fly +calliphora vicina +greenbottle +flesh fly +tachina fly +botfly +warble fly +horse flies +bee fly +robber flies +apple maggot +mediterranean fruit fly +drosophila +vinegar fly +louse fly +yellow-fever mosquito +aedes albopictus +anopheline +common mosquito +culex quinquefasciatus +punkie +fungus gnat +crane fly +queen bee +worker bee +africanized bee +black bee +carniolan bee +italian bee +carpenter bee +bumblebee +cuckoo-bumblebee +andrena +leaf-cutting bee +mason bee +potter bee +giant hornet +vespula vulgaris +bald-faced hornet +vespula maculifrons +polistes annularis +potter wasp +velvet ant +mason wasp +cicada killer +mud dauber +ichneumon fly +sawfly +pharaoh ant +little black ant +army ant +carpenter ant +fire ant +wood ant +formica fusca +sanguinary ant +bulldog ant +amazon ant +dry-wood termite +mastotermes darwiniensis +grasshopper +short-horned grasshopper +locusta migratoria +migratory grasshopper +katydid +mormon cricket +mole cricket +european house cricket +field cricket +snowy tree cricket +diapheromera +oriental cockroach +periplaneta americana +periplaneta australasiae +german cockroach +praying mantis +leaf bug +mirid bug +poecilocapsus lineatus +lygus bug +tarnished plant bug +lace bug +lygaeid +chinch bug +coreid bug +anasa tristis +leaf-footed bug +backswimmer +true bug +giant water bug +water scorpion +water boatman +common pond-skater +conenose +arilus cristatus +firebug +cotton stainer +whitefly +citrus mealybug +aphid +dog-day cicada +seventeen-year locust +philaenus spumarius +pine spittlebug +saratoga spittlebug +leafhopper +psocid +booklouse +ephemerid +stonefly +green lacewing +brown lacewing +corydalus cornutus +fish fly +alderfly +snakefly +mantispid +caddis fly +bristletail +silverfish +firebrat +jumping bristletail +thrips +earwig +common european earwig +butterfly +mourning cloak +tortoiseshell +painted beauty +admiral +red admiral +white admiral +limenitis arthemis +red-spotted purple +viceroy (butterfly) +anglewing +ringlet +polygonia comma +silverspot +emperor butterfly +purple emperor +danaid +danaus plexippus +pierid +small white +large white +southern cabbage butterfly +sulphur butterfly +blue +american copper +strymon melinus +moth miller +leaf roller +tea tortrix +orange tortrix +codling moth +lymantriid +lymantria dispar +browntail +euproctis chrysorrhoea +measuring worm +galleria mellonella +corn borer +mediterranean flour moth +tobacco moth +almond moth +raisin moth +casemaking clothes moth +carpet moth +grain moth +cutworm +red underwing +antler moth +heliothis moth +armyworm +armyworm +spodoptera exigua +spodoptera frugiperda +manduca sexta +tomato hornworm +acherontia atropos +bombycid +silkworm +emperor +imperial moth +actias luna +cecropia +cynthia moth +automeris io +polyphemus moth +tussah +atlas moth +tiger moth +cinnabar +eggar +malacosoma americana +tent-caterpillar moth +forest tent caterpillar +lappet +webworm moth +hyphantria cunea +garden webworm +woolly bear moth +maggot +chrysalis +peanut worm +echinoderm +starfish +brittle star +basket star +astrophyton muricatum +sea urchin +crinoid +sea lily +feather star +sea cucumber +trepang +rabbit ears +oryctolagus cuniculus +sylvilagus floridanus +swamp rabbit +white-tailed jackrabbit +lepus californicus +polar hare +lepus americanus +belgian hare +little chief hare +collared pika +mus musculus +harvest mouse +nude mouse +sewer rat +rattus rattus +bandicoot rat +beaver rat +wood mouse +muskrat +cotton rat +wood rat +vole +neotoma fuscipes +hamster +jird +sand rat +lemming +brush-tailed porcupine +long-tailed porcupine +erethizon dorsatum +silky pocket mouse +plains pocket mouse +hispid pocket mouse +kangaroo rat +kangaroo mouse +meadow jumping mouse +jaculus jaculus +loir +lerot +gopher +plains pocket gopher +thomomys bottae +eastern grey squirrel +western grey squirrel +sciurus niger +black squirrel +american red squirrel +chickeree +antelope squirrel +mantled ground squirrel +suslik +flickertail +rock squirrel +arctic ground squirrel +prairie dog +tamias striatus +chipmunk +american flying squirrel +groundhog +hoary marmot +yellowbelly marmot +beaver +sewellel +guinea pig +aperea +mara +capybara +myocastor coypus +chinchilla +mountain chinchilla +viscacha +naked mole rat +procavia capensis +equus caballus +eohippus +foal +colt +buckskin +pinto +burro +hinny +equus asinus +kiang +onager +chigetai +common zebra +mountain zebra +equus grevyi +equus quagga +indian rhinoceros +woolly rhinoceros +ceratotherium simum +black rhinoceros +tapirus terrestris +malayan tapir +piglet +tayassu pecari +hippopotamus amphibius +texas longhorn +zebu +yak +red poll +santa gertrudis +aberdeen angus +charolais +galloway +carabao +cape buffalo +gaur +american bison +wisent +sheep +lamb +lambkin +baa-lamb +argali +marco polo sheep +urial +dall sheep +ovis canadensis +mouflon +barbary sheep +angora +markhor +capra ibex +mountain goat +goral +chamois +takin +blackbuck +gerenuk +addax +wildebeest +hartebeest +sassaby +impala +eudorcas thomsonii +gazella subgutturosa +antidorcas marsupialis +bongo +tragelaphus strepsiceros +lesser kudu +nyala +mountain nyala +tragelaphus scriptus +nilgai +sable antelope +saiga +raphicerus campestris +common eland +giant eland +kobus kob +lechwe +puku +gemsbok +antilocapra americana +stag +pricket +fawn +hart +hind +wapiti +japanese deer +odocoileus virginianus +black tailed deer +moose +roe deer +woodland caribou +barren ground caribou +muntjac +musk deer +pere david's deer +kanchil +napu +camelus dromedarius +bactrian camel +vicuña +giraffe +okapi +stoat +mustela nivalis +longtail weasel +american mink +ferret +black-footed ferret +muishond +eurasian otter +sea otter +striped skunk +hooded skunk +conepatus leuconotus +spotted skunk +american badger +meles meles +ratel +ferret badger +hog badger +wolverine +grison +pine marten +martes americana +stone marten +fisher +martes flavigula +eira barbara +dasypus novemcinctus +tatouay +peludo +priodontes maximus +three-toed sloth +two-toed sloth +ant bear +silky anteater +tadpole +orangutan +gorilla +chimpanzee +gibbon +siamang +talapoin +grivet +vervet +green monkey +mangabey +patas +papio ursinus +mandrill +macaca mulatta +macaca radiata +barbary ape +entellus +guereza +proboscis monkey +pygmy marmoset +tamarin +pinche +douroucouli +howler monkey +saki +uakari +titi +ateles geoffroyi +squirrel monkey +woolly monkey +tree shrew +prosimian +madagascar cat +aye-aye +slender loris +slow loris +potto +angwantibo +galago +indri +woolly indris +tarsius syrichta +cynocephalus variegatus +elephas maximus +loxodonta africana +woolly mammoth +raccoon +bassarisk +kinkajou +red panda +giant panda +parr +mouthbreeder +barracouta +northern snakehead +coelacanth +lungfish +european catfish +electric catfish +horned pout +brown bullhead +blue catfish +flathead catfish +armored catfish +sea catfish +atlantic cod +whiting +burbot +pollack +ling +cusk +grenadier +tuna +moray +conger +whitebait +menhaden +pacific sardine +atlantic salmon +sockeye +chinook +chum salmon +oncorhynchus kisutch +salmo trutta +sea trout +arctic char +lake whitefish +cisco +round whitefish +capelin +ladyfish +bonefish +lanternfish +lizardfish +lancetfish +opah +ribbonfish +oarfish +batfish +goosefish +toadfish +frogfish +sargassum fish +needlefish +flying fish +halfbeak +saury +perch +climbing perch +yellow perch +european perch +walleye +snail darter +sandfish +cusk-eel +brotula +robalo +snook +northern pike +muskellunge +chain pickerel +redfin pickerel +pomoxis nigromaculatus +white crappie +pumpkinseed +lepomis macrochirus +spotted sunfish +ambloplites rupestris +micropterus dolomieu +largemouth +yellow bass +black sea bass +striped bass +hind +rock hind +creole-fish +jewfish +soapfish +rainbow seaperch +bigeye +catalufa +cardinalfish +tilefish +pomatomus saltatrix +cobia +sharksucker +crevalle jack +yellow jack +rainbow runner +threadfish +moonfish +amberjack +rudderfish +kingfish +florida pompano +pilotfish +bigeye scad +mackerel scad +round scad +coryphaena hippurus +pomfret +tetra +cardinal tetra +piranha +cichlid +red snapper +grey snapper +mutton snapper +lutjanus apodus +ocyurus chrysurus +spanish grunt +cottonwick +sailor's-choice +porkfish +red porgy +sheepshead +lagodon rhomboides +sheepshead porgy +striped drum +jackknife-fish +silver perch +sciaenops ocellatus +mulloway +maigre +micropogonias undulatus +yellowfin croaker +corbina +spotted weakfish +mullet +yellow goatfish +mugil cephalus +white mullet +liza +silversides +great barracuda +bermuda chub +spadefish +chaetodon +angelfish +rock beauty +beaugregory +clown anemone fish +abudefduf saxatilis +pigfish +hogfish +slippery dick +puddingwife +bluehead +razor fish +pearly razorfish +tautog +cunner +parrotfish +threadfin +jawfish +stargazer +blenny +shanny +clinid +pikeblenny +gunnel +rock gunnel +wolffish +viviparous eelpout +ocean pout +sand lance +goby +mudskipper +flathead +archerfish +surgeonfish +doctorfish +oilfish +cutlassfish +chub mackerel +wahoo +king mackerel +scomberomorus maculatus +cero +bluefin +skipjack +bonito +swordfish +atlantic sailfish +blue marlin +black marlin +striped marlin +white marlin +spearfish +palometa +harvestfish +squaretail +barrelfish +clingfish +tripletail +yellowfin mojarra +bowfin +paddlefish +beluga whale +gar +plumed scorpionfish +lionfish +stonefish +copper rockfish +vermillion rockfish +red rockfish +rosefish +bullhead +sea raven +lumpsucker +pogge +kelp greenling +painted greenling +tub gurnard +sea robin +queen triggerfish +filefish +leatherjacket +cowfish +puffer +diodon hystrix +balloonfish +burrfish +ocean sunfish +flounder +plaice +yellowtail flounder +winter flounder +halibut +atlantic halibut +pacific halibut +southern flounder +summer flounder +sand dab +brill +turbot +tonguefish +english sole +hogchoker +smoker +person +poultry +hen +duckling +goose +grouse +quail +partridge +saltwater fish +bream +freshwater bass +dolphinfish +carp +pike +monkfish +catfish +sunfish +spanish mackerel +squid +escargots +panfish +mussel +anchovy (food) +eel +lingcod +huitre +quahaug +cockle +blue crab +dungeness crab +flatfish +redfish +rockfish +european lobster +crayfish +prawn +rainbow trout +brook trout +lake trout +silver salmon +avifauna +shell +mermaid +adult +black man +black woman +white man +accordionist +aerialist +amputee +angler +archer +astronaut +athlete +aviatrix +baby +baldhead +ballplayer +bullfighter +basketball player +bassoonist +bat boy +belly dancer +billiard player +boatman +bride +bridesmaid +caddie +card player +carillonneur +cavalryman +cellist +charioteer +cheerleader +chess player +child +cigarette smoker +cigar smoker +clarinetist +climber +clown +coachman +computer user +conductor +cricketer +cyborg +cyclist +cymbalist +dancer +diver +physician +draftsman +drinker +drummer +dunker +falconer +fencer +fighter pilot +fire-eater +fireman +flautist +football player +girl +goatherd +golfer +grinner +groom +groomsman +guard +guitarist +gymnast +hairdresser +halberdier +harpist +helmsman +herder +hockey player +hornist +equestrian +horsewoman +hugger +huntress +hurdler +interviewer +keyboardist +kisser +kneeler +knitter +koto player +lacrosse player +laugher +lumberman +macebearer +mahout +maid +male child +man +masquerader +masseur +masseuse +miner +muralist +musher +musician +musketeer +muslimah +myope +nurse +oarswoman +oboist +oldster +old woman +organ-grinder +painter +pallbearer +parachutist +passenger +passerby +pavement artist +peasant +percussionist +photographer +pianist +picnicker +pilot +pipe smoker +pisser +plasterer +police officer +portraitist +punter +rider +ring girl +roadman +roller-skater +ropewalker +runner +sailor +saunterer +saxophonist +schoolchild +schoolgirl +serviceman +sheepherder +shot putter +sign painter +singer +sipper +skateboarder +skier +sledder +sleeper +snake charmer +sneezer +soccer player +soldier +spacewalker +speaker +street cleaner +stretcher-bearer +student +surfer +sweeper +swimmer +telephone operator +toiler +tennis player +tiler +trombonist +trumpeter +unicyclist +vaulter +violinist +volleyball player +waitress +weatherman +weightlifter +whisperer +woman +woodcarver +young buck +youth +coral +caucasian women +chianina +otocyon +coquerel's sifaka +pit bull +hippotigris +miniature dachshund +sinistral snail +goat kid +badminton player +polo player +asian elephant +windsurfer +table tennis player +taekwondo athlete +somali goat +street musician +hairless cats +rhesus macaque +wistar rat +freediver +beach volleyball player +wheelchair tennis player +feral pigeon +cornicen +owtscharka +helicopter pilot +odocoileus virginianus borealis +maltipoo +maremma sheepdog +ocean rower +cane corso +alaskan husky +reindeer in south georgia +normande cattle +wakeboarder +sparus aurata +simmental cattle +western osprey +common pheasant +paraglider pilot +polled hereford +wingless insect +bicolor cat +catalan sheepdog +male goat +danish swedish farmdog +akita +finnish lapphund +british shorthair +british semi-longhair +disc golfer +guard goose +pregnant women +dolichohippus +can de palleiro +morkie +disabled woman +swedish blue duck +gliding ant +american hairless terrier +american akita +anatolian shepherd +australian cattle dog +bearded collie +chinese chongqing dog +american eskimo dog +dogo canario +english shepherd +aidi +entlebucher mountain dog +shinty player +bullmastiff +alaskan klee kai +akbash +american mastiff +labradoodle +jack russell terrier +dobermann +english mastiff +bull and terrier +portuguese water dog +central asian shepherd dog +molosser +rough collie +smooth fox terrier +redbone coonhound +podenco canario +portuguese podengo +swedish vallhund +northern inuit dog +wire fox terrier +exotic shorthair +cornish rex +non-human primate +freshwater snail +andalusian horse +maine-anjou +africanis +crested duck +german spitz mittel +american bully +arm wrestler +highland cattle +tango dancer +powerchair footballer +cow herder +judoka +ray fish +concertmaster +northwestern crow +narragansett turkey +egyptian mau +dragon li +kurilian bobtail +urban coyote +barnevelder +aylesbury duck +sphynx kittens +belted galloway +pterois volitans +silver y +rackets player +cayuga duck +exmoor pony +pitador +jersey cattle +pekin duck +westiepoo +card +napkin +cheese sauce +model +box +jam +centerpiece +picture_frame +bannister +shelf +mirror +bar +bouquet +vase +decoration +ashcan +lamppost +ring +booth +milk_vetch +iceland poppy +shoe +trouser +day_lily +door +nidus +tricycle +tongs +lighting_fixture +sloth +writing_implement +percussion_instrument +acarine +cricket +cutting_implement +signaling_device +vessel +ant +face_mask +piece_of_cloth +bee +module +hand_tool +elephant +container +board +kangaroo +foodstuff +ball +tiger +animal +moth +butt +signboard +garden_tool +toy +rat +dairy_product +photographic_equipment +anteater +snake +mammal +jewel +squirrel +heater +dinosaur +musical_instrument +optical_instrument +crustacean +otter +housing +saurian +mechanical_device +frozen_dessert +currency +fireplace +cleaning_implement +kitchen_appliance +dim_sum +cell +lion +bat (animal) +conduit +cetacean +fish +hardware +plastic +protective_covering +microorganism +vehicle +paper +sports_ball +drafting_instrument +monkey +sweet +kitchenware +postbox +component +mat +keyboard_instrument +wind_instrument +elastic_device +rodent +fishing_gear +rescue_equipment +canine +electronic_device +plant +paint +shop +cockroach +fabric +tent +dish +column +camel +tube +electrical_device +dragonfly +fungus +turtle +deer +makeup +furniture +amphibian +"ducks +grain +car +fox +fly +cleaning products +memory_device +celestial_body +root_vegetable +cart +cloth_covering +bath_linen +shackle +plug +weapon +emblem +ox +reptile +shellfish +man +entity +sports_equipment +barn +medical_instrument +public_transport +goat_antelope +table_linen +coelenterate +framework +antique +plastic_art +flower +stringed_instrument +medicine +traffic light +seafood +toiletries +fruit +dressing +cat +seal +crocodile +artifact +armadillo +power_tool +accessory +instrumentality +bridge +submachine_gun +salamander +vegetable +baked_goods +building +frog +meat +cactus +kitchen_utensil +arthropod +clothing diff --git a/configs/v3det/deformable-detr-refine-twostage_r50_8xb4_sample1e-3_v3det_50e.py b/configs/v3det/deformable-detr-refine-twostage_r50_8xb4_sample1e-3_v3det_50e.py new file mode 100644 index 00000000000..97544a27edf --- /dev/null +++ b/configs/v3det/deformable-detr-refine-twostage_r50_8xb4_sample1e-3_v3det_50e.py @@ -0,0 +1,108 @@ +_base_ = '../deformable_detr/deformable-detr-refine-twostage_r50_16xb2-50e_coco.py' # noqa + +model = dict( + bbox_head=dict(num_classes=13204), + test_cfg=dict(max_per_img=300), +) + +data_root = 'data/V3Det/' +train_pipeline = [ + dict(type='LoadImageFromFile', backend_args={{_base_.backend_args}}), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='RandomFlip', prob=0.5), + dict( + type='RandomChoice', + transforms=[ + [ + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ], + [ + dict( + type='RandomChoiceResize', + # The radio of all image in train dataset < 7 + # follow the original implement + scales=[(400, 4200), (500, 4200), (600, 4200)], + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=(384, 600), + allow_negative_crop=True), + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ] + ]), + dict(type='PackDetInputs') +] + +train_dataloader = dict( + _delete_=True, + batch_size=4, + num_workers=4, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + batch_sampler=dict(type='AspectRatioBatchSampler'), + dataset=dict( + type='ClassBalancedDataset', + oversample_thr=1e-3, + dataset=dict( + type='V3DetDataset', + data_root=data_root, + ann_file='annotations/v3det_2023_v1_train.json', + data_prefix=dict(img=''), + filter_cfg=dict(filter_empty_gt=False), + pipeline=train_pipeline, + backend_args=None))) +val_dataloader = dict( + dataset=dict( + type='V3DetDataset', + data_root=data_root, + ann_file='annotations/v3det_2023_v1_val.json', + data_prefix=dict(img=''))) +test_dataloader = val_dataloader + +val_evaluator = dict( + ann_file=data_root + 'annotations/v3det_2023_v1_val.json', + use_mp_eval=True, + proposal_nums=[300]) +test_evaluator = val_evaluator + +# training schedule for 50e +# when using RFS, bs32, each epoch ~ 5730 iter +max_iter = 286500 +train_cfg = dict( + _delete_=True, + type='IterBasedTrainLoop', + max_iters=max_iter, + val_interval=max_iter / 5) +val_cfg = dict(type='ValLoop') +test_cfg = dict(type='TestLoop') + +# learning rate +param_scheduler = [ + dict( + type='MultiStepLR', + begin=0, + end=max_iter, + by_epoch=False, + milestones=[229200], # 40e + gamma=0.1) +] + +default_hooks = dict( + timer=dict(type='IterTimerHook'), + param_scheduler=dict(type='ParamSchedulerHook'), + checkpoint=dict( + type='CheckpointHook', by_epoch=False, interval=5730, + max_keep_ckpts=3)) + +log_processor = dict(type='LogProcessor', window_size=50, by_epoch=False) diff --git a/configs/v3det/deformable-detr-refine-twostage_swin_16xb2_sample1e-3_v3det_50e.py b/configs/v3det/deformable-detr-refine-twostage_swin_16xb2_sample1e-3_v3det_50e.py new file mode 100644 index 00000000000..e640cd604a9 --- /dev/null +++ b/configs/v3det/deformable-detr-refine-twostage_swin_16xb2_sample1e-3_v3det_50e.py @@ -0,0 +1,27 @@ +_base_ = 'deformable-detr-refine-twostage_r50_8xb4_sample1e-3_v3det_50e.py' + +pretrained = 'https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_base_patch4_window7_224.pth' # noqa + +model = dict( + backbone=dict( + _delete_=True, + type='SwinTransformer', + embed_dims=128, + depths=[2, 2, 18, 2], + num_heads=[4, 8, 16, 32], + window_size=7, + mlp_ratio=4, + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.3, + patch_norm=True, + out_indices=(1, 2, 3), + with_cp=False, + convert_weights=True, + init_cfg=dict(type='Pretrained', checkpoint=pretrained)), + neck=dict(in_channels=[256, 512, 1024]), +) + +train_dataloader = dict(batch_size=2, num_workers=2) diff --git a/configs/v3det/dino-4scale_r50_8xb2_sample1e-3_v3det_36e.py b/configs/v3det/dino-4scale_r50_8xb2_sample1e-3_v3det_36e.py new file mode 100644 index 00000000000..d9e6e6be071 --- /dev/null +++ b/configs/v3det/dino-4scale_r50_8xb2_sample1e-3_v3det_36e.py @@ -0,0 +1,109 @@ +_base_ = '../dino/dino-4scale_r50_8xb2-36e_coco.py' + +model = dict( + bbox_head=dict(num_classes=13204), + test_cfg=dict(max_per_img=300), +) + +data_root = 'data/V3Det/' +train_pipeline = [ + dict(type='LoadImageFromFile', backend_args={{_base_.backend_args}}), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='RandomFlip', prob=0.5), + dict( + type='RandomChoice', + transforms=[ + [ + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ], + [ + dict( + type='RandomChoiceResize', + # The radio of all image in train dataset < 7 + # follow the original implement + scales=[(400, 4200), (500, 4200), (600, 4200)], + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=(384, 600), + allow_negative_crop=True), + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ] + ]), + dict(type='PackDetInputs') +] +train_dataloader = dict( + _delete_=True, + batch_size=2, + num_workers=2, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + batch_sampler=dict(type='AspectRatioBatchSampler'), + dataset=dict( + type='ClassBalancedDataset', + oversample_thr=1e-3, + dataset=dict( + type='V3DetDataset', + data_root=data_root, + ann_file='annotations/v3det_2023_v1_train.json', + data_prefix=dict(img=''), + filter_cfg=dict(filter_empty_gt=False), + pipeline=train_pipeline, + backend_args=None))) +val_dataloader = dict( + dataset=dict( + type='V3DetDataset', + data_root=data_root, + ann_file='annotations/v3det_2023_v1_val.json', + data_prefix=dict(img=''))) +test_dataloader = val_dataloader + +val_evaluator = dict( + ann_file=data_root + 'annotations/v3det_2023_v1_val.json', + use_mp_eval=True, + proposal_nums=[300]) +test_evaluator = val_evaluator + +# training schedule for 36e +# when using RFS, bs16, each epoch ~ 11460 iter +max_iter = 412560 +train_cfg = dict( + _delete_=True, + type='IterBasedTrainLoop', + max_iters=max_iter, + val_interval=max_iter / 5) +val_cfg = dict(type='ValLoop') +test_cfg = dict(type='TestLoop') + +# learning rate +param_scheduler = [ + dict( + type='MultiStepLR', + begin=0, + end=max_iter, + by_epoch=False, + milestones=[343800], # 30e + gamma=0.1) +] + +default_hooks = dict( + timer=dict(type='IterTimerHook'), + param_scheduler=dict(type='ParamSchedulerHook'), + checkpoint=dict( + type='CheckpointHook', + by_epoch=False, + interval=11460, + max_keep_ckpts=3)) + +log_processor = dict(type='LogProcessor', window_size=50, by_epoch=False) diff --git a/configs/v3det/dino-4scale_swin_16xb1_sample1e-3_v3det_36e.py b/configs/v3det/dino-4scale_swin_16xb1_sample1e-3_v3det_36e.py new file mode 100644 index 00000000000..100c4ba4b8c --- /dev/null +++ b/configs/v3det/dino-4scale_swin_16xb1_sample1e-3_v3det_36e.py @@ -0,0 +1,27 @@ +_base_ = 'dino-4scale_r50_8xb2_sample1e-3_v3det_36e.py' + +pretrained = 'https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_base_patch4_window7_224.pth' # noqa + +model = dict( + backbone=dict( + _delete_=True, + type='SwinTransformer', + embed_dims=128, + depths=[2, 2, 18, 2], + num_heads=[4, 8, 16, 32], + window_size=7, + mlp_ratio=4, + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.3, + patch_norm=True, + out_indices=(1, 2, 3), + with_cp=False, + convert_weights=True, + init_cfg=dict(type='Pretrained', checkpoint=pretrained)), + neck=dict(in_channels=[256, 512, 1024]), +) + +train_dataloader = dict(batch_size=1) diff --git a/configs/v3det/faster_rcnn_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py b/configs/v3det/faster_rcnn_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py new file mode 100644 index 00000000000..3d306fb0948 --- /dev/null +++ b/configs/v3det/faster_rcnn_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py @@ -0,0 +1,72 @@ +_base_ = [ + '../_base_/models/faster-rcnn_r50_fpn.py', '../_base_/datasets/v3det.py', + '../_base_/schedules/schedule_2x.py', '../_base_/default_runtime.py' +] +# model settings +model = dict( + roi_head=dict( + bbox_head=dict( + num_classes=13204, + reg_class_agnostic=True, + cls_predictor_cfg=dict( + type='NormedLinear', tempearture=50, bias=True), + loss_cls=dict( + type='CrossEntropyCustomLoss', + num_classes=13204, + use_sigmoid=True, + loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0))), + # model training and testing settings + train_cfg=dict( + rpn_proposal=dict(nms_pre=4000, max_per_img=2000), + rcnn=dict( + assigner=dict( + perm_repeat_gt_cfg=dict(iou_thr=0.7, perm_range=0.01)))), + test_cfg=dict( + rcnn=dict( + score_thr=0.0001, + nms=dict(type='nms', iou_threshold=0.6), + max_per_img=300))) +# dataset settings +train_dataloader = dict(batch_size=4, num_workers=8) + +# training schedule for 2x +max_iter = 68760 * 2 +train_cfg = dict( + _delete_=True, + type='IterBasedTrainLoop', + max_iters=max_iter, + val_interval=max_iter) + +# learning rate +param_scheduler = [ + dict( + type='LinearLR', + start_factor=1.0 / 2048, + by_epoch=False, + begin=0, + end=5000), + dict( + type='MultiStepLR', + begin=0, + end=max_iter, + by_epoch=False, + milestones=[45840 * 2, 63030 * 2], + gamma=0.1) +] + +# optimizer +optim_wrapper = dict( + type='OptimWrapper', + optimizer=dict(_delete_=True, type='AdamW', lr=1e-4 * 1, weight_decay=0.1), + clip_grad=dict(max_norm=35, norm_type=2)) + +# Default setting for scaling LR automatically +# - `enable` means enable scaling LR automatically +# or not by default. +# - `base_batch_size` = (8 GPUs) x (2 samples per GPU). +auto_scale_lr = dict(enable=False, base_batch_size=32) + +default_hooks = dict( + checkpoint=dict(type='CheckpointHook', by_epoch=False, interval=5730 * 2)) +log_processor = dict(type='LogProcessor', window_size=50, by_epoch=False) diff --git a/configs/v3det/faster_rcnn_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py b/configs/v3det/faster_rcnn_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py new file mode 100644 index 00000000000..b0b11108112 --- /dev/null +++ b/configs/v3det/faster_rcnn_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py @@ -0,0 +1,27 @@ +_base_ = [ + './faster_rcnn_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py', +] + +pretrained = 'https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_base_patch4_window7_224.pth' # noqa + +# model settings +model = dict( + backbone=dict( + _delete_=True, + type='SwinTransformer', + embed_dims=128, + depths=[2, 2, 18, 2], + num_heads=[4, 8, 16, 32], + window_size=7, + mlp_ratio=4, + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.3, + patch_norm=True, + out_indices=(0, 1, 2, 3), + with_cp=False, + convert_weights=True, + init_cfg=dict(type='Pretrained', checkpoint=pretrained)), + neck=dict(in_channels=[128, 256, 512, 1024])) diff --git a/configs/v3det/fcos_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py b/configs/v3det/fcos_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py new file mode 100644 index 00000000000..b78e38c93cb --- /dev/null +++ b/configs/v3det/fcos_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py @@ -0,0 +1,116 @@ +_base_ = [ + '../_base_/datasets/v3det.py', '../_base_/schedules/schedule_2x.py', + '../_base_/default_runtime.py' +] +# model settings +model = dict( + type='FCOS', + data_preprocessor=dict( + type='DetDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True, + pad_size_divisor=32), + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=True), + norm_eval=True, + style='pytorch', + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50')), + neck=dict( + type='FPN', + in_channels=[256, 512, 1024, 2048], + out_channels=256, + start_level=1, + add_extra_convs='on_output', # use P5 + num_outs=5, + relu_before_extra_convs=True), + bbox_head=dict( + type='FCOSHead', + num_classes=13204, + in_channels=256, + stacked_convs=4, + feat_channels=256, + strides=[8, 16, 32, 64, 128], + cls_predictor_cfg=dict(type='NormedLinear', tempearture=50, bias=True), + loss_cls=dict( + type='FocalCustomLoss', + use_sigmoid=True, + num_classes=13204, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox=dict(type='IoULoss', loss_weight=1.0), + loss_centerness=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0)), + # model training and testing settings + train_cfg=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.4, + min_pos_iou=0, + ignore_iof_thr=-1, + perm_repeat_gt_cfg=dict(iou_thr=0.7, perm_range=0.01)), + allowed_border=-1, + pos_weight=-1, + debug=False), + test_cfg=dict( + nms_pre=1000, + min_bbox_size=0, + score_thr=0.0001, + nms=dict(type='nms', iou_threshold=0.6), + max_per_img=300)) +# dataset settings + +backend_args = None + +train_dataloader = dict(batch_size=2, num_workers=8) + +# training schedule for 2x +max_iter = 68760 * 2 * 2 +train_cfg = dict( + _delete_=True, + type='IterBasedTrainLoop', + max_iters=max_iter, + val_interval=max_iter) + +# learning rate +param_scheduler = [ + dict( + type='LinearLR', + start_factor=1.0 / 2048, + by_epoch=False, + begin=0, + end=5000 * 2), + dict( + type='MultiStepLR', + begin=0, + end=max_iter, + by_epoch=False, + milestones=[45840 * 2 * 2, 63030 * 2 * 2], + gamma=0.1) +] + +# optimizer +optim_wrapper = dict( + type='OptimWrapper', + optimizer=dict( + _delete_=True, type='AdamW', lr=1e-4 * 0.25, weight_decay=0.1), + clip_grad=dict(max_norm=35, norm_type=2)) + +# Default setting for scaling LR automatically +# - `enable` means enable scaling LR automatically +# or not by default. +# - `base_batch_size` = (8 GPUs) x (2 samples per GPU). +auto_scale_lr = dict(enable=False, base_batch_size=32) + +default_hooks = dict( + checkpoint=dict(type='CheckpointHook', by_epoch=False, interval=5730 * 2)) +log_processor = dict(type='LogProcessor', window_size=50, by_epoch=False) + +find_unused_parameters = True diff --git a/configs/v3det/fcos_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py b/configs/v3det/fcos_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py new file mode 100644 index 00000000000..6ca952a28fc --- /dev/null +++ b/configs/v3det/fcos_swinb_fpn_8x4_sample1e-3_mstrain_v3det_2x.py @@ -0,0 +1,27 @@ +_base_ = [ + './fcos_r50_fpn_8x4_sample1e-3_mstrain_v3det_2x.py', +] + +pretrained = 'https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_base_patch4_window7_224.pth' # noqa + +# model settings +model = dict( + backbone=dict( + _delete_=True, + type='SwinTransformer', + embed_dims=128, + depths=[2, 2, 18, 2], + num_heads=[4, 8, 16, 32], + window_size=7, + mlp_ratio=4, + qkv_bias=True, + qk_scale=None, + drop_rate=0.0, + attn_drop_rate=0.0, + drop_path_rate=0.3, + patch_norm=True, + out_indices=(0, 1, 2, 3), + with_cp=False, + convert_weights=True, + init_cfg=dict(type='Pretrained', checkpoint=pretrained)), + neck=dict(in_channels=[128, 256, 512, 1024], force_grad_on_level=True)) diff --git a/configs/v3det/v3det_icon.jpg b/configs/v3det/v3det_icon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b25be6fd1f2dd1ddcba0739004e836fb80081656 GIT binary patch literal 45466 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 K1|0BT$^QY)0@^PC literal 0 HcmV?d00001 diff --git a/mmdet/datasets/__init__.py b/mmdet/datasets/__init__.py index 3bc16f9636a..9e8560b3dd0 100644 --- a/mmdet/datasets/__init__.py +++ b/mmdet/datasets/__init__.py @@ -24,6 +24,7 @@ GroupMultiSourceSampler, MultiSourceSampler, TrackAspectRatioBatchSampler, TrackImgSampler) from .utils import get_loading_pipeline +from .v3det import V3DetDataset from .voc import VOCDataset from .wider_face import WIDERFaceDataset from .xml_style import XMLDataset @@ -41,5 +42,5 @@ 'ReIDDataset', 'YouTubeVISDataset', 'TrackAspectRatioBatchSampler', 'ADE20KPanopticDataset', 'CocoCaptionDataset', 'RefCocoDataset', 'BaseSegDataset', 'ADE20KSegDataset', 'CocoSegDataset', - 'ADE20KInstanceDataset', 'iSAIDDataset' + 'ADE20KInstanceDataset', 'iSAIDDataset', 'V3DetDataset' ] diff --git a/mmdet/datasets/api_wrappers/__init__.py b/mmdet/datasets/api_wrappers/__init__.py index a27afc46028..8e3c41a2f87 100644 --- a/mmdet/datasets/api_wrappers/__init__.py +++ b/mmdet/datasets/api_wrappers/__init__.py @@ -1,4 +1,5 @@ # Copyright (c) OpenMMLab. All rights reserved. from .coco_api import COCO, COCOeval, COCOPanoptic +from .cocoeval_mp import COCOevalMP -__all__ = ['COCO', 'COCOeval', 'COCOPanoptic'] +__all__ = ['COCO', 'COCOeval', 'COCOPanoptic', 'COCOevalMP'] diff --git a/mmdet/datasets/api_wrappers/cocoeval_mp.py b/mmdet/datasets/api_wrappers/cocoeval_mp.py new file mode 100644 index 00000000000..b3673ea7a7e --- /dev/null +++ b/mmdet/datasets/api_wrappers/cocoeval_mp.py @@ -0,0 +1,296 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import copy +import itertools +import time +from collections import defaultdict + +import numpy as np +import torch.multiprocessing as mp +from mmengine.logging import MMLogger +from pycocotools.cocoeval import COCOeval +from tqdm import tqdm + + +class COCOevalMP(COCOeval): + + def _prepare(self): + ''' + Prepare ._gts and ._dts for evaluation based on params + :return: None + ''' + + def _toMask(anns, coco): + # modify ann['segmentation'] by reference + for ann in anns: + rle = coco.annToRLE(ann) + ann['segmentation'] = rle + + p = self.params + if p.useCats: + gts = [] + dts = [] + img_ids = set(p.imgIds) + cat_ids = set(p.catIds) + for gt in self.cocoGt.dataset['annotations']: + if (gt['category_id'] in cat_ids) and (gt['image_id'] + in img_ids): + gts.append(gt) + for dt in self.cocoDt.dataset['annotations']: + if (dt['category_id'] in cat_ids) and (dt['image_id'] + in img_ids): + dts.append(dt) + # gts=self.cocoGt.loadAnns(self.cocoGt.getAnnIds(imgIds=p.imgIds, catIds=p.catIds)) # noqa + # dts=self.cocoDt.loadAnns(self.cocoDt.getAnnIds(imgIds=p.imgIds, catIds=p.catIds)) # noqa + # gts=self.cocoGt.dataset['annotations'] + # dts=self.cocoDt.dataset['annotations'] + else: + gts = self.cocoGt.loadAnns(self.cocoGt.getAnnIds(imgIds=p.imgIds)) + dts = self.cocoDt.loadAnns(self.cocoDt.getAnnIds(imgIds=p.imgIds)) + + # convert ground truth to mask if iouType == 'segm' + if p.iouType == 'segm': + _toMask(gts, self.cocoGt) + _toMask(dts, self.cocoDt) + # set ignore flag + for gt in gts: + gt['ignore'] = gt['ignore'] if 'ignore' in gt else 0 + gt['ignore'] = 'iscrowd' in gt and gt['iscrowd'] + if p.iouType == 'keypoints': + gt['ignore'] = (gt['num_keypoints'] == 0) or gt['ignore'] + self._gts = defaultdict(list) # gt for evaluation + self._dts = defaultdict(list) # dt for evaluation + for gt in gts: + self._gts[gt['image_id'], gt['category_id']].append(gt) + for dt in dts: + self._dts[dt['image_id'], dt['category_id']].append(dt) + self.evalImgs = defaultdict( + list) # per-image per-category evaluation results + self.eval = {} # accumulated evaluation results + + def evaluate(self): + """Run per image evaluation on given images and store results (a list + of dict) in self.evalImgs. + + :return: None + """ + tic = time.time() + print('Running per image evaluation...') + p = self.params + # add backward compatibility if useSegm is specified in params + if p.useSegm is not None: + p.iouType = 'segm' if p.useSegm == 1 else 'bbox' + print('useSegm (deprecated) is not None. Running {} evaluation'. + format(p.iouType)) + print('Evaluate annotation type *{}*'.format(p.iouType)) + p.imgIds = list(np.unique(p.imgIds)) + if p.useCats: + p.catIds = list(np.unique(p.catIds)) + p.maxDets = sorted(p.maxDets) + self.params = p + + # loop through images, area range, max detection number + catIds = p.catIds if p.useCats else [-1] + + nproc = 8 + split_size = len(catIds) // nproc + mp_params = [] + for i in range(nproc): + begin = i * split_size + end = (i + 1) * split_size + if i == nproc - 1: + end = len(catIds) + mp_params.append((catIds[begin:end], )) + + MMLogger.get_current_instance().info( + 'start multi processing evaluation ...') + with mp.Pool(nproc) as pool: + self.evalImgs = pool.starmap(self._evaluateImg, mp_params) + + self.evalImgs = list(itertools.chain(*self.evalImgs)) + + self._paramsEval = copy.deepcopy(self.params) + toc = time.time() + print('DONE (t={:0.2f}s).'.format(toc - tic)) + + def _evaluateImg(self, catids_chunk): + self._prepare() + p = self.params + maxDet = max(p.maxDets) + all_params = [] + for catId in catids_chunk: + for areaRng in p.areaRng: + for imgId in p.imgIds: + all_params.append((catId, areaRng, imgId)) + evalImgs = [ + self.evaluateImg(imgId, catId, areaRng, maxDet) + for catId, areaRng, imgId in tqdm(all_params) + ] + return evalImgs + + def evaluateImg(self, imgId, catId, aRng, maxDet): + p = self.params + if p.useCats: + gt = self._gts[imgId, catId] + dt = self._dts[imgId, catId] + else: + gt = [_ for cId in p.catIds for _ in self._gts[imgId, cId]] + dt = [_ for cId in p.catIds for _ in self._dts[imgId, cId]] + if len(gt) == 0 and len(dt) == 0: + return None + + for g in gt: + if g['ignore'] or (g['area'] < aRng[0] or g['area'] > aRng[1]): + g['_ignore'] = 1 + else: + g['_ignore'] = 0 + + # sort dt highest score first, sort gt ignore last + gtind = np.argsort([g['_ignore'] for g in gt], kind='mergesort') + gt = [gt[i] for i in gtind] + dtind = np.argsort([-d['score'] for d in dt], kind='mergesort') + dt = [dt[i] for i in dtind[0:maxDet]] + iscrowd = [int(o['iscrowd']) for o in gt] + # load computed ious + # ious = self.ious[imgId, catId][:, gtind] if len(self.ious[imgId, catId]) > 0 else self.ious[imgId, catId] # noqa + ious = self.computeIoU(imgId, catId) + ious = ious[:, gtind] if len(ious) > 0 else ious + + T = len(p.iouThrs) + G = len(gt) + D = len(dt) + gtm = np.zeros((T, G)) + dtm = np.zeros((T, D)) + gtIg = np.array([g['_ignore'] for g in gt]) + dtIg = np.zeros((T, D)) + if not len(ious) == 0: + for tind, t in enumerate(p.iouThrs): + for dind, d in enumerate(dt): + # information about best match so far (m=-1 -> unmatched) + iou = min([t, 1 - 1e-10]) + m = -1 + for gind, g in enumerate(gt): + # if this gt already matched, and not a crowd, continue + if gtm[tind, gind] > 0 and not iscrowd[gind]: + continue + # if dt matched to reg gt, and on ignore gt, stop + if m > -1 and gtIg[m] == 0 and gtIg[gind] == 1: + break + # continue to next gt unless better match made + if ious[dind, gind] < iou: + continue + # if match successful and best so far, + # store appropriately + iou = ious[dind, gind] + m = gind + # if match made store id of match for both dt and gt + if m == -1: + continue + dtIg[tind, dind] = gtIg[m] + dtm[tind, dind] = gt[m]['id'] + gtm[tind, m] = d['id'] + # set unmatched detections outside of area range to ignore + a = np.array([d['area'] < aRng[0] or d['area'] > aRng[1] + for d in dt]).reshape((1, len(dt))) + dtIg = np.logical_or(dtIg, np.logical_and(dtm == 0, np.repeat(a, T, + 0))) + # store results for given image and category + + return { + 'image_id': imgId, + 'category_id': catId, + 'aRng': aRng, + 'maxDet': maxDet, + 'dtIds': [d['id'] for d in dt], + 'gtIds': [g['id'] for g in gt], + 'dtMatches': dtm, + 'gtMatches': gtm, + 'dtScores': [d['score'] for d in dt], + 'gtIgnore': gtIg, + 'dtIgnore': dtIg, + } + + def summarize(self): + """Compute and display summary metrics for evaluation results. + + Note this function can *only* be applied on the default parameter + setting + """ + + def _summarize(ap=1, iouThr=None, areaRng='all', maxDets=100): + p = self.params + iStr = ' {:<18} {} @[ IoU={:<9} | area={:>6s} | maxDets={:>3d} ] = {:0.3f}' # noqa + titleStr = 'Average Precision' if ap == 1 else 'Average Recall' + typeStr = '(AP)' if ap == 1 else '(AR)' + iouStr = '{:0.2f}:{:0.2f}'.format(p.iouThrs[0], p.iouThrs[-1]) \ + if iouThr is None else '{:0.2f}'.format(iouThr) + + aind = [ + i for i, aRng in enumerate(p.areaRngLbl) if aRng == areaRng + ] + mind = [i for i, mDet in enumerate(p.maxDets) if mDet == maxDets] + if ap == 1: + # dimension of precision: [TxRxKxAxM] + s = self.eval['precision'] + # IoU + if iouThr is not None: + t = np.where(iouThr == p.iouThrs)[0] + s = s[t] + s = s[:, :, :, aind, mind] + else: + # dimension of recall: [TxKxAxM] + s = self.eval['recall'] + if iouThr is not None: + t = np.where(iouThr == p.iouThrs)[0] + s = s[t] + s = s[:, :, aind, mind] + if len(s[s > -1]) == 0: + mean_s = -1 + else: + mean_s = np.mean(s[s > -1]) + print( + iStr.format(titleStr, typeStr, iouStr, areaRng, maxDets, + mean_s)) + return mean_s + + def _summarizeDets(): + stats = [] + stats.append(_summarize(1, maxDets=self.params.maxDets[-1])) + stats.append( + _summarize(1, iouThr=.5, maxDets=self.params.maxDets[-1])) + stats.append( + _summarize(1, iouThr=.75, maxDets=self.params.maxDets[-1])) + for area_rng in ('small', 'medium', 'large'): + stats.append( + _summarize( + 1, areaRng=area_rng, maxDets=self.params.maxDets[-1])) + for max_det in self.params.maxDets: + stats.append(_summarize(0, maxDets=max_det)) + for area_rng in ('small', 'medium', 'large'): + stats.append( + _summarize( + 0, areaRng=area_rng, maxDets=self.params.maxDets[-1])) + stats = np.array(stats) + return stats + + def _summarizeKps(): + stats = np.zeros((10, )) + stats[0] = _summarize(1, maxDets=20) + stats[1] = _summarize(1, maxDets=20, iouThr=.5) + stats[2] = _summarize(1, maxDets=20, iouThr=.75) + stats[3] = _summarize(1, maxDets=20, areaRng='medium') + stats[4] = _summarize(1, maxDets=20, areaRng='large') + stats[5] = _summarize(0, maxDets=20) + stats[6] = _summarize(0, maxDets=20, iouThr=.5) + stats[7] = _summarize(0, maxDets=20, iouThr=.75) + stats[8] = _summarize(0, maxDets=20, areaRng='medium') + stats[9] = _summarize(0, maxDets=20, areaRng='large') + return stats + + if not self.eval: + raise Exception('Please run accumulate() first') + iouType = self.params.iouType + if iouType == 'segm' or iouType == 'bbox': + summarize = _summarizeDets + elif iouType == 'keypoints': + summarize = _summarizeKps + self.stats = summarize() diff --git a/mmdet/datasets/v3det.py b/mmdet/datasets/v3det.py new file mode 100644 index 00000000000..009ec8b2cf6 --- /dev/null +++ b/mmdet/datasets/v3det.py @@ -0,0 +1,20 @@ +# Copyright (c) OpenMMLab. All rights reserved. + +import mmengine + +from mmdet.registry import DATASETS +from .coco import CocoDataset + +V3DET_CLASSES = tuple( + mmengine.list_from_file( + 'configs/v3det/category_name_13204_v3det_2023_v1.txt')) + + +@DATASETS.register_module() +class V3DetDataset(CocoDataset): + """Dataset for V3Det.""" + + METAINFO = { + 'classes': V3DET_CLASSES, + 'palette': None, # TODO: add palette + } diff --git a/mmdet/evaluation/metrics/coco_metric.py b/mmdet/evaluation/metrics/coco_metric.py index f77d6516bfa..cfdc66e03b9 100644 --- a/mmdet/evaluation/metrics/coco_metric.py +++ b/mmdet/evaluation/metrics/coco_metric.py @@ -13,7 +13,7 @@ from mmengine.logging import MMLogger from terminaltables import AsciiTable -from mmdet.datasets.api_wrappers import COCO, COCOeval +from mmdet.datasets.api_wrappers import COCO, COCOeval, COCOevalMP from mmdet.registry import METRICS from mmdet.structures.mask import encode_mask_results from ..functional import eval_recalls @@ -63,6 +63,7 @@ class CocoMetric(BaseMetric): will be used instead. Defaults to None. sort_categories (bool): Whether sort categories in annotations. Only used for `Objects365V1Dataset`. Defaults to False. + use_mp_eval (bool): Whether to use mul-processing evaluation """ default_prefix: Optional[str] = 'coco' @@ -79,7 +80,8 @@ def __init__(self, backend_args: dict = None, collect_device: str = 'cpu', prefix: Optional[str] = None, - sort_categories: bool = False) -> None: + sort_categories: bool = False, + use_mp_eval: bool = False) -> None: super().__init__(collect_device=collect_device, prefix=prefix) # coco evaluation metrics self.metrics = metric if isinstance(metric, list) else [metric] @@ -92,6 +94,8 @@ def __init__(self, # do class wise evaluation, default False self.classwise = classwise + # whether to use multi processing evaluation, default False + self.use_mp_eval = use_mp_eval # proposal_nums used to compute recall or precision. self.proposal_nums = list(proposal_nums) @@ -462,7 +466,10 @@ def compute_metrics(self, results: list) -> Dict[str, float]: 'The testing results of the whole dataset is empty.') break - coco_eval = COCOeval(self._coco_api, coco_dt, iou_type) + if self.use_mp_eval: + coco_eval = COCOevalMP(self._coco_api, coco_dt, iou_type) + else: + coco_eval = COCOeval(self._coco_api, coco_dt, iou_type) coco_eval.params.catIds = self.cat_ids coco_eval.params.imgIds = self.img_ids diff --git a/mmdet/models/dense_heads/base_dense_head.py b/mmdet/models/dense_heads/base_dense_head.py index ed05e683052..d0a4469e02c 100644 --- a/mmdet/models/dense_heads/base_dense_head.py +++ b/mmdet/models/dense_heads/base_dense_head.py @@ -369,7 +369,13 @@ def _predict_by_feat_single(self, 0).reshape(-1).sigmoid() cls_score = cls_score.permute(1, 2, 0).reshape(-1, self.cls_out_channels) - if self.use_sigmoid_cls: + + # the `custom_cls_channels` parameter is derived from + # CrossEntropyCustomLoss and FocalCustomLoss, and is currently used + # in v3det. + if getattr(self.loss_cls, 'custom_cls_channels', False): + scores = self.loss_cls.get_activation(cls_score) + elif self.use_sigmoid_cls: scores = cls_score.sigmoid() else: # remind that we set FG labels to [0, num_class-1] diff --git a/mmdet/models/dense_heads/fcos_head.py b/mmdet/models/dense_heads/fcos_head.py index f3206877a1e..ba4d4640010 100644 --- a/mmdet/models/dense_heads/fcos_head.py +++ b/mmdet/models/dense_heads/fcos_head.py @@ -7,6 +7,7 @@ from mmengine.structures import InstanceData from torch import Tensor +from mmdet.models.layers import NormedConv2d from mmdet.registry import MODELS from mmdet.utils import (ConfigType, InstanceList, MultiConfig, OptInstanceList, RangeType, reduce_mean) @@ -55,6 +56,8 @@ class FCOSHead(AnchorFreeHead): norm_cfg (:obj:`ConfigDict` or dict): dictionary to construct and config norm layer. Defaults to ``norm_cfg=dict(type='GN', num_groups=32, requires_grad=True)``. + cls_predictor_cfg (:obj:`ConfigDict` or dict): dictionary to construct and + config conv_cls. Defaults to None. init_cfg (:obj:`ConfigDict` or dict or list[:obj:`ConfigDict` or \ dict]): Initialization config dict. @@ -87,6 +90,7 @@ def __init__(self, loss_weight=1.0), norm_cfg: ConfigType = dict( type='GN', num_groups=32, requires_grad=True), + cls_predictor_cfg=None, init_cfg: MultiConfig = dict( type='Normal', layer='Conv2d', @@ -102,6 +106,7 @@ def __init__(self, self.center_sample_radius = center_sample_radius self.norm_on_bbox = norm_on_bbox self.centerness_on_reg = centerness_on_reg + self.cls_predictor_cfg = cls_predictor_cfg super().__init__( num_classes=num_classes, in_channels=in_channels, @@ -117,6 +122,14 @@ def _init_layers(self) -> None: super()._init_layers() self.conv_centerness = nn.Conv2d(self.feat_channels, 1, 3, padding=1) self.scales = nn.ModuleList([Scale(1.0) for _ in self.strides]) + if self.cls_predictor_cfg is not None: + self.cls_predictor_cfg.pop('type') + self.conv_cls = NormedConv2d( + self.feat_channels, + self.cls_out_channels, + 1, + padding=0, + **self.cls_predictor_cfg) def forward( self, x: Tuple[Tensor] @@ -242,6 +255,8 @@ def loss_by_feat( flatten_points = torch.cat( [points.repeat(num_imgs, 1) for points in all_level_points]) + losses = dict() + # FG cat_id: [0, num_classes -1], BG cat_id: num_classes bg_class_ind = self.num_classes pos_inds = ((flatten_labels >= 0) @@ -252,6 +267,11 @@ def loss_by_feat( loss_cls = self.loss_cls( flatten_cls_scores, flatten_labels, avg_factor=num_pos) + if getattr(self.loss_cls, 'custom_accuracy', False): + acc = self.loss_cls.get_accuracy(flatten_cls_scores, + flatten_labels) + losses.update(acc) + pos_bbox_preds = flatten_bbox_preds[pos_inds] pos_centerness = flatten_centerness[pos_inds] pos_bbox_targets = flatten_bbox_targets[pos_inds] @@ -277,10 +297,11 @@ def loss_by_feat( loss_bbox = pos_bbox_preds.sum() loss_centerness = pos_centerness.sum() - return dict( - loss_cls=loss_cls, - loss_bbox=loss_bbox, - loss_centerness=loss_centerness) + losses['loss_cls'] = loss_cls + losses['loss_bbox'] = loss_bbox + losses['loss_centerness'] = loss_centerness + + return losses def get_targets( self, points: List[Tensor], batch_gt_instances: InstanceList diff --git a/mmdet/models/losses/__init__.py b/mmdet/models/losses/__init__.py index 13ff8b04d65..7c57a3a9687 100644 --- a/mmdet/models/losses/__init__.py +++ b/mmdet/models/losses/__init__.py @@ -2,12 +2,13 @@ from .accuracy import Accuracy, accuracy from .ae_loss import AssociativeEmbeddingLoss from .balanced_l1_loss import BalancedL1Loss, balanced_l1_loss -from .cross_entropy_loss import (CrossEntropyLoss, binary_cross_entropy, - cross_entropy, mask_cross_entropy) +from .cross_entropy_loss import (CrossEntropyCustomLoss, CrossEntropyLoss, + binary_cross_entropy, cross_entropy, + mask_cross_entropy) from .ddq_detr_aux_loss import DDQAuxLoss from .dice_loss import DiceLoss from .eqlv2_loss import EQLV2Loss -from .focal_loss import FocalLoss, sigmoid_focal_loss +from .focal_loss import FocalCustomLoss, FocalLoss, sigmoid_focal_loss from .gaussian_focal_loss import GaussianFocalLoss from .gfocal_loss import DistributionFocalLoss, QualityFocalLoss from .ghm_loss import GHMC, GHMR @@ -37,5 +38,5 @@ 'QualityFocalLoss', 'DistributionFocalLoss', 'VarifocalLoss', 'KnowledgeDistillationKLDivLoss', 'SeesawLoss', 'DiceLoss', 'EQLV2Loss', 'MarginL2Loss', 'MultiPosCrossEntropyLoss', 'L2Loss', 'TripletLoss', - 'DDQAuxLoss' + 'DDQAuxLoss', 'CrossEntropyCustomLoss', 'FocalCustomLoss' ] diff --git a/mmdet/models/losses/cross_entropy_loss.py b/mmdet/models/losses/cross_entropy_loss.py index b057e560a9e..49fac7743ce 100644 --- a/mmdet/models/losses/cross_entropy_loss.py +++ b/mmdet/models/losses/cross_entropy_loss.py @@ -6,6 +6,7 @@ import torch.nn.functional as F from mmdet.registry import MODELS +from .accuracy import accuracy from .utils import weight_reduce_loss @@ -299,3 +300,102 @@ def forward(self, avg_non_ignore=self.avg_non_ignore, **kwargs) return loss_cls + + +@MODELS.register_module() +class CrossEntropyCustomLoss(CrossEntropyLoss): + + def __init__(self, + use_sigmoid=False, + use_mask=False, + reduction='mean', + num_classes=-1, + class_weight=None, + ignore_index=None, + loss_weight=1.0, + avg_non_ignore=False): + """CrossEntropyCustomLoss. + + Args: + use_sigmoid (bool, optional): Whether the prediction uses sigmoid + of softmax. Defaults to False. + use_mask (bool, optional): Whether to use mask cross entropy loss. + Defaults to False. + reduction (str, optional): . Defaults to 'mean'. + Options are "none", "mean" and "sum". + num_classes (int): Number of classes to classify. + class_weight (list[float], optional): Weight of each class. + Defaults to None. + ignore_index (int | None): The label index to be ignored. + Defaults to None. + loss_weight (float, optional): Weight of the loss. Defaults to 1.0. + avg_non_ignore (bool): The flag decides to whether the loss is + only averaged over non-ignored targets. Default: False. + """ + super(CrossEntropyCustomLoss, self).__init__() + assert (use_sigmoid is False) or (use_mask is False) + self.use_sigmoid = use_sigmoid + self.use_mask = use_mask + self.reduction = reduction + self.loss_weight = loss_weight + self.class_weight = class_weight + self.ignore_index = ignore_index + self.avg_non_ignore = avg_non_ignore + if ((ignore_index is not None) and not self.avg_non_ignore + and self.reduction == 'mean'): + warnings.warn( + 'Default ``avg_non_ignore`` is False, if you would like to ' + 'ignore the certain label and average loss over non-ignore ' + 'labels, which is the same with PyTorch official ' + 'cross_entropy, set ``avg_non_ignore=True``.') + + if self.use_sigmoid: + self.cls_criterion = binary_cross_entropy + elif self.use_mask: + self.cls_criterion = mask_cross_entropy + else: + self.cls_criterion = cross_entropy + + self.num_classes = num_classes + + assert self.num_classes != -1 + + # custom output channels of the classifier + self.custom_cls_channels = True + # custom activation of cls_score + self.custom_activation = True + # custom accuracy of the classsifier + self.custom_accuracy = True + + def get_cls_channels(self, num_classes): + assert num_classes == self.num_classes + if not self.use_sigmoid: + return num_classes + 1 + else: + return num_classes + + def get_activation(self, cls_score): + + fine_cls_score = cls_score[:, :self.num_classes] + + if not self.use_sigmoid: + bg_score = cls_score[:, [-1]] + new_score = torch.cat([fine_cls_score, bg_score], dim=-1) + scores = F.softmax(new_score, dim=-1) + else: + score_classes = fine_cls_score.sigmoid() + score_neg = 1 - score_classes.sum(dim=1, keepdim=True) + score_neg = score_neg.clamp(min=0, max=1) + scores = torch.cat([score_classes, score_neg], dim=1) + + return scores + + def get_accuracy(self, cls_score, labels): + + fine_cls_score = cls_score[:, :self.num_classes] + + pos_inds = labels < self.num_classes + acc_classes = accuracy(fine_cls_score[pos_inds], labels[pos_inds]) + acc = dict() + acc['acc_classes'] = acc_classes + return acc diff --git a/mmdet/models/losses/focal_loss.py b/mmdet/models/losses/focal_loss.py index e5a8774296c..15bef293a59 100644 --- a/mmdet/models/losses/focal_loss.py +++ b/mmdet/models/losses/focal_loss.py @@ -5,6 +5,7 @@ from mmcv.ops import sigmoid_focal_loss as _sigmoid_focal_loss from mmdet.registry import MODELS +from .accuracy import accuracy from .utils import weight_reduce_loss @@ -251,3 +252,120 @@ def forward(self, else: raise NotImplementedError return loss_cls + + +@MODELS.register_module() +class FocalCustomLoss(nn.Module): + + def __init__(self, + use_sigmoid=True, + num_classes=-1, + gamma=2.0, + alpha=0.25, + reduction='mean', + loss_weight=1.0, + activated=False): + """`Focal Loss for V3Det `_ + + Args: + use_sigmoid (bool, optional): Whether to the prediction is + used for sigmoid or softmax. Defaults to True. + num_classes (int): Number of classes to classify. + gamma (float, optional): The gamma for calculating the modulating + factor. Defaults to 2.0. + alpha (float, optional): A balanced form for Focal Loss. + Defaults to 0.25. + reduction (str, optional): The method used to reduce the loss into + a scalar. Defaults to 'mean'. Options are "none", "mean" and + "sum". + loss_weight (float, optional): Weight of loss. Defaults to 1.0. + activated (bool, optional): Whether the input is activated. + If True, it means the input has been activated and can be + treated as probabilities. Else, it should be treated as logits. + Defaults to False. + """ + super(FocalCustomLoss, self).__init__() + assert use_sigmoid is True, 'Only sigmoid focal loss supported now.' + self.use_sigmoid = use_sigmoid + self.num_classes = num_classes + self.gamma = gamma + self.alpha = alpha + self.reduction = reduction + self.loss_weight = loss_weight + self.activated = activated + + assert self.num_classes != -1 + + # custom output channels of the classifier + self.custom_cls_channels = True + # custom activation of cls_score + self.custom_activation = True + # custom accuracy of the classsifier + self.custom_accuracy = True + + def get_cls_channels(self, num_classes): + assert num_classes == self.num_classes + return num_classes + + def get_activation(self, cls_score): + + fine_cls_score = cls_score[:, :self.num_classes] + + score_classes = fine_cls_score.sigmoid() + + return score_classes + + def get_accuracy(self, cls_score, labels): + + fine_cls_score = cls_score[:, :self.num_classes] + + pos_inds = labels < self.num_classes + acc_classes = accuracy(fine_cls_score[pos_inds], labels[pos_inds]) + acc = dict() + acc['acc_classes'] = acc_classes + return acc + + def forward(self, + pred, + target, + weight=None, + avg_factor=None, + reduction_override=None): + """Forward function. + + Args: + pred (torch.Tensor): The prediction. + target (torch.Tensor): The learning label of the prediction. + weight (torch.Tensor, optional): The weight of loss for each + prediction. Defaults to None. + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + reduction_override (str, optional): The reduction method used to + override the original reduction method of the loss. + Options are "none", "mean" and "sum". + + Returns: + torch.Tensor: The calculated loss + """ + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + if self.use_sigmoid: + + num_classes = pred.size(1) + target = F.one_hot(target, num_classes=num_classes + 1) + target = target[:, :num_classes] + calculate_loss_func = py_sigmoid_focal_loss + + loss_cls = self.loss_weight * calculate_loss_func( + pred, + target, + weight, + gamma=self.gamma, + alpha=self.alpha, + reduction=reduction, + avg_factor=avg_factor) + + else: + raise NotImplementedError + return loss_cls diff --git a/mmdet/models/task_modules/assigners/max_iou_assigner.py b/mmdet/models/task_modules/assigners/max_iou_assigner.py index b6edabafefd..71da54429ae 100644 --- a/mmdet/models/task_modules/assigners/max_iou_assigner.py +++ b/mmdet/models/task_modules/assigners/max_iou_assigner.py @@ -1,4 +1,5 @@ # Copyright (c) OpenMMLab. All rights reserved. +import copy from typing import Optional, Union import torch @@ -10,6 +11,76 @@ from .base_assigner import BaseAssigner +def _perm_box(bboxes, + iou_calculator, + iou_thr=0.97, + perm_range=0.01, + counter=0, + max_iter=5): + """Compute the permuted bboxes. + + Args: + bboxes (Tensor): Shape (n, 4) for , "xyxy" format. + iou_calculator (obj): Overlaps Calculator. + iou_thr (float): The permuted bboxes should have IoU > iou_thr. + perm_range (float): The scale of permutation. + counter (int): Counter of permutation iteration. + max_iter (int): The max iterations of permutation. + Returns: + Tensor: The permuted bboxes. + """ + ori_bboxes = copy.deepcopy(bboxes) + is_valid = True + N = bboxes.size(0) + perm_factor = bboxes.new_empty(N, 4).uniform_(1 - perm_range, + 1 + perm_range) + bboxes *= perm_factor + new_wh = bboxes[:, 2:] - bboxes[:, :2] + if (new_wh <= 0).any(): + is_valid = False + iou = iou_calculator(ori_bboxes.unique(dim=0), bboxes) + if (iou < iou_thr).any(): + is_valid = False + if not is_valid and counter < max_iter: + return _perm_box( + ori_bboxes, + iou_calculator, + perm_range=max(perm_range - counter * 0.001, 1e-3), + counter=counter + 1) + return bboxes + + +def perm_repeat_bboxes(bboxes, iou_calculator=None, perm_repeat_cfg=None): + """Permute the repeated bboxes. + + Args: + bboxes (Tensor): Shape (n, 4) for , "xyxy" format. + iou_calculator (obj): Overlaps Calculator. + perm_repeat_cfg (Dict): Config of permutation. + Returns: + Tensor: Bboxes after permuted repeated bboxes. + """ + assert isinstance(bboxes, torch.Tensor) + if iou_calculator is None: + import torchvision + iou_calculator = torchvision.ops.box_iou + bboxes = copy.deepcopy(bboxes) + unique_bboxes = bboxes.unique(dim=0) + iou_thr = perm_repeat_cfg.get('iou_thr', 0.97) + perm_range = perm_repeat_cfg.get('perm_range', 0.01) + for box in unique_bboxes: + inds = (bboxes == box).sum(-1).float() == 4 + if inds.float().sum().item() == 1: + continue + bboxes[inds] = _perm_box( + bboxes[inds], + iou_calculator, + iou_thr=iou_thr, + perm_range=perm_range, + counter=0) + return bboxes + + @TASK_UTILS.register_module() class MaxIoUAssigner(BaseAssigner): """Assign a corresponding gt bbox or background to each bbox. @@ -45,6 +116,7 @@ class MaxIoUAssigner(BaseAssigner): assign. When the number of gt is above this threshold, will assign on CPU device. Negative values mean not assign on CPU. iou_calculator (dict): Config of overlaps Calculator. + perm_repeat_gt_cfg (dict): Config of permute repeated gt bboxes. """ def __init__(self, @@ -56,7 +128,8 @@ def __init__(self, ignore_wrt_candidates: bool = True, match_low_quality: bool = True, gpu_assign_thr: float = -1, - iou_calculator: dict = dict(type='BboxOverlaps2D')): + iou_calculator: dict = dict(type='BboxOverlaps2D'), + perm_repeat_gt_cfg=None): self.pos_iou_thr = pos_iou_thr self.neg_iou_thr = neg_iou_thr self.min_pos_iou = min_pos_iou @@ -66,6 +139,7 @@ def __init__(self, self.gpu_assign_thr = gpu_assign_thr self.match_low_quality = match_low_quality self.iou_calculator = TASK_UTILS.build(iou_calculator) + self.perm_repeat_gt_cfg = perm_repeat_gt_cfg def assign(self, pred_instances: InstanceData, @@ -137,7 +211,13 @@ def assign(self, if gt_bboxes_ignore is not None: gt_bboxes_ignore = gt_bboxes_ignore.cpu() - overlaps = self.iou_calculator(gt_bboxes, priors) + if self.perm_repeat_gt_cfg is not None and priors.numel() > 0: + gt_bboxes_unique = perm_repeat_bboxes(gt_bboxes, + self.iou_calculator, + self.perm_repeat_gt_cfg) + else: + gt_bboxes_unique = gt_bboxes + overlaps = self.iou_calculator(gt_bboxes_unique, priors) if (self.ignore_iof_thr > 0 and gt_bboxes_ignore is not None and gt_bboxes_ignore.numel() > 0 and priors.numel() > 0): diff --git a/requirements/runtime.txt b/requirements/runtime.txt index f5d31051927..8f74a6d3e61 100644 --- a/requirements/runtime.txt +++ b/requirements/runtime.txt @@ -5,3 +5,4 @@ scipy shapely six terminaltables +tqdm diff --git a/setup.cfg b/setup.cfg index 09dc96a20da..adeb735e770 100644 --- a/setup.cfg +++ b/setup.cfg @@ -16,7 +16,7 @@ SPLIT_BEFORE_EXPRESSION_AFTER_OPENING_PAREN = true # ignore word "BA", then we need to append "ba" to ignore-words-list rather # than "BA" [codespell] -skip = *.ipynb +skip = *.ipynb,configs/v3det/category_name_13204_v3det_2023_v1.txt quiet-level = 3 ignore-words-list = patten,nd,ty,mot,hist,formating,winn,gool,datas,wan,confids,TOOD,tood,ba,warmup,nam,DOTA,dota,conveyer From eeaacd8cc27e0b827456b4fb1b02b4f2a39884eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Tue, 19 Sep 2023 12:44:53 +0800 Subject: [PATCH 48/63] Fix import error in downstream repo (#10946) --- configs/v3det/README.md | 19 +- .../category_name_13204_v3det_2023_v1.txt | 13204 ---------------- mmdet/datasets/v3det.py | 24 +- 3 files changed, 28 insertions(+), 13219 deletions(-) delete mode 100644 configs/v3det/category_name_13204_v3det_2023_v1.txt diff --git a/configs/v3det/README.md b/configs/v3det/README.md index 423c35fe707..36879316f4f 100644 --- a/configs/v3det/README.md +++ b/configs/v3det/README.md @@ -45,16 +45,17 @@ The data includes a training set, a validation set, comprising 13,204 categories ``` data/ - images/ - / - |────.png + V3Det/ + images/ + / + |────.png + ... ... - ... - annotations/ - |────v3det_2023_v1_category_tree.json # Category tree - |────category_name_13204_v3det_2023_v1.txt # Category name - |────v3det_2023_v1_train.json # Train set - |────v3det_2023_v1_val.json # Validation set + annotations/ + |────v3det_2023_v1_category_tree.json # Category tree + |────category_name_13204_v3det_2023_v1.txt # Category name + |────v3det_2023_v1_train.json # Train set + |────v3det_2023_v1_val.json # Validation set ``` ## Results and Models diff --git a/configs/v3det/category_name_13204_v3det_2023_v1.txt b/configs/v3det/category_name_13204_v3det_2023_v1.txt deleted file mode 100644 index 7258c9729f6..00000000000 --- a/configs/v3det/category_name_13204_v3det_2023_v1.txt +++ /dev/null @@ -1,13204 +0,0 @@ -ashtray -cash machine -popper -compass -rubber band -spring -refrigerator magnet -concrete mixer -crane -generator -spray paint -pumpjack -aquarium -fishbowl -pillar box -nano aquarium -spoon lure -penfold post box -bung -cork -power plugs and sockets -socket -wall socket -electronic component -battery -capacitor -coil -resistor -solar cell -parachute -umbrella -cocktail umbrella -Aluminum alloy ladder -Wooden ladder -Bamboo ladder -Parachute Umbrella -Paper Oil Umbrella -Transparent Umbrella -birdcage -birdhouse -cage -chicken coop -rabbit hutch -bird's nest -nest -wasp's nest -whistle -gold -money -cash -paper money -coinage -bill -magnifying glass -lens -microscope -telescope -telescopic sight -rifle scopes -LED Lens -Triangular Prism -Eyeglass Lens -Cylindrical Lens -bicycle wheel rim -bobbin -ferris wheel -gear -inner tube -pulley -tire -waterwheel -wheel -fishing reel -skateboard wheel -brazier -gearshift -handwheel -hearth -hot-water bottle -radiator -roaster -solar heater -steering wheel -tandoor -direct vent fireplace -masonry oven -stop sign -crosswalk sign -billboard -crosswalk -speed bump -yard marker -signpost -fingerpost -signage -speed sign -bell -electric bell -timer -weathervane -fire alarm -bell buoy -windbell -bicycle bell -Electronic Clock -Timer -checker -chessman -chess set -Chinese Chess -Go -International Draughts or Checkers -Chinese Checkers -Aeroplane Chess -Shogi -Land Wargame -International Draughts -Reversi -Nine Men's Morris -Tic-Tac-Toe -Makruk -Sittuyin -baby bed -bed -bed pillow -bunk bed -carrycot -crib -futon -hammock -headboard -hospital bed -lilo -mattress -mattress pad -pillow -throw pillow -canopy bed -emergency sleeping bag -command module -meteorite -moon -satellite -sun -satellite dish -black hole -Earth -Mars -Mercury -Venus -Saturn -Jupiter -Uranus -Neptune -pluto -candy -brittle -chewing gum -candied apple -candy cane -chocolate -cocoa powder -white chocolate -gumdrop -lollipop -marshmallow -nougat bar -jello -conserve -aspic -tanghulu -chocolate-covered potato chips -chocolate balls -jelly babies -ribbon candy -gummy bear -weaving basket -bag -gun barrel -basin -basket -bottle -bucket -glasses case -matchbox -pot -rain barrel -wallet -purse -cask -keg -clay pot -reusable shopping bag -briefcase -laptop bag -Moisture-proof box -baby float -air cushion -breeches buoy -fire extinguisher -fireplug -hydrant -life jacket -life saver -water wings -inflatable armbands -life saving hammer -descender -escape rope -rescue whistle -fire mask -smoke detector -lifeline -fire emergency lights -air breathing apparatus -fire extinguisher cabinet -blowgun -cigar -cigarette -cigarette butt -discharge pipe -fire hose -garden hose -grab bar -meerschaum -smokestack -test tube -torpedo tube -barber's pole -peace pole -opium pipe -factory chimney -pipe tobacco -air duct -Aluminum plastic tube -single pole towel rack -double bar towel rack -Towel rack -aspirator -catheter -dental appliance -hypodermic needle -pill -plaster -stethoscope -stretcher -swab -syringe -injection -mayo scissors -thermometer -temperature gun -electrotherapy device -CT machine -medical kit -scalpel -dropper -denture -ECG machine -sphygmomanometer -CT scan -forehead mirror -Snellen chart -amulet -cross -flag -flagpole -tomb -gravestone -handstamp -mausoleum -menhir -shoulder board -shoulder patch -totem pole -decoration -trophy -mascot -tomb of the unknown soldier -cross of sacrifice -shoulder sleeve insignia -koinobori -joss paper -paper ingot -sacrificial candle -Spirit card -incense burner -Spirit Banner -firecracker -wreath -fountain -millstone -crystal -diamond -ruby -pearl -chrysoberyl -jadeite -kyanite -opal -rock crystal -amethyst -aquamarine -black opal -chrysoprase -citrine -emerald -jade -peridot -rhodolite -zircon -yellow quartz -cobaltocalcite -lake superior agate -opalite -ring stone -malachite -wine rack -high-heeled shoe -pot rack -bookcase -cabinet -dresser -clothes tree -coat hanger -coatrack -dish rack -drawer -minibar -toastrack -towel rack -wardrobe -nightstand -File cabinets -files rack -Lifting drying rack -paper shelf -Shoebox -TV cabinet -wine cabinet -tea cabinet -filing cabinet -medicine cabinet -beaker -compass (drawing tool) -detector -divider -measuring instrument -plumb bob -protractor -straightedge -vernier scale -Triangular ruler -height tester -body weight tester -Spirometry -Sebum forceps -tape measure -level gauge -total station -multimeter -oscilloscope -Signal generator -Transistor Characteristic Tracer -megger -Infrared Thermometer -Spectrum Analyzer -lcr parameter tester -IC Tester -Tablet -Speedometer -armchair -chair -conference table -desk -dinner table -dressing table -drop-leaf table -folding chair -gateleg table -highchair -lectern -pedestal table -rocking chair -couch -wheelchair -chess table -deckchair -joëlette -bean bag chair -massage chair -Computer Desk -school desks -one-legged table -tripod table -four legged table -round table -square table -bathroom sink -toilet roll holder -irrigation sprinkler -bathtub -bedpan -broom -dumpster -dustpan -faucet -flush toilet -garbage -kitchen sink -nozzle -potty seat -showerhead -sink -moppingfloor -tub -urinal -water faucet -squat toilet -pressure washer -shower -duster -stainless steel trash can -Ordinary floor drain -Floor drain for washing machine -shower head -soap dish holder -soap dish -single cup holder -double cup holder -toilet brush holder -toilet brush -board eraser -abacus -chalk -fountain pen -marker -pencil -pencil sharpener -quill -rubber eraser -tap -rollerball pen -inkstone -Portfolio -file set -business card case -zipper bag -file basket -book stand -stapler -Staple -Pencil sharpener -glue stick -glue -tape holder -pen holder -pencil case -calendar holder -ballpoint pen -desk pen -watercolor pen -correction fluid -correction tape -writing brush -raw tape -Scotch tape -Insulation Tape -folder -folding napkins -bath mat -bath towel -beach towel -beer mat -cleaning pad -cobweb -diaper -dishcloth -doily -drop cloth -dustcloth -dust cover -embroidery -floor cover -groundsheet -handkerchief -mosquito net -mousepad -paper towel -place mat -potholder -rag -scouring pad -skein -soap pad -tapestry -tarpaulin -towel -webbing -blanket -mylar -leather -silk -wool -window covering -window valance -water well -artesian well -curtain -door -doorframe -doorknob -dormer -french door -gusher -knocker -louver -lychgate -mail slot -manhole cover -oeil de boeuf -portcullis -porthole -pump well -rear-view mirror -revolving door -sliding door -starting gate -triumphal arch -well -window frame -window -stained glass -Exterior door lock -handle lock -Ball lock -electronic door lock -san pedro cactus -large-flowered cactus -ferocactus cylindraceus -cylindropuntia bigelovii -mammillaria dioica -opuntia ficus-indica -hamatocactus hamatacanthus -echinocereus pectinatus -opuntia cochenillifera -mammillaria grahamii -opuntia decumbens -echinocactus horizonthalonius -mammillaria heyderi -echinocereus santaritensis -juniperus occidentalis -echinocereus chloranthus -larix occidentalis -cedar of lebanon -carnegiea gigantea -echinocactus -golden barrel cactus -rainbow cactus -barrel cactus -chichipe -mammillaria -nopal -bamboo -adansonia digitata -ceiba pentandra -queensland bottletree -japanese beech -oak -quercus garryana -mallee -forest red gum -divi-divi -caranday -tree -leafless tree -basketball moves -bowling pin -cricketshot -croquet ball -field hockey ball -golf ball -handball -lacrosse ball -ping-pong ball -rugby ball -shot -shuttlecock -soccer -tennis ball -volleyball -floorball -pesäpallo -baseball -pingpong -badminton -tennis -bowling -puck -bandy ball -billiards -softball -hockey -lacrosse -cricket -rugby -water polo -wooden ball -basketball -American football -golf -pickle ball -match ball -lawn bowls -racquetball -sepak takraw -croquet -dodge ball -facial cleanser -baby powder -bar soap -bottlebrush -comb -condom -cream -curler -curling iron -electric toothbrush -eyebrow pencil -face powder -hairbrush -hand cream -laundry detergent -lip balm -lotion -nail polish -eyebrow pencil -perfume -razor -sanitary napkin -shaver -shaving brush -soap -toothbrush -toothpaste -toothpick -nail clipper -interdental brush -cosmetic container -electric clippers -electric curling iron -Electric shaver -manual shaver -facial cleansing brushe -facial steamer -Flosser -ear cleaner -baked oil cap -Facial mask -spray -Oil-absorbing paper -makeup remover -lipstick -Beauty egg -Epilator -Foot Patch -water castle -portable toilet -lighthouse -bell tent -cabana -campanile -cenotaph -cottage tent -covered bridge -field tent -hayloft -house -igloo -lake dwelling -mountain tent -newsstand -nissen hut -obelisk -outhouse -pillbox -pyramidal tent -ranch house -sentry box -sod house -spire -phone booth -tepee -tollbooth -umbrella tent -wall tent -yurt -palace -church -stone cabin -naveta -qubba -round barn -tobacco barn -liberty monument -partytent -barracas de piedra -tukul -gebakkraam -würstelstand -memorial gates and arches -shieling hut -icelandic turf house -wine glass -stemware -outdoor grill -contact grill -food steamer -baby bottle -bowl -cutting board -chopsticks -dishware -cup -dish -epergne -fork -glass -gravy boat -griddle -kettle -combine with bowl -mug -pan -paper plate -home plate -poacher -porringer -pressure cooker -punch bowl -runcible spoon -saucepan -soup bowl -spoon -spork -straw -tableware -tea ball -tea maker -tea pot -wok -wooden spoon -jug -gaiwan -bogrács -honey dipper -dolsot -bamboo steamer -glass goblet -sheet pan -sippy cup -springform pan -decoction device -ax -ax handle -bucksaw -cheese cutter -crosscut saw -hedge trimmer -knife -paper cutter -peeler -proverb -scissors -scythe -secateurs -sheath -sickle -snips -sword -table knife -thinning shears -throwing knife -splitting maul -pizza cutter -karambit -abrasive saw -shinai -ring knife -dagger -Butterfly Sword -Jiuhuan Dao -Machete -saber -Pak Knife -Tai Chi Knife -child and mother knife -Yuntou knife -Seedling knife -kitchen knife -Spike knife -Handguard Wolf's Fang Knife -Hook Knife -Seven-Star Sword -Meridian Zodiac Mandarin Duck Battle Axes -Wooden Sword -Hooked weapons -Arts and Crafts Knife -Paper cutter -Sword -Dagger -Swiss army knife -Nepalese curved knife -American M9 Bayonet -Butterfly Knife -payment card -academic certificate -blackboard/whiteboard -bookmark -clipboard -doorplate -drumhead -envelope -vehicle registration plate -newspaper -palette -playing card -swatter -washboard -notepaper -diploma -menu -passport -magazine -greeting card -postcard -postage stamp -book -debit card -carton -cardboard -corkboard -gift wrap -notepad -tissue -toilet paper -post-it note -visa credit card -Wireless Bound Notebook -Spiral Notebook -Leather-covered notebook -Stapled Notebook -Post-it note -ledger -carbon paper -paper airplane -paper takeout box -paper bowl -paper cup -paper bag -paper box -business card -invitation -red envelope -couplet -red paper lantern -white paper lantern -hang tag -hang flag -poster -butter paper -barbette carriage -battering ram -bomb -brass knucks -slug -cannon -crossbow -gun -halberd -holster -longbow -missile -rocket -stun gun -trident -whip -ammunition -nunchaku -tonfa -fn p90 -spear -long spear -double crescent halberd -Forked weapon -Classical Gun -Finger tiger -Meteor Hammer -Rocket Launcher -Revolver -Sniper rifle -Light machine gun -Heavy machine gun (with tripod) -AK-47 rifle -M16A4 -MP5 submachine gun -MP7 submachine gun -UZI submachine gun -PP2000 submachine gun -UMP submachine gun -Thompson submachine gun -mortar (weapon) -Mauser Kar98K carbine -95 Type Assault Rifle -M4A1 Carbine -FN SCAR -G36 Assault Rifle -FAMAS -AUG Assault Rifle -FN FNC -FN FAL Automatic Rifle -SG 550 Assault Rifle -Smoke Grenade -Explosive charge -Winchester Defender Shotgun -Remington Model 870 Shotgun -AA-12 Automatic Shotgun -KS-23 Shotgun -Pepper Spray -Shield -Laser Cannon -keychain -plumbing fitting -threading needle -anchor -anvil -awl -bodkin -candlesnuffer -carabiner -grapnel -hex nut -hook -key -lock -nail -needle -pin -pincushion -pipefitting -screw -sewing machine needle -snatch block -stickpin -thimble -tie tack -wing nut -Drawer lock -Glass cabinet lock -Chain lock -Hang lock -Number lock -Glass hinge -Corner hinge -bearing hinge -pivot hinge -hinge -drawer rail -sliding door track -latch -door suction -floor suction -floor spring -door closer -plate pin -anti-theft buckle hoist -strip clamp -bouncing ball -omnidirectional wheel -door jamb -Tee connection -female threaded elbow -ball valve -rivet nut -concrete nail -advertising nail -mirror nail -expansion bolt -self-tapping screw -safety lock buckle -safe -bicycle lock -U-lock -wheel lock -toy vehicle -rubik's cube -amphora -armillary sphere -cockhorse -die -dice cup -doll -domino -figurine -kite -lego -mannequin -pinwheel -puppet -rag doll -scarecrow -scrimshaw -sculpture -seesaw -slide -snowman -swing (seat) -teddy -water gun -statuary -plasticine -trompo -horse head mask -matryoshka doll -nerf -newton's cradle -terrestrial globe -wooden toy train -pal mickey -greek vase -doll clothes -roly-poly toy -wallace fountain -rubber duck -dreidel -wood carving -gypsum carving -root carving -jade carving -bamboo carving -nuclear carving -stone carving -ivory carving -relief carving -snow carving -ice carving -sand carving -charcoal carving -Bentley Blue -Tang Dynasty Tri-Color -Shiwan Figurine -Walnut Antique -Embroidery -Liu Li Crafts -Lacquerware -Bronze Ware -Blue Printed Fabric -Willow Plait Weaving -Corn Husk Braiding -Straw Braiding -Bamboo Braiding -Bamboo Curtain Painting -Wheat Straw Painting -Iron Painting -Gauze Sand Gold -Iron Artwork -Rocket Model -Gundam Model -House Model -Gun Model -Aircraft Model -Car model -Motorcycle model -Bicycle model -Window grille -Paper cutting -Taihu stone -Shoushan stone -Qingtian stone -Changsha stone -Balinese stone -Changbai jade -Lotus stone -Chrysanthemum Stone -Kunshan Stone -Xuan Stone -hand fan -alligator wrench -bit -bolt cutter -bottle opener -brush -cap opener -corkscrew -crowbar -drill -file -fire tongs -forceps -fore plane -funnel -grater -hammer -hammerhead -hand mower -hoe -lawn mower -lighter -matchstick -mincer -mortar -pestle -pick -pincer -pitchfork -plane -pliers -power drill -punch pliers -quern -rake -rolling pin -screwdriver -screw key -soldering iron -spade -staple gun -stirrer -tire iron -trowel -wrench -egg separator -power wrench -Bottle Opener -Weed Trimmer -Snow Blower -Hole Punch -Curtain Rod -Caulking Gun -Straight Shank Twist Drill Bit -Diamond drill bit -Hole opener -Gas stove -Cylinder -Air pump -Wire Cutter -Pointed Nose Pliers -Diagonal Pliers -Bent Nose Pliers -Pump Pliers -Combination Pliers -Locking Pliers -Flat Nose Pliers -Round Nose Pliers -Wire Stripper Pliers -Needle Nose Pliers -top cut pliers -carp pliers -pipe pliers -adjustable pliers -cable pliers -crimping pliers -hedge shears -flat-nose pliers -fishing pliers -wire cutters -cable cutters -locking pliers -hinged pliers -wide-handled pliers -bent-handled pliers -dual-ended pliers -vice grip pliers -monkey wrench -combination wrench -adjustable wrench -L-shaped wrench -socket wrench -Inner hex wrench -torque wrench -fireman's spanner -ratchet wrench -drum stick -tabla -banjo -cymbal -drum -guitar -harp -lute -piano -musical keyboard -tuning fork -shekere -pandeiro -mbira -guzheng -basset clarinet -flute -xiao -Panpipe -Xun -Sheng -Lusheng -Bawu -Guanzi -Suona -Shakuhachi -Liuqin -Pipa -Ruan -Yueqin -guqin -Guzheng -Konghou -Sanxian -Dongbula -Rawap -Yangqin -Tanggu -Bell-clapping -kang-ku -bronze drum -Da Xiao Gong -Xiaogu -Paigu -Da cha -Erhu -Banhu -Gehu -Morin Khur -Jinghu -Zhonghu -Gaohu -Violin -Viola -Cello -Double Bass -Electric Bass -Harp -Guitar -Electric Guitar -Flute -Piccolo -Clarinet -Oboe -EnglishHorn -Bassoon -Saxophone -Trumpet -Cornet -Trombone -Tuba -Piano -Organ -Piano Accordion -Electronic Keyboard -Timpani -Xylophone -Snare Drum -Triangle -Tambourine -Castanets -Maracas -Cymbals -Gong -tabor -Bangzi -Nao -Wooden fish -Bangu -Fangxiang -Bianzhong -Bianqing -Gourd mouth organ -Hulusi -Kino bamboo drum -bamboo mouth organ -Aluminum Plate Piano -Bamboo Frame -Musical pestle -lianxiang stick -sapayi -Jingang Bell -Vajra -Saam Bell -String bells -Tubular Bell -musical saw -ukulele -wiener melange -caffè mocha -frappé coffee -lemon liqueur -pimm's -cream liqueur -barley water -ice cream -ice-cream cone -sherbet -popsicle -frozen yogurt -vegetable oil -coconut oil -soy sauce -vinegar -butter -yogurt -blueberry yogurt -cheese -blue cheese -swiss cheese -beverage -home brew -ginger beer -sake -wine -white wine -blush wine -champagne -jug wine -liquor -bitters -brandy -jamaica rum -tequila -vodka -whisky -cordial -absinth -coffee liqueur -creme de cacao -creme de menthe -galliano -kummel -maraschino -ratafia -smoothie -irish coffee -cafe noir -espresso -latte -iced coffee -turkish coffee -chocolate milk -milkshake -juice -apple juice -cranberry juice -grape juice -grapefruit juice -orange juice -pineapple juice -lemonade -limeade -mulled wine -soft drink -coca-cola -pepsi -coffee -bottled water -drinking water -soda water -mineral water -seltzer -godiva liqueur -strawberry juice -melon soda -ramune -ganache -snake wine -dondurma -choc ice -diet mountain dew -lemonsoda -vimto -arabic tea -four loko -shave ice -teh tarik -grattachecca -hong kong-style milk tea -fruit yogurts -cuba libre -bingsu -canned coffee -red bull -dublin dr pepper -goji tea -mirinda -canada dry -ube ice cream -orange bitters -cream yogurt -bubble tea -skyr -vitasoy -lemon tea -masala chai -crème de cassis -fanta -skateboard truck -freeboard (skateboard) -bench (weight training) -pommelhorse -backboard -balance beam -barbell -baseball bat -boomerang -croquet mallet -crutch -cue stick -dart -discus -dumbbell -exercise bike -fishing rod -flat bench -frisbee games -goalmouth -golf club -hockey stick -horizontal bar -hula hoop -hurdle -javelin -parallelbars -polo mallet -billiard table -punching bag -quiver -racket -saddle -skateboard -ski -skibob -ski pole -sled -snorkel -snowboard -stilt -stirrup -surfboard -table-tennis table -target -tee -treadmill -stationary bicycle -trekking pole -umpire chair -yoga mat -sit-ski -table tennis racket -kettlebell -bandy stick -breakaway rim -flexible flyer sled -softball bat -Zorbing -ping-pong table -Billiard table -Strandpulling -Single track rowing machine -Double track rowing machine -Elliptical trainer -ab roller -grip strength meter -Starting pistol -Starting blocks -relay baton -high jump bar -sponge-rubber pad -timing podium -volleyball net -tennis rack -tennis net -tennis racket -football goal -football mini-goal -ping pong net -ball cart -gymnasium bench -barbell rack -Bench press -Jump rope -Tug of war rope -ribbed frame -Flat ladder -rope ladder -quincuncial piles -pull-up parallel bar -Sports ribbon -standing long jump tester -Sitting flexion tester -sit-up tester -tension band -hula-hoop -abdominal machine -mountaineering machine -climbing machine -yoga ball -Agile Reaction ball -kettle-bell -suspension training belt -ViPR Barrel -M-Pad Balance Trainer -Battle ropes -squat rack -weight plate -pull-up -rugby goal -barbell piece base -jumping box -boxer target -Boxing foot target -bounce bench -hexagonal trampoline -weight lifting neck pad -push-up stand -split parallel bars -Resistance training sticks -fitness stick -vibration trainer -kickball machine -baseball machine -Table tennis service machine -Tennis service machine -Badminton service machine -Volleyball service machine -Football shooting machine -Universal abdominal disc -Fitness handball -Gliding Discs -marker plate -Agility Ladder -yoga block -yoga wheel -silicone double ball -foam shaft -Pellet Yoga balls -fascial knife -fascia gun -ice pack -posture correction cushion -massage stick -box training bar -bend bar -Three fold cushion -dumbbell stand -Wave velocity ball rack -rehabilitation treadmill -Butterfly machine -Throwing ball -Fitness Ring -Ped-o-Pull -ladder bucket -referee's stand -training dummies -Vault -Gymnastic rings -springboard aid -walking machine -treadle machine -path roller -porsche -chevrolet -honda -classic car -bicycle handlebar -off-road vehicle -open-wheel car -bentley -bmw -hyundai -subaru -travel trailer -mitsubishi -bugatti -alfa romeo -audi -mercedes-benz -cadillac -sport utility vehicle -enduro motorcycle -maserati -food truck -microvan -general motors -lexus -mazda -lotus elise -kia motors -rolls-royce -sidecar (vehicle) -acura -recumbent bicycle -chrysler -flatland bmx -suzuki -mclaren automotive -steam car -buick -single scull -solar vehicle -escort carrier -hoverboarding -pushing cart -ambulance -amphibious vehicle -armored car -armored personnel carrier -armored vehicle -balsa raft -bassinet -beach wagon -bicycle -bicycle-built-for-two -bicycle seatpost -bloodmobile -bulldozer -bumper car -bus -taxi -cable car -camper -camper trailer -car carrier -carriage -chairlift -chariot -choo-choo -chuck wagon -compact car -coupe -covered wagon -cultivator -deck-house -delivery truck -diesel locomotive -dray -dump truck -dune buggy -fire truck -flatbed -forklift truck -freight train -garbage truck -go-kart -golf cart -half track -hand truck -harvester -horsecar -horseless carriage -jaunting car -jeep -jinrikisha -ladder truck -limber -limousine -lorry -mail car -milk float -minicar -minivan -moped -motorcycle -motor scooter -mountain bike -oxcart -palanquin -panda car -passenger train -pavior -pedicab -personnel carrier -pickup truck -police van -pony cart -raft -riding mower -roadster -school bus -scull -sedan -semitrailer -serving cart -shipping -shopping cart -shunter -snowmobile -sports sedan -steam locomotive -road roller -streetcar -subway train -sulky -switch engine -tandem trailer -tank -tank destroyer -telpher -tow truck -tractor -trail bike -trolleybus -unicycle -van -baby walker -walker -watering cart -weapons carrier -cableway vehicle -chuckwagon -self-propelled modular transporter -dolls' pram -tornado intercept vehicle -ice resurfacer -pedelec -ambulance helicopter -shunting tractors -cidomo -electric kick scooter -kite buggying -popup camper -paratransit -bmx bike -open top bus -ice cream van -ice cream cart -tall bike -panel van -steam wagon -rat bike -presidential car -steam bus -steam tractor -quad bike -tandem trike -silo truck -roadrailer -cargo trailer -amphibious excavator -armed response vehicle -kayak paddle -boxcab -d class lifeboat -drift trike -electric trike -fatbike -hook and ladder truck -hpi savage -road bicycle -flatbed truck -twike -self-balancing unicycle -box truck -construction trailer -monster truck -boat trailer -ghost bike -routemaster -mikoshi -rickshaw -Electrically tricycle -Children's tricycles -Sanitation tricycle -tricycle for the elderly -Police motorcycles -Pedal motorcycle -curved beam motorcycle -electric scooter -All Terrain Vehicle -amphibian plane -Unmanned aerial vehicle -hot air balloon -ceiling fan -tablet computer -display device -mobile device -ipad -game controller -air conditioner -android -appliance -beeper -calculator -camcorder -camera -candle -cell phone -chandelier -charger -coffee maker -computer -convector -desk phone -diaphragm -dishwasher -headphone ear pad -electric fan -electric heater -electric range -exhaust fan -floor lamp -fluorescent -gas oven -hair drier -home appliance -iron -joystick -keyboard -lamp -lens cap -loudspeaker -magnetic disk -magnetic tape -megaphone -microwave -sociable -optical disk -oven -pay-phone -photocopier -printer -radome -record player -remote -speaker -rotisserie -projection screen -sewing machine -switch -table lamp -toaster -trouser press -vacuum cleaner -washer -lcd projector -disco ball -electric kettle -butter lamp -touchpad -wheel chandelier -ati rage -sixaxis -crystal salt lamp -Maglev Crafts -rice cooker -electric frying pan -electric steamer -Micro-wave oven -induction cooker -electric thermos -water heater -electric furnace -electric coffee maker -vegetable cutter -meat grinder -Juicer -electric mixer -Noodle press machine -dumpling machine -household rice mill -tofu tofu juice machine -electric peeler -Yogurt machine -Ice shaver -ice cream machine -Water Purifier -refrigerator -range hood -ventilator -hand dryer -massager -hair dryer -humidifier -air purifier -dehumidifier -desktop fan -floor fan -carpet cleaning machine -Vacuum cleaner -Sweeping robot -electric iron -household water pump -Smoke detector -home blood pressure monitor -home blood glucose meter -electric blanket -electronic mosquito killer -TV set -radio -recorder -copier -fax machine -Landline -washing machine -Dryer -floor waxing machine -bread machine -Electric cake stand -Soymilk machine -Disinfection cabinet -stereo -mp3 -digital set top box -Wireless Walkie-Talkie -bb machine -freezer -water dispenser -wall mounted air conditioner -cabinet air conditioner -ceiling air conditioner -window air conditioner -game console -microphone -antenna -hearing aid -Battery -earphone -Ice maker -majiang machine -bath heater -Electric pressure cooker -noodle machine -Fruit and vegetable sterilizer -egg cooker -Egg beater -Bean sprouts machine -kitchen treasure -household waste disposer -Water purifier -Pipeline machine -Mite removal vacuum cleaner -steam mop -Garment steamer -shoe shine machine -shoe dryer -Electric mosquito swatter -electronic breast pump -foot tub -Thermometer -Body Fat Meter -electric sewing machine -shoe cover machine -Lint Remover -sandwich maker -popcorn machine -oxygen machine -soap dispenser -D shape handle -Wired Mouse -wireless mouse -data line -usb interface -converter -Bluetooth earphone -over-ear headphones -Bone Conduction Headphones -earphones -Headphone charging box -Flash Card -USB drive -SSD -disk -mechanical hard drive -electronic bracelet -home projector -Mixing console -Recording pen -Lavalier Mike -External screen -router -light cat -Network Interface -type-c interface -Cooling bracket -HDMI interface -PD interface -VGA interface -Chassis -graphics card -computer battery -Power Adapter -CPU -RAM -motherboard -heat sink -optical drive -numeric keypad -touch pen -Light bulb -wash lamp -energy saving lamp -flashlight -street light -post lamp -Polaroid -mirrorless camera -panoramic camera -monitor -medicinal mushroom -lingzhi mushroom -pleurotus eryngii -russula fragilis -cortinarius anserinus -hygrocybe cantharellus -mycena arcangeliana -hygrophorus olivaceoalbus -crinipellis scabella -atheniella adonis -pholiota jahnii -lactarius deterrimus -hygrocybe punicea -hygrocybe chlorophana -trametes ochracea -leucoagaricus nympharum -protostropharia semiglobata -tricholoma sulphureum -pluteus romellii -resupinatus trichotis -arrhenia retiruga -hericium cirrhatum -bisporella citrina -hygrocybe insipida -resupinatus applicatus -ganoderma lucidum -leucocoprinus brebissonii -lanzia echinophila -chroogomphus rutilus -clavulinopsis helvola -hebeloma radicosum -geoglossum fallax -hygrocybe reidii -cerioporus varius -leccinum versipelle -tubifera ferruginosa -tarzetta cupularis -psathyrella bipellis -helvella elastica -mycena stipata -agaricus dulcidulus -aureoboletus projectellus -russula emetica -gamundia striatula -rutstroemia firma -lachnella alboviolascens -ganoderma pfeifferi -geastrum fimbriatum -inocybe petiginosa -lachnum virgineum -mycena aetites -mycena meliigena -leucopaxillus giganteus -armillaria ostoyae -picipes tubaeformis -pholiota conissans -xerocomellus porosporus -russula rosea -galerina clavata -lycoperdon echinatum -conocybe arrhenii -lepiota magnispora -lepista personata -pluteus semibulbosus -gelatoporia dichroa -agaricus cupreobrunneus -helvella macropus -cortinarius decipiens -cortinarius sanguineus -clitopilus geminus -psathyrella corrugis -marasmiellus ramealis -cortinarius citrinus -hygrocybe russocoriacea -inocutis rheades -glutinoglossum glutinosum -metatrichia vesparia -neoboletus luridiformis -humaria hemisphaerica -suillellus queletii -pleurocybella porrigens -mycena capillaris -stropharia aeruginosa -lactarius torminosus -cuphophyllus fornicatus -cortinarius bolaris -typhula fistulosa -coprinopsis macrocephala -marasmius epiphylloides -phaeomarasmius erinaceus -geoglossum cookeanum -rhizomarasmius setosus -dumontinia tuberosa -parasola lactea -roridomyces roridus -russula sardonia -mycena tenerrima -clitopilus hobsonii -mitrophora semilibera -rubroboletus legaliae -agrocybe elatella -ganoderma resinaceum -gomphus clavatus -cortinarius aprinus -asterophora parasitica -tricholoma aestuans -marasmius bulliardii -mycena belliae -thelephora palmata -mycenella salicina -hygrocybe coccineocrenata -volvariella murinella -hygrophorus penarius -entoloma araneosum -marasmiellus vaillantii -melastiza cornubiensis -lycoperdon mammiforme -pseudoplectania nigrella -cortinarius purpureus -spinellus fusiger -macrolepiota mastoidea -gyroporus castaneus -coprinellus domesticus -hygrocybe conicoides -capitotricha bicolor -hygrocybe ovina -cyathus olla -marasmius cohaerens -dacrymyces capitatus -lactarius obscuratus -mycena stylobates -parasola misera -crepidotus calolepis -mycena juniperina -physarum album -flagelloscypha minutissima -pholiota scamba -marasmius limosus -trichopeziza subsulphurea -hygrocybe singeri -craterellus tubaeformis -microporus xanthopus -lysurus mokusin -auriscalpium vulgare -exsudoporus frostii -coprinopsis picacea -panaeolus papilionaceus -ganoderma applanatum -amanita vaginata -astraeus hygrometricus -annulohypoxylon thouarsianum -lycoperdon perlatum -sarcoscypha austriaca -hygrocybe flavescens -chlorophyllum rhacodes -mutinus elegans -parasola plicatilis -geastrum triplex -panellus stipticus -lichenomphalia chromacea -helvella vespertina -amanita flavoconia -cortinarius iodes -trametes hirsuta -schizophyllum commune -clathrus archeri -sarcoscypha occidentalis -aseroe rubra -leccinum scabrum -hydnellum peckii -hexagonia hydnoides -clathrus columnatus -panaeolus foenisecii -phallus indusiatus -leucocoprinus fragilissimus -entoloma hochstetteri -leratiomyces erythrocephalus -favolaschia calocera -cruentomycena viscidocruenta -ileodictyon cibarium -mycena interrupta -roridomyces austrororidus -pleurotus dryinus -pseudevernia furfuracea -laetiporus cincinnatus -brown cup -earthball -stalked puffball -false truffle -truncocolumella citrina -sarcosomataceae -truffle -coral fungus -mushroom -agaricus arvensis -false deathcap -amanita muscaria -amanita phalloides -amanita rubescens -destroying angel -chanterelle -cinnabar chanterelle -omphalotus illudens -inky cap -coprinus comatus -milkcap -marasmius oreades -pleurotus ostreatus -pholiota astragalina -pholiota aurea -pholiota destruens -pholiota flammans -nameko -pholiota squarrosa -pholiota squarrosoides -stropharia ambigua -stropharia hornemannii -stropharia rugoso-annulata -entoloma lividum -entoloma aprile -chlorophyllum molybdites -parasol mushroom -lepiota naucina -lepiota rhacodes -american parasol -lepiota rubrotincta -lepiota clypeolaria -blewits -sandy mushroom -tricholoma pessundatum -tricholoma pardinum -tricholoma vaccinum -tricholoma aurantium -pluteus aurantiorugosus -deer mushroom -volvariella bombycina -clitocybe clavipes -clitocybe dealbata -clitocybe inornata -clitocybe robusta -lepista irina -flammulina velutipes -leotia lubrica -sarcoscypha coccinea -caloscypha fulgens -urnula craterium -galiella rufa -jafnea semitosta -common morel -disciotis venosa -verpa bohemica -black morel -morchella semilibera -lorchel -helvella crispa -gyromitra -phallus ravenelii -calostoma lutescens -calostoma cinnabarina -calostoma ravenelii -puffball -earthstar -bird's-nest fungus -gastrocybe lateritia -bracket fungus -albatrellus ovinus -neolentinus ponderosus -polyporus tenuiculus -polyporus squamosus -beefsteak fungus -agaric -bolete -witches' butter -tremella reticulata -jew's-ear -hygrocybe acutoconica -hygrophorus inocybiformis -hygrophorus marzuolus -hygrophorus purpurascens -hygrophorus russula -hygrophorus sordidus -hygrophorus tennesseensis -cortinarius armillatus -cortinarius atkinsonianus -cortinarius corrugatus -cortinarius gentilis -cortinarius semisanguineus -cortinarius subfoetidus -cortinarius violaceus -gymnopilus spectabilis -gymnopilus ventricosus -armillaria caligata -armillaria ponderosa -armillaria zelleri -honey mushroom -wood ear -birch bolete -baseball uniform -knit cap -black belt (martial arts) -chef's uniform -cheerleading uniform -dog fashion -gas mask -diving mask -t-shirt -motorcycle personal protective equipment -hair accessory -side cap -galia -water shoe -abaya -anklet -apron -armband -arm guard -armor -baby & toddler shoe -back brace -balaclava -ballet tutu -bandage -baseball cap -bathing cap -batting glove -beanie -bearskin -beret -bib -biohazard suit -biretta -blindfold -boater -body armor -bolero -bonnet -boot -boxing glove -suspenders -bangle -bandeau -burqa -bustier -calpac -camail -cap -cast -catcher's mask -chanfron -chest protector -flat cap -coat -cocked hat -collar -comforter -coonskin cap -coverall -cowboy hat -cravat -crown -dashiki -diving suit -dog collar -double-breasted jacket -dress -dunce cap -earring -elbow pad -eyepatch -face veil -feather boa -fedora -fencing mask -fez -flipper -football helmet -footwear -french heel -fur -fur hat -garrison cap -gasmask -gauntlet -glengarry -glove -grass skirt -overcoat -handcuff -handwear -hat -headdress -helmet -hijab -horseshoe -insole -irons -jacket -kaffiyeh -kepi -kilt -kimono -knee pad -knit -knitwear -mask -military uniform -moccasin -mortarboard -muff -neck brace -necklace -neckpiece -tie -nightwear -nose ring -outerwear -outsole -oxygen mask -pendant earring -plus fours -porkpie -rainwear -roller bandage -rollerblade -roller skates -sailor cap -sailor suit -sandals -scarf -sealskin -sharkskin -shin guard -shirt -trunks -shower cap -ski boot -ski cap -skirt -skullcap -sleeper -sling -slipper -sock -solleret -sombrero -sou'wester -space helmet -spacesuit -spike heel -stacked heel -stockings -sunglasses -surplice -sweatband -tiara -tights -topknot -toque -turban -undergarment -uniform -vest -bracelet -watch cap -wedge heel -wimple -workwear -lei -wristband -bracelet wood -glove leather -ribbon hair accessory -surgical mask -rubber glove -bridal glove -fingerless glove -helmet liner -riding helmet -santa hat -diving helmet -guy fawkes mask -fustanella -crop top -leopard skin -sangmo -alice band -ripped jeans -n95 respirator -medical glove -hoop earring -pelerine -witch hat -toe ring -fur collar -dragoon helmet -clothing in tibet -full-face helmet -turtleneck sweater -solitaire ring -capirote -tracksuit bottoms -half zip sweater -áo dài -tin foil hat -shirt collar -maxiskirt -white sapphire engagement rings -domino mask -gymnastics leotard -wide leg jeans -chullo -sleeveless shirt -roller shoe -winklepicker -leather clothing -pillbox hat -scrunchie -down vest -open-face helmet -poodle skirt -corinthian helmet -funerary mask -sheepskin boots -bakya -ushanka -shtreimel -ghillie suit -cross necklace -peep-toe shoe -jean shorts -phulkari -slave bracelet -stahlhelm -captive bead ring -yoga pants -trumpet skirt -tiered skirt -bucket hat -nurse uniform -coconut bra -maid's uniform -hoodie -plaster mask -collar button -barong tagalog -baby bonnet -sunhat -Glasses -hair clip -headdress flower -hair comb -hair crown -Hairpin -Hair band -Eardrop -Ear Studs -Ear line -nose needle -silk scarf -long sweater chain -brooch -corsage -badge -waist chain -belt -shawl -short sleeve T-shirt -long sleeve T-shirt -dress shirts -Chiffon shirt -knit shirt -cardigan -polo shirt -thin cardigan -cashmere sweater -sweater -Hoodie -vest -camisole -undershirt -short jacket -denim jacket -windbreaker -Suit -leather jacket -cotton coat -down jacket -woolen coat -Chiffon dress -lace dress -half-circle skirt -midi skirt -Tutu -casual pants -Jeans -base layer pants -Harem pants -wide-leg pants -Capri pants -Shorts -short skirt -disposable diapers -Boxing Mouthguard -Weightlifting Belt -Compression Bandage -Buoyancy Vest -Support Belt -Posture Corrector -Wrist sweatband -Neck brace, Cervical collar -Shoulder support -Elbow pad -Ankle support -Silver bracelet -Jade pendant -Agate bracelet -Buddhist prayer bead -Gold bracelet -Calibrated watch -Electronic watch -Square ring -Wire ring -Name ring -Diamond ring -Jade stone ring -Ring with inlaid gems -Gold ring -Platinum ring -Pearl ring -Bracelet -Bulletproof Clothing -Bulletproof Helmet -egg as food -bun (food) -chicken as food -fried noodles -turkey meat -hot dog bun -california roll -sliced bread -chocolate brownie -sandwich cookies -udon -soba -instant noodles -tinapa -fried fish -duck meat -tomato soup -pierogi -salted duck egg -chicken nugget -lumpia -chinese sausage -prawn ball -kabayaki -quails as food -hyderabadi biriyani -shumai -gyūtan -soy egg -cellophane noodles -twice cooked pork -saag -pickled cucumber -kung pao chicken -fried aubergine -lemon chicken -scrambling eggs -separating eggs -onion rings -beet salad -lobster bisque -takoyaki -cockle food -peking duck -bibimbap -egg -yolk -dehydrated food -fruit cocktail -crab cocktail -shrimp cocktail -borsch -turtle soup -eggdrop soup -stew meat -tiramisu -pudding -creme caramel -apple tart -pie -pecan pie -chocolate eclair -chocolate cake -cupcake -sponge cake -jellyroll -upside-down cake -cookie -dog biscuit -macaroon -coconut macaroon -oreo -raisin cookie -fortune cookie -gingerbread man -donuts -french fritter -fritter -buckwheat cake -buttermilk pancake -blintz -potato pancake -waffle -squab -drumstick -chicken wings -barbecued wing -raw meat -chicken liver -goose liver -beef tongue -sparerib -fish steak -beefsteak -beef loin -t-bone steak -buffalo -jerky -rabbit -lamb roast -leg of lamb -cochon de lait -pork belly -bacon -sausage -black pudding -pepperoni -bread/bun -breadstick -cracker -english muffin -chapati -pita -raisin bread -rye bread -corn cake -cinnamon toast -bran muffin -cross bun -sweet rolls -bear claw -cinnamon roll -biscuit (united states) -saltine -water biscuit -pretzel -sandwich -ham sandwich -open-face sandwich -hamburger -hot dog -farfalle -noodles -orzo -spaghetti -vermicelli -macaroni -lasagna -wonton -dumplings -gruel -cold cereal -granola bar -bean curd -baked potato -chips -mashed potato -chip -corn chip -popcorn -stuffed mushroom -bass -stockfish -pickled herring -rollmops -oysters rockefeller -crab legs -alaska king crab -lobster tail -salmon -smoked salmon -scallop -sea scallop -caviar -smoked mackerel -rice -salad -fruit salad -egg yolk -boiled egg -easter egg -poached egg -omelette -fried egg -dough -beef wellington -croquette -dolmas -spring rolls -fried rice -frog legs -meatball -meat loaf -meat pie -mostaccioli -pizza -steak tartare -steak au poivre -stuffed tomato -sashimi -tempura -burrito -spaghetti squash -soup -grasshopper pie -chicken leg drumstick -chicken leg thigh -steamed rice -wheat noodle -dorayaki -tom yum -baba ghanoush -banh khot -negitoro -cold rice noodles -melon and jamón -ichigo daifuku -yudofu -kishimen -curry ramen -mille crêpe -strozzapreti -semla -red bean paste -pineapple bun -miso nikomi udon -taralli -peach bun -glutinous rice -ice cream cone -masala dosa -yaki udon -cake pop -pain au chocolat -kulich -cha siu bao -palatschinke -digestive biscuit -princess cake -panforte -red velvet cake -bakmi -macaroni soup -mapo doufu -oyakodon -chankonabe -unadon -chicken mcnuggets -unagi -zapiekanka -shashlik -lamian -kue lapis -rocky mountain oysters -salmorejo -jagdwurst -battenberg cake -monjayaki -kutsinta -texas toast -fudge cookie -smoked scallop -tompouce -syrniki -pico de gallo -cauliflower soup -chakli -windbeutel -parotta -melonpan -walnut pastry -kourabiedes -cavatelli -orecchiette -paccheri -tagliolini -agnolotti -gyūdon -beer cake -carrot soup -meal soup -zopf -egg tart -pork cutlet -spinach soup -picarones -spekkoek -poğaça -chāhan -sfiha -cavatappi -tandoor bread -stroopwafel -rum ball -murukku -éclair -canelé -puree soup -poffertjes -blackout cake -lotus seed bun -koeksister -chicken skin -barbari bread -kransekake -confit byaldi -crêpe bretonne -avocado toast -fraisier -mysore pak -sweet potato pie -wonton noodles -tangbao -malasada -malloreddus -tarta de santiago -italian beef -misua -champorado -pizzelle -vanillekipferl -buko pie -fruit tart -apam balik -karedok -omurice -chongqing noodles -gingerbread house -zhajiangmian -streuselkuchen -knife-cut noodle -bazlama -bacon and egg pie -blooming onion -bolo de rolo -boston cream doughnut -bánh tét -cemita -bánh xèo -char kway teow -cherry pie -chocolate sandwich -coconut doughnut -crispy pata -rotini -fagottini -smiley cookies -garden salad -dacquoise -fruit pies -guagua de pan -gulai ayam -taro dumpling -duck liver -pudding corn -jalebi -lanzhou beef noodles -caramel shortbread -kek lapis sarawak -khaman -kassler -roasted cauliflower -grilled zucchini -smoked turkey -sfogliatelle -smoked bacon -trout fillet -beef liver -braised beef -roulades meat -smoked spare ribs -mitarashi dango -krumkake -tea egg -okonomiyaki -weisswurst -pandebono -japchae -douhua -hiyashi chūka -chicken leg quarters -pizza al taglio -potsticker -rice and gravy -lekor -sate padang -snow skin mooncake -sopaipilla -teddy grahams -tomato omelette -mixian -vietnamese noodles -oyaki -hot dry noodles -beef chow fun -pork chop bun -bourbon biscuit -garganelli -raspberry tart -alphabet pasta -papadum -shrimp étouffée -kangkung belacan -Rice Sponge Cake -Peanut Butter -Spicy Sliced Aotus Root -Duck King -Potato Chips -Shallot pancake -Chinese Savory Pancake -Egg Pancake -Salt Crispy Chicken -Crispy Rice Cakes -Donkey Roll -Soda Crackers -Boneless Chicken Strips -Crispy Sausage Roll -Clay Oven Rolls -German Pudding Tart -Spicy and Numbing Mix -sushi -Brown Sugar Milk Taro Dessert -Purple sweet potato sticky rice cake -Pan-Fried Pork Buns -Water Chestnut Cake -Steamed Shrimp and Zucchini Dumplings -Soy Sauce Pancakes -Deep-Fried Milk -Deep-Fried Cabbage -Soy Sauce Eggs -Sour and Spicy Noodles -Copper Gong Bao -Grilled Milk Cubes -Wonton -Hand-grabbed pancake -Milk Crispy Roll -Yang Chun Noodles -Jianbing Guozi -Louisiana-style Chicken Wings -Chicken Wing Rice Bowl -Fruit Tea -Fried Vegetable Dumplings -Pan-fried Cumin Tofu -Xue Mei Niang -Stir-fried Rice Cake -Sour and Spicy Radish Slices -Sweet Potato Balls -Sweet Pancakes -Hot dry noodles -Spiced Tea Eggs -Sesame Sauce Noodle -Qie Gao -Malatang -Shrimp Scramble Egg -Wolf's tooth potato -Red bean glutinous rice cake -Chinese cruller -Frog on a stone board -Sweet dumplings -Dumpling soup -Hand-shredded abalone mushroom -Spicy and sour shredded potatoes -Yuxiang shredded pork -Dry-fried green beans and potatoes -Steamed egg with minced meat -Roasted fermented tofu -Chicken leg in teriyaki sauce -Minced meat with eggplant -Pickled mustard greens with vermicelli noodles -Hand-shredded pickled mustard greens -Clams with baby bok choy in oyster sauce -Stir-fried bean sprouts with noodles -Stir-fried large shrimps with oil -Sweet and sour spare ribs -Tofu soup -Yellow braised chicken -Stir-fried zucchini -Coca-Cola chicken wings -Red-braised lion's head -Garlic sprout king trumpet mushroom -Hand-shredded chicken -Dry-pot cauliflower -Dipping sauce stuffed huajia -Sweet and sour pork loin -Sauce abalone mushrooms -Boiled meat slices -Stir-Fried Pork with Green Bell Peppers -Garlic Flavored Pork Ribs -Oyster Sauce Lettuce -Sour Soup with Beef -Stir-fried meat and vermicelli -Minced Meat Japanese Tofu -Mushroom soup with Agaricus bisporus -Winter melon meatball soup -Salt and Pepper Shrimp -Tomato scrambled eggs -Lotus pond stir fry -Sour and spicy bok choy -Spicy diced chicken -Green pepper and preserved egg -Stir-fried string beans -Bok choy and tofu stew -Red braised pork -Roast pork -Tiger skin green pepper -Spicy and numbing hot pot -Tomato sparerib soup -Enoki mushroom and bacon roll -Pan-fried shrimp cake -Braised Beef in Soy Sauce -Twice-Cooked Pork -Stir-Fried Green Pepper, Ham, and Eggs -Stir-Fried Green Soybeans and Chinese Sausage -Stir-Fried Shiitake Mushrooms and Mustard Greens -Dry-Fried Potatoes -Steamed Pork Spareribs with Rice Flour -Stir-Fried Pumpkin -Cold Dish of Chicken Gizzard -Pan-Fried Sole Fish -Green Bell Pepper Pork -Stir-Fried Green Beans -Minced Meat and Bean Sprouts -Stir-Fried Napa Cabbage with Vinegar -Stir-Fried Broccoli and Mushrooms -Blanched Shrimp -Crab Meat and Egg Yolk Tofu -Stir-Fried Pork with Chili Peppers -Stir-Fried Chinese Leek and Dried Tofu -Braised Pork Spareribs with Potatoes -Stir-Fried Lotus Root Slices -Braised Eggplant -Hangzhou Beef with Green Pepper -Stir-fried Garlic Chives and Squid Tentacles -Stir-fried Asparagus and Eggs -Stir-fried Pig Ear with Chili Peppers -Stir-fried Water Bamboo Shoots -Stir-fried Beef with Arugula -Oil Noodle Roll with Pork Filling -Fried Egg -Thai-style Sour and Spicy Shrimp -Stir-fried Corn with Minced Pork -Pickled Pepper Duck Blood -Stir-fried Mushroom and Eggs -Stir-fried Enoki Mushrooms and Tofu -Stir-fried Loofah -Cold-mixed String Beans -Stir-fried Pork Liver -Stir-fried Pork with Garlic Chives -Stir-fried Clams in Hot and Spicy Sauce -Sour Pickled Cabbage Fish -Wood Ear Mushroom Pork Slices -Spicy Mapo Tofu -Stir-fried Garlic Chives and Eggs -Corn Braised Pork Ribs -Braised Green Beans and Eggplant -Yam Braised Duck -Pineapple Duck -Shrimp and Egg Stir-Fry -Saliva Chicken -Creamed Broccoli in Broth -Cumin-spiced Potato Slices -Satisfaction Cabbage Rolls -Golden Cake -Braised Tofu with Fresh Shrimp -Garlic French Bread -Braised Pork Ribs in Soy Sauce -Bao Dan Jian Jiao -Green Melon and Shrimp -Stir-fried Komatsuna -Curry Potato -Cold Salad Lettuce -Steamed Sea Bass -Cold mixed Spinach -Stir-fried Pork Strips with Mustard Greens and Snap Peas -Lachang Fried Holland Beans -Spicy Braised Pork Trotters -Braised Pork Trotters in Red Sauce -Steamed king crab -Spicy hairy crab -Braised shrimp -Garlic-based shrimp -Braised fish -Tomato fish -Grilled fish -Boiled fish -Steamed fish -Fish head tofu soup -Chrysanthemum fish -Fish stew with tofu -Smoked fish -Fish Head with Chopped Pepper -Braised Jinchang Fish -Stir-Fried Squid -Pan-fried small yellow croaker -Three cups of chicken -Stir-fry thousands of sheets -hot and sour soup -Chili Chicken -Meat Dumplings in Spicy Sauce -Sichuan Sausage -pea noodles -Dengying shredded chicken -yeerba -Small crispy meat -saba banana -calamansi -matoke -eastern prickly pear -red bell pepper -european pear -barbary fig -yellow pepper -iceburg lettuce -tayberry -fruit cup -elephant garlic -artocarpus integer -hardy kiwi -hamimelon -solanum lycopersicum -exocarpos cupressiformis -gomphocarpus physocarpus -hexastylis arifolia -pyracantha coccinea -rubus leucodermis -citrus trifoliata -quercus rotundifolia -rubus ulmifolius -edible fruit -potherb -greens -potato -mustard greens -bok choy -head cabbage -red cabbage -cauliflower -squash -butternut squash -turban squash -jerusalem artichoke -sprout -beet -beet green -chard -bell pepper -green pepper -hot pepper -chipotle -cayenne -onion -green onion -leek -crisphead lettuce -cos -celtuce -pea -carrot -carrot stick -celery -celeriac -chicory escarole -winter cress -gumbo -wild spinach -salsify -parsnip -radish -turnip -white turnip -spinach -taro -bunya bunya -peanut -banana peel -lemon peel -orange peel -apple -golden delicious -red delicious -jonathan -pippin -bramley's seedling -berry -bilberry -wintergreen -lingonberry -currant -gooseberry -black currant -dewberry -saskatoon -persimmon -acerola -ceriman -orange -tangelo -bitter orange -jaffa orange -lemon -lime (fruit) -grapefruit -citron -almond -jordan almond -acanthocereus tetragonus -plum -dried fruit -dried apricot -prune -raisin -fig -pineapple -passion fruit -granadilla -breadfruit -jackfruit -cocoa bean -cantaloup -winter melon -honeydew -persian melon -casaba -watermelon -cherry -capulin -morello -grape -fox grape -emperor -soursop -sweetsop -pond apple -papaw -papaya -kai apple -ackee -durian -feijoa -genip -kiwi fruit -sapodilla -sapote -tamarind -avocado -date -elderberry -guava -mombin -hog plum -jaboticaba -jujube -mamey -marang -medlar -mulberry -black olive -green olive -bosc -seckel -prickly pear -quandong -quince -pulasan -sorb -pumpkin seed -betel nut -beechnut -english walnut -brazil nut -butternut -souari nut -chestnut -coconut -groundnut -hickory nut -pine nut -sunflower seed -cumin -fennel -applesauce -criollo -coffee bean -corncob -juniper berry -pip -job's tears -castor bean -cottonseed -peach pit -cherimoya -ilama -bullock's heart -star anise -baneberry -actaea rubra -bayberry -tonka bean -algarroba -screw bean -nephthytis afzelii -ginseng -amaranth -beetroot -savoy cabbage -brussels sprout -kohlrabi -brassica rapa -rutabaga -samara -yam -sugarcane -sweet corn -dent corn -flint corn -rye -gourd -pumpkin -squash -summer squash -yellow squash -marrow -zucchini -cocozelle -cymling -winter squash -acorn squash -hubbard squash -buttercup squash -cushaw -prairie gourd -melon -muskmelon -cucumber -bottle gourd -loofah -angled loofah -balsam apple -balsam pear -kola nut -macadamia nut -cranberry -vaccinium macrocarpon -european cranberry -blueberry -european chestnut -chinese chestnut -japanese chestnut -acorn -mast -hazelnut -corylus avellana -beaked hazelnut -olive -walnut -juglans nigra -pecan -surinam cherry -rose apple -cattley guava -brazilian guava -punica granatum -banana -wild fig -mangosteen -kei apple -black mulberry -morus rubra -osage orange -shallot -carob -tamarindus indica -chickpea -soybean -lentil -yam bean -field pea -broad bean -cowpea -palm nut -coco plum -hawthorn -loquat -strawberry -garden strawberry -wild strawberry -wild apple -crab apple -damson plum -plumcot -apricot -sweet cherry -hagberry -prunus persica -nectarine -chokecherry -pear -boysenberry -loganberry -wine raspberry -red raspberry -wild raspberry -american raspberry -black raspberry -rubus parviflorus -rubus phoenicolasius -barbados cherry -carambola -citrus -bergamot -pomelo -citron -mandarin orange -tangerine -clementine -satsuma -sweet orange -ugli fruit -rangpur -citrange -kumquat -nagami -trifoliate orange -wild mango -akee -heartseed -longan -litchi -spanish lime -rambutan -cashew -mangifera indica -pistachio -japanese persimmon -diospyros virginiana -date plum -star apple -canistel -ribes rubrum -ribes nigrum -white currant -calabash -ipomoea batatas -capsicum -lycium barbarum -cherry tomato -plum tomato -ground cherry -chinese lantern plant -cape gooseberry -tomatillo -cassava -jumping bean -anise -seed -bean -nut -pod -pea pod -buckthorn berry -cubeb -linseed -cripps pink -stuffed artichoke -napa cabbage -chenopodium quinoa -tigerella -hanover tomato -totapuri -zwetschge -mirabelle plum -bramble fruit -goji -honeycrisp -blood orange -russet burbank potato -heirloom tomato -yukon gold potato -coeur de boeuf -dorsett golden -red granny smith -ataulfo -jonagold -dekopon -canary melon -dried cranberry -calabaza -chokeberry -arracacia xanthorrhiza -kettle corn -red kuri squash -green bell pepper -conference pear -rojas (manzana) -Parsley -Garlic moss -Chinese cabbage -Green vegetables -lettuce -Chinese chives -Leek -garlic sprouts -cress -bitter chrysanthemum -Glebionis coronaria -Amaranth -Toona sinensis -Chongcai -Tribute dish -Kale -shepherd's purse -fennel -Spinach -Brassica juncea -Brasenia schreberi -Nostoc -kelp -seaweed -Coriander -Brassica rapa -horseradish -radish -green onions -shallots -ginger -Jerusalem artichoke -lotus vegetable -Garlic -celtuce -Taro -Konjac -Potato -sweet potato -jicama -bamboo shoots -Burdock -Zizania -Chinese onion -Asparagus -Eleocharis dulcis -water chestnut -fernbrake greens -Lettuce -lily -lotus root -Ginger buds -bean sprouts -Chinese kale -chili -Green pepper -pepper -wax gourd -Momordica charantia -milk melon -cucumber -Gourd -snake melon -eggplant -kidney beans -Cowpea -Phaseolus vulgaris -sword bean -Green beans -Edamame -snake bean -corn -kidney bean -eyebrow beans -snake gourd -tremella -Nostoc commune -Umbilicaria esculenta Miyoshi -oyster mushroom -straw mushroom -tricholomataceae -shiitake mushroom -Dictyophora -Small oyster mushrooms -Enoki mushroom -Purple cabbage -Green chili peppers -green beans -broccoli -potherb mustard -Big Chinese cabbage -Small Chinese cabbage -Small greens -purple kale -Chives flowers -Asparagus schoberioides -Evergreen Dogwood -oilseed rape greens -Ginseng dish -okra -Fugui dish -leek sprouts -Sweet potato leaves -purple cabbage -water spinach -baby Chinese cabbage -moss dried leaves -mountain stinging dish -Portulaca oleracea -burr medic -Alfalfa -Fungus leaves -sea cabbage -ladle dish -Arhat dish -Water carrot -Bellflower Shreds -pagoda dish -Houttuynia cordata -Fresh mustard -Enoki dish -Pea sprouts -Toona sinensis bud -Radish sprouts -Buckwheat malt -Peanut sprouts -Soybean sprouts -Mung bean sprouts -broccoli -Nori vine -artichoke -Chaotian pepper -screw pepper -golden pumpkin -zucchini -Chayote -Four-sided beans -Corn tip -Hericium erinaceus -shaggy mane -Anchovy mushrooms -Tea tree mushroom -Pleurotus eryngii -Xiu Zhen Mushroom -Pork belly mushroom -Wakame -Brussels sprouts -Sprouts kale -broccoli rabe -kale -Purple-backed geranium -Bulb cabbage -Cantonese vegetable core -Heading Brussels Sprouts -Stuffed Mustard Greens -large leaf coriander -coriander leaf -rutabagas -root beets -lantern chili -Green Bean Rice -white radish -garlic -hybrid tea rose -nymphaea odorata -floribunda -julia child rose -evergreen rose -tagetes -hawaiian hibiscus -orange lily -beach moonflower -algerian iris -christmas orchid -purple passionflower -rose mary woods -cretan crocus -echeveria elegans -tulipa humilis -artichoke thistle -yellow canada lily -carolina rose -false bindweeds -moonlight cactus -woodland sunflower -chinese peony -lampranthus -rosa virginiana -myosotis scorpioides -alpine forget-me-not -torch lily -ranunculus asiaticus -rosa nitida -euryops pectinatus -hieracium canadense -flowering dogwood -lilium philadelphicum -spotted knapweed -sulfur cosmos -blue wood aster -pink evening primrose -crimson cattleya -tulipa linifolia -queen's lady's-slipper -lobster-claws -lilac hibiscus -clivia miniata -aquilegia formosa -sprenger's tulip -pink moccasin flower -pinkladies -geranium maculatum -carthamus lanatus -canada columbine -rosa moyesii -rosa pimpinellifolia -colorado blue columbine -camellia sasanqua -cosmos caudatus -hard-leaved pocket orchid -calendula officinalis -moon orchid -colt's foot -globe-flower -purple coneflower -fire lily -stemless gentian -mexican aster -alpine sea holly -great masterwort -barbeton daisy -pink-yellow dahlia -eriocapitella hupehensis -osteospermum -passion flower -desert-rose -mexican petunia -blackberry lily -delphinium parishii -oxalis purpurea -taraxia ovata -aquilegia chrysantha -tradescantia occidentalis -platanthera transversa -hydrangea macrophylla -calochortus gunnisonii -verbena stricta -ruellia humilis -panax trifolius -opuntia chlorotica -euphorbia albomarginata -venegasia carpesioides -solanum douglasii -heterotheca grandiflora -cyperus eragrostis -helminthotheca echioides -dendromecon rigida -sixalix atropurpurea -viola sempervirens -dactylorhiza sambucina -arctotheca prostrata -muilla maritima -micranthes californica -lupinus succulentus -diplacus puniceus -ipomoea indica -jaumea carnosa -carpobrotus chilensis -orchis purpurea -solanum umbelliferum -viola adunca -ranunculus auricomus -arundina graminifolia -digitalis grandiflora -malva arborea -galanthus nivalis -ranunculus californicus -hepatica americana -potentilla reptans -dianthus carthusianorum -primula clevelandii -ipheion uniflorum -leucojum aestivum -phacelia cicutaria -phlox drummondii -gagea lutea -oenothera cespitosa -erythrostemon gilliesii -nemophila heterophylla -layia glandulosa -echinocereus triglochidiatus -iris douglasiana -viola sororia -calochortus umbellatus -dudleya farinosa -calandrinia menziesii -agave utahensis -anemonoides ranunculoides -viola rotundifolia -ipomoea imperati -limonium sinuatum -viola lobata -plumbago zeylanica -zeltnera venusta -chaenactis fremontii -xylorhiza tortifolia -sphaeralcea ambigua -mentzelia involucrata -argemone albiflora -oxalis dillenii -lithophragma heterophyllum -viola glabella -viola primulifolia -erigeron glaucus -swamp rose -geraea canescens -argemone munita -scaevola plumieri -froelichia floridana -zephyranthes atamasco -borrichia frutescens -krameria lanceolata -cnidoscolus stimulosus -rhexia mariana -uvularia perfoliata -delphinium nudicaule -rosa gymnocarpa -trifolium willdenovii -lupinus nanus -pseudognaphalium californicum -triteleia laxa -eriogonum latifolium -anchusa arvensis -calochortus pulchellus -gilia tricolor -ranunculus hispidus -bidens cernua -paeonia californica -salvia columbariae -thalia geniculata -cerastium fontanum -achyrachaena mollis -asclepias fascicularis -uvularia sessilifolia -leptosiphon parviflorus -physocarpus capitatus -potentilla simplex -ceanothus herbaceus -youngia japonica -corydalis flavula -wyethia angustifolia -camissoniopsis cheiranthifolia -conicosia pugioniformis -hypericum tetrapetalum -mimosa nuttallii -narcissus poeticus -viola labradorica -solanum xanti -clarkia amoena -rosa californica -sairocarpus coulterianus -cistus salviifolius -crocanthemum scoparium -lactuca biennis -sisyrinchium angustifolium -anacamptis coriophora -aegonychon purpurocaeruleum -streptanthus glandulosus -petrorhagia dubia -triteleia ixioides -persicaria lapathifolia -mimosa quadrivalvis -rubus allegheniensis -crinum americanum -grindelia stricta -sisyrinchium bellum -linum bienne -eriophorum vaginatum -calochortus venustus -solanum emulans -epidendrum radicans -calochortus clavatus -prunus emarginata -securigera varia -sisyrinchium montanum -rhododendron columbianum -rhododendron macrophyllum -prosartes smithii -calochortus tolmiei -justicia americana -nama hispida -funastrum cynanchoides -houstonia caerulea -ipomoea pandurata -asclepias quadrifolia -clarkia concinna -silphium terebinthinaceum -houstonia longifolia -moraea sisyrinchium -malacothrix saxatilis -desmodium canadense -dactylorhiza maculata -dactylorhiza incarnata -berlandiera lyrata -calochortus weedii -sagittaria latifolia -rosa arkansana -hemerocallis fulva -coreopsis palmata -trifolium aureum -calochortus plummerae -fritillaria atropurpurea -heliopsis helianthoides -maurandya antirrhiniflora -psychotria poeppigiana -cochlospermum vitifolium -diodia virginiana -pancratium maritimum -spathoglottis plicata -ludwigia peploides -phyla lanceolata -impatiens parviflora -cnidoscolus texanus -oenothera elata -knautia arvensis -mesembryanthemum cordifolium -hippobroma longiflora -platanthera dilatata -lysimachia europaea -platanthera elegans -nothoscordum bivalve -ruellia strepens -helianthus maximiliani -heterotheca subaxillaris -rapistrum rugosum -ipomoea lacunosa -wyethia mollis -spiraea splendens -rosa woodsii -monardella odoratissima -lilium parvum -aconitum columbianum -potentilla gracilis -paeonia brownii -erythranthe primuloides -erythranthe moschata -polemonium californicum -sidalcea oregana -ipomopsis rubra -anemone berlandieri -asystasia gangetica -ruellia simplex -penstemon cobaea -veronica persica -viola bicolor -helenium bigelovii -campanula prenanthoides -penstemon rostriflorus -caladenia carnea -glossodia major -equisetum laevigatum -hydrophyllum capitatum -erythranthe alsinoides -decodon verticillatus -rosa acicularis -cirsium andersonii -geranium caespitosum -amelanchier utahensis -verbena macdougalii -orobanche minor -sabatia stellaris -kosteletzkya pentacarpos -elephantopus tomentosus -ipomoea sagittata -strophostyles umbellata -erigeron compositus -clematis occidentalis -claytonia lanceolata -cirsium muticum -dasiphora fruticosa -lactuca canadensis -viola nuttallii -centaurea stoebe -centaurea jacea -hemizonia congesta -bidens aristosa -croton glandulosus -agalinis tenuifolia -linum lewisii -clematis pitcheri -symphyotrichum chilense -convolvulus equitans -vernonia noveboracensis -gaillardia aristata -ribes nevadense -olsynium douglasii -symphyotrichum pilosum -symphyotrichum laeve -rudbeckia triloba -nuphar polysepala -symphyotrichum lanceolatum -leptospermum laevigatum -utricularia subulata -saxifraga bronchialis -echeveria gibbiflora -hyptis alata -calochortus leichtlinii -spiranthes magnicamporum -mentzelia hispida -tigridia pavonia -epilobium canum -doellingeria umbellata -emilia sonchifolia -malacothrix glabrata -acaena novae-zelandiae -fremontodendron californicum -pontederia crassipes -bauera rubioides -cylindropuntia echinocarpa -vigna luteola -lilium washingtonianum -ipomoea hederacea -opuntia humifusa -hibiscus laevis -lagurus ovatus -polygala nana -symphyotrichum divaricatum -datura wrightii -corethrogyne filaginifolia -ageratina havanensis -rhododendron maximum -iris domestica -silphium perfoliatum -lysimachia thyrsiflora -cirsium horridulum -calotropis gigantea -echinocereus reichenbachii -astragalus canadensis -nuphar variegata -murraya paniculata -duranta erecta -nymphoides indica -cosmos bipinnatus -tagetes lunulata -emilia fosbergii -ludwigia peruviana -sphagneticola trilobata -gentiana linearis -trillium cernuum -maianthemum trifolium -pedicularis densiflora -helianthus divaricatus -hepatica acutiloba -houstonia procumbens -silene flos-cuculi -ruellia caroliniensis -hypericum mutilum -polypremum procumbens -galeopsis bifida -encelia californica -calochortus monophyllus -calendula arvensis -narcissus tazetta -monardella villosa -castilleja affinis -muscari botryoides -ludwigia octovalvis -euphorbia misera -cylindropuntia ganderi -phacelia purshii -primula pauciflora -echinacea angustifolia -impatiens walleriana -geranium purpureum -spiraea alba -romulea rosea -platanthera psycodes -trifolium subterraneum -erythronium umbilicatum -dichelostemma capitatum -primula hendersonii -chaetopappa ericoides -leptosiphon bicolor -chrysogonum virginianum -eschscholzia caespitosa -cardamine californica -diplacus aurantiacus -aloe arborescens -pholistoma membranaceum -viola pedunculata -erodium botrys -nama demissa -eschscholzia parishii -eschscholzia minutiflora -salvia roemeriana -rosa rubiginosa -monoptilon bellioides -hymenocallis littoralis -trifolium hybridum -glandularia bipinnatifida -chylismia brevipes -diplacus bigelovii -brandegea bigelovii -hibiscus denudatus -trifolium depauperatum -oenothera deltoides -chaenactis stevioides -physalis crassifolia -cardamine concatenata -orchis anthropophora -oenothera triloba -gazania linearis -amsinckia menziesii -packera tampicana -hosackia gracilis -geranium lucidum -acmispon strigosus -castilleja exserta -penstemon spectabilis -lasthenia gracilis -perityle emoryi -trixis californica -calystegia macrostegia -fritillaria pudica -eriophyllum confertiflorum -lysimachia latifolia -limnanthes douglasii -eucrypta chrysanthemifolia -trillium nivale -veronica polita -phlox hoodii -oenothera drummondii -viola hastata -escobaria vivipara -calopogon tuberosus -solidago uliginosa -argentina anserina -linum pratense -hyacinthoides non-scripta -caulophyllum giganteum -maianthemum racemosum -peritoma serrulata -ficaria verna -echinocereus enneacanthus -phlox roemeriana -viola sagittata -engelmannia peristenia -matelea reticulata -bellardia trixago -geranium dissectum -verbascum virgatum -erythranthe guttata -nemophila parviflora -frasera caroliniensis -scilla siberica -alophia drummondii -thalictrum thalictroides -nemastylis geminiflora -cardamine flexuosa -calystegia soldanella -oenothera berlandieri -phlox divaricata -linum rigidum -oxalis incarnata -ribes lacustre -oenothera laciniata -senecio integerrimus -rhododendron calendulaceum -jeffersonia diphylla -potentilla indica -rhodotypos scandens -streptopus lanceolatus -echinocereus coccineus -lupinus polyphyllus -tetraneuris scaposa -aphyllon purpureum -trifolium arvense -pulsatilla nuttalliana -rosa nutkana -opuntia basilaris -tinantia anomala -phytolacca icosandra -phlox longifolia -phacelia bipinnatifida -thymophylla pentachaeta -caltha leptosepala -pinaropappus roseus -veronica filiformis -rhododendron groenlandicum -spiranthes vernalis -cirsium texanum -asphodelus fistulosus -herbertia lahue -evolvulus sericeus -silene laciniata -lygodesmia texana -pyrrhopappus pauciflorus -indigofera miniata -gaillardia aestivalis -calyptocarpus vialis -plectocephalus americanus -taraxacum erythrospermum -coreopsis basalis -bistorta bistortoides -krigia biflora -triodanis perfoliata -epilobium ciliatum -acmispon americanus -convolvulus althaeoides -serapias lingua -diplacus longiflorus -oxalis montana -commelina erecta -salvia microphylla -microsteris gracilis -cerastium glomeratum -hydrophyllum appendiculatum -vicia caroliniana -neptunia pubescens -symphyotrichum drummondii -calochortus argillosus -lonicera ciliosa -tagetes lucida -malvaviscus arboreus -pilosella caespitosa -helenium amarum -oenothera rosea -balsamorhiza sagittata -geranium sanguineum -leucocrinum montanum -toxicoscordion venenosum -castilleja applegatei -rudbeckia amplexicaulis -echinacea pallida -silene stellata -eustoma exaltatum -solanum laciniatum -tradescantia ohiensis -portulaca pilosa -camissoniopsis bistorta -sida abutifolia -leucospermum conocarpodendron -bituminaria bituminosa -phaenocoma prolifera -rhododendron canadense -neolloydia conoidea -valeriana sitchensis -aquilegia flavescens -viola pedatifida -parnassia glauca -dahlia coccinea -asclepias asperula -gilia capitata -myosotis arvensis -cirsium undulatum -spigelia marilandica -viola riviniana -asclepias variegata -erigeron foliosus -coreopsis lanceolata -vincetoxicum nigrum -lysimachia borealis -quincula lobata -kalmia microphylla -comarum palustre -pogonia ophioglossoides -silene antirrhina -potentilla norvegica -calochortus catalinae -clarkia rhomboidea -eriastrum eremicum -neptunia lutea -hydrangea quercifolia -pedicularis groenlandica -potentilla recta -calochortus splendens -geranium erianthum -peniocereus greggii -rhexia alifanus -coryphantha macromeris -leptosiphon nuttallii -asclepias lanceolata -oenothera glaucifolia -coreopsis major -ratibida pinnata -calochortus invenustus -hypericum kalmianum -silene regia -baileya multiradiata -senna covesii -helianthus grosseserratus -lysimachia quadriflora -antennaria rosea -linanthus pungens -liatris spicata -mimulus ringens -stellaria graminea -utricularia macrorhiza -phyteuma orbiculare -chimaphila menziesii -clematis drummondii -cicuta bulbifera -pediomelum argophyllum -centaurea calcitrapa -dalea purpurea -urena lobata -cyperus echinatus -sparganium erectum -lycoris radiata -carex magellanica -sibbaldiopsis tridentata -vancouveria hexandra -symphoricarpos rotundifolius -helenium flexuosum -wahlenbergia marginata -potentilla argentea -lysimachia maritima -campanulastrum americanum -persicaria amphibia -samolus repens -cirsium altissimum -etlingera elatior -carduus acanthoides -epilobium brachycarpum -eulobus californicus -phleum alpinum -commelina communis -centaurium erythraea -persicaria maculosa -rubus dalibarda -lupinus arcticus -clarkia purpurea -ruellia nudiflora -anoda cristata -milla biflora -zinnia peruviana -bartsia alpina -dicliptera brachiata -mollugo verticillata -scutellaria galericulata -centaurium pulchellum -veronica wormskjoldii -trillium undulatum -mimulus alatus -sabatia angularis -spiraea tomentosa -erythranthe lewisii -elephantopus carolinianus -calliandra eriophylla -elliottia pyroliflora -zephyranthes chlorosolen -lactuca floridana -viguiera dentata -phyla nodiflora -asclepias viridiflora -agalinis purpurea -arctotheca calendula -leontopodium nivale -nicandra physalodes -senecio flaccidus -eryngium leavenworthii -butomus umbellatus -symphyotrichum sericeum -solidago ptarmicoides -hedychium coronarium -gentiana cruciata -ferocactus histrix -pityopsis falcata -helianthus mollis -hydrolea ovata -liatris aspera -vitex agnus-castus -silphium integrifolium -vachellia farnesiana -cornus unalaschkensis -symphyotrichum novae-angliae -malva assurgentiflora -oxalis drummondii -agoseris aurantiaca -symphyotrichum puniceum -verbena officinalis -mimosa strigillosa -scorzoneroides autumnalis -habranthus tubispathus -helianthus debilis -opuntia fragilis -datura inoxia -cordia boissieri -ipomoea triloba -pavonia lasiopetala -oxalis latifolia -tridax procumbens -malvastrum coromandelianum -liatris cylindracea -cylindropuntia thurberi -neotinea ustulata -anemonastrum canadense -melochia pyramidata -palafoxia callosa -tradescantia pallida -echinops ritro -herissantia crispa -tecoma stans -echinocereus pentalophus -ipomoea cordatotriloba -verbena halei -wedelia hispida -nymphaea nouchali -zinnia elegans -ammannia coccinea -scadoxus puniceus -mecardonia procumbens -packera glabella -kerria japonica -commelina diffusa -argemone polyanthemos -geum rossii -allium stellatum -iris lacustris -hyobanche sanguinea -agrimonia gryposepala -echinops sphaerocephalus -oxalis articulata -pelargonium capitatum -anemone hortensis -asphodelus ramosus -leptospermum scoparium -crinum asiaticum -cistus monspeliensis -ophrys tenthredinifera -cascabela thevetia -lopezia racemosa -helianthus occidentalis -utricularia intermedia -gentiana algida -allowissadula holosericea -eremalche rotundifolia -anacamptis morio -goodenia ovata -dichrostachys cinerea -nephrophyllidium crista-galli -aconitum delphiniifolium -polemonium acutiflorum -funastrum heterophyllum -justicia pilosella -viola lanceolata -fuchsia boliviana -blackstonia perfoliata -sanguisorba canadensis -senecio pseudoarnica -protea caffra -nabalus trifoliolatus -passiflora vitifolia -bebbia juncea -hypochaeris glabra -himantoglossum robertianum -disphyma australe -evolvulus alsinoides -cephalanthus occidentalis -gaillardia pinnatifida -agapanthus praecox -gentiana sedifolia -scilla bifolia -thelesperma megapotamicum -abutilon fruticosum -anacamptis papilionacea -fumaria capreolata -chaenactis carphoclinia -rafinesquia neomexicana -atrichoseris platyphylla -rhexia virginica -ranunculus fascicularis -nuttallanthus canadensis -nemophila phacelioides -ophrys lutea -rhododendron lapponicum -thunbergia grandiflora -senecio inaequidens -viola macloskeyi -anaphalioides bellidioides -cleome rutidosperma -muscari armeniacum -rhodiola integrifolia -polygala rugelii -leopoldia comosa -impatiens noli-tangere -oxalis debilis -acmella repens -sagittaria lancifolia -ferocactus emoryi -stellaria pubera -erythronium oregonum -trillium flexipes -emmenanthe penduliflora -hedypnois rhagadioloides -senna armata -polygonatum multiflorum -langloisia setosissima -antigonon leptopus -ipomoea carnea -impatiens balfourii -limodorum abortivum -anacamptis pyramidalis -cardamine amara -cypripedium candidum -trifolium resupinatum -geranium sylvaticum -pediocactus simpsonii -helianthemum nummularium -salvia texana -urospermum dalechampii -brodiaea terrestris -centaurea montana -pallenis spinosa -verbena bonariensis -gentiana verna -phacelia parryi -loeseliastrum matthewsii -marshallia caespitosa -dyschoriste linearis -zephyranthes drummondii -thelesperma filifolium -phacelia grandiflora -beach rose -iris sibirica -dactylorhiza majalis -primula farinosa -orchis militaris -sabatia campestris -rosa bracteata -heliotropium indicum -montia parvifolia -trollius europaeus -cirsium neomexicanum -epilobium montanum -madia gracilis -oxalis stricta -neotinea tridentata -ixora coccinea -trifolium fragiferum -oenothera speciosa -campanula barbata -pseudocymopterus montanus -dalea candida -papaver cambricum -trifolium montanum -melampyrum arvense -silphium albiflorum -robinia neomexicana -campanula lasiocarpa -geum aleppicum -jasione montana -impatiens glandulifera -lilium bulbiferum -gymnadenia rhellicani -sida ciliaris -aster alpinus -hepatica nobilis -campanula patula -lantana camara -sonchus arvensis -clitoria ternatea -epipactis atrorubens -papaver dubium -pinguicula vulgaris -echinacea purpurea -macroptilium gibbosifolium -kallstroemia grandiflora -lactuca tatarica -pachystachys lutea -scabiosa columbaria -succisa pratensis -celmisia spectabilis -acaena anserinifolia -symphyotrichum ciliolatum -arnoglossum plantagineum -euphrasia nemorosa -psorothamnus schottii -phyteuma spicatum -erigeron acris -leucospora multifida -melampyrum nemorosum -gentianopsis ciliata -bistorta officinalis -lilium formosanum -bidens pilosa -melochia tomentosa -metrosideros fulgens -crepis capillaris -entelea arborescens -osteospermum moniliferum -thelymitra longifolia -wahlenbergia albomarginata -selliera radicans -lobelia anceps -passiflora tripartita -dendrobium cunninghamii -clematis alpina -geniostoma ligustrifolium -dimorphotheca fruticosa -gaultheria depressa -cistus creticus -ipomoea cairica -opuntia stricta -rhabdothamnus solandri -sisyrinchium rosulatum -symphyotrichum novi-belgii -pyrorchis nigricans -hesperocallis undulata -tithonia diversifolia -burchardia umbellata -oxalis obtusa -protea laurifolia -stephanomeria pauciflora -rhododendron tomentosum -callirhoe pedata -leucospermum cuneiforme -chironia baccifera -anemone coronaria -iris tenax -ruellia blechum -bahiopsis laciniata -richardia grandiflora -pulsatilla alpina -sairocarpus nuttallianus -bahiopsis parishii -chuquiraga jussieui -leucojum vernum -melanthera nivea -cirsium acaule -soldanella alpina -crocus vernus -encelia actoni -tetraneuris linearifolia -viola hirta -senecio vernalis -salvia verticillata -krigia virginica -triodanis biflora -geranium phaeum -pentaglottis sempervirens -betonica officinalis -consolida regalis -pinguicula alpina -turnera ulmifolia -ipomoea obscura -geranium pyrenaicum -dianthus superbus -potentilla canadensis -fritillaria camschatcensis -pulmonaria obscura -gagea minima -ophrys fusca -geranium pusillum -sanguisorba officinalis -brunia noduliflora -moraea gawleri -protea neriifolia -campanula latifolia -oenothera rubricaulis -rosa majalis -scabiosa ochroleuca -trifolium medium -anemone multifida -geranium palustre -cirsium heterophyllum -cota tinctoria -veronica spicata -potentilla erecta -hieracium umbellatum -inula salicina -picris hieracioides -diuris pardina -centaurea phrygia -ipomopsis longiflora -xylorhiza orcuttii -torenia crustacea -mohavea confertiflora -trichoptilium incisum -rosa spinosissima -keckiella antirrhinoides -erica abietina -gilia stellata -calycoseris wrightii -scilla forbesii -stellaria nemorum -tulipa sylvestris -chaenactis artemisiifolia -fragaria viridis -sidalcea sparsifolia -lysimachia clethroides -nymphaea candida -geranium sibiricum -euonymus verrucosus -inula britannica -eryngium planum -protea repens -ixeris chinensis -iris ruthenica -ranunculus cassubicus -amelanchier spicata -aconitum septentrionale -pterostylis pedunculata -diuris orientis -trollius asiaticus -commelina africana -drosera cistiflora -oftia africana -wachendorfia paniculata -pelargonium triste -serruria fasciflora -eriocephalus africanus -oxalis polyphylla -anemonoides altaica -carlina biebersteinii -cypripedium macranthos -trifolium lupinaster -ponerorchis cucullata -erythronium sibiricum -chicory -pot plant -calycanthus floridus -calycanthus occidentalis -purple anise -chinese magnolia -water lilly -nymphaea odorata -european white lily -lotus -blue lotus -nuphar lutea -sacred lotus -water chinquapin -peony -ranunculus bulbosus -lesser celandine -ranunculus flammula -sagebrush buttercup -mountain lily -western buttercup -ranunculus repens -aconite -aconitum napellus -wolfsbane -pheasant's-eye -alpine anemone -canada anemone -wood anemone -snowdrop anemone -anemone virginiana -rue-anemone -columbine -aquilegia canadensis -blue columbine -caltha palustris -pine hyacinth -clematis crispa -clematis lasiantha -golden clematis -scarlet clematis -leather flower -clematis vitalba -purple clematis -goldthread -rocket larkspur -eranthis hyemalis -hellebore -christmas rose -green hellebore -hepatica -false rue anemone -giant buttercup -nigella -black caraway -pasqueflower -american pasqueflower -western pasqueflower -false bugbane -globeflower -trifolium dubium -trifolium pratense -buffalo clover -sensitive plant -silk tree -calliandra -apocynum androsaemifolium -impala lily -common allamanda -natal plum -white dipladenia -chilean jasmine -frangipani -strophanthus -crape jasmine -trachelospermum jasminoides -periwinkle -myrtle -large periwinkle -anthurium -calla lily -pink calla -golden calla -dutchman's-pipe -corn cockle -pine-barren sandwort -rock sandwort -field chickweed -snow-in-summer -alpine mouse-ear -pink -dianthus barbatus -carnation -japanese pink -maiden pink -cheddar pink -button pink -cottage pink -fringed pink -lychnis -ragged robin -scarlet lychnis -mullein pink -wild pink -white campion -silene virginica -sand spurry -stellaria media -cowherb -carpobrotus edulis -livingstone daisy -amaranth -alternanthera philoxeroides -cockscomb -sweet sand verbena -yellow sand verbena -abronia maritima -abronia villosa -trailing four o'clock -four o'clock -california four o'clock -sweet four o'clock -night-blooming cactus -portulaca -rose moss -rock purslane -red maids -carolina spring beauty -spring beauty -virginia spring beauty -siskiyou lewisia -bitterroot -broad-leaved montia -toad lily -berteroa incana -bittercress -cardamine pratensis -crinkleroot -spring cress -purple cress -wallflower -bladderpod -virginian stock -chamois cress -jointed charlock -stanleya pinnata -poppy -prickly poppy -papaver rhoeas -argemone mexicana -celandine -tree poppy -california poppy -glaucium flavum -golden cup -blue poppy -welsh poppy -creamcups -matilija poppy -sanguinaria canadensis -papaver heterophyllum -stylophorum diphyllum -bleeding heart -squirrel corn -compass plant -pink-and-white everlasting -winged everlasting -plantain-leaved pussytoes -mountain everlasting -mayweed -yellow chamomile -corn chamomile -eriophyllum wallacei -greater burdock -african daisy -blue-eyed african daisy -marguerite daisy -silversword -arnica -arnica montana -aster -bushy aster -heath aster -stiff aster -new england aster -upland white aster -aromatic aster -bog aster -eastern silvery aster -late purple aster -panicled aster -rough-leaved aster -rush aster -balsamroot -daisy -bellis perennis -bidens bipinnata -tickseed sunflower -oxeye -calendula -thistle -carduus crispus -carduus nutans -carline thistle -carlina vulgaris -safflower -catananche -centaurea cyanus -knapweed -sweet sultan -centaurea nigra -centaurea scabiosa -centaurea solstitialis -camomile -corn marigold -crown daisy -chrysanthemum -golden aster -maryland golden aster -plume thistle -cirsium arvense -field thistle -woolly thistle -cirsium eriophorum -melancholy thistle -brook thistle -spear thistle -blessed thistle -tickseed -giant coreopsis -coreopsis tinctoria -cosmos -billy buttons -hawk's-beard -cynara cardunculus -florist's chrysanthemum -cape marigold -leopard's-bane -globe thistle -elephant's-foot -tassel flower -engelmannia -blue fleabane -erigeron annuus -orange daisy -spreading fleabane -philadelphia fleabane -robin's plantain -showy daisy -blue daisy -gaillardia -gazania -gazania rigens -gumweed -grindelia robusta -grindelia squarrosa -camphor daisy -sneezeweed -autumn sneezeweed -orange sneezeweed -rosilla -sunflower -helianthus angustifolius -showy sunflower -maximilian's sunflower -prairie sunflower -strawflower -heliopsis -heterotheca villosa -hawkweed -alpine coltsfoot -alpine gold -inula -inula helenium -krigia -dwarf dandelion -hawkbit -fall dandelion -edelweiss -oxeye daisy -shasta daisy -north island edelweiss -blazing star -dense blazing star -leopard plant -sticky aster -mojave aster -madia elegans -sweet false chamomile -mutisia -onopordum acanthium -butterweed -golden groundsel -butterbur -orange hawkweed -mouse-ear hawkweed -rattlesnake root -fleabane -coneflower -mexican hat -long-head coneflower -prairie coneflower -swan river everlasting -rudbeckia hirta -golden glow -sanvitalia procumbens -golden thistle -black salsify -sawwort -rosinweed -milk thistle -stokes' aster -tagetes patula -tanacetum parthenium -tanacetum vulgare -dandelion -dandelion green -russian dandelion -stemless hymenoxys -easter daisy -yellow salsify -salsify -tragopogon pratensis -scentless camomile -tussilago farfara -ursinia -cowpen daisy -ironweed -white-rayed mule's ears -xeranthemum -zinnia acerosa -little golden zinnia -mentzelia laevicaulis -harebell -campanula rapunculoides -tall bellflower -campanula aparinoides -campanula glomerata -campanula persicifolia -campanula rapunculus -campanula trachelium -tussock bellflower -arethusa -bog rose -brassavola -grass pink -calypso bulbosa -red helleborine -spreading pogonia -cypripedium reginae -yellow lady's slipper -california lady's slipper -marsh orchid -dactylorhiza fuchsii -prairie orchid -pansy orchid -odontoglossum -bee orchid -venus' slipper -indian crocus -pogonia -foxtail orchid -sobralia -hooded ladies' tresses -stelis -fly orchid -vanda -blue orchid -vanilla orchid -primula -primula vulgaris -primula elatior -auricula -pimpernel -bog pimpernel -water violet -gooseneck loosestrife -lysimachia nemorum -fringed loosestrife -moneywort -whorled loosestrife -leadwort -alopecurus pratensis -tall oat grass -timothy -bristlegrass -giant foxtail -yellow bristlegrass -setaria viridis -cattail -cat's-tail -typha angustifolia -bur reed -white bryony -cardinal flower -water lobelia -mallow -malva moschata -malva neglecta -abelmosk -flowering maple -rose mallow -althea -marsh mallow -poppy mallow -fringed poppy mallow -callirhoe involucrata -clustered poppy mallow -kenaf -rose mallow -cotton rose -rose of sharon -mahoe -flower-of-an-hour -seashore mallow -tree mallow -chaparral mallow -malope -false mallow -waxmallow -pavonia -sida rhombifolia -indian mallow -checkerbloom -sphaeralcea coccinea -african hemp -protea -banksia -cushion flower -honeyflower -waratah -bog rosemary -marsh andromeda -epigaea repens -sand myrtle -azalea -diapensia -native cranberry -love-in-winter -moneses uniflora -sarcodes sanguinea -rosita -seaside centaury -prairie gentian -persian violet -gentianella -gentiana calycosa -soapwort gentian -fringed gentian -gentianopsis detonsa -marsh pink -primrose jasmine -winter jasmine -arabian jasmine -kangaroo paw -purple loosestrife -epilobium hirsutum -evening primrose -oenothera biennis -missouri primrose -melastoma malabathricum -bird of paradise -hybrid tuberous begonia -clusia -pitch apple -hypericum androsaemum -creeping st john's wort -klammath weed -shrubby st john's wort -marsh st-john's wort -white-leaved rockrose -cistus ladanifer -helianthemum -rockrose -passiflora incarnata -jamaica honeysuckle -banana passion fruit -love-in-a-mist -viola arvensis -american dog violet -viola blanda -dog violet -two-eyed violet -viola odorata -bird's-foot violet -long-spurred violet -viola striata -viola reichenbachiana -pansy -florentine iris -german iris -japanese iris -dalmatian iris -iris verna -blue flag -iris virginica -spanish iris -freesia -blue-eyed grass -belladonna lily -hippeastrum -narcissus pseudonarcissus -jonquil -jacobean lily -star grass -hypoxis hirsuta -mountain lily -lilium canadense -madonna lily -lilium columbianum -lilium lancifolium -easter lily -coast lily -michigan lily -leopard lily -wood lily -agapanthus -yellow colicroot -hooker's onion -allium canadense -sand leek -allium schoenoprasum -round-headed leek -aloe -cape aloe -red-hot poker -fly poison -amber lily -asphodel -bloomeria crocea -brodiaea -elegant brodiaea -globe lily -cat's-ear -calochortus albus -yellow globe lily -rose globe lily -star tulip -desert mariposa tulip -yellow mariposa tulip -calochortus macrocarpus -sego lily -common camas -erythronium albidum -yellow adder's tongue -fawn lily -erythronium grandiflorum -erythronium montanum -fritillary -fritillaria biflora -stink bell -crown imperial -white fritillary -snake's head fritillary -adobe lily -fritillaria recurva -tulip -dwarf tulip -lady tulip -darwin tulip -gloriosa -lemon lily -harebell -star-of-bethlehem -ornithogalum umbellatum -chincherinchee -grape hyacinth -spring squill -false asphodel -white hellebore -dwarf-white trillium -trillium erectum -red trillium -convallaria majalis -yellow clintonia -queen's cup -lilyturf -solomon's-seal -uvularia grandiflora -bear grass -tuberose -mountain ebony -chamaecrista fasciculata -astragalus danicus -camwood -centrosema virginianum -axseed -french honeysuckle -lathyrus palustris -grass pea -winged pea -sickle alfalfa -black medick -alfalfa -sainfoin -shamrock pea -chaparral pea -bristly locust -bird's foot trefoil -english plantain -hoary plantain -fleawort -commelina -spiderwort -pickerelweed -water hyacinth -garden roses -dog rose -damask rose -sweetbrier -cherokee rose -musk rose -tea rose -japanese quince -dryas octopetala -fragaria chiloensis -fragaria virginiana -bennet -water avens -geum triflorum -herb bennet -cinquefoil -silverweed -salad burnet -sand blackberry -rubus odoratus -cape jasmine -diervilla lonicera -leycesteria formosa -linnaea borealis -american twinflower -sambucus ebulus -feverroot -wild teasel -scabious -pincushion flower -field scabious -geranium -cranesbill -wild geranium -meadow cranesbill -richardson's geranium -geranium robertianum -geranium viscosissimum -dove's foot geranium -rose geranium -apple geranium -storksbill -erodium cicutarium -musk clover -erodium texanum -oxalis -common wood sorrel -bermuda buttercup -oxalis corniculata -goatsfoot -violet wood sorrel -polygala alba -polygala lutea -tropaeolum majus -canarybird flower -dwarf buckeye -japanese snowbell -pitcher plant -common pitcher plant -sarracenia minor -sarracenia flava -tropical pitcher plant -hortensia -carpenteria -philadelphus -meadow saxifrage -western saxifrage -saxifraga oppositifolia -strawberry geranium -woodland star -lithophragma parviflorum -five-point bishop's cap -bog star -fringed grass of parnassus -foamflower -greek valerian -northern jacob's ladder -linanthus dianthiflorus -thunbergia alata -borago officinalis -anchusa -chinese forget-me-not -hound's-tongue -beggar's lice -gromwell -lithospermum canescens -virginia bluebell -forget-me-not -convolvulus -bindweed -convolvulus arvensis -scammony -morning glory (plant genus) -cypress vine -ipomoea alba -wild potato vine -ipomoea coccinea -man-of-the-earth -railroad vine -japanese morning glory -achimenes -lipstick plant -episcia -gloxinia -kohleria -african violet -cape primrose -yellow bells -nemophila menziesii -nemophila maculata -california bluebell -fiesta flower -yellow giant hyssop -agastache foeniculum -mexican hyssop -pyramid bugle -ajuga chamaepitys -wood mint -blephilia hirsuta -elsholtzia -hemp nettle -pennyroyal -leonotis leonurus -mentha aquatica -monarda -horsemint -bee balm -basil balm -mustang mint -jerusalem sage -self-heal -scutellaria lateriflora -butterwort -kitten-tails -false foxglove -shellflower -purple chinese houses -collinsia verna -common foxglove -yellow foxglove -gerardia -davidson's penstemon -penstemon whippleanus -field speedwell -veronica chamaedrys -water speedwell -veronica officinalis -thyme-leaved speedwell -kangaroo apple -horse nettle -bush violet -angel's trumpet -red angel's trumpet -day jessamine -night jasmine -datura stramonium -henbane -egyptian henbane -apple of peru -flowering tobacco -common tobacco -petunia -large white petunia -violet-flowered petunia -hybrid petunia -salpiglossis -painted tongue -butterfly flower -chalice vine -lantana -crown of thorns -spurge nettle -camellia -japonica -wild parsley -fool's parsley -water hemlock -spotted cowbane -eryngo -sea holly -water dropwort -sanicula arctopoides -european sanicle -silky dogwood -cornus canadensis -centranthus ruber -flowering shrub -lithophyte -anemopsis californica -bracken -asclepias purpurascens -showy milkweed -wax plant -silk vine -stapelia -stapelias asterias -salvia hispanica -epiphytic cactus -campanula isophylla -passiflora caerulea -clematis cultivar -abutilon megapotamicum -eruca vesicaria -glebionis coronaria -zucchini flower -siberian tiger -masai lion -net-winged insects -rugby player -circinae -eastern gray squirrel -european robin -sumatran rhinoceros -hawker dragonflies -eurasian red squirrel -great heron -stock dove -african leopard -captain america -gannets -coenagrion -eastern grey kangaroo -loggerhead sea turtle -douglas squirrel -seaduck -western gull -calidris -kemp's ridley sea turtle -mountain cottontail -mustelinae -brown pelican -veneroida -poison dart frog -common bottlenose dolphin -western tiger swallowtail -leuconotopicus -snowy owl -great egret -wholphin -north american river otter -desert cottontail -baltic gray seal -japanese macaque -aglais -stable fly -ring-billed gull -european herring gull -northern seahorse -list of dog crossbreeds -hoverfly -limecola balthica -polyommatus -fish crow -plebejus -rufous hummingbird -brown hare -collie, western australia -oecanthidae -red kangaroo -ochlodes -sandhill crane -laughing kookaburra -green iguana -greater rhea -abert's squirrel -red-bellied woodpecker -northern shoveler -butorides -savannah sparrow -double crested cormorant -common gallinule -blue winged teal -common sandpiper -eastern screech owl -list of dog crossbreeds -helarctos malayanus -eumenidae -maniola -eastern bluebird -handball player -thymelicus -cavalier king charles spaniel -european starling -gentoo penguin -zayante band-winged grasshopper -woodland salamander -beaglier -franklin s gull -khao manee -northern mockingbird -geography cone -gunfighter -kyi-leo -capuchin monkey -magyar agár -boykin spaniel -fiery skipper -cockapoo -great spangled fritillary -eastern tiger swallowtail -green-veined white -large skipper -melitaea -burmese python -black tailed jackrabbit -shrub frog -cuckoo wasp -schnoodle -common chameleon -least flycatcher -celastrina -figure skater -giant otter -western screech owl -korat -pyronia -bichon -american goldfinch -sporting lucas terrier -meadow brown -giant carp -high brown fritillary -jewel beetles -phyllobates -transylvanian hound -red-headed woodpecker -brush rabbit -pygmy rabbit -cyaniris semiargus -irish soft-coated wheaten terrier -little red flying fox -pileated woodpecker -white-headed capuchin -silvery blue -silver-washed fritillary -flower beetles -fox sparrow -marsh rice rat -box jellyfish -anaxyrus -florida redbelly turtle -clouded yellows -carolina anole -smooth greensnake -list of dog crossbreeds -soldier beetle -northern flicker -giant swallowtail -red eared slider -lulworth skipper -coton de tulear -great crested flycatcher -small pearl-bordered fritillary -dutch smoushond -colias hyale -eurasian magpie -mountain bluebird -goliath heron -bewick s wren -scrub jay -huntaway -australian silky terrier -white-fronted capuchin -protographium marcellus -pocket beagle -boat tailed grackle -german spitz -red-eyed tree frog -pararge -glen of imaal terrier -atlantic stingray -northern leopard frog -biewer terrier -wood whites -brown snake -hesperia (butterfly) -batgirl -adonis blue -issoria -basset artésien normand -longhaired whippet -miniature fox terrier -dark green fritillary -sotalia -satyrium (butterfly) -cupido (butterfly) -2000 in film -japanese spitz -antelope jackrabbit -muskox -new caledonian crow -black swallowtail -gulf fritillary -gatekeeper (butterfly) -american tree sparrow -satyr comma -small heath (butterfly) -lasiommata -weedy seadragon -toy bulldog -prague ratter -melanargia -stenella -giant freshwater stingray -squirrel tree frog -peppered moth -beauceron -coati -japanese rhinoceros beetle -semipalmated plover -steller s jay -hobomok skipper -thymelicus lineola -green heron -heath fritillary -shar pei -catwoman -longhorn beetle -clouded leopard -broadnose shark -aphantopus -northern gannet -seppala siberian sleddog -estonian hound -list of dog crossbreeds -grind rail -carterocephalus -silver-studded blue -snout moths -orange crowned warbler -kentucky warbler -pacific loon -black throated sparrow -nelson sharp tailed sparrow -palm warbler -least auklet -baird sparrow -rhinoceros auklet -lazuli bunting -slaty backed gull -anna hummingbird -painted bunting -california gull -green jay -european goldfinch -yellow headed blackbird -chestnut sided warbler -hooded warbler -bay breasted warbler -groove billed ani -prothonotary warbler -clay colored sparrow -pied kingfisher -american three toed woodpecker -gadwall -least tern -scott oriole -lincoln sparrow -worm eating warbler -cape glossy starling -white eyed vireo -elegant tern -ringed kingfisher -laysan albatross -whip poor will -red faced cormorant -northern fulmar -hooded oriole -blue grosbeak -acadian flycatcher -brandt cormorant -parakeet auklet -yellow throated vireo -yellow bellied flycatcher -crested auklet -grasshopper sparrow -clark nutcracker -swainson warbler -pomarine jaeger -gray crowned rosy finch -magnolia warbler -white breasted kingfisher -heermann gull -black tern -red cockaded woodpecker -canada warbler -tennessee warbler -black throated blue warbler -louisiana waterthrush -pelagic cormorant -long tailed jaeger -white necked raven -pine warbler -forsters tern -brewer sparrow -mangrove cuckoo -warbling vireo -blue winged warbler -le conte sparrow -henslow sparrow -nashville warbler -florida jay -tropical kingbird -caspian tern -glaucous winged gull -black and white warbler -mourning warbler -black capped vireo -green violetear -bronzed cowbird -great grey shrike -cerulean warbler -sage thrasher -ruby throated hummingbird -green kingfisher -shiny cowbird -prairie warbler -brewer blackbird -golden winged warbler -yellow billed cuckoo -artic tern -olive sided flycatcher -eastern towhee -sooty albatross -american pipit -northern waterthrush -german shorthaired -havanese -japanese chin -leonberger -sphynx -wheaten terrier -curly coated retriever -shiba dog -bichon frise -soft coated wheaten terrier -chinese crested dog -german short haired pointer -japanese spitzes -ameiurus nebulosus -crotaphytus bicinctores -rollandia rolland -anthus cervinus -rana dalmatina -hyla arborea -aquila heliaca -pelophylax perezi -pelophylax ridibundus -timon lepidus -glareola pratincola -salvadora hexalepis -coleonyx variegatus -operophtera bruceata -aneides flavipunctatus -anthornis melanura -sterna paradisaea -recurvirostra avosetta -oreta rosea -argiope appensa -pica hudsonia -circus hudsonius -larus delawarensis -falco mexicanus -crocodylus acutus -lanius ludovicianus -spirula spirula -charadrius ruficapillus -tadorna tadornoides -poliocephalus poliocephalus -tiliqua rugosa -macropus fuliginosus -aythya australis -gavicalis virescens -corvus coronoides -eolophus roseicapilla -anthochaera carunculata -larus pacificus -mniotilta varia -threskiornis spinicollis -ptilotula penicillata -cacatua sanguinea -ocyphaps lophotes -phaps chalcoptera -barnardius zonarius -phylidonyris novaehollandiae -setophaga townsendi -mola mola -gavia immer -charadrius nivosus -geitodoris heathi -diaulula sandiegensis -tegula brunnea -dirona albolineata -pycnopodia helianthoides -pododesmus macrochisma -dolomedes minor -phoebastria immutabilis -branta sandvicensis -neomonachus schauinslandi -spiza americana -acanthurus olivaceus -phocarctos hookeri -amphipsalta zelandica -autographa californica -eristalinus aeneus -ariolimax californicus -aythya fuligula -pyrrhocoris apterus -nerodia clarkii -crotaphytus collaris -microtus californicus -lampropeltis californiae -ammospermophilus harrisii -cenopis reticulatana -alectoris chukar -bombus vagans -thelacantha brevispina -acanthurus triostegus -sphyrapicus nuchalis -anser rossii -rallus limicola -melospiza lincolnii -ondatra zibethicus -triaenodon obesus -spizelloides arborea -branta hutchinsii -nathalis iole -satyrium calanus -macropus rufogriseus -ommatoiulus moreleti -phalacrocorax auritus -ocypus olens -zosterops japonicus -leptuca pugilator -haplotrema vancouverense -gallirallus philippensis -papilio palamedes -burnsius albescens -lethe portlandia -geopelia striata -streptopelia chinensis -ocypode ceratophthalmus -accipiter striatus -melanitta americana -turdus grayi -saltator coerulescens -zenaida asiatica -erynnis brizo -meliphaga lewinii -artamus leucorynchus -cracticus torquatus -varanus varius -psilorhinus morio -netta rufina -dendrocopos major -sympetrum sanguineum -megaceryle torquata -panthea furcilla -kukulcania hibernalis -phyllidia varicosa -momotus lessonii -calidris virgata -aythya collaris -nucella ostrina -anthopleura elegantissima -zebrasoma flavescens -sialia mexicana -naso lituratus -buteo brachyurus -actinemys marmorata -rhionaeschna multicolor -numenius americanus -phosphila turbulenta -orgyia leucostigma -habrodais grunus -polygonia satyrus -lon melane -papilio eurymedon -lycaena xanthoides -plebejus melissa -ammospiza nelsoni -rallus obsoletus -trigoniulus corallinus -sciurus aberti -bucephala clangula -dendrocoptes medius -haematopus finschi -patiriella regularis -petrolisthes elongatus -chalcophaps indica -eulamprus quoyii -lampropholis guichenoti -zizina labradus -francolinus pondicerianus -pseudacris crucifer -lithobates palustris -pharomachrus mocinno -stelgidopteryx ruficollis -sporophila morelleti -thraupis palmarum -psarocolius montezuma -eleutherodactylus planirostris -piaya cayana -melanerpes hoffmannii -patagioenas fasciata -setophaga coronata -catharus guttatus -urva auropunctata -corbicula fluminea -chrysaora fuscescens -mirounga angustirostris -oligocottus maculosus -platalea flavipes -patagioenas flavirostris -fejervarya limnocharis -hemidactylus platyurus -kaloula pulchra -vombatus ursinus -calyptorhynchus funereus -thraupis episcopus -cyanerpes cyaneus -campylorhynchus rufinucha -larus occidentalis -sula leucogaster -cerorhinca monocerata -aechmophorus occidentalis -grapsus tenuicrustatus -nycticorax caledonicus -chalcorana chalconota -ostracion cubicus -paroaria capitata -crithagra mozambica -hylarana latouchii -hyles euphorbiae -sylvilagus bachmani -phalacrocorax pelagicus -vireo gilvus -vireo griseus -phoebastria nigripes -pseudacris sierra -spizella pallida -kinosternon subrubrum -limacia cockerelli -perimyotis subflavus -calidris maritima -eurycea wilderae -zonotrichia atricapilla -streptopelia decaocto -chordeiles minor -calidris fuscicollis -gyrinophilus porphyriticus -desmognathus quadramaculatus -megalodacne heros -bombus lapidarius -calidris pusilla -calidris minutilla -calidris bairdii -vespula pensylvanica -chenonetta jubata -cracticus nigrogularis -cormobates leucophaea -neotamias minimus -pseudocheirus peregrinus -alligator mississippiensis -protaetia cuprea -sternula antillarum -cemophora coccinea -poecile rufescens -plestiodon laticeps -dispholidus typus -sitta pusilla -plegadis falcinellus -malaclemys terrapin -lophaetus occipitalis -cheilomenes lunata -lithobates sphenocephalus -setophaga discolor -junonia hierta -junonia orithya -hemigrapsus nudus -larus californicus -empidonax traillii -sympecma fusca -siphanta acuta -chiasmia clathrata -ixoreus naevius -calopteryx splendens -limosa fedoa -bombus hypnorum -andrena fulva -sphaerophoria scripta -anisota senatoria -phobetron pithecium -volucella bombylans -lithobates pipiens -heterocampa guttivitta -dasymutilla occidentalis -hemigrapsus oregonensis -grus grus -jynx torquilla -nicrophorus vespilloides -urocitellus beldingi -emydoidea blandingii -chlidonias niger -agalychnis callidryas -dendrobates auratus -larus michahellis -pachygrapsus marmoratus -selasphorus sasin -halcyon albiventris -chroicocephalus cirrocephalus -loxia leucoptera -treron calvus -vanellus spinosus -basiliscus vittatus -gopherus polyphemus -sceloporus torquatus -clytus arietis -haematopus ostralegus -western yellow wagtail -agrypnus murinus -pyrausta despicata -arenaria melanocephala -ophiothrix spiculata -momotus mexicanus -milvus milvus -aphantopus hyperantus -argynnis paphia -bombus pratorum -coronella austriaca -glaucidium gnoma -pica nuttalli -contia tenuis -apodemia virgulti -pagurus samuelis -tetraclita rubescens -anthopleura sola -okenia rosacea -hermissenda opalescens -aeronautes saxatalis -fissurella volcano -californiconus californicus -copsychus malabaricus -natrix tessellata -caracara plancus -spinus lawrencei -chroicocephalus ridibundus -somateria mollissima -apalone spinifera -kelletia kelletii -tegula eiseni -eurycea cirrigera -aplysia californica -pisaster giganteus -hypsypops rubicundus -pycnonotus barbatus -emys orbicularis -hyla versicolor -camptogramma bilineata -ochlodes sylvanus -gelastocoris oculatus -ardenna pacifica -phidippus johnsoni -platycercus eximius -dendragapus obscurus -chloris chloris -euphyes dion -rhionaeschna mutata -macromia taeniolata -cicindela sexguttata -etheostoma caeruleum -spatula querquedula -culaea inconstans -campostoma anomalum -amphiagrion saucium -lestes unguiculatus -nehalennia gracilis -pantala flavescens -leucorrhinia frigida -archilestes grandis -calycopis cecrops -haemorhous cassinii -poanes viator -wallengrenia egeremet -plethodon glutinosus -hemidactylium scutatum -ambystoma jeffersonianum -plegadis chihi -pholisora catullus -erynnis icelus -ambystoma texanum -pteropus poliocephalus -litoria peronii -cicindela punctulata -cicindela tranquebarica -bittacomorpha clavipes -megacyllene robiniae -chrysis angolensis -tenodera sinensis -desmocerus palliatus -thyris sepulchralis -typocerus velutinus -aeshna constricta -epiaeschna heros -lithobates catesbeianus -pantherophis vulpinus -plestiodon skiltonianus -tyrannus verticalis -speyeria aphrodite -sceloporus spinosus -polygonia progne -lethe eurydice -pompeius verna -lethe anthedon -eurytides marcellus -plathemis lydia -sympetrum vicinum -lestes inaequalis -lestes dryas -toxomerus occidentalis -thamnophis saurita -boyeria vinosa -libellula needhami -macrodiplax balteata -libellula semifasciata -enallagma geminatum -pantala hymenaea -arigomphus villosipes -semotilus atromaculatus -podiceps auritus -helmitheros vermivorum -rallus crepitans -ammophila procera -flatormenis proxima -oriolus larvatus -bicyrtes quadrifasciatus -dissosteira carolina -schizura ipomaeae -leptinotarsa juncta -psychomorpha epimenis -eristalis transversa -oncopeltus fasciatus -monobia quadridens -pyrausta orphisalis -heliomata cycladata -hellinsia homodactylus -cycloneda munda -haplotrema minimum -sphecius speciosus -vanellus vanellus -neotibicen tibicen -prosapia bicincta -leptotes cassius -zenaida aurita -tyrannus dominicensis -thraupis sayaca -turdus chiguanco -furnarius rufus -machetornis rixosa -danaus erippus -pteroglossus castanotis -crotophaga major -pionus menstruus -colaptes melanochloros -rufescent tiger heron -tachybaptus dominicus -papilio thoas -grey-cowled wood rail -cyclarhis gujanensis -psarocolius decumanus -ramphastos toco -porphyrio martinica -glaucidium brasilianum -siproeta epaphus -trachycephalus typhonius -guira guira -ciconia maguari -crotalus oreganus -harpaphe haydeniana -mareca penelope -saxicola rubicola -phrynosoma blainvillii -corvus caurinus -limenitis lorquini -painted lady -picoides dorsalis -batrachoseps attenuatus -neotamias dorsalis -aspidoscelis velox -tringa semipalmata -trachelipus rathkii -argopecten irradians -cosmia calami -osmia cornuta -poecile palustris -parus major -burnsius communis -caenurgina erechtea -celastrina ladon -aechmophorus clarkii -ramphocelus dimidiatus -galbula ruficauda -gonatodes albogularis -campephilus melanoleucos -saltator maximus -morpho helenor -eucometis penicillata -ichthyosaura alpestris -eleodes osculans -gambelia wislizenii -streptopelia orientalis -prosthemadera novaeseelandiae -chroicocephalus bulleri -cardisoma guanhumi -leucosticte tephrocotis -spatula cyanoptera -datana ministra -dryobates albolarvatus -actitis macularius -sterna forsteri -nomophila nearctica -hyla meridionalis -nyctibius griseus -catostomus commersonii -rana boylii -callophrys dumetorum -aegithalos caudatus -paraponera clavata -leptodeira septentrionalis -lycalopex culpaeus -ocypode quadrata -busarellus nigricollis -corytophanes cristatus -cacicus cela -elaenia flavogaster -turdus ignobilis -sporophila nigricollis -geothlypis philadelphia -pygochelidon cyanoleuca -tiaris olivaceus -stilpnia vitriolina -turdus fuscater -piranga flava -florisuga mellivora -gobiesox maeandricus -cadlina modesta -megachile sculpturalis -abracris flavolineata -ligia exotica -psephotus haematonotus -orthetrum villosovittatum -actinia tenebrosa -dichorda iridaria -geukensia demissa -utetheisa ornatrix -choephora fungorum -boloria bellona -pseudacris hypochondriaca -oniscus asellus -trachemys scripta -mopalia muscosa -ligia occidentalis -satyrium favonius -callophrys gryneus -callophrys niphon -acanthocephala declivis -pontia edusa -aglais urticae -pieris napi -chlorocebus pygerythrus -siproeta stelenes -strategus aloeus -scapanus latimanus -pygoscelis papua -mirounga leonina -anagrapha falcifera -doriopsilla fulva -erynnis juvenalis -trigonopeltastes delta -desmognathus fuscus -eurycea longicauda -didymops transversa -phanogomphus lividus -ladona deplanata -callophrys henrici -thorybes pylades -rhinella marina -microtus pennsylvanicus -charadrius semipalmatus -calidris mauri -dryobates pubescens -phainopepla nitens -melanerpes carolinus -chlorochroa sayi -aphonopelma iodius -menecles insertus -pantherophis guttatus -corvus ossifragus -cervus canadensis -lasiurus cinereus -clinocardium nuttallii -luxilus chrysocephalus -lepomis megalotis -lepomis cyanellus -megalographa biloba -lasionycteris noctivagans -tamiasciurus douglasii -chroicocephalus hartlaubii -cossypha caffra -zosterops virens -cinnyris chalybeus -streptopelia capicola -onychognathus morio -dolomedes scriptus -dasymutilla aureola -phyllidiella pustulosa -dryobates nuttallii -rhinella margaritifera -eurycea bislineata -apheloria virginiensis -oxythyrea funesta -pyrrhosoma nymphula -epirrhoe alternata -hypsiglena chlorophaea -chionactis occipitalis -phrynosoma platyrhinos -ambystoma gracile -dicamptodon tenebrosus -ambystoma macrodactylum -vermivora chrysoptera -poecile carolinensis -ardea herodias -anaxyrus punctatus -sylvilagus audubonii -paroaria coronata -spermestes cucullata -cecropis abyssinica -halcyon senegalensis -corvus albus -sylvia borin -baeolophus bicolor -cardellina pusilla -argia vivida -pyrisitia lisa -passerina caerulea -autochton cellus -achalarus lyciades -bombylius major -cicindela hirticollis -megarhyssa atrata -megarhyssa macrurus -euphonia laniirostris -thamnophis ordinoides -thamnophilus doliatus -sporophila corvina -engystomops pustulosus -rhinella horribilis -dacnis cayana -trogon caligatus -brotogeris jugularis -ramphastos sulfuratus -smilisca phaeota -anaxyrus boreas -poecile gambeli -enallagma civile -thamnophis hammondii -pseudotriton ruber -neovison vison -formica obscuripes -lon hobomok -lactophrys triqueter -stenopus hispidus -lophocampa argentata -phyciodes cocyta -haemulon flavolineatum -microspathodon chrysurus -bombus ternarius -larus dominicanus -anas georgica -rostanga pulchra -dirona picta -peltodoris nobilis -pomacea canaliculata -plagodis alcoolaria -sphyrapicus thyroideus -speyeria callippe -argyria lacteella -harmonia axyridis -dendraster excentricus -pisaster ochraceus -phyciodes pulchella -anthopleura xanthogrammica -polites mystic -plebejus samuelis -cicindela formosa -empidonax minimus -lestes australis -echinometra mathaei -melanerpes lewis -largus californicus -thamnophis atratus -rana draytonii -parkesia motacilla -callipepla californica -melanerpes formicivorus -ischnura cervula -dolomedes triton -necrophila americana -orienthella trilineata -archips argyrospila -megisto cymela -atta cephalotes -aulacorhynchus prasinus -trogon melanocephalus -rhynchonycteris naso -copestylum mexicanum -haemulon sciurus -chaetodon capistratus -ischnura verticalis -buteo plagiatus -caracara cheriway -buteogallus anthracinus -thamnophis elegans -haploa confusa -troglodytes pacificus -hermetia illucens -phanogomphus exilis -otospermophilus beecheyi -acrocephalus scirpaceus -crotalus pyrrhus -myiarchus cinerascens -triopha catalinae -aspidoscelis tigris -euphydryas chalcedona -haematopus bachmani -dermasterias imbricata -patiria miniata -alaus oculatus -strongylocentrotus purpuratus -lycaena hyllus -dorosoma cepedianum -geranoaetus melanoleucus -mimus saturninus -lycalopex griseus -chinavia hilaris -calephelis nemesis -brephidium exilis -pontia protodice -pugettia producta -perithemis intensa -polistes comanchus -adelpha eulalia -lithobates clamitans -copaeodes aurantiaca -zelus luridus -neoscona crucifera -leptoglossus oppositus -acronicta oblinita -calypte anna -pselliopus barberi -porpita porpita -oecophylla smaragdina -dacelo novaeguineae -anseranas semipalmata -macropus agilis -anas castanea -euploea core -anthus novaeseelandiae -cisseps fulvicollis -acanthurus coeruleus -sparisoma aurofrenatum -colaptes campestris -amazonetta brasiliensis -lagidium viscacia -petrochelidon pyrrhonota -columbina picui -chlorostilbon lucidus -patagioenas maculosa -turdus amaurochalinus -natrix helvetica -charidotella sexpunctata -cordulegaster diastatops -euphydryas phaeton -alypia octomaculata -uresiphita reversalis -podiceps major -hymenops perspicillatus -chloephaga picta -cygnus melancoryphus -phoenicopterus chilensis -turdus falcklandii -tonicella lineata -nucella lamellosa -calliostoma ligatum -diodora aspera -calypte costae -chondestes grammacus -xanthocephalus xanthocephalus -leucauge venusta -libellula cyanea -cicindela duodecimguttata -acanthocephala terminalis -adelpha californica -phidiana hiltoni -ischnura posita -polygonia interrogationis -scaphiopus holbrookii -chrysolina fastuosa -pomacanthus paru -ichthyaetus melanocephalus -alectoris rufa -emberiza calandra -aricia cramera -oenanthe oenanthe -spilostethus pandurus -falco naumanni -charadrius hiaticula -galerida cristata -circaetus gallicus -colias croceus -limosa limosa -phoenicopterus roseus -cyrtophora citricola -rhynchophorus ferrugineus -tarentola mauritanica -chroicocephalus genei -cervus nippon -nuctenea umbratica -anemonia viridis -psittacara erythrogenys -littorina obtusata -motacilla alba -crepidula fornicata -meloe violaceus -erithacus rubecula -linaria cannabina -lethe appalachia -tringa incana -ocypode gaudichaudii -grapsus grapsus -aeshna cyanea -aeshna mixta -arion ater -graphocephala fennahi -motacilla cinerea -pyronia tithonus -melanargia galathea -orgyia antiqua -plebejus argus -callophrys rubi -hipparchia semele -cordulegaster boltonii -anax imperator -libellula depressa -orthetrum coerulescens -lestes sponsa -coenagrion puella -enallagma cyathigerum -amphimallon solstitiale -sicalis flaveola -libellula pulchella -podarcis siculus -cosmopepla lintneriana -alopochen aegyptiaca -ardea intermedia -connochaetes taurinus -anax longipes -cynips douglasii -pachygrapsus crassipes -libellula axilena -bombus pascuorum -scolia hirta -leptophyes punctatissima -decticus albifrons -panulirus argus -acanthopleura granulata -argia emma -tiliqua scincoides -anthochaera chrysoptera -platycercus elegans -pseudomantis albofimbriata -diplacodes haematodes -corcorax melanorhamphos -iridomyrmex purpureus -tachycineta thalassina -scopula limboundata -tetracis cachexiata -pyromorpha dimidiata -lilioceris lilii -meloe proscarabaeus -colonus hesperus -pheucticus ludovicianus -oedemera nobilis -oreaster reticulatus -chalybion californicum -mecynogea lemniscata -cacyreus marshalli -eurydema ornata -eurydema oleracea -eremnophila aureonotata -thecadactylus rapicauda -heliconius erato -tamandua mexicana -burnsius orcus -sciurus variegatoides -trogon rufus -rhaebo haematiticus -marpesia chiron -tachycineta albilinea -trogon massena -deloyala guttata -camponotus castaneus -naphrys pulex -acanalonia bivittata -papilio zelicaon -boisea rubrolineata -libellula incesta -cacatua tenuirostris -amphibolurus muricatus -euschistus tristigmus -tachycines asynamorus -eurema daira -celithemis eponina -aliger gigas -syritta pipiens -glutophrissa drusilla -anania funebris -zachrysia provisoria -estrilda astrild -pycnonotus cafer -neotibicen lyricen -halichoerus grypus -laphria thoracica -falco rufigularis -chromodoris annae -rissa tridactyla -ardea cinerea -phalacrocorax aristotelis -tadorna tadorna -epitheca princeps -sympetrum semicinctum -arion rufus -sceliphron caementarium -pseudacris cadaverina -mythimna unipuncta -graphocephala coccinea -tramea onusta -melittia cucurbitae -papilio memnon -faunis eumeus -prionus californicus -incilius nebulifer -oxidus gracilis -argynnis hyperbius -suastus gremius -cotinis nitida -acalymma vittatum -phyllopalpus pulchellus -micrathena mitrata -epidalea calamita -calvia quatuordecimguttata -hetaerina americana -oophaga pumilio -ideopsis similis -orthetrum luzonicum -gracupica nigricollis -papilio protenor -mycalesis mineus -araneus trifolium -calopteryx virgo -estigmene acrea -ascalapha odorata -spodoptera ornithogalli -xylophanes tersa -enallagma exsulans -argia apicalis -argia nahuana -argia sedula -telebasis salva -arigomphus submedianus -leptophobia aripa -brechmorhoga mendax -dythemis velox -dythemis fugax -libellula croceipennis -bombus bimaculatus -pachydiplax longipennis -sympetrum corruptum -mermiria bivittata -pyrrhocorax pyrrhocorax -anthus petrosus -ardenna grisea -aimophila ruficeps -cepaea hortensis -chrysomela populi -hypanus americanus -aculus tetanothrix -lepas anatifera -melanospiza bicolor -melanchra adjuncta -plodia interpunctella -pluvialis apricaria -cordulegaster dorsalis -acronicta aceris -colibri coruscans -physocephala tibialis -plexippus paykulli -paonias excaecata -dendragapus fuliginosus -lepturobosca chrysocoma -amphiprion clarkii -hypolimnas misippus -oryctes nasicornis -garrulus glandarius -oedipoda caerulescens -lybius torquatus -trachyphonus vaillantii -sclerophrys gutturalis -myzinum quinquecinctum -agrotis ipsilon -zanclognatha pedipilalis -acrolophus arcanella -pseudeustrotia carneola -trithemis arteriosa -merops pusillus -hippodamia variegata -pyrausta acrionalis -ostrinia nubilalis -ardeola grayii -anhinga melanogaster -athene brama -calidris pugnax -pericrocotus speciosus -vanellus indicus -microcarbo niger -threskiornis melanocephalus -ciconia episcopus -turdoides striata -hypsipetes leucocephalus -urocissa erythroryncha -dendrocygna javanica -myophonus caeruleus -pernis ptilorhynchus -coracias benghalensis -gracupica contra -copsychus saularis -corvus macrorhynchos -merops orientalis -cinnyris asiaticus -mycteria leucocephala -elanus caeruleus -lanius schach -phoenicurus fuliginosus -oriolus xanthornus -crested serpent eagle -tringa stagnatilis -halcyon smyrnensis -rostratula benghalensis -funambulus pennantii -axis axis -sambar deer -euplexia benesimilis -digrammia gnophosaria -asterocampa clyton -hermeuptychia sosybius -lygaeus turcicus -graphocephala versuta -feniseca tarquinius -ardea alba -cicada orni -limenitis reducta -penelope obscura -coereba flaveola -falcipennis canadensis -tridacna maxima -luscinia svecica -coloradia pandora -enallagma ebrium -enallagma aspersum -merops bullockoides -euplectes orix -harrisina americana -perithemis tenera -neoscona oaxacensis -sphex ichneumoneus -plotosus lineatus -heterocampa biundata -spilosoma virginica -smerinthus jamaicensis -timandra amaturaria -eustixia pupula -epiblema otiosana -catocala amatrix -magusa divaricata -lineodes integra -doriprismatica atromarginata -hemileuca eglanterina -cicindela aurulenta -heterophleps triguttaria -macaria aemulataria -phragmatobia fuliginosa -parapediasia teterrellus -anthocharis midea -abaeis nicippe -cyllopsis gemma -masticophis taeniatus -anavitrinella pampinaria -nicrophorus orbicollis -paraulacizes irrorata -schinia rivulosa -ardenna creatopus -aphelocoma californica -trimerotropis verruculata -caenurgina crassiuscula -epiblema strenuana -pandemis limitata -tachyglossus aculeatus -halictus ligatus -pyrrhocorax graculus -schinia florida -dichromorpha viridis -sphinx chersis -micrathena sagittata -eusarca confusaria -lepus townsendii -lomographa vestaliata -calledapteryx dryopterata -acronicta fallax -amphipyra pyramidoides -besma quercivoraria -crambidia pallida -panopoda carneicosta -baileya ophthalmica -spragueia leo -homophoberia apicosa -lithobates berlandieri -oncorhynchus mykiss -nymphalis l-album -hapithus agitator -phrynosoma hernandesi -selasphorus rufus -callopistria floridensis -striacosta albicosta -hypena deceptalis -acrolophus popeanella -colius striatus -vireo plumbeus -catocala piatrix -mythimna oxygala -eucosma parmatana -hypena madefactalis -orthodes majuscula -ogdoconta cinereola -coelostathma discopunctana -jikradia olitoria -baeolophus wollweberi -porphyrio melanotus -oncorhynchus clarkii -taeniura lymma -lepidodactylus lugubris -delphinia picta -bombus rufocinctus -arothron hispidus -celithemis martha -neotamias merriami -theba pisana -ocreatus underwoodii -hemileuca maia -probole amicaria -elophila icciusalis -guinusia chabrus -ostracion meleagris -duttaphrynus melanostictus -speyeria idalia -satyrium liparops -hemaris thysbe -pluvialis fulva -papilio xuthus -misumenoides formosipes -atteva aurea -parus minor -zosterops simplex -chrysochus auratus -chauliognathus pensylvanicus -acrocephalus dumetorum -lepomis auritus -imantodes cenchoa -cucullia asteroides -aeshna tuberculifera -conocephalus brevipennis -microcrambus elegans -basiliscus basiliscus -toxomerus politus -trichordestra legitima -chilades lajus -charaxes bernardus -zizeeria karsandra -ypthima baldus -laothoe populi -aeshna juncea -cupido comyntas -dolomedes tenebrosus -agama atra -elaphria grata -stilpnia cyanicollis -lascoria ambigualis -gehyra mutilata -corvus brachyrhynchos -ambystoma mavortium -triturus cristatus -chilomycterus schoepfii -clepsis peritana -colladonus clitellarius -ranoidea moorei -phyllopteryx taeniolatus -hentzia palmarum -macaria bisignata -cyrestis thyodamas -christinus marmoratus -elophila gyralis -metcalfa pruinosa -promachus rufipes -agriphila vulgivagellus -camponotus novaeboracensis -chrysopa oculata -scoparia biplagialis -ponometia candefacta -ancyloxypha numitor -pyrausta tyralis -setophaga nigrescens -passerina amoena -melanoplus differentialis -aquila audax -anhinga rufa -cinnyris afer -ceryle rudis -trichonephila fenestrata -buphagus erythrorynchus -dicrurus adsimilis -bostrychia hagedash -oecanthus niveus -stagmomantis carolina -rivula propinqualis -phlogophora periculosa -neotamias amoenus -polygonia faunus -crotalus molossus -aspidoscelis sonorae -orthetrum sabina -polites peckius -ceratomia undulosa -sceloporus jarrovii -nedra ramosula -calidris subruficollis -sceloporus poinsettii -rabidosa rabida -myiozetetes cayanensis -lycaena gorgon -catocala ilia -attulus fasciger -gopherus morafkai -apantesis phalerata -aphelocoma coerulescens -dryocopus pileatus -lampides boeticus -neptis hylas -junonia lemonias -catocala vidua -phyllidia ocellata -morus serrator -malurus splendens -sericornis frontalis -sympetrum illotum -satyrium titus -sympetrum striolatum -pelegrina galathea -cicindela longilabris -libellula vibrans -megascops kennicottii -tringa glareola -lanius collaris -herpyllus ecclesiasticus -evergestis pallidata -herpetotheres cachinnans -ischnura senegalensis -bagrada hilaris -feltia jaculifera -scinax ruber -argia moesta -ischnura kellicotti -neoclytus acuminatus -larus fuscus -euptoieta claudia -argiope lobata -atta texana -holocnemus pluchei -epicauta pennsylvanica -pelecanus philippensis -argia translata -phalacrocorax penicillatus -chroicocephalus philadelphia -chaetura vauxi -sauromalus ater -sceloporus orcutti -pseudemys peninsularis -archilestes californicus -podarcis muralis -melozone crissalis -holcosus festivus -rhinocheilus lecontei -haematopus longirostris -dicathais orbita -haematopus fuliginosus -catherpes mexicanus -polypedates leucomystax -aeshna verticalis -eulogia ochrifrontella -hierodula patellifera -scudderia mexicana -diprion similis -pantherophis emoryi -baeolophus ridgwayi -lycomorpha pholus -tramea lacerata -leptodactylus savagei -chrysochus cobaltinus -euodice malabarica -centronyx henslowii -orthetrum pruinosum -trithemis festiva -metridium senile -graphocephala atropunctata -sceloporus uniformis -macaca fascicularis -amaurornis phoenicurus -cinnyris jugularis -neoscona domiciliorum -empidonax difficilis -tolype velleda -microcentrum retinerve -larinioides cornutus -cucullia convexipennis -parrhasius m-album -limenitis weidemeyerii -eleodes obscura -polistes apachus -bothriechis schlegelii -labidomera clivicollis -penelope purpurascens -andricus kingi -lonchura striata -gopherus berlandieri -acronicta impleta -sceloporus olivaceus -zenaida macroura -holbrookia propinqua -hypercompe scribonia -callospermophilus saturatus -thamnophis cyrtopsis -chamaeleo dilepis -stigmochelys pardalis -hyperolius marmoratus -acanthocercus atricollis -glyptemys insculpta -oxybelis aeneus -linepithema humile -cereopsis novaehollandiae -epiphyas postvittana -glycaspis brimblecombei -anser indicus -papilio garamas -leiothlypis ruficapilla -toxostoma curvirostre -hemiargus ceraunus -bombus huntii -bombus californicus -zelus renardii -thamnophis radix -lacinipolia renigera -latrodectus hesperus -varanus salvator -ameiva ameiva -leptophis ahaetulla -hamadryas feronia -ptiliogonys cinereus -urobatis halleri -chelinidea vittiger -sphaenothecus bilineatus -amazilia beryllina -empidonax occidentalis -aphelocoma woodhouseii -egretta rufescens -mantis religiosa -glena quinquelinearia -hylocharis leucotis -setophaga occidentalis -catasticta nimbice -sciurus aureogaster -geothlypis tolmiei -falco cenchroides -gryllodes sigillatus -crotalus ornatus -agnorisma badinodis -thryomanes bewickii -leptocoma zeylonica -crotaphopeltis hotamboeia -zizina otis -anisomorpha buprestoides -pentatoma rufipes -sunira bicolorago -neotibicen superbus -ixias pyrene -pipilo maculatus -argiope argentata -pacifastacus leniusculus -setophaga striata -vanellus miles -phyciodes mylitta -asterocampa leilia -orchelimum nigripes -idia aemula -orthemis ferruginea -hippotion scrofa -menura novaehollandiae -acanthiza pusilla -pica serica -anaxyrus cognatus -hagenius brevistylus -sceloporus tristichus -myadestes townsendi -anaxyrus speciosus -papilio paris -papilio polytes -pycnonotus sinensis -pycnonotus jocosus -taeniopoda eques -elymnias hypermnestra -graphium sarpedon -pseudozizeeria maha -phaedyma columella -phrynosoma mcallii -anaxyrus woodhousii -myliobatis californica -lithobates blairi -spea multiplicata -eleutherodactylus cystignathoides -ambystoma opacum -desmognathus conanti -plethodon albagula -graptemys pseudogeographica -kinosternon flavescens -sternotherus carinatus -nerodia taxispilota -ischnura denticollis -urbanus dorantes -laniarius ferrugineus -ptyonoprogne rupestris -buteo regalis -dicromantispa sayi -aspidoscelis exsanguis -gerrhonotus infernalis -holbrookia maculata -ophisaurus attenuatus -phrynosoma modestum -urocyon littoralis -harmonia conformis -sypharochiton pelliserpentis -petroica boodang -leptograpsus variegatus -wallengrenia otho -setophaga citrina -sceloporus grammicus -sceloporus cyanogenys -agkistrodon laticinctus -lepisosteus oculatus -farancia abacura -myiarchus crinitus -heterodon nasicus -hypsiglena jani -lampropeltis gentilis -regina grahamii -sistrurus tergeminus -tantilla gracilis -thamnophis marcianus -virginia valeriae -buteo albonotatus -icterus graduacauda -trogon elegans -junco phaeonotus -setophaga graciae -empidonax fulvifrons -lampornis clemenciae -calothorax lucifer -gallinago delicata -menemerus semilimbatus -zelus longipes -toxostoma rufum -apis florea -apis dorsata -tachybaptus novaehollandiae -acrocephalus australis -xylocopa tabaniformis -chrysolina bankii -cigaritis lohita -vespula alascensis -salvadora grahamiae -chondrohierax uncinatus -ictinia mississippiensis -thalasseus elegans -larus glaucoides -urocitellus richardsonii -libellula saturata -libellula forensis -spoladea recurvalis -sylvilagus nuttallii -sphyrapicus ruber -acanthosoma haemorrhoidale -sparisoma viride -graphium agamemnon -paratrechina longicornis -alisterus scapularis -regulus satrapa -geranospiza caerulescens -pantherophis alleghaniensis -dryobates borealis -melanitta deglandi -asio flammeus -gavia pacifica -ceriagrion coromandelianum -phalaropus lobatus -brachyramphus marmoratus -aeshna interrupta -dactylotum bicolor -aphonopelma chalcodes -oncometopia orbona -peridroma saucia -megapallifera mutabilis -neurothemis fulvia -hymenia perspectalis -aulostomus chinensis -ara macao -prinia inornata -motacilla tschutschensis -limosa lapponica -empidonax alnorum -carcinus maenas -vidua macroura -furnarius leucopus -zizeeria knysna -lycaena helloides -polistes dorsalis -fluvicola nengeta -melanerpes pucherani -nerodia rhombifer -thalasseus bergii -sula sula -prosotas dubiosa -nephila pilipes -zalophus wollebaeki -crotophaga ani -sula nebouxii -pteroglossus torquatus -thalurania colombica -chlosyne harrisii -phalaropus tricolor -megascops asio -leiothlypis peregrina -empidonax flaviventris -calidris himantopus -urothemis signata -marmota marmota -larus glaucescens -vireo flavifrons -myiodynastes luteiventris -leiothlypis luciae -aphelocoma wollweberi -myioborus pictus -melozone fusca -callipepla squamata -desmognathus ochrophaeus -psaltriparus minimus -dysschema howardi -trichodes ornatus -selasphorus platycercus -trigona fulviventris -panorpa nuptialis -dythemis nigrescens -sula dactylatra -sceloporus consobrinus -scincella lateralis -belenois aurota -chlorophanes spiza -dryocopus lineatus -thalassarche melanophris -spheniscus magellanicus -abudefduf troschelii -progomphus obscurus -phyllogomphoides albrighti -leucophaeus pipixcan -sitta pygmaea -passerina versicolor -acanthis flammea -archilochus alexandri -myiarchus tuberculifer -piranga bidentata -bombus sonorus -eurema mexicana -larus hyperboreus -baeolophus inornatus -abudefduf sexfasciatus -bronchocela jubata -monadenia infumata -coccothraustes vespertinus -hyla squirella -erythemis plebeja -lestes vigilax -aphylla angustifolia -erpetogomphus designatus -enallagma praevarum -phoebis sennae -hemidactylus frenatus -hydrophasianus chirurgus -lestes alacer -lerema accius -peucaea cassinii -leptotes marina -icterus pustulatus -agapornis roseicollis -pseudoleon superbus -gomphaeschna furcillata -tachopteryx thoreyi -ictidomys tridecemlineatus -polistes major -xerospermophilus tereticaudus -calamospiza melanocorys -moduza procris -junonia atlites -orsotriaena medus -microcentrum rhombifolium -enallagma basidens -incilius alvarius -megisto rubricata -orthemis discolor -columbina inca -eantis tamenund -callosamia promethea -tetracha carolina -myathropa florea -charadrius wilsonia -thorybes bathyllus -libellula auripennis -plestiodon inexpectatus -aratus pisonii -leiocephalus carinatus -baeolophus atricristatus -erythemis vesiculosa -halichoeres bivittatus -dromogomphus spoliatus -sialia sialis -sialia currucoides -enallagma hageni -platalea regia -himantopus leucocephalus -euglandina rosea -protonotaria citrea -dendronotus venustus -crassadoma gigantea -pseudacris maculata -stylurus plagiatus -hetaerina titia -recurvirostra americana -anartia amathea -amazilia violiceps -eugenes fulgens -anas diazi -egretta novaehollandiae -hirundo neoxena -ctenosaura similis -rhipidura leucophrys -plestiodon obsoletus -rasahus hamatus -carpodacus sibiricus -iambrix salsala -hirundo smithii -microcarbo africanus -ardeola ralloides -anser caerulescens -eurycea lucifuga -desmognathus monticola -glossopsitta concinna -lumbricus terrestris -ascia monuste -argia fumipennis -sternotherus odoratus -parnassius smintheus -lestes eurinus -leucorrhinia proxima -acisoma panorpoides -aeshna canadensis -somatochlora tenebrosa -gomphurus vastus -libellula flavida -agriocnemis pygmaea -tholymis tillarga -neurothemis tullia -hydrocoloeus minutus -varanus bengalensis -larus crassirostris -larus livens -melanoplus femurrubrum -phaetusa simplex -psittacara holochlorus -cyanoramphus novaezelandiae -ciccaba virgata -rana aurora -colibri cyanotus -anthracothorax prevostii -amazilia yucatanensis -heliodoxa jacula -selasphorus calliope -tockus leucomelas -mitrephanes phaeocercus -empidonax virescens -empidonax wrightii -myiarchus tyrannulus -tyrannus couchii -tyrannus crassirostris -tityra semifasciata -todirostrum cinereum -agelaius tricolor -tachycineta albiventer -petrochelidon fulva -toxostoma longirostre -lamprotornis nitens -artemisiospiza belli -falco femoralis -fundulus notatus -setophaga pitiayumi -liometopum occidentale -setophaga chrysoparia -gavia stellata -myioborus miniatus -chlorospingus flavopectus -apantesis parthenice -plestiodon fasciatus -aegolius acadicus -artemisiospiza nevadensis -leucorrhinia glacialis -leucorrhinia intacta -stylogomphus albistylus -cotinis mutabilis -ammospiza leconteii -tramea carolina -phyciodes phaon -lampropeltis holbrooki -pelecanus thagus -emberiza cia -circus approximans -plethodon serratus -spea hammondii -rhinella diptycha -mesembrinibis cayennensis -platalea alba -amazona autumnalis -sphecotheres vieilloti -plectropterus gambensis -anas superciliosa -lophonetta specularioides -anas bahamensis -cycnia collaris -erythrodiplax berenice -halysidota tessellaris -melierax canorus -buteogallus meridionalis -lagopus lagopus -hierophis viridiflavus -polistes fuscatus -spatula clypeata -bradypus variegatus -kori bustard -burhinus bistriatus -burhinus vermiculatus -charadrius collaris -austracantha minax -charadrius bicinctus -aeshna eremita -coenobita compressus -xenus cinereus -acanthodoris rhodoceras -aeolidia loui -calidris acuminata -ploceus cucullatus -nerodia fasciata -vermivora cyanoptera -platalea ajaja -brachymesia gravida -malacorhynchus membranaceus -anhinga novaehollandiae -lichmera indistincta -icterus wagleri -ammodramus savannarum -petroica macrocephala -phalacrocorax punctatus -evechinus chloroticus -cicindela repanda -geranoaetus albicaudatus -nyctidromus albicollis -leptotila verreauxi -arremonops rufivirgatus -adelpha fessonia -contopus pertinax -calonectris diomedea -bembix americana -cyanocitta stelleri -latrodectus hasselti -boissonneaua flavescens -fulica armillata -pheucticus chrysopeplus -acanthurus nigrofuscus -parkesia noveboracensis -mocis latipes -melozone aberti -cyanistes caeruleus -calocitta colliei -trogon citreolus -mareca americana -cassiculus melanicterus -littorina littorea -calocitta formosa -eupsittula canicularis -jacana spinosa -amazilia rutila -peucaea carpalis -melanerpes chrysogenys -actophilornis africanus -terpsiphone viridis -campephilus guatemalensis -chroicocephalus serranus -anolis nebulosus -phalacrocorax brasilianus -circaetus cinereus -sarkidiornis melanotos -urbanus proteus -orgyia definita -euphonia affinis -sporophila torqueola -turdus rufopalliatus -calidris alpina -corythornis cristatus -chordeiles acutipennis -lepisosteus platyrhincus -pachyramphus aglaiae -ortalis cinereiceps -ploceus velatus -burhinus capensis -cyanocompsa parellina -colobura dirce -patagioenas cayennensis -pieris canidia -abisara echerius -icterus bullockii -porphyrio poliocephalus -habia fuscicauda -eupsittula pertinax -osmoderma scabra -garrulax perspicillatus -uraeginthus angolensis -vanellus senegallus -prinia subflava -corvus albicollis -ammospermophilus leucurus -callipepla gambelii -campylorhynchus brunneicapillus -pipilo chlorurus -clogmia albipunctata -megarynchus pitangua -schistocerca lineata -barisia imbricata -rhipidura albiscapa -setophaga americana -setophaga palmarum -progne chalybea -tyrannus melancholicus -helocassis clavata -polioptila melanura -sayornis nigricans -trichius fasciatus -callopistria mollissima -ischnura ramburii -leucauge argyrobapta -manorina melanocephala -agrotis infusa -setophaga castanea -ceriagrion cerinorubellum -incilius valliceps -anthus rubescens -sarcoramphus papa -setophaga caerulescens -gavia arctica -orthosoma brunneum -dryobates villosus -poecile atricapillus -caripeta piniata -chaetodon auriga -hypena abalienalis -nerice bidentata -monochamus scutellatus -chalcoela iphitalis -zonotrichia querula -phoeniconaias minor -pluvialis squatarola -terpsiphone paradisi -vireo bellii -haliastur indus -spizella atrogularis -camptostoma imberbe -dione moneta -dryobates scalaris -basileuterus rufifrons -nisaetus cirrhatus -milvago chimachima -colaptes punctigula -merops ornatus -valanga irregularis -lepas anserifera -ranoidea caerulea -peucedramus taeniatus -dicrurus bracteatus -geopelia humeralis -platycercus adscitus -wallabia bicolor -macropus robustus -coracina novaehollandiae -pitangus sulphuratus -rostrhamus sociabilis -tyrannus savana -entomyzon cyanotis -philemon corniculatus -oriolus sagittatus -geopelia placida -scudderia septentrionalis -progne tapera -vireo cassinii -odontotaenius disjunctus -centruroides vittatus -pachycephala pectoralis -todiramphus macleayii -neochmia temporalis -parabuteo unicinctus -phrynosoma orbiculare -sceloporus siniferus -peucetia viridans -oriturus superciliosus -icterus nigrogularis -agalychnis dacnicolor -crotophaga sulcirostris -catharus ustulatus -microtia elva -ramphastos ambiguus -tersina viridis -anthracothorax nigricollis -certhiaxis cinnamomeus -jacana jacana -anser brachyrhynchus -danaus eresimus -manduca rustica -zenaida auriculata -columbina passerina -apantesis proxima -gasteracantha cancriformis -tirumala limniace -colonus sylvanus -pisaurina mira -corvus splendens -anastomus oscitans -acanthocephala femorata -papilio rutulus -melitaea phoebe -threskiornis aethiopicus -agapostemon splendens -catharus minimus -acanthis hornemanni -calidris ruficollis -calidris temminckii -haploa lecontei -phidippus audax -gallinula tenebrosa -threskiornis molucca -rhipidura fuliginosa -pluvialis dominica -sinistrofulgur sinistrum -seiurus aurocapilla -ardea cocoi -prionus laticollis -fistularia commersonii -sympetrum costiferum -argia bipunctulata -astraptes fulgerator -nymphalis californica -aglais milberti -prochoerodes lineola -diachrysia balluca -drepana arcuata -nemoria bistriaria -phaeoura quernaria -ortalis wagleri -gelochelidon nilotica -clytus ruricola -zanclus cornutus -haemorhous purpureus -cophosaurus texanus -coleomegilla maculata -xerociris wilsonii -terrapene carolina -trachemys venusta -anser fabalis -pantherophis obsoletus -thalassoma lunare -crocothemis servilia -sympetrum ambiguum -ancistrocerus antilope -urosaurus nigricaudus -epitheca petechialis -libellula quadrimaculata -gomphurus externus -cryptochiton stelleri -micrurus tener -sayornis saya -mareca strepera -dysdera crocata -thalassoma hardwicke -ischnura perparva -hydroprogne caspia -scolopendra polymorpha -cordulia shurtleffii -cordulegaster obliqua -nyctemera adversata -micronia aculeata -erebus ephesperis -asota heliconia -badumna longinqua -parnassius clodius -tringa solitaria -chlosyne ehrenbergii -patagioenas leucocephala -acris blanchardi -scoliopteryx libatrix -cicadella viridis -speyeria atlantis -protographium epidaus -papilio rogeri -battus polydamas -erynnis tristis -kricogonia lyside -triopha maculata -amblyscirtes celia -myscelia ethusa -texola elada -digrammia atrofasciata -araniella displicata -achyra rantalis -oriolus chinensis -dicrurus paradiseus -eremophila alpestris -heliocypha perforata -orthetrum triangulare -diplacodes trivialis -tadorna ferruginea -lycaena phlaeas -aquarius remigis -gonepteryx rhamni -icaricia saepiolus -catharus fuscescens -tarsiger cyanurus -otospermophilus variegatus -pieris marginalis -lycaena mariposa -erinnyis obscura -panoquina ocola -dryobates minor -pseudohermonassa bicarnea -feralia comstocki -papaipema pterisii -adalia decempunctata -anthanassa tulcis -leiothlypis celata -setophaga fusca -agrius convolvuli -boloria chariclea -biblis hyperia -caria ino -traminda aventiaria -asota caricae -creatonotos transiens -idaea aversata -zygaena filipendulae -lyssa zampa -syntomoides imaon -smerinthus ocellata -papilio anchisiades -phlogophora meticulosa -copaeodes minima -endotricha flammealis -xanthorhoe ferrugata -cabera pusaria -anthanassa texana -agrotis exclamationis -araneus diadematus -phyciodes graphica -pholcus phalangioides -polites vibex -chiomara georgina -chioides albofasciatus -amphispiza bilineata -noctua comes -autographa gamma -olla v-nigrum -biston betularia -melanerpes uropygialis -psyllobora vigintimaculata -epirrita autumnata -gallirallus australis -ourapteryx sambucaria -carcina quercana -hypsopygia costalis -junonia coenia -passer italiae -clostera apicalis -sphinx kalmiae -hippotragus equinus -aidemona azteca -pyrausta aurata -coccinella californica -leptysma marginicollis -phanaeus vindex -sistrurus miliarius -calycopis isobeon -hemiscolopendra marginata -uroctonus mordax -laphria macquarti -dendrobias mandibularis -mallophora leschenaulti -brachygastra mellifica -microstylum morosum -cicindela ocellata -timandra comae -triorla interrupta -milesia virginiensis -asterocampa celtis -endrosis sarcitrella -plectrodera scalator -mangora placida -sympetrum danae -melaenornis silens -papilio demodocus -epitheca cynosura -vanellus coronatus -celastrina lucia -anartia fatima -coccinella trifasciata -motacilla capensis -dictyophorus spumans -numenius phaeopus -ensatina eschscholtzii -lerodea eufala -falco rupicolus -anthobaphes violacea -damaliscus pygargus -urocitellus columbianus -malacosoma californica -amietia fuscigula -ypsolopha dentella -lomaspilis marginata -palpita quadristigmalis -phoenicopterus ruber -fregata magnificens -pekania pennanti -pristimantis achatinus -orthetrum caledonicum -scarus ghobban -rena dulcis -euphagus cyanocephalus -batrachoseps major -crotalus ruber -buteo platypterus -synchlora frondaria -lestes disjunctus -aeshna palmata -palpita magniferalis -clemensia albata -spilosoma congrua -lobocleta ossularia -erythrodiplax umbrata -anoplolepis gracilipes -theretra nessus -spinus spinus -erynnis propertius -chrysomya megacephala -trachymela sloanei -basiaeschna janata -macromia illinoiensis -enallagma carunculatum -enallagma divagans -sympetrum internum -limacus flavus -libellula comanche -cancer productus -semibalanus cariosus -megaceryle alcyon -xylocopa sonorina -dinocardium robustum -dorocordulia libera -enallagma traviatum -lestes rectangularis -lestes forcipatus -sympetrum obtrusum -chromagrion conditum -melanis pixe -jadera haematoloma -epitheca canis -eubaphe mendica -idia americalis -pogona barbata -bucephala albeola -ceratostoma foliatum -olivella biplicata -epiactis prolifera -neophasia menapia -hyalophora euryalus -phanogomphus spicatus -pyrausta signatalis -nannothemis bella -leucorrhinia hudsonica -argia immunda -arigomphus furcifer -erythrodiplax minuscula -trichonephila edulis -hemidactylus turcicus -solenopsis invicta -calopteryx aequabilis -epitheca spinigera -cordulegaster maculata -acanthis cabaret -scantius aegyptius -ariolimax buttoni -phigalia titea -lygaeus kalmii -mopalia lignosa -oxycarenus lavaterae -enallagma doubledayi -enallagma durum -dromogomphus spinosus -armadillidium vulgare -dendrocopos leucotos -alouatta palliata -camponotus sericeiventris -sciurus granatensis -platalea minor -menemerus bivittatus -aethopyga siparaja -pycnonotus aurigaster -lithobates sylvaticus -ensis leei -morelia spilota -euphagus carolinus -oreoscoptes montanus -herichthys cyanoguttatus -charadrius mongolus -ramphocelus passerinii -great curassow -erynnis funeralis -atlides halesus -nasua nasua -chlosyne lacinia -psittacara leucophthalmus -aratinga nenday -deroceras reticulatum -batrachoseps nigriventris -plutella xylostella -veromessor pergandei -eupeodes volucris -anolis cristatellus -argia alberta -charadra dispulsa -calcarius lapponicus -dolba hyloeus -boloria epithore -dryocopus martius -polistes instabilis -sceloporus variabilis -aspidoscelis sexlineatus -delias pasithoe -maruca vitrata -chrysodeixis eriosoma -leptoglossus clypealis -dysstroma citrata -papaipema inquaesita -nepytia canosaria -ichthyaetus ichthyaetus -charadrius leschenaultii -gallinula galeata -doris montereyensis -trithemis kirbyi -peridea basitriens -celastrina echo -sceloporus magister -passerculus sandwichensis -leptuca crenulata -satyrium saepium -boisea trivittata -icterus parisorum -zonotrichia capensis -platycryptus undatus -toxostoma redivivum -dermestes lardarius -pseudacris regilla -polites sabuleti -calephelis virginiensis -achlyodes pallida -tigrisoma mexicanum -eurema hecabe -spodoptera litura -endotricha mesenterialis -anthopleura artemisia -anas fulvigula -chilocorus stigma -ameiurus natalis -thomisus onustus -scathophaga stercoraria -metacarcinus magister -nehalennia irene -oxyopes scalaris -smilisca baudinii -faxonius virilis -lestes congener -otala lactea -cryptolaemus montrouzieri -molothrus aeneus -haemorhous mexicanus -coenagrion resolutum -enallagma vesperum -cycloneda polita -vespula germanica -exochomus quadripustulatus -kinosternon baurii -hyla femoralis -osteopilus septentrionalis -chlorochlamys chloroleucaria -papio anubis -corvus mellori -phalacrocorax sulcirostris -xanthagrion erythroneurum -spatula discors -junonia villida -aquila nipalensis -helicoverpa armigera -nyctemera baulus -vireo huttoni -belenois java -euploea tulliolus -morus bassanus -anicla infecta -chlosyne acastus -isotenes miserana -morone saxatilis -phigalia strigataria -mischocyttarus flavitarsis -ardeola bacchus -callosciurus erythraeus -elgaria multicarinata -cantareus apertus -orthosia hibisci -steatoda nobilis -euchloe ausonides -chloroceryle amazona -theristicus caudatus -amazona finschi -anthus hodgsoni -libytheana carinenta -anaxyrus quercicus -cyanopica cyanus -chloris sinica -phoenicurus auroreus -polygonia c-aureum -polygonia c-album -stellagama stellio -histrionicus histrionicus -trigonodes hyppasia -diadophis punctatus -coccinella septempunctata -thaumetopoea pityocampa -chortophaga viridifasciata -katharina tunicata -eutropis longicaudata -diaphania indica -schistocerca nitens -minuca pugnax -perina nuda -acanthocephala alata -hyla cinerea -megathura crenulata -phanogomphus militaris -orthosia cerasi -scolopax minor -callophrys eryphon -spizella breweri -orthosia incerta -megaceryle maxima -anacridium aegyptium -buteo swainsoni -scolopendra heros -anthracoceros albirostris -bucorvus leadbeateri -lophoceros alboterminatus -lophoceros nasutus -eudynamys scolopaceus -speyeria mormonia -setophaga pinus -lissachatina fulica -orthosia gothica -cercopithecus mitis -polioptila caerulea -anadenobolus monilicornis -apalone ferox -trachypithecus obscurus -hyla gratiosa -ochlodes agricola -agrius cingulata -chaetura pelagica -panchlora nivea -polistes exclamans -stelgidopteryx serripennis -dermacentor occidentalis -parantica aglea -aspidoscelis gularis -ambystoma laterale -closterotomus norwegicus -graphium doson -bombus melanopygus -empidonax hammondii -symbrenthia lilaea -calyptorhynchus banksii -hyalophora columbia -vanessa annabella -euploea mulciber -lexias pardalis -orgyia detrita -lethe confusa -zemeros flegyas -nerodia floridana -lithobates grylio -danaus genutia -parthenos sylvia -hyla chrysoscelis -dione juno -anaxyrus fowleri -achatia distincta -phyllodesma americana -procambarus clarkii -prenolepis imparis -porzana carolina -bombycilla cedrorum -satyrium californica -rhyothemis phyllis -lathrecista asiatica -ischnura heterosticta -diplacodes bipunctata -phylloscopus collybita -anaea aidea -vireo philadelphicus -emmelina monodactyla -aneides aeneus -ara ararauna -hypothymis azurea -ellychnia corrusca -obeidia tigrata -eurema blanda -cirrhitichthys aprinus -lonchura atricapilla -haliaeetus leucogaster -irediparra gallinacea -tapinoma sessile -trichiotinus texanus -otiorhynchus sulcatus -scaphiopus couchii -haliastur sphenurus -aplonis panayensis -chloroceryle americana -spinus psaltria -pecari tajacu -erinnyis ello -ortalis poliocephala -sphenarches anisodactylus -pterophorus pentadactyla -cicindela campestris -tegosa claudina -phoberia atomaris -chlidonias hybrida -dendrelaphis punctulatus -anaea andria -glyphodes onychinalis -murgantia histrionica -paragus haemorrhous -zopherus nodulosus -frontinella pyramitela -battus philenor -pieris oleracea -argia plana -erynnis baptisiae -salvator merianae -apiomerus californicus -toxomerus geminatus -plagodis phlogosaria -cladara atroliturata -anticlea vasiliata -sylvicapra grimmia -camnula pellucida -callosamia angulifera -scalopus aquaticus -pisaura mirabilis -columba guinea -anthropoides paradiseus -prinia maculosa -buteo rufofuscus -orgyia postica -promerops cafer -nectarinia famosa -oenanthe familiaris -telophorus zeylonus -dendrocygna autumnalis -xylocopa micans -syngrapha rectangula -cochlicella barbara -aramides albiventris -alouatta pigra -terathopius ecaudatus -bubo africanus -setophaga tigrina -tessellana tessellata -kleidocerys resedae -tetraopes femoratus -cysteodemus armatus -pantomorus cervinus -cycloneda sanguinea -smerinthus ophthalmica -chlosyne palla -euchromius ocellea -plagodis pulveraria -syndemis afflictana -zale minerea -endothenia hebesana -paectes oculatrix -allotria elonympha -mellilla xanthometata -cyclophora packardi -idaea degeneraria -nemoria lixaria -athetis tarda -epimecis hortaria -furcula borealis -acronicta insularis -hethemia pistasciaria -polistes aurifer -chionodes mediofuscella -cladara limitaria -merops apiaster -anas erythrorhyncha -quelea quelea -thyatira batis -cnaphalocrocis medinalis -lagonosticta senegala -corythaixoides concolor -coracias caudatus -eutrapela clemataria -charadrius dubius -gonepteryx cleopatra -boloria euphrosyne -euphydryas aurinia -pternistis capensis -muscicapa adusta -andropadus importunus -pyrops candelaria -smerinthus cerisyi -crotalus horridus -euphoria inda -bradybaena similaris -turdus olivaceus -sylvia melanocephala -thasus gigas -molothrus ater -paltothemis lineatipes -acronicta rubricoma -phylidonyris niger -brunia antica -trimerotropis pallidipennis -icaricia acmon -cynanthus latirostris -macronyx croceus -discus rotundatus -porcellio spinicornis -halictus rubicundus -mallodon dasystomus -falco vespertinus -lanius collurio -acraea serena -hirundo albigularis -bombus vosnesenskii -camponotus modoc -libellula fulva -lasiommata megera -magallana gigas -leptoptilos crumenifer -passer diffusus -haliaeetus vocifer -cornu aspersum -vanellus armatus -necrosyrtes monachus -charadrius tricollaris -chrysodeixis includens -charadra deridens -augochlora pura -acytolepis puspa -lomographa glomeraria -philoscia muscorum -zygogramma signatipennis -buteogallus urubitinga -chloropicus fuscescens -armases cinereum -ploceus ocularis -diglossa baritula -icterus abeillei -coenonympha pamphilus -dryoscopus cubla -psamatodes abydata -anthocharis sara -euphilotes bernardino -hemigrapsus sanguineus -phoeniculus purpureus -sachem -quiscalus lugubris -callophrys augustinus -phalera bucephala -charadrius marginatus -thysanoplusia orichalcea -pontia daplidice -lophophanes cristatus -idaea seriata -diplolepis polita -passer melanurus -ardea melanocephala -anthus cinnamomeus -passerina ciris -darapsa myron -merodon equestris -thyridopteryx ephemeraeformis -salticus scenicus -coccyzus americanus -amphion floridensis -typocerus zebra -butorides virescens -xanthorhoe lacustrata -pituophis catenifer -charadrius alexandrinus -mocis frugalis -ladona julia -mangora acalypha -cabera erythemaria -sciurus yucatanensis -graptemys ouachitensis -acronicta rumicis -atalantycha bilineata -dendrocygna bicolor -callospermophilus lateralis -fulica cristata -phalacrocorax capensis -elaphria versicolor -charadrius pecuarius -accipiter badius -lobophora nivigerata -centropus superciliosus -brotogeris chiriri -ancistrocerus gazella -ceratomia amyntor -hemieuxoa rudens -doxocopa laure -morrisonia confusa -zapornia flavirostra -haematopus moquini -gyps africanus -plestiodon gilberti -calidris minuta -lanius minor -plocepasser mahali -armadillidium nasatum -mesoleuca ruficillata -dryocampa rubicunda -icterus cucullatus -camponotus pennsylvanicus -zerynthia rumina -catopsilia florella -clepsis melaleucana -epilachna mexicana -acronicta superans -hyppa xylinoides -ecliptopera silaceata -anartia jatrophae -chersina angulata -trachylepis margaritifera -trachylepis striata -ophisaurus ventralis -dolichovespula arenaria -satyrium sylvinus -podargus strigoides -pachycephala rufiventris -ardea pacifica -arion subfuscus -anolis biporcatus -basiliscus plumifrons -urticina grebelnyi -clostera albosigma -neverita lewisii -campaea perlata -hyposidra talaca -carabus nemoralis -papilio helenus -phocides polybius -perispasta caeculalis -renia flavipunctalis -cheilomenes sexmaculata -scolopendra cingulata -tabanus atratus -euphyia intermediata -cactophagus spinolae -korscheltellus lupulina -hippotion celerio -catopsilia pomona -papilio demoleus -sassacus vitis -sceloporus clarkii -columba oenas -alaus lusciosus -hypomecis punctinalis -agrotis segetum -craniophora ligustri -elasmostethus interstinctus -chauliognathus marginatus -vireo olivaceus -blastobasis glandulella -ochropleura implecta -trabala vishnou -darapsa choerilus -plagodis serinaria -lophocampa caryae -euparthenos nubilis -chytonix palliatricula -milionia zonea -agrilus planipennis -condica vecors -coryphista meadii -leuconycta diphteroides -lon zabulon -hypsipetes amaurotis -orthetrum albistylum -chytolita morbidalis -cicindela trifasciata -mydas clavatus -baileya doubledayi -apamea sordens -stenomacra marginella -lycaena arota -pogonomyrmex californicus -elanus axillaris -heliopetes ericetorum -colluricincla harmonica -pardalotus striatus -orthetrum chrysis -epiblema scudderiana -scarites subterraneus -emerita talpoida -ponometia erastrioides -apiomerus spissipes -platynota idaeusalis -protodeltote albidula -rhodobaenus quinquepunctatus -cyprinus rubrofuscus -thraupis abbas -euphonia elegantissima -storeria occipitomaculata -celithemis elisa -centruroides sculpturatus -amblyomma americanum -stiretrus anchorago -phosphuga atrata -erynnis horatius -rhionaeschna californica -pogonomyrmex rugosus -peribatodes rhomboidaria -pyralis farinalis -hoplodrina ambigua -eristalis arbustorum -psyche casta -phlogophora iris -nemoria mimosaria -sphex pensylvanicus -central american agouti -lema daturaphila -scopus umbretta -polyboroides typus -philaeus chrysops -rhinichthys atratulus -lyssomanes viridis -cerma cerintha -iridopsis larvaria -pituophis deppei -sparganothis sulfureana -megaphasma denticrus -araneus bicentenarius -pasiphila rectangulata -leptopterna dolabrata -anolis limifrons -ramphocelus carbo -morrisonia latex -grallina cyanoleuca -pardalotus punctatus -eucopina tocullionana -busycon carica -euphoria sepulcralis -melanitis leda -amazilia tzacatl -euphonia hirundinacea -lonchura punctulata -callopistria cordata -aglossa pinguinalis -prasinocyma semicrocea -urbanus procne -sicalis luteola -strangalepta abbreviata -costaconvexa centrostrigaria -iridopsis defectaria -maliattha synochitis -yellow-legged tortoiseshell -speyeria cybele -argynnis adippe -bombus borealis -schistocerca americana -blepharomastix ranalis -celastrina neglecta -eumorpha vitis -canis mesomelas -hyla japonica -anomoea laticlavia -toxomerus marginatus -eueides isabella -lampropholis delicata -pycnonotus goiavier -muscicapa dauurica -agelaioides badius -argia tibialis -amorpha juglandis -campylopterus hemileucurus -oreotragus oreotragus -basileuterus culicivorus -eupithecia miserulata -eumenes fraternus -plagiodera versicolora -paraeschra georgica -eudocima phalonia -bleptina caradrinalis -cnaphalocrocis poeyalis -allagrapha aerea -tyrannus forficatus -chiasmia emersaria -metanema inatomaria -icaricia lupini -psyllobora vigintiduopunctata -satyrium behrii -eupetomena macroura -spinus magellanicus -cathartes burrovianus -setophaga cerulea -disclisioprocta stellata -hyla eximia -danaus gilippus -egretta tricolor -eudocimus albus -passerina leclancherii -volatinia jacarina -euphoria basalis -patagioenas picazuro -columbina talpacoti -dyspteris abortivaria -pseudomops septentrionalis -synchlora aerata -acrida conica -diabrotica balteata -enicospilus purgatus -lepidocolaptes angustirostris -rana luteiventris -euphoria kernii -aphonopelma hentzi -chrysoteuchia topiarius -cyligramma latona -anolis distichus -anolis equestris -lucanus elaphus -picoides arcticus -papilio canadensis -asterias rubens -dendrocygna viduata -strongylocentrotus droebachiensis -enallagma signatum -tetraopes tetrophthalmus -embernagra platensis -spilosoma lubricipeda -pyrausta laticlavia -spilosoma lutea -deilephila elpenor -pseudoips prasinana -saltator atriceps -icterus prosthemelas -xiphorhynchus flavigaster -ictinia plumbea -megascolia maculata -satyrium edwardsii -euthochtha galeator -xylocopa californica -myiopsitta monachus -apatura ilia -libellula luctuosa -stilpnia larvata -icterus pyrrhopterus -cicindela purpurea -coenonympha tullia -euphyes vestris -glaucopsyche lygdamus -erinaceus roumanicus -hypena palparia -myiozetetes similis -brachymesia furcata -roeseliana roeselii -climaciella brunnea -dichomeris flavocostella -axylia putris -lacanobia oleracea -habrosyne pyritoides -citheronia regalis -molothrus bonariensis -crocodylus moreletii -tetracis crocallata -pyrrharctia isabella -marathyssa inficita -norrisia norrisii -chlosyne gorgone -netta peposaca -tosale oviplagalis -eutropis multifasciata -hadrurus arizonensis -idaea dimidiata -misumena vatia -phyllorhynchus decurtatus -parallelia bistriaris -pococera asperatella -phimosus infuscatus -lochmaeus bilineata -balsa tristrigella -nicrophorus tomentosus -galasa nigrinodis -ariopsis felis -hasarius adansoni -hypagyrtis unipunctata -storeria dekayi -polioptila dumicola -tetanolita mynesalis -fernaldella fimetaria -virbia aurantiaca -apantesis arge -photinus pyralis -lygropia rivulalis -apoda biguttata -sicya macularia -rynchops niger -saltator aurantiirostris -exomala orientalis -cycnia tenera -zanclognatha laevigata -aspidoscelis hyperythrus -metalectra discalis -macaria pustularia -celithemis fasciata -papilio troilus -bombina variegata -achaea janata -pheosia rimosa -sporophila caerulescens -metacyrba taeniola -vaejovis carolinianus -polyphylla decemlineata -hypsopygia olinalis -homalodisca vitripennis -syrigma sibilatrix -trichoplusia ni -hesperotettix viridis -pipraeidea bonariensis -tolmomyias sulphurescens -trogon collaris -turdus leucomelas -turdus rufiventris -polygrammate hebraeicum -pantographa limata -eumyias thalassinus -allograpta obliqua -anisota virginiensis -tarache aprica -phaneroptera nana -leptoglossus phyllopus -diabrotica undecimpunctata -synanthedon acerni -lapara bombycoides -lateroligia ophiogramma -patalene olyzonaria -callimorpha dominula -taricha sierrae -sceloporus malachiticus -aegithina tiphia -lampropeltis splendida -dinopium benghalense -agapostemon virescens -polites themistocles -oreochromis mossambicus -oxychilus draparnaudi -urosalpinx cinerea -diadumene lineata -cardinalis sinuatus -adelphocoris lineolatus -lycaena heteronea -banasa euchlora -calopteryx maculata -hyla intermedia -polia nimbosa -protoboarmia porcelaria -euchlaena serrata -polistes carnifex -hemithea aestivaria -pseudothyatira cymatophoroides -lophocampa maculata -pycnonotus leucotis -apamea amputatrix -acronicta innotata -hebomoia glaucippe -hypena proboscidalis -laspeyria flexula -hofmannophila pseudospretella -anania hortulata -schizura unicornis -archips purpurana -steatoda triangulosa -papilio multicaudata -paruroctonus silvestrii -zosterops palpebrosus -coenobita clypeatus -periparus ater -anaplectoides prasina -larinus carlinae -euborellia annulipes -prionus imbricornis -sameodes cancellalis -arrhenodes minutus -platynota exasperatana -dendrocitta formosae -hieraaetus pennatus -psilopogon haemacephalus -larus cachinnans -graphisurus fasciatus -acridotheres javanicus -merops persicus -euptoieta hegesia -strangalia luteicornis -disonycha glabrata -velarifictorus micado -verrucosa arenata -syricoris lacunana -copsychus fulicatus -neoscona arabesca -cisticola juncidis -boloria selene -carterocephalus palaemon -triakis semifasciata -lucidota atra -callistethus marginatus -necrodes surinamensis -bombus nevadensis -cupha erymanthis -ptecticus trivittatus -micrathena gracilis -anthreptes malacensis -agraulis vanillae -anthidium manicatum -cecropis daurica -nematocampa resistaria -trichopoda pennipes -ctenolepisma lineata -belocaulus angustipes -thymelicus sylvestris -neotibicen canicularis -ectropis crepuscularia -egretta sacra -eurystomus orientalis -sphecodina abbottii -zelus tetracanthus -haematopus palliatus -favonius quercus -helophilus pendulus -virbia laeta -apoda y-inversum -lagria hirta -diaethria anna -isa textula -treron vernans -phyciodes tharos -euclea delphinii -pelophylax nigromaculatus -chrysoteuchia culmella -agriphila straminella -nigetia formosalis -idia lubricalis -lasiocampa quercus -diachrysia aereoides -hemaris diffinis -nyctibius jamaicensis -phoebis agarithe -asbolis capucinus -xylocopa virginica -entylia carinata -hystricia abrupta -epargyreus clarus -pachysphinx modesta -mallophora fautrix -caripeta divisata -leistes loyca -theristicus melanopis -liguus fasciatus -cosmia trapezina -ligdia adustata -drepana falcataria -perizoma alchemillata -idia rotundalis -elgaria kingii -milvago chimango -hypena bijugalis -dicymolomia julianalis -anax junius -psorophora ciliata -eristalinus taeniops -anatrytone logan -efferia aestuans -trichocnemis spiculatus -loxosceles reclusa -sitochroa palealis -pachylia ficus -cercyonis pegala -mitopus morio -crocallis elinguaria -chauliodes rastricornis -parapoynx badiusalis -pseudovadonia livida -lepomis gulosus -hemideina thoracica -antigone rubicunda -oncocera semirubella -hypena scabra -orthonama obstipata -sylvia atricapilla -pyrausta bicoloralis -bombus vancouverensis -junonia almana -crambus agitatellus -hesperia colorado -eunica monima -cicindela scutellaris -haploa clymene -tipula abdominalis -contopus cooperi -megatibicen dealbatus -sphinx poecila -cavia aperea -scolecocampa liburna -hypoprepia miniata -prunella collaris -feltia herilis -apantesis virgo -catocala ultronia -indotyphlops braminus -agama picticauda -athene cunicularia -choristoneura rosaceana -stictoleptura canadensis -icaricia icarioides -sympetrum pallipes -hypsopygia binodulalis -acronicta americana -cicindela oregona -zale lunata -watsonalla cultraria -iphiclides feisthamelii -ischnura hastata -protodeltote muscosula -noctua fimbriata -euplagia quadripunctaria -melanargia lachesis -diastictis fracturalis -aeshna grandis -watsonalla binaria -junonia hedonia -epicallima argenticinctella -anarta trifolii -xanthorhoe fluctuata -ennomos subsignaria -diacme adipaloides -bombus terricola -anomia simplex -cyrtopleura costata -hyles gallii -mellita quinquiesperforata -phrynosoma solare -doleschallia bisaltide -cepora nerissa -conocephalus fasciatus -serrognathus titanus -cyclophora linearia -ceratomia catalpae -setophaga pensylvanica -pontia occidentalis -hyles lineata -palthis angulalis -udea rubigalis -phyprosopus callitrichoides -hypena baltimoralis -haematopus unicolor -hemiphaga novaeseelandiae -alcis repandata -drepana bilineata -syrbula admirabilis -diacrisia sannio -agrotis puta -colostygia pectinataria -chloroclysta siterata -udea ferrugalis -ilexia intractata -plethodon cylindraceus -clemmys guttata -schistocerca obscura -pyrausta volupialis -eumorpha pandorus -limnaecia phragmitella -zale horrida -lithacodia musta -eudryas grata -lon taxiles -thesprotia graminis -melanoplus bivittatus -arctia caja -lucanus capreolus -ochropleura plecta -rivula sericealis -catocala grynea -anax parthenope -calopteryx haemorrhoidalis -anteos clorinde -chlorion aerarium -araneus marmoreus -ceriagrion auranticum -promachus hinei -sympecma paedisca -hypoprepia fucosa -scudderia furcata -papilio cresphontes -brachydiplax chalybea -pseudothemis zonata -agriphila tristella -colias eurytheme -pheucticus melanocephalus -aurelia labiata -peucaea ruficauda -pyrocephalus rubinus -oreothlypis superciliosa -sympetrum fonscolombii -colaptes rubiginosus -amazilia cyanocephala -bombus perplexus -holcosus undulatus -icterus gularis -calidris alba -catocala concumbens -macaria liturata -marpesia petreus -bombus auricomus -spilomyia longicornis -gymnoscelis rufifasciata -sympetrum pedemontanum -pleuroprucha insulsaria -anageshna primordialis -urola nivalis -microtheoris ophionalis -mimoschinia rufofascialis -mesoligia furuncula -monochamus notatus -pterophylla camellifolia -lacinipolia olivacea -nadata gibbosa -gluphisia septentrionis -setophaga dominica -halyomorpha halys -panopoda rufimargo -elgaria coerulea -neotamias townsendii -trichoglossus chlorolepidotus -leucania adjuta -colias philodice -bombus citrinus -conchylodes ovulalis -phymata americana -bombus fervidus -nezara viridula -brachythemis contaminata -dolichovespula maculata -erythemis simplicicollis -habrosyne scripta -tolype laricis -peridea angulosa -leptura quadrifasciata -scaphinotus angusticollis -erythemis collocata -heterocampa umbrata -cydia latiferreana -ariolimax columbianus -chlosyne nycteis -pelidnota punctata -papilio glaucus -emesis emesia -carcharodus alceae -scolia bicincta -catocala neogama -polyommatus icarus -charaxes jasius -gnophaela vermiculata -anteos maerula -cyclophora pendulinaria -dysdercus cingulatus -celastrina argiolus -reduvius personatus -brachystola magna -paravaejovis spinigerus -oecanthus nigricornis -intellagama lesueurii -mungos mungo -mycteria ibis -eulithis explanata -abudefduf vaigiensis -cosmodes elegans -spilosoma curvata -hesperia leonardus -enoplognatha ovata -scolia dubia -thalasseus sandvicensis -gryllus pennsylvanicus -xenox tigrinus -larus heermanni -ceriagrion glabrum -orthetrum chrysostigma -zerene cesonia -papilio polyxenes -ochlodes sylvanoides -orthetrum julia -borbo cinnara -gymnandrosoma punctidiscanum -talicada nyseus -delias eucharis -catocala relicta -haematopis grataria -melanoplus punctulatus -flabellinopsis iodinea -catocala cara -navanax inermis -galgula partita -halmus chalybeus -xestia smithii -malurus melanocephalus -strepera graculina -xylocopa violacea -anthidium oblongatum -chorthippus brunneus -cupido amyntula -aglais io -tylozygus bifidus -stenotus binotatus -euschistus servus -mormidea lugens -melanolestes picipes -caligavis chrysops -hypocysta metirius -argiope trifasciata -mesembrina meridiana -meconema thalassinum -pelecinus polyturator -neriene radiata -lethocerus americanus -phacellophora camtschatica -dysstroma truncata -desmia funeralis -bombus pensylvanicus -campaea margaritaria -neacoryphus bicrucis -paonias myops -dymasia dymas -erebia aethiops -parapoynx maculalis -pantherophis spiloides -trichodezia albovittata -pheosidea elegans -anoplotrupes stercorosus -caenurgia chloropha -marimatha nigrofimbria -microcarbo melanoleucos -pelecanus conspicillatus -hirundo tahitica -acharia stimulea -calpodes ethlius -nephelodes minians -sarpa salpa -chlosyne janais -phalaenostola larentioides -pseudochorthippus parallelus -hypena manalis -neoxabea bipunctata -panorpa communis -stomoxys calcitrans -monadenia fidelis -xestia c-nigrum -chalcolestes viridis -diaprepes abbreviatus -halysidota harrisii -dynastes tityus -tivela stultorum -calopteron reticulatum -chauliodes pectinicornis -autographa precationis -dendrelaphis pictus -agrotis venerabilis -anser albifrons -bombus mixtus -machimia tentoriferella -tarache quadriplaga -euclea incisa -sylvirana guentheri -aromia moschata -carpocoris purpureipennis -butorides striata -tremex columba -largus succinctus -cingilia catenaria -micrathyria hagenii -papilio rumiko -melanis cephise -rana arvalis -hippocampus histrix -physalia physalis -psammodromus algirus -aplocera plagiata -vespula vidua -orthetrum glaucum -hypsiglena ochrorhynchus -lambdina fiscellaria -lampropeltis calligaster -dicrurus macrocercus -anasaitis canosa -lampropeltis nigra -neotibicen pruinosus -acanalonia conica -limax maximus -eumorpha fasciatus -pogonomyrmex barbatus -clydonopteron sacculana -melipotis jucunda -eumorpha achemon -argiope bruennichi -euclidia glyphica -dysgonia algira -scaeva pyrastri -chilades pandava -udaspes folus -spisula solidissima -rana italica -apatelodes torrefacta -helophilus fasciatus -argyrotaenia velutinana -digrammia ocellinata -palthis asopialis -eristalis pertinax -pyrochroa coccinea -amazona viridigenalis -salamandrina perspicillata -leucophaeus atricilla -bufo spinosus -eumorpha satellitia -rumina decollata -isochaetes beutenmuelleri -petroica australis -helophilus trivittatus -pholidoptera griseoaptera -atta mexicana -datana integerrima -sciurus alleni -vanessa kershawi -danaus petilia -austrolestes leda -tyria jacobaeae -cerotoma trifurcata -corvus corone -dicromantispa interrupta -polistes metricus -euchrysops cnejus -leukoma staminea -megalopyge crispata -spilotes pullatus -echinargus isola -mauremys leprosa -delichon urbicum -hamadryas guatemalena -hamadryas amphinome -helicoverpa zea -zoropsis spinimana -hypercompe oslari -gambusia holbrooki -litoria fallax -todiramphus chloris -plantain squirrel -danaus chrysippus -phelsuma laticauda -xenocatantops humilis -stagmomantis limbata -cisthene tenuifascia -diphthera festiva -tringa ochropus -neoalcis californiaria -lacerta bilineata -triturus carnifex -setophaga petechia -pyganodon grandis -hipparchia statilinus -arenaeus cribrarius -tachina fera -agapanthia villosoviridescens -aphonopelma eutylenum -donax variabilis -leptotes pirithous -aricia agestis -calopteron terminale -elasmucha grisea -tectocoris diophthalmus -coelophora inaequalis -latrodectus geometricus -triphosa haesitata -steatoda grossa -buteo rufinus -phylloscopus trochilus -buprestis aurulenta -euthyrhynchus floridanus -cipangopaludina chinensis -psammodynastes pulverulentus -eopsaltria australis -herpetogramma licarsisalis -junonia iphita -hypselonotus punctiventris -ixobrychus minutus -anthus campestris -crocothemis erythraea -trithemis annulata -thyris maculata -mestra amymone -eristalis tenax -aplodinotus grunniens -enyo lugubris -neoconocephalus triops -chlorochroa ligata -melanchroia chephise -diploderma swinhonis -pteropus giganteus -catochrysops strabo -campylorhynchus gularis -episyrphus balteatus -antigonus erosus -anas undulata -mimus polyglottos -creatonotos gangis -dynamine postverta -regina septemvittata -operophtera brumata -adelpha iphicleola -leptotes plinius -jamides bochus -erannis defoliaria -pareuchaetes insulata -melipotis cellaris -acanthodoris lutea -ahaetulla prasina -papilio polymnestor -hapithus saltator -melanerpes aurifrons -rachiplusia ou -palpada vinetorum -diaphania hyalinata -smyrna blomfildia -utetheisa pulchella -eumomota superciliosa -romalea microptera -pyrisitia nise -syntomeida epilais -strymon istapa -rosalia funebris -bronchocela cristatella -tragelaphus angasii -leptostales pannaria -arachnis picta -euchlaena amoenaria -plethodon dorsalis -erebia epipsodea -syngamia florella -passerella iliaca -burnsius oileus -mimus gilvus -cyanocorax yucatanicus -melanitta perspicillata -loxura atymnus -saxicola caprata -eumaeus atala -bufo gargarizans -cucumaria miniata -trimeresurus stejnegeri -hexagenia limbata -ganyra josephina -lanius cristatus -phoebis philea -heliconius charithonia -deidamia inscriptum -eudyptula minor -phalacrocorax varius -petroica longipes -jamides celeno -elasmostethus cruciatus -dryas iulia -stomolophus meleagris -lophocampa annulosa -hamadryas februa -oreochromis niloticus -urania fulgens -heteronympha merope -ophraella communa -setophaga magnolia -anas gracilis -cantao ocellatus -tettigonia viridissima -quiscalus niger -hermeuptychia hermes -dicaeum hirundinaceum -neverita duplicata -lampyris noctiluca -membracis mexicana -coenonympha arcania -gomphocerippus rufus -acraea horta -motacilla aguimp -hedydipna collaris -amblyospiza albifrons -pycnonotus capensis -anthus rufulus -circus macrourus -erynnis tages -campylorhynchus zonatus -eupsittula nana -polistes canadensis -belenois creona -junonia natalica -dindymus versicolor -zizula hylax -ocybadistes walkeri -lygodactylus capensis -polistes dominula -chlosyne theona -euthystira brachyptera -plebejus idas -rhabdomys pumilio -tadorna variegata -haliaeetus albicilla -libellago lineata -ctenolepisma longicaudata -junonia terea -lanius senator -tachybaptus ruficollis -junonia oenone -illeis galbula -hemicordulia australiae -passer hispaniolensis -austroargiolestes icteromelas -arctocephalus forsteri -liolaemus tenuis -chroicocephalus maculipennis -scopula rubraria -acanthorhynchus tenuirostris -hypolimnas bolina -chalcomitra senegalensis -plecia nearctica -anthus trivialis -elseyornis melanops -acanthiza chrysorrhoa -hemicordulia tau -agrotis munda -arhodia lasiocamparia -heteropoda venatoria -hellula hydralis -acanthopagrus australis -pseudopanthera macularia -issoria lathonia -odezia atrata -daphnis nerii -lycaena dispar -phloeodes diabolicus -chalcomitra amethystina -hemidactylus mabouia -feltia subterranea -tisiphone abeona -circopetes obtusata -caligo telamonius -antigone canadensis -lichanura orcutti -destolmia lineata -mimus longicaudatus -oulactis muscosa -pyrgus malvae -hygraula nitens -emberiza cirlus -anaxyrus americanus -monochamus clamator -crypsiphona ocultaria -culladia cuneiferellus -funambulus palmarum -mythimna convecta -digrammia continuata -hesperia comma -anas flavirostris -fulica ardesiaca -myrmecia pilosula -parnassius mnemosyne -streptopelia senegalensis -geosciurus inauris -satyrium acadica -zerynthia polyxena -pieris virginiensis -spectrotrota fimbrialis -gerygone igata -todiramphus sanctus -gorsachius melanolophus -bufo bankorensis -polyommatus coridon -callizzia amorata -microcrambus biguttellus -promalactis suzukiella -dendrocitta vagabunda -sehirus cinctus -argyrotaenia quercifoliana -odorrana swinhoana -omophoita cyanipennis -nestor meridionalis -macrodiplax cora -cryphia algae -rhaphigaster nebulosa -crested porcupine -myodes glareolus -anguis veronensis -mythimna albipuncta -phoenicurus ochruros -mayaheros urophthalmus -pseudomyrmex gracilis -cyanocorax yncas -spirobranchus cariniferus -diloma aethiops -myliobatis tenuicaudatus -charadrius obscurus -libelloides coccajus -aporia crataegi -lycaena alciphron -vanellus chilensis -crematogaster scutellaris -lycaena virgaureae -rutpela maculata -palpopleura lucia -aythya nyroca -erebia ligea -corvus cornix -poecile hudsonicus -colletes inaequalis -glaucopsyche alexis -phalaenophana pyramusalis -cupido argiades -parnassius apollo -monticola solitarius -merops philippinus -euphydryas editha -americoliva sayana -poecilocoris lewisi -streptopelia semitorquata -argopecten gibbus -psilopogon nuchalis -empusa pennata -dicrurus leucophaeus -polyommatus bellargus -pelargopsis capensis -melanolophia imitata -chimarocephala pacifica -gomphurus fraternus -cypherotylus californicus -phalanta phalantha -comostola laesaria -sphrageidus similis -colotois pennaria -tachycineta bicolor -nymphalis polychloros -agonopterix alstroemeriana -marpissa muscosa -chlidonias leucopterus -henricia leviuscula -ennomos magnaria -copivaleria grotei -tringa erythropus -evasterias troschelii -iphiclides podalirius -hamearis lucina -spilostethus saxatilis -geometra papilionaria -amata phegea -mylothris agathina -arctocephalus pusillus -araschnia levana -osmia bicornis -lytrosis unitaria -dysstroma hersiliata -horisme intestinata -speyeria aglaja -melitaea athalia -melitaea didyma -boloria dia -oiceoptoma thoracicum -zonocerus elegans -bicyclus safitza -papilio bianor -euthalia aconthea -appias libythea -accipiter trivirgatus -spodoptera mauritia -scolypopa australis -polistes chinensis -lasiommata maera -tangara gyrola -anaxyrus terrestris -polydrusus formosus -myiodynastes maculatus -knulliana cincta -acridotheres cristatellus -anthrenus verbasci -adela reaumurella -carpocoris mediterraneus -alouatta seniculus -anthus spinoletta -ariadne ariadne -papilio clytia -cacomantis flabelliformis -andrena cineraria -acraea terpsicore -melanerpes rubricapillus -coccinella transversalis -bubo bubo -graphosoma italicum -leptosia nina -castalius rosimon -hemaris fuciformis -phoenicurus phoenicurus -minois dryas -araneus quadratus -sympetrum vulgatum -coenonympha glycerion -cominella adspersa -aythya novaeseelandiae -proxys punctulatus -erythrodiplax funerea -ampittia dioscorides -motacilla citreola -pareronia hippia -rhyothemis variegata -acanthacris ruficornis -valanga nigricornis -cimbex americanus -gryllus bimaculatus -henosepilachna vigintioctopunctata -ploceus capensis -milax gagates -loxigilla noctis -notocrypta curvifascia -iris oratoria -tuberolachnus salignus -polygyra cereolus -petrophila jaliscalis -saxicola torquatus -halictus tripartitus -bombus terrestris -papilio dardanus -ameles spallanzania -erebia medusa -zeuzera pyrina -ellida caniplaga -anthocharis cardamines -potamarcha congener -brintesia circe -megacopta cribraria -pararge aegeria -paralabrax clathratus -patania ruralis -malacosoma neustria -euthrix potatoria -saturnia pyri -sphinx pinastri -eilema sororcula -eilema lurideola -xestia xanthographa -orthetrum cancellatum -rhinella arenarum -timarcha tenebricosa -eurema brigitta -banasa dimidiata -chlosyne gabbii -vasates quadripedes -coreus marginatus -eupeodes corollae -setophaga virens -periplaneta fuliginosa -tubuca arcuata -sterna striata -nyctemera annulata -anatis ocellata -porcellio scaber -cercopis vulnerata -testudo hermanni -cinclus cinclus -bufotes viridis -cantharis rustica -remiz pendulinus -scaeva affinis -papilio machaon -buccinum undatum -varanus nebulosus -aspidimorpha miliaris -lytta magister -dioprosopa clavata -litoria ewingii -apis cerana -trypoxylus dichotomus -evania appendigaster -eristalis flavipes -agelastica alni -serpula columbiana -zosterops lateralis -kaniska canace -pangrapta decoralis -lacinipolia laudabilis -spodiopsar cineraceus -rhagium mordax -calliteara pudibunda -trichonephila clavata -tripudia quadrifera -xanthorhoe montanata -deilephila porcellus -regulus ignicapilla -cyrtepistomus castaneus -bulia deducta -pyrausta inornatalis -cassida rubiginosa -halictus poeyi -sturnus unicolor -aphomia sociella -zeugomantispa minuta -chrysopilus thoracicus -leucauge argyra -lethe europa -colocasia propinquilinea -hypsoropha hormos -daimio tethys -camponotus planatus -geranoaetus polyosoma -pagurus granosimanus -bombus impatiens -helminthoglypta tudiculata -opisthograptis luteolata -apamea monoglypha -acrida cinerea -arctia villica -phosphila miselioides -mechanitis polymnia -spragueia guttata -melitaea cinxia -rainieria antennaepes -ponometia semiflava -eudryas unio -euodynerus foraminatus -halyzia sedecimguttata -megalopyge opercularis -cyanocorax chrysops -glenoides texanaria -leuconycta lepidula -dysphania militaris -xylotrechus colonus -platycnemis pennipes -mimas tiliae -anolis sagrei -euclidia cuspidea -epipaschia superatalis -artace cribrarius -prionoxystus robiniae -cisthene plumbea -prolimacodes badia -lithacodes fasciola -synema globosum -oebalus pugnax -dioctria hyalipennis -elliptio complanata -pyronia bathseba -acontia trabealis -cantharis livida -mergellus albellus -poecile montanus -apogeshna stenialis -girella nigricans -sternula albifrons -rallus aquaticus -nemophora degeerella -zygaena transalpina -catocala micronympha -melanolophia canadaria -macrurocampa marthesia -acronicta insita -clepsis persicana -trithemis pallidinervis -ictinogomphus rapax -raphia frater -erthesina fullo -megachile xylocopoides -graptopsaltria nigrofuscata -aurelia aurita -dolomedes albineus -pyronia cecilia -carabus coriaceus -thalassoma pavo -coris julis -graphosoma semipunctatum -andrena wilkella -crocidosema plebejana -diplodus sargus -peridea ferruginea -poecilanthrax lucifer -zygaena lonicerae -scotopteryx chenopodiata -diplodus vulgaris -eueretagrotis perattentus -anthophora californica -hylaeus modestus -ardea purpurea -serranus scriba -panulirus interruptus -eumarozia malachitana -amazona albifrons -maniola jurtina -brenthis daphne -volucella pellucens -opilio canestrinii -plusiodonta compressipalpis -harrisimemna trisignata -hylephila phyleus -sphex nudus -amata huebneri -rhagonycha fulva -oblada melanura -crambus perlella -acleris forsskaleana -philanthus gibbosus -orientus ishidae -calotes versicolor -arctia plantaginis -idaea biselata -parasa chloris -lithosia quadra -eilema depressa -ostrea edulis -panthea acronyctoides -arta statalis -analeptura lineola -chrysomela scripta -meconema meridionale -hestina assimilis -aeshna umbrosa -octopus vulgaris -idaea demissaria -velella velella -sphinx ligustri -pomatias elegans -lestes barbarus -morimus asper -luxilus cornutus -forpus conspicillatus -isogona tenuis -leiobunum vittatum -trithemis aurora -polypedates megacephalus -meghimatium bilineatum -copera marginipes -bombus griseocollis -melissodes bimaculatus -schizura concinna -heliopetes laviana -pachliopta aristolochiae -sabella spallanzanii -hileithia magualis -leptoglossus occidentalis -ocyptamus fuscipennis -pacarina puella -cameraria ohridella -rhetus arcius -bolitotherus cornutus -catocala maestosa -platynota flavedana -ischnura elegans -squalius cephalus -parapoynx allionealis -satyrium spini -catocala lineella -euchaetes egle -rupornis magnirostris -propylea quatuordecimpunctata -neurothemis fluctuans -chrysochraon dispar -anthophora urbana -geothlypis formosa -volucella inanis -argynnis pandora -schinia arcigera -stictoleptura rubra -eutamias sibiricus -megatibicen resh -eratigena duellica -chlorostilbon canivetii -polycera atra -apantesis virguncula -moodna ostrinella -lymantria monacha -paectes abrostoloides -notocrypta paralysos -numenius madagascariensis -orectolobus maculatus -momotus aequatorialis -leptoglossus zonatus -acrocephalus arundinaceus -philesturnus rufusater -cuerna costalis -pseudochorthippus curtipennis -leucoma salicis -pycnoscelus surinamensis -chauliognathus basalis -cyprinodon variegatus -littoraria irrorata -myodocha serripes -tropidacris cristata -augochloropsis metallica -euchroma giganteum -herpetogramma bipunctalis -pyrisitia proterpia -scolia nobilitata -cerastipsocus venosus -elaphidion mucronatum -repipta taurus -onychogomphus forcipatus -aculepeira ceropegia -cicindela hybrida -orthetrum brunneum -samea baccatalis -ixobrychus sinensis -streptopelia tranquebarica -parapoynx diminutalis -cochlicopa lubrica -elophila obliteralis -palpita vitrealis -tanaecia pelea -catopsilia pyranthe -carpocoris fuscispinus -neogobius melanostomus -lamprosema victoriae -anticarsia gemmatalis -junonia genoveva -trypocopris vernalis -eristalis dimidiata -cepaea nemoralis -acronicta vinnula -ischnura aurora -vanessa indica -cordylus niger -orthodera ministralis -heliophorus epicles -exaireta spinigera -phrynops hilarii -lepomis microlophus -tangara arthus -camponotus floridanus -euodynerus hidalgo -melacoryphus lateralis -pachodynerus erynnis -platynota rostrana -vanessa carye -boana rosenbergi -eristalis stipator -emarginea percara -vanessa braziliensis -hyalymenus tarsatus -lycorma delicatula -saxicola maurus -artamus cyanopterus -digitonthophagus gazella -phrissogonus laticostata -herpetogramma phaeopteralis -condica videns -conocephalus melaenus -chroicocephalus novaehollandiae -hemideina crassidens -oligosoma polychroma -phaulacridium marginale -leucinodes cordalis -trite auricoma -austrolestes colensonis -xanthocnemis zealandica -vanessa gonerilla -latrodectus katipo -falco novaeseelandiae -ninox novaeseelandiae -prionoplus reticularis -nyssus coloripes -chloroclystis filata -clitarchus hookeri -trigonospila brevifacies -rhapsa scotosialis -orocrambus flexuosellus -eriophora pustulosa -orthodera novaezealandiae -woodworthia maculata -declana floccosa -palaemon affinis -alcithoe arabica -pseudocoremia suavis -vanessa itea -hypoblemum griseum -miomantis caffra -helpis minitabunda -trite planiceps -dasypodia cymatodes -sphenodon punctatus -aenetus virescens -isactinia olivacea -steatoda capensis -teleogryllus commodus -forsterygion lapillum -opodiphthera eucalypti -perna canaliculus -struthiolaria papulosa -spatula rhynchotis -hippocampus abdominalis -melangyna novaezelandiae -coccinella undecimpunctata -micromus tasmaniae -chloroclystis inductata -ichneutica mutans -uraba lugens -anthothoe albocincta -caedicia simplex -polistes humilis -epyaxa rosearia -sidymella trapezia -ceratosoma amoenum -gymnothorax prasinus -arianta arbustorum -gazella gazella -vespula squamosa -dorcus parallelipipedus -megatibicen auletes -burhinus grallarius -tetragonisca angustula -idaea tacturata -lithobates septentrionalis -chrysomus icterocephalus -dryadula phaetusa -chrysolina americana -aedes vexans -tirumala septentrionis -certhia brachydactyla -melipotis indomita -stilpnochlora couloniana -triodia sylvina -argopecten ventricosus -mocis marcida -diastema tigris -meuschenia freycineti -sepia apama -pseudagrion microcephalum -sepia officinalis -melipotis acontioides -amyna stricta -eubolina impartialis -clepsis virescana -sparganothoides lentiginosana -agrotis porphyricollis -tetractenos glaber -elaphria festivoides -galeruca tanaceti -halone sejuncta -vireo flavoviridis -achyra affinitalis -melanodes anthracitaria -pantydia sparsa -endotricha pyrosalis -nacoleia rhoeoalis -myzomela sanguinolenta -callocephalon fimbriatum -neoponera villosa -rhyothemis graphiptera -prosotas nora -polistes bellicosus -aplysia vaccaria -heterodontus portusjacksoni -thylacodes squamigerus -samea multiplicalis -trimerotropis maritima -emberiza rustica -clanga clanga -tringa brevipes -galeopterus variegatus -gastrina cristaria -vespa affinis -didymoctenia exsuperata -chloraspilates bicoloraria -proteuxoa hypochalchis -megaustenia imperator -stenurella melanura -lygaeus equestris -xanthogaleruca luteola -laevicaulis alte -camponotus niveosetosus -thalassoma lucasanum -crematogaster peringueyi -camponotus fulvopilosus -argiope australis -acraea issoria -delias hyparete -neptis sappho -limenitis populi -aptera fusca -anas poecilorhyncha -gonocerus acuteangulatus -cisticola exilis -archimantis latistyla -aelia acuminata -diaulula odonoghuei -gasteracantha kuhli -valgus hemipterus -cheiracanthium mildei -cyclophora nanaria -adversaeschna brevistyla -hynobius leechii -bombina orientalis -pholodes sinistraria -rana latastei -salamandra lanzai -papilio anactus -norape ovina -selenisa sueroides -micrommata virescens -eburia quadrigeminata -bodianus diplotaenia -phrynoidis asper -tetrastes bonasia -lactura subfervens -isturgia dislocaria -sander vitreus -falco berigora -talpa europaea -papilio aegeus -taeniopygia bichenovii -bradypodion damaranum -glaphyria sesquistrialis -pelopidas mathias -maliattha concinnimacula -stethophyma grossum -pseudocaranx georgianus -upeneichthys lineatus -lucanus cervus -prionus coriarius -stauropus fagi -nepa cinerea -chortophaga australior -anthene emolus -hypolycaena erylus -cigaritis vulcanus -scorpis lineolata -riptortus pedestris -zamenis longissimus -zootoca vivipara -gryllus campestris -oligoria maculata -phaulacridium vittatum -deraeocoris ruber -omocestus rufipes -cerambyx scopolii -chrysomela vigintipunctata -clytra laeviuscula -trichodes apiarius -massylaea vermiculata -miltochrista miniata -thyanta custator -cupido minimus -pyrochroa serraticornis -abraxas sylvata -ematurga atomaria -siona lineata -acrida ungarica -icterus pectoralis -pyrausta purpuralis -tetrao tetrix -girella tricuspidata -samea ecclesialis -coenagrion pulchellum -arta olivalis -lestes virens -dendrocopos syriacus -erythromma viridulum -erythromma najas -limax cinereoniger -gomphus vulgatissimus -cordulia aenea -brenthis ino -enoplosus armatus -girella zebra -thecla betulae -sympetrum flaveolum -sympetrum meridionale -panurus biarmicus -decticus verrucivorus -conocephalus fuscus -callithrix penicillata -lullula arborea -melanitis phedima -macrothylacia rubi -orthetrum testaceum -nisitrus vittatus -helix lucorum -lycaena tityrus -pyrgus malvoides -tyta luctuosa -rhodometra sacraria -hentzia mitrata -philanthus triangulum -calophasia lunula -phyllopertha horticola -cantharis fusca -stegasta bosqueella -aiolopus strepens -ancistrocerus adiabatus -corizus hyoscyami -anthropoides virgo -anas zonorhyncha -dolycoris baccarum -picus canus -lycaena hippothoe -scopula immorata -nyctemera amicus -cyclochila australasiae -athyma selenophora -synaphe punctalis -ceratosoma brevicaudatum -macroglossum stellatarum -eooxylides tharis -polyommatus amandus -carpodacus erythrinus -tropidacris collaris -acrolophus texanella -leiobunum rotundum -malachius bipustulatus -gekko chinensis -atolmis rubricollis -phyllobius pomaceus -anisota stigma -callistege mi -omocestus viridulus -ormenoides venusta -gastrophysa viridula -bombus flavifrons -metria amella -tettigonia cantans -isodontia mexicana -cenopis pettitana -ctenoplusia oxygramma -trichodes alvearius -picromerus bidens -excultanus excultus -hystrix africaeaustralis -nola cereella -scythris trivinctella -deltote pygarga -microcanthus strigatus -oedemera femorata -idaea rusticata -colias interior -macaria alternata -phaneroptera falcata -elaphria chalcedonia -colocasia coryli -harpalus rufipes -leucania diatrecta -volucella zonaria -trichiotinus assimilis -microtheoris vibicalis -halictus scabiosae -carabus granulatus -euphaea decorata -parupeneus spilurus -potanthus omaha -agrionoptera insignis -ruspolia nitidula -megisba malaya -duberria lutrix -palomena prasina -donax gouldii -pezotettix giornae -hippocampus whitei -appias lyncida -lebadea martha -ypthima huebneri -vespa velutina -tilodon sexfasciatus -cheilodactylus nigripes -petrophila bifascialis -icterus chrysater -psaltoda plaga -monacanthus chinensis -leucania incognita -nososticta solida -octopus tetricus -austroagrion watsoni -nola desmotes -pictilabrus laticlavius -pelecanus crispus -neurothemis taiwanensis -trachinops taeniatus -microcarbo pygmaeus -geitoneura klugii -epidesmia tryxaria -eurois occulta -peribalus strictus -acontia lucida -tessaratoma papillosa -microhyla fissipes -philenora aspectalella -platycephalus fuscus -rhagium inquisitor -trachurus novaezelandiae -euploea midamus -maliattha amorpha -rhyparochromus vulgaris -jamides alecto -hypselonotus interruptus -cheilodactylus vestitus -notolabrus gymnogenis -agriocnemis femina -dicotylichthys punctulatus -idiodes apicata -nacaduba kurava -latropiscis purpurissatus -scorpaena jacksoniensis -ophthalmolepis lineolata -dinolestes lewini -orectolobus halei -anoplocapros inermis -cheilodactylus fuscus -ostorhinchus limenus -phycodurus eques -pseudolabrus guentheri -meuschenia trachylepis -hypoplectrodes maccullochi -brachaluteres jacksonianus -enneapterygius atrogulare -trygonorrhina fasciata -achoerodus viridis -atypichthys strigatus -eupetrichthys angustipes -parma microlepis -schuettea scalaripinnis -trygonoptera testacea -mecaenichthys immaculatus -macaca cyclopis -kurixalus idiootocus -buergeria robusta -pteraeolidia ianthina -aphelodoris varia -strix uralensis -iduna caligata -bradypodion pumilum -austrolestes analis -dira clytus -pseudagrion pilidorsum -calotes calotes -cyanistes cyanus -thaumetopoea processionea -afrogecko porphyreus -nannodiplax rubra -matrona cyanoptera -euphaea formosa -sclerophrys pantherina -heliophorus ila -tinamus major -nocturnal curassow -agouti paca -blue whistling thrush -presbytis thomasi -bronze-tailed peacock-pheasant -leopardus pardalis -mazama americana -black-fronted duiker -philander opossum -myrmecophaga tridactyla -funisciurus carruthersi -bat-eared fox -crested partridge -meleagris ocellata -larry bird -macaca nemestrina -musophaga rossae -proechimys -francolinus nobilis -conepatus semistriatus -gambian pouched rat -mazama temama -francolinus africanus -crab-eating fox -cephalophus silvicultor -black agouti -myiophoneus glaucinus -grey-headed dove -ictonyx striatus -myoprocta pratti -lariscus insignis -manis javanica -sciurus sp -white-bellied bustard -l'hoest's monkey -unstriped ground squirrel -great argus -streptopelia lugens -white-tailed mongoose -lophura inornata -crestless fireback -tambourine dove -blue ground dove -siberian blue robin -virginia opossum -mainland serow -canis adustus -marbled cat -oryx beisa -hystrix brachyura -silver-eared mesia -white-eyed slaty flycatcher -moustached grass warbler -nanger granti -charming thicket rat -protoxerus stangeri -buff-crested bustard -link rat -scrub hare -acryllium vulturinum -momotus momota -günther's dik-dik -niltava sumatrana -common tapeti -mazama gouazoubira -african palm civet -northern white-crowned shrike -masked palm civet -banded linsang -collocalia linchi -atherurus africanus -deer mice -dendrocitta occipitalis -herpestes semitorquatus -peeper -bottom-feeder -hatchling -pup -wolf pup -puppy -bear cub -tiger cub -suckling -arcella -difflugia -paramecium -stentor -red algae -cryptomonad -gregarine -leather carp -mirror carp -tench -dace -common shiner -golden shiner -roach -scardinius erythrophthalmus -minnow -gudgeon -carassius auratus -crucian carp -electric eel -hog sucker -redhorse -fundulus heteroclitus -striped killifish -rivulus -flagfish -swordtail -guppy -gambusia affinis -platy -mollie -reef squirrelfish -holocentrus ascensionis -soldierfish -john dory -boarfish -cornetfish -stickleback -gasterosteus aculeatus -seahorse -snipefish -shrimpfish -trumpetfish -lancelet -sea lamprey -myxine glutinosa -eptatretus -placoderm -cow shark -porbeagle -mako -shortfin mako -great white shark -basking shark -thresher -carpet shark -nurse shark -sand tiger -whale shark -cat shark -bull shark -sandbar shark -blacktip shark -dusky shark -lemon shark -blue shark -soupfin shark -smoothhound -whitetip shark -spiny dogfish -smooth hammerhead -shovelhead -angel shark -electric ray -smalltooth sawfish -guitarfish -roughtail stingray -butterfly ray -aetobatus narinari -cownose ray -manta -skate -fledgling -nestling -bird of passage -archaeopteryx -carinate -struthio camelus -cassowary -electromagnetic unit -rhea -moa -alauda arvensis -anthus pratensis -chaffinch -fringilla montifringilla -carduelis carduelis -linnet -siskin -redpoll -spinus pinus -house finch -common canary -serin -loxia curvirostra -pyrrhula pyrrhula -dark eyed junco -pooecetes gramineus -white-throated sparrow -white-crowned sparrow -spizella passerina -melospiza melodia -swamp sparrow -passerina cyanea -emberiza hortulana -emberiza schoeniclus -emberiza citrinella -yellow-breasted bunting -plectrophenax nivalis -banana quit -passer domesticus -tree sparrow -evening grosbeak -hawfinch -pine grosbeak -cardinalis cardinalis -pyrrhuloxia -chewink -green tailed towhee -ploceus philippinus -whydah -java sparrow -avadavat -zebra finch -lyrebird -arkansas kingbird -tyrannus vociferans -eastern kingbird -gray kingbird -pewee -phoebe -vermillion flycatcher -cock of the rock -bellbird -umbrella bird -ant thrush -ant shrike -spotted antbird -scissortail -muscicapa striata -missel thrush -song thrush -fieldfare -redwing -ring ouzel -american robin -clay-colored robin -hermit thrush -veery -wood thrush -luscinia megarhynchos -thrush nightingale -stonechat -whinchat -solitaire -redstart -wheatear -bluebird -bluethroat -gnatcatcher -regulus regulus -gold-crowned kinglet -ruby-crowned kinglet -blackcap -sylvia communis -sylvia curruca -acrocephalus schoenobaenus -wren warbler -orthotomus sutorius -parula warbler -wilson warbler -setophaga ruticilla -cape may warbler -yellow warbler -audubon's warbler -myrtle warbler -blackpoll -icteria virens -ovenbird -water thrush -common yellowthroat -riflebird -baltimore oriole -bullock's oriole -orchard oriole -lark -cacique -dolichonyx oryzivorus -quiscalus quiscula -rusty blackbird -red-winged blackbird -oriolus oriolus -common starling -rose-colored starling -crested myna -hill myna -american crow -corvus corax -corvus frugilegus -jackdaw -chough -perisoreus canadensis -american magpie -butcherbird -currawong -gymnorhina tibicen -winter wren -house wren -long-billed marsh wren -sedge wren -rock wren -carolina wren -cactus wren -blue mockingbird -gray catbird -brown thrasher -acanthisitta chloris -certhia americana -certhia familiaris -wall creeper -sitta canadensis -black capped chickadee -tufted titmouse -carolina chickadee -blue tit -bushtit -chamaea fasciata -auriparus flaviceps -barn swallow -cliff swallow -tree swallow -house martin -riparia riparia -purple martin -wood swallow -scarlet tanager -western tanager -piranga rubra -hepatic tanager -lanius excubitor -lanius borealis -white-rumped shrike -loggerhead shrike -black-fronted bush shrike -satin bowerbird -great bowerbird -cinclus mexicanus -red-eyed vireo -solitary vireo -blue headed vireo -waxwing -accipiter gentilis -cooper's hawk -buteonine -redtail -buteo lagopus -buteo lineatus -buteo buteo -pernis apivorus -milvus migrans -swallow-tailed kite -elanus leucurus -circus aeruginosus -circus pygargus -circus cyaneus -harrier eagle -peregrine -gyrfalcon -falco tinnunculus -sparrow hawk -pigeon hawk -hobby -audubon's caracara -eaglet -golden eagle -tawny eagle -haliaeetus leucocephalus -kamchatkan sea eagle -fishing eagle -pandion haliaetus -griffon vulture -gypaetus barbatus -neophron percnopterus -black vulture -sagittarius serpentarius -turkey vulture -vultur gryphus -gymnogyps californianus -king vulture -athene noctua -great horned owl -great grey owl -strix aluco -strix varia -screech owl -spotted owl -oriental scops owl -hoot owl -hawk owl -asio otus -laughing owl -barn owl -european fire salamander -spotted salamander -alpine salamander -common newt -notophthalmus viridescens -taricha granulosa -california newt -eft -mole salamander -ambystoma tigrinum -axolotl -waterdog -hellbender -giant salamander -olm -pacific giant salamander -plethodon cinereus -plethodon vehiculum -dusky salamander -aneides lugubris -slender salamander -shasta salamander -limestone salamander -amphiuma -siren -wood-frog -bullfrog -green frog -goliath frog -pickerel frog -tarahumara frog -rana temporaria -robber frog -barking frog -tailed frog -bufo -bufo bufo -natterjack -american toad -eurasian green toad -yosemite toad -texas toad -southwestern toad -western toad -midwife toad -fire-bellied toad -western spadefoot -plains spadefoot -spring peeper -hyla arenicolor -acris crepitans -eastern cricket frog -chorus frog -lowland burrowing treefrog -western narrow-mouthed toad -gastrophryne carolinensis -sheep frog -surinam toad -xenopus laevis -caecilian -green turtle -ridley -hawksbill sea turtle -leatherback turtle -snapping turtle -diamondback terrapin -pseudemys rubriventris -box turtle -painted turtle -tortoise -soft-shelled turtle -tuatara -flying gecko -banded gecko -amblyrhynchus cristatus -dipsosaurus dorsalis -chuckwalla -callisaurus draconoides -fringe-toed lizard -earless lizard -collared lizard -leopard lizard -sceloporus occidentalis -sceloporus undulatus -sagebrush lizard -side-blotched lizard -tree lizard -horned lizard -basilisk -worm lizard -night lizard -western skink -mountain skink -racerunner -plateau striped whiptail -chihuahuan spotted whiptail -western whiptail -checkered whiptail -teju -caiman lizard -agama -frilled lizard -alligator lizard -anguis fragilis -glass lizard -legless lizard -lanthanotus borneensis -venomous lizard -sand lizard -green lizard -african chameleon -horned chameleon -komodo dragon -crocodylus niloticus -asian crocodile -false gavial -american alligator -chinese alligator -spectacled caiman -gavial -stegosaurus -edmontonia -pachycephalosaur -protoceratops -triceratops -styracosaur -psittacosaur -ornithopod -hadrosaur -apatosaur -barosaur -diplodocus -coelophysis -tyrannosaurus -allosaur -ornithomimid -oviraptorid -velociraptor -deinonychus -utahraptor -pelycosaur -dimetrodon -pterodactyl -ichthyosaur -plesiosaur -hoop snake -carphophis amoenus -ringneck snake -hognose snake -leaf-nosed snake -green snake -blue racer -horseshoe whipsnake -masticophis lateralis -sonoran whipsnake -black rat snake -chicken snake -indian rat snake -glossy snake -gopher snake -pine snake -common kingsnake -milk snake -garter snake -tropidoclonion lineatum -sonora semiannulata -eastern ground snake -nerodia sipedon -water moccasin -viperine grass snake -red-bellied snake -banded sand snake -black-headed snake -vine snake -sonoran lyre snake -western blind snake -eastern indigo snake -boa constrictor -rubber boa -rosy boa -carpet snake -reticulated python -indian python -rock python -amethystine python -eastern coral snake -western coral snake -coral snake -australian coral snake -copperhead -indian cobra -hamadryad -ringhals -black mamba -green mamba -death adder -notechis scutatus -pseudechis porphyriacus -banded krait -taipan -vipera berus -puff adder -gaboon viper -horned viper -agkistrodon piscivorus -crotalus adamanteus -canebrake rattlesnake -crotalus viridis -crotalus cerastes -western diamondback -rock rattlesnake -tiger rattlesnake -crotalus scutulatus -speckled rattlesnake -sistrurus catenatus -ground rattler -fer-de-lance -trilobite -chelicera -scorpion -book scorpion -whip-scorpion -vinegarroon -spider -black and gold garden spider -barn spider -comb-footed spider -latrodectus mactans -tarantula -wolf spider -european wolf spider -tick -hard tick -ixodes pacificus -ixodes scapularis -ixodes ricinus -wood tick -soft tick -mite -spider mite -myriapod -tardigrade -centipede -scutigera coleoptrata -millipede -sea spider -merostomata -horseshoe crab -eurypterid -tongue worm -plymouth rock -cornish -cochin -jungle cock -chick -cock -brood hen -rhode island red -orpington -turkey cock -ocellated turkey -blackcock -greyhen -red grouse -capercaillie -spruce grouse -sage grouse -ruffed grouse -sharp-tailed grouse -greater prairie chicken -lesser prairie chicken -heath hen -piping guan -chachalaca -mallee fowl -alectura lathami -maleo -phasianus colchicus -afropavo -golden pheasant -colinus virginianus -monal -peachick -peacock -peahen -blue peafowl -green peafowl -california quail -perdix perdix -red-legged partridge -greek partridge -mountain quail -guinea hen -hoatzin -dodo -pouter pigeon -rock dove -band-tailed pigeon -columba palumbus -streptopelia turtur -ringdove -australian turtledove -mourning dove -fairy swallow -roller -carrier pigeon -painted sandgrouse -pin-tailed sandgrouse -pallas's sandgrouse -african grey -macaw -nestor notabilis -cacatua galerita -pink cockatoo -lovebird -varied lorikeet -rainbow lorikeet -carolina parakeet -lovebird -psittacula krameri -cuculus canorus -black billed cuckoo -roadrunner -crow pheasant -pheasant coucal -coracias garrulus -ground roller -kingfisher -eurasian kingfisher -belted kingfisher -bee eater -hornbill -upupa epops -wood hoopoe -tody -tree swift -archilochus colubris -thornbill -european goatsucker -whippoorwill -nighthawk -poorwill -frogmouth -oilbird -green woodpecker -downy woodpecker -yellow-shafted flicker -colaptes chrysoides -red-shafted flicker -yellow-bellied sapsucker -wryneck -piculet -barbet -puffbird -honey guide -jacamar -toucan -toucanet -resplendent quetzel -anas rubripes -greenwing -bluewing -garganey -american widgeon -anas acuta -sheldrake -oxyura jamaicensis -bufflehead -barrow's goldeneye -canvasback -aythya ferina -aythya americana -scaup -wood drake -aix galericulata -muscovy duck -eider -common scoter -clangula hyemalis -mergus merganser -american merganser -mergus serrator -smew -lophodytes cucullatus -gosling -greylag -snow goose -common brant goose -branta canadensis -branta leucopsis -coscoroba -cygnet -mute swan -whooper -whistling swan -bewick's swan -cygnus buccinator -cygnus atratus -horned screamer -chaja -echidna -platypus -didelphis marsupialis -rabbit-eared bandicoot -macropus giganteus -common wallaby -hare wallaby -nail-tailed wallaby -rock wallaby -pademelon -tree wallaby -potoroo -bettong -cuscus -trichosurus vulpecula -phascolarctos cinereus -wombat -native cat -thylacine -tasmanian devil -pouched mouse -numbat -calf -starnose mole -golden mole -american shrew mole -common shrew -masked shrew -short-tailed shrew -water shrew -least shrew -hedgehog -tailless tenrec -otter shrew -scallop shell -oyster shell -sponge (animal) -glass sponge -venus's flower basket -medusa -jellyfish -scyphozoan -chrysaora quinquecirrha -hydra -portuguese man-of-war -apolemia -anthozoan -actinia -gorgonian -sea feather -sea fan -stony coral -brain coral -staghorn coral -mushroom coral -ctenophore -beroe -worm -arrowworm -planarian -liver fluke -schistosome -echinococcus -ribbon worm -rotifer -nematode -pinworm -hookworm -annelid -earthworm -polychaete -lugworm -sea mouse -bloodworm -leech -medicinal leech -horseleech -molluscs -ormer -scorpion shell -conch -giant conch -lymnaeidae -edible snail -garden snail -brown snail -slug -nerita -bleeding tooth -neritina -whelk -moon shell -periwinkle -limpet -common limpet -keyhole limpet -river limpet -sea slug -sea hare -hermissenda crassicornis -physa -cowrie -money cowrie -tiger cowrie -chiton -clam -seashell -soft-shell clam -littleneck -cherrystone -geoduck -japanese oyster -virginia oyster -pearl oyster -saddle oyster -ark shell -blood clam -freshwater mussel -bay scallop -chambered nautilus -octopus -paper nautilus -decapod -crab -stone crab -cancer irroratus -cancer borealis -swimming crab -ovalipes ocellatus -fiddler crab -pea crab -king crab -spider crab -european spider crab -giant crab -lobster -american lobster -cape lobster -norway lobster -spiny lobster -crayfish -hermit crab -shrimp -krill -opossum shrimp -squilla -woodlouse -sea louse -amphipod -skeleton shrimp -whale louse -daphnia -fairy shrimp -brine shrimp -tadpole shrimp -copepod -cyclops -white stork -black stork -adjutant bird -marabou -saddlebill -mycteria americana -shoebill -wood ibis -sacred ibis -common spoonbill -roseate spoonbill -flamingo -great blue heron -little blue heron -egretta thula -egretta garzetta -great white heron -american egret -bubulcus ibis -nycticorax nycticorax -nyctanassa violacea -cochlearius cochlearius -american bittern -european bittern -least bittern -grus americana -courlan -limpkin -crested cariama -chunga -weka -crake -florida gallinule -moorhen -purple gallinule -european gallinule -notornis -fulica americana -old world coot -great bustard -plain turkey -plain wanderer -trumpeter -brazilian trumpeter -piping plover -charadrius vociferus -dotterel -golden plover -lapwing -arenaria interpres -black turnstone -surfbird -actitis hypoleucos -spotted sandpiper -red-backed sandpiper -tringa nebularia -tringa totanus -yellowlegs -calidris melanotos -knot -calidris ferruginea -sanderling -upland sandpiper -ruff -tattler -woodcock -snipe -curlew -hudsonian godwit -black-necked stilt -himantopus himantopus -stilt -banded stilt -avocet -oystercatcher -northern phalarope -wilson's phalarope -pratincole -cream-colored courser -crocodile bird -mew -larus marinus -laughing gull -ivory gull -kittiwake -sterna hirundo -skimmer -parasitic jaeger -great skua -razorbill -little auk -great auk -black guillemot -pigeon guillemot -common murre -thick-billed murre -atlantic puffin -horned puffin -tufted puffin -grebe -white pelican -frigatebird -solan -booby -anhinga anhinga -tropic bird -adelie -king penguin -emperor penguin -jackass penguin -rock hopper -black-footed albatross -white-chinned petrel -giant petrel -manx shearwater -storm petrel -right whale -bowhead -blue whale -finback -sei whale -balaenoptera acutorostrata -humpback -eschrichtius robustus -sperm whale -pygmy sperm whale -beaked whale -common dolphins -tursiops truncatus -pacific bottlenose dolphin -phocoena phocoena -vaquita -grampus -killer whale -pilot whale -river dolphin -narwhal -white whale -trichechus manatus -dugong -steller's sea cow -crabeater seal -guadalupe fur seal -fur seal -otaria byronia -zalophus californianus -australian sea lion -steller sea lion -harbor seal -harp seal -elephant seal -bearded seal -hooded seal -atlantic walrus -pacific walrus -orycteropus afer -chihuahua -maltese dog -blenheim spaniel -papillon -toy terrier -rhodesian ridgeback -afghan hound -basset -bloodhound -bluetick -foxhound -plott hound -borzoi -irish wolfhound -italian greyhound -ibizan hound -norwegian elkhound -otterhound -saluki -scottish deerhound -weimaraner -staffordshire bullterrier -american pit bull terrier -bedlington terrier -border terrier -kerry blue terrier -irish terrier -norfolk terrier -norwich terrier -yorkshire terrier -toy manchester -smooth-haired fox terrier -wire hair fox terrier -lakeland terrier -sealyham terrier -airedale -cairn terrier -australian terrier -dandie dinmont -boston bull -schnauzer -scottish terrier -tibetan terrier -skye terrier -west highland white terrier -flat-coated retriever -curly-coated retriever -golden retriever -labrador retriever -chesapeake bay retriever -pointer -english setter -irish setter -gordon setter -field spaniel -english springer -welsh springer spaniel -english cocker spaniel -sussex spaniel -water spaniel -kuvasz -schipperke -belgian sheepdog -kelpy -komondor -old english sheepdog -border collie -bouvier des flandres -rottweiler -german shepherd -miniature pinscher -sennenhunde -boxer -tibetan mastiff -english bulldog -saint bernard -eskimo dog -alaskan malamute -siberian husky -dalmatian -affenpinscher -basenji -pug -great pyrenees -samoyed -pomeranian -chow -keeshond -griffon -pembroke welsh corgi -cardigan -poodle -mexican hairless -timber wolf -canis lupus tundrarum -red wolf -coydog -dingo -cuon alpinus -crab-eating dog -raccoon dog -lycaon pictus -striped hyena -brown hyena -crocuta crocuta -aardwolf -reynard -black fox -silver fox -red fox -kit fox -blue fox -urocyon cinereoargenteus -kitten -tortoiseshell -persian cat -angora -blue point siamese -sand cat -felis silvestris -puma concolor -jaguarundi -leptailurus serval -leopard cat -leopardus wiedii -manul -common lynx -canada lynx -bobcat -spotted lynx -caracal -panther -snow leopard -panthera onca -lionet -bengal tiger -liger -tiglon -cheetah -saber-toothed tiger -syrian bear -grizzly bear -kodiak bear -cinnamon bear -asiatic black bear -polar bear -sloth bear -large civet -small civet -binturong -cryptoprocta -fossa -fanaloka -genet -hemigalus derbyanus -indian mongoose -ichneumon -slender-tailed meerkat -suricate -pteropus hypomelanus -harpy -cynopterus sphinx -mouse-eared bat -macrotus -phyllostomus hastatus -horseshoe bat -false vampire -big-eared bat -lasiurus borealis -brown bat -little brown bat -cave myotis -big brown bat -serotine -pallid bat -pipistrelle -long-eared bat -freetail -tadarida brasiliensis -mastiff bat -vampire bat -insect -social insect -gallfly -scorpion fly -hanging fly -springtail -beetle -tiger beetle -ladybug -adalia bipunctata -mexican bean beetle -hippodamia convergens -vedalia -ground beetle -bombardier beetle -calosoma -searcher -firefly -sawyer -pine sawyer -leaf beetle -flea beetle -leptinotarsa decemlineata -carpet beetle -buffalo carpet beetle -black carpet beetle -clerid beetle -bee beetle -dung beetle -scarab -dorbeetle -june beetle -green june beetle -popillia japonica -oriental beetle -rhinoceros beetle -cockchafer -macrodactylus subspinosus -cetonia aurata -stag beetle -elaterid beetle -click beetle -wireworm -water beetle -whirligig beetle -deathwatch beetle -weevil -snout beetle -boll weevil -blister beetle -oil beetle -spanish fly -bark beetle -spruce bark beetle -rove beetle -darkling beetle -flour beetle -seed beetle -pea weevil -bean weevil -rice weevil -asian longhorned beetle -web spinner -louse -body louse -bird louse -flea -pulex irritans -dog flea -cat flea -chigoe -sticktight -gall midge -hessian fly -tsetse fly -calliphora vicina -greenbottle -flesh fly -tachina fly -botfly -warble fly -horse flies -bee fly -robber flies -apple maggot -mediterranean fruit fly -drosophila -vinegar fly -louse fly -yellow-fever mosquito -aedes albopictus -anopheline -common mosquito -culex quinquefasciatus -punkie -fungus gnat -crane fly -queen bee -worker bee -africanized bee -black bee -carniolan bee -italian bee -carpenter bee -bumblebee -cuckoo-bumblebee -andrena -leaf-cutting bee -mason bee -potter bee -giant hornet -vespula vulgaris -bald-faced hornet -vespula maculifrons -polistes annularis -potter wasp -velvet ant -mason wasp -cicada killer -mud dauber -ichneumon fly -sawfly -pharaoh ant -little black ant -army ant -carpenter ant -fire ant -wood ant -formica fusca -sanguinary ant -bulldog ant -amazon ant -dry-wood termite -mastotermes darwiniensis -grasshopper -short-horned grasshopper -locusta migratoria -migratory grasshopper -katydid -mormon cricket -mole cricket -european house cricket -field cricket -snowy tree cricket -diapheromera -oriental cockroach -periplaneta americana -periplaneta australasiae -german cockroach -praying mantis -leaf bug -mirid bug -poecilocapsus lineatus -lygus bug -tarnished plant bug -lace bug -lygaeid -chinch bug -coreid bug -anasa tristis -leaf-footed bug -backswimmer -true bug -giant water bug -water scorpion -water boatman -common pond-skater -conenose -arilus cristatus -firebug -cotton stainer -whitefly -citrus mealybug -aphid -dog-day cicada -seventeen-year locust -philaenus spumarius -pine spittlebug -saratoga spittlebug -leafhopper -psocid -booklouse -ephemerid -stonefly -green lacewing -brown lacewing -corydalus cornutus -fish fly -alderfly -snakefly -mantispid -caddis fly -bristletail -silverfish -firebrat -jumping bristletail -thrips -earwig -common european earwig -butterfly -mourning cloak -tortoiseshell -painted beauty -admiral -red admiral -white admiral -limenitis arthemis -red-spotted purple -viceroy (butterfly) -anglewing -ringlet -polygonia comma -silverspot -emperor butterfly -purple emperor -danaid -danaus plexippus -pierid -small white -large white -southern cabbage butterfly -sulphur butterfly -blue -american copper -strymon melinus -moth miller -leaf roller -tea tortrix -orange tortrix -codling moth -lymantriid -lymantria dispar -browntail -euproctis chrysorrhoea -measuring worm -galleria mellonella -corn borer -mediterranean flour moth -tobacco moth -almond moth -raisin moth -casemaking clothes moth -carpet moth -grain moth -cutworm -red underwing -antler moth -heliothis moth -armyworm -armyworm -spodoptera exigua -spodoptera frugiperda -manduca sexta -tomato hornworm -acherontia atropos -bombycid -silkworm -emperor -imperial moth -actias luna -cecropia -cynthia moth -automeris io -polyphemus moth -tussah -atlas moth -tiger moth -cinnabar -eggar -malacosoma americana -tent-caterpillar moth -forest tent caterpillar -lappet -webworm moth -hyphantria cunea -garden webworm -woolly bear moth -maggot -chrysalis -peanut worm -echinoderm -starfish -brittle star -basket star -astrophyton muricatum -sea urchin -crinoid -sea lily -feather star -sea cucumber -trepang -rabbit ears -oryctolagus cuniculus -sylvilagus floridanus -swamp rabbit -white-tailed jackrabbit -lepus californicus -polar hare -lepus americanus -belgian hare -little chief hare -collared pika -mus musculus -harvest mouse -nude mouse -sewer rat -rattus rattus -bandicoot rat -beaver rat -wood mouse -muskrat -cotton rat -wood rat -vole -neotoma fuscipes -hamster -jird -sand rat -lemming -brush-tailed porcupine -long-tailed porcupine -erethizon dorsatum -silky pocket mouse -plains pocket mouse -hispid pocket mouse -kangaroo rat -kangaroo mouse -meadow jumping mouse -jaculus jaculus -loir -lerot -gopher -plains pocket gopher -thomomys bottae -eastern grey squirrel -western grey squirrel -sciurus niger -black squirrel -american red squirrel -chickeree -antelope squirrel -mantled ground squirrel -suslik -flickertail -rock squirrel -arctic ground squirrel -prairie dog -tamias striatus -chipmunk -american flying squirrel -groundhog -hoary marmot -yellowbelly marmot -beaver -sewellel -guinea pig -aperea -mara -capybara -myocastor coypus -chinchilla -mountain chinchilla -viscacha -naked mole rat -procavia capensis -equus caballus -eohippus -foal -colt -buckskin -pinto -burro -hinny -equus asinus -kiang -onager -chigetai -common zebra -mountain zebra -equus grevyi -equus quagga -indian rhinoceros -woolly rhinoceros -ceratotherium simum -black rhinoceros -tapirus terrestris -malayan tapir -piglet -tayassu pecari -hippopotamus amphibius -texas longhorn -zebu -yak -red poll -santa gertrudis -aberdeen angus -charolais -galloway -carabao -cape buffalo -gaur -american bison -wisent -sheep -lamb -lambkin -baa-lamb -argali -marco polo sheep -urial -dall sheep -ovis canadensis -mouflon -barbary sheep -angora -markhor -capra ibex -mountain goat -goral -chamois -takin -blackbuck -gerenuk -addax -wildebeest -hartebeest -sassaby -impala -eudorcas thomsonii -gazella subgutturosa -antidorcas marsupialis -bongo -tragelaphus strepsiceros -lesser kudu -nyala -mountain nyala -tragelaphus scriptus -nilgai -sable antelope -saiga -raphicerus campestris -common eland -giant eland -kobus kob -lechwe -puku -gemsbok -antilocapra americana -stag -pricket -fawn -hart -hind -wapiti -japanese deer -odocoileus virginianus -black tailed deer -moose -roe deer -woodland caribou -barren ground caribou -muntjac -musk deer -pere david's deer -kanchil -napu -camelus dromedarius -bactrian camel -vicuña -giraffe -okapi -stoat -mustela nivalis -longtail weasel -american mink -ferret -black-footed ferret -muishond -eurasian otter -sea otter -striped skunk -hooded skunk -conepatus leuconotus -spotted skunk -american badger -meles meles -ratel -ferret badger -hog badger -wolverine -grison -pine marten -martes americana -stone marten -fisher -martes flavigula -eira barbara -dasypus novemcinctus -tatouay -peludo -priodontes maximus -three-toed sloth -two-toed sloth -ant bear -silky anteater -tadpole -orangutan -gorilla -chimpanzee -gibbon -siamang -talapoin -grivet -vervet -green monkey -mangabey -patas -papio ursinus -mandrill -macaca mulatta -macaca radiata -barbary ape -entellus -guereza -proboscis monkey -pygmy marmoset -tamarin -pinche -douroucouli -howler monkey -saki -uakari -titi -ateles geoffroyi -squirrel monkey -woolly monkey -tree shrew -prosimian -madagascar cat -aye-aye -slender loris -slow loris -potto -angwantibo -galago -indri -woolly indris -tarsius syrichta -cynocephalus variegatus -elephas maximus -loxodonta africana -woolly mammoth -raccoon -bassarisk -kinkajou -red panda -giant panda -parr -mouthbreeder -barracouta -northern snakehead -coelacanth -lungfish -european catfish -electric catfish -horned pout -brown bullhead -blue catfish -flathead catfish -armored catfish -sea catfish -atlantic cod -whiting -burbot -pollack -ling -cusk -grenadier -tuna -moray -conger -whitebait -menhaden -pacific sardine -atlantic salmon -sockeye -chinook -chum salmon -oncorhynchus kisutch -salmo trutta -sea trout -arctic char -lake whitefish -cisco -round whitefish -capelin -ladyfish -bonefish -lanternfish -lizardfish -lancetfish -opah -ribbonfish -oarfish -batfish -goosefish -toadfish -frogfish -sargassum fish -needlefish -flying fish -halfbeak -saury -perch -climbing perch -yellow perch -european perch -walleye -snail darter -sandfish -cusk-eel -brotula -robalo -snook -northern pike -muskellunge -chain pickerel -redfin pickerel -pomoxis nigromaculatus -white crappie -pumpkinseed -lepomis macrochirus -spotted sunfish -ambloplites rupestris -micropterus dolomieu -largemouth -yellow bass -black sea bass -striped bass -hind -rock hind -creole-fish -jewfish -soapfish -rainbow seaperch -bigeye -catalufa -cardinalfish -tilefish -pomatomus saltatrix -cobia -sharksucker -crevalle jack -yellow jack -rainbow runner -threadfish -moonfish -amberjack -rudderfish -kingfish -florida pompano -pilotfish -bigeye scad -mackerel scad -round scad -coryphaena hippurus -pomfret -tetra -cardinal tetra -piranha -cichlid -red snapper -grey snapper -mutton snapper -lutjanus apodus -ocyurus chrysurus -spanish grunt -cottonwick -sailor's-choice -porkfish -red porgy -sheepshead -lagodon rhomboides -sheepshead porgy -striped drum -jackknife-fish -silver perch -sciaenops ocellatus -mulloway -maigre -micropogonias undulatus -yellowfin croaker -corbina -spotted weakfish -mullet -yellow goatfish -mugil cephalus -white mullet -liza -silversides -great barracuda -bermuda chub -spadefish -chaetodon -angelfish -rock beauty -beaugregory -clown anemone fish -abudefduf saxatilis -pigfish -hogfish -slippery dick -puddingwife -bluehead -razor fish -pearly razorfish -tautog -cunner -parrotfish -threadfin -jawfish -stargazer -blenny -shanny -clinid -pikeblenny -gunnel -rock gunnel -wolffish -viviparous eelpout -ocean pout -sand lance -goby -mudskipper -flathead -archerfish -surgeonfish -doctorfish -oilfish -cutlassfish -chub mackerel -wahoo -king mackerel -scomberomorus maculatus -cero -bluefin -skipjack -bonito -swordfish -atlantic sailfish -blue marlin -black marlin -striped marlin -white marlin -spearfish -palometa -harvestfish -squaretail -barrelfish -clingfish -tripletail -yellowfin mojarra -bowfin -paddlefish -beluga whale -gar -plumed scorpionfish -lionfish -stonefish -copper rockfish -vermillion rockfish -red rockfish -rosefish -bullhead -sea raven -lumpsucker -pogge -kelp greenling -painted greenling -tub gurnard -sea robin -queen triggerfish -filefish -leatherjacket -cowfish -puffer -diodon hystrix -balloonfish -burrfish -ocean sunfish -flounder -plaice -yellowtail flounder -winter flounder -halibut -atlantic halibut -pacific halibut -southern flounder -summer flounder -sand dab -brill -turbot -tonguefish -english sole -hogchoker -smoker -person -poultry -hen -duckling -goose -grouse -quail -partridge -saltwater fish -bream -freshwater bass -dolphinfish -carp -pike -monkfish -catfish -sunfish -spanish mackerel -squid -escargots -panfish -mussel -anchovy (food) -eel -lingcod -huitre -quahaug -cockle -blue crab -dungeness crab -flatfish -redfish -rockfish -european lobster -crayfish -prawn -rainbow trout -brook trout -lake trout -silver salmon -avifauna -shell -mermaid -adult -black man -black woman -white man -accordionist -aerialist -amputee -angler -archer -astronaut -athlete -aviatrix -baby -baldhead -ballplayer -bullfighter -basketball player -bassoonist -bat boy -belly dancer -billiard player -boatman -bride -bridesmaid -caddie -card player -carillonneur -cavalryman -cellist -charioteer -cheerleader -chess player -child -cigarette smoker -cigar smoker -clarinetist -climber -clown -coachman -computer user -conductor -cricketer -cyborg -cyclist -cymbalist -dancer -diver -physician -draftsman -drinker -drummer -dunker -falconer -fencer -fighter pilot -fire-eater -fireman -flautist -football player -girl -goatherd -golfer -grinner -groom -groomsman -guard -guitarist -gymnast -hairdresser -halberdier -harpist -helmsman -herder -hockey player -hornist -equestrian -horsewoman -hugger -huntress -hurdler -interviewer -keyboardist -kisser -kneeler -knitter -koto player -lacrosse player -laugher -lumberman -macebearer -mahout -maid -male child -man -masquerader -masseur -masseuse -miner -muralist -musher -musician -musketeer -muslimah -myope -nurse -oarswoman -oboist -oldster -old woman -organ-grinder -painter -pallbearer -parachutist -passenger -passerby -pavement artist -peasant -percussionist -photographer -pianist -picnicker -pilot -pipe smoker -pisser -plasterer -police officer -portraitist -punter -rider -ring girl -roadman -roller-skater -ropewalker -runner -sailor -saunterer -saxophonist -schoolchild -schoolgirl -serviceman -sheepherder -shot putter -sign painter -singer -sipper -skateboarder -skier -sledder -sleeper -snake charmer -sneezer -soccer player -soldier -spacewalker -speaker -street cleaner -stretcher-bearer -student -surfer -sweeper -swimmer -telephone operator -toiler -tennis player -tiler -trombonist -trumpeter -unicyclist -vaulter -violinist -volleyball player -waitress -weatherman -weightlifter -whisperer -woman -woodcarver -young buck -youth -coral -caucasian women -chianina -otocyon -coquerel's sifaka -pit bull -hippotigris -miniature dachshund -sinistral snail -goat kid -badminton player -polo player -asian elephant -windsurfer -table tennis player -taekwondo athlete -somali goat -street musician -hairless cats -rhesus macaque -wistar rat -freediver -beach volleyball player -wheelchair tennis player -feral pigeon -cornicen -owtscharka -helicopter pilot -odocoileus virginianus borealis -maltipoo -maremma sheepdog -ocean rower -cane corso -alaskan husky -reindeer in south georgia -normande cattle -wakeboarder -sparus aurata -simmental cattle -western osprey -common pheasant -paraglider pilot -polled hereford -wingless insect -bicolor cat -catalan sheepdog -male goat -danish swedish farmdog -akita -finnish lapphund -british shorthair -british semi-longhair -disc golfer -guard goose -pregnant women -dolichohippus -can de palleiro -morkie -disabled woman -swedish blue duck -gliding ant -american hairless terrier -american akita -anatolian shepherd -australian cattle dog -bearded collie -chinese chongqing dog -american eskimo dog -dogo canario -english shepherd -aidi -entlebucher mountain dog -shinty player -bullmastiff -alaskan klee kai -akbash -american mastiff -labradoodle -jack russell terrier -dobermann -english mastiff -bull and terrier -portuguese water dog -central asian shepherd dog -molosser -rough collie -smooth fox terrier -redbone coonhound -podenco canario -portuguese podengo -swedish vallhund -northern inuit dog -wire fox terrier -exotic shorthair -cornish rex -non-human primate -freshwater snail -andalusian horse -maine-anjou -africanis -crested duck -german spitz mittel -american bully -arm wrestler -highland cattle -tango dancer -powerchair footballer -cow herder -judoka -ray fish -concertmaster -northwestern crow -narragansett turkey -egyptian mau -dragon li -kurilian bobtail -urban coyote -barnevelder -aylesbury duck -sphynx kittens -belted galloway -pterois volitans -silver y -rackets player -cayuga duck -exmoor pony -pitador -jersey cattle -pekin duck -westiepoo -card -napkin -cheese sauce -model -box -jam -centerpiece -picture_frame -bannister -shelf -mirror -bar -bouquet -vase -decoration -ashcan -lamppost -ring -booth -milk_vetch -iceland poppy -shoe -trouser -day_lily -door -nidus -tricycle -tongs -lighting_fixture -sloth -writing_implement -percussion_instrument -acarine -cricket -cutting_implement -signaling_device -vessel -ant -face_mask -piece_of_cloth -bee -module -hand_tool -elephant -container -board -kangaroo -foodstuff -ball -tiger -animal -moth -butt -signboard -garden_tool -toy -rat -dairy_product -photographic_equipment -anteater -snake -mammal -jewel -squirrel -heater -dinosaur -musical_instrument -optical_instrument -crustacean -otter -housing -saurian -mechanical_device -frozen_dessert -currency -fireplace -cleaning_implement -kitchen_appliance -dim_sum -cell -lion -bat (animal) -conduit -cetacean -fish -hardware -plastic -protective_covering -microorganism -vehicle -paper -sports_ball -drafting_instrument -monkey -sweet -kitchenware -postbox -component -mat -keyboard_instrument -wind_instrument -elastic_device -rodent -fishing_gear -rescue_equipment -canine -electronic_device -plant -paint -shop -cockroach -fabric -tent -dish -column -camel -tube -electrical_device -dragonfly -fungus -turtle -deer -makeup -furniture -amphibian -"ducks -grain -car -fox -fly -cleaning products -memory_device -celestial_body -root_vegetable -cart -cloth_covering -bath_linen -shackle -plug -weapon -emblem -ox -reptile -shellfish -man -entity -sports_equipment -barn -medical_instrument -public_transport -goat_antelope -table_linen -coelenterate -framework -antique -plastic_art -flower -stringed_instrument -medicine -traffic light -seafood -toiletries -fruit -dressing -cat -seal -crocodile -artifact -armadillo -power_tool -accessory -instrumentality -bridge -submachine_gun -salamander -vegetable -baked_goods -building -frog -meat -cactus -kitchen_utensil -arthropod -clothing diff --git a/mmdet/datasets/v3det.py b/mmdet/datasets/v3det.py index 009ec8b2cf6..25bfe3bc718 100644 --- a/mmdet/datasets/v3det.py +++ b/mmdet/datasets/v3det.py @@ -1,20 +1,32 @@ # Copyright (c) OpenMMLab. All rights reserved. +import os.path +from typing import Optional import mmengine from mmdet.registry import DATASETS from .coco import CocoDataset -V3DET_CLASSES = tuple( - mmengine.list_from_file( - 'configs/v3det/category_name_13204_v3det_2023_v1.txt')) - @DATASETS.register_module() class V3DetDataset(CocoDataset): """Dataset for V3Det.""" METAINFO = { - 'classes': V3DET_CLASSES, - 'palette': None, # TODO: add palette + 'classes': None, + 'palette': None, } + + def __init__( + self, + *args, + metainfo: Optional[dict] = None, + data_root: str = '', + label_file='annotations/category_name_13204_v3det_2023_v1.txt', # noqa + **kwargs) -> None: + class_names = tuple( + mmengine.list_from_file(os.path.join(data_root, label_file))) + if metainfo is None: + metainfo = {'classes': class_names} + super().__init__( + *args, data_root=data_root, metainfo=metainfo, **kwargs) From 2457c4efec4c7d55888cd3d109550940bb71cbb2 Mon Sep 17 00:00:00 2001 From: Jiongjiong Li <33146359+jiongjiongli@users.noreply.github.com> Date: Wed, 20 Sep 2023 21:10:54 -0500 Subject: [PATCH 49/63] Support AlignDETR Co-authored-by: huanghaian --- mmdet/models/detectors/deformable_detr.py | 2 +- projects/AlignDETR/README.md | 33 ++ projects/AlignDETR/align_detr/__init__.py | 5 + .../AlignDETR/align_detr/align_detr_head.py | 508 ++++++++++++++++++ .../align_detr/mixed_hungarian_assigner.py | 162 ++++++ projects/AlignDETR/align_detr/utils.py | 34 ++ .../align_detr-4scale_r50_8xb2-12e_coco.py | 185 +++++++ .../align_detr-4scale_r50_8xb2-24e_coco.py | 19 + 8 files changed, 947 insertions(+), 1 deletion(-) create mode 100644 projects/AlignDETR/README.md create mode 100644 projects/AlignDETR/align_detr/__init__.py create mode 100644 projects/AlignDETR/align_detr/align_detr_head.py create mode 100644 projects/AlignDETR/align_detr/mixed_hungarian_assigner.py create mode 100644 projects/AlignDETR/align_detr/utils.py create mode 100644 projects/AlignDETR/configs/align_detr-4scale_r50_8xb2-12e_coco.py create mode 100644 projects/AlignDETR/configs/align_detr-4scale_r50_8xb2-24e_coco.py diff --git a/mmdet/models/detectors/deformable_detr.py b/mmdet/models/detectors/deformable_detr.py index acab33ba3e3..0eb5cd2f952 100644 --- a/mmdet/models/detectors/deformable_detr.py +++ b/mmdet/models/detectors/deformable_detr.py @@ -500,7 +500,7 @@ def gen_encoder_output_proposals( else: if not isinstance(HW, torch.Tensor): HW = memory.new_tensor(HW) - scale = HW.unsqueeze(0).flip(dims=[0, 1]).view(bs, 1, 1, 2) + scale = HW.unsqueeze(0).flip(dims=[0, 1]).view(1, 1, 1, 2) grid_y, grid_x = torch.meshgrid( torch.linspace( 0, H - 1, H, dtype=torch.float32, device=memory.device), diff --git a/projects/AlignDETR/README.md b/projects/AlignDETR/README.md new file mode 100644 index 00000000000..33690fe0c43 --- /dev/null +++ b/projects/AlignDETR/README.md @@ -0,0 +1,33 @@ +# AlignDETR + +> [Align-DETR: Improving DETR with Simple IoU-aware BCE loss](https://arxiv.org/abs/2304.07527) + + + +## Abstract + +DETR has set up a simple end-to-end pipeline for object detection by formulating this task as a set prediction problem, showing promising potential. However, despite the significant progress in improving DETR, this paper identifies a problem of misalignment in the output distribution, which prevents the best-regressed samples from being assigned with high confidence, hindering the model's accuracy. We propose a metric, recall of best-regressed samples, to quantitively evaluate the misalignment problem. Observing its importance, we propose a novel Align-DETR that incorporates a localization precision-aware classification loss in optimization. The proposed loss, IA-BCE, guides the training of DETR to build a strong correlation between classification score and localization precision. We also adopt the mixed-matching strategy, to facilitate DETR-based detectors with faster training convergence while keeping an end-to-end scheme. Moreover, to overcome the dramatic decrease in sample quality induced by the sparsity of queries, we introduce a prime sample weighting mechanism to suppress the interference of unimportant samples. Extensive experiments are conducted with very competitive results reported. In particular, it delivers a 46 (+3.8)% AP on the DAB-DETR baseline with the ResNet-50 backbone and reaches a new SOTA performance of 50.2% AP in the 1x setting on the COCO validation set when employing the strong baseline DINO. + +![image](https://github.com/open-mmlab/mmdetection/assets/33146359/5a4fa664-b4c6-487d-b6d8-22be9d59a2bc) + +## Results and Models + +| Backbone | Model | Lr schd | box AP | Config | Download | +| :------: | :---------: | :-----: | :----: | :------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| R-50 | DINO-4scale | 12e | 50.5 | [config](./align_detr-4scale_r50_8xb2-12e_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/align_detr/align_detr-4scale_r50_8xb2-12e_coco/align_detr-4scale_r50_8xb2-12e_coco_20230914_095734-61f921af.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/align_detr/align_detr-4scale_r50_8xb2-12e_coco/align_detr-4scale_r50_8xb2-12e_coco_20230914_095734.log.json) | +| R-50 | DINO-4scale | 24e | 51.4 | [config](./align_detr-4scale_r50_8xb2-24e_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/align_detr/align_detr-4scale_r50_8xb2-24e_coco/align_detr-4scale_r50_8xb2-24e_coco_20230919_152414-f4b6cf76.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/align_detr/align_detr-4scale_r50_8xb2-24e_coco/align_detr-4scale_r50_8xb2-24e_coco_20230919_152414.log.json) | + +## Citation + +We provide the config files for AlignDETR: [Align-DETR: Improving DETR with Simple IoU-aware BCE loss](https://arxiv.org/abs/2304.07527). + +```latex +@misc{cai2023aligndetr, + title={Align-DETR: Improving DETR with Simple IoU-aware BCE loss}, + author={Zhi Cai and Songtao Liu and Guodong Wang and Zheng Ge and Xiangyu Zhang and Di Huang}, + year={2023}, + eprint={2304.07527}, + archivePrefix={arXiv}, + primaryClass={cs.CV} +} +``` diff --git a/projects/AlignDETR/align_detr/__init__.py b/projects/AlignDETR/align_detr/__init__.py new file mode 100644 index 00000000000..26a49b52476 --- /dev/null +++ b/projects/AlignDETR/align_detr/__init__.py @@ -0,0 +1,5 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from .align_detr_head import AlignDETRHead +from .mixed_hungarian_assigner import MixedHungarianAssigner + +__all__ = ['AlignDETRHead', 'MixedHungarianAssigner'] diff --git a/projects/AlignDETR/align_detr/align_detr_head.py b/projects/AlignDETR/align_detr/align_detr_head.py new file mode 100644 index 00000000000..c06d1bd404c --- /dev/null +++ b/projects/AlignDETR/align_detr/align_detr_head.py @@ -0,0 +1,508 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from typing import Any, Dict, List, Tuple, Union + +import torch +from mmengine.structures import InstanceData +from torch import Tensor + +from mmdet.models.dense_heads import DINOHead +from mmdet.registry import MODELS +from mmdet.structures.bbox import (bbox_cxcywh_to_xyxy, bbox_overlaps, + bbox_xyxy_to_cxcywh) +from mmdet.utils import InstanceList +from .utils import KeysRecorder + + +@MODELS.register_module() +class AlignDETRHead(DINOHead): + r"""Head of the Align-DETR: Improving DETR with Simple IoU-aware BCE loss + + Code is modified from the `official github repo + `_. + + More details can be found in the `paper + `_ . + + Args: + all_layers_num_gt_repeat List[int]: Number to repeat gt for 1-to-k + matching between ground truth and predictions of each decoder + layer. Only used for matching queries, not for denoising queries. + Element count is `num_pred_layer`. If `as_two_stage` is True, then + the last element is for encoder output, and the others for + decoder layers. Otherwise, all elements are for decoder layers. + Defaults to a list of `1` for the last decoder layer and `2` for + the others. + alpha (float): Hyper-parameter of classification loss that controls + the proportion of each item to calculate `t`, the weighted + geometric average of the confident score and the IoU score, to + align classification and regression scores. Defaults to `0.25`. + gamma (float): Hyper-parameter of classification loss to do the hard + negative mining. Defaults to `2.0`. + tau (float): Hyper-parameter of classification and regression losses, + it is the temperature controlling the sharpness of the function + to calculate positive sample weight. Defaults to `1.5`. + """ + + def __init__(self, + *args, + all_layers_num_gt_repeat: List[int] = None, + alpha: float = 0.25, + gamma: float = 2.0, + tau: float = 1.5, + **kwargs) -> None: + self.all_layers_num_gt_repeat = all_layers_num_gt_repeat + self.alpha = alpha + self.gamma = gamma + self.tau = tau + self.weight_table = torch.zeros( + len(all_layers_num_gt_repeat), max(all_layers_num_gt_repeat)) + for layer_index, num_gt_repeat in enumerate(all_layers_num_gt_repeat): + self.weight_table[layer_index][:num_gt_repeat] = torch.exp( + -torch.arange(num_gt_repeat) / tau) + + super().__init__(*args, **kwargs) + assert len(self.all_layers_num_gt_repeat) == self.num_pred_layer + + def loss_by_feat(self, all_layers_cls_scores: Tensor, *args, + **kwargs) -> Any: + """Loss function. + AlignDETR: This method is based on `DINOHead.loss_by_feat`. + + Args: + all_layers_cls_scores (Tensor): Classification scores of all + decoder layers, has shape (num_decoder_layers, bs, + num_queries_total, cls_out_channels), where + `num_queries_total` is the sum of `num_denoising_queries` + and `num_matching_queries`. + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + # Wrap `all_layers_cls_scores` with KeysRecorder to record its + # `__getitem__` keys and get decoder layer index. + all_layers_cls_scores = KeysRecorder(all_layers_cls_scores) + result = super(AlignDETRHead, + self).loss_by_feat(all_layers_cls_scores, *args, + **kwargs) + return result + + def loss_by_feat_single(self, cls_scores: Union[KeysRecorder, Tensor], + bbox_preds: Tensor, + batch_gt_instances: InstanceList, + batch_img_metas: List[dict]) -> Tuple[Tensor]: + """Loss function for outputs from a single decoder layer of a single + feature level. + AlignDETR: This method is based on `DINOHead.loss_by_feat_single`. + + Args: + cls_scores (Union[KeysRecorder, Tensor]): Box score logits from a + single decoder layer for all images, has shape (bs, + num_queries, cls_out_channels). + bbox_preds (Tensor): Sigmoid outputs from a single decoder layer + for all images, with normalized coordinate (cx, cy, w, h) and + shape (bs, num_queries, 4). + batch_gt_instances (list[:obj:`InstanceData`]): Batch of + gt_instance. It usually includes ``bboxes`` and ``labels`` + attributes. + batch_img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + + Returns: + Tuple[Tensor]: A tuple including `loss_cls`, `loss_box` and + `loss_iou`. + """ + # AlignDETR: Get layer_index. + if isinstance(cls_scores, KeysRecorder): + # Outputs are from decoder layer. Get layer_index from + # `__getitem__` keys history. + keys = [key for key in cls_scores.keys if isinstance(key, int)] + assert len(keys) == 1, \ + 'Failed to extract key from cls_scores.keys: {}'.format(keys) + layer_index = keys[0] + # Get dn_cls_scores tensor. + cls_scores = cls_scores.obj + else: + # Outputs are from encoder layer. + layer_index = self.num_pred_layer - 1 + + for img_meta in batch_img_metas: + img_meta['layer_index'] = layer_index + + results = super(AlignDETRHead, self).loss_by_feat_single( + cls_scores, + bbox_preds, + batch_gt_instances=batch_gt_instances, + batch_img_metas=batch_img_metas) + return results + + def get_targets(self, cls_scores_list: List[Tensor], + bbox_preds_list: List[Tensor], + batch_gt_instances: InstanceList, + batch_img_metas: List[dict]) -> tuple: + """Compute regression and classification targets for a batch image. + + Outputs from a single decoder layer of a single feature level are used. + AlignDETR: This method is based on `DETRHead.get_targets`. + + Args: + cls_scores_list (list[Tensor]): Box score logits from a single + decoder layer for each image, has shape [num_queries, + cls_out_channels]. + bbox_preds_list (list[Tensor]): Sigmoid outputs from a single + decoder layer for each image, with normalized coordinate + (cx, cy, w, h) and shape [num_queries, 4]. + batch_gt_instances (list[:obj:`InstanceData`]): Batch of + gt_instance. It usually includes ``bboxes`` and ``labels`` + attributes. + batch_img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + + Returns: + tuple: a tuple containing the following targets. + + - labels_list (list[Tensor]): Labels for all images. + - label_weights_list (list[Tensor]): Label weights for all images. + - bbox_targets_list (list[Tensor]): BBox targets for all images. + - bbox_weights_list (list[Tensor]): BBox weights for all images. + - num_total_pos (int): Number of positive samples in all images. + - num_total_neg (int): Number of negative samples in all images. + """ + results = super(AlignDETRHead, + self).get_targets(cls_scores_list, bbox_preds_list, + batch_gt_instances, batch_img_metas) + + # AlignDETR: `num_total_pos` for matching queries is the number of + # unique gt bboxes in the batch. Refer to AlignDETR official code: + # https://github.com/FelixCaae/AlignDETR/blob/8c2b1806026e1b33fe1c282577de1647e352d7f0/aligndetr/criterions/base_criterion.py#L195C15-L195C15 # noqa: E501 + num_total_pos = sum( + len(gt_instances) for gt_instances in batch_gt_instances) + + results = list(results) + results[-2] = num_total_pos + return tuple(results) + + def _get_targets_single(self, cls_score: Tensor, bbox_pred: Tensor, + gt_instances: InstanceData, + img_meta: dict) -> tuple: + """Compute regression and classification targets for one image. + + Outputs from a single decoder layer of a single feature level are used. + AlignDETR: This method is based on `DETRHead._get_targets_single`. + + Args: + cls_score (Tensor): Box score logits from a single decoder layer + for one image. Shape [num_queries, cls_out_channels]. + bbox_pred (Tensor): Sigmoid outputs from a single decoder layer + for one image, with normalized coordinate (cx, cy, w, h) and + shape [num_queries, 4]. + gt_instances (:obj:`InstanceData`): Ground truth of instance + annotations. It should includes ``bboxes`` and ``labels`` + attributes. + img_meta (dict): Meta information for one image. + layer_index (int): Decoder layer index for the outputs. Defaults + to `-1`. + + Returns: + tuple[Tensor]: a tuple containing the following for one image. + + - labels (Tensor): Labels of each image. + - label_weights (Tensor]): Label weights of each image. + - bbox_targets (Tensor): BBox targets of each image. + - bbox_weights (Tensor): BBox weights of each image. + - pos_inds (Tensor): Sampled positive indices for each image. + - neg_inds (Tensor): Sampled negative indices for each image. + """ + img_h, img_w = img_meta['img_shape'] + factor = bbox_pred.new_tensor([img_w, img_h, img_w, + img_h]).unsqueeze(0) + # convert bbox_pred from xywh, normalized to xyxy, unnormalized + bbox_pred = bbox_cxcywh_to_xyxy(bbox_pred) + bbox_pred = bbox_pred * factor + + pred_instances = InstanceData(scores=cls_score, bboxes=bbox_pred) + + # assigner and sampler + # AlignDETR: Get `k` of current layer. + layer_index = img_meta['layer_index'] + num_gt_repeat = self.all_layers_num_gt_repeat[layer_index] + assign_result = self.assigner.assign( + pred_instances=pred_instances, + gt_instances=gt_instances, + img_meta=img_meta, + k=num_gt_repeat) + + gt_bboxes = gt_instances.bboxes + gt_labels = gt_instances.labels + pos_inds = torch.nonzero( + assign_result.gt_inds > 0, as_tuple=False).squeeze(-1).unique() + neg_inds = torch.nonzero( + assign_result.gt_inds == 0, as_tuple=False).squeeze(-1).unique() + pos_assigned_gt_inds = assign_result.gt_inds[pos_inds] - 1 + pos_gt_bboxes = gt_bboxes[pos_assigned_gt_inds.long(), :] + + # AlignDETR: Get label targets, label weights, and bbox weights. + target_results = self._get_align_detr_targets_single( + cls_score, + bbox_pred, + gt_labels, + pos_gt_bboxes, + pos_inds, + pos_assigned_gt_inds, + layer_index, + is_matching_queries=True) + + label_targets, label_weights, bbox_weights = target_results + + # bbox targets + bbox_targets = torch.zeros_like(bbox_pred, dtype=gt_bboxes.dtype) + + # DETR regress the relative position of boxes (cxcywh) in the image. + # Thus the learning target should be normalized by the image size, also + # the box format should be converted from defaultly x1y1x2y2 to cxcywh. + pos_gt_bboxes_normalized = pos_gt_bboxes / factor + pos_gt_bboxes_targets = bbox_xyxy_to_cxcywh(pos_gt_bboxes_normalized) + bbox_targets[pos_inds] = pos_gt_bboxes_targets + return (label_targets, label_weights, bbox_targets, bbox_weights, + pos_inds, neg_inds) + + def _loss_dn_single(self, dn_cls_scores: KeysRecorder, + dn_bbox_preds: Tensor, + batch_gt_instances: InstanceList, + batch_img_metas: List[dict], + dn_meta: Dict[str, int]) -> Tuple[Tensor]: + """Denoising loss for outputs from a single decoder layer. + AlignDETR: This method is based on `DINOHead._loss_dn_single`. + + Args: + dn_cls_scores (KeysRecorder): Classification scores of a single + decoder layer in denoising part, has shape (bs, + num_denoising_queries, cls_out_channels). + dn_bbox_preds (Tensor): Regression outputs of a single decoder + layer in denoising part. Each is a 4D-tensor with normalized + coordinate format (cx, cy, w, h) and has shape + (bs, num_denoising_queries, 4). + batch_gt_instances (list[:obj:`InstanceData`]): Batch of + gt_instance. It usually includes ``bboxes`` and ``labels`` + attributes. + batch_img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + dn_meta (Dict[str, int]): The dictionary saves information about + group collation, including 'num_denoising_queries' and + 'num_denoising_groups'. It will be used for split outputs of + denoising and matching parts and loss calculation. + + Returns: + Tuple[Tensor]: A tuple including `loss_cls`, `loss_box` and + `loss_iou`. + """ + # AlignDETR: Get dn_cls_scores tensor. + dn_cls_scores = dn_cls_scores.obj + + # AlignDETR: Add layer outputs to meta info because they are not + # variables of method `_get_dn_targets_single`. + for image_index, img_meta in enumerate(batch_img_metas): + img_meta['dn_cls_score'] = dn_cls_scores[image_index] + img_meta['dn_bbox_pred'] = dn_bbox_preds[image_index] + + results = super()._loss_dn_single(dn_cls_scores, dn_bbox_preds, + batch_gt_instances, batch_img_metas, + dn_meta) + return results + + def _get_dn_targets_single(self, gt_instances: InstanceData, + img_meta: dict, dn_meta: Dict[str, + int]) -> tuple: + """Get targets in denoising part for one image. + AlignDETR: This method is based on + `DINOHead._get_dn_targets_single`. + and 1) Added passing `dn_cls_score`, `dn_bbox_pred` to this + method; 2) Modified the way to get targets. + Args: + dn_cls_score (Tensor): Box score logits from a single decoder + layer in denoising part for one image, has shape + [num_denoising_queries, cls_out_channels]. + dn_bbox_pred (Tensor): Sigmoid outputs from a single decoder + layer in denoising part for one image, with + normalized coordinate (cx, cy, w, h) and shape + [num_denoising_queries, 4]. + gt_instances (:obj:`InstanceData`): Ground truth of instance + annotations. It should includes ``bboxes`` and ``labels`` + attributes. + img_meta (dict): Meta information for one image. + dn_meta (Dict[str, int]): The dictionary saves information about + group collation, including 'num_denoising_queries' and + 'num_denoising_groups'. It will be used for split outputs of + denoising and matching parts and loss calculation. + + Returns: + tuple[Tensor]: a tuple containing the following for one image. + + - labels (Tensor): Labels of each image. + - label_weights (Tensor]): Label weights of each image. + - bbox_targets (Tensor): BBox targets of each image. + - bbox_weights (Tensor): BBox weights of each image. + - pos_inds (Tensor): Sampled positive indices for each image. + - neg_inds (Tensor): Sampled negative indices for each image. + """ + gt_bboxes = gt_instances.bboxes + gt_labels = gt_instances.labels + num_groups = dn_meta['num_denoising_groups'] + num_denoising_queries = dn_meta['num_denoising_queries'] + num_queries_each_group = int(num_denoising_queries / num_groups) + device = gt_bboxes.device + + if len(gt_labels) > 0: + t = torch.arange(len(gt_labels), dtype=torch.long, device=device) + t = t.unsqueeze(0).repeat(num_groups, 1) + pos_assigned_gt_inds = t.flatten() + pos_inds = torch.arange( + num_groups, dtype=torch.long, device=device) + pos_inds = pos_inds.unsqueeze(1) * num_queries_each_group + t + pos_inds = pos_inds.flatten() + else: + pos_inds = pos_assigned_gt_inds = \ + gt_bboxes.new_tensor([], dtype=torch.long) + + neg_inds = pos_inds + num_queries_each_group // 2 + + # AlignDETR: Get meta info and layer outputs. + img_h, img_w = img_meta['img_shape'] + dn_cls_score = img_meta['dn_cls_score'] + dn_bbox_pred = img_meta['dn_bbox_pred'] + factor = dn_bbox_pred.new_tensor([img_w, img_h, img_w, + img_h]).unsqueeze(0) + + # AlignDETR: Convert dn_bbox_pred from xywh, normalized to xyxy, + # unnormalized. + dn_bbox_pred = bbox_cxcywh_to_xyxy(dn_bbox_pred) + dn_bbox_pred = dn_bbox_pred * factor + + # AlignDETR: Get label targets, label weights, and bbox weights. + target_results = self._get_align_detr_targets_single( + dn_cls_score, dn_bbox_pred, gt_labels, + gt_bboxes.repeat([num_groups, 1]), pos_inds, pos_assigned_gt_inds) + + label_targets, label_weights, bbox_weights = target_results + + # bbox targets + bbox_targets = torch.zeros(num_denoising_queries, 4, device=device) + + # DETR regress the relative position of boxes (cxcywh) in the image. + # Thus the learning target should be normalized by the image size, also + # the box format should be converted from defaultly x1y1x2y2 to cxcywh. + gt_bboxes_normalized = gt_bboxes / factor + gt_bboxes_targets = bbox_xyxy_to_cxcywh(gt_bboxes_normalized) + bbox_targets[pos_inds] = gt_bboxes_targets.repeat([num_groups, 1]) + + return (label_targets, label_weights, bbox_targets, bbox_weights, + pos_inds, neg_inds) + + def _get_align_detr_targets_single(self, + cls_score: Tensor, + bbox_pred: Tensor, + gt_labels: Tensor, + pos_gt_bboxes: Tensor, + pos_inds: Tensor, + pos_assigned_gt_inds: Tensor, + layer_index: int = -1, + is_matching_queries: bool = False): + '''AlignDETR: Get label targets, label weights, and bbox weights based + on `t`, the weighted geometric average of the confident score and + the IoU score, to align classification and regression scores. + + Args: + cls_score (Tensor): Box score logits from the last encoder layer + or a single decoder layer for one image. Shape + [num_queries or num_denoising_queries, cls_out_channels]. + bbox_pred (Tensor): Sigmoid outputs from the last encoder layer + or a single decoder layer for one image, with unnormalized + coordinate (x, y, x, y) and shape + [num_queries or num_denoising_queries, 4]. + gt_labels (Tensor): Ground truth classification labels for one + image, has shape [num_gt]. + pos_gt_bboxes (Tensor): Positive ground truth bboxes for one + image, with unnormalized coordinate (x, y, x, y) and shape + [num_positive, 4]. + pos_inds (Tensor): Positive prediction box indices, has shape + [num_positive]. + pos_assigned_gt_inds Tensor: Positive ground truth box indices, + has shape [num_positive]. + layer_index (int): decoder layer index for the outputs. Defaults + to `-1`. + is_matching_queries (bool): The outputs are from matching + queries or denoising queries. Defaults to `False`. + + Returns: + tuple[Tensor]: a tuple containing the following for one image. + + - label_targets (Tensor): Labels of one image. Shape + [num_queries or num_denoising_queries, cls_out_channels]. + - label_weights (Tensor): Label weights of one image. Shape + [num_queries or num_denoising_queries, cls_out_channels]. + - bbox_weights (Tensor): BBox weights of one image. Shape + [num_queries or num_denoising_queries, 4]. + ''' + + # Classification loss + # = 1 * BCE(prob, t * rank_weights) for positive sample; + # = prob**gamma * BCE(prob, 0) for negative sample. + # That is, + # label_targets = 0 for negative sample; + # = t * rank_weights for positive sample. + # label_weights = pred**gamma for negative sample; + # = 1 for positive sample. + cls_prob = cls_score.sigmoid() + label_targets = torch.zeros_like( + cls_score, device=pos_gt_bboxes.device) + label_weights = cls_prob**self.gamma + + bbox_weights = torch.zeros_like(bbox_pred, dtype=pos_gt_bboxes.dtype) + + if len(pos_inds) == 0: + return label_targets, label_weights, bbox_weights + + pos_cls_score_inds = (pos_inds, gt_labels[pos_assigned_gt_inds]) + iou_scores = bbox_overlaps( + bbox_pred[pos_inds], pos_gt_bboxes, is_aligned=True) + + # t (Tensor): The weighted geometric average of the confident score + # and the IoU score, to align classification and regression scores. + # Shape [num_positive]. + t = ( + cls_prob[pos_cls_score_inds]**self.alpha * + iou_scores**(1 - self.alpha)) + t = torch.clamp(t, 0.01).detach() + + # Calculate rank_weights for matching queries. + if is_matching_queries: + # rank_weights (Tensor): Weights of each group of predictions + # assigned to the same positive gt bbox. Shape [num_positive]. + rank_weights = torch.zeros_like(t, dtype=self.weight_table.dtype) + + assert 0 <= layer_index < len(self.weight_table), layer_index + rank_to_weight = self.weight_table[layer_index].to( + rank_weights.device) + unique_gt_inds = torch.unique(pos_assigned_gt_inds) + + # For each positive gt bbox, get all predictions assigned to it, + # then calculate rank weights for this group of predictions. + for gt_index in unique_gt_inds: + pred_group_cond = pos_assigned_gt_inds == gt_index + # Weights are based on their rank sorted by t in the group. + pred_group = t[pred_group_cond] + indices = pred_group.sort(descending=True)[1] + group_weights = torch.zeros_like( + indices, dtype=self.weight_table.dtype) + group_weights[indices] = rank_to_weight[:len(indices)] + rank_weights[pred_group_cond] = group_weights + + t = t * rank_weights + pos_bbox_weights = rank_weights.unsqueeze(-1).repeat( + 1, bbox_pred.size(-1)) + bbox_weights[pos_inds] = pos_bbox_weights + else: + bbox_weights[pos_inds] = 1.0 + + label_targets[pos_cls_score_inds] = t + label_weights[pos_cls_score_inds] = 1.0 + + return label_targets, label_weights, bbox_weights diff --git a/projects/AlignDETR/align_detr/mixed_hungarian_assigner.py b/projects/AlignDETR/align_detr/mixed_hungarian_assigner.py new file mode 100644 index 00000000000..cc31b5e6aa6 --- /dev/null +++ b/projects/AlignDETR/align_detr/mixed_hungarian_assigner.py @@ -0,0 +1,162 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from typing import List, Optional, Union + +import torch +from mmengine import ConfigDict +from mmengine.structures import InstanceData +from scipy.optimize import linear_sum_assignment +from torch import Tensor + +from mmdet.models.task_modules import AssignResult, BaseAssigner +from mmdet.registry import TASK_UTILS + + +@TASK_UTILS.register_module() +class MixedHungarianAssigner(BaseAssigner): + """Computes 1-to-k matching between ground truth and predictions. + + This class computes an assignment between the targets and the predictions + based on the costs. The costs are weighted sum of some components. + For DETR the costs are weighted sum of classification cost, regression L1 + cost and regression iou cost. The targets don't include the no_object, so + generally there are more predictions than targets. After the 1-to-k + gt-pred matching, the un-matched are treated as backgrounds. Thus + each query prediction will be assigned with `0` or a positive integer + indicating the ground truth index: + + - 0: negative sample, no assigned gt + - positive integer: positive sample, index (1-based) of assigned gt + + Args: + match_costs (:obj:`ConfigDict` or dict or \ + List[Union[:obj:`ConfigDict`, dict]]): Match cost configs. + """ + + def __init__( + self, match_costs: Union[List[Union[dict, ConfigDict]], dict, + ConfigDict] + ) -> None: + + if isinstance(match_costs, dict): + match_costs = [match_costs] + elif isinstance(match_costs, list): + assert len(match_costs) > 0, \ + 'match_costs must not be a empty list.' + + self.match_costs = [ + TASK_UTILS.build(match_cost) for match_cost in match_costs + ] + + def assign(self, + pred_instances: InstanceData, + gt_instances: InstanceData, + img_meta: Optional[dict] = None, + k: int = 1, + **kwargs) -> AssignResult: + """Computes 1-to-k gt-pred matching based on the weighted costs. + + This method assign each query prediction to a ground truth or + background. The `assigned_gt_inds` with -1 means don't care, + 0 means negative sample, and positive number is the index (1-based) + of assigned gt. + The assignment is done in the following steps, the order matters. + + 1. Assign every prediction to -1. + 2. Compute the weighted costs, each cost has shape + (num_preds, num_gts). + 3. Update k according to num_preds and num_gts, then repeat + costs k times to shape: (num_preds, k * num_gts), so that each + gt will match k predictions. + 4. Do Hungarian matching on CPU based on the costs. + 5. Assign all to 0 (background) first, then for each matched pair + between predictions and gts, treat this prediction as foreground + and assign the corresponding gt index (plus 1) to it. + + Args: + pred_instances (:obj:`InstanceData`): Instances of model + predictions. It includes ``priors``, and the priors can + be anchors or points, or the bboxes predicted by the + previous stage, has shape (n, 4). The bboxes predicted by + the current model or stage will be named ``bboxes``, + ``labels``, and ``scores``, the same as the ``InstanceData`` + in other places. It may includes ``masks``, with shape + (n, h, w) or (n, l). + gt_instances (:obj:`InstanceData`): Ground truth of instance + annotations. It usually includes ``bboxes``, with shape (k, 4), + ``labels``, with shape (k, ) and ``masks``, with shape + (k, h, w) or (k, l). + img_meta (dict): Image information for one image. + + Returns: + :obj:`AssignResult`: The assigned result. + """ + assert isinstance(gt_instances.labels, Tensor) + num_gts, num_preds = len(gt_instances), len(pred_instances) + gt_labels = gt_instances.labels + device = gt_labels.device + + # 1. Assign -1 by default. + assigned_gt_inds = torch.full((num_preds, ), + -1, + dtype=torch.long, + device=device) + assigned_labels = torch.full((num_preds, ), + -1, + dtype=torch.long, + device=device) + + if num_gts == 0 or num_preds == 0: + # No ground truth or boxes, return empty assignment. + if num_gts == 0: + # No ground truth, assign all to background. + assigned_gt_inds[:] = 0 + return AssignResult( + num_gts=num_gts, + gt_inds=assigned_gt_inds, + max_overlaps=None, + labels=assigned_labels) + + # 2. Compute weighted costs. + cost_list = [] + for match_cost in self.match_costs: + cost = match_cost( + pred_instances=pred_instances, + gt_instances=gt_instances, + img_meta=img_meta) + cost_list.append(cost) + cost = torch.stack(cost_list).sum(dim=0) + + # 3. Update k according to num_preds and num_gts, then + # repeat the ground truth k times to perform 1-to-k gt-pred + # matching. For example, if num_preds = 900, num_gts = 3, then + # there are only 3 gt-pred pairs in sum for 1-1 matching. + # However, for 1-k gt-pred matching, if k = 4, then each + # gt is assigned 4 unique predictions, so there would be 12 + # gt-pred pairs in sum. + k = max(1, min(k, num_preds // num_gts)) + cost = cost.repeat(1, k) + + # 4. Do Hungarian matching on CPU using linear_sum_assignment. + cost = cost.detach().cpu() + if linear_sum_assignment is None: + raise ImportError('Please run "pip install scipy" ' + 'to install scipy first.') + + matched_row_inds, matched_col_inds = linear_sum_assignment(cost) + matched_row_inds = torch.from_numpy(matched_row_inds).to(device) + matched_col_inds = torch.from_numpy(matched_col_inds).to(device) + + matched_col_inds = matched_col_inds % num_gts + # 5. Assign backgrounds and foregrounds. + # Assign all indices to backgrounds first. + assigned_gt_inds[:] = 0 + # Assign foregrounds based on matching results. + assigned_gt_inds[matched_row_inds] = matched_col_inds + 1 + assigned_labels[matched_row_inds] = gt_labels[matched_col_inds] + assign_result = AssignResult( + num_gts=k * num_gts, + gt_inds=assigned_gt_inds, + max_overlaps=None, + labels=assigned_labels) + + return assign_result diff --git a/projects/AlignDETR/align_detr/utils.py b/projects/AlignDETR/align_detr/utils.py new file mode 100644 index 00000000000..5a3c17ec5da --- /dev/null +++ b/projects/AlignDETR/align_detr/utils.py @@ -0,0 +1,34 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from typing import Any, List, Optional + + +class KeysRecorder: + """Wrap object to record its `__getitem__` keys in the history. + + Args: + obj (object): Any object that supports `__getitem__`. + keys (List): List of keys already recorded. Default to None. + """ + + def __init__(self, obj: Any, keys: Optional[List[Any]] = None) -> None: + self.obj = obj + + if keys is None: + keys = [] + self.keys = keys + + def __getitem__(self, key: Any) -> 'KeysRecorder': + """Wrap method `__getitem__` to record its keys. + + Args: + key: Key that is passed to the object. + + Returns: + result (KeysRecorder): KeysRecorder instance that wraps sub_obj. + """ + sub_obj = self.obj.__getitem__(key) + keys = self.keys.copy() + keys.append(key) + # Create a KeysRecorder instance from the sub_obj. + result = KeysRecorder(sub_obj, keys) + return result diff --git a/projects/AlignDETR/configs/align_detr-4scale_r50_8xb2-12e_coco.py b/projects/AlignDETR/configs/align_detr-4scale_r50_8xb2-12e_coco.py new file mode 100644 index 00000000000..0fe069905e0 --- /dev/null +++ b/projects/AlignDETR/configs/align_detr-4scale_r50_8xb2-12e_coco.py @@ -0,0 +1,185 @@ +_base_ = [ + '../../../configs/_base_/datasets/coco_detection.py', + '../../../configs/_base_/default_runtime.py' +] +custom_imports = dict( + imports=['projects.AlignDETR.align_detr'], allow_failed_imports=False) + +model = dict( + type='DINO', + num_queries=900, # num_matching_queries + with_box_refine=True, + as_two_stage=True, + data_preprocessor=dict( + type='DetDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True, + pad_size_divisor=1), + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(1, 2, 3), + # AlignDETR: Only freeze stem. + frozen_stages=0, + norm_cfg=dict(type='FrozenBN', requires_grad=False), + norm_eval=True, + style='pytorch', + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50')), + neck=dict( + type='ChannelMapper', + in_channels=[512, 1024, 2048], + kernel_size=1, + out_channels=256, + # AlignDETR: Add conv bias. + bias=True, + act_cfg=None, + norm_cfg=dict(type='GN', num_groups=32), + num_outs=4), + encoder=dict( + num_layers=6, + layer_cfg=dict( + self_attn_cfg=dict(embed_dims=256, num_levels=4, + dropout=0.0), # 0.1 for DeformDETR + ffn_cfg=dict( + embed_dims=256, + feedforward_channels=2048, # 1024 for DeformDETR + ffn_drop=0.0))), # 0.1 for DeformDETR + decoder=dict( + num_layers=6, + return_intermediate=True, + layer_cfg=dict( + self_attn_cfg=dict(embed_dims=256, num_heads=8, + dropout=0.0), # 0.1 for DeformDETR + cross_attn_cfg=dict(embed_dims=256, num_levels=4, + dropout=0.0), # 0.1 for DeformDETR + ffn_cfg=dict( + embed_dims=256, + feedforward_channels=2048, # 1024 for DeformDETR + ffn_drop=0.0)), # 0.1 for DeformDETR + post_norm_cfg=None), + positional_encoding=dict( + num_feats=128, + normalize=True, + # AlignDETR: Set offset and temperature the same as DeformDETR. + offset=-0.5, # -0.5 for DeformDETR + temperature=10000), # 10000 for DeformDETR + bbox_head=dict( + type='AlignDETRHead', + # AlignDETR: First 6 elements of `all_layers_num_gt_repeat` are for + # decoder layers' outputs. The last element is for encoder layer. + all_layers_num_gt_repeat=[2, 2, 2, 2, 2, 1, 2], + alpha=0.25, + gamma=2.0, + tau=1.5, + num_classes=80, + sync_cls_avg_factor=True, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, + loss_weight=1.0), # 2.0 in DeformDETR + loss_bbox=dict(type='L1Loss', loss_weight=5.0), + loss_iou=dict(type='GIoULoss', loss_weight=2.0)), + dn_cfg=dict( # TODO: Move to model.train_cfg ? + label_noise_scale=0.5, + box_noise_scale=1.0, # 0.4 for DN-DETR + group_cfg=dict(dynamic=True, num_groups=None, + num_dn_queries=100)), # TODO: half num_dn_queries + # training and testing settings + train_cfg=dict( + assigner=dict( + type='MixedHungarianAssigner', + match_costs=[ + dict(type='FocalLossCost', weight=2.0), + dict(type='BBoxL1Cost', weight=5.0, box_format='xywh'), + dict(type='IoUCost', iou_mode='giou', weight=2.0) + ])), + test_cfg=dict(max_per_img=300)) # 100 for DeformDETR + +# train_pipeline, NOTE the img_scale and the Pad's size_divisor is different +# from the default setting in mmdet. +train_pipeline = [ + dict(type='LoadImageFromFile', backend_args=_base_.backend_args), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='RandomFlip', prob=0.5), + dict( + type='RandomChoice', + transforms=[ + [ + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ], + [ + dict( + type='RandomChoiceResize', + # The radio of all image in train dataset < 7 + # follow the original implement + scales=[(400, 4200), (500, 4200), (600, 4200)], + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=(384, 600), + allow_negative_crop=True), + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ] + ]), + dict(type='PackDetInputs') +] +train_dataloader = dict( + dataset=dict( + # AlignDETR: Filter empty gt. + filter_cfg=dict(filter_empty_gt=True), + pipeline=train_pipeline)) + +# optimizer +optim_wrapper = dict( + type='OptimWrapper', + optimizer=dict( + type='AdamW', + lr=0.0001, # 0.0002 for DeformDETR + weight_decay=0.0001), + clip_grad=dict(max_norm=0.1, norm_type=2), + paramwise_cfg=dict( + custom_keys={'backbone': dict(lr_mult=0.1)}, + # AlignDETR: No norm decay. + norm_decay_mult=0.0) +) # custom_keys contains sampling_offsets and reference_points in DeformDETR # noqa + +# learning policy +max_epochs = 12 +train_cfg = dict( + type='EpochBasedTrainLoop', max_epochs=max_epochs, val_interval=1) + +val_cfg = dict(type='ValLoop') +test_cfg = dict(type='TestLoop') + +param_scheduler = [ + dict( + type='LinearLR', + start_factor=0.0001, + by_epoch=False, + begin=0, + end=2000), + dict( + type='MultiStepLR', + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[11], + gamma=0.1) +] + +# NOTE: `auto_scale_lr` is for automatically scaling LR, +# USER SHOULD NOT CHANGE ITS VALUES. +# base_batch_size = (8 GPUs) x (2 samples per GPU) +auto_scale_lr = dict(base_batch_size=16) diff --git a/projects/AlignDETR/configs/align_detr-4scale_r50_8xb2-24e_coco.py b/projects/AlignDETR/configs/align_detr-4scale_r50_8xb2-24e_coco.py new file mode 100644 index 00000000000..f62114ce0a8 --- /dev/null +++ b/projects/AlignDETR/configs/align_detr-4scale_r50_8xb2-24e_coco.py @@ -0,0 +1,19 @@ +_base_ = './align_detr-4scale_r50_8xb2-12e_coco.py' +max_epochs = 24 +train_cfg = dict( + type='EpochBasedTrainLoop', max_epochs=max_epochs, val_interval=1) +param_scheduler = [ + dict( + type='LinearLR', + start_factor=0.0001, + by_epoch=False, + begin=0, + end=2000), + dict( + type='MultiStepLR', + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[20], + gamma=0.1) +] From 658c19eb747feab3cf255e947b4fd00fc479ce44 Mon Sep 17 00:00:00 2001 From: Wang Xinjiang Date: Tue, 26 Sep 2023 11:25:38 +0800 Subject: [PATCH 50/63] Support GroundingDINO finetune (#10954) Co-authored-by: huanghaian --- configs/glip/README.md | 17 + configs/grounding_dino/README.md | 34 +- ...grounding_dino_r50_scratch_8xb2_1x_coco.py | 208 ++++++++ ...ding_dino_swin-b_finetune_16xb2_1x_coco.py | 17 + ...ding_dino_swin-t_finetune_16xb2_1x_coco.py | 204 ++++++++ ...dino_swin-t_pretrain_obj365_goldg_cap4m.py | 2 +- configs/grounding_dino/metafile.yml | 31 +- .../dense_heads/deformable_detr_head.py | 3 +- .../models/dense_heads/grounding_dino_head.py | 466 +++++++++++++++++- mmdet/models/detectors/glip.py | 10 +- mmdet/models/detectors/grounding_dino.py | 91 +++- mmdet/models/language_models/bert.py | 15 +- .../transformer/deformable_detr_layers.py | 9 +- .../models/layers/transformer/detr_layers.py | 9 +- .../transformer/grounding_dino_layers.py | 15 + .../models/task_modules/assigners/__init__.py | 12 +- .../task_modules/assigners/match_cost.py | 51 ++ requirements/multimodal.txt | 1 + requirements/optional.txt | 1 + 19 files changed, 1145 insertions(+), 51 deletions(-) create mode 100644 configs/grounding_dino/grounding_dino_r50_scratch_8xb2_1x_coco.py create mode 100644 configs/grounding_dino/grounding_dino_swin-b_finetune_16xb2_1x_coco.py create mode 100644 configs/grounding_dino/grounding_dino_swin-t_finetune_16xb2_1x_coco.py diff --git a/configs/glip/README.md b/configs/glip/README.md index bafcef9130b..8f571437933 100644 --- a/configs/glip/README.md +++ b/configs/glip/README.md @@ -39,6 +39,23 @@ configs/glip/glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365.py \ +## NOTE + +GLIP utilizes BERT as the language model, which requires access to https://huggingface.co/. If you encounter connection errors due to network access, you can download the required files on a computer with internet access and save them locally. Finally, modify the `lang_model_name` field in the config to the local path. Please refer to the following code: + +```python +from transformers import BertConfig, BertModel +from transformers import AutoTokenizer + +config = BertConfig.from_pretrained("bert-base-uncased") +model = BertModel.from_pretrained("bert-base-uncased", add_pooling_layer=False, config=config) +tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased") + +config.save_pretrained("your path/bert-base-uncased") +model.save_pretrained("your path/bert-base-uncased") +tokenizer.save_pretrained("your path/bert-base-uncased") +``` + ## Results and Models | Model | Zero-shot or Funetune | COCO mAP | Official COCO mAP | Pre-Train Data | Config | Download | diff --git a/configs/grounding_dino/README.md b/configs/grounding_dino/README.md index 4addc4f4d6d..92723deb116 100644 --- a/configs/grounding_dino/README.md +++ b/configs/grounding_dino/README.md @@ -1,6 +1,6 @@ # Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection -[GLIP: Grounded Language-Image Pre-training](https://arxiv.org/abs/2112.03857) +[Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection](https://arxiv.org/abs/2303.05499) @@ -24,6 +24,25 @@ pip install -r requirements/multimodal.txt mim install mmdet[multimodal] ``` +## NOTE + +Grounding DINO utilizes BERT as the language model, which requires access to https://huggingface.co/. If you encounter connection errors due to network access, you can download the required files on a computer with internet access and save them locally. Finally, modify the `lang_model_name` field in the config to the local path. Please refer to the following code: + +```python +from transformers import BertConfig, BertModel +from transformers import AutoTokenizer + +config = BertConfig.from_pretrained("bert-base-uncased") +model = BertModel.from_pretrained("bert-base-uncased", add_pooling_layer=False, config=config) +tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased") + +config.save_pretrained("your path/bert-base-uncased") +model.save_pretrained("your path/bert-base-uncased") +tokenizer.save_pretrained("your path/bert-base-uncased") +``` + +## Inference + ``` cd $MMDETROOT @@ -42,11 +61,16 @@ python demo/image_demo.py \ ## Results and Models -| Model | backbone | COCO mAP | Pre-Train Data | Config | Download | -| :--------------: | :------: | :------: | :----------------------------------------------: | :------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------: | -| Grounding DINO-T | Swin-T | 48.5 | O365,GoldG,Cap4M | [config](grounding_dino_swin-t_pretrain_obj365_goldg_cap4m.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/groundingdino_swint_ogc_mmdet-822d7e9d.pth) | -| Grounding DINO-B | Swin-B | 56.9 | COCO,O365,GoldG,Cap4M,OpenImage,ODinW-35,RefCOCO | [config](grounding_dino_swin-b_pretrain_mixeddata.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/groundingdino_swinb_cogcoor_mmdet-55949c9c.pth) | +| Model | Backbone | Style | COCO mAP | Official COCO mAP | Pre-Train Data | Config | Download | +| :----------------: | :------: | :-------: | :--------: | :---------------: | :----------------------------------------------: | :------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| Grounding DINO-T | Swin-T | Zero-shot | 48.5 | 48.4 | O365,GoldG,Cap4M | [config](grounding_dino_swin-t_pretrain_obj365_goldg_cap4m.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/groundingdino_swint_ogc_mmdet-822d7e9d.pth) | +| Grounding DINO-T | Swin-T | Funetune | 58.1(+0.9) | 57.2 | O365,GoldG,Cap4M | [config](grounding_dino_swin-t_finetune_16xb2_1x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_swin-t_finetune_16xb2_1x_coco/grounding_dino_swin-t_finetune_16xb2_1x_coco_20230921_152544-5f234b20.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_swin-t_finetune_16xb2_1x_coco/grounding_dino_swin-t_finetune_16xb2_1x_coco_20230921_152544.log.json) | +| Grounding DINO-B | Swin-B | Zero-shot | 56.9 | 56.7 | COCO,O365,GoldG,Cap4M,OpenImage,ODinW-35,RefCOCO | [config](grounding_dino_swin-b_pretrain_mixeddata.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/groundingdino_swinb_cogcoor_mmdet-55949c9c.pth) | +| Grounding DINO-B | Swin-B | Funetune | 59.7 | | COCO,O365,GoldG,Cap4M,OpenImage,ODinW-35,RefCOCO | [config](grounding_dino_swin-b_finetune_16xb2_1x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_swin-b_finetune_16xb2_1x_coco/grounding_dino_swin-b_finetune_16xb2_1x_coco_20230921_153201-f219e0c0.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_swin-b_finetune_16xb2_1x_coco/grounding_dino_swin-b_finetune_16xb2_1x_coco_20230921_153201.log.json) | +| Grounding DINO-R50 | R50 | scratch | 48.9(+0.8) | 48.1 | | [config](grounding_dino_r50_scratch_8xb2_1x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_r50_scratch_8xb2_1x_coco/grounding_dino_r50_scratch_1x_coco-fe0002f2.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_r50_scratch_8xb2_1x_coco/20230922_114218.json) | Note: 1. The weights corresponding to the zero-shot model are adopted from the official weights and converted using the [script](../../tools/model_converters/groundingdino_to_mmdet.py). We have not retrained the model for the time being. +2. Funetune refers to fine-tuning on the COCO 2017 dataset. The R50 model is trained using 8 NVIDIA GeForce 3090 GPUs, while the remaining models are trained using 16 NVIDIA GeForce 3090 GPUs. The GPU memory usage is approximately 8.5GB. +3. Our performance is higher than the official model due to two reasons: we modified the initialization strategy and introduced a log scaler. diff --git a/configs/grounding_dino/grounding_dino_r50_scratch_8xb2_1x_coco.py b/configs/grounding_dino/grounding_dino_r50_scratch_8xb2_1x_coco.py new file mode 100644 index 00000000000..623a29b87ad --- /dev/null +++ b/configs/grounding_dino/grounding_dino_r50_scratch_8xb2_1x_coco.py @@ -0,0 +1,208 @@ +_base_ = [ + '../_base_/datasets/coco_detection.py', + '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' +] +lang_model_name = 'bert-base-uncased' + +model = dict( + type='GroundingDINO', + num_queries=900, + with_box_refine=True, + as_two_stage=True, + data_preprocessor=dict( + type='DetDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True, + pad_mask=False, + ), + language_model=dict( + type='BertModel', + name=lang_model_name, + pad_to_max=False, + use_sub_sentence_represent=True, + special_tokens_list=['[CLS]', '[SEP]', '.', '?'], + add_pooling_layer=False, + ), + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=False), + norm_eval=True, + style='pytorch', + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50')), + neck=dict( + type='ChannelMapper', + in_channels=[512, 1024, 2048], + kernel_size=1, + out_channels=256, + act_cfg=None, + bias=True, + norm_cfg=dict(type='GN', num_groups=32), + num_outs=4), + encoder=dict( + num_layers=6, + num_cp=6, + # visual layer config + layer_cfg=dict( + self_attn_cfg=dict(embed_dims=256, num_levels=4, dropout=0.0), + ffn_cfg=dict( + embed_dims=256, feedforward_channels=2048, ffn_drop=0.0)), + # text layer config + text_layer_cfg=dict( + self_attn_cfg=dict(num_heads=4, embed_dims=256, dropout=0.0), + ffn_cfg=dict( + embed_dims=256, feedforward_channels=1024, ffn_drop=0.0)), + # fusion layer config + fusion_layer_cfg=dict( + v_dim=256, + l_dim=256, + embed_dim=1024, + num_heads=4, + init_values=1e-4), + ), + decoder=dict( + num_layers=6, + return_intermediate=True, + layer_cfg=dict( + # query self attention layer + self_attn_cfg=dict(embed_dims=256, num_heads=8, dropout=0.0), + # cross attention layer query to text + cross_attn_text_cfg=dict(embed_dims=256, num_heads=8, dropout=0.0), + # cross attention layer query to image + cross_attn_cfg=dict(embed_dims=256, num_heads=8, dropout=0.0), + ffn_cfg=dict( + embed_dims=256, feedforward_channels=2048, ffn_drop=0.0)), + post_norm_cfg=None), + positional_encoding=dict( + num_feats=128, normalize=True, offset=0.0, temperature=20), + bbox_head=dict( + type='GroundingDINOHead', + num_classes=80, + sync_cls_avg_factor=True, + contrastive_cfg=dict(max_text_len=256, log_scale='auto', bias=True), + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), # 2.0 in DeformDETR + loss_bbox=dict(type='L1Loss', loss_weight=5.0), + loss_iou=dict(type='GIoULoss', loss_weight=2.0)), + dn_cfg=dict( # TODO: Move to model.train_cfg ? + label_noise_scale=0.5, + box_noise_scale=1.0, # 0.4 for DN-DETR + group_cfg=dict(dynamic=True, num_groups=None, + num_dn_queries=100)), # TODO: half num_dn_queries + # training and testing settings + train_cfg=dict( + assigner=dict( + type='HungarianAssigner', + match_costs=[ + dict(type='BinaryFocalLossCost', weight=2.0), + dict(type='BBoxL1Cost', weight=5.0, box_format='xywh'), + dict(type='IoUCost', iou_mode='giou', weight=2.0) + ])), + test_cfg=dict(max_per_img=300)) + +# dataset settings +train_pipeline = [ + dict(type='LoadImageFromFile', backend_args=_base_.backend_args), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='RandomFlip', prob=0.5), + dict( + type='RandomChoice', + transforms=[ + [ + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ], + [ + dict( + type='RandomChoiceResize', + # The radio of all image in train dataset < 7 + # follow the original implement + scales=[(400, 4200), (500, 4200), (600, 4200)], + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=(384, 600), + allow_negative_crop=True), + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ] + ]), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor', 'flip', 'flip_direction', 'text', + 'custom_entities')) +] + +test_pipeline = [ + dict(type='LoadImageFromFile', backend_args=_base_.backend_args), + dict(type='FixScaleResize', scale=(800, 1333), keep_ratio=True), + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor', 'text', 'custom_entities')) +] + +train_dataloader = dict( + dataset=dict( + filter_cfg=dict(filter_empty_gt=False), + pipeline=train_pipeline, + return_classes=True)) +val_dataloader = dict( + dataset=dict(pipeline=test_pipeline, return_classes=True)) +test_dataloader = val_dataloader + +# We did not adopt the official 24e optimizer strategy +# because the results indicate that the current strategy is superior. +optim_wrapper = dict( + _delete_=True, + type='OptimWrapper', + optimizer=dict( + type='AdamW', + lr=0.0001, # 0.0002 for DeformDETR + weight_decay=0.0001), + clip_grad=dict(max_norm=0.1, norm_type=2), + paramwise_cfg=dict(custom_keys={ + 'absolute_pos_embed': dict(decay_mult=0.), + 'backbone': dict(lr_mult=0.1) + })) +# learning policy +max_epochs = 12 +train_cfg = dict( + type='EpochBasedTrainLoop', max_epochs=max_epochs, val_interval=1) + +val_cfg = dict(type='ValLoop') +test_cfg = dict(type='TestLoop') + +param_scheduler = [ + dict( + type='MultiStepLR', + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[11], + gamma=0.1) +] + +# NOTE: `auto_scale_lr` is for automatically scaling LR, +# USER SHOULD NOT CHANGE ITS VALUES. +# base_batch_size = (8 GPUs) x (2 samples per GPU) +auto_scale_lr = dict(base_batch_size=16) diff --git a/configs/grounding_dino/grounding_dino_swin-b_finetune_16xb2_1x_coco.py b/configs/grounding_dino/grounding_dino_swin-b_finetune_16xb2_1x_coco.py new file mode 100644 index 00000000000..3554ee245ff --- /dev/null +++ b/configs/grounding_dino/grounding_dino_swin-b_finetune_16xb2_1x_coco.py @@ -0,0 +1,17 @@ +_base_ = [ + './grounding_dino_swin-t_finetune_16xb2_1x_coco.py', +] + +load_from = 'https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/groundingdino_swinb_cogcoor_mmdet-55949c9c.pth' # noqa +model = dict( + type='GroundingDINO', + backbone=dict( + pretrain_img_size=384, + embed_dims=128, + depths=[2, 2, 18, 2], + num_heads=[4, 8, 16, 32], + window_size=12, + drop_path_rate=0.3, + patch_norm=True), + neck=dict(in_channels=[256, 512, 1024]), +) diff --git a/configs/grounding_dino/grounding_dino_swin-t_finetune_16xb2_1x_coco.py b/configs/grounding_dino/grounding_dino_swin-t_finetune_16xb2_1x_coco.py new file mode 100644 index 00000000000..0c6403ee66d --- /dev/null +++ b/configs/grounding_dino/grounding_dino_swin-t_finetune_16xb2_1x_coco.py @@ -0,0 +1,204 @@ +_base_ = [ + '../_base_/datasets/coco_detection.py', + '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' +] +load_from = 'https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/groundingdino_swint_ogc_mmdet-822d7e9d.pth' # noqa +lang_model_name = 'bert-base-uncased' + +model = dict( + type='GroundingDINO', + num_queries=900, + with_box_refine=True, + as_two_stage=True, + data_preprocessor=dict( + type='DetDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True, + pad_mask=False, + ), + language_model=dict( + type='BertModel', + name=lang_model_name, + pad_to_max=False, + use_sub_sentence_represent=True, + special_tokens_list=['[CLS]', '[SEP]', '.', '?'], + add_pooling_layer=False, + ), + backbone=dict( + type='SwinTransformer', + embed_dims=96, + depths=[2, 2, 6, 2], + num_heads=[3, 6, 12, 24], + window_size=7, + mlp_ratio=4, + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.2, + patch_norm=True, + out_indices=(1, 2, 3), + with_cp=True, + convert_weights=False), + neck=dict( + type='ChannelMapper', + in_channels=[192, 384, 768], + kernel_size=1, + out_channels=256, + act_cfg=None, + bias=True, + norm_cfg=dict(type='GN', num_groups=32), + num_outs=4), + encoder=dict( + num_layers=6, + num_cp=6, + # visual layer config + layer_cfg=dict( + self_attn_cfg=dict(embed_dims=256, num_levels=4, dropout=0.0), + ffn_cfg=dict( + embed_dims=256, feedforward_channels=2048, ffn_drop=0.0)), + # text layer config + text_layer_cfg=dict( + self_attn_cfg=dict(num_heads=4, embed_dims=256, dropout=0.0), + ffn_cfg=dict( + embed_dims=256, feedforward_channels=1024, ffn_drop=0.0)), + # fusion layer config + fusion_layer_cfg=dict( + v_dim=256, + l_dim=256, + embed_dim=1024, + num_heads=4, + init_values=1e-4), + ), + decoder=dict( + num_layers=6, + return_intermediate=True, + layer_cfg=dict( + # query self attention layer + self_attn_cfg=dict(embed_dims=256, num_heads=8, dropout=0.0), + # cross attention layer query to text + cross_attn_text_cfg=dict(embed_dims=256, num_heads=8, dropout=0.0), + # cross attention layer query to image + cross_attn_cfg=dict(embed_dims=256, num_heads=8, dropout=0.0), + ffn_cfg=dict( + embed_dims=256, feedforward_channels=2048, ffn_drop=0.0)), + post_norm_cfg=None), + positional_encoding=dict( + num_feats=128, normalize=True, offset=0.0, temperature=20), + bbox_head=dict( + type='GroundingDINOHead', + num_classes=80, + sync_cls_avg_factor=True, + contrastive_cfg=dict(max_text_len=256, log_scale=0.0, bias=False), + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), # 2.0 in DeformDETR + loss_bbox=dict(type='L1Loss', loss_weight=5.0), + loss_iou=dict(type='GIoULoss', loss_weight=2.0)), + dn_cfg=dict( # TODO: Move to model.train_cfg ? + label_noise_scale=0.5, + box_noise_scale=1.0, # 0.4 for DN-DETR + group_cfg=dict(dynamic=True, num_groups=None, + num_dn_queries=100)), # TODO: half num_dn_queries + # training and testing settings + train_cfg=dict( + assigner=dict( + type='HungarianAssigner', + match_costs=[ + dict(type='BinaryFocalLossCost', weight=2.0), + dict(type='BBoxL1Cost', weight=5.0, box_format='xywh'), + dict(type='IoUCost', iou_mode='giou', weight=2.0) + ])), + test_cfg=dict(max_per_img=300)) + +# dataset settings +train_pipeline = [ + dict(type='LoadImageFromFile', backend_args=_base_.backend_args), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='RandomFlip', prob=0.5), + dict( + type='RandomChoice', + transforms=[ + [ + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ], + [ + dict( + type='RandomChoiceResize', + # The radio of all image in train dataset < 7 + # follow the original implement + scales=[(400, 4200), (500, 4200), (600, 4200)], + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=(384, 600), + allow_negative_crop=True), + dict( + type='RandomChoiceResize', + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + keep_ratio=True) + ] + ]), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor', 'flip', 'flip_direction', 'text', + 'custom_entities')) +] + +test_pipeline = [ + dict(type='LoadImageFromFile', backend_args=_base_.backend_args), + dict(type='FixScaleResize', scale=(800, 1333), keep_ratio=True), + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor', 'text', 'custom_entities')) +] + +train_dataloader = dict( + dataset=dict( + filter_cfg=dict(filter_empty_gt=False), + pipeline=train_pipeline, + return_classes=True)) +val_dataloader = dict( + dataset=dict(pipeline=test_pipeline, return_classes=True)) +test_dataloader = val_dataloader + +optim_wrapper = dict( + _delete_=True, + type='OptimWrapper', + optimizer=dict(type='AdamW', lr=0.0001, weight_decay=0.0001), + clip_grad=dict(max_norm=0.1, norm_type=2), + paramwise_cfg=dict(custom_keys={ + 'absolute_pos_embed': dict(decay_mult=0.), + 'backbone': dict(lr_mult=0.1) + })) +# learning policy +max_epochs = 12 +param_scheduler = [ + dict( + type='MultiStepLR', + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[11], + gamma=0.1) +] + +# NOTE: `auto_scale_lr` is for automatically scaling LR, +# USER SHOULD NOT CHANGE ITS VALUES. +# base_batch_size = (16 GPUs) x (2 samples per GPU) +auto_scale_lr = dict(base_batch_size=32) diff --git a/configs/grounding_dino/grounding_dino_swin-t_pretrain_obj365_goldg_cap4m.py b/configs/grounding_dino/grounding_dino_swin-t_pretrain_obj365_goldg_cap4m.py index 41069e29035..1117cb06d39 100644 --- a/configs/grounding_dino/grounding_dino_swin-t_pretrain_obj365_goldg_cap4m.py +++ b/configs/grounding_dino/grounding_dino_swin-t_pretrain_obj365_goldg_cap4m.py @@ -89,7 +89,7 @@ type='GroundingDINOHead', num_classes=80, sync_cls_avg_factor=True, - max_text_len=256, + contrastive_cfg=dict(max_text_len=256), loss_cls=dict( type='FocalLoss', use_sigmoid=True, diff --git a/configs/grounding_dino/metafile.yml b/configs/grounding_dino/metafile.yml index 86a0858d690..dcb5ebf8284 100644 --- a/configs/grounding_dino/metafile.yml +++ b/configs/grounding_dino/metafile.yml @@ -6,7 +6,7 @@ Collections: - AdamW - Multi Scale Train - Gradient Clip - Training Resources: A100 GPUs + Training Resources: 3090 GPUs Architecture: - Swin Transformer - BERT @@ -30,7 +30,7 @@ Models: box AP: 48.5 Weights: https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/groundingdino_swint_ogc_mmdet-822d7e9d.pth - Name: grounding_dino_swin-b_pretrain_mixeddata - In Collection: GLIPGrounding DINO + In Collection: Grounding DINO Config: configs/grounding_dino/grounding_dino_swin-b_pretrain_mixeddata.py Results: - Task: Object Detection @@ -38,3 +38,30 @@ Models: Metrics: box AP: 56.9 Weights: https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/groundingdino_swinb_cogcoor_mmdet-55949c9c.pth + - Name: grounding_dino_swin-t_finetune_16xb2_1x_coco + In Collection: Grounding DINO + Config: configs/grounding_dino/grounding_dino_swin-t_finetune_16xb2_1x_coco.py + Results: + - Task: Object Detection + Dataset: COCO + Metrics: + box AP: 58.1 + Weights: https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_swin-t_finetune_16xb2_1x_coco/grounding_dino_swin-t_finetune_16xb2_1x_coco_20230921_152544-5f234b20.pth + - Name: grounding_dino_swin-b_finetune_16xb2_1x_coco + In Collection: Grounding DINO + Config: configs/grounding_dino/grounding_dino_swin-b_finetune_16xb2_1x_coco.py + Results: + - Task: Object Detection + Dataset: COCO + Metrics: + box AP: 59.7 + Weights: https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_swin-b_finetune_16xb2_1x_coco/grounding_dino_swin-b_finetune_16xb2_1x_coco_20230921_153201-f219e0c0.pth + - Name: grounding_dino_r50_scratch_8xb2_1x_coco + In Collection: Grounding DINO + Config: configs/grounding_dino/grounding_dino_r50_scratch_8xb2_1x_coco.py + Results: + - Task: Object Detection + Dataset: COCO + Metrics: + box AP: 48.9 + Weights: https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_r50_scratch_8xb2_1x_coco/grounding_dino_r50_scratch_1x_coco-fe0002f2.pth diff --git a/mmdet/models/dense_heads/deformable_detr_head.py b/mmdet/models/dense_heads/deformable_detr_head.py index 41dd2e9b76f..adedd4aa6b5 100644 --- a/mmdet/models/dense_heads/deformable_detr_head.py +++ b/mmdet/models/dense_heads/deformable_detr_head.py @@ -74,7 +74,8 @@ def init_weights(self) -> None: if self.loss_cls.use_sigmoid: bias_init = bias_init_with_prob(0.01) for m in self.cls_branches: - nn.init.constant_(m.bias, bias_init) + if hasattr(m, 'bias') and m.bias is not None: + nn.init.constant_(m.bias, bias_init) for m in self.reg_branches: constant_init(m[-1], 0, bias=0) nn.init.constant_(self.reg_branches[0][-1].bias.data[2:], -2.0) diff --git a/mmdet/models/dense_heads/grounding_dino_head.py b/mmdet/models/dense_heads/grounding_dino_head.py index d3ca2baf088..3aced626555 100644 --- a/mmdet/models/dense_heads/grounding_dino_head.py +++ b/mmdet/models/dense_heads/grounding_dino_head.py @@ -1,17 +1,20 @@ # Copyright (c) OpenMMLab. All rights reserved. import copy -from typing import Dict, List, Optional, Tuple +import math +from typing import Dict, List, Optional, Tuple, Union import torch import torch.nn as nn from mmcv.cnn import Linear +from mmengine.model import constant_init from mmengine.structures import InstanceData from torch import Tensor +from mmdet.models.losses import QualityFocalLoss from mmdet.registry import MODELS from mmdet.structures import SampleList -from mmdet.structures.bbox import bbox_cxcywh_to_xyxy -from mmdet.utils import InstanceList +from mmdet.structures.bbox import bbox_cxcywh_to_xyxy, bbox_xyxy_to_cxcywh +from mmdet.utils import InstanceList, reduce_mean from ..layers import inverse_sigmoid from .atss_vlfusion_head import convert_grounding_to_cls_scores from .dino_head import DINOHead @@ -22,11 +25,39 @@ class ContrastiveEmbed(nn.Module): Args: max_text_len (int, optional): Maximum length of text. + log_scale (Optional[Union[str, float]]): The initial value of a + learnable parameter to multiply with the similarity + matrix to normalize the output. Defaults to 0.0. + - If set to 'auto', the similarity matrix will be normalized by + a fixed value ``sqrt(d_c)`` where ``d_c`` is the channel number. + - If set to 'none' or ``None``, there is no normalization applied. + - If set to a float number, the similarity matrix will be multiplied + by ``exp(log_scale)``, where ``log_scale`` is learnable. + bias (bool, optional): Whether to add bias to the output. + If set to ``True``, a learnable bias that is initialized as -4.6 + will be added to the output. Useful when training from scratch. + Defaults to False. """ - def __init__(self, max_text_len=256): + def __init__(self, + max_text_len: int = 256, + log_scale: Optional[Union[str, float]] = None, + bias: bool = False): super().__init__() self.max_text_len = max_text_len + self.log_scale = log_scale + if isinstance(log_scale, float): + self.log_scale = nn.Parameter( + torch.Tensor([float(log_scale)]), requires_grad=True) + elif log_scale not in ['auto', 'none', None]: + raise ValueError(f'log_scale should be one of ' + f'"auto", "none", None, but got {log_scale}') + + self.bias = None + if bias: + bias_value = -math.log((1 - 0.01) / 0.01) + self.bias = nn.Parameter( + torch.Tensor([bias_value]), requires_grad=True) def forward(self, visual_feat: Tensor, text_feat: Tensor, text_token_mask: Tensor) -> Tensor: @@ -41,6 +72,13 @@ def forward(self, visual_feat: Tensor, text_feat: Tensor, Tensor: Classification score. """ res = visual_feat @ text_feat.transpose(-1, -2) + if isinstance(self.log_scale, nn.Parameter): + res = res * self.log_scale.exp() + elif self.log_scale == 'auto': + # NOTE: similar to the normalizer in self-attention + res = res / math.sqrt(visual_feat.shape[-1]) + if self.bias is not None: + res = res + self.bias res.masked_fill_(~text_token_mask[:, None, :], float('-inf')) new_res = torch.full((*res.shape[:-1], self.max_text_len), @@ -57,17 +95,18 @@ class GroundingDINOHead(DINOHead): Open-Set Object Detection. Args: - max_text_len (int, optional): Maximum length of text. + contrastive_cfg (dict, optional): Contrastive config that contains + keys like ``max_text_len``. Defaults to dict(max_text_len=256). """ - def __init__(self, max_text_len=256, **kwargs): - - self.max_text_len = max_text_len + def __init__(self, contrastive_cfg=dict(max_text_len=256), **kwargs): + self.contrastive_cfg = contrastive_cfg + self.max_text_len = contrastive_cfg.get('max_text_len', 256) super().__init__(**kwargs) def _init_layers(self) -> None: """Initialize classification branch and regression branch of head.""" - fc_cls = ContrastiveEmbed(self.max_text_len) + fc_cls = ContrastiveEmbed(**self.contrastive_cfg) reg_branch = [] for _ in range(self.num_reg_fcs): reg_branch.append(Linear(self.embed_dims, self.embed_dims)) @@ -84,11 +123,93 @@ def _init_layers(self) -> None: [reg_branch for _ in range(self.num_pred_layer)]) else: self.cls_branches = nn.ModuleList( - [fc_cls for _ in range(self.num_pred_layer)]) + [copy.deepcopy(fc_cls) for _ in range(self.num_pred_layer)]) self.reg_branches = nn.ModuleList([ copy.deepcopy(reg_branch) for _ in range(self.num_pred_layer) ]) + def init_weights(self) -> None: + """Initialize weights of the Deformable DETR head.""" + for m in self.reg_branches: + constant_init(m[-1], 0, bias=0) + nn.init.constant_(self.reg_branches[0][-1].bias.data[2:], -2.0) + if self.as_two_stage: + for m in self.reg_branches: + nn.init.constant_(m[-1].bias.data[2:], 0.0) + + def _get_targets_single(self, cls_score: Tensor, bbox_pred: Tensor, + gt_instances: InstanceData, + img_meta: dict) -> tuple: + """Compute regression and classification targets for one image. + + Outputs from a single decoder layer of a single feature level are used. + + Args: + cls_score (Tensor): Box score logits from a single decoder layer + for one image. Shape [num_queries, cls_out_channels]. + bbox_pred (Tensor): Sigmoid outputs from a single decoder layer + for one image, with normalized coordinate (cx, cy, w, h) and + shape [num_queries, 4]. + gt_instances (:obj:`InstanceData`): Ground truth of instance + annotations. It should includes ``bboxes`` and ``labels`` + attributes. + img_meta (dict): Meta information for one image. + + Returns: + tuple[Tensor]: a tuple containing the following for one image. + + - labels (Tensor): Labels of each image. + - label_weights (Tensor]): Label weights of each image. + - bbox_targets (Tensor): BBox targets of each image. + - bbox_weights (Tensor): BBox weights of each image. + - pos_inds (Tensor): Sampled positive indices for each image. + - neg_inds (Tensor): Sampled negative indices for each image. + """ + img_h, img_w = img_meta['img_shape'] + factor = bbox_pred.new_tensor([img_w, img_h, img_w, + img_h]).unsqueeze(0) + num_bboxes = bbox_pred.size(0) + # convert bbox_pred from xywh, normalized to xyxy, unnormalized + bbox_pred = bbox_cxcywh_to_xyxy(bbox_pred) + bbox_pred = bbox_pred * factor + + pred_instances = InstanceData(scores=cls_score, bboxes=bbox_pred) + # assigner and sampler + assign_result = self.assigner.assign( + pred_instances=pred_instances, + gt_instances=gt_instances, + img_meta=img_meta) + gt_bboxes = gt_instances.bboxes + + pos_inds = torch.nonzero( + assign_result.gt_inds > 0, as_tuple=False).squeeze(-1).unique() + neg_inds = torch.nonzero( + assign_result.gt_inds == 0, as_tuple=False).squeeze(-1).unique() + pos_assigned_gt_inds = assign_result.gt_inds[pos_inds] - 1 + pos_gt_bboxes = gt_bboxes[pos_assigned_gt_inds.long(), :] + + # Major changes. The labels are 0-1 binary labels for each bbox + # and text tokens. + labels = gt_bboxes.new_full((num_bboxes, self.max_text_len), + 0, + dtype=torch.float32) + labels[pos_inds] = gt_instances.positive_maps[pos_assigned_gt_inds] + label_weights = gt_bboxes.new_ones(num_bboxes) + + # bbox targets + bbox_targets = torch.zeros_like(bbox_pred, dtype=gt_bboxes.dtype) + bbox_weights = torch.zeros_like(bbox_pred, dtype=gt_bboxes.dtype) + bbox_weights[pos_inds] = 1.0 + + # DETR regress the relative position of boxes (cxcywh) in the image. + # Thus the learning target should be normalized by the image size, also + # the box format should be converted from defaultly x1y1x2y2 to cxcywh. + pos_gt_bboxes_normalized = pos_gt_bboxes / factor + pos_gt_bboxes_targets = bbox_xyxy_to_cxcywh(pos_gt_bboxes_normalized) + bbox_targets[pos_inds] = pos_gt_bboxes_targets + return (labels, label_weights, bbox_targets, bbox_weights, pos_inds, + neg_inds) + def forward( self, hidden_states: Tensor, @@ -319,3 +440,328 @@ def _predict_by_feat_single(self, results.scores = scores results.labels = det_labels return results + + def loss(self, hidden_states: Tensor, references: List[Tensor], + memory_text: Tensor, text_token_mask: Tensor, + enc_outputs_class: Tensor, enc_outputs_coord: Tensor, + batch_data_samples: SampleList, dn_meta: Dict[str, int]) -> dict: + """Perform forward propagation and loss calculation of the detection + head on the queries of the upstream network. + + Args: + hidden_states (Tensor): Hidden states output from each decoder + layer, has shape (num_decoder_layers, bs, num_queries_total, + dim), where `num_queries_total` is the sum of + `num_denoising_queries` and `num_matching_queries` when + `self.training` is `True`, else `num_matching_queries`. + references (list[Tensor]): List of the reference from the decoder. + The first reference is the `init_reference` (initial) and the + other num_decoder_layers(6) references are `inter_references` + (intermediate). The `init_reference` has shape (bs, + num_queries_total, 4) and each `inter_reference` has shape + (bs, num_queries, 4) with the last dimension arranged as + (cx, cy, w, h). + memory_text (Tensor): Memory text. It has shape (bs, len_text, + text_embed_dims). + enc_outputs_class (Tensor): The score of each point on encode + feature map, has shape (bs, num_feat_points, cls_out_channels). + enc_outputs_coord (Tensor): The proposal generate from the + encode feature map, has shape (bs, num_feat_points, 4) with the + last dimension arranged as (cx, cy, w, h). + batch_data_samples (list[:obj:`DetDataSample`]): The Data + Samples. It usually includes information such as + `gt_instance`, `gt_panoptic_seg` and `gt_sem_seg`. + dn_meta (Dict[str, int]): The dictionary saves information about + group collation, including 'num_denoising_queries' and + 'num_denoising_groups'. It will be used for split outputs of + denoising and matching parts and loss calculation. + + Returns: + dict: A dictionary of loss components. + """ + batch_gt_instances = [] + batch_img_metas = [] + for data_sample in batch_data_samples: + batch_img_metas.append(data_sample.metainfo) + batch_gt_instances.append(data_sample.gt_instances) + + outs = self(hidden_states, references, memory_text, text_token_mask) + self.text_masks = text_token_mask + loss_inputs = outs + (enc_outputs_class, enc_outputs_coord, + batch_gt_instances, batch_img_metas, dn_meta) + losses = self.loss_by_feat(*loss_inputs) + return losses + + def loss_by_feat_single(self, cls_scores: Tensor, bbox_preds: Tensor, + batch_gt_instances: InstanceList, + batch_img_metas: List[dict]) -> Tuple[Tensor]: + """Loss function for outputs from a single decoder layer of a single + feature level. + + Args: + cls_scores (Tensor): Box score logits from a single decoder layer + for all images, has shape (bs, num_queries, cls_out_channels). + bbox_preds (Tensor): Sigmoid outputs from a single decoder layer + for all images, with normalized coordinate (cx, cy, w, h) and + shape (bs, num_queries, 4). + batch_gt_instances (list[:obj:`InstanceData`]): Batch of + gt_instance. It usually includes ``bboxes`` and ``labels`` + attributes. + batch_img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + + Returns: + Tuple[Tensor]: A tuple including `loss_cls`, `loss_box` and + `loss_iou`. + """ + num_imgs = cls_scores.size(0) + cls_scores_list = [cls_scores[i] for i in range(num_imgs)] + bbox_preds_list = [bbox_preds[i] for i in range(num_imgs)] + with torch.no_grad(): + cls_reg_targets = self.get_targets(cls_scores_list, + bbox_preds_list, + batch_gt_instances, + batch_img_metas) + (labels_list, label_weights_list, bbox_targets_list, bbox_weights_list, + num_total_pos, num_total_neg) = cls_reg_targets + labels = torch.stack(labels_list, 0) + label_weights = torch.stack(label_weights_list, 0) + bbox_targets = torch.cat(bbox_targets_list, 0) + bbox_weights = torch.cat(bbox_weights_list, 0) + + # ===== this change ===== + # Loss is not computed for the padded regions of the text. + assert (self.text_masks.dim() == 2) + text_masks = self.text_masks.new_zeros( + (self.text_masks.size(0), self.max_text_len)) + text_masks[:, :self.text_masks.size(1)] = self.text_masks + text_mask = (text_masks > 0).unsqueeze(1) + text_mask = text_mask.repeat(1, cls_scores.size(1), 1) + cls_scores = torch.masked_select(cls_scores, text_mask).contiguous() + + labels = torch.masked_select(labels, text_mask) + label_weights = label_weights[..., + None].repeat(1, 1, text_mask.size(-1)) + label_weights = torch.masked_select(label_weights, text_mask) + + # classification loss + # construct weighted avg_factor to match with the official DETR repo + cls_avg_factor = num_total_pos * 1.0 + \ + num_total_neg * self.bg_cls_weight + if self.sync_cls_avg_factor: + cls_avg_factor = reduce_mean( + cls_scores.new_tensor([cls_avg_factor])) + cls_avg_factor = max(cls_avg_factor, 1) + + if isinstance(self.loss_cls, QualityFocalLoss): + raise NotImplementedError( + 'QualityFocalLoss for GroundingDINOHead is not supported yet.') + else: + loss_cls = self.loss_cls( + cls_scores, labels, label_weights, avg_factor=cls_avg_factor) + + # Compute the average number of gt boxes across all gpus, for + # normalization purposes + num_total_pos = loss_cls.new_tensor([num_total_pos]) + num_total_pos = torch.clamp(reduce_mean(num_total_pos), min=1).item() + + # construct factors used for rescale bboxes + factors = [] + for img_meta, bbox_pred in zip(batch_img_metas, bbox_preds): + img_h, img_w, = img_meta['img_shape'] + factor = bbox_pred.new_tensor([img_w, img_h, img_w, + img_h]).unsqueeze(0).repeat( + bbox_pred.size(0), 1) + factors.append(factor) + factors = torch.cat(factors, 0) + + # DETR regress the relative position of boxes (cxcywh) in the image, + # thus the learning target is normalized by the image size. So here + # we need to re-scale them for calculating IoU loss + bbox_preds = bbox_preds.reshape(-1, 4) + bboxes = bbox_cxcywh_to_xyxy(bbox_preds) * factors + bboxes_gt = bbox_cxcywh_to_xyxy(bbox_targets) * factors + + # regression IoU loss, defaultly GIoU loss + loss_iou = self.loss_iou( + bboxes, bboxes_gt, bbox_weights, avg_factor=num_total_pos) + + # regression L1 loss + loss_bbox = self.loss_bbox( + bbox_preds, bbox_targets, bbox_weights, avg_factor=num_total_pos) + return loss_cls, loss_bbox, loss_iou + + def _loss_dn_single(self, dn_cls_scores: Tensor, dn_bbox_preds: Tensor, + batch_gt_instances: InstanceList, + batch_img_metas: List[dict], + dn_meta: Dict[str, int]) -> Tuple[Tensor]: + """Denoising loss for outputs from a single decoder layer. + + Args: + dn_cls_scores (Tensor): Classification scores of a single decoder + layer in denoising part, has shape (bs, num_denoising_queries, + cls_out_channels). + dn_bbox_preds (Tensor): Regression outputs of a single decoder + layer in denoising part. Each is a 4D-tensor with normalized + coordinate format (cx, cy, w, h) and has shape + (bs, num_denoising_queries, 4). + batch_gt_instances (list[:obj:`InstanceData`]): Batch of + gt_instance. It usually includes ``bboxes`` and ``labels`` + attributes. + batch_img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + dn_meta (Dict[str, int]): The dictionary saves information about + group collation, including 'num_denoising_queries' and + 'num_denoising_groups'. It will be used for split outputs of + denoising and matching parts and loss calculation. + + Returns: + Tuple[Tensor]: A tuple including `loss_cls`, `loss_box` and + `loss_iou`. + """ + cls_reg_targets = self.get_dn_targets(batch_gt_instances, + batch_img_metas, dn_meta) + (labels_list, label_weights_list, bbox_targets_list, bbox_weights_list, + num_total_pos, num_total_neg) = cls_reg_targets + labels = torch.stack(labels_list, 0) + label_weights = torch.stack(label_weights_list, 0) + bbox_targets = torch.cat(bbox_targets_list, 0) + bbox_weights = torch.cat(bbox_weights_list, 0) + # ===== this change ===== + # Loss is not computed for the padded regions of the text. + assert (self.text_masks.dim() == 2) + text_masks = self.text_masks.new_zeros( + (self.text_masks.size(0), self.max_text_len)) + text_masks[:, :self.text_masks.size(1)] = self.text_masks + text_mask = (text_masks > 0).unsqueeze(1) + text_mask = text_mask.repeat(1, dn_cls_scores.size(1), 1) + cls_scores = torch.masked_select(dn_cls_scores, text_mask).contiguous() + labels = torch.masked_select(labels, text_mask) + label_weights = label_weights[..., + None].repeat(1, 1, text_mask.size(-1)) + label_weights = torch.masked_select(label_weights, text_mask) + # ======================= + + # classification loss + # construct weighted avg_factor to match with the official DETR repo + cls_avg_factor = \ + num_total_pos * 1.0 + num_total_neg * self.bg_cls_weight + if self.sync_cls_avg_factor: + cls_avg_factor = reduce_mean( + cls_scores.new_tensor([cls_avg_factor])) + cls_avg_factor = max(cls_avg_factor, 1) + + if len(cls_scores) > 0: + if isinstance(self.loss_cls, QualityFocalLoss): + raise NotImplementedError('QualityFocalLoss is not supported') + else: + loss_cls = self.loss_cls( + cls_scores, + labels, + label_weights, + avg_factor=cls_avg_factor) + else: + loss_cls = torch.zeros( + 1, dtype=cls_scores.dtype, device=cls_scores.device) + + # Compute the average number of gt boxes across all gpus, for + # normalization purposes + num_total_pos = loss_cls.new_tensor([num_total_pos]) + num_total_pos = torch.clamp(reduce_mean(num_total_pos), min=1).item() + + # construct factors used for rescale bboxes + factors = [] + for img_meta, bbox_pred in zip(batch_img_metas, dn_bbox_preds): + img_h, img_w = img_meta['img_shape'] + factor = bbox_pred.new_tensor([img_w, img_h, img_w, + img_h]).unsqueeze(0).repeat( + bbox_pred.size(0), 1) + factors.append(factor) + factors = torch.cat(factors) + + # DETR regress the relative position of boxes (cxcywh) in the image, + # thus the learning target is normalized by the image size. So here + # we need to re-scale them for calculating IoU loss + bbox_preds = dn_bbox_preds.reshape(-1, 4) + bboxes = bbox_cxcywh_to_xyxy(bbox_preds) * factors + bboxes_gt = bbox_cxcywh_to_xyxy(bbox_targets) * factors + + # regression IoU loss, defaultly GIoU loss + loss_iou = self.loss_iou( + bboxes, bboxes_gt, bbox_weights, avg_factor=num_total_pos) + + # regression L1 loss + loss_bbox = self.loss_bbox( + bbox_preds, bbox_targets, bbox_weights, avg_factor=num_total_pos) + return loss_cls, loss_bbox, loss_iou + + def _get_dn_targets_single(self, gt_instances: InstanceData, + img_meta: dict, dn_meta: Dict[str, + int]) -> tuple: + """Get targets in denoising part for one image. + + Args: + gt_instances (:obj:`InstanceData`): Ground truth of instance + annotations. It should includes ``bboxes`` and ``labels`` + attributes. + img_meta (dict): Meta information for one image. + dn_meta (Dict[str, int]): The dictionary saves information about + group collation, including 'num_denoising_queries' and + 'num_denoising_groups'. It will be used for split outputs of + denoising and matching parts and loss calculation. + + Returns: + tuple[Tensor]: a tuple containing the following for one image. + + - labels (Tensor): Labels of each image. + - label_weights (Tensor]): Label weights of each image. + - bbox_targets (Tensor): BBox targets of each image. + - bbox_weights (Tensor): BBox weights of each image. + - pos_inds (Tensor): Sampled positive indices for each image. + - neg_inds (Tensor): Sampled negative indices for each image. + """ + gt_bboxes = gt_instances.bboxes + gt_labels = gt_instances.labels + num_groups = dn_meta['num_denoising_groups'] + num_denoising_queries = dn_meta['num_denoising_queries'] + num_queries_each_group = int(num_denoising_queries / num_groups) + device = gt_bboxes.device + + if len(gt_labels) > 0: + t = torch.arange(len(gt_labels), dtype=torch.long, device=device) + t = t.unsqueeze(0).repeat(num_groups, 1) + pos_assigned_gt_inds = t.flatten() + pos_inds = torch.arange( + num_groups, dtype=torch.long, device=device) + pos_inds = pos_inds.unsqueeze(1) * num_queries_each_group + t + pos_inds = pos_inds.flatten() + else: + pos_inds = pos_assigned_gt_inds = \ + gt_bboxes.new_tensor([], dtype=torch.long) + + neg_inds = pos_inds + num_queries_each_group // 2 + # label targets + # this change + labels = gt_bboxes.new_full((num_denoising_queries, self.max_text_len), + 0, + dtype=torch.float32) + labels[pos_inds] = gt_instances.positive_maps[pos_assigned_gt_inds] + label_weights = gt_bboxes.new_ones(num_denoising_queries) + + # bbox targets + bbox_targets = torch.zeros(num_denoising_queries, 4, device=device) + bbox_weights = torch.zeros(num_denoising_queries, 4, device=device) + bbox_weights[pos_inds] = 1.0 + img_h, img_w = img_meta['img_shape'] + + # DETR regress the relative position of boxes (cxcywh) in the image. + # Thus the learning target should be normalized by the image size, also + # the box format should be converted from defaultly x1y1x2y2 to cxcywh. + factor = gt_bboxes.new_tensor([img_w, img_h, img_w, + img_h]).unsqueeze(0) + gt_bboxes_normalized = gt_bboxes / factor + gt_bboxes_targets = bbox_xyxy_to_cxcywh(gt_bboxes_normalized) + bbox_targets[pos_inds] = gt_bboxes_targets.repeat([num_groups, 1]) + + return (labels, label_weights, bbox_targets, bbox_weights, pos_inds, + neg_inds) diff --git a/mmdet/models/detectors/glip.py b/mmdet/models/detectors/glip.py index 53ef5eca4e1..e076a55fe20 100644 --- a/mmdet/models/detectors/glip.py +++ b/mmdet/models/detectors/glip.py @@ -100,6 +100,7 @@ def create_positive_map(tokenized, max_num_entities: int = 256) -> Tensor: """construct a map such that positive_map[i,j] = True if box i is associated to token j + Args: tokenized: The tokenized input. tokens_positive (list): A list of token ranges @@ -213,9 +214,7 @@ def get_tokens_and_prompts( """Get the tokens positive and prompts for the caption.""" if isinstance(original_caption, (list, tuple)) or custom_entities: if custom_entities and isinstance(original_caption, str): - if original_caption.endswith(self._special_tokens): - original_caption = original_caption.replace( - self._special_tokens, '') + original_caption = original_caption.strip(self._special_tokens) original_caption = original_caption.split(self._special_tokens) original_caption = list( filter(lambda x: len(x) > 0, original_caption)) @@ -233,10 +232,7 @@ def get_tokens_and_prompts( return_tensors='pt') entities = original_caption else: - if original_caption.endswith(self._special_tokens): - original_caption = original_caption.replace( - self._special_tokens, '') - + original_caption = original_caption.strip(self._special_tokens) tokenized = self.language_model.tokenizer([original_caption], return_tensors='pt') tokens_positive, noun_phrases = run_ner(original_caption) diff --git a/mmdet/models/detectors/grounding_dino.py b/mmdet/models/detectors/grounding_dino.py index b2495b91cd3..69d398bec8f 100644 --- a/mmdet/models/detectors/grounding_dino.py +++ b/mmdet/models/detectors/grounding_dino.py @@ -7,7 +7,7 @@ from torch import Tensor from mmdet.registry import MODELS -from mmdet.structures import OptSampleList +from mmdet.structures import OptSampleList, SampleList from ..layers import SinePositionalEncoding from ..layers.transformer.grounding_dino_layers import ( GroundingDinoTransformerDecoder, GroundingDinoTransformerEncoder) @@ -57,6 +57,10 @@ def _init_layers(self) -> None: self.language_model.language_backbone.body.language_dim, self.embed_dims, bias=True) + + def init_weights(self) -> None: + """Initialize weights for Transformer and other components.""" + super().init_weights() nn.init.constant_(self.text_feat_map.bias.data, 0) nn.init.xavier_uniform_(self.text_feat_map.weight.data) @@ -67,9 +71,7 @@ def get_tokens_and_prompts( """Get the tokens positive and prompts for the caption.""" if isinstance(original_caption, (list, tuple)) or custom_entities: if custom_entities and isinstance(original_caption, str): - if original_caption.endswith(self._special_tokens): - original_caption = original_caption.replace( - self._special_tokens, '') + original_caption = original_caption.strip(self._special_tokens) original_caption = original_caption.split(self._special_tokens) original_caption = list( filter(lambda x: len(x) > 0, original_caption)) @@ -93,9 +95,8 @@ def get_tokens_and_prompts( return_tensors='pt') entities = original_caption else: - if original_caption.endswith(self._special_tokens): - original_caption = original_caption.replace( - self._special_tokens, '') + if not original_caption.endswith('.'): + original_caption = original_caption + self._special_tokens # NOTE: Tokenizer in Grounding DINO is different from # that in GLIP. The tokenizer in GLIP will pad the # caption_string to max_length, while the tokenizer @@ -121,7 +122,19 @@ def get_tokens_positive_and_prompts( self, original_caption: Union[str, list, tuple], custom_entities: bool = False) -> Tuple[dict, str, Tensor, list]: - """Get the tokens positive and prompts for the caption.""" + """Get the tokens positive and prompts for the caption. + + Args: + original_caption (str): The original caption, e.g. 'bench . car .' + custom_entities (bool, optional): Whether to use custom entities. + If ``True``, the ``original_caption`` should be a list of + strings, each of which is a word. Defaults to False. + + Returns: + Tuple[dict, str, dict, str]: The dict is a mapping from each entity + id, which is numbered from 1, to its positive token id. + The str represents the prompts. + """ tokenized, caption_string, tokens_positive, entities = \ self.get_tokens_and_prompts( original_caption, custom_entities) @@ -246,6 +259,68 @@ def pre_decoder( head_inputs_dict['text_token_mask'] = text_token_mask return decoder_inputs_dict, head_inputs_dict + def loss(self, batch_inputs: Tensor, + batch_data_samples: SampleList) -> Union[dict, list]: + # TODO: Only open vocabulary tasks are supported for training now. + text_prompts = [ + data_samples.text for data_samples in batch_data_samples + ] + + gt_labels = [ + data_samples.gt_instances.labels + for data_samples in batch_data_samples + ] + + new_text_prompts = [] + positive_maps = [] + if len(set(text_prompts)) == 1: + # All the text prompts are the same, + # so there is no need to calculate them multiple times. + tokenized, caption_string, tokens_positive, _ = \ + self.get_tokens_and_prompts( + text_prompts[0], True) + new_text_prompts = [caption_string] * len(batch_inputs) + for gt_label in gt_labels: + new_tokens_positive = [ + tokens_positive[label] for label in gt_label + ] + _, positive_map = self.get_positive_map( + tokenized, new_tokens_positive) + positive_maps.append(positive_map) + else: + for text_prompt, gt_label in zip(text_prompts, gt_labels): + tokenized, caption_string, tokens_positive, _ = \ + self.get_tokens_and_prompts( + text_prompt, True) + new_tokens_positive = [ + tokens_positive[label] for label in gt_label + ] + _, positive_map = self.get_positive_map( + tokenized, new_tokens_positive) + positive_maps.append(positive_map) + new_text_prompts.append(caption_string) + + text_dict = self.language_model(new_text_prompts) + if self.text_feat_map is not None: + text_dict['embedded'] = self.text_feat_map(text_dict['embedded']) + + for i, data_samples in enumerate(batch_data_samples): + positive_map = positive_maps[i].to( + batch_inputs.device).bool().float() + text_token_mask = text_dict['text_token_mask'][i] + data_samples.gt_instances.positive_maps = positive_map + data_samples.gt_instances.text_token_mask = \ + text_token_mask.unsqueeze(0).repeat( + len(positive_map), 1) + + visual_features = self.extract_feat(batch_inputs) + head_inputs_dict = self.forward_transformer(visual_features, text_dict, + batch_data_samples) + + losses = self.bbox_head.loss( + **head_inputs_dict, batch_data_samples=batch_data_samples) + return losses + def predict(self, batch_inputs, batch_data_samples, rescale: bool = True): text_prompts = [ data_samples.text for data_samples in batch_data_samples diff --git a/mmdet/models/language_models/bert.py b/mmdet/models/language_models/bert.py index 3a911bbc2f4..efb0f46bad6 100644 --- a/mmdet/models/language_models/bert.py +++ b/mmdet/models/language_models/bert.py @@ -18,12 +18,23 @@ def generate_masks_with_special_tokens_and_transfer_map( tokenized, special_tokens_list): - """Generate attention mask between each pair of special tokens + """Generate attention mask between each pair of special tokens. + + Only token pairs in between two special tokens are attended to + and thus the attention mask for these pairs is positive. + Args: input_ids (torch.Tensor): input ids. Shape: [bs, num_token] special_tokens_mask (list): special tokens mask. + Returns: - torch.Tensor: attention mask between each special tokens. + Tuple(Tensor, Tensor): + - attention_mask is the attention mask between each tokens. + Only token pairs in between two special tokens are positive. + Shape: [bs, num_token, num_token]. + - position_ids is the position id of tokens within each valid sentence. + The id starts from 0 whenenver a special token is encountered. + Shape: [bs, num_token] """ input_ids = tokenized['input_ids'] bs, num_token = input_ids.shape diff --git a/mmdet/models/layers/transformer/deformable_detr_layers.py b/mmdet/models/layers/transformer/deformable_detr_layers.py index e2d32388d6a..da6325d6127 100644 --- a/mmdet/models/layers/transformer/deformable_detr_layers.py +++ b/mmdet/models/layers/transformer/deformable_detr_layers.py @@ -1,5 +1,4 @@ # Copyright (c) OpenMMLab. All rights reserved. -import warnings from typing import Optional, Tuple, Union import torch @@ -31,10 +30,10 @@ def _init_layers(self) -> None: if self.num_cp > 0: if checkpoint_wrapper is None: - warnings.warn('If you want to reduce GPU memory usage, \ - please install fairscale by executing the \ - following command: pip install fairscale.') - return + raise NotImplementedError( + 'If you want to reduce GPU memory usage, \ + please install fairscale by executing the \ + following command: pip install fairscale.') for i in range(self.num_cp): self.layers[i] = checkpoint_wrapper(self.layers[i]) diff --git a/mmdet/models/layers/transformer/detr_layers.py b/mmdet/models/layers/transformer/detr_layers.py index 928b07ce2df..6a83dd2faa6 100644 --- a/mmdet/models/layers/transformer/detr_layers.py +++ b/mmdet/models/layers/transformer/detr_layers.py @@ -1,5 +1,4 @@ # Copyright (c) OpenMMLab. All rights reserved. -import warnings from typing import Union import torch @@ -52,10 +51,10 @@ def _init_layers(self) -> None: if self.num_cp > 0: if checkpoint_wrapper is None: - warnings.warn('If you want to reduce GPU memory usage, \ - please install fairscale by executing the \ - following command: pip install fairscale.') - return + raise NotImplementedError( + 'If you want to reduce GPU memory usage, \ + please install fairscale by executing the \ + following command: pip install fairscale.') for i in range(self.num_cp): self.layers[i] = checkpoint_wrapper(self.layers[i]) diff --git a/mmdet/models/layers/transformer/grounding_dino_layers.py b/mmdet/models/layers/transformer/grounding_dino_layers.py index 645384bd014..3c285768f36 100644 --- a/mmdet/models/layers/transformer/grounding_dino_layers.py +++ b/mmdet/models/layers/transformer/grounding_dino_layers.py @@ -16,6 +16,11 @@ from .dino_layers import DinoTransformerDecoder from .utils import MLP, get_text_sine_pos_embed +try: + from fairscale.nn.checkpoint import checkpoint_wrapper +except Exception: + checkpoint_wrapper = None + class GroundingDinoTransformerDecoderLayer( DeformableDetrTransformerDecoderLayer): @@ -150,6 +155,16 @@ def _init_layers(self) -> None: for _ in range(self.num_layers) ]) self.embed_dims = self.layers[0].embed_dims + if self.num_cp > 0: + if checkpoint_wrapper is None: + raise NotImplementedError( + 'If you want to reduce GPU memory usage, \ + please install fairscale by executing the \ + following command: pip install fairscale.') + for i in range(self.num_cp): + self.layers[i] = checkpoint_wrapper(self.layers[i]) + self.fusion_layers[i] = checkpoint_wrapper( + self.fusion_layers[i]) def forward(self, query: Tensor, diff --git a/mmdet/models/task_modules/assigners/__init__.py b/mmdet/models/task_modules/assigners/__init__.py index bd71020e56e..4e564f24c95 100644 --- a/mmdet/models/task_modules/assigners/__init__.py +++ b/mmdet/models/task_modules/assigners/__init__.py @@ -8,8 +8,9 @@ from .grid_assigner import GridAssigner from .hungarian_assigner import HungarianAssigner from .iou2d_calculator import BboxOverlaps2D, BboxOverlaps2D_GLIP -from .match_cost import (BBoxL1Cost, ClassificationCost, CrossEntropyLossCost, - DiceCost, FocalLossCost, IoUCost) +from .match_cost import (BBoxL1Cost, BinaryFocalLossCost, ClassificationCost, + CrossEntropyLossCost, DiceCost, FocalLossCost, + IoUCost) from .max_iou_assigner import MaxIoUAssigner from .multi_instance_assigner import MultiInstanceAssigner from .point_assigner import PointAssigner @@ -20,9 +21,10 @@ from .uniform_assigner import UniformAssigner __all__ = [ - 'BaseAssigner', 'MaxIoUAssigner', 'ApproxMaxIoUAssigner', 'AssignResult', - 'PointAssigner', 'ATSSAssigner', 'CenterRegionAssigner', 'GridAssigner', - 'HungarianAssigner', 'RegionAssigner', 'UniformAssigner', 'SimOTAAssigner', + 'BaseAssigner', 'BinaryFocalLossCost', 'MaxIoUAssigner', + 'ApproxMaxIoUAssigner', 'AssignResult', 'PointAssigner', 'ATSSAssigner', + 'CenterRegionAssigner', 'GridAssigner', 'HungarianAssigner', + 'RegionAssigner', 'UniformAssigner', 'SimOTAAssigner', 'TaskAlignedAssigner', 'TopkHungarianAssigner', 'BBoxL1Cost', 'ClassificationCost', 'CrossEntropyLossCost', 'DiceCost', 'FocalLossCost', 'IoUCost', 'BboxOverlaps2D', 'DynamicSoftLabelAssigner', diff --git a/mmdet/models/task_modules/assigners/match_cost.py b/mmdet/models/task_modules/assigners/match_cost.py index e8e0293b94e..5fc62f01f29 100644 --- a/mmdet/models/task_modules/assigners/match_cost.py +++ b/mmdet/models/task_modules/assigners/match_cost.py @@ -331,6 +331,57 @@ def __call__(self, return self._focal_loss_cost(pred_scores, gt_labels) +@TASK_UTILS.register_module() +class BinaryFocalLossCost(FocalLossCost): + + def _focal_loss_cost(self, cls_pred: Tensor, gt_labels: Tensor) -> Tensor: + """ + Args: + cls_pred (Tensor): Predicted classification logits, shape + (num_queries, num_class). + gt_labels (Tensor): Label of `gt_bboxes`, shape (num_gt,). + + Returns: + torch.Tensor: cls_cost value with weight + """ + cls_pred = cls_pred.flatten(1) + gt_labels = gt_labels.flatten(1).float() + cls_pred = cls_pred.sigmoid() + neg_cost = -(1 - cls_pred + self.eps).log() * ( + 1 - self.alpha) * cls_pred.pow(self.gamma) + pos_cost = -(cls_pred + self.eps).log() * self.alpha * ( + 1 - cls_pred).pow(self.gamma) + + cls_cost = torch.einsum('nc,mc->nm', pos_cost, gt_labels) + \ + torch.einsum('nc,mc->nm', neg_cost, (1 - gt_labels)) + return cls_cost * self.weight + + def __call__(self, + pred_instances: InstanceData, + gt_instances: InstanceData, + img_meta: Optional[dict] = None, + **kwargs) -> Tensor: + """Compute match cost. + + Args: + pred_instances (:obj:`InstanceData`): Predicted instances which + must contain ``scores`` or ``masks``. + gt_instances (:obj:`InstanceData`): Ground truth which must contain + ``labels`` or ``mask``. + img_meta (Optional[dict]): Image information. Defaults to None. + + Returns: + Tensor: Match Cost matrix of shape (num_preds, num_gts). + """ + # gt_instances.text_token_mask is a repeated tensor of the same length + # of instances. Only gt_instances.text_token_mask[0] is useful + text_token_mask = torch.nonzero( + gt_instances.text_token_mask[0]).squeeze(-1) + pred_scores = pred_instances.scores[:, text_token_mask] + gt_labels = gt_instances.positive_maps[:, text_token_mask] + return self._focal_loss_cost(pred_scores, gt_labels) + + @TASK_UTILS.register_module() class DiceCost(BaseMatchCost): """Cost of mask assignments based on dice losses. diff --git a/requirements/multimodal.txt b/requirements/multimodal.txt index 5abdb4fdbff..03fdb17777e 100644 --- a/requirements/multimodal.txt +++ b/requirements/multimodal.txt @@ -1,3 +1,4 @@ +fairscale nltk pycocoevalcap transformers diff --git a/requirements/optional.txt b/requirements/optional.txt index 4f0065a9b4d..54e5dd647f4 100644 --- a/requirements/optional.txt +++ b/requirements/optional.txt @@ -1,3 +1,4 @@ cityscapesscripts +fairscale imagecorruptions scikit-learn From ceab2796d45bdeba4daa2223bf31bf3fbca0dda1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Tue, 26 Sep 2023 11:40:19 +0800 Subject: [PATCH 51/63] Fix typo (#10976) --- configs/glip/README.md | 14 +++++++------- configs/grounding_dino/README.md | 8 ++++---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/configs/glip/README.md b/configs/glip/README.md index 8f571437933..1252d922ac8 100644 --- a/configs/glip/README.md +++ b/configs/glip/README.md @@ -58,23 +58,23 @@ tokenizer.save_pretrained("your path/bert-base-uncased") ## Results and Models -| Model | Zero-shot or Funetune | COCO mAP | Official COCO mAP | Pre-Train Data | Config | Download | +| Model | Zero-shot or Finetune | COCO mAP | Official COCO mAP | Pre-Train Data | Config | Download | | :--------: | :-------------------: | :------: | ----------------: | :------------------------: | :---------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | GLIP-T (A) | Zero-shot | 43.0 | 42.9 | O365 | [config](glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_a_mmdet-b3654169.pth) | -| GLIP-T (A) | Funetune | 53.3 | 52.9 | O365 | [config](glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_180419-e6addd96.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_180419.log.json) | +| GLIP-T (A) | Finetune | 53.3 | 52.9 | O365 | [config](glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_180419-e6addd96.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_180419.log.json) | | GLIP-T (B) | Zero-shot | 44.9 | 44.9 | O365 | [config](glip_atss_swin-t_b_fpn_dyhead_pretrain_obj365.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_b_mmdet-6dfbd102.pth) | -| GLIP-T (B) | Funetune | 54.1 | 53.8 | O365 | [config](glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230916_163538-650323ba.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230916_163538.log.json) | +| GLIP-T (B) | Finetune | 54.1 | 53.8 | O365 | [config](glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230916_163538-650323ba.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_b_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230916_163538.log.json) | | GLIP-T (C) | Zero-shot | 46.7 | 46.7 | O365,GoldG | [config](glip_atss_swin-t_c_fpn_dyhead_pretrain_obj365-goldg.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_c_mmdet-2fc427dd.pth) | -| GLIP-T (C) | Funetune | 55.2 | 55.1 | O365,GoldG | [config](glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_182935-4ba3fc3b.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_182935.log.json) | +| GLIP-T (C) | Finetune | 55.2 | 55.1 | O365,GoldG | [config](glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_182935-4ba3fc3b.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_c_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_182935.log.json) | | GLIP-T | Zero-shot | 46.6 | 46.6 | O365,GoldG,CC3M,SBU | [config](glip_atss_swin-t_fpn_dyhead_pretrain_obj365-goldg-cc3m-sub.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_mmdet-c24ce662.pth) | -| GLIP-T | Funetune | 55.4 | 55.2 | O365,GoldG,CC3M,SBU | [config](glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_224410-ba97be24.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_224410.log.json) | +| GLIP-T | Finetune | 55.4 | 55.2 | O365,GoldG,CC3M,SBU | [config](glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_224410-ba97be24.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-t_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230914_224410.log.json) | | GLIP-L | Zero-shot | 51.3 | 51.4 | FourODs,GoldG,CC3M+12M,SBU | [config](glip_atss_swin-l_fpn_dyhead_pretrain_mixeddata.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_l_mmdet-abfe026b.pth) | -| GLIP-L | Funetune | 59.4 | | FourODs,GoldG,CC3M+12M,SBU | [config](glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230910_100800-e9be4274.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230910_100800.log.json) | +| GLIP-L | Finetune | 59.4 | | FourODs,GoldG,CC3M+12M,SBU | [config](glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230910_100800-e9be4274.pth)\| [log](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco/glip_atss_swin-l_fpn_dyhead_16xb2_ms-2x_funtune_coco_20230910_100800.log.json) | Note: 1. The weights corresponding to the zero-shot model are adopted from the official weights and converted using the [script](../../tools/model_converters/glip_to_mmdet.py). We have not retrained the model for the time being. -2. Funetune refers to fine-tuning on the COCO 2017 dataset. The L model is trained using 16 A100 GPUs, while the remaining models are trained using 16 NVIDIA GeForce 3090 GPUs. +2. Finetune refers to fine-tuning on the COCO 2017 dataset. The L model is trained using 16 A100 GPUs, while the remaining models are trained using 16 NVIDIA GeForce 3090 GPUs. 3. Taking the GLIP-T(A) model as an example, I trained it twice using the official code, and the fine-tuning mAP were 52.5 and 52.6. Therefore, the mAP we achieved in our reproduction is higher than the official results. The main reason is that we modified the `weight_decay` parameter. 4. Our experiments revealed that training for 24 epochs leads to overfitting. Therefore, we chose the best-performing model. If users want to train on a custom dataset, it is advisable to shorten the number of epochs and save the best-performing model. 5. Due to the official absence of fine-tuning hyperparameters for the GLIP-L model, we have not yet reproduced the official accuracy. I have found that overfitting can also occur, so it may be necessary to consider custom modifications to data augmentation and model enhancement. Given the high cost of training, we have not conducted any research on this matter at the moment. diff --git a/configs/grounding_dino/README.md b/configs/grounding_dino/README.md index 92723deb116..2c869adffc9 100644 --- a/configs/grounding_dino/README.md +++ b/configs/grounding_dino/README.md @@ -64,13 +64,13 @@ python demo/image_demo.py \ | Model | Backbone | Style | COCO mAP | Official COCO mAP | Pre-Train Data | Config | Download | | :----------------: | :------: | :-------: | :--------: | :---------------: | :----------------------------------------------: | :------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Grounding DINO-T | Swin-T | Zero-shot | 48.5 | 48.4 | O365,GoldG,Cap4M | [config](grounding_dino_swin-t_pretrain_obj365_goldg_cap4m.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/groundingdino_swint_ogc_mmdet-822d7e9d.pth) | -| Grounding DINO-T | Swin-T | Funetune | 58.1(+0.9) | 57.2 | O365,GoldG,Cap4M | [config](grounding_dino_swin-t_finetune_16xb2_1x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_swin-t_finetune_16xb2_1x_coco/grounding_dino_swin-t_finetune_16xb2_1x_coco_20230921_152544-5f234b20.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_swin-t_finetune_16xb2_1x_coco/grounding_dino_swin-t_finetune_16xb2_1x_coco_20230921_152544.log.json) | +| Grounding DINO-T | Swin-T | Finetune | 58.1(+0.9) | 57.2 | O365,GoldG,Cap4M | [config](grounding_dino_swin-t_finetune_16xb2_1x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_swin-t_finetune_16xb2_1x_coco/grounding_dino_swin-t_finetune_16xb2_1x_coco_20230921_152544-5f234b20.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_swin-t_finetune_16xb2_1x_coco/grounding_dino_swin-t_finetune_16xb2_1x_coco_20230921_152544.log.json) | | Grounding DINO-B | Swin-B | Zero-shot | 56.9 | 56.7 | COCO,O365,GoldG,Cap4M,OpenImage,ODinW-35,RefCOCO | [config](grounding_dino_swin-b_pretrain_mixeddata.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/groundingdino_swinb_cogcoor_mmdet-55949c9c.pth) | -| Grounding DINO-B | Swin-B | Funetune | 59.7 | | COCO,O365,GoldG,Cap4M,OpenImage,ODinW-35,RefCOCO | [config](grounding_dino_swin-b_finetune_16xb2_1x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_swin-b_finetune_16xb2_1x_coco/grounding_dino_swin-b_finetune_16xb2_1x_coco_20230921_153201-f219e0c0.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_swin-b_finetune_16xb2_1x_coco/grounding_dino_swin-b_finetune_16xb2_1x_coco_20230921_153201.log.json) | -| Grounding DINO-R50 | R50 | scratch | 48.9(+0.8) | 48.1 | | [config](grounding_dino_r50_scratch_8xb2_1x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_r50_scratch_8xb2_1x_coco/grounding_dino_r50_scratch_1x_coco-fe0002f2.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_r50_scratch_8xb2_1x_coco/20230922_114218.json) | +| Grounding DINO-B | Swin-B | Finetune | 59.7 | | COCO,O365,GoldG,Cap4M,OpenImage,ODinW-35,RefCOCO | [config](grounding_dino_swin-b_finetune_16xb2_1x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_swin-b_finetune_16xb2_1x_coco/grounding_dino_swin-b_finetune_16xb2_1x_coco_20230921_153201-f219e0c0.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_swin-b_finetune_16xb2_1x_coco/grounding_dino_swin-b_finetune_16xb2_1x_coco_20230921_153201.log.json) | +| Grounding DINO-R50 | R50 | Scratch | 48.9(+0.8) | 48.1 | | [config](grounding_dino_r50_scratch_8xb2_1x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_r50_scratch_8xb2_1x_coco/grounding_dino_r50_scratch_1x_coco-fe0002f2.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/grounding_dino_r50_scratch_8xb2_1x_coco/20230922_114218.json) | Note: 1. The weights corresponding to the zero-shot model are adopted from the official weights and converted using the [script](../../tools/model_converters/groundingdino_to_mmdet.py). We have not retrained the model for the time being. -2. Funetune refers to fine-tuning on the COCO 2017 dataset. The R50 model is trained using 8 NVIDIA GeForce 3090 GPUs, while the remaining models are trained using 16 NVIDIA GeForce 3090 GPUs. The GPU memory usage is approximately 8.5GB. +2. Finetune refers to fine-tuning on the COCO 2017 dataset. The R50 model is trained using 8 NVIDIA GeForce 3090 GPUs, while the remaining models are trained using 16 NVIDIA GeForce 3090 GPUs. The GPU memory usage is approximately 8.5GB. 3. Our performance is higher than the official model due to two reasons: we modified the initialization strategy and introduced a log scaler. From b09d1834f594492bee9fc7a6a30405229ff29285 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Wed, 27 Sep 2023 19:59:55 +0800 Subject: [PATCH 52/63] test new model (#10984) --- .dev_scripts/benchmark_train_models.txt | 4 +++- mmdet/version.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.dev_scripts/benchmark_train_models.txt b/.dev_scripts/benchmark_train_models.txt index 11173a120e8..30b53c0018e 100644 --- a/.dev_scripts/benchmark_train_models.txt +++ b/.dev_scripts/benchmark_train_models.txt @@ -2,11 +2,13 @@ atss/atss_r50_fpn_1x_coco.py faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py mask_rcnn/mask-rcnn_r50_fpn_1x_coco.py cascade_rcnn/cascade-mask-rcnn_r50_fpn_1x_coco.py +configs/grounding_dino/grounding_dino_swin-t_finetune_16xb2_1x_coco.py +configs/glip/glip_atss_swin-t_a_fpn_dyhead_16xb2_ms-2x_funtune_coco.py +configs/ddq/ddq-detr-4scale_r50_8xb2-12e_coco.py panoptic_fpn/panoptic-fpn_r50_fpn_1x_coco.py retinanet/retinanet_r50_fpn_1x_coco.py rtmdet/rtmdet_s_8xb32-300e_coco.py rtmdet/rtmdet-ins_s_8xb32-300e_coco.py -deformable_detr/deformable-detr_r50_16xb2-50e_coco.py fcos/fcos_r50-caffe_fpn_gn-head-center-normbbox-centeronreg-giou_1x_coco.py centernet/centernet-update_r50-caffe_fpn_ms-1x_coco.py dino/dino-4scale_r50_8xb2-12e_coco.py diff --git a/mmdet/version.py b/mmdet/version.py index 7c7af507161..38ce834e152 100644 --- a/mmdet/version.py +++ b/mmdet/version.py @@ -1,6 +1,6 @@ # Copyright (c) OpenMMLab. All rights reserved. -__version__ = '3.1.0' +__version__ = '3.2.0' short_version = __version__ From bbfa179bfd96d05d751ffb8c539dc1276e6d2092 Mon Sep 17 00:00:00 2001 From: ryylcc <85794259+ryylcc@users.noreply.github.com> Date: Wed, 27 Sep 2023 20:04:05 +0800 Subject: [PATCH 53/63] Support Detic and Multi-Datasets training (#10926) --- mmdet/datasets/__init__.py | 4 +- mmdet/datasets/dataset_wrappers.py | 87 ++- mmdet/datasets/samplers/__init__.py | 5 +- mmdet/datasets/samplers/batch_sampler.py | 77 +++ mmdet/datasets/samplers/multi_data_sampler.py | 110 ++++ projects/Detic/README.md | 2 + projects/Detic_new/README.md | 248 ++++++++ ..._centernet2_r50_fpn_4x_lvis-base_boxsup.py | 9 + ...ternet2_r50_fpn_4x_lvis-base_in21k-lvis.py | 81 +++ ...detic_centernet2_r50_fpn_4x_lvis_boxsup.py | 409 +++++++++++++ ...c_centernet2_r50_fpn_4x_lvis_in21k-lvis.py | 84 +++ ...nternet2_swin-b_fpn_4x_lvis-base_boxsup.py | 9 + ...net2_swin-b_fpn_4x_lvis-base_in21k-lvis.py | 118 ++++ ...ic_centernet2_swin-b_fpn_4x_lvis_boxsup.py | 78 +++ ...enternet2_swin-b_fpn_4x_lvis_coco_in21k.py | 2 + ...enternet2_swin-b_fpn_4x_lvis_in21k-lvis.py | 116 ++++ projects/Detic_new/detic/__init__.py | 13 + .../Detic_new/detic/centernet_rpn_head.py | 573 ++++++++++++++++++ projects/Detic_new/detic/detic.py | 274 +++++++++ projects/Detic_new/detic/detic_bbox_head.py | 434 +++++++++++++ projects/Detic_new/detic/detic_roi_head.py | 440 ++++++++++++++ .../Detic_new/detic/heatmap_focal_loss.py | 131 ++++ projects/Detic_new/detic/imagenet_lvis.py | 395 ++++++++++++ projects/Detic_new/detic/iou_loss.py | 125 ++++ .../Detic_new/detic/zero_shot_classifier.py | 73 +++ tools/model_converters/detic_to_mmdet.py | 195 ++++++ 26 files changed, 4087 insertions(+), 5 deletions(-) create mode 100644 mmdet/datasets/samplers/multi_data_sampler.py create mode 100644 projects/Detic_new/README.md create mode 100644 projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis-base_boxsup.py create mode 100644 projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis-base_in21k-lvis.py create mode 100644 projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis_boxsup.py create mode 100644 projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py create mode 100644 projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis-base_boxsup.py create mode 100644 projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis-base_in21k-lvis.py create mode 100644 projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis_boxsup.py create mode 100644 projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis_coco_in21k.py create mode 100644 projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis_in21k-lvis.py create mode 100644 projects/Detic_new/detic/__init__.py create mode 100644 projects/Detic_new/detic/centernet_rpn_head.py create mode 100644 projects/Detic_new/detic/detic.py create mode 100644 projects/Detic_new/detic/detic_bbox_head.py create mode 100644 projects/Detic_new/detic/detic_roi_head.py create mode 100644 projects/Detic_new/detic/heatmap_focal_loss.py create mode 100644 projects/Detic_new/detic/imagenet_lvis.py create mode 100644 projects/Detic_new/detic/iou_loss.py create mode 100644 projects/Detic_new/detic/zero_shot_classifier.py create mode 100644 tools/model_converters/detic_to_mmdet.py diff --git a/mmdet/datasets/__init__.py b/mmdet/datasets/__init__.py index 9e8560b3dd0..044efe4cad7 100644 --- a/mmdet/datasets/__init__.py +++ b/mmdet/datasets/__init__.py @@ -10,7 +10,7 @@ from .coco_panoptic import CocoPanopticDataset from .coco_semantic import CocoSegDataset from .crowdhuman import CrowdHumanDataset -from .dataset_wrappers import MultiImageMixDataset +from .dataset_wrappers import ConcatDataset, MultiImageMixDataset from .deepfashion import DeepFashionDataset from .dsdl import DSDLDetDataset from .isaid import iSAIDDataset @@ -42,5 +42,5 @@ 'ReIDDataset', 'YouTubeVISDataset', 'TrackAspectRatioBatchSampler', 'ADE20KPanopticDataset', 'CocoCaptionDataset', 'RefCocoDataset', 'BaseSegDataset', 'ADE20KSegDataset', 'CocoSegDataset', - 'ADE20KInstanceDataset', 'iSAIDDataset', 'V3DetDataset' + 'ADE20KInstanceDataset', 'iSAIDDataset', 'V3DetDataset', 'ConcatDataset' ] diff --git a/mmdet/datasets/dataset_wrappers.py b/mmdet/datasets/dataset_wrappers.py index 64f7e1ad6b5..e651e2b9902 100644 --- a/mmdet/datasets/dataset_wrappers.py +++ b/mmdet/datasets/dataset_wrappers.py @@ -1,9 +1,11 @@ # Copyright (c) OpenMMLab. All rights reserved. import collections import copy -from typing import Sequence, Union +from typing import List, Sequence, Union -from mmengine.dataset import BaseDataset, force_full_init +from mmengine.dataset import BaseDataset +from mmengine.dataset import ConcatDataset as MMENGINE_ConcatDataset +from mmengine.dataset import force_full_init from mmdet.registry import DATASETS, TRANSFORMS @@ -167,3 +169,84 @@ def update_skip_type_keys(self, skip_type_keys): isinstance(skip_type_key, str) for skip_type_key in skip_type_keys ]) self._skip_type_keys = skip_type_keys + + +@DATASETS.register_module() +class ConcatDataset(MMENGINE_ConcatDataset): + """A wrapper of concatenated dataset. + + Same as ``torch.utils.data.dataset.ConcatDataset``, support + lazy_init and get_dataset_source. + + Note: + ``ConcatDataset`` should not inherit from ``BaseDataset`` since + ``get_subset`` and ``get_subset_`` could produce ambiguous meaning + sub-dataset which conflicts with original dataset. If you want to use + a sub-dataset of ``ConcatDataset``, you should set ``indices`` + arguments for wrapped dataset which inherit from ``BaseDataset``. + + Args: + datasets (Sequence[BaseDataset] or Sequence[dict]): A list of datasets + which will be concatenated. + lazy_init (bool, optional): Whether to load annotation during + instantiation. Defaults to False. + ignore_keys (List[str] or str): Ignore the keys that can be + unequal in `dataset.metainfo`. Defaults to None. + `New in version 0.3.0.` + """ + + def __init__(self, + datasets: Sequence[Union[BaseDataset, dict]], + lazy_init: bool = False, + ignore_keys: Union[str, List[str], None] = None): + self.datasets: List[BaseDataset] = [] + for i, dataset in enumerate(datasets): + if isinstance(dataset, dict): + self.datasets.append(DATASETS.build(dataset)) + elif isinstance(dataset, BaseDataset): + self.datasets.append(dataset) + else: + raise TypeError( + 'elements in datasets sequence should be config or ' + f'`BaseDataset` instance, but got {type(dataset)}') + if ignore_keys is None: + self.ignore_keys = [] + elif isinstance(ignore_keys, str): + self.ignore_keys = [ignore_keys] + elif isinstance(ignore_keys, list): + self.ignore_keys = ignore_keys + else: + raise TypeError('ignore_keys should be a list or str, ' + f'but got {type(ignore_keys)}') + + meta_keys: set = set() + for dataset in self.datasets: + meta_keys |= dataset.metainfo.keys() + # if the metainfo of multiple datasets are the same, use metainfo + # of the first dataset, else the metainfo is a list with metainfo + # of all the datasets + is_all_same = True + self._metainfo_first = self.datasets[0].metainfo + for i, dataset in enumerate(self.datasets, 1): + for key in meta_keys: + if key in self.ignore_keys: + continue + if key not in dataset.metainfo: + is_all_same = False + break + if self._metainfo_first[key] != dataset.metainfo[key]: + is_all_same = False + break + + if is_all_same: + self._metainfo = self.datasets[0].metainfo + else: + self._metainfo = [dataset.metainfo for dataset in self.datasets] + + self._fully_initialized = False + if not lazy_init: + self.full_init() + + def get_dataset_source(self, idx: int) -> int: + dataset_idx, _ = self._get_ori_dataset_idx(idx) + return dataset_idx diff --git a/mmdet/datasets/samplers/__init__.py b/mmdet/datasets/samplers/__init__.py index 769f38131be..a942ff2199c 100644 --- a/mmdet/datasets/samplers/__init__.py +++ b/mmdet/datasets/samplers/__init__.py @@ -1,12 +1,15 @@ # Copyright (c) OpenMMLab. All rights reserved. from .batch_sampler import (AspectRatioBatchSampler, + MultiDataAspectRatioBatchSampler, TrackAspectRatioBatchSampler) from .class_aware_sampler import ClassAwareSampler +from .multi_data_sampler import MultiDataSampler from .multi_source_sampler import GroupMultiSourceSampler, MultiSourceSampler from .track_img_sampler import TrackImgSampler __all__ = [ 'ClassAwareSampler', 'AspectRatioBatchSampler', 'MultiSourceSampler', 'GroupMultiSourceSampler', 'TrackImgSampler', - 'TrackAspectRatioBatchSampler' + 'TrackAspectRatioBatchSampler', 'MultiDataSampler', + 'MultiDataAspectRatioBatchSampler' ] diff --git a/mmdet/datasets/samplers/batch_sampler.py b/mmdet/datasets/samplers/batch_sampler.py index 6357713223d..c17789c4e3e 100644 --- a/mmdet/datasets/samplers/batch_sampler.py +++ b/mmdet/datasets/samplers/batch_sampler.py @@ -114,3 +114,80 @@ def __iter__(self) -> Sequence[int]: else: yield left_data[:self.batch_size] left_data = left_data[self.batch_size:] + + +@DATA_SAMPLERS.register_module() +class MultiDataAspectRatioBatchSampler(BatchSampler): + """A sampler wrapper for grouping images with similar aspect ratio (< 1 or. + + >= 1) into a same batch for multi-source datasets. + + Args: + sampler (Sampler): Base sampler. + batch_size (Sequence(int)): Size of mini-batch for multi-source + datasets. + num_datasets(int): Number of multi-source datasets. + drop_last (bool): If ``True``, the sampler will drop the last batch if + its size would be less than ``batch_size``. + """ + + def __init__(self, + sampler: Sampler, + batch_size: Sequence[int], + num_datasets: int, + drop_last: bool = True) -> None: + if not isinstance(sampler, Sampler): + raise TypeError('sampler should be an instance of ``Sampler``, ' + f'but got {sampler}') + self.sampler = sampler + self.batch_size = batch_size + self.num_datasets = num_datasets + self.drop_last = drop_last + # two groups for w < h and w >= h for each dataset --> 2 * num_datasets + self._buckets = [[] for _ in range(2 * self.num_datasets)] + + def __iter__(self) -> Sequence[int]: + for idx in self.sampler: + data_info = self.sampler.dataset.get_data_info(idx) + width, height = data_info['width'], data_info['height'] + dataset_source_idx = self.sampler.dataset.get_dataset_source(idx) + aspect_ratio_bucket_id = 0 if width < height else 1 + bucket_id = dataset_source_idx * 2 + aspect_ratio_bucket_id + bucket = self._buckets[bucket_id] + bucket.append(idx) + # yield a batch of indices in the same aspect ratio group + if len(bucket) == self.batch_size[dataset_source_idx]: + yield bucket[:] + del bucket[:] + + # yield the rest data and reset the bucket + for i in range(self.num_datasets): + left_data = self._buckets[i * 2 + 0] + self._buckets[i * 2 + 1] + while len(left_data) > 0: + if len(left_data) <= self.batch_size[i]: + if not self.drop_last: + yield left_data[:] + left_data = [] + else: + yield left_data[:self.batch_size[i]] + left_data = left_data[self.batch_size[i]:] + + self._buckets = [[] for _ in range(2 * self.num_datasets)] + + def __len__(self) -> int: + sizes = [0 for _ in range(self.num_datasets)] + for idx in self.sampler: + dataset_source_idx = self.sampler.dataset.get_dataset_source(idx) + sizes[dataset_source_idx] += 1 + + if self.drop_last: + lens = 0 + for i in range(self.num_datasets): + lens += sizes[i] // self.batch_size[i] + return lens + else: + lens = 0 + for i in range(self.num_datasets): + lens += (sizes[i] + self.batch_size[i] - + 1) // self.batch_size[i] + return lens diff --git a/mmdet/datasets/samplers/multi_data_sampler.py b/mmdet/datasets/samplers/multi_data_sampler.py new file mode 100644 index 00000000000..c3a4b60d841 --- /dev/null +++ b/mmdet/datasets/samplers/multi_data_sampler.py @@ -0,0 +1,110 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import math +from typing import Iterator, Optional, Sequence, Sized + +import torch +from mmengine.dist import get_dist_info, sync_random_seed +from mmengine.registry import DATA_SAMPLERS +from torch.utils.data import Sampler + + +@DATA_SAMPLERS.register_module() +class MultiDataSampler(Sampler): + """The default data sampler for both distributed and non-distributed + environment. + + It has several differences from the PyTorch ``DistributedSampler`` as + below: + + 1. This sampler supports non-distributed environment. + + 2. The round up behaviors are a little different. + + - If ``round_up=True``, this sampler will add extra samples to make the + number of samples is evenly divisible by the world size. And + this behavior is the same as the ``DistributedSampler`` with + ``drop_last=False``. + - If ``round_up=False``, this sampler won't remove or add any samples + while the ``DistributedSampler`` with ``drop_last=True`` will remove + tail samples. + + Args: + dataset (Sized): The dataset. + dataset_ratio (Sequence(int)) The ratios of different datasets. + seed (int, optional): Random seed used to shuffle the sampler if + :attr:`shuffle=True`. This number should be identical across all + processes in the distributed group. Defaults to None. + round_up (bool): Whether to add extra samples to make the number of + samples evenly divisible by the world size. Defaults to True. + """ + + def __init__(self, + dataset: Sized, + dataset_ratio: Sequence[int], + seed: Optional[int] = None, + round_up: bool = True) -> None: + rank, world_size = get_dist_info() + self.rank = rank + self.world_size = world_size + + self.dataset = dataset + self.dataset_ratio = dataset_ratio + + if seed is None: + seed = sync_random_seed() + self.seed = seed + self.epoch = 0 + self.round_up = round_up + + if self.round_up: + self.num_samples = math.ceil(len(self.dataset) / world_size) + self.total_size = self.num_samples * self.world_size + else: + self.num_samples = math.ceil( + (len(self.dataset) - rank) / world_size) + self.total_size = len(self.dataset) + + self.sizes = [len(dataset) for dataset in self.dataset.datasets] + + dataset_weight = [ + torch.ones(s) * max(self.sizes) / s * r / sum(self.dataset_ratio) + for i, (r, s) in enumerate(zip(self.dataset_ratio, self.sizes)) + ] + self.weights = torch.cat(dataset_weight) + + def __iter__(self) -> Iterator[int]: + """Iterate the indices.""" + # deterministically shuffle based on epoch and seed + g = torch.Generator() + g.manual_seed(self.seed + self.epoch) + + indices = torch.multinomial( + self.weights, len(self.weights), generator=g, + replacement=True).tolist() + + # add extra samples to make it evenly divisible + if self.round_up: + indices = ( + indices * + int(self.total_size / len(indices) + 1))[:self.total_size] + + # subsample + indices = indices[self.rank:self.total_size:self.world_size] + + return iter(indices) + + def __len__(self) -> int: + """The number of samples in this rank.""" + return self.num_samples + + def set_epoch(self, epoch: int) -> None: + """Sets the epoch for this sampler. + + When :attr:`shuffle=True`, this ensures all replicas use a different + random ordering for each epoch. Otherwise, the next iteration of this + sampler will yield the same ordering. + + Args: + epoch (int): Epoch number. + """ + self.epoch = epoch diff --git a/projects/Detic/README.md b/projects/Detic/README.md index 871b426e895..98cd705b040 100644 --- a/projects/Detic/README.md +++ b/projects/Detic/README.md @@ -1,3 +1,5 @@ +# Note: This project has been deprecated, please use [Detic_new](../Detic_new). + # Detecting Twenty-thousand Classes using Image-level Supervision ## Description diff --git a/projects/Detic_new/README.md b/projects/Detic_new/README.md new file mode 100644 index 00000000000..914ecd906d8 --- /dev/null +++ b/projects/Detic_new/README.md @@ -0,0 +1,248 @@ +# Detecting Twenty-thousand Classes using Image-level Supervision + +## Description + +**Detic**: A **Det**ector with **i**mage **c**lasses that can use image-level labels to easily train detectors. + +

    + +> [**Detecting Twenty-thousand Classes using Image-level Supervision**](http://arxiv.org/abs/2201.02605), +> Xingyi Zhou, Rohit Girdhar, Armand Joulin, Philipp Krähenbühl, Ishan Misra, +> *ECCV 2022 ([arXiv 2201.02605](http://arxiv.org/abs/2201.02605))* + +## Usage + + + +## Installation + +Detic requires to install CLIP. + +```shell +pip install git+https://github.com/openai/CLIP.git +``` + +## Prepare Datasets + +It is recommended to download and extract the dataset somewhere outside the project directory and symlink the dataset root to `$MMDETECTION/data` as below. If your folder structure is different, you may need to change the corresponding paths in config files. + +### LVIS + +LVIS dataset is adopted as box-labeled data, [LVIS](https://www.lvisdataset.org/) is available from official website or mirror. You need to generate `lvis_v1_train_norare.json` according to the [official prepare datasets](https://github.com/facebookresearch/Detic/blob/main/datasets/README.md#coco-and-lvis) for open-vocabulary LVIS, which removes the labels of 337 rare-class from training. The directory should be like this. + +```shell +mmdetection +├── data +│ ├── lvis +│ │ ├── annotations +│ │ | ├── lvis_v1_train.json +│ │ | ├── lvis_v1_val.json +│ │ | ├── lvis_v1_train_norare.json +│ │ ├── train2017 +│ │ ├── val2017 +``` + +### ImageNet-LVIS + +ImageNet-LVIS is adopted as image-labeled data. You can download [ImageNet-21K](https://www.image-net.org/download.php) dataset from the official website. Then you need to unzip the overlapping classes of LVIS and convert them into LVIS annotation format according to the [official prepare datasets](https://github.com/facebookresearch/Detic/blob/main/datasets/README.md#imagenet-21k). The directory should be like this. + +```shell +mmdetection +├── data +│ ├── imagenet +│ │ ├── annotations +│ │ | ├── imagenet_lvis_image_info.json +│ │ ├── ImageNet-21K +│ │ | ├── n00007846 +│ │ | ├── n01318894 +│ │ | ├── ... +``` + +### Metadata + +`data/metadata/` is the preprocessed meta-data (included in the repo). Please follow the [official instruction](https://github.com/facebookresearch/Detic/blob/main/datasets/README.md#metadata) to pre-process the LVIS dataset. You will generate `lvis_v1_train_cat_info.json` for Federated loss, which contains the frequency of each category of training set of LVIS. In addition, ` lvis_v1_clip_a+cname.npy` is the pre-computed CLIP embeddings for each category of LVIS. The directory should be like this. + +```shell +mmdetection +├── data +│ ├── metadata +│ │ ├── lvis_v1_train_cat_info.json +│ │ ├── lvis_v1_clip_a+cname.npy +``` + +## Demo + +Here we provide the Detic model for the open vocabulary demo. This model is trained on combined LVIS-COCO and ImageNet-21K for better demo purposes. LVIS models do not detect persons well due to its federated annotation protocol. LVIS+COCO models give better visual results. + +| Backbone | Training data | Config | Download | +| :------: | :----------------------------: | :-------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| Swin-B | LVIS & COCO & ImageNet-21K | [config](./configs/detic_centernet2_swin-b_fpn_4x_lvis_coco_in21k.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/detic/detic_centernet2_swin-b_fpn_4x_lvis-coco-in21k/detic_centernet2_swin-b_fpn_4x_lvis-coco-in21k_20230120-0d301978.pth) | + +You can also download other models from [official model zoo](https://github.com/facebookresearch/Detic/blob/main/docs/MODEL_ZOO.md), and convert the format by run + +```shell +python tools/model_converters/detic_to_mmdet.py --src /path/to/detic_weight.pth --dst /path/to/mmdet_weight.pth +``` + +### Inference with existing dataset vocabulary + +You can detect classes of existing dataset with `--texts` command: + +```shell +python demo/image_demo.py \ + ${IMAGE_PATH} \ + ${CONFIG_PATH} \ + ${MODEL_PATH} \ + --texts lvis \ + --pred-score-thr 0.5 \ + --palette 'random' +``` + +![image](https://user-images.githubusercontent.com/12907710/213624759-f0a2ba0c-0f5c-4424-a350-5ba5349e5842.png) + +### Inference with custom vocabularies + +Detic can detects any class given class names by using CLIP. You can detect customized classes with `--texts` command: + +```shell +python demo/image_demo.py \ + ${IMAGE_PATH} \ + ${CONFIG_PATH} \ + ${MODEL_PATH} \ + --texts 'headphone . webcam . paper . coffe.' \ + --pred-score-thr 0.3 \ + --palette 'random' +``` + +![image](https://user-images.githubusercontent.com/12907710/213624637-e9e8a313-9821-4782-a18a-4408c876852b.png) + +Note that `headphone`, `paper` and `coffe` (typo intended) are not LVIS classes. Despite the misspelled class name, Detic can produce a reasonable detection for `coffe`. + +## Models and Results + +### Training + +There are two stages in the whole training process. The first stage is to train a model using images with box labels as the baseline. The second stage is to finetune from the baseline model and leverage image-labeled data. + +#### First stage + +To train the baseline with box-supervised, run + +```shell +bash ./tools/dist_train.sh projects/Detic_new/detic_centernet2_r50_fpn_4x_lvis_boxsup.py 8 +``` + +| Model (Config) | mask mAP | mask mAP(official) | mask mAP_rare | mask mAP_rare(officical) | Download | +| :---------------------------------------------------------------------------------------------: | :------: | :----------------: | :-----------: | :----------------------: | :------: | +| [detic_centernet2_r50_fpn_4x_lvis_boxsup](./configs/detic_centernet2_r50_fpn_4x_lvis_boxsup.py) | 31.6 | 31.5 | 26.6 | 25.6 | | + +#### Second stage + +The second stage uses both object detection and image classification datasets. + +##### Multi-Datasets Config + +We provide improved dataset_wrapper `ConcatDataset` to concatenate multiple datasets, all datasets could have different annotation types and different pipelines (e.g., image_size). You can also obtain the index of `dataset_source` for each sample through ` get_dataset_source` . We provide sampler `MultiDataSampler` to custom the ratios of different datasets. Beside, we provide batch_sampler `MultiDataAspectRatioBatchSampler` to enable different datasets to have different batchsizes. The config of multiple datasets is as follows: + +```python +dataset_det = dict( + type='ClassBalancedDataset', + oversample_thr=1e-3, + dataset=dict( + type='LVISV1Dataset', + data_root='data/lvis/', + ann_file='annotations/lvis_v1_train.json', + data_prefix=dict(img=''), + filter_cfg=dict(filter_empty_gt=True, min_size=32), + pipeline=train_pipeline_det, + backend_args=backend_args)) + +dataset_cls = dict( + type='ImageNetLVISV1Dataset', + data_root='data/imagenet', + ann_file='annotations/imagenet_lvis_image_info.json', + data_prefix=dict(img='ImageNet-LVIS/'), + pipeline=train_pipeline_cls, + backend_args=backend_args) + +train_dataloader = dict( + batch_size=[8, 32], + num_workers=2, + persistent_workers=True, + sampler=dict( + type='MultiDataSampler', + dataset_ratio=[1, 4]), + batch_sampler=dict( + type='MultiDataAspectRatioBatchSampler', + num_datasets=2), + dataset=dict( + type='ConcatDataset', + datasets=[dataset_det, dataset_cls])) +``` + +###### Note: + +- If the one of the multiple datasets is `ConcatDataset` , it is still considered as a dataset for `num_datasets` in `MultiDataAspectRatioBatchSampler`. + +To finetune the baseline model with image-labeled data, run: + +```shell +bash ./tools/dist_train.sh projects/Detic_new/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py 8 +``` + +| Model (Config) | mask mAP | mask mAP(official) | mask mAP_rare | mask mAP_rare(officical) | Download | +| :-----------------------------------------------------------------------------------------------------: | :------: | :----------------: | :-----------: | :----------------------: | :------: | +| [detic_centernet2_r50_fpn_4x_lvis_in21k-lvis](./configs/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py) | 32.9 | 33.2 | 30.9 | 29.7 | | + +#### Standard LVIS Results + +| Model (Config) | mask mAP | mask mAP(official) | mask mAP_rare | mask mAP_rare(officical) | Download | +| :-----------------------------------------------------------------------------------------------------------: | :------: | :----------------: | :-----------: | :----------------------: | :------: | +| [detic_centernet2_r50_fpn_4x_lvis_boxsup](./configs/detic_centernet2_r50_fpn_4x_lvis_boxsup.py) | 31.6 | 31.5 | 26.6 | 25.6 | | +| [detic_centernet2_r50_fpn_4x_lvis_in21k-lvis](./configs/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py) | 32.9 | 33.2 | 30.9 | 29.7 | | +| [detic_centernet2_swin-b_fpn_4x_lvis_boxsup](./configs/detic_centernet2_swin-b_fpn_4x_lvis_boxsup.py) | 40.7 | 40.7 | 38.0 | 35.9 | | +| [detic_centernet2_swin-b_fpn_4x_lvis_in21k-lvis](./configs/detic_centernet2_swin-b_fpn_4x_lvis_in21k-lvis.py) | 41.7 | 41.7 | 41.7 | 41.7 | | + +#### Open-vocabulary LVIS Results + +| Model (Config) | mask mAP | mask mAP(official) | mask mAP_rare | mask mAP_rare(officical) | Download | +| :-------------------------------------------------------------------------------------------------------------: | :------: | :----------------: | :-----------: | :----------------------: | :------: | +| [detic_centernet2_r50_fpn_4x_lvisbase_boxsup](./configs/detic_centernet2_r50_fpn_4x_lvisbase_boxsup.py) | 30.4 | 30.2 | 16.2 | 16.4 | | +| [detic_centernet2_r50_fpn_4x_lvisbase_in21k-lvis](./configs/detic_centernet2_r50_fpn_4x_lvisbase_in21k-lvis.py) | 32.6 | 32.4 | 27.4 | 24.9 | | + +### Testing + +#### Test Command + +To evaluate a model with a trained model, run + +```shell +python ./tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} +``` + +#### Open-vocabulary LVIS Results + +The models are converted from the official model zoo. + +| Model (Config) | mask mAP | mask mAP_novel | +| :-------------------------------------------------------------------------------------------------------------------: | :------: | :------------: | +| [detic_centernet2_swin-b_fpn_4x_lvisbase_boxsup](./configs/detic_centernet2_swin-b_fpn_4x_lvisbase_boxsup.py) | 38.4 | 21.9 | +| [detic_centernet2_swin-b_fpn_4x_lvisbase_in21k-lvis](./configs/detic_centernet2_swin-b_fpn_4x_lvisbase_in21k-lvis.py) | 40.7 | 34.0 | + +###### Note: + +- The open-vocabulary LVIS setup is LVIS without rare class annotations in training, termed `lvisbase`. We evaluate rare classes as novel classes in testing. +- ` in21k-lvis` denotes that the model use the overlap classes between ImageNet-21K and LVIS as image-labeled data. + +## Citation + +If you find Detic is useful in your research or applications, please consider giving a star 🌟 to the [official repository](https://github.com/facebookresearch/Detic) and citing Detic by the following BibTeX entry. + +```BibTeX +@inproceedings{zhou2022detecting, + title={Detecting Twenty-thousand Classes using Image-level Supervision}, + author={Zhou, Xingyi and Girdhar, Rohit and Joulin, Armand and Kr{\"a}henb{\"u}hl, Philipp and Misra, Ishan}, + booktitle={ECCV}, + year={2022} +} +``` diff --git a/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis-base_boxsup.py b/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis-base_boxsup.py new file mode 100644 index 00000000000..8ca57b77d7f --- /dev/null +++ b/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis-base_boxsup.py @@ -0,0 +1,9 @@ +_base_ = './detic_centernet2_r50_fpn_4x_lvis_boxsup.py' + +# 'lvis_v1_train_norare.json' is the annotations of lvis_v1 +# removing the labels of 337 rare-class +train_dataloader = dict( + dataset=dict( + type='ClassBalancedDataset', + oversample_thr=1e-3, + dataset=dict(ann_file='annotations/lvis_v1_train_norare.json'))) diff --git a/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis-base_in21k-lvis.py b/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis-base_in21k-lvis.py new file mode 100644 index 00000000000..e8f34abd8ed --- /dev/null +++ b/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis-base_in21k-lvis.py @@ -0,0 +1,81 @@ +_base_ = './detic_centernet2_r50_fpn_4x_lvis_boxsup.py' + +image_size_det = (640, 640) +image_size_cls = (320, 320) + +# backend = 'pillow' +backend_args = None + +train_pipeline_det = [ + dict(type='LoadImageFromFile', backend_args=backend_args), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict( + type='RandomResize', + scale=image_size_det, + ratio_range=(0.1, 2.0), + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=image_size_det, + recompute_bbox=True, + allow_negative_crop=True), + dict(type='FilterAnnotations', min_gt_bbox_wh=(1e-2, 1e-2)), + dict(type='RandomFlip', prob=0.5), + dict(type='PackDetInputs') +] + +train_pipeline_cls = [ + dict(type='LoadImageFromFile', backend_args=backend_args), + dict(type='LoadAnnotations', with_bbox=False, with_label=True), + dict( + type='RandomResize', + scale=image_size_cls, + ratio_range=(0.5, 1.5), + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=image_size_cls, + recompute_bbox=False, + bbox_clip_border=False, + allow_negative_crop=True), + dict(type='RandomFlip', prob=0.5), + dict(type='PackDetInputs') +] + +# 'lvis_v1_train_norare.json' is the annotations of lvis_v1 +# removing the labels of 337 rare-class +dataset_det = dict( + type='ClassBalancedDataset', + oversample_thr=1e-3, + dataset=dict( + type='LVISV1Dataset', + data_root='data/lvis/', + ann_file='annotations/lvis_v1_train.json', + data_prefix=dict(img=''), + filter_cfg=dict(filter_empty_gt=True, min_size=32), + pipeline=train_pipeline_det, + backend_args=backend_args)) + +dataset_cls = dict( + type='ImageNetLVISV1Dataset', + data_root='data/imagenet', + ann_file='annotations/imagenet_lvis_image_info.json', + data_prefix=dict(img='ImageNet-LVIS/'), + pipeline=train_pipeline_cls, + backend_args=backend_args) + +train_dataloader = dict( + _delete_=True, + batch_size=[8, 32], + num_workers=2, + persistent_workers=True, + sampler=dict(type='MultiDataSampler', dataset_ratio=[1, 4]), + batch_sampler=dict( + type='MultiDataAspectRatioBatchSampler', num_datasets=2), + dataset=dict(type='ConcatDataset', datasets=[dataset_det, dataset_cls])) + +load_from = './first_stage/detic_centernet2_r50_fpn_4x_lvis-base_boxsup.pth' + +find_unused_parameters = True diff --git a/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis_boxsup.py b/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis_boxsup.py new file mode 100644 index 00000000000..96875aaede6 --- /dev/null +++ b/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis_boxsup.py @@ -0,0 +1,409 @@ +_base_ = 'mmdet::_base_/default_runtime.py' +custom_imports = dict( + imports=['projects.Detic_new.detic'], allow_failed_imports=False) + +num_classes = 1203 +lvis_cat_frequency_info = 'data/metadata/lvis_v1_train_cat_info.json' + +# 'data/metadata/lvis_v1_clip_a+cname.npy' is pre-computed +# CLIP embeddings for each category +cls_layer = dict( + type='ZeroShotClassifier', + zs_weight_path='data/metadata/lvis_v1_clip_a+cname.npy', + zs_weight_dim=512, + use_bias=0.0, + norm_weight=True, + norm_temperature=50.0) +reg_layer = [ + dict(type='Linear', in_features=1024, out_features=1024), + dict(type='ReLU', inplace=True), + dict(type='Linear', in_features=1024, out_features=4) +] + +model = dict( + type='Detic', + data_preprocessor=dict( + type='DetDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True, + pad_size_divisor=32), + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(1, 2, 3), + norm_cfg=dict(type='BN', requires_grad=False), + norm_eval=True, + init_cfg=dict( + type='Pretrained', + checkpoint='https://miil-public-eu.oss-eu-central-1.aliyuncs.com/' + 'model-zoo/ImageNet_21K_P/models/resnet50_miil_21k.pth')), + neck=dict( + type='FPN', + in_channels=[512, 1024, 2048], + out_channels=256, + start_level=0, + add_extra_convs='on_output', + num_outs=5, + init_cfg=dict(type='Caffe2Xavier', layer='Conv2d'), + relu_before_extra_convs=True), + rpn_head=dict( + type='CenterNetRPNHead', + num_classes=1, + in_channels=256, + stacked_convs=4, + feat_channels=256, + strides=[8, 16, 32, 64, 128], + conv_bias=True, + norm_cfg=dict(type='GN', num_groups=32, requires_grad=True), + loss_cls=dict( + type='HeatmapFocalLoss', + alpha=0.25, + beta=4.0, + gamma=2.0, + pos_weight=0.5, + neg_weight=0.5, + loss_weight=1.0, + ignore_high_fp=0.85, + ), + loss_bbox=dict(type='GIoULoss', eps=1e-6, loss_weight=1.0), + ), + roi_head=dict( + type='DeticRoIHead', + num_stages=3, + stage_loss_weights=[1.0, 1.0, 1.0], + bbox_roi_extractor=dict( + type='SingleRoIExtractor', + roi_layer=dict( + type='RoIAlign', + output_size=7, + sampling_ratio=0, + use_torchvision=True), + out_channels=256, + featmap_strides=[8, 16, 32], + # approximately equal to + # canonical_box_size=224, canonical_level=4 in D2 + finest_scale=112), + bbox_head=[ + dict( + type='DeticBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=num_classes, + cls_predictor_cfg=cls_layer, + reg_predictor_cfg=reg_layer, + use_fed_loss=True, + cat_freq_path=lvis_cat_frequency_info, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=0.1, + loss_weight=1.0)), + dict( + type='DeticBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=num_classes, + cls_predictor_cfg=cls_layer, + reg_predictor_cfg=reg_layer, + use_fed_loss=True, + cat_freq_path=lvis_cat_frequency_info, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.05, 0.05, 0.1, 0.1]), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=0.1, + loss_weight=1.0)), + dict( + type='DeticBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=num_classes, + cls_predictor_cfg=cls_layer, + reg_predictor_cfg=reg_layer, + use_fed_loss=True, + cat_freq_path=lvis_cat_frequency_info, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.033, 0.033, 0.067, 0.067]), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=0.1, loss_weight=1.0)) + ], + mask_roi_extractor=dict( + type='SingleRoIExtractor', + roi_layer=dict(type='RoIAlign', output_size=14, sampling_ratio=0), + out_channels=256, + featmap_strides=[8, 16, 32], + # approximately equal to + # canonical_box_size=224, canonical_level=4 in D2 + finest_scale=112), + mask_head=dict( + type='FCNMaskHead', + num_convs=4, + in_channels=256, + conv_out_channels=256, + class_agnostic=True, + num_classes=num_classes, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))), + # model training and testing settings + train_cfg=dict( + rpn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + allowed_border=0, + pos_weight=-1, + debug=False), + rpn_proposal=dict( + score_thr=0.0001, + nms_pre=4000, + max_per_img=2000, + nms=dict(type='nms', iou_threshold=0.9), + min_bbox_size=0), + rcnn=[ + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.6, + neg_iou_thr=0.6, + min_pos_iou=0.6, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + mask_size=28, + pos_weight=-1, + debug=False), + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.7, + min_pos_iou=0.7, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=False), + mask_size=28, + pos_weight=-1, + debug=False), + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.8, + neg_iou_thr=0.8, + min_pos_iou=0.8, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=False), + mask_size=28, + pos_weight=-1, + debug=False) + ]), + test_cfg=dict( + rpn=dict( + score_thr=0.0001, + nms_pre=1000, + max_per_img=256, + nms=dict(type='nms', iou_threshold=0.9), + min_bbox_size=0), + rcnn=dict( + score_thr=0.02, + nms=dict(type='nms', iou_threshold=0.5), + max_per_img=300, + mask_thr_binary=0.5))) + +# backend = 'pillow' +backend_args = None + +train_pipeline = [ + dict(type='LoadImageFromFile', backend_args=backend_args), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict( + type='RandomResize', + scale=(640, 640), + ratio_range=(0.1, 2.0), + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=(640, 640), + recompute_bbox=True, + allow_negative_crop=True), + dict(type='FilterAnnotations', min_gt_bbox_wh=(1e-2, 1e-2)), + dict(type='RandomFlip', prob=0.5), + dict(type='PackDetInputs') +] + +test_pipeline = [ + dict( + type='LoadImageFromFile', + backend_args=backend_args, + imdecode_backend=backend_args), + dict( + type='Resize', + scale=(1333, 800), + keep_ratio=True, + backend=backend_args), + dict( + type='LoadAnnotations', + with_bbox=True, + with_mask=True, + poly2mask=False), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor', 'text', 'custom_entities')) +] + +val_pipeline = [ + dict( + type='LoadImageFromFile', + backend_args=backend_args, + imdecode_backend=backend_args), + dict( + type='Resize', + scale=(1333, 800), + keep_ratio=True, + backend=backend_args), + dict( + type='LoadAnnotations', + with_bbox=True, + with_mask=True, + poly2mask=False), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] + +train_dataloader = dict( + batch_size=8, + num_workers=2, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + batch_sampler=dict(type='AspectRatioBatchSampler'), + dataset=dict( + type='ClassBalancedDataset', + oversample_thr=1e-3, + dataset=dict( + type='LVISV1Dataset', + data_root='data/lvis/', + ann_file='annotations/lvis_v1_train_norare.json', + data_prefix=dict(img=''), + filter_cfg=dict(filter_empty_gt=True, min_size=32), + pipeline=train_pipeline, + backend_args=backend_args))) + +val_dataloader = dict( + batch_size=8, + num_workers=2, + persistent_workers=True, + drop_last=False, + pin_memory=True, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type='LVISV1Dataset', + data_root='data/lvis/', + ann_file='annotations/lvis_v1_val.json', + data_prefix=dict(img=''), + pipeline=val_pipeline, + return_classes=False)) + +test_dataloader = dict( + batch_size=8, + num_workers=2, + persistent_workers=True, + drop_last=False, + pin_memory=True, + sampler=dict(type='DefaultSampler', shuffle=False), + dataset=dict( + type='LVISV1Dataset', + data_root='data/lvis/', + ann_file='annotations/lvis_v1_val.json', + data_prefix=dict(img=''), + pipeline=test_pipeline, + return_classes=True)) + +val_evaluator = dict( + type='LVISMetric', + ann_file='data/lvis/annotations/lvis_v1_val.json', + metric=['bbox', 'segm']) +test_evaluator = val_evaluator + +# training schedule for 90k with batch_size of 64 +# with total batch_size of 16, 90k iters is equivalent to '1x' (12 epochs) +# with total batch_size of 64, 90k iters is equivalent to '4x' +max_iter = 90000 +train_cfg = dict( + type='IterBasedTrainLoop', max_iters=max_iter, val_interval=90000) +val_cfg = dict(type='ValLoop') +test_cfg = dict(type='TestLoop') + +# Enable automatic-mixed-precision training with AmpOptimWrapper. +optim_wrapper = dict( + type='OptimWrapper', + optimizer=dict(type='AdamW', lr=0.0002, weight_decay=0.0001), + paramwise_cfg=dict(norm_decay_mult=0.), + clip_grad=dict(max_norm=1.0, norm_type=2)) + +param_scheduler = [ + dict( + type='LinearLR', + start_factor=0.0001, + by_epoch=False, + begin=0, + end=10000), + dict( + type='CosineAnnealingLR', + begin=0, + by_epoch=False, + T_max=max_iter, + ) +] + +# only keep latest 5 checkpoints +default_hooks = dict( + checkpoint=dict(by_epoch=False, interval=30000, max_keep_ckpts=5), + logger=dict(type='LoggerHook', interval=50)) diff --git a/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py b/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py new file mode 100644 index 00000000000..73a8f1b96a7 --- /dev/null +++ b/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py @@ -0,0 +1,84 @@ +_base_ = './detic_centernet2_r50_fpn_4x_lvis_boxsup.py' + +image_size_det = (640, 640) +image_size_cls = (320, 320) + +# backend = 'pillow' +backend_args = None + +train_pipeline_det = [ + dict(type='LoadImageFromFile', backend_args=backend_args), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict( + type='RandomResize', + scale=image_size_det, + ratio_range=(0.1, 2.0), + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=image_size_det, + recompute_bbox=True, + allow_negative_crop=True), + dict(type='FilterAnnotations', min_gt_bbox_wh=(1e-2, 1e-2)), + dict(type='RandomFlip', prob=0.5), + dict(type='PackDetInputs') +] + +train_pipeline_cls = [ + dict(type='LoadImageFromFile', backend_args=backend_args), + dict(type='LoadAnnotations', with_bbox=False, with_label=True), + dict( + type='RandomResize', + scale=image_size_cls, + ratio_range=(0.5, 1.5), + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=image_size_cls, + recompute_bbox=False, + bbox_clip_border=False, + allow_negative_crop=True), + dict(type='RandomFlip', prob=0.5), + dict(type='PackDetInputs') +] + +dataset_det = dict( + type='ClassBalancedDataset', + oversample_thr=1e-3, + dataset=dict( + type='LVISV1Dataset', + data_root='data/lvis/', + ann_file='annotations/lvis_v1_train.json', + data_prefix=dict(img=''), + filter_cfg=dict(filter_empty_gt=True, min_size=32), + pipeline=train_pipeline_det, + backend_args=backend_args)) + +dataset_cls = dict( + type='ImageNetLVISV1Dataset', + data_root='data/imagenet', + ann_file='annotations/imagenet_lvis_image_info.json', + data_prefix=dict(img='ImageNet-LVIS/'), + pipeline=train_pipeline_cls, + backend_args=backend_args) + +train_dataloader = dict( + _delete_=True, + batch_size=[8, 32], + num_workers=2, + persistent_workers=True, + sampler=dict(type='MultiDataSampler', dataset_ratio=[1, 4]), + batch_sampler=dict( + type='MultiDataAspectRatioBatchSampler', num_datasets=2), + dataset=dict(type='ConcatDataset', datasets=[dataset_det, dataset_cls])) + +param_scheduler = [ + dict( + type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, end=1000) +] + +load_from = './first_stage/detic_centernet2_r50_fpn_4x_lvis_boxsup.pth' + +find_unused_parameters = True diff --git a/projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis-base_boxsup.py b/projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis-base_boxsup.py new file mode 100644 index 00000000000..efedd111e2f --- /dev/null +++ b/projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis-base_boxsup.py @@ -0,0 +1,9 @@ +_base_ = './detic_centernet2_swin-b_fpn_4x_lvis_boxsup.py' + +# 'lvis_v1_train_norare.json' is the annotations of lvis_v1 +# removing the labels of 337 rare-class +train_dataloader = dict( + dataset=dict( + type='ClassBalancedDataset', + oversample_thr=1e-3, + dataset=dict(ann_file='annotations/lvis_v1_train_norare.json'))) diff --git a/projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis-base_in21k-lvis.py b/projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis-base_in21k-lvis.py new file mode 100644 index 00000000000..1df70970e2d --- /dev/null +++ b/projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis-base_in21k-lvis.py @@ -0,0 +1,118 @@ +_base_ = './detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py' + +image_size_det = (896, 896) +image_size_cls = (448, 448) + +model = dict( + backbone=dict( + _delete_=True, + type='SwinTransformer', + embed_dims=128, + depths=[2, 2, 18, 2], + num_heads=[4, 8, 16, 32], + window_size=7, + mlp_ratio=4, + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.3, + patch_norm=True, + out_indices=(1, 2, 3), + with_cp=False), + neck=dict(in_channels=[256, 512, 1024])) + +backend_args = None +train_pipeline_det = [ + dict(type='LoadImageFromFile', backend_args=backend_args), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict( + type='RandomResize', + scale=image_size_det, + ratio_range=(0.1, 2.0), + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=image_size_det, + recompute_bbox=True, + allow_negative_crop=True), + dict(type='FilterAnnotations', min_gt_bbox_wh=(1e-2, 1e-2)), + dict(type='RandomFlip', prob=0.5), + dict(type='PackDetInputs') +] + +train_pipeline_cls = [ + dict(type='LoadImageFromFile', backend_args=backend_args), + dict(type='LoadAnnotations', with_bbox=False, with_label=True), + dict( + type='RandomResize', + scale=image_size_cls, + ratio_range=(0.5, 1.5), + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=image_size_cls, + recompute_bbox=False, + bbox_clip_border=False, + allow_negative_crop=True), + dict(type='RandomFlip', prob=0.5), + dict(type='PackDetInputs') +] + +# 'lvis_v1_train_norare.json' is the annotations of lvis_v1 +# removing the labels of 337 rare-class +dataset_det = dict( + type='ClassBalancedDataset', + oversample_thr=1e-3, + dataset=dict( + type='LVISV1Dataset', + data_root='data/lvis/', + ann_file='annotations/lvis_v1_train_norare.json', + data_prefix=dict(img=''), + filter_cfg=dict(filter_empty_gt=True, min_size=32), + pipeline=train_pipeline_det, + backend_args=backend_args)) + +dataset_cls = dict( + type='ImageNetLVISV1Dataset', + data_root='data/imagenet', + ann_file='annotations/imagenet_lvis_image_info.json', + data_prefix=dict(img='ImageNet-LVIS/'), + pipeline=train_pipeline_cls, + backend_args=backend_args) + +train_dataloader = dict( + _delete_=True, + batch_size=[4, 16], + num_workers=2, + persistent_workers=True, + sampler=dict(type='MultiDataSampler', dataset_ratio=[1, 4]), + batch_sampler=dict( + type='MultiDataAspectRatioBatchSampler', num_datasets=2), + dataset=dict(type='ConcatDataset', datasets=[dataset_det, dataset_cls])) + +# training schedule for 180k +max_iter = 180000 +train_cfg = dict( + type='IterBasedTrainLoop', max_iters=max_iter, val_interval=180000) + +optim_wrapper = dict( + type='OptimWrapper', + optimizer=dict(type='AdamW', lr=0.0001, weight_decay=0.0001)) + +param_scheduler = [ + dict( + type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, + end=1000), + dict( + type='CosineAnnealingLR', + begin=0, + by_epoch=False, + T_max=max_iter, + ) +] + +load_from = './first_stage/detic_centernet2_swin-b_fpn_4x_lvis-base_boxsup.pth' +find_unused_parameters = True diff --git a/projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis_boxsup.py b/projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis_boxsup.py new file mode 100644 index 00000000000..ce04a815fac --- /dev/null +++ b/projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis_boxsup.py @@ -0,0 +1,78 @@ +_base_ = './detic_centernet2_r50_fpn_4x_lvis_boxsup.py' + +model = dict( + backbone=dict( + _delete_=True, + type='SwinTransformer', + embed_dims=128, + depths=[2, 2, 18, 2], + num_heads=[4, 8, 16, 32], + window_size=7, + mlp_ratio=4, + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.3, + patch_norm=True, + out_indices=(1, 2, 3), + with_cp=False, + convert_weights=True, + init_cfg=dict( + type='Pretrained', + checkpoint='https://github.com/SwinTransformer/storage/releases/' + 'download/v1.0.0/swin_base_patch4_window7_224_22k.pth')), + neck=dict(in_channels=[256, 512, 1024])) + +# backend = 'pillow' +backend_args = None + +train_pipeline = [ + dict(type='LoadImageFromFile', backend_args=backend_args), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict( + type='RandomResize', + scale=(896, 896), + ratio_range=(0.1, 2.0), + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=(896, 896), + recompute_bbox=True, + allow_negative_crop=True), + dict(type='FilterAnnotations', min_gt_bbox_wh=(1e-2, 1e-2)), + dict(type='RandomFlip', prob=0.5), + dict(type='PackDetInputs') +] + +train_dataloader = dict( + dataset=dict( + type='ClassBalancedDataset', + oversample_thr=1e-3, + dataset=dict(pipeline=train_pipeline))) + +# training schedule for 180k +max_iter = 180000 +train_cfg = dict( + type='IterBasedTrainLoop', max_iters=max_iter, val_interval=180000) + +# Enable automatic-mixed-precision training with AmpOptimWrapper. +optim_wrapper = dict( + type='OptimWrapper', + optimizer=dict(type='AdamW', lr=0.0001, weight_decay=0.0001)) + +param_scheduler = [ + dict( + type='LinearLR', + start_factor=0.0001, + by_epoch=False, + begin=0, + end=10000), + dict( + type='CosineAnnealingLR', + begin=0, + by_epoch=False, + T_max=max_iter, + ) +] diff --git a/projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis_coco_in21k.py b/projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis_coco_in21k.py new file mode 100644 index 00000000000..a9ab2c69ada --- /dev/null +++ b/projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis_coco_in21k.py @@ -0,0 +1,2 @@ +# not support training, only for testing +_base_ = './detic_centernet2_swin-b_fpn_4x_lvis_in21k-lvis.py' diff --git a/projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis_in21k-lvis.py b/projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis_in21k-lvis.py new file mode 100644 index 00000000000..de358ac3460 --- /dev/null +++ b/projects/Detic_new/configs/detic_centernet2_swin-b_fpn_4x_lvis_in21k-lvis.py @@ -0,0 +1,116 @@ +_base_ = './detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py' + +image_size_det = (896, 896) +image_size_cls = (448, 448) + +model = dict( + backbone=dict( + _delete_=True, + type='SwinTransformer', + embed_dims=128, + depths=[2, 2, 18, 2], + num_heads=[4, 8, 16, 32], + window_size=7, + mlp_ratio=4, + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.3, + patch_norm=True, + out_indices=(1, 2, 3), + with_cp=False), + neck=dict(in_channels=[256, 512, 1024])) + +backend_args = None +train_pipeline_det = [ + dict(type='LoadImageFromFile', backend_args=backend_args), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict( + type='RandomResize', + scale=image_size_det, + ratio_range=(0.1, 2.0), + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=image_size_det, + recompute_bbox=True, + allow_negative_crop=True), + dict(type='FilterAnnotations', min_gt_bbox_wh=(1e-2, 1e-2)), + dict(type='RandomFlip', prob=0.5), + dict(type='PackDetInputs') +] + +train_pipeline_cls = [ + dict(type='LoadImageFromFile', backend_args=backend_args), + dict(type='LoadAnnotations', with_bbox=False, with_label=True), + dict( + type='RandomResize', + scale=image_size_cls, + ratio_range=(0.5, 1.5), + keep_ratio=True), + dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=image_size_cls, + recompute_bbox=False, + bbox_clip_border=False, + allow_negative_crop=True), + dict(type='RandomFlip', prob=0.5), + dict(type='PackDetInputs') +] + +dataset_det = dict( + type='ClassBalancedDataset', + oversample_thr=1e-3, + dataset=dict( + type='LVISV1Dataset', + data_root='data/lvis/', + ann_file='annotations/lvis_v1_train.json', + data_prefix=dict(img=''), + filter_cfg=dict(filter_empty_gt=True, min_size=32), + pipeline=train_pipeline_det, + backend_args=backend_args)) + +dataset_cls = dict( + type='ImageNetLVISV1Dataset', + data_root='data/imagenet', + ann_file='annotations/imagenet_lvis_image_info.json', + data_prefix=dict(img='ImageNet-LVIS/'), + pipeline=train_pipeline_cls, + backend_args=backend_args) + +train_dataloader = dict( + _delete_=True, + batch_size=[4, 16], + num_workers=2, + persistent_workers=True, + sampler=dict(type='MultiDataSampler', dataset_ratio=[1, 4]), + batch_sampler=dict( + type='MultiDataAspectRatioBatchSampler', num_datasets=2), + dataset=dict(type='ConcatDataset', datasets=[dataset_det, dataset_cls])) + +# training schedule for 180k +max_iter = 180000 +train_cfg = dict( + type='IterBasedTrainLoop', max_iters=max_iter, val_interval=180000) + +optim_wrapper = dict( + type='OptimWrapper', + optimizer=dict(type='AdamW', lr=0.0001, weight_decay=0.0001)) + +param_scheduler = [ + dict( + type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, + end=1000), + dict( + type='CosineAnnealingLR', + begin=0, + by_epoch=False, + T_max=max_iter, + ) +] + +load_from = './first_stage/detic_centernet2_swin-b_fpn_4x_lvis_boxsup.pth' +find_unused_parameters = True diff --git a/projects/Detic_new/detic/__init__.py b/projects/Detic_new/detic/__init__.py new file mode 100644 index 00000000000..e4b0d7bb8c8 --- /dev/null +++ b/projects/Detic_new/detic/__init__.py @@ -0,0 +1,13 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from .centernet_rpn_head import CenterNetRPNHead +from .detic import Detic +from .detic_bbox_head import DeticBBoxHead +from .detic_roi_head import DeticRoIHead +from .heatmap_focal_loss import HeatmapFocalLoss +from .imagenet_lvis import ImageNetLVISV1Dataset +from .zero_shot_classifier import ZeroShotClassifier + +__all__ = [ + 'CenterNetRPNHead', 'Detic', 'DeticBBoxHead', 'DeticRoIHead', + 'ZeroShotClassifier', 'HeatmapFocalLoss', 'ImageNetLVISV1Dataset' +] diff --git a/projects/Detic_new/detic/centernet_rpn_head.py b/projects/Detic_new/detic/centernet_rpn_head.py new file mode 100644 index 00000000000..629872824d7 --- /dev/null +++ b/projects/Detic_new/detic/centernet_rpn_head.py @@ -0,0 +1,573 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import copy +from typing import Dict, List, Optional, Sequence, Tuple + +import torch +import torch.nn as nn +from mmcv.cnn import Scale +from mmengine import ConfigDict +from mmengine.structures import InstanceData +from torch import Tensor + +from mmdet.models.dense_heads import CenterNetUpdateHead +from mmdet.models.utils import unpack_gt_instances +from mmdet.registry import MODELS +from mmdet.structures import SampleList +from mmdet.structures.bbox import bbox2distance +from mmdet.utils import (ConfigType, InstanceList, OptConfigType, + OptInstanceList, reduce_mean) +from .iou_loss import IOULoss + +# from .heatmap_focal_loss import binary_heatmap_focal_loss_jit +INF = 1000000000 +RangeType = Sequence[Tuple[int, int]] + + +@MODELS.register_module() +class CenterNetRPNHead(CenterNetUpdateHead): + """CenterNetUpdateHead is an improved version of CenterNet in CenterNet2. + + Paper link ``_. + Args: + num_classes (int): Number of categories excluding the background + category. + in_channels (int): Number of channel in the input feature map. + regress_ranges (Sequence[Tuple[int, int]]): Regress range of multiple + level points. + hm_min_radius (int): Heatmap target minimum radius of cls branch. + Defaults to 4. + hm_min_overlap (float): Heatmap target minimum overlap of cls branch. + Defaults to 0.8. + more_pos_thresh (float): The filtering threshold when the cls branch + adds more positive samples. Defaults to 0.2. + more_pos_topk (int): The maximum number of additional positive samples + added to each gt. Defaults to 9. + soft_weight_on_reg (bool): Whether to use the soft target of the + cls branch as the soft weight of the bbox branch. + Defaults to False. + loss_cls (:obj:`ConfigDict` or dict): Config of cls loss. Defaults to + dict(type='GaussianFocalLoss', loss_weight=1.0) + loss_bbox (:obj:`ConfigDict` or dict): Config of bbox loss. Defaults to + dict(type='GIoULoss', loss_weight=2.0). + norm_cfg (:obj:`ConfigDict` or dict, optional): dictionary to construct + and config norm layer. Defaults to + ``norm_cfg=dict(type='GN', num_groups=32, requires_grad=True)``. + train_cfg (:obj:`ConfigDict` or dict, optional): Training config. + Unused in CenterNet. Reserved for compatibility with + SingleStageDetector. + test_cfg (:obj:`ConfigDict` or dict, optional): Testing config + of CenterNet. + """ + + def __init__(self, + num_classes: int, + in_channels: int, + regress_ranges: RangeType = ((0, 80), (64, 160), (128, 320), + (256, 640), (512, INF)), + hm_min_radius: int = 4, + hm_min_overlap: float = 0.8, + more_pos: bool = False, + more_pos_thresh: float = 0.2, + more_pos_topk: int = 9, + soft_weight_on_reg: bool = False, + not_clamp_box: bool = False, + loss_cls: ConfigType = dict( + type='HeatmapFocalLoss', + alpha=0.25, + beta=4.0, + gamma=2.0, + pos_weight=1.0, + neg_weight=1.0, + sigmoid_clamp=1e-4, + ignore_high_fp=-1.0, + loss_weight=1.0, + ), + loss_bbox: ConfigType = dict( + type='GIoULoss', loss_weight=2.0), + norm_cfg: OptConfigType = dict( + type='GN', num_groups=32, requires_grad=True), + train_cfg: OptConfigType = None, + test_cfg: OptConfigType = None, + **kwargs) -> None: + super().__init__( + num_classes=num_classes, + in_channels=in_channels, + # loss_bbox=loss_bbox, + loss_cls=loss_cls, + norm_cfg=norm_cfg, + train_cfg=train_cfg, + test_cfg=test_cfg, + **kwargs) + self.soft_weight_on_reg = soft_weight_on_reg + self.hm_min_radius = hm_min_radius + self.more_pos_thresh = more_pos_thresh + self.more_pos_topk = more_pos_topk + self.more_pos = more_pos + self.not_clamp_box = not_clamp_box + self.delta = (1 - hm_min_overlap) / (1 + hm_min_overlap) + self.loss_bbox = IOULoss('giou') + + # GaussianFocalLoss must be sigmoid mode + self.use_sigmoid_cls = True + self.cls_out_channels = num_classes + + self.regress_ranges = regress_ranges + self.scales = nn.ModuleList([Scale(1.0) for _ in self.strides]) + + def _init_layers(self) -> None: + """Initialize layers of the head.""" + self._init_reg_convs() + self._init_predictor() + + def forward_single(self, x: Tensor, scale: Scale, + stride: int) -> Tuple[Tensor, Tensor]: + """Forward features of a single scale level. + + Args: + x (Tensor): FPN feature maps of the specified stride. + scale (:obj:`mmcv.cnn.Scale`): Learnable scale module to resize + the bbox prediction. + stride (int): The corresponding stride for feature maps. + + Returns: + tuple: scores for each class, bbox predictions of + input feature maps. + """ + for m in self.reg_convs: + x = m(x) + cls_score = self.conv_cls(x) + bbox_pred = self.conv_reg(x) + # scale the bbox_pred of different level + # float to avoid overflow when enabling FP16 + bbox_pred = scale(bbox_pred).float() + # bbox_pred needed for gradient computation has been modified + # by F.relu(bbox_pred) when run with PyTorch 1.10. So replace + # F.relu(bbox_pred) with bbox_pred.clamp(min=0) + bbox_pred = bbox_pred.clamp(min=0) + return cls_score, bbox_pred # score aligned, box larger + + def loss_by_feat( + self, + cls_scores: List[Tensor], + bbox_preds: List[Tensor], + batch_gt_instances: InstanceList, + batch_img_metas: List[dict], + batch_gt_instances_ignore: OptInstanceList = None + ) -> Dict[str, Tensor]: + """Calculate the loss based on the features extracted by the detection + head. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level, + each is a 4D-tensor, the channel number is num_classes. + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level, each is a 4D-tensor, the channel number is 4. + batch_gt_instances (list[:obj:`InstanceData`]): Batch of + gt_instance. It usually includes ``bboxes`` and ``labels`` + attributes. + batch_img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + batch_gt_instances_ignore (list[:obj:`InstanceData`], optional): + Batch of gt_instances_ignore. It includes ``bboxes`` attribute + data that is ignored during training and testing. + Defaults to None. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + + num_imgs = cls_scores[0].size(0) + assert len(cls_scores) == len(bbox_preds) + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + all_level_points = self.prior_generator.grid_priors( + featmap_sizes, + dtype=bbox_preds[0].dtype, + device=bbox_preds[0].device) + + # 1 flatten outputs + flatten_cls_scores = [ + cls_score.permute(0, 2, 3, 1).reshape(-1, self.cls_out_channels) + for cls_score in cls_scores + ] + flatten_bbox_preds = [ + bbox_pred.permute(0, 2, 3, 1).reshape(-1, 4) + for bbox_pred in bbox_preds + ] + flatten_cls_scores = torch.cat(flatten_cls_scores) + flatten_bbox_preds = torch.cat(flatten_bbox_preds) + + # repeat points to align with bbox_preds + flatten_points = torch.cat( + [points.repeat(num_imgs, 1) for points in all_level_points]) + + assert (torch.isfinite(flatten_bbox_preds).all().item()) + + # 2 calc reg and cls branch targets + cls_targets, bbox_targets = self.get_targets(all_level_points, + batch_gt_instances) + + # 3 pos index for cls branch + featmap_sizes = flatten_points.new_tensor(featmap_sizes) + + if self.more_pos: + pos_inds, cls_labels = self.add_cls_pos_inds( + flatten_points, flatten_bbox_preds, featmap_sizes, + batch_gt_instances) + else: + pos_inds = self._get_label_inds(batch_gt_instances, + batch_img_metas, featmap_sizes) + + # 4 calc cls loss + if pos_inds is None: + # num_gts=0 + num_pos_cls = bbox_preds[0].new_tensor(0, dtype=torch.float) + else: + num_pos_cls = bbox_preds[0].new_tensor( + len(pos_inds), dtype=torch.float) + num_pos_cls = max(reduce_mean(num_pos_cls), 1.0) + + cat_agn_cls_targets = cls_targets.max(dim=1)[0] # M + + cls_pos_loss, cls_neg_loss = self.loss_cls( + flatten_cls_scores.squeeze(1), cat_agn_cls_targets, pos_inds, + num_pos_cls) + + # 5 calc reg loss + pos_bbox_inds = torch.nonzero( + bbox_targets.max(dim=1)[0] >= 0).squeeze(1) + pos_bbox_preds = flatten_bbox_preds[pos_bbox_inds] + pos_bbox_targets = bbox_targets[pos_bbox_inds] + + bbox_weight_map = cls_targets.max(dim=1)[0] + bbox_weight_map = bbox_weight_map[pos_bbox_inds] + bbox_weight_map = bbox_weight_map if self.soft_weight_on_reg \ + else torch.ones_like(bbox_weight_map) + + num_pos_bbox = max(reduce_mean(bbox_weight_map.sum()), 1.0) + + if len(pos_bbox_inds) > 0: + bbox_loss = self.loss_bbox( + pos_bbox_preds, + pos_bbox_targets, + bbox_weight_map, + reduction='sum') / num_pos_bbox + else: + bbox_loss = flatten_bbox_preds.sum() * 0 + + return dict( + loss_bbox=bbox_loss, + loss_cls_pos=cls_pos_loss, + loss_cls_neg=cls_neg_loss) + + def loss_and_predict( + self, + x: Tuple[Tensor], + batch_data_samples: SampleList, + proposal_cfg: Optional[ConfigDict] = None + ) -> Tuple[dict, InstanceList]: + """Perform forward propagation of the head, then calculate loss and + predictions from the features and data samples. + + Args: + x (tuple[Tensor]): Features from FPN. + batch_data_samples (list[:obj:`DetDataSample`]): Each item contains + the meta information of each image and corresponding + annotations. + proposal_cfg (ConfigDict, optional): Test / postprocessing + configuration, if None, test_cfg would be used. + Defaults to None. + + Returns: + tuple: the return value is a tuple contains: + + - losses: (dict[str, Tensor]): A dictionary of loss components. + - predictions (list[:obj:`InstanceData`]): Detection + results of each image after the post process. + """ + outputs = unpack_gt_instances(batch_data_samples) + (batch_gt_instances, batch_gt_instances_ignore, + batch_img_metas) = outputs + + outs = self(x) + + loss_inputs = outs + (batch_gt_instances, batch_img_metas, + batch_gt_instances_ignore) + losses = self.loss_by_feat(*loss_inputs) + predictions = self.predict_by_feat( + *outs, batch_img_metas=batch_img_metas, cfg=proposal_cfg) + return losses, predictions + + def _predict_by_feat_single(self, + cls_score_list: List[Tensor], + bbox_pred_list: List[Tensor], + score_factor_list: List[Tensor], + mlvl_priors: List[Tensor], + img_meta: dict, + cfg: ConfigDict, + rescale: bool = False, + with_nms: bool = True) -> InstanceData: + """Transform a single image's features extracted from the head into + bbox results. + + Args: + cls_score_list (list[Tensor]): Box scores from all scale + levels of a single image, each item has shape + (num_priors * num_classes, H, W). + bbox_pred_list (list[Tensor]): Box energies / deltas from + all scale levels of a single image, each item has shape + (num_priors * 4, H, W). + score_factor_list (list[Tensor]): Score factor from all scale + levels of a single image, each item has shape + (num_priors * 1, H, W). + mlvl_priors (list[Tensor]): Each element in the list is + the priors of a single level in feature pyramid. In all + anchor-based methods, it has shape (num_priors, 4). In + all anchor-free methods, it has shape (num_priors, 2) + when `with_stride=True`, otherwise it still has shape + (num_priors, 4). + img_meta (dict): Image meta info. + cfg (mmengine.Config): Test / postprocessing configuration, + if None, test_cfg would be used. + rescale (bool): If True, return boxes in original image space. + Defaults to False. + with_nms (bool): If True, do nms before return boxes. + Defaults to True. + + Returns: + :obj:`InstanceData`: Detection results of each image + after the post process. + Each item usually contains following keys. + + - scores (Tensor): Classification scores, has a shape + (num_instance, ) + - labels (Tensor): Labels of bboxes, has a shape + (num_instances, ). + - bboxes (Tensor): Has a shape (num_instances, 4), + the last dimension 4 arrange as (x1, y1, x2, y2). + """ + + cfg = self.test_cfg if cfg is None else cfg + cfg = copy.deepcopy(cfg) + nms_pre = cfg.get('nms_pre', -1) + + mlvl_bbox_preds = [] + mlvl_valid_priors = [] + mlvl_scores = [] + mlvl_labels = [] + + for level_idx, (cls_score, bbox_pred, score_factor, priors) in \ + enumerate(zip(cls_score_list, bbox_pred_list, + score_factor_list, mlvl_priors)): + + assert cls_score.size()[-2:] == bbox_pred.size()[-2:] + + bbox_pred = bbox_pred * self.strides[level_idx] + + dim = self.bbox_coder.encode_size + bbox_pred = bbox_pred.permute(1, 2, 0).reshape(-1, dim) + cls_score = cls_score.permute(1, 2, + 0).reshape(-1, self.cls_out_channels) + heatmap = cls_score.sigmoid() + score_thr = cfg.get('score_thr', 0) + + candidate_inds = heatmap > score_thr # 0.05 + pre_nms_top_n = candidate_inds.sum() # N + pre_nms_top_n = pre_nms_top_n.clamp(max=nms_pre) # N + + heatmap = heatmap[candidate_inds] # n + + candidate_nonzeros = candidate_inds.nonzero() # n + box_loc = candidate_nonzeros[:, 0] # n + labels = candidate_nonzeros[:, 1] # n + + bbox_pred = bbox_pred[box_loc] # n x 4 + per_grids = priors[box_loc] # n x 2 + + if candidate_inds.sum().item() > pre_nms_top_n.item(): + heatmap, top_k_indices = \ + heatmap.topk(pre_nms_top_n, sorted=False) + labels = labels[top_k_indices] + bbox_pred = bbox_pred[top_k_indices] + per_grids = per_grids[top_k_indices] + + bboxes = torch.stack([ + per_grids[:, 0] - bbox_pred[:, 0], + per_grids[:, 1] - bbox_pred[:, 1], + per_grids[:, 0] + bbox_pred[:, 2], + per_grids[:, 1] + bbox_pred[:, 3], + ], + dim=1) # n x 4 + + # avoid invalid boxes in RoI heads + bboxes[:, 2] = torch.max(bboxes[:, 2], bboxes[:, 0] + 0.01) + bboxes[:, 3] = torch.max(bboxes[:, 3], bboxes[:, 1] + 0.01) + + # bboxes = self.bbox_coder.decode(per_grids, bbox_pred) + # # avoid invalid boxes in RoI heads + # bboxes[:, 2] = torch.max(bboxes[:, 2], bboxes[:, 0] + 0.01) + # bboxes[:, 3] = torch.max(bboxes[:, 3], bboxes[:, 1] + 0.01) + + mlvl_bbox_preds.append(bboxes) + mlvl_valid_priors.append(priors) + mlvl_scores.append(torch.sqrt(heatmap)) + mlvl_labels.append(labels) + + results = InstanceData() + results.bboxes = torch.cat(mlvl_bbox_preds) + results.scores = torch.cat(mlvl_scores) + results.labels = torch.cat(mlvl_labels) + + return self._bbox_post_process( + results=results, + cfg=cfg, + rescale=rescale, + with_nms=with_nms, + img_meta=img_meta) + + def _get_label_inds(self, batch_gt_instances, batch_img_metas, + shapes_per_level): + ''' + Inputs: + batch_gt_instances: [n_i], sum n_i = N + shapes_per_level: L x 2 [(h_l, w_l)]_L + Returns: + pos_inds: N' + labels: N' + ''' + pos_inds = [] + L = len(self.strides) + B = len(batch_gt_instances) + shapes_per_level = shapes_per_level.long() + loc_per_level = (shapes_per_level[:, 0] * + shapes_per_level[:, 1]).long() # L + level_bases = [] + s = 0 + for i in range(L): + level_bases.append(s) + s = s + B * loc_per_level[i] + level_bases = shapes_per_level.new_tensor(level_bases).long() # L + strides_default = shapes_per_level.new_tensor( + self.strides).float() # L + for im_i in range(B): + targets_per_im = batch_gt_instances[im_i] + if hasattr(targets_per_im, 'bboxes'): + bboxes = targets_per_im.bboxes # n x 4 + else: + bboxes = targets_per_im.labels.new_tensor( + [], dtype=torch.float).reshape(-1, 4) + n = bboxes.shape[0] + centers = ((bboxes[:, [0, 1]] + bboxes[:, [2, 3]]) / 2) # n x 2 + centers = centers.view(n, 1, 2).expand(n, L, 2).contiguous() + if self.not_clamp_box: + h, w = batch_img_metas[im_i]._image_size + centers[:, :, 0].clamp_(min=0).clamp_(max=w - 1) + centers[:, :, 1].clamp_(min=0).clamp_(max=h - 1) + strides = strides_default.view(1, L, 1).expand(n, L, 2) + centers_inds = (centers / strides).long() # n x L x 2 + Ws = shapes_per_level[:, 1].view(1, L).expand(n, L) + pos_ind = level_bases.view(1, L).expand(n, L) \ + + im_i * loc_per_level.view(1, L).expand(n, L) \ + + centers_inds[:, :, 1] * Ws + centers_inds[:, :, 0] # n x L + is_cared_in_the_level = self.assign_fpn_level(bboxes) + pos_ind = pos_ind[is_cared_in_the_level].view(-1) + + pos_inds.append(pos_ind) # n' + pos_inds = torch.cat(pos_inds, dim=0).long() + return pos_inds # N, N + + def assign_fpn_level(self, boxes): + ''' + Inputs: + boxes: n x 4 + size_ranges: L x 2 + Return: + is_cared_in_the_level: n x L + ''' + size_ranges = boxes.new_tensor(self.regress_ranges).view( + len(self.regress_ranges), 2) # L x 2 + crit = ((boxes[:, 2:] - boxes[:, :2])**2).sum(dim=1)**0.5 / 2 # n + n, L = crit.shape[0], size_ranges.shape[0] + crit = crit.view(n, 1).expand(n, L) + size_ranges_expand = size_ranges.view(1, L, 2).expand(n, L, 2) + is_cared_in_the_level = (crit >= size_ranges_expand[:, :, 0]) & \ + (crit <= size_ranges_expand[:, :, 1]) + return is_cared_in_the_level + + def _get_targets_single(self, gt_instances: InstanceData, points: Tensor, + regress_ranges: Tensor, + strides: Tensor) -> Tuple[Tensor, Tensor]: + """Compute classification and bbox targets for a single image.""" + num_points = points.size(0) + num_gts = len(gt_instances) + gt_labels = gt_instances.labels + + if not hasattr(gt_instances, 'bboxes'): + gt_bboxes = gt_labels.new_tensor([], dtype=torch.float) + else: + gt_bboxes = gt_instances.bboxes + + if not hasattr(gt_instances, 'bboxes') or num_gts == 0: + return gt_labels.new_full((num_points, + self.num_classes), + self.num_classes, + dtype=torch.float), \ + gt_bboxes.new_full((num_points, 4), -1) + + # Calculate the regression tblr target corresponding to all points + points = points[:, None].expand(num_points, num_gts, 2) + gt_bboxes = gt_bboxes[None].expand(num_points, num_gts, 4) + strides = strides[:, None, None].expand(num_points, num_gts, 2) + + bbox_target = bbox2distance(points, gt_bboxes) # M x N x 4 + + # condition1: inside a gt bbox + inside_gt_bbox_mask = bbox_target.min(dim=2)[0] > 0 # M x N + + # condition2: Calculate the nearest points from + # the upper, lower, left and right ranges from + # the center of the gt bbox + centers = ((gt_bboxes[..., [0, 1]] + gt_bboxes[..., [2, 3]]) / 2) + centers_discret = ((centers / strides).int() * strides).float() + \ + strides / 2 + + centers_discret_dist = points - centers_discret + dist_x = centers_discret_dist[..., 0].abs() + dist_y = centers_discret_dist[..., 1].abs() + inside_gt_center3x3_mask = (dist_x <= strides[..., 0]) & \ + (dist_y <= strides[..., 0]) + + # condition3: limit the regression range for each location + bbox_target_wh = bbox_target[..., :2] + bbox_target[..., 2:] + crit = (bbox_target_wh**2).sum(dim=2)**0.5 / 2 + inside_fpn_level_mask = (crit >= regress_ranges[:, [0]]) & \ + (crit <= regress_ranges[:, [1]]) + bbox_target_mask = inside_gt_bbox_mask & \ + inside_gt_center3x3_mask & \ + inside_fpn_level_mask + + # Calculate the distance weight map + gt_center_peak_mask = ((centers_discret_dist**2).sum(dim=2) == 0) + weighted_dist = ((points - centers)**2).sum(dim=2) # M x N + weighted_dist[gt_center_peak_mask] = 0 + + areas = (gt_bboxes[..., 2] - gt_bboxes[..., 0]) * ( + gt_bboxes[..., 3] - gt_bboxes[..., 1]) + radius = self.delta**2 * 2 * areas + radius = torch.clamp(radius, min=self.hm_min_radius**2) + weighted_dist = weighted_dist / radius + + # Calculate bbox_target + bbox_weighted_dist = weighted_dist.clone() + bbox_weighted_dist[bbox_target_mask == 0] = INF * 1.0 + min_dist, min_inds = bbox_weighted_dist.min(dim=1) + bbox_target = bbox_target[range(len(bbox_target)), + min_inds] # M x N x 4 --> M x 4 + bbox_target[min_dist == INF] = -INF + + # Convert to feature map scale + bbox_target /= strides[:, 0, :].repeat(1, 2) + + # Calculate cls_target + cls_target = self._create_heatmaps_from_dist(weighted_dist, gt_labels) + + return cls_target, bbox_target diff --git a/projects/Detic_new/detic/detic.py b/projects/Detic_new/detic/detic.py new file mode 100644 index 00000000000..7028690ace9 --- /dev/null +++ b/projects/Detic_new/detic/detic.py @@ -0,0 +1,274 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import copy +from typing import List, Union + +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmengine.logging import print_log +from torch import Tensor + +from mmdet.datasets import LVISV1Dataset +from mmdet.models.detectors.cascade_rcnn import CascadeRCNN +from mmdet.registry import MODELS +from mmdet.structures import SampleList + + +class CLIPTextEncoder(nn.Module): + + def __init__(self, model_name='ViT-B/32'): + super().__init__() + import clip + from clip.simple_tokenizer import SimpleTokenizer + self.tokenizer = SimpleTokenizer() + pretrained_model, _ = clip.load(model_name, device='cpu') + self.clip = pretrained_model + + @property + def device(self): + return self.clip.device + + @property + def dtype(self): + return self.clip.dtype + + def tokenize(self, + texts: Union[str, List[str]], + context_length: int = 77) -> torch.LongTensor: + if isinstance(texts, str): + texts = [texts] + + sot_token = self.tokenizer.encoder['<|startoftext|>'] + eot_token = self.tokenizer.encoder['<|endoftext|>'] + all_tokens = [[sot_token] + self.tokenizer.encode(text) + [eot_token] + for text in texts] + result = torch.zeros(len(all_tokens), context_length, dtype=torch.long) + + for i, tokens in enumerate(all_tokens): + if len(tokens) > context_length: + st = torch.randint(len(tokens) - context_length + 1, + (1, ))[0].item() + tokens = tokens[st:st + context_length] + result[i, :len(tokens)] = torch.tensor(tokens) + + return result + + def forward(self, text): + text = self.tokenize(text) + text_features = self.clip.encode_text(text) + return text_features + + +def get_class_weight(original_caption, prompt_prefix='a '): + if isinstance(original_caption, str): + if original_caption == 'coco': + from mmdet.datasets import CocoDataset + class_names = CocoDataset.METAINFO['classes'] + elif original_caption == 'cityscapes': + from mmdet.datasets import CityscapesDataset + class_names = CityscapesDataset.METAINFO['classes'] + elif original_caption == 'voc': + from mmdet.datasets import VOCDataset + class_names = VOCDataset.METAINFO['classes'] + elif original_caption == 'openimages': + from mmdet.datasets import OpenImagesDataset + class_names = OpenImagesDataset.METAINFO['classes'] + elif original_caption == 'lvis': + from mmdet.datasets import LVISV1Dataset + class_names = LVISV1Dataset.METAINFO['classes'] + else: + if not original_caption.endswith('.'): + original_caption = original_caption + ' . ' + original_caption = original_caption.split(' . ') + class_names = list(filter(lambda x: len(x) > 0, original_caption)) + + # for test.py + else: + class_names = list(original_caption) + + text_encoder = CLIPTextEncoder() + text_encoder.eval() + texts = [prompt_prefix + x for x in class_names] + print_log(f'Computing text embeddings for {len(class_names)} classes.') + embeddings = text_encoder(texts).detach().permute(1, 0).contiguous().cpu() + return class_names, embeddings + + +def reset_cls_layer_weight(roi_head, weight): + if type(weight) == str: + print_log(f'Resetting cls_layer_weight from file: {weight}') + zs_weight = torch.tensor( + np.load(weight), + dtype=torch.float32).permute(1, 0).contiguous() # D x C + else: + zs_weight = weight + zs_weight = torch.cat( + [zs_weight, zs_weight.new_zeros( + (zs_weight.shape[0], 1))], dim=1) # D x (C + 1) + zs_weight = F.normalize(zs_weight, p=2, dim=0) + zs_weight = zs_weight.to('cuda') + num_classes = zs_weight.shape[-1] + + for bbox_head in roi_head.bbox_head: + bbox_head.num_classes = num_classes + del bbox_head.fc_cls.zs_weight + bbox_head.fc_cls.zs_weight = zs_weight + + +@MODELS.register_module() +class Detic(CascadeRCNN): + + def __init__(self, + with_image_labels: bool = False, + sync_caption_batch: bool = False, + fp16: bool = False, + roi_head_name: str = '', + cap_batch_ratio: int = 4, + with_caption: bool = False, + dynamic_classifier: bool = False, + **kwargs) -> None: + super().__init__(**kwargs) + + self._entities = LVISV1Dataset.METAINFO['classes'] + self._text_prompts = None + # Turn on co-training with classification data + self.with_image_labels = with_image_labels + # Caption losses + self.with_caption = with_caption + # synchronize across GPUs to enlarge # "classes" + self.sync_caption_batch = sync_caption_batch + # Ratio between detection data and caption data + self.cap_batch_ratio = cap_batch_ratio + self.fp16 = fp16 + self.roi_head_name = roi_head_name + # dynamic class sampling when training with 21K classes, + # Federated loss is enabled when DYNAMIC_CLASSIFIER is on + self.dynamic_classifier = dynamic_classifier + self.return_proposal = False + if self.dynamic_classifier: + self.freq_weight = kwargs.pop('freq_weight') + self.num_classes = kwargs.pop('num_classes') + self.num_sample_cats = kwargs.pop('num_sample_cats') + + def loss(self, batch_inputs: Tensor, + batch_data_samples: SampleList) -> dict: + """Calculate losses from a batch of inputs and data samples. + + Args: + batch_inputs (Tensor): Input images of shape (N, C, H, W). + These should usually be mean centered and std scaled. + batch_data_samples (List[:obj:`DetDataSample`]): The batch + data samples. It usually includes information such + as `gt_instance` or `gt_panoptic_seg` or `gt_sem_seg`. + + Returns: + dict: A dictionary of loss components + """ + + x = self.extract_feat(batch_inputs) + losses = dict() + + # RPN forward and loss + if self.with_rpn: + proposal_cfg = self.train_cfg.get('rpn_proposal', + self.test_cfg.rpn) + rpn_data_samples = copy.deepcopy(batch_data_samples) + # set cat_id of gt_labels to 0 in RPN + for data_sample in rpn_data_samples: + data_sample.gt_instances.labels = \ + torch.zeros_like(data_sample.gt_instances.labels) + + rpn_losses, rpn_results_list = self.rpn_head.loss_and_predict( + x, rpn_data_samples, proposal_cfg=proposal_cfg) + + # avoid get same name with roi_head loss + keys = rpn_losses.keys() + for key in list(keys): + if 'loss' in key and 'rpn' not in key: + rpn_losses[f'rpn_{key}'] = rpn_losses.pop(key) + losses.update(rpn_losses) + # if not hasattr(batch_data_samples[0].gt_instances, 'bboxes'): + # losses.update({k: v * 0 for k, v in rpn_losses.items()}) + # else: + # losses.update(rpn_losses) + else: + assert batch_data_samples[0].get('proposals', None) is not None + # use pre-defined proposals in InstanceData for the second stage + # to extract ROI features. + rpn_results_list = [ + data_sample.proposals for data_sample in batch_data_samples + ] + + roi_losses = self.roi_head.loss(x, rpn_results_list, + batch_data_samples) + + losses.update(roi_losses) + + return losses + + def predict(self, + batch_inputs: Tensor, + batch_data_samples: SampleList, + rescale: bool = True) -> SampleList: + """Predict results from a batch of inputs and data samples with post- + processing. + + Args: + batch_inputs (Tensor): Inputs with shape (N, C, H, W). + batch_data_samples (List[:obj:`DetDataSample`]): The Data + Samples. It usually includes information such as + `gt_instance`, `gt_panoptic_seg` and `gt_sem_seg`. + rescale (bool): Whether to rescale the results. + Defaults to True. + + Returns: + list[:obj:`DetDataSample`]: Return the detection results of the + input images. The returns value is DetDataSample, + which usually contain 'pred_instances'. And the + ``pred_instances`` usually contains following keys. + + - scores (Tensor): Classification scores, has a shape + (num_instance, ) + - labels (Tensor): Labels of bboxes, has a shape + (num_instances, ). + - bboxes (Tensor): Has a shape (num_instances, 4), + the last dimension 4 arrange as (x1, y1, x2, y2). + - masks (Tensor): Has a shape (num_instances, H, W). + """ + # For single image inference + if 'custom_entities' in batch_data_samples[0]: + text_prompts = batch_data_samples[0].text + if text_prompts != self._text_prompts: + self._text_prompts = text_prompts + class_names, zs_weight = get_class_weight(text_prompts) + self._entities = class_names + reset_cls_layer_weight(self.roi_head, zs_weight) + + assert self.with_bbox, 'Bbox head must be implemented.' + + x = self.extract_feat(batch_inputs) + + # If there are no pre-defined proposals, use RPN to get proposals + if batch_data_samples[0].get('proposals', None) is None: + rpn_results_list = self.rpn_head.predict( + x, batch_data_samples, rescale=False) + else: + rpn_results_list = [ + data_sample.proposals for data_sample in batch_data_samples + ] + + results_list = self.roi_head.predict( + x, rpn_results_list, batch_data_samples, rescale=rescale) + + for data_sample, pred_instances in zip(batch_data_samples, + results_list): + if len(pred_instances) > 0: + label_names = [] + for labels in pred_instances.labels: + label_names.append(self._entities[labels]) + # for visualization + pred_instances.label_names = label_names + data_sample.pred_instances = pred_instances + + return batch_data_samples diff --git a/projects/Detic_new/detic/detic_bbox_head.py b/projects/Detic_new/detic/detic_bbox_head.py new file mode 100644 index 00000000000..8779494ba13 --- /dev/null +++ b/projects/Detic_new/detic/detic_bbox_head.py @@ -0,0 +1,434 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import json +from typing import List, Optional + +import torch +from mmengine.config import ConfigDict +from mmengine.structures import InstanceData +from torch import Tensor +from torch.nn import functional as F + +from mmdet.models.layers import multiclass_nms +from mmdet.models.losses import accuracy +from mmdet.models.roi_heads.bbox_heads import Shared2FCBBoxHead +from mmdet.models.utils import empty_instances +from mmdet.registry import MODELS +from mmdet.structures.bbox import get_box_tensor, scale_boxes +from mmdet.utils import ConfigType, InstanceList + + +def load_class_freq(path='datasets/metadata/lvis_v1_train_cat_info.json', + freq_weight=0.5): + cat_info = json.load(open(path, 'r')) + cat_info = torch.tensor( + [c['image_count'] for c in sorted(cat_info, key=lambda x: x['id'])]) + freq_weight = cat_info.float()**freq_weight + return freq_weight + + +def get_fed_loss_inds(labels, num_sample_cats, C, weight=None): + + appeared = torch.unique(labels) # C' + prob = appeared.new_ones(C + 1).float() + prob[-1] = 0 + if len(appeared) < num_sample_cats: + if weight is not None: + prob[:C] = weight.float().clone() + prob[appeared] = 0 + more_appeared = torch.multinomial( + prob, num_sample_cats - len(appeared), replacement=False) + appeared = torch.cat([appeared, more_appeared]) + return appeared + + +@MODELS.register_module() +class DeticBBoxHead(Shared2FCBBoxHead): + + def __init__(self, + image_loss_weight: float = 0.1, + use_fed_loss: bool = False, + cat_freq_path: str = '', + fed_loss_freq_weight: float = 0.5, + fed_loss_num_cat: int = 50, + cls_predictor_cfg: ConfigType = dict( + type='ZeroShotClassifier'), + *args, + **kwargs) -> None: + super().__init__(*args, **kwargs) + # reconstruct fc_cls and fc_reg since input channels are changed + assert self.with_cls + + self.cls_predictor_cfg = cls_predictor_cfg + cls_channels = self.num_classes + self.cls_predictor_cfg.update( + in_features=self.cls_last_dim, out_features=cls_channels) + self.fc_cls = MODELS.build(self.cls_predictor_cfg) + + self.init_cfg += [ + dict(type='Caffe2Xavier', override=dict(name='reg_fcs')) + ] + + self.image_loss_weight = image_loss_weight + self.use_fed_loss = use_fed_loss + self.cat_freq_path = cat_freq_path + self.fed_loss_freq_weight = fed_loss_freq_weight + self.fed_loss_num_cat = fed_loss_num_cat + + if self.use_fed_loss: + freq_weight = load_class_freq(cat_freq_path, fed_loss_freq_weight) + self.register_buffer('freq_weight', freq_weight) + else: + self.freq_weight = None + + def _predict_by_feat_single( + self, + roi: Tensor, + cls_score: Tensor, + bbox_pred: Tensor, + img_meta: dict, + rescale: bool = False, + rcnn_test_cfg: Optional[ConfigDict] = None) -> InstanceData: + """Transform a single image's features extracted from the head into + bbox results. + + Args: + roi (Tensor): Boxes to be transformed. Has shape (num_boxes, 5). + last dimension 5 arrange as (batch_index, x1, y1, x2, y2). + cls_score (Tensor): Box scores, has shape + (num_boxes, num_classes + 1). + bbox_pred (Tensor): Box energies / deltas. + has shape (num_boxes, num_classes * 4). + img_meta (dict): image information. + rescale (bool): If True, return boxes in original image space. + Defaults to False. + rcnn_test_cfg (obj:`ConfigDict`): `test_cfg` of Bbox Head. + Defaults to None + + Returns: + :obj:`InstanceData`: Detection results of each image\ + Each item usually contains following keys. + + - scores (Tensor): Classification scores, has a shape + (num_instance, ) + - labels (Tensor): Labels of bboxes, has a shape + (num_instances, ). + - bboxes (Tensor): Has a shape (num_instances, 4), + the last dimension 4 arrange as (x1, y1, x2, y2). + """ + results = InstanceData() + if roi.shape[0] == 0: + return empty_instances([img_meta], + roi.device, + task_type='bbox', + instance_results=[results], + box_type=self.predict_box_type, + use_box_type=False, + num_classes=self.num_classes, + score_per_cls=rcnn_test_cfg is None)[0] + scores = cls_score + img_shape = img_meta['img_shape'] + num_rois = roi.size(0) + + num_classes = 1 if self.reg_class_agnostic else self.num_classes + roi = roi.repeat_interleave(num_classes, dim=0) + bbox_pred = bbox_pred.view(-1, self.bbox_coder.encode_size) + bboxes = self.bbox_coder.decode( + roi[..., 1:], bbox_pred, max_shape=img_shape) + + if rescale and bboxes.size(0) > 0: + assert img_meta.get('scale_factor') is not None + scale_factor = [1 / s for s in img_meta['scale_factor']] + bboxes = scale_boxes(bboxes, scale_factor) + + # Get the inside tensor when `bboxes` is a box type + bboxes = get_box_tensor(bboxes) + box_dim = bboxes.size(-1) + bboxes = bboxes.view(num_rois, -1) + + if rcnn_test_cfg is None: + # This means that it is aug test. + # It needs to return the raw results without nms. + results.bboxes = bboxes + results.scores = scores + else: + det_bboxes, det_labels = multiclass_nms( + bboxes, + scores, + rcnn_test_cfg.score_thr, + rcnn_test_cfg.nms, + rcnn_test_cfg.max_per_img, + box_dim=box_dim) + results.bboxes = det_bboxes[:, :-1] + results.scores = det_bboxes[:, -1] + results.labels = det_labels + return results + + def loss(self, + cls_score: Tensor, + bbox_pred: Tensor, + rois: Tensor, + labels: Tensor, + label_weights: Tensor, + bbox_targets: Tensor, + bbox_weights: Tensor, + reduction_override: Optional[str] = None) -> dict: + """Calculate the loss based on the network predictions and targets. + + Args: + cls_score (Tensor): Classification prediction + results of all class, has shape + (batch_size * num_proposals_single_image, num_classes) + bbox_pred (Tensor): Regression prediction results, + has shape + (batch_size * num_proposals_single_image, 4), the last + dimension 4 represents [tl_x, tl_y, br_x, br_y]. + rois (Tensor): RoIs with the shape + (batch_size * num_proposals_single_image, 5) where the first + column indicates batch id of each RoI. + labels (Tensor): Gt_labels for all proposals in a batch, has + shape (batch_size * num_proposals_single_image, ). + label_weights (Tensor): Labels_weights for all proposals in a + batch, has shape (batch_size * num_proposals_single_image, ). + bbox_targets (Tensor): Regression target for all proposals in a + batch, has shape (batch_size * num_proposals_single_image, 4), + the last dimension 4 represents [tl_x, tl_y, br_x, br_y]. + bbox_weights (Tensor): Regression weights for all proposals in a + batch, has shape (batch_size * num_proposals_single_image, 4). + reduction_override (str, optional): The reduction + method used to override the original reduction + method of the loss. Options are "none", + "mean" and "sum". Defaults to None, + + Returns: + dict: A dictionary of loss. + """ + + losses = dict() + + if cls_score is not None: + + if cls_score.numel() > 0: + loss_cls_ = self.sigmoid_cross_entropy_loss(cls_score, labels) + if isinstance(loss_cls_, dict): + losses.update(loss_cls_) + else: + losses['loss_cls'] = loss_cls_ + if self.custom_activation: + acc_ = self.loss_cls.get_accuracy(cls_score, labels) + losses.update(acc_) + else: + losses['acc'] = accuracy(cls_score, labels) + if bbox_pred is not None: + bg_class_ind = self.num_classes + # 0~self.num_classes-1 are FG, self.num_classes is BG + pos_inds = (labels >= 0) & (labels < bg_class_ind) + # do not perform bounding box regression for BG anymore. + if pos_inds.any(): + if self.reg_decoded_bbox: + # When the regression loss (e.g. `IouLoss`, + # `GIouLoss`, `DIouLoss`) is applied directly on + # the decoded bounding boxes, it decodes the + # already encoded coordinates to absolute format. + bbox_pred = self.bbox_coder.decode(rois[:, 1:], bbox_pred) + bbox_pred = get_box_tensor(bbox_pred) + if self.reg_class_agnostic: + pos_bbox_pred = bbox_pred.view( + bbox_pred.size(0), -1)[pos_inds.type(torch.bool)] + else: + pos_bbox_pred = bbox_pred.view( + bbox_pred.size(0), self.num_classes, + -1)[pos_inds.type(torch.bool), + labels[pos_inds.type(torch.bool)]] + + losses['loss_bbox'] = self.loss_bbox( + pos_bbox_pred, + bbox_targets[pos_inds.type(torch.bool)], + bbox_weights[pos_inds.type(torch.bool)], + avg_factor=bbox_targets.size(0), + reduction_override=reduction_override) + else: + losses['loss_bbox'] = bbox_pred[pos_inds].sum() + return losses + + def sigmoid_cross_entropy_loss(self, cls_score, labels): + if cls_score.numel() == 0: + return cls_score.new_zeros( + [1])[0] # This is more robust than .sum() * 0. + B = cls_score.shape[0] + C = cls_score.shape[1] - 1 + + target = cls_score.new_zeros(B, C + 1) + target[range(len(labels)), labels] = 1 # B x (C + 1) + target = target[:, :C] # B x C + + weight = 1 + if self.use_fed_loss and (self.freq_weight is not None): # fedloss + appeared = get_fed_loss_inds( + labels, + num_sample_cats=self.fed_loss_num_cat, + C=C, + weight=self.freq_weight) + appeared_mask = appeared.new_zeros(C + 1) + appeared_mask[appeared] = 1 # C + 1 + appeared_mask = appeared_mask[:C] + fed_w = appeared_mask.view(1, C).expand(B, C) + weight = weight * fed_w.float() + # if self.ignore_zero_cats and (self.freq_weight is not None): + # w = (self.freq_weight.view(-1) > 1e-4).float() + # weight = weight * w.view(1, C).expand(B, C) + # # import pdb; pdb.set_trace() + + cls_loss = F.binary_cross_entropy_with_logits( + cls_score[:, :-1], target, reduction='none') # B x C + loss = torch.sum(cls_loss * weight) / B + return loss + + def image_label_losses(self, cls_score, sampling_results, image_labels): + ''' + Inputs: + cls_score: N x (C + 1) + image_labels B x 1 + ''' + num_inst_per_image = [ + len(pred_instances) for pred_instances in sampling_results + ] + cls_score = cls_score.split( + num_inst_per_image, dim=0) # B x n x (C + 1) + B = len(cls_score) + loss = cls_score[0].new_zeros([1])[0] + for (score, labels, pred_instances) in zip(cls_score, image_labels, + sampling_results): + if score.shape[0] == 0: + loss += score.new_zeros([1])[0] + continue + # find out max-size idx + bboxes = pred_instances.bboxes + areas = (bboxes[:, 2] - bboxes[:, 0]) * ( + bboxes[:, 3] - bboxes[:, 1]) + idx = areas[:-1].argmax().item() if len(areas) > 1 else 0 + + for label in labels: + target = score.new_zeros(score.shape[1]) + target[label] = 1 + loss_i = F.binary_cross_entropy_with_logits( + score[idx], target, reduction='sum') + loss += loss_i / len(labels) + loss = loss / B + + return loss * self.image_loss_weight + + def refine_bboxes(self, bbox_results: dict, + batch_img_metas: List[dict]) -> InstanceList: + """Refine bboxes during training. + + Args: + bbox_results (dict): Usually is a dictionary with keys: + + - `cls_score` (Tensor): Classification scores. + - `bbox_pred` (Tensor): Box energies / deltas. + - `rois` (Tensor): RoIs with the shape (n, 5) where the first + column indicates batch id of each RoI. + - `bbox_targets` (tuple): Ground truth for proposals in a + single image. Containing the following list of Tensors: + (labels, label_weights, bbox_targets, bbox_weights) + batch_img_metas (List[dict]): List of image information. + + Returns: + list[:obj:`InstanceData`]: Refined bboxes of each image. + + Example: + >>> # xdoctest: +REQUIRES(module:kwarray) + >>> import numpy as np + >>> from mmdet.models.task_modules.samplers. + ... sampling_result import random_boxes + >>> from mmdet.models.task_modules.samplers import SamplingResult + >>> self = BBoxHead(reg_class_agnostic=True) + >>> n_roi = 2 + >>> n_img = 4 + >>> scale = 512 + >>> rng = np.random.RandomState(0) + ... batch_img_metas = [{'img_shape': (scale, scale)} + >>> for _ in range(n_img)] + >>> sampling_results = [SamplingResult.random(rng=10) + ... for _ in range(n_img)] + >>> # Create rois in the expected format + >>> roi_boxes = random_boxes(n_roi, scale=scale, rng=rng) + >>> img_ids = torch.randint(0, n_img, (n_roi,)) + >>> img_ids = img_ids.float() + >>> rois = torch.cat([img_ids[:, None], roi_boxes], dim=1) + >>> # Create other args + >>> labels = torch.randint(0, 81, (scale,)).long() + >>> bbox_preds = random_boxes(n_roi, scale=scale, rng=rng) + >>> cls_score = torch.randn((scale, 81)) + ... # For each image, pretend random positive boxes are gts + >>> bbox_targets = (labels, None, None, None) + ... bbox_results = dict(rois=rois, bbox_pred=bbox_preds, + ... cls_score=cls_score, + ... bbox_targets=bbox_targets) + >>> bboxes_list = self.refine_bboxes(sampling_results, + ... bbox_results, + ... batch_img_metas) + >>> print(bboxes_list) + """ + # bbox_targets is a tuple + cls_scores = bbox_results['cls_score'] + rois = bbox_results['rois'] + bbox_preds = bbox_results['bbox_pred'] + if self.custom_activation: + # TODO: Create a SeasawBBoxHead to simplified logic in BBoxHead + cls_scores = self.loss_cls.get_activation(cls_scores) + if cls_scores.numel() == 0: + return None + if cls_scores.shape[-1] == self.num_classes + 1: + # remove background class + cls_scores = cls_scores[:, :-1] + elif cls_scores.shape[-1] != self.num_classes: + raise ValueError('The last dim of `cls_scores` should equal to ' + '`num_classes` or `num_classes + 1`,' + f'but got {cls_scores.shape[-1]}.') + + img_ids = rois[:, 0].long().unique(sorted=True) + assert img_ids.numel() <= len(batch_img_metas) + + results_list = [] + for i in range(len(batch_img_metas)): + inds = torch.nonzero( + rois[:, 0] == i, as_tuple=False).squeeze(dim=1) + + bboxes_ = rois[inds, 1:] + bbox_pred_ = bbox_preds[inds] + img_meta_ = batch_img_metas[i] + + bboxes = self.regress(bboxes_, bbox_pred_, img_meta_) + + # don't filter gt bboxes like D2 + results = InstanceData(bboxes=bboxes) + results_list.append(results) + + return results_list + + def regress(self, priors: Tensor, bbox_pred: Tensor, + img_meta: dict) -> Tensor: + """Regress the bbox for the predicted class. Used in Cascade R-CNN. + + Args: + priors (Tensor): Priors from `rpn_head` or last stage + `bbox_head`, has shape (num_proposals, 4). + label (Tensor): Only used when `self.reg_class_agnostic` + is False, has shape (num_proposals, ). + bbox_pred (Tensor): Regression prediction of + current stage `bbox_head`. When `self.reg_class_agnostic` + is False, it has shape (n, num_classes * 4), otherwise + it has shape (n, 4). + img_meta (dict): Image meta info. + + Returns: + Tensor: Regressed bboxes, the same shape as input rois. + """ + reg_dim = self.bbox_coder.encode_size + assert bbox_pred.size()[1] == reg_dim + + max_shape = img_meta['img_shape'] + regressed_bboxes = self.bbox_coder.decode( + priors, bbox_pred, max_shape=max_shape) + return regressed_bboxes diff --git a/projects/Detic_new/detic/detic_roi_head.py b/projects/Detic_new/detic/detic_roi_head.py new file mode 100644 index 00000000000..35785cda743 --- /dev/null +++ b/projects/Detic_new/detic/detic_roi_head.py @@ -0,0 +1,440 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from typing import List, Sequence, Tuple + +import torch +from mmengine.structures import InstanceData +from torch import Tensor + +from mmdet.models.roi_heads import CascadeRoIHead +from mmdet.models.task_modules.samplers import SamplingResult +from mmdet.models.test_time_augs import merge_aug_masks +from mmdet.models.utils import empty_instances, unpack_gt_instances +from mmdet.registry import MODELS +from mmdet.structures import SampleList +from mmdet.structures.bbox import bbox2roi, get_box_tensor +from mmdet.utils import ConfigType, InstanceList, MultiConfig + + +@MODELS.register_module() +class DeticRoIHead(CascadeRoIHead): + + def __init__( + self, + *, + mult_proposal_score: bool = False, + with_image_labels: bool = False, + add_image_box: bool = False, + image_box_size: float = 1.0, + ws_num_props: int = 128, + add_feature_to_prop: bool = False, + mask_weight: float = 1.0, + one_class_per_proposal: bool = False, + **kwargs, + ): + super().__init__(**kwargs) + self.mult_proposal_score = mult_proposal_score + self.with_image_labels = with_image_labels + self.add_image_box = add_image_box + self.image_box_size = image_box_size + self.ws_num_props = ws_num_props + self.add_feature_to_prop = add_feature_to_prop + self.mask_weight = mask_weight + self.one_class_per_proposal = one_class_per_proposal + + def init_mask_head(self, mask_roi_extractor: MultiConfig, + mask_head: MultiConfig) -> None: + """Initialize mask head and mask roi extractor. + + Args: + mask_head (dict): Config of mask in mask head. + mask_roi_extractor (:obj:`ConfigDict`, dict or list): + Config of mask roi extractor. + """ + self.mask_head = MODELS.build(mask_head) + + if mask_roi_extractor is not None: + self.share_roi_extractor = False + self.mask_roi_extractor = MODELS.build(mask_roi_extractor) + else: + self.share_roi_extractor = True + self.mask_roi_extractor = self.bbox_roi_extractor + + def _refine_roi(self, x: Tuple[Tensor], rois: Tensor, + batch_img_metas: List[dict], + num_proposals_per_img: Sequence[int], **kwargs) -> tuple: + """Multi-stage refinement of RoI. + + Args: + x (tuple[Tensor]): List of multi-level img features. + rois (Tensor): shape (n, 5), [batch_ind, x1, y1, x2, y2] + batch_img_metas (list[dict]): List of image information. + num_proposals_per_img (sequence[int]): number of proposals + in each image. + + Returns: + tuple: + + - rois (Tensor): Refined RoI. + - cls_scores (list[Tensor]): Average predicted + cls score per image. + - bbox_preds (list[Tensor]): Bbox branch predictions + for the last stage of per image. + """ + # "ms" in variable names means multi-stage + ms_scores = [] + for stage in range(self.num_stages): + bbox_results = self._bbox_forward( + stage=stage, x=x, rois=rois, **kwargs) + + # split batch bbox prediction back to each image + cls_scores = bbox_results['cls_score'].sigmoid() + bbox_preds = bbox_results['bbox_pred'] + + rois = rois.split(num_proposals_per_img, 0) + cls_scores = cls_scores.split(num_proposals_per_img, 0) + ms_scores.append(cls_scores) + bbox_preds = bbox_preds.split(num_proposals_per_img, 0) + + if stage < self.num_stages - 1: + bbox_head = self.bbox_head[stage] + refine_rois_list = [] + for i in range(len(batch_img_metas)): + if rois[i].shape[0] > 0: + bbox_label = cls_scores[i][:, :-1].argmax(dim=1) + # Refactor `bbox_head.regress_by_class` to only accept + # box tensor without img_idx concatenated. + refined_bboxes = bbox_head.regress_by_class( + rois[i][:, 1:], bbox_label, bbox_preds[i], + batch_img_metas[i]) + refined_bboxes = get_box_tensor(refined_bboxes) + refined_rois = torch.cat( + [rois[i][:, [0]], refined_bboxes], dim=1) + refine_rois_list.append(refined_rois) + rois = torch.cat(refine_rois_list) + # ms_scores aligned + # average scores of each image by stages + cls_scores = [ + sum([score[i] for score in ms_scores]) / float(len(ms_scores)) + for i in range(len(batch_img_metas)) + ] # aligned + return rois, cls_scores, bbox_preds + + def predict_bbox(self, + x: Tuple[Tensor], + batch_img_metas: List[dict], + rpn_results_list: InstanceList, + rcnn_test_cfg: ConfigType, + rescale: bool = False, + **kwargs) -> InstanceList: + """Perform forward propagation of the bbox head and predict detection + results on the features of the upstream network. + + Args: + x (tuple[Tensor]): Feature maps of all scale level. + batch_img_metas (list[dict]): List of image information. + rpn_results_list (list[:obj:`InstanceData`]): List of region + proposals. + rcnn_test_cfg (obj:`ConfigDict`): `test_cfg` of R-CNN. + rescale (bool): If True, return boxes in original image space. + Defaults to False. + + Returns: + list[:obj:`InstanceData`]: Detection results of each image + after the post process. + Each item usually contains following keys. + + - scores (Tensor): Classification scores, has a shape + (num_instance, ) + - labels (Tensor): Labels of bboxes, has a shape + (num_instances, ). + - bboxes (Tensor): Has a shape (num_instances, 4), + the last dimension 4 arrange as (x1, y1, x2, y2). + """ + proposals = [res.bboxes for res in rpn_results_list] + proposal_scores = [res.scores for res in rpn_results_list] + num_proposals_per_img = tuple(len(p) for p in proposals) + rois = bbox2roi(proposals) + + if rois.shape[0] == 0: + return empty_instances( + batch_img_metas, + rois.device, + task_type='bbox', + box_type=self.bbox_head[-1].predict_box_type, + num_classes=self.bbox_head[-1].num_classes, + score_per_cls=rcnn_test_cfg is None) + # rois aligned + rois, cls_scores, bbox_preds = self._refine_roi( + x=x, + rois=rois, + batch_img_metas=batch_img_metas, + num_proposals_per_img=num_proposals_per_img, + **kwargs) + + # score reweighting in centernet2 + cls_scores = [(s * ps[:, None])**0.5 + for s, ps in zip(cls_scores, proposal_scores)] + # # for demo + # cls_scores = [ + # s * (s == s[:, :-1].max(dim=1)[0][:, None]).float() + # for s in cls_scores + # ] + + # fast_rcnn_inference + results_list = self.bbox_head[-1].predict_by_feat( + rois=rois, + cls_scores=cls_scores, + bbox_preds=bbox_preds, + batch_img_metas=batch_img_metas, + rescale=rescale, + rcnn_test_cfg=rcnn_test_cfg) + return results_list + + def _mask_forward(self, x: Tuple[Tensor], rois: Tensor) -> dict: + """Mask head forward function used in both training and testing. + + Args: + stage (int): The current stage in Cascade RoI Head. + x (tuple[Tensor]): Tuple of multi-level img features. + rois (Tensor): RoIs with the shape (n, 5) where the first + column indicates batch id of each RoI. + + Returns: + dict: Usually returns a dictionary with keys: + + - `mask_preds` (Tensor): Mask prediction. + """ + mask_feats = self.mask_roi_extractor( + x[:self.mask_roi_extractor.num_inputs], rois) + # do not support caffe_c4 model anymore + mask_preds = self.mask_head(mask_feats) + + mask_results = dict(mask_preds=mask_preds) + return mask_results + + def mask_loss(self, x, sampling_results: List[SamplingResult], + batch_gt_instances: InstanceList) -> dict: + """Run forward function and calculate loss for mask head in training. + + Args: + x (tuple[Tensor]): Tuple of multi-level img features. + sampling_results (list["obj:`SamplingResult`]): Sampling results. + batch_gt_instances (list[:obj:`InstanceData`]): Batch of + gt_instance. It usually includes ``bboxes``, ``labels``, and + ``masks`` attributes. + + Returns: + dict: Usually returns a dictionary with keys: + + - `mask_preds` (Tensor): Mask prediction. + - `loss_mask` (dict): A dictionary of mask loss components. + """ + pos_rois = bbox2roi([res.pos_priors for res in sampling_results]) + mask_results = self._mask_forward(x, pos_rois) + + mask_loss_and_target = self.mask_head.loss_and_target( + mask_preds=mask_results['mask_preds'], + sampling_results=sampling_results, + batch_gt_instances=batch_gt_instances, + rcnn_train_cfg=self.train_cfg[-1]) + mask_results.update(mask_loss_and_target) + + return mask_results + + def loss(self, x: Tuple[Tensor], rpn_results_list: InstanceList, + batch_data_samples: SampleList) -> dict: + """Perform forward propagation and loss calculation of the detection + roi on the features of the upstream network. + + Args: + x (tuple[Tensor]): List of multi-level img features. + rpn_results_list (list[:obj:`InstanceData`]): List of region + proposals. + batch_data_samples (list[:obj:`DetDataSample`]): The batch + data samples. It usually includes information such + as `gt_instance` or `gt_panoptic_seg` or `gt_sem_seg`. + + Returns: + dict[str, Tensor]: A dictionary of loss components + """ + assert len(rpn_results_list) == len(batch_data_samples) + outputs = unpack_gt_instances(batch_data_samples) + batch_gt_instances, batch_gt_instances_ignore, batch_img_metas \ + = outputs + + num_imgs = len(batch_data_samples) + image_labels = [x.gt_instances.labels for x in batch_data_samples] + losses = dict() + results_list = rpn_results_list + + for stage in range(self.num_stages): + self.current_stage = stage + stage_loss_weight = self.stage_loss_weights[stage] + if hasattr(batch_gt_instances[0], 'bboxes'): + # assign gts and sample proposals + sampling_results = [] + if self.with_bbox or self.with_mask: + bbox_assigner = self.bbox_assigner[stage] + bbox_sampler = self.bbox_sampler[stage] + + for i in range(num_imgs): + results = results_list[i] + # rename rpn_results.bboxes to rpn_results.priors + results.priors = results.pop('bboxes') + + assign_result = bbox_assigner.assign( + results, batch_gt_instances[i], + batch_gt_instances_ignore[i]) + + sampling_result = bbox_sampler.sample( + assign_result, + results, + batch_gt_instances[i], + feats=[lvl_feat[i][None] for lvl_feat in x]) + + sampling_results.append(sampling_result) + + # bbox head forward and loss + bbox_results = self.bbox_loss(stage, x, sampling_results) + + for name, value in bbox_results['loss_bbox'].items(): + losses[f's{stage}.{name}'] = ( + value * stage_loss_weight if 'loss' in name else value) + losses[f's{stage}.image_loss'] = x[0].new_zeros([1])[0] + + # mask head forward and loss + # D2 only forward stage.0 + if self.with_mask and stage == 0: + mask_results = self.mask_loss(x, sampling_results, + batch_gt_instances) + for name, value in mask_results['loss_mask'].items(): + losses[name] = ( + value * + stage_loss_weight if 'loss' in name else value) + + else: + # get ws_num_props pred_instances for each image + sampling_results = [ + pred_instances[:self.ws_num_props] + for pred_instances in results_list + ] + for i, pred_instances in enumerate(sampling_results): + pred_instances.bboxes = pred_instances.bboxes.detach() + bbox_results = self.image_loss(stage, x, sampling_results, + image_labels) + losses[f's{stage}.image_loss'] = bbox_results['image_loss'] + + for name in ['loss_cls', 'loss_bbox']: + losses[f's{stage}.{name}'] = x[0].new_zeros([1])[0] + if stage == 0: + losses['loss_mask'] = x[0].new_zeros([1])[0] + + # refine bboxes + if stage < self.num_stages - 1: + bbox_head = self.bbox_head[stage] + with torch.no_grad(): + results_list = bbox_head.refine_bboxes( + bbox_results, batch_img_metas) + # Empty proposal + if results_list is None: + break + + return losses + + def image_loss(self, stage: int, x: Tuple[Tensor], + sampling_results: List[SamplingResult], + image_labels) -> dict: + """Run forward function and calculate loss for box head in training. + + Args: + stage (int): The current stage in Cascade RoI Head. + x (tuple[Tensor]): List of multi-level img features. + sampling_results (list["obj:`SamplingResult`]): Sampling results. + + Returns: + dict: Usually returns a dictionary with keys: + + - `cls_score` (Tensor): Classification scores. + - `bbox_pred` (Tensor): Box energies / deltas. + - `bbox_feats` (Tensor): Extract bbox RoI features. + - `loss_bbox` (dict): A dictionary of bbox loss components. + - `rois` (Tensor): RoIs with the shape (n, 5) where the first + column indicates batch id of each RoI. + - `bbox_targets` (tuple): Ground truth for proposals in a + single image. Containing the following list of Tensors: + (labels, label_weights, bbox_targets, bbox_weights) + """ + bbox_head = self.bbox_head[stage] + rois = bbox2roi([res.bboxes for res in sampling_results]) + bbox_results = self._bbox_forward(stage, x, rois) + bbox_results.update(rois=rois) + + image_loss = bbox_head.image_label_losses( + cls_score=bbox_results['cls_score'], + sampling_results=sampling_results, + image_labels=image_labels) + bbox_results.update(dict(image_loss=image_loss)) + + return bbox_results + + def predict_mask(self, + x: Tuple[Tensor], + batch_img_metas: List[dict], + results_list: List[InstanceData], + rescale: bool = False) -> List[InstanceData]: + """Perform forward propagation of the mask head and predict detection + results on the features of the upstream network. + + Args: + x (tuple[Tensor]): Feature maps of all scale level. + batch_img_metas (list[dict]): List of image information. + results_list (list[:obj:`InstanceData`]): Detection results of + each image. + rescale (bool): If True, return boxes in original image space. + Defaults to False. + + Returns: + list[:obj:`InstanceData`]: Detection results of each image + after the post process. + Each item usually contains following keys. + + - scores (Tensor): Classification scores, has a shape + (num_instance, ) + - labels (Tensor): Labels of bboxes, has a shape + (num_instances, ). + - bboxes (Tensor): Has a shape (num_instances, 4), + the last dimension 4 arrange as (x1, y1, x2, y2). + - masks (Tensor): Has a shape (num_instances, H, W). + """ + bboxes = [res.bboxes for res in results_list] + mask_rois = bbox2roi(bboxes) + if mask_rois.shape[0] == 0: + results_list = empty_instances( + batch_img_metas, + mask_rois.device, + task_type='mask', + instance_results=results_list, + mask_thr_binary=self.test_cfg.mask_thr_binary) + return results_list + + num_mask_rois_per_img = [len(res) for res in results_list] + aug_masks = [] + mask_results = self._mask_forward(x, mask_rois) + mask_preds = mask_results['mask_preds'] + # split batch mask prediction back to each image + mask_preds = mask_preds.split(num_mask_rois_per_img, 0) + aug_masks.append([m.sigmoid().detach() for m in mask_preds]) + + merged_masks = [] + for i in range(len(batch_img_metas)): + aug_mask = [mask[i] for mask in aug_masks] + merged_mask = merge_aug_masks(aug_mask, batch_img_metas[i]) + merged_masks.append(merged_mask) + results_list = self.mask_head.predict_by_feat( + mask_preds=merged_masks, + results_list=results_list, + batch_img_metas=batch_img_metas, + rcnn_test_cfg=self.test_cfg, + rescale=rescale, + activate_map=True) + return results_list diff --git a/projects/Detic_new/detic/heatmap_focal_loss.py b/projects/Detic_new/detic/heatmap_focal_loss.py new file mode 100644 index 00000000000..021a5b22d91 --- /dev/null +++ b/projects/Detic_new/detic/heatmap_focal_loss.py @@ -0,0 +1,131 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from typing import Optional, Union + +import torch +import torch.nn as nn +from torch import Tensor + +from mmdet.registry import MODELS + + +# support class-agnostic heatmap_focal_loss +def heatmap_focal_loss_with_pos_inds( + pred: Tensor, + targets: Tensor, + pos_inds: Tensor, + alpha: float = 2.0, + beta: float = 4.0, + gamma: float = 4.0, + sigmoid_clamp: float = 1e-4, + ignore_high_fp: float = -1.0, + pos_weight: float = 1.0, + neg_weight: float = 1.0, + avg_factor: Optional[Union[int, float]] = None) -> Tensor: + + pred = torch.clamp( + pred.sigmoid_(), min=sigmoid_clamp, max=1 - sigmoid_clamp) + + neg_weights = torch.pow(1 - targets, beta) + + pos_pred = pred[pos_inds] + pos_loss = torch.log(pos_pred) * torch.pow(1 - pos_pred, gamma) + neg_loss = torch.log(1 - pred) * torch.pow(pred, gamma) * neg_weights + if ignore_high_fp > 0: + not_high_fp = (pred < ignore_high_fp).float() + neg_loss = not_high_fp * neg_loss + + pos_loss = -pos_loss.sum() + neg_loss = -neg_loss.sum() + if alpha >= 0: + pos_loss = alpha * pos_loss + neg_loss = (1 - alpha) * neg_loss + + pos_loss = pos_weight * pos_loss / avg_factor + neg_loss = neg_weight * neg_loss / avg_factor + + return pos_loss, neg_loss + + +@MODELS.register_module() +class HeatmapFocalLoss(nn.Module): + """GaussianFocalLoss is a variant of focal loss. + + More details can be found in the `paper + `_ + Code is modified from `kp_utils.py + `_ # noqa: E501 + Please notice that the target in GaussianFocalLoss is a gaussian heatmap, + not 0/1 binary target. + + Args: + alpha (float): Power of prediction. + gamma (float): Power of target for negative samples. + reduction (str): Options are "none", "mean" and "sum". + loss_weight (float): Loss weight of current loss. + pos_weight(float): Positive sample loss weight. Defaults to 1.0. + neg_weight(float): Negative sample loss weight. Defaults to 1.0. + """ + + def __init__( + self, + alpha: float = 2.0, + beta: float = 4.0, + gamma: float = 4.0, + sigmoid_clamp: float = 1e-4, + ignore_high_fp: float = -1.0, + loss_weight: float = 1.0, + pos_weight: float = 1.0, + neg_weight: float = 1.0, + ) -> None: + super().__init__() + self.alpha = alpha + self.beta = beta + self.gamma = gamma + self.sigmoid_clamp = sigmoid_clamp + self.ignore_high_fp = ignore_high_fp + self.loss_weight = loss_weight + self.pos_weight = pos_weight + self.neg_weight = neg_weight + + def forward(self, + pred: Tensor, + target: Tensor, + pos_inds: Optional[Tensor] = None, + avg_factor: Optional[Union[int, float]] = None) -> Tensor: + """Forward function. + + If you want to manually determine which positions are + positive samples, you can set the pos_index and pos_label + parameter. Currently, only the CenterNet update version uses + the parameter. + + Args: + pred (torch.Tensor): The prediction. The shape is (N, num_classes). + target (torch.Tensor): The learning target of the prediction + in gaussian distribution. The shape is (N, num_classes). + pos_inds (torch.Tensor): The positive sample index. + Defaults to None. + pos_labels (torch.Tensor): The label corresponding to the positive + sample index. Defaults to None. + weight (torch.Tensor, optional): The weight of loss for each + prediction. Defaults to None. + avg_factor (int, float, optional): Average factor that is used to + average the loss. Defaults to None. + reduction_override (str, optional): The reduction method used to + override the original reduction method of the loss. + Defaults to None. + """ + + pos_loss, neg_loss = heatmap_focal_loss_with_pos_inds( + pred, + target, + pos_inds, + alpha=self.alpha, + beta=self.beta, + gamma=self.gamma, + sigmoid_clamp=self.sigmoid_clamp, + ignore_high_fp=self.ignore_high_fp, + pos_weight=self.pos_weight, + neg_weight=self.neg_weight, + avg_factor=avg_factor) + return pos_loss, neg_loss diff --git a/projects/Detic_new/detic/imagenet_lvis.py b/projects/Detic_new/detic/imagenet_lvis.py new file mode 100644 index 00000000000..3375a086682 --- /dev/null +++ b/projects/Detic_new/detic/imagenet_lvis.py @@ -0,0 +1,395 @@ +# Copyright (c) OpenMMLab. All rights reserved.METAINFO +import copy +import os.path as osp +import pickle +import warnings +from typing import List, Union + +from mmengine.fileio import get_local_path + +from mmdet.datasets import LVISV1Dataset +from mmdet.registry import DATASETS + + +@DATASETS.register_module() +class ImageNetLVISV1Dataset(LVISV1Dataset): + """LVIS v1 dataset for detection.""" + + METAINFO = { + 'classes': + ('aerosol_can', 'air_conditioner', 'airplane', 'alarm_clock', + 'alcohol', 'alligator', 'almond', 'ambulance', 'amplifier', 'anklet', + 'antenna', 'apple', 'applesauce', 'apricot', 'apron', 'aquarium', + 'arctic_(type_of_shoe)', 'armband', 'armchair', 'armoire', 'armor', + 'artichoke', 'trash_can', 'ashtray', 'asparagus', 'atomizer', + 'avocado', 'award', 'awning', 'ax', 'baboon', 'baby_buggy', + 'basketball_backboard', 'backpack', 'handbag', 'suitcase', 'bagel', + 'bagpipe', 'baguet', 'bait', 'ball', 'ballet_skirt', 'balloon', + 'bamboo', 'banana', 'Band_Aid', 'bandage', 'bandanna', 'banjo', + 'banner', 'barbell', 'barge', 'barrel', 'barrette', 'barrow', + 'baseball_base', 'baseball', 'baseball_bat', 'baseball_cap', + 'baseball_glove', 'basket', 'basketball', 'bass_horn', 'bat_(animal)', + 'bath_mat', 'bath_towel', 'bathrobe', 'bathtub', 'batter_(food)', + 'battery', 'beachball', 'bead', 'bean_curd', 'beanbag', 'beanie', + 'bear', 'bed', 'bedpan', 'bedspread', 'cow', 'beef_(food)', 'beeper', + 'beer_bottle', 'beer_can', 'beetle', 'bell', 'bell_pepper', 'belt', + 'belt_buckle', 'bench', 'beret', 'bib', 'Bible', 'bicycle', 'visor', + 'billboard', 'binder', 'binoculars', 'bird', 'birdfeeder', 'birdbath', + 'birdcage', 'birdhouse', 'birthday_cake', 'birthday_card', + 'pirate_flag', 'black_sheep', 'blackberry', 'blackboard', 'blanket', + 'blazer', 'blender', 'blimp', 'blinker', 'blouse', 'blueberry', + 'gameboard', 'boat', 'bob', 'bobbin', 'bobby_pin', 'boiled_egg', + 'bolo_tie', 'deadbolt', 'bolt', 'bonnet', 'book', 'bookcase', + 'booklet', 'bookmark', 'boom_microphone', 'boot', 'bottle', + 'bottle_opener', 'bouquet', 'bow_(weapon)', + 'bow_(decorative_ribbons)', 'bow-tie', 'bowl', 'pipe_bowl', + 'bowler_hat', 'bowling_ball', 'box', 'boxing_glove', 'suspenders', + 'bracelet', 'brass_plaque', 'brassiere', 'bread-bin', 'bread', + 'breechcloth', 'bridal_gown', 'briefcase', 'broccoli', 'broach', + 'broom', 'brownie', 'brussels_sprouts', 'bubble_gum', 'bucket', + 'horse_buggy', 'bull', 'bulldog', 'bulldozer', 'bullet_train', + 'bulletin_board', 'bulletproof_vest', 'bullhorn', 'bun', 'bunk_bed', + 'buoy', 'burrito', 'bus_(vehicle)', 'business_card', 'butter', + 'butterfly', 'button', 'cab_(taxi)', 'cabana', 'cabin_car', 'cabinet', + 'locker', 'cake', 'calculator', 'calendar', 'calf', 'camcorder', + 'camel', 'camera', 'camera_lens', 'camper_(vehicle)', 'can', + 'can_opener', 'candle', 'candle_holder', 'candy_bar', 'candy_cane', + 'walking_cane', 'canister', 'canoe', 'cantaloup', 'canteen', + 'cap_(headwear)', 'bottle_cap', 'cape', 'cappuccino', + 'car_(automobile)', 'railcar_(part_of_a_train)', 'elevator_car', + 'car_battery', 'identity_card', 'card', 'cardigan', 'cargo_ship', + 'carnation', 'horse_carriage', 'carrot', 'tote_bag', 'cart', 'carton', + 'cash_register', 'casserole', 'cassette', 'cast', 'cat', + 'cauliflower', 'cayenne_(spice)', 'CD_player', 'celery', + 'cellular_telephone', 'chain_mail', 'chair', 'chaise_longue', + 'chalice', 'chandelier', 'chap', 'checkbook', 'checkerboard', + 'cherry', 'chessboard', 'chicken_(animal)', 'chickpea', + 'chili_(vegetable)', 'chime', 'chinaware', 'crisp_(potato_chip)', + 'poker_chip', 'chocolate_bar', 'chocolate_cake', 'chocolate_milk', + 'chocolate_mousse', 'choker', 'chopping_board', 'chopstick', + 'Christmas_tree', 'slide', 'cider', 'cigar_box', 'cigarette', + 'cigarette_case', 'cistern', 'clarinet', 'clasp', 'cleansing_agent', + 'cleat_(for_securing_rope)', 'clementine', 'clip', 'clipboard', + 'clippers_(for_plants)', 'cloak', 'clock', 'clock_tower', + 'clothes_hamper', 'clothespin', 'clutch_bag', 'coaster', 'coat', + 'coat_hanger', 'coatrack', 'cock', 'cockroach', 'cocoa_(beverage)', + 'coconut', 'coffee_maker', 'coffee_table', 'coffeepot', 'coil', + 'coin', 'colander', 'coleslaw', 'coloring_material', + 'combination_lock', 'pacifier', 'comic_book', 'compass', + 'computer_keyboard', 'condiment', 'cone', 'control', + 'convertible_(automobile)', 'sofa_bed', 'cooker', 'cookie', + 'cooking_utensil', 'cooler_(for_food)', 'cork_(bottle_plug)', + 'corkboard', 'corkscrew', 'edible_corn', 'cornbread', 'cornet', + 'cornice', 'cornmeal', 'corset', 'costume', 'cougar', 'coverall', + 'cowbell', 'cowboy_hat', 'crab_(animal)', 'crabmeat', 'cracker', + 'crape', 'crate', 'crayon', 'cream_pitcher', 'crescent_roll', 'crib', + 'crock_pot', 'crossbar', 'crouton', 'crow', 'crowbar', 'crown', + 'crucifix', 'cruise_ship', 'police_cruiser', 'crumb', 'crutch', + 'cub_(animal)', 'cube', 'cucumber', 'cufflink', 'cup', 'trophy_cup', + 'cupboard', 'cupcake', 'hair_curler', 'curling_iron', 'curtain', + 'cushion', 'cylinder', 'cymbal', 'dagger', 'dalmatian', 'dartboard', + 'date_(fruit)', 'deck_chair', 'deer', 'dental_floss', 'desk', + 'detergent', 'diaper', 'diary', 'die', 'dinghy', 'dining_table', + 'tux', 'dish', 'dish_antenna', 'dishrag', 'dishtowel', 'dishwasher', + 'dishwasher_detergent', 'dispenser', 'diving_board', 'Dixie_cup', + 'dog', 'dog_collar', 'doll', 'dollar', 'dollhouse', 'dolphin', + 'domestic_ass', 'doorknob', 'doormat', 'doughnut', 'dove', + 'dragonfly', 'drawer', 'underdrawers', 'dress', 'dress_hat', + 'dress_suit', 'dresser', 'drill', 'drone', 'dropper', + 'drum_(musical_instrument)', 'drumstick', 'duck', 'duckling', + 'duct_tape', 'duffel_bag', 'dumbbell', 'dumpster', 'dustpan', 'eagle', + 'earphone', 'earplug', 'earring', 'easel', 'eclair', 'eel', 'egg', + 'egg_roll', 'egg_yolk', 'eggbeater', 'eggplant', 'electric_chair', + 'refrigerator', 'elephant', 'elk', 'envelope', 'eraser', 'escargot', + 'eyepatch', 'falcon', 'fan', 'faucet', 'fedora', 'ferret', + 'Ferris_wheel', 'ferry', 'fig_(fruit)', 'fighter_jet', 'figurine', + 'file_cabinet', 'file_(tool)', 'fire_alarm', 'fire_engine', + 'fire_extinguisher', 'fire_hose', 'fireplace', 'fireplug', + 'first-aid_kit', 'fish', 'fish_(food)', 'fishbowl', 'fishing_rod', + 'flag', 'flagpole', 'flamingo', 'flannel', 'flap', 'flash', + 'flashlight', 'fleece', 'flip-flop_(sandal)', 'flipper_(footwear)', + 'flower_arrangement', 'flute_glass', 'foal', 'folding_chair', + 'food_processor', 'football_(American)', 'football_helmet', + 'footstool', 'fork', 'forklift', 'freight_car', 'French_toast', + 'freshener', 'frisbee', 'frog', 'fruit_juice', 'frying_pan', 'fudge', + 'funnel', 'futon', 'gag', 'garbage', 'garbage_truck', 'garden_hose', + 'gargle', 'gargoyle', 'garlic', 'gasmask', 'gazelle', 'gelatin', + 'gemstone', 'generator', 'giant_panda', 'gift_wrap', 'ginger', + 'giraffe', 'cincture', 'glass_(drink_container)', 'globe', 'glove', + 'goat', 'goggles', 'goldfish', 'golf_club', 'golfcart', + 'gondola_(boat)', 'goose', 'gorilla', 'gourd', 'grape', 'grater', + 'gravestone', 'gravy_boat', 'green_bean', 'green_onion', 'griddle', + 'grill', 'grits', 'grizzly', 'grocery_bag', 'guitar', 'gull', 'gun', + 'hairbrush', 'hairnet', 'hairpin', 'halter_top', 'ham', 'hamburger', + 'hammer', 'hammock', 'hamper', 'hamster', 'hair_dryer', 'hand_glass', + 'hand_towel', 'handcart', 'handcuff', 'handkerchief', 'handle', + 'handsaw', 'hardback_book', 'harmonium', 'hat', 'hatbox', 'veil', + 'headband', 'headboard', 'headlight', 'headscarf', 'headset', + 'headstall_(for_horses)', 'heart', 'heater', 'helicopter', 'helmet', + 'heron', 'highchair', 'hinge', 'hippopotamus', 'hockey_stick', 'hog', + 'home_plate_(baseball)', 'honey', 'fume_hood', 'hook', 'hookah', + 'hornet', 'horse', 'hose', 'hot-air_balloon', 'hotplate', 'hot_sauce', + 'hourglass', 'houseboat', 'hummingbird', 'hummus', 'polar_bear', + 'icecream', 'popsicle', 'ice_maker', 'ice_pack', 'ice_skate', + 'igniter', 'inhaler', 'iPod', 'iron_(for_clothing)', 'ironing_board', + 'jacket', 'jam', 'jar', 'jean', 'jeep', 'jelly_bean', 'jersey', + 'jet_plane', 'jewel', 'jewelry', 'joystick', 'jumpsuit', 'kayak', + 'keg', 'kennel', 'kettle', 'key', 'keycard', 'kilt', 'kimono', + 'kitchen_sink', 'kitchen_table', 'kite', 'kitten', 'kiwi_fruit', + 'knee_pad', 'knife', 'knitting_needle', 'knob', 'knocker_(on_a_door)', + 'koala', 'lab_coat', 'ladder', 'ladle', 'ladybug', 'lamb_(animal)', + 'lamb-chop', 'lamp', 'lamppost', 'lampshade', 'lantern', 'lanyard', + 'laptop_computer', 'lasagna', 'latch', 'lawn_mower', 'leather', + 'legging_(clothing)', 'Lego', 'legume', 'lemon', 'lemonade', + 'lettuce', 'license_plate', 'life_buoy', 'life_jacket', 'lightbulb', + 'lightning_rod', 'lime', 'limousine', 'lion', 'lip_balm', 'liquor', + 'lizard', 'log', 'lollipop', 'speaker_(stereo_equipment)', 'loveseat', + 'machine_gun', 'magazine', 'magnet', 'mail_slot', 'mailbox_(at_home)', + 'mallard', 'mallet', 'mammoth', 'manatee', 'mandarin_orange', + 'manger', 'manhole', 'map', 'marker', 'martini', 'mascot', + 'mashed_potato', 'masher', 'mask', 'mast', 'mat_(gym_equipment)', + 'matchbox', 'mattress', 'measuring_cup', 'measuring_stick', + 'meatball', 'medicine', 'melon', 'microphone', 'microscope', + 'microwave_oven', 'milestone', 'milk', 'milk_can', 'milkshake', + 'minivan', 'mint_candy', 'mirror', 'mitten', 'mixer_(kitchen_tool)', + 'money', 'monitor_(computer_equipment) computer_monitor', 'monkey', + 'motor', 'motor_scooter', 'motor_vehicle', 'motorcycle', + 'mound_(baseball)', 'mouse_(computer_equipment)', 'mousepad', + 'muffin', 'mug', 'mushroom', 'music_stool', 'musical_instrument', + 'nailfile', 'napkin', 'neckerchief', 'necklace', 'necktie', 'needle', + 'nest', 'newspaper', 'newsstand', 'nightshirt', + 'nosebag_(for_animals)', 'noseband_(for_animals)', 'notebook', + 'notepad', 'nut', 'nutcracker', 'oar', 'octopus_(food)', + 'octopus_(animal)', 'oil_lamp', 'olive_oil', 'omelet', 'onion', + 'orange_(fruit)', 'orange_juice', 'ostrich', 'ottoman', 'oven', + 'overalls_(clothing)', 'owl', 'packet', 'inkpad', 'pad', 'paddle', + 'padlock', 'paintbrush', 'painting', 'pajamas', 'palette', + 'pan_(for_cooking)', 'pan_(metal_container)', 'pancake', 'pantyhose', + 'papaya', 'paper_plate', 'paper_towel', 'paperback_book', + 'paperweight', 'parachute', 'parakeet', 'parasail_(sports)', + 'parasol', 'parchment', 'parka', 'parking_meter', 'parrot', + 'passenger_car_(part_of_a_train)', 'passenger_ship', 'passport', + 'pastry', 'patty_(food)', 'pea_(food)', 'peach', 'peanut_butter', + 'pear', 'peeler_(tool_for_fruit_and_vegetables)', 'wooden_leg', + 'pegboard', 'pelican', 'pen', 'pencil', 'pencil_box', + 'pencil_sharpener', 'pendulum', 'penguin', 'pennant', 'penny_(coin)', + 'pepper', 'pepper_mill', 'perfume', 'persimmon', 'person', 'pet', + 'pew_(church_bench)', 'phonebook', 'phonograph_record', 'piano', + 'pickle', 'pickup_truck', 'pie', 'pigeon', 'piggy_bank', 'pillow', + 'pin_(non_jewelry)', 'pineapple', 'pinecone', 'ping-pong_ball', + 'pinwheel', 'tobacco_pipe', 'pipe', 'pistol', 'pita_(bread)', + 'pitcher_(vessel_for_liquid)', 'pitchfork', 'pizza', 'place_mat', + 'plate', 'platter', 'playpen', 'pliers', 'plow_(farm_equipment)', + 'plume', 'pocket_watch', 'pocketknife', 'poker_(fire_stirring_tool)', + 'pole', 'polo_shirt', 'poncho', 'pony', 'pool_table', 'pop_(soda)', + 'postbox_(public)', 'postcard', 'poster', 'pot', 'flowerpot', + 'potato', 'potholder', 'pottery', 'pouch', 'power_shovel', 'prawn', + 'pretzel', 'printer', 'projectile_(weapon)', 'projector', 'propeller', + 'prune', 'pudding', 'puffer_(fish)', 'puffin', 'pug-dog', 'pumpkin', + 'puncher', 'puppet', 'puppy', 'quesadilla', 'quiche', 'quilt', + 'rabbit', 'race_car', 'racket', 'radar', 'radiator', 'radio_receiver', + 'radish', 'raft', 'rag_doll', 'raincoat', 'ram_(animal)', 'raspberry', + 'rat', 'razorblade', 'reamer_(juicer)', 'rearview_mirror', 'receipt', + 'recliner', 'record_player', 'reflector', 'remote_control', + 'rhinoceros', 'rib_(food)', 'rifle', 'ring', 'river_boat', 'road_map', + 'robe', 'rocking_chair', 'rodent', 'roller_skate', 'Rollerblade', + 'rolling_pin', 'root_beer', 'router_(computer_equipment)', + 'rubber_band', 'runner_(carpet)', 'plastic_bag', + 'saddle_(on_an_animal)', 'saddle_blanket', 'saddlebag', 'safety_pin', + 'sail', 'salad', 'salad_plate', 'salami', 'salmon_(fish)', + 'salmon_(food)', 'salsa', 'saltshaker', 'sandal_(type_of_shoe)', + 'sandwich', 'satchel', 'saucepan', 'saucer', 'sausage', 'sawhorse', + 'saxophone', 'scale_(measuring_instrument)', 'scarecrow', 'scarf', + 'school_bus', 'scissors', 'scoreboard', 'scraper', 'screwdriver', + 'scrubbing_brush', 'sculpture', 'seabird', 'seahorse', 'seaplane', + 'seashell', 'sewing_machine', 'shaker', 'shampoo', 'shark', + 'sharpener', 'Sharpie', 'shaver_(electric)', 'shaving_cream', 'shawl', + 'shears', 'sheep', 'shepherd_dog', 'sherbert', 'shield', 'shirt', + 'shoe', 'shopping_bag', 'shopping_cart', 'short_pants', 'shot_glass', + 'shoulder_bag', 'shovel', 'shower_head', 'shower_cap', + 'shower_curtain', 'shredder_(for_paper)', 'signboard', 'silo', 'sink', + 'skateboard', 'skewer', 'ski', 'ski_boot', 'ski_parka', 'ski_pole', + 'skirt', 'skullcap', 'sled', 'sleeping_bag', 'sling_(bandage)', + 'slipper_(footwear)', 'smoothie', 'snake', 'snowboard', 'snowman', + 'snowmobile', 'soap', 'soccer_ball', 'sock', 'sofa', 'softball', + 'solar_array', 'sombrero', 'soup', 'soup_bowl', 'soupspoon', + 'sour_cream', 'soya_milk', 'space_shuttle', 'sparkler_(fireworks)', + 'spatula', 'spear', 'spectacles', 'spice_rack', 'spider', 'crawfish', + 'sponge', 'spoon', 'sportswear', 'spotlight', 'squid_(food)', + 'squirrel', 'stagecoach', 'stapler_(stapling_machine)', 'starfish', + 'statue_(sculpture)', 'steak_(food)', 'steak_knife', 'steering_wheel', + 'stepladder', 'step_stool', 'stereo_(sound_system)', 'stew', + 'stirrer', 'stirrup', 'stool', 'stop_sign', 'brake_light', 'stove', + 'strainer', 'strap', 'straw_(for_drinking)', 'strawberry', + 'street_sign', 'streetlight', 'string_cheese', 'stylus', 'subwoofer', + 'sugar_bowl', 'sugarcane_(plant)', 'suit_(clothing)', 'sunflower', + 'sunglasses', 'sunhat', 'surfboard', 'sushi', 'mop', 'sweat_pants', + 'sweatband', 'sweater', 'sweatshirt', 'sweet_potato', 'swimsuit', + 'sword', 'syringe', 'Tabasco_sauce', 'table-tennis_table', 'table', + 'table_lamp', 'tablecloth', 'tachometer', 'taco', 'tag', 'taillight', + 'tambourine', 'army_tank', 'tank_(storage_vessel)', + 'tank_top_(clothing)', 'tape_(sticky_cloth_or_paper)', 'tape_measure', + 'tapestry', 'tarp', 'tartan', 'tassel', 'tea_bag', 'teacup', + 'teakettle', 'teapot', 'teddy_bear', 'telephone', 'telephone_booth', + 'telephone_pole', 'telephoto_lens', 'television_camera', + 'television_set', 'tennis_ball', 'tennis_racket', 'tequila', + 'thermometer', 'thermos_bottle', 'thermostat', 'thimble', 'thread', + 'thumbtack', 'tiara', 'tiger', 'tights_(clothing)', 'timer', + 'tinfoil', 'tinsel', 'tissue_paper', 'toast_(food)', 'toaster', + 'toaster_oven', 'toilet', 'toilet_tissue', 'tomato', 'tongs', + 'toolbox', 'toothbrush', 'toothpaste', 'toothpick', 'cover', + 'tortilla', 'tow_truck', 'towel', 'towel_rack', 'toy', + 'tractor_(farm_equipment)', 'traffic_light', 'dirt_bike', + 'trailer_truck', 'train_(railroad_vehicle)', 'trampoline', 'tray', + 'trench_coat', 'triangle_(musical_instrument)', 'tricycle', 'tripod', + 'trousers', 'truck', 'truffle_(chocolate)', 'trunk', 'vat', 'turban', + 'turkey_(food)', 'turnip', 'turtle', 'turtleneck_(clothing)', + 'typewriter', 'umbrella', 'underwear', 'unicycle', 'urinal', 'urn', + 'vacuum_cleaner', 'vase', 'vending_machine', 'vent', 'vest', + 'videotape', 'vinegar', 'violin', 'vodka', 'volleyball', 'vulture', + 'waffle', 'waffle_iron', 'wagon', 'wagon_wheel', 'walking_stick', + 'wall_clock', 'wall_socket', 'wallet', 'walrus', 'wardrobe', + 'washbasin', 'automatic_washer', 'watch', 'water_bottle', + 'water_cooler', 'water_faucet', 'water_heater', 'water_jug', + 'water_gun', 'water_scooter', 'water_ski', 'water_tower', + 'watering_can', 'watermelon', 'weathervane', 'webcam', 'wedding_cake', + 'wedding_ring', 'wet_suit', 'wheel', 'wheelchair', 'whipped_cream', + 'whistle', 'wig', 'wind_chime', 'windmill', 'window_box_(for_plants)', + 'windshield_wiper', 'windsock', 'wine_bottle', 'wine_bucket', + 'wineglass', 'blinder_(for_horses)', 'wok', 'wolf', 'wooden_spoon', + 'wreath', 'wrench', 'wristband', 'wristlet', 'yacht', 'yogurt', + 'yoke_(animal_equipment)', 'zebra', 'zucchini'), + 'palette': + None + } + + def get_data_info(self, idx: int) -> dict: + """Get annotation by index and automatically call ``full_init`` if the + dataset has not been fully initialized. + + Args: + idx (int): The index of data. + + Returns: + dict: The idx-th annotation of the dataset. + """ + if self.serialize_data: + start_addr = 0 if idx == 0 else self.data_address[idx - 1].item() + end_addr = self.data_address[idx].item() + bytes = memoryview( + self.data_bytes[start_addr:end_addr]) # type: ignore + data_info = pickle.loads(bytes) # type: ignore + else: + data_info = copy.deepcopy(self.data_list[idx]) + + # Some codebase needs `sample_idx` of data information. Here we convert + # the idx to a positive number and save it in data information. + if idx >= 0: + data_info['sample_idx'] = idx + else: + data_info['sample_idx'] = len(self) + idx + + return data_info + + def load_data_list(self) -> List[dict]: + """Load annotations from an annotation file named as ``self.ann_file`` + + Returns: + List[dict]: A list of annotation. + """ # noqa: E501 + try: + import lvis + if getattr(lvis, '__version__', '0') >= '10.5.3': + warnings.warn( + 'mmlvis is deprecated, please install official lvis-api by "pip install git+https://github.com/lvis-dataset/lvis-api.git"', # noqa: E501 + UserWarning) + from lvis import LVIS + except ImportError: + raise ImportError( + 'Package lvis is not installed. Please run "pip install git+https://github.com/lvis-dataset/lvis-api.git".' # noqa: E501 + ) + with get_local_path( + self.ann_file, backend_args=self.backend_args) as local_path: + self.lvis = LVIS(local_path) + self.cat_ids = self.lvis.get_cat_ids() + self.cat2label = {cat_id: i for i, cat_id in enumerate(self.cat_ids)} + self.cat_img_map = copy.deepcopy(self.lvis.cat_img_map) + img_ids = self.lvis.get_img_ids() + data_list = [] + total_ann_ids = [] + for img_id in img_ids: + raw_img_info = self.lvis.load_imgs([img_id])[0] + raw_img_info['img_id'] = img_id + + ann_ids = self.lvis.get_ann_ids(img_ids=[img_id]) + total_ann_ids.extend(ann_ids) + parsed_data_info = self.parse_data_info( + {'raw_img_info': raw_img_info}) + data_list.append(parsed_data_info) + if self.ANN_ID_UNIQUE: + assert len(set(total_ann_ids)) == len( + total_ann_ids + ), f"Annotation ids in '{self.ann_file}' are not unique!" + + del self.lvis + # print(data_list) + return data_list + + def parse_data_info(self, raw_data_info: dict) -> Union[dict, List[dict]]: + """Parse raw annotation to target format. + + Args: + raw_data_info (dict): Raw data information load from ``ann_file`` + + Returns: + Union[dict, List[dict]]: Parsed annotation. + """ + img_info = raw_data_info['raw_img_info'] + + data_info = {} + + # TODO: need to change data_prefix['img'] to data_prefix['img_path'] + img_path = osp.join(self.data_prefix['img'], img_info['file_name']) + if self.data_prefix.get('seg', None): + seg_map_path = osp.join( + self.data_prefix['seg'], + img_info['file_name'].rsplit('.', 1)[0] + self.seg_map_suffix) + else: + seg_map_path = None + data_info['img_path'] = img_path + data_info['img_id'] = img_info['img_id'] + data_info['seg_map_path'] = seg_map_path + data_info['height'] = img_info['height'] + data_info['width'] = img_info['width'] + + if self.return_classes: + data_info['text'] = self.metainfo['classes'] + data_info['custom_entities'] = True + + instances = [] + image_labels = [ + self.cat2label[x] for x in img_info['pos_category_ids'] + ] + for image_label in image_labels: + instance = {} + instance['bbox_label'] = image_label + instances.append(instance) + data_info['instances'] = instances + + return data_info + + def get_cat_ids(self, idx: int) -> List[int]: + """Get COCO category ids by index. + + Args: + idx (int): Index of data. + + Returns: + List[int]: All categories in the image of specified index. + """ + data_info = self.get_data_info(idx) + image_labels = [] + for instance in data_info['instances']: + image_labels.append(instance['bbox_label']) + + return image_labels diff --git a/projects/Detic_new/detic/iou_loss.py b/projects/Detic_new/detic/iou_loss.py new file mode 100644 index 00000000000..349545cf54d --- /dev/null +++ b/projects/Detic_new/detic/iou_loss.py @@ -0,0 +1,125 @@ +import torch +from torch import nn + + +# support calculate IOULoss with box_pred +class IOULoss(nn.Module): + + def __init__(self, loc_loss_type='iou'): + super(IOULoss, self).__init__() + self.loc_loss_type = loc_loss_type + + def forward(self, pred, target, weight=None, reduction='sum'): + pred_left = pred[:, 0] + pred_top = pred[:, 1] + pred_right = pred[:, 2] + pred_bottom = pred[:, 3] + + target_left = target[:, 0] + target_top = target[:, 1] + target_right = target[:, 2] + target_bottom = target[:, 3] + + target_aera = (target_left + target_right) * ( + target_top + target_bottom) + pred_aera = (pred_left + pred_right) * (pred_top + pred_bottom) + + w_intersect = torch.min(pred_left, target_left) + torch.min( + pred_right, target_right) + h_intersect = torch.min(pred_bottom, target_bottom) + torch.min( + pred_top, target_top) + + g_w_intersect = torch.max(pred_left, target_left) + torch.max( + pred_right, target_right) + g_h_intersect = torch.max(pred_bottom, target_bottom) + torch.max( + pred_top, target_top) + ac_uion = g_w_intersect * g_h_intersect + + area_intersect = w_intersect * h_intersect + area_union = target_aera + pred_aera - area_intersect + + ious = (area_intersect + 1.0) / (area_union + 1.0) + gious = ious - (ac_uion - area_union) / ac_uion + if self.loc_loss_type == 'iou': + losses = -torch.log(ious) + elif self.loc_loss_type == 'linear_iou': + losses = 1 - ious + elif self.loc_loss_type == 'giou': + losses = 1 - gious + else: + raise NotImplementedError + + if weight is not None: + losses = losses * weight + else: + losses = losses + + if reduction == 'sum': + return losses.sum() + elif reduction == 'batch': + return losses.sum(dim=[1]) + elif reduction == 'none': + return losses + else: + raise NotImplementedError + + +def giou_loss( + boxes1: torch.Tensor, + boxes2: torch.Tensor, + reduction: str = 'none', + eps: float = 1e-7, +) -> torch.Tensor: + """Generalized Intersection over Union Loss (Hamid Rezatofighi et. + + al) + https://arxiv.org/abs/1902.09630 + Gradient-friendly IoU loss with an additional penalty that is + non-zero when the boxes do not overlap and scales with the size + of their smallest enclosing box. This loss is symmetric, so the + boxes1 and boxes2 arguments are interchangeable. + Args: + boxes1, boxes2 (Tensor): box locations in XYXY format, shape + (N, 4) or (4,). + reduction: 'none' | 'mean' | 'sum' + 'none': No reduction will be applied to the output. + 'mean': The output will be averaged. + 'sum': The output will be summed. + eps (float): small number to prevent division by zero + """ + + x1, y1, x2, y2 = boxes1.unbind(dim=-1) + x1g, y1g, x2g, y2g = boxes2.unbind(dim=-1) + + assert (x2 >= x1).all(), 'bad box: x1 larger than x2' + assert (y2 >= y1).all(), 'bad box: y1 larger than y2' + + # Intersection keypoints + xkis1 = torch.max(x1, x1g) + ykis1 = torch.max(y1, y1g) + xkis2 = torch.min(x2, x2g) + ykis2 = torch.min(y2, y2g) + + intsctk = torch.zeros_like(x1) + mask = (ykis2 > ykis1) & (xkis2 > xkis1) + intsctk[mask] = (xkis2[mask] - xkis1[mask]) * (ykis2[mask] - ykis1[mask]) + unionk = (x2 - x1) * (y2 - y1) + (x2g - x1g) * (y2g - y1g) - intsctk + iouk = intsctk / (unionk + eps) + + # smallest enclosing box + xc1 = torch.min(x1, x1g) + yc1 = torch.min(y1, y1g) + xc2 = torch.max(x2, x2g) + yc2 = torch.max(y2, y2g) + + area_c = (xc2 - xc1) * (yc2 - yc1) + miouk = iouk - ((area_c - unionk) / (area_c + eps)) + + loss = 1 - miouk + + if reduction == 'mean': + loss = loss.mean() + elif reduction == 'sum': + loss = loss.sum() + + return loss diff --git a/projects/Detic_new/detic/zero_shot_classifier.py b/projects/Detic_new/detic/zero_shot_classifier.py new file mode 100644 index 00000000000..cb9946d5825 --- /dev/null +++ b/projects/Detic_new/detic/zero_shot_classifier.py @@ -0,0 +1,73 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +import numpy as np +import torch +from torch import nn +from torch.nn import functional as F + +from mmdet.registry import MODELS + + +@MODELS.register_module() +class ZeroShotClassifier(nn.Module): + + def __init__( + self, + in_features: int, + out_features: int, # num_classes + zs_weight_path: str, + zs_weight_dim: int = 512, + use_bias: float = 0.0, + norm_weight: bool = True, + norm_temperature: float = 50.0, + ): + super().__init__() + num_classes = out_features + self.norm_weight = norm_weight + self.norm_temperature = norm_temperature + + self.use_bias = use_bias < 0 + if self.use_bias: + self.cls_bias = nn.Parameter(torch.ones(1) * use_bias) + + self.linear = nn.Linear(in_features, zs_weight_dim) + + if zs_weight_path == 'rand': + zs_weight = torch.randn((zs_weight_dim, num_classes)) + nn.init.normal_(zs_weight, std=0.01) + else: + zs_weight = torch.tensor( + np.load(zs_weight_path), + dtype=torch.float32).permute(1, 0).contiguous() # D x C + zs_weight = torch.cat( + [zs_weight, zs_weight.new_zeros( + (zs_weight_dim, 1))], dim=1) # D x (C + 1) + + if self.norm_weight: + zs_weight = F.normalize(zs_weight, p=2, dim=0) + + if zs_weight_path == 'rand': + self.zs_weight = nn.Parameter(zs_weight) + else: + self.register_buffer('zs_weight', zs_weight) + + assert self.zs_weight.shape[1] == num_classes + 1, self.zs_weight.shape + + def forward(self, x, classifier=None): + ''' + Inputs: + x: B x D' + classifier_info: (C', C' x D) + ''' + x = self.linear(x) + if classifier is not None: + zs_weight = classifier.permute(1, 0).contiguous() # D x C' + zs_weight = F.normalize(zs_weight, p=2, dim=0) \ + if self.norm_weight else zs_weight + else: + zs_weight = self.zs_weight + if self.norm_weight: + x = self.norm_temperature * F.normalize(x, p=2, dim=1) + x = torch.mm(x, zs_weight) + if self.use_bias: + x = x + self.cls_bias + return x diff --git a/tools/model_converters/detic_to_mmdet.py b/tools/model_converters/detic_to_mmdet.py new file mode 100644 index 00000000000..25759cb4fda --- /dev/null +++ b/tools/model_converters/detic_to_mmdet.py @@ -0,0 +1,195 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import argparse +import subprocess +from collections import OrderedDict + +import torch +from mmengine.runner import CheckpointLoader + +convert_dict_fpn = { + 'backbone.fpn_lateral3': 'neck.lateral_convs.0.conv', + 'backbone.fpn_lateral4': 'neck.lateral_convs.1.conv', + 'backbone.fpn_lateral5': 'neck.lateral_convs.2.conv', + 'backbone.fpn_output3': 'neck.fpn_convs.0.conv', + 'backbone.fpn_output4': 'neck.fpn_convs.1.conv', + 'backbone.fpn_output5': 'neck.fpn_convs.2.conv', + 'backbone.top_block.p6': 'neck.fpn_convs.3.conv', + 'backbone.top_block.p7': 'neck.fpn_convs.4.conv', +} + +convert_dict_rpn = { + 'proposal_generator.centernet_head.bbox_tower.0': + 'rpn_head.reg_convs.0.conv', + 'proposal_generator.centernet_head.bbox_tower.1': + 'rpn_head.reg_convs.0.gn', + 'proposal_generator.centernet_head.bbox_tower.3': + 'rpn_head.reg_convs.1.conv', + 'proposal_generator.centernet_head.bbox_tower.4': + 'rpn_head.reg_convs.1.gn', + 'proposal_generator.centernet_head.bbox_tower.6': + 'rpn_head.reg_convs.2.conv', + 'proposal_generator.centernet_head.bbox_tower.7': + 'rpn_head.reg_convs.2.gn', + 'proposal_generator.centernet_head.bbox_tower.9': + 'rpn_head.reg_convs.3.conv', + 'proposal_generator.centernet_head.bbox_tower.10': + 'rpn_head.reg_convs.3.gn', + 'proposal_generator.centernet_head.bbox_pred': 'rpn_head.conv_reg', + 'proposal_generator.centernet_head.scales.0.scale': + 'rpn_head.scales.0.scale', + 'proposal_generator.centernet_head.scales.1.scale': + 'rpn_head.scales.1.scale', + 'proposal_generator.centernet_head.scales.2.scale': + 'rpn_head.scales.2.scale', + 'proposal_generator.centernet_head.scales.3.scale': + 'rpn_head.scales.3.scale', + 'proposal_generator.centernet_head.scales.4.scale': + 'rpn_head.scales.4.scale', + 'proposal_generator.centernet_head.agn_hm': 'rpn_head.conv_cls', +} + +convert_dict_roi = { + 'roi_heads.box_head.0.fc1': 'roi_head.bbox_head.0.shared_fcs.0', + 'roi_heads.box_head.0.fc2': 'roi_head.bbox_head.0.shared_fcs.1', + 'roi_heads.box_head.1.fc1': 'roi_head.bbox_head.1.shared_fcs.0', + 'roi_heads.box_head.1.fc2': 'roi_head.bbox_head.1.shared_fcs.1', + 'roi_heads.box_head.2.fc1': 'roi_head.bbox_head.2.shared_fcs.0', + 'roi_heads.box_head.2.fc2': 'roi_head.bbox_head.2.shared_fcs.1', + 'roi_heads.box_predictor.0.freq_weight': + 'roi_head.bbox_head.0.freq_weight', + 'roi_heads.box_predictor.0.cls_score.zs_weight': + 'roi_head.bbox_head.0.fc_cls.zs_weight', + 'roi_heads.box_predictor.0.cls_score.linear': + 'roi_head.bbox_head.0.fc_cls.linear', + 'roi_heads.box_predictor.0.bbox_pred.0': 'roi_head.bbox_head.0.fc_reg.0', + 'roi_heads.box_predictor.0.bbox_pred.2': 'roi_head.bbox_head.0.fc_reg.2', + 'roi_heads.box_predictor.1.freq_weight': + 'roi_head.bbox_head.1.freq_weight', + 'roi_heads.box_predictor.1.cls_score.zs_weight': + 'roi_head.bbox_head.1.fc_cls.zs_weight', + 'roi_heads.box_predictor.1.cls_score.linear': + 'roi_head.bbox_head.1.fc_cls.linear', + 'roi_heads.box_predictor.1.bbox_pred.0': 'roi_head.bbox_head.1.fc_reg.0', + 'roi_heads.box_predictor.1.bbox_pred.2': 'roi_head.bbox_head.1.fc_reg.2', + 'roi_heads.box_predictor.2.freq_weight': + 'roi_head.bbox_head.2.freq_weight', + 'roi_heads.box_predictor.2.cls_score.zs_weight': + 'roi_head.bbox_head.2.fc_cls.zs_weight', + 'roi_heads.box_predictor.2.cls_score.linear': + 'roi_head.bbox_head.2.fc_cls.linear', + 'roi_heads.box_predictor.2.bbox_pred.0': 'roi_head.bbox_head.2.fc_reg.0', + 'roi_heads.box_predictor.2.bbox_pred.2': 'roi_head.bbox_head.2.fc_reg.2', + 'roi_heads.mask_head.mask_fcn1': 'roi_head.mask_head.convs.0.conv', + 'roi_heads.mask_head.mask_fcn2': 'roi_head.mask_head.convs.1.conv', + 'roi_heads.mask_head.mask_fcn3': 'roi_head.mask_head.convs.2.conv', + 'roi_heads.mask_head.mask_fcn4': 'roi_head.mask_head.convs.3.conv', + 'roi_heads.mask_head.deconv': 'roi_head.mask_head.upsample', + 'roi_heads.mask_head.predictor': 'roi_head.mask_head.conv_logits', +} + + +def correct_unfold_reduction_order(x): + out_channel, in_channel = x.shape + x = x.reshape(out_channel, 4, in_channel // 4) + x = x[:, [0, 2, 1, 3], :].transpose(1, 2).reshape(out_channel, in_channel) + return x + + +def correct_unfold_norm_order(x): + in_channel = x.shape[0] + x = x.reshape(4, in_channel // 4) + x = x[[0, 2, 1, 3], :].transpose(0, 1).reshape(in_channel) + return x + + +def convert(ckpt): + new_ckpt = OrderedDict() + + for k, v in list(ckpt.items()): + new_v = v + if 'backbone.bottom_up' in k: + new_k = k.replace('backbone.bottom_up', 'backbone') + # for Transformer backbone + if 'patch_embed.proj' in new_k: + new_k = new_k.replace('patch_embed.proj', + 'patch_embed.projection') + elif 'pos_drop' in new_k: + new_k = new_k.replace('pos_drop', 'drop_after_pos') + + if 'layers' in new_k: + new_k = new_k.replace('layers', 'stages') + if 'mlp.fc1' in new_k: + new_k = new_k.replace('mlp.fc1', 'ffn.layers.0.0') + elif 'mlp.fc2' in new_k: + new_k = new_k.replace('mlp.fc2', 'ffn.layers.1') + elif 'attn' in new_k: + new_k = new_k.replace('attn', 'attn.w_msa') + + if 'downsample' in k: + if 'reduction.' in k: + new_v = correct_unfold_reduction_order(v) + elif 'norm.' in k: + new_v = correct_unfold_norm_order(v) + # for resnet + if 'base.' in k: + new_k = new_k.replace('base.', '') + + elif 'backbone.fpn' in k or 'backbone.top_block' in k: + old_k = k.replace('.weight', '') + old_k = old_k.replace('.bias', '') + new_k = k.replace(old_k, convert_dict_fpn[old_k]) + elif 'proposal_generator' in k: + old_k = k.replace('.weight', '') + old_k = old_k.replace('.bias', '') + new_k = k.replace(old_k, convert_dict_rpn[old_k]) + elif 'roi_heads' in k: + old_k = k.replace('.weight', '') + old_k = old_k.replace('.bias', '') + new_k = k.replace(old_k, convert_dict_roi[old_k]) + else: + print('skip:', k) + continue + + new_ckpt[new_k] = new_v + return new_ckpt + + +def main(): + parser = argparse.ArgumentParser( + description='Convert keys in pretrained eva ' + 'models to mmpretrain style.') + parser.add_argument( + '--src', + default='Detic_LbaseI_CLIP_SwinB_896b32_4x_ft4x_max-size.pth', + help='src model path or url') + # The dst path must be a full path of the new checkpoint. + parser.add_argument( + '--dst', + default='detic_centernet2_swin-b_fpn_4x_lvis-base_in21k-lvis.pth', + help='save path') + args = parser.parse_args() + + checkpoint = CheckpointLoader.load_checkpoint(args.src, map_location='cpu') + + if 'model' in checkpoint: + state_dict = checkpoint['model'] + else: + state_dict = checkpoint + + weight = {} + new_state_dict = convert(state_dict) + if 'backbone.fc.weight' in new_state_dict.keys(): + del [new_state_dict['backbone.fc.weight']] + if 'backbone.fc.bias' in new_state_dict.keys(): + del [new_state_dict['backbone.fc.bias']] + weight['state_dict'] = new_state_dict + torch.save(weight, args.dst) + + sha = subprocess.check_output(['sha256sum', args.dst]).decode() + final_file = args.dst.replace('.pth', '') + '-{}.pth'.format(sha[:8]) + subprocess.Popen(['mv', args.dst, final_file]) + print(f'Done!!, save to {final_file}') + + +if __name__ == '__main__': + main() From 4f26a9ed0144c0772b2746fcea04770a912705db Mon Sep 17 00:00:00 2001 From: Leaf Ying <43506966+guyleaf@users.noreply.github.com> Date: Sun, 8 Oct 2023 09:29:51 +0800 Subject: [PATCH 54/63] Fix incorrect behavior to access train pipeline from `ConcatDataset` in analyze_results.py (#11004) --- tools/analysis_tools/analyze_results.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/analysis_tools/analyze_results.py b/tools/analysis_tools/analyze_results.py index 279b9546d1c..0efba72198f 100644 --- a/tools/analysis_tools/analyze_results.py +++ b/tools/analysis_tools/analyze_results.py @@ -375,9 +375,12 @@ def main(): cfg.test_dataloader.pop('batch_size', 0) if cfg.train_dataloader.dataset.type in ('MultiImageMixDataset', 'ClassBalancedDataset', - 'RepeatDataset', 'ConcatDataset'): + 'RepeatDataset'): cfg.test_dataloader.dataset.pipeline = get_loading_pipeline( cfg.train_dataloader.dataset.dataset.pipeline) + elif cfg.train_dataloader.dataset.type in ('ConcatDataset', ): + cfg.test_dataloader.dataset.pipeline = get_loading_pipeline( + cfg.train_dataloader.dataset.datasets[0].pipeline) else: cfg.test_dataloader.dataset.pipeline = get_loading_pipeline( cfg.train_dataloader.dataset.pipeline) From 53e30b1f6a2ae151b1b809286164f2e8c3dde6d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Sun, 8 Oct 2023 13:57:52 +0800 Subject: [PATCH 55/63] Support Roboflow 100 Benchmark (#10915) Co-authored-by: PhoenixZ810 <98592339+PhoenixZ810@users.noreply.github.com> --- projects/RF100-Benchmark/README.md | 215 +++++ projects/RF100-Benchmark/README_zh-CN.md | 215 +++++ projects/RF100-Benchmark/__init__.py | 4 + projects/RF100-Benchmark/coco.py | 213 +++++ projects/RF100-Benchmark/coco_metric.py | 243 +++++ .../dino_r50_fpn_ms_8xb8_tweeter-profile.py | 102 ++ ...er-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py | 101 ++ .../tood_r50_fpn_ms_8xb8_tweeter-profile.py | 101 ++ .../scripts/create_new_config.py | 42 + .../scripts/datasets_links_640.txt | 100 ++ .../RF100-Benchmark/scripts/dist_train.sh | 64 ++ .../scripts/download_dataset.py | 65 ++ .../scripts/download_datasets.sh | 30 + .../RF100-Benchmark/scripts/labels_names.json | 882 ++++++++++++++++++ .../RF100-Benchmark/scripts/log_extract.py | 286 ++++++ .../scripts/parse_dataset_link.py | 18 + .../RF100-Benchmark/scripts/slurm_train.sh | 67 ++ setup.cfg | 2 +- 18 files changed, 2749 insertions(+), 1 deletion(-) create mode 100644 projects/RF100-Benchmark/README.md create mode 100644 projects/RF100-Benchmark/README_zh-CN.md create mode 100644 projects/RF100-Benchmark/__init__.py create mode 100644 projects/RF100-Benchmark/coco.py create mode 100644 projects/RF100-Benchmark/coco_metric.py create mode 100644 projects/RF100-Benchmark/configs/dino_r50_fpn_ms_8xb8_tweeter-profile.py create mode 100644 projects/RF100-Benchmark/configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py create mode 100644 projects/RF100-Benchmark/configs/tood_r50_fpn_ms_8xb8_tweeter-profile.py create mode 100644 projects/RF100-Benchmark/scripts/create_new_config.py create mode 100644 projects/RF100-Benchmark/scripts/datasets_links_640.txt create mode 100644 projects/RF100-Benchmark/scripts/dist_train.sh create mode 100644 projects/RF100-Benchmark/scripts/download_dataset.py create mode 100644 projects/RF100-Benchmark/scripts/download_datasets.sh create mode 100644 projects/RF100-Benchmark/scripts/labels_names.json create mode 100644 projects/RF100-Benchmark/scripts/log_extract.py create mode 100644 projects/RF100-Benchmark/scripts/parse_dataset_link.py create mode 100644 projects/RF100-Benchmark/scripts/slurm_train.sh diff --git a/projects/RF100-Benchmark/README.md b/projects/RF100-Benchmark/README.md new file mode 100644 index 00000000000..815b86d71d4 --- /dev/null +++ b/projects/RF100-Benchmark/README.md @@ -0,0 +1,215 @@ +# Roboflow 100 Benchmark + +> [Roboflow 100: A Rich, Multi-Domain Object Detection Benchmark](https://arxiv.org/abs/2211.13523v3) + + + +## Abstract + +The evaluation of object detection models is usually performed by optimizing a single metric, e.g. mAP, on a fixed set of datasets, e.g. Microsoft COCO and Pascal VOC. Due to image retrieval and annotation costs, these datasets consist largely of images found on the web and do not represent many real-life domains that are being modelled in practice, e.g. satellite, microscopic and gaming, making it difficult to assert the degree of generalization learned by the model. We introduce the Roboflow-100 (RF100) consisting of 100 datasets, 7 imagery domains, 224,714 images, and 805 class labels with over 11,170 labelling hours. We derived RF100 from over 90,000 public datasets, 60 million public images that are actively being assembled and labelled by computer vision practitioners in the open on the web application Roboflow Universe. By releasing RF100, we aim to provide a semantically diverse, multi-domain benchmark of datasets to help researchers test their model's generalizability with real-life data. RF100 download and benchmark replication are available on GitHub. + +
    + +
    + +## Code Structure + +```text +# current path is projects/RF100-Benchmark/ +├── configs +│ ├── dino_r50_fpn_ms_8xb8_tweeter-profile.py +│ ├── faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py +│ └── tood_r50_fpn_ms_8xb8_tweeter-profile.py +├── README.md +├── README_zh-CN.md +├── rf100 +└── scripts + ├── create_new_config.py # Based on the provided configuration, generate the training configuration of the remaining 99 datasets + ├── datasets_links_640.txt # Dataset download link, from the official repo + ├── download_dataset.py # Dataset download code, from the official repo + ├── download_datasets.sh # Dataset download script, from the official repo + ├── labels_names.json # Dataset information, from the official repo, but there are some errors so we modified it + ├── parse_dataset_link.py # from the official repo + ├── log_extract.py # Results collection and collation of training + └── dist_train.sh # Training and evaluation startup script + └── slurm_train.sh # Slurm Training and evaluation startup script +``` + +## Dataset Preparation + +Roboflow 100 dataset is hosted by Roboflow platform, and detailed download scripts are provided in the [roboflow-100-benchmark](https://github.com/roboflow/roboflow-100-benchmark) repository. For simplicity, we use the official download script directly. + +Before downloading the data, you need to register an account on the Roboflow platform to get the API key. + +
    + +
    + +```shell +export ROBOFLOW_API_KEY = Your Private API Key +``` + +At the same time, you should also install the Roboflow package. + +```shell +pip install roboflow +``` + +Finally, use the following command to download the dataset. + +```shell +cd projects/RF100-Benchmark/ +bash scripts/download_datasets.sh +``` + +Download the dataset, and a `rf100` folder will be generated in the current directory `projects/RF100-Benchmark/`, which contains all the datasets. The structure is as follows: + +```text +# current path is projects/RF100-Benchmark/ +├── README.md +├── README_zh-CN.md +└── scripts + ├── datasets_links_640.txt +├── rf100 +│ └── tweeter-profile +│ │ ├── train +| | | ├── 0b3la49zec231_jpg.rf.8913f1b7db315c31d09b1d2f583fb521.jpg +| | | ├──_annotations.coco.json +│ │ ├── valid +| | | ├── 0fcjw3hbfdy41_jpg.rf.d61585a742f6e9d1a46645389b0073ff.jpg +| | | ├──_annotations.coco.json +│ │ ├── test +| | | ├── 0dh0to01eum41_jpg.rf.dcca24808bb396cdc07eda27a2cea2d4.jpg +| | | ├──_annotations.coco.json +│ │ ├── README.dataset.txt +│ │ ├── README.roboflow.txt +│ └── 4-fold-defect +... +``` + +The dataset takes up a total of 12.3G of storage space. If you don't want to train and evaluate all models at once, you can modify the `scripts/datasets_links_640.txt` file and delete the links to the datasets you don't want to use. + +Roboflow 100 dataset features are shown in the following figure + +
    + +
    + +If you want to have a clear understanding of the dataset, you can check the [roboflow-100-benchmark](https://github.com/roboflow/roboflow-100-benchmark) repository, which provides many dataset analysis scripts. + +## Model Training and Evaluation + +If you want to train and evaluate all models at once, you can use the following command. + +1. Single GPU Training + +```shell +# current path is projects/RF100-Benchmark/ +bash scripts/dist_train.sh configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py 1 +# Specify the save path +bash scripts/dist_train.sh configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py 1 my_work_dirs +``` + +2. Distributed Multi-GPU Training + +```shell +bash scripts/dist_train.sh configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py 8 +# Specify the save path +bash scripts/dist_train.sh configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py 8 my_work_dirs +``` + +3. Slurm Training + +```shell +bash scripts/slurm_train.sh configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py 8 +# Specify the save path +bash scripts/slurm_train.sh configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py 8 my_work_dirs +``` + +After training, a `work_dirs` folder will be generated in the current directory, which contains the trained model weights and logs. + +1. For the convenience of users to debug or only want to train specific datasets, we provide the `DEBUG` variable in `scripts/*_train.sh`, you only need to set it to 1, and specify the datasets you want to train in the `datasets_list` variable. +2. Considering that for various reasons, users may encounter training failures for certain datasets during the training process, we provide the `RETRY_PATH` variable, you only need to pass in the txt dataset list file, and the program will read the dataset in the file, and then only train specific datasets. If not provided, it is training the full dataset. + +```shell +RETRY_PATH=failed_dataset_list.txt bash scripts/dist_train.sh configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py 8 my_work_dirs +``` + +The txt represents a dataset name on each line, as shown below (the blank line in the 4th line is indispensable): + +```text +acl-x-ray +tweeter-profile +abdomen-mri + +``` + +The txt file can also be generated using the `log_extract.py` script introduced later, without manually creating it. + +## Model Summary + +If you want to collect the results after the model is trained or during the training, you can execute the `log_extract.py` script, which will collect the information under `work_dirs` and output it in csv and xlsx format. + +Before running the script, please make sure that `pandas` and `openpyxl` are installed + +```shell +python scripts/log_extract.py faster_rcnn --epoch 25 --work-dirs my_work_dirs +``` + +- The first input parameter is used to generate the csv title, so you can enter any string, but it is recommended to enter the model name for easy viewing later. +- `--epoch` parameter refers to the number of model training epochs, which is used to parse the log. By default, we train 100 epochs for each dataset, but RepeatDataset is used in the configuration, so the actual training epoch is 25. +- `--work-dirs` is the working path where you save the trained model. The default is the `work_dirs` folder under the current path. + +After running, the following three new files will be generated in `my_work_dirs` + +```text +timestamp_detail.xlsx # Detailed information on the sorting of 100 datasets. +timestamp_sum.xlsx # Summary information of 100 datasets. +timestamp_eval.csv # Evaluation results of 100 datasets in the order of training. +failed_dataset_list.txt +``` + +Currently, we provide the evaluation results of the Faster RCNN, TOOD and DINO algorithms (no careful parameter tuning). You can also quickly evaluate your own model according to the above process. + +## Result Analysis + +
    + +
    + +💎 The detailed table can be accessed directly [here](https://aicarrier.feishu.cn/drive/folder/QJ4rfqLzylIVTjdjYo3cunbinMh) 💎 + +To ensure a fair comparison and no special parameter tuning, the `Faster RCNN, TOOD and DINO` algorithms use the same epoch and data augmentation strategy, and all load the COCO pre-training weights, and save the best model performance on the validation set during training. Other instructions are as follows: + +- To speed up the training speed, all models are trained on 8-card GPUs. Except that the DINO algorithm trains OOM on some datasets, all other models and datasets are trained on 8 3090s +- Because the GT boxes of the single image of the 5 datasets 'bacteria-ptywi', 'circuit-elements', 'marbles', 'printed-circuit-board', 'solar-panels-taxvb' are very large, which makes DINO unable to train on 3090, so we train these 5 datasets on A100 + +From the above figure, the performance of the `DINO` algorithm is better than that of traditional CNN detection algorithms such as `Faster RCNN and TOOD`, which shows that the Transformer algorithm is also better than traditional CNN detection algorithms in different fields or different data volumes. However, if a certain field is analyzed separately, it may not be the case. + +Roboflow 100 datasets also have defects: + +- Some datasets have very few training images. If you want to benchmark with the same hyperparameters, it may cause poor performance +- Some datasets in some fields have very small and many objects. `Faster RCNN, TOOD and DINO` have very poor results without specific parameter tuning. For this situation, users can ignore the results of these datasets +- Some datasets have too casual annotations, which may result in poor performance if you want to apply them to image-text detection models + +Finally, it needs to be explained: + +1. Since there are a lot of 100 datasets, we cannot check each dataset, so if there is anything unreasonable, please feedback, we will fix it as soon as possible. +2. We also provide various scale summary results such as mAP_s, but because some data does not exist this scale bounding box, we ignore these datasets when summarizing. + +## Custom Algorithm Benchmark + +If users want to benchmark different algorithms for Roboflow 100, you only need to add algorithm configurations in the `projects/RF100-Benchmark/configs` folder. + +Note: Since the internal running process is to replace the string in the user-provided configuration with the function of custom dataset, the configuration provided by the user must be the `tweeter-profile` dataset and must include the `data_root` and `class_name` variables, otherwise the program will report an error. + +## Citation + +```BibTeX +@misc{2211.13523, +Author = {Floriana Ciaglia and Francesco Saverio Zuppichini and Paul Guerrie and Mark McQuade and Jacob Solawetz}, +Title = {Roboflow 100: A Rich, Multi-Domain Object Detection Benchmark}, +Year = {2022}, +Eprint = {arXiv:2211.13523}, +} +``` diff --git a/projects/RF100-Benchmark/README_zh-CN.md b/projects/RF100-Benchmark/README_zh-CN.md new file mode 100644 index 00000000000..61958b44374 --- /dev/null +++ b/projects/RF100-Benchmark/README_zh-CN.md @@ -0,0 +1,215 @@ +# Roboflow 100 Benchmark + +> [Roboflow 100: A Rich, Multi-Domain Object Detection Benchmark](https://arxiv.org/abs/2211.13523v3) + + + +## 摘要 + +目标检测模型的评估通常通过在一组固定的数据集上优化单一指标(例如 mAP),例如 Microsoft COCO 和 Pascal VOC。由于图像检索和注释成本高昂,这些数据集主要由在网络上找到的图像组成,并不能代表实际建模的许多现实领域,例如卫星、显微和游戏等,这使得很难确定模型学到的泛化程度。我们介绍了 Roboflow-100(RF100),它包括 100 个数据集、7 个图像领域、224,714 张图像和 805 个类别标签,超过 11,170 个标注小时。我们从超过 90,000 个公共数据集、6000 万个公共图像中提取了 RF100,这些数据集正在由计算机视觉从业者在网络应用程序 Roboflow Universe 上积极组装和标注。通过发布 RF100,我们旨在提供一个语义多样、多领域的数据集基准,帮助研究人员用真实数据测试模型的泛化能力。 + +
    + +
    + +## 代码结构说明 + +```text +# 当前文件路径为 projects/RF100-Benchmark/ +├── configs # 配置文件 +│ ├── dino_r50_fpn_ms_8xb8_tweeter-profile.py +│ ├── faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py +│ └── tood_r50_fpn_ms_8xb8_tweeter-profile.py +├── README.md +├── README_zh-CN.md +├── rf100 +└── scripts + ├── create_new_config.py # 基于上述提供的配置生成其余 99 个数据集训练配置 + ├── datasets_links_640.txt # 数据集下载链接,来自官方 repo + ├── download_dataset.py # 数据集下载代码,来自官方 repo + ├── download_datasets.sh # 数据集下载脚本,来自官方 repo + ├── labels_names.json # 数据集信息,来自官方 repo,不过由于有一些错误因此我们进行了修改 + ├── parse_dataset_link.py # 下载数据集需要,来自官方 repo + ├── log_extract.py # 对训练的结果进行收集和整理 + └── dist_train.sh # 训练和评估启动脚本 + └── slurm_train.sh # slurm 训练和评估启动脚本 +``` + +## 数据集准备 + +Roboflow 100 数据集是由 Roboflow 平台托管,并且在 [roboflow-100-benchmark](https://github.com/roboflow/roboflow-100-benchmark) 仓库中提供了详细的下载脚本。为了简单,我们直接使用官方提供的下载脚本。 + +在下载数据前,你首先需要在 Roboflow 平台注册账号,获取 API key。 + +
    + +
    + +```shell +export ROBOFLOW_API_KEY = 你的 Private API Key +``` + +同时你也应该安装 Roboflow 包。 + +```shell +pip install roboflow +``` + +最后使用如下命令下载数据集即可。 + +```shell +cd projects/RF100-Benchmark/ +bash scripts/download_datasets.sh +``` + +下载完成后,会在当前目录下 `projects/RF100-Benchmark/` 生成 `rf100` 文件夹,其中包含了所有的数据集。其结构如下所示: + +```text +# 当前文件路径为 projects/RF100-Benchmark/ +├── README.md +├── README_zh-CN.md +└── scripts + ├── datasets_links_640.txt +├── rf100 +│ └── tweeter-profile +│ │ ├── train +| | | ├── 0b3la49zec231_jpg.rf.8913f1b7db315c31d09b1d2f583fb521.jpg +| | | ├──_annotations.coco.json +│ │ ├── valid +| | | ├── 0fcjw3hbfdy41_jpg.rf.d61585a742f6e9d1a46645389b0073ff.jpg +| | | ├──_annotations.coco.json +│ │ ├── test +| | | ├── 0dh0to01eum41_jpg.rf.dcca24808bb396cdc07eda27a2cea2d4.jpg +| | | ├──_annotations.coco.json +│ │ ├── README.dataset.txt +│ │ ├── README.roboflow.txt +│ └── 4-fold-defect +... +``` + +整个数据集一共需要 12.3G 存储空间。如果你不想一次性训练和评估所有模型,你可以修改 `scripts/datasets_links_640.txt` 文件,将你不想使用的数据集链接删掉即可。 + +Roboflow 100 数据集的特点如下图所示 + +
    + +
    + +如果想对数据集有个清晰的认识,可以查看 [roboflow-100-benchmark](https://github.com/roboflow/roboflow-100-benchmark) 仓库,其提供了诸多数据集分析脚本。 + +## 模型训练和评估 + +在准备好数据集后,可以一键开启单卡或者多卡训练。以 `faster-rcnn_r50_fpn` 算法为例 + +1. 单卡训练 + +```shell +# 当前位于 projects/RF100-Benchmark/ +bash scripts/dist_train.sh configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py 1 +# 如果想指定保存路径 +bash scripts/dist_train.sh configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py 1 my_work_dirs +``` + +2. 分布式多卡训练 + +```shell +bash scripts/dist_train.sh configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py 8 +# 如果想指定保存路径 +bash scripts/dist_train.sh configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py 8 my_work_dirs +``` + +3. Slurm 训练 + +```shell +bash scripts/slurm_train.sh configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py 8 +# 如果想指定保存路径 +bash scripts/slurm_train.sh configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py 8 my_work_dirs +``` + +训练完成后会在当前路径下生成 `work_dirs` 文件夹,其中包含了训练好的模型权重和日志。 + +1. 为了方便用户调试或者只想训练特定的数据集,在 `scripts/*_train.sh` 中我们提供了 `DEBUG` 变量,你只需要设置为 1,并且在 `datasets_list` 变量中指定你想训练的数据集即可。 +2. 考虑到由于各种原因,用户训练过程中可能出现某些数据集训练失败,因此我们提供了 `RETRY_PATH` 变量,你只需要传入 txt 数据集列表文件即可,程序会读取该文件中的数据集,然后只训练特定数据集。如果不提供则为全量数据集训练。 + +```shell +RETRY_PATH=failed_dataset_list.txt bash scripts/dist_train.sh configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py 8 my_work_dirs +``` + +txt 文件中每一行代表一个数据集名称,示例如下(第 4 行的空行不可少): + +```text +acl-x-ray +tweeter-profile +abdomen-mri + +``` + +上述 txt 文件你也可以采用后续介绍的 `log_extract.py` 脚本生成,而无需手动创建。 + +## 模型汇总 + +在模型训练好或者在训练中途你想对结果进行收集,你可以执行 `log_extract.py` 脚本,该脚本会将 `work_dirs` 下的信息收集并输出为 csv 和 xlsx 格式。 + +在运行脚本前,请确保安装了 `pandas` 和 `openpyxl` + +```shell +python scripts/log_extract.py faster_rcnn --epoch 25 --work-dirs my_work_dirs +``` + +- 第一个输入参数是用于生成 csv 标题,因此你可以输入任意字符串,但是建议输入模型名称,方便后续查看。 +- `--epoch` 参数是指模型训练 epoch 数,用于解析 log,默认我们是对每个数据集训练 100 epoch,但是配置中采用了 `RepeatDataset`,因此实际训练 epoch 是 25 +- `--work-dirs` 是你训练模型保存的工作路径,默认是当前路径下的 `work_dirs` 文件夹 + +运行后会在 `my_work_dirs` 里面生成如下三个新文件 + +```text +时间戳_detail.xlsx # 100 个数据集的排序后详细信息 +时间戳_sum.xlsx # 100 个数据集的汇总信息 +时间戳_eval.csv # 100 个数据集的按照训练顺序评估结果 +failed_dataset_list.txt # 失败数据集列表 +``` + +目前我们提供了 `Faster RCNN、TOOD 和 DINO` 算法的评估结果(并没有进行精心的调参)。你也可以按照上述流程对自己的模型进行快速评估。 + +## 结果分析 + +
    + +
    + +💎 详情表,请直接访问 [结果](https://aicarrier.feishu.cn/drive/folder/QJ4rfqLzylIVTjdjYo3cunbinMh) 💎 + +为了确保对比公平且不存在特别的调参,`Faster RCNN、TOOD 和 DINO` 算法采用了相同的 epoch 和数据增强策略,并且都加载了 COCO 预训练权重,同时在训练中保存了验证集上性能最好的模型。其他说明如下所示: + +- 为了加快训练速度,所有模型都是在 8 卡 GPU 上面训练。除了 DINO 算法在部分数据集上训练 OOM 外,其余所有模型和数据集都是在 8 张 3090 上训练 +- 由于 'bacteria-ptywi', 'circuit-elements', 'marbles', 'printed-circuit-board', 'solar-panels-taxvb' 这 5 个数据集单张图片的 GT 框非常多导致 DINO 在 3090 上无法训练,因此这 5 个数据集我们在 A100 上进行训练 + +从上图来看,`DINO` 算法性能好于 `Faster RCNN 和 TOOD` 等传统 CNN 检测算法,说明 Transformer 算法在不同的领域或者不同数据量的情况下效果也是好于传统 CNN 类检测算法的,不过如果单独分析某些领域则不一定。 + +Roboflow 100 数据集本身也存在缺陷: + +- 有些数据集训练图片数非常少,如果要统一超参进行 benchmark,可能会导致其性能很差 +- 有些领域的部分数据集物体非常小且多,`Faster RCNN、TOOD 和 DINO` 在不进行特定调参情况下效果都非常差。针对这种情况,用户可以忽略这些数据集的结果 +- 有些数据集标注的类别过于随意,如果想应用于图文检测类模型,则可能会存在性能低下的现象 + +最后需要说明: + +1. 由于 100 个数据集比较多,我们无法对每个数据集进行检查,因此如果有不合理的地方,欢迎反馈,我们将尽快修复 +2. 我们也提供了 `mAP_s` 等各种尺度的汇总结果,但是由于部分数据不存在这个尺度边界框,因为汇总时候我们忽略这些数据集 + +## 自定义算法进行 benchmark + +如果用户想针对不同算法进行 Roboflow 100 Benchmark,你只需要在 `projects/RF100-Benchmark/configs` 文件夹新增算法配置即可。 + +注意:由于内部运行过程是通过将用户提供的配置中是以字符串替换的方式实现自定义数据集的功能,因此用户提供的配置必须是 `tweeter-profile` 数据集且必须包括 `data_root` 和 `class_name` 变量,否则程序会报错。 + +## 引用 + +```BibTeX +@misc{2211.13523, +Author = {Floriana Ciaglia and Francesco Saverio Zuppichini and Paul Guerrie and Mark McQuade and Jacob Solawetz}, +Title = {Roboflow 100: A Rich, Multi-Domain Object Detection Benchmark}, +Year = {2022}, +Eprint = {arXiv:2211.13523}, +} +``` diff --git a/projects/RF100-Benchmark/__init__.py b/projects/RF100-Benchmark/__init__.py new file mode 100644 index 00000000000..66d2c4141a3 --- /dev/null +++ b/projects/RF100-Benchmark/__init__.py @@ -0,0 +1,4 @@ +from .coco import RF100CocoDataset +from .coco_metric import RF100CocoMetric + +__all__ = ['RF100CocoDataset', 'RF100CocoMetric'] diff --git a/projects/RF100-Benchmark/coco.py b/projects/RF100-Benchmark/coco.py new file mode 100644 index 00000000000..1fee345967e --- /dev/null +++ b/projects/RF100-Benchmark/coco.py @@ -0,0 +1,213 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import copy +import os.path as osp +from typing import List, Union + +from mmengine.fileio import get_local_path + +from mmdet.datasets.api_wrappers import COCO +from mmdet.datasets.coco import CocoDataset +from mmdet.registry import DATASETS + + +@DATASETS.register_module() +class RF100CocoDataset(CocoDataset): + """Dataset for COCO. + + In the RF100 dataset, there are cases where the classes and sup_names are + the same, which is incorrect, such as "bees-jt5in". Therefore, we need to + handle this situation. + """ + + METAINFO = { + 'classes': + ('person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', + 'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign', + 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', + 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', + 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', + 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', + 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', + 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange', + 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', + 'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv', + 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', + 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', + 'scissors', 'teddy bear', 'hair drier', 'toothbrush'), + # palette is a list of color tuples, which is used for visualization. + 'palette': + [(220, 20, 60), (119, 11, 32), (0, 0, 142), (0, 0, 230), (106, 0, 228), + (0, 60, 100), (0, 80, 100), (0, 0, 70), (0, 0, 192), (250, 170, 30), + (100, 170, 30), (220, 220, 0), (175, 116, 175), (250, 0, 30), + (165, 42, 42), (255, 77, 255), (0, 226, 252), (182, 182, 255), + (0, 82, 0), (120, 166, 157), (110, 76, 0), (174, 57, 255), + (199, 100, 0), (72, 0, 118), (255, 179, 240), (0, 125, 92), + (209, 0, 151), (188, 208, 182), (0, 220, 176), (255, 99, 164), + (92, 0, 73), (133, 129, 255), (78, 180, 255), (0, 228, 0), + (174, 255, 243), (45, 89, 255), (134, 134, 103), (145, 148, 174), + (255, 208, 186), (197, 226, 255), (171, 134, 1), (109, 63, 54), + (207, 138, 255), (151, 0, 95), (9, 80, 61), (84, 105, 51), + (74, 65, 105), (166, 196, 102), (208, 195, 210), (255, 109, 65), + (0, 143, 149), (179, 0, 194), (209, 99, 106), (5, 121, 0), + (227, 255, 205), (147, 186, 208), (153, 69, 1), (3, 95, 161), + (163, 255, 0), (119, 0, 170), (0, 182, 199), (0, 165, 120), + (183, 130, 88), (95, 32, 0), (130, 114, 135), (110, 129, 133), + (166, 74, 118), (219, 142, 185), (79, 210, 114), (178, 90, 62), + (65, 70, 15), (127, 167, 115), (59, 105, 106), (142, 108, 45), + (196, 172, 0), (95, 54, 80), (128, 76, 255), (201, 57, 1), + (246, 0, 122), (191, 162, 208)] + } + COCOAPI = COCO + # ann_id is unique in coco dataset. + ANN_ID_UNIQUE = True + + def load_data_list(self) -> List[dict]: + """Load annotations from an annotation file named as ``self.ann_file`` + + Returns: + List[dict]: A list of annotation. + """ # noqa: E501 + with get_local_path( + self.ann_file, backend_args=self.backend_args) as local_path: + self.coco = self.COCOAPI(local_path) + # The order of returned `cat_ids` will not + # change with the order of the `classes` + self.cat_ids = self.coco.get_cat_ids( + cat_names=self.metainfo['classes']) + + # ---------------------------------- + # We only change this + if len(self.cat_ids) != len(self.metainfo['classes']): + sup_id = self.coco.get_cat_ids(sup_names=['none']) + self.cat_ids = [x for x in self.cat_ids if x not in sup_id] + # ---------------------------------- + + self.cat2label = {cat_id: i for i, cat_id in enumerate(self.cat_ids)} + self.cat_img_map = copy.deepcopy(self.coco.cat_img_map) + + img_ids = self.coco.get_img_ids() + data_list = [] + total_ann_ids = [] + for img_id in img_ids: + raw_img_info = self.coco.load_imgs([img_id])[0] + raw_img_info['img_id'] = img_id + + ann_ids = self.coco.get_ann_ids(img_ids=[img_id]) + raw_ann_info = self.coco.load_anns(ann_ids) + total_ann_ids.extend(ann_ids) + + parsed_data_info = self.parse_data_info({ + 'raw_ann_info': + raw_ann_info, + 'raw_img_info': + raw_img_info + }) + data_list.append(parsed_data_info) + if self.ANN_ID_UNIQUE: + assert len(set(total_ann_ids)) == len( + total_ann_ids + ), f"Annotation ids in '{self.ann_file}' are not unique!" + + del self.coco + + return data_list + + def parse_data_info(self, raw_data_info: dict) -> Union[dict, List[dict]]: + """Parse raw annotation to target format. + + Args: + raw_data_info (dict): Raw data information load from ``ann_file`` + + Returns: + Union[dict, List[dict]]: Parsed annotation. + """ + img_info = raw_data_info['raw_img_info'] + ann_info = raw_data_info['raw_ann_info'] + + data_info = {} + + # TODO: need to change data_prefix['img'] to data_prefix['img_path'] + img_path = osp.join(self.data_prefix['img'], img_info['file_name']) + if self.data_prefix.get('seg', None): + seg_map_path = osp.join( + self.data_prefix['seg'], + img_info['file_name'].rsplit('.', 1)[0] + self.seg_map_suffix) + else: + seg_map_path = None + data_info['img_path'] = img_path + data_info['img_id'] = img_info['img_id'] + data_info['seg_map_path'] = seg_map_path + data_info['height'] = img_info['height'] + data_info['width'] = img_info['width'] + + if self.return_classes: + data_info['text'] = self.metainfo['classes'] + data_info['custom_entities'] = True + + instances = [] + for i, ann in enumerate(ann_info): + instance = {} + + if ann.get('ignore', False): + continue + x1, y1, w, h = ann['bbox'] + inter_w = max(0, min(x1 + w, img_info['width']) - max(x1, 0)) + inter_h = max(0, min(y1 + h, img_info['height']) - max(y1, 0)) + if inter_w * inter_h == 0: + continue + if ann['area'] <= 0 or w < 1 or h < 1: + continue + if ann['category_id'] not in self.cat_ids: + continue + bbox = [x1, y1, x1 + w, y1 + h] + + if ann.get('iscrowd', False): + instance['ignore_flag'] = 1 + else: + instance['ignore_flag'] = 0 + instance['bbox'] = bbox + instance['bbox_label'] = self.cat2label[ann['category_id']] + + if ann.get('segmentation', None): + instance['mask'] = ann['segmentation'] + + instances.append(instance) + data_info['instances'] = instances + return data_info + + def filter_data(self) -> List[dict]: + """Filter annotations according to filter_cfg. + + Returns: + List[dict]: Filtered results. + """ + if self.test_mode: + return self.data_list + + if self.filter_cfg is None: + return self.data_list + + filter_empty_gt = self.filter_cfg.get('filter_empty_gt', False) + min_size = self.filter_cfg.get('min_size', 0) + + # obtain images that contain annotation + ids_with_ann = set(data_info['img_id'] for data_info in self.data_list) + # obtain images that contain annotations of the required categories + ids_in_cat = set() + for i, class_id in enumerate(self.cat_ids): + ids_in_cat |= set(self.cat_img_map[class_id]) + # merge the image id sets of the two conditions and use the merged set + # to filter out images if self.filter_empty_gt=True + ids_in_cat &= ids_with_ann + + valid_data_infos = [] + for i, data_info in enumerate(self.data_list): + img_id = data_info['img_id'] + width = data_info['width'] + height = data_info['height'] + if filter_empty_gt and img_id not in ids_in_cat: + continue + if min(width, height) >= min_size: + valid_data_infos.append(data_info) + + return valid_data_infos diff --git a/projects/RF100-Benchmark/coco_metric.py b/projects/RF100-Benchmark/coco_metric.py new file mode 100644 index 00000000000..afe4daeffa5 --- /dev/null +++ b/projects/RF100-Benchmark/coco_metric.py @@ -0,0 +1,243 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import itertools +import os.path as osp +import tempfile +from collections import OrderedDict +from typing import Dict + +import numpy as np +from mmengine.fileio import load +from mmengine.logging import MMLogger +from terminaltables import AsciiTable + +from mmdet.datasets.api_wrappers import COCO, COCOeval +from mmdet.evaluation.metrics import CocoMetric +from mmdet.registry import METRICS + + +@METRICS.register_module() +class RF100CocoMetric(CocoMetric): + """COCO evaluation metric. + + In the RF100 dataset, there are cases where the classes and sup_names are + the same, which is incorrect, such as "bees-jt5in". Therefore, we need to + handle this situation. + """ + + def compute_metrics(self, results: list) -> Dict[str, float]: + """Compute the metrics from processed results. + + Args: + results (list): The processed results of each batch. + + Returns: + Dict[str, float]: The computed metrics. The keys are the names of + the metrics, and the values are corresponding results. + """ + logger: MMLogger = MMLogger.get_current_instance() + + # split gt and prediction list + gts, preds = zip(*results) + + tmp_dir = None + if self.outfile_prefix is None: + tmp_dir = tempfile.TemporaryDirectory() + outfile_prefix = osp.join(tmp_dir.name, 'results') + else: + outfile_prefix = self.outfile_prefix + + if self._coco_api is None: + # use converted gt json file to initialize coco api + logger.info('Converting ground truth to coco format...') + coco_json_path = self.gt_to_coco_json( + gt_dicts=gts, outfile_prefix=outfile_prefix) + self._coco_api = COCO(coco_json_path) + + # handle lazy init + if self.cat_ids is None: + self.cat_ids = self._coco_api.get_cat_ids( + cat_names=self.dataset_meta['classes']) + + # ---------------------------------- + # We only change this + if len(self.cat_ids) != len(self.dataset_meta['classes']): + sup_id = self._coco_api.get_cat_ids(sup_names=['none']) + self.cat_ids = [x for x in self.cat_ids if x not in sup_id] + # ---------------------------------- + + if self.img_ids is None: + self.img_ids = self._coco_api.get_img_ids() + + # convert predictions to coco format and dump to json file + result_files = self.results2json(preds, outfile_prefix) + + eval_results = OrderedDict() + if self.format_only: + logger.info('results are saved in ' + f'{osp.dirname(outfile_prefix)}') + return eval_results + + for metric in self.metrics: + logger.info(f'Evaluating {metric}...') + + # TODO: May refactor fast_eval_recall to an independent metric? + # fast eval recall + if metric == 'proposal_fast': + ar = self.fast_eval_recall( + preds, self.proposal_nums, self.iou_thrs, logger=logger) + log_msg = [] + for i, num in enumerate(self.proposal_nums): + eval_results[f'AR@{num}'] = ar[i] + log_msg.append(f'\nAR@{num}\t{ar[i]:.4f}') + log_msg = ''.join(log_msg) + logger.info(log_msg) + continue + + # evaluate proposal, bbox and segm + iou_type = 'bbox' if metric == 'proposal' else metric + if metric not in result_files: + raise KeyError(f'{metric} is not in results') + try: + predictions = load(result_files[metric]) + if iou_type == 'segm': + # Refer to https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocotools/coco.py#L331 # noqa + # When evaluating mask AP, if the results contain bbox, + # cocoapi will use the box area instead of the mask area + # for calculating the instance area. Though the overall AP + # is not affected, this leads to different + # small/medium/large mask AP results. + for x in predictions: + x.pop('bbox') + coco_dt = self._coco_api.loadRes(predictions) + + except IndexError: + logger.error( + 'The testing results of the whole dataset is empty.') + break + + coco_eval = COCOeval(self._coco_api, coco_dt, iou_type) + + coco_eval.params.catIds = self.cat_ids + coco_eval.params.imgIds = self.img_ids + coco_eval.params.maxDets = list(self.proposal_nums) + coco_eval.params.iouThrs = self.iou_thrs + + # mapping of cocoEval.stats + coco_metric_names = { + 'mAP': 0, + 'mAP_50': 1, + 'mAP_75': 2, + 'mAP_s': 3, + 'mAP_m': 4, + 'mAP_l': 5, + 'AR@100': 6, + 'AR@300': 7, + 'AR@1000': 8, + 'AR_s@1000': 9, + 'AR_m@1000': 10, + 'AR_l@1000': 11 + } + metric_items = self.metric_items + if metric_items is not None: + for metric_item in metric_items: + if metric_item not in coco_metric_names: + raise KeyError( + f'metric item "{metric_item}" is not supported') + + if metric == 'proposal': + coco_eval.params.useCats = 0 + coco_eval.evaluate() + coco_eval.accumulate() + coco_eval.summarize() + if metric_items is None: + metric_items = [ + 'AR@100', 'AR@300', 'AR@1000', 'AR_s@1000', + 'AR_m@1000', 'AR_l@1000' + ] + + for item in metric_items: + val = float( + f'{coco_eval.stats[coco_metric_names[item]]:.3f}') + eval_results[item] = val + else: + coco_eval.evaluate() + coco_eval.accumulate() + coco_eval.summarize() + if self.classwise: # Compute per-category AP + # Compute per-category AP + # from https://github.com/facebookresearch/detectron2/ + precisions = coco_eval.eval['precision'] + # precision: (iou, recall, cls, area range, max dets) + assert len(self.cat_ids) == precisions.shape[2] + + results_per_category = [] + for idx, cat_id in enumerate(self.cat_ids): + t = [] + # area range index 0: all area ranges + # max dets index -1: typically 100 per image + nm = self._coco_api.loadCats(cat_id)[0] + precision = precisions[:, :, idx, 0, -1] + precision = precision[precision > -1] + if precision.size: + ap = np.mean(precision) + else: + ap = float('nan') + t.append(f'{nm["name"]}') + t.append(f'{round(ap, 3)}') + eval_results[f'{nm["name"]}_precision'] = round(ap, 3) + + # indexes of IoU @50 and @75 + for iou in [0, 5]: + precision = precisions[iou, :, idx, 0, -1] + precision = precision[precision > -1] + if precision.size: + ap = np.mean(precision) + else: + ap = float('nan') + t.append(f'{round(ap, 3)}') + + # indexes of area of small, median and large + for area in [1, 2, 3]: + precision = precisions[:, :, idx, area, -1] + precision = precision[precision > -1] + if precision.size: + ap = np.mean(precision) + else: + ap = float('nan') + t.append(f'{round(ap, 3)}') + results_per_category.append(tuple(t)) + + num_columns = len(results_per_category[0]) + results_flatten = list( + itertools.chain(*results_per_category)) + headers = [ + 'category', 'mAP', 'mAP_50', 'mAP_75', 'mAP_s', + 'mAP_m', 'mAP_l' + ] + results_2d = itertools.zip_longest(*[ + results_flatten[i::num_columns] + for i in range(num_columns) + ]) + table_data = [headers] + table_data += [result for result in results_2d] + table = AsciiTable(table_data) + logger.info('\n' + table.table) + + if metric_items is None: + metric_items = [ + 'mAP', 'mAP_50', 'mAP_75', 'mAP_s', 'mAP_m', 'mAP_l' + ] + + for metric_item in metric_items: + key = f'{metric}_{metric_item}' + val = coco_eval.stats[coco_metric_names[metric_item]] + eval_results[key] = float(f'{round(val, 3)}') + + ap = coco_eval.stats[:6] + logger.info(f'{metric}_mAP_copypaste: {ap[0]:.3f} ' + f'{ap[1]:.3f} {ap[2]:.3f} {ap[3]:.3f} ' + f'{ap[4]:.3f} {ap[5]:.3f}') + + if tmp_dir is not None: + tmp_dir.cleanup() + return eval_results diff --git a/projects/RF100-Benchmark/configs/dino_r50_fpn_ms_8xb8_tweeter-profile.py b/projects/RF100-Benchmark/configs/dino_r50_fpn_ms_8xb8_tweeter-profile.py new file mode 100644 index 00000000000..9edfed1cd07 --- /dev/null +++ b/projects/RF100-Benchmark/configs/dino_r50_fpn_ms_8xb8_tweeter-profile.py @@ -0,0 +1,102 @@ +_base_ = '../../../configs/dino/dino-4scale_r50_8xb2-12e_coco.py' + +custom_imports = dict( + imports=['projects.RF100-Benchmark'], allow_failed_imports=False) + +data_root = 'rf100/tweeter-profile/' +class_name = ('profile_info', ) +num_classes = len(class_name) +metainfo = dict(classes=class_name) +image_scale = (640, 640) + +model = dict( + backbone=dict( + norm_eval=False, norm_cfg=dict(requires_grad=True), frozen_stages=-1), + bbox_head=dict(num_classes=int(num_classes))) + +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='RandomResize', + scale=image_scale, + ratio_range=(0.8, 1.2), + keep_ratio=True), + dict(type='RandomCrop', crop_size=image_scale), + dict(type='RandomFlip', prob=0.5), + dict(type='PackDetInputs') +] + +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='Resize', scale=image_scale, keep_ratio=True), + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] + +train_dataloader = dict( + batch_size=8, + num_workers=4, + batch_sampler=None, + dataset=dict( + _delete_=True, + type='RepeatDataset', + times=4, + dataset=dict( + type='RF100CocoDataset', + metainfo=metainfo, + data_root=data_root, + ann_file='train/_annotations.coco.json', + data_prefix=dict(img='train/'), + filter_cfg=dict(filter_empty_gt=False, min_size=32), + pipeline=train_pipeline))) + +val_dataloader = dict( + dataset=dict( + type='RF100CocoDataset', + metainfo=metainfo, + data_root=data_root, + ann_file='valid/_annotations.coco.json', + data_prefix=dict(img='valid/'), + pipeline=test_pipeline, + )) +test_dataloader = val_dataloader + +val_evaluator = dict( + type='RF100CocoMetric', + ann_file=data_root + 'valid/_annotations.coco.json', + metric='bbox', + format_only=False) +test_evaluator = val_evaluator + +max_epochs = 25 +train_cfg = dict(max_epochs=max_epochs) + +param_scheduler = [ + dict( + type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, end=200), + dict( + type='MultiStepLR', + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[18, 22], + gamma=0.1) +] + +load_from = 'https://download.openmmlab.com/mmdetection/v3.0/dino/dino-4scale_r50_8xb2-12e_coco/dino-4scale_r50_8xb2-12e_coco_20221202_182705-55b2bba2.pth' # noqa + +# We only save the best checkpoint by validation mAP. +default_hooks = dict( + checkpoint=dict(save_best='auto', max_keep_ckpts=-1, interval=-1)) + +# Default setting for scaling LR automatically +# - `enable` means enable scaling LR automatically +# or not by default. +# - `base_batch_size` = (8 GPUs) x (2 samples per GPU). +auto_scale_lr = dict(enable=False, base_batch_size=64) + +broadcast_buffers = True diff --git a/projects/RF100-Benchmark/configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py b/projects/RF100-Benchmark/configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py new file mode 100644 index 00000000000..5789110460b --- /dev/null +++ b/projects/RF100-Benchmark/configs/faster-rcnn_r50_fpn_ms_8xb8_tweeter-profile.py @@ -0,0 +1,101 @@ +_base_ = '../../../configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py' + +custom_imports = dict( + imports=['projects.RF100-Benchmark'], allow_failed_imports=False) + +data_root = 'rf100/tweeter-profile/' +class_name = ('profile_info', ) +num_classes = len(class_name) +metainfo = dict(classes=class_name) +image_scale = (640, 640) + +model = dict( + backbone=dict(norm_eval=False, frozen_stages=-1), + roi_head=dict(bbox_head=dict(num_classes=int(num_classes)))) + +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='RandomResize', + scale=image_scale, + ratio_range=(0.8, 1.2), + keep_ratio=True), + dict(type='RandomCrop', crop_size=image_scale), + dict(type='RandomFlip', prob=0.5), + dict(type='PackDetInputs') +] + +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='Resize', scale=image_scale, keep_ratio=True), + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] + +train_dataloader = dict( + batch_size=8, + num_workers=4, + batch_sampler=None, + dataset=dict( + _delete_=True, + type='RepeatDataset', + times=4, + dataset=dict( + type='RF100CocoDataset', + metainfo=metainfo, + data_root=data_root, + ann_file='train/_annotations.coco.json', + data_prefix=dict(img='train/'), + filter_cfg=dict(filter_empty_gt=False, min_size=32), + pipeline=train_pipeline))) + +val_dataloader = dict( + dataset=dict( + type='RF100CocoDataset', + metainfo=metainfo, + data_root=data_root, + ann_file='valid/_annotations.coco.json', + data_prefix=dict(img='valid/'), + pipeline=test_pipeline, + )) +test_dataloader = val_dataloader + +val_evaluator = dict( + type='RF100CocoMetric', + ann_file=data_root + 'valid/_annotations.coco.json', + metric='bbox', + format_only=False) +test_evaluator = val_evaluator + +max_epochs = 25 +train_cfg = dict(max_epochs=max_epochs) + +param_scheduler = [ + dict( + type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, end=200), + dict( + type='MultiStepLR', + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[18, 22], + gamma=0.1) +] + +load_from = 'https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_mstrain_3x_coco/faster_rcnn_r50_fpn_mstrain_3x_coco_20210524_110822-e10bd31c.pth' # noqa + +# We only save the best checkpoint by validation mAP. +default_hooks = dict( + checkpoint=dict(save_best='auto', max_keep_ckpts=-1, interval=-1)) + +# Default setting for scaling LR automatically +# - `enable` means enable scaling LR automatically +# or not by default. +# - `base_batch_size` = (8 GPUs) x (2 samples per GPU). +auto_scale_lr = dict(enable=False, base_batch_size=64) + +broadcast_buffers = True diff --git a/projects/RF100-Benchmark/configs/tood_r50_fpn_ms_8xb8_tweeter-profile.py b/projects/RF100-Benchmark/configs/tood_r50_fpn_ms_8xb8_tweeter-profile.py new file mode 100644 index 00000000000..d2acab77bd8 --- /dev/null +++ b/projects/RF100-Benchmark/configs/tood_r50_fpn_ms_8xb8_tweeter-profile.py @@ -0,0 +1,101 @@ +_base_ = '../../../configs/tood/tood_r50_fpn_1x_coco.py' + +custom_imports = dict( + imports=['projects.RF100-Benchmark'], allow_failed_imports=False) + +data_root = 'rf100/tweeter-profile/' +class_name = ('profile_info', ) +num_classes = len(class_name) +metainfo = dict(classes=class_name) +image_scale = (640, 640) + +model = dict( + backbone=dict(norm_eval=False, frozen_stages=-1), + bbox_head=dict(num_classes=int(num_classes))) + +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='RandomResize', + scale=image_scale, + ratio_range=(0.8, 1.2), + keep_ratio=True), + dict(type='RandomCrop', crop_size=image_scale), + dict(type='RandomFlip', prob=0.5), + dict(type='PackDetInputs') +] + +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='Resize', scale=image_scale, keep_ratio=True), + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] + +train_dataloader = dict( + batch_size=8, + num_workers=4, + batch_sampler=None, + dataset=dict( + _delete_=True, + type='RepeatDataset', + times=4, + dataset=dict( + type='RF100CocoDataset', + metainfo=metainfo, + data_root=data_root, + ann_file='train/_annotations.coco.json', + data_prefix=dict(img='train/'), + filter_cfg=dict(filter_empty_gt=False, min_size=32), + pipeline=train_pipeline))) + +val_dataloader = dict( + dataset=dict( + type='RF100CocoDataset', + metainfo=metainfo, + data_root=data_root, + ann_file='valid/_annotations.coco.json', + data_prefix=dict(img='valid/'), + pipeline=test_pipeline, + )) +test_dataloader = val_dataloader + +val_evaluator = dict( + type='RF100CocoMetric', + ann_file=data_root + 'valid/_annotations.coco.json', + metric='bbox', + format_only=False) +test_evaluator = val_evaluator + +max_epochs = 25 +train_cfg = dict(max_epochs=max_epochs) + +param_scheduler = [ + dict( + type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, end=200), + dict( + type='MultiStepLR', + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[18, 22], + gamma=0.1) +] + +load_from = 'https://download.openmmlab.com/mmdetection/v2.0/tood/tood_r50_fpn_1x_coco/tood_r50_fpn_1x_coco_20211210_103425-20e20746.pth' # noqa + +# We only save the best checkpoint by validation mAP. +default_hooks = dict( + checkpoint=dict(save_best='auto', max_keep_ckpts=-1, interval=-1)) + +# Default setting for scaling LR automatically +# - `enable` means enable scaling LR automatically +# or not by default. +# - `base_batch_size` = (8 GPUs) x (2 samples per GPU). +auto_scale_lr = dict(enable=False, base_batch_size=64) + +broadcast_buffers = True diff --git a/projects/RF100-Benchmark/scripts/create_new_config.py b/projects/RF100-Benchmark/scripts/create_new_config.py new file mode 100644 index 00000000000..028c70ec3a5 --- /dev/null +++ b/projects/RF100-Benchmark/scripts/create_new_config.py @@ -0,0 +1,42 @@ +from argparse import ArgumentParser + +from mmengine.fileio import load +from mmengine.utils import mkdir_or_exist + + +def parse_args(): + parser = ArgumentParser(description='create new config') + parser.add_argument('config') + parser.add_argument('dataset') + parser.add_argument('--save-dir', default='temp_configs') + parser.add_argument('--name-json', default='scripts/labels_names.json') + args = parser.parse_args() + return args + + +def main(): + args = parse_args() + + config = args.config + labels_names_json = args.name_json + + mkdir_or_exist(args.save_dir) + + json_data = load(labels_names_json) + dataset_name = [j['name'] for j in json_data] + classes_name = [tuple(j['classes'].keys()) for j in json_data] + if args.dataset in dataset_name: + classes_name = classes_name[dataset_name.index(args.dataset)] + with open(config, 'r') as file: + content = file.read() + new_content = content.replace("('profile_info', )", str(classes_name)) + new_content = new_content.replace('tweeter-profile', args.dataset) + + with open(f'{args.save_dir}/{args.dataset}.py', 'w') as file: + file.write(new_content) + else: + raise ValueError('dataset name not found in labels_names.json') + + +if __name__ == '__main__': + main() diff --git a/projects/RF100-Benchmark/scripts/datasets_links_640.txt b/projects/RF100-Benchmark/scripts/datasets_links_640.txt new file mode 100644 index 00000000000..5ef24e2a0f8 --- /dev/null +++ b/projects/RF100-Benchmark/scripts/datasets_links_640.txt @@ -0,0 +1,100 @@ +https://app.roboflow.com/roboflow-100/tweeter-profile/1 +https://app.roboflow.com/roboflow-100/gauge-u2lwv/4 +https://app.roboflow.com/roboflow-100/road-traffic/3 +https://app.roboflow.com/roboflow-100/wall-damage/1 +https://app.roboflow.com/roboflow-100/fish-market-ggjso/5 +https://app.roboflow.com/roboflow-100/soda-bottles/3 +https://app.roboflow.com/roboflow-100/flir-camera-objects/1 +https://app.roboflow.com/roboflow-100/stomata-cells/1 +https://app.roboflow.com/roboflow-100/leaf-disease-nsdsr/1 +https://app.roboflow.com/roboflow-100/bees-jt5in/1 +https://app.roboflow.com/roboflow-100/team-fight-tactics/1 +https://app.roboflow.com/roboflow-100/phages/1 +https://app.roboflow.com/roboflow-100/robomasters-285km/1 +https://app.roboflow.com/roboflow-100/lettuce-pallets/1 +https://app.roboflow.com/roboflow-100/trail-camera/1 +https://app.roboflow.com/roboflow-100/sedimentary-features-9eosf/4 +https://app.roboflow.com/roboflow-100/liver-disease/1 +https://app.roboflow.com/roboflow-100/cell-towers/1 +https://app.roboflow.com/roboflow-100/shark-teeth-5atku/1 +https://app.roboflow.com/roboflow-100/currency-v4f8j/1 +https://app.roboflow.com/roboflow-100/asbestos/1 +https://app.roboflow.com/roboflow-100/insects-mytwu/1 +https://app.roboflow.com/roboflow-100/cotton-20xz5/1 +https://app.roboflow.com/roboflow-100/uno-deck/1 +https://app.roboflow.com/roboflow-100/grass-weeds/1 +https://app.roboflow.com/roboflow-100/circuit-voltages/1 +https://app.roboflow.com/roboflow-100/people-in-paintings/1 +https://app.roboflow.com/roboflow-100/apples-fvpl5/1 +https://app.roboflow.com/roboflow-100/number-ops/1 +https://app.roboflow.com/roboflow-100/cable-damage/1 +https://app.roboflow.com/roboflow-100/furniture-ngpea/1 +https://app.roboflow.com/roboflow-100/poker-cards-cxcvz/1 +https://app.roboflow.com/roboflow-100/pills-sxdht/1 +https://app.roboflow.com/roboflow-100/bone-fracture-7fylg/1 +https://app.roboflow.com/roboflow-100/marbles/1 +https://app.roboflow.com/roboflow-100/cavity-rs0uf/1 +https://app.roboflow.com/roboflow-100/pests-2xlvx/1 +https://app.roboflow.com/roboflow-100/printed-circuit-board/3 +https://app.roboflow.com/roboflow-100/peanuts-sd4kf/1 +https://app.roboflow.com/roboflow-100/vehicles-q0x2v/1 +https://app.roboflow.com/roboflow-100/digits-t2eg6/1 +https://app.roboflow.com/roboflow-100/wine-labels/1 +https://app.roboflow.com/roboflow-100/truck-movement/3 +https://app.roboflow.com/roboflow-100/coral-lwptl/1 +https://app.roboflow.com/roboflow-100/brain-tumor-m2pbp/1 +https://app.roboflow.com/roboflow-100/cotton-plant-disease/1 +https://app.roboflow.com/roboflow-100/bacteria-ptywi/1 +https://app.roboflow.com/roboflow-100/4-fold-defect/1 +https://app.roboflow.com/roboflow-100/cells-uyemf/1 +https://app.roboflow.com/roboflow-100/gynecology-mri/1 +https://app.roboflow.com/roboflow-100/axial-mri/1 +https://app.roboflow.com/roboflow-100/abdomen-mri/1 +https://app.roboflow.com/roboflow-100/acl-x-ray/1 +https://app.roboflow.com/roboflow-100/radio-signal/1 +https://app.roboflow.com/roboflow-100/x-ray-rheumatology/1 +https://app.roboflow.com/roboflow-100/parasites-1s07h/1 +https://app.roboflow.com/roboflow-100/aerial-cows/1 +https://app.roboflow.com/roboflow-100/aerial-spheres/1 +https://app.roboflow.com/roboflow-100/secondary-chains/1 +https://app.roboflow.com/roboflow-100/aerial-pool/3 +https://app.roboflow.com/roboflow-100/underwater-objects-5v7p8/1 +https://app.roboflow.com/roboflow-100/peixos-fish/3 +https://app.roboflow.com/roboflow-100/underwater-pipes-4ng4t/1 +https://app.roboflow.com/roboflow-100/signatures-xc8up/1 +https://app.roboflow.com/roboflow-100/activity-diagrams-qdobr/1 +https://app.roboflow.com/roboflow-100/document-parts/1 +https://app.roboflow.com/roboflow-100/tweeter-posts/1 +https://app.roboflow.com/roboflow-100/avatar-recognition-nuexe/1 +https://app.roboflow.com/roboflow-100/csgo-videogame/1 +https://app.roboflow.com/roboflow-100/farcry6-videogame/1 +https://app.roboflow.com/roboflow-100/apex-videogame/1 +https://app.roboflow.com/roboflow-100/cables-nl42k/1 +https://app.roboflow.com/roboflow-100/circuit-elements/3 +https://app.roboflow.com/roboflow-100/washroom-rf1fa/1 +https://app.roboflow.com/roboflow-100/construction-safety-gsnvb/1 +https://app.roboflow.com/roboflow-100/street-work/3 +https://app.roboflow.com/roboflow-100/excavators-czvg9/1 +https://app.roboflow.com/roboflow-100/corrosion-bi3q3/1 +https://app.roboflow.com/roboflow-100/solar-panels-taxvb/1 +https://app.roboflow.com/roboflow-100/animals-ij5d2/1 +https://app.roboflow.com/roboflow-100/valentines-chocolate/3 +https://app.roboflow.com/roboflow-100/sign-language-sokdr/1 +https://app.roboflow.com/roboflow-100/halo-infinite-angel-videogame/1 +https://app.roboflow.com/roboflow-100/aquarium-qlnqy/1 +https://app.roboflow.com/roboflow-100/thermal-cheetah-my4dp/1 +https://app.roboflow.com/roboflow-100/chess-pieces-mjzgj/1 +https://app.roboflow.com/roboflow-100/bccd-ouzjz/1 +https://app.roboflow.com/roboflow-100/mask-wearing-608pr/1 +https://app.roboflow.com/roboflow-100/thermal-dogs-and-people-x6ejw/1 +https://app.roboflow.com/roboflow-100/weed-crop-aerial/1 +https://app.roboflow.com/roboflow-100/mitosis-gjs3g/1 +https://app.roboflow.com/roboflow-100/smoke-uvylj/1 +https://app.roboflow.com/roboflow-100/road-signs-6ih4y/1 +https://app.roboflow.com/roboflow-100/soccer-players-5fuqs/1 +https://app.roboflow.com/roboflow-100/hand-gestures-jps7z/1 +https://app.roboflow.com/roboflow-100/paper-parts/3 +https://app.roboflow.com/roboflow-100/cloud-types/1 +https://app.roboflow.com/roboflow-100/tabular-data-wf9uh/1 +https://app.roboflow.com/roboflow-100/paragraphs-co84b/1 +https://app.roboflow.com/roboflow-100/coins-1apki/1 diff --git a/projects/RF100-Benchmark/scripts/dist_train.sh b/projects/RF100-Benchmark/scripts/dist_train.sh new file mode 100644 index 00000000000..dc057383efc --- /dev/null +++ b/projects/RF100-Benchmark/scripts/dist_train.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash + +CONFIG=$1 +GPUS=$2 +WORK_DIRS=${3:-'work_dirs'} +RETRY_PATH=${RETRY_PATH:-''} +NNODES=${NNODES:-1} +NODE_RANK=${NODE_RANK:-0} +PORT=${PORT:-29500} +MASTER_ADDR=${MASTER_ADDR:-"127.0.0.1"} + +datasets=$(pwd)/rf100 +export PYTHONPATH="../..":$PYTHONPATH + +DEBUG=0 +# example +datasets_list=("acl-x-ray", "tweeter-profile") + +if [ -n "$RETRY_PATH" ]; then + DEBUG=1 + datasets_list=() + while IFS= read -r line; do + if [ -n "$line" ]; then + datasets_list+=("$line") + fi + done < "$RETRY_PATH" +fi + +if [ "$DEBUG" == 1 ]; then + echo "current training dataset list is: ${datasets_list[@]}" +else + echo "Currently training with the full dataset." +fi +echo "==============================================" + +for dataset in $(ls $datasets) + do + # You can customize string_list to train only specific datasets. + if [ "$DEBUG" == 1 ]; then + if [[ ! " ${datasets_list[@]} " =~ "$dataset" ]]; then + continue + fi + fi + + echo "Training on $dataset" + python $(pwd)/scripts/create_new_config.py $CONFIG $dataset + if [ "$GPUS" == 1 ]; then + python ../../tools/train.py "temp_configs/$dataset.py" --work-dir "$WORK_DIRS/$dataset" ${@:4} + else + python -m torch.distributed.launch \ + --nnodes=$NNODES \ + --node_rank=$NODE_RANK \ + --master_addr=$MASTER_ADDR \ + --nproc_per_node=$GPUS \ + --master_port=$PORT \ + ../../tools/train.py \ + "temp_configs/$dataset.py" \ + --launcher pytorch --work-dir "$WORK_DIRS/$dataset" ${@:4} + fi + echo "==============================================" + done + +#rm -rf temp_configs +echo "Done training all the datasets" diff --git a/projects/RF100-Benchmark/scripts/download_dataset.py b/projects/RF100-Benchmark/scripts/download_dataset.py new file mode 100644 index 00000000000..ef81229dafd --- /dev/null +++ b/projects/RF100-Benchmark/scripts/download_dataset.py @@ -0,0 +1,65 @@ +from argparse import ArgumentParser +from os import environ +from pathlib import Path + +from roboflow import Roboflow + + +def main(): + # construct the argument parser and parse the arguments + parser = ArgumentParser() + + parser.add_argument( + '-p', + '--project', + required=True, + type=str, + help='The project ID of the dataset found in the dataset URL.', + ) + parser.add_argument( + '-v', + '--version', + required=True, + type=int, + help='The version the dataset you want to use', + ) + parser.add_argument( + '-f', + '--model_format', + required=False, + type=str, + default='coco', + help='The format of the export you want to use (i.e. coco or yolov5)', + ) + + parser.add_argument( + '-l', + '--location', + required=False, + type=str, + default='./rf100', + help='Where to store the dataset', + ) + # parses command line arguments + args = vars(parser.parse_args()) + + try: + api_key = environ['ROBOFLOW_API_KEY'] + except KeyError: + raise KeyError('You must export your Roboflow api key, ' + 'to obtain one see https://docs.roboflow.com/rest-api.') + # create location if it doesn't exist + out_dir = Path(args['location']) / args['project'] + out_dir.mkdir(parents=True, exist_ok=True) + print( + f'Storing {args["project"] } in {out_dir} for {args["model_format"]}') + # get and download the dataset + rf = Roboflow(api_key=api_key) + project = rf.workspace('roboflow-100').project(args['project']) + project.version(args['version']).download( + args['model_format'], location=str(out_dir)) + print('Done!') + + +if __name__ == '__main__': + main() diff --git a/projects/RF100-Benchmark/scripts/download_datasets.sh b/projects/RF100-Benchmark/scripts/download_datasets.sh new file mode 100644 index 00000000000..7ff4ff74b4f --- /dev/null +++ b/projects/RF100-Benchmark/scripts/download_datasets.sh @@ -0,0 +1,30 @@ +#!/bin/bash +#set -euo pipefail +input="$(pwd)/scripts/datasets_links_640.txt" + +while getopts f:l: flag +do + case "${flag}" in + f) format=${OPTARG};; + l) location=${OPTARG};; + esac +done +# default values +format=${format:-coco} +location=${location:-$(pwd)/rf100} + +echo "Starting downloading RF100..." + +for link in $(cat $input) +do + attributes=$(python3 $(pwd)/scripts/parse_dataset_link.py -l $link) + + project=$(echo $attributes | cut -d' ' -f 3) + version=$(echo $attributes | cut -d' ' -f 4) + if [ ! -d "$location/$project" ] ; + then + python3 $(pwd)/scripts/download_dataset.py -p $project -v $version -l $location -f $format + fi +done + +echo "Done!" diff --git a/projects/RF100-Benchmark/scripts/labels_names.json b/projects/RF100-Benchmark/scripts/labels_names.json new file mode 100644 index 00000000000..c1239140568 --- /dev/null +++ b/projects/RF100-Benchmark/scripts/labels_names.json @@ -0,0 +1,882 @@ +[{"category": "real world", + "classes": {"0": 34, + "1": 70, + "10": 43, + "11": 55, + "12": 45, + "13": 143, + "2": 47, + "3": 64, + "4": 47, + "5": 66, + "6": 118, + "7": 35, + "8": 54, + "9": 92}, + "name": "hand-gestures-jps7z"}, + {"category": "real world", "classes": {"smoke": 821}, "name": "smoke-uvylj"}, + {"category": "real world", + "classes": {"Minorrotation": 85, + "Moderaterotation": 273, + "Severerotation": 103}, + "name": "wall-damage"}, + {"category": "real world", + "classes": {"Slippage": 646, "corrosion": 1657, "crack": 2513}, + "name": "corrosion-bi3q3"}, + {"category": "real world", + "classes": {"EXCAVATORS": 1530, "dump truck": 1274, "wheel loader": 1080}, + "name": "excavators-czvg9"}, + {"category": "real world", + "classes": {"bishop": 1, + "black-bishop": 140, + "black-king": 147, + "black-knight": 196, + "black-pawn": 659, + "black-queen": 87, + "black-rook": 201, + "white-bishop": 172, + "white-king": 149, + "white-knight": 184, + "white-pawn": 639, + "white-queen": 111, + "white-rook": 184}, + "name": "chess-pieces-mjzgj"}, + {"category": "real world", + "classes": {"bus_stop": 105, + "do_not_enter": 100, + "do_not_stop": 100, + "do_not_turn_l": 113, + "do_not_turn_r": 101, + "do_not_u_turn": 100, + "enter_left_lane": 102, + "green_light": 167, + "left_right_lane": 101, + "no_parking": 104, + "parking": 101, + "ped_crossing": 100, + "ped_zebra_cross": 117, + "railway_crossing": 102, + "red_light": 149, + "stop": 108, + "t_intersection_l": 102, + "traffic_light": 100, + "u_turn": 100, + "warning": 100, + "yellow_light": 94}, + "name": "road-signs-6ih4y"}, + {"category": "real world", + "classes": {"Cone": 945, + "Face_Shield": 177, + "Gloves": 579, + "Goggles": 242, + "Head": 432, + "Helmet": 1018, + "No glasses": 218, + "No gloves": 382}, + "name": "street-work"}, + {"category": "real world", + "classes": {"helmet": 2543, + "no-helmet": 129, + "no-vest": 892, + "person": 2817, + "vest": 1343}, + "name": "construction-safety-gsnvb"}, + {"category": "real world", + "classes": {"bicycles": 82, + "buses": 111, + "crosswalks": 284, + "fire hydrants": 94, + "motorcycles": 240, + "traffic lights": 952, + "vehicles": 1272}, + "name": "road-traffic"}, + {"category": "real world", + "classes": {"bathtub": 723, + "c": 1, + "geyser": 351, + "mirror": 1566, + "showerhead": 937, + "sink": 16, + "toilet": 18, + "towel": 1742, + "washbasin": 1977, + "wc": 2126}, + "name": "washroom-rf1fa"}, + {"category": "real world", + "classes": {"Button": 364, + "Buzzer": 68, + "Capacitor": 20800, + "Capacitor Jumper": 51117, + "Capacitor Network": 8048, + "Clock": 188, + "Connector": 8683, + "Diode": 8025, + "EM": 204, + "Electrolytic Capacitor": 2565, + "Electrolytic capacitor": 34, + "Ferrite Bead": 124, + "Flex Cable": 92, + "Fuse": 1508, + "IC": 9976, + "Inductor": 6450, + "Jumper": 709, + "Led": 974, + "Pads": 1495, + "Pins": 1527, + "Potentiometer": 28, + "RP": 62, + "Resistor": 27388, + "Resistor Jumper": 54428, + "Resistor Network": 8805, + "Switch": 341, + "Test Point": 2222, + "Transducer": 70, + "Transformer": 440, + "Transistor": 6862, + "Unknown Unlabeled": 1080}, + "name": "circuit-elements"}, + {"category": "real world", + "classes": {"mask": 806, "no-mask": 148}, + "name": "mask-wearing-608pr"}, + {"category": "real world", + "classes": {"Antenne": 2550, + "BBS": 649, + "BFU": 338, + "Batterie": 4694, + "DDF": 353, + "PCF": 348, + "PCU AC": 383, + "PCU DC": 263, + "PDU": 356, + "PSU": 915, + "RBS": 1382}, + "name": "cables-nl42k"}, + {"category": "real world", + "classes": {"coca-cola": 18514, + "fanta": 17426, + "sprite": 18747}, + "name": "soda-bottles"}, + {"category": "real world", + "classes": {"otr_chassis_loaded": 492, + "otr_chassis_unloaded": 1844, + "otr_chassis_working": 994, + "person": 1164, + "stacker": 81}, + "name": "truck-movement"}, + {"category": "real world", + "classes": {"AlcoholPercentage": 1464, + "Appellation AOC DOC AVARegion": 3458, + "Appellation QualityLevel": 960, + "CountryCountry": 2082, + "Distinct Logo": 4698, + "Established YearYear": 746, + "Maker-Name": 5897, + "Organic": 49, + "Sustainable": 78, + "Sweetness-Brut-SecSweetness-Brut-Sec": 244, + "TypeWine Type": 3595, + "VintageYear": 1763}, + "name": "wine-labels"}, + {"category": "real world", + "classes": {"0": 1540, + "1": 2310, + "2": 1730, + "3": 1509, + "4": 1402, + "5": 1465, + "6": 1529, + "7": 1554, + "8": 1287, + "9": 1240}, + "name": "digits-t2eg6"}, + {"category": "real world", + "classes": {"big bus": 816, + "big truck": 3632, + "bus-l-": 398, + "bus-s-": 148, + "car": 31641, + "mid truck": 703, + "small bus": 263, + "small truck": 5842, + "truck-l-": 2278, + "truck-m-": 3672, + "truck-s-": 1363, + "truck-xl-": 821}, + "name": "vehicles-q0x2v"}, + {"category": "real world", + "classes": {"with mold": 14000, "without mold": 5350}, + "name": "peanuts-sd4kf"}, + {"category": "real world", + "classes": {"-": 8, + "Battery": 4, + "Button": 277, + "Buzzer": 4, + "Capacitor": 19034, + "Capacitor Jumper": 32564, + "Clock": 146, + "Connector": 4558, + "Diode": 284, + "Display": 18, + "EM": 162, + "Electrolytic Capacitor": 856, + "Ferrite Bead": 108, + "Fuse": 28, + "Heatsink": 14, + "IC": 7481, + "Inductor": 235, + "Jumper": 324, + "Led": 784, + "PS": 4, + "Pads": 1176, + "Pins": 1212, + "Potentiometer": 26, + "Resistor": 16034, + "Resistor Jumper": 37329, + "Resistor Network": 4627, + "SK": 8, + "Switch": 189, + "Test Point": 1289, + "Transformer": 2, + "Transistor": 4273, + "Unknown Unlabeled": 982, + "Zener Diode": 15, + "iC": 123}, + "name": "printed-circuit-board"}, + {"category": "real world", + "classes": {"Agrotis": 44, + "Athetis lepigone": 66, + "Athetis lineosa": 43, + "Chilo suppressalis": 110, + "Cnaphalocrocis medinalis Guenee": 74, + "Creatonotus transiens": 181, + "Diaphania indica": 71, + "Endotricha consocia": 36, + "Euproctis sparsa": 72, + "Gryllidae": 138, + "Gryllotalpidae": 51, + "Helicoverpa armigera": 65, + "Holotrichia oblita Faldermann": 92, + "Loxostege sticticalis": 77, + "Mamestra brassicae": 111, + "Maruca testulalis Geyer": 42, + "Mythimna separata": 11, + "Naranga aenescens Moore": 39, + "Nilaparvata": 74, + "Paracymoriza taiwanalis": 42, + "Sesamia inferens": 52, + "Sirthenea flavipes": 87, + "Sogatella furcifera": 41, + "Spodoptera exigua": 59, + "Spoladea recurvalis": 103, + "Staurophora celsia": 95, + "Timandra Recompta": 67, + "Trichoptera": 35}, + "name": "pests-2xlvx"}, + {"category": "real world", + "classes": {"cavity": 2039, "normal": 2982}, + "name": "cavity-rs0uf"}, + {"category": "real world", + "classes": {"mildew": 5347, "rose_P01": 2054, "rose_R02": 3366}, + "name": "leaf-disease-nsdsr"}, + {"category": "real world", + "classes": {"red": 3092, "white": 3127}, + "name": "marbles"}, + {"category": "real world", + "classes": {"Cipro 500": 113, + "Ibuphil 600 mg": 2, + "Ibuphil Cold 400-60": 72, + "Xyzall 5mg": 72, + "blue": 59, + "pink": 58, + "red": 60, + "white": 60}, + "name": "pills-sxdht"}, + {"category": "real world", + "classes": {"10 Diamonds": 111, + "10 Hearts": 100, + "10 Spades": 120, + "10 Trefoils": 104, + "2 Diamonds": 113, + "2 Hearts": 100, + "2 Spades": 120, + "2 Trefoils": 104, + "3 Diamonds": 113, + "3 Hearts": 100, + "3 Spades": 120, + "3 Trefoils": 104, + "4 Diamonds": 113, + "4 Hearts": 100, + "4 Spades": 120, + "4 Trefoils": 100, + "5 Diamonds": 105, + "5 Hearts": 100, + "5 Spades": 108, + "5 Trefoils": 1, + "59": 104, + "6 Diamonds": 100, + "6 Hearts": 105, + "6 Spades": 100, + "6 Trefoils": 108, + "7 Diamonds": 100, + "7 Hearts": 105, + "7 Spades": 100, + "7 Trefoils": 108, + "8 Diamonds": 100, + "8 Hearts": 105, + "8 Spades": 100, + "8 Trefoils": 108, + "9 Diamonds": 104, + "9 Hearts": 111, + "9 Spades": 100, + "9 Trefoils": 120, + "A Diamonds": 104, + "A Hearts": 113, + "A Spades": 100, + "A Trefoils": 120, + "J Diamonds": 104, + "J Hearts": 110, + "J Spades": 100, + "J Trefoils": 120, + "K Diamonds": 104, + "K Hearts": 111, + "K Spades": 100, + "K Trefoils": 120, + "Q Diamonds": 104, + "Q Hearts": 111, + "Q Spades": 100, + "Q Trefoils": 119}, + "name": "poker-cards-cxcvz"}, + {"category": "real world", + "classes": {"0": 560, + "1": 525, + "2": 409, + "3": 477, + "4": 485, + "5": 398, + "6": 551, + "7": 502, + "8": 519, + "9": 506, + "div": 398, + "eqv": 608, + "minus": 400, + "mult": 393, + "plus": 397}, + "name": "number-ops"}, + {"category": "real world", + "classes": {"army worm": 100, + "legume blister beetle": 100, + "red spider": 100, + "rice gall midge": 101, + "rice leaf roller": 96, + "rice leafhopper": 109, + "rice water weevil": 104, + "wheat phloeothrips": 100, + "white backed plant hopper": 105, + "yellow rice borer": 96}, + "name": "insects-mytwu"}, + {"category": "real world", + "classes": {"G-arboreum": 294, + "G-barbadense": 212, + "G-herbaceum": 239, + "G-hirsitum": 189}, + "name": "cotton-20xz5"}, + {"category": "real world", + "classes": {"Chair": 249, "Sofa": 240, "Table": 200}, + "name": "furniture-ngpea"}, + {"category": "real world", + "classes": {"break": 822, "thunderbolt": 690}, + "name": "cable-damage"}, + {"category": "real world", + "classes": {"cat": 110, + "chicken": 214, + "cow": 207, + "dog": 144, + "fox": 109, + "goat": 175, + "horse": 170, + "person": 232, + "racoon": 126, + "skunk": 102}, + "name": "animals-ij5d2"}, + {"category": "real world", + "classes": {"coin": 13720, "nail": 2191, "nut": 1364, "screw": 995}, + "name": "coins-1apki"}, + {"category": "real world", + "classes": {"apple": 2183, "damaged_apple": 710}, + "name": "apples-fvpl5"}, + {"category": "real world", + "classes": {"Human": 5151}, + "name": "people-in-paintings"}, + {"category": "real world", + "classes": {"GND": 40, + "IDC": 76, + "IDC_I": 12, + "R": 418, + "VDC": 137, + "VDC_I": 15}, + "name": "circuit-voltages"}, + {"category": "real world", + "classes": {"0": 1800, + "1": 1754, + "10": 1788, + "11": 1824, + "12": 1815, + "13": 1763, + "14": 1855, + "2": 1824, + "3": 1872, + "4": 1760, + "5": 1835, + "6": 1768, + "7": 1782, + "8": 1753, + "9": 1783}, + "name": "uno-deck"}, + {"category": "real world", + "classes": {"0 ridderzuring": 6814}, + "name": "grass-weeds"}, + {"category": "real world", + "classes": {"gauges": 499, "numbers": 1296}, + "name": "gauge-u2lwv"}, + {"category": "real world", + "classes": {"A": 29, + "B": 25, + "C": 25, + "D": 28, + "E": 25, + "F": 30, + "G": 30, + "H": 29, + "I": 30, + "J": 38, + "K": 27, + "L": 28, + "M": 28, + "N": 27, + "O": 28, + "P": 25, + "Q": 26, + "R": 25, + "S": 30, + "T": 25, + "U": 25, + "V": 28, + "W": 27, + "X": 26, + "Y": 26, + "Z": 30}, + "name": "sign-language-sokdr"}, + {"category": "real world", + "classes": {"sees-dark-almond-nougat": 71, + "sees-dark-almonds": 73, + "sees-dark-bordeaux": 75, + "sees-dark-caramel-patties": 73, + "sees-dark-chocolate-buttercream": 80, + "sees-dark-marzipan": 77, + "sees-dark-normandie": 77, + "sees-dark-scotchmallow": 72, + "sees-dark-walnut-square": 69, + "sees-milk-almond-caramel": 73, + "sees-milk-almonds": 99, + "sees-milk-beverly": 73, + "sees-milk-bordeaux": 100, + "sees-milk-butterscotch-square": 74, + "sees-milk-california-brittle": 77, + "sees-milk-chelsea": 76, + "sees-milk-chocolate-buttercream": 75, + "sees-milk-coconut-cream": 72, + "sees-milk-mayfair": 73, + "sees-milk-mocha": 83, + "sees-milk-molasses-chips": 75, + "sees-milk-rum-nougat": 80}, + "name": "valentines-chocolate"}, + {"category": "real world", + "classes": {"aair": 1443, + "boal": 1283, + "chapila": 342, + "deshi puti": 346, + "foli": 505, + "ilish": 806, + "kal baush": 772, + "katla": 1355, + "koi": 651, + "magur": 462, + "mrigel": 1429, + "pabda": 1379, + "pangas": 749, + "puti": 1257, + "rui": 2102, + "shol": 1113, + "taki": 1755, + "tara baim": 860, + "telapiya": 209}, + "name": "fish-market-ggjso"}, + {"category": "real world", + "classes": {"Ready": 2009, + "empty_pod": 1593, + "germination": 6604, + "pod": 3594, + "young": 5922}, + "name": "lettuce-pallets"}, + {"category": "real world", + "classes": {"Lower": 18, + "Sand Tiger Shark": 194, + "Snaggletooth Shark": 22, + "Upper": 46}, + "name": "shark-teeth-5atku"}, + {"category": "real world", "classes": {"bees": 9756}, "name": "bees-jt5in"}, + {"category": "real world", + "classes": {"Cross bedding": 332, + "Low angle": 583, + "Massive": 2011, + "Parallel lamination": 671, + "mud drape": 885}, + "name": "sedimentary-features-9eosf"}, + {"category": "real world", + "classes": {"Dime": 1201, + "Nickel": 1478, + "Penny": 2249, + "Quarter": 870, + "fifty": 83, + "five": 92, + "hundred": 46, + "one": 80, + "ten": 88, + "twenty": 94}, + "name": "currency-v4f8j"}, + {"category": "real world", + "classes": {"Deer": 888, "Hog": 1398}, + "name": "trail-camera"}, + {"category": "real world", + "classes": {"joint": 4147, "side": 417}, + "name": "cell-towers"}, + {"category": "videogames", + "classes": {"avatar": 3782, "object": 602}, + "name": "apex-videogame"}, + {"category": "videogames", + "classes": {"assassin": 100, + "atv": 1, + "car": 2, + "gun": 30, + "gun menu": 1, + "healthbar": 6, + "horse": 6, + "hud": 9, + "map": 29, + "person": 44, + "surroundings": 13}, + "name": "farcry6-videogame"}, + {"category": "videogames", + "classes": {"CT": 1351, "T": 1663}, + "name": "csgo-videogame"}, + {"category": "videogames", + "classes": {"Character": 903}, + "name": "avatar-recognition-nuexe"}, + {"category": "videogames", + "classes": {"enemy": 556, + "enemy-head": 484, + "friendly": 135, + "friendly-head": 57}, + "name": "halo-infinite-angel-videogame"}, + {"category": "videogames", + "classes": {"Akali": 35, + "Blitzcrank": 64, + "Braum": 53, + "Caitlyn": 50, + "Camille": 50, + "Cho-Gath": 55, + "Darius": 56, + "Dr- Mundo": 47, + "Ekko": 40, + "Ezreal": 76, + "Fiora": 38, + "Galio": 43, + "Gankplank": 67, + "Garen": 44, + "Graves": 41, + "Heimerdinger": 62, + "Illaoi": 50, + "Janna": 76, + "Jayce": 58, + "Jhin": 38, + "Jinx": 37, + "Kai-Sa": 49, + "Kassadin": 52, + "Katarina": 54, + "Kog-Maw": 49, + "Leona": 48, + "Lissandra": 46, + "Lulu": 52, + "Lux": 45, + "Malzahar": 51, + "Miss Fortune": 49, + "Orianna": 44, + "Poppy": 57, + "Quinn": 46, + "Samira": 45, + "Seraphine": 39, + "Shaco": 48, + "Singed": 82, + "Sion": 39, + "Swain": 62, + "Tahm Kench": 43, + "Talon": 41, + "Taric": 38, + "Tristana": 68, + "Trundle": 67, + "Twisted Fate": 53, + "Twitch": 56, + "Urgot": 48, + "Veigar": 50, + "Vex": 60, + "Vi": 75, + "Viktor": 37, + "Warwick": 61, + "Yone": 40, + "Yuumi": 48, + "Zac": 57, + "Ziggs": 59, + "Zilean": 59, + "Zyra": 41}, + "name": "team-fight-tactics"}, + {"category": "videogames", + "classes": {"armor": 4598, + "base": 1622, + "car": 2538, + "rune": 3, + "rune-blue": 263, + "rune-gray": 19, + "rune-grey": 16, + "rune-red": 449, + "watcher": 1300}, + "name": "robomasters-285km"}, + {"category": "documents", + "classes": {"caption": 136, "tweet": 139}, + "name": "tweeter-posts"}, + {"category": "documents", + "classes": {"profile_info": 738}, + "name": "tweeter-profile"}, + {"category": "documents", + "classes": {"table": 1152, "title": 564}, + "name": "document-parts"}, + {"category": "documents", + "classes": {"action": 903, + "activity": 1286, + "commeent": 67, + "control_flow": 4177, + "control_flowcontrol_flow": 12, + "decision_node": 449, + "exit_node": 7, + "final_flow_node": 16, + "final_node": 364, + "fork": 160, + "merge": 157, + "merge_noode": 124, + "null": 3, + "object": 39, + "object_flow": 14, + "signal_recept": 26, + "signal_send": 17, + "start_node": 360, + "text": 462}, + "name": "activity-diagrams-qdobr"}, + {"category": "documents", + "classes": {"signature": 443}, + "name": "signatures-xc8up"}, + {"category": "documents", + "classes": {"author": 162, + "chapter": 642, + "equation": 3136, + "equation number": 1696, + "figure": 3106, + "figure caption": 2820, + "footnote": 781, + "list of content heading": 165, + "list of content text": 325, + "page number": 11833, + "paragraph": 15070, + "reference text": 994, + "section": 1716, + "subsection": 1977, + "subsubsection": 1013, + "table": 1185, + "table caption": 953, + "table of contents text": 227, + "title": 175}, + "name": "paper-parts"}, + {"category": "documents", + "classes": {"-": 2, + "bold_parent_row": 2707, + "bold_row": 1011, + "closure_row": 6964, + "column": 15757, + "direct_children": 6632, + "non_bold_parent_row": 2834, + "non_bold_row": 15099, + "parent_column": 999, + "prime_parent": 972, + "sub_row": 1581, + "table": 4076}, + "name": "tabular-data-wf9uh"}, + {"category": "documents", + "classes": {"-": 2, "g": 2091, "g1": 1, "g3": 3, "h": 1, "m": 45252, "n": 50}, + "name": "paragraphs-co84b"}, + {"category": "underwater", + "classes": {"pipe": 12238}, + "name": "underwater-pipes-4ng4t"}, + {"category": "underwater", + "classes": {"fish": 2673, + "jellyfish": 694, + "penguin": 516, + "puffin": 284, + "shark": 354, + "starfish": 116, + "stingray": 184}, + "name": "aquarium-qlnqy"}, + {"category": "underwater", + "classes": {"peix": 12376, + "taca": 728}, + "name": "peixos-fish"}, + {"category": "underwater", + "classes": {"echinus": 25299, + "holothurian": 6584, + "scallop": 10485, + "starfish": 10270, + "waterweeds": 46}, + "name": "underwater-objects-5v7p8"}, + {"category": "underwater", + "classes": {"Arborescent": 687, + "Caespitose-a": 367, + "Caespitose-b": 305, + "Columnar": 1, + "Corymbose": 381, + "Digitate": 392, + "Encrusting": 379, + "Foliose": 562, + "Massive-Faviidae": 702, + "Massive-Merulinidae": 192, + "Massive-Mussidae": 319, + "Massive-Poritidae": 1016, + "Solitary": 462, + "Tabular": 718}, + "name": "coral-lwptl"}, + {"category": "aerial", + "classes": {"black-hat": 2538, + "bodysurface": 6599, + "bodyunder": 1333, + "umpire": 548, + "white-hat": 2202}, + "name": "aerial-pool"}, + {"category": "aerial", "classes": {"chain": 1427}, "name": "secondary-chains"}, + {"category": "aerial", + "classes": {"green_sphero": 262, + "orange-sphero": 1, + "orange_sphero": 458, + "purple_sphero": 263, + "red_sphero": 416, + "yellow_sphero": 463}, + "name": "aerial-spheres"}, + {"category": "aerial", + "classes": {"football": 1766, "player": 96, "referee": 141}, + "name": "soccer-players-5fuqs"}, + {"category": "aerial", + "classes": {"crop": 411, "weed": 7442}, + "name": "weed-crop-aerial"}, + {"category": "aerial", "classes": {"cow": 15860}, "name": "aerial-cows"}, + {"category": "aerial", + "classes": {"Fish": 2528, "Flower": 2141, "Gravel": 2674, "Sugar": 3408}, + "name": "cloud-types"}, + {"category": "microscopic", + "classes": {"close": 3629, "open": 9883}, + "name": "stomata-cells"}, + {"category": "microscopic", + "classes": {"Platelets": 361, "RBC": 4155, "WBC": 372}, + "name": "bccd-ouzjz"}, + {"category": "microscopic", + "classes": {"Ancylostoma Spp": 680, + "Ascaris Lumbricoides": 676, + "Enterobius Vermicularis": 912, + "Fasciola Hepatica": 492, + "Hymenolepis": 472, + "Schistosoma": 569, + "Taenia Sp": 654, + "Trichuris Trichiura": 636}, + "name": "parasites-1s07h"}, + {"category": "microscopic", + "classes": {"celula": 2258}, + "name": "cells-uyemf"}, + {"category": "microscopic", + "classes": {"4-fold defect": 12025}, + "name": "4-fold-defect"}, + {"category": "microscopic", + "classes": {"Str_pne": 2943}, + "name": "bacteria-ptywi"}, + {"category": "microscopic", + "classes": {"dc": 6312}, + "name": "cotton-plant-disease"}, + {"category": "microscopic", + "classes": {"Mitosis": 436}, + "name": "mitosis-gjs3g"}, + {"category": "microscopic", + "classes": {"activated": 906, "non-activated": 31359}, + "name": "phages"}, + {"category": "microscopic", + "classes": {"ballooning": 2187, + "fibrosis": 1804, + "inflammation": 2734, + "steatosis": 3052}, + "name": "liver-disease"}, + {"category": "microscopic", + "classes": {"thick-dark-mark": 1752, + "thick-light-mark": 5911, + "thin-dark-mark": 971, + "thin-light-mark": 817}, + "name": "asbestos"}, + {"category": "electromagnetic", + "classes": {"dog": 117, "person": 140}, + "name": "thermal-dogs-and-people-x6ejw"}, + {"category": "electromagnetic", + "classes": {"Cell": 513, + "Cell-Multi": 282, + "No-Anomaly": 6865, + "Shadowing": 1054, + "Unclassified": 333}, + "name": "solar-panels-taxvb"}, + {"category": "electromagnetic", + "classes": {"stray": 1775, "target": 1348}, + "name": "radio-signal"}, + {"category": "electromagnetic", + "classes": {"cheetah": 186, "human": 45}, + "name": "thermal-cheetah-my4dp"}, + {"category": "electromagnetic", + "classes": {"artefact": 6, + "distal phalanges": 974, + "fifth metacarpal bone": 193, + "first metacarpal bone": 189, + "fourth metacarpal bone": 192, + "intermediate phalanges": 773, + "proximal phalanges": 968, + "radius": 185, + "second metacarpal bone": 199, + "soft tissue calcination": 98, + "third metacarpal bone": 194, + "ulna": 184}, + "name": "x-ray-rheumatology"}, + {"category": "electromagnetic", "classes": {"acl": 3059}, "name": "acl-x-ray"}, + {"category": "electromagnetic", "classes": {"0": 2645}, "name": "abdomen-mri"}, + {"category": "electromagnetic", + "classes": {"negative": 204, "positive": 186}, + "name": "axial-mri"}, + {"category": "electromagnetic", + "classes": {"6W": 6, "7W": 1, "EH": 2895}, + "name": "gynecology-mri"}, + {"category": "electromagnetic", + "classes": {"label0": 6214, "label1": 9778, "label2": 5896}, + "name": "brain-tumor-m2pbp"}, + {"category": "electromagnetic", + "classes": {"angle": 41, "fracture": 326, "line": 164, "messed_up_angle": 70}, + "name": "bone-fracture-7fylg"}, + {"category": "electromagnetic", + "classes": {"bicycle": 4458, "car": 47501, "dog": 240, "person": 31872}, + "name": "flir-camera-objects"}] diff --git a/projects/RF100-Benchmark/scripts/log_extract.py b/projects/RF100-Benchmark/scripts/log_extract.py new file mode 100644 index 00000000000..f6482a3db0e --- /dev/null +++ b/projects/RF100-Benchmark/scripts/log_extract.py @@ -0,0 +1,286 @@ +import argparse +import csv +import json +import os +import re + +import numpy as np +import pandas as pd +from openpyxl import load_workbook +from openpyxl.styles import Alignment + + +def parse_args(): + parser = argparse.ArgumentParser(description='log_name') + parser.add_argument( + 'method', type=str, help='method name, used in csv/xlsx header') + parser.add_argument( + '--epoch', + type=int, + default=25, + required=False, + help='train_epoch, used for checking whether training completed') + parser.add_argument( + '--work-dirs', + type=str, + default='work_dirs/', + required=False, + help='directory for saving results') + parser.add_argument( + '--origin', + type=str, + default=False, + required=False, + help='excel with datasets in the order of execution ') + args = parser.parse_args() + + return args + + +def write_csv(datas, args): + num = 0 + fail_num = 0 + none_exist_num = 0 + fail = [] + none_exist = [] + latest_time = 0 + with open('scripts/labels_names.json') as f: + label = json.load(f) + for dataset in sorted(os.listdir(datas)): + print(f'\ndataset={dataset}, index={num}') + num += 1 + with open( + os.path.join(datas, dataset, 'train/_annotations.coco.json'), + 'r') as f: + image = json.load(f) + num_train = len(image['images']) # get number of train images + with open( + os.path.join(datas, dataset, 'valid/_annotations.coco.json'), + 'r') as f: + image = json.load(f) + num_valid = len(image['images']) # get number of valid images + for index in label: + if index['name'] == dataset: + category = index['category'] # get category of dataset + class_num = len(index['classes'].keys()) + + # determine whether the dataset directory exists + try: + dirs = [ + os.path.join(args.work_dirs, dataset, d) + for d in os.listdir(os.path.join(args.work_dirs, dataset)) + if os.path.isdir(os.path.join(args.work_dirs, dataset, d)) + ] + dirs.sort(key=os.path.getmtime) + + latest_dir = dirs[-1] + latest_log_name = latest_dir.split('/')[-1] + if int(latest_log_name) > int(latest_time): + latest_time = latest_log_name + print('time=' + latest_log_name) + latest_log = latest_dir + f'/{latest_log_name}.log' + with open(latest_log, 'r') as f: + log = f.read() + print(latest_log) + + complete_flag = re.findall( + r'Epoch\(val\) \[{}\]\[\d+/\d+\]'.format(args.epoch), + log) # find log of args.epoch's validating process + + # Check whether the training is complete + if not complete_flag: + fail_num += 1 + fail.append(dataset) + print('-------------------------------------') + print(f'{dataset} train failed!') + print(f'{fail_num} dataset failed!') + print('-------------------------------------') + key_value = [ + dataset, category, class_num, num_train, num_valid, '', '', + '', '', '' + ] + else: + """match result.""" + match_all = re.findall( + r'The best checkpoint with ([\d.]+) ' + r'coco/bbox_mAP at ([\d.]+) epoch', log) + if match_all: + match = match_all[-1] + best_epoch = match[-1] + print(f'best_epoch={best_epoch}') + # find best result + match_AP = re.findall( + r'\[{}\]\[\d+/\d+\] coco/bbox_mAP: (-?\d+\.?\d*) coco/bbox_mAP_50: (-?\d+\.?\d*) coco/bbox_mAP_75: -?\d+\.?\d* coco/bbox_mAP_s: (-?\d+\.?\d*) coco/bbox_mAP_m: (-?\d+\.?\d*) coco/bbox_mAP_l: (-?\d+\.?\d*)' # noqa + .format(best_epoch), + log) + print(f'match_AP={match_AP}') + + key_value = [ + dataset, category, class_num, num_train, num_valid + ] + key_value.extend(match_AP[0]) + else: + print('----------------- --------------------------') + print('log has no result!') + print('----------------------------------------------') + key_value = [ + dataset, category, class_num, num_train, num_valid, '', + '', '', '', '' + ] + except RuntimeError: + print(f"{dataset} directory doesn't exist!") + none_exist_num += 1 + none_exist.append(dataset) + key_value = [ + dataset, category, num_train, num_valid, '', '', '', '', '' + ] + + if num == 1: # generate headers + result_csv = os.path.join(args.work_dirs, + f'{latest_log_name}_eval.csv') + print(result_csv) + with open(result_csv, mode='w') as f: + writer = csv.writer(f) + header1 = [ + 'Dataset', 'Category', 'Classes', 'Images', 'Images', + args.method, args.method, args.method, args.method, + args.method + ] + writer.writerow(header1) + with open(result_csv, mode='a') as f: + writer = csv.writer(f) + header2 = [ + 'Dataset', 'Category', 'Classes', 'train', 'valid', 'mAP', + 'mAP50', 'mAP_s', 'mAP_m', 'mAP_l' + ] + writer.writerow(header2) + writer.writerow(key_value) + + else: + with open(result_csv, mode='a') as f: + writer = csv.writer(f) + writer.writerow(key_value) + + return result_csv, fail, fail_num, \ + none_exist, none_exist_num, os.path.join( + args.work_dirs, latest_time[4:]) + + +def wb_align(file, pair_ls): + # adjust format of .xlsx file + wb = load_workbook(file) + ws = wb.active + for pair in pair_ls: + ws.merge_cells(f'{pair[0]}:{pair[1]}') + ws[f'{pair[0]}'].alignment = Alignment( + horizontal='center', vertical='center') + wb.save(file) + + +def sort_excel(in_csv, out_xlsx): + # read csv with two headers then convert it to xlsx, + # sort it by category name & dataset name + df = pd.read_csv(in_csv) + df_sorted = df.iloc[1:].sort_values(by=['Category', 'Dataset']) + df_sort = pd.concat([df.iloc[:1], df_sorted]) + df_sort.to_excel(out_xlsx, index=False) + + +def sum_excel(in_csv, out_xlsx): + # read csv with two headers then convert it to xlsx, + # get total number of train&valid images and mean of results + df = pd.read_csv(in_csv) + df.insert(2, 'dataset', pd.Series([])) + df = df.iloc[:, 1:] + average = df.iloc[1:].groupby('Category') # group by category name + df_new = df.iloc[0:1, :] + num = 0 + for key, value in average: + num += 1 + df_cate = [key] + for i in range(1, 10): + if i == 1: + df_cate.append(len(value)) + elif i != 1 and i < 5: + df_cate.append(value.iloc[:, i].astype(float).sum()) + else: + # import pdb; pdb.set_trace() + df_cate.append( + format( + value.iloc[:, i].astype(float).replace( + '', np.nan).replace(-1.0000, np.nan).mean(), + '.4f')) + + # import pdb;pdb.set_trace() + df_new.loc[len(df_new)] = df_cate + + df_cate = ['total'] # final row = 'total' + for i in range(1, 10): + if i < 5: + df_cate.append(df_new.iloc[1:, i].astype(float).sum()) + else: + df_cate.append( + format( + df_new.iloc[1:, i].astype(float).replace('', + np.nan).mean(), + '.4f')) + df_new.loc[len(df_new) + 1] = df_cate + df_new.to_excel(out_xlsx, float_format='%.4f', index=False) + + +def main(): + args = parse_args() + + result_csv, fail, fail_num, none_exist, \ + none_exist_num, latest_time = write_csv('rf100/', args) + + os.rename(result_csv, latest_time + '_eval.csv') + result_csv = latest_time + '_eval.csv' + + # write excel in the order of execution + if args.origin: + df = pd.read_csv(result_csv) + result_xlsx_detail = '{}_origin.xlsx'.format(latest_time) + if os.path.exists(result_xlsx_detail): + os.remove(result_xlsx_detail) + print(f'\n{result_xlsx_detail} created!\n') + df.to_excel(result_xlsx_detail) + wb_align(result_xlsx_detail, [['E1', 'F1'], ['G1', 'K1']]) + + # write excel in the order of category&dataset name + result_xlsx_sort = '{}_detail.xlsx'.format(latest_time) + result_xlsx_sum = '{}_sum.xlsx'.format(latest_time) + if os.path.exists(result_xlsx_sum): + os.remove(result_xlsx_sum) + + # sortec by category name + sort_excel(result_csv, result_xlsx_sort) + wb_align(result_xlsx_sort, [['D1', 'E1'], ['F1', 'J1']]) + + # sum of each category + sum_excel(result_csv, result_xlsx_sum) + wb_align( + result_xlsx_sum, + [['A1', 'A2'], ['B1', 'B2'], ['C1', 'C2'], ['D1', 'E1'], ['F1', 'J1']]) + + # save fail + print(f'sum_file = {result_xlsx_sum}') + ''' generate .txt file ''' + print(f'{none_exist_num} datasets were not trained:\n{none_exist}\n') + print(f'{fail_num} training failed:\n{fail}\n') + + fail_txt = os.path.join(args.work_dirs, 'failed_dataset_list.txt') + with open(fail_txt, 'w') as f: + pass + with open(fail_txt, 'a') as f: + for item in none_exist: + f.write(f'{item}\n') + for item in fail: + f.write(f'{item}\n') + + print(f'all {fail_num + none_exist_num} untrained datasets ' + f'have been logged in {fail_txt}!') + + +if __name__ == '__main__': + main() diff --git a/projects/RF100-Benchmark/scripts/parse_dataset_link.py b/projects/RF100-Benchmark/scripts/parse_dataset_link.py new file mode 100644 index 00000000000..45537a12586 --- /dev/null +++ b/projects/RF100-Benchmark/scripts/parse_dataset_link.py @@ -0,0 +1,18 @@ +import re +from argparse import ArgumentParser + + +def main(): + parser = ArgumentParser( + description='A handy script that will decompose and print from ' + "a roboflow dataset link it's workspace, project and version") + parser.add_argument( + '-l', '--link', required=True, help='A link to a roboflow dataset') + args = vars(parser.parse_args()) + # first one gonna be protocol, e.g. http + _, url, workspace, project, version = re.split('/+', args['link']) + print(url, workspace, project, version) + + +if __name__ == '__main__': + main() diff --git a/projects/RF100-Benchmark/scripts/slurm_train.sh b/projects/RF100-Benchmark/scripts/slurm_train.sh new file mode 100644 index 00000000000..af9e87086b6 --- /dev/null +++ b/projects/RF100-Benchmark/scripts/slurm_train.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +CONFIG=$1 +GPUS=$2 +WORK_DIRS=${3:-'work_dirs'} +RETRY_PATH=${RETRY_PATH:-''} +NNODES=${NNODES:-1} +NODE_RANK=${NODE_RANK:-0} +PORT=${PORT:-29500} +MASTER_ADDR=${MASTER_ADDR:-"127.0.0.1"} +PARTITION=${PARTITION:-'mm_dev'} +JOB_NAME=${JOB_NAME:-'benchmark'} +GPUS_PER_NODE=${GPUS_PER_NODE:-8} +CPUS_PER_TASK=${CPUS_PER_TASK:-5} +SRUN_ARGS=${SRUN_ARGS:-""} + +datasets=$(pwd)/rf100 +export PYTHONPATH="../..":$PYTHONPATH + +DEBUG=0 +# example +datasets_list=('bacteria-ptywi', 'circuit-elements', 'marbles', 'printed-circuit-board', 'solar-panels-taxvb') + +if [ -n "$RETRY_PATH" ]; then + DEBUG=1 + datasets_list=() + while IFS= read -r line; do + if [ -n "$line" ]; then + datasets_list+=("$line") + fi + done < "$RETRY_PATH" +fi + +if [ "$DEBUG" == 1 ]; then + echo "current training dataset list is: ${datasets_list[@]}" +else + echo "Currently training with the full dataset." +fi +echo "==============================================" + +for dataset in $(ls $datasets) + do + # You can customize string_list to train only specific datasets. + if [ "$DEBUG" == 1 ]; then + if [[ ! " ${datasets_list[@]} " =~ "$dataset" ]]; then + continue + fi + fi + + echo "Training on $dataset" + python $(pwd)/scripts/create_new_config.py $CONFIG $dataset + + srun -p ${PARTITION} \ + --job-name=${JOB_NAME} \ + --gres=gpu:${GPUS_PER_NODE} \ + --ntasks=${GPUS} \ + --ntasks-per-node=${GPUS_PER_NODE} \ + --cpus-per-task=${CPUS_PER_TASK} \ + --kill-on-bad-exit=1 \ + ${SRUN_ARGS} \ + python -u ../../tools/train.py "temp_configs/$dataset.py" --work-dir="$WORK_DIRS/$dataset" --launcher="slurm" ${@:4} + + echo "==============================================" + done + +#rm -rf temp_configs +echo "Done training all the datasets" diff --git a/setup.cfg b/setup.cfg index adeb735e770..a3ff3fa46d2 100644 --- a/setup.cfg +++ b/setup.cfg @@ -18,7 +18,7 @@ SPLIT_BEFORE_EXPRESSION_AFTER_OPENING_PAREN = true [codespell] skip = *.ipynb,configs/v3det/category_name_13204_v3det_2023_v1.txt quiet-level = 3 -ignore-words-list = patten,nd,ty,mot,hist,formating,winn,gool,datas,wan,confids,TOOD,tood,ba,warmup,nam,DOTA,dota,conveyer +ignore-words-list = patten,nd,ty,mot,hist,formating,winn,gool,datas,wan,confids,TOOD,tood,ba,warmup,nam,DOTA,dota,conveyer,singed,comittee [flake8] per-file-ignores = mmdet/configs/*: F401,F403,F405 From 8cc950c7a7c9fc6611cec93c36926dccd7836b68 Mon Sep 17 00:00:00 2001 From: Peshal Agarwal <32962474+agpeshal@users.noreply.github.com> Date: Mon, 9 Oct 2023 04:34:57 +0200 Subject: [PATCH 56/63] Fix Pad Shape (#10997) --- .../data_preprocessors/data_preprocessor.py | 4 ++-- .../test_data_preprocessor.py | 23 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/mmdet/models/data_preprocessors/data_preprocessor.py b/mmdet/models/data_preprocessors/data_preprocessor.py index 788fe115c62..55b5c35b3a4 100644 --- a/mmdet/models/data_preprocessors/data_preprocessor.py +++ b/mmdet/models/data_preprocessors/data_preprocessor.py @@ -170,10 +170,10 @@ def _get_pad_shape(self, data: dict) -> List[tuple]: 'or a list of tensor, but got a tensor with shape: ' f'{_batch_inputs.shape}') pad_h = int( - np.ceil(_batch_inputs.shape[1] / + np.ceil(_batch_inputs.shape[2] / self.pad_size_divisor)) * self.pad_size_divisor pad_w = int( - np.ceil(_batch_inputs.shape[2] / + np.ceil(_batch_inputs.shape[3] / self.pad_size_divisor)) * self.pad_size_divisor batch_pad_shape = [(pad_h, pad_w)] * _batch_inputs.shape[0] else: diff --git a/tests/test_models/test_data_preprocessors/test_data_preprocessor.py b/tests/test_models/test_data_preprocessors/test_data_preprocessor.py index 1638666bfc1..fce9dd7d35d 100644 --- a/tests/test_models/test_data_preprocessors/test_data_preprocessor.py +++ b/tests/test_models/test_data_preprocessors/test_data_preprocessor.py @@ -34,6 +34,29 @@ def test_init(self): with self.assertRaises(AssertionError): DetDataPreprocessor(bgr_to_rgb=True, rgb_to_bgr=True) + def test_pad_shape(self): + processor = DetDataPreprocessor() + data = dict(inputs=torch.randint(0, 256, (2, 3, 10, 15))) + batch_pad_shape = processor._get_pad_shape(data) + self.assertEqual(batch_pad_shape, [(10, 15), (10, 15)]) + + data = dict(inputs=[torch.randint(0, 256, (3, 11, 10))]) + self.assertEqual(processor._get_pad_shape(data), [(11, 10)]) + + # batch with different image sizes + data = dict(inputs=[ + torch.randint(0, 256, (3, 10, 16)), + torch.randint(0, 256, (3, 15, 20)) + ]) + + self.assertEqual(processor._get_pad_shape(data), [(10, 16), (15, 20)]) + + # test with pad divisor + processor = DetDataPreprocessor(pad_size_divisor=10) + data = dict(inputs=torch.randint(0, 256, (2, 3, 52, 65))) + self.assertAlmostEqual( + processor._get_pad_shape(data), [(60, 70), (60, 70)]) + def test_forward(self): processor = DetDataPreprocessor(mean=[0, 0, 0], std=[1, 1, 1]) From d84ea9b8d120fdb2be274ca6f922877c5f65acea Mon Sep 17 00:00:00 2001 From: Xujing Guo <124329108+SimonGuoNjust@users.noreply.github.com> Date: Mon, 9 Oct 2023 10:36:20 +0800 Subject: [PATCH 57/63] [CodeCamp2023-603] Add new configuration files for MaskFormer algorithm in mmdetection --- .../maskformer_r50_ms_16xb1_75e_coco.py | 249 ++++++++++++++++++ ...former_swin_l_p4_w12_64xb1_ms_300e_coco.py | 82 ++++++ 2 files changed, 331 insertions(+) create mode 100644 mmdet/configs/maskformer/maskformer_r50_ms_16xb1_75e_coco.py create mode 100644 mmdet/configs/maskformer/maskformer_swin_l_p4_w12_64xb1_ms_300e_coco.py diff --git a/mmdet/configs/maskformer/maskformer_r50_ms_16xb1_75e_coco.py b/mmdet/configs/maskformer/maskformer_r50_ms_16xb1_75e_coco.py new file mode 100644 index 00000000000..70744013afc --- /dev/null +++ b/mmdet/configs/maskformer/maskformer_r50_ms_16xb1_75e_coco.py @@ -0,0 +1,249 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmcv.transforms import RandomChoice, RandomChoiceResize +from mmengine.config import read_base +from mmengine.model.weight_init import PretrainedInit +from mmengine.optim.optimizer import OptimWrapper +from mmengine.optim.scheduler import MultiStepLR +from mmengine.runner import EpochBasedTrainLoop, TestLoop, ValLoop +from torch.nn.modules.activation import ReLU +from torch.nn.modules.batchnorm import BatchNorm2d +from torch.nn.modules.normalization import GroupNorm +from torch.optim.adamw import AdamW + +from mmdet.datasets.transforms.transforms import RandomCrop +from mmdet.models import MaskFormer +from mmdet.models.backbones import ResNet +from mmdet.models.data_preprocessors.data_preprocessor import \ + DetDataPreprocessor +from mmdet.models.dense_heads.maskformer_head import MaskFormerHead +from mmdet.models.layers.pixel_decoder import TransformerEncoderPixelDecoder +from mmdet.models.losses import CrossEntropyLoss, DiceLoss, FocalLoss +from mmdet.models.seg_heads.panoptic_fusion_heads import MaskFormerFusionHead +from mmdet.models.task_modules.assigners.hungarian_assigner import \ + HungarianAssigner +from mmdet.models.task_modules.assigners.match_cost import (ClassificationCost, + DiceCost, + FocalLossCost) +from mmdet.models.task_modules.samplers import MaskPseudoSampler + +with read_base(): + from .._base_.datasets.coco_panoptic import * + from .._base_.default_runtime import * + +data_preprocessor = dict( + type=DetDataPreprocessor, + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True, + pad_size_divisor=1, + pad_mask=True, + mask_pad_value=0, + pad_seg=True, + seg_pad_value=255) + +num_things_classes = 80 +num_stuff_classes = 53 +num_classes = num_things_classes + num_stuff_classes +model = dict( + type=MaskFormer, + data_preprocessor=data_preprocessor, + backbone=dict( + type=ResNet, + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=-1, + norm_cfg=dict(type=BatchNorm2d, requires_grad=False), + norm_eval=True, + style='pytorch', + init_cfg=dict( + type=PretrainedInit, checkpoint='torchvision://resnet50')), + panoptic_head=dict( + type=MaskFormerHead, + in_channels=[256, 512, 1024, 2048], # pass to pixel_decoder inside + feat_channels=256, + out_channels=256, + num_things_classes=num_things_classes, + num_stuff_classes=num_stuff_classes, + num_queries=100, + pixel_decoder=dict( + type=TransformerEncoderPixelDecoder, + norm_cfg=dict(type=GroupNorm, num_groups=32), + act_cfg=dict(type=ReLU), + encoder=dict( # DetrTransformerEncoder + num_layers=6, + layer_cfg=dict( # DetrTransformerEncoderLayer + self_attn_cfg=dict( # MultiheadAttention + embed_dims=256, + num_heads=8, + dropout=0.1, + batch_first=True), + ffn_cfg=dict( + embed_dims=256, + feedforward_channels=2048, + num_fcs=2, + ffn_drop=0.1, + act_cfg=dict(type=ReLU, inplace=True)))), + positional_encoding=dict(num_feats=128, normalize=True)), + enforce_decoder_input_project=False, + positional_encoding=dict(num_feats=128, normalize=True), + transformer_decoder=dict( # DetrTransformerDecoder + num_layers=6, + layer_cfg=dict( # DetrTransformerDecoderLayer + self_attn_cfg=dict( # MultiheadAttention + embed_dims=256, + num_heads=8, + dropout=0.1, + batch_first=True), + cross_attn_cfg=dict( # MultiheadAttention + embed_dims=256, + num_heads=8, + dropout=0.1, + batch_first=True), + ffn_cfg=dict( + embed_dims=256, + feedforward_channels=2048, + num_fcs=2, + ffn_drop=0.1, + act_cfg=dict(type=ReLU, inplace=True))), + return_intermediate=True), + loss_cls=dict( + type=CrossEntropyLoss, + use_sigmoid=False, + loss_weight=1.0, + reduction='mean', + class_weight=[1.0] * num_classes + [0.1]), + loss_mask=dict( + type=FocalLoss, + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + reduction='mean', + loss_weight=20.0), + loss_dice=dict( + type=DiceLoss, + use_sigmoid=True, + activate=True, + reduction='mean', + naive_dice=True, + eps=1.0, + loss_weight=1.0)), + panoptic_fusion_head=dict( + type=MaskFormerFusionHead, + num_things_classes=num_things_classes, + num_stuff_classes=num_stuff_classes, + loss_panoptic=None, + init_cfg=None), + train_cfg=dict( + assigner=dict( + type=HungarianAssigner, + match_costs=[ + dict(type=ClassificationCost, weight=1.0), + dict(type=FocalLossCost, weight=20.0, binary_input=True), + dict(type=DiceCost, weight=1.0, pred_act=True, eps=1.0) + ]), + sampler=dict(type=MaskPseudoSampler)), + test_cfg=dict( + panoptic_on=True, + # For now, the dataset does not support + # evaluating semantic segmentation metric. + semantic_on=False, + instance_on=False, + # max_per_image is for instance segmentation. + max_per_image=100, + object_mask_thr=0.8, + iou_thr=0.8, + # In MaskFormer's panoptic postprocessing, + # it will not filter masks whose score is smaller than 0.5 . + filter_low_score=False), + init_cfg=None) + +# dataset settings +train_pipeline = [ + dict(type=LoadImageFromFile), + dict( + type=LoadPanopticAnnotations, + with_bbox=True, + with_mask=True, + with_seg=True), + dict(type=RandomFlip, prob=0.5), + # dict(type=Resize, scale=(1333, 800), keep_ratio=True), + dict( + type=RandomChoice, + transforms=[[ + dict( + type=RandomChoiceResize, + scales=[(480, 1333), (512, 1333), (544, 1333), (576, 1333), + (608, 1333), (640, 1333), (672, 1333), (704, 1333), + (736, 1333), (768, 1333), (800, 1333)], + resize_type=Resize, + keep_ratio=True) + ], + [ + dict( + type=RandomChoiceResize, + scales=[(400, 1333), (500, 1333), (600, 1333)], + resize_type=Resize, + keep_ratio=True), + dict( + type=RandomCrop, + crop_type='absolute_range', + crop_size=(384, 600), + allow_negative_crop=True), + dict( + type=RandomChoiceResize, + scales=[(480, 1333), (512, 1333), (544, 1333), + (576, 1333), (608, 1333), (640, 1333), + (672, 1333), (704, 1333), (736, 1333), + (768, 1333), (800, 1333)], + resize_type=Resize, + keep_ratio=True) + ]]), + dict(type=PackDetInputs) +] + +train_dataloader.update( + dict(batch_size=1, num_workers=1, dataset=dict(pipeline=train_pipeline))) + +val_dataloader.update(dict(batch_size=1, num_workers=1)) + +test_dataloader = val_dataloader + +# optimizer +optim_wrapper = dict( + type=OptimWrapper, + optimizer=dict( + type=AdamW, + lr=0.0001, + weight_decay=0.0001, + eps=1e-8, + betas=(0.9, 0.999)), + paramwise_cfg=dict( + custom_keys={ + 'backbone': dict(lr_mult=0.1, decay_mult=1.0), + 'query_embed': dict(lr_mult=1.0, decay_mult=0.0) + }, + norm_decay_mult=0.0), + clip_grad=dict(max_norm=0.01, norm_type=2)) + +max_epochs = 75 + +# learning rate +param_scheduler = dict( + type=MultiStepLR, + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[50], + gamma=0.1) + +train_cfg = dict( + type=EpochBasedTrainLoop, max_epochs=max_epochs, val_interval=1) +val_cfg = dict(type=ValLoop) +test_cfg = dict(type=TestLoop) + +# Default setting for scaling LR automatically +# - `enable` means enable scaling LR automatically +# or not by default. +# - `base_batch_size` = (16 GPUs) x (1 samples per GPU). +auto_scale_lr = dict(enable=False, base_batch_size=16) diff --git a/mmdet/configs/maskformer/maskformer_swin_l_p4_w12_64xb1_ms_300e_coco.py b/mmdet/configs/maskformer/maskformer_swin_l_p4_w12_64xb1_ms_300e_coco.py new file mode 100644 index 00000000000..2affe520918 --- /dev/null +++ b/mmdet/configs/maskformer/maskformer_swin_l_p4_w12_64xb1_ms_300e_coco.py @@ -0,0 +1,82 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmengine.config import read_base +from mmengine.optim.scheduler import LinearLR + +from mmdet.models.backbones import SwinTransformer +from mmdet.models.layers import PixelDecoder + +with read_base(): + from .maskformer_r50_ms_16xb1_75e_coco import * + +pretrained = 'https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_large_patch4_window12_384_22k.pth' # noqa +depths = [2, 2, 18, 2] +model.update( + dict( + backbone=dict( + _delete_=True, + type=SwinTransformer, + pretrain_img_size=384, + embed_dims=192, + patch_size=4, + window_size=12, + mlp_ratio=4, + depths=depths, + num_heads=[6, 12, 24, 48], + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.3, + patch_norm=True, + out_indices=(0, 1, 2, 3), + with_cp=False, + convert_weights=True, + init_cfg=dict(type=PretrainedInit, checkpoint=pretrained)), + panoptic_head=dict( + in_channels=[192, 384, 768, 1536], # pass to pixel_decoder inside + pixel_decoder=dict( + _delete_=True, + type=PixelDecoder, + norm_cfg=dict(type=GroupNorm, num_groups=32), + act_cfg=dict(type=ReLU)), + enforce_decoder_input_project=True))) + +# optimizer + +# weight_decay = 0.01 +# norm_weight_decay = 0.0 +# embed_weight_decay = 0.0 +embed_multi = dict(lr_mult=1.0, decay_mult=0.0) +norm_multi = dict(lr_mult=1.0, decay_mult=0.0) +custom_keys = { + 'norm': norm_multi, + 'absolute_pos_embed': embed_multi, + 'relative_position_bias_table': embed_multi, + 'query_embed': embed_multi +} + +optim_wrapper.update( + dict( + optimizer=dict(lr=6e-5, weight_decay=0.01), + paramwise_cfg=dict(custom_keys=custom_keys, norm_decay_mult=0.0))) + +max_epochs = 300 + +# learning rate +param_scheduler = [ + dict(type=LinearLR, start_factor=1e-6, by_epoch=False, begin=0, end=1500), + dict( + type=MultiStepLR, + begin=0, + end=max_epochs, + by_epoch=True, + milestones=[250], + gamma=0.1) +] + +train_cfg.update(dict(max_epochs=max_epochs)) + +# NOTE: `auto_scale_lr` is for automatically scaling LR, +# USER SHOULD NOT CHANGE ITS VALUES. +# base_batch_size = (64 GPUs) x (1 samples per GPU) +auto_scale_lr.update(dict(base_batch_size=64)) From f14353df9520bd0b44af60e96d4c91587fdfe07d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Mon, 9 Oct 2023 13:37:04 +0800 Subject: [PATCH 58/63] Add custom dataset of grounding dino (#11012) --- configs/grounding_dino/README.md | 96 +++++++++++++++++++ ...nding_dino_swin-t_finetune_8xb2_20e_cat.py | 56 +++++++++++ 2 files changed, 152 insertions(+) create mode 100644 configs/grounding_dino/grounding_dino_swin-t_finetune_8xb2_20e_cat.py diff --git a/configs/grounding_dino/README.md b/configs/grounding_dino/README.md index 2c869adffc9..715b630cc79 100644 --- a/configs/grounding_dino/README.md +++ b/configs/grounding_dino/README.md @@ -74,3 +74,99 @@ Note: 1. The weights corresponding to the zero-shot model are adopted from the official weights and converted using the [script](../../tools/model_converters/groundingdino_to_mmdet.py). We have not retrained the model for the time being. 2. Finetune refers to fine-tuning on the COCO 2017 dataset. The R50 model is trained using 8 NVIDIA GeForce 3090 GPUs, while the remaining models are trained using 16 NVIDIA GeForce 3090 GPUs. The GPU memory usage is approximately 8.5GB. 3. Our performance is higher than the official model due to two reasons: we modified the initialization strategy and introduced a log scaler. + +## Custom Dataset + +To facilitate fine-tuning on custom datasets, we use a simple cat dataset as an example, as shown in the following steps. + +### 1. Dataset Preparation + +```shell +cd mmdetection +wget https://download.openmmlab.com/mmyolo/data/cat_dataset.zip +unzip cat_dataset.zip -d data/cat/ +``` + +cat dataset is a single-category dataset with 144 images, which has been converted to coco format. + +
    +cat dataset +
    + +### 2. Config Preparation + +Due to the simplicity and small number of cat datasets, we use 8 cards to train 20 epochs, scale the learning rate accordingly, and do not train the language model, only the visual model. + +The Details of the configuration can be found in [grounding_dino_swin-t_finetune_8xb2_20e_cat](grounding_dino_swin-t_finetune_8xb2_20e_cat.py) + +### 3. Visualization and Evaluation + +Due to the Grounding DINO is an open detection model, so it can be detected and evaluated even if it is not trained on the cat dataset. + +The single image visualization is as follows: + +```shell +cd mmdetection +python demo/image_demo.py data/cat/images/IMG_20211205_120756.jpg configs/grounding_dino/grounding_dino_swin-t_finetune_8xb2_20e_cat.py --weights https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/groundingdino_swint_ogc_mmdet-822d7e9d.pth --texts cat. +``` + +
    +cat dataset +
    + +The test dataset evaluation on single card is as follows: + +```shell +python tools/test.py configs/grounding_dino/grounding_dino_swin-t_finetune_8xb2_20e_cat.py https://download.openmmlab.com/mmdetection/v3.0/grounding_dino/groundingdino_swint_ogc_mmdet-822d7e9d.pth +``` + +```text + Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.867 + Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 1.000 + Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.931 + Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = -1.000 + Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = -1.000 + Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.867 + Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.903 + Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.907 + Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.907 + Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = -1.000 + Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = -1.000 + Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.907 +``` + +### 4. Model Training and Visualization + +```shell +./tools/dist_train.sh configs/grounding_dino/grounding_dino_swin-t_finetune_8xb2_20e_cat.py 8 --work-dir cat_work_dir +``` + +The model will be saved based on the best performance on the test set. The performance of the best model (at epoch 16) is as follows: + +```text + Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.905 + Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 1.000 + Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.923 + Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = -1.000 + Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = -1.000 + Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.905 + Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.927 + Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.937 + Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.937 + Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = -1.000 + Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = -1.000 + Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.937 +``` + +We can find that after fine-tuning training, the training of the cat dataset is increased from 86.7 to 90.5. + +If we do single image inference visualization again, the result is as follows: + +```shell +cd mmdetection +python demo/image_demo.py data/cat/images/IMG_20211205_120756.jpg configs/grounding_dino/grounding_dino_swin-t_finetune_8xb2_20e_cat.py --weights cat_work_dir/best_coco_bbox_mAP_epoch_16.pth --texts cat. +``` + +
    +cat dataset +
    diff --git a/configs/grounding_dino/grounding_dino_swin-t_finetune_8xb2_20e_cat.py b/configs/grounding_dino/grounding_dino_swin-t_finetune_8xb2_20e_cat.py new file mode 100644 index 00000000000..c2265e86730 --- /dev/null +++ b/configs/grounding_dino/grounding_dino_swin-t_finetune_8xb2_20e_cat.py @@ -0,0 +1,56 @@ +_base_ = 'grounding_dino_swin-t_finetune_16xb2_1x_coco.py' + +data_root = 'data/cat/' +class_name = ('cat', ) +num_classes = len(class_name) +metainfo = dict(classes=class_name, palette=[(220, 20, 60)]) + +model = dict(bbox_head=dict(num_classes=num_classes)) + +train_dataloader = dict( + dataset=dict( + data_root=data_root, + metainfo=metainfo, + ann_file='annotations/trainval.json', + data_prefix=dict(img='images/'))) + +val_dataloader = dict( + dataset=dict( + metainfo=metainfo, + data_root=data_root, + ann_file='annotations/test.json', + data_prefix=dict(img='images/'))) + +test_dataloader = val_dataloader + +val_evaluator = dict(ann_file=data_root + 'annotations/test.json') +test_evaluator = val_evaluator + +max_epoch = 20 + +default_hooks = dict( + checkpoint=dict(interval=1, max_keep_ckpts=1, save_best='auto'), + logger=dict(type='LoggerHook', interval=5)) +train_cfg = dict(max_epochs=max_epoch, val_interval=1) + +param_scheduler = [ + dict(type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, end=30), + dict( + type='MultiStepLR', + begin=0, + end=max_epoch, + by_epoch=True, + milestones=[15], + gamma=0.1) +] + +optim_wrapper = dict( + optimizer=dict(lr=0.00005), + paramwise_cfg=dict( + custom_keys={ + 'absolute_pos_embed': dict(decay_mult=0.), + 'backbone': dict(lr_mult=0.1), + 'language_model': dict(lr_mult=0), + })) + +auto_scale_lr = dict(base_batch_size=16) From 4d77feb7a8e5967686d9bf922d2bb61162de57d2 Mon Sep 17 00:00:00 2001 From: takuoko Date: Wed, 11 Oct 2023 10:57:58 +0900 Subject: [PATCH 59/63] [Feature] Release RTMDet-X p6 (#10993) --- configs/rtmdet/README.md | 1 + configs/rtmdet/metafile.yml | 14 ++ configs/rtmdet/rtmdet_x_p6_4xb8-300e_coco.py | 132 +++++++++++++++++++ 3 files changed, 147 insertions(+) create mode 100644 configs/rtmdet/rtmdet_x_p6_4xb8-300e_coco.py diff --git a/configs/rtmdet/README.md b/configs/rtmdet/README.md index 5ea574dd78b..4574dd613c1 100644 --- a/configs/rtmdet/README.md +++ b/configs/rtmdet/README.md @@ -27,6 +27,7 @@ In this paper, we aim to design an efficient real-time object detector that exce | RTMDet-m | 640 | 49.4 | 24.71 | 39.27 | 1.62 | 6.41 | [config](./rtmdet_m_8xb32-300e_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet_m_8xb32-300e_coco/rtmdet_m_8xb32-300e_coco_20220719_112220-229f527c.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet_m_8xb32-300e_coco/rtmdet_m_8xb32-300e_coco_20220719_112220.log.json) | | RTMDet-l | 640 | 51.5 | 52.3 | 80.23 | 2.44 | 10.32 | [config](./rtmdet_l_8xb32-300e_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet_l_8xb32-300e_coco/rtmdet_l_8xb32-300e_coco_20220719_112030-5a0be7c4.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet_l_8xb32-300e_coco/rtmdet_l_8xb32-300e_coco_20220719_112030.log.json) | | RTMDet-x | 640 | 52.8 | 94.86 | 141.67 | 3.10 | 18.80 | [config](./rtmdet_x_8xb32-300e_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet_x_8xb32-300e_coco/rtmdet_x_8xb32-300e_coco_20220715_230555-cc79b9ae.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet_x_8xb32-300e_coco/rtmdet_x_8xb32-300e_coco_20220715_230555.log.json) | +| RTMDet-x-P6 | 1280 | 54.9 | | | | | [config](./rtmdet_x_p6_4xb8-300e_coco.py) | [model](https://github.com/orange0-jp/orange-weights/releases/download/v0.1.0rtmdet-p6/rtmdet_x_p6_4xb8-300e_coco-bf32be58.pth) | **Note**: diff --git a/configs/rtmdet/metafile.yml b/configs/rtmdet/metafile.yml index c4e8c9b796c..7dc72e130be 100644 --- a/configs/rtmdet/metafile.yml +++ b/configs/rtmdet/metafile.yml @@ -90,6 +90,20 @@ Models: box AP: 52.6 Weights: https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet_x_8xb32-300e_coco/rtmdet_x_8xb32-300e_coco_20220715_230555-cc79b9ae.pth + - Name: rtmdet_x_p6_4xb8-300e_coco + Alias: + - rtmdet-x_p6 + In Collection: RTMDet + Config: configs/rtmdet/rtmdet_x_p6_4xb8-300e_coco.py + Metadata: + Epochs: 300 + Results: + - Task: Object Detection + Dataset: COCO + Metrics: + box AP: 54.9 + Weights: https://github.com/orange0-jp/orange-weights/releases/download/v0.1.0rtmdet-p6/rtmdet_x_p6_4xb8-300e_coco-bf32be58.pth + - Name: rtmdet-ins_tiny_8xb32-300e_coco Alias: - rtmdet-ins-t diff --git a/configs/rtmdet/rtmdet_x_p6_4xb8-300e_coco.py b/configs/rtmdet/rtmdet_x_p6_4xb8-300e_coco.py new file mode 100644 index 00000000000..d1bb7fa6a78 --- /dev/null +++ b/configs/rtmdet/rtmdet_x_p6_4xb8-300e_coco.py @@ -0,0 +1,132 @@ +_base_ = './rtmdet_x_8xb32-300e_coco.py' + +model = dict( + backbone=dict(arch='P6', out_indices=(2, 3, 4, 5)), + neck=dict(in_channels=[320, 640, 960, 1280]), + bbox_head=dict( + anchor_generator=dict( + type='MlvlPointGenerator', offset=0, strides=[8, 16, 32, 64]))) + +train_pipeline = [ + dict(type='LoadImageFromFile', backend_args={{_base_.backend_args}}), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='CachedMosaic', img_scale=(1280, 1280), pad_val=114.0), + dict( + type='RandomResize', + scale=(2560, 2560), + ratio_range=(0.1, 2.0), + keep_ratio=True), + dict(type='RandomCrop', crop_size=(1280, 1280)), + dict(type='YOLOXHSVRandomAug'), + dict(type='RandomFlip', prob=0.5), + dict(type='Pad', size=(1280, 1280), pad_val=dict(img=(114, 114, 114))), + dict( + type='CachedMixUp', + img_scale=(1280, 1280), + ratio_range=(1.0, 1.0), + max_cached_images=20, + pad_val=(114, 114, 114)), + dict(type='PackDetInputs') +] + +train_pipeline_stage2 = [ + dict(type='LoadImageFromFile', backend_args={{_base_.backend_args}}), + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='RandomResize', + scale=(1280, 1280), + ratio_range=(0.1, 2.0), + keep_ratio=True), + dict(type='RandomCrop', crop_size=(1280, 1280)), + dict(type='YOLOXHSVRandomAug'), + dict(type='RandomFlip', prob=0.5), + dict(type='Pad', size=(1280, 1280), pad_val=dict(img=(114, 114, 114))), + dict(type='PackDetInputs') +] + +test_pipeline = [ + dict(type='LoadImageFromFile', backend_args={{_base_.backend_args}}), + dict(type='Resize', scale=(1280, 1280), keep_ratio=True), + dict(type='Pad', size=(1280, 1280), pad_val=dict(img=(114, 114, 114))), + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor')) +] + +train_dataloader = dict( + batch_size=8, num_workers=20, dataset=dict(pipeline=train_pipeline)) +val_dataloader = dict( + batch_size=5, num_workers=20, dataset=dict(pipeline=test_pipeline)) +test_dataloader = val_dataloader + +max_epochs = 300 +stage2_num_epochs = 20 + +base_lr = 0.004 * 32 / 256 +optim_wrapper = dict(optimizer=dict(lr=base_lr)) + +param_scheduler = [ + dict( + type='LinearLR', + start_factor=1.0e-5, + by_epoch=False, + begin=0, + end=1000), + dict( + # use cosine lr from 150 to 300 epoch + type='CosineAnnealingLR', + eta_min=base_lr * 0.05, + begin=max_epochs // 2, + end=max_epochs, + T_max=max_epochs // 2, + by_epoch=True, + convert_to_iter_based=True), +] + +custom_hooks = [ + dict( + type='EMAHook', + ema_type='ExpMomentumEMA', + momentum=0.0002, + update_buffers=True, + priority=49), + dict( + type='PipelineSwitchHook', + switch_epoch=max_epochs - stage2_num_epochs, + switch_pipeline=train_pipeline_stage2) +] + +img_scales = [(1280, 1280), (640, 640), (1920, 1920)] +tta_pipeline = [ + dict(type='LoadImageFromFile', backend_args=None), + dict( + type='TestTimeAug', + transforms=[ + [ + dict(type='Resize', scale=s, keep_ratio=True) + for s in img_scales + ], + [ + # ``RandomFlip`` must be placed before ``Pad``, otherwise + # bounding box coordinates after flipping cannot be + # recovered correctly. + dict(type='RandomFlip', prob=1.), + dict(type='RandomFlip', prob=0.) + ], + [ + dict( + type='Pad', + size=(1920, 1920), + pad_val=dict(img=(114, 114, 114))), + ], + [dict(type='LoadAnnotations', with_bbox=True)], + [ + dict( + type='PackDetInputs', + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', + 'scale_factor', 'flip', 'flip_direction')) + ] + ]) +] From 023086721dfc1815221078884fcbad65d262995f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Wed, 11 Oct 2023 10:15:25 +0800 Subject: [PATCH 60/63] Add FSDP and DeepSpeed training example (#10981) --- projects/example_largemodel/README.md | 75 +++++++++++++++++++ projects/example_largemodel/README_zh-CN.md | 75 +++++++++++++++++++ projects/example_largemodel/__init__.py | 3 + ...o-5scale_swin-l_deepspeed_8xb2-12e_coco.py | 44 +++++++++++ .../dino-5scale_swin-l_fsdp_8xb2-12e_coco.py | 18 +++++ projects/example_largemodel/fsdp_utils.py | 38 ++++++++++ 6 files changed, 253 insertions(+) create mode 100644 projects/example_largemodel/README.md create mode 100644 projects/example_largemodel/README_zh-CN.md create mode 100644 projects/example_largemodel/__init__.py create mode 100644 projects/example_largemodel/dino-5scale_swin-l_deepspeed_8xb2-12e_coco.py create mode 100644 projects/example_largemodel/dino-5scale_swin-l_fsdp_8xb2-12e_coco.py create mode 100644 projects/example_largemodel/fsdp_utils.py diff --git a/projects/example_largemodel/README.md b/projects/example_largemodel/README.md new file mode 100644 index 00000000000..aac7b4be104 --- /dev/null +++ b/projects/example_largemodel/README.md @@ -0,0 +1,75 @@ +# Vision Large Model Example + +The project is used to explore how to successfully train relatively large visual models on consumer-level graphics cards. + +Although the visual model does not have such an exaggerated number of parameters as LLM, even the commonly used models with Swin Large as the backbone need to be trained successfully on A100, which undoubtedly hinders users' exploration and experiments on visual large models. Therefore, this project will explore how to train visual large models on 3090 and even smaller graphics cards with 24G or less memory. + +The project mainly involves training technologies such as `FSDP`, `DeepSpeed` and `ColossalAI` commonly used in large model training. + +The project will be continuously updated and improved. If you have better exploration and suggestions, you are also welcome to submit a PR + +## requirements + +```text +mmengine >=0.9.0 # Example 1 +deepspeed # Example 2 +fairscale # Example 2 +``` + +## Example 1: Train `dino-5scale_swin-l_fsdp_8xb2-12e_coco.py` with 8 24G 3090 GPUs and FSDP + +```bash +cd mmdetection +./tools/dist_train.sh projects/example_largemodel/dino-5scale_swin-l_fsdp_8xb2-12e_coco.py 8 +./tools/dist_train.sh projects/example_largemodel/dino-5scale_swin-l_fsdp_8xb2-12e_coco.py 8 --amp +``` + +| ID | AMP | GC of Backbone | GC of Encoder | FSDP | Peak Mem (GB) | Iter Time (s) | +| :-: | :-: | :------------: | :-----------: | :--: | :-----------: | :-----------: | +| 1 | | | | | 49 (A100) | 0.9 | +| 2 | √ | | | | 39 (A100) | 1.2 | +| 3 | | √ | | | 33 (A100) | 1.1 | +| 4 | √ | √ | | | 25 (A100) | 1.3 | +| 5 | | √ | √ | | 18 | 2.2 | +| 6 | √ | √ | √ | | 13 | 1.6 | +| 7 | | √ | √ | √ | 14 | 2.9 | +| 8 | √ | √ | √ | √ | 8.5 | 2.4 | + +- AMP: Automatic Mixed Precision +- GC: Gradient/Activation checkpointing +- FSDP: ZeRO-3 with Activation Checkpointing ZeRO-3 +- Iter Time: Total training time for one iteration + +From the above analysis, it can be seen that: + +1. By combining FSDP with AMP and GC techniques, the initial 49GB of GPU memory can be reduced to 8.5GB, but it comes at the cost of a 1.7x increase in training time. +2. In object detection visual models, the largest memory consumption is due to activation values, rather than optimizer states, which is different from LLM. Therefore, users should prefer gradient checkpoints over FSDP. +3. If gradient checkpoints are not enabled and only FSDP is used, out-of-memory (OOM) errors can still occur, even with more fine-grained parameter splitting strategies. +4. While AMP can significantly reduce memory usage, some algorithms may experience a decrease in precision when using AMP, whereas FSDP does not exhibit this issue. + +## Example 2: Train `dino-5scale_swin-l_deepspeed_8xb2-12e_coco.py` with 8 24G 3090 GPUs and DeepSpeed + +```bash +cd mmdetection +./tools/dist_train.sh projects/example_largemodel/dino-5scale_swin-l_deepspeed_8xb2-12e_coco.py 8 +``` + +It is a pity that this is still a failed case so far, because the gradient will always overflow, resulting in very low accuracy. + +| ID | AMP | GC of Backbone | GC of Encoder | DeepSpeed | Peak Mem (GB) | Iter Time (s) | +| :-: | :-: | :------------: | :-----------: | :-------: | :-----------: | :-----------: | +| 1 | | | | | 49 (A100) | 0.9 | +| 2 | √ | | | | 39 (A100) | 1.2 | +| 3 | √ | √ | | | 25 (A100) | 1.3 | +| 4 | √ | √ | | √ | 10.5 | 1.5 | +| 5 | √ | √ | √ | | 13 | 1.6 | +| 6 | √ | √ | √ | √ | 5.0 | 1.4 | + +From the above analysis, it can be seen that: + +1. DeepSpeed has greatly improved usability compared to FSDP. Gradient checkpointing can be done using the native torch functionality without the need for custom modifications, and there is no need for the `auto_wrap_policy` parameter that needs to be set by the user. +2. The DeepSpeed ZeRO series requires the use of FP16 mode and utilizes NVIDIA's Apex package. It uses Apex's AMP O2 mode, which requires code modifications. However, the O2 mode uses a significant amount of FP16 computation, which prevents DINO algorithm from training properly. But this mode can significantly save GPU memory and provides more thorough type conversion compared to torch's official AMP. + +From the above analysis, it can be concluded that if DeepSpeed can successfully train the DINO model without reduce performance, it will have a significant advantage over FSDP. If you have a deep understanding of DeepSpeed and Apex and are interested in troubleshooting accuracy issues, your feedback or PR is welcome. + +As mentioned earlier, due to the specific nature of Apex AMP O2, the current version of MMDetection cannot train the DINO model. Considering this as a failed case, the modified code has been placed in the [dino_deepspeed branch](https://github.com/hhaAndroid/mmdetection/tree/dino_deepspeed). The corresponding modifications can be seen in this [commit](https://github.com/hhaAndroid/mmdetection/commit/0c825ae38e2cee3d11a20c5c4adf24ee682d0a55). If you are interested, you can pull this branch and experiment with it. diff --git a/projects/example_largemodel/README_zh-CN.md b/projects/example_largemodel/README_zh-CN.md new file mode 100644 index 00000000000..bb7e91bebaf --- /dev/null +++ b/projects/example_largemodel/README_zh-CN.md @@ -0,0 +1,75 @@ +# 视觉大模型实践案例 + +本工程用于探索如何在消费级显卡上成功训练相对大的视觉模型。 + +虽然视觉模型并没有像 LLM 那样有极其夸张的参数量,但是即使常用的以 Swin Large 为 backbone 的模型,都需要在 A100 上才能成功训练,这无疑阻碍了用户在视觉大模型上的探索和实验。因此本工程将探索在 3090 等 24G 甚至更小显存的消级显卡上如何训练视觉大模型。 + +本工程主要涉及到的训练技术有 `FSDP`、`DeepSpeed` 和 `ColossalAI` 等常用大模型训练技术。 + +本工程将不断更新完善,如果你有比较好的探索和意见,也非常欢迎提 PR + +## 依赖 + +```text +mmengine >=0.9.0 # 案例 1 +deepspeed # 案例 2 +fairscale # 案例 2 +``` + +## 案例 1: 采用 8 张 24G 3090 显卡结合 FSDP 训练 `dino-5scale_swin-l_fsdp_8xb2-12e_coco.py` + +```bash +cd mmdetection +./tools/dist_train.sh projects/example_largemodel/dino-5scale_swin-l_fsdp_8xb2-12e_coco.py 8 +./tools/dist_train.sh projects/example_largemodel/dino-5scale_swin-l_fsdp_8xb2-12e_coco.py 8 --amp +``` + +| ID | AMP | GC of Backbone | GC of Encoder | FSDP | Peak Mem (GB) | Iter Time (s) | +| :-: | :-: | :------------: | :-----------: | :--: | :-----------: | :-----------: | +| 1 | | | | | 49 (A100) | 0.9 | +| 2 | √ | | | | 39 (A100) | 1.2 | +| 3 | | √ | | | 33 (A100) | 1.1 | +| 4 | √ | √ | | | 25 (A100) | 1.3 | +| 5 | | √ | √ | | 18 | 2.2 | +| 6 | √ | √ | √ | | 13 | 1.6 | +| 7 | | √ | √ | √ | 14 | 2.9 | +| 8 | √ | √ | √ | √ | 8.5 | 2.4 | + +- AMP: 混合精度训练 +- GC: 梯度/激活值检查点 +- FSDP: ZeRO-3 结合梯度检查点 +- Iter Time: 一次迭代训练总时间 + +从上表可以看出: + +1. 采用 FSDP 结合 AMP 和 GC 技术,可以将最初的 49G 显存降低为 8.5G,但是会增加 1.7 倍训练时间 +2. 在目标检测视觉模型中,占据最大显存的是激活值,而不是优化器状态,这和 LLM 不同,因此用户应该首选梯度检查点,而不是 FSDP +3. 如果不开启梯度检查点,仅开启 FSDP 的话依然会 OOM,即使尝试了更加细致的参数切分策略 +4. 虽然 AMP 可以减少不少显存,但是有些算法使用 AMP 会导致精度下降而 FSDP 不会 + +## 案例 2: 采用 8 张 24G 3090 显卡结合 DeepSpeed 训练 `dino-5scale_swin-l_deepspeed_8xb2-12e_coco.py` + +```bash +cd mmdetection +./tools/dist_train.sh projects/example_largemodel/dino-5scale_swin-l_deepspeed_8xb2-12e_coco.py 8 +``` + +很遗憾,到目前为止这依然是一个失败的案例,因为梯度始终会溢出导致精度很低。 + +| ID | AMP | GC of Backbone | GC of Encoder | DeepSpeed | Peak Mem (GB) | Iter Time (s) | +| :-: | :-: | :------------: | :-----------: | :-------: | :-----------: | :-----------: | +| 1 | | | | | 49 (A100) | 0.9 | +| 2 | √ | | | | 39 (A100) | 1.2 | +| 3 | √ | √ | | | 25 (A100) | 1.3 | +| 4 | √ | √ | | √ | 10.5 | 1.5 | +| 5 | √ | √ | √ | | 13 | 1.6 | +| 6 | √ | √ | √ | √ | 5.0 | 1.4 | + +从上表可以看出: + +1. DeepSpeed 易用性上相比于 FSDP 有很大提升,因为梯度检查点可以用 torch 原生的而不需要修改特殊定制,同时也没有 `auto_wrap_policy` 这个需要用户自行设置的参数 +2. DeepSpeed ZeRO 系列必须要采用 FP16 模式,其底层是采用了 NVIDIA’s Apex package, 其使用 Apex 的 AMP O2 模式,这导致需要修改代码,并且 O2 模式采用大量 FP16 计算导致 DINO 算法无法正常训练,但是它的这种模式可以显著节省显存,相比于 torch 官方的 AMP,类型转换更加彻底 + +从上述分析可知,如果 DeepSpeed 能够在不降低性能情况下成功训练 DINO 模型,那么其将比 FSDP 具备比较大的优势。如果您对 DeepSpeed 和 Apex 有比较深入的了解同时有兴趣排查精度问题,欢迎反馈或者提 PR + +前面说过由于 Apex AMP O2 的特殊性,目前的 MMDetection 无法训练 DINO 模型,考虑到这是一个失败的案例,因此将修改的代码放在了 https://github.com/hhaAndroid/mmdetection/tree/dino_deepspeed 分支,其对应修改见 [commit](https://github.com/hhaAndroid/mmdetection/commit/0c825ae38e2cee3d11a20c5c4adf24ee682d0a55)。如果您有兴趣尝试,可以拉取该分支进行试验。 diff --git a/projects/example_largemodel/__init__.py b/projects/example_largemodel/__init__.py new file mode 100644 index 00000000000..fd93529ba0a --- /dev/null +++ b/projects/example_largemodel/__init__.py @@ -0,0 +1,3 @@ +from .fsdp_utils import checkpoint_check_fn, layer_auto_wrap_policy + +__all__ = ['checkpoint_check_fn', 'layer_auto_wrap_policy'] diff --git a/projects/example_largemodel/dino-5scale_swin-l_deepspeed_8xb2-12e_coco.py b/projects/example_largemodel/dino-5scale_swin-l_deepspeed_8xb2-12e_coco.py new file mode 100644 index 00000000000..f996c6383d5 --- /dev/null +++ b/projects/example_largemodel/dino-5scale_swin-l_deepspeed_8xb2-12e_coco.py @@ -0,0 +1,44 @@ +from mmengine.config import read_base + +with read_base(): + from mmdet.configs.dino.dino_5scale_swin_l_8xb2_12e_coco import * # noqa + +model.update(dict(encoder=dict(num_cp=6))) # noqa + +runner_type = 'FlexibleRunner' +strategy = dict( + type='DeepSpeedStrategy', + gradient_clipping=0.1, + fp16=dict( + enabled=True, + fp16_master_weights_and_grads=False, + loss_scale=0, + loss_scale_window=500, + hysteresis=2, + min_loss_scale=1, + initial_scale_power=15, + ), + inputs_to_half=['inputs'], + zero_optimization=dict( + stage=3, + allgather_partitions=True, + reduce_scatter=True, + allgather_bucket_size=50000000, + reduce_bucket_size=50000000, + overlap_comm=True, + contiguous_gradients=True, + cpu_offload=False), +) + +optim_wrapper = dict( + type='DeepSpeedOptimWrapper', + optimizer=dict( + type='AdamW', + lr=0.0001, # 0.0002 for DeformDETR + weight_decay=0.0001), + # clip_grad=dict(max_norm=0.1, norm_type=2), + paramwise_cfg=dict(custom_keys={'backbone': dict(lr_mult=0.1)})) + +# To debug +default_hooks.update(dict(logger=dict(interval=1))) # noqa +log_processor.update(dict(window_size=1)) # noqa diff --git a/projects/example_largemodel/dino-5scale_swin-l_fsdp_8xb2-12e_coco.py b/projects/example_largemodel/dino-5scale_swin-l_fsdp_8xb2-12e_coco.py new file mode 100644 index 00000000000..e4f8f525496 --- /dev/null +++ b/projects/example_largemodel/dino-5scale_swin-l_fsdp_8xb2-12e_coco.py @@ -0,0 +1,18 @@ +from mmengine.config import read_base + +with read_base(): + from mmdet.configs.dino.dino_5scale_swin_l_8xb2_12e_coco import * # noqa + +from projects.example_largemodel import (checkpoint_check_fn, + layer_auto_wrap_policy) + +# The checkpoint needs to be controlled by the checkpoint_check_fn. +model.update(dict(backbone=dict(with_cp=False))) # noqa + +# TODO: The new version of configs does not support passing a module list, +# so for now, it can only be hard-coded. We will fix this issue in the future. +runner_type = 'FlexibleRunner' +strategy = dict( + type='FSDPStrategy', + activation_checkpointing=dict(check_fn=checkpoint_check_fn), + model_wrapper=dict(auto_wrap_policy=dict(type=layer_auto_wrap_policy))) diff --git a/projects/example_largemodel/fsdp_utils.py b/projects/example_largemodel/fsdp_utils.py new file mode 100644 index 00000000000..4d6afa75cd2 --- /dev/null +++ b/projects/example_largemodel/fsdp_utils.py @@ -0,0 +1,38 @@ +from typing import Sequence, Union + +import torch.nn as nn + +from mmdet.models.backbones.swin import SwinBlock +from mmdet.models.layers.transformer.deformable_detr_layers import \ + DeformableDetrTransformerEncoderLayer + + +# TODO: The new version of configs does not support passing a module list, +# so for now, it can only be hard-coded. We will fix this issue in the future. +def layer_auto_wrap_policy( + module, + recurse: bool, + nonwrapped_numel: int, + layer_cls: Union[nn.Module, Sequence[nn.Module]] = ( + SwinBlock, DeformableDetrTransformerEncoderLayer), +) -> bool: + if recurse: + # always recurse + return True + else: + # if not recursing, decide whether we should wrap for + # the leaf node or reminder + return isinstance(module, tuple(layer_cls)) + + +def checkpoint_check_fn(submodule, + layer_cls: Union[nn.Module, Sequence[nn.Module]] = ( + SwinBlock, DeformableDetrTransformerEncoderLayer)): + return isinstance(submodule, tuple(layer_cls)) + + +# non_reentrant_wrapper = partial( +# checkpoint_wrapper, +# offload_to_cpu=False, +# checkpoint_impl=CheckpointImpl.NO_REENTRANT, +# ) From e43268ea8019a58bcbf5104caf24416b8101670b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Thu, 12 Oct 2023 10:19:12 +0800 Subject: [PATCH 61/63] Update train.py to compat with new config (#11025) --- .circleci/test.yml | 12 +++++++++--- mmdet/__init__.py | 2 +- requirements/mminstall.txt | 2 +- tools/train.py | 16 ++-------------- 4 files changed, 13 insertions(+), 19 deletions(-) diff --git a/.circleci/test.yml b/.circleci/test.yml index b20f63ab28e..e5e14d3dd07 100644 --- a/.circleci/test.yml +++ b/.circleci/test.yml @@ -94,14 +94,14 @@ jobs: type: string cuda: type: enum - enum: ["11.1", "11.7"] + enum: ["11.1", "11.7", "11.8"] cudnn: type: integer default: 8 machine: - image: ubuntu-2004-cuda-11.4:202110-01 + image: linux-cuda-11:default # docker_layer_caching: true - resource_class: gpu.nvidia.small + resource_class: gpu.nvidia.small.multi steps: - checkout - run: @@ -109,6 +109,12 @@ jobs: name: Clone Repos command: | git clone -b main --depth 1 ssh://git@github.com/open-mmlab/mmengine.git /home/circleci/mmengine + - run: + name: Install nvidia-container-toolkit and Restart Docker + command: | + sudo apt-get update + sudo apt-get install -y nvidia-container-toolkit + sudo systemctl restart docker - run: name: Build Docker image command: | diff --git a/mmdet/__init__.py b/mmdet/__init__.py index e9c1489c7e9..81cce10443b 100644 --- a/mmdet/__init__.py +++ b/mmdet/__init__.py @@ -6,7 +6,7 @@ from .version import __version__, version_info mmcv_minimum_version = '2.0.0rc4' -mmcv_maximum_version = '2.1.0' +mmcv_maximum_version = '3.0.0' mmcv_version = digit_version(mmcv.__version__) mmengine_minimum_version = '0.7.1' diff --git a/requirements/mminstall.txt b/requirements/mminstall.txt index 4213aa6bbd9..4039655b6a9 100644 --- a/requirements/mminstall.txt +++ b/requirements/mminstall.txt @@ -1,2 +1,2 @@ -mmcv>=2.0.0rc4,<2.1.0 +mmcv>=2.0.0rc4,<3.0.0 mmengine>=0.7.1,<1.0.0 diff --git a/tools/train.py b/tools/train.py index 177346a5a4d..7e5b71fbcae 100644 --- a/tools/train.py +++ b/tools/train.py @@ -1,11 +1,9 @@ # Copyright (c) OpenMMLab. All rights reserved. import argparse -import logging import os import os.path as osp from mmengine.config import Config, DictAction -from mmengine.logging import print_log from mmengine.registry import RUNNERS from mmengine.runner import Runner @@ -83,18 +81,8 @@ def main(): # enable automatic-mixed-precision training if args.amp is True: - optim_wrapper = cfg.optim_wrapper.type - if optim_wrapper == 'AmpOptimWrapper': - print_log( - 'AMP training is already enabled in your config.', - logger='current', - level=logging.WARNING) - else: - assert optim_wrapper == 'OptimWrapper', ( - '`--amp` is only supported when the optimizer wrapper type is ' - f'`OptimWrapper` but got {optim_wrapper}.') - cfg.optim_wrapper.type = 'AmpOptimWrapper' - cfg.optim_wrapper.loss_scale = 'dynamic' + cfg.optim_wrapper.type = 'AmpOptimWrapper' + cfg.optim_wrapper.loss_scale = 'dynamic' # enable automatically scaling LR if args.auto_scale_lr: From 9f4c3262c2d8c32c2b476a584d080bcc666336e0 Mon Sep 17 00:00:00 2001 From: ryylcc <85794259+ryylcc@users.noreply.github.com> Date: Thu, 12 Oct 2023 15:04:02 +0800 Subject: [PATCH 62/63] Update configs of Detic (#11017) --- projects/Detic_new/README.md | 44 +++++++++---------- ...ternet2_r50_fpn_4x_lvis-base_in21k-lvis.py | 16 ++++++- ...detic_centernet2_r50_fpn_4x_lvis_boxsup.py | 1 + ...c_centernet2_r50_fpn_4x_lvis_in21k-lvis.py | 11 ++++- 4 files changed, 46 insertions(+), 26 deletions(-) diff --git a/projects/Detic_new/README.md b/projects/Detic_new/README.md index 914ecd906d8..3c7714c36a9 100644 --- a/projects/Detic_new/README.md +++ b/projects/Detic_new/README.md @@ -28,7 +28,7 @@ It is recommended to download and extract the dataset somewhere outside the proj ### LVIS -LVIS dataset is adopted as box-labeled data, [LVIS](https://www.lvisdataset.org/) is available from official website or mirror. You need to generate `lvis_v1_train_norare.json` according to the [official prepare datasets](https://github.com/facebookresearch/Detic/blob/main/datasets/README.md#coco-and-lvis) for open-vocabulary LVIS, which removes the labels of 337 rare-class from training. The directory should be like this. +LVIS dataset is adopted as box-labeled data, [LVIS](https://www.lvisdataset.org/) is available from official website or mirror. You need to generate `lvis_v1_train_norare.json` according to the [official prepare datasets](https://github.com/facebookresearch/Detic/blob/main/datasets/README.md#coco-and-lvis) for open-vocabulary LVIS, which removes the labels of 337 rare-class from training. You can also download [lvis_v1_train_norare.json](https://download.openmmlab.com/mmdetection/v3.0/detic/data/lvis/annotations/lvis_v1_train_norare.json) from our backup. The directory should be like this. ```shell mmdetection @@ -60,7 +60,7 @@ mmdetection ### Metadata -`data/metadata/` is the preprocessed meta-data (included in the repo). Please follow the [official instruction](https://github.com/facebookresearch/Detic/blob/main/datasets/README.md#metadata) to pre-process the LVIS dataset. You will generate `lvis_v1_train_cat_info.json` for Federated loss, which contains the frequency of each category of training set of LVIS. In addition, ` lvis_v1_clip_a+cname.npy` is the pre-computed CLIP embeddings for each category of LVIS. The directory should be like this. +`data/metadata/` is the preprocessed meta-data (included in the repo). Please follow the [official instruction](https://github.com/facebookresearch/Detic/blob/main/datasets/README.md#metadata) to pre-process the LVIS dataset. You will generate `lvis_v1_train_cat_info.json` for Federated loss, which contains the frequency of each category of training set of LVIS. In addition, `lvis_v1_clip_a+cname.npy` is the pre-computed CLIP embeddings for each category of LVIS. You can also choose to directly download [lvis_v1_train_cat_info](https://download.openmmlab.com/mmdetection/v3.0/detic/data/metadata/lvis_v1_train_cat_info.json) and [lvis_v1_clip_a+cname.npy](https://download.openmmlab.com/mmdetection/v3.0/detic/data/metadata/lvis_v1_clip_a%2Bcname.npy) form our backup. The directory should be like this. ```shell mmdetection @@ -132,9 +132,9 @@ To train the baseline with box-supervised, run bash ./tools/dist_train.sh projects/Detic_new/detic_centernet2_r50_fpn_4x_lvis_boxsup.py 8 ``` -| Model (Config) | mask mAP | mask mAP(official) | mask mAP_rare | mask mAP_rare(officical) | Download | -| :---------------------------------------------------------------------------------------------: | :------: | :----------------: | :-----------: | :----------------------: | :------: | -| [detic_centernet2_r50_fpn_4x_lvis_boxsup](./configs/detic_centernet2_r50_fpn_4x_lvis_boxsup.py) | 31.6 | 31.5 | 26.6 | 25.6 | | +| Model (Config) | mask mAP | mask mAP(official) | mask mAP_rare | mask mAP_rare(officical) | +| :---------------------------------------------------------------------------------------------: | :------: | :----------------: | :-----------: | :----------------------: | +| [detic_centernet2_r50_fpn_4x_lvis_boxsup](./configs/detic_centernet2_r50_fpn_4x_lvis_boxsup.py) | 31.6 | 31.5 | 26.6 | 25.6 | #### Second stage @@ -190,25 +190,25 @@ To finetune the baseline model with image-labeled data, run: bash ./tools/dist_train.sh projects/Detic_new/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py 8 ``` -| Model (Config) | mask mAP | mask mAP(official) | mask mAP_rare | mask mAP_rare(officical) | Download | -| :-----------------------------------------------------------------------------------------------------: | :------: | :----------------: | :-----------: | :----------------------: | :------: | -| [detic_centernet2_r50_fpn_4x_lvis_in21k-lvis](./configs/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py) | 32.9 | 33.2 | 30.9 | 29.7 | | +| Model (Config) | mask mAP | mask mAP(official) | mask mAP_rare | mask mAP_rare(officical) | +| :-----------------------------------------------------------------------------------------------------: | :------: | :----------------: | :-----------: | :----------------------: | +| [detic_centernet2_r50_fpn_4x_lvis_in21k-lvis](./configs/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py) | 32.9 | 33.2 | 30.9 | 29.7 | #### Standard LVIS Results -| Model (Config) | mask mAP | mask mAP(official) | mask mAP_rare | mask mAP_rare(officical) | Download | -| :-----------------------------------------------------------------------------------------------------------: | :------: | :----------------: | :-----------: | :----------------------: | :------: | -| [detic_centernet2_r50_fpn_4x_lvis_boxsup](./configs/detic_centernet2_r50_fpn_4x_lvis_boxsup.py) | 31.6 | 31.5 | 26.6 | 25.6 | | -| [detic_centernet2_r50_fpn_4x_lvis_in21k-lvis](./configs/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py) | 32.9 | 33.2 | 30.9 | 29.7 | | -| [detic_centernet2_swin-b_fpn_4x_lvis_boxsup](./configs/detic_centernet2_swin-b_fpn_4x_lvis_boxsup.py) | 40.7 | 40.7 | 38.0 | 35.9 | | -| [detic_centernet2_swin-b_fpn_4x_lvis_in21k-lvis](./configs/detic_centernet2_swin-b_fpn_4x_lvis_in21k-lvis.py) | 41.7 | 41.7 | 41.7 | 41.7 | | +| Model (Config) | mask mAP | mask mAP(official) | mask mAP_rare | mask mAP_rare(officical) | Download | +| :-----------------------------------------------------------------------------------------------------------: | :------: | :----------------: | :-----------: | :----------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| [detic_centernet2_r50_fpn_4x_lvis_boxsup](./configs/detic_centernet2_r50_fpn_4x_lvis_boxsup.py) | 31.6 | 31.5 | 26.6 | 25.6 | [model](https://download.openmmlab.com/mmdetection/v3.0/detic/detic_centernet2_r50_fpn_4x_lvis_boxsup/detic_centernet2_r50_fpn_4x_lvis_boxsup_20230911_233514-54116677.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/detic/detic_centernet2_r50_fpn_4x_lvis_boxsup/detic_centernet2_r50_fpn_4x_lvis_boxsup_20230911_233514.log.json) | +| [detic_centernet2_r50_fpn_4x_lvis_in21k-lvis](./configs/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py) | 32.9 | 33.2 | 30.9 | 29.7 | [model](https://download.openmmlab.com/mmdetection/v3.0/detic/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis_20230912_040619-9e7a3258.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/detic/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis_20230912_040619.log.json) | +| [detic_centernet2_swin-b_fpn_4x_lvis_boxsup](./configs/detic_centernet2_swin-b_fpn_4x_lvis_boxsup.py) | 40.7 | 40.7 | 38.0 | 35.9 | [model](https://download.openmmlab.com/mmdetection/v3.0/detic/detic_centernet2_swin-b_fpn_4x_lvis_boxsup/detic_centernet2_swin-b_fpn_4x_lvis_boxsup_20230825_061737-328e85f9.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/detic/detic_centernet2_swin-b_fpn_4x_lvis_boxsup/detic_centernet2_swin-b_fpn_4x_lvis_boxsup_20230825_061737.log.json) | +| [detic_centernet2_swin-b_fpn_4x_lvis_in21k-lvis](./configs/detic_centernet2_swin-b_fpn_4x_lvis_in21k-lvis.py) | 41.7 | 41.7 | 41.7 | 41.7 | [model](https://download.openmmlab.com/mmdetection/v3.0/detic/detic_centernet2_swin-b_fpn_4x_lvis_in21k-lvis/detic_centernet2_swin-b_fpn_4x_lvis_in21k-lvis_20230926_235410-0c152391.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/detic/detic_centernet2_swin-b_fpn_4x_lvis_in21k-lvis/detic_centernet2_swin-b_fpn_4x_lvis_in21k-lvis_20230926_235410.log.json) | #### Open-vocabulary LVIS Results -| Model (Config) | mask mAP | mask mAP(official) | mask mAP_rare | mask mAP_rare(officical) | Download | -| :-------------------------------------------------------------------------------------------------------------: | :------: | :----------------: | :-----------: | :----------------------: | :------: | -| [detic_centernet2_r50_fpn_4x_lvisbase_boxsup](./configs/detic_centernet2_r50_fpn_4x_lvisbase_boxsup.py) | 30.4 | 30.2 | 16.2 | 16.4 | | -| [detic_centernet2_r50_fpn_4x_lvisbase_in21k-lvis](./configs/detic_centernet2_r50_fpn_4x_lvisbase_in21k-lvis.py) | 32.6 | 32.4 | 27.4 | 24.9 | | +| Model (Config) | mask mAP | mask mAP(official) | mask mAP_rare | mask mAP_rare(officical) | Download | +| :---------------------------------------------------------------------------------------------------------------: | :------: | :----------------: | :-----------: | :----------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| [detic_centernet2_r50_fpn_4x_lvis-base_boxsup](./configs/detic_centernet2_r50_fpn_4x_lvis-base_boxsup.py) | 30.4 | 30.2 | 16.2 | 16.4 | [model](https://download.openmmlab.com/mmdetection/v3.0/detic/detic_centernet2_r50_fpn_4x_lvis-base_boxsup/detic_centernet2_r50_fpn_4x_lvis-base_boxsup_20230921_180638-c1685ee2.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/detic/detic_centernet2_r50_fpn_4x_lvis-base_boxsup/detic_centernet2_r50_fpn_4x_lvis-base_boxsup_20230921_180638.log.json) | +| [detic_centernet2_r50_fpn_4x_lvis-base_in21k-lvis](./configs/detic_centernet2_r50_fpn_4x_lvis-base_in21k-lvis.py) | 32.6 | 32.4 | 27.4 | 24.9 | [model](https://download.openmmlab.com/mmdetection/v3.0/detic/detic_centernet2_r50_fpn_4x_lvis-base_in21k-lvis/detic_centernet2_r50_fpn_4x_lvis-base_in21k-lvis_20230925_014315-2d2cc8b7.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/detic/detic_centernet2_r50_fpn_4x_lvis-base_in21k-lvis/detic_centernet2_r50_fpn_4x_lvis-base_in21k-lvis_20230925_014315.log.json) | ### Testing @@ -224,10 +224,10 @@ python ./tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} The models are converted from the official model zoo. -| Model (Config) | mask mAP | mask mAP_novel | -| :-------------------------------------------------------------------------------------------------------------------: | :------: | :------------: | -| [detic_centernet2_swin-b_fpn_4x_lvisbase_boxsup](./configs/detic_centernet2_swin-b_fpn_4x_lvisbase_boxsup.py) | 38.4 | 21.9 | -| [detic_centernet2_swin-b_fpn_4x_lvisbase_in21k-lvis](./configs/detic_centernet2_swin-b_fpn_4x_lvisbase_in21k-lvis.py) | 40.7 | 34.0 | +| Model (Config) | mask mAP | mask mAP_novel | Download | +| :---------------------------------------------------------------------------------------------------------------------: | :------: | :------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| [detic_centernet2_swin-b_fpn_4x_lvis-base_boxsup](./configs/detic_centernet2_swin-b_fpn_4x_lvis-base_boxsup.py) | 38.4 | 21.9 | [model](https://download.openmmlab.com/mmdetection/v3.0/detic/detic_centernet2_swin-b_fpn_4x_lvis-base_boxsup/detic_centernet2_swin-b_fpn_4x_lvis-base_boxsup-481281c8.pth) | +| [detic_centernet2_swin-b_fpn_4x_lvis-base_in21k-lvis](./configs/detic_centernet2_swin-b_fpn_4x_lvis-base_in21k-lvis.py) | 40.7 | 34.0 | [model](https://download.openmmlab.com/mmdetection/v3.0/detic/detic_centernet2_swin-b_fpn_4x_lvis-base_in21k-lvis/detic_centernet2_swin-b_fpn_4x_lvis-base_in21k-lvis-ec91245d.pth) | ###### Note: diff --git a/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis-base_in21k-lvis.py b/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis-base_in21k-lvis.py index e8f34abd8ed..034acb6ebc4 100644 --- a/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis-base_in21k-lvis.py +++ b/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis-base_in21k-lvis.py @@ -1,5 +1,5 @@ _base_ = './detic_centernet2_r50_fpn_4x_lvis_boxsup.py' - +dataset_type = ['LVISV1Dataset', 'ImageNetLVISV1Dataset'] image_size_det = (640, 640) image_size_cls = (320, 320) @@ -52,7 +52,7 @@ dataset=dict( type='LVISV1Dataset', data_root='data/lvis/', - ann_file='annotations/lvis_v1_train.json', + ann_file='annotations/lvis_v1_train_norare.json', data_prefix=dict(img=''), filter_cfg=dict(filter_empty_gt=True, min_size=32), pipeline=train_pipeline_det, @@ -76,6 +76,18 @@ type='MultiDataAspectRatioBatchSampler', num_datasets=2), dataset=dict(type='ConcatDataset', datasets=[dataset_det, dataset_cls])) +param_scheduler = [ + dict( + type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, + end=1000), + dict( + type='CosineAnnealingLR', + begin=0, + by_epoch=False, + T_max=90000, + ) +] + load_from = './first_stage/detic_centernet2_r50_fpn_4x_lvis-base_boxsup.pth' find_unused_parameters = True diff --git a/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis_boxsup.py b/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis_boxsup.py index 96875aaede6..a11be374cc7 100644 --- a/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis_boxsup.py +++ b/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis_boxsup.py @@ -1,4 +1,5 @@ _base_ = 'mmdet::_base_/default_runtime.py' +dataset_type = 'LVISV1Dataset' custom_imports = dict( imports=['projects.Detic_new.detic'], allow_failed_imports=False) diff --git a/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py b/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py index 73a8f1b96a7..ce97ed6d589 100644 --- a/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py +++ b/projects/Detic_new/configs/detic_centernet2_r50_fpn_4x_lvis_in21k-lvis.py @@ -1,5 +1,5 @@ _base_ = './detic_centernet2_r50_fpn_4x_lvis_boxsup.py' - +dataset_type = ['LVISV1Dataset', 'ImageNetLVISV1Dataset'] image_size_det = (640, 640) image_size_cls = (320, 320) @@ -76,7 +76,14 @@ param_scheduler = [ dict( - type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, end=1000) + type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, + end=1000), + dict( + type='CosineAnnealingLR', + begin=0, + by_epoch=False, + T_max=90000, + ) ] load_from = './first_stage/detic_centernet2_r50_fpn_4x_lvis_boxsup.pth' From dfad04ca322cdb0467912ae5d8fbf4323277e6c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haian=20Huang=28=E6=B7=B1=E5=BA=A6=E7=9C=B8=29?= <1286304229@qq.com> Date: Thu, 12 Oct 2023 15:06:32 +0800 Subject: [PATCH 63/63] Bump version to v3.2.0 (#11029) --- README.md | 53 ++++++++++++++++++++++++---- README_zh-CN.md | 54 ++++++++++++++++++++++++---- docker/serve/Dockerfile | 2 +- docker/serve_cn/Dockerfile | 2 +- docs/en/notes/changelog.md | 68 ++++++++++++++++++++++++++++++++++++ docs/en/notes/faq.md | 3 +- docs/zh_cn/notes/faq.md | 3 +- mmdet/__init__.py | 2 +- requirements/mminstall.txt | 2 +- requirements/readthedocs.txt | 2 +- 10 files changed, 170 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 6070510e7d1..09e20cf70fe 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,52 @@ Apart from MMDetection, we also released [MMEngine](https://github.com/open-mmla ### Highlight +**v3.2.0** was released in 12/10/2023: + +**1. Detection Transformer SOTA Model Collection** +(1) Supported four updated and stronger SOTA Transformer models: [DDQ](configs/ddq/README.md), [CO-DETR](projects/CO-DETR/README.md), [AlignDETR](projects/AlignDETR/README.md), and [H-DINO](projects/HDINO/README.md). +(2) Based on CO-DETR, MMDet released a model with a COCO performance of 64.1 mAP. +(3) Algorithms such as DINO support `AMP/Checkpoint/FrozenBN`, which can effectively reduce memory usage. + +**2. [Comprehensive Performance Comparison between CNN and Transformer](<(projects/RF100-Benchmark/README.md)>)** +RF100 consists of a dataset collection of 100 real-world datasets, including 7 domains. It can be used to assess the performance differences of Transformer models like DINO and CNN-based algorithms under different scenarios and data volumes. Users can utilize this benchmark to quickly evaluate the robustness of their algorithms in various scenarios. + +
    + +
    + +**3. Support for [GLIP](configs/glip/README.md) and [Grounding DINO](configs/grounding_dino/README.md) fine-tuning, the only algorithm library that supports Grounding DINO fine-tuning** +The Grounding DINO algorithm in MMDet is the only library that supports fine-tuning. Its performance is one point higher than the official version, and of course, GLIP also outperforms the official version. +We also provide a detailed process for training and evaluating Grounding DINO on custom datasets. Everyone is welcome to give it a try. + +| Model | Backbone | Style | COCO mAP | Official COCO mAP | +| :----------------: | :------: | :-------: | :--------: | :---------------: | +| Grounding DINO-T | Swin-T | Zero-shot | 48.5 | 48.4 | +| Grounding DINO-T | Swin-T | Finetune | 58.1(+0.9) | 57.2 | +| Grounding DINO-B | Swin-B | Zero-shot | 56.9 | 56.7 | +| Grounding DINO-B | Swin-B | Finetune | 59.7 | | +| Grounding DINO-R50 | R50 | Scratch | 48.9(+0.8) | 48.1 | + +**4. Support for the open-vocabulary detection algorithm [Detic](projects/Detic_new/README.md) and multi-dataset joint training.** +**5. Training detection models using [FSDP and DeepSpeed](<(projects/example_largemodel/README.md)>).** + +| ID | AMP | GC of Backbone | GC of Encoder | FSDP | Peak Mem (GB) | Iter Time (s) | +| :-: | :-: | :------------: | :-----------: | :--: | :-----------: | :-----------: | +| 1 | | | | | 49 (A100) | 0.9 | +| 2 | √ | | | | 39 (A100) | 1.2 | +| 3 | | √ | | | 33 (A100) | 1.1 | +| 4 | √ | √ | | | 25 (A100) | 1.3 | +| 5 | | √ | √ | | 18 | 2.2 | +| 6 | √ | √ | √ | | 13 | 1.6 | +| 7 | | √ | √ | √ | 14 | 2.9 | +| 8 | √ | √ | √ | √ | 8.5 | 2.4 | + +**6. Support for the [V3Det](configs/v3det/README.md) dataset, a large-scale detection dataset with over 13,000 categories.** + +
    + +
    + We are excited to announce our latest work on real-time object recognition tasks, **RTMDet**, a family of fully convolutional single-stage detectors. RTMDet not only achieves the best parameter-accuracy trade-off on object detection from tiny to extra-large model sizes but also obtains new state-of-the-art performance on instance segmentation and rotated object detection tasks. Details can be found in the [technical report](https://arxiv.org/abs/2212.07784). Pre-trained models are [here](configs/rtmdet). [![PWC](https://img.shields.io/endpoint.svg?url=https://paperswithcode.com/badge/rtmdet-an-empirical-study-of-designing-real/real-time-instance-segmentation-on-mscoco)](https://paperswithcode.com/sota/real-time-instance-segmentation-on-mscoco?p=rtmdet-an-empirical-study-of-designing-real) @@ -119,13 +165,6 @@ We are excited to announce our latest work on real-time object recognition tasks -**v3.1.0** was released in 30/6/2023: - -- Supports tracking algorithms including multi-object tracking (MOT) algorithms SORT, DeepSORT, StrongSORT, OCSORT, ByteTrack, QDTrack, and video instance segmentation (VIS) algorithm MaskTrackRCNN, Mask2Former-VIS. -- Support [ViTDet](projects/ViTDet) -- Supports inference and evaluation of multimodal algorithms [GLIP](configs/glip) and [XDecoder](projects/XDecoder), and also supports datasets such as COCO semantic segmentation, COCO Caption, ADE20k general segmentation, and RefCOCO. GLIP fine-tuning will be supported in the future. -- Provides a [gradio demo](https://github.com/open-mmlab/mmdetection/blob/dev-3.x/projects/gradio_demo/README.md) for image type tasks of MMDetection, making it easy for users to experience. - ## Installation Please refer to [Installation](https://mmdetection.readthedocs.io/en/latest/get_started.html) for installation instructions. diff --git a/README_zh-CN.md b/README_zh-CN.md index 6b27e6bb32b..ccf1cbf0082 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -102,6 +102,53 @@ MMDetection 是一个基于 PyTorch 的目标检测开源工具箱。它是 [Ope ### 亮点 +**v3.2.0** 版本已经在 2023.10.12 发布: + +**1. 检测 Transformer SOTA 模型大合集** +(1) 支持了 [DDQ](configs/ddq/README.md)、[CO-DETR](projects/CO-DETR/README.md)、[AlignDETR](projects/AlignDETR/README.md) 和 [H-DINO](projects/HDINO/README.md) 4 个更新更强的 SOTA Transformer 模型 +(2) 基于 CO-DETR, MMDet 中发布了 COCO 性能为 64.1 mAP 的模型 +(3) DINO 等算法支持 AMP/Checkpoint/FrozenBN,可以有效降低显存 + +**2. [提供了全面的 CNN 和 Transformer 的性能对比](projects/RF100-Benchmark/README_zh-CN.md)** +RF100 是由 100 个现实收集的数据集组成,包括 7 个域,可以验证 DINO 等 Transformer 模型和 CNN 类算法在不同场景不同数据量下的性能差异。用户可以用这个 Benchmark 快速验证自己的算法在不同场景下的鲁棒性。 + +
    + +
    + +**3. 支持了 [GLIP](configs/glip/README.md) 和 [Grounding DINO](configs/grounding_dino/README.md) 微调,全网唯一支持 Grounding DINO 微调** +MMDet 中的 Grounding DINO 是全网唯一支持微调的算法库,且性能高于官方 1 个点,当然 GLIP 也比官方高。 +我们还提供了详细的 Grounding DINO 在自定义数据集上训练评估的流程,欢迎大家试用。 + +| Model | Backbone | Style | COCO mAP | Official COCO mAP | +| :----------------: | :------: | :-------: | :--------: | :---------------: | +| Grounding DINO-T | Swin-T | Zero-shot | 48.5 | 48.4 | +| Grounding DINO-T | Swin-T | Finetune | 58.1(+0.9) | 57.2 | +| Grounding DINO-B | Swin-B | Zero-shot | 56.9 | 56.7 | +| Grounding DINO-B | Swin-B | Finetune | 59.7 | | +| Grounding DINO-R50 | R50 | Scratch | 48.9(+0.8) | 48.1 | + +**4. 支持开放词汇检测算法 [Detic](projects/Detic_new/README.md) 并提供多数据集联合训练可能** + +**5. 轻松使用 [FSDP 和 DeepSpeed 训练检测模型](projects/example_largemodel/README_zh-CN.md)** + +| ID | AMP | GC of Backbone | GC of Encoder | FSDP | Peak Mem (GB) | Iter Time (s) | +| :-: | :-: | :------------: | :-----------: | :--: | :-----------: | :-----------: | +| 1 | | | | | 49 (A100) | 0.9 | +| 2 | √ | | | | 39 (A100) | 1.2 | +| 3 | | √ | | | 33 (A100) | 1.1 | +| 4 | √ | √ | | | 25 (A100) | 1.3 | +| 5 | | √ | √ | | 18 | 2.2 | +| 6 | √ | √ | √ | | 13 | 1.6 | +| 7 | | √ | √ | √ | 14 | 2.9 | +| 8 | √ | √ | √ | √ | 8.5 | 2.4 | + +**6. 支持了 [V3Det](configs/v3det/README.md) 1.3w+ 类别的超大词汇检测数据集** + +
    + +
    + 我们很高兴向大家介绍我们在实时目标识别任务方面的最新成果 RTMDet,包含了一系列的全卷积单阶段检测模型。 RTMDet 不仅在从 tiny 到 extra-large 尺寸的目标检测模型上实现了最佳的参数量和精度的平衡,而且在实时实例分割和旋转目标检测任务上取得了最先进的成果。 更多细节请参阅[技术报告](https://arxiv.org/abs/2212.07784)。 预训练模型可以在[这里](configs/rtmdet)找到。 [![PWC](https://img.shields.io/endpoint.svg?url=https://paperswithcode.com/badge/rtmdet-an-empirical-study-of-designing-real/real-time-instance-segmentation-on-mscoco)](https://paperswithcode.com/sota/real-time-instance-segmentation-on-mscoco?p=rtmdet-an-empirical-study-of-designing-real) @@ -118,13 +165,6 @@ MMDetection 是一个基于 PyTorch 的目标检测开源工具箱。它是 [Ope -**v3.1.0** 版本已经在 2023.6.30 发布: - -- 支持 Tracking 类算法,包括多目标跟踪 MOT 算法 SORT、DeepSORT、StrongSORT、OCSORT、ByteTrack、QDTrack 和视频实例分割 VIS 算法 MaskTrackRCNN、Mask2Former-VIS。 -- 支持 [ViTDet](projects/ViTDet) -- 支持多模态开放检测算法 [GLIP](configs/glip) 和 [XDecoder](projects/XDecoder) 推理和评估,并同时支持了 COCO 语义分割、COCO Caption、ADE20k 通用分割、RefCOCO 等数据集。后续将支持 GLIP 微调 -- 提供了包括 MMDetection 图片任务的 [gradio demo](https://github.com/open-mmlab/mmdetection/blob/dev-3.x/projects/gradio_demo/README.md),方便用户快速体验 - ## 安装 请参考[快速入门文档](https://mmdetection.readthedocs.io/zh_CN/latest/get_started.html)进行安装。 diff --git a/docker/serve/Dockerfile b/docker/serve/Dockerfile index 711a4fc9aae..872918972f0 100644 --- a/docker/serve/Dockerfile +++ b/docker/serve/Dockerfile @@ -4,7 +4,7 @@ ARG CUDNN="8" FROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel ARG MMCV="2.0.0rc4" -ARG MMDET="3.1.0" +ARG MMDET="3.2.0" ENV PYTHONUNBUFFERED TRUE diff --git a/docker/serve_cn/Dockerfile b/docker/serve_cn/Dockerfile index a1cab644a82..510906432b7 100644 --- a/docker/serve_cn/Dockerfile +++ b/docker/serve_cn/Dockerfile @@ -4,7 +4,7 @@ ARG CUDNN="8" FROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel ARG MMCV="2.0.0rc4" -ARG MMDET="3.1.0" +ARG MMDET="3.2.0" ENV PYTHONUNBUFFERED TRUE diff --git a/docs/en/notes/changelog.md b/docs/en/notes/changelog.md index 3f6b0ab8488..4d48a0a0d22 100644 --- a/docs/en/notes/changelog.md +++ b/docs/en/notes/changelog.md @@ -1,5 +1,73 @@ # Changelog of v3.x +## v3.1.0 (12/10/2023) + +### Highlights + +**(1) Detection Transformer SOTA Model Collection** + +- Supported four updated and stronger SOTA Transformer models: DDQ, CO-DETR, AlignDETR, and H-DINO. +- Based on CO-DETR, MMDet released a model with a COCO performance of 64.1 mAP. +- Algorithms such as DINO support AMP/Checkpoint/FrozenBN, which can effectively reduce memory usage. + +**(2) Comprehensive Performance Comparison between CNN and Transformer** + +RF100 consists of a dataset collection of 100 real-world datasets, including 7 domains. It can be used to assess the performance differences of Transformer models like DINO and CNN-based algorithms under different scenarios and data volumes. Users can utilize this benchmark to quickly evaluate the robustness of their algorithms in various scenarios. + +**(3) Support for GLIP and Grounding DINO fine-tuning, the only algorithm library that supports Grounding DINO fine-tuning** + +The Grounding DINO algorithm in MMDet is the only library that supports fine-tuning. Its performance is one point higher than the official version, and of course, GLIP also outperforms the official version. +We also provide a detailed process for training and evaluating Grounding DINO on custom datasets. Everyone is welcome to give it a try. + +**(4) Support for the open-vocabulary detection algorithm Detic and multi-dataset joint training.** + +**(5) Training detection models using FSDP and DeepSpeed.** + +**(6) Support for the V3Det dataset, a large-scale detection dataset with over 13,000 categories.** + +### New Features + +- Support CO-DETR/DDQ/AlignDETR/H-DINO +- Support GLIP and Grounding DINO fine-tuning +- Support Detic and Multi-Datasets training (#10926) +- Support V3Det and benchmark (#10938) +- Support Roboflow 100 Benchmark (#10915) +- Add custom dataset of grounding dino (#11012) +- Release RTMDet-X p6 (#10993) +- Support AMP of DINO (#10827) +- Support FrozenBN (#10845) +- Add new configuration files for `QDTrack/DETR/RTMDet/MaskRCNN/DINO/DeformableDETR/MaskFormer` algorithm +- Add a new script to support the WBF (#10808) +- Add `large_image_demo` (#10719) +- Support download dataset from OpenXLab (#10799) +- Update to support torch2onnx for DETR series models (#10910) +- Translation into Chinese of an English document (#10744, #10756, #10805, #10848) + +### Bug Fixes + +- Fix name error in DETR metafile.yml (#10595) +- Fix device of the tensors in `set_nms` (#10574) +- Remove some unicode chars from `en/` docs (#10648) +- Fix download dataset with mim script. (#10727) +- Fix export to torchserve (#10694) +- Fix typo in `mask-rcnn_r50_fpn_1x-wandb_coco` (#10757) +- Fix `eval_recalls` error in `voc_metric` (#10770) +- Fix torch version comparison (#10934) +- Fix incorrect behavior to access train pipeline from ConcatDataset in `analyze_results.py` (#11004) + +### Improvements + +- Update `useful_tools.md` (#10587) +- Update Instance segmentation Tutorial (#10711) +- Update `train.py` to compat with new config (#11025) +- Support `torch2onnx` for maskformer series (#10782) + +### Contributors + +A total of 36 developers contributed to this release. + +Thank @YQisme, @nskostas, @max-unfinity, @evdcush, @Xiangxu-0103, @ZhaoCake, @RangeKing, @captainIT, @ODAncona, @aaronzs, @zeyuanyin, @gotjd709, @Musiyuan, @YanxingLiu, @RunningLeon, @ytzfhqs, @zhangzhidaSunny, @yeungkong, @crazysteeaam, @timerring, @okotaku, @apatsekin, @Morty-Xu, @Markson-Young, @ZhaoQiiii, @Kuro96, @PhoenixZ810, @yhcao6, @myownskyW7, @jiongjiongli, @Johnson-Wang, @ryylcc, @guyleaf, @agpeshal, @SimonGuoNjust, @hhaAndroid + ## v3.1.0 (30/6/2023) ### Highlights diff --git a/docs/en/notes/faq.md b/docs/en/notes/faq.md index d8205cf555e..9e3c1a7852b 100644 --- a/docs/en/notes/faq.md +++ b/docs/en/notes/faq.md @@ -46,7 +46,8 @@ Compatible MMDetection, MMEngine, and MMCV versions are shown as below. Please c | MMDetection version | MMCV version | MMEngine version | | :-----------------: | :---------------------: | :----------------------: | -| main | mmcv>=2.0.0, \<2.1.0 | mmengine>=0.7.1, \<1.0.0 | +| main | mmcv>=2.0.0, \<2.2.0 | mmengine>=0.7.1, \<1.0.0 | +| 3.2.0 | mmcv>=2.0.0, \<2.2.0 | mmengine>=0.7.1, \<1.0.0 | | 3.1.0 | mmcv>=2.0.0, \<2.1.0 | mmengine>=0.7.1, \<1.0.0 | | 3.0.0 | mmcv>=2.0.0, \<2.1.0 | mmengine>=0.7.1, \<1.0.0 | | 3.0.0rc6 | mmcv>=2.0.0rc4, \<2.1.0 | mmengine>=0.6.0, \<1.0.0 | diff --git a/docs/zh_cn/notes/faq.md b/docs/zh_cn/notes/faq.md index 67e2e42968a..8268bd11562 100644 --- a/docs/zh_cn/notes/faq.md +++ b/docs/zh_cn/notes/faq.md @@ -46,7 +46,8 @@ export DYNAMO_CACHE_SIZE_LIMIT = 4 | MMDetection 版本 | MMCV 版本 | MMEngine 版本 | | :--------------: | :---------------------: | :----------------------: | - | main | mmcv>=2.0.0, \<2.1.0 | mmengine>=0.7.1, \<1.0.0 | + | main | mmcv>=2.0.0, \<2.2.0 | mmengine>=0.7.1, \<1.0.0 | + | 3.2.0 | mmcv>=2.0.0, \<2.2.0 | mmengine>=0.7.1, \<1.0.0 | | 3.1.0 | mmcv>=2.0.0, \<2.1.0 | mmengine>=0.7.1, \<1.0.0 | | 3.0.0 | mmcv>=2.0.0, \<2.1.0 | mmengine>=0.7.1, \<1.0.0 | | 3.0.0rc6 | mmcv>=2.0.0rc4, \<2.1.0 | mmengine>=0.6.0, \<1.0.0 | diff --git a/mmdet/__init__.py b/mmdet/__init__.py index 81cce10443b..3ac884ac8b4 100644 --- a/mmdet/__init__.py +++ b/mmdet/__init__.py @@ -6,7 +6,7 @@ from .version import __version__, version_info mmcv_minimum_version = '2.0.0rc4' -mmcv_maximum_version = '3.0.0' +mmcv_maximum_version = '2.2.0' mmcv_version = digit_version(mmcv.__version__) mmengine_minimum_version = '0.7.1' diff --git a/requirements/mminstall.txt b/requirements/mminstall.txt index 4039655b6a9..386fc556965 100644 --- a/requirements/mminstall.txt +++ b/requirements/mminstall.txt @@ -1,2 +1,2 @@ -mmcv>=2.0.0rc4,<3.0.0 +mmcv>=2.0.0rc4,<2.2.0 mmengine>=0.7.1,<1.0.0 diff --git a/requirements/readthedocs.txt b/requirements/readthedocs.txt index 10183163073..c319331a042 100644 --- a/requirements/readthedocs.txt +++ b/requirements/readthedocs.txt @@ -1,4 +1,4 @@ -mmcv>=2.0.0rc4,<2.1.0 +mmcv>=2.0.0rc4,<2.2.0 mmengine>=0.7.1,<1.0.0 scipy torch